diff --git a/src/arome/ext/aro_adjust_lima.F90 b/src/arome/ext/aro_adjust_lima.F90 index 2efdc62daa500bcc7b0d75bbe6c2786eb7517680..755dc0360f121b801602e784fe2b45ad8774317f 100644 --- a/src/arome/ext/aro_adjust_lima.F90 +++ b/src/arome/ext/aro_adjust_lima.F90 @@ -163,16 +163,6 @@ LOGICAL, INTENT(IN) :: LLIMAINIT ! !* 0.2 Declarations of local variables : -CHARACTER(LEN=4) :: HCLOUD ! kind of cloud - ! paramerization - -INTEGER :: KMI ! Model index -CHARACTER(LEN=4) :: HFMFILE ! Name of the output FM-file -CHARACTER(LEN=4) :: HLUOUT ! Output-listing name for - ! model n -CHARACTER*4 :: HRAD ! Radiation scheme name -CHARACTER*4 :: HTURBDIM ! Dimensionality of the - ! turbulence scheme ! INTEGER :: JRR ! Loop index for the moist and scalar variables ! @@ -198,13 +188,6 @@ TYPE(DIMPHYEX_t) :: YLDIMPHYEX REAL(KIND=JPRB) :: ZHOOK_HANDLE IF (LHOOK) CALL DR_HOOK('ARO_ADJUST_LIMA',0,ZHOOK_HANDLE) -HCLOUD='LIMA' -HFMFILE=' ' -HLUOUT= ' ' -HRAD='NONE' -HTURBDIM='1DIM' -KMI=1 - CALL FILL_DIMPHYEX(YLDIMPHYEX, KLON, 1, KLEV, 0, KFDIA) ! @@ -350,7 +333,7 @@ ENDDO ZZZ = PZZF CALL LIMA_ADJUST_SPLIT(D=YLDIMPHYEX, CST=PHYEX%CST, BUCONF=TBUCONF, TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET), & - KRR=KRR, KMI=KMI, HCONDENS=PHYEX%NEBN%CCONDENS, HLAMBDA3=PHYEX%NEBN%CLAMBDA3, & + KRR=KRR, KMI=PHYEX%MISC%KMI, HCONDENS=PHYEX%NEBN%CCONDENS, HLAMBDA3=PHYEX%NEBN%CLAMBDA3, & OSUBG_COND=OSUBG_COND, OSIGMAS=OSIGMAS, PTSTEP=2*PTSTEP, PSIGQSAT=PSIGQSAT, & PRHODREF=PRHODREF, PRHODJ=PRHODJ, PEXNREF=PEXNREF, PSIGS=PSIGS, PMFCONV=PMFCONV, & PPABST=PPABSM, PPABSTT=PPABSM, PZZ=ZZZ, PDTHRAD=PDTHRAD, PW_NU=PW_NU, & diff --git a/src/arome/ext/aro_lima.F90 b/src/arome/ext/aro_lima.F90 index de92b72acb49130026cf3f766daaf932ead9074e..7b5351b2daa16da82ef8837093e50790df644021 100644 --- a/src/arome/ext/aro_lima.F90 +++ b/src/arome/ext/aro_lima.F90 @@ -115,11 +115,6 @@ TYPE(TMDDH), INTENT(IN), TARGET :: YDMDDH ! !* 0.2 Declarations of local variables : -CHARACTER(LEN=4) :: HCLOUD ! kind of cloud - ! paramerization - -INTEGER :: KMI ! Model index - ! INTEGER :: JRR, JL ! Loop index for the moist and scalar variables ! @@ -154,8 +149,6 @@ IF (LHOOK) CALL DR_HOOK('ARO_LIMA',0,ZHOOK_HANDLE) !Dimensions CALL FILL_DIMPHYEX(YLDIMPHYEX, KLON, 1, KLEV, 0, KFDIA) -HCLOUD='LIMA' -KMI=1 ZINPRC=0. ZDUM3DC=0. ZDUM3DR=0. diff --git a/src/common/aux/ini_phyex.F90 b/src/common/aux/ini_phyex.F90 index 67a2400a8420ae13b9183bddb692e8b5aa9a381c..0c4a7e8eb58bacdedfa264e880a6f6082f12925d 100644 --- a/src/common/aux/ini_phyex.F90 +++ b/src/common/aux/ini_phyex.F90 @@ -15,9 +15,11 @@ USE MODD_PARAM_MFSHALL_N,ONLY: PARAM_MFSHALLN, PARAM_MFSHALLN_INIT, PARAM_MFSHAL USE MODD_TURB_N, ONLY: TURBN, TURBN_INIT, TURB_GOTO_MODEL, LHARAT USE MODD_CTURB, ONLY: CSTURB, CTURB_ASSOCIATE USE MODD_NEB_N, ONLY: NEBN, NEBN_INIT, NEB_GOTO_MODEL, CCONDENS, LSTATNW, LSUBG_COND -USE MODD_PARAM_LIMA, ONLY: PARAM_LIMA, PARAM_LIMA_INIT, PARAM_LIMA_ASSOCIATE +USE MODD_PARAM_LIMA, ONLY: PARAM_LIMA, PARAM_LIMA_INIT, PARAM_LIMA_ASSOCIATE, LPTSPLIT, LADJ +USE MODD_PARAM_LIMA_WARM, ONLY: PARAM_LIMA_WARM +USE MODD_PARAM_LIMA_COLD, ONLY: PARAM_LIMA_COLD +USE MODD_PARAM_LIMA_MIXED, ONLY: PARAM_LIMA_MIXED USE MODD_NSV, ONLY: TNSV, NSV_ASSOCIATE -USE MODD_PARAM_LIMA, ONLY: PARAM_LIMA_ASSOCIATE, PARAM_LIMA, LPTSPLIT, LADJ ! USE MODE_INI_CST, ONLY: INI_CST USE MODE_INI_RAIN_ICE, ONLY: INI_RAIN_ICE @@ -124,6 +126,9 @@ IF(CMICRO=='ICE3' .OR. CMICRO=='ICE4' .OR. CMICRO=='LIMA') THEN RAIN_ICE_PARAMN=PHYEX_IN%RAIN_ICE_PARAMN CLOUDPARN=PHYEX_IN%CLOUDPARN PARAM_LIMA=PHYEX_IN%PARAM_LIMA + PARAM_LIMA_WARM=PHYEX_IN%PARAM_LIMA_WARM + PARAM_LIMA_COLD=PHYEX_IN%PARAM_LIMA_COLD + PARAM_LIMA_MIXED=PHYEX_IN%PARAM_LIMA_MIXED ENDIF CALL PARAM_ICEN_INIT(HPROGRAM, KUNITNML, LDNEEDNAM, KLUOUT, & @@ -153,6 +158,9 @@ IF(CMICRO=='ICE3' .OR. CMICRO=='ICE4' .OR. CMICRO=='LIMA') THEN PHYEX_OUT%RAIN_ICE_PARAMN=RAIN_ICE_PARAMN PHYEX_OUT%CLOUDPARN=CLOUDPARN PHYEX_OUT%PARAM_LIMA=PARAM_LIMA + PHYEX_OUT%PARAM_LIMA_WARM=PARAM_LIMA_WARM + PHYEX_OUT%PARAM_LIMA_COLD=PARAM_LIMA_COLD + PHYEX_OUT%PARAM_LIMA_MIXED=PARAM_LIMA_MIXED ENDIF ENDIF ! diff --git a/src/common/aux/modd_phyex.F90 b/src/common/aux/modd_phyex.F90 index 668f3ad26dc0643e66a5d238bfb20f10a403fdc9..6b8ddb985f6e7736b12ae3c805788d684e4c377a 100644 --- a/src/common/aux/modd_phyex.F90 +++ b/src/common/aux/modd_phyex.F90 @@ -29,6 +29,9 @@ USE MODD_TURB_n, ONLY: TURB_t USE MODD_CTURB, ONLY: CSTURB_t USE MODD_NEB_n, ONLY: NEB_t USE MODD_PARAM_LIMA, ONLY: PARAM_LIMA_t +USE MODD_PARAM_LIMA_WARM, ONLY: PARAM_LIMA_WARM_t +USE MODD_PARAM_LIMA_COLD, ONLY: PARAM_LIMA_COLD_t +USE MODD_PARAM_LIMA_MIXED, ONLY: PARAM_LIMA_MIXED_t USE MODD_NSV, ONLY: NSV_t USE MODD_MISC, ONLY: MISC_t ! @@ -46,6 +49,9 @@ TYPE PHYEX_t TYPE(TURB_t) :: TURBN !< Turbulence scheme constants set by namelist TYPE(NEB_t) :: NEBN !< Cloud scheme constants TYPE(PARAM_LIMA_t) :: PARAM_LIMA !< Control parameters for LIMA microphysics + TYPE(PARAM_LIMA_WARM_t):: PARAM_LIMA_WARM !< Microphysical factors for LIMA (warm processes) + TYPE(PARAM_LIMA_COLD_t):: PARAM_LIMA_COLD !< Microphysical factors for LIMA (cold processes) + TYPE(PARAM_LIMA_MIXED_t):: PARAM_LIMA_MIXED !< Microphysical factors for LIMA (mixed processes) TYPE(NSV_t) :: TNSV !< NSV indexes ! ! Supplementary strucuture to hold model specific values diff --git a/src/common/micro/modd_param_lima.F90 b/src/common/micro/modd_param_lima.F90 index bbf622a100013cb08bf7f31fb9b7ac91225830e8..22baffab5b5b80a63808dc967e8d5cf63492fdf7 100644 --- a/src/common/micro/modd_param_lima.F90 +++ b/src/common/micro/modd_param_lima.F90 @@ -486,7 +486,7 @@ END SUBROUTINE PARAM_LIMA_DEALLOCATE ! SUBROUTINE PARAM_LIMA_ALLOCATE(HNAME, KDIM1, KDIM2, KDIM3) IMPLICIT NONE - CHARACTER(LEN=*), INTENT(IN) :: HNAME + CHARACTER(LEN=*), INTENT(IN) :: HNAME INTEGER, INTENT(IN) :: KDIM1 INTEGER, OPTIONAL, INTENT(IN) :: KDIM2 INTEGER, OPTIONAL, INTENT(IN) :: KDIM3 diff --git a/src/common/micro/modd_param_lima_cold.F90 b/src/common/micro/modd_param_lima_cold.F90 index 337480312280e054f1abdaabadfa4ca829fda3ae..3134e583f585419a5121808a9ac0fd302a1b9e89 100644 --- a/src/common/micro/modd_param_lima_cold.F90 +++ b/src/common/micro/modd_param_lima_cold.F90 @@ -6,9 +6,9 @@ ! ########################### MODULE MODD_PARAM_LIMA_COLD ! ########################### -! +!> @file !!**** *MODD_PARAM_LIMA_COLD* - declaration of some descriptive parameters and -!! microphysical factors extensively used in +!! microphysical factors extensively used in !! the LIMA cold scheme. !! AUTHOR !! ------ @@ -18,7 +18,7 @@ !! !! MODIFICATIONS !! ------------- -!! Original ??/??/13 +!! Original ??/??/13 !! C. Barthe 14/03/2022 add CIBU and RDSF ! J. Wurtz 03/2022: new snow characteristics ! M. Taufour 07/2022: add concentration for snow, graupel, hail @@ -26,13 +26,13 @@ !------------------------------------------------------------------------------- USE MODD_PARAMETERS, ONLY: JPSVNAMELGTMAX ! -IMPLICIT NONE +IMPLICIT NONE ! !* 1. DESCRIPTIVE PARAMETERS ! ---------------------- ! ! Declaration of microphysical constants, including the descriptive -! parameters for the raindrop and the ice crystal habits, and the +! parameters for the raindrop and the ice crystal habits, and the ! parameters relevant of the dimensional distributions. ! ! m(D) = XAx * D**XBx : Mass-MaxDim relationship @@ -43,109 +43,379 @@ IMPLICIT NONE ! ! and ! -! XALPHAx, XNUx : Generalized GAMMA law -! Lbda = XLBx * (r_x*rho_dref)**XLBEXx : Slope parameter of the +! XALPHAx, XNUx : Generalized GAMMA law +! Lbda = XLBx * (r_x*rho_dref)**XLBEXx : Slope parameter of the ! distribution law ! -REAL,SAVE :: XLBEXI,XLBI ! Prist. ice distribution parameters -REAL,SAVE :: XLBEXS,XLBS,XNS ! Snow/agg. distribution parameters +TYPE PARAM_LIMA_COLD_t +REAL :: XLBEXI,XLBI ! Prist. ice distribution parameters +REAL :: XLBEXS,XLBS,XNS ! Snow/agg. distribution parameters ! -REAL,SAVE :: XAI,XBI,XC_I,XDI ,XF0I,XF2I,XC1I ! Cloud ice charact. -REAL,SAVE :: XF0IS,XF1IS ! (large Di vent. coef.) -REAL,SAVE :: XAS,XBS,XCS,XDS,XCCS,XCXS,XF0S,XF1S,XC1S ! Snow/agg. charact. +REAL :: XAI,XBI,XC_I,XDI ,XF0I,XF2I,XC1I ! Cloud ice charact. +REAL :: XF0IS,XF1IS ! (large Di vent. coef.) +REAL :: XAS,XBS,XCS,XDS,XCCS,XCXS,XF0S,XF1S,XC1S ! Snow/agg. charact. ! -REAL,SAVE :: XLBDAS_MIN, XLBDAS_MAX ! Max values allowed for the shape parameter of snow -REAL,SAVE :: XFVELOS ! Wurtz - snow fall speed parameterizaed after Thompson 2008 -REAL,SAVE :: XTRANS_MP_GAMMAS ! Wurtz - change between lambda value for MP and gen. gamma +REAL :: XLBDAS_MIN, XLBDAS_MAX ! Max values allowed for the shape parameter of snow +REAL :: XFVELOS ! Wurtz - snow fall speed parameterizaed after Thompson 2008 +REAL :: XTRANS_MP_GAMMAS ! Wurtz - change between lambda value for MP and gen. gamma ! -CHARACTER(LEN=JPSVNAMELGTMAX),DIMENSION(8),PARAMETER & - :: CLIMA_COLD_NAMES=(/'CICE ','CSNOW ','CGRAUPEL','CHAIL ',& - 'CIFNFREE','CIFNNUCL', & - 'CCNINIMM','CCCNNUCL'/) - ! basenames of the SV articles stored - ! in the binary files - !with IF:Ice-nuclei Free (nonactivated IFN by Dep/Cond) - ! IN:Ice-nuclei Nucleated (activated IFN by Dep/Cond) - ! NI:Nuclei Immersed (activated IFN by Imm) - ! HF:Homogeneous Freezing -CHARACTER(LEN=JPSVNAMELGTMAX),DIMENSION(8),PARAMETER & - :: CLIMA_COLD_CONC=(/'NI ','NS ','NG ','NH ','NIF','NIN','NNI','NNH'/)!for DIAG ! !------------------------------------------------------------------------------- ! !* 2. MICROPHYSICAL FACTORS ! --------------------- ! -REAL,SAVE :: XFSEDRI,XFSEDCI, & ! Constants for sedimentation - XFSEDRS,XFSEDCS, & ! - XFSEDS, XEXSEDS ! fluxes of ice and snow +REAL :: XFSEDRI,XFSEDCI, & ! Constants for sedimentation + XFSEDRS,XFSEDCS, & ! + XFSEDS, XEXSEDS ! fluxes of ice and snow ! -REAL,SAVE :: XNUC_DEP,XEXSI_DEP,XEX_DEP, & ! Constants for heterogeneous +REAL :: XNUC_DEP,XEXSI_DEP,XEX_DEP, & ! Constants for heterogeneous XNUC_CON,XEXTT_CON,XEX_CON, & ! ice nucleation : DEP et CON XMNU0 ! mass of nucleated ice crystal ! -REAL,SAVE :: XRHOI_HONH,XCEXP_DIFVAP_HONH, & ! Constants for homogeneous +REAL :: XRHOI_HONH,XCEXP_DIFVAP_HONH, & ! Constants for homogeneous XCOEF_DIFVAP_HONH,XRCOEF_HONH, & ! haze freezing : HHONI XCRITSAT1_HONH,XCRITSAT2_HONH, & XTMIN_HONH,XTMAX_HONH, & XDLNJODT1_HONH,XDLNJODT2_HONH, & XC1_HONH,XC2_HONH,XC3_HONH ! -REAL,SAVE :: XC_HONC,XR_HONC, & ! Constants for homogeneous +REAL :: XC_HONC,XR_HONC, & ! Constants for homogeneous XTEXP1_HONC,XTEXP2_HONC, & ! droplet freezing : CHONI XTEXP3_HONC,XTEXP4_HONC, & XTEXP5_HONC ! -REAL,SAVE :: XCSCNVI_MAX, XLBDASCNVI_MAX, & +REAL :: XCSCNVI_MAX, XLBDASCNVI_MAX, & XRHORSMIN, & XDSCNVI_LIM, XLBDASCNVI_LIM, & ! Constants for snow XC0DEPSI,XC1DEPSI, & ! sublimation conversion to XR0DEPSI,XR1DEPSI ! pristine ice : SCNVI ! -REAL,SAVE :: XSCFAC, & ! Constants for the Bergeron +REAL :: XSCFAC, & ! Constants for the Bergeron X0DEPI,X2DEPI, & ! Findeisen process and X0DEPS,X1DEPS,XEX0DEPS,XEX1DEPS ! deposition ! -REAL,SAVE :: XDICNVS_LIM, XLBDAICNVS_LIM, & ! Constants for pristine ice +REAL :: XDICNVS_LIM, XLBDAICNVS_LIM, & ! Constants for pristine ice XC0DEPIS,XC1DEPIS, & ! deposition conversion to XR0DEPIS,XR1DEPIS ! snow : ICNVS ! -REAL,SAVE :: XCOLEXIS, & ! Constants for snow - XAGGS_CLARGE1,XAGGS_CLARGE2, & ! aggregation : AGG +REAL :: XCOLEXIS, & ! Constants for snow + XAGGS_CLARGE1,XAGGS_CLARGE2, & ! aggregation : AGG XAGGS_RLARGE1,XAGGS_RLARGE2, & XFIAGGS,XEXIAGGS ! -REAL,SAVE :: XACCS1, XSPONBUDS1, XSPONBUDS2, & ! Constant for snow +REAL :: XACCS1, XSPONBUDS1, XSPONBUDS2, & ! Constant for snow XSPONBUDS3, XSPONCOEFS2 ! spontaneous break-up ! !?????????????????? -REAL,SAVE :: XKER_ZRNIC_A1,XKER_ZRNIC_A2 ! Long-Zrnic Kernels (ini_ice_coma) +REAL :: XKER_ZRNIC_A1,XKER_ZRNIC_A2 ! Long-Zrnic Kernels (ini_ice_coma) ! -REAL,SAVE :: XSELFI,XCOLEXII ! Constants for pristine ice +REAL :: XSELFI,XCOLEXII ! Constants for pristine ice ! self-collection (ini_ice_coma) ! -REAL,DIMENSION(:,:), SAVE, ALLOCATABLE :: XKER_N_SSCS -REAL,SAVE :: XCOLSS,XCOLEXSS,XFNSSCS, & ! +REAL,DIMENSION(:,:), ALLOCATABLE :: XKER_N_SSCS +REAL :: XCOLSS,XCOLEXSS,XFNSSCS, & ! XLBNSSCS1,XLBNSSCS2, & ! Constants for snow self collection - XSCINTP1S,XSCINTP2S ! -INTEGER,SAVE :: NSCLBDAS ! + XSCINTP1S,XSCINTP2S ! +INTEGER :: NSCLBDAS ! -REAL,SAVE :: XAUTO3, XAUTO4, & ! Constants for pristine ice +REAL :: XAUTO3, XAUTO4, & ! Constants for pristine ice XLAUTS, XLAUTS_THRESHOLD, & ! autoconversion : AUT - XITAUTS, XITAUTS_THRESHOLD, & ! (ini_ice_com) + XITAUTS, XITAUTS_THRESHOLD, & ! (ini_ice_com) XTEXAUTI ! -REAL,SAVE :: XCONCI_MAX ! Limitation of the pristine - ! ice concentration (init and grid-nesting) -REAL,SAVE :: XFREFFI ! Factor to compute the cloud ice effective radius +REAL :: XCONCI_MAX ! Limitation of the pristine + ! ice concentration (init and grid-nesting) +REAL :: XFREFFI ! Factor to compute the cloud ice effective radius ! ! For ICE4 nucleation -REAL, SAVE :: XALPHA1 -REAL, SAVE :: XALPHA2 -REAL, SAVE :: XBETA1 -REAL, SAVE :: XBETA2 -REAL, SAVE :: XNU10 -REAL, SAVE :: XNU20 +REAL :: XALPHA1 +REAL :: XALPHA2 +REAL :: XBETA1 +REAL :: XBETA2 +REAL :: XNU10 +REAL :: XNU20 +END TYPE PARAM_LIMA_COLD_t +! +TYPE(PARAM_LIMA_COLD_t), TARGET, SAVE :: PARAM_LIMA_COLD +! +REAL, POINTER :: XLBEXI => NULL(), & + XLBI => NULL(), & + XLBEXS => NULL(), & + XLBS => NULL(), & + XNS => NULL(), & + XAI => NULL(), & + XBI => NULL(), & + XC_I => NULL(), & + XDI => NULL(), & + XF0I => NULL(), & + XF2I => NULL(), & + XC1I => NULL(), & + XF0IS => NULL(), & + XF1IS => NULL(), & + XAS => NULL(), & + XBS => NULL(), & + XCS => NULL(), & + XDS => NULL(), & + XCCS => NULL(), & + XCXS => NULL(), & + XF0S => NULL(), & + XF1S => NULL(), & + XC1S => NULL(), & + XLBDAS_MIN => NULL(), & + XLBDAS_MAX => NULL(), & + XFVELOS => NULL(), & + XTRANS_MP_GAMMAS => NULL(), & + XFSEDRI => NULL(), & + XFSEDCI => NULL(), & + XFSEDRS => NULL(), & + XFSEDCS => NULL(), & + XFSEDS => NULL(), & + XEXSEDS => NULL(), & + XNUC_DEP => NULL(), & + XEXSI_DEP => NULL(), & + XEX_DEP => NULL(), & + XNUC_CON => NULL(), & + XEXTT_CON => NULL(), & + XEX_CON => NULL(), & + XMNU0 => NULL(), & + XRHOI_HONH => NULL(), & + XCEXP_DIFVAP_HONH => NULL(), & + XCOEF_DIFVAP_HONH => NULL(), & + XRCOEF_HONH => NULL(), & + XCRITSAT1_HONH => NULL(), & + XCRITSAT2_HONH => NULL(), & + XTMIN_HONH => NULL(), & + XTMAX_HONH => NULL(), & + XDLNJODT1_HONH => NULL(), & + XDLNJODT2_HONH => NULL(), & + XC1_HONH => NULL(), & + XC2_HONH => NULL(), & + XC3_HONH => NULL(), & + XC_HONC => NULL(), & + XR_HONC => NULL(), & + XTEXP1_HONC => NULL(), & + XTEXP2_HONC => NULL(), & + XTEXP3_HONC => NULL(), & + XTEXP4_HONC => NULL(), & + XTEXP5_HONC => NULL(), & + XCSCNVI_MAX => NULL(), & + XLBDASCNVI_MAX => NULL(), & + XRHORSMIN => NULL(), & + XDSCNVI_LIM => NULL(), & + XLBDASCNVI_LIM => NULL(), & + XC0DEPSI => NULL(), & + XC1DEPSI => NULL(), & + XR0DEPSI => NULL(), & + XR1DEPSI => NULL(), & + XSCFAC => NULL(), & + X0DEPI => NULL(), & + X2DEPI => NULL(), & + X0DEPS => NULL(), & + X1DEPS => NULL(), & + XEX0DEPS => NULL(), & + XEX1DEPS => NULL(), & + XDICNVS_LIM => NULL(), & + XLBDAICNVS_LIM => NULL(), & + XC0DEPIS => NULL(), & + XC1DEPIS => NULL(), & + XR0DEPIS => NULL(), & + XR1DEPIS => NULL(), & + XCOLEXIS => NULL(), & + XAGGS_CLARGE1 => NULL(), & + XAGGS_CLARGE2 => NULL(), & + XAGGS_RLARGE1 => NULL(), & + XAGGS_RLARGE2 => NULL(), & + XFIAGGS => NULL(), & + XEXIAGGS => NULL(), & + XACCS1 => NULL(), & + XSPONBUDS1 => NULL(), & + XSPONBUDS2 => NULL(), & + XSPONBUDS3 => NULL(), & + XSPONCOEFS2 => NULL(), & + XKER_ZRNIC_A1 => NULL(), & + XKER_ZRNIC_A2 => NULL(), & + XSELFI => NULL(), & + XCOLEXII => NULL(), & + XCOLSS => NULL(), & + XCOLEXSS => NULL(), & + XFNSSCS => NULL(), & + XLBNSSCS1 => NULL(), & + XLBNSSCS2 => NULL(), & + XSCINTP1S => NULL(), & + XSCINTP2S => NULL(), & + XAUTO3 => NULL(), & + XAUTO4 => NULL(), & + XLAUTS => NULL(), & + XLAUTS_THRESHOLD => NULL(), & + XITAUTS => NULL(), & + XITAUTS_THRESHOLD => NULL(), & + XTEXAUTI => NULL(), & + XCONCI_MAX => NULL(), & + XFREFFI => NULL(), & + XALPHA1 => NULL(), & + XALPHA2 => NULL(), & + XBETA1 => NULL(), & + XBETA2 => NULL(), & + XNU10 => NULL(), & + XNU20 => NULL() +INTEGER, POINTER :: NSCLBDAS => NULL() +REAL,DIMENSION(:,:),POINTER :: XKER_N_SSCS => NULL() +CHARACTER(LEN=JPSVNAMELGTMAX),DIMENSION(8),PARAMETER & + :: CLIMA_COLD_NAMES=(/'CICE ','CSNOW ','CGRAUPEL','CHAIL ',& + 'CIFNFREE','CIFNNUCL', & + 'CCNINIMM','CCCNNUCL'/) + ! basenames of the SV articles stored + ! in the binary files + !with IF:Ice-nuclei Free (nonactivated IFN by Dep/Cond) + ! IN:Ice-nuclei Nucleated (activated IFN by Dep/Cond) + ! NI:Nuclei Immersed (activated IFN by Imm) + ! HF:Homogeneous Freezing +CHARACTER(LEN=JPSVNAMELGTMAX),DIMENSION(8),PARAMETER & + :: CLIMA_COLD_CONC=(/'NI ','NS ','NG ','NH ','NIF','NIN','NNI','NNH'/)!for DIAG + +! +CONTAINS +SUBROUTINE PARAM_LIMA_COLD_ASSOCIATE() +IMPLICIT NONE +IF(.NOT. ASSOCIATED(XLBEXI)) THEN + XLBEXI => PARAM_LIMA_COLD%XLBEXI + XLBI => PARAM_LIMA_COLD%XLBI + XLBEXS => PARAM_LIMA_COLD%XLBEXS + XLBS => PARAM_LIMA_COLD%XLBS + XNS => PARAM_LIMA_COLD%XNS + XAI => PARAM_LIMA_COLD%XAI + XBI => PARAM_LIMA_COLD%XBI + XC_I => PARAM_LIMA_COLD%XC_I + XDI => PARAM_LIMA_COLD%XDI + XF0I => PARAM_LIMA_COLD%XF0I + XF2I => PARAM_LIMA_COLD%XF2I + XC1I => PARAM_LIMA_COLD%XC1I + XF0IS => PARAM_LIMA_COLD%XF0IS + XF1IS => PARAM_LIMA_COLD%XF1IS + XAS => PARAM_LIMA_COLD%XAS + XBS => PARAM_LIMA_COLD%XBS + XCS => PARAM_LIMA_COLD%XCS + XDS => PARAM_LIMA_COLD%XDS + XCCS => PARAM_LIMA_COLD%XCCS + XCXS => PARAM_LIMA_COLD%XCXS + XF0S => PARAM_LIMA_COLD%XF0S + XF1S => PARAM_LIMA_COLD%XF1S + XC1S => PARAM_LIMA_COLD%XC1S + XLBDAS_MIN => PARAM_LIMA_COLD%XLBDAS_MIN + XLBDAS_MAX => PARAM_LIMA_COLD%XLBDAS_MAX + XFVELOS => PARAM_LIMA_COLD%XFVELOS + XTRANS_MP_GAMMAS => PARAM_LIMA_COLD%XTRANS_MP_GAMMAS + XFSEDRI => PARAM_LIMA_COLD%XFSEDRI + XFSEDCI => PARAM_LIMA_COLD%XFSEDCI + XFSEDRS => PARAM_LIMA_COLD%XFSEDRS + XFSEDCS => PARAM_LIMA_COLD%XFSEDCS + XFSEDS => PARAM_LIMA_COLD%XFSEDS + XEXSEDS => PARAM_LIMA_COLD%XEXSEDS + XNUC_DEP => PARAM_LIMA_COLD%XNUC_DEP + XEXSI_DEP => PARAM_LIMA_COLD%XEXSI_DEP + XEX_DEP => PARAM_LIMA_COLD%XEX_DEP + XNUC_CON => PARAM_LIMA_COLD%XNUC_CON + XEXTT_CON => PARAM_LIMA_COLD%XEXTT_CON + XEX_CON => PARAM_LIMA_COLD%XEX_CON + XMNU0 => PARAM_LIMA_COLD%XMNU0 + XRHOI_HONH => PARAM_LIMA_COLD%XRHOI_HONH + XCEXP_DIFVAP_HONH => PARAM_LIMA_COLD%XCEXP_DIFVAP_HONH + XCOEF_DIFVAP_HONH => PARAM_LIMA_COLD%XCOEF_DIFVAP_HONH + XRCOEF_HONH => PARAM_LIMA_COLD%XRCOEF_HONH + XCRITSAT1_HONH => PARAM_LIMA_COLD%XCRITSAT1_HONH + XCRITSAT2_HONH => PARAM_LIMA_COLD%XCRITSAT2_HONH + XTMIN_HONH => PARAM_LIMA_COLD%XTMIN_HONH + XTMAX_HONH => PARAM_LIMA_COLD%XTMAX_HONH + XDLNJODT1_HONH => PARAM_LIMA_COLD%XDLNJODT1_HONH + XDLNJODT2_HONH => PARAM_LIMA_COLD%XDLNJODT2_HONH + XC1_HONH => PARAM_LIMA_COLD%XC1_HONH + XC2_HONH => PARAM_LIMA_COLD%XC2_HONH + XC3_HONH => PARAM_LIMA_COLD%XC3_HONH + XC_HONC => PARAM_LIMA_COLD%XC_HONC + XR_HONC => PARAM_LIMA_COLD%XR_HONC + XTEXP1_HONC => PARAM_LIMA_COLD%XTEXP1_HONC + XTEXP2_HONC => PARAM_LIMA_COLD%XTEXP2_HONC + XTEXP3_HONC => PARAM_LIMA_COLD%XTEXP3_HONC + XTEXP4_HONC => PARAM_LIMA_COLD%XTEXP4_HONC + XTEXP5_HONC => PARAM_LIMA_COLD%XTEXP5_HONC + XCSCNVI_MAX => PARAM_LIMA_COLD%XCSCNVI_MAX + XLBDASCNVI_MAX => PARAM_LIMA_COLD%XLBDASCNVI_MAX + XRHORSMIN => PARAM_LIMA_COLD%XRHORSMIN + XDSCNVI_LIM => PARAM_LIMA_COLD%XDSCNVI_LIM + XLBDASCNVI_LIM => PARAM_LIMA_COLD%XLBDASCNVI_LIM + XC0DEPSI => PARAM_LIMA_COLD%XC0DEPSI + XC1DEPSI => PARAM_LIMA_COLD%XC1DEPSI + XR0DEPSI => PARAM_LIMA_COLD%XR0DEPSI + XR1DEPSI => PARAM_LIMA_COLD%XR1DEPSI + XSCFAC => PARAM_LIMA_COLD%XSCFAC + X0DEPI => PARAM_LIMA_COLD%X0DEPI + X2DEPI => PARAM_LIMA_COLD%X2DEPI + X0DEPS => PARAM_LIMA_COLD%X0DEPS + X1DEPS => PARAM_LIMA_COLD%X1DEPS + XEX0DEPS => PARAM_LIMA_COLD%XEX0DEPS + XEX1DEPS => PARAM_LIMA_COLD%XEX1DEPS + XDICNVS_LIM => PARAM_LIMA_COLD%XDICNVS_LIM + XLBDAICNVS_LIM => PARAM_LIMA_COLD%XLBDAICNVS_LIM + XC0DEPIS => PARAM_LIMA_COLD%XC0DEPIS + XC1DEPIS => PARAM_LIMA_COLD%XC1DEPIS + XR0DEPIS => PARAM_LIMA_COLD%XR0DEPIS + XR1DEPIS => PARAM_LIMA_COLD%XR1DEPIS + XCOLEXIS => PARAM_LIMA_COLD%XCOLEXIS + XAGGS_CLARGE1 => PARAM_LIMA_COLD%XAGGS_CLARGE1 + XAGGS_CLARGE2 => PARAM_LIMA_COLD%XAGGS_CLARGE2 + XAGGS_RLARGE1 => PARAM_LIMA_COLD%XAGGS_RLARGE1 + XAGGS_RLARGE2 => PARAM_LIMA_COLD%XAGGS_RLARGE2 + XFIAGGS => PARAM_LIMA_COLD%XFIAGGS + XEXIAGGS => PARAM_LIMA_COLD%XEXIAGGS + XACCS1 => PARAM_LIMA_COLD%XACCS1 + XSPONBUDS1 => PARAM_LIMA_COLD%XSPONBUDS1 + XSPONBUDS2 => PARAM_LIMA_COLD%XSPONBUDS2 + XSPONBUDS3 => PARAM_LIMA_COLD%XSPONBUDS3 + XSPONCOEFS2 => PARAM_LIMA_COLD%XSPONCOEFS2 + XKER_ZRNIC_A1 => PARAM_LIMA_COLD%XKER_ZRNIC_A1 + XKER_ZRNIC_A2 => PARAM_LIMA_COLD%XKER_ZRNIC_A2 + XSELFI => PARAM_LIMA_COLD%XSELFI + XCOLEXII => PARAM_LIMA_COLD%XCOLEXII + XCOLSS => PARAM_LIMA_COLD%XCOLSS + XCOLEXSS => PARAM_LIMA_COLD%XCOLEXSS + XFNSSCS => PARAM_LIMA_COLD%XFNSSCS + XLBNSSCS1 => PARAM_LIMA_COLD%XLBNSSCS1 + XLBNSSCS2 => PARAM_LIMA_COLD%XLBNSSCS2 + XSCINTP1S => PARAM_LIMA_COLD%XSCINTP1S + XSCINTP2S => PARAM_LIMA_COLD%XSCINTP2S + XAUTO3 => PARAM_LIMA_COLD%XAUTO3 + XAUTO4 => PARAM_LIMA_COLD%XAUTO4 + XLAUTS => PARAM_LIMA_COLD%XLAUTS + XLAUTS_THRESHOLD => PARAM_LIMA_COLD%XLAUTS_THRESHOLD + XITAUTS => PARAM_LIMA_COLD%XITAUTS + XITAUTS_THRESHOLD => PARAM_LIMA_COLD%XITAUTS_THRESHOLD + XTEXAUTI => PARAM_LIMA_COLD%XTEXAUTI + XCONCI_MAX => PARAM_LIMA_COLD%XCONCI_MAX + XFREFFI => PARAM_LIMA_COLD%XFREFFI + XALPHA1 => PARAM_LIMA_COLD%XALPHA1 + XALPHA2 => PARAM_LIMA_COLD%XALPHA2 + XBETA1 => PARAM_LIMA_COLD%XBETA1 + XBETA2 => PARAM_LIMA_COLD%XBETA2 + XNU10 => PARAM_LIMA_COLD%XNU10 + XNU20 => PARAM_LIMA_COLD%XNU20 + + NSCLBDAS => PARAM_LIMA_COLD%NSCLBDAS +ENDIF +END SUBROUTINE PARAM_LIMA_COLD_ASSOCIATE +! +SUBROUTINE PARAM_LIMA_COLD_ALLOCATE(HNAME, KDIM1, KDIM2) + IMPLICIT NONE + CHARACTER(LEN=*), INTENT(IN) :: HNAME + INTEGER, INTENT(IN) :: KDIM1 + INTEGER, INTENT(IN) :: KDIM2 + + SELECT CASE(TRIM(HNAME)) + CASE('XKER_N_SSCS') + ALLOCATE(PARAM_LIMA_COLD%XKER_N_SSCS(KDIM1, KDIM2)) + XKER_N_SSCS => PARAM_LIMA_COLD%XKER_N_SSCS + END SELECT +END SUBROUTINE PARAM_LIMA_COLD_ALLOCATE ! !------------------------------------------------------------------------------- ! diff --git a/src/common/micro/modd_param_lima_mixed.F90 b/src/common/micro/modd_param_lima_mixed.F90 index 6a9c763dc3fef2905f7767731bfb151e6356bfe6..66b0d047876808d415b4530583aa19feb576eaf0 100644 --- a/src/common/micro/modd_param_lima_mixed.F90 +++ b/src/common/micro/modd_param_lima_mixed.F90 @@ -3,17 +3,17 @@ ! ###########################{ ! !!**** *MODD_PARAM_LIMA_MIXED* - declaration of some descriptive parameters and -!! microphysical factors extensively used in +!! microphysical factors extensively used in !! the LIMA mixed scheme. !! AUTHOR !! ------ -!! J.-P. Pinty *Laboratoire d'Aerologie* +!! J.-P. Pinty *Laboratoire d'Aerologie* !! S. Berthet * Laboratoire d'Aerologie* !! B. Vié * Laboratoire d'Aerologie* !! !! MODIFICATIONS !! ------------- -!! Original ??/??/13 +!! Original ??/??/13 !! C. Barthe 14/03/2022 add CIBU and RDSF ! J. Wurtz 03/2022: new snow characteristics ! M. Taufour 07/2022: add concentration for snow, graupel, hail @@ -21,12 +21,13 @@ !------------------------------------------------------------------------------- ! IMPLICIT NONE +TYPE PARAM_LIMA_MIXED_t ! !* 1. DESCRIPTIVE PARAMETERS ! ---------------------- ! ! Declaration of microphysical constants, including the descriptive -! parameters for the raindrop and the ice crystal habits, and the +! parameters for the raindrop and the ice crystal habits, and the ! parameters relevant of the dimensional distributions. ! ! m(D) = XAx * D**XBx : Mass-MaxDim relationship @@ -37,17 +38,17 @@ IMPLICIT NONE ! ! and ! -! XALPHAx, XNUx : Generalized GAMMA law -! Lbda = XLBx * (r_x*rho_dref)**XLBEXx : Slope parameter of the +! XALPHAx, XNUx : Generalized GAMMA law +! Lbda = XLBx * (r_x*rho_dref)**XLBEXx : Slope parameter of the ! distribution law ! -REAL,SAVE :: XAG,XBG,XCG,XDG,XCCG,XCXG,XF0G,XF1G,XC1G ! Graupel charact. -REAL,SAVE :: XLBEXG,XLBG,XNG ! Graupel distribution parameters -REAL,SAVE :: XLBDAG_MAX ! Max values allowed for the shape +REAL :: XAG,XBG,XCG,XDG,XCCG,XCXG,XF0G,XF1G,XC1G ! Graupel charact. +REAL :: XLBEXG,XLBG,XNG ! Graupel distribution parameters +REAL :: XLBDAG_MAX ! Max values allowed for the shape ! parameter of graupeln ! -REAL,SAVE :: XAH,XBH,XCH,XDH,XCCH,XCXH,XF0H,XF1H,XC1H ! Hail charact. -REAL,SAVE :: XALPHAH,XNUH,XLBEXH,XLBH ! Hail distribution parameters +REAL :: XAH,XBH,XCH,XDH,XCCH,XCXH,XF0H,XF1H,XC1H ! Hail charact. +REAL :: XALPHAH,XNUH,XLBEXH,XLBH ! Hail distribution parameters ! !------------------------------------------------------------------------------- ! @@ -56,7 +57,7 @@ REAL,SAVE :: XALPHAH,XNUH,XLBEXH,XLBH ! Hail distribution parameters ! ! Constants for ice-ice collision : CIBU ! -REAL, SAVE :: XDCSLIM_CIBU_MIN, & ! aggregates min diam. : 0.2 mm +REAL :: XDCSLIM_CIBU_MIN, & ! aggregates min diam. : 0.2 mm XDCSLIM_CIBU_MAX, & ! aggregates max diam. : 1.0 mm XDCGLIM_CIBU_MIN, & ! graupel min diam. : 2 mm XGAMINC_BOUND_CIBU_SMIN, & ! Min val. of Lbda_s*dlim @@ -71,136 +72,136 @@ REAL, SAVE :: XDCSLIM_CIBU_MIN, & ! aggregates min diam. : 0.2 mm XMOMGS_CIBU_1,XMOMGS_CIBU_2, & XMOMGS_CIBU_3 ! -REAL, DIMENSION(:,:), SAVE, ALLOCATABLE & +REAL, DIMENSION(:,:) , ALLOCATABLE & :: XGAMINC_CIBU_S, & ! Tab.incomplete Gamma function XGAMINC_CIBU_G ! Tab.incomplete Gamma function ! ! Constants for raindrop shattering : RDSF ! -REAL, SAVE :: XDCRLIM_RDSF_MIN, & ! Raindrops min diam. : 0.2 mm +REAL :: XDCRLIM_RDSF_MIN, & ! Raindrops min diam. : 0.2 mm XGAMINC_BOUND_RDSF_RMIN, & ! Min val. of Lbda_r*dlim XGAMINC_BOUND_RDSF_RMAX, & ! Max val. of Lbda_r*dlim XRDSFINTP_R,XRDSFINTP1_R, & ! XFACTOR_RDSF_NI, & ! Factor for final RDSF Eq. XMOMGR_RDSF ! -REAL, DIMENSION(:), SAVE, ALLOCATABLE & +REAL, DIMENSION(:) , ALLOCATABLE & :: XGAMINC_RDSF_R ! Tab.incomplete Gamma function ! ! !* 3. MICROPHYSICAL FACTORS - Graupel ! ------------------------------- ! -REAL,SAVE :: XFSEDG, XEXSEDG, XFSEDRG, XFSEDCG ! Sedimentation fluxes of Graupel +REAL :: XFSEDG, XEXSEDG, XFSEDRG, XFSEDCG ! Sedimentation fluxes of Graupel ! -REAL,SAVE :: X0DEPG,X1DEPG,XEX0DEPG,XEX1DEPG ! Deposition on graupel +REAL :: X0DEPG,X1DEPG,XEX0DEPG,XEX1DEPG ! Deposition on graupel ! -REAL,SAVE :: XHMTMIN,XHMTMAX,XHM1,XHM2, & ! Constants for the +REAL :: XHMTMIN,XHMTMAX,XHM1,XHM2, & ! Constants for the XHM_YIELD,XHM_COLLCS,XHM_FACTS, & ! revised XHM_COLLCG,XHM_FACTG, & ! Hallett-Mossop process - XGAMINC_HMC_BOUND_MIN, & ! Min val. of Lbda_c for HMC - XGAMINC_HMC_BOUND_MAX, & ! Max val. of Lbda_c for HMC + XGAMINC_HMC_BOUND_MIN, & ! Min val. of Lbda_c for HMC + XGAMINC_HMC_BOUND_MAX, & ! Max val. of Lbda_c for HMC XHMSINTP1,XHMSINTP2, & ! (this is no more used !) XHMLINTP1,XHMLINTP2 ! -REAL,SAVE :: XDCSLIM,XCOLCS, & ! Constants for the riming of - XEXCRIMSS,XCRIMSS, & ! the aggregates : RIM - XEXCRIMSG,XCRIMSG, & ! - XEXSRIMCG,XSRIMCG, & ! +REAL :: XDCSLIM,XCOLCS, & ! Constants for the riming of + XEXCRIMSS,XCRIMSS, & ! the aggregates : RIM + XEXCRIMSG,XCRIMSG, & ! + XEXSRIMCG,XSRIMCG, & ! XSRIMCG2, XSRIMCG3, XEXSRIMCG2, & ! Murakami 1990 - XGAMINC_BOUND_MIN, & ! Min val. of Lbda_s for RIM - XGAMINC_BOUND_MAX, & ! Max val. of Lbda_s for RIM - XRIMINTP1,XRIMINTP2 ! Csts for lin. interpol. of + XGAMINC_BOUND_MIN, & ! Min val. of Lbda_s for RIM + XGAMINC_BOUND_MAX, & ! Max val. of Lbda_s for RIM + XRIMINTP1,XRIMINTP2 ! Csts for lin. interpol. of ! the tab. incomplete Gamma law -INTEGER,SAVE :: NGAMINC ! Number of tab. Lbda_s -REAL, DIMENSION(:), SAVE, ALLOCATABLE & +INTEGER :: NGAMINC ! Number of tab. Lbda_s +REAL, DIMENSION(:) , ALLOCATABLE & :: XGAMINC_RIM1, & ! Tab. incomplete Gamma funct. XGAMINC_RIM2, & ! for XDS+2 and for XBS XGAMINC_RIM4, & ! Murakami XGAMINC_HMC ! and for the HM process ! -REAL,SAVE :: XFRACCSS, & ! Constants for the accretion - XFNRACCSS, & ! Constants for the accretion +REAL :: XFRACCSS, & ! Constants for the accretion + XFNRACCSS, & ! Constants for the accretion XLBRACCS1,XLBRACCS2,XLBRACCS3, & ! raindrops onto the aggregates - XLBNRACCS1,XLBNRACCS2,XLBNRACCS3, & ! raindrops onto the aggregates + XLBNRACCS1,XLBNRACCS2,XLBNRACCS3, & ! raindrops onto the aggregates XFSACCRG, & ! ACC (processes RACCSS and - XFNSACCRG, & ! ACC (processes RACCSS and + XFNSACCRG, & ! ACC (processes RACCSS and XLBSACCR1,XLBSACCR2,XLBSACCR3, & ! SACCRG) - XLBNSACCR1,XLBNSACCR2,XLBNSACCR3, & ! SACCRG) + XLBNSACCR1,XLBNSACCR2,XLBNSACCR3, & ! SACCRG) XSCLBDAS_MIN, & ! Min val. of Lbda_s for ACC - XSCLBDAS_MAX, & ! Max val. of Lbda_s for ACC - XACCLBDAS_MIN, & ! Min val. of Lbda_s for ACC - XACCLBDAS_MAX, & ! Max val. of Lbda_s for ACC - XACCLBDAR_MIN, & ! Min val. of Lbda_r for ACC - XACCLBDAR_MAX, & ! Max val. of Lbda_r for ACC - XACCINTP1S,XACCINTP2S, & ! Csts for bilin. interpol. of - XACCINTP1R,XACCINTP2R ! Lbda_s and Lbda_r in the - ! XKER_RACCSS and XKER_SACCRG - ! tables -INTEGER,SAVE :: NACCLBDAS, & ! Number of Lbda_s values and - NACCLBDAR ! of Lbda_r values in the - ! XKER_RACCSS and XKER_SACCRG - ! tables -REAL,DIMENSION(:,:), SAVE, ALLOCATABLE & - :: XKER_RACCSS, & ! Normalized kernel for RACCSS - XKER_RACCS, & ! Normalized kernel for RACCS - XKER_SACCRG, & ! Normalized kernel for SACCRG - XKER_N_RACCSS, & ! Normalized kernel for RACCSS - XKER_N_RACCS, & ! Normalized kernel for RACCS - XKER_N_SACCRG ! Normalized kernel for SACCRG -REAL,SAVE :: XFSCVMG ! Melting-conversion factor of + XSCLBDAS_MAX, & ! Max val. of Lbda_s for ACC + XACCLBDAS_MIN, & ! Min val. of Lbda_s for ACC + XACCLBDAS_MAX, & ! Max val. of Lbda_s for ACC + XACCLBDAR_MIN, & ! Min val. of Lbda_r for ACC + XACCLBDAR_MAX, & ! Max val. of Lbda_r for ACC + XACCINTP1S,XACCINTP2S, & ! Csts for bilin. interpol. of + XACCINTP1R,XACCINTP2R ! Lbda_s and Lbda_r in the + ! XKER_RACCSS and XKER_SACCRG + ! tables +INTEGER :: NACCLBDAS, & ! Number of Lbda_s values and + NACCLBDAR ! of Lbda_r values in the + ! XKER_RACCSS and XKER_SACCRG + ! tables +REAL,DIMENSION(:,:) , ALLOCATABLE & + :: XKER_RACCSS, & ! Normalized kernel for RACCSS + XKER_RACCS, & ! Normalized kernel for RACCS + XKER_SACCRG, & ! Normalized kernel for SACCRG + XKER_N_RACCSS, & ! Normalized kernel for RACCSS + XKER_N_RACCS, & ! Normalized kernel for RACCS + XKER_N_SACCRG ! Normalized kernel for SACCRG +REAL :: XFSCVMG ! Melting-conversion factor of ! the aggregates ! -REAL,SAVE :: XCOLIR, & ! Constants for rain contact - XEXRCFRI,XRCFRI, & ! freezing : CFR - XEXICFRR,XICFRR ! +REAL :: XCOLIR, & ! Constants for rain contact + XEXRCFRI,XRCFRI, & ! freezing : CFR + XEXICFRR,XICFRR ! ! -REAL,SAVE :: XFCDRYG, & ! Constants for the dry growth +REAL :: XFCDRYG, & ! Constants for the dry growth XCOLCG, & ! of the graupeln : - XCOLIG,XCOLEXIG,XFIDRYG, & ! + XCOLIG,XCOLEXIG,XFIDRYG, & ! XCOLSG,XCOLEXSG,XFSDRYG,XFNSDRYG, & ! RCDRYG XLBSDRYG1,XLBSDRYG2,XLBSDRYG3, & ! RIDRYG - XLBNSDRYG1,XLBNSDRYG2,XLBNSDRYG3, & ! RIDRYG + XLBNSDRYG1,XLBNSDRYG2,XLBNSDRYG3, & ! RIDRYG XFRDRYG,XFNRDRYG, & ! RSDRYG XLBRDRYG1,XLBRDRYG2,XLBRDRYG3, & ! RRDRYG - XLBNRDRYG1,XLBNRDRYG2,XLBNRDRYG3, & ! RRDRYG + XLBNRDRYG1,XLBNRDRYG2,XLBNRDRYG3, & ! RRDRYG XDRYLBDAR_MIN, & ! Min val. of Lbda_r for DRY - XDRYLBDAR_MAX, & ! Max val. of Lbda_r for DRY + XDRYLBDAR_MAX, & ! Max val. of Lbda_r for DRY XDRYLBDAS_MIN, & ! Min val. of Lbda_s for DRY - XDRYLBDAS_MAX, & ! Max val. of Lbda_s for DRY - XDRYLBDAG_MIN, & ! Min val. of Lbda_g for DRY - XDRYLBDAG_MAX, & ! Max val. of Lbda_g for DRY - XDRYINTP1R,XDRYINTP2R, & ! Csts for bilin. interpol. of - XDRYINTP1S,XDRYINTP2S, & ! Lbda_r, Lbda_s and Lbda_g in - XDRYINTP1G,XDRYINTP2G ! the XKER_SDRYG and XKER_RDRYG + XDRYLBDAS_MAX, & ! Max val. of Lbda_s for DRY + XDRYLBDAG_MIN, & ! Min val. of Lbda_g for DRY + XDRYLBDAG_MAX, & ! Max val. of Lbda_g for DRY + XDRYINTP1R,XDRYINTP2R, & ! Csts for bilin. interpol. of + XDRYINTP1S,XDRYINTP2S, & ! Lbda_r, Lbda_s and Lbda_g in + XDRYINTP1G,XDRYINTP2G ! the XKER_SDRYG and XKER_RDRYG + ! tables +INTEGER :: NDRYLBDAR, & ! Number of Lbda_r, + NDRYLBDAS, & ! of Lbda_s and + NDRYLBDAG ! of Lbda_g values in + ! the XKER_SDRYG and XKER_RDRYG ! tables -INTEGER,SAVE :: NDRYLBDAR, & ! Number of Lbda_r, - NDRYLBDAS, & ! of Lbda_s and - NDRYLBDAG ! of Lbda_g values in - ! the XKER_SDRYG and XKER_RDRYG - ! tables -REAL,DIMENSION(:,:), SAVE, ALLOCATABLE & +REAL,DIMENSION(:,:) , ALLOCATABLE & :: XKER_SDRYG, & ! Normalized kernel for SDRYG - XKER_RDRYG, & ! Normalized kernel for RDRYG - XKER_N_SDRYG, & ! Normalized kernel for RDRYG - XKER_N_RDRYG ! Normalized kernel for RDRYG + XKER_RDRYG, & ! Normalized kernel for RDRYG + XKER_N_SDRYG, & ! Normalized kernel for RDRYG + XKER_N_RDRYG ! Normalized kernel for RDRYG ! !------------------------------------------------------------------------------- ! !* 4. MICROPHYSICAL FACTORS - Hail ! ---------------------------- ! -REAL,SAVE :: XFSEDH,XEXSEDH,XFSEDRH,XFSEDCH ! Constants for sedimentation +REAL :: XFSEDH,XEXSEDH,XFSEDRH,XFSEDCH ! Constants for sedimentation ! ! -REAL,SAVE :: X0DEPH,X1DEPH,XEX0DEPH,XEX1DEPH ! Constants for deposition +REAL :: X0DEPH,X1DEPH,XEX0DEPH,XEX1DEPH ! Constants for deposition ! -REAL,SAVE :: XFWETH,XFSWETH,XFNSWETH, & ! Constants for the wet growth +REAL :: XFWETH,XFSWETH,XFNSWETH, & ! Constants for the wet growth XLBSWETH1,XLBSWETH2,XLBSWETH3, & ! of the hailstones : WET - XLBNSWETH1,XLBNSWETH2,XLBNSWETH3, & ! of the hailstones : WET + XLBNSWETH1,XLBNSWETH2,XLBNSWETH3, & ! of the hailstones : WET XFGWETH, XFNGWETH, & ! processes RSWETH XLBGWETH1,XLBGWETH2,XLBGWETH3, & ! RGWETH - XLBNGWETH1,XLBNGWETH2,XLBNGWETH3, & ! RGWETH + XLBNGWETH1,XLBNGWETH2,XLBNGWETH3, & ! RGWETH XWETLBDAS_MIN, & ! Min val. of Lbda_s for WET XWETLBDAS_MAX, & ! Max val. of Lbda_s for WET XWETLBDAG_MIN, & ! Min val. of Lbda_g for WET @@ -211,17 +212,530 @@ REAL,SAVE :: XFWETH,XFSWETH,XFNSWETH, & ! Constants for the wet growth XWETINTP1G,XWETINTP2G, & ! Lbda_r, Lbda_s and Lbda_g in XWETINTP1H,XWETINTP2H ! the XKER_SWETH and XKER_GWETH ! tables -INTEGER,SAVE :: NWETLBDAS, & ! Number of Lbda_s, +INTEGER :: NWETLBDAS, & ! Number of Lbda_s, NWETLBDAG, & ! of Lbda_g and NWETLBDAH ! of Lbda_h values in ! the XKER_SWETH and XKER_GWETH ! tables -REAL,DIMENSION(:,:), SAVE, ALLOCATABLE & +REAL,DIMENSION(:,:), ALLOCATABLE & :: XKER_SWETH, & ! Normalized kernel for SWETH XKER_GWETH, & ! Normalized kernel for GWETH - XKER_N_SWETH, & ! Normalized kernel for GWETH + XKER_N_SWETH, & ! Normalized kernel for GWETH XKER_N_GWETH ! Normalized kernel for GWETH +END TYPE PARAM_LIMA_MIXED_t +! +TYPE(PARAM_LIMA_MIXED_t), TARGET :: PARAM_LIMA_MIXED +! +REAL, POINTER :: XAG => NULL(), & + XBG => NULL(), & + XCG => NULL(), & + XDG => NULL(), & + XCCG => NULL(), & + XCXG => NULL(), & + XF0G => NULL(), & + XF1G => NULL(), & + XC1G => NULL(), & + XLBEXG => NULL(), & + XLBG => NULL(), & + XNG => NULL(), & + XLBDAG_MAX => NULL(), & + XAH => NULL(), & + XBH => NULL(), & + XCH => NULL(), & + XDH => NULL(), & + XCCH => NULL(), & + XCXH => NULL(), & + XF0H => NULL(), & + XF1H => NULL(), & + XC1H => NULL(), & + XALPHAH => NULL(), & + XNUH => NULL(), & + XLBEXH => NULL(), & + XLBH => NULL(), & + XDCSLIM_CIBU_MIN => NULL(), & + XDCSLIM_CIBU_MAX => NULL(), & + XDCGLIM_CIBU_MIN => NULL(), & + XGAMINC_BOUND_CIBU_SMIN => NULL(), & + XGAMINC_BOUND_CIBU_SMAX => NULL(), & + XGAMINC_BOUND_CIBU_GMIN => NULL(), & + XGAMINC_BOUND_CIBU_GMAX => NULL(), & + XCIBUINTP_S => NULL(), & + XCIBUINTP1_S => NULL(), & + XCIBUINTP2_S => NULL(), & + XCIBUINTP_G => NULL(), & + XCIBUINTP1_G => NULL(), & + XFACTOR_CIBU_NI => NULL(), & + XFACTOR_CIBU_RI => NULL(), & + XMOMGG_CIBU_1 => NULL(), & + XMOMGG_CIBU_2 => NULL(), & + XMOMGS_CIBU_1 => NULL(), & + XMOMGS_CIBU_2 => NULL(), & + XMOMGS_CIBU_3 => NULL(), & + XDCRLIM_RDSF_MIN => NULL(), & + XGAMINC_BOUND_RDSF_RMIN => NULL(), & + XGAMINC_BOUND_RDSF_RMAX => NULL(), & + XRDSFINTP_R => NULL(), & + XRDSFINTP1_R => NULL(), & + XFACTOR_RDSF_NI => NULL(), & + XMOMGR_RDSF => NULL(), & + XFSEDG => NULL(), & + XEXSEDG => NULL(), & + XFSEDRG => NULL(), & + XFSEDCG => NULL(), & + X0DEPG => NULL(), & + X1DEPG => NULL(), & + XEX0DEPG => NULL(), & + XEX1DEPG => NULL(), & + XHMTMIN => NULL(), & + XHMTMAX => NULL(), & + XHM1 => NULL(), & + XHM2 => NULL(), & + XHM_YIELD => NULL(), & + XHM_COLLCS => NULL(), & + XHM_FACTS => NULL(), & + XHM_COLLCG => NULL(), & + XHM_FACTG => NULL(), & + XGAMINC_HMC_BOUND_MIN => NULL(), & + XGAMINC_HMC_BOUND_MAX => NULL(), & + XHMSINTP1 => NULL(), & + XHMSINTP2 => NULL(), & + XHMLINTP1 => NULL(), & + XHMLINTP2 => NULL(), & + XDCSLIM => NULL(), & + XCOLCS => NULL(), & + XEXCRIMSS => NULL(), & + XCRIMSS => NULL(), & + XEXCRIMSG => NULL(), & + XCRIMSG => NULL(), & + XEXSRIMCG => NULL(), & + XSRIMCG => NULL(), & + XSRIMCG2 => NULL(), & + XSRIMCG3 => NULL(), & + XEXSRIMCG2 => NULL(), & + XGAMINC_BOUND_MIN => NULL(), & + XGAMINC_BOUND_MAX => NULL(), & + XRIMINTP1 => NULL(), & + XRIMINTP2 => NULL(), & + XFRACCSS => NULL(), & + XFNRACCSS => NULL(), & + XLBRACCS1 => NULL(), & + XLBRACCS2 => NULL(), & + XLBRACCS3 => NULL(), & + XLBNRACCS1 => NULL(), & + XLBNRACCS2 => NULL(), & + XLBNRACCS3 => NULL(), & + XFSACCRG => NULL(), & + XFNSACCRG => NULL(), & + XLBSACCR1 => NULL(), & + XLBSACCR2 => NULL(), & + XLBSACCR3 => NULL(), & + XLBNSACCR1 => NULL(), & + XLBNSACCR2 => NULL(), & + XLBNSACCR3 => NULL(), & + XSCLBDAS_MIN => NULL(), & + XSCLBDAS_MAX => NULL(), & + XACCLBDAS_MIN => NULL(), & + XACCLBDAS_MAX => NULL(), & + XACCLBDAR_MIN => NULL(), & + XACCLBDAR_MAX => NULL(), & + XACCINTP1S => NULL(), & + XACCINTP2S => NULL(), & + XACCINTP1R => NULL(), & + XACCINTP2R => NULL(), & + XFSCVMG => NULL(), & + XCOLIR => NULL(), & + XEXRCFRI => NULL(), & + XRCFRI => NULL(), & + XEXICFRR => NULL(), & + XICFRR => NULL(), & + XFCDRYG => NULL(), & + XCOLCG => NULL(), & + XCOLIG => NULL(), & + XCOLEXIG => NULL(), & + XFIDRYG => NULL(), & + XCOLSG => NULL(), & + XCOLEXSG => NULL(), & + XFSDRYG => NULL(), & + XFNSDRYG => NULL(), & + XLBSDRYG1 => NULL(), & + XLBSDRYG2 => NULL(), & + XLBSDRYG3 => NULL(), & + XLBNSDRYG1 => NULL(), & + XLBNSDRYG2 => NULL(), & + XLBNSDRYG3 => NULL(), & + XFRDRYG => NULL(), & + XFNRDRYG => NULL(), & + XLBRDRYG1 => NULL(), & + XLBRDRYG2 => NULL(), & + XLBRDRYG3 => NULL(), & + XLBNRDRYG1 => NULL(), & + XLBNRDRYG2 => NULL(), & + XLBNRDRYG3 => NULL(), & + XDRYLBDAR_MIN => NULL(), & + XDRYLBDAR_MAX => NULL(), & + XDRYLBDAS_MIN => NULL(), & + XDRYLBDAS_MAX => NULL(), & + XDRYLBDAG_MIN => NULL(), & + XDRYLBDAG_MAX => NULL(), & + XDRYINTP1R => NULL(), & + XDRYINTP2R => NULL(), & + XDRYINTP1S => NULL(), & + XDRYINTP2S => NULL(), & + XDRYINTP1G => NULL(), & + XDRYINTP2G => NULL(), & + XFSEDH => NULL(), & + XEXSEDH => NULL(), & + XFSEDRH => NULL(), & + XFSEDCH => NULL(), & + X0DEPH => NULL(), & + X1DEPH => NULL(), & + XEX0DEPH => NULL(), & + XEX1DEPH => NULL(), & + XFWETH => NULL(), & + XFSWETH => NULL(), & + XFNSWETH => NULL(), & + XLBSWETH1 => NULL(), & + XLBSWETH2 => NULL(), & + XLBSWETH3 => NULL(), & + XLBNSWETH1 => NULL(), & + XLBNSWETH2 => NULL(), & + XLBNSWETH3 => NULL(), & + XFGWETH => NULL(), & + XFNGWETH => NULL(), & + XLBGWETH1 => NULL(), & + XLBGWETH2 => NULL(), & + XLBGWETH3 => NULL(), & + XLBNGWETH1 => NULL(), & + XLBNGWETH2 => NULL(), & + XLBNGWETH3 => NULL(), & + XWETLBDAS_MIN => NULL(), & + XWETLBDAS_MAX => NULL(), & + XWETLBDAG_MIN => NULL(), & + XWETLBDAG_MAX => NULL(), & + XWETLBDAH_MIN => NULL(), & + XWETLBDAH_MAX => NULL(), & + XWETINTP1S => NULL(), & + XWETINTP2S => NULL(), & + XWETINTP1G => NULL(), & + XWETINTP2G => NULL(), & + XWETINTP1H => NULL(), & + XWETINTP2H => NULL() + +INTEGER, POINTER :: NGAMINC => NULL(), & + NACCLBDAS => NULL(), & + NACCLBDAR => NULL(), & + NDRYLBDAR => NULL(), & + NDRYLBDAS => NULL(), & + NDRYLBDAG => NULL(), & + NWETLBDAS => NULL(), & + NWETLBDAG => NULL(), & + NWETLBDAH => NULL() + +REAL, DIMENSION(:), POINTER :: XGAMINC_RDSF_R => NULL(), & + XGAMINC_RIM1 => NULL(), & + XGAMINC_RIM2 => NULL(), & + XGAMINC_RIM4 => NULL(), & + XGAMINC_HMC => NULL() +REAL, DIMENSION(:,:), POINTER :: XGAMINC_CIBU_S => NULL(), & + XGAMINC_CIBU_G => NULL(), & + XKER_RACCSS => NULL(), & + XKER_RACCS => NULL(), & + XKER_SACCRG => NULL(), & + XKER_N_RACCSS => NULL(), & + XKER_N_RACCS => NULL(), & + XKER_N_SACCRG => NULL(), & + XKER_SDRYG => NULL(), & + XKER_RDRYG => NULL(), & + XKER_N_SDRYG => NULL(), & + XKER_N_RDRYG => NULL(), & + XKER_SWETH => NULL(), & + XKER_GWETH => NULL(), & + XKER_N_SWETH => NULL(), & + XKER_N_GWETH => NULL() +CONTAINS +SUBROUTINE PARAM_LIMA_MIXED_ASSOCIATE() +IF(.NOT. ASSOCIATED(XAG)) THEN + XAG => PARAM_LIMA_MIXED%XAG + XBG => PARAM_LIMA_MIXED%XBG + XCG => PARAM_LIMA_MIXED%XCG + XDG => PARAM_LIMA_MIXED%XDG + XCCG => PARAM_LIMA_MIXED%XCCG + XCXG => PARAM_LIMA_MIXED%XCXG + XF0G => PARAM_LIMA_MIXED%XF0G + XF1G => PARAM_LIMA_MIXED%XF1G + XC1G => PARAM_LIMA_MIXED%XC1G + XLBEXG => PARAM_LIMA_MIXED%XLBEXG + XLBG => PARAM_LIMA_MIXED%XLBG + XNG => PARAM_LIMA_MIXED%XNG + XLBDAG_MAX => PARAM_LIMA_MIXED%XLBDAG_MAX + XAH => PARAM_LIMA_MIXED%XAH + XBH => PARAM_LIMA_MIXED%XBH + XCH => PARAM_LIMA_MIXED%XCH + XDH => PARAM_LIMA_MIXED%XDH + XCCH => PARAM_LIMA_MIXED%XCCH + XCXH => PARAM_LIMA_MIXED%XCXH + XF0H => PARAM_LIMA_MIXED%XF0H + XF1H => PARAM_LIMA_MIXED%XF1H + XC1H => PARAM_LIMA_MIXED%XC1H + XALPHAH => PARAM_LIMA_MIXED%XALPHAH + XNUH => PARAM_LIMA_MIXED%XNUH + XLBEXH => PARAM_LIMA_MIXED%XLBEXH + XLBH => PARAM_LIMA_MIXED%XLBH + XDCSLIM_CIBU_MIN => PARAM_LIMA_MIXED%XDCSLIM_CIBU_MIN + XDCSLIM_CIBU_MAX => PARAM_LIMA_MIXED%XDCSLIM_CIBU_MAX + XDCGLIM_CIBU_MIN => PARAM_LIMA_MIXED%XDCGLIM_CIBU_MIN + XGAMINC_BOUND_CIBU_SMIN => PARAM_LIMA_MIXED%XGAMINC_BOUND_CIBU_SMIN + XGAMINC_BOUND_CIBU_SMAX => PARAM_LIMA_MIXED%XGAMINC_BOUND_CIBU_SMAX + XGAMINC_BOUND_CIBU_GMIN => PARAM_LIMA_MIXED%XGAMINC_BOUND_CIBU_GMIN + XGAMINC_BOUND_CIBU_GMAX => PARAM_LIMA_MIXED%XGAMINC_BOUND_CIBU_GMAX + XCIBUINTP_S => PARAM_LIMA_MIXED%XCIBUINTP_S + XCIBUINTP1_S => PARAM_LIMA_MIXED%XCIBUINTP1_S + XCIBUINTP2_S => PARAM_LIMA_MIXED%XCIBUINTP2_S + XCIBUINTP_G => PARAM_LIMA_MIXED%XCIBUINTP_G + XCIBUINTP1_G => PARAM_LIMA_MIXED%XCIBUINTP1_G + XFACTOR_CIBU_NI => PARAM_LIMA_MIXED%XFACTOR_CIBU_NI + XFACTOR_CIBU_RI => PARAM_LIMA_MIXED%XFACTOR_CIBU_RI + XMOMGG_CIBU_1 => PARAM_LIMA_MIXED%XMOMGG_CIBU_1 + XMOMGG_CIBU_2 => PARAM_LIMA_MIXED%XMOMGG_CIBU_2 + XMOMGS_CIBU_1 => PARAM_LIMA_MIXED%XMOMGS_CIBU_1 + XMOMGS_CIBU_2 => PARAM_LIMA_MIXED%XMOMGS_CIBU_2 + XMOMGS_CIBU_3 => PARAM_LIMA_MIXED%XMOMGS_CIBU_3 + XDCRLIM_RDSF_MIN => PARAM_LIMA_MIXED%XDCRLIM_RDSF_MIN + XGAMINC_BOUND_RDSF_RMIN => PARAM_LIMA_MIXED%XGAMINC_BOUND_RDSF_RMIN + XGAMINC_BOUND_RDSF_RMAX => PARAM_LIMA_MIXED%XGAMINC_BOUND_RDSF_RMAX + XRDSFINTP_R => PARAM_LIMA_MIXED%XRDSFINTP_R + XRDSFINTP1_R => PARAM_LIMA_MIXED%XRDSFINTP1_R + XFACTOR_RDSF_NI => PARAM_LIMA_MIXED%XFACTOR_RDSF_NI + XMOMGR_RDSF => PARAM_LIMA_MIXED%XMOMGR_RDSF + XFSEDG => PARAM_LIMA_MIXED%XFSEDG + XEXSEDG => PARAM_LIMA_MIXED%XEXSEDG + XFSEDRG => PARAM_LIMA_MIXED%XFSEDRG + XFSEDCG => PARAM_LIMA_MIXED%XFSEDCG + X0DEPG => PARAM_LIMA_MIXED%X0DEPG + X1DEPG => PARAM_LIMA_MIXED%X1DEPG + XEX0DEPG => PARAM_LIMA_MIXED%XEX0DEPG + XEX1DEPG => PARAM_LIMA_MIXED%XEX1DEPG + XHMTMIN => PARAM_LIMA_MIXED%XHMTMIN + XHMTMAX => PARAM_LIMA_MIXED%XHMTMAX + XHM1 => PARAM_LIMA_MIXED%XHM1 + XHM2 => PARAM_LIMA_MIXED%XHM2 + XHM_YIELD => PARAM_LIMA_MIXED%XHM_YIELD + XHM_COLLCS => PARAM_LIMA_MIXED%XHM_COLLCS + XHM_FACTS => PARAM_LIMA_MIXED%XHM_FACTS + XHM_COLLCG => PARAM_LIMA_MIXED%XHM_COLLCG + XHM_FACTG => PARAM_LIMA_MIXED%XHM_FACTG + XGAMINC_HMC_BOUND_MIN => PARAM_LIMA_MIXED%XGAMINC_HMC_BOUND_MIN + XGAMINC_HMC_BOUND_MAX => PARAM_LIMA_MIXED%XGAMINC_HMC_BOUND_MAX + XHMSINTP1 => PARAM_LIMA_MIXED%XHMSINTP1 + XHMSINTP2 => PARAM_LIMA_MIXED%XHMSINTP2 + XHMLINTP1 => PARAM_LIMA_MIXED%XHMLINTP1 + XHMLINTP2 => PARAM_LIMA_MIXED%XHMLINTP2 + XDCSLIM => PARAM_LIMA_MIXED%XDCSLIM + XCOLCS => PARAM_LIMA_MIXED%XCOLCS + XEXCRIMSS => PARAM_LIMA_MIXED%XEXCRIMSS + XCRIMSS => PARAM_LIMA_MIXED%XCRIMSS + XEXCRIMSG => PARAM_LIMA_MIXED%XEXCRIMSG + XCRIMSG => PARAM_LIMA_MIXED%XCRIMSG + XEXSRIMCG => PARAM_LIMA_MIXED%XEXSRIMCG + XSRIMCG => PARAM_LIMA_MIXED%XSRIMCG + XSRIMCG2 => PARAM_LIMA_MIXED%XSRIMCG2 + XSRIMCG3 => PARAM_LIMA_MIXED%XSRIMCG3 + XEXSRIMCG2 => PARAM_LIMA_MIXED%XEXSRIMCG2 + XGAMINC_BOUND_MIN => PARAM_LIMA_MIXED%XGAMINC_BOUND_MIN + XGAMINC_BOUND_MAX => PARAM_LIMA_MIXED%XGAMINC_BOUND_MAX + XRIMINTP1 => PARAM_LIMA_MIXED%XRIMINTP1 + XRIMINTP2 => PARAM_LIMA_MIXED%XRIMINTP2 + XFRACCSS => PARAM_LIMA_MIXED%XFRACCSS + XFNRACCSS => PARAM_LIMA_MIXED%XFNRACCSS + XLBRACCS1 => PARAM_LIMA_MIXED%XLBRACCS1 + XLBRACCS2 => PARAM_LIMA_MIXED%XLBRACCS2 + XLBRACCS3 => PARAM_LIMA_MIXED%XLBRACCS3 + XLBNRACCS1 => PARAM_LIMA_MIXED%XLBNRACCS1 + XLBNRACCS2 => PARAM_LIMA_MIXED%XLBNRACCS2 + XLBNRACCS3 => PARAM_LIMA_MIXED%XLBNRACCS3 + XFSACCRG => PARAM_LIMA_MIXED%XFSACCRG + XFNSACCRG => PARAM_LIMA_MIXED%XFNSACCRG + XLBSACCR1 => PARAM_LIMA_MIXED%XLBSACCR1 + XLBSACCR2 => PARAM_LIMA_MIXED%XLBSACCR2 + XLBSACCR3 => PARAM_LIMA_MIXED%XLBSACCR3 + XLBNSACCR1 => PARAM_LIMA_MIXED%XLBNSACCR1 + XLBNSACCR2 => PARAM_LIMA_MIXED%XLBNSACCR2 + XLBNSACCR3 => PARAM_LIMA_MIXED%XLBNSACCR3 + XSCLBDAS_MIN => PARAM_LIMA_MIXED%XSCLBDAS_MIN + XSCLBDAS_MAX => PARAM_LIMA_MIXED%XSCLBDAS_MAX + XACCLBDAS_MIN => PARAM_LIMA_MIXED%XACCLBDAS_MIN + XACCLBDAS_MAX => PARAM_LIMA_MIXED%XACCLBDAS_MAX + XACCLBDAR_MIN => PARAM_LIMA_MIXED%XACCLBDAR_MIN + XACCLBDAR_MAX => PARAM_LIMA_MIXED%XACCLBDAR_MAX + XACCINTP1S => PARAM_LIMA_MIXED%XACCINTP1S + XACCINTP2S => PARAM_LIMA_MIXED%XACCINTP2S + XACCINTP1R => PARAM_LIMA_MIXED%XACCINTP1R + XACCINTP2R => PARAM_LIMA_MIXED%XACCINTP2R + XFSCVMG => PARAM_LIMA_MIXED%XFSCVMG + XCOLIR => PARAM_LIMA_MIXED%XCOLIR + XEXRCFRI => PARAM_LIMA_MIXED%XEXRCFRI + XRCFRI => PARAM_LIMA_MIXED%XRCFRI + XEXICFRR => PARAM_LIMA_MIXED%XEXICFRR + XICFRR => PARAM_LIMA_MIXED%XICFRR + XFCDRYG => PARAM_LIMA_MIXED%XFCDRYG + XCOLCG => PARAM_LIMA_MIXED%XCOLCG + XCOLIG => PARAM_LIMA_MIXED%XCOLIG + XCOLEXIG => PARAM_LIMA_MIXED%XCOLEXIG + XFIDRYG => PARAM_LIMA_MIXED%XFIDRYG + XCOLSG => PARAM_LIMA_MIXED%XCOLSG + XCOLEXSG => PARAM_LIMA_MIXED%XCOLEXSG + XFSDRYG => PARAM_LIMA_MIXED%XFSDRYG + XFNSDRYG => PARAM_LIMA_MIXED%XFNSDRYG + XLBSDRYG1 => PARAM_LIMA_MIXED%XLBSDRYG1 + XLBSDRYG2 => PARAM_LIMA_MIXED%XLBSDRYG2 + XLBSDRYG3 => PARAM_LIMA_MIXED%XLBSDRYG3 + XLBNSDRYG1 => PARAM_LIMA_MIXED%XLBNSDRYG1 + XLBNSDRYG2 => PARAM_LIMA_MIXED%XLBNSDRYG2 + XLBNSDRYG3 => PARAM_LIMA_MIXED%XLBNSDRYG3 + XFRDRYG => PARAM_LIMA_MIXED%XFRDRYG + XFNRDRYG => PARAM_LIMA_MIXED%XFNRDRYG + XLBRDRYG1 => PARAM_LIMA_MIXED%XLBRDRYG1 + XLBRDRYG2 => PARAM_LIMA_MIXED%XLBRDRYG2 + XLBRDRYG3 => PARAM_LIMA_MIXED%XLBRDRYG3 + XLBNRDRYG1 => PARAM_LIMA_MIXED%XLBNRDRYG1 + XLBNRDRYG2 => PARAM_LIMA_MIXED%XLBNRDRYG2 + XLBNRDRYG3 => PARAM_LIMA_MIXED%XLBNRDRYG3 + XDRYLBDAR_MIN => PARAM_LIMA_MIXED%XDRYLBDAR_MIN + XDRYLBDAR_MAX => PARAM_LIMA_MIXED%XDRYLBDAR_MAX + XDRYLBDAS_MIN => PARAM_LIMA_MIXED%XDRYLBDAS_MIN + XDRYLBDAS_MAX => PARAM_LIMA_MIXED%XDRYLBDAS_MAX + XDRYLBDAG_MIN => PARAM_LIMA_MIXED%XDRYLBDAG_MIN + XDRYLBDAG_MAX => PARAM_LIMA_MIXED%XDRYLBDAG_MAX + XDRYINTP1R => PARAM_LIMA_MIXED%XDRYINTP1R + XDRYINTP2R => PARAM_LIMA_MIXED%XDRYINTP2R + XDRYINTP1S => PARAM_LIMA_MIXED%XDRYINTP1S + XDRYINTP2S => PARAM_LIMA_MIXED%XDRYINTP2S + XDRYINTP1G => PARAM_LIMA_MIXED%XDRYINTP1G + XDRYINTP2G => PARAM_LIMA_MIXED%XDRYINTP2G + XFSEDH => PARAM_LIMA_MIXED%XFSEDH + XEXSEDH => PARAM_LIMA_MIXED%XEXSEDH + XFSEDRH => PARAM_LIMA_MIXED%XFSEDRH + XFSEDCH => PARAM_LIMA_MIXED%XFSEDCH + X0DEPH => PARAM_LIMA_MIXED%X0DEPH + X1DEPH => PARAM_LIMA_MIXED%X1DEPH + XEX0DEPH => PARAM_LIMA_MIXED%XEX0DEPH + XEX1DEPH => PARAM_LIMA_MIXED%XEX1DEPH + XFWETH => PARAM_LIMA_MIXED%XFWETH + XFSWETH => PARAM_LIMA_MIXED%XFSWETH + XFNSWETH => PARAM_LIMA_MIXED%XFNSWETH + XLBSWETH1 => PARAM_LIMA_MIXED%XLBSWETH1 + XLBSWETH2 => PARAM_LIMA_MIXED%XLBSWETH2 + XLBSWETH3 => PARAM_LIMA_MIXED%XLBSWETH3 + XLBNSWETH1 => PARAM_LIMA_MIXED%XLBNSWETH1 + XLBNSWETH2 => PARAM_LIMA_MIXED%XLBNSWETH2 + XLBNSWETH3 => PARAM_LIMA_MIXED%XLBNSWETH3 + XFGWETH => PARAM_LIMA_MIXED%XFGWETH + XFNGWETH => PARAM_LIMA_MIXED%XFNGWETH + XLBGWETH1 => PARAM_LIMA_MIXED%XLBGWETH1 + XLBGWETH2 => PARAM_LIMA_MIXED%XLBGWETH2 + XLBGWETH3 => PARAM_LIMA_MIXED%XLBGWETH3 + XLBNGWETH1 => PARAM_LIMA_MIXED%XLBNGWETH1 + XLBNGWETH2 => PARAM_LIMA_MIXED%XLBNGWETH2 + XLBNGWETH3 => PARAM_LIMA_MIXED%XLBNGWETH3 + XWETLBDAS_MIN => PARAM_LIMA_MIXED%XWETLBDAS_MIN + XWETLBDAS_MAX => PARAM_LIMA_MIXED%XWETLBDAS_MAX + XWETLBDAG_MIN => PARAM_LIMA_MIXED%XWETLBDAG_MIN + XWETLBDAG_MAX => PARAM_LIMA_MIXED%XWETLBDAG_MAX + XWETLBDAH_MIN => PARAM_LIMA_MIXED%XWETLBDAH_MIN + XWETLBDAH_MAX => PARAM_LIMA_MIXED%XWETLBDAH_MAX + XWETINTP1S => PARAM_LIMA_MIXED%XWETINTP1S + XWETINTP2S => PARAM_LIMA_MIXED%XWETINTP2S + XWETINTP1G => PARAM_LIMA_MIXED%XWETINTP1G + XWETINTP2G => PARAM_LIMA_MIXED%XWETINTP2G + XWETINTP1H => PARAM_LIMA_MIXED%XWETINTP1H + XWETINTP2H => PARAM_LIMA_MIXED%XWETINTP2H + + NGAMINC => PARAM_LIMA_MIXED%NGAMINC + NACCLBDAS => PARAM_LIMA_MIXED%NACCLBDAS + NACCLBDAR => PARAM_LIMA_MIXED%NACCLBDAR + NDRYLBDAR => PARAM_LIMA_MIXED%NDRYLBDAR + NDRYLBDAS => PARAM_LIMA_MIXED%NDRYLBDAS + NDRYLBDAG => PARAM_LIMA_MIXED%NDRYLBDAG + NWETLBDAS => PARAM_LIMA_MIXED%NWETLBDAS + NWETLBDAG => PARAM_LIMA_MIXED%NWETLBDAG + NWETLBDAH => PARAM_LIMA_MIXED%NWETLBDAH +ENDIF +END SUBROUTINE PARAM_LIMA_MIXED_ASSOCIATE +! +SUBROUTINE PARAM_LIMA_MIXED_ALLOCATE(HNAME, KDIM1, KDIM2) + IMPLICIT NONE + CHARACTER(LEN=*), INTENT(IN) :: HNAME + INTEGER, INTENT(IN) :: KDIM1 + INTEGER, OPTIONAL, INTENT(IN):: KDIM2 + SELECT CASE(TRIM(HNAME)) + !1d + CASE('XGAMINC_RDSF_R') + ALLOCATE(PARAM_LIMA_MIXED%XGAMINC_RDSF_R(KDIM1)) + XGAMINC_RDSF_R => PARAM_LIMA_MIXED%XGAMINC_RDSF_R + CASE('XGAMINC_RIM1') + ALLOCATE(PARAM_LIMA_MIXED%XGAMINC_RIM1(KDIM1)) + XGAMINC_RIM1 => PARAM_LIMA_MIXED%XGAMINC_RIM1 + CASE('XGAMINC_RIM2') + ALLOCATE(PARAM_LIMA_MIXED%XGAMINC_RIM2(KDIM1)) + XGAMINC_RIM2 => PARAM_LIMA_MIXED%XGAMINC_RIM2 + CASE('XGAMINC_RIM4') + ALLOCATE(PARAM_LIMA_MIXED%XGAMINC_RIM4(KDIM1)) + XGAMINC_RIM4 => PARAM_LIMA_MIXED%XGAMINC_RIM4 + CASE('XGAMINC_HMC') + ALLOCATE(PARAM_LIMA_MIXED%XGAMINC_HMC(KDIM1)) + XGAMINC_HMC => PARAM_LIMA_MIXED%XGAMINC_HMC + !2d + CASE('XGAMINC_CIBU_S') + ALLOCATE(PARAM_LIMA_MIXED%XGAMINC_CIBU_S(KDIM1, KDIM2)) + XGAMINC_CIBU_S => PARAM_LIMA_MIXED%XGAMINC_CIBU_S + CASE('XGAMINC_CIBU_G') + ALLOCATE(PARAM_LIMA_MIXED%XGAMINC_CIBU_G(KDIM1, KDIM2)) + XGAMINC_CIBU_G => PARAM_LIMA_MIXED%XGAMINC_CIBU_G + CASE('XKER_RACCSS') + ALLOCATE(PARAM_LIMA_MIXED%XKER_RACCSS(KDIM1, KDIM2)) + XKER_RACCSS => PARAM_LIMA_MIXED%XKER_RACCSS + CASE('XKER_RACCS') + ALLOCATE(PARAM_LIMA_MIXED%XKER_RACCS(KDIM1, KDIM2)) + XKER_RACCS => PARAM_LIMA_MIXED%XKER_RACCS + CASE('XKER_SACCRG') + ALLOCATE(PARAM_LIMA_MIXED%XKER_SACCRG(KDIM1, KDIM2)) + XKER_SACCRG => PARAM_LIMA_MIXED%XKER_SACCRG + CASE('XKER_N_RACCSS') + ALLOCATE(PARAM_LIMA_MIXED%XKER_N_RACCSS(KDIM1, KDIM2)) + XKER_N_RACCSS => PARAM_LIMA_MIXED%XKER_N_RACCSS + CASE('XKER_N_RACCS') + ALLOCATE(PARAM_LIMA_MIXED%XKER_N_RACCS(KDIM1, KDIM2)) + XKER_N_RACCS => PARAM_LIMA_MIXED%XKER_N_RACCS + CASE('XKER_N_SACCRG') + ALLOCATE(PARAM_LIMA_MIXED%XKER_N_SACCRG(KDIM1, KDIM2)) + XKER_N_SACCRG => PARAM_LIMA_MIXED%XKER_N_SACCRG + CASE('XKER_SDRYG') + ALLOCATE(PARAM_LIMA_MIXED%XKER_SDRYG(KDIM1, KDIM2)) + XKER_SDRYG => PARAM_LIMA_MIXED%XKER_SDRYG + CASE('XKER_RDRYG') + ALLOCATE(PARAM_LIMA_MIXED%XKER_RDRYG(KDIM1, KDIM2)) + XKER_RDRYG => PARAM_LIMA_MIXED%XKER_RDRYG + CASE('XKER_N_SDRYG') + ALLOCATE(PARAM_LIMA_MIXED%XKER_N_SDRYG(KDIM1, KDIM2)) + XKER_N_SDRYG => PARAM_LIMA_MIXED%XKER_N_SDRYG + CASE('XKER_N_RDRYG') + ALLOCATE(PARAM_LIMA_MIXED%XKER_N_RDRYG(KDIM1, KDIM2)) + XKER_N_RDRYG => PARAM_LIMA_MIXED%XKER_N_RDRYG + CASE('XKER_SWETH') + ALLOCATE(PARAM_LIMA_MIXED%XKER_SWETH(KDIM1, KDIM2)) + XKER_SWETH => PARAM_LIMA_MIXED%XKER_SWETH + CASE('XKER_GWETH') + ALLOCATE(PARAM_LIMA_MIXED%XKER_GWETH(KDIM1, KDIM2)) + XKER_GWETH => PARAM_LIMA_MIXED%XKER_GWETH + CASE('XKER_N_SWETH') + ALLOCATE(PARAM_LIMA_MIXED%XKER_N_SWETH(KDIM1, KDIM2)) + XKER_N_SWETH => PARAM_LIMA_MIXED%XKER_N_SWETH + CASE('XKER_N_GWETH') + ALLOCATE(PARAM_LIMA_MIXED%XKER_N_GWETH(KDIM1, KDIM2)) + XKER_N_GWETH => PARAM_LIMA_MIXED%XKER_N_GWETH + END SELECT +END SUBROUTINE PARAM_LIMA_MIXED_ALLOCATE ! !------------------------------------------------------------------------------- ! diff --git a/src/common/micro/modd_param_lima_warm.F90 b/src/common/micro/modd_param_lima_warm.F90 index cf555286d5cf4f3b6a402abb08dd2276d9c5a988..dceef01470aa8824b0edb130585b766ab956fad9 100644 --- a/src/common/micro/modd_param_lima_warm.F90 +++ b/src/common/micro/modd_param_lima_warm.F90 @@ -8,119 +8,369 @@ ! ########################### ! !!**** *MODD_PARAM_LIMA_WARM* - declaration of some descriptive parameters and -!! microphysical factors extensively used in +!! microphysical factors extensively used in !! the LIMA warm scheme. !! AUTHOR !! ------ -!! J.-P. Pinty *Laboratoire d'Aerologie* +!! J.-P. Pinty * Laboratoire d'Aerologie* !! S. Berthet * Laboratoire d'Aerologie* !! B. Vié * Laboratoire d'Aerologie* !! !! MODIFICATIONS !! ------------- -!! Original ??/??/13 +!! Original ??/??/13 !! !------------------------------------------------------------------------------- USE MODD_PARAMETERS, ONLY: JPSVNAMELGTMAX ! -IMPLICIT NONE +IMPLICIT NONE ! !* 1. DESCRIPTIVE PARAMETERS ! ---------------------- ! -REAL,SAVE :: XLBC, XLBEXC, & ! shape parameters of the cloud droplets +TYPE PARAM_LIMA_WARM_t +REAL :: XLBC, XLBEXC, & ! shape parameters of the cloud droplets XLBR, XLBEXR, XNR ! shape parameters of the raindrops ! -REAL,SAVE :: XAR,XBR,XCR,XDR,XF0R,XF1R, & ! Raindrop charact. +REAL :: XAR,XBR,XCR,XDR,XF0R,XF1R, & ! Raindrop charact. XCCR,XCXR, & !For diagnostics XAC,XBC,XCC,XDC,XF0C,XF2C,XC1C ! Cloud droplet charact. ! ! -CHARACTER(LEN=JPSVNAMELGTMAX),DIMENSION(5),PARAMETER & - :: CLIMA_WARM_NAMES=(/'CCLOUD ','CRAIN ','CCCNFREE','CCCNACTI','SPRO '/) - ! basenames of the SV articles stored - ! in the binary files -CHARACTER(LEN=JPSVNAMELGTMAX),DIMENSION(5),PARAMETER & - :: CLIMA_WARM_CONC=(/'NC ','NR ','NFREE','NCCN ','SS '/) -! ! basenames of the SV articles stored -! ! in the binary files for DIAG -! -!* Special issue for Below-Cloud SCAVenging of Aerosol particles -CHARACTER(LEN=JPSVNAMELGTMAX),DIMENSION(2) :: CAERO_MASS =(/'MASSAP', 'MAP '/) ! !------------------------------------------------------------------------------- ! !* 2. MICROPHYSICAL FACTORS ! --------------------- ! -REAL,SAVE :: XFSEDRR,XFSEDCR, & ! Constants for sedimentation +REAL :: XFSEDRR,XFSEDCR, & ! Constants for sedimentation XFSEDRC,XFSEDCC ! fluxes of R, C ! ! -REAL,SAVE :: XDIVA, & ! Diffusivity of water vapor - XTHCO ! Thermal conductivity -REAL,SAVE :: XWMIN ! Min value of updraft velocity - ! to enable nucleation process -REAL,SAVE :: XTMIN ! Min value of +REAL :: XDIVA, & ! Diffusivity of water vapor + XTHCO ! Thermal conductivity +REAL :: XWMIN ! Min value of updraft velocity + ! to enable nucleation process +REAL :: XTMIN ! Min value of ! temperature evolution - ! to enable nucleation process -REAL,SAVE :: XCSTHEN,XCSTDCRIT ! Cst for HEN precalculations -INTEGER, SAVE :: NHYP ! Number of value of the HYP - ! functions -REAL,SAVE :: XHYPINTP1, XHYPINTP2 ! Factors defining the - ! supersaturation log scale -REAL, DIMENSION(:,:), SAVE, ALLOCATABLE & ! Tabulated HYPgeometric - :: XHYPF12, XHYPF32 ! functions used in HEN -INTEGER, SAVE :: NAHEN ! Number of value of the AHEN - ! functions -REAL,SAVE :: XAHENINTP1, XAHENINTP2 ! Factors defining the - ! temperatures in lin scale -REAL, DIMENSION(:), SAVE, ALLOCATABLE & ! + ! to enable nucleation process +REAL :: XCSTHEN,XCSTDCRIT ! Cst for HEN precalculations +INTEGER :: NHYP ! Number of value of the HYP + ! functions +REAL :: XHYPINTP1, XHYPINTP2 ! Factors defining the + ! supersaturation log scale +REAL, DIMENSION(:,:), ALLOCATABLE & ! Tabulated HYPgeometric + :: XHYPF12, XHYPF32 ! functions used in HEN +INTEGER :: NAHEN ! Number of value of the AHEN + ! functions +REAL :: XAHENINTP1, XAHENINTP2 ! Factors defining the + ! temperatures in lin scale +REAL, DIMENSION(:), ALLOCATABLE & ! :: XAHENG,XAHENG2,XAHENG3,XPSI1, XPSI3, & ! Twomey-CPB98 and - XAHENF,XAHENY ! Feingold-Heymsfield - ! parameterization to compute Smax -REAL,SAVE :: XWCOEF_F1, XWCOEF_F2, XWCOEF_F3, & ! COEF_F of the polynomial temp. + XAHENF,XAHENY ! Feingold-Heymsfield + ! parameterization to compute Smax +REAL :: XWCOEF_F1, XWCOEF_F2, XWCOEF_F3, & ! COEF_F of the polynomial temp. XWCOEF_Y1, XWCOEF_Y2, XWCOEF_Y3 ! COEF_Y of the polynomial temp. - ! function powering W + ! function powering W ! ! -REAL,SAVE :: XKERA1, XKERA2 ! Constants to define the lin - ! and parabolic kernel param. -REAL,SAVE :: XSELFC ! Constants for cloud droplet +REAL :: XKERA1, XKERA2 ! Constants to define the lin + ! and parabolic kernel param. +REAL :: XSELFC ! Constants for cloud droplet ! selfcollection : SELF ! -REAL,SAVE :: XAUTO1, XAUTO2, XCAUTR, & ! Constants for cloud droplet - XLAUTR, XLAUTR_THRESHOLD, & ! autoconversion : AUT - XITAUTR, XITAUTR_THRESHOLD, XR0 ! XR0 for KHKO autoconversion +REAL :: XAUTO1, XAUTO2, XCAUTR, & ! Constants for cloud droplet + XLAUTR, XLAUTR_THRESHOLD, & ! autoconversion : AUT + XITAUTR, XITAUTR_THRESHOLD, XR0 ! XR0 for KHKO autoconversion ! -REAL,SAVE :: XACCR1, XACCR2, XACCR3, & ! Constants for the accretion - XACCR4, XACCR5, XACCR6, & ! process +REAL :: XACCR1, XACCR2, XACCR3, & ! Constants for the accretion + XACCR4, XACCR5, XACCR6, & ! process XACCR_CLARGE1, XACCR_CLARGE2, XACCR_RLARGE1, XACCR_RLARGE2, & XACCR_CSMALL1, XACCR_CSMALL2, XACCR_RSMALL1, XACCR_RSMALL2, & XFCACCR, XEXCACCR ! -REAL,SAVE :: XSCBU2, XSCBU3, & ! Constants for the raindrop +REAL :: XSCBU2, XSCBU3, & ! Constants for the raindrop XSCBU_EFF1, XSCBU_EFF2, XSCBUEXP1 ! breakup-selfcollection: SCBU ! -REAL,SAVE :: XSPONBUD1,XSPONBUD2,XSPONBUD3, & ! Spontaneous Break-up +REAL :: XSPONBUD1,XSPONBUD2,XSPONBUD3, & ! Spontaneous Break-up XSPONCOEF2 ! (drop size limiter) ! -REAL,SAVE :: X0EVAR, X1EVAR, & ! Constants for raindrop - XEX0EVAR, XEX1EVAR, XEX2EVAR, & ! evaporation: EVA +REAL :: X0EVAR, X1EVAR, & ! Constants for raindrop + XEX0EVAR, XEX1EVAR, XEX2EVAR, & ! evaporation: EVA XCEVAP ! for KHKO ! -REAL,DIMENSION(:,:,:,:), SAVE, ALLOCATABLE :: XCONCC_INI -REAL,SAVE :: XCONCR_PARAM_INI - ! Used to initialize the +REAL,DIMENSION(:,:,:,:), ALLOCATABLE :: XCONCC_INI +REAL :: XCONCR_PARAM_INI + ! Used to initialize the ! concentrations from mixing ratios ! (init and grid-nesting from Kessler) ! -REAL,SAVE :: X0CNDC, X2CNDC ! Constants for cloud droplet +REAL :: X0CNDC, X2CNDC ! Constants for cloud droplet ! condensation/evaporation -REAL,SAVE :: XFREFFC ! Factor to compute the cloud droplet effective radius -REAL,SAVE :: XFREFFR ! Factor to compute the rain drop effective radius -REAL,SAVE :: XCREC, XCRER +REAL :: XFREFFC ! Factor to compute the cloud droplet effective radius +REAL :: XFREFFR ! Factor to compute the rain drop effective radius +REAL :: XCREC, XCRER ! Factors to compute reff when cloud and rain are present +END TYPE PARAM_LIMA_WARM_t +! +TYPE(PARAM_LIMA_WARM_t), TARGET, SAVE :: PARAM_LIMA_WARM +! +REAL, POINTER :: XLBC => NULL(), & + XLBEXC => NULL(), & + XLBR => NULL(), & + XLBEXR => NULL(), & + XNR => NULL(), & + XAR => NULL(), & + XBR => NULL(), & + XCR => NULL(), & + XDR => NULL(), & + XF0R => NULL(), & + XF1R => NULL(), & + XCCR => NULL(), & + XCXR => NULL(), & + XAC => NULL(), & + XBC => NULL(), & + XCC => NULL(), & + XDC => NULL(), & + XF0C => NULL(), & + XF2C => NULL(), & + XC1C => NULL(), & + XFSEDRR => NULL(), & + XFSEDCR => NULL(), & + XFSEDRC => NULL(), & + XFSEDCC => NULL(), & + XDIVA => NULL(), & + XTHCO => NULL(), & + XWMIN => NULL(), & + XTMIN => NULL(), & + XCSTHEN => NULL(), & + XCSTDCRIT => NULL(), & + XHYPINTP1 => NULL(), & + XHYPINTP2 => NULL(), & + XAHENINTP1 => NULL(), & + XAHENINTP2 => NULL(), & + XWCOEF_F1 => NULL(), & + XWCOEF_F2 => NULL(), & + XWCOEF_F3 => NULL(), & + XWCOEF_Y1 => NULL(), & + XWCOEF_Y2 => NULL(), & + XWCOEF_Y3 => NULL(), & + XKERA1 => NULL(), & + XKERA2 => NULL(), & + XSELFC => NULL(), & + XAUTO1 => NULL(), & + XAUTO2 => NULL(), & + XCAUTR => NULL(), & + XLAUTR => NULL(), & + XLAUTR_THRESHOLD => NULL(), & + XITAUTR => NULL(), & + XITAUTR_THRESHOLD => NULL(), & + XR0 => NULL(), & + XACCR1 => NULL(), & + XACCR2 => NULL(), & + XACCR3 => NULL(), & + XACCR4 => NULL(), & + XACCR5 => NULL(), & + XACCR6 => NULL(), & + XACCR_CLARGE1 => NULL(), & + XACCR_CLARGE2 => NULL(), & + XACCR_RLARGE1 => NULL(), & + XACCR_RLARGE2 => NULL(), & + XACCR_CSMALL1 => NULL(), & + XACCR_CSMALL2 => NULL(), & + XACCR_RSMALL1 => NULL(), & + XACCR_RSMALL2 => NULL(), & + XFCACCR => NULL(), & + XEXCACCR => NULL(), & + XSCBU2 => NULL(), & + XSCBU3 => NULL(), & + XSCBU_EFF1 => NULL(), & + XSCBU_EFF2 => NULL(), & + XSCBUEXP1 => NULL(), & + XSPONBUD1 => NULL(), & + XSPONBUD2 => NULL(), & + XSPONBUD3 => NULL(), & + XSPONCOEF2 => NULL(), & + X0EVAR => NULL(), & + X1EVAR => NULL(), & + XEX0EVAR => NULL(), & + XEX1EVAR => NULL(), & + XEX2EVAR => NULL(), & + XCEVAP => NULL(), & + XCONCR_PARAM_INI => NULL(), & + X0CNDC => NULL(), & + X2CNDC => NULL(), & + XFREFFC => NULL(), & + XFREFFR => NULL(), & + XCREC => NULL(), & + XCRER => NULL() + +INTEGER, POINTER :: NHYP => NULL(), & + NAHEN => NULL() + +REAL, DIMENSION(:,:), POINTER :: XHYPF12 => NULL(), & + XHYPF32 => NULL() +REAL, DIMENSION(:), POINTER :: XAHENG => NULL(), & + XAHENG2 => NULL(), & + XAHENG3 => NULL(), & + XPSI1 => NULL(), & + XPSI3 => NULL(), & + XAHENF => NULL(), & + XAHENY => NULL() +REAL,DIMENSION(:,:,:,:), POINTER :: XCONCC_INI => NULL() +! +CHARACTER(LEN=JPSVNAMELGTMAX),DIMENSION(5),PARAMETER & + :: CLIMA_WARM_NAMES=(/'CCLOUD ','CRAIN ','CCCNFREE','CCCNACTI','SPRO '/) + ! basenames of the SV articles stored + ! in the binary files +CHARACTER(LEN=JPSVNAMELGTMAX),DIMENSION(5),PARAMETER & + :: CLIMA_WARM_CONC=(/'NC ','NR ','NFREE','NCCN ','SS '/) +! ! basenames of the SV articles stored +! ! in the binary files for DIAG +! +!* Special issue for Below-Cloud SCAVenging of Aerosol particles +CHARACTER(LEN=JPSVNAMELGTMAX),DIMENSION(2),PARAMETER :: CAERO_MASS =(/'MASSAP', 'MAP '/) +! +CONTAINS +SUBROUTINE PARAM_LIMA_WARM_ASSOCIATE() +IMPLICIT NONE +IF(.NOT. ASSOCIATED(XLBC)) THEN + XLBC => PARAM_LIMA_WARM%XLBC + XLBEXC => PARAM_LIMA_WARM%XLBEXC + XLBR => PARAM_LIMA_WARM%XLBR + XLBEXR => PARAM_LIMA_WARM%XLBEXR + XNR => PARAM_LIMA_WARM%XNR + XAR => PARAM_LIMA_WARM%XAR + XBR => PARAM_LIMA_WARM%XBR + XCR => PARAM_LIMA_WARM%XCR + XDR => PARAM_LIMA_WARM%XDR + XF0R => PARAM_LIMA_WARM%XF0R + XF1R => PARAM_LIMA_WARM%XF1R + XCCR => PARAM_LIMA_WARM%XCCR + XCXR => PARAM_LIMA_WARM%XCXR + XAC => PARAM_LIMA_WARM%XAC + XBC => PARAM_LIMA_WARM%XBC + XCC => PARAM_LIMA_WARM%XCC + XDC => PARAM_LIMA_WARM%XDC + XF0C => PARAM_LIMA_WARM%XF0C + XF2C => PARAM_LIMA_WARM%XF2C + XC1C => PARAM_LIMA_WARM%XC1C + XFSEDRR => PARAM_LIMA_WARM%XFSEDRR + XFSEDCR => PARAM_LIMA_WARM%XFSEDCR + XFSEDRC => PARAM_LIMA_WARM%XFSEDRC + XFSEDCC => PARAM_LIMA_WARM%XFSEDCC + XDIVA => PARAM_LIMA_WARM%XDIVA + XTHCO => PARAM_LIMA_WARM%XTHCO + XWMIN => PARAM_LIMA_WARM%XWMIN + XTMIN => PARAM_LIMA_WARM%XTMIN + XCSTHEN => PARAM_LIMA_WARM%XCSTHEN + XCSTDCRIT => PARAM_LIMA_WARM%XCSTDCRIT + XHYPINTP1 => PARAM_LIMA_WARM%XHYPINTP1 + XHYPINTP2 => PARAM_LIMA_WARM%XHYPINTP2 + XAHENINTP1 => PARAM_LIMA_WARM%XAHENINTP1 + XAHENINTP2 => PARAM_LIMA_WARM%XAHENINTP2 + XWCOEF_F1 => PARAM_LIMA_WARM%XWCOEF_F1 + XWCOEF_F2 => PARAM_LIMA_WARM%XWCOEF_F2 + XWCOEF_F3 => PARAM_LIMA_WARM%XWCOEF_F3 + XWCOEF_Y1 => PARAM_LIMA_WARM%XWCOEF_Y1 + XWCOEF_Y2 => PARAM_LIMA_WARM%XWCOEF_Y2 + XWCOEF_Y3 => PARAM_LIMA_WARM%XWCOEF_Y3 + XKERA1 => PARAM_LIMA_WARM%XKERA1 + XKERA2 => PARAM_LIMA_WARM%XKERA2 + XSELFC => PARAM_LIMA_WARM%XSELFC + XAUTO1 => PARAM_LIMA_WARM%XAUTO1 + XAUTO2 => PARAM_LIMA_WARM%XAUTO2 + XCAUTR => PARAM_LIMA_WARM%XCAUTR + XLAUTR => PARAM_LIMA_WARM%XLAUTR + XLAUTR_THRESHOLD => PARAM_LIMA_WARM%XLAUTR_THRESHOLD + XITAUTR => PARAM_LIMA_WARM%XITAUTR + XITAUTR_THRESHOLD => PARAM_LIMA_WARM%XITAUTR_THRESHOLD + XR0 => PARAM_LIMA_WARM%XR0 + XACCR1 => PARAM_LIMA_WARM%XACCR1 + XACCR2 => PARAM_LIMA_WARM%XACCR2 + XACCR3 => PARAM_LIMA_WARM%XACCR3 + XACCR4 => PARAM_LIMA_WARM%XACCR4 + XACCR5 => PARAM_LIMA_WARM%XACCR5 + XACCR6 => PARAM_LIMA_WARM%XACCR6 + XACCR_CLARGE1 => PARAM_LIMA_WARM%XACCR_CLARGE1 + XACCR_CLARGE2 => PARAM_LIMA_WARM%XACCR_CLARGE2 + XACCR_RLARGE1 => PARAM_LIMA_WARM%XACCR_RLARGE1 + XACCR_RLARGE2 => PARAM_LIMA_WARM%XACCR_RLARGE2 + XACCR_CSMALL1 => PARAM_LIMA_WARM%XACCR_CSMALL1 + XACCR_CSMALL2 => PARAM_LIMA_WARM%XACCR_CSMALL2 + XACCR_RSMALL1 => PARAM_LIMA_WARM%XACCR_RSMALL1 + XACCR_RSMALL2 => PARAM_LIMA_WARM%XACCR_RSMALL2 + XFCACCR => PARAM_LIMA_WARM%XFCACCR + XEXCACCR => PARAM_LIMA_WARM%XEXCACCR + XSCBU2 => PARAM_LIMA_WARM%XSCBU2 + XSCBU3 => PARAM_LIMA_WARM%XSCBU3 + XSCBU_EFF1 => PARAM_LIMA_WARM%XSCBU_EFF1 + XSCBU_EFF2 => PARAM_LIMA_WARM%XSCBU_EFF2 + XSCBUEXP1 => PARAM_LIMA_WARM%XSCBUEXP1 + XSPONBUD1 => PARAM_LIMA_WARM%XSPONBUD1 + XSPONBUD2 => PARAM_LIMA_WARM%XSPONBUD2 + XSPONBUD3 => PARAM_LIMA_WARM%XSPONBUD3 + XSPONCOEF2 => PARAM_LIMA_WARM%XSPONCOEF2 + X0EVAR => PARAM_LIMA_WARM%X0EVAR + X1EVAR => PARAM_LIMA_WARM%X1EVAR + XEX0EVAR => PARAM_LIMA_WARM%XEX0EVAR + XEX1EVAR => PARAM_LIMA_WARM%XEX1EVAR + XEX2EVAR => PARAM_LIMA_WARM%XEX2EVAR + XCEVAP => PARAM_LIMA_WARM%XCEVAP + XCONCR_PARAM_INI => PARAM_LIMA_WARM%XCONCR_PARAM_INI + X0CNDC => PARAM_LIMA_WARM%X0CNDC + X2CNDC => PARAM_LIMA_WARM%X2CNDC + XFREFFC => PARAM_LIMA_WARM%XFREFFC + XFREFFR => PARAM_LIMA_WARM%XFREFFR + XCREC => PARAM_LIMA_WARM%XCREC + XCRER => PARAM_LIMA_WARM%XCRER + + NHYP => PARAM_LIMA_WARM%NHYP + NAHEN => PARAM_LIMA_WARM%NAHEN +ENDIF +END SUBROUTINE PARAM_LIMA_WARM_ASSOCIATE +! +SUBROUTINE PARAM_LIMA_WARM_ALLOCATE(HNAME, KDIM1, KDIM2, KDIM3, KDIM4) + IMPLICIT NONE + CHARACTER(LEN=*), INTENT(IN) :: HNAME + INTEGER, INTENT(IN) :: KDIM1 + INTEGER, OPTIONAL, INTENT(IN):: KDIM2 + INTEGER, OPTIONAL, INTENT(IN):: KDIM3 + INTEGER, OPTIONAL, INTENT(IN):: KDIM4 + + SELECT CASE(TRIM(HNAME)) + CASE('XHYPF12') + ALLOCATE(PARAM_LIMA_WARM%XHYPF12(KDIM1, KDIM2)) + XHYPF12 => PARAM_LIMA_WARM%XHYPF12 + CASE('XHYPF32') + ALLOCATE(PARAM_LIMA_WARM%XHYPF32(KDIM1, KDIM2)) + XHYPF32 => PARAM_LIMA_WARM%XHYPF32 + CASE('XAHENG') + ALLOCATE(PARAM_LIMA_WARM%XAHENG(KDIM1)) + XAHENG => PARAM_LIMA_WARM%XAHENG + CASE('XAHENG2') + ALLOCATE(PARAM_LIMA_WARM%XAHENG2(KDIM1)) + XAHENG2 => PARAM_LIMA_WARM%XAHENG2 + CASE('XAHENG3') + ALLOCATE(PARAM_LIMA_WARM%XAHENG3(KDIM1)) + XAHENG3 => PARAM_LIMA_WARM%XAHENG3 + CASE('XPSI1') + ALLOCATE(PARAM_LIMA_WARM%XPSI1(KDIM1)) + XPSI1 => PARAM_LIMA_WARM%XPSI1 + CASE('XPSI3') + ALLOCATE(PARAM_LIMA_WARM%XPSI3(KDIM1)) + XPSI3 => PARAM_LIMA_WARM%XPSI3 + CASE('XAHENF') + ALLOCATE(PARAM_LIMA_WARM%XAHENF(KDIM1)) + XAHENF => PARAM_LIMA_WARM%XAHENF + CASE('XAHENY') + ALLOCATE(PARAM_LIMA_WARM%XAHENY(KDIM1)) + XAHENY => PARAM_LIMA_WARM%XAHENY + CASE('XCONCC_INI') + ALLOCATE(PARAM_LIMA_WARM%XCONCC_INI(KDIM1,KDIM2,KDIM3,KDIM4)) + XCONCC_INI => PARAM_LIMA_WARM%XCONCC_INI + END SELECT +END SUBROUTINE PARAM_LIMA_WARM_ALLOCATE ! !------------------------------------------------------------------------------- ! diff --git a/src/common/micro/mode_ini_lima_cold_mixed.F90 b/src/common/micro/mode_ini_lima_cold_mixed.F90 index 0de66454718e7ff0a41977c4a553a7b80cebc2ed..88f340867f5965ea1b7d79e0c8d7db5780c27e25 100644 --- a/src/common/micro/mode_ini_lima_cold_mixed.F90 +++ b/src/common/micro/mode_ini_lima_cold_mixed.F90 @@ -141,6 +141,8 @@ REAL :: ZRHOIW ! ice density ! ! !ILUOUT0 = TLUOUT0%NLU +CALL PARAM_LIMA_COLD_ASSOCIATE() +CALL PARAM_LIMA_MIXED_ASSOCIATE() ! ! !* 1. CHARACTERISTICS OF THE SPECIES @@ -806,17 +808,17 @@ XEXSRIMCG2=XBG !!$ 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 -ZRATE = EXP(LOG(XGAMINC_BOUND_MAX/XGAMINC_BOUND_MIN)/FLOAT(NGAMINC-1)) +PARAM_LIMA_MIXED%NGAMINC = 80 +PARAM_LIMA_MIXED%XGAMINC_BOUND_MIN = (1000.*XTRANS_MP_GAMMAS*XDCSLIM)**XALPHAS !1.0E-1 ! Minimal value of (Lbda * D_cs^lim)**alpha +PARAM_LIMA_MIXED%XGAMINC_BOUND_MAX = (50000.*XTRANS_MP_GAMMAS*XDCSLIM)**XALPHAS !1.0E7 ! Maximal value of (Lbda * D_cs^lim)**alpha +ZRATE = EXP(LOG(PARAM_LIMA_MIXED%XGAMINC_BOUND_MAX/PARAM_LIMA_MIXED%XGAMINC_BOUND_MIN)/FLOAT(PARAM_LIMA_MIXED%NGAMINC-1)) ! -ALLOCATE( XGAMINC_RIM1(NGAMINC) ) -ALLOCATE( XGAMINC_RIM2(NGAMINC) ) -ALLOCATE( XGAMINC_RIM4(NGAMINC) ) +CALL PARAM_LIMA_MIXED_ALLOCATE('XGAMINC_RIM1', NGAMINC) +CALL PARAM_LIMA_MIXED_ALLOCATE('XGAMINC_RIM2', NGAMINC) +CALL PARAM_LIMA_MIXED_ALLOCATE('XGAMINC_RIM4', NGAMINC) ! DO J1=1,NGAMINC - ZBOUND = XGAMINC_BOUND_MIN*ZRATE**(J1-1) + ZBOUND = PARAM_LIMA_MIXED%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) XGAMINC_RIM4(J1) = GAMMA_INC(XNUS+XBG/XALPHAS ,ZBOUND) ! Pour Murakami 1990 @@ -838,14 +840,14 @@ 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)/REAL(NGAMINC-1)) +PARAM_LIMA_MIXED%XGAMINC_HMC_BOUND_MIN = 1.0E-3 ! Min value of (Lbda * (12,25) microns)**alpha +PARAM_LIMA_MIXED%XGAMINC_HMC_BOUND_MAX = 1.0E5 ! Max value of (Lbda * (12,25) microns)**alpha +ZRATE = EXP(LOG(PARAM_LIMA_MIXED%XGAMINC_HMC_BOUND_MAX/PARAM_LIMA_MIXED%XGAMINC_HMC_BOUND_MIN)/REAL(PARAM_LIMA_MIXED%NGAMINC-1)) ! -ALLOCATE( XGAMINC_HMC(NGAMINC) ) +CALL PARAM_LIMA_MIXED_ALLOCATE('XGAMINC_HMC', NGAMINC) ! DO J1=1,NGAMINC - ZBOUND = XGAMINC_HMC_BOUND_MIN*ZRATE**(J1-1) + ZBOUND = PARAM_LIMA_MIXED%XGAMINC_HMC_BOUND_MIN*ZRATE**(J1-1) XGAMINC_HMC(J1) = GAMMA_INC(XNUC,ZBOUND) END DO ! @@ -882,18 +884,18 @@ XLBNSACCR3 = MOMG(XALPHAS,XNUS,2.) ! 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*XTRANS_MP_GAMMAS !5.0E1*XTRANS_MP_GAMMAS ! Minimal value of Lbda_s to tabulate XKER_RACCS -XACCLBDAS_MAX = 5.0E5*XTRANS_MP_GAMMAS !5.0E5*XTRANS_MP_GAMMAS ! Maximal value of Lbda_s to tabulate XKER_RACCS +PARAM_LIMA_MIXED%NACCLBDAS = 40 +PARAM_LIMA_MIXED%XACCLBDAS_MIN = 5.0E1*XTRANS_MP_GAMMAS !5.0E1*XTRANS_MP_GAMMAS ! Minimal value of Lbda_s to tabulate XKER_RACCS +PARAM_LIMA_MIXED%XACCLBDAS_MAX = 5.0E5*XTRANS_MP_GAMMAS !5.0E5*XTRANS_MP_GAMMAS ! 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)/REAL(NACCLBDAR-1) +PARAM_LIMA_MIXED%XACCINTP1S = 1.0 / ZRATE +PARAM_LIMA_MIXED%XACCINTP2S = 1.0 - LOG( XACCLBDAS_MIN ) / ZRATE +PARAM_LIMA_MIXED%NACCLBDAR = 40 +PARAM_LIMA_MIXED%XACCLBDAR_MIN = 1.0E3 ! Minimal value of Lbda_r to tabulate XKER_RACCS +PARAM_LIMA_MIXED%XACCLBDAR_MAX = 1.0E7 ! Maximal value of Lbda_r to tabulate XKER_RACCS +ZRATE = LOG(PARAM_LIMA_MIXED%XACCLBDAR_MAX/PARAM_LIMA_MIXED%XACCLBDAR_MIN)/REAL(NACCLBDAR-1) XACCINTP1R = 1.0 / ZRATE -XACCINTP2R = 1.0 - LOG( XACCLBDAR_MIN ) / ZRATE +XACCINTP2R = 1.0 - LOG( PARAM_LIMA_MIXED%XACCLBDAR_MIN ) / ZRATE ! !* 7.2.2 Computations of the tabulated normalized kernels ! @@ -901,12 +903,12 @@ 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) ) -ALLOCATE( XKER_N_RACCSS(NACCLBDAS,NACCLBDAR) ) -ALLOCATE( XKER_N_RACCS (NACCLBDAS,NACCLBDAR) ) -ALLOCATE( XKER_N_SACCRG(NACCLBDAR,NACCLBDAS) ) +CALL PARAM_LIMA_MIXED_ALLOCATE('XKER_RACCSS', NACCLBDAS,NACCLBDAR) +CALL PARAM_LIMA_MIXED_ALLOCATE('XKER_RACCS', NACCLBDAS,NACCLBDAR) +CALL PARAM_LIMA_MIXED_ALLOCATE('XKER_SACCRG', NACCLBDAR,NACCLBDAS) +CALL PARAM_LIMA_MIXED_ALLOCATE('XKER_N_RACCSS', NACCLBDAS,NACCLBDAR) +CALL PARAM_LIMA_MIXED_ALLOCATE('XKER_N_RACCS', NACCLBDAS,NACCLBDAR) +CALL PARAM_LIMA_MIXED_ALLOCATE('XKER_N_SACCRG', NACCLBDAR,NACCLBDAS) CALL NRCOLSS ( IND, XALPHAS, XNUS, XALPHAR, XNUR, & ZESR, XCS, XDS, XFVELOS, XCR, XDR, & XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, & @@ -1054,10 +1056,10 @@ END IF ! ! Notice: One magnitude of lambda discretized over 10 points for snow ! -NSCLBDAS = 80 -XSCLBDAS_MIN = 1.0E0*XTRANS_MP_GAMMAS ! Minimal value of Lbda_s to tabulate XKER_RSCS -XSCLBDAS_MAX = 5.0E10*XTRANS_MP_GAMMAS ! Maximal value of Lbda_s to tabulate XKER_RSCS -ZRATE = LOG(XSCLBDAS_MAX/XSCLBDAS_MIN)/FLOAT(NSCLBDAS-1) +PARAM_LIMA_COLD%NSCLBDAS = 80 +PARAM_LIMA_MIXED%XSCLBDAS_MIN = 1.0E0*XTRANS_MP_GAMMAS ! Minimal value of Lbda_s to tabulate XKER_RSCS +PARAM_LIMA_MIXED%XSCLBDAS_MAX = 5.0E10*XTRANS_MP_GAMMAS ! Maximal value of Lbda_s to tabulate XKER_RSCS +ZRATE = LOG(PARAM_LIMA_MIXED%XSCLBDAS_MAX/PARAM_LIMA_MIXED%XSCLBDAS_MIN)/FLOAT(PARAM_LIMA_COLD%NSCLBDAS-1) XSCINTP1S = 1.0 / ZRATE XSCINTP2S = 1.0 - LOG( XSCLBDAS_MIN ) / ZRATE ! @@ -1066,7 +1068,7 @@ XSCINTP2S = 1.0 - LOG( XSCLBDAS_MIN ) / ZRATE ZESS = 1.0 ! factor used to integrate the dimensional distributions when ZFDINFTY = 20.0 ! computing the kernels XKER_SSCSS ! - ALLOCATE( XKER_N_SSCS(NSCLBDAS,NSCLBDAS) ) + CALL PARAM_LIMA_COLD_ALLOCATE('XKER_N_SSCS', NSCLBDAS,NSCLBDAS) ! CALL NZCOLX ( IND, XALPHAS, XNUS, XALPHAS, XNUS, & ZESS, XCS, XDS, XFVELOS, XCS, XDS, XFVELOS, & @@ -1133,23 +1135,25 @@ XDCGLIM_CIBU_MIN = 2.0E-3 ! D_cg lim min !!$ WRITE(UNIT=ILUOUT0,FMT='(" D_cg^lim min =",E13.6)') XDCGLIM_CIBU_MIN !!$END IF ! -NGAMINC = 80 +PARAM_LIMA_MIXED%NGAMINC = 80 ! !Note : Boundaries are rounded at 5.0 or 1.0 (down for Bound_min and up for Bound_max) -XGAMINC_BOUND_CIBU_SMIN = 1.0E-5 * XTRANS_MP_GAMMAS**XALPHAS ! Minimal value of (Lbda_s * D_cs^lim)**alpha) 0.2 mm -XGAMINC_BOUND_CIBU_SMAX = 5.0E+2 * XTRANS_MP_GAMMAS**XALPHAS ! Maximal value of (Lbda_s * D_cs^lim)**alpha) 1 mm -ZRATE_S = EXP(LOG(XGAMINC_BOUND_CIBU_SMAX/XGAMINC_BOUND_CIBU_SMIN)/FLOAT(NGAMINC-1)) +PARAM_LIMA_MIXED%XGAMINC_BOUND_CIBU_SMIN = 1.0E-5 * XTRANS_MP_GAMMAS**XALPHAS ! Minimal value of (Lbda_s * D_cs^lim)**alpha) 0.2 mm +PARAM_LIMA_MIXED%XGAMINC_BOUND_CIBU_SMAX = 5.0E+2 * XTRANS_MP_GAMMAS**XALPHAS ! Maximal value of (Lbda_s * D_cs^lim)**alpha) 1 mm +ZRATE_S = EXP(LOG(PARAM_LIMA_MIXED%XGAMINC_BOUND_CIBU_SMAX/PARAM_LIMA_MIXED%XGAMINC_BOUND_CIBU_SMIN)/& + FLOAT(PARAM_LIMA_MIXED%NGAMINC-1)) ! -XGAMINC_BOUND_CIBU_GMIN = 1.0E-1 ! Minimal value of (Lbda_g * D_cg^lim)**alpha) 2 mm -XGAMINC_BOUND_CIBU_GMAX = 5.0E+1 ! Maximal value of (Lbda_g * D_cg^lim)**alpha) 2 mm -ZRATE_G = EXP(LOG(XGAMINC_BOUND_CIBU_GMAX/XGAMINC_BOUND_CIBU_GMIN)/FLOAT(NGAMINC-1)) +PARAM_LIMA_MIXED%XGAMINC_BOUND_CIBU_GMIN = 1.0E-1 ! Minimal value of (Lbda_g * D_cg^lim)**alpha) 2 mm +PARAM_LIMA_MIXED%XGAMINC_BOUND_CIBU_GMAX = 5.0E+1 ! Maximal value of (Lbda_g * D_cg^lim)**alpha) 2 mm +ZRATE_G = EXP(LOG(PARAM_LIMA_MIXED%XGAMINC_BOUND_CIBU_GMAX/PARAM_LIMA_MIXED%XGAMINC_BOUND_CIBU_GMIN)/& + FLOAT(PARAM_LIMA_MIXED%NGAMINC-1)) ! -ALLOCATE( XGAMINC_CIBU_S(4,NGAMINC) ) -ALLOCATE( XGAMINC_CIBU_G(2,NGAMINC) ) +CALL PARAM_LIMA_MIXED_ALLOCATE('XGAMINC_CIBU_S', 4,PARAM_LIMA_MIXED%NGAMINC) +CALL PARAM_LIMA_MIXED_ALLOCATE('XGAMINC_CIBU_G', 2,PARAM_LIMA_MIXED%NGAMINC) ! DO J1 = 1, NGAMINC - ZBOUND_CIBU_SMIN = XGAMINC_BOUND_CIBU_SMIN * ZRATE_S**(J1-1) - ZBOUND_CIBU_GMIN = XGAMINC_BOUND_CIBU_GMIN * ZRATE_G**(J1-1) + ZBOUND_CIBU_SMIN = PARAM_LIMA_MIXED%XGAMINC_BOUND_CIBU_SMIN * ZRATE_S**(J1-1) + ZBOUND_CIBU_GMIN = PARAM_LIMA_MIXED%XGAMINC_BOUND_CIBU_GMIN * ZRATE_G**(J1-1) ! ! For ZNI_CIBU XGAMINC_CIBU_S(1,J1) = GAMMA_INC(XNUS,ZBOUND_CIBU_SMIN) @@ -1192,16 +1196,17 @@ XDCRLIM_RDSF_MIN = 0.1E-3 ! D_cr lim min !!$ WRITE(UNIT=ILUOUT0,FMT='(" D_cr^lim min =",E13.6)') XDCRLIM_RDSF_MIN !!$END IF ! -NGAMINC = 80 +PARAM_LIMA_MIXED%NGAMINC = 80 ! -XGAMINC_BOUND_RDSF_RMIN = 1.0E-5 ! Minimal value of (Lbda_r * D_cr^lim)**alpha) 0.1 mm -XGAMINC_BOUND_RDSF_RMAX = 5.0E-3 ! Maximal value of (Lbda_r * D_cr^lim)**alpha) 1 mm -ZRATE_R = EXP(LOG(XGAMINC_BOUND_RDSF_RMAX/XGAMINC_BOUND_RDSF_RMIN)/FLOAT(NGAMINC-1)) +PARAM_LIMA_MIXED%XGAMINC_BOUND_RDSF_RMIN = 1.0E-5 ! Minimal value of (Lbda_r * D_cr^lim)**alpha) 0.1 mm +PARAM_LIMA_MIXED%XGAMINC_BOUND_RDSF_RMAX = 5.0E-3 ! Maximal value of (Lbda_r * D_cr^lim)**alpha) 1 mm +ZRATE_R = EXP(LOG(PARAM_LIMA_MIXED%XGAMINC_BOUND_RDSF_RMAX/PARAM_LIMA_MIXED%XGAMINC_BOUND_RDSF_RMIN)/& + FLOAT(PARAM_LIMA_MIXED%NGAMINC-1)) ! -ALLOCATE( XGAMINC_RDSF_R(NGAMINC) ) +CALL PARAM_LIMA_MIXED_ALLOCATE('XGAMINC_RDSF_R', NGAMINC) ! DO J1 = 1, NGAMINC - ZBOUND_RDSF_RMIN = XGAMINC_BOUND_RDSF_RMIN * ZRATE_R**(J1-1) + ZBOUND_RDSF_RMIN = PARAM_LIMA_MIXED%XGAMINC_BOUND_RDSF_RMIN * ZRATE_R**(J1-1) ! ! For ZNI_RDSF XGAMINC_RDSF_R(J1) = GAMMA_INC(XNUR+((6.0+XDR)/XALPHAR),ZBOUND_RDSF_RMIN) @@ -1310,24 +1315,24 @@ XLBNRDRYG3 = MOMG(XALPHAR,XNUR,2.) ! ! 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)/REAL(NDRYLBDAR-1) +PARAM_LIMA_MIXED%NDRYLBDAR = 40 +PARAM_LIMA_MIXED%XDRYLBDAR_MIN = 1.0E3 ! Minimal value of Lbda_r to tabulate XKER_RDRYG +PARAM_LIMA_MIXED%XDRYLBDAR_MAX = 1.0E7 ! Maximal value of Lbda_r to tabulate XKER_RDRYG +ZRATE = LOG(PARAM_LIMA_MIXED%XDRYLBDAR_MAX/PARAM_LIMA_MIXED%XDRYLBDAR_MIN)/REAL(PARAM_LIMA_MIXED%NDRYLBDAR-1) XDRYINTP1R = 1.0 / ZRATE XDRYINTP2R = 1.0 - LOG( XDRYLBDAR_MIN ) / ZRATE -NDRYLBDAS = 80 -XDRYLBDAS_MIN = 5.0E1*XTRANS_MP_GAMMAS ! Minimal value of Lbda_s to tabulate XKER_SDRYG -XDRYLBDAS_MAX = 5.0E8*XTRANS_MP_GAMMAS ! Maximal value of Lbda_s to tabulate XKER_SDRYG -ZRATE = LOG(XDRYLBDAS_MAX/XDRYLBDAS_MIN)/REAL(NDRYLBDAS-1) +PARAM_LIMA_MIXED%NDRYLBDAS = 80 +PARAM_LIMA_MIXED%XDRYLBDAS_MIN = 5.0E1*XTRANS_MP_GAMMAS ! Minimal value of Lbda_s to tabulate XKER_SDRYG +PARAM_LIMA_MIXED%XDRYLBDAS_MAX = 5.0E8*XTRANS_MP_GAMMAS ! Maximal value of Lbda_s to tabulate XKER_SDRYG +ZRATE = LOG(PARAM_LIMA_MIXED%XDRYLBDAS_MAX/PARAM_LIMA_MIXED%XDRYLBDAS_MIN)/REAL(PARAM_LIMA_MIXED%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)/REAL(NDRYLBDAG-1) +PARAM_LIMA_MIXED%NDRYLBDAG = 40 +PARAM_LIMA_MIXED%XDRYLBDAG_MIN = 1.0E3 ! Min value of Lbda_g to tabulate XKER_SDRYG,XKER_RDRYG +PARAM_LIMA_MIXED%XDRYLBDAG_MAX = 1.0E7 ! Max value of Lbda_g to tabulate XKER_SDRYG,XKER_RDRYG +ZRATE = LOG(PARAM_LIMA_MIXED%XDRYLBDAG_MAX/PARAM_LIMA_MIXED%XDRYLBDAG_MIN)/REAL(PARAM_LIMA_MIXED%NDRYLBDAG-1) XDRYINTP1G = 1.0 / ZRATE -XDRYINTP2G = 1.0 - LOG( XDRYLBDAG_MIN ) / ZRATE +XDRYINTP2G = 1.0 - LOG( PARAM_LIMA_MIXED%XDRYLBDAG_MIN ) / ZRATE ! !* 8.2.5 Computations of the tabulated normalized kernels ! @@ -1335,9 +1340,9 @@ 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 PARAM_LIMA_MIXED_ALLOCATE('XKER_SDRYG', NDRYLBDAG,NDRYLBDAS) !if (NMOM_S.GE.2) then - ALLOCATE( XKER_N_SDRYG(NDRYLBDAG,NDRYLBDAS) ) + CALL PARAM_LIMA_MIXED_ALLOCATE('XKER_N_SDRYG', NDRYLBDAG,NDRYLBDAS) CALL NZCOLX ( IND, XALPHAG, XNUG, XALPHAS, XNUS, & ZEGS, XCG, XDG, 0., XCS, XDS, XFVELOS, & XDRYLBDAG_MAX, XDRYLBDAS_MAX, XDRYLBDAG_MIN, XDRYLBDAS_MIN, & @@ -1418,9 +1423,9 @@ 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 PARAM_LIMA_MIXED_ALLOCATE('XKER_RDRYG', NDRYLBDAG,NDRYLBDAR) !if ( NMOM_R.GE.2 ) then - ALLOCATE( XKER_N_RDRYG(NDRYLBDAG,NDRYLBDAR) ) + CALL PARAM_LIMA_MIXED_ALLOCATE('XKER_N_RDRYG', NDRYLBDAG,NDRYLBDAR) CALL NZCOLX ( IND, XALPHAS, XNUS, XALPHAR, XNUR, & ZEGR, XCG, XDG, 0., XCR, XDR, 0., & XDRYLBDAG_MAX, XDRYLBDAR_MAX, XDRYLBDAG_MIN, XDRYLBDAR_MIN, & @@ -1534,24 +1539,24 @@ XLBNGWETH3 = MOMG(XALPHAG,XNUG,2.) ! ! Notice: One magnitude of lambda discretized over 10 points ! -NWETLBDAS = 80 -XWETLBDAS_MIN = 5.0E1*XTRANS_MP_GAMMAS ! Minimal value of Lbda_s to tabulate XKER_SWETH -XWETLBDAS_MAX = 5.0E8*XTRANS_MP_GAMMAS ! Maximal value of Lbda_s to tabulate XKER_SWETH -ZRATE = LOG(XWETLBDAS_MAX/XWETLBDAS_MIN)/REAL(NWETLBDAS-1) +PARAM_LIMA_MIXED%NWETLBDAS = 80 +PARAM_LIMA_MIXED%XWETLBDAS_MIN = 5.0E1*XTRANS_MP_GAMMAS ! Minimal value of Lbda_s to tabulate XKER_SWETH +PARAM_LIMA_MIXED%XWETLBDAS_MAX = 5.0E8*XTRANS_MP_GAMMAS ! Maximal value of Lbda_s to tabulate XKER_SWETH +ZRATE = LOG(PARAM_LIMA_MIXED%XWETLBDAS_MAX/PARAM_LIMA_MIXED%XWETLBDAS_MIN)/REAL(PARAM_LIMA_MIXED%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)/REAL(NWETLBDAG-1) +XWETINTP2S = 1.0 - LOG( PARAM_LIMA_MIXED%XWETLBDAS_MIN ) / ZRATE +PARAM_LIMA_MIXED%NWETLBDAG = 40 +PARAM_LIMA_MIXED%XWETLBDAG_MIN = 1.0E3 ! Min value of Lbda_g to tabulate XKER_GWETH +PARAM_LIMA_MIXED%XWETLBDAG_MAX = 1.0E7 ! Max value of Lbda_g to tabulate XKER_GWETH +ZRATE = LOG(PARAM_LIMA_MIXED%XWETLBDAG_MAX/PARAM_LIMA_MIXED%XWETLBDAG_MIN)/REAL(PARAM_LIMA_MIXED%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)/REAL(NWETLBDAH-1) +PARAM_LIMA_MIXED%NWETLBDAH = 40 +PARAM_LIMA_MIXED%XWETLBDAH_MIN = 1.0E3 ! Min value of Lbda_h to tabulate XKER_SWETH,XKER_GWETH +PARAM_LIMA_MIXED%XWETLBDAH_MAX = 1.0E7 ! Max value of Lbda_h to tabulate XKER_SWETH,XKER_GWETH +ZRATE = LOG(PARAM_LIMA_MIXED%XWETLBDAH_MAX/PARAM_LIMA_MIXED%XWETLBDAH_MIN)/REAL(PARAM_LIMA_MIXED%NWETLBDAH-1) XWETINTP1H = 1.0 / ZRATE -XWETINTP2H = 1.0 - LOG( XWETLBDAH_MIN ) / ZRATE +XWETINTP2H = 1.0 - LOG( PARAM_LIMA_MIXED%XWETLBDAH_MIN ) / ZRATE ! !* 9.2.4 Computations of the tabulated normalized kernels ! @@ -1560,7 +1565,7 @@ ZEHS = 1.0 ! factor used to integrate the dimensional distributions when ZFDINFTY = 20.0 ! computing the kernels XKER_SWETH ! !if ( NMOM_S.GE.2 ) then - IF( .NOT.ALLOCATED(XKER_N_SWETH) ) ALLOCATE( XKER_N_SWETH(NWETLBDAH,NWETLBDAS) ) + IF( .NOT.ASSOCIATED(XKER_N_SWETH) ) CALL PARAM_LIMA_MIXED_ALLOCATE('XKER_N_SWETH', NWETLBDAH,NWETLBDAS) CALL NZCOLX ( IND, XALPHAH, XNUH, XALPHAS, XNUS, & ZEHS, XCH, XDH, 0., XCS, XDS, XFVELOS, & ! XWETLBDAH_MAX, XWETLBDAS_MAX, XWETLBDAH_MIN, XWETLBDAS_MIN, & ! @@ -1575,7 +1580,7 @@ ZFDINFTY = 20.0 ! computing the kernels XKER_SWETH !!$ END DO !!$ WRITE(UNIT=ILUOUT0,FMT='("!")') !end if -IF( .NOT.ALLOCATED(XKER_SWETH) ) ALLOCATE( XKER_SWETH(NWETLBDAH,NWETLBDAS) ) +IF( .NOT.ASSOCIATED(XKER_SWETH) ) CALL PARAM_LIMA_MIXED_ALLOCATE('XKER_SWETH', NWETLBDAH,NWETLBDAS) ! CALL LIMA_READ_XKER_SWETH (KWETLBDAH,KWETLBDAS,KND, & PALPHAH,PNUH,PALPHAS,PNUS,PEHS,PBS,PCH,PDH,PCS,PDS,PFVELOS, & @@ -1643,7 +1648,7 @@ ZEHG = 1.0 ! distributions when computing the kernel XKER_GWETH ZFDINFTY = 20.0 ! !if ( NMOM_G.GE.2 ) then - IF( .NOT.ALLOCATED(XKER_N_GWETH) ) ALLOCATE( XKER_N_GWETH(NWETLBDAH,NWETLBDAG) ) + IF( .NOT.ASSOCIATED(XKER_N_GWETH) ) CALL PARAM_LIMA_MIXED_ALLOCATE('XKER_N_GWETH', NWETLBDAH,NWETLBDAG) CALL NZCOLX ( IND, XALPHAH, XNUH, XALPHAG, XNUG, & ZEHG, XCH, XDH, 0., XCG, XDG, 0., & XWETLBDAH_MAX, XWETLBDAG_MAX, XWETLBDAH_MIN, XWETLBDAG_MIN, & @@ -1658,7 +1663,7 @@ ZFDINFTY = 20.0 !!$ END DO !!$ WRITE(UNIT=ILUOUT0,FMT='("!")') !end if -IF( .NOT.ALLOCATED(XKER_GWETH) ) ALLOCATE( XKER_GWETH(NWETLBDAH,NWETLBDAG) ) +IF( .NOT.ASSOCIATED(XKER_GWETH) ) CALL PARAM_LIMA_MIXED_ALLOCATE('XKER_GWETH', NWETLBDAH,NWETLBDAG) ! CALL LIMA_READ_XKER_GWETH (KWETLBDAH,KWETLBDAG,KND, & PALPHAH,PNUH,PALPHAG,PNUG,PEHG,PBG,PCH,PDH,PCG,PDG, & diff --git a/src/common/micro/mode_ini_lima_warm.F90 b/src/common/micro/mode_ini_lima_warm.F90 index d46bd2d6bba9eb7754d79d5439e5d68d39db9fc1..47ed2c23b011c1bc00ba83b9c00e65138218e790 100644 --- a/src/common/micro/mode_ini_lima_warm.F90 +++ b/src/common/micro/mode_ini_lima_warm.F90 @@ -83,6 +83,7 @@ REAL :: ZSMIN, ZSMAX ! Minimal and maximal supersaturation used to ! !------------------------------------------------------------------------------- ! +CALL PARAM_LIMA_WARM_ASSOCIATE() ! !* 1. CHARACTERISTICS OF THE SPECIES ! ------------------------------ @@ -240,8 +241,8 @@ XCSTDCRIT = (XPI/6.)*XRHOLW*( (8.0*ZSURF_TEN )/( 3.0*XRV*XRHOLW ) )**3 ! using a logarithmic scale for S ! NHYP = 500 ! Number of points for the tabulation -ALLOCATE (XHYPF12( NHYP, NMOD_CCN )) -ALLOCATE (XHYPF32( NHYP, NMOD_CCN )) +CALL PARAM_LIMA_WARM_ALLOCATE('XHYPF12', NHYP, NMOD_CCN) +CALL PARAM_LIMA_WARM_ALLOCATE('XHYPF32', NHYP, NMOD_CCN) ! ZSMIN = 1.0E-5 ! Minimum supersaturation set at 0.001 % ZSMAX = 5.0E-2 ! Maximum supersaturation set at 5 % @@ -276,11 +277,11 @@ XAHENINTP2 = 0.5*REAL(NAHEN-1) - XTT ! Lv ! G ! -ALLOCATE (XAHENG(NAHEN)) -ALLOCATE (XAHENG2(NAHEN)) -ALLOCATE (XAHENG3(NAHEN)) -ALLOCATE (XPSI1(NAHEN)) -ALLOCATE (XPSI3(NAHEN)) +CALL PARAM_LIMA_WARM_ALLOCATE('XAHENG', NAHEN) +CALL PARAM_LIMA_WARM_ALLOCATE('XAHENG2', NAHEN) +CALL PARAM_LIMA_WARM_ALLOCATE('XAHENG3', NAHEN) +CALL PARAM_LIMA_WARM_ALLOCATE('XPSI1', NAHEN) +CALL PARAM_LIMA_WARM_ALLOCATE('XPSI3', NAHEN) XCSTHEN = 1.0 / ( XRHOLW*2.0*XPI ) DO J1 = 1,NAHEN ZTT = XTT + REAL(J1-(NAHEN-1)/2) ! T