From b6aa2743171cfe722ba0a4ee748198d8c0b61876 Mon Sep 17 00:00:00 2001
From: VIE Benoit <vie@sxphynh>
Date: Tue, 17 Jan 2023 17:06:41 +0100
Subject: [PATCH] compilation ok !

---
 src/arome/ext/apl_arome.F90                   |  39 ++-
 src/arome/ext/aro_adjust_lima.F90             | 120 +++----
 src/arome/ext/aro_adjust_lima.h               |  13 +-
 src/arome/ext/aro_lima.F90                    |  22 +-
 src/arome/ext/aro_lima.h                      |   8 +-
 src/arome/ext/aroini_micro_lima.F90           | 164 ++++++----
 src/arome/ext/namlima.nam.h                   |  16 +
 src/arome/micro/lima_nucleation_procs.F90     | 297 ------------------
 src/common/micro/ini_lima_cold_mixed.F90      |   4 +-
 src/common/micro/lima.F90                     |  23 +-
 src/common/micro/lima_adjust_split.F90        |  20 +-
 src/common/micro/lima_nucleation_procs.F90    | 252 ++++++++-------
 src/common/micro/modd_param_lima_cold.F90     |   8 +
 .../micro/mode_lima_ice4_nucleation.F90       | 147 +++++++++
 tools/check_commit_ial.sh                     |   1 +
 15 files changed, 556 insertions(+), 578 deletions(-)
 create mode 100644 src/arome/ext/namlima.nam.h
 delete mode 100644 src/arome/micro/lima_nucleation_procs.F90
 create mode 100644 src/common/micro/mode_lima_ice4_nucleation.F90

diff --git a/src/arome/ext/apl_arome.F90 b/src/arome/ext/apl_arome.F90
index bbf2d2f26..7e421c6d8 100644
--- a/src/arome/ext/apl_arome.F90
+++ b/src/arome/ext/apl_arome.F90
@@ -399,6 +399,8 @@ REAL(KIND=JPRB) :: ZCVTENDRV_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG),  ZCVTENDRC_(Y
 REAL(KIND=JPRB) :: ZMFS_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG),       ZTHLS_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG),      ZRTS_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG)
 REAL(KIND=JPRB) :: ZMFUS_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG),      ZMFVS_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG),      ZDEPTH_HEIGHT_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG)
 
+REAL(KIND=JPRB) :: ZDTHRAD_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG)
+
 REAL(KIND=JPRB), TARGET :: ZFLXZTHVMF_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG)
 REAL(KIND=JPRB), POINTER :: ZARG_FLXZTHVMF_(:,:)
 
@@ -1137,6 +1139,7 @@ IF (INIT0 >= 0) THEN
   ZRC_MF_(:,:)=ZVALUE
   ZRI_MF_(:,:)=ZVALUE
   ZCF_MF_(:,:)=ZVALUE
+  ZDTHRAD_(:,:)=ZVALUE
 
   ZSVSWAP_(:,:,:)=ZVALUE
   ZSVSAVE_(:,:,:)=ZVALUE
@@ -1469,6 +1472,17 @@ IF (LMICRO.OR.LTURB.OR.LLMSE.OR.LKFBCONV) THEN
     ENDDO
   ENDDO
 
+  !initialisation de ZZI_THRAD
+  IF (YDCPG_OPTS%KSTEP==0) THEN
+     DO JLEV = 1, YDCPG_OPTS%KFLEVG 
+        ZDTHRAD_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=0._JPRB
+     ENDDO
+  ELSE
+     DO JLEV = 1, YDCPG_OPTS%KFLEVG 
+        ZDTHRAD_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)=ZP1EZDIAG(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,5)
+     ENDDO
+  ENDIF
+
 ENDIF
 
 ! daand: radflex
@@ -1564,14 +1578,25 @@ IF (LMICRO) THEN
 
   IF (CMICRO == 'LIMA') THEN
 
+    IF (LTURB) THEN
+      DO JLON=YDCPG_BNDS%KIDIA,YDCPG_BNDS%KFDIA
+        DO JLEV=1,YDCPG_OPTS%KFLEVG
+          ZWNU_(JLON,JLEV) = ZWM__(JLON,JLEV) + 0.66*SQRT(ZTKEM__(JLON,JLEV))
+        ENDDO
+      ENDDO
+      ZPTRWNU_ => ZWNU_(1:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)
+    ELSE
+      ZPTRWNU_ => ZWM__(1:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)
+    ENDIF
+
     CALL SWAP_LIMAS
     ! for now a copy is needed (see below, inside). I don't like than :-( REK
     ZLIMAS_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,1:NLIMA)=ZLIMASIN_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG,1:NLIMA)
 
     CALL ARO_ADJUST_LIMA (YDCPG_OPTS%KFLEVG, IKU, IKL, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG, YDCPG_BNDS%KFDIA, NRR,        &
-    & NLIMA, YDCPG_OPTS%KSTEP+1, LOSUBG_COND, LOSIGMAS, LOCND2, ZDT, VSIGQSAT, ZZZ_F_, ZRHODJM__(:, 1:YDCPG_OPTS%KFLEVG), &
+    & NLIMA, YDCPG_OPTS%KSTEP+1, LOSUBG_COND, LOSIGMAS, LOCND2, CCONDENS, CLAMBDA3, ZDT, VSIGQSAT, ZZZ_F_, ZRHODJM__(:, 1:YDCPG_OPTS%KFLEVG), &
     & ZRHODREFM__(:, 1:YDCPG_OPTS%KFLEVG), ZEXNREFM_, ZPABSM__(:, 1:YDCPG_OPTS%KFLEVG), ZTHM__(:, 1:YDCPG_OPTS%KFLEVG),   &
-    & ZRM_, ZLIMAM_, ZSIGM_, ZMFM_, ZRC_MF_, ZRI_MF_, ZCF_MF_, ZTHS__(:, 1:YDCPG_OPTS%KFLEVG), ZRS_,                      &
+    & ZRM_, ZLIMAM_, ZSIGM_, ZPTRWNU_, ZDTHRAD_, ZMFM_, ZRC_MF_, ZRI_MF_, ZCF_MF_, ZTHS__(:, 1:YDCPG_OPTS%KFLEVG), ZRS_,                      &
     & ZLIMAS_, ZSRCS__(:, 1:YDCPG_OPTS%KFLEVG), ZNEBMNH_, YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH       &
     &                               )
   ELSE
@@ -2200,6 +2225,14 @@ ENDIF
     ENDDO
   ENDIF
 
+  !initialisation de ZZI_THRAD
+  DO JLEV = 1, YDCPG_OPTS%KFLEVG
+     DO JLON = YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA
+        ZDTHRAD_(JLON,JLEV)=ZTENT(JLON,JLEV)/ZEXNREFM_(JLON,JLEV)
+     END DO
+     ZP1EZDIAG(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV,5)=ZDTHRAD_(YDCPG_BNDS%KIDIA:YDCPG_BNDS%KFDIA,JLEV)
+  ENDDO
+
   DO JLON = YDCPG_BNDS%KIDIA, YDCPG_BNDS%KFDIA
     ! update sunshine duration [s]
     !YDMF_PHYS_SURF%GSD_VD%PSUND(JLON)=YDMF_PHYS_SURF%GSD_VD%PSUND(JLON)+ZSDUR(JLON)*TSTEP
@@ -3160,7 +3193,7 @@ IF (LMICRO) THEN
     ENDIF
     CALL ARO_LIMA(YDCPG_OPTS%KFLEVG, IKU, IKL, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG,YDCPG_BNDS%KFDIA,NRR, NLIMA, YDCPG_OPTS%KSTEP+1, &
     & NSPLITR, NSPLITG, ZDT, ZDZZ_, ZRHODJM__(:, 1:YDCPG_OPTS%KFLEVG), ZRHODREFM__(:, 1:YDCPG_OPTS%KFLEVG),               &
-    & ZEXNREFM_, ZPABSM__(:, 1:YDCPG_OPTS%KFLEVG), ZPTRWNU_, ZTHM__(:, 1:YDCPG_OPTS%KFLEVG), ZRM_,                        &
+    & ZEXNREFM_, ZPABSM__(:, 1:YDCPG_OPTS%KFLEVG), ZPTRWNU_, ZDTHRAD_, ZTHM__(:, 1:YDCPG_OPTS%KFLEVG), ZRM_,                     &
     & ZLIMAM_, ZTHS__(:, 1:YDCPG_OPTS%KFLEVG), ZRS_, ZLIMAS_, ZEVAP_, ZINPRR_NOTINCR_,                                    &
     & ZINPRS_NOTINCR_, ZINPRG_NOTINCR_, ZINPRH_NOTINCR_, ZPFPR_, ZNEBMNH_, YDDDH, YDMODEL%YRML_DIAG%YRLDDH,               &
     & YDMODEL%YRML_DIAG%YRMDDH)
diff --git a/src/arome/ext/aro_adjust_lima.F90 b/src/arome/ext/aro_adjust_lima.F90
index 6cd01e848..6d9ace015 100644
--- a/src/arome/ext/aro_adjust_lima.F90
+++ b/src/arome/ext/aro_adjust_lima.F90
@@ -1,12 +1,13 @@
 !     ######spl
       SUBROUTINE  ARO_ADJUST_LIMA(KKA,KKU,KKL,KLON,KLEV,KFDIA,  KRR, KSV, KTCOUNT,  &
-                                  OSUBG_COND, OSIGMAS, OCND2, &
+                                  OSUBG_COND, OSIGMAS, OCND2, HCONDENS, HLAMBDA3, &
                                   PTSTEP, PSIGQSAT, &
                                   PZZF, PRHODJ, PRHODREF, PEXNREF,&
                                   PPABSM, PTHT, PRT, PSVT, PSIGS, &
+                                  PW_NU, PDTHRAD, &
                                   PMFCONV, PRC_MF, PRI_MF, PCF_MF, &
                                   PTHS, PRS,  PSVS, PSRCS, PCLDFR, &
-                            YDDDH, YDLDDH, YDMDDH)
+                                  YDDDH, YDLDDH, YDMDDH)
       USE PARKIND1, ONLY : JPRB
       USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !     ##########################################################################
@@ -81,12 +82,13 @@ USE MODD_CONF
 USE MODD_CST
 USE MODD_PARAMETERS
 USE MODD_RAIN_ICE_DESCR
-USE MODD_BUDGET
+USE MODD_BUDGET, ONLY: TBUDGETDATA, NBUDGET_SV1, TBUCONF
 !
 USE MODD_PARAM_LIMA
 USE MODD_NSV
 !
-USE MODI_LIMA_ADJUST
+USE MODI_LIMA_ADJUST_SPLIT
+USE MODE_FILL_DIMPHYEX, ONLY: FILL_DIMPHYEX
 !USE MODE_BUDGET, ONLY: BUDGET_DDH
 !
 USE DDH_MIX, ONLY  : TYP_DDH
@@ -116,6 +118,8 @@ LOGICAL,                  INTENT(IN)   :: OSIGMAS  ! Switch for Sigma_s:
                                         ! use values computed in CONDENSATION
                                         ! or that from turbulence scheme
 LOGICAL,                  INTENT(IN)   :: OCND2
+CHARACTER*80,             INTENT(IN)   :: HCONDENS
+CHARACTER*4,              INTENT(IN)   :: HLAMBDA3 ! formulation for lambda3 coeff
 REAL,                     INTENT(IN)   :: PTSTEP   ! Time step
 REAL,                     INTENT(IN)   :: PSIGQSAT ! coeff applied to qsat variance contribution
 !
@@ -131,6 +135,10 @@ REAL, DIMENSION(KLON,1,KLEV),   INTENT(IN)   :: PTHT    ! Theta at time t
 REAL, DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PRT     ! Moist variables at time t
 REAL, DIMENSION(KLON,1,KLEV,KSV), INTENT(INOUT) :: PSVT     ! Moist variables at time t
 REAL, DIMENSION(KLON,1,KLEV),   INTENT(IN)   :: PSIGS   ! Sigma_s at time t
+!
+REAL, DIMENSION(KLON,1,KLEV),   INTENT(IN)   :: PW_NU   ! w for CCN activation
+REAL, DIMENSION(KLON,1,KLEV),   INTENT(IN)   :: PDTHRAD ! rad theta tendency for CCN activation
+!
 REAL, DIMENSION(KLON,1,KLEV),   INTENT(IN)   :: PMFCONV ! convective mass flux
 REAL, DIMENSION(KLON,1,KLEV),   INTENT(IN)   :: PRC_MF, PRI_MF, PCF_MF
 !
@@ -146,9 +154,9 @@ REAL, DIMENSION(KLON,1,KLEV),   INTENT(OUT)   :: PSRCS ! Second-order flux
 REAL, DIMENSION(KLON,1,KLEV), INTENT(INOUT)   :: PCLDFR! Cloud fraction
 !
 !
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
+TYPE(TYP_DDH), INTENT(INOUT), TARGET :: YDDDH
+TYPE(TLDDH), INTENT(IN), TARGET :: YDLDDH
+TYPE(TMDDH), INTENT(IN), TARGET :: YDMDDH
 !
 !*       0.2   Declarations of local variables :
 
@@ -170,6 +178,7 @@ REAL, DIMENSION(SIZE(PZZF,1),SIZE(PZZF,2),SIZE(PZZF,3)):: ZCOR
                                     ! for the correction of negative rv
 REAL, DIMENSION(SIZE(PZZF,1),SIZE(PZZF,2),SIZE(PZZF,3)):: ZZZ
                                     ! model layer height
+REAL, DIMENSION(KLON,1,KLEV):: ZICEFR
 REAL  :: ZMASSTOT                   ! total mass  for one water category
                                     ! including the negative values
 REAL  :: ZMASSPOS                   ! total mass  for one water category
@@ -216,11 +225,11 @@ ZCPH(:,:,:)=XCPD +XCPV*2.*PTSTEP*PRS(:,:,:,1)
 !
 !*       3.1    Non local correction for precipitating species (Rood 87)
 !
-  DO JRR = 3,KRR
-    SELECT CASE (JRR)
-      CASE(3,5,6,7) ! rain, snow, graupel and hail
+DO JRR = 3,KRR
+   SELECT CASE (JRR)
+   CASE(3,5,6,7) ! rain, snow, graupel and hail
 
-        IF ( MINVAL( PRS(:,:,:,JRR)) < 0.0 ) THEN
+      IF ( MINVAL( PRS(:,:,:,JRR)) < 0.0 ) THEN
 ! For AROME, we cannot use MAX_ll so that according to JPP's advises
 !  we only correct negative values but not the total mass
 ! compute the total water mass computation
@@ -229,7 +238,7 @@ ZCPH(:,:,:)=XCPD +XCPV*2.*PTSTEP*PRS(:,:,:,1)
 !
 ! remove the negative values
 !
-          PRS(:,:,:,JRR) = MAX( 0., PRS(:,:,:,JRR) )
+         PRS(:,:,:,JRR) = MAX( 0., PRS(:,:,:,JRR) )
 !
 ! compute the new total mass
 !
@@ -240,34 +249,34 @@ ZCPH(:,:,:)=XCPD +XCPV*2.*PTSTEP*PRS(:,:,:,1)
 !          ZRATIO = ZMASSTOT / ZMASSPOS
 !          PRS(:,:,:,JRR) = PRS(:,:,:,JRR) * ZRATIO
 
-        END IF
-    END SELECT
-  END DO
+      END IF
+   END SELECT
+END DO
 !
 !*       3.2    Correct negative values
 !
 ! Correction where rc<0
-     IF (NMOM_C.GE.1) THEN
+IF (NMOM_C.GE.1) THEN
 !        WHERE (PRS(:,:,:,2) < 0. .OR. PSVS(:,:,:,NSV_LIMA_NC) < 0.)
-        WHERE (PRS(:,:,:,2) < 0.)
-           PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2)
-           PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) /  &
-                ZCPH(:,:,:) / PEXNREF(:,:,:)
-           PRS(:,:,:,2)  = 0.0
-           PSVS(:,:,:,NSV_LIMA_NC) = 0.0
-        END WHERE
-     END IF
+   WHERE (PRS(:,:,:,2) < 0.)
+      PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2)
+      PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) /  &
+           ZCPH(:,:,:) / PEXNREF(:,:,:)
+      PRS(:,:,:,2)  = 0.0
+      PSVS(:,:,:,NSV_LIMA_NC) = 0.0
+   END WHERE
+END IF
 ! Correction where rr<0
-     IF (NMOM_R.GE.1) THEN
+IF (NMOM_R.GE.1) THEN
 !        WHERE (PRS(:,:,:,3) < 0. .OR. PSVS(:,:,:,NSV_LIMA_NR) < 0.)
-        WHERE (PRS(:,:,:,3) < 0.)
-           PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,3)
-           PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,3) * ZLV(:,:,:) /  &
-                ZCPH(:,:,:) / PEXNREF(:,:,:)
-           PRS(:,:,:,3)  = 0.0
-           PSVS(:,:,:,NSV_LIMA_NR) = 0.0
-        END WHERE
-     END IF
+   WHERE (PRS(:,:,:,3) < 0.)
+      PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,3)
+      PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,3) * ZLV(:,:,:) /  &
+           ZCPH(:,:,:) / PEXNREF(:,:,:)
+      PRS(:,:,:,3)  = 0.0
+      PSVS(:,:,:,NSV_LIMA_NR) = 0.0
+   END WHERE
+END IF
 ! Correction of IFN concentrations where ri<0 or Ni<0
 !     IF (LCOLD_LIMA) THEN
 !        DO JMOD = 1, NMOD_IFN 
@@ -280,18 +289,18 @@ ZCPH(:,:,:)=XCPD +XCPV*2.*PTSTEP*PRS(:,:,:,1)
 !        ENDDO
 !     END IF
 ! Correction where ri<0
-     IF (NMOM_I.GE.1) THEN
+IF (NMOM_I.GE.1) THEN
 !        WHERE (PRS(:,:,:,4) < 0. .OR. PSVS(:,:,:,NSV_LIMA_NI) < 0.)
-        WHERE (PRS(:,:,:,4) < 0.)
-           PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4)
-           PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLS(:,:,:) /  &
-                ZCPH(:,:,:) / PEXNREF(:,:,:)
-           PRS(:,:,:,4)  = 0.0
-           PSVS(:,:,:,NSV_LIMA_NI) = 0.0
-        END WHERE
-     END IF
+   WHERE (PRS(:,:,:,4) < 0.)
+      PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4)
+      PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLS(:,:,:) /  &
+           ZCPH(:,:,:) / PEXNREF(:,:,:)
+      PRS(:,:,:,4)  = 0.0
+      PSVS(:,:,:,NSV_LIMA_NI) = 0.0
+   END WHERE
+END IF
 !
-     PSVS(:,:,:,:) = MAX( 0.0,PSVS(:,:,:,:) )
+PSVS(:,:,:,:) = MAX( 0.0,PSVS(:,:,:,:) )
 !
 !
 !*       3.3  STORE THE BUDGET TERMS
@@ -306,11 +315,11 @@ ZCPH(:,:,:)=XCPD +XCPV*2.*PTSTEP*PRS(:,:,:,1)
 !IF (LBUDGET_RH) CALL BUDGET (PRS(:,:,:,7) * PRHODJ(:,:,:),12,'NEGA_BU_RRH')
 !IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)  * PRHODJ(:,:,:), 4,'NEGA_BU_RTH')
 
-DO JRR=1, NBUDGET_SV1+NSV_LIMA-1
-  YLBUDGET(JRR)%NBUDGET=JRR
-  YLBUDGET(JRR)%YDDDH=>YDDDH
-  YLBUDGET(JRR)%YDLDDH=>YDLDDH
-  YLBUDGET(JRR)%YDMDDH=>YDMDDH
+DO JRR = 1, NBUDGET_SV1+NSV_LIMA-1
+   YLBUDGET(JRR)%NBUDGET=JRR
+   YLBUDGET(JRR)%YDDDH=>YDDDH
+   YLBUDGET(JRR)%YDLDDH=>YDLDDH
+   YLBUDGET(JRR)%YDMDDH=>YDMDDH
 ENDDO
 !
 !-------------------------------------------------------------------------------
@@ -324,14 +333,13 @@ ENDDO
 !
     ZZZ =  PZZF
 
-    CALL LIMA_ADJUST_SPLIT(YLDIMPHYEX, CST, TBUCONF, TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET), &
-                     KRR=KRR, KMI=KMI, HFMFILE='DUMMY', HLUOUT='DUMMY', HRAD='DUMMY',                  &
-                     HTURBDIM=HTURBDIM, OCLOSE_OUT=.FALSE., OSUBG_COND=.FALSE., PTSTEP=2*PTSTEP,         &
-                     PRHODREF=PRHODREF, PRHODJ=PRHODJ, PEXNREF=PEXNREF, PPABSM=PPABSM, PSIGS=PSIGS, PPABST=PPABSM, &
-                     PRT=PRT, PRS=PRS, PSVT=PSVT, PSVS=PSVS,                             &
-                     PTHS=PTHS, PSRCS=PSRCS, PCLDFR=PCLDFR, &
-                     YDDDH=YDDDH, YDLDDH=YDLDDH, YDMDDH=YDMDDH                              )
-
+    CALL LIMA_ADJUST_SPLIT(D=YLDIMPHYEX, CST=CST, BUCONF=TBUCONF, TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET), &
+         KRR=KRR, KMI=KMI, HCONDENS=HCONDENS, HLAMBDA3=HLAMBDA3, &
+         OSUBG_COND=OSUBG_COND, OSIGMAS=OSIGMAS, PTSTEP=2*PTSTEP, PSIGQSAT=PSIGQSAT, &
+         PRHODREF=PRHODREF, PRHODJ=PRHODJ, PEXNREF=PEXNREF, PSIGS=PSIGS, PMFCONV=PMFCONV, &
+         PPABST=PPABSM, PPABSTT=PPABSM, PZZ=ZZZ, PDTHRAD=PDTHRAD, PW_NU=PW_NU, &
+         PRT=PRT, PRS=PRS, PSVT=PSVT, PSVS=PSVS, &
+         PTHS=PTHS, PSRCS=PSRCS, PCLDFR=PCLDFR, PICEFR=ZICEFR, PRC_MF=PRC_MF, PRI_MF=PRI_MF, PCF_MF=PCF_MF )
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/arome/ext/aro_adjust_lima.h b/src/arome/ext/aro_adjust_lima.h
index 7f4f9c8b9..dd691848a 100644
--- a/src/arome/ext/aro_adjust_lima.h
+++ b/src/arome/ext/aro_adjust_lima.h
@@ -1,10 +1,13 @@
 INTERFACE
 SUBROUTINE ARO_ADJUST_LIMA(KKA,KKU,KKL,KLON,KLEV,KFDIA, KRR, KSV, KTCOUNT,&
- & OSUBG_COND, OSIGMAS,OCND2,&
- & PTSTEP, PSIGQSAT, PZZF, PRHODJ, PRHODREF, PEXNREF,&
+ & OSUBG_COND, OSIGMAS,OCND2, HCONDENS, HLAMBDA3,&
+ & PTSTEP, PSIGQSAT,&
+ & PZZF, PRHODJ, PRHODREF, PEXNREF,&
  & PPABSM, PTHT, PRT, PSVT, PSIGS,&
+ & PW_NU, PDTHRAD,&
  & PMFCONV, PRC_MF, PRI_MF, PCF_MF,&
- & PTHS, PRS, PSVS, PSRCS, PCLDFR,YDDDH,YDLDDH,YDMDDH) 
+ & PTHS, PRS, PSVS, PSRCS, PCLDFR,&
+ & YDDDH,YDLDDH,YDMDDH) 
 USE PARKIND1  ,ONLY : JPIM     ,JPRB
 USE DDH_MIX, ONLY : TYP_DDH
 USE YOMLDDH, ONLY : TLDDH
@@ -21,6 +24,8 @@ INTEGER(KIND=JPIM), INTENT(IN) :: KTCOUNT
 LOGICAL, INTENT(IN) :: OSUBG_COND
 LOGICAL, INTENT(IN) :: OSIGMAS
 LOGICAL, INTENT(IN) :: OCND2
+CHARACTER*80,             INTENT(IN)   :: HCONDENS
+CHARACTER*4,              INTENT(IN)   :: HLAMBDA3
 REAL(KIND=JPRB), INTENT(IN) :: PTSTEP
 REAL(KIND=JPRB), INTENT(IN) :: PSIGQSAT
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PZZF
@@ -32,6 +37,8 @@ REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PTHT
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PRT
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KSV), INTENT(INOUT) :: PSVT
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PSIGS
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN)   :: PW_NU
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN)   :: PDTHRAD
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PMFCONV
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PRC_MF,PRI_MF,PCF_MF
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PTHS
diff --git a/src/arome/ext/aro_lima.F90 b/src/arome/ext/aro_lima.F90
index 08afb064a..d12e226fd 100644
--- a/src/arome/ext/aro_lima.F90
+++ b/src/arome/ext/aro_lima.F90
@@ -1,7 +1,7 @@
 !     ######spl
       SUBROUTINE  ARO_LIMA(KKA,KKU,KKL,KLON,KLEV,KFDIA,KRR, KSV, KTCOUNT, KSPLITR, KSPLITG, &
                                   PTSTEP, PDZZ, PRHODJ, PRHODREF, PEXNREF,&
-                                  PPABSM, PW_NU, PTHT, PRT, PSVT, &
+                                  PPABSM, PW_NU, PDTHRAD, PTHT, PRT, PSVT, &
                                   PTHS, PRS, PSVS, PEVAP,  &
                                   PINPRR,PINPRS,                 &
                                   PINPRG,PINPRH,PFPR,     &
@@ -52,6 +52,7 @@ USE MODD_NSV
 !
 USE MODD_BUDGET
 USE MODE_BUDGET, ONLY: BUDGET_DDH
+USE MODE_FILL_DIMPHYEX, ONLY: FILL_DIMPHYEX 
 !
 USE MODI_LIMA
 !
@@ -94,6 +95,7 @@ REAL, DIMENSION(KLON,1,KLEV),   INTENT(IN)   :: PEXNREF ! Reference Exner functi
 !
 REAL, DIMENSION(KLON,1,KLEV),   INTENT(IN)   :: PPABSM  ! abs. pressure at time t-dt
 REAL, DIMENSION(KLON,1,KLEV),   INTENT(IN)   :: PW_NU   ! w for CCN activation
+REAL, DIMENSION(KLON,1,KLEV),   INTENT(IN)   :: PDTHRAD ! radiative Theta tendency for CCN act.
 REAL, DIMENSION(KLON,1,KLEV),   INTENT(IN)   :: PTHT    ! Theta at time t
 REAL, DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT):: PRT   ! Moist variables at time t
 REAL, DIMENSION(KLON,1,KLEV,KSV), INTENT(INOUT):: PSVT   ! LIMA variables at time t
@@ -113,9 +115,9 @@ REAL, DIMENSION(KLON,1), INTENT(INOUT)     :: PINPRH! Hail instant precip
 REAL, DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PFPR ! upper-air precip
 !
 REAL, DIMENSION(KLON,1,KLEV),   INTENT(INOUT)   :: PCLDFR ! ice cloud fraction
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
+TYPE(TYP_DDH), INTENT(INOUT), TARGET :: YDDDH
+TYPE(TLDDH), INTENT(IN), TARGET :: YDLDDH
+TYPE(TMDDH), INTENT(IN), TARGET :: YDMDDH
 !
 !
 !*       0.2   Declarations of local variables :
@@ -208,7 +210,7 @@ END DO
 !*       3.2    Correct negative values
 !
 ! Correction where rc<0
-     IF (LWARM_LIMA) THEN
+     IF (NMOM_C.GE.2) THEN
         WHERE (PRS(:,:,:,2) < 1.E-15 .OR. PSVS(:,:,:,NSV_LIMA_NC) < 1.E-15)
            PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,2)
            PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,2) * ZLV(:,:,:) /  &
@@ -218,7 +220,7 @@ END DO
         END WHERE
      END IF
 ! Correction where rr<0
-     IF (LWARM_LIMA .AND. LRAIN_LIMA) THEN
+     IF (NMOM_R.GE.2) THEN
         WHERE (PRS(:,:,:,3) < 1.E-15 .OR. PSVS(:,:,:,NSV_LIMA_NR) < 1.E-15)
            PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,3)
            PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,3) * ZLV(:,:,:) /  &
@@ -239,7 +241,7 @@ END DO
 !        ENDDO
 !     END IF
 ! Correction where ri<0
-     IF (LCOLD_LIMA) THEN
+     IF (NMOM_I.GE.2) THEN
         WHERE (PRS(:,:,:,4) < 1.E-15 .OR. PSVS(:,:,:,NSV_LIMA_NI) < 1.E-15)
            PRS(:,:,:,1) = PRS(:,:,:,1) + PRS(:,:,:,4)
            PTHS(:,:,:) = PTHS(:,:,:) - PRS(:,:,:,4) * ZLS(:,:,:) /  &
@@ -300,12 +302,12 @@ ENDDO
 !
 !
 !
-CALL LIMA (YLDIMPHYEX, CST, TBUCONF, TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET), &
+CALL LIMA (D=YLDIMPHYEX, CST=CST, BUCONF=TBUCONF, TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET), &
            PTSTEP=2*PTSTEP,                  &
-           PRHODREF=PRHODREF, PEXNREF=PEXNREF, PZZ=PDZZ,                         &
+           PRHODREF=PRHODREF, PEXNREF=PEXNREF, PDZZ=PDZZ,                         &
            PRHODJ=PRHODJ, PPABST=PPABSM,                                 &
            NCCN=NMOD_CCN, NIFN=NMOD_IFN, NIMM=NMOD_IMM,                   &
-           PTHM=PTHT, PTHT=PTHT, PRT=PRT, PSVT=PSVT, PW_NU=PW_NU,                  &
+           PDTHRAD=PDTHRAD, PTHT=PTHT, PRT=PRT, PSVT=PSVT, PW_NU=PW_NU,                  &
            PTHS=PTHS, PRS=PRS, PSVS=PSVS,                                &
            PINPRC=ZINPRC, PINDEP=ZINDEP, PINPRR=PINPRR, PINPRI=ZINPRI, PINPRS=PINPRS, PINPRG=PINPRG, PINPRH=PINPRH, &
            PEVAP3D=PEVAP, PCLDFR=PCLDFR, PICEFR=ZICEFR, PPRCFR=ZPRCFR )
diff --git a/src/arome/ext/aro_lima.h b/src/arome/ext/aro_lima.h
index 67ab77467..44b20abcf 100644
--- a/src/arome/ext/aro_lima.h
+++ b/src/arome/ext/aro_lima.h
@@ -1,9 +1,11 @@
 INTERFACE
 SUBROUTINE ARO_LIMA(KKA,KKU,KKL,KLON,KLEV, KFDIA, KRR, KSV, KTCOUNT, KSPLITR, KSPLITG, &
  & PTSTEP, PDZZ, PRHODJ, PRHODREF, PEXNREF,&
- & PPABSM, PW_NU, PTHT, PRT, PSVT, &
+ & PPABSM, PW_NU, PDTHRAD, PTHT, PRT, PSVT, &
  & PTHS, PRS, PSVS, PEVAP,&
- & PINPRR,PINPRS,PINPRG,PINPRH,PFPR,&
+ & PINPRR,PINPRS,&
+ & PINPRG,PINPRH,PFPR,&
+ & PCLDFR,&
  & YDDDH,YDLDDH,YDMDDH)
 USE PARKIND1  ,ONLY : JPIM     ,JPRB
 USE DDH_MIX, ONLY : TYP_DDH
@@ -27,6 +29,7 @@ REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PRHODREF
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PEXNREF
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PPABSM
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PW_NU
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PDTHRAD
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PTHT
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT):: PRT
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KSV), INTENT(INOUT):: PSVT
@@ -39,6 +42,7 @@ REAL(KIND=JPRB), DIMENSION(KLON,1), INTENT(INOUT) :: PINPRS
 REAL(KIND=JPRB), DIMENSION(KLON,1), INTENT(INOUT) :: PINPRG
 REAL(KIND=JPRB), DIMENSION(KLON,1), INTENT(INOUT) :: PINPRH
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PFPR
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PCLDFR
 TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
 TYPE(TLDDH), INTENT(IN) :: YDLDDH
 TYPE(TMDDH), INTENT(IN) :: YDMDDH
diff --git a/src/arome/ext/aroini_micro_lima.F90 b/src/arome/ext/aroini_micro_lima.F90
index 839aa2de9..9aeebbcdc 100644
--- a/src/arome/ext/aroini_micro_lima.F90
+++ b/src/arome/ext/aroini_micro_lima.F90
@@ -93,13 +93,26 @@ ILUOUT = KULOUT
 ! lecture Valeurs par défaut pour les paramètres de la namelist LIMA
 !
 LPTSPLIT           = .FALSE.
-LCOLD_LIMA              = .TRUE.
-LNUCL_LIMA              = .TRUE.
-LSEDI_LIMA              = .FALSE.
-LSNOW_LIMA              = .TRUE.
-LHAIL_LIMA              = .FALSE.
-LHHONI_LIMA             = .FALSE.
-LMEYERS_LIMA            = .FALSE.
+LFEEDBACKT         = .TRUE.
+NMAXITER           = 5
+XMRSTEP            = 0.
+XTSTEP_TS          = 0.
+!
+NMOM_C             = 2
+NMOM_R             = 2
+NMOM_I             = 2
+NMOM_S             = 1
+NMOM_G             = 1
+NMOM_H             = 0
+!
+LNUCL              = .TRUE.
+LSEDI              = .TRUE.
+LSNOW_T            = .FALSE.
+LHHONI             = .FALSE.
+LMEYERS            = .FALSE.
+LCIBU              = .FALSE.
+LRDSF              = .FALSE.
+LMURAKAMI          = .FALSE.
 NMOD_IFN           = 1
 XIFN_CONC(1)       = 1000
 LIFN_HOM           = .TRUE.
@@ -119,11 +132,15 @@ XFACTNUC_DEP       = 1.
 XFACTNUC_CON       = 1.
 NPHILLIPS          = 8
 !
-LWARM_LIMA              = .TRUE.
-LACTI_LIMA              = .TRUE.
-LRAIN_LIMA              = .TRUE.
-LSEDC_LIMA              = .FALSE.
-LACTIT_LIMA             = .FALSE.
+LACTI              = .TRUE.
+LSEDC              = .TRUE.
+LDEPOC             = .TRUE.
+LACTIT             = .FALSE.
+LACTTKE            = .TRUE.
+LADJ               = .TRUE.
+LSPRO              = .FALSE.
+LKHKO              = .FALSE.
+LKESSLERAC         = .FALSE.
 NMOD_CCN           = 1
 XCCN_CONC(1)       = 350.
 LCCN_HOM           = .TRUE.
@@ -149,16 +166,16 @@ LAERO_MASS         = .FALSE.
   ISV = 1
 
   NSV_LIMA_BEG = ISV
-  IF (LWARM_LIMA) THEN
 ! Nc
+  IF (NMOM_C.GE.2) THEN
      NSV_LIMA_NC = ISV
      ISV = ISV+1
+  END IF
 ! Nr
-     IF (LRAIN_LIMA) THEN
-        NSV_LIMA_NR = ISV
-        ISV = ISV+1
-     END IF
-  END IF ! LWARM_LIMA
+  IF (NMOM_R.GE.2) THEN
+     NSV_LIMA_NR = ISV
+     ISV = ISV+1
+  END IF
 ! CCN
   IF (NMOD_CCN .GT. 0) THEN
      NSV_LIMA_CCN_FREE = ISV
@@ -172,11 +189,26 @@ LAERO_MASS         = .FALSE.
      ISV = ISV+1
   END IF ! LSCAV
 ! 
-  IF (LCOLD_LIMA) THEN
 ! Ni
+  IF (NMOM_I.GE.2) THEN
      NSV_LIMA_NI = ISV
      ISV = ISV+1
   END IF ! LCOLD_LIMA
+! Ns
+  IF (NMOM_S.GE.2) THEN
+     NSV_LIMA_NS = ISV
+     ISV = ISV+1
+  END IF ! LCOLD_LIMA
+! Ng
+  IF (NMOM_G.GE.2) THEN
+     NSV_LIMA_NG = ISV
+     ISV = ISV+1
+  END IF ! LCOLD_LIMA
+! Nh
+  IF (NMOM_H.GE.2) THEN
+     NSV_LIMA_NH = ISV
+     ISV = ISV+1
+  END IF ! LCOLD_LIMA
 ! IFN
   IF (NMOD_IFN .GT. 0) THEN
      NSV_LIMA_IFN_FREE = ISV
@@ -190,7 +222,7 @@ LAERO_MASS         = .FALSE.
      ISV = ISV + MAX(1,NMOD_IMM)
   END IF
 ! Homogeneous freezing of CCN
-  IF (LCOLD_LIMA .AND. LHHONI_LIMA) THEN
+  IF (NMOM_I.GE.1 .AND. LHHONI) THEN
      NSV_LIMA_HOM_HAZE = ISV
      ISV = ISV + 1
   END IF
@@ -205,53 +237,53 @@ NSV=NSV_LIMA
 ! initialisation de LIMA
 CALL INIT_AEROSOL_PROPERTIES
 ! PDZMIN = 20 comme dans l'appel à INI_RAIN_ICE !
-CALL INI_LIMA(KULOUT, PTSTEP, 20., KSPLITR, KSPLITG)
+CALL INI_LIMA(PTSTEP, 20., KSPLITR, KSPLITG)
 
-WRITE(UNIT=KULOUT,FMT='(''LIMA SCHEME TUNING  VARIABLES :'')')
-WRITE(UNIT=KULOUT,FMT='('' LCOLD_LIMA = '',L5)') LCOLD_LIMA
-WRITE(UNIT=KULOUT,FMT='('' LNUCL_LIMA = '',L5)') LNUCL_LIMA
-WRITE(UNIT=KULOUT,FMT='('' LSEDI_LIMA = '',L5)') LSEDI_LIMA
-WRITE(UNIT=KULOUT,FMT='('' LSNOW_LIMA = '',L5)') LSNOW_LIMA
-WRITE(UNIT=KULOUT,FMT='('' LHAIL_LIMA = '',L5)') LHAIL_LIMA
-WRITE(UNIT=KULOUT,FMT='('' LHHONI_LIMA = '',L5)') LHHONI_LIMA
-WRITE(UNIT=KULOUT,FMT='('' LMEYERS_LIMA = '',L5)') LMEYERS_LIMA
-WRITE(UNIT=KULOUT,FMT='('' LIFN_HOM = '',L5)') LIFN_HOM
-WRITE(UNIT=KULOUT,FMT='('' LWARM_LIMA = '',L5)') LWARM_LIMA
-WRITE(UNIT=KULOUT,FMT='('' LACTI_LIMA = '',L5)') LACTI_LIMA
-WRITE(UNIT=KULOUT,FMT='('' LRAIN_LIMA = '',L5)') LRAIN_LIMA
-WRITE(UNIT=KULOUT,FMT='('' LSEDC_LIMA = '',L5)') LSEDC_LIMA
-WRITE(UNIT=KULOUT,FMT='('' LACTIT_LIMA = '',L5)') LACTIT_LIMA
-WRITE(UNIT=KULOUT,FMT='('' LCCN_HOM = '',L5)') LCCN_HOM
-WRITE(UNIT=KULOUT,FMT='('' LSCAV = '',L5)') LSCAV
-WRITE(UNIT=KULOUT,FMT='('' LAERO_MASS = '',L5)') LAERO_MASS
-WRITE(UNIT=KULOUT,FMT='('' CIFN_SPECIES = '',A8,''CINT_MIXING = '',A8)')&
-&CIFN_SPECIES,CINT_MIXING
-WRITE(UNIT=KULOUT,FMT='('' CPRISTINE_ICE_LIMA = '',A4,''CHEVRIMED_ICE_LIMA = '',A4)')&
-&CPRISTINE_ICE_LIMA, CHEVRIMED_ICE_LIMA
-WRITE(UNIT=KULOUT,FMT='('' CCCN_MODES = '',A8)')CCCN_MODES
-WRITE(UNIT=KULOUT,FMT='('' HINI_CCN = '',A3,''HTYPE_CCN = '',A1)')&
-&HINI_CCN,HTYPE_CCN
-WRITE(UNIT=KULOUT,FMT='('' NMOD_IFN = '',I5)') NMOD_IFN
-WRITE(UNIT=KULOUT,FMT='('' NMOD_IMM = '',I5)') NMOD_IMM
-WRITE(UNIT=KULOUT,FMT='('' NIND_SPECIE = '',I5)') NIND_SPECIE
-WRITE(UNIT=KULOUT,FMT='('' NPHILLIPS = '',I5)') NPHILLIPS
-WRITE(UNIT=KULOUT,FMT='('' NMOD_CCN = '',I5)') NMOD_CCN
-WRITE(UNIT=KULOUT,FMT='('' XIFN_CONC = '',f6.2)') XIFN_CONC
-WRITE(UNIT=KULOUT,FMT='('' XALPHAI = '',f6.2)') XALPHAI
-WRITE(UNIT=KULOUT,FMT='('' XNUI = '',f6.2)') XNUI
-WRITE(UNIT=KULOUT,FMT='('' XALPHAS = '',f6.2)') XALPHAS
-WRITE(UNIT=KULOUT,FMT='('' XNUS = '',f6.2)') XNUS
-WRITE(UNIT=KULOUT,FMT='('' XALPHAG = '',f6.2)') XALPHAG
-WRITE(UNIT=KULOUT,FMT='('' XNUG = '',f6.2)') XNUG
-WRITE(UNIT=KULOUT,FMT='('' XCCN_CONC = '',f6.2)') XCCN_CONC
-WRITE(UNIT=KULOUT,FMT='('' XALPHAC = '',f6.2)') XALPHAC
-WRITE(UNIT=KULOUT,FMT='('' XNUC = '',f6.2)') XNUC
-WRITE(UNIT=KULOUT,FMT='('' XALPHAR = '',f6.2)') XALPHAR
-WRITE(UNIT=KULOUT,FMT='('' XNUR = '',f6.2)') XNUR
-WRITE(UNIT=KULOUT,FMT='('' XFSOLUB_CCN = '',f6.2)') XFSOLUB_CCN
-WRITE(UNIT=KULOUT,FMT='('' XACTEMP_CCN = '',f6.2)') XACTEMP_CCN
-WRITE(UNIT=KULOUT,FMT='('' XAERDIFF = '',f6.2)') XAERDIFF
-WRITE(UNIT=KULOUT,FMT='('' XAERHEIGHT = '',f6.2)') XAERHEIGHT
+!!$WRITE(UNIT=KULOUT,FMT='(''LIMA SCHEME TUNING  VARIABLES :'')')
+!!$WRITE(UNIT=KULOUT,FMT='('' LCOLD_LIMA = '',L5)') LCOLD_LIMA
+!!$WRITE(UNIT=KULOUT,FMT='('' LNUCL_LIMA = '',L5)') LNUCL_LIMA
+!!$WRITE(UNIT=KULOUT,FMT='('' LSEDI_LIMA = '',L5)') LSEDI_LIMA
+!!$WRITE(UNIT=KULOUT,FMT='('' LSNOW_LIMA = '',L5)') LSNOW_LIMA
+!!$WRITE(UNIT=KULOUT,FMT='('' LHAIL_LIMA = '',L5)') LHAIL_LIMA
+!!$WRITE(UNIT=KULOUT,FMT='('' LHHONI_LIMA = '',L5)') LHHONI_LIMA
+!!$WRITE(UNIT=KULOUT,FMT='('' LMEYERS_LIMA = '',L5)') LMEYERS_LIMA
+!!$WRITE(UNIT=KULOUT,FMT='('' LIFN_HOM = '',L5)') LIFN_HOM
+!!$WRITE(UNIT=KULOUT,FMT='('' LWARM_LIMA = '',L5)') LWARM_LIMA
+!!$WRITE(UNIT=KULOUT,FMT='('' LACTI_LIMA = '',L5)') LACTI_LIMA
+!!$WRITE(UNIT=KULOUT,FMT='('' LRAIN_LIMA = '',L5)') LRAIN_LIMA
+!!$WRITE(UNIT=KULOUT,FMT='('' LSEDC_LIMA = '',L5)') LSEDC_LIMA
+!!$WRITE(UNIT=KULOUT,FMT='('' LACTIT_LIMA = '',L5)') LACTIT_LIMA
+!!$WRITE(UNIT=KULOUT,FMT='('' LCCN_HOM = '',L5)') LCCN_HOM
+!!$WRITE(UNIT=KULOUT,FMT='('' LSCAV = '',L5)') LSCAV
+!!$WRITE(UNIT=KULOUT,FMT='('' LAERO_MASS = '',L5)') LAERO_MASS
+!!$WRITE(UNIT=KULOUT,FMT='('' CIFN_SPECIES = '',A8,''CINT_MIXING = '',A8)')&
+!!$&CIFN_SPECIES,CINT_MIXING
+!!$WRITE(UNIT=KULOUT,FMT='('' CPRISTINE_ICE_LIMA = '',A4,''CHEVRIMED_ICE_LIMA = '',A4)')&
+!!$&CPRISTINE_ICE_LIMA, CHEVRIMED_ICE_LIMA
+!!$WRITE(UNIT=KULOUT,FMT='('' CCCN_MODES = '',A8)')CCCN_MODES
+!!$WRITE(UNIT=KULOUT,FMT='('' HINI_CCN = '',A3,''HTYPE_CCN = '',A1)')&
+!!$&HINI_CCN,HTYPE_CCN
+!!$WRITE(UNIT=KULOUT,FMT='('' NMOD_IFN = '',I5)') NMOD_IFN
+!!$WRITE(UNIT=KULOUT,FMT='('' NMOD_IMM = '',I5)') NMOD_IMM
+!!$WRITE(UNIT=KULOUT,FMT='('' NIND_SPECIE = '',I5)') NIND_SPECIE
+!!$WRITE(UNIT=KULOUT,FMT='('' NPHILLIPS = '',I5)') NPHILLIPS
+!!$WRITE(UNIT=KULOUT,FMT='('' NMOD_CCN = '',I5)') NMOD_CCN
+!!$WRITE(UNIT=KULOUT,FMT='('' XIFN_CONC = '',f6.2)') XIFN_CONC
+!!$WRITE(UNIT=KULOUT,FMT='('' XALPHAI = '',f6.2)') XALPHAI
+!!$WRITE(UNIT=KULOUT,FMT='('' XNUI = '',f6.2)') XNUI
+!!$WRITE(UNIT=KULOUT,FMT='('' XALPHAS = '',f6.2)') XALPHAS
+!!$WRITE(UNIT=KULOUT,FMT='('' XNUS = '',f6.2)') XNUS
+!!$WRITE(UNIT=KULOUT,FMT='('' XALPHAG = '',f6.2)') XALPHAG
+!!$WRITE(UNIT=KULOUT,FMT='('' XNUG = '',f6.2)') XNUG
+!!$WRITE(UNIT=KULOUT,FMT='('' XCCN_CONC = '',f6.2)') XCCN_CONC
+!!$WRITE(UNIT=KULOUT,FMT='('' XALPHAC = '',f6.2)') XALPHAC
+!!$WRITE(UNIT=KULOUT,FMT='('' XNUC = '',f6.2)') XNUC
+!!$WRITE(UNIT=KULOUT,FMT='('' XALPHAR = '',f6.2)') XALPHAR
+!!$WRITE(UNIT=KULOUT,FMT='('' XNUR = '',f6.2)') XNUR
+!!$WRITE(UNIT=KULOUT,FMT='('' XFSOLUB_CCN = '',f6.2)') XFSOLUB_CCN
+!!$WRITE(UNIT=KULOUT,FMT='('' XACTEMP_CCN = '',f6.2)') XACTEMP_CCN
+!!$WRITE(UNIT=KULOUT,FMT='('' XAERDIFF = '',f6.2)') XAERDIFF
+!!$WRITE(UNIT=KULOUT,FMT='('' XAERHEIGHT = '',f6.2)') XAERHEIGHT
 
 
 
diff --git a/src/arome/ext/namlima.nam.h b/src/arome/ext/namlima.nam.h
new file mode 100644
index 000000000..3b332acd4
--- /dev/null
+++ b/src/arome/ext/namlima.nam.h
@@ -0,0 +1,16 @@
+NAMELIST/NAMLIMA/LNUCL, LSEDI, LHHONI, LMEYERS,                     &
+                        NMOM_I, NMOM_S, NMOM_G, NMOM_H,                    &
+                        NMOD_IFN, XIFN_CONC, LIFN_HOM,                     &
+                        CIFN_SPECIES, CINT_MIXING, NMOD_IMM, NIND_SPECIE,  &
+                        LSNOW_T, CPRISTINE_ICE_LIMA, CHEVRIMED_ICE_LIMA,   &
+                        XALPHAI, XNUI, XALPHAS, XNUS, XALPHAG, XNUG,       &
+                        XFACTNUC_DEP, XFACTNUC_CON, NPHILLIPS,             &
+                        LCIBU, XNDEBRIS_CIBU, LRDSF, LMURAKAMI,            &
+                        LACTI, LSEDC, LACTIT, LBOUND, LSPRO,               &
+                        LADJ, LKHKO, LKESSLERAC, NMOM_C, NMOM_R,           &
+                        NMOD_CCN, XCCN_CONC,                               &
+                        LCCN_HOM, CCCN_MODES, HINI_CCN, HTYPE_CCN,         &
+                        XALPHAC, XNUC, XALPHAR, XNUR,                      &
+                        XFSOLUB_CCN, XACTEMP_CCN, XAERDIFF, XAERHEIGHT,    &
+                        LSCAV, LAERO_MASS, LDEPOC, XVDEPOC, LACTTKE,       &
+                        LPTSPLIT, LFEEDBACKT, NMAXITER, XMRSTEP, XTSTEP_TS
diff --git a/src/arome/micro/lima_nucleation_procs.F90 b/src/arome/micro/lima_nucleation_procs.F90
deleted file mode 100644
index 9b23d62f2..000000000
--- a/src/arome/micro/lima_nucleation_procs.F90
+++ /dev/null
@@ -1,297 +0,0 @@
-!      ###############################
-       MODULE MODI_LIMA_NUCLEATION_PROCS
-!      ###############################
-!
-INTERFACE
-   SUBROUTINE LIMA_NUCLEATION_PROCS (PTSTEP, HFMFILE, OCLOSE_OUT, PRHODJ,          &
-                               PRHODREF, PEXNREF, PPABST, PT, PTM, PW_NU,          &
-                               PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,           &
-                               PCCT, PCRT, PCIT,                                   &
-                               PNFT, PNAT, PIFT, PINT, PNIT, PNHT, &
-                            YDDDH, YDLDDH, YDMDDH                  )
-!
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-REAL,                     INTENT(IN)    :: PTSTEP     ! Double Time step
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE    ! Name of the output FM-file
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ     ! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF   ! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF    ! Reference Exner function
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST     ! abs. pressure at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PT         ! Temperature
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTM        ! Temperature at time t-dt
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PW_NU      ! updraft velocity used for
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHT       ! Theta at t 
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRVT       ! Water vapor m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRCT       ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT       ! Rain water m.r. at t
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRIT       ! Pristine ice m.r. at t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST       ! Snow m.r. at t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRGT       ! Graupel m.r. at t
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCCT       ! Cloud water conc. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCRT       ! Rain water conc. at t
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCIT       ! Prinstine ice conc. at t
-!
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNFT       ! CCN C. available at t
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNAT       ! CCN C. activated at t
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PIFT       ! IFN C. available at t
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PINT       ! IFN C. activated at t
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNIT       ! Coated IFN activated at t
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PNHT       ! CCN hom freezing
-!
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-!
-END SUBROUTINE LIMA_NUCLEATION_PROCS
-END INTERFACE
-END MODULE MODI_LIMA_NUCLEATION_PROCS
-!     #############################################################################
-SUBROUTINE LIMA_NUCLEATION_PROCS (PTSTEP, HFMFILE, OCLOSE_OUT, PRHODJ,                &
-                                  PRHODREF, PEXNREF, PPABST, PT, PTM, PW_NU,          &
-                                  PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,           &
-                                  PCCT, PCRT, PCIT,                                   &
-                                  PNFT, PNAT, PIFT, PINT, PNIT, PNHT, &
-                            YDDDH, YDLDDH, YDMDDH                  )
-!     #############################################################################
-!
-USE MODD_PARAM_LIMA, ONLY : LCOLD_LIMA, LNUCL_LIMA, LMEYERS_LIMA, LSNOW_LIMA, LWARM_LIMA, LACTI_LIMA, LRAIN_LIMA, LHHONI_LIMA, &
-                            NMOD_CCN, NMOD_IFN, NMOD_IMM
-USE MODD_BUDGET,     ONLY : LBU_ENABLE, LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUDGET_RR,&
-                            LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, LBUDGET_SV
-USE MODD_NSV,        ONLY : NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_FREE,               &
-                            NSV_LIMA_NI, NSV_LIMA_IFN_FREE
-!
-USE MODE_BUDGET, ONLY: BUDGET_DDH
-USE MODI_LIMA_CCN_ACTIVATION
-USE MODI_LIMA_PHILLIPS_IFN_NUCLEATION
-USE MODI_LIMA_MEYERS_NUCLEATION
-USE MODI_LIMA_CCN_HOM_FREEZING
-!
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-!-------------------------------------------------------------------------------
-!
-IMPLICIT NONE
-!
-!-------------------------------------------------------------------------------
-!
-REAL,                     INTENT(IN)    :: PTSTEP     ! Double Time step
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE    ! Name of the output FM-file
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ     ! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF   ! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF    ! Reference Exner function
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST     ! abs. pressure at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PT         ! Temperature
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTM        ! Temperature at time t-dt
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PW_NU      ! updraft velocity used for
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHT       ! Theta at t 
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRVT       ! Water vapor m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRCT       ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT       ! Rain water m.r. at t
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRIT       ! Rain water m.r. at t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST       ! Rain water m.r. at t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRGT       ! Rain water m.r. at t
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCCT       ! Cloud water conc. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCRT       ! Rain water conc. at t
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCIT       ! Prinstine ice conc. at t
-!
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNFT       ! CCN C. available at t
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNAT       ! CCN C. activated at t
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PIFT       ! IFN C. available at t
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PINT       ! IFN C. activated at t
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNIT       ! Coated IFN activated at t
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PNHT       ! CCN hom. freezing
-!
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-!
-!-------------------------------------------------------------------------------
-!
-REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2),SIZE(PT,3))          :: Z_TH_HIND, Z_RI_HIND, Z_CI_HIND, Z_RC_HINC, Z_CC_HINC
-REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2),SIZE(PT,3))          :: ZTHT, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT
-REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2),SIZE(PT,3))          :: ZCCT, ZCRT, ZCIT
-REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2),SIZE(PT,3),NMOD_CCN) :: ZNFT, ZNAT
-REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2),SIZE(PT,3),NMOD_IFN) :: ZIFT, ZINT
-REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2),SIZE(PT,3),NMOD_IMM) :: ZNIT
-REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2),SIZE(PT,3))          :: ZNHT
-!
-INTEGER :: JL
-!-------------------------------------------------------------------------------
-!
-ZTHT(:,:,:) = PTHT(:,:,:)
-ZRVT(:,:,:) = PRVT(:,:,:)
-ZRCT(:,:,:) = PRCT(:,:,:)
-ZCCT(:,:,:) = PCCT(:,:,:)
-ZRRT(:,:,:) = PRRT(:,:,:)
-ZCRT(:,:,:) = PCRT(:,:,:)
-ZRIT(:,:,:) = PRIT(:,:,:)
-ZCIT(:,:,:) = PCIT(:,:,:)
-ZRST(:,:,:) = PRST(:,:,:)
-ZRGT(:,:,:) = PRGT(:,:,:)
-ZNFT(:,:,:,:) = PNFT(:,:,:,:)
-ZNAT(:,:,:,:) = PNAT(:,:,:,:)
-ZIFT(:,:,:,:) = PIFT(:,:,:,:)
-ZINT(:,:,:,:) = PINT(:,:,:,:)
-ZNIT(:,:,:,:) = PNIT(:,:,:,:)
-ZNHT(:,:,:) = PNHT(:,:,:)
-!
-!-------------------------------------------------------------------------------
-!
-IF (LWARM_LIMA .AND. LACTI_LIMA) THEN
-   CALL LIMA_CCN_ACTIVATION (PTSTEP, HFMFILE, OCLOSE_OUT,                 &
-                             PRHODREF, PEXNREF, PPABST, PT, PTM, PW_NU,   &
-                             ZTHT, ZRVT, ZRCT, ZCCT, ZRRT, ZNFT, ZNAT)
-   PTHT(:,:,:) = ZTHT(:,:,:)
-   PRVT(:,:,:) = ZRVT(:,:,:)
-   PRCT(:,:,:) = ZRCT(:,:,:)
-   PCCT(:,:,:) = ZCCT(:,:,:)
-   PNFT(:,:,:,:) = ZNFT(:,:,:,:)
-   PNAT(:,:,:,:) = ZNAT(:,:,:,:)
-!
-! Call budgets
-!
-   IF (LBU_ENABLE) THEN
-      IF (LBUDGET_TH) CALL BUDGET_DDH (PTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,   4,                        'HENU_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-      IF (LBUDGET_RV) CALL BUDGET_DDH (PRVT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,   6,                        'HENU_BU_RRV',YDDDH, YDLDDH, YDMDDH)
-      IF (LBUDGET_RC) CALL BUDGET_DDH (PRCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,   7,                        'HENU_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-      IF (LBUDGET_SV) THEN
-                      CALL BUDGET_DDH (PCCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,   12+NSV_LIMA_NC,           'HENU_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-         IF (NMOD_CCN.GE.1) THEN
-            DO JL=1, NMOD_CCN
-                      CALL BUDGET_DDH (PNFT(:,:,:,JL)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_CCN_FREE+JL-1,'HENU_BU_RSV',YDDDH, YDLDDH, YDMDDH) 
-            END DO
-         END IF
-      END IF
-   END IF
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-IF (LCOLD_LIMA .AND. LNUCL_LIMA .AND. .NOT.LMEYERS_LIMA .AND. NMOD_IFN.GE.1) THEN
-   CALL LIMA_PHILLIPS_IFN_NUCLEATION (PTSTEP, HFMFILE, OCLOSE_OUT,                      &
-                                      PRHODREF, PEXNREF, PPABST,                        &
-                                      ZTHT, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT,         &
-                                      ZCCT, ZCIT, ZNAT, ZIFT, ZINT, ZNIT,               &
-                                      Z_TH_HIND, Z_RI_HIND, Z_CI_HIND,                  &
-                                      Z_RC_HINC, Z_CC_HINC                              )
-!
-! Call budgets
-!
-   IF (LBU_ENABLE) THEN
-      IF (LBUDGET_TH) CALL BUDGET_DDH ((PTHT(:,:,:)+Z_TH_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,4,                        'HIND_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-      IF (LBUDGET_RV) CALL BUDGET_DDH ((PRVT(:,:,:)-Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,6,                        'HIND_BU_RRV',YDDDH, YDLDDH, YDMDDH)
-      IF (LBUDGET_RI) CALL BUDGET_DDH ((PRIT(:,:,:)+Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,9,                        'HIND_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-      IF (LBUDGET_SV) THEN
-                      CALL BUDGET_DDH ((PCIT(:,:,:)+Z_CI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NI,           'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-         IF (NMOD_IFN.GE.1) THEN
-            DO JL=1, NMOD_IFN
-                      CALL BUDGET_DDH ((ZIFT(:,:,:,JL))*PRHODJ(:,:,:)/PTSTEP,              12+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH) 
-            END DO
-         END IF
-      END IF
-!
-      IF (LBUDGET_TH) CALL BUDGET_DDH (ZTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,4,'HINC_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-      IF (LBUDGET_RC) CALL BUDGET_DDH (ZRCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,7,'HINC_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-      IF (LBUDGET_RI) CALL BUDGET_DDH (ZRIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,9,'HINC_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-      IF (LBUDGET_SV) THEN
-         CALL BUDGET_DDH (ZCCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NC,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-         CALL BUDGET_DDH (ZCIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NI,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      END IF
-   END IF
-!
-   PTHT(:,:,:) = ZTHT(:,:,:)
-   PRVT(:,:,:) = ZRVT(:,:,:)
-   PRCT(:,:,:) = ZRCT(:,:,:)
-   PCCT(:,:,:) = ZCCT(:,:,:)
-   PRIT(:,:,:) = ZRIT(:,:,:)
-   PCIT(:,:,:) = ZCIT(:,:,:)
-   PNAT(:,:,:,:) = ZNAT(:,:,:,:)
-   PIFT(:,:,:,:) = ZIFT(:,:,:,:)
-   PINT(:,:,:,:) = ZINT(:,:,:,:)
-   PNIT(:,:,:,:) = ZNIT(:,:,:,:)
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-IF (LCOLD_LIMA .AND. LNUCL_LIMA .AND. LMEYERS_LIMA) THEN
-   CALL LIMA_MEYERS_NUCLEATION (PTSTEP, HFMFILE, OCLOSE_OUT,                &
-                                PRHODREF, PEXNREF, PPABST,                  &
-                                ZTHT, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT,   &
-                                ZCCT, ZCIT, ZINT,                           &
-                                Z_TH_HIND, Z_RI_HIND, Z_CI_HIND,            &
-                                Z_RC_HINC, Z_CC_HINC                        )
-!
-! Call budgets
-!
-   IF (LBU_ENABLE) THEN
-      IF (LBUDGET_TH) CALL BUDGET_DDH ((PTHT(:,:,:)+Z_TH_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,4,             'HIND_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-      IF (LBUDGET_RV) CALL BUDGET_DDH ((PRVT(:,:,:)-Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,6,             'HIND_BU_RRV',YDDDH, YDLDDH, YDMDDH)
-      IF (LBUDGET_RI) CALL BUDGET_DDH ((PRIT(:,:,:)+Z_RI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,9,             'HIND_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-      IF (LBUDGET_SV) CALL BUDGET_DDH ((PCIT(:,:,:)+Z_CI_HIND(:,:,:))*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NI,'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-!
-      IF (LBUDGET_TH) CALL BUDGET_DDH (ZTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,4,'HINC_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-      IF (LBUDGET_RC) CALL BUDGET_DDH (ZRCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,7,'HINC_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-      IF (LBUDGET_RI) CALL BUDGET_DDH (ZRIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,9,'HINC_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-      IF (LBUDGET_SV) THEN
-         CALL BUDGET_DDH (ZCCT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NC,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-         CALL BUDGET_DDH (ZCIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_NI,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      END IF
-   END IF
-!
-PTHT(:,:,:) = ZTHT(:,:,:)
-PRVT(:,:,:) = ZRVT(:,:,:)
-PRCT(:,:,:) = ZRCT(:,:,:)
-PCCT(:,:,:) = ZCCT(:,:,:)
-PRIT(:,:,:) = ZRIT(:,:,:)
-PCIT(:,:,:) = ZCIT(:,:,:)
-PINT(:,:,:,:) = ZINT(:,:,:,:)
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-IF (LCOLD_LIMA .AND. LHHONI_LIMA .AND. NMOD_CCN.GE.1) THEN
-   CALL LIMA_CCN_HOM_FREEZING (HFMFILE, OCLOSE_OUT,                         &
-                               PRHODREF, PEXNREF, PPABST, PW_NU,            &
-                               ZTHT, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT,    &
-                               ZCCT, ZCRT, ZCIT, ZNFT, ZNHT                 )
-!
-! Call budgets
-!
-   IF (LBU_ENABLE .AND. LHHONI_LIMA) THEN
-     IF (LBUDGET_TH) CALL BUDGET_DDH (ZTHT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,   4,                        'HONH_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_RV) CALL BUDGET_DDH (ZRVT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,   6,                        'HONH_BU_RRV',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_RI) CALL BUDGET_DDH (ZRIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,   9,                        'HONH_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_SV) THEN
-                     CALL BUDGET_DDH (ZCIT(:,:,:)*PRHODJ(:,:,:)/PTSTEP,   12+NSV_LIMA_NI,           'HONH_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-       IF (NMOD_CCN.GE.1) THEN
-          DO JL=1, NMOD_CCN
-                     CALL BUDGET_DDH (ZNFT(:,:,:,JL)*PRHODJ(:,:,:)/PTSTEP,12+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV',YDDDH, YDLDDH, YDMDDH) 
-          END DO
-       END IF
-     END IF
-  END IF
-!
-PTHT(:,:,:) = ZTHT(:,:,:)
-PRVT(:,:,:) = ZRVT(:,:,:)
-PRIT(:,:,:) = ZRIT(:,:,:)
-PCIT(:,:,:) = ZCIT(:,:,:)
-PNHT(:,:,:) = ZNHT(:,:,:)
-ENDIF
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_NUCLEATION_PROCS
diff --git a/src/common/micro/ini_lima_cold_mixed.F90 b/src/common/micro/ini_lima_cold_mixed.F90
index 39a7246f5..86fe95eaa 100644
--- a/src/common/micro/ini_lima_cold_mixed.F90
+++ b/src/common/micro/ini_lima_cold_mixed.F90
@@ -57,8 +57,6 @@ USE MODD_PARAM_LIMA
 USE MODD_PARAM_LIMA_WARM
 USE MODD_PARAM_LIMA_COLD
 USE MODD_PARAM_LIMA_MIXED
-USE MODD_RAIN_ICE_PARAM,  ONLY: XALPHA1, XALPHA2, XBETA1, XBETA2, IMNU0=>XMNU0, XNU10, XNU20, &
-                                RAIN_ICE_PARAM_ASSOCIATE
 USE MODD_REF
 !
 use mode_msg
@@ -614,7 +612,7 @@ XNU20 = 1000.*ZFACT_NUCL
 XALPHA2 = 12.96
 XBETA2 = 0.639
 !
-IMNU0 = 6.88E-13
+!XMNU0 = 6.88E-13
 !-------------------------------------------------------------------------------
 !
 !
diff --git a/src/common/micro/lima.F90 b/src/common/micro/lima.F90
index 619cede63..7fcfd22aa 100644
--- a/src/common/micro/lima.F90
+++ b/src/common/micro/lima.F90
@@ -674,7 +674,7 @@ PINPRH=0.
 if ( BUCONF%lbu_enable ) then
   if ( BUCONF%lbudget_th )                         call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_TH), 'SEDI', zths(:, :, :) * prhodj(:, :, :) )
   if ( BUCONF%lbudget_rc .and. nmom_c.ge.1 .and. lsedc ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RC), 'SEDI', zrcs(:, :, :) * prhodj(:, :, :) )
-  if ( BUCONF%lbudget_rr .and. nomm_r.ge.1 ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RR), 'SEDI', zrrs(:, :, :) * prhodj(:, :, :) )
+  if ( BUCONF%lbudget_rr .and. nmom_r.ge.1 ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RR), 'SEDI', zrrs(:, :, :) * prhodj(:, :, :) )
   if ( BUCONF%lbudget_ri .and. nmom_i.ge.1 .and. lsedi ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RI), 'SEDI', zris(:, :, :) * prhodj(:, :, :) )
   if ( BUCONF%lbudget_rs .and. nmom_s.ge.1 ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RS), 'SEDI', zrss(:, :, :) * prhodj(:, :, :) )
   if ( BUCONF%lbudget_rg .and. nmom_g.ge.1 ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RG), 'SEDI', zrgs(:, :, :) * prhodj(:, :, :) )
@@ -697,27 +697,27 @@ end if
 
 ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP
 ZCPT    = CST%XCPD + (CST%XCPV * ZRVS + CST%XCL * (ZRCS + ZRRS) + CST%XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP
-IF (NMOM_C.GE.1 .AND. LSEDC) CALL LIMA_SEDIMENTATION(D, &
+IF (NMOM_C.GE.1 .AND. LSEDC) CALL LIMA_SEDIMENTATION(D, CST, &
      'L', 2, 2, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRCS, ZCCS, PINPRC)
 ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP
 ZCPT    = CST%XCPD + (CST%XCPV * ZRVS + CST%XCL * (ZRCS + ZRRS) + CST%XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP
-IF (NMOM_R.GE.1) CALL LIMA_SEDIMENTATION(D, &
+IF (NMOM_R.GE.1) CALL LIMA_SEDIMENTATION(D, CST, &
      'L', NMOM_R, 3, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRRS, ZCRS, PINPRR)
 ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP
 ZCPT    = CST%XCPD + (CST%XCPV * ZRVS + CST%XCL * (ZRCS + ZRRS) + CST%XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP
-IF (NMOM_I.GE.1 .AND. LSEDI) CALL LIMA_SEDIMENTATION(D, &
+IF (NMOM_I.GE.1 .AND. LSEDI) CALL LIMA_SEDIMENTATION(D, CST, &
      'I', NMOM_I, 4, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRIS, ZCIS, ZW2D)
 ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP
 ZCPT    = CST%XCPD + (CST%XCPV * ZRVS + CST%XCL * (ZRCS + ZRRS) + CST%XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP
-IF (NMOM_S.GE.1) CALL LIMA_SEDIMENTATION(D &
+IF (NMOM_S.GE.1) CALL LIMA_SEDIMENTATION(D, CST, &
      'I', NMOM_S, 5, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRSS, ZCSS, PINPRS)
 ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP
 ZCPT    = CST%XCPD + (CST%XCPV * ZRVS + CST%XCL * (ZRCS + ZRRS) + CST%XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP
-IF (NMOM_G.GE.1) CALL LIMA_SEDIMENTATION(D, &
+IF (NMOM_G.GE.1) CALL LIMA_SEDIMENTATION(D, CST, &
      'I', NMOM_G, 6, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRGS, ZCGS, PINPRG)
 ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP
 ZCPT    = CST%XCPD + (CST%XCPV * ZRVS + CST%XCL * (ZRCS + ZRRS) + CST%XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP
-IF (NMOM_H.GE.1) CALL LIMA_SEDIMENTATION(D, &
+IF (NMOM_H.GE.1) CALL LIMA_SEDIMENTATION(D, CST, &
      'I', NMOM_H, 7, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRHS, ZCHS, PINPRH)
 !
 ZTHS(:,:,:) = ZT(:,:,:) / ZEXN(:,:,:) * ZINV_TSTEP
@@ -839,9 +839,10 @@ CALL LIMA_COMPUTE_CLOUD_FRACTIONS (D,                                 &
 !*       2.     Nucleation processes
 !               --------------------
 !
-CALL LIMA_NUCLEATION_PROCS (PTSTEP, PRHODJ,                             &
+CALL LIMA_NUCLEATION_PROCS (D, CST, BUCONF, TBUDGETS, KBUDGETS,                 &
+                            PTSTEP, PRHODJ,                                     &
                             PRHODREF, ZEXN, PPABST, ZT, PDTHRAD, PW_NU,         &
-                            ZTHT, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT,           &
+                            ZTHT, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, ZRHT,     &
                             ZCCT, ZCRT, ZCIT,                                   &
                             ZCCNFT, ZCCNAT, ZIFNFT, ZIFNNT, ZIMMNT, ZHOMFT,     &
                             PCLDFR, PICEFR, PPRCFR                              )
@@ -1230,7 +1231,7 @@ DO WHILE(ANY(ZTIME(D%NIB:D%NIE,D%NJB:D%NJE,D%NKTB:D%NKTE)<PTSTEP))
       ! We need to adjust tendencies when temperature reaches 0
       IF(LFEEDBACKT) THEN
          !Is ZB_TH enough to change temperature sign?
-         WHERE( ((ZTHT1D(:) - CST%XTT/ZEXN1D(:)) * (ZTHT1D(:) + ZB_TH(:) - XTT/ZEXN1D(:))) < 0. )
+         WHERE( ((ZTHT1D(:) - CST%XTT/ZEXN1D(:)) * (ZTHT1D(:) + ZB_TH(:) - CST%XTT/ZEXN1D(:))) < 0. )
             ZMAXTIME(:)=0.
          ENDWHERE
          !Can ZA_TH make temperature change of sign?
@@ -1452,7 +1453,7 @@ DO WHILE(ANY(ZTIME(D%NIB:D%NIE,D%NJB:D%NJE,D%NKTB:D%NKTE)<PTSTEP))
       !
       !***       4.4 Unpacking for budgets
       !
-      IF(LBU_ENABLE) THEN
+      IF(BUCONF%LBU_ENABLE) THEN
         ZTOT_RR_CVRC(:,:,:) = ZTOT_RR_CVRC(:,:,:) + Z_RR_CVRC(:,:,:)
         ZTOT_CR_CVRC(:,:,:) = ZTOT_CR_CVRC(:,:,:) + Z_CR_CVRC(:,:,:)
 
diff --git a/src/common/micro/lima_adjust_split.F90 b/src/common/micro/lima_adjust_split.F90
index e0122fa2d..47f042c8e 100644
--- a/src/common/micro/lima_adjust_split.F90
+++ b/src/common/micro/lima_adjust_split.F90
@@ -79,7 +79,8 @@ END INTERFACE
 END MODULE MODI_LIMA_ADJUST_SPLIT
 !
 !     ###########################################################################
-      SUBROUTINE LIMA_ADJUST_SPLIT(D, KRR, KMI, HCONDENS, HLAMBDA3,        &
+SUBROUTINE LIMA_ADJUST_SPLIT(D, CST, BUCONF, TBUDGETS, KBUDGETS,                &
+                             KRR, KMI, HCONDENS, HLAMBDA3,                      &
                              OSUBG_COND, OSIGMAS, PTSTEP, PSIGQSAT,             &
                              PRHODREF, PRHODJ, PEXNREF, PSIGS, PMFCONV,         &
                              PPABST, PPABSTT, PZZ, PDTHRAD, PW_NU,              &
@@ -159,7 +160,8 @@ END MODULE MODI_LIMA_ADJUST_SPLIT
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_BUDGET,   ONLY: TBUDGETDATA, TBUDGETCONF_t
+USE MODD_BUDGET,   ONLY: TBUDGETDATA, TBUDGETCONF_t, NBUDGET_TH, NBUDGET_RV, &
+                         NBUDGET_RC, NBUDGET_RI, NBUDGET_RV, NBUDGET_SV1, NBUMOD        
 USE MODD_CST,            ONLY: CST_t
 USE MODD_CONF
 !use modd_field,            only: TFIELDDATA, TYPEREAL
@@ -181,9 +183,7 @@ use mode_budget,           only: BUDGET_STORE_INIT_PHY, BUDGET_STORE_END_PHY
 use mode_msg
 use mode_tools,            only: Countjv
 !
-USE MODI_CONDENS
 USE MODI_CONDENSATION
-USE MODI_LIMA_FUNCTIONS
 USE MODI_LIMA_CCN_ACTIVATION
 !
 IMPLICIT NONE
@@ -320,7 +320,7 @@ integer :: idx
 integer :: JI, JJ, JK, jl
 INTEGER                           :: JMOD, JMOD_IFN, JMOD_IMM
 !
-TYPE(TFIELDMETADATA)     :: TZFIELD
+!!$TYPE(TFIELDMETADATA)     :: TZFIELD
 !
 !-------------------------------------------------------------------------------
 !
@@ -461,11 +461,11 @@ end if
 !*       2.1    remove negative non-precipitating negative water
 !               ------------------------------------------------
 !
-IF (ANY(PRVS(:,:,:)+PRCS(:,:,:)+PRIS(:,:,:) < 0.) .AND. NVERB>5) THEN
-  WRITE(ILUOUT,*) 'LIMA_ADJUST:  negative values of total water (reset to zero)'
-  WRITE(ILUOUT,*) '  location of minimum PRVS+PRCS+PRIS:',MINLOC(PRVS+PRCS+PRIS)
-  WRITE(ILUOUT,*) '  value of minimum    PRVS+PRCS+PRIS:',MINVAL(PRVS+PRCS+PRIS)
-END IF
+!IF (ANY(PRVS(:,:,:)+PRCS(:,:,:)+PRIS(:,:,:) < 0.) .AND. NVERB>5) THEN
+!  WRITE(ILUOUT,*) 'LIMA_ADJUST:  negative values of total water (reset to zero)'
+!  WRITE(ILUOUT,*) '  location of minimum PRVS+PRCS+PRIS:',MINLOC(PRVS+PRCS+PRIS)
+!  WRITE(ILUOUT,*) '  value of minimum    PRVS+PRCS+PRIS:',MINVAL(PRVS+PRCS+PRIS)
+!END IF
 !
 WHERE ( PRVS(:,:,:)+PRCS(:,:,:)+PRIS(:,:,:) < 0.)
   PRVS(:,:,:) = -  PRCS(:,:,:) - PRIS(:,:,:)
diff --git a/src/common/micro/lima_nucleation_procs.F90 b/src/common/micro/lima_nucleation_procs.F90
index e8e0375bc..5f205ea0f 100644
--- a/src/common/micro/lima_nucleation_procs.F90
+++ b/src/common/micro/lima_nucleation_procs.F90
@@ -8,17 +8,25 @@
 !      ###############################
 !
 INTERFACE
-   SUBROUTINE LIMA_NUCLEATION_PROCS (CST, PTSTEP, PRHODJ,                  &
-                                     PRHODREF, PEXNREF, PPABST, PT, PDTHRAD, PW_NU,&
-                                     PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,     &
-                                     PCCT, PCRT, PCIT,                             &
-                                     PNFT, PNAT, PIFT, PINT, PNIT, PNHT,           &
-                                     PCLDFR, PICEFR, PPRCFR                        )
+   SUBROUTINE LIMA_NUCLEATION_PROCS (D, CST, BUCONF, TBUDGETS, KBUDGETS,             &
+                                     PTSTEP, PRHODJ,                                 &
+                                     PRHODREF, PEXNREF, PPABST, PT, PDTHRAD, PW_NU,  &
+                                     PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PRHT, &
+                                     PCCT, PCRT, PCIT,                               &
+                                     PNFT, PNAT, PIFT, PINT, PNIT, PNHT,             &
+                                     PCLDFR, PICEFR, PPRCFR                          )
 !
 USE MODD_CST,            ONLY: CST_t
+USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
+USE MODD_BUDGET,   ONLY: TBUDGETDATA, TBUDGETCONF_t 
 !USE MODD_IO, ONLY: TFILEDATA
 !
+TYPE(DIMPHYEX_t),         INTENT(IN)    :: D
 TYPE(CST_t),              INTENT(IN)    :: CST
+TYPE(TBUDGETCONF_t),      INTENT(IN)    :: BUCONF
+TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS
+INTEGER, INTENT(IN) :: KBUDGETS
+!
 REAL,                     INTENT(IN)    :: PTSTEP     ! Double Time step
 !TYPE(TFILEDATA),          INTENT(IN)    :: TPFILE     ! Output file
 !
@@ -37,6 +45,7 @@ REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT       ! Rain water m.r. at t
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRIT       ! Pristine ice m.r. at t
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST       ! Snow m.r. at t
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRGT       ! Graupel m.r. at t
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHT       ! Hail m.r. at t
 !
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCCT       ! Cloud water conc. at t 
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCRT       ! Rain water conc. at t
@@ -57,12 +66,13 @@ END SUBROUTINE LIMA_NUCLEATION_PROCS
 END INTERFACE
 END MODULE MODI_LIMA_NUCLEATION_PROCS
 !     #############################################################################
-SUBROUTINE LIMA_NUCLEATION_PROCS (CST, PTSTEP, PRHODJ,                  &
-                                  PRHODREF, PEXNREF, PPABST, PT, PDTHRAD, PW_NU,&
-                                  PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,     &
-                                  PCCT, PCRT, PCIT,                             &
-                                  PNFT, PNAT, PIFT, PINT, PNIT, PNHT,           &
-                                  PCLDFR, PICEFR, PPRCFR                        )
+SUBROUTINE LIMA_NUCLEATION_PROCS (D, CST, BUCONF, TBUDGETS, KBUDGETS,             &
+                                  PTSTEP, PRHODJ,                                 &
+                                  PRHODREF, PEXNREF, PPABST, PT, PDTHRAD, PW_NU,  &
+                                  PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PRHT, &
+                                  PCCT, PCRT, PCIT,                               &
+                                  PNFT, PNAT, PIFT, PINT, PNIT, PNHT,             &
+                                  PCLDFR, PICEFR, PPRCFR                          )
 !     #############################################################################
 !
 !!    PURPOSE
@@ -84,11 +94,10 @@ SUBROUTINE LIMA_NUCLEATION_PROCS (CST, PTSTEP, PRHODJ,                  &
 !  B. Vie         03/2022: Add option for 1-moment pristine ice
 !-------------------------------------------------------------------------------
 !
+USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
+USE MODD_BUDGET,   ONLY: TBUDGETDATA, TBUDGETCONF_t
 USE MODD_CST,            ONLY: CST_t
-use modd_budget,     only: lbu_enable, lbudget_th, lbudget_rv, lbudget_rc, lbudget_rr,  &
-                           lbudget_ri, lbudget_rs, lbudget_rg, lbudget_rh, lbudget_sv,  &
-                           NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RI, NBUDGET_SV1, &
-                           tbudgets
+use modd_budget,     only: NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RI, NBUDGET_SV1
 !USE MODD_IO,         ONLY: TFILEDATA
 USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT
 USE MODD_NSV,        ONLY : NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_FREE, NSV_LIMA_CCN_ACTI, &
@@ -97,13 +106,13 @@ USE MODD_PARAM_LIMA, ONLY : LNUCL, LMEYERS, LACTI, LHHONI,  &
                             NMOD_CCN, NMOD_IFN, NMOD_IMM, XCTMIN, XRTMIN, LSPRO, NMOM_I, NMOM_C
 USE MODD_TURB_n,     ONLY : LSUBG_COND
 
-use mode_budget,     only: Budget_store_add, Budget_store_init, Budget_store_end
+use mode_budget,     only: BUDGET_STORE_ADD_PHY, BUDGET_STORE_INIT_PHY, BUDGET_STORE_END_PHY
 
 USE MODI_LIMA_CCN_ACTIVATION
 USE MODI_LIMA_CCN_HOM_FREEZING
 USE MODI_LIMA_MEYERS_NUCLEATION
 USE MODI_LIMA_PHILLIPS_IFN_NUCLEATION
-USE MODE_RAIN_ICE_NUCLEATION
+USE MODE_LIMA_ICE4_NUCLEATION
 !
 !-------------------------------------------------------------------------------
 !
@@ -111,8 +120,13 @@ IMPLICIT NONE
 !
 !-------------------------------------------------------------------------------
 !
+TYPE(DIMPHYEX_t),         INTENT(IN)    :: D
 TYPE(CST_t),              INTENT(IN)    :: CST
-REAL,                     INTENT(IN)    :: PTSTEP     ! Double Time step
+TYPE(TBUDGETCONF_t),      INTENT(IN)    :: BUCONF
+TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS
+INTEGER, INTENT(IN) :: KBUDGETS 
+!
+REAL,                     INTENT(IN)    :: PTSTEP     ! Double Time step 
 !TYPE(TFILEDATA),          INTENT(IN)    :: TPFILE     ! Output file
 !
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ     ! Reference density
@@ -130,6 +144,7 @@ REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT       ! Rain water m.r. at t
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRIT       ! Rain water m.r. at t
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST       ! Rain water m.r. at t
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRGT       ! Rain water m.r. at t
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHT       ! Hail m.r. at t
 !
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCCT       ! Cloud water conc. at t 
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCRT       ! Rain water conc. at t
@@ -149,10 +164,10 @@ REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PPRCFR     ! Precipitation fraction
 !-------------------------------------------------------------------------------
 !
 REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2),SIZE(PT,3))          :: Z_TH_HIND, Z_RI_HIND, Z_CI_HIND, Z_TH_HINC, Z_RC_HINC, Z_CC_HINC
-REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2),SIZE(PT,3))          :: ZTHS, ZRIS, ZRVS, ZRHT, ZCIT, ZT
+REAL, DIMENSION(SIZE(PT,1),SIZE(PT,2),SIZE(PT,3))          :: ZCIT, ZLSFACT, ZRVHENIMR
 !
-integer :: idx
-INTEGER :: JL
+integer :: idx, jl
+INTEGER :: JI,JJ
 !
 !-------------------------------------------------------------------------------
 !
@@ -160,17 +175,17 @@ IF ( LACTI .AND. NMOD_CCN >=1 .AND. NMOM_C.GE.2) THEN
 
   IF (.NOT.LSUBG_COND .AND. .NOT.LSPRO) THEN
 
-    if ( lbu_enable ) then
-      if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'HENU', ptht(:, :, :) * prhodj(:, :, :) / ptstep )
-      if ( lbudget_rv ) call Budget_store_init( tbudgets(NBUDGET_RV), 'HENU', prvt(:, :, :) * prhodj(:, :, :) / ptstep )
-      if ( lbudget_rc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'HENU', prct(:, :, :) * prhodj(:, :, :) / ptstep )
-      if ( lbudget_sv ) then
-        call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'HENU', pcct(:, :, :) * prhodj(:, :, :) / ptstep )
+    if ( BUCONF%lbu_enable ) then
+      if ( BUCONF%lbudget_th ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_TH), 'HENU', ptht(:, :, :) * prhodj(:, :, :) / ptstep )
+      if ( BUCONF%lbudget_rv ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RV), 'HENU', prvt(:, :, :) * prhodj(:, :, :) / ptstep )
+      if ( BUCONF%lbudget_rc ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RC), 'HENU', prct(:, :, :) * prhodj(:, :, :) / ptstep )
+      if ( BUCONF%lbudget_sv ) then
+        call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'HENU', pcct(:, :, :) * prhodj(:, :, :) / ptstep )
         do jl = 1, nmod_ccn
           idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_free - 1 + jl
-          call Budget_store_init( tbudgets(idx), 'HENU', pnft(:, :, :, jl) * prhodj(:, :, :) / ptstep )
+          call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'HENU', pnft(:, :, :, jl) * prhodj(:, :, :) / ptstep )
           idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_acti - 1 + jl
-          call Budget_store_init( tbudgets(idx), 'HENU', pnat(:, :, :, jl) * prhodj(:, :, :) / ptstep )
+          call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'HENU', pnat(:, :, :, jl) * prhodj(:, :, :) / ptstep )
         end do
       end if
     end if
@@ -178,17 +193,17 @@ IF ( LACTI .AND. NMOD_CCN >=1 .AND. NMOM_C.GE.2) THEN
     CALL LIMA_CCN_ACTIVATION( CST,                                      &
                               PRHODREF, PEXNREF, PPABST, PT, PDTHRAD, PW_NU,    &
                               PTHT, PRVT, PRCT, PCCT, PRRT, PNFT, PNAT, PCLDFR  )
-    if ( lbu_enable ) then
-      if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'HENU', ptht(:, :, :) * prhodj(:, :, :) / ptstep )
-      if ( lbudget_rv ) call Budget_store_end( tbudgets(NBUDGET_RV), 'HENU', prvt(:, :, :) * prhodj(:, :, :) / ptstep )
-      if ( lbudget_rc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'HENU', prct(:, :, :) * prhodj(:, :, :) / ptstep )
-      if ( lbudget_sv ) then
-        call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'HENU', pcct(:, :, :) * prhodj(:, :, :) / ptstep )
+    if ( BUCONF%lbu_enable ) then
+      if ( BUCONF%lbudget_th ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_TH), 'HENU', ptht(:, :, :) * prhodj(:, :, :) / ptstep )
+      if ( BUCONF%lbudget_rv ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RV), 'HENU', prvt(:, :, :) * prhodj(:, :, :) / ptstep )
+      if ( BUCONF%lbudget_rc ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RC), 'HENU', prct(:, :, :) * prhodj(:, :, :) / ptstep )
+      if ( BUCONF%lbudget_sv ) then
+        call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'HENU', pcct(:, :, :) * prhodj(:, :, :) / ptstep )
         do jl = 1, nmod_ccn
           idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_free - 1 + jl
-          call Budget_store_end( tbudgets(idx), 'HENU', pnft(:, :, :, jl) * prhodj(:, :, :) / ptstep )
+          call BUDGET_STORE_END_PHY(D, TBUDGETS(idx), 'HENU', pnft(:, :, :, jl) * prhodj(:, :, :) / ptstep )
           idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_acti - 1 + jl
-          call Budget_store_end( tbudgets(idx), 'HENU', pnat(:, :, :, jl) * prhodj(:, :, :) / ptstep )
+          call BUDGET_STORE_END_PHY(D, TBUDGETS(idx), 'HENU', pnat(:, :, :, jl) * prhodj(:, :, :) / ptstep )
         end do
       end if
     end if
@@ -202,22 +217,22 @@ END IF
 !-------------------------------------------------------------------------------
 !
 IF ( LNUCL .AND. NMOM_I>=2 .AND. .NOT.LMEYERS .AND. NMOD_IFN >= 1 ) THEN
-  if ( lbu_enable ) then
-    if ( lbudget_sv ) then
+  if ( BUCONF%lbu_enable ) then
+    if ( BUCONF%lbudget_sv ) then
       do jl = 1, nmod_ifn
         idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_free - 1 + jl
-        call Budget_store_init( tbudgets(idx), 'HIND', pift(:, :, :, jl) * prhodj(:, :, :) / ptstep )
+        call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'HIND', pift(:, :, :, jl) * prhodj(:, :, :) / ptstep )
         idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl - 1 + jl
-        call Budget_store_init( tbudgets(idx), 'HIND', pint(:, :, :, jl) * prhodj(:, :, :) / ptstep )
+        call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'HIND', pint(:, :, :, jl) * prhodj(:, :, :) / ptstep )
       end do
 
       do jl = 1, nmod_ccn
         idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_acti - 1 + jl
-        call Budget_store_init( tbudgets(idx), 'HINC', pnat(:, :, :, jl) * prhodj(:, :, :) / ptstep )
+        call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'HINC', pnat(:, :, :, jl) * prhodj(:, :, :) / ptstep )
       end do
       do jl = 1, nmod_imm
         idx = NBUDGET_SV1 - 1 + nsv_lima_imm_nucl - 1 + jl
-        call Budget_store_init( tbudgets(idx), 'HINC', pnit(:, :, :, jl) * prhodj(:, :, :) / ptstep )
+        call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'HINC', pnit(:, :, :, jl) * prhodj(:, :, :) / ptstep )
       end do
     end if
   end if
@@ -231,35 +246,35 @@ IF ( LNUCL .AND. NMOM_I>=2 .AND. .NOT.LMEYERS .AND. NMOD_IFN >= 1 ) THEN
                                       PICEFR                                            )
   WHERE(PICEFR(:,:,:)<1.E-10 .AND. PRIT(:,:,:)>XRTMIN(4) .AND. PCIT(:,:,:)>XCTMIN(4)) PICEFR(:,:,:)=1.
 !
-  if ( lbu_enable ) then
-    if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'HIND',  z_th_hind(:, :, :) * prhodj(:, :, :) / ptstep )
-    if ( lbudget_rv ) call Budget_store_add( tbudgets(NBUDGET_RV), 'HIND', -z_ri_hind(:, :, :) * prhodj(:, :, :) / ptstep )
-    if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'HIND',  z_ri_hind(:, :, :) * prhodj(:, :, :) / ptstep )
-    if ( lbudget_sv ) then
-      call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HIND', z_ci_hind(:, :, :) * prhodj(:, :, :) / ptstep )
+  if ( BUCONF%lbu_enable ) then
+    if ( BUCONF%lbudget_th ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HIND',  z_th_hind(:, :, :) * prhodj(:, :, :) / ptstep )
+    if ( BUCONF%lbudget_rv ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'HIND', -z_ri_hind(:, :, :) * prhodj(:, :, :) / ptstep )
+    if ( BUCONF%lbudget_ri ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HIND',  z_ri_hind(:, :, :) * prhodj(:, :, :) / ptstep )
+    if ( BUCONF%lbudget_sv ) then
+      call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HIND', z_ci_hind(:, :, :) * prhodj(:, :, :) / ptstep )
       do jl = 1, nmod_ifn
         idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_free - 1 + jl
-        call Budget_store_end( tbudgets(idx), 'HIND', pift(:, :, :, jl) * prhodj(:, :, :) / ptstep )
+        call BUDGET_STORE_END_PHY(D, TBUDGETS(idx), 'HIND', pift(:, :, :, jl) * prhodj(:, :, :) / ptstep )
         idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl - 1 + jl
-        call Budget_store_end( tbudgets(idx), 'HIND', pint(:, :, :, jl) * prhodj(:, :, :) / ptstep )
+        call BUDGET_STORE_END_PHY(D, TBUDGETS(idx), 'HIND', pint(:, :, :, jl) * prhodj(:, :, :) / ptstep )
       end do
     end if
 
-    if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'HINC',  z_th_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
-    if ( lbudget_rc ) call Budget_store_add( tbudgets(NBUDGET_RC), 'HINC',  z_rc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
-    if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'HINC', -z_rc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
-    if ( lbudget_sv ) then
+    if ( BUCONF%lbudget_th ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HINC',  z_th_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
+    if ( BUCONF%lbudget_rc ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'HINC',  z_rc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
+    if ( BUCONF%lbudget_ri ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HINC', -z_rc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
+    if ( BUCONF%lbudget_sv ) then
        if (nmom_c.ge.2) then
-          call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'HINC',  z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
+          call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'HINC',  z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
        end if
-      call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HINC', -z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
+      call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HINC', -z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
       do jl = 1, nmod_ccn
         idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_acti - 1 + jl
-        call Budget_store_end( tbudgets(idx), 'HINC', pnat(:, :, :, jl) * prhodj(:, :, :) / ptstep )
+        call BUDGET_STORE_END_PHY(D, TBUDGETS(idx), 'HINC', pnat(:, :, :, jl) * prhodj(:, :, :) / ptstep )
       end do
       do jl = 1, nmod_imm
         idx = NBUDGET_SV1 - 1 + nsv_lima_imm_nucl - 1 + jl
-        call Budget_store_end( tbudgets(idx), 'HINC', pnit(:, :, :, jl) * prhodj(:, :, :) / ptstep )
+        call BUDGET_STORE_END_PHY(D, TBUDGETS(idx), 'HINC', pnit(:, :, :, jl) * prhodj(:, :, :) / ptstep )
       end do
     end if
   end if
@@ -277,27 +292,27 @@ IF (LNUCL .AND. NMOM_I>=2 .AND. LMEYERS) THEN
                                 PICEFR                                      )
   WHERE(PICEFR(:,:,:)<1.E-10 .AND. PRIT(:,:,:)>XRTMIN(4) .AND. PCIT(:,:,:)>XCTMIN(4)) PICEFR(:,:,:)=1.
   !
-  if ( lbu_enable ) then
-    if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'HIND',  z_th_hind(:, :, :) * prhodj(:, :, :) / ptstep )
-    if ( lbudget_rv ) call Budget_store_add( tbudgets(NBUDGET_RV), 'HIND', -z_ri_hind(:, :, :) * prhodj(:, :, :) / ptstep )
-    if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'HIND',  z_ri_hind(:, :, :) * prhodj(:, :, :) / ptstep )
-    if ( lbudget_sv ) then
-      call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HIND', z_ci_hind(:, :, :) * prhodj(:, :, :) / ptstep )
+  if ( BUCONF%lbu_enable ) then
+    if ( BUCONF%lbudget_th ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HIND',  z_th_hind(:, :, :) * prhodj(:, :, :) / ptstep )
+    if ( BUCONF%lbudget_rv ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'HIND', -z_ri_hind(:, :, :) * prhodj(:, :, :) / ptstep )
+    if ( BUCONF%lbudget_ri ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HIND',  z_ri_hind(:, :, :) * prhodj(:, :, :) / ptstep )
+    if ( BUCONF%lbudget_sv ) then
+      call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HIND', z_ci_hind(:, :, :) * prhodj(:, :, :) / ptstep )
       if (nmod_ifn > 0 ) &
-        call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl), 'HIND', &
+        call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl), 'HIND', &
                                z_ci_hind(:, :, :) * prhodj(:, :, :) / ptstep )
     end if
 
-    if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'HINC',  z_th_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
-    if ( lbudget_rc ) call Budget_store_add( tbudgets(NBUDGET_RC), 'HINC',  z_rc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
-    if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'HINC', -z_rc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
-    if ( lbudget_sv ) then
+    if ( BUCONF%lbudget_th ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HINC',  z_th_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
+    if ( BUCONF%lbudget_rc ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'HINC',  z_rc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
+    if ( BUCONF%lbudget_ri ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HINC', -z_rc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
+    if ( BUCONF%lbudget_sv ) then
        if (nmom_c.ge.2) then
-          call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'HINC',  z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
+          call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'HINC',  z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
        end if
-      call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HINC', -z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
+      call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HINC', -z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
       if (nmod_ifn > 0 ) &
-        call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl), 'HINC', &
+        call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl), 'HINC', &
                                -z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
     end if
   end if
@@ -308,46 +323,49 @@ END IF
 IF (LNUCL .AND. NMOM_I.EQ.1) THEN
   WHERE(PICEFR(:,:,:)<1.E-10 .AND. PRIT(:,:,:)>XRTMIN(4) .AND. PCIT(:,:,:)>XCTMIN(4)) PICEFR(:,:,:)=1.
   !
-  ZTHS=PTHT/PTSTEP
-  ZRVS=PRVT/PTSTEP
-  ZRIS=PRIT/PTSTEP
-  ZRHT=0.
-  ZCIT=PCIT
-  ZT=PT
-  CALL RAIN_ICE_NUCLEATION(1+JPHEXT, SIZE(PT,1)-JPHEXT, 1+JPHEXT, SIZE(PT,2)-JPHEXT, 1+JPVEXT, SIZE(PT,3)-JPVEXT, 6, &
-                           PTSTEP, PTHT, PPABST, PRHODJ, PRHODREF, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,               &
-                           ZCIT, PEXNREF, ZTHS, ZRVS, ZRIS, ZT, ZRHT)
+  ZLSFACT(:,:,:)=(CST%XLSTT+(CST%XCPV-CST%XCI)*(PT(:,:,:)-CST%XTT)) / &
+     ( ( CST%XCPD +                                  &
+         CST%XCPV*PRVT(:,:,:) +                      &
+         CST%XCL*(PRCT(:,:,:)+PRRT(:,:,:)) +         &
+         CST%XCI*(PRIT(:,:,:)+PRST(:,:,:)+PRGT(:,:,:)+PRHT(:,:,:)) ) * PEXNREF(:,:,:) ) 
+  DO JI = 1, SIZE(PTHT,1)
+     DO JJ = 1, SIZE(PTHT,2)
+        CALL LIMA_ICE4_NUCLEATION(CST, SIZE(PTHT,3), &
+             PTHT(JI,JJ,:), PPABST(JI,JJ,:), PRHODREF(JI,JJ,:), PEXNREF(JI,JJ,:), ZLSFACT(JI,JJ,:), PT(JI,JJ,:), &
+             PRVT(JI,JJ,:), &
+             ZCIT(JI,JJ,:), ZRVHENIMR(JI,JJ,:) )
+     END DO
+  END DO
   !
 !  Z_TH_HIND=ZTHS*PTSTEP-PTHT
 !  Z_RI_HIND=ZRIS*PTSTEP-PRIT
 !  Z_CI_HIND=ZCIT-PCIT
-  PCIT=ZCIT
-  PRIT=ZRIS*PTSTEP
-  PTHT=ZTHS*PTSTEP
-  PRVT=ZRVS*PTSTEP
+  PRIT(:,:,:)=PRIT(:,:,:)+ZRVHENIMR(:,:,:)
+  PTHT(:,:,:)=PTHT(:,:,:)+ZRVHENIMR(:,:,:)*ZLSFACT(:,:,:)
+  PRVT(:,:,:)=PRVT(:,:,:)-ZRVHENIMR(:,:,:)
 !  Z_TH_HINC=0.
 !  Z_RC_HINC=0.
 !  Z_CC_HINC=0.
 !  !
-!  if ( lbu_enable ) then
-!    if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'HIND',  z_th_hind(:, :, :) * prhodj(:, :, :) / ptstep )
-!    if ( lbudget_rv ) call Budget_store_add( tbudgets(NBUDGET_RV), 'HIND', -z_ri_hind(:, :, :) * prhodj(:, :, :) / ptstep )
-!    if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'HIND',  z_ri_hind(:, :, :) * prhodj(:, :, :) / ptstep )
-!    if ( lbudget_sv ) then
-!      call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HIND', z_ci_hind(:, :, :) * prhodj(:, :, :) / ptstep )
+!  if ( BUCONF%lbu_enable ) then
+!    if ( BUCONF%lbudget_th ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HIND',  z_th_hind(:, :, :) * prhodj(:, :, :) / ptstep )
+!    if ( BUCONF%lbudget_rv ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'HIND', -z_ri_hind(:, :, :) * prhodj(:, :, :) / ptstep )
+!    if ( BUCONF%lbudget_ri ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HIND',  z_ri_hind(:, :, :) * prhodj(:, :, :) / ptstep )
+!    if ( BUCONF%lbudget_sv ) then
+!      call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HIND', z_ci_hind(:, :, :) * prhodj(:, :, :) / ptstep )
 !      if (nmod_ifn > 0 ) &
-!        call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl), 'HIND', &
+!        call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl), 'HIND', &
 !                               z_ci_hind(:, :, :) * prhodj(:, :, :) / ptstep )
 !    end if
 !
-!    if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'HINC',  z_th_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
-!    if ( lbudget_rc ) call Budget_store_add( tbudgets(NBUDGET_RC), 'HINC',  z_rc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
-!    if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'HINC', -z_rc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
-!    if ( lbudget_sv ) then
-!      call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'HINC',  z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
-!      call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HINC', -z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
+!    if ( BUCONF%lbudget_th ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HINC',  z_th_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
+!    if ( BUCONF%lbudget_rc ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'HINC',  z_rc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
+!    if ( BUCONF%lbudget_ri ) call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HINC', -z_rc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
+!    if ( BUCONF%lbudget_sv ) then
+!      call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'HINC',  z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
+!      call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HINC', -z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
 !      if (nmod_ifn > 0 ) &
-!        call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl), 'HINC', &
+!        call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl), 'HINC', &
 !                               -z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
 !    end if
 !  end if
@@ -356,17 +374,17 @@ END IF
 !-------------------------------------------------------------------------------
 !
 IF ( LNUCL .AND. LHHONI .AND. NMOD_CCN >= 1 .AND. NMOM_I.GE.2) THEN
-  if ( lbu_enable ) then
-    if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'HONH', PTHT(:, :, :) * prhodj(:, :, :) / ptstep )
-    if ( lbudget_rv ) call Budget_store_init( tbudgets(NBUDGET_RV), 'HONH', PRVT(:, :, :) * prhodj(:, :, :) / ptstep )
-    if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'HONH', PRIT(:, :, :) * prhodj(:, :, :) / ptstep )
-    if ( lbudget_sv ) then
-      call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HONH', PCIT(:, :, :) * prhodj(:, :, :) / ptstep )
+  if ( BUCONF%lbu_enable ) then
+    if ( BUCONF%lbudget_th ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_TH), 'HONH', PTHT(:, :, :) * prhodj(:, :, :) / ptstep )
+    if ( BUCONF%lbudget_rv ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RV), 'HONH', PRVT(:, :, :) * prhodj(:, :, :) / ptstep )
+    if ( BUCONF%lbudget_ri ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RI), 'HONH', PRIT(:, :, :) * prhodj(:, :, :) / ptstep )
+    if ( BUCONF%lbudget_sv ) then
+      call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HONH', PCIT(:, :, :) * prhodj(:, :, :) / ptstep )
       do jl = 1, nmod_ccn
         idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_free - 1 + jl
-        call Budget_store_init( tbudgets(idx), 'HONH', PNFT(:, :, :, jl) * prhodj(:, :, :) / ptstep )
+        call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'HONH', PNFT(:, :, :, jl) * prhodj(:, :, :) / ptstep )
       end do
-      call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_hom_haze), 'HONH', PNHT(:, :, :) * prhodj(:, :, :) / ptstep )
+      call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_hom_haze), 'HONH', PNHT(:, :, :) * prhodj(:, :, :) / ptstep )
     end if
   end if
 
@@ -376,17 +394,17 @@ IF ( LNUCL .AND. LHHONI .AND. NMOD_CCN >= 1 .AND. NMOM_I.GE.2) THEN
                               PICEFR                                    )
   WHERE(PICEFR(:,:,:)<1.E-10 .AND. PRIT(:,:,:)>XRTMIN(4) .AND. PCIT(:,:,:)>XCTMIN(4)) PICEFR(:,:,:)=1.
 !
-  if ( lbu_enable ) then
-    if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'HONH', PTHT(:, :, :) * prhodj(:, :, :) / ptstep )
-    if ( lbudget_rv ) call Budget_store_end( tbudgets(NBUDGET_RV), 'HONH', PRVT(:, :, :) * prhodj(:, :, :) / ptstep )
-    if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'HONH', PRIT(:, :, :) * prhodj(:, :, :) / ptstep )
-    if ( lbudget_sv ) then
-      call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HONH', PCIT(:, :, :) * prhodj(:, :, :) / ptstep )
+  if ( BUCONF%lbu_enable ) then
+    if ( BUCONF%lbudget_th ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_TH), 'HONH', PTHT(:, :, :) * prhodj(:, :, :) / ptstep )
+    if ( BUCONF%lbudget_rv ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RV), 'HONH', PRVT(:, :, :) * prhodj(:, :, :) / ptstep )
+    if ( BUCONF%lbudget_ri ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RI), 'HONH', PRIT(:, :, :) * prhodj(:, :, :) / ptstep )
+    if ( BUCONF%lbudget_sv ) then
+      call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ni), 'HONH', PCIT(:, :, :) * prhodj(:, :, :) / ptstep )
       do jl = 1, nmod_ccn
         idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_free - 1 + jl
-        call Budget_store_end( tbudgets(idx), 'HONH', PNFT(:, :, :, jl) * prhodj(:, :, :) / ptstep )
+        call BUDGET_STORE_END_PHY(D, TBUDGETS(idx), 'HONH', PNFT(:, :, :, jl) * prhodj(:, :, :) / ptstep )
       end do
-      call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_hom_haze), 'HONH', PNHT(:, :, :) * prhodj(:, :, :) / ptstep )
+      call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_hom_haze), 'HONH', PNHT(:, :, :) * prhodj(:, :, :) / ptstep )
     end if
   end if
 ENDIF
diff --git a/src/common/micro/modd_param_lima_cold.F90 b/src/common/micro/modd_param_lima_cold.F90
index 3801cfcb7..337480312 100644
--- a/src/common/micro/modd_param_lima_cold.F90
+++ b/src/common/micro/modd_param_lima_cold.F90
@@ -139,6 +139,14 @@ REAL,SAVE :: XCONCI_MAX                          ! Limitation of the pristine
                                    ! ice concentration (init and grid-nesting) 
 REAL,SAVE :: XFREFFI  ! Factor to compute the cloud ice effective radius
 !
+! For ICE4 nucleation
+REAL, SAVE :: XALPHA1
+REAL, SAVE :: XALPHA2
+REAL, SAVE :: XBETA1
+REAL, SAVE :: XBETA2
+REAL, SAVE :: XNU10
+REAL, SAVE :: XNU20
+!
 !-------------------------------------------------------------------------------
 !
 END MODULE MODD_PARAM_LIMA_COLD
diff --git a/src/common/micro/mode_lima_ice4_nucleation.F90 b/src/common/micro/mode_lima_ice4_nucleation.F90
new file mode 100644
index 000000000..082b3c3e5
--- /dev/null
+++ b/src/common/micro/mode_lima_ice4_nucleation.F90
@@ -0,0 +1,147 @@
+!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
+!MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
+MODULE MODE_LIMA_ICE4_NUCLEATION
+IMPLICIT NONE
+CONTAINS
+SUBROUTINE LIMA_ICE4_NUCLEATION(CST, KSIZE, &
+                           PTHT, PPABST, PRHODREF, PEXN, PLSFACT, PT, &
+                           PRVT, &
+                           PCIT, PRVHENI_MR)
+!!
+!!**  PURPOSE
+!!    -------
+!!      Computes the nucleation
+!!
+!!    AUTHOR
+!!    ------
+!!      S. Riette from the splitting of rain_ice source code (nov. 2014)
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!
+!!     R. El Khatib 24-Aug-2021 Optimizations
+!
+!
+!*      0. DECLARATIONS
+!          ------------
+!
+USE MODD_CST,            ONLY: CST_t
+USE PARKIND1, ONLY : JPRB
+USE YOMHOOK , ONLY : LHOOK, DR_HOOK
+USE MODD_PARAM_LIMA_COLD, ONLY : XALPHA1, XBETA1, XALPHA2, XBETA2, XNU10, XNU20, XMNU0
+USE MODD_PARAM_LIMA, ONLY: LFEEDBACKT, XRTMIN
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of dummy arguments :
+!
+TYPE(CST_t),              INTENT(IN)    :: CST
+INTEGER,                  INTENT(IN)    :: KSIZE
+REAL, DIMENSION(KSIZE),   INTENT(IN)    :: PTHT    ! Theta at t
+REAL, DIMENSION(KSIZE),   INTENT(IN)    :: PPABST  ! absolute pressure at t
+REAL, DIMENSION(KSIZE),   INTENT(IN)    :: PRHODREF! Reference density
+REAL, DIMENSION(KSIZE),   INTENT(IN)    :: PEXN    ! Exner function
+REAL, DIMENSION(KSIZE),   INTENT(IN)    :: PLSFACT
+REAL, DIMENSION(KSIZE),   INTENT(IN)    :: PT      ! Temperature at time t
+REAL, DIMENSION(KSIZE),   INTENT(IN)    :: PRVT    ! Water vapor m.r. at t
+REAL, DIMENSION(KSIZE),   INTENT(INOUT) :: PCIT    ! Pristine ice n.c. at t
+REAL, DIMENSION(KSIZE),   INTENT(OUT)   :: PRVHENI_MR ! Mixing ratio change due to the heterogeneous nucleation
+!
+!*       0.2  declaration of local variables
+!
+REAL, DIMENSION(KSIZE) :: ZW ! work array
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+LOGICAL, DIMENSION(KSIZE) :: GNEGT  ! Test where to compute the HEN process
+REAL, DIMENSION(KSIZE)  :: ZZW,      & ! Work array
+                           ZUSW,     & ! Undersaturation over water
+                           ZSSI        ! Supersaturation over ice
+INTEGER :: JI
+!-------------------------------------------------------------------------------
+!
+IF (LHOOK) CALL DR_HOOK('LIMA_ICE4_NUCLEATION', 0, ZHOOK_HANDLE)!
+!
+!$mnh_expand_where(JI=1:KSIZE)
+GNEGT(:)=PT(:)<CST%XTT .AND. PRVT(:)>XRTMIN(1)
+!$mnh_end_expand_where(JI=1:KSIZE)
+
+ZUSW(:)=0.
+ZZW(:)=0.
+!$mnh_expand_where(JI=1:KSIZE)
+WHERE(GNEGT(:))
+  ZZW(:)=ALOG(PT(:))
+  ZUSW(:)=EXP(CST%XALPW - CST%XBETAW/PT(:) - CST%XGAMW*ZZW(:))          ! es_w
+  ZZW(:)=EXP(CST%XALPI - CST%XBETAI/PT(:) - CST%XGAMI*ZZW(:))           ! es_i
+END WHERE
+!$mnh_end_expand_where(JI=1:KSIZE)
+
+ZSSI(:)=0.
+!$mnh_expand_where(JI=1:KSIZE)
+WHERE(GNEGT(:))
+  ZZW(:)=MIN(PPABST(:)/2., ZZW(:))             ! safety limitation
+  ZSSI(:)=PRVT(:)*(PPABST(:)-ZZW(:)) / (CST%XEPSILO*ZZW(:)) - 1.0
+                                               ! Supersaturation over ice
+  ZUSW(:)=MIN(PPABST(:)/2., ZUSW(:))            ! safety limitation
+  ZUSW(:)=(ZUSW(:)/ZZW(:))*((PPABST(:)-ZZW(:))/(PPABST(:)-ZUSW(:))) - 1.0
+                             ! Supersaturation of saturated water vapor over ice
+  !
+  !*       3.1     compute the heterogeneous nucleation source RVHENI
+  !
+  !*       3.1.1   compute the cloud ice concentration
+  !
+  ZSSI(:)=MIN(ZSSI(:), ZUSW(:)) ! limitation of SSi according to SSw=0
+END WHERE
+!$mnh_end_expand_where(JI=1:KSIZE)
+
+ZZW(:)=0.
+DO JI=1,KSIZE
+  IF(GNEGT(JI)) THEN
+    IF(PT(JI)<CST%XTT-5.0 .AND. ZSSI(JI)>0.0) THEN
+      ZZW(JI)=XNU20*EXP(XALPHA2*ZSSI(JI)-XBETA2)
+    ELSEIF(PT(JI)<=CST%XTT-2.0 .AND. PT(JI)>=CST%XTT-5.0 .AND. ZSSI(JI)>0.0) THEN
+      ZZW(JI)=MAX(XNU20*EXP(-XBETA2 ), &                                                                                       
+                  XNU10*EXP(-XBETA1*(PT(JI)-CST%XTT))*(ZSSI(JI)/ZUSW(JI))**XALPHA1)
+    ENDIF
+  ENDIF
+ENDDO
+!$mnh_expand_where(JI=1:KSIZE)
+WHERE(GNEGT(:))
+  ZZW(:)=ZZW(:)-PCIT(:)
+  ZZW(:)=MIN(ZZW(:), 50.E3) ! limitation provisoire a 50 l^-1
+END WHERE
+!$mnh_end_expand_where(JI=1:KSIZE)
+
+PRVHENI_MR(:)=0.
+!$mnh_expand_where(JI=1:KSIZE)
+WHERE(GNEGT(:))
+  !
+  !*       3.1.2   update the r_i and r_v mixing ratios
+  !
+  PRVHENI_MR(:)=MAX(ZZW(:), 0.0)*XMNU0/PRHODREF(:)
+  PRVHENI_MR(:)=MIN(PRVT(:), PRVHENI_MR(:))
+END WHERE
+!$mnh_end_expand_where(JI=1:KSIZE)
+!Limitation due to 0 crossing of temperature
+IF(LFEEDBACKT) THEN
+  ZW(:)=0.
+  !$mnh_expand_where(JI=1:KSIZE)
+  WHERE(GNEGT(:))
+    ZW(:)=MIN(PRVHENI_MR(:), &
+              MAX(0., (CST%XTT/PEXN(:)-PTHT(:))/PLSFACT(:))) / &
+              MAX(PRVHENI_MR(:), 1.E-20)
+  END WHERE
+  PRVHENI_MR(:)=PRVHENI_MR(:)*ZW(:)
+  ZZW(:)=ZZW(:)*ZW(:)
+  !$mnh_end_expand_where(JI=1:KSIZE)
+ENDIF
+!$mnh_expand_where(JI=1:KSIZE)
+WHERE(GNEGT(:))
+  PCIT(:)=MAX(ZZW(:)+PCIT(:), PCIT(:))
+END WHERE
+!$mnh_end_expand_where(JI=1:KSIZE)
+!
+IF (LHOOK) CALL DR_HOOK('LIMA_ICE4_NUCLEATION', 1, ZHOOK_HANDLE)
+END SUBROUTINE LIMA_ICE4_NUCLEATION
+END MODULE MODE_LIMA_ICE4_NUCLEATION
diff --git a/tools/check_commit_ial.sh b/tools/check_commit_ial.sh
index 55e0785ea..e5136d8dc 100755
--- a/tools/check_commit_ial.sh
+++ b/tools/check_commit_ial.sh
@@ -360,6 +360,7 @@ if [ $packcreation -eq 1 ]; then
     #Move manually files outside of mpa (a find on the whole repository would take too much a long time)
     [ -f $EXT/yomparar.F90 ] && mv $EXT/yomparar.F90 ../arpifs/module/
     [ -f $EXT/namparar.nam.h ] && mv $EXT/namparar.nam.h ../arpifs/namelist
+    [ -f $EXT/namlima.nam.h ] && mv $EXT/namlima.nam.h ../arpifs/namelist
     [ -f $EXT/suparar.F90 ] && mv $EXT/suparar.F90 ../arpifs/phys_dmn/
     [ -f $EXT/apl_arome.F90 ] && mv $EXT/apl_arome.F90 ../arpifs/phys_dmn/
     [ -f $EXT/suphmpa.F90 ] && mv $EXT/suphmpa.F90 ../arpifs/phys_dmn/
-- 
GitLab