diff --git a/docs/TODO b/docs/TODO index b515f177423cec09fbf2e8d7ffdb3832d0c25f7e..ba3cf158895eb8e06b43759cdb5aa99cc9f1abf0 100644 --- a/docs/TODO +++ b/docs/TODO @@ -50,7 +50,6 @@ Pb identifiés à corriger plus tard: - si possible, modifier ice4_sedimentation_split* dans le même esprit que stat - La taille du buffer utilisé pour th_r_from_thl_rt doit être mise en module et utilisée pour déclarer le buffer dans les routines appelantes et dans th_r_from_thl_rt - - shallow_mf_pack devrait être récrit pour appeler directement shallow_mf sans recopier les tableaux pour les changer de forme - rain_ice: - séparer l'avance temporelle du découpage en sous-blocs en créant une couche driver supplémentaire. Cette couche pourrait avoir différentes implémentations (filtre LLMICRO seul, filtre LLMICRO + découpage en sous-blocs, filtre LLMICR diff --git a/src/arome/ext/apl_arome.F90 b/src/arome/ext/apl_arome.F90 index e3e8f9c1b0b44cf24cdf9e3617652731dc91e794..fc8e5a96dbb4b40e45947971cb6ea4450da5f8e6 100644 --- a/src/arome/ext/apl_arome.F90 +++ b/src/arome/ext/apl_arome.F90 @@ -2777,8 +2777,8 @@ IF (LMFSHAL) THEN & PSVM=ZSVM_, PDUDT_MF=ZMFUS_, PDVDT_MF=ZMFVS_, PDTHLDT_MF=ZTHLS_, PDRTDT_MF=ZRTS_, PDSVDT_MF=ZSVXXX_, & & PSIGMF=ZSIGMF_, PRC_MF=ZRC_MF_, PRI_MF=ZRI_MF_, PCF_MF=ZCF_MF_, PFLXZTHVMF=ZARG_FLXZTHVMF_, PTHL_UP=ZTHETAL_UP_, & & PRT_UP= ZRT_UP_, PRV_UP=ZZRV_UP_, PRC_UP=ZRC_UP_, PRI_UP=ZRI_UP_, PU_UP=ZZU_UP_, PV_UP=ZZV_UP_, & - & PTHV_UP=ZTHETAV_UP_, PW_UP=ZZW_UP_, PFRAC_UP=ZZFRAC_UP_, PEMF=ZMF_UP__(:, 1:YDCPG_OPTS%KFLEVG) & - & ) + & PTHV_UP=ZTHETAV_UP_, PW_UP=ZZW_UP_, PFRAC_UP=ZZFRAC_UP_, PEMF=ZMF_UP__(:, 1:YDCPG_OPTS%KFLEVG), & + & YDDDH=YDDDH, YDLDDH=YDMODEL%YRML_DIAG%YRLDDH, YDMDDH=YDMODEL%YRML_DIAG%YRMDDH) !wc No variance due to dry updraft yet. ! Putting ZSIGMF to 0 for dry updraft might be obsolete diff --git a/src/arome/ext/aro_shallow_mf.F90 b/src/arome/ext/aro_shallow_mf.F90 index a6750efd89818b3e3cd210b0405f2c15ec7e90ce..76830cf650ccc252a2de46dbd4d868e21d67a318 100644 --- a/src/arome/ext/aro_shallow_mf.F90 +++ b/src/arome/ext/aro_shallow_mf.F90 @@ -1,9 +1,9 @@ ! ######spl - SUBROUTINE ARO_SHALLOW_MF(KKL, KLON, KLEV, KFDIA, KRR, KRRL, KRRI,KSV, & + SUBROUTINE ARO_SHALLOW_MF(KKL, KLON, KLEV, KFDIA, KRR, KRRL, KRRI,KSV,& HMF_UPDRAFT, HMF_CLOUD, HFRAC_ICE, OMIXUV, & ONOMIXLG,KSV_LGBEG,KSV_LGEND, & KTCOUNT, PTSTEP, PDX, PDY, & - PZZ, PZZF, PDZZF, & + PZZ, PZZF, PDZZF, & PRHODJ, PRHODREF, & PPABSM, PEXNM, & PSFTH,PSFRV, & @@ -11,9 +11,10 @@ PUM,PVM,PTKEM,PSVM, & PDUDT_MF,PDVDT_MF, & PDTHLDT_MF,PDRTDT_MF,PDSVDT_MF, & - PSIGMF,PRC_MF,PRI_MF,PCF_MF,PFLXZTHVMF, & + PSIGMF,PRC_MF,PRI_MF,PCF_MF,PFLXZTHVMF, & PTHL_UP,PRT_UP,PRV_UP,PRC_UP,PRI_UP, & - PU_UP, PV_UP, PTHV_UP, PW_UP, PFRAC_UP, PEMF) + PU_UP, PV_UP, PTHV_UP, PW_UP, PFRAC_UP, PEMF, & + YDDDH,YDLDDH,YDMDDH ) USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK @@ -64,6 +65,7 @@ ! ------------ ! USE MODD_PARAMETERS, ONLY: JPVEXT +USE MODD_BUDGET, ONLY: NBUDGET_SV1, TBUDGETDATA, TBUCONF USE MODD_CST, ONLY: CST USE MODD_NEB, ONLY: NEB USE MODD_TURB_n, ONLY: TURBN @@ -74,6 +76,10 @@ USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t USE MODI_SHALLOW_MF USE MODE_FILL_DIMPHYEX, ONLY: FILL_DIMPHYEX ! +USE DDH_MIX, ONLY : TYP_DDH +USE YOMLDDH, ONLY : TLDDH +USE YOMMDDH, ONLY : TMDDH +! IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : @@ -145,16 +151,22 @@ REAL, DIMENSION(KLON,KLEV), INTENT(INOUT) :: PW_UP ! vertical speed updraft REAL, DIMENSION(KLON,KLEV), INTENT(INOUT) :: PFRAC_UP ! updraft fraction REAL, DIMENSION(KLON,KLEV), INTENT(INOUT) :: PEMF ! updraft mass flux ! -LOGICAL :: OSTATNW +TYPE(TYP_DDH), INTENT(INOUT), TARGET :: YDDDH +TYPE(TLDDH), INTENT(IN), TARGET :: YDLDDH +TYPE(TMDDH), INTENT(IN), TARGET :: YDMDDH +! ! !* 0.2 Declarations of local variables : ! +LOGICAL :: OSTATNW +TYPE(TBUDGETDATA), DIMENSION(NBUDGET_SV1) :: YLBUDGET !NBUDGET_SV1 is the one with the highest number needed for shallow_mf INTEGER, DIMENSION(size(PRHODJ,1)) :: IKLCL,IKETL,IKCTL REAL,DIMENSION(size(PRHODJ,1),size(PRHODJ,2)) :: ZFLXZTHMF,ZFLXZRMF,ZFLXZUMF,ZFLXZVMF REAL,DIMENSION(size(PRHODJ,1),size(PRHODJ,2)) :: ZDETR,ZENTR TYPE(DIMPHYEX_t) :: YLDIMPHYEX REAL :: ZIMPL ! degree of implicitness REAL(KIND=JPRB) :: ZHOOK_HANDLE +INTEGER :: JBU ! Loop index for budgets ! ! ! @@ -193,11 +205,13 @@ ZIMPL=1. !------------------------------------------------------------------------------ ! ! -!* 3. MULTIPLICATION PAR RHODJ -! POUR OBTENIR LES TERMES SOURCES DE MESONH -! -! ----------------------------------------------- - +! Budgets +DO JBU=1, NBUDGET_SV1 + YLBUDGET(JBU)%NBUDGET=JBU + YLBUDGET(JBU)%YDDDH=>YDDDH + YLBUDGET(JBU)%YDLDDH=>YDLDDH + YLBUDGET(JBU)%YDMDDH=>YDMDDH +ENDDO ! !------------------------------------------------------------------------------ ! @@ -206,7 +220,7 @@ ZIMPL=1. ! ! --------------------------------- ! -OSTATNW = .FALSE. +TURBN%LSTATNW = .FALSE. CALL SHALLOW_MF(YLDIMPHYEX, CST, NEB, PARAM_MFSHALLN, TURBN, CSTURB, & &KRR=KRR, KRRL=KRRL, KRRI=KRRI, KSV=KSV, & &HFRAC_ICE=HFRAC_ICE, ONOMIXLG=ONOMIXLG,KSV_LGBEG=KSV_LGBEG,KSV_LGEND=KSV_LGEND, & @@ -223,7 +237,8 @@ OSTATNW = .FALSE. &PTHL_UP=PTHL_UP,PRT_UP=PRT_UP,PRV_UP=PRV_UP,PRC_UP=PRC_UP,PRI_UP=PRI_UP, & &PU_UP=PU_UP, PV_UP=PV_UP, PTHV_UP=PTHV_UP, PW_UP=PW_UP, & &PFRAC_UP=PFRAC_UP,PEMF=PEMF,PDETR=ZDETR,PENTR=ZENTR, & - &KKLCL=IKLCL,KKETL=IKETL,KKCTL=IKCTL,PDX=PDX,PDY=PDY ) + &KKLCL=IKLCL,KKETL=IKETL,KKCTL=IKCTL,PDX=PDX,PDY=PDY, & + &BUCONF=TBUCONF, TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET) ) ! ! !------------------------------------------------------------------------------ diff --git a/src/arome/ext/aro_shallow_mf.h b/src/arome/ext/aro_shallow_mf.h index 269e53337835554ff950c01a45d9466bd047dab4..4e3ea02da92831f711b473ae52f7e73e9c4a99ff 100644 --- a/src/arome/ext/aro_shallow_mf.h +++ b/src/arome/ext/aro_shallow_mf.h @@ -13,8 +13,12 @@ INTERFACE & PDTHLDT_MF,PDRTDT_MF,PDSVDT_MF,& & PSIGMF,PRC_MF,PRI_MF,PCF_MF,PFLXZTHVMF,& & PTHL_UP,PRT_UP,PRV_UP,PRC_UP,PRI_UP,& - & PU_UP, PV_UP, PTHV_UP, PW_UP, PFRAC_UP, PEMF) + & PU_UP, PV_UP, PTHV_UP, PW_UP, PFRAC_UP, PEMF,& + & YDDDH,YDLDDH,YDMDDH) USE PARKIND1 ,ONLY : JPIM ,JPRB +USE DDH_MIX, ONLY : TYP_DDH +USE YOMLDDH, ONLY : TLDDH +USE YOMMDDH, ONLY : TMDDH INTEGER(KIND=JPIM), INTENT(IN) :: KKL INTEGER(KIND=JPIM), INTENT(IN) :: KLON INTEGER(KIND=JPIM), INTENT(IN) :: KLEV @@ -65,5 +69,8 @@ REAL(KIND=JPRB), DIMENSION(KLON,KLEV), INTENT(INOUT) :: PTHV_UP REAL(KIND=JPRB), DIMENSION(KLON,KLEV), INTENT(INOUT) :: PW_UP REAL(KIND=JPRB), DIMENSION(KLON,KLEV), INTENT(INOUT) :: PFRAC_UP REAL(KIND=JPRB), DIMENSION(KLON,KLEV), INTENT(INOUT) :: PEMF +TYPE(TYP_DDH), INTENT(INOUT), TARGET :: YDDDH +TYPE(TLDDH), INTENT(IN), TARGET :: YDLDDH +TYPE(TMDDH), INTENT(IN), TARGET :: YDMDDH END SUBROUTINE ARO_SHALLOW_MF END INTERFACE diff --git a/src/arome/ext/aroini_mfshal.F90 b/src/arome/ext/aroini_mfshal.F90 index d0a0437226322741cffe2769fc7169c8e720dcd2..330738fed823cf7531b703af510b303dcf2ca679 100644 --- a/src/arome/ext/aroini_mfshal.F90 +++ b/src/arome/ext/aroini_mfshal.F90 @@ -1,6 +1,6 @@ SUBROUTINE AROINI_MFSHAL(PALP_PERT,PABUO,PBENTR,PBDETR,PCMF,PENTR_MF,PCRAD_MF,PENTR_DRY,& & PDETR_DRY,PDETR_LUP,PKCF_MF,PKRC_MF,PTAUSIGMF,PPRES_UV,PFRAC_UP_MAX,& - & PALPHA_MF,PSIGMA_MF,PA1,PB,PC,PBETA1,PR,PLAMBDA) + & PALPHA_MF,PSIGMA_MF,PA1,PB,PC,PBETA1,PR,PLAMBDA,HMF_UPDRAFT,HMF_CLOUD,OMIXUV) USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK @@ -43,6 +43,7 @@ USE YOMHOOK , ONLY : LHOOK, DR_HOOK ! ------------------------------------------------------------------ USE MODI_INI_CMFSHALL +USE MODD_PARAM_MFSHALL_n, ONLY: LMIXUV, CMF_UPDRAFT, CMF_CLOUD IMPLICIT NONE @@ -68,7 +69,10 @@ REAL, INTENT(IN) :: PB REAL, INTENT(IN) :: PC REAL, INTENT(IN) :: PBETA1 REAL, INTENT(IN) :: PR -REAL, INTENT(IN) :: PLAMBDA +REAL, INTENT(IN) :: PLAMBDA +CHARACTER (LEN=4), INTENT(IN) :: HMF_UPDRAFT +CHARACTER (LEN=4), INTENT(IN) :: HMF_CLOUD +LOGICAL, INTENT(IN) :: OMIXUV ! ------------------------------------------------------------------ @@ -79,7 +83,10 @@ IF (LHOOK) CALL DR_HOOK('AROINI_MFSHAL',0,ZHOOK_HANDLE) CALL INI_CMFSHALL(PALP_PERT,PABUO,PBENTR,PBDETR,PCMF,PENTR_MF,PCRAD_MF,PENTR_DRY,& & PDETR_DRY,PDETR_LUP,PKCF_MF,PKRC_MF,PTAUSIGMF,PPRES_UV,PFRAC_UP_MAX,& & PALPHA_MF,PSIGMA_MF,PA1,PB,PC,PBETA1,PR,PLAMBDA) - +! +LMIXUV=OMIXUV +CMF_UPDRAFT=HMF_UPDRAFT +CMF_CLOUD=HMF_CLOUD ! ------------------------------------------------------------------ IF (LHOOK) CALL DR_HOOK('AROINI_MFSHAL',1,ZHOOK_HANDLE) RETURN diff --git a/src/arome/ext/aroini_mfshal.h b/src/arome/ext/aroini_mfshal.h index 2d1b49422d8d82c6272037142ed9309d8e6860ca..82164a5aa809096909ed0387a1d50097ab8ca486 100644 --- a/src/arome/ext/aroini_mfshal.h +++ b/src/arome/ext/aroini_mfshal.h @@ -1,7 +1,7 @@ INTERFACE SUBROUTINE AROINI_MFSHAL(PALP_PERT,PABUO,PBENTR,PBDETR,PCMF,PENTR_MF,PCRAD_MF,PENTR_DRY,& & PDETR_DRY,PDETR_LUP,PKCF_MF,PKRC_MF,PTAUSIGMF,PPRES_UV,PFRAC_UP_MAX,& - & PALPHA_MF,PSIGMA_MF,PA1,PB,PC,PBETA1,PR,PLAMBDA) + & PALPHA_MF,PSIGMA_MF,PA1,PB,PC,PBETA1,PR,PLAMBDA,HMF_UPDRAFT,HMF_CLOUD,OMIXUV) USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK @@ -29,6 +29,8 @@ REAL(KIND=JPRB), INTENT(IN) :: PC REAL(KIND=JPRB), INTENT(IN) :: PBETA1 REAL(KIND=JPRB), INTENT(IN) :: PR REAL(KIND=JPRB), INTENT(IN) :: PLAMBDA - +CHARACTER (LEN=4), INTENT(IN) :: HMF_UPDRAFT +CHARACTER (LEN=4), INTENT(IN) :: HMF_CLOUD +LOGICAL, INTENT(IN) :: OMIXUV END SUBROUTINE AROINI_MFSHAL END INTERFACE diff --git a/src/arome/ext/aroini_micro.F90 b/src/arome/ext/aroini_micro.F90 index 347033c9cd594d9ec7961697d07eced23897f4e1..450e1f8114df10ddf2ede6f61f1ab693019b9e2c 100644 --- a/src/arome/ext/aroini_micro.F90 +++ b/src/arome/ext/aroini_micro.F90 @@ -5,7 +5,7 @@ SUBROUTINE AROINI_MICRO(KULOUT,PTSTEP,LDWARM,CMICRO,KSPLITR,CCSEDIM,LDCRIAUTI,& PFRACM90, LDCONVHG, CCSUBG_RC_RR_ACCR, CCSUBG_RR_EVAP, CCSUBG_PR_PDF, & LDCRFLIMIT, CCFRAC_ICE_ADJUST, PSPLIT_MAXCFL,& CCFRAC_ICE_SHALLOW_MF, LDSEDIM_AFTER,LDDEPOSC,PVDEPOSC, PFRMIN,& - LDDEPSG,PRDEPSRED,PRDEPGRED) + LDDEPSG,PRDEPSRED,PRDEPGRED,LDSEDIC) USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK @@ -105,6 +105,7 @@ LOGICAL, INTENT (IN) :: LDDEPOSC REAL, INTENT(IN):: PVDEPOSC REAL, OPTIONAL, INTENT (IN) :: PFRMIN(40) LOGICAL, INTENT (IN) :: LDDEPSG +LOGICAL, INTENT(IN) :: LDSEDIC REAL, INTENT (IN) :: PRDEPSRED, PRDEPGRED !----------------------------------------------------------------------- @@ -143,6 +144,7 @@ XSPLIT_MAXCFL=PSPLIT_MAXCFL LSEDIM_AFTER=LDSEDIM_AFTER ! sedimentation done before or after microphysics ! XTSTEP_TS=PTSTEP_TS ! Approximative time step for time-splitting (0 for no time-splitting) +LSEDIC=LDSEDIC ! ! 2. Set implicit default values for MODD_RAIN_ICE_DESCR ! et MODD_RAIN_ICE_PARAM diff --git a/src/arome/ext/aroini_micro.h b/src/arome/ext/aroini_micro.h index bf6d1d18b8bc0296f7cae80c60b93d4b85cb9ea3..a5dd62fbf0e4fb9dcdfbce11972f7c4f51664a5c 100644 --- a/src/arome/ext/aroini_micro.h +++ b/src/arome/ext/aroini_micro.h @@ -4,8 +4,8 @@ SUBROUTINE AROINI_MICRO(KULOUT,PTSTEP,LDWARM,CMICRO,KSPLITR,CCSEDIM,LDCRIAUTI,& & LDFEEDBACKT, LDEVLIMIT, LDNULLWETG, LDWETGPOST, LDNULLWETH, LDWETHPOST, & & PFRACM90, LDCONVHG, CCSUBG_RC_RR_ACCR, CCSUBG_RR_EVAP, CCSUBG_PR_PDF, & & LDCRFLIMIT, CCFRAC_ICE_ADJUST, PSPLIT_MAXCFL,& - & CCFRAC_ICE_SHALLOW_MF, LDSEDIC_AFTER,LDDEPOSC, PVDEPOSC, PFRMIN,& - & LDDEPSG,PRDEPSRED,PRDEPGRED) + & CCFRAC_ICE_SHALLOW_MF, LDSEDIM_AFTER,LDDEPOSC, PVDEPOSC, PFRMIN,& + & LDDEPSG,PRDEPSRED,PRDEPGRED,LDSEDIC) USE PARKIND1 ,ONLY : JPIM ,JPRB INTEGER(KIND=JPIM), INTENT (IN) :: KULOUT REAL(KIND=JPRB), INTENT (IN) :: PTSTEP @@ -36,11 +36,12 @@ LOGICAL, INTENT (IN) :: LDCRFLIMIT CHARACTER(LEN=1), INTENT(IN) :: CCFRAC_ICE_ADJUST REAL(KIND=JPRB), INTENT (IN) :: PSPLIT_MAXCFL CHARACTER(LEN=1), INTENT(IN) :: CCFRAC_ICE_SHALLOW_MF -LOGICAL, INTENT (IN) :: LDSEDIC_AFTER +LOGICAL, INTENT (IN) :: LDSEDIM_AFTER LOGICAL, INTENT (IN) :: LDDEPOSC REAL(KIND=JPRB), INTENT (IN) :: PVDEPOSC REAL(KIND=JPRB), OPTIONAL, INTENT (IN) :: PFRMIN(40) LOGICAL, INTENT (IN) :: LDDEPSG +LOGICAL, INTENT(IN) :: LDSEDIC REAL(KIND=JPRB), INTENT (IN) :: PRDEPSRED, PRDEPGRED END SUBROUTINE AROINI_MICRO END INTERFACE diff --git a/src/arome/ext/aroini_turb.F90 b/src/arome/ext/aroini_turb.F90 index 1f2d9c7714a1432c99626602aaf8ee5ed9cce54a..f5d5023ba93806a80dd6b1142a5093a941de4b89 100644 --- a/src/arome/ext/aroini_turb.F90 +++ b/src/arome/ext/aroini_turb.F90 @@ -1,5 +1,5 @@ ! ######spl -SUBROUTINE AROINI_TURB(PLINI,OHARATU,OSTATNW,OSUBG_COND) +SUBROUTINE AROINI_TURB(PLINI,OHARATU,OSTATNW,OSUBG_COND,HCONDENS,HLAMBDA3,HSUBG_MF_PDF,OSIGMAS) USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK !**** *INI_TURB* - Initialize common meso_NH MODD_ used in Turbulence scheme @@ -44,7 +44,8 @@ USE YOMHOOK , ONLY : LHOOK, DR_HOOK USE MODD_LES, ONLY : TLES USE MODD_CTURB, ONLY : XLINI USE MODD_TURB_n, ONLY: LHARAT, LSTATNW, CTURBLEN, TURB_GOTO_MODEL, LTURB_FLX, LTURB_DIAG, & - LSUBG_COND, LRMC01, CTURBDIM, XIMPL, CTOM + LSUBG_COND, LRMC01, CTURBDIM, XIMPL, CTOM, CCONDENS, CLAMBDA3, & + CSUBG_MF_PDF, LSIGMAS USE MODI_INI_CTURB IMPLICIT NONE @@ -56,6 +57,10 @@ REAL, INTENT(IN) :: PLINI ! minimum bl89 mixing length LOGICAL,INTENT(IN) :: OHARATU ! switch HARATU LOGICAL,INTENT(IN) :: OSTATNW ! switch LSTATNW LOGICAL,INTENT(IN) :: OSUBG_COND ! switch of subgrid condensation +CHARACTER(LEN=80),INTENT(IN) :: HCONDENS ! subrgrid condensation PDF +CHARACTER(LEN=4),INTENT(IN) :: HLAMBDA3 ! lambda3 choice for subgrid cloud scheme +CHARACTER(LEN=80),INTENT(IN) :: HSUBG_MF_PDF ! PDF to use for MF cloud autoconversions +LOGICAL, INTENT(IN) :: OSIGMAS ! ! ------------------------------------------------------------------ @@ -83,8 +88,12 @@ CTURBLEN = 'BL89' CTURBDIM = '1DIM' LTURB_FLX = .FALSE. LTURB_DIAG = .FALSE. +LSIGMAS=OSIGMAS XIMPL = 1. LSUBG_COND = OSUBG_COND +CCONDENS=HCONDENS +CLAMBDA3=HLAMBDA3 +CSUBG_MF_PDF=HSUBG_MF_PDF LRMC01 = .FALSE. CTOM = 'NONE' diff --git a/src/arome/ext/aroini_turb.h b/src/arome/ext/aroini_turb.h index fd98cf451465248c9477f7a7f0a226299fd9f887..558ab519aa04f7ad9b732d69c66f554653214516 100644 --- a/src/arome/ext/aroini_turb.h +++ b/src/arome/ext/aroini_turb.h @@ -1,9 +1,14 @@ INTERFACE -SUBROUTINE AROINI_TURB(PLINI,OHARATU,OSTATNW,OSUBG_COND) +SUBROUTINE AROINI_TURB(PLINI,OHARATU,OSTATNW,OSUBG_COND,HCONDENS,HLAMBDA3,HSUBG_MF_PDF, & + OSIGMAS) USE PARKIND1 ,ONLY : JPRB REAL(KIND=JPRB),INTENT(IN)::PLINI LOGICAL, INTENT(IN) ::OHARATU LOGICAL, INTENT(IN) ::OSTATNW LOGICAL, INTENT(IN) :: OSUBG_COND +CHARACTER(LEN=80),INTENT(IN) :: HCONDENS +CHARACTER(LEN=4),INTENT(IN) :: HLAMBDA3 +CHARACTER(LEN=80),INTENT(IN) :: HSUBG_MF_PDF +LOGICAL, INTENT(IN) :: OSIGMAS END SUBROUTINE AROINI_TURB END INTERFACE diff --git a/src/arome/ext/arp_shallow_mf.F90 b/src/arome/ext/arp_shallow_mf.F90 index 37f462ccc756c0d08b9b6fa5cff83ebb35a8c36e..6386824b9788fefd3b215465db0d81ac7e988b64 100644 --- a/src/arome/ext/arp_shallow_mf.F90 +++ b/src/arome/ext/arp_shallow_mf.F90 @@ -393,9 +393,7 @@ ZDRTDT_MF(:,:) = 0. ! --------------------------------- OSTATNW = .FALSE. CALL SHALLOW_MF(YLDIMPHYEX, CST, NEB, PARAM_MFSHALLN, TURBN, CSTURB, & - KRR=IKR,KRRL=IKRL,KRRI=IKRI, KSV=1, & - HMF_UPDRAFT=HMF_UPDRAFT, HMF_CLOUD=HMF_CLOUD,HFRAC_ICE='N',OMIXUV=LLOMIXUV, & - OSTATNW=OSTATNW, & + KRR=IKR,KRRL=IKRL,KRRI=IKRI, KSV=1,HFRAC_ICE='N', & ONOMIXLG=LLONOMIXLG,KSV_LGBEG=ISV_LGBEG,KSV_LGEND=ISV_LGEND, & PIMPL_MF=PIMPL, PTSTEP=ZDT, & PDZZ=ZDZZ,PZZ=ZZZ, & @@ -413,7 +411,7 @@ OSTATNW = .FALSE. PFRAC_UP=ZFRAC_UP,PEMF=ZEMF,PDETR=ZDETR,PENTR=ZENTR, & KKLCL=IKLCL,KKETL=IKETL,KKCTL=IKCTL, & ! - PDX=0., PDY=0.) + PDX=0., PDY=0., KBUDGETS=0) ! Conversion des tendances de theta en tendance de cpT diff --git a/src/arome/ext/suphmpa.F90 b/src/arome/ext/suphmpa.F90 index 681a037ce1a16bcc9c8c0e6c584cdf839ba53438..9eb491545c55dfb1053f61f0e5004b72e2942014 100644 --- a/src/arome/ext/suphmpa.F90 +++ b/src/arome/ext/suphmpa.F90 @@ -123,7 +123,10 @@ ASSOCIATE(XDETR_LUP=>YDPARAR%XDETR_LUP, XCMF=>YDPARAR%XCMF, & & CFRAC_ICE_ADJUST=>YDPARAR%CFRAC_ICE_ADJUST, XSPLIT_MAXCFL=>YDPARAR%XSPLIT_MAXCFL,& & CFRAC_ICE_SHALLOW_MF=>YDPARAR%CFRAC_ICE_SHALLOW_MF, LSEDIM_AFTER=>YDPARAR%LSEDIM_AFTER,& & LDEPOSC=>YDPARAR%LDEPOSC, XVDEPOSC=>YDPARAR%XVDEPOSC,& - & LDEPSG=>YDPARAR%LDEPSG,RDEPSRED=>YDPARAR%RDEPSRED,RDEPGRED=>YDPARAR%RDEPGRED) + & LDEPSG=>YDPARAR%LDEPSG,RDEPSRED=>YDPARAR%RDEPSRED,RDEPGRED=>YDPARAR%RDEPGRED,& + & LMIXUV=>YDPARAR%LMIXUV,CMF_CLOUD=>YDPARAR%CMF_CLOUD,CCONDENS=>YDPARAR%CCONDENS,& + & CLAMBDA3=>YDPARAR%CLAMBDA3,CSUBG_MF_PDF=>YDPARAR%CSUBG_MF_PDF,LSIGMAS=>YDPARAR%LOSIGMAS,& + & LOSEDIC=>YDPARAR%LOSEDIC ) ! ------------------------------------------------------------------ ! ------------------------------------------------------------------ ! 1. Initialisation of MesoNH constantes @@ -145,7 +148,7 @@ IF (CMICRO == 'LIMA') THEN & LWETHPOST, XFRACM90, LCONVHG, CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, CSUBG_PR_PDF,& & LCRFLIMIT, CFRAC_ICE_ADJUST, XSPLIT_MAXCFL,& & CFRAC_ICE_SHALLOW_MF, LSEDIM_AFTER, LDEPOSC, XVDEPOSC, RFRMIN,& - & LDEPSG,RDEPSRED,RDEPGRED) + & LDEPSG,RDEPSRED,RDEPGRED,LOSEDIC) CALL AROINI_MICRO_LIMA (KULOUT,4,ZTSTEP,LOWARM,CMICRO,NSPLITR,NSPLITG,CSEDIM,LCRIAUTI,& & RCRIAUTI,RT0CRIAUTI,RCRIAUTC) ELSE @@ -155,7 +158,7 @@ CALL AROINI_MICRO (KULOUT,ZTSTEP,LOWARM,CMICRO,NSPLITR,CSEDIM,LCRIAUTI,& & LWETHPOST, XFRACM90, LCONVHG, CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, CSUBG_PR_PDF,& & LCRFLIMIT, CFRAC_ICE_ADJUST, XSPLIT_MAXCFL,& & CFRAC_ICE_SHALLOW_MF, LSEDIM_AFTER, LDEPOSC, XVDEPOSC, RFRMIN,& - & LDEPSG,RDEPSRED,RDEPGRED) + & LDEPSG,RDEPSRED,RDEPGRED,LOSEDIC) ENDIF ! 3. Initialisation of Budget @@ -166,13 +169,13 @@ CALL AROINI_BUDGET(LAROBU_ENABLE) ! 4. Initialisation of Turbulence scheme -CALL AROINI_TURB(XLINI,LHARATU,LSTATNW,LOSUBG_COND) +CALL AROINI_TURB(XLINI,LHARATU,LSTATNW,LOSUBG_COND,CCONDENS,CLAMBDA3,CSUBG_MF_PDF,LSIGMAS) ! 5. Initialisation of Mass Flux Shallow convection scheme IF(LMFSHAL.OR.LEDKF) CALL AROINI_MFSHAL(XALP_PERT,XABUO,XBENTR,XBDETR,XCMF,XENTR_MF,XCRAD_MF,XENTR_DRY,& & XDETR_DRY,XDETR_LUP,XKCF_MF,XKRC_MF,XTAUSIGMF,XPRES_UV,XFRAC_UP_MAX,& - & XALPHA_MF,XSIGMA_MF,XA1,XB,XC,XBETA1,XR,XLAMBDA) + & XALPHA_MF,XSIGMA_MF,XA1,XB,XC,XBETA1,XR,XLAMBDA,CMF_UPDRAFT,CMF_CLOUD,LMIXUV) IF (LMFSHAL.AND.YDML_GCONF%YGFL%NGFL_EZDIAG < 3) THEN CALL ABOR1 ("With LMFSHAL NGFL_EZDIAG should be >= 3 !") diff --git a/src/common/turb/modi_shallow_mf.F90 b/src/common/turb/modi_shallow_mf.F90 index 05f08da98b4dda90a701cf8f2f55bf2f450d4244..564fdaa0927adf939bf8dc0a2066d54dc7b24d42 100644 --- a/src/common/turb/modi_shallow_mf.F90 +++ b/src/common/turb/modi_shallow_mf.F90 @@ -4,7 +4,7 @@ ! INTERFACE ! ################################################################# - SUBROUTINE SHALLOW_MF(D, CST, NEB, PARAMMF, TURB, CSTURB, & + SUBROUTINE SHALLOW_MF(D, CST, NEB, PARAMMF, TURBN, CSTURB, & KRR, KRRL, KRRI, KSV, & HFRAC_ICE,ONOMIXLG,KSV_LGBEG,KSV_LGEND, & PIMPL_MF, PTSTEP, & @@ -20,36 +20,38 @@ INTERFACE PTHL_UP,PRT_UP,PRV_UP,PRC_UP,PRI_UP, & PU_UP, PV_UP, PTHV_UP, PW_UP, & PFRAC_UP,PEMF,PDETR,PENTR, & - KKLCL,KKETL,KKCTL,PDX,PDY ) + KKLCL,KKETL,KKCTL,PDX,PDY,PRSVS,PSVMIN, & + BUCONF, TBUDGETS, KBUDGETS ) ! ################################################################# !! +USE MODD_BUDGET, ONLY: TBUDGETCONF_t, TBUDGETDATA USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t USE MODD_CST, ONLY: CST_t USE MODD_NEB, ONLY: NEB_t USE MODD_PARAM_MFSHALL_n, ONLY: PARAM_MFSHALL_t USE MODD_TURB_n, ONLY: TURB_t USE MODD_CTURB, ONLY: CSTURB_t +USE MODD_PARAMETERS, ONLY: JPSVMAX ! !* 1.1 Declaration of Arguments ! ! -TYPE(DIMPHYEX_t), INTENT(IN) :: D -TYPE(CST_t), INTENT(IN) :: CST +TYPE(DIMPHYEX_t), INTENT(IN) :: D ! PHYEX variables dimensions structure +TYPE(CST_t), INTENT(IN) :: CST ! modd_cst general constant structure TYPE(NEB_t), INTENT(IN) :: NEB TYPE(PARAM_MFSHALL_t), INTENT(IN) :: PARAMMF -TYPE(TURB_t), INTENT(IN) :: TURB -TYPE(CSTURB_t), INTENT(IN) :: CSTURB +TYPE(TURB_t), INTENT(IN) :: TURBN ! modn_turbn (turb namelist) structure +TYPE(CSTURB_t), INTENT(IN) :: CSTURB ! modd_csturb turb constant structure INTEGER, INTENT(IN) :: KRR ! number of moist var. INTEGER, INTENT(IN) :: KRRL ! number of liquid water var. INTEGER, INTENT(IN) :: KRRI ! number of ice water var. -INTEGER, INTENT(IN) :: KSV +INTEGER, INTENT(IN) :: KSV ! number of scalar var. CHARACTER*1, INTENT(IN) :: HFRAC_ICE ! partition liquid/ice scheme LOGICAL, INTENT(IN) :: ONOMIXLG ! False if mixing of lagrangian tracer INTEGER, INTENT(IN) :: KSV_LGBEG ! first index of lag. tracer INTEGER, INTENT(IN) :: KSV_LGEND ! last index of lag. tracer REAL, INTENT(IN) :: PIMPL_MF ! degre of implicitness REAL, INTENT(IN) :: PTSTEP ! Dynamical timestep - REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PZZ ! Height of flux point REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PDZZ ! Metric coefficients REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PRHODJ ! dry density * Grid size @@ -63,7 +65,6 @@ REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTHM ! Theta at t-dt REAL, DIMENSION(D%NIJT,KRR), INTENT(IN) :: PRM ! water var. at t-dt REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PUM,PVM ! wind components at t-dt REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTKEM ! tke at t-dt - REAL, DIMENSION(D%NIJT,D%NKT,KSV), INTENT(IN) :: PSVM ! scalar variable a t-dt REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT):: PDUDT_MF ! tendency of U by massflux scheme @@ -93,7 +94,11 @@ REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT) :: PDETR ! updraft detrainment REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT) :: PENTR ! updraft entrainment INTEGER,DIMENSION(D%NIJT), INTENT(OUT) :: KKLCL,KKETL,KKCTL ! level of LCL,ETL and CTL REAL, INTENT(IN) :: PDX, PDY - +REAL, DIMENSION(D%NIJT,D%NKT,KSV), INTENT(IN),OPTIONAL :: PRSVS ! sources of sv (for Budgets with lagrangian tracer) +TYPE(TBUDGETCONF_t), INTENT(IN),OPTIONAL :: BUCONF ! budget structure +INTEGER, INTENT(IN) :: KBUDGETS ! option. because not used in arpifs +TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT),OPTIONAL :: TBUDGETS +REAL,DIMENSION(JPSVMAX),INTENT(IN),OPTIONAL :: PSVMIN ! minimum value for SV variables END SUBROUTINE SHALLOW_MF diff --git a/src/common/turb/shallow_mf.F90 b/src/common/turb/shallow_mf.F90 index d9a8ba56c5cdc9ea507892dcd32c392830ed85ae..ec3a76764d15e02c60fa00531c59a39a99fb6bad 100644 --- a/src/common/turb/shallow_mf.F90 +++ b/src/common/turb/shallow_mf.F90 @@ -20,7 +20,8 @@ PTHL_UP,PRT_UP,PRV_UP,PRC_UP,PRI_UP, & PU_UP, PV_UP, PTHV_UP, PW_UP, & PFRAC_UP,PEMF,PDETR,PENTR, & - KKLCL,KKETL,KKCTL,PDX,PDY ) + KKLCL,KKETL,KKCTL,PDX,PDY,PRSVS,PSVMIN, & + BUCONF, TBUDGETS, KBUDGETS ) ! ################################################################# !! @@ -71,13 +72,17 @@ !* 0. DECLARATIONS ! ------------ ! +USE MODD_BUDGET, ONLY: TBUDGETCONF_t, TBUDGETDATA, NBUDGET_U, NBUDGET_V, & + NBUDGET_TH, NBUDGET_RV, NBUDGET_SV1 USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t USE MODD_CST, ONLY: CST_t USE MODD_NEB, ONLY: NEB_t USE MODD_PARAM_MFSHALL_n, ONLY: PARAM_MFSHALL_t USE MODD_TURB_n, ONLY: TURB_t USE MODD_CTURB, ONLY: CSTURB_t +USE MODD_PARAMETERS, ONLY: JPSVMAX ! +USE MODE_BUDGET, ONLY: BUDGET_STORE_ADD_PHY USE MODE_THL_RT_FROM_TH_R_MF, ONLY: THL_RT_FROM_TH_R_MF USE MODE_COMPUTE_UPDRAFT, ONLY: COMPUTE_UPDRAFT USE MODE_COMPUTE_UPDRAFT_RHCJ10, ONLY: COMPUTE_UPDRAFT_RHCJ10 @@ -88,6 +93,7 @@ USE MODE_COMPUTE_MF_CLOUD, ONLY: COMPUTE_MF_CLOUD USE MODE_MSG, ONLY: PRINT_MSG, NVERB_FATAL USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK +USE SHUMAN_PHY, ONLY: MXM_PHY, MYM_PHY ! IMPLICIT NONE @@ -95,23 +101,22 @@ IMPLICIT NONE ! ! ! -TYPE(DIMPHYEX_t), INTENT(IN) :: D -TYPE(CST_t), INTENT(IN) :: CST +TYPE(DIMPHYEX_t), INTENT(IN) :: D ! PHYEX variables dimensions structure +TYPE(CST_t), INTENT(IN) :: CST ! modd_cst general constant structure TYPE(NEB_t), INTENT(IN) :: NEB TYPE(PARAM_MFSHALL_t), INTENT(IN) :: PARAMMF -TYPE(TURB_t), INTENT(IN) :: TURBN -TYPE(CSTURB_t), INTENT(IN) :: CSTURB +TYPE(TURB_t), INTENT(IN) :: TURBN ! modn_turbn (turb namelist) structure +TYPE(CSTURB_t), INTENT(IN) :: CSTURB ! modd_csturb turb constant structure INTEGER, INTENT(IN) :: KRR ! number of moist var. INTEGER, INTENT(IN) :: KRRL ! number of liquid water var. INTEGER, INTENT(IN) :: KRRI ! number of ice water var. -INTEGER, INTENT(IN) :: KSV +INTEGER, INTENT(IN) :: KSV ! number of scalar var. CHARACTER(LEN=1), INTENT(IN) :: HFRAC_ICE ! partition liquid/ice scheme LOGICAL, INTENT(IN) :: ONOMIXLG ! False if mixing of lagrangian tracer INTEGER, INTENT(IN) :: KSV_LGBEG ! first index of lag. tracer INTEGER, INTENT(IN) :: KSV_LGEND ! last index of lag. tracer REAL, INTENT(IN) :: PIMPL_MF ! degre of implicitness REAL, INTENT(IN) :: PTSTEP ! Dynamical timestep - REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PZZ ! Height of flux point REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PDZZ ! Metric coefficients REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PRHODJ ! dry density * Grid size @@ -125,7 +130,6 @@ REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTHM ! Theta at t-dt REAL, DIMENSION(D%NIJT,D%NKT,KRR), INTENT(IN) :: PRM ! water var. at t-dt REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PUM,PVM ! wind components at t-dt REAL, DIMENSION(D%NIJT,D%NKT), INTENT(IN) :: PTKEM ! tke at t-dt - REAL, DIMENSION(D%NIJT,D%NKT,KSV), INTENT(IN) :: PSVM ! scalar variable a t-dt REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT):: PDUDT_MF ! tendency of U by massflux scheme @@ -155,6 +159,12 @@ REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT) :: PDETR ! updraft detrainment REAL, DIMENSION(D%NIJT,D%NKT), INTENT(OUT) :: PENTR ! updraft entrainment INTEGER,DIMENSION(D%NIJT), INTENT(OUT) :: KKLCL,KKETL,KKCTL ! level of LCL,ETL and CTL REAL, INTENT(IN) :: PDX, PDY +REAL, DIMENSION(D%NIJT,D%NKT,KSV), INTENT(IN),OPTIONAL :: PRSVS ! sources of sv (for Budgets with lagrangian tracer) +TYPE(TBUDGETCONF_t), INTENT(IN),OPTIONAL :: BUCONF ! budget structure +INTEGER, INTENT(IN) :: KBUDGETS ! option. because not used in arpifs +TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT),OPTIONAL :: TBUDGETS +REAL,DIMENSION(JPSVMAX),INTENT(IN),OPTIONAL :: PSVMIN ! minimum value for SV variables (for Budgets) + ! ! 0.2 Declaration of local variables ! @@ -162,6 +172,7 @@ REAL, DIMENSION(D%NIJT,D%NKT) :: & ZTHLM, & ! ZRTM, & ! ZTHVM, & ! + ZWORK,ZWORK2, & ZEMF_O_RHODREF, & ! entrainment/detrainment ZBUO_INTEG ! integrated buoyancy REAL, DIMENSION(D%NIJT,D%NKT) :: ZFRAC_ICE @@ -176,7 +187,7 @@ REAL, DIMENSION(D%NIJT,D%NKT) :: ZRSAT_UP ! Rsat in updraft LOGICAL :: GENTR_DETR ! flag to recompute entrainment, detrainment and mass flux INTEGER, DIMENSION(D%NIJT,D%NKT) :: IERR -INTEGER :: JIJ, JK +INTEGER :: JIJ, JK, JSV INTEGER :: IIJB,IIJE ! physical horizontal domain indices INTEGER :: IKT ! @@ -326,6 +337,58 @@ IF( PARAMMF%CMF_UPDRAFT == 'DUAL') THEN ! PDVDT_MF=0. ENDIF ! +#ifdef REPRO48 +#else +IF(PRESENT(BUCONF)) THEN + IF( BUCONF%LBUDGET_U ) THEN + !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) + ZWORK(IIJB:IIJE,1:IKT)=PRHODJ(IIJB:IIJE,1:IKT)*PDUDT_MF(IIJB:IIJE,1:IKT) + !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) + CALL MXM_PHY(D, ZWORK, ZWORK2) + CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_U ), 'MAFL', ZWORK2) + END IF +! + IF( BUCONF%LBUDGET_V ) THEN + !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) + ZWORK(IIJB:IIJE,1:IKT)=PRHODJ(IIJB:IIJE,1:IKT)*PDVDT_MF(IIJB:IIJE,1:IKT) + !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) + CALL MYM_PHY(D, ZWORK, ZWORK2) + CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_V ), 'MAFL', ZWORK2) + END IF +! + IF( BUCONF%LBUDGET_TH ) THEN + !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) + ZWORK(IIJB:IIJE,1:IKT)=PRHODJ(IIJB:IIJE,1:IKT)*PDTHLDT_MF(IIJB:IIJE,1:IKT) + !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) + CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'MAFL', ZWORK) + END IF +! + IF( BUCONF%LBUDGET_RV ) THEN + !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) + ZWORK(IIJB:IIJE,1:IKT)=PRHODJ(IIJB:IIJE,1:IKT)*PDRTDT_MF(IIJB:IIJE,1:IKT) + !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) + CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'MAFL', ZWORK) + END IF +! + IF( BUCONF%LBUDGET_SV ) THEN + DO JSV=1,KSV + IF (ONOMIXLG .AND. JSV >= KSV_LGBEG .AND. JSV<= KSV_LGEND) THEN + !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) + ZWORK(IIJB:IIJE,1:IKT)=MAX(PRSVS(IIJB:IIJE,1:IKT,JSV) + PRHODJ(IIJB:IIJE,1:IKT)* & + PDSVDT_MF(IIJB:IIJE,1:IKT,JSV),PSVMIN(JSV)) + ZWORK(IIJB:IIJE,1:IKT)=PRSVS(IIJB:IIJE,1:IKT,JSV) - ZWORK(IIJB:IIJE,1:IKT) + !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) + ELSE + !$mnh_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) + ZWORK(IIJB:IIJE,1:IKT)=PRHODJ(IIJB:IIJE,1:IKT)*PDSVDT_MF(IIJB:IIJE,1:IKT,JSV) + !$mnh_end_expand_array(JIJ=IIJB:IIJE,JK=1:IKT) + END IF + CALL BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + JSV), 'MAFL', ZWORK ) + END DO + END IF +END IF +#endif +! IF (LHOOK) CALL DR_HOOK('SHALLOW_MF',1,ZHOOK_HANDLE) ! CONTAINS diff --git a/src/mesonh/ext/diagnos_les_mf.f90 b/src/mesonh/ext/diagnos_les_mf.f90 index f537b04f36ac1617a2b8590e1deee9cdd8d0ed52..665d1ea7666f6047ab2a4d8e9343253fb2852446 100644 --- a/src/mesonh/ext/diagnos_les_mf.f90 +++ b/src/mesonh/ext/diagnos_les_mf.f90 @@ -25,12 +25,12 @@ use modd_precision, only: MNHTIME ! INTEGER, INTENT(IN) :: KIU, KJU, KKU ! 3D grid size REAL(kind=MNHTIME), DIMENSION(2), INTENT(OUT) :: PTIME_LES -REAL, DIMENSION(:,:), INTENT(IN) :: PTHL_UP,PRT_UP,PRV_UP,& +REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHL_UP,PRT_UP,PRV_UP,& PRC_UP,PRI_UP ! updraft properties -REAL, DIMENSION(:,:), INTENT(IN) :: PU_UP, PV_UP -REAL, DIMENSION(:,:), INTENT(IN) :: PTHV_UP,PW_UP,& +REAL, DIMENSION(:,:,:), INTENT(IN) :: PU_UP, PV_UP +REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHV_UP,PW_UP,& PFRAC_UP,PEMF,PDETR,PENTR -REAL, DIMENSION(:,:), INTENT(IN) :: PWTHMF,PWTHVMF,PWRTMF, & +REAL, DIMENSION(:,:,:), INTENT(IN) :: PWTHMF,PWTHVMF,PWRTMF, & PWUMF,PWVMF INTEGER, DIMENSION(:), INTENT(IN) :: KKLCL,KKETL,KKCTL @@ -100,12 +100,12 @@ IMPLICIT NONE ! INTEGER, INTENT(IN) :: KIU, KJU, KKU ! 3D grid size REAL(kind=MNHTIME), DIMENSION(2), INTENT(OUT) :: PTIME_LES -REAL, DIMENSION(:,:), INTENT(IN) :: PTHL_UP,PRT_UP,PRV_UP,& +REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHL_UP,PRT_UP,PRV_UP,& PRC_UP,PRI_UP ! updraft properties -REAL, DIMENSION(:,:), INTENT(IN) :: PU_UP, PV_UP -REAL, DIMENSION(:,:), INTENT(IN) :: PTHV_UP,PW_UP,& +REAL, DIMENSION(:,:,:), INTENT(IN) :: PU_UP, PV_UP +REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHV_UP,PW_UP,& PFRAC_UP,PEMF,PDETR,PENTR -REAL, DIMENSION(:,:), INTENT(IN) :: PWTHMF,PWTHVMF,PWRTMF, & +REAL, DIMENSION(:,:,:), INTENT(IN) :: PWTHMF,PWTHVMF,PWRTMF, & PWUMF,PWVMF INTEGER, DIMENSION(:), INTENT(IN) :: KKLCL,KKETL,KKCTL @@ -113,7 +113,6 @@ INTEGER, DIMENSION(:), INTENT(IN) :: KKLCL,KKETL,KKCTL ! ! 0.2 Declaration of local variables ! -REAL, DIMENSION(KIU,KJU,KKU) :: ZWORK REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTHLMFFLX_LES,ZRTMFFLX_LES, & ZTHVMFFLX_LES,ZUMFFLX_LES, & ZVMFFLX_LES @@ -150,84 +149,68 @@ CALL SECOND_MNH2(ZTIME1) ALLOCATE( ZVMFFLX_LES (KIU,KJU,NLES_K) ) - ZWORK(:,:,:)=RESHAPE(PWTHMF(:,:),(/ KIU,KJU,KKU /) ) - CALL LES_VER_INT(MZF(ZWORK) ,ZTHLMFFLX_LES ) + CALL LES_VER_INT(MZF(PWTHMF) ,ZTHLMFFLX_LES ) CALL LES_MEAN_ll(ZTHLMFFLX_LES,LLES_CURRENT_CART_MASK, & X_LES_SUBGRID_WTHLMF(:,NLES_CURRENT_TCOUNT,1)) - ZWORK(:,:,:)=RESHAPE(PWRTMF(:,:),(/ KIU,KJU,KKU /) ) - CALL LES_VER_INT( MZF(ZWORK) ,ZRTMFFLX_LES ) + CALL LES_VER_INT( MZF(PWRTMF) ,ZRTMFFLX_LES ) CALL LES_MEAN_ll (ZRTMFFLX_LES , LLES_CURRENT_CART_MASK, & X_LES_SUBGRID_WRTMF(:,NLES_CURRENT_TCOUNT,1) ) - ZWORK(:,:,:)=RESHAPE(PWUMF(:,:),(/ KIU,KJU,KKU /) ) - CALL LES_VER_INT( MZF(ZWORK) ,ZUMFFLX_LES ) + CALL LES_VER_INT( MZF(PWUMF) ,ZUMFFLX_LES ) CALL LES_MEAN_ll (ZUMFFLX_LES , LLES_CURRENT_CART_MASK, & X_LES_SUBGRID_WUMF(:,NLES_CURRENT_TCOUNT,1) ) - ZWORK(:,:,:)=RESHAPE(PWVMF(:,:),(/ KIU,KJU,KKU /) ) - CALL LES_VER_INT( MZF(ZWORK) ,ZVMFFLX_LES ) + CALL LES_VER_INT( MZF(PWVMF) ,ZVMFFLX_LES ) CALL LES_MEAN_ll (ZVMFFLX_LES , LLES_CURRENT_CART_MASK, & X_LES_SUBGRID_WVMF(:,NLES_CURRENT_TCOUNT,1) ) - ZWORK(:,:,:)=RESHAPE(PWTHVMF(:,:),(/ KIU,KJU,KKU /) ) - CALL LES_VER_INT( MZF(ZWORK) ,ZTHVMFFLX_LES ) + CALL LES_VER_INT( MZF(PWTHVMF) ,ZTHVMFFLX_LES ) CALL LES_MEAN_ll (ZTHVMFFLX_LES , LLES_CURRENT_CART_MASK, & X_LES_SUBGRID_WTHVMF(:,NLES_CURRENT_TCOUNT,1) ) - ZWORK(:,:,:)=RESHAPE(PTHL_UP(:,:),(/ KIU,KJU,KKU /) ) - CALL LES_VER_INT( MZF(ZWORK) ,ZTHLUP_MF_LES ) + CALL LES_VER_INT( MZF(PTHL_UP) ,ZTHLUP_MF_LES ) CALL LES_MEAN_ll (ZTHLUP_MF_LES , LLES_CURRENT_CART_MASK, & X_LES_SUBGRID_THLUP_MF(:,NLES_CURRENT_TCOUNT,1) ) - ZWORK(:,:,:)=RESHAPE(PRT_UP(:,:),(/ KIU,KJU,KKU /) ) - CALL LES_VER_INT( MZF(ZWORK) ,ZRTUP_MF_LES ) + CALL LES_VER_INT( MZF(PRT_UP) ,ZRTUP_MF_LES ) CALL LES_MEAN_ll (ZRTUP_MF_LES , LLES_CURRENT_CART_MASK, & X_LES_SUBGRID_RTUP_MF(:,NLES_CURRENT_TCOUNT,1) ) - ZWORK(:,:,:)=RESHAPE(PRV_UP(:,:),(/ KIU,KJU,KKU /) ) - CALL LES_VER_INT( MZF(ZWORK) ,ZRVUP_MF_LES ) + CALL LES_VER_INT( MZF(PRV_UP) ,ZRVUP_MF_LES ) CALL LES_MEAN_ll (ZRVUP_MF_LES , LLES_CURRENT_CART_MASK, & X_LES_SUBGRID_RVUP_MF(:,NLES_CURRENT_TCOUNT,1) ) - ZWORK(:,:,:)=RESHAPE(PRC_UP(:,:),(/ KIU,KJU,KKU /) ) - CALL LES_VER_INT( MZF(ZWORK) ,ZRCUP_MF_LES ) + CALL LES_VER_INT( MZF(PRC_UP) ,ZRCUP_MF_LES ) CALL LES_MEAN_ll (ZRCUP_MF_LES , LLES_CURRENT_CART_MASK, & X_LES_SUBGRID_RCUP_MF(:,NLES_CURRENT_TCOUNT,1) ) - ZWORK(:,:,:)=RESHAPE(PRI_UP(:,:),(/ KIU,KJU,KKU /) ) - CALL LES_VER_INT( MZF(ZWORK) ,ZRIUP_MF_LES ) + CALL LES_VER_INT( MZF(PRI_UP) ,ZRIUP_MF_LES ) CALL LES_MEAN_ll (ZRIUP_MF_LES , LLES_CURRENT_CART_MASK, & X_LES_SUBGRID_RIUP_MF(:,NLES_CURRENT_TCOUNT,1) ) - ZWORK(:,:,:)=RESHAPE(PEMF(:,:),(/ KIU,KJU,KKU /) ) - CALL LES_VER_INT( MZF(ZWORK) ,ZEMF_MF_LES ) + CALL LES_VER_INT( MZF(PEMF) ,ZEMF_MF_LES ) CALL LES_MEAN_ll (ZEMF_MF_LES , LLES_CURRENT_CART_MASK, & X_LES_SUBGRID_MASSFLUX(:,NLES_CURRENT_TCOUNT,1) ) - ZWORK(:,:,:)=RESHAPE(PDETR(:,:),(/ KIU,KJU,KKU /) ) - CALL LES_VER_INT( MZF(ZWORK) ,ZDETR_MF_LES ) + CALL LES_VER_INT( MZF(PDETR) ,ZDETR_MF_LES ) CALL LES_MEAN_ll (ZDETR_MF_LES , LLES_CURRENT_CART_MASK, & X_LES_SUBGRID_DETR(:,NLES_CURRENT_TCOUNT,1) ) - ZWORK(:,:,:)=RESHAPE(PENTR(:,:),(/ KIU,KJU,KKU /) ) - CALL LES_VER_INT( MZF(ZWORK) ,ZENTR_MF_LES ) + CALL LES_VER_INT( MZF(PENTR) ,ZENTR_MF_LES ) CALL LES_MEAN_ll (ZENTR_MF_LES , LLES_CURRENT_CART_MASK, & X_LES_SUBGRID_ENTR(:,NLES_CURRENT_TCOUNT,1) ) - ZWORK(:,:,:)=RESHAPE(PW_UP(:,:),(/ KIU,KJU,KKU /) ) - CALL LES_VER_INT( MZF(ZWORK) ,ZWUP_MF_LES ) + CALL LES_VER_INT( MZF(PW_UP) ,ZWUP_MF_LES ) CALL LES_MEAN_ll (ZWUP_MF_LES , LLES_CURRENT_CART_MASK, & X_LES_SUBGRID_WUP_MF(:,NLES_CURRENT_TCOUNT,1) ) - ZWORK(:,:,:)=RESHAPE(PFRAC_UP(:,:),(/ KIU,KJU,KKU /) ) - CALL LES_VER_INT( MZF(ZWORK) ,ZFRACUP_MF_LES ) + CALL LES_VER_INT( MZF(PFRAC_UP) ,ZFRACUP_MF_LES ) CALL LES_MEAN_ll (ZFRACUP_MF_LES , LLES_CURRENT_CART_MASK, & X_LES_SUBGRID_FRACUP(:,NLES_CURRENT_TCOUNT,1) ) - ZWORK(:,:,:)=RESHAPE(PTHV_UP(:,:),(/ KIU,KJU,KKU /) ) - CALL LES_VER_INT( MZF(ZWORK) ,ZTHVUP_MF_LES ) + CALL LES_VER_INT( MZF(PTHV_UP) ,ZTHVUP_MF_LES ) CALL LES_MEAN_ll (ZTHVUP_MF_LES , LLES_CURRENT_CART_MASK, & X_LES_SUBGRID_THVUP_MF(:,NLES_CURRENT_TCOUNT,1) ) diff --git a/src/mesonh/ext/phys_paramn.f90 b/src/mesonh/ext/phys_paramn.f90 index 7769b3e049783309ec80c1841696b0d001b8f256..2411666072a4afe4840ebd7fa0738139875ebb78 100644 --- a/src/mesonh/ext/phys_paramn.f90 +++ b/src/mesonh/ext/phys_paramn.f90 @@ -1639,7 +1639,7 @@ IF (CSCONV == 'EDKF') THEN XIMPL_MF, XTSTEP, & XDZZ, XZZ,XDXHAT(1),XDYHAT(1), & XRHODJ, XRHODREF, XPABST, ZEXN, ZSFTH, ZSFRV, & - XTHT,XRT,XUT,XVT,XWT,XTKET,XSVT, & + XTHT,XRT,XUT,XVT,XTKET,XSVT, & XRTHS,XRRS,XRUS,XRVS,XRSVS, & ZSIGMF,XRC_MF, XRI_MF, XCF_MF, XWTHVMF) ! diff --git a/src/mesonh/ext/shallow_mf_pack.f90 b/src/mesonh/ext/shallow_mf_pack.f90 index 8a19fb5e9c9520225aa5876f10db00a169fe13d1..ee2f7e2fb5d794175d12979085583f31a02a53fd 100644 --- a/src/mesonh/ext/shallow_mf_pack.f90 +++ b/src/mesonh/ext/shallow_mf_pack.f90 @@ -16,7 +16,7 @@ INTERFACE PRHODJ, PRHODREF, & PPABSM, PEXN, & PSFTH,PSFRV, & - PTHM,PRM,PUM,PVM,PWM,PTKEM,PSVM, & + PTHM,PRM,PUM,PVM,PTKEM,PSVM, & PRTHS,PRRS,PRUS,PRVS,PRSVS, & PSIGMF,PRC_MF,PRI_MF,PCF_MF,PFLXZTHVMF ) ! ################################################################# @@ -48,7 +48,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXN ! Exner function at t-dt REAL, DIMENSION(:,:), INTENT(IN) :: PSFTH,PSFRV ! normal surface fluxes of theta and Rv REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHM ! Theta at t-dt REAL, DIMENSION(:,:,:,:),INTENT(IN):: PRM ! water var. at t-dt -REAL, DIMENSION(:,:,:), INTENT(IN) :: PUM,PVM,PWM ! wind components at t-dt +REAL, DIMENSION(:,:,:), INTENT(IN) :: PUM,PVM ! wind components at t-dt REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKEM ! tke at t-dt REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVM ! scalar variable a t-dt @@ -74,7 +74,7 @@ END MODULE MODI_SHALLOW_MF_PACK PRHODJ, PRHODREF, & PPABSM, PEXN, & PSFTH,PSFRV, & - PTHM,PRM,PUM,PVM,PWM,PTKEM,PSVM, & + PTHM,PRM,PUM,PVM,PTKEM,PSVM, & PRTHS,PRRS,PRUS,PRVS,PRSVS, & PSIGMF,PRC_MF,PRI_MF,PCF_MF,PFLXZTHVMF ) ! ################################################################# @@ -125,20 +125,18 @@ USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t ! USE MODE_FILL_DIMPHYEX, ONLY: FILL_DIMPHYEX ! -use modd_budget, only: lbudget_u, lbudget_v, lbudget_th, lbudget_rv, lbudget_sv, & - NBUDGET_U, NBUDGET_V, NBUDGET_TH, NBUDGET_RV, NBUDGET_SV1, & - tbudgets +USE MODD_BUDGET, ONLY: TBUDGETS,TBUCONF,lbudget_th,nbudget_th USE MODD_CONF USE MODD_IO, ONLY: TFILEDATA -use modd_field, only: tfielddata, TYPEREAL -USE MODD_NSV +USE modd_field, ONLY: tfielddata, TYPEREAL +USE MODD_NSV, ONLY: XSVMIN, NSV_LGBEG, NSV_LGEND USE MODD_PARAMETERS USE MODD_PARAM_ICE, ONLY: CFRAC_ICE_SHALLOW_MF USE MODD_PARAM_MFSHALL_n -use modd_precision, only: MNHTIME +USE modd_precision, ONLY: MNHTIME -use mode_budget, only: Budget_store_init, Budget_store_end -USE MODE_IO_FIELD_WRITE, only: IO_Field_write +USE mode_budget, ONLY: Budget_store_init, Budget_store_end, Budget_store_add +USE MODE_IO_FIELD_WRITE, ONLY: IO_Field_write USE MODI_DIAGNOS_LES_MF USE MODI_SHALLOW_MF @@ -171,7 +169,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXN ! Exner function at t-dt REAL, DIMENSION(:,:), INTENT(IN) :: PSFTH,PSFRV ! normal surface fluxes of theta and Rv REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHM ! Theta at t-dt REAL, DIMENSION(:,:,:,:),INTENT(IN):: PRM ! water var. at t-dt -REAL, DIMENSION(:,:,:), INTENT(IN) :: PUM,PVM,PWM ! wind components at t-dt +REAL, DIMENSION(:,:,:), INTENT(IN) :: PUM,PVM ! wind components at t-dt REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKEM ! tke at t-dt REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVM ! scalar variable a t-dt @@ -185,155 +183,82 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PFLXZTHVMF ! Thermal produ REAL, INTENT(IN) :: PDX,PDY ! Size of mesh in X/Y directions ! 0.2 Declaration of local variables ! -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZZZ ! Height of flux point -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDZZ ! Metric coefficients -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZRHODJ ! dry density * Grid size -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZRHODREF ! dry density of the - ! reference state -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZPABSM ! Pressure at time t-1 -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZEXN ! Exner function at t-dt - -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZTHM ! Theta at t-dt -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3),SIZE(PRM,4)) :: ZRM ! water var. at t-dt -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZUM,ZVM,ZWM ! wind components at t-dt -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZTKEM ! tke at t-dt - -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3),SIZE(PSVM,4)) :: ZSVM ! scalar variable a t-dt - -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDUDT_TURB ! tendency of U by turbulence only -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDVDT_TURB ! tendency of V by turbulence only -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDTHLDT_TURB ! tendency of thl by turbulence only -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDRTDT_TURB ! tendency of rt by turbulence only -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3),SIZE(PSVM,4)) :: ZDSVDT_TURB ! tendency of Sv by turbulence only -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDUDT_MF ! tendency of U by massflux scheme -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDVDT_MF ! tendency of V by massflux scheme -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDTHLDT_MF ! tendency of thl by massflux scheme -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDRTDT_MF ! tendency of Rt by massflux scheme -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3),SIZE(PSVM,4)) :: ZDSVDT_MF ! tendency of Sv by massflux scheme -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZSIGMF,ZRC_MF,ZRI_MF,ZCF_MF ! cloud info for the cloud scheme -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZFLXZTHVMF ! Thermal production for TKE scheme -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZFLXZTHMF -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZFLXZRMF -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZFLXZUMF -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZFLXZVMF -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZTHL_UP ! updraft characteristics -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZRT_UP ! updraft characteristics -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZRV_UP ! updraft characteristics -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZU_UP ! updraft characteristics -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZV_UP ! updraft characteristics -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZRC_UP ! updraft characteristics -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZRI_UP ! updraft characteristics -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZTHV_UP ! updraft characteristics - -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZTHL_DO ! downdraft characteristics -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZTHV_DO ! downdraft characteristics -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZRT_DO ! downdraft characteristics -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZU_DO ! downdraft characteristics -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZV_DO ! downdraft characteristics - -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZW_UP ! updraft characteristics -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZFRAC_UP ! updraft characteristics -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZEMF ! updraft characteristics -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDETR ! updraft characteristics -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2),SIZE(PTHM,3)) :: ZENTR ! updraft characteristics -INTEGER,DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2)) :: IKLCL,IKETL,IKCTL ! level of LCL,ETL and CTL -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2)) :: ZSFTH ! Surface sensible heat flux -REAL, DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2)) :: ZSFRV ! Surface latent heat flux -! -! -!* 3D arrays -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZWORK ! work array +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDUDT_TURB ! tendency of U by turbulence only +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDVDT_TURB ! tendency of V by turbulence only +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDTHLDT_TURB ! tendency of thl by turbulence only +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDRTDT_TURB ! tendency of rt by turbulence only +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3),SIZE(PSVM,4)) :: ZDSVDT_TURB ! tendency of Sv by turbulence only +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDUDT_MF ! tendency of U by massflux scheme +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDVDT_MF ! tendency of V by massflux scheme +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDTHLDT_MF ! tendency of thl by massflux scheme +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDRTDT_MF ! tendency of Rt by massflux scheme +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3),SIZE(PSVM,4)) :: ZDSVDT_MF ! tendency of Sv by massflux scheme +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZSIGMF,ZRC_MF,ZRI_MF,ZCF_MF ! cloud info for the cloud scheme +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZFLXZTHVMF ! Thermal production for TKE scheme +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZFLXZTHMF +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZFLXZRMF +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZFLXZUMF +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZFLXZVMF +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZTHL_UP ! updraft characteristics +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZRT_UP ! updraft characteristics +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZRV_UP ! updraft characteristics +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZU_UP ! updraft characteristics +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZV_UP ! updraft characteristics +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZRC_UP ! updraft characteristics +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZRI_UP ! updraft characteristics +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZTHV_UP ! updraft characteristics +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZW_UP ! updraft characteristics +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZFRAC_UP ! updraft characteristics +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZEMF ! updraft characteristics +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDETR ! updraft characteristics +REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZENTR ! updraft characteristics REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZUMM ! wind on mass point REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZVMM ! wind on mass point -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZWMM ! wind on mass point -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDUDT ! tendency of U by massflux scheme -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDVDT ! tendency of V by massflux scheme -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDTHLDT ! tendency of thl by massflux scheme -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3)) :: ZDRTDT ! tendency of Rt by massflux scheme -REAL, DIMENSION(SIZE(PTHM,1),SIZE(PTHM,2),SIZE(PTHM,3),SIZE(PSVM,4)) :: ZDSVDT ! tendency of Sv by massflux scheme - +! +INTEGER,DIMENSION(SIZE(PTHM,1)*SIZE(PTHM,2)) :: IKLCL,IKETL,IKCTL ! level of LCL,ETL and CTL INTEGER :: IIU, IJU, IKU, IKB, IKE, IRR, ISV INTEGER :: JK,JRR,JSV ! Loop counters -! + + LOGICAL :: LSTATNW ! switch for HARMONIE-AROME turb physics option ! TODO: linked with modd_turbn + init at default_desfmn TYPE(TFIELDDATA) :: TZFIELD TYPE(DIMPHYEX_t) :: YLDIMPHYEXPACK !------------------------------------------------------------------------ - +! !!! 1. Initialisation CALL FILL_DIMPHYEX(YLDIMPHYEXPACK, SIZE(PZZ,1), SIZE(PZZ,2), SIZE(PZZ,3)) - +! ! Internal Domain IIU=SIZE(PTHM,1) IJU=SIZE(PTHM,2) IKU=SIZE(PTHM,3) IKB=1+JPVEXT IKE=IKU-JPVEXT - +! ! number of moist var IRR=SIZE(PRM,4) ! number of scalar var ISV=SIZE(PSVM,4) - -if ( lbudget_u ) call Budget_store_init( tbudgets(NBUDGET_U ), 'MAFL', prus (:, :, :) ) -if ( lbudget_v ) call Budget_store_init( tbudgets(NBUDGET_V ), 'MAFL', prvs (:, :, :) ) -if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'MAFL', prths(:, :, :) ) -if ( lbudget_rv ) call Budget_store_init( tbudgets(NBUDGET_RV), 'MAFL', prrs (:, :, :, 1) ) -if ( lbudget_sv ) then - do jsv = 1, isv - call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + jsv), 'MAFL', prsvs(:, :, :, jsv) ) - end do -end if - -ZSVM(:,:,:) = 0. -! ! ! wind on mass points ZUMM=MXF(PUM) ZVMM=MYF(PVM) -ZWMM=MZF(PWM) -! -!!! 2. Pack input variables -! -DO JK=1,IKU - ZZZ (:,JK) = RESHAPE(PZZ (:,:,JK),(/ IIU*IJU /) ) - ZDZZ (:,JK) = RESHAPE(PDZZ (:,:,JK),(/ IIU*IJU /) ) - ZRHODJ (:,JK) = RESHAPE(PRHODJ (:,:,JK),(/ IIU*IJU /) ) - ZTHM (:,JK) = RESHAPE(PTHM (:,:,JK),(/ IIU*IJU /) ) - ZTKEM (:,JK) = RESHAPE(PTKEM (:,:,JK),(/ IIU*IJU /) ) - ZPABSM (:,JK) = RESHAPE(PPABSM (:,:,JK),(/ IIU*IJU /) ) - ZEXN (:,JK) = RESHAPE(PEXN (:,:,JK),(/ IIU*IJU /) ) - ZRHODJ (:,JK) = RESHAPE(PRHODJ (:,:,JK),(/ IIU*IJU /) ) - ZRHODREF(:,JK) = RESHAPE(PRHODREF(:,:,JK),(/ IIU*IJU /) ) - ZUM (:,JK) = RESHAPE(ZUMM (:,:,JK),(/ IIU*IJU /) ) - ZVM (:,JK) = RESHAPE(ZVMM (:,:,JK),(/ IIU*IJU /) ) - ZWM (:,JK) = RESHAPE(ZWMM (:,:,JK),(/ IIU*IJU /) ) - DO JRR=1,IRR - ZRM (:,JK,JRR) = RESHAPE(PRM (:,:,JK,JRR),(/ IIU*IJU /) ) - END DO - DO JSV=1,ISV - IF (LNOMIXLG .AND. JSV >= NSV_LGBEG .AND. JSV<= NSV_LGEND) CYCLE - ZSVM(:,JK,JSV) = RESHAPE(PSVM (:,:,JK,JSV),(/ IIU*IJU /) ) - END DO -END DO - -ZSFTH(:)=RESHAPE(PSFTH(:,:),(/ IIU*IJU /) ) -ZSFRV(:)=RESHAPE(PSFRV(:,:),(/ IIU*IJU /) ) - -!!! 3. Call of the physical parameterization of massflux vertical transport +! +!!! 2. Call of the physical parameterization of massflux vertical transport ! LSTATNW = .FALSE. +! CALL SHALLOW_MF(YLDIMPHYEXPACK, CST, NEB, PARAM_MFSHALLN, TURBN, CSTURB,& KRR,KRRL,KRRI,ISV, & CFRAC_ICE_SHALLOW_MF,LNOMIXLG,NSV_LGBEG,NSV_LGEND, & PIMPL_MF, PTSTEP, & - ZDZZ, ZZZ, & - ZRHODJ,ZRHODREF, & - ZPABSM, ZEXN, & - ZSFTH,ZSFRV, & - ZTHM,ZRM,ZUM,ZVM,ZTKEM,ZSVM, & + PDZZ, PZZ, & + PRHODJ,PRHODREF, & + PPABSM, PEXN, & + PSFTH,PSFRV, & + PTHM,PRM,ZUMM,ZVMM,PTKEM,PSVM, & ZDUDT_MF,ZDVDT_MF, & ZDTHLDT_MF,ZDRTDT_MF,ZDSVDT_MF, & ZSIGMF,ZRC_MF,ZRI_MF,ZCF_MF,ZFLXZTHVMF, & @@ -341,62 +266,41 @@ CALL SHALLOW_MF(YLDIMPHYEXPACK, CST, NEB, PARAM_MFSHALLN, TURBN, CSTURB,& ZTHL_UP,ZRT_UP,ZRV_UP,ZRC_UP,ZRI_UP, & ZU_UP, ZV_UP, ZTHV_UP, ZW_UP, & ZFRAC_UP,ZEMF,ZDETR,ZENTR, & - IKLCL,IKETL,IKCTL,PDX,PDY ) - -!!! 4. Unpack output variables - -ZDTHLDT(:,:,:)=RESHAPE(ZDTHLDT_MF(:,:),(/ IIU,IJU,IKU /) ) -ZDRTDT(:,:,:)=RESHAPE(ZDRTDT_MF(:,:),(/ IIU,IJU,IKU /) ) -ZDUDT(:,:,:)=RESHAPE(ZDUDT_MF(:,:),(/ IIU,IJU,IKU /) ) -ZDVDT(:,:,:)=RESHAPE(ZDVDT_MF(:,:),(/ IIU,IJU,IKU /) ) -PSIGMF(:,:,:)=RESHAPE(ZSIGMF(:,:),(/ IIU,IJU,IKU /) ) -PRC_MF(:,:,:)=RESHAPE(ZRC_MF(:,:),(/ IIU,IJU,IKU /) ) -PRI_MF(:,:,:)=RESHAPE(ZRI_MF(:,:),(/ IIU,IJU,IKU /) ) -PCF_MF(:,:,:)=RESHAPE(ZCF_MF(:,:),(/ IIU,IJU,IKU /) ) -PFLXZTHVMF(:,:,:)=RESHAPE(ZFLXZTHVMF(:,:),(/ IIU,IJU,IKU /) ) -DO JSV=1,ISV - IF (LNOMIXLG .AND. JSV >= NSV_LGBEG .AND. JSV<= NSV_LGEND) CYCLE - ZDSVDT(:,:,:,JSV) = RESHAPE(ZDSVDT_MF(:,:,JSV),(/ IIU,IJU,IKU /) ) -END DO + IKLCL,IKETL,IKCTL,PDX,PDY,PRSVS,XSVMIN, & + TBUCONF, TBUDGETS,SIZE(TBUDGETS) ) +! +! Fill non-declared-explicit-dimensions output variables +PSIGMF(:,:,:) = ZSIGMF(:,:,:) +PRC_MF(:,:,:) = ZRC_MF(:,:,:) +PRI_MF(:,:,:) = ZRI_MF(:,:,:) +PCF_MF(:,:,:) = ZCF_MF(:,:,:) +PFLXZTHVMF(:,:,:) = ZFLXZTHVMF(:,:,:) ! -!!! 5. Compute source terms for Meso-NH pronostic variables +!!! 3. Compute source terms for Meso-NH pronostic variables !!! ---------------------------------------------------- - - +! ! As the pronostic variable of Meso-Nh are not (yet) the conservative variables ! the thl tendency is put in th and the rt tendency in rv ! the adjustment will do later the repartition between vapor and cloud PRTHS(:,:,:) = PRTHS(:,:,:) + & - PRHODJ(:,:,:)*ZDTHLDT(:,:,:) + PRHODJ(:,:,:)*ZDTHLDT_MF(:,:,:) PRRS(:,:,:,1) = PRRS(:,:,:,1) + & - PRHODJ(:,:,:)*ZDRTDT(:,:,:) + PRHODJ(:,:,:)*ZDRTDT_MF(:,:,:) PRUS(:,:,:) = PRUS(:,:,:) +MXM( & - PRHODJ(:,:,:)*ZDUDT(:,:,:)) + PRHODJ(:,:,:)*ZDUDT_MF(:,:,:)) PRVS(:,:,:) = PRVS(:,:,:) +MYM( & - PRHODJ(:,:,:)*ZDVDT(:,:,:)) - + PRHODJ(:,:,:)*ZDVDT_MF(:,:,:)) +! DO JSV=1,ISV IF (LNOMIXLG .AND. JSV >= NSV_LGBEG .AND. JSV<= NSV_LGEND) CYCLE PRSVS(:,:,:,JSV) = MAX((PRSVS(:,:,:,JSV) + & - PRHODJ(:,:,:)*ZDSVDT(:,:,:,JSV)),XSVMIN(JSV)) + PRHODJ(:,:,:)*ZDSVDT_MF(:,:,:,JSV)),XSVMIN(JSV)) END DO - -!!! 7. call to MesoNH budgets -if ( lbudget_u ) call Budget_store_end( tbudgets(NBUDGET_U ), 'MAFL', prus (:, :, :) ) -if ( lbudget_v ) call Budget_store_end( tbudgets(NBUDGET_V ), 'MAFL', prvs (:, :, :) ) -if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'MAFL', prths(:, :, :) ) -if ( lbudget_rv ) call Budget_store_end( tbudgets(NBUDGET_RV), 'MAFL', prrs (:, :, :, 1) ) -if ( lbudget_sv ) then - do jsv = 1, isv - call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + jsv), 'MAFL', prsvs(:, :, :, jsv) ) - end do -end if - -!!! 8. Prints the fluxes in output file +! +!!! 4. Prints the fluxes in output file ! IF ( OMF_FLX .AND. tpfile%lopened ) THEN ! stores the conservative potential temperature vertical flux - ZWORK(:,:,:)=RESHAPE(ZFLXZTHMF (:,:),(/ IIU,IJU,IKU /) ) TZFIELD%CMNHNAME = 'MF_THW_FLX' TZFIELD%CSTDNAME = '' TZFIELD%CLONGNAME = 'MF_THW_FLX' @@ -407,10 +311,9 @@ IF ( OMF_FLX .AND. tpfile%lopened ) THEN TZFIELD%NTYPE = TYPEREAL TZFIELD%NDIMS = 3 TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZWORK) + CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZTHMF) ! ! stores the conservative mixing ratio vertical flux - ZWORK(:,:,:)=RESHAPE(ZFLXZRMF(:,:),(/ IIU,IJU,IKU /) ) TZFIELD%CMNHNAME = 'MF_RCONSW_FLX' TZFIELD%CSTDNAME = '' TZFIELD%CLONGNAME = 'MF_RCONSW_FLX' @@ -421,7 +324,7 @@ IF ( OMF_FLX .AND. tpfile%lopened ) THEN TZFIELD%NTYPE = TYPEREAL TZFIELD%NDIMS = 3 TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZWORK) + CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZRMF) ! ! stores the theta_v vertical flux TZFIELD%CMNHNAME = 'MF_THVW_FLX' @@ -438,7 +341,6 @@ IF ( OMF_FLX .AND. tpfile%lopened ) THEN ! IF (PARAM_MFSHALLN%LMIXUV) THEN ! stores the U momentum vertical flux - ZWORK(:,:,:)=RESHAPE(ZFLXZUMF(:,:),(/ IIU,IJU,IKU /) ) TZFIELD%CMNHNAME = 'MF_UW_FLX' TZFIELD%CSTDNAME = '' TZFIELD%CLONGNAME = 'MF_UW_FLX' @@ -449,10 +351,9 @@ IF ( OMF_FLX .AND. tpfile%lopened ) THEN TZFIELD%NTYPE = TYPEREAL TZFIELD%NDIMS = 3 TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZWORK) + CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZUMF) ! ! stores the V momentum vertical flux - ZWORK(:,:,:)=RESHAPE(ZFLXZVMF(:,:),(/ IIU,IJU,IKU /) ) TZFIELD%CMNHNAME = 'MF_VW_FLX' TZFIELD%CSTDNAME = '' TZFIELD%CLONGNAME = 'MF_VW_FLX' @@ -463,14 +364,14 @@ IF ( OMF_FLX .AND. tpfile%lopened ) THEN TZFIELD%NTYPE = TYPEREAL TZFIELD%NDIMS = 3 TZFIELD%LTIMEDEP = .TRUE. - CALL IO_Field_write(TPFILE,TZFIELD,ZWORK) + CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZVMF) ! END IF END IF - -!!! 9. Externalised LES Diagnostic for Mass Flux Scheme +! +!!! 5. Externalised LES Diagnostic for Mass Flux Scheme !!! ------------------------------------------------ - +! CALL DIAGNOS_LES_MF(IIU,IJU,IKU,PTIME_LES, & ZTHL_UP,ZRT_UP,ZRV_UP,ZRC_UP,ZRI_UP, & ZU_UP,ZV_UP,ZTHV_UP,ZW_UP, & @@ -478,6 +379,5 @@ END IF ZFLXZTHMF,ZFLXZTHVMF,ZFLXZRMF, & ZFLXZUMF,ZFLXZVMF, & IKLCL,IKETL,IKCTL ) - - +! END SUBROUTINE SHALLOW_MF_PACK diff --git a/src/testprogs/shallow/main_shallow.F90 b/src/testprogs/shallow/main_shallow.F90 index 8a7a8310d1393593c9a982603a46614f726d76fd..21a7dea9bfd95ecbbb714ca12a83205785adbebc 100644 --- a/src/testprogs/shallow/main_shallow.F90 +++ b/src/testprogs/shallow/main_shallow.F90 @@ -320,7 +320,7 @@ JBLK2 = (NGPBLKS * (ITID+1)) / NTID &PRC_UP=PRC_UP(:,:,:,IBL),PRI_UP=PRI_UP(:,:,:,IBL), & &PU_UP=PU_UP(:,:,:,IBL), PV_UP=PV_UP(:,:,:,IBL), PTHV_UP=PTHV_UP(:,:,:,IBL), PW_UP=PW_UP(:,:,:,IBL), & &PFRAC_UP=PFRAC_UP(:,:,:,IBL),PEMF=PEMF(:,:,:,IBL),PDETR=ZDETR(:,:,:,IBL),PENTR=ZENTR(:,:,:,IBL), & - &KKLCL=IKLCL(:,:,IBL),KKETL=IKETL(:,:,IBL),KKCTL=IKCTL(:,:,IBL),PDX=0.,PDY=0. ) + &KKLCL=IKLCL(:,:,IBL),KKETL=IKETL(:,:,IBL),KKCTL=IKCTL(:,:,IBL),PDX=0.,PDY=0.,KBUDGETS=0 ) #ifdef _OPENACC ENDDO @@ -452,7 +452,9 @@ PARAM_MFSHALLN%XR = 2. PARAM_MFSHALLN%XLAMBDA_MF = 0. PARAM_MFSHALLN%LGZ = .FALSE. PARAM_MFSHALLN%XGZ=1. - +PARAM_MFSHALLN%CMF_UPDRAFT=HMF_UPDRAFT +PARAM_MFSHALLN%CMF_CLOUD=HMF_CLOUD +PARAM_MFSHALLN%LMIXUV=OMIXUV TURBN%LHARAT=.FALSE. TURBN%CTURBDIM = '1DIM' TURBN%XIMPL=1.