From 2b94e797404aa5bb6b5232c0ef5cc04dc30e4c5a Mon Sep 17 00:00:00 2001 From: Quentin Rodier <quentin.rodier@meteo.fr> Date: Thu, 25 May 2023 15:48:07 +0200 Subject: [PATCH] Sebastien 25/05/2023: plug ICE_ADJUST into LMDZ + bugfixes and start implement SHALLOW convection --- src/lmdz/ext/physiqex_mod.F90 | 325 ++++++++++++++++++++++++---------- 1 file changed, 229 insertions(+), 96 deletions(-) diff --git a/src/lmdz/ext/physiqex_mod.F90 b/src/lmdz/ext/physiqex_mod.F90 index 2bbd52ce9..b4806b191 100644 --- a/src/lmdz/ext/physiqex_mod.F90 +++ b/src/lmdz/ext/physiqex_mod.F90 @@ -22,7 +22,12 @@ CONTAINS USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t USE MODD_PHYEX, ONLY: PHYEX_t USE MODI_INI_PHYEX, ONLY: INI_PHYEX - USE MODD_BUDGET, ONLY: NBUDGET_RH, TBUDGETDATA, TBUDGETCONF_t + USE MODI_ICE_ADJUST, ONLY: ICE_ADJUST + 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 @@ -45,13 +50,13 @@ CONTAINS real,intent(in) :: u(klon,klev) ! eastward zonal wind (m/s) real,intent(in) :: v(klon,klev) ! northward meridional wind (m/s) real,intent(in) :: rot(klon,klev) ! northward meridional wind (m/s) - real,intent(in) :: t(klon,klev) ! temperature (K) + real,intent(in) :: t(klon,klev) ! temperature (K) real,intent(in) :: qx(klon,klev,nqtot) ! tracers (.../kg_air) - real,intent(in) :: flxmass_w(klon,klev+2) ! vertical mass flux - real,intent(out) :: d_u(klon,klev+2) ! physics tendency on u (m/s/s) - real,intent(out) :: d_v(klon,klev+2) ! physics tendency on v (m/s/s) - real,intent(out) :: d_t(klon,klev+2) ! physics tendency on t (K/s) - real,intent(out) :: d_qx(klon,klev+2,nqtot) ! physics tendency on tracers + real,intent(in) :: flxmass_w(klon,klev) ! vertical mass flux + real,intent(out) :: d_u(klon,klev) ! physics tendency on u (m/s/s) + real,intent(out) :: d_v(klon,klev) ! physics tendency on v (m/s/s) + real,intent(out) :: d_t(klon,klev) ! physics tendency on t (K/s) + real,intent(out) :: d_qx(klon,klev,nqtot) ! physics tendency on tracers real,intent(out) :: d_ps(klon) ! physics tendency on surface pressure ! include "clesphys.h" @@ -63,24 +68,32 @@ CONTAINS TYPE(TLES_t) :: TLES TYPE(DIMPHYEX_t),SAVE :: D TYPE(PHYEX_t), SAVE :: PHYEX - real, dimension(klon, klev + 2) :: zrv, zrc, zri, zrr, zrs, zrg, zqt, zqdm !mixing ratio and total specifiq content + 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) :: zthetas !tendency + real, dimension(klon, klev + 2) :: zthetas0 real, dimension(klon, klev + 2) :: zz_mass !altitude above ground of mass points real, dimension(klon, klev + 2) :: zz_flux !altitude above ground of flux points real, dimension(klon, klev + 2) :: zdzm !distance between two consecutive mass points (expressed on flux points) real, dimension(klon, klev + 2) :: zdzf !distance between two consecutive flux points (expressed on mass points) real, dimension(klon) :: zs !surface orography + real, dimension(klon) :: zsigqsat !coeff for the extra term for s variance + real, dimension(0) :: zmfconv + real, dimension(klon, klev+2) :: ZICLDFR, ZWCLDFR, ZSSIO, ZSSIU, ZIFR, ZICE_CLD_WGT !used only in HIRLAM config + 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 + + TYPE(TBUDGETDATA), DIMENSION(NBUDGET_RH), SAVE :: YLBUDGET !$OMP THREADPRIVATE(clesphy0) ! PHYEX variables REAL :: PTSTEP - INTEGER, PARAMETER :: KRR= 6 + INTEGER, PARAMETER :: KRR=6, KRRL=2, KRRI=3, KSV=0 CHARACTER(LEN=4) :: HBUNAME LOGICAL :: LMFCONV - INTEGER :: KRRL, KRRI, KSV LOGICAL :: OCOMPUTE_SRC - TYPE(TBUDGETDATA), DIMENSION(NBUDGET_RH) :: YLBUDGET - TYPE(TBUDGETCONF_t) :: TBUCONF LOGICAL :: ONOMIXLG INTEGER :: KSV_LGBEG, KSV_LGEND REAL :: PDX, PDY @@ -138,7 +151,7 @@ REAL, DIMENSION(klon,klev+2) :: ZCEI ! thermodynamical variables which are transformed in conservative var. REAL, DIMENSION(klon,klev+2) :: ZUT, ZVT ! wind component on klev+2 REAL, DIMENSION(klon,klev+2) :: ZPABST ! absolute pressure -REAL, DIMENSION(klon,klev+2,KRR) :: ZRX ! qx from LMDZ +REAL, DIMENSION(klon,klev+2,KRR) :: ZRX,ZRXS,ZRXS0 ! qx and source of q from LMDZ to rt REAL, DIMENSION(klon,klev+2) :: PWT ! vertical wind velocity (used only for diagnostic) ! ! sources of momentum, conservative potential temperature, Turb. Kin. Energy, @@ -170,8 +183,42 @@ REAL, DIMENSION(klon,klev+2) :: PLENGTHM, PLENGTHH ! REAL, DIMENSION(klon,klev+2) :: ZDXX,ZDYY,ZDZX,ZDZY,ZZZ REAL, DIMENSION(klon) :: ZDIRCOSXW,ZDIRCOSYW,ZDIRCOSZW,ZCOSSLOPE,ZSINSLOPE - -real :: temp_newton(klon,klev+2) +! +REAL, DIMENSION(klon,klev+2) :: ZRHOD !rho_dry +! +REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: psigs !variance of s +REAL, DIMENSION(:,:), ALLOCATABLE, SAVE :: PCF_MF, PRC_MF, PRI_MF !shallow convection cloud +! +! Shallow specific variables +REAL, DIMENSION(klon,klev+2) :: PRHODREF ! dry density reference profile +REAL, DIMENSION(klon,klev+2):: PDUDT_MF ! tendency of U by massflux scheme +REAL, DIMENSION(klon,klev+2):: PDVDT_MF ! tendency of V by massflux scheme +REAL, DIMENSION(klon,klev+2):: PDTHLDT_MF ! tendency of thl by massflux scheme +REAL, DIMENSION(klon,klev+2):: PDRTDT_MF ! tendency of rt by massflux scheme +REAL, DIMENSION(klon,klev+2,KSV):: PDSVDT_MF ! tendency of Sv by massflux scheme + +REAL, DIMENSION(klon,klev+2) :: PSIGMF +REAL, DIMENSION(klon,klev+2) :: PFLXZTHVMF ! Thermal production for TKE scheme +REAL, DIMENSION(klon,klev+2) :: PFLXZTHMF +REAL, DIMENSION(klon,klev+2) :: PFLXZRMF +REAL, DIMENSION(klon,klev+2) :: PFLXZUMF +REAL, DIMENSION(klon,klev+2) :: PFLXZVMF +REAL, DIMENSION(klon,klev+2) :: PTHL_UP ! Thl updraft characteristics +REAL, DIMENSION(klon,klev+2) :: PRT_UP ! Rt updraft characteristics +REAL, DIMENSION(klon,klev+2) :: PRV_UP ! Vapor updraft characteristics +REAL, DIMENSION(klon,klev+2) :: PU_UP ! U wind updraft characteristics +REAL, DIMENSION(klon,klev+2) :: PV_UP ! V wind updraft characteristics +REAL, DIMENSION(klon,klev+2) :: PRC_UP ! cloud content updraft characteristics +REAL, DIMENSION(klon,klev+2) :: PRI_UP ! ice content updraft characteristics +REAL, DIMENSION(klon,klev+2) :: PTHV_UP ! Thv updraft characteristics +REAL, DIMENSION(klon,klev+2) :: PW_UP ! vertical speed updraft characteristics +REAL, DIMENSION(klon,klev+2) :: PFRAC_UP ! updraft fraction +REAL, DIMENSION(klon,klev+2) :: PEMF ! updraft mass flux +REAL, DIMENSION(klon,klev+2) :: PDETR ! updraft detrainment +REAL, DIMENSION(klon,klev+2) :: PENTR ! updraft entrainment +INTEGER,DIMENSION(klon) :: KKLCL,KKETL,KKCTL ! level of LCL,ETL and CTL +! +real :: temp_newton(klon,klev) integer :: k logical, save :: first=.true. !$OMP THREADPRIVATE(first) @@ -190,48 +237,68 @@ real :: zjulian print*,'Debut physiqex',debut ! initializations if (debut) then ! Things to do only for the first call to physics -print*,'Debut physiqex IN' - -! load initial conditions for physics (including the grid) - call phys_state_var_init(1) ! some initializations, required before calling phyetat0 - call phyetat0("startphy.nc", clesphy0, tabcntr0) - -! Initialize outputs: - itau0=0 - ! compute zjulian for annee0=1979 and month=1 dayref=1 and hour=0.0 - !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=0, LDINIT=.TRUE., & - &PHYEX_OUT=PHYEX) - -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 + print*,'Debut physiqex IN' + + ! load initial conditions for physics (including the grid) + call phys_state_var_init(1) ! some initializations, required before calling phyetat0 + call phyetat0("startphy.nc", clesphy0, tabcntr0) + + ! Initialize outputs: + itau0=0 + ! compute zjulian for annee0=1979 and month=1 dayref=1 and hour=0.0 + !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=0, LDINIT=.TRUE., & + &PHYEX_OUT=PHYEX) + + 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. ! TKE is not advected yet (TODO), for now, init at TKEMIN ALLOCATE(PTKEM(klon,klev+2)) @@ -241,6 +308,14 @@ PTKEM(:,:) = PHYEX%TURBN%XTKEMIN ! Initialize IOIPSL output file #endif + ALLOCATE(PSIGS(klon,klev+2)) + ALLOCATE(PCF_MF(klon,klev+2)) + ALLOCATE(PRC_MF(klon,klev+2)) + ALLOCATE(PRI_MF(klon,klev+2)) + PSIGS=0. + PCF_MF=0. + PRC_MF=0. + PRI_MF=0. endif ! of if (debut) !------------------------------------------------------------ @@ -255,36 +330,33 @@ d_qx(1:klon,1:klev,1:nqtot)=0. d_ps(1:klon)=0. !------------------------------------------------------------ -! Conversions +! Conversions and extra levels !------------------------------------------------------------ !TODO check in Meso-NH how values are extrapolated outside of the physical domain zqt(:,2:klev+1) = qx(:,:,1) + qx(:,:,2) + qx(:,:,3) -zrv(:,2:klev+1) = qx(:,:,1) / (1 - zqt(:,2:klev+1)) -zrc(:,2:klev+1) = qx(:,:,2) / (1 - zqt(:,2:klev+1)) -zri(:,2:klev+1) = qx(:,:,3) / (1 - zqt(:,2:klev+1)) - -ZRX(:,:,1) = zrv(:,:) -ZRX(:,:,2) = zrc(:,:) -ZRX(:,:,3) = zri(:,:) +ZRX(:,2:klev+1,1) = qx(:,:,1) / (1 - zqt(:,2:klev+1)) +ZRX(:,2:klev+1,2) = qx(:,:,2) / (1 - zqt(:,2:klev+1)) +ZRX(:,2:klev+1,3) = qx(:,:,3) / (1 - zqt(:,2:klev+1)) ZRX(:,:,4:KRR) = 0. ! TODO init of rain, graupel, hail - -!zrr = -!zrs = -!zrg = +! +!TODO add hydrometeors zqt(:,1)=0. zqt(:,klev+2)=0. -zrv(:,1)=0. -zrv(:,klev+2)=0. -zrc(:,1)=0. -zrc(:,klev+2)=0. -zri(:,1)=0. -zri(:,klev+2)=0. +ZRX(:,1,1)=0. +ZRX(:,klev+2,1)=0. +ZRX(:,1,2)=0. +ZRX(:,klev+2,2)=0. +ZRX(:,1,3)=0. +ZRX(:,klev+2,3)=0. zqdm=1-zqt +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) CALL VERTICAL_EXTEND(ztheta,klev) +zthetas=ztheta/pdtphys !TODO check in Meso-NH how zz_mass and zz_flux are initialized outside of the physical domain zs = pphis/PHYEX%CST%XG @@ -309,6 +381,48 @@ do k=2,klev+2 enddo zdzm(:,1)=(zz_mass(:,1)-zz_flux(:,1))*2. +ZPABST(:,2:klev+1) = pplay(:,:) +DO k=2,klev+1 + PRHODJ(:,k) = pplay(:,k-1) / (t(:,k-1) * 287.0) * (zdzf(:,k)*cell_area(:)) +END DO +PRHODREF(:,2:klev+1) = pplay(:,:) / (t(:,:) * 287.0) +CALL VERTICAL_EXTEND(ZPABST,klev) +CALL VERTICAL_EXTEND(PRHODJ,klev) +CALL VERTICAL_EXTEND(PRHODREF,klev) + +ZRHOD(:,2:klev+1)=ZPABST(:,2:klev+1)/(t*(PHYEX%CST%XRD+ZRX(:,2:klev+1,1)*PHYEX%CST%XRV)) +CALL VERTICAL_EXTEND(ZRHOD,klev) + +! +!------------------------------------------------------------ +! Adjustment +!------------------------------------------------------------ +! +ZRXS0(:,:,:) = ZRXS(:,:,:) +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, & + &'ADJU', & + &pdtphys, ZSIGQSAT, & + &PRHODJ, zexn, ZRHOD, PSIGS, .FALSE., zmfconv,& + &ZPABST, ZZ_MASS, & + &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(:,:,4), ZRX(:,:,3), ZRXS(:,:,3), ZRX(:,:,5), ZRX(:,:,6), YLBUDGET, NBUDGET_RH, & + &ZICE_CLD_WGT, & + !&POUT_RV, POUT_RC, POUT_RI, POUT_TH, & + &ZHLC_HRC, ZHLC_HCF, ZHLI_HRI, ZHLI_HCF) +! 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) +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,3)-ZRXS0(:,2:klev+1,3))*ZQDM(:,2:klev+1) +d_t(:,1:klev)=d_t(:,1:klev) + (zthetas(:,2:klev+1)-zthetas0(:,2:klev+1))*zexn(:,2:klev+1) + +!pour tester l'ajustement seul: commenter tendances de turb et activer cette ligne +!d_qx(:,1:klev,1)=d_qx(:,1:klev,1) + 0.00001/pdtphys +! !------------------------------------------------------------ ! Calculs !------------------------------------------------------------ @@ -320,16 +434,13 @@ d_v(1:klon,1)=-v(1:klon,1)/86400. ! newtonian relaxation towards temp_newton() do k=1,klev temp_newton(1:klon,k)=280.+cos(latitude(1:klon))*40.-pphi(1:klon,k)/rg*6.e-3 - d_t(1:klon,k)=(temp_newton(1:klon,k)-t(1:klon,k))/1.e5 + d_t(1:klon,k)=d_t(1:klon,k) + (temp_newton(1:klon,k)-t(1:klon,k))/1.e5 enddo KSV_LGBEG = 0 KSV_LGEND = 0 ONOMIXLG=.FALSE. -KRRL = 2 -KRRI = 3 -KSV = 0 KMI = 1 KGRADIENTS =0 HLBCX(:)=(/'CYCL','CYCL'/) @@ -386,35 +497,58 @@ ZBL_DEPTH(:) = 0. ZSBL_DEPTH(:) = 0. ! needed only if HTURBLEN_CL /= 'NONE' modification of mixing lengh inside clouds ZCEI(:,:) = 0. -! out tendencies -ZRUS(:,:) = 0. -ZRVS(:,:) = 0. -ZRWS(:,:) = 0. -ZRTHS(:,:) = 0. -ZRRS(:,:,:) = 0. -ZRSVS(:,:,:) = 0. -ZRTKES(:,:) = 0. ! ZUT(:,2:klev+1) = u(:,:) ZVT(:,2:klev+1) = v(:,:) -ZPABST(:,2:klev+1) = pplay(:,:) -DO k=2,klev+1 - PRHODJ(:,k) = pplay(:,k-1) / (t(:,k-1) * 287.0) * (zdzf(:,k)*cell_area(:)) -END DO -PTHVREF(:,:) = ztheta(:,:) ! profil de theta TODO ? +PTHVREF(:,:) = ztheta(:,:) ! profil de theta_v a calculer TODO !ZFLXZTHVMF(:,2:klev+1) = flxmass_w(:,:) TODO : flxmass_w deja en klev+2 ??? !ZFLXZTHVMF(:,:) = flxmass_w(:,:) ! TODO to uncomment once a mass-flux scheme is plugged ZFLXZTHVMF(:,:) = 0. ! CALL VERTICAL_EXTEND(ZUT,klev) CALL VERTICAL_EXTEND(ZVT,klev) -CALL VERTICAL_EXTEND(ZPABST,klev) CALL VERTICAL_EXTEND(PTHVREF,klev) -CALL VERTICAL_EXTEND(PRHODJ,klev) DO JRR=1,KRR CALL VERTICAL_EXTEND(ZRX(:,:,JRR),klev) END DO ! +!------------------------------------------------------------ +! Shallow convection +!------------------------------------------------------------ +! +! 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, & +! &PTSTEP=pdtphys, & +! &PDZZ=zdzms(:,:),PZZ=zz_mass(:,:), & +! &PRHODJ=PRHODJ(:,:),PRHODREF=PRHODREF(:,:), & +! &PPABSM=pplay(:,:),PEXNM=zexn(:,:), & +! &PSFTH=PSFTH(:),PSFRV=PSFRV(:), & +! &PTHM=ztheta(:,:),PRM=ZRX(:,:,:),PUM=ZUT(:,:),PVM=ZVT(:,:),& +! &PTKEM=PTKEM(:,:),PSVM=ZSVT(:,:,:), & +! &PDUDT_MF=PDUDT_MF(:,:),PDVDT_MF=PDVDT_MF(:,:), & +! &PDTHLDT_MF=PDTHLDT_MF(:,:),PDRTDT_MF=PDRTDT_MF(:,:),PDSVDT_MF=PDSVDT_MF(:,:,:), & +! &PSIGMF=PSIGMF(:,:),PRC_MF=PRC_MF(:,:),PRI_MF=PRI_MF(:,:),PCF_MF=PCF_MF(:,:),& +! &PFLXZTHVMF=PFLXZTHVMF(:,:), & +! &PFLXZTHMF=ZFLXZTHMF(:,:),PFLXZRMF=ZFLXZRMF(:,:),PFLXZUMF=ZFLXZUMF(:,:),PFLXZVMF=ZFLXZVMF(:,:), & +! &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=1.0,PDY=1.0,KBUDGETS=NBUDGET_RH ) +!! +! +!------------------------------------------------------------ +! Turbulence +!------------------------------------------------------------ +! out tendencies +ZRUS(:,:) = 0. +ZRVS(:,:) = 0. +ZRWS(:,:) = 0. +ZRTHS(:,:) = 0. +ZRRS(:,:,:) = 0. +ZRSVS(:,:,:) = 0. +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, & @@ -447,13 +581,12 @@ d_t(:,1:klev) = d_t(:,1:klev) + ZRTHS(:,2:klev+1)*zexn(:,2:klev+1)/PRHODJ(:,2:kl DO JRR=1,3 !3 for qv, ql, qi d_qx(:,1:klev,JRR)=d_qx(:,1:klev,JRR) + ZRRS(:,2:klev+1,JRR)/PRHODJ(:,2:klev+1)*zqdm(:,2:klev+1) END DO -d_ps(1:klon)=0. !------------------------------------------------------------ ! Entrees sorties !------------------------------------------------------------ -call output_physiqex(debut,zjulian,pdtphys,presnivs,paprs,u,v,t) +call output_physiqex(debut,zjulian,pdtphys,presnivs,paprs,u,v,t,qx) ! if lastcall, then it is time to write "restartphy.nc" file if (lafin) then -- GitLab