From 733f1011d61fdd259800d7f7ab7081e32e8a1850 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Riette?= <sebastien.riette@meteo.fr> Date: Tue, 12 Apr 2022 11:42:12 +0200 Subject: [PATCH] S. Riette 12/04/2022 Correction in compute_pdf and ice4_slow Original code contained a bug (autoconversion ri->rs was not set to 0 if ldsoft when ri content gets lower than the threshold). Introducing REPRO48 in ice4_slow allows to suppress the one introduced in compute_pdf to compensate. --- docs/TODO | 23 ++++++++++------------ src/common/micro/mode_ice4_compute_pdf.F90 | 12 ----------- src/common/micro/mode_ice4_slow.F90 | 11 ++++++++--- 3 files changed, 18 insertions(+), 28 deletions(-) diff --git a/docs/TODO b/docs/TODO index 3d2b89449..d90b2504c 100644 --- a/docs/TODO +++ b/docs/TODO @@ -42,19 +42,16 @@ Pb identifiés à corriger plus tard: sont relatifs à la boucle IMICRO et que les calculs faits en debut de routine ne concernent qu'une partie des points => à corriger -- seules quelques options sont testées avec les cas test (par exemple, il faudrait tester RMC01 mais - l'option n'est pas remontée en namelist) -- les options CMF_CLOUD='STAT' et LOSIGAMS=.FALSE. semblent cassées en 48 original -- arome/ini_cmfshall devrait s'appeler ini_param_mfshall -- th_r_from_thl_rt appelée partout, il faudrait limiter à OTEST -- la recompilation complète d'AROME n'est pas testée -- il faudrait inclure un cas test plus conséquent en taille au moins sur belenos -- doute sur le codage de MODD_PRECISION -- appel à abort à travers print_msg non testé -- lignes vides ajoutées après les macros mnh_expand -- indentation inorrecte dans les blocs mnh_expand -- sedimentation momentum non branchée (et à trasformer comme sedim_stat) -- si possible, modifier ice4_sedimentation_split* dans le même esprit que stat + - seules quelques options sont testées avec les cas test (par exemple, il faudrait tester RMC01 mais + l'option n'est pas remontée en namelist) + - les options CMF_CLOUD='STAT' et LOSIGAMS=.FALSE. semblent cassées en 48 original + - arome/ini_cmfshall devrait s'appeler ini_param_mfshall + - th_r_from_thl_rt appelée partout, il faudrait limiter à OTEST + - doute sur le codage de MODD_PRECISION + - appel à abort à travers print_msg non testé + - indentation inorrecte dans les blocs mnh_expand + - sedimentation momentum non branchée (et à trasformer comme sedim_stat) + - si possible, modifier ice4_sedimentation_split* dans le même esprit que stat Répertoire arome/ext et mesonh/ext contiennent les codes non PHYEX qu'il faut modifier dans le pack pour qu'il puisse être compilé. Ce répertoire devra être vidé à la fin du phasage, les modifications nécessaires ayadevront avoir été fournies par ailleurs diff --git a/src/common/micro/mode_ice4_compute_pdf.F90 b/src/common/micro/mode_ice4_compute_pdf.F90 index 942c65c25..b5a20fc87 100644 --- a/src/common/micro/mode_ice4_compute_pdf.F90 +++ b/src/common/micro/mode_ice4_compute_pdf.F90 @@ -248,17 +248,6 @@ ENDIF !Ice water split between high and low content part is done according to autoconversion option ZCRIAUTI(:)=MIN(XCRIAUTI,10**(XACRIAUTI*(PT(:)-XTT)+XBCRIAUTI)) ! Autoconversion ri threshold IF(HSUBG_AUCV_RI=='NONE') THEN - - -!La raison de la non reproduction n'est pas comprise avec certitude -!Il faudra vérifier que le code fait toujours ce qui est attendu -!une fois tous les éléments assemblés -#ifdef REPRO48 - PHLI_HCF(:)=1. - PHLI_LCF(:)=0. - PHLI_HRI(:)=PRIT(:) - PHLI_LRI(:)=0. -#else !Cloud water is entirely in low or high part WHERE(PRIT(:)>ZCRIAUTI(:)) PHLI_HCF(:)=1. @@ -276,7 +265,6 @@ IF(HSUBG_AUCV_RI=='NONE') THEN PHLI_HRI(:)=0. PHLI_LRI(:)=0. END WHERE -#endif ELSEIF(HSUBG_AUCV_RI=='CLFR') THEN !Cloud water is only in the cloudy part and entirely in low or high part WHERE(PCF(:)>0. .AND. PRIT(:)>ZCRIAUTI(:)*PCF(:)) diff --git a/src/common/micro/mode_ice4_slow.F90 b/src/common/micro/mode_ice4_slow.F90 index d42821906..8487ef858 100644 --- a/src/common/micro/mode_ice4_slow.F90 +++ b/src/common/micro/mode_ice4_slow.F90 @@ -167,9 +167,15 @@ ENDIF !* 3.4.5 compute the autoconversion of r_i for r_s production: RIAUTS ! DO JL=1, KSIZE +#ifdef REPRO48 + !This was wrong because, with this formulation and in the LDSOFT case, PRIAUTS + !was not set to 0 when ri is inferior to the autoconversion threshold + ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(4)-PRIT(JL))) * & ! PRIT(:)>XRTMIN(4) + &PCOMPUTE(JL) +#else ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(4)-PHLI_HRI(JL))) * & ! PHLI_HRI(:)>XRTMIN(4) - &MAX(0., -SIGN(1., 1.E-20-PHLI_HCF(JL))) * & ! PHLI_HCF(:) .GT. 1.E-20 &PCOMPUTE(JL) +#endif ENDDO IF(LDSOFT) THEN DO JL=1, KSIZE @@ -181,8 +187,7 @@ ELSE ZCRIAUTI(:)=MIN(XCRIAUTI,10**(XACRIAUTI*(PT(:)-XTT)+XBCRIAUTI)) WHERE(ZMASK(:)==1.) PRIAUTS(:) = XTIMAUTI * EXP( XTEXAUTI*(PT(:)-XTT) ) & - * MAX( PHLI_HRI(:)/PHLI_HCF(:)-ZCRIAUTI(:),0.0 ) - PRIAUTS(:) = PHLI_HCF(:)*PRIAUTS(:) + * MAX(PHLI_HRI(:)-ZCRIAUTI(:)*PHLI_HCF(:), 0.) END WHERE ENDIF ! -- GitLab