diff --git a/docs/TODO b/docs/TODO
index 32bfd81be2f219b3dd33705f9dcc4b8557fde4ac..cf5bc57274f710708c0a1fdf457ab2fae2319eb8 100644
--- a/docs/TODO
+++ b/docs/TODO
@@ -17,12 +17,6 @@ Clé de compilation REPRO48 ajoutée pour permettre de reproduire le cycle 48, e
 Cette clé devra être supprimée
 
 Merge pb:
-- ice4_nucleation_wrapper:
-       Tableaux allocatable introduits par Philippe dans meso-nh.
-       Pas introduits (pour l'instant?) dans version common.
-       Ryad a fait des tests pour regarder impact des allocatable sur CPU => temps * 2
-       Code à nettoyer quelque soit l'option retenue
-       Dernier code de Ryad: /home/gmap/mrpm/khatib/public/modset/mods_ice4_nucleation_wrapper.tgz et/ou /home/gmap/mrpm/khatib/public/modset/ice4_nucleation_wrapper.f90
 - shallow_mf (appels dans aro_shallow et arp_shallow):
        Dans Méso-NH: shallow_mf doit être appelé avec PDX=XDXHAT(1) et PDY=XDYHAT(1)
        Dans AROME/ARP: où trouver la taille de maille?
@@ -36,7 +30,6 @@ Etape 2: array syntax -> loop
 - transformer sedimentation_split_momentum comme sedimentation_split
 - une distinction KSIZE/KPROMA est à faire dans la microphysique. Pour une meilleure compréhension du code, il faut partir
   du principe de déclarer tous les tableaux en KPROMA et de les utiliser que jusqu'à KSIZE
-- essayer l'outil développé par Juan
 
 Pb identifiés à corriger plus tard:
 - deposition devrait être déplacée dans ice4_tendencies
diff --git a/src/common/micro/ice4_nucleation_elem.func.h b/src/common/micro/ice4_nucleation_elem.func.h
index f9ef73991cae536f9e15786a60d153b783da3c69..32c89bc74f05b320197a43fb3531c7437ded6111 100644
--- a/src/common/micro/ice4_nucleation_elem.func.h
+++ b/src/common/micro/ice4_nucleation_elem.func.h
@@ -2,7 +2,7 @@
 !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.
-ELEMENTAL SUBROUTINE ICE4_NUCLEATION_ELEM(ODCOMPUTE, &
+ELEMENTAL SUBROUTINE ICE4_NUCLEATION_ELEM(CST, PARAMI, ICEP, ICED, ODCOMPUTE, &
                            PTHT, PPABST, PRHODREF, PEXN, PLSFACT, PT, &
                            PRVT, &
                            PCIT, PRVHENI_MR)
@@ -29,15 +29,19 @@ ELEMENTAL SUBROUTINE ICE4_NUCLEATION_ELEM(ODCOMPUTE, &
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_CST,            ONLY: XALPI, XALPW, XBETAI, XBETAW, XGAMI, XGAMW, XMD, XMV, XTT, XEPSILO
-USE MODD_PARAM_ICE,      ONLY: LFEEDBACKT
-USE MODD_RAIN_ICE_PARAM, ONLY: XALPHA1, XALPHA2, XBETA1, XBETA2, XMNU0, XNU10, XNU20
-USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN
+USE MODD_CST,            ONLY: CST_t
+USE MODD_PARAM_ICE,      ONLY: PARAM_ICE_t
+USE MODD_RAIN_ICE_DESCR, ONLY: RAIN_ICE_DESCR_t
+USE MODD_RAIN_ICE_PARAM, ONLY: RAIN_ICE_PARAM_t
 !
 IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
+TYPE(CST_t),              INTENT(IN)    :: CST
+TYPE(PARAM_ICE_t),        INTENT(IN)    :: PARAMI
+TYPE(RAIN_ICE_PARAM_t),   INTENT(IN)    :: ICEP
+TYPE(RAIN_ICE_DESCR_t),   INTENT(IN)    :: ICED
 LOGICAL, INTENT(IN)    :: ODCOMPUTE
 REAL,    INTENT(IN)    :: PTHT    ! Theta at t
 REAL,    INTENT(IN)    :: PPABST  ! absolute pressure at t
@@ -58,16 +62,16 @@ REAL  :: ZZW,      & ! Work scalar
          ZSSI        ! Supersaturation over ice
 !-------------------------------------------------------------------------------
 !
-GNEGT=PT<XTT .AND. PRVT>XRTMIN(1) .AND. ODCOMPUTE
+GNEGT=PT<CST%XTT .AND. PRVT>ICED%XRTMIN(1) .AND. ODCOMPUTE
 
 PRVHENI_MR=0.
 IF(GNEGT) THEN
   ZZW=ALOG(PT)
-  ZUSW=EXP(XALPW - XBETAW/PT - XGAMW*ZZW)          ! es_w
-  ZZW=EXP(XALPI - XBETAI/PT - XGAMI*ZZW)           ! es_i
+  ZUSW=EXP(CST%XALPW - CST%XBETAW/PT - CST%XGAMW*ZZW)          ! es_w
+  ZZW=EXP(CST%XALPI - CST%XBETAI/PT - CST%XGAMI*ZZW)           ! es_i
 
   ZZW=MIN(PPABST/2., ZZW)             ! safety limitation
-  ZSSI=PRVT*(PPABST-ZZW) / (XEPSILO*ZZW) - 1.0 ! Supersaturation over ice
+  ZSSI=PRVT*(PPABST-ZZW) / (CST%XEPSILO*ZZW) - 1.0 ! Supersaturation over ice
   ZUSW=MIN(PPABST/2., ZUSW)            ! safety limitation
   ZUSW=(ZUSW/ZZW)*((PPABST-ZZW)/(PPABST-ZUSW)) - 1.0
                              ! Supersaturation of saturated water vapor over ice
@@ -78,11 +82,11 @@ IF(GNEGT) THEN
   !
   ZSSI=MIN(ZSSI, ZUSW) ! limitation of SSi according to SSw=0
 
-  IF(PT<XTT-5. .AND. ZSSI>0.) THEN
-    ZZW=XNU20*EXP(XALPHA2*ZSSI-XBETA2)
-  ELSEIF(PT<=XTT-2. .AND. PT>=XTT-5. .AND. ZSSI>0.) THEN
-    ZZW=MAX(XNU20*EXP(-XBETA2 ), &
-            XNU10*EXP(-XBETA1*(PT-XTT))*(ZSSI/ZUSW)**XALPHA1)
+  IF(PT<CST%XTT-5. .AND. ZSSI>0.) THEN
+    ZZW=ICEP%XNU20*EXP(ICEP%XALPHA2*ZSSI-ICEP%XBETA2)
+  ELSEIF(PT<=CST%XTT-2. .AND. PT>=CST%XTT-5. .AND. ZSSI>0.) THEN
+    ZZW=MAX(ICEP%XNU20*EXP(-ICEP%XBETA2 ), &
+            ICEP%XNU10*EXP(-ICEP%XBETA1*(PT-CST%XTT))*(ZSSI/ZUSW)**ICEP%XALPHA1)
   ELSE
     ZZW=0.
   ENDIF
@@ -92,13 +96,13 @@ IF(GNEGT) THEN
   !
   !*       3.1.2   update the r_i and r_v mixing ratios
   !
-  PRVHENI_MR=MAX(ZZW, 0.0)*XMNU0/PRHODREF
+  PRVHENI_MR=MAX(ZZW, 0.0)*ICEP%XMNU0/PRHODREF
   PRVHENI_MR=MIN(PRVT, PRVHENI_MR)
   !
   !Limitation due to 0 crossing of temperature
   !
-  IF(LFEEDBACKT) THEN
-    ZW=MIN(PRVHENI_MR, MAX(0., (XTT/PEXN-PTHT)/PLSFACT)) / &
+  IF(PARAMI%LFEEDBACKT) THEN
+    ZW=MIN(PRVHENI_MR, MAX(0., (CST%XTT/PEXN-PTHT)/PLSFACT)) / &
        MAX(PRVHENI_MR, 1.E-20)
     PRVHENI_MR=PRVHENI_MR*ZW
     ZZW=ZZW*ZW
diff --git a/src/common/micro/mode_ice4_compute_pdf.F90 b/src/common/micro/mode_ice4_compute_pdf.F90
index 411cdddad26897dcf9f0fbc50c4a4459fdf946e7..ab0851d54b60af84c1a22e09ed1446c1ad6e91d2 100644
--- a/src/common/micro/mode_ice4_compute_pdf.F90
+++ b/src/common/micro/mode_ice4_compute_pdf.F90
@@ -6,7 +6,7 @@
 MODULE MODE_ICE4_COMPUTE_PDF
 IMPLICIT NONE
 CONTAINS
-SUBROUTINE ICE4_COMPUTE_PDF(KSIZE, HSUBG_AUCV_RC, HSUBG_AUCV_RI, HSUBG_PR_PDF, &
+SUBROUTINE ICE4_COMPUTE_PDF(CST, ICEP, ICED, KSIZE, HSUBG_AUCV_RC, HSUBG_AUCV_RI, HSUBG_PR_PDF, &
                             PRHODREF, PRCT, PRIT, PCF, PT, PSIGMA_RC,&
                             PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC, &
                             PHLI_HCF, PHLI_LCF, PHLI_HRI, PHLI_LRI, PRF)
@@ -28,11 +28,11 @@ SUBROUTINE ICE4_COMPUTE_PDF(KSIZE, HSUBG_AUCV_RC, HSUBG_AUCV_RI, HSUBG_PR_PDF, &
 !          ------------
 !
 !
+USE MODD_CST,            ONLY: CST_t
+USE MODD_RAIN_ICE_DESCR, ONLY: RAIN_ICE_DESCR_t
+USE MODD_RAIN_ICE_PARAM, ONLY: RAIN_ICE_PARAM_t
 USE PARKIND1, ONLY : JPRB
 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
-USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN
-USE MODD_RAIN_ICE_PARAM, ONLY: XCRIAUTC, XBCRIAUTI, XACRIAUTI, XCRIAUTI
-USE MODD_CST, ONLY : XTT
 !
 USE MODE_MSG
 !
@@ -40,6 +40,9 @@ IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
+TYPE(CST_t),              INTENT(IN)    :: CST
+TYPE(RAIN_ICE_PARAM_t),   INTENT(IN)    :: ICEP
+TYPE(RAIN_ICE_DESCR_t),   INTENT(IN)    :: ICED
 INTEGER,                INTENT(IN)  :: KSIZE
 CHARACTER(LEN=4),       INTENT(IN)  :: HSUBG_AUCV_RC     ! Kind of Subgrid autoconversion method for cloud water
 CHARACTER(LEN=80),      INTENT(IN)  :: HSUBG_AUCV_RI     ! Kind of Subgrid autoconversion method for cloud ice
@@ -81,7 +84,7 @@ INTEGER :: JI
 IF (LHOOK) CALL DR_HOOK('ICE4_COMPUTE_PDF', 0, ZHOOK_HANDLE)!
 
 !Cloud water split between high and low content part is done according to autoconversion option
-ZRCRAUTC(:)=XCRIAUTC/PRHODREF(:) ! Autoconversion rc threshold
+ZRCRAUTC(:)=ICEP%XCRIAUTC/PRHODREF(:) ! Autoconversion rc threshold
 IF(HSUBG_AUCV_RC=='NONE') THEN
   !Cloud water is entirely in low or high part
  !$mnh_expand_where(JI=1:KSIZE)
@@ -90,7 +93,7 @@ IF(HSUBG_AUCV_RC=='NONE') THEN
     PHLC_LCF(:)=0.
     PHLC_HRC(:)=PRCT(:)
     PHLC_LRC(:)=0.
-  ELSEWHERE(PRCT(:)>XRTMIN(2))
+  ELSEWHERE(PRCT(:)>ICED%XRTMIN(2))
     PHLC_HCF(:)=0.
     PHLC_LCF(:)=1.
     PHLC_HRC(:)=0.
@@ -111,7 +114,7 @@ ELSEIF(HSUBG_AUCV_RC=='CLFR') THEN
     PHLC_LCF(:)=0.
     PHLC_HRC(:)=PRCT(:)
     PHLC_LRC(:)=0.
-  ELSEWHERE(PCF(:)>0. .AND. PRCT(:)>XRTMIN(2))
+  ELSEWHERE(PCF(:)>0. .AND. PRCT(:)>ICED%XRTMIN(2))
     PHLC_HCF(:)=0.
     PHLC_LCF(:)=PCF(:)
     PHLC_HRC(:)=0.0
@@ -158,7 +161,7 @@ ELSEIF(HSUBG_AUCV_RC=='PDF ') THEN
                   &(PRCT(:)+PSIGMA_RC(:)+ZRCRAUTC(:))/ &
                   &(4.*PSIGMA_RC(:))
       PHLC_LRC(:)=MAX(0., PRCT(:)-PHLC_HRC(:))
-    ELSEWHERE(PRCT(:)>XRTMIN(2) .AND. PCF(:)>0.)
+    ELSEWHERE(PRCT(:)>ICED%XRTMIN(2) .AND. PCF(:)>0.)
       PHLC_HCF(:)=0.
       PHLC_LCF(:)=PCF(:)
       PHLC_HRC(:)=0.
@@ -258,7 +261,7 @@ ENDIF
 !
 !Ice water split between high and low content part is done according to autoconversion option
 !$mnh_expand_where(JI=1:KSIZE)
-  ZCRIAUTI(:)=MIN(XCRIAUTI,10**(XACRIAUTI*(PT(:)-XTT)+XBCRIAUTI)) ! Autoconversion ri threshold
+  ZCRIAUTI(:)=MIN(ICEP%XCRIAUTI,10**(ICEP%XACRIAUTI*(PT(:)-CST%XTT)+ICEP%XBCRIAUTI)) ! Autoconversion ri threshold
 !$mnh_end_expand_where(JI=1:KSIZE)
 IF(HSUBG_AUCV_RI=='NONE') THEN
  !$mnh_expand_where(JI=1:KSIZE)
@@ -277,7 +280,7 @@ IF(HSUBG_AUCV_RI=='NONE') THEN
     PHLI_LCF(:)=0.
     PHLI_HRI(:)=PRIT(:)
     PHLI_LRI(:)=0.
-  ELSEWHERE(PRIT(:)>XRTMIN(4))
+  ELSEWHERE(PRIT(:)>ICED%XRTMIN(4))
     PHLI_HCF(:)=0.
     PHLI_LCF(:)=1.
     PHLI_HRI(:)=0.
@@ -298,7 +301,7 @@ ELSEIF(HSUBG_AUCV_RI=='CLFR') THEN
     PHLI_LCF(:)=0.
     PHLI_HRI(:)=PRIT(:)
     PHLI_LRI(:)=0.
-  ELSEWHERE(PCF(:)>0. .AND. PRIT(:)>XRTMIN(4))
+  ELSEWHERE(PCF(:)>0. .AND. PRIT(:)>ICED%XRTMIN(4))
     PHLI_HCF(:)=0.
     PHLI_LCF(:)=PCF(:)
     PHLI_HRI(:)=0.0
diff --git a/src/common/micro/mode_ice4_fast_rg.F90 b/src/common/micro/mode_ice4_fast_rg.F90
index c55e068823b4dd9599b28bfc0f127434071979da..b441822f5bbd6a96ef806cdc41350ae6625ea2a9 100644
--- a/src/common/micro/mode_ice4_fast_rg.F90
+++ b/src/common/micro/mode_ice4_fast_rg.F90
@@ -5,7 +5,7 @@
 MODULE MODE_ICE4_FAST_RG
 IMPLICIT NONE
 CONTAINS
-SUBROUTINE ICE4_FAST_RG(KPROMA,KSIZE, LDSOFT, PCOMPUTE, KRR, &
+SUBROUTINE ICE4_FAST_RG(CST, PARAMI, ICEP, ICED, KPROMA,KSIZE, LDSOFT, PCOMPUTE, KRR, &
                        &PRHODREF, PLVFACT, PLSFACT, PPRES, &
                        &PDV, PKA, PCJ, PCIT, &
                        &PLBDAR, PLBDAS, PLBDAG, &
@@ -36,15 +36,10 @@ SUBROUTINE ICE4_FAST_RG(KPROMA,KSIZE, LDSOFT, PCOMPUTE, KRR, &
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_CST,            ONLY: XALPI, XALPW, XBETAI, XBETAW, XGAMW, XCI, XCL, XCPV, XESTT, XGAMI, &
-                             & XLMTT, XLVTT, XMD, XMV, XRV, XTT, XEPSILO
-USE MODD_PARAM_ICE,      ONLY: LCRFLIMIT, LEVLIMIT, LNULLWETG, LWETGPOST
-USE MODD_RAIN_ICE_DESCR, ONLY: XBS, XCEXVT, XCXG, XCXS, XDG, XRTMIN
-USE MODD_RAIN_ICE_PARAM, ONLY: NDRYLBDAG, NDRYLBDAR, NDRYLBDAS, X0DEPG, X1DEPG, XCOLEXIG, XCOLEXSG, XCOLIG, &
-                             & XCOLSG, XDRYINTP1G, XDRYINTP1R, XDRYINTP1S, XDRYINTP2G, XDRYINTP2R, XDRYINTP2S, &
-                             & XEX0DEPG, XEX1DEPG, XEXICFRR,  XEXRCFRI, XFCDRYG, XFIDRYG, XFRDRYG, &
-                             & XFSDRYG, XICFRR, XKER_RDRYG, XKER_SDRYG, XLBRDRYG1,  XLBRDRYG2, XLBRDRYG3, &
-                             & XLBSDRYG1, XLBSDRYG2, XLBSDRYG3, XRCFRI
+USE MODD_CST,            ONLY: CST_t
+USE MODD_PARAM_ICE,      ONLY: PARAM_ICE_t
+USE MODD_RAIN_ICE_DESCR, ONLY: RAIN_ICE_DESCR_t
+USE MODD_RAIN_ICE_PARAM, ONLY: RAIN_ICE_PARAM_t
 USE PARKIND1, ONLY : JPRB
 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !
@@ -52,6 +47,10 @@ IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
+TYPE(CST_t),              INTENT(IN)    :: CST
+TYPE(PARAM_ICE_t),        INTENT(IN)    :: PARAMI
+TYPE(RAIN_ICE_PARAM_t),   INTENT(IN)    :: ICEP
+TYPE(RAIN_ICE_DESCR_t),   INTENT(IN)    :: ICED
 INTEGER,                      INTENT(IN)    :: KPROMA,KSIZE
 LOGICAL,                      INTENT(IN)    :: LDSOFT
 REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PCOMPUTE
@@ -127,8 +126,8 @@ IF (LHOOK) CALL DR_HOOK('ICE4_FAST_RG', 0, ZHOOK_HANDLE)
 !*       6.1    rain contact freezing
 !
 DO JL=1, KSIZE
-  ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(4)-PRIT(JL))) * & ! WHERE(PRIT(:)>XRTMIN(4))
-           &MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JL))) * & ! WHERE(PRRT(:)>XRTMIN(3))
+  ZMASK(JL)=MAX(0., -SIGN(1., ICED%XRTMIN(4)-PRIT(JL))) * & ! WHERE(PRIT(:)>XRTMIN(4))
+           &MAX(0., -SIGN(1., ICED%XRTMIN(3)-PRRT(JL))) * & ! WHERE(PRRT(:)>XRTMIN(3))
            &PCOMPUTE(JL)
 ENDDO
 IF(LDSOFT) THEN
@@ -141,21 +140,21 @@ ELSE
   PRICFRRG(:)=0.
   PRRCFRIG(:)=0.
   WHERE(ZMASK(:)==1.)
-    PRICFRRG(:) = XICFRR*PRIT(:)                & ! RICFRRG
-                                 *PLBDAR(:)**XEXICFRR    &
-                                 *PRHODREF(:)**(-XCEXVT)
-    PRRCFRIG(:) = XRCFRI*PCIT(:)                & ! RRCFRIG
-                                 * PLBDAR(:)**XEXRCFRI    &
-                                 * PRHODREF(:)**(-XCEXVT-1.)
+    PRICFRRG(:) = ICEP%XICFRR*PRIT(:)                & ! RICFRRG
+                                 *PLBDAR(:)**ICEP%XEXICFRR    &
+                                 *PRHODREF(:)**(-ICED%XCEXVT)
+    PRRCFRIG(:) = ICEP%XRCFRI*PCIT(:)                & ! RRCFRIG
+                                 * PLBDAR(:)**ICEP%XEXRCFRI    &
+                                 * PRHODREF(:)**(-ICED%XCEXVT-1.)
   END WHERE
 
-  IF(LCRFLIMIT) THEN
+  IF(PARAMI%LCRFLIMIT) THEN
     DO JL=1, KSIZE
       !Comparison between heat to be released (to freeze rain) and heat sink (rain and ice temperature change)
       !ZZW is the proportion of process that can take place
       ZZW(JL)=(1.-ZMASK(JL)) + & ! 1. outside of mask
-              ZMASK(JL) * MAX(0., MIN(1., (PRICFRRG(JL)*XCI+PRRCFRIG(JL)*XCL)*(XTT-PT(JL)) / &
-                                          MAX(1.E-20, XLVTT*PRRCFRIG(JL))))
+              ZMASK(JL) * MAX(0., MIN(1., (PRICFRRG(JL)*CST%XCI+PRRCFRIG(JL)*CST%XCL)*(CST%XTT-PT(JL)) / &
+                                          MAX(1.E-20, CST%XLVTT*PRRCFRIG(JL))))
     ENDDO
   ELSE
     ZZW(:)=1.
@@ -172,8 +171,8 @@ ENDIF
 !
 ! Wet and dry collection of rc and ri on graupel
 DO JL=1, KSIZE
-  ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(6)-PRGT(JL))) * & ! WHERE(PRGT(:)>XRTMIN(6))
-           &MAX(0., -SIGN(1., XRTMIN(2)-PRCT(JL))) * & ! WHERE(PRCT(:)>XRTMIN(2))
+  ZMASK(JL)=MAX(0., -SIGN(1., ICED%XRTMIN(6)-PRGT(JL))) * & ! WHERE(PRGT(:)>XRTMIN(6))
+           &MAX(0., -SIGN(1., ICED%XRTMIN(2)-PRCT(JL))) * & ! WHERE(PRCT(:)>XRTMIN(2))
            &PCOMPUTE(JL)
 ENDDO
 IF(LDSOFT) THEN
@@ -183,16 +182,16 @@ IF(LDSOFT) THEN
 ELSE
   ZZW(:)=0.
   WHERE(ZMASK(:)==1.)
-    ZZW(:)=PLBDAG(:)**(XCXG-XDG-2.) * PRHODREF(:)**(-XCEXVT)
+    ZZW(:)=PLBDAG(:)**(ICED%XCXG-ICED%XDG-2.) * PRHODREF(:)**(-ICED%XCEXVT)
   END WHERE
   DO JL=1, KSIZE
-    PRG_TEND(JL, IRCDRYG)=ZMASK(JL)*XFCDRYG * PRCT(JL) * ZZW(JL)
+    PRG_TEND(JL, IRCDRYG)=ZMASK(JL)*ICEP%XFCDRYG * PRCT(JL) * ZZW(JL)
   ENDDO
 ENDIF
 
 DO JL=1, KSIZE
-  ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(6)-PRGT(JL))) * & ! WHERE(PRGT(:)>XRTMIN(6))
-           &MAX(0., -SIGN(1., XRTMIN(4)-PRIT(JL))) * & ! WHERE(PRIT(:)>XRTMIN(4))
+  ZMASK(JL)=MAX(0., -SIGN(1., ICED%XRTMIN(6)-PRGT(JL))) * & ! WHERE(PRGT(:)>XRTMIN(6))
+           &MAX(0., -SIGN(1., ICED%XRTMIN(4)-PRIT(JL))) * & ! WHERE(PRIT(:)>XRTMIN(4))
            &PCOMPUTE(JL)
 ENDDO
 IF(LDSOFT) THEN
@@ -204,17 +203,17 @@ ELSE
   PRG_TEND(:, IRIDRYG)=0.
   PRG_TEND(:, IRIWETG)=0.
   WHERE(ZMASK(1:KSIZE)==1.)
-    ZZW(1:KSIZE)=PLBDAG(1:KSIZE)**(XCXG-XDG-2.) * PRHODREF(1:KSIZE)**(-XCEXVT)
-    PRG_TEND(1:KSIZE, IRIDRYG)=XFIDRYG*EXP(XCOLEXIG*(PT(1:KSIZE)-XTT))*PRIT(1:KSIZE)*ZZW(1:KSIZE)
-    PRG_TEND(1:KSIZE, IRIWETG)=PRG_TEND(1:KSIZE, IRIDRYG) / (XCOLIG*EXP(XCOLEXIG*(PT(1:KSIZE)-XTT)))
+    ZZW(1:KSIZE)=PLBDAG(1:KSIZE)**(ICED%XCXG-ICED%XDG-2.) * PRHODREF(1:KSIZE)**(-ICED%XCEXVT)
+    PRG_TEND(1:KSIZE, IRIDRYG)=ICEP%XFIDRYG*EXP(ICEP%XCOLEXIG*(PT(1:KSIZE)-CST%XTT))*PRIT(1:KSIZE)*ZZW(1:KSIZE)
+    PRG_TEND(1:KSIZE, IRIWETG)=PRG_TEND(1:KSIZE, IRIDRYG) / (ICEP%XCOLIG*EXP(ICEP%XCOLEXIG*(PT(1:KSIZE)-CST%XTT)))
   END WHERE
 ENDIF
 
 ! Wet and dry collection of rs on graupel (6.2.1)
 IGDRY = 0
 DO JJ = 1, KSIZE
-  ZDRY(JJ)=MAX(0., -SIGN(1., XRTMIN(5)-PRST(JJ))) * & ! WHERE(PRST(:)>XRTMIN(5))
-          &MAX(0., -SIGN(1., XRTMIN(6)-PRGT(JJ))) * & ! WHERE(PRGT(:)>XRTMIN(6))
+  ZDRY(JJ)=MAX(0., -SIGN(1., ICED%XRTMIN(5)-PRST(JJ))) * & ! WHERE(PRST(:)>XRTMIN(5))
+          &MAX(0., -SIGN(1., ICED%XRTMIN(6)-PRGT(JJ))) * & ! WHERE(PRGT(:)>XRTMIN(6))
           &PCOMPUTE(JJ)
   IF (ZDRY(JJ)>0) THEN
     IGDRY = IGDRY + 1
@@ -245,13 +244,13 @@ ELSE
     !               in the geometrical set of (Lbda_g,Lbda_s) couplet use to
     !               tabulate the SDRYG-kernel
     !
-    ZVEC1(1:IGDRY)=MAX(1.00001, MIN(REAL(NDRYLBDAG)-0.00001,           &
-                          XDRYINTP1G*LOG(ZVEC1(1:IGDRY))+XDRYINTP2G))
+    ZVEC1(1:IGDRY)=MAX(1.00001, MIN(REAL(ICEP%NDRYLBDAG)-0.00001,           &
+                          ICEP%XDRYINTP1G*LOG(ZVEC1(1:IGDRY))+ICEP%XDRYINTP2G))
     IVEC1(1:IGDRY)=INT(ZVEC1(1:IGDRY) )
     ZVEC1(1:IGDRY)=ZVEC1(1:IGDRY)-REAL(IVEC1(1:IGDRY))
     !
-    ZVEC2(1:IGDRY)=MAX(1.00001, MIN( REAL(NDRYLBDAS)-0.00001,           &
-                          XDRYINTP1S*LOG(ZVEC2(1:IGDRY))+XDRYINTP2S))
+    ZVEC2(1:IGDRY)=MAX(1.00001, MIN( REAL(ICEP%NDRYLBDAS)-0.00001,           &
+                          ICEP%XDRYINTP1S*LOG(ZVEC2(1:IGDRY))+ICEP%XDRYINTP2S))
     IVEC2(1:IGDRY)=INT(ZVEC2(1:IGDRY))
     ZVEC2(1:IGDRY)=ZVEC2(1:IGDRY)-REAL(IVEC2(1:IGDRY))
     !
@@ -259,11 +258,11 @@ ELSE
     !               SDRYG-kernel
     !
     DO JJ=1, IGDRY
-      ZVEC3(JJ) =  (  XKER_SDRYG(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                    - XKER_SDRYG(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
+      ZVEC3(JJ) =  (  ICEP%XKER_SDRYG(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
+                    - ICEP%XKER_SDRYG(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
                                                          * ZVEC1(JJ) &
-                 - (  XKER_SDRYG(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                    - XKER_SDRYG(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
+                 - (  ICEP%XKER_SDRYG(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
+                    - ICEP%XKER_SDRYG(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
                                                          *(ZVEC1(JJ) - 1.0)
     END DO
     ZZW(:) = 0.
@@ -272,14 +271,14 @@ ELSE
     END DO
     !
     WHERE(GDRY(1:KSIZE))
-      PRG_TEND(1:KSIZE, IRSWETG)=XFSDRYG*ZZW(1:KSIZE)                         & ! RSDRYG
-                                    / XCOLSG &
-                  *(PLBDAS(1:KSIZE)**(XCXS-XBS))*( PLBDAG(1:KSIZE)**XCXG )    &
-                  *(PRHODREF(1:KSIZE)**(-XCEXVT-1.))                    &
-                       *( XLBSDRYG1/( PLBDAG(1:KSIZE)**2              ) + &
-                          XLBSDRYG2/( PLBDAG(1:KSIZE)   * PLBDAS(1:KSIZE)   ) + &
-                          XLBSDRYG3/(               PLBDAS(1:KSIZE)**2))
-      PRG_TEND(1:KSIZE, IRSDRYG)=PRG_TEND(1:KSIZE, IRSWETG)*XCOLSG*EXP(XCOLEXSG*(PT(1:KSIZE)-XTT))
+      PRG_TEND(1:KSIZE, IRSWETG)=ICEP%XFSDRYG*ZZW(1:KSIZE)                         & ! RSDRYG
+                                    / ICEP%XCOLSG &
+                  *(PLBDAS(1:KSIZE)**(ICED%XCXS-ICED%XBS))*( PLBDAG(1:KSIZE)**ICED%XCXG )    &
+                  *(PRHODREF(1:KSIZE)**(-ICED%XCEXVT-1.))                    &
+                       *( ICEP%XLBSDRYG1/( PLBDAG(1:KSIZE)**2              ) + &
+                          ICEP%XLBSDRYG2/( PLBDAG(1:KSIZE)   * PLBDAS(1:KSIZE)   ) + &
+                          ICEP%XLBSDRYG3/(               PLBDAS(1:KSIZE)**2))
+      PRG_TEND(1:KSIZE, IRSDRYG)=PRG_TEND(1:KSIZE, IRSWETG)*ICEP%XCOLSG*EXP(ICEP%XCOLEXSG*(PT(1:KSIZE)-CST%XTT))
     END WHERE
   ENDIF
 ENDIF
@@ -288,8 +287,8 @@ ENDIF
 !
 IGDRY = 0
 DO JJ = 1, KSIZE
-  ZDRY(JJ)=MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JJ))) * & ! WHERE(PRRT(:)>XRTMIN(3))
-          &MAX(0., -SIGN(1., XRTMIN(6)-PRGT(JJ))) * & ! WHERE(PRGT(:)>XRTMIN(6))
+  ZDRY(JJ)=MAX(0., -SIGN(1., ICED%XRTMIN(3)-PRRT(JJ))) * & ! WHERE(PRRT(:)>XRTMIN(3))
+          &MAX(0., -SIGN(1., ICED%XRTMIN(6)-PRGT(JJ))) * & ! WHERE(PRGT(:)>XRTMIN(6))
           &PCOMPUTE(JJ)
   IF (ZDRY(JJ)>0) THEN
     IGDRY = IGDRY + 1
@@ -319,13 +318,13 @@ ELSE
     !               in the geometrical set of (Lbda_g,Lbda_r) couplet use to
     !               tabulate the RDRYG-kernel
     !
-    ZVEC1(1:IGDRY)=MAX(1.00001, MIN( REAL(NDRYLBDAG)-0.00001,           &
-                          XDRYINTP1G*LOG(ZVEC1(1:IGDRY))+XDRYINTP2G))
+    ZVEC1(1:IGDRY)=MAX(1.00001, MIN( REAL(ICEP%NDRYLBDAG)-0.00001,           &
+                          ICEP%XDRYINTP1G*LOG(ZVEC1(1:IGDRY))+ICEP%XDRYINTP2G))
     IVEC1(1:IGDRY)=INT(ZVEC1(1:IGDRY))
     ZVEC1(1:IGDRY)=ZVEC1(1:IGDRY)-REAL(IVEC1(1:IGDRY))
     !
-    ZVEC2(1:IGDRY)=MAX(1.00001, MIN( REAL(NDRYLBDAR)-0.00001,           &
-                          XDRYINTP1R*LOG(ZVEC2(1:IGDRY))+XDRYINTP2R))
+    ZVEC2(1:IGDRY)=MAX(1.00001, MIN( REAL(ICEP%NDRYLBDAR)-0.00001,           &
+                          ICEP%XDRYINTP1R*LOG(ZVEC2(1:IGDRY))+ICEP%XDRYINTP2R))
     IVEC2(1:IGDRY)=INT(ZVEC2(1:IGDRY))
     ZVEC2(1:IGDRY)=ZVEC2(1:IGDRY)-REAL(IVEC2(1:IGDRY))
     !
@@ -333,11 +332,11 @@ ELSE
     !               RDRYG-kernel
     !
     DO JJ=1, IGDRY
-      ZVEC3(JJ)= (  XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                    - XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
+      ZVEC3(JJ)= (  ICEP%XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
+                    - ICEP%XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
                                                                   * ZVEC1(JJ) &
-                 - (  XKER_RDRYG(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                    - XKER_RDRYG(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
+                 - (  ICEP%XKER_RDRYG(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
+                    - ICEP%XKER_RDRYG(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
                                                          *(ZVEC1(JJ) - 1.0)
     END DO
     ZZW(:) = 0.
@@ -346,12 +345,12 @@ ELSE
     END DO
     !
     WHERE(GDRY(1:KSIZE))
-      PRG_TEND(1:KSIZE, IRRDRYG) = XFRDRYG*ZZW(1:KSIZE)                    & ! RRDRYG
-                        *( PLBDAR(1:KSIZE)**(-4) )*( PLBDAG(1:KSIZE)**XCXG ) &
-                               *( PRHODREF(1:KSIZE)**(-XCEXVT-1.) )   &
-                    *( XLBRDRYG1/( PLBDAG(1:KSIZE)**2              ) + &
-                       XLBRDRYG2/( PLBDAG(1:KSIZE)   * PLBDAR(1:KSIZE)   ) + &
-                       XLBRDRYG3/(               PLBDAR(1:KSIZE)**2) )
+      PRG_TEND(1:KSIZE, IRRDRYG) = ICEP%XFRDRYG*ZZW(1:KSIZE)                    & ! RRDRYG
+                        *( PLBDAR(1:KSIZE)**(-4) )*( PLBDAG(1:KSIZE)**ICED%XCXG ) &
+                               *( PRHODREF(1:KSIZE)**(-ICED%XCEXVT-1.) )   &
+                    *( ICEP%XLBRDRYG1/( PLBDAG(1:KSIZE)**2              ) + &
+                       ICEP%XLBRDRYG2/( PLBDAG(1:KSIZE)   * PLBDAR(1:KSIZE)   ) + &
+                       ICEP%XLBRDRYG3/(               PLBDAR(1:KSIZE)**2) )
     END WHERE
   ENDIF
 ENDIF
@@ -363,7 +362,7 @@ ENDDO
 
 !Freezing rate
 DO JL=1, KSIZE
-  ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(6)-PRGT(JL))) * & ! WHERE(PRGT(:)>XRTMIN(6))
+  ZMASK(JL)=MAX(0., -SIGN(1., ICED%XRTMIN(6)-PRGT(JL))) * & ! WHERE(PRGT(:)>XRTMIN(6))
            &PCOMPUTE(JL)
 ENDDO
 IF(LDSOFT) THEN
@@ -373,23 +372,23 @@ IF(LDSOFT) THEN
   ENDDO
 ELSE
   DO JL=1, KSIZE
-    PRG_TEND(JL, IFREEZ1)=ZMASK(JL) * PRVT(JL)*PPRES(JL)/(XEPSILO+PRVT(JL)) ! Vapor pressure
+    PRG_TEND(JL, IFREEZ1)=ZMASK(JL) * PRVT(JL)*PPRES(JL)/(CST%XEPSILO+PRVT(JL)) ! Vapor pressure
   ENDDO
-  IF(LEVLIMIT) THEN
+  IF(PARAMI%LEVLIMIT) THEN
     WHERE(ZMASK(1:KSIZE)==1.)
-      PRG_TEND(1:KSIZE, IFREEZ1)=MIN(PRG_TEND(1:KSIZE, IFREEZ1), EXP(XALPI-XBETAI/PT(1:KSIZE)-XGAMI*ALOG(PT(1:KSIZE)))) ! min(ev, es_i(T))
+      PRG_TEND(1:KSIZE, IFREEZ1)=MIN(PRG_TEND(1:KSIZE, IFREEZ1), EXP(CST%XALPI-CST%XBETAI/PT(1:KSIZE)-CST%XGAMI*ALOG(PT(1:KSIZE)))) ! min(ev, es_i(T))
     END WHERE
   ENDIF
   PRG_TEND(:, IFREEZ2)=0.
   WHERE(ZMASK(1:KSIZE)==1.)
-    PRG_TEND(1:KSIZE, IFREEZ1)=PKA(1:KSIZE)*(XTT-PT(1:KSIZE)) +                              &
-             (PDV(1:KSIZE)*(XLVTT+(XCPV-XCL)*(PT(1:KSIZE)-XTT)) &
-                           *(XESTT-PRG_TEND(1:KSIZE, IFREEZ1))/(XRV*PT(1:KSIZE))           )
-    PRG_TEND(1:KSIZE, IFREEZ1)=PRG_TEND(1:KSIZE, IFREEZ1)* ( X0DEPG*       PLBDAG(1:KSIZE)**XEX0DEPG +     &
-                           X1DEPG*PCJ(1:KSIZE)*PLBDAG(1:KSIZE)**XEX1DEPG )/ &
-                          ( PRHODREF(1:KSIZE)*(XLMTT-XCL*(XTT-PT(1:KSIZE))) )
-    PRG_TEND(1:KSIZE, IFREEZ2)=(PRHODREF(1:KSIZE)*(XLMTT+(XCI-XCL)*(XTT-PT(1:KSIZE)))   ) / &
-                          ( PRHODREF(1:KSIZE)*(XLMTT-XCL*(XTT-PT(1:KSIZE))) )
+    PRG_TEND(1:KSIZE, IFREEZ1)=PKA(1:KSIZE)*(CST%XTT-PT(1:KSIZE)) +                              &
+             (PDV(1:KSIZE)*(CST%XLVTT+(CST%XCPV-CST%XCL)*(PT(1:KSIZE)-CST%XTT)) &
+                           *(CST%XESTT-PRG_TEND(1:KSIZE, IFREEZ1))/(CST%XRV*PT(1:KSIZE))           )
+    PRG_TEND(1:KSIZE, IFREEZ1)=PRG_TEND(1:KSIZE, IFREEZ1)* ( ICEP%X0DEPG*       PLBDAG(1:KSIZE)**ICEP%XEX0DEPG +     &
+                           ICEP%X1DEPG*PCJ(1:KSIZE)*PLBDAG(1:KSIZE)**ICEP%XEX1DEPG )/ &
+                          ( PRHODREF(1:KSIZE)*(CST%XLMTT-CST%XCL*(CST%XTT-PT(1:KSIZE))) )
+    PRG_TEND(1:KSIZE, IFREEZ2)=(PRHODREF(1:KSIZE)*(CST%XLMTT+(CST%XCI-CST%XCL)*(CST%XTT-PT(1:KSIZE)))   ) / &
+                          ( PRHODREF(1:KSIZE)*(CST%XLMTT-CST%XCL*(CST%XTT-PT(1:KSIZE))) )
   END WHERE
 ENDIF
 DO JL=1, KSIZE
@@ -406,7 +405,7 @@ DO JL=1, KSIZE
             & MAX(0., SIGN(1., MAX(0., ZRDRYG_INIT(JL)-PRG_TEND(JL, IRIDRYG)-PRG_TEND(JL, IRSDRYG)) - &
                               &MAX(0., ZRWETG_INIT(JL)-PRG_TEND(JL, IRIWETG)-PRG_TEND(JL, IRSWETG))))
 ENDDO
-IF(LNULLWETG) THEN
+IF(PARAMI%LNULLWETG) THEN
   DO JL=1, KSIZE
     PWETG(JL) = PWETG(JL) * MAX(0., -SIGN(1., -ZRDRYG_INIT(JL)))
   ENDDO
@@ -415,14 +414,14 @@ ELSE
     PWETG(JL) = PWETG(JL) * MAX(0., -SIGN(1., -ZRWETG_INIT(JL)))
   ENDDO
 ENDIF
-IF(.NOT. LWETGPOST) THEN
+IF(.NOT. PARAMI%LWETGPOST) THEN
   DO JL=1, KSIZE
-    PWETG(JL) = PWETG(JL) * MAX(0., -SIGN(1., PT(JL)-XTT))
+    PWETG(JL) = PWETG(JL) * MAX(0., -SIGN(1., PT(JL)-CST%XTT))
   ENDDO
 ENDIF
 DO JL=1, KSIZE
   ZDRYG(JL) = ZMASK(JL) * & !
-            & MAX(0., -SIGN(1., PT(JL)-XTT)) * & ! WHERE(PT(:)<XTT)
+            & MAX(0., -SIGN(1., PT(JL)-CST%XTT)) * & ! WHERE(PT(:)<XTT)
 #ifdef REPRO48
             & MAX(0., -SIGN(1., -ZRDRYG_INIT(JL))) * & ! WHERE(ZRDRYG_INIT(:)>0.)
 #else
@@ -463,8 +462,8 @@ ENDDO
 !*       6.5    Melting of the graupeln
 !
 DO JL=1, KSIZE
-  ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(6)-PRGT(JL))) * & ! WHERE(PRGT(:)>XRTMIN(6))
-           &MAX(0., -SIGN(1., XTT-PT(JL))) * & ! WHERE(PT(:)>XTT)
+  ZMASK(JL)=MAX(0., -SIGN(1., ICED%XRTMIN(6)-PRGT(JL))) * & ! WHERE(PRGT(:)>XRTMIN(6))
+           &MAX(0., -SIGN(1., CST%XTT-PT(JL))) * & ! WHERE(PT(:)>XTT)
            &PCOMPUTE(JL)
 ENDDO
 IF(LDSOFT) THEN
@@ -473,28 +472,28 @@ IF(LDSOFT) THEN
   ENDDO
 ELSE
   DO JL=1, KSIZE
-    PRGMLTR(JL)=ZMASK(JL) * PRVT(JL)*PPRES(JL)/(XEPSILO+PRVT(JL)) ! Vapor pressure
+    PRGMLTR(JL)=ZMASK(JL) * PRVT(JL)*PPRES(JL)/(CST%XEPSILO+PRVT(JL)) ! Vapor pressure
   ENDDO
-  IF(LEVLIMIT) THEN
+  IF(PARAMI%LEVLIMIT) THEN
     WHERE(ZMASK(:)==1.)
-      PRGMLTR(:)=MIN(PRGMLTR(:), EXP(XALPW-XBETAW/PT(:)-XGAMW*ALOG(PT(:)))) ! min(ev, es_w(T))
+      PRGMLTR(:)=MIN(PRGMLTR(:), EXP(CST%XALPW-CST%XBETAW/PT(:)-CST%XGAMW*ALOG(PT(:)))) ! min(ev, es_w(T))
     END WHERE
   ENDIF
   DO JL=1, KSIZE
-    PRGMLTR(JL)=ZMASK(JL) * (PKA(JL)*(XTT-PT(JL)) +                                 &
-               ( PDV(JL)*(XLVTT + ( XCPV - XCL ) * ( PT(JL) - XTT )) &
-                           *(XESTT-PRGMLTR(JL))/(XRV*PT(JL))             ))
+    PRGMLTR(JL)=ZMASK(JL) * (PKA(JL)*(CST%XTT-PT(JL)) +                                 &
+               ( PDV(JL)*(CST%XLVTT + ( CST%XCPV - CST%XCL ) * ( PT(JL) - CST%XTT )) &
+                           *(CST%XESTT-PRGMLTR(JL))/(CST%XRV*PT(JL))             ))
   ENDDO
   WHERE(ZMASK(1:KSIZE)==1.)
     !
     ! compute RGMLTR
     !
     PRGMLTR(1:KSIZE)  = MAX( 0.0,( -PRGMLTR(1:KSIZE) *                     &
-                           ( X0DEPG*       PLBDAG(1:KSIZE)**XEX0DEPG +     &
-                             X1DEPG*PCJ(1:KSIZE)*PLBDAG(1:KSIZE)**XEX1DEPG ) -   &
+                           ( ICEP%X0DEPG*       PLBDAG(1:KSIZE)**ICEP%XEX0DEPG +     &
+                             ICEP%X1DEPG*PCJ(1:KSIZE)*PLBDAG(1:KSIZE)**ICEP%XEX1DEPG ) -   &
                          ( PRG_TEND(1:KSIZE, IRCDRYG)+PRG_TEND(1:KSIZE, IRRDRYG) ) *       &
-                               ( PRHODREF(1:KSIZE)*XCL*(XTT-PT(1:KSIZE))) ) /    &
-                                             ( PRHODREF(1:KSIZE)*XLMTT ) )
+                               ( PRHODREF(1:KSIZE)*CST%XCL*(CST%XTT-PT(1:KSIZE))) ) /    &
+                                             ( PRHODREF(1:KSIZE)*CST%XLMTT ) )
   END WHERE
 ENDIF
 
diff --git a/src/common/micro/mode_ice4_fast_rh.F90 b/src/common/micro/mode_ice4_fast_rh.F90
index dc6ed246c540116021fbf3b0f8431269f924d4ff..5664025e3a714c3f36e79f6f1976a4c0f8d14a68 100644
--- a/src/common/micro/mode_ice4_fast_rh.F90
+++ b/src/common/micro/mode_ice4_fast_rh.F90
@@ -5,7 +5,7 @@
 MODULE MODE_ICE4_FAST_RH
 IMPLICIT NONE
 CONTAINS
-SUBROUTINE ICE4_FAST_RH(KPROMA,KSIZE, LDSOFT, PCOMPUTE, PWETG, &
+SUBROUTINE ICE4_FAST_RH(CST, PARAMI, ICEP, ICED, KPROMA,KSIZE, LDSOFT, PCOMPUTE, PWETG, &
                        &PRHODREF, PLVFACT, PLSFACT, PPRES, &
                        &PDV, PKA, PCJ, &
                        &PLBDAS, PLBDAG, PLBDAR, PLBDAH, &
@@ -34,16 +34,10 @@ SUBROUTINE ICE4_FAST_RH(KPROMA,KSIZE, LDSOFT, PCOMPUTE, PWETG, &
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_CST,            ONLY: XALPI, XALPW, XBETAI, XBETAW, XGAMW, XCI, XCL, XCPV, XESTT, XGAMI, XLMTT, &
-                             & XLVTT, XMD, XMV, XRV, XTT, XEPSILO
-USE MODD_PARAM_ICE,      ONLY: LCONVHG, LEVLIMIT, LNULLWETH, LWETHPOST
-USE MODD_RAIN_ICE_DESCR, ONLY: XBG, XBS, XCEXVT, XCXG, XCXH, XCXS, XDH, XRTMIN
-USE MODD_RAIN_ICE_PARAM, ONLY: NWETLBDAG, NWETLBDAH, NWETLBDAR, NWETLBDAS, X0DEPH, X1DEPH, XCOLEXGH, XCOLEXIH, &
-                             & XCOLGH, XCOLIH, XCOLEXSH, XCOLSH, XEX0DEPH, XEX1DEPH, XFGWETH, XFRWETH, &
-                             & XFSWETH, XFWETH, XKER_GWETH, XKER_RWETH, XKER_SWETH, XLBGWETH1, XLBGWETH2, &
-                             & XLBGWETH3, XLBRWETH1, XLBRWETH2, XLBRWETH3, XLBSWETH1, XLBSWETH2, XLBSWETH3, &
-                             & XWETINTP1G, XWETINTP1H, XWETINTP1R, XWETINTP1S, XWETINTP2G, XWETINTP2H, &
-                             & XWETINTP2R, XWETINTP2S
+USE MODD_CST,            ONLY: CST_t
+USE MODD_PARAM_ICE,      ONLY: PARAM_ICE_t
+USE MODD_RAIN_ICE_DESCR, ONLY: RAIN_ICE_DESCR_t
+USE MODD_RAIN_ICE_PARAM, ONLY: RAIN_ICE_PARAM_t
 !
 USE PARKIND1, ONLY : JPRB
 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
@@ -52,6 +46,10 @@ IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
+TYPE(CST_t),                  INTENT(IN)    :: CST
+TYPE(PARAM_ICE_t),            INTENT(IN)    :: PARAMI
+TYPE(RAIN_ICE_PARAM_t),       INTENT(IN)    :: ICEP
+TYPE(RAIN_ICE_DESCR_t),       INTENT(IN)    :: ICED
 INTEGER,                      INTENT(IN)    :: KPROMA,KSIZE
 LOGICAL,                      INTENT(IN)    :: LDSOFT
 REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PCOMPUTE
@@ -119,8 +117,8 @@ IF (LHOOK) CALL DR_HOOK('ICE4_FAST_RH',0,ZHOOK_HANDLE)
 !*       7.2    compute the Wet and Dry growth of hail
 !
 DO JL=1, KSIZE
-  ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(7)-PRHT(JL))) * & ! WHERE(PRHT(:)>XRTMIN(7))
-           &MAX(0., -SIGN(1., XRTMIN(2)-PRCT(JL))) * & ! WHERE(PRCT(:)>XRTMIN(2))
+  ZMASK(JL)=MAX(0., -SIGN(1., ICED%XRTMIN(7)-PRHT(JL))) * & ! WHERE(PRHT(:)>XRTMIN(7))
+           &MAX(0., -SIGN(1., ICED%XRTMIN(2)-PRCT(JL))) * & ! WHERE(PRCT(:)>XRTMIN(2))
            &PCOMPUTE(JL)
 ENDDO
 IF(LDSOFT) THEN
@@ -130,13 +128,13 @@ IF(LDSOFT) THEN
 ELSE
   PRH_TEND(:, IRCWETH)=0.
   WHERE(ZMASK(1:KSIZE)==1.)
-    ZZW(1:KSIZE) = PLBDAH(1:KSIZE)**(XCXH-XDH-2.0) * PRHODREF(1:KSIZE)**(-XCEXVT)
-    PRH_TEND(1:KSIZE, IRCWETH)=XFWETH * PRCT(1:KSIZE) * ZZW(1:KSIZE)    ! RCWETH
+    ZZW(1:KSIZE) = PLBDAH(1:KSIZE)**(ICED%XCXH-ICED%XDH-2.0) * PRHODREF(1:KSIZE)**(-ICED%XCEXVT)
+    PRH_TEND(1:KSIZE, IRCWETH)=ICEP%XFWETH * PRCT(1:KSIZE) * ZZW(1:KSIZE)    ! RCWETH
   END WHERE
 ENDIF
 DO JL=1, KSIZE
-  ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(7)-PRHT(JL))) * & ! WHERE(PRHT(:)>XRTMIN(7))
-           &MAX(0., -SIGN(1., XRTMIN(4)-PRIT(JL))) * & ! WHERE(PRIT(:)>XRTMIN(4))
+  ZMASK(JL)=MAX(0., -SIGN(1., ICED%XRTMIN(7)-PRHT(JL))) * & ! WHERE(PRHT(:)>XRTMIN(7))
+           &MAX(0., -SIGN(1., ICED%XRTMIN(4)-PRIT(JL))) * & ! WHERE(PRIT(:)>XRTMIN(4))
            &PCOMPUTE(JL)
 ENDDO
 IF(LDSOFT) THEN
@@ -148,9 +146,9 @@ ELSE
   PRH_TEND(:, IRIWETH)=0.
   PRH_TEND(:, IRIDRYH)=0.
   WHERE(ZMASK(1:KSIZE)==1.)
-    ZZW(1:KSIZE) = PLBDAH(1:KSIZE)**(XCXH-XDH-2.0) * PRHODREF(1:KSIZE)**(-XCEXVT)
-    PRH_TEND(1:KSIZE, IRIWETH)=XFWETH * PRIT(1:KSIZE) * ZZW(1:KSIZE)   ! RIWETH
-    PRH_TEND(1:KSIZE, IRIDRYH)=PRH_TEND(1:KSIZE, IRIWETH)*(XCOLIH*EXP(XCOLEXIH*(PT(1:KSIZE)-XTT)))   ! RIDRYH
+    ZZW(1:KSIZE) = PLBDAH(1:KSIZE)**(ICED%XCXH-ICED%XDH-2.0) * PRHODREF(1:KSIZE)**(-ICED%XCEXVT)
+    PRH_TEND(1:KSIZE, IRIWETH)=ICEP%XFWETH * PRIT(1:KSIZE) * ZZW(1:KSIZE)   ! RIWETH
+    PRH_TEND(1:KSIZE, IRIDRYH)=PRH_TEND(1:KSIZE, IRIWETH)*(ICEP%XCOLIH*EXP(ICEP%XCOLEXIH*(PT(1:KSIZE)-CST%XTT)))   ! RIDRYH
   END WHERE
 ENDIF
 
@@ -159,8 +157,8 @@ ENDIF
 !
 IGWET = 0
 DO JJ = 1, KSIZE
-  ZWET(JJ) = MAX(0., -SIGN(1., XRTMIN(7)-PRHT(JJ))) * & ! WHERE(PRHT(:)>XRTMIN(7))
-            &MAX(0., -SIGN(1., XRTMIN(5)-PRST(JJ))) * & ! WHERE(PRST(:)>XRTMIN(5))
+  ZWET(JJ) = MAX(0., -SIGN(1., ICED%XRTMIN(7)-PRHT(JJ))) * & ! WHERE(PRHT(:)>XRTMIN(7))
+            &MAX(0., -SIGN(1., ICED%XRTMIN(5)-PRST(JJ))) * & ! WHERE(PRST(:)>XRTMIN(5))
             &PCOMPUTE(JJ)
   IF (ZWET(JJ)>0) THEN
     IGWET = IGWET + 1
@@ -191,13 +189,13 @@ ELSE
     !               in the geometrical set of (Lbda_h,Lbda_s) couplet use to
     !               tabulate the SWETH-kernel
     !
-    ZVEC1(1:IGWET) = MAX( 1.00001, MIN( REAL(NWETLBDAH)-0.00001,           &
-                          XWETINTP1H * LOG( ZVEC1(1:IGWET) ) + XWETINTP2H ) )
+    ZVEC1(1:IGWET) = MAX( 1.00001, MIN( REAL(ICEP%NWETLBDAH)-0.00001,           &
+                          ICEP%XWETINTP1H * LOG( ZVEC1(1:IGWET) ) + ICEP%XWETINTP2H ) )
     IVEC1(1:IGWET) = INT( ZVEC1(1:IGWET) )
     ZVEC1(1:IGWET) = ZVEC1(1:IGWET) - REAL( IVEC1(1:IGWET) )
     !
-    ZVEC2(1:IGWET) = MAX( 1.00001, MIN( REAL(NWETLBDAS)-0.00001,           &
-                          XWETINTP1S * LOG( ZVEC2(1:IGWET) ) + XWETINTP2S ) )
+    ZVEC2(1:IGWET) = MAX( 1.00001, MIN( REAL(ICEP%NWETLBDAS)-0.00001,           &
+                          ICEP%XWETINTP1S * LOG( ZVEC2(1:IGWET) ) + ICEP%XWETINTP2S ) )
     IVEC2(1:IGWET) = INT( ZVEC2(1:IGWET) )
     ZVEC2(1:IGWET) = ZVEC2(1:IGWET) - REAL( IVEC2(1:IGWET) )
     !
@@ -205,11 +203,11 @@ ELSE
     !               SWETH-kernel
     !
     DO JJ = 1,IGWET
-      ZVEC3(JJ) = (  XKER_SWETH(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                   - XKER_SWETH(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
+      ZVEC3(JJ) = (  ICEP%XKER_SWETH(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
+                   - ICEP%XKER_SWETH(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
                                                                  * ZVEC1(JJ) &
-                  - ( XKER_SWETH(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                  - XKER_SWETH(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
+                  - ( ICEP%XKER_SWETH(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
+                  - ICEP%XKER_SWETH(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
                                                          * (ZVEC1(JJ) - 1.0)
     END DO
     ZZW(:) = 0.
@@ -218,13 +216,13 @@ ELSE
     END DO
     !
     WHERE(GWET(1:KSIZE))
-      PRH_TEND(1:KSIZE, IRSWETH)=XFSWETH*ZZW(1:KSIZE)                       & ! RSWETH
-                    *( PLBDAS(1:KSIZE)**(XCXS-XBS) )*( PLBDAH(1:KSIZE)**XCXH )  &
-                       *( PRHODREF(1:KSIZE)**(-XCEXVT-1.) )               &
-                       *( XLBSWETH1/( PLBDAH(1:KSIZE)**2              ) + &
-                          XLBSWETH2/( PLBDAH(1:KSIZE)   * PLBDAS(1:KSIZE)   ) + &
-                          XLBSWETH3/(               PLBDAS(1:KSIZE)**2) )
-      PRH_TEND(1:KSIZE, IRSDRYH)=PRH_TEND(1:KSIZE, IRSWETH)*(XCOLSH*EXP(XCOLEXSH*(PT(1:KSIZE)-XTT)))
+      PRH_TEND(1:KSIZE, IRSWETH)=ICEP%XFSWETH*ZZW(1:KSIZE)                       & ! RSWETH
+                    *( PLBDAS(1:KSIZE)**(ICED%XCXS-ICED%XBS) )*( PLBDAH(1:KSIZE)**ICED%XCXH )  &
+                       *( PRHODREF(1:KSIZE)**(-ICED%XCEXVT-1.) )               &
+                       *( ICEP%XLBSWETH1/( PLBDAH(1:KSIZE)**2              ) + &
+                          ICEP%XLBSWETH2/( PLBDAH(1:KSIZE)   * PLBDAS(1:KSIZE)   ) + &
+                          ICEP%XLBSWETH3/(               PLBDAS(1:KSIZE)**2) )
+      PRH_TEND(1:KSIZE, IRSDRYH)=PRH_TEND(1:KSIZE, IRSWETH)*(ICEP%XCOLSH*EXP(ICEP%XCOLEXSH*(PT(1:KSIZE)-CST%XTT)))
     END WHERE
   ENDIF
 ENDIF
@@ -233,8 +231,8 @@ ENDIF
 !
 IGWET = 0
 DO JJ = 1, KSIZE
-  ZWET(JJ)=MAX(0., -SIGN(1., XRTMIN(7)-PRHT(JJ))) * & ! WHERE(PRHT(:)>XRTMIN(7))
-          &MAX(0., -SIGN(1., XRTMIN(6)-PRGT(JJ))) * & ! WHERE(PRGT(:)>XRTMIN(6))
+  ZWET(JJ)=MAX(0., -SIGN(1., ICED%XRTMIN(7)-PRHT(JJ))) * & ! WHERE(PRHT(:)>XRTMIN(7))
+          &MAX(0., -SIGN(1., ICED%XRTMIN(6)-PRGT(JJ))) * & ! WHERE(PRGT(:)>XRTMIN(6))
           &PCOMPUTE(JJ)
   IF (ZWET(JJ)>0) THEN
     IGWET = IGWET + 1
@@ -265,13 +263,13 @@ ELSE
     !               in the geometrical set of (Lbda_h,Lbda_g) couplet use to
     !               tabulate the GWETH-kernel
     !
-    ZVEC1(1:IGWET) = MAX( 1.00001, MIN( REAL(NWETLBDAG)-0.00001,           &
-                          XWETINTP1H * LOG( ZVEC1(1:IGWET) ) + XWETINTP2H ) )
+    ZVEC1(1:IGWET) = MAX( 1.00001, MIN( REAL(ICEP%NWETLBDAG)-0.00001,           &
+                          ICEP%XWETINTP1H * LOG( ZVEC1(1:IGWET) ) + ICEP%XWETINTP2H ) )
     IVEC1(1:IGWET) = INT( ZVEC1(1:IGWET) )
     ZVEC1(1:IGWET) = ZVEC1(1:IGWET) - REAL( IVEC1(1:IGWET) )
     !
-    ZVEC2(1:IGWET) = MAX( 1.00001, MIN( REAL(NWETLBDAG)-0.00001,           &
-                          XWETINTP1G * LOG( ZVEC2(1:IGWET) ) + XWETINTP2G ) )
+    ZVEC2(1:IGWET) = MAX( 1.00001, MIN( REAL(ICEP%NWETLBDAG)-0.00001,           &
+                          ICEP%XWETINTP1G * LOG( ZVEC2(1:IGWET) ) + ICEP%XWETINTP2G ) )
     IVEC2(1:IGWET) = INT( ZVEC2(1:IGWET) )
     ZVEC2(1:IGWET) = ZVEC2(1:IGWET) - REAL( IVEC2(1:IGWET) )
     !
@@ -279,11 +277,11 @@ ELSE
     !               GWETH-kernel
     !
     DO JJ = 1,IGWET
-      ZVEC3(JJ) = (  XKER_GWETH(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                   - XKER_GWETH(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
+      ZVEC3(JJ) = (  ICEP%XKER_GWETH(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
+                   - ICEP%XKER_GWETH(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
                                                                  * ZVEC1(JJ) &
-                - (  XKER_GWETH(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                   - XKER_GWETH(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
+                - (  ICEP%XKER_GWETH(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
+                   - ICEP%XKER_GWETH(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
                                                         * (ZVEC1(JJ) - 1.0)
     END DO
     ZZW(:) = 0.
@@ -292,17 +290,17 @@ ELSE
     END DO
     !
     WHERE(GWET(1:KSIZE))
-      PRH_TEND(1:KSIZE, IRGWETH)=XFGWETH*ZZW(1:KSIZE)                       & ! RGWETH
-                    *( PLBDAG(1:KSIZE)**(XCXG-XBG) )*( PLBDAH(1:KSIZE)**XCXH )  &
-                       *( PRHODREF(1:KSIZE)**(-XCEXVT-1.) )               &
-                       *( XLBGWETH1/( PLBDAH(1:KSIZE)**2              ) + &
-                          XLBGWETH2/( PLBDAH(1:KSIZE)   * PLBDAG(1:KSIZE)   ) + &
-                          XLBGWETH3/(               PLBDAG(1:KSIZE)**2) )
+      PRH_TEND(1:KSIZE, IRGWETH)=ICEP%XFGWETH*ZZW(1:KSIZE)                       & ! RGWETH
+                    *( PLBDAG(1:KSIZE)**(ICED%XCXG-ICED%XBG) )*( PLBDAH(1:KSIZE)**ICED%XCXH )  &
+                       *( PRHODREF(1:KSIZE)**(-ICED%XCEXVT-1.) )               &
+                       *( ICEP%XLBGWETH1/( PLBDAH(1:KSIZE)**2              ) + &
+                          ICEP%XLBGWETH2/( PLBDAH(1:KSIZE)   * PLBDAG(1:KSIZE)   ) + &
+                          ICEP%XLBGWETH3/(               PLBDAG(1:KSIZE)**2) )
       PRH_TEND(1:KSIZE, IRGDRYH)=PRH_TEND(1:KSIZE, IRGWETH)
     END WHERE
     !When graupel grows in wet mode, graupel is wet (!) and collection efficiency must remain the same
     WHERE(GWET(1:KSIZE) .AND. .NOT. PWETG(1:KSIZE)==1.)
-      PRH_TEND(1:KSIZE, IRGDRYH)=PRH_TEND(1:KSIZE, IRGDRYH)*(XCOLGH*EXP(XCOLEXGH*(PT(1:KSIZE)-XTT)))
+      PRH_TEND(1:KSIZE, IRGDRYH)=PRH_TEND(1:KSIZE, IRGDRYH)*(ICEP%XCOLGH*EXP(ICEP%XCOLEXGH*(PT(1:KSIZE)-CST%XTT)))
     END WHERE
   END IF
 ENDIF
@@ -311,8 +309,8 @@ ENDIF
 !
 IGWET = 0
 DO JJ = 1, KSIZE
-  ZWET(JJ)=MAX(0., -SIGN(1., XRTMIN(7)-PRHT(JJ))) * & ! WHERE(PRHT(:)>XRTMIN(7))
-          &MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JJ))) * & ! WHERE(PRRT(:)>XRTMIN(3))
+  ZWET(JJ)=MAX(0., -SIGN(1., ICED%XRTMIN(7)-PRHT(JJ))) * & ! WHERE(PRHT(:)>XRTMIN(7))
+          &MAX(0., -SIGN(1., ICED%XRTMIN(3)-PRRT(JJ))) * & ! WHERE(PRRT(:)>XRTMIN(3))
           &PCOMPUTE(JJ)
   IF (ZWET(JJ)>0) THEN
     IGWET = IGWET + 1
@@ -341,13 +339,13 @@ ELSE
     !               in the geometrical set of (Lbda_h,Lbda_r) couplet use to
     !               tabulate the RWETH-kernel
     !
-    ZVEC1(1:IGWET)=MAX(1.00001, MIN( REAL(NWETLBDAH)-0.00001,           &
-                          XWETINTP1H*LOG(ZVEC1(1:IGWET))+XWETINTP2H))
+    ZVEC1(1:IGWET)=MAX(1.00001, MIN( REAL(ICEP%NWETLBDAH)-0.00001,           &
+                          ICEP%XWETINTP1H*LOG(ZVEC1(1:IGWET))+ICEP%XWETINTP2H))
     IVEC1(1:IGWET)=INT(ZVEC1(1:IGWET))
     ZVEC1(1:IGWET)=ZVEC1(1:IGWET)-REAL(IVEC1(1:IGWET))
     !
-    ZVEC2(1:IGWET)=MAX(1.00001, MIN( REAL(NWETLBDAR)-0.00001,           &
-                          XWETINTP1R*LOG(ZVEC2(1:IGWET))+XWETINTP2R))
+    ZVEC2(1:IGWET)=MAX(1.00001, MIN( REAL(ICEP%NWETLBDAR)-0.00001,           &
+                          ICEP%XWETINTP1R*LOG(ZVEC2(1:IGWET))+ICEP%XWETINTP2R))
     IVEC2(1:IGWET)=INT(ZVEC2(1:IGWET))
     ZVEC2(1:IGWET)=ZVEC2(1:IGWET)-REAL(IVEC2(1:IGWET))
     !
@@ -355,11 +353,11 @@ ELSE
     !               RWETH-kernel
     !
     DO JJ=1, IGWET
-      ZVEC3(JJ)= (  XKER_RWETH(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                    - XKER_RWETH(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
+      ZVEC3(JJ)= (  ICEP%XKER_RWETH(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
+                    - ICEP%XKER_RWETH(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
                                                                   * ZVEC1(JJ) &
-                 - (  XKER_RWETH(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                    - XKER_RWETH(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
+                 - (  ICEP%XKER_RWETH(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
+                    - ICEP%XKER_RWETH(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
                                                          *(ZVEC1(JJ) - 1.0)
     END DO
     ZZW(:) = 0.
@@ -368,12 +366,12 @@ ELSE
     END DO
     !
     WHERE(GWET(1:KSIZE))
-      PRH_TEND(1:KSIZE, IRRWETH) = XFRWETH*ZZW(1:KSIZE)                    & ! RRWETH
-                        *( PLBDAR(1:KSIZE)**(-4) )*( PLBDAH(1:KSIZE)**XCXH ) &
-                               *( PRHODREF(1:KSIZE)**(-XCEXVT-1.) )   &
-                    *( XLBRWETH1/( PLBDAH(1:KSIZE)**2              ) + &
-                       XLBRWETH2/( PLBDAH(1:KSIZE)   * PLBDAR(1:KSIZE)   ) + &
-                       XLBRWETH3/(               PLBDAR(1:KSIZE)**2) )
+      PRH_TEND(1:KSIZE, IRRWETH) = ICEP%XFRWETH*ZZW(1:KSIZE)                    & ! RRWETH
+                        *( PLBDAR(1:KSIZE)**(-4) )*( PLBDAH(1:KSIZE)**ICED%XCXH ) &
+                               *( PRHODREF(1:KSIZE)**(-ICED%XCEXVT-1.) )   &
+                    *( ICEP%XLBRWETH1/( PLBDAH(1:KSIZE)**2              ) + &
+                       ICEP%XLBRWETH2/( PLBDAH(1:KSIZE)   * PLBDAR(1:KSIZE)   ) + &
+                       ICEP%XLBRWETH3/(               PLBDAR(1:KSIZE)**2) )
     END WHERE
   ENDIF
 ENDIF
@@ -386,7 +384,7 @@ ENDDO
 !*       7.3    compute the Wet growth of hail
 !
 DO JL=1, KSIZE
-  ZHAIL(JL)=MAX(0., -SIGN(1., XRTMIN(7)-PRHT(JL))) * & ! WHERE(PRHT(:)>XRTMIN(7))
+  ZHAIL(JL)=MAX(0., -SIGN(1., ICED%XRTMIN(7)-PRHT(JL))) * & ! WHERE(PRHT(:)>XRTMIN(7))
            &PCOMPUTE(JL)
 ENDDO
 IF(LDSOFT) THEN
@@ -396,23 +394,23 @@ IF(LDSOFT) THEN
   ENDDO
 ELSE
   DO JL=1, KSIZE
-    PRH_TEND(JL, IFREEZ1)=PRVT(JL)*PPRES(JL)/(XEPSILO+PRVT(JL)) ! Vapor pressure
+    PRH_TEND(JL, IFREEZ1)=PRVT(JL)*PPRES(JL)/(CST%XEPSILO+PRVT(JL)) ! Vapor pressure
   ENDDO
-  IF(LEVLIMIT) THEN
+  IF(PARAMI%LEVLIMIT) THEN
     WHERE(ZHAIL(1:KSIZE)==1.)
-      PRH_TEND(1:KSIZE, IFREEZ1)=MIN(PRH_TEND(1:KSIZE, IFREEZ1), EXP(XALPI-XBETAI/PT(1:KSIZE)-XGAMI*ALOG(PT(1:KSIZE)))) ! min(ev, es_i(T))
+      PRH_TEND(1:KSIZE, IFREEZ1)=MIN(PRH_TEND(1:KSIZE, IFREEZ1), EXP(CST%XALPI-CST%XBETAI/PT(1:KSIZE)-CST%XGAMI*ALOG(PT(1:KSIZE)))) ! min(ev, es_i(T))
     END WHERE
   ENDIF
   PRH_TEND(:, IFREEZ2)=0.
   WHERE(ZHAIL(1:KSIZE)==1.)
-    PRH_TEND(1:KSIZE, IFREEZ1)=PKA(1:KSIZE)*(XTT-PT(1:KSIZE)) +                              &
-             (PDV(1:KSIZE)*(XLVTT+(XCPV-XCL)*(PT(1:KSIZE)-XTT)) &
-                           *(XESTT-PRH_TEND(1:KSIZE, IFREEZ1))/(XRV*PT(1:KSIZE))           )
-    PRH_TEND(1:KSIZE, IFREEZ1)=PRH_TEND(1:KSIZE, IFREEZ1)* ( X0DEPH*       PLBDAH(1:KSIZE)**XEX0DEPH +     &
-                           X1DEPH*PCJ(1:KSIZE)*PLBDAH(1:KSIZE)**XEX1DEPH )/ &
-                          ( PRHODREF(1:KSIZE)*(XLMTT-XCL*(XTT-PT(1:KSIZE))) )
-    PRH_TEND(1:KSIZE, IFREEZ2)=(PRHODREF(1:KSIZE)*(XLMTT+(XCI-XCL)*(XTT-PT(1:KSIZE)))   ) / &
-                          ( PRHODREF(1:KSIZE)*(XLMTT-XCL*(XTT-PT(1:KSIZE))) )
+    PRH_TEND(1:KSIZE, IFREEZ1)=PKA(1:KSIZE)*(CST%XTT-PT(1:KSIZE)) +                              &
+             (PDV(1:KSIZE)*(CST%XLVTT+(CST%XCPV-CST%XCL)*(PT(1:KSIZE)-CST%XTT)) &
+                           *(CST%XESTT-PRH_TEND(1:KSIZE, IFREEZ1))/(CST%XRV*PT(1:KSIZE))           )
+    PRH_TEND(1:KSIZE, IFREEZ1)=PRH_TEND(1:KSIZE, IFREEZ1)* ( ICEP%X0DEPH*       PLBDAH(1:KSIZE)**ICEP%XEX0DEPH +     &
+                           ICEP%X1DEPH*PCJ(1:KSIZE)*PLBDAH(1:KSIZE)**ICEP%XEX1DEPH )/ &
+                          ( PRHODREF(1:KSIZE)*(CST%XLMTT-CST%XCL*(CST%XTT-PT(1:KSIZE))) )
+    PRH_TEND(1:KSIZE, IFREEZ2)=(PRHODREF(1:KSIZE)*(CST%XLMTT+(CST%XCI-CST%XCL)*(CST%XTT-PT(1:KSIZE)))   ) / &
+                          ( PRHODREF(1:KSIZE)*(CST%XLMTT-CST%XCL*(CST%XTT-PT(1:KSIZE))) )
   END WHERE
 ENDIF
 DO JL=1, KSIZE
@@ -431,7 +429,7 @@ DO JL=1, KSIZE
             & MAX(0., SIGN(1., MAX(0., ZRDRYH_INIT(JL)-PRH_TEND(JL, IRIDRYH)-PRH_TEND(JL, IRSDRYH)-PRH_TEND(JL, IRGDRYH)) - &
                               &MAX(0., ZRWETH_INIT(JL)-PRH_TEND(JL, IRIWETH)-PRH_TEND(JL, IRSWETH)-PRH_TEND(JL, IRGWETH))))
 ENDDO
-IF(LNULLWETH) THEN
+IF(PARAMI%LNULLWETH) THEN
   DO JL=1, KSIZE
     ZWETH(JL) = ZWETH(JL) * MAX(0., -SIGN(1., -ZRDRYH_INIT(JL))) ! WHERE(ZRDRYH_INIT(:)>0.)
   ENDDO
@@ -440,21 +438,21 @@ ELSE
     ZWETH(JL) = ZWETH(JL) * MAX(0., -SIGN(1., -ZRWETH_INIT(JL))) ! WHERE(ZRWETH_INIT(:)>0.)
   ENDDO
 ENDIF
-IF(.NOT. LWETHPOST) THEN
+IF(.NOT. PARAMI%LWETHPOST) THEN
   DO JL=1, KSIZE
-    ZWETH(JL) = ZWETH(JL) * MAX(0., -SIGN(1., PT(JL)-XTT)) ! WHERE(PT(:)<XTT)
+    ZWETH(JL) = ZWETH(JL) * MAX(0., -SIGN(1., PT(JL)-CST%XTT)) ! WHERE(PT(:)<XTT)
   ENDDO
 ENDIF
 DO JL=1, KSIZE
   ZDRYH(JL) = ZHAIL(JL) * &
-            & MAX(0., -SIGN(1., PT(JL)-XTT)) * & ! WHERE(PT(:)<XTT)
+            & MAX(0., -SIGN(1., PT(JL)-CST%XTT)) * & ! WHERE(PT(:)<XTT)
             & MAX(0., -SIGN(1., 1.E-20-ZRDRYH_INIT(JL))) * & !WHERE(ZRDRYH_INIT(:)>0.)
             & MAX(0., -SIGN(1., MAX(0., ZRDRYH_INIT(JL)-PRH_TEND(JL, IRIDRYH)-PRH_TEND(JL, IRSDRYH)) - &
                                &MAX(0., ZRWETH_INIT(JL)-PRH_TEND(JL, IRIWETH)-PRH_TEND(JL, IRSWETH))))
 ENDDO
 !
 ZRDRYHG(:)=0.
-IF(LCONVHG)THEN
+IF(PARAMI%LCONVHG)THEN
   WHERE(ZDRYH(:)==1.)
     ZRDRYHG(:)=ZRDRYH_INIT(:)*ZRWETH_INIT(:)/(ZRDRYH_INIT(:)+ZRWETH_INIT(:))
   END WHERE
@@ -496,8 +494,8 @@ ENDDO
 !*       7.5    Melting of the hailstones
 !
 DO JL=1, KSIZE
-  ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(7)-PRHT(JL))) * & ! WHERE(PRHT(:)>XRTMIN(7))
-           &MAX(0., -SIGN(1., XTT-PT(JL))) * & ! WHERE(PT(:)>XTT)
+  ZMASK(JL)=MAX(0., -SIGN(1., ICED%XRTMIN(7)-PRHT(JL))) * & ! WHERE(PRHT(:)>XRTMIN(7))
+           &MAX(0., -SIGN(1., CST%XTT-PT(JL))) * & ! WHERE(PT(:)>XTT)
            &PCOMPUTE(JL)
 ENDDO
 IF(LDSOFT) THEN
@@ -506,28 +504,28 @@ IF(LDSOFT) THEN
   ENDDO
 ELSE
   DO JL=1, KSIZE
-    PRHMLTR(JL) = ZMASK(JL)* PRVT(JL)*PPRES(JL)/(XEPSILO+PRVT(JL)) ! Vapor pressure
+    PRHMLTR(JL) = ZMASK(JL)* PRVT(JL)*PPRES(JL)/(CST%XEPSILO+PRVT(JL)) ! Vapor pressure
   ENDDO
-  IF(LEVLIMIT) THEN
+  IF(PARAMI%LEVLIMIT) THEN
     WHERE(ZMASK(:)==1.)
-      PRHMLTR(:)=MIN(PRHMLTR(:), EXP(XALPW-XBETAW/PT(:)-XGAMW*ALOG(PT(:)))) ! min(ev, es_w(T))
+      PRHMLTR(:)=MIN(PRHMLTR(:), EXP(CST%XALPW-CST%XBETAW/PT(:)-CST%XGAMW*ALOG(PT(:)))) ! min(ev, es_w(T))
     END WHERE
   ENDIF
   DO JL=1, KSIZE
-    PRHMLTR(JL) = ZMASK(JL)* (PKA(JL)*(XTT-PT(JL)) +                              &
-           ( PDV(JL)*(XLVTT + ( XCPV - XCL ) * ( PT(JL) - XTT )) &
-                           *(XESTT-PRHMLTR(JL))/(XRV*PT(JL))         ))
+    PRHMLTR(JL) = ZMASK(JL)* (PKA(JL)*(CST%XTT-PT(JL)) +                              &
+           ( PDV(JL)*(CST%XLVTT + ( CST%XCPV - CST%XCL ) * ( PT(JL) - CST%XTT )) &
+                           *(CST%XESTT-PRHMLTR(JL))/(CST%XRV*PT(JL))         ))
   ENDDO
   WHERE(ZMASK(1:KSIZE)==1.)
     !
     ! compute RHMLTR
     !
     PRHMLTR(1:KSIZE)  = MAX( 0.0,( -PRHMLTR(1:KSIZE) *                     &
-                           ( X0DEPH*       PLBDAH(1:KSIZE)**XEX0DEPH +     &
-                             X1DEPH*PCJ(1:KSIZE)*PLBDAH(1:KSIZE)**XEX1DEPH ) -   &
+                           ( ICEP%X0DEPH*       PLBDAH(1:KSIZE)**ICEP%XEX0DEPH +     &
+                             ICEP%X1DEPH*PCJ(1:KSIZE)*PLBDAH(1:KSIZE)**ICEP%XEX1DEPH ) -   &
                          ( PRH_TEND(1:KSIZE, IRCWETH)+PRH_TEND(1:KSIZE, IRRWETH) )*        &
-                               ( PRHODREF(1:KSIZE)*XCL*(XTT-PT(1:KSIZE))) ) /    &
-                                             ( PRHODREF(1:KSIZE)*XLMTT ) )
+                               ( PRHODREF(1:KSIZE)*CST%XCL*(CST%XTT-PT(1:KSIZE))) ) /    &
+                                             ( PRHODREF(1:KSIZE)*CST%XLMTT ) )
   END WHERE
 END IF
 DO JL=1, KSIZE
diff --git a/src/common/micro/mode_ice4_fast_ri.F90 b/src/common/micro/mode_ice4_fast_ri.F90
index 0e1e1e0ff5042d73efa6574eea56b073ed4567db..d24c0cccd53892a830964f5b2eaca3521c4312e1 100644
--- a/src/common/micro/mode_ice4_fast_ri.F90
+++ b/src/common/micro/mode_ice4_fast_ri.F90
@@ -6,7 +6,7 @@
 MODULE MODE_ICE4_FAST_RI
 IMPLICIT NONE
 CONTAINS
-SUBROUTINE ICE4_FAST_RI(KSIZE, LDSOFT, PCOMPUTE, &
+SUBROUTINE ICE4_FAST_RI(ICEP, ICED, KSIZE, LDSOFT, PCOMPUTE, &
                        &PRHODREF, PLVFACT, PLSFACT, &
                        &PAI, PCJ, PCIT, &
                        &PSSI, &
@@ -30,8 +30,8 @@ SUBROUTINE ICE4_FAST_RI(KSIZE, LDSOFT, PCOMPUTE, &
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_RAIN_ICE_PARAM, ONLY: X0DEPI,X2DEPI
-USE MODD_RAIN_ICE_DESCR, ONLY: XDI,XLBEXI,XLBI,XRTMIN
+USE MODD_RAIN_ICE_DESCR, ONLY: RAIN_ICE_DESCR_t
+USE MODD_RAIN_ICE_PARAM, ONLY: RAIN_ICE_PARAM_t
 USE PARKIND1, ONLY : JPRB
 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !
@@ -39,6 +39,8 @@ IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
+TYPE(RAIN_ICE_PARAM_t),       INTENT(IN)    :: ICEP
+TYPE(RAIN_ICE_DESCR_t),       INTENT(IN)    :: ICED
 INTEGER,                      INTENT(IN)    :: KSIZE
 LOGICAL,                      INTENT(IN)    :: LDSOFT
 REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PCOMPUTE
@@ -70,18 +72,18 @@ IF (LHOOK) CALL DR_HOOK('ICE4_FAST_RI',0,ZHOOK_HANDLE)
 !*       7.2    Bergeron-Findeisen effect: RCBERI
 !
 DO JL=1, KSIZE
-  LMASK = PSSI(JL)>0. .AND. PRCT(JL)>XRTMIN(2) .AND. &
+  LMASK = PSSI(JL)>0. .AND. PRCT(JL)>ICED%XRTMIN(2) .AND. &
 #ifdef REPRO48
-        & PRIT(JL)>XRTMIN(4) .AND. PCIT(JL)>0. .AND. &
+        & PRIT(JL)>ICED%XRTMIN(4) .AND. PCIT(JL)>0. .AND. &
 #else
-        & PRIT(JL)>XRTMIN(4) .AND. PCIT(JL)>1.E-20 .AND. &
+        & PRIT(JL)>ICED%XRTMIN(4) .AND. PCIT(JL)>1.E-20 .AND. &
 #endif
         & PCOMPUTE(JL)==1
   IF(LMASK) THEN
     IF(.NOT. LDSOFT) THEN
-      PRCBERI(JL) = MIN(1.E8, XLBI*(PRHODREF(JL)*PRIT(JL)/PCIT(JL))**XLBEXI) ! Lbda_i
+      PRCBERI(JL) = MIN(1.E8, ICED%XLBI*(PRHODREF(JL)*PRIT(JL)/PCIT(JL))**ICED%XLBEXI) ! Lbda_i
       PRCBERI(JL) = ( PSSI(JL) / (PRHODREF(JL)*PAI(JL)) ) * PCIT(JL) * &
-                    ( X0DEPI/PRCBERI(JL) + X2DEPI*PCJ(JL)*PCJ(JL)/PRCBERI(JL)**(XDI+2.0) )
+                    ( ICEP%X0DEPI/PRCBERI(JL) + ICEP%X2DEPI*PCJ(JL)*PCJ(JL)/PRCBERI(JL)**(ICED%XDI+2.0) )
     ENDIF
     PA_RC(JL) = PA_RC(JL) - PRCBERI(JL)
     PA_RI(JL) = PA_RI(JL) + PRCBERI(JL)
diff --git a/src/common/micro/mode_ice4_fast_rs.F90 b/src/common/micro/mode_ice4_fast_rs.F90
index 9775ff1559937c0570f62c9124247c474aeb2d5b..208c6b7b64aff4073f32340c0409d0323c866565 100644
--- a/src/common/micro/mode_ice4_fast_rs.F90
+++ b/src/common/micro/mode_ice4_fast_rs.F90
@@ -5,7 +5,7 @@
 MODULE MODE_ICE4_FAST_RS
 IMPLICIT NONE
 CONTAINS
-SUBROUTINE ICE4_FAST_RS(KPROMA,KSIZE, LDSOFT, PCOMPUTE, &
+SUBROUTINE ICE4_FAST_RS(CST, PARAMI, ICEP, ICED, KPROMA,KSIZE, LDSOFT, PCOMPUTE, &
                        &PRHODREF, PLVFACT, PLSFACT, PPRES, &
                        &PDV, PKA, PCJ, &
                        &PLBDAR, PLBDAS, &
@@ -36,16 +36,10 @@ SUBROUTINE ICE4_FAST_RS(KPROMA,KSIZE, LDSOFT, PCOMPUTE, &
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_CST,            ONLY: XALPI, XALPW, XBETAI, XBETAW, XCI, XCL, XCPV, XESTT, XGAMI, XGAMW, &
-                             & XLMTT, XLVTT, XMD, XMV, XRV, XTT, XEPSILO
-USE MODD_PARAM_ICE,      ONLY: LEVLIMIT, CSNOWRIMING
-USE MODD_RAIN_ICE_DESCR, ONLY: XBS, XCEXVT, XCXS, XRTMIN
-USE MODD_RAIN_ICE_PARAM, ONLY: NACCLBDAR, NACCLBDAS, NGAMINC, X0DEPS, X1DEPS, XACCINTP1R, XACCINTP1S, &
-                             & XACCINTP2R, XACCINTP2S, XCRIMSG, XCRIMSS, XEX0DEPS, XEX1DEPS, XEXCRIMSG, &
-                             & XEXCRIMSS, XEXSRIMCG, XEXSRIMCG2, XFRACCSS, XFSACCRG, XFSCVMG, XGAMINC_RIM1, &
-                             & XGAMINC_RIM1, XGAMINC_RIM2, XGAMINC_RIM4, XKER_RACCS, XKER_RACCSS, &
-                             & XKER_SACCRG, XLBRACCS1, XLBRACCS2, XLBRACCS3, XLBSACCR1, XLBSACCR2, XLBSACCR3, &
-                             & XRIMINTP1, XRIMINTP2, XSRIMCG, XSRIMCG2, XSRIMCG3
+USE MODD_CST,            ONLY: CST_t
+USE MODD_PARAM_ICE,      ONLY: PARAM_ICE_t
+USE MODD_RAIN_ICE_DESCR, ONLY: RAIN_ICE_DESCR_t
+USE MODD_RAIN_ICE_PARAM, ONLY: RAIN_ICE_PARAM_t
 USE PARKIND1, ONLY : JPRB
 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !
@@ -53,6 +47,10 @@ IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
+TYPE(CST_t),              INTENT(IN)    :: CST
+TYPE(PARAM_ICE_t),        INTENT(IN)    :: PARAMI
+TYPE(RAIN_ICE_PARAM_t),   INTENT(IN)    :: ICEP
+TYPE(RAIN_ICE_DESCR_t),   INTENT(IN)    :: ICED
 INTEGER,                      INTENT(IN)    :: KPROMA,KSIZE
 LOGICAL,                      INTENT(IN)    :: LDSOFT
 REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PCOMPUTE
@@ -110,7 +108,7 @@ IF (LHOOK) CALL DR_HOOK('ICE4_FAST_RS', 0, ZHOOK_HANDLE)
 !*       5.0    maximum freezing rate
 !
 DO JL=1, KSIZE
-  ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(5)-PRST(JL))) * & ! WHERE(PRST(:)>XRTMIN(5))
+  ZMASK(JL)=MAX(0., -SIGN(1., ICED%XRTMIN(5)-PRST(JL))) * & ! WHERE(PRST(:)>XRTMIN(5))
            &PCOMPUTE(JL)
 ENDDO
 IF(LDSOFT) THEN
@@ -120,23 +118,23 @@ IF(LDSOFT) THEN
   ENDDO
 ELSE
   DO JL=1, KSIZE
-    PRS_TEND(JL, IFREEZ1)=ZMASK(JL) * PRVT(JL)*PPRES(JL)/(XEPSILO+PRVT(JL)) ! Vapor pressure
+    PRS_TEND(JL, IFREEZ1)=ZMASK(JL) * PRVT(JL)*PPRES(JL)/(CST%XEPSILO+PRVT(JL)) ! Vapor pressure
   ENDDO
-  IF(LEVLIMIT) THEN
+  IF(PARAMI%LEVLIMIT) THEN
     WHERE(ZMASK(1:KSIZE)==1.)
-      PRS_TEND(1:KSIZE, IFREEZ1)=MIN(PRS_TEND(1:KSIZE, IFREEZ1), EXP(XALPI-XBETAI/PT(1:KSIZE)-XGAMI*ALOG(PT(1:KSIZE)))) ! min(ev, es_i(T))
+      PRS_TEND(1:KSIZE, IFREEZ1)=MIN(PRS_TEND(1:KSIZE, IFREEZ1), EXP(CST%XALPI-CST%XBETAI/PT(1:KSIZE)-CST%XGAMI*ALOG(PT(1:KSIZE)))) ! min(ev, es_i(T))
     END WHERE
   ENDIF
   PRS_TEND(:, IFREEZ2)=0.
   WHERE(ZMASK(1:KSIZE)==1.)
-    PRS_TEND(1:KSIZE, IFREEZ1)=PKA(1:KSIZE)*(XTT-PT(1:KSIZE)) +                              &
-             (PDV(1:KSIZE)*(XLVTT+(XCPV-XCL)*(PT(1:KSIZE)-XTT)) &
-                           *(XESTT-PRS_TEND(1:KSIZE, IFREEZ1))/(XRV*PT(1:KSIZE))           )
-    PRS_TEND(1:KSIZE, IFREEZ1)=PRS_TEND(1:KSIZE, IFREEZ1)* ( X0DEPS*       PLBDAS(1:KSIZE)**XEX0DEPS +     &
-                           X1DEPS*PCJ(1:KSIZE)*PLBDAS(1:KSIZE)**XEX1DEPS )/ &
-                          ( PRHODREF(1:KSIZE)*(XLMTT-XCL*(XTT-PT(1:KSIZE))) )
-    PRS_TEND(1:KSIZE, IFREEZ2)=(PRHODREF(1:KSIZE)*(XLMTT+(XCI-XCL)*(XTT-PT(1:KSIZE)))   ) / &
-                          ( PRHODREF(1:KSIZE)*(XLMTT-XCL*(XTT-PT(1:KSIZE))) )
+    PRS_TEND(1:KSIZE, IFREEZ1)=PKA(1:KSIZE)*(CST%XTT-PT(1:KSIZE)) +                              &
+             (PDV(1:KSIZE)*(CST%XLVTT+(CST%XCPV-CST%XCL)*(PT(1:KSIZE)-CST%XTT)) &
+                           *(CST%XESTT-PRS_TEND(1:KSIZE, IFREEZ1))/(CST%XRV*PT(1:KSIZE))           )
+    PRS_TEND(1:KSIZE, IFREEZ1)=PRS_TEND(1:KSIZE, IFREEZ1)* ( ICEP%X0DEPS*       PLBDAS(1:KSIZE)**ICEP%XEX0DEPS +     &
+                           ICEP%X1DEPS*PCJ(1:KSIZE)*PLBDAS(1:KSIZE)**ICEP%XEX1DEPS )/ &
+                          ( PRHODREF(1:KSIZE)*(CST%XLMTT-CST%XCL*(CST%XTT-PT(1:KSIZE))) )
+    PRS_TEND(1:KSIZE, IFREEZ2)=(PRHODREF(1:KSIZE)*(CST%XLMTT+(CST%XCI-CST%XCL)*(CST%XTT-PT(1:KSIZE)))   ) / &
+                          ( PRHODREF(1:KSIZE)*(CST%XLMTT-CST%XCL*(CST%XTT-PT(1:KSIZE))) )
   END WHERE
 ENDIF
 DO JL=1, KSIZE
@@ -151,8 +149,8 @@ ENDDO
 !
 IGRIM = 0
 DO JL=1, KSIZE
-  ZRIM(JL)=MAX(0., -SIGN(1., XRTMIN(2)-PRCT(JL))) * & !WHERE(PRCT(:)>XRTMIN(2))
-          &MAX(0., -SIGN(1., XRTMIN(5)-PRST(JL))) * & !WHERE(PRST(:)>XRTMIN(5))
+  ZRIM(JL)=MAX(0., -SIGN(1., ICED%XRTMIN(2)-PRCT(JL))) * & !WHERE(PRCT(:)>XRTMIN(2))
+          &MAX(0., -SIGN(1., ICED%XRTMIN(5)-PRST(JL))) * & !WHERE(PRST(:)>XRTMIN(5))
           &PCOMPUTE(JL)
   IF (ZRIM(JL)>0) THEN
     IGRIM = IGRIM + 1
@@ -187,16 +185,16 @@ ELSE
     !               set of Lbda_s used to tabulate some moments of the incomplete
     !               gamma function
     !
-    ZVEC2(1:IGRIM) = MAX( 1.00001, MIN( REAL(NGAMINC)-0.00001,           &
-                          XRIMINTP1 * LOG( ZVEC1(1:IGRIM) ) + XRIMINTP2 ) )
+    ZVEC2(1:IGRIM) = MAX( 1.00001, MIN( REAL(ICEP%NGAMINC)-0.00001,           &
+                          ICEP%XRIMINTP1 * LOG( ZVEC1(1:IGRIM) ) + ICEP%XRIMINTP2 ) )
     IVEC2(1:IGRIM) = INT( ZVEC2(1:IGRIM) )
     ZVEC2(1:IGRIM) = ZVEC2(1:IGRIM) - REAL( IVEC2(1:IGRIM) )
     !
     !        5.1.3  perform the linear interpolation of the normalized
     !               "2+XDS"-moment of the incomplete gamma function
     !
-    ZVEC1(1:IGRIM) =   XGAMINC_RIM1( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM)      &
-                     - XGAMINC_RIM1( IVEC2(1:IGRIM)   )*(ZVEC2(1:IGRIM) - 1.0)
+    ZVEC1(1:IGRIM) =   ICEP%XGAMINC_RIM1( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM)      &
+                     - ICEP%XGAMINC_RIM1( IVEC2(1:IGRIM)   )*(ZVEC2(1:IGRIM) - 1.0)
     ZZW(:) = 0.
     DO JJ = 1, IGRIM
       ZZW(I1(JJ)) = ZVEC1(JJ)
@@ -205,24 +203,24 @@ ELSE
     !        5.1.4  riming of the small sized aggregates
     !
     WHERE (GRIM(1:KSIZE))
-      PRS_TEND(1:KSIZE, IRCRIMSS) = XCRIMSS * ZZW(1:KSIZE) * PRCT(1:KSIZE)                & ! RCRIMSS
-                                      *   PLBDAS(1:KSIZE)**XEXCRIMSS &
-                                      * PRHODREF(1:KSIZE)**(-XCEXVT)
+      PRS_TEND(1:KSIZE, IRCRIMSS) = ICEP%XCRIMSS * ZZW(1:KSIZE) * PRCT(1:KSIZE)                & ! RCRIMSS
+                                      *   PLBDAS(1:KSIZE)**ICEP%XEXCRIMSS &
+                                      * PRHODREF(1:KSIZE)**(-ICED%XCEXVT)
     END WHERE
     !
     !        5.1.5  perform the linear interpolation of the normalized
     !               "XBS"-moment of the incomplete gamma function (XGAMINC_RIM2) and
     !               "XBG"-moment of the incomplete gamma function (XGAMINC_RIM4)
     !
-    ZVEC1(1:IGRIM) =  XGAMINC_RIM2( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM)      &
-                    - XGAMINC_RIM2( IVEC2(1:IGRIM)   )*(ZVEC2(1:IGRIM) - 1.0)
+    ZVEC1(1:IGRIM) =  ICEP%XGAMINC_RIM2( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM)      &
+                    - ICEP%XGAMINC_RIM2( IVEC2(1:IGRIM)   )*(ZVEC2(1:IGRIM) - 1.0)
     ZZW(:) = 0.
     DO JJ = 1, IGRIM
       ZZW(I1(JJ)) = ZVEC1(JJ)
     END DO
 
-    ZVEC1(1:IGRIM) =  XGAMINC_RIM4( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM)      &
-                    - XGAMINC_RIM4( IVEC2(1:IGRIM)   )*(ZVEC2(1:IGRIM) - 1.0)
+    ZVEC1(1:IGRIM) =  ICEP%XGAMINC_RIM4( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM)      &
+                    - ICEP%XGAMINC_RIM4( IVEC2(1:IGRIM)   )*(ZVEC2(1:IGRIM) - 1.0)
     ZZW2(:) = 0.
     DO JJ = 1, IGRIM
       ZZW2(I1(JJ)) = ZVEC1(JJ)
@@ -232,20 +230,20 @@ ELSE
     !
     !
     WHERE(GRIM(1:KSIZE))
-      PRS_TEND(1:KSIZE, IRCRIMS)=XCRIMSG * PRCT(1:KSIZE)               & ! RCRIMS
-                                   * PLBDAS(1:KSIZE)**XEXCRIMSG  &
-                                   * PRHODREF(1:KSIZE)**(-XCEXVT)
+      PRS_TEND(1:KSIZE, IRCRIMS)=ICEP%XCRIMSG * PRCT(1:KSIZE)               & ! RCRIMS
+                                   * PLBDAS(1:KSIZE)**ICEP%XEXCRIMSG  &
+                                   * PRHODREF(1:KSIZE)**(-ICED%XCEXVT)
       ZZW6(1:KSIZE) = PRS_TEND(1:KSIZE, IRCRIMS) - PRS_TEND(1:KSIZE, IRCRIMSS) ! RCRIMSG
     END WHERE
 
-    IF(CSNOWRIMING=='M90 ')THEN
+    IF(PARAMI%CSNOWRIMING=='M90 ')THEN
       !Murakami 1990
       WHERE(GRIM(1:KSIZE))
-        PRS_TEND(1:KSIZE, IRSRIMCG)=XSRIMCG * PLBDAS(1:KSIZE)**XEXSRIMCG*(1.0-ZZW(1:KSIZE))
+        PRS_TEND(1:KSIZE, IRSRIMCG)=ICEP%XSRIMCG * PLBDAS(1:KSIZE)**ICEP%XEXSRIMCG*(1.0-ZZW(1:KSIZE))
         PRS_TEND(1:KSIZE, IRSRIMCG)=ZZW6(1:KSIZE)*PRS_TEND(1:KSIZE, IRSRIMCG)/ &
                        MAX(1.E-20, &
-                           XSRIMCG3*XSRIMCG2*PLBDAS(1:KSIZE)**XEXSRIMCG2*(1.-ZZW2(1:KSIZE)) - &
-                           XSRIMCG3*PRS_TEND(1:KSIZE, IRSRIMCG))
+                           ICEP%XSRIMCG3*ICEP%XSRIMCG2*PLBDAS(1:KSIZE)**ICEP%XEXSRIMCG2*(1.-ZZW2(1:KSIZE)) - &
+                           ICEP%XSRIMCG3*PRS_TEND(1:KSIZE, IRSRIMCG))
       END WHERE
     ELSE
       PRS_TEND(:, IRSRIMCG)=0.
@@ -256,7 +254,7 @@ ENDIF
 DO JL=1, KSIZE
   ! More restrictive RIM mask to be used for riming by negative temperature only
   ZRIM(JL)=ZRIM(JL) * &
-          &MAX(0., -SIGN(1., PT(JL)-XTT)) ! WHERE(PT(:)<XTT)
+          &MAX(0., -SIGN(1., PT(JL)-CST%XTT)) ! WHERE(PT(:)<XTT)
   PRCRIMSS(JL)=ZRIM(JL)*MIN(ZFREEZ_RATE(JL), PRS_TEND(JL, IRCRIMSS))
   ZFREEZ_RATE(JL)=MAX(0., ZFREEZ_RATE(JL)-PRCRIMSS(JL))
   ZZW(JL) = MIN(1., ZFREEZ_RATE(JL) / MAX(1.E-20, PRS_TEND(JL, IRCRIMS) - PRCRIMSS(JL))) ! proportion we are able to freeze
@@ -273,8 +271,8 @@ ENDDO
 !
 IGACC = 0
 DO JJ = 1, KSIZE
-  ZACC(JJ)=MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JJ))) * & !WHERE(PRRT(:)>XRTMIN(3))
-          &MAX(0., -SIGN(1., XRTMIN(5)-PRST(JJ))) * & !WHERE(PRST(:)>XRTMIN(5))
+  ZACC(JJ)=MAX(0., -SIGN(1., ICED%XRTMIN(3)-PRRT(JJ))) * & !WHERE(PRRT(:)>XRTMIN(3))
+          &MAX(0., -SIGN(1., ICED%XRTMIN(5)-PRST(JJ))) * & !WHERE(PRST(:)>XRTMIN(5))
           &PCOMPUTE(JJ)
   IF (ZACC(JJ)>0) THEN
     IGACC = IGACC + 1
@@ -308,13 +306,13 @@ ELSE
     !               in the geometrical set of (Lbda_s,Lbda_r) couplet use to
     !               tabulate the RACCSS-kernel
     !
-    ZVEC1(1:IGACC) = MAX( 1.00001, MIN( REAL(NACCLBDAS)-0.00001,           &
-                          XACCINTP1S * LOG( ZVEC1(1:IGACC) ) + XACCINTP2S ) )
+    ZVEC1(1:IGACC) = MAX( 1.00001, MIN( REAL(ICEP%NACCLBDAS)-0.00001,           &
+                          ICEP%XACCINTP1S * LOG( ZVEC1(1:IGACC) ) + ICEP%XACCINTP2S ) )
     IVEC1(1:IGACC) = INT( ZVEC1(1:IGACC) )
     ZVEC1(1:IGACC) = ZVEC1(1:IGACC) - REAL( IVEC1(1:IGACC) )
     !
-    ZVEC2(1:IGACC) = MAX( 1.00001, MIN( REAL(NACCLBDAR)-0.00001,           &
-                          XACCINTP1R * LOG( ZVEC2(1:IGACC) ) + XACCINTP2R ) )
+    ZVEC2(1:IGACC) = MAX( 1.00001, MIN( REAL(ICEP%NACCLBDAR)-0.00001,           &
+                          ICEP%XACCINTP1R * LOG( ZVEC2(1:IGACC) ) + ICEP%XACCINTP2R ) )
     IVEC2(1:IGACC) = INT( ZVEC2(1:IGACC) )
     ZVEC2(1:IGACC) = ZVEC2(1:IGACC) - REAL( IVEC2(1:IGACC) )
     !
@@ -322,11 +320,11 @@ ELSE
     !               RACCSS-kernel
     !
     DO JJ = 1, IGACC
-      ZVEC3(JJ) =  (  XKER_RACCSS(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                    - XKER_RACCSS(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
+      ZVEC3(JJ) =  (  ICEP%XKER_RACCSS(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
+                    - ICEP%XKER_RACCSS(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
                                                           * ZVEC1(JJ) &
-                 - (  XKER_RACCSS(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                    - XKER_RACCSS(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
+                 - (  ICEP%XKER_RACCSS(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
+                    - ICEP%XKER_RACCSS(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
                                                           * (ZVEC1(JJ) - 1.0)
     END DO
     ZZW(:) = 0.
@@ -338,10 +336,10 @@ ELSE
     !
     WHERE(GACC(1:KSIZE))
       ZZW6(1:KSIZE) =                                                        & !! coef of RRACCS
-            XFRACCSS*( PLBDAS(1:KSIZE)**XCXS )*( PRHODREF(1:KSIZE)**(-XCEXVT-1.) ) &
-       *( XLBRACCS1/((PLBDAS(1:KSIZE)**2)               ) +                  &
-          XLBRACCS2/( PLBDAS(1:KSIZE)    * PLBDAR(1:KSIZE)    ) +                  &
-          XLBRACCS3/(               (PLBDAR(1:KSIZE)**2)) )/PLBDAR(1:KSIZE)**4
+            ICEP%XFRACCSS*( PLBDAS(1:KSIZE)**ICED%XCXS )*( PRHODREF(1:KSIZE)**(-ICED%XCEXVT-1.) ) &
+       *( ICEP%XLBRACCS1/((PLBDAS(1:KSIZE)**2)               ) +                  &
+          ICEP%XLBRACCS2/( PLBDAS(1:KSIZE)    * PLBDAR(1:KSIZE)    ) +                  &
+          ICEP%XLBRACCS3/(               (PLBDAR(1:KSIZE)**2)) )/PLBDAR(1:KSIZE)**4
       PRS_TEND(1:KSIZE, IRRACCSS) =ZZW(1:KSIZE)*ZZW6(1:KSIZE)
     END WHERE
     !
@@ -349,11 +347,11 @@ ELSE
     !               RACCS-kernel
     !
     DO JJ = 1, IGACC
-      ZVEC3(JJ) =  (   XKER_RACCS(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                    -  XKER_RACCS(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
+      ZVEC3(JJ) =  (   ICEP%XKER_RACCS(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
+                    -  ICEP%XKER_RACCS(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
                                                                    * ZVEC1(JJ) &
-                 - (   XKER_RACCS(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                    -  XKER_RACCS(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
+                 - (   ICEP%XKER_RACCS(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
+                    -  ICEP%XKER_RACCS(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
                                                            * (ZVEC1(JJ) - 1.0)
     END DO
     ZZW(:) = 0.
@@ -367,11 +365,11 @@ ELSE
     !               SACCRG-kernel
     !
     DO JJ = 1, IGACC
-        ZVEC3(JJ) =  (  XKER_SACCRG(IVEC2(JJ)+1,IVEC1(JJ)+1)* ZVEC1(JJ)          &
-                      - XKER_SACCRG(IVEC2(JJ)+1,IVEC1(JJ)  )*(ZVEC1(JJ) - 1.0) ) &
+        ZVEC3(JJ) =  (  ICEP%XKER_SACCRG(IVEC2(JJ)+1,IVEC1(JJ)+1)* ZVEC1(JJ)          &
+                      - ICEP%XKER_SACCRG(IVEC2(JJ)+1,IVEC1(JJ)  )*(ZVEC1(JJ) - 1.0) ) &
                                                             * ZVEC2(JJ) &
-                   - (  XKER_SACCRG(IVEC2(JJ)  ,IVEC1(JJ)+1)* ZVEC1(JJ)          &
-                      - XKER_SACCRG(IVEC2(JJ)  ,IVEC1(JJ)  )*(ZVEC1(JJ) - 1.0) ) &
+                   - (  ICEP%XKER_SACCRG(IVEC2(JJ)  ,IVEC1(JJ)+1)* ZVEC1(JJ)          &
+                      - ICEP%XKER_SACCRG(IVEC2(JJ)  ,IVEC1(JJ)  )*(ZVEC1(JJ) - 1.0) ) &
                                                             * (ZVEC2(JJ) - 1.0)
     END DO
     ZZW(:) = 0.
@@ -383,11 +381,11 @@ ELSE
     !               into graupeln
     !
     WHERE(GACC(1:KSIZE))
-      PRS_TEND(1:KSIZE, IRSACCRG) = XFSACCRG*ZZW(1:KSIZE)*                    & ! RSACCRG
-          ( PLBDAS(1:KSIZE)**(XCXS-XBS) )*( PRHODREF(1:KSIZE)**(-XCEXVT-1.) ) &
-         *( XLBSACCR1/((PLBDAR(1:KSIZE)**2)               ) +           &
-            XLBSACCR2/( PLBDAR(1:KSIZE)    * PLBDAS(1:KSIZE)    ) +           &
-            XLBSACCR3/(               (PLBDAS(1:KSIZE)**2)) )/PLBDAR(1:KSIZE)
+      PRS_TEND(1:KSIZE, IRSACCRG) = ICEP%XFSACCRG*ZZW(1:KSIZE)*                    & ! RSACCRG
+          ( PLBDAS(1:KSIZE)**(ICED%XCXS-ICED%XBS) )*( PRHODREF(1:KSIZE)**(-ICED%XCEXVT-1.) ) &
+         *( ICEP%XLBSACCR1/((PLBDAR(1:KSIZE)**2)               ) +           &
+            ICEP%XLBSACCR2/( PLBDAR(1:KSIZE)    * PLBDAS(1:KSIZE)    ) +           &
+            ICEP%XLBSACCR3/(               (PLBDAS(1:KSIZE)**2)) )/PLBDAR(1:KSIZE)
     END WHERE
   ENDIF
 ENDIF
@@ -395,7 +393,7 @@ ENDIF
 DO JL=1, KSIZE
   ! More restrictive ACC mask to be used for accretion by negative temperature only
   ZACC(JL) = ZACC(JL) * &
-           &MAX(0., -SIGN(1., PT(JL)-XTT)) ! WHERE(PT(:)<XTT)
+           &MAX(0., -SIGN(1., PT(JL)-CST%XTT)) ! WHERE(PT(:)<XTT)
   PRRACCSS(JL)=ZACC(JL)*MIN(ZFREEZ_RATE(JL), PRS_TEND(JL, IRRACCSS))
   ZFREEZ_RATE(JL)=MAX(0., ZFREEZ_RATE(JL)-PRRACCSS(JL))
   ZZW(JL) = MIN(1., ZFREEZ_RATE(JL) / MAX(1.E-20, PRS_TEND(JL, IRRACCS)-PRRACCSS(JL))) ! proportion we are able to freeze
@@ -412,8 +410,8 @@ ENDDO
 !*       5.3    Conversion-Melting of the aggregates
 !
 DO JL=1, KSIZE
-  ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(5)-PRST(JL))) * & ! WHERE(PRST(:)>XRTMIN(5))
-           &MAX(0., -SIGN(1., XTT-PT(JL))) * & ! WHERE(PT(:)>XTT)
+  ZMASK(JL)=MAX(0., -SIGN(1., ICED%XRTMIN(5)-PRST(JL))) * & ! WHERE(PRST(:)>XRTMIN(5))
+           &MAX(0., -SIGN(1., CST%XTT-PT(JL))) * & ! WHERE(PT(:)>XTT)
            &PCOMPUTE(JL)
 ENDDO
 IF(LDSOFT) THEN
@@ -423,18 +421,18 @@ IF(LDSOFT) THEN
   ENDDO
 ELSE
   DO JL=1, KSIZE
-    PRSMLTG(JL)=ZMASK(JL)*PRVT(JL)*PPRES(JL)/(XEPSILO+PRVT(JL)) ! Vapor pressure
+    PRSMLTG(JL)=ZMASK(JL)*PRVT(JL)*PPRES(JL)/(CST%XEPSILO+PRVT(JL)) ! Vapor pressure
   ENDDO
-  IF(LEVLIMIT) THEN
+  IF(PARAMI%LEVLIMIT) THEN
     WHERE(ZMASK(:)==1.)
-      PRSMLTG(:)=MIN(PRSMLTG(:), EXP(XALPW-XBETAW/PT(:)-XGAMW*ALOG(PT(:)))) ! min(ev, es_w(T))
+      PRSMLTG(:)=MIN(PRSMLTG(:), EXP(CST%XALPW-CST%XBETAW/PT(:)-CST%XGAMW*ALOG(PT(:)))) ! min(ev, es_w(T))
     END WHERE
   ENDIF
   DO JL=1, KSIZE
     PRSMLTG(JL)=ZMASK(JL)*( &
-                            & PKA(JL)*(XTT-PT(JL)) +                                 &
-                            & ( PDV(JL)*(XLVTT + ( XCPV - XCL ) * ( PT(JL) - XTT )) &
-                            & *(XESTT-PRSMLTG(JL))/(XRV*PT(JL))             ) &
+                            & PKA(JL)*(CST%XTT-PT(JL)) +                                 &
+                            & ( PDV(JL)*(CST%XLVTT + ( CST%XCPV - CST%XCL ) * ( PT(JL) - CST%XTT )) &
+                            & *(CST%XESTT-PRSMLTG(JL))/(CST%XRV*PT(JL))             ) &
                           &)
   ENDDO
   PRCMLTSR(:) = 0.
@@ -442,12 +440,12 @@ ELSE
     !
     ! compute RSMLT
     !
-    PRSMLTG(1:KSIZE)  = XFSCVMG*MAX( 0.0,( -PRSMLTG(1:KSIZE) *             &
-                         ( X0DEPS*       PLBDAS(1:KSIZE)**XEX0DEPS +     &
-                           X1DEPS*PCJ(1:KSIZE)*PLBDAS(1:KSIZE)**XEX1DEPS ) -   &
+    PRSMLTG(1:KSIZE)  = ICEP%XFSCVMG*MAX( 0.0,( -PRSMLTG(1:KSIZE) *             &
+                         ( ICEP%X0DEPS*       PLBDAS(1:KSIZE)**ICEP%XEX0DEPS +     &
+                           ICEP%X1DEPS*PCJ(1:KSIZE)*PLBDAS(1:KSIZE)**ICEP%XEX1DEPS ) -   &
                                    ( PRS_TEND(1:KSIZE, IRCRIMS) + PRS_TEND(1:KSIZE, IRRACCS) ) *       &
-                            ( PRHODREF(1:KSIZE)*XCL*(XTT-PT(1:KSIZE))) ) /    &
-                                           ( PRHODREF(1:KSIZE)*XLMTT ) )
+                            ( PRHODREF(1:KSIZE)*CST%XCL*(CST%XTT-PT(1:KSIZE))) ) /    &
+                                           ( PRHODREF(1:KSIZE)*CST%XLMTT ) )
     ! When T < XTT, rc is collected by snow (riming) to produce snow and graupel
     ! When T > XTT, if riming was still enabled, rc would produce snow and graupel with snow becomming graupel (conversion/melting) and graupel becomming rain (melting)
     ! To insure consistency when crossing T=XTT, rc collected with T>XTT must be transformed in rain.
diff --git a/src/common/micro/mode_ice4_rimltc.F90 b/src/common/micro/mode_ice4_rimltc.F90
index eec978566f405fd7695ee6ba98d3d27af4978bf7..d8957254c79e2b5800c1fe6bd5c0d8e10d25a016 100644
--- a/src/common/micro/mode_ice4_rimltc.F90
+++ b/src/common/micro/mode_ice4_rimltc.F90
@@ -7,7 +7,7 @@ MODULE MODE_ICE4_RIMLTC
 IMPLICIT NONE
 CONTAINS
 
-SUBROUTINE ICE4_RIMLTC(KSIZE, PCOMPUTE, &
+SUBROUTINE ICE4_RIMLTC(CST, PARAMI, KSIZE, PCOMPUTE, &
                        &PEXN, PLVFACT, PLSFACT, &
                        &PT, &
                        &PTHT, PRIT, &
@@ -29,8 +29,8 @@ SUBROUTINE ICE4_RIMLTC(KSIZE, PCOMPUTE, &
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_CST,       ONLY: XTT
-USE MODD_PARAM_ICE, ONLY: LFEEDBACKT
+USE MODD_CST,       ONLY: CST_t
+USE MODD_PARAM_ICE, ONLY: PARAM_ICE_t
 USE PARKIND1, ONLY : JPRB
 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !
@@ -38,6 +38,8 @@ IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
+TYPE(CST_t),                  INTENT(IN)    :: CST
+TYPE(PARAM_ICE_t),            INTENT(IN)    :: PARAMI
 INTEGER,                      INTENT(IN)    :: KSIZE
 REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PCOMPUTE
 REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PEXN     ! Exner function
@@ -62,15 +64,15 @@ IF (LHOOK) CALL DR_HOOK('ICE4_RIMLTC',0,ZHOOK_HANDLE)
 PRIMLTC_MR(:)=0.
 DO JL=1, KSIZE
   ZMASK(JL)=MAX(0., -SIGN(1., -PRIT(JL))) * & ! PRIT(:)>0.
-           &MAX(0., -SIGN(1., XTT-PT(JL))) * & ! PT(:)>XTT
+           &MAX(0., -SIGN(1., CST%XTT-PT(JL))) * & ! PT(:)>XTT
            &PCOMPUTE(JL)
   PRIMLTC_MR(JL)=PRIT(JL) * ZMASK(JL)
 ENDDO
 
-IF(LFEEDBACKT) THEN
+IF(PARAMI%LFEEDBACKT) THEN
   !Limitation due to 0 crossing of temperature
   DO JL=1, KSIZE
-    PRIMLTC_MR(JL)=MIN(PRIMLTC_MR(JL), MAX(0., (PTHT(JL)-XTT/PEXN(JL)) / (PLSFACT(JL)-PLVFACT(JL))))
+    PRIMLTC_MR(JL)=MIN(PRIMLTC_MR(JL), MAX(0., (PTHT(JL)-CST%XTT/PEXN(JL)) / (PLSFACT(JL)-PLVFACT(JL))))
   ENDDO
 ENDIF
 
diff --git a/src/common/micro/mode_ice4_rrhong.F90 b/src/common/micro/mode_ice4_rrhong.F90
index 0dde4062887f9af811ae6139a88241d6375c61e5..bd1fcd413b2b0cd6b99ddb847ca00f135caa49d0 100644
--- a/src/common/micro/mode_ice4_rrhong.F90
+++ b/src/common/micro/mode_ice4_rrhong.F90
@@ -6,7 +6,7 @@
 MODULE MODE_ICE4_RRHONG
 IMPLICIT NONE
 CONTAINS
-SUBROUTINE ICE4_RRHONG(KSIZE, PCOMPUTE, &
+SUBROUTINE ICE4_RRHONG(CST, PARAMI, ICED, KSIZE, PCOMPUTE, &
                        &PEXN, PLVFACT, PLSFACT, &
                        &PT,   PRRT, &
                        &PTHT, &
@@ -28,9 +28,9 @@ SUBROUTINE ICE4_RRHONG(KSIZE, PCOMPUTE, &
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_CST,            ONLY: XTT
-USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN
-USE MODD_PARAM_ICE,      ONLY: LFEEDBACKT
+USE MODD_CST,            ONLY: CST_t
+USE MODD_PARAM_ICE,      ONLY: PARAM_ICE_t
+USE MODD_RAIN_ICE_DESCR, ONLY: RAIN_ICE_DESCR_t
 USE PARKIND1, ONLY : JPRB
 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !
@@ -38,6 +38,9 @@ IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
+TYPE(CST_t),              INTENT(IN)    :: CST
+TYPE(PARAM_ICE_t),        INTENT(IN)    :: PARAMI
+TYPE(RAIN_ICE_DESCR_t),   INTENT(IN)    :: ICED
 INTEGER, INTENT(IN) :: KSIZE
 REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PCOMPUTE
 REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PEXN     ! Exner function
@@ -61,15 +64,15 @@ IF (LHOOK) CALL DR_HOOK('ICE4_RRHONG',0,ZHOOK_HANDLE)
 !
 PRRHONG_MR(:) = 0.
 DO JL=1, KSIZE
-  ZMASK(JL)=MAX(0., -SIGN(1., PT(JL)-(XTT-35.0))) * & ! PT(:)<XTT-35.0
-           &MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JL))) * & ! PRRT(:)>XRTMIN(3)
+  ZMASK(JL)=MAX(0., -SIGN(1., PT(JL)-(CST%XTT-35.0))) * & ! PT(:)<XTT-35.0
+           &MAX(0., -SIGN(1., ICED%XRTMIN(3)-PRRT(JL))) * & ! PRRT(:)>XRTMIN(3)
            &PCOMPUTE(JL)
   PRRHONG_MR(JL)=PRRT(JL) * ZMASK(JL)
 ENDDO
-IF(LFEEDBACKT) THEN
+IF(PARAMI%LFEEDBACKT) THEN
   !Limitation due to -35 crossing of temperature
   DO JL=1, KSIZE
-    PRRHONG_MR(JL)=MIN(PRRHONG_MR(JL), MAX(0., ((XTT-35.)/PEXN(JL)-PTHT(JL))/(PLSFACT(JL)-PLVFACT(JL))))
+    PRRHONG_MR(JL)=MIN(PRRHONG_MR(JL), MAX(0., ((CST%XTT-35.)/PEXN(JL)-PTHT(JL))/(PLSFACT(JL)-PLVFACT(JL))))
   ENDDO
 ENDIF
 !
diff --git a/src/common/micro/mode_ice4_rsrimcg_old.F90 b/src/common/micro/mode_ice4_rsrimcg_old.F90
index ff29be25fd07ae4515f0be23d6fe76c44f126381..c833ca45f53e72380e7d272ec23a48a73c375a77 100644
--- a/src/common/micro/mode_ice4_rsrimcg_old.F90
+++ b/src/common/micro/mode_ice4_rsrimcg_old.F90
@@ -6,7 +6,7 @@
 MODULE MODE_ICE4_RSRIMCG_OLD
 IMPLICIT NONE
 CONTAINS
-SUBROUTINE ICE4_RSRIMCG_OLD(KSIZE, LDSOFT, LDCOMPUTE, &
+SUBROUTINE ICE4_RSRIMCG_OLD(CST, ICEP, ICED, KSIZE, LDSOFT, LDCOMPUTE, &
                            &PRHODREF, &
                            &PLBDAS, &
                            &PT, PRCT, PRST, &
@@ -30,10 +30,9 @@ SUBROUTINE ICE4_RSRIMCG_OLD(KSIZE, LDSOFT, LDCOMPUTE, &
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_CST,            ONLY: XTT
-USE MODD_PARAM_ICE,      ONLY: CSNOWRIMING
-USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN
-USE MODD_RAIN_ICE_PARAM, ONLY: NGAMINC, XEXSRIMCG, XGAMINC_RIM2, XRIMINTP1, XRIMINTP2, XSRIMCG
+USE MODD_CST,            ONLY: CST_t
+USE MODD_RAIN_ICE_DESCR, ONLY: RAIN_ICE_DESCR_t
+USE MODD_RAIN_ICE_PARAM, ONLY: RAIN_ICE_PARAM_t
 USE PARKIND1, ONLY : JPRB
 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !
@@ -41,6 +40,9 @@ IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
+TYPE(CST_t),              INTENT(IN)    :: CST
+TYPE(RAIN_ICE_PARAM_t),   INTENT(IN)    :: ICEP
+TYPE(RAIN_ICE_DESCR_t),   INTENT(IN)    :: ICED
 INTEGER, INTENT(IN) :: KSIZE
 LOGICAL,                      INTENT(IN)    :: LDSOFT
 LOGICAL, DIMENSION(KSIZE),    INTENT(IN)    :: LDCOMPUTE
@@ -74,7 +76,7 @@ IF(.NOT. LDSOFT) THEN
   IGRIM = 0
   GRIM(:) = .FALSE.
   DO JL = 1, SIZE(GRIM)
-    IF(PRCT(JL)>XRTMIN(2) .AND. PRST(JL)>XRTMIN(5) .AND. LDCOMPUTE(JL) .AND. PT(JL)<XTT) THEN
+    IF(PRCT(JL)>ICED%XRTMIN(2) .AND. PRST(JL)>ICED%XRTMIN(5) .AND. LDCOMPUTE(JL) .AND. PT(JL)<CST%XTT) THEN
       IGRIM = IGRIM + 1
       IVEC1(IGRIM) = JL
       GRIM(JL) = .TRUE.
@@ -93,8 +95,8 @@ IF(.NOT. LDSOFT) THEN
     !               set of Lbda_s used to tabulate some moments of the incomplete
     !               gamma function
     !
-    ZVEC2(1:IGRIM) = MAX( 1.00001, MIN(REAL(NGAMINC)-0.00001,           &
-                          XRIMINTP1 * LOG( ZVEC1(1:IGRIM) ) + XRIMINTP2 ) )
+    ZVEC2(1:IGRIM) = MAX( 1.00001, MIN(REAL(ICEP%NGAMINC)-0.00001,           &
+                          ICEP%XRIMINTP1 * LOG( ZVEC1(1:IGRIM) ) + ICEP%XRIMINTP2 ) )
     IVEC2(1:IGRIM) = INT( ZVEC2(1:IGRIM) )
     ZVEC2(1:IGRIM) = ZVEC2(1:IGRIM) - REAL( IVEC2(1:IGRIM) )
 
@@ -102,8 +104,8 @@ IF(.NOT. LDSOFT) THEN
     !        5.1.5  perform the linear interpolation of the normalized
     !               "XBS"-moment of the incomplete gamma function (XGAMINC_RIM2)
     !
-    ZVEC1(1:IGRIM) =  XGAMINC_RIM2( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM)      &
-                    - XGAMINC_RIM2( IVEC2(1:IGRIM)   )*(ZVEC2(1:IGRIM) - 1.0)
+    ZVEC1(1:IGRIM) =  ICEP%XGAMINC_RIM2( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM)      &
+                    - ICEP%XGAMINC_RIM2( IVEC2(1:IGRIM)   )*(ZVEC2(1:IGRIM) - 1.0)
     ZZW(:) = 0.
     DO JL = 1, IGRIM
       ZZW(IVEC1(JL)) = ZVEC1(JL)
@@ -114,7 +116,7 @@ IF(.NOT. LDSOFT) THEN
     !
     !
     WHERE(GRIM(:))
-      PRSRIMCG_MR(:) = XSRIMCG * PLBDAS(:)**XEXSRIMCG   & ! RSRIMCG
+      PRSRIMCG_MR(:) = ICEP%XSRIMCG * PLBDAS(:)**ICEP%XEXSRIMCG   & ! RSRIMCG
                                * (1.0 - ZZW(:) )/PRHODREF(:)
       PRSRIMCG_MR(:)=MIN(PRST(:), PRSRIMCG_MR(:))
     END WHERE
diff --git a/src/common/micro/mode_ice4_sedimentation_split.F90 b/src/common/micro/mode_ice4_sedimentation_split.F90
index 403e7b89b68185dca6d0b6f610066be4df6b75cc..4390221369162981bf149baa01d972a171634a39 100644
--- a/src/common/micro/mode_ice4_sedimentation_split.F90
+++ b/src/common/micro/mode_ice4_sedimentation_split.F90
@@ -42,7 +42,7 @@ USE MODD_PARAM_ICE,      ONLY: PARAM_ICE_t
 !
 USE MODE_MSG, ONLY: PRINT_MSG, NVERB_FATAL
 !
-USE MODI_GAMMA
+USE MODI_GAMMA, ONLY: GAMMA
 !
 IMPLICIT NONE
 !
diff --git a/src/common/micro/mode_ice4_sedimentation_stat.F90 b/src/common/micro/mode_ice4_sedimentation_stat.F90
index 760283f88769e9260584fd79c070df0153226863..937b9a32a7c3ef217bb4e5d7637dcce6d8c069cf 100644
--- a/src/common/micro/mode_ice4_sedimentation_stat.F90
+++ b/src/common/micro/mode_ice4_sedimentation_stat.F90
@@ -43,7 +43,7 @@ USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
 USE MODD_CST, ONLY: CST_t
 USE MODD_RAIN_ICE_DESCR, ONLY: RAIN_ICE_DESCR_t
 USE MODD_RAIN_ICE_PARAM, ONLY: RAIN_ICE_PARAM_t
-USE MODI_GAMMA
+USE MODI_GAMMA, ONLY: GAMMA
 !
 IMPLICIT NONE
 !
diff --git a/src/common/micro/mode_ice4_slow.F90 b/src/common/micro/mode_ice4_slow.F90
index d4282190654f60bc33f820cce7d441cc8d311a5d..093cba7aeb85a77b7cde467d5295258420453488 100644
--- a/src/common/micro/mode_ice4_slow.F90
+++ b/src/common/micro/mode_ice4_slow.F90
@@ -5,7 +5,7 @@
 MODULE MODE_ICE4_SLOW
 IMPLICIT NONE
 CONTAINS
-SUBROUTINE ICE4_SLOW(KSIZE, LDSOFT, PCOMPUTE, PRHODREF, PT, &
+SUBROUTINE ICE4_SLOW(CST, ICEP, ICED, KSIZE, LDSOFT, PCOMPUTE, PRHODREF, PT, &
                      &PSSI, PLVFACT, PLSFACT, &
                      &PRVT, PRCT, PRIT, PRST, PRGT, &
                      &PLBDAS, PLBDAG, &
@@ -30,11 +30,9 @@ SUBROUTINE ICE4_SLOW(KSIZE, LDSOFT, PCOMPUTE, PRHODREF, PT, &
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_CST,            ONLY: XTT
-USE MODD_RAIN_ICE_DESCR, ONLY: XCEXVT, XRTMIN
-USE MODD_RAIN_ICE_PARAM, ONLY: X0DEPG, X0DEPS, X1DEPG, X1DEPS, XACRIAUTI, XALPHA3, XBCRIAUTI, XBETA3, &
-                             & XCOLEXIS, XCRIAUTI, XEX0DEPG, XEX0DEPS, XEX1DEPG, XEX1DEPS, XEXIAGGS, &
-                             & XFIAGGS, XHON, XTEXAUTI, XTIMAUTI
+USE MODD_CST,            ONLY: CST_t
+USE MODD_RAIN_ICE_DESCR, ONLY: RAIN_ICE_DESCR_t
+USE MODD_RAIN_ICE_PARAM, ONLY: RAIN_ICE_PARAM_t
 USE PARKIND1, ONLY : JPRB
 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !
@@ -42,6 +40,9 @@ IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
+TYPE(CST_t),                  INTENT(IN)    :: CST
+TYPE(RAIN_ICE_PARAM_t),       INTENT(IN)    :: ICEP
+TYPE(RAIN_ICE_DESCR_t),       INTENT(IN)    :: ICED
 INTEGER,                      INTENT(IN)    :: KSIZE
 LOGICAL,                      INTENT(IN)    :: LDSOFT
 REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PCOMPUTE
@@ -89,8 +90,8 @@ IF (LHOOK) CALL DR_HOOK('ICE4_SLOW', 0, ZHOOK_HANDLE)
 !*       3.2     compute the homogeneous nucleation source: RCHONI
 !
 DO JL=1, KSIZE
-  ZMASK(JL)=MAX(0., -SIGN(1., PT(JL)-(XTT-35.0))) * & ! PT(:)<XTT-35.0
-           &MAX(0., -SIGN(1., XRTMIN(2)-PRCT(JL))) * & ! PRCT(:)>XRTMIN(2)
+  ZMASK(JL)=MAX(0., -SIGN(1., PT(JL)-(CST%XTT-35.0))) * & ! PT(:)<XTT-35.0
+           &MAX(0., -SIGN(1., ICED%XRTMIN(2)-PRCT(JL))) * & ! PRCT(:)>XRTMIN(2)
            &PCOMPUTE(JL)
 ENDDO
 IF(LDSOFT) THEN
@@ -101,11 +102,11 @@ ELSE
   PRCHONI(:) = 0.
   WHERE(ZMASK(:)==1.)
 #ifdef REPRO48
-    PRCHONI(:) = XHON*PRHODREF(:)*PRCT(:)       &
-                                 *EXP( XALPHA3*(PT(:)-XTT)-XBETA3 )
+    PRCHONI(:) = ICEP%XHON*PRHODREF(:)*PRCT(:)       &
+                                 *EXP( ICEP%XALPHA3*(PT(:)-CST%XTT)-ICEP%XBETA3 )
 #else
-    PRCHONI(:) = MIN(1000.,XHON*PRHODREF(:)*PRCT(:)       &
-                                 *EXP( XALPHA3*(PT(:)-XTT)-XBETA3 ))
+    PRCHONI(:) = MIN(1000.,ICEP%XHON*PRHODREF(:)*PRCT(:)       &
+                                 *EXP( ICEP%XALPHA3*(PT(:)-CST%XTT)-ICEP%XBETA3 ))
 #endif
   ENDWHERE
 ENDIF
@@ -116,7 +117,7 @@ ENDIF
 !*       3.4.2  compute the riming-conversion of r_c for r_i production: RCAUTI
 !
 !  ZZW(:) = 0.0
-!  ZTIMAUTIC = SQRT( XTIMAUTI*XTIMAUTC )
+!  ZTIMAUTIC = SQRT( ICEP%XTIMAUTI*ICEP%XTIMAUTC )
 !  WHERE ( (PRCT(:)>0.0) .AND. (PRIT(:)>0.0) .AND. (PRCS(:)>0.0) )
 !    ZZW(:) = MIN( PRCS(:),ZTIMAUTIC * MAX( SQRT( PRIT(:)*PRCT(:) ),0.0 ) )
 !    PRIS(:) = PRIS(:) + ZZW(:)
@@ -127,8 +128,8 @@ ENDIF
 !*       3.4.3  compute the deposition on r_s: RVDEPS
 !
 DO JL=1, KSIZE
-  ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(1)-PRVT(JL))) * & !PRVT(:)>XRTMIN(1)
-           &MAX(0., -SIGN(1., XRTMIN(5)-PRST(JL))) * & !PRST(:)>XRTMIN(5)
+  ZMASK(JL)=MAX(0., -SIGN(1., ICED%XRTMIN(1)-PRVT(JL))) * & !PRVT(:)>XRTMIN(1)
+           &MAX(0., -SIGN(1., ICED%XRTMIN(5)-PRST(JL))) * & !PRST(:)>XRTMIN(5)
            &PCOMPUTE(JL)
 ENDDO
 IF(LDSOFT) THEN
@@ -139,15 +140,15 @@ ELSE
   PRVDEPS(:) = 0.
   WHERE(ZMASK(:)==1.)
     PRVDEPS(:) = ( PSSI(:)/(PRHODREF(:)*PAI(:)) ) *                               &
-                 ( X0DEPS*PLBDAS(:)**XEX0DEPS + X1DEPS*PCJ(:)*PLBDAS(:)**XEX1DEPS )
+                 ( ICEP%X0DEPS*PLBDAS(:)**ICEP%XEX0DEPS + ICEP%X1DEPS*PCJ(:)*PLBDAS(:)**ICEP%XEX1DEPS )
   END WHERE
 ENDIF
 !
 !*       3.4.4  compute the aggregation on r_s: RIAGGS
 !
 DO JL=1, KSIZE
-  ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(4)-PRIT(JL))) * & ! PRIT(:)>XRTMIN(4)
-           &MAX(0., -SIGN(1., XRTMIN(5)-PRST(JL))) * & ! PRST(:)>XRTMIN(5)
+  ZMASK(JL)=MAX(0., -SIGN(1., ICED%XRTMIN(4)-PRIT(JL))) * & ! PRIT(:)>XRTMIN(4)
+           &MAX(0., -SIGN(1., ICED%XRTMIN(5)-PRST(JL))) * & ! PRST(:)>XRTMIN(5)
            &PCOMPUTE(JL)
 ENDDO
 IF(LDSOFT) THEN
@@ -157,17 +158,17 @@ IF(LDSOFT) THEN
 ELSE
   PRIAGGS(:) = 0.
   WHERE(ZMASK(:)==1)
-    PRIAGGS(:) = XFIAGGS * EXP( XCOLEXIS*(PT(:)-XTT) ) &
+    PRIAGGS(:) = ICEP%XFIAGGS * EXP( ICEP%XCOLEXIS*(PT(:)-CST%XTT) ) &
                          * PRIT(:)                      &
-                         * PLBDAS(:)**XEXIAGGS          &
-                         * PRHODREF(:)**(-XCEXVT)
+                         * PLBDAS(:)**ICEP%XEXIAGGS          &
+                         * PRHODREF(:)**(-ICED%XCEXVT)
   END WHERE
 ENDIF
 !
 !*       3.4.5  compute the autoconversion of r_i for r_s production: RIAUTS
 !
 DO JL=1, KSIZE
-  ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(4)-PHLI_HRI(JL))) * & ! PHLI_HRI(:)>XRTMIN(4)
+  ZMASK(JL)=MAX(0., -SIGN(1., ICED%XRTMIN(4)-PHLI_HRI(JL))) * & ! PHLI_HRI(:)>XRTMIN(4)
            &MAX(0., -SIGN(1., 1.E-20-PHLI_HCF(JL))) * & ! PHLI_HCF(:) .GT. 1.E-20
            &PCOMPUTE(JL)
 ENDDO
@@ -177,10 +178,10 @@ IF(LDSOFT) THEN
   ENDDO
 ELSE
   PRIAUTS(:) = 0.
-  !ZCRIAUTI(:)=MIN(XCRIAUTI,10**(0.06*(PT(:)-XTT)-3.5))
-  ZCRIAUTI(:)=MIN(XCRIAUTI,10**(XACRIAUTI*(PT(:)-XTT)+XBCRIAUTI))
+  !ZCRIAUTI(:)=MIN(ICEP%XCRIAUTI,10**(0.06*(PT(:)-CST%XTT)-3.5))
+  ZCRIAUTI(:)=MIN(ICEP%XCRIAUTI,10**(ICEP%XACRIAUTI*(PT(:)-CST%XTT)+ICEP%XBCRIAUTI))
   WHERE(ZMASK(:)==1.)
-    PRIAUTS(:) = XTIMAUTI * EXP( XTEXAUTI*(PT(:)-XTT) ) &
+    PRIAUTS(:) = ICEP%XTIMAUTI * EXP( ICEP%XTEXAUTI*(PT(:)-CST%XTT) ) &
                           * MAX( PHLI_HRI(:)/PHLI_HCF(:)-ZCRIAUTI(:),0.0 )
     PRIAUTS(:) = PHLI_HCF(:)*PRIAUTS(:)
   END WHERE
@@ -190,8 +191,8 @@ ENDIF
 !
 !
 DO JL=1, KSIZE
-  ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(1)-PRVT(JL))) * & ! PRVT(:)>XRTMIN(1)
-           &MAX(0., -SIGN(1., XRTMIN(6)-PRGT(JL))) * & ! PRGT(:)>XRTMIN(6)
+  ZMASK(JL)=MAX(0., -SIGN(1., ICED%XRTMIN(1)-PRVT(JL))) * & ! PRVT(:)>XRTMIN(1)
+           &MAX(0., -SIGN(1., ICED%XRTMIN(6)-PRGT(JL))) * & ! PRGT(:)>XRTMIN(6)
            &PCOMPUTE(JL)
 ENDDO
 IF(LDSOFT) THEN
@@ -202,7 +203,7 @@ ELSE
   PRVDEPG(:) = 0.
   WHERE(ZMASK(:)==1.)
     PRVDEPG(:) = ( PSSI(:)/(PRHODREF(:)*PAI(:)) ) *                               &
-                 ( X0DEPG*PLBDAG(:)**XEX0DEPG + X1DEPG*PCJ(:)*PLBDAG(:)**XEX1DEPG )
+                 ( ICEP%X0DEPG*PLBDAG(:)**ICEP%XEX0DEPG + ICEP%X1DEPG*PCJ(:)*PLBDAG(:)**ICEP%XEX1DEPG )
   END WHERE
 ENDIF
 DO JL=1, KSIZE
diff --git a/src/common/micro/mode_ice4_tendencies.F90 b/src/common/micro/mode_ice4_tendencies.F90
index b07aaebebe7564db43f285b570079b085786d7a4..a81e92979cf90486003d0a898844f18e65094935 100644
--- a/src/common/micro/mode_ice4_tendencies.F90
+++ b/src/common/micro/mode_ice4_tendencies.F90
@@ -6,7 +6,7 @@
 MODULE MODE_ICE4_TENDENCIES
 IMPLICIT NONE
 CONTAINS
-SUBROUTINE ICE4_TENDENCIES(D, CST, PARAMI, ICEP, ICED, KPROMA, KSIZE, &
+SUBROUTINE ICE4_TENDENCIES(D, CST, PARAMI, ICEP, ICED, BUCONF, KPROMA, KSIZE, &
                           &KRR, ODSOFT, PCOMPUTE, &
                           &OWARM, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, &
                           &HSUBG_AUCV_RC, HSUBG_AUCV_RI, HSUBG_PR_PDF, &
@@ -47,7 +47,7 @@ SUBROUTINE ICE4_TENDENCIES(D, CST, PARAMI, ICEP, ICED, KPROMA, KSIZE, &
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_BUDGET,    ONLY : LBU_ENABLE
+USE MODD_BUDGET,         ONLY: TBUDGETCONF_t
 USE MODD_DIMPHYEX,       ONLY: DIMPHYEX_t
 USE MODE_MSG,            ONLY: PRINT_MSG, NVERB_FATAL
 USE MODD_CST,            ONLY: CST_t
@@ -89,6 +89,7 @@ TYPE(CST_t),              INTENT(IN)    :: CST
 TYPE(PARAM_ICE_t),        INTENT(IN)    :: PARAMI
 TYPE(RAIN_ICE_PARAM_t),   INTENT(IN)    :: ICEP
 TYPE(RAIN_ICE_DESCR_t),   INTENT(IN)    :: ICED
+TYPE(TBUDGETCONF_t),      INTENT(IN)    :: BUCONF
 INTEGER,                      INTENT(IN)    :: KPROMA, KSIZE
 INTEGER,                      INTENT(IN)    :: KRR
 LOGICAL,                      INTENT(IN)    :: ODSOFT
@@ -214,7 +215,7 @@ ELSE
   !               --------------------------------------
 !DIR$ VECTOR ALWAYS
   DO CONCURRENT (JL=1:KSIZE)
-    CALL ICE4_NUCLEATION_ELEM(LLCOMPUTE(JL), &
+    CALL ICE4_NUCLEATION_ELEM(CST, PARAMI, ICEP, ICED, LLCOMPUTE(JL), &
                      ZVART(JL,ITH), PPRES(JL), PRHODREF(JL), PEXN(JL), PLSFACT(JL), ZT(JL), &
                      ZVART(JL,IRV), &
                      PCIT(JL), PRVHENI_MR(JL))
@@ -228,7 +229,7 @@ ELSE
   !
   !*       3.3     compute the spontaneous freezing source: RRHONG
   !
-  CALL ICE4_RRHONG(KSIZE, PCOMPUTE, &
+  CALL ICE4_RRHONG(CST, PARAMI, ICED, KSIZE, PCOMPUTE, &
                   &PEXN, PLVFACT, PLSFACT, &
                   &ZT, ZVART(:,IRR), &
                   &ZVART(:,ITH), &
@@ -242,7 +243,7 @@ ELSE
   !
   !*       7.1    cloud ice melting
   !
-  CALL ICE4_RIMLTC(KSIZE, PCOMPUTE, &
+  CALL ICE4_RIMLTC(CST, PARAMI, KSIZE, PCOMPUTE, &
                   &PEXN, PLVFACT, PLSFACT, &
                   &ZT, &
                   &ZVART(:,ITH), ZVART(:,IRI), &
@@ -261,7 +262,7 @@ ELSE
     WHERE(ZVART(1:KSIZE,IRS)>0.)
       ZLBDAS(1:KSIZE)  = MIN(ICED%XLBDAS_MAX, ICED%XLBS*(PRHODREF(1:KSIZE)*MAX(ZVART(1:KSIZE,IRS), ICED%XRTMIN(5)))**ICED%XLBEXS)
     END WHERE
-    CALL ICE4_RSRIMCG_OLD(KSIZE, ODSOFT, LLCOMPUTE, &
+    CALL ICE4_RSRIMCG_OLD(CST, ICEP, ICED, KSIZE, ODSOFT, LLCOMPUTE, &
                          &PRHODREF, &
                          &ZLBDAS, &
                          &ZT, ZVART(:,IRC), ZVART(:,IRS), &
@@ -309,7 +310,7 @@ ELSE
 ENDIF ! ODSOFT
 !
 !Cloud water split between high and low content part is done here
-CALL ICE4_COMPUTE_PDF(KSIZE, HSUBG_AUCV_RC, HSUBG_AUCV_RI, HSUBG_PR_PDF,&
+CALL ICE4_COMPUTE_PDF(CST, ICEP, ICED, KSIZE, HSUBG_AUCV_RC, HSUBG_AUCV_RI, HSUBG_PR_PDF,&
                       PRHODREF, ZVART(:,IRC), ZVART(:,IRI), PCF, ZT, PSIGMA_RC, &
                       PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC, &
                       PHLI_HCF, PHLI_LCF, PHLI_HRI, PHLI_LRI, ZRAINFR)
@@ -383,7 +384,7 @@ DO JL=1, KSIZE
 ENDDO
 !
 !
-CALL ICE4_SLOW(KSIZE, ODSOFT, PCOMPUTE, PRHODREF, ZT, &
+CALL ICE4_SLOW(CST, ICEP, ICED, KSIZE, ODSOFT, PCOMPUTE, PRHODREF, ZT, &
               &PSSI, PLVFACT, PLSFACT, &
               &ZVART(:,IRV), ZVART(:,IRC), ZVART(:,IRI), ZVART(:,IRS), ZVART(:,IRG), &
               &ZLBDAS, ZLBDAG, &
@@ -400,7 +401,7 @@ CALL ICE4_SLOW(KSIZE, ODSOFT, PCOMPUTE, PRHODREF, ZT, &
 !
 IF(OWARM) THEN    !  Check if the formation of the raindrops by the slow
                   !  warm processes is allowed
-  CALL ICE4_WARM(KSIZE, ODSOFT, PCOMPUTE, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, &
+  CALL ICE4_WARM(CST, ICEP, ICED, KSIZE, ODSOFT, PCOMPUTE, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, &
                 &PRHODREF, PLVFACT, ZT, PPRES, ZVART(:,ITH),&
                 &ZLBDAR, ZLBDAR_RF, ZKA, ZDV, ZCJ, &
                 &PHLC_LCF, PHLC_HCF, PHLC_LRC, PHLC_HRC, &
@@ -420,7 +421,7 @@ END IF
 !*       4.     COMPUTES THE FAST COLD PROCESS SOURCES FOR r_s
 !               ----------------------------------------------
 !
-CALL ICE4_FAST_RS(KPROMA, KSIZE, ODSOFT, PCOMPUTE, &
+CALL ICE4_FAST_RS(CST, PARAMI, ICEP, ICED, KPROMA, KSIZE, ODSOFT, PCOMPUTE, &
                  &PRHODREF, PLVFACT, PLSFACT, PPRES, &
                  &ZDV, ZKA, ZCJ, &
                  &ZLBDAR, ZLBDAS, &
@@ -443,7 +444,7 @@ DO JL=1, KSIZE
            & PRSACCRG(JL) + PRCRIMSG(JL) + PRSRIMCG(JL)
   ZRGSI_MR(JL) = PRRHONG_MR(JL) + PRSRIMCG_MR(JL)
 ENDDO
-CALL ICE4_FAST_RG(KPROMA, KSIZE, ODSOFT, PCOMPUTE, KRR, &
+CALL ICE4_FAST_RG(CST, PARAMI, ICEP, ICED, KPROMA, KSIZE, ODSOFT, PCOMPUTE, KRR, &
                  &PRHODREF, PLVFACT, PLSFACT, PPRES, &
                  &ZDV, ZKA, ZCJ, PCIT, &
                  &ZLBDAR, ZLBDAS, ZLBDAG, &
@@ -462,7 +463,7 @@ CALL ICE4_FAST_RG(KPROMA, KSIZE, ODSOFT, PCOMPUTE, KRR, &
 !               ----------------------------------------------
 !
 IF (KRR==7) THEN
-  CALL ICE4_FAST_RH(KPROMA, KSIZE, ODSOFT, PCOMPUTE, ZWETG, &
+  CALL ICE4_FAST_RH(CST, PARAMI, ICEP, ICED, KPROMA, KSIZE, ODSOFT, PCOMPUTE, ZWETG, &
                    &PRHODREF, PLVFACT, PLSFACT, PPRES, &
                    &ZDV, ZKA, ZCJ, &
                    &ZLBDAS, ZLBDAG, ZLBDAR, ZLBDAH, &
@@ -471,7 +472,7 @@ IF (KRR==7) THEN
                    &PRCDRYH, PRIDRYH, PRSDRYH, PRRDRYH, PRGDRYH, PRDRYHG, PRHMLTR, &
                    &PRH_TEND, &
                    &PA(:,ITH), PA(:,IRC), PA(:,IRR), PA(:,IRI), PA(:,IRS), PA(:,IRG), PA(:,IRH))
-ELSEIF (LBU_ENABLE) THEN
+ELSEIF (BUCONF%LBU_ENABLE) THEN
   PRCWETH(:)=0.
   PRIWETH(:)=0.
   PRSWETH(:)=0.
@@ -492,7 +493,7 @@ END IF
 !*       7.     COMPUTES SPECIFIC SOURCES OF THE WARM AND COLD CLOUDY SPECIES
 !               -------------------------------------------------------------
 !
-CALL ICE4_FAST_RI(KSIZE, ODSOFT, PCOMPUTE, &
+CALL ICE4_FAST_RI(ICEP, ICED, KSIZE, ODSOFT, PCOMPUTE, &
                  &PRHODREF, PLVFACT, PLSFACT, &
                  &ZAI, ZCJ, PCIT, &
                  &PSSI, &
diff --git a/src/common/micro/mode_ice4_warm.F90 b/src/common/micro/mode_ice4_warm.F90
index 8c844f09292f070d1fa220b6c3df93268549b5bc..0e9372274d3bb99023ea74bb558fe2dfd0906364 100644
--- a/src/common/micro/mode_ice4_warm.F90
+++ b/src/common/micro/mode_ice4_warm.F90
@@ -6,7 +6,7 @@
 MODULE MODE_ICE4_WARM
 IMPLICIT NONE
 CONTAINS
-SUBROUTINE ICE4_WARM(KSIZE, LDSOFT, PCOMPUTE, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, &
+SUBROUTINE ICE4_WARM(CST, ICEP, ICED, KSIZE, LDSOFT, PCOMPUTE, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, &
                     &PRHODREF, PLVFACT, PT, PPRES, PTHT, &
                     &PLBDAR, PLBDAR_RF, PKA, PDV, PCJ, &
                     &PHLC_LCF, PHLC_HCF, PHLC_LRC, PHLC_HRC, &
@@ -32,9 +32,9 @@ SUBROUTINE ICE4_WARM(KSIZE, LDSOFT, PCOMPUTE, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, &
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_CST,            ONLY: XALPW, XBETAW, XCL, XCPD, XCPV, XGAMW, XLVTT, XMD, XMV, XRV, XTT, XEPSILO
-USE MODD_RAIN_ICE_DESCR, ONLY: XCEXVT, XRTMIN
-USE MODD_RAIN_ICE_PARAM, ONLY: X0EVAR, X1EVAR, XCRIAUTC, XEX0EVAR, XEX1EVAR, XEXCACCR, XFCACCR, XTIMAUTC
+USE MODD_CST,            ONLY: CST_t
+USE MODD_RAIN_ICE_DESCR, ONLY: RAIN_ICE_DESCR_t
+USE MODD_RAIN_ICE_PARAM, ONLY: RAIN_ICE_PARAM_t
 !
 USE MODE_MSG
 USE PARKIND1, ONLY : JPRB
@@ -44,6 +44,9 @@ IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
+TYPE(CST_t),              INTENT(IN)    :: CST
+TYPE(RAIN_ICE_PARAM_t),   INTENT(IN)    :: ICEP
+TYPE(RAIN_ICE_DESCR_t),   INTENT(IN)    :: ICED
 INTEGER,                      INTENT(IN)    :: KSIZE
 LOGICAL,                      INTENT(IN)    :: LDSOFT
 REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PCOMPUTE
@@ -94,7 +97,7 @@ IF (LHOOK) CALL DR_HOOK('ICE4_WARM', 0, ZHOOK_HANDLE)
 !*       4.2    compute the autoconversion of r_c for r_r production: RCAUTR
 !
 DO JL=1, KSIZE
-  ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(2)-PHLC_HRC(JL))) * & ! PHLC_HRC(:)>XRTMIN(2)
+  ZMASK(JL)=MAX(0., -SIGN(1., ICED%XRTMIN(2)-PHLC_HRC(JL))) * & ! PHLC_HRC(:)>XRTMIN(2)
 #ifdef REPRO48
            &MAX(0., -SIGN(1., -PHLC_HCF(JL))) * & ! PHLC_HCF(:) .GT. 0.
 #else
@@ -109,7 +112,7 @@ IF(LDSOFT) THEN
 ELSE
   PRCAUTR(:) = 0.
   WHERE(ZMASK(:)==1.)
-    PRCAUTR(:) = XTIMAUTC*MAX(PHLC_HRC(:)/PHLC_HCF(:) - XCRIAUTC/PRHODREF(:), 0.0)
+    PRCAUTR(:) = ICEP%XTIMAUTC*MAX(PHLC_HRC(:)/PHLC_HCF(:) - ICEP%XCRIAUTC/PRHODREF(:), 0.0)
     PRCAUTR(:) = PHLC_HCF(:)*PRCAUTR(:)
   END WHERE
 ENDIF
@@ -120,8 +123,8 @@ ENDIF
 IF (HSUBG_RC_RR_ACCR=='NONE') THEN
   !CLoud water and rain are diluted over the grid box
   DO JL=1, KSIZE
-    ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(2)-PRCT(JL))) * & ! PRCT(:)>XRTMIN(2)
-             &MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JL))) * & ! PRRT(:)>XRTMIN(3)
+    ZMASK(JL)=MAX(0., -SIGN(1., ICED%XRTMIN(2)-PRCT(JL))) * & ! PRCT(:)>XRTMIN(2)
+             &MAX(0., -SIGN(1., ICED%XRTMIN(3)-PRRT(JL))) * & ! PRRT(:)>XRTMIN(3)
              &PCOMPUTE(JL)
   ENDDO
   IF(LDSOFT) THEN
@@ -131,9 +134,9 @@ IF (HSUBG_RC_RR_ACCR=='NONE') THEN
   ELSE
     PRCACCR(:) = 0.
     WHERE(ZMASK(:)==1.)
-      PRCACCR(:) = XFCACCR * PRCT(:)                &
-                 * PLBDAR(:)**XEXCACCR    &
-                 * PRHODREF(:)**(-XCEXVT)
+      PRCACCR(:) = ICEP%XFCACCR * PRCT(:)                &
+                 * PLBDAR(:)**ICEP%XEXCACCR    &
+                 * PRHODREF(:)**(-ICED%XCEXVT)
     END WHERE
   ENDIF
 
@@ -146,18 +149,18 @@ ELSEIF (HSUBG_RC_RR_ACCR=='PRFR') THEN
   ! if PRF>PCF (rain is falling in cloud and in clear sky): PCF-PHLC_HCF
   ! => min(PCF, PRF)-PHLC_HCF
   DO JL=1, KSIZE
-    ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(2)-PRCT(JL))) * & ! PRCT(:)>XRTMIN(2)
-             &MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JL))) * & ! PRRT(:)>XRTMIN(3)
+    ZMASK(JL)=MAX(0., -SIGN(1., ICED%XRTMIN(2)-PRCT(JL))) * & ! PRCT(:)>XRTMIN(2)
+             &MAX(0., -SIGN(1., ICED%XRTMIN(3)-PRRT(JL))) * & ! PRRT(:)>XRTMIN(3)
              &PCOMPUTE(JL)
     ZMASK1(JL)=ZMASK(JL) * &
-              &MAX(0., -SIGN(1., XRTMIN(2)-PHLC_HRC(JL))) * & ! PHLC_HRC(:)>XRTMIN(2)
+              &MAX(0., -SIGN(1., ICED%XRTMIN(2)-PHLC_HRC(JL))) * & ! PHLC_HRC(:)>XRTMIN(2)
 #ifdef REPRO48
               &MAX(0., -SIGN(1., -PHLC_HCF(JL))) ! PHLC_HCF(:)>0.
 #else
               &MAX(0., -SIGN(1., 1.E-20-PHLC_HCF(JL))) ! PHLC_HCF(:)>1.E-20
 #endif
     ZMASK2(JL)=ZMASK(JL) * &
-              &MAX(0., -SIGN(1., XRTMIN(2)-PHLC_LRC(JL))) * & ! PHLC_LRC(:)>XRTMIN(2)
+              &MAX(0., -SIGN(1., ICED%XRTMIN(2)-PHLC_LRC(JL))) * & ! PHLC_LRC(:)>XRTMIN(2)
 #ifdef REPRO48
               &MAX(0., -SIGN(1., -PHLC_LCF(JL))) ! PHLC_LCF(:)>0.
 #else
@@ -172,16 +175,16 @@ ELSEIF (HSUBG_RC_RR_ACCR=='PRFR') THEN
     PRCACCR(:)=0.
     WHERE(ZMASK1(:)==1.)
       !Accretion due to rain falling in high cloud content
-      PRCACCR(:) = XFCACCR * ( PHLC_HRC(:)/PHLC_HCF(:) )     &
-             * PLBDAR_RF(:)**XEXCACCR &
-             * PRHODREF(:)**(-XCEXVT) &
+      PRCACCR(:) = ICEP%XFCACCR * ( PHLC_HRC(:)/PHLC_HCF(:) )     &
+             * PLBDAR_RF(:)**ICEP%XEXCACCR &
+             * PRHODREF(:)**(-ICED%XCEXVT) &
              * PHLC_HCF
     END WHERE
     WHERE(ZMASK2(:)==1.)
       !We add acrretion due to rain falling in low cloud content
-      PRCACCR(:) = PRCACCR(:) + XFCACCR * ( PHLC_LRC(:)/PHLC_LCF(:) )     &
-                      * PLBDAR_RF(:)**XEXCACCR &
-                      * PRHODREF(:)**(-XCEXVT) &
+      PRCACCR(:) = PRCACCR(:) + ICEP%XFCACCR * ( PHLC_LRC(:)/PHLC_LCF(:) )     &
+                      * PLBDAR_RF(:)**ICEP%XEXCACCR &
+                      * PRHODREF(:)**(-ICED%XCEXVT) &
                       * (MIN(PCF(:), PRF(:))-PHLC_HCF(:))
     END WHERE
   ENDIF
@@ -193,8 +196,8 @@ ENDIF
 !
 IF (HSUBG_RR_EVAP=='NONE') THEN
   DO JL=1, KSIZE
-    ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JL))) * & ! PRRT(:)>XRTMIN(3)
-             &MAX(0., SIGN(1., XRTMIN(2)-PRCT(JL))) * & ! PRCT(:)<=XRTMIN(2)
+    ZMASK(JL)=MAX(0., -SIGN(1., ICED%XRTMIN(3)-PRRT(JL))) * & ! PRRT(:)>XRTMIN(3)
+             &MAX(0., SIGN(1., ICED%XRTMIN(2)-PRCT(JL))) * & ! PRCT(:)<=XRTMIN(2)
              &PCOMPUTE(JL)
   ENDDO
   IF(LDSOFT) THEN
@@ -205,13 +208,13 @@ IF (HSUBG_RR_EVAP=='NONE') THEN
     PRREVAV(:) = 0.
     !Evaporation only when there's no cloud (RC must be 0)
     WHERE(ZMASK(:)==1.)
-      PRREVAV(:)  = EXP( XALPW - XBETAW/PT(:) - XGAMW*ALOG(PT(:) ) ) ! es_w
-      ZUSW(:) = 1.0 - PRVT(:)*( PPRES(:)-PRREVAV(:) ) / ( XEPSILO * PRREVAV(:) )
+      PRREVAV(:)  = EXP( CST%XALPW - CST%XBETAW/PT(:) - CST%XGAMW*ALOG(PT(:) ) ) ! es_w
+      ZUSW(:) = 1.0 - PRVT(:)*( PPRES(:)-PRREVAV(:) ) / ( CST%XEPSILO * PRREVAV(:) )
                                                     ! Undersaturation over water
-      PRREVAV(:) = ( XLVTT+(XCPV-XCL)*(PT(:)-XTT) )**2 / ( PKA(:)*XRV*PT(:)**2 ) &
-           + ( XRV*PT(:) ) / ( PDV(:)*PRREVAV(:) )
+      PRREVAV(:) = ( CST%XLVTT+(CST%XCPV-CST%XCL)*(PT(:)-CST%XTT) )**2 / ( PKA(:)*CST%XRV*PT(:)**2 ) &
+           + ( CST%XRV*PT(:) ) / ( PDV(:)*PRREVAV(:) )
       PRREVAV(:) = ( MAX( 0.0,ZUSW(:) )/(PRHODREF(:)*PRREVAV(:)) ) *      &
-        ( X0EVAR*PLBDAR(:)**XEX0EVAR+X1EVAR*PCJ(:)*PLBDAR(:)**XEX1EVAR )
+        ( ICEP%X0EVAR*PLBDAR(:)**ICEP%XEX0EVAR+ICEP%X1EVAR*PCJ(:)*PLBDAR(:)**ICEP%XEX1EVAR )
     END WHERE
   ENDIF
 
@@ -234,7 +237,7 @@ ELSEIF (HSUBG_RR_EVAP=='CLFR' .OR. HSUBG_RR_EVAP=='PRFR') THEN
   !et plusieurs versions (comme actuellement, en ciel clair, en ciel nuageux) de PKA, PDV, PCJ dans rain_ice
   !On utiliserait la bonne version suivant l'option NONE, CLFR... dans l'évaporation et ailleurs
   DO JL=1, KSIZE
-    ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JL))) * & ! PRRT(:)>XRTMIN(3)
+    ZMASK(JL)=MAX(0., -SIGN(1., ICED%XRTMIN(3)-PRRT(JL))) * & ! PRRT(:)>XRTMIN(3)
              &MAX(0., -SIGN(1., PCF(JL)-ZZW4(JL))) * & ! ZZW4(:) > PCF(:)
              &PCOMPUTE(JL)
   ENDDO
@@ -249,22 +252,22 @@ ELSEIF (HSUBG_RR_EVAP=='CLFR' .OR. HSUBG_RR_EVAP=='PRFR') THEN
       ! Bechtold et al. 1993
       !
       ! T_l
-      ZTHLT(:) = PTHT(:) - XLVTT*PTHT(:)/XCPD/PT(:)*PRCT(:)
+      ZTHLT(:) = PTHT(:) - CST%XLVTT*PTHT(:)/CST%XCPD/PT(:)*PRCT(:)
       !
       ! T^u = T_l = theta_l * (T/theta)
       ZZW2(:) =  ZTHLT(:) * PT(:) / PTHT(:)
       !
       ! es_w with new T^u
-      PRREVAV(:)  = EXP( XALPW - XBETAW/ZZW2(:) - XGAMW*ALOG(ZZW2(:) ) )
+      PRREVAV(:)  = EXP( CST%XALPW - CST%XBETAW/ZZW2(:) - CST%XGAMW*ALOG(ZZW2(:) ) )
       !
       ! S, Undersaturation over water (with new theta^u)
-      ZUSW(:) = 1.0 - PRVT(:)*( PPRES(:)-PRREVAV(:) ) / ( XEPSILO * PRREVAV(:) )
+      ZUSW(:) = 1.0 - PRVT(:)*( PPRES(:)-PRREVAV(:) ) / ( CST%XEPSILO * PRREVAV(:) )
       !
-      PRREVAV(:) = ( XLVTT+(XCPV-XCL)*(ZZW2(:)-XTT) )**2 / ( PKA(:)*XRV*ZZW2(:)**2 ) &
-             + ( XRV*ZZW2(:) ) / ( PDV(:)*PRREVAV(:) )
+      PRREVAV(:) = ( CST%XLVTT+(CST%XCPV-CST%XCL)*(ZZW2(:)-CST%XTT) )**2 / ( PKA(:)*CST%XRV*ZZW2(:)**2 ) &
+             + ( CST%XRV*ZZW2(:) ) / ( PDV(:)*PRREVAV(:) )
       !
       PRREVAV(:) = MAX( 0.0,ZUSW(:) )/(PRHODREF(:)*PRREVAV(:))  *      &
-             ( X0EVAR*ZZW3(:)**XEX0EVAR+X1EVAR*PCJ(:)*ZZW3(:)**XEX1EVAR )
+             ( ICEP%X0EVAR*ZZW3(:)**ICEP%XEX0EVAR+ICEP%X1EVAR*PCJ(:)*ZZW3(:)**ICEP%XEX1EVAR )
       !
       PRREVAV(:) = PRREVAV(:)*(ZZW4(:)-PCF(:))
     END WHERE
diff --git a/src/common/micro/rain_ice.F90 b/src/common/micro/rain_ice.F90
index 24b1bd5a6e297c6971bd7f1b89e92a1bc4a29922..190701ef6519d0260d94a8a19d8af7fa97f883a7 100644
--- a/src/common/micro/rain_ice.F90
+++ b/src/common/micro/rain_ice.F90
@@ -863,7 +863,7 @@ IF (KSIZE > 0) THEN
         !***       4.1 Tendencies computation
         !
         ! Tendencies are *really* computed when LSOFT==.FALSE. and only adjusted otherwise
-    CALL ICE4_TENDENCIES(D, CST, PARAMI, ICEP, ICED, &
+    CALL ICE4_TENDENCIES(D, CST, PARAMI, ICEP, ICED, BUCONF, &
                         &KPROMA, IMICRO, &
                         &KRR, LSOFT, ZCOMPUTE, &
                         &OWARM, PARAMI%CSUBG_RC_RR_ACCR, PARAMI%CSUBG_RR_EVAP, &
@@ -1103,7 +1103,7 @@ DO JK=D%NKTB,D%NKTE
       IF (.NOT. ODMICRO(JI, JJ, JK)) THEN
         ZW0D=ZZ_LSFACT(JI, JJ, JK)/PEXN(JI, JJ, JK)
       ENDIF
-      CALL ICE4_NUCLEATION_ELEM(.NOT. ODMICRO(JI, JJ, JK), &
+      CALL ICE4_NUCLEATION_ELEM(CST, PARAMI, ICEP, ICED, .NOT. ODMICRO(JI, JJ, JK), &
                                 PTHT(JI, JJ, JK), PPABST(JI, JJ, JK), PRHODREF(JI, JJ, JK), &
                                 PEXN(JI, JJ, JK), ZW0D, ZT(JI, JJ, JK), &
                                 PRVT(JI, JJ, JK), &