Skip to content
Snippets Groups Projects
modd_rain_ice_param.F90 25 KiB
Newer Older
  • Learn to ignore specific revisions
  • !MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
    !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
    !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
    !MNH_LIC for details. version 1.
    !     ######spl
          MODULE MODD_RAIN_ICE_PARAM
    !     ##########################
    !
    !!****  *MODD_RAIN_ICE_PARAM* - declaration of some microphysical factors
    !!                              extensively used in the warm and cold schemes.
    !!
    !!    PURPOSE
    !!    -------
    !       The purpose of this declarative module is to declare some precomputed
    !     microphysical paramters directly used in routine RAIN_ICE.
    !
    !!
    !!**  IMPLICIT ARGUMENTS
    !!    ------------------
    !!      None
    !!
    !!    REFERENCE
    !!    ---------
    !!      Book2 of documentation of Meso-NH (MODD_RAIN_ICE_PARAM)
    !!
    !!    AUTHOR
    !!    ------
    !!      J.-P. Pinty  *Laboratoire d'Aerologie*
    !!
    !!    MODIFICATIONS
    !!    -------------
    !!      Original    04/12/95
    !!       J.-P. Pinty   29/11/02 add ICE4
    !!       S. Riette 11/2016: new ICE3/ICE4 processes
    !!
    !-------------------------------------------------------------------------------
    !
    !*       0.   DECLARATIONS
    !             ------------
    !
    IMPLICIT NONE
    !
    
    TYPE RAIN_ICE_PARAM_t
    REAL,DIMENSION(2)      :: XFSEDC                 ! Constants for sedimentation fluxes of C
    REAL      :: XFSEDR,XEXSEDR,                   & ! Constants for sedimentation
    
                 XFSEDI,XEXCSEDI,XEXRSEDI,         & ! fluxes of R, I, S and G
                 XFSEDS,XEXSEDS,                   &
                 XFSEDG,XEXSEDG
    !
    
    REAL      :: XNU10,XALPHA1,XBETA1,             & ! Constants for heterogeneous
    
                 XNU20,XALPHA2,XBETA2,             & ! ice nucleation : HEN
                 XMNU0                               ! mass of nucleated ice crystal
    !
    
    REAL      :: XALPHA3,XBETA3,                   & ! Constants for homogeneous
    
    REAL      :: XSCFAC,                           & ! Constants for raindrop
    
                 X0EVAR,X1EVAR,XEX0EVAR,XEX1EVAR,  & ! evaporation: EVA and for
                 X0DEPI,X2DEPI,                    & ! deposition : DEP on I,
                 X0DEPS,X1DEPS,XEX0DEPS,XEX1DEPS,  & !                  on S and
                 X0DEPG,X1DEPG,XEX0DEPG,XEX1DEPG     !                  on G
    !
    
    REAL      :: XTIMAUTI,XTEXAUTI,XCRIAUTI,       & ! Constants for pristine ice
    
                 XT0CRIAUTI,XACRIAUTI,XBCRIAUTI      ! autoconversion : AUT
    !
    
    REAL      :: XCOLIS,XCOLEXIS,                  & ! Constants for snow
    
                 XFIAGGS,                          & ! aggregation : AGG
                 XEXIAGGS
    !
    
    REAL      :: XTIMAUTC,                         & ! Constants for cloud droplet
    
    REAL      :: XFCACCR,                          & ! Constants for cloud droplet
    
                 XEXCACCR                            ! accretion on raindrops : ACC
    !
    
    REAL      :: XDCSLIM,XCOLCS,                   & ! Constants for the riming of
    
                 XEXCRIMSS,XCRIMSS,                & ! the aggregates : RIM
                 XEXCRIMSG,XCRIMSG,                & !
                 XEXSRIMCG,XSRIMCG,                & !
                 XEXSRIMCG2,XSRIMCG2,              & !
                 XSRIMCG3,                         & !
                 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      :: 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           ! and for 2+XDS+XBS-XBG
    !
    
    REAL      :: XFRACCSS,                         & ! Constants for the accretion
    
                 XLBRACCS1,XLBRACCS2,XLBRACCS3,    & ! raindrops onto the aggregates
                 XFSACCRG,                         & ! ACC (processes RACCSS and
                 XLBSACCR1,XLBSACCR2,XLBSACCR3,    & !                SACCRG)
                 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
    
    REAL      :: XFSCVMG                             ! Melting-conversion factor of
    
    REAL      :: XCOLIR,                           & ! Constants for rain contact
    
                 XEXRCFRI,XRCFRI,                  & ! freezing : CFR
                 XEXICFRR,XICFRR                     !
    !
    
    REAL      :: XFCDRYG,                          & ! Constants for the dry growth
    
                 XCOLIG,XCOLEXIG,XFIDRYG,          & ! of the graupeln : DRY
                 XFIDRYG2, XEXFIDRYG,              &
                 XCOLSG,XCOLEXSG,XFSDRYG,          & !   processes RCDRYG
                 XLBSDRYG1,XLBSDRYG2,XLBSDRYG3,    & !             RIDRYG
                 XFRDRYG,                          & !             RSDRYG
                 XLBRDRYG1,XLBRDRYG2,XLBRDRYG3,    & !             RRDRYG
                 XDRYLBDAR_MIN,                    & ! Min 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
                                                     !            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
    
    REAL,DIMENSION(:,:), ALLOCATABLE         &
    
                             :: XKER_SDRYG,        & ! Normalized kernel for SDRYG
                                XKER_RDRYG           ! Normalized kernel for RDRYG
    !
    ! addition of Hail category
    !
    
    REAL      :: XFSEDH,XEXSEDH                      ! Constants for sedimentation
    
    REAL      :: X0DEPH,X1DEPH,XEX0DEPH,XEX1DEPH     ! Constants for deposition
    
    REAL      :: XCOLIH, XCOLEXIH,                 & ! Constants for the dry growth
    
               & XCOLSH, XCOLEXSH,                 & ! of the hail
               & XCOLGH, XCOLEXGH                    !
    !
    
    REAL      :: XFWETH,XFSWETH,                   & ! Constants for the wet growth
    
                 XLBSWETH1,XLBSWETH2,XLBSWETH3,    & ! of the hailstones : WET
                 XFGWETH,                          & !   processes RSWETH
                 XLBGWETH1,XLBGWETH2,XLBGWETH3,    & !             RGWETH
                 XFRWETH,                          & !             RRWETH
                 XLBRWETH1,XLBRWETH2,XLBRWETH3,    & !
                 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
                 XWETLBDAG_MAX,                    & ! Max val. of Lbda_g for WET
                 XWETLBDAR_MIN,                    & ! Min val. of Lbda_r for WET
                 XWETLBDAR_MAX,                    & ! Max val. of Lbda_r for WET
                 XWETLBDAH_MIN,                    & ! Min val. of Lbda_h for WET
                 XWETLBDAH_MAX,                    & ! Max val. of Lbda_h for WET
                 XWETINTP1S,XWETINTP2S,            & ! Csts for bilin. interpol. of
                 XWETINTP1G,XWETINTP2G,            & ! Lbda_r, Lbda_s, Lbda_g
                 XWETINTP1R,XWETINTP2R,            & ! and Lbda_h in
                 XWETINTP1H,XWETINTP2H               ! the XKER_SWETH, XKER_GWETH
                                                     ! and XKER_RWETH tables
    
    INTEGER      :: NWETLBDAS,                     & ! Number of Lbda_s,
    
                    NWETLBDAG,                     & !        of Lbda_g,
                    NWETLBDAR,                     & !        of Lbda_r and
                    NWETLBDAH                        !        of Lbda_h values in
                                                     ! the XKER_SWETH, XKER_GWETH
                                                     ! and XKER_RWETH tables
    
    REAL,DIMENSION(:,:), ALLOCATABLE         &
    
                             :: XKER_SWETH,        & ! Normalized kernel for SWETH
                                XKER_GWETH,        & ! Normalized kernel for GWETH
                                XKER_RWETH           ! Normalized kernel for RWETH
    
    TYPE(RAIN_ICE_PARAM_t), SAVE, TARGET :: RAIN_ICE_PARAM
    !
    REAL,DIMENSION(:),POINTER :: XFSEDC => NULL()
    
    
    REAL,POINTER :: XFSEDR => NULL(), &
                    XEXSEDR => NULL(), &
                    XFSEDI => NULL(), &
                    XEXCSEDI => NULL(), &
                    XEXRSEDI => NULL(), &
                    XFSEDS => NULL(), &
                    XEXSEDS => NULL(), &
                    XFSEDG => NULL(), &
                    XEXSEDG => NULL(), &
                    XNU10 => NULL(), &
                    XALPHA1 => NULL(), &
                    XBETA1 => NULL(), &
                    XNU20 => NULL(), &
                    XALPHA2 => NULL(), &
                    XBETA2 => NULL(), &
                    XMNU0 => NULL(), &
                    XALPHA3 => NULL(), &
                    XBETA3 => NULL(), &
                    XHON => NULL(), &
                    XSCFAC => NULL(), &
                    X0EVAR => NULL(), &
                    X1EVAR => NULL(), &
                    XEX0EVAR => NULL(), &
                    XEX1EVAR => NULL(), &
                    X0DEPI => NULL(), &
                    X2DEPI => NULL(), &
                    X0DEPS => NULL(), &
                    X1DEPS => NULL(), &
                    XEX0DEPS => NULL(), &
                    XEX1DEPS => NULL(), &
                    X0DEPG => NULL(), &
                    X1DEPG => NULL(), &
                    XEX0DEPG => NULL(), &
                    XEX1DEPG => NULL(), &
                    XTIMAUTI => NULL(), &
                    XTEXAUTI => NULL(), &
                    XCRIAUTI => NULL(), &
                    XT0CRIAUTI => NULL(), &
                    XACRIAUTI => NULL(), &
                    XBCRIAUTI => NULL(), &
                    XCOLIS => NULL(), &
                    XCOLEXIS => NULL(), &
                    XFIAGGS => NULL(), &
                    XEXIAGGS => NULL(), &
                    XTIMAUTC => NULL(), &
                    XCRIAUTC => NULL(), &
                    XFCACCR => NULL(), &
                    XEXCACCR => NULL(), &
                    XDCSLIM => NULL(), &
                    XCOLCS => NULL(), &
                    XEXCRIMSS => NULL(), &
                    XCRIMSS => NULL(), &
                    XEXCRIMSG => NULL(), &
                    XCRIMSG => NULL(), &
                    XEXSRIMCG => NULL(), &
                    XSRIMCG => NULL(), &
                    XEXSRIMCG2 => NULL(), &
                    XSRIMCG2 => NULL(), &
                    XSRIMCG3 => NULL(), &
                    XGAMINC_BOUND_MIN => NULL(), &
                    XGAMINC_BOUND_MAX => NULL(), &
                    XRIMINTP1 => NULL(), &
                    XRIMINTP2 => NULL(), &
                    XFRACCSS => NULL(), &
                    XLBRACCS1 => NULL(), &
                    XLBRACCS2 => NULL(), &
                    XLBRACCS3 => NULL(), &
                    XFSACCRG => NULL(), &
                    XLBSACCR1 => NULL(), &
                    XLBSACCR2 => NULL(), &
                    XLBSACCR3 => 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(), &
                    XCOLIG => NULL(), &
                    XCOLEXIG => NULL(), &
                    XFIDRYG => NULL(), &
                    XFIDRYG2 => NULL(), &
                    XEXFIDRYG => NULL(), &
                    XCOLSG => NULL(), &
                    XCOLEXSG => NULL(), &
                    XFSDRYG => NULL(), &
                    XLBSDRYG1 => NULL(), &
                    XLBSDRYG2 => NULL(), &
                    XLBSDRYG3 => NULL(), &
                    XFRDRYG => NULL(), &
                    XLBRDRYG1 => NULL(), &
                    XLBRDRYG2 => NULL(), &
                    XLBRDRYG3 => 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(), &
                    X0DEPH => NULL(), &
                    X1DEPH => NULL(), &
                    XEX0DEPH => NULL(), &
                    XEX1DEPH => NULL(), &
                    XCOLIH => NULL(), &
                    XCOLEXIH => NULL(), &
                    XCOLSH => NULL(), &
                    XCOLEXSH => NULL(), &
                    XCOLGH => NULL(), &
                    XCOLEXGH => NULL(), &
                    XFWETH => NULL(), &
                    XFSWETH => NULL(), &
                    XLBSWETH1 => NULL(), &
                    XLBSWETH2 => NULL(), &
                    XLBSWETH3 => NULL(), &
                    XFGWETH => NULL(), &
                    XLBGWETH1 => NULL(), &
                    XLBGWETH2 => NULL(), &
                    XLBGWETH3 => NULL(), &
                    XFRWETH => NULL(), &
                    XLBRWETH1 => NULL(), &
                    XLBRWETH2 => NULL(), &
                    XLBRWETH3 => NULL(), &
                    XWETLBDAS_MIN => NULL(), &
                    XWETLBDAS_MAX => NULL(), &
                    XWETLBDAG_MIN => NULL(), &
                    XWETLBDAG_MAX => NULL(), &
                    XWETLBDAR_MIN => NULL(), &
                    XWETLBDAR_MAX => NULL(), &
                    XWETLBDAH_MIN => NULL(), &
                    XWETLBDAH_MAX => NULL(), &
                    XWETINTP1S => NULL(), &
                    XWETINTP2S => NULL(), &
                    XWETINTP1G => NULL(), &
                    XWETINTP2G => NULL(), &
                    XWETINTP1R => NULL(), &
                    XWETINTP2R => NULL(), &
                    XWETINTP1H => NULL(), &
                    XWETINTP2H => NULL()
    
    INTEGER, POINTER :: NGAMINC => NULL(), &
                        NACCLBDAS => NULL(), &
                        NACCLBDAR => NULL(), &
                        NDRYLBDAR => NULL(), &
                        NDRYLBDAS => NULL(), &
                        NDRYLBDAG => NULL(), &
                        NWETLBDAS => NULL(), &
                        NWETLBDAG => NULL(), &
                        NWETLBDAR => NULL(), &
                        NWETLBDAH => NULL()
    
    
    REAL, DIMENSION(:), POINTER :: XGAMINC_RIM1 => NULL(), &
                                   XGAMINC_RIM2 => NULL(), &
                                   XGAMINC_RIM4 => NULL()
    
    REAL,DIMENSION(:,:), POINTER :: XKER_RACCSS => NULL(), &
                                    XKER_RACCS => NULL(), &
                                    XKER_SACCRG => NULL(), &
                                    XKER_SDRYG => NULL(), &
                                    XKER_RDRYG => NULL(), &
                                    XKER_SWETH => NULL(), &
                                    XKER_GWETH => NULL(), &
                                    XKER_RWETH => NULL()
    CONTAINS
    
    SUBROUTINE RAIN_ICE_PARAM_ASSOCIATE()
    
      IMPLICIT NONE
      XFSEDC => RAIN_ICE_PARAM%XFSEDC
    
      !
      XFSEDR => RAIN_ICE_PARAM%XFSEDR
      XEXSEDR => RAIN_ICE_PARAM%XEXSEDR
      XFSEDI => RAIN_ICE_PARAM%XFSEDI
      XEXCSEDI => RAIN_ICE_PARAM%XEXCSEDI
      XEXRSEDI => RAIN_ICE_PARAM%XEXRSEDI
      XFSEDS => RAIN_ICE_PARAM%XFSEDS
      XEXSEDS => RAIN_ICE_PARAM%XEXSEDS
      XFSEDG => RAIN_ICE_PARAM%XFSEDG
      XEXSEDG => RAIN_ICE_PARAM%XEXSEDG
      XNU10 => RAIN_ICE_PARAM%XNU10
      XALPHA1 => RAIN_ICE_PARAM%XALPHA1
      XBETA1 => RAIN_ICE_PARAM%XBETA1
      XNU20 => RAIN_ICE_PARAM%XNU20
      XALPHA2 => RAIN_ICE_PARAM%XALPHA2
      XBETA2 => RAIN_ICE_PARAM%XBETA2
      XMNU0 => RAIN_ICE_PARAM%XMNU0
      XALPHA3 => RAIN_ICE_PARAM%XALPHA3
      XBETA3 => RAIN_ICE_PARAM%XBETA3
      XHON => RAIN_ICE_PARAM%XHON
      XSCFAC => RAIN_ICE_PARAM%XSCFAC
      X0EVAR => RAIN_ICE_PARAM%X0EVAR
      X1EVAR => RAIN_ICE_PARAM%X1EVAR
      XEX0EVAR => RAIN_ICE_PARAM%XEX0EVAR
      XEX1EVAR => RAIN_ICE_PARAM%XEX1EVAR
      X0DEPI => RAIN_ICE_PARAM%X0DEPI
      X2DEPI => RAIN_ICE_PARAM%X2DEPI
      X0DEPS => RAIN_ICE_PARAM%X0DEPS
      X1DEPS => RAIN_ICE_PARAM%X1DEPS
      XEX0DEPS => RAIN_ICE_PARAM%XEX0DEPS
      XEX1DEPS => RAIN_ICE_PARAM%XEX1DEPS
      X0DEPG => RAIN_ICE_PARAM%X0DEPG
      X1DEPG => RAIN_ICE_PARAM%X1DEPG
      XEX0DEPG => RAIN_ICE_PARAM%XEX0DEPG
      XEX1DEPG => RAIN_ICE_PARAM%XEX1DEPG
      XTIMAUTI => RAIN_ICE_PARAM%XTIMAUTI
      XTEXAUTI => RAIN_ICE_PARAM%XTEXAUTI
      XCRIAUTI => RAIN_ICE_PARAM%XCRIAUTI
      XT0CRIAUTI => RAIN_ICE_PARAM%XT0CRIAUTI
      XACRIAUTI => RAIN_ICE_PARAM%XACRIAUTI
      XBCRIAUTI => RAIN_ICE_PARAM%XBCRIAUTI
      XCOLIS => RAIN_ICE_PARAM%XCOLIS
      XCOLEXIS => RAIN_ICE_PARAM%XCOLEXIS
      XFIAGGS => RAIN_ICE_PARAM%XFIAGGS
      XEXIAGGS => RAIN_ICE_PARAM%XEXIAGGS
      XTIMAUTC => RAIN_ICE_PARAM%XTIMAUTC
      XCRIAUTC => RAIN_ICE_PARAM%XCRIAUTC
      XFCACCR => RAIN_ICE_PARAM%XFCACCR
      XEXCACCR => RAIN_ICE_PARAM%XEXCACCR
      XDCSLIM => RAIN_ICE_PARAM%XDCSLIM
      XCOLCS => RAIN_ICE_PARAM%XCOLCS
      XEXCRIMSS => RAIN_ICE_PARAM%XEXCRIMSS
      XCRIMSS => RAIN_ICE_PARAM%XCRIMSS
      XEXCRIMSG => RAIN_ICE_PARAM%XEXCRIMSG
      XCRIMSG => RAIN_ICE_PARAM%XCRIMSG
      XEXSRIMCG => RAIN_ICE_PARAM%XEXSRIMCG
      XSRIMCG => RAIN_ICE_PARAM%XSRIMCG
      XEXSRIMCG2 => RAIN_ICE_PARAM%XEXSRIMCG2
      XSRIMCG2 => RAIN_ICE_PARAM%XSRIMCG2
      XSRIMCG3 => RAIN_ICE_PARAM%XSRIMCG3
      XGAMINC_BOUND_MIN => RAIN_ICE_PARAM%XGAMINC_BOUND_MIN
      XGAMINC_BOUND_MAX => RAIN_ICE_PARAM%XGAMINC_BOUND_MAX
      XRIMINTP1 => RAIN_ICE_PARAM%XRIMINTP1
      XRIMINTP2 => RAIN_ICE_PARAM%XRIMINTP2
      XFRACCSS => RAIN_ICE_PARAM%XFRACCSS
      XLBRACCS1 => RAIN_ICE_PARAM%XLBRACCS1
      XLBRACCS2 => RAIN_ICE_PARAM%XLBRACCS2
      XLBRACCS3 => RAIN_ICE_PARAM%XLBRACCS3
      XFSACCRG => RAIN_ICE_PARAM%XFSACCRG
      XLBSACCR1 => RAIN_ICE_PARAM%XLBSACCR1
      XLBSACCR2 => RAIN_ICE_PARAM%XLBSACCR2
      XLBSACCR3 => RAIN_ICE_PARAM%XLBSACCR3
      XACCLBDAS_MIN => RAIN_ICE_PARAM%XACCLBDAS_MIN
      XACCLBDAS_MAX => RAIN_ICE_PARAM%XACCLBDAS_MAX
      XACCLBDAR_MIN => RAIN_ICE_PARAM%XACCLBDAR_MIN
      XACCLBDAR_MAX => RAIN_ICE_PARAM%XACCLBDAR_MAX
      XACCINTP1S => RAIN_ICE_PARAM%XACCINTP1S
      XACCINTP2S => RAIN_ICE_PARAM%XACCINTP2S
      XACCINTP1R => RAIN_ICE_PARAM%XACCINTP1R
      XACCINTP2R => RAIN_ICE_PARAM%XACCINTP2R
      XFSCVMG => RAIN_ICE_PARAM%XFSCVMG
      XCOLIR => RAIN_ICE_PARAM%XCOLIR
      XEXRCFRI => RAIN_ICE_PARAM%XEXRCFRI
      XRCFRI => RAIN_ICE_PARAM%XRCFRI
      XEXICFRR => RAIN_ICE_PARAM%XEXICFRR
      XICFRR => RAIN_ICE_PARAM%XICFRR
      XFCDRYG => RAIN_ICE_PARAM%XFCDRYG
      XCOLIG => RAIN_ICE_PARAM%XCOLIG
      XCOLEXIG => RAIN_ICE_PARAM%XCOLEXIG
      XFIDRYG => RAIN_ICE_PARAM%XFIDRYG
      XFIDRYG2 => RAIN_ICE_PARAM%XFIDRYG2
      XEXFIDRYG => RAIN_ICE_PARAM%XEXFIDRYG
      XCOLSG => RAIN_ICE_PARAM%XCOLSG
      XCOLEXSG => RAIN_ICE_PARAM%XCOLEXSG
      XFSDRYG => RAIN_ICE_PARAM%XFSDRYG
      XLBSDRYG1 => RAIN_ICE_PARAM%XLBSDRYG1
      XLBSDRYG2 => RAIN_ICE_PARAM%XLBSDRYG2
      XLBSDRYG3 => RAIN_ICE_PARAM%XLBSDRYG3
      XFRDRYG => RAIN_ICE_PARAM%XFRDRYG
      XLBRDRYG1 => RAIN_ICE_PARAM%XLBRDRYG1
      XLBRDRYG2 => RAIN_ICE_PARAM%XLBRDRYG2
      XLBRDRYG3 => RAIN_ICE_PARAM%XLBRDRYG3
      XDRYLBDAR_MIN => RAIN_ICE_PARAM%XDRYLBDAR_MIN
      XDRYLBDAR_MAX => RAIN_ICE_PARAM%XDRYLBDAR_MAX
      XDRYLBDAS_MIN => RAIN_ICE_PARAM%XDRYLBDAS_MIN
      XDRYLBDAS_MAX => RAIN_ICE_PARAM%XDRYLBDAS_MAX
      XDRYLBDAG_MIN => RAIN_ICE_PARAM%XDRYLBDAG_MIN
      XDRYLBDAG_MAX => RAIN_ICE_PARAM%XDRYLBDAG_MAX
      XDRYINTP1R => RAIN_ICE_PARAM%XDRYINTP1R
      XDRYINTP2R => RAIN_ICE_PARAM%XDRYINTP2R
      XDRYINTP1S => RAIN_ICE_PARAM%XDRYINTP1S
      XDRYINTP2S => RAIN_ICE_PARAM%XDRYINTP2S
      XDRYINTP1G => RAIN_ICE_PARAM%XDRYINTP1G
      XDRYINTP2G => RAIN_ICE_PARAM%XDRYINTP2G
      XFSEDH => RAIN_ICE_PARAM%XFSEDH
      XEXSEDH => RAIN_ICE_PARAM%XEXSEDH
      X0DEPH => RAIN_ICE_PARAM%X0DEPH
      X1DEPH => RAIN_ICE_PARAM%X1DEPH
      XEX0DEPH => RAIN_ICE_PARAM%XEX0DEPH
      XEX1DEPH => RAIN_ICE_PARAM%XEX1DEPH
      XCOLIH => RAIN_ICE_PARAM%XCOLIH
      XCOLEXIH => RAIN_ICE_PARAM%XCOLEXIH
      XCOLSH => RAIN_ICE_PARAM%XCOLSH
      XCOLEXSH => RAIN_ICE_PARAM%XCOLEXSH
      XCOLGH => RAIN_ICE_PARAM%XCOLGH
      XCOLEXGH => RAIN_ICE_PARAM%XCOLEXGH
      XFWETH => RAIN_ICE_PARAM%XFWETH
      XFSWETH => RAIN_ICE_PARAM%XFSWETH
      XLBSWETH1 => RAIN_ICE_PARAM%XLBSWETH1
      XLBSWETH2 => RAIN_ICE_PARAM%XLBSWETH2
      XLBSWETH3 => RAIN_ICE_PARAM%XLBSWETH3
      XFGWETH => RAIN_ICE_PARAM%XFGWETH
      XLBGWETH1 => RAIN_ICE_PARAM%XLBGWETH1
      XLBGWETH2 => RAIN_ICE_PARAM%XLBGWETH2
      XLBGWETH3 => RAIN_ICE_PARAM%XLBGWETH3
      XFRWETH => RAIN_ICE_PARAM%XFRWETH
      XLBRWETH1 => RAIN_ICE_PARAM%XLBRWETH1
      XLBRWETH2 => RAIN_ICE_PARAM%XLBRWETH2
      XLBRWETH3 => RAIN_ICE_PARAM%XLBRWETH3
      XWETLBDAS_MIN => RAIN_ICE_PARAM%XWETLBDAS_MIN
      XWETLBDAS_MAX => RAIN_ICE_PARAM%XWETLBDAS_MAX
      XWETLBDAG_MIN => RAIN_ICE_PARAM%XWETLBDAG_MIN
      XWETLBDAG_MAX => RAIN_ICE_PARAM%XWETLBDAG_MAX
      XWETLBDAR_MIN => RAIN_ICE_PARAM%XWETLBDAR_MIN
      XWETLBDAR_MAX => RAIN_ICE_PARAM%XWETLBDAR_MAX
      XWETLBDAH_MIN => RAIN_ICE_PARAM%XWETLBDAH_MIN
      XWETLBDAH_MAX => RAIN_ICE_PARAM%XWETLBDAH_MAX
      XWETINTP1S => RAIN_ICE_PARAM%XWETINTP1S
      XWETINTP2S => RAIN_ICE_PARAM%XWETINTP2S
      XWETINTP1G => RAIN_ICE_PARAM%XWETINTP1G
      XWETINTP2G => RAIN_ICE_PARAM%XWETINTP2G
      XWETINTP1R => RAIN_ICE_PARAM%XWETINTP1R
      XWETINTP2R => RAIN_ICE_PARAM%XWETINTP2R
      XWETINTP1H => RAIN_ICE_PARAM%XWETINTP1H
      XWETINTP2H => RAIN_ICE_PARAM%XWETINTP2H
      !
      NGAMINC => RAIN_ICE_PARAM%NGAMINC
      NACCLBDAS => RAIN_ICE_PARAM%NACCLBDAS
      NACCLBDAR => RAIN_ICE_PARAM%NACCLBDAR
      NDRYLBDAR => RAIN_ICE_PARAM%NDRYLBDAR
      NDRYLBDAS => RAIN_ICE_PARAM%NDRYLBDAS
      NDRYLBDAG => RAIN_ICE_PARAM%NDRYLBDAG
      NWETLBDAS => RAIN_ICE_PARAM%NWETLBDAS
      NWETLBDAG => RAIN_ICE_PARAM%NWETLBDAG
      NWETLBDAR => RAIN_ICE_PARAM%NWETLBDAR
      NWETLBDAH => RAIN_ICE_PARAM%NWETLBDAH
    END SUBROUTINE RAIN_ICE_PARAM_ASSOCIATE
    !
    
    SUBROUTINE RAIN_ICE_PARAM_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 arrays
        CASE('XGAMINC_RIM1')
          ALLOCATE(RAIN_ICE_PARAM%XGAMINC_RIM1(KDIM1))
          XGAMINC_RIM1 => RAIN_ICE_PARAM%XGAMINC_RIM1
        CASE('XGAMINC_RIM2')
          ALLOCATE(RAIN_ICE_PARAM%XGAMINC_RIM2(KDIM1))
          XGAMINC_RIM2 => RAIN_ICE_PARAM%XGAMINC_RIM2
        CASE('XGAMINC_RIM4')
          ALLOCATE(RAIN_ICE_PARAM%XGAMINC_RIM4(KDIM1))
          XGAMINC_RIM4 => RAIN_ICE_PARAM%XGAMINC_RIM4
        !
        !2D arrays
        CASE('XKER_RACCSS')
          ALLOCATE(RAIN_ICE_PARAM%XKER_RACCSS(KDIM1, KDIM2))
          XKER_RACCSS=> RAIN_ICE_PARAM%XKER_RACCSS
        CASE('XKER_RACCS')
          ALLOCATE(RAIN_ICE_PARAM%XKER_RACCS(KDIM1, KDIM2))
          XKER_RACCS=> RAIN_ICE_PARAM%XKER_RACCS
        CASE('XKER_SACCRG')
          ALLOCATE(RAIN_ICE_PARAM%XKER_SACCRG(KDIM1, KDIM2))
          XKER_SACCRG=> RAIN_ICE_PARAM%XKER_SACCRG
        CASE('XKER_SDRYG')
          ALLOCATE(RAIN_ICE_PARAM%XKER_SDRYG(KDIM1, KDIM2))
          XKER_SDRYG=> RAIN_ICE_PARAM%XKER_SDRYG
        CASE('XKER_RDRYG')
          ALLOCATE(RAIN_ICE_PARAM%XKER_RDRYG(KDIM1, KDIM2))
          XKER_RDRYG=> RAIN_ICE_PARAM%XKER_RDRYG
        CASE('XKER_SWETH')
          ALLOCATE(RAIN_ICE_PARAM%XKER_SWETH(KDIM1, KDIM2))
          XKER_SWETH=> RAIN_ICE_PARAM%XKER_SWETH
        CASE('XKER_GWETH')
          ALLOCATE(RAIN_ICE_PARAM%XKER_GWETH(KDIM1, KDIM2))
          XKER_GWETH=> RAIN_ICE_PARAM%XKER_GWETH
        CASE('XKER_RWETH')
          ALLOCATE(RAIN_ICE_PARAM%XKER_RWETH(KDIM1, KDIM2))
          XKER_RWETH=> RAIN_ICE_PARAM%XKER_RWETH
      END SELECT
    
    END SUBROUTINE RAIN_ICE_PARAM_ALLOCATE