Skip to content
Snippets Groups Projects
modd_param_lima.f90 29.8 KiB
Newer Older
  • Learn to ignore specific revisions
  • !MNH_LIC Copyright 2013-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_PARAM_LIMA
    !     ######################
    
    !> @file
    !!      *MODD_PARAM_LIMA* - declaration of the control parameters
    
    !!                               for use in the LIMA scheme.
    !!
    !!    PURPOSE
    !!    -------
    !!      The purpose of this declarative module is to declare the microphysical
    !!    constants. This includes the descriptive parameters for the raindrop 
    !!    and the parameters relevant of the dimensional distributions.
    !!
    !!
    !!
    
    !!    ------------------
    !!      None 
    !!
    !!    AUTHOR
    !!    ------
    !!	J.-P. Pinty  *Laboratoire d'Aerologie*
    !!      S.    Berthet    * Laboratoire d'Aerologie*
    !!      B.    Vié        * Laboratoire d'Aerologie*
    !!
    !!    MODIFICATIONS
    !!    -------------
    !!      Original             ??/??/13 
    
    !!      C. Barthe            14/03/2022  add CIBU and RDSF
    
    !!
    !-------------------------------------------------------------------------------
    !
    USE MODD_PARAMETERS, ONLY : JPLIMACCNMAX, JPLIMAIFNMAX
    !
    IMPLICIT NONE
    !
    
    TYPE PARAM_LIMA_t
    LOGICAL :: LLIMA_DIAG             ! Compute diagnostics for concentration /m3
    
    LOGICAL :: LPTSPLIT               ! activate time-splitting technique by S. Riette
    LOGICAL :: LFEEDBACKT             ! recompute tendencies if T changes sign
    INTEGER :: NMAXITER               ! maximum number of iterations
    REAL    :: XMRSTEP                ! maximum change in mixing ratio allowed before recomputing tedencies
    REAL    :: XTSTEP_TS              ! maximum time for the sub-time-step
    
    !
    !*       1.   COLD SCHEME
    !             -----------
    !
    ! 1.1 Cold scheme configuration
    !
    
    LOGICAL :: LNUCL                  ! TRUE to enable ice nucleation
    LOGICAL :: LSEDI                  ! TRUE to enable pristine ice sedimentation
    LOGICAL :: LHHONI                 ! TRUE to enable freezing of haze particules
    LOGICAL :: LMEYERS                ! TRUE to use Meyers nucleation
    LOGICAL :: LCIBU                  ! TRUE to use collisional ice breakup
    LOGICAL :: LRDSF                  ! TRUE to use rain drop shattering by freezing
    INTEGER :: NMOM_I                 ! Number of moments for pristine ice
    INTEGER :: NMOM_S                 ! Number of moments for snow
    INTEGER :: NMOM_G                 ! Number of moments for graupel
    INTEGER :: NMOM_H                 ! Number of moments for hail
    
    INTEGER          :: NMOD_IFN               ! Number of IFN modes
    REAL, DIMENSION(JPLIMAIFNMAX) :: XIFN_CONC ! Ref. concentration of IFN(#/L)
    LOGICAL          :: LIFN_HOM               ! True for z-homogeneous IFN concentrations
    CHARACTER(LEN=8) :: CIFN_SPECIES           ! Internal mixing species definitions
    CHARACTER(LEN=8) :: CINT_MIXING            ! Internal mixing type selection (pure DM1 ...)
    INTEGER          :: NMOD_IMM               ! Number of CCN modes acting by immersion
    INTEGER          :: NIND_SPECIE            ! CCN acting by immersion are considered pure
                                               ! IFN of either DM = 1, BC = 2 or O = 3
    INTEGER, DIMENSION(:), ALLOCATABLE :: NIMM            ! Link between CCN and IMM modes
    INTEGER, DIMENSION(:), ALLOCATABLE :: NINDICE_CCN_IMM ! ??????????
    INTEGER                            :: NSPECIE         ! Internal mixing number of species
    REAL, DIMENSION(:),    ALLOCATABLE :: XMDIAM_IFN      ! Mean diameter of IFN modes
    REAL, DIMENSION(:),    ALLOCATABLE :: XSIGMA_IFN      ! Sigma of IFN modes
    REAL, DIMENSION(:),    ALLOCATABLE :: XRHO_IFN        ! Density of IFN modes 
    REAL, DIMENSION(:,:),  ALLOCATABLE :: XFRAC           ! Composition of each IFN mode
    REAL, DIMENSION(:),    ALLOCATABLE :: XFRAC_REF       ! AP compostion in Phillips 08
    
    LOGICAL :: LSNOW_T                     ! TRUE to enable snow param. after Wurtz 2021
    LOGICAL :: LMURAKAMI                   ! snow + liq -> graupel after Murakami (as in RAIN_ICE_RED)
    CHARACTER(LEN=4) :: CPRISTINE_ICE_LIMA ! Pristine type PLAT, COLU or BURO
    CHARACTER(LEN=4) :: CHEVRIMED_ICE_LIMA ! Heavily rimed type GRAU or HAIL
    REAL                   :: XALPHAI,XNUI,    & ! Pristine ice   distribution parameters
    
                              XALPHAS,XNUS,    & ! Snow/aggregate distribution parameters
                              XALPHAG,XNUG       ! Graupel        distribution parameters
    
    !
    ! 1.4 Phillips (2013) nucleation parameterization
    !
    
    INTEGER              :: NPHILLIPS     ! =8 for Phillips08, =13 for Phillips13
    !
    REAL, DIMENSION(4)   :: XT0       ! Threshold of T in H_X for X={DM1,DM2,BC,O} [K]
    REAL, DIMENSION(4)   :: XDT0      ! Range in T for transition of H_X near XT0 [K]
    REAL, DIMENSION(4)   :: XDSI0     ! Range in Si for transition of H_X near XSI0
    REAL                 :: XSW0      ! Threshold of Sw in H_X 
    REAL                 :: XRHO_CFDC ! Air density at which CFDC data were reported [kg m**3]
    REAL, DIMENSION(4)   :: XH        ! Fraction<<1 of aerosol for X={DM,BC,O}
    REAL, DIMENSION(4)   :: XAREA1    ! Total surface of all aerosols in group X with
                                      ! diameters between 0.1 and 1 µm, for X={DM1,DM2,BC,O} [m**2 kg**-1]
    REAL                 :: XGAMMA    ! Factor boosting IN concentration due to 
    
    REAL, DIMENSION(4)   :: XTX1      ! Threshold of T in Xi for X={DM1,DM2,BC,O} [K]
    REAL, DIMENSION(4)   :: XTX2      ! Threshold of T in Xi for X={DM1,DM2,BC,O} [K]
    
    REAL,DIMENSION(:), ALLOCATABLE :: XABSCISS, XWEIGHT ! Gauss quadrature method 
    INTEGER                        :: NDIAM             ! Gauss quadrature accuracy 
    
    !
    ! 1.5 Meyers (1992) nucleation parameterization
    !
    
    REAL      :: XFACTNUC_DEP,XFACTNUC_CON  ! Amplification factor for IN conc.
    
                                            !   DEP refers to DEPosition mode
                                            !   CON refers to CONtact    mode
    !
    
    ! 1.6 Collisional Ice Break Up parameterization
    !
    
    REAL      :: XNDEBRIS_CIBU              ! Number of ice crystal debris produced
    
                                            ! by the break up of aggregate particles
    !
    
    !-------------------------------------------------------------------------------
    !
    !
    !*       2.   WARM SCHEME
    !             -----------
    !
    ! 2.1 Warm scheme configuration
    !
    
    LOGICAL :: LACTI         ! TRUE to enable CCN activation
    LOGICAL :: LSEDC         ! TRUE to enable the droplet sedimentation
    LOGICAL :: LACTIT        ! TRUE to enable the usage of dT/dt in CCN activation
    LOGICAL :: LDEPOC        ! Deposition of rc at 1st level above ground
    LOGICAL :: LACTTKE       ! TRUE to take into account TKE in W for activation
    LOGICAL :: LADJ          ! TRUE for adjustment procedure + Smax (false for diagnostic supersaturation)
    LOGICAL :: LSPRO         ! TRUE for prognostic supersaturation                     
    LOGICAL :: LKHKO         ! TRUE for Scu simulation (replicates the previous KHKO scheme)                     
    LOGICAL :: LKESSLERAC    ! TRUE for Kessler autoconversion (if NMOM_C=1)
    !
    INTEGER :: NMOM_C        ! Number of moments for cloud droplets
    INTEGER :: NMOM_R        ! Number of moments for rain drops
    
    INTEGER                             :: NMOD_CCN         ! Number of CCN modes
    REAL, DIMENSION(JPLIMACCNMAX)       :: XCCN_CONC        ! CCN conc.  (#/cm3)
    LOGICAL                             :: LCCN_HOM         ! True for z-homogeneous CCN concentrations
    CHARACTER(LEN=8)                    :: CCCN_MODES       ! CCN modes characteristics (Jungfraujoch ...)
    REAL, DIMENSION(:), ALLOCATABLE     :: XR_MEAN_CCN,   & ! Mean radius of CCN modes
                                           XLOGSIG_CCN,   & ! Log of geometric dispersion of the CCN modes
                                           XRHO_CCN         ! Density of the CCN modes
    REAL, DIMENSION(:), ALLOCATABLE     :: XKHEN_MULTI,   & ! Parameters defining the CCN activation
                                           XMUHEN_MULTI,  & ! spectra for a multimodal aerosol distribution
                                           XBETAHEN_MULTI   ! 
    REAL, DIMENSION(:,:,:), ALLOCATABLE :: XCONC_CCN_TOT    ! Total aerosol number concentration
    REAL, DIMENSION(:),     ALLOCATABLE :: XLIMIT_FACTOR    ! compute CHEN ????????????
    
    !
    ! 2.3 Water particles characteristics
    !
    
    REAL          :: XALPHAR,XNUR,       & ! Raindrop      distribution parameters
    
                     XALPHAC,XNUC          ! Cloud droplet distribution parameters
    !
    ! 2.4 CCN activation
    !
    
    CHARACTER(LEN=3)      :: HPARAM_CCN = 'CPB'   ! Parameterization of the CCN activation
    CHARACTER(LEN=3)      :: HINI_CCN             ! Initialization type of CCN activation
    CHARACTER(LEN=10), DIMENSION(JPLIMACCNMAX) :: HTYPE_CCN ! 'M' or 'C' CCN type
    REAL                  :: XFSOLUB_CCN,       & ! Fractionnal solubility of the CCN
    
                             XACTEMP_CCN,       & ! Expected temperature of CCN activation
                             XAERDIFF, XAERHEIGHT ! For the vertical gradient of aerosol distribution
    !
    ! Cloud droplet deposition
    !
    
    !
    !-------------------------------------------------------------------------------
    !
    !
    !*       3.   BELOW CLOUD SCAVENGING
    !             ----------------------
    !
    
    LOGICAL :: LSCAV           ! TRUE for aerosol scavenging by precipitations 
    LOGICAL :: LAERO_MASS      ! TRUE to compute the total aerosol mass scavenging rate 
    
    INTEGER :: NDIAMR = 20     ! Max Number of droplet for quadrature method  
    INTEGER :: NDIAMP = 20     ! Max Number of aerosol particle for quadrature method  
    
    REAL    :: XT0SCAV = 293.15  ! [K]
    REAL    :: XTREF = 273.15    ! [K]
    REAL    :: XNDO = 8.*1.0E6   ! [/m**4]
    
    !
    !-------------------------------------------------------------------------------
    !
    !
    !*       4.   ATMOSPHERIC & OTHER PARAMETERS
    !             ------------------------------
    !
    
    REAL    :: XMUA0     = 1.711E-05  ![Pa.s] Air Viscosity at T=273.15K
    REAL    :: XT_SUTH_A = 110.4      ![K] Sutherland Temperature for Air
    REAL    :: XMFPA0    = 6.6E-08    ![m] Mean Free Path of Air under standard conditions
    
    REAL    :: XVISCW = 1.0E-3        ![Pa.s] water viscosity at 20°C
    
    !REAL    :: XRHO00 = 1.292        !rho on the floor    [Kg/m**3]
    REAL    :: XRHO00 = 1.2041        !rho at P=1013.25 and T=20°C
    
    REAL    :: XCEXVT                     ! air density fall speed correction
    
    REAL, DIMENSION(:), ALLOCATABLE :: XRTMIN ! Min values of the mixing ratios
    REAL, DIMENSION(:), ALLOCATABLE :: XCTMIN ! Min values of the drop concentrations
    
    INTEGER,DIMENSION(7)   :: NSPLITSED
    REAL,DIMENSION(7)      :: XLB
    REAL,DIMENSION(7)      :: XLBEX
    REAL,DIMENSION(7)      :: XD
    REAL,DIMENSION(7)      :: XFSEDR
    REAL,DIMENSION(7)      :: XFSEDC
    END TYPE PARAM_LIMA_t
    !
    TYPE(PARAM_LIMA_t), TARGET, SAVE :: PARAM_LIMA
    !
    LOGICAL, POINTER :: LLIMA_DIAG => NULL(), &
                        LPTSPLIT => NULL(), &
                        LFEEDBACKT => NULL(), &
                        LNUCL => NULL(), &
                        LSEDI => NULL(), &
                        LHHONI => NULL(), &
                        LMEYERS => NULL(), &
                        LCIBU => NULL(), &
                        LRDSF => NULL(), &
                        LIFN_HOM => NULL(), &
                        LSNOW_T => NULL(), &
                        LMURAKAMI => NULL(), &
                        LACTI => NULL(), &
                        LSEDC => NULL(), &
                        LACTIT => NULL(), &
                        LDEPOC => NULL(), &
                        LACTTKE => NULL(), &
                        LADJ => NULL(), &
                        LSPRO => NULL(), &
                        LKHKO => NULL(), &
                        LKESSLERAC => NULL(), &
                        LCCN_HOM => NULL(), &
                        LSCAV => NULL(), &
                        LAERO_MASS => NULL()
    
    INTEGER, POINTER :: NMAXITER => NULL(), &
                        NMOM_I => NULL(), &
                        NMOM_S => NULL(), &
                        NMOM_G => NULL(), &
                        NMOM_H => NULL(), &
                        NMOD_IFN => NULL(), &
                        NMOD_IMM => NULL(), &
                        NIND_SPECIE => NULL(), &
                        NSPECIE => NULL(), &
                        NPHILLIPS => NULL(), &
                        NDIAM => NULL(), &
                        NMOM_C => NULL(), &
                        NMOM_R => NULL(), &
                        NMOD_CCN => NULL(), &
                        NDIAMR => NULL(), &
                        NDIAMP => NULL()
    
    REAL, POINTER :: XMRSTEP => NULL(), &
                     XTSTEP_TS => NULL(), &
                     XALPHAI => NULL(), &
                     XNUI => NULL(), &
                     XALPHAS => NULL(), &
                     XNUS => NULL(), &
                     XALPHAG => NULL(), &
                     XNUG => NULL(), &
                     XSW0 => NULL(), &
                     XRHO_CFDC => NULL(), &
                     XGAMMA => NULL(), &
                     XFACTNUC_DEP => NULL(), &
                     XFACTNUC_CON => NULL(), &
                     XNDEBRIS_CIBU => NULL(), &
                     XALPHAR => NULL(), &
                     XNUR => NULL(), &
                     XALPHAC => NULL(), &
                     XNUC => NULL(), &
                     XFSOLUB_CCN => NULL(), &
                     XACTEMP_CCN => NULL(), &
                     XAERDIFF => NULL(), &
                     XAERHEIGHT => NULL(), &
                     XVDEPOC => NULL(), &
                     XT0SCAV => NULL(), &
                     XTREF => NULL(), &
                     XNDO => NULL(), &
                     XMUA0 => NULL(), &
                     XT_SUTH_A => NULL(), &
                     XMFPA0 => NULL(), &
                     XVISCW => NULL(), &
                     XRHO00 => NULL(), &
                     XCEXVT => NULL()
    
    REAL, DIMENSION(:), POINTER :: XIFN_CONC => NULL(), &
                                   XMDIAM_IFN => NULL(), &
                                   XSIGMA_IFN => NULL(), &
                                   XRHO_IFN => NULL(), &
                                   XFRAC_REF => NULL(), &
                                   XT0 => NULL(), &
                                   XDT0 => NULL(), &
                                   XDSI0 => NULL(), &
                                   XH => NULL(), &
                                   XAREA1 => NULL(), &
                                   XTX1 => NULL(), &
                                   XTX2 => NULL(), &
                                   XABSCISS => NULL(), &
                                   XWEIGHT => NULL(), &
                                   XCCN_CONC => NULL(), &
                                   XR_MEAN_CCN => NULL(), &
                                   XLOGSIG_CCN => NULL(), &
                                   XRHO_CCN => NULL(), &
                                   XKHEN_MULTI => NULL(), &
                                   XMUHEN_MULTI => NULL(), &
                                   XBETAHEN_MULTI => NULL(), &
                                   XLIMIT_FACTOR => NULL(), &
                                   XRTMIN => NULL(), &
                                   XCTMIN => NULL(), &
                                   XLB => NULL(), &
                                   XLBEX => NULL(), &
                                   XD => NULL(), &
                                   XFSEDR => NULL(), &
                                   XFSEDC => NULL()
    
    REAL, DIMENSION(:,:),  POINTER :: XFRAC => NULL()
    REAL, DIMENSION(:,:,:), POINTER :: XCONC_CCN_TOT => NULL()
    
    INTEGER, DIMENSION(:), POINTER :: NIMM => NULL(), &
                                      NINDICE_CCN_IMM => NULL(), &
                                      NSPLITSED => NULL()
    
    CHARACTER(LEN=8), POINTER :: CIFN_SPECIES => NULL()
    CHARACTER(LEN=8), POINTER :: CINT_MIXING => NULL()
    CHARACTER(LEN=4), POINTER :: CPRISTINE_ICE_LIMA => NULL()
    CHARACTER(LEN=4), POINTER :: CHEVRIMED_ICE_LIMA => NULL()
    CHARACTER(LEN=8), POINTER :: CCCN_MODES => NULL()
    CHARACTER(LEN=3), POINTER :: HPARAM_CCN => NULL()
    CHARACTER(LEN=3), POINTER :: HINI_CCN => NULL()
    CHARACTER(LEN=10), DIMENSION(:), POINTER :: HTYPE_CCN
    
    NAMELIST/NAM_PARAM_LIMA/LNUCL, LSEDI, LHHONI, LMEYERS,                     &         
                            NMOM_I, NMOM_S, NMOM_G, NMOM_H,                    & 
                            NMOD_IFN, XIFN_CONC, LIFN_HOM,                     &
                            CIFN_SPECIES, CINT_MIXING, NMOD_IMM, NIND_SPECIE,  &
                            LSNOW_T, CPRISTINE_ICE_LIMA, CHEVRIMED_ICE_LIMA,   &                                   
                            !XALPHAI, XNUI, XALPHAS, XNUS, XALPHAG, XNUG,       &    
                            XFACTNUC_DEP, XFACTNUC_CON, NPHILLIPS,             &    
                            LCIBU, XNDEBRIS_CIBU, LRDSF, LMURAKAMI,            &                                         
                            LACTI, LSEDC, LACTIT, LSPRO,                       &                                         
                            LADJ, LKHKO, LKESSLERAC, NMOM_C, NMOM_R,           &                                         
                            NMOD_CCN, XCCN_CONC,                               &                                         
                            LCCN_HOM, CCCN_MODES, HINI_CCN, HTYPE_CCN,         &                                         
                            XALPHAC, XNUC, XALPHAR, XNUR,                      &                                         
                            XFSOLUB_CCN, XACTEMP_CCN, XAERDIFF, XAERHEIGHT,    &                                         
                            LSCAV, LAERO_MASS, LDEPOC, XVDEPOC, LACTTKE,       &                                         
                            LPTSPLIT, LFEEDBACKT, NMAXITER, XMRSTEP, XTSTEP_TS
    
    CONTAINS
    SUBROUTINE PARAM_LIMA_ASSOCIATE()
    IMPLICIT NONE
    
    IF(.NOT. ASSOCIATED(LLIMA_DIAG)) THEN
      LLIMA_DIAG         => PARAM_LIMA%LLIMA_DIAG          
      LPTSPLIT           => PARAM_LIMA%LPTSPLIT
      LFEEDBACKT         => PARAM_LIMA%LFEEDBACKT
      LNUCL              => PARAM_LIMA%LNUCL
      LSEDI              => PARAM_LIMA%LSEDI
      LHHONI             => PARAM_LIMA%LHHONI
      LMEYERS            => PARAM_LIMA%LMEYERS
      LCIBU              => PARAM_LIMA%LCIBU
      LRDSF              => PARAM_LIMA%LRDSF
      LIFN_HOM           => PARAM_LIMA%LIFN_HOM
      LSNOW_T            => PARAM_LIMA%LSNOW_T
      LMURAKAMI          => PARAM_LIMA%LMURAKAMI
      LACTI              => PARAM_LIMA%LACTI
      LSEDC              => PARAM_LIMA%LSEDC
      LACTIT             => PARAM_LIMA%LACTIT
      LDEPOC             => PARAM_LIMA%LDEPOC
      LACTTKE            => PARAM_LIMA%LACTTKE
      LADJ               => PARAM_LIMA%LADJ
      LSPRO              => PARAM_LIMA%LSPRO
      LKHKO              => PARAM_LIMA%LKHKO
      LKESSLERAC         => PARAM_LIMA%LKESSLERAC
      LCCN_HOM           => PARAM_LIMA%LCCN_HOM
      LSCAV              => PARAM_LIMA%LSCAV
      LAERO_MASS         => PARAM_LIMA%LAERO_MASS
    
      NMAXITER           => PARAM_LIMA%NMAXITER
      NMOM_I             => PARAM_LIMA%NMOM_I
      NMOM_S             => PARAM_LIMA%NMOM_S
      NMOM_G             => PARAM_LIMA%NMOM_G
      NMOM_H             => PARAM_LIMA%NMOM_H
      NMOD_IFN           => PARAM_LIMA%NMOD_IFN
      NMOD_IMM           => PARAM_LIMA%NMOD_IMM
      NIND_SPECIE        => PARAM_LIMA%NIND_SPECIE
      NSPECIE            => PARAM_LIMA%NSPECIE
      NPHILLIPS          => PARAM_LIMA%NPHILLIPS
      NDIAM              => PARAM_LIMA%NDIAM
      NMOM_C             => PARAM_LIMA%NMOM_C
      NMOM_R             => PARAM_LIMA%NMOM_R
      NMOD_CCN           => PARAM_LIMA%NMOD_CCN
      NDIAMR             => PARAM_LIMA%NDIAMR
      NDIAMP             => PARAM_LIMA%NDIAMP
    
      XMRSTEP            => PARAM_LIMA%XMRSTEP
      XTSTEP_TS          => PARAM_LIMA%XTSTEP_TS
      XALPHAI            => PARAM_LIMA%XALPHAI
      XNUI               => PARAM_LIMA%XNUI
      XALPHAS            => PARAM_LIMA%XALPHAS
      XNUS               => PARAM_LIMA%XNUS
      XALPHAG            => PARAM_LIMA%XALPHAG
      XNUG               => PARAM_LIMA%XNUG
      XSW0               => PARAM_LIMA%XSW0
      XRHO_CFDC          => PARAM_LIMA%XRHO_CFDC
      XGAMMA             => PARAM_LIMA%XGAMMA
      XFACTNUC_DEP       => PARAM_LIMA%XFACTNUC_DEP
      XFACTNUC_CON       => PARAM_LIMA%XFACTNUC_CON
      XNDEBRIS_CIBU      => PARAM_LIMA%XNDEBRIS_CIBU
      XALPHAR            => PARAM_LIMA%XALPHAR
      XNUR               => PARAM_LIMA%XNUR
      XALPHAC            => PARAM_LIMA%XALPHAC
      XNUC               => PARAM_LIMA%XNUC
      XFSOLUB_CCN        => PARAM_LIMA%XFSOLUB_CCN
      XACTEMP_CCN        => PARAM_LIMA%XACTEMP_CCN
      XAERDIFF           => PARAM_LIMA%XAERDIFF
      XAERHEIGHT         => PARAM_LIMA%XAERHEIGHT
      XVDEPOC            => PARAM_LIMA%XVDEPOC
      XT0SCAV            => PARAM_LIMA%XT0SCAV
      XTREF              => PARAM_LIMA%XTREF
      XNDO               => PARAM_LIMA%XNDO
      XMUA0              => PARAM_LIMA%XMUA0
      XT_SUTH_A          => PARAM_LIMA%XT_SUTH_A
      XMFPA0             => PARAM_LIMA%XMFPA0
      XVISCW             => PARAM_LIMA%XVISCW
      XRHO00             => PARAM_LIMA%XRHO00
      XCEXVT             => PARAM_LIMA%XCEXVT
    
      XIFN_CONC          => PARAM_LIMA%XIFN_CONC
      XT0                => PARAM_LIMA%XT0
      XDT0               => PARAM_LIMA%XDT0
      XDSI0              => PARAM_LIMA%XDSI0
      XH                 => PARAM_LIMA%XH
      XAREA1             => PARAM_LIMA%XAREA1
      XTX1               => PARAM_LIMA%XTX1
      XTX2               => PARAM_LIMA%XTX2
      XCCN_CONC          => PARAM_LIMA%XCCN_CONC
      XLB                => PARAM_LIMA%XLB
      XLBEX              => PARAM_LIMA%XLBEX
      XD                 => PARAM_LIMA%XD
      XFSEDR             => PARAM_LIMA%XFSEDR
      XFSEDC             => PARAM_LIMA%XFSEDC
    
      NSPLITSED          => PARAM_LIMA%NSPLITSED
    
      CIFN_SPECIES       => PARAM_LIMA%CIFN_SPECIES
      CINT_MIXING        => PARAM_LIMA%CINT_MIXING
      CPRISTINE_ICE_LIMA => PARAM_LIMA%CPRISTINE_ICE_LIMA
      CHEVRIMED_ICE_LIMA => PARAM_LIMA%CHEVRIMED_ICE_LIMA
      CCCN_MODES         => PARAM_LIMA%CCCN_MODES
      HPARAM_CCN         => PARAM_LIMA%HPARAM_CCN
      HINI_CCN           => PARAM_LIMA%HINI_CCN
      HTYPE_CCN          => PARAM_LIMA%HTYPE_CCN
    ENDIF
    END SUBROUTINE PARAM_LIMA_ASSOCIATE
    !
    SUBROUTINE PARAM_LIMA_DEALLOCATE(HNAME)
      IMPLICIT NONE
      CHARACTER(LEN=*), INTENT(IN) :: HNAME
      SELECT CASE(TRIM(HNAME))
        CASE('NINDICE_CCN_IMM')
          DEALLOCATE(PARAM_LIMA%NINDICE_CCN_IMM)
          NINDICE_CCN_IMM => NULL()
      END SELECT
    END SUBROUTINE PARAM_LIMA_DEALLOCATE
    !
    SUBROUTINE PARAM_LIMA_ALLOCATE(HNAME, KDIM1, KDIM2, KDIM3)
      IMPLICIT NONE
    
      CHARACTER(LEN=*), INTENT(IN)  :: HNAME
    
      INTEGER, INTENT(IN)           :: KDIM1
      INTEGER, OPTIONAL, INTENT(IN) :: KDIM2
      INTEGER, OPTIONAL, INTENT(IN) :: KDIM3
    
      SELECT CASE(TRIM(HNAME))
        !1D arrays
        CASE('NIMM')
          ALLOCATE(PARAM_LIMA%NIMM(KDIM1))
          NIMM => PARAM_LIMA%NIMM
        CASE('NINDICE_CCN_IMM')
          ALLOCATE(PARAM_LIMA%NINDICE_CCN_IMM(KDIM1))
          NINDICE_CCN_IMM => PARAM_LIMA%NINDICE_CCN_IMM
        CASE('XMDIAM_IFN')
          ALLOCATE(PARAM_LIMA%XMDIAM_IFN(KDIM1))
          XMDIAM_IFN => PARAM_LIMA%XMDIAM_IFN
        CASE('XSIGMA_IFN')
          ALLOCATE(PARAM_LIMA%XSIGMA_IFN(KDIM1))
          XSIGMA_IFN => PARAM_LIMA%XSIGMA_IFN
        CASE('XRHO_IFN')
          ALLOCATE(PARAM_LIMA%XRHO_IFN(KDIM1))
          XRHO_IFN => PARAM_LIMA%XRHO_IFN
        CASE('XFRAC_REF')
          ALLOCATE(PARAM_LIMA%XFRAC_REF(KDIM1))
          XFRAC_REF => PARAM_LIMA%XFRAC_REF
        CASE('XABSCISS')
          ALLOCATE(PARAM_LIMA%XABSCISS(KDIM1))
          XABSCISS => PARAM_LIMA%XABSCISS
        CASE('XWEIGHT')
          ALLOCATE(PARAM_LIMA%XWEIGHT(KDIM1))
          XWEIGHT => PARAM_LIMA%XWEIGHT
        CASE('XR_MEAN_CCN')
          ALLOCATE(PARAM_LIMA%XR_MEAN_CCN(KDIM1))
          XR_MEAN_CCN => PARAM_LIMA%XR_MEAN_CCN
        CASE('XLOGSIG_CCN')
          ALLOCATE(PARAM_LIMA%XLOGSIG_CCN(KDIM1))
          XLOGSIG_CCN => PARAM_LIMA%XLOGSIG_CCN
        CASE('XRHO_CCN')
          ALLOCATE(PARAM_LIMA%XRHO_CCN(KDIM1))
          XRHO_CCN => PARAM_LIMA%XRHO_CCN
        CASE('XKHEN_MULTI')
          ALLOCATE(PARAM_LIMA%XKHEN_MULTI(KDIM1))
          XKHEN_MULTI => PARAM_LIMA%XKHEN_MULTI
        CASE('XMUHEN_MULTI')
          ALLOCATE(PARAM_LIMA%XMUHEN_MULTI(KDIM1))
          XMUHEN_MULTI => PARAM_LIMA%XMUHEN_MULTI
        CASE('XBETAHEN_MULTI')
          ALLOCATE(PARAM_LIMA%XBETAHEN_MULTI(KDIM1))
          XBETAHEN_MULTI => PARAM_LIMA%XBETAHEN_MULTI
        CASE('XLIMIT_FACTOR')
          ALLOCATE(PARAM_LIMA%XLIMIT_FACTOR(KDIM1))
          XLIMIT_FACTOR => PARAM_LIMA%XLIMIT_FACTOR
        CASE('XRTMIN')
          ALLOCATE(PARAM_LIMA%XRTMIN(KDIM1))
          XRTMIN => PARAM_LIMA%XRTMIN
        CASE('XCTMIN')
          ALLOCATE(PARAM_LIMA%XCTMIN(KDIM1))
          XCTMIN => PARAM_LIMA%XCTMIN
        !
        !2D arrays
        CASE('XFRAC')
          ALLOCATE(PARAM_LIMA%XFRAC(KDIM1, KDIM2))
          XFRAC => PARAM_LIMA%XFRAC
        !
        !3D arrays
    !    CASE('XCONC_CCN_TOT')
    !      ALLOCATE(PARAM_LIMA%XCONC_CCN_TOT(KDIM1, KDIM2))
    !      XCONC_CCN_TOT => PARAM_LIMA%XCONC_CCN_TOT
      END SELECT
    END SUBROUTINE PARAM_LIMA_ALLOCATE
    !
    SUBROUTINE PARAM_LIMA_INIT(HPROGRAM, KUNITNML, LDNEEDNAM, KLUOUT, &
                              &LDDEFAULTVAL, LDREADNAM, LDCHECK, KPRINT)
    !!*** *PARAM_ICEN_INIT* - Code needed to initialize the MODD_PARAM_LIMA module
    !!
    !!*   PURPOSE
    !!    -------
    !!    Sets the default values, reads the namelist, performs the checks and prints
    !!
    !!*   METHOD
    !!    ------
    !!    0. Declarations
    !!       1. Declaration of arguments
    !!       2. Declaration of local variables
    !!    1. Default values
    !!    2. Namelist
    !!    3. Checks
    !!    4. Prints
    !!
    !!    AUTHOR
    !!    ------
    !!    S. Riette
    !!
    !!    MODIFICATIONS
    !!    -------------
    !!      Original    Apr 2023
    !-------------------------------------------------------------------------------
    !
    !*      0. DECLARATIONS
    !       ---------------
    !
    USE MODE_POSNAM_PHY, ONLY: POSNAM_PHY
    USE MODE_MSG, ONLY: PRINT_MSG, NVERB_FATAL
    
    USE MODE_CHECK_NAM_VAL, ONLY: CHECK_NAM_VAL_CHAR
    
    !
    IMPLICIT NONE
    !
    !* 0.1. Declaration of arguments
    !       ------------------------
    !
    CHARACTER(LEN=6),  INTENT(IN) :: HPROGRAM     !< Name of the calling program
    INTEGER,           INTENT(IN) :: KUNITNML     !< Logical unit to access the namelist
    LOGICAL,           INTENT(IN) :: LDNEEDNAM    !< True to abort if namelist is absent
    INTEGER,           INTENT(IN) :: KLUOUT       !< Logical unit for outputs
    LOGICAL, OPTIONAL, INTENT(IN) :: LDDEFAULTVAL !< Must we initialize variables with default values (defaults to .TRUE.)
    LOGICAL, OPTIONAL, INTENT(IN) :: LDREADNAM    !< Must we read the namelist (defaults to .TRUE.)
    LOGICAL, OPTIONAL, INTENT(IN) :: LDCHECK      !< Must we perform some checks on values (defaults to .TRUE.)
    INTEGER, OPTIONAL, INTENT(IN) :: KPRINT       !< Print level (defaults to 0): 0 for no print, 1 to safely print namelist,
                                                  !! 2 to print informative messages
    !
    !* 0.2 Declaration of local variables
    !      ------------------------------
    !
    LOGICAL :: LLDEFAULTVAL, LLREADNAM, LLCHECK, LLFOUND
    INTEGER :: IPRINT 
     
    LLDEFAULTVAL=.TRUE. 
    LLREADNAM=.TRUE. 
    LLCHECK=.TRUE. 
    IPRINT=0 
    IF(PRESENT(LDDEFAULTVAL)) LLDEFAULTVAL=LDDEFAULTVAL 
    IF(PRESENT(LDREADNAM   )) LLREADNAM   =LDREADNAM 
    IF(PRESENT(LDCHECK     )) LLCHECK     =LDCHECK 
    IF(PRESENT(KPRINT      )) IPRINT      =KPRINT 
    ! 
    !*      1. DEFAULT VALUES 
    !       ----------------- 
    ! 
    IF(LLDEFAULTVAL) THEN 
    
      !NOTES ON GENERAL DEFAULTS AND MODEL-SPECIFIC DEFAULTS :
      !- General default values *MUST* remain unchanged.
      !- To change the default value for a given application,                                                 
      !  an "IF(HPROGRAM=='...')" condition must be used.
    
    
      LNUCL=.TRUE.
      LSEDI=.TRUE.
      LHHONI = .FALSE.
      LMEYERS = .FALSE.
      NMOM_I = 2
      NMOM_S = 1
      NMOM_G = 1
      NMOM_H = 0
      NMOD_IFN = 1
      XIFN_CONC(:) = 100.
      LIFN_HOM = .TRUE.
      CIFN_SPECIES = 'PHILLIPS'
      CINT_MIXING = 'DM2'
      NMOD_IMM = 0
      NIND_SPECIE = 1
      LSNOW_T = .FALSE.
      CPRISTINE_ICE_LIMA = 'PLAT'
      CHEVRIMED_ICE_LIMA = 'GRAU'
      !XALPHAI=
      !XNUI=
      !XALPHAS=
      !XNUS=
      !XALPHAG=
      !XNUG=
      XFACTNUC_DEP = 1.0
      XFACTNUC_CON = 1.0
      NPHILLIPS=8
      LCIBU = .FALSE.
      XNDEBRIS_CIBU = 50.0
      LRDSF = .FALSE.
      LMURAKAMI=.TRUE.
      LACTI  = .TRUE.
      LSEDC  = .TRUE.
      LACTIT = .FALSE.
      LSPRO = .FALSE.
      LADJ   = .TRUE.
      LKHKO  = .FALSE.
      LKESSLERAC = .FALSE.
      NMOM_C = 2
      NMOM_R = 2
      NMOD_CCN = 1
      XCCN_CONC(:)=300.
      LCCN_HOM = .TRUE.
      CCCN_MODES = 'COPT'
      HINI_CCN   = 'AER'
      HTYPE_CCN(:) = 'M'
      XALPHAC = 3.0
      XNUC    = 1.0
      XALPHAR = 1.0
      XNUR    = 2.0
      XFSOLUB_CCN = 1.0
      XACTEMP_CCN = 280.
      XAERDIFF    = 0.0
      XAERHEIGHT  = 2000.
      LSCAV      = .FALSE.
      LAERO_MASS = .FALSE.
      LDEPOC = .TRUE.
      XVDEPOC = 0.02 ! 2 cm/s
      LACTTKE = .TRUE.
      LPTSPLIT     = .TRUE.
      LFEEDBACKT = .TRUE.
      NMAXITER  =  5
      XMRSTEP    = 0.005
      XTSTEP_TS  = 20.
    ENDIF
    !
    !*      2. NAMELIST
    !       -----------
    !
    IF(LLREADNAM) THEN
      CALL POSNAM_PHY(KUNITNML, 'NAM_PARAM_LIMA', LDNEEDNAM, LLFOUND, KLUOUT)
      IF(LLFOUND) READ(UNIT=KUNITNML, NML=NAM_PARAM_LIMA)
    ENDIF
    !
    !*      3. CHECKS
    !       ---------
    !
    IF(LLCHECK) THEN
      CALL CHECK_NAM_VAL_CHAR(KLUOUT, 'CPRISTINE_ICE_LIMA', CPRISTINE_ICE_LIMA, &
                                                    'PLAT', 'COLU', 'BURO')
      CALL CHECK_NAM_VAL_CHAR(KLUOUT, 'CHEVRIMED_ICE_LIMA', CHEVRIMED_ICE_LIMA, &
                                                    'GRAU', 'HAIL')
    
      IF ((LACTI .AND. HINI_CCN  == 'XXX')) THEN
        CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'MODD_PARAM_LIMA', &
               &"YOU WANT TO USE A 2-MOMENT MICROPHYSICAL " // &
               &" SCHEME BUT YOU DIDNT FILL CORRECTLY NAM_PARAM_LIMA" // &
               &" YOU HAVE TO FILL HINI_CCN ")
      END IF
    
      IF(LACTI .AND. NMOD_CCN == 0) THEN
        CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'MODD_PARAM_LIMA', &
               &"ACTIVATION OF AEROSOL PARTICLES IS NOT " // &
               &"POSSIBLE IF NMOD_CCN HAS VALUE ZERO. YOU HAVE TO SET AN UPPER " // &
               &"VALUE OF NMOD_CCN IN ORDER TO USE LIMA WARM ACTIVATION SCHEME.") 
      END IF
    
      IF(LNUCL .AND. NMOD_IFN == 0 .AND. (.NOT.LMEYERS)) THEN
        CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'MODD_PARAM_LIMA', &
               &"NUCLEATION BY DEPOSITION AND CONTACT IS NOT " // &
               &"POSSIBLE IF NMOD_IFN HAS VALUE ZERO. YOU HAVE TO SET AN UPPER" //  &
               &"VALUE OF NMOD_IFN IN ORDER TO USE LIMA COLD NUCLEATION SCHEME.") 
      END IF
    
      IF(HPROGRAM=='AROME' .OR. HPROGRAM=='PHYEX') THEN
        IF(.NOT. LPTSPLIT) THEN
          CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'MODD_PARAM_LIMA', &
               &"LPTSPLIT must be .TRUE. with this program: " // HPROGRAM)
        ENDIF
        IF(LSPRO) THEN
          CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'MODD_PARAM_LIMA', &
               &"LSPRO must be .FALSE. with this program: " // HPROGRAM)
        ENDIF
      ENDIF
    ENDIF
    !
    !*      3. PRINTS
    !       ---------
    !
    IF(IPRINT>=1) THEN
      WRITE(UNIT=KLUOUT, NML=NAM_PARAM_LIMA)
    ENDIF
    !
    END SUBROUTINE PARAM_LIMA_INIT