From cadd32d861361c03bb58118475a27fbd91f6f53f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Riette?= <sebastien.riette@meteo.fr> Date: Fri, 26 May 2023 20:03:05 +0200 Subject: [PATCH] Initialisation cleaning for LMDZ --- src/lmdz/aux/modd_misc.F90 | 45 +++++++ src/lmdz/ext/mode_init_phyex.F90 | 93 ++++++++++++++ src/lmdz/ext/physiqex_mod.F90 | 208 ++++++++++--------------------- 3 files changed, 205 insertions(+), 141 deletions(-) create mode 100644 src/lmdz/aux/modd_misc.F90 create mode 100644 src/lmdz/ext/mode_init_phyex.F90 diff --git a/src/lmdz/aux/modd_misc.F90 b/src/lmdz/aux/modd_misc.F90 new file mode 100644 index 000000000..f97d2d99f --- /dev/null +++ b/src/lmdz/aux/modd_misc.F90 @@ -0,0 +1,45 @@ +MODULE MODD_MISC +USE MODD_IO, ONLY: TFILEDATA +USE MODD_LES, ONLY: TLES_t +USE MODD_BUDGET, ONLY: NBUDGET_RH, TBUDGETDATA, TBUDGETCONF_t +IMPLICIT NONE +TYPE MISC_t + INTEGER :: KSV_LGBEG = 0 + INTEGER :: KSV_LGEND = 0 + LOGICAL :: ONOMIXLG=.FALSE. + INTEGER :: KMI = 1 + INTEGER :: KGRADIENTS =0 + CHARACTER(LEN=4),DIMENSION(2) :: HLBCX=(/'CYCL','CYCL'/) + CHARACTER(LEN=4),DIMENSION(2) :: HLBCY=(/'CYCL','CYCL'/) + INTEGER :: KSPLIT = 1 + INTEGER :: KHALO=1 + LOGICAL :: O2D=.FALSE. + LOGICAL :: OFLAT=.FALSE. + LOGICAL :: OCOUPLES=.FALSE. + LOGICAL :: OBLOWSNOW=.FALSE. + LOGICAL :: COMPUTE_SRC=.TRUE. + LOGICAL :: OOCEAN=.FALSE. + LOGICAL :: ODEEPOC=.FALSE. + REAL :: ZCEI_MAX=1.0 + REAL :: ZCEI_MIN=0.0 + REAL :: ZCOEF_AMPL_SAT=0.0 + REAL :: PRSNOW=1.0 + INTEGER :: KSV_LIMA_NR=0 + INTEGER :: KSV_LIMA_NS=0 + INTEGER :: KSV_LIMA_NG=0 + INTEGER :: KSV_LIMA_NH=0 + LOGICAL :: OIBM=.FALSE. + LOGICAL :: OFLYER=.FALSE. + LOGICAL :: ODIAG_IN_RUN=.FALSE. + CHARACTER(LEN=4) :: HTURBLEN_CL='NONE' + TYPE(TFILEDATA) :: ZTFILE + TYPE(TLES_t) :: TLES + CHARACTER(LEN=6) :: CPROGRAM + CHARACTER(LEN=4) ::CMICRO + CHARACTER(LEN=4) ::CSCONV + CHARACTER(LEN=4) ::CTURB + TYPE(TBUDGETDATA), DIMENSION(NBUDGET_RH) :: YLBUDGET + INTEGER :: NBUDGET = NBUDGET_RH + TYPE(TBUDGETCONF_t) :: TBUCONF +END TYPE MISC_t +END MODULE MODD_MISC diff --git a/src/lmdz/ext/mode_init_phyex.F90 b/src/lmdz/ext/mode_init_phyex.F90 new file mode 100644 index 000000000..e289afc83 --- /dev/null +++ b/src/lmdz/ext/mode_init_phyex.F90 @@ -0,0 +1,93 @@ +MODULE MODE_INIT_PHYEX +IMPLICIT NONE +CONTAINS +SUBROUTINE FILL_DIMPHYEX(KLON, KLEV, D) +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +USE MODD_PARAMETERS, ONLY: JPVEXT_TURB +IMPLICIT NONE +INTEGER, INTENT(IN) :: KLON +INTEGER, INTENT(IN) :: KLEV +TYPE(DIMPHYEX_t), INTENT(OUT) :: D +D%NIT = KLON +D%NIB = 1 +D%NIE = KLON +D%NJT = 1 +D%NJB = 1 +D%NJE = 1 +D%NIJT = D%NIT * D%NJT +D%NIJB = 1 +D%NIJE = 1 +D%NKL = 1 +D%NKT = KLEV+2 +D%NKA = 1 +D%NKU = KLEV+2 +D%NKB = 1+JPVEXT_TURB +D%NKE = D%NKT - JPVEXT_TURB +D%NKTB = 1+JPVEXT_TURB +D%NKTE = D%NKT - JPVEXT_TURB +D%NIBC = 1 +D%NJBC = 1 +D%NIEC = D%NIE +D%NJEC = D%NJT +END SUBROUTINE FILL_DIMPHYEX +! +SUBROUTINE INIT_PHYEX(PTSTEP, PDZMIN, PHYEX) +! +USE MODD_PHYEX, ONLY: PHYEX_t +USE MODI_INI_PHYEX, ONLY: INI_PHYEX +! +IMPLICIT NONE +! +REAL, INTENT(IN) :: PTSTEP +REAL, INTENT(IN) :: PDZMIN +TYPE(PHYEX_t), INTENT(OUT) :: PHYEX +! +CHARACTER(LEN=6) :: CPROGRAM +CHARACTER(LEN=4) :: CMICRO +CHARACTER(LEN=4) :: CSCONV +CHARACTER(LEN=4) :: CTURB +INTEGER :: K +! +!General configuration, cannot be modified by namelist +CPROGRAM='AROME ' +CMICRO='ICE3' +CSCONV='EDKF' +CTURB='TKEL' +! +! Initialize PHYEX +CALL INI_PHYEX(HPROGRAM=CPROGRAM, KUNITNML=0, LDNEEDNAM=.TRUE., & + &KLUOUT=20, KFROM=0, KTO=1, & + &PTSTEP=PTSTEP, PDZMIN=PDZMIN, & + &CMICRO=CMICRO, CSCONV=CSCONV, CTURB=CTURB, & + &LDDEFAULTVAL=.TRUE., LDREADNAM=.FALSE., LDCHECK=.TRUE., & + &KPRINT=2, LDINIT=.TRUE., & + &PHYEX_OUT=PHYEX) +! +PHYEX%MISC%CPROGRAM=CPROGRAM +PHYEX%MISC%ZTFILE%LOPENED=.FALSE. +PHYEX%MISC%TLES%LLES=.FALSE. +PHYEX%MISC%CMICRO=CMICRO +PHYEX%MISC%CSCONV=CSCONV +PHYEX%MISC%CTURB=CTURB +! +! Budgets +DO K=1, PHYEX%MISC%NBUDGET + PHYEX%MISC%YLBUDGET(K)%NBUDGET=K +ENDDO +PHYEX%MISC%TBUCONF%LBU_ENABLE=.FALSE. +PHYEX%MISC%TBUCONF%LBUDGET_U=.FALSE. +PHYEX%MISC%TBUCONF%LBUDGET_V=.FALSE. +PHYEX%MISC%TBUCONF%LBUDGET_W=.FALSE. +PHYEX%MISC%TBUCONF%LBUDGET_TH=.FALSE. +PHYEX%MISC%TBUCONF%LBUDGET_TKE=.FALSE. +PHYEX%MISC%TBUCONF%LBUDGET_RV=.FALSE. +PHYEX%MISC%TBUCONF%LBUDGET_RC=.FALSE. +PHYEX%MISC%TBUCONF%LBUDGET_RR=.FALSE. +PHYEX%MISC%TBUCONF%LBUDGET_RI=.FALSE. +PHYEX%MISC%TBUCONF%LBUDGET_RS=.FALSE. +PHYEX%MISC%TBUCONF%LBUDGET_RG=.FALSE. +PHYEX%MISC%TBUCONF%LBUDGET_RH=.FALSE. +PHYEX%MISC%TBUCONF%LBUDGET_SV=.FALSE. +! +END SUBROUTINE INIT_PHYEX +END MODULE MODE_INIT_PHYEX diff --git a/src/lmdz/ext/physiqex_mod.F90 b/src/lmdz/ext/physiqex_mod.F90 index e4b4a4917..b98af7d69 100644 --- a/src/lmdz/ext/physiqex_mod.F90 +++ b/src/lmdz/ext/physiqex_mod.F90 @@ -4,6 +4,33 @@ IMPLICIT NONE CONTAINS + +!TODO list pour un branchement plus propre +! * PHYEX considère toutes les espèces microphysiques et la tke comme pronostiques, des termes de tendances +! sont calculés. L'avance temporelle est faite en fin de pas de temps. +! * PHYEX a besoin de variables avec mémoire d'un pas de temps à l'autre (que ce soit les variables pronostiques +! décrites juste au dessus ou d'autres). Ce sont les tableaux ALLOCATABLE. Ces variables pourraient devenir +! des traceurs. +! * La variable ZDZMIN est ici calculée avec un MINVAL qui conduira à des résultats différents +! lorsque la distribution (noeuds/procs) sera différente. Cette variable est utile pour déterminer +! un critère CFL pour la sédimentation des précipitations. Il suffit donc d'avoir une valeur +! approchante. + + + + + + + + + + + + + + + + SUBROUTINE physiqex (nlon,nlev, & & debut,lafin,pdtphys, & & paprs,pplay,pphi,pphis,presnivs, & @@ -20,19 +47,12 @@ CONTAINS USE phyetat0_mod, only: phyetat0 USE output_physiqex_mod, ONLY: output_physiqex ! PHYEX internal modules + USE MODE_INIT_PHYEX, ONLY: INIT_PHYEX, FILL_DIMPHYEX USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t USE MODD_PHYEX, ONLY: PHYEX_t USE MODI_INI_PHYEX, ONLY: INI_PHYEX USE MODI_ICE_ADJUST, ONLY: ICE_ADJUST USE MODI_RAIN_ICE, ONLY: RAIN_ICE - USE MODD_BUDGET, ONLY: TBUCONF_ASSOCIATE, NBUDGET_RH, TBUCONF, LBU_ENABLE, & - & LBUDGET_U, LBUDGET_V, LBUDGET_W, LBUDGET_TH, & - & LBUDGET_TKE, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR, & - & LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, LBUDGET_SV, & - & TBUDGETDATA - USE MODD_IO, ONLY: TFILEDATA - USE MODD_LES, ONLY: TLES_t - USE MODD_PARAMETERS, ONLY: JPVEXT_TURB USE MODI_TURB USE MODI_SHALLOW_MF IMPLICIT none @@ -73,7 +93,6 @@ CONTAINS !$OMP THREADPRIVATE(clesphy0) ! Saved variables -TYPE(TBUDGETDATA), DIMENSION(NBUDGET_RH), SAVE :: YLBUDGET REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: PSIGS !variance of s REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: PCF_MF, PRC_MF, PRI_MF !shallow convection cloud REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: ZQR, ZQS, ZQG !rain, snow, graupel specifiq contents @@ -81,26 +100,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: PTKEM ! TKE TYPE(DIMPHYEX_t),SAVE :: D TYPE(PHYEX_t), SAVE :: PHYEX ! -REAL :: PTSTEP INTEGER, PARAMETER :: KRR=6, KRRL=2, KRRI=3, KSV=0 -CHARACTER(LEN=4) :: HBUNAME -LOGICAL :: LMFCONV -LOGICAL :: OCOMPUTE_SRC -LOGICAL :: ONOMIXLG -INTEGER :: KSV_LGBEG, KSV_LGEND -REAL :: PDX, PDY -INTEGER :: KMI, KSPLIT, KGRADIENTS, KHALO -CHARACTER(LEN=4),DIMENSION(2) :: HLBCX, HLBCY -CHARACTER(LEN=6) :: CPROGRAM -INTEGER :: KSV_LIMA_NR, KSV_LIMA_NS, KSV_LIMA_NG, KSV_LIMA_NH -LOGICAL :: O2D, OFLAT, OCOUPLES, OBLOWSNOW, OOCEAN, ODEEPOC -LOGICAL :: OIBM, OFLYER -TYPE(TFILEDATA) :: ZTFILE -REAL :: ZCEI_MAX, ZCEI_MIN, ZCOEF_AMPL_SAT -REAL :: PRSNOW -LOGICAL :: ODIAG_IN_RUN -CHARACTER(LEN=4) :: HTURBLEN_CL -CHARACTER(LEN=4) :: CMICRO INTEGER :: JRR ! Time-State variables and Sources variables REAL, DIMENSION(klon,klev+2) :: ZUT, ZVT ! wind component on klev+2 @@ -116,7 +116,7 @@ REAL, DIMENSION(klon,klev+2) :: PTHVREF ! Virtual Potential Temperature of t ! Adjustment variables REAL, DIMENSION(KLON,KLEV+2) :: zqdm !1-qt=1/(1+rt) REAL, DIMENSION(KLON,KLEV+2) :: zqt !mixing ratio and total specifiq content -REAL, DIMENSION(KLON,KLEV+2) :: ZTHETA, zexn !theta and exner function +REAL, DIMENSION(KLON,KLEV+2) :: ZTHETA, ZEXN !theta and exner function REAL, DIMENSION(KLON,KLEV+2) :: ZTHETAS !tendency REAL, DIMENSION(KLON,KLEV+2) :: ZTHETAS0 REAL, DIMENSION(KLON,KLEV+2) :: zz_mass !altitude above ground of mass points @@ -131,6 +131,7 @@ REAL, DIMENSION(KLON,KLEV+2) :: ZSRC ! bar(s'rc') REAL, DIMENSION(KLON,KLEV+2) :: ZCLDFR !cloud fraction REAL, DIMENSION(KLON,KLEV+2) :: ZHLC_HRC, ZHLC_HCF, ZHLI_HRI, ZHLI_HCF !subgrid autoconversion ! Rain_ice variables +real :: ZDZMIN real, dimension(klon, klev+2) :: ZCIT !ice concentration real, dimension(klon) :: ZINPRC, ZINPRR, ZINPRS, ZINPRG !precipitation flux at ground real, dimension(klon, klev+2) :: ZEVAP3D !evaporation (diag) @@ -138,7 +139,6 @@ real, dimension(klon, klev+2) :: ZRAINFR real, dimension(klon) :: ZINDEP !deposition flux, already contained in ZINPRC real, dimension(klon) :: ZSEA, ZTOWN !sea and town fractions in the frid cell ! Turbulence variables -TYPE(TLES_t) :: TLES ! Type for LES diagnostics (not possible here) REAL, DIMENSION(klon,klev+2) :: PDXX,PDYY,PDZX,PDZY ! metric coefficients REAL, DIMENSION(klon,klev+2) :: PZZ ! physical distance between 2 succesive grid points along the K direction REAL, DIMENSION(klon) :: PDIRCOSXW, PDIRCOSYW, PDIRCOSZW ! Director Cosinus along x, y and z directions at surface w-point @@ -221,59 +221,14 @@ if (debut) then ! Things to do only for the first call to physics !CALL ymds2ju(annee0, month, dayref, hour, zjulian) call ymds2ju(1979, 1, 1, 0.0, zjulian) - ! Initialize PHYEX - CALL INI_PHYEX(HPROGRAM='AROME ', KUNITNML=0, LDNEEDNAM=.TRUE., & - &KLUOUT=20, KFROM=0, KTO=1, & - &PTSTEP=pdtphys, PDZMIN=999., & - &CMICRO='ICE3', CSCONV='EDKF', CTURB='TKEL', & - &LDDEFAULTVAL=.TRUE., LDREADNAM=.FALSE., LDCHECK=.FALSE., & - &KPRINT=2, LDINIT=.TRUE., & - &PHYEX_OUT=PHYEX) + ZDZMIN=MINVAL((pphi(:,2:) - pphi(:,1:klev-1))/9.81) + CALL INIT_PHYEX(pdtphys, ZDZMIN, PHYEX) + CALL FILL_DIMPHYEX(KLON, KLEV, D) + !Update default values PHYEX%NEBN%LSUBG_COND = .TRUE. PHYEX%PARAM_ICEN%CSUBG_AUCV_RC='PDF' - - D%NIT = klon - D%NIB = 1 - D%NIE = klon - D%NJT = 1 - D%NJB = 1 - D%NJE = 1 - D%NIJT = D%NIT * D%NJT - D%NIJB = 1 - D%NIJE = 1 - D%NKL = 1 - D%NKT = klev+2 - D%NKA = 1 - D%NKU = klev+2 - D%NKB = 1+JPVEXT_TURB - D%NKE = D%NKT - JPVEXT_TURB - D%NKTB = 1+JPVEXT_TURB - D%NKTE = D%NKT - JPVEXT_TURB - D%NIBC = 1 - D%NJBC = 1 - D%NIEC = D%NIE - D%NJEC = D%NJT ! - !Budgets - CALL TBUCONF_ASSOCIATE - DO K=1, NBUDGET_RH - YLBUDGET(K)%NBUDGET=K - ENDDO - LBU_ENABLE=.FALSE. - LBUDGET_U=.FALSE. - LBUDGET_V=.FALSE. - LBUDGET_W=.FALSE. - LBUDGET_TH=.FALSE. - LBUDGET_TKE=.FALSE. - LBUDGET_RV=.FALSE. - LBUDGET_RC=.FALSE. - LBUDGET_RR=.FALSE. - LBUDGET_RI=.FALSE. - LBUDGET_RS=.FALSE. - LBUDGET_RG=.FALSE. - LBUDGET_RH=.FALSE. - LBUDGET_SV=.FALSE. ! Variables saved ALLOCATE(PTKEM(klon,klev+2)) ! variables not advected yet (TODO) ALLOCATE(PSIGS(klon,klev+2)) @@ -311,38 +266,6 @@ d_qs(1:klon,1:klev)=0. d_qg(1:klon,1:klev)=0. d_ps(1:klon)=0. ! -KSV_LGBEG = 0 -KSV_LGEND = 0 -ONOMIXLG=.FALSE. -KMI = 1 -KGRADIENTS =0 -HLBCX(:)=(/'CYCL','CYCL'/) -HLBCY(:)=(/'CYCL','CYCL'/) -KSPLIT = 1 -KHALO=1 -CPROGRAM='AROME ' -O2D=.FALSE. -OFLAT=.FALSE. -OCOUPLES=.FALSE. -OBLOWSNOW=.FALSE. -OCOMPUTE_SRC=.TRUE. -OOCEAN=.FALSE. -ODEEPOC=.FALSE. -ZTFILE%LOPENED=.FALSE. -ZCEI_MAX=1.0 -ZCEI_MIN=0.0 -ZCOEF_AMPL_SAT=0.0 -KSV_LIMA_NR=0 -KSV_LIMA_NS=0 -KSV_LIMA_NG=0 -KSV_LIMA_NH=0 -OIBM=.FALSE. -OFLYER=.FALSE. -PRSNOW=1.0 -ODIAG_IN_RUN=.FALSE. -HTURBLEN_CL='NONE' -CMICRO='ICE3' -TLES%LLES=.FALSE. ZDXX(:,:) = 0. ZDYY(:,:) = 0. ZDZX(:,:) = 0. @@ -380,9 +303,9 @@ ZRX(:,klev+2,:)=0. !no hydrometeors out of atmosphere ! ZRXS(:,:,:) = ZRX(:,:,:)/pdtphys ! -zexn(:,2:klev+1) = (pplay(:,:) / PHYEX%CST%XP00) ** (PHYEX%CST%XRD/PHYEX%CST%XCPD) -ZTHETA(:,2:klev+1) = t(:,:) / zexn(:,2:klev+1) -CALL VERTICAL_EXTEND(zexn,klev) +ZEXN(:,2:klev+1) = (pplay(:,:) / PHYEX%CST%XP00) ** (PHYEX%CST%XRD/PHYEX%CST%XCPD) +ZTHETA(:,2:klev+1) = t(:,:) / ZEXN(:,2:klev+1) +CALL VERTICAL_EXTEND(ZEXN,klev) CALL VERTICAL_EXTEND(ZTHETA,klev) ZTHETAS(:,:)=ZTHETA(:,:)/pdtphys @@ -414,7 +337,8 @@ ZRHOD(:,2:klev+1)=ZPABST(:,2:klev+1)/(t*(PHYEX%CST%XRD+ZRX(:,2:klev+1,1)*PHYEX%C DO k=2,klev+1 PRHODJ(:,k) = ZRHOD(:,k) * (zdzf(:,k)*cell_area(:)) END DO -PTHVREF(:,2:klev+1) = ZTHETA(:,2:klev+1) * (1.0 + qx(:,:,1) * (PHYEX%CST%XRV/PHYEX%CST%XRD - 1.0) - qx(:,:,2) - qx(:,:,3)) +PTHVREF(:,2:klev+1) = ZTHETA(:,2:klev+1) * (1.0 + qx(:,:,1) * (PHYEX%CST%XRV/PHYEX%CST%XRD - 1.0) - & + &qx(:,:,2) - qx(:,:,3)) CALL VERTICAL_EXTEND(ZPABST,klev) CALL VERTICAL_EXTEND(PRHODJ,klev) @@ -434,16 +358,17 @@ ZSRC(:,:) = 0. ZTHETAS0=ZTHETAS ZSIGQSAT=PHYEX%NEBN%VSIGQSAT CALL ICE_ADJUST (D, PHYEX%CST, PHYEX%RAIN_ICE_PARAMN, PHYEX%NEBN, PHYEX%TURBN, PHYEX%PARAM_ICEN, & - &TBUCONF, KRR, & + &PHYEX%MISC%TBUCONF, KRR, & &'ADJU', & &pdtphys, ZSIGQSAT, & - &PRHODJ, zexn, ZRHOD, PSIGS, .FALSE., zmfconv, & + &PRHODJ, ZEXN, ZRHOD, PSIGS, .FALSE., zmfconv, & &ZPABST, ZZ_MASS, & - &zexn, PCF_MF, PRC_MF, PRI_MF, & + &ZEXN, PCF_MF, PRC_MF, PRI_MF, & &ZICLDFR, ZWCLDFR, ZSSIO, ZSSIU, ZIFR, & &ZRX(:,:,1), ZRX(:,:,2), ZRXS(:,:,1), ZRXS(:,:,2), ZTHETA, ZTHETAS, & - &.TRUE., ZSRC, ZCLDFR, & - &ZRX(:,:,3), ZRX(:,:,4), ZRXS(:,:,4), ZRX(:,:,5), ZRX(:,:,6), YLBUDGET, NBUDGET_RH, & + &PHYEX%MISC%COMPUTE_SRC, ZSRC, ZCLDFR, & + &ZRX(:,:,3), ZRX(:,:,4), ZRXS(:,:,4), ZRX(:,:,5), ZRX(:,:,6), & + &PHYEX%MISC%YLBUDGET, PHYEX%MISC%NBUDGET, & &ZICE_CLD_WGT, & !&POUT_RV, POUT_RC, POUT_RI, POUT_TH, & &ZHLC_HRC, ZHLC_HCF, ZHLI_HRI, ZHLI_HCF ) @@ -452,7 +377,7 @@ CALL ICE_ADJUST (D, PHYEX%CST, PHYEX%RAIN_ICE_PARAMN, PHYEX%NEBN, PHYEX%TURBN, P d_qx(:,1:klev,1)=d_qx(:,1:klev,1) + (ZRXS(:,2:klev+1,1)-ZRXS0(:,2:klev+1,1))*ZQDM(:,2:klev+1) d_qx(:,1:klev,2)=d_qx(:,1:klev,2) + (ZRXS(:,2:klev+1,2)-ZRXS0(:,2:klev+1,2))*ZQDM(:,2:klev+1) d_qx(:,1:klev,3)=d_qx(:,1:klev,3) + (ZRXS(:,2:klev+1,4)-ZRXS0(:,2:klev+1,4))*ZQDM(:,2:klev+1) -d_t(:,1:klev)=d_t(:,1:klev) + (ZTHETAS(:,2:klev+1)-ZTHETAS0(:,2:klev+1))*zexn(:,2:klev+1) +d_t(:,1:klev)=d_t(:,1:klev) + (ZTHETAS(:,2:klev+1)-ZTHETAS0(:,2:klev+1))*ZEXN(:,2:klev+1) ! !------------------------------------------------------------ ! Surface @@ -481,11 +406,11 @@ PSFV(:) = 0. ! CALL SHALLOW_MF(D, PHYEX%CST, PHYEX%NEBN, PHYEX%PARAM_MFSHALLN, PHYEX%TURBN, PHYEX%CSTURB, & &KRR=KRR, KRRL=KRRL, KRRI=KRRI, KSV=KSV, & - &ONOMIXLG=ONOMIXLG,KSV_LGBEG=KSV_LGBEG,KSV_LGEND=KSV_LGEND, & + &ONOMIXLG=PHYEX%MISC%ONOMIXLG,KSV_LGBEG=PHYEX%MISC%KSV_LGBEG,KSV_LGEND=PHYEX%MISC%KSV_LGEND, & &PTSTEP=pdtphys, & &PDZZ=zdzm(:,:),PZZ=zz_mass(:,:), & &PRHODJ=PRHODJ(:,:),PRHODREF=ZRHOD(:,:), & - &PPABSM=ZPABST(:,:),PEXNM=zexn(:,:), & + &PPABSM=ZPABST(:,:),PEXNM=ZEXN(:,:), & &PSFTH=PSFTH(:),PSFRV=PSFRV(:), & &PTHM=ZTHETA(:,:),PRM=ZRX(:,:,:),PUM=ZUT(:,:),PVM=ZVT(:,:), & &PTKEM=PTKEM(:,:),PSVM=ZSVT(:,:,:), & @@ -498,12 +423,12 @@ PSFV(:) = 0. &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=PDETR(:,:),PENTR=PENTR(:,:), & - &KKLCL=IKLCL(:),KKETL=IKETL(:),KKCTL=IKCTL(:),PDX=1000.0,PDY=1000.0,KBUDGETS=NBUDGET_RH ) + &KKLCL=IKLCL(:),KKETL=IKETL(:),KKCTL=IKCTL(:),PDX=1000.0,PDY=1000.0,KBUDGETS=PHYEX%MISC%NBUDGET ) ! Add tendencies of shallow to total physics tendency d_u(:,1:klev) = d_u(:,1:klev) + PDUDT_MF(:,2:klev+1) d_v(:,1:klev) = d_v(:,1:klev) + PDVDT_MF(:,2:klev+1) -d_t(:,1:klev) = d_t(:,1:klev) + PDTHLDT_MF(:,2:klev+1)*zexn(:,2:klev+1) !TODO Theta_l en theta ? +d_t(:,1:klev) = d_t(:,1:klev) + PDTHLDT_MF(:,2:klev+1)*ZEXN(:,2:klev+1) !TODO Theta_l en theta ? d_qx(:,1:klev,1)=d_qx(:,1:klev,1) + PDRTDT_MF(:,2:klev+1)*zqdm(:,2:klev+1) ! TODO add SV tendencies ! @@ -519,16 +444,17 @@ ZRRS(:,:,:) = 0. ZRSVS(:,:,:) = 0. !ZRTKES(:,:) = PTKEM * PRHODJ/ pdtphys ZRTKES(:,:) = 0. -CALL TURB(PHYEX%CST, PHYEX%CSTURB, TBUCONF, PHYEX%TURBN, PHYEX%NEBN, D, TLES, & - & KMI, KRR, KRRL, KRRI, HLBCX, HLBCY, KGRADIENTS, KHALO, & - & KSPLIT,KMI, KSV, KSV_LGBEG, KSV_LGEND, & - & CPROGRAM, & - & KSV_LIMA_NR, KSV_LIMA_NS, KSV_LIMA_NG, KSV_LIMA_NH, & - & O2D, ONOMIXLG, OFLAT, OCOUPLES, OBLOWSNOW,OIBM, & - & OFLYER, OCOMPUTE_SRC, PRSNOW, & - & OOCEAN, ODEEPOC, ODIAG_IN_RUN, & - & HTURBLEN_CL,CMICRO, & - & pdtphys,ZTFILE, & +CALL TURB(PHYEX%CST, PHYEX%CSTURB, PHYEX%MISC%TBUCONF, PHYEX%TURBN, PHYEX%NEBN, D, PHYEX%MISC%TLES, & + & PHYEX%MISC%KMI, KRR, KRRL, KRRI, PHYEX%MISC%HLBCX, PHYEX%MISC%HLBCY, PHYEX%MISC%KGRADIENTS, PHYEX%MISC%KHALO,& + & PHYEX%MISC%KSPLIT,PHYEX%MISC%KMI, KSV, PHYEX%MISC%KSV_LGBEG, PHYEX%MISC%KSV_LGEND, & + & PHYEX%MISC%CPROGRAM, & + & PHYEX%MISC%KSV_LIMA_NR, PHYEX%MISC%KSV_LIMA_NS, PHYEX%MISC%KSV_LIMA_NG, PHYEX%MISC%KSV_LIMA_NH, & + & PHYEX%MISC%O2D, PHYEX%MISC%ONOMIXLG, PHYEX%MISC%OFLAT, PHYEX%MISC%OCOUPLES, & + & PHYEX%MISC%OBLOWSNOW,PHYEX%MISC%OIBM, & + & PHYEX%MISC%OFLYER, PHYEX%MISC%COMPUTE_SRC, PHYEX%MISC%PRSNOW, & + & PHYEX%MISC%OOCEAN, PHYEX%MISC%ODEEPOC, PHYEX%MISC%ODIAG_IN_RUN, & + & PHYEX%MISC%HTURBLEN_CL,PHYEX%MISC%CMICRO, & + & pdtphys,PHYEX%MISC%ZTFILE, & & ZDXX(:,:),ZDYY(:,:),zdzm(:,:), & & ZDZX(:,:),ZDZY(:,:),zz_flux(:,:), & & ZDIRCOSXW(:),ZDIRCOSYW(:),ZDIRCOSZW(:),ZCOSSLOPE(:),ZSINSLOPE(:), & @@ -537,16 +463,16 @@ CALL TURB(PHYEX%CST, PHYEX%CSTURB, TBUCONF, PHYEX%TURBN, PHYEX%NEBN, D, TLES, & ZPABST(:,:),ZUT(:,:),ZVT(:,:),PWT(:,:),PTKEM(:,:),ZSVT(:,:,:),ZSRC(:,:), & & PLENGTHM(:,:),PLENGTHH(:,:),MFMOIST(:,:), & & ZBL_DEPTH(:),ZSBL_DEPTH(:), & - & ZCEI(:,:),ZCEI_MIN,ZCEI_MAX,ZCOEF_AMPL_SAT, & + & ZCEI(:,:),PHYEX%MISC%ZCEI_MIN,PHYEX%MISC%ZCEI_MAX,PHYEX%MISC%ZCOEF_AMPL_SAT, & & ZTHETA(:,:),ZRX(:,:,:), & & ZRUS(:,:),ZRVS(:,:),ZRWS(:,:),ZRTHS(:,:),ZRRS(:,:,:),ZRSVS(:,:,:),ZRTKES(:,:), & & PSIGS(:,:), & & ZFLXZTHVMF(:,:),ZWTH(:,:),ZWRC(:,:),ZWSV(:,:,:),ZDP(:,:),ZTP(:,:),ZTDIFF(:,:),ZTDISS(:,:), & - & YLBUDGET, NBUDGET_RH ) + & PHYEX%MISC%YLBUDGET, PHYEX%MISC%NBUDGET ) ! Add tendencies of turb to total physics tendency d_u(:,1:klev) = d_u(:,1:klev) + ZRUS(:,2:klev+1)/PRHODJ(:,2:klev+1) d_v(:,1:klev) = d_v(:,1:klev) + ZRVS(:,2:klev+1)/PRHODJ(:,2:klev+1) -d_t(:,1:klev) = d_t(:,1:klev) + ZRTHS(:,2:klev+1)*zexn(:,2:klev+1)/PRHODJ(:,2:klev+1) +d_t(:,1:klev) = d_t(:,1:klev) + ZRTHS(:,2:klev+1)*ZEXN(:,2:klev+1)/PRHODJ(:,2:klev+1) d_qx(:,1:klev,1)=d_qx(:,1:klev,1) + ZRRS(:,2:klev+1,1)/PRHODJ(:,2:klev+1)*zqdm(:,2:klev+1) d_qx(:,1:klev,2)=d_qx(:,1:klev,2) + ZRRS(:,2:klev+1,2)/PRHODJ(:,2:klev+1)*zqdm(:,2:klev+1) d_qx(:,1:klev,3)=d_qx(:,1:klev,3) + ZRRS(:,2:klev+1,4)/PRHODJ(:,2:klev+1)*zqdm(:,2:klev+1) @@ -562,7 +488,7 @@ ZRXS0=ZRXS ZSEA=1. ZTOWN=0. ZCIT=0. -CALL RAIN_ICE (D, PHYEX%CST, PHYEX%PARAM_ICEN, PHYEX%RAIN_ICE_PARAMN, PHYEX%RAIN_ICE_DESCRN, TBUCONF, & +CALL RAIN_ICE (D, PHYEX%CST, PHYEX%PARAM_ICEN, PHYEX%RAIN_ICE_PARAMN, PHYEX%RAIN_ICE_DESCRN, PHYEX%MISC%TBUCONF, & pdtphys, KRR, ZEXN, & zdzf, PRHODJ, ZRHOD, ZEXN, ZPABST, ZCIT, ZCLDFR, & ZHLC_HRC, ZHLC_HCF, ZHLI_HRI, ZHLI_HCF, & @@ -570,7 +496,7 @@ CALL RAIN_ICE (D, PHYEX%CST, PHYEX%PARAM_ICEN, PHYEX%RAIN_ICE_PARAMN, PHYEX%RAIN ZRX(:,:,6), zthetas, ZRXS(:,:,1), ZRXS(:,:,2), ZRXS(:,:,3), ZRXS(:,:,4), ZRXS(:,:,5), ZRXS(:,:,6), & ZINPRC, ZINPRR, ZEVAP3D, & ZINPRS, ZINPRG, ZINDEP, ZRAINFR, PSIGS, & - YLBUDGET, NBUDGET_RH, & + PHYEX%MISC%YLBUDGET, PHYEX%MISC%NBUDGET, & ZSEA, ZTOWN ) ! Tendencies, mixing ratio -> specific d_qx(:,1:klev,1)=d_qx(:,1:klev,1) + (ZRXS(:,2:klev+1,1)-ZRXS0(:,2:klev+1,1))*ZQDM(:,2:klev+1) @@ -580,7 +506,7 @@ d_qr(:,1:klev)=d_qr(:,1:klev) + (ZRXS(:,2:klev+1,3)-ZRXS0(:,2:klev+1,3))*ZQDM(:, d_qs(:,1:klev)=d_qs(:,1:klev) + (ZRXS(:,2:klev+1,5)-ZRXS0(:,2:klev+1,5))*ZQDM(:,2:klev+1) d_qg(:,1:klev)=d_qg(:,1:klev) + (ZRXS(:,2:klev+1,6)-ZRXS0(:,2:klev+1,6))*ZQDM(:,2:klev+1) -d_t(:,1:klev)=d_t(:,1:klev) + (zthetas(:,2:klev+1)-zthetas0(:,2:klev+1))*zexn(:,2:klev+1) +d_t(:,1:klev)=d_t(:,1:klev) + (zthetas(:,2:klev+1)-zthetas0(:,2:klev+1))*ZEXN(:,2:klev+1) !------------------------------------------------------------ ! Time evolution (values for next time step) -- GitLab