diff --git a/src/arome/ext/apl_arome.F90 b/src/arome/ext/apl_arome.F90 index c2986feee9a266f78977e6d8aca9eb1cbfc7f312..bbf2d2f26daaa1cdbad3900f4f933c8d15eb6df9 100644 --- a/src/arome/ext/apl_arome.F90 +++ b/src/arome/ext/apl_arome.F90 @@ -1568,7 +1568,7 @@ IF (LMICRO) THEN ! for now a copy is needed (see below, inside). I don't like than :-( REK ZLIMAS_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,1:NLIMA)=ZLIMASIN_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,1:NLIMA) - CALL ARO_ADJUST_LIMA (YDCPG_OPTS%KFLEVG, IKU, IKL, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG, NRR, & + CALL ARO_ADJUST_LIMA (YDCPG_OPTS%KFLEVG, IKU, IKL, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG, YDCPG_BNDS%KFDIA, NRR, & & NLIMA, YDCPG_OPTS%KSTEP+1, LOSUBG_COND, LOSIGMAS, LOCND2, 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_, ZMFM_, ZRC_MF_, ZRI_MF_, ZCF_MF_, ZTHS__(:, 1:YDCPG_OPTS%KFLEVG), ZRS_, & @@ -3158,7 +3158,7 @@ IF (LMICRO) THEN ELSE ZPTRWNU_ => ZWM__(1:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG) ENDIF - CALL ARO_LIMA(YDCPG_OPTS%KFLEVG, IKU, IKL, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG, NRR, NLIMA, YDCPG_OPTS%KSTEP+1, & + CALL ARO_LIMA(YDCPG_OPTS%KFLEVG, IKU, IKL, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG,YDCPG_BNDS%KFDIA,NRR, NLIMA, YDCPG_OPTS%KSTEP+1, & & NSPLITR, NSPLITG, ZDT, ZDZZ_, ZRHODJM__(:, 1:YDCPG_OPTS%KFLEVG), ZRHODREFM__(:, 1:YDCPG_OPTS%KFLEVG), & & ZEXNREFM_, ZPABSM__(:, 1:YDCPG_OPTS%KFLEVG), ZPTRWNU_, ZTHM__(:, 1:YDCPG_OPTS%KFLEVG), ZRM_, & & ZLIMAM_, ZTHS__(:, 1:YDCPG_OPTS%KFLEVG), ZRS_, ZLIMAS_, ZEVAP_, ZINPRR_NOTINCR_, & diff --git a/src/arome/ext/aro_adjust_lima.F90 b/src/arome/ext/aro_adjust_lima.F90 index 169373f4974ae90ae14ebd0df4f5f19508cf2737..6cd01e848d725c2778c95f2ec23d3549a874777c 100644 --- a/src/arome/ext/aro_adjust_lima.F90 +++ b/src/arome/ext/aro_adjust_lima.F90 @@ -1,5 +1,5 @@ ! ######spl - SUBROUTINE ARO_ADJUST_LIMA(KKA,KKU,KKL,KLON,KLEV, KRR, KSV, KTCOUNT, & + SUBROUTINE ARO_ADJUST_LIMA(KKA,KKU,KKL,KLON,KLEV,KFDIA, KRR, KSV, KTCOUNT, & OSUBG_COND, OSIGMAS, OCND2, & PTSTEP, PSIGQSAT, & PZZF, PRHODJ, PRHODREF, PEXNREF,& @@ -93,6 +93,8 @@ USE DDH_MIX, ONLY : TYP_DDH USE YOMLDDH, ONLY : TLDDH USE YOMMDDH, ONLY : TMDDH ! +USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +! IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : @@ -105,6 +107,7 @@ INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO INTEGER, INTENT(IN) :: KLON !NPROMA under CPG INTEGER, INTENT(IN) :: KLEV !Number of vertical levels +INTEGER, INTENT(IN) :: KFDIA ! INTEGER, INTENT(IN) :: KRR ! Number of moist variables INTEGER, INTENT(IN) :: KSV ! Number of moist variables INTEGER, INTENT(IN) :: KTCOUNT ! Temporal loop counter @@ -173,6 +176,8 @@ REAL :: ZMASSPOS ! total mass for one water category ! after removing the negative values REAL :: ZRATIO ! ZMASSTOT / ZMASSCOR ! +TYPE(TBUDGETDATA), DIMENSION(NBUDGET_SV1+NSV_LIMA-1) :: YLBUDGET +TYPE(DIMPHYEX_t) :: YLDIMPHYEX ! !------------------------------------------------------------------------------ ! @@ -189,7 +194,7 @@ HRAD='NONE' HTURBDIM='1DIM' KMI=1 - +CALL FILL_DIMPHYEX(YLDIMPHYEX, KLON, 1, KLEV, 0, KFDIA) ! !* 2. TRANSFORMATION INTO PHYSICAL TENDENCIES @@ -242,7 +247,7 @@ ZCPH(:,:,:)=XCPD +XCPV*2.*PTSTEP*PRS(:,:,:,1) !* 3.2 Correct negative values ! ! Correction where rc<0 - IF (LWARM_LIMA) THEN + IF (NMOM_C.GE.1) THEN ! WHERE (PRS(:,:,:,2) < 0. .OR. PSVS(:,:,:,NSV_LIMA_NC) < 0.) WHERE (PRS(:,:,:,2) < 0.) PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2) @@ -253,7 +258,7 @@ ZCPH(:,:,:)=XCPD +XCPV*2.*PTSTEP*PRS(:,:,:,1) END WHERE END IF ! Correction where rr<0 - IF (LWARM_LIMA .AND. LRAIN_LIMA) THEN + IF (NMOM_R.GE.1) THEN ! WHERE (PRS(:,:,:,3) < 0. .OR. PSVS(:,:,:,NSV_LIMA_NR) < 0.) WHERE (PRS(:,:,:,3) < 0.) PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,3) @@ -275,7 +280,7 @@ ZCPH(:,:,:)=XCPD +XCPV*2.*PTSTEP*PRS(:,:,:,1) ! ENDDO ! END IF ! Correction where ri<0 - IF (LCOLD_LIMA) THEN + IF (NMOM_I.GE.1) THEN ! WHERE (PRS(:,:,:,4) < 0. .OR. PSVS(:,:,:,NSV_LIMA_NI) < 0.) WHERE (PRS(:,:,:,4) < 0.) PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4) @@ -301,7 +306,12 @@ ZCPH(:,:,:)=XCPD +XCPV*2.*PTSTEP*PRS(:,:,:,1) !IF (LBUDGET_RH) CALL BUDGET (PRS(:,:,:,7) * PRHODJ(:,:,:),12,'NEGA_BU_RRH') !IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:) * PRHODJ(:,:,:), 4,'NEGA_BU_RTH') - +DO JRR=1, NBUDGET_SV1+NSV_LIMA-1 + YLBUDGET(JRR)%NBUDGET=JRR + YLBUDGET(JRR)%YDDDH=>YDDDH + YLBUDGET(JRR)%YDLDDH=>YDLDDH + YLBUDGET(JRR)%YDMDDH=>YDMDDH +ENDDO ! !------------------------------------------------------------------------------- ! @@ -314,7 +324,8 @@ ZCPH(:,:,:)=XCPD +XCPV*2.*PTSTEP*PRS(:,:,:,1) ! ZZZ = PZZF - CALL LIMA_ADJUST(KRR=KRR, KMI=KMI, HFMFILE='DUMMY', HLUOUT='DUMMY', HRAD='DUMMY', & + CALL LIMA_ADJUST_SPLIT(YLDIMPHYEX, CST, TBUCONF, TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET), & + KRR=KRR, KMI=KMI, HFMFILE='DUMMY', HLUOUT='DUMMY', HRAD='DUMMY', & HTURBDIM=HTURBDIM, OCLOSE_OUT=.FALSE., OSUBG_COND=.FALSE., PTSTEP=2*PTSTEP, & PRHODREF=PRHODREF, PRHODJ=PRHODJ, PEXNREF=PEXNREF, PPABSM=PPABSM, PSIGS=PSIGS, PPABST=PPABSM, & PRT=PRT, PRS=PRS, PSVT=PSVT, PSVS=PSVS, & diff --git a/src/arome/ext/aro_adjust_lima.h b/src/arome/ext/aro_adjust_lima.h new file mode 100644 index 0000000000000000000000000000000000000000..7f4f9c8b9a3ee0be30715e1b998ab7a6aea256b8 --- /dev/null +++ b/src/arome/ext/aro_adjust_lima.h @@ -0,0 +1,46 @@ +INTERFACE +SUBROUTINE ARO_ADJUST_LIMA(KKA,KKU,KKL,KLON,KLEV,KFDIA, KRR, KSV, KTCOUNT,& + & OSUBG_COND, OSIGMAS,OCND2,& + & PTSTEP, PSIGQSAT, PZZF, PRHODJ, PRHODREF, PEXNREF,& + & PPABSM, PTHT, PRT, PSVT, PSIGS,& + & PMFCONV, PRC_MF, PRI_MF, PCF_MF,& + & PTHS, PRS, PSVS, PSRCS, PCLDFR,YDDDH,YDLDDH,YDMDDH) +USE PARKIND1 ,ONLY : JPIM ,JPRB +USE DDH_MIX, ONLY : TYP_DDH +USE YOMLDDH, ONLY : TLDDH +USE YOMMDDH, ONLY : TMDDH +INTEGER(KIND=JPIM), INTENT(IN) :: KKA +INTEGER(KIND=JPIM), INTENT(IN) :: KKU +INTEGER(KIND=JPIM), INTENT(IN) :: KKL +INTEGER(KIND=JPIM), INTENT(IN) :: KLON +INTEGER(KIND=JPIM), INTENT(IN) :: KLEV +INTEGER(KIND=JPIM), INTENT(IN) :: KFDIA +INTEGER(KIND=JPIM), INTENT(IN) :: KRR +INTEGER(KIND=JPIM), INTENT(IN) :: KSV +INTEGER(KIND=JPIM), INTENT(IN) :: KTCOUNT +LOGICAL, INTENT(IN) :: OSUBG_COND +LOGICAL, INTENT(IN) :: OSIGMAS +LOGICAL, INTENT(IN) :: OCND2 +REAL(KIND=JPRB), INTENT(IN) :: PTSTEP +REAL(KIND=JPRB), INTENT(IN) :: PSIGQSAT +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PZZF +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PRHODJ +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PRHODREF +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PEXNREF +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PPABSM +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PTHT +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PRT +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KSV), INTENT(INOUT) :: PSVT +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PSIGS +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PMFCONV +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PRC_MF,PRI_MF,PCF_MF +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PTHS +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 +TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH +TYPE(TLDDH), INTENT(IN) :: YDLDDH +TYPE(TMDDH), INTENT(IN) :: YDMDDH +END SUBROUTINE ARO_ADJUST_LIMA +END INTERFACE diff --git a/src/arome/ext/aro_lima.F90 b/src/arome/ext/aro_lima.F90 index b3f7d2159e20a10d5c41c28feae45c96b61e9dde..08afb064a11963f0aaf3074b7b7ff0294cd7d81c 100644 --- a/src/arome/ext/aro_lima.F90 +++ b/src/arome/ext/aro_lima.F90 @@ -1,5 +1,5 @@ ! ######spl - SUBROUTINE ARO_LIMA(KKA,KKU,KKL,KLON,KLEV, KRR, KSV, KTCOUNT, KSPLITR, KSPLITG, & + SUBROUTINE ARO_LIMA(KKA,KKU,KKL,KLON,KLEV,KFDIA,KRR, KSV, KTCOUNT, KSPLITR, KSPLITG, & PTSTEP, PDZZ, PRHODJ, PRHODREF, PEXNREF,& PPABSM, PW_NU, PTHT, PRT, PSVT, & PTHS, PRS, PSVS, PEVAP, & @@ -75,6 +75,7 @@ INTEGER, INTENT(IN) :: KKU !uppest atmosphere array index INTEGER, INTENT(IN) :: KKL !vert. levels type 1=MNH -1=ARO INTEGER, INTENT(IN) :: KLON !NPROMA under CPG INTEGER, INTENT(IN) :: KLEV !Number of vertical levels +INTEGER, INTENT(IN) :: KFDIA ! INTEGER, INTENT(IN) :: KRR ! Number of moist variables INTEGER, INTENT(IN) :: KSV ! Number of LIMA variables INTEGER, INTENT(IN) :: KTCOUNT ! Temporal loop counter @@ -145,7 +146,7 @@ REAL :: ZRATIO ! ZMASSTOT / ZMASSCOR LOGICAL :: LL_RRR_BUDGET ! -TYPE(TBUDGETDATA), DIMENSION() :: YLBUDGET +TYPE(TBUDGETDATA), DIMENSION(NBUDGET_SV1+NSV_LIMA-1) :: YLBUDGET TYPE(DIMPHYEX_t) :: YLDIMPHYEX ! !------------------------------------------------------------------------------ diff --git a/src/arome/ext/aro_lima.h b/src/arome/ext/aro_lima.h new file mode 100644 index 0000000000000000000000000000000000000000..67ab774670f3d0c896a53d0f1b3d5fa93c4efae1 --- /dev/null +++ b/src/arome/ext/aro_lima.h @@ -0,0 +1,46 @@ +INTERFACE +SUBROUTINE ARO_LIMA(KKA,KKU,KKL,KLON,KLEV, KFDIA, KRR, KSV, KTCOUNT, KSPLITR, KSPLITG, & + & PTSTEP, PDZZ, PRHODJ, PRHODREF, PEXNREF,& + & PPABSM, PW_NU, PTHT, PRT, PSVT, & + & PTHS, PRS, PSVS, PEVAP,& + & PINPRR,PINPRS,PINPRG,PINPRH,PFPR,& + & YDDDH,YDLDDH,YDMDDH) +USE PARKIND1 ,ONLY : JPIM ,JPRB +USE DDH_MIX, ONLY : TYP_DDH +USE YOMLDDH, ONLY : TLDDH +USE YOMMDDH, ONLY : TMDDH +INTEGER(KIND=JPIM), INTENT(IN) :: KKA +INTEGER(KIND=JPIM), INTENT(IN) :: KKU +INTEGER(KIND=JPIM), INTENT(IN) :: KKL +INTEGER(KIND=JPIM), INTENT(IN) :: KLON +INTEGER(KIND=JPIM), INTENT(IN) :: KLEV +INTEGER(KIND=JPIM), INTENT(IN) :: KFDIA +INTEGER(KIND=JPIM), INTENT(IN) :: KRR +INTEGER(KIND=JPIM), INTENT(IN) :: KSV +INTEGER(KIND=JPIM), INTENT(IN) :: KTCOUNT +INTEGER(KIND=JPIM), INTENT(IN) :: KSPLITR +INTEGER(KIND=JPIM), INTENT(IN) :: KSPLITG +REAL(KIND=JPRB), INTENT(IN) :: PTSTEP +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PDZZ +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PRHODJ +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PRHODREF +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PEXNREF +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PPABSM +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PW_NU +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PTHT +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT):: PRT +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KSV), INTENT(INOUT):: PSVT +REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PTHS +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(INOUT) :: PEVAP +REAL(KIND=JPRB), DIMENSION(KLON,1), INTENT(INOUT) :: PINPRR +REAL(KIND=JPRB), DIMENSION(KLON,1), INTENT(INOUT) :: PINPRS +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 +TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH +TYPE(TLDDH), INTENT(IN) :: YDLDDH +TYPE(TMDDH), INTENT(IN) :: YDMDDH +END SUBROUTINE ARO_LIMA +END INTERFACE diff --git a/src/arome/ext/aroini_micro_lima.F90 b/src/arome/ext/aroini_micro_lima.F90 new file mode 100644 index 0000000000000000000000000000000000000000..839aa2de9b54a5addb90ec5658776abc9662af80 --- /dev/null +++ b/src/arome/ext/aroini_micro_lima.F90 @@ -0,0 +1,259 @@ +! ######spl +SUBROUTINE AROINI_MICRO_LIMA(KULOUT,KULNAM,PTSTEP,LDWARM,CMICRO,KSPLITR,KSPLITG,CCSEDIM,LDCRIAUTI,& + PCRIAUTI,PT0CRIAUTI,PCRIAUTC) + +USE PARKIND1, ONLY : JPRB +USE YOMHOOK , ONLY : LHOOK, DR_HOOK +!**** *INI_MICRO* - Initialize common meso_NH MODD_ used in microphysics for AROME + +! Purpose. +! -------- +! Initialize +! MODD_RAIN_ICE_DESCR, MODD_RAIN_ICE_PARAM and MODD_PARAM_ICE +! parameters used in AROME microphysics + +!** Interface. +! ---------- +! *CALL* *INI_MICRO (KULOUT,KSTEP,KSPLITR) + +! Explicit arguments : +! -------------------- +! KULOUT : Logical unit for the output +! PTSTEP : Time step +! KSPLITR : Number of small time step interation for rain sedimentation +! LDWARM : value assigned to LWARM_LIMA + +! Implicit arguments : +! -------------------- +! + +! Method. +! ------- +! See documentation + +! Externals. +! ---------- + +! Reference. +! ---------- +! Documentation AROME + +! Author. +! ------- +! B. Vie + +! Modifications. +! -------------- +! Original : 17-10-09 +! ------------------------------------------------------------------ + +USE MODD_NSV +USE MODD_LIMA_PRECIP_SCAVENGING_n +USE MODD_PARAM_LIMA_COLD +USE MODD_PARAM_LIMA +USE MODD_PARAM_LIMA_MIXED +USE MODD_PARAM_LIMA_WARM + +USE MODI_INI_LIMA +USE MODI_INIT_AEROSOL_PROPERTIES + +USE MODD_LUNIT, ONLY : ILUOUT + +IMPLICIT NONE +! ----------------------------------------------------------------------- +! DUMMY INTEGER SCALARS +INTEGER, INTENT (IN) :: KULOUT +INTEGER, INTENT (IN) :: KULNAM +REAL, INTENT (IN) :: PTSTEP +LOGICAL, INTENT (IN) :: LDWARM +CHARACTER(4), INTENT (IN) :: CMICRO +CHARACTER(4), INTENT (IN) :: CCSEDIM +INTEGER, INTENT (OUT) :: KSPLITR +INTEGER, INTENT (OUT) :: KSPLITG +LOGICAL, INTENT (IN) :: LDCRIAUTI +REAL, INTENT (IN) :: PCRIAUTI +REAL, INTENT (IN) :: PT0CRIAUTI +REAL, INTENT (IN) :: PCRIAUTC +!----------------------------------------------------------------------- +! LOCAL VARIABLES +REAL :: ZCRI0, ZTCRI0 +INTEGER :: ISV +REAL(KIND=JPRB) :: ZHOOK_HANDLE +! ----------------------------------------------------------------------- +! +#include "namlima.nam.h" +#include "posnam.intfb.h" +! +! ----------------------------------------------------------------------- + +ILUOUT = KULOUT + + +! ----------------------------------------------------------------------- +! lecture Valeurs par défaut pour les paramètres de la namelist LIMA +! +LPTSPLIT = .FALSE. +LCOLD_LIMA = .TRUE. +LNUCL_LIMA = .TRUE. +LSEDI_LIMA = .FALSE. +LSNOW_LIMA = .TRUE. +LHAIL_LIMA = .FALSE. +LHHONI_LIMA = .FALSE. +LMEYERS_LIMA = .FALSE. +NMOD_IFN = 1 +XIFN_CONC(1) = 1000 +LIFN_HOM = .TRUE. +CIFN_SPECIES = 'PHILLIPS' +CINT_MIXING = '' +NMOD_IMM = 0 +NIND_SPECIE = 1 +CPRISTINE_ICE_LIMA = 'PLAT' +CHEVRIMED_ICE_LIMA = 'GRAU' +XALPHAI = 0. +XNUI = 0. +XALPHAS = 0. +XNUS = 0. +XALPHAG = 0. +XNUG = 0. +XFACTNUC_DEP = 1. +XFACTNUC_CON = 1. +NPHILLIPS = 8 +! +LWARM_LIMA = .TRUE. +LACTI_LIMA = .TRUE. +LRAIN_LIMA = .TRUE. +LSEDC_LIMA = .FALSE. +LACTIT_LIMA = .FALSE. +NMOD_CCN = 1 +XCCN_CONC(1) = 350. +LCCN_HOM = .TRUE. +CCCN_MODES = '' +HINI_CCN = 'XXX' +HTYPE_CCN = 'X' +XALPHAC = 3. +XNUC = 1. +XALPHAR = 1. +XNUR = 2. +XFSOLUB_CCN = 1. +XACTEMP_CCN = 280. +XAERDIFF = 0. +XAERHEIGHT = 2000. +LSCAV = .FALSE. +LAERO_MASS = .FALSE. +! ----------------------------------------------------------------------- +! lecture de la namelist LIMA + CALL POSNAM(KULNAM,'NAMLIMA') + READ(KULNAM,NAMLIMA) +! ----------------------------------------------------------------------- +! initialisation des NSV + ISV = 1 + + NSV_LIMA_BEG = ISV + IF (LWARM_LIMA) THEN +! Nc + NSV_LIMA_NC = ISV + ISV = ISV+1 +! Nr + IF (LRAIN_LIMA) THEN + NSV_LIMA_NR = ISV + ISV = ISV+1 + END IF + END IF ! LWARM_LIMA +! CCN + IF (NMOD_CCN .GT. 0) THEN + NSV_LIMA_CCN_FREE = ISV + ISV = ISV + NMOD_CCN + NSV_LIMA_CCN_ACTI = ISV + ISV = ISV + NMOD_CCN + END IF +! Scavenging + IF (LSCAV .AND. LAERO_MASS) THEN + NSV_LIMA_SCAVMASS = ISV + ISV = ISV+1 + END IF ! LSCAV +! + IF (LCOLD_LIMA) THEN +! Ni + NSV_LIMA_NI = ISV + ISV = ISV+1 + END IF ! LCOLD_LIMA +! IFN + IF (NMOD_IFN .GT. 0) THEN + NSV_LIMA_IFN_FREE = ISV + ISV = ISV + NMOD_IFN + NSV_LIMA_IFN_NUCL = ISV + ISV = ISV + NMOD_IFN + END IF +! IMM + IF (NMOD_IMM .GT. 0) THEN + NSV_LIMA_IMM_NUCL = ISV + ISV = ISV + MAX(1,NMOD_IMM) + END IF +! Homogeneous freezing of CCN + IF (LCOLD_LIMA .AND. LHHONI_LIMA) THEN + NSV_LIMA_HOM_HAZE = ISV + ISV = ISV + 1 + END IF +! End and total variables + ISV = ISV - 1 + NSV_LIMA_END = ISV + NSV_LIMA = NSV_LIMA_END - NSV_LIMA_BEG + 1 + +NSV=NSV_LIMA + +! ----------------------------------------------------------------------- +! initialisation de LIMA +CALL INIT_AEROSOL_PROPERTIES +! PDZMIN = 20 comme dans l'appel à INI_RAIN_ICE ! +CALL INI_LIMA(KULOUT, PTSTEP, 20., KSPLITR, KSPLITG) + +WRITE(UNIT=KULOUT,FMT='(''LIMA SCHEME TUNING VARIABLES :'')') +WRITE(UNIT=KULOUT,FMT='('' LCOLD_LIMA = '',L5)') LCOLD_LIMA +WRITE(UNIT=KULOUT,FMT='('' LNUCL_LIMA = '',L5)') LNUCL_LIMA +WRITE(UNIT=KULOUT,FMT='('' LSEDI_LIMA = '',L5)') LSEDI_LIMA +WRITE(UNIT=KULOUT,FMT='('' LSNOW_LIMA = '',L5)') LSNOW_LIMA +WRITE(UNIT=KULOUT,FMT='('' LHAIL_LIMA = '',L5)') LHAIL_LIMA +WRITE(UNIT=KULOUT,FMT='('' LHHONI_LIMA = '',L5)') LHHONI_LIMA +WRITE(UNIT=KULOUT,FMT='('' LMEYERS_LIMA = '',L5)') LMEYERS_LIMA +WRITE(UNIT=KULOUT,FMT='('' LIFN_HOM = '',L5)') LIFN_HOM +WRITE(UNIT=KULOUT,FMT='('' LWARM_LIMA = '',L5)') LWARM_LIMA +WRITE(UNIT=KULOUT,FMT='('' LACTI_LIMA = '',L5)') LACTI_LIMA +WRITE(UNIT=KULOUT,FMT='('' LRAIN_LIMA = '',L5)') LRAIN_LIMA +WRITE(UNIT=KULOUT,FMT='('' LSEDC_LIMA = '',L5)') LSEDC_LIMA +WRITE(UNIT=KULOUT,FMT='('' LACTIT_LIMA = '',L5)') LACTIT_LIMA +WRITE(UNIT=KULOUT,FMT='('' LCCN_HOM = '',L5)') LCCN_HOM +WRITE(UNIT=KULOUT,FMT='('' LSCAV = '',L5)') LSCAV +WRITE(UNIT=KULOUT,FMT='('' LAERO_MASS = '',L5)') LAERO_MASS +WRITE(UNIT=KULOUT,FMT='('' CIFN_SPECIES = '',A8,''CINT_MIXING = '',A8)')& +&CIFN_SPECIES,CINT_MIXING +WRITE(UNIT=KULOUT,FMT='('' CPRISTINE_ICE_LIMA = '',A4,''CHEVRIMED_ICE_LIMA = '',A4)')& +&CPRISTINE_ICE_LIMA, CHEVRIMED_ICE_LIMA +WRITE(UNIT=KULOUT,FMT='('' CCCN_MODES = '',A8)')CCCN_MODES +WRITE(UNIT=KULOUT,FMT='('' HINI_CCN = '',A3,''HTYPE_CCN = '',A1)')& +&HINI_CCN,HTYPE_CCN +WRITE(UNIT=KULOUT,FMT='('' NMOD_IFN = '',I5)') NMOD_IFN +WRITE(UNIT=KULOUT,FMT='('' NMOD_IMM = '',I5)') NMOD_IMM +WRITE(UNIT=KULOUT,FMT='('' NIND_SPECIE = '',I5)') NIND_SPECIE +WRITE(UNIT=KULOUT,FMT='('' NPHILLIPS = '',I5)') NPHILLIPS +WRITE(UNIT=KULOUT,FMT='('' NMOD_CCN = '',I5)') NMOD_CCN +WRITE(UNIT=KULOUT,FMT='('' XIFN_CONC = '',f6.2)') XIFN_CONC +WRITE(UNIT=KULOUT,FMT='('' XALPHAI = '',f6.2)') XALPHAI +WRITE(UNIT=KULOUT,FMT='('' XNUI = '',f6.2)') XNUI +WRITE(UNIT=KULOUT,FMT='('' XALPHAS = '',f6.2)') XALPHAS +WRITE(UNIT=KULOUT,FMT='('' XNUS = '',f6.2)') XNUS +WRITE(UNIT=KULOUT,FMT='('' XALPHAG = '',f6.2)') XALPHAG +WRITE(UNIT=KULOUT,FMT='('' XNUG = '',f6.2)') XNUG +WRITE(UNIT=KULOUT,FMT='('' XCCN_CONC = '',f6.2)') XCCN_CONC +WRITE(UNIT=KULOUT,FMT='('' XALPHAC = '',f6.2)') XALPHAC +WRITE(UNIT=KULOUT,FMT='('' XNUC = '',f6.2)') XNUC +WRITE(UNIT=KULOUT,FMT='('' XALPHAR = '',f6.2)') XALPHAR +WRITE(UNIT=KULOUT,FMT='('' XNUR = '',f6.2)') XNUR +WRITE(UNIT=KULOUT,FMT='('' XFSOLUB_CCN = '',f6.2)') XFSOLUB_CCN +WRITE(UNIT=KULOUT,FMT='('' XACTEMP_CCN = '',f6.2)') XACTEMP_CCN +WRITE(UNIT=KULOUT,FMT='('' XAERDIFF = '',f6.2)') XAERDIFF +WRITE(UNIT=KULOUT,FMT='('' XAERHEIGHT = '',f6.2)') XAERHEIGHT + + + +RETURN +END SUBROUTINE AROINI_MICRO_LIMA diff --git a/src/arome/ext/aroini_micro_lima.h b/src/arome/ext/aroini_micro_lima.h new file mode 100644 index 0000000000000000000000000000000000000000..66a01c117f5fe8f3c5662f152bfd61b662faa618 --- /dev/null +++ b/src/arome/ext/aroini_micro_lima.h @@ -0,0 +1,18 @@ +INTERFACE +SUBROUTINE AROINI_MICRO_LIMA(KULOUT,KULNAM,PTSTEP,LDWARM,CMICRO,KSPLITR,KSPLITG,CCSEDIM,LDCRIAUTI,& + PCRIAUTI,PT0CRIAUTI,PCRIAUTC) +USE PARKIND1 ,ONLY : JPIM ,JPRB +INTEGER(KIND=JPIM), INTENT (IN) :: KULOUT +INTEGER(KIND=JPIM), INTENT (IN) :: KULNAM +REAL(KIND=JPRB), INTENT (IN) :: PTSTEP +LOGICAL, INTENT (IN) :: LDWARM +CHARACTER (LEN=4), INTENT (IN) :: CMICRO +CHARACTER(4), INTENT (IN) :: CCSEDIM +INTEGER(KIND=JPIM), INTENT (OUT) :: KSPLITR +INTEGER(KIND=JPIM), INTENT (OUT) :: KSPLITG +LOGICAL, INTENT (IN) :: LDCRIAUTI +REAL(KIND=JPRB), INTENT (IN) :: PCRIAUTI +REAL(KIND=JPRB), INTENT (IN) :: PT0CRIAUTI +REAL(KIND=JPRB), INTENT (IN) :: PCRIAUTC +END SUBROUTINE AROINI_MICRO_LIMA +END INTERFACE diff --git a/src/arome/gmkpack_ignored_files b/src/arome/gmkpack_ignored_files index 95e773e987fa70619196587c5494177ceb27da86..2e00e3c0612ce24c313e7b1b3201b4ec5509f190 100644 --- a/src/arome/gmkpack_ignored_files +++ b/src/arome/gmkpack_ignored_files @@ -204,3 +204,17 @@ mpa/micro/interface/aro_subudget.h mpa/micro/interface/aroend_budget.h mpa/micro/module/modd_refaro.F90 mpa/micro/externals/invert_vlev.F90 +phyex/micro/lima_warm.F90 +phyex/micro/lima_warm_sedimentation.F90 +phyex/micro/lima_warm_nucl.F90 +phyex/micro/lima_warm_coal.F90 +phyex/micro/lima_warm_evap.F90 +phyex/micro/lima_cold.F90 +phyex/micro/lima_cold_sedimentation.F90 +phyex/micro/lima_cold_hom_nucl.F90 +phyex/micro/lima_cold_slow_processes.F90 +phyex/micro/lima_mixed.F90 +phyex/micro/lima_mixed_slow_processes.F90 +phyex/micro/lima_mixed_fast_processes.F90 +phyex/micro/lima_adjust.F90 +phyex/micro/lima_phillips.F90 diff --git a/src/arome/micro/ini_lima.F90 b/src/arome/micro/ini_lima.F90 deleted file mode 100644 index e6a94ef38da0ac05e7ebb3c6ec4986457cdd4057..0000000000000000000000000000000000000000 --- a/src/arome/micro/ini_lima.F90 +++ /dev/null @@ -1,156 +0,0 @@ -! #################### - MODULE MODI_INI_LIMA -! #################### -! -INTERFACE - SUBROUTINE INI_LIMA (KULOUT, PTSTEP, PDZMIN, KSPLITR, KSPLITG) -! -INTEGER, INTENT(IN) :: KULOUT ! output logical unit number -INTEGER, INTENT(OUT):: KSPLITR ! Number of small time step - ! integration for rain - ! sedimendation -INTEGER, INTENT(OUT):: KSPLITG ! Number of small time step - ! integration for graupel - ! sedimendation -REAL, INTENT(IN) :: PTSTEP ! Effective Time step -REAL, INTENT(IN) :: PDZMIN ! minimun vertical mesh size -! -END SUBROUTINE INI_LIMA -! -END INTERFACE -! -END MODULE MODI_INI_LIMA -! ###################################################### - SUBROUTINE INI_LIMA (KULOUT, PTSTEP, PDZMIN, KSPLITR, KSPLITG) -! ###################################################### -! -!! PURPOSE -!! ------- -!! The purpose of this routine is to initialize the constants used in the -!! microphysical scheme LIMA. -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST - -USE MODD_PARAM_LIMA -USE MODD_PARAMETERS -USE MODD_LUNIT -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -! -INTEGER, INTENT(IN) :: KULOUT ! output logical unit number -INTEGER, INTENT(OUT):: KSPLITR ! Number of small time step - ! integration for rain - ! sedimendation -INTEGER, INTENT(OUT):: KSPLITG ! Number of small time step - ! integration for graupel or hail - ! sedimendation -REAL, INTENT(IN) :: PTSTEP ! Effective Time step -REAL, INTENT(IN) :: PDZMIN ! minimun vertical mesh size -! -!* 0.2 Declarations of local variables : -! -REAL :: ZT ! Work variable -REAL :: ZVTRMAX -! -INTEGER :: ILUOUT0 ! Logical unit number for output-listing -INTEGER :: IRESP ! Return code of FM-routines -! -!------------------------------------------------------------------------------- -! -! -!* 1. INIT OUTPUT LISTING, COMPUTE KSPLITR AND KSPLITG -! ------------------------------------------------ -! -! -! Init output listing -CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP) -! -! -! KSPLITR -ZVTRMAX = 30. ! Maximum rain drop fall speed -! -KSPLITR = 1 -SPLITR : DO - ZT = PTSTEP / FLOAT(KSPLITR) - IF ( ZT * ZVTRMAX / PDZMIN < 1.0) EXIT SPLITR - KSPLITR = KSPLITR + 1 -END DO SPLITR -! -! -! KSPLITG -ZVTRMAX = 30. -IF( LHAIL_LIMA ) THEN - ZVTRMAX = 60. ! Hail case -END IF -! -KSPLITG = 1 -SPLITG : DO - ZT = 2.* PTSTEP / FLOAT(KSPLITG) - IF ( ZT * ZVTRMAX / PDZMIN .LT. 1.) EXIT SPLITG - KSPLITG = KSPLITG + 1 -END DO SPLITG -! -! -! -IF (ALLOCATED(XRTMIN)) RETURN ! In case of nesting microphysics, constants of - ! MODD_RAIN_C2R2_PARAM are computed only once. -! -! -! Set bounds for mixing ratios and concentrations -ALLOCATE( XRTMIN(7) ) -XRTMIN(1) = 1.0E-20 ! rv -XRTMIN(2) = 1.0E-20 ! rc -!XRTMIN(3) = 1.0E-20 ! rr -XRTMIN(3) = 1.0E-17 ! rr -XRTMIN(4) = 1.0E-20 ! ri -XRTMIN(5) = 1.0E-15 ! rs -XRTMIN(6) = 1.0E-15 ! rg -XRTMIN(7) = 1.0E-15 ! rh -ALLOCATE( XCTMIN(7) ) -XCTMIN(1) = 1.0 ! Not used -XCTMIN(2) = 1.0E+4 ! Nc -!XCTMIN(3) = 1.0E+1 ! Nr -XCTMIN(3) = 1.0E-3 ! Nr -XCTMIN(4) = 1.0E-3 ! Ni -XCTMIN(5) = 1.0E-3 ! Not used -XCTMIN(6) = 1.0E-3 ! Not used -XCTMIN(7) = 1.0E-3 ! Not used -! -! -! Air density fall speed correction -XCEXVT = 0.4 -! -!------------------------------------------------------------------------------ -! -! -! -!* 2. DEFINE SPECIES CHARACTERISTICS AND PROCESSES CONSTANTS -! ------------------------------------------------------ -! -! -CALL INI_LIMA_WARM(KULOUT, PTSTEP, PDZMIN) -! -CALL INI_LIMA_COLD_MIXED(KULOUT, PTSTEP, PDZMIN) -! -!------------------------------------------------------------------------------ -! -END SUBROUTINE INI_LIMA diff --git a/src/arome/micro/ini_lima_cold_mixed.F90 b/src/arome/micro/ini_lima_cold_mixed.F90 deleted file mode 100644 index ba7e13302bb01192a51c354235b9e9d6e45648d4..0000000000000000000000000000000000000000 --- a/src/arome/micro/ini_lima_cold_mixed.F90 +++ /dev/null @@ -1,1309 +0,0 @@ -! ############################### - MODULE MODI_INI_LIMA_COLD_MIXED -! ############################### -! -INTERFACE - SUBROUTINE INI_LIMA_COLD_MIXED (KULOUT, PTSTEP, PDZMIN) -! -INTEGER, INTENT(IN) :: KULOUT ! output logical unit number -REAL, INTENT(IN) :: PTSTEP ! Effective Time step -REAL, INTENT(IN) :: PDZMIN ! minimun vertical mesh size -! -END SUBROUTINE INI_LIMA_COLD_MIXED -! -END INTERFACE -! -END MODULE MODI_INI_LIMA_COLD_MIXED -! ############################################### - SUBROUTINE INI_LIMA_COLD_MIXED (KULOUT, PTSTEP, PDZMIN) -! ############################################### -! -!! PURPOSE -!! ------- -!! The purpose of this routine is to initialize the constants used in the -!! microphysical scheme LIMA for the cold and mixed phase variables -!! and processes. -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST - -USE MODD_PARAM_LIMA -USE MODD_PARAM_LIMA_WARM -USE MODD_PARAM_LIMA_COLD -USE MODD_PARAM_LIMA_MIXED -USE MODD_PARAMETERS -USE MODD_LUNIT -! -USE MODI_LIMA_FUNCTIONS -USE MODI_GAMMA -USE MODI_GAMMA_INC -USE MODE_RRCOLSS, ONLY: RRCOLSS -USE MODE_RZCOLX, ONLY: RZCOLX -USE MODE_RSCOLRG, ONLY: RSCOLRG -USE MODE_READ_XKER_RACCS, ONLY: READ_XKER_RACCS -USE MODE_READ_XKER_SDRYG, ONLY: READ_XKER_SDRYG -USE MODE_READ_XKER_RDRYG, ONLY: READ_XKER_RDRYG -USE MODE_READ_XKER_SWETH, ONLY: READ_XKER_SWETH -USE MODE_READ_XKER_GWETH, ONLY: READ_XKER_GWETH -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -INTEGER, INTENT(IN) :: KULOUT ! output logical unit number -REAL, INTENT(IN) :: PTSTEP ! Effective Time step -REAL, INTENT(IN) :: PDZMIN ! minimun vertical mesh size -! -!* 0.2 Declarations of local variables : -! -INTEGER :: IKB ! Coordinates of the first physical - ! points along z -INTEGER :: J1,J2 ! Internal loop indexes -! -REAL, DIMENSION(8) :: ZGAMI ! parameters involving various moments -REAL, DIMENSION(2) :: ZGAMS ! of the generalized gamma law -! -REAL :: ZT ! Work variable -REAL :: ZVTRMAX ! Raindrop maximal fall velocity -REAL :: ZRHO00 ! Surface reference air density -REAL :: ZRATE ! Geometrical growth of Lbda in the tabulated - ! functions and kernels -REAL :: ZBOUND ! XDCSLIM*Lbda_s: upper bound for the partial - ! integration of the riming rate of the aggregates -REAL :: ZEGS, ZEGR, ZEHS, ZEHG! Bulk collection efficiencies -! -INTEGER :: IND ! Number of interval to integrate the kernels -REAL :: ZESR ! Mean efficiency of rain-aggregate collection -REAL :: ZFDINFTY ! Factor used to define the "infinite" diameter -! -! -LOGICAL :: GFLAG ! Logical flag for printing the constatnts on the output - ! listing -REAL :: ZCONC_MAX ! Maximal concentration for snow -REAL :: ZFACT_NUCL! Amplification factor for the minimal ice concentration -! -INTEGER :: KND -INTEGER :: KACCLBDAS,KACCLBDAR,KDRYLBDAG,KDRYLBDAS,KDRYLBDAR -REAL :: PALPHAR,PALPHAS,PALPHAG,PALPHAH -REAL :: PNUR,PNUS,PNUG,PNUH -REAL :: PBR,PBS,PBG,PBH -REAL :: PCR,PCS,PCG,PCH -REAL :: PDR,PDS,PFVELOS,PDG,PDH -REAL :: PESR,PEGS,PEGR,PEHS,PEHG -REAL :: PFDINFTY -REAL :: PACCLBDAS_MAX,PACCLBDAR_MAX,PACCLBDAS_MIN,PACCLBDAR_MIN -REAL :: PDRYLBDAG_MAX,PDRYLBDAS_MAX,PDRYLBDAG_MIN,PDRYLBDAS_MIN -REAL :: PDRYLBDAR_MAX,PDRYLBDAR_MIN -REAL :: PWETLBDAS_MAX,PWETLBDAG_MAX,PWETLBDAS_MIN,PWETLBDAG_MIN -REAL :: PWETLBDAH_MAX,PWETLBDAH_MIN -INTEGER :: KWETLBDAS,KWETLBDAG,KWETLBDAH -! -REAL :: ZFAC_ZRNIC ! Zrnic factor used to decrease Long Kernels -! -!------------------------------------------------------------------------------- -! -! -!* 1. CHARACTERISTICS OF THE SPECIES -! ------------------------------ -! -! -!* 1.2 Ice crystal characteristics -! -SELECT CASE (CPRISTINE_ICE_LIMA) - CASE('PLAT') - XAI = 0.82 ! Plates - XBI = 2.5 ! Plates - XC_I = 747. ! Plates - XDI = 1.0 ! Plates - XC1I = 1./XPI ! Plates - CASE('COLU') - XAI = 2.14E-3 ! Columns - XBI = 1.7 ! Columns - XC_I = 1.96E5 ! Columns - XDI = 1.585 ! Columns - XC1I = 0.8 ! Columns - CASE('BURO') - XAI = 44.0 ! Bullet rosettes - XBI = 3.0 ! Bullet rosettes - XC_I = 4.E5 ! Bullet rosettes - XDI = 1.663 ! Bullet rosettes - XC1I = 0.5 ! Bullet rosettes -END SELECT -! -! Note that XCCI=N_i (a locally predicted value) and XCXI=0.0, implicitly -! -XF0I = 1.00 -! Correction BVIE XF2I from Pruppacher 1997 eq 13-88 -!XF2I = 0.103 -XF2I = 0.14 -XF0IS = 0.86 -XF1IS = 0.28 -! -!* 1.3 Snowflakes/aggregates characteristics -! -XAS = 0.02 -XBS = 1.9 -XCS = 5. -XDS = 0.27 -! -XCCS = 5.0 -XCXS = 1.0 -! -XF0S = 0.86 -XF1S = 0.28 -! -XC1S = 1./XPI -! -!* 1.4 Graupel characteristics -! -XAG = 19.6 ! Lump graupel case -XBG = 2.8 ! Lump graupel case -XCG = 122. ! Lump graupel case -XDG = 0.66 ! Lump graupel case -! -XCCG = 5.E5 -XCXG = -0.5 -! XCCG = 4.E4 ! Test of Ziegler (1988) -! XCXG = -1.0 ! Test of Ziegler (1988) -! -XF0G = 0.86 -XF1G = 0.28 -! -XC1G = 1./2. -! -!* 2.5 Hailstone characteristics -! -! -XAH = 470. -XBH = 3.0 -XCH = 201. -XDH = 0.64 -! -!XCCH = 5.E-4 -!XCXH = 2.0 -!!!!!!!!!!!! - XCCH = 4.E4 ! Test of Ziegler (1988) - XCXH = -1.0 ! Test of Ziegler (1988) -!!! XCCH = 5.E5 ! Graupel_like -!!! XCXH = -0.5 ! Graupel_like -!!!!!!!!!!!! -! -XF0H = 0.86 -XF1H = 0.28 -! -XC1H = 1./2. -! -!------------------------------------------------------------------------------- -! -! -!* 2. DIMENSIONAL DISTRIBUTIONS OF THE SPECIES -! ---------------------------------------- -! -! -!* 2.1 Ice, snow, graupel and hail distribution -! -! -XALPHAI = 3.0 ! Gamma law for the ice crystal volume -XNUI = 3.0 ! Gamma law with little dispersion -! -XALPHAS = 1.0 ! Exponential law -XNUS = 1.0 ! Exponential law -! -XALPHAG = 1.0 ! Exponential law -XNUG = 1.0 ! Exponential law -! -XALPHAH = 1.0 ! Gamma law -XNUH = 8.0 ! Gamma law with little dispersion -! -!* 2.2 Constants for shape parameter -! -XLBEXI = 1.0/XBI -XLBI = XAI*MOMG(XALPHAI,XNUI,XBI) -! -XLBEXS = 1.0/(XCXS-XBS) -XLBS = ( XAS*XCCS*MOMG(XALPHAS,XNUS,XBS) )**(-XLBEXS) -! -XLBEXG = 1.0/(XCXG-XBG) -XLBG = ( XAG*XCCG*MOMG(XALPHAG,XNUG,XBG))**(-XLBEXG) -! -XLBEXH = 1.0/(XCXH-XBH) -XLBH = ( XAH*XCCH*MOMG(XALPHAH,XNUH,XBH) )**(-XLBEXH) -! -GFLAG = .TRUE. -IF (GFLAG) THEN - WRITE(UNIT=KULOUT,FMT='(" Shape Parameters")') - WRITE(UNIT=KULOUT,FMT='(" XLBEXI =",E13.6," XLBI =",E13.6)') XLBEXI,XLBI - WRITE(UNIT=KULOUT,FMT='(" XLBEXS =",E13.6," XLBS =",E13.6)') XLBEXS,XLBS - WRITE(UNIT=KULOUT,FMT='(" XLBEXG =",E13.6," XLBG =",E13.6)') XLBEXG,XLBG - WRITE(UNIT=KULOUT,FMT='(" XLBEXH =",E13.6," XLBH =",E13.6)') XLBEXH,XLBH -END IF -! -XLBDAS_MAX = 100000.0 -XLBDAG_MAX = 100000.0 -! -ZCONC_MAX = 1.E6 ! Maximal concentration for falling particules set to 1 per cc -XLBDAS_MAX = ( ZCONC_MAX/XCCS )**(1./XCXS) -! -!------------------------------------------------------------------------------- -! -! -!* 3. CONSTANTS FOR THE SEDIMENTATION -! ------------------------------- -! -! -!* 3.1 Exponent of the fall-speed air density correction -! -IKB = 1 + JPVEXT -! Correction -! ZRHO00 = XP00/(XRD*XTHVREFZ(IKB)) -ZRHO00 = 1.2041 ! at P=1013.25hPa and T=20°C -! -!* 3.2 Constants for sedimentation -! -!! XEXRSEDI = (XBI+XDI)/XBI -!! XEXCSEDI = 1.0-XEXRSEDI -!! XFSEDI = (4.*XPI*900.)**(-XEXCSEDI) * & -!! XC_I*XAI*MOMG(XALPHAI,XNUI,XBI+XDI) * & -!! ((XAI*MOMG(XALPHAI,XNUI,XBI)))**(-XEXRSEDI) * & -!! (ZRHO00)**XCEXVT -!! ! -!! ! Computations made for Columns -!! ! -!! XEXRSEDI = 1.9324 -!! XEXCSEDI =-0.9324 -!! XFSEDI = 3.89745E11*MOMG(XALPHAI,XNUI,3.285)* & -!! MOMG(XALPHAI,XNUI,1.7)**(-XEXRSEDI)*(ZRHO00)**XCEXVT -!! XEXCSEDI =-0.9324*3.0 -!! WRITE (KULOUT,FMT=*)' PRISTINE ICE SEDIMENTATION for columns XFSEDI=',XFSEDI -! -! -XFSEDRI = XC_I*GAMMA_X0D(XNUI+(XDI+XBI)/XALPHAI)/GAMMA_X0D(XNUI+XBI/XALPHAI)* & - (ZRHO00)**XCEXVT -XFSEDCI = XC_I*GAMMA_X0D(XNUI+XDI/XALPHAI)/GAMMA_X0D(XNUI)* & - (ZRHO00)**XCEXVT -! -XEXSEDS = (XBS+XDS-XCXS)/(XBS-XCXS) -XFSEDS = XCS*XAS*XCCS*MOMG(XALPHAS,XNUS,XBS+XDS)* & - (XAS*XCCS*MOMG(XALPHAS,XNUS,XBS))**(-XEXSEDS)*(ZRHO00)**XCEXVT -! -XEXSEDG = (XBG+XDG-XCXG)/(XBG-XCXG) -XFSEDG = XCG*XAG*XCCG*MOMG(XALPHAG,XNUG,XBG+XDG)* & - (XAG*XCCG*MOMG(XALPHAG,XNUG,XBG))**(-XEXSEDG)*(ZRHO00)**XCEXVT -! -XEXSEDH = (XBH+XDH-XCXH)/(XBH-XCXH) -XFSEDH = XCH*XAH*XCCH*MOMG(XALPHAH,XNUH,XBH+XDH)* & - (XAH*XCCH*MOMG(XALPHAH,XNUH,XBH))**(-XEXSEDH)*(ZRHO00)**XCEXVT -! -!------------------------------------------------------------------------------- -! -! -!* 4. CONSTANTS FOR HETEROGENEOUS NUCLEATION -! -------------------------------------- -! -! -! *************** -!* 4.1 LIMA_NUCLEATION -! *************** -!* 4.1.1 Constants for the computation of the number concentration -! of active IN -! -XRHO_CFDC = 0.76 -! -XGAMMA = 2. -! -IF (NPHILLIPS == 13) THEN - XAREA1(1) = 2.0E-6 !DM1 - XAREA1(2) = XAREA1(1) !DM2 - XAREA1(3) = 1.0E-7 !BC - XAREA1(4) = 8.9E-7 !BIO -ELSE IF (NPHILLIPS == 8) THEN - XAREA1(1) = 2.0E-6 !DM1 - XAREA1(2) = XAREA1(1) !DM2 - XAREA1(3) = 2.7E-7 !BC - XAREA1(4) = 9.1E-7 !BIO -ELSE - print *, "NPHILLIPS n'est pas égal à 8 ou 13" - STOP -END IF -! -!* 4.1.2 Constants for the computation of H_X (the fraction-redu- -! cing IN activity at low S_i and warm T) for X={DM1,DM2,BC,BIO} -! -! -IF (NPHILLIPS == 13) THEN - XDT0(1) = 5. +273.15 !DM1 - XDT0(2) = 5. +273.15 !DM2 - XDT0(3) = 10. +273.15 !BC - XDT0(4) = 5. +273.15 !BIOO -! - XT0(1) = -40. +273.15 !DM1 - XT0(2) = XT0(1) !DM2 - XT0(3) = -50. +273.15 !BC - XT0(4) = -20. +273.15 !BIO -! - XSW0 = 0.97 -! - XDSI0(1) = 0.1 !DM1 - XDSI0(2) = 0.1 !DM2 - XDSI0(3) = 0.1 !BC - XDSI0(4) = 0.2 !BIO -! - XH(1) = 0.15 !DM1 - XH(2) = 0.15 !DM2 - XH(3) = 0. !BC - XH(4) = 0. !O -! - XTX1(1) = -30. +273.15 !DM1 - XTX1(2) = XTX1(1) !DM2 - XTX1(3) = -25. +273.15 !BC - XTX1(4) = -5. +273.15 !BIO -! - XTX2(1) = -10. +273.15 !DM1 - XTX2(2) = XTX2(1) !DM2 - XTX2(3) = -15. +273.15 !BC - XTX2(4) = -2. +273.15 !BIO -ELSE IF (NPHILLIPS == 8) THEN - XDT0(1) = 5. +273.15 !DM1 - XDT0(2) = 5. +273.15 !DM2 - XDT0(3) = 5. +273.15 !BC - XDT0(4) = 5. +273.15 !O -! - XT0(1) = -40. +273.15 !DM1 - XT0(2) = XT0(1) !DM2 - XT0(3) = -50. +273.15 !BC - XT0(4) = -50. +273.15 !BIO -! - XSW0 = 0.97 -! - XDSI0(1) = 0.1 !DM1 - XDSI0(2) = 0.1 !DM2 - XDSI0(3) = 0.1 !BC - XDSI0(4) = 0.1 !BIO -! - XH(1) = 0.15 !DM1 - XH(2) = 0.15 !DM2 - XH(3) = 0. !BC - XH(4) = 0. !O -! - XTX1(1) = -5. +273.15 !DM1 - XTX1(2) = XTX1(1) !DM2 - XTX1(3) = -5. +273.15 !BC - XTX1(4) = -5. +273.15 !BIO -! - XTX2(1) = -2. +273.15 !DM1 - XTX2(2) = XTX2(1) !DM2 - XTX2(3) = -2. +273.15 !BC - XTX2(4) = -2. +273.15 !BIO -END IF -! -!* 4.1.3 Constants for the computation of the Gauss Hermitte -! quadrature method used for the integration of the total -! crystal number over T>-35°C -! -NDIAM = 70 -! -ALLOCATE(XABSCISS(NDIAM)) -ALLOCATE(XWEIGHT (NDIAM)) -! -CALL GAUHER(XABSCISS, XWEIGHT, NDIAM) -! -! ***************** -!* 4.2 MEYERS NUCLEATION -! ***************** -! -ZFACT_NUCL = 1.0 ! Plates, Columns and Bullet rosettes -! -!* 5.2.1 Constants for nucleation from ice nuclei -! -XNUC_DEP = XFACTNUC_DEP*1000.*ZFACT_NUCL -XEXSI_DEP = 12.96E-2 -XEX_DEP = -0.639 -! -XNUC_CON = XFACTNUC_CON*1000.*ZFACT_NUCL -XEXTT_CON = -0.262 -XEX_CON = -2.8 -! -XMNU0 = 6.88E-13 -! -IF (LMEYERS_LIMA) THEN - WRITE(UNIT=KULOUT,FMT='(" Heterogeneous nucleation")') - WRITE(UNIT=KULOUT,FMT='(" XNUC_DEP=",E13.6," XEXSI=",E13.6," XEX=",E13.6)') & - XNUC_DEP,XEXSI_DEP,XEX_DEP - WRITE(UNIT=KULOUT,FMT='(" XNUC_CON=",E13.6," XEXTT=",E13.6," XEX=",E13.6)') & - XNUC_CON,XEXTT_CON,XEX_CON - WRITE(UNIT=KULOUT,FMT='(" mass of embryo XMNU0=",E13.6)') XMNU0 -END IF -! -!------------------------------------------------------------------------------- -! -! -!* 5. CONSTANTS FOR THE SLOW COLD PROCESSES -! ------------------------------------- -! -! -!* 5.1.2 Constants for homogeneous nucleation from haze particules -! -XRHOI_HONH = 925.0 -XCEXP_DIFVAP_HONH = 1.94 -XCOEF_DIFVAP_HONH = (2.0*XPI)*0.211E-4*XP00/XTT**XCEXP_DIFVAP_HONH -XCRITSAT1_HONH = 2.583 -XCRITSAT2_HONH = 207.83 -XTMIN_HONH = 180.0 -XTMAX_HONH = 240.0 -XDLNJODT1_HONH = 4.37 -XDLNJODT2_HONH = 0.03 -XC1_HONH = 100.0 -XC2_HONH = 22.6 -XC3_HONH = 0.1 -XRCOEF_HONH = (XPI/6.0)*XRHOI_HONH -! -! -!* 5.1.3 Constants for homogeneous nucleation from cloud droplets -! -XTEXP1_HONC = -606.3952*LOG(10.0) -XTEXP2_HONC = -52.6611*LOG(10.0) -XTEXP3_HONC = -1.7439*LOG(10.0) -XTEXP4_HONC = -0.0265*LOG(10.0) -XTEXP5_HONC = -1.536E-4*LOG(10.0) -IF (XALPHAC == 3.0) THEN - XC_HONC = XPI/6.0 - XR_HONC = XPI/6.0 -ELSE - WRITE(UNIT=KULOUT,FMT='(" Homogeneous nucleation")') - WRITE(UNIT=KULOUT,FMT='(" XALPHAC=",E13.6," IS NOT 3.0")') XALPHAC - WRITE(UNIT=KULOUT,FMT='(" No algorithm yet developped in this case !")') - STOP -END IF -! -GFLAG = .TRUE. -IF (GFLAG) THEN - WRITE(UNIT=KULOUT,FMT='(" Homogeneous nucleation")') - WRITE(UNIT=KULOUT,FMT='(" XTEXP1_HONC=",E13.6)') XTEXP1_HONC - WRITE(UNIT=KULOUT,FMT='(" XTEXP2_HONC=",E13.6)') XTEXP2_HONC - WRITE(UNIT=KULOUT,FMT='(" XTEXP3_HONC=",E13.6)') XTEXP3_HONC - WRITE(UNIT=KULOUT,FMT='(" XTEXP4_HONC=",E13.6)') XTEXP4_HONC - WRITE(UNIT=KULOUT,FMT='(" XTEXP5_HONC=",E13.6)') XTEXP5_HONC - WRITE(UNIT=KULOUT,FMT='("XC_HONC=",E13.6," XR_HONC=",E13.6)') XC_HONC,XR_HONC -END IF -! -! -!* 5.2 Constants for vapor deposition on ice -! -XSCFAC = (0.63**(1./3.))*SQRT((ZRHO00)**XCEXVT) ! One assumes Sc=0.63 -! -X0DEPI = (4.0*XPI)*XC1I*XF0I*MOMG(XALPHAI,XNUI,1.) -X2DEPI = (4.0*XPI)*XC1I*XF2I*XC_I*MOMG(XALPHAI,XNUI,XDI+2.0) -! -! Harrington parameterization for ice to snow conversion -! -XDICNVS_LIM = 125.E-6 ! size in microns -XLBDAICNVS_LIM = (50.0**(1.0/(XALPHAI)))/XDICNVS_LIM ! ZLBDAI Limitation -XC0DEPIS = ((4.0*XPI)/(XAI*XBI))*XC1I*XF0IS* & - (XALPHAI/GAMMA_X0D(XNUI))*XDICNVS_LIM**(1.0-XBI) -XC1DEPIS = ((4.0*XPI)/(XAI*XBI))*XC1I*XF1IS*SQRT(XC_I)* & - (XALPHAI/GAMMA_X0D(XNUI))*XDICNVS_LIM**(1.0-XBI+(XDI+1.0)/2.0) -XR0DEPIS = XC0DEPIS *(XAI*XDICNVS_LIM**XBI) -XR1DEPIS = XC1DEPIS *(XAI*XDICNVS_LIM**XBI) -! -! Harrington parameterization for snow to ice conversion -! -XLBDASCNVI_MAX = 6000. ! lbdas max after Field (1999) -! -XDSCNVI_LIM = 125.E-6 ! size in microns -XLBDASCNVI_LIM = (50.0**(1.0/(XALPHAS)))/XDSCNVI_LIM ! ZLBDAS Limitation -XC0DEPSI = ((4.0*XPI)/(XAS*XBS))*XC1S*XF0IS* & - (XALPHAS/GAMMA_X0D(XNUS))*XDSCNVI_LIM**(1.0-XBS) -XC1DEPSI = ((4.0*XPI)/(XAS*XBS))*XC1S*XF1IS*SQRT(XCS)* & - (XALPHAS/GAMMA_X0D(XNUS))*XDSCNVI_LIM**(1.0-XBS+(XDS+1.0)/2.0) -XR0DEPSI = XC0DEPSI *(XAS*XDSCNVI_LIM**XBS) -XR1DEPSI = XC1DEPSI *(XAS*XDSCNVI_LIM**XBS) -! -! Vapor deposition on snow and graupel and hail -! -X0DEPS = (4.0*XPI)*XCCS*XC1S*XF0S*MOMG(XALPHAS,XNUS,1.) -X1DEPS = (4.0*XPI)*XCCS*XC1S*XF1S*SQRT(XCS)*MOMG(XALPHAS,XNUS,0.5*XDS+1.5) -XEX0DEPS = XCXS-1.0 -XEX1DEPS = XCXS-0.5*(XDS+3.0) -! -X0DEPG = (4.0*XPI)*XCCG*XC1G*XF0G*MOMG(XALPHAG,XNUG,1.) -X1DEPG = (4.0*XPI)*XCCG*XC1G*XF1G*SQRT(XCG)*MOMG(XALPHAG,XNUG,0.5*XDG+1.5) -XEX0DEPG = XCXG-1.0 -XEX1DEPG = XCXG-0.5*(XDG+3.0) -! -X0DEPH = (4.0*XPI)*XCCH*XC1H*XF0H*MOMG(XALPHAH,XNUH,1.) -X1DEPH = (4.0*XPI)*XCCH*XC1H*XF1H*SQRT(XCH)*MOMG(XALPHAH,XNUH,0.5*XDH+1.5) -XEX0DEPH = XCXH-1.0 -XEX1DEPH = XCXH-0.5*(XDH+3.0) -! -!------------------------------------------------------------------------------- -! -! -!* 6. CONSTANTS FOR THE COALESCENCE PROCESSES -! --------------------------------------- -! -! -!* 6.0 Precalculation of the gamma function momentum -! -ZGAMI(1) = GAMMA_X0D(XNUI) -ZGAMI(2) = MOMG(XALPHAI,XNUI,3.) -ZGAMI(3) = MOMG(XALPHAI,XNUI,6.) -ZGAMI(4) = ZGAMI(3)-ZGAMI(2)**2 ! useful for Sig_I -ZGAMI(5) = MOMG(XALPHAI,XNUI,9.) -ZGAMI(6) = MOMG(XALPHAI,XNUI,3.+XBI) -ZGAMI(7) = MOMG(XALPHAI,XNUI,XBI) -ZGAMI(8) = MOMG(XALPHAI,XNUI,3.)/MOMG(XALPHAI,XNUI,2.) -! -ZGAMS(1) = GAMMA_X0D(XNUS) -ZGAMS(2) = MOMG(XALPHAS,XNUS,3.) -! -! -!* 6.1 Csts for the coalescence processes -! -ZFAC_ZRNIC = 0.1 -XKER_ZRNIC_A1 = 2.59E15*ZFAC_ZRNIC**2! From Long a1=9.44E9 cm-3 - ! so XKERA1= 9.44E9*1E6*(PI/6)**2 -XKER_ZRNIC_A2 = 3.03E3*ZFAC_ZRNIC ! From Long a2=5.78E3 - ! so XKERA2= 5.78E3* (PI/6) -! -! -!* 6.2 Csts for the pristine ice selfcollection process -! -XSELFI = XKER_ZRNIC_A1*ZGAMI(3) -XCOLEXII = 0.025 ! Temperature factor of the I+I collection efficiency -! -! -!* 6.3 Constants for pristine ice autoconversion -! -XTEXAUTI = 0.025 ! Temperature factor of the I+I collection efficiency -! -GFLAG = .TRUE. -IF (GFLAG) THEN - WRITE(UNIT=KULOUT,FMT='(" pristine ice autoconversion")') - WRITE(UNIT=KULOUT,FMT='(" Temp. factor XTEXAUTI=",E13.6)') XTEXAUTI -END IF -! -XAUTO3 = 6.25E18*(ZGAMI(2))**(1./3.)*SQRT(ZGAMI(4)) -XAUTO4 = 0.5E6*(ZGAMI(4))**(1./6.) -XLAUTS = 2.7E-2 -XLAUTS_THRESHOLD = 0.4 -XITAUTS= 0.27 ! (Notice that T2 of BR74 is uncorrect and that 0.27=1./3.7 -XITAUTS_THRESHOLD = 7.5 -! -! -!* 6.4 Constants for snow aggregation -! -XCOLEXIS = 0.05 ! Temperature factor of the I+S collection efficiency -XAGGS_CLARGE1 = XKER_ZRNIC_A2*ZGAMI(2) -XAGGS_CLARGE2 = XKER_ZRNIC_A2*ZGAMS(2) -XAGGS_RLARGE1 = XKER_ZRNIC_A2*ZGAMI(6)*XAI -XAGGS_RLARGE2 = XKER_ZRNIC_A2*ZGAMI(7)*ZGAMS(2)*XAI -! -GFLAG = .TRUE. -IF (GFLAG) THEN - WRITE(UNIT=KULOUT,FMT='(" snow aggregation")') - WRITE(UNIT=KULOUT,FMT='(" Temp. factor XCOLEXIS=",E13.6)') XCOLEXIS -END IF -! -!------------------------------------------------------------------------------- -! -! -!* 7. CONSTANTS FOR THE FAST COLD PROCESSES FOR THE AGGREGATES -! -------------------------------------------------------- -! -! -!* 7.1 Constants for the riming of the aggregates -! -XDCSLIM = 0.007 ! D_cs^lim = 7 mm as suggested by Farley et al. (1989) -XCOLCS = 1.0 -XEXCRIMSS= XCXS-XDS-2.0 -XCRIMSS = (XPI/4.0)*XCOLCS*XCCS*XCS*(ZRHO00**XCEXVT)*MOMG(XALPHAS,XNUS,XDS+2.0) -XEXCRIMSG= XEXCRIMSS -XCRIMSG = XCRIMSS -XSRIMCG = XCCS*XAS*MOMG(XALPHAS,XNUS,XBS) -XEXSRIMCG= XCXS-XBS -! -GFLAG = .TRUE. -IF (GFLAG) THEN - WRITE(UNIT=KULOUT,FMT='(" riming of the aggregates")') - WRITE(UNIT=KULOUT,FMT='(" D_cs^lim (Farley et al.) XDCSLIM=",E13.6)') XDCSLIM - WRITE(UNIT=KULOUT,FMT='(" Coll. efficiency XCOLCS=",E13.6)') XCOLCS -END IF -! -NGAMINC = 80 -XGAMINC_BOUND_MIN = 1.0E-1 ! Minimal value of (Lbda * D_cs^lim)**alpha -XGAMINC_BOUND_MAX = 1.0E7 ! Maximal value of (Lbda * D_cs^lim)**alpha -ZRATE = EXP(LOG(XGAMINC_BOUND_MAX/XGAMINC_BOUND_MIN)/FLOAT(NGAMINC-1)) -! -ALLOCATE( XGAMINC_RIM1(NGAMINC) ) -ALLOCATE( XGAMINC_RIM2(NGAMINC) ) -! -DO J1=1,NGAMINC - ZBOUND = XGAMINC_BOUND_MIN*ZRATE**(J1-1) - XGAMINC_RIM1(J1) = GAMMA_INC(XNUS+(2.0+XDS)/XALPHAS,ZBOUND) - XGAMINC_RIM2(J1) = GAMMA_INC(XNUS+XBS/XALPHAS ,ZBOUND) -END DO -! -XRIMINTP1 = XALPHAS / LOG(ZRATE) -XRIMINTP2 = 1.0 + XRIMINTP1*LOG( XDCSLIM/(XGAMINC_BOUND_MIN)**(1.0/XALPHAS) ) -! -!* 7.1.1 Defining the constants for the Hallett-Mossop -! secondary ice nucleation process -! -XHMTMIN = XTT - 8.0 -XHMTMAX = XTT - 3.0 -XHM1 = 9.3E-3 ! Obsolete parameterization -XHM2 = 1.5E-3/LOG(10.0) ! from Ferrier (1995) -XHM_YIELD = 5.E-3 ! A splinter is produced after the riming of 200 droplets -XHM_COLLCS= 1.0 ! Collision efficiency snow/droplet (with Dc>25 microns) -XHM_FACTS = XHM_YIELD*(XHM_COLLCS/XCOLCS) -! -! Notice: One magnitude of lambda discretized over 10 points for the droplets -! -XGAMINC_HMC_BOUND_MIN = 1.0E-3 ! Min value of (Lbda * (12,25) microns)**alpha -XGAMINC_HMC_BOUND_MAX = 1.0E5 ! Max value of (Lbda * (12,25) microns)**alpha -ZRATE = EXP(LOG(XGAMINC_HMC_BOUND_MAX/XGAMINC_HMC_BOUND_MIN)/FLOAT(NGAMINC-1)) -! -ALLOCATE( XGAMINC_HMC(NGAMINC) ) -! -DO J1=1,NGAMINC - ZBOUND = XGAMINC_HMC_BOUND_MIN*ZRATE**(J1-1) - XGAMINC_HMC(J1) = GAMMA_INC(XNUC,ZBOUND) -END DO -! -XHMSINTP1 = XALPHAC / LOG(ZRATE) -XHMSINTP2 = 1.0 + XHMSINTP1*LOG( 12.E-6/(XGAMINC_HMC_BOUND_MIN)**(1.0/XALPHAC) ) -XHMLINTP1 = XALPHAC / LOG(ZRATE) -XHMLINTP2 = 1.0 + XHMLINTP1*LOG( 25.E-6/(XGAMINC_HMC_BOUND_MIN)**(1.0/XALPHAC) ) -! -! -!* 7.2 Constants for the accretion of raindrops onto aggregates -! -XFRACCSS = ((XPI**2)/24.0)*XCCS*XRHOLW*(ZRHO00**XCEXVT) -! -XLBRACCS1 = MOMG(XALPHAS,XNUS,2.)*MOMG(XALPHAR,XNUR,3.) -XLBRACCS2 = 2.*MOMG(XALPHAS,XNUS,1.)*MOMG(XALPHAR,XNUR,4.) -XLBRACCS3 = MOMG(XALPHAR,XNUR,5.) -! -XFSACCRG = (XPI/4.0)*XAS*XCCS*(ZRHO00**XCEXVT) -! -XLBSACCR1 = MOMG(XALPHAR,XNUR,2.)*MOMG(XALPHAS,XNUS,XBS) -XLBSACCR2 = 2.*MOMG(XALPHAR,XNUR,1.)*MOMG(XALPHAS,XNUS,XBS+1.) -XLBSACCR3 = MOMG(XALPHAS,XNUS,XBS+2.) -! -!* 7.2.1 Defining the ranges for the computation of the kernels -! -! Notice: One magnitude of lambda discretized over 10 points for rain -! Notice: One magnitude of lambda discretized over 10 points for snow -! -NACCLBDAS = 40 -XACCLBDAS_MIN = 5.0E1 ! Minimal value of Lbda_s to tabulate XKER_RACCS -XACCLBDAS_MAX = 5.0E5 ! Maximal value of Lbda_s to tabulate XKER_RACCS -ZRATE = LOG(XACCLBDAS_MAX/XACCLBDAS_MIN)/FLOAT(NACCLBDAS-1) -XACCINTP1S = 1.0 / ZRATE -XACCINTP2S = 1.0 - LOG( XACCLBDAS_MIN ) / ZRATE -NACCLBDAR = 40 -XACCLBDAR_MIN = 1.0E3 ! Minimal value of Lbda_r to tabulate XKER_RACCS -XACCLBDAR_MAX = 1.0E7 ! Maximal value of Lbda_r to tabulate XKER_RACCS -ZRATE = LOG(XACCLBDAR_MAX/XACCLBDAR_MIN)/FLOAT(NACCLBDAR-1) -XACCINTP1R = 1.0 / ZRATE -XACCINTP2R = 1.0 - LOG( XACCLBDAR_MIN ) / ZRATE -! -!* 7.2.2 Computations of the tabulated normalized kernels -! -IND = 50 ! Interval number, collection efficiency and infinite diameter -ZESR = 1.0 ! factor used to integrate the dimensional distributions when -ZFDINFTY = 20.0 ! computing the kernels XKER_RACCSS, XKER_RACCS and XKER_SACCRG -! -ALLOCATE( XKER_RACCSS(NACCLBDAS,NACCLBDAR) ) -ALLOCATE( XKER_RACCS (NACCLBDAS,NACCLBDAR) ) -ALLOCATE( XKER_SACCRG(NACCLBDAR,NACCLBDAS) ) -! -CALL READ_XKER_RACCS (KACCLBDAS,KACCLBDAR,KND, & - PALPHAS,PNUS,PALPHAR,PNUR,PESR,PBS,PBR,PCS,PDS,PFVELOS,PCR,PDR, & - PACCLBDAS_MAX,PACCLBDAR_MAX,PACCLBDAS_MIN,PACCLBDAR_MIN,& - PFDINFTY ) -IF( (KACCLBDAS/=NACCLBDAS) .OR. (KACCLBDAR/=NACCLBDAR) .OR. (KND/=IND) .OR. & - (PALPHAS/=XALPHAS) .OR. (PNUS/=XNUS) .OR. & - (PALPHAR/=XALPHAR) .OR. (PNUR/=XNUR) .OR. & - (PESR/=ZESR) .OR. (PBS/=XBS) .OR. (PBR/=XBR) .OR. & - (PCS/=XCS) .OR. (PDS/=XDS) .OR. (PCR/=XCR) .OR. (PDR/=XDR) .OR. & - (PACCLBDAS_MAX/=XACCLBDAS_MAX) .OR. (PACCLBDAR_MAX/=XACCLBDAR_MAX) .OR. & - (PACCLBDAS_MIN/=XACCLBDAS_MIN) .OR. (PACCLBDAR_MIN/=XACCLBDAR_MIN) .OR. & - (PFDINFTY/=ZFDINFTY) ) THEN - CALL RRCOLSS ( IND, XALPHAS, XNUS, XALPHAR, XNUR, & - ZESR, XBR, XCS, XDS, PFVELOS, XCR, XDR, & - XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, & - ZFDINFTY, XKER_RACCSS, XAG, XBS, XAS ) - CALL RZCOLX ( IND, XALPHAS, XNUS, XALPHAR, XNUR, & - ZESR, XBR, XCS, XDS, PFVELOS, XCR, XDR, 0., & - XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, & - ZFDINFTY, XKER_RACCS ) - CALL RSCOLRG ( IND, XALPHAS, XNUS, XALPHAR, XNUR, & - ZESR, XBS, XCS, XDS, PFVELOS, XCR, XDR, & - XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, & - ZFDINFTY, XKER_SACCRG,XAG, XBS, XAS ) - WRITE(UNIT=KULOUT,FMT='("*****************************************")') - WRITE(UNIT=KULOUT,FMT='("**** UPDATE NEW SET OF RACSS KERNELS ****")') - WRITE(UNIT=KULOUT,FMT='("**** UPDATE NEW SET OF RACS KERNELS ****")') - WRITE(UNIT=KULOUT,FMT='("**** UPDATE NEW SET OF SACRG KERNELS ****")') - WRITE(UNIT=KULOUT,FMT='("*****************************************")') - WRITE(UNIT=KULOUT,FMT='("!")') - WRITE(UNIT=KULOUT,FMT='("KND=",I3)') IND - WRITE(UNIT=KULOUT,FMT='("KACCLBDAS=",I3)') NACCLBDAS - WRITE(UNIT=KULOUT,FMT='("KACCLBDAR=",I3)') NACCLBDAR - WRITE(UNIT=KULOUT,FMT='("PALPHAS=",E13.6)') XALPHAS - WRITE(UNIT=KULOUT,FMT='("PNUS=",E13.6)') XNUS - WRITE(UNIT=KULOUT,FMT='("PALPHAR=",E13.6)') XALPHAR - WRITE(UNIT=KULOUT,FMT='("PNUR=",E13.6)') XNUR - WRITE(UNIT=KULOUT,FMT='("PESR=",E13.6)') ZESR - WRITE(UNIT=KULOUT,FMT='("PBS=",E13.6)') XBS - WRITE(UNIT=KULOUT,FMT='("PBR=",E13.6)') XBR - WRITE(UNIT=KULOUT,FMT='("PCS=",E13.6)') XCS - WRITE(UNIT=KULOUT,FMT='("PDS=",E13.6)') XDS - WRITE(UNIT=KULOUT,FMT='("PCR=",E13.6)') XCR - WRITE(UNIT=KULOUT,FMT='("PDR=",E13.6)') XDR - WRITE(UNIT=KULOUT,FMT='("PACCLBDAS_MAX=",E13.6)') & - XACCLBDAS_MAX - WRITE(UNIT=KULOUT,FMT='("PACCLBDAR_MAX=",E13.6)') & - XACCLBDAR_MAX - WRITE(UNIT=KULOUT,FMT='("PACCLBDAS_MIN=",E13.6)') & - XACCLBDAS_MIN - WRITE(UNIT=KULOUT,FMT='("PACCLBDAR_MIN=",E13.6)') & - XACCLBDAR_MIN - WRITE(UNIT=KULOUT,FMT='("PFDINFTY=",E13.6)') ZFDINFTY - WRITE(UNIT=KULOUT,FMT='("!")') - WRITE(UNIT=KULOUT,FMT='("IF( PRESENT(PKER_RACCSS) ) THEN")') - DO J1 = 1 , NACCLBDAS - DO J2 = 1 , NACCLBDAR - WRITE(UNIT=KULOUT,FMT='(" PKER_RACCSS(",I3,",",I3,") = ",E13.6)') & - J1,J2,XKER_RACCSS(J1,J2) - END DO - END DO - WRITE(UNIT=KULOUT,FMT='("END IF")') - WRITE(UNIT=KULOUT,FMT='("!")') - WRITE(UNIT=KULOUT,FMT='("IF( PRESENT(PKER_RACCS ) ) THEN")') - DO J1 = 1 , NACCLBDAS - DO J2 = 1 , NACCLBDAR - WRITE(UNIT=KULOUT,FMT='(" PKER_RACCS (",I3,",",I3,") = ",E13.6)') & - J1,J2,XKER_RACCS (J1,J2) - END DO - END DO - WRITE(UNIT=KULOUT,FMT='("END IF")') - WRITE(UNIT=KULOUT,FMT='("!")') - WRITE(UNIT=KULOUT,FMT='("IF( PRESENT(PKER_SACCRG) ) THEN")') - DO J1 = 1 , NACCLBDAR - DO J2 = 1 , NACCLBDAS - WRITE(UNIT=KULOUT,FMT='(" PKER_SACCRG(",I3,",",I3,") = ",E13.6)') & - J1,J2,XKER_SACCRG(J1,J2) - END DO - END DO - WRITE(UNIT=KULOUT,FMT='("END IF")') - ELSE - CALL READ_XKER_RACCS (KACCLBDAS,KACCLBDAR,KND, & - PALPHAS,PNUS,PALPHAR,PNUR,PESR,PBS,PBR,PCS,PDS,PFVELOS,PCR,PDR, & - PACCLBDAS_MAX,PACCLBDAR_MAX,PACCLBDAS_MIN,PACCLBDAR_MIN,& - PFDINFTY,XKER_RACCSS,XKER_RACCS,XKER_SACCRG ) - WRITE(UNIT=KULOUT,FMT='(" Read XKER_RACCSS")') - WRITE(UNIT=KULOUT,FMT='(" Read XKER_RACCS ")') - WRITE(UNIT=KULOUT,FMT='(" Read XKER_SACCRG")') -END IF -! -! -!* 7.3 Constant for the conversion-melting rate -! -XFSCVMG = 2.0 -! -GFLAG = .TRUE. -IF (GFLAG) THEN - WRITE(UNIT=KULOUT,FMT='(" conversion-melting of the aggregates")') - WRITE(UNIT=KULOUT,FMT='(" Conv. factor XFSCVMG=",E13.6)') XFSCVMG -END IF -! -!------------------------------------------------------------------------------- -! -! -!* 8. CONSTANTS FOR THE FAST COLD PROCESSES FOR THE GRAUPELN -! -------------------------------------------------------- -! -! -!* 8.1 Constants for the rain contact freezing -! -XCOLIR = 1.0 -! -! values of these coeficients differ from the single-momemt rain_ice case -! -XEXRCFRI = -XDR-5.0 -XRCFRI = ((XPI**2)/24.0)*XRHOLW*XCOLIR*XCR*(ZRHO00**XCEXVT) & - *MOMG(XALPHAR,XNUR,XDR+5.0) -XEXICFRR = -XDR-2.0 -XICFRR = (XPI/4.0)*XCOLIR*XCR*(ZRHO00**XCEXVT) & - *MOMG(XALPHAR,XNUR,XDR+2.0) -! -GFLAG = .TRUE. -IF (GFLAG) THEN - WRITE(UNIT=KULOUT,FMT='(" rain contact freezing")') - WRITE(UNIT=KULOUT,FMT='(" Coll. efficiency XCOLIR=",E13.6)') XCOLIR -END IF -! -! -!* 8.2 Constants for the dry growth of the graupeln -! -!* 8.2.1 Constants for the cloud droplet collection by the graupeln -! and for the Hallett-Mossop process -! -XCOLCG = 0.6 ! Estimated from Cober and List (1993) -XFCDRYG = (XPI/4.0)*XCOLCG*XCCG*XCG*(ZRHO00**XCEXVT)*MOMG(XALPHAG,XNUG,XDG+2.0) -! -XHM_COLLCG= 0.9 ! Collision efficiency graupel/droplet (with Dc>25 microns) -XHM_FACTG = XHM_YIELD*(XHM_COLLCG/XCOLCG) -! -!* 8.2.2 Constants for the cloud ice collection by the graupeln -! -XCOLIG = 0.25 ! Collection efficiency of I+G -XCOLEXIG = 0.05 ! Temperature factor of the I+G collection efficiency -XCOLIG = 0.01 ! Collection efficiency of I+G -XCOLEXIG = 0.1 ! Temperature factor of the I+G collection efficiency -WRITE (KULOUT, FMT=*) ' NEW Constants for the cloud ice collection by the graupeln' -WRITE (KULOUT, FMT=*) ' XCOLIG, XCOLEXIG = ',XCOLIG,XCOLEXIG -XFIDRYG = (XPI/4.0)*XCOLIG*XCCG*XCG*(ZRHO00**XCEXVT)*MOMG(XALPHAG,XNUG,XDG+2.0) -! -GFLAG = .TRUE. -IF (GFLAG) THEN - WRITE(UNIT=KULOUT,FMT='(" cloud ice collection by the graupeln")') - WRITE(UNIT=KULOUT,FMT='(" Coll. efficiency XCOLIG=",E13.6)') XCOLIG - WRITE(UNIT=KULOUT,FMT='(" Temp. factor XCOLEXIG=",E13.6)') XCOLEXIG -END IF -! -!* 8.2.3 Constants for the aggregate collection by the graupeln -! -XCOLSG = 0.25 ! Collection efficiency of S+G -XCOLEXSG = 0.05 ! Temperature factor of the S+G collection efficiency -XCOLSG = 0.01 ! Collection efficiency of S+G -XCOLEXSG = 0.1 ! Temperature factor of the S+G collection efficiency -WRITE (KULOUT, FMT=*) ' NEW Constants for the aggregate collection by the graupeln' -WRITE (KULOUT, FMT=*) ' XCOLSG, XCOLEXSG = ',XCOLSG,XCOLEXSG -XFSDRYG = (XPI/4.0)*XCOLSG*XCCG*XCCS*XAS*(ZRHO00**XCEXVT) -! -XLBSDRYG1 = MOMG(XALPHAG,XNUG,2.)*MOMG(XALPHAS,XNUS,XBS) -XLBSDRYG2 = 2.*MOMG(XALPHAG,XNUG,1.)*MOMG(XALPHAS,XNUS,XBS+1.) -XLBSDRYG3 = MOMG(XALPHAS,XNUS,XBS+2.) -! -GFLAG = .TRUE. -IF (GFLAG) THEN - WRITE(UNIT=KULOUT,FMT='(" aggregate collection by the graupeln")') - WRITE(UNIT=KULOUT,FMT='(" Coll. efficiency XCOLSG=",E13.6)') XCOLSG - WRITE(UNIT=KULOUT,FMT='(" Temp. factor XCOLEXSG=",E13.6)') XCOLEXSG -END IF -! -!* 8.2.4 Constants for the raindrop collection by the graupeln -! -XFRDRYG = ((XPI**2)/24.0)*XCCG*XRHOLW*(ZRHO00**XCEXVT) -! -XLBRDRYG1 = MOMG(XALPHAG,XNUG,2.)*MOMG(XALPHAR,XNUR,3.) -XLBRDRYG2 = 2.*MOMG(XALPHAG,XNUG,1.)*MOMG(XALPHAR,XNUR,4.) -XLBRDRYG3 = MOMG(XALPHAR,XNUR,5.) -! -! Notice: One magnitude of lambda discretized over 10 points -! -NDRYLBDAR = 40 -XDRYLBDAR_MIN = 1.0E3 ! Minimal value of Lbda_r to tabulate XKER_RDRYG -XDRYLBDAR_MAX = 1.0E7 ! Maximal value of Lbda_r to tabulate XKER_RDRYG -ZRATE = LOG(XDRYLBDAR_MAX/XDRYLBDAR_MIN)/FLOAT(NDRYLBDAR-1) -XDRYINTP1R = 1.0 / ZRATE -XDRYINTP2R = 1.0 - LOG( XDRYLBDAR_MIN ) / ZRATE -NDRYLBDAS = 80 -XDRYLBDAS_MIN = 2.5E1 ! Minimal value of Lbda_s to tabulate XKER_SDRYG -XDRYLBDAS_MAX = 2.5E9 ! Maximal value of Lbda_s to tabulate XKER_SDRYG -ZRATE = LOG(XDRYLBDAS_MAX/XDRYLBDAS_MIN)/FLOAT(NDRYLBDAS-1) -XDRYINTP1S = 1.0 / ZRATE -XDRYINTP2S = 1.0 - LOG( XDRYLBDAS_MIN ) / ZRATE -NDRYLBDAG = 40 -XDRYLBDAG_MIN = 1.0E3 ! Min value of Lbda_g to tabulate XKER_SDRYG,XKER_RDRYG -XDRYLBDAG_MAX = 1.0E7 ! Max value of Lbda_g to tabulate XKER_SDRYG,XKER_RDRYG -ZRATE = LOG(XDRYLBDAG_MAX/XDRYLBDAG_MIN)/FLOAT(NDRYLBDAG-1) -XDRYINTP1G = 1.0 / ZRATE -XDRYINTP2G = 1.0 - LOG( XDRYLBDAG_MIN ) / ZRATE -! -!* 8.2.5 Computations of the tabulated normalized kernels -! -IND = 50 ! Interval number, collection efficiency and infinite diameter -ZEGS = 1.0 ! factor used to integrate the dimensional distributions when -ZFDINFTY = 20.0 ! computing the kernels XKER_SDRYG -! -ALLOCATE( XKER_SDRYG(NDRYLBDAG,NDRYLBDAS) ) -! -CALL READ_XKER_SDRYG (KDRYLBDAG,KDRYLBDAS,KND, & - PALPHAG,PNUG,PALPHAS,PNUS,PEGS,PBS,PCG,PDG,PCS,PDS,PFVELOS, & - PDRYLBDAG_MAX,PDRYLBDAS_MAX,PDRYLBDAG_MIN,PDRYLBDAS_MIN, & - PFDINFTY ) -IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAS/=NDRYLBDAS) .OR. (KND/=IND) .OR. & - (PALPHAG/=XALPHAG) .OR. (PNUG/=XNUG) .OR. & - (PALPHAS/=XALPHAS) .OR. (PNUS/=XNUS) .OR. & - (PEGS/=ZEGS) .OR. (PBS/=XBS) .OR. & - (PCG/=XCG) .OR. (PDG/=XDG) .OR. (PCS/=XCS) .OR. (PDS/=XDS) .OR. (PFVELOS/=PFVELOS) .OR. & - (PDRYLBDAG_MAX/=XDRYLBDAG_MAX) .OR. (PDRYLBDAS_MAX/=XDRYLBDAS_MAX) .OR. & - (PDRYLBDAG_MIN/=XDRYLBDAG_MIN) .OR. (PDRYLBDAS_MIN/=XDRYLBDAS_MIN) .OR. & - (PFDINFTY/=ZFDINFTY) ) THEN - CALL RZCOLX ( IND, XALPHAG, XNUG, XALPHAS, XNUS, & - ZEGS, XBS, XCG, XDG, 0., XCS, XDS, PFVELOS, & - XDRYLBDAG_MAX, XDRYLBDAS_MAX, XDRYLBDAG_MIN, XDRYLBDAS_MIN, & - ZFDINFTY, XKER_SDRYG ) - WRITE(UNIT=KULOUT,FMT='("*****************************************")') - WRITE(UNIT=KULOUT,FMT='("**** UPDATE NEW SET OF SDRYG KERNELS ****")') - WRITE(UNIT=KULOUT,FMT='("*****************************************")') - WRITE(UNIT=KULOUT,FMT='("!")') - WRITE(UNIT=KULOUT,FMT='("KND=",I3)') IND - WRITE(UNIT=KULOUT,FMT='("KDRYLBDAG=",I3)') NDRYLBDAG - WRITE(UNIT=KULOUT,FMT='("KDRYLBDAS=",I3)') NDRYLBDAS - WRITE(UNIT=KULOUT,FMT='("PALPHAG=",E13.6)') XALPHAG - WRITE(UNIT=KULOUT,FMT='("PNUG=",E13.6)') XNUG - WRITE(UNIT=KULOUT,FMT='("PALPHAS=",E13.6)') XALPHAS - WRITE(UNIT=KULOUT,FMT='("PNUS=",E13.6)') XNUS - WRITE(UNIT=KULOUT,FMT='("PEGS=",E13.6)') ZEGS - WRITE(UNIT=KULOUT,FMT='("PBS=",E13.6)') XBS - WRITE(UNIT=KULOUT,FMT='("PCG=",E13.6)') XCG - WRITE(UNIT=KULOUT,FMT='("PDG=",E13.6)') XDG - WRITE(UNIT=KULOUT,FMT='("PCS=",E13.6)') XCS - WRITE(UNIT=KULOUT,FMT='("PDS=",E13.6)') XDS - WRITE(UNIT=KULOUT,FMT='("PDRYLBDAG_MAX=",E13.6)') & - XDRYLBDAG_MAX - WRITE(UNIT=KULOUT,FMT='("PDRYLBDAS_MAX=",E13.6)') & - XDRYLBDAS_MAX - WRITE(UNIT=KULOUT,FMT='("PDRYLBDAG_MIN=",E13.6)') & - XDRYLBDAG_MIN - WRITE(UNIT=KULOUT,FMT='("PDRYLBDAS_MIN=",E13.6)') & - XDRYLBDAS_MIN - WRITE(UNIT=KULOUT,FMT='("PFDINFTY=",E13.6)') ZFDINFTY - WRITE(UNIT=KULOUT,FMT='("!")') - WRITE(UNIT=KULOUT,FMT='("IF( PRESENT(PKER_SDRYG) ) THEN")') - DO J1 = 1 , NDRYLBDAG - DO J2 = 1 , NDRYLBDAS - WRITE(UNIT=KULOUT,FMT='("PKER_SDRYG(",I3,",",I3,") = ",E13.6)') & - J1,J2,XKER_SDRYG(J1,J2) - END DO - END DO - WRITE(UNIT=KULOUT,FMT='("END IF")') - ELSE - CALL READ_XKER_SDRYG (KDRYLBDAG,KDRYLBDAS,KND, & - PALPHAG,PNUG,PALPHAS,PNUS,PEGS,PBS,PCG,PDG,PCS,PDS,PFVELOS, & - PDRYLBDAG_MAX,PDRYLBDAS_MAX,PDRYLBDAG_MIN,PDRYLBDAS_MIN, & - PFDINFTY,XKER_SDRYG ) - WRITE(UNIT=KULOUT,FMT='(" Read XKER_SDRYG")') -END IF -! -! -IND = 50 ! Number of interval used to integrate the dimensional -ZEGR = 1.0 ! distributions when computing the kernel XKER_RDRYG -ZFDINFTY = 20.0 -! -ALLOCATE( XKER_RDRYG(NDRYLBDAG,NDRYLBDAR) ) -! -CALL READ_XKER_RDRYG (KDRYLBDAG,KDRYLBDAR,KND, & - PALPHAG,PNUG,PALPHAR,PNUR,PEGR,PBR,PCG,PDG,PCR,PDR, & - PDRYLBDAG_MAX,PDRYLBDAR_MAX,PDRYLBDAG_MIN,PDRYLBDAR_MIN, & - PFDINFTY ) -IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAR/=NDRYLBDAR) .OR. (KND/=IND) .OR. & - (PALPHAG/=XALPHAG) .OR. (PNUG/=XNUG) .OR. & - (PALPHAR/=XALPHAR) .OR. (PNUR/=XNUR) .OR. & - (PEGR/=ZEGR) .OR. (PBR/=XBR) .OR. & - (PCG/=XCG) .OR. (PDG/=XDG) .OR. (PCR/=XCR) .OR. (PDR/=XDR) .OR. & - (PDRYLBDAG_MAX/=XDRYLBDAG_MAX) .OR. (PDRYLBDAR_MAX/=XDRYLBDAR_MAX) .OR. & - (PDRYLBDAG_MIN/=XDRYLBDAG_MIN) .OR. (PDRYLBDAR_MIN/=XDRYLBDAR_MIN) .OR. & - (PFDINFTY/=ZFDINFTY) ) THEN - CALL RZCOLX ( IND, XALPHAG, XNUG, XALPHAR, XNUR, & - ZEGR, XBR, XCG, XDG, 0., XCR, XDR, 0., & - XDRYLBDAG_MAX, XDRYLBDAR_MAX, XDRYLBDAG_MIN, XDRYLBDAR_MIN, & - ZFDINFTY, XKER_RDRYG ) - WRITE(UNIT=KULOUT,FMT='("*****************************************")') - WRITE(UNIT=KULOUT,FMT='("**** UPDATE NEW SET OF RDRYG KERNELS ****")') - WRITE(UNIT=KULOUT,FMT='("*****************************************")') - WRITE(UNIT=KULOUT,FMT='("!")') - WRITE(UNIT=KULOUT,FMT='("KND=",I3)') IND - WRITE(UNIT=KULOUT,FMT='("KDRYLBDAG=",I3)') NDRYLBDAG - WRITE(UNIT=KULOUT,FMT='("KDRYLBDAR=",I3)') NDRYLBDAR - WRITE(UNIT=KULOUT,FMT='("PALPHAG=",E13.6)') XALPHAG - WRITE(UNIT=KULOUT,FMT='("PNUG=",E13.6)') XNUG - WRITE(UNIT=KULOUT,FMT='("PALPHAR=",E13.6)') XALPHAR - WRITE(UNIT=KULOUT,FMT='("PNUR=",E13.6)') XNUR - WRITE(UNIT=KULOUT,FMT='("PEGR=",E13.6)') ZEGR - WRITE(UNIT=KULOUT,FMT='("PBR=",E13.6)') XBR - WRITE(UNIT=KULOUT,FMT='("PCG=",E13.6)') XCG - WRITE(UNIT=KULOUT,FMT='("PDG=",E13.6)') XDG - WRITE(UNIT=KULOUT,FMT='("PCR=",E13.6)') XCR - WRITE(UNIT=KULOUT,FMT='("PDR=",E13.6)') XDR - WRITE(UNIT=KULOUT,FMT='("PDRYLBDAG_MAX=",E13.6)') & - XDRYLBDAG_MAX - WRITE(UNIT=KULOUT,FMT='("PDRYLBDAR_MAX=",E13.6)') & - XDRYLBDAR_MAX - WRITE(UNIT=KULOUT,FMT='("PDRYLBDAG_MIN=",E13.6)') & - XDRYLBDAG_MIN - WRITE(UNIT=KULOUT,FMT='("PDRYLBDAR_MIN=",E13.6)') & - XDRYLBDAR_MIN - WRITE(UNIT=KULOUT,FMT='("PFDINFTY=",E13.6)') ZFDINFTY - WRITE(UNIT=KULOUT,FMT='("!")') - WRITE(UNIT=KULOUT,FMT='("IF( PRESENT(PKER_RDRYG) ) THEN")') - DO J1 = 1 , NDRYLBDAG - DO J2 = 1 , NDRYLBDAR - WRITE(UNIT=KULOUT,FMT='("PKER_RDRYG(",I3,",",I3,") = ",E13.6)') & - J1,J2,XKER_RDRYG(J1,J2) - END DO - END DO - WRITE(UNIT=KULOUT,FMT='("END IF")') - ELSE - CALL READ_XKER_RDRYG (KDRYLBDAG,KDRYLBDAR,KND, & - PALPHAG,PNUG,PALPHAR,PNUR,PEGR,PBR,PCG,PDG,PCR,PDR, & - PDRYLBDAG_MAX,PDRYLBDAR_MAX,PDRYLBDAG_MIN,PDRYLBDAR_MIN, & - PFDINFTY,XKER_RDRYG ) - WRITE(UNIT=KULOUT,FMT='(" Read XKER_RDRYG")') -END IF -! -!------------------------------------------------------------------------------- -! -!* 9. CONSTANTS FOR THE FAST COLD PROCESSES FOR THE HAILSTONES -! -------------------------------------------------------- -! -!* 9.2 Constants for the wet growth of the hailstones -! -! -!* 9.2.1 Constant for the cloud droplet and cloud ice collection -! by the hailstones -! -XFWETH = (XPI/4.0)*XCCH*XCH*(ZRHO00**XCEXVT)*MOMG(XALPHAH,XNUH,XDH+2.0) -! -!* 9.2.2 Constants for the aggregate collection by the hailstones -! -XFSWETH = (XPI/4.0)*XCCH*XCCS*XAS*(ZRHO00**XCEXVT) -! -XLBSWETH1 = MOMG(XALPHAH,XNUH,2.)*MOMG(XALPHAS,XNUS,XBS) -XLBSWETH2 = 2.*MOMG(XALPHAH,XNUH,1.)*MOMG(XALPHAS,XNUS,XBS+1.) -XLBSWETH3 = MOMG(XALPHAS,XNUS,XBS+2.) -! -!* 9.2.3 Constants for the graupel collection by the hailstones -! -XFGWETH = (XPI/4.0)*XCCH*XCCG*XAG*(ZRHO00**XCEXVT) -! -XLBGWETH1 = MOMG(XALPHAH,XNUH,2.)*MOMG(XALPHAG,XNUG,XBG) -XLBGWETH2 = 2.*MOMG(XALPHAH,XNUH,1.)*MOMG(XALPHAG,XNUG,XBG+1.) -XLBGWETH3 = MOMG(XALPHAG,XNUG,XBG+2.) -! -! Notice: One magnitude of lambda discretized over 10 points -! -NWETLBDAS = 80 -XWETLBDAS_MIN = 2.5E1 ! Minimal value of Lbda_s to tabulate XKER_SWETH -XWETLBDAS_MAX = 2.5E9 ! Maximal value of Lbda_s to tabulate XKER_SWETH -ZRATE = LOG(XWETLBDAS_MAX/XWETLBDAS_MIN)/FLOAT(NWETLBDAS-1) -XWETINTP1S = 1.0 / ZRATE -XWETINTP2S = 1.0 - LOG( XWETLBDAS_MIN ) / ZRATE -NWETLBDAG = 40 -XWETLBDAG_MIN = 1.0E3 ! Min value of Lbda_g to tabulate XKER_GWETH -XWETLBDAG_MAX = 1.0E7 ! Max value of Lbda_g to tabulate XKER_GWETH -ZRATE = LOG(XWETLBDAG_MAX/XWETLBDAG_MIN)/FLOAT(NWETLBDAG-1) -XWETINTP1G = 1.0 / ZRATE -XWETINTP2G = 1.0 - LOG( XWETLBDAG_MIN ) / ZRATE -NWETLBDAH = 40 -XWETLBDAH_MIN = 1.0E3 ! Min value of Lbda_h to tabulate XKER_SWETH,XKER_GWETH -XWETLBDAH_MAX = 1.0E7 ! Max value of Lbda_h to tabulate XKER_SWETH,XKER_GWETH -ZRATE = LOG(XWETLBDAH_MAX/XWETLBDAH_MIN)/FLOAT(NWETLBDAH-1) -XWETINTP1H = 1.0 / ZRATE -XWETINTP2H = 1.0 - LOG( XWETLBDAH_MIN ) / ZRATE -! -!* 9.2.4 Computations of the tabulated normalized kernels -! -IND = 50 ! Interval number, collection efficiency and infinite diameter -ZEHS = 1.0 ! factor used to integrate the dimensional distributions when -ZFDINFTY = 20.0 ! computing the kernels XKER_SWETH -! -IF( .NOT.ALLOCATED(XKER_SWETH) ) ALLOCATE( XKER_SWETH(NWETLBDAH,NWETLBDAS) ) -! -CALL READ_XKER_SWETH (KWETLBDAH,KWETLBDAS,KND, & - PALPHAH,PNUH,PALPHAS,PNUS,PEHS,PBS,PCH,PDH,PCS,PDS,PFVELOS, & - PWETLBDAH_MAX,PWETLBDAS_MAX,PWETLBDAH_MIN,PWETLBDAS_MIN, & - PFDINFTY ) -IF( (KWETLBDAH/=NWETLBDAH) .OR. (KWETLBDAS/=NWETLBDAS) .OR. (KND/=IND) .OR. & - (PALPHAH/=XALPHAH) .OR. (PNUH/=XNUH) .OR. & - (PALPHAS/=XALPHAS) .OR. (PNUS/=XNUS) .OR. & - (PEHS/=ZEHS) .OR. (PBS/=XBS) .OR. & - (PCH/=XCH) .OR. (PDH/=XDH) .OR. (PCS/=XCS) .OR. (PDS/=XDS) .OR. (PFVELOS/=PFVELOS) .OR. & - (PWETLBDAH_MAX/=XWETLBDAH_MAX) .OR. (PWETLBDAS_MAX/=XWETLBDAS_MAX) .OR. & - (PWETLBDAH_MIN/=XWETLBDAH_MIN) .OR. (PWETLBDAS_MIN/=XWETLBDAS_MIN) .OR. & - (PFDINFTY/=ZFDINFTY) ) THEN - CALL RZCOLX ( IND, XALPHAH, XNUH, XALPHAS, XNUS, & - ZEHS, XBS, XCH, XDH, 0., XCS, XDS, PFVELOS, & - XWETLBDAH_MAX, XWETLBDAS_MAX, XWETLBDAH_MIN, XWETLBDAS_MIN, & - ZFDINFTY, XKER_SWETH ) - WRITE(UNIT=KULOUT,FMT='("*****************************************")') - WRITE(UNIT=KULOUT,FMT='("**** UPDATE NEW SET OF SWETH KERNELS ****")') - WRITE(UNIT=KULOUT,FMT='("*****************************************")') - WRITE(UNIT=KULOUT,FMT='("!")') - WRITE(UNIT=KULOUT,FMT='("KND=",I3)') IND - WRITE(UNIT=KULOUT,FMT='("KWETLBDAH=",I3)') NWETLBDAH - WRITE(UNIT=KULOUT,FMT='("KWETLBDAS=",I3)') NWETLBDAS - WRITE(UNIT=KULOUT,FMT='("PALPHAH=",E13.6)') XALPHAH - WRITE(UNIT=KULOUT,FMT='("PNUH=",E13.6)') XNUH - WRITE(UNIT=KULOUT,FMT='("PALPHAS=",E13.6)') XALPHAS - WRITE(UNIT=KULOUT,FMT='("PNUS=",E13.6)') XNUS - WRITE(UNIT=KULOUT,FMT='("PEHS=",E13.6)') ZEHS - WRITE(UNIT=KULOUT,FMT='("PBS=",E13.6)') XBS - WRITE(UNIT=KULOUT,FMT='("PCH=",E13.6)') XCH - WRITE(UNIT=KULOUT,FMT='("PDH=",E13.6)') XDH - WRITE(UNIT=KULOUT,FMT='("PCS=",E13.6)') XCS - WRITE(UNIT=KULOUT,FMT='("PDS=",E13.6)') XDS - WRITE(UNIT=KULOUT,FMT='("PWETLBDAH_MAX=",E13.6)') & - XWETLBDAH_MAX - WRITE(UNIT=KULOUT,FMT='("PWETLBDAS_MAX=",E13.6)') & - XWETLBDAS_MAX - WRITE(UNIT=KULOUT,FMT='("PWETLBDAH_MIN=",E13.6)') & - XWETLBDAH_MIN - WRITE(UNIT=KULOUT,FMT='("PWETLBDAS_MIN=",E13.6)') & - XWETLBDAS_MIN - WRITE(UNIT=KULOUT,FMT='("PFDINFTY=",E13.6)') ZFDINFTY - WRITE(UNIT=KULOUT,FMT='("!")') - WRITE(UNIT=KULOUT,FMT='("IF( PRESENT(PKER_SWETH) ) THEN")') - DO J1 = 1 , NWETLBDAH - DO J2 = 1 , NWETLBDAS - WRITE(UNIT=KULOUT,FMT='("PKER_SWETH(",I3,",",I3,") = ",E13.6)') & - J1,J2,XKER_SWETH(J1,J2) - END DO - END DO - WRITE(UNIT=KULOUT,FMT='("END IF")') - ELSE - CALL READ_XKER_SWETH (KWETLBDAH,KWETLBDAS,KND, & - PALPHAH,PNUH,PALPHAS,PNUS,PEHS,PBS,PCH,PDH,PCS,PDS,PFVELOS, & - PWETLBDAH_MAX,PWETLBDAS_MAX,PWETLBDAH_MIN,PWETLBDAS_MIN, & - PFDINFTY,XKER_SWETH ) - WRITE(UNIT=KULOUT,FMT='(" Read XKER_SWETH")') -END IF -! -! -IND = 50 ! Number of interval used to integrate the dimensional -ZEHG = 1.0 ! distributions when computing the kernel XKER_GWETH -ZFDINFTY = 20.0 -! -IF( .NOT.ALLOCATED(XKER_GWETH) ) ALLOCATE( XKER_GWETH(NWETLBDAH,NWETLBDAG) ) -! -CALL READ_XKER_GWETH (KWETLBDAH,KWETLBDAG,KND, & - PALPHAH,PNUH,PALPHAG,PNUG,PEHG,PBG,PCH,PDH,PCG,PDG, & - PWETLBDAH_MAX,PWETLBDAG_MAX,PWETLBDAH_MIN,PWETLBDAG_MIN, & - PFDINFTY ) -IF( (KWETLBDAH/=NWETLBDAH) .OR. (KWETLBDAG/=NWETLBDAG) .OR. (KND/=IND) .OR. & - (PALPHAH/=XALPHAH) .OR. (PNUH/=XNUH) .OR. & - (PALPHAG/=XALPHAG) .OR. (PNUG/=XNUG) .OR. & - (PEHG/=ZEHG) .OR. (PBG/=XBG) .OR. & - (PCH/=XCH) .OR. (PDH/=XDH) .OR. (PCG/=XCG) .OR. (PDG/=XDG) .OR. & - (PWETLBDAH_MAX/=XWETLBDAH_MAX) .OR. (PWETLBDAG_MAX/=XWETLBDAG_MAX) .OR. & - (PWETLBDAH_MIN/=XWETLBDAH_MIN) .OR. (PWETLBDAG_MIN/=XWETLBDAG_MIN) .OR. & - (PFDINFTY/=ZFDINFTY) ) THEN - CALL RZCOLX ( IND, XALPHAH, XNUH, XALPHAG, XNUG, & - ZEHG, XBG, XCH, XDH, 0., XCG, XDG, 0., & - XWETLBDAH_MAX, XWETLBDAG_MAX, XWETLBDAH_MIN, XWETLBDAG_MIN, & - ZFDINFTY, XKER_GWETH ) - WRITE(UNIT=KULOUT,FMT='("*****************************************")') - WRITE(UNIT=KULOUT,FMT='("**** UPDATE NEW SET OF GWETH KERNELS ****")') - WRITE(UNIT=KULOUT,FMT='("*****************************************")') - WRITE(UNIT=KULOUT,FMT='("!")') - WRITE(UNIT=KULOUT,FMT='("KND=",I3)') IND - WRITE(UNIT=KULOUT,FMT='("KWETLBDAH=",I3)') NWETLBDAH - WRITE(UNIT=KULOUT,FMT='("KWETLBDAG=",I3)') NWETLBDAG - WRITE(UNIT=KULOUT,FMT='("PALPHAH=",E13.6)') XALPHAH - WRITE(UNIT=KULOUT,FMT='("PNUH=",E13.6)') XNUH - WRITE(UNIT=KULOUT,FMT='("PALPHAG=",E13.6)') XALPHAG - WRITE(UNIT=KULOUT,FMT='("PNUG=",E13.6)') XNUG - WRITE(UNIT=KULOUT,FMT='("PEHG=",E13.6)') ZEHG - WRITE(UNIT=KULOUT,FMT='("PBG=",E13.6)') XBG - WRITE(UNIT=KULOUT,FMT='("PCH=",E13.6)') XCH - WRITE(UNIT=KULOUT,FMT='("PDH=",E13.6)') XDH - WRITE(UNIT=KULOUT,FMT='("PCG=",E13.6)') XCG - WRITE(UNIT=KULOUT,FMT='("PDG=",E13.6)') XDG - WRITE(UNIT=KULOUT,FMT='("PWETLBDAH_MAX=",E13.6)') & - XWETLBDAH_MAX - WRITE(UNIT=KULOUT,FMT='("PWETLBDAG_MAX=",E13.6)') & - XWETLBDAG_MAX - WRITE(UNIT=KULOUT,FMT='("PWETLBDAH_MIN=",E13.6)') & - XWETLBDAH_MIN - WRITE(UNIT=KULOUT,FMT='("PWETLBDAG_MIN=",E13.6)') & - XWETLBDAG_MIN - WRITE(UNIT=KULOUT,FMT='("PFDINFTY=",E13.6)') ZFDINFTY - WRITE(UNIT=KULOUT,FMT='("!")') - WRITE(UNIT=KULOUT,FMT='("IF( PRESENT(PKER_GWETH) ) THEN")') - DO J1 = 1 , NWETLBDAH - DO J2 = 1 , NWETLBDAG - WRITE(UNIT=KULOUT,FMT='("PKER_GWETH(",I3,",",I3,") = ",E13.6)') & - J1,J2,XKER_GWETH(J1,J2) - END DO - END DO - WRITE(UNIT=KULOUT,FMT='("END IF")') - ELSE - CALL READ_XKER_GWETH (KWETLBDAH,KWETLBDAG,KND, & - PALPHAH,PNUH,PALPHAG,PNUG,PEHG,PBG,PCH,PDH,PCG,PDG, & - PWETLBDAH_MAX,PWETLBDAG_MAX,PWETLBDAH_MIN,PWETLBDAG_MIN, & - PFDINFTY,XKER_GWETH ) - WRITE(UNIT=KULOUT,FMT='(" Read XKER_GWETH")') -END IF -! -! -! -!------------------------------------------------------------------------------- -! -!* 10. SET-UP RADIATIVE PARAMETERS -! --------------------------- -! -! -! R_eff_i = XFREFFI * (rho*r_i/N_i)**(1/3) -! -XFREFFI = 0.5 * ZGAMI(8) * (1.0/XLBI)**XLBEXI -! -!------------------------------------------------------------------------------- -! -! -!* 11. SOME PRINTS FOR CONTROL -! ----------------------- -! -! -GFLAG = .TRUE. -IF (GFLAG) THEN - WRITE(UNIT=KULOUT,FMT='(" Summary of the ice particule characteristics")') - WRITE(UNIT=KULOUT,FMT='(" PRISTINE ICE")') - WRITE(UNIT=KULOUT,FMT='(" masse: A=",E13.6," B=",E13.6)') & - XAI,XBI - WRITE(UNIT=KULOUT,FMT='(" vitesse: C=",E13.6," D=",E13.6)') & - XC_I,XDI - WRITE(UNIT=KULOUT,FMT='(" distribution:AL=",E13.6,"NU=",E13.6)') & - XALPHAI,XNUI - WRITE(UNIT=KULOUT,FMT='(" SNOW")') - WRITE(UNIT=KULOUT,FMT='(" masse: A=",E13.6," B=",E13.6)') & - XAS,XBS - WRITE(UNIT=KULOUT,FMT='(" vitesse: C=",E13.6," D=",E13.6)') & - XCS,XDS - WRITE(UNIT=KULOUT,FMT='(" concentration:CC=",E13.6," x=",E13.6)') & - XCCS,XCXS - WRITE(UNIT=KULOUT,FMT='(" distribution:AL=",E13.6,"NU=",E13.6)') & - XALPHAS,XNUS - WRITE(UNIT=KULOUT,FMT='(" GRAUPEL")') - WRITE(UNIT=KULOUT,FMT='(" masse: A=",E13.6," B=",E13.6)') & - XAG,XBG - WRITE(UNIT=KULOUT,FMT='(" vitesse: C=",E13.6," D=",E13.6)') & - XCG,XDG - WRITE(UNIT=KULOUT,FMT='(" concentration:CC=",E13.6," x=",E13.6)') & - XCCG,XCXG - WRITE(UNIT=KULOUT,FMT='(" distribution:AL=",E13.6,"NU=",E13.6)') & - XALPHAG,XNUG -END IF -! -!------------------------------------------------------------------------------ -! -END SUBROUTINE INI_LIMA_COLD_MIXED diff --git a/src/arome/micro/ini_lima_warm.F90 b/src/arome/micro/ini_lima_warm.F90 deleted file mode 100644 index e1fce381890992a8307515ccecc7873d8c3e0687..0000000000000000000000000000000000000000 --- a/src/arome/micro/ini_lima_warm.F90 +++ /dev/null @@ -1,439 +0,0 @@ -! ######################### - MODULE MODI_INI_LIMA_WARM -! ######################### -! -INTERFACE - SUBROUTINE INI_LIMA_WARM (KULOUT, PTSTEP, PDZMIN) -! -INTEGER, INTENT(IN) :: KULOUT ! output logical unit number -REAL, INTENT(IN) :: PTSTEP ! Effective Time step -REAL, INTENT(IN) :: PDZMIN ! minimun vertical mesh size -! -END SUBROUTINE INI_LIMA_WARM -! -END INTERFACE -! -END MODULE MODI_INI_LIMA_WARM -! ######################################### - SUBROUTINE INI_LIMA_WARM (KULOUT, PTSTEP, PDZMIN) -! ######################################### -! -!! PURPOSE -!! ------- -!! The purpose of this routine is to initialize the constants used in the -!! microphysical scheme LIMA for the warm phase species and processes. -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_CST - -USE MODD_PARAM_LIMA -USE MODD_PARAM_LIMA_WARM -USE MODD_PARAMETERS -USE MODD_LUNIT -! -USE MODI_LIMA_FUNCTIONS -USE MODI_HYPGEO -USE MODI_GAMMA -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -INTEGER, INTENT(IN) :: KULOUT ! output logical unit number -REAL, INTENT(IN) :: PTSTEP ! Effective Time step -REAL, INTENT(IN) :: PDZMIN ! minimun vertical mesh size -! -!* 0.2 Declarations of local variables : -! -INTEGER :: IKB ! Coordinates of the first and last physical - ! points along z -INTEGER :: J1 ! Internal loop indexes -INTEGER :: JMOD ! Internal loop to index the CCN modes -! -REAL, DIMENSION(6) :: ZGAMC, ZGAMR ! parameters involving various moments of - ! the generalized gamma law -! -REAL :: ZTT ! Temperature in Celsius -REAL :: ZLV ! Latent heat of vaporization -REAL :: ZSS ! Supersaturation -REAL :: ZPSI1, ZG ! Psi1 and G functions -REAL :: ZAHENR ! r_star (FH92) -REAL :: ZVTRMAX ! Raindrop maximal fall velocity -REAL :: ZRHO00 ! Surface reference air density -REAL :: ZSURF_TEN ! Water drop surface tension -REAL :: ZSMIN, ZSMAX ! Minimal and maximal supersaturation used to - ! discretize the HYP functions -! -! -INTEGER :: IRESP ! Return code of FM-routines -LOGICAL :: GFLAG ! Logical flag for printing the constatnts on the output - ! listing -! -!------------------------------------------------------------------------------- -! -! -!* 1. CHARACTERISTICS OF THE SPECIES -! ------------------------------ -! -! -!* 1.1 Cloud droplet characteristics -! -XAC = (XPI/6.0)*XRHOLW -XBC = 3.0 -XCC = XRHOLW*XG/(18.0*1.816E-5) ! Stokes flow (Pruppacher eq. 10-138 for T=293K) -!XCC = XRHOLW*XG/(18.0*1.7E-5) ! Stokes flow (Pruppacher eq. 10-138 for T=273K) -XDC = 2.0 -! -XF0C = 1.00 -XF2C = 0.108 -! -XC1C = 1./2. -! -!* 1.2 Raindrops characteristics -! -XAR = (XPI/6.0)*XRHOLW -XBR = 3.0 -XCR = 842. -XDR = 0.8 -! -XF0R = 0.780 -!Correction BVIE Pruppacher 1997 eq. 13-61 -!XF1R = 0.265 -XF1R = 0.308 -! -! -!------------------------------------------------------------------------------ -! -! -!* 2. DIMENSIONAL DISTRIBUTIONS OF THE SPECIES -! ---------------------------------------- -! -! -!* 2.1 Cloud droplet distribution -! -!XALPHAC = 3.0 ! Gamma law of the Cloud droplet (here volume-like distribution) -!XNUC = 3.0 ! Gamma law with little dispersion -! -!* 2.2 Raindrop distribution -! -!XALPHAR = 3.0 ! Gamma law of the raindrops (here volume-like distribution) -!XNUR = 3.0 ! Gamma law for the raindrops -!XNUR = 0.1 -! -!* 2.3 Precalculation of the gamma function momentum -! -! -ZGAMC(1) = GAMMA_X0D(XNUC) -ZGAMC(2) = MOMG(XALPHAC,XNUC,3.) -ZGAMC(3) = MOMG(XALPHAC,XNUC,6.) -ZGAMC(4) = ZGAMC(3)-ZGAMC(2)**2 ! useful for Sig_c -ZGAMC(5) = MOMG(XALPHAC,XNUC,9.) -ZGAMC(6) = MOMG(XALPHAC,XNUC,3.)**(2./3.)/MOMG(XALPHAC,XNUC,2.) -! -ZGAMR(1) = GAMMA_X0D(XNUR) -ZGAMR(2) = MOMG(XALPHAR,XNUR,3.) -ZGAMR(3) = MOMG(XALPHAR,XNUR,6.) -ZGAMR(4) = MOMG(XALPHAR,XNUR,6.) -ZGAMR(5) = MOMG(XALPHAR,XNUR,9.) -ZGAMR(6) = MOMG(XALPHAR,XNUR,3.)**(2./3.)/MOMG(XALPHAR,XNUR,2.) -! -!* 2.4 Csts for the shape parameter -! -XLBC = XAR*ZGAMC(2) -XLBEXC = 1.0/XBC -XLBR = XAR*ZGAMR(2) -XLBEXR = 1.0/XBR -! -! -!------------------------------------------------------------------------------ -! -! -!* 3. CONSTANTS FOR THE SEDIMENTATION -! ------------------------------- -! -! -!* 4.1 Exponent of the fall-speed air density correction -! -IKB = 1 + JPVEXT -! Correction -!ZRHO00 = XP00/(XRD*XTHVREFZ(IKB)) -ZRHO00 = 1.2041 ! at P=1013.25hPa and T=20°C -! -!* 4.2 Constants for sedimentation -! -XFSEDRR = XCR*GAMMA_X0D(XNUR+(XDR+3.)/XALPHAR)/GAMMA_X0D(XNUR+3./XALPHAR)* & - (ZRHO00)**XCEXVT -XFSEDCR = XCR*GAMMA_X0D(XNUR+XDR/XALPHAR)/GAMMA_X0D(XNUR)* & - (ZRHO00)**XCEXVT -XFSEDRC = XCC*GAMMA_X0D(XNUC+(XDC+3.)/XALPHAC)/GAMMA_X0D(XNUC+3./XALPHAC)* & - (ZRHO00)**XCEXVT -XFSEDCC = XCC*GAMMA_X0D(XNUC+XDC/XALPHAC)/GAMMA_X0D(XNUC)* & - (ZRHO00)**XCEXVT - -! -! -!------------------------------------------------------------------------------ -! -! -!* 4. CONSTANTS FOR THE NUCLEATION PROCESS -! ------------------------------------ -! -! -XWMIN = 0.01 ! Minimal positive vertical velocity required - ! for the activation process in Twomey and CPB scheme -XTMIN = -0.000278 ! Minimal cooling required 1K/h -! -XDIVA = 226.E-7 ! Diffusivity of water vapor in the air -XTHCO = 24.3E-3 ! Air thermal conductivity -! -! ( 8 Mw (Sigma)sw )3 Pi*Rho_l -! XCSTDCRIT = ( -------------- ) * -------- -! ( 3 Ra Rhow ) 6 -! -ZSURF_TEN = 76.1E-3 ! Surface tension of a water drop at T=0 C -XCSTDCRIT = (XPI/6.)*XRHOLW*( (8.0*ZSURF_TEN )/( 3.0*XRV*XRHOLW ) )**3 -! -! -! -! 4.1 Tabulation of the hypergeometric functions in 'no units' -! -------------------------------------------------------- -! -! In LIMA's nucleation parameterization, -! supersaturation is not in % : Smax=0.01 for a 1% supersaturation. -! This is accounted for in the modified Beta and C values. -! -! Here, we tabulate the -! F(mu,k/2, k/2+1 ,-Beta S**2) -> XHYPF12 -! F(mu,k/2,(k+3)/2,-Beta S**2) -> XHYPF32 functions -! using a logarithmic scale for S -! -NHYP = 500 ! Number of points for the tabulation -ALLOCATE (XHYPF12( NHYP, NMOD_CCN )) -ALLOCATE (XHYPF32( NHYP, NMOD_CCN )) -! -ZSMIN = 1.0E-5 ! Minimum supersaturation set at 0.001 % -ZSMAX = 5.0E-2 ! Maximum supersaturation set at 5 % -XHYPINTP1 = FLOAT(NHYP-1)/LOG(ZSMAX/ZSMIN) -XHYPINTP2 = FLOAT(NHYP)-XHYPINTP1*LOG(ZSMAX) -! -DO JMOD = 1,NMOD_CCN - DO J1 = 1,NHYP - ZSS =ZSMAX*(ZSMIN/ZSMAX)**(FLOAT(NHYP-J1)/FLOAT(NHYP-1)) - XHYPF12(J1,JMOD) = HYPGEO(XMUHEN_MULTI(JMOD),0.5*XKHEN_MULTI(JMOD),& - 0.5*XKHEN_MULTI(JMOD)+1.0,XBETAHEN_MULTI(JMOD),ZSS) - XHYPF32(J1,JMOD) = HYPGEO(XMUHEN_MULTI(JMOD),0.5*XKHEN_MULTI(JMOD),& - 0.5*XKHEN_MULTI(JMOD)+1.5,XBETAHEN_MULTI(JMOD),ZSS) - END DO -ENDDO -! -NAHEN = 81 ! Tabulation for each Kelvin degree in the range XTT-40 to XTT+40 -XAHENINTP1 = 1.0 -XAHENINTP2 = 0.5*FLOAT(NAHEN-1) - XTT -! -! Compute the tabulation of function of T : -! -! 1 -! XAHENG = ----------------------- -! XCSTHEN * G**(3/2) -! -! Compute constants for the calculation of Smax. -! XCSTHEN = 1/(rho_l 2 pi) -! PSI1 -! PSI3 -! T -! Lv -! G -! -ALLOCATE (XAHENG(NAHEN)) -ALLOCATE (XPSI1(NAHEN)) -ALLOCATE (XPSI3(NAHEN)) -XCSTHEN = 1.0 / ( XRHOLW*2.0*XPI ) -DO J1 = 1,NAHEN - ZTT = XTT + FLOAT(J1-(NAHEN-1)/2) ! T - ZLV = XLVTT+(XCPV-XCL)*(ZTT-XTT) ! Lv - XPSI1(J1) = (XG/(XRD*ZTT))*(XMV*ZLV/(XMD*XCPD*ZTT)-1.) ! Psi1 - XPSI3(J1) = -1*XMV*ZLV/(XMD*XRD*(ZTT**2)) ! Psi3 - ZG = 1./( XRHOLW*( (XRV*ZTT)/ & ! G - (XDIVA*EXP(XALPW-(XBETAW/ZTT)-(XGAMW*ALOG(ZTT)))) & - + (ZLV/ZTT)**2/(XTHCO*XRV) ) ) - XAHENG(J1) = XCSTHEN/(ZG)**(3./2.) -END DO -!------------------------------------------------------------------------------- -! -! Parameters used to initialise the droplet and drop concentration -! from the respective mixing ratios (used in RESTART_RAIN_C2R2) -! -! Droplet case -! -!!ALLOCATE(XCONCC_INI(SIZE(PNFS,1),SIZE(PNFS,2),SIZE(PNFS,3),SIZE(PNFS,4))) !NMOD_CCN)) -!! XCONCC_INI(:,:,:,:) = 0.8 * PNFS(:,:,:,:) ! 80% of the maximum CCN conc. is assumed -! -! Raindrop case -! -XCONCR_PARAM_INI = (1.E7)**3/(XPI*XRHOLW) ! MP law with N_O=1.E7 m-1 is assumed -! -! -!------------------------------------------------------------------------------ -! -! -!* 5. CONSTANTS FOR THE COALESCENCE PROCESSES -! --------------------------------------- -! -! -!* 6.1 Csts for the coalescence processes -! -XKERA1 = 2.59E15 ! From Long a1=9.44E9 cm-3 so XKERA1= 9.44E9*1E6*(PI/6)**2 -XKERA2 = 3.03E3 ! From Long a2=5.78E3 so XKERA2= 5.78E3* (PI/6) -! -! Cst for the cloud droplet selfcollection process -! -XSELFC = XKERA1*ZGAMC(3) -! -! Cst for the autoconversion process -! -XAUTO1 = 6.25E18*(ZGAMC(2))**(1./3.)*SQRT(ZGAMC(4)) -XAUTO2 = 0.5E6*(ZGAMC(4))**(1./6.) -XLAUTR = 2.7E-2 -XLAUTR_THRESHOLD = 0.4 -XITAUTR= 0.27 ! (Notice that T2 of BR74 is uncorrect and that 0.27=1./3.7 -XITAUTR_THRESHOLD = 7.5 -XCAUTR = 3.5E9 -! -! Cst for the accretion process -! -XACCR1 = ZGAMR(2)**(1./3.) -XACCR2 = 5.0E-6 -XACCR3 = 12.6E-4 -XACCR4 = XAUTO2 -XACCR5 = 3.5 -XACCR6 = 1.2*XCAUTR -XACCR_CLARGE1 = XKERA2*ZGAMC(2) -XACCR_CLARGE2 = XKERA2*ZGAMR(2) -XACCR_RLARGE1 = XKERA2*ZGAMC(3)*XRHOLW*(XPI/6.0) -XACCR_RLARGE2 = XKERA2*ZGAMC(2)*ZGAMR(2)*XRHOLW*(XPI/6.0) -XACCR_CSMALL1 = XKERA1*ZGAMC(3) -XACCR_CSMALL2 = XKERA1*ZGAMR(3) -XACCR_RSMALL1 = XKERA1*ZGAMC(5)*XRHOLW*(XPI/6.0) -XACCR_RSMALL2 = XKERA1*ZGAMC(2)*ZGAMR(3)*XRHOLW*(XPI/6.0) -! -! Cst for the raindrop self-collection/breakup process -! -XSCBU2 = XKERA2*ZGAMR(2) -XSCBU3 = XKERA1*ZGAMR(3) -XSCBU_EFF1 = 0.6E-3 -XSCBU_EFF2 = 2.0E-3 -XSCBUEXP1 = -2500.0 -! -! -!------------------------------------------------------------------------------ -! -! -!* 6. CONSTANTS FOR THE "SONTANEOUS" BREAK-UP -! --------------------------------------- -! -! -XSPONBUD1 = 3.0E-3 -XSPONBUD2 = 4.0E-3 -XSPONBUD3 = 5.0E-3 -XSPONCOEF2 = ((XSPONBUD3/XSPONBUD2)**3 - 1.0)/(XSPONBUD3-XSPONBUD1)**2 -! -! -!------------------------------------------------------------------------------ -! -! -!* 7. CONSTANTS FOR EVAPORATION PROCESS -! --------------------------------------- -! -! -X0CNDC = (4.0*XPI)*XC1C*XF0C*MOMG(XALPHAC,XNUC,1.) -X2CNDC = (4.0*XPI)*XC1C*XF2C*XCC*MOMG(XALPHAC,XNUC,XDC+2.0) -! -! Valeurs utiles pour le calcul de l'évaporation en fonction de N_r -! -!XEX0EVAR = -1.0 -!XEX1EVAR = -1.0 - (XDR+1.0)*0.5 -!XEX2EVAR = -0.5*XCEXVT -! -!X0EVAR = (2.0*XPI)*XF0R*GAMMA_X0D(XNUR+1./XALPHAR)/GAMMA_X0D(XNUR) -!X1EVAR = (2.0*XPI)*XF1R*((ZRHO00)**(XCEXVT)*(XCR/0.15E-4))**0.5* & -! GAMMA_X0D(XNUR+(XDR+3.0)/(2.0*XALPHAR))/GAMMA_X0D(XNUR) -! -! -! Valeurs utiles pour le calcul de l'évaporation en fonction de r_r -! -XEX0EVAR = 2.0 -XEX1EVAR = 2.0 - (XDR+1.0)*0.5 -XEX2EVAR = -0.5*XCEXVT -! -X0EVAR = (12.0)*XF0R*GAMMA_X0D(XNUR+1./XALPHAR)/GAMMA_X0D(XNUR+3./XALPHAR) -X1EVAR = (12.0)*XF1R*((ZRHO00)**(XCEXVT)*(XCR/0.15E-4))**0.5* & - GAMMA_X0D(XNUR+(XDR+3.0)/(2.0*XALPHAR))/GAMMA_X0D(XNUR+3./XALPHAR) -! -! -!------------------------------------------------------------------------------ -! -! -!* 8. SET-UP RADIATIVE PARAMETERS -! --------------------------- -! -! -! R_eff_c = XFREFFC * (rho*r_c/N_c)**(1/3) -! -! -XFREFFC = 0.5 * ZGAMC(6) * (1.0/XAC)**(1.0/3.0) -XFREFFR = 0.5 * ZGAMR(6) * (1.0/XAR)**(1.0/3.0) -! -! Coefficients used to compute reff when both cloud and rain are present -! -XCREC = 1.0/ (ZGAMC(6) * XAC**(2.0/3.0)) -XCRER = 1.0/ (ZGAMR(6) * XAR**(2.0/3.0)) -! -! -!------------------------------------------------------------------------------ -! -! -!* 9. SOME PRINTS FOR CONTROL -! ----------------------- -! -! -GFLAG = .TRUE. -IF (GFLAG) THEN - WRITE(UNIT=KULOUT,FMT='(" Summary of the cloud particule characteristics")') - WRITE(UNIT=KULOUT,FMT='(" CLOUD")') - WRITE(UNIT=KULOUT,FMT='(" masse: A=",E13.6," B=",E13.6)') & - XAR,XBR - WRITE(UNIT=KULOUT,FMT='(" vitesse: C=",E13.6," D=",E13.6)') & - XCC,XDC - WRITE(UNIT=KULOUT,FMT='(" distribution:AL=",E13.6,"NU=",E13.6)') & - XALPHAC,XNUC - WRITE(UNIT=KULOUT,FMT='(" RAIN")') - WRITE(UNIT=KULOUT,FMT='(" masse: A=",E13.6," B=",E13.6)') & - XAR,XBR - WRITE(UNIT=KULOUT,FMT='(" vitesse: C=",E13.6," D=",E13.6)') & - XCR,XDR -!!$ WRITE(UNIT=KULOUT,FMT='(" distribution:AL=",E13.6,"NU=",E13.6)') & -!!$ XALPHAR,XNUR -!!$ WRITE(UNIT=KULOUT,FMT='(" Description of the nucleation spectrum")') -!!$ WRITE(UNIT=KULOUT,FMT='(" C=",E13.6," k=",E13.6)') XCHEN, XKHEN -!!$ WRITE(UNIT=KULOUT,FMT='(" Beta=",E13.6," MU=",E13.6)') XBETAHEN, XMUHEN -!!$ WRITE(UNIT=KULOUT,FMT='(" CCN max=",E13.6)') XCONC_CCN -END IF -! -!------------------------------------------------------------------------------ -! -END SUBROUTINE INI_LIMA_WARM diff --git a/src/arome/micro/init_aerosol_properties.F90 b/src/arome/micro/init_aerosol_properties.F90 deleted file mode 100644 index 06cec3bfa4d198b4f2d7a9f792293ffbff43f4ee..0000000000000000000000000000000000000000 --- a/src/arome/micro/init_aerosol_properties.F90 +++ /dev/null @@ -1,370 +0,0 @@ -! #################### - MODULE MODI_INIT_AEROSOL_PROPERTIES -INTERFACE - SUBROUTINE INIT_AEROSOL_PROPERTIES - END SUBROUTINE INIT_AEROSOL_PROPERTIES -END INTERFACE -END MODULE MODI_INIT_AEROSOL_PROPERTIES -! #################### -! -! ############################################################# - SUBROUTINE INIT_AEROSOL_PROPERTIES -! ############################################################# - -!! -!! -!! PURPOSE -!! ------- -!! -!! Define the aerosol properties -!! -!! -!! AUTHOR -!! ------ -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_LUNIT, ONLY : ILUOUT, CLUOUT0 -USE MODD_PARAM_LIMA, ONLY : LWARM_LIMA, LACTI_LIMA, NMOD_CCN, HINI_CCN, HTYPE_CCN, & - XR_MEAN_CCN, XLOGSIG_CCN, XRHO_CCN, & - XKHEN_MULTI, XMUHEN_MULTI, XBETAHEN_MULTI, & - XLIMIT_FACTOR, CCCN_MODES, LSCAV, & - XACTEMP_CCN, XFSOLUB_CCN, & - LCOLD_LIMA, LNUCL_LIMA, NMOD_IFN, NSPECIE, CIFN_SPECIES, & - XMDIAM_IFN, XSIGMA_IFN, XRHO_IFN, XFRAC, XFRAC_REF, & - CINT_MIXING, NMOD_IMM, NINDICE_CCN_IMM, NIMM, & - NPHILLIPS -! -USE MODI_GAMMA -! -IMPLICIT NONE -! -REAL :: XKHEN0 -REAL :: XLOGSIG0 -REAL :: XALPHA1 -REAL :: XMUHEN0 -REAL :: XALPHA2 -REAL :: XBETAHEN0 -REAL :: XR_MEAN0 -REAL :: XALPHA3 -REAL :: XALPHA4 -REAL :: XALPHA5 -REAL :: XACTEMP0 -REAL :: XALPHA6 -! -REAL, DIMENSION(6) :: XKHEN_TMP = (/1.56, 1.56, 1.56, 1.56, 1.56, 1.56 /) -REAL, DIMENSION(6) :: XMUHEN_TMP = (/0.80, 0.80, 0.80, 0.80, 0.80, 0.80 /) -REAL, DIMENSION(6) :: XBETAHEN_TMP= (/136., 136., 136., 136., 136., 136. /) -! -REAL, DIMENSION(3) :: RCCN -REAL, DIMENSION(3) :: LOGSIGCCN -REAL, DIMENSION(3) :: RHOCCN -! -INTEGER :: I,J,JMOD -! -INTEGER :: ILUOUT0 ! Logical unit number for output-listing -INTEGER :: IRESP ! Return code of FM-routines - -! -!------------------------------------------------------------------------------- -! -CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP) -! -!!!!!!!!!!!!!!!! -! CCN properties -!!!!!!!!!!!!!!!! -! -IF ( NMOD_CCN .GE. 1 ) THEN -! - IF (.NOT.(ALLOCATED(XR_MEAN_CCN))) ALLOCATE(XR_MEAN_CCN(NMOD_CCN)) - IF (.NOT.(ALLOCATED(XLOGSIG_CCN))) ALLOCATE(XLOGSIG_CCN(NMOD_CCN)) - IF (.NOT.(ALLOCATED(XRHO_CCN))) ALLOCATE(XRHO_CCN(NMOD_CCN)) -! - SELECT CASE (CCCN_MODES) - CASE ('JUNGFRAU') - RCCN(:) = (/ 0.02E-6 , 0.058E-6 , 0.763E-6 /) - LOGSIGCCN(:) = (/ 0.28 , 0.57 , 0.34 /) - RHOCCN(:) = (/ 1500. , 1500. , 1500. /) - CASE ('COPT') - RCCN(:) = (/ 0.125E-6 , 0.4E-6 , 1.0E-6 /) - LOGSIGCCN(:) = (/ 0.69 , 0.41 , 0.47 /) - RHOCCN(:) = (/ 1000. , 1000. , 1000. /) - CASE ('MACC') - RCCN(:) = (/ 0.4E-6 , 0.25E-6 , 0.1E-6 /) - LOGSIGCCN(:) = (/ 0.64 , 0.47 , 0.47 /) - RHOCCN(:) = (/ 2160. , 2000. , 1750. /) - CASE ('MACC_JPP') -! sea-salt, sulfate, hydrophilic (GADS data) - RCCN(:) = (/ 0.209E-6 , 0.0695E-6 , 0.0212E-6 /) - LOGSIGCCN(:) = (/ 0.708 , 0.708 , 0.806 /) - RHOCCN(:) = (/ 2200. , 1700. , 1800. /) - CASE ('SIRTA') - RCCN(:) = (/ 0.153E-6 , 0.058E-6 , 0.763E-6 /) - LOGSIGCCN(:) = (/ 0.846 , 0.57 , 0.34 /) - RHOCCN(:) = (/ 1500. , 1500. , 1500. /) - CASE ('CPS00') - RCCN(:) = (/ 0.0218E-6 , 0.058E-6 , 0.763E-6 /) - LOGSIGCCN(:) = (/ 1.16 , 0.57 , 0.34 /) - RHOCCN(:) = (/ 1500. , 1500. , 1500. /) - CASE ('MOCAGE') ! ordre : sulfates, sels marins, BC+O - RCCN(:) = (/ 0.01E-6 , 0.05E-6 , 0.008E-6 /) - LOGSIGCCN(:) = (/ 0.788 , 0.993 , 0.916 /) - RHOCCN(:) = (/ 1000. , 2200. , 1000. /) - CASE DEFAULT -! d'après Jaenicke 1993, aerosols troposphere libre, masse volumique typique - RCCN(:) = (/ 0.0035E-6 , 0.125E-6 , 0.26E-6 /) - LOGSIGCCN(:) = (/ 0.645 , 0.253 , 0.425 /) - RHOCCN(:) = (/ 1000. , 1000. , 1000. /) - ENDSELECT -! - DO I=1, MIN(NMOD_CCN,3) - XR_MEAN_CCN(I) = RCCN(I) - XLOGSIG_CCN(I) = LOGSIGCCN(I) - XRHO_CCN(I) = RHOCCN(I) - END DO -! - IF (NMOD_CCN .EQ. 4) THEN -! default values as coarse sea salt mode - XR_MEAN_CCN(4) = 1.75E-6 - XLOGSIG_CCN(4) = 0.708 - XRHO_CCN(4) = 2200. - END IF -! -! -! Compute CCN spectra parameters from CCN characteristics -! -!* INPUT : XBETAHEN_TEST is in 'percent' and XBETAHEN_MULTI in 'no units', -! XK... and XMU... are invariant -! - IF (.NOT.(ALLOCATED(XKHEN_MULTI))) ALLOCATE(XKHEN_MULTI(NMOD_CCN)) - IF (.NOT.(ALLOCATED(XMUHEN_MULTI))) ALLOCATE(XMUHEN_MULTI(NMOD_CCN)) - IF (.NOT.(ALLOCATED(XBETAHEN_MULTI))) ALLOCATE(XBETAHEN_MULTI(NMOD_CCN)) - IF (.NOT.(ALLOCATED(XLIMIT_FACTOR))) ALLOCATE(XLIMIT_FACTOR(NMOD_CCN)) -! - IF (HINI_CCN == 'CCN'.AND. (.NOT. LSCAV) ) THEN -! Numerical initialization without dependence on AP physical properties -100 DO JMOD = 1, NMOD_CCN - XKHEN_MULTI(JMOD) = XKHEN_TMP(JMOD) - XMUHEN_MULTI(JMOD) = XMUHEN_TMP(JMOD) - XBETAHEN_MULTI(JMOD) = XBETAHEN_TMP(JMOD)*(100.)**2 -! no units relative to smax - XLIMIT_FACTOR(JMOD) = ( GAMMA_X0D(0.5*XKHEN_MULTI(JMOD)+1.)& - *GAMMA_X0D(XMUHEN_MULTI(JMOD)-0.5*XKHEN_MULTI(JMOD)) ) & - /( XBETAHEN_MULTI(JMOD)**(0.5*XKHEN_MULTI(JMOD)) & - *GAMMA_X0D(XMUHEN_MULTI(JMOD)) ) ! N/C - END DO - ELSE IF (HINI_CCN == 'CCN'.AND. LSCAV ) THEN -! Attention ! - WRITE(UNIT=ILUOUT0,FMT='("You are using a numerical initialization & - ¬ depending on the aerosol properties, however you need it for & - &scavenging. & - &With LSCAV = true, HINI_CCN should be set to AER for consistency")') - go to 100 - ELSE IF (HINI_CCN == 'AER') THEN -! -! Initialisation depending on aerosol physical properties -! -! First, computing k, mu, beta, and XLIMIT_FACTOR as in CPS2000 (eqs 9a-9c) -! -! XLIMIT_FACTOR replaces C, because C depends on the CCN number concentration -! which is therefore determined at each grid point and time step as -! Nccn / XLIMIT_FACTOR -! - DO JMOD = 1, NMOD_CCN -! - SELECT CASE (HTYPE_CCN(JMOD)) - CASE ('M') ! CCN marins - XKHEN0 = 3.251 - XLOGSIG0 = 0.4835 - XALPHA1 = -1.297 - XMUHEN0 = 2.589 - XALPHA2 = -1.511 - XBETAHEN0 = 621.689 - XR_MEAN0 = 0.133E-6 - XALPHA3 = 3.002 - XALPHA4 = 1.081 - XALPHA5 = 1.0 - XACTEMP0 = 290.16 - XALPHA6 = 2.995 - CASE ('C') ! CCN continentaux - XKHEN0 = 1.403 - XLOGSIG0 = 1.16 - XALPHA1 = -1.172 - XMUHEN0 = 0.834 - XALPHA2 = -1.350 - XBETAHEN0 = 25.499 - XR_MEAN0 = 0.0218E-6 - XALPHA3 = 3.057 - XALPHA4 = 4.092 - XALPHA5 = 1.011 - XACTEMP0 = 290.16 - XALPHA6 = 3.076 - CASE DEFAULT - WRITE(UNIT=ILUOUT0,FMT='("You must specify HTYPE_CNN(JMOD)=C or M & - &in EXSEG1.nam for each CCN mode")') - CALL ABORT - ENDSELECT -! - XKHEN_MULTI(JMOD) = XKHEN0*(XLOGSIG_CCN(JMOD)/XLOGSIG0)**XALPHA1 - XMUHEN_MULTI(JMOD) = XMUHEN0*(XLOGSIG_CCN(JMOD)/XLOGSIG0)**XALPHA2 - XBETAHEN_MULTI(JMOD)=XBETAHEN0*(XR_MEAN_CCN(JMOD)/XR_MEAN0)**XALPHA3 & - * EXP( XALPHA4*((XLOGSIG_CCN(JMOD)/XLOGSIG0)-1.) ) & - * XFSOLUB_CCN**XALPHA5 & - * (XACTEMP_CCN/XACTEMP0)**XALPHA6 - XLIMIT_FACTOR(JMOD) = ( GAMMA_X0D(0.5*XKHEN_MULTI(JMOD)+1.) & - *GAMMA_X0D(XMUHEN_MULTI(JMOD)-0.5*XKHEN_MULTI(JMOD)) ) & - /( XBETAHEN_MULTI(JMOD)**(0.5*XKHEN_MULTI(JMOD)) & - *GAMMA_X0D(XMUHEN_MULTI(JMOD)) ) - ENDDO -! -! These parameters are correct for a nucleation spectra -! Nccn(Smax) = C Smax^k F(mu,k/2,1+k/2,-beta Smax^2) -! with Smax expressed in % (Smax=1 for a supersaturation of 1%). -! -! All the computations in LIMA are done for an adimensional Smax (Smax=0.01 for -! a 1% supersaturation). So beta and C (XLIMIT_FACTOR) are changed : -! new_beta = beta * 100^2 -! new_C = C * 100^k (ie XLIMIT_FACTOR = XLIMIT_FACTOR / 100^k) -! - XBETAHEN_MULTI(:) = XBETAHEN_MULTI(:) * 10000 - XLIMIT_FACTOR(:) = XLIMIT_FACTOR(:) / (100**XKHEN_MULTI(:)) - END IF -END IF ! NMOD_CCN > 0 -! -!!!!!!!!!!!!!!!! -! IFN properties -!!!!!!!!!!!!!!!! -! -IF ( NMOD_IFN .GE. 1 ) THEN - SELECT CASE (CIFN_SPECIES) - CASE ('MOCAGE') - NSPECIE = 4 - IF (.NOT.(ALLOCATED(XMDIAM_IFN))) ALLOCATE(XMDIAM_IFN(NSPECIE)) - IF (.NOT.(ALLOCATED(XSIGMA_IFN))) ALLOCATE(XSIGMA_IFN(NSPECIE)) - IF (.NOT.(ALLOCATED(XRHO_IFN))) ALLOCATE(XRHO_IFN(NSPECIE)) - XMDIAM_IFN = (/ 0.05E-6 , 3.E-6 , 0.016E-6 , 0.016E-6 /) - XSIGMA_IFN = (/ 2.4 , 1.6 , 2.5 , 2.5 /) - XRHO_IFN = (/ 2650. , 2650. , 1000. , 1000. /) - CASE ('MACC_JPP') -! sea-salt, sulfate, hydrophilic (GADS data) -! 2 species, dust-metallic and hydrophobic (as BC) -! (Phillips et al. 2013 and GADS data) - NSPECIE = 4 ! DM1, DM2, BC, BIO+(O) - IF (.NOT.(ALLOCATED(XMDIAM_IFN))) ALLOCATE(XMDIAM_IFN(NSPECIE)) - IF (.NOT.(ALLOCATED(XSIGMA_IFN))) ALLOCATE(XSIGMA_IFN(NSPECIE)) - IF (.NOT.(ALLOCATED(XRHO_IFN))) ALLOCATE(XRHO_IFN(NSPECIE)) - XMDIAM_IFN = (/0.8E-6, 3.0E-6, 0.025E-6, 0.2E-6/) - XSIGMA_IFN = (/2.0, 2.15, 2.0, 1.6 /) - XRHO_IFN = (/2600., 2600., 1000., 1500./) - CASE DEFAULT - IF (NPHILLIPS == 8) THEN -! 4 species, according to Phillips et al. 2008 - NSPECIE = 4 - IF (.NOT.(ALLOCATED(XMDIAM_IFN))) ALLOCATE(XMDIAM_IFN(NSPECIE)) - IF (.NOT.(ALLOCATED(XSIGMA_IFN))) ALLOCATE(XSIGMA_IFN(NSPECIE)) - IF (.NOT.(ALLOCATED(XRHO_IFN))) ALLOCATE(XRHO_IFN(NSPECIE)) - XMDIAM_IFN = (/0.8E-6, 3.0E-6, 0.2E-6, 0.2E-6/) - XSIGMA_IFN = (/1.9, 1.6, 1.6, 1.6 /) - XRHO_IFN = (/2300., 2300., 1860., 1500./) - ELSE IF (NPHILLIPS == 13) THEN -! 4 species, according to Phillips et al. 2013 - NSPECIE = 4 - IF (.NOT.(ALLOCATED(XMDIAM_IFN))) ALLOCATE(XMDIAM_IFN(NSPECIE)) - IF (.NOT.(ALLOCATED(XSIGMA_IFN))) ALLOCATE(XSIGMA_IFN(NSPECIE)) - IF (.NOT.(ALLOCATED(XRHO_IFN))) ALLOCATE(XRHO_IFN(NSPECIE)) - XMDIAM_IFN = (/0.8E-6, 3.0E-6, 90.E-9, 0.163E-6/) - XSIGMA_IFN = (/1.9, 1.6, 1.6, 2.54 /) - XRHO_IFN = (/2300., 2300., 1860., 1000./) - END IF - ENDSELECT -! -! internal mixing -! - IF (.NOT.(ALLOCATED(XFRAC))) ALLOCATE(XFRAC(NSPECIE,NMOD_IFN)) - XFRAC(:,:)=0. - SELECT CASE (CINT_MIXING) - CASE ('DM1') - XFRAC(1,:)=1. - CASE ('DM2') - XFRAC(2,:)=1. - CASE ('BC') - XFRAC(3,:)=1. - CASE ('O') - XFRAC(4,:)=1. - CASE ('MACC') - XFRAC(1,1)=0.99 - XFRAC(2,1)=0.01 - XFRAC(3,1)=0. - XFRAC(4,1)=0. - XFRAC(1,2)=0. - XFRAC(2,2)=0. - XFRAC(3,2)=0.5 - XFRAC(4,2)=0.5 - CASE ('MACC_JPP') - XFRAC(1,1)=1.0 - XFRAC(2,1)=0.0 - XFRAC(3,1)=0.0 - XFRAC(4,1)=0.0 - XFRAC(1,2)=0.0 - XFRAC(2,2)=0.0 - XFRAC(3,2)=0.5 - XFRAC(4,2)=0.5 - CASE ('MOCAGE') - XFRAC(1,1)=1. - XFRAC(2,1)=0. - XFRAC(3,1)=0. - XFRAC(4,1)=0. - XFRAC(1,2)=0. - XFRAC(2,2)=0. - XFRAC(3,2)=0.7 - XFRAC(4,2)=0.3 - CASE DEFAULT - XFRAC(1,:)=0.6 - XFRAC(2,:)=0.009 - XFRAC(3,:)=0.33 - XFRAC(4,:)=0.06 - ENDSELECT -! -! Phillips 08 alpha (table 1) - IF (.NOT.(ALLOCATED(XFRAC_REF))) ALLOCATE(XFRAC_REF(4)) - IF (NPHILLIPS == 13) THEN - XFRAC_REF(1)=0.66 - XFRAC_REF(2)=0.66 - XFRAC_REF(3)=0.31 - XFRAC_REF(4)=0.03 - ELSE IF (NPHILLIPS == 8) THEN - XFRAC_REF(1)=0.66 - XFRAC_REF(2)=0.66 - XFRAC_REF(3)=0.28 - XFRAC_REF(4)=0.06 - END IF -! -! Immersion modes -! - IF (.NOT.(ALLOCATED(NIMM))) ALLOCATE(NIMM(NMOD_CCN)) - NIMM(:)=0 - IF (ALLOCATED(NINDICE_CCN_IMM)) DEALLOCATE(NINDICE_CCN_IMM) - ALLOCATE(NINDICE_CCN_IMM(MAX(1,NMOD_IMM))) - IF (NMOD_IMM .GE. 1) THEN - DO J = 0, NMOD_IMM-1 - NIMM(NMOD_CCN-J)=1 - NINDICE_CCN_IMM(NMOD_IMM-J) = NMOD_CCN-J - END DO -! ELSE IF (NMOD_IMM == 0) THEN ! PNIS existe mais vaut 0, pour l'appel à resolved_cloud -! NMOD_IMM = 1 -! NINDICE_CCN_IMM(1) = 0 - END IF -! -END IF ! NMOD_IFN > 0 -! -END SUBROUTINE INIT_AEROSOL_PROPERTIES diff --git a/src/arome/micro/lima.F90 b/src/arome/micro/lima.F90 deleted file mode 100644 index a96c98099c5846f08e8e395d74c36031ad50bdcb..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima.F90 +++ /dev/null @@ -1,1806 +0,0 @@ -! ######spl -MODULE MODI_LIMA -! #################### -! -INTERFACE -! -SUBROUTINE LIMA ( PTSTEP, HFMFILE, OCLOSE_OUT, & - PRHODREF, PEXNREF, PZZ, & - PRHODJ, PPABST, & - NCCN, NIFN, NIMM, & - PTHM, PTHT, PRT, PSVT, PW_NU, & - PTHS, PRS, PSVS, & - PINPRC, PINPRR, PINPRI, PINPRS, PINPRG, PINPRH, & - PEVAP3D, & - KSPLITR, KSPLITG, YDDDH, YDLDDH, YDMDDH ) -! -USE DDH_MIX, ONLY : TYP_DDH -USE YOMLDDH, ONLY : TLDDH -USE YOMMDDH, ONLY : TMDDH -! -REAL, INTENT(IN) :: PTSTEP ! Time step -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE ! Name of the output FM-file -LOGICAL, INTENT(IN) :: OCLOSE_OUT ! Conditional closure of output -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! Reference density -REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXNREF ! Reference Exner function -REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Layer thikness (m) -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! Dry density * Jacobian -REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! absolute pressure at t -! -INTEGER, INTENT(IN) :: NCCN ! for array size declarations -INTEGER, INTENT(IN) :: NIFN ! for array size declarations -INTEGER, INTENT(IN) :: NIMM ! for array size declarations -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHM ! Theta at time t-dt -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT ! Theta at time t -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT ! Mixing ratios at time t -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Concentrations at time t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PW_NU ! w for CCN activation -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS ! Mixing ratios sources -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS ! Concentrations sources -! -REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRC ! Cloud instant precip -REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRR ! Rain instant precip -REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRI ! Rain instant precip -REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRS ! Snow instant precip -REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRG ! Graupel instant precip -REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRH ! Rain instant precip -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PEVAP3D ! Rain evap profile -! -INTEGER, INTENT(IN) :: KSPLITR -INTEGER, INTENT(IN) :: KSPLITG -! -TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH -TYPE(TLDDH), INTENT(IN) :: YDLDDH -TYPE(TMDDH), INTENT(IN) :: YDMDDH -! -END SUBROUTINE LIMA -END INTERFACE -END MODULE MODI_LIMA -! -! -! ######spl - SUBROUTINE LIMA ( PTSTEP, HFMFILE, OCLOSE_OUT, & - PRHODREF, PEXNREF, PZZ, & - PRHODJ, PPABST, & - NCCN, NIFN, NIMM, & - PTHM, PTHT, PRT, PSVT, PW_NU, & - PTHS, PRS, PSVS, & - PINPRC, PINPRR, PINPRI, PINPRS, PINPRG, PINPRH, & - PEVAP3D, & - KSPLITR, KSPLITG, YDDDH, YDLDDH, YDMDDH ) -! ###################################################################### -! -!! PURPOSE -!! ------- -!! Compute explicit microphysical sources using the 2-moment scheme LIMA -!! -!! REFERENCE -!! --------- -!! Vié et al. (GMD, 2016) -!! Meso-NH scientific documentation -!! -!! AUTHOR -!! ------ -!! B. Vié -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/?? -!! -!! -!! -!* 0. DECLARATIONS -! ------------ -USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT -USE MODD_PARAM_ICE, ONLY : NMAXITER, LFEEDBACKT,XMRSTEP, XTSTEP_TS -USE MODD_PARAM_LIMA, ONLY : LCOLD_LIMA, LRAIN_LIMA, LWARM_LIMA, NMOD_CCN, NMOD_IFN, NMOD_IMM, LHHONI_LIMA, & - XRTMIN, LACTIT_LIMA, & - LSEDC_LIMA, LSEDI_LIMA, XRTMIN, XCTMIN -USE MODD_PARAM_LIMA_WARM,ONLY : XLBC, XLBEXC -USE MODD_BUDGET, ONLY : LBU_ENABLE, LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR, & - LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, LBUDGET_SV -USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_FREE, NSV_LIMA_CCN_ACTI, & - NSV_LIMA_SCAVMASS, NSV_LIMA_NI, NSV_LIMA_IFN_FREE, & - NSV_LIMA_IFN_NUCL, NSV_LIMA_IMM_NUCL, NSV_LIMA_HOM_HAZE -USE MODD_CST, ONLY : XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XTT -! -USE MODE_BUDGET, ONLY: BUDGET_DDH -USE MODI_LIMA_FUNCTIONS, ONLY : COUNTJV -USE MODI_LIMA_WARM_SEDIMENTATION -USE MODI_LIMA_COLD_SEDIMENTATION -USE MODI_LIMA_NUCLEATION_PROCS -USE MODI_LIMA_INST_PROCS -USE MODI_LIMA_TENDENCIES -! -USE DDH_MIX, ONLY : TYP_DDH -USE YOMLDDH, ONLY : TLDDH -USE YOMMDDH, ONLY : TMDDH -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -REAL, INTENT(IN) :: PTSTEP ! Time step -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE ! Name of the output FM-file -LOGICAL, INTENT(IN) :: OCLOSE_OUT ! Conditional closure of output -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! Reference density -REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXNREF ! Reference Exner function -REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! Layer thikness (m) -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! Dry density * Jacobian -REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! absolute pressure at t -! -INTEGER, INTENT(IN) :: NCCN ! for array size declarations -INTEGER, INTENT(IN) :: NIFN ! for array size declarations -INTEGER, INTENT(IN) :: NIMM ! for array size declarations -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHM ! Theta at time t-dt -REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHT ! Theta at time t -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT ! Mixing ratios at time t -REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! Concentrations at time t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PW_NU ! w for CCN activation -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHS ! Theta source -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS ! Mixing ratios sources -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS ! Concentrations sources -! -REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRC ! Cloud instant precip -REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRR ! Rain instant precip -REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRI ! Rain instant precip -REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRS ! Snow instant precip -REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRG ! Graupel instant precip -REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRH ! Rain instant precip -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PEVAP3D ! Rain evap profile -! -INTEGER, INTENT(IN) :: KSPLITR -INTEGER, INTENT(IN) :: KSPLITG -! -TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH -TYPE(TLDDH), INTENT(IN) :: YDLDDH -TYPE(TMDDH), INTENT(IN) :: YDMDDH -! -!* 0.2 Declarations of local variables : -! -! -! 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)) :: 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),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 -REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NIFN) :: ZIFNFS, ZIFNNS -REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NIMM) :: ZIMMNT -REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NIMM) :: ZIMMNS -REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: ZHOMFT -REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: ZHOMFS - -! -! for each process & species, we need variables to store instant tendencies for hydrometeors -! These are 1D packed variables -REAL, DIMENSION(:), ALLOCATABLE :: & -! mixing ratio & concentration changes by instantaneous processes (kg/kg and #/kg) : - Z_RC_HENU, Z_CC_HENU, & ! cloud droplet nucleation (HENU) : rc, Nc, rv=-rc, th, CCNF, CCNA - Z_CR_BRKU, & ! spontaneous break up of drops (BRKU) : Nr - Z_RI_HIND, Z_CI_HIND, & ! heterogeneous IFN nucleation (HIND) : rv=-ri, ri, Ni, th, IFNF, IFNN - Z_RC_HINC, Z_CC_HINC, & ! heterogeneous coated IFN nucl. (HINC) : rc, Nc, ri=-rc, Ni=-Nc, th, CCNacti, CCNnucl - Z_RI_HONH, Z_CI_HONH, & ! CCN homogeneous freezing (HONH) : ri, Ni, th, CCNF - Z_TH_HONR, Z_RR_HONR, Z_CR_HONR, & ! rain drops homogeneous freezing (HONR) : rr, Nr, rg=-rr, th - Z_TH_IMLT, Z_RC_IMLT, Z_CC_IMLT, & ! ice melting (IMLT) : rc, Nc, ri=-rc, Ni=-Nc, th, IFNF, IFNA -! mixing ratio & concentration tendencies by continuous processes (kg/kg/s and #/kg/s) : - Z_TH_HONC, Z_RC_HONC, Z_CC_HONC, & ! droplets homogeneous freezing (HONC) : rc, Nc, ri=-rc, Ni=-Nc, th - Z_CC_SELF, & ! self collection of droplets (SELF) : Nc - Z_RC_AUTO, Z_CC_AUTO, Z_CR_AUTO, & ! autoconversion of cloud droplets (AUTO) : rc, Nc, rr=-rc, Nr - Z_RC_ACCR, Z_CC_ACCR, & ! accretion of droplets by rain drops (ACCR) : rc, Nc, rr=-rr - Z_CR_SCBU, & ! self collectio break up of drops (SCBU) : Nr - Z_TH_EVAP, Z_RC_EVAP, Z_CC_EVAP, Z_RR_EVAP, Z_CR_EVAP, & ! evaporation of rain drops (EVAP) : rv=-rr-rc, rc, Nc, rr, Nr, th - Z_RI_CNVI, Z_CI_CNVI, & ! conversion snow -> ice (CNVI) : ri, Ni, rs=-ri - Z_TH_DEPS, Z_RS_DEPS, & ! deposition of vapor on snow (DEPS) : rv=-rs, rs, th - Z_RI_CNVS, Z_CI_CNVS, & ! conversion ice -> snow (CNVS) : ri, Ni, rs=-ri - Z_RI_AGGS, Z_CI_AGGS, & ! aggregation of ice on snow (AGGS) : ri, Ni, rs=-ri - Z_TH_DEPG, Z_RG_DEPG, & ! deposition of vapor on graupel (DEPG) : rv=-rg, rg, th - Z_TH_BERFI, Z_RC_BERFI, & ! Bergeron (BERFI) : rc, ri=-rc, th - Z_TH_RIM, Z_RC_RIM, Z_CC_RIM, Z_RS_RIM, Z_RG_RIM,& ! cloud droplet riming (RIM) : rc, Nc, rs, rg, th - Z_RI_HMS, Z_CI_HMS, Z_RS_HMS, & ! hallett mossop snow (HMS) : ri, Ni, rs - Z_TH_ACC, Z_RR_ACC, Z_CR_ACC, Z_RS_ACC, Z_RG_ACC, & ! rain accretion on aggregates (ACC) : rr, Nr, rs, rg, th - Z_RS_CMEL, & ! conversion-melting (CMEL) : rs, rg=-rs - Z_TH_CFRZ, Z_RR_CFRZ, Z_CR_CFRZ, Z_RI_CFRZ, Z_CI_CFRZ, & ! rain freezing (CFRZ) : rr, Nr, ri, Ni, rg=-rr-ri, th - Z_TH_WETG, Z_RC_WETG, Z_CC_WETG, Z_RR_WETG, Z_CR_WETG, & ! wet growth of graupel (WETG) : rc, NC, rr, Nr, ri, Ni, rs, rg, rh, th - Z_RI_WETG, Z_CI_WETG, Z_RS_WETG, Z_RG_WETG, Z_RH_WETG, & ! wet growth of graupel (WETG) : rc, NC, rr, Nr, ri, Ni, rs, rg, rh, th - Z_TH_DRYG, Z_RC_DRYG, Z_CC_DRYG, Z_RR_DRYG, Z_CR_DRYG, & ! dry growth of graupel (DRYG) : rc, Nc, rr, Nr, ri, Ni, rs, rg, th - Z_RI_DRYG, Z_CI_DRYG, Z_RS_DRYG, Z_RG_DRYG, & ! dry growth of graupel (DRYG) : rc, Nc, rr, Nr, ri, Ni, rs, rg, th - Z_RI_HMG, Z_CI_HMG, Z_RG_HMG, & ! hallett mossop graupel (HMG) : ri, Ni, rg - Z_TH_GMLT, Z_RR_GMLT, Z_CR_GMLT, & ! graupel melting (GMLT) : rr, Nr, rg=-rr, th - Z_RC_WETH, Z_CC_WETH, Z_RR_WETH, Z_CR_WETH, & ! wet growth of hail (WETH) : rc, Nc, rr, Nr, ri, Ni, rs, rg, rh, th - Z_RI_WETH, Z_CI_WETH, Z_RS_WETH, Z_RG_WETH, Z_RH_WETH, & ! wet growth of hail (WETH) : rc, Nc, rr, Nr, ri, Ni, rs, rg, rh, th - Z_RG_COHG, & ! conversion of hail into graupel (COHG) : rg, rh - Z_RR_HMLT, Z_CR_HMLT ! hail melting (HMLT) : rr, Nr, rh=-rr, th -! -! -! for each process & species, we need variables to store total mmr and conc change (kg/kg and #/kg and theta) -REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) :: & -! instantaneous processes : - ZTOT_RC_HENU, ZTOT_CC_HENU, & ! cloud droplet nucleation (HENU) : rc, Nc, rv=-rc, th, CCNF, CCNA - ZTOT_CR_BRKU, & ! spontaneous break up of drops (BRKU) : Nr - ZTOT_RI_HIND, ZTOT_CI_HIND, & ! heterogeneous IFN nucleation (HIND) : rv=-ri, ri, Ni, th, IFNF, IFNN - ZTOT_RC_HINC, ZTOT_CC_HINC, & ! heterogeneous coated IFN nucl. (HINC) : rc, Nc, ri=-rc, Ni=-Nc, th, CCNacti, CCNnucl - ZTOT_RI_HONH, ZTOT_CI_HONH, & ! CCN homogeneous freezing (HONH) : ri, Ni, th, CCNF - ZTOT_TH_HONR, ZTOT_RR_HONR, ZTOT_CR_HONR, & ! rain drops homogeneous freezing (HONR) : rr, Nr, rg=-rr, th - ZTOT_TH_IMLT, ZTOT_RC_IMLT, ZTOT_CC_IMLT, & ! ice melting (IMLT) : rc, Nc, ri=-rc, Ni=-Nc, th, IFNF, IFNA -! continuous processes : - ZTOT_TH_HONC, ZTOT_RC_HONC, ZTOT_CC_HONC, & ! droplets homogeneous freezing (HONC) : rc, Nc, ri=-rc, Ni=-Nc, th - ZTOT_CC_SELF, & ! self collection of droplets (SELF) : Nc - ZTOT_RC_AUTO, ZTOT_CC_AUTO, ZTOT_CR_AUTO, & ! autoconversion of cloud droplets (AUTO) : rc, Nc, rr=-rc, Nr - ZTOT_RC_ACCR, ZTOT_CC_ACCR, & ! accretion of droplets by rain drops (ACCR) : rc, Nc, rr=-rr - ZTOT_CR_SCBU, & ! self collectio break up of drops (SCBU) : Nr - ZTOT_TH_EVAP, ZTOT_RC_EVAP, ZTOT_CC_EVAP, ZTOT_RR_EVAP, ZTOT_CR_EVAP, & ! evaporation of rain drops (EVAP) : rv=-rr-rc, rc, Nc, rr, Nr, th - ZTOT_RI_CNVI, ZTOT_CI_CNVI, & ! conversion snow -> ice (CNVI) : ri, Ni, rs=-ri - ZTOT_TH_DEPS, ZTOT_RS_DEPS, & ! deposition of vapor on snow (DEPS) : rv=-rs, rs, th - ZTOT_RI_CNVS, ZTOT_CI_CNVS, & ! conversion ice -> snow (CNVS) : ri, Ni, rs=-ri - ZTOT_RI_AGGS, ZTOT_CI_AGGS, & ! aggregation of ice on snow (AGGS) : ri, Ni, rs=-ri - ZTOT_TH_DEPG, ZTOT_RG_DEPG, & ! deposition of vapor on graupel (DEPG) : rv=-rg, rg, th - ZTOT_TH_BERFI, ZTOT_RC_BERFI, & ! Bergeron (BERFI) : rc, ri=-rc, th - ZTOT_TH_RIM, ZTOT_RC_RIM, ZTOT_CC_RIM, ZTOT_RS_RIM, ZTOT_RG_RIM, & ! cloud droplet riming (RIM) : rc, Nc, rs, rg, th - ZTOT_RI_HMS, ZTOT_CI_HMS, ZTOT_RS_HMS, & ! hallett mossop snow (HMS) : ri, Ni, rs - ZTOT_TH_ACC, ZTOT_RR_ACC, ZTOT_CR_ACC, ZTOT_RS_ACC, ZTOT_RG_ACC, & ! rain accretion on aggregates (ACC) : rr, Nr, rs, rg, th - ZTOT_RS_CMEL, & ! conversion-melting (CMEL) : rs, rg=-rs - ZTOT_TH_CFRZ, ZTOT_RR_CFRZ, ZTOT_CR_CFRZ, ZTOT_RI_CFRZ, ZTOT_CI_CFRZ, & ! rain freezing (CFRZ) : rr, Nr, ri, Ni, rg=-rr-ri, th - ZTOT_TH_WETG, ZTOT_RC_WETG, ZTOT_CC_WETG, ZTOT_RR_WETG, ZTOT_CR_WETG, & ! wet growth of graupel (WETG) : rc, NC, rr, Nr, ri, Ni, rs, rg, rh, th - ZTOT_RI_WETG, ZTOT_CI_WETG, ZTOT_RS_WETG, ZTOT_RG_WETG, ZTOT_RH_WETG, & ! wet growth of graupel (WETG) : rc, NC, rr, Nr, ri, Ni, rs, rg, rh, th - ZTOT_TH_DRYG, ZTOT_RC_DRYG, ZTOT_CC_DRYG, ZTOT_RR_DRYG, ZTOT_CR_DRYG, & ! dry growth of graupel (DRYG) : rc, Nc, rr, Nr, ri, Ni, rs, rg, th - ZTOT_RI_DRYG, ZTOT_CI_DRYG, ZTOT_RS_DRYG, ZTOT_RG_DRYG, & ! dry growth of graupel (DRYG) : rc, Nc, rr, Nr, ri, Ni, rs, rg, th - ZTOT_RI_HMG, ZTOT_CI_HMG, ZTOT_RG_HMG, & ! hallett mossop graupel (HMG) : ri, Ni, rg - ZTOT_TH_GMLT, ZTOT_RR_GMLT, ZTOT_CR_GMLT, & ! graupel melting (GMLT) : rr, Nr, rg=-rr, th - ZTOT_RC_WETH, ZTOT_CC_WETH, ZTOT_RR_WETH, ZTOT_CR_WETH, & ! wet growth of hail (WETH) : rc, Nc, rr, Nr, ri, Ni, rs, rg, rh, th - ZTOT_RI_WETH, ZTOT_CI_WETH, ZTOT_RS_WETH, ZTOT_RG_WETH, ZTOT_RH_WETH, & ! wet growth of hail (WETH) : rc, Nc, rr, Nr, ri, Ni, rs, rg, rh, th - ZTOT_RG_COHG, & ! conversion of hail into graupel (COHG) : rg, rh - ZTOT_RR_HMLT, ZTOT_CR_HMLT ! hail melting (HMLT) : rr, Nr, rh=-rr, th -! -! -! concentration changes by instantaneous processes (#/kg) (instant + total): -! Unused so far, necessary if we want detailed budgets of aerosols -!!$REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NCCN) :: & -!!$ Z_CCNF_HENU, ZTOT_CCNF_HENU, & ! cloud droplet nucleation (HENU) : rc, Nc, rv=-rc, th, CCNF, CCNA=-CCNF -!!$ Z_CCNA_HINC, ZTOT_CCNA_HINC, & ! heterogeneous coated IFN nucl. (HINC) : rc, Nc, ri=-rc, Ni=-Nc, th, CCNacti, CCNnucl=-CCNacti -!!$ Z_CCNF_HONH, ZTOT_CCNF_HONH ! CCN homogeneous freezing (HONH) : ri, Ni, th, CCNF -!!$REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NIFN) :: & -!!$ Z_IFNF_HIND, ZTOT_IFNF_HIND, & ! heterogeneous IFN nucleation (HIND) : rv=-ri, ri, Ni, th, IFNF, IFNN=-IFNF -!!$ Z_IFNF_IMLT, ZTOT_IFNF_IMLT ! ice melting (IMLT) : rc, Nc, ri=-rc, Ni=-Nc, th, IFNF, IFNA=-IFNF -! -! -!For mixing-ratio splitting -REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: & - Z0RVT, & ! Water vapor m.r. at the beginig of the current loop - Z0RCT, Z0CCT, & ! Cloud water m.r. at the beginig of the current loop - Z0RRT, Z0CRT, & ! Rain water m.r. at the beginig of the current loop - Z0RIT, Z0CIT, & ! Pristine ice m.r. at the beginig of the current loop - Z0RST, & ! Snow/aggregate m.r. at the beginig of the current loop - Z0RGT, & ! Graupel m.r. at the beginig of the current loop - Z0RHT ! Hail m.r. at the beginig of the current loop -! Unused, necessary if concentration splitting -!!$REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NCCN) :: Z0CCNFT, Z0CCNAT -!!$REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NIFN) :: Z0IFNFT, Z0IFNNT -!!$REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NIMM) :: Z0IMMNT -!!$REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: Z0HOMFT -! -! 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) -REAL, DIMENSION(:,:), ALLOCATABLE :: ZB_IFNN -! -REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: & - IITER, & ! Number of iterations done (with real tendencies computation) - ZTIME, & ! Current integration time (starts with 0 and ends with PTSTEP) -! ZMAXTIME, & ! Time on which we can apply the current tendencies -! ZTIME_THRESHOLD, & ! Time to reach threshold - ZTIME_LASTCALL ! Integration time when last tendecies call has been done -LOGICAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: & - LLCOMPUTE ! Points where we must compute tendencies -REAL, DIMENSION(:), ALLOCATABLE :: ZMAXTIME, ZTIME_THRESHOLD -! -! -! Various parameters -INTEGER :: IIB ! Define the domain where is -INTEGER :: IIE ! the microphysical sources have to be computed -INTEGER :: IIT ! -INTEGER :: IJB ! -INTEGER :: IJE ! -INTEGER :: IJT ! -INTEGER :: IKB, IKTB, IKT! -INTEGER :: IKE, IKTE ! -INTEGER :: INB_ITER_MAX ! Maximum number of iterations (with real tendencies computation) -! -REAL :: ZTSTEP ! length of sub-timestep in case of time splitting -REAL :: ZINV_TSTEP ! Inverse ov PTSTEP -! -! -! For total tendencies computation -REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: & - ZW_RVS, & - ZW_RCS, ZW_CCS, & - ZW_RRS, ZW_CRS, & - ZW_RIS, ZW_CIS, & - ZW_RSS, & - ZW_RGS, & - ZW_RHS, & - ZW_THS -REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NCCN) :: ZW_CCNFS, ZW_CCNAS -REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NIFN) :: ZW_IFNFS, ZW_IFNNS -REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NIMM) :: ZW_IMMNS -REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: ZW_HOMFS -! -REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: & - PEXN, & - PDZZ, & - ZEXN, & - ZT, & - ZTM, & - ZZ_LSFACT, & - ZZ_LVFACT, & - ZZT, & - ZLSFACT, & - ZLVFACT, & - ZW1, & - ZLBDC -! -INTEGER :: KRR, & - KKA, & ! near ground array index - KKU, & ! highest level array index - KKL, & ! levels ordering (=1 for MNH, =-1 for AROME) - II ! index for loops -! -LOGICAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: MASK ! Points where we must run the microphysics scheme -REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: ZRT_SUM ! Total condensed water mr -INTEGER :: IPACK -INTEGER, DIMENSION(:), ALLOCATABLE :: I1, I2, I3 -REAL, DIMENSION(:), ALLOCATABLE :: & - ZTHT1D, & - ZRVT1D, & - ZRCT1D, & - ZRRT1D, & - ZRIT1D, & - ZRST1D, & - ZRGT1D, & - ZRHT1D, & - ZCCT1D, & - ZCRT1D, & - ZCIT1D, & - ZP1D, & - ZRHODREF1D, & - ZEXNREF1D, & - ZEXN1D, & - ZEVAP1D, & - ZTIME1D, & - IITER1D, & - ZTIME_LASTCALL1D, & - Z0RVT1D, & - Z0RCT1D, & - Z0RRT1D, & - Z0RIT1D, & - Z0RST1D, & - Z0RGT1D, & - Z0RHT1D -LOGICAL, DIMENSION(:), ALLOCATABLE :: LLCOMPUTE1D -REAL, DIMENSION(:,:), ALLOCATABLE :: ZIFNN1D -!------------------------------------------------------------------------------- -! -!* 0. Init -! ---- -! -ZTHS(:,:,:) = PTHS(:,:,:) -ZTHT(:,:,:) = PTHS(:,:,:) * PTSTEP -ZRVT(:,:,:) = 0. -ZRVS(:,:,:) = 0. -ZRCT(:,:,:) = 0. -ZRCS(:,:,:) = 0. -ZRRT(:,:,:) = 0. -ZRRS(:,:,:) = 0. -ZRIT(:,:,:) = 0. -ZRIS(:,:,:) = 0. -ZRST(:,:,:) = 0. -ZRSS(:,:,:) = 0. -ZRGT(:,:,:) = 0. -ZRGS(:,:,:) = 0. -ZRHT(:,:,:) = 0. -ZRHS(:,:,:) = 0. -ZRT_SUM(:,:,:) = 0. -ZCCT(:,:,:) = 0. -ZCCS(:,:,:) = 0. -ZCRT(:,:,:) = 0. -ZCRS(:,:,:) = 0. -ZCIT(:,:,:) = 0. -ZCIS(:,:,:) = 0. -ZCCNFT(:,:,:,:) = 0. -ZCCNAT(:,:,:,:) = 0. -ZCCNFS(:,:,:,:) = 0. -ZCCNAS(:,:,:,:) = 0. -ZIFNFT(:,:,:,:) = 0. -ZIFNNT(:,:,:,:) = 0. -ZIFNFS(:,:,:,:) = 0. -ZIFNNS(:,:,:,:) = 0. -ZIMMNT(:,:,:,:) = 0. -ZIMMNS(:,:,:,:) = 0. -ZHOMFT(:,:,:) = 0. -ZHOMFS(:,:,:) = 0. - -IF(LBU_ENABLE) THEN - ZTOT_CR_BRKU(:,:,:) = 0. - ZTOT_TH_HONR(:,:,:) = 0. - ZTOT_RR_HONR(:,:,:) = 0. - ZTOT_CR_HONR(:,:,:) = 0. - ZTOT_TH_IMLT(:,:,:) = 0. - ZTOT_RC_IMLT(:,:,:) = 0. - ZTOT_CC_IMLT(:,:,:) = 0. - ZTOT_TH_HONC(:,:,:) = 0. - ZTOT_RC_HONC(:,:,:) = 0. - ZTOT_CC_HONC(:,:,:) = 0. - ZTOT_CC_SELF(:,:,:) = 0. - ZTOT_RC_AUTO(:,:,:) = 0. - ZTOT_CC_AUTO(:,:,:) = 0. - ZTOT_CR_AUTO(:,:,:) = 0. - ZTOT_RC_ACCR(:,:,:) = 0. - ZTOT_CC_ACCR(:,:,:) = 0. - ZTOT_CR_SCBU(:,:,:) = 0. - ZTOT_TH_EVAP(:,:,:) = 0. - ZTOT_RC_EVAP(:,:,:) = 0. - ZTOT_CC_EVAP(:,:,:) = 0. - ZTOT_RR_EVAP(:,:,:) = 0. - ZTOT_CR_EVAP(:,:,:) = 0. - ZTOT_RI_CNVI(:,:,:) = 0. - ZTOT_CI_CNVI(:,:,:) = 0. - ZTOT_TH_DEPS(:,:,:) = 0. - ZTOT_RS_DEPS(:,:,:) = 0. - ZTOT_RI_CNVS(:,:,:) = 0. - ZTOT_CI_CNVS(:,:,:) = 0. - ZTOT_RI_AGGS(:,:,:) = 0. - ZTOT_CI_AGGS(:,:,:) = 0. - ZTOT_TH_DEPG(:,:,:) = 0. - ZTOT_RG_DEPG(:,:,:) = 0. - ZTOT_TH_BERFI(:,:,:) = 0. - ZTOT_RC_BERFI(:,:,:) = 0. - ZTOT_TH_RIM(:,:,:) = 0. - ZTOT_RC_RIM(:,:,:) = 0. - ZTOT_CC_RIM(:,:,:) = 0. - ZTOT_RS_RIM(:,:,:) = 0. - ZTOT_RG_RIM(:,:,:) = 0. - ZTOT_RI_HMS(:,:,:) = 0. - ZTOT_CI_HMS(:,:,:) = 0. - ZTOT_RS_HMS(:,:,:) = 0. - ZTOT_TH_ACC(:,:,:) = 0. - ZTOT_RR_ACC(:,:,:) = 0. - ZTOT_CR_ACC(:,:,:) = 0. - ZTOT_RS_ACC(:,:,:) = 0. - ZTOT_RG_ACC(:,:,:) = 0. - ZTOT_RS_CMEL(:,:,:) = 0. - ZTOT_TH_CFRZ(:,:,:) = 0. - ZTOT_RR_CFRZ(:,:,:) = 0. - ZTOT_CR_CFRZ(:,:,:) = 0. - ZTOT_RI_CFRZ(:,:,:) = 0. - ZTOT_CI_CFRZ(:,:,:) = 0. - ZTOT_TH_WETG(:,:,:) = 0. - ZTOT_RC_WETG(:,:,:) = 0. - ZTOT_CC_WETG(:,:,:) = 0. - ZTOT_RR_WETG(:,:,:) = 0. - ZTOT_CR_WETG(:,:,:) = 0. - ZTOT_RI_WETG(:,:,:) = 0. - ZTOT_CI_WETG(:,:,:) = 0. - ZTOT_RS_WETG(:,:,:) = 0. - ZTOT_RG_WETG(:,:,:) = 0. - ZTOT_RH_WETG(:,:,:) = 0. - ZTOT_TH_DRYG(:,:,:) = 0. - ZTOT_RC_DRYG(:,:,:) = 0. - ZTOT_CC_DRYG(:,:,:) = 0. - ZTOT_RR_DRYG(:,:,:) = 0. - ZTOT_CR_DRYG(:,:,:) = 0. - ZTOT_RI_DRYG(:,:,:) = 0. - ZTOT_CI_DRYG(:,:,:) = 0. - ZTOT_RS_DRYG(:,:,:) = 0. - ZTOT_RG_DRYG(:,:,:) = 0. - ZTOT_RI_HMG(:,:,:) = 0. - ZTOT_CI_HMG(:,:,:) = 0. - ZTOT_RG_HMG(:,:,:) = 0. - ZTOT_TH_GMLT(:,:,:) = 0. - ZTOT_RR_GMLT(:,:,:) = 0. - ZTOT_CR_GMLT(:,:,:) = 0. - ZTOT_RC_WETH(:,:,:) = 0. - ZTOT_CC_WETH(:,:,:) = 0. - ZTOT_RR_WETH(:,:,:) = 0. - ZTOT_CR_WETH(:,:,:) = 0. - ZTOT_RI_WETH(:,:,:) = 0. - ZTOT_CI_WETH(:,:,:) = 0. - ZTOT_RS_WETH(:,:,:) = 0. - ZTOT_RG_WETH(:,:,:) = 0. - ZTOT_RH_WETH(:,:,:) = 0. - ZTOT_RG_COHG(:,:,:) = 0. - ZTOT_RR_HMLT(:,:,:) = 0. - ZTOT_CR_HMLT(:,:,:) = 0. -END IF -! -! Initial values computed as source * PTSTEP -! -! Mixing ratios -! -KRR=SIZE(PRT,4) -ZRVT(:,:,:) = PRS(:,:,:,1) * PTSTEP -ZRVS(:,:,:) = PRS(:,:,:,1) -IF ( KRR .GE. 2 ) ZRCT(:,:,:) = PRS(:,:,:,2) * PTSTEP -IF ( KRR .GE. 2 ) ZRCS(:,:,:) = PRS(:,:,:,2) -IF ( KRR .GE. 3 ) ZRRT(:,:,:) = PRS(:,:,:,3) * PTSTEP -IF ( KRR .GE. 3 ) ZRRS(:,:,:) = PRS(:,:,:,3) -IF ( KRR .GE. 4 ) ZRIT(:,:,:) = PRS(:,:,:,4) * PTSTEP -IF ( KRR .GE. 4 ) ZRIS(:,:,:) = PRS(:,:,:,4) -IF ( KRR .GE. 5 ) ZRST(:,:,:) = PRS(:,:,:,5) * PTSTEP -IF ( KRR .GE. 5 ) ZRSS(:,:,:) = PRS(:,:,:,5) -IF ( KRR .GE. 6 ) ZRGT(:,:,:) = PRS(:,:,:,6) * PTSTEP -IF ( KRR .GE. 6 ) ZRGS(:,:,:) = PRS(:,:,:,6) -IF ( KRR .GE. 7 ) ZRHT(:,:,:) = PRS(:,:,:,7) * PTSTEP -IF ( KRR .GE. 7 ) ZRHS(:,:,:) = PRS(:,:,:,7) -ZRT_SUM(:,:,:) = ZRCT(:,:,:) + ZRRT(:,:,:) + ZRIT(:,:,:) + ZRST(:,:,:) + ZRGT(:,:,:) + ZRHT(:,:,:) -! -! Concentrations -! -IF ( LWARM_LIMA ) ZCCT(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC) * PTSTEP -IF ( LWARM_LIMA ) ZCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC) -IF ( LWARM_LIMA .AND. LRAIN_LIMA ) ZCRT(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR) * PTSTEP -IF ( LWARM_LIMA .AND. LRAIN_LIMA ) ZCRS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR) -IF ( LCOLD_LIMA ) ZCIT(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI) * PTSTEP -IF ( LCOLD_LIMA ) ZCIS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI) -! -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 -IF ( NMOD_CCN .GE. 1 ) ZCCNFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) -IF ( NMOD_CCN .GE. 1 ) ZCCNAS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1) -! -IF ( NMOD_IFN .GE. 1 ) ZIFNFT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1) * PTSTEP -IF ( NMOD_IFN .GE. 1 ) ZIFNNT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1) * PTSTEP -IF ( NMOD_IFN .GE. 1 ) ZIFNFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1) -IF ( NMOD_IFN .GE. 1 ) ZIFNNS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1) -! -IF ( NMOD_IMM .GE. 1 ) ZIMMNT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1) * PTSTEP -IF ( NMOD_IMM .GE. 1 ) ZIMMNS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1) -! -IF ( LCOLD_LIMA .AND. LHHONI_LIMA ) ZHOMFT(:,:,:) = PSVS(:,:,:,NSV_LIMA_HOM_HAZE) * PTSTEP -IF ( LCOLD_LIMA .AND. LHHONI_LIMA ) ZHOMFS(:,:,:) = PSVS(:,:,:,NSV_LIMA_HOM_HAZE) -! -!------------------------------------------------------------------------------- -! -!* 1. Sedimentation -! ------------- -! -PEXN(:,:,:)=PEXNREF(:,:,:) -ZEXN(:,:,:)=PEXNREF(:,:,:) -ZT(:,:,:) = ZTHT(:,:,:) * PEXN(:,:,:) -! -ZW1(:,:,:)=0. -ZLBDC(:,:,:) = 1.E10 -WHERE (ZRCT(:,:,:)>XRTMIN(2) .AND. ZCCT(:,:,:)>XCTMIN(2)) - ZLBDC(:,:,:) = XLBC*ZCCT(:,:,:) / ZRCT(:,:,:) - ZLBDC(:,:,:) = ZLBDC(:,:,:)**XLBEXC -END WHERE -CALL LIMA_WARM_SEDIMENTATION (LSEDC_LIMA, KSPLITR, PTSTEP, 1, & - HFMFILE, 'DUMMY', OCLOSE_OUT, & - PZZ, PRHODREF, PPABST, ZT, & - ZLBDC, & - ZRCT, ZRRT, ZCCT, ZCRT, & - ZRCS, ZRRS, ZCCS, ZCRS, & - PINPRC, PINPRR, & - ZW1 ) -! -CALL LIMA_COLD_SEDIMENTATION (LSEDI_LIMA, KSPLITG, PTSTEP, 1, & - HFMFILE, 'DUMMY', OCLOSE_OUT, & - PZZ, PRHODJ, PRHODREF, & - ZRIT, ZCIT, & - ZRIS, ZRSS, ZRGS, ZRHS, ZCIS, & - PINPRS, PINPRG, & - PINPRH ) -! -IF ( KRR .GE. 2 ) ZRCT(:,:,:) = ZRCS(:,:,:) * PTSTEP -IF ( KRR .GE. 3 ) ZRRT(:,:,:) = ZRRS(:,:,:) * PTSTEP -IF ( KRR .GE. 4 ) ZRIT(:,:,:) = ZRIS(:,:,:) * PTSTEP -IF ( KRR .GE. 5 ) ZRST(:,:,:) = ZRSS(:,:,:) * PTSTEP -IF ( KRR .GE. 6 ) ZRGT(:,:,:) = ZRGS(:,:,:) * PTSTEP -IF ( KRR .GE. 7 ) ZRHT(:,:,:) = ZRHS(:,:,:) * PTSTEP -ZRT_SUM(:,:,:) = ZRCT(:,:,:) + ZRRT(:,:,:) + ZRIT(:,:,:) + ZRST(:,:,:) + ZRGT(:,:,:) + ZRHT(:,:,:) -! -IF ( LWARM_LIMA ) ZCCT(:,:,:) = ZCCS(:,:,:) * PTSTEP -IF ( LWARM_LIMA .AND. LRAIN_LIMA ) ZCRT(:,:,:) = ZCRS(:,:,:) * PTSTEP -IF ( LCOLD_LIMA ) ZCIT(:,:,:) = ZCIS(:,:,:) * PTSTEP -! -! Call budgets -! -IF(LBU_ENABLE) THEN - IF (LBUDGET_RC .AND. LSEDC_LIMA) CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'SEDI_BU_RRC',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RR) CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'SEDI_BU_RRR',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RI .AND. LSEDI_LIMA) CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'SEDI_BU_RRI',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RS) CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'SEDI_BU_RRS',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RG) CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'SEDI_BU_RRG',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_RH) CALL BUDGET_DDH (ZRHS(:,:,:)*PRHODJ(:,:,:), 12 , 'SEDI_BU_RRH',YDDDH, YDLDDH, YDMDDH) - IF (LBUDGET_SV) THEN - IF (LSEDC_LIMA) CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'SEDI_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (LRAIN_LIMA) CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'SEDI_BU_RSV',YDDDH, YDLDDH, YDMDDH) - IF (LSEDI_LIMA) CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'SEDI_BU_RSV',YDDDH, YDLDDH, YDMDDH) - END IF -END IF -! -!------------------------------------------------------------------------------- -! -!* 2. Nucleation processes -! -------------------- -! -! -IF( LACTIT_LIMA ) THEN - ZTM(:,:,:) = PTHM(:,:,:) * PEXN(:,:,:) -ELSE - ZTM(:,:,:) = ZT(:,:,:) -END IF -! -CALL LIMA_NUCLEATION_PROCS (PTSTEP, HFMFILE, OCLOSE_OUT, PRHODJ, & - PRHODREF, PEXN, PPABST, ZT, ZTM, PW_NU, & - ZTHT, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, & - ZCCT, ZCRT, ZCIT, & - ZCCNFT, ZCCNAT, ZIFNFT, ZIFNNT, ZIMMNT, ZHOMFT,YDDDH, YDLDDH, YDMDDH ) -ZRT_SUM(:,:,:) = ZRCT(:,:,:) + ZRRT(:,:,:) + ZRIT(:,:,:) + ZRST(:,:,:) + ZRGT(:,:,:) + ZRHT(:,:,:) -! -! Saving sources before microphysics time-splitting loop -! -ZRCS(:,:,:) = ZRCT(:,:,:) / PTSTEP -ZRRS(:,:,:) = ZRRT(:,:,:) / PTSTEP -ZRIS(:,:,:) = ZRIT(:,:,:) / PTSTEP -ZRSS(:,:,:) = ZRST(:,:,:) / PTSTEP -ZRGS(:,:,:) = ZRGT(:,:,:) / PTSTEP -ZRHS(:,:,:) = ZRHT(:,:,:) / PTSTEP -! -ZCCS(:,:,:) = ZCCT(:,:,:) / PTSTEP -ZCRS(:,:,:) = ZCRT(:,:,:) / PTSTEP -ZCIS(:,:,:) = ZCIT(:,:,:) / PTSTEP -! -ZCCNFS(:,:,:,:) = ZCCNFS(:,:,:,:) / PTSTEP -ZCCNAS(:,:,:,:) = ZCCNAS(:,:,:,:) / PTSTEP -ZIFNFS(:,:,:,:) = ZIFNFS(:,:,:,:) / PTSTEP -ZIFNNS(:,:,:,:) = ZIFNNS(:,:,:,:) / PTSTEP -ZIMMNS(:,:,:,:) = ZIMMNS(:,:,:,:) / PTSTEP -ZHOMFS(:,:,:) = ZHOMFS(:,:,:) / PTSTEP -! -ZTHS(:,:,:) = ZTHT(:,:,:) / PTSTEP -! -! -!* 1. PREPARE COMPUTATIONS -! ----------------------- -! -! -PDZZ(:,:,:)=PZZ(:,:,:) -KKA=1 -KKU=SIZE(PDZZ,3) -KKL=1 -! -IIB=1+JPHEXT -IIE=SIZE(PDZZ,1) - JPHEXT -IIT=SIZE(PDZZ,1) -IJB=1+JPHEXT -IJE=SIZE(PDZZ,2) - JPHEXT -IJT=SIZE(PDZZ,2) -IKB=KKA+JPVEXT*KKL -IKE=KKU-JPVEXT*KKL -IKT=SIZE(PDZZ,3) -IKTB=1+JPVEXT -IKTE=IKT-JPVEXT -! -ZINV_TSTEP=1./PTSTEP -! -PEXN(:,:,:)=PEXNREF(:,:,:) -ZEXN(:,:,:)=PEXNREF(:,:,:) -!ZTHT(:,:,:)=PTHT(:,:,:) -! -!ZT(:,:,:) = PTHT(:,:,:) * PEXN(:,:,:) -!!$IF( LACTIT_LIMA ) THEN -!!$ ZTM(:,:,:) = PTHM(:,:,:) * PEXN(:,:,:) -!!$ELSE -!!$ ZTM(:,:,:) = ZT(:,:,:) -!!$END IF -! LSFACT and LVFACT without exner -ZZ_LSFACT(:,:,:)=(XLSTT+(XCPV-XCI)*(ZT(:,:,:)-XTT)) & - /( XCPD + XCPV*PRT(:,:,:,1) + XCL*(SUM(PRT(:,:,:,2:3),4)) & - + XCI*(SUM(PRT(:,:,:,4:),4))) -ZZ_LVFACT(:,:,:)=(XLVTT+(XCPV-XCL)*(ZT(:,:,:)-XTT)) & - /( XCPD + XCPV*PRT(:,:,:,1) + XCL*(SUM(PRT(:,:,:,2:3),4)) & - + XCI*(SUM(PRT(:,:,:,4:),4))) -! -! Setting everything at 0 -! - -! -!------------------------------------------------------------------------------- -! -!* 2. LOOP -! ---- -! -! -! Maximum number of iterations -INB_ITER_MAX=NMAXITER -IF(XTSTEP_TS/=0.)THEN - INB_ITER_MAX=MAX(1, INT(PTSTEP/XTSTEP_TS)) !At least the number of iterations needed for the time-splitting - ZTSTEP=PTSTEP/INB_ITER_MAX - INB_ITER_MAX=MAX(NMAXITER, INB_ITER_MAX) !Fot the case XMRSTEP/=0. at the same time -ENDIF -IITER(:,:,:)=0 -ZTIME(:,:,:)=0. ! Current integration time (all points may have a different integration time) -! -! Begin the huge time splitting loop -! -WHERE (ZRT_SUM(:,:,:)<XRTMIN(2)) ZTIME(:,:,:)=PTSTEP ! no need to treat hydrometeor-free point -! -DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKB:IKE)<PTSTEP)) - ! - IF(XMRSTEP/=0.) THEN - ! In this case we need to remember the mixing ratios used to compute the tendencies - ! because when mixing ratio has evolved more than a threshold, we must re-compute tendecies - Z0RVT(:,:,:)=ZRVT(:,:,:) - Z0RCT(:,:,:)=ZRCT(:,:,:) - Z0CCT(:,:,:)=ZCCT(:,:,:) - Z0RRT(:,:,:)=ZRRT(:,:,:) - Z0CRT(:,:,:)=ZCRT(:,:,:) - Z0RIT(:,:,:)=ZRIT(:,:,:) - Z0CIT(:,:,:)=ZCIT(:,:,:) - Z0RST(:,:,:)=ZRST(:,:,:) - Z0RGT(:,:,:)=ZRGT(:,:,:) - Z0RHT(:,:,:)=ZRHT(:,:,:) -!!$ Z0CCNFT(:,:,:,:) = ZCCNFT(:,:,:,:) -!!$ Z0CCNAT(:,:,:,:) = ZCCNAT(:,:,:,:) -!!$ Z0IFNFT(:,:,:,:) = ZIFNFT(:,:,:,:) -!!$ Z0IFNNT(:,:,:,:) = ZIFNNT(:,:,:,:) -!!$ Z0IMMNT(:,:,:,:) = ZIMMNT(:,:,:,:) -!!$ Z0HOMFT(:,:,:) = ZHOMFT(:,:,:) - ENDIF - ! - IF(XTSTEP_TS/=0.) THEN - ! In this case we need to remember the time when tendencies were computed - ! because when time has evolved more than a limit, we must re-compute tendecies - ZTIME_LASTCALL(:,:,:)=ZTIME(:,:,:) - ENDIF - ! - LLCOMPUTE(:,:,:)=.FALSE. - LLCOMPUTE(IIB:IIE,IJB:IJE,IKB:IKE) = ZTIME(IIB:IIE,IJB:IJE,IKB:IKE)<PTSTEP ! Compuation only for points for which integration time has not reached the timestep - WHERE(LLCOMPUTE(:,:,:)) - IITER(:,:,:)=IITER(:,:,:)+1 - END WHERE - ! - DO WHILE(ANY(LLCOMPUTE(:,:,:))) ! Loop to adjust tendencies when we cross the 0°C or when a species disappears - - ! - ! Packing variables to run computations only where necessary - ! - IPACK = COUNT(LLCOMPUTE) - ALLOCATE(I1(IPACK)) - ALLOCATE(I2(IPACK)) - ALLOCATE(I3(IPACK)) - ALLOCATE(ZRHODREF1D(IPACK)) - ALLOCATE(ZEXNREF1D(IPACK)) - ALLOCATE(ZEXN1D(IPACK)) - ALLOCATE(ZP1D(IPACK)) - ALLOCATE(ZTHT1D(IPACK)) - ALLOCATE(ZRVT1D(IPACK)) - ALLOCATE(ZRCT1D(IPACK)) - ALLOCATE(ZRRT1D(IPACK)) - ALLOCATE(ZRIT1D(IPACK)) - ALLOCATE(ZRST1D(IPACK)) - ALLOCATE(ZRGT1D(IPACK)) - ALLOCATE(ZRHT1D(IPACK)) - ALLOCATE(ZCCT1D(IPACK)) - ALLOCATE(ZCRT1D(IPACK)) - ALLOCATE(ZCIT1D(IPACK)) - ALLOCATE(ZIFNN1D(IPACK,NMOD_IFN)) - ALLOCATE(ZEVAP1D(IPACK)) - ALLOCATE(ZTIME1D(IPACK)) - ALLOCATE(LLCOMPUTE1D(IPACK)) - ALLOCATE(IITER1D(IPACK)) - ALLOCATE(ZTIME_LASTCALL1D(IPACK)) - ALLOCATE(Z0RVT1D(IPACK)) - ALLOCATE(Z0RCT1D(IPACK)) - ALLOCATE(Z0RRT1D(IPACK)) - ALLOCATE(Z0RIT1D(IPACK)) - ALLOCATE(Z0RST1D(IPACK)) - ALLOCATE(Z0RGT1D(IPACK)) - ALLOCATE(Z0RHT1D(IPACK)) - IPACK = COUNTJV(LLCOMPUTE,I1,I2,I3) - DO II=1,IPACK - ZRHODREF1D(II) = PRHODREF(I1(II),I2(II),I3(II)) - ZEXNREF1D(II) = PEXNREF(I1(II),I2(II),I3(II)) - ZEXN1D(II) = ZEXN(I1(II),I2(II),I3(II)) - ZP1D(II) = PPABST(I1(II),I2(II),I3(II)) - ZTHT1D(II) = ZTHT(I1(II),I2(II),I3(II)) - ZRVT1D(II) = ZRVT(I1(II),I2(II),I3(II)) - ZRCT1D(II) = ZRCT(I1(II),I2(II),I3(II)) - ZRRT1D(II) = ZRRT(I1(II),I2(II),I3(II)) - ZRIT1D(II) = ZRIT(I1(II),I2(II),I3(II)) - ZRST1D(II) = ZRST(I1(II),I2(II),I3(II)) - ZRGT1D(II) = ZRGT(I1(II),I2(II),I3(II)) - ZRHT1D(II) = ZRHT(I1(II),I2(II),I3(II)) - 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)) - 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)) - LLCOMPUTE1D(II) = LLCOMPUTE(I1(II),I2(II),I3(II)) - IITER1D(II) = IITER(I1(II),I2(II),I3(II)) - ZTIME_LASTCALL1D(II) = ZTIME_LASTCALL(I1(II),I2(II),I3(II)) - Z0RVT1D(II) = Z0RVT(I1(II),I2(II),I3(II)) - Z0RCT1D(II) = Z0RCT(I1(II),I2(II),I3(II)) - Z0RRT1D(II) = Z0RRT(I1(II),I2(II),I3(II)) - Z0RIT1D(II) = Z0RIT(I1(II),I2(II),I3(II)) - Z0RST1D(II) = Z0RST(I1(II),I2(II),I3(II)) - Z0RGT1D(II) = Z0RGT(I1(II),I2(II),I3(II)) - Z0RHT1D(II) = Z0RHT(I1(II),I2(II),I3(II)) - END DO - ! - ! Allocating 1D variables - ! - ALLOCATE(ZMAXTIME(IPACK)) ; ZMAXTIME(:) = 0. - ALLOCATE(ZTIME_THRESHOLD(IPACK)) ; ZTIME_THRESHOLD(:) = 0. - ! - ALLOCATE(ZA_TH(IPACK)) ; ZA_TH(:) = 0. - ALLOCATE(ZA_RV(IPACK)) ; ZA_RV(:) = 0. - ALLOCATE(ZA_RC(IPACK)) ; ZA_RC(:) = 0. - ALLOCATE(ZA_RR(IPACK)) ; ZA_RR(:) = 0. - ALLOCATE(ZA_RI(IPACK)) ; ZA_RI(:) = 0. - ALLOCATE(ZA_RS(IPACK)) ; ZA_RS(:) = 0. - ALLOCATE(ZA_RG(IPACK)) ; ZA_RG(:) = 0. - ALLOCATE(ZA_RH(IPACK)) ; ZA_RH(:) = 0. - ALLOCATE(ZA_CC(IPACK)) ; ZA_CC(:) = 0. - ALLOCATE(ZA_CR(IPACK)) ; ZA_CR(:) = 0. - ALLOCATE(ZA_CI(IPACK)) ; ZA_CI(:) = 0. - ! - ALLOCATE(ZB_TH(IPACK)) ; ZB_TH(:) = 0. - ALLOCATE(ZB_RV(IPACK)) ; ZB_RV(:) = 0. - ALLOCATE(ZB_RC(IPACK)) ; ZB_RC(:) = 0. - ALLOCATE(ZB_RR(IPACK)) ; ZB_RR(:) = 0. - ALLOCATE(ZB_RI(IPACK)) ; ZB_RI(:) = 0. - ALLOCATE(ZB_RS(IPACK)) ; ZB_RS(:) = 0. - ALLOCATE(ZB_RG(IPACK)) ; ZB_RG(:) = 0. - ALLOCATE(ZB_RH(IPACK)) ; ZB_RH(:) = 0. - ALLOCATE(ZB_CC(IPACK)) ; ZB_CC(:) = 0. - ALLOCATE(ZB_CR(IPACK)) ; ZB_CR(:) = 0. - ALLOCATE(ZB_CI(IPACK)) ; ZB_CI(:) = 0. - ALLOCATE(ZB_IFNN(IPACK,NMOD_IFN)) ; ZB_IFNN(:,:) = 0. - ! - ALLOCATE(Z_CR_BRKU(IPACK)) ; Z_CR_BRKU(:) = 0. - ALLOCATE(Z_TH_HONR(IPACK)) ; Z_TH_HONR(:) = 0. - ALLOCATE(Z_RR_HONR(IPACK)) ; Z_RR_HONR(:) = 0. - ALLOCATE(Z_CR_HONR(IPACK)) ; Z_CR_HONR(:) = 0. - ALLOCATE(Z_TH_IMLT(IPACK)) ; Z_TH_IMLT(:) = 0. - ALLOCATE(Z_RC_IMLT(IPACK)) ; Z_RC_IMLT(:) = 0. - ALLOCATE(Z_CC_IMLT(IPACK)) ; Z_CC_IMLT(:) = 0. - ALLOCATE(Z_TH_HONC(IPACK)) ; Z_TH_HONC(:) = 0. - ALLOCATE(Z_RC_HONC(IPACK)) ; Z_RC_HONC(:) = 0. - ALLOCATE(Z_CC_HONC(IPACK)) ; Z_CC_HONC(:) = 0. - ALLOCATE(Z_CC_SELF(IPACK)) ; Z_CC_SELF(:) = 0. - ALLOCATE(Z_RC_AUTO(IPACK)) ; Z_RC_AUTO(:) = 0. - ALLOCATE(Z_CC_AUTO(IPACK)) ; Z_CC_AUTO(:) = 0. - ALLOCATE(Z_CR_AUTO(IPACK)) ; Z_CR_AUTO(:) = 0. - ALLOCATE(Z_RC_ACCR(IPACK)) ; Z_RC_ACCR(:) = 0. - ALLOCATE(Z_CC_ACCR(IPACK)) ; Z_CC_ACCR(:) = 0. - ALLOCATE(Z_CR_SCBU(IPACK)) ; Z_CR_SCBU(:) = 0. - ALLOCATE(Z_TH_EVAP(IPACK)) ; Z_TH_EVAP(:) = 0. - ALLOCATE(Z_RR_EVAP(IPACK)) ; Z_RR_EVAP(:) = 0. - ALLOCATE(Z_RI_CNVI(IPACK)) ; Z_RI_CNVI(:) = 0. - ALLOCATE(Z_CI_CNVI(IPACK)) ; Z_CI_CNVI(:) = 0. - ALLOCATE(Z_TH_DEPS(IPACK)) ; Z_TH_DEPS(:) = 0. - ALLOCATE(Z_RS_DEPS(IPACK)) ; Z_RS_DEPS(:) = 0. - ALLOCATE(Z_RI_CNVS(IPACK)) ; Z_RI_CNVS(:) = 0. - ALLOCATE(Z_CI_CNVS(IPACK)) ; Z_CI_CNVS(:) = 0. - ALLOCATE(Z_RI_AGGS(IPACK)) ; Z_RI_AGGS(:) = 0. - ALLOCATE(Z_CI_AGGS(IPACK)) ; Z_CI_AGGS(:) = 0. - ALLOCATE(Z_TH_DEPG(IPACK)) ; Z_TH_DEPG(:) = 0. - ALLOCATE(Z_RG_DEPG(IPACK)) ; Z_RG_DEPG(:) = 0. - ALLOCATE(Z_TH_BERFI(IPACK)); Z_TH_BERFI(:) = 0. - ALLOCATE(Z_RC_BERFI(IPACK)); Z_RC_BERFI(:) = 0. - ALLOCATE(Z_TH_RIM(IPACK)) ; Z_TH_RIM = 0. - ALLOCATE(Z_RC_RIM(IPACK)) ; Z_RC_RIM = 0. - ALLOCATE(Z_CC_RIM(IPACK)) ; Z_CC_RIM = 0. - ALLOCATE(Z_RS_RIM(IPACK)) ; Z_RS_RIM = 0. - ALLOCATE(Z_RG_RIM(IPACK)) ; Z_RG_RIM = 0. - ALLOCATE(Z_RI_HMS(IPACK)) ; Z_RI_HMS = 0. - ALLOCATE(Z_CI_HMS(IPACK)) ; Z_CI_HMS = 0. - ALLOCATE(Z_RS_HMS(IPACK)) ; Z_RS_HMS = 0. - ALLOCATE(Z_TH_ACC(IPACK)) ; Z_TH_ACC = 0. - ALLOCATE(Z_RR_ACC(IPACK)) ; Z_RR_ACC = 0. - ALLOCATE(Z_CR_ACC(IPACK)) ; Z_CR_ACC = 0. - ALLOCATE(Z_RS_ACC(IPACK)) ; Z_RS_ACC = 0. - ALLOCATE(Z_RG_ACC(IPACK)) ; Z_RG_ACC = 0. - ALLOCATE(Z_RS_CMEL(IPACK)) ; Z_RS_CMEL = 0. - ALLOCATE(Z_TH_CFRZ(IPACK)) ; Z_TH_CFRZ = 0. - ALLOCATE(Z_RR_CFRZ(IPACK)) ; Z_RR_CFRZ = 0. - ALLOCATE(Z_CR_CFRZ(IPACK)) ; Z_CR_CFRZ = 0. - ALLOCATE(Z_RI_CFRZ(IPACK)) ; Z_RI_CFRZ = 0. - ALLOCATE(Z_CI_CFRZ(IPACK)) ; Z_CI_CFRZ = 0. - ALLOCATE(Z_TH_WETG(IPACK)) ; Z_TH_WETG = 0. - ALLOCATE(Z_RC_WETG(IPACK)) ; Z_RC_WETG = 0. - ALLOCATE(Z_CC_WETG(IPACK)) ; Z_CC_WETG = 0. - ALLOCATE(Z_RR_WETG(IPACK)) ; Z_RR_WETG = 0. - ALLOCATE(Z_CR_WETG(IPACK)) ; Z_CR_WETG = 0. - ALLOCATE(Z_RI_WETG(IPACK)) ; Z_RI_WETG = 0. - ALLOCATE(Z_CI_WETG(IPACK)) ; Z_CI_WETG = 0. - ALLOCATE(Z_RS_WETG(IPACK)) ; Z_RS_WETG = 0. - ALLOCATE(Z_RG_WETG(IPACK)) ; Z_RG_WETG = 0. - ALLOCATE(Z_RH_WETG(IPACK)) ; Z_RH_WETG = 0. - ALLOCATE(Z_TH_DRYG(IPACK)) ; Z_TH_DRYG = 0. - ALLOCATE(Z_RC_DRYG(IPACK)) ; Z_RC_DRYG = 0. - ALLOCATE(Z_CC_DRYG(IPACK)) ; Z_CC_DRYG = 0. - ALLOCATE(Z_RR_DRYG(IPACK)) ; Z_RR_DRYG = 0. - ALLOCATE(Z_CR_DRYG(IPACK)) ; Z_CR_DRYG = 0. - ALLOCATE(Z_RI_DRYG(IPACK)) ; Z_RI_DRYG = 0. - ALLOCATE(Z_CI_DRYG(IPACK)) ; Z_CI_DRYG = 0. - ALLOCATE(Z_RS_DRYG(IPACK)) ; Z_RS_DRYG = 0. - ALLOCATE(Z_RG_DRYG(IPACK)) ; Z_RG_DRYG = 0. - ALLOCATE(Z_RI_HMG(IPACK)) ; Z_RI_HMG = 0. - ALLOCATE(Z_CI_HMG(IPACK)) ; Z_CI_HMG = 0. - ALLOCATE(Z_RG_HMG(IPACK)) ; Z_RG_HMG = 0. - ALLOCATE(Z_TH_GMLT(IPACK)) ; Z_TH_GMLT = 0. - ALLOCATE(Z_RR_GMLT(IPACK)) ; Z_RR_GMLT = 0. - ALLOCATE(Z_CR_GMLT(IPACK)) ; Z_CR_GMLT = 0. - - -!!$ ZZT(:,:,:) = ZTHT(:,:,:) * ZEXN(:,:,:) -!!$ ZLSFACT(:,:,:)=(XLSTT+(XCPV-XCI)*(ZZT(:,:,:)-XTT)) & -!!$ /( (XCPD + XCPV*ZRVT(:,:,:) + XCL*(ZRCT(:,:,:)+ZRRT(:,:,:)) & -!!$ + XCI*(ZRIT(:,:,:)+ZRST(:,:,:)+ZRGT(:,:,:)+ZRHT(:,:,:)))*ZEXN(:,:,:) ) -!!$ ZLVFACT(:,:,:)=(XLVTT+(XCPV-XCL)*(ZZT(:,:,:)-XTT)) & -!!$ /( (XCPD + XCPV*ZRVT(:,:,:) + XCL*(ZRCT(:,:,:)+ZRRT(:,:,:)) & -!!$ + XCI*(ZRIT(:,:,:)+ZRST(:,:,:)+ZRGT(:,:,:)+ZRHT(:,:,:)))*ZEXN(:,:,:) ) - ! - !*** 4.1 Tendecies computation - ! - - CALL LIMA_INST_PROCS (PTSTEP, HFMFILE, OCLOSE_OUT, LLCOMPUTE1D, & - ZEXNREF1D, ZP1D, & - ZTHT1D, ZRVT1D, ZRCT1D, ZRRT1D, ZRIT1D, ZRST1D, ZRGT1D, & - ZCCT1D, ZCRT1D, ZCIT1D, & - ZIFNN1D, & - Z_CR_BRKU, & ! spontaneous break up of drops (BRKU) : Nr - Z_TH_HONR, Z_RR_HONR, Z_CR_HONR, & ! rain drops homogeneous freezing (HONR) : rr, Nr, rg=-rr, th - Z_TH_IMLT, Z_RC_IMLT, Z_CC_IMLT, & ! ice melting (IMLT) : rc, Nc, ri=-rc, Ni=-Nc, th, IFNF, IFNA - ZB_TH, ZB_RV, ZB_RC, ZB_RR, ZB_RI, ZB_RG, & - ZB_CC, ZB_CR, ZB_CI, & - ZB_IFNN) - - CALL LIMA_TENDENCIES (PTSTEP, HFMFILE, OCLOSE_OUT, LLCOMPUTE1D, & - ZEXNREF1D, ZRHODREF1D, ZP1D, ZTHT1D, & - ZRVT1D, ZRCT1D, ZRRT1D, ZRIT1D, ZRST1D, ZRGT1D, ZRHT1D, & - ZCCT1D, ZCRT1D, ZCIT1D, & - Z_TH_HONC, Z_RC_HONC, Z_CC_HONC, & - Z_CC_SELF, & - Z_RC_AUTO, Z_CC_AUTO, Z_CR_AUTO, & - Z_RC_ACCR, Z_CC_ACCR, & - Z_CR_SCBU, & - Z_TH_EVAP, Z_RR_EVAP, & - Z_RI_CNVI, Z_CI_CNVI, & - Z_TH_DEPS, Z_RS_DEPS, & - Z_RI_CNVS, Z_CI_CNVS, & - Z_RI_AGGS, Z_CI_AGGS, & - Z_TH_DEPG, Z_RG_DEPG, & - Z_TH_BERFI, Z_RC_BERFI, & - Z_TH_RIM, Z_RC_RIM, Z_CC_RIM, Z_RS_RIM, Z_RG_RIM, & - Z_RI_HMS, Z_CI_HMS, Z_RS_HMS, & - Z_TH_ACC, Z_RR_ACC, Z_CR_ACC, Z_RS_ACC, Z_RG_ACC, & - Z_RS_CMEL, & - Z_TH_CFRZ, Z_RR_CFRZ, Z_CR_CFRZ, Z_RI_CFRZ, Z_CI_CFRZ, & - Z_TH_WETG, Z_RC_WETG, Z_CC_WETG, Z_RR_WETG, Z_CR_WETG, & - Z_RI_WETG, Z_CI_WETG, Z_RS_WETG, Z_RG_WETG, Z_RH_WETG, & - Z_TH_DRYG, Z_RC_DRYG, Z_CC_DRYG, Z_RR_DRYG, Z_CR_DRYG, & - Z_RI_DRYG, Z_CI_DRYG, Z_RS_DRYG, Z_RG_DRYG, & - Z_RI_HMG, Z_CI_HMG, Z_RG_HMG, & - Z_TH_GMLT, Z_RR_GMLT, Z_CR_GMLT, & -!!! Z_RC_WETH, Z_CC_WETH, Z_RR_WETH, Z_CR_WETH, & ! wet growth of hail (WETH) : rc, Nc, rr, Nr, ri, Ni, rs, rg, rh, th -!!! Z_RI_WETH, Z_CI_WETH, Z_RS_WETH, Z_RG_WETH, Z_RH_WETH, & ! wet growth of hail (WETH) : rc, Nc, rr, Nr, ri, Ni, rs, rg, rh, th -!!! Z_RG_COHG, & ! conversion of hail into graupel (COHG) : rg, rh -!!! Z_RR_HMLT, Z_CR_HMLT ! hail melting (HMLT) : rr, Nr, rh=-rr, th - ZA_TH, ZA_RV, ZA_RC, ZA_CC, ZA_RR, ZA_CR, & - ZA_RI, ZA_CI, ZA_RS, ZA_RG, ZA_RH, & - ZEVAP1D ) - - ! - !*** 4.2 Integration time - ! - ! If we can, we will use these tendecies until the end of the timestep - ZMAXTIME(:)=PTSTEP-ZTIME1D(:) ! Remaining time until the end of the timestep - - ! We need to adjust tendencies when temperature reaches 0 - IF(LFEEDBACKT) THEN - !Is ZB_TH enough to change temperature sign? - WHERE( ((ZTHT1D(:) - XTT/ZEXN1D(:)) * (ZTHT1D(:) + ZB_TH(:) - XTT/ZEXN1D(:))) < 0. ) - ZMAXTIME(:)=0. - ENDWHERE - !Can ZA_TH make temperature change of sign? - ZTIME_THRESHOLD(:)=-1. - WHERE(ABS(ZA_TH(:))>1.E-20) - ZTIME_THRESHOLD(:)=(XTT/ZEXN1D(:) - ZB_TH(:) - ZTHT1D(:))/ZA_TH(:) - ENDWHERE - WHERE(ZTIME_THRESHOLD(:)>0.) - ZMAXTIME(:)=MIN(ZMAXTIME(:), ZTIME_THRESHOLD(:)) - ENDWHERE - ENDIF - - ! We need to adjust tendencies when a species disappears - ! When a species is missing, only the external tendencies can be negative (and we must keep track of it) - WHERE(ZA_RV(:)<-1.E-20 .AND. ZRVT1D(:)>XRTMIN(1)) - ZMAXTIME(:)=MIN(ZMAXTIME(:), -(ZB_RV(:)+ZRVT1D(:))/ZA_RV(:)) - END WHERE - WHERE(ZA_RC(:)<-1.E-20 .AND. ZRCT1D(:)>XRTMIN(2)) - ZMAXTIME(:)=MIN(ZMAXTIME(:), -(ZB_RC(:)+ZRCT1D(:))/ZA_RC(:)) - END WHERE - WHERE(ZA_RR(:)<-1.E-20 .AND. ZRRT1D(:)>XRTMIN(3)) - ZMAXTIME(:)=MIN(ZMAXTIME(:), -(ZB_RR(:)+ZRRT1D(:))/ZA_RR(:)) - END WHERE - WHERE(ZA_RI(:)<-1.E-20 .AND. ZRIT1D(:)>XRTMIN(4)) - ZMAXTIME(:)=MIN(ZMAXTIME(:), -(ZB_RI(:)+ZRIT1D(:))/ZA_RI(:)) - END WHERE - WHERE(ZA_RS(:)<-1.E-20 .AND. ZRST1D(:)>XRTMIN(5)) - ZMAXTIME(:)=MIN(ZMAXTIME(:), -(ZB_RS(:)+ZRST1D(:))/ZA_RS(:)) - END WHERE - WHERE(ZA_RG(:)<-1.E-20 .AND. ZRGT1D(:)>XRTMIN(6)) - ZMAXTIME(:)=MIN(ZMAXTIME(:), -(ZB_RG(:)+ZRGT1D(:))/ZA_RG(:)) - END WHERE - WHERE(ZA_RH(:)<-1.E-20 .AND. ZRHT1D(:)>XRTMIN(7)) - ZMAXTIME(:)=MIN(ZMAXTIME(:), -(ZB_RH(:)+ZRHT1D(:))/ZA_RH(:)) - END WHERE - - ! We stop when the end of the timestep is reached - WHERE(PTSTEP-ZTIME1D(:)-ZMAXTIME(:)<=0.) - LLCOMPUTE1D(:)=.FALSE. - ENDWHERE - - ! We must recompute tendencies when the end of the sub-timestep is reached - IF(XTSTEP_TS/=0.) THEN - WHERE(IITER1D(:)<INB_ITER_MAX .AND. ZTIME1D(:)+ZMAXTIME(:)>ZTIME_LASTCALL1D(:)+ZTSTEP) - ZMAXTIME(:)=ZTIME_LASTCALL1D(:)-ZTIME1D(:)+ZTSTEP - LLCOMPUTE1D(:)=.FALSE. - ENDWHERE - ENDIF - - ! We must recompute tendencies when the maximum allowed change is reached - ! When a species is missing, only the external tendencies can be active and we do not want to recompute - ! the microphysical tendencies when external tendencies are negative (results won't change because species was already missing) - IF(XMRSTEP/=0.) THEN - ZTIME_THRESHOLD(:)=-1. - WHERE(IITER1D(:)<INB_ITER_MAX .AND. ABS(ZA_RV(:))>1.E-20) - ZTIME_THRESHOLD(:)=(SIGN(1., ZA_RV(:))*XMRSTEP+Z0RVT1D(:)-ZRVT1D(:)-ZB_RV(:))/ZA_RV(:) - ENDWHERE - WHERE(ZTIME_THRESHOLD(:)>=0. .AND. ZTIME_THRESHOLD(:)<ZMAXTIME(:) .AND. & - &(ZRVT1D(:)>XRTMIN(1) .OR. ZA_RV(:)>0.)) - ZMAXTIME(:)=MIN(ZMAXTIME(:), ZTIME_THRESHOLD(:)) - LLCOMPUTE1D(:)=.FALSE. - ENDWHERE - - ZTIME_THRESHOLD(:)=-1. - WHERE(IITER1D(:)<INB_ITER_MAX .AND. ABS(ZA_RC(:))>1.E-20) - ZTIME_THRESHOLD(:)=(SIGN(1., ZA_RC(:))*XMRSTEP+Z0RCT1D(:)-ZRCT1D(:)-ZB_RC(:))/ZA_RC(:) - ENDWHERE - WHERE(ZTIME_THRESHOLD(:)>=0. .AND. ZTIME_THRESHOLD(:)<ZMAXTIME(:) .AND. & - &(ZRCT1D(:)>XRTMIN(2) .OR. ZA_RC(:)>0.)) - ZMAXTIME(:)=MIN(ZMAXTIME(:), ZTIME_THRESHOLD(:)) - LLCOMPUTE1D(:)=.FALSE. - ENDWHERE - - ZTIME_THRESHOLD(:)=-1. - WHERE(IITER1D(:)<INB_ITER_MAX .AND. ABS(ZA_RR(:))>1.E-20) - ZTIME_THRESHOLD(:)=(SIGN(1., ZA_RR(:))*XMRSTEP+Z0RRT1D(:)-ZRRT1D(:)-ZB_RR(:))/ZA_RR(:) - ENDWHERE - WHERE(ZTIME_THRESHOLD(:)>=0. .AND. ZTIME_THRESHOLD(:)<ZMAXTIME(:) .AND. & - &(ZRRT1D(:)>XRTMIN(3) .OR. ZA_RR(:)>0.)) - ZMAXTIME(:)=MIN(ZMAXTIME(:), ZTIME_THRESHOLD(:)) - LLCOMPUTE1D(:)=.FALSE. - ENDWHERE - - ZTIME_THRESHOLD(:)=-1. - WHERE(IITER1D(:)<INB_ITER_MAX .AND. ABS(ZA_RI(:))>1.E-20) - ZTIME_THRESHOLD(:)=(SIGN(1., ZA_RI(:))*XMRSTEP+Z0RIT1D(:)-ZRIT1D(:)-ZB_RI(:))/ZA_RI(:) - ENDWHERE - WHERE(ZTIME_THRESHOLD(:)>=0. .AND. ZTIME_THRESHOLD(:)<ZMAXTIME(:) .AND. & - &(ZRIT1D(:)>XRTMIN(4) .OR. ZA_RI(:)>0.)) - ZMAXTIME(:)=MIN(ZMAXTIME(:), ZTIME_THRESHOLD(:)) - LLCOMPUTE1D(:)=.FALSE. - ENDWHERE - - ZTIME_THRESHOLD(:)=-1. - WHERE(IITER1D(:)<INB_ITER_MAX .AND. ABS(ZA_RS(:))>1.E-20) - ZTIME_THRESHOLD(:)=(SIGN(1., ZA_RS(:))*XMRSTEP+Z0RST1D(:)-ZRST1D(:)-ZB_RS(:))/ZA_RS(:) - ENDWHERE - WHERE(ZTIME_THRESHOLD(:)>=0. .AND. ZTIME_THRESHOLD(:)<ZMAXTIME(:) .AND. & - &(ZRST1D(:)>XRTMIN(5) .OR. ZA_RS(:)>0.)) - ZMAXTIME(:)=MIN(ZMAXTIME(:), ZTIME_THRESHOLD(:)) - LLCOMPUTE1D(:)=.FALSE. - ENDWHERE - - ZTIME_THRESHOLD(:)=-1. - WHERE(IITER1D(:)<INB_ITER_MAX .AND. ABS(ZA_RG(:))>1.E-20) - ZTIME_THRESHOLD(:)=(SIGN(1., ZA_RG(:))*XMRSTEP+Z0RGT1D(:)-ZRGT1D(:)-ZB_RG(:))/ZA_RG(:) - ENDWHERE - WHERE(ZTIME_THRESHOLD(:)>=0. .AND. ZTIME_THRESHOLD(:)<ZMAXTIME(:) .AND. & - &(ZRGT1D(:)>XRTMIN(6) .OR. ZA_RG(:)>0.)) - ZMAXTIME(:)=MIN(ZMAXTIME(:), ZTIME_THRESHOLD(:)) - LLCOMPUTE1D(:)=.FALSE. - ENDWHERE - - ZTIME_THRESHOLD(:)=-1. - WHERE(IITER1D(:)<INB_ITER_MAX .AND. ABS(ZA_RH(:))>1.E-20) - ZTIME_THRESHOLD(:)=(SIGN(1., ZA_RH(:))*XMRSTEP+Z0RHT1D(:)-ZRHT1D(:)-ZB_RH(:))/ZA_RH(:) - ENDWHERE - WHERE(ZTIME_THRESHOLD(:)>=0. .AND. ZTIME_THRESHOLD(:)<ZMAXTIME(:) .AND. & - &(ZRHT1D(:)>XRTMIN(7) .OR. ZA_RH(:)>0.)) - ZMAXTIME(:)=MIN(ZMAXTIME(:), ZTIME_THRESHOLD(:)) - LLCOMPUTE1D(:)=.FALSE. - ENDWHERE - - WHERE(IITER1D(:)<INB_ITER_MAX .AND. MAX(ABS(ZB_RV(:)), & - ABS(ZB_RC(:)), ABS(ZB_RR(:)), ABS(ZB_RI(:)), & - ABS(ZB_RS(:)), ABS(ZB_RG(:)), ABS(ZB_RH(:)))>XMRSTEP) - ZMAXTIME(:)=0. - LLCOMPUTE1D(:)=.FALSE. - ENDWHERE - ENDIF - ! - !*** 4.3 New values of variables for next iteration - ! - 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(:) - ZRRT1D = ZRRT1D + ZA_RR(:) * ZMAXTIME(:) + ZB_RR(:) - ZCRT1D = ZCRT1D + ZA_CR(:) * ZMAXTIME(:) + ZB_CR(:) - ZRIT1D = ZRIT1D + ZA_RI(:) * ZMAXTIME(:) + ZB_RI(:) - ZCIT1D = ZCIT1D + ZA_CI(:) * ZMAXTIME(:) + ZB_CI(:) - ZRST1D = ZRST1D + ZA_RS(:) * ZMAXTIME(:) + ZB_RS(:) - ZRGT1D = ZRGT1D + ZA_RG(:) * ZMAXTIME(:) + ZB_RG(:) - ZRHT1D = ZRHT1D + ZA_RH(:) * ZMAXTIME(:) + ZB_RH(:) - ! - - DO II=1,NMOD_IFN - ZIFNN1D(:,II) = ZIFNN1D(:,II) + ZB_IFNN(:,II) - END DO - ! - !*** 4.5 - ! - WHERE (ZRCT1D .LE. XRTMIN(2)) - ZRVT1D = ZRVT1D + ZRCT1D - ZRCT1D = 0. - ZCCT1D = 0. - END WHERE - WHERE (ZRRT1D .LE. XRTMIN(3)) - ZRVT1D = ZRVT1D + ZRRT1D - ZRRT1D = 0. - ZCRT1D = 0. - END WHERE - WHERE (ZRIT1D .LE. XRTMIN(4)) - ZRVT1D = ZRVT1D + ZRIT1D - ZRIT1D = 0. - ZCIT1D = 0. - END WHERE - - ! - !*** 4.5 Next loop - ! - ZTIME1D(:)=ZTIME1D(:)+ZMAXTIME(:) - ! - !*** 4.4 Unpacking - ! - DO II=1,IPACK - ZTHT(I1(II),I2(II),I3(II)) = ZTHT1D(II) - ZRVT(I1(II),I2(II),I3(II)) = ZRVT1D(II) - ZRCT(I1(II),I2(II),I3(II)) = ZRCT1D(II) - ZRRT(I1(II),I2(II),I3(II)) = ZRRT1D(II) - ZRIT(I1(II),I2(II),I3(II)) = ZRIT1D(II) - 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) - 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) - LLCOMPUTE(I1(II),I2(II),I3(II)) = LLCOMPUTE1D(II) - IITER(I1(II),I2(II),I3(II)) = IITER1D(II) - END DO - ! - !*** 4.4 Unpacking for budgets - ! - IF(LBU_ENABLE) THEN - DO II=1,IPACK -!!$ ZTOT_RC_HENU(I1(II),I2(II),I3(II)) = ZTOT_RC_HENU(I1(II),I2(II),I3(II)) + Z_RC_HENU(II) -!!$ ZTOT_CC_HENU(I1(II),I2(II),I3(II)) = ZTOT_CC_HENU(I1(II),I2(II),I3(II)) + Z_CC_HENU(II) - ZTOT_CR_BRKU(I1(II),I2(II),I3(II)) = ZTOT_CR_BRKU(I1(II),I2(II),I3(II)) + Z_CR_BRKU(II) -!!$ ZTOT_RI_HIND(I1(II),I2(II),I3(II)) = ZTOT_RI_HIND(I1(II),I2(II),I3(II)) + Z_RI_HIND(II) -!!$ ZTOT_CI_HIND(I1(II),I2(II),I3(II)) = ZTOT_CI_HIND(I1(II),I2(II),I3(II)) + Z_CI_HIND(II) -!!$ ZTOT_RC_HINC(I1(II),I2(II),I3(II)) = ZTOT_RC_HINC(I1(II),I2(II),I3(II)) + Z_RC_HINC(II) -!!$ ZTOT_CC_HINC(I1(II),I2(II),I3(II)) = ZTOT_CC_HINC(I1(II),I2(II),I3(II)) + Z_CC_HINC(II) -!!$ ZTOT_RI_HONH(I1(II),I2(II),I3(II)) = ZTOT_RI_HONH(I1(II),I2(II),I3(II)) + Z_RI_HONH(II) -!!$ ZTOT_CI_HONH(I1(II),I2(II),I3(II)) = ZTOT_CI_HONH(I1(II),I2(II),I3(II)) + Z_CI_HONH(II) - ZTOT_TH_HONC(I1(II),I2(II),I3(II)) = ZTOT_TH_HONC(I1(II),I2(II),I3(II)) + Z_TH_HONC(II) * ZMAXTIME(II) - ZTOT_RC_HONC(I1(II),I2(II),I3(II)) = ZTOT_RC_HONC(I1(II),I2(II),I3(II)) + Z_RC_HONC(II) * ZMAXTIME(II) - ZTOT_CC_HONC(I1(II),I2(II),I3(II)) = ZTOT_CC_HONC(I1(II),I2(II),I3(II)) + Z_CC_HONC(II) * ZMAXTIME(II) - ZTOT_TH_HONR(I1(II),I2(II),I3(II)) = ZTOT_TH_HONR(I1(II),I2(II),I3(II)) + Z_TH_HONR(II) - ZTOT_RR_HONR(I1(II),I2(II),I3(II)) = ZTOT_RR_HONR(I1(II),I2(II),I3(II)) + Z_RR_HONR(II) - ZTOT_CR_HONR(I1(II),I2(II),I3(II)) = ZTOT_CR_HONR(I1(II),I2(II),I3(II)) + Z_CR_HONR(II) - ZTOT_TH_IMLT(I1(II),I2(II),I3(II)) = ZTOT_TH_IMLT(I1(II),I2(II),I3(II)) + Z_TH_IMLT(II) - ZTOT_RC_IMLT(I1(II),I2(II),I3(II)) = ZTOT_RC_IMLT(I1(II),I2(II),I3(II)) + Z_RC_IMLT(II) - ZTOT_CC_IMLT(I1(II),I2(II),I3(II)) = ZTOT_CC_IMLT(I1(II),I2(II),I3(II)) + Z_CC_IMLT(II) - ZTOT_CC_SELF(I1(II),I2(II),I3(II)) = ZTOT_CC_SELF(I1(II),I2(II),I3(II)) + Z_CC_SELF(II) * ZMAXTIME(II) - ZTOT_RC_AUTO(I1(II),I2(II),I3(II)) = ZTOT_RC_AUTO(I1(II),I2(II),I3(II)) + Z_RC_AUTO(II) * ZMAXTIME(II) - ZTOT_CC_AUTO(I1(II),I2(II),I3(II)) = ZTOT_CC_AUTO(I1(II),I2(II),I3(II)) + Z_CC_AUTO(II) * ZMAXTIME(II) - ZTOT_CR_AUTO(I1(II),I2(II),I3(II)) = ZTOT_CR_AUTO(I1(II),I2(II),I3(II)) + Z_CR_AUTO(II) * ZMAXTIME(II) - ZTOT_RC_ACCR(I1(II),I2(II),I3(II)) = ZTOT_RC_ACCR(I1(II),I2(II),I3(II)) + Z_RC_ACCR(II) * ZMAXTIME(II) - ZTOT_CC_ACCR(I1(II),I2(II),I3(II)) = ZTOT_CC_ACCR(I1(II),I2(II),I3(II)) + Z_CC_ACCR(II) * ZMAXTIME(II) - ZTOT_CR_SCBU(I1(II),I2(II),I3(II)) = ZTOT_CR_SCBU(I1(II),I2(II),I3(II)) + Z_CR_SCBU(II) * ZMAXTIME(II) -!!$ ZTOT_RC_EVAP(I1(II),I2(II),I3(II)) = ZTOT_RC_EVAP(I1(II),I2(II),I3(II)) + Z_RC_EVAP(II) * ZMAXTIME(II) -!!$ ZTOT_CC_EVAP(I1(II),I2(II),I3(II)) = ZTOT_CC_EVAP(I1(II),I2(II),I3(II)) + Z_CC_EVAP(II) * ZMAXTIME(II) - ZTOT_TH_EVAP(I1(II),I2(II),I3(II)) = ZTOT_TH_EVAP(I1(II),I2(II),I3(II)) + Z_TH_EVAP(II) * ZMAXTIME(II) - ZTOT_RR_EVAP(I1(II),I2(II),I3(II)) = ZTOT_RR_EVAP(I1(II),I2(II),I3(II)) + Z_RR_EVAP(II) * ZMAXTIME(II) -!!$ ZTOT_CR_EVAP(I1(II),I2(II),I3(II)) = ZTOT_CR_EVAP(I1(II),I2(II),I3(II)) + Z_CR_EVAP(II) * ZMAXTIME(II) - ZTOT_RI_CNVI(I1(II),I2(II),I3(II)) = ZTOT_RI_CNVI(I1(II),I2(II),I3(II)) + Z_RI_CNVI(II) * ZMAXTIME(II) - ZTOT_CI_CNVI(I1(II),I2(II),I3(II)) = ZTOT_CI_CNVI(I1(II),I2(II),I3(II)) + Z_CI_CNVI(II) * ZMAXTIME(II) - ZTOT_TH_DEPS(I1(II),I2(II),I3(II)) = ZTOT_TH_DEPS(I1(II),I2(II),I3(II)) + Z_TH_DEPS(II) * ZMAXTIME(II) - ZTOT_RS_DEPS(I1(II),I2(II),I3(II)) = ZTOT_RS_DEPS(I1(II),I2(II),I3(II)) + Z_RS_DEPS(II) * ZMAXTIME(II) - ZTOT_RI_CNVS(I1(II),I2(II),I3(II)) = ZTOT_RI_CNVS(I1(II),I2(II),I3(II)) + Z_RI_CNVS(II) * ZMAXTIME(II) - ZTOT_CI_CNVS(I1(II),I2(II),I3(II)) = ZTOT_CI_CNVS(I1(II),I2(II),I3(II)) + Z_CI_CNVS(II) * ZMAXTIME(II) - ZTOT_RI_AGGS(I1(II),I2(II),I3(II)) = ZTOT_RI_AGGS(I1(II),I2(II),I3(II)) + Z_RI_AGGS(II) * ZMAXTIME(II) - ZTOT_CI_AGGS(I1(II),I2(II),I3(II)) = ZTOT_CI_AGGS(I1(II),I2(II),I3(II)) + Z_CI_AGGS(II) * ZMAXTIME(II) - ZTOT_TH_DEPG(I1(II),I2(II),I3(II)) = ZTOT_TH_DEPG(I1(II),I2(II),I3(II)) + Z_TH_DEPG(II) * ZMAXTIME(II) - ZTOT_RG_DEPG(I1(II),I2(II),I3(II)) = ZTOT_RG_DEPG(I1(II),I2(II),I3(II)) + Z_RG_DEPG(II) * ZMAXTIME(II) - ZTOT_TH_BERFI(I1(II),I2(II),I3(II))= ZTOT_TH_BERFI(I1(II),I2(II),I3(II)) + Z_TH_BERFI(II) * ZMAXTIME(II) - ZTOT_RC_BERFI(I1(II),I2(II),I3(II))= ZTOT_RC_BERFI(I1(II),I2(II),I3(II)) + Z_RC_BERFI(II) * ZMAXTIME(II) - ZTOT_TH_RIM(I1(II),I2(II),I3(II)) = ZTOT_TH_RIM(I1(II),I2(II),I3(II)) + Z_TH_RIM(II) * ZMAXTIME(II) - ZTOT_RC_RIM(I1(II),I2(II),I3(II)) = ZTOT_RC_RIM(I1(II),I2(II),I3(II)) + Z_RC_RIM(II) * ZMAXTIME(II) - ZTOT_CC_RIM(I1(II),I2(II),I3(II)) = ZTOT_CC_RIM(I1(II),I2(II),I3(II)) + Z_CC_RIM(II) * ZMAXTIME(II) - ZTOT_RS_RIM(I1(II),I2(II),I3(II)) = ZTOT_RS_RIM(I1(II),I2(II),I3(II)) + Z_RS_RIM(II) * ZMAXTIME(II) - ZTOT_RG_RIM(I1(II),I2(II),I3(II)) = ZTOT_RG_RIM(I1(II),I2(II),I3(II)) + Z_RG_RIM(II) * ZMAXTIME(II) - ZTOT_RI_HMS(I1(II),I2(II),I3(II)) = ZTOT_RI_HMS(I1(II),I2(II),I3(II)) + Z_RI_HMS(II) * ZMAXTIME(II) - ZTOT_CI_HMS(I1(II),I2(II),I3(II)) = ZTOT_CI_HMS(I1(II),I2(II),I3(II)) + Z_CI_HMS(II) * ZMAXTIME(II) - ZTOT_RS_HMS(I1(II),I2(II),I3(II)) = ZTOT_RS_HMS(I1(II),I2(II),I3(II)) + Z_RS_HMS(II) * ZMAXTIME(II) - ZTOT_TH_ACC(I1(II),I2(II),I3(II)) = ZTOT_TH_ACC(I1(II),I2(II),I3(II)) + Z_TH_ACC(II) * ZMAXTIME(II) - ZTOT_RR_ACC(I1(II),I2(II),I3(II)) = ZTOT_RR_ACC(I1(II),I2(II),I3(II)) + Z_RR_ACC(II) * ZMAXTIME(II) - ZTOT_CR_ACC(I1(II),I2(II),I3(II)) = ZTOT_CR_ACC(I1(II),I2(II),I3(II)) + Z_CR_ACC(II) * ZMAXTIME(II) - ZTOT_RS_ACC(I1(II),I2(II),I3(II)) = ZTOT_RS_ACC(I1(II),I2(II),I3(II)) + Z_RS_ACC(II) * ZMAXTIME(II) - ZTOT_RG_ACC(I1(II),I2(II),I3(II)) = ZTOT_RG_ACC(I1(II),I2(II),I3(II)) + Z_RG_ACC(II) * ZMAXTIME(II) - ZTOT_RS_CMEL(I1(II),I2(II),I3(II)) = ZTOT_RS_CMEL(I1(II),I2(II),I3(II)) + Z_RS_CMEL(II) * ZMAXTIME(II) - ZTOT_TH_CFRZ(I1(II),I2(II),I3(II)) = ZTOT_TH_CFRZ(I1(II),I2(II),I3(II)) + Z_TH_CFRZ(II) * ZMAXTIME(II) - ZTOT_RR_CFRZ(I1(II),I2(II),I3(II)) = ZTOT_RR_CFRZ(I1(II),I2(II),I3(II)) + Z_RR_CFRZ(II) * ZMAXTIME(II) - ZTOT_CR_CFRZ(I1(II),I2(II),I3(II)) = ZTOT_CR_CFRZ(I1(II),I2(II),I3(II)) + Z_CR_CFRZ(II) * ZMAXTIME(II) - ZTOT_RI_CFRZ(I1(II),I2(II),I3(II)) = ZTOT_RI_CFRZ(I1(II),I2(II),I3(II)) + Z_RI_CFRZ(II) * ZMAXTIME(II) - ZTOT_CI_CFRZ(I1(II),I2(II),I3(II)) = ZTOT_CI_CFRZ(I1(II),I2(II),I3(II)) + Z_CI_CFRZ(II) * ZMAXTIME(II) - ZTOT_TH_WETG(I1(II),I2(II),I3(II)) = ZTOT_TH_WETG(I1(II),I2(II),I3(II)) + Z_TH_WETG(II) * ZMAXTIME(II) - ZTOT_RC_WETG(I1(II),I2(II),I3(II)) = ZTOT_RC_WETG(I1(II),I2(II),I3(II)) + Z_RC_WETG(II) * ZMAXTIME(II) - ZTOT_CC_WETG(I1(II),I2(II),I3(II)) = ZTOT_CC_WETG(I1(II),I2(II),I3(II)) + Z_CC_WETG(II) * ZMAXTIME(II) - ZTOT_RR_WETG(I1(II),I2(II),I3(II)) = ZTOT_RR_WETG(I1(II),I2(II),I3(II)) + Z_RR_WETG(II) * ZMAXTIME(II) - ZTOT_CR_WETG(I1(II),I2(II),I3(II)) = ZTOT_CR_WETG(I1(II),I2(II),I3(II)) + Z_CR_WETG(II) * ZMAXTIME(II) - ZTOT_RI_WETG(I1(II),I2(II),I3(II)) = ZTOT_RI_WETG(I1(II),I2(II),I3(II)) + Z_RI_WETG(II) * ZMAXTIME(II) - ZTOT_CI_WETG(I1(II),I2(II),I3(II)) = ZTOT_CI_WETG(I1(II),I2(II),I3(II)) + Z_CI_WETG(II) * ZMAXTIME(II) - ZTOT_RS_WETG(I1(II),I2(II),I3(II)) = ZTOT_RS_WETG(I1(II),I2(II),I3(II)) + Z_RS_WETG(II) * ZMAXTIME(II) - ZTOT_RG_WETG(I1(II),I2(II),I3(II)) = ZTOT_RG_WETG(I1(II),I2(II),I3(II)) + Z_RG_WETG(II) * ZMAXTIME(II) - ZTOT_RH_WETG(I1(II),I2(II),I3(II)) = ZTOT_RH_WETG(I1(II),I2(II),I3(II)) + Z_RH_WETG(II) * ZMAXTIME(II) - ZTOT_TH_DRYG(I1(II),I2(II),I3(II)) = ZTOT_TH_DRYG(I1(II),I2(II),I3(II)) + Z_TH_DRYG(II) * ZMAXTIME(II) - ZTOT_RC_DRYG(I1(II),I2(II),I3(II)) = ZTOT_RC_DRYG(I1(II),I2(II),I3(II)) + Z_RC_DRYG(II) * ZMAXTIME(II) - ZTOT_CC_DRYG(I1(II),I2(II),I3(II)) = ZTOT_CC_DRYG(I1(II),I2(II),I3(II)) + Z_CC_DRYG(II) * ZMAXTIME(II) - ZTOT_RR_DRYG(I1(II),I2(II),I3(II)) = ZTOT_RR_DRYG(I1(II),I2(II),I3(II)) + Z_RR_DRYG(II) * ZMAXTIME(II) - ZTOT_CR_DRYG(I1(II),I2(II),I3(II)) = ZTOT_CR_DRYG(I1(II),I2(II),I3(II)) + Z_CR_DRYG(II) * ZMAXTIME(II) - ZTOT_RI_DRYG(I1(II),I2(II),I3(II)) = ZTOT_RI_DRYG(I1(II),I2(II),I3(II)) + Z_RI_DRYG(II) * ZMAXTIME(II) - ZTOT_CI_DRYG(I1(II),I2(II),I3(II)) = ZTOT_CI_DRYG(I1(II),I2(II),I3(II)) + Z_CI_DRYG(II) * ZMAXTIME(II) - ZTOT_RS_DRYG(I1(II),I2(II),I3(II)) = ZTOT_RS_DRYG(I1(II),I2(II),I3(II)) + Z_RS_DRYG(II) * ZMAXTIME(II) - ZTOT_RG_DRYG(I1(II),I2(II),I3(II)) = ZTOT_RG_DRYG(I1(II),I2(II),I3(II)) + Z_RG_DRYG(II) * ZMAXTIME(II) - ZTOT_RI_HMG(I1(II),I2(II),I3(II)) = ZTOT_RI_HMG(I1(II),I2(II),I3(II)) + Z_RI_HMG(II) * ZMAXTIME(II) - ZTOT_CI_HMG(I1(II),I2(II),I3(II)) = ZTOT_CI_HMG(I1(II),I2(II),I3(II)) + Z_CI_HMG(II) * ZMAXTIME(II) - ZTOT_RG_HMG(I1(II),I2(II),I3(II)) = ZTOT_RG_HMG(I1(II),I2(II),I3(II)) + Z_RG_HMG(II) * ZMAXTIME(II) - ZTOT_TH_GMLT(I1(II),I2(II),I3(II)) = ZTOT_TH_GMLT(I1(II),I2(II),I3(II)) + Z_TH_GMLT(II) * ZMAXTIME(II) - ZTOT_RR_GMLT(I1(II),I2(II),I3(II)) = ZTOT_RR_GMLT(I1(II),I2(II),I3(II)) + Z_RR_GMLT(II) * ZMAXTIME(II) - ZTOT_CR_GMLT(I1(II),I2(II),I3(II)) = ZTOT_CR_GMLT(I1(II),I2(II),I3(II)) + Z_CR_GMLT(II) * ZMAXTIME(II) -!!$ ZTOT_RC_WETH(I1(II),I2(II),I3(II)) = ZTOT_RC_WETH(I1(II),I2(II),I3(II)) + Z_RC_WETH(II) * ZMAXTIME(II) -!!$ ZTOT_CC_WETH(I1(II),I2(II),I3(II)) = ZTOT_CC_WETH(I1(II),I2(II),I3(II)) + Z_CC_WETH(II) * ZMAXTIME(II) -!!$ ZTOT_RR_WETH(I1(II),I2(II),I3(II)) = ZTOT_RR_WETH(I1(II),I2(II),I3(II)) + Z_RR_WETH(II) * ZMAXTIME(II) -!!$ ZTOT_CR_WETH(I1(II),I2(II),I3(II)) = ZTOT_CR_WETH(I1(II),I2(II),I3(II)) + Z_CR_WETH(II) * ZMAXTIME(II) -!!$ ZTOT_RI_WETH(I1(II),I2(II),I3(II)) = ZTOT_RI_WETH(I1(II),I2(II),I3(II)) + Z_RI_WETH(II) * ZMAXTIME(II) -!!$ ZTOT_CI_WETH(I1(II),I2(II),I3(II)) = ZTOT_CI_WETH(I1(II),I2(II),I3(II)) + Z_CI_WETH(II) * ZMAXTIME(II) -!!$ ZTOT_RS_WETH(I1(II),I2(II),I3(II)) = ZTOT_RS_WETH(I1(II),I2(II),I3(II)) + Z_RS_WETH(II) * ZMAXTIME(II) -!!$ ZTOT_RG_WETH(I1(II),I2(II),I3(II)) = ZTOT_RG_WETH(I1(II),I2(II),I3(II)) + Z_RG_WETH(II) * ZMAXTIME(II) -!!$ ZTOT_RH_WETH(I1(II),I2(II),I3(II)) = ZTOT_RH_WETH(I1(II),I2(II),I3(II)) + Z_RH_WETH(II) * ZMAXTIME(II) -!!$ ZTOT_RG_COHG(I1(II),I2(II),I3(II)) = ZTOT_RG_COHG(I1(II),I2(II),I3(II)) + Z_RG_COHG(II) * ZMAXTIME(II) -!!$ ZTOT_RR_HMLT(I1(II),I2(II),I3(II)) = ZTOT_RR_HMLT(I1(II),I2(II),I3(II)) + Z_RR_HMLT(II) * ZMAXTIME(II) -!!$ ZTOT_CR_HMLT(I1(II),I2(II),I3(II)) = ZTOT_CR_HMLT(I1(II),I2(II),I3(II)) + Z_CR_HMLT(II) * ZMAXTIME(II) - END DO - ENDIF - ! - ! Deallocating variables - ! - DEALLOCATE(I1) - DEALLOCATE(I2) - DEALLOCATE(I3) - DEALLOCATE(ZRHODREF1D) - DEALLOCATE(ZEXNREF1D) - DEALLOCATE(ZEXN1D) - DEALLOCATE(ZP1D) - DEALLOCATE(ZTHT1D) - DEALLOCATE(ZRVT1D) - DEALLOCATE(ZRCT1D) - DEALLOCATE(ZRRT1D) - DEALLOCATE(ZRIT1D) - DEALLOCATE(ZRST1D) - DEALLOCATE(ZRGT1D) - DEALLOCATE(ZRHT1D) - DEALLOCATE(ZCCT1D) - DEALLOCATE(ZCRT1D) - DEALLOCATE(ZCIT1D) - DEALLOCATE(ZIFNN1D) - DEALLOCATE(ZEVAP1D) - DEALLOCATE(ZTIME1D) - DEALLOCATE(LLCOMPUTE1D) - DEALLOCATE(IITER1D) - DEALLOCATE(ZTIME_LASTCALL1D) - DEALLOCATE(Z0RVT1D) - DEALLOCATE(Z0RCT1D) - DEALLOCATE(Z0RRT1D) - DEALLOCATE(Z0RIT1D) - DEALLOCATE(Z0RST1D) - DEALLOCATE(Z0RGT1D) - DEALLOCATE(Z0RHT1D) - ! - DEALLOCATE(ZMAXTIME) - DEALLOCATE(ZTIME_THRESHOLD) - ! - DEALLOCATE(ZA_TH) - DEALLOCATE(ZA_RV) - DEALLOCATE(ZA_RC) - DEALLOCATE(ZA_RR) - DEALLOCATE(ZA_RI) - DEALLOCATE(ZA_RS) - DEALLOCATE(ZA_RG) - DEALLOCATE(ZA_RH) - DEALLOCATE(ZA_CC) - DEALLOCATE(ZA_CR) - DEALLOCATE(ZA_CI) - ! - DEALLOCATE(ZB_TH) - DEALLOCATE(ZB_RV) - DEALLOCATE(ZB_RC) - DEALLOCATE(ZB_RR) - DEALLOCATE(ZB_RI) - DEALLOCATE(ZB_RS) - DEALLOCATE(ZB_RG) - DEALLOCATE(ZB_RH) - DEALLOCATE(ZB_CC) - DEALLOCATE(ZB_CR) - DEALLOCATE(ZB_CI) - DEALLOCATE(ZB_IFNN) - ! - DEALLOCATE(Z_CR_BRKU) - DEALLOCATE(Z_TH_HONR) - DEALLOCATE(Z_RR_HONR) - DEALLOCATE(Z_CR_HONR) - DEALLOCATE(Z_TH_IMLT) - DEALLOCATE(Z_RC_IMLT) - DEALLOCATE(Z_CC_IMLT) - DEALLOCATE(Z_TH_HONC) - DEALLOCATE(Z_RC_HONC) - DEALLOCATE(Z_CC_HONC) - DEALLOCATE(Z_CC_SELF) - DEALLOCATE(Z_RC_AUTO) - DEALLOCATE(Z_CC_AUTO) - DEALLOCATE(Z_CR_AUTO) - DEALLOCATE(Z_RC_ACCR) - DEALLOCATE(Z_CC_ACCR) - DEALLOCATE(Z_CR_SCBU) - DEALLOCATE(Z_TH_EVAP) - DEALLOCATE(Z_RR_EVAP) - DEALLOCATE(Z_RI_CNVI) - DEALLOCATE(Z_CI_CNVI) - DEALLOCATE(Z_TH_DEPS) - DEALLOCATE(Z_RS_DEPS) - DEALLOCATE(Z_RI_CNVS) - DEALLOCATE(Z_CI_CNVS) - DEALLOCATE(Z_RI_AGGS) - DEALLOCATE(Z_CI_AGGS) - DEALLOCATE(Z_TH_DEPG) - DEALLOCATE(Z_RG_DEPG) - DEALLOCATE(Z_TH_BERFI) - DEALLOCATE(Z_RC_BERFI) - DEALLOCATE(Z_TH_RIM) - DEALLOCATE(Z_RC_RIM) - DEALLOCATE(Z_CC_RIM) - DEALLOCATE(Z_RS_RIM) - DEALLOCATE(Z_RG_RIM) - DEALLOCATE(Z_RI_HMS) - DEALLOCATE(Z_CI_HMS) - DEALLOCATE(Z_RS_HMS) - DEALLOCATE(Z_TH_ACC) - DEALLOCATE(Z_RR_ACC) - DEALLOCATE(Z_CR_ACC) - DEALLOCATE(Z_RS_ACC) - DEALLOCATE(Z_RG_ACC) - DEALLOCATE(Z_RS_CMEL) - DEALLOCATE(Z_TH_CFRZ) - DEALLOCATE(Z_RR_CFRZ) - DEALLOCATE(Z_CR_CFRZ) - DEALLOCATE(Z_RI_CFRZ) - DEALLOCATE(Z_CI_CFRZ) - DEALLOCATE(Z_TH_WETG) - DEALLOCATE(Z_RC_WETG) - DEALLOCATE(Z_CC_WETG) - DEALLOCATE(Z_RR_WETG) - DEALLOCATE(Z_CR_WETG) - DEALLOCATE(Z_RI_WETG) - DEALLOCATE(Z_CI_WETG) - DEALLOCATE(Z_RS_WETG) - DEALLOCATE(Z_RG_WETG) - DEALLOCATE(Z_RH_WETG) - DEALLOCATE(Z_TH_DRYG) - DEALLOCATE(Z_RC_DRYG) - DEALLOCATE(Z_CC_DRYG) - DEALLOCATE(Z_RR_DRYG) - DEALLOCATE(Z_CR_DRYG) - DEALLOCATE(Z_RI_DRYG) - DEALLOCATE(Z_CI_DRYG) - DEALLOCATE(Z_RS_DRYG) - DEALLOCATE(Z_RG_DRYG) - DEALLOCATE(Z_RI_HMG) - DEALLOCATE(Z_CI_HMG) - DEALLOCATE(Z_RG_HMG) - DEALLOCATE(Z_TH_GMLT) - DEALLOCATE(Z_RR_GMLT) - DEALLOCATE(Z_CR_GMLT) - ! - ENDDO -ENDDO -! -!------------------------------------------------------------------------------- -! -!* 7. TOTAL TENDENCIES -! ---------------- -! -! Old state = state before microphysics time-splitting = state after sedimentation and nucleation processes -! Tendencies from microphysics = (new state - old state) / PTSTEP -! = new state / PTSTEP - old source -! -ZW_RVS(:,:,:) = 0. -ZW_RCS(:,:,:) = 0. -ZW_CCS(:,:,:) = 0. -ZW_RRS(:,:,:) = 0. -ZW_CRS(:,:,:) = 0. -ZW_RIS(:,:,:) = 0. -ZW_CIS(:,:,:) = 0. -ZW_RSS(:,:,:) = 0. -ZW_RGS(:,:,:) = 0. -ZW_RHS(:,:,:) = 0. -ZW_THS(:,:,:) = 0. -! -ZW_CCNFS(:,:,:,:) = 0. -ZW_CCNAS(:,:,:,:) = 0. -ZW_IFNFS(:,:,:,:) = 0. -ZW_IFNNS(:,:,:,:) = 0. -ZW_IMMNS(:,:,:,:) = 0. -ZW_HOMFS(:,:,:) = 0. -! -!!$IF ( KRR .GE. 1 ) ZW_RVS(:,:,:) = ( ZRVT(:,:,:) ) *ZINV_TSTEP - ZRVS(:,:,:) -!!$IF ( KRR .GE. 2 ) ZW_RCS(:,:,:) = ( ZRCT(:,:,:) ) *ZINV_TSTEP - ZRCS(:,:,:) -!!$IF ( KRR .GE. 3 ) ZW_RRS(:,:,:) = ( ZRRT(:,:,:) ) *ZINV_TSTEP - ZRRS(:,:,:) -!!$IF ( KRR .GE. 4 ) ZW_RIS(:,:,:) = ( ZRIT(:,:,:) ) *ZINV_TSTEP - ZRIS(:,:,:) -!!$IF ( KRR .GE. 5 ) ZW_RSS(:,:,:) = ( ZRST(:,:,:) ) *ZINV_TSTEP - ZRSS(:,:,:) -!!$IF ( KRR .GE. 6 ) ZW_RGS(:,:,:) = ( ZRGT(:,:,:) ) *ZINV_TSTEP - ZRGS(:,:,:) -!!$IF ( KRR .GE. 7 ) ZW_RHS(:,:,:) = ( ZRHT(:,:,:) ) *ZINV_TSTEP - ZRHS(:,:,:) -!!$! -!!$ZW_THS(:,:,:) = (ZW_RCS(:,:,:)+ZW_RRS(:,:,:) )*ZZ_LVFACT(:,:,:) + & -!!$ & (ZW_RIS(:,:,:)+ZW_RSS(:,:,:)+ZW_RGS(:,:,:)+ZW_RHS(:,:,:))*ZZ_LSFACT(:,:,:) -!!$! -!!$! Source at the end of microphysics = new state / PTSTEP -!!$! -!!$IF ( KRR .GE. 1 ) ZW_RVS(:,:,:) = ZW_RVS(:,:,:) + ZRVS(:,:,:) -!!$IF ( KRR .GE. 2 ) ZW_RCS(:,:,:) = ZW_RCS(:,:,:) + ZRCS(:,:,:) -!!$IF ( KRR .GE. 3 ) ZW_RRS(:,:,:) = ZW_RRS(:,:,:) + ZRRS(:,:,:) -!!$IF ( KRR .GE. 4 ) ZW_RIS(:,:,:) = ZW_RIS(:,:,:) + ZRIS(:,:,:) -!!$IF ( KRR .GE. 5 ) ZW_RSS(:,:,:) = ZW_RSS(:,:,:) + ZRSS(:,:,:) -!!$IF ( KRR .GE. 6 ) ZW_RGS(:,:,:) = ZW_RGS(:,:,:) + ZRGS(:,:,:) -!!$IF ( KRR .GE. 7 ) ZW_RHS(:,:,:) = ZW_RHS(:,:,:) + ZRHS(:,:,:) -!!$! -!!$ZW_THS(:,:,:) = ZTHS(:,:,:) + ZW_THS(:,:,:) -! -IF ( KRR .GE. 1 ) ZW_RVS(:,:,:) = ( ZRVT(:,:,:) ) *ZINV_TSTEP -IF ( KRR .GE. 2 ) ZW_RCS(:,:,:) = ( ZRCT(:,:,:) ) *ZINV_TSTEP -IF ( KRR .GE. 3 ) ZW_RRS(:,:,:) = ( ZRRT(:,:,:) ) *ZINV_TSTEP -IF ( KRR .GE. 4 ) ZW_RIS(:,:,:) = ( ZRIT(:,:,:) ) *ZINV_TSTEP -IF ( KRR .GE. 5 ) ZW_RSS(:,:,:) = ( ZRST(:,:,:) ) *ZINV_TSTEP -IF ( KRR .GE. 6 ) ZW_RGS(:,:,:) = ( ZRGT(:,:,:) ) *ZINV_TSTEP -IF ( KRR .GE. 7 ) ZW_RHS(:,:,:) = ( ZRHT(:,:,:) ) *ZINV_TSTEP -! -IF ( LWARM_LIMA ) ZW_CCS(:,:,:) = ( ZCCT(:,:,:) ) *ZINV_TSTEP -IF ( LWARM_LIMA .AND. LRAIN_LIMA ) ZW_CRS(:,:,:) = ( ZCRT(:,:,:) ) *ZINV_TSTEP -IF ( LCOLD_LIMA ) ZW_CIS(:,:,:) = ( ZCIT(:,:,:) ) *ZINV_TSTEP -! -IF ( NMOD_CCN .GE. 1 ) ZW_CCNFS(:,:,:,:) = ( ZCCNFT(:,:,:,:) ) *ZINV_TSTEP -IF ( NMOD_CCN .GE. 1 ) ZW_CCNAS(:,:,:,:) = ( ZCCNAT(:,:,:,:) ) *ZINV_TSTEP -IF ( NMOD_IFN .GE. 1 ) ZW_IFNFS(:,:,:,:) = ( ZIFNFT(:,:,:,:) ) *ZINV_TSTEP -IF ( NMOD_IFN .GE. 1 ) ZW_IFNNS(:,:,:,:) = ( ZIFNNT(:,:,:,:) ) *ZINV_TSTEP -IF ( NMOD_IMM .GE. 1 ) ZW_IMMNS(:,:,:,:) = ( ZIMMNT(:,:,:,:) ) *ZINV_TSTEP -IF ( LHHONI_LIMA ) ZW_HOMFS(:,:,:) = ( ZHOMFT(:,:,:) ) *ZINV_TSTEP -! -ZW_THS(:,:,:) = ZTHT(:,:,:) * ZINV_TSTEP -! -!*** 7.3 Final tendencies -! -! Mixing ratios -! -PRS(:,:,:,1) = ZW_RVS(:,:,:) -IF ( KRR .GE. 2 ) PRS(:,:,:,2) = ZW_RCS(:,:,:) -IF ( KRR .GE. 3 ) PRS(:,:,:,3) = ZW_RRS(:,:,:) -IF ( KRR .GE. 4 ) PRS(:,:,:,4) = ZW_RIS(:,:,:) -IF ( KRR .GE. 5 ) PRS(:,:,:,5) = ZW_RSS(:,:,:) -IF ( KRR .GE. 6 ) PRS(:,:,:,6) = ZW_RGS(:,:,:) -IF ( KRR .GE. 7 ) PRS(:,:,:,7) = ZW_RHS(:,:,:) -! -IF ( LWARM_LIMA ) PSVS(:,:,:,NSV_LIMA_NC) = ZW_CCS(:,:,:) -IF ( LWARM_LIMA .AND. LRAIN_LIMA ) PSVS(:,:,:,NSV_LIMA_NR) = ZW_CRS(:,:,:) -IF ( LCOLD_LIMA ) PSVS(:,:,:,NSV_LIMA_NI) = ZW_CIS(:,:,:) -! -IF ( NMOD_CCN .GE. 1 ) PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) = ZW_CCNFS(:,:,:,:) -IF ( NMOD_CCN .GE. 1 ) PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1) = ZW_CCNAS(:,:,:,:) -IF ( NMOD_IFN .GE. 1 ) PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1) = ZW_IFNFS(:,:,:,:) -IF ( NMOD_IFN .GE. 1 ) PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1) = ZW_IFNNS(:,:,:,:) -IF ( NMOD_IMM .GE. 1 ) PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1) = ZW_IMMNS(:,:,:,:) -IF ( LCOLD_LIMA .AND. LHHONI_LIMA ) PSVS(:,:,:,NSV_LIMA_HOM_HAZE) = ZW_HOMFS(:,:,:) -! -PTHS(:,:,:) = ZW_THS(:,:,:) -! -! Call budgets -! -IF(LBU_ENABLE) THEN - IF (LBUDGET_TH) THEN - ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_EVAP(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'REVA_BU_RTH',YDDDH, YDLDDH, YDMDDH) - ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_HONC(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'HONC_BU_RTH',YDDDH, YDLDDH, YDMDDH) - ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_HONR(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'HONR_BU_RTH',YDDDH, YDLDDH, YDMDDH) - ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_DEPS(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'DEPS_BU_RTH',YDDDH, YDLDDH, YDMDDH) - ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_DEPG(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'DEPG_BU_RTH',YDDDH, YDLDDH, YDMDDH) - ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_IMLT(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'IMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) - ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_BERFI(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'BERFI_BU_RTH',YDDDH, YDLDDH, YDMDDH) - ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_RIM(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'RIM_BU_RTH',YDDDH, YDLDDH, YDMDDH) - ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_ACC(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'ACC_BU_RTH',YDDDH, YDLDDH, YDMDDH) - ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_CFRZ(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'CFRZ_BU_RTH',YDDDH, YDLDDH, YDMDDH) - ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_WETG(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'WETG_BU_RTH',YDDDH, YDLDDH, YDMDDH) - ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_DRYG(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'DRYG_BU_RTH',YDDDH, YDLDDH, YDMDDH) - ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_GMLT(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4 , 'GMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH) - END IF - - IF (LBUDGET_RV) THEN - ZRVS(:,:,:) = ZRVS(:,:,:) - ZTOT_RR_EVAP(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRVS(:,:,:)*PRHODJ(:,:,:), 6 , 'REVA_BU_RRV',YDDDH, YDLDDH, YDMDDH) - ZRVS(:,:,:) = ZRVS(:,:,:) - ZTOT_RS_DEPS(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRVS(:,:,:)*PRHODJ(:,:,:), 6 , 'DEPS_BU_RRV',YDDDH, YDLDDH, YDMDDH) - ZRVS(:,:,:) = ZRVS(:,:,:) - ZTOT_RG_DEPG(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRVS(:,:,:)*PRHODJ(:,:,:), 6 , 'DEPG_BU_RRV',YDDDH, YDLDDH, YDMDDH) - END IF - - IF (LBUDGET_RC) THEN - ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_AUTO(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'AUTO_BU_RRC',YDDDH, YDLDDH, YDMDDH) - ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_ACCR(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'ACCR_BU_RRC',YDDDH, YDLDDH, YDMDDH) - ! impact of rain evap !!!!!! - ZRCS(:,:,:) = ZRCS(:,:,:) - CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'REVA_BU_RRC',YDDDH, YDLDDH, YDMDDH) - ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_HONC(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'HONC_BU_RRC',YDDDH, YDLDDH, YDMDDH) - ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_IMLT(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'IMLT_BU_RRC',YDDDH, YDLDDH, YDMDDH) - ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_BERFI(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'BERFI_BU_RRC',YDDDH, YDLDDH, YDMDDH) - ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_RIM(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'RIM_BU_RRC',YDDDH, YDLDDH, YDMDDH) - ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_WETG(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'WETG_BU_RRC',YDDDH, YDLDDH, YDMDDH) - ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_DRYG(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7 , 'DRYG_BU_RRC',YDDDH, YDLDDH, YDMDDH) - END IF - - IF (LBUDGET_RR) THEN - ZRRS(:,:,:) = ZRRS(:,:,:) - ZTOT_RC_AUTO(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'AUTO_BU_RRR',YDDDH, YDLDDH, YDMDDH) - ZRRS(:,:,:) = ZRRS(:,:,:) - ZTOT_RC_ACCR(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'ACCR_BU_RRR',YDDDH, YDLDDH, YDMDDH) - ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_EVAP(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'REVA_BU_RRR',YDDDH, YDLDDH, YDMDDH) - ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_HONR(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'HONR_BU_RRR',YDDDH, YDLDDH, YDMDDH) - ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_ACC(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'ACC_BU_RRR',YDDDH, YDLDDH, YDMDDH) - ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_CFRZ(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'CFRZ_BU_RRR',YDDDH, YDLDDH, YDMDDH) - ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_WETG(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'WETG_BU_RRR',YDDDH, YDLDDH, YDMDDH) - ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_DRYG(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'DRYG_BU_RRR',YDDDH, YDLDDH, YDMDDH) - ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_GMLT(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8 , 'GMLT_BU_RRR',YDDDH, YDLDDH, YDMDDH) - END IF - - IF (LBUDGET_RI) THEN - ZRIS(:,:,:) = ZRIS(:,:,:) - ZTOT_RC_HONC(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'HONC_BU_RRI',YDDDH, YDLDDH, YDMDDH) - ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_CNVI(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'CNVI_BU_RRI',YDDDH, YDLDDH, YDMDDH) - ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_CNVS(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'CNVS_BU_RRI',YDDDH, YDLDDH, YDMDDH) - ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_AGGS(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'AGGS_BU_RRI',YDDDH, YDLDDH, YDMDDH) - ZRIS(:,:,:) = ZRIS(:,:,:) - ZTOT_RC_IMLT(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'IMLT_BU_RRI',YDDDH, YDLDDH, YDMDDH) - ZRIS(:,:,:) = ZRIS(:,:,:) - ZTOT_RC_BERFI(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'BERFI_BU_RRI',YDDDH, YDLDDH, YDMDDH) - ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_HMS(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'HMS_BU_RRI',YDDDH, YDLDDH, YDMDDH) - ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_CFRZ(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'CFRZ_BU_RRI',YDDDH, YDLDDH, YDMDDH) - ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_WETG(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'WETG_BU_RRI',YDDDH, YDLDDH, YDMDDH) - ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_DRYG(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'DRYG_BU_RRI',YDDDH, YDLDDH, YDMDDH) - ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_HMG(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9 , 'HMG_BU_RRI',YDDDH, YDLDDH, YDMDDH) - END IF - - IF (LBUDGET_RS) THEN - ZRSS(:,:,:) = ZRSS(:,:,:) - ZTOT_RI_CNVI(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'CNVI_BU_RRS',YDDDH, YDLDDH, YDMDDH) - ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_DEPS(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'DEPS_BU_RRS',YDDDH, YDLDDH, YDMDDH) - ZRSS(:,:,:) = ZRSS(:,:,:) - ZTOT_RI_CNVS(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'CNVS_BU_RRS',YDDDH, YDLDDH, YDMDDH) - ZRSS(:,:,:) = ZRSS(:,:,:) - ZTOT_RI_AGGS(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'AGGS_BU_RRS',YDDDH, YDLDDH, YDMDDH) - ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_RIM(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'RIM_BU_RRS',YDDDH, YDLDDH, YDMDDH) - ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_HMS(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'HMS_BU_RRS',YDDDH, YDLDDH, YDMDDH) - ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_ACC(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'ACC_BU_RRS',YDDDH, YDLDDH, YDMDDH) - ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_CMEL(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'CMEL_BU_RRS',YDDDH, YDLDDH, YDMDDH) - ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_WETG(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'WETG_BU_RRS',YDDDH, YDLDDH, YDMDDH) - ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_DRYG(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'DRYG_BU_RRS',YDDDH, YDLDDH, YDMDDH) - END IF - - IF (LBUDGET_RG) THEN - ZRGS(:,:,:) = ZRGS(:,:,:) - ZTOT_RR_HONR(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'HONR_BU_RRG',YDDDH, YDLDDH, YDMDDH) - ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_DEPG(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'DEPG_BU_RRG',YDDDH, YDLDDH, YDMDDH) - ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_RIM(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'RIM_BU_RRG',YDDDH, YDLDDH, YDMDDH) - ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_ACC(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'ACC_BU_RRG',YDDDH, YDLDDH, YDMDDH) - ZRGS(:,:,:) = ZRGS(:,:,:) - ZTOT_RS_CMEL(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'CMEL_BU_RRG',YDDDH, YDLDDH, YDMDDH) - ZRGS(:,:,:) = ZRGS(:,:,:) - ZTOT_RR_CFRZ(:,:,:)/PTSTEP - ZTOT_RI_CFRZ(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'CFRZ_BU_RRG',YDDDH, YDLDDH, YDMDDH) - ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_WETG(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'WETG_BU_RRG',YDDDH, YDLDDH, YDMDDH) - ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_DRYG(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'DRYG_BU_RRG',YDDDH, YDLDDH, YDMDDH) - ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_HMG(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'HMG_BU_RRG',YDDDH, YDLDDH, YDMDDH) - ZRGS(:,:,:) = ZRGS(:,:,:) - ZTOT_RR_GMLT(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'GMLT_BU_RRG',YDDDH, YDLDDH, YDMDDH) - END IF - - IF (LBUDGET_RH) THEN - ZRHS(:,:,:) = ZRHS(:,:,:) + ZTOT_RH_WETG(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZRHS(:,:,:)*PRHODJ(:,:,:), 12 , 'WETG_BU_RRH',YDDDH, YDLDDH, YDMDDH) - END IF - - IF (LBUDGET_SV) THEN - ! - ! Cloud droplets - ! - ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_SELF(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'SELF_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_AUTO(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'AUTO_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_ACCR(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'ACCR_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ! impact of rain evap !!!!!! - ZCCS(:,:,:) = ZCCS(:,:,:) - CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'REVA_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_HONC(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'HONC_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_IMLT(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'IMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_RIM(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'RIM_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_WETG(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_DRYG(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC , 'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ! - ! Rain drops - ! - ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_AUTO(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'AUTO_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_SCBU(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'SCBU_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ! Rain evaporation !!!!!!!!!!!!! - ZCRS(:,:,:) = ZCRS(:,:,:) - CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'REVA_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_BRKU(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'BRKU_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_HONR(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'HONR_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_ACC(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'ACC_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_CFRZ(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'CFRZ_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_WETG(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_DRYG(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_GMLT(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR , 'GMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ! - ! Ice crystals - ! - ZCIS(:,:,:) = ZCIS(:,:,:) - ZTOT_CC_HONC(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'HONC_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_CNVI(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'CNVI_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_CNVS(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'CNVS_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_AGGS(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'AGGS_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ZCIS(:,:,:) = ZCIS(:,:,:) - ZTOT_CC_IMLT(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'IMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_HMS(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'HMS_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_CFRZ(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'CFRZ_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_WETG(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_DRYG(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH) - ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_HMG(:,:,:)/PTSTEP - CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI , 'HMG_BU_RSV',YDDDH, YDLDDH, YDMDDH) - END IF -!!$ ZTOT_RC_EVAP(I1(II),I2(II),I3(II)) = ZTOT_RC_EVAP(I1(II),I2(II),I3(II)) + Z_RC_EVAP(II) * ZMAXTIME(II) -!!$ ZTOT_CC_EVAP(I1(II),I2(II),I3(II)) = ZTOT_CC_EVAP(I1(II),I2(II),I3(II)) + Z_CC_EVAP(II) * ZMAXTIME(II) -!!$ ZTOT_CR_EVAP(I1(II),I2(II),I3(II)) = ZTOT_CR_EVAP(I1(II),I2(II),I3(II)) + Z_CR_EVAP(II) * ZMAXTIME(II) - -!!$ ZTOT_RC_WETH(I1(II),I2(II),I3(II)) = ZTOT_RC_WETH(I1(II),I2(II),I3(II)) + Z_RC_WETH(II) * ZMAXTIME(II) -!!$ ZTOT_CC_WETH(I1(II),I2(II),I3(II)) = ZTOT_CC_WETH(I1(II),I2(II),I3(II)) + Z_CC_WETH(II) * ZMAXTIME(II) -!!$ ZTOT_RR_WETH(I1(II),I2(II),I3(II)) = ZTOT_RR_WETH(I1(II),I2(II),I3(II)) + Z_RR_WETH(II) * ZMAXTIME(II) -!!$ ZTOT_CR_WETH(I1(II),I2(II),I3(II)) = ZTOT_CR_WETH(I1(II),I2(II),I3(II)) + Z_CR_WETH(II) * ZMAXTIME(II) -!!$ ZTOT_RI_WETH(I1(II),I2(II),I3(II)) = ZTOT_RI_WETH(I1(II),I2(II),I3(II)) + Z_RI_WETH(II) * ZMAXTIME(II) -!!$ ZTOT_CI_WETH(I1(II),I2(II),I3(II)) = ZTOT_CI_WETH(I1(II),I2(II),I3(II)) + Z_CI_WETH(II) * ZMAXTIME(II) -!!$ ZTOT_RS_WETH(I1(II),I2(II),I3(II)) = ZTOT_RS_WETH(I1(II),I2(II),I3(II)) + Z_RS_WETH(II) * ZMAXTIME(II) -!!$ ZTOT_RG_WETH(I1(II),I2(II),I3(II)) = ZTOT_RG_WETH(I1(II),I2(II),I3(II)) + Z_RG_WETH(II) * ZMAXTIME(II) -!!$ ZTOT_RH_WETH(I1(II),I2(II),I3(II)) = ZTOT_RH_WETH(I1(II),I2(II),I3(II)) + Z_RH_WETH(II) * ZMAXTIME(II) -!!$ ZTOT_RG_COHG(I1(II),I2(II),I3(II)) = ZTOT_RG_COHG(I1(II),I2(II),I3(II)) + Z_RG_COHG(II) * ZMAXTIME(II) -!!$ ZTOT_RR_HMLT(I1(II),I2(II),I3(II)) = ZTOT_RR_HMLT(I1(II),I2(II),I3(II)) + Z_RR_HMLT(II) * ZMAXTIME(II) -!!$ ZTOT_CR_HMLT(I1(II),I2(II),I3(II)) = ZTOT_CR_HMLT(I1(II),I2(II),I3(II)) + Z_CR_HMLT(II) * ZMAXTIME(II) - -END IF -! -END SUBROUTINE LIMA diff --git a/src/arome/micro/lima_ccn_activation.F90 b/src/arome/micro/lima_ccn_activation.F90 deleted file mode 100644 index a4824192b76ee45437af77e580d16b9be1d74ce7..0000000000000000000000000000000000000000 --- a/src/arome/micro/lima_ccn_activation.F90 +++ /dev/null @@ -1,766 +0,0 @@ -! ############################### - MODULE MODI_LIMA_CCN_ACTIVATION -! ############################### -! -INTERFACE - SUBROUTINE LIMA_CCN_ACTIVATION (PTSTEP, HFMFILE, OCLOSE_OUT, & - PRHODREF, PEXNREF, PPABST, ZT, ZTM, PW_NU, & - PTHT, PRVT, PRCT, PCCT, PRRT, PNFT, PNAT ) -! -REAL, INTENT(IN) :: PTSTEP ! Double Time step - ! (single if cold start) -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE ! Name of the output FM-file -LOGICAL, INTENT(IN) :: OCLOSE_OUT ! Conditional closure of - ! the output FM file -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! Reference density -REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXNREF ! Reference Exner function -REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! abs. pressure at time t -REAL, DIMENSION(:,:,:), INTENT(IN) :: ZT ! Temperature -REAL, DIMENSION(:,:,:), INTENT(IN) :: ZTM ! Temperature at time t-dt -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PW_NU ! updraft velocity used for - ! the nucleation param. -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHT ! Theta at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCCT ! Cloud water m.r. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRT ! Cloud water m.r. at t -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNFT ! CCN C. available at t -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNAT ! CCN C. activated at t -! -END SUBROUTINE LIMA_CCN_ACTIVATION -END INTERFACE -END MODULE MODI_LIMA_CCN_ACTIVATION -! ############################################################################# - SUBROUTINE LIMA_CCN_ACTIVATION (PTSTEP, HFMFILE, OCLOSE_OUT, & - PRHODREF, PEXNREF, PPABST, ZT, ZTM, PW_NU, & - PTHT, PRVT, PRCT, PCCT, PRRT, PNFT, PNAT ) -! ############################################################################# -! -!! -!! PURPOSE -!! ------- -!! The purpose of this routine is to compute the activation of CCN -!! according to Cohard and Pinty, QJRMS, 2000 -!! -!! -!!** METHOD -!! ------ -!! The activation of CCN is checked for quasi-saturated air parcels -!! to update the cloud droplet number concentration. -!! -!! Computation steps : -!! 1- Check where computations are necessary -!! 2- and 3- Compute the maximum of supersaturation using the iterative -!! Ridder algorithm -!! 4- Compute the nucleation source -!! 5- Deallocate local variables -!! -!! Contains : -!! 6- Functions : Ridder algorithm -!! -!! -!! REFERENCE -!! --------- -!! -!! Cohard, J.-M. and J.-P. Pinty, 2000: A comprehensive two-moment warm -!! microphysical bulk scheme. -!! Part I: Description and tests -!! Part II: 2D experiments with a non-hydrostatic model -!! Accepted for publication in Quart. J. Roy. Meteor. Soc. -!! -!! AUTHOR -!! ------ -!! J.-M. Cohard * Laboratoire d'Aerologie* -!! J.-P. Pinty * Laboratoire d'Aerologie* -!! S. Berthet * Laboratoire d'Aerologie* -!! B. Vié * Laboratoire d'Aerologie* -!! -!! MODIFICATIONS -!! ------------- -!! Original ??/??/13 -!! -!------------------------------------------------------------------------------- -! -!* 0. DECLARATIONS -! ------------ -! -USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT -USE MODD_CST, ONLY : XALPW, XBETAW, XCL, XCPD, XCPV, XGAMW, XLVTT, XMD, XMV, XRV, XTT -USE MODD_PARAM_LIMA, ONLY : LACTIT_LIMA, NMOD_CCN, XKHEN_MULTI, XCTMIN, XLIMIT_FACTOR -USE MODD_PARAM_LIMA_WARM, ONLY : XWMIN, NAHEN, NHYP, XAHENINTP1, XAHENINTP2, XCSTDCRIT, XHYPF12, & - XHYPINTP1, XHYPINTP2, XTMIN, XHYPF32, XPSI3, XAHENG, XPSI1 -! -USE MODI_GAMMA -USE MODI_LIMA_FUNCTIONS, ONLY : COUNTJV -! -IMPLICIT NONE -! -!* 0.1 Declarations of dummy arguments : -! -REAL, INTENT(IN) :: PTSTEP ! Double Time step - ! (single if cold start) -CHARACTER(LEN=*), INTENT(IN) :: HFMFILE ! Name of the output FM-file -LOGICAL, INTENT(IN) :: OCLOSE_OUT ! Conditional closure of - ! the output FM file -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! Reference density -REAL, DIMENSION(:,:,:), INTENT(IN) :: PEXNREF ! Reference Exner function -REAL, DIMENSION(:,:,:), INTENT(IN) :: PPABST ! abs. pressure at time t -REAL, DIMENSION(:,:,:), INTENT(IN) :: ZT ! Temperature -REAL, DIMENSION(:,:,:), INTENT(IN) :: ZTM ! Temperature at time t-dt -! -REAL, DIMENSION(:,:,:), INTENT(IN) :: PW_NU ! updraft velocity used for - ! the nucleation param. -! -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PTHT ! Theta at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRVT ! Water vapor m.r. at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRCT ! Cloud water m.r. at t -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PCCT ! Cloud water m.r. at t -REAL, DIMENSION(:,:,:), INTENT(IN) :: PRRT ! Cloud water m.r. at t -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNFT ! CCN C. available at t -REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNAT ! CCN C. activated at t -! -! -!* 0.1 Declarations of local variables : -! -! Packing variables -LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: GNUCT -INTEGER :: INUCT -INTEGER , DIMENSION(SIZE(GNUCT)) :: I1,I2,I3 ! Used to replace the COUNT -INTEGER :: JL ! and PACK intrinsics -! -! Packed micophysical variables -REAL, DIMENSION(:,:), ALLOCATABLE :: ZNFT ! available nucleus conc. source -REAL, DIMENSION(:,:), ALLOCATABLE :: ZNAT ! activated nucleus conc. source -! -! Other packed variables -REAL, DIMENSION(:) , ALLOCATABLE :: ZRHODREF ! RHO Dry REFerence -REAL, DIMENSION(:) , ALLOCATABLE :: ZEXNREF ! EXNer Pressure REFerence -REAL, DIMENSION(:) , ALLOCATABLE :: ZZT ! Temperature -! -! Work arrays -REAL, DIMENSION(:), ALLOCATABLE :: ZZW1, ZZW2, ZZW3, ZZW4, ZZW5, ZZW6, & - ZZTDT, & ! dT/dt - ZSMAX, & ! Maximum supersaturation - ZVEC1 -! -REAL, DIMENSION(:,:), ALLOCATABLE :: ZTMP, ZCHEN_MULTI -! -REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) & - :: ZTDT, ZDRC, ZRVSAT, ZW -REAL, DIMENSION(SIZE(PNFT,1),SIZE(PNFT,2),SIZE(PNFT,3)) & - :: ZCONC_TOT ! total CCN C. available -! -INTEGER, DIMENSION(:), ALLOCATABLE :: IVEC1 ! Vectors of indices for - ! interpolations -! -! -REAL :: ZEPS ! molar mass ratio -REAL :: ZS1, ZS2, ZXACC -INTEGER :: JMOD -INTEGER :: IIB, IIE, IJB, IJE, IKB, IKE ! Physical domain -! -!------------------------------------------------------------------------------- -! -! -!* 1. PREPARE COMPUTATIONS - PACK -! --------------------------- -! -IIB=1+JPHEXT -IIE=SIZE(PRHODREF,1) - JPHEXT -IJB=1+JPHEXT -IJE=SIZE(PRHODREF,2) - JPHEXT -IKB=1+JPVEXT -IKE=SIZE(PRHODREF,3) - JPVEXT -! -! Saturation vapor mixing ratio and radiative tendency -! -ZEPS= XMV / XMD -! -ZRVSAT(:,:,:) = ZEPS / (PPABST(:,:,:) * & - EXP(-XALPW+XBETAW/ZT(:,:,:)+XGAMW*ALOG(ZT(:,:,:))) - 1.0) -ZTDT(:,:,:) = 0. -!! ZDRC(:,:,:) = 0. -IF (LACTIT_LIMA) THEN - ZTDT(:,:,:) = (ZT(:,:,:)-ZTM(:,:,:))/PTSTEP ! dT/dt -!!! ZDRC(:,:,:) = (PRCT(:,:,:)-PRCM(:,:,:))/PTSTEP ! drc/dt -!! ZDRC(:,:,:) = PRCS(:,:,:)-(PRCT(:,:,:)/PTSTEP) ! drc/dt -!! -!! BV - W and drc/dt effect should not be included in ZTDT (already accounted for in the computations) ? -!! -!! ZTDT(:,:,:) = MIN(0.,ZTDT(:,:,:)+(XG*PW_NU(:,:,:))/XCPD- & -!! (XLVTT+(XCPV-XCL)*(ZT(:,:,:)-XTT))*ZDRC(:,:,:)/XCPD) -END IF -! -! find locations where CCN are available -! -ZCONC_TOT(:,:,:) = 0.0 -DO JMOD = 1, NMOD_CCN - ZCONC_TOT(:,:,:) = ZCONC_TOT(:,:,:) + PNFT(:,:,:,JMOD) ! sum over the free CCN -ENDDO -! -! optimization by looking for locations where -! the updraft velocity is positive!!! -! -GNUCT(:,:,:) = .FALSE. -! -! NEW : -22°C = limit sup for condensation freezing in Fridlin et al., 2007 -IF( LACTIT_LIMA ) THEN - GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) = (PW_NU(IIB:IIE,IJB:IJE,IKB:IKE)>XWMIN .OR. & - ZTDT(IIB:IIE,IJB:IJE,IKB:IKE)<XTMIN) .AND.& - PRVT(IIB:IIE,IJB:IJE,IKB:IKE)>(0.98*ZRVSAT(IIB:IIE,IJB:IJE,IKB:IKE))& - .AND. ZT(IIB:IIE,IJB:IJE,IKB:IKE)>(XTT-22.) & - .AND. ZCONC_TOT(IIB:IIE,IJB:IJE,IKB:IKE)>XCTMIN(4) -ELSE - GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) = PW_NU(IIB:IIE,IJB:IJE,IKB:IKE)>XWMIN .AND.& - PRVT(IIB:IIE,IJB:IJE,IKB:IKE)>(0.98*ZRVSAT(IIB:IIE,IJB:IJE,IKB:IKE))& - .AND. ZT(IIB:IIE,IJB:IJE,IKB:IKE)>(XTT-22.) & - .AND. ZCONC_TOT(IIB:IIE,IJB:IJE,IKB:IKE)>XCTMIN(4) -END IF -INUCT = COUNTJV( GNUCT(:,:,:),I1(:),I2(:),I3(:)) -! -IF( INUCT >= 1 ) THEN -! - ALLOCATE(ZNFT(INUCT,NMOD_CCN)) - ALLOCATE(ZNAT(INUCT,NMOD_CCN)) - ALLOCATE(ZTMP(INUCT,NMOD_CCN)) - ALLOCATE(ZZT(INUCT)) - ALLOCATE(ZZTDT(INUCT)) - ALLOCATE(ZZW1(INUCT)) - ALLOCATE(ZZW2(INUCT)) - ALLOCATE(ZZW3(INUCT)) - ALLOCATE(ZZW4(INUCT)) - ALLOCATE(ZZW5(INUCT)) - ALLOCATE(ZZW6(INUCT)) - ALLOCATE(ZCHEN_MULTI(INUCT,NMOD_CCN)) - ALLOCATE(ZVEC1(INUCT)) - ALLOCATE(IVEC1(INUCT)) - ALLOCATE(ZRHODREF(INUCT)) - ALLOCATE(ZEXNREF(INUCT)) - DO JL=1,INUCT - ZZT(JL) = ZT(I1(JL),I2(JL),I3(JL)) - ZZW1(JL) = ZRVSAT(I1(JL),I2(JL),I3(JL)) - ZZW2(JL) = PW_NU(I1(JL),I2(JL),I3(JL)) - ZZTDT(JL) = ZTDT(I1(JL),I2(JL),I3(JL)) - ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL)) - ZEXNREF(JL) = PEXNREF(I1(JL),I2(JL),I3(JL)) - DO JMOD = 1,NMOD_CCN - ZNFT(JL,JMOD) = PNFT(I1(JL),I2(JL),I3(JL),JMOD) - ZNAT(JL,JMOD) = PNAT(I1(JL),I2(JL),I3(JL),JMOD) - ZCHEN_MULTI(JL,JMOD) = (ZNFT(JL,JMOD)+ZNAT(JL,JMOD))*ZRHODREF(JL) & - / XLIMIT_FACTOR(JMOD) - ENDDO - ENDDO -! - ZZW1(:) = 1.0/ZEPS + 1.0/ZZW1(:) & - + (((XLVTT+(XCPV-XCL)*(ZZT(:)-XTT))/ZZT(:))**2)/(XCPD*XRV) ! Psi2 -! -! -!------------------------------------------------------------------------------- -! -! -!* 2. compute the constant term (ZZW3) relative to smax -! ---------------------------------------------------- -! -! Remark : in LIMA's nucleation parameterization, Smax=0.01 for a supersaturation of 1% ! -! -! - ZVEC1(:) = MAX( 1.00001, MIN( FLOAT(NAHEN)-0.00001, & - XAHENINTP1 * ZZT(:) + XAHENINTP2 ) ) - IVEC1(:) = INT( ZVEC1(:) ) - ZVEC1(:) = ZVEC1(:) - FLOAT( IVEC1(:) ) - ALLOCATE(ZSMAX(INUCT)) -! -! - IF (LACTIT_LIMA) THEN ! including a cooling rate -! -! Compute the tabulation of function of ZZW3 : -! -! (Psi1*w+Psi3*DT/Dt)**1.5 -! ZZW3 = XAHENG*(Psi1*w + Psi3*DT/Dt)**1.5 = ------------------------ -! 2*pi*rho_l*G**(3/2) -! -! - ZZW4(:)=XPSI1( IVEC1(:)+1)*ZZW2(:)+XPSI3(IVEC1(:)+1)*ZZTDT(:) - ZZW5(:)=XPSI1( IVEC1(:) )*ZZW2(:)+XPSI3(IVEC1(:) )*ZZTDT(:) - WHERE (ZZW4(:) < 0. .OR. ZZW5(:) < 0.) - ZZW4(:) = 0. - ZZW5(:) = 0. - END WHERE - ZZW3(:) = XAHENG( IVEC1(:)+1)*(ZZW4(:)**1.5)* ZVEC1(:) & - - XAHENG( IVEC1(:) )*(ZZW5(:)**1.5)*(ZVEC1(:) - 1.0) - ! Cste*((Psi1*w+Psi3*dT/dt)/(G))**1.5 -! -! - ELSE ! LACTIT_LIMA , for clouds -! -! -! Compute the tabulation of function of ZZW3 : -! -! (Psi1 * w)**1.5 -! ZZW3 = XAHENG * (Psi1 * w)**1.5 = ------------------------- -! 2 pi rho_l * G**(3/2) -! -! - ZZW3(:)=XAHENG(IVEC1(:)+1)*((XPSI1(IVEC1(:)+1)*ZZW2(:))**1.5)* ZVEC1(:) & - -XAHENG(IVEC1(:) )*((XPSI1(IVEC1(:) )*ZZW2(:))**1.5)*(ZVEC1(:)-1.0) -! - END IF ! LACTIT_LIMA -! -! -! (Psi1*w+Psi3*DT/Dt)**1.5 rho_air -! ZZW3 = ------------------------ * ------- -! 2*pi*rho_l*G**(3/2) Psi2 -! - ZZW5(:) = 1. - ZZW3(:) = (ZZW3(:)/ZZW1(:))*ZRHODREF(:) ! R.H.S. of Eq 9 of CPB 98 but - ! for multiple aerosol modes - WHERE (ZZW3(:) == 0.) - ZZW5(:) = -1. - END WHERE -! -! -!------------------------------------------------------------------------------- -! -! -!* 3. Compute the maximum of supersaturation -! ----------------------------------------- -! -! -! estimate S_max for the CPB98 parameterization with SEVERAL aerosols mode -! Reminder : Smax=0.01 for a 1% supersaturation -! -! Interval bounds to tabulate sursaturation Smax -! Check with values used for tabulation in ini_lima_warm.f90 - ZS1 = 1.0E-5 ! corresponds to 0.001% supersaturation - ZS2 = 5.0E-2 ! corresponds to 5.0% supersaturation - ZXACC = 1.0E-7 ! Accuracy needed for the search in [NO UNITS] -! - ZSMAX(:) = ZRIDDR(ZS1,ZS2,ZXACC,ZZW3(:),INUCT) ! ZSMAX(:) is in [NO UNITS] -! -! -!------------------------------------------------------------------------------- -! -! -!* 4. Compute the nucleus source -! ----------------------------- -! -! -! Again : Smax=0.01 for a 1% supersaturation -! Modified values for Beta and C (see in init_aerosol_properties) account for that -! - WHERE (ZZW5(:) > 0. .AND. ZSMAX(:) > 0.) - ZVEC1(:) = MAX( 1.00001, MIN( FLOAT(NHYP)-0.00001, & - XHYPINTP1*LOG(ZSMAX(:))+XHYPINTP2 ) ) - IVEC1(:) = INT( ZVEC1(:) ) - ZVEC1(:) = ZVEC1(:) - FLOAT( IVEC1(:) ) - END WHERE - ZZW6(:) = 0. ! initialize the change of cloud droplet concentration -! - ZTMP(:,:)=0.0 -! -! Compute the concentration of activable aerosols for each mode -! based on the max of supersaturation ( -> ZTMP ) -! - DO JMOD = 1, NMOD_CCN ! iteration on mode number - ZZW1(:) = 0. - ZZW2(:) = 0. - ZZW3(:) = 0. - ! - WHERE( ZSMAX(:)>0.0 ) - ZZW2(:) = XHYPF12( IVEC1(:)+1,JMOD )* ZVEC1(:) & ! hypergeo function - - XHYPF12( IVEC1(:) ,JMOD )*(ZVEC1(:) - 1.0) ! XHYPF12 is tabulated - ! - ZTMP(:,JMOD) = (ZCHEN_MULTI(:,JMOD)/ZRHODREF(:))*ZSMAX(:)**XKHEN_MULTI(JMOD) & - *ZZW2(:) - ENDWHERE - ENDDO -! -! Compute the concentration of aerosols activated at this time step -! as the difference between ZTMP and the aerosols already activated at t-dt (ZZW1) -! - DO JMOD = 1, NMOD_CCN ! iteration on mode number - ZZW1(:) = 0. - ZZW2(:) = 0. - ZZW3(:) = 0. - ! - WHERE( SUM(ZTMP(:,:),DIM=2) .GT. 25.E6/ZRHODREF(:) ) - ZZW1(:) = MIN( ZNFT(:,JMOD),MAX( ZTMP(:,JMOD)- ZNAT(:,JMOD) , 0.0 ) ) - ENDWHERE - ! - !* update the concentration of activated CCN = Na - ! - PNAT(:,:,:,JMOD) = PNAT(:,:,:,JMOD) + UNPACK( ZZW1(:), MASK=GNUCT(:,:,:), FIELD=0.0 ) - ! - !* update the concentration of free CCN = Nf - ! - PNFT(:,:,:,JMOD) = PNFT(:,:,:,JMOD) - UNPACK( ZZW1(:), MASK=GNUCT(:,:,:), FIELD=0.0 ) - ! - !* prepare to update the cloud water concentration - ! - ZZW6(:) = ZZW6(:) + ZZW1(:) - ENDDO -! -! Output tendencies -! - ZZW1(:)=0. - WHERE (ZZW5(:)>0.0 .AND. ZSMAX(:)>0.0) ! ZZW1 is computed with ZSMAX [NO UNIT] - ZZW1(:) = MIN(XCSTDCRIT*ZZW6(:)/(((ZZT(:)*ZSMAX(:))**3)*ZRHODREF(:)),1.E-5) - END WHERE - ZW(:,:,:) = MIN( UNPACK( ZZW1(:),MASK=GNUCT(:,:,:),FIELD=0.0 ),PRVT(:,:,:) ) -! - PRVT(:,:,:) = PRVT(:,:,:) - ZW(:,:,:) - PRCT(:,:,:) = PRCT(:,:,:) + ZW(:,:,:) - PCCT(:,:,:) = PCCT(:,:,:) + UNPACK( ZZW6(:),MASK=GNUCT(:,:,:),FIELD=0. ) - PTHT(:,:,:) = PTHT(:,:,:) + ZW(:,:,:) * (XLVTT+(XCPV-XCL)*(ZT(:,:,:)-XTT))/ & - (PEXNREF(:,:,:)*(XCPD+XCPV*PRVT(:,:,:)+XCL*(PRCT(:,:,:)+PRRT(:,:,:)))) -! -! -!------------------------------------------------------------------------------- -! -! -!* 5. Cleaning -! ----------- -! -! - DEALLOCATE(IVEC1) - DEALLOCATE(ZVEC1) - DEALLOCATE(ZNFT) - DEALLOCATE(ZNAT) - DEALLOCATE(ZZT) - DEALLOCATE(ZSMAX) - DEALLOCATE(ZZW1) - DEALLOCATE(ZZW2) - DEALLOCATE(ZZW3) - DEALLOCATE(ZZW4) - DEALLOCATE(ZZW5) - DEALLOCATE(ZZW6) - DEALLOCATE(ZZTDT) - DEALLOCATE(ZRHODREF) - DEALLOCATE(ZCHEN_MULTI) - DEALLOCATE(ZEXNREF) -! -END IF ! INUCT -! -! -! -!------------------------------------------------------------------------------- -! -! -!* 6. Functions used to compute the maximum of supersaturation -! ----------------------------------------------------------- -! -! -CONTAINS -!------------------------------------------------------------------------------ -! - FUNCTION ZRIDDR(PX1,PX2INIT,PXACC,PZZW3,NPTS) RESULT(PZRIDDR) -! -! -!!**** *ZRIDDR* - iterative algorithm to find root of a function -!! -!! -!! PURPOSE -!! ------- -!! The purpose of this function is to find the root of a given function -!! the arguments are the brackets bounds (the interval where to find the root) -!! the accuracy needed and the input parameters of the given function. -!! Using Ridders' method, return the root of a function known to lie between -!! PX1 and PX2. The root, returned as PZRIDDR, will be refined to an approximate -!! accuracy PXACC. -!! -!!** METHOD -!! ------ -!! Ridders' method -!! -!! EXTERNAL -!! -------- -!! FUNCSMAX -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! -!! REFERENCE -!! --------- -!! NUMERICAL RECIPES IN FORTRAN 77: THE ART OF SCIENTIFIC COMPUTING -!! (ISBN 0-521-43064-X) -!! Copyright (C) 1986-1992 by Cambridge University Press. -!! Programs Copyright (C) 1986-1992 by Numerical Recipes Software. -!! -!! AUTHOR -!! ------ -!! Frederick Chosson *CERFACS* -!! -!! MODIFICATIONS -!! ------------- -!! Original 12/07/07 -!! S.BERTHET 2008 vectorization -!------------------------------------------------------------------------------ -! -!* 0. DECLARATIONS -! -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments and result -! -INTEGER, INTENT(IN) :: NPTS -REAL, DIMENSION(:), INTENT(IN) :: PZZW3 -REAL, INTENT(IN) :: PX1, PX2INIT, PXACC -REAL, DIMENSION(:), ALLOCATABLE :: PZRIDDR -! -!* 0.2 declarations of local variables -! -! -INTEGER, PARAMETER :: MAXIT=60 -REAL, PARAMETER :: UNUSED=0.0 !-1.11e30 -REAL, DIMENSION(:), ALLOCATABLE :: fh,fl, fm,fnew -REAL :: s,xh,xl,xm,xnew -REAL :: PX2 -INTEGER :: j, JL -! -ALLOCATE( fh(NPTS)) -ALLOCATE( fl(NPTS)) -ALLOCATE( fm(NPTS)) -ALLOCATE(fnew(NPTS)) -ALLOCATE(PZRIDDR(NPTS)) -! -PZRIDDR(:)= UNUSED -PX2 = PX2INIT -fl(:) = FUNCSMAX(PX1,PZZW3(:),NPTS) -fh(:) = FUNCSMAX(PX2,PZZW3(:),NPTS) -! -DO JL = 1, NPTS - PX2 = PX2INIT -100 if ((fl(JL) > 0.0 .and. fh(JL) < 0.0) .or. (fl(JL) < 0.0 .and. fh(JL) > 0.0)) then - xl = PX1 - xh = PX2 - do j=1,MAXIT - xm = 0.5*(xl+xh) - fm(JL) = SINGL_FUNCSMAX(xm,PZZW3(JL),JL) - s = sqrt(fm(JL)**2-fl(JL)*fh(JL)) - if (s == 0.0) then - GO TO 101 - endif - xnew = xm+(xm-xl)*(sign(1.0,fl(JL)-fh(JL))*fm(JL)/s) - if (abs(xnew - PZRIDDR(JL)) <= PXACC) then - GO TO 101 - endif - PZRIDDR(JL) = xnew - fnew(JL) = SINGL_FUNCSMAX(PZRIDDR(JL),PZZW3(JL),JL) - if (fnew(JL) == 0.0) then - GO TO 101 - endif - if (sign(fm(JL),fnew(JL)) /= fm(JL)) then - xl =xm - fl(JL)=fm(JL) - xh =PZRIDDR(JL) - fh(JL)=fnew(JL) - else if (sign(fl(JL),fnew(JL)) /= fl(JL)) then - xh =PZRIDDR(JL) - fh(JL)=fnew(JL) - else if (sign(fh(JL),fnew(JL)) /= fh(JL)) then - xl =PZRIDDR(JL) - fl(JL)=fnew(JL) - else if (PX2 .lt. 0.05) then - PX2 = PX2 + 1.0E-2 - PRINT*, 'PX2 ALWAYS too small, we put a greater one : PX2 =',PX2 - fh(JL) = SINGL_FUNCSMAX(PX2,PZZW3(JL),JL) - go to 100 - print*, 'PZRIDDR: never get here' - STOP - end if - if (abs(xh-xl) <= PXACC) then - GO TO 101 - endif -!!SB -!!$ if (j == MAXIT .and. (abs(xh-xl) > PXACC) ) then -!!$ PZRIDDR(JL)=0.0 -!!$ go to 101 -!!$ endif -!!SB - end do - print*, 'PZRIDDR: exceeded maximum iterations',j - STOP - else if (fl(JL) == 0.0) then - PZRIDDR(JL)=PX1 - else if (fh(JL) == 0.0) then - PZRIDDR(JL)=PX2 - else if (PX2 .lt. 0.05) then - PX2 = PX2 + 1.0E-2 - PRINT*, 'PX2 too small, we put a greater one : PX2 =',PX2 - fh(JL) = SINGL_FUNCSMAX(PX2,PZZW3(JL),JL) - go to 100 - else -!!$ print*, 'PZRIDDR: root must be bracketed' -!!$ print*,'npts ',NPTS,'jl',JL -!!$ print*, 'PX1,PX2,fl,fh',PX1,PX2,fl(JL),fh(JL) -!!$ print*, 'PX2 = 30 % of supersaturation, there is no solution for Smax' -!!$ print*, 'try to put greater PX2 (upper bound for Smax research)' -!!$ STOP - PZRIDDR(JL)=0.0 - go to 101 - end if -101 ENDDO -! -DEALLOCATE( fh) -DEALLOCATE( fl) -DEALLOCATE( fm) -DEALLOCATE(fnew) -! -END FUNCTION ZRIDDR -! -!------------------------------------------------------------------------------ -! - FUNCTION FUNCSMAX(PPZSMAX,PPZZW3,NPTS) RESULT(PFUNCSMAX) -! -! -!!**** *FUNCSMAX* - function describing SMAX function that you want to find the root -!! -!! -!! PURPOSE -!! ------- -!! This function describe the equilibrium between Smax and two aerosol mode -!! acting as CCN. This function is derive from eq. (9) of CPB98 but for two -!! aerosols mode described by their respective parameters C, k, Mu, Beta. -!! the arguments are the supersaturation in "no unit" and the r.h.s. of this eq. -!! and the ratio of concentration of injected aerosols on maximum concentration -!! of injected aerosols ever. -!!** METHOD -!! ------ -!! This function is called by zriddr.f90 -!! -!! EXTERNAL -!! -------- -!! -!! IMPLICIT ARGUMENTS -!! ------------------ -!! Module MODD_PARAM_LIMA_WARM -!! XHYPF32 -!! -!! XHYPINTP1 -!! XHYPINTP2 -!! -!! Module MODD_PARAM_C2R2 -!! XKHEN_MULTI() -!! NMOD_CCN -!! -!! REFERENCE -!! --------- -!! Cohard, J.M., J.P.Pinty, K.Suhre, 2000:"On the parameterization of activation -!! spectra from cloud condensation nuclei microphysical properties", -!! J. Geophys. Res., Vol.105, N0.D9, pp. 11753-11766 -!! -!! AUTHOR -!! ------ -!! Frederick Chosson *CERFACS* -!! -!! MODIFICATIONS -!! ------------- -!! Original 12/07/07 -!! S.Berthet 19/03/08 Extension a une population multimodale d aerosols -! -!------------------------------------------------------------------------------ -! -!* 0. DECLARATIONS -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments and result -! -INTEGER, INTENT(IN) :: NPTS -REAL, INTENT(IN) :: PPZSMAX ! supersaturation is already in no units -REAL, DIMENSION(:), INTENT(IN) :: PPZZW3 ! -REAL, DIMENSION(:), ALLOCATABLE :: PFUNCSMAX ! -! -!* 0.2 declarations of local variables -! -REAL :: ZHYPF -! -REAL :: PZVEC1 -INTEGER :: PIVEC1 -! -ALLOCATE(PFUNCSMAX(NPTS)) -! -PFUNCSMAX(:) = 0. -PZVEC1 = MAX( 1.00001,MIN( FLOAT(NHYP)-0.00001, & - XHYPINTP1*LOG(PPZSMAX)+XHYPINTP2 ) ) -PIVEC1 = INT( PZVEC1 ) -PZVEC1 = PZVEC1 - FLOAT( PIVEC1 ) -DO JMOD = 1, NMOD_CCN - ZHYPF = 0. ! XHYPF32 is tabulated with ZSMAX in [NO UNITS] - ZHYPF = XHYPF32( PIVEC1+1,JMOD ) * PZVEC1 & - - XHYPF32( PIVEC1 ,JMOD ) *(PZVEC1 - 1.0) - ! sum of s**(ki+2) * F32 * Ci * ki * beta(ki/2,3/2) - PFUNCSMAX(:) = PFUNCSMAX(:) + (PPZSMAX)**(XKHEN_MULTI(JMOD) + 2) & - * ZHYPF* XKHEN_MULTI(JMOD) * ZCHEN_MULTI(:,JMOD) & - * GAMMA_X0D( XKHEN_MULTI(JMOD)/2.0)*GAMMA_X0D(3.0/2.0) & - / GAMMA_X0D((XKHEN_MULTI(JMOD)+3.0)/2.0) -ENDDO -! function l.h.s. minus r.h.s. of eq. (9) of CPB98 but for NMOD_CCN aerosol mode -PFUNCSMAX(:) = PFUNCSMAX(:) - PPZZW3(:) -! -END FUNCTION FUNCSMAX -! -!------------------------------------------------------------------------------ -! - FUNCTION SINGL_FUNCSMAX(PPZSMAX,PPZZW3,KINDEX) RESULT(PSINGL_FUNCSMAX) -! -! -!!**** *SINGL_FUNCSMAX* - same function as FUNCSMAX -!! -!! -!! PURPOSE -!! ------- -! As for FUNCSMAX but for a scalar -!! -!!** METHOD -!! ------ -!! This function is called by zriddr.f90 -!! -!------------------------------------------------------------------------------ -! -!* 0. DECLARATIONS -! -IMPLICIT NONE -! -!* 0.1 declarations of arguments and result -! -INTEGER, INTENT(IN) :: KINDEX -REAL, INTENT(IN) :: PPZSMAX ! supersaturation is "no unit" -REAL, INTENT(IN) :: PPZZW3 ! -REAL :: PSINGL_FUNCSMAX ! -! -!* 0.2 declarations of local variables -! -REAL :: ZHYPF -! -REAL :: PZVEC1 -INTEGER :: PIVEC1 -! -PSINGL_FUNCSMAX = 0. -PZVEC1 = MAX( 1.00001,MIN( FLOAT(NHYP)-0.00001, & - XHYPINTP1*LOG(PPZSMAX)+XHYPINTP2 ) ) -PIVEC1 = INT( PZVEC1 ) -PZVEC1 = PZVEC1 - FLOAT( PIVEC1 ) -DO JMOD = 1, NMOD_CCN - ZHYPF = 0. ! XHYPF32 is tabulated with ZSMAX in [NO UNITS] - ZHYPF = XHYPF32( PIVEC1+1,JMOD ) * PZVEC1 & - - XHYPF32( PIVEC1 ,JMOD ) *(PZVEC1 - 1.0) - ! sum of s**(ki+2) * F32 * Ci * ki * bêta(ki/2,3/2) - PSINGL_FUNCSMAX = PSINGL_FUNCSMAX + (PPZSMAX)**(XKHEN_MULTI(JMOD) + 2) & - * ZHYPF* XKHEN_MULTI(JMOD) * ZCHEN_MULTI(KINDEX,JMOD) & - * GAMMA_X0D( XKHEN_MULTI(JMOD)/2.0)*GAMMA_X0D(3.0/2.0) & - / GAMMA_X0D((XKHEN_MULTI(JMOD)+3.0)/2.0) -ENDDO -! function l.h.s. minus r.h.s. of eq. (9) of CPB98 but for NMOD_CCN aerosol mode -PSINGL_FUNCSMAX = PSINGL_FUNCSMAX - PPZZW3 -! -END FUNCTION SINGL_FUNCSMAX -! -!----------------------------------------------------------------------------- -! -END SUBROUTINE LIMA_CCN_ACTIVATION diff --git a/src/common/aux/modd_nsv.f90 b/src/common/aux/modd_nsv.f90 new file mode 100644 index 0000000000000000000000000000000000000000..ec95d8957071f201ebd60118648cf31134b8910a --- /dev/null +++ b/src/common/aux/modd_nsv.f90 @@ -0,0 +1,261 @@ +!MNH_LIC Copyright 2001-2021 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 MODD_NSV +! ############### +! +!!**** *MODD_NSV* - declaration of scalar variables numbers +!! +!! PURPOSE +!! ------- +!! Arrays to store the per-model NSV_* values number (suffix _A denote an array) +!! +!! AUTHOR +!! ------ +!! D. Gazen L.A. +!! +!! MODIFICATIONS +!! ------------- +!! Original 01/02/01 +!! J.-P. Pinty 29/11/02 add C3R5, ELEC +!! V. Masson 01/2004 add scalar names +!! M. Leriche 12/04/07 add aqueous chemistry +!! M. Leriche 08/07/10 add ice phase chemistry +!! C.Lac 07/11 add conditional sampling +!! Pialat/Tulet 15/02/12 add ForeFire +!! Modification 01/2016 (JP Pinty) Add LIMA +!! V. Vionnet 07/17 add blowing snow +! P. Wautelet 10/03/2021: add CSVNAMES and CSVNAMES_A to store the name of all the scalar variables +! B. Vie 06/2021: add prognostic supersaturation for LIMA +! +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +! +USE MODD_PARAMETERS, ONLY : JPMODELMAX, & ! Maximum allowed number of nested models + JPSVMAX, & ! Maximum number of scalar variables + JPSVNAMELGTMAX ! Maximum length of a scalar variable name +! +IMPLICIT NONE +SAVE +! +REAL,DIMENSION(JPSVMAX) :: XSVMIN ! minimum value for SV variables +! +LOGICAL :: LINI_NSV = .FALSE. ! becomes True when routine INI_NSV is called +! +CHARACTER(LEN=JPSVNAMELGTMAX), DIMENSION(:,:), ALLOCATABLE, TARGET :: CSVNAMES_A !Names of all the scalar variables + +INTEGER,DIMENSION(JPMODELMAX)::NSV_A = 0 ! total number of scalar variables + ! NSV_A = NSV_USER_A+NSV_C2R2_A+NSV_CHEM_A+.. +INTEGER,DIMENSION(JPMODELMAX)::NSV_USER_A = 0 ! number of user scalar variables with + ! indices in the range : 1...NSV_USER_A +! +INTEGER,DIMENSION(JPMODELMAX)::NSV_C2R2_A = 0 ! number of liq scalar in C2R2 + ! and in C3R5 +INTEGER,DIMENSION(JPMODELMAX)::NSV_C2R2BEG_A = 0 ! with indices in the range : +INTEGER,DIMENSION(JPMODELMAX)::NSV_C2R2END_A = 0 ! NSV_C2R2BEG_A...NSV_C2R2END_A +! +INTEGER,DIMENSION(JPMODELMAX)::NSV_C1R3_A = 0 ! number of ice scalar in C3R5 +INTEGER,DIMENSION(JPMODELMAX)::NSV_C1R3BEG_A = 0 ! with indices in the range : +INTEGER,DIMENSION(JPMODELMAX)::NSV_C1R3END_A = 0 ! NSV_C1R3BEG_A...NSV_C1R3END_A +! +INTEGER,DIMENSION(JPMODELMAX)::NSV_ELEC_A = 0 ! number of scalar in ELEC +INTEGER,DIMENSION(JPMODELMAX)::NSV_ELECBEG_A = 0 ! with indices in the range : +INTEGER,DIMENSION(JPMODELMAX)::NSV_ELECEND_A = 0 ! NSV_ELECBEG_A...NSV_ELECEND_A +! +INTEGER,DIMENSION(JPMODELMAX)::NSV_CHEM_A = 0 ! number of chemical scalar +INTEGER,DIMENSION(JPMODELMAX)::NSV_CHEMBEG_A = 0 ! with indices in the range : +INTEGER,DIMENSION(JPMODELMAX)::NSV_CHEMEND_A = 0 ! NSV_CHEMBEG_A...NSV_CHEMEND_A +! +INTEGER,DIMENSION(JPMODELMAX)::NSV_CHGS_A = 0 ! number of gaseous chemcial species +INTEGER,DIMENSION(JPMODELMAX)::NSV_CHGSBEG_A = 0 ! with indices +INTEGER,DIMENSION(JPMODELMAX)::NSV_CHGSEND_A = 0 ! NSV_CHGSBEG_ +! +INTEGER,DIMENSION(JPMODELMAX)::NSV_CHAC_A = 0 ! number of aqueous chemical species +INTEGER,DIMENSION(JPMODELMAX)::NSV_CHACBEG_A = 0 ! with indices +INTEGER,DIMENSION(JPMODELMAX)::NSV_CHACEND_A = 0 ! NSV_CHACBEG +! +INTEGER,DIMENSION(JPMODELMAX)::NSV_CHIC_A = 0 ! number of ice phase chemical species +INTEGER,DIMENSION(JPMODELMAX)::NSV_CHICBEG_A = 0 ! with indices +INTEGER,DIMENSION(JPMODELMAX)::NSV_CHICEND_A = 0 ! NSV_CHICBEG +! +INTEGER,DIMENSION(JPMODELMAX)::NSV_LG_A = 0 ! number of LaGrangian +INTEGER,DIMENSION(JPMODELMAX)::NSV_LGBEG_A = 0 ! with indices in the range : +INTEGER,DIMENSION(JPMODELMAX)::NSV_LGEND_A = 0 ! NSV_LGBEG_A...NSV_LGEND_A +! +INTEGER,DIMENSION(JPMODELMAX)::NSV_LNOX_A = 0 ! number of lightning NOx +INTEGER,DIMENSION(JPMODELMAX)::NSV_LNOXBEG_A = 0 ! with indices in the range : +INTEGER,DIMENSION(JPMODELMAX)::NSV_LNOXEND_A = 0 ! NSV_LNOXBEG_A...NSV_LNOXEND_A ! +INTEGER,DIMENSION(JPMODELMAX)::NSV_DST_A = 0 ! number of dust scalar +INTEGER,DIMENSION(JPMODELMAX)::NSV_DSTBEG_A = 0 ! with indices in the range : +INTEGER,DIMENSION(JPMODELMAX)::NSV_DSTEND_A = 0 ! NSV_DSTBEG_A...NSV_DSTEND_A +! +INTEGER,DIMENSION(JPMODELMAX)::NSV_SLT_A = 0 ! number of sea salt scalar +INTEGER,DIMENSION(JPMODELMAX)::NSV_SLTBEG_A = 0 ! with indices in the range : +INTEGER,DIMENSION(JPMODELMAX)::NSV_SLTEND_A = 0 ! NSV_SLTBEG_A...NSV_SLTEND_A +! +INTEGER,DIMENSION(JPMODELMAX)::NSV_AER_A = 0 ! number of aerosol scalar +INTEGER,DIMENSION(JPMODELMAX)::NSV_AERBEG_A = 0 ! with indices in the range : +INTEGER,DIMENSION(JPMODELMAX)::NSV_AEREND_A = 0 ! NSV_AERBEG_A...NSV_AEREND_A +! +INTEGER,DIMENSION(JPMODELMAX)::NSV_DSTDEP_A = 0 ! number of aerosol scalar +INTEGER,DIMENSION(JPMODELMAX)::NSV_DSTDEPBEG_A = 0 ! with indices in the range : +INTEGER,DIMENSION(JPMODELMAX)::NSV_DSTDEPEND_A = 0 ! NSV_AERBEG_A...NSV_AEREND_A +! +INTEGER,DIMENSION(JPMODELMAX)::NSV_AERDEP_A = 0 ! number of aerosol scalar +INTEGER,DIMENSION(JPMODELMAX)::NSV_AERDEPBEG_A = 0 ! with indices in the range : +INTEGER,DIMENSION(JPMODELMAX)::NSV_AERDEPEND_A = 0 ! NSV_AERBEG_A...NSV_AEREND_A +! +INTEGER,DIMENSION(JPMODELMAX)::NSV_SLTDEP_A = 0 ! number of aerosol scalar +INTEGER,DIMENSION(JPMODELMAX)::NSV_SLTDEPBEG_A = 0 ! with indices in the range : +INTEGER,DIMENSION(JPMODELMAX)::NSV_SLTDEPEND_A = 0 ! NSV_SLTBEG_A...NSV_SLTEND_A +! +INTEGER,DIMENSION(JPMODELMAX)::NSV_PP_A = 0 ! number of passive pol. +INTEGER,DIMENSION(JPMODELMAX)::NSV_PPBEG_A = 0 ! with indices in the range : +INTEGER,DIMENSION(JPMODELMAX)::NSV_PPEND_A = 0 ! NSV_PPBEG_A...NSV_PPEND_A +! +INTEGER,DIMENSION(JPMODELMAX)::NSV_CS_A = 0 ! number of condit.samplings +INTEGER,DIMENSION(JPMODELMAX)::NSV_CSBEG_A = 0 ! with indices in the range : +INTEGER,DIMENSION(JPMODELMAX)::NSV_CSEND_A = 0 ! NSV_CSBEG_A...NSV_CSEND_A +! +INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_A = 0 ! number of scalar in LIMA +INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_BEG_A = 0 ! with indices in the range : +INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_END_A = 0 ! NSV_LIMA_BEG_A...NSV_LIMA_END_A +INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_NC_A = 0 ! First Nc variable +INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_NR_A = 0 ! First Nr variable +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. +INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_HOM_HAZE_A = 0 ! Hom. freezing of CCN +INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_SPRO_A = 0 ! Supersaturation +! +#ifdef MNH_FOREFIRE +INTEGER,DIMENSION(JPMODELMAX)::NSV_FF_A = 0 ! number of ForeFire scalar variables +INTEGER,DIMENSION(JPMODELMAX)::NSV_FFBEG_A = 0 ! with indices in the range : +INTEGER,DIMENSION(JPMODELMAX)::NSV_FFEND_A = 0 ! NSV_FFBEG_A...NSV_FFEND_A +#endif +! +INTEGER,DIMENSION(JPMODELMAX)::NSV_SNW_A = 0 ! number of blowing snow scalar +INTEGER,DIMENSION(JPMODELMAX)::NSV_SNWBEG_A = 0 ! with indices in the range : +INTEGER,DIMENSION(JPMODELMAX)::NSV_SNWEND_A = 0 ! NSV_SNWBEG_A...NSV_SNWEND_A +! +!############################################################################### +! +! variables updated for the current model +! +CHARACTER(LEN=JPSVNAMELGTMAX), DIMENSION(:), POINTER :: CSVNAMES !Names of all the scalar variables +CHARACTER(LEN=6), DIMENSION(:), ALLOCATABLE :: CSV ! name of the scalar variables +INTEGER :: NSV = 0 ! total number of user scalar variables +! +INTEGER :: NSV_USER = 0 ! number of user scalar variables with indices + ! in the range : 1...NSV_USER +INTEGER :: NSV_C2R2 = 0 ! number of liq scalar used in C2R2 and in C3R5 +INTEGER :: NSV_C2R2BEG = 0 ! with indices in the range : +INTEGER :: NSV_C2R2END = 0 ! NSV_C2R2BEG...NSV_C2R2END +! +INTEGER :: NSV_C1R3 = 0 ! number of ice scalar used in C3R5 +INTEGER :: NSV_C1R3BEG = 0 ! with indices in the range : +INTEGER :: NSV_C1R3END = 0 ! NSV_C1R3BEG...NSV_C1R3END +! +INTEGER :: NSV_ELEC = 0 ! number of scalar variables used in ELEC +INTEGER :: NSV_ELECBEG = 0 ! with indices in the range : +INTEGER :: NSV_ELECEND = 0 ! NSV_ELECBEG...NSV_ELECEND +! +INTEGER :: NSV_CHEM = 0 ! number of chemical scalar variables +INTEGER :: NSV_CHEMBEG = 0 ! with indices in the range : +INTEGER :: NSV_CHEMEND = 0 ! NSV_CHEMBEG...NSV_CHEMEND +! +INTEGER :: NSV_CHGS = 0 ! number of gas-phase chemicals +INTEGER :: NSV_CHGSBEG = 0 ! with indices in the range : +INTEGER :: NSV_CHGSEND = 0 ! NSV_CHGSBEG...NSV_CHGSEND +! +INTEGER :: NSV_CHAC = 0 ! number of aqueous-phase chemicals +INTEGER :: NSV_CHACBEG = 0 ! with indices in the range : +INTEGER :: NSV_CHACEND = 0 ! NSV_CHACBEG...NSV_CHACEND +! +INTEGER :: NSV_CHIC = 0 ! number of ice-phase chemicals +INTEGER :: NSV_CHICBEG = 0 ! with indices in the range : +INTEGER :: NSV_CHICEND = 0 ! NSV_CHICBEG...NSV_CHICEND +! +INTEGER :: NSV_LG = 0 ! number of lagrangian +INTEGER :: NSV_LGBEG = 0 ! with indices in the range : +INTEGER :: NSV_LGEND = 0 ! NSV_LGBEG...NSV_LGEND +! +INTEGER :: NSV_LNOX = 0 ! number of lightning NOx variables +INTEGER :: NSV_LNOXBEG = 0 ! with indices in the range : +INTEGER :: NSV_LNOXEND = 0 ! NSV_LNOXBEG...NSV_LNOXEND +! +INTEGER :: NSV_DST = 0 ! number of dust scalar variables +INTEGER :: NSV_DSTBEG = 0 ! with indices in the range : +INTEGER :: NSV_DSTEND = 0 ! NSV_DSTBEG...NSV_DSTEND + +INTEGER :: NSV_SLT = 0 ! number of sea salt scalar variables +INTEGER :: NSV_SLTBEG = 0 ! with indices in the range : +INTEGER :: NSV_SLTEND = 0 ! NSV_SLTBEG...NSV_SLTEND + +INTEGER :: NSV_AER = 0 ! number of aerosol scalar variables +INTEGER :: NSV_AERBEG = 0 ! with indices in the range : +INTEGER :: NSV_AEREND = 0 ! NSV_AERBEG...NSV_AEREND + +INTEGER :: NSV_DSTDEP = 0 ! number of aerosol scalar variables +INTEGER :: NSV_DSTDEPBEG = 0 ! with indices in the range : +INTEGER :: NSV_DSTDEPEND = 0 ! NSV_AERBEG...NSV_AEREND +! +INTEGER :: NSV_AERDEP = 0 ! number of aerosol scalar variables +INTEGER :: NSV_AERDEPBEG = 0 ! with indices in the range : +INTEGER :: NSV_AERDEPEND = 0 ! NSV_AERBEG...NSV_AEREND + +INTEGER :: NSV_SLTDEP = 0 ! number of aerosol scalar variables +INTEGER :: NSV_SLTDEPBEG = 0 ! with indices in the range : +INTEGER :: NSV_SLTDEPEND = 0 ! NSV_AERBEG...NSV_AEREND +! +INTEGER :: NSV_PP = 0 ! number of passive pollutants +INTEGER :: NSV_PPBEG = 0 ! with indices in the range : +INTEGER :: NSV_PPEND = 0 ! NSV_PPBEG...NSV_PPEND +! +INTEGER :: NSV_CS = 0 ! number of condit.samplings +INTEGER :: NSV_CSBEG = 0 ! with indices in the range : +INTEGER :: NSV_CSEND = 0 ! NSV_CSBEG...NSV_CSEND +! +INTEGER :: NSV_LIMA ! number of scalar in LIMA +INTEGER :: NSV_LIMA_BEG ! with indices in the range : +INTEGER :: NSV_LIMA_END ! NSV_LIMA_BEG_A...NSV_LIMA_END_A +INTEGER :: NSV_LIMA_NC ! +INTEGER :: NSV_LIMA_NR ! +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 ! +INTEGER :: NSV_LIMA_HOM_HAZE ! +INTEGER :: NSV_LIMA_SPRO ! +! +#ifdef MNH_FOREFIRE +INTEGER :: NSV_FF = 0 ! number of ForeFire scalar variables +INTEGER :: NSV_FFBEG = 0 ! with indices in the range : +INTEGER :: NSV_FFEND = 0 ! NSV_FFBEG...NSV_FFEND +#endif +! +INTEGER :: NSV_SNW = 0 ! number of blowing snow scalar variables +INTEGER :: NSV_SNWBEG = 0 ! with indices in the range : +INTEGER :: NSV_SNWEND = 0 ! NSV_SNWBEG...NSV_SNWEND +! +INTEGER :: NSV_CO2 = 0 ! index for CO2 +! +END MODULE MODD_NSV diff --git a/src/common/micro/ini_lima.F90 b/src/common/micro/ini_lima.F90 index 54c784e641111c8f83b00b5063f2006b38eb8569..6f4bdcd0015f42e8c770bac6981c0542eb09ee4a 100644 --- a/src/common/micro/ini_lima.F90 +++ b/src/common/micro/ini_lima.F90 @@ -55,7 +55,7 @@ USE MODD_CST USE MODD_REF USE MODD_PARAM_LIMA USE MODD_PARAMETERS -USE MODD_LUNIT, ONLY : TLUOUT0 +!USE MODD_LUNIT, ONLY : TLUOUT0 ! IMPLICIT NONE ! @@ -88,7 +88,7 @@ INTEGER :: IRESP ! Return code of FM-routines ! ! ! Init output listing -ILUOUT0 = TLUOUT0%NLU +!ILUOUT0 = TLUOUT0%NLU ! ! ZVTRMAX(2) = 0.3 ! Maximum cloud droplet fall speed diff --git a/src/common/micro/ini_lima_cold_mixed.F90 b/src/common/micro/ini_lima_cold_mixed.F90 index 2e3d956a46102eb75e5707369aed815f7f9bb798..39a7246f5502e4e805e0a3d7b810e2a49ab2b1dd 100644 --- a/src/common/micro/ini_lima_cold_mixed.F90 +++ b/src/common/micro/ini_lima_cold_mixed.F90 @@ -51,7 +51,7 @@ END MODULE MODI_INI_LIMA_COLD_MIXED ! ------------ ! USE MODD_CST -USE MODD_LUNIT, ONLY: TLUOUT0 +!USE MODD_LUNIT, ONLY: TLUOUT0 USE MODD_PARAMETERS USE MODD_PARAM_LIMA USE MODD_PARAM_LIMA_WARM @@ -109,9 +109,9 @@ REAL :: ZESR, ZESS ! Mean efficiency of rain-aggregate collection, ag REAL :: ZFDINFTY ! Factor used to define the "infinite" diameter ! ! -INTEGER :: ILUOUT0 ! Logical unit number for output-listing -LOGICAL :: GFLAG ! Logical flag for printing the constatnts on the output - ! listing +!INTEGER :: ILUOUT0 ! Logical unit number for output-listing +!LOGICAL :: GFLAG ! Logical flag for printing the constatnts on the output +! ! listing REAL :: ZCONC_MAX ! Maximal concentration for snow REAL :: ZFACT_NUCL! Amplification factor for the minimal ice concentration ! @@ -150,7 +150,7 @@ REAL :: ZRHOIW ! ice density !------------------------------------------------------------------------------- ! ! -ILUOUT0 = TLUOUT0%NLU +!ILUOUT0 = TLUOUT0%NLU ! ! !* 1. CHARACTERISTICS OF THE SPECIES @@ -334,14 +334,14 @@ ELSE XLBH = XAH * MOMG(XALPHAH,XNUH,XBH) END IF ! -GFLAG = .TRUE. -IF (GFLAG) THEN - WRITE(UNIT=ILUOUT0,FMT='(" Shape Parameters")') - WRITE(UNIT=ILUOUT0,FMT='(" XLBEXI =",E13.6," XLBI =",E13.6)') XLBEXI,XLBI - WRITE(UNIT=ILUOUT0,FMT='(" XLBEXS =",E13.6," XLBS =",E13.6)') XLBEXS,XLBS - WRITE(UNIT=ILUOUT0,FMT='(" XLBEXG =",E13.6," XLBG =",E13.6)') XLBEXG,XLBG - WRITE(UNIT=ILUOUT0,FMT='(" XLBEXH =",E13.6," XLBH =",E13.6)') XLBEXH,XLBH -END IF +!!$GFLAG = .TRUE. +!!$IF (GFLAG) THEN +!!$ WRITE(UNIT=ILUOUT0,FMT='(" Shape Parameters")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" XLBEXI =",E13.6," XLBI =",E13.6)') XLBEXI,XLBI +!!$ WRITE(UNIT=ILUOUT0,FMT='(" XLBEXS =",E13.6," XLBS =",E13.6)') XLBEXS,XLBS +!!$ WRITE(UNIT=ILUOUT0,FMT='(" XLBEXG =",E13.6," XLBG =",E13.6)') XLBEXG,XLBG +!!$ WRITE(UNIT=ILUOUT0,FMT='(" XLBEXH =",E13.6," XLBH =",E13.6)') XLBEXH,XLBH +!!$END IF ! XLBDAS_MAX = 1.E7 ! (eq to r~1E-7kg/kg) (for non MP PSD, use conversion XTRANS_MP_GAMMAS) XLBDAS_MIN = 1. ! (eq to r~0.18kg/kg) (for non MP PSD, use conversion XTRANS_MP_GAMMAS) @@ -593,14 +593,14 @@ XEX_CON = -2.8 ! XMNU0 = 6.88E-13 ! -IF (LMEYERS) THEN - WRITE(UNIT=ILUOUT0,FMT='(" Heterogeneous nucleation")') - WRITE(UNIT=ILUOUT0,FMT='(" XNUC_DEP=",E13.6," XEXSI=",E13.6," XEX=",E13.6)') & - XNUC_DEP,XEXSI_DEP,XEX_DEP - WRITE(UNIT=ILUOUT0,FMT='(" XNUC_CON=",E13.6," XEXTT=",E13.6," XEX=",E13.6)') & - XNUC_CON,XEXTT_CON,XEX_CON - WRITE(UNIT=ILUOUT0,FMT='(" mass of embryo XMNU0=",E13.6)') XMNU0 -END IF +!!$IF (LMEYERS) THEN +!!$ WRITE(UNIT=ILUOUT0,FMT='(" Heterogeneous nucleation")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" XNUC_DEP=",E13.6," XEXSI=",E13.6," XEX=",E13.6)') & +!!$ XNUC_DEP,XEXSI_DEP,XEX_DEP +!!$ WRITE(UNIT=ILUOUT0,FMT='(" XNUC_CON=",E13.6," XEXTT=",E13.6," XEX=",E13.6)') & +!!$ XNUC_CON,XEXTT_CON,XEX_CON +!!$ WRITE(UNIT=ILUOUT0,FMT='(" mass of embryo XMNU0=",E13.6)') XMNU0 +!!$END IF ! ! ***************** !* 4.3 NUCLEATION for NMOM_I=1 @@ -655,16 +655,16 @@ ELSE '/= 3. No algorithm developed for this case' ) END IF ! -GFLAG = .TRUE. -IF (GFLAG) THEN - WRITE(UNIT=ILUOUT0,FMT='(" Homogeneous nucleation")') - WRITE(UNIT=ILUOUT0,FMT='(" XTEXP1_HONC=",E13.6)') XTEXP1_HONC - WRITE(UNIT=ILUOUT0,FMT='(" XTEXP2_HONC=",E13.6)') XTEXP2_HONC - WRITE(UNIT=ILUOUT0,FMT='(" XTEXP3_HONC=",E13.6)') XTEXP3_HONC - WRITE(UNIT=ILUOUT0,FMT='(" XTEXP4_HONC=",E13.6)') XTEXP4_HONC - WRITE(UNIT=ILUOUT0,FMT='(" XTEXP5_HONC=",E13.6)') XTEXP5_HONC - WRITE(UNIT=ILUOUT0,FMT='("XC_HONC=",E13.6," XR_HONC=",E13.6)') XC_HONC,XR_HONC -END IF +!!$GFLAG = .TRUE. +!!$IF (GFLAG) THEN +!!$ WRITE(UNIT=ILUOUT0,FMT='(" Homogeneous nucleation")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" XTEXP1_HONC=",E13.6)') XTEXP1_HONC +!!$ WRITE(UNIT=ILUOUT0,FMT='(" XTEXP2_HONC=",E13.6)') XTEXP2_HONC +!!$ WRITE(UNIT=ILUOUT0,FMT='(" XTEXP3_HONC=",E13.6)') XTEXP3_HONC +!!$ WRITE(UNIT=ILUOUT0,FMT='(" XTEXP4_HONC=",E13.6)') XTEXP4_HONC +!!$ WRITE(UNIT=ILUOUT0,FMT='(" XTEXP5_HONC=",E13.6)') XTEXP5_HONC +!!$ WRITE(UNIT=ILUOUT0,FMT='("XC_HONC=",E13.6," XR_HONC=",E13.6)') XC_HONC,XR_HONC +!!$END IF ! ! !* 5.2 Constants for vapor deposition on ice @@ -756,11 +756,11 @@ XCOLEXII = 0.025 ! Temperature factor of the I+I collection efficiency ! XTEXAUTI = 0.025 ! Temperature factor of the I+I collection efficiency ! -GFLAG = .TRUE. -IF (GFLAG) THEN - WRITE(UNIT=ILUOUT0,FMT='(" pristine ice autoconversion")') - WRITE(UNIT=ILUOUT0,FMT='(" Temp. factor XTEXAUTI=",E13.6)') XTEXAUTI -END IF +!!$GFLAG = .TRUE. +!!$IF (GFLAG) THEN +!!$ WRITE(UNIT=ILUOUT0,FMT='(" pristine ice autoconversion")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" Temp. factor XTEXAUTI=",E13.6)') XTEXAUTI +!!$END IF ! XAUTO3 = 6.25E18*(ZGAMI(2))**(1./3.)*SQRT(ZGAMI(4)) XAUTO4 = 0.5E6*(ZGAMI(4))**(1./6.) @@ -780,11 +780,11 @@ XAGGS_CLARGE2 = XKER_ZRNIC_A2*ZGAMS(2) XAGGS_RLARGE1 = XKER_ZRNIC_A2*ZGAMI(6)*XAI XAGGS_RLARGE2 = XKER_ZRNIC_A2*ZGAMI(7)*ZGAMS(2)*XAI ! -GFLAG = .TRUE. -IF (GFLAG) THEN - WRITE(UNIT=ILUOUT0,FMT='(" snow aggregation")') - WRITE(UNIT=ILUOUT0,FMT='(" Temp. factor XCOLEXIS=",E13.6)') XCOLEXIS -END IF +!!$GFLAG = .TRUE. +!!$IF (GFLAG) THEN +!!$ WRITE(UNIT=ILUOUT0,FMT='(" snow aggregation")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" Temp. factor XCOLEXIS=",E13.6)') XCOLEXIS +!!$END IF ! !------------------------------------------------------------------------------- ! @@ -809,13 +809,13 @@ XEXSRIMCG= -XBS XSRIMCG2 = XAG*MOMG(XALPHAS,XNUS,XBG) XSRIMCG3 = 0.1 XEXSRIMCG2=XBG -GFLAG = .TRUE. -IF (GFLAG) THEN - WRITE(UNIT=ILUOUT0,FMT='(" riming of the aggregates")') - WRITE(UNIT=ILUOUT0,FMT='(" D_cs^lim (Farley et al.) XDCSLIM=",E13.6)') XDCSLIM - WRITE(UNIT=ILUOUT0,FMT='(" Coll. efficiency XCOLCS=",E13.6)') XCOLCS -END IF -! +!!$GFLAG = .TRUE. +!!$IF (GFLAG) THEN +!!$ WRITE(UNIT=ILUOUT0,FMT='(" riming of the aggregates")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" D_cs^lim (Farley et al.) XDCSLIM=",E13.6)') XDCSLIM +!!$ WRITE(UNIT=ILUOUT0,FMT='(" Coll. efficiency XCOLCS=",E13.6)') XCOLCS +!!$END IF +!!$! NGAMINC = 80 XGAMINC_BOUND_MIN = (1000.*XTRANS_MP_GAMMAS*XDCSLIM)**XALPHAS !1.0E-1 ! Minimal value of (Lbda * D_cs^lim)**alpha XGAMINC_BOUND_MAX = (50000.*XTRANS_MP_GAMMAS*XDCSLIM)**XALPHAS !1.0E7 ! Maximal value of (Lbda * D_cs^lim)**alpha @@ -929,33 +929,33 @@ CALL NSCOLRG ( IND, XALPHAS, XNUS, XALPHAR, XNUR, & ZESR, XCS, XDS, XFVELOS, XCR, XDR, & XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, & ZFDINFTY, XKER_N_SACCRG,XAG, XBS, XAS ) -WRITE(UNIT=ILUOUT0,FMT='("!")') -WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_RACCSS) ) THEN")') -DO J1 = 1 , NACCLBDAS - DO J2 = 1 , NACCLBDAR - WRITE(UNIT=ILUOUT0,FMT='(" PKER_N_RACCSS(",I3,",",I3,") = ",E13.6)') & - J1,J2,XKER_N_RACCSS(J1,J2) - END DO -END DO -WRITE(UNIT=ILUOUT0,FMT='("!")') -WRITE(UNIT=ILUOUT0,FMT='("!")') -WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_RACCS) ) THEN")') -DO J1 = 1 , NACCLBDAS - DO J2 = 1 , NACCLBDAR - WRITE(UNIT=ILUOUT0,FMT='(" PKER_N_RACCS(",I3,",",I3,") = ",E13.6)') & - J1,J2,XKER_N_RACCS(J1,J2) - END DO -END DO -WRITE(UNIT=ILUOUT0,FMT='("!")') -WRITE(UNIT=ILUOUT0,FMT='("!")') -WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_SACCRG) ) THEN")') -DO J1 = 1 , NACCLBDAR - DO J2 = 1 , NACCLBDAS - WRITE(UNIT=ILUOUT0,FMT='(" PKER_N_SACCRG(",I3,",",I3,") = ",E13.6)') & - J1,J2,XKER_N_SACCRG(J1,J2) - END DO -END DO -WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_RACCSS) ) THEN")') +!!$DO J1 = 1 , NACCLBDAS +!!$ DO J2 = 1 , NACCLBDAR +!!$ WRITE(UNIT=ILUOUT0,FMT='(" PKER_N_RACCSS(",I3,",",I3,") = ",E13.6)') & +!!$ J1,J2,XKER_N_RACCSS(J1,J2) +!!$ END DO +!!$END DO +!!$WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_RACCS) ) THEN")') +!!$DO J1 = 1 , NACCLBDAS +!!$ DO J2 = 1 , NACCLBDAR +!!$ WRITE(UNIT=ILUOUT0,FMT='(" PKER_N_RACCS(",I3,",",I3,") = ",E13.6)') & +!!$ J1,J2,XKER_N_RACCS(J1,J2) +!!$ END DO +!!$END DO +!!$WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_SACCRG) ) THEN")') +!!$DO J1 = 1 , NACCLBDAR +!!$ DO J2 = 1 , NACCLBDAS +!!$ WRITE(UNIT=ILUOUT0,FMT='(" PKER_N_SACCRG(",I3,",",I3,") = ",E13.6)') & +!!$ J1,J2,XKER_N_SACCRG(J1,J2) +!!$ END DO +!!$END DO +!!$WRITE(UNIT=ILUOUT0,FMT='("!")') ! CALL LIMA_READ_XKER_RACCS (KACCLBDAS,KACCLBDAR,KND, & @@ -982,71 +982,71 @@ IF( (KACCLBDAS/=NACCLBDAS) .OR. (KACCLBDAR/=NACCLBDAR) .OR. (KND/=IND) .OR. & ZESR, XBS, XCS, XDS, XFVELOS, XCR, XDR, & XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, & ZFDINFTY, XKER_SACCRG,XAG, XBS, XAS ) - WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') - WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF RACSS KERNELS ****")') - WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF RACS KERNELS ****")') - WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF SACRG KERNELS ****")') - WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') - WRITE(UNIT=ILUOUT0,FMT='("!")') - WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND - WRITE(UNIT=ILUOUT0,FMT='("KACCLBDAS=",I3)') NACCLBDAS - WRITE(UNIT=ILUOUT0,FMT='("KACCLBDAR=",I3)') NACCLBDAR - WRITE(UNIT=ILUOUT0,FMT='("PALPHAS=",E13.6)') XALPHAS - WRITE(UNIT=ILUOUT0,FMT='("PNUS=",E13.6)') XNUS - WRITE(UNIT=ILUOUT0,FMT='("PALPHAR=",E13.6)') XALPHAR - WRITE(UNIT=ILUOUT0,FMT='("PNUR=",E13.6)') XNUR - WRITE(UNIT=ILUOUT0,FMT='("PESR=",E13.6)') ZESR - WRITE(UNIT=ILUOUT0,FMT='("PBS=",E13.6)') XBS - WRITE(UNIT=ILUOUT0,FMT='("PBR=",E13.6)') XBR - WRITE(UNIT=ILUOUT0,FMT='("PCS=",E13.6)') XCS - WRITE(UNIT=ILUOUT0,FMT='("PDS=",E13.6)') XDS - WRITE(UNIT=ILUOUT0,FMT='("PFVELOS=",E13.6)') XFVELOS - WRITE(UNIT=ILUOUT0,FMT='("PCR=",E13.6)') XCR - WRITE(UNIT=ILUOUT0,FMT='("PDR=",E13.6)') XDR - WRITE(UNIT=ILUOUT0,FMT='("PACCLBDAS_MAX=",E13.6)') & - XACCLBDAS_MAX - WRITE(UNIT=ILUOUT0,FMT='("PACCLBDAR_MAX=",E13.6)') & - XACCLBDAR_MAX - WRITE(UNIT=ILUOUT0,FMT='("PACCLBDAS_MIN=",E13.6)') & - XACCLBDAS_MIN - WRITE(UNIT=ILUOUT0,FMT='("PACCLBDAR_MIN=",E13.6)') & - XACCLBDAR_MIN - WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY - WRITE(UNIT=ILUOUT0,FMT='("!")') - WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_RACCSS) ) THEN")') - DO J1 = 1 , NACCLBDAS - DO J2 = 1 , NACCLBDAR - WRITE(UNIT=ILUOUT0,FMT='(" PKER_RACCSS(",I3,",",I3,") = ",E13.6)') & - J1,J2,XKER_RACCSS(J1,J2) - END DO - END DO - WRITE(UNIT=ILUOUT0,FMT='("END IF")') - WRITE(UNIT=ILUOUT0,FMT='("!")') - WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_RACCS ) ) THEN")') - DO J1 = 1 , NACCLBDAS - DO J2 = 1 , NACCLBDAR - WRITE(UNIT=ILUOUT0,FMT='(" PKER_RACCS (",I3,",",I3,") = ",E13.6)') & - J1,J2,XKER_RACCS (J1,J2) - END DO - END DO - WRITE(UNIT=ILUOUT0,FMT='("END IF")') - WRITE(UNIT=ILUOUT0,FMT='("!")') - WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_SACCRG) ) THEN")') - DO J1 = 1 , NACCLBDAR - DO J2 = 1 , NACCLBDAS - WRITE(UNIT=ILUOUT0,FMT='(" PKER_SACCRG(",I3,",",I3,") = ",E13.6)') & - J1,J2,XKER_SACCRG(J1,J2) - END DO - END DO - WRITE(UNIT=ILUOUT0,FMT='("END IF")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF RACSS KERNELS ****")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF RACS KERNELS ****")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF SACRG KERNELS ****")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND +!!$ WRITE(UNIT=ILUOUT0,FMT='("KACCLBDAS=",I3)') NACCLBDAS +!!$ WRITE(UNIT=ILUOUT0,FMT='("KACCLBDAR=",I3)') NACCLBDAR +!!$ WRITE(UNIT=ILUOUT0,FMT='("PALPHAS=",E13.6)') XALPHAS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PNUS=",E13.6)') XNUS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PALPHAR=",E13.6)') XALPHAR +!!$ WRITE(UNIT=ILUOUT0,FMT='("PNUR=",E13.6)') XNUR +!!$ WRITE(UNIT=ILUOUT0,FMT='("PESR=",E13.6)') ZESR +!!$ WRITE(UNIT=ILUOUT0,FMT='("PBS=",E13.6)') XBS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PBR=",E13.6)') XBR +!!$ WRITE(UNIT=ILUOUT0,FMT='("PCS=",E13.6)') XCS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PDS=",E13.6)') XDS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PFVELOS=",E13.6)') XFVELOS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PCR=",E13.6)') XCR +!!$ WRITE(UNIT=ILUOUT0,FMT='("PDR=",E13.6)') XDR +!!$ WRITE(UNIT=ILUOUT0,FMT='("PACCLBDAS_MAX=",E13.6)') & +!!$ XACCLBDAS_MAX +!!$ WRITE(UNIT=ILUOUT0,FMT='("PACCLBDAR_MAX=",E13.6)') & +!!$ XACCLBDAR_MAX +!!$ WRITE(UNIT=ILUOUT0,FMT='("PACCLBDAS_MIN=",E13.6)') & +!!$ XACCLBDAS_MIN +!!$ WRITE(UNIT=ILUOUT0,FMT='("PACCLBDAR_MIN=",E13.6)') & +!!$ XACCLBDAR_MIN +!!$ WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY +!!$ WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_RACCSS) ) THEN")') +!!$ DO J1 = 1 , NACCLBDAS +!!$ DO J2 = 1 , NACCLBDAR +!!$ WRITE(UNIT=ILUOUT0,FMT='(" PKER_RACCSS(",I3,",",I3,") = ",E13.6)') & +!!$ J1,J2,XKER_RACCSS(J1,J2) +!!$ END DO +!!$ END DO +!!$ WRITE(UNIT=ILUOUT0,FMT='("END IF")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_RACCS ) ) THEN")') +!!$ DO J1 = 1 , NACCLBDAS +!!$ DO J2 = 1 , NACCLBDAR +!!$ WRITE(UNIT=ILUOUT0,FMT='(" PKER_RACCS (",I3,",",I3,") = ",E13.6)') & +!!$ J1,J2,XKER_RACCS (J1,J2) +!!$ END DO +!!$ END DO +!!$ WRITE(UNIT=ILUOUT0,FMT='("END IF")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_SACCRG) ) THEN")') +!!$ DO J1 = 1 , NACCLBDAR +!!$ DO J2 = 1 , NACCLBDAS +!!$ WRITE(UNIT=ILUOUT0,FMT='(" PKER_SACCRG(",I3,",",I3,") = ",E13.6)') & +!!$ J1,J2,XKER_SACCRG(J1,J2) +!!$ END DO +!!$ END DO +!!$ WRITE(UNIT=ILUOUT0,FMT='("END IF")') ELSE CALL LIMA_READ_XKER_RACCS (KACCLBDAS,KACCLBDAR,KND, & PALPHAS,PNUS,PALPHAR,PNUR,PESR,PBS,PBR,PCS,PDS,PFVELOS,PCR,PDR, & PACCLBDAS_MAX,PACCLBDAR_MAX,PACCLBDAS_MIN,PACCLBDAR_MIN, & PFDINFTY,XKER_RACCSS,XKER_RACCS,XKER_SACCRG ) - WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_RACCSS")') - WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_RACCS ")') - WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_SACCRG")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_RACCSS")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_RACCS ")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_SACCRG")') END IF ! !* 7.2N Computations of the tabulated normalized kernels Snow Self Collection !! @@ -1083,31 +1083,31 @@ XSCINTP2S = 1.0 - LOG( XSCLBDAS_MIN ) / ZRATE XSCLBDAS_MAX, XSCLBDAS_MAX, XSCLBDAS_MIN, XSCLBDAS_MIN, & ZFDINFTY, XKER_N_SSCS ) ! - WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') - WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF SSCS KERNELS ***")') - WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') - WRITE(UNIT=ILUOUT0,FMT='("!")') - WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND - WRITE(UNIT=ILUOUT0,FMT='("KSCLBDAS=",I3)') NSCLBDAS - WRITE(UNIT=ILUOUT0,FMT='("PALPHAS=",E13.6)') XALPHAS - WRITE(UNIT=ILUOUT0,FMT='("PNUS=",E13.6)') XNUS - WRITE(UNIT=ILUOUT0,FMT='("PESS=",E13.6)') ZESS - WRITE(UNIT=ILUOUT0,FMT='("PBS=",E13.6)') XBS - WRITE(UNIT=ILUOUT0,FMT='("PCS=",E13.6)') XCS - WRITE(UNIT=ILUOUT0,FMT='("PDS=",E13.6)') XDS - WRITE(UNIT=ILUOUT0,FMT='("PSCLBDAS_MAX=",E13.6)') & - XSCLBDAS_MAX - WRITE(UNIT=ILUOUT0,FMT='("PSCLBDAS_MIN=",E13.6)') & - XSCLBDAS_MIN - WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY - WRITE(UNIT=ILUOUT0,FMT='("!")') - WRITE(UNIT=ILUOUT0,FMT='("!")') - WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_SSCS ) ) THEN")') - DO J1 = 1 , NSCLBDAS - WRITE(UNIT=ILUOUT0,FMT='(" PKER_N_SSCS (",I3,",",I3,") = ",E13.6)') & - J1,J1,XKER_N_SSCS (J1,J1) - END DO - WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF SSCS KERNELS ***")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND +!!$ WRITE(UNIT=ILUOUT0,FMT='("KSCLBDAS=",I3)') NSCLBDAS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PALPHAS=",E13.6)') XALPHAS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PNUS=",E13.6)') XNUS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PESS=",E13.6)') ZESS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PBS=",E13.6)') XBS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PCS=",E13.6)') XCS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PDS=",E13.6)') XDS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PSCLBDAS_MAX=",E13.6)') & +!!$ XSCLBDAS_MAX +!!$ WRITE(UNIT=ILUOUT0,FMT='("PSCLBDAS_MIN=",E13.6)') & +!!$ XSCLBDAS_MIN +!!$ WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY +!!$ WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_SSCS ) ) THEN")') +!!$ DO J1 = 1 , NSCLBDAS +!!$ WRITE(UNIT=ILUOUT0,FMT='(" PKER_N_SSCS (",I3,",",I3,") = ",E13.6)') & +!!$ J1,J1,XKER_N_SSCS (J1,J1) +!!$ END DO +!!$ WRITE(UNIT=ILUOUT0,FMT='("!")') ! !* 7.2N2 Constants for the 'spontaneous' break-up ! @@ -1123,11 +1123,11 @@ XSCINTP2S = 1.0 - LOG( XSCLBDAS_MIN ) / ZRATE ! XFSCVMG = 2.0 ! -GFLAG = .TRUE. -IF (GFLAG) THEN - WRITE(UNIT=ILUOUT0,FMT='(" conversion-melting of the aggregates")') - WRITE(UNIT=ILUOUT0,FMT='(" Conv. factor XFSCVMG=",E13.6)') XFSCVMG -END IF +!!$GFLAG = .TRUE. +!!$IF (GFLAG) THEN +!!$ WRITE(UNIT=ILUOUT0,FMT='(" conversion-melting of the aggregates")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" Conv. factor XFSCVMG=",E13.6)') XFSCVMG +!!$END IF ! ! !* 7.4 Constants for Ice-Ice collision process (CIBU) @@ -1136,12 +1136,12 @@ XDCSLIM_CIBU_MIN = 2.0E-4 ! D_cs lim min XDCSLIM_CIBU_MAX = 1.0E-3 ! D_cs lim max XDCGLIM_CIBU_MIN = 2.0E-3 ! D_cg lim min ! -GFLAG = .TRUE. -IF (GFLAG) THEN - WRITE(UNIT=ILUOUT0,FMT='(" Ice-ice collision process")') - WRITE(UNIT=ILUOUT0,FMT='(" D_cs^lim min-max =",E13.6)') XDCSLIM_CIBU_MIN,XDCSLIM_CIBU_MAX - WRITE(UNIT=ILUOUT0,FMT='(" D_cg^lim min =",E13.6)') XDCGLIM_CIBU_MIN -END IF +!!$GFLAG = .TRUE. +!!$IF (GFLAG) THEN +!!$ WRITE(UNIT=ILUOUT0,FMT='(" Ice-ice collision process")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" D_cs^lim min-max =",E13.6)') XDCSLIM_CIBU_MIN,XDCSLIM_CIBU_MAX +!!$ WRITE(UNIT=ILUOUT0,FMT='(" D_cg^lim min =",E13.6)') XDCGLIM_CIBU_MIN +!!$END IF ! NGAMINC = 80 ! @@ -1196,11 +1196,11 @@ XMOMGS_CIBU_3 = MOMG(XALPHAS,XNUS,XBS+XDS) ! XDCRLIM_RDSF_MIN = 0.1E-3 ! D_cr lim min ! -GFLAG = .TRUE. -IF (GFLAG) THEN - WRITE(UNIT=ILUOUT0,FMT='(" Ice-rain collision process")') - WRITE(UNIT=ILUOUT0,FMT='(" D_cr^lim min =",E13.6)') XDCRLIM_RDSF_MIN -END IF +!!$GFLAG = .TRUE. +!!$IF (GFLAG) THEN +!!$ WRITE(UNIT=ILUOUT0,FMT='(" Ice-rain collision process")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" D_cr^lim min =",E13.6)') XDCRLIM_RDSF_MIN +!!$END IF ! NGAMINC = 80 ! @@ -1246,11 +1246,11 @@ XEXICFRR = -XDR-2.0 XICFRR = (XPI/4.0)*XCOLIR*XCR*(ZRHO00**XCEXVT) & *MOMG(XALPHAR,XNUR,XDR+2.0) ! -GFLAG = .TRUE. -IF (GFLAG) THEN - WRITE(UNIT=ILUOUT0,FMT='(" rain contact freezing")') - WRITE(UNIT=ILUOUT0,FMT='(" Coll. efficiency XCOLIR=",E13.6)') XCOLIR -END IF +!!$GFLAG = .TRUE. +!!$IF (GFLAG) THEN +!!$ WRITE(UNIT=ILUOUT0,FMT='(" rain contact freezing")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" Coll. efficiency XCOLIR=",E13.6)') XCOLIR +!!$END IF ! ! !* 8.2 Constants for the dry growth of the graupeln @@ -1270,16 +1270,16 @@ XCOLIG = 0.25 ! Collection efficiency of I+G XCOLEXIG = 0.05 ! Temperature factor of the I+G collection efficiency XCOLIG = 0.01 ! Collection efficiency of I+G XCOLEXIG = 0.1 ! Temperature factor of the I+G collection efficiency -WRITE (ILUOUT0, FMT=*) ' NEW Constants for the cloud ice collection by the graupeln' -WRITE (ILUOUT0, FMT=*) ' XCOLIG, XCOLEXIG = ',XCOLIG,XCOLEXIG +!!$WRITE (ILUOUT0, FMT=*) ' NEW Constants for the cloud ice collection by the graupeln' +!!$WRITE (ILUOUT0, FMT=*) ' XCOLIG, XCOLEXIG = ',XCOLIG,XCOLEXIG XFIDRYG = (XPI/4.0)*XCOLIG*XCG*(ZRHO00**XCEXVT)*MOMG(XALPHAG,XNUG,XDG+2.0) ! -GFLAG = .TRUE. -IF (GFLAG) THEN - WRITE(UNIT=ILUOUT0,FMT='(" cloud ice collection by the graupeln")') - WRITE(UNIT=ILUOUT0,FMT='(" Coll. efficiency XCOLIG=",E13.6)') XCOLIG - WRITE(UNIT=ILUOUT0,FMT='(" Temp. factor XCOLEXIG=",E13.6)') XCOLEXIG -END IF +!!$GFLAG = .TRUE. +!!$IF (GFLAG) THEN +!!$ WRITE(UNIT=ILUOUT0,FMT='(" cloud ice collection by the graupeln")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" Coll. efficiency XCOLIG=",E13.6)') XCOLIG +!!$ WRITE(UNIT=ILUOUT0,FMT='(" Temp. factor XCOLEXIG=",E13.6)') XCOLEXIG +!!$END IF ! !* 8.2.3 Constants for the aggregate collection by the graupeln ! @@ -1287,8 +1287,8 @@ XCOLSG = 0.25 ! Collection efficiency of S+G XCOLEXSG = 0.05 ! Temperature factor of the S+G collection efficiency XCOLSG = 0.01 ! Collection efficiency of S+G XCOLEXSG = 0.1 ! Temperature factor of the S+G collection efficiency -WRITE (ILUOUT0, FMT=*) ' NEW Constants for the aggregate collection by the graupeln' -WRITE (ILUOUT0, FMT=*) ' XCOLSG, XCOLEXSG = ',XCOLSG,XCOLEXSG +!!$WRITE (ILUOUT0, FMT=*) ' NEW Constants for the aggregate collection by the graupeln' +!!$WRITE (ILUOUT0, FMT=*) ' XCOLSG, XCOLEXSG = ',XCOLSG,XCOLEXSG XFSDRYG = XNS*(XPI/4.0)*XCOLSG*XAS*(ZRHO00**XCEXVT) XFNSDRYG= (XPI/4.0)*XCOLSG*(ZRHO00**XCEXVT) ! @@ -1299,12 +1299,12 @@ XLBSDRYG1 = MOMG(XALPHAG,XNUG,2.)*MOMG(XALPHAS,XNUS,XBS) XLBSDRYG2 = 2.*MOMG(XALPHAG,XNUG,1.)*MOMG(XALPHAS,XNUS,XBS+1.) XLBSDRYG3 = MOMG(XALPHAS,XNUS,XBS+2.) ! -GFLAG = .TRUE. -IF (GFLAG) THEN - WRITE(UNIT=ILUOUT0,FMT='(" aggregate collection by the graupeln")') - WRITE(UNIT=ILUOUT0,FMT='(" Coll. efficiency XCOLSG=",E13.6)') XCOLSG - WRITE(UNIT=ILUOUT0,FMT='(" Temp. factor XCOLEXSG=",E13.6)') XCOLEXSG -END IF +!!$GFLAG = .TRUE. +!!$IF (GFLAG) THEN +!!$ WRITE(UNIT=ILUOUT0,FMT='(" aggregate collection by the graupeln")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" Coll. efficiency XCOLSG=",E13.6)') XCOLSG +!!$ WRITE(UNIT=ILUOUT0,FMT='(" Temp. factor XCOLEXSG=",E13.6)') XCOLEXSG +!!$END IF ! !* 8.2.4 Constants for the raindrop collection by the graupeln ! @@ -1352,15 +1352,15 @@ ALLOCATE( XKER_SDRYG(NDRYLBDAG,NDRYLBDAS) ) ZEGS, XCG, XDG, 0., XCS, XDS, XFVELOS, & XDRYLBDAG_MAX, XDRYLBDAS_MAX, XDRYLBDAG_MIN, XDRYLBDAS_MIN, & ZFDINFTY, XKER_N_SDRYG ) - WRITE(UNIT=ILUOUT0,FMT='("!")') - WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_SDRYG) ) THEN")') - DO J1 = 1 , NDRYLBDAG - DO J2 = 1 , NDRYLBDAS - WRITE(UNIT=ILUOUT0,FMT='(" PKER_N_SDRYG(",I3,",",I3,") = ",E13.6)') & - J1,J2,XKER_N_SDRYG(J1,J2) - END DO - END DO - WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_SDRYG) ) THEN")') +!!$ DO J1 = 1 , NDRYLBDAG +!!$ DO J2 = 1 , NDRYLBDAS +!!$ WRITE(UNIT=ILUOUT0,FMT='(" PKER_N_SDRYG(",I3,",",I3,") = ",E13.6)') & +!!$ J1,J2,XKER_N_SDRYG(J1,J2) +!!$ END DO +!!$ END DO +!!$ WRITE(UNIT=ILUOUT0,FMT='("!")') !end if ! CALL LIMA_READ_XKER_SDRYG (KDRYLBDAG,KDRYLBDAS,KND, & @@ -1379,48 +1379,48 @@ IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAS/=NDRYLBDAS) .OR. (KND/=IND) .OR. & ZEGS, XBS, XCG, XDG, 0., XCS, XDS, XFVELOS, & XDRYLBDAG_MAX, XDRYLBDAS_MAX, XDRYLBDAG_MIN, XDRYLBDAS_MIN, & ZFDINFTY, XKER_SDRYG ) - WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') - WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF SDRYG KERNELS ****")') - WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') - WRITE(UNIT=ILUOUT0,FMT='("!")') - WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND - WRITE(UNIT=ILUOUT0,FMT='("KDRYLBDAG=",I3)') NDRYLBDAG - WRITE(UNIT=ILUOUT0,FMT='("KDRYLBDAS=",I3)') NDRYLBDAS - WRITE(UNIT=ILUOUT0,FMT='("PALPHAG=",E13.6)') XALPHAG - WRITE(UNIT=ILUOUT0,FMT='("PNUG=",E13.6)') XNUG - WRITE(UNIT=ILUOUT0,FMT='("PALPHAS=",E13.6)') XALPHAS - WRITE(UNIT=ILUOUT0,FMT='("PNUS=",E13.6)') XNUS - WRITE(UNIT=ILUOUT0,FMT='("PEGS=",E13.6)') ZEGS - WRITE(UNIT=ILUOUT0,FMT='("PBS=",E13.6)') XBS - WRITE(UNIT=ILUOUT0,FMT='("PCG=",E13.6)') XCG - WRITE(UNIT=ILUOUT0,FMT='("PDG=",E13.6)') XDG - WRITE(UNIT=ILUOUT0,FMT='("PCS=",E13.6)') XCS - WRITE(UNIT=ILUOUT0,FMT='("PDS=",E13.6)') XDS - WRITE(UNIT=ILUOUT0,FMT='("PFVELOS=",E13.6)') XFVELOS - WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAG_MAX=",E13.6)') & - XDRYLBDAG_MAX - WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAS_MAX=",E13.6)') & - XDRYLBDAS_MAX - WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAG_MIN=",E13.6)') & - XDRYLBDAG_MIN - WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAS_MIN=",E13.6)') & - XDRYLBDAS_MIN - WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY - WRITE(UNIT=ILUOUT0,FMT='("!")') - WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_SDRYG) ) THEN")') - DO J1 = 1 , NDRYLBDAG - DO J2 = 1 , NDRYLBDAS - WRITE(UNIT=ILUOUT0,FMT='("PKER_SDRYG(",I3,",",I3,") = ",E13.6)') & - J1,J2,XKER_SDRYG(J1,J2) - END DO - END DO - WRITE(UNIT=ILUOUT0,FMT='("END IF")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF SDRYG KERNELS ****")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND +!!$ WRITE(UNIT=ILUOUT0,FMT='("KDRYLBDAG=",I3)') NDRYLBDAG +!!$ WRITE(UNIT=ILUOUT0,FMT='("KDRYLBDAS=",I3)') NDRYLBDAS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PALPHAG=",E13.6)') XALPHAG +!!$ WRITE(UNIT=ILUOUT0,FMT='("PNUG=",E13.6)') XNUG +!!$ WRITE(UNIT=ILUOUT0,FMT='("PALPHAS=",E13.6)') XALPHAS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PNUS=",E13.6)') XNUS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PEGS=",E13.6)') ZEGS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PBS=",E13.6)') XBS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PCG=",E13.6)') XCG +!!$ WRITE(UNIT=ILUOUT0,FMT='("PDG=",E13.6)') XDG +!!$ WRITE(UNIT=ILUOUT0,FMT='("PCS=",E13.6)') XCS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PDS=",E13.6)') XDS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PFVELOS=",E13.6)') XFVELOS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAG_MAX=",E13.6)') & +!!$ XDRYLBDAG_MAX +!!$ WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAS_MAX=",E13.6)') & +!!$ XDRYLBDAS_MAX +!!$ WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAG_MIN=",E13.6)') & +!!$ XDRYLBDAG_MIN +!!$ WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAS_MIN=",E13.6)') & +!!$ XDRYLBDAS_MIN +!!$ WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY +!!$ WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_SDRYG) ) THEN")') +!!$ DO J1 = 1 , NDRYLBDAG +!!$ DO J2 = 1 , NDRYLBDAS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PKER_SDRYG(",I3,",",I3,") = ",E13.6)') & +!!$ J1,J2,XKER_SDRYG(J1,J2) +!!$ END DO +!!$ END DO +!!$ WRITE(UNIT=ILUOUT0,FMT='("END IF")') ELSE CALL LIMA_READ_XKER_SDRYG (KDRYLBDAG,KDRYLBDAS,KND, & PALPHAG,PNUG,PALPHAS,PNUS,PEGS,PBS,PCG,PDG,PCS,PDS,PFVELOS, & PDRYLBDAG_MAX,PDRYLBDAS_MAX,PDRYLBDAG_MIN,PDRYLBDAS_MIN, & PFDINFTY,XKER_SDRYG ) - WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_SDRYG")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_SDRYG")') END IF ! ! @@ -1435,15 +1435,15 @@ ALLOCATE( XKER_RDRYG(NDRYLBDAG,NDRYLBDAR) ) ZEGR, XCG, XDG, 0., XCR, XDR, 0., & XDRYLBDAG_MAX, XDRYLBDAR_MAX, XDRYLBDAG_MIN, XDRYLBDAR_MIN, & ZFDINFTY, XKER_N_RDRYG ) - WRITE(UNIT=ILUOUT0,FMT='("!")') - WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_RDRYG) ) THEN")') - DO J1 = 1 , NDRYLBDAG - DO J2 = 1 , NDRYLBDAR - WRITE(UNIT=ILUOUT0,FMT='(" PKER_N_RDRYG(",I3,",",I3,") = ",E13.6)') & - J1,J2,XKER_N_RDRYG(J1,J2) - END DO - END DO - WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_RDRYG) ) THEN")') +!!$ DO J1 = 1 , NDRYLBDAG +!!$ DO J2 = 1 , NDRYLBDAR +!!$ WRITE(UNIT=ILUOUT0,FMT='(" PKER_N_RDRYG(",I3,",",I3,") = ",E13.6)') & +!!$ J1,J2,XKER_N_RDRYG(J1,J2) +!!$ END DO +!!$ END DO +!!$ WRITE(UNIT=ILUOUT0,FMT='("!")') !end if ! CALL LIMA_READ_XKER_RDRYG (KDRYLBDAG,KDRYLBDAR,KND, & @@ -1462,47 +1462,47 @@ IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAR/=NDRYLBDAR) .OR. (KND/=IND) .OR. & ZEGR, XBR, XCG, XDG, 0., XCR, XDR, 0., & XDRYLBDAG_MAX, XDRYLBDAR_MAX, XDRYLBDAG_MIN, XDRYLBDAR_MIN, & ZFDINFTY, XKER_RDRYG ) - WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') - WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF RDRYG KERNELS ****")') - WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') - WRITE(UNIT=ILUOUT0,FMT='("!")') - WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND - WRITE(UNIT=ILUOUT0,FMT='("KDRYLBDAG=",I3)') NDRYLBDAG - WRITE(UNIT=ILUOUT0,FMT='("KDRYLBDAR=",I3)') NDRYLBDAR - WRITE(UNIT=ILUOUT0,FMT='("PALPHAG=",E13.6)') XALPHAG - WRITE(UNIT=ILUOUT0,FMT='("PNUG=",E13.6)') XNUG - WRITE(UNIT=ILUOUT0,FMT='("PALPHAR=",E13.6)') XALPHAR - WRITE(UNIT=ILUOUT0,FMT='("PNUR=",E13.6)') XNUR - WRITE(UNIT=ILUOUT0,FMT='("PEGR=",E13.6)') ZEGR - WRITE(UNIT=ILUOUT0,FMT='("PBR=",E13.6)') XBR - WRITE(UNIT=ILUOUT0,FMT='("PCG=",E13.6)') XCG - WRITE(UNIT=ILUOUT0,FMT='("PDG=",E13.6)') XDG - WRITE(UNIT=ILUOUT0,FMT='("PCR=",E13.6)') XCR - WRITE(UNIT=ILUOUT0,FMT='("PDR=",E13.6)') XDR - WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAG_MAX=",E13.6)') & - XDRYLBDAG_MAX - WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAR_MAX=",E13.6)') & - XDRYLBDAR_MAX - WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAG_MIN=",E13.6)') & - XDRYLBDAG_MIN - WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAR_MIN=",E13.6)') & - XDRYLBDAR_MIN - WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY - WRITE(UNIT=ILUOUT0,FMT='("!")') - WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_RDRYG) ) THEN")') - DO J1 = 1 , NDRYLBDAG - DO J2 = 1 , NDRYLBDAR - WRITE(UNIT=ILUOUT0,FMT='("PKER_RDRYG(",I3,",",I3,") = ",E13.6)') & - J1,J2,XKER_RDRYG(J1,J2) - END DO - END DO - WRITE(UNIT=ILUOUT0,FMT='("END IF")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF RDRYG KERNELS ****")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND +!!$ WRITE(UNIT=ILUOUT0,FMT='("KDRYLBDAG=",I3)') NDRYLBDAG +!!$ WRITE(UNIT=ILUOUT0,FMT='("KDRYLBDAR=",I3)') NDRYLBDAR +!!$ WRITE(UNIT=ILUOUT0,FMT='("PALPHAG=",E13.6)') XALPHAG +!!$ WRITE(UNIT=ILUOUT0,FMT='("PNUG=",E13.6)') XNUG +!!$ WRITE(UNIT=ILUOUT0,FMT='("PALPHAR=",E13.6)') XALPHAR +!!$ WRITE(UNIT=ILUOUT0,FMT='("PNUR=",E13.6)') XNUR +!!$ WRITE(UNIT=ILUOUT0,FMT='("PEGR=",E13.6)') ZEGR +!!$ WRITE(UNIT=ILUOUT0,FMT='("PBR=",E13.6)') XBR +!!$ WRITE(UNIT=ILUOUT0,FMT='("PCG=",E13.6)') XCG +!!$ WRITE(UNIT=ILUOUT0,FMT='("PDG=",E13.6)') XDG +!!$ WRITE(UNIT=ILUOUT0,FMT='("PCR=",E13.6)') XCR +!!$ WRITE(UNIT=ILUOUT0,FMT='("PDR=",E13.6)') XDR +!!$ WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAG_MAX=",E13.6)') & +!!$ XDRYLBDAG_MAX +!!$ WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAR_MAX=",E13.6)') & +!!$ XDRYLBDAR_MAX +!!$ WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAG_MIN=",E13.6)') & +!!$ XDRYLBDAG_MIN +!!$ WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAR_MIN=",E13.6)') & +!!$ XDRYLBDAR_MIN +!!$ WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY +!!$ WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_RDRYG) ) THEN")') +!!$ DO J1 = 1 , NDRYLBDAG +!!$ DO J2 = 1 , NDRYLBDAR +!!$ WRITE(UNIT=ILUOUT0,FMT='("PKER_RDRYG(",I3,",",I3,") = ",E13.6)') & +!!$ J1,J2,XKER_RDRYG(J1,J2) +!!$ END DO +!!$ END DO +!!$ WRITE(UNIT=ILUOUT0,FMT='("END IF")') ELSE CALL LIMA_READ_XKER_RDRYG (KDRYLBDAG,KDRYLBDAR,KND, & PALPHAG,PNUG,PALPHAR,PNUR,PEGR,PBR,PCG,PDG,PCR,PDR, & PDRYLBDAG_MAX,PDRYLBDAR_MAX,PDRYLBDAG_MIN,PDRYLBDAR_MIN, & PFDINFTY,XKER_RDRYG ) - WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_RDRYG")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_RDRYG")') END IF ! !------------------------------------------------------------------------------- @@ -1575,15 +1575,15 @@ ZFDINFTY = 20.0 ! computing the kernels XKER_SWETH ZEHS, XCH, XDH, 0., XCS, XDS, XFVELOS, & ! XWETLBDAH_MAX, XWETLBDAS_MAX, XWETLBDAH_MIN, XWETLBDAS_MIN, & ! ZFDINFTY, XKER_N_SWETH ) - WRITE(UNIT=ILUOUT0,FMT='("!")') - WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_SWETH) ) THEN")') - DO J1 = 1 , NWETLBDAH - DO J2 = 1 , NWETLBDAS - WRITE(UNIT=ILUOUT0,FMT='(" PKER_N_SWETH(",I3,",",I3,") = ",E13.6)') & - J1,J2,XKER_N_SWETH(J1,J2) - END DO - END DO - WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_SWETH) ) THEN")') +!!$ DO J1 = 1 , NWETLBDAH +!!$ DO J2 = 1 , NWETLBDAS +!!$ WRITE(UNIT=ILUOUT0,FMT='(" PKER_N_SWETH(",I3,",",I3,") = ",E13.6)') & +!!$ J1,J2,XKER_N_SWETH(J1,J2) +!!$ END DO +!!$ END DO +!!$ WRITE(UNIT=ILUOUT0,FMT='("!")') !end if IF( .NOT.ALLOCATED(XKER_SWETH) ) ALLOCATE( XKER_SWETH(NWETLBDAH,NWETLBDAS) ) ! @@ -1603,48 +1603,48 @@ IF( (KWETLBDAH/=NWETLBDAH) .OR. (KWETLBDAS/=NWETLBDAS) .OR. (KND/=IND) .OR. & ZEHS, XBS, XCH, XDH, 0., XCS, XDS, XFVELOS, & XWETLBDAH_MAX, XWETLBDAS_MAX, XWETLBDAH_MIN, XWETLBDAS_MIN, & ZFDINFTY, XKER_SWETH ) - WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') - WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF SWETH KERNELS ****")') - WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') - WRITE(UNIT=ILUOUT0,FMT='("!")') - WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND - WRITE(UNIT=ILUOUT0,FMT='("KWETLBDAH=",I3)') NWETLBDAH - WRITE(UNIT=ILUOUT0,FMT='("KWETLBDAS=",I3)') NWETLBDAS - WRITE(UNIT=ILUOUT0,FMT='("PALPHAH=",E13.6)') XALPHAH - WRITE(UNIT=ILUOUT0,FMT='("PNUH=",E13.6)') XNUH - WRITE(UNIT=ILUOUT0,FMT='("PALPHAS=",E13.6)') XALPHAS - WRITE(UNIT=ILUOUT0,FMT='("PNUS=",E13.6)') XNUS - WRITE(UNIT=ILUOUT0,FMT='("PEHS=",E13.6)') ZEHS - WRITE(UNIT=ILUOUT0,FMT='("PBS=",E13.6)') XBS - WRITE(UNIT=ILUOUT0,FMT='("PCH=",E13.6)') XCH - WRITE(UNIT=ILUOUT0,FMT='("PDH=",E13.6)') XDH - WRITE(UNIT=ILUOUT0,FMT='("PCS=",E13.6)') XCS - WRITE(UNIT=ILUOUT0,FMT='("PDS=",E13.6)') XDS - WRITE(UNIT=ILUOUT0,FMT='("PFVELOS=",E13.6)') XFVELOS - WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAH_MAX=",E13.6)') & - XWETLBDAH_MAX - WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAS_MAX=",E13.6)') & - XWETLBDAS_MAX - WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAH_MIN=",E13.6)') & - XWETLBDAH_MIN - WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAS_MIN=",E13.6)') & - XWETLBDAS_MIN - WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY - WRITE(UNIT=ILUOUT0,FMT='("!")') - WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_SWETH) ) THEN")') - DO J1 = 1 , NWETLBDAH - DO J2 = 1 , NWETLBDAS - WRITE(UNIT=ILUOUT0,FMT='("PKER_SWETH(",I3,",",I3,") = ",E13.6)') & - J1,J2,XKER_SWETH(J1,J2) - END DO - END DO - WRITE(UNIT=ILUOUT0,FMT='("END IF")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF SWETH KERNELS ****")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND +!!$ WRITE(UNIT=ILUOUT0,FMT='("KWETLBDAH=",I3)') NWETLBDAH +!!$ WRITE(UNIT=ILUOUT0,FMT='("KWETLBDAS=",I3)') NWETLBDAS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PALPHAH=",E13.6)') XALPHAH +!!$ WRITE(UNIT=ILUOUT0,FMT='("PNUH=",E13.6)') XNUH +!!$ WRITE(UNIT=ILUOUT0,FMT='("PALPHAS=",E13.6)') XALPHAS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PNUS=",E13.6)') XNUS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PEHS=",E13.6)') ZEHS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PBS=",E13.6)') XBS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PCH=",E13.6)') XCH +!!$ WRITE(UNIT=ILUOUT0,FMT='("PDH=",E13.6)') XDH +!!$ WRITE(UNIT=ILUOUT0,FMT='("PCS=",E13.6)') XCS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PDS=",E13.6)') XDS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PFVELOS=",E13.6)') XFVELOS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAH_MAX=",E13.6)') & +!!$ XWETLBDAH_MAX +!!$ WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAS_MAX=",E13.6)') & +!!$ XWETLBDAS_MAX +!!$ WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAH_MIN=",E13.6)') & +!!$ XWETLBDAH_MIN +!!$ WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAS_MIN=",E13.6)') & +!!$ XWETLBDAS_MIN +!!$ WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY +!!$ WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_SWETH) ) THEN")') +!!$ DO J1 = 1 , NWETLBDAH +!!$ DO J2 = 1 , NWETLBDAS +!!$ WRITE(UNIT=ILUOUT0,FMT='("PKER_SWETH(",I3,",",I3,") = ",E13.6)') & +!!$ J1,J2,XKER_SWETH(J1,J2) +!!$ END DO +!!$ END DO +!!$ WRITE(UNIT=ILUOUT0,FMT='("END IF")') ELSE CALL LIMA_READ_XKER_SWETH (KWETLBDAH,KWETLBDAS,KND, & PALPHAH,PNUH,PALPHAS,PNUS,PEHS,PBS,PCH,PDH,PCS,PDS,PFVELOS, & PWETLBDAH_MAX,PWETLBDAS_MAX,PWETLBDAH_MIN,PWETLBDAS_MIN, & PFDINFTY,XKER_SWETH ) - WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_SWETH")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_SWETH")') END IF ! ! @@ -1658,15 +1658,15 @@ ZFDINFTY = 20.0 ZEHG, XCH, XDH, 0., XCG, XDG, 0., & XWETLBDAH_MAX, XWETLBDAG_MAX, XWETLBDAH_MIN, XWETLBDAG_MIN, & ZFDINFTY, XKER_N_GWETH ) - WRITE(UNIT=ILUOUT0,FMT='("!")') - WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_GWETH) ) THEN")') - DO J1 = 1 , NWETLBDAH - DO J2 = 1 , NWETLBDAG - WRITE(UNIT=ILUOUT0,FMT='(" PKER_N_GWETH(",I3,",",I3,") = ",E13.6)') & - J1,J2,XKER_N_GWETH(J1,J2) - END DO - END DO - WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_GWETH) ) THEN")') +!!$ DO J1 = 1 , NWETLBDAH +!!$ DO J2 = 1 , NWETLBDAG +!!$ WRITE(UNIT=ILUOUT0,FMT='(" PKER_N_GWETH(",I3,",",I3,") = ",E13.6)') & +!!$ J1,J2,XKER_N_GWETH(J1,J2) +!!$ END DO +!!$ END DO +!!$ WRITE(UNIT=ILUOUT0,FMT='("!")') !end if IF( .NOT.ALLOCATED(XKER_GWETH) ) ALLOCATE( XKER_GWETH(NWETLBDAH,NWETLBDAG) ) ! @@ -1686,47 +1686,47 @@ IF( (KWETLBDAH/=NWETLBDAH) .OR. (KWETLBDAG/=NWETLBDAG) .OR. (KND/=IND) .OR. & ZEHG, XBG, XCH, XDH, 0., XCG, XDG, 0., & XWETLBDAH_MAX, XWETLBDAG_MAX, XWETLBDAH_MIN, XWETLBDAG_MIN, & ZFDINFTY, XKER_GWETH ) - WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') - WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF GWETH KERNELS ****")') - WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') - WRITE(UNIT=ILUOUT0,FMT='("!")') - WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND - WRITE(UNIT=ILUOUT0,FMT='("KWETLBDAH=",I3)') NWETLBDAH - WRITE(UNIT=ILUOUT0,FMT='("KWETLBDAG=",I3)') NWETLBDAG - WRITE(UNIT=ILUOUT0,FMT='("PALPHAH=",E13.6)') XALPHAH - WRITE(UNIT=ILUOUT0,FMT='("PNUH=",E13.6)') XNUH - WRITE(UNIT=ILUOUT0,FMT='("PALPHAG=",E13.6)') XALPHAG - WRITE(UNIT=ILUOUT0,FMT='("PNUG=",E13.6)') XNUG - WRITE(UNIT=ILUOUT0,FMT='("PEHG=",E13.6)') ZEHG - WRITE(UNIT=ILUOUT0,FMT='("PBG=",E13.6)') XBG - WRITE(UNIT=ILUOUT0,FMT='("PCH=",E13.6)') XCH - WRITE(UNIT=ILUOUT0,FMT='("PDH=",E13.6)') XDH - WRITE(UNIT=ILUOUT0,FMT='("PCG=",E13.6)') XCG - WRITE(UNIT=ILUOUT0,FMT='("PDG=",E13.6)') XDG - WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAH_MAX=",E13.6)') & - XWETLBDAH_MAX - WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAG_MAX=",E13.6)') & - XWETLBDAG_MAX - WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAH_MIN=",E13.6)') & - XWETLBDAH_MIN - WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAG_MIN=",E13.6)') & - XWETLBDAG_MIN - WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY - WRITE(UNIT=ILUOUT0,FMT='("!")') - WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_GWETH) ) THEN")') - DO J1 = 1 , NWETLBDAH - DO J2 = 1 , NWETLBDAG - WRITE(UNIT=ILUOUT0,FMT='("PKER_GWETH(",I3,",",I3,") = ",E13.6)') & - J1,J2,XKER_GWETH(J1,J2) - END DO - END DO - WRITE(UNIT=ILUOUT0,FMT='("END IF")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF GWETH KERNELS ****")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("*****************************************")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND +!!$ WRITE(UNIT=ILUOUT0,FMT='("KWETLBDAH=",I3)') NWETLBDAH +!!$ WRITE(UNIT=ILUOUT0,FMT='("KWETLBDAG=",I3)') NWETLBDAG +!!$ WRITE(UNIT=ILUOUT0,FMT='("PALPHAH=",E13.6)') XALPHAH +!!$ WRITE(UNIT=ILUOUT0,FMT='("PNUH=",E13.6)') XNUH +!!$ WRITE(UNIT=ILUOUT0,FMT='("PALPHAG=",E13.6)') XALPHAG +!!$ WRITE(UNIT=ILUOUT0,FMT='("PNUG=",E13.6)') XNUG +!!$ WRITE(UNIT=ILUOUT0,FMT='("PEHG=",E13.6)') ZEHG +!!$ WRITE(UNIT=ILUOUT0,FMT='("PBG=",E13.6)') XBG +!!$ WRITE(UNIT=ILUOUT0,FMT='("PCH=",E13.6)') XCH +!!$ WRITE(UNIT=ILUOUT0,FMT='("PDH=",E13.6)') XDH +!!$ WRITE(UNIT=ILUOUT0,FMT='("PCG=",E13.6)') XCG +!!$ WRITE(UNIT=ILUOUT0,FMT='("PDG=",E13.6)') XDG +!!$ WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAH_MAX=",E13.6)') & +!!$ XWETLBDAH_MAX +!!$ WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAG_MAX=",E13.6)') & +!!$ XWETLBDAG_MAX +!!$ WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAH_MIN=",E13.6)') & +!!$ XWETLBDAH_MIN +!!$ WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAG_MIN=",E13.6)') & +!!$ XWETLBDAG_MIN +!!$ WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY +!!$ WRITE(UNIT=ILUOUT0,FMT='("!")') +!!$ WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_GWETH) ) THEN")') +!!$ DO J1 = 1 , NWETLBDAH +!!$ DO J2 = 1 , NWETLBDAG +!!$ WRITE(UNIT=ILUOUT0,FMT='("PKER_GWETH(",I3,",",I3,") = ",E13.6)') & +!!$ J1,J2,XKER_GWETH(J1,J2) +!!$ END DO +!!$ END DO +!!$ WRITE(UNIT=ILUOUT0,FMT='("END IF")') ELSE CALL LIMA_READ_XKER_GWETH (KWETLBDAH,KWETLBDAG,KND, & PALPHAH,PNUH,PALPHAG,PNUG,PEHG,PBG,PCH,PDH,PCG,PDG, & PWETLBDAH_MAX,PWETLBDAG_MAX,PWETLBDAH_MIN,PWETLBDAG_MIN, & PFDINFTY,XKER_GWETH ) - WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_GWETH")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_GWETH")') END IF ! ! @@ -1748,35 +1748,35 @@ XFREFFI = 0.5 * ZGAMI(8) * (1.0/XLBI)**XLBEXI ! ----------------------- ! ! -GFLAG = .TRUE. -IF (GFLAG) THEN - WRITE(UNIT=ILUOUT0,FMT='(" Summary of the ice particule characteristics")') - WRITE(UNIT=ILUOUT0,FMT='(" PRISTINE ICE")') - WRITE(UNIT=ILUOUT0,FMT='(" masse: A=",E13.6," B=",E13.6)') & - XAI,XBI - WRITE(UNIT=ILUOUT0,FMT='(" vitesse: C=",E13.6," D=",E13.6)') & - XC_I,XDI - WRITE(UNIT=ILUOUT0,FMT='(" distribution:AL=",E13.6,"NU=",E13.6)') & - XALPHAI,XNUI - WRITE(UNIT=ILUOUT0,FMT='(" SNOW")') - WRITE(UNIT=ILUOUT0,FMT='(" masse: A=",E13.6," B=",E13.6)') & - XAS,XBS - WRITE(UNIT=ILUOUT0,FMT='(" vitesse: C=",E13.6," D=",E13.6)') & - XCS,XDS - WRITE(UNIT=ILUOUT0,FMT='(" concentration:CC=",E13.6," x=",E13.6)') & - XCCS,XCXS - WRITE(UNIT=ILUOUT0,FMT='(" distribution:AL=",E13.6,"NU=",E13.6)') & - XALPHAS,XNUS - WRITE(UNIT=ILUOUT0,FMT='(" GRAUPEL")') - WRITE(UNIT=ILUOUT0,FMT='(" masse: A=",E13.6," B=",E13.6)') & - XAG,XBG - WRITE(UNIT=ILUOUT0,FMT='(" vitesse: C=",E13.6," D=",E13.6)') & - XCG,XDG - WRITE(UNIT=ILUOUT0,FMT='(" concentration:CC=",E13.6," x=",E13.6)') & - XCCG,XCXG - WRITE(UNIT=ILUOUT0,FMT='(" distribution:AL=",E13.6,"NU=",E13.6)') & - XALPHAG,XNUG -END IF +!!$GFLAG = .TRUE. +!!$IF (GFLAG) THEN +!!$ WRITE(UNIT=ILUOUT0,FMT='(" Summary of the ice particule characteristics")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" PRISTINE ICE")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" masse: A=",E13.6," B=",E13.6)') & +!!$ XAI,XBI +!!$ WRITE(UNIT=ILUOUT0,FMT='(" vitesse: C=",E13.6," D=",E13.6)') & +!!$ XC_I,XDI +!!$ WRITE(UNIT=ILUOUT0,FMT='(" distribution:AL=",E13.6,"NU=",E13.6)') & +!!$ XALPHAI,XNUI +!!$ WRITE(UNIT=ILUOUT0,FMT='(" SNOW")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" masse: A=",E13.6," B=",E13.6)') & +!!$ XAS,XBS +!!$ WRITE(UNIT=ILUOUT0,FMT='(" vitesse: C=",E13.6," D=",E13.6)') & +!!$ XCS,XDS +!!$ WRITE(UNIT=ILUOUT0,FMT='(" concentration:CC=",E13.6," x=",E13.6)') & +!!$ XCCS,XCXS +!!$ WRITE(UNIT=ILUOUT0,FMT='(" distribution:AL=",E13.6,"NU=",E13.6)') & +!!$ XALPHAS,XNUS +!!$ WRITE(UNIT=ILUOUT0,FMT='(" GRAUPEL")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" masse: A=",E13.6," B=",E13.6)') & +!!$ XAG,XBG +!!$ WRITE(UNIT=ILUOUT0,FMT='(" vitesse: C=",E13.6," D=",E13.6)') & +!!$ XCG,XDG +!!$ WRITE(UNIT=ILUOUT0,FMT='(" concentration:CC=",E13.6," x=",E13.6)') & +!!$ XCCG,XCXG +!!$ WRITE(UNIT=ILUOUT0,FMT='(" distribution:AL=",E13.6,"NU=",E13.6)') & +!!$ XALPHAG,XNUG +!!$END IF ! !------------------------------------------------------------------------------ ! diff --git a/src/common/micro/ini_lima_warm.F90 b/src/common/micro/ini_lima_warm.F90 index aea2517cab9d168a998aa6785bd35693674050d9..c1485757f397c113484257f6849c349f240f709c 100644 --- a/src/common/micro/ini_lima_warm.F90 +++ b/src/common/micro/ini_lima_warm.F90 @@ -50,7 +50,7 @@ USE MODD_REF USE MODD_PARAM_LIMA USE MODD_PARAM_LIMA_WARM USE MODD_PARAMETERS -USE MODD_LUNIT, ONLY : TLUOUT0 +!USE MODD_LUNIT, ONLY : TLUOUT0 ! USE MODI_LIMA_FUNCTIONS USE MODI_HYPGEO @@ -85,9 +85,9 @@ REAL :: ZSMIN, ZSMAX ! Minimal and maximal supersaturation used to ! discretize the HYP functions ! ! -INTEGER :: ILUOUT0 ! Logical unit number for output-listing -INTEGER :: IRESP ! Return code of FM-routines -LOGICAL :: GFLAG ! Logical flag for printing the constatnts on the output +!INTEGER :: ILUOUT0 ! Logical unit number for output-listing +!INTEGER :: IRESP ! Return code of FM-routines +!LOGICAL :: GFLAG ! Logical flag for printing the constatnts on the output ! listing ! !------------------------------------------------------------------------------- @@ -448,29 +448,29 @@ XCRER = 1.0/ (ZGAMR(6) * XAR**(2.0/3.0)) ! ----------------------- ! ! -GFLAG = .TRUE. -IF (GFLAG) THEN - ILUOUT0 = TLUOUT0%NLU - WRITE(UNIT=ILUOUT0,FMT='(" Summary of the cloud particule characteristics")') - WRITE(UNIT=ILUOUT0,FMT='(" CLOUD")') - WRITE(UNIT=ILUOUT0,FMT='(" masse: A=",E13.6," B=",E13.6)') & - XAR,XBR - WRITE(UNIT=ILUOUT0,FMT='(" vitesse: C=",E13.6," D=",E13.6)') & - XCC,XDC - WRITE(UNIT=ILUOUT0,FMT='(" distribution:AL=",E13.6,"NU=",E13.6)') & - XALPHAC,XNUC - WRITE(UNIT=ILUOUT0,FMT='(" RAIN")') - WRITE(UNIT=ILUOUT0,FMT='(" masse: A=",E13.6," B=",E13.6)') & - XAR,XBR - WRITE(UNIT=ILUOUT0,FMT='(" vitesse: C=",E13.6," D=",E13.6)') & - XCR,XDR +!!$GFLAG = .TRUE. +!!$IF (GFLAG) THEN +!!$ ILUOUT0 = TLUOUT0%NLU +!!$ WRITE(UNIT=ILUOUT0,FMT='(" Summary of the cloud particule characteristics")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" CLOUD")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" masse: A=",E13.6," B=",E13.6)') & +!!$ XAR,XBR +!!$ WRITE(UNIT=ILUOUT0,FMT='(" vitesse: C=",E13.6," D=",E13.6)') & +!!$ XCC,XDC +!!$ WRITE(UNIT=ILUOUT0,FMT='(" distribution:AL=",E13.6,"NU=",E13.6)') & +!!$ XALPHAC,XNUC +!!$ WRITE(UNIT=ILUOUT0,FMT='(" RAIN")') +!!$ WRITE(UNIT=ILUOUT0,FMT='(" masse: A=",E13.6," B=",E13.6)') & +!!$ XAR,XBR +!!$ WRITE(UNIT=ILUOUT0,FMT='(" vitesse: C=",E13.6," D=",E13.6)') & +!!$ XCR,XDR !!$ WRITE(UNIT=ILUOUT0,FMT='(" distribution:AL=",E13.6,"NU=",E13.6)') & !!$ XALPHAR,XNUR !!$ WRITE(UNIT=ILUOUT0,FMT='(" Description of the nucleation spectrum")') !!$ WRITE(UNIT=ILUOUT0,FMT='(" C=",E13.6," k=",E13.6)') XCHEN, XKHEN !!$ WRITE(UNIT=ILUOUT0,FMT='(" Beta=",E13.6," MU=",E13.6)') XBETAHEN, XMUHEN !!$ WRITE(UNIT=ILUOUT0,FMT='(" CCN max=",E13.6)') XCONC_CCN -END IF +!!$END IF ! !------------------------------------------------------------------------------ ! diff --git a/src/common/micro/init_aerosol_properties.F90 b/src/common/micro/init_aerosol_properties.F90 index 52f7ddc882a89149d5f467797f07c70b1a9f5ba2..e1a7916408b799fa8d5eed03ce2698fb3ba9c37d 100644 --- a/src/common/micro/init_aerosol_properties.F90 +++ b/src/common/micro/init_aerosol_properties.F90 @@ -44,7 +44,7 @@ END MODULE MODI_INIT_AEROSOL_PROPERTIES !* 0. DECLARATIONS ! ------------ ! -USE MODD_LUNIT, ONLY : TLUOUT0 +!USE MODD_LUNIT, ONLY : TLUOUT0 USE MODD_PARAM_LIMA, ONLY : NMOD_CCN, HINI_CCN, HTYPE_CCN, & XR_MEAN_CCN, XLOGSIG_CCN, XRHO_CCN, & XKHEN_MULTI, XMUHEN_MULTI, XBETAHEN_MULTI, & @@ -52,7 +52,8 @@ USE MODD_PARAM_LIMA, ONLY : NMOD_CCN, HINI_CCN, HTYPE_CCN, & XACTEMP_CCN, XFSOLUB_CCN, & NMOD_IFN, NSPECIE, CIFN_SPECIES, & XMDIAM_IFN, XSIGMA_IFN, XRHO_IFN, XFRAC, XFRAC_REF, & - CINT_MIXING, NPHILLIPS + CINT_MIXING, NPHILLIPS, & + NIMM, NMOD_IMM, NINDICE_CCN_IMM ! use mode_msg ! @@ -84,8 +85,8 @@ REAL, DIMENSION(3) :: RHOCCN ! INTEGER :: I,J,JMOD ! -INTEGER :: ILUOUT0 ! Logical unit number for output-listing -INTEGER :: IRESP ! Return code of FM-routines +!INTEGER :: ILUOUT0 ! Logical unit number for output-listing +!INTEGER :: IRESP ! Return code of FM-routines ! REAL :: X1, X2, X3, X4, X5 ! REAL, DIMENSION(7) :: diameters=(/ 0.01E-6, 0.05E-6, 0.1E-6, 0.2E-6, 0.5E-6, 1.E-6, 2.E-6 /) @@ -97,7 +98,7 @@ INTEGER :: II, IJ, IK ! !------------------------------------------------------------------------------- ! -ILUOUT0 = TLUOUT0%NLU +!ILUOUT0 = TLUOUT0%NLU ! !!!!!!!!!!!!!!!! ! CCN properties @@ -183,13 +184,13 @@ IF ( NMOD_CCN .GE. 1 ) THEN IF (.NOT.(ALLOCATED(XLIMIT_FACTOR))) ALLOCATE(XLIMIT_FACTOR(NMOD_CCN)) ! IF (HINI_CCN == 'CCN') THEN - IF (LSCAV) THEN -! Attention ! - WRITE(UNIT=ILUOUT0,FMT='("You are using a numerical initialization & - ¬ depending on the aerosol properties, however you need it for & - &scavenging. & - &With LSCAV = true, HINI_CCN should be set to AER for consistency")') - END IF +!!$ IF (LSCAV) THEN +!!$! Attention ! +!!$ WRITE(UNIT=ILUOUT0,FMT='("You are using a numerical initialization & +!!$ ¬ depending on the aerosol properties, however you need it for & +!!$ &scavenging. & +!!$ &With LSCAV = true, HINI_CCN should be set to AER for consistency")') +!!$ END IF ! Numerical initialization without dependence on AP physical properties DO JMOD = 1, NMOD_CCN XKHEN_MULTI(JMOD) = XKHEN_TMP(JMOD) @@ -431,6 +432,22 @@ IF ( NMOD_IFN .GE. 1 ) THEN XFRAC_REF(4)=0.06 END IF ! +! Immersion modes +! + IF (.NOT.(ALLOCATED(NIMM))) ALLOCATE(NIMM(NMOD_CCN)) + NIMM(:)=0 + IF (ALLOCATED(NINDICE_CCN_IMM)) DEALLOCATE(NINDICE_CCN_IMM) + ALLOCATE(NINDICE_CCN_IMM(MAX(1,NMOD_IMM))) + IF (NMOD_IMM .GE. 1) THEN + DO J = 0, NMOD_IMM-1 + NIMM(NMOD_CCN-J)=1 + NINDICE_CCN_IMM(NMOD_IMM-J) = NMOD_CCN-J + END DO +! ELSE IF (NMOD_IMM == 0) THEN ! PNIS existe mais vaut 0, pour l'appel à resolved_cloud +! NMOD_IMM = 1 +! NINDICE_CCN_IMM(1) = 0 + END IF +! END IF ! NMOD_IFN > 0 ! END SUBROUTINE INIT_AEROSOL_PROPERTIES diff --git a/src/common/micro/lima_adjust_split.F90 b/src/common/micro/lima_adjust_split.F90 index 0f8aeef7151532a7011356dc4e960f92bf3a0c73..e0122fa2d37d2eff673096e7cede50f7f72dd89d 100644 --- a/src/common/micro/lima_adjust_split.F90 +++ b/src/common/micro/lima_adjust_split.F90 @@ -9,21 +9,28 @@ ! INTERFACE ! - SUBROUTINE LIMA_ADJUST_SPLIT(D, KRR, KMI, TPFILE, HCONDENS, HLAMBDA3, & + SUBROUTINE LIMA_ADJUST_SPLIT(D, CST, BUCONF, TBUDGETS, KBUDGETS, & + KRR, KMI, HCONDENS, HLAMBDA3, & OSUBG_COND, OSIGMAS, PTSTEP, PSIGQSAT, & PRHODREF, PRHODJ, PEXNREF, PSIGS, PMFCONV, & PPABST, PPABSTT, PZZ, PDTHRAD, PW_NU, & PRT, PRS, PSVT, PSVS, & PTHS, PSRCS, PCLDFR, PICEFR, PRC_MF, PRI_MF, PCF_MF) ! -USE MODD_IO, ONLY: TFILEDATA +!USE MODD_IO, ONLY: TFILEDATA USE MODD_NSV, only: NSV_LIMA_BEG USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t +USE MODD_BUDGET, ONLY: TBUDGETDATA, TBUDGETCONF_t +USE MODD_CST, ONLY: CST_t ! TYPE(DIMPHYEX_t), INTENT(IN) :: D +TYPE(CST_t), INTENT(IN) :: CST +TYPE(TBUDGETCONF_t), INTENT(IN) :: BUCONF +TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS +INTEGER, INTENT(IN) :: KBUDGETS +! INTEGER, INTENT(IN) :: KRR ! Number of moist variables INTEGER, INTENT(IN) :: KMI ! Model index -TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file CHARACTER(len=80), INTENT(IN) :: HCONDENS CHARACTER(len=4), INTENT(IN) :: HLAMBDA3 ! formulation for lambda3 coeff LOGICAL, INTENT(IN) :: OSUBG_COND ! Switch for Subgrid @@ -72,7 +79,7 @@ END INTERFACE END MODULE MODI_LIMA_ADJUST_SPLIT ! ! ########################################################################### - SUBROUTINE LIMA_ADJUST_SPLIT(D, KRR, KMI, TPFILE, HCONDENS, HLAMBDA3, & + SUBROUTINE LIMA_ADJUST_SPLIT(D, KRR, KMI, HCONDENS, HLAMBDA3, & OSUBG_COND, OSIGMAS, PTSTEP, PSIGQSAT, & PRHODREF, PRHODJ, PEXNREF, PSIGS, PMFCONV, & PPABST, PPABSTT, PZZ, PDTHRAD, PW_NU, & @@ -152,15 +159,12 @@ END MODULE MODI_LIMA_ADJUST_SPLIT !* 0. DECLARATIONS ! ------------ ! -use modd_budget, only: lbu_enable, nbumod, & - lbudget_th, lbudget_rv, lbudget_rc, lbudget_ri, lbudget_sv, & - NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RI, NBUDGET_SV1, & - tbudgets +USE MODD_BUDGET, ONLY: TBUDGETDATA, TBUDGETCONF_t +USE MODD_CST, ONLY: CST_t USE MODD_CONF -USE MODD_CST -use modd_field, only: TFIELDMETADATA, TYPEREAL -USE MODD_IO, ONLY: TFILEDATA -USE MODD_LUNIT_n, ONLY: TLUOUT +!use modd_field, only: TFIELDDATA, TYPEREAL +!USE MODD_IO, ONLY: TFILEDATA +!USE MODD_LUNIT_n, ONLY: TLUOUT USE MODD_NSV USE MODD_PARAMETERS USE MODD_PARAM_LIMA @@ -172,8 +176,8 @@ USE MODD_NEB, ONLY: NEB USE MODD_TURB_n, ONLY: TURBN USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t ! -use mode_budget, only: Budget_store_init, Budget_store_end -USE MODE_IO_FIELD_WRITE, only: IO_Field_write +use mode_budget, only: BUDGET_STORE_INIT_PHY, BUDGET_STORE_END_PHY +!USE MODE_IO_FIELD_WRITE, only: IO_Field_write use mode_msg use mode_tools, only: Countjv ! @@ -188,9 +192,13 @@ IMPLICIT NONE ! ! TYPE(DIMPHYEX_t), INTENT(IN) :: D +TYPE(CST_t), INTENT(IN) :: CST +TYPE(TBUDGETCONF_t), INTENT(IN) :: BUCONF +TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS +INTEGER, INTENT(IN) :: KBUDGETS +! INTEGER, INTENT(IN) :: KRR ! Number of moist variables INTEGER, INTENT(IN) :: KMI ! Model index -TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! Output file CHARACTER(len=80), INTENT(IN) :: HCONDENS CHARACTER(len=4), INTENT(IN) :: HLAMBDA3 ! formulation for lambda3 coeff LOGICAL, INTENT(IN) :: OSUBG_COND ! Switch for Subgrid @@ -244,6 +252,7 @@ REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) & PRIT, & ! Cloud ice m.r. at t PRST, & ! Aggregate m.r. at t PRGT, & ! Graupel m.r. at t + PRHT, & ! Hail m.r. at t ! PRVS, & ! Water vapor m.r. source PRCS, & ! Cloud water m.r. source @@ -251,6 +260,7 @@ REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) & PRIS, & ! Cloud ice m.r. source PRSS, & ! Aggregate m.r. source PRGS, & ! Graupel m.r. source + PRHS, & ! Hail m.r. source ! PCCT, & ! Cloud water conc. at t PCIT, & ! Cloud ice conc. at t @@ -292,14 +302,14 @@ REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2)) :: ZSIGQSAT2D ! INTEGER, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) :: IVEC1 ! -INTEGER :: IRESP ! Return code of FM routines +!INTEGER :: IRESP ! Return code of FM routines INTEGER :: IIU,IJU,IKU! dimensions of dummy arrays INTEGER :: IKB ! K index value of the first inner mass point INTEGER :: IKE ! K index value of the last inner mass point INTEGER :: IIB,IJB ! Horz index values of the first inner mass points INTEGER :: IIE,IJE ! Horz index values of the last inner mass points INTEGER :: JITER,ITERMAX ! iterative loop for first order adjustment -INTEGER :: ILUOUT ! Logical unit of output listing +!INTEGER :: ILUOUT ! Logical unit of output listing ! INTEGER :: ISIZE LOGICAL :: G_SIGMAS, GUSERI @@ -317,19 +327,9 @@ TYPE(TFIELDMETADATA) :: TZFIELD !* 1. PRELIMINARIES ! ------------- ! -ILUOUT = TLUOUT%NLU -! -IIU = SIZE(PEXNREF,1) -IJU = SIZE(PEXNREF,2) -IKU = SIZE(PEXNREF,3) -IIB = 1 + JPHEXT -IIE = SIZE(PRHODJ,1) - JPHEXT -IJB = 1 + JPHEXT -IJE = SIZE(PRHODJ,2) - JPHEXT -IKB = 1 + JPVEXT -IKE = SIZE(PRHODJ,3) - JPVEXT +!ILUOUT = TLUOUT%NLU ! -ZEPS= XMV / XMD +ZEPS= CST%XMV / CST%XMD ! IF (OSUBG_COND) THEN ITERMAX=1 @@ -363,6 +363,8 @@ PRST(:,:,:) = 0. PRSS(:,:,:) = 0. PRGT(:,:,:) = 0. PRGS(:,:,:) = 0. +PRHT(:,:,:) = 0. +PRHS(:,:,:) = 0. ! IF ( KRR .GE. 2 ) PRCT(:,:,:) = PRS(:,:,:,2)*PTSTEP IF ( KRR .GE. 2 ) PRCS(:,:,:) = PRS(:,:,:,2) @@ -374,6 +376,8 @@ IF ( KRR .GE. 5 ) PRST(:,:,:) = PRT(:,:,:,5) IF ( KRR .GE. 5 ) PRSS(:,:,:) = PRS(:,:,:,5) IF ( KRR .GE. 6 ) PRGT(:,:,:) = PRT(:,:,:,6) IF ( KRR .GE. 6 ) PRGS(:,:,:) = PRS(:,:,:,6) +IF ( KRR .GE. 7 ) PRHT(:,:,:) = PRT(:,:,:,7) +IF ( KRR .GE. 7 ) PRHS(:,:,:) = PRS(:,:,:,7) ! ! Prepare 3D number concentrations PCCT(:,:,:) = 0. @@ -413,36 +417,36 @@ END IF ! END IF ! ! -if ( nbumod == kmi .and. lbu_enable ) then - if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'CEDS', pths(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rv ) call Budget_store_init( tbudgets(NBUDGET_RV), 'CEDS', prvs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'CEDS', prcs(:, :, :) * prhodj(:, :, :) ) +if ( nbumod == kmi .and. BUCONF%lbu_enable ) then + if ( BUCONF%lbudget_th ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_TH), 'CEDS', pths(:, :, :) * prhodj(:, :, :) ) + if ( BUCONF%lbudget_rv ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RV), 'CEDS', prvs(:, :, :) * prhodj(:, :, :) ) + if ( BUCONF%lbudget_rc ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RC), 'CEDS', prcs(:, :, :) * prhodj(:, :, :) ) !Remark: PRIS is not modified but source term kept for better coherence with lima_adjust and lima_notadjust - if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'CEDS', pris(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_sv ) then + if ( BUCONF%lbudget_ri ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RI), 'CEDS', pris(:, :, :) * prhodj(:, :, :) ) + if ( BUCONF%lbudget_sv ) then if ( nmom_c.ge.2) & - call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'CEDS', pccs(:, :, :) * prhodj(:, :, :) ) + call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'CEDS', pccs(:, :, :) * prhodj(:, :, :) ) if ( lscav .and. laero_mass ) & - call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_scavmass), 'CEDS', pmas(:, :, :) * prhodj(:, :, :) ) + call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_scavmass), 'CEDS', pmas(:, :, :) * prhodj(:, :, :) ) if ( nmom_c.ge.1 ) then do jl = 1, nmod_ccn idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_free - 1 + jl - call Budget_store_init( tbudgets(idx), 'CEDS', pnfs(:, :, :, jl) * prhodj(:, :, :) ) + call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'CEDS', pnfs(:, :, :, jl) * prhodj(:, :, :) ) idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_acti - 1 + jl - call Budget_store_init( tbudgets(idx), 'CEDS', pnas(:, :, :, jl) * prhodj(:, :, :) ) + call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'CEDS', pnas(:, :, :, jl) * prhodj(:, :, :) ) end do end if ! if ( nmom_i.ge.2 ) then -! call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CEDS', pcis(:, :, :) * prhodj(:, :, :) ) +! call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CEDS', pcis(:, :, :) * prhodj(:, :, :) ) ! do jl = 1, nmod_ifn ! idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_free - 1 + jl -! call Budget_store_init( tbudgets(idx), 'CEDS', pifs(:, :, :, jl) * prhodj(:, :, :) ) +! call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'CEDS', pifs(:, :, :, jl) * prhodj(:, :, :) ) ! idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl - 1 + jl -! call Budget_store_init( tbudgets(idx), 'CEDS', pins(:, :, :, jl) * prhodj(:, :, :) ) +! call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'CEDS', pins(:, :, :, jl) * prhodj(:, :, :) ) ! end do ! do jl = 1, nmod_imm ! idx = NBUDGET_SV1 - 1 + nsv_lima_imm_nucl - 1 + jl -! call Budget_store_init( tbudgets(idx), 'CEDS', pnis(:, :, :, jl) * prhodj(:, :, :) ) +! call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'CEDS', pnis(:, :, :, jl) * prhodj(:, :, :) ) ! end do ! end if end if @@ -469,7 +473,7 @@ END WHERE ! !* 2.2 estimate the Exner function at t+1 ! -ZEXNS(:,:,:) = ( PPABSTT(:,:,:) / XP00 ) ** (XRD/XCPD) +ZEXNS(:,:,:) = ( PPABSTT(:,:,:) / CST%XP00 ) ** (CST%XRD/CST%XCPD) ! ! beginning of the iterative loop ! @@ -482,15 +486,15 @@ DO JITER =1,ITERMAX ! !* 2.4 compute the specific heat for moist air (Cph) at t+1 ! - ZCPH(:,:,:) = XCPD + XCPV *ZDT* PRVS(:,:,:) & - + XCL *ZDT* ( PRCS(:,:,:) + PRRS(:,:,:) ) & - + XCI *ZDT* ( PRIS(:,:,:) + PRSS(:,:,:) + PRGS(:,:,:) ) + ZCPH(:,:,:) = CST%XCPD + CST%XCPV *ZDT* PRVS(:,:,:) & + + CST%XCL *ZDT* ( PRCS(:,:,:) + PRRS(:,:,:) ) & + + CST%XCI *ZDT* ( PRIS(:,:,:) + PRSS(:,:,:) + PRGS(:,:,:) + PRHS(:,:,:) ) ! !* 2.5 compute the latent heat of vaporization Lv(T*) at t+1 ! and of sublimation Ls(T*) at t+1 ! - ZLV(:,:,:) = XLVTT + ( XCPV - XCL ) * ( ZT(:,:,:) -XTT ) - ZLS(:,:,:) = XLSTT + ( XCPV - XCI ) * ( ZT(:,:,:) -XTT ) + ZLV(:,:,:) = CST%XLVTT + ( CST%XCPV - CST%XCL ) * ( ZT(:,:,:) -CST%XTT ) + ZLS(:,:,:) = CST%XLSTT + ( CST%XCPV - CST%XCI ) * ( ZT(:,:,:) -CST%XTT ) ! ! !------------------------------------------------------------------------------- @@ -533,7 +537,7 @@ DO JITER =1,ITERMAX IF (OSUBG_COND .AND. NMOM_C.GE.2 .AND. LACTI) THEN PSRCS=Z_SRCS ZW_MF=0. - CALL LIMA_CCN_ACTIVATION (TPFILE, & + CALL LIMA_CCN_ACTIVATION (CST, & PRHODREF, PEXNREF, PPABST, ZT2, PDTHRAD, PW_NU+ZW_MF, & PTHT, ZRV2, ZRC2, PCCT, PRRT, PNFT, PNAT, & PCLDFR ) @@ -564,7 +568,7 @@ ELSE ZVEC1(JI,JJ,JK) = MAX( 1.0001, MIN( FLOAT(NAHEN)-0.0001, XAHENINTP1 * ZT(JI,JJ,JK) + XAHENINTP2 ) ) IVEC1(JI,JJ,JK) = INT( ZVEC1(JI,JJ,JK) ) ZVEC1(JI,JJ,JK) = ZVEC1(JI,JJ,JK) - FLOAT( IVEC1(JI,JJ,JK) ) - ZW(JI,JJ,JK)=EXP( XALPW - XBETAW/ZT(JI,JJ,JK) - XGAMW*ALOG(ZT(JI,JJ,JK) ) ) ! es_w + ZW(JI,JJ,JK)=EXP( CST%XALPW - CST%XBETAW/ZT(JI,JJ,JK) - CST%XGAMW*ALOG(ZT(JI,JJ,JK) ) ) ! es_w ZW(JI,JJ,JK)=ZEPS*ZW(JI,JJ,JK) / ( PPABST(JI,JJ,JK)-ZW(JI,JJ,JK) ) ZS(JI,JJ,JK) = PRVS(JI,JJ,JK)*PTSTEP / ZW(JI,JJ,JK) - 1. ZW(JI,JJ,JK) = PCCS(JI,JJ,JK)*PTSTEP/(XLBC*PCCS(JI,JJ,JK)/PRCS(JI,JJ,JK))**XLBEXC @@ -681,20 +685,20 @@ ELSE WHERE(PICEFR(:,:,:)<1.E-10 .AND. PRIT(:,:,:)>XRTMIN(4) .AND. PCIT(:,:,:)>XCTMIN(4)) PICEFR(:,:,:)=1. END IF ! -IF ( tpfile%lopened ) THEN - TZFIELD = TFIELDMETADATA( & - CMNHNAME = 'NEB', & - CSTDNAME = '', & - CLONGNAME = 'NEB', & - CUNITS = '1', & - CDIR = 'XY', & - CCOMMENT = 'X_Y_Z_NEB', & - NGRID = 1, & - NTYPE = TYPEREAL, & - NDIMS = 3, & - LTIMEDEP = .TRUE. ) - CALL IO_Field_write(TPFILE,TZFIELD,PCLDFR) -END IF +!!$IF ( tpfile%lopened ) THEN +!!$ TZFIELD = TFIELDMETADATA( & +!!$ CMNHNAME = 'NEB', & +!!$ CSTDNAME = '', & +!!$ CLONGNAME = 'NEB', & +!!$ CUNITS = '1', & +!!$ CDIR = 'XY', & +!!$ CCOMMENT = 'X_Y_Z_NEB', & +!!$ NGRID = 1, & +!!$ NTYPE = TYPEREAL, & +!!$ NDIMS = 3, & +!!$ LTIMEDEP = .TRUE. ) +!!$ CALL IO_Field_write(TPFILE,TZFIELD,PCLDFR) +!!$END IF ! ! !* 6. SAVE CHANGES IN PRS AND PSVS @@ -707,6 +711,7 @@ IF ( KRR .GE. 3 ) PRS(:,:,:,3) = PRRS(:,:,:) IF ( KRR .GE. 4 ) PRS(:,:,:,4) = PRIS(:,:,:) IF ( KRR .GE. 5 ) PRS(:,:,:,5) = PRSS(:,:,:) IF ( KRR .GE. 6 ) PRS(:,:,:,6) = PRGS(:,:,:) +IF ( KRR .GE. 7 ) PRS(:,:,:,7) = PRHS(:,:,:) ! ! Prepare 3D number concentrations ! @@ -731,59 +736,59 @@ END IF ! ! write SSI in LFI ! -IF ( tpfile%lopened ) THEN - ZT(:,:,:) = ( PTHS(:,:,:) * ZDT ) * ZEXNS(:,:,:) - ZW(:,:,:) = EXP( XALPI - XBETAI/ZT(:,:,:) - XGAMI*ALOG(ZT(:,:,:) ) ) - ZW1(:,:,:)= PPABSTT(:,:,:) - ZW(:,:,:) = PRVT(:,:,:)*( ZW1(:,:,:)-ZW(:,:,:) ) / ( (XMV/XMD) * ZW(:,:,:) ) - 1.0 - - TZFIELD = TFIELDMETADATA( & - CMNHNAME = 'SSI', & - CSTDNAME = '', & - CLONGNAME = 'SSI', & - CUNITS = '', & - CDIR = 'XY', & - CCOMMENT = 'X_Y_Z_SSI', & - NGRID = 1, & - NTYPE = TYPEREAL, & - NDIMS = 3, & - LTIMEDEP = .TRUE. ) - CALL IO_Field_write(TPFILE,TZFIELD,ZW) -END IF +!!$IF ( tpfile%lopened ) THEN +!!$ ZT(:,:,:) = ( PTHS(:,:,:) * ZDT ) * ZEXNS(:,:,:) +!!$ ZW(:,:,:) = EXP( XALPI - XBETAI/ZT(:,:,:) - XGAMI*ALOG(ZT(:,:,:) ) ) +!!$ ZW1(:,:,:)= PPABSTT(:,:,:) +!!$ ZW(:,:,:) = PRVT(:,:,:)*( ZW1(:,:,:)-ZW(:,:,:) ) / ( (XMV/XMD) * ZW(:,:,:) ) - 1.0 +!!$ +!!$ TZFIELD = TFIELDMETADATA( & +!!$ CMNHNAME = 'SSI', & +!!$ CSTDNAME = '', & +!!$ CLONGNAME = 'SSI', & +!!$ CUNITS = '', & +!!$ CDIR = 'XY', & +!!$ CCOMMENT = 'X_Y_Z_SSI', & +!!$ NGRID = 1, & +!!$ NTYPE = TYPEREAL, & +!!$ NDIMS = 3, & +!!$ LTIMEDEP = .TRUE. ) +!!$ CALL IO_Field_write(TPFILE,TZFIELD,ZW) +!!$END IF ! ! !* 7. STORE THE BUDGET TERMS ! ---------------------- ! -if ( nbumod == kmi .and. lbu_enable ) then - if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'CEDS', pths(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rv ) call Budget_store_end( tbudgets(NBUDGET_RV), 'CEDS', prvs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_rc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'CEDS', prcs(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'CEDS', pris(:, :, :) * prhodj(:, :, :) ) - if ( lbudget_sv ) then +if ( nbumod == kmi .and. BUCONF%lbu_enable ) then + if ( BUCONF%lbudget_th ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_TH), 'CEDS', pths(:, :, :) * prhodj(:, :, :) ) + if ( BUCONF%lbudget_rv ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RV), 'CEDS', prvs(:, :, :) * prhodj(:, :, :) ) + if ( BUCONF%lbudget_rc ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RC), 'CEDS', prcs(:, :, :) * prhodj(:, :, :) ) + if ( BUCONF%lbudget_ri ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RI), 'CEDS', pris(:, :, :) * prhodj(:, :, :) ) + if ( BUCONF%lbudget_sv ) then if ( nmom_c.ge.2) & - call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'CEDS', pccs(:, :, :) * prhodj(:, :, :) ) + call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'CEDS', pccs(:, :, :) * prhodj(:, :, :) ) if ( lscav .and. laero_mass ) & - call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_scavmass), 'CEDS', pmas(:, :, :) * prhodj(:, :, :) ) + call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_scavmass), 'CEDS', pmas(:, :, :) * prhodj(:, :, :) ) if ( nmom_c.ge.1 ) then do jl = 1, nmod_ccn idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_free - 1 + jl - call Budget_store_end( tbudgets(idx), 'CEDS', pnfs(:, :, :, jl) * prhodj(:, :, :) ) + call BUDGET_STORE_END_PHY(D, TBUDGETS(idx), 'CEDS', pnfs(:, :, :, jl) * prhodj(:, :, :) ) idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_acti - 1 + jl - call Budget_store_end( tbudgets(idx), 'CEDS', pnas(:, :, :, jl) * prhodj(:, :, :) ) + call BUDGET_STORE_END_PHY(D, TBUDGETS(idx), 'CEDS', pnas(:, :, :, jl) * prhodj(:, :, :) ) end do end if ! if ( nmom_i.ge.2 ) then -! call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CEDS', pcis(:, :, :) * prhodj(:, :, :) ) +! call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CEDS', pcis(:, :, :) * prhodj(:, :, :) ) ! do jl = 1, nmod_ifn ! idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_free - 1 + jl -! call Budget_store_end( tbudgets(idx), 'CEDS', pifs(:, :, :, jl) * prhodj(:, :, :) ) +! call BUDGET_STORE_END_PHY(D, TBUDGETS(idx), 'CEDS', pifs(:, :, :, jl) * prhodj(:, :, :) ) ! idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl - 1 + jl -! call Budget_store_end( tbudgets(idx), 'CEDS', pins(:, :, :, jl) * prhodj(:, :, :) ) +! call BUDGET_STORE_END_PHY(D, TBUDGETS(idx), 'CEDS', pins(:, :, :, jl) * prhodj(:, :, :) ) ! end do ! do jl = 1, nmod_imm ! idx = NBUDGET_SV1 - 1 + nsv_lima_imm_nucl - 1 + jl -! call Budget_store_init( tbudgets(idx), 'CEDS', pnis(:, :, :, jl) * prhodj(:, :, :) ) +! call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'CEDS', pnis(:, :, :, jl) * prhodj(:, :, :) ) ! end do ! end if end if diff --git a/src/common/micro/lima_ccn_activation.F90 b/src/common/micro/lima_ccn_activation.F90 index a391aad68227b1e4a3e5235ab206235cf5c4a932..f94b3ec75a89781a09f9dbfaa096da8b6b373807 100644 --- a/src/common/micro/lima_ccn_activation.F90 +++ b/src/common/micro/lima_ccn_activation.F90 @@ -102,7 +102,7 @@ END MODULE MODI_LIMA_CCN_ACTIVATION USE MODD_CST, ONLY: CST_t !use modd_field, only: TFIELDDATA, TYPEREAL !USE MODD_IO, ONLY: TFILEDATA -USE MODD_LUNIT_n, ONLY: TLUOUT +!USE MODD_LUNIT_n, ONLY: TLUOUT USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT USE MODD_PARAM_LIMA, ONLY: LADJ, LACTIT, NMOD_CCN, XCTMIN, XKHEN_MULTI, XRTMIN, XLIMIT_FACTOR USE MODD_PARAM_LIMA_WARM, ONLY: XWMIN, NAHEN, NHYP, XAHENINTP1, XAHENINTP2, XCSTDCRIT, XHYPF12, & @@ -110,7 +110,7 @@ USE MODD_PARAM_LIMA_WARM, ONLY: XWMIN, NAHEN, NHYP, XAHENINTP1, XAHENINTP2, XCST XLBC, XLBEXC USE MODD_TURB_n, ONLY: LSUBG_COND -USE MODE_IO_FIELD_WRITE, only: IO_Field_write +!USE MODE_IO_FIELD_WRITE, only: IO_Field_write use mode_tools, only: Countjv USE MODI_GAMMA @@ -183,11 +183,11 @@ REAL :: ZS1, ZS2, ZXACC INTEGER :: JMOD INTEGER :: IIB, IIE, IJB, IJE, IKB, IKE ! Physical domain ! -INTEGER :: ILUOUT ! Logical unit of output listing -TYPE(TFIELDMETADATA) :: TZFIELD +!!$INTEGER :: ILUOUT ! Logical unit of output listing +!!$TYPE(TFIELDMETADATA) :: TZFIELD !------------------------------------------------------------------------------- ! -ILUOUT = TLUOUT%NLU +!ILUOUT = TLUOUT%NLU ! !* 1. PREPARE COMPUTATIONS - PACK ! --------------------------- diff --git a/src/common/micro/nrcolss.f90 b/src/common/micro/nrcolss.f90 new file mode 100644 index 0000000000000000000000000000000000000000..d21be2bd3b12000a5c5871c47e9ba5faa22d84f5 --- /dev/null +++ b/src/common/micro/nrcolss.f90 @@ -0,0 +1,316 @@ +!MNH_LIC Copyright 1994-2014 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. +!----------------------------------------------------------------- +!--------------- special set of characters for RCS information +!----------------------------------------------------------------- +! $Source$ $Revision$ +! MASDEV4_7 init 2006/11/23 10:39:56 +!----------------------------------------------------------------- +! ################### + MODULE MODI_NRCOLSS +! ################### +! +INTERFACE +! + SUBROUTINE NRCOLSS( KND, PALPHAS, PNUS, PALPHAR, PNUR, & + PESR, PFALLS, PEXFALLS, PFALLEXPS, PFALLR, PEXFALLR,& + PLBDASMAX, PLBDARMAX, PLBDASMIN, PLBDARMIN, & + PDINFTY, PNRCOLSS, PAG, PBS, PAS ) +! +INTEGER, INTENT(IN) :: KND ! Number of discrete size intervals in DS and DR +! +REAL, INTENT(IN) :: PALPHAS ! First shape parameter of the aggregates + ! size distribution (generalized gamma law) +REAL, INTENT(IN) :: PNUS ! Second shape parameter of the aggregates + ! size distribution (generalized gamma law) +REAL, INTENT(IN) :: PALPHAR ! First shape parameter of the rain + ! size distribution (generalized gamma law) +REAL, INTENT(IN) :: PNUR ! Second shape parameter of the rain + ! size distribution (generalized gamma law) +REAL, INTENT(IN) :: PESR ! Efficiency of aggregates collecting rain +REAL, INTENT(IN) :: PFALLS ! Fall speed constant of aggregates +REAL, INTENT(IN) :: PEXFALLS ! Fall speed exponent of aggregates +REAL, INTENT(IN) :: PFALLEXPS ! Fall speed exponential of aggregates (Thompson 2008) +REAL, INTENT(IN) :: PFALLR ! Fall speed constant of rain +REAL, INTENT(IN) :: PEXFALLR ! Fall speed exponent of rain +REAL, INTENT(IN) :: PLBDASMAX ! Maximun slope of size distribution of aggregates +REAL, INTENT(IN) :: PLBDARMAX ! Maximun slope of size distribution of rain +REAL, INTENT(IN) :: PLBDASMIN ! Minimun slope of size distribution of aggregates +REAL, INTENT(IN) :: PLBDARMIN ! Minimun slope of size distribution of rain +REAL, INTENT(IN) :: PDINFTY ! Factor to define the largest diameter up to + ! which the diameter integration is performed +REAL, INTENT(IN) :: PAG, PBS, PAS +! +REAL, DIMENSION(:,:), INTENT(INOUT) :: PNRCOLSS! Scaled fall speed difference in + ! the mass collection kernel as a + ! function of LAMBDAX and LAMBDAZ +! + END SUBROUTINE NRCOLSS +! +END INTERFACE +! + END MODULE MODI_NRCOLSS +! ######################################################################## + SUBROUTINE NRCOLSS( KND, PALPHAS, PNUS, PALPHAR, PNUR, & + PESR, PFALLS, PEXFALLS, PFALLEXPS, PFALLR, PEXFALLR,& + PLBDASMAX, PLBDARMAX, PLBDASMIN, PLBDARMIN, & + PDINFTY, PNRCOLSS, PAG, PBS, PAS ) +! ######################################################################## +! +! +! +!!**** * - Build up a look-up table containing the scaled fall speed +!! difference between size distributed particles of aggregates and Z +!! +!! +!! PURPOSE +!! ------- +!! The purpose of this routine is to integrate numerically the scaled fall +!! speed difference between aggregates and rain for use in collection +!! kernels FOR CONCENTRATIONS. A first integral of the form +!! +!! infty Dz_max +!! / / +!! |{| } +!! |{| E_xz (Dx+Dz)^2 |cxDx^dx-czDz^dz| n(Dz) dDz} n(Dx) dDx +!! |{| } +!! / / +!! 0 Dz_min +!! +!! is evaluated and normalised by a second integral of the form +!! +!! infty +!! / / +!! |{| } +!! |{| (Dx+Dz)^2 n(Dz) dDz} n(Dx) dDx +!! |{| } +!! / / +!! 0 +!! +!! The result is stored in a two-dimensional array. +!! +!!** METHOD +!! ------ +!! The free parameters of the size distribution function of aggregates and Z +!! (slope parameter LAMBDA) are discretized with a geometrical rate in a +!! specific range +!! LAMBDA = exp( (Log(LAMBDA_max) - Log(LAMBDA_min))/N_interval ) +!! The two above integrals are performed using the trapezoidal scheme. +!! +!! EXTERNAL +!! -------- +!! MODI_GENERAL_GAMMA: Generalized gamma distribution law +!! +!! IMPLICIT ARGUMENTS +!! ------------------ +!! MODD_CST : XPI,XRHOLW +!! MODD_RAIN_ICE_DESCR: XAS,XAS,XBS +!! +!! REFERENCE +!! --------- +!! B.S. Ferrier , 1994 : A Double-Moment Multiple-Phase Four-Class +!! Bulk Ice Scheme,JAS,51,249-280. +!! +!! AUTHOR +!! ------ +!! J.-P. Pinty * Laboratoire d'Aerologie * +!! +!! MODIFICATIONS +!! ------------- +!! Original 8/11/95 +!! M. Taufour 03/2022 Adapted from rrcolss for concentration +!! J. Wurtz 03/2022 New snow characteristics +!! +!------------------------------------------------------------------------------- +! +! +!* 0. DECLARATIONS +! ------------ +! +! +USE MODI_GENERAL_GAMMA +! +USE MODD_CST +USE MODD_RAIN_ICE_DESCR +! +IMPLICIT NONE +! +! +!* 0.1 Declarations of dummy arguments +! ------------------------------- +! +! +INTEGER, INTENT(IN) :: KND ! Number of discrete size intervals in DS and DR +! +REAL, INTENT(IN) :: PALPHAS ! First shape parameter of the aggregates + ! size distribution (generalized gamma law) +REAL, INTENT(IN) :: PNUS ! Second shape parameter of the aggregates + ! size distribution (generalized gamma law) +REAL, INTENT(IN) :: PALPHAR ! First shape parameter of the rain + ! size distribution (generalized gamma law) +REAL, INTENT(IN) :: PNUR ! Second shape parameter of the rain + ! size distribution (generalized gamma law) +REAL, INTENT(IN) :: PESR ! Efficiency of aggregates collecting rain +REAL, INTENT(IN) :: PFALLS ! Fall speed constant of aggregates +REAL, INTENT(IN) :: PEXFALLS ! Fall speed exponent of aggregates +REAL, INTENT(IN) :: PFALLEXPS ! Fall speed exponential of aggregates (Thompson 2008) +REAL, INTENT(IN) :: PFALLR ! Fall speed constant of rain +REAL, INTENT(IN) :: PEXFALLR ! Fall speed exponent of rain +REAL, INTENT(IN) :: PLBDASMAX ! Maximun slope of size distribution of aggregates +REAL, INTENT(IN) :: PLBDARMAX ! Maximun slope of size distribution of rain +REAL, INTENT(IN) :: PLBDASMIN ! Minimun slope of size distribution of aggregates +REAL, INTENT(IN) :: PLBDARMIN ! Minimun slope of size distribution of rain +REAL, INTENT(IN) :: PDINFTY ! Factor to define the largest diameter up to + ! which the diameter integration is performed +REAL, INTENT(IN) :: PAG, PBS, PAS +! +REAL, DIMENSION(:,:), INTENT(INOUT) :: PNRCOLSS! Scaled fall speed difference in + ! the mass collection kernel as a + ! function of LAMBDAX and LAMBDAZ +! +! +!* 0.2 Declarations of local variables +! ------------------------------- +! +! +INTEGER :: JLBDAS ! Slope index of the size distribution of aggregates +INTEGER :: JLBDAR ! Slope index of the size distribution of rain +INTEGER :: JDS ! Diameter index of a particle of aggregates +INTEGER :: JDR ! Diameter index of a particle of rain +! +INTEGER :: INR ! Number of diameter step for the partial integration +! +! +REAL :: ZLBDAS ! Current slope parameter LAMBDA of aggregates +REAL :: ZLBDAR ! Current slope parameter LAMBDA of rain +REAL :: ZDLBDAS ! Growth rate of the slope parameter LAMBDA of aggregates +REAL :: ZDLBDAR ! Growth rate of the slope parameter LAMBDA of rain +REAL :: ZDDS ! Integration step of the diameter of aggregates +REAL :: ZDDSCALR! Integration step of the diameter of rain (scaling integral) +REAL :: ZDDCOLLR! Integration step of the diameter of rain (fallspe integral) +REAL :: ZDS ! Current diameter of the particle aggregates +REAL :: ZDR ! Current diameter of the rain +REAL :: ZDRMAX ! Maximal diameter of the raindrops where the integration ends +REAL :: ZCOLLR ! Single integral of the mass weighted fall speed difference + ! over the spectrum of rain +REAL :: ZCOLLDRMAX ! Maximum ending point for the partial integral +REAL :: ZCOLLSR ! Double integral of the mass weighted fall speed difference + ! over the spectra of aggregates and rain +REAL :: ZSCALR ! Single integral of the scaling factor over + ! the spectrum of rain +REAL :: ZSCALSR ! Double integral of the scaling factor over + ! the spectra of aggregates and rain +REAL :: ZFUNC ! Ancillary function +REAL :: ZCST1 +! +! +!------------------------------------------------------------------------------- +! +! +!* 1 COMPUTE THE SCALED VELOCITY DIFFERENCE IN THE MASS +!* COLLECTION KERNEL, +! ------------------------------------------------- +! +! +! +!* 1.0 Initialization +! +PNRCOLSS(:,:) = 0.0 +ZCST1 = (3.0/XPI)/XRHOLW +! +!* 1.1 Compute the growth rate of the slope factors LAMBDA +! +ZDLBDAS = EXP( LOG(PLBDASMAX/PLBDASMIN)/REAL(SIZE(PNRCOLSS(:,:),1)-1) ) +ZDLBDAR = EXP( LOG(PLBDARMAX/PLBDARMIN)/REAL(SIZE(PNRCOLSS(:,:),2)-1) ) +! +!* 1.2 Scan the slope factors LAMBDAX and LAMBDAZ +! +DO JLBDAS = 1,SIZE(PNRCOLSS(:,:),1) + ZLBDAS = PLBDASMIN * ZDLBDAS ** (JLBDAS-1) +! +!* 1.3 Compute the diameter steps +! + ZDDS = PDINFTY / (REAL(KND) * ZLBDAS) + DO JLBDAR = 1,SIZE(PNRCOLSS(:,:),2) + ZLBDAR = PLBDARMIN * ZDLBDAR ** (JLBDAR-1) +! +!* 1.4 Initialize the collection integrals +! + ZSCALSR = 0.0 + ZCOLLSR = 0.0 +! +!* 1.5 Compute the diameter steps +! + ZDDSCALR = PDINFTY / (REAL(KND) * ZLBDAR) +! +!* 1.6 Scan over the diameters DS and DR +! + DO JDS = 1,KND-1 + ZDS = ZDDS * REAL(JDS) + ZSCALR = 0.0 + ZCOLLR = 0.0 + DO JDR = 1,KND-1 + ZDR = ZDDSCALR * REAL(JDR) +! +!* 1.7 Compute the normalization factor by integration over the +! dimensional spectrum of rain +! + ZSCALR = ZSCALR + (ZDS+ZDR)**2 * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDR) + END DO +! +!* 1.8 Compute the scaled fall speed difference by partial +! integration over the dimensional spectrum of rain +! + ZFUNC = PAG - PAS*ZDS**(PBS-3.0) ! approximate limit is Ds=240 microns + IF( ZFUNC>0.0 ) THEN + ZDRMAX = ZDS*( ZCST1*ZFUNC )**0.3333333 + ELSE + ZDRMAX = PDINFTY / ZLBDAR + END IF + IF( ZDS>1.0E-4 ) THEN ! allow computation if Ds>100 microns + ! corresponding to a maximal density of the aggregates of XRHOLW + IF( ZDRMAX >= 0.5*ZDDSCALR ) THEN + INR = CEILING( ZDRMAX/ZDDSCALR ) + ZDDCOLLR = ZDRMAX / REAL(INR) + IF (INR>=KND ) THEN + INR = KND + ZDDCOLLR = ZDDSCALR + END IF + DO JDR = 1,INR-1 + ZDR = ZDDCOLLR * REAL(JDR) + ZCOLLR = ZCOLLR + (ZDS+ZDR)**2 & + * PESR * ABS(PFALLS*ZDS**PEXFALLS * EXP(-(PFALLEXPS*ZDS)**PALPHAS)-PFALLR*ZDR**PEXFALLR) & + * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDR) + END DO + ZCOLLDRMAX = (ZDS+ZDRMAX)**2 & + * PESR * ABS(PFALLS*ZDS**PEXFALLS* EXP(-(PFALLEXPS*ZDS)**PALPHAS)-PFALLR*ZDRMAX**PEXFALLR) & + * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDRMAX) + ZCOLLR = (ZCOLLR + 0.5*ZCOLLDRMAX)*(ZDDCOLLR/ZDDSCALR) +! +!* 1.9 Compute the normalization factor by integration over the +! dimensional spectrum of aggregates +! + ZFUNC = GENERAL_GAMMA(PALPHAS,PNUS,ZLBDAS,ZDS) + ZSCALSR = ZSCALSR + ZSCALR * ZFUNC +! +!* 1.10 Compute the scaled fall speed difference by integration over +! the dimensional spectrum of aggregates +! + ZCOLLSR = ZCOLLSR + ZCOLLR * ZFUNC + END IF +! +! Otherwise ZDRMAX = 0.0 so the density of the graupel cannot be reached +! and so PRRCOLSS(JLBDAS,JLBDAR) = 0.0 ! +! + END IF + END DO +! +!* 1.11 Scale the fall speed difference +! + IF( ZSCALSR>0.0 ) PNRCOLSS(JLBDAS,JLBDAR) = ZCOLLSR / ZSCALSR + END DO +END DO +! +END SUBROUTINE NRCOLSS diff --git a/src/common/micro/nscolrg.f90 b/src/common/micro/nscolrg.f90 new file mode 100644 index 0000000000000000000000000000000000000000..790a01f76a32fef7603ff99d7ad1339a657fbb80 --- /dev/null +++ b/src/common/micro/nscolrg.f90 @@ -0,0 +1,317 @@ +!MNH_LIC Copyright 1994-2014 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. +!----------------------------------------------------------------- +!--------------- special set of characters for RCS information +!----------------------------------------------------------------- +! $Source$ $Revision$ +! MASDEV4_7 init 2006/11/23 10:43:02 +!----------------------------------------------------------------- +! ################### + MODULE MODI_NSCOLRG +! ################### +! +INTERFACE +! + SUBROUTINE NSCOLRG( KND, PALPHAS, PZNUS, PALPHAR, PNUR, & + PESR, PFALLS, PEXFALLS, PFALLEXPS, PFALLR, PEXFALLR,& + PLBDASMAX, PLBDARMAX, PLBDASMIN, PLBDARMIN, & + PDINFTY, PNSCOLRG,PAG, PBS, PAS ) +! +INTEGER, INTENT(IN) :: KND ! Number of discrete size intervals in DS and DR +! +REAL, INTENT(IN) :: PALPHAS ! First shape parameter of the aggregates + ! size distribution (generalized gamma law) +REAL, INTENT(IN) :: PZNUS ! Second shape parameter of the aggregates + ! size distribution (generalized gamma law) +REAL, INTENT(IN) :: PALPHAR ! First shape parameter of the rain + ! size distribution (generalized gamma law) +REAL, INTENT(IN) :: PNUR ! Second shape parameter of the rain + ! size distribution (generalized gamma law) +REAL, INTENT(IN) :: PESR ! Efficiency of the aggregates collecting rain +REAL, INTENT(IN) :: PFALLS ! Fall speed constant of the aggregates +REAL, INTENT(IN) :: PEXFALLS ! Fall speed exponent of the aggregates +REAL, INTENT(IN) :: PFALLEXPS ! Fall speed exponential constant of the aggregates +REAL, INTENT(IN) :: PFALLR ! Fall speed constant of rain +REAL, INTENT(IN) :: PEXFALLR ! Fall speed exponent of rain +REAL, INTENT(IN) :: PLBDASMAX ! Maximun slope of size distribution of the aggregates +REAL, INTENT(IN) :: PLBDARMAX ! Maximun slope of size distribution of rain +REAL, INTENT(IN) :: PLBDASMIN ! Minimun slope of size distribution of the aggregates +REAL, INTENT(IN) :: PLBDARMIN ! Minimun slope of size distribution of rain +REAL, INTENT(IN) :: PDINFTY ! Factor to define the largest diameter up to + ! which the diameter integration is performed +REAL, INTENT(IN) :: PAG, PBS, PAS +! +REAL, DIMENSION(:,:), INTENT(INOUT) :: PNSCOLRG! Scaled fall speed difference in + ! the mass collection kernel as a + ! function of LAMBDAX and LAMBDAZ +! + END SUBROUTINE NSCOLRG +! +END INTERFACE +! + END MODULE MODI_NSCOLRG +! ######################################################################## + SUBROUTINE NSCOLRG( KND, PALPHAS, PZNUS, PALPHAR, PNUR, & + PESR, PFALLS, PEXFALLS, PFALLEXPS, PFALLR, PEXFALLR,& + PLBDASMAX, PLBDARMAX, PLBDASMIN, PLBDARMIN, & + PDINFTY, PNSCOLRG,PAG, PBS, PAS ) +! ######################################################################## +! +! +! +!!**** * - Build up a look-up table containing the scaled fall speed +!! difference between size distributed particles of the aggregates and Z +!! +!! +!! PURPOSE +!! ------- +!! The purpose of this routine is to integrate numerically the scaled fall +!! speed difference between aggregates and rain for use in collection +!! kernels. A first integral of the form +!! +!! infty Dz_max +!! / / +!! |{| } +!! |{| E_xz (Dx+Dz)^2 |cxDx^dx-czDz^dz| n(Dz) dDz} n(Dx) dDx +!! |{| } +!! / / +!! 0 Dz_min +!! +!! is evaluated and normalised by a second integral of the form +!! +!! infty +!! / / +!! |{| } +!! |{| (Dx+Dz)^2 n(Dz) dDz} n(Dx) dDx +!! |{| } +!! / / +!! 0 +!! +!! The result is stored in a two-dimensional array. +!! +!!** METHOD +!! ------ +!! The free parameters of the size distribution function of the aggregates +!! and Z (slope parameter LAMBDA) are discretized with a geometrical rate +!! in a specific range +!! LAMBDA = exp( (Log(LAMBDA_max) - Log(LAMBDA_min))/N_interval ) +!! The two above integrals are performed using the trapezoidal scheme. +!! +!! EXTERNAL +!! -------- +!! MODI_GENERAL_GAMMA: Generalized gamma distribution law +!! +!! IMPLICIT ARGUMENTS +!! ------------------ +!! MODD_CST : XPI,XRHOLW +!! MODD_RAIN_ICE_DESCR: XAS,XAS,XBS +!! +!! REFERENCE +!! --------- +!! B.S. Ferrier , 1994 : A Double-Moment Multiple-Phase Four-Class +!! Bulk Ice Scheme,JAS,51,249-280. +!! +!! AUTHOR +!! ------ +!! J.-P. Pinty * Laboratoire d'Aerologie * +!! +!! MODIFICATIONS +!! ------------- +!! Original 8/11/95 +!! M. Taufour 03/2022 Adapted from rscolrg for concentration +!! J. Wurtz 03/2022 New snow characteristics +!! +!------------------------------------------------------------------------------- +! +! +!* 0. DECLARATIONS +! ------------ +! +USE MODI_GENERAL_GAMMA +! +USE MODD_CST +USE MODD_RAIN_ICE_DESCR +! +IMPLICIT NONE +! +!* 0.1 Declarations of dummy arguments +! ------------------------------- +! +! +INTEGER, INTENT(IN) :: KND ! Number of discrete size intervals in DS and DR +! +REAL, INTENT(IN) :: PALPHAS ! First shape parameter of the aggregates + ! size distribution (generalized gamma law) +REAL, INTENT(IN) :: PZNUS ! Second shape parameter of the aggregates + ! size distribution (generalized gamma law) +REAL, INTENT(IN) :: PALPHAR ! First shape parameter of the rain + ! size distribution (generalized gamma law) +REAL, INTENT(IN) :: PNUR ! Second shape parameter of the rain + ! size distribution (generalized gamma law) +REAL, INTENT(IN) :: PESR ! Efficiency of the aggregates collecting rain +REAL, INTENT(IN) :: PFALLS ! Fall speed constant of the aggregates +REAL, INTENT(IN) :: PEXFALLS ! Fall speed exponent of the aggregates +REAL, INTENT(IN) :: PFALLEXPS ! Fall speed exponential constant of the aggregates +REAL, INTENT(IN) :: PFALLR ! Fall speed constant of rain +REAL, INTENT(IN) :: PEXFALLR ! Fall speed exponent of rain +REAL, INTENT(IN) :: PLBDASMAX ! Maximun slope of size distribution of the aggregates +REAL, INTENT(IN) :: PLBDARMAX ! Maximun slope of size distribution of rain +REAL, INTENT(IN) :: PLBDASMIN ! Minimun slope of size distribution of the aggregates +REAL, INTENT(IN) :: PLBDARMIN ! Minimun slope of size distribution of rain +REAL, INTENT(IN) :: PDINFTY ! Factor to define the largest diameter up to + ! which the diameter integration is performed +REAL, INTENT(IN) :: PAG, PBS, PAS +! +REAL, DIMENSION(:,:), INTENT(INOUT) :: PNSCOLRG! Scaled fall speed difference in + ! the mass collection kernel as a + ! function of LAMBDAX and LAMBDAZ +! +! +!* 0.2 Declarations of local variables +! ------------------------------- +! +! +INTEGER :: JLBDAS ! Slope index of the size distribution of the aggregates +INTEGER :: JLBDAR ! Slope index of the size distribution of rain +INTEGER :: JDS ! Diameter index of a particle of the aggregates +INTEGER :: JDR ! Diameter index of a particle of rain +! +INTEGER :: INR ! Number of diameter step for the partial integration +! +REAL :: ZLBDAS ! Current slope parameter LAMBDA of the aggregates +REAL :: ZLBDAR ! Current slope parameter LAMBDA of rain +REAL :: ZDLBDAS ! Growth rate of the slope parameter LAMBDA of the aggregates +REAL :: ZDLBDAR ! Growth rate of the slope parameter LAMBDA of rain +REAL :: ZDDS ! Integration step of the diameter of the aggregates +REAL :: ZDDSCALR! Integration step of the diameter of rain (scaling integral) +REAL :: ZDDCOLLR! Integration step of the diameter of rain (fallspe integral) +REAL :: ZDS ! Current diameter of the particle aggregates +REAL :: ZDR ! Current diameter of the raindrops +REAL :: ZDRMIN ! Minimal diameter of the raindrops where the integration starts +REAL :: ZDRMAX ! Maximal diameter of the raindrops where the integration ends +REAL :: ZCOLLR ! Single integral of the mass weighted fall speed difference + ! over the spectrum of rain +REAL :: ZCOLLDRMIN ! Minimum ending point for the partial integral +REAL :: ZCOLLSR ! Double integral of the mass weighted fall speed difference + ! over the spectra of the aggregates and rain +REAL :: ZSCALR ! Single integral of the scaling factor over + ! the spectrum of rain +REAL :: ZSCALSR ! Double integral of the scaling factor over + ! the spectra of the aggregates and rain +REAL :: ZFUNC ! Ancillary function +REAL :: ZCST1 +! +! +!------------------------------------------------------------------------------- +! +! +!* 1 COMPUTE THE SCALED VELOCITY DIFFERENCE IN THE MASS +!* COLLECTION KERNEL, +! ------------------------------------------------- +! +! +!* 1.0 Initialization +! +PNSCOLRG(:,:) = 0.0 +ZCST1 = (3.0/XPI)/XRHOLW +! +!* 1.1 Compute the growth rate of the slope factors LAMBDA +! +ZDLBDAR = EXP( LOG(PLBDARMAX/PLBDARMIN)/REAL(SIZE(PNSCOLRG(:,:),1)-1) ) +ZDLBDAS = EXP( LOG(PLBDASMAX/PLBDASMIN)/REAL(SIZE(PNSCOLRG(:,:),2)-1) ) +! +!* 1.2 Scan the slope factors LAMBDAX and LAMBDAZ +! +DO JLBDAR = 1,SIZE(PNSCOLRG(:,:),1) + ZLBDAR = PLBDARMIN * ZDLBDAR ** (JLBDAR-1) + ZDRMAX = PDINFTY / ZLBDAR +! +!* 1.3 Compute the diameter steps +! + ZDDSCALR = PDINFTY / (REAL(KND) * ZLBDAR) + DO JLBDAS = 1,SIZE(PNSCOLRG(:,:),2) + ZLBDAS = PLBDASMIN * ZDLBDAS ** (JLBDAS-1) +! +!* 1.4 Initialize the collection integrals +! + ZSCALSR = 0.0 + ZCOLLSR = 0.0 +! +!* 1.5 Compute the diameter steps +! + ZDDS = PDINFTY / (REAL(KND) * ZLBDAS) +! +!* 1.6 Scan over the diameters DS and DR +! + DO JDS = 1,KND-1 + ZDS = ZDDS * REAL(JDS) + ZSCALR = 0.0 + ZCOLLR = 0.0 + DO JDR = 1,KND-1 + ZDR = ZDDSCALR * REAL(JDR) +! +!* 1.7 Compute the normalization factor by integration over the +! dimensional spectrum of rain +! + ZSCALR = ZSCALR + (ZDS+ZDR)**2 * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDR) + END DO +! +!* 1.8 Compute the scaled fall speed difference by partial +! integration over the dimensional spectrum of rain +! + ZFUNC = PAG - PAS*ZDS**(PBS-3.0) ! approximate limit is Ds=240 microns + IF( ZFUNC>0.0 ) THEN + ZDRMIN = ZDS*( ZCST1*ZFUNC )**0.3333333 + ELSE + ZDRMIN = 0.0 + END IF + IF( ZDS>1.0E-4 ) THEN ! allow computation if Ds>100 microns + ! corresponding to a maximal density of the aggregates of XRHOLW + IF( (ZDRMAX-ZDRMIN) >= 0.5*ZDDSCALR ) THEN + INR = CEILING( (ZDRMAX-ZDRMIN)/ZDDSCALR ) + ZDDCOLLR = (ZDRMAX-ZDRMIN) / REAL(INR) + DO JDR = 1,INR-1 + ZDR = ZDDCOLLR * REAL(JDR) + ZDRMIN + ZCOLLR = ZCOLLR + (ZDS+ZDR)**2 & + * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDR) & + * PESR * ABS(PFALLS*ZDS**PEXFALLS*EXP(-(ZDS*PFALLEXPS)**PALPHAS)-PFALLR*ZDR**PEXFALLR) + END DO + IF( ZDRMIN>0.0 ) THEN + ZCOLLDRMIN = (ZDS+ZDRMIN)**2 & + * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDRMIN) & + * PESR * ABS(PFALLS*ZDS**PEXFALLS*EXP(-(ZDS*PFALLEXPS)**PALPHAS)-PFALLR*ZDRMIN**PEXFALLR) + ELSE + ZCOLLDRMIN = 0.0 + END IF + ZCOLLR = (ZCOLLR + 0.5*ZCOLLDRMIN)*(ZDDCOLLR/ZDDSCALR) +! +!* 1.9 Compute the normalization factor by integration over the +! dimensional spectrum of the aggregates +! + ZFUNC = GENERAL_GAMMA(PALPHAS,PZNUS,ZLBDAS,ZDS) ! MTaufour : !*(ZDS**PEXMASSS) + ZSCALSR = ZSCALSR + ZSCALR * ZFUNC +! +!* 1.10 Compute the scaled fall speed difference by integration over +! the dimensional spectrum of the aggregates +! + ZCOLLSR = ZCOLLSR + ZCOLLR * ZFUNC +! +! Otherwise ZDRMIN>ZDRMAX so PRRCOLSS(JLBDAS,JLBDAR) = 0.0 ! +! + END IF +! +! Otherwise ZDRMAX = 0.0 so the density of the graupel cannot be reached +! and so PRRCOLSS(JLBDAS,JLBDAR) = 0.0 ! +! + END IF + END DO +! +!* 1.10 Scale the fall speed difference +! + IF( ZSCALSR>0.0 ) PNSCOLRG(JLBDAR,JLBDAS) = ZCOLLSR / ZSCALSR + END DO +END DO +! +END SUBROUTINE NSCOLRG diff --git a/src/common/micro/nzcolx.f90 b/src/common/micro/nzcolx.f90 new file mode 100644 index 0000000000000000000000000000000000000000..e4493c2e60f617e81998e2466d534e887891feaf --- /dev/null +++ b/src/common/micro/nzcolx.f90 @@ -0,0 +1,278 @@ +!MNH_LIC Copyright 1994-2014 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. +!----------------------------------------------------------------- +!--------------- special set of characters for RCS information +!----------------------------------------------------------------- +! $Source$ $Revision$ +! MASDEV4_7 init 2006/05/18 13:07:25 +!----------------------------------------------------------------- +! ################## + MODULE MODI_NZCOLX +! ################## +! +INTERFACE +! + SUBROUTINE NZCOLX( KND, PALPHAX, PNUX, PALPHAZ, PNUZ, & + PEXZ, PFALLX, PEXFALLX, PFALLEXPX, & + PFALLZ, PEXFALLZ, PFALLEXPZ, & + PLBDAXMAX, PLBDAZMAX, PLBDAXMIN, PLBDAZMIN, & + PDINFTY, PNZCOLX ) +! +INTEGER, INTENT(IN) :: KND ! Number of discrete size intervals in DX and DZ +! +! +REAL, INTENT(IN) :: PALPHAX ! First shape parameter of the specy X + ! size distribution (generalized gamma law) +REAL, INTENT(IN) :: PNUX ! Second shape parameter of the specy X + ! size distribution (generalized gamma law) +REAL, INTENT(IN) :: PALPHAZ ! First shape parameter of the specy Z + ! size distribution (generalized gamma law) +REAL, INTENT(IN) :: PNUZ ! Second shape parameter of the specy Z +REAL, INTENT(IN) :: PEXZ ! Efficiency of specy X collecting specy Z +REAL, INTENT(IN) :: PFALLX ! Fall speed constant of specy X +REAL, INTENT(IN) :: PEXFALLX ! Fall speed exponent of specy X +REAL, INTENT(IN) :: PFALLEXPX ! Fall speed exponential constant of specy X +REAL, INTENT(IN) :: PFALLZ ! Fall speed constant of specy Z +REAL, INTENT(IN) :: PEXFALLZ ! Fall speed exponent of specy Z +REAL, INTENT(IN) :: PFALLEXPZ ! Fall speed exponential constant of specy Z +REAL, INTENT(IN) :: PLBDAXMAX ! Maximun slope of size distribution of specy X +REAL, INTENT(IN) :: PLBDAZMAX ! Maximun slope of size distribution of specy Z +REAL, INTENT(IN) :: PLBDAXMIN ! Minimun slope of size distribution of specy X +REAL, INTENT(IN) :: PLBDAZMIN ! Minimun slope of size distribution of specy Z +REAL, INTENT(IN) :: PDINFTY ! Factor to define the largest diameter up to + ! which the diameter integration is performed +! +REAL, DIMENSION(:,:), INTENT(INOUT) :: PNZCOLX ! Scaled fall speed difference in + ! the mass collection kernel as a + ! function of LAMBDAX and LAMBDAZ +! + END SUBROUTINE NZCOLX +! +END INTERFACE +! + END MODULE MODI_NZCOLX +! ################################################################ + SUBROUTINE NZCOLX( KND, PALPHAX, PNUX, PALPHAZ, PNUZ, & + PEXZ, PFALLX, PEXFALLX, PFALLEXPX, & + PFALLZ, PEXFALLZ, PFALLEXPZ, & + PLBDAXMAX, PLBDAZMAX, PLBDAXMIN, PLBDAZMIN, & + PDINFTY, PNZCOLX ) +! ################################################################ +! +! +! +!!**** * - Build up a look-up table containing the scaled fall speed +!! difference between size distributed particles of specy X and Z +!! +!! +!! PURPOSE +!! ------- +!! The purpose of this routine is to integrate numerically the scaled fall +!! speed difference between specy X and specy Z for use in collection +!! kernels. A first integral of the form +!! +!! infty +!! / / +!! |{| } +!! |{| E_xz (Dx+Dz)^2 |cxDx^dx-czDz^dz| g(Dz) dDz} g(Dx) dDx +!! |{| } +!! / / +!! 0 +!! +!! is evaluated and normalised by a second integral of the form +!! +!! infty +!! / / +!! |{| } +!! |{| (Dx+Dz)^2 g(Dz) dDz} g(Dx) dDx +!! |{| } +!! / / +!! 0 +!! +!! where E_xz is a collection efficiency, g(D) is the generalized Gamma +!! distribution law. The 'infty' diameter is defined according to the +!! current value of the Lbda that is D_x=PDINFTY/Lbda_x or +!! D_z=PINFTY/Lbda_z. +!! The result is stored in a two-dimensional array. +!! +!!** METHOD +!! ------ +!! The free parameters of the size distribution function of specy X and Z +!! (slope parameter LAMBDA) are discretized with a geometrical rate in a +!! specific range +!! LAMBDA = exp( (Log(LAMBDA_max) - Log(LAMBDA_min))/N_interval ) +!! The two above integrals are performed using the trapezoidal scheme and +!! the [0,infty] interval is discretized over KND values of D_x or D_z. +!! +!! EXTERNAL +!! -------- +!! MODI_GENERAL_GAMMA: Generalized gamma distribution law +!! +!! IMPLICIT ARGUMENTS +!! ------------------ +!! None +!! +!! REFERENCE +!! --------- +!! B.S. Ferrier , 1994 : A Double-Moment Multiple-Phase Four-Class +!! Bulk Ice Scheme,JAS,51,249-280. +!! +!! AUTHOR +!! ------ +!! J.-P. Pinty * Laboratoire d'Aerologie * +!! +!! MODIFICATIONS +!! ------------- +!! Original 8/11/95 +!! M. Taufour 03/2022: adapted from rzcolx for concentration +!! J. Wurtz 03/2022: new snow characteristics +!! +!------------------------------------------------------------------------------- +! +! +!* 0. DECLARATIONS +! ------------ +! +USE MODI_GENERAL_GAMMA +! +IMPLICIT NONE +! +! +!* 0.1 Declarations of dummy arguments +! ------------------------------- +! +! +INTEGER, INTENT(IN) :: KND ! Number of discrete size intervals in DX and DZ +! +! +REAL, INTENT(IN) :: PALPHAX ! First shape parameter of the specy X + ! size distribution (generalized gamma law) +REAL, INTENT(IN) :: PNUX ! Second shape parameter of the specy X + ! size distribution (generalized gamma law) +REAL, INTENT(IN) :: PALPHAZ ! First shape parameter of the specy Z + ! size distribution (generalized gamma law) +REAL, INTENT(IN) :: PNUZ ! Second shape parameter of the specy Z + ! size distribution (generalized gamma law) +REAL, INTENT(IN) :: PEXZ ! Efficiency of specy X collecting specy Z +REAL, INTENT(IN) :: PFALLX ! Fall speed constant of specy X +REAL, INTENT(IN) :: PEXFALLX ! Fall speed exponent of specy X +REAL, INTENT(IN) :: PFALLEXPX ! Fall speed exponential constant of specy X +REAL, INTENT(IN) :: PFALLZ ! Fall speed constant of specy Z +REAL, INTENT(IN) :: PEXFALLZ ! Fall speed exponent of specy Z +REAL, INTENT(IN) :: PFALLEXPZ ! Fall speed exponential constant of specy Z +REAL, INTENT(IN) :: PLBDAXMAX ! Maximun slope of size distribution of specy X +REAL, INTENT(IN) :: PLBDAZMAX ! Maximun slope of size distribution of specy Z +REAL, INTENT(IN) :: PLBDAXMIN ! Minimun slope of size distribution of specy X +REAL, INTENT(IN) :: PLBDAZMIN ! Minimun slope of size distribution of specy Z +REAL, INTENT(IN) :: PDINFTY ! Factor to define the largest diameter up to + ! which the diameter integration is performed +! +REAL, DIMENSION(:,:), INTENT(INOUT) :: PNZCOLX ! Scaled fall speed difference in + ! the mass collection kernel as a + ! function of LAMBDAX and LAMBDAZ +! +! +!* 0.2 Declarations of local variables +! ------------------------------- +! +! +INTEGER :: JLBDAX ! Slope index of the size distribution of specy X +INTEGER :: JLBDAZ ! Slope index of the size distribution of specy Z +INTEGER :: JDX ! Diameter index of a particle of specy X +INTEGER :: JDZ ! Diameter index of a particle of specy Z +! +! +REAL :: ZLBDAX ! Current slope parameter LAMBDA of specy X +REAL :: ZLBDAZ ! Current slope parameter LAMBDA of specy Z +REAL :: ZDLBDAX ! Growth rate of the slope parameter LAMBDA of specy X +REAL :: ZDLBDAZ ! Growth rate of the slope parameter LAMBDA of specy Z +REAL :: ZDDX ! Integration step of the diameter of specy X +REAL :: ZDDZ ! Integration step of the diameter of specy Z +REAL :: ZDX ! Current diameter of the particle specy X +REAL :: ZDZ ! Current diameter of the particle specy Z +REAL :: ZCOLLZ ! Single integral of the mass weighted fall speed difference + ! over the spectrum of specy Z +REAL :: ZCOLLXZ ! Double integral of the mass weighted fall speed difference + ! over the spectra of specy X and specy Z +REAL :: ZSCALZ ! Single integral of the scaling factor over + ! the spectrum of specy Z +REAL :: ZSCALXZ ! Double integral of the scaling factor over + ! the spectra of specy X and specy Z +REAL :: ZFUNC ! Ancillary function +! +! +!------------------------------------------------------------------------------- +! +! +!* 1 COMPUTE THE SCALED VELOCITZ DIFFERENCE IN THE MASS +!* COLLECTION KERNEL, +! ------------------------------------------------- +! +! +! +!* 1.1 Compute the growth rate of the slope factors LAMBDA +! +ZDLBDAX = EXP( LOG(PLBDAXMAX/PLBDAXMIN)/REAL(SIZE(PNZCOLX(:,:),1)-1) ) +ZDLBDAZ = EXP( LOG(PLBDAZMAX/PLBDAZMIN)/REAL(SIZE(PNZCOLX(:,:),2)-1) ) +! +!* 1.2 Scan the slope factors LAMBDAX and LAMBDAZ +! +DO JLBDAX = 1,SIZE(PNZCOLX(:,:),1) + ZLBDAX = PLBDAXMIN * ZDLBDAX ** (JLBDAX-1) + DO JLBDAZ = 1,SIZE(PNZCOLX(:,:),2) + ZLBDAZ = PLBDAZMIN * ZDLBDAZ ** (JLBDAZ-1) +! +!* 1.3 Initialize the collection integrals +! + ZSCALXZ = 0.0 + ZCOLLXZ = 0.0 +! +!* 1.4 Compute the diameter steps +! + ZDDX = PDINFTY / (REAL(KND) * ZLBDAX) + ZDDZ = PDINFTY / (REAL(KND) * ZLBDAZ) +! +!* 1.5 Scan over the diameters DX and DZ +! + DO JDX = 1,KND-1 + ZDX = ZDDX * REAL(JDX) +! + ZSCALZ = 0.0 + ZCOLLZ = 0.0 + DO JDZ = 1,KND-1 + ZDZ = ZDDZ * REAL(JDZ) +! +!* 1.6 Compute the normalization factor by integration over the +! dimensional spectrum of specy Z +! + ZFUNC = (ZDX+ZDZ)**2 * GENERAL_GAMMA(PALPHAZ,PNUZ,ZLBDAZ,ZDZ) + ZSCALZ = ZSCALZ + ZFUNC +! +!* 1.7 Compute the scaled fall speed difference by integration over +! the dimensional spectrum of specy Z +! + ZCOLLZ = ZCOLLZ + ZFUNC * PEXZ * ABS( PFALLX*ZDX**PEXFALLX * EXP(-(ZDX*PFALLEXPX)**PALPHAX) & + - PFALLZ*ZDZ**PEXFALLZ * EXP(-(ZDZ*PFALLEXPZ)**PALPHAZ)) + END DO +! +!* 1.8 Compute the normalization factor by integration over the +! dimensional spectrum of specy X +! + ZFUNC = GENERAL_GAMMA(PALPHAX,PNUX,ZLBDAX,ZDX) + ZSCALXZ = ZSCALXZ + ZSCALZ * ZFUNC +! +!* 1.9 Compute the scaled fall speed difference by integration over +! the dimensional spectrum of specy X +! + ZCOLLXZ = ZCOLLXZ + ZCOLLZ * ZFUNC + END DO +! +!* 1.10 Scale the fall speed difference +! + PNZCOLX(JLBDAX,JLBDAZ) = ZCOLLXZ / ZSCALXZ + END DO +END DO +! +END SUBROUTINE NZCOLX