diff --git a/src/common/turb/modd_param_mfshalln.F90 b/src/common/turb/modd_param_mfshalln.F90 index 6c50a6fe6587be13a1ff4cb86289877e777c2e4e..a4724bcc176a2fc67855d781dc54eb89890da0d0 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 825ef4c6ece17b14f3bd805aae42f48629484c51..43e3362fb9250ad7846bc4940014009e4421168a 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