From 60f63a630e9b1c701ed3448983e4882663075213 Mon Sep 17 00:00:00 2001
From: Quentin Rodier <quentin.rodier@meteo.fr>
Date: Tue, 12 Apr 2022 23:16:20 +0200
Subject: [PATCH] Quentin 12/04/2022: Adapt microphysics GPU for mesonh
 compilation. Test case is not running yet

---
 src/common/micro/modd_rain_ice_param.F90 | 17 +++++++
 src/mesonh/ext/deallocate_model1.f90     | 14 ++----
 src/mesonh/ext/ini_radar.f90             |  4 +-
 src/mesonh/ext/ini_segn.f90              |  2 +
 src/mesonh/ext/resolved_cloud.f90        | 54 +++++----------------
 src/mesonh/micro/rain_ice_red.f90        | 61 ++++++++++++++++--------
 6 files changed, 81 insertions(+), 71 deletions(-)

diff --git a/src/common/micro/modd_rain_ice_param.F90 b/src/common/micro/modd_rain_ice_param.F90
index efb3c5520..9655d6f10 100644
--- a/src/common/micro/modd_rain_ice_param.F90
+++ b/src/common/micro/modd_rain_ice_param.F90
@@ -583,4 +583,21 @@ SUBROUTINE RAIN_ICE_PARAM_ALLOCATE(HNAME, KDIM1, KDIM2)
       XKER_RWETH=> RAIN_ICE_PARAM%XKER_RWETH
   END SELECT
 END SUBROUTINE RAIN_ICE_PARAM_ALLOCATE
+SUBROUTINE RAIN_ICE_PARAM_DEALLOCATE()
+  IMPLICIT NONE
+  XGAMINC_RIM1=>NULL()
+  DEALLOCATE(RAIN_ICE_PARAM%XGAMINC_RIM1)
+  XGAMINC_RIM2=>NULL()
+  DEALLOCATE(RAIN_ICE_PARAM%XGAMINC_RIM2)
+  XKER_RACCSS=>NULL()
+  DEALLOCATE(RAIN_ICE_PARAM%XKER_RACCSS)
+  XKER_RACCS=>NULL()
+  DEALLOCATE(RAIN_ICE_PARAM%XKER_RACCS)
+  XKER_SACCRG=>NULL()
+  DEALLOCATE(RAIN_ICE_PARAM%XKER_SACCRG)
+  XKER_SDRYG=>NULL()
+  DEALLOCATE(RAIN_ICE_PARAM%XKER_SDRYG)
+  XKER_RDRYG=>NULL()
+  DEALLOCATE(RAIN_ICE_PARAM%XKER_RDRYG)
+END SUBROUTINE RAIN_ICE_PARAM_DEALLOCATE
 END MODULE MODD_RAIN_ICE_PARAM
diff --git a/src/mesonh/ext/deallocate_model1.f90 b/src/mesonh/ext/deallocate_model1.f90
index 3b0b46738..63a5d98f9 100644
--- a/src/mesonh/ext/deallocate_model1.f90
+++ b/src/mesonh/ext/deallocate_model1.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1997-2021 CNRS, Meteo-France and Universite Paul Sabatier
+MNH_LIC Copyright 1997-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.
@@ -531,15 +531,9 @@ END IF
 !
 !*     14.     Modules RAIN_ICE_DESCR and MODD_RAIN_ICE_PARAM
 !
-IF (  ALLOCATED(XRTMIN) .AND. KCALL == 4 ) THEN
-  DEALLOCATE( XRTMIN )
-  DEALLOCATE( XGAMINC_RIM1 )
-  DEALLOCATE( XGAMINC_RIM2 )
-  DEALLOCATE( XKER_RACCSS )
-  DEALLOCATE( XKER_RACCS )
-  DEALLOCATE( XKER_SACCRG )
-  DEALLOCATE( XKER_SDRYG )
-  DEALLOCATE( XKER_RDRYG )
+IF (  ASSOCIATED(XRTMIN) .AND. KCALL == 4 ) THEN
+  CALL RAIN_ICE_DESCR_DEALLOCATE()
+  CALL RAIN_ICE_PARAM_DEALLOCATE()
 END IF
 !
 !*     15.     Module PASPOLn           
diff --git a/src/mesonh/ext/ini_radar.f90 b/src/mesonh/ext/ini_radar.f90
index a53621e5e..f0f5e0307 100644
--- a/src/mesonh/ext/ini_radar.f90
+++ b/src/mesonh/ext/ini_radar.f90
@@ -188,7 +188,9 @@ XLBH   = ( XAH*XCCH*MOMG(XALPHAH,XNUH,XBH) )**(-XLBEXH)
 !
 !*       2.4    Minimal values allowed for the mixing ratios
 ! ICE3
-IF(.NOT.ALLOCATED(XRTMIN)) ALLOCATE( XRTMIN(6) )
+IF(.NOT.ASSOCIATED(XRTMIN)) THEN
+ CALL RAIN_ICE_DESCR_ALLOCATE(6)
+END IF
 !
 XRTMIN(1) = 1.0E-20
 XRTMIN(2) = 1.0E-20
diff --git a/src/mesonh/ext/ini_segn.f90 b/src/mesonh/ext/ini_segn.f90
index 590efa55c..59eb32a09 100644
--- a/src/mesonh/ext/ini_segn.f90
+++ b/src/mesonh/ext/ini_segn.f90
@@ -178,6 +178,7 @@ USE MODD_IO,               ONLY: NVERB_FATAL, NVERB_WARNING, TFILE_OUTPUTLISTING
 USE MODD_LUNIT
 USE MODD_LUNIT_n,          ONLY: CINIFILE_n=> CINIFILE, TINIFILE_n => TINIFILE, CINIFILEPGD_n=> CINIFILEPGD, TLUOUT, LUNIT_MODEL
 USE MODD_PARAM_n,          ONLY: CSURF
+USE MODD_PARAM_ICE
 USE MODD_PARAMETERS
 USE MODD_REF,              ONLY: LBOUSS
 !
@@ -312,6 +313,7 @@ ILUSEG = TZFILE_DES%NLU
 !*      2.    SET DEFAULT VALUES
 !             ------------------
 !
+CALL PARAM_ICE_ASSOCIATE()
 CALL DEFAULT_DESFM_n(KMI)
 !
 !-------------------------------------------------------------------------------
diff --git a/src/mesonh/ext/resolved_cloud.f90 b/src/mesonh/ext/resolved_cloud.f90
index 540019944..e24ca742c 100644
--- a/src/mesonh/ext/resolved_cloud.f90
+++ b/src/mesonh/ext/resolved_cloud.f90
@@ -298,9 +298,10 @@ USE MODD_NSV,            ONLY: NSV_C1R3END, NSV_C2R2BEG, NSV_C2R2END,
                                NSV_LIMA_NC, NSV_LIMA_NI, NSV_LIMA_NR
 USE MODD_PARAM_C2R2,     ONLY: LSUPSAT
 USE MODD_PARAMETERS,     ONLY: JPHEXT, JPVEXT
-USE MODD_PARAM_ICE,      ONLY: CSEDIM, LADJ_BEFORE, LADJ_AFTER, CFRAC_ICE_ADJUST, LRED
+USE MODD_PARAM_ICE,      ONLY: CSEDIM, LADJ_BEFORE, LADJ_AFTER, CFRAC_ICE_ADJUST, LRED, &
+                               PARAM_ICE
 USE MODD_PARAM_LIMA,     ONLY: LADJ, LCOLD, LPTSPLIT, LSPRO, NMOD_CCN, NMOD_IFN, NMOD_IMM
-USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN
+USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN, RAIN_ICE_DESCR
 USE MODD_RAIN_ICE_PARAM, ONLY: RAIN_ICE_PARAM
 USE MODD_SALT,           ONLY: LSALT
 USE MODD_TURB_n,         ONLY: CSUBG_AUCV_RI, CCONDENS, CLAMBDA3, CSUBG_MF_PDF
@@ -783,10 +784,10 @@ SELECT CASE ( HCLOUD )
                    PRS(:,:,:,4)>ZRSMIN(4) .OR. &
                    PRS(:,:,:,5)>ZRSMIN(5) .OR. &
                    PRS(:,:,:,6)>ZRSMIN(6)
-      CALL RAIN_ICE_RED (COUNT(LLMICRO), SIZE(PTHT, 1), SIZE(PTHT, 2), &
-                    SIZE(PTHT, 3), COUNT(LLMICRO), &
+      CALL RAIN_ICE_RED (YLDIMPHYEX,CST, PARAM_ICE, RAIN_ICE_PARAM, RAIN_ICE_DESCR,TBUCONF,&
+                    COUNT(LLMICRO), COUNT(LLMICRO), &
                     OSEDIC, .FALSE.,CSEDIM, HSUBG_AUCV, CSUBG_AUCV_RI,&
-                    OWARM,1,IKU,1,                                       &
+                    OWARM,                                               &
                     PTSTEP, KRR, LLMICRO, ZEXN,                          &
                     ZDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT,PCLDFR,&
                     PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF,              &
@@ -800,23 +801,9 @@ SELECT CASE ( HCLOUD )
                     TBUDGETS,SIZE(TBUDGETS),           &
                     PSEA,PTOWN, PFPR=ZFPR                                )
     ELSE 
-          CALL RAIN_ICE_RED (COUNT(LLMICRO), SIZE(PTHT, 1), SIZE(PTHT, 2), &
-                    SIZE(PTHT, 3), COUNT(LLMICRO), &
-                    OSEDIC, .FALSE.,CSEDIM, HSUBG_AUCV, CSUBG_AUCV_RI,&
-                    OWARM,1,IKU,1,                                       &
-                    PTSTEP, KRR, LLMICRO, ZEXN,                          &
-                    ZDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT,PCLDFR,&
-                    PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF,              &
-                    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,  PEVAP3D,                    &
-                    PINPRS, PINPRG, PINDEP, PRAINFR, PSIGS,              &
-                    TBUDGETS,SIZE(TBUDGETS),           &
-                    PSEA,PTOWN, PFPR=ZFPR                                )
+!    CALL RAIN_ICE_OLD
     END IF
+
 !
 !*       9.2    Perform the saturation adjustment over cloud ice and cloud water
 !
@@ -892,9 +879,10 @@ SELECT CASE ( HCLOUD )
                    PRS(:,:,:,5)>ZRSMIN(5) .OR. &
                    PRS(:,:,:,6)>ZRSMIN(6) .OR. &
                    PRS(:,:,:,7)>ZRSMIN(7)
-     CALL RAIN_ICE_RED (COUNT(LLMICRO), SIZE(PTHT, 1), SIZE(PTHT, 2), SIZE(PTHT, 3),&
-                    COUNT(LLMICRO), OSEDIC, .FALSE., CSEDIM, HSUBG_AUCV, CSUBG_AUCV_RI,&
-                    OWARM, 1, IKU, 1,             &
+     CALL RAIN_ICE_RED (YLDIMPHYEX,CST, PARAM_ICE, RAIN_ICE_PARAM, RAIN_ICE_DESCR,TBUCONF,&
+                    COUNT(LLMICRO), COUNT(LLMICRO), &
+                    OSEDIC, .FALSE., CSEDIM, HSUBG_AUCV, CSUBG_AUCV_RI,&
+                    OWARM,                                                &
                     PTSTEP, KRR, LLMICRO, ZEXN,             &
                     ZDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,&
                     PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF,&
@@ -908,24 +896,8 @@ SELECT CASE ( HCLOUD )
                     TBUDGETS,SIZE(TBUDGETS),                     &            
                     PSEA, PTOWN,                                          &
                     PRT(:,:,:,7), PRS(:,:,:,7), PINPRH, PFPR=ZFPR         )
- 
     ELSE
-     CALL RAIN_ICE_RED (COUNT(LLMICRO), SIZE(PTHT, 1), SIZE(PTHT, 2), SIZE(PTHT, 3),&
-                    COUNT(LLMICRO), OSEDIC, .FALSE., CSEDIM, HSUBG_AUCV, CSUBG_AUCV_RI,&
-                    OWARM, 1, IKU, 1,             &
-                    PTSTEP, KRR, LLMICRO, ZEXN,             &
-                    ZDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,&
-                    PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF,&
-                    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, PEVAP3D,                    &
-                    PINPRS, PINPRG, PINDEP, PRAINFR, PSIGS,               &
-                    TBUDGETS,SIZE(TBUDGETS),                     &            
-                    PSEA, PTOWN,                                          &
-                    PRT(:,:,:,7), PRS(:,:,:,7), PINPRH, PFPR=ZFPR         )
+    !CALL RAIN_ICE_OLD
     END IF
 
 
diff --git a/src/mesonh/micro/rain_ice_red.f90 b/src/mesonh/micro/rain_ice_red.f90
index 44f329c5b..a19b972fa 100644
--- a/src/mesonh/micro/rain_ice_red.f90
+++ b/src/mesonh/micro/rain_ice_red.f90
@@ -118,7 +118,7 @@ END MODULE MODI_RAIN_ICE_RED
       SUBROUTINE RAIN_ICE_RED (D, CST, PARAMI, ICEP, ICED, BUCONF,                &
                             KPROMA, KSIZE,                                        &
                             OSEDIC, OCND2, HSEDIM, HSUBG_AUCV_RC, HSUBG_AUCV_RI,  &
-                            OWARM, KKA, KKU, KKL,                                 &
+                            OWARM,                                                &
                             PTSTEP, KRR, ODMICRO, PEXN,                           &
                             PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,&
                             PHLC_HRC, PHLC_HCF, PHLI_HRI,  PHLI_HCF,              &
@@ -463,7 +463,6 @@ REAL, DIMENSION(KPROMA) :: ZTIME ! Current integration time (starts with 0 and e
 REAL, DIMENSION(KPROMA) :: &
                         & ZMAXTIME, & ! Time on which we can apply the current tendencies
                         & ZTIME_LASTCALL, &     ! Integration time when last tendecies call has been done
-                        & ZCOMPUTE, & ! 1. for points where we must compute tendencies, 0. elsewhere
                         & ZSSI,     &
                         & ZCIT,     & ! Pristine ice conc. at t
                         & ZRHODREF, & ! RHO Dry REFerence
@@ -484,6 +483,7 @@ REAL, DIMENSION(KPROMA) :: &
                         & ZHLI_LCF, &
                         & ZHLI_HRI, &
                         & ZHLI_LRI
+LOGICAL, DIMENSION(KPROMA) :: LLCOMPUTE ! .TRUE. or points where we must compute tendencies,
 !
 !Output packed tendencies (for budgets only)
 REAL, DIMENSION(KPROMA) :: ZRVHENI_MR, & ! heterogeneous nucleation mixing ratio change
@@ -594,7 +594,6 @@ IF(.NOT. PARAMI%LSEDIM_AFTER) THEN
   IF (BUCONF%LBUDGET_RS)              CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RS), 'SEDI', PRSS(:, :, :) * PRHODJ(:, :, :))
   IF (BUCONF%LBUDGET_RG)              CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RG), 'SEDI', PRGS(:, :, :) * PRHODJ(:, :, :))
   IF (BUCONF%LBUDGET_RH .AND. KRR==7) CALL BUDGET_STORE_INIT(TBUDGETS(NBUDGET_RH), 'SEDI', PRHS(:, :, :) * PRHODJ(:, :, :))
-
   IF(HSEDIM=='STAT') THEN
     IF(KRR==7) THEN
       DO JK = D%NKTB,D%NKTE
@@ -681,7 +680,6 @@ IF(.NOT. PARAMI%LSEDIM_AFTER) THEN
 
 
 
-
 !!!!! ajouter momentum
 
 
@@ -708,7 +706,6 @@ IF(.NOT. PARAMI%LSEDIM_AFTER) THEN
   IF (BUCONF%LBUDGET_RH .AND. KRR==7) CALL BUDGET_STORE_END(TBUDGETS(NBUDGET_RH), 'SEDI', PRHS(:, :, :) * PRHODJ(:, :, :))
 ENDIF
 !
-
 DO JK = D%NKTB,D%NKTE
   !Backup of T variables
   ZWR(:,:,JK,IRV)=PRVT(:,:,JK)
@@ -950,17 +947,17 @@ IF (KSIZE > 0) THEN
       ENDIF
       DO JL=1, IMICRO
         IF (ZTIME(JL) < PTSTEP) THEN
-          ZCOMPUTE(JL)=1. ! Computation (1.) only for points for which integration time has not reached the timestep
+          LLCOMPUTE(JL)=.TRUE. ! Computation (.TRUE.) only for points for which integration time has not reached the timestep
           IITER(JL)=IITER(JL)+1
         ELSE
-          ZCOMPUTE(JL)=0.
+          LLCOMPUTE(JL)=.FALSE.
         ENDIF
       ENDDO
       LL_ANY_ITER=ANY(IITER(1:IMICRO) < INB_ITER_MAX)
       LLCPZ0RT=.TRUE.
       LSOFT=.FALSE. ! We *really* compute the tendencies
 
-      DO WHILE(ANY(ZCOMPUTE(1:IMICRO)==1.)) ! Loop to adjust tendencies when we cross the 0°C or when a species disappears
+      DO WHILE(ANY(LLCOMPUTE(1:IMICRO))) ! Loop to adjust tendencies when we cross the 0°C or when a species disappears
 !$OMP SIMD
         DO JL=1, IMICRO
           ZSUM2(JL)=SUM(ZVART(JL,IRI:KRR))
@@ -975,9 +972,9 @@ IF (KSIZE > 0) THEN
         !***       4.1 Tendencies computation
         !
         ! Tendencies are *really* computed when LSOFT==.FALSE. and only adjusted otherwise
-    CALL ICE4_TENDENCIES(D, CST, PARAMI, ICEP, ICED, &
+    CALL ICE4_TENDENCIES(D, CST, PARAMI, ICEP, ICED, BUCONF, &
                         &KPROMA, IMICRO, &
-                        &KRR, LSOFT, ZCOMPUTE, &
+                        &KRR, LSOFT, LLCOMPUTE, &
                         &OWARM, PARAMI%CSUBG_RC_RR_ACCR, PARAMI%CSUBG_RR_EVAP, &
                         &HSUBG_AUCV_RC, HSUBG_AUCV_RI, PARAMI%CSUBG_PR_PDF, &
                         &ZEXN, ZRHODREF, ZLVFACT, ZLSFACT, I1, I2, I3, &
@@ -1011,7 +1008,11 @@ IF (KSIZE > 0) THEN
         !
         ! If we can, we shall use these tendencies until the end of the timestep
         DO JL=1, IMICRO
-          ZMAXTIME(JL)=ZCOMPUTE(JL) * (PTSTEP-ZTIME(JL)) ! Remaining time until the end of the timestep
+          IF(LLCOMPUTE(JL)) THEN
+            ZMAXTIME(JL)=(PTSTEP-ZTIME(JL)) ! Remaining time until the end of the timestep
+          ELSE
+            ZMAXTIME(JL)=0.
+          ENDIF
         ENDDO
 
         !We need to adjust tendencies when temperature reaches 0
@@ -1045,7 +1046,7 @@ IF (KSIZE > 0) THEN
         !We stop when the end of the timestep is reached
         DO JL=1, IMICRO
           IF (ZTIME(JL)+ZMAXTIME(JL) >= PTSTEP) THEN
-            ZCOMPUTE(JL)=0.
+            LLCOMPUTE(JL)=.FALSE.
           ENDIF
         ENDDO
         !We must recompute tendencies when the end of the sub-timestep is reached
@@ -1053,7 +1054,7 @@ IF (KSIZE > 0) THEN
           DO JL=1, IMICRO
             IF ((IITER(JL) < INB_ITER_MAX) .AND. (ZTIME(JL)+ZMAXTIME(JL) > ZTIME_LASTCALL(JL)+ZTSTEP)) THEN
               ZMAXTIME(JL)=ZTIME_LASTCALL(JL)-ZTIME(JL)+ZTSTEP
-              ZCOMPUTE(JL)=0.
+              LLCOMPUTE(JL)=.FALSE.
             ENDIF
           ENDDO
         ENDIF
@@ -1070,15 +1071,17 @@ IF (KSIZE > 0) THEN
               IF (LLCPZ0RT) Z0RT(1:IMICRO, JV)=ZVART(1:IMICRO, JV)
               DO JL=1, IMICRO
                 IF (IITER(JL)<INB_ITER_MAX .AND. ABS(ZA(JL,JV))>1.E-20) THEN
-                  ZTIME_THRESHOLD1D(JL)=(SIGN(1., ZA(JL, JV))*PARAMI%XMRSTEP+Z0RT(JL, JV)-ZVART(JL, JV)-ZB(JL, JV))/ZA(JL, JV)
+                  ZTIME_THRESHOLD1D(JL)=(SIGN(1., ZA(JL, JV))*PARAMI%XMRSTEP+&
+                                         Z0RT(JL, JV)-ZVART(JL, JV)-ZB(JL, JV))/ZA(JL, JV)
                 ELSE
                   ZTIME_THRESHOLD1D(JL)=-1.
                 ENDIF
               ENDDO
               DO JL=1, IMICRO
-                IF (ZTIME_THRESHOLD1D(JL)>=0 .AND. ZTIME_THRESHOLD1D(JL)<ZMAXTIME(JL) .AND. (ZVART(JL, JV)>ICED%XRTMIN(JV) .OR. ZA(JL, JV)>0.)) THEN
+                IF (ZTIME_THRESHOLD1D(JL)>=0 .AND. ZTIME_THRESHOLD1D(JL)<ZMAXTIME(JL) .AND. &
+                   (ZVART(JL, JV)>ICED%XRTMIN(JV) .OR. ZA(JL, JV)>0.)) THEN
                   ZMAXTIME(JL)=MIN(ZMAXTIME(JL), ZTIME_THRESHOLD1D(JL))
-                  ZCOMPUTE(JL)=0.
+                  LLCOMPUTE(JL)=.FALSE.
                 ENDIF
               ENDDO
             ENDDO
@@ -1090,7 +1093,7 @@ IF (KSIZE > 0) THEN
             DO JL=1, IMICRO
               IF (IITER(JL)<INB_ITER_MAX .AND. ZMAXB(JL)>PARAMI%XMRSTEP) THEN
                 ZMAXTIME(JL)=0.
-                ZCOMPUTE(JL)=0.
+                LLCOMPUTE(JL)=.FALSE.
               ENDIF
             ENDDO
           ENDIF ! LL_ANY_ITER
@@ -1208,6 +1211,7 @@ PCIT(:,:,:)=ZCITOUT(:,:,:)
 !*       6.     COMPUTES THE SLOW COLD PROCESS SOURCES OUTSIDE OF ODMICRO POINTS
 !               ----------------------------------------------------------------
 !
+
 DO JK=D%NKTB,D%NKTE
   DO JJ=D%NJB,D%NJE
 !DIR$ VECTOR ALWAYS
@@ -1215,7 +1219,7 @@ DO JK=D%NKTB,D%NKTE
       IF (.NOT. ODMICRO(JI, JJ, JK)) THEN
         ZW0D=ZZ_LSFACT(JI, JJ, JK)/PEXN(JI, JJ, JK)
       ENDIF
-      CALL ICE4_NUCLEATION_ELEM(.NOT. ODMICRO(JI, JJ, JK), &
+      CALL ICE4_NUCLEATION_ELEM(CST, PARAMI, ICEP, ICED, .NOT. ODMICRO(JI, JJ, JK), &
                                 PTHT(JI, JJ, JK), PPABST(JI, JJ, JK), PRHODREF(JI, JJ, JK), &
                                 PEXN(JI, JJ, JK), ZW0D, ZT(JI, JJ, JK), &
                                 PRVT(JI, JJ, JK), &
@@ -1535,16 +1539,21 @@ IF(BUCONF%LBU_ENABLE) THEN
     IF (BUCONF%LBUDGET_RR) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RR), 'WETH', -ZW2(:, :, :)                 *PRHODJ(:, :, :))
     IF (BUCONF%LBUDGET_RI) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RI), 'WETH', -ZW3(:, :, :)                 *PRHODJ(:, :, :))
     IF (BUCONF%LBUDGET_RS) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RS), 'WETH', -ZW4(:, :, :)                 *PRHODJ(:, :, :))
+#ifdef REPRO48
+#else
     IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'WETH', -ZW5(:, :, :)                 *PRHODJ(:, :, :))
+#endif
     IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RH), 'WETH', (ZW1(:, :, :)+ZW2(:, :, :)+ZW3(:, :, :)+ &
                                                                         &ZW4(:, :, :)+ZW5(:, :, : ))  *PRHODJ(:, :, :))
 
+#if defined(REPRO48) || defined(REPRO55)
     ZW(:,:,:) = 0.
     DO JL=1, KSIZE
       ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RGWETH(JL) * ZINV_TSTEP
     END DO
-    IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'HGCV', -ZW(:, :, :)*PRHODJ(:, :, :))
+    IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'HGCV', (-ZW5(:, :, :)-ZW(:, :, :))*PRHODJ(:, :, :))
     IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RH), 'HGCV',  ZW(:, :, :)*PRHODJ(:, :, :))
+#endif
 
     ZW1(:,:,:) = 0.
     DO JL=1, KSIZE
@@ -1567,9 +1576,12 @@ IF(BUCONF%LBU_ENABLE) THEN
       ZW5(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RGDRYH(JL) * ZINV_TSTEP
     END DO
     ZW6(:,:,:) = 0.
+#if defined(REPRO48) || defined(REPRO55)
+    !ZW6 must be removed when REPRO48 will be suppressed
     DO JL=1, KSIZE
       ZW6(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RDRYHG(JL) * ZINV_TSTEP
     END DO
+#endif
     IF (BUCONF%LBUDGET_TH) &
       CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_TH), 'DRYH', (ZW1(:, :, :)+ZW2(:, :, :))*ZZ_DIFF(:, :, :)*PRHODJ(:, :, :))
     IF (BUCONF%LBUDGET_RC) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RC), 'DRYH', -ZW1(:, :, :)                 *PRHODJ(:, :, :))
@@ -1581,6 +1593,17 @@ IF(BUCONF%LBU_ENABLE) THEN
                                                                         &ZW4(:, :, :)+ZW5(:, :, : )-ZW6(:, :, :)) &
                                                                         &                             *PRHODJ(:, :, :))
 
+#if defined(REPRO48) || defined(REPRO55)
+#else
+    !When REPRO48 will be suppressed, ZW6 must be removed
+    ZW(:,:,:) = 0.
+    DO JL=1, KSIZE
+      ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RDRYHG(JL) * ZINV_TSTEP
+    END DO
+    IF (BUCONF%LBUDGET_RG) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RG), 'HGCV', -ZW(:, :, :)*PRHODJ(:, :, :))
+    IF (BUCONF%LBUDGET_RH) CALL BUDGET_STORE_ADD(TBUDGETS(NBUDGET_RH), 'HGCV',  ZW(:, :, :)*PRHODJ(:, :, :))
+#endif
+
     ZW(:,:,:) = 0.
     DO JL=1, KSIZE
       ZW(I1TOT(JL), I2TOT(JL), I3TOT(JL)) = ZTOT_RHMLTR(JL) * ZINV_TSTEP
-- 
GitLab