From c40251ccb11963e8e7ac0f4ff2d4a079d9a2374a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Riette?= <sebastien.riette@meteo.fr>
Date: Fri, 18 Nov 2022 17:35:09 +0100
Subject: [PATCH] S. Riette 18 Nov 2022: rain_ice_old replugged

+ bugfix in check_commit_mesonh broken during last update
---
 docs/TODO                         |    4 +-
 src/mesonh/ext/resolved_cloud.f90 |   26 +-
 src/mesonh/micro/rain_ice_old.f90 | 1893 +++++++++++++++--------------
 tools/check_commit_mesonh.sh      |   37 +-
 tools/compare.py                  |    3 +-
 5 files changed, 1003 insertions(+), 960 deletions(-)

diff --git a/docs/TODO b/docs/TODO
index 4a0c7da95..8ce6da5ad 100644
--- a/docs/TODO
+++ b/docs/TODO
@@ -29,9 +29,9 @@ Intégration de PHYEX dans des cycles/versions officielles:
   - déplacer dans un nouveau mpa/aux: aro_startbu, aroini_budget, aro_suintbudget, aro_suintbudget_omp, aroini_cstmnh, aroini_frommpa, modd_spp_type
 
 Merge pb:
-  - rain_ice_old a rebrancher dans Meso-NH
-  - appels à condensation temporairement supprimés de src/mesonh/micro/radtr_satel.f90,
+  - appels à condensation remis dans src/mesonh/micro/radtr_satel.f90,
         src/mesonh/micro/ice_adjust_elec.f90 et src/mesonh/micro/lima_adjust_split.f90
+        mais non testés
   - arp_shallow_mf non phasé
   - LIMA à faire
   - KFB ?
diff --git a/src/mesonh/ext/resolved_cloud.f90 b/src/mesonh/ext/resolved_cloud.f90
index 4e1b10318..78b58c373 100644
--- a/src/mesonh/ext/resolved_cloud.f90
+++ b/src/mesonh/ext/resolved_cloud.f90
@@ -324,6 +324,7 @@ USE MODI_LIMA_NOTADJUST
 USE MODI_LIMA_WARM
 USE MODI_RAIN_C2R2_KHKO
 USE MODI_RAIN_ICE
+USE MODI_RAIN_ICE_OLD
 USE MODI_SHUMAN
 USE MODI_SLOW_TERMS
 !
@@ -803,7 +804,17 @@ SELECT CASE ( HCLOUD )
                     TBUDGETS,SIZE(TBUDGETS),           &
                     PSEA,PTOWN, PFPR=ZFPR                                )
     ELSE 
-!    CALL RAIN_ICE_OLD
+      CALL RAIN_ICE_OLD (YLDIMPHYEX, OSEDIC, CSEDIM, HSUBG_AUCV, OWARM, 1, IKU, 1,    &
+                    KSPLITR, PTSTEP, KRR,                                 &
+                    ZDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,&
+                    PTHT, PRT(:,:,:,1), PRT(:,:,:,2),                     &
+                    PRT(:,:,:,3), PRT(:,:,:,4),                           &
+                    PRT(:,:,:,5), PRT(:,:,:,6),                           &
+                    PTHS, PRS(:,:,:,1), PRS(:,:,:,2), PRS(:,:,:,3),       &
+                    PRS(:,:,:,4), PRS(:,:,:,5), PRS(:,:,:,6),             &
+                    PINPRC,PINPRR, PINPRR3D, PEVAP3D,                     &
+                    PINPRS, PINPRG, PSIGS,PINDEP, PRAINFR,                &
+                    PSEA, PTOWN, PFPR=ZFPR)
     END IF
 
 !
@@ -902,7 +913,18 @@ SELECT CASE ( HCLOUD )
                     PSEA, PTOWN,                                          &
                     PRT(:,:,:,7), PRS(:,:,:,7), PINPRH, PFPR=ZFPR         )
     ELSE
-    !CALL RAIN_ICE_OLD
+      CALL RAIN_ICE_OLD (YLDIMPHYEX, OSEDIC, CSEDIM, HSUBG_AUCV, OWARM, 1, IKU, 1,    &
+                    KSPLITR, PTSTEP, KRR,                                 &
+                    ZDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,&
+                    PTHT, PRT(:,:,:,1), PRT(:,:,:,2),                     &
+                    PRT(:,:,:,3), PRT(:,:,:,4),                           &
+                    PRT(:,:,:,5), PRT(:,:,:,6),                           &
+                    PTHS, PRS(:,:,:,1), PRS(:,:,:,2), PRS(:,:,:,3),       &
+                    PRS(:,:,:,4), PRS(:,:,:,5), PRS(:,:,:,6),             &
+                    PINPRC,PINPRR, PINPRR3D, PEVAP3D,                     &
+                    PINPRS, PINPRG, PSIGS,PINDEP, PRAINFR,                &
+                    PSEA, PTOWN,                                          &
+                    PRT(:,:,:,7),  PRS(:,:,:,7), PINPRH, PFPR=ZFPR)
     END IF
 
 
diff --git a/src/mesonh/micro/rain_ice_old.f90 b/src/mesonh/micro/rain_ice_old.f90
index abf9dd0c8..6645e796b 100644
--- a/src/mesonh/micro/rain_ice_old.f90
+++ b/src/mesonh/micro/rain_ice_old.f90
@@ -1,945 +1,950 @@
-!!MNH_LIC Copyright 1995-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.
-!!-----------------------------------------------------------------
-!!     ######spl
-!       MODULE MODI_RAIN_ICE_OLD
-!!      ####################
-!!
-!INTERFACE
-!      SUBROUTINE RAIN_ICE_OLD ( OSEDIC,HSEDIM, HSUBG_AUCV, OWARM, KKA, KKU, KKL,      &
-!                            KSPLITR, PTSTEP, KRR,                            &
-!                            PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,&
-!                            PTHT, PRVT, PRCT, PRRT, PRIT, PRST, &
-!                            PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, &
-!                            PINPRC,PINPRR, PINPRR3D, PEVAP3D,           &
-!                            PINPRS, PINPRG, PSIGS, PINDEP, PRAINFR, PSEA, PTOWN,  &
-!                            PRHT, PRHS, PINPRH, PFPR                        )
-!!
-!!
-!LOGICAL,                  INTENT(IN)    :: OSEDIC ! Switch for droplet sedim.
-!CHARACTER(LEN=4),         INTENT(IN)    :: HSEDIM ! Sedimentation scheme
-!CHARACTER(LEN=4),         INTENT(IN)    :: HSUBG_AUCV ! Switch for rc->rr Subgrid autoconversion
-!                                        ! Kind of Subgrid autoconversion method
-!LOGICAL,                  INTENT(IN)    :: OWARM   ! .TRUE. allows raindrops to
-!                                                   !   form by warm processes
-!                                                   !      (Kessler scheme)
-!!
-!INTEGER,                  INTENT(IN)    :: KKA   !near ground array index  
-!INTEGER,                  INTENT(IN)    :: KKU   !uppest atmosphere array index
-!INTEGER,                  INTENT(IN)    :: KKL   !vert. levels type 1=MNH -1=ARO
-!INTEGER,                  INTENT(IN)    :: KSPLITR ! Number of small time step 
-!                                      ! integration for  rain sedimendation
-!REAL,                     INTENT(IN)    :: PTSTEP  ! Double Time step
-!                                                   ! (single if cold start)
-!INTEGER,                  INTENT(IN)    :: KRR     ! Number of moist variable
-!!
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDZZ     ! Layer thikness (m)
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ  ! Dry density * Jacobian
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF! Reference density
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF ! Reference Exner function
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST  ! absolute pressure at t
-!!
-!REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCIT    ! Pristine ice n.c. at t
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCLDFR  ! Cloud fraction
-!!
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT    ! Theta at time t
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRVT    ! Water vapor m.r. at t 
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t 
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT    ! Rain water m.r. at t 
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRIT    ! Pristine ice m.r. at t
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRGT    ! Graupel/hail m.r. at t
-!!
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PSIGS   ! Sigma_s at t
-!!
-!REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS    ! Theta source
-!REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRVS    ! Water vapor m.r. source
-!REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRCS    ! Cloud water m.r. source
-!REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRRS    ! Rain water m.r. source
-!REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRIS    ! Pristine ice m.r. source
-!REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRSS    ! Snow/aggregate m.r. source
-!REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRGS    ! Graupel m.r. source
-!!
-!REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRC! Cloud instant precip
-!REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINDEP  ! Cloud instant deposition
-!REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRR! Rain instant precip
-!REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PINPRR3D! Rain inst precip 3D
-!REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PEVAP3D! Rain evap profile
-!REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRS! Snow instant precip
-!REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRG! Graupel instant precip
-!REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PRAINFR! Rain fraction
-!REAL, DIMENSION(:,:),     OPTIONAL, INTENT(IN)    :: PSEA ! Sea Mask
-!REAL, DIMENSION(:,:),     OPTIONAL, INTENT(IN)    :: PTOWN! Fraction that is town
-!REAL, DIMENSION(:,:,:),   OPTIONAL, INTENT(IN)    :: PRHT    ! Hail m.r. at t
-!REAL, DIMENSION(:,:,:),   OPTIONAL, INTENT(INOUT) :: PRHS    ! Hail m.r. source
-!REAL, DIMENSION(:,:),     OPTIONAL, INTENT(INOUT) :: PINPRH! Hail instant precip
-!REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(OUT)   :: PFPR ! upper-air precipitation fluxes
-!!
-!END SUBROUTINE RAIN_ICE_OLD
-!END INTERFACE
-!END MODULE MODI_RAIN_ICE_OLD
-!!     ######spl
-!      SUBROUTINE RAIN_ICE_OLD ( OSEDIC,HSEDIM, HSUBG_AUCV, OWARM, KKA, KKU, KKL,      &
-!                            KSPLITR, PTSTEP, KRR,                            &
-!                            PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,&
-!                            PTHT, PRVT, PRCT, PRRT, PRIT, PRST, &
-!                            PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, &
-!                            PINPRC,PINPRR, PINPRR3D, PEVAP3D,           &
-!                            PINPRS, PINPRG, PSIGS, PINDEP, PRAINFR, PSEA, PTOWN,  &
-!                            PRHT, PRHS, PINPRH, PFPR                        )
-!!     ######################################################################
-!!
-!!!****  * -  compute the explicit microphysical sources
-!!!
-!!!    PURPOSE
-!!!    -------
-!!!      The purpose of this routine is to compute the slow microphysical sources
-!!!    which can be computed explicitly
-!!!
-!!!
-!!!**  METHOD
-!!!    ------
-!!!      The autoconversion computation follows Kessler (1969).
-!!!      The sedimentation rate is computed with a time spliting technique and
-!!!    an upstream scheme, written as a difference of non-advective fluxes. This
-!!!    source term is added to the future instant ( split-implicit process ).
-!!!      The others microphysical processes are evaluated at the central instant
-!!!    (split-explicit process ): autoconversion, accretion and rain evaporation.
-!!!      These last 3 terms are bounded in order not to create negative values
-!!!    for the water species at the future instant.
-!!!
-!!!    EXTERNAL
-!!!    --------
-!!!      None
-!!!
-!!!
-!!!    IMPLICIT ARGUMENTS
-!!!    ------------------
-!!!      Module MODD_PARAMETERS
-!!!          JPHEXT       : Horizontal external points number
-!!!          JPVEXT       : Vertical external points number
-!!!      Module MODD_CONF :
-!!!          CCONF configuration of the model for the first time step
-!!!      Module MODD_CST
-!!!          XP00               ! Reference pressure
-!!!          XRD,XRV            ! Gaz  constant for dry air, vapor
-!!!          XMD,XMV            ! Molecular weight for dry air, vapor
-!!!          XCPD               ! Cpd (dry air)
-!!!          XCL                ! Cl (liquid)
-!!!          XCI                ! Ci (solid)
-!!!          XTT                ! Triple point temperature
-!!!          XLVTT              ! Vaporization heat constant
-!!!          XALPW,XBETAW,XGAMW ! Constants for saturation vapor pressure
-!!!                               function over liquid water
-!!!          XALPI,XBETAI,XGAMI ! Constants for saturation vapor pressure
-!!!                               function over solid ice
-!!!
-!!!    REFERENCE
-!!!    ---------
-!!!
-!!!      Book1 and Book2 of documentation ( routine RAIN_ICE_OLD )
-!!!
-!!!    AUTHOR
-!!!    ------
-!!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!!
-!!!    MODIFICATIONS
-!!!    -------------
-!!!      Original    02/11/95
-!!!      (J.Viviand) 04/02/97  debug accumulated prcipitation & convert
-!!!                            precipitation rate in m/s
-!!!      (J.-P. Pinty) 17/02/97  add budget calls
-!!!      (J.-P. Pinty) 17/11/97  set ice sedim. for cirrus ice, reset RCHONI
-!!!                              and RRHONG, reverse order for DEALLOCATE
-!!!      (J.-P. Pinty) 11/02/98  correction of the air dynamical viscosity and
-!!!                              add advance of the budget calls
-!!!      (J.-P. Pinty) 18/05/98  correction of the air density in the RIAUTS
-!!!                              process
-!!!      (J.-P. Pinty) 18/11/98  split the main routine
-!!!      (V. Masson)   18/11/98  bug in IVEC1 and IVEC2 upper limits
-!!!      (J. Escobar & J.-P. Pinty)
-!!!                    11/12/98  contains and rewrite count+pack
-!!!      (J. Stein & J.-P. Pinty)
-!!!                    14/10/99  correction for very small RIT
-!!!      (J. Escobar & J.-P. Pinty)
-!!!                    24/07/00  correction for very samll m.r. in
-!!!                              the sedimentation subroutine
-!!!      (M. Tomasini) 11/05/01  Autoconversion of rc into rr modification to take
-!!!                              into account the subgrid variance
-!!!                              (cf Redelsperger & Sommeria JAS 86)
-!!!      (G. Molinie)  21/05/99  bug in RRCFRIG process, RHODREF**(-1) missing
-!!!                              in RSRIMCG
-!!!      (G. Molinie & J.-P. Pinty)
-!!!                    21/06/99  bug in RACCS process
-!!!      (P. Jabouille) 27/05/04 safety test for case where esw/i(T)> pabs (~Z>40km)
-!!!      (J-.P. Chaboureau) 12/02/05  temperature depending ice-to-snow autocon-
-!!                              version threshold (Chaboureau and Pinty GRL 2006)
-!!!      (J.-P. Pinty) 01/01/O1  add the hail category and correction of the
-!!!                              wet growth rate of the graupeln
-!!!      (S.Remy & C.Lac) 06/06 Add the cloud sedimentation
-!!!      (S.Remy & C.Lac) 06/06 Sedimentation becoming the last process
-!!!      to settle the precipitating species created during the current time step
-!!!      (S.Remy & C.Lac) 06/06 Modification of the algorithm of sedimentation
-!!!      to settle n times the precipitating species created during Dt/n instead
-!!!      of Dt
-!!!      (C.Lac) 11/06 Optimization of the sedimentation loop for NEC
-!!!      (J.Escobar) 18/01/2008 Parallel Bug in Budget when IMICRO >= 1
-!!!                  --> Path inhibit this test by IMICRO >= 0 allway true
-!!!      (Y.Seity) 03/2008 Add Statistic sedimentation
-!!!      (Y.Seity) 10/2009 Added condition for the raindrop accretion of the aggregates
-!!!         into graupeln process (5.2.6) to avoid negative graupel mixing ratio
-!!!      (V.Masson, C.Lac) 09/2010 Correction in split sedimentation for
-!!!                                reproducibility
-!!!      (S. Riette) Oct 2010 Better vectorisation of RAIN_ICE_SEDIMENTATION_STAT
-!!!      (Y. Seity), 02-2012  add possibility to run with reversed vertical levels
-!!!      (L. Bengtsson), 02-2013 Passing in land/sea mask and town fraction in
-!!!                      order to use different cloud droplet number conc. over
-!!!                      land, sea and urban areas in the cloud sedimentation.
-!!!      (D. Degrauwe), 2013-11: Export upper-air precipitation fluxes PFPR.
-!!!      (S. Riette) Nov 2013 Protection against null sigma
-!!!      (C. Lac) FIT temporal scheme : instant M removed
-!!!      (JP Pinty), 01-2014 : ICE4 : partial reconversion of hail to graupel
-!!!              July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for
-!!!                                      aircraft, ballon and profiler
-!!!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
-!!!      C.Lac : 10/2016 : add droplet deposition
-!!!      C.Lac : 01/2017 : correction on droplet deposition
-!!!      J.Escobar : 10/2017 : for real*4 , limit exp() in RAIN_ICE_SLOW with XMNH_HUGE_12_LOG
-!!!      (C. Abiven, Y. Léauté, V. Seigner, S. Riette) Phasing of Turner rain subgrid param
-!!!      J.Escobar : 8/2018 : for real*4 , bis => limit exp() in RAIN_ICE_SLOW with XMNH_HUGE_12_LOG
-!!!      P.Wautelet 01/02/2019: add missing initialization for PFPR
-!!!                   02/2019 C.Lac add rain fraction as an output field
-!!  P. Wautelet 25/02/2019: split rain_ice (cleaner and easier to maintain/debug)
-!!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
-!!  P. Wautelet 28/05/2019: move COUNTJV function to tools.f90
-!!  P. Wautelet 29/05/2019: remove PACK/UNPACK intrinsics (to get more performance and better OpenACC support)
-!!  J. Escobar  09/07/2019: for reproductiblity MPPDB_CHECK, add missing LCHECK test in ZRHODJ de/allocate
-!!  P. Wautelet    02/2020: use the new data structures and subroutines for budgets (no more budget calls in this subroutine)
-!!-----------------------------------------------------------------
-!!
-!!*       0.    DECLARATIONS
-!!              ------------
-!!
-!use modd_budget,         only: lbu_enable
-!use MODD_CONF,           only: LCHECK
-!use MODD_CST,            only: XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XTT, &
-!                               XALPI, XBETAI, XGAMI, XMD, XMV, XTT
-!use MODD_LES,            only: LLES_CALL
-!use MODD_PARAMETERS,     only: JPVEXT
-!use MODD_PARAM_ICE,      only: CSUBG_PR_PDF, LDEPOSC
-!use MODD_RAIN_ICE_DESCR, only: XLBEXR, XLBR, XRTMIN
-!use MODD_RAIN_ICE_PARAM, only: XCRIAUTC
-!
-!use MODE_MSG
-!use MODE_RAIN_ICE_FAST_RG,             only: RAIN_ICE_FAST_RG
-!use MODE_RAIN_ICE_FAST_RH,             only: RAIN_ICE_FAST_RH
-!use MODE_RAIN_ICE_FAST_RI,             only: RAIN_ICE_FAST_RI
-!use MODE_RAIN_ICE_FAST_RS,             only: RAIN_ICE_FAST_RS
-!use MODE_RAIN_ICE_NUCLEATION,          only: RAIN_ICE_NUCLEATION
-!use MODE_RAIN_ICE_SEDIMENTATION_SPLIT, only: RAIN_ICE_SEDIMENTATION_SPLIT
-!use MODE_RAIN_ICE_SEDIMENTATION_STAT,  only: RAIN_ICE_SEDIMENTATION_STAT
-!use MODE_RAIN_ICE_SLOW,                only: RAIN_ICE_SLOW
-!use MODE_RAIN_ICE_WARM,                only: RAIN_ICE_WARM
-!use mode_tools,                        only: Countjv
-!use mode_tools_ll,                     only: GET_INDICE_ll
-!
-!USE MODE_ICE4_RAINFR_VERT
-!
-!IMPLICIT NONE
-!!
-!!*       0.1   Declarations of dummy arguments :
-!!
-!!
-!!
-!LOGICAL,                  INTENT(IN)    :: OSEDIC ! Switch for droplet sedim.
-!CHARACTER(LEN=4),         INTENT(IN)    :: HSEDIM ! Sedimentation scheme
-!CHARACTER(LEN=4),         INTENT(IN)    :: HSUBG_AUCV ! Switch for rc->rr Subgrid autoconversion
-!                                        ! Kind of Subgrid autoconversion method
-!LOGICAL,                  INTENT(IN)    :: OWARM   ! .TRUE. allows raindrops to
-!                                                   !   form by warm processes
-!                                                   !      (Kessler scheme)
-!!
-!INTEGER,                  INTENT(IN)    :: KKA   !near ground array index
-!INTEGER,                  INTENT(IN)    :: KKU   !uppest atmosphere array index
-!INTEGER,                  INTENT(IN)    :: KKL   !vert. levels type 1=MNH -1=ARO
-!INTEGER,                  INTENT(IN)    :: KSPLITR ! Number of small time step
-!                                      ! integration for  rain sedimendation
-!REAL,                     INTENT(IN)    :: PTSTEP  ! Double Time step
-!                                                   ! (single if cold start)
-!INTEGER,                  INTENT(IN)    :: KRR     ! Number of moist variable
-!!
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDZZ     ! Layer thikness (m)
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ  ! Dry density * Jacobian
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF! Reference density
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF ! Reference Exner function
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST  ! absolute pressure at t
-!!
-!REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCIT    ! Pristine ice n.c. at t
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCLDFR  ! Cloud fraction
-!!
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT    ! Theta at time t
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRVT    ! Water vapor m.r. at t
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT    ! Rain water m.r. at t
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRIT    ! Pristine ice m.r. at t
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRGT    ! Graupel/hail m.r. at t
-!!
-!REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PSIGS   ! Sigma_s at t
-!!
-!REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS    ! Theta source
-!REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRVS    ! Water vapor m.r. source
-!REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRCS    ! Cloud water m.r. source
-!REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRRS    ! Rain water m.r. source
-!REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRIS    ! Pristine ice m.r. source
-!REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRSS    ! Snow/aggregate m.r. source
-!REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRGS    ! Graupel m.r. source
-!!
-!REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRC! Cloud instant precip
-!REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINDEP  ! Cloud instant deposition
-!REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRR! Rain instant precip
-!REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PINPRR3D! Rain inst precip 3D
-!REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PEVAP3D! Rain evap profile
-!REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRS! Snow instant precip
-!REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRG! Graupel instant precip
-!REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PRAINFR! Rain fraction
-!REAL, DIMENSION(:,:),     OPTIONAL, INTENT(IN)    :: PSEA ! Sea Mask
-!REAL, DIMENSION(:,:),     OPTIONAL, INTENT(IN)    :: PTOWN! Fraction that is town
-!REAL, DIMENSION(:,:,:),   OPTIONAL, INTENT(IN)    :: PRHT    ! Hail m.r. at t
-!REAL, DIMENSION(:,:,:),   OPTIONAL, INTENT(INOUT) :: PRHS    ! Hail m.r. source
-!REAL, DIMENSION(:,:),     OPTIONAL, INTENT(INOUT) :: PINPRH! Hail instant precip
-!REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(OUT)   :: PFPR ! upper-air precipitation fluxes
-!!
-!!*       0.2   Declarations of local variables :
-!!
-!INTEGER                           :: IIB           !  Define the domain where is
-!INTEGER                           :: IIE           !  the microphysical sources have to be computed
-!INTEGER                           :: IIT           !
-!INTEGER                           :: IJB           !
-!INTEGER                           :: IJE           !
-!INTEGER                           :: IJT           !
-!INTEGER                           :: IKB,IKTB,IKT  !
-!INTEGER                           :: IKE,IKTE      !
-!!
-!INTEGER                           :: IMICRO
-!INTEGER, DIMENSION(SIZE(PEXNREF)) :: I1,I2,I3 ! Used to replace the COUNT
-!INTEGER                           :: JL       ! and PACK intrinsics
-!LOGICAL, DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) &
-!                                  :: GMICRO ! Test where to compute all processes
-!REAL                              :: ZINVTSTEP
-!REAL                              :: ZCOEFFRCM
-!REAL, DIMENSION(:), ALLOCATABLE   :: ZRVT    ! Water vapor m.r. at t
-!REAL, DIMENSION(:), ALLOCATABLE   :: ZRCT    ! Cloud water m.r. at t
-!REAL, DIMENSION(:), ALLOCATABLE   :: ZRRT    ! Rain water m.r. at t
-!REAL, DIMENSION(:), ALLOCATABLE   :: ZRIT    ! Pristine ice m.r. at t
-!REAL, DIMENSION(:), ALLOCATABLE   :: ZRST    ! Snow/aggregate m.r. at t
-!REAL, DIMENSION(:), ALLOCATABLE   :: ZRGT    ! Graupel m.r. at t
-!REAL, DIMENSION(:), ALLOCATABLE   :: ZRHT    ! Hail m.r. at t
-!REAL, DIMENSION(:), ALLOCATABLE   :: ZCIT    ! Pristine ice conc. at t
-!!
-!REAL, DIMENSION(:), ALLOCATABLE   :: ZRVS    ! Water vapor m.r. source
-!REAL, DIMENSION(:), ALLOCATABLE   :: ZRCS    ! Cloud water m.r. source
-!REAL, DIMENSION(:), ALLOCATABLE   :: ZRRS    ! Rain water m.r. source
-!REAL, DIMENSION(:), ALLOCATABLE   :: ZRIS    ! Pristine ice m.r. source
-!REAL, DIMENSION(:), ALLOCATABLE   :: ZRSS    ! Snow/aggregate m.r. source
-!REAL, DIMENSION(:), ALLOCATABLE   :: ZRGS    ! Graupel m.r. source
-!REAL, DIMENSION(:), ALLOCATABLE   :: ZRHS    ! Hail m.r. source
-!REAL, DIMENSION(:), ALLOCATABLE   :: ZTHS    ! Theta source
-!REAL, DIMENSION(:), ALLOCATABLE   :: ZTHT    ! Potential temperature
-!REAL, DIMENSION(:), ALLOCATABLE   :: ZTHLT   ! Liquid potential temperature
-!!
-!REAL, DIMENSION(:), ALLOCATABLE   :: ZRHODREF, &      ! RHO Dry REFerence
-!                                     ZRHODJ,   &      ! RHO times Jacobian
-!                                     ZZT,      &      ! Temperature
-!                                     ZPRES,    &      ! Pressure
-!                                     ZEXNREF,  &      ! EXNer Pressure REFerence
-!                                     ZZW,      &      ! Work array
-!                                     ZLSFACT,  &      ! L_s/(Pi_ref*C_ph)
-!                                     ZLVFACT,  &      ! L_v/(Pi_ref*C_ph)
-!                                     ZUSW,     &      ! Undersaturation over water
-!                                     ZSSI,     &      ! Supersaturation over ice
-!                                     ZLBDAR,   &      ! Slope parameter of the raindrop  distribution
-!                                     ZLBDAR_RF,&      ! Slope parameter of the raindrop  distribution
-!                                                      ! for the Rain Fraction part
-!                                     ZLBDAS,   &      ! Slope parameter of the aggregate distribution
-!                                     ZLBDAG,   &      ! Slope parameter of the graupel   distribution
-!                                     ZLBDAH,   &      ! Slope parameter of the hail      distribution
-!                                     ZRDRYG,   &      ! Dry growth rate of the graupeln
-!                                     ZRWETG,   &      ! Wet growth rate of the graupeln
-!                                     ZAI,      &      ! Thermodynamical function
-!                                     ZCJ,      &      ! Function to compute the ventilation coefficient
-!                                     ZKA,      &      ! Thermal conductivity of the air
-!                                     ZDV,      &      ! Diffusivity of water vapor in the air
-!                                     ZSIGMA_RC,&      ! Standard deviation of rc at time t
-!                                     ZCF,      &      ! Cloud fraction
-!                                     ZRF,      &      ! Rain fraction
-!                                     ZHLC_HCF, &      ! HLCLOUDS : fraction of High Cloud Fraction in grid
-!                                     ZHLC_LCF, &      ! HLCLOUDS : fraction of Low  Cloud Fraction in grid
-!                                                      !    note that ZCF = ZHLC_HCF + ZHLC_LCF
-!                                     ZHLC_HRC, &      ! HLCLOUDS : LWC that is High LWC in grid
-!                                     ZHLC_LRC, &      ! HLCLOUDS : LWC that is Low  LWC in grid
-!                                                      !    note that ZRC = ZHLC_HRC + ZHLC_LRC
-!                                     ZHLC_RCMAX, &    ! HLCLOUDS : maximum value for RC in distribution
-!                                     ZRCRAUTC, &      ! RC value to begin rain formation =XCRIAUTC/RHODREF
-!                                     ZHLC_HRCLOCAL, & ! HLCLOUDS : LWC that is High LWC local in HCF
-!                                     ZHLC_LRCLOCAL    ! HLCLOUDS : LWC that is Low  LWC local in LCF
-!                                                      !    note that ZRC/CF = ZHLC_HRCLOCAL+ ZHLC_LRCLOCAL
-!                                                      !                     = ZHLC_HRC/HCF+ ZHLC_LRC/LCF
-!REAL, DIMENSION(:,:), ALLOCATABLE :: ZZW1 ! Work arrays
-!REAL, DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3))   &
-!                                  :: ZW ! work array
-!REAL, DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3))   &
-!                                  :: ZT ! Temperature
-!!
-!!-------------------------------------------------------------------------------
-!!
-!!*       1.     COMPUTE THE LOOP BOUNDS
-!!               -----------------------
-!!
-!CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
-!IIT=SIZE(PDZZ,1)
-!IJT=SIZE(PDZZ,2)
-!IKB=KKA+JPVEXT*KKL
-!IKE=KKU-JPVEXT*KKL
-!IKT=SIZE(PDZZ,3)
-!IKTB=1+JPVEXT
-!IKTE=IKT-JPVEXT
-!!
-!!
-!ZINVTSTEP=1./PTSTEP
-!!
-!!
-!!*       2.     COMPUTES THE SLOW COLD PROCESS SOURCES
-!!               --------------------------------------
-!!
-!CALL RAIN_ICE_NUCLEATION(IIB, IIE, IJB, IJE, IKTB, IKTE,KRR,PTSTEP,&
-!     PTHT,PPABST,PRHODJ,PRHODREF,PRVT,PRCT,PRRT,PRIT,PRST,PRGT,&
-!     PCIT,PEXNREF,PTHS,PRVS,PRIS,ZT,PRHT)
-!!
-!!
-!!  optimization by looking for locations where
-!!  the microphysical fields are larger than a minimal value only !!!
-!!
-!GMICRO(:,:,:) = .FALSE.
-!
-! IF ( KRR == 7 ) THEN
-!  GMICRO(IIB:IIE,IJB:IJE,IKTB:IKTE) =                          &
-!                PRCT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(2) .OR. &
-!                PRRT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(3) .OR. &
-!                PRIT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(4) .OR. &
-!                PRST(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(5) .OR. &
-!                PRGT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(6) .OR. &
-!                PRHT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(7)
-! ELSE IF( KRR == 6 ) THEN
-!  GMICRO(IIB:IIE,IJB:IJE,IKTB:IKTE) =                          &
-!                PRCT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(2) .OR. &
-!                PRRT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(3) .OR. &
-!                PRIT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(4) .OR. &
-!                PRST(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(5) .OR. &
-!                PRGT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(6)
-! END IF
-!
-!IMICRO = COUNTJV( GMICRO(:,:,:),I1(:),I2(:),I3(:))
-!IF( IMICRO >= 0 ) THEN
-!  ALLOCATE(ZRVT(IMICRO))
-!  ALLOCATE(ZRCT(IMICRO))
-!  ALLOCATE(ZRRT(IMICRO))
-!  ALLOCATE(ZRIT(IMICRO))
-!  ALLOCATE(ZRST(IMICRO))
-!  ALLOCATE(ZRGT(IMICRO))
-!  IF ( KRR == 7 ) THEN
-!    ALLOCATE(ZRHT(IMICRO))
-!  ELSE
-!    ALLOCATE(ZRHT(0))
-!  END IF
-!  ALLOCATE(ZCIT(IMICRO))
-!  ALLOCATE(ZRVS(IMICRO))
-!  ALLOCATE(ZRCS(IMICRO))
-!  ALLOCATE(ZRRS(IMICRO))
-!  ALLOCATE(ZRIS(IMICRO))
-!  ALLOCATE(ZRSS(IMICRO))
-!  ALLOCATE(ZRGS(IMICRO))
-!  IF ( KRR == 7 ) THEN
-!    ALLOCATE(ZRHS(IMICRO))
-!  ELSE
-!    ALLOCATE(ZRHS(0))
-!  END IF
-!  ALLOCATE(ZTHS(IMICRO))
-!  ALLOCATE(ZTHT(IMICRO))
-!  ALLOCATE(ZTHLT(IMICRO))
-!  ALLOCATE(ZRHODREF(IMICRO))
-!  ALLOCATE(ZZT(IMICRO))
-!  ALLOCATE(ZPRES(IMICRO))
-!  ALLOCATE(ZEXNREF(IMICRO))
-!  ALLOCATE(ZSIGMA_RC(IMICRO))
-!  ALLOCATE(ZCF(IMICRO))
-!  ALLOCATE(ZRF(IMICRO))
-!  ALLOCATE(ZHLC_HCF(IMICRO))
-!  ALLOCATE(ZHLC_LCF(IMICRO))
-!  ALLOCATE(ZHLC_HRC(IMICRO))
-!  ALLOCATE(ZHLC_LRC(IMICRO))
-!  ALLOCATE(ZHLC_RCMAX(IMICRO))
-!  ALLOCATE(ZRCRAUTC(IMICRO))
-!  ALLOCATE(ZHLC_HRCLOCAL(IMICRO))
-!  ALLOCATE(ZHLC_LRCLOCAL(IMICRO))
-!
-!  DO JL=1,IMICRO
-!    ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL))
-!    ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL))
-!    ZRRT(JL) = PRRT(I1(JL),I2(JL),I3(JL))
-!    ZRIT(JL) = PRIT(I1(JL),I2(JL),I3(JL))
-!    ZRST(JL) = PRST(I1(JL),I2(JL),I3(JL))
-!    ZRGT(JL) = PRGT(I1(JL),I2(JL),I3(JL))
-!    IF ( KRR == 7 ) ZRHT(JL) = PRHT(I1(JL),I2(JL),I3(JL))
-!    ZCIT(JL) = PCIT(I1(JL),I2(JL),I3(JL))
-!    ZCF(JL) = PCLDFR(I1(JL),I2(JL),I3(JL))
-!    IF ( HSUBG_AUCV == 'PDF ' .AND. CSUBG_PR_PDF == 'SIGM' ) THEN
-!      ZSIGMA_RC(JL) = PSIGS(I1(JL),I2(JL),I3(JL)) * 2.
-!!     ZSIGMA_RC(JL) = MAX(PSIGS(I1(JL),I2(JL),I3(JL)) * 2., 1.E-12)
-!    END IF
-!    ZRVS(JL) = PRVS(I1(JL),I2(JL),I3(JL))
-!    ZRCS(JL) = PRCS(I1(JL),I2(JL),I3(JL))
-!    ZRRS(JL) = PRRS(I1(JL),I2(JL),I3(JL))
-!    ZRIS(JL) = PRIS(I1(JL),I2(JL),I3(JL))
-!    ZRSS(JL) = PRSS(I1(JL),I2(JL),I3(JL))
-!    ZRGS(JL) = PRGS(I1(JL),I2(JL),I3(JL))
-!    IF ( KRR == 7 ) ZRHS(JL) = PRHS(I1(JL),I2(JL),I3(JL))
-!    ZTHS(JL) = PTHS(I1(JL),I2(JL),I3(JL))
-!!
-!    ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL))
-!    ZZT(JL) = ZT(I1(JL),I2(JL),I3(JL))
-!    ZTHT(JL) = PTHT(I1(JL),I2(JL),I3(JL))
-!    ZTHLT(JL) = ZTHT(JL) - XLVTT * ZTHT(JL) / XCPD / ZZT(JL) * ZRCT(JL)
-!    ZPRES(JL) = PPABST(I1(JL),I2(JL),I3(JL))
-!    ZEXNREF(JL) = PEXNREF(I1(JL),I2(JL),I3(JL))
-!  ENDDO
-!  ALLOCATE(ZZW(IMICRO))
-!  ALLOCATE(ZLSFACT(IMICRO))
-!  ALLOCATE(ZLVFACT(IMICRO))
-!    ZZW(:)  = ZEXNREF(:)*( XCPD+XCPV*ZRVT(:)+XCL*(ZRCT(:)+ZRRT(:)) &
-!                                    +XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) )
-!    ZLSFACT(:) = (XLSTT+(XCPV-XCI)*(ZZT(:)-XTT))/ZZW(:) ! L_s/(Pi_ref*C_ph)
-!    ZLVFACT(:) = (XLVTT+(XCPV-XCL)*(ZZT(:)-XTT))/ZZW(:) ! L_v/(Pi_ref*C_ph)
-!  ALLOCATE(ZUSW(IMICRO))
-!  ALLOCATE(ZSSI(IMICRO))
-!    ZZW(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) )
-!    ZSSI(:) = ZRVT(:)*( ZPRES(:)-ZZW(:) ) / ( (XMV/XMD) * ZZW(:) ) - 1.0
-!                                                      ! Supersaturation over ice
-!!
-!  ALLOCATE(ZLBDAR(IMICRO))
-!  ALLOCATE(ZLBDAR_RF(IMICRO))
-!  ALLOCATE(ZLBDAS(IMICRO))
-!  ALLOCATE(ZLBDAG(IMICRO))
-!  IF ( KRR == 7 ) THEN
-!    ALLOCATE(ZLBDAH(IMICRO))
-!  ELSE
-!    ALLOCATE(ZLBDAH(0))
-!  END IF
-!  ALLOCATE(ZRDRYG(IMICRO))
-!  ALLOCATE(ZRWETG(IMICRO))
-!  ALLOCATE(ZAI(IMICRO))
-!  ALLOCATE(ZCJ(IMICRO))
-!  ALLOCATE(ZKA(IMICRO))
-!  ALLOCATE(ZDV(IMICRO))
-!!
-!  IF ( KRR == 7 ) THEN
-!    ALLOCATE(ZZW1(IMICRO,7))
-!  ELSE IF( KRR == 6 ) THEN
-!    ALLOCATE(ZZW1(IMICRO,6))
-!  ENDIF
-!!
-!  IF (LBU_ENABLE .OR. LLES_CALL .OR. LCHECK ) THEN
-!    ALLOCATE(ZRHODJ(IMICRO))
-!    DO JL=1,IMICRO
-!      ZRHODJ(JL) = PRHODJ(I1(JL),I2(JL),I3(JL))
-!    END DO
-!  ELSE
-!    ALLOCATE(ZRHODJ(0))
-!  END IF
-!!
+!MNH_LIC Copyright 1995-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.
+!-----------------------------------------------------------------
+!     ######spl
+       MODULE MODI_RAIN_ICE_OLD
+!      ####################
 !
-!  !Cloud water split between high and low content part is done here
-!  !according to autoconversion option
-!  ZRCRAUTC(:)   = XCRIAUTC/ZRHODREF(:) ! Autoconversion rc threshold
-!  IF (HSUBG_AUCV == 'NONE') THEN
-!    !Cloud water is entirely in low or high part
-!    WHERE (ZRCT(:) > ZRCRAUTC(:))
-!      ZHLC_HCF(:) = 1.
-!      ZHLC_LCF(:) = 0.0
-!      ZHLC_HRC(:) = ZRCT(:)
-!      ZHLC_LRC(:) = 0.0
-!      ZRF(:)      = 1.
-!    ELSEWHERE (ZRCT(:) > XRTMIN(2))
-!      ZHLC_HCF(:) = 0.0
-!      ZHLC_LCF(:) = 1.
-!      ZHLC_HRC(:) = 0.0
-!      ZHLC_LRC(:) = ZRCT(:)
-!      ZRF(:)      = 0.
-!    ELSEWHERE
-!      ZHLC_HCF(:) = 0.0
-!      ZHLC_LCF(:) = 0.0
-!      ZHLC_HRC(:) = 0.0
-!      ZHLC_LRC(:) = 0.0
-!      ZRF(:)      = 0.
-!    END WHERE
-!
-!  ELSEIF (HSUBG_AUCV == 'CLFR') THEN
-!    !Cloud water is only in the cloudy part and entirely in low or high part
-!      WHERE (ZCF(:) > 0. .AND. ZRCT(:) > ZRCRAUTC(:)*ZCF(:))
-!        ZHLC_HCF(:) = ZCF(:)
-!        ZHLC_LCF(:) = 0.0
-!        ZHLC_HRC(:) = ZRCT(:)
-!        ZHLC_LRC(:) = 0.0
-!        ZRF(:)      = ZCF(:)
-!      ELSEWHERE (ZCF(:) > 0. .AND. ZRCT(:) > XRTMIN(2))
-!        ZHLC_HCF(:) = 0.0
-!        ZHLC_LCF(:) = ZCF(:)
-!        ZHLC_HRC(:) = 0.0
-!        ZHLC_LRC(:) = ZRCT(:)
-!        ZRF(:)      = 0.
-!      ELSEWHERE (ZCF(:) > 0.)
-!        ZHLC_HCF(:) = 0.0
-!        ZHLC_LCF(:) = 0.0
-!        ZHLC_HRC(:) = 0.0
-!        ZHLC_LRC(:) = 0.0
-!        ZRF(:)      = 0.
-!      ELSEWHERE
-!        ZHLC_HCF(:) = 0.0
-!        ZHLC_LCF(:) = 0.0
-!        ZHLC_HRC(:) = 0.0
-!        ZHLC_LRC(:) = 0.0
-!        ZRF(:)      = 0.
-!      END WHERE
-!
-!  ELSEIF (HSUBG_AUCV == 'PDF ') THEN
-!    !Cloud water is split between high and low part according to a PDF
-!    !    'HLCRECTPDF'    : rectangular PDF form
-!    !    'HLCTRIANGPDF'  : triangular PDF form
-!    !    'HLCQUADRAPDF'  : second order quadratic PDF form
-!    !    'HLCISOTRIPDF'  : isocele triangular PDF
-!    !    'SIGM'          : Redelsperger and Sommeria (1986)
-!
-!    IF ( CSUBG_PR_PDF == 'SIGM' ) THEN
-!      ! Redelsperger and Sommeria (1986) but organised according to Turner (2011, 2012)
-!      WHERE ( ZRCT(:) > ZRCRAUTC(:) + ZSIGMA_RC(:))
-!        ZHLC_HCF(:) = 1.
-!        ZHLC_LCF(:) = 0.0
-!        ZHLC_HRC(:) = ZRCT(:)
-!        ZHLC_LRC(:) = 0.0
-!        ZRF(:)      = 1.
-!      ELSEWHERE ( ZRCT(:) >  ( ZRCRAUTC(:) - ZSIGMA_RC(:) ) .AND. &
-!                & ZRCT(:) <= ( ZRCRAUTC(:) + ZSIGMA_RC(:) )       )
-!        ZHLC_HCF(:) = (ZRCT(:)+ZSIGMA_RC(:)-ZRCRAUTC(:))/ &
-!                     &(2.*ZSIGMA_RC(:))
-!        ZHLC_LCF(:) = MAX(0., ZCF(:)-ZHLC_HCF(:))
-!        ZHLC_HRC(:) = (ZRCT(:)+ZSIGMA_RC(:)-ZRCRAUTC(:))* &
-!                     &(ZRCT(:)+ZSIGMA_RC(:)+ZRCRAUTC(:))/ &
-!                     &(4.*ZSIGMA_RC(:))
-!        ZHLC_LRC(:) = MAX(0., ZRCT(:)-ZHLC_HRC(:))
-!        ZRF(:)      = ZHLC_HCF(:)
-!      ELSEWHERE ( ZRCT(:)>XRTMIN(2) .AND. ZCF(:)>0. )
-!        ZHLC_LCF(:) = 0.0
-!        ZHLC_LCF(:) = ZCF(:)
-!        ZHLC_HRC(:) = 0.0
-!        ZHLC_LRC(:) = ZRCT(:)
-!        ZRF(:)      = 0.
-!      ELSEWHERE
-!        ZHLC_HCF(:) = 0.0
-!        ZHLC_LCF(:) = 0.0
-!        ZHLC_HRC(:) = 0.0
-!        ZHLC_LRC(:) = 0.0
-!        ZRF(:)      = 0.
-!      END WHERE
-!
-!    ! Turner (2011, 2012)
-!    ELSEIF ( CSUBG_PR_PDF== 'HLCRECTPDF' .OR. CSUBG_PR_PDF == 'HLCISOTRIPDF' .OR. &
-!           & CSUBG_PR_PDF == 'HLCTRIANGPDF' .OR. CSUBG_PR_PDF == 'HLCQUADRAPDF' ) THEN
-!      ! Calculate maximum value r_cM from PDF forms
-!      IF ( CSUBG_PR_PDF == 'HLCRECTPDF' .OR. CSUBG_PR_PDF == 'HLCISOTRIPDF' ) THEN
-!        ZCOEFFRCM = 2.0
-!      ELSE IF ( CSUBG_PR_PDF == 'HLCTRIANGPDF' ) THEN
-!        ZCOEFFRCM = 3.0
-!      ELSE IF ( CSUBG_PR_PDF == 'HLCQUADRAPDF' ) THEN
-!        ZCOEFFRCM = 4.0
-!      END IF
-!      WHERE (ZRCT(:).GT.0. .AND. ZCF(:).GT.0.)
-!        ZHLC_RCMAX(:) = ZCOEFFRCM * ZRCT(:) / ZCF(:)
-!      END WHERE
-!
-!      ! Split available water and cloud fraction in two parts
-!      ! Calculate local mean values int he low and high parts for the 3 PDF forms:
-!      IF ( CSUBG_PR_PDF == 'HLCRECTPDF' ) THEN
-!        WHERE (ZRCT(:).GT.0. .AND. ZCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:))
-!          ZHLC_LRCLOCAL(:) = 0.5*ZRCRAUTC(:)
-!          ZHLC_HRCLOCAL(:) = ( ZHLC_RCMAX(:) + ZRCRAUTC(:)) / 2.0
-!        END WHERE
-!      ELSE IF ( CSUBG_PR_PDF == 'HLCTRIANGPDF' ) THEN
-!        WHERE (ZRCT(:).GT.0. .AND. ZCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:))
-!          ZHLC_LRCLOCAL(:) = ( ZRCRAUTC(:) *(3.0 * ZHLC_RCMAX(:) - 2.0 * ZRCRAUTC(:) ) ) &
-!                          / (3.0 * (2.0 * ZHLC_RCMAX(:) - ZRCRAUTC(:)  ) )
-!          ZHLC_HRCLOCAL(:) = (ZHLC_RCMAX(:) + 2.0*ZRCRAUTC(:)) / 3.0
-!        END WHERE
-!      ELSE IF ( CSUBG_PR_PDF == 'HLCQUADRAPDF' ) THEN
-!        WHERE (ZRCT(:).GT.0. .AND. ZCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:))
-!          ZHLC_LRCLOCAL(:) = (3.0 *ZRCRAUTC(:)**3 - 8.0 *ZRCRAUTC(:)**2 * ZHLC_RCMAX(:) &
-!                          + 6.0*ZRCRAUTC(:) *ZHLC_RCMAX(:)**2 ) &
-!                          / &
-!                          (4.0* ZRCRAUTC(:)**2 -12.0*ZRCRAUTC(:) *ZHLC_RCMAX(:) &
-!                          + 12.0 * ZHLC_RCMAX(:)**2 )
-!          ZHLC_HRCLOCAL(:) =  (ZHLC_RCMAX(:) + 3.0*ZRCRAUTC(:)) / 4.0
-!        END WHERE
-!      ELSE IF ( CSUBG_PR_PDF == 'HLCISOTRIPDF' ) THEN
-!        WHERE (ZRCT(:).GT.0. .AND. ZCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:))
-!          WHERE ( (ZRCT(:) / ZCF(:)).LE.ZRCRAUTC(:) )
-!            ZHLC_LRCLOCAL(:) = ( (ZHLC_RCMAX(:))**3 &
-!                             - (12.0 * (ZHLC_RCMAX(:))*(ZRCRAUTC(:))**2) &
-!                             + (8.0 * ZRCRAUTC(:)**3) ) &
-!                             / ( (6.0 * (ZHLC_RCMAX(:))**2) &
-!                             - (24.0 * (ZHLC_RCMAX(:)) * ZRCRAUTC(:)) &
-!                             + (12.0 * ZRCRAUTC(:)**2) )
-!            ZHLC_HRCLOCAL(:) = ( ZHLC_RCMAX(:) + 2.0 * ZRCRAUTC(:) ) / 3.0
-!          ELSEWHERE
-!            ZHLC_LRCLOCAL(:) = (2.0/3.0) * ZRCRAUTC(:)
-!            ZHLC_HRCLOCAL(:) = (3.0*ZHLC_RCMAX(:)**3 - 8.0*ZRCRAUTC(:)**3) &
-!                             / (6.0 * ZHLC_RCMAX(:)**2 - 12.0*ZRCRAUTC(:)**2)
-!          END WHERE
-!        END WHERE
-!      END IF
-!
-!      ! Compare r_cM  to r_cR to know if cloud water content is high enough to split in two parts or not
-!      WHERE (ZRCT(:).GT.0. .AND. ZCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:))
-!        ! Calculate final values for LCF and HCF:
-!        ZHLC_LCF(:) = ZCF(:) &
-!                       * ( ZHLC_HRCLOCAL - &
-!                       ( ZRCT(:) / ZCF(:) ) ) &
-!                       / (ZHLC_HRCLOCAL - ZHLC_LRCLOCAL)
-!        ZHLC_HCF(:) = MAX(0., ZCF(:) - ZHLC_LCF(:))
-!        !
-!        ! Calculate final values for LRC and HRC:
-!        ZHLC_LRC(:) = ZHLC_LRCLOCAL * ZHLC_LCF(:)
-!        ZHLC_HRC(:) = MAX(0., ZRCT(:) - ZHLC_LRC(:))
-!      ELSEWHERE (ZRCT(:).GT.0. .AND. ZCF(:).GT.0. .AND. ZHLC_RCMAX(:).LE.ZRCRAUTC(:))
-!        ! Put all available cloud water and his fraction in the low part
-!        ZHLC_LCF(:) = ZCF(:)
-!        ZHLC_HCF(:) = 0.0
-!        ZHLC_LRC(:) = ZRCT(:)
-!        ZHLC_HRC(:) = 0.0
-!      ELSEWHERE
-!        ZHLC_LCF(:) = 0.
-!        ZHLC_HCF(:) = 0.0
-!        ZHLC_LRC(:) = 0.
-!        ZHLC_HRC(:) = 0.0
-!      END WHERE
-!
-!      ZRF(:)=ZHLC_HCF(:) !Precipitation fraction
-!
-!    ELSE
-!      !wrong CSUBG_PR_PDF case
-!      WRITE(*,*) 'wrong CSUBG_PR_PDF case'
-!      CALL PRINT_MSG(NVERB_FATAL,'GEN','RAIN_ICE_OLD','')      
-!    ENDIF
-!  ELSE
-!    !wrong HSUBG_AUCV case
-!    WRITE(*,*)'wrong HSUBG_AUCV case'
-!    CALL PRINT_MSG(NVERB_FATAL,'GEN','RAIN_ICE_OLD','')  
-!  ENDIF
-!
-!  !Diagnostic of precipitation fraction
-!  PRAINFR(:,:,:) = 0.
-!  DO JL=1,IMICRO
-!    PRAINFR(I1(JL),I2(JL),I3(JL)) = ZRF(JL)
-!  END DO
-!  CALL ICE4_RAINFR_VERT( IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKT, KKL, PRAINFR, PRRT(:,:,:),      &
-!                         RESHAPE( SOURCE = [ ( 0., JL = 1, SIZE( PRSS ) ) ], SHAPE = SHAPE( PRSS ) ), &
-!                         RESHAPE( SOURCE = [ ( 0., JL = 1, SIZE( PRGS ) ) ], SHAPE = SHAPE( PRGS ) )  )
-!  DO JL=1,IMICRO
-!    ZRF(JL)=PRAINFR(I1(JL),I2(JL),I3(JL))
-!  END DO
-!!
-!  CALL RAIN_ICE_SLOW(GMICRO, ZINVTSTEP, ZRHODREF,                      &
-!                     ZRCT, ZRRT, ZRIT, ZRST, ZRGT, ZRHODJ, ZZT, ZPRES, &
-!                     ZLSFACT, ZLVFACT, ZSSI,                           &
-!                     ZRVS, ZRCS, ZRRS, ZRIS, ZRSS, ZRGS, ZTHS,         &
-!                     ZAI, ZCJ, ZKA, ZDV, ZLBDAS, ZLBDAG)
-!!
-!!-------------------------------------------------------------------------------
-!!
-!!
-!!*       3.     COMPUTES THE SLOW WARM PROCESS SOURCES
-!!               --------------------------------------
-!!
-!!*       3.1    compute the slope parameter Lbda_r
-!!
-!  !ZLBDAR will be used when we consider rain diluted over the grid box
-!  WHERE( ZRRT(:)>0.0 )
-!    ZLBDAR(:)  = XLBR*( ZRHODREF(:)*MAX( ZRRT(:),XRTMIN(3) ) )**XLBEXR
-!  END WHERE
-!  !ZLBDAR_RF will be used when we consider rain concentrated in its fraction
-!  WHERE( ZRRT(:)>0.0 .AND. ZRF(:)>0.0 )
-!    ZLBDAR_RF(:)  = XLBR*( ZRHODREF(:) *MAX( ZRRT(:)/ZRF(:)  , XRTMIN(3) ) )**XLBEXR
-!  ELSEWHERE
-!    ZLBDAR_RF(:)  = 0.
-!  END WHERE
-!!
-!  IF( OWARM ) THEN    !  Check if the formation of the raindrops by the slow
-!                      !  warm processes is allowed
-!    PEVAP3D(:,:,:)= 0.
-!    CALL RAIN_ICE_WARM(GMICRO, IMICRO, I1, I2, I3,                                                           &
-!                       ZRHODREF, ZRVT, ZRCT, ZRRT, ZHLC_HCF, ZHLC_LCF, ZHLC_HRC, ZHLC_LRC,                   &
-!                       ZRHODJ, ZPRES, ZZT, ZLBDAR, ZLBDAR_RF, ZLVFACT, ZCJ, ZKA, ZDV, ZRF, ZCF, ZTHT, ZTHLT, &
-!                       ZRVS, ZRCS, ZRRS, ZTHS, ZUSW, PEVAP3D)
-!  END IF
-!!
-!!-------------------------------------------------------------------------------
-!!
-!!
-!!*       4.     COMPUTES THE FAST COLD PROCESS SOURCES FOR r_s
-!!               ----------------------------------------------
-!!
-!  CALL RAIN_ICE_FAST_RS(PTSTEP, GMICRO, ZRHODREF, ZRVT, ZRCT, ZRRT, ZRST, ZRHODJ, ZPRES, ZZT, &
-!                        ZLBDAR, ZLBDAS, ZLSFACT, ZLVFACT, ZCJ, ZKA, ZDV, &
-!                        ZRCS, ZRRS, ZRSS, ZRGS, ZTHS)
-!!
-!!-------------------------------------------------------------------------------
-!!
-!!
-!!*       5.     COMPUTES THE FAST COLD PROCESS SOURCES FOR r_g
-!!               ----------------------------------------------
-!!
-!  CALL RAIN_ICE_FAST_RG(KRR, GMICRO, ZRHODREF, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, ZCIT, &
-!                        ZRHODJ, ZPRES, ZZT, ZLBDAR, ZLBDAS, ZLBDAG, ZLSFACT, ZLVFACT, &
-!                        ZCJ, ZKA, ZDV, &
-!                        ZRCS, ZRRS, ZRIS, ZRSS, ZRGS, ZRHS, ZTHS, &
-!                        ZUSW, ZRDRYG, ZRWETG)
-!!
-!!-------------------------------------------------------------------------------
-!!
-!!
-!!*       6.     COMPUTES THE FAST COLD PROCESS SOURCES FOR r_h
-!!               ----------------------------------------------
-!!
-! IF ( KRR == 7 ) THEN
-!  CALL RAIN_ICE_FAST_RH(GMICRO, ZRHODREF, ZRVT, ZRCT, ZRIT, ZRST, ZRGT, ZRHT, ZRHODJ, ZPRES, &
-!                        ZZT, ZLBDAS, ZLBDAG, ZLBDAH, ZLSFACT, ZLVFACT, ZCJ, ZKA, ZDV, &
-!                        ZRCS, ZRRS, ZRIS, ZRSS, ZRGS, ZRHS, ZTHS, ZUSW)
-! END IF
-!!
-!!-------------------------------------------------------------------------------
-!!
-!!
-!!*       7.     COMPUTES SPECIFIC SOURCES OF THE WARM AND COLD CLOUDY SPECIES
-!!               -------------------------------------------------------------
-!!
-!  CALL RAIN_ICE_FAST_RI(GMICRO, ZRHODREF, ZRIT, ZRHODJ, ZZT, ZSSI, ZLSFACT, ZLVFACT, &
-!                        ZAI, ZCJ, ZCIT, ZRCS, ZRIS, ZTHS)
-!!
-!!
-!!-------------------------------------------------------------------------------
-!!
-!!
-!!
-!  DO JL=1,IMICRO
-!    PRVS(I1(JL),I2(JL),I3(JL)) = ZRVS(JL)
-!    PRCS(I1(JL),I2(JL),I3(JL)) = ZRCS(JL)
-!    PRRS(I1(JL),I2(JL),I3(JL)) = ZRRS(JL)
-!    PRIS(I1(JL),I2(JL),I3(JL)) = ZRIS(JL)
-!    PRSS(I1(JL),I2(JL),I3(JL)) = ZRSS(JL)
-!    PRGS(I1(JL),I2(JL),I3(JL)) = ZRGS(JL)
-!    PTHS(I1(JL),I2(JL),I3(JL)) = ZTHS(JL)
-!    PCIT(I1(JL),I2(JL),I3(JL)) = ZCIT(JL)
-!    !
-!    PRAINFR(I1(JL),I2(JL),I3(JL)) = ZRF(JL)
-!  END DO
-!  IF ( KRR == 7 ) THEN
-!    DO JL=1,IMICRO
-!      PRHS(I1(JL),I2(JL),I3(JL)) = ZRHS(JL)
-!    END DO
-!  END IF
-!!
-!!
-!!
-!  DEALLOCATE(ZZW1)
-!  DEALLOCATE(ZDV)
-!  DEALLOCATE(ZCJ)
-!  DEALLOCATE(ZRDRYG)
-!  DEALLOCATE(ZRWETG)
-!  DEALLOCATE(ZLBDAG)
-!  DEALLOCATE(ZLBDAH)
-!  DEALLOCATE(ZLBDAS)
-!  DEALLOCATE(ZLBDAR)
-!  DEALLOCATE(ZLBDAR_RF)
-!  DEALLOCATE(ZSSI)
-!  DEALLOCATE(ZUSW)
-!  DEALLOCATE(ZLVFACT)
-!  DEALLOCATE(ZLSFACT)
-!  DEALLOCATE(ZZW)
-!  DEALLOCATE(ZEXNREF)
-!  DEALLOCATE(ZPRES)
-!  DEALLOCATE(ZRHODREF)
-!  DEALLOCATE(ZZT)
-!  IF(LBU_ENABLE .OR. LLES_CALL .OR. LCHECK ) DEALLOCATE(ZRHODJ)
-!  DEALLOCATE(ZTHS)
-!  DEALLOCATE(ZTHT)
-!  DEALLOCATE(ZTHLT)
-!  DEALLOCATE(ZRHS)
-!  DEALLOCATE(ZRGS)
-!  DEALLOCATE(ZRSS)
-!  DEALLOCATE(ZRIS)
-!  DEALLOCATE(ZRRS)
-!  DEALLOCATE(ZRCS)
-!  DEALLOCATE(ZRVS)
-!  DEALLOCATE(ZCIT)
-!  DEALLOCATE(ZRGT)
-!  DEALLOCATE(ZRHT)
-!  DEALLOCATE(ZRST)
-!  DEALLOCATE(ZRIT)
-!  DEALLOCATE(ZRRT)
-!  DEALLOCATE(ZAI)
-!  DEALLOCATE(ZRCT)
-!  DEALLOCATE(ZKA)
-!  DEALLOCATE(ZRVT)
-!  DEALLOCATE(ZSIGMA_RC)
-!  DEALLOCATE(ZCF)
-!  DEALLOCATE(ZRF)
-!  DEALLOCATE(ZHLC_HCF)
-!  DEALLOCATE(ZHLC_LCF)
-!  DEALLOCATE(ZHLC_HRC)
-!  DEALLOCATE(ZHLC_LRC)
-!  DEALLOCATE(ZHLC_RCMAX)
-!  DEALLOCATE(ZRCRAUTC)
-!  DEALLOCATE(ZHLC_HRCLOCAL)
-!  DEALLOCATE(ZHLC_LRCLOCAL)
-!END IF
-!!
-!!-------------------------------------------------------------------------------
-!!
-!!*       8.     COMPUTE THE SEDIMENTATION (RS) SOURCE
-!!               -------------------------------------
-!!
-!!*       8.1    time splitting loop initialization
-!!
-!!
-!!
-!IF (HSEDIM == 'STAT') THEN
-!  CALL RAIN_ICE_SEDIMENTATION_STAT( IIB, IIE, IJB, IJE, IKB, IKE, IKTB, IKTE, IKT, KKL, KRR,                &
-!                                    PTSTEP, OSEDIC, PINPRC, PINDEP,                                         &
-!                                    PINPRR, PINPRS, PINPRG, PDZZ, PRHODREF, PPABST, PTHT, PRHODJ, PINPRR3D, &
-!                                    PRCS, PRCT, PRRS, PRRT, PRIS, PRSS, PRST, PRGS, PRGT,                   &
-!                                    PSEA, PTOWN, PINPRH, PRHS, PRHT, PFPR )
-!ELSEIF (HSEDIM == 'SPLI') THEN
-!  CALL RAIN_ICE_SEDIMENTATION_SPLIT(IIB, IIE, IJB, IJE, IKB, IKE, IKTB, IKTE, IKT, KKL,&
-!  KSPLITR,PTSTEP, &
-!  KRR,OSEDIC,LDEPOSC,PINPRC,PINDEP,PINPRR,PINPRS,PINPRG,PDZZ,PRHODREF,PPABST,PTHT,PRHODJ,&
-!      PINPRR3D,PRCS,PRCT,PRRS,PRRT,PRIS,PRIT,PRSS,PRST,PRGS,PRGT,PSEA,PTOWN,PINPRH,PRHS,PRHT,PFPR)
-!ELSE
-!  call Print_msg( NVERB_FATAL, 'GEN', 'RAIN_ICE_OLD', 'no sedimentation scheme for HSEDIM='//HSEDIM )
-!END IF
-!!sedimentation of rain fraction
-!CALL ICE4_RAINFR_VERT(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKT, KKL, PRAINFR, PRRS(:,:,:)*PTSTEP,  &
-!                      PRSS(:,:,:)*PTSTEP, PRGS(:,:,:)*PTSTEP)
-!!
-!!-------------------------------------------------------------------------------
-!!
-!END SUBROUTINE RAIN_ICE_OLD
+INTERFACE
+      SUBROUTINE RAIN_ICE_OLD (D, OSEDIC,HSEDIM, HSUBG_AUCV, OWARM, KKA, KKU, KKL,      &
+                            KSPLITR, PTSTEP, KRR,                            &
+                            PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,&
+                            PTHT, PRVT, PRCT, PRRT, PRIT, PRST, &
+                            PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, &
+                            PINPRC,PINPRR, PINPRR3D, PEVAP3D,           &
+                            PINPRS, PINPRG, PSIGS, PINDEP, PRAINFR, PSEA, PTOWN,  &
+                            PRHT, PRHS, PINPRH, PFPR                        )
+!
+USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
+!
+TYPE(DIMPHYEX_t),         INTENT(IN)    :: D
+LOGICAL,                  INTENT(IN)    :: OSEDIC ! Switch for droplet sedim.
+CHARACTER(LEN=4),         INTENT(IN)    :: HSEDIM ! Sedimentation scheme
+CHARACTER(LEN=4),         INTENT(IN)    :: HSUBG_AUCV ! Switch for rc->rr Subgrid autoconversion
+                                        ! Kind of Subgrid autoconversion method
+LOGICAL,                  INTENT(IN)    :: OWARM   ! .TRUE. allows raindrops to
+                                                   !   form by warm processes
+                                                   !      (Kessler scheme)
+!
+INTEGER,                  INTENT(IN)    :: KKA   !near ground array index  
+INTEGER,                  INTENT(IN)    :: KKU   !uppest atmosphere array index
+INTEGER,                  INTENT(IN)    :: KKL   !vert. levels type 1=MNH -1=ARO
+INTEGER,                  INTENT(IN)    :: KSPLITR ! Number of small time step 
+                                      ! integration for  rain sedimendation
+REAL,                     INTENT(IN)    :: PTSTEP  ! Double Time step
+                                                   ! (single if cold start)
+INTEGER,                  INTENT(IN)    :: KRR     ! Number of moist variable
+!
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDZZ     ! Layer thikness (m)
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ  ! Dry density * Jacobian
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF! Reference density
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF ! Reference Exner function
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST  ! absolute pressure at t
+!
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCIT    ! Pristine ice n.c. at t
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCLDFR  ! Cloud fraction
+!
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT    ! Theta at time t
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRVT    ! Water vapor m.r. at t 
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t 
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT    ! Rain water m.r. at t 
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRIT    ! Pristine ice m.r. at t
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRGT    ! Graupel/hail m.r. at t
+!
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PSIGS   ! Sigma_s at t
+!
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS    ! Theta source
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRVS    ! Water vapor m.r. source
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRCS    ! Cloud water m.r. source
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRRS    ! Rain water m.r. source
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRIS    ! Pristine ice m.r. source
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRSS    ! Snow/aggregate m.r. source
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRGS    ! Graupel m.r. source
+!
+REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRC! Cloud instant precip
+REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINDEP  ! Cloud instant deposition
+REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRR! Rain instant precip
+REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PINPRR3D! Rain inst precip 3D
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PEVAP3D! Rain evap profile
+REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRS! Snow instant precip
+REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRG! Graupel instant precip
+REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PRAINFR! Rain fraction
+REAL, DIMENSION(:,:),     OPTIONAL, INTENT(IN)    :: PSEA ! Sea Mask
+REAL, DIMENSION(:,:),     OPTIONAL, INTENT(IN)    :: PTOWN! Fraction that is town
+REAL, DIMENSION(:,:,:),   OPTIONAL, INTENT(IN)    :: PRHT    ! Hail m.r. at t
+REAL, DIMENSION(:,:,:),   OPTIONAL, INTENT(INOUT) :: PRHS    ! Hail m.r. source
+REAL, DIMENSION(:,:),     OPTIONAL, INTENT(INOUT) :: PINPRH! Hail instant precip
+REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(OUT)   :: PFPR ! upper-air precipitation fluxes
+!
+END SUBROUTINE RAIN_ICE_OLD
+END INTERFACE
+END MODULE MODI_RAIN_ICE_OLD
+!     ######spl
+      SUBROUTINE RAIN_ICE_OLD (D, OSEDIC,HSEDIM, HSUBG_AUCV, OWARM, KKA, KKU, KKL,      &
+                            KSPLITR, PTSTEP, KRR,                            &
+                            PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,&
+                            PTHT, PRVT, PRCT, PRRT, PRIT, PRST, &
+                            PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, &
+                            PINPRC,PINPRR, PINPRR3D, PEVAP3D,           &
+                            PINPRS, PINPRG, PSIGS, PINDEP, PRAINFR, PSEA, PTOWN,  &
+                            PRHT, PRHS, PINPRH, PFPR                        )
+!     ######################################################################
+!
+!!****  * -  compute the explicit microphysical sources
+!!
+!!    PURPOSE
+!!    -------
+!!      The purpose of this routine is to compute the slow microphysical sources
+!!    which can be computed explicitly
+!!
+!!
+!!**  METHOD
+!!    ------
+!!      The autoconversion computation follows Kessler (1969).
+!!      The sedimentation rate is computed with a time spliting technique and
+!!    an upstream scheme, written as a difference of non-advective fluxes. This
+!!    source term is added to the future instant ( split-implicit process ).
+!!      The others microphysical processes are evaluated at the central instant
+!!    (split-explicit process ): autoconversion, accretion and rain evaporation.
+!!      These last 3 terms are bounded in order not to create negative values
+!!    for the water species at the future instant.
+!!
+!!    EXTERNAL
+!!    --------
+!!      None
+!!
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!      Module MODD_PARAMETERS
+!!          JPHEXT       : Horizontal external points number
+!!          JPVEXT       : Vertical external points number
+!!      Module MODD_CONF :
+!!          CCONF configuration of the model for the first time step
+!!      Module MODD_CST
+!!          XP00               ! Reference pressure
+!!          XRD,XRV            ! Gaz  constant for dry air, vapor
+!!          XMD,XMV            ! Molecular weight for dry air, vapor
+!!          XCPD               ! Cpd (dry air)
+!!          XCL                ! Cl (liquid)
+!!          XCI                ! Ci (solid)
+!!          XTT                ! Triple point temperature
+!!          XLVTT              ! Vaporization heat constant
+!!          XALPW,XBETAW,XGAMW ! Constants for saturation vapor pressure
+!!                               function over liquid water
+!!          XALPI,XBETAI,XGAMI ! Constants for saturation vapor pressure
+!!                               function over solid ice
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!      Book1 and Book2 of documentation ( routine RAIN_ICE_OLD )
+!!
+!!    AUTHOR
+!!    ------
+!!      J.-P. Pinty      * Laboratoire d'Aerologie*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    02/11/95
+!!      (J.Viviand) 04/02/97  debug accumulated prcipitation & convert
+!!                            precipitation rate in m/s
+!!      (J.-P. Pinty) 17/02/97  add budget calls
+!!      (J.-P. Pinty) 17/11/97  set ice sedim. for cirrus ice, reset RCHONI
+!!                              and RRHONG, reverse order for DEALLOCATE
+!!      (J.-P. Pinty) 11/02/98  correction of the air dynamical viscosity and
+!!                              add advance of the budget calls
+!!      (J.-P. Pinty) 18/05/98  correction of the air density in the RIAUTS
+!!                              process
+!!      (J.-P. Pinty) 18/11/98  split the main routine
+!!      (V. Masson)   18/11/98  bug in IVEC1 and IVEC2 upper limits
+!!      (J. Escobar & J.-P. Pinty)
+!!                    11/12/98  contains and rewrite count+pack
+!!      (J. Stein & J.-P. Pinty)
+!!                    14/10/99  correction for very small RIT
+!!      (J. Escobar & J.-P. Pinty)
+!!                    24/07/00  correction for very samll m.r. in
+!!                              the sedimentation subroutine
+!!      (M. Tomasini) 11/05/01  Autoconversion of rc into rr modification to take
+!!                              into account the subgrid variance
+!!                              (cf Redelsperger & Sommeria JAS 86)
+!!      (G. Molinie)  21/05/99  bug in RRCFRIG process, RHODREF**(-1) missing
+!!                              in RSRIMCG
+!!      (G. Molinie & J.-P. Pinty)
+!!                    21/06/99  bug in RACCS process
+!!      (P. Jabouille) 27/05/04 safety test for case where esw/i(T)> pabs (~Z>40km)
+!!      (J-.P. Chaboureau) 12/02/05  temperature depending ice-to-snow autocon-
+!                              version threshold (Chaboureau and Pinty GRL 2006)
+!!      (J.-P. Pinty) 01/01/O1  add the hail category and correction of the
+!!                              wet growth rate of the graupeln
+!!      (S.Remy & C.Lac) 06/06 Add the cloud sedimentation
+!!      (S.Remy & C.Lac) 06/06 Sedimentation becoming the last process
+!!      to settle the precipitating species created during the current time step
+!!      (S.Remy & C.Lac) 06/06 Modification of the algorithm of sedimentation
+!!      to settle n times the precipitating species created during Dt/n instead
+!!      of Dt
+!!      (C.Lac) 11/06 Optimization of the sedimentation loop for NEC
+!!      (J.Escobar) 18/01/2008 Parallel Bug in Budget when IMICRO >= 1
+!!                  --> Path inhibit this test by IMICRO >= 0 allway true
+!!      (Y.Seity) 03/2008 Add Statistic sedimentation
+!!      (Y.Seity) 10/2009 Added condition for the raindrop accretion of the aggregates
+!!         into graupeln process (5.2.6) to avoid negative graupel mixing ratio
+!!      (V.Masson, C.Lac) 09/2010 Correction in split sedimentation for
+!!                                reproducibility
+!!      (S. Riette) Oct 2010 Better vectorisation of RAIN_ICE_SEDIMENTATION_STAT
+!!      (Y. Seity), 02-2012  add possibility to run with reversed vertical levels
+!!      (L. Bengtsson), 02-2013 Passing in land/sea mask and town fraction in
+!!                      order to use different cloud droplet number conc. over
+!!                      land, sea and urban areas in the cloud sedimentation.
+!!      (D. Degrauwe), 2013-11: Export upper-air precipitation fluxes PFPR.
+!!      (S. Riette) Nov 2013 Protection against null sigma
+!!      (C. Lac) FIT temporal scheme : instant M removed
+!!      (JP Pinty), 01-2014 : ICE4 : partial reconversion of hail to graupel
+!!              July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for
+!!                                      aircraft, ballon and profiler
+!!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
+!!      C.Lac : 10/2016 : add droplet deposition
+!!      C.Lac : 01/2017 : correction on droplet deposition
+!!      J.Escobar : 10/2017 : for real*4 , limit exp() in RAIN_ICE_SLOW with XMNH_HUGE_12_LOG
+!!      (C. Abiven, Y. Léauté, V. Seigner, S. Riette) Phasing of Turner rain subgrid param
+!!      J.Escobar : 8/2018 : for real*4 , bis => limit exp() in RAIN_ICE_SLOW with XMNH_HUGE_12_LOG
+!!      P.Wautelet 01/02/2019: add missing initialization for PFPR
+!!                   02/2019 C.Lac add rain fraction as an output field
+!  P. Wautelet 25/02/2019: split rain_ice (cleaner and easier to maintain/debug)
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
+!  P. Wautelet 28/05/2019: move COUNTJV function to tools.f90
+!  P. Wautelet 29/05/2019: remove PACK/UNPACK intrinsics (to get more performance and better OpenACC support)
+!  J. Escobar  09/07/2019: for reproductiblity MPPDB_CHECK, add missing LCHECK test in ZRHODJ de/allocate
+!  P. Wautelet    02/2020: use the new data structures and subroutines for budgets (no more budget calls in this subroutine)
+!-----------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+use modd_budget,         only: lbu_enable
+use MODD_CONF,           only: LCHECK
+use MODD_CST,            only: XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XTT, &
+                               XALPI, XBETAI, XGAMI, XMD, XMV, XTT
+use MODD_LES,            only: LLES_CALL
+use MODD_PARAMETERS,     only: JPVEXT
+use MODD_PARAM_ICE,      only: CSUBG_PR_PDF, LDEPOSC
+use MODD_RAIN_ICE_DESCR, only: RAIN_ICE_DESCR, XLBEXR, XLBR, XRTMIN
+use MODD_RAIN_ICE_PARAM, only: XCRIAUTC
+USE MODD_DIMPHYEX,       ONLY: DIMPHYEX_t
+
+use MODE_MSG
+use MODE_RAIN_ICE_FAST_RG,             only: RAIN_ICE_FAST_RG
+use MODE_RAIN_ICE_FAST_RH,             only: RAIN_ICE_FAST_RH
+use MODE_RAIN_ICE_FAST_RI,             only: RAIN_ICE_FAST_RI
+use MODE_RAIN_ICE_FAST_RS,             only: RAIN_ICE_FAST_RS
+use MODE_RAIN_ICE_NUCLEATION,          only: RAIN_ICE_NUCLEATION
+use MODE_RAIN_ICE_SEDIMENTATION_SPLIT, only: RAIN_ICE_SEDIMENTATION_SPLIT
+use MODE_RAIN_ICE_SEDIMENTATION_STAT,  only: RAIN_ICE_SEDIMENTATION_STAT
+use MODE_RAIN_ICE_SLOW,                only: RAIN_ICE_SLOW
+use MODE_RAIN_ICE_WARM,                only: RAIN_ICE_WARM
+use mode_tools,                        only: Countjv
+use mode_tools_ll,                     only: GET_INDICE_ll
+
+USE MODE_ICE4_RAINFR_VERT
+!
+
+IMPLICIT NONE
+!
+!*       0.1   Declarations of dummy arguments :
+!
+!
+!
+TYPE(DIMPHYEX_t),         INTENT(IN)    :: D
+LOGICAL,                  INTENT(IN)    :: OSEDIC ! Switch for droplet sedim.
+CHARACTER(LEN=4),         INTENT(IN)    :: HSEDIM ! Sedimentation scheme
+CHARACTER(LEN=4),         INTENT(IN)    :: HSUBG_AUCV ! Switch for rc->rr Subgrid autoconversion
+                                        ! Kind of Subgrid autoconversion method
+LOGICAL,                  INTENT(IN)    :: OWARM   ! .TRUE. allows raindrops to
+                                                   !   form by warm processes
+                                                   !      (Kessler scheme)
+!
+INTEGER,                  INTENT(IN)    :: KKA   !near ground array index
+INTEGER,                  INTENT(IN)    :: KKU   !uppest atmosphere array index
+INTEGER,                  INTENT(IN)    :: KKL   !vert. levels type 1=MNH -1=ARO
+INTEGER,                  INTENT(IN)    :: KSPLITR ! Number of small time step
+                                      ! integration for  rain sedimendation
+REAL,                     INTENT(IN)    :: PTSTEP  ! Double Time step
+                                                   ! (single if cold start)
+INTEGER,                  INTENT(IN)    :: KRR     ! Number of moist variable
+!
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDZZ     ! Layer thikness (m)
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ  ! Dry density * Jacobian
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF! Reference density
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF ! Reference Exner function
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST  ! absolute pressure at t
+!
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCIT    ! Pristine ice n.c. at t
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCLDFR  ! Cloud fraction
+!
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT    ! Theta at time t
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRVT    ! Water vapor m.r. at t
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT    ! Rain water m.r. at t
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRIT    ! Pristine ice m.r. at t
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRGT    ! Graupel/hail m.r. at t
+!
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PSIGS   ! Sigma_s at t
+!
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS    ! Theta source
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRVS    ! Water vapor m.r. source
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRCS    ! Cloud water m.r. source
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRRS    ! Rain water m.r. source
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRIS    ! Pristine ice m.r. source
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRSS    ! Snow/aggregate m.r. source
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRGS    ! Graupel m.r. source
+!
+REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRC! Cloud instant precip
+REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINDEP  ! Cloud instant deposition
+REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRR! Rain instant precip
+REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PINPRR3D! Rain inst precip 3D
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PEVAP3D! Rain evap profile
+REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRS! Snow instant precip
+REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRG! Graupel instant precip
+REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PRAINFR! Rain fraction
+REAL, DIMENSION(:,:),     OPTIONAL, INTENT(IN)    :: PSEA ! Sea Mask
+REAL, DIMENSION(:,:),     OPTIONAL, INTENT(IN)    :: PTOWN! Fraction that is town
+REAL, DIMENSION(:,:,:),   OPTIONAL, INTENT(IN)    :: PRHT    ! Hail m.r. at t
+REAL, DIMENSION(:,:,:),   OPTIONAL, INTENT(INOUT) :: PRHS    ! Hail m.r. source
+REAL, DIMENSION(:,:),     OPTIONAL, INTENT(INOUT) :: PINPRH! Hail instant precip
+REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(OUT)   :: PFPR ! upper-air precipitation fluxes
+!
+!*       0.2   Declarations of local variables :
+!
+INTEGER                           :: IIB           !  Define the domain where is
+INTEGER                           :: IIE           !  the microphysical sources have to be computed
+INTEGER                           :: IIT           !
+INTEGER                           :: IJB           !
+INTEGER                           :: IJE           !
+INTEGER                           :: IJT           !
+INTEGER                           :: IKB,IKTB,IKT  !
+INTEGER                           :: IKE,IKTE      !
+!
+INTEGER                           :: IMICRO
+INTEGER, DIMENSION(SIZE(PEXNREF)) :: I1,I2,I3 ! Used to replace the COUNT
+INTEGER                           :: JL       ! and PACK intrinsics
+LOGICAL, DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) &
+                                  :: GMICRO ! Test where to compute all processes
+REAL                              :: ZINVTSTEP
+REAL                              :: ZCOEFFRCM
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRVT    ! Water vapor m.r. at t
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRCT    ! Cloud water m.r. at t
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRRT    ! Rain water m.r. at t
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRIT    ! Pristine ice m.r. at t
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRST    ! Snow/aggregate m.r. at t
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRGT    ! Graupel m.r. at t
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRHT    ! Hail m.r. at t
+REAL, DIMENSION(:), ALLOCATABLE   :: ZCIT    ! Pristine ice conc. at t
+!
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRVS    ! Water vapor m.r. source
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRCS    ! Cloud water m.r. source
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRRS    ! Rain water m.r. source
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRIS    ! Pristine ice m.r. source
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRSS    ! Snow/aggregate m.r. source
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRGS    ! Graupel m.r. source
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRHS    ! Hail m.r. source
+REAL, DIMENSION(:), ALLOCATABLE   :: ZTHS    ! Theta source
+REAL, DIMENSION(:), ALLOCATABLE   :: ZTHT    ! Potential temperature
+REAL, DIMENSION(:), ALLOCATABLE   :: ZTHLT   ! Liquid potential temperature
+!
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRHODREF, &      ! RHO Dry REFerence
+                                     ZRHODJ,   &      ! RHO times Jacobian
+                                     ZZT,      &      ! Temperature
+                                     ZPRES,    &      ! Pressure
+                                     ZEXNREF,  &      ! EXNer Pressure REFerence
+                                     ZZW,      &      ! Work array
+                                     ZLSFACT,  &      ! L_s/(Pi_ref*C_ph)
+                                     ZLVFACT,  &      ! L_v/(Pi_ref*C_ph)
+                                     ZUSW,     &      ! Undersaturation over water
+                                     ZSSI,     &      ! Supersaturation over ice
+                                     ZLBDAR,   &      ! Slope parameter of the raindrop  distribution
+                                     ZLBDAR_RF,&      ! Slope parameter of the raindrop  distribution
+                                                      ! for the Rain Fraction part
+                                     ZLBDAS,   &      ! Slope parameter of the aggregate distribution
+                                     ZLBDAG,   &      ! Slope parameter of the graupel   distribution
+                                     ZLBDAH,   &      ! Slope parameter of the hail      distribution
+                                     ZRDRYG,   &      ! Dry growth rate of the graupeln
+                                     ZRWETG,   &      ! Wet growth rate of the graupeln
+                                     ZAI,      &      ! Thermodynamical function
+                                     ZCJ,      &      ! Function to compute the ventilation coefficient
+                                     ZKA,      &      ! Thermal conductivity of the air
+                                     ZDV,      &      ! Diffusivity of water vapor in the air
+                                     ZSIGMA_RC,&      ! Standard deviation of rc at time t
+                                     ZCF,      &      ! Cloud fraction
+                                     ZRF,      &      ! Rain fraction
+                                     ZHLC_HCF, &      ! HLCLOUDS : fraction of High Cloud Fraction in grid
+                                     ZHLC_LCF, &      ! HLCLOUDS : fraction of Low  Cloud Fraction in grid
+                                                      !    note that ZCF = ZHLC_HCF + ZHLC_LCF
+                                     ZHLC_HRC, &      ! HLCLOUDS : LWC that is High LWC in grid
+                                     ZHLC_LRC, &      ! HLCLOUDS : LWC that is Low  LWC in grid
+                                                      !    note that ZRC = ZHLC_HRC + ZHLC_LRC
+                                     ZHLC_RCMAX, &    ! HLCLOUDS : maximum value for RC in distribution
+                                     ZRCRAUTC, &      ! RC value to begin rain formation =XCRIAUTC/RHODREF
+                                     ZHLC_HRCLOCAL, & ! HLCLOUDS : LWC that is High LWC local in HCF
+                                     ZHLC_LRCLOCAL    ! HLCLOUDS : LWC that is Low  LWC local in LCF
+                                                      !    note that ZRC/CF = ZHLC_HRCLOCAL+ ZHLC_LRCLOCAL
+                                                      !                     = ZHLC_HRC/HCF+ ZHLC_LRC/LCF
+REAL, DIMENSION(:,:), ALLOCATABLE :: ZZW1 ! Work arrays
+REAL, DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3))   &
+                                  :: ZW ! work array
+REAL, DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3))   &
+                                  :: ZT ! Temperature
+!
+!-------------------------------------------------------------------------------
+!
+!*       1.     COMPUTE THE LOOP BOUNDS
+!               -----------------------
+!
+CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
+IIT=SIZE(PDZZ,1)
+IJT=SIZE(PDZZ,2)
+IKB=KKA+JPVEXT*KKL
+IKE=KKU-JPVEXT*KKL
+IKT=SIZE(PDZZ,3)
+IKTB=1+JPVEXT
+IKTE=IKT-JPVEXT
+!
+!
+ZINVTSTEP=1./PTSTEP
+!
+!
+!*       2.     COMPUTES THE SLOW COLD PROCESS SOURCES
+!               --------------------------------------
+!
+CALL RAIN_ICE_NUCLEATION(IIB, IIE, IJB, IJE, IKTB, IKTE,KRR,PTSTEP,&
+     PTHT,PPABST,PRHODJ,PRHODREF,PRVT,PRCT,PRRT,PRIT,PRST,PRGT,&
+     PCIT,PEXNREF,PTHS,PRVS,PRIS,ZT,PRHT)
+!
+!
+!  optimization by looking for locations where
+!  the microphysical fields are larger than a minimal value only !!!
+!
+GMICRO(:,:,:) = .FALSE.
+
+ IF ( KRR == 7 ) THEN
+  GMICRO(IIB:IIE,IJB:IJE,IKTB:IKTE) =                          &
+                PRCT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(2) .OR. &
+                PRRT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(3) .OR. &
+                PRIT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(4) .OR. &
+                PRST(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(5) .OR. &
+                PRGT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(6) .OR. &
+                PRHT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(7)
+ ELSE IF( KRR == 6 ) THEN
+  GMICRO(IIB:IIE,IJB:IJE,IKTB:IKTE) =                          &
+                PRCT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(2) .OR. &
+                PRRT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(3) .OR. &
+                PRIT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(4) .OR. &
+                PRST(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(5) .OR. &
+                PRGT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(6)
+ END IF
+
+IMICRO = COUNTJV( GMICRO(:,:,:),I1(:),I2(:),I3(:))
+IF( IMICRO >= 0 ) THEN
+  ALLOCATE(ZRVT(IMICRO))
+  ALLOCATE(ZRCT(IMICRO))
+  ALLOCATE(ZRRT(IMICRO))
+  ALLOCATE(ZRIT(IMICRO))
+  ALLOCATE(ZRST(IMICRO))
+  ALLOCATE(ZRGT(IMICRO))
+  IF ( KRR == 7 ) THEN
+    ALLOCATE(ZRHT(IMICRO))
+  ELSE
+    ALLOCATE(ZRHT(0))
+  END IF
+  ALLOCATE(ZCIT(IMICRO))
+  ALLOCATE(ZRVS(IMICRO))
+  ALLOCATE(ZRCS(IMICRO))
+  ALLOCATE(ZRRS(IMICRO))
+  ALLOCATE(ZRIS(IMICRO))
+  ALLOCATE(ZRSS(IMICRO))
+  ALLOCATE(ZRGS(IMICRO))
+  IF ( KRR == 7 ) THEN
+    ALLOCATE(ZRHS(IMICRO))
+  ELSE
+    ALLOCATE(ZRHS(0))
+  END IF
+  ALLOCATE(ZTHS(IMICRO))
+  ALLOCATE(ZTHT(IMICRO))
+  ALLOCATE(ZTHLT(IMICRO))
+  ALLOCATE(ZRHODREF(IMICRO))
+  ALLOCATE(ZZT(IMICRO))
+  ALLOCATE(ZPRES(IMICRO))
+  ALLOCATE(ZEXNREF(IMICRO))
+  ALLOCATE(ZSIGMA_RC(IMICRO))
+  ALLOCATE(ZCF(IMICRO))
+  ALLOCATE(ZRF(IMICRO))
+  ALLOCATE(ZHLC_HCF(IMICRO))
+  ALLOCATE(ZHLC_LCF(IMICRO))
+  ALLOCATE(ZHLC_HRC(IMICRO))
+  ALLOCATE(ZHLC_LRC(IMICRO))
+  ALLOCATE(ZHLC_RCMAX(IMICRO))
+  ALLOCATE(ZRCRAUTC(IMICRO))
+  ALLOCATE(ZHLC_HRCLOCAL(IMICRO))
+  ALLOCATE(ZHLC_LRCLOCAL(IMICRO))
+
+  DO JL=1,IMICRO
+    ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL))
+    ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL))
+    ZRRT(JL) = PRRT(I1(JL),I2(JL),I3(JL))
+    ZRIT(JL) = PRIT(I1(JL),I2(JL),I3(JL))
+    ZRST(JL) = PRST(I1(JL),I2(JL),I3(JL))
+    ZRGT(JL) = PRGT(I1(JL),I2(JL),I3(JL))
+    IF ( KRR == 7 ) ZRHT(JL) = PRHT(I1(JL),I2(JL),I3(JL))
+    ZCIT(JL) = PCIT(I1(JL),I2(JL),I3(JL))
+    ZCF(JL) = PCLDFR(I1(JL),I2(JL),I3(JL))
+    IF ( HSUBG_AUCV == 'PDF ' .AND. CSUBG_PR_PDF == 'SIGM' ) THEN
+      ZSIGMA_RC(JL) = PSIGS(I1(JL),I2(JL),I3(JL)) * 2.
+!     ZSIGMA_RC(JL) = MAX(PSIGS(I1(JL),I2(JL),I3(JL)) * 2., 1.E-12)
+    END IF
+    ZRVS(JL) = PRVS(I1(JL),I2(JL),I3(JL))
+    ZRCS(JL) = PRCS(I1(JL),I2(JL),I3(JL))
+    ZRRS(JL) = PRRS(I1(JL),I2(JL),I3(JL))
+    ZRIS(JL) = PRIS(I1(JL),I2(JL),I3(JL))
+    ZRSS(JL) = PRSS(I1(JL),I2(JL),I3(JL))
+    ZRGS(JL) = PRGS(I1(JL),I2(JL),I3(JL))
+    IF ( KRR == 7 ) ZRHS(JL) = PRHS(I1(JL),I2(JL),I3(JL))
+    ZTHS(JL) = PTHS(I1(JL),I2(JL),I3(JL))
+!
+    ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL))
+    ZZT(JL) = ZT(I1(JL),I2(JL),I3(JL))
+    ZTHT(JL) = PTHT(I1(JL),I2(JL),I3(JL))
+    ZTHLT(JL) = ZTHT(JL) - XLVTT * ZTHT(JL) / XCPD / ZZT(JL) * ZRCT(JL)
+    ZPRES(JL) = PPABST(I1(JL),I2(JL),I3(JL))
+    ZEXNREF(JL) = PEXNREF(I1(JL),I2(JL),I3(JL))
+  ENDDO
+  ALLOCATE(ZZW(IMICRO))
+  ALLOCATE(ZLSFACT(IMICRO))
+  ALLOCATE(ZLVFACT(IMICRO))
+    ZZW(:)  = ZEXNREF(:)*( XCPD+XCPV*ZRVT(:)+XCL*(ZRCT(:)+ZRRT(:)) &
+                                    +XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) )
+    ZLSFACT(:) = (XLSTT+(XCPV-XCI)*(ZZT(:)-XTT))/ZZW(:) ! L_s/(Pi_ref*C_ph)
+    ZLVFACT(:) = (XLVTT+(XCPV-XCL)*(ZZT(:)-XTT))/ZZW(:) ! L_v/(Pi_ref*C_ph)
+  ALLOCATE(ZUSW(IMICRO))
+  ALLOCATE(ZSSI(IMICRO))
+    ZZW(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) )
+    ZSSI(:) = ZRVT(:)*( ZPRES(:)-ZZW(:) ) / ( (XMV/XMD) * ZZW(:) ) - 1.0
+                                                      ! Supersaturation over ice
+!
+  ALLOCATE(ZLBDAR(IMICRO))
+  ALLOCATE(ZLBDAR_RF(IMICRO))
+  ALLOCATE(ZLBDAS(IMICRO))
+  ALLOCATE(ZLBDAG(IMICRO))
+  IF ( KRR == 7 ) THEN
+    ALLOCATE(ZLBDAH(IMICRO))
+  ELSE
+    ALLOCATE(ZLBDAH(0))
+  END IF
+  ALLOCATE(ZRDRYG(IMICRO))
+  ALLOCATE(ZRWETG(IMICRO))
+  ALLOCATE(ZAI(IMICRO))
+  ALLOCATE(ZCJ(IMICRO))
+  ALLOCATE(ZKA(IMICRO))
+  ALLOCATE(ZDV(IMICRO))
+!
+  IF ( KRR == 7 ) THEN
+    ALLOCATE(ZZW1(IMICRO,7))
+  ELSE IF( KRR == 6 ) THEN
+    ALLOCATE(ZZW1(IMICRO,6))
+  ENDIF
+!
+  IF (LBU_ENABLE .OR. LLES_CALL .OR. LCHECK ) THEN
+    ALLOCATE(ZRHODJ(IMICRO))
+    DO JL=1,IMICRO
+      ZRHODJ(JL) = PRHODJ(I1(JL),I2(JL),I3(JL))
+    END DO
+  ELSE
+    ALLOCATE(ZRHODJ(0))
+  END IF
+!
+
+  !Cloud water split between high and low content part is done here
+  !according to autoconversion option
+  ZRCRAUTC(:)   = XCRIAUTC/ZRHODREF(:) ! Autoconversion rc threshold
+  IF (HSUBG_AUCV == 'NONE') THEN
+    !Cloud water is entirely in low or high part
+    WHERE (ZRCT(:) > ZRCRAUTC(:))
+      ZHLC_HCF(:) = 1.
+      ZHLC_LCF(:) = 0.0
+      ZHLC_HRC(:) = ZRCT(:)
+      ZHLC_LRC(:) = 0.0
+      ZRF(:)      = 1.
+    ELSEWHERE (ZRCT(:) > XRTMIN(2))
+      ZHLC_HCF(:) = 0.0
+      ZHLC_LCF(:) = 1.
+      ZHLC_HRC(:) = 0.0
+      ZHLC_LRC(:) = ZRCT(:)
+      ZRF(:)      = 0.
+    ELSEWHERE
+      ZHLC_HCF(:) = 0.0
+      ZHLC_LCF(:) = 0.0
+      ZHLC_HRC(:) = 0.0
+      ZHLC_LRC(:) = 0.0
+      ZRF(:)      = 0.
+    END WHERE
+
+  ELSEIF (HSUBG_AUCV == 'CLFR') THEN
+    !Cloud water is only in the cloudy part and entirely in low or high part
+      WHERE (ZCF(:) > 0. .AND. ZRCT(:) > ZRCRAUTC(:)*ZCF(:))
+        ZHLC_HCF(:) = ZCF(:)
+        ZHLC_LCF(:) = 0.0
+        ZHLC_HRC(:) = ZRCT(:)
+        ZHLC_LRC(:) = 0.0
+        ZRF(:)      = ZCF(:)
+      ELSEWHERE (ZCF(:) > 0. .AND. ZRCT(:) > XRTMIN(2))
+        ZHLC_HCF(:) = 0.0
+        ZHLC_LCF(:) = ZCF(:)
+        ZHLC_HRC(:) = 0.0
+        ZHLC_LRC(:) = ZRCT(:)
+        ZRF(:)      = 0.
+      ELSEWHERE (ZCF(:) > 0.)
+        ZHLC_HCF(:) = 0.0
+        ZHLC_LCF(:) = 0.0
+        ZHLC_HRC(:) = 0.0
+        ZHLC_LRC(:) = 0.0
+        ZRF(:)      = 0.
+      ELSEWHERE
+        ZHLC_HCF(:) = 0.0
+        ZHLC_LCF(:) = 0.0
+        ZHLC_HRC(:) = 0.0
+        ZHLC_LRC(:) = 0.0
+        ZRF(:)      = 0.
+      END WHERE
+
+  ELSEIF (HSUBG_AUCV == 'PDF ') THEN
+    !Cloud water is split between high and low part according to a PDF
+    !    'HLCRECTPDF'    : rectangular PDF form
+    !    'HLCTRIANGPDF'  : triangular PDF form
+    !    'HLCQUADRAPDF'  : second order quadratic PDF form
+    !    'HLCISOTRIPDF'  : isocele triangular PDF
+    !    'SIGM'          : Redelsperger and Sommeria (1986)
+
+    IF ( CSUBG_PR_PDF == 'SIGM' ) THEN
+      ! Redelsperger and Sommeria (1986) but organised according to Turner (2011, 2012)
+      WHERE ( ZRCT(:) > ZRCRAUTC(:) + ZSIGMA_RC(:))
+        ZHLC_HCF(:) = 1.
+        ZHLC_LCF(:) = 0.0
+        ZHLC_HRC(:) = ZRCT(:)
+        ZHLC_LRC(:) = 0.0
+        ZRF(:)      = 1.
+      ELSEWHERE ( ZRCT(:) >  ( ZRCRAUTC(:) - ZSIGMA_RC(:) ) .AND. &
+                & ZRCT(:) <= ( ZRCRAUTC(:) + ZSIGMA_RC(:) )       )
+        ZHLC_HCF(:) = (ZRCT(:)+ZSIGMA_RC(:)-ZRCRAUTC(:))/ &
+                     &(2.*ZSIGMA_RC(:))
+        ZHLC_LCF(:) = MAX(0., ZCF(:)-ZHLC_HCF(:))
+        ZHLC_HRC(:) = (ZRCT(:)+ZSIGMA_RC(:)-ZRCRAUTC(:))* &
+                     &(ZRCT(:)+ZSIGMA_RC(:)+ZRCRAUTC(:))/ &
+                     &(4.*ZSIGMA_RC(:))
+        ZHLC_LRC(:) = MAX(0., ZRCT(:)-ZHLC_HRC(:))
+        ZRF(:)      = ZHLC_HCF(:)
+      ELSEWHERE ( ZRCT(:)>XRTMIN(2) .AND. ZCF(:)>0. )
+        ZHLC_LCF(:) = 0.0
+        ZHLC_LCF(:) = ZCF(:)
+        ZHLC_HRC(:) = 0.0
+        ZHLC_LRC(:) = ZRCT(:)
+        ZRF(:)      = 0.
+      ELSEWHERE
+        ZHLC_HCF(:) = 0.0
+        ZHLC_LCF(:) = 0.0
+        ZHLC_HRC(:) = 0.0
+        ZHLC_LRC(:) = 0.0
+        ZRF(:)      = 0.
+      END WHERE
+
+    ! Turner (2011, 2012)
+    ELSEIF ( CSUBG_PR_PDF== 'HLCRECTPDF' .OR. CSUBG_PR_PDF == 'HLCISOTRIPDF' .OR. &
+           & CSUBG_PR_PDF == 'HLCTRIANGPDF' .OR. CSUBG_PR_PDF == 'HLCQUADRAPDF' ) THEN
+      ! Calculate maximum value r_cM from PDF forms
+      IF ( CSUBG_PR_PDF == 'HLCRECTPDF' .OR. CSUBG_PR_PDF == 'HLCISOTRIPDF' ) THEN
+        ZCOEFFRCM = 2.0
+      ELSE IF ( CSUBG_PR_PDF == 'HLCTRIANGPDF' ) THEN
+        ZCOEFFRCM = 3.0
+      ELSE IF ( CSUBG_PR_PDF == 'HLCQUADRAPDF' ) THEN
+        ZCOEFFRCM = 4.0
+      END IF
+      WHERE (ZRCT(:).GT.0. .AND. ZCF(:).GT.0.)
+        ZHLC_RCMAX(:) = ZCOEFFRCM * ZRCT(:) / ZCF(:)
+      END WHERE
+
+      ! Split available water and cloud fraction in two parts
+      ! Calculate local mean values int he low and high parts for the 3 PDF forms:
+      IF ( CSUBG_PR_PDF == 'HLCRECTPDF' ) THEN
+        WHERE (ZRCT(:).GT.0. .AND. ZCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:))
+          ZHLC_LRCLOCAL(:) = 0.5*ZRCRAUTC(:)
+          ZHLC_HRCLOCAL(:) = ( ZHLC_RCMAX(:) + ZRCRAUTC(:)) / 2.0
+        END WHERE
+      ELSE IF ( CSUBG_PR_PDF == 'HLCTRIANGPDF' ) THEN
+        WHERE (ZRCT(:).GT.0. .AND. ZCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:))
+          ZHLC_LRCLOCAL(:) = ( ZRCRAUTC(:) *(3.0 * ZHLC_RCMAX(:) - 2.0 * ZRCRAUTC(:) ) ) &
+                          / (3.0 * (2.0 * ZHLC_RCMAX(:) - ZRCRAUTC(:)  ) )
+          ZHLC_HRCLOCAL(:) = (ZHLC_RCMAX(:) + 2.0*ZRCRAUTC(:)) / 3.0
+        END WHERE
+      ELSE IF ( CSUBG_PR_PDF == 'HLCQUADRAPDF' ) THEN
+        WHERE (ZRCT(:).GT.0. .AND. ZCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:))
+          ZHLC_LRCLOCAL(:) = (3.0 *ZRCRAUTC(:)**3 - 8.0 *ZRCRAUTC(:)**2 * ZHLC_RCMAX(:) &
+                          + 6.0*ZRCRAUTC(:) *ZHLC_RCMAX(:)**2 ) &
+                          / &
+                          (4.0* ZRCRAUTC(:)**2 -12.0*ZRCRAUTC(:) *ZHLC_RCMAX(:) &
+                          + 12.0 * ZHLC_RCMAX(:)**2 )
+          ZHLC_HRCLOCAL(:) =  (ZHLC_RCMAX(:) + 3.0*ZRCRAUTC(:)) / 4.0
+        END WHERE
+      ELSE IF ( CSUBG_PR_PDF == 'HLCISOTRIPDF' ) THEN
+        WHERE (ZRCT(:).GT.0. .AND. ZCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:))
+          WHERE ( (ZRCT(:) / ZCF(:)).LE.ZRCRAUTC(:) )
+            ZHLC_LRCLOCAL(:) = ( (ZHLC_RCMAX(:))**3 &
+                             - (12.0 * (ZHLC_RCMAX(:))*(ZRCRAUTC(:))**2) &
+                             + (8.0 * ZRCRAUTC(:)**3) ) &
+                             / ( (6.0 * (ZHLC_RCMAX(:))**2) &
+                             - (24.0 * (ZHLC_RCMAX(:)) * ZRCRAUTC(:)) &
+                             + (12.0 * ZRCRAUTC(:)**2) )
+            ZHLC_HRCLOCAL(:) = ( ZHLC_RCMAX(:) + 2.0 * ZRCRAUTC(:) ) / 3.0
+          ELSEWHERE
+            ZHLC_LRCLOCAL(:) = (2.0/3.0) * ZRCRAUTC(:)
+            ZHLC_HRCLOCAL(:) = (3.0*ZHLC_RCMAX(:)**3 - 8.0*ZRCRAUTC(:)**3) &
+                             / (6.0 * ZHLC_RCMAX(:)**2 - 12.0*ZRCRAUTC(:)**2)
+          END WHERE
+        END WHERE
+      END IF
+
+      ! Compare r_cM  to r_cR to know if cloud water content is high enough to split in two parts or not
+      WHERE (ZRCT(:).GT.0. .AND. ZCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:))
+        ! Calculate final values for LCF and HCF:
+        ZHLC_LCF(:) = ZCF(:) &
+                       * ( ZHLC_HRCLOCAL - &
+                       ( ZRCT(:) / ZCF(:) ) ) &
+                       / (ZHLC_HRCLOCAL - ZHLC_LRCLOCAL)
+        ZHLC_HCF(:) = MAX(0., ZCF(:) - ZHLC_LCF(:))
+        !
+        ! Calculate final values for LRC and HRC:
+        ZHLC_LRC(:) = ZHLC_LRCLOCAL * ZHLC_LCF(:)
+        ZHLC_HRC(:) = MAX(0., ZRCT(:) - ZHLC_LRC(:))
+      ELSEWHERE (ZRCT(:).GT.0. .AND. ZCF(:).GT.0. .AND. ZHLC_RCMAX(:).LE.ZRCRAUTC(:))
+        ! Put all available cloud water and his fraction in the low part
+        ZHLC_LCF(:) = ZCF(:)
+        ZHLC_HCF(:) = 0.0
+        ZHLC_LRC(:) = ZRCT(:)
+        ZHLC_HRC(:) = 0.0
+      ELSEWHERE
+        ZHLC_LCF(:) = 0.
+        ZHLC_HCF(:) = 0.0
+        ZHLC_LRC(:) = 0.
+        ZHLC_HRC(:) = 0.0
+      END WHERE
+
+      ZRF(:)=ZHLC_HCF(:) !Precipitation fraction
+
+    ELSE
+      !wrong CSUBG_PR_PDF case
+      WRITE(*,*) 'wrong CSUBG_PR_PDF case'
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','RAIN_ICE_OLD','')      
+    ENDIF
+  ELSE
+    !wrong HSUBG_AUCV case
+    WRITE(*,*)'wrong HSUBG_AUCV case'
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','RAIN_ICE_OLD','')  
+  ENDIF
+
+  !Diagnostic of precipitation fraction
+  PRAINFR(:,:,:) = 0.
+  DO JL=1,IMICRO
+    PRAINFR(I1(JL),I2(JL),I3(JL)) = ZRF(JL)
+  END DO
+  CALL ICE4_RAINFR_VERT(D, RAIN_ICE_DESCR, PRAINFR, PRRT(:,:,:),      &
+                         RESHAPE( SOURCE = [ ( 0., JL = 1, SIZE( PRSS ) ) ], SHAPE = SHAPE( PRSS ) ), &
+                         RESHAPE( SOURCE = [ ( 0., JL = 1, SIZE( PRGS ) ) ], SHAPE = SHAPE( PRGS ) )  )
+  DO JL=1,IMICRO
+    ZRF(JL)=PRAINFR(I1(JL),I2(JL),I3(JL))
+  END DO
+!
+  CALL RAIN_ICE_SLOW(GMICRO, ZINVTSTEP, ZRHODREF,                      &
+                     ZRCT, ZRRT, ZRIT, ZRST, ZRGT, ZRHODJ, ZZT, ZPRES, &
+                     ZLSFACT, ZLVFACT, ZSSI,                           &
+                     ZRVS, ZRCS, ZRRS, ZRIS, ZRSS, ZRGS, ZTHS,         &
+                     ZAI, ZCJ, ZKA, ZDV, ZLBDAS, ZLBDAG)
+!
+!-------------------------------------------------------------------------------
+!
+!
+!*       3.     COMPUTES THE SLOW WARM PROCESS SOURCES
+!               --------------------------------------
+!
+!*       3.1    compute the slope parameter Lbda_r
+!
+  !ZLBDAR will be used when we consider rain diluted over the grid box
+  WHERE( ZRRT(:)>0.0 )
+    ZLBDAR(:)  = XLBR*( ZRHODREF(:)*MAX( ZRRT(:),XRTMIN(3) ) )**XLBEXR
+  END WHERE
+  !ZLBDAR_RF will be used when we consider rain concentrated in its fraction
+  WHERE( ZRRT(:)>0.0 .AND. ZRF(:)>0.0 )
+    ZLBDAR_RF(:)  = XLBR*( ZRHODREF(:) *MAX( ZRRT(:)/ZRF(:)  , XRTMIN(3) ) )**XLBEXR
+  ELSEWHERE
+    ZLBDAR_RF(:)  = 0.
+  END WHERE
+!
+  IF( OWARM ) THEN    !  Check if the formation of the raindrops by the slow
+                      !  warm processes is allowed
+    PEVAP3D(:,:,:)= 0.
+    CALL RAIN_ICE_WARM(GMICRO, IMICRO, I1, I2, I3,                                                           &
+                       ZRHODREF, ZRVT, ZRCT, ZRRT, ZHLC_HCF, ZHLC_LCF, ZHLC_HRC, ZHLC_LRC,                   &
+                       ZRHODJ, ZPRES, ZZT, ZLBDAR, ZLBDAR_RF, ZLVFACT, ZCJ, ZKA, ZDV, ZRF, ZCF, ZTHT, ZTHLT, &
+                       ZRVS, ZRCS, ZRRS, ZTHS, ZUSW, PEVAP3D)
+  END IF
+!
+!-------------------------------------------------------------------------------
+!
+!
+!*       4.     COMPUTES THE FAST COLD PROCESS SOURCES FOR r_s
+!               ----------------------------------------------
+!
+  CALL RAIN_ICE_FAST_RS(PTSTEP, GMICRO, ZRHODREF, ZRVT, ZRCT, ZRRT, ZRST, ZRHODJ, ZPRES, ZZT, &
+                        ZLBDAR, ZLBDAS, ZLSFACT, ZLVFACT, ZCJ, ZKA, ZDV, &
+                        ZRCS, ZRRS, ZRSS, ZRGS, ZTHS)
+!
+!-------------------------------------------------------------------------------
+!
+!
+!*       5.     COMPUTES THE FAST COLD PROCESS SOURCES FOR r_g
+!               ----------------------------------------------
+!
+  CALL RAIN_ICE_FAST_RG(KRR, GMICRO, ZRHODREF, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, ZCIT, &
+                        ZRHODJ, ZPRES, ZZT, ZLBDAR, ZLBDAS, ZLBDAG, ZLSFACT, ZLVFACT, &
+                        ZCJ, ZKA, ZDV, &
+                        ZRCS, ZRRS, ZRIS, ZRSS, ZRGS, ZRHS, ZTHS, &
+                        ZUSW, ZRDRYG, ZRWETG)
+!
+!-------------------------------------------------------------------------------
+!
+!
+!*       6.     COMPUTES THE FAST COLD PROCESS SOURCES FOR r_h
+!               ----------------------------------------------
+!
+ IF ( KRR == 7 ) THEN
+  CALL RAIN_ICE_FAST_RH(GMICRO, ZRHODREF, ZRVT, ZRCT, ZRIT, ZRST, ZRGT, ZRHT, ZRHODJ, ZPRES, &
+                        ZZT, ZLBDAS, ZLBDAG, ZLBDAH, ZLSFACT, ZLVFACT, ZCJ, ZKA, ZDV, &
+                        ZRCS, ZRRS, ZRIS, ZRSS, ZRGS, ZRHS, ZTHS, ZUSW)
+ END IF
+!
+!-------------------------------------------------------------------------------
+!
+!
+!*       7.     COMPUTES SPECIFIC SOURCES OF THE WARM AND COLD CLOUDY SPECIES
+!               -------------------------------------------------------------
+!
+  CALL RAIN_ICE_FAST_RI(GMICRO, ZRHODREF, ZRIT, ZRHODJ, ZZT, ZSSI, ZLSFACT, ZLVFACT, &
+                        ZAI, ZCJ, ZCIT, ZRCS, ZRIS, ZTHS)
+!
+!
+!-------------------------------------------------------------------------------
+!
+!
+!
+  DO JL=1,IMICRO
+    PRVS(I1(JL),I2(JL),I3(JL)) = ZRVS(JL)
+    PRCS(I1(JL),I2(JL),I3(JL)) = ZRCS(JL)
+    PRRS(I1(JL),I2(JL),I3(JL)) = ZRRS(JL)
+    PRIS(I1(JL),I2(JL),I3(JL)) = ZRIS(JL)
+    PRSS(I1(JL),I2(JL),I3(JL)) = ZRSS(JL)
+    PRGS(I1(JL),I2(JL),I3(JL)) = ZRGS(JL)
+    PTHS(I1(JL),I2(JL),I3(JL)) = ZTHS(JL)
+    PCIT(I1(JL),I2(JL),I3(JL)) = ZCIT(JL)
+    !
+    PRAINFR(I1(JL),I2(JL),I3(JL)) = ZRF(JL)
+  END DO
+  IF ( KRR == 7 ) THEN
+    DO JL=1,IMICRO
+      PRHS(I1(JL),I2(JL),I3(JL)) = ZRHS(JL)
+    END DO
+  END IF
+!
+!
+!
+  DEALLOCATE(ZZW1)
+  DEALLOCATE(ZDV)
+  DEALLOCATE(ZCJ)
+  DEALLOCATE(ZRDRYG)
+  DEALLOCATE(ZRWETG)
+  DEALLOCATE(ZLBDAG)
+  DEALLOCATE(ZLBDAH)
+  DEALLOCATE(ZLBDAS)
+  DEALLOCATE(ZLBDAR)
+  DEALLOCATE(ZLBDAR_RF)
+  DEALLOCATE(ZSSI)
+  DEALLOCATE(ZUSW)
+  DEALLOCATE(ZLVFACT)
+  DEALLOCATE(ZLSFACT)
+  DEALLOCATE(ZZW)
+  DEALLOCATE(ZEXNREF)
+  DEALLOCATE(ZPRES)
+  DEALLOCATE(ZRHODREF)
+  DEALLOCATE(ZZT)
+  IF(LBU_ENABLE .OR. LLES_CALL .OR. LCHECK ) DEALLOCATE(ZRHODJ)
+  DEALLOCATE(ZTHS)
+  DEALLOCATE(ZTHT)
+  DEALLOCATE(ZTHLT)
+  DEALLOCATE(ZRHS)
+  DEALLOCATE(ZRGS)
+  DEALLOCATE(ZRSS)
+  DEALLOCATE(ZRIS)
+  DEALLOCATE(ZRRS)
+  DEALLOCATE(ZRCS)
+  DEALLOCATE(ZRVS)
+  DEALLOCATE(ZCIT)
+  DEALLOCATE(ZRGT)
+  DEALLOCATE(ZRHT)
+  DEALLOCATE(ZRST)
+  DEALLOCATE(ZRIT)
+  DEALLOCATE(ZRRT)
+  DEALLOCATE(ZAI)
+  DEALLOCATE(ZRCT)
+  DEALLOCATE(ZKA)
+  DEALLOCATE(ZRVT)
+  DEALLOCATE(ZSIGMA_RC)
+  DEALLOCATE(ZCF)
+  DEALLOCATE(ZRF)
+  DEALLOCATE(ZHLC_HCF)
+  DEALLOCATE(ZHLC_LCF)
+  DEALLOCATE(ZHLC_HRC)
+  DEALLOCATE(ZHLC_LRC)
+  DEALLOCATE(ZHLC_RCMAX)
+  DEALLOCATE(ZRCRAUTC)
+  DEALLOCATE(ZHLC_HRCLOCAL)
+  DEALLOCATE(ZHLC_LRCLOCAL)
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+!*       8.     COMPUTE THE SEDIMENTATION (RS) SOURCE
+!               -------------------------------------
+!
+!*       8.1    time splitting loop initialization
+!
+!
+!
+IF (HSEDIM == 'STAT') THEN
+  CALL RAIN_ICE_SEDIMENTATION_STAT( IIB, IIE, IJB, IJE, IKB, IKE, IKTB, IKTE, IKT, KKL, KRR,                &
+                                    PTSTEP, OSEDIC, PINPRC, PINDEP,                                         &
+                                    PINPRR, PINPRS, PINPRG, PDZZ, PRHODREF, PPABST, PTHT, PRHODJ, PINPRR3D, &
+                                    PRCS, PRCT, PRRS, PRRT, PRIS, PRSS, PRST, PRGS, PRGT,                   &
+                                    PSEA, PTOWN, PINPRH, PRHS, PRHT, PFPR )
+ELSEIF (HSEDIM == 'SPLI') THEN
+  CALL RAIN_ICE_SEDIMENTATION_SPLIT(IIB, IIE, IJB, IJE, IKB, IKE, IKTB, IKTE, IKT, KKL,&
+  KSPLITR,PTSTEP, &
+  KRR,OSEDIC,LDEPOSC,PINPRC,PINDEP,PINPRR,PINPRS,PINPRG,PDZZ,PRHODREF,PPABST,PTHT,PRHODJ,&
+      PINPRR3D,PRCS,PRCT,PRRS,PRRT,PRIS,PRIT,PRSS,PRST,PRGS,PRGT,PSEA,PTOWN,PINPRH,PRHS,PRHT,PFPR)
+ELSE
+  call Print_msg( NVERB_FATAL, 'GEN', 'RAIN_ICE_OLD', 'no sedimentation scheme for HSEDIM='//HSEDIM )
+END IF
+!sedimentation of rain fraction
+CALL ICE4_RAINFR_VERT(D, RAIN_ICE_DESCR, PRAINFR, PRRS(:,:,:)*PTSTEP,  &
+                      PRSS(:,:,:)*PTSTEP, PRGS(:,:,:)*PTSTEP)
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE RAIN_ICE_OLD
diff --git a/tools/check_commit_mesonh.sh b/tools/check_commit_mesonh.sh
index d0ae30b2b..b60131c8f 100755
--- a/tools/check_commit_mesonh.sh
+++ b/tools/check_commit_mesonh.sh
@@ -8,7 +8,7 @@ set -e
 # Repertoire où MNH-V5-5-0_PHYEX.tar.gz modifie pour accueillir PHYEX se trouve
 #TARGZDIR=$HOME
 
-availTests="007_16janvier/008_run2, 007_16janvier/008_run2_turb3D, COLD_BUBBLE/002_mesonh, 
+availTests="007_16janvier/008_run2, 007_16janvier/008_run2_turb3D, 007_16janvier/008_run2_lredf, COLD_BUBBLE/002_mesonh, 
             ARMLES/RUN, COLD_BUBBLE_3D/002_mesonh,OCEAN_LES/004_run2"
 defaultTest="007_16janvier/008_run2"
 separator='_' #- be carrefull, gmkpack (at least on belenos) has multiple allergies (':', '.', '@')
@@ -259,22 +259,34 @@ if [ $run -ge 1 ]; then
       [ ! -d ${exedir}_$commit ] && cp -R ${exedir} ${exedir}_$commit
       cd $REFDIR/MNH-V5-5-0/MY_RUN/KTEST/$case/${exedir}_$commit
     else
+      #If the test case didn't exist in the tar.gz, we copy it from from the reference version
       rep=$MNHPACK/$name/MY_RUN/KTEST/$case
-      [ -d $rep ] && rm -rf $rep
-      mkdir $rep
+      [ ! -d $rep ] && cp -r $REFDIR/MNH-V5-5-0/MY_RUN/KTEST/$case $rep
       cd $rep
-      for repref in $REFDIR/MNH-V5-5-0/MY_RUN/KTEST/$case/$rep/*; do
-        rep=$(basename $repref)
-        if [ $rep != ${exedir} ]; then
-          rm -rf $rep
-          ln -s $REFDIR/MNH-V5-5-0/MY_RUN/KTEST/$case/$rep .
-        else
-          cp -R $REFDIR/MNH-V5-5-0/MY_RUN/KTEST/$case/$rep .
+
+      #Loop on the directories
+      for rep in *; do
+        if [ -d "$rep" ]; then
+          if echo $availTests | grep ${case}/$rep > /dev/null; then
+            #This directory is a test case
+            if [ $rep == ${exedir} ]; then
+              #this is the case we want to run
+              rm -rf $rep
+              cp -r $REFDIR/MNH-V5-5-0/MY_RUN/KTEST/$case/$rep .
+            fi
+          else
+            #This directory might be neede to run the test case, we take the reference version
+            rm -rf $rep
+            ln -s $REFDIR/MNH-V5-5-0/MY_RUN/KTEST/$case/$rep 
+          fi
         fi
       done
+
+      #In case subcase does not exist we create it
+      [ ! -d ${exedir} ] && cp -r $REFDIR/MNH-V5-5-0/MY_RUN/KTEST/$case/${exedir} .
       cd ${exedir}
     fi
-  
+
     set +e #file ends with a test that can return false
     [ $compilation -eq 0 ] && . $MNHPACK/$name/conf/profile_mesonh-*
     set -e
@@ -296,6 +308,9 @@ if [ $check -eq 1 ]; then
     elif  [ $t == 007_16janvier/008_run2_turb3D ]; then
       path_user=$path_user_beg/MY_RUN/KTEST/007_16janvier/008_run2_turb3D$path_user_end
       path_ref=$path_ref_beg/MY_RUN/KTEST/007_16janvier/008_run2_turb3D$path_ref_end
+    elif  [ $t == 007_16janvier/008_run2_lredf ]; then
+      path_user=$path_user_beg/MY_RUN/KTEST/007_16janvier/008_run2_lredf$path_user_end
+      path_ref=$path_ref_beg/MY_RUN/KTEST/007_16janvier/008_run2_lredf$path_ref_end
     elif   [ $t == COLD_BUBBLE/002_mesonh ]; then
       path_user=$path_user_beg/MY_RUN/KTEST/COLD_BUBBLE/002_mesonh$path_user_end
       path_ref=$path_ref_beg/MY_RUN/KTEST/COLD_BUBBLE/002_mesonh$path_ref_end
diff --git a/tools/compare.py b/tools/compare.py
index 7d335da95..816cac5f7 100755
--- a/tools/compare.py
+++ b/tools/compare.py
@@ -38,7 +38,7 @@ def compareBACKUPFiles(file_user, file_ref):
   nj=len(da['nj'])
   nk=len(da['level'])
   variables = list(da.keys())
-  for var in variables:
+  for var in [var for var in variables if da[var].dtype.char != 'S']:
     try:
       if da[var].ndim == 4: #Variables time, level, nj, ni
         ecart_min=float(da2[var][0,JPVEXT:nk-1-JPVEXT,JPHEXT:nj-1-JPHEXT,JPHEXT:ni-1-JPHEXT].min())-float(da[var][0,JPVEXT:nk-1-JPVEXT,JPHEXT:nj-1-JPHEXT,JPHEXT:ni-1-JPHEXT].min())
@@ -64,6 +64,7 @@ def compareBACKUPFiles(file_user, file_ref):
         status += 1
         print(var, ecart_min, ecart_moy, ecart_max)
     except:
+      #raise
       pass
   return status
 
-- 
GitLab