From d2f941918efdde9458443b0461e7bd9d3889c1d9 Mon Sep 17 00:00:00 2001 From: Quentin Rodier <quentin.rodier@meteo.fr> Date: Tue, 12 Sep 2023 16:47:45 +0200 Subject: [PATCH] Quentin 12/09/2023: add LVERLIMUP vertical limitation of updraft correction (issue #38) --- src/common/turb/modd_param_mfshalln.F90 | 10 ++++++++-- src/common/turb/mode_compute_updraft.F90 | 16 +++++++++++++--- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/common/turb/modd_param_mfshalln.F90 b/src/common/turb/modd_param_mfshalln.F90 index 6c50a6fe6..a4724bcc1 100644 --- a/src/common/turb/modd_param_mfshalln.F90 +++ b/src/common/turb/modd_param_mfshalln.F90 @@ -82,6 +82,7 @@ REAL :: XGZ !< Tuning of the surface initialisation for Grey Zo ! LOGICAL :: LTHETAS_MF !< .TRUE. to use ThetaS1 instead of ThetaL REAL :: XLAMBDA_MF !< Thermodynamic parameter: Lambda to compute ThetaS1 from ThetaL +LOGICAL :: LVERLIMUP !< .TRUE. to use correction on vertical limitation of updraft (issue #38 PHYEX) END TYPE PARAM_MFSHALL_t @@ -119,13 +120,15 @@ REAL, POINTER :: XR=>NULL() LOGICAL, POINTER :: LTHETAS_MF=>NULL() REAL, POINTER :: XLAMBDA_MF=>NULL() LOGICAL, POINTER :: LGZ=>NULL() -REAL, POINTER :: XGZ=>NULL() +REAL, POINTER :: XGZ=>NULL() +LOGICAL, POINTER :: LVERLIMUP=>NULL() ! NAMELIST/NAM_PARAM_MFSHALLn/XIMPL_MF,CMF_UPDRAFT,CMF_CLOUD,LMIXUV,LMF_FLX,& XALP_PERT,XABUO,XBENTR,XBDETR,XCMF,XENTR_MF,& XCRAD_MF,XENTR_DRY,XDETR_DRY,XDETR_LUP,XKCF_MF,& XKRC_MF,XTAUSIGMF,XPRES_UV,XALPHA_MF,XSIGMA_MF,& - XFRAC_UP_MAX,XA1,XB,XC,XBETA1,XR,LTHETAS_MF,LGZ,XGZ + XFRAC_UP_MAX,XA1,XB,XC,XBETA1,XR,LTHETAS_MF,LGZ,XGZ,& + LVERLIMUP ! !------------------------------------------------------------------------------- ! @@ -176,6 +179,7 @@ LTHETAS_MF=>PARAM_MFSHALL_MODEL(KTO)%LTHETAS_MF XLAMBDA_MF=>PARAM_MFSHALL_MODEL(KTO)%XLAMBDA_MF LGZ=>PARAM_MFSHALL_MODEL(KTO)%LGZ XGZ=>PARAM_MFSHALL_MODEL(KTO)%XGZ +LVERLIMUP=>PARAM_MFSHALL_MODEL(KTO)%LVERLIMUP ! ENDIF ! @@ -285,6 +289,8 @@ IF(LLDEFAULTVAL) THEN XLAMBDA_MF=0. LGZ=.FALSE. XGZ=1.83 ! between 1.83 and 1.33 + LVERLIMUP=.FALSE. + IF(HPROGRAM=='MESONH') LVERLIMUP=.TRUE. ENDIF ! !* 2. NAMELIST diff --git a/src/common/turb/mode_compute_updraft.F90 b/src/common/turb/mode_compute_updraft.F90 index 825ef4c6e..43e3362fb 100644 --- a/src/common/turb/mode_compute_updraft.F90 +++ b/src/common/turb/mode_compute_updraft.F90 @@ -190,7 +190,7 @@ REAL :: ZTMAX,ZRMAX ! control value REAL, DIMENSION(D%NIJT) :: ZSURF REAL, DIMENSION(D%NIJT,D%NKT) :: ZSHEAR,ZDUDZ,ZDVDZ ! vertical wind shear ! -REAL, DIMENSION(D%NIJT,D%NKT) :: ZWK +REAL, DIMENSION(D%NIJT,D%NKT) :: ZWK, KDEPTH REAL, DIMENSION(D%NIJT,16) :: ZBUF ! REAL(KIND=JPHOOK) :: ZHOOK_HANDLE @@ -672,14 +672,24 @@ IF(OENTR_DETR) THEN DO JIJ=IIJB,IIJE PDEPTH(JIJ) = MAX(0., PZZ(JIJ,KKCTL(JIJ)) - PZZ(JIJ,KKLCL(JIJ)) ) END DO - + IF(PARAMMF%LVERLIMUP) THEN + DO JK=1,IKT + DO JIJ=IIJB,IIJE + KDEPTH(JIJ,JK) = MIN(MAX(0., PZZ(JIJ,JK) - PZZ(JIJ,KKLCL(JIJ)) ), PDEPTH(JIJ)) + END DO + END DO + END IF !$mnh_expand_array(JIJ=IIJB:IIJE) GWORK1(IIJB:IIJE)= (GTESTLCL(IIJB:IIJE) .AND. (PDEPTH(IIJB:IIJE) > ZDEPTH_MAX1) ) !$mnh_end_expand_array(JIJ=IIJB:IIJE) DO JK=1,IKT !$mnh_expand_array(JIJ=IIJB:IIJE) GWORK2(IIJB:IIJE,JK) = GWORK1(IIJB:IIJE) - ZCOEF(IIJB:IIJE,JK) = (1.-(PDEPTH(IIJB:IIJE)-ZDEPTH_MAX1)/(ZDEPTH_MAX2-ZDEPTH_MAX1)) + IF(PARAMMF%LVERLIMUP) THEN + ZCOEF(IIJB:IIJE,JK) = (1.-(KDEPTH(IIJB:IIJE,JK)-ZDEPTH_MAX1)/(ZDEPTH_MAX2-ZDEPTH_MAX1)) + ELSE + ZCOEF(IIJB:IIJE,JK) = (1.-(PDEPTH(IIJB:IIJE)-ZDEPTH_MAX1)/(ZDEPTH_MAX2-ZDEPTH_MAX1)) + END IF ZCOEF(IIJB:IIJE,JK)=MIN(MAX(ZCOEF(IIJB:IIJE,JK),0.),1.) !$mnh_end_expand_array(JIJ=IIJB:IIJE) ENDDO -- GitLab