diff --git a/src/arome/ext/apl_arome.F90 b/src/arome/ext/apl_arome.F90 index 7e421c6d8bc7158d4e7e0f6cd3d5f56ebc7605f0..0467649b260f778b817c8fb054c0884619d10074 100644 --- a/src/arome/ext/apl_arome.F90 +++ b/src/arome/ext/apl_arome.F90 @@ -392,6 +392,8 @@ REAL(KIND=JPRB) :: ZZRV_UP_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZTKES_(YDCPG REAL(KIND=JPRB) :: ZDZZ_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZZZ_F_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZDZZ_F_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) REAL(KIND=JPRB) :: ZCIT_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZMFM_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZEXNREFM_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) REAL(KIND=JPRB) :: ZSIGM_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZNEBMNH_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZEVAP_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) +! additions for future ice cloud fraction and precipitation fraction +REAL(KIND=JPRB) :: ZICEFR_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZPRCFR_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) ! additions for MF scheme (Pergaud et al) REAL(KIND=JPRB) :: ZSIGMF_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZRC_MF_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZRI_MF_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) REAL(KIND=JPRB) :: ZCF_MF_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZAERD_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG), ZCVTENDT_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG) @@ -655,6 +657,7 @@ LOGICAL :: LLRAD LOGICAL :: LLSWAP_THS, LLSWAP_RS, LLSWAP_SVS, LLSWAP_SVM, LLSWAP_LIMAS ! logical to swap or not pointers in and out LOGICAL :: LLHN(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG) LOGICAL :: LNUDGLHNREAD +LOGICAL :: LLIMAINIT ! Characters CHARACTER(LEN=11) :: CLNAME @@ -1061,6 +1064,17 @@ ZINVDT=1/YDCPG_OPTS%ZDTPHY ZINVG=1._JPRB/RG +!set concentration for LIMA +LLIMAINIT=.FALSE. +IF (YDCPG_OPTS%KSTEP==0) THEN + LLIMAINIT=.TRUE. + ZP1EZDIAG(:,:,1)=0._JPRB + ZP1EZDIAG(:,:,2)=0._JPRB + ZP1EZDIAG(:,:,3)=0._JPRB + ZP1EZDIAG(:,:,4)=0._JPRB + ZP1EZDIAG(:,:,5)=0._JPRB +ENDIF + ! initialisation de ZDTMSE IF (LLXFUMSE) THEN ZDTMSE=0.01_JPRB @@ -1117,6 +1131,8 @@ IF (INIT0 >= 0) THEN ZMFM_(:,:)=ZVALUE ZSIGM_(:,:)=ZVALUE ZNEBMNH_(:,:)=ZVALUE + ZICEFR_(:,:)=ZVALUE + ZPRCFR_(:,:)=ZVALUE ZICLDFR_(:,:)=ZVALUE ZWCLDFR_(:,:)=ZVALUE ZSSIO_(:,:)=ZVALUE @@ -1597,8 +1613,8 @@ IF (LMICRO) THEN & NLIMA, YDCPG_OPTS%KSTEP+1, LOSUBG_COND, LOSIGMAS, LOCND2, CCONDENS, CLAMBDA3, ZDT, VSIGQSAT, ZZZ_F_, ZRHODJM__(:, 1:YDCPG_OPTS%KFLEVG), & & ZRHODREFM__(:, 1:YDCPG_OPTS%KFLEVG), ZEXNREFM_, ZPABSM__(:, 1:YDCPG_OPTS%KFLEVG), ZTHM__(:, 1:YDCPG_OPTS%KFLEVG), & & ZRM_, ZLIMAM_, ZSIGM_, ZPTRWNU_, ZDTHRAD_, ZMFM_, ZRC_MF_, ZRI_MF_, ZCF_MF_, ZTHS__(:, 1:YDCPG_OPTS%KFLEVG), ZRS_, & - & ZLIMAS_, ZSRCS__(:, 1:YDCPG_OPTS%KFLEVG), ZNEBMNH_, YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH & - & ) + & ZLIMAS_, ZSRCS__(:, 1:YDCPG_OPTS%KFLEVG), ZNEBMNH_, ZICEFR_, ZPRCFR_, YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH, & + & LLIMAINIT ) ELSE ! CALL ARO_ADJUST (KLON,KIDIA,KFDIA,KLEV,NRR,& !this is the target version @@ -3195,7 +3211,7 @@ IF (LMICRO) THEN & NSPLITR, NSPLITG, ZDT, ZDZZ_, ZRHODJM__(:, 1:YDCPG_OPTS%KFLEVG), ZRHODREFM__(:, 1:YDCPG_OPTS%KFLEVG), & & ZEXNREFM_, ZPABSM__(:, 1:YDCPG_OPTS%KFLEVG), ZPTRWNU_, ZDTHRAD_, ZTHM__(:, 1:YDCPG_OPTS%KFLEVG), ZRM_, & & ZLIMAM_, ZTHS__(:, 1:YDCPG_OPTS%KFLEVG), ZRS_, ZLIMAS_, ZEVAP_, ZINPRR_NOTINCR_, & - & ZINPRS_NOTINCR_, ZINPRG_NOTINCR_, ZINPRH_NOTINCR_, ZPFPR_, ZNEBMNH_, YDDDH, YDMODEL%YRML_DIAG%YRLDDH, & + & ZINPRS_NOTINCR_, ZINPRG_NOTINCR_, ZINPRH_NOTINCR_, ZPFPR_, ZNEBMNH_, ZICEFR_, ZPRCFR_, YDDDH, YDMODEL%YRML_DIAG%YRLDDH, & & YDMODEL%YRML_DIAG%YRMDDH) ELSE !CALL ARO_RAIN_ICE (NPROMICRO,KLEV,IKU,IKL,KLON,KLEV,KFDIA,NRR,KSTEP+1,& !this is the target version diff --git a/src/arome/ext/aro_adjust_lima.F90 b/src/arome/ext/aro_adjust_lima.F90 index 6d9ace01553087525291bac6a394c65387f0af53..b7854d832bc629ca86ec37bb54e7266f26dafa66 100644 --- a/src/arome/ext/aro_adjust_lima.F90 +++ b/src/arome/ext/aro_adjust_lima.F90 @@ -6,8 +6,8 @@ PPABSM, PTHT, PRT, PSVT, PSIGS, & PW_NU, PDTHRAD, & PMFCONV, PRC_MF, PRI_MF, PCF_MF, & - PTHS, PRS, PSVS, PSRCS, PCLDFR, & - YDDDH, YDLDDH, YDMDDH) + PTHS, PRS, PSVS, PSRCS, PCLDFR, PICEFR, PPRCFR, & + YDDDH, YDLDDH, YDMDDH, LLIMAINIT ) USE PARKIND1, ONLY : JPRB USE YOMHOOK , ONLY : LHOOK, DR_HOOK ! ########################################################################## @@ -88,6 +88,8 @@ USE MODD_PARAM_LIMA USE MODD_NSV ! USE MODI_LIMA_ADJUST_SPLIT +USE MODE_SET_CONC_LIMA +USE MODE_SET_CONC_LIMA_LBC USE MODE_FILL_DIMPHYEX, ONLY: FILL_DIMPHYEX !USE MODE_BUDGET, ONLY: BUDGET_DDH ! @@ -152,12 +154,16 @@ REAL, DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PSRCS ! Second-order flux ! s'rc'/2Sigma_s2 at time t+1 ! multiplied by Lambda_3 REAL, DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PCLDFR! Cloud fraction +REAL, DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PICEFR! Cloud fraction +REAL, DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PPRCFR! Cloud fraction ! ! TYPE(TYP_DDH), INTENT(INOUT), TARGET :: YDDDH TYPE(TLDDH), INTENT(IN), TARGET :: YDLDDH TYPE(TMDDH), INTENT(IN), TARGET :: YDMDDH ! +LOGICAL, INTENT(IN) :: LLIMAINIT +! !* 0.2 Declarations of local variables : CHARACTER(LEN=4) :: HCLOUD ! kind of cloud @@ -178,7 +184,6 @@ REAL, DIMENSION(SIZE(PZZF,1),SIZE(PZZF,2),SIZE(PZZF,3)):: ZCOR ! for the correction of negative rv REAL, DIMENSION(SIZE(PZZF,1),SIZE(PZZF,2),SIZE(PZZF,3)):: ZZZ ! model layer height -REAL, DIMENSION(KLON,1,KLEV):: ZICEFR REAL :: ZMASSTOT ! total mass for one water category ! including the negative values REAL :: ZMASSPOS ! total mass for one water category @@ -218,7 +223,21 @@ ZT(:,:,:)= PTHT(:,:,:)*PEXNREF(:,:,:) ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZT(:,:,:)-XTT) ZLS(:,:,:)=XLSTT +(XCPV-XCI) *(ZT(:,:,:)-XTT) ZCPH(:,:,:)=XCPD +XCPV*2.*PTSTEP*PRS(:,:,:,1) -! + +!set concentration for LIMA +PRS = PRS * PTSTEP +PSVS = PSVS * PTSTEP +IF (LLIMAINIT) THEN + CALL SET_CONC_LIMA (1,'ICE3',PRHODREF,PRT,PSVT) + CALL SET_CONC_LIMA (1,'ICE3',PRHODREF,PRS,PSVS) +ELSE + CALL SET_CONC_LIMA_LBC (1,'ICE3',PRHODREF,PRT,PSVT) + CALL SET_CONC_LIMA_LBC (1,'ICE3',PRHODREF,PRS,PSVS) +END IF +PRS = PRS / PTSTEP +PSVS = PSVS / PTSTEP + +!print *, "aro_adjust_lima 2" ! !* 3. REMOVE NEGATIVE VALUES ! ---------------------- @@ -339,7 +358,7 @@ ENDDO PRHODREF=PRHODREF, PRHODJ=PRHODJ, PEXNREF=PEXNREF, PSIGS=PSIGS, PMFCONV=PMFCONV, & PPABST=PPABSM, PPABSTT=PPABSM, PZZ=ZZZ, PDTHRAD=PDTHRAD, PW_NU=PW_NU, & PRT=PRT, PRS=PRS, PSVT=PSVT, PSVS=PSVS, & - PTHS=PTHS, PSRCS=PSRCS, PCLDFR=PCLDFR, PICEFR=ZICEFR, PRC_MF=PRC_MF, PRI_MF=PRI_MF, PCF_MF=PCF_MF ) + PTHS=PTHS, PSRCS=PSRCS, PCLDFR=PCLDFR, PICEFR=PICEFR, PRC_MF=PRC_MF, PRI_MF=PRI_MF, PCF_MF=PCF_MF ) ! !------------------------------------------------------------------------------- ! diff --git a/src/arome/ext/aro_adjust_lima.h b/src/arome/ext/aro_adjust_lima.h index dd691848aa46f305fcca6fbeeea105811c533f91..1686f98b2e16439bc664fa27bfe8a97ca12a5274 100644 --- a/src/arome/ext/aro_adjust_lima.h +++ b/src/arome/ext/aro_adjust_lima.h @@ -6,8 +6,8 @@ SUBROUTINE ARO_ADJUST_LIMA(KKA,KKU,KKL,KLON,KLEV,KFDIA, KRR, KSV, KTCOUNT,& & PPABSM, PTHT, PRT, PSVT, PSIGS,& & PW_NU, PDTHRAD,& & PMFCONV, PRC_MF, PRI_MF, PCF_MF,& - & PTHS, PRS, PSVS, PSRCS, PCLDFR,& - & YDDDH,YDLDDH,YDMDDH) + & PTHS, PRS, PSVS, PSRCS, PCLDFR, PICEFR, PPRCFR, & + & YDDDH,YDLDDH,YDMDDH, LLIMAINIT) USE PARKIND1 ,ONLY : JPIM ,JPRB USE DDH_MIX, ONLY : TYP_DDH USE YOMLDDH, ONLY : TLDDH @@ -46,8 +46,11 @@ REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PRS REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KSV), INTENT(INOUT) :: PSVS REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PSRCS REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PCLDFR +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PICEFR +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PPRCFR TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH TYPE(TLDDH), INTENT(IN) :: YDLDDH TYPE(TMDDH), INTENT(IN) :: YDMDDH +LOGICAL, INTENT(IN) :: LLIMAINIT END SUBROUTINE ARO_ADJUST_LIMA END INTERFACE diff --git a/src/arome/ext/aro_lima.F90 b/src/arome/ext/aro_lima.F90 index cbe7032178219aa8234d3de4702683ad8bbc3ebf..edef5e82779c4dfc8784d9ed5ca29077fd226722 100644 --- a/src/arome/ext/aro_lima.F90 +++ b/src/arome/ext/aro_lima.F90 @@ -5,7 +5,7 @@ PTHS, PRS, PSVS, PEVAP, & PINPRR,PINPRS, & PINPRG,PINPRH,PFPR, & - PCLDFR, & + PCLDFR,PICEFR,PPRCFR, & YDDDH, YDLDDH, YDMDDH ) USE PARKIND1, ONLY : JPRB @@ -114,7 +114,10 @@ REAL, DIMENSION(KLON,1), INTENT(INOUT) :: PINPRG! Graupel instant precip REAL, DIMENSION(KLON,1), INTENT(INOUT) :: PINPRH! Hail instant precip REAL, DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PFPR ! upper-air precip ! -REAL, DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PCLDFR ! ice cloud fraction +REAL, DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PCLDFR ! liquid cloud fraction +REAL, DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PICEFR ! ice cloud fraction +REAL, DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PPRCFR ! precipitation fraction +! TYPE(TYP_DDH), INTENT(INOUT), TARGET :: YDDDH TYPE(TLDDH), INTENT(IN), TARGET :: YDLDDH TYPE(TMDDH), INTENT(IN), TARGET :: YDMDDH @@ -139,7 +142,6 @@ REAL, DIMENSION(KLON,1,KLEV):: & REAL, DIMENSION(KLON,1):: ZINPRC ! surf cloud sedimentation ! for the correction of negative rv REAL, DIMENSION(KLON,1):: ZINPRI, ZINDEP ! surf cloud ice sedimentation -REAL, DIMENSION(KLON,1,KLEV):: ZICEFR, ZPRCFR REAL :: ZMASSTOT ! total mass for one water category ! including the negative values REAL :: ZMASSPOS ! total mass for one water category @@ -310,7 +312,7 @@ CALL LIMA (D=YLDIMPHYEX, CST=CST, BUCONF=TBUCONF, TBUDGETS=YLBUDGET, KBUDGETS=SI PDTHRAD=PDTHRAD, PTHT=PTHT, PRT=PRT, PSVT=PSVT, PW_NU=PW_NU, & PTHS=PTHS, PRS=PRS, PSVS=PSVS, & PINPRC=ZINPRC, PINDEP=ZINDEP, PINPRR=PINPRR, PINPRI=ZINPRI, PINPRS=PINPRS, PINPRG=PINPRG, PINPRH=PINPRH, & - PEVAP3D=PEVAP, PCLDFR=PCLDFR, PICEFR=ZICEFR, PPRCFR=ZPRCFR, PFPR=PFPR ) + PEVAP3D=PEVAP, PCLDFR=PCLDFR, PICEFR=PICEFR, PPRCFR=PPRCFR, PFPR=PFPR ) !add ZINPRC in PINPRR PINPRR=PINPRR+ZINPRC !------------------------------------------------------------------------------- diff --git a/src/arome/ext/aro_lima.h b/src/arome/ext/aro_lima.h index 44b20abcfc97c29f86dd73af2835f425011c5e8c..82f32109aa6ee135e9dde8f7d75e4612e38179a6 100644 --- a/src/arome/ext/aro_lima.h +++ b/src/arome/ext/aro_lima.h @@ -5,7 +5,7 @@ SUBROUTINE ARO_LIMA(KKA,KKU,KKL,KLON,KLEV, KFDIA, KRR, KSV, KTCOUNT, KSPLITR, KS & PTHS, PRS, PSVS, PEVAP,& & PINPRR,PINPRS,& & PINPRG,PINPRH,PFPR,& - & PCLDFR,& + & PCLDFR,PICEFR,PPRCFR,& & YDDDH,YDLDDH,YDMDDH) USE PARKIND1 ,ONLY : JPIM ,JPRB USE DDH_MIX, ONLY : TYP_DDH @@ -43,6 +43,8 @@ REAL(KIND=JPRB), DIMENSION(KLON,1), INTENT(INOUT) :: PINPRG REAL(KIND=JPRB), DIMENSION(KLON,1), INTENT(INOUT) :: PINPRH REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PFPR REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PCLDFR +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PICEFR +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PPRCFR TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH TYPE(TLDDH), INTENT(IN) :: YDLDDH TYPE(TMDDH), INTENT(IN) :: YDMDDH diff --git a/src/arome/micro/set_conc_lima_lbc.F90 b/src/arome/micro/set_conc_lima_lbc.F90 new file mode 100644 index 0000000000000000000000000000000000000000..99fe74a52891aac1083ddd1a271c9db67ae87049 --- /dev/null +++ b/src/arome/micro/set_conc_lima_lbc.F90 @@ -0,0 +1,226 @@ +!MNH_LIC Copyright 2000-2020 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC for details. version 1. +!----------------------------------------------------------------- +!####################################### +module mode_set_conc_lima_lbc +!####################################### + +implicit none + +contains + +! ########################################################################### + SUBROUTINE SET_CONC_LIMA_LBC( kmi, HGETCLOUD, PRHODREF, PRT, PSVT ) +! ########################################################################### +! +!!**** *SET_CONC_LIMA * - initialize droplet, raindrop and ice +!! concentration for a RESTArt simulation of the LIMA scheme +!! +!! +!! PURPOSE +!! ------- +!! The purpose of this routine is to initialize cloud droplet and rain drop +!! concentrations when the cloud droplet and rain drop mixing ratios are +!! only available (generally from a previous run using the Kessler scheme). +!! This routine is used to initialize the droplet/drop concentrations +!! using the r_c and r_r of a previous REVE or KESS run but also to compute +!! the LB tendencies in ONE_WAY$n in case of grid-nesting when the optional +!! argument PTIME is set (a LIMA run embedded in a KESS or REVE run). +!! +!!** METHOD +!! ------ +!! The method assumes a Csk law for the activation of aerososl with "s" +!! the supersaturation (here 0.05 % is chosen). A Marshall-Palmer law with +!! N_o=10**(-7) m**(-4) is assumed for the rain drop concentration. +!! The initialization of the PSVT is straightforward for the cloud droplets +!! while N_r=N_0/Lambda_r with Rho*r_r=Pi*Rho_w*N_0/(Lambda_r**4) is used for +!! the rain drops. The HGETCLOUD test is used to discriminate between the +!! 'REVE' and 'KESS' options for CCLOUD in the previous run (from which +!! PRT was calculated). +!! +!! EXTERNAL +!! -------- +!! None +!! +!! IMPLICIT ARGUMENTS +!! ------------------ +!! Module MODD_RAIN_C2R2_DESCR, ONLY : XRTMIN, XCTMIN +!! Module MODD_RAIN_C2R2_KHKO_PARAM, ONLY : XCONCC_INI, XCONCR_PARAM_INI +!! Module MODD_CONF, ONLY : NVERB +!! +!! REFERENCE +!! --------- +!! Book2 of documentation ( routine SET_CONC_RAIN_C2R2 ) +!! +!! AUTHOR +!! ------ +!! J.-P. Pinty * Laboratoire d'Aerologie* +!! P. Jabouille * CNRM/GMME * +!! B. Vié * CNRM/GMME * +!! +!! MODIFICATIONS +!! ------------- +!! Original 15/11/00 +!! 2014 G.Delautier : remplace MODD_RAIN_C2R2_PARAM par MODD_RAIN_C2R2_KHKO_PARAM * +!! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! B. Vié 03/03/2020: secure physical tests +! P. Wautelet 04/06/2020: correct array start for microphys. concentrations + add kmi dummy argument +! (this subroutine is also called for other models) +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_PARAM_LIMA, ONLY : XRTMIN, XCTMIN, NMOD_CCN, NMOD_IFN, & + NMOM_C, NMOM_R, NMOM_I +USE MODD_PARAM_LIMA_COLD, ONLY : XAI, XBI, XAS, XBS +USE MODD_PARAM_LIMA_MIXED,ONLY : XAG, XBG, XAH, XBH +USE MODD_NSV, ONLY : NSV_LIMA_BEG_A, NSV_LIMA_NC_A, NSV_LIMA_NR_A, NSV_LIMA_CCN_ACTI_A, & + NSV_LIMA_NI_A, NSV_LIMA_NS_A, NSV_LIMA_NG_A, NSV_LIMA_NH_A, NSV_LIMA_IFN_NUCL_A +USE MODD_CST, ONLY : XPI, XRHOLW, XRHOLI +USE MODD_CONF, ONLY : NVERB +! +IMPLICIT NONE +! +!* 0.1 Declarations of dummy arguments : +! +integer, intent(in) :: kmi ! Model number +CHARACTER (LEN=4), INTENT(IN) :: HGETCLOUD ! Get indicator +REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! Reference density +! +REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRT ! microphysical mixing ratios +! +REAL, DIMENSION(:,:,:,NSV_LIMA_BEG_A(kmi):), INTENT(INOUT):: PSVT ! microphys. concentrations +! +! +!* 0.2 Declarations of local variables : +! +REAL :: ZCONC +! +!------------------------------------------------------------------------------- +!* 1. RETRIEVE LOGICAL UNIT NUMBER +! ---------------------------- +! +! +!* 2. INITIALIZATION +! -------------- +! +IF (NMOM_C.GE.2) THEN +! +! droplets +! + ZCONC = 300.E6 ! droplet concentration set at 300 cm-3 + WHERE ( PRT(:,:,:,2) > 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NC_A(kmi))<1.E-11) + PSVT(:,:,:,NSV_LIMA_NC_A(kmi)) = ZCONC + END WHERE + WHERE ( PRT(:,:,:,2) <= 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NC_A(kmi))<1.E-11) + PRT(:,:,:,2) = 0.0 + PSVT(:,:,:,NSV_LIMA_NC_A(kmi)) = 0.0 + END WHERE + + IF (NMOD_CCN .GE. 1) THEN + WHERE ( PRT(:,:,:,2) > 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NC_A(kmi))<1.E-11) + PSVT(:,:,:,NSV_LIMA_CCN_ACTI_A(kmi)) = ZCONC + END WHERE + WHERE ( PRT(:,:,:,2) <= 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NC_A(kmi))<1.E-11) + PSVT(:,:,:,NSV_LIMA_CCN_ACTI_A(kmi)) = 0.0 + END WHERE + END IF + +END IF +! +IF (NMOM_R.GE.2) THEN +! +! drops +! + ZCONC = (1.E7)**3/(XPI*XRHOLW) ! cf XCONCR_PARAM_INI in ini_rain_c2r2.f90 + IF (HGETCLOUD == 'INI1') THEN ! init from REVE scheme + PSVT(:,:,:,NSV_LIMA_NR_A(kmi)) = 0.0 + ELSE ! init from KESS, ICE3... + WHERE ( PRT(:,:,:,3) > 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NR_A(kmi))<1.E-11 ) + PSVT(:,:,:,NSV_LIMA_NR_A(kmi)) = MAX( SQRT(SQRT(PRHODREF(:,:,:)*PRT(:,:,:,3) & + *ZCONC)),1. ) + END WHERE + WHERE ( PRT(:,:,:,3) <= 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NR_A(kmi))<1.E-11 ) + PRT(:,:,:,3) = 0.0 + PSVT(:,:,:,NSV_LIMA_NR_A(kmi)) = 0.0 + END WHERE + END IF +END IF +! +IF (NMOM_I.GE.2) THEN +! +! ice crystals +! + ZCONC = 100.E3 ! maximum ice concentration set at 100/L + WHERE ( PRT(:,:,:,4) > 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NI_A(kmi))<1.E-11 ) +! +! PSVT(:,:,:,NSV_LIMA_NI_A(kmi)) = MIN( PRHODREF(:,:,:) / & +! ( XRHOLI * XAI*(10.E-06)**XBI * PRT(:,:,:,4) ), & +! ZCONC ) +! Correction + PSVT(:,:,:,NSV_LIMA_NI_A(kmi)) = MIN(PRT(:,:,:,4)/(0.82*(10.E-06)**2.5),ZCONC ) + END WHERE + WHERE ( PRT(:,:,:,4) <= 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NI_A(kmi))<1.E-11 ) + PRT(:,:,:,4) = 0.0 + PSVT(:,:,:,NSV_LIMA_NI_A(kmi)) = 0.0 + END WHERE + + IF (NMOD_IFN .GE. 1) THEN + WHERE ( PRT(:,:,:,4) > 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NI_A(kmi))<1.E-11 ) + PSVT(:,:,:,NSV_LIMA_IFN_NUCL_A(kmi)) = PSVT(:,:,:,NSV_LIMA_NI_A(kmi)) + END WHERE + WHERE ( PRT(:,:,:,4) <= 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NI_A(kmi))<1.E-11 ) + PSVT(:,:,:,NSV_LIMA_IFN_NUCL_A(kmi)) = 0.0 + END WHERE + END IF + +END IF +! +IF (NSV_LIMA_NS_A(KMI).GE.1) THEN +! +! snow +! + ZCONC = 1./ (XAS*0.001**XBS) ! 1mm particle size + WHERE ( PRT(:,:,:,5) > 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NS_A(kmi))<1.E-11 ) + PSVT(:,:,:,NSV_LIMA_NS_A(KMI)) = PRT(:,:,:,5) * ZCONC + END WHERE + WHERE ( PRT(:,:,:,5) <= 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NS_A(kmi))<1.E-11 ) + PRT(:,:,:,5) = 0.0 + PSVT(:,:,:,NSV_LIMA_NS_A(KMI)) = 0.0 + END WHERE +END IF +! +IF (NSV_LIMA_NG_A(KMI).GE.1) THEN +! +! graupel +! + ZCONC = 1./ (XAG*0.001**XBG) ! 1mm particle size + WHERE ( PRT(:,:,:,6) > 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NG_A(kmi))<1.E-11 ) + PSVT(:,:,:,NSV_LIMA_NG_A(KMI)) = PRT(:,:,:,6) * ZCONC + END WHERE + WHERE ( PRT(:,:,:,6) <= 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NG_A(kmi))<1.E-11 ) + PRT(:,:,:,6) = 0.0 + PSVT(:,:,:,NSV_LIMA_NG_A(KMI)) = 0.0 + END WHERE +END IF +! +IF (NSV_LIMA_NH_A(KMI).GE.1) THEN +! +! hail +! + ZCONC = 1./ (XAH*0.001**XBH) ! 1mm particle size + WHERE ( PRT(:,:,:,7) > 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NH_A(kmi))<1.E-11 ) + PSVT(:,:,:,NSV_LIMA_NH_A(KMI)) = PRT(:,:,:,7) * ZCONC + END WHERE + WHERE ( PRT(:,:,:,7) <= 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NH_A(kmi))<1.E-11 ) + PRT(:,:,:,7) = 0.0 + PSVT(:,:,:,NSV_LIMA_NH_A(KMI)) = 0.0 + END WHERE +END IF +! +END SUBROUTINE SET_CONC_LIMA_LBC + +end module mode_set_conc_lima_lbc diff --git a/src/mesonh/micro/set_conc_lima.f90 b/src/common/micro/set_conc_lima.f90 similarity index 89% rename from src/mesonh/micro/set_conc_lima.f90 rename to src/common/micro/set_conc_lima.f90 index a92baca70e88e95aefd62dbd60464f9d9355570e..1a439bafcf36c03bb0f5afe28b8d639f4a823fe0 100644 --- a/src/mesonh/micro/set_conc_lima.f90 +++ b/src/common/micro/set_conc_lima.f90 @@ -81,8 +81,6 @@ USE MODD_NSV, ONLY : NSV_LIMA_BEG_A, NSV_LIMA_NC_A, NSV_LIMA_NR_A, N NSV_LIMA_NI_A, NSV_LIMA_NS_A, NSV_LIMA_NG_A, NSV_LIMA_NH_A, NSV_LIMA_IFN_NUCL_A USE MODD_CST, ONLY : XPI, XRHOLW, XRHOLI USE MODD_CONF, ONLY : NVERB -USE MODD_CONF_n, ONLY : NRR -USE MODD_LUNIT_n, ONLY : TLUOUT ! IMPLICIT NONE ! @@ -99,20 +97,17 @@ REAL, DIMENSION(:,:,:,NSV_LIMA_BEG_A(kmi):), INTENT(INOUT):: PSVT ! microph ! !* 0.2 Declarations of local variables : ! -INTEGER :: IRESP ! Return code of FM routines -INTEGER :: ILUOUT ! Logical unit number of output-listing REAL :: ZCONC ! !------------------------------------------------------------------------------- !* 1. RETRIEVE LOGICAL UNIT NUMBER ! ---------------------------- ! -ILUOUT = TLUOUT%NLU ! !* 2. INITIALIZATION ! -------------- ! -IF (NRR.GE.2 .AND. NMOM_C.GE.2) THEN +IF (NMOM_C.GE.2) THEN ! ! droplets ! @@ -134,13 +129,9 @@ IF (NRR.GE.2 .AND. NMOM_C.GE.2) THEN END WHERE END IF -! IF( NVERB >= 5 ) THEN -! WRITE (UNIT=ILUOUT,FMT=*) "!INI_MODEL$n: The droplet concentration has " -! WRITE (UNIT=ILUOUT,FMT=*) "been roughly initialised" -! END IF END IF ! -IF (NRR.GE.3 .AND. NMOM_R.GE.2) THEN +IF (NMOM_R.GE.2) THEN ! ! drops ! @@ -156,14 +147,10 @@ IF (NRR.GE.3 .AND. NMOM_R.GE.2) THEN PRT(:,:,:,3) = 0.0 PSVT(:,:,:,NSV_LIMA_NR_A(kmi)) = 0.0 END WHERE -! IF( NVERB >= 5 ) THEN -! WRITE (UNIT=ILUOUT,FMT=*) "!INI_MODEL$n: The raindrop concentration has " -! WRITE (UNIT=ILUOUT,FMT=*) "been roughly initialised" -! END IF END IF END IF ! -IF (NRR.GE.4 .AND. NMOM_I.GE.2) THEN +IF (NMOM_I.GE.2) THEN ! ! ice crystals ! @@ -190,11 +177,6 @@ IF (NRR.GE.4 .AND. NMOM_I.GE.2) THEN END WHERE END IF -! IF( NVERB >= 5 ) THEN -! WRITE (UNIT=ILUOUT,FMT=*) "!INI_MODEL$n: The cloud ice concentration has " -! WRITE (UNIT=ILUOUT,FMT=*) "been roughly initialised" -! END IF -! END IF ! IF (NSV_LIMA_NS_A(KMI).GE.1) THEN