diff --git a/src/MNH/default_desfmn.f90 b/src/MNH/default_desfmn.f90 index 51b902548ce2544ef0f8ee84e7409faab45b4fd0..1925ef8babb1dfc6ddf0c6293f5c50ae24bce862 100644 --- a/src/MNH/default_desfmn.f90 +++ b/src/MNH/default_desfmn.f90 @@ -275,24 +275,25 @@ USE MODD_EOL_SHARED_IO USE MODD_ALLSTATION_n ! ! -USE MODD_PARAM_LIMA, ONLY : LCOLD, LNUCL, LSEDI, LHHONI, LSNOW, LHAIL, LMEYERS, & - NMOD_IFN, NMOM_I, XIFN_CONC, LIFN_HOM, CIFN_SPECIES, & - CINT_MIXING, NMOD_IMM, NIND_SPECIE, LMURAKAMI, & - YSNOW_T=>LSNOW_T, CPRISTINE_ICE_LIMA, CHEVRIMED_ICE_LIMA, & - XFACTNUC_DEP, XFACTNUC_CON, & - OWARM=>LWARM, LACTI, ORAIN=>LRAIN, OSEDC=>LSEDC, & - OACTIT=>LACTIT, LBOUND, LSPRO, LADJ, LKHKO, & - NMOD_CCN, XCCN_CONC, & - LCCN_HOM, CCCN_MODES, & - YALPHAR=>XALPHAR, YNUR=>XNUR, & - YALPHAC=>XALPHAC, YNUC=>XNUC, CINI_CCN=>HINI_CCN, & - CTYPE_CCN=>HTYPE_CCN, YFSOLUB_CCN=>XFSOLUB_CCN, & - YACTEMP_CCN=>XACTEMP_CCN, YAERDIFF=>XAERDIFF, & - YAERHEIGHT=>XAERHEIGHT, & - LSCAV, LAERO_MASS, NPHILLIPS, & - LCIBU, XNDEBRIS_CIBU, LRDSF, & - ODEPOC=>LDEPOC, OVDEPOC=>XVDEPOC, OACTTKE=>LACTTKE, & - LPTSPLIT, L_LFEEDBACKT=>LFEEDBACKT, L_NMAXITER=>NMAXITER, & +USE MODD_PARAM_LIMA, ONLY : LCOLD, LNUCL, LSEDI, LHHONI, LSNOW, LHAIL, LMEYERS, & + NMOM_I, NMOM_S, NMOM_G, NMOM_H, & + NMOD_IFN, XIFN_CONC, LIFN_HOM, CIFN_SPECIES, & + CINT_MIXING, NMOD_IMM, NIND_SPECIE, LMURAKAMI, & + YSNOW_T=>LSNOW_T, CPRISTINE_ICE_LIMA, CHEVRIMED_ICE_LIMA, & + XFACTNUC_DEP, XFACTNUC_CON, & + OWARM=>LWARM, LACTI, ORAIN=>LRAIN, OSEDC=>LSEDC, & + OACTIT=>LACTIT, LBOUND, LSPRO, LADJ, LKHKO, NMOM_C, NMOM_R, & + NMOD_CCN, XCCN_CONC, & + LCCN_HOM, CCCN_MODES, & + YALPHAR=>XALPHAR, YNUR=>XNUR, & + YALPHAC=>XALPHAC, YNUC=>XNUC, CINI_CCN=>HINI_CCN, & + CTYPE_CCN=>HTYPE_CCN, YFSOLUB_CCN=>XFSOLUB_CCN, & + YACTEMP_CCN=>XACTEMP_CCN, YAERDIFF=>XAERDIFF, & + YAERHEIGHT=>XAERHEIGHT, & + LSCAV, LAERO_MASS, NPHILLIPS, & + LCIBU, XNDEBRIS_CIBU, LRDSF, & + ODEPOC=>LDEPOC, OVDEPOC=>XVDEPOC, OACTTKE=>LACTTKE, & + LPTSPLIT, L_LFEEDBACKT=>LFEEDBACKT, L_NMAXITER=>NMAXITER, & L_XMRSTEP=>XMRSTEP, L_XTSTEP_TS=>XTSTEP_TS ! USE MODD_LATZ_EDFLX @@ -983,71 +984,77 @@ IF (KMI == 1) THEN L_XMRSTEP = 0. L_XTSTEP_TS = 0. ! - YNUC = 1.0 - YALPHAC = 3.0 - YNUR = 2.0 - YALPHAR = 1.0 -! - OWARM = .TRUE. - LACTI = .TRUE. - ORAIN = .TRUE. - OSEDC = .TRUE. - OACTIT = .FALSE. - LADJ = .TRUE. - LSPRO = .FALSE. - LKHKO = .FALSE. - ODEPOC = .FALSE. - LBOUND = .FALSE. - OACTTKE = .TRUE. -! - OVDEPOC = 0.02 ! 2 cm/s -! - CINI_CCN = 'AER' - CTYPE_CCN(:) = 'M' -! - YAERDIFF = 0.0 - YAERHEIGHT = 2000. + YNUC = 1.0 + YALPHAC = 3.0 + YNUR = 2.0 + YALPHAR = 1.0 +! + OWARM = .TRUE. + LACTI = .TRUE. + ORAIN = .TRUE. + OSEDC = .TRUE. + OACTIT = .FALSE. + LADJ = .TRUE. + LSPRO = .FALSE. + LKHKO = .FALSE. + ODEPOC = .FALSE. + LBOUND = .FALSE. + OACTTKE = .TRUE. +! + NMOM_C = 2 + NMOM_R = 2 +! + OVDEPOC = 0.02 ! 2 cm/s +! + CINI_CCN = 'AER' + CTYPE_CCN(:) = 'M' +! + YAERDIFF = 0.0 + YAERHEIGHT = 2000. ! YR_MEAN_CCN = 0.0 ! In case of 'CCN' initialization ! YLOGSIG_CCN = 0.0 - YFSOLUB_CCN = 1.0 - YACTEMP_CCN = 280. + YFSOLUB_CCN = 1.0 + YACTEMP_CCN = 280. ! - NMOD_CCN = 1 + NMOD_CCN = 1 ! !* AP Scavenging ! - LSCAV = .FALSE. - LAERO_MASS = .FALSE. -! - LCCN_HOM = .TRUE. - CCCN_MODES = 'COPT' - XCCN_CONC(:)=300. - - LHHONI = .FALSE. - LCOLD = .TRUE. - LNUCL = .TRUE. - LSEDI = .TRUE. - LSNOW = .TRUE. - LHAIL = .FALSE. - YSNOW_T = .TRUE. - LMURAKAMI = .TRUE. - CPRISTINE_ICE_LIMA = 'PLAT' - CHEVRIMED_ICE_LIMA = 'GRAU' - XFACTNUC_DEP = 1.0 - XFACTNUC_CON = 1.0 - NMOM_I = 2 - NMOD_IFN = 1 - NIND_SPECIE = 1 - LMEYERS = .FALSE. - LIFN_HOM = .TRUE. - CIFN_SPECIES = 'PHILLIPS' - CINT_MIXING = 'DM2' - XIFN_CONC(:) = 100. - NMOD_IMM = 0 - NPHILLIPS=8 - LCIBU = .FALSE. - XNDEBRIS_CIBU = 50.0 - LRDSF = .FALSE. + LSCAV = .FALSE. + LAERO_MASS = .FALSE. +! + LCCN_HOM = .TRUE. + CCCN_MODES = 'COPT' + XCCN_CONC(:)=300. +! + LHHONI = .FALSE. + LCOLD = .TRUE. + LNUCL = .TRUE. + LSEDI = .TRUE. + LSNOW = .TRUE. + LHAIL = .FALSE. + YSNOW_T = .TRUE. + LMURAKAMI = .TRUE. + CPRISTINE_ICE_LIMA = 'PLAT' + CHEVRIMED_ICE_LIMA = 'GRAU' + XFACTNUC_DEP = 1.0 + XFACTNUC_CON = 1.0 + NMOM_I = 2 + NMOM_S = 1 + NMOM_G = 1 + NMOM_H = 1 + NMOD_IFN = 1 + NIND_SPECIE = 1 + LMEYERS = .FALSE. + LIFN_HOM = .TRUE. + CIFN_SPECIES = 'PHILLIPS' + CINT_MIXING = 'DM2' + XIFN_CONC(:) = 100. + NMOD_IMM = 0 + NPHILLIPS=8 + LCIBU = .FALSE. + XNDEBRIS_CIBU = 50.0 + LRDSF = .FALSE. ENDIF ! !------------------------------------------------------------------------------- diff --git a/src/MNH/ini_nsv.f90 b/src/MNH/ini_nsv.f90 index 9ea8633fc038654987a6994537da2f0b521c672e..2553d8ac8cd210470e3ae2b1af741a4eb36ab1d5 100644 --- a/src/MNH/ini_nsv.f90 +++ b/src/MNH/ini_nsv.f90 @@ -107,8 +107,9 @@ USE MODD_LUNIT_n, ONLY: TLUOUT USE MODD_NSV USE MODD_PARAM_C2R2, ONLY: LSUPSAT USE MODD_PARAM_LIMA, ONLY: NINDICE_CCN_IMM, NIMM, NMOD_CCN, LSCAV, LAERO_MASS, & - NMOD_IFN, NMOD_IMM, LHHONI, & - LWARM, LCOLD, LRAIN, LSPRO + NMOD_IFN, NMOD_IMM, LHHONI, LSNOW, LHAIL, & + LWARM, LCOLD, LRAIN, LSPRO, & + NMOM_C, NMOM_R, NMOM_I, NMOM_S, NMOM_G, NMOM_H USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES USE MODD_PARAM_LIMA_WARM, ONLY: CAERO_MASS, CLIMA_WARM_NAMES USE MODD_PARAM_n, ONLY: CCLOUD, CELEC @@ -193,16 +194,16 @@ END IF IF (CCLOUD == 'LIMA' ) THEN ISV = ISV+1 NSV_LIMA_BEG_A(KMI) = ISV - IF (LWARM) THEN + IF (LWARM .AND. NMOM_C.GE.2) THEN ! Nc NSV_LIMA_NC_A(KMI) = ISV ISV = ISV+1 + END IF ! Nr - IF (LRAIN) THEN + IF (LWARM .AND. LRAIN .AND. NMOM_R.GE.2) THEN NSV_LIMA_NR_A(KMI) = ISV ISV = ISV+1 END IF - END IF ! LWARM ! CCN IF (NMOD_CCN .GT. 0) THEN NSV_LIMA_CCN_FREE_A(KMI) = ISV @@ -214,13 +215,27 @@ IF (CCLOUD == 'LIMA' ) THEN IF (LSCAV .AND. LAERO_MASS) THEN NSV_LIMA_SCAVMASS_A(KMI) = ISV ISV = ISV+1 - END IF ! LSCAV -! - IF (LCOLD) THEN + END IF ! Ni + IF (LCOLD .AND. NMOM_I.GE.2) THEN NSV_LIMA_NI_A(KMI) = ISV ISV = ISV+1 - END IF ! LCOLD + END IF +! Ns + IF (LCOLD .AND. LSNOW .AND. NMOM_S.GE.2) THEN + NSV_LIMA_NS_A(KMI) = ISV + ISV = ISV+1 + END IF +! Ng + IF (LCOLD .AND. LWARM .AND. LSNOW .AND. NMOM_G.GE.2) THEN + NSV_LIMA_NG_A(KMI) = ISV + ISV = ISV+1 + END IF +! Nh + IF (LCOLD .AND. LWARM .AND. LSNOW .AND. LHAIL .AND. NMOM_H.GE.2) THEN + NSV_LIMA_NH_A(KMI) = ISV + ISV = ISV+1 + END IF ! IFN IF (NMOD_IFN .GT. 0) THEN NSV_LIMA_IFN_FREE_A(KMI) = ISV @@ -233,7 +248,7 @@ IF (CCLOUD == 'LIMA' ) THEN NSV_LIMA_IMM_NUCL_A(KMI) = ISV ISV = ISV + MAX(1,NMOD_IMM) END IF - +! IF ( NMOD_IFN > 0 ) THEN IF ( .NOT. ALLOCATED( NIMM ) ) ALLOCATE( NIMM(NMOD_CCN) ) NIMM(:) = 0 diff --git a/src/MNH/lima.f90 b/src/MNH/lima.f90 index 74d60c4ff3433b39da42c27bdef43af05e107777..218eee65ca22aa88d4ebd4f3dd416062779661a6 100644 --- a/src/MNH/lima.f90 +++ b/src/MNH/lima.f90 @@ -121,13 +121,14 @@ USE MODD_CST, ONLY: XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XTT, XRHOLW, USE MODD_IO, ONLY: TFILEDATA USE MODD_NSV, ONLY: NSV_LIMA_BEG, & NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_FREE, NSV_LIMA_CCN_ACTI, & - NSV_LIMA_NI, NSV_LIMA_IFN_FREE, & - NSV_LIMA_IFN_NUCL, NSV_LIMA_IMM_NUCL, NSV_LIMA_HOM_HAZE + NSV_LIMA_NI, NSV_LIMA_NS, NSV_LIMA_NG, NSV_LIMA_NH, & + NSV_LIMA_IFN_FREE, NSV_LIMA_IFN_NUCL, NSV_LIMA_IMM_NUCL, NSV_LIMA_HOM_HAZE USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT USE MODD_PARAM_LIMA, ONLY: LCOLD, LRAIN, LWARM, NMOD_CCN, NMOD_IFN, NMOD_IMM, LHHONI, & LACTIT, LFEEDBACKT, NMAXITER, XMRSTEP, XTSTEP_TS, & LSEDC, LSEDI, XRTMIN, XCTMIN, LDEPOC, XVDEPOC, & - LHAIL, LSNOW + LHAIL, LSNOW, & + NMOM_C, NMOM_R, NMOM_I, NMOM_S, NMOM_G, NMOM_H USE MODD_PARAM_LIMA_COLD, ONLY: XAI, XBI USE MODD_PARAM_LIMA_WARM, ONLY: XLBC, XLBEXC, XAC, XBC, XAR, XBR USE MODD_TURB_n, ONLY: LSUBG_COND @@ -193,9 +194,9 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PPRCFR ! Cloud fraction ! ! Prognostic variables and sources REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: ZTHT, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, ZRHT -REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: ZCCT, ZCRT, ZCIT +REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: ZCCT, ZCRT, ZCIT, ZCST, ZCGT, ZCHT REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: ZTHS, ZRVS, ZRCS, ZRRS, ZRIS, ZRSS, ZRGS, ZRHS -REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: ZCCS, ZCRS, ZCIS +REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: ZCCS, ZCRS, ZCIS, ZCSS, ZCGS, ZCHS REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NCCN) :: ZCCNFT, ZCCNAT REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NCCN) :: ZCCNFS, ZCCNAS REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NIFN) :: ZIFNFT, ZIFNNT @@ -215,7 +216,7 @@ REAL, DIMENSION(:), ALLOCATABLE :: & ZP1D, ZRHODREF1D, ZEXNREF1D, ZEXN1D, & ZTHT1D, & ZRVT1D, ZRCT1D, ZRRT1D, ZRIT1D, ZRST1D, ZRGT1D, ZRHT1D, & - ZCCT1D, ZCRT1D, ZCIT1D, & + ZCCT1D, ZCRT1D, ZCIT1D, ZCST1D, ZCGT1D, ZCHT1D, & ZEVAP1D REAL, DIMENSION(:,:), ALLOCATABLE :: ZIFNN1D @@ -268,8 +269,8 @@ REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) :: & ! ! Packed variables for total tendencies REAL, DIMENSION(:), ALLOCATABLE :: & - ZA_TH, ZA_RV, ZA_RC, ZA_CC, ZA_RR, ZA_CR, ZA_RI, ZA_CI, ZA_RS, ZA_RG, ZA_RH, & ! ZA = continuous tendencies (kg/kg/s = S variable) - ZB_TH, ZB_RV, ZB_RC, ZB_CC, ZB_RR, ZB_CR, ZB_RI, ZB_CI, ZB_RS, ZB_RG, ZB_RH ! ZB = instant mixing ratio change (kg/kg = T variable) + ZA_TH, ZA_RV, ZA_RC, ZA_CC, ZA_RR, ZA_CR, ZA_RI, ZA_CI, ZA_RS, ZA_CS, ZA_RG, ZA_CG, ZA_RH, ZA_CH, & ! ZA = continuous tendencies (kg/kg/s = S variable) + ZB_TH, ZB_RV, ZB_RC, ZB_CC, ZB_RR, ZB_CR, ZB_RI, ZB_CI, ZB_RS, ZB_CS, ZB_RG, ZB_CG, ZB_RH, ZB_CH ! ZB = instant mixing ratio change (kg/kg = T variable) REAL, DIMENSION(:,:), ALLOCATABLE :: ZB_IFNN ! @@ -396,6 +397,12 @@ ZCRT(:,:,:) = 0. ZCRS(:,:,:) = 0. ZCIT(:,:,:) = 0. ZCIS(:,:,:) = 0. +ZCST(:,:,:) = 0. +ZCSS(:,:,:) = 0. +ZCGT(:,:,:) = 0. +ZCGS(:,:,:) = 0. +ZCHT(:,:,:) = 0. +ZCHS(:,:,:) = 0. ZCCNFT(:,:,:,:) = 0. ZCCNAT(:,:,:,:) = 0. ZCCNFS(:,:,:,:) = 0. @@ -541,12 +548,18 @@ IF ( KRR .GE. 7 ) ZRHS(:,:,:) = PRS(:,:,:,7) ! ! Concentrations ! -IF ( LWARM ) ZCCT(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC) * PTSTEP -IF ( LWARM ) ZCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC) -IF ( LWARM .AND. LRAIN ) ZCRT(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR) * PTSTEP -IF ( LWARM .AND. LRAIN ) ZCRS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR) -IF ( LCOLD ) ZCIT(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI) * PTSTEP -IF ( LCOLD ) ZCIS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI) +IF ( LWARM .AND. NMOM_C.GE.2) ZCCT(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC) * PTSTEP +IF ( LWARM .AND. NMOM_C.GE.2) ZCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC) +IF ( LWARM .AND. LRAIN .AND. NMOM_R.GE.2) ZCRT(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR) * PTSTEP +IF ( LWARM .AND. LRAIN .AND. NMOM_R.GE.2) ZCRS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR) +IF ( LCOLD .AND. NMOM_I.GE.2) ZCIT(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI) * PTSTEP +IF ( LCOLD .AND. NMOM_I.GE.2) ZCIS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI) +IF ( LCOLD .AND. LSNOW .AND. NMOM_S.GE.2) ZCST(:,:,:) = PSVS(:,:,:,NSV_LIMA_NS) * PTSTEP +IF ( LCOLD .AND. LSNOW .AND. NMOM_S.GE.2) ZCSS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NS) +IF ( LCOLD .AND. NMOM_G.GE.2) ZCGT(:,:,:) = PSVS(:,:,:,NSV_LIMA_NG) * PTSTEP +IF ( LCOLD .AND. NMOM_G.GE.2) ZCGS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NG) +IF ( LCOLD .AND. NMOM_H.GE.2) ZCHT(:,:,:) = PSVS(:,:,:,NSV_LIMA_NH) * PTSTEP +IF ( LCOLD .AND. NMOM_H.GE.2) ZCHS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NH) ! IF ( NMOD_CCN .GE. 1 ) ZCCNFT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) * PTSTEP IF ( NMOD_CCN .GE. 1 ) ZCCNAT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1) * PTSTEP @@ -664,27 +677,27 @@ end if ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP ZCPT = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP IF (LWARM .AND. LSEDC) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, & - 'L', 2, 2, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRCS, ZCCS, PINPRC) + 'L', NMOM_C, 2, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRCS, ZCCS, PINPRC) ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP ZCPT = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP IF (LWARM .AND. LRAIN) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, & - 'L', 2, 3, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRRS, ZCRS, PINPRR) + 'L', NMOM_R, 3, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRRS, ZCRS, PINPRR) ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP ZCPT = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP IF (LCOLD .AND. LSEDI) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, & - 'I', 2, 4, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRIS, ZCIS, ZW2D) + 'I', NMOM_I, 4, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRIS, ZCIS, ZW2D) ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP ZCPT = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP IF (LCOLD .AND. LSNOW) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, & - 'I', 1, 5, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRSS, ZW3D, PINPRS) + 'I', NMOM_S, 5, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRSS, ZCSS, PINPRS) ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP ZCPT = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP IF (LCOLD .AND. LSNOW) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, & - 'I', 1, 6, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRGS, ZW3D, PINPRG) + 'I', NMOM_G, 6, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRGS, ZCGS, PINPRG) ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP ZCPT = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP IF (LCOLD .AND. LHAIL) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, & - 'I', 1, 7, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRHS, ZW3D, PINPRH) + 'I', NMOM_H, 7, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRHS, ZCHS, PINPRH) ! ZTHS(:,:,:) = ZT(:,:,:) / ZEXN(:,:,:) * ZINV_TSTEP ! @@ -767,9 +780,12 @@ IF ( KRR .GE. 5 ) ZRST(:,:,:) = ZRSS(:,:,:) * PTSTEP IF ( KRR .GE. 6 ) ZRGT(:,:,:) = ZRGS(:,:,:) * PTSTEP IF ( KRR .GE. 7 ) ZRHT(:,:,:) = ZRHS(:,:,:) * PTSTEP ! -IF ( LWARM ) ZCCT(:,:,:) = ZCCS(:,:,:) * PTSTEP -IF ( LWARM .AND. LRAIN ) ZCRT(:,:,:) = ZCRS(:,:,:) * PTSTEP -IF ( LCOLD ) ZCIT(:,:,:) = ZCIS(:,:,:) * PTSTEP +IF ( LWARM .AND. NMOM_C.GE.2 ) ZCCT(:,:,:) = ZCCS(:,:,:) * PTSTEP +IF ( LWARM .AND. LRAIN .AND. NMOM_R.GE.2 ) ZCRT(:,:,:) = ZCRS(:,:,:) * PTSTEP +IF ( LCOLD .AND. NMOM_I.GE.2 ) ZCIT(:,:,:) = ZCIS(:,:,:) * PTSTEP +IF ( LCOLD .AND. NMOM_S.GE.2 ) ZCST(:,:,:) = ZCSS(:,:,:) * PTSTEP +IF ( LCOLD .AND. NMOM_G.GE.2 ) ZCGT(:,:,:) = ZCGS(:,:,:) * PTSTEP +IF ( LCOLD .AND. NMOM_H.GE.2 ) ZCHT(:,:,:) = ZCHS(:,:,:) * PTSTEP ! !------------------------------------------------------------------------------- ! @@ -780,7 +796,9 @@ CALL LIMA_COMPUTE_CLOUD_FRACTIONS (IIB, IIE, IJB, IJE, IKB, IKE, KKL, & ZCCT, ZRCT, & ZCRT, ZRRT, & ZCIT, ZRIT, & - ZRST, ZRGT, ZRHT, & + ZCST, ZRST, & + ZCGT, ZRGT, & + ZCHT, ZRHT, & PCLDFR, PICEFR, PPRCFR ) ! !------------------------------------------------------------------------------- @@ -805,9 +823,12 @@ ZRSS(:,:,:) = ZRST(:,:,:) *ZINV_TSTEP ZRGS(:,:,:) = ZRGT(:,:,:) *ZINV_TSTEP ZRHS(:,:,:) = ZRHT(:,:,:) *ZINV_TSTEP ! -ZCCS(:,:,:) = ZCCT(:,:,:) *ZINV_TSTEP -ZCRS(:,:,:) = ZCRT(:,:,:) *ZINV_TSTEP -ZCIS(:,:,:) = ZCIT(:,:,:) *ZINV_TSTEP +IF (NMOM_C.GE.2) ZCCS(:,:,:) = ZCCT(:,:,:) *ZINV_TSTEP +IF (NMOM_R.GE.2) ZCRS(:,:,:) = ZCRT(:,:,:) *ZINV_TSTEP +IF (NMOM_I.GE.2) ZCIS(:,:,:) = ZCIT(:,:,:) *ZINV_TSTEP +IF (NMOM_S.GE.2) ZCSS(:,:,:) = ZCST(:,:,:) *ZINV_TSTEP +IF (NMOM_G.GE.2) ZCGS(:,:,:) = ZCGT(:,:,:) *ZINV_TSTEP +IF (NMOM_H.GE.2) ZCHS(:,:,:) = ZCHT(:,:,:) *ZINV_TSTEP ! ZCCNFS(:,:,:,:) = ZCCNFT(:,:,:,:) *ZINV_TSTEP ZCCNAS(:,:,:,:) = ZCCNAT(:,:,:,:) *ZINV_TSTEP @@ -891,6 +912,9 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP)) ALLOCATE(ZCCT1D(IPACK)) ALLOCATE(ZCRT1D(IPACK)) ALLOCATE(ZCIT1D(IPACK)) + ALLOCATE(ZCST1D(IPACK)) + ALLOCATE(ZCGT1D(IPACK)) + ALLOCATE(ZCHT1D(IPACK)) ALLOCATE(ZIFNN1D(IPACK,NMOD_IFN)) ALLOCATE(ZEVAP1D(IPACK)) ALLOCATE(ZTIME1D(IPACK)) @@ -924,6 +948,9 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP)) ZCCT1D(II) = ZCCT(I1(II),I2(II),I3(II)) ZCRT1D(II) = ZCRT(I1(II),I2(II),I3(II)) ZCIT1D(II) = ZCIT(I1(II),I2(II),I3(II)) + ZCST1D(II) = ZCST(I1(II),I2(II),I3(II)) + ZCGT1D(II) = ZCGT(I1(II),I2(II),I3(II)) + ZCHT1D(II) = ZCHT(I1(II),I2(II),I3(II)) ZIFNN1D(II,:) = ZIFNNT(I1(II),I2(II),I3(II),:) ZEVAP1D(II) = PEVAP3D(I1(II),I2(II),I3(II)) ZTIME1D(II) = ZTIME(I1(II),I2(II),I3(II)) @@ -944,8 +971,10 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP)) ! WHERE(ZCF1D(:)<1.E-10 .AND. ZRCT1D(:)>XRTMIN(2) .AND. ZCCT1D(:)>XCTMIN(2)) ZCF1D(:)=1. WHERE(ZIF1D(:)<1.E-10 .AND. ZRIT1D(:)>XRTMIN(4) .AND. ZCIT1D(:)>XCTMIN(4)) ZIF1D(:)=1. - WHERE(ZPF1D(:)<1.E-10 .AND. (ZRRT1D(:)>XRTMIN(3) .OR. ZRST1D(:)>XRTMIN(5) & - .OR. ZRGT1D(:)>XRTMIN(6) .OR. ZRHT1D(:)>XRTMIN(7) ) ) ZPF1D(:)=1. + WHERE(ZPF1D(:)<1.E-10 .AND. ZRRT1D(:)>XRTMIN(3) .AND. ZCRT1D(:)>XCTMIN(3)) ZPF1D(:)=1. + WHERE(ZPF1D(:)<1.E-10 .AND. ZRST1D(:)>XRTMIN(5) .AND. ZCST1D(:)>XCTMIN(5)) ZPF1D(:)=1. + WHERE(ZPF1D(:)<1.E-10 .AND. ZRGT1D(:)>XRTMIN(6) .AND. ZCGT1D(:)>XCTMIN(6)) ZPF1D(:)=1. + WHERE(ZPF1D(:)<1.E-10 .AND. ZRHT1D(:)>XRTMIN(7) .AND. ZCHT1D(:)>XCTMIN(7)) ZPF1D(:)=1. ! ! Allocating 1D variables ! @@ -963,6 +992,9 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP)) ALLOCATE(ZA_CC(IPACK)) ; ZA_CC(:) = 0. ALLOCATE(ZA_CR(IPACK)) ; ZA_CR(:) = 0. ALLOCATE(ZA_CI(IPACK)) ; ZA_CI(:) = 0. + ALLOCATE(ZA_CS(IPACK)) ; ZA_CS(:) = 0. + ALLOCATE(ZA_CG(IPACK)) ; ZA_CG(:) = 0. + ALLOCATE(ZA_CH(IPACK)) ; ZA_CH(:) = 0. ! ALLOCATE(ZB_TH(IPACK)) ; ZB_TH(:) = 0. ALLOCATE(ZB_RV(IPACK)) ; ZB_RV(:) = 0. @@ -975,6 +1007,9 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP)) ALLOCATE(ZB_CC(IPACK)) ; ZB_CC(:) = 0. ALLOCATE(ZB_CR(IPACK)) ; ZB_CR(:) = 0. ALLOCATE(ZB_CI(IPACK)) ; ZB_CI(:) = 0. + ALLOCATE(ZB_CS(IPACK)) ; ZB_CS(:) = 0. + ALLOCATE(ZB_CG(IPACK)) ; ZB_CG(:) = 0. + ALLOCATE(ZB_CH(IPACK)) ; ZB_CH(:) = 0. ALLOCATE(ZB_IFNN(IPACK,NMOD_IFN)) ; ZB_IFNN(:,:) = 0. ! ALLOCATE(Z_CR_BRKU(IPACK)) ; Z_CR_BRKU(:) = 0. @@ -1269,14 +1304,17 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP)) ZTHT1D = ZTHT1D + ZA_TH(:) * ZMAXTIME(:) + ZB_TH(:) ZRVT1D = ZRVT1D + ZA_RV(:) * ZMAXTIME(:) + ZB_RV(:) ZRCT1D = ZRCT1D + ZA_RC(:) * ZMAXTIME(:) + ZB_RC(:) - ZCCT1D = ZCCT1D + ZA_CC(:) * ZMAXTIME(:) + ZB_CC(:) + IF (NMOM_C.GE.2) ZCCT1D = ZCCT1D + ZA_CC(:) * ZMAXTIME(:) + ZB_CC(:) ZRRT1D = ZRRT1D + ZA_RR(:) * ZMAXTIME(:) + ZB_RR(:) - ZCRT1D = ZCRT1D + ZA_CR(:) * ZMAXTIME(:) + ZB_CR(:) + IF (NMOM_R.GE.2) ZCRT1D = ZCRT1D + ZA_CR(:) * ZMAXTIME(:) + ZB_CR(:) ZRIT1D = ZRIT1D + ZA_RI(:) * ZMAXTIME(:) + ZB_RI(:) - ZCIT1D = ZCIT1D + ZA_CI(:) * ZMAXTIME(:) + ZB_CI(:) + IF (NMOM_I.GE.2) ZCIT1D = ZCIT1D + ZA_CI(:) * ZMAXTIME(:) + ZB_CI(:) ZRST1D = ZRST1D + ZA_RS(:) * ZMAXTIME(:) + ZB_RS(:) + IF (NMOM_S.GE.2) ZCST1D = ZCST1D + ZA_CS(:) * ZMAXTIME(:) + ZB_CS(:) ZRGT1D = ZRGT1D + ZA_RG(:) * ZMAXTIME(:) + ZB_RG(:) + IF (NMOM_G.GE.2) ZCGT1D = ZCGT1D + ZA_CG(:) * ZMAXTIME(:) + ZB_CG(:) ZRHT1D = ZRHT1D + ZA_RH(:) * ZMAXTIME(:) + ZB_RH(:) + IF (NMOM_H.GE.2) ZCHT1D = ZCHT1D + ZA_CH(:) * ZMAXTIME(:) + ZB_CH(:) ! DO II=1,NMOD_IFN ZIFNN1D(:,II) = ZIFNN1D(:,II) + ZB_IFNN(:,II) @@ -1310,8 +1348,7 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP)) ZRVT1D = ZRVT1D + ZRIT1D ZRIT1D = 0. ZCIT1D = 0. - END WHERE - + END WHERE ! !*** 4.5 Next loop ! @@ -1328,9 +1365,12 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP)) ZRST(I1(II),I2(II),I3(II)) = ZRST1D(II) ZRGT(I1(II),I2(II),I3(II)) = ZRGT1D(II) ZRHT(I1(II),I2(II),I3(II)) = ZRHT1D(II) - ZCCT(I1(II),I2(II),I3(II)) = ZCCT1D(II) - ZCRT(I1(II),I2(II),I3(II)) = ZCRT1D(II) - ZCIT(I1(II),I2(II),I3(II)) = ZCIT1D(II) + IF (NMOM_C.GE.2) ZCCT(I1(II),I2(II),I3(II)) = ZCCT1D(II) + IF (NMOM_R.GE.2) ZCRT(I1(II),I2(II),I3(II)) = ZCRT1D(II) + IF (NMOM_I.GE.2) ZCIT(I1(II),I2(II),I3(II)) = ZCIT1D(II) + IF (NMOM_S.GE.2) ZCST(I1(II),I2(II),I3(II)) = ZCST1D(II) + IF (NMOM_G.GE.2) ZCGT(I1(II),I2(II),I3(II)) = ZCGT1D(II) + IF (NMOM_H.GE.2) ZCHT(I1(II),I2(II),I3(II)) = ZCHT1D(II) ZIFNNT(I1(II),I2(II),I3(II),:) = ZIFNN1D(II,:) PEVAP3D(I1(II),I2(II),I3(II)) = ZEVAP1D(II) ZTIME(I1(II),I2(II),I3(II)) = ZTIME1D(II) @@ -1338,12 +1378,14 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP)) IITER(I1(II),I2(II),I3(II)) = IITER1D(II) END DO ! - CALL LIMA_DROPS_TO_DROPLETS_CONV(PRHODREF, ZRCT, ZRRT, ZCCT, ZCRT, & - Z_RR_CVRC, Z_CR_CVRC ) - ZRCT(:,:,:) = ZRCT(:,:,:) - Z_RR_CVRC(:,:,:) - ZRRT(:,:,:) = ZRRT(:,:,:) + Z_RR_CVRC(:,:,:) - ZCCT(:,:,:) = ZCCT(:,:,:) - Z_CR_CVRC(:,:,:) - ZCRT(:,:,:) = ZCRT(:,:,:) + Z_CR_CVRC(:,:,:) + IF (NMOM_C.GE.2 .AND. NMOM_R.GE.2) THEN + CALL LIMA_DROPS_TO_DROPLETS_CONV(PRHODREF, ZRCT, ZRRT, ZCCT, ZCRT, & + Z_RR_CVRC, Z_CR_CVRC ) + ZRCT(:,:,:) = ZRCT(:,:,:) - Z_RR_CVRC(:,:,:) + ZRRT(:,:,:) = ZRRT(:,:,:) + Z_RR_CVRC(:,:,:) + ZCCT(:,:,:) = ZCCT(:,:,:) - Z_CR_CVRC(:,:,:) + ZCRT(:,:,:) = ZCRT(:,:,:) + Z_CR_CVRC(:,:,:) + END IF ! !*** 4.4 Unpacking for budgets ! @@ -1486,6 +1528,9 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP)) DEALLOCATE(ZCCT1D) DEALLOCATE(ZCRT1D) DEALLOCATE(ZCIT1D) + DEALLOCATE(ZCST1D) + DEALLOCATE(ZCGT1D) + DEALLOCATE(ZCHT1D) DEALLOCATE(ZIFNN1D) DEALLOCATE(ZEVAP1D) DEALLOCATE(ZTIME1D) @@ -1517,6 +1562,9 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP)) DEALLOCATE(ZA_CC) DEALLOCATE(ZA_CR) DEALLOCATE(ZA_CI) + DEALLOCATE(ZA_CS) + DEALLOCATE(ZA_CG) + DEALLOCATE(ZA_CH) ! DEALLOCATE(ZB_TH) DEALLOCATE(ZB_RV) @@ -1529,6 +1577,9 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP)) DEALLOCATE(ZB_CC) DEALLOCATE(ZB_CR) DEALLOCATE(ZB_CI) + DEALLOCATE(ZB_CS) + DEALLOCATE(ZB_CG) + DEALLOCATE(ZB_CH) DEALLOCATE(ZB_IFNN) ! DEALLOCATE(Z_CR_BRKU) @@ -1642,9 +1693,12 @@ IF ( KRR .GE. 5 ) PRS(:,:,:,5) = ZRST(:,:,:) *ZINV_TSTEP IF ( KRR .GE. 6 ) PRS(:,:,:,6) = ZRGT(:,:,:) *ZINV_TSTEP IF ( KRR .GE. 7 ) PRS(:,:,:,7) = ZRHT(:,:,:) *ZINV_TSTEP ! -IF ( LWARM ) PSVS(:,:,:,NSV_LIMA_NC) = ZCCT(:,:,:) *ZINV_TSTEP -IF ( LWARM .AND. LRAIN ) PSVS(:,:,:,NSV_LIMA_NR) = ZCRT(:,:,:) *ZINV_TSTEP -IF ( LCOLD ) PSVS(:,:,:,NSV_LIMA_NI) = ZCIT(:,:,:) *ZINV_TSTEP +IF ( LWARM .AND. NMOM_C.GE.2 ) PSVS(:,:,:,NSV_LIMA_NC) = ZCCT(:,:,:) *ZINV_TSTEP +IF ( LWARM .AND. LRAIN .AND. NMOM_R.GE.2 ) PSVS(:,:,:,NSV_LIMA_NR) = ZCRT(:,:,:) *ZINV_TSTEP +IF ( LCOLD .AND. NMOM_I.GE.2 ) PSVS(:,:,:,NSV_LIMA_NI) = ZCIT(:,:,:) *ZINV_TSTEP +IF ( LCOLD .AND. NMOM_S.GE.2 ) PSVS(:,:,:,NSV_LIMA_NS) = ZCST(:,:,:) *ZINV_TSTEP +IF ( LCOLD .AND. NMOM_G.GE.2 ) PSVS(:,:,:,NSV_LIMA_NG) = ZCGT(:,:,:) *ZINV_TSTEP +IF ( LCOLD .AND. NMOM_H.GE.2 ) PSVS(:,:,:,NSV_LIMA_NH) = ZCHT(:,:,:) *ZINV_TSTEP ! IF ( NMOD_CCN .GE. 1 ) PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) = ZCCNFT(:,:,:,:) *ZINV_TSTEP IF ( NMOD_CCN .GE. 1 ) PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1) = ZCCNAT(:,:,:,:) *ZINV_TSTEP diff --git a/src/MNH/lima_compute_cloud_fractions.f90 b/src/MNH/lima_compute_cloud_fractions.f90 index ce1cedeeef9b7b72c85bd9b4828619ca1fc6a8aa..54063eb651eaa0c0f648feb148f371252fe847da 100644 --- a/src/MNH/lima_compute_cloud_fractions.f90 +++ b/src/MNH/lima_compute_cloud_fractions.f90 @@ -11,7 +11,9 @@ MODULE MODI_LIMA_COMPUTE_CLOUD_FRACTIONS PCCT, PRCT, & PCRT, PRRT, & PCIT, PRIT, & - PRST, PRGT, PRHT, & + PCST, PRST, & + PCGT, PRGT, & + PCHT, PRHT, & PCLDFR, PICEFR, PPRCFR ) INTEGER, INTENT(IN) :: KIB ! INTEGER, INTENT(IN) :: KIE ! @@ -30,8 +32,13 @@ MODULE MODI_LIMA_COMPUTE_CLOUD_FRACTIONS REAL, DIMENSION(:,:,:),INTENT(IN) :: PCIT ! REAL, DIMENSION(:,:,:),INTENT(IN) :: PRIT ! ! + REAL, DIMENSION(:,:,:),INTENT(IN) :: PCST ! REAL, DIMENSION(:,:,:),INTENT(IN) :: PRST ! + ! + REAL, DIMENSION(:,:,:),INTENT(IN) :: PCGT ! REAL, DIMENSION(:,:,:),INTENT(IN) :: PRGT ! + ! + REAL, DIMENSION(:,:,:),INTENT(IN) :: PCHT ! REAL, DIMENSION(:,:,:),INTENT(IN) :: PRHT ! ! REAL, DIMENSION(:,:,:),INTENT(INOUT) :: PCLDFR ! @@ -48,7 +55,9 @@ SUBROUTINE LIMA_COMPUTE_CLOUD_FRACTIONS (KIB, KIE, KJB, KJE, KKB, KKE, KKL, & PCCT, PRCT, & PCRT, PRRT, & PCIT, PRIT, & - PRST, PRGT, PRHT, & + PCST, PRST, & + PCGT, PRGT, & + PCHT, PRHT, & PCLDFR, PICEFR, PPRCFR ) !################################################################ ! @@ -70,7 +79,8 @@ SUBROUTINE LIMA_COMPUTE_CLOUD_FRACTIONS (KIB, KIE, KJB, KJE, KKB, KKE, KKL, & !* 0. DECLARATIONS ! ------------ ! -USE MODD_PARAM_LIMA, ONLY : XCTMIN, XRTMIN +USE MODD_PARAM_LIMA, ONLY : XCTMIN, XRTMIN, & + NMOM_C, NMOM_R, NMOM_I, NMOM_S, NMOM_G, NMOM_H ! IMPLICIT NONE ! @@ -93,8 +103,13 @@ REAL, DIMENSION(:,:,:),INTENT(IN) :: PRRT ! REAL, DIMENSION(:,:,:),INTENT(IN) :: PCIT ! REAL, DIMENSION(:,:,:),INTENT(IN) :: PRIT ! ! +REAL, DIMENSION(:,:,:),INTENT(IN) :: PCST ! REAL, DIMENSION(:,:,:),INTENT(IN) :: PRST ! +! +REAL, DIMENSION(:,:,:),INTENT(IN) :: PCGT ! REAL, DIMENSION(:,:,:),INTENT(IN) :: PRGT ! +! +REAL, DIMENSION(:,:,:),INTENT(IN) :: PCHT ! REAL, DIMENSION(:,:,:),INTENT(IN) :: PRHT ! ! REAL, DIMENSION(:,:,:),INTENT(INOUT) :: PCLDFR ! @@ -111,11 +126,11 @@ INTEGER :: JI, JJ, JK ! --------------- ! ! Liquid cloud fraction is kept from input data, except where PCLDFR=0 and rc>0 -WHERE(PCLDFR(:,:,:)<1.E-10 .AND. PRCT(:,:,:)>XRTMIN(2) .AND. PCCT(:,:,:)>XCTMIN(2)) PCLDFR(:,:,:)=1. +WHERE(PCLDFR(:,:,:)<1.E-10 .AND. PRCT(:,:,:)>XRTMIN(2) .AND. (NMOM_C.EQ.1 .OR. PCCT(:,:,:)>XCTMIN(2))) PCLDFR(:,:,:)=1. ! ! Ice cloud fraction is currently 0 or 1 PICEFR(:,:,:)=0. -WHERE(PICEFR(:,:,:)<1.E-10 .AND. PRIT(:,:,:)>XRTMIN(4) .AND. PCIT(:,:,:)>XCTMIN(4)) PICEFR(:,:,:)=1. +WHERE(PICEFR(:,:,:)<1.E-10 .AND. PRIT(:,:,:)>XRTMIN(4) .AND. (NMOM_I.EQ.1 .OR. PCIT(:,:,:)>XCTMIN(4))) PICEFR(:,:,:)=1. ! ! Precipitation fraction !!$PPRCFR(:,:,:) = MAX(PCLDFR(:,:,:),PICEFR(:,:,:)) @@ -163,10 +178,10 @@ WHERE(PICEFR(:,:,:)<1.E-10 .AND. PRIT(:,:,:)>XRTMIN(4) .AND. PCIT(:,:,:)>XCTMIN( !!$ PRHT(:,:,:).GT.XRTMIN(7) ) PPRCFR(:,:,:) = 1. !!$ PPRCFR(:,:,:) = 0. -WHERE ( (PRRT(:,:,:).GT.0. .AND. PCRT(:,:,:).GT.0.) .OR. & - PRST(:,:,:).GT.0. .OR. & - PRGT(:,:,:).GT.0. .OR. & - PRHT(:,:,:).GT.0. ) PPRCFR(:,:,:) = 1. +WHERE ( (PRRT(:,:,:).GT.0. .AND. (NMOM_R.EQ.1 .OR. PCRT(:,:,:).GT.0.) ) .OR. & + (PRST(:,:,:).GT.0. .AND. (NMOM_R.EQ.1 .OR. PCST(:,:,:).GT.0.) ) .OR. & + (PRGT(:,:,:).GT.0. .AND. (NMOM_R.EQ.1 .OR. PCGT(:,:,:).GT.0.) ) .OR. & + (PRHT(:,:,:).GT.0. .AND. (NMOM_R.EQ.1 .OR. PCHT(:,:,:).GT.0.) ) ) PPRCFR(:,:,:) = 1. ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/lima_inst_procs.f90 b/src/MNH/lima_inst_procs.f90 index ce7a127815611c7cd97b37c3c2d51c91665fb0e1..6a5aa149ea7368975e06dead5a299fc9e96d8226 100644 --- a/src/MNH/lima_inst_procs.f90 +++ b/src/MNH/lima_inst_procs.f90 @@ -102,7 +102,7 @@ SUBROUTINE LIMA_INST_PROCS (PTSTEP, LDCOMPUTE, !------------------------------------------------------------------------------- ! ! -USE MODD_PARAM_LIMA, ONLY : LCOLD, LWARM, LRAIN +USE MODD_PARAM_LIMA, ONLY : LCOLD, LWARM, LRAIN, NMOM_R ! USE MODI_LIMA_DROPS_BREAK_UP USE MODI_LIMA_DROPS_HOM_FREEZING @@ -159,7 +159,7 @@ REAL, DIMENSION(:) , INTENT(INOUT) :: PPF1D ! Precipitation fraction ! !------------------------------------------------------------------------------- ! -IF (LWARM .AND. LRAIN) THEN +IF (LWARM .AND. LRAIN .AND. NMOM_R.GE.2) THEN CALL LIMA_DROPS_BREAK_UP (LDCOMPUTE, & ! no dependance on CF, IF or PF PCRT, PRRT, & P_CR_BRKU, & diff --git a/src/MNH/lima_nucleation_procs.f90 b/src/MNH/lima_nucleation_procs.f90 index b28c91cb6cabe68aaecef7a782fba5e1038cc24d..9adbd24ec93b421c57d597bd01ac012e6063c9e8 100644 --- a/src/MNH/lima_nucleation_procs.f90 +++ b/src/MNH/lima_nucleation_procs.f90 @@ -91,7 +91,7 @@ USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_FREE, NSV_LIMA_CCN_ACTI, & NSV_LIMA_NI, NSV_LIMA_IFN_FREE, NSV_LIMA_IFN_NUCL, NSV_LIMA_IMM_NUCL, NSV_LIMA_HOM_HAZE USE MODD_PARAM_LIMA, ONLY : LCOLD, LNUCL, LMEYERS, LSNOW, LWARM, LACTI, LRAIN, LHHONI, & - NMOD_CCN, NMOD_IFN, NMOD_IMM, XCTMIN, XRTMIN, LSPRO, NMOM_I + NMOD_CCN, NMOD_IFN, NMOD_IMM, XCTMIN, XRTMIN, LSPRO, NMOM_I, NMOM_C USE MODD_TURB_n, ONLY : LSUBG_COND use mode_budget, only: Budget_store_add, Budget_store_init, Budget_store_end @@ -152,7 +152,7 @@ INTEGER :: JL ! !------------------------------------------------------------------------------- ! -IF ( LWARM .AND. LACTI .AND. NMOD_CCN >=1 ) THEN +IF ( LWARM .AND. LACTI .AND. NMOD_CCN >=1 .AND. NMOM_C.GE.2) THEN IF (.NOT.LSUBG_COND .AND. .NOT.LSPRO) THEN @@ -347,7 +347,7 @@ END IF ! !------------------------------------------------------------------------------- ! -IF ( LCOLD .AND. LNUCL .AND. LHHONI .AND. NMOD_CCN >= 1) THEN +IF ( LCOLD .AND. LNUCL .AND. LHHONI .AND. NMOD_CCN >= 1 .AND. NMOM_I.GE.2) THEN if ( lbu_enable ) then if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'HONH', PTHT(:, :, :) * prhodj(:, :, :) / ptstep ) if ( lbudget_rv ) call Budget_store_init( tbudgets(NBUDGET_RV), 'HONH', PRVT(:, :, :) * prhodj(:, :, :) / ptstep ) diff --git a/src/MNH/modd_nsv.f90 b/src/MNH/modd_nsv.f90 index 7a842a5c1cacb3073ca3daa6139f327c1ed1543e..510091af5da0da39aa9b05c67b49019c68a55be7 100644 --- a/src/MNH/modd_nsv.f90 +++ b/src/MNH/modd_nsv.f90 @@ -131,6 +131,9 @@ INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_CCN_FREE_A = 0 ! First Free CCN conc. INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_CCN_ACTI_A = 0 ! First Acti. CNN conc. INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_SCAVMASS_A = 0 ! Scavenged mass variable INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_NI_A = 0 ! First Ni var. +INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_NS_A = 0 ! First Ns var. +INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_NG_A = 0 ! First Ng var. +INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_NH_A = 0 ! First Nh var. INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_IFN_FREE_A = 0 ! First Free IFN conc. INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_IFN_NUCL_A = 0 ! First Nucl. IFN conc. INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_IMM_NUCL_A = 0 ! First Nucl. IMM conc. @@ -234,6 +237,9 @@ INTEGER :: NSV_LIMA_CCN_FREE ! INTEGER :: NSV_LIMA_CCN_ACTI ! INTEGER :: NSV_LIMA_SCAVMASS ! INTEGER :: NSV_LIMA_NI ! +INTEGER :: NSV_LIMA_NS ! +INTEGER :: NSV_LIMA_NG ! +INTEGER :: NSV_LIMA_NH ! INTEGER :: NSV_LIMA_IFN_FREE ! INTEGER :: NSV_LIMA_IFN_NUCL ! INTEGER :: NSV_LIMA_IMM_NUCL ! diff --git a/src/MNH/modd_param_lima.f90 b/src/MNH/modd_param_lima.f90 index cb12356ec2fc80a1ba6268b923f486edc1020b6b..e3c53475e8eedb78e611d7bee795c2319cb414cb 100644 --- a/src/MNH/modd_param_lima.f90 +++ b/src/MNH/modd_param_lima.f90 @@ -61,11 +61,14 @@ LOGICAL, SAVE :: LHAIL ! TRUE to enable hail LOGICAL, SAVE :: LMEYERS ! TRUE to use Meyers nucleation LOGICAL, SAVE :: LCIBU ! TRUE to use collisional ice breakup LOGICAL, SAVE :: LRDSF ! TRUE to use rain drop shattering by freezing +INTEGER, SAVE :: NMOM_I ! Number of moments for pristine ice +INTEGER, SAVE :: NMOM_S ! Number of moments for snow +INTEGER, SAVE :: NMOM_G ! Number of moments for graupel +INTEGER, SAVE :: NMOM_H ! Number of moments for hail ! ! 1.2 IFN initialisation ! INTEGER, SAVE :: NMOD_IFN ! Number of IFN modes -INTEGER, SAVE :: NMOM_I ! Number of moments for pristine ice REAL, DIMENSION(JPLIMAIFNMAX), SAVE :: XIFN_CONC ! Ref. concentration of IFN(#/L) LOGICAL, SAVE :: LIFN_HOM ! True for z-homogeneous IFN concentrations CHARACTER(LEN=8), SAVE :: CIFN_SPECIES ! Internal mixing species definitions @@ -146,6 +149,9 @@ LOGICAL, SAVE :: LADJ ! TRUE for adjustment procedure + Smax (false for LOGICAL, SAVE :: LSPRO ! TRUE for prognostic supersaturation LOGICAL, SAVE :: LKHKO ! TRUE for Scu simulation (replicates the previous KHKO scheme) ! +INTEGER, SAVE :: NMOM_C ! Number of moments for cloud droplets +INTEGER, SAVE :: NMOM_R ! Number of moments for rain drops +! ! 2.2 CCN initialisation ! INTEGER, SAVE :: NMOD_CCN ! Number of CCN modes diff --git a/src/MNH/modn_param_lima.f90 b/src/MNH/modn_param_lima.f90 index e516ad088c7c2e6af4260abccd5bba28c0abe424..6edddc8840a78bf3be2e4219443bebe5ac29e85b 100644 --- a/src/MNH/modn_param_lima.f90 +++ b/src/MNH/modn_param_lima.f90 @@ -18,14 +18,15 @@ IMPLICIT NONE ! ! NAMELIST/NAM_PARAM_LIMA/LCOLD, LNUCL, LSEDI, LSNOW, LHAIL, LHHONI, LMEYERS,& - NMOD_IFN, NMOM_I, XIFN_CONC, LIFN_HOM, & + NMOM_I, NMOM_S, NMOM_G, NMOM_H, & + NMOD_IFN, XIFN_CONC, LIFN_HOM, & CIFN_SPECIES, CINT_MIXING, NMOD_IMM, NIND_SPECIE, & LSNOW_T, CPRISTINE_ICE_LIMA, CHEVRIMED_ICE_LIMA, & XALPHAI, XNUI, XALPHAS, XNUS, XALPHAG, XNUG, & XFACTNUC_DEP, XFACTNUC_CON, NPHILLIPS, & LCIBU, XNDEBRIS_CIBU, LRDSF, LMURAKAMI, & LWARM, LACTI, LRAIN, LSEDC, LACTIT, LBOUND, LSPRO, & - LADJ, LKHKO, & + LADJ, LKHKO, NMOM_C, NMOM_R, & NMOD_CCN, XCCN_CONC, & LCCN_HOM, CCCN_MODES, HINI_CCN, HTYPE_CCN, & XALPHAC, XNUC, XALPHAR, XNUR, &