From 5c82b4ce0cfd4bf1d1908424d355d19b87e84063 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Riette?= <sebastien.riette@meteo.fr>
Date: Wed, 24 Nov 2021 16:23:45 +0100
Subject: [PATCH] =?UTF-8?q?S=C3=A9bastien=2024/11/2021=20Merge=20AROME->CO?=
 =?UTF-8?q?MMON=20fast=5Frh?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/common/micro/mode_ice4_fast_rh.F90 | 171 ++++---
 src/common/micro/mode_ice4_warm.F90    |  12 +
 src/mesonh/micro/ice4_fast_rh.f90      | 593 -------------------------
 src/mesonh/micro/ice4_slow.f90         | 263 -----------
 4 files changed, 113 insertions(+), 926 deletions(-)
 delete mode 100644 src/mesonh/micro/ice4_fast_rh.f90
 delete mode 100644 src/mesonh/micro/ice4_slow.f90

diff --git a/src/common/micro/mode_ice4_fast_rh.F90 b/src/common/micro/mode_ice4_fast_rh.F90
index b45cd8fe1..dc6ed246c 100644
--- a/src/common/micro/mode_ice4_fast_rh.F90
+++ b/src/common/micro/mode_ice4_fast_rh.F90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2020 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -26,16 +26,25 @@ SUBROUTINE ICE4_FAST_RH(KPROMA,KSIZE, LDSOFT, PCOMPUTE, PWETG, &
 !!    MODIFICATIONS
 !!    -------------
 !!
+!  P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function
+!  P. Wautelet 29/05/2019: remove PACK/UNPACK intrinsics (to get more performance and better OpenACC support)
 !!     R. El Khatib 24-Aug-2021 Optimizations
 !
 !
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_CST
-USE MODD_RAIN_ICE_PARAM
-USE MODD_RAIN_ICE_DESCR
-USE MODD_PARAM_ICE, ONLY : LEVLIMIT, LNULLWETH, LWETHPOST, LCONVHG
+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 PARKIND1, ONLY : JPRB
 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !
@@ -66,17 +75,17 @@ REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRIT     ! Pristine ice m.r. at t
 REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRST     ! Snow/aggregate m.r. at t
 REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRGT     ! Graupel m.r. at t
 REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRHT     ! Hail m.r. at t
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PRCWETH  ! Dry growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PRIWETH  ! Dry growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PRSWETH  ! Dry growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PRGWETH  ! Dry growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PRRWETH  ! Dry growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PRCDRYH  ! Wet growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PRIDRYH  ! Wet growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PRSDRYH  ! Wet growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PRRDRYH  ! Wet growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PRGDRYH  ! Wet growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PRDRYHG  ! Conversion of hailstone into graupel
+REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRCWETH  ! Dry growth of hailstone
+REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRIWETH  ! Dry growth of hailstone
+REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRSWETH  ! Dry growth of hailstone
+REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRGWETH  ! Dry growth of hailstone
+REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRRWETH  ! Dry growth of hailstone
+REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRCDRYH  ! Wet growth of hailstone
+REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRIDRYH  ! Wet growth of hailstone
+REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRSDRYH  ! Wet growth of hailstone
+REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRRDRYH  ! Wet growth of hailstone
+REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRGDRYH  ! Wet growth of hailstone
+REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRDRYHG  ! Conversion of hailstone into graupel
 REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PRHMLTR  ! Melting of the hailstones
 REAL, DIMENSION(KPROMA, 10),  INTENT(INOUT) :: PRH_TEND ! Individual tendencies
 REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_TH
@@ -89,34 +98,23 @@ REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RH
 !
 !*       0.2  declaration of local variables
 !
+INTEGER, PARAMETER :: IRCWETH=1, IRRWETH=2, IRIDRYH=3, IRIWETH=4, IRSDRYH=5, IRSWETH=6, IRGDRYH=7, IRGWETH=8, &
+                    & IFREEZ1=9, IFREEZ2=10
 LOGICAL, DIMENSION(KSIZE) :: GWET
 REAL, DIMENSION(KSIZE) :: ZHAIL, ZWET, ZMASK, ZWETH, ZDRYH
 INTEGER :: IHAIL, IGWET
+INTEGER, DIMENSION(KSIZE) :: I1
 REAL, DIMENSION(KSIZE) :: ZVEC1, ZVEC2, ZVEC3
 INTEGER, DIMENSION(KSIZE) :: IVEC1, IVEC2
 REAL, DIMENSION(KSIZE) :: ZZW, &
                                    ZRDRYH_INIT, ZRWETH_INIT, &
                                    ZRDRYHG
 INTEGER :: JJ, JL
-INTEGER :: IRCWETH, IRRWETH, IRIDRYH, IRIWETH, IRSDRYH, IRSWETH, IRGDRYH, IRGWETH, &
-         & IFREEZ1, IFREEZ2
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 !
 !-------------------------------------------------------------------------------
 IF (LHOOK) CALL DR_HOOK('ICE4_FAST_RH',0,ZHOOK_HANDLE)
 !
-IRCWETH=1
-IRRWETH=2
-IRIDRYH=3
-IRIWETH=4
-IRSDRYH=5
-IRSWETH=6
-IRGDRYH=7
-IRGWETH=8
-IFREEZ1=9
-IFREEZ2=10
-!
-!
 !
 !*       7.2    compute the Wet and Dry growth of hail
 !
@@ -159,10 +157,18 @@ ENDIF
 !
 !*       7.2.1  accretion of aggregates on the hailstones
 !
-DO JL=1, KSIZE
-  ZWET(JL) = MAX(0., -SIGN(1., XRTMIN(7)-PRHT(JL))) * & ! WHERE(PRHT(:)>XRTMIN(7))
-            &MAX(0., -SIGN(1., XRTMIN(5)-PRST(JL))) * & ! WHERE(PRST(:)>XRTMIN(5))
-            &PCOMPUTE(JL)
+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))
+            &PCOMPUTE(JJ)
+  IF (ZWET(JJ)>0) THEN
+    IGWET = IGWET + 1
+    I1(IGWET) = JJ
+    GWET(JJ) = .TRUE.
+  ELSE
+    GWET(JJ) = .FALSE.
+  ENDIF
 ENDDO
 IF(LDSOFT) THEN
   DO JL=1, KSIZE
@@ -172,28 +178,28 @@ IF(LDSOFT) THEN
 ELSE
   PRH_TEND(:, IRSWETH)=0.
   PRH_TEND(:, IRSDRYH)=0.
-  GWET(:)=ZWET(:)==1.
-  IGWET=COUNT(GWET(:))
   IF(IGWET>0)THEN
     !
     !*       7.2.3  select the (PLBDAH,PLBDAS) couplet
     !
-    ZVEC1(1:IGWET) = PACK( PLBDAH(:),MASK=GWET(:) )
-    ZVEC2(1:IGWET) = PACK( PLBDAS(:),MASK=GWET(:) )
+    DO JJ = 1, IGWET
+      ZVEC1(JJ) = PLBDAH(I1(JJ))
+      ZVEC2(JJ) = PLBDAS(I1(JJ))
+    ENDDO
     !
     !*       7.2.4  find the next lower indice for the PLBDAG and for the PLBDAS
     !               in the geometrical set of (Lbda_h,Lbda_s) couplet use to
     !               tabulate the SWETH-kernel
     !
-    ZVEC1(1:IGWET) = MAX( 1.00001, MIN( FLOAT(NWETLBDAH)-0.00001,           &
+    ZVEC1(1:IGWET) = MAX( 1.00001, MIN( REAL(NWETLBDAH)-0.00001,           &
                           XWETINTP1H * LOG( ZVEC1(1:IGWET) ) + XWETINTP2H ) )
     IVEC1(1:IGWET) = INT( ZVEC1(1:IGWET) )
-    ZVEC1(1:IGWET) = ZVEC1(1:IGWET) - FLOAT( IVEC1(1:IGWET) )
+    ZVEC1(1:IGWET) = ZVEC1(1:IGWET) - REAL( IVEC1(1:IGWET) )
     !
-    ZVEC2(1:IGWET) = MAX( 1.00001, MIN( FLOAT(NWETLBDAS)-0.00001,           &
+    ZVEC2(1:IGWET) = MAX( 1.00001, MIN( REAL(NWETLBDAS)-0.00001,           &
                           XWETINTP1S * LOG( ZVEC2(1:IGWET) ) + XWETINTP2S ) )
     IVEC2(1:IGWET) = INT( ZVEC2(1:IGWET) )
-    ZVEC2(1:IGWET) = ZVEC2(1:IGWET) - FLOAT( IVEC2(1:IGWET) )
+    ZVEC2(1:IGWET) = ZVEC2(1:IGWET) - REAL( IVEC2(1:IGWET) )
     !
     !*       7.2.5  perform the bilinear interpolation of the normalized
     !               SWETH-kernel
@@ -206,7 +212,10 @@ ELSE
                   - XKER_SWETH(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
                                                          * (ZVEC1(JJ) - 1.0)
     END DO
-    ZZW(:) = UNPACK( VECTOR=ZVEC3(1:IGWET),MASK=GWET,FIELD=0.0 )
+    ZZW(:) = 0.
+    DO JJ = 1, IGWET
+      ZZW(I1(JJ)) = ZVEC3(JJ)
+    END DO
     !
     WHERE(GWET(1:KSIZE))
       PRH_TEND(1:KSIZE, IRSWETH)=XFSWETH*ZZW(1:KSIZE)                       & ! RSWETH
@@ -222,10 +231,18 @@ ENDIF
 !
 !*       7.2.6  accretion of graupeln on the hailstones
 !
-DO JL=1, KSIZE
-  ZWET(JL)=MAX(0., -SIGN(1., XRTMIN(7)-PRHT(JL))) * & ! WHERE(PRHT(:)>XRTMIN(7))
-          &MAX(0., -SIGN(1., XRTMIN(6)-PRGT(JL))) * & ! WHERE(PRGT(:)>XRTMIN(6))
-          &PCOMPUTE(JL)
+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))
+          &PCOMPUTE(JJ)
+  IF (ZWET(JJ)>0) THEN
+    IGWET = IGWET + 1
+    I1(IGWET) = JJ
+    GWET(JJ) = .TRUE.
+  ELSE
+    GWET(JJ) = .FALSE.
+  END IF
 ENDDO
 IF(LDSOFT) THEN
   DO JL=1, KSIZE
@@ -235,28 +252,28 @@ IF(LDSOFT) THEN
 ELSE
   PRH_TEND(:, IRGWETH)=0.
   PRH_TEND(:, IRGDRYH)=0.
-  GWET(:)=ZWET(:)==1.
-  IGWET=COUNT(GWET(:))
   IF(IGWET>0)THEN
     !
     !*       7.2.8  select the (PLBDAH,PLBDAG) couplet
     !
-    ZVEC1(1:IGWET) = PACK( PLBDAH(:),MASK=GWET(:) )
-    ZVEC2(1:IGWET) = PACK( PLBDAG(:),MASK=GWET(:) )
+    DO JJ = 1, IGWET
+      ZVEC1(JJ) = PLBDAH(I1(JJ))
+      ZVEC2(JJ) = PLBDAG(I1(JJ))
+    END DO
     !
     !*       7.2.9  find the next lower indice for the PLBDAH and for the PLBDAG
     !               in the geometrical set of (Lbda_h,Lbda_g) couplet use to
     !               tabulate the GWETH-kernel
     !
-    ZVEC1(1:IGWET) = MAX( 1.00001, MIN( FLOAT(NWETLBDAG)-0.00001,           &
+    ZVEC1(1:IGWET) = MAX( 1.00001, MIN( REAL(NWETLBDAG)-0.00001,           &
                           XWETINTP1H * LOG( ZVEC1(1:IGWET) ) + XWETINTP2H ) )
     IVEC1(1:IGWET) = INT( ZVEC1(1:IGWET) )
-    ZVEC1(1:IGWET) = ZVEC1(1:IGWET) - FLOAT( IVEC1(1:IGWET) )
+    ZVEC1(1:IGWET) = ZVEC1(1:IGWET) - REAL( IVEC1(1:IGWET) )
     !
-    ZVEC2(1:IGWET) = MAX( 1.00001, MIN( FLOAT(NWETLBDAG)-0.00001,           &
+    ZVEC2(1:IGWET) = MAX( 1.00001, MIN( REAL(NWETLBDAG)-0.00001,           &
                           XWETINTP1G * LOG( ZVEC2(1:IGWET) ) + XWETINTP2G ) )
     IVEC2(1:IGWET) = INT( ZVEC2(1:IGWET) )
-    ZVEC2(1:IGWET) = ZVEC2(1:IGWET) - FLOAT( IVEC2(1:IGWET) )
+    ZVEC2(1:IGWET) = ZVEC2(1:IGWET) - REAL( IVEC2(1:IGWET) )
     !
     !*       7.2.10 perform the bilinear interpolation of the normalized
     !               GWETH-kernel
@@ -269,7 +286,10 @@ ELSE
                    - XKER_GWETH(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
                                                         * (ZVEC1(JJ) - 1.0)
     END DO
-    ZZW(:) = UNPACK( VECTOR=ZVEC3(1:IGWET),MASK=GWET,FIELD=0.0 )
+    ZZW(:) = 0.
+    DO JJ = 1, IGWET
+      ZZW(I1(JJ)) = ZVEC3(JJ)
+    END DO
     !
     WHERE(GWET(1:KSIZE))
       PRH_TEND(1:KSIZE, IRGWETH)=XFGWETH*ZZW(1:KSIZE)                       & ! RGWETH
@@ -289,10 +309,18 @@ ENDIF
 !
 !*       7.2.11  accretion of raindrops on the hailstones
 !
-DO JL=1, KSIZE
-  ZWET(JL)=MAX(0., -SIGN(1., XRTMIN(7)-PRHT(JL))) * & ! WHERE(PRHT(:)>XRTMIN(7))
-          &MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JL))) * & ! WHERE(PRRT(:)>XRTMIN(3))
-          &PCOMPUTE(JL)
+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))
+          &PCOMPUTE(JJ)
+  IF (ZWET(JJ)>0) THEN
+    IGWET = IGWET + 1
+    I1(IGWET) = JJ
+    GWET(JJ) = .TRUE.
+  ELSE
+    GWET(JJ) = .FALSE.
+  ENDIF
 ENDDO
 IF(LDSOFT) THEN
   DO JL=1, KSIZE
@@ -300,28 +328,28 @@ IF(LDSOFT) THEN
   ENDDO
 ELSE
   PRH_TEND(:, IRRWETH)=0.
-  GWET(:)=ZWET(:)==1.
-  IGWET=COUNT(GWET(:))
   IF(IGWET>0)THEN
     !
     !*       7.2.12  select the (PLBDAH,PLBDAR) couplet
     !
-    ZVEC1(1:IGWET)=PACK(PLBDAH(:), MASK=GWET(:))
-    ZVEC2(1:IGWET)=PACK(PLBDAR(:), MASK=GWET(:))
+    DO JJ = 1, IGWET
+      ZVEC1(JJ) = PLBDAH(I1(JJ))
+      ZVEC2(JJ) = PLBDAR(I1(JJ))
+    ENDDO
     !
     !*       7.2.13 find the next lower indice for the PLBDAH and for the PLBDAR
     !               in the geometrical set of (Lbda_h,Lbda_r) couplet use to
     !               tabulate the RWETH-kernel
     !
-    ZVEC1(1:IGWET)=MAX(1.00001, MIN( FLOAT(NWETLBDAH)-0.00001,           &
+    ZVEC1(1:IGWET)=MAX(1.00001, MIN( REAL(NWETLBDAH)-0.00001,           &
                           XWETINTP1H*LOG(ZVEC1(1:IGWET))+XWETINTP2H))
     IVEC1(1:IGWET)=INT(ZVEC1(1:IGWET))
-    ZVEC1(1:IGWET)=ZVEC1(1:IGWET)-FLOAT(IVEC1(1:IGWET))
+    ZVEC1(1:IGWET)=ZVEC1(1:IGWET)-REAL(IVEC1(1:IGWET))
     !
-    ZVEC2(1:IGWET)=MAX(1.00001, MIN( FLOAT(NWETLBDAR)-0.00001,           &
+    ZVEC2(1:IGWET)=MAX(1.00001, MIN( REAL(NWETLBDAR)-0.00001,           &
                           XWETINTP1R*LOG(ZVEC2(1:IGWET))+XWETINTP2R))
     IVEC2(1:IGWET)=INT(ZVEC2(1:IGWET))
-    ZVEC2(1:IGWET)=ZVEC2(1:IGWET)-FLOAT(IVEC2(1:IGWET))
+    ZVEC2(1:IGWET)=ZVEC2(1:IGWET)-REAL(IVEC2(1:IGWET))
     !
     !*       7.2.14 perform the bilinear interpolation of the normalized
     !               RWETH-kernel
@@ -334,7 +362,10 @@ ELSE
                     - XKER_RWETH(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
                                                          *(ZVEC1(JJ) - 1.0)
     END DO
-    ZZW(:)=UNPACK(VECTOR=ZVEC3(1:IGWET), MASK=GWET, FIELD=0.)
+    ZZW(:) = 0.
+    DO JJ = 1, IGWET
+      ZZW(I1(JJ)) = ZVEC3(JJ)
+    END DO
     !
     WHERE(GWET(1:KSIZE))
       PRH_TEND(1:KSIZE, IRRWETH) = XFRWETH*ZZW(1:KSIZE)                    & ! RRWETH
@@ -417,7 +448,7 @@ ENDIF
 DO JL=1, KSIZE
   ZDRYH(JL) = ZHAIL(JL) * &
             & MAX(0., -SIGN(1., PT(JL)-XTT)) * & ! WHERE(PT(:)<XTT)
-            & MAX(0., -SIGN(1., -ZRDRYH_INIT(JL))) * & !WHERE(ZRDRYH_INIT(:)>0.)
+            & 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
diff --git a/src/common/micro/mode_ice4_warm.F90 b/src/common/micro/mode_ice4_warm.F90
index 39c43c573..8c844f092 100644
--- a/src/common/micro/mode_ice4_warm.F90
+++ b/src/common/micro/mode_ice4_warm.F90
@@ -95,7 +95,11 @@ IF (LHOOK) CALL DR_HOOK('ICE4_WARM', 0, ZHOOK_HANDLE)
 !
 DO JL=1, KSIZE
   ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(2)-PHLC_HRC(JL))) * & ! PHLC_HRC(:)>XRTMIN(2)
+#ifdef REPRO48
+           &MAX(0., -SIGN(1., -PHLC_HCF(JL))) * & ! PHLC_HCF(:) .GT. 0.
+#else
            &MAX(0., -SIGN(1., 1.E-20-PHLC_HCF(JL))) * & ! PHLC_HCF(:) .GT. 1.E-20
+#endif
            &PCOMPUTE(JL)
 ENDDO
 IF(LDSOFT) THEN
@@ -147,10 +151,18 @@ ELSEIF (HSUBG_RC_RR_ACCR=='PRFR') THEN
              &PCOMPUTE(JL)
     ZMASK1(JL)=ZMASK(JL) * &
               &MAX(0., -SIGN(1., 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)
+#ifdef REPRO48
+              &MAX(0., -SIGN(1., -PHLC_LCF(JL))) ! PHLC_LCF(:)>0.
+#else
               &MAX(0., -SIGN(1., 1.E-20-PHLC_LCF(JL))) ! PHLC_LCF(:)>1.E-20
+#endif
   ENDDO
   IF(LDSOFT) THEN
     DO JL=1, KSIZE
diff --git a/src/mesonh/micro/ice4_fast_rh.f90 b/src/mesonh/micro/ice4_fast_rh.f90
deleted file mode 100644
index fcac93748..000000000
--- a/src/mesonh/micro/ice4_fast_rh.f90
+++ /dev/null
@@ -1,593 +0,0 @@
-!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-MODULE MODI_ICE4_FAST_RH
-INTERFACE
-SUBROUTINE ICE4_FAST_RH(KSIZE, LDSOFT, PCOMPUTE, PWETG, &
-                       &PRHODREF, PLVFACT, PLSFACT, PPRES, &
-                       &PDV, PKA, PCJ, &
-                       &PLBDAS, PLBDAG, PLBDAR, PLBDAH, &
-                       &PT,  PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PRHT, &
-                       &PRCWETH, PRIWETH, PRSWETH, PRGWETH, PRRWETH, &
-                       &PRCDRYH, PRIDRYH, PRSDRYH, PRRDRYH, PRGDRYH, PRDRYHG, PRHMLTR, &
-                       &PRH_TEND, &
-                       &PA_TH, PA_RC, PA_RR, PA_RI, PA_RS, PA_RG, PA_RH)
-IMPLICIT NONE
-INTEGER,                      INTENT(IN)    :: KSIZE
-LOGICAL,                      INTENT(IN)    :: LDSOFT
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PCOMPUTE
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PWETG    ! 1. where graupel grows in wet mode, 0. elsewhere
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRHODREF ! Reference density
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PLVFACT
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PLSFACT
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PPRES    ! absolute pressure at t
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PDV      ! Diffusivity of water vapor in the air
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PKA      ! Thermal conductivity of the air
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PCJ      ! Function to compute the ventilation coefficient
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PLBDAS   ! Slope parameter of the aggregate distribution
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PLBDAG   ! Slope parameter of the graupel   distribution
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PLBDAR   ! Slope parameter of the rain      distribution
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PLBDAH   ! Slope parameter of the hail      distribution
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PT       ! Temperature
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRVT     ! Water vapor m.r. at t
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRCT     ! Cloud water m.r. at t
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRRT     ! Rain m.r. at t
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRIT     ! Pristine ice m.r. at t
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRST     ! Snow/aggregate m.r. at t
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRGT     ! Graupel m.r. at t
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRHT     ! Hail m.r. at t
-REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRCWETH  ! Dry growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRIWETH  ! Dry growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRSWETH  ! Dry growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRGWETH  ! Dry growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRRWETH  ! Dry growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRCDRYH  ! Wet growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRIDRYH  ! Wet growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRSDRYH  ! Wet growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRRDRYH  ! Wet growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRGDRYH  ! Wet growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRDRYHG  ! Conversion of hailstone into graupel
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PRHMLTR  ! Melting of the hailstones
-REAL, DIMENSION(KSIZE, 10),   INTENT(INOUT) :: PRH_TEND ! Individual tendencies
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RC
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RR
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RI
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RS
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RG
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RH
-END SUBROUTINE ICE4_FAST_RH
-END INTERFACE
-END MODULE MODI_ICE4_FAST_RH
-SUBROUTINE ICE4_FAST_RH(KSIZE, LDSOFT, PCOMPUTE, PWETG, &
-                       &PRHODREF, PLVFACT, PLSFACT, PPRES, &
-                       &PDV, PKA, PCJ, &
-                       &PLBDAS, PLBDAG, PLBDAR, PLBDAH, &
-                       &PT,  PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PRHT, &
-                       &PRCWETH, PRIWETH, PRSWETH, PRGWETH, PRRWETH, &
-                       &PRCDRYH, PRIDRYH, PRSDRYH, PRRDRYH, PRGDRYH, PRDRYHG, PRHMLTR, &
-                       &PRH_TEND, &
-                       &PA_TH, PA_RC, PA_RR, PA_RI, PA_RS, PA_RG, PA_RH)
-!!
-!!**  PURPOSE
-!!    -------
-!!      Computes the fast rh process
-!!
-!!    AUTHOR
-!!    ------
-!!      S. Riette from the splitting of rain_ice source code (nov. 2014)
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!
-!  P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function
-!  P. Wautelet 29/05/2019: remove PACK/UNPACK intrinsics (to get more performance and better OpenACC support)
-!
-!
-!*      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 MODE_MPPDB
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-INTEGER,                      INTENT(IN)    :: KSIZE
-LOGICAL,                      INTENT(IN)    :: LDSOFT
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PCOMPUTE
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PWETG    ! 1. where graupel grows in wet mode, 0. elsewhere
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRHODREF ! Reference density
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PLVFACT
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PLSFACT
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PPRES    ! absolute pressure at t
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PDV      ! Diffusivity of water vapor in the air
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PKA      ! Thermal conductivity of the air
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PCJ      ! Function to compute the ventilation coefficient
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PLBDAS   ! Slope parameter of the aggregate distribution
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PLBDAG   ! Slope parameter of the graupel   distribution
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PLBDAR   ! Slope parameter of the rain      distribution
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PLBDAH   ! Slope parameter of the hail      distribution
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PT       ! Temperature
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRVT     ! Water vapor m.r. at t
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRCT     ! Cloud water m.r. at t
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRRT     ! Rain m.r. at t
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRIT     ! Pristine ice m.r. at t
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRST     ! Snow/aggregate m.r. at t
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRGT     ! Graupel m.r. at t
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRHT     ! Hail m.r. at t
-REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRCWETH  ! Dry growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRIWETH  ! Dry growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRSWETH  ! Dry growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRGWETH  ! Dry growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRRWETH  ! Dry growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRCDRYH  ! Wet growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRIDRYH  ! Wet growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRSDRYH  ! Wet growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRRDRYH  ! Wet growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRGDRYH  ! Wet growth of hailstone
-REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRDRYHG  ! Conversion of hailstone into graupel
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PRHMLTR  ! Melting of the hailstones
-REAL, DIMENSION(KSIZE, 10),   INTENT(INOUT) :: PRH_TEND ! Individual tendencies
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RC
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RR
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RI
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RS
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RG
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RH
-!
-!*       0.2  declaration of local variables
-!
-INTEGER, PARAMETER :: IRCWETH=1, IRRWETH=2, IRIDRYH=3, IRIWETH=4, IRSDRYH=5, IRSWETH=6, IRGDRYH=7, IRGWETH=8, &
-                    & IFREEZ1=9, IFREEZ2=10
-!
-LOGICAL, DIMENSION(KSIZE) :: GWET
-REAL, DIMENSION(KSIZE) :: ZHAIL, ZWET, ZMASK, ZWETH, ZDRYH
-INTEGER :: IHAIL, IGWET
-INTEGER, DIMENSION(KSIZE) :: I1
-REAL, DIMENSION(KSIZE) :: ZVEC1, ZVEC2, ZVEC3
-INTEGER, DIMENSION(KSIZE) :: IVEC1, IVEC2
-REAL, DIMENSION(KSIZE) :: ZZW, &
-                                   ZRDRYH_INIT, ZRWETH_INIT, &
-                                   ZRDRYHG
-INTEGER :: JJ, JL
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       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))
-           &PCOMPUTE(JL)
-ENDDO
-IF(LDSOFT) THEN
-  DO JL=1, KSIZE
-    PRH_TEND(JL, IRCWETH)=ZMASK(JL) * PRH_TEND(JL, IRCWETH)
-  ENDDO
-ELSE
-  PRH_TEND(:, IRCWETH)=0.
-  WHERE(ZMASK(:)==1.)
-    ZZW(:) = PLBDAH(:)**(XCXH-XDH-2.0) * PRHODREF(:)**(-XCEXVT)
-    PRH_TEND(:, IRCWETH)=XFWETH * PRCT(:) * ZZW(:)    ! 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))
-           &PCOMPUTE(JL)
-ENDDO
-IF(LDSOFT) THEN
-  DO JL=1, KSIZE
-    PRH_TEND(JL, IRIWETH)=ZMASK(JL) * PRH_TEND(JL, IRIWETH)
-    PRH_TEND(JL, IRIDRYH)=ZMASK(JL) * PRH_TEND(JL, IRIDRYH)
-  ENDDO
-ELSE
-  PRH_TEND(:, IRIWETH)=0.
-  PRH_TEND(:, IRIDRYH)=0.
-  WHERE(ZMASK(:)==1.)
-    ZZW(:) = PLBDAH(:)**(XCXH-XDH-2.0) * PRHODREF(:)**(-XCEXVT)
-    PRH_TEND(:, IRIWETH)=XFWETH * PRIT(:) * ZZW(:)   ! RIWETH
-    PRH_TEND(:, IRIDRYH)=PRH_TEND(:, IRIWETH)*(XCOLIH*EXP(XCOLEXIH*(PT(:)-XTT)))   ! RIDRYH
-  END WHERE
-ENDIF
-
-!
-!*       7.2.1  accretion of aggregates on the hailstones
-!
-IGWET = 0
-DO JJ = 1, SIZE(GWET)
-  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))
-            &PCOMPUTE(JJ)
-  IF (ZWET(JJ)>0) THEN
-    IGWET = IGWET + 1
-    I1(IGWET) = JJ
-    GWET(JJ) = .TRUE.
-  ELSE
-    GWET(JJ) = .FALSE.
-  END IF
-END DO
-
-IF(LDSOFT) THEN
-  DO JL=1, KSIZE
-    PRH_TEND(JL, IRSWETH)=ZWET(JL) * PRH_TEND(JL, IRSWETH)
-    PRH_TEND(JL, IRSDRYH)=ZWET(JL) * PRH_TEND(JL, IRSDRYH)
-  ENDDO
-ELSE
-  PRH_TEND(:, IRSWETH)=0.
-  PRH_TEND(:, IRSDRYH)=0.
-  IF(IGWET>0)THEN
-    !
-    !*       7.2.3  select the (PLBDAH,PLBDAS) couplet
-    !
-    DO JJ = 1, IGWET
-      ZVEC1(JJ) = PLBDAH(I1(JJ))
-      ZVEC2(JJ) = PLBDAS(I1(JJ))
-    END DO
-    !
-    !*       7.2.4  find the next lower indice for the PLBDAG and for the PLBDAS
-    !               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 ) )
-    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 ) )
-    IVEC2(1:IGWET) = INT( ZVEC2(1:IGWET) )
-    ZVEC2(1:IGWET) = ZVEC2(1:IGWET) - REAL( IVEC2(1:IGWET) )
-    !
-    !*       7.2.5  perform the bilinear interpolation of the normalized
-    !               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) ) &
-                                                                 * ZVEC1(JJ) &
-                  - ( XKER_SWETH(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                  - XKER_SWETH(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
-                                                         * (ZVEC1(JJ) - 1.0)
-    END DO
-    ZZW(:) = 0.
-    DO JJ = 1, IGWET
-      ZZW(I1(JJ)) = ZVEC3(JJ)
-    END DO
-    !
-    WHERE(GWET(:))
-      PRH_TEND(:, IRSWETH)=XFSWETH*ZZW(:)                       & ! RSWETH
-                    *( PLBDAS(:)**(XCXS-XBS) )*( PLBDAH(:)**XCXH )  &
-                       *( PRHODREF(:)**(-XCEXVT-1.) )               &
-                       *( XLBSWETH1/( PLBDAH(:)**2              ) + &
-                          XLBSWETH2/( PLBDAH(:)   * PLBDAS(:)   ) + &
-                          XLBSWETH3/(               PLBDAS(:)**2) )
-      PRH_TEND(:, IRSDRYH)=PRH_TEND(:, IRSWETH)*(XCOLSH*EXP(XCOLEXSH*(PT(:)-XTT)))
-    END WHERE
-  ENDIF
-ENDIF
-!
-!*       7.2.6  accretion of graupeln on the hailstones
-!
-IGWET = 0
-DO JJ = 1, SIZE(GWET)
-  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))
-          &PCOMPUTE(JJ)
-  IF (ZWET(JJ)>0) THEN
-    IGWET = IGWET + 1
-    I1(IGWET) = JJ
-    GWET(JJ) = .TRUE.
-  ELSE
-    GWET(JJ) = .FALSE.
-  END IF
-END DO
-
-IF(LDSOFT) THEN
-  DO JL=1, KSIZE
-    PRH_TEND(JL, IRGWETH)=ZWET(JL) * PRH_TEND(JL, IRGWETH)
-    PRH_TEND(JL, IRGDRYH)=ZWET(JL) * PRH_TEND(JL, IRGDRYH)
-  ENDDO
-ELSE
-  PRH_TEND(:, IRGWETH)=0.
-  PRH_TEND(:, IRGDRYH)=0.
-  IF(IGWET>0)THEN
-    !
-    !*       7.2.8  select the (PLBDAH,PLBDAG) couplet
-    !
-    DO JJ = 1, IGWET
-      ZVEC1(JJ) = PLBDAH(I1(JJ))
-      ZVEC2(JJ) = PLBDAG(I1(JJ))
-    END DO
-    !
-    !*       7.2.9  find the next lower indice for the PLBDAH and for the PLBDAG
-    !               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 ) )
-    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 ) )
-    IVEC2(1:IGWET) = INT( ZVEC2(1:IGWET) )
-    ZVEC2(1:IGWET) = ZVEC2(1:IGWET) - REAL( IVEC2(1:IGWET) )
-    !
-    !*       7.2.10 perform the bilinear interpolation of the normalized
-    !               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) ) &
-                                                                 * ZVEC1(JJ) &
-                - (  XKER_GWETH(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                   - XKER_GWETH(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
-                                                        * (ZVEC1(JJ) - 1.0)
-    END DO
-    ZZW(:) = 0.
-    DO JJ = 1, IGWET
-      ZZW(I1(JJ)) = ZVEC3(JJ)
-    END DO
-    !
-    WHERE(GWET(:))
-      PRH_TEND(:, IRGWETH)=XFGWETH*ZZW(:)                       & ! RGWETH
-                    *( PLBDAG(:)**(XCXG-XBG) )*( PLBDAH(:)**XCXH )  &
-                       *( PRHODREF(:)**(-XCEXVT-1.) )               &
-                       *( XLBGWETH1/( PLBDAH(:)**2              ) + &
-                          XLBGWETH2/( PLBDAH(:)   * PLBDAG(:)   ) + &
-                          XLBGWETH3/(               PLBDAG(:)**2) )
-      PRH_TEND(:, IRGDRYH)=PRH_TEND(:, IRGWETH)
-    END WHERE
-    !When graupel grows in wet mode, graupel is wet (!) and collection efficiency must remain the same
-    WHERE(GWET(:) .AND. .NOT. PWETG(:)==1.)
-      PRH_TEND(:, IRGDRYH)=PRH_TEND(:, IRGDRYH)*(XCOLGH*EXP(XCOLEXGH*(PT(:)-XTT)))
-    END WHERE
-  END IF
-ENDIF
-!
-!*       7.2.11  accretion of raindrops on the hailstones
-!
-IGWET = 0
-DO JJ = 1, SIZE(GWET)
-  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))
-          &PCOMPUTE(JJ)
-  IF (ZWET(JJ)>0) THEN
-    IGWET = IGWET + 1
-    I1(IGWET) = JJ
-    GWET(JJ) = .TRUE.
-  ELSE
-    GWET(JJ) = .FALSE.
-  END IF
-END DO
-
-IF(LDSOFT) THEN
-  DO JL=1, KSIZE
-    PRH_TEND(JL, IRRWETH)=ZWET(JL) * PRH_TEND(JL, IRRWETH)
-  ENDDO
-ELSE
-  PRH_TEND(:, IRRWETH)=0.
-  IF(IGWET>0)THEN
-    !
-    !*       7.2.12  select the (PLBDAH,PLBDAR) couplet
-    !
-    DO JJ = 1, IGWET
-      ZVEC1(JJ) = PLBDAH(I1(JJ))
-      ZVEC2(JJ) = PLBDAR(I1(JJ))
-    END DO
-    !
-    !*       7.2.13 find the next lower indice for the PLBDAH and for the PLBDAR
-    !               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))
-    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))
-    IVEC2(1:IGWET)=INT(ZVEC2(1:IGWET))
-    ZVEC2(1:IGWET)=ZVEC2(1:IGWET)-REAL(IVEC2(1:IGWET))
-    !
-    !*       7.2.14 perform the bilinear interpolation of the normalized
-    !               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) ) &
-                                                                  * ZVEC1(JJ) &
-                 - (  XKER_RWETH(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                    - XKER_RWETH(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
-                                                         *(ZVEC1(JJ) - 1.0)
-    END DO
-    ZZW(:) = 0.
-    DO JJ = 1, IGWET
-      ZZW(I1(JJ)) = ZVEC3(JJ)
-    END DO
-    !
-    WHERE(GWET(:))
-      PRH_TEND(:, IRRWETH) = XFRWETH*ZZW(:)                    & ! RRWETH
-                        *( PLBDAR(:)**(-4) )*( PLBDAH(:)**XCXH ) &
-                               *( PRHODREF(:)**(-XCEXVT-1.) )   &
-                    *( XLBRWETH1/( PLBDAH(:)**2              ) + &
-                       XLBRWETH2/( PLBDAH(:)   * PLBDAR(:)   ) + &
-                       XLBRWETH3/(               PLBDAR(:)**2) )
-    END WHERE
-  ENDIF
-ENDIF
-!
-DO JL=1, KSIZE
-  ZRDRYH_INIT(JL)=PRH_TEND(JL, IRCWETH)+PRH_TEND(JL, IRIDRYH)+ &
-                 &PRH_TEND(JL, IRSDRYH)+PRH_TEND(JL, IRRWETH)+PRH_TEND(JL, IRGDRYH)
-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))
-           &PCOMPUTE(JL)
-ENDDO
-IF(LDSOFT) THEN
-  DO JL=1, KSIZE
-    PRH_TEND(JL, IFREEZ1)=ZHAIL(JL) * PRH_TEND(JL, IFREEZ1)
-    PRH_TEND(JL, IFREEZ2)=ZHAIL(JL) * PRH_TEND(JL, IFREEZ2)
-  ENDDO
-ELSE
-  DO JL=1, KSIZE
-    PRH_TEND(JL, IFREEZ1)=PRVT(JL)*PPRES(JL)/(XEPSILO+PRVT(JL)) ! Vapor pressure
-  ENDDO
-  IF(LEVLIMIT) THEN
-    WHERE(ZHAIL(:)==1.)
-      PRH_TEND(:, IFREEZ1)=MIN(PRH_TEND(:, IFREEZ1), EXP(XALPI-XBETAI/PT(:)-XGAMI*ALOG(PT(:)))) ! min(ev, es_i(T))
-    END WHERE
-  ENDIF
-  PRH_TEND(:, IFREEZ2)=0.
-  WHERE(ZHAIL(:)==1.)
-    PRH_TEND(:, IFREEZ1)=PKA(:)*(XTT-PT(:)) +                              &
-             (PDV(:)*(XLVTT+(XCPV-XCL)*(PT(:)-XTT)) &
-                           *(XESTT-PRH_TEND(:, IFREEZ1))/(XRV*PT(:))           )
-    PRH_TEND(:, IFREEZ1)=PRH_TEND(:, IFREEZ1)* ( X0DEPH*       PLBDAH(:)**XEX0DEPH +     &
-                           X1DEPH*PCJ(:)*PLBDAH(:)**XEX1DEPH )/ &
-                          ( PRHODREF(:)*(XLMTT-XCL*(XTT-PT(:))) )
-    PRH_TEND(:, IFREEZ2)=(PRHODREF(:)*(XLMTT+(XCI-XCL)*(XTT-PT(:)))   ) / &
-                          ( PRHODREF(:)*(XLMTT-XCL*(XTT-PT(:))) )
-  END WHERE
-ENDIF
-DO JL=1, KSIZE
-  !We must agregate, at least, the cold species
-  ZRWETH_INIT(JL)=ZHAIL(JL) * MAX(PRH_TEND(JL, IRIWETH)+PRH_TEND(JL, IRSWETH)+PRH_TEND(JL, IRGWETH), &
-                                 &MAX(0., PRH_TEND(JL, IFREEZ1) + &
-                                         &PRH_TEND(JL, IFREEZ2) * ( &
-                     &PRH_TEND(JL, IRIWETH)+PRH_TEND(JL, IRSWETH)+PRH_TEND(JL, IRGWETH) )))
-ENDDO
-!
-!*       7.4    Select Wet or Dry case
-!
-!Wet case
-DO JL=1, KSIZE
-  ZWETH(JL) = ZHAIL(JL) * &
-            & 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
-  DO JL=1, KSIZE
-    ZWETH(JL) = ZWETH(JL) * MAX(0., -SIGN(1., -ZRDRYH_INIT(JL))) ! WHERE(ZRDRYH_INIT(:)>0.)
-  ENDDO
-ELSE
-  DO JL=1, KSIZE
-    ZWETH(JL) = ZWETH(JL) * MAX(0., -SIGN(1., -ZRWETH_INIT(JL))) ! WHERE(ZRWETH_INIT(:)>0.)
-  ENDDO
-ENDIF
-IF(.NOT. LWETHPOST) THEN
-  DO JL=1, KSIZE
-    ZWETH(JL) = ZWETH(JL) * MAX(0., -SIGN(1., PT(JL)-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., 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
-  WHERE(ZDRYH(:)==1.)
-    ZRDRYHG(:)=ZRDRYH_INIT(:)*ZRWETH_INIT(:)/(ZRDRYH_INIT(:)+ZRWETH_INIT(:))
-  END WHERE
-ENDIF
-DO JL=1, KSIZE
-  PRCWETH(JL) = ZWETH(JL) * PRH_TEND(JL, IRCWETH)
-  PRIWETH(JL) = ZWETH(JL) * PRH_TEND(JL, IRIWETH)
-  PRSWETH(JL) = ZWETH(JL) * PRH_TEND(JL, IRSWETH)
-  PRGWETH(JL) = ZWETH(JL) * PRH_TEND(JL, IRGWETH)
-  !Collected minus aggregated
-  PRRWETH(JL) = ZWETH(JL) * (ZRWETH_INIT(JL) - PRH_TEND(JL, IRIWETH) - &
-                             PRH_TEND(JL, IRSWETH) - PRH_TEND(JL, IRGWETH) - &
-                             PRH_TEND(JL, IRCWETH))
-
-  PRCDRYH(JL) = ZDRYH(JL) * PRH_TEND(JL, IRCWETH)
-  PRIDRYH(JL) = ZDRYH(JL) * PRH_TEND(JL, IRIDRYH)
-  PRSDRYH(JL) = ZDRYH(JL) * PRH_TEND(JL, IRSDRYH)
-  PRRDRYH(JL) = ZDRYH(JL) * PRH_TEND(JL, IRRWETH)
-  PRGDRYH(JL) = ZDRYH(JL) * PRH_TEND(JL, IRGDRYH)
-  PRDRYHG(JL) = ZDRYH(JL) * ZRDRYHG(JL)
-
-  PA_RC(JL) = PA_RC(JL) - PRCWETH(JL)
-  PA_RI(JL) = PA_RI(JL) - PRIWETH(JL)
-  PA_RS(JL) = PA_RS(JL) - PRSWETH(JL)
-  PA_RG(JL) = PA_RG(JL) - PRGWETH(JL)
-  PA_RH(JL) = PA_RH(JL) + PRCWETH(JL)+PRIWETH(JL)+PRSWETH(JL)+PRGWETH(JL)+PRRWETH(JL)
-  PA_RR(JL) = PA_RR(JL) - PRRWETH(JL)
-  PA_TH(JL) = PA_TH(JL) + (PRRWETH(JL)+PRCWETH(JL))*(PLSFACT(JL)-PLVFACT(JL))
-  PA_RC(JL) = PA_RC(JL) - PRCDRYH(JL)
-  PA_RI(JL) = PA_RI(JL) - PRIDRYH(JL)
-  PA_RS(JL) = PA_RS(JL) - PRSDRYH(JL)
-  PA_RR(JL) = PA_RR(JL) - PRRDRYH(JL)
-  PA_RG(JL) = PA_RG(JL) - PRGDRYH(JL) + PRDRYHG(JL)
-  PA_RH(JL) = PA_RH(JL) + PRCDRYH(JL)+PRIDRYH(JL)+PRSDRYH(JL)+&
-                         &PRRDRYH(JL)+PRGDRYH(JL) - PRDRYHG(JL)
-  PA_TH(JL) = PA_TH(JL) + (PRCDRYH(JL)+PRRDRYH(JL))*(PLSFACT(JL)-PLVFACT(JL))
-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)
-           &PCOMPUTE(JL)
-ENDDO
-IF(LDSOFT) THEN
-  DO JL=1, KSIZE
-    PRHMLTR(JL)=ZMASK(JL)*PRHMLTR(JL)
-  ENDDO
-ELSE
-  DO JL=1, KSIZE
-    PRHMLTR(JL) = ZMASK(JL)* PRVT(JL)*PPRES(JL)/(XEPSILO+PRVT(JL)) ! Vapor pressure
-  ENDDO
-  IF(LEVLIMIT) THEN
-    WHERE(ZMASK(:)==1.)
-      PRHMLTR(:)=MIN(PRHMLTR(:), EXP(XALPW-XBETAW/PT(:)-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))         ))
-  ENDDO
-  WHERE(ZMASK(:)==1.)
-    !
-    ! compute RHMLTR
-    !
-    PRHMLTR(:)  = MAX( 0.0,( -PRHMLTR(:) *                     &
-                           ( X0DEPH*       PLBDAH(:)**XEX0DEPH +     &
-                             X1DEPH*PCJ(:)*PLBDAH(:)**XEX1DEPH ) -   &
-                         ( PRH_TEND(:, IRCWETH)+PRH_TEND(:, IRRWETH) )*        &
-                               ( PRHODREF(:)*XCL*(XTT-PT(:))) ) /    &
-                                             ( PRHODREF(:)*XLMTT ) )
-  END WHERE
-END IF
-DO JL=1, KSIZE
-  PA_RR(JL) = PA_RR(JL) + PRHMLTR(JL)
-  PA_RH(JL) = PA_RH(JL) - PRHMLTR(JL)
-  PA_TH(JL) = PA_TH(JL) - PRHMLTR(JL)*(PLSFACT(JL)-PLVFACT(JL))
-ENDDO
-!
-!
-END SUBROUTINE ICE4_FAST_RH
diff --git a/src/mesonh/micro/ice4_slow.f90 b/src/mesonh/micro/ice4_slow.f90
deleted file mode 100644
index 15d0cd78e..000000000
--- a/src/mesonh/micro/ice4_slow.f90
+++ /dev/null
@@ -1,263 +0,0 @@
-!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-MODULE MODI_ICE4_SLOW
-INTERFACE
-SUBROUTINE ICE4_SLOW(KSIZE, LDSOFT, PCOMPUTE, PRHODREF, PT,&
-                     &PSSI, PLVFACT, PLSFACT, &
-                     &PRVT, PRCT, PRIT, PRST, PRGT,&
-                     &PLBDAS, PLBDAG,&
-                     &PAI, PCJ, PHLI_HCF, PHLI_HRI,&
-                     &PRCHONI, PRVDEPS, PRIAGGS, PRIAUTS, PRVDEPG, &
-                     &PA_TH, PA_RV, PA_RC, PA_RI, PA_RS, PA_RG)
-IMPLICIT NONE
-INTEGER,                      INTENT(IN)    :: KSIZE
-LOGICAL,                      INTENT(IN)    :: LDSOFT
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PCOMPUTE
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRHODREF ! Reference density
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PT       ! Temperature
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PSSI     ! Supersaturation over ice
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PLVFACT
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PLSFACT
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRVT
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRCT     ! Cloud water m.r. at t
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRIT     ! Pristine ice m.r. at t
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRST     ! Snow/aggregate m.r. at t
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRGT     ! Graupel/hail m.r. at t
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PLBDAS   ! Slope parameter of the aggregate distribution
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PLBDAG   ! Slope parameter of the graupel   distribution
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PAI      ! Thermodynamical function
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PCJ      ! Function to compute the ventilation coefficient
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PHLI_HCF !
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PHLI_HRI !
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PRCHONI  ! Homogeneous nucleation
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PRVDEPS  ! Deposition on r_s
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PRIAGGS  ! Aggregation on r_s
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PRIAUTS  ! Autoconversion of r_i for r_s production
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PRVDEPG  ! Deposition on r_g
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RV
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RC
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RI
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RS
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RG
-END SUBROUTINE ICE4_SLOW
-END INTERFACE
-END MODULE MODI_ICE4_SLOW
-SUBROUTINE ICE4_SLOW(KSIZE, LDSOFT, PCOMPUTE, PRHODREF, PT, &
-                     &PSSI, PLVFACT, PLSFACT, &
-                     &PRVT, PRCT, PRIT, PRST, PRGT, &
-                     &PLBDAS, PLBDAG, &
-                     &PAI, PCJ, PHLI_HCF, PHLI_HRI,&
-                     &PRCHONI, PRVDEPS, PRIAGGS, PRIAUTS, PRVDEPG, &
-                     &PA_TH, PA_RV, PA_RC, PA_RI, PA_RS, PA_RG)
-!!
-!!**  PURPOSE
-!!    -------
-!!      Computes the slow process
-!!
-!!    AUTHOR
-!!    ------
-!!      S. Riette from the splitting of rain_ice source code (nov. 2014)
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!
-!
-!
-!*      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
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-INTEGER,                      INTENT(IN)    :: KSIZE
-LOGICAL,                      INTENT(IN)    :: LDSOFT
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PCOMPUTE
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRHODREF ! Reference density
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PT       ! Temperature
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PSSI     ! Supersaturation over ice
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PLVFACT
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PLSFACT
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRVT
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRCT     ! Cloud water m.r. at t
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRIT     ! Pristine ice m.r. at t
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRST     ! Snow/aggregate m.r. at t
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRGT     ! Graupel/hail m.r. at t
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PLBDAS   ! Slope parameter of the aggregate distribution
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PLBDAG   ! Slope parameter of the graupel   distribution
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PAI      ! Thermodynamical function
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PCJ      ! Function to compute the ventilation coefficient
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PHLI_HCF !
-REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PHLI_HRI !
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PRCHONI  ! Homogeneous nucleation
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PRVDEPS  ! Deposition on r_s
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PRIAGGS  ! Aggregation on r_s
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PRIAUTS  ! Autoconversion of r_i for r_s production
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PRVDEPG  ! Deposition on r_g
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RV
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RC
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RI
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RS
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RG
-!
-!*       0.2  declaration of local variables
-!
-REAL, DIMENSION(KSIZE) :: ZCRIAUTI, ZMASK
-REAL                   :: ZTIMAUTIC
-INTEGER                :: JL
-!-------------------------------------------------------------------------------
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       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)
-           &PCOMPUTE(JL)
-ENDDO
-IF(LDSOFT) THEN
-  DO JL=1, KSIZE
-    PRCHONI(JL) = PRCHONI(JL) * ZMASK(JL)
-  ENDDO
-ELSE
-  PRCHONI(:) = 0.
-  WHERE(ZMASK(:)==1.)
-    PRCHONI(:) = MIN(1000.,XHON*PRHODREF(:)*PRCT(:)       &
-                                 *EXP( XALPHA3*(PT(:)-XTT)-XBETA3 ))
-  ENDWHERE
-ENDIF
-DO JL=1, KSIZE
-  PA_RI(JL) = PA_RI(JL) + PRCHONI(JL)
-  PA_RC(JL) = PA_RC(JL) - PRCHONI(JL)
-  PA_TH(JL) = PA_TH(JL) + PRCHONI(JL)*(PLSFACT(JL)-PLVFACT(JL))
-ENDDO
-!
-!*       3.4    compute the deposition, aggregation and autoconversion sources
-!
-!
-!*       3.4.2  compute the riming-conversion of r_c for r_i production: RCAUTI
-!
-!  ZZW(:) = 0.0
-!  ZTIMAUTIC = SQRT( XTIMAUTI*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(:)
-!    PRCS(:) = PRCS(:) - ZZW(:)
-!    PTHS(:) = PTHS(:) + ZZW(:)*(PLSFACT(:)-PLVFACT(:)) ! f(L_f*(RCAUTI))
-!  END WHERE
-!
-!*       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)
-           &PCOMPUTE(JL)
-ENDDO
-IF(LDSOFT) THEN
-  DO JL=1, KSIZE
-    PRVDEPS(JL)=PRVDEPS(JL)*ZMASK(JL)
-  ENDDO
-ELSE
-  PRVDEPS(:) = 0.
-  WHERE(ZMASK(:)==1.)
-    PRVDEPS(:) = ( PSSI(:)/(PRHODREF(:)*PAI(:)) ) *                               &
-                 ( X0DEPS*PLBDAS(:)**XEX0DEPS + X1DEPS*PCJ(:)*PLBDAS(:)**XEX1DEPS )
-  END WHERE
-ENDIF
-DO JL=1, KSIZE
-  PA_RS(JL) = PA_RS(JL) + PRVDEPS(JL)
-  PA_RV(JL) = PA_RV(JL) - PRVDEPS(JL)
-  PA_TH(JL) = PA_TH(JL) + PRVDEPS(JL)*PLSFACT(JL)
-ENDDO
-!
-!*       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)
-           &PCOMPUTE(JL)
-ENDDO
-IF(LDSOFT) THEN
-  DO JL=1, KSIZE
-    PRIAGGS(JL)=PRIAGGS(JL) * ZMASK(JL)
-  ENDDO
-ELSE
-  PRIAGGS(:) = 0.
-  WHERE(ZMASK(:)==1)
-    PRIAGGS(:) = XFIAGGS * EXP( XCOLEXIS*(PT(:)-XTT) ) &
-                         * PRIT(:)                      &
-                         * PLBDAS(:)**XEXIAGGS          &
-                         * PRHODREF(:)**(-XCEXVT)
-  END WHERE
-ENDIF
-DO JL=1, KSIZE
-  PA_RS(JL) = PA_RS(JL) + PRIAGGS(JL)
-  PA_RI(JL) = PA_RI(JL) - PRIAGGS(JL)
-ENDDO
-!
-!*       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)
-           &MAX(0., -SIGN(1., 1.E-20-PHLI_HCF(JL))) * & ! PHLI_HCF(:) .GT. 0.
-           &PCOMPUTE(JL)
-ENDDO
-IF(LDSOFT) THEN
-  DO JL=1, KSIZE
-    PRIAUTS(JL) = PRIAUTS(JL) * ZMASK(JL)
-  ENDDO
-ELSE
-  PRIAUTS(:) = 0.
-  !ZCRIAUTI(:)=MIN(XCRIAUTI,10**(0.06*(PT(:)-XTT)-3.5))
-  ZCRIAUTI(:)=MIN(XCRIAUTI,10**(XACRIAUTI*(PT(:)-XTT)+XBCRIAUTI))
-  WHERE(ZMASK(:)==1.)
-    PRIAUTS(:) = XTIMAUTI * EXP( XTEXAUTI*(PT(:)-XTT) ) &
-                          * MAX( PHLI_HRI(:)/PHLI_HCF(:)-ZCRIAUTI(:),0.0 )
-    PRIAUTS(:) = PHLI_HCF(:)*PRIAUTS(:)
-  END WHERE
-ENDIF
-DO JL=1, KSIZE
-  PA_RS(JL) = PA_RS(JL) + PRIAUTS(JL)
-  PA_RI(JL) = PA_RI(JL) - PRIAUTS(JL)
-ENDDO
-!
-!*       3.4.6  compute the deposition on r_g: RVDEPG
-!
-!
-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)
-           &PCOMPUTE(JL)
-ENDDO
-IF(LDSOFT) THEN
-  DO JL=1, KSIZE
-    PRVDEPG(JL) = PRVDEPG(JL) * ZMASK(JL)
-  ENDDO
-ELSE
-  PRVDEPG(:) = 0.
-  WHERE(ZMASK(:)==1.)
-    PRVDEPG(:) = ( PSSI(:)/(PRHODREF(:)*PAI(:)) ) *                               &
-                 ( X0DEPG*PLBDAG(:)**XEX0DEPG + X1DEPG*PCJ(:)*PLBDAG(:)**XEX1DEPG )
-  END WHERE
-ENDIF
-DO JL=1, KSIZE
-  PA_RG(JL) = PA_RG(JL) + PRVDEPG(JL)
-  PA_RV(JL) = PA_RV(JL) - PRVDEPG(JL)
-  PA_TH(JL) = PA_TH(JL) + PRVDEPG(JL)*PLSFACT(JL)
-ENDDO
-!
-!
-END SUBROUTINE ICE4_SLOW
-- 
GitLab