From 45413cea360ddf139badf0f93c1db5feab56c139 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Riette?= <sebastien.riette@meteo.fr> Date: Fri, 18 Mar 2022 09:43:25 +0100 Subject: [PATCH] =?UTF-8?q?S=C3=A9bastien=20Riette=2018/03/2022=20Phasing?= =?UTF-8?q?=20with=20P.=20Marguinaud's=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Small modifications in ice_adjust and condensation --- src/arome/ext/aro_adjust.F90 | 4 +-- src/common/micro/condensation.F90 | 40 ++++++++++++------------ src/common/micro/ice_adjust.F90 | 42 ++++++++++++++------------ src/common/micro/modi_condensation.F90 | 12 ++++---- src/common/micro/modi_ice_adjust.F90 | 38 ++++++++++++----------- 5 files changed, 73 insertions(+), 63 deletions(-) diff --git a/src/arome/ext/aro_adjust.F90 b/src/arome/ext/aro_adjust.F90 index 6198dc6bc..8888d5930 100644 --- a/src/arome/ext/aro_adjust.F90 +++ b/src/arome/ext/aro_adjust.F90 @@ -443,7 +443,7 @@ IF (KRR==6) THEN & PEXN=PEXNREF, PCF_MF=PCF_MF,PRC_MF=PRC_MF,PRI_MF=PRI_MF, & & PRV=ZRS(:,:,:,1), PRC=ZRS(:,:,:,2), & & PRVS=PRS(:,:,:,1), PRCS=PRS(:,:,:,2), & - & PTH=ZRS(:,:,:,0), PTHS=PTHS,PSRCS=PSRCS, PCLDFR=PCLDFR, & + & PTH=ZRS(:,:,:,0), PTHS=PTHS,OCOMPUTE_SRC=.TRUE.,PSRCS=PSRCS, PCLDFR=PCLDFR, & & PRR=ZRS(:,:,:,3), & & PRI=ZRS(:,:,:,4), PRIS=PRS(:,:,:,4), & & PRS=ZRS(:,:,:,5), & @@ -463,7 +463,7 @@ ELSE & PEXN=PEXNREF, PCF_MF=PCF_MF,PRC_MF=PRC_MF,PRI_MF=PRI_MF, & & PRV=ZRS(:,:,:,1), PRC=ZRS(:,:,:,2), & & PRVS=PRS(:,:,:,1), PRCS=PRS(:,:,:,2), & - & PTH=ZRS(:,:,:,0), PTHS=PTHS,PSRCS=PSRCS, PCLDFR=PCLDFR, & + & PTH=ZRS(:,:,:,0), PTHS=PTHS,OCOMPUTE_SRC=.TRUE.,PSRCS=PSRCS, PCLDFR=PCLDFR, & & PRR=ZRS(:,:,:,3), & & PRI=ZRS(:,:,:,4), PRIS=PRS(:,:,:,4), & & PRS=ZRS(:,:,:,5), & diff --git a/src/common/micro/condensation.F90 b/src/common/micro/condensation.F90 index b5beb21a6..4c2bf5fd0 100644 --- a/src/common/micro/condensation.F90 +++ b/src/common/micro/condensation.F90 @@ -5,13 +5,13 @@ !----------------------------------------------------------------- ! ######spl SUBROUTINE CONDENSATION(D, CST, ICEP, NEB, & - HFRAC_ICE, HCONDENS, HLAMBDA3, & - PPABS, PZZ, PRHODREF, PT, PRV_IN, PRV_OUT, PRC_IN, PRC_OUT, PRI_IN, PRI_OUT, & - PRS, PRG, PSIGS, LMFCONV, PMFCONV, PCLDFR, PSIGRC, OUSERI, & - OSIGMAS, OCND2, PSIGQSAT, & - PLV, PLS, PCPH, & - PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, & - PICE_CLD_WGT) + &HFRAC_ICE, HCONDENS, HLAMBDA3, & + &PPABS, PZZ, PRHODREF, PT, PRV_IN, PRV_OUT, PRC_IN, PRC_OUT, PRI_IN, PRI_OUT, & + &PRS, PRG, PSIGS, LMFCONV, PMFCONV, PCLDFR, PSIGRC, OUSERI, & + &OSIGMAS, OCND2, PSIGQSAT, & + &PLV, PLS, PCPH, & + &PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, & + &PICE_CLD_WGT) ! ################################################################################ ! !! @@ -153,25 +153,24 @@ REAL, DIMENSION(D%NIT,D%NJT) :: ZTMIN ! minimum Temp. related to I REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZLV, ZLS, ZCPD REAL :: ZGCOND, ZAUTC, ZAUTI, ZGAUV, ZGAUC, ZGAUI, ZGAUTC, ZGAUTI, ZCRIAUTI ! Used for Gaussian PDF integration REAL :: ZLVS ! thermodynamics -REAL, DIMENSION(D%NIB:D%NIE) :: ZPV, ZPIV, ZQSL, ZQSI ! thermodynamics +REAL, DIMENSION(D%NIT) :: ZPV, ZPIV, ZQSL, ZQSI ! thermodynamics REAL :: ZLL, DZZ, ZZZ ! used for length scales REAL :: ZAH, ZDRW, ZDTL, ZSIG_CONV ! related to computation of Sig_s -REAL, DIMENSION(D%NIB:D%NIE) :: ZA, ZB, ZSBAR, ZSIGMA, ZQ1 ! related to computation of Sig_s -REAL, DIMENSION(D%NIB:D%NIE) :: ZCOND -REAL, DIMENSION(D%NIB:D%NIE) :: ZFRAC ! Ice fraction +REAL, DIMENSION(D%NIT) :: ZA, ZB, ZSBAR, ZSIGMA, ZQ1 ! related to computation of Sig_s +REAL, DIMENSION(D%NIT) :: ZCOND +REAL, DIMENSION(D%NIT) :: ZFRAC ! Ice fraction INTEGER :: INQ1 REAL :: ZINC ! related to OCND2 noise check : REAL :: ZRSP, ZRSW, ZRFRAC, ZRSDIF, ZRCOLD ! related to OCND2 ice cloud calulation : -REAL, DIMENSION(D%NIB:D%NIE) :: ESATW_T +REAL, DIMENSION(D%NIT) :: ESATW_T REAL :: ZDUM1,ZDUM2,ZDUM3,ZDUM4,ZPRIFACT REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: TCLD -REAL :: ZDZ(D%NIB:D%NIE), & - ZARDUM(D%NIE-D%NIB+1), ZCLDUM(D%NIE-D%NIB+1) +REAL, DIMENSION(D%NIT) :: ZDZ, ZARDUM, ZCLDUM ! end OCND2 REAL(KIND=JPRB) :: ZHOOK_HANDLE -INTEGER, DIMENSION(D%NIT) :: IERR +INTEGER :: IERR ! ! !* 0.3 Definition of constants : @@ -300,8 +299,9 @@ DO JK=D%NKTB,D%NKTE JKM=MAX(MIN(JK-D%NKL,D%NKTE),D%NKTB) DO JJ=D%NJB,D%NJE IF (OCND2) THEN - ZDZ(D%NIB:D%NIE) = PZZ(D%NIB:D%NIE,JJ,JKP) - & - PZZ(D%NIB:D%NIE,JJ,JKP-D%NKL) + DO JI = D%NIB, D%NIE + ZDZ(JI) = PZZ(JI,JJ,JKP) - PZZ(JI,JJ,JKP-D%NKL) + ENDDO CALL ICECLOUD(D%NIE-D%NIB+1,PPABS(D%NIB,JJ,JK),PZZ(D%NIB,JJ,JK),ZDZ(D%NIB), & & PT(D%NIB,JJ,JK),PRV_IN(D%NIB,JJ,JK),1.,-1., & & ZCLDUM,1.,TCLD(D%NIB,JJ,JK), & @@ -329,7 +329,9 @@ DO JK=D%NKTB,D%NKTE ZFRAC(JI) = PRI_IN(JI,JJ,JK) / (PRC_IN(JI,JJ,JK)+PRI_IN(JI,JJ,JK)) ENDIF END DO - CALL COMPUTE_FRAC_ICE(HFRAC_ICE, NEB, ZFRAC(D%NIB:D%NIE), PT(D%NIB:D%NIE,JJ,JK), IERR) !error code IERR cannot be checked here to not break vectorization + DO JI=D%NIB,D%NIE + CALL COMPUTE_FRAC_ICE(HFRAC_ICE, NEB, ZFRAC(JI), PT(JI,JJ,JK), IERR) !error code IERR cannot be checked here to not break vectorization + ENDDO ENDIF DO JI=D%NIB,D%NIE ZQSL(JI) = CST%XRD / CST%XRV * ZPV(JI) / ( PPABS(JI,JJ,JK) - ZPV(JI) ) @@ -366,7 +368,7 @@ DO JK=D%NKTB,D%NKTE ZLL = ZL(JI,JJ,JK) ! standard deviation due to convection ZSIG_CONV =0. - IF( SIZE(PMFCONV) /= 0) ZSIG_CONV = ZCSIG_CONV * PMFCONV(JI,JJ,JK) / ZA(JI) + IF(LMFCONV) ZSIG_CONV = ZCSIG_CONV * PMFCONV(JI,JJ,JK) / ZA(JI) ! zsigma should be of order 4.e-4 in lowest 5 km of atmosphere ZSIGMA(JI) = SQRT( MAX( 1.E-25, ZCSIGMA * ZCSIGMA * ZLL*ZLL/(DZZ*DZZ)*(& ZA(JI)*ZA(JI)*ZDRW*ZDRW - 2.*ZA(JI)*ZB(JI)*ZDRW*ZDTL + ZB(JI)*ZB(JI)*ZDTL*ZDTL) + & diff --git a/src/common/micro/ice_adjust.F90 b/src/common/micro/ice_adjust.F90 index d2c9d943a..29b6de043 100644 --- a/src/common/micro/ice_adjust.F90 +++ b/src/common/micro/ice_adjust.F90 @@ -5,18 +5,19 @@ !----------------------------------------------------------------- ! ########################################################################## SUBROUTINE ICE_ADJUST (D, CST, ICEP, NEB, BUCONF, KRR, & - HFRAC_ICE, HCONDENS, HLAMBDA3,& - HBUNAME, OSUBG_COND, OSIGMAS, OCND2, HSUBG_MF_PDF,& - PTSTEP, PSIGQSAT, & - PRHODJ, PEXNREF, PRHODREF, PSIGS, LMFCONV, PMFCONV,& - PPABST, PZZ, & - PEXN, PCF_MF, PRC_MF, PRI_MF, & - PRV, PRC, PRVS, PRCS, PTH, PTHS, PSRCS, PCLDFR, & - PRR, PRI, PRIS, PRS, PRG, PRH, & - POUT_RV, POUT_RC, POUT_RI, POUT_TH, & - PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, & - TBUDGETS, KBUDGETS, & - PICE_CLD_WGT) + &HFRAC_ICE, HCONDENS, HLAMBDA3,& + &HBUNAME, OSUBG_COND, OSIGMAS, OCND2, HSUBG_MF_PDF,& + &PTSTEP, PSIGQSAT, & + &PRHODJ, PEXNREF, PRHODREF, PSIGS, LMFCONV, PMFCONV,& + &PPABST, PZZ, & + &PEXN, PCF_MF, PRC_MF, PRI_MF, & + &PRV, PRC, PRVS, PRCS, PTH, PTHS, & + &OCOMPUTE_SRC, PSRCS, PCLDFR, & + &PRR, PRI, PRIS, PRS, PRG, PRH, & + &POUT_RV, POUT_RC, POUT_RI, POUT_TH, & + &PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, & + &TBUDGETS, KBUDGETS, & + &PICE_CLD_WGT) ! ######################################################################### ! !!**** *ICE_ADJUST* - compute the ajustment of water vapor in mixed-phase @@ -136,10 +137,10 @@ CHARACTER(LEN=4), INTENT(IN) :: HLAMBDA3 ! formulation for lambda3 co CHARACTER(LEN=4), INTENT(IN) :: HBUNAME ! Name of the budget LOGICAL, INTENT(IN) :: OSUBG_COND ! Switch for Subgrid ! Condensation -LOGICAL :: OSIGMAS ! Switch for Sigma_s: +LOGICAL, INTENT(IN) :: OSIGMAS ! Switch for Sigma_s: ! use values computed in CONDENSATION ! or that from turbulence scheme -LOGICAL :: OCND2 ! logical switch to sparate liquid +LOGICAL, INTENT(IN) :: OCND2 ! logical switch to sparate liquid ! and ice ! more rigid (DEFALT value : .FALSE.) CHARACTER(LEN=80), INTENT(IN) :: HSUBG_MF_PDF @@ -172,9 +173,12 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(INOUT) :: PRVS ! Water vapor m.r. REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(INOUT) :: PRCS ! Cloud water m.r. source REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTH ! Theta to adjust REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(INOUT) :: PTHS ! Theta source -REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT) :: PSRCS ! Second-order flux - ! s'rc'/2Sigma_s2 at time t+1 - ! multiplied by Lambda_3 +LOGICAL, INTENT(IN) :: OCOMPUTE_SRC +REAL, DIMENSION(MERGE(D%NIT,0,OCOMPUTE_SRC),& + MERGE(D%NJT,0,OCOMPUTE_SRC),& + MERGE(D%NKT,0,OCOMPUTE_SRC)), INTENT(OUT) :: PSRCS ! Second-order flux + ! s'rc'/2Sigma_s2 at time t+1 + ! multiplied by Lambda_3 REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT) :: PCLDFR ! Cloud fraction ! REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(INOUT):: PRIS ! Cloud ice m.r. at t+1 @@ -199,7 +203,7 @@ REAL, DIMENSION(D%NIT,D%NJT), OPTIONAL, INTENT(IN) :: PICE_CLD_ ! ! REAL :: ZW1,ZW2 ! intermediate fields -REAL, DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) & +REAL, DIMENSION(D%NIT,D%NJT,D%NKT) & :: ZT, & ! adjusted temperature ZRV, ZRC, ZRI, & ! adjusted state ZCPH, & ! guess of the CPh for the mixing @@ -309,7 +313,7 @@ DO JK=D%NKTB,D%NKTE ELSE PCLDFR(JI,JJ,JK) = 0. ENDIF - IF ( SIZE(PSRCS,3) /= 0 ) THEN + IF (OCOMPUTE_SRC) THEN PSRCS(JI,JJ,JK) = PCLDFR(JI,JJ,JK) END IF ENDDO diff --git a/src/common/micro/modi_condensation.F90 b/src/common/micro/modi_condensation.F90 index 22b37318f..bbcd33283 100644 --- a/src/common/micro/modi_condensation.F90 +++ b/src/common/micro/modi_condensation.F90 @@ -5,12 +5,12 @@ INTERFACE ! SUBROUTINE CONDENSATION(D, CST, ICEP, NEB, & - HFRAC_ICE, HCONDENS, HLAMBDA3, & - PPABS, PZZ, PRHODREF, PT, PRV_IN, PRV_OUT, PRC_IN, PRC_OUT, PRI_IN, PRI_OUT, & - PRS, PRG, PSIGS, LMFCONV, PMFCONV, PCLDFR, PSIGRC, OUSERI,& - OSIGMAS, OCND2, PSIGQSAT, & - PLV, PLS, PCPH, & - PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, PICE_CLD_WGT) + &HFRAC_ICE, HCONDENS, HLAMBDA3, & + &PPABS, PZZ, PRHODREF, PT, PRV_IN, PRV_OUT, PRC_IN, PRC_OUT, PRI_IN, PRI_OUT, & + &PRS, PRG, PSIGS, LMFCONV, PMFCONV, PCLDFR, PSIGRC, OUSERI,& + &OSIGMAS, OCND2, PSIGQSAT, & + &PLV, PLS, PCPH, & + &PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, PICE_CLD_WGT) ! USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t USE MODD_CST, ONLY: CST_t diff --git a/src/common/micro/modi_ice_adjust.F90 b/src/common/micro/modi_ice_adjust.F90 index 9c962de2c..f798792f9 100644 --- a/src/common/micro/modi_ice_adjust.F90 +++ b/src/common/micro/modi_ice_adjust.F90 @@ -5,18 +5,19 @@ INTERFACE ! SUBROUTINE ICE_ADJUST (D, CST, ICEP, NEB, BUCONF, KRR, & - HFRAC_ICE, HCONDENS, HLAMBDA3,& - HBUNAME, OSUBG_COND, OSIGMAS, OCND2, HSUBG_MF_PDF,& - PTSTEP, PSIGQSAT, & - PRHODJ, PEXNREF, PRHODREF, PSIGS, LMFCONV, PMFCONV,& - PPABST, PZZ, & - PEXN, PCF_MF, PRC_MF, PRI_MF, & - PRV, PRC, PRVS, PRCS, PTH, PTHS, PSRCS, PCLDFR, & - PRR, PRI, PRIS, PRS, PRG, PRH, & - POUT_RV, POUT_RC, POUT_RI, POUT_TH, & - PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, & - TBUDGETS, KBUDGETS, & - PICE_CLD_WGT) + &HFRAC_ICE, HCONDENS, HLAMBDA3,& + &HBUNAME, OSUBG_COND, OSIGMAS, OCND2, HSUBG_MF_PDF,& + &PTSTEP, PSIGQSAT, & + &PRHODJ, PEXNREF, PRHODREF, PSIGS, LMFCONV, PMFCONV,& + &PPABST, PZZ, & + &PEXN, PCF_MF, PRC_MF, PRI_MF, & + &PRV, PRC, PRVS, PRCS, PTH, PTHS, & + &OCOMPUTE_SRC, PSRCS, PCLDFR, & + &PRR, PRI, PRIS, PRS, PRG, PRH, & + &POUT_RV, POUT_RC, POUT_RI, POUT_TH, & + &PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, & + &TBUDGETS, KBUDGETS, & + &PICE_CLD_WGT) USE MODD_BUDGET, ONLY: TBUDGETDATA, TBUDGETCONF_t USE MODD_CST, ONLY: CST_t USE MODD_RAIN_ICE_PARAM, ONLY: RAIN_ICE_PARAM_t @@ -40,10 +41,10 @@ CHARACTER(LEN=4), INTENT(IN) :: HLAMBDA3 ! formulation for lambda3 co CHARACTER(LEN=4), INTENT(IN) :: HBUNAME ! Name of the budget LOGICAL, INTENT(IN) :: OSUBG_COND ! Switch for Subgrid ! Condensation -LOGICAL :: OSIGMAS ! Switch for Sigma_s: +LOGICAL, INTENT(IN) :: OSIGMAS ! Switch for Sigma_s: ! use values computed in CONDENSATION ! or that from turbulence scheme -LOGICAL :: OCND2 ! logical switch to sparate liquid +LOGICAL, INTENT(IN) :: OCND2 ! logical switch to sparate liquid ! and ice ! more rigid (DEFALT value : .FALSE.) CHARACTER(LEN=80), INTENT(IN) :: HSUBG_MF_PDF @@ -76,9 +77,12 @@ REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(INOUT) :: PRVS ! Water vapor m.r. REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(INOUT) :: PRCS ! Cloud water m.r. source REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(IN) :: PTH ! Theta to adjust REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(INOUT) :: PTHS ! Theta source -REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT) :: PSRCS ! Second-order flux - ! s'rc'/2Sigma_s2 at time t+1 - ! multiplied by Lambda_3 +LOGICAL, INTENT(IN) :: OCOMPUTE_SRC +REAL, DIMENSION(MERGE(D%NIT,0,OCOMPUTE_SRC),& + MERGE(D%NJT,0,OCOMPUTE_SRC),& + MERGE(D%NKT,0,OCOMPUTE_SRC)), INTENT(OUT) :: PSRCS ! Second-order flux + ! s'rc'/2Sigma_s2 at time t+1 + ! multiplied by Lambda_3 REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT) :: PCLDFR ! Cloud fraction ! REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(INOUT):: PRIS ! Cloud ice m.r. at t+1 -- GitLab