diff --git a/src/arome/ext/apl_arome.F90 b/src/arome/ext/apl_arome.F90
index fc8e5a96dbb4b40e45947971cb6ea4450da5f8e6..0467649b260f778b817c8fb054c0884619d10074 100644
--- a/src/arome/ext/apl_arome.F90
+++ b/src/arome/ext/apl_arome.F90
@@ -392,6 +392,8 @@ REAL(KIND=JPRB) :: ZZRV_UP_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG),    ZTKES_(YDCPG
 REAL(KIND=JPRB) :: ZDZZ_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG),       ZZZ_F_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG),      ZDZZ_F_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG)
 REAL(KIND=JPRB) :: ZCIT_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG),       ZMFM_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG),       ZEXNREFM_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG)
 REAL(KIND=JPRB) :: ZSIGM_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG),      ZNEBMNH_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG),    ZEVAP_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG)
+! additions for future ice cloud fraction and precipitation fraction
+REAL(KIND=JPRB) :: ZICEFR_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG),     ZPRCFR_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG)
 ! additions for MF scheme (Pergaud et al)
 REAL(KIND=JPRB) :: ZSIGMF_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG),     ZRC_MF_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG),     ZRI_MF_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG)
 REAL(KIND=JPRB) :: ZCF_MF_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG),     ZAERD_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG),      ZCVTENDT_(YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG)
@@ -399,6 +401,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_(:,:)
 
@@ -653,6 +657,7 @@ LOGICAL :: LLRAD
 LOGICAL :: LLSWAP_THS, LLSWAP_RS, LLSWAP_SVS, LLSWAP_SVM, LLSWAP_LIMAS ! logical to swap or not pointers in and out
 LOGICAL :: LLHN(YDCPG_OPTS%KLON,YDCPG_OPTS%KFLEVG)
 LOGICAL :: LNUDGLHNREAD
+LOGICAL :: LLIMAINIT
 
 !       Characters
 CHARACTER(LEN=11) :: CLNAME
@@ -1059,6 +1064,17 @@ ZINVDT=1/YDCPG_OPTS%ZDTPHY
 
 ZINVG=1._JPRB/RG 
 
+!set concentration for LIMA
+LLIMAINIT=.FALSE.
+IF (YDCPG_OPTS%KSTEP==0) THEN
+  LLIMAINIT=.TRUE.
+  ZP1EZDIAG(:,:,1)=0._JPRB
+  ZP1EZDIAG(:,:,2)=0._JPRB
+  ZP1EZDIAG(:,:,3)=0._JPRB
+  ZP1EZDIAG(:,:,4)=0._JPRB
+  ZP1EZDIAG(:,:,5)=0._JPRB
+ENDIF
+
 ! initialisation de ZDTMSE
 IF (LLXFUMSE) THEN
   ZDTMSE=0.01_JPRB
@@ -1115,6 +1131,8 @@ IF (INIT0 >= 0) THEN
   ZMFM_(:,:)=ZVALUE
   ZSIGM_(:,:)=ZVALUE
   ZNEBMNH_(:,:)=ZVALUE
+  ZICEFR_(:,:)=ZVALUE
+  ZPRCFR_(:,:)=ZVALUE
   ZICLDFR_(:,:)=ZVALUE
   ZWCLDFR_(:,:)=ZVALUE
   ZSSIO_(:,:)=ZVALUE
@@ -1137,6 +1155,7 @@ IF (INIT0 >= 0) THEN
   ZRC_MF_(:,:)=ZVALUE
   ZRI_MF_(:,:)=ZVALUE
   ZCF_MF_(:,:)=ZVALUE
+  ZDTHRAD_(:,:)=ZVALUE
 
   ZSVSWAP_(:,:,:)=ZVALUE
   ZSVSAVE_(:,:,:)=ZVALUE
@@ -1469,6 +1488,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,16 +1594,27 @@ 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, NRR,                          &
-    & NLIMA, YDCPG_OPTS%KSTEP+1, LOSUBG_COND, LOSIGMAS, LOCND2, ZDT, VSIGQSAT, ZZZ_F_, ZRHODJM__(:, 1:YDCPG_OPTS%KFLEVG), &
+    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, 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_,                      &
-    & ZLIMAS_, ZSRCS__(:, 1:YDCPG_OPTS%KFLEVG), ZNEBMNH_, YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH       &
-    &                               )
+    & 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_, ZICEFR_, ZPRCFR_, YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH,       &
+    & LLIMAINIT                              )
   ELSE
 
 !    CALL ARO_ADJUST (KLON,KIDIA,KFDIA,KLEV,NRR,& !this is the target version
@@ -2200,6 +2241,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
@@ -3158,12 +3207,12 @@ IF (LMICRO) THEN
     ELSE
       ZPTRWNU_ => ZWM__(1:YDCPG_BNDS%KFDIA,1:YDCPG_OPTS%KFLEVG)
     ENDIF
-    CALL ARO_LIMA(YDCPG_OPTS%KFLEVG, IKU, IKL, YDCPG_BNDS%KFDIA, YDCPG_OPTS%KFLEVG, NRR, NLIMA, YDCPG_OPTS%KSTEP+1,       &
+    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_, YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH&
-    &              )
+    & ZINPRS_NOTINCR_, ZINPRG_NOTINCR_, ZINPRH_NOTINCR_, ZPFPR_, ZNEBMNH_, ZICEFR_, ZPRCFR_, YDDDH, YDMODEL%YRML_DIAG%YRLDDH,               &
+    & YDMODEL%YRML_DIAG%YRMDDH)
   ELSE
     !CALL ARO_RAIN_ICE (NPROMICRO,KLEV,IKU,IKL,KLON,KLEV,KFDIA,NRR,KSTEP+1,&      !this is the target version
     CALL ARO_RAIN_ICE (NPROMICRO,YDCPG_OPTS%KFLEVG,IKU,IKL,YDCPG_BNDS%KFDIA,YDCPG_OPTS%KFLEVG,YDCPG_BNDS%KFDIA,NRR,YDCPG_OPTS%KSTEP+1, &
diff --git a/src/arome/ext/aro_adjust_lima.F90 b/src/arome/ext/aro_adjust_lima.F90
index 169373f4974ae90ae14ebd0df4f5f19508cf2737..b7854d832bc629ca86ec37bb54e7266f26dafa66 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,  KRR, KSV, KTCOUNT,  &
-                                  OSUBG_COND, OSIGMAS, OCND2, &
+      SUBROUTINE  ARO_ADJUST_LIMA(KKA,KKU,KKL,KLON,KLEV,KFDIA,  KRR, KSV, KTCOUNT,  &
+                                  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, PICEFR, PPRCFR, &
+                                  YDDDH, YDLDDH, YDMDDH, LLIMAINIT )
       USE PARKIND1, ONLY : JPRB
       USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !     ##########################################################################
@@ -81,18 +82,23 @@ 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_SET_CONC_LIMA
+USE MODE_SET_CONC_LIMA_LBC
+USE MODE_FILL_DIMPHYEX, ONLY: FILL_DIMPHYEX
 !USE MODE_BUDGET, ONLY: BUDGET_DDH
 !
 USE DDH_MIX, ONLY  : TYP_DDH
 USE YOMLDDH, ONLY  : TLDDH
 USE YOMMDDH, ONLY  : TMDDH
 !
+USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
+!
 IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
@@ -105,6 +111,7 @@ INTEGER,                  INTENT(IN)   :: KKU    !uppest atmosphere array index
 INTEGER,                  INTENT(IN)   :: KKL    !vert. levels type 1=MNH -1=ARO
 INTEGER,                  INTENT(IN)   :: KLON     !NPROMA under CPG
 INTEGER,                  INTENT(IN)   :: KLEV     !Number of vertical levels
+INTEGER,                  INTENT(IN)   :: KFDIA    !
 INTEGER,                  INTENT(IN)   :: KRR      ! Number of moist variables
 INTEGER,                  INTENT(IN)   :: KSV      ! Number of moist variables
 INTEGER,                  INTENT(IN)   :: KTCOUNT  ! Temporal loop counter
@@ -113,6 +120,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
 !
@@ -128,6 +137,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
 !
@@ -141,11 +154,15 @@ REAL, DIMENSION(KLON,1,KLEV),   INTENT(OUT)   :: PSRCS ! Second-order flux
                                                  ! s'rc'/2Sigma_s2 at time t+1
                                                  ! multiplied by Lambda_3
 REAL, DIMENSION(KLON,1,KLEV), INTENT(INOUT)   :: PCLDFR! Cloud fraction
+REAL, DIMENSION(KLON,1,KLEV), INTENT(INOUT)   :: PICEFR! Cloud fraction
+REAL, DIMENSION(KLON,1,KLEV), INTENT(INOUT)   :: PPRCFR! 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
+!
+LOGICAL,                  INTENT(IN)    :: LLIMAINIT
 !
 !*       0.2   Declarations of local variables :
 
@@ -173,6 +190,8 @@ REAL  :: ZMASSPOS                   ! total mass  for one water category
                                     ! after removing the negative values
 REAL  :: ZRATIO                     ! ZMASSTOT / ZMASSCOR
 !
+TYPE(TBUDGETDATA), DIMENSION(NBUDGET_SV1+NSV_LIMA-1) :: YLBUDGET
+TYPE(DIMPHYEX_t) :: YLDIMPHYEX
 !
 !------------------------------------------------------------------------------
 !
@@ -189,7 +208,7 @@ HRAD='NONE'
 HTURBDIM='1DIM'
 KMI=1
 
-
+CALL FILL_DIMPHYEX(YLDIMPHYEX, KLON, 1, KLEV, 0, KFDIA)
 
 !
 !*       2.     TRANSFORMATION INTO PHYSICAL TENDENCIES
@@ -204,18 +223,32 @@ ZT(:,:,:)= PTHT(:,:,:)*PEXNREF(:,:,:)
 ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZT(:,:,:)-XTT)
 ZLS(:,:,:)=XLSTT +(XCPV-XCI) *(ZT(:,:,:)-XTT)
 ZCPH(:,:,:)=XCPD +XCPV*2.*PTSTEP*PRS(:,:,:,1)
-!
+
+!set concentration for LIMA
+PRS = PRS * PTSTEP
+PSVS = PSVS * PTSTEP
+IF (LLIMAINIT) THEN
+   CALL SET_CONC_LIMA (1,'ICE3',PRHODREF,PRT,PSVT)
+   CALL SET_CONC_LIMA (1,'ICE3',PRHODREF,PRS,PSVS)
+ELSE
+   CALL SET_CONC_LIMA_LBC (1,'ICE3',PRHODREF,PRT,PSVT)
+   CALL SET_CONC_LIMA_LBC (1,'ICE3',PRHODREF,PRS,PSVS)
+END IF
+PRS = PRS / PTSTEP
+PSVS = PSVS / PTSTEP
+
+!print *, "aro_adjust_lima 2"
 !
 !*       3.     REMOVE NEGATIVE VALUES
 !               ----------------------
 !
 !*       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
@@ -224,7 +257,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
 !
@@ -235,34 +268,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 (LWARM_LIMA) 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 (LWARM_LIMA .AND. LRAIN_LIMA) 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 
@@ -275,18 +308,18 @@ ZCPH(:,:,:)=XCPD +XCPV*2.*PTSTEP*PRS(:,:,:,1)
 !        ENDDO
 !     END IF
 ! Correction where ri<0
-     IF (LCOLD_LIMA) 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
@@ -301,7 +334,12 @@ 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
+ENDDO
 !
 !-------------------------------------------------------------------------------
 !
@@ -314,13 +352,13 @@ ZCPH(:,:,:)=XCPD +XCPV*2.*PTSTEP*PRS(:,:,:,1)
 !
     ZZZ =  PZZF
 
-    CALL LIMA_ADJUST(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=PICEFR, 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
new file mode 100644
index 0000000000000000000000000000000000000000..1686f98b2e16439bc664fa27bfe8a97ca12a5274
--- /dev/null
+++ b/src/arome/ext/aro_adjust_lima.h
@@ -0,0 +1,56 @@
+INTERFACE
+SUBROUTINE ARO_ADJUST_LIMA(KKA,KKU,KKL,KLON,KLEV,KFDIA, KRR, KSV, KTCOUNT,&
+ & 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, PICEFR, PPRCFR, &
+ & YDDDH,YDLDDH,YDMDDH, LLIMAINIT) 
+USE PARKIND1  ,ONLY : JPIM     ,JPRB
+USE DDH_MIX, ONLY : TYP_DDH
+USE YOMLDDH, ONLY : TLDDH
+USE YOMMDDH, ONLY : TMDDH
+INTEGER(KIND=JPIM), INTENT(IN) :: KKA
+INTEGER(KIND=JPIM), INTENT(IN) :: KKU
+INTEGER(KIND=JPIM), INTENT(IN) :: KKL
+INTEGER(KIND=JPIM), INTENT(IN) :: KLON
+INTEGER(KIND=JPIM), INTENT(IN) :: KLEV
+INTEGER(KIND=JPIM), INTENT(IN) :: KFDIA
+INTEGER(KIND=JPIM), INTENT(IN) :: KRR
+INTEGER(KIND=JPIM), INTENT(IN) :: KSV
+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
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PRHODJ
+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) :: 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
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PRS
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KSV), INTENT(INOUT) :: PSVS
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PSRCS
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PCLDFR
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PICEFR
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PPRCFR
+TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
+TYPE(TLDDH), INTENT(IN) :: YDLDDH
+TYPE(TMDDH), INTENT(IN) :: YDMDDH
+LOGICAL, INTENT(IN)    :: LLIMAINIT
+END SUBROUTINE ARO_ADJUST_LIMA
+END INTERFACE
diff --git a/src/arome/ext/aro_lima.F90 b/src/arome/ext/aro_lima.F90
index 4b10ba776c133c4c6a7c2b292f4e14bcad303be8..edef5e82779c4dfc8784d9ed5ca29077fd226722 100644
--- a/src/arome/ext/aro_lima.F90
+++ b/src/arome/ext/aro_lima.F90
@@ -1,10 +1,11 @@
 !     ######spl
-      SUBROUTINE  ARO_LIMA(KKA,KKU,KKL,KLON,KLEV,  KRR, KSV, KTCOUNT, KSPLITR, KSPLITG, &
+      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,     &
+                                  PCLDFR,PICEFR,PPRCFR,         &
                                   YDDDH, YDLDDH, YDMDDH    )
 
       USE PARKIND1, ONLY : JPRB
@@ -38,6 +39,8 @@
 !              ------------
 !
 !
+USE MODD_DIMPHYEX,   ONLY: DIMPHYEX_t
+!
 USE MODD_CONF
 USE MODD_CST
 USE MODD_PARAMETERS
@@ -49,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
 !
@@ -72,6 +76,7 @@ INTEGER,                  INTENT(IN)   :: KKU  !uppest atmosphere array index
 INTEGER,                  INTENT(IN)   :: KKL  !vert. levels type 1=MNH -1=ARO
 INTEGER,                  INTENT(IN)   :: KLON     !NPROMA under CPG
 INTEGER,                  INTENT(IN)   :: KLEV     !Number of vertical levels
+INTEGER,                  INTENT(IN)   :: KFDIA    !
 INTEGER,                  INTENT(IN)   :: KRR      ! Number of moist variables
 INTEGER,                  INTENT(IN)   :: KSV      ! Number of LIMA variables
 INTEGER,                  INTENT(IN)   :: KTCOUNT  ! Temporal loop counter
@@ -90,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
@@ -108,9 +114,13 @@ REAL, DIMENSION(KLON,1), INTENT(INOUT)     :: PINPRG! Graupel instant precip
 REAL, DIMENSION(KLON,1), INTENT(INOUT)     :: PINPRH! Hail instant precip
 REAL, DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PFPR ! upper-air precip
 !
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
+REAL, DIMENSION(KLON,1,KLEV),   INTENT(INOUT)   :: PCLDFR ! liquid cloud fraction
+REAL, DIMENSION(KLON,1,KLEV),   INTENT(INOUT)   :: PICEFR ! ice cloud fraction
+REAL, DIMENSION(KLON,1,KLEV),   INTENT(INOUT)   :: PPRCFR ! precipitation fraction
+!
+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 :
@@ -131,7 +141,7 @@ REAL, DIMENSION(KLON,1,KLEV):: &
    & ZRAINFR, ZHLC_HCF, ZHLC_LCF, ZHLC_HRC, ZHLC_LRC
 REAL, DIMENSION(KLON,1):: ZINPRC    ! surf cloud sedimentation
                                     ! for the correction of negative rv
-REAL, DIMENSION(KLON,1):: ZINPRI    ! surf cloud ice sedimentation
+REAL, DIMENSION(KLON,1):: ZINPRI, ZINDEP    ! surf cloud ice sedimentation
 REAL  :: ZMASSTOT                   ! total mass  for one water category
                                     ! including the negative values
 REAL  :: ZMASSPOS                   ! total mass  for one water category
@@ -140,6 +150,8 @@ REAL  :: ZRATIO                     ! ZMASSTOT / ZMASSCOR
 
 LOGICAL :: LL_RRR_BUDGET
 !
+TYPE(TBUDGETDATA), DIMENSION(NBUDGET_SV1+NSV_LIMA-1) :: YLBUDGET
+TYPE(DIMPHYEX_t) :: YLDIMPHYEX
 !
 !------------------------------------------------------------------------------
 !
@@ -149,6 +161,9 @@ LOGICAL :: LL_RRR_BUDGET
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('ARO_LIMA',0,ZHOOK_HANDLE)
 
+!Dimensions
+CALL FILL_DIMPHYEX(YLDIMPHYEX, KLON, 1, KLEV, 0, KFDIA)
+
 HCLOUD='LIMA'
 KMI=1
 ZINPRC=0.
@@ -197,7 +212,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(:,:,:) /  &
@@ -207,7 +222,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(:,:,:) /  &
@@ -228,7 +243,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(:,:,:) /  &
@@ -244,16 +259,16 @@ END DO
 !*       3.3  STORE THE BUDGET TERMS
 !            ----------------------
 
-LL_RRR_BUDGET = (LBUDGET_RV).OR.(LBUDGET_RC).OR.(LBUDGET_RR).OR.(LBUDGET_RI) &
-             & .OR.(LBUDGET_RS).OR.(LBUDGET_RG).OR.(LBUDGET_RH)       
+LL_RRR_BUDGET = (TBUCONF%LBUDGET_RV).OR.(TBUCONF%LBUDGET_RC).OR.(TBUCONF%LBUDGET_RR).OR.(TBUCONF%LBUDGET_RI) &
+             & .OR.(TBUCONF%LBUDGET_RS).OR.(TBUCONF%LBUDGET_RG).OR.(TBUCONF%LBUDGET_RH)       
 
 IF (LL_RRR_BUDGET) THEN      
   DO JRR=1,KRR
      CALL BUDGET_DDH (PRS(:,:,:,JRR) * PRHODJ(:,:,:), JRR+5,'NEGA_BU_RRR',YDDDH,YDLDDH, YDMDDH)
   END DO 
 END IF
-IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)  * PRHODJ(:,:,:),4,'NEGA_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-IF (LBUDGET_SV) THEN
+IF (TBUCONF%LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)  * PRHODJ(:,:,:),4,'NEGA_BU_RTH',YDDDH, YDLDDH, YDMDDH)
+IF (TBUCONF%LBUDGET_SV) THEN
    CALL BUDGET_DDH (PSVS(:,:,:,NSV_LIMA_NC)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'NEGA_BU_RSV',YDDDH, YDLDDH, YDMDDH)
    CALL BUDGET_DDH (PSVS(:,:,:,NSV_LIMA_NR)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'NEGA_BU_RSV',YDDDH, YDLDDH, YDMDDH)
    CALL BUDGET_DDH (PSVS(:,:,:,NSV_LIMA_NI)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'NEGA_BU_RSV',YDDDH, YDLDDH, YDMDDH)
@@ -271,7 +286,12 @@ IF (LBUDGET_SV) THEN
    END IF
 END IF
 
-
+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
 !
 !
 !-------------------------------------------------------------------------------
@@ -284,40 +304,15 @@ END IF
 !
 !
 !
-IF (LPTSPLIT) THEN
-   CALL LIMA (PTSTEP=2*PTSTEP, HFMFILE='DUMMY', OCLOSE_OUT=.FALSE.,                    &
-              PRHODREF=PRHODREF, PEXNREF=PEXNREF, PZZ=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,                  &
-              PTHS=PTHS, PRS=PRS, PSVS=PSVS,                                &
-              PINPRC=ZINPRC, PINPRR=PINPRR, PINPRI=ZINPRI, PINPRS=PINPRS, PINPRG=PINPRG, PINPRH=PINPRH, &
-              PEVAP3D=PEVAP, KSPLITR=KSPLITR, KSPLITG=KSPLITG, YDDDH=YDDDH, YDLDDH=YDLDDH, YDMDDH=YDMDDH                                   )
-ELSE
-   IF (LWARM_LIMA) CALL LIMA_WARM(OACTIT=LACTIT_LIMA, OSEDC=LSEDC_LIMA, ORAIN=LRAIN_LIMA, KSPLITR=KSPLITR, PTSTEP=2*PTSTEP, KMI=KMI, &
-                             HFMFILE='DUMMY', HLUOUT='DUMMY', OCLOSE_OUT=.FALSE., KRR=KRR, PZZ=PDZZ, PRHODJ=PRHODJ,     &
-                             PRHODREF=PRHODREF, PEXNREF=PEXNREF, PW_NU=PW_NU, PPABSM=PPABSM, PPABST=PPABSM,         &
-                             PTHM=PTHT, PRCM=PRT(:,:,:,2),                  &
-                             PTHT=PTHT, PRT=PRT, PSVT=PSVT,                                   &
-                             PTHS=PTHS, PRS=PRS, PSVS=PSVS,                                   &
-                             PINPRC=ZINPRC,PINPRR=PINPRR, PINPRR3D=ZDUM3DR, PEVAP3D=PEVAP,YDDDH=YDDDH, YDLDDH=YDLDDH, YDMDDH=YDMDDH         )
-   !
-   IF (LCOLD_LIMA) CALL LIMA_COLD(OSEDI=LSEDI_LIMA, OHHONI=LHHONI_LIMA, KSPLITG=KSPLITG, PTSTEP=2*PTSTEP, KMI=KMI,               &
-                             HFMFILE='DUMMY', HLUOUT='DUMMY', OCLOSE_OUT=.FALSE., KRR=KRR, PZZ=PDZZ, PRHODJ=PRHODJ,     &
-                             PRHODREF=PRHODREF, PEXNREF=PEXNREF, PPABST=PPABSM, PW_NU=PW_NU,                 &
-                             PTHM=PTHT, PPABSM=PPABSM,                                      &
-                             PTHT=PTHT, PRT=PRT, PSVT=PSVT,                                   &
-                             PTHS=PTHS, PRS=PRS, PSVS=PSVS,                                   &
-                             PINPRS=PINPRS, PINPRG=PINPRG, PINPRH=PINPRH, YDDDH=YDDDH, YDLDDH=YDLDDH, YDMDDH=YDMDDH)
-   !
-   IF (LWARM_LIMA .AND. LCOLD_LIMA) CALL LIMA_MIXED(OSEDI=LSEDI_LIMA, OHHONI=LHHONI_LIMA, KSPLITG=KSPLITG, PTSTEP=2*PTSTEP, KMI=KMI,     &
-                                          HFMFILE='DUMMY', HLUOUT='DUMMY', OCLOSE_OUT=.FALSE., KRR=KRR, PZZ=PDZZ, PRHODJ=PRHODJ, &
-                                          PRHODREF=PRHODREF, PEXNREF=PEXNREF, PPABST=PPABSM, PW_NU=PW_NU,             &
-                                          PTHM=PTHT, PPABSM=PPABSM,                                  &
-                                          PTHT=PTHT, PRT=PRT, PSVT=PSVT,                               &
-                                          PTHS=PTHS, PRS=PRS, PSVS=PSVS,YDDDH=YDDDH, YDLDDH=YDLDDH, YDMDDH=YDMDDH                                )
-   
-ENDIF
+CALL LIMA (D=YLDIMPHYEX, CST=CST, BUCONF=TBUCONF, TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET), &
+           PTSTEP=2*PTSTEP,                  &
+           PRHODREF=PRHODREF, PEXNREF=PEXNREF, PDZZ=PDZZ,                         &
+           PRHODJ=PRHODJ, PPABST=PPABSM,                                 &
+           NCCN=NMOD_CCN, NIFN=NMOD_IFN, NIMM=NMOD_IMM,                   &
+           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=PICEFR, PPRCFR=PPRCFR, PFPR=PFPR )
 !add ZINPRC in PINPRR
 PINPRR=PINPRR+ZINPRC
 !-------------------------------------------------------------------------------
diff --git a/src/arome/ext/aro_lima.h b/src/arome/ext/aro_lima.h
new file mode 100644
index 0000000000000000000000000000000000000000..82f32109aa6ee135e9dde8f7d75e4612e38179a6
--- /dev/null
+++ b/src/arome/ext/aro_lima.h
@@ -0,0 +1,52 @@
+INTERFACE
+SUBROUTINE ARO_LIMA(KKA,KKU,KKL,KLON,KLEV, KFDIA, KRR, KSV, KTCOUNT, KSPLITR, KSPLITG, &
+ & PTSTEP, PDZZ, PRHODJ, PRHODREF, PEXNREF,&
+ & PPABSM, PW_NU, PDTHRAD, PTHT, PRT, PSVT, &
+ & PTHS, PRS, PSVS, PEVAP,&
+ & PINPRR,PINPRS,&
+ & PINPRG,PINPRH,PFPR,&
+ & PCLDFR,PICEFR,PPRCFR,&
+ & YDDDH,YDLDDH,YDMDDH)
+USE PARKIND1  ,ONLY : JPIM     ,JPRB
+USE DDH_MIX, ONLY : TYP_DDH
+USE YOMLDDH, ONLY : TLDDH
+USE YOMMDDH, ONLY : TMDDH
+INTEGER(KIND=JPIM), INTENT(IN) :: KKA
+INTEGER(KIND=JPIM), INTENT(IN) :: KKU
+INTEGER(KIND=JPIM), INTENT(IN) :: KKL
+INTEGER(KIND=JPIM), INTENT(IN) :: KLON
+INTEGER(KIND=JPIM), INTENT(IN) :: KLEV
+INTEGER(KIND=JPIM), INTENT(IN) :: KFDIA
+INTEGER(KIND=JPIM), INTENT(IN) :: KRR
+INTEGER(KIND=JPIM), INTENT(IN) :: KSV
+INTEGER(KIND=JPIM), INTENT(IN) :: KTCOUNT
+INTEGER(KIND=JPIM), INTENT(IN) :: KSPLITR
+INTEGER(KIND=JPIM), INTENT(IN) :: KSPLITG
+REAL(KIND=JPRB), INTENT(IN) :: PTSTEP
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PDZZ
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(IN) :: PRHODJ
+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
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PTHS
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PRS
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KSV), INTENT(INOUT) :: PSVS
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PEVAP
+REAL(KIND=JPRB), DIMENSION(KLON,1), INTENT(INOUT) :: PINPRR
+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
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PICEFR
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PPRCFR
+TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
+TYPE(TLDDH), INTENT(IN) :: YDLDDH
+TYPE(TMDDH), INTENT(IN) :: YDMDDH
+END SUBROUTINE ARO_LIMA
+END INTERFACE
diff --git a/src/arome/ext/aroini_budget.F90 b/src/arome/ext/aroini_budget.F90
index bcb320205ea8ae01daef4f8937c0b80b2e2c1b18..d820e8b975411b0e3467f964992c3564b47c280f 100644
--- a/src/arome/ext/aroini_budget.F90
+++ b/src/arome/ext/aroini_budget.F90
@@ -86,7 +86,7 @@ LBUDGET_RI = LBU_ENABLE
 LBUDGET_RS = LBU_ENABLE                                                                                                               
 LBUDGET_RG = LBU_ENABLE                                                                                                               
 LBUDGET_RH = LBU_ENABLE                                                                                                               
-LBUDGET_SV = LBU_ENABLE 
+LBUDGET_SV = .FALSE. 
 !
 IF (LHOOK) CALL DR_HOOK('AROINI_BUDGET',1,ZHOOK_HANDLE)
 !
diff --git a/src/arome/ext/aroini_micro_lima.F90 b/src/arome/ext/aroini_micro_lima.F90
new file mode 100644
index 0000000000000000000000000000000000000000..9aeebbcdc8a5b55112afb2cbe2097d41c51e6ff8
--- /dev/null
+++ b/src/arome/ext/aroini_micro_lima.F90
@@ -0,0 +1,291 @@
+!     ######spl
+SUBROUTINE AROINI_MICRO_LIMA(KULOUT,KULNAM,PTSTEP,LDWARM,CMICRO,KSPLITR,KSPLITG,CCSEDIM,LDCRIAUTI,&
+              PCRIAUTI,PT0CRIAUTI,PCRIAUTC)
+
+USE PARKIND1, ONLY : JPRB
+USE YOMHOOK , ONLY : LHOOK, DR_HOOK
+!**** *INI_MICRO*   - Initialize common meso_NH MODD_ used in microphysics for AROME
+
+!     Purpose.
+!     --------
+!           Initialize 
+!           MODD_RAIN_ICE_DESCR, MODD_RAIN_ICE_PARAM and MODD_PARAM_ICE  
+!           parameters used in AROME microphysics 
+
+!**   Interface.
+!     ----------
+!        *CALL* *INI_MICRO (KULOUT,KSTEP,KSPLITR)
+
+!        Explicit arguments :
+!        --------------------
+!        KULOUT : Logical unit for the output
+!        PTSTEP  : Time step
+!        KSPLITR : Number of small time step interation for rain sedimentation 
+!        LDWARM : value assigned to LWARM_LIMA       
+
+!        Implicit arguments :
+!        --------------------
+!        
+
+!     Method.
+!     -------
+!        See documentation
+
+!     Externals.
+!     ----------
+
+!     Reference.
+!     ----------
+!        Documentation AROME 
+
+!     Author.
+!     -------
+!        B. Vie 
+
+!     Modifications.
+!     --------------
+!        Original : 17-10-09
+!     ------------------------------------------------------------------
+
+USE MODD_NSV
+USE MODD_LIMA_PRECIP_SCAVENGING_n
+USE MODD_PARAM_LIMA_COLD
+USE MODD_PARAM_LIMA
+USE MODD_PARAM_LIMA_MIXED
+USE MODD_PARAM_LIMA_WARM
+ 
+USE MODI_INI_LIMA
+USE MODI_INIT_AEROSOL_PROPERTIES
+
+USE MODD_LUNIT, ONLY : ILUOUT
+
+IMPLICIT NONE
+! -----------------------------------------------------------------------
+!     DUMMY INTEGER SCALARS
+INTEGER, INTENT (IN) :: KULOUT
+INTEGER, INTENT (IN) :: KULNAM
+REAL, INTENT (IN) :: PTSTEP
+LOGICAL, INTENT (IN) :: LDWARM
+CHARACTER(4), INTENT (IN) :: CMICRO 
+CHARACTER(4), INTENT (IN) :: CCSEDIM
+INTEGER, INTENT (OUT) :: KSPLITR
+INTEGER, INTENT (OUT) :: KSPLITG
+LOGICAL, INTENT (IN) :: LDCRIAUTI
+REAL, INTENT (IN) :: PCRIAUTI
+REAL, INTENT (IN) :: PT0CRIAUTI
+REAL, INTENT (IN) :: PCRIAUTC
+!-----------------------------------------------------------------------
+!    LOCAL VARIABLES
+REAL :: ZCRI0, ZTCRI0   
+INTEGER :: ISV 
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+! -----------------------------------------------------------------------
+!
+#include "namlima.nam.h"
+#include "posnam.intfb.h"
+!
+! -----------------------------------------------------------------------
+
+ILUOUT = KULOUT
+
+
+! -----------------------------------------------------------------------
+! lecture Valeurs par défaut pour les paramètres de la namelist LIMA
+!
+LPTSPLIT           = .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.
+CIFN_SPECIES       = 'PHILLIPS'
+CINT_MIXING        = ''
+NMOD_IMM           = 0
+NIND_SPECIE        = 1
+CPRISTINE_ICE_LIMA = 'PLAT'
+CHEVRIMED_ICE_LIMA = 'GRAU'
+XALPHAI            = 0.
+XNUI               = 0.
+XALPHAS            = 0.
+XNUS               = 0.
+XALPHAG            = 0.
+XNUG               = 0.
+XFACTNUC_DEP       = 1.
+XFACTNUC_CON       = 1.
+NPHILLIPS          = 8
+!
+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.
+CCCN_MODES         = ''
+HINI_CCN           = 'XXX'
+HTYPE_CCN          = 'X'
+XALPHAC            = 3.
+XNUC               = 1.
+XALPHAR            = 1.
+XNUR               = 2.
+XFSOLUB_CCN        = 1.
+XACTEMP_CCN        = 280.
+XAERDIFF           = 0.
+XAERHEIGHT         = 2000.
+LSCAV              = .FALSE.
+LAERO_MASS         = .FALSE.
+! -----------------------------------------------------------------------
+! lecture de la namelist LIMA
+  CALL POSNAM(KULNAM,'NAMLIMA')
+  READ(KULNAM,NAMLIMA)
+! -----------------------------------------------------------------------
+! initialisation des NSV
+  ISV = 1
+
+  NSV_LIMA_BEG = ISV
+! Nc
+  IF (NMOM_C.GE.2) THEN
+     NSV_LIMA_NC = ISV
+     ISV = ISV+1
+  END IF
+! Nr
+  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
+     ISV = ISV + NMOD_CCN
+     NSV_LIMA_CCN_ACTI = ISV
+     ISV = ISV + NMOD_CCN
+  END IF
+! Scavenging
+  IF (LSCAV .AND. LAERO_MASS) THEN
+     NSV_LIMA_SCAVMASS = ISV
+     ISV = ISV+1
+  END IF ! LSCAV
+! 
+! 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
+     ISV = ISV + NMOD_IFN
+     NSV_LIMA_IFN_NUCL = ISV
+     ISV = ISV + NMOD_IFN
+  END IF
+! IMM
+  IF (NMOD_IMM .GT. 0) THEN
+     NSV_LIMA_IMM_NUCL = ISV
+     ISV = ISV + MAX(1,NMOD_IMM)
+  END IF
+! Homogeneous freezing of CCN
+  IF (NMOM_I.GE.1 .AND. LHHONI) THEN
+     NSV_LIMA_HOM_HAZE = ISV
+     ISV = ISV + 1
+  END IF
+! End and total variables
+  ISV = ISV - 1
+  NSV_LIMA_END = ISV
+  NSV_LIMA = NSV_LIMA_END - NSV_LIMA_BEG + 1
+
+NSV=NSV_LIMA
+
+! -----------------------------------------------------------------------
+! initialisation de LIMA
+CALL INIT_AEROSOL_PROPERTIES
+! PDZMIN = 20 comme dans l'appel à INI_RAIN_ICE !
+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
+
+
+
+RETURN
+END SUBROUTINE AROINI_MICRO_LIMA
diff --git a/src/arome/ext/aroini_micro_lima.h b/src/arome/ext/aroini_micro_lima.h
new file mode 100644
index 0000000000000000000000000000000000000000..66a01c117f5fe8f3c5662f152bfd61b662faa618
--- /dev/null
+++ b/src/arome/ext/aroini_micro_lima.h
@@ -0,0 +1,18 @@
+INTERFACE
+SUBROUTINE AROINI_MICRO_LIMA(KULOUT,KULNAM,PTSTEP,LDWARM,CMICRO,KSPLITR,KSPLITG,CCSEDIM,LDCRIAUTI,&
+          PCRIAUTI,PT0CRIAUTI,PCRIAUTC)
+USE PARKIND1  ,ONLY : JPIM     ,JPRB
+INTEGER(KIND=JPIM), INTENT (IN) :: KULOUT
+INTEGER(KIND=JPIM), INTENT (IN) :: KULNAM
+REAL(KIND=JPRB), INTENT (IN) :: PTSTEP
+LOGICAL, INTENT (IN) :: LDWARM
+CHARACTER (LEN=4), INTENT (IN) :: CMICRO
+CHARACTER(4), INTENT (IN) :: CCSEDIM
+INTEGER(KIND=JPIM), INTENT (OUT) :: KSPLITR
+INTEGER(KIND=JPIM), INTENT (OUT) :: KSPLITG
+LOGICAL, INTENT (IN) :: LDCRIAUTI
+REAL(KIND=JPRB), INTENT (IN) :: PCRIAUTI
+REAL(KIND=JPRB), INTENT (IN) :: PT0CRIAUTI
+REAL(KIND=JPRB), INTENT (IN) :: PCRIAUTC
+END SUBROUTINE AROINI_MICRO_LIMA
+END INTERFACE
diff --git a/src/arome/ext/namlima.nam.h b/src/arome/ext/namlima.nam.h
new file mode 100644
index 0000000000000000000000000000000000000000..3b332acd40fa83102903b276c807f6f2c8c7d8ed
--- /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/gmkpack_ignored_files b/src/arome/gmkpack_ignored_files
index 95e773e987fa70619196587c5494177ceb27da86..2e00e3c0612ce24c313e7b1b3201b4ec5509f190 100644
--- a/src/arome/gmkpack_ignored_files
+++ b/src/arome/gmkpack_ignored_files
@@ -204,3 +204,17 @@ mpa/micro/interface/aro_subudget.h
 mpa/micro/interface/aroend_budget.h
 mpa/micro/module/modd_refaro.F90
 mpa/micro/externals/invert_vlev.F90
+phyex/micro/lima_warm.F90
+phyex/micro/lima_warm_sedimentation.F90
+phyex/micro/lima_warm_nucl.F90
+phyex/micro/lima_warm_coal.F90
+phyex/micro/lima_warm_evap.F90
+phyex/micro/lima_cold.F90
+phyex/micro/lima_cold_sedimentation.F90
+phyex/micro/lima_cold_hom_nucl.F90
+phyex/micro/lima_cold_slow_processes.F90
+phyex/micro/lima_mixed.F90
+phyex/micro/lima_mixed_slow_processes.F90
+phyex/micro/lima_mixed_fast_processes.F90
+phyex/micro/lima_adjust.F90
+phyex/micro/lima_phillips.F90
diff --git a/src/arome/micro/hypgeo.F90 b/src/arome/micro/hypgeo.F90
deleted file mode 100644
index 9976b499002059b4015ca15997e79a5b955f9d4e..0000000000000000000000000000000000000000
--- a/src/arome/micro/hypgeo.F90
+++ /dev/null
@@ -1,120 +0,0 @@
-!-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source: /home/cvsroot/MESONH_RCS/CODEMNH/hypgeo.f90,v $ $Revision: 1.6 $
-! MASDEV4_7 operators 2006/05/18 13:07:25
-!-----------------------------------------------------------------
-!####################
-MODULE MODI_HYPGEO
-!####################
-!
-INTERFACE
-!
-FUNCTION HYPGEO(PA,PB,PC,PF,PX)  RESULT(PHYPGEO)
-REAL, INTENT(IN)                                  :: PA,PB,PC,PF
-REAL, INTENT(IN)                                  :: PX
-REAL                                              :: PHYPGEO
-END FUNCTION HYPGEO
-!
-END INTERFACE
-!
-END MODULE MODI_HYPGEO
-!     #############################################
-      FUNCTION HYPGEO(PA,PB,PC,PF,PX)  RESULT(PHYPGEO)
-!     #############################################
-!
-!
-!!****  *HYPGEO* -  hypergeometric  function
-!!
-!!
-!!    PURPOSE
-!!    -------
-!       The purpose of this function is to compute the hypergeometric
-!!   function of its argument.
-!!
-!!                             
-!!                          A*B        (A+1)A*(B+1)B   X^2           
-!!    HYPGEO(A,B,C,X)= 1 + ----- * X + ------------- * --- + ... +
-!!                           C            (C+1)C        2
-!!
-!!                          (A+n)...A*(B+n)...B     X^n
-!!                         --------------------- * ----- + ... ...
-!!                               (C+n)...C           n!
-!!
-!!**  METHOD
-!!    ------
-!!
-!!    EXTERNAL
-!!    --------
-!!    HYPSER  
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!    REFERENCE
-!!    ---------
-!!      Press, Teukolsky, Vetterling and Flannery: Numerical Recipes, 272
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!         Jean-Martial Cohard *LA/OMP*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original     31/12/96
-!
-!------------------------------------------------------------------------------
-!
-!*       0. DECLARATIONS
-!
-!
-USE MODI_GAMMA
-USE MODI_HYPSER
-!
-IMPLICIT NONE
-!
-!*       0.1 declarations of arguments and result
-!
-REAL, INTENT(IN)                     :: PA,PB,PC,PF
-REAL, INTENT(IN)                     :: PX
-REAL                                 :: PHYPGEO
-!
-!*       0.2 declarations of local variables
-!
-!
-INTEGER                              :: JN
-INTEGER                              :: ITMAX=100
-REAL                                 :: ZEPS,ZTEMP
-REAL                                 :: ZFPMIN=1.E-30
-REAL                                 :: ZXH
-REAL                                 :: ZX0,ZX1,ZZA,ZZB,ZZC,ZZD,Y(2)
-!
-!------------------------------------------------------------------------------
-!
-!
-ZEPS = 2.E-2
-ZXH = PF * PX**2.0
-IF (ZXH.LT.(1-ZEPS)) THEN
-  CALL HYPSER(PA,PB,PC,-ZXH,PHYPGEO)
-ELSE IF (ZXH.GT.(1.+ZEPS)) THEN
-  ZXH = 1./ZXH
-  CALL HYPSER(PA,PA-PC+1.,PA-PB+1.,-ZXH,PHYPGEO)
-  PHYPGEO = PHYPGEO*ZXH**(PA)*                         &
-           (GAMMA(PC)*GAMMA(PB-PA)/(GAMMA(PB)*GAMMA(PC-PA)))
-  CALL HYPSER(PB,PB-PC+1.,PB-PA+1.,-ZXH,ZTEMP)
-  PHYPGEO = PHYPGEO+ZTEMP*ZXH**(PB)*                         &
-           (GAMMA(PC)*GAMMA(PA-PB)/(GAMMA(PA)*GAMMA(PC-PB)))
-ELSE
-  ZX0 = (1.-ZEPS)
-  ZX1 = 1./(1.+ZEPS)
-  CALL HYPSER(PA,PA-PC+1.,PA-PB+1.,-ZX1,PHYPGEO)
-  PHYPGEO = PHYPGEO*ZX1**(PA)*                         &
-           (GAMMA(PC)*GAMMA(PB-PA)/(GAMMA(PB)*GAMMA(PC-PA)))
-  CALL HYPSER(PB,PB-PC+1.,PB-PA+1.,-ZX1,ZTEMP)
-  PHYPGEO = PHYPGEO+ZTEMP*ZX1**(PB)*                         &
-           (GAMMA(PC)*GAMMA(PA-PB)/(GAMMA(PA)*GAMMA(PC-PB)))
-  CALL HYPSER(PA,PB,PC,-ZX0,ZTEMP)
-  PHYPGEO = ZTEMP + (ZXH-ZX0)*(PHYPGEO-ZTEMP)/(2.*ZEPS)
-ENDIF
-END
diff --git a/src/arome/micro/hypser.F90 b/src/arome/micro/hypser.F90
deleted file mode 100644
index 28a15f8eb143135fe6bc96b3936292be2d6a7b71..0000000000000000000000000000000000000000
--- a/src/arome/micro/hypser.F90
+++ /dev/null
@@ -1,118 +0,0 @@
-!-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source: /home/cvsroot/MESONH_RCS/CODEMNH/hypser.f90,v $ $Revision: 1.7 $
-! MASDEV4_7 operators 2006/05/18 13:07:25
-!-----------------------------------------------------------------
-!####################
-MODULE MODI_HYPSER
-!####################
-!
-INTERFACE
-!
-SUBROUTINE HYPSER(PA,PB,PC,PX,PHYP)  
-REAL, INTENT(IN)                                  :: PA,PB,PC
-REAL, INTENT(IN)                                  :: PX
-REAL, INTENT(INOUT)                               :: PHYP
-END SUBROUTINE HYPSER
-!
-END INTERFACE
-!
-END MODULE MODI_HYPSER
-!     #############################################
-      SUBROUTINE HYPSER(PA,PB,PC,PX,PHYP)
-!     #############################################
-!
-!
-!!****  *HYPSER* -  hypergeometric  function
-!!
-!!
-!!    PURPOSE
-!!    -------
-!       The purpose of this function is to compute the hypergeometric
-!!   function of its argument.
-!!
-!!
-!!                          A*B        (A+1)A*(B+1)B   X^2
-!!    HYPSER(A,B,C,X)= 1 + ----- * X + ------------- * --- + ... +
-!!                           C            (C+1)C        2
-!!
-!!                          (A+n)...A*(B+n)...B     X^n
-!!                         --------------------- * ----- + ... ...
-!!                               (C+n)...C           n!
-!!
-!!**  METHOD
-!!    ------
-!!
-!!    EXTERNAL
-!!    --------
-!!    HYPSER
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!    REFERENCE
-!!    ---------
-!!      Press, Teukolsky, Vetterling and Flannery: Numerical Recipes, 272
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!         Jean-Martial Cohard *LA/OMP*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original     31/12/96
-!
-!------------------------------------------------------------------------------
-!
-!*       0. DECLARATIONS
-!
-!
-IMPLICIT NONE
-!
-!*       0.1 declarations of arguments and result
-!
-REAL, INTENT(IN)                                  :: PA,PB,PC
-REAL, INTENT(IN)                                  :: PX
-REAL, INTENT(INOUT)                               :: PHYP
-!
-!
-!
-!*       0.2 declarations of local variables
-!
-INTEGER                                           :: JN,JFLAG
-REAL                                              :: ZXH,ZZA,ZZB,ZZC,ZFAC,ZTEMP
-REAL                                              :: ZPREC
-!
-!------------------------------------------------------------------------------
-!
-ZPREC = 1.0E-04
-ZXH = PX
-ZFAC = 1.0
-ZTEMP = ZFAC
-ZZA = PA
-ZZB = PB
-ZZC = PC
-JFLAG = 0
-SERIE: DO JN = 1,5000
-         ZFAC = ZFAC * ZZA * ZZB / ZZC
-         ZFAC = ZFAC * ZXH / FLOAT(JN)
-         PHYP = ZTEMP + ZFAC
-         IF (ABS(PHYP-ZTEMP).LE.ZPREC) THEN
-	   JFLAG = 1
-	   EXIT SERIE
-         END IF
-  ZTEMP = PHYP
-  ZZA = ZZA + 1.
-  ZZB = ZZB + 1.
-  ZZC = ZZC + 1.
-END DO SERIE
-IF (JFLAG == 0) THEN
-  PRINT *,'CONVERGENCE FAILURE IN HYPSER'
-!callabortstop
-CALL ABORT
-  STOP
-END IF
-!
-END
diff --git a/src/arome/micro/ini_lima.F90 b/src/arome/micro/ini_lima.F90
deleted file mode 100644
index e6a94ef38da0ac05e7ebb3c6ec4986457cdd4057..0000000000000000000000000000000000000000
--- a/src/arome/micro/ini_lima.F90
+++ /dev/null
@@ -1,156 +0,0 @@
-!      ####################
-       MODULE MODI_INI_LIMA
-!      ####################
-!
-INTERFACE
-      SUBROUTINE INI_LIMA (KULOUT, PTSTEP, PDZMIN, KSPLITR, KSPLITG)
-!
-INTEGER,                 INTENT(IN) :: KULOUT    ! output logical unit number
-INTEGER,                 INTENT(OUT):: KSPLITR   ! Number of small time step
-                                                 ! integration for  rain
-                                                 ! sedimendation
-INTEGER,                 INTENT(OUT):: KSPLITG   ! Number of small time step
-                                                 ! integration for graupel
-                                                 ! sedimendation
-REAL,                    INTENT(IN) :: PTSTEP    ! Effective Time step 
-REAL,                    INTENT(IN) :: PDZMIN    ! minimun vertical mesh size
-!
-END SUBROUTINE INI_LIMA
-!
-END INTERFACE
-!
-END MODULE MODI_INI_LIMA
-!     ######################################################
-      SUBROUTINE INI_LIMA (KULOUT, PTSTEP, PDZMIN, KSPLITR, KSPLITG)
-!     ######################################################
-!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to initialize the constants used in the 
-!!    microphysical scheme LIMA. 
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_CST
-
-USE MODD_PARAM_LIMA
-USE MODD_PARAMETERS
-USE MODD_LUNIT
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-!
-INTEGER,                 INTENT(IN) :: KULOUT    ! output logical unit number
-INTEGER,                 INTENT(OUT):: KSPLITR   ! Number of small time step
-                                                 ! integration for  rain
-                                                 ! sedimendation
-INTEGER,                 INTENT(OUT):: KSPLITG   ! Number of small time step
-                                                 ! integration for graupel or hail
-                                                 ! sedimendation
-REAL,                    INTENT(IN) :: PTSTEP    ! Effective Time step 
-REAL,                    INTENT(IN) :: PDZMIN    ! minimun vertical mesh size
-!
-!*       0.2   Declarations of local variables :
-!
-REAL     :: ZT      ! Work variable
-REAL     :: ZVTRMAX
-!
-INTEGER  :: ILUOUT0 ! Logical unit number for output-listing
-INTEGER  :: IRESP   ! Return code of FM-routines
-!  
-!-------------------------------------------------------------------------------
-!
-!
-!*       1.     INIT OUTPUT LISTING, COMPUTE KSPLITR AND KSPLITG
-!   	        ------------------------------------------------
-!
-!
-! Init output listing
-CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
-!
-!
-! KSPLITR
-ZVTRMAX = 30.         ! Maximum rain drop fall speed
-!
-KSPLITR = 1
-SPLITR : DO
-   ZT = PTSTEP / FLOAT(KSPLITR)
-   IF ( ZT * ZVTRMAX / PDZMIN < 1.0) EXIT SPLITR
-   KSPLITR = KSPLITR + 1
-END DO SPLITR
-!
-!
-! KSPLITG
-ZVTRMAX = 30.                          
-IF( LHAIL_LIMA ) THEN
-   ZVTRMAX = 60. ! Hail case 
-END IF
-!
-KSPLITG = 1
-SPLITG : DO
-   ZT = 2.* PTSTEP / FLOAT(KSPLITG)
-   IF ( ZT * ZVTRMAX / PDZMIN .LT. 1.) EXIT SPLITG
-   KSPLITG = KSPLITG + 1
-END DO SPLITG
-!
-!
-!
-IF (ALLOCATED(XRTMIN)) RETURN    ! In case of nesting microphysics, constants of
-                                 ! MODD_RAIN_C2R2_PARAM are computed only once.
-!
-!
-! Set bounds for mixing ratios and concentrations
-ALLOCATE( XRTMIN(7) )
-XRTMIN(1) = 1.0E-20   ! rv
-XRTMIN(2) = 1.0E-20   ! rc
-!XRTMIN(3) = 1.0E-20   ! rr
-XRTMIN(3) = 1.0E-17   ! rr
-XRTMIN(4) = 1.0E-20   ! ri
-XRTMIN(5) = 1.0E-15   ! rs
-XRTMIN(6) = 1.0E-15   ! rg
-XRTMIN(7) = 1.0E-15   ! rh
-ALLOCATE( XCTMIN(7) )
-XCTMIN(1) = 1.0       ! Not used
-XCTMIN(2) = 1.0E+4    ! Nc
-!XCTMIN(3) = 1.0E+1    ! Nr
-XCTMIN(3) = 1.0E-3    ! Nr
-XCTMIN(4) = 1.0E-3    ! Ni
-XCTMIN(5) = 1.0E-3    ! Not used
-XCTMIN(6) = 1.0E-3    ! Not used
-XCTMIN(7) = 1.0E-3    ! Not used
-!
-!
-! Air density fall speed correction
-XCEXVT = 0.4
-!
-!------------------------------------------------------------------------------
-!
-!
-!
-!*       2.     DEFINE SPECIES CHARACTERISTICS AND PROCESSES CONSTANTS
-!   	        ------------------------------------------------------
-!
-!
-CALL INI_LIMA_WARM(KULOUT, PTSTEP, PDZMIN)
-!
-CALL INI_LIMA_COLD_MIXED(KULOUT, PTSTEP, PDZMIN)
-!
-!------------------------------------------------------------------------------
-!
-END SUBROUTINE INI_LIMA
diff --git a/src/arome/micro/ini_lima_cold_mixed.F90 b/src/arome/micro/ini_lima_cold_mixed.F90
deleted file mode 100644
index ba7e13302bb01192a51c354235b9e9d6e45648d4..0000000000000000000000000000000000000000
--- a/src/arome/micro/ini_lima_cold_mixed.F90
+++ /dev/null
@@ -1,1309 +0,0 @@
-!      ###############################
-       MODULE MODI_INI_LIMA_COLD_MIXED
-!      ###############################
-!
-INTERFACE
-      SUBROUTINE INI_LIMA_COLD_MIXED (KULOUT, PTSTEP, PDZMIN)
-!
-INTEGER,                 INTENT(IN) :: KULOUT    ! output logical unit number
-REAL,                    INTENT(IN) :: PTSTEP    ! Effective Time step 
-REAL,                    INTENT(IN) :: PDZMIN    ! minimun vertical mesh size
-!
-END SUBROUTINE INI_LIMA_COLD_MIXED
-!
-END INTERFACE
-!
-END MODULE MODI_INI_LIMA_COLD_MIXED
-!     ###############################################
-      SUBROUTINE INI_LIMA_COLD_MIXED (KULOUT, PTSTEP, PDZMIN)
-!     ###############################################
-!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to initialize the constants used in the 
-!!    microphysical scheme LIMA for the cold and mixed phase variables
-!!    and processes. 
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_CST
-
-USE MODD_PARAM_LIMA
-USE MODD_PARAM_LIMA_WARM
-USE MODD_PARAM_LIMA_COLD
-USE MODD_PARAM_LIMA_MIXED
-USE MODD_PARAMETERS
-USE MODD_LUNIT
-!
-USE MODI_LIMA_FUNCTIONS
-USE MODI_GAMMA
-USE MODI_GAMMA_INC
-USE MODE_RRCOLSS, ONLY: RRCOLSS
-USE MODE_RZCOLX, ONLY: RZCOLX
-USE MODE_RSCOLRG, ONLY: RSCOLRG
-USE MODE_READ_XKER_RACCS, ONLY: READ_XKER_RACCS
-USE MODE_READ_XKER_SDRYG, ONLY: READ_XKER_SDRYG
-USE MODE_READ_XKER_RDRYG, ONLY: READ_XKER_RDRYG
-USE MODE_READ_XKER_SWETH, ONLY: READ_XKER_SWETH
-USE MODE_READ_XKER_GWETH, ONLY: READ_XKER_GWETH
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-INTEGER,                 INTENT(IN) :: KULOUT    ! output logical unit number
-REAL,                    INTENT(IN) :: PTSTEP    ! Effective Time step 
-REAL,                    INTENT(IN) :: PDZMIN    ! minimun vertical mesh size
-!
-!*       0.2   Declarations of local variables :
-!
-INTEGER :: IKB                ! Coordinates of the first  physical 
-                              ! points along z
-INTEGER :: J1,J2              ! Internal loop indexes
-!
-REAL, DIMENSION(8)  :: ZGAMI  ! parameters involving various moments
-REAL, DIMENSION(2)  :: ZGAMS  ! of the generalized gamma law
-!
-REAL :: ZT                    ! Work variable
-REAL :: ZVTRMAX               ! Raindrop maximal fall velocity
-REAL :: ZRHO00                ! Surface reference air density
-REAL :: ZRATE                 ! Geometrical growth of Lbda in the tabulated
-                              ! functions and kernels
-REAL :: ZBOUND                ! XDCSLIM*Lbda_s: upper bound for the partial
-                              ! integration of the riming rate of the aggregates
-REAL :: ZEGS, ZEGR, ZEHS, ZEHG! Bulk collection efficiencies
-!
-INTEGER :: IND                ! Number of interval to integrate the kernels
-REAL :: ZESR                  ! Mean efficiency of rain-aggregate collection
-REAL :: ZFDINFTY              ! Factor used to define the "infinite" diameter
-!
-!
-LOGICAL  :: GFLAG   ! Logical flag for printing the constatnts on the output
-                    ! listing
-REAL     :: ZCONC_MAX ! Maximal concentration for snow
-REAL     :: ZFACT_NUCL! Amplification factor for the minimal ice concentration
-!  
-INTEGER  :: KND
-INTEGER  :: KACCLBDAS,KACCLBDAR,KDRYLBDAG,KDRYLBDAS,KDRYLBDAR
-REAL     :: PALPHAR,PALPHAS,PALPHAG,PALPHAH
-REAL     :: PNUR,PNUS,PNUG,PNUH
-REAL     :: PBR,PBS,PBG,PBH
-REAL     :: PCR,PCS,PCG,PCH
-REAL     :: PDR,PDS,PFVELOS,PDG,PDH
-REAL     :: PESR,PEGS,PEGR,PEHS,PEHG
-REAL     :: PFDINFTY
-REAL     :: PACCLBDAS_MAX,PACCLBDAR_MAX,PACCLBDAS_MIN,PACCLBDAR_MIN
-REAL     :: PDRYLBDAG_MAX,PDRYLBDAS_MAX,PDRYLBDAG_MIN,PDRYLBDAS_MIN
-REAL     :: PDRYLBDAR_MAX,PDRYLBDAR_MIN
-REAL     :: PWETLBDAS_MAX,PWETLBDAG_MAX,PWETLBDAS_MIN,PWETLBDAG_MIN
-REAL     :: PWETLBDAH_MAX,PWETLBDAH_MIN
-INTEGER  :: KWETLBDAS,KWETLBDAG,KWETLBDAH
-!
-REAL     :: ZFAC_ZRNIC ! Zrnic factor used to decrease Long Kernels
-!  
-!-------------------------------------------------------------------------------
-!
-!
-!*       1.     CHARACTERISTICS OF THE SPECIES
-!   	        ------------------------------
-!
-!
-!*       1.2    Ice crystal characteristics
-!
-SELECT CASE (CPRISTINE_ICE_LIMA)
-  CASE('PLAT')
-    XAI = 0.82      ! Plates
-    XBI = 2.5       ! Plates 
-    XC_I = 747.     ! Plates
-    XDI = 1.0       ! Plates
-    XC1I = 1./XPI   ! Plates
-  CASE('COLU')
-    XAI = 2.14E-3   ! Columns
-    XBI = 1.7       ! Columns
-    XC_I = 1.96E5   ! Columns
-    XDI = 1.585     ! Columns
-    XC1I = 0.8      ! Columns 
-  CASE('BURO')
-    XAI = 44.0      ! Bullet rosettes
-    XBI = 3.0       ! Bullet rosettes
-    XC_I = 4.E5     ! Bullet rosettes
-    XDI = 1.663     ! Bullet rosettes
-    XC1I = 0.5      ! Bullet rosettes
-END SELECT
-!
-!  Note that XCCI=N_i (a locally predicted value) and XCXI=0.0, implicitly
-!
-XF0I = 1.00
-! Correction BVIE XF2I from Pruppacher 1997 eq 13-88
-!XF2I = 0.103
-XF2I = 0.14
-XF0IS = 0.86
-XF1IS = 0.28
-!
-!*       1.3    Snowflakes/aggregates characteristics
-!
-XAS = 0.02
-XBS = 1.9
-XCS = 5.
-XDS = 0.27
-!
-XCCS = 5.0
-XCXS = 1.0
-!
-XF0S = 0.86
-XF1S = 0.28
-!
-XC1S = 1./XPI
-!
-!*       1.4    Graupel characteristics
-!
-XAG = 19.6  ! Lump graupel case
-XBG = 2.8   ! Lump graupel case
-XCG = 122.  ! Lump graupel case
-XDG = 0.66  ! Lump graupel case
-!
-XCCG = 5.E5
-XCXG = -0.5
-! XCCG = 4.E4 ! Test of Ziegler (1988)
-! XCXG = -1.0 ! Test of Ziegler (1988)
-!
-XF0G = 0.86
-XF1G = 0.28
-!
-XC1G = 1./2.
-!
-!*       2.5    Hailstone characteristics
-!
-!
-XAH = 470.
-XBH = 3.0
-XCH = 201.
-XDH = 0.64
-!
-!XCCH = 5.E-4
-!XCXH = 2.0
-!!!!!!!!!!!!
-   XCCH = 4.E4 ! Test of Ziegler (1988)
-   XCXH = -1.0 ! Test of Ziegler (1988)
-!!!    XCCH = 5.E5 ! Graupel_like
-!!!    XCXH = -0.5 ! Graupel_like
-!!!!!!!!!!!!
-!
-XF0H = 0.86
-XF1H = 0.28
-!
-XC1H = 1./2.
-!  
-!-------------------------------------------------------------------------------
-!
-!
-!*       2.     DIMENSIONAL DISTRIBUTIONS OF THE SPECIES
-!   	        ----------------------------------------
-!
-!
-!*       2.1    Ice, snow, graupel and hail distribution
-!
-!
-XALPHAI = 3.0  ! Gamma law for the ice crystal volume
-XNUI    = 3.0  ! Gamma law with little dispersion
-!
-XALPHAS = 1.0  ! Exponential law
-XNUS    = 1.0  ! Exponential law
-!
-XALPHAG = 1.0  ! Exponential law
-XNUG    = 1.0  ! Exponential law
-!
-XALPHAH = 1.0  ! Gamma law
-XNUH    = 8.0  ! Gamma law with little dispersion
-!
-!*       2.2    Constants for shape parameter
-!
-XLBEXI = 1.0/XBI
-XLBI   = XAI*MOMG(XALPHAI,XNUI,XBI)
-!
-XLBEXS = 1.0/(XCXS-XBS)
-XLBS   = ( XAS*XCCS*MOMG(XALPHAS,XNUS,XBS) )**(-XLBEXS)
-!
-XLBEXG = 1.0/(XCXG-XBG)
-XLBG   = ( XAG*XCCG*MOMG(XALPHAG,XNUG,XBG))**(-XLBEXG)
-!
-XLBEXH = 1.0/(XCXH-XBH)
-XLBH   = ( XAH*XCCH*MOMG(XALPHAH,XNUH,XBH) )**(-XLBEXH)
-!
-GFLAG = .TRUE.
-IF (GFLAG) THEN
-  WRITE(UNIT=KULOUT,FMT='("      Shape Parameters")')
-  WRITE(UNIT=KULOUT,FMT='(" XLBEXI =",E13.6," XLBI =",E13.6)') XLBEXI,XLBI
-  WRITE(UNIT=KULOUT,FMT='(" XLBEXS =",E13.6," XLBS =",E13.6)') XLBEXS,XLBS
-  WRITE(UNIT=KULOUT,FMT='(" XLBEXG =",E13.6," XLBG =",E13.6)') XLBEXG,XLBG
-  WRITE(UNIT=KULOUT,FMT='(" XLBEXH =",E13.6," XLBH =",E13.6)') XLBEXH,XLBH
-END IF
-!
-XLBDAS_MAX = 100000.0
-XLBDAG_MAX = 100000.0
-!
-ZCONC_MAX  = 1.E6 ! Maximal concentration for falling particules set to 1 per cc
-XLBDAS_MAX = ( ZCONC_MAX/XCCS )**(1./XCXS) 
-!  
-!-------------------------------------------------------------------------------
-!
-!
-!*       3.     CONSTANTS FOR THE SEDIMENTATION
-!   	        -------------------------------
-!
-!
-!*       3.1    Exponent of the fall-speed air density correction
-!
-IKB = 1 + JPVEXT
-! Correction
-! ZRHO00 = XP00/(XRD*XTHVREFZ(IKB))
-ZRHO00 = 1.2041 ! at P=1013.25hPa and T=20°C
-!
-!*       3.2    Constants for sedimentation
-!
-!! XEXRSEDI = (XBI+XDI)/XBI
-!! XEXCSEDI = 1.0-XEXRSEDI
-!! XFSEDI   = (4.*XPI*900.)**(-XEXCSEDI) *                         &
-!!            XC_I*XAI*MOMG(XALPHAI,XNUI,XBI+XDI) *                &
-!!            ((XAI*MOMG(XALPHAI,XNUI,XBI)))**(-XEXRSEDI) *        &
-!!            (ZRHO00)**XCEXVT
-!! !
-!! !  Computations made for Columns
-!! !
-!! XEXRSEDI = 1.9324
-!! XEXCSEDI =-0.9324
-!! XFSEDI   = 3.89745E11*MOMG(XALPHAI,XNUI,3.285)*                          &
-!!                       MOMG(XALPHAI,XNUI,1.7)**(-XEXRSEDI)*(ZRHO00)**XCEXVT
-!! XEXCSEDI =-0.9324*3.0
-!! WRITE (KULOUT,FMT=*)' PRISTINE ICE SEDIMENTATION for columns XFSEDI=',XFSEDI
-!
-!
-XFSEDRI  = XC_I*GAMMA_X0D(XNUI+(XDI+XBI)/XALPHAI)/GAMMA_X0D(XNUI+XBI/XALPHAI)*     &
-            (ZRHO00)**XCEXVT
-XFSEDCI  = XC_I*GAMMA_X0D(XNUI+XDI/XALPHAI)/GAMMA_X0D(XNUI)*     &
-            (ZRHO00)**XCEXVT
-!
-XEXSEDS = (XBS+XDS-XCXS)/(XBS-XCXS)
-XFSEDS  = XCS*XAS*XCCS*MOMG(XALPHAS,XNUS,XBS+XDS)*                         &
-            (XAS*XCCS*MOMG(XALPHAS,XNUS,XBS))**(-XEXSEDS)*(ZRHO00)**XCEXVT
-!
-XEXSEDG = (XBG+XDG-XCXG)/(XBG-XCXG)
-XFSEDG  = XCG*XAG*XCCG*MOMG(XALPHAG,XNUG,XBG+XDG)*                         &
-            (XAG*XCCG*MOMG(XALPHAG,XNUG,XBG))**(-XEXSEDG)*(ZRHO00)**XCEXVT
-!
-XEXSEDH = (XBH+XDH-XCXH)/(XBH-XCXH)
-XFSEDH  = XCH*XAH*XCCH*MOMG(XALPHAH,XNUH,XBH+XDH)*                         &
-            (XAH*XCCH*MOMG(XALPHAH,XNUH,XBH))**(-XEXSEDH)*(ZRHO00)**XCEXVT
-!  
-!-------------------------------------------------------------------------------
-!
-!
-!*       4.     CONSTANTS FOR HETEROGENEOUS NUCLEATION
-!   	        --------------------------------------
-!
-!
-!                 ***************
-!*          4.1   LIMA_NUCLEATION
-!                 ***************   
-!*               4.1.1  Constants for the computation of the number concentration
-!                       of active IN 
-!
-XRHO_CFDC  = 0.76 
-!
-XGAMMA     = 2.
-!
-IF (NPHILLIPS == 13) THEN
-   XAREA1(1)  = 2.0E-6    !DM1
-   XAREA1(2)  = XAREA1(1) !DM2
-   XAREA1(3)  = 1.0E-7    !BC
-   XAREA1(4)  = 8.9E-7    !BIO
-ELSE IF (NPHILLIPS == 8) THEN
-   XAREA1(1)  = 2.0E-6    !DM1
-   XAREA1(2)  = XAREA1(1) !DM2
-   XAREA1(3)  = 2.7E-7    !BC
-   XAREA1(4)  = 9.1E-7    !BIO
-ELSE
-   print *, "NPHILLIPS n'est pas égal à 8 ou 13" 
-   STOP
-END IF
-!
-!*               4.1.2  Constants for the computation of H_X (the fraction-redu-
-!                       cing IN activity at low S_i and warm T) for X={DM1,DM2,BC,BIO} 
-!                       
-!
-IF (NPHILLIPS == 13) THEN
-   XDT0(1)   =   5. +273.15 !DM1
-   XDT0(2)   =   5. +273.15 !DM2
-   XDT0(3)   =  10. +273.15 !BC
-   XDT0(4)   =   5. +273.15 !BIOO
-!
-   XT0(1) = -40. +273.15 !DM1
-   XT0(2) = XT0(1)       !DM2
-   XT0(3) = -50. +273.15 !BC
-   XT0(4) = -20. +273.15 !BIO
-!
-   XSW0   = 0.97
-!
-   XDSI0(1)  = 0.1 !DM1
-   XDSI0(2)  = 0.1 !DM2
-   XDSI0(3)  = 0.1 !BC
-   XDSI0(4)  = 0.2 !BIO
-!
-   XH(1) = 0.15          !DM1
-   XH(2) = 0.15          !DM2
-   XH(3) = 0.            !BC
-   XH(4) = 0.            !O
-!
-   XTX1(1) = -30. +273.15 !DM1
-   XTX1(2) = XTX1(1)      !DM2
-   XTX1(3) = -25. +273.15 !BC
-   XTX1(4) =  -5. +273.15 !BIO
-!
-   XTX2(1) = -10. +273.15 !DM1
-   XTX2(2) = XTX2(1)      !DM2
-   XTX2(3) = -15. +273.15 !BC
-   XTX2(4) =  -2. +273.15 !BIO
-ELSE IF (NPHILLIPS == 8) THEN
-   XDT0(1)   =   5. +273.15 !DM1
-   XDT0(2)   =   5. +273.15 !DM2
-   XDT0(3)   =   5. +273.15 !BC
-   XDT0(4)   =   5. +273.15 !O
-!
-   XT0(1) = -40. +273.15 !DM1
-   XT0(2) = XT0(1)       !DM2
-   XT0(3) = -50. +273.15 !BC
-   XT0(4) = -50. +273.15 !BIO
-!
-   XSW0   = 0.97
-!
-   XDSI0(1)  = 0.1 !DM1
-   XDSI0(2)  = 0.1 !DM2
-   XDSI0(3)  = 0.1 !BC
-   XDSI0(4)  = 0.1 !BIO
-!
-   XH(1) = 0.15          !DM1
-   XH(2) = 0.15          !DM2
-   XH(3) = 0.            !BC
-   XH(4) = 0.            !O
-!
-   XTX1(1) =  -5. +273.15 !DM1
-   XTX1(2) = XTX1(1)      !DM2
-   XTX1(3) =  -5. +273.15 !BC
-   XTX1(4) =  -5. +273.15 !BIO
-!
-   XTX2(1) =  -2. +273.15 !DM1
-   XTX2(2) = XTX2(1)      !DM2
-   XTX2(3) =  -2. +273.15 !BC
-   XTX2(4) =  -2. +273.15 !BIO
-END IF
-!
-!*               4.1.3  Constants for the computation of the Gauss Hermitte 
-!                       quadrature method used for the integration of the total
-!                       crystal number over T>-35°C
-!
-NDIAM = 70
-!
-ALLOCATE(XABSCISS(NDIAM))
-ALLOCATE(XWEIGHT (NDIAM))
-!
-CALL GAUHER(XABSCISS, XWEIGHT, NDIAM)
-!
-!                 ***************** 
-!*          4.2   MEYERS NUCLEATION
-!                 ***************** 
-!
-ZFACT_NUCL =  1.0    ! Plates, Columns and Bullet rosettes
-!
-!*               5.2.1  Constants for nucleation from ice nuclei
-!
-XNUC_DEP  = XFACTNUC_DEP*1000.*ZFACT_NUCL
-XEXSI_DEP = 12.96E-2
-XEX_DEP   = -0.639
-!
-XNUC_CON   = XFACTNUC_CON*1000.*ZFACT_NUCL
-XEXTT_CON  = -0.262
-XEX_CON    = -2.8
-!
-XMNU0 = 6.88E-13
-!
-IF (LMEYERS_LIMA) THEN
-  WRITE(UNIT=KULOUT,FMT='("      Heterogeneous nucleation")')
-  WRITE(UNIT=KULOUT,FMT='(" XNUC_DEP=",E13.6," XEXSI=",E13.6," XEX=",E13.6)') &
-                                                      XNUC_DEP,XEXSI_DEP,XEX_DEP
-  WRITE(UNIT=KULOUT,FMT='(" XNUC_CON=",E13.6," XEXTT=",E13.6," XEX=",E13.6)') &
-                                                      XNUC_CON,XEXTT_CON,XEX_CON
-  WRITE(UNIT=KULOUT,FMT='(" mass of embryo XMNU0=",E13.6)') XMNU0
-END IF
-!  
-!-------------------------------------------------------------------------------
-!
-!
-!*       5.     CONSTANTS FOR THE SLOW COLD PROCESSES
-!   	        -------------------------------------
-!
-!
-!*       5.1.2  Constants for homogeneous nucleation from haze particules
-!
-XRHOI_HONH = 925.0
-XCEXP_DIFVAP_HONH = 1.94
-XCOEF_DIFVAP_HONH = (2.0*XPI)*0.211E-4*XP00/XTT**XCEXP_DIFVAP_HONH
-XCRITSAT1_HONH = 2.583
-XCRITSAT2_HONH = 207.83
-XTMIN_HONH = 180.0
-XTMAX_HONH = 240.0
-XDLNJODT1_HONH = 4.37
-XDLNJODT2_HONH = 0.03
-XC1_HONH = 100.0
-XC2_HONH = 22.6
-XC3_HONH = 0.1
-XRCOEF_HONH = (XPI/6.0)*XRHOI_HONH
-!
-!
-!*       5.1.3  Constants for homogeneous nucleation from cloud droplets
-!
-XTEXP1_HONC = -606.3952*LOG(10.0)
-XTEXP2_HONC =  -52.6611*LOG(10.0)
-XTEXP3_HONC =   -1.7439*LOG(10.0)
-XTEXP4_HONC =   -0.0265*LOG(10.0)
-XTEXP5_HONC = -1.536E-4*LOG(10.0)
-IF (XALPHAC == 3.0) THEN
-  XC_HONC   = XPI/6.0
-  XR_HONC   = XPI/6.0
-ELSE
-  WRITE(UNIT=KULOUT,FMT='("      Homogeneous nucleation")')
-  WRITE(UNIT=KULOUT,FMT='(" XALPHAC=",E13.6," IS NOT 3.0")') XALPHAC
-  WRITE(UNIT=KULOUT,FMT='(" No algorithm yet developped in this case !")')
-  STOP
-END IF
-!
-GFLAG = .TRUE.
-IF (GFLAG) THEN
-  WRITE(UNIT=KULOUT,FMT='("      Homogeneous nucleation")')
-  WRITE(UNIT=KULOUT,FMT='(" XTEXP1_HONC=",E13.6)') XTEXP1_HONC
-  WRITE(UNIT=KULOUT,FMT='(" XTEXP2_HONC=",E13.6)') XTEXP2_HONC
-  WRITE(UNIT=KULOUT,FMT='(" XTEXP3_HONC=",E13.6)') XTEXP3_HONC
-  WRITE(UNIT=KULOUT,FMT='(" XTEXP4_HONC=",E13.6)') XTEXP4_HONC
-  WRITE(UNIT=KULOUT,FMT='(" XTEXP5_HONC=",E13.6)') XTEXP5_HONC
-  WRITE(UNIT=KULOUT,FMT='("XC_HONC=",E13.6," XR_HONC=",E13.6)') XC_HONC,XR_HONC
-END IF
-!
-!
-!*       5.2    Constants for vapor deposition on ice
-!
-XSCFAC = (0.63**(1./3.))*SQRT((ZRHO00)**XCEXVT) ! One assumes Sc=0.63
-!
-X0DEPI = (4.0*XPI)*XC1I*XF0I*MOMG(XALPHAI,XNUI,1.)
-X2DEPI = (4.0*XPI)*XC1I*XF2I*XC_I*MOMG(XALPHAI,XNUI,XDI+2.0)
-!
-! Harrington parameterization for ice to snow conversion
-!
-XDICNVS_LIM = 125.E-6  ! size in microns
-XLBDAICNVS_LIM = (50.0**(1.0/(XALPHAI)))/XDICNVS_LIM  ! ZLBDAI Limitation
-XC0DEPIS = ((4.0*XPI)/(XAI*XBI))*XC1I*XF0IS*                        &
-           (XALPHAI/GAMMA_X0D(XNUI))*XDICNVS_LIM**(1.0-XBI)
-XC1DEPIS = ((4.0*XPI)/(XAI*XBI))*XC1I*XF1IS*SQRT(XC_I)*             &
-           (XALPHAI/GAMMA_X0D(XNUI))*XDICNVS_LIM**(1.0-XBI+(XDI+1.0)/2.0)
-XR0DEPIS = XC0DEPIS *(XAI*XDICNVS_LIM**XBI)
-XR1DEPIS = XC1DEPIS *(XAI*XDICNVS_LIM**XBI)
-!
-! Harrington parameterization for snow to ice conversion
-!
-XLBDASCNVI_MAX = 6000. ! lbdas max after Field (1999)
-!
-XDSCNVI_LIM    = 125.E-6  ! size in microns
-XLBDASCNVI_LIM = (50.0**(1.0/(XALPHAS)))/XDSCNVI_LIM  ! ZLBDAS Limitation
-XC0DEPSI = ((4.0*XPI)/(XAS*XBS))*XC1S*XF0IS*                        &
-           (XALPHAS/GAMMA_X0D(XNUS))*XDSCNVI_LIM**(1.0-XBS)
-XC1DEPSI = ((4.0*XPI)/(XAS*XBS))*XC1S*XF1IS*SQRT(XCS)*             &
-           (XALPHAS/GAMMA_X0D(XNUS))*XDSCNVI_LIM**(1.0-XBS+(XDS+1.0)/2.0)
-XR0DEPSI = XC0DEPSI *(XAS*XDSCNVI_LIM**XBS)
-XR1DEPSI = XC1DEPSI *(XAS*XDSCNVI_LIM**XBS)
-!
-! Vapor deposition on snow and graupel and hail
-!
-X0DEPS = (4.0*XPI)*XCCS*XC1S*XF0S*MOMG(XALPHAS,XNUS,1.)
-X1DEPS = (4.0*XPI)*XCCS*XC1S*XF1S*SQRT(XCS)*MOMG(XALPHAS,XNUS,0.5*XDS+1.5)
-XEX0DEPS = XCXS-1.0
-XEX1DEPS = XCXS-0.5*(XDS+3.0)
-!
-X0DEPG = (4.0*XPI)*XCCG*XC1G*XF0G*MOMG(XALPHAG,XNUG,1.)
-X1DEPG = (4.0*XPI)*XCCG*XC1G*XF1G*SQRT(XCG)*MOMG(XALPHAG,XNUG,0.5*XDG+1.5)
-XEX0DEPG = XCXG-1.0
-XEX1DEPG = XCXG-0.5*(XDG+3.0)
-!
-X0DEPH = (4.0*XPI)*XCCH*XC1H*XF0H*MOMG(XALPHAH,XNUH,1.)
-X1DEPH = (4.0*XPI)*XCCH*XC1H*XF1H*SQRT(XCH)*MOMG(XALPHAH,XNUH,0.5*XDH+1.5)
-XEX0DEPH = XCXH-1.0
-XEX1DEPH = XCXH-0.5*(XDH+3.0)
-!  
-!-------------------------------------------------------------------------------
-!
-!
-!*       6.     CONSTANTS FOR THE COALESCENCE PROCESSES
-!   	        ---------------------------------------
-!
-!
-!*       6.0    Precalculation of the gamma function momentum
-!
-ZGAMI(1) = GAMMA_X0D(XNUI)
-ZGAMI(2) = MOMG(XALPHAI,XNUI,3.)
-ZGAMI(3) = MOMG(XALPHAI,XNUI,6.)
-ZGAMI(4) = ZGAMI(3)-ZGAMI(2)**2  ! useful for Sig_I
-ZGAMI(5) = MOMG(XALPHAI,XNUI,9.)
-ZGAMI(6) = MOMG(XALPHAI,XNUI,3.+XBI)
-ZGAMI(7) = MOMG(XALPHAI,XNUI,XBI)
-ZGAMI(8) = MOMG(XALPHAI,XNUI,3.)/MOMG(XALPHAI,XNUI,2.)
-!
-ZGAMS(1) = GAMMA_X0D(XNUS)
-ZGAMS(2) = MOMG(XALPHAS,XNUS,3.)
-!
-!
-!*       6.1    Csts for the coalescence processes
-!
-ZFAC_ZRNIC = 0.1
-XKER_ZRNIC_A1 = 2.59E15*ZFAC_ZRNIC**2! From Long  a1=9.44E9 cm-3 
-                                     ! so XKERA1= 9.44E9*1E6*(PI/6)**2
-XKER_ZRNIC_A2 = 3.03E3*ZFAC_ZRNIC    ! From Long  a2=5.78E3      
-                                     ! so XKERA2= 5.78E3*    (PI/6)
-!
-!
-!*       6.2    Csts for the pristine ice selfcollection process
-!
-XSELFI = XKER_ZRNIC_A1*ZGAMI(3)
-XCOLEXII = 0.025   !  Temperature factor of the I+I collection efficiency
-!
-!
-!*       6.3    Constants for pristine ice autoconversion
-!
-XTEXAUTI = 0.025   !  Temperature factor of the I+I collection efficiency
-!
-GFLAG = .TRUE.
-IF (GFLAG) THEN
-  WRITE(UNIT=KULOUT,FMT='("      pristine ice autoconversion")')
-  WRITE(UNIT=KULOUT,FMT='(" Temp. factor    XTEXAUTI=",E13.6)') XTEXAUTI
-END IF
-!
-XAUTO3 = 6.25E18*(ZGAMI(2))**(1./3.)*SQRT(ZGAMI(4))
-XAUTO4 = 0.5E6*(ZGAMI(4))**(1./6.)
-XLAUTS = 2.7E-2
-XLAUTS_THRESHOLD  = 0.4
-XITAUTS= 0.27 ! (Notice that T2 of BR74 is uncorrect and that 0.27=1./3.7
-XITAUTS_THRESHOLD = 7.5
-!
-!
-!*       6.4    Constants for snow aggregation
-!
-XCOLEXIS = 0.05    ! Temperature factor of the I+S collection efficiency
-XAGGS_CLARGE1 = XKER_ZRNIC_A2*ZGAMI(2)
-XAGGS_CLARGE2 = XKER_ZRNIC_A2*ZGAMS(2)
-XAGGS_RLARGE1 = XKER_ZRNIC_A2*ZGAMI(6)*XAI
-XAGGS_RLARGE2 = XKER_ZRNIC_A2*ZGAMI(7)*ZGAMS(2)*XAI
-!
-GFLAG = .TRUE.
-IF (GFLAG) THEN
-  WRITE(UNIT=KULOUT,FMT='("      snow aggregation")')
-  WRITE(UNIT=KULOUT,FMT='(" Temp. factor     XCOLEXIS=",E13.6)') XCOLEXIS
-END IF
-!  
-!-------------------------------------------------------------------------------
-!
-!
-!*       7.     CONSTANTS FOR THE FAST COLD PROCESSES FOR THE AGGREGATES
-!   	        --------------------------------------------------------
-!
-!
-!*       7.1    Constants for the riming of the aggregates
-!
-XDCSLIM  = 0.007 ! D_cs^lim = 7 mm as suggested by Farley et al. (1989)
-XCOLCS   = 1.0
-XEXCRIMSS= XCXS-XDS-2.0
-XCRIMSS  = (XPI/4.0)*XCOLCS*XCCS*XCS*(ZRHO00**XCEXVT)*MOMG(XALPHAS,XNUS,XDS+2.0)
-XEXCRIMSG= XEXCRIMSS
-XCRIMSG  = XCRIMSS
-XSRIMCG  = XCCS*XAS*MOMG(XALPHAS,XNUS,XBS)
-XEXSRIMCG= XCXS-XBS
-!
-GFLAG = .TRUE.
-IF (GFLAG) THEN
-  WRITE(UNIT=KULOUT,FMT='("      riming of the aggregates")')
-  WRITE(UNIT=KULOUT,FMT='(" D_cs^lim (Farley et al.) XDCSLIM=",E13.6)') XDCSLIM
-  WRITE(UNIT=KULOUT,FMT='(" Coll. efficiency          XCOLCS=",E13.6)') XCOLCS
-END IF
-!
-NGAMINC = 80
-XGAMINC_BOUND_MIN = 1.0E-1 ! Minimal value of (Lbda * D_cs^lim)**alpha
-XGAMINC_BOUND_MAX = 1.0E7  ! Maximal value of (Lbda * D_cs^lim)**alpha
-ZRATE = EXP(LOG(XGAMINC_BOUND_MAX/XGAMINC_BOUND_MIN)/FLOAT(NGAMINC-1))
-!
-ALLOCATE( XGAMINC_RIM1(NGAMINC) )
-ALLOCATE( XGAMINC_RIM2(NGAMINC) )
-!
-DO J1=1,NGAMINC
-  ZBOUND = XGAMINC_BOUND_MIN*ZRATE**(J1-1)
-  XGAMINC_RIM1(J1) = GAMMA_INC(XNUS+(2.0+XDS)/XALPHAS,ZBOUND)
-  XGAMINC_RIM2(J1) = GAMMA_INC(XNUS+XBS/XALPHAS      ,ZBOUND)
-END DO
-!
-XRIMINTP1 = XALPHAS / LOG(ZRATE)
-XRIMINTP2 = 1.0 + XRIMINTP1*LOG( XDCSLIM/(XGAMINC_BOUND_MIN)**(1.0/XALPHAS) )
-!
-!*       7.1.1  Defining the constants for the Hallett-Mossop 
-!               secondary ice nucleation process
-!
-XHMTMIN = XTT - 8.0
-XHMTMAX = XTT - 3.0
-XHM1 = 9.3E-3            ! Obsolete parameterization
-XHM2 = 1.5E-3/LOG(10.0)  ! from Ferrier (1995)
-XHM_YIELD = 5.E-3 ! A splinter is produced after the riming of 200 droplets
-XHM_COLLCS= 1.0   ! Collision efficiency snow/droplet (with Dc>25 microns)
-XHM_FACTS = XHM_YIELD*(XHM_COLLCS/XCOLCS)
-!
-! Notice: One magnitude of lambda discretized over 10 points for the droplets 
-!
-XGAMINC_HMC_BOUND_MIN = 1.0E-3 ! Min value of (Lbda * (12,25) microns)**alpha
-XGAMINC_HMC_BOUND_MAX = 1.0E5  ! Max value of (Lbda * (12,25) microns)**alpha
-ZRATE = EXP(LOG(XGAMINC_HMC_BOUND_MAX/XGAMINC_HMC_BOUND_MIN)/FLOAT(NGAMINC-1))
-!
-ALLOCATE( XGAMINC_HMC(NGAMINC) )
-!
-DO J1=1,NGAMINC
-  ZBOUND = XGAMINC_HMC_BOUND_MIN*ZRATE**(J1-1)
-  XGAMINC_HMC(J1) = GAMMA_INC(XNUC,ZBOUND)
-END DO
-!
-XHMSINTP1 = XALPHAC / LOG(ZRATE)
-XHMSINTP2 = 1.0 + XHMSINTP1*LOG( 12.E-6/(XGAMINC_HMC_BOUND_MIN)**(1.0/XALPHAC) )
-XHMLINTP1 = XALPHAC / LOG(ZRATE)
-XHMLINTP2 = 1.0 + XHMLINTP1*LOG( 25.E-6/(XGAMINC_HMC_BOUND_MIN)**(1.0/XALPHAC) )
-!
-!
-!*       7.2    Constants for the accretion of raindrops onto aggregates
-!
-XFRACCSS = ((XPI**2)/24.0)*XCCS*XRHOLW*(ZRHO00**XCEXVT)
-!
-XLBRACCS1   =    MOMG(XALPHAS,XNUS,2.)*MOMG(XALPHAR,XNUR,3.)
-XLBRACCS2   = 2.*MOMG(XALPHAS,XNUS,1.)*MOMG(XALPHAR,XNUR,4.)
-XLBRACCS3   =                          MOMG(XALPHAR,XNUR,5.)
-!
-XFSACCRG = (XPI/4.0)*XAS*XCCS*(ZRHO00**XCEXVT)
-!
-XLBSACCR1   =    MOMG(XALPHAR,XNUR,2.)*MOMG(XALPHAS,XNUS,XBS)
-XLBSACCR2   = 2.*MOMG(XALPHAR,XNUR,1.)*MOMG(XALPHAS,XNUS,XBS+1.)
-XLBSACCR3   =                          MOMG(XALPHAS,XNUS,XBS+2.)
-!
-!*       7.2.1  Defining the ranges for the computation of the kernels
-!
-! Notice: One magnitude of lambda discretized over 10 points for rain
-! Notice: One magnitude of lambda discretized over 10 points for snow
-!
-NACCLBDAS = 40
-XACCLBDAS_MIN = 5.0E1 ! Minimal value of Lbda_s to tabulate XKER_RACCS
-XACCLBDAS_MAX = 5.0E5 ! Maximal value of Lbda_s to tabulate XKER_RACCS
-ZRATE = LOG(XACCLBDAS_MAX/XACCLBDAS_MIN)/FLOAT(NACCLBDAS-1)
-XACCINTP1S = 1.0 / ZRATE
-XACCINTP2S = 1.0 - LOG( XACCLBDAS_MIN ) / ZRATE
-NACCLBDAR = 40
-XACCLBDAR_MIN = 1.0E3 ! Minimal value of Lbda_r to tabulate XKER_RACCS
-XACCLBDAR_MAX = 1.0E7 ! Maximal value of Lbda_r to tabulate XKER_RACCS
-ZRATE = LOG(XACCLBDAR_MAX/XACCLBDAR_MIN)/FLOAT(NACCLBDAR-1)
-XACCINTP1R = 1.0 / ZRATE
-XACCINTP2R = 1.0 - LOG( XACCLBDAR_MIN ) / ZRATE
-!
-!*       7.2.2  Computations of the tabulated normalized kernels
-!
-IND      = 50    ! Interval number, collection efficiency and infinite diameter
-ZESR     = 1.0   ! factor used to integrate the dimensional distributions when
-ZFDINFTY = 20.0  ! computing the kernels XKER_RACCSS, XKER_RACCS and XKER_SACCRG
-!
-ALLOCATE( XKER_RACCSS(NACCLBDAS,NACCLBDAR) )
-ALLOCATE( XKER_RACCS (NACCLBDAS,NACCLBDAR) )
-ALLOCATE( XKER_SACCRG(NACCLBDAR,NACCLBDAS) )
-!
-CALL READ_XKER_RACCS (KACCLBDAS,KACCLBDAR,KND,                                &
-                      PALPHAS,PNUS,PALPHAR,PNUR,PESR,PBS,PBR,PCS,PDS,PFVELOS,PCR,PDR, &
-                      PACCLBDAS_MAX,PACCLBDAR_MAX,PACCLBDAS_MIN,PACCLBDAR_MIN,&
-                      PFDINFTY                                                )
-IF( (KACCLBDAS/=NACCLBDAS) .OR. (KACCLBDAR/=NACCLBDAR) .OR. (KND/=IND) .OR. &
-    (PALPHAS/=XALPHAS) .OR. (PNUS/=XNUS)                               .OR. &
-    (PALPHAR/=XALPHAR) .OR. (PNUR/=XNUR)                               .OR. &
-    (PESR/=ZESR) .OR. (PBS/=XBS) .OR. (PBR/=XBR)                       .OR. &
-    (PCS/=XCS) .OR. (PDS/=XDS) .OR. (PCR/=XCR) .OR. (PDR/=XDR)         .OR. &
-    (PACCLBDAS_MAX/=XACCLBDAS_MAX) .OR. (PACCLBDAR_MAX/=XACCLBDAR_MAX) .OR. &
-    (PACCLBDAS_MIN/=XACCLBDAS_MIN) .OR. (PACCLBDAR_MIN/=XACCLBDAR_MIN) .OR. &
-    (PFDINFTY/=ZFDINFTY)                                               ) THEN
-  CALL RRCOLSS ( IND, XALPHAS, XNUS, XALPHAR, XNUR,                          &
-                 ZESR, XBR, XCS, XDS, PFVELOS, XCR, XDR,                     &
-                 XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, &
-                 ZFDINFTY, XKER_RACCSS, XAG, XBS, XAS                        )
-  CALL RZCOLX  ( IND, XALPHAS, XNUS, XALPHAR, XNUR,                          &
-                 ZESR, XBR, XCS, XDS, PFVELOS, XCR, XDR, 0.,                 &
-                 XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, &
-                 ZFDINFTY, XKER_RACCS                                        )
-  CALL RSCOLRG ( IND, XALPHAS, XNUS, XALPHAR, XNUR,                          &
-                 ZESR, XBS, XCS, XDS, PFVELOS, XCR, XDR,                     &
-                 XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, &
-                 ZFDINFTY, XKER_SACCRG,XAG, XBS, XAS                         )
-  WRITE(UNIT=KULOUT,FMT='("*****************************************")')
-  WRITE(UNIT=KULOUT,FMT='("**** UPDATE NEW SET OF RACSS KERNELS ****")')
-  WRITE(UNIT=KULOUT,FMT='("**** UPDATE NEW SET OF RACS  KERNELS ****")')
-  WRITE(UNIT=KULOUT,FMT='("**** UPDATE NEW SET OF SACRG KERNELS ****")')
-  WRITE(UNIT=KULOUT,FMT='("*****************************************")')
-  WRITE(UNIT=KULOUT,FMT='("!")')
-  WRITE(UNIT=KULOUT,FMT='("KND=",I3)') IND
-  WRITE(UNIT=KULOUT,FMT='("KACCLBDAS=",I3)') NACCLBDAS
-  WRITE(UNIT=KULOUT,FMT='("KACCLBDAR=",I3)') NACCLBDAR
-  WRITE(UNIT=KULOUT,FMT='("PALPHAS=",E13.6)') XALPHAS
-  WRITE(UNIT=KULOUT,FMT='("PNUS=",E13.6)') XNUS
-  WRITE(UNIT=KULOUT,FMT='("PALPHAR=",E13.6)') XALPHAR
-  WRITE(UNIT=KULOUT,FMT='("PNUR=",E13.6)') XNUR
-  WRITE(UNIT=KULOUT,FMT='("PESR=",E13.6)') ZESR
-  WRITE(UNIT=KULOUT,FMT='("PBS=",E13.6)') XBS
-  WRITE(UNIT=KULOUT,FMT='("PBR=",E13.6)') XBR
-  WRITE(UNIT=KULOUT,FMT='("PCS=",E13.6)') XCS
-  WRITE(UNIT=KULOUT,FMT='("PDS=",E13.6)') XDS
-  WRITE(UNIT=KULOUT,FMT='("PCR=",E13.6)') XCR
-  WRITE(UNIT=KULOUT,FMT='("PDR=",E13.6)') XDR
-  WRITE(UNIT=KULOUT,FMT='("PACCLBDAS_MAX=",E13.6)') &
-                                                    XACCLBDAS_MAX
-  WRITE(UNIT=KULOUT,FMT='("PACCLBDAR_MAX=",E13.6)') &
-                                                    XACCLBDAR_MAX
-  WRITE(UNIT=KULOUT,FMT='("PACCLBDAS_MIN=",E13.6)') &
-                                                    XACCLBDAS_MIN
-  WRITE(UNIT=KULOUT,FMT='("PACCLBDAR_MIN=",E13.6)') &
-                                                    XACCLBDAR_MIN
-  WRITE(UNIT=KULOUT,FMT='("PFDINFTY=",E13.6)') ZFDINFTY
-  WRITE(UNIT=KULOUT,FMT='("!")')
-  WRITE(UNIT=KULOUT,FMT='("IF( PRESENT(PKER_RACCSS) ) THEN")')
-  DO J1 = 1 , NACCLBDAS
-    DO J2 = 1 , NACCLBDAR
-    WRITE(UNIT=KULOUT,FMT='("  PKER_RACCSS(",I3,",",I3,") = ",E13.6)') &
-                        J1,J2,XKER_RACCSS(J1,J2)
-    END DO
-  END DO
-  WRITE(UNIT=KULOUT,FMT='("END IF")')
-  WRITE(UNIT=KULOUT,FMT='("!")')
-  WRITE(UNIT=KULOUT,FMT='("IF( PRESENT(PKER_RACCS ) ) THEN")')
-  DO J1 = 1 , NACCLBDAS
-    DO J2 = 1 , NACCLBDAR
-    WRITE(UNIT=KULOUT,FMT='("  PKER_RACCS (",I3,",",I3,") = ",E13.6)') &
-                        J1,J2,XKER_RACCS (J1,J2)
-    END DO
-  END DO
-  WRITE(UNIT=KULOUT,FMT='("END IF")')
-  WRITE(UNIT=KULOUT,FMT='("!")')
-  WRITE(UNIT=KULOUT,FMT='("IF( PRESENT(PKER_SACCRG) ) THEN")')
-  DO J1 = 1 , NACCLBDAR
-    DO J2 = 1 , NACCLBDAS
-    WRITE(UNIT=KULOUT,FMT='("  PKER_SACCRG(",I3,",",I3,") = ",E13.6)') &
-                        J1,J2,XKER_SACCRG(J1,J2)
-    END DO
-  END DO
-  WRITE(UNIT=KULOUT,FMT='("END IF")')
-  ELSE
-  CALL READ_XKER_RACCS (KACCLBDAS,KACCLBDAR,KND,                               &
-                       PALPHAS,PNUS,PALPHAR,PNUR,PESR,PBS,PBR,PCS,PDS,PFVELOS,PCR,PDR, &
-                       PACCLBDAS_MAX,PACCLBDAR_MAX,PACCLBDAS_MIN,PACCLBDAR_MIN,&
-                       PFDINFTY,XKER_RACCSS,XKER_RACCS,XKER_SACCRG             )
-  WRITE(UNIT=KULOUT,FMT='(" Read XKER_RACCSS")')
-  WRITE(UNIT=KULOUT,FMT='(" Read XKER_RACCS ")')
-  WRITE(UNIT=KULOUT,FMT='(" Read XKER_SACCRG")')
-END IF
-!
-!
-!*       7.3    Constant for the conversion-melting rate
-!
-XFSCVMG = 2.0
-!
-GFLAG = .TRUE.
-IF (GFLAG) THEN
-  WRITE(UNIT=KULOUT,FMT='("      conversion-melting of the aggregates")')
-  WRITE(UNIT=KULOUT,FMT='(" Conv. factor XFSCVMG=",E13.6)') XFSCVMG
-END IF
-!  
-!-------------------------------------------------------------------------------
-!
-!
-!*       8.     CONSTANTS FOR THE FAST COLD PROCESSES FOR THE GRAUPELN
-!   	        --------------------------------------------------------
-!
-!
-!*       8.1    Constants for the rain contact freezing
-!
-XCOLIR    = 1.0
-!
-! values of these coeficients differ from the single-momemt rain_ice case
-!
-XEXRCFRI  = -XDR-5.0
-XRCFRI    = ((XPI**2)/24.0)*XRHOLW*XCOLIR*XCR*(ZRHO00**XCEXVT)     &
-                                                     *MOMG(XALPHAR,XNUR,XDR+5.0)
-XEXICFRR  = -XDR-2.0
-XICFRR    = (XPI/4.0)*XCOLIR*XCR*(ZRHO00**XCEXVT)                  &
-                                                     *MOMG(XALPHAR,XNUR,XDR+2.0)
-!
-GFLAG = .TRUE.
-IF (GFLAG) THEN
-  WRITE(UNIT=KULOUT,FMT='("      rain contact freezing")')
-  WRITE(UNIT=KULOUT,FMT='(" Coll. efficiency          XCOLIR=",E13.6)') XCOLIR
-END IF
-!
-!
-!*       8.2    Constants for the dry growth of the graupeln
-!
-!*       8.2.1  Constants for the cloud droplet collection by the graupeln
-!               and for the Hallett-Mossop process
-!
-XCOLCG  = 0.6  !  Estimated from Cober and List (1993)
-XFCDRYG = (XPI/4.0)*XCOLCG*XCCG*XCG*(ZRHO00**XCEXVT)*MOMG(XALPHAG,XNUG,XDG+2.0)
-!
-XHM_COLLCG= 0.9   ! Collision efficiency graupel/droplet (with Dc>25 microns)
-XHM_FACTG = XHM_YIELD*(XHM_COLLCG/XCOLCG)
-!
-!*       8.2.2  Constants for the cloud ice collection by the graupeln
-!
-XCOLIG    = 0.25 ! Collection efficiency of I+G
-XCOLEXIG  = 0.05 ! Temperature factor of the I+G collection efficiency
-XCOLIG   = 0.01 ! Collection efficiency of I+G
-XCOLEXIG = 0.1  ! Temperature factor of the I+G collection efficiency
-WRITE (KULOUT, FMT=*) ' NEW Constants for the cloud ice collection by the graupeln'
-WRITE (KULOUT, FMT=*) ' XCOLIG, XCOLEXIG  = ',XCOLIG,XCOLEXIG
-XFIDRYG = (XPI/4.0)*XCOLIG*XCCG*XCG*(ZRHO00**XCEXVT)*MOMG(XALPHAG,XNUG,XDG+2.0)
-!
-GFLAG = .TRUE.
-IF (GFLAG) THEN
-  WRITE(UNIT=KULOUT,FMT='("      cloud ice collection by the graupeln")')
-  WRITE(UNIT=KULOUT,FMT='(" Coll. efficiency XCOLIG=",E13.6)') XCOLIG
-  WRITE(UNIT=KULOUT,FMT='(" Temp. factor     XCOLEXIG=",E13.6)') XCOLEXIG
-END IF
-!
-!*       8.2.3  Constants for the aggregate collection by the graupeln
-!
-XCOLSG    = 0.25 ! Collection efficiency of S+G
-XCOLEXSG  = 0.05 ! Temperature factor of the S+G collection efficiency
-XCOLSG   = 0.01 ! Collection efficiency of S+G
-XCOLEXSG = 0.1  ! Temperature factor of the S+G collection efficiency
-WRITE (KULOUT, FMT=*) ' NEW Constants for the aggregate collection by the graupeln'
-WRITE (KULOUT, FMT=*) ' XCOLSG, XCOLEXSG  = ',XCOLSG,XCOLEXSG
-XFSDRYG = (XPI/4.0)*XCOLSG*XCCG*XCCS*XAS*(ZRHO00**XCEXVT)
-!
-XLBSDRYG1   =    MOMG(XALPHAG,XNUG,2.)*MOMG(XALPHAS,XNUS,XBS)
-XLBSDRYG2   = 2.*MOMG(XALPHAG,XNUG,1.)*MOMG(XALPHAS,XNUS,XBS+1.)
-XLBSDRYG3   =                          MOMG(XALPHAS,XNUS,XBS+2.)
-!
-GFLAG = .TRUE.
-IF (GFLAG) THEN
-  WRITE(UNIT=KULOUT,FMT='("      aggregate collection by the graupeln")')
-  WRITE(UNIT=KULOUT,FMT='(" Coll. efficiency XCOLSG=",E13.6)') XCOLSG
-  WRITE(UNIT=KULOUT,FMT='(" Temp. factor     XCOLEXSG=",E13.6)') XCOLEXSG
-END IF
-!
-!*       8.2.4  Constants for the raindrop collection by the graupeln
-!
-XFRDRYG = ((XPI**2)/24.0)*XCCG*XRHOLW*(ZRHO00**XCEXVT)
-!
-XLBRDRYG1   =    MOMG(XALPHAG,XNUG,2.)*MOMG(XALPHAR,XNUR,3.)
-XLBRDRYG2   = 2.*MOMG(XALPHAG,XNUG,1.)*MOMG(XALPHAR,XNUR,4.)
-XLBRDRYG3   =                          MOMG(XALPHAR,XNUR,5.)
-!
-! Notice: One magnitude of lambda discretized over 10 points
-!
-NDRYLBDAR = 40
-XDRYLBDAR_MIN = 1.0E3 ! Minimal value of Lbda_r to tabulate XKER_RDRYG
-XDRYLBDAR_MAX = 1.0E7 ! Maximal value of Lbda_r to tabulate XKER_RDRYG
-ZRATE = LOG(XDRYLBDAR_MAX/XDRYLBDAR_MIN)/FLOAT(NDRYLBDAR-1)
-XDRYINTP1R = 1.0 / ZRATE
-XDRYINTP2R = 1.0 - LOG( XDRYLBDAR_MIN ) / ZRATE
-NDRYLBDAS = 80
-XDRYLBDAS_MIN = 2.5E1 ! Minimal value of Lbda_s to tabulate XKER_SDRYG
-XDRYLBDAS_MAX = 2.5E9 ! Maximal value of Lbda_s to tabulate XKER_SDRYG
-ZRATE = LOG(XDRYLBDAS_MAX/XDRYLBDAS_MIN)/FLOAT(NDRYLBDAS-1)
-XDRYINTP1S = 1.0 / ZRATE
-XDRYINTP2S = 1.0 - LOG( XDRYLBDAS_MIN ) / ZRATE
-NDRYLBDAG = 40
-XDRYLBDAG_MIN = 1.0E3 ! Min value of Lbda_g to tabulate XKER_SDRYG,XKER_RDRYG
-XDRYLBDAG_MAX = 1.0E7 ! Max value of Lbda_g to tabulate XKER_SDRYG,XKER_RDRYG
-ZRATE = LOG(XDRYLBDAG_MAX/XDRYLBDAG_MIN)/FLOAT(NDRYLBDAG-1)
-XDRYINTP1G = 1.0 / ZRATE
-XDRYINTP2G = 1.0 - LOG( XDRYLBDAG_MIN ) / ZRATE
-!
-!*       8.2.5  Computations of the tabulated normalized kernels
-!
-IND      = 50    ! Interval number, collection efficiency and infinite diameter
-ZEGS     = 1.0   ! factor used to integrate the dimensional distributions when
-ZFDINFTY = 20.0  ! computing the kernels XKER_SDRYG
-!
-ALLOCATE( XKER_SDRYG(NDRYLBDAG,NDRYLBDAS) )
-!
-CALL READ_XKER_SDRYG (KDRYLBDAG,KDRYLBDAS,KND,                              &
-                   PALPHAG,PNUG,PALPHAS,PNUS,PEGS,PBS,PCG,PDG,PCS,PDS,PFVELOS,     &
-                   PDRYLBDAG_MAX,PDRYLBDAS_MAX,PDRYLBDAG_MIN,PDRYLBDAS_MIN, &
-                   PFDINFTY                                                 )
-IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAS/=NDRYLBDAS) .OR. (KND/=IND) .OR. &
-    (PALPHAG/=XALPHAG) .OR. (PNUG/=XNUG)                               .OR. &
-    (PALPHAS/=XALPHAS) .OR. (PNUS/=XNUS)                               .OR. &
-    (PEGS/=ZEGS) .OR. (PBS/=XBS)                                       .OR. &
-    (PCG/=XCG) .OR. (PDG/=XDG) .OR. (PCS/=XCS) .OR. (PDS/=XDS) .OR. (PFVELOS/=PFVELOS) .OR. &
-    (PDRYLBDAG_MAX/=XDRYLBDAG_MAX) .OR. (PDRYLBDAS_MAX/=XDRYLBDAS_MAX) .OR. &
-    (PDRYLBDAG_MIN/=XDRYLBDAG_MIN) .OR. (PDRYLBDAS_MIN/=XDRYLBDAS_MIN) .OR. &
-    (PFDINFTY/=ZFDINFTY)                                               ) THEN
-  CALL RZCOLX ( IND, XALPHAG, XNUG, XALPHAS, XNUS,                          &
-                ZEGS, XBS, XCG, XDG, 0., XCS, XDS, PFVELOS,                 &
-                XDRYLBDAG_MAX, XDRYLBDAS_MAX, XDRYLBDAG_MIN, XDRYLBDAS_MIN, &
-                ZFDINFTY, XKER_SDRYG                                        )
-  WRITE(UNIT=KULOUT,FMT='("*****************************************")')
-  WRITE(UNIT=KULOUT,FMT='("**** UPDATE NEW SET OF SDRYG KERNELS ****")')
-  WRITE(UNIT=KULOUT,FMT='("*****************************************")')
-  WRITE(UNIT=KULOUT,FMT='("!")')
-  WRITE(UNIT=KULOUT,FMT='("KND=",I3)') IND
-  WRITE(UNIT=KULOUT,FMT='("KDRYLBDAG=",I3)') NDRYLBDAG
-  WRITE(UNIT=KULOUT,FMT='("KDRYLBDAS=",I3)') NDRYLBDAS
-  WRITE(UNIT=KULOUT,FMT='("PALPHAG=",E13.6)') XALPHAG
-  WRITE(UNIT=KULOUT,FMT='("PNUG=",E13.6)') XNUG
-  WRITE(UNIT=KULOUT,FMT='("PALPHAS=",E13.6)') XALPHAS
-  WRITE(UNIT=KULOUT,FMT='("PNUS=",E13.6)') XNUS
-  WRITE(UNIT=KULOUT,FMT='("PEGS=",E13.6)') ZEGS
-  WRITE(UNIT=KULOUT,FMT='("PBS=",E13.6)') XBS
-  WRITE(UNIT=KULOUT,FMT='("PCG=",E13.6)') XCG
-  WRITE(UNIT=KULOUT,FMT='("PDG=",E13.6)') XDG
-  WRITE(UNIT=KULOUT,FMT='("PCS=",E13.6)') XCS
-  WRITE(UNIT=KULOUT,FMT='("PDS=",E13.6)') XDS
-  WRITE(UNIT=KULOUT,FMT='("PDRYLBDAG_MAX=",E13.6)') &
-                                                    XDRYLBDAG_MAX
-  WRITE(UNIT=KULOUT,FMT='("PDRYLBDAS_MAX=",E13.6)') &
-                                                    XDRYLBDAS_MAX
-  WRITE(UNIT=KULOUT,FMT='("PDRYLBDAG_MIN=",E13.6)') &
-                                                    XDRYLBDAG_MIN
-  WRITE(UNIT=KULOUT,FMT='("PDRYLBDAS_MIN=",E13.6)') &
-                                                    XDRYLBDAS_MIN
-  WRITE(UNIT=KULOUT,FMT='("PFDINFTY=",E13.6)') ZFDINFTY
-  WRITE(UNIT=KULOUT,FMT='("!")')
-  WRITE(UNIT=KULOUT,FMT='("IF( PRESENT(PKER_SDRYG) ) THEN")')
-  DO J1 = 1 , NDRYLBDAG
-    DO J2 = 1 , NDRYLBDAS
-    WRITE(UNIT=KULOUT,FMT='("PKER_SDRYG(",I3,",",I3,") = ",E13.6)') &
-                        J1,J2,XKER_SDRYG(J1,J2)
-    END DO
-  END DO
-  WRITE(UNIT=KULOUT,FMT='("END IF")')
-  ELSE
-  CALL READ_XKER_SDRYG (KDRYLBDAG,KDRYLBDAS,KND,                              &
-                     PALPHAG,PNUG,PALPHAS,PNUS,PEGS,PBS,PCG,PDG,PCS,PDS,PFVELOS,     &
-                     PDRYLBDAG_MAX,PDRYLBDAS_MAX,PDRYLBDAG_MIN,PDRYLBDAS_MIN, &
-                     PFDINFTY,XKER_SDRYG                                      )
-  WRITE(UNIT=KULOUT,FMT='(" Read XKER_SDRYG")')
-END IF
-!
-!
-IND      = 50    ! Number of interval used to integrate the dimensional
-ZEGR     = 1.0   ! distributions when computing the kernel XKER_RDRYG
-ZFDINFTY = 20.0
-!
-ALLOCATE( XKER_RDRYG(NDRYLBDAG,NDRYLBDAR) )
-!
-CALL READ_XKER_RDRYG (KDRYLBDAG,KDRYLBDAR,KND,                              &
-                   PALPHAG,PNUG,PALPHAR,PNUR,PEGR,PBR,PCG,PDG,PCR,PDR,      &
-                   PDRYLBDAG_MAX,PDRYLBDAR_MAX,PDRYLBDAG_MIN,PDRYLBDAR_MIN, &
-                   PFDINFTY                                                 )
-IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAR/=NDRYLBDAR) .OR. (KND/=IND) .OR. &
-    (PALPHAG/=XALPHAG) .OR. (PNUG/=XNUG)                               .OR. &
-    (PALPHAR/=XALPHAR) .OR. (PNUR/=XNUR)                               .OR. &
-    (PEGR/=ZEGR) .OR. (PBR/=XBR)                                       .OR. &
-    (PCG/=XCG) .OR. (PDG/=XDG) .OR. (PCR/=XCR) .OR. (PDR/=XDR)         .OR. &
-    (PDRYLBDAG_MAX/=XDRYLBDAG_MAX) .OR. (PDRYLBDAR_MAX/=XDRYLBDAR_MAX) .OR. &
-    (PDRYLBDAG_MIN/=XDRYLBDAG_MIN) .OR. (PDRYLBDAR_MIN/=XDRYLBDAR_MIN) .OR. &
-    (PFDINFTY/=ZFDINFTY)                                               ) THEN
-  CALL RZCOLX ( IND, XALPHAG, XNUG, XALPHAR, XNUR,                          &
-                ZEGR, XBR, XCG, XDG, 0., XCR, XDR, 0.,                      &
-                XDRYLBDAG_MAX, XDRYLBDAR_MAX, XDRYLBDAG_MIN, XDRYLBDAR_MIN, &
-                ZFDINFTY, XKER_RDRYG                                        )
-  WRITE(UNIT=KULOUT,FMT='("*****************************************")')
-  WRITE(UNIT=KULOUT,FMT='("**** UPDATE NEW SET OF RDRYG KERNELS ****")')
-  WRITE(UNIT=KULOUT,FMT='("*****************************************")')
-  WRITE(UNIT=KULOUT,FMT='("!")')
-  WRITE(UNIT=KULOUT,FMT='("KND=",I3)') IND
-  WRITE(UNIT=KULOUT,FMT='("KDRYLBDAG=",I3)') NDRYLBDAG
-  WRITE(UNIT=KULOUT,FMT='("KDRYLBDAR=",I3)') NDRYLBDAR
-  WRITE(UNIT=KULOUT,FMT='("PALPHAG=",E13.6)') XALPHAG
-  WRITE(UNIT=KULOUT,FMT='("PNUG=",E13.6)') XNUG
-  WRITE(UNIT=KULOUT,FMT='("PALPHAR=",E13.6)') XALPHAR
-  WRITE(UNIT=KULOUT,FMT='("PNUR=",E13.6)') XNUR
-  WRITE(UNIT=KULOUT,FMT='("PEGR=",E13.6)') ZEGR
-  WRITE(UNIT=KULOUT,FMT='("PBR=",E13.6)') XBR
-  WRITE(UNIT=KULOUT,FMT='("PCG=",E13.6)') XCG
-  WRITE(UNIT=KULOUT,FMT='("PDG=",E13.6)') XDG
-  WRITE(UNIT=KULOUT,FMT='("PCR=",E13.6)') XCR
-  WRITE(UNIT=KULOUT,FMT='("PDR=",E13.6)') XDR
-  WRITE(UNIT=KULOUT,FMT='("PDRYLBDAG_MAX=",E13.6)') &
-                                                    XDRYLBDAG_MAX
-  WRITE(UNIT=KULOUT,FMT='("PDRYLBDAR_MAX=",E13.6)') &
-                                                    XDRYLBDAR_MAX
-  WRITE(UNIT=KULOUT,FMT='("PDRYLBDAG_MIN=",E13.6)') &
-                                                    XDRYLBDAG_MIN
-  WRITE(UNIT=KULOUT,FMT='("PDRYLBDAR_MIN=",E13.6)') &
-                                                    XDRYLBDAR_MIN
-  WRITE(UNIT=KULOUT,FMT='("PFDINFTY=",E13.6)') ZFDINFTY
-  WRITE(UNIT=KULOUT,FMT='("!")')
-  WRITE(UNIT=KULOUT,FMT='("IF( PRESENT(PKER_RDRYG) ) THEN")')
-  DO J1 = 1 , NDRYLBDAG
-    DO J2 = 1 , NDRYLBDAR
-    WRITE(UNIT=KULOUT,FMT='("PKER_RDRYG(",I3,",",I3,") = ",E13.6)') &
-                        J1,J2,XKER_RDRYG(J1,J2)
-    END DO
-  END DO
-  WRITE(UNIT=KULOUT,FMT='("END IF")')
-  ELSE
-  CALL READ_XKER_RDRYG (KDRYLBDAG,KDRYLBDAR,KND,                              &
-                     PALPHAG,PNUG,PALPHAR,PNUR,PEGR,PBR,PCG,PDG,PCR,PDR,      &
-                     PDRYLBDAG_MAX,PDRYLBDAR_MAX,PDRYLBDAG_MIN,PDRYLBDAR_MIN, &
-                     PFDINFTY,XKER_RDRYG                                      )
-  WRITE(UNIT=KULOUT,FMT='(" Read XKER_RDRYG")')
-END IF
-!  
-!-------------------------------------------------------------------------------
-!
-!*       9.     CONSTANTS FOR THE FAST COLD PROCESSES FOR THE HAILSTONES
-!               --------------------------------------------------------
-!
-!*       9.2    Constants for the wet growth of the hailstones
-!
-!
-!*       9.2.1  Constant for the cloud droplet and cloud ice collection
-!               by the hailstones
-!
-XFWETH = (XPI/4.0)*XCCH*XCH*(ZRHO00**XCEXVT)*MOMG(XALPHAH,XNUH,XDH+2.0)
-!
-!*       9.2.2  Constants for the aggregate collection by the hailstones
-!
-XFSWETH = (XPI/4.0)*XCCH*XCCS*XAS*(ZRHO00**XCEXVT)
-!
-XLBSWETH1   =    MOMG(XALPHAH,XNUH,2.)*MOMG(XALPHAS,XNUS,XBS)
-XLBSWETH2   = 2.*MOMG(XALPHAH,XNUH,1.)*MOMG(XALPHAS,XNUS,XBS+1.)
-XLBSWETH3   =                          MOMG(XALPHAS,XNUS,XBS+2.)
-!
-!*       9.2.3  Constants for the graupel collection by the hailstones
-!
-XFGWETH = (XPI/4.0)*XCCH*XCCG*XAG*(ZRHO00**XCEXVT)
-!
-XLBGWETH1   =    MOMG(XALPHAH,XNUH,2.)*MOMG(XALPHAG,XNUG,XBG)
-XLBGWETH2   = 2.*MOMG(XALPHAH,XNUH,1.)*MOMG(XALPHAG,XNUG,XBG+1.)
-XLBGWETH3   =                          MOMG(XALPHAG,XNUG,XBG+2.)
-!
-! Notice: One magnitude of lambda discretized over 10 points
-!
-NWETLBDAS = 80
-XWETLBDAS_MIN = 2.5E1 ! Minimal value of Lbda_s to tabulate XKER_SWETH
-XWETLBDAS_MAX = 2.5E9 ! Maximal value of Lbda_s to tabulate XKER_SWETH
-ZRATE = LOG(XWETLBDAS_MAX/XWETLBDAS_MIN)/FLOAT(NWETLBDAS-1)
-XWETINTP1S = 1.0 / ZRATE
-XWETINTP2S = 1.0 - LOG( XWETLBDAS_MIN ) / ZRATE
-NWETLBDAG = 40
-XWETLBDAG_MIN = 1.0E3 ! Min value of Lbda_g to tabulate XKER_GWETH
-XWETLBDAG_MAX = 1.0E7 ! Max value of Lbda_g to tabulate XKER_GWETH
-ZRATE = LOG(XWETLBDAG_MAX/XWETLBDAG_MIN)/FLOAT(NWETLBDAG-1)
-XWETINTP1G = 1.0 / ZRATE
-XWETINTP2G = 1.0 - LOG( XWETLBDAG_MIN ) / ZRATE
-NWETLBDAH = 40
-XWETLBDAH_MIN = 1.0E3 ! Min value of Lbda_h to tabulate XKER_SWETH,XKER_GWETH
-XWETLBDAH_MAX = 1.0E7 ! Max value of Lbda_h to tabulate XKER_SWETH,XKER_GWETH
-ZRATE = LOG(XWETLBDAH_MAX/XWETLBDAH_MIN)/FLOAT(NWETLBDAH-1)
-XWETINTP1H = 1.0 / ZRATE
-XWETINTP2H = 1.0 - LOG( XWETLBDAH_MIN ) / ZRATE
-!
-!*       9.2.4  Computations of the tabulated normalized kernels
-!
-IND      = 50    ! Interval number, collection efficiency and infinite diameter
-ZEHS     = 1.0   ! factor used to integrate the dimensional distributions when
-ZFDINFTY = 20.0  ! computing the kernels XKER_SWETH
-!
-IF( .NOT.ALLOCATED(XKER_SWETH) ) ALLOCATE( XKER_SWETH(NWETLBDAH,NWETLBDAS) )
-!
-CALL READ_XKER_SWETH (KWETLBDAH,KWETLBDAS,KND,                              &
-                   PALPHAH,PNUH,PALPHAS,PNUS,PEHS,PBS,PCH,PDH,PCS,PDS,PFVELOS,      &
-                   PWETLBDAH_MAX,PWETLBDAS_MAX,PWETLBDAH_MIN,PWETLBDAS_MIN, &
-                   PFDINFTY                                                 )
-IF( (KWETLBDAH/=NWETLBDAH) .OR. (KWETLBDAS/=NWETLBDAS) .OR. (KND/=IND) .OR. &
-    (PALPHAH/=XALPHAH) .OR. (PNUH/=XNUH)                               .OR. &
-    (PALPHAS/=XALPHAS) .OR. (PNUS/=XNUS)                               .OR. &
-    (PEHS/=ZEHS) .OR. (PBS/=XBS)                                       .OR. &
-    (PCH/=XCH) .OR. (PDH/=XDH) .OR. (PCS/=XCS) .OR. (PDS/=XDS) .OR. (PFVELOS/=PFVELOS) .OR. &
-    (PWETLBDAH_MAX/=XWETLBDAH_MAX) .OR. (PWETLBDAS_MAX/=XWETLBDAS_MAX) .OR. &
-    (PWETLBDAH_MIN/=XWETLBDAH_MIN) .OR. (PWETLBDAS_MIN/=XWETLBDAS_MIN) .OR. &
-    (PFDINFTY/=ZFDINFTY)                                               ) THEN
-  CALL RZCOLX ( IND, XALPHAH, XNUH, XALPHAS, XNUS,                          &
-                ZEHS, XBS, XCH, XDH, 0., XCS, XDS, PFVELOS,                 &
-                XWETLBDAH_MAX, XWETLBDAS_MAX, XWETLBDAH_MIN, XWETLBDAS_MIN, &
-                ZFDINFTY, XKER_SWETH                                        )
-  WRITE(UNIT=KULOUT,FMT='("*****************************************")')
-  WRITE(UNIT=KULOUT,FMT='("**** UPDATE NEW SET OF SWETH KERNELS ****")')
-  WRITE(UNIT=KULOUT,FMT='("*****************************************")')
-  WRITE(UNIT=KULOUT,FMT='("!")')
-  WRITE(UNIT=KULOUT,FMT='("KND=",I3)') IND
-  WRITE(UNIT=KULOUT,FMT='("KWETLBDAH=",I3)') NWETLBDAH
-  WRITE(UNIT=KULOUT,FMT='("KWETLBDAS=",I3)') NWETLBDAS
-  WRITE(UNIT=KULOUT,FMT='("PALPHAH=",E13.6)') XALPHAH
-  WRITE(UNIT=KULOUT,FMT='("PNUH=",E13.6)') XNUH
-  WRITE(UNIT=KULOUT,FMT='("PALPHAS=",E13.6)') XALPHAS
-  WRITE(UNIT=KULOUT,FMT='("PNUS=",E13.6)') XNUS
-  WRITE(UNIT=KULOUT,FMT='("PEHS=",E13.6)') ZEHS
-  WRITE(UNIT=KULOUT,FMT='("PBS=",E13.6)') XBS
-  WRITE(UNIT=KULOUT,FMT='("PCH=",E13.6)') XCH
-  WRITE(UNIT=KULOUT,FMT='("PDH=",E13.6)') XDH
-  WRITE(UNIT=KULOUT,FMT='("PCS=",E13.6)') XCS
-  WRITE(UNIT=KULOUT,FMT='("PDS=",E13.6)') XDS
-  WRITE(UNIT=KULOUT,FMT='("PWETLBDAH_MAX=",E13.6)') &
-                                                    XWETLBDAH_MAX
-  WRITE(UNIT=KULOUT,FMT='("PWETLBDAS_MAX=",E13.6)') &
-                                                    XWETLBDAS_MAX
-  WRITE(UNIT=KULOUT,FMT='("PWETLBDAH_MIN=",E13.6)') &
-                                                    XWETLBDAH_MIN
-  WRITE(UNIT=KULOUT,FMT='("PWETLBDAS_MIN=",E13.6)') &
-                                                    XWETLBDAS_MIN
-  WRITE(UNIT=KULOUT,FMT='("PFDINFTY=",E13.6)') ZFDINFTY
-  WRITE(UNIT=KULOUT,FMT='("!")')
-  WRITE(UNIT=KULOUT,FMT='("IF( PRESENT(PKER_SWETH) ) THEN")')
-  DO J1 = 1 , NWETLBDAH
-    DO J2 = 1 , NWETLBDAS
-    WRITE(UNIT=KULOUT,FMT='("PKER_SWETH(",I3,",",I3,") = ",E13.6)') &
-                        J1,J2,XKER_SWETH(J1,J2)
-    END DO
-  END DO
-  WRITE(UNIT=KULOUT,FMT='("END IF")')
-  ELSE
-  CALL READ_XKER_SWETH (KWETLBDAH,KWETLBDAS,KND,                              &
-                     PALPHAH,PNUH,PALPHAS,PNUS,PEHS,PBS,PCH,PDH,PCS,PDS,PFVELOS,     &
-                     PWETLBDAH_MAX,PWETLBDAS_MAX,PWETLBDAH_MIN,PWETLBDAS_MIN, &
-                     PFDINFTY,XKER_SWETH                                      )
-  WRITE(UNIT=KULOUT,FMT='(" Read XKER_SWETH")')
-END IF
-!
-!
-IND      = 50    ! Number of interval used to integrate the dimensional
-ZEHG     = 1.0   ! distributions when computing the kernel XKER_GWETH
-ZFDINFTY = 20.0
-!
-IF( .NOT.ALLOCATED(XKER_GWETH) ) ALLOCATE( XKER_GWETH(NWETLBDAH,NWETLBDAG) )
-!
-CALL READ_XKER_GWETH (KWETLBDAH,KWETLBDAG,KND,                              &
-                   PALPHAH,PNUH,PALPHAG,PNUG,PEHG,PBG,PCH,PDH,PCG,PDG,      &
-                   PWETLBDAH_MAX,PWETLBDAG_MAX,PWETLBDAH_MIN,PWETLBDAG_MIN, &
-                   PFDINFTY                                                 )
-IF( (KWETLBDAH/=NWETLBDAH) .OR. (KWETLBDAG/=NWETLBDAG) .OR. (KND/=IND) .OR. &
-    (PALPHAH/=XALPHAH) .OR. (PNUH/=XNUH)                               .OR. &
-    (PALPHAG/=XALPHAG) .OR. (PNUG/=XNUG)                               .OR. &
-    (PEHG/=ZEHG) .OR. (PBG/=XBG)                                       .OR. &
-    (PCH/=XCH) .OR. (PDH/=XDH) .OR. (PCG/=XCG) .OR. (PDG/=XDG)         .OR. &
-    (PWETLBDAH_MAX/=XWETLBDAH_MAX) .OR. (PWETLBDAG_MAX/=XWETLBDAG_MAX) .OR. &
-    (PWETLBDAH_MIN/=XWETLBDAH_MIN) .OR. (PWETLBDAG_MIN/=XWETLBDAG_MIN) .OR. &
-    (PFDINFTY/=ZFDINFTY)                                               ) THEN
-  CALL RZCOLX ( IND, XALPHAH, XNUH, XALPHAG, XNUG,                          &
-                ZEHG, XBG, XCH, XDH, 0., XCG, XDG, 0.,                      &
-                XWETLBDAH_MAX, XWETLBDAG_MAX, XWETLBDAH_MIN, XWETLBDAG_MIN, &
-                ZFDINFTY, XKER_GWETH                                        )
-  WRITE(UNIT=KULOUT,FMT='("*****************************************")')
-  WRITE(UNIT=KULOUT,FMT='("**** UPDATE NEW SET OF GWETH KERNELS ****")')
-  WRITE(UNIT=KULOUT,FMT='("*****************************************")')
-  WRITE(UNIT=KULOUT,FMT='("!")')
-  WRITE(UNIT=KULOUT,FMT='("KND=",I3)') IND
-  WRITE(UNIT=KULOUT,FMT='("KWETLBDAH=",I3)') NWETLBDAH
-  WRITE(UNIT=KULOUT,FMT='("KWETLBDAG=",I3)') NWETLBDAG
-  WRITE(UNIT=KULOUT,FMT='("PALPHAH=",E13.6)') XALPHAH
-  WRITE(UNIT=KULOUT,FMT='("PNUH=",E13.6)') XNUH
-  WRITE(UNIT=KULOUT,FMT='("PALPHAG=",E13.6)') XALPHAG
-  WRITE(UNIT=KULOUT,FMT='("PNUG=",E13.6)') XNUG
-  WRITE(UNIT=KULOUT,FMT='("PEHG=",E13.6)') ZEHG
-  WRITE(UNIT=KULOUT,FMT='("PBG=",E13.6)') XBG
-  WRITE(UNIT=KULOUT,FMT='("PCH=",E13.6)') XCH
-  WRITE(UNIT=KULOUT,FMT='("PDH=",E13.6)') XDH
-  WRITE(UNIT=KULOUT,FMT='("PCG=",E13.6)') XCG
-  WRITE(UNIT=KULOUT,FMT='("PDG=",E13.6)') XDG
-  WRITE(UNIT=KULOUT,FMT='("PWETLBDAH_MAX=",E13.6)') &
-                                                    XWETLBDAH_MAX
-  WRITE(UNIT=KULOUT,FMT='("PWETLBDAG_MAX=",E13.6)') &
-                                                    XWETLBDAG_MAX
-  WRITE(UNIT=KULOUT,FMT='("PWETLBDAH_MIN=",E13.6)') &
-                                                    XWETLBDAH_MIN
-  WRITE(UNIT=KULOUT,FMT='("PWETLBDAG_MIN=",E13.6)') &
-                                                    XWETLBDAG_MIN
-  WRITE(UNIT=KULOUT,FMT='("PFDINFTY=",E13.6)') ZFDINFTY
-  WRITE(UNIT=KULOUT,FMT='("!")')
-  WRITE(UNIT=KULOUT,FMT='("IF( PRESENT(PKER_GWETH) ) THEN")')
-  DO J1 = 1 , NWETLBDAH
-    DO J2 = 1 , NWETLBDAG
-    WRITE(UNIT=KULOUT,FMT='("PKER_GWETH(",I3,",",I3,") = ",E13.6)') &
-                        J1,J2,XKER_GWETH(J1,J2)
-    END DO
-  END DO
-  WRITE(UNIT=KULOUT,FMT='("END IF")')
-  ELSE
-  CALL READ_XKER_GWETH (KWETLBDAH,KWETLBDAG,KND,                              &
-                     PALPHAH,PNUH,PALPHAG,PNUG,PEHG,PBG,PCH,PDH,PCG,PDG,      &
-                     PWETLBDAH_MAX,PWETLBDAG_MAX,PWETLBDAH_MIN,PWETLBDAG_MIN, &
-                     PFDINFTY,XKER_GWETH                                      )
-  WRITE(UNIT=KULOUT,FMT='(" Read XKER_GWETH")')
-END IF
-!
-!
-!
-!-------------------------------------------------------------------------------
-!
-!*      10.     SET-UP RADIATIVE PARAMETERS
-!   	        ---------------------------
-!
-!
-! R_eff_i = XFREFFI * (rho*r_i/N_i)**(1/3)
-!
-XFREFFI = 0.5 * ZGAMI(8) * (1.0/XLBI)**XLBEXI
-!  
-!-------------------------------------------------------------------------------
-!
-!
-!*      11.     SOME PRINTS FOR CONTROL
-!   	        -----------------------
-!
-!
-GFLAG = .TRUE.
-IF (GFLAG) THEN
-  WRITE(UNIT=KULOUT,FMT='(" Summary of the ice particule characteristics")')
-  WRITE(UNIT=KULOUT,FMT='("      PRISTINE ICE")')
-  WRITE(UNIT=KULOUT,FMT='("                   masse: A=",E13.6," B=",E13.6)') &
-                                                      XAI,XBI
-  WRITE(UNIT=KULOUT,FMT='("                 vitesse: C=",E13.6," D=",E13.6)') &
-                                                      XC_I,XDI
-  WRITE(UNIT=KULOUT,FMT='("            distribution:AL=",E13.6,"NU=",E13.6)') &
-                                                      XALPHAI,XNUI
-  WRITE(UNIT=KULOUT,FMT='("              SNOW")')
-  WRITE(UNIT=KULOUT,FMT='("                   masse: A=",E13.6," B=",E13.6)') &
-                                                      XAS,XBS
-  WRITE(UNIT=KULOUT,FMT='("                 vitesse: C=",E13.6," D=",E13.6)') &
-                                                      XCS,XDS
-  WRITE(UNIT=KULOUT,FMT='("           concentration:CC=",E13.6," x=",E13.6)') &
-                                                      XCCS,XCXS
-  WRITE(UNIT=KULOUT,FMT='("            distribution:AL=",E13.6,"NU=",E13.6)') &
-                                                      XALPHAS,XNUS
-  WRITE(UNIT=KULOUT,FMT='("            GRAUPEL")')
-  WRITE(UNIT=KULOUT,FMT='("                   masse: A=",E13.6," B=",E13.6)') &
-                                                      XAG,XBG
-  WRITE(UNIT=KULOUT,FMT='("                 vitesse: C=",E13.6," D=",E13.6)') &
-                                                      XCG,XDG
-  WRITE(UNIT=KULOUT,FMT='("           concentration:CC=",E13.6," x=",E13.6)') &
-                                                      XCCG,XCXG
-  WRITE(UNIT=KULOUT,FMT='("            distribution:AL=",E13.6,"NU=",E13.6)') &
-                                                      XALPHAG,XNUG
-END IF
-!
-!------------------------------------------------------------------------------
-!
-END SUBROUTINE INI_LIMA_COLD_MIXED
diff --git a/src/arome/micro/init_aerosol_properties.F90 b/src/arome/micro/init_aerosol_properties.F90
deleted file mode 100644
index 06cec3bfa4d198b4f2d7a9f792293ffbff43f4ee..0000000000000000000000000000000000000000
--- a/src/arome/micro/init_aerosol_properties.F90
+++ /dev/null
@@ -1,370 +0,0 @@
-!      ####################
-       MODULE MODI_INIT_AEROSOL_PROPERTIES
-INTERFACE
-   SUBROUTINE INIT_AEROSOL_PROPERTIES
-   END SUBROUTINE INIT_AEROSOL_PROPERTIES
-END INTERFACE
-END MODULE MODI_INIT_AEROSOL_PROPERTIES
-!      ####################
-!
-!     #############################################################
-      SUBROUTINE INIT_AEROSOL_PROPERTIES
-!     #############################################################
-
-!!
-!!
-!!      PURPOSE
-!!      -------
-!!      
-!!      Define the aerosol properties
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_LUNIT,           ONLY : ILUOUT, CLUOUT0
-USE MODD_PARAM_LIMA,      ONLY : LWARM_LIMA, LACTI_LIMA, NMOD_CCN, HINI_CCN, HTYPE_CCN,        &
-                                 XR_MEAN_CCN, XLOGSIG_CCN, XRHO_CCN,                 &
-                                 XKHEN_MULTI, XMUHEN_MULTI, XBETAHEN_MULTI,          &
-                                 XLIMIT_FACTOR, CCCN_MODES, LSCAV,                    &
-                                 XACTEMP_CCN, XFSOLUB_CCN,                           &
-                                 LCOLD_LIMA, LNUCL_LIMA, NMOD_IFN, NSPECIE, CIFN_SPECIES,       &
-                                 XMDIAM_IFN, XSIGMA_IFN, XRHO_IFN, XFRAC, XFRAC_REF, &
-                                 CINT_MIXING, NMOD_IMM, NINDICE_CCN_IMM, NIMM,        &
-                                 NPHILLIPS
-!
-USE MODI_GAMMA
-!
-IMPLICIT NONE
-!
-REAL             ::  XKHEN0     
-REAL             ::  XLOGSIG0   
-REAL             ::  XALPHA1     
-REAL             ::  XMUHEN0    
-REAL             ::  XALPHA2   
-REAL             ::  XBETAHEN0  
-REAL             ::  XR_MEAN0  
-REAL             ::  XALPHA3    
-REAL             ::  XALPHA4     
-REAL             ::  XALPHA5      
-REAL             ::  XACTEMP0    
-REAL             ::  XALPHA6   
-!
-REAL, DIMENSION(6) :: XKHEN_TMP   = (/1.56, 1.56, 1.56, 1.56, 1.56, 1.56 /)
-REAL, DIMENSION(6) :: XMUHEN_TMP  = (/0.80, 0.80, 0.80, 0.80, 0.80, 0.80 /)
-REAL, DIMENSION(6) :: XBETAHEN_TMP= (/136., 136., 136., 136., 136., 136. /)
-!
-REAL, DIMENSION(3) :: RCCN
-REAL, DIMENSION(3) :: LOGSIGCCN
-REAL, DIMENSION(3) :: RHOCCN
-!
-INTEGER            :: I,J,JMOD
-!
-INTEGER  :: ILUOUT0 ! Logical unit number for output-listing
-INTEGER  :: IRESP   ! Return code of FM-routines
-
-!
-!-------------------------------------------------------------------------------
-!
-CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP)
-!
-!!!!!!!!!!!!!!!!
-! CCN properties
-!!!!!!!!!!!!!!!!
-!
-IF ( NMOD_CCN .GE. 1 ) THEN
-!
-   IF (.NOT.(ALLOCATED(XR_MEAN_CCN))) ALLOCATE(XR_MEAN_CCN(NMOD_CCN))
-   IF (.NOT.(ALLOCATED(XLOGSIG_CCN))) ALLOCATE(XLOGSIG_CCN(NMOD_CCN))
-   IF (.NOT.(ALLOCATED(XRHO_CCN)))    ALLOCATE(XRHO_CCN(NMOD_CCN))
-!
-   SELECT CASE (CCCN_MODES)
-   CASE ('JUNGFRAU')
-      RCCN(:)   = (/ 0.02E-6 , 0.058E-6 , 0.763E-6 /)
-      LOGSIGCCN(:) = (/ 0.28 , 0.57 , 0.34 /)
-      RHOCCN(:) = (/ 1500. , 1500. , 1500. /)
-   CASE ('COPT')
-      RCCN(:)   = (/ 0.125E-6 , 0.4E-6 , 1.0E-6 /)
-      LOGSIGCCN(:) = (/ 0.69 , 0.41 , 0.47 /)
-      RHOCCN(:) = (/ 1000. , 1000. , 1000. /)
-   CASE ('MACC')
-      RCCN(:)   = (/ 0.4E-6 , 0.25E-6 , 0.1E-6 /)
-      LOGSIGCCN(:) = (/ 0.64 , 0.47 , 0.47 /)
-      RHOCCN(:) = (/ 2160. , 2000. , 1750. /)
-   CASE ('MACC_JPP')
-! sea-salt, sulfate, hydrophilic (GADS data)
-      RCCN(:)      = (/ 0.209E-6 , 0.0695E-6 , 0.0212E-6 /)
-      LOGSIGCCN(:) = (/ 0.708    , 0.708     , 0.806     /)
-      RHOCCN(:)    = (/ 2200.    , 1700.     , 1800.     /)
-   CASE ('SIRTA')
-      RCCN(:)   = (/ 0.153E-6 , 0.058E-6 , 0.763E-6 /)
-      LOGSIGCCN(:) = (/ 0.846 , 0.57 , 0.34 /)
-      RHOCCN(:) = (/ 1500. , 1500. , 1500. /)
-   CASE ('CPS00')
-      RCCN(:)   = (/ 0.0218E-6 , 0.058E-6 , 0.763E-6 /)
-      LOGSIGCCN(:) = (/ 1.16 , 0.57 , 0.34 /)
-      RHOCCN(:) = (/ 1500. , 1500. , 1500. /)
-   CASE ('MOCAGE') ! ordre : sulfates, sels marins, BC+O
-      RCCN(:)   = (/ 0.01E-6 , 0.05E-6 , 0.008E-6 /)
-      LOGSIGCCN(:) = (/ 0.788 , 0.993 , 0.916 /)
-      RHOCCN(:) = (/ 1000. , 2200. , 1000. /)
-   CASE DEFAULT
-! d'après Jaenicke 1993, aerosols troposphere libre, masse volumique typique
-      RCCN(:)   = (/ 0.0035E-6 , 0.125E-6 , 0.26E-6 /)
-      LOGSIGCCN(:) = (/ 0.645 , 0.253 , 0.425 /)
-      RHOCCN(:) = (/ 1000. , 1000. , 1000. /)
-  ENDSELECT
-!
-  DO I=1, MIN(NMOD_CCN,3)
-    XR_MEAN_CCN(I) = RCCN(I)
-    XLOGSIG_CCN(I) = LOGSIGCCN(I)
-    XRHO_CCN(I)    = RHOCCN(I)
-  END DO
-!
-  IF (NMOD_CCN .EQ. 4) THEN
-! default values as coarse sea salt mode
-    XR_MEAN_CCN(4) = 1.75E-6
-    XLOGSIG_CCN(4) = 0.708
-    XRHO_CCN(4)    = 2200.   
-  END IF
-!
-!
-!		Compute CCN spectra parameters from CCN characteristics
-!
-!* INPUT : XBETAHEN_TEST is in 'percent' and XBETAHEN_MULTI in 'no units', 
-!  XK... and XMU... are invariant
-!
-  IF (.NOT.(ALLOCATED(XKHEN_MULTI)))    ALLOCATE(XKHEN_MULTI(NMOD_CCN))  
-  IF (.NOT.(ALLOCATED(XMUHEN_MULTI)))   ALLOCATE(XMUHEN_MULTI(NMOD_CCN))
-  IF (.NOT.(ALLOCATED(XBETAHEN_MULTI))) ALLOCATE(XBETAHEN_MULTI(NMOD_CCN))
-  IF (.NOT.(ALLOCATED(XLIMIT_FACTOR)))  ALLOCATE(XLIMIT_FACTOR(NMOD_CCN))
-!
-  IF (HINI_CCN == 'CCN'.AND. (.NOT. LSCAV) ) THEN
-! Numerical initialization without dependence on AP physical properties
-100 DO JMOD = 1, NMOD_CCN 
-      XKHEN_MULTI(JMOD)    = XKHEN_TMP(JMOD)  
-      XMUHEN_MULTI(JMOD)   = XMUHEN_TMP(JMOD)
-      XBETAHEN_MULTI(JMOD) = XBETAHEN_TMP(JMOD)*(100.)**2                    
-! no units relative to smax 
-      XLIMIT_FACTOR(JMOD)  = ( GAMMA_X0D(0.5*XKHEN_MULTI(JMOD)+1.)&
-           *GAMMA_X0D(XMUHEN_MULTI(JMOD)-0.5*XKHEN_MULTI(JMOD)) ) &
-           /( XBETAHEN_MULTI(JMOD)**(0.5*XKHEN_MULTI(JMOD))       &
-           *GAMMA_X0D(XMUHEN_MULTI(JMOD)) ) ! N/C
-    END DO
-  ELSE IF (HINI_CCN == 'CCN'.AND. LSCAV ) THEN
-! Attention !
-    WRITE(UNIT=ILUOUT0,FMT='("You are using a numerical initialization &
-      &not depending on the aerosol properties, however you need it for &
-      &scavenging.                                                      &
-      &With LSCAV = true, HINI_CCN should be set to AER for consistency")')
-    go to 100
-  ELSE IF (HINI_CCN == 'AER') THEN
-! 
-! Initialisation depending on aerosol physical properties
-!
-! First, computing k, mu, beta, and XLIMIT_FACTOR as in CPS2000 (eqs 9a-9c)
-!
-! XLIMIT_FACTOR replaces C, because C depends on the CCN number concentration
-! which is therefore determined at each grid point and time step as 
-! Nccn / XLIMIT_FACTOR
-!
-    DO JMOD = 1, NMOD_CCN 
-!
-       SELECT CASE (HTYPE_CCN(JMOD))
-       CASE ('M') ! CCN marins
-          XKHEN0     = 3.251
-          XLOGSIG0   = 0.4835
-          XALPHA1    = -1.297
-          XMUHEN0    = 2.589
-          XALPHA2    = -1.511
-          XBETAHEN0  = 621.689
-          XR_MEAN0   = 0.133E-6
-          XALPHA3    = 3.002
-          XALPHA4    = 1.081
-          XALPHA5    = 1.0
-          XACTEMP0   = 290.16
-          XALPHA6    = 2.995
-       CASE ('C') ! CCN continentaux
-          XKHEN0     = 1.403
-          XLOGSIG0   = 1.16
-          XALPHA1    = -1.172
-          XMUHEN0    = 0.834
-          XALPHA2    = -1.350
-          XBETAHEN0  = 25.499
-          XR_MEAN0   = 0.0218E-6
-          XALPHA3    = 3.057
-          XALPHA4    = 4.092
-          XALPHA5    = 1.011
-          XACTEMP0   = 290.16
-          XALPHA6    = 3.076
-       CASE DEFAULT
-          WRITE(UNIT=ILUOUT0,FMT='("You must specify HTYPE_CNN(JMOD)=C or M &
-               &in EXSEG1.nam for each CCN mode")')
-          CALL ABORT
-       ENDSELECT
-!
-      XKHEN_MULTI(JMOD)   =   XKHEN0*(XLOGSIG_CCN(JMOD)/XLOGSIG0)**XALPHA1
-      XMUHEN_MULTI(JMOD)  =  XMUHEN0*(XLOGSIG_CCN(JMOD)/XLOGSIG0)**XALPHA2
-      XBETAHEN_MULTI(JMOD)=XBETAHEN0*(XR_MEAN_CCN(JMOD)/XR_MEAN0)**XALPHA3 &
-           * EXP( XALPHA4*((XLOGSIG_CCN(JMOD)/XLOGSIG0)-1.) )              &
-           * XFSOLUB_CCN**XALPHA5                                          &
-           * (XACTEMP_CCN/XACTEMP0)**XALPHA6
-      XLIMIT_FACTOR(JMOD)  = ( GAMMA_X0D(0.5*XKHEN_MULTI(JMOD)+1.) &
-           *GAMMA_X0D(XMUHEN_MULTI(JMOD)-0.5*XKHEN_MULTI(JMOD)) )  &
-           /( XBETAHEN_MULTI(JMOD)**(0.5*XKHEN_MULTI(JMOD))        &
-           *GAMMA_X0D(XMUHEN_MULTI(JMOD)) )
-    ENDDO
-!
-! These parameters are correct for a nucleation spectra 
-! Nccn(Smax) = C Smax^k F(mu,k/2,1+k/2,-beta Smax^2)
-! with Smax expressed in % (Smax=1 for a supersaturation of 1%).
-!
-! All the computations in LIMA are done for an adimensional Smax (Smax=0.01 for 
-! a 1% supersaturation). So beta and C (XLIMIT_FACTOR) are changed :
-! new_beta = beta * 100^2
-! new_C = C * 100^k (ie XLIMIT_FACTOR = XLIMIT_FACTOR / 100^k)
-!
-    XBETAHEN_MULTI(:) = XBETAHEN_MULTI(:) * 10000
-    XLIMIT_FACTOR(:)  = XLIMIT_FACTOR(:) / (100**XKHEN_MULTI(:))
-  END IF
-END IF ! NMOD_CCN > 0
-!
-!!!!!!!!!!!!!!!!
-! IFN properties
-!!!!!!!!!!!!!!!!
-!
-IF ( NMOD_IFN .GE. 1 ) THEN
-  SELECT CASE (CIFN_SPECIES)
-   CASE ('MOCAGE')
-         NSPECIE = 4
-         IF (.NOT.(ALLOCATED(XMDIAM_IFN))) ALLOCATE(XMDIAM_IFN(NSPECIE))
-         IF (.NOT.(ALLOCATED(XSIGMA_IFN))) ALLOCATE(XSIGMA_IFN(NSPECIE))
-         IF (.NOT.(ALLOCATED(XRHO_IFN)))   ALLOCATE(XRHO_IFN(NSPECIE))
-         XMDIAM_IFN = (/ 0.05E-6 , 3.E-6 , 0.016E-6 , 0.016E-6 /)
-         XSIGMA_IFN = (/ 2.4 , 1.6 , 2.5 , 2.5 /)
-         XRHO_IFN   = (/ 2650. , 2650. , 1000. , 1000. /)
-   CASE ('MACC_JPP')
-! sea-salt, sulfate, hydrophilic (GADS data)
-! 2 species, dust-metallic and hydrophobic (as BC)
-! (Phillips et al. 2013 and GADS data)
-      NSPECIE = 4 ! DM1, DM2, BC, BIO+(O)
-      IF (.NOT.(ALLOCATED(XMDIAM_IFN))) ALLOCATE(XMDIAM_IFN(NSPECIE))
-      IF (.NOT.(ALLOCATED(XSIGMA_IFN))) ALLOCATE(XSIGMA_IFN(NSPECIE))
-      IF (.NOT.(ALLOCATED(XRHO_IFN)))   ALLOCATE(XRHO_IFN(NSPECIE))
-      XMDIAM_IFN = (/0.8E-6, 3.0E-6, 0.025E-6, 0.2E-6/)
-      XSIGMA_IFN = (/2.0, 2.15, 2.0, 1.6 /)
-      XRHO_IFN   = (/2600., 2600., 1000., 1500./) 
-   CASE DEFAULT
-      IF (NPHILLIPS == 8) THEN
-! 4 species, according to Phillips et al. 2008
-         NSPECIE = 4
-         IF (.NOT.(ALLOCATED(XMDIAM_IFN))) ALLOCATE(XMDIAM_IFN(NSPECIE))
-         IF (.NOT.(ALLOCATED(XSIGMA_IFN))) ALLOCATE(XSIGMA_IFN(NSPECIE))
-         IF (.NOT.(ALLOCATED(XRHO_IFN)))   ALLOCATE(XRHO_IFN(NSPECIE))
-         XMDIAM_IFN = (/0.8E-6, 3.0E-6, 0.2E-6, 0.2E-6/)
-         XSIGMA_IFN = (/1.9, 1.6, 1.6, 1.6 /)
-         XRHO_IFN   = (/2300., 2300., 1860., 1500./)
-      ELSE IF (NPHILLIPS == 13) THEN
-! 4 species, according to Phillips et al. 2013
-         NSPECIE = 4
-         IF (.NOT.(ALLOCATED(XMDIAM_IFN))) ALLOCATE(XMDIAM_IFN(NSPECIE))
-         IF (.NOT.(ALLOCATED(XSIGMA_IFN))) ALLOCATE(XSIGMA_IFN(NSPECIE))
-         IF (.NOT.(ALLOCATED(XRHO_IFN)))   ALLOCATE(XRHO_IFN(NSPECIE))
-         XMDIAM_IFN = (/0.8E-6, 3.0E-6, 90.E-9, 0.163E-6/)
-         XSIGMA_IFN = (/1.9, 1.6, 1.6, 2.54 /)
-         XRHO_IFN   = (/2300., 2300., 1860., 1000./)
-      END IF
-   ENDSELECT
-!
-! internal mixing
-!
-   IF (.NOT.(ALLOCATED(XFRAC))) ALLOCATE(XFRAC(NSPECIE,NMOD_IFN))
-   XFRAC(:,:)=0. 
-   SELECT CASE (CINT_MIXING)
-   CASE ('DM1')
-      XFRAC(1,:)=1.
-   CASE ('DM2')
-      XFRAC(2,:)=1.
-   CASE ('BC')
-      XFRAC(3,:)=1.
-   CASE ('O')
-      XFRAC(4,:)=1.
-   CASE ('MACC')
-      XFRAC(1,1)=0.99
-      XFRAC(2,1)=0.01
-      XFRAC(3,1)=0.
-      XFRAC(4,1)=0.
-      XFRAC(1,2)=0.
-      XFRAC(2,2)=0.
-      XFRAC(3,2)=0.5
-      XFRAC(4,2)=0.5
-   CASE ('MACC_JPP')
-      XFRAC(1,1)=1.0
-      XFRAC(2,1)=0.0
-      XFRAC(3,1)=0.0
-      XFRAC(4,1)=0.0
-      XFRAC(1,2)=0.0
-      XFRAC(2,2)=0.0
-      XFRAC(3,2)=0.5
-      XFRAC(4,2)=0.5
-   CASE ('MOCAGE')
-      XFRAC(1,1)=1.
-      XFRAC(2,1)=0.
-      XFRAC(3,1)=0.
-      XFRAC(4,1)=0.
-      XFRAC(1,2)=0.
-      XFRAC(2,2)=0.
-      XFRAC(3,2)=0.7
-      XFRAC(4,2)=0.3
-   CASE DEFAULT
-      XFRAC(1,:)=0.6
-      XFRAC(2,:)=0.009
-      XFRAC(3,:)=0.33
-      XFRAC(4,:)=0.06
-   ENDSELECT
-!
-! Phillips 08 alpha (table 1) 
-   IF (.NOT.(ALLOCATED(XFRAC_REF))) ALLOCATE(XFRAC_REF(4))
-      IF (NPHILLIPS == 13) THEN
-         XFRAC_REF(1)=0.66
-         XFRAC_REF(2)=0.66
-         XFRAC_REF(3)=0.31
-         XFRAC_REF(4)=0.03
-      ELSE IF (NPHILLIPS == 8) THEN
-         XFRAC_REF(1)=0.66
-         XFRAC_REF(2)=0.66
-         XFRAC_REF(3)=0.28
-         XFRAC_REF(4)=0.06
-      END IF
-!
-! Immersion modes
-!
-   IF (.NOT.(ALLOCATED(NIMM))) ALLOCATE(NIMM(NMOD_CCN))
-   NIMM(:)=0
-   IF (ALLOCATED(NINDICE_CCN_IMM)) DEALLOCATE(NINDICE_CCN_IMM)
-   ALLOCATE(NINDICE_CCN_IMM(MAX(1,NMOD_IMM)))
-   IF (NMOD_IMM .GE. 1) THEN
-      DO J = 0, NMOD_IMM-1
-         NIMM(NMOD_CCN-J)=1
-         NINDICE_CCN_IMM(NMOD_IMM-J) = NMOD_CCN-J
-      END DO
-!   ELSE IF (NMOD_IMM == 0) THEN ! PNIS existe mais vaut 0, pour l'appel à resolved_cloud
-!      NMOD_IMM = 1
-!      NINDICE_CCN_IMM(1) = 0
-   END IF
-!
-END IF ! NMOD_IFN > 0
-! 
-END SUBROUTINE INIT_AEROSOL_PROPERTIES
diff --git a/src/arome/micro/lima.F90 b/src/arome/micro/lima.F90
deleted file mode 100644
index a96c98099c5846f08e8e395d74c36031ad50bdcb..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima.F90
+++ /dev/null
@@ -1,1806 +0,0 @@
-!      ######spl
-MODULE MODI_LIMA
-!      ####################
-!
-INTERFACE
-!
-SUBROUTINE LIMA ( PTSTEP, HFMFILE, OCLOSE_OUT,                    &
-                  PRHODREF, PEXNREF, PZZ,                         &
-                  PRHODJ, PPABST,                                 &
-                  NCCN, NIFN, NIMM,                               &
-                  PTHM, PTHT, PRT, PSVT, PW_NU,                   &
-                  PTHS, PRS, PSVS,                                &
-                  PINPRC, PINPRR, PINPRI, PINPRS, PINPRG, PINPRH, &
-                  PEVAP3D, &
-                  KSPLITR, KSPLITG, YDDDH, YDLDDH, YDMDDH                                         )
-!
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-REAL,                     INTENT(IN)    :: PTSTEP     ! Time step
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE    ! Name of the output FM-file
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of output
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF   ! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF    ! Reference Exner function
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ        ! Layer thikness (m)
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ     ! Dry density * Jacobian
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST     ! absolute pressure at t
-!
-INTEGER,                  INTENT(IN)    :: NCCN       ! for array size declarations
-INTEGER,                  INTENT(IN)    :: NIFN       ! for array size declarations
-INTEGER,                  INTENT(IN)    :: NIMM       ! for array size declarations
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHM       ! Theta at time t-dt
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT       ! Theta at time t
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT        ! Mixing ratios at time t
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT       ! Concentrations at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PW_NU      ! w for CCN activation
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS       ! Theta source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS        ! Mixing ratios sources
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS       ! Concentrations sources
-!
-REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRC     ! Cloud instant precip
-REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRR     ! Rain instant precip
-REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRI     ! Rain instant precip
-REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRS     ! Snow instant precip
-REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRG     ! Graupel instant precip
-REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRH     ! Rain instant precip
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PEVAP3D    ! Rain evap profile
-!
-INTEGER,                  INTENT(IN)    :: KSPLITR    
-INTEGER,                  INTENT(IN)    :: KSPLITG   
-!
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-!
-END SUBROUTINE LIMA
-END INTERFACE
-END MODULE MODI_LIMA
-!
-!
-!     ######spl
-      SUBROUTINE LIMA ( PTSTEP, HFMFILE, OCLOSE_OUT,                    &
-                        PRHODREF, PEXNREF, PZZ,                         &
-                        PRHODJ, PPABST,                                 &
-                        NCCN, NIFN, NIMM,                               &
-                        PTHM, PTHT, PRT, PSVT, PW_NU,                   &
-                        PTHS, PRS, PSVS,                                &
-                        PINPRC, PINPRR, PINPRI, PINPRS, PINPRG, PINPRH, &
-                        PEVAP3D, &
-                        KSPLITR, KSPLITG, YDDDH, YDLDDH, YDMDDH                                         )
-!     ######################################################################
-!
-!!    PURPOSE
-!!    -------
-!!      Compute explicit microphysical sources using the 2-moment scheme LIMA     
-!!
-!!    REFERENCE
-!!    ---------
-!!      Vié et al. (GMD, 2016)
-!!      Meso-NH scientific documentation
-!!
-!!    AUTHOR
-!!    ------
-!!      B. Vié 
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original   ??/??/??
-!!
-!!
-!!
-!*       0.    DECLARATIONS
-!              ------------
-USE MODD_PARAMETERS,     ONLY : JPHEXT, JPVEXT
-USE MODD_PARAM_ICE,      ONLY : NMAXITER, LFEEDBACKT,XMRSTEP, XTSTEP_TS
-USE MODD_PARAM_LIMA,     ONLY : LCOLD_LIMA, LRAIN_LIMA, LWARM_LIMA, NMOD_CCN, NMOD_IFN, NMOD_IMM, LHHONI_LIMA,      &
-                                XRTMIN, LACTIT_LIMA,       &
-                                LSEDC_LIMA, LSEDI_LIMA, XRTMIN, XCTMIN
-USE MODD_PARAM_LIMA_WARM,ONLY : XLBC, XLBEXC
-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_CCN_ACTI, &
-                                NSV_LIMA_SCAVMASS, NSV_LIMA_NI, NSV_LIMA_IFN_FREE,              &
-                                NSV_LIMA_IFN_NUCL, NSV_LIMA_IMM_NUCL, NSV_LIMA_HOM_HAZE
-USE MODD_CST,            ONLY : XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XTT
-!
-USE MODE_BUDGET, ONLY: BUDGET_DDH
-USE MODI_LIMA_FUNCTIONS, ONLY : COUNTJV
-USE MODI_LIMA_WARM_SEDIMENTATION
-USE MODI_LIMA_COLD_SEDIMENTATION
-USE MODI_LIMA_NUCLEATION_PROCS
-USE MODI_LIMA_INST_PROCS
-USE MODI_LIMA_TENDENCIES
-!
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-REAL,                     INTENT(IN)    :: PTSTEP     ! Time step
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE    ! Name of the output FM-file
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of output
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF   ! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF    ! Reference Exner function
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ        ! Layer thikness (m)
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ     ! Dry density * Jacobian
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST     ! absolute pressure at t
-!
-INTEGER,                  INTENT(IN)    :: NCCN       ! for array size declarations
-INTEGER,                  INTENT(IN)    :: NIFN       ! for array size declarations
-INTEGER,                  INTENT(IN)    :: NIMM       ! for array size declarations
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHM       ! Theta at time t-dt
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT       ! Theta at time t
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT        ! Mixing ratios at time t
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT       ! Concentrations at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PW_NU      ! w for CCN activation
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS       ! Theta source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS        ! Mixing ratios sources
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS       ! Concentrations sources
-!
-REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRC     ! Cloud instant precip
-REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRR     ! Rain instant precip
-REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRI     ! Rain instant precip
-REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRS     ! Snow instant precip
-REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRG     ! Graupel instant precip
-REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRH     ! Rain instant precip
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PEVAP3D    ! Rain evap profile
-!
-INTEGER,                  INTENT(IN)    :: KSPLITR    
-INTEGER,                  INTENT(IN)    :: KSPLITG   
-!
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-!
-!*       0.2   Declarations of local variables :
-!
-!
-! Prognostic variables and sources
-REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: ZTHT, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, ZRHT
-REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: ZCCT, ZCRT, ZCIT
-REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: ZTHS, ZRVS, ZRCS, ZRRS, ZRIS, ZRSS, ZRGS, ZRHS
-REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: ZCCS, ZCRS, ZCIS
-REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NCCN) :: ZCCNFT, ZCCNAT
-REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NCCN) :: ZCCNFS, ZCCNAS
-REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NIFN) :: ZIFNFT, ZIFNNT
-REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NIFN) :: ZIFNFS, ZIFNNS
-REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NIMM) :: ZIMMNT
-REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NIMM) :: ZIMMNS
-REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: ZHOMFT
-REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: ZHOMFS
-
-!
-! for each process & species, we need variables to store instant tendencies for hydrometeors
-! These are 1D packed variables
-REAL, DIMENSION(:), ALLOCATABLE :: &
-! mixing ratio & concentration changes by instantaneous processes (kg/kg and #/kg) :
-     Z_RC_HENU, Z_CC_HENU, &                                  ! cloud droplet nucleation (HENU) : rc, Nc, rv=-rc, th, CCNF, CCNA
-     Z_CR_BRKU, &                                             ! spontaneous break up of drops (BRKU) : Nr
-     Z_RI_HIND, Z_CI_HIND, &                                  ! heterogeneous IFN nucleation (HIND) : rv=-ri, ri, Ni, th, IFNF, IFNN
-     Z_RC_HINC, Z_CC_HINC, &                                  ! heterogeneous coated IFN nucl. (HINC) : rc, Nc, ri=-rc, Ni=-Nc, th, CCNacti, CCNnucl
-     Z_RI_HONH, Z_CI_HONH, &                                  ! CCN homogeneous freezing (HONH) : ri, Ni, th, CCNF
-     Z_TH_HONR, Z_RR_HONR, Z_CR_HONR, &                                  ! rain drops homogeneous freezing (HONR) : rr, Nr, rg=-rr, th
-     Z_TH_IMLT, Z_RC_IMLT, Z_CC_IMLT, &                                  ! ice melting (IMLT) : rc, Nc, ri=-rc, Ni=-Nc, th, IFNF, IFNA
-! mixing ratio & concentration tendencies by continuous processes (kg/kg/s and #/kg/s) :
-     Z_TH_HONC, Z_RC_HONC, Z_CC_HONC, &                                  ! droplets homogeneous freezing (HONC) : rc, Nc, ri=-rc, Ni=-Nc, th
-     Z_CC_SELF, &                                             ! self collection of droplets (SELF) : Nc
-     Z_RC_AUTO, Z_CC_AUTO, Z_CR_AUTO, &                       ! autoconversion of cloud droplets (AUTO) : rc, Nc, rr=-rc, Nr
-     Z_RC_ACCR, Z_CC_ACCR, &                                  ! accretion of droplets by rain drops (ACCR) : rc, Nc, rr=-rr
-     Z_CR_SCBU, &                                             ! self collectio break up of drops (SCBU) : Nr
-     Z_TH_EVAP, Z_RC_EVAP, Z_CC_EVAP, Z_RR_EVAP, Z_CR_EVAP, &            ! evaporation of rain drops (EVAP) : rv=-rr-rc, rc, Nc, rr, Nr, th
-     Z_RI_CNVI, Z_CI_CNVI, &                                  ! conversion snow -> ice (CNVI) : ri, Ni, rs=-ri
-     Z_TH_DEPS, Z_RS_DEPS, &                                             ! deposition of vapor on snow (DEPS) : rv=-rs, rs, th
-     Z_RI_CNVS, Z_CI_CNVS, &                                  ! conversion ice -> snow (CNVS) : ri, Ni, rs=-ri
-     Z_RI_AGGS, Z_CI_AGGS, &                                  ! aggregation of ice on snow (AGGS) : ri, Ni, rs=-ri
-     Z_TH_DEPG, Z_RG_DEPG, &                                             ! deposition of vapor on graupel (DEPG) : rv=-rg, rg, th
-     Z_TH_BERFI, Z_RC_BERFI, &                                            ! Bergeron (BERFI) : rc, ri=-rc, th
-     Z_TH_RIM, Z_RC_RIM, Z_CC_RIM, Z_RS_RIM, Z_RG_RIM,&                 ! cloud droplet riming (RIM) : rc, Nc, rs, rg, th
-     Z_RI_HMS, Z_CI_HMS, Z_RS_HMS, &                          ! hallett mossop snow (HMS) : ri, Ni, rs
-     Z_TH_ACC, Z_RR_ACC, Z_CR_ACC, Z_RS_ACC, Z_RG_ACC, &                ! rain accretion on aggregates (ACC) : rr, Nr, rs, rg, th
-     Z_RS_CMEL, &                                             ! conversion-melting (CMEL) : rs, rg=-rs
-     Z_TH_CFRZ, Z_RR_CFRZ, Z_CR_CFRZ, Z_RI_CFRZ, Z_CI_CFRZ, &            ! rain freezing (CFRZ) : rr, Nr, ri, Ni, rg=-rr-ri, th
-     Z_TH_WETG, Z_RC_WETG, Z_CC_WETG, Z_RR_WETG, Z_CR_WETG, &            ! wet growth of graupel (WETG) : rc, NC, rr, Nr, ri, Ni, rs, rg, rh, th
-     Z_RI_WETG, Z_CI_WETG, Z_RS_WETG, Z_RG_WETG, Z_RH_WETG, & ! wet growth of graupel (WETG) : rc, NC, rr, Nr, ri, Ni, rs, rg, rh, th
-     Z_TH_DRYG, Z_RC_DRYG, Z_CC_DRYG, Z_RR_DRYG, Z_CR_DRYG, &            ! dry growth of graupel (DRYG) : rc, Nc, rr, Nr, ri, Ni, rs, rg, th
-     Z_RI_DRYG, Z_CI_DRYG, Z_RS_DRYG, Z_RG_DRYG, &            ! dry growth of graupel (DRYG) : rc, Nc, rr, Nr, ri, Ni, rs, rg, th
-     Z_RI_HMG, Z_CI_HMG, Z_RG_HMG, &                          ! hallett mossop graupel (HMG) : ri, Ni, rg
-     Z_TH_GMLT, Z_RR_GMLT, Z_CR_GMLT, &                                  ! graupel melting (GMLT) : rr, Nr, rg=-rr, th
-     Z_RC_WETH, Z_CC_WETH, Z_RR_WETH, Z_CR_WETH,  &           ! wet growth of hail (WETH) : rc, Nc, rr, Nr, ri, Ni, rs, rg, rh, th
-     Z_RI_WETH, Z_CI_WETH, Z_RS_WETH, Z_RG_WETH, Z_RH_WETH, & ! wet growth of hail (WETH) : rc, Nc, rr, Nr, ri, Ni, rs, rg, rh, th
-     Z_RG_COHG, &                                             ! conversion of hail into graupel (COHG) : rg, rh
-     Z_RR_HMLT, Z_CR_HMLT                                     ! hail melting (HMLT) : rr, Nr, rh=-rr, th
-!
-!
-! for each process & species, we need variables to store total mmr and conc change (kg/kg and #/kg and theta)
-REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) :: &
-! instantaneous processes :
-     ZTOT_RC_HENU, ZTOT_CC_HENU, & ! cloud droplet nucleation (HENU) : rc, Nc, rv=-rc, th, CCNF, CCNA
-     ZTOT_CR_BRKU,               & ! spontaneous break up of drops (BRKU) : Nr
-     ZTOT_RI_HIND, ZTOT_CI_HIND, & ! heterogeneous IFN nucleation (HIND) : rv=-ri, ri, Ni, th, IFNF, IFNN
-     ZTOT_RC_HINC, ZTOT_CC_HINC, & ! heterogeneous coated IFN nucl. (HINC) : rc, Nc, ri=-rc, Ni=-Nc, th, CCNacti, CCNnucl
-     ZTOT_RI_HONH, ZTOT_CI_HONH, & ! CCN homogeneous freezing (HONH) : ri, Ni, th, CCNF
-     ZTOT_TH_HONR, ZTOT_RR_HONR, ZTOT_CR_HONR, & ! rain drops homogeneous freezing (HONR) : rr, Nr, rg=-rr, th
-     ZTOT_TH_IMLT, ZTOT_RC_IMLT, ZTOT_CC_IMLT, & ! ice melting (IMLT) : rc, Nc, ri=-rc, Ni=-Nc, th, IFNF, IFNA
-! continuous processes :
-     ZTOT_TH_HONC, ZTOT_RC_HONC, ZTOT_CC_HONC, & ! droplets homogeneous freezing (HONC) : rc, Nc, ri=-rc, Ni=-Nc, th
-     ZTOT_CC_SELF,                                                         & ! self collection of droplets (SELF) : Nc
-     ZTOT_RC_AUTO, ZTOT_CC_AUTO, ZTOT_CR_AUTO,                             & ! autoconversion of cloud droplets (AUTO) : rc, Nc, rr=-rc, Nr
-     ZTOT_RC_ACCR, ZTOT_CC_ACCR,                                           & ! accretion of droplets by rain drops (ACCR) : rc, Nc, rr=-rr
-     ZTOT_CR_SCBU,                                                         & ! self collectio break up of drops (SCBU) : Nr
-     ZTOT_TH_EVAP, ZTOT_RC_EVAP, ZTOT_CC_EVAP, ZTOT_RR_EVAP, ZTOT_CR_EVAP,               & ! evaporation of rain drops (EVAP) : rv=-rr-rc, rc, Nc, rr, Nr, th
-     ZTOT_RI_CNVI, ZTOT_CI_CNVI,                                           & ! conversion snow -> ice (CNVI) : ri, Ni, rs=-ri
-     ZTOT_TH_DEPS, ZTOT_RS_DEPS,                                                         & ! deposition of vapor on snow (DEPS) : rv=-rs, rs, th
-     ZTOT_RI_CNVS, ZTOT_CI_CNVS,                                           & ! conversion ice -> snow (CNVS) : ri, Ni, rs=-ri
-     ZTOT_RI_AGGS, ZTOT_CI_AGGS,                                           & ! aggregation of ice on snow (AGGS) : ri, Ni, rs=-ri
-     ZTOT_TH_DEPG, ZTOT_RG_DEPG,                                                         & ! deposition of vapor on graupel (DEPG) : rv=-rg, rg, th
-     ZTOT_TH_BERFI, ZTOT_RC_BERFI,                                                        & ! Bergeron (BERFI) : rc, ri=-rc, th
-     ZTOT_TH_RIM, ZTOT_RC_RIM, ZTOT_CC_RIM, ZTOT_RS_RIM, ZTOT_RG_RIM,                   & ! cloud droplet riming (RIM) : rc, Nc, rs, rg, th
-     ZTOT_RI_HMS, ZTOT_CI_HMS, ZTOT_RS_HMS,                                & ! hallett mossop snow (HMS) : ri, Ni, rs
-     ZTOT_TH_ACC, ZTOT_RR_ACC, ZTOT_CR_ACC, ZTOT_RS_ACC, ZTOT_RG_ACC,                   & ! rain accretion on aggregates (ACC) : rr, Nr, rs, rg, th
-     ZTOT_RS_CMEL,                                                         & ! conversion-melting (CMEL) : rs, rg=-rs
-     ZTOT_TH_CFRZ, ZTOT_RR_CFRZ, ZTOT_CR_CFRZ, ZTOT_RI_CFRZ, ZTOT_CI_CFRZ,               & ! rain freezing (CFRZ) : rr, Nr, ri, Ni, rg=-rr-ri, th
-     ZTOT_TH_WETG, ZTOT_RC_WETG, ZTOT_CC_WETG, ZTOT_RR_WETG, ZTOT_CR_WETG,               & ! wet growth of graupel (WETG) : rc, NC, rr, Nr, ri, Ni, rs, rg, rh, th
-     ZTOT_RI_WETG, ZTOT_CI_WETG, ZTOT_RS_WETG, ZTOT_RG_WETG, ZTOT_RH_WETG, & ! wet growth of graupel (WETG) : rc, NC, rr, Nr, ri, Ni, rs, rg, rh, th
-     ZTOT_TH_DRYG, ZTOT_RC_DRYG, ZTOT_CC_DRYG, ZTOT_RR_DRYG, ZTOT_CR_DRYG,               & ! dry growth of graupel (DRYG) : rc, Nc, rr, Nr, ri, Ni, rs, rg, th
-     ZTOT_RI_DRYG, ZTOT_CI_DRYG, ZTOT_RS_DRYG, ZTOT_RG_DRYG,               & ! dry growth of graupel (DRYG) : rc, Nc, rr, Nr, ri, Ni, rs, rg, th
-     ZTOT_RI_HMG, ZTOT_CI_HMG, ZTOT_RG_HMG,                                & ! hallett mossop graupel (HMG) : ri, Ni, rg
-     ZTOT_TH_GMLT, ZTOT_RR_GMLT, ZTOT_CR_GMLT,                                           & ! graupel melting (GMLT) : rr, Nr, rg=-rr, th
-     ZTOT_RC_WETH, ZTOT_CC_WETH, ZTOT_RR_WETH, ZTOT_CR_WETH,               & ! wet growth of hail (WETH) : rc, Nc, rr, Nr, ri, Ni, rs, rg, rh, th
-     ZTOT_RI_WETH, ZTOT_CI_WETH, ZTOT_RS_WETH, ZTOT_RG_WETH, ZTOT_RH_WETH, & ! wet growth of hail (WETH) : rc, Nc, rr, Nr, ri, Ni, rs, rg, rh, th
-     ZTOT_RG_COHG,                                                         & ! conversion of hail into graupel (COHG) : rg, rh
-     ZTOT_RR_HMLT, ZTOT_CR_HMLT                                              ! hail melting (HMLT) : rr, Nr, rh=-rr, th
-!
-!
-! concentration changes by instantaneous processes (#/kg) (instant + total):
-! Unused so far, necessary if we want detailed budgets of aerosols
-!!$REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NCCN) :: &
-!!$     Z_CCNF_HENU, ZTOT_CCNF_HENU, & ! cloud droplet nucleation (HENU) : rc, Nc, rv=-rc, th, CCNF, CCNA=-CCNF
-!!$     Z_CCNA_HINC, ZTOT_CCNA_HINC, & ! heterogeneous coated IFN nucl. (HINC) : rc, Nc, ri=-rc, Ni=-Nc, th, CCNacti, CCNnucl=-CCNacti
-!!$     Z_CCNF_HONH, ZTOT_CCNF_HONH    ! CCN homogeneous freezing (HONH) : ri, Ni, th, CCNF
-!!$REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NIFN) :: &
-!!$     Z_IFNF_HIND, ZTOT_IFNF_HIND, & ! heterogeneous IFN nucleation (HIND) : rv=-ri, ri, Ni, th, IFNF, IFNN=-IFNF
-!!$     Z_IFNF_IMLT, ZTOT_IFNF_IMLT    ! ice melting (IMLT) : rc, Nc, ri=-rc, Ni=-Nc, th, IFNF, IFNA=-IFNF
-!
-!
-!For mixing-ratio splitting
-REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: &
-     Z0RVT,        &   ! Water vapor m.r. at the beginig of the current loop
-     Z0RCT, Z0CCT, &   ! Cloud water m.r. at the beginig of the current loop
-     Z0RRT, Z0CRT, &   ! Rain water m.r. at the beginig of the current loop
-     Z0RIT, Z0CIT, &   ! Pristine ice m.r. at the beginig of the current loop
-     Z0RST,        &   ! Snow/aggregate m.r. at the beginig of the current loop
-     Z0RGT,        &   ! Graupel m.r. at the beginig of the current loop
-     Z0RHT             ! Hail m.r. at the beginig of the current loop
-! Unused, necessary if concentration splitting
-!!$REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NCCN) :: Z0CCNFT, Z0CCNAT
-!!$REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NIFN) :: Z0IFNFT, Z0IFNNT
-!!$REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NIMM) :: Z0IMMNT
-!!$REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3))      :: Z0HOMFT
-!
-! Packed variables for total tendencies
-REAL, DIMENSION(:),   ALLOCATABLE :: &
-     ZA_TH, ZA_RV, ZA_RC, ZA_CC, ZA_RR, ZA_CR, ZA_RI, ZA_CI, ZA_RS, ZA_RG, ZA_RH, & ! ZA = continuous tendencies (kg/kg/s = S variable)
-     ZB_TH, ZB_RV, ZB_RC, ZB_CC, ZB_RR, ZB_CR, ZB_RI, ZB_CI, ZB_RS, ZB_RG, ZB_RH    ! ZB = instant mixing ratio change (kg/kg = T variable)
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZB_IFNN
-!
-REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: &
-     IITER,           & ! Number of iterations done (with real tendencies computation)
-     ZTIME,           & ! Current integration time (starts with 0 and ends with PTSTEP)
-!     ZMAXTIME,        & ! Time on which we can apply the current tendencies
-!     ZTIME_THRESHOLD, & ! Time to reach threshold
-     ZTIME_LASTCALL     ! Integration time when last tendecies call has been done
-LOGICAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: &
-     LLCOMPUTE          ! Points where we must compute tendencies
-REAL, DIMENSION(:), ALLOCATABLE :: ZMAXTIME, ZTIME_THRESHOLD
-!
-!
-! Various parameters
-INTEGER :: IIB           !  Define the domain where is
-INTEGER :: IIE           !  the microphysical sources have to be computed
-INTEGER :: IIT           !
-INTEGER :: IJB           !
-INTEGER :: IJE           !
-INTEGER :: IJT           !
-INTEGER :: IKB, IKTB, IKT!
-INTEGER :: IKE, IKTE     !
-INTEGER :: INB_ITER_MAX ! Maximum number of iterations (with real tendencies computation)
-!
-REAL :: ZTSTEP ! length of sub-timestep in case of time splitting
-REAL :: ZINV_TSTEP ! Inverse ov PTSTEP
-!
-!
-! For total tendencies computation
-REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: &
-     ZW_RVS, &
-     ZW_RCS, ZW_CCS, &
-     ZW_RRS, ZW_CRS, &
-     ZW_RIS, ZW_CIS, &
-     ZW_RSS, &
-     ZW_RGS, &
-     ZW_RHS, &
-     ZW_THS
-REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NCCN) :: ZW_CCNFS, ZW_CCNAS
-REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NIFN) :: ZW_IFNFS, ZW_IFNNS
-REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),NIMM) :: ZW_IMMNS
-REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: ZW_HOMFS
-!
-REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: &
-     PEXN, &
-     PDZZ, &
-     ZEXN, &
-     ZT, &
-     ZTM, &
-     ZZ_LSFACT, &
-     ZZ_LVFACT, &
-     ZZT, &
-     ZLSFACT, &
-     ZLVFACT, &
-     ZW1, &
-     ZLBDC
-!
-INTEGER :: KRR, &
-     KKA, & ! near ground array index
-     KKU, & ! highest level array index
-     KKL, & ! levels ordering (=1 for MNH, =-1 for AROME)
-     II     ! index for loops
-!
-LOGICAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: MASK ! Points where we must run the microphysics scheme
-REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: ZRT_SUM ! Total condensed water mr
-INTEGER :: IPACK
-INTEGER, DIMENSION(:), ALLOCATABLE :: I1, I2, I3
-REAL, DIMENSION(:), ALLOCATABLE :: &
-     ZTHT1D, &
-     ZRVT1D, &
-     ZRCT1D, &
-     ZRRT1D, &
-     ZRIT1D, &
-     ZRST1D, &
-     ZRGT1D, &
-     ZRHT1D, &
-     ZCCT1D, &
-     ZCRT1D, &
-     ZCIT1D, &
-     ZP1D,   &
-     ZRHODREF1D, &
-     ZEXNREF1D, &
-     ZEXN1D, &
-     ZEVAP1D, &
-     ZTIME1D, &
-     IITER1D, &
-     ZTIME_LASTCALL1D, &
-     Z0RVT1D, &
-     Z0RCT1D, &
-     Z0RRT1D, &
-     Z0RIT1D, &
-     Z0RST1D, &
-     Z0RGT1D, &
-     Z0RHT1D 
-LOGICAL, DIMENSION(:), ALLOCATABLE :: LLCOMPUTE1D
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZIFNN1D    
-!-------------------------------------------------------------------------------
-!
-!*       0.     Init
-!               ----
-!
-ZTHS(:,:,:) = PTHS(:,:,:)
-ZTHT(:,:,:) = PTHS(:,:,:) * PTSTEP
-ZRVT(:,:,:) = 0.
-ZRVS(:,:,:) = 0.
-ZRCT(:,:,:) = 0.
-ZRCS(:,:,:) = 0.
-ZRRT(:,:,:) = 0.
-ZRRS(:,:,:) = 0.
-ZRIT(:,:,:) = 0.
-ZRIS(:,:,:) = 0.
-ZRST(:,:,:) = 0.
-ZRSS(:,:,:) = 0.
-ZRGT(:,:,:) = 0.
-ZRGS(:,:,:) = 0.
-ZRHT(:,:,:) = 0.
-ZRHS(:,:,:) = 0.
-ZRT_SUM(:,:,:) = 0.
-ZCCT(:,:,:)   = 0.
-ZCCS(:,:,:)   = 0.
-ZCRT(:,:,:)   = 0.
-ZCRS(:,:,:)   = 0.
-ZCIT(:,:,:)   = 0.
-ZCIS(:,:,:)   = 0.
-ZCCNFT(:,:,:,:) = 0.
-ZCCNAT(:,:,:,:) = 0.
-ZCCNFS(:,:,:,:) = 0.
-ZCCNAS(:,:,:,:) = 0.
-ZIFNFT(:,:,:,:) = 0.
-ZIFNNT(:,:,:,:) = 0.
-ZIFNFS(:,:,:,:) = 0.
-ZIFNNS(:,:,:,:) = 0.
-ZIMMNT(:,:,:,:) = 0.
-ZIMMNS(:,:,:,:) = 0.
-ZHOMFT(:,:,:)   = 0.
-ZHOMFS(:,:,:)   = 0.
-
-IF(LBU_ENABLE) THEN
-     ZTOT_CR_BRKU(:,:,:) = 0.
-     ZTOT_TH_HONR(:,:,:) = 0.
-     ZTOT_RR_HONR(:,:,:) = 0.
-     ZTOT_CR_HONR(:,:,:) = 0.
-     ZTOT_TH_IMLT(:,:,:) = 0.
-     ZTOT_RC_IMLT(:,:,:) = 0.
-     ZTOT_CC_IMLT(:,:,:) = 0.
-     ZTOT_TH_HONC(:,:,:) = 0.
-     ZTOT_RC_HONC(:,:,:) = 0.
-     ZTOT_CC_HONC(:,:,:) = 0.
-     ZTOT_CC_SELF(:,:,:) = 0.
-     ZTOT_RC_AUTO(:,:,:) = 0.
-     ZTOT_CC_AUTO(:,:,:) = 0.
-     ZTOT_CR_AUTO(:,:,:) = 0.
-     ZTOT_RC_ACCR(:,:,:) = 0.
-     ZTOT_CC_ACCR(:,:,:) = 0.
-     ZTOT_CR_SCBU(:,:,:) = 0.
-     ZTOT_TH_EVAP(:,:,:) = 0.
-     ZTOT_RC_EVAP(:,:,:) = 0.
-     ZTOT_CC_EVAP(:,:,:) = 0.
-     ZTOT_RR_EVAP(:,:,:) = 0.
-     ZTOT_CR_EVAP(:,:,:) = 0.
-     ZTOT_RI_CNVI(:,:,:) = 0.
-     ZTOT_CI_CNVI(:,:,:) = 0.
-     ZTOT_TH_DEPS(:,:,:) = 0.
-     ZTOT_RS_DEPS(:,:,:) = 0.
-     ZTOT_RI_CNVS(:,:,:) = 0.
-     ZTOT_CI_CNVS(:,:,:) = 0.
-     ZTOT_RI_AGGS(:,:,:) = 0.
-     ZTOT_CI_AGGS(:,:,:) = 0.
-     ZTOT_TH_DEPG(:,:,:) = 0.
-     ZTOT_RG_DEPG(:,:,:) = 0.
-     ZTOT_TH_BERFI(:,:,:) = 0.
-     ZTOT_RC_BERFI(:,:,:) = 0.
-     ZTOT_TH_RIM(:,:,:) = 0.
-     ZTOT_RC_RIM(:,:,:) = 0.
-     ZTOT_CC_RIM(:,:,:) = 0.
-     ZTOT_RS_RIM(:,:,:) = 0.
-     ZTOT_RG_RIM(:,:,:) = 0.
-     ZTOT_RI_HMS(:,:,:) = 0.
-     ZTOT_CI_HMS(:,:,:) = 0.
-     ZTOT_RS_HMS(:,:,:) = 0.
-     ZTOT_TH_ACC(:,:,:) = 0.
-     ZTOT_RR_ACC(:,:,:) = 0.
-     ZTOT_CR_ACC(:,:,:) = 0.
-     ZTOT_RS_ACC(:,:,:) = 0.
-     ZTOT_RG_ACC(:,:,:) = 0.
-     ZTOT_RS_CMEL(:,:,:) = 0.
-     ZTOT_TH_CFRZ(:,:,:) = 0.
-     ZTOT_RR_CFRZ(:,:,:) = 0.
-     ZTOT_CR_CFRZ(:,:,:) = 0.
-     ZTOT_RI_CFRZ(:,:,:) = 0.
-     ZTOT_CI_CFRZ(:,:,:) = 0.
-     ZTOT_TH_WETG(:,:,:) = 0.
-     ZTOT_RC_WETG(:,:,:) = 0.
-     ZTOT_CC_WETG(:,:,:) = 0.
-     ZTOT_RR_WETG(:,:,:) = 0.
-     ZTOT_CR_WETG(:,:,:) = 0.
-     ZTOT_RI_WETG(:,:,:) = 0.
-     ZTOT_CI_WETG(:,:,:) = 0.
-     ZTOT_RS_WETG(:,:,:) = 0.
-     ZTOT_RG_WETG(:,:,:) = 0.
-     ZTOT_RH_WETG(:,:,:) = 0.
-     ZTOT_TH_DRYG(:,:,:) = 0.
-     ZTOT_RC_DRYG(:,:,:) = 0.
-     ZTOT_CC_DRYG(:,:,:) = 0.
-     ZTOT_RR_DRYG(:,:,:) = 0.
-     ZTOT_CR_DRYG(:,:,:) = 0.
-     ZTOT_RI_DRYG(:,:,:) = 0.
-     ZTOT_CI_DRYG(:,:,:) = 0.
-     ZTOT_RS_DRYG(:,:,:) = 0.
-     ZTOT_RG_DRYG(:,:,:) = 0.
-     ZTOT_RI_HMG(:,:,:) = 0.
-     ZTOT_CI_HMG(:,:,:) = 0.
-     ZTOT_RG_HMG(:,:,:) = 0.
-     ZTOT_TH_GMLT(:,:,:) = 0.
-     ZTOT_RR_GMLT(:,:,:) = 0.
-     ZTOT_CR_GMLT(:,:,:) = 0.
-     ZTOT_RC_WETH(:,:,:) = 0.
-     ZTOT_CC_WETH(:,:,:) = 0.
-     ZTOT_RR_WETH(:,:,:) = 0.
-     ZTOT_CR_WETH(:,:,:) = 0.
-     ZTOT_RI_WETH(:,:,:) = 0.
-     ZTOT_CI_WETH(:,:,:) = 0.
-     ZTOT_RS_WETH(:,:,:) = 0.
-     ZTOT_RG_WETH(:,:,:) = 0.
-     ZTOT_RH_WETH(:,:,:) = 0.
-     ZTOT_RG_COHG(:,:,:) = 0.
-     ZTOT_RR_HMLT(:,:,:) = 0.
-     ZTOT_CR_HMLT(:,:,:) = 0.
-END IF
-!
-! Initial values computed as source * PTSTEP
-!
-! Mixing ratios
-!
-KRR=SIZE(PRT,4)
-ZRVT(:,:,:) = PRS(:,:,:,1) * PTSTEP
-ZRVS(:,:,:) = PRS(:,:,:,1)
-IF ( KRR .GE. 2 ) ZRCT(:,:,:) = PRS(:,:,:,2) * PTSTEP
-IF ( KRR .GE. 2 ) ZRCS(:,:,:) = PRS(:,:,:,2)
-IF ( KRR .GE. 3 ) ZRRT(:,:,:) = PRS(:,:,:,3) * PTSTEP
-IF ( KRR .GE. 3 ) ZRRS(:,:,:) = PRS(:,:,:,3)
-IF ( KRR .GE. 4 ) ZRIT(:,:,:) = PRS(:,:,:,4) * PTSTEP
-IF ( KRR .GE. 4 ) ZRIS(:,:,:) = PRS(:,:,:,4)
-IF ( KRR .GE. 5 ) ZRST(:,:,:) = PRS(:,:,:,5) * PTSTEP
-IF ( KRR .GE. 5 ) ZRSS(:,:,:) = PRS(:,:,:,5)
-IF ( KRR .GE. 6 ) ZRGT(:,:,:) = PRS(:,:,:,6) * PTSTEP
-IF ( KRR .GE. 6 ) ZRGS(:,:,:) = PRS(:,:,:,6)
-IF ( KRR .GE. 7 ) ZRHT(:,:,:) = PRS(:,:,:,7) * PTSTEP
-IF ( KRR .GE. 7 ) ZRHS(:,:,:) = PRS(:,:,:,7)
-ZRT_SUM(:,:,:) = ZRCT(:,:,:) + ZRRT(:,:,:) + ZRIT(:,:,:) + ZRST(:,:,:) + ZRGT(:,:,:) + ZRHT(:,:,:)
-!
-! Concentrations
-!
-IF ( LWARM_LIMA )             ZCCT(:,:,:)   = PSVS(:,:,:,NSV_LIMA_NC) * PTSTEP
-IF ( LWARM_LIMA )             ZCCS(:,:,:)   = PSVS(:,:,:,NSV_LIMA_NC)
-IF ( LWARM_LIMA .AND. LRAIN_LIMA ) ZCRT(:,:,:)   = PSVS(:,:,:,NSV_LIMA_NR) * PTSTEP
-IF ( LWARM_LIMA .AND. LRAIN_LIMA ) ZCRS(:,:,:)   = PSVS(:,:,:,NSV_LIMA_NR)
-IF ( LCOLD_LIMA )             ZCIT(:,:,:)   = PSVS(:,:,:,NSV_LIMA_NI) * PTSTEP
-IF ( LCOLD_LIMA )             ZCIS(:,:,:)   = PSVS(:,:,:,NSV_LIMA_NI)
-!
-IF ( NMOD_CCN .GE. 1 )   ZCCNFT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) * PTSTEP
-IF ( NMOD_CCN .GE. 1 )   ZCCNAT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1) * PTSTEP
-IF ( NMOD_CCN .GE. 1 )   ZCCNFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1)
-IF ( NMOD_CCN .GE. 1 )   ZCCNAS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1)
-!
-IF ( NMOD_IFN .GE. 1 )   ZIFNFT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1) * PTSTEP
-IF ( NMOD_IFN .GE. 1 )   ZIFNNT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1) * PTSTEP
-IF ( NMOD_IFN .GE. 1 )   ZIFNFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1)
-IF ( NMOD_IFN .GE. 1 )   ZIFNNS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1)
-!
-IF ( NMOD_IMM .GE. 1 )   ZIMMNT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1) * PTSTEP
-IF ( NMOD_IMM .GE. 1 )   ZIMMNS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1)
-!
-IF ( LCOLD_LIMA .AND. LHHONI_LIMA ) ZHOMFT(:,:,:)  = PSVS(:,:,:,NSV_LIMA_HOM_HAZE) * PTSTEP
-IF ( LCOLD_LIMA .AND. LHHONI_LIMA ) ZHOMFS(:,:,:)  = PSVS(:,:,:,NSV_LIMA_HOM_HAZE)
-!
-!-------------------------------------------------------------------------------
-!
-!*       1.     Sedimentation
-!               -------------
-!
-PEXN(:,:,:)=PEXNREF(:,:,:)
-ZEXN(:,:,:)=PEXNREF(:,:,:)
-ZT(:,:,:)  = ZTHT(:,:,:) * PEXN(:,:,:)
-!
-ZW1(:,:,:)=0.
-ZLBDC(:,:,:)  = 1.E10
-WHERE (ZRCT(:,:,:)>XRTMIN(2) .AND. ZCCT(:,:,:)>XCTMIN(2))
-   ZLBDC(:,:,:) = XLBC*ZCCT(:,:,:) / ZRCT(:,:,:)
-   ZLBDC(:,:,:) = ZLBDC(:,:,:)**XLBEXC
-END WHERE
-CALL LIMA_WARM_SEDIMENTATION (LSEDC_LIMA, KSPLITR, PTSTEP, 1,    &
-                              HFMFILE, 'DUMMY', OCLOSE_OUT,  &
-                              PZZ, PRHODREF, PPABST, ZT,    &
-                              ZLBDC,                        &
-                              ZRCT, ZRRT, ZCCT, ZCRT,       &
-                              ZRCS, ZRRS, ZCCS, ZCRS,       &
-                              PINPRC, PINPRR,               &
-                              ZW1    )
-!
-CALL LIMA_COLD_SEDIMENTATION (LSEDI_LIMA, KSPLITG, PTSTEP, 1,       &
-                              HFMFILE, 'DUMMY', OCLOSE_OUT,     &
-                              PZZ, PRHODJ, PRHODREF,           &
-                              ZRIT, ZCIT,                      &
-                              ZRIS, ZRSS, ZRGS, ZRHS, ZCIS,    &
-                              PINPRS, PINPRG,                  &
-                              PINPRH                  )
-!
-IF ( KRR .GE. 2 ) ZRCT(:,:,:) = ZRCS(:,:,:) * PTSTEP
-IF ( KRR .GE. 3 ) ZRRT(:,:,:) = ZRRS(:,:,:) * PTSTEP
-IF ( KRR .GE. 4 ) ZRIT(:,:,:) = ZRIS(:,:,:) * PTSTEP
-IF ( KRR .GE. 5 ) ZRST(:,:,:) = ZRSS(:,:,:) * PTSTEP
-IF ( KRR .GE. 6 ) ZRGT(:,:,:) = ZRGS(:,:,:) * PTSTEP
-IF ( KRR .GE. 7 ) ZRHT(:,:,:) = ZRHS(:,:,:) * PTSTEP
-ZRT_SUM(:,:,:) = ZRCT(:,:,:) + ZRRT(:,:,:) + ZRIT(:,:,:) + ZRST(:,:,:) + ZRGT(:,:,:) + ZRHT(:,:,:)
-!
-IF ( LWARM_LIMA )             ZCCT(:,:,:)   = ZCCS(:,:,:) * PTSTEP
-IF ( LWARM_LIMA .AND. LRAIN_LIMA ) ZCRT(:,:,:)   = ZCRS(:,:,:) * PTSTEP
-IF ( LCOLD_LIMA )             ZCIT(:,:,:)   = ZCIS(:,:,:) * PTSTEP
-!
-! Call budgets
-!
-IF(LBU_ENABLE) THEN
-  IF (LBUDGET_RC .AND. LSEDC_LIMA) CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'SEDI_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RR)             CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'SEDI_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RI .AND. LSEDI_LIMA) CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'SEDI_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RS)             CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'SEDI_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RG)             CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'SEDI_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RH)             CALL BUDGET_DDH (ZRHS(:,:,:)*PRHODJ(:,:,:), 12 , 'SEDI_BU_RRH',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_SV) THEN
-     IF (LSEDC_LIMA)               CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'SEDI_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-     IF (LRAIN_LIMA)               CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'SEDI_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-     IF (LSEDI_LIMA)               CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI  , 'SEDI_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-  END IF
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!*       2.     Nucleation processes
-!               --------------------
-!
-!
-IF( LACTIT_LIMA ) THEN
-   ZTM(:,:,:) = PTHM(:,:,:) * PEXN(:,:,:)
-ELSE 
-   ZTM(:,:,:) = ZT(:,:,:)
-END IF
-!
-CALL LIMA_NUCLEATION_PROCS (PTSTEP, HFMFILE, OCLOSE_OUT, PRHODJ,                &
-                            PRHODREF, PEXN, PPABST, ZT, ZTM, PW_NU,             &
-                            ZTHT, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT,           &
-                            ZCCT, ZCRT, ZCIT,                                   &
-                            ZCCNFT, ZCCNAT, ZIFNFT, ZIFNNT, ZIMMNT, ZHOMFT,YDDDH, YDLDDH, YDMDDH      )
-ZRT_SUM(:,:,:) = ZRCT(:,:,:) + ZRRT(:,:,:) + ZRIT(:,:,:) + ZRST(:,:,:) + ZRGT(:,:,:) + ZRHT(:,:,:)
-!
-! Saving sources before microphysics time-splitting loop
-!
-ZRCS(:,:,:) = ZRCT(:,:,:) / PTSTEP
-ZRRS(:,:,:) = ZRRT(:,:,:) / PTSTEP
-ZRIS(:,:,:) = ZRIT(:,:,:) / PTSTEP
-ZRSS(:,:,:) = ZRST(:,:,:) / PTSTEP
-ZRGS(:,:,:) = ZRGT(:,:,:) / PTSTEP
-ZRHS(:,:,:) = ZRHT(:,:,:) / PTSTEP
-!
-ZCCS(:,:,:) = ZCCT(:,:,:) / PTSTEP
-ZCRS(:,:,:) = ZCRT(:,:,:) / PTSTEP
-ZCIS(:,:,:) = ZCIT(:,:,:) / PTSTEP
-!
-ZCCNFS(:,:,:,:) = ZCCNFS(:,:,:,:) / PTSTEP
-ZCCNAS(:,:,:,:) = ZCCNAS(:,:,:,:) / PTSTEP
-ZIFNFS(:,:,:,:) = ZIFNFS(:,:,:,:) / PTSTEP
-ZIFNNS(:,:,:,:) = ZIFNNS(:,:,:,:) / PTSTEP
-ZIMMNS(:,:,:,:) = ZIMMNS(:,:,:,:) / PTSTEP
-ZHOMFS(:,:,:)   = ZHOMFS(:,:,:)   / PTSTEP
-!
-ZTHS(:,:,:) = ZTHT(:,:,:) / PTSTEP
-!
-!
-!*       1.     PREPARE COMPUTATIONS
-!               -----------------------
-!
-!
-PDZZ(:,:,:)=PZZ(:,:,:)
-KKA=1
-KKU=SIZE(PDZZ,3)
-KKL=1
-!
-IIB=1+JPHEXT
-IIE=SIZE(PDZZ,1) - JPHEXT
-IIT=SIZE(PDZZ,1)
-IJB=1+JPHEXT
-IJE=SIZE(PDZZ,2) - JPHEXT
-IJT=SIZE(PDZZ,2)
-IKB=KKA+JPVEXT*KKL
-IKE=KKU-JPVEXT*KKL
-IKT=SIZE(PDZZ,3)
-IKTB=1+JPVEXT
-IKTE=IKT-JPVEXT
-!
-ZINV_TSTEP=1./PTSTEP
-!
-PEXN(:,:,:)=PEXNREF(:,:,:)
-ZEXN(:,:,:)=PEXNREF(:,:,:)
-!ZTHT(:,:,:)=PTHT(:,:,:)
-!
-!ZT(:,:,:)  = PTHT(:,:,:) * PEXN(:,:,:)
-!!$IF( LACTIT_LIMA ) THEN
-!!$   ZTM(:,:,:) = PTHM(:,:,:) * PEXN(:,:,:)
-!!$ELSE 
-!!$   ZTM(:,:,:) = ZT(:,:,:)
-!!$END IF
-! LSFACT and LVFACT without exner
-ZZ_LSFACT(:,:,:)=(XLSTT+(XCPV-XCI)*(ZT(:,:,:)-XTT))   &
-     /( XCPD + XCPV*PRT(:,:,:,1) + XCL*(SUM(PRT(:,:,:,2:3),4))  &
-     + XCI*(SUM(PRT(:,:,:,4:),4)))
-ZZ_LVFACT(:,:,:)=(XLVTT+(XCPV-XCL)*(ZT(:,:,:)-XTT))   &
-     /( XCPD + XCPV*PRT(:,:,:,1) + XCL*(SUM(PRT(:,:,:,2:3),4))   &
-     + XCI*(SUM(PRT(:,:,:,4:),4)))
-!
-! Setting everything at 0
-!
-
-!
-!-------------------------------------------------------------------------------
-!
-!*       2.     LOOP
-!               ----
-!
-!
-! Maximum number of iterations
-INB_ITER_MAX=NMAXITER
-IF(XTSTEP_TS/=0.)THEN
-  INB_ITER_MAX=MAX(1, INT(PTSTEP/XTSTEP_TS)) !At least the number of iterations needed for the time-splitting
-  ZTSTEP=PTSTEP/INB_ITER_MAX
-  INB_ITER_MAX=MAX(NMAXITER, INB_ITER_MAX) !Fot the case XMRSTEP/=0. at the same time
-ENDIF
-IITER(:,:,:)=0
-ZTIME(:,:,:)=0. ! Current integration time (all points may have a different integration time)
-!
-! Begin the huge time splitting loop
-!
-WHERE (ZRT_SUM(:,:,:)<XRTMIN(2)) ZTIME(:,:,:)=PTSTEP ! no need to treat hydrometeor-free point
-!
-DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKB:IKE)<PTSTEP))
-   !
-   IF(XMRSTEP/=0.) THEN
-      ! In this case we need to remember the mixing ratios used to compute the tendencies
-      ! because when mixing ratio has evolved more than a threshold, we must re-compute tendecies
-      Z0RVT(:,:,:)=ZRVT(:,:,:)
-      Z0RCT(:,:,:)=ZRCT(:,:,:)
-      Z0CCT(:,:,:)=ZCCT(:,:,:)
-      Z0RRT(:,:,:)=ZRRT(:,:,:)
-      Z0CRT(:,:,:)=ZCRT(:,:,:)
-      Z0RIT(:,:,:)=ZRIT(:,:,:)
-      Z0CIT(:,:,:)=ZCIT(:,:,:)
-      Z0RST(:,:,:)=ZRST(:,:,:)
-      Z0RGT(:,:,:)=ZRGT(:,:,:)
-      Z0RHT(:,:,:)=ZRHT(:,:,:)
-!!$      Z0CCNFT(:,:,:,:) = ZCCNFT(:,:,:,:)
-!!$      Z0CCNAT(:,:,:,:) = ZCCNAT(:,:,:,:)
-!!$      Z0IFNFT(:,:,:,:) = ZIFNFT(:,:,:,:)
-!!$      Z0IFNNT(:,:,:,:) = ZIFNNT(:,:,:,:)
-!!$      Z0IMMNT(:,:,:,:) = ZIMMNT(:,:,:,:)
-!!$      Z0HOMFT(:,:,:)   = ZHOMFT(:,:,:)
-   ENDIF
-   !
-   IF(XTSTEP_TS/=0.) THEN
-      ! In this case we need to remember the time when tendencies were computed
-      ! because when time has evolved more than a limit, we must re-compute tendecies
-      ZTIME_LASTCALL(:,:,:)=ZTIME(:,:,:)
-   ENDIF
-   !
-   LLCOMPUTE(:,:,:)=.FALSE.
-   LLCOMPUTE(IIB:IIE,IJB:IJE,IKB:IKE) = ZTIME(IIB:IIE,IJB:IJE,IKB:IKE)<PTSTEP ! Compuation only for points for which integration time has not reached the timestep
-   WHERE(LLCOMPUTE(:,:,:))
-      IITER(:,:,:)=IITER(:,:,:)+1
-   END WHERE
-   ! 
-   DO WHILE(ANY(LLCOMPUTE(:,:,:))) ! Loop to adjust tendencies when we cross the 0°C or when a species disappears
-
-      !
-      ! Packing variables to run computations only where necessary
-      !
-      IPACK = COUNT(LLCOMPUTE)
-      ALLOCATE(I1(IPACK))
-      ALLOCATE(I2(IPACK))
-      ALLOCATE(I3(IPACK))
-      ALLOCATE(ZRHODREF1D(IPACK))
-      ALLOCATE(ZEXNREF1D(IPACK))
-      ALLOCATE(ZEXN1D(IPACK))
-      ALLOCATE(ZP1D(IPACK))     
-      ALLOCATE(ZTHT1D(IPACK))
-      ALLOCATE(ZRVT1D(IPACK))
-      ALLOCATE(ZRCT1D(IPACK))
-      ALLOCATE(ZRRT1D(IPACK))
-      ALLOCATE(ZRIT1D(IPACK))
-      ALLOCATE(ZRST1D(IPACK))
-      ALLOCATE(ZRGT1D(IPACK))
-      ALLOCATE(ZRHT1D(IPACK))
-      ALLOCATE(ZCCT1D(IPACK))
-      ALLOCATE(ZCRT1D(IPACK))
-      ALLOCATE(ZCIT1D(IPACK))
-      ALLOCATE(ZIFNN1D(IPACK,NMOD_IFN))
-      ALLOCATE(ZEVAP1D(IPACK))
-      ALLOCATE(ZTIME1D(IPACK))
-      ALLOCATE(LLCOMPUTE1D(IPACK))
-      ALLOCATE(IITER1D(IPACK))
-      ALLOCATE(ZTIME_LASTCALL1D(IPACK))
-      ALLOCATE(Z0RVT1D(IPACK))
-      ALLOCATE(Z0RCT1D(IPACK))
-      ALLOCATE(Z0RRT1D(IPACK))
-      ALLOCATE(Z0RIT1D(IPACK))
-      ALLOCATE(Z0RST1D(IPACK))
-      ALLOCATE(Z0RGT1D(IPACK))
-      ALLOCATE(Z0RHT1D(IPACK))
-      IPACK = COUNTJV(LLCOMPUTE,I1,I2,I3)
-      DO II=1,IPACK
-         ZRHODREF1D(II) = PRHODREF(I1(II),I2(II),I3(II))
-         ZEXNREF1D(II) = PEXNREF(I1(II),I2(II),I3(II))
-         ZEXN1D(II) = ZEXN(I1(II),I2(II),I3(II))
-         ZP1D(II) = PPABST(I1(II),I2(II),I3(II))
-         ZTHT1D(II) = ZTHT(I1(II),I2(II),I3(II))
-         ZRVT1D(II) = ZRVT(I1(II),I2(II),I3(II))
-         ZRCT1D(II) = ZRCT(I1(II),I2(II),I3(II))
-         ZRRT1D(II) = ZRRT(I1(II),I2(II),I3(II))
-         ZRIT1D(II) = ZRIT(I1(II),I2(II),I3(II))
-         ZRST1D(II) = ZRST(I1(II),I2(II),I3(II))
-         ZRGT1D(II) = ZRGT(I1(II),I2(II),I3(II))
-         ZRHT1D(II) = ZRHT(I1(II),I2(II),I3(II))
-         ZCCT1D(II) = ZCCT(I1(II),I2(II),I3(II))
-         ZCRT1D(II) = ZCRT(I1(II),I2(II),I3(II))
-         ZCIT1D(II) = ZCIT(I1(II),I2(II),I3(II))
-         ZIFNN1D(II,:) = ZIFNNT(I1(II),I2(II),I3(II),:)
-         ZEVAP1D(II) = PEVAP3D(I1(II),I2(II),I3(II))
-         ZTIME1D(II) = ZTIME(I1(II),I2(II),I3(II))         
-         LLCOMPUTE1D(II) = LLCOMPUTE(I1(II),I2(II),I3(II))         
-         IITER1D(II) = IITER(I1(II),I2(II),I3(II))         
-         ZTIME_LASTCALL1D(II) = ZTIME_LASTCALL(I1(II),I2(II),I3(II))         
-         Z0RVT1D(II) = Z0RVT(I1(II),I2(II),I3(II))
-         Z0RCT1D(II) = Z0RCT(I1(II),I2(II),I3(II))
-         Z0RRT1D(II) = Z0RRT(I1(II),I2(II),I3(II))
-         Z0RIT1D(II) = Z0RIT(I1(II),I2(II),I3(II))
-         Z0RST1D(II) = Z0RST(I1(II),I2(II),I3(II))
-         Z0RGT1D(II) = Z0RGT(I1(II),I2(II),I3(II))
-         Z0RHT1D(II) = Z0RHT(I1(II),I2(II),I3(II))
-      END DO
-      !
-      ! Allocating 1D variables
-      !
-      ALLOCATE(ZMAXTIME(IPACK))           ;  ZMAXTIME(:) = 0.
-      ALLOCATE(ZTIME_THRESHOLD(IPACK))    ;  ZTIME_THRESHOLD(:) = 0.
-      !
-      ALLOCATE(ZA_TH(IPACK))    ;  ZA_TH(:) = 0.
-      ALLOCATE(ZA_RV(IPACK))    ;  ZA_RV(:) = 0.
-      ALLOCATE(ZA_RC(IPACK))    ;  ZA_RC(:) = 0.
-      ALLOCATE(ZA_RR(IPACK))    ;  ZA_RR(:) = 0.
-      ALLOCATE(ZA_RI(IPACK))    ;  ZA_RI(:) = 0.
-      ALLOCATE(ZA_RS(IPACK))    ;  ZA_RS(:) = 0.
-      ALLOCATE(ZA_RG(IPACK))    ;  ZA_RG(:) = 0.
-      ALLOCATE(ZA_RH(IPACK))    ;  ZA_RH(:) = 0.
-      ALLOCATE(ZA_CC(IPACK))    ;  ZA_CC(:) = 0.
-      ALLOCATE(ZA_CR(IPACK))    ;  ZA_CR(:) = 0.
-      ALLOCATE(ZA_CI(IPACK))    ;  ZA_CI(:) = 0.
-      !
-      ALLOCATE(ZB_TH(IPACK))    ;  ZB_TH(:) = 0.
-      ALLOCATE(ZB_RV(IPACK))    ;  ZB_RV(:) = 0.
-      ALLOCATE(ZB_RC(IPACK))    ;  ZB_RC(:) = 0.
-      ALLOCATE(ZB_RR(IPACK))    ;  ZB_RR(:) = 0.
-      ALLOCATE(ZB_RI(IPACK))    ;  ZB_RI(:) = 0.
-      ALLOCATE(ZB_RS(IPACK))    ;  ZB_RS(:) = 0.
-      ALLOCATE(ZB_RG(IPACK))    ;  ZB_RG(:) = 0.
-      ALLOCATE(ZB_RH(IPACK))    ;  ZB_RH(:) = 0.
-      ALLOCATE(ZB_CC(IPACK))    ;  ZB_CC(:) = 0.
-      ALLOCATE(ZB_CR(IPACK))    ;  ZB_CR(:) = 0.
-      ALLOCATE(ZB_CI(IPACK))    ;  ZB_CI(:) = 0.
-      ALLOCATE(ZB_IFNN(IPACK,NMOD_IFN)) ;  ZB_IFNN(:,:) = 0.
-      !
-      ALLOCATE(Z_CR_BRKU(IPACK)) ; Z_CR_BRKU(:) = 0.
-      ALLOCATE(Z_TH_HONR(IPACK)) ; Z_TH_HONR(:) = 0.
-      ALLOCATE(Z_RR_HONR(IPACK)) ; Z_RR_HONR(:) = 0.
-      ALLOCATE(Z_CR_HONR(IPACK)) ; Z_CR_HONR(:) = 0.
-      ALLOCATE(Z_TH_IMLT(IPACK)) ; Z_TH_IMLT(:) = 0.
-      ALLOCATE(Z_RC_IMLT(IPACK)) ; Z_RC_IMLT(:) = 0.
-      ALLOCATE(Z_CC_IMLT(IPACK)) ; Z_CC_IMLT(:) = 0.
-      ALLOCATE(Z_TH_HONC(IPACK)) ; Z_TH_HONC(:) = 0.
-      ALLOCATE(Z_RC_HONC(IPACK)) ; Z_RC_HONC(:) = 0.
-      ALLOCATE(Z_CC_HONC(IPACK)) ; Z_CC_HONC(:) = 0.
-      ALLOCATE(Z_CC_SELF(IPACK)) ; Z_CC_SELF(:) = 0.
-      ALLOCATE(Z_RC_AUTO(IPACK)) ; Z_RC_AUTO(:) = 0.
-      ALLOCATE(Z_CC_AUTO(IPACK)) ; Z_CC_AUTO(:) = 0.
-      ALLOCATE(Z_CR_AUTO(IPACK)) ; Z_CR_AUTO(:) = 0.
-      ALLOCATE(Z_RC_ACCR(IPACK)) ; Z_RC_ACCR(:) = 0.
-      ALLOCATE(Z_CC_ACCR(IPACK)) ; Z_CC_ACCR(:) = 0.
-      ALLOCATE(Z_CR_SCBU(IPACK)) ; Z_CR_SCBU(:) = 0.
-      ALLOCATE(Z_TH_EVAP(IPACK)) ; Z_TH_EVAP(:) = 0.
-      ALLOCATE(Z_RR_EVAP(IPACK)) ; Z_RR_EVAP(:) = 0.
-      ALLOCATE(Z_RI_CNVI(IPACK)) ; Z_RI_CNVI(:) = 0.
-      ALLOCATE(Z_CI_CNVI(IPACK)) ; Z_CI_CNVI(:) = 0.
-      ALLOCATE(Z_TH_DEPS(IPACK)) ; Z_TH_DEPS(:) = 0.
-      ALLOCATE(Z_RS_DEPS(IPACK)) ; Z_RS_DEPS(:) = 0.
-      ALLOCATE(Z_RI_CNVS(IPACK)) ; Z_RI_CNVS(:) = 0.
-      ALLOCATE(Z_CI_CNVS(IPACK)) ; Z_CI_CNVS(:) = 0.
-      ALLOCATE(Z_RI_AGGS(IPACK)) ; Z_RI_AGGS(:) = 0.
-      ALLOCATE(Z_CI_AGGS(IPACK)) ; Z_CI_AGGS(:) = 0.
-      ALLOCATE(Z_TH_DEPG(IPACK)) ; Z_TH_DEPG(:) = 0.
-      ALLOCATE(Z_RG_DEPG(IPACK)) ; Z_RG_DEPG(:) = 0.
-      ALLOCATE(Z_TH_BERFI(IPACK)); Z_TH_BERFI(:) = 0.
-      ALLOCATE(Z_RC_BERFI(IPACK)); Z_RC_BERFI(:) = 0.
-      ALLOCATE(Z_TH_RIM(IPACK))  ; Z_TH_RIM = 0.
-      ALLOCATE(Z_RC_RIM(IPACK))  ; Z_RC_RIM = 0.
-      ALLOCATE(Z_CC_RIM(IPACK))  ; Z_CC_RIM = 0.
-      ALLOCATE(Z_RS_RIM(IPACK))  ; Z_RS_RIM = 0.
-      ALLOCATE(Z_RG_RIM(IPACK))  ; Z_RG_RIM = 0.
-      ALLOCATE(Z_RI_HMS(IPACK))  ; Z_RI_HMS = 0.
-      ALLOCATE(Z_CI_HMS(IPACK))  ; Z_CI_HMS = 0.
-      ALLOCATE(Z_RS_HMS(IPACK))  ; Z_RS_HMS = 0.
-      ALLOCATE(Z_TH_ACC(IPACK))  ; Z_TH_ACC = 0.
-      ALLOCATE(Z_RR_ACC(IPACK))  ; Z_RR_ACC = 0.
-      ALLOCATE(Z_CR_ACC(IPACK))  ; Z_CR_ACC = 0.
-      ALLOCATE(Z_RS_ACC(IPACK))  ; Z_RS_ACC = 0.
-      ALLOCATE(Z_RG_ACC(IPACK))  ; Z_RG_ACC = 0.
-      ALLOCATE(Z_RS_CMEL(IPACK)) ; Z_RS_CMEL = 0.
-      ALLOCATE(Z_TH_CFRZ(IPACK)) ; Z_TH_CFRZ = 0.
-      ALLOCATE(Z_RR_CFRZ(IPACK)) ; Z_RR_CFRZ = 0.
-      ALLOCATE(Z_CR_CFRZ(IPACK)) ; Z_CR_CFRZ = 0.
-      ALLOCATE(Z_RI_CFRZ(IPACK)) ; Z_RI_CFRZ = 0.
-      ALLOCATE(Z_CI_CFRZ(IPACK)) ; Z_CI_CFRZ = 0.
-      ALLOCATE(Z_TH_WETG(IPACK)) ; Z_TH_WETG = 0.
-      ALLOCATE(Z_RC_WETG(IPACK)) ; Z_RC_WETG = 0.
-      ALLOCATE(Z_CC_WETG(IPACK)) ; Z_CC_WETG = 0.
-      ALLOCATE(Z_RR_WETG(IPACK)) ; Z_RR_WETG = 0.
-      ALLOCATE(Z_CR_WETG(IPACK)) ; Z_CR_WETG = 0.
-      ALLOCATE(Z_RI_WETG(IPACK)) ; Z_RI_WETG = 0.
-      ALLOCATE(Z_CI_WETG(IPACK)) ; Z_CI_WETG = 0.
-      ALLOCATE(Z_RS_WETG(IPACK)) ; Z_RS_WETG = 0.
-      ALLOCATE(Z_RG_WETG(IPACK)) ; Z_RG_WETG = 0.
-      ALLOCATE(Z_RH_WETG(IPACK)) ; Z_RH_WETG = 0.
-      ALLOCATE(Z_TH_DRYG(IPACK)) ; Z_TH_DRYG = 0.
-      ALLOCATE(Z_RC_DRYG(IPACK)) ; Z_RC_DRYG = 0.
-      ALLOCATE(Z_CC_DRYG(IPACK)) ; Z_CC_DRYG = 0.
-      ALLOCATE(Z_RR_DRYG(IPACK)) ; Z_RR_DRYG = 0.
-      ALLOCATE(Z_CR_DRYG(IPACK)) ; Z_CR_DRYG = 0.
-      ALLOCATE(Z_RI_DRYG(IPACK)) ; Z_RI_DRYG = 0.
-      ALLOCATE(Z_CI_DRYG(IPACK)) ; Z_CI_DRYG = 0.
-      ALLOCATE(Z_RS_DRYG(IPACK)) ; Z_RS_DRYG = 0.
-      ALLOCATE(Z_RG_DRYG(IPACK)) ; Z_RG_DRYG = 0.
-      ALLOCATE(Z_RI_HMG(IPACK))  ; Z_RI_HMG = 0.
-      ALLOCATE(Z_CI_HMG(IPACK))  ; Z_CI_HMG = 0.
-      ALLOCATE(Z_RG_HMG(IPACK))  ; Z_RG_HMG = 0.
-      ALLOCATE(Z_TH_GMLT(IPACK)) ; Z_TH_GMLT = 0.
-      ALLOCATE(Z_RR_GMLT(IPACK)) ; Z_RR_GMLT = 0.
-      ALLOCATE(Z_CR_GMLT(IPACK)) ; Z_CR_GMLT = 0.
-
-
-!!$      ZZT(:,:,:) = ZTHT(:,:,:) * ZEXN(:,:,:)
-!!$      ZLSFACT(:,:,:)=(XLSTT+(XCPV-XCI)*(ZZT(:,:,:)-XTT))   &
-!!$           /( (XCPD + XCPV*ZRVT(:,:,:) + XCL*(ZRCT(:,:,:)+ZRRT(:,:,:))   &
-!!$           + XCI*(ZRIT(:,:,:)+ZRST(:,:,:)+ZRGT(:,:,:)+ZRHT(:,:,:)))*ZEXN(:,:,:) )
-!!$      ZLVFACT(:,:,:)=(XLVTT+(XCPV-XCL)*(ZZT(:,:,:)-XTT))   &
-!!$           /( (XCPD + XCPV*ZRVT(:,:,:) + XCL*(ZRCT(:,:,:)+ZRRT(:,:,:))   &
-!!$           + XCI*(ZRIT(:,:,:)+ZRST(:,:,:)+ZRGT(:,:,:)+ZRHT(:,:,:)))*ZEXN(:,:,:) )
-      !
-      !***       4.1 Tendecies computation
-      !
-      
-      CALL LIMA_INST_PROCS (PTSTEP, HFMFILE, OCLOSE_OUT, LLCOMPUTE1D,             &
-                            ZEXNREF1D, ZP1D,           &
-                            ZTHT1D, ZRVT1D, ZRCT1D, ZRRT1D, ZRIT1D, ZRST1D, ZRGT1D,           &
-                            ZCCT1D, ZCRT1D, ZCIT1D,                                   &
-                            ZIFNN1D,                 &
-                            Z_CR_BRKU,                                          & ! spontaneous break up of drops (BRKU) : Nr
-                            Z_TH_HONR, Z_RR_HONR, Z_CR_HONR,                    & ! rain drops homogeneous freezing (HONR) : rr, Nr, rg=-rr, th
-                            Z_TH_IMLT, Z_RC_IMLT, Z_CC_IMLT,                    & ! ice melting (IMLT) : rc, Nc, ri=-rc, Ni=-Nc, th, IFNF, IFNA
-                            ZB_TH, ZB_RV, ZB_RC, ZB_RR, ZB_RI, ZB_RG,           &
-                            ZB_CC, ZB_CR, ZB_CI,                                &
-                            ZB_IFNN)
-      
-      CALL LIMA_TENDENCIES (PTSTEP, HFMFILE, OCLOSE_OUT, LLCOMPUTE1D,                &
-                            ZEXNREF1D, ZRHODREF1D, ZP1D, ZTHT1D,                       &
-                            ZRVT1D, ZRCT1D, ZRRT1D, ZRIT1D, ZRST1D, ZRGT1D, ZRHT1D,              &
-                            ZCCT1D, ZCRT1D, ZCIT1D,                                      &
-                            Z_TH_HONC, Z_RC_HONC, Z_CC_HONC,                                  & 
-                            Z_CC_SELF,                                             & 
-                            Z_RC_AUTO, Z_CC_AUTO, Z_CR_AUTO,                       & 
-                            Z_RC_ACCR, Z_CC_ACCR,                                  & 
-                            Z_CR_SCBU,                                             & 
-                            Z_TH_EVAP, Z_RR_EVAP,                                             & 
-                            Z_RI_CNVI, Z_CI_CNVI,                                  & 
-                            Z_TH_DEPS, Z_RS_DEPS,                                             & 
-                            Z_RI_CNVS, Z_CI_CNVS,                                  & 
-                            Z_RI_AGGS, Z_CI_AGGS,                                  & 
-                            Z_TH_DEPG, Z_RG_DEPG,                                             & 
-                            Z_TH_BERFI, Z_RC_BERFI,                                            & 
-                            Z_TH_RIM, Z_RC_RIM, Z_CC_RIM, Z_RS_RIM, Z_RG_RIM,                & 
-                            Z_RI_HMS, Z_CI_HMS, Z_RS_HMS,                          & 
-                            Z_TH_ACC, Z_RR_ACC, Z_CR_ACC, Z_RS_ACC, Z_RG_ACC,                & 
-                            Z_RS_CMEL,                                             & 
-                            Z_TH_CFRZ, Z_RR_CFRZ, Z_CR_CFRZ, Z_RI_CFRZ, Z_CI_CFRZ,            & 
-                            Z_TH_WETG, Z_RC_WETG, Z_CC_WETG, Z_RR_WETG, Z_CR_WETG,            & 
-                            Z_RI_WETG, Z_CI_WETG, Z_RS_WETG, Z_RG_WETG, Z_RH_WETG, & 
-                            Z_TH_DRYG, Z_RC_DRYG, Z_CC_DRYG, Z_RR_DRYG, Z_CR_DRYG,            & 
-                            Z_RI_DRYG, Z_CI_DRYG, Z_RS_DRYG, Z_RG_DRYG,            & 
-                            Z_RI_HMG, Z_CI_HMG, Z_RG_HMG,                          & 
-                            Z_TH_GMLT, Z_RR_GMLT, Z_CR_GMLT,                                  & 
-!!!     Z_RC_WETH, Z_CC_WETH, Z_RR_WETH, Z_CR_WETH,  &           ! wet growth of hail (WETH) : rc, Nc, rr, Nr, ri, Ni, rs, rg, rh, th
-!!!     Z_RI_WETH, Z_CI_WETH, Z_RS_WETH, Z_RG_WETH, Z_RH_WETH, & ! wet growth of hail (WETH) : rc, Nc, rr, Nr, ri, Ni, rs, rg, rh, th
-!!!     Z_RG_COHG, &                                             ! conversion of hail into graupel (COHG) : rg, rh
-!!!     Z_RR_HMLT, Z_CR_HMLT                                     ! hail melting (HMLT) : rr, Nr, rh=-rr, th
-                            ZA_TH, ZA_RV, ZA_RC, ZA_CC, ZA_RR, ZA_CR,              &
-                            ZA_RI, ZA_CI, ZA_RS, ZA_RG, ZA_RH,                     &
-                            ZEVAP1D )
-
-      !
-      !***       4.2 Integration time
-      !
-      ! If we can, we will use these tendecies until the end of the timestep
-      ZMAXTIME(:)=PTSTEP-ZTIME1D(:) ! Remaining time until the end of the timestep
-
-      ! We need to adjust tendencies when temperature reaches 0
-      IF(LFEEDBACKT) THEN
-         !Is ZB_TH enough to change temperature sign?
-         WHERE( ((ZTHT1D(:) - XTT/ZEXN1D(:)) * (ZTHT1D(:) + ZB_TH(:) - XTT/ZEXN1D(:))) < 0. )
-            ZMAXTIME(:)=0.
-         ENDWHERE
-         !Can ZA_TH make temperature change of sign?
-         ZTIME_THRESHOLD(:)=-1.
-         WHERE(ABS(ZA_TH(:))>1.E-20)
-            ZTIME_THRESHOLD(:)=(XTT/ZEXN1D(:) - ZB_TH(:) - ZTHT1D(:))/ZA_TH(:)
-         ENDWHERE
-         WHERE(ZTIME_THRESHOLD(:)>0.)
-            ZMAXTIME(:)=MIN(ZMAXTIME(:), ZTIME_THRESHOLD(:))
-         ENDWHERE
-      ENDIF
-
-      ! We need to adjust tendencies when a species disappears
-      ! When a species is missing, only the external tendencies can be negative (and we must keep track of it)
-      WHERE(ZA_RV(:)<-1.E-20 .AND. ZRVT1D(:)>XRTMIN(1))
-         ZMAXTIME(:)=MIN(ZMAXTIME(:), -(ZB_RV(:)+ZRVT1D(:))/ZA_RV(:))
-      END WHERE
-      WHERE(ZA_RC(:)<-1.E-20 .AND. ZRCT1D(:)>XRTMIN(2))
-         ZMAXTIME(:)=MIN(ZMAXTIME(:), -(ZB_RC(:)+ZRCT1D(:))/ZA_RC(:))
-      END WHERE
-      WHERE(ZA_RR(:)<-1.E-20 .AND. ZRRT1D(:)>XRTMIN(3))
-         ZMAXTIME(:)=MIN(ZMAXTIME(:), -(ZB_RR(:)+ZRRT1D(:))/ZA_RR(:))
-      END WHERE
-      WHERE(ZA_RI(:)<-1.E-20 .AND. ZRIT1D(:)>XRTMIN(4))
-         ZMAXTIME(:)=MIN(ZMAXTIME(:), -(ZB_RI(:)+ZRIT1D(:))/ZA_RI(:))
-      END WHERE
-      WHERE(ZA_RS(:)<-1.E-20 .AND. ZRST1D(:)>XRTMIN(5))
-         ZMAXTIME(:)=MIN(ZMAXTIME(:), -(ZB_RS(:)+ZRST1D(:))/ZA_RS(:))
-      END WHERE
-      WHERE(ZA_RG(:)<-1.E-20 .AND. ZRGT1D(:)>XRTMIN(6))
-         ZMAXTIME(:)=MIN(ZMAXTIME(:), -(ZB_RG(:)+ZRGT1D(:))/ZA_RG(:))
-      END WHERE
-      WHERE(ZA_RH(:)<-1.E-20 .AND. ZRHT1D(:)>XRTMIN(7))
-         ZMAXTIME(:)=MIN(ZMAXTIME(:), -(ZB_RH(:)+ZRHT1D(:))/ZA_RH(:))
-      END WHERE
-
-      ! We stop when the end of the timestep is reached
-      WHERE(PTSTEP-ZTIME1D(:)-ZMAXTIME(:)<=0.)
-         LLCOMPUTE1D(:)=.FALSE.
-      ENDWHERE
-
-      ! We must recompute tendencies when the end of the sub-timestep is reached
-      IF(XTSTEP_TS/=0.) THEN
-         WHERE(IITER1D(:)<INB_ITER_MAX .AND. ZTIME1D(:)+ZMAXTIME(:)>ZTIME_LASTCALL1D(:)+ZTSTEP)
-            ZMAXTIME(:)=ZTIME_LASTCALL1D(:)-ZTIME1D(:)+ZTSTEP
-            LLCOMPUTE1D(:)=.FALSE.
-         ENDWHERE
-      ENDIF
-
-      ! We must recompute tendencies when the maximum allowed change is reached
-      ! When a species is missing, only the external tendencies can be active and we do not want to recompute
-      ! the microphysical tendencies when external tendencies are negative (results won't change because species was already missing)
-      IF(XMRSTEP/=0.) THEN
-         ZTIME_THRESHOLD(:)=-1.
-         WHERE(IITER1D(:)<INB_ITER_MAX .AND. ABS(ZA_RV(:))>1.E-20)
-            ZTIME_THRESHOLD(:)=(SIGN(1., ZA_RV(:))*XMRSTEP+Z0RVT1D(:)-ZRVT1D(:)-ZB_RV(:))/ZA_RV(:)
-         ENDWHERE
-         WHERE(ZTIME_THRESHOLD(:)>=0. .AND. ZTIME_THRESHOLD(:)<ZMAXTIME(:) .AND. &
-              &(ZRVT1D(:)>XRTMIN(1) .OR. ZA_RV(:)>0.))
-            ZMAXTIME(:)=MIN(ZMAXTIME(:), ZTIME_THRESHOLD(:))
-            LLCOMPUTE1D(:)=.FALSE.
-         ENDWHERE
-
-         ZTIME_THRESHOLD(:)=-1.
-         WHERE(IITER1D(:)<INB_ITER_MAX .AND. ABS(ZA_RC(:))>1.E-20)
-            ZTIME_THRESHOLD(:)=(SIGN(1., ZA_RC(:))*XMRSTEP+Z0RCT1D(:)-ZRCT1D(:)-ZB_RC(:))/ZA_RC(:)
-         ENDWHERE
-         WHERE(ZTIME_THRESHOLD(:)>=0. .AND. ZTIME_THRESHOLD(:)<ZMAXTIME(:) .AND. &
-              &(ZRCT1D(:)>XRTMIN(2) .OR. ZA_RC(:)>0.))
-            ZMAXTIME(:)=MIN(ZMAXTIME(:), ZTIME_THRESHOLD(:))
-            LLCOMPUTE1D(:)=.FALSE.
-         ENDWHERE
-
-         ZTIME_THRESHOLD(:)=-1.
-         WHERE(IITER1D(:)<INB_ITER_MAX .AND. ABS(ZA_RR(:))>1.E-20)
-            ZTIME_THRESHOLD(:)=(SIGN(1., ZA_RR(:))*XMRSTEP+Z0RRT1D(:)-ZRRT1D(:)-ZB_RR(:))/ZA_RR(:)
-         ENDWHERE
-         WHERE(ZTIME_THRESHOLD(:)>=0. .AND. ZTIME_THRESHOLD(:)<ZMAXTIME(:) .AND. &
-              &(ZRRT1D(:)>XRTMIN(3) .OR. ZA_RR(:)>0.))
-            ZMAXTIME(:)=MIN(ZMAXTIME(:), ZTIME_THRESHOLD(:))
-            LLCOMPUTE1D(:)=.FALSE.
-         ENDWHERE
-
-         ZTIME_THRESHOLD(:)=-1.
-         WHERE(IITER1D(:)<INB_ITER_MAX .AND. ABS(ZA_RI(:))>1.E-20)
-            ZTIME_THRESHOLD(:)=(SIGN(1., ZA_RI(:))*XMRSTEP+Z0RIT1D(:)-ZRIT1D(:)-ZB_RI(:))/ZA_RI(:)
-         ENDWHERE
-         WHERE(ZTIME_THRESHOLD(:)>=0. .AND. ZTIME_THRESHOLD(:)<ZMAXTIME(:) .AND. &
-              &(ZRIT1D(:)>XRTMIN(4) .OR. ZA_RI(:)>0.))
-            ZMAXTIME(:)=MIN(ZMAXTIME(:), ZTIME_THRESHOLD(:))
-            LLCOMPUTE1D(:)=.FALSE.
-         ENDWHERE
-
-         ZTIME_THRESHOLD(:)=-1.
-         WHERE(IITER1D(:)<INB_ITER_MAX .AND. ABS(ZA_RS(:))>1.E-20)
-            ZTIME_THRESHOLD(:)=(SIGN(1., ZA_RS(:))*XMRSTEP+Z0RST1D(:)-ZRST1D(:)-ZB_RS(:))/ZA_RS(:)
-         ENDWHERE
-         WHERE(ZTIME_THRESHOLD(:)>=0. .AND. ZTIME_THRESHOLD(:)<ZMAXTIME(:) .AND. &
-              &(ZRST1D(:)>XRTMIN(5) .OR. ZA_RS(:)>0.))
-            ZMAXTIME(:)=MIN(ZMAXTIME(:), ZTIME_THRESHOLD(:))
-            LLCOMPUTE1D(:)=.FALSE.
-         ENDWHERE
-
-         ZTIME_THRESHOLD(:)=-1.
-         WHERE(IITER1D(:)<INB_ITER_MAX .AND. ABS(ZA_RG(:))>1.E-20)
-            ZTIME_THRESHOLD(:)=(SIGN(1., ZA_RG(:))*XMRSTEP+Z0RGT1D(:)-ZRGT1D(:)-ZB_RG(:))/ZA_RG(:)
-         ENDWHERE
-         WHERE(ZTIME_THRESHOLD(:)>=0. .AND. ZTIME_THRESHOLD(:)<ZMAXTIME(:) .AND. &
-              &(ZRGT1D(:)>XRTMIN(6) .OR. ZA_RG(:)>0.))
-            ZMAXTIME(:)=MIN(ZMAXTIME(:), ZTIME_THRESHOLD(:))
-            LLCOMPUTE1D(:)=.FALSE.
-         ENDWHERE
-
-         ZTIME_THRESHOLD(:)=-1.
-         WHERE(IITER1D(:)<INB_ITER_MAX .AND. ABS(ZA_RH(:))>1.E-20)
-            ZTIME_THRESHOLD(:)=(SIGN(1., ZA_RH(:))*XMRSTEP+Z0RHT1D(:)-ZRHT1D(:)-ZB_RH(:))/ZA_RH(:)
-         ENDWHERE
-         WHERE(ZTIME_THRESHOLD(:)>=0. .AND. ZTIME_THRESHOLD(:)<ZMAXTIME(:) .AND. &
-              &(ZRHT1D(:)>XRTMIN(7) .OR. ZA_RH(:)>0.))
-            ZMAXTIME(:)=MIN(ZMAXTIME(:), ZTIME_THRESHOLD(:))
-            LLCOMPUTE1D(:)=.FALSE.
-         ENDWHERE
-
-         WHERE(IITER1D(:)<INB_ITER_MAX .AND. MAX(ABS(ZB_RV(:)),  &
-              ABS(ZB_RC(:)), ABS(ZB_RR(:)), ABS(ZB_RI(:)), &
-              ABS(ZB_RS(:)), ABS(ZB_RG(:)), ABS(ZB_RH(:)))>XMRSTEP)
-            ZMAXTIME(:)=0.
-            LLCOMPUTE1D(:)=.FALSE.
-         ENDWHERE
-      ENDIF
-      !
-      !***       4.3 New values of variables for next iteration
-      !
-      ZTHT1D = ZTHT1D + ZA_TH(:) * ZMAXTIME(:) + ZB_TH(:)
-      ZRVT1D = ZRVT1D + ZA_RV(:) * ZMAXTIME(:) + ZB_RV(:)
-      ZRCT1D = ZRCT1D + ZA_RC(:) * ZMAXTIME(:) + ZB_RC(:)
-      ZCCT1D = ZCCT1D + ZA_CC(:) * ZMAXTIME(:) + ZB_CC(:)
-      ZRRT1D = ZRRT1D + ZA_RR(:) * ZMAXTIME(:) + ZB_RR(:)
-      ZCRT1D = ZCRT1D + ZA_CR(:) * ZMAXTIME(:) + ZB_CR(:)
-      ZRIT1D = ZRIT1D + ZA_RI(:) * ZMAXTIME(:) + ZB_RI(:)
-      ZCIT1D = ZCIT1D + ZA_CI(:) * ZMAXTIME(:) + ZB_CI(:)
-      ZRST1D = ZRST1D + ZA_RS(:) * ZMAXTIME(:) + ZB_RS(:)
-      ZRGT1D = ZRGT1D + ZA_RG(:) * ZMAXTIME(:) + ZB_RG(:)
-      ZRHT1D = ZRHT1D + ZA_RH(:) * ZMAXTIME(:) + ZB_RH(:)
-      !
-
-      DO II=1,NMOD_IFN
-         ZIFNN1D(:,II) = ZIFNN1D(:,II) + ZB_IFNN(:,II)
-      END DO
-      !
-      !***       4.5 
-      !
-      WHERE (ZRCT1D .LE. XRTMIN(2))
-         ZRVT1D = ZRVT1D + ZRCT1D
-         ZRCT1D = 0.
-         ZCCT1D = 0.
-      END WHERE
-      WHERE (ZRRT1D .LE. XRTMIN(3))
-         ZRVT1D = ZRVT1D + ZRRT1D
-         ZRRT1D = 0.
-         ZCRT1D = 0.
-      END WHERE
-      WHERE (ZRIT1D .LE. XRTMIN(4))
-         ZRVT1D = ZRVT1D + ZRIT1D
-         ZRIT1D = 0.
-         ZCIT1D = 0.
-      END WHERE
-      
-      !
-      !***       4.5 Next loop
-      !
-      ZTIME1D(:)=ZTIME1D(:)+ZMAXTIME(:)
-      !
-      !***       4.4 Unpacking
-      !
-      DO II=1,IPACK
-         ZTHT(I1(II),I2(II),I3(II))      = ZTHT1D(II)
-         ZRVT(I1(II),I2(II),I3(II))      = ZRVT1D(II)
-         ZRCT(I1(II),I2(II),I3(II))      = ZRCT1D(II)
-         ZRRT(I1(II),I2(II),I3(II))      = ZRRT1D(II)
-         ZRIT(I1(II),I2(II),I3(II))      = ZRIT1D(II)
-         ZRST(I1(II),I2(II),I3(II))      = ZRST1D(II)
-         ZRGT(I1(II),I2(II),I3(II))      = ZRGT1D(II)
-         ZRHT(I1(II),I2(II),I3(II))      = ZRHT1D(II)
-         ZCCT(I1(II),I2(II),I3(II))      = ZCCT1D(II)
-         ZCRT(I1(II),I2(II),I3(II))      = ZCRT1D(II)
-         ZCIT(I1(II),I2(II),I3(II))      = ZCIT1D(II)
-         ZIFNNT(I1(II),I2(II),I3(II),:)  = ZIFNN1D(II,:)
-         PEVAP3D(I1(II),I2(II),I3(II))   = ZEVAP1D(II)
-         ZTIME(I1(II),I2(II),I3(II))     = ZTIME1D(II)
-         LLCOMPUTE(I1(II),I2(II),I3(II)) = LLCOMPUTE1D(II)
-         IITER(I1(II),I2(II),I3(II))     = IITER1D(II)
-      END DO
-      !
-      !***       4.4 Unpacking for budgets
-      !
-      IF(LBU_ENABLE) THEN
-         DO II=1,IPACK
-!!$            ZTOT_RC_HENU(I1(II),I2(II),I3(II)) =   ZTOT_RC_HENU(I1(II),I2(II),I3(II))   + Z_RC_HENU(II)
-!!$            ZTOT_CC_HENU(I1(II),I2(II),I3(II)) =   ZTOT_CC_HENU(I1(II),I2(II),I3(II))   + Z_CC_HENU(II)
-            ZTOT_CR_BRKU(I1(II),I2(II),I3(II)) =   ZTOT_CR_BRKU(I1(II),I2(II),I3(II))   + Z_CR_BRKU(II)
-!!$            ZTOT_RI_HIND(I1(II),I2(II),I3(II)) =   ZTOT_RI_HIND(I1(II),I2(II),I3(II))   + Z_RI_HIND(II)
-!!$            ZTOT_CI_HIND(I1(II),I2(II),I3(II)) =   ZTOT_CI_HIND(I1(II),I2(II),I3(II))   + Z_CI_HIND(II)
-!!$            ZTOT_RC_HINC(I1(II),I2(II),I3(II)) =   ZTOT_RC_HINC(I1(II),I2(II),I3(II))   + Z_RC_HINC(II)
-!!$            ZTOT_CC_HINC(I1(II),I2(II),I3(II)) =   ZTOT_CC_HINC(I1(II),I2(II),I3(II))   + Z_CC_HINC(II)
-!!$            ZTOT_RI_HONH(I1(II),I2(II),I3(II)) =   ZTOT_RI_HONH(I1(II),I2(II),I3(II))   + Z_RI_HONH(II)
-!!$            ZTOT_CI_HONH(I1(II),I2(II),I3(II)) =   ZTOT_CI_HONH(I1(II),I2(II),I3(II))   + Z_CI_HONH(II)
-            ZTOT_TH_HONC(I1(II),I2(II),I3(II)) =   ZTOT_TH_HONC(I1(II),I2(II),I3(II))   + Z_TH_HONC(II)  * ZMAXTIME(II)
-            ZTOT_RC_HONC(I1(II),I2(II),I3(II)) =   ZTOT_RC_HONC(I1(II),I2(II),I3(II))   + Z_RC_HONC(II)  * ZMAXTIME(II)
-            ZTOT_CC_HONC(I1(II),I2(II),I3(II)) =   ZTOT_CC_HONC(I1(II),I2(II),I3(II))   + Z_CC_HONC(II)  * ZMAXTIME(II)
-            ZTOT_TH_HONR(I1(II),I2(II),I3(II)) =   ZTOT_TH_HONR(I1(II),I2(II),I3(II))   + Z_TH_HONR(II)
-            ZTOT_RR_HONR(I1(II),I2(II),I3(II)) =   ZTOT_RR_HONR(I1(II),I2(II),I3(II))   + Z_RR_HONR(II)
-            ZTOT_CR_HONR(I1(II),I2(II),I3(II)) =   ZTOT_CR_HONR(I1(II),I2(II),I3(II))   + Z_CR_HONR(II)
-            ZTOT_TH_IMLT(I1(II),I2(II),I3(II)) =   ZTOT_TH_IMLT(I1(II),I2(II),I3(II))   + Z_TH_IMLT(II)
-            ZTOT_RC_IMLT(I1(II),I2(II),I3(II)) =   ZTOT_RC_IMLT(I1(II),I2(II),I3(II))   + Z_RC_IMLT(II)
-            ZTOT_CC_IMLT(I1(II),I2(II),I3(II)) =   ZTOT_CC_IMLT(I1(II),I2(II),I3(II))   + Z_CC_IMLT(II)
-            ZTOT_CC_SELF(I1(II),I2(II),I3(II)) =   ZTOT_CC_SELF(I1(II),I2(II),I3(II))   + Z_CC_SELF(II)  * ZMAXTIME(II)
-            ZTOT_RC_AUTO(I1(II),I2(II),I3(II)) =   ZTOT_RC_AUTO(I1(II),I2(II),I3(II))   + Z_RC_AUTO(II)  * ZMAXTIME(II)
-            ZTOT_CC_AUTO(I1(II),I2(II),I3(II)) =   ZTOT_CC_AUTO(I1(II),I2(II),I3(II))   + Z_CC_AUTO(II)  * ZMAXTIME(II)
-            ZTOT_CR_AUTO(I1(II),I2(II),I3(II)) =   ZTOT_CR_AUTO(I1(II),I2(II),I3(II))   + Z_CR_AUTO(II)  * ZMAXTIME(II)
-            ZTOT_RC_ACCR(I1(II),I2(II),I3(II)) =   ZTOT_RC_ACCR(I1(II),I2(II),I3(II))   + Z_RC_ACCR(II)  * ZMAXTIME(II)
-            ZTOT_CC_ACCR(I1(II),I2(II),I3(II)) =   ZTOT_CC_ACCR(I1(II),I2(II),I3(II))   + Z_CC_ACCR(II)  * ZMAXTIME(II)
-            ZTOT_CR_SCBU(I1(II),I2(II),I3(II)) =   ZTOT_CR_SCBU(I1(II),I2(II),I3(II))   + Z_CR_SCBU(II)  * ZMAXTIME(II)
-!!$            ZTOT_RC_EVAP(I1(II),I2(II),I3(II)) =   ZTOT_RC_EVAP(I1(II),I2(II),I3(II))   + Z_RC_EVAP(II)  * ZMAXTIME(II)
-!!$            ZTOT_CC_EVAP(I1(II),I2(II),I3(II)) =   ZTOT_CC_EVAP(I1(II),I2(II),I3(II))   + Z_CC_EVAP(II)  * ZMAXTIME(II)
-            ZTOT_TH_EVAP(I1(II),I2(II),I3(II)) =   ZTOT_TH_EVAP(I1(II),I2(II),I3(II))   + Z_TH_EVAP(II)  * ZMAXTIME(II)
-            ZTOT_RR_EVAP(I1(II),I2(II),I3(II)) =   ZTOT_RR_EVAP(I1(II),I2(II),I3(II))   + Z_RR_EVAP(II)  * ZMAXTIME(II)
-!!$            ZTOT_CR_EVAP(I1(II),I2(II),I3(II)) =   ZTOT_CR_EVAP(I1(II),I2(II),I3(II))   + Z_CR_EVAP(II)  * ZMAXTIME(II)
-            ZTOT_RI_CNVI(I1(II),I2(II),I3(II)) =   ZTOT_RI_CNVI(I1(II),I2(II),I3(II))   + Z_RI_CNVI(II)  * ZMAXTIME(II)
-            ZTOT_CI_CNVI(I1(II),I2(II),I3(II)) =   ZTOT_CI_CNVI(I1(II),I2(II),I3(II))   + Z_CI_CNVI(II)  * ZMAXTIME(II)
-            ZTOT_TH_DEPS(I1(II),I2(II),I3(II)) =   ZTOT_TH_DEPS(I1(II),I2(II),I3(II))   + Z_TH_DEPS(II)  * ZMAXTIME(II)
-            ZTOT_RS_DEPS(I1(II),I2(II),I3(II)) =   ZTOT_RS_DEPS(I1(II),I2(II),I3(II))   + Z_RS_DEPS(II)  * ZMAXTIME(II)
-            ZTOT_RI_CNVS(I1(II),I2(II),I3(II)) =   ZTOT_RI_CNVS(I1(II),I2(II),I3(II))   + Z_RI_CNVS(II)  * ZMAXTIME(II)
-            ZTOT_CI_CNVS(I1(II),I2(II),I3(II)) =   ZTOT_CI_CNVS(I1(II),I2(II),I3(II))   + Z_CI_CNVS(II)  * ZMAXTIME(II)
-            ZTOT_RI_AGGS(I1(II),I2(II),I3(II)) =   ZTOT_RI_AGGS(I1(II),I2(II),I3(II))   + Z_RI_AGGS(II)  * ZMAXTIME(II)
-            ZTOT_CI_AGGS(I1(II),I2(II),I3(II)) =   ZTOT_CI_AGGS(I1(II),I2(II),I3(II))   + Z_CI_AGGS(II)  * ZMAXTIME(II)
-            ZTOT_TH_DEPG(I1(II),I2(II),I3(II)) =   ZTOT_TH_DEPG(I1(II),I2(II),I3(II))   + Z_TH_DEPG(II)  * ZMAXTIME(II)
-            ZTOT_RG_DEPG(I1(II),I2(II),I3(II)) =   ZTOT_RG_DEPG(I1(II),I2(II),I3(II))   + Z_RG_DEPG(II)  * ZMAXTIME(II)
-            ZTOT_TH_BERFI(I1(II),I2(II),I3(II))=   ZTOT_TH_BERFI(I1(II),I2(II),I3(II))  + Z_TH_BERFI(II) * ZMAXTIME(II)
-            ZTOT_RC_BERFI(I1(II),I2(II),I3(II))=   ZTOT_RC_BERFI(I1(II),I2(II),I3(II))  + Z_RC_BERFI(II) * ZMAXTIME(II)
-            ZTOT_TH_RIM(I1(II),I2(II),I3(II))  =   ZTOT_TH_RIM(I1(II),I2(II),I3(II))    + Z_TH_RIM(II)   * ZMAXTIME(II)
-            ZTOT_RC_RIM(I1(II),I2(II),I3(II))  =   ZTOT_RC_RIM(I1(II),I2(II),I3(II))    + Z_RC_RIM(II)   * ZMAXTIME(II)
-            ZTOT_CC_RIM(I1(II),I2(II),I3(II))  =   ZTOT_CC_RIM(I1(II),I2(II),I3(II))    + Z_CC_RIM(II)   * ZMAXTIME(II)
-            ZTOT_RS_RIM(I1(II),I2(II),I3(II))  =   ZTOT_RS_RIM(I1(II),I2(II),I3(II))    + Z_RS_RIM(II)   * ZMAXTIME(II)
-            ZTOT_RG_RIM(I1(II),I2(II),I3(II))  =   ZTOT_RG_RIM(I1(II),I2(II),I3(II))    + Z_RG_RIM(II)   * ZMAXTIME(II)
-            ZTOT_RI_HMS(I1(II),I2(II),I3(II))  =   ZTOT_RI_HMS(I1(II),I2(II),I3(II))    + Z_RI_HMS(II)   * ZMAXTIME(II)
-            ZTOT_CI_HMS(I1(II),I2(II),I3(II))  =   ZTOT_CI_HMS(I1(II),I2(II),I3(II))    + Z_CI_HMS(II)   * ZMAXTIME(II)
-            ZTOT_RS_HMS(I1(II),I2(II),I3(II))  =   ZTOT_RS_HMS(I1(II),I2(II),I3(II))    + Z_RS_HMS(II)   * ZMAXTIME(II)
-            ZTOT_TH_ACC(I1(II),I2(II),I3(II))  =   ZTOT_TH_ACC(I1(II),I2(II),I3(II))    + Z_TH_ACC(II)   * ZMAXTIME(II)
-            ZTOT_RR_ACC(I1(II),I2(II),I3(II))  =   ZTOT_RR_ACC(I1(II),I2(II),I3(II))    + Z_RR_ACC(II)   * ZMAXTIME(II)
-            ZTOT_CR_ACC(I1(II),I2(II),I3(II))  =   ZTOT_CR_ACC(I1(II),I2(II),I3(II))    + Z_CR_ACC(II)   * ZMAXTIME(II)
-            ZTOT_RS_ACC(I1(II),I2(II),I3(II))  =   ZTOT_RS_ACC(I1(II),I2(II),I3(II))    + Z_RS_ACC(II)   * ZMAXTIME(II)
-            ZTOT_RG_ACC(I1(II),I2(II),I3(II))  =   ZTOT_RG_ACC(I1(II),I2(II),I3(II))    + Z_RG_ACC(II)   * ZMAXTIME(II)
-            ZTOT_RS_CMEL(I1(II),I2(II),I3(II)) =   ZTOT_RS_CMEL(I1(II),I2(II),I3(II))   + Z_RS_CMEL(II)  * ZMAXTIME(II)
-            ZTOT_TH_CFRZ(I1(II),I2(II),I3(II)) =   ZTOT_TH_CFRZ(I1(II),I2(II),I3(II))   + Z_TH_CFRZ(II)  * ZMAXTIME(II)
-            ZTOT_RR_CFRZ(I1(II),I2(II),I3(II)) =   ZTOT_RR_CFRZ(I1(II),I2(II),I3(II))   + Z_RR_CFRZ(II)  * ZMAXTIME(II)
-            ZTOT_CR_CFRZ(I1(II),I2(II),I3(II)) =   ZTOT_CR_CFRZ(I1(II),I2(II),I3(II))   + Z_CR_CFRZ(II)  * ZMAXTIME(II)
-            ZTOT_RI_CFRZ(I1(II),I2(II),I3(II)) =   ZTOT_RI_CFRZ(I1(II),I2(II),I3(II))   + Z_RI_CFRZ(II)  * ZMAXTIME(II)
-            ZTOT_CI_CFRZ(I1(II),I2(II),I3(II)) =   ZTOT_CI_CFRZ(I1(II),I2(II),I3(II))   + Z_CI_CFRZ(II)  * ZMAXTIME(II)
-            ZTOT_TH_WETG(I1(II),I2(II),I3(II)) =   ZTOT_TH_WETG(I1(II),I2(II),I3(II))   + Z_TH_WETG(II)  * ZMAXTIME(II)
-            ZTOT_RC_WETG(I1(II),I2(II),I3(II)) =   ZTOT_RC_WETG(I1(II),I2(II),I3(II))   + Z_RC_WETG(II)  * ZMAXTIME(II)
-            ZTOT_CC_WETG(I1(II),I2(II),I3(II)) =   ZTOT_CC_WETG(I1(II),I2(II),I3(II))   + Z_CC_WETG(II)  * ZMAXTIME(II)
-            ZTOT_RR_WETG(I1(II),I2(II),I3(II)) =   ZTOT_RR_WETG(I1(II),I2(II),I3(II))   + Z_RR_WETG(II)  * ZMAXTIME(II)
-            ZTOT_CR_WETG(I1(II),I2(II),I3(II)) =   ZTOT_CR_WETG(I1(II),I2(II),I3(II))   + Z_CR_WETG(II)  * ZMAXTIME(II)
-            ZTOT_RI_WETG(I1(II),I2(II),I3(II)) =   ZTOT_RI_WETG(I1(II),I2(II),I3(II))   + Z_RI_WETG(II)  * ZMAXTIME(II)
-            ZTOT_CI_WETG(I1(II),I2(II),I3(II)) =   ZTOT_CI_WETG(I1(II),I2(II),I3(II))   + Z_CI_WETG(II)  * ZMAXTIME(II)
-            ZTOT_RS_WETG(I1(II),I2(II),I3(II)) =   ZTOT_RS_WETG(I1(II),I2(II),I3(II))   + Z_RS_WETG(II)  * ZMAXTIME(II)
-            ZTOT_RG_WETG(I1(II),I2(II),I3(II)) =   ZTOT_RG_WETG(I1(II),I2(II),I3(II))   + Z_RG_WETG(II)  * ZMAXTIME(II)
-            ZTOT_RH_WETG(I1(II),I2(II),I3(II)) =   ZTOT_RH_WETG(I1(II),I2(II),I3(II))   + Z_RH_WETG(II)  * ZMAXTIME(II)
-            ZTOT_TH_DRYG(I1(II),I2(II),I3(II)) =   ZTOT_TH_DRYG(I1(II),I2(II),I3(II))   + Z_TH_DRYG(II)  * ZMAXTIME(II)
-            ZTOT_RC_DRYG(I1(II),I2(II),I3(II)) =   ZTOT_RC_DRYG(I1(II),I2(II),I3(II))   + Z_RC_DRYG(II)  * ZMAXTIME(II)
-            ZTOT_CC_DRYG(I1(II),I2(II),I3(II)) =   ZTOT_CC_DRYG(I1(II),I2(II),I3(II))   + Z_CC_DRYG(II)  * ZMAXTIME(II)
-            ZTOT_RR_DRYG(I1(II),I2(II),I3(II)) =   ZTOT_RR_DRYG(I1(II),I2(II),I3(II))   + Z_RR_DRYG(II)  * ZMAXTIME(II)
-            ZTOT_CR_DRYG(I1(II),I2(II),I3(II)) =   ZTOT_CR_DRYG(I1(II),I2(II),I3(II))   + Z_CR_DRYG(II)  * ZMAXTIME(II)
-            ZTOT_RI_DRYG(I1(II),I2(II),I3(II)) =   ZTOT_RI_DRYG(I1(II),I2(II),I3(II))   + Z_RI_DRYG(II)  * ZMAXTIME(II)
-            ZTOT_CI_DRYG(I1(II),I2(II),I3(II)) =   ZTOT_CI_DRYG(I1(II),I2(II),I3(II))   + Z_CI_DRYG(II)  * ZMAXTIME(II)
-            ZTOT_RS_DRYG(I1(II),I2(II),I3(II)) =   ZTOT_RS_DRYG(I1(II),I2(II),I3(II))   + Z_RS_DRYG(II)  * ZMAXTIME(II)
-            ZTOT_RG_DRYG(I1(II),I2(II),I3(II)) =   ZTOT_RG_DRYG(I1(II),I2(II),I3(II))   + Z_RG_DRYG(II)  * ZMAXTIME(II)
-            ZTOT_RI_HMG(I1(II),I2(II),I3(II))  =   ZTOT_RI_HMG(I1(II),I2(II),I3(II))    + Z_RI_HMG(II)   * ZMAXTIME(II)
-            ZTOT_CI_HMG(I1(II),I2(II),I3(II))  =   ZTOT_CI_HMG(I1(II),I2(II),I3(II))    + Z_CI_HMG(II)   * ZMAXTIME(II)
-            ZTOT_RG_HMG(I1(II),I2(II),I3(II))  =   ZTOT_RG_HMG(I1(II),I2(II),I3(II))    + Z_RG_HMG(II)   * ZMAXTIME(II)
-            ZTOT_TH_GMLT(I1(II),I2(II),I3(II)) =   ZTOT_TH_GMLT(I1(II),I2(II),I3(II))   + Z_TH_GMLT(II)  * ZMAXTIME(II)
-            ZTOT_RR_GMLT(I1(II),I2(II),I3(II)) =   ZTOT_RR_GMLT(I1(II),I2(II),I3(II))   + Z_RR_GMLT(II)  * ZMAXTIME(II)
-            ZTOT_CR_GMLT(I1(II),I2(II),I3(II)) =   ZTOT_CR_GMLT(I1(II),I2(II),I3(II))   + Z_CR_GMLT(II)  * ZMAXTIME(II)
-!!$            ZTOT_RC_WETH(I1(II),I2(II),I3(II)) =   ZTOT_RC_WETH(I1(II),I2(II),I3(II))   + Z_RC_WETH(II)  * ZMAXTIME(II)
-!!$            ZTOT_CC_WETH(I1(II),I2(II),I3(II)) =   ZTOT_CC_WETH(I1(II),I2(II),I3(II))   + Z_CC_WETH(II)  * ZMAXTIME(II)
-!!$            ZTOT_RR_WETH(I1(II),I2(II),I3(II)) =   ZTOT_RR_WETH(I1(II),I2(II),I3(II))   + Z_RR_WETH(II)  * ZMAXTIME(II)
-!!$            ZTOT_CR_WETH(I1(II),I2(II),I3(II)) =   ZTOT_CR_WETH(I1(II),I2(II),I3(II))   + Z_CR_WETH(II)  * ZMAXTIME(II)
-!!$            ZTOT_RI_WETH(I1(II),I2(II),I3(II)) =   ZTOT_RI_WETH(I1(II),I2(II),I3(II))   + Z_RI_WETH(II)  * ZMAXTIME(II)
-!!$            ZTOT_CI_WETH(I1(II),I2(II),I3(II)) =   ZTOT_CI_WETH(I1(II),I2(II),I3(II))   + Z_CI_WETH(II)  * ZMAXTIME(II)
-!!$            ZTOT_RS_WETH(I1(II),I2(II),I3(II)) =   ZTOT_RS_WETH(I1(II),I2(II),I3(II))   + Z_RS_WETH(II)  * ZMAXTIME(II)
-!!$            ZTOT_RG_WETH(I1(II),I2(II),I3(II)) =   ZTOT_RG_WETH(I1(II),I2(II),I3(II))   + Z_RG_WETH(II)  * ZMAXTIME(II)
-!!$            ZTOT_RH_WETH(I1(II),I2(II),I3(II)) =   ZTOT_RH_WETH(I1(II),I2(II),I3(II))   + Z_RH_WETH(II)  * ZMAXTIME(II)
-!!$            ZTOT_RG_COHG(I1(II),I2(II),I3(II)) =   ZTOT_RG_COHG(I1(II),I2(II),I3(II))   + Z_RG_COHG(II)  * ZMAXTIME(II)
-!!$            ZTOT_RR_HMLT(I1(II),I2(II),I3(II)) =   ZTOT_RR_HMLT(I1(II),I2(II),I3(II))   + Z_RR_HMLT(II)  * ZMAXTIME(II)
-!!$            ZTOT_CR_HMLT(I1(II),I2(II),I3(II)) =   ZTOT_CR_HMLT(I1(II),I2(II),I3(II))   + Z_CR_HMLT(II)  * ZMAXTIME(II)
-         END DO
-      ENDIF
-      !
-      ! Deallocating variables
-      !
-      DEALLOCATE(I1)
-      DEALLOCATE(I2)
-      DEALLOCATE(I3)
-      DEALLOCATE(ZRHODREF1D)
-      DEALLOCATE(ZEXNREF1D)
-      DEALLOCATE(ZEXN1D)
-      DEALLOCATE(ZP1D)     
-      DEALLOCATE(ZTHT1D)
-      DEALLOCATE(ZRVT1D)
-      DEALLOCATE(ZRCT1D)
-      DEALLOCATE(ZRRT1D)
-      DEALLOCATE(ZRIT1D)
-      DEALLOCATE(ZRST1D)
-      DEALLOCATE(ZRGT1D)
-      DEALLOCATE(ZRHT1D)
-      DEALLOCATE(ZCCT1D)
-      DEALLOCATE(ZCRT1D)
-      DEALLOCATE(ZCIT1D)
-      DEALLOCATE(ZIFNN1D)
-      DEALLOCATE(ZEVAP1D)
-      DEALLOCATE(ZTIME1D)
-      DEALLOCATE(LLCOMPUTE1D)
-      DEALLOCATE(IITER1D)
-      DEALLOCATE(ZTIME_LASTCALL1D)
-      DEALLOCATE(Z0RVT1D)
-      DEALLOCATE(Z0RCT1D)
-      DEALLOCATE(Z0RRT1D)
-      DEALLOCATE(Z0RIT1D)
-      DEALLOCATE(Z0RST1D)
-      DEALLOCATE(Z0RGT1D)
-      DEALLOCATE(Z0RHT1D)
-      !
-      DEALLOCATE(ZMAXTIME)
-      DEALLOCATE(ZTIME_THRESHOLD)
-      !
-      DEALLOCATE(ZA_TH)
-      DEALLOCATE(ZA_RV)
-      DEALLOCATE(ZA_RC)
-      DEALLOCATE(ZA_RR)
-      DEALLOCATE(ZA_RI)
-      DEALLOCATE(ZA_RS)
-      DEALLOCATE(ZA_RG)
-      DEALLOCATE(ZA_RH)
-      DEALLOCATE(ZA_CC)
-      DEALLOCATE(ZA_CR)
-      DEALLOCATE(ZA_CI)
-      !
-      DEALLOCATE(ZB_TH)
-      DEALLOCATE(ZB_RV)   
-      DEALLOCATE(ZB_RC)   
-      DEALLOCATE(ZB_RR)   
-      DEALLOCATE(ZB_RI)   
-      DEALLOCATE(ZB_RS)   
-      DEALLOCATE(ZB_RG)   
-      DEALLOCATE(ZB_RH)   
-      DEALLOCATE(ZB_CC)   
-      DEALLOCATE(ZB_CR)  
-      DEALLOCATE(ZB_CI)  
-      DEALLOCATE(ZB_IFNN)
-      !
-      DEALLOCATE(Z_CR_BRKU)
-      DEALLOCATE(Z_TH_HONR)
-      DEALLOCATE(Z_RR_HONR)
-      DEALLOCATE(Z_CR_HONR)
-      DEALLOCATE(Z_TH_IMLT)
-      DEALLOCATE(Z_RC_IMLT)
-      DEALLOCATE(Z_CC_IMLT)
-      DEALLOCATE(Z_TH_HONC)
-      DEALLOCATE(Z_RC_HONC)
-      DEALLOCATE(Z_CC_HONC)
-      DEALLOCATE(Z_CC_SELF) 
-      DEALLOCATE(Z_RC_AUTO) 
-      DEALLOCATE(Z_CC_AUTO)
-      DEALLOCATE(Z_CR_AUTO) 
-      DEALLOCATE(Z_RC_ACCR) 
-      DEALLOCATE(Z_CC_ACCR) 
-      DEALLOCATE(Z_CR_SCBU)
-      DEALLOCATE(Z_TH_EVAP) 
-      DEALLOCATE(Z_RR_EVAP) 
-      DEALLOCATE(Z_RI_CNVI)
-      DEALLOCATE(Z_CI_CNVI)
-      DEALLOCATE(Z_TH_DEPS)
-      DEALLOCATE(Z_RS_DEPS)
-      DEALLOCATE(Z_RI_CNVS)
-      DEALLOCATE(Z_CI_CNVS)
-      DEALLOCATE(Z_RI_AGGS) 
-      DEALLOCATE(Z_CI_AGGS) 
-      DEALLOCATE(Z_TH_DEPG) 
-      DEALLOCATE(Z_RG_DEPG) 
-      DEALLOCATE(Z_TH_BERFI)
-      DEALLOCATE(Z_RC_BERFI)
-      DEALLOCATE(Z_TH_RIM) 
-      DEALLOCATE(Z_RC_RIM) 
-      DEALLOCATE(Z_CC_RIM)  
-      DEALLOCATE(Z_RS_RIM) 
-      DEALLOCATE(Z_RG_RIM) 
-      DEALLOCATE(Z_RI_HMS) 
-      DEALLOCATE(Z_CI_HMS) 
-      DEALLOCATE(Z_RS_HMS) 
-      DEALLOCATE(Z_TH_ACC) 
-      DEALLOCATE(Z_RR_ACC) 
-      DEALLOCATE(Z_CR_ACC) 
-      DEALLOCATE(Z_RS_ACC) 
-      DEALLOCATE(Z_RG_ACC)  
-      DEALLOCATE(Z_RS_CMEL) 
-      DEALLOCATE(Z_TH_CFRZ)
-      DEALLOCATE(Z_RR_CFRZ)
-      DEALLOCATE(Z_CR_CFRZ)
-      DEALLOCATE(Z_RI_CFRZ)
-      DEALLOCATE(Z_CI_CFRZ)
-      DEALLOCATE(Z_TH_WETG)
-      DEALLOCATE(Z_RC_WETG)
-      DEALLOCATE(Z_CC_WETG)
-      DEALLOCATE(Z_RR_WETG) 
-      DEALLOCATE(Z_CR_WETG) 
-      DEALLOCATE(Z_RI_WETG)
-      DEALLOCATE(Z_CI_WETG)
-      DEALLOCATE(Z_RS_WETG)
-      DEALLOCATE(Z_RG_WETG)
-      DEALLOCATE(Z_RH_WETG) 
-      DEALLOCATE(Z_TH_DRYG) 
-      DEALLOCATE(Z_RC_DRYG) 
-      DEALLOCATE(Z_CC_DRYG)
-      DEALLOCATE(Z_RR_DRYG)
-      DEALLOCATE(Z_CR_DRYG)
-      DEALLOCATE(Z_RI_DRYG)
-      DEALLOCATE(Z_CI_DRYG)
-      DEALLOCATE(Z_RS_DRYG) 
-      DEALLOCATE(Z_RG_DRYG)
-      DEALLOCATE(Z_RI_HMG) 
-      DEALLOCATE(Z_CI_HMG) 
-      DEALLOCATE(Z_RG_HMG) 
-      DEALLOCATE(Z_TH_GMLT)
-      DEALLOCATE(Z_RR_GMLT)
-      DEALLOCATE(Z_CR_GMLT)
-      !      
-   ENDDO
-ENDDO
-!
-!-------------------------------------------------------------------------------
-!
-!*       7.     TOTAL TENDENCIES
-!               ----------------
-!
-! Old state = state before microphysics time-splitting = state after sedimentation and nucleation processes
-! Tendencies from microphysics = (new state - old state) / PTSTEP
-!                              = new state / PTSTEP   - old source 
-!
-ZW_RVS(:,:,:) = 0.
-ZW_RCS(:,:,:) = 0.
-ZW_CCS(:,:,:) = 0.
-ZW_RRS(:,:,:) = 0.
-ZW_CRS(:,:,:) = 0.
-ZW_RIS(:,:,:) = 0.
-ZW_CIS(:,:,:) = 0.
-ZW_RSS(:,:,:) = 0.
-ZW_RGS(:,:,:) = 0.
-ZW_RHS(:,:,:) = 0.
-ZW_THS(:,:,:) = 0.
-!     
-ZW_CCNFS(:,:,:,:) = 0.
-ZW_CCNAS(:,:,:,:) = 0.
-ZW_IFNFS(:,:,:,:) = 0.
-ZW_IFNNS(:,:,:,:) = 0.
-ZW_IMMNS(:,:,:,:) = 0.
-ZW_HOMFS(:,:,:)   = 0.
-!
-!!$IF ( KRR .GE. 1 ) ZW_RVS(:,:,:) = ( ZRVT(:,:,:) ) *ZINV_TSTEP - ZRVS(:,:,:)
-!!$IF ( KRR .GE. 2 ) ZW_RCS(:,:,:) = ( ZRCT(:,:,:) ) *ZINV_TSTEP - ZRCS(:,:,:)
-!!$IF ( KRR .GE. 3 ) ZW_RRS(:,:,:) = ( ZRRT(:,:,:) ) *ZINV_TSTEP - ZRRS(:,:,:)
-!!$IF ( KRR .GE. 4 ) ZW_RIS(:,:,:) = ( ZRIT(:,:,:) ) *ZINV_TSTEP - ZRIS(:,:,:)
-!!$IF ( KRR .GE. 5 ) ZW_RSS(:,:,:) = ( ZRST(:,:,:) ) *ZINV_TSTEP - ZRSS(:,:,:)
-!!$IF ( KRR .GE. 6 ) ZW_RGS(:,:,:) = ( ZRGT(:,:,:) ) *ZINV_TSTEP - ZRGS(:,:,:)
-!!$IF ( KRR .GE. 7 ) ZW_RHS(:,:,:) = ( ZRHT(:,:,:) ) *ZINV_TSTEP - ZRHS(:,:,:)
-!!$!
-!!$ZW_THS(:,:,:) = (ZW_RCS(:,:,:)+ZW_RRS(:,:,:)                            )*ZZ_LVFACT(:,:,:) + &
-!!$              & (ZW_RIS(:,:,:)+ZW_RSS(:,:,:)+ZW_RGS(:,:,:)+ZW_RHS(:,:,:))*ZZ_LSFACT(:,:,:)
-!!$!
-!!$! Source at the end of microphysics = new state / PTSTEP
-!!$!
-!!$IF ( KRR .GE. 1 ) ZW_RVS(:,:,:) = ZW_RVS(:,:,:) + ZRVS(:,:,:)
-!!$IF ( KRR .GE. 2 ) ZW_RCS(:,:,:) = ZW_RCS(:,:,:) + ZRCS(:,:,:)
-!!$IF ( KRR .GE. 3 ) ZW_RRS(:,:,:) = ZW_RRS(:,:,:) + ZRRS(:,:,:)
-!!$IF ( KRR .GE. 4 ) ZW_RIS(:,:,:) = ZW_RIS(:,:,:) + ZRIS(:,:,:)
-!!$IF ( KRR .GE. 5 ) ZW_RSS(:,:,:) = ZW_RSS(:,:,:) + ZRSS(:,:,:)
-!!$IF ( KRR .GE. 6 ) ZW_RGS(:,:,:) = ZW_RGS(:,:,:) + ZRGS(:,:,:)
-!!$IF ( KRR .GE. 7 ) ZW_RHS(:,:,:) = ZW_RHS(:,:,:) + ZRHS(:,:,:)
-!!$!
-!!$ZW_THS(:,:,:) = ZTHS(:,:,:) + ZW_THS(:,:,:)
-!
-IF ( KRR .GE. 1 ) ZW_RVS(:,:,:) = ( ZRVT(:,:,:) ) *ZINV_TSTEP
-IF ( KRR .GE. 2 ) ZW_RCS(:,:,:) = ( ZRCT(:,:,:) ) *ZINV_TSTEP
-IF ( KRR .GE. 3 ) ZW_RRS(:,:,:) = ( ZRRT(:,:,:) ) *ZINV_TSTEP
-IF ( KRR .GE. 4 ) ZW_RIS(:,:,:) = ( ZRIT(:,:,:) ) *ZINV_TSTEP
-IF ( KRR .GE. 5 ) ZW_RSS(:,:,:) = ( ZRST(:,:,:) ) *ZINV_TSTEP
-IF ( KRR .GE. 6 ) ZW_RGS(:,:,:) = ( ZRGT(:,:,:) ) *ZINV_TSTEP
-IF ( KRR .GE. 7 ) ZW_RHS(:,:,:) = ( ZRHT(:,:,:) ) *ZINV_TSTEP
-!
-IF ( LWARM_LIMA )             ZW_CCS(:,:,:) = ( ZCCT(:,:,:) ) *ZINV_TSTEP
-IF ( LWARM_LIMA .AND. LRAIN_LIMA ) ZW_CRS(:,:,:) = ( ZCRT(:,:,:) ) *ZINV_TSTEP
-IF ( LCOLD_LIMA )             ZW_CIS(:,:,:) = ( ZCIT(:,:,:) ) *ZINV_TSTEP
-!
-IF ( NMOD_CCN .GE. 1 )   ZW_CCNFS(:,:,:,:) = ( ZCCNFT(:,:,:,:) ) *ZINV_TSTEP
-IF ( NMOD_CCN .GE. 1 )   ZW_CCNAS(:,:,:,:) = ( ZCCNAT(:,:,:,:) ) *ZINV_TSTEP
-IF ( NMOD_IFN .GE. 1 )   ZW_IFNFS(:,:,:,:) = ( ZIFNFT(:,:,:,:) ) *ZINV_TSTEP
-IF ( NMOD_IFN .GE. 1 )   ZW_IFNNS(:,:,:,:) = ( ZIFNNT(:,:,:,:) ) *ZINV_TSTEP
-IF ( NMOD_IMM .GE. 1 )   ZW_IMMNS(:,:,:,:) = ( ZIMMNT(:,:,:,:) ) *ZINV_TSTEP
-IF ( LHHONI_LIMA )            ZW_HOMFS(:,:,:) = ( ZHOMFT(:,:,:)   ) *ZINV_TSTEP
-!
-ZW_THS(:,:,:) = ZTHT(:,:,:) * ZINV_TSTEP
-!
-!***     7.3    Final tendencies
-!
-! Mixing ratios
-!
-PRS(:,:,:,1) = ZW_RVS(:,:,:)
-IF ( KRR .GE. 2 ) PRS(:,:,:,2) = ZW_RCS(:,:,:)
-IF ( KRR .GE. 3 ) PRS(:,:,:,3) = ZW_RRS(:,:,:)
-IF ( KRR .GE. 4 ) PRS(:,:,:,4) = ZW_RIS(:,:,:)
-IF ( KRR .GE. 5 ) PRS(:,:,:,5) = ZW_RSS(:,:,:)
-IF ( KRR .GE. 6 ) PRS(:,:,:,6) = ZW_RGS(:,:,:)
-IF ( KRR .GE. 7 ) PRS(:,:,:,7) = ZW_RHS(:,:,:)
-!
-IF ( LWARM_LIMA )             PSVS(:,:,:,NSV_LIMA_NC) = ZW_CCS(:,:,:)
-IF ( LWARM_LIMA .AND. LRAIN_LIMA ) PSVS(:,:,:,NSV_LIMA_NR) = ZW_CRS(:,:,:)
-IF ( LCOLD_LIMA )             PSVS(:,:,:,NSV_LIMA_NI) = ZW_CIS(:,:,:)
-!
-IF ( NMOD_CCN .GE. 1 )   PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) = ZW_CCNFS(:,:,:,:)
-IF ( NMOD_CCN .GE. 1 )   PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1) = ZW_CCNAS(:,:,:,:)
-IF ( NMOD_IFN .GE. 1 )   PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1) = ZW_IFNFS(:,:,:,:)
-IF ( NMOD_IFN .GE. 1 )   PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1) = ZW_IFNNS(:,:,:,:)
-IF ( NMOD_IMM .GE. 1 )   PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1) = ZW_IMMNS(:,:,:,:)
-IF ( LCOLD_LIMA .AND. LHHONI_LIMA ) PSVS(:,:,:,NSV_LIMA_HOM_HAZE) = ZW_HOMFS(:,:,:)
-!
-PTHS(:,:,:) = ZW_THS(:,:,:)
-!
-! Call budgets
-!
-IF(LBU_ENABLE) THEN
-   IF (LBUDGET_TH) THEN
-      ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_EVAP(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'REVA_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-      ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_HONC(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'HONC_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-      ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_HONR(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'HONR_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-      ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_DEPS(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'DEPS_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-      ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_DEPG(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'DEPG_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-      ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_IMLT(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'IMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-      ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_BERFI(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'BERFI_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-      ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_RIM(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'RIM_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-      ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_ACC(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'ACC_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-      ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_CFRZ(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'CFRZ_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-      ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_WETG(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'WETG_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-      ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_DRYG(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'DRYG_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-      ZTHS(:,:,:) = ZTHS(:,:,:) + ZTOT_TH_GMLT(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZTHS(:,:,:)*PRHODJ(:,:,:), 4  , 'GMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-   END IF
-
-   IF (LBUDGET_RV) THEN
-      ZRVS(:,:,:) = ZRVS(:,:,:) - ZTOT_RR_EVAP(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRVS(:,:,:)*PRHODJ(:,:,:), 6  , 'REVA_BU_RRV',YDDDH, YDLDDH, YDMDDH)
-      ZRVS(:,:,:) = ZRVS(:,:,:) - ZTOT_RS_DEPS(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRVS(:,:,:)*PRHODJ(:,:,:), 6  , 'DEPS_BU_RRV',YDDDH, YDLDDH, YDMDDH)
-      ZRVS(:,:,:) = ZRVS(:,:,:) - ZTOT_RG_DEPG(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRVS(:,:,:)*PRHODJ(:,:,:), 6  , 'DEPG_BU_RRV',YDDDH, YDLDDH, YDMDDH)
-   END IF
-
-   IF (LBUDGET_RC) THEN
-      ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_AUTO(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'AUTO_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-      ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_ACCR(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'ACCR_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-      ! impact of rain evap !!!!!!
-      ZRCS(:,:,:) = ZRCS(:,:,:)
-      CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'REVA_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-      ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_HONC(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'HONC_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-      ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_IMLT(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'IMLT_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-      ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_BERFI(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'BERFI_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-      ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_RIM(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'RIM_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-      ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_WETG(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'WETG_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-      ZRCS(:,:,:) = ZRCS(:,:,:) + ZTOT_RC_DRYG(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'DRYG_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-   END IF
-   
-   IF (LBUDGET_RR) THEN
-      ZRRS(:,:,:) = ZRRS(:,:,:) - ZTOT_RC_AUTO(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'AUTO_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-      ZRRS(:,:,:) = ZRRS(:,:,:) - ZTOT_RC_ACCR(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'ACCR_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-      ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_EVAP(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'REVA_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-      ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_HONR(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'HONR_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-      ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_ACC(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'ACC_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-      ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_CFRZ(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'CFRZ_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-      ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_WETG(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'WETG_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-      ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_DRYG(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'DRYG_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-      ZRRS(:,:,:) = ZRRS(:,:,:) + ZTOT_RR_GMLT(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'GMLT_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-   END IF
-  
-   IF (LBUDGET_RI) THEN
-      ZRIS(:,:,:) = ZRIS(:,:,:) - ZTOT_RC_HONC(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'HONC_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-      ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_CNVI(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'CNVI_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-      ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_CNVS(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'CNVS_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-      ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_AGGS(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'AGGS_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-      ZRIS(:,:,:) = ZRIS(:,:,:) - ZTOT_RC_IMLT(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'IMLT_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-      ZRIS(:,:,:) = ZRIS(:,:,:) - ZTOT_RC_BERFI(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'BERFI_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-      ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_HMS(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'HMS_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-      ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_CFRZ(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'CFRZ_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-      ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_WETG(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'WETG_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-      ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_DRYG(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'DRYG_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-      ZRIS(:,:,:) = ZRIS(:,:,:) + ZTOT_RI_HMG(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRIS(:,:,:)*PRHODJ(:,:,:), 9  , 'HMG_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-   END IF
-   
-   IF (LBUDGET_RS) THEN
-      ZRSS(:,:,:) = ZRSS(:,:,:) - ZTOT_RI_CNVI(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'CNVI_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-      ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_DEPS(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'DEPS_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-      ZRSS(:,:,:) = ZRSS(:,:,:) - ZTOT_RI_CNVS(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'CNVS_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-      ZRSS(:,:,:) = ZRSS(:,:,:) - ZTOT_RI_AGGS(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'AGGS_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-      ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_RIM(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'RIM_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-      ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_HMS(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'HMS_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-      ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_ACC(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'ACC_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-      ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_CMEL(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'CMEL_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-      ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_WETG(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'WETG_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-      ZRSS(:,:,:) = ZRSS(:,:,:) + ZTOT_RS_DRYG(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRSS(:,:,:)*PRHODJ(:,:,:), 10 , 'DRYG_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-   END IF
-   
-   IF (LBUDGET_RG) THEN
-      ZRGS(:,:,:) = ZRGS(:,:,:) - ZTOT_RR_HONR(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'HONR_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-      ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_DEPG(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'DEPG_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-      ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_RIM(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'RIM_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-      ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_ACC(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'ACC_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-      ZRGS(:,:,:) = ZRGS(:,:,:) - ZTOT_RS_CMEL(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'CMEL_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-      ZRGS(:,:,:) = ZRGS(:,:,:) - ZTOT_RR_CFRZ(:,:,:)/PTSTEP - ZTOT_RI_CFRZ(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'CFRZ_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-      ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_WETG(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'WETG_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-      ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_DRYG(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'DRYG_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-      ZRGS(:,:,:) = ZRGS(:,:,:) + ZTOT_RG_HMG(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'HMG_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-      ZRGS(:,:,:) = ZRGS(:,:,:) - ZTOT_RR_GMLT(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRGS(:,:,:)*PRHODJ(:,:,:), 11 , 'GMLT_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-   END IF
-
-   IF (LBUDGET_RH) THEN
-      ZRHS(:,:,:) = ZRHS(:,:,:) + ZTOT_RH_WETG(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZRHS(:,:,:)*PRHODJ(:,:,:), 12 , 'WETG_BU_RRH',YDDDH, YDLDDH, YDMDDH)
-   END IF
-
-   IF (LBUDGET_SV) THEN
-      !
-      ! Cloud droplets
-      !
-      ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_SELF(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'SELF_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_AUTO(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'AUTO_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_ACCR(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'ACCR_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ! impact of rain evap !!!!!!
-      ZCCS(:,:,:) = ZCCS(:,:,:)
-      CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'REVA_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_HONC(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'HONC_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_IMLT(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'IMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_RIM(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'RIM_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_WETG(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ZCCS(:,:,:) = ZCCS(:,:,:) + ZTOT_CC_DRYG(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCCS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NC  , 'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      !
-      ! Rain drops
-      !
-      ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_AUTO(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'AUTO_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_SCBU(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'SCBU_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ! Rain evaporation !!!!!!!!!!!!!
-      ZCRS(:,:,:) = ZCRS(:,:,:)
-      CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'REVA_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_BRKU(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'BRKU_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_HONR(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'HONR_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_ACC(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'ACC_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_CFRZ(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'CFRZ_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_WETG(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_DRYG(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ZCRS(:,:,:) = ZCRS(:,:,:) + ZTOT_CR_GMLT(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCRS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NR  , 'GMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      !
-      ! Ice crystals
-      !
-      ZCIS(:,:,:) = ZCIS(:,:,:) - ZTOT_CC_HONC(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI  , 'HONC_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_CNVI(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI  , 'CNVI_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_CNVS(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI  , 'CNVS_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_AGGS(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI  , 'AGGS_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ZCIS(:,:,:) = ZCIS(:,:,:) - ZTOT_CC_IMLT(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI  , 'IMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_HMS(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI  , 'HMS_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_CFRZ(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI  , 'CFRZ_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_WETG(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI  , 'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_DRYG(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI  , 'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ZCIS(:,:,:) = ZCIS(:,:,:) + ZTOT_CI_HMG(:,:,:)/PTSTEP
-      CALL BUDGET_DDH (ZCIS(:,:,:)*PRHODJ(:,:,:), 12+NSV_LIMA_NI  , 'HMG_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-   END IF
-!!$            ZTOT_RC_EVAP(I1(II),I2(II),I3(II)) =   ZTOT_RC_EVAP(I1(II),I2(II),I3(II))   + Z_RC_EVAP(II)  * ZMAXTIME(II)
-!!$            ZTOT_CC_EVAP(I1(II),I2(II),I3(II)) =   ZTOT_CC_EVAP(I1(II),I2(II),I3(II))   + Z_CC_EVAP(II)  * ZMAXTIME(II)
-!!$            ZTOT_CR_EVAP(I1(II),I2(II),I3(II)) =   ZTOT_CR_EVAP(I1(II),I2(II),I3(II))   + Z_CR_EVAP(II)  * ZMAXTIME(II)
-
-!!$            ZTOT_RC_WETH(I1(II),I2(II),I3(II)) =   ZTOT_RC_WETH(I1(II),I2(II),I3(II))   + Z_RC_WETH(II)  * ZMAXTIME(II)
-!!$            ZTOT_CC_WETH(I1(II),I2(II),I3(II)) =   ZTOT_CC_WETH(I1(II),I2(II),I3(II))   + Z_CC_WETH(II)  * ZMAXTIME(II)
-!!$            ZTOT_RR_WETH(I1(II),I2(II),I3(II)) =   ZTOT_RR_WETH(I1(II),I2(II),I3(II))   + Z_RR_WETH(II)  * ZMAXTIME(II)
-!!$            ZTOT_CR_WETH(I1(II),I2(II),I3(II)) =   ZTOT_CR_WETH(I1(II),I2(II),I3(II))   + Z_CR_WETH(II)  * ZMAXTIME(II)
-!!$            ZTOT_RI_WETH(I1(II),I2(II),I3(II)) =   ZTOT_RI_WETH(I1(II),I2(II),I3(II))   + Z_RI_WETH(II)  * ZMAXTIME(II)
-!!$            ZTOT_CI_WETH(I1(II),I2(II),I3(II)) =   ZTOT_CI_WETH(I1(II),I2(II),I3(II))   + Z_CI_WETH(II)  * ZMAXTIME(II)
-!!$            ZTOT_RS_WETH(I1(II),I2(II),I3(II)) =   ZTOT_RS_WETH(I1(II),I2(II),I3(II))   + Z_RS_WETH(II)  * ZMAXTIME(II)
-!!$            ZTOT_RG_WETH(I1(II),I2(II),I3(II)) =   ZTOT_RG_WETH(I1(II),I2(II),I3(II))   + Z_RG_WETH(II)  * ZMAXTIME(II)
-!!$            ZTOT_RH_WETH(I1(II),I2(II),I3(II)) =   ZTOT_RH_WETH(I1(II),I2(II),I3(II))   + Z_RH_WETH(II)  * ZMAXTIME(II)
-!!$            ZTOT_RG_COHG(I1(II),I2(II),I3(II)) =   ZTOT_RG_COHG(I1(II),I2(II),I3(II))   + Z_RG_COHG(II)  * ZMAXTIME(II)
-!!$            ZTOT_RR_HMLT(I1(II),I2(II),I3(II)) =   ZTOT_RR_HMLT(I1(II),I2(II),I3(II))   + Z_RR_HMLT(II)  * ZMAXTIME(II)
-!!$            ZTOT_CR_HMLT(I1(II),I2(II),I3(II)) =   ZTOT_CR_HMLT(I1(II),I2(II),I3(II))   + Z_CR_HMLT(II)  * ZMAXTIME(II)
- 
-END IF
-!
-END SUBROUTINE LIMA
diff --git a/src/arome/micro/lima_adjust.F90 b/src/arome/micro/lima_adjust.F90
deleted file mode 100644
index fd7e8f5cd090d0f6936cc2fc43cca5ec3803d1a8..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_adjust.F90
+++ /dev/null
@@ -1,1229 +0,0 @@
-!     #######################
-      MODULE MODI_LIMA_ADJUST
-!     #######################
-!
-INTERFACE
-!
-      SUBROUTINE LIMA_ADJUST(KRR, KMI, HFMFILE, HLUOUT, HRAD,                  &
-                             HTURBDIM, OCLOSE_OUT, OSUBG_COND, PTSTEP,         &
-                             PRHODREF, PRHODJ, PEXNREF, PPABSM, PSIGS, PPABST, &
-                             PRT, PRS, PSVT, PSVS,                             &
-                             PTHS, PSRCS, PCLDFR, &
-                             YDDDH, YDLDDH, YDMDDH                               )
-         !
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-INTEGER,                  INTENT(IN)   :: KRR        ! Number of moist variables
-INTEGER,                  INTENT(IN)   :: KMI        ! Model index 
-CHARACTER(LEN=*),         INTENT(IN)   :: HFMFILE    ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)   :: HLUOUT     ! Output-listing name for
-                                                     ! model n
-CHARACTER*4,              INTENT(IN)   :: HTURBDIM   ! Dimensionality of the
-                                                     ! turbulence scheme
-CHARACTER*4,              INTENT(IN)   :: HRAD       ! Radiation scheme name
-LOGICAL,                  INTENT(IN)   :: OCLOSE_OUT ! Conditional closure of 
-                                                     ! the OUTPUT FM-file
-LOGICAL,                  INTENT(IN)   :: OSUBG_COND ! Switch for Subgrid 
-                                                     ! Condensation
-REAL,                     INTENT(IN)   :: PTSTEP     ! Time step          
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PRHODREF  ! Dry density of the 
-                                                     ! reference state
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PRHODJ    ! Dry density * Jacobian
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PEXNREF   ! Reference Exner function
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PPABSM    ! Absolute Pressure at t-dt
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PSIGS     ! Sigma_s at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PPABST    ! Absolute Pressure at t     
-!
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT       ! m.r. at t
-!
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS       ! m.r. source
-!
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT      ! Concentrations at t
-!
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS      ! Concentration source
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS      ! Theta source
-!
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PSRCS     ! Second-order flux
-                                                     ! s'rc'/2Sigma_s2 at time t+1
-                                                     ! multiplied by Lambda_3
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PCLDFR    ! Cloud fraction          
-!
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-END SUBROUTINE LIMA_ADJUST
-!
-END INTERFACE
-!
-END MODULE MODI_LIMA_ADJUST
-!
-!     ##########################################################################
-      SUBROUTINE LIMA_ADJUST(KRR, KMI, HFMFILE, HLUOUT, HRAD,                  &
-                             HTURBDIM, OCLOSE_OUT, OSUBG_COND, PTSTEP,         &
-                             PRHODREF, PRHODJ, PEXNREF, PPABSM, PSIGS, PPABST, &
-                             PRT, PRS, PSVT, PSVS,                             &
-                             PTHS, PSRCS, PCLDFR, &
-                             YDDDH, YDLDDH, YDMDDH                               )
-!     ##########################################################################
-!
-!!****  *MIMA_ADJUST* -  compute the fast microphysical sources 
-!!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the fast microphysical sources
-!!      through an explict scheme and a saturation ajustement procedure.
-!!
-!!
-!!**  METHOD
-!!    ------
-!!      Reisin et al.,    1996 for the explicit scheme when ice is present
-!!      Langlois, Tellus, 1973 for the implict adjustment for the cloud water
-!!      (refer also to book 1 of the documentation).
-!!
-!!      Computations are done separately for three cases :
-!!        - ri>0 and rc=0
-!!        - rc>0 and ri=0
-!!        - ri>0 and rc>0
-!!
-!!
-!!    EXTERNAL
-!!    --------
-!!      None
-!!     
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!      Module MODD_CST
-!!         XP00               ! Reference pressure
-!!         XMD,XMV            ! Molar mass of dry air and molar mass of vapor
-!!         XRD,XRV            ! Gaz constant for dry air, gaz constant for vapor
-!!         XCPD,XCPV          ! Cpd (dry air), Cpv (vapor)
-!!         XCL                ! Cl (liquid)
-!!         XTT                ! Triple point temperature
-!!         XLVTT              ! Vaporization heat constant
-!!         XALPW,XBETAW,XGAMW ! Constants for saturation vapor 
-!!                            !  pressure  function 
-!!      Module  MODD_CONF 
-!!         CCONF
-!!      Module MODD_BUDGET:
-!!         NBUMOD 
-!!         CBUTYPE
-!!         NBUPROCCTR 
-!!         LBU_RTH    
-!!         LBU_RRV  
-!!         LBU_RRC  
-!!      Module MODD_LES : NCTR_LES,LTURB_LES,NMODNBR_LES
-!!                        XNA declaration (cloud fraction as global var)
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!      Book 1 and Book2 of documentation ( routine FAST_TERMS )
-!!      Langlois, Tellus, 1973
-!!
-!!    AUTHOR
-!!    ------
-!!      E. Richard       * Laboratoire d'Aerologie*
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy*   jan. 2014  add budgets
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_PARAMETERS
-USE MODD_CST
-USE MODD_CONF
-USE MODD_PARAM_LIMA
-USE MODD_PARAM_LIMA_WARM
-USE MODD_PARAM_LIMA_COLD
-USE MODD_PARAM_LIMA_MIXED
-USE MODD_NSV
-USE MODD_BUDGET
-!
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-USE MODE_BUDGET, ONLY: BUDGET_DDH
-USE MODI_LIMA_FUNCTIONS
-!
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-!
-INTEGER,                  INTENT(IN)   :: KRR        ! Number of moist variables
-INTEGER,                  INTENT(IN)   :: KMI        ! Model index 
-CHARACTER(LEN=*),         INTENT(IN)   :: HFMFILE    ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)   :: HLUOUT     ! Output-listing name for
-                                                     ! model n
-CHARACTER*4,              INTENT(IN)   :: HTURBDIM   ! Dimensionality of the
-                                                     ! turbulence scheme
-CHARACTER*4,              INTENT(IN)   :: HRAD       ! Radiation scheme name
-LOGICAL,                  INTENT(IN)   :: OCLOSE_OUT ! Conditional closure of 
-                                                     ! the OUTPUT FM-file
-LOGICAL,                  INTENT(IN)   :: OSUBG_COND ! Switch for Subgrid 
-                                                     ! Condensation
-REAL,                     INTENT(IN)   :: PTSTEP     ! Time step          
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PRHODREF  ! Dry density of the 
-                                                     ! reference state
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PRHODJ    ! Dry density * Jacobian
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PEXNREF   ! Reference Exner function
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PPABSM    ! Absolute Pressure at t-dt
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PSIGS     ! Sigma_s at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PPABST    ! Absolute Pressure at t     
-!
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT       ! m.r. at t
-!
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS       ! m.r. source
-!
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT      ! Concentrations at t
-!
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS      ! Concentration source
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS      ! Theta source
-!
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PSRCS     ! Second-order flux
-                                                     ! s'rc'/2Sigma_s2 at time t+1
-                                                     ! multiplied by Lambda_3
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PCLDFR    ! Cloud fraction          
-!
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-!
-!*       0.2   Declarations of local variables :
-!
-! 3D Microphysical variables
-REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) &
-                         :: PRVT,        & ! Water vapor m.r. at t
-                            PRCT,        & ! Cloud water m.r. at t
-                            PRRT,        & ! Rain water m.r. at t
-                            PRIT,        & ! Cloud ice  m.r. at t
-                            PRST,        & ! Aggregate  m.r. at t
-                            PRGT,        & ! Graupel    m.r. at t
-!
-                            PRVS,        & ! Water vapor m.r. source
-                            PRCS,        & ! Cloud water m.r. source
-                            PRRS,        & ! Rain water m.r. source
-                            PRIS,        & ! Cloud ice  m.r. source
-                            PRSS,        & ! Aggregate  m.r. source
-                            PRGS,        & ! Graupel    m.r. source
-!
-                            PCCT,        & ! Cloud water conc. at t
-                            PCIT,        & ! Cloud ice   conc. at t
-!
-                            PCCS,        & ! Cloud water C. source
-                            PMAS,        & ! Mass of scavenged AP
-                            PCIS           ! Ice crystal C. source
-!
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE &
-                         :: PNFS,        & ! Free      CCN C. source
-                            PNAS,        & ! Activated CCN C. source
-                            PIFS,        & ! Free      IFN C. source 
-                            PINS,        & ! Nucleated IFN C. source
-                            PNIS           ! Acti. IMM. nuclei C. source
-!
-!
-!
-REAL                     :: ZEPS         ! Mv/Md
-REAL                     :: ZDT          ! Time increment (2*Delta t or Delta t if cold start)
-REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) &
-                         :: ZEXNS,&      ! guess of the Exner function at t+1
-                            ZT,   &      ! guess of the temperature at t+1
-                            ZCPH, &      ! guess of the CPh for the mixing
-                            ZW,   &
-                            ZW1,  &
-                            ZW2,  &
-                            ZLV,  &      ! guess of the Lv at t+1
-                            ZLS,  &      ! guess of the Ls at t+1
-                            ZMASK
-LOGICAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) &
-                         :: GMICRO, GMICRO_RI, GMICRO_RC ! Test where to compute cond/dep proc.
-INTEGER                  :: IMICRO
-REAL, DIMENSION(:), ALLOCATABLE &
-                         :: ZRVT, ZRCT, ZRIT, ZRVS, ZRCS, ZRIS, ZTHS,        &
-                            ZCCT, ZCIT, ZCCS, ZCIS,                          &
-                            ZRHODREF, ZZT, ZPRES, ZEXNREF, ZZCPH,            &
-                            ZZW, ZLVFACT, ZLSFACT,                           &
-                            ZRVSATW, ZRVSATI, ZRVSATW_PRIME, ZRVSATI_PRIME,  &
-                            ZAW, ZAI, ZCJ, ZKA, ZDV, ZITW, ZITI, ZAWW, ZAIW, &
-                            ZAWI, ZAII, ZFACT, ZDELTW,                       &
-                            ZDELTI, ZDELT1, ZDELT2, ZCND, ZDEP
-!
-INTEGER                  :: IRESP      ! Return code of FM routines
-INTEGER                  :: ILENG      ! Length of comment string in LFIFM file
-INTEGER                  :: IGRID      ! C-grid indicator in LFIFM file
-INTEGER                  :: ILENCH     ! Length of comment string in LFIFM file
-INTEGER                  :: IKB        ! K index value of the first inner mass point
-INTEGER                  :: IKE        ! K index value of the last inner mass point
-INTEGER                  :: IIB,IJB    ! Horz index values of the first inner mass points
-INTEGER                  :: IIE,IJE    ! Horz index values of the last inner mass points
-INTEGER                  :: JITER,ITERMAX  ! iterative loop for first order adjustment
-INTEGER                  :: ILUOUT     ! Logical unit of output listing 
-CHARACTER (LEN=100)      :: YCOMMENT   ! Comment string in LFIFM file
-CHARACTER (LEN=16)       :: YRECFM     ! Name of the desired field in LFIFM file
-!
-INTEGER                           :: ISIZE
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRTMIN
-REAL, DIMENSION(:), ALLOCATABLE   :: ZCTMIN
-!
-INTEGER , DIMENSION(SIZE(GMICRO)) :: I1,I2,I3 ! Used to replace the COUNT
-INTEGER                           :: JL       ! and PACK intrinsics
-INTEGER                           :: JMOD, JMOD_IFN, JMOD_IMM
-!
-INTEGER , DIMENSION(3) :: BV
-!
-!-------------------------------------------------------------------------------
-!
-!*       1.     PRELIMINARIES
-!               -------------
-!
-CALL FMLOOK_ll(HLUOUT,HLUOUT,ILUOUT,IRESP)
-!
-IIB = 1 + JPHEXT
-IIE = SIZE(PRHODJ,1) - JPHEXT
-IJB = 1 + JPHEXT
-IJE = SIZE(PRHODJ,2) - JPHEXT
-IKB = 1 + JPVEXT
-IKE = SIZE(PRHODJ,3) - JPVEXT
-!
-ZEPS= XMV / XMD
-!
-IF (OSUBG_COND) THEN
-  ITERMAX=2
-ELSE
-  ITERMAX=1
-END IF
-!
-ZDT = PTSTEP
-!
-ISIZE = SIZE(XRTMIN)
-ALLOCATE(ZRTMIN(ISIZE))
-ZRTMIN(:) = XRTMIN(:) / ZDT
-ISIZE = SIZE(XCTMIN)
-ALLOCATE(ZCTMIN(ISIZE))
-ZCTMIN(:) = XCTMIN(:) / ZDT
-!
-! Prepare 3D water mixing ratios
-PRVT(:,:,:) = PRT(:,:,:,1)
-PRVS(:,:,:) = PRS(:,:,:,1)
-!
-PRCT(:,:,:) = 0.
-PRCS(:,:,:) = 0.
-PRRT(:,:,:) = 0.
-PRRS(:,:,:) = 0.
-PRIT(:,:,:) = 0.
-PRIS(:,:,:) = 0.
-PRST(:,:,:) = 0.
-PRSS(:,:,:) = 0.
-PRGT(:,:,:) = 0.
-PRGS(:,:,:) = 0.
-!
-IF ( KRR .GE. 2 ) PRCT(:,:,:) = PRT(:,:,:,2)
-IF ( KRR .GE. 2 ) PRCS(:,:,:) = PRS(:,:,:,2)
-IF ( KRR .GE. 3 ) PRRT(:,:,:) = PRT(:,:,:,3) 
-IF ( KRR .GE. 3 ) PRRS(:,:,:) = PRS(:,:,:,3)
-IF ( KRR .GE. 4 ) PRIT(:,:,:) = PRT(:,:,:,4)
-IF ( KRR .GE. 4 ) PRIS(:,:,:) = PRS(:,:,:,4) 
-IF ( KRR .GE. 5 ) PRST(:,:,:) = PRT(:,:,:,5) 
-IF ( KRR .GE. 5 ) PRSS(:,:,:) = PRS(:,:,:,5) 
-IF ( KRR .GE. 6 ) PRGT(:,:,:) = PRT(:,:,:,6)
-IF ( KRR .GE. 6 ) PRGS(:,:,:) = PRS(:,:,:,6)
-!
-! Prepare 3D number concentrations
-PCCT(:,:,:) = 0.
-PCIT(:,:,:) = 0.
-PCCS(:,:,:) = 0.
-PCIS(:,:,:) = 0.
-!
-IF ( LWARM_LIMA ) PCCT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NC)
-IF ( LCOLD_LIMA ) PCIT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NI)
-!
-IF ( LWARM_LIMA ) PCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC)
-IF ( LCOLD_LIMA ) PCIS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI)
-!
-IF ( LSCAV .AND. LAERO_MASS ) PMAS(:,:,:) = PSVS(:,:,:,NSV_LIMA_SCAVMASS)
-! 
-IF ( LWARM_LIMA .AND. NMOD_CCN.GE.1 ) THEN
-   ALLOCATE( PNFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_CCN) )
-   ALLOCATE( PNAS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_CCN) )
-   PNFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1)
-   PNAS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1)
-END IF
-!
-IF ( LCOLD_LIMA .AND. NMOD_IFN .GE. 1 ) THEN
-   ALLOCATE( PIFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_IFN) )
-   ALLOCATE( PINS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_IFN) )
-   PIFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1)
-   PINS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1)
-END IF
-!
-IF ( NMOD_IMM .GE. 1 ) THEN
-   ALLOCATE( PNIS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_IMM) )
-   PNIS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1)
-END IF
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       2.     COMPUTE QUANTITIES WITH THE GUESS OF THE FUTURE INSTANT
-!               -------------------------------------------------------
-!
-!*       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
-!
-WHERE ( PRVS(:,:,:)+PRCS(:,:,:)+PRIS(:,:,:) < 0.)
-  PRVS(:,:,:) = -  PRCS(:,:,:) - PRIS(:,:,:)
-END WHERE
-!
-!*       2.2    estimate the Exner function at t+1
-!
-ZEXNS(:,:,:) = ( (2. * PPABST(:,:,:) - PPABSM(:,:,:)) / XP00 ) ** (XRD/XCPD)  
-!
-!    beginning of the iterative loop
-!
-DO JITER =1,ITERMAX
-!
-!*       2.3    compute the intermediate temperature at t+1, T*
-!  
-  ZT(:,:,:) = ( PTHS(:,:,:) * ZDT ) * ZEXNS(:,:,:)
-!
-!*       2.4    compute the specific heat for moist air (Cph) at t+1
-!
-  ZCPH(:,:,:) = XCPD + XCPV  *ZDT*   PRVS(:,:,:)                             &
-                     + XCL   *ZDT* ( PRCS(:,:,:) + PRRS(:,:,:) )             &
-                     + XCI   *ZDT* ( PRIS(:,:,:) + PRSS(:,:,:) + PRGS(:,:,:) )
-!
-!*       2.5    compute the latent heat of vaporization Lv(T*) at t+1
-!               and of sublimation Ls(T*) at t+1
-!
-  ZLV(:,:,:) = XLVTT + ( XCPV - XCL ) * ( ZT(:,:,:) -XTT )
-  ZLS(:,:,:) = XLSTT + ( XCPV - XCI ) * ( ZT(:,:,:) -XTT )
-!
-!
-!-------------------------------------------------------------------------------
-!
-!*       3.     FIRST ORDER SUBGRID CONDENSATION SCHEME
-!               ---------------------------------------
-!
-  IF ( OSUBG_COND ) THEN
-!
-! not yet available
-!
-     STOP
-  ELSE
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       4.     FULLY EXPLICIT SCHEME FROM TZIVION et al. (1989)
-!               -----------------------------------------------
-! 
-!*              select cases where r_i>0 and r_c=0
-! 
-GMICRO(:,:,:) = .FALSE.
-GMICRO(IIB:IIE,IJB:IJE,IKB:IKE) =                                         &
-                         (PRIS(IIB:IIE,IJB:IJE,IKB:IKE)>ZRTMIN(4) .AND.        &
-                          PCIS(IIB:IIE,IJB:IJE,IKB:IKE)>ZCTMIN(4)      )       &
-             .AND. .NOT. (PRCS(IIB:IIE,IJB:IJE,IKB:IKE)>ZRTMIN(2) .AND.        &
-                          PCCS(IIB:IIE,IJB:IJE,IKB:IKE)>ZCTMIN(2)      )
-GMICRO_RI(:,:,:) = GMICRO(:,:,:)
-IMICRO = COUNTJV( GMICRO(:,:,:),I1(:),I2(:),I3(:))
-IF( IMICRO >= 1 ) THEN
-   ALLOCATE(ZRVT(IMICRO))
-   ALLOCATE(ZRIT(IMICRO))
-   ALLOCATE(ZCIT(IMICRO))
-!
-   ALLOCATE(ZRVS(IMICRO))
-   ALLOCATE(ZRIS(IMICRO))
-   ALLOCATE(ZCIS(IMICRO))  !!!BVIE!!!
-   ALLOCATE(ZTHS(IMICRO))
-!
-   ALLOCATE(ZRHODREF(IMICRO))
-   ALLOCATE(ZZT(IMICRO))
-   ALLOCATE(ZPRES(IMICRO))
-   ALLOCATE(ZEXNREF(IMICRO))
-   ALLOCATE(ZZCPH(IMICRO))
-   DO JL=1,IMICRO
-      ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL))
-      ZRIT(JL) = PRIT(I1(JL),I2(JL),I3(JL))
-      ZCIT(JL) = PCIT(I1(JL),I2(JL),I3(JL))
-!
-      ZRVS(JL) = PRVS(I1(JL),I2(JL),I3(JL))
-      ZRIS(JL) = PRIS(I1(JL),I2(JL),I3(JL))
-      ZCIS(JL) = PCIS(I1(JL),I2(JL),I3(JL)) !!!BVIE!!!
-      ZTHS(JL) = PTHS(I1(JL),I2(JL),I3(JL))
-!
-      ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL))
-      ZZT(JL) = ZT(I1(JL),I2(JL),I3(JL))
-      ZPRES(JL) = 2.0*PPABST(I1(JL),I2(JL),I3(JL))-PPABSM(I1(JL),I2(JL),I3(JL))
-      ZEXNREF(JL) = PEXNREF(I1(JL),I2(JL),I3(JL))
-      ZZCPH(JL) = ZCPH(I1(JL),I2(JL),I3(JL))
-   ENDDO
-   ALLOCATE(ZZW(IMICRO))
-   ALLOCATE(ZLSFACT(IMICRO))
-   ZLSFACT(:) = (XLSTT+(XCPV-XCI)*(ZZT(:)-XTT))/ZZCPH(:) ! L_s/C_ph
-   ALLOCATE(ZRVSATI(IMICRO))
-   ALLOCATE(ZRVSATI_PRIME(IMICRO))
-   ALLOCATE(ZDELTI(IMICRO))
-   ALLOCATE(ZAI(IMICRO))
-   ALLOCATE(ZCJ(IMICRO))
-   ALLOCATE(ZKA(IMICRO))
-   ALLOCATE(ZDV(IMICRO))
-   ALLOCATE(ZITI(IMICRO))
-!
-   ZKA(:) = 2.38E-2 + 0.0071E-2 * ( ZZT(:) - XTT )          ! k_a
-   ZDV(:) = 0.211E-4 * (ZZT(:)/XTT)**1.94 * (XP00/ZPRES(:)) ! D_v
-   ZCJ(:) = XSCFAC * ZRHODREF(:)**0.3 / SQRT( 1.718E-5+0.0049E-5*(ZZT(:)-XTT) )
-!
-   ZZW(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) ) ! es_i
-   ZRVSATI(:) = ZEPS*ZZW(:) / ( ZPRES(:)-ZZW(:) )              ! r_si
-   ZRVSATI_PRIME(:) = (( XBETAI/ZZT(:) - XGAMI ) / ZZT(:))  &  ! r'_si
-                       * ZRVSATI(:) * ( 1. + ZRVSATI(:)/ZEPS )
-!
-   ZDELTI(:) = ZRVS(:)*ZDT - ZRVSATI(:)
-   ZAI(:) = ( XLSTT + (XCPV-XCI)*(ZZT(:)-XTT) )**2 / (ZKA(:)*XRV*ZZT(:)**2) &
-                                  + ( XRV*ZZT(:) ) / (ZDV(:)*ZZW(:))
-   ZZW(:) = MIN(1.E8,( XLBI* MAX(ZCIT(:),XCTMIN(4))                       &
-                           /(MAX(ZRIT(:),XRTMIN(4))) )**XLBEXI)
-                                                                  ! Lbda_I
-   ZITI(:) = ZCIT(:) * (X0DEPI/ZZW(:) + X2DEPI*ZCJ(:)*ZCJ(:)/ZZW(:)**(XDI+2.0)) &
-                     / (ZRVSATI(:)*ZAI(:))
-!
-   ALLOCATE(ZAII(IMICRO))
-   ALLOCATE(ZDEP(IMICRO))
-!
-   ZAII(:) = 1.0 + ZRVSATI_PRIME(:)*ZLSFACT(:)
-   ZDEP(:) = 0.0
-!
-   ZZW(:)  = ZAII(:)*ZITI(:)*ZDT ! R*delta_T
-   WHERE( ZZW(:)<1.0E-2 )
-      ZDEP(:) = ZITI(:)*ZDELTI(:)*(1.0 - (ZZW(:)/2.0)*(1.0-ZZW(:)/3.0))
-   ELSEWHERE          
-      ZDEP(:) = ZITI(:)*ZDELTI(:)*(1.0 - EXP(-ZZW(:)))/ZZW(:)
-   END WHERE
-!
-! Integration
-!
-   WHERE( ZDEP(:) < 0.0 )
-      ZDEP(:) = MAX ( ZDEP(:), -ZRIS(:) )
-   ELSEWHERE
-      ZDEP(:) = MIN ( ZDEP(:),  ZRVS(:) )
-!      ZDEP(:) = MIN ( ZDEP(:),  ZCIS(:)*5.E-10 ) !!!BVIE!!!
-   END WHERE
-   WHERE( ZRIS(:) < ZRTMIN(4) )
-      ZDEP(:) = 0.0
-   END WHERE
-   ZRVS(:) = ZRVS(:) - ZDEP(:)
-   ZRIS(:) = ZRIS(:) + ZDEP(:)
-   ZTHS(:) = ZTHS(:) + ZDEP(:) * ZLSFACT(:) / ZEXNREF(:)
-!
-!  Implicit ice crystal sublimation if ice saturated conditions are not met
-!
-   ZZT(:) = ( ZTHS(:) * ZDT ) * ( ZPRES(:) / XP00 ) ** (XRD/XCPD)
-   ZZW(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) ) ! es_i
-   ZRVSATI(:) = ZEPS*ZZW(:) / ( ZPRES(:)-ZZW(:) )              ! r_si
-   WHERE( ZRVS(:)*ZDT<ZRVSATI(:) )
-      ZZW(:)  = ZRVS(:) + ZRIS(:)
-      ZRVS(:) = MIN( ZZW(:),ZRVSATI(:)/ZDT )
-      ZTHS(:) = ZTHS(:) + ( MAX( 0.0,ZZW(:)-ZRVS(:) )-ZRIS(:) ) &
-                          * ZLSFACT(:) / ZEXNREF(:)
-      ZRIS(:) = MAX( 0.0,ZZW(:)-ZRVS(:) )
-   END WHERE
-!
-!
-   ZW(:,:,:) = PRVS(:,:,:)
-   PRVS(:,:,:) = UNPACK( ZRVS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:) = PRIS(:,:,:)
-   PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:) = PTHS(:,:,:)
-   PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-!
-   DEALLOCATE(ZRVT)
-   DEALLOCATE(ZRIT)
-   DEALLOCATE(ZCIT)
-   DEALLOCATE(ZRVS)
-   DEALLOCATE(ZRIS)
-   DEALLOCATE(ZCIS) !!!BVIE!!!
-   DEALLOCATE(ZTHS)
-   DEALLOCATE(ZRHODREF)
-   DEALLOCATE(ZZT)
-   DEALLOCATE(ZPRES)
-   DEALLOCATE(ZEXNREF)
-   DEALLOCATE(ZZCPH)
-   DEALLOCATE(ZZW)
-   DEALLOCATE(ZLSFACT)
-   DEALLOCATE(ZRVSATI)
-   DEALLOCATE(ZRVSATI_PRIME)
-   DEALLOCATE(ZDELTI)
-   DEALLOCATE(ZAI)
-   DEALLOCATE(ZCJ)
-   DEALLOCATE(ZKA)
-   DEALLOCATE(ZDV)
-   DEALLOCATE(ZITI)
-   DEALLOCATE(ZAII)
-   DEALLOCATE(ZDEP)
-END IF ! IMICRO
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       5.     FULLY IMPLICIT CONDENSATION SCHEME
-!               ---------------------------------
-! 
-!*              select cases where r_c>0 and r_i=0
-! 
-!
-GMICRO(IIB:IIE,IJB:IJE,IKB:IKE) =                                      & 
-          .NOT. GMICRO_RI(IIB:IIE,IJB:IJE,IKB:IKE)                     &
-          .AND. ( PRCS(IIB:IIE,IJB:IJE,IKB:IKE)>ZRTMIN(2) .AND.        &
-                  PCCS(IIB:IIE,IJB:IJE,IKB:IKE)>ZCTMIN(2)      )       &
-    .AND. .NOT. ( PRIS(IIB:IIE,IJB:IJE,IKB:IKE)>ZRTMIN(4) .AND.        &
-                  PCIS(IIB:IIE,IJB:IJE,IKB:IKE)>ZCTMIN(4)      )
-GMICRO_RC(:,:,:) = GMICRO(:,:,:)
-IMICRO = COUNTJV( GMICRO(:,:,:),I1(:),I2(:),I3(:))
-IF( IMICRO >= 1 ) THEN
-   ALLOCATE(ZRVT(IMICRO))
-   ALLOCATE(ZRCT(IMICRO))
-!
-   ALLOCATE(ZRVS(IMICRO))
-   ALLOCATE(ZRCS(IMICRO))
-   ALLOCATE(ZTHS(IMICRO))
-!
-   ALLOCATE(ZRHODREF(IMICRO))
-   ALLOCATE(ZZT(IMICRO))
-   ALLOCATE(ZPRES(IMICRO))
-   ALLOCATE(ZEXNREF(IMICRO))
-   ALLOCATE(ZZCPH(IMICRO))
-   DO JL=1,IMICRO
-      ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL))
-      ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL))
-!
-      ZRVS(JL) = PRVS(I1(JL),I2(JL),I3(JL))
-      ZRCS(JL) = PRCS(I1(JL),I2(JL),I3(JL))
-      ZTHS(JL) = PTHS(I1(JL),I2(JL),I3(JL))
-!
-      ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL))
-      ZZT(JL) = ZT(I1(JL),I2(JL),I3(JL))
-      ZPRES(JL) = 2.0*PPABST(I1(JL),I2(JL),I3(JL))-PPABSM(I1(JL),I2(JL),I3(JL))
-      ZEXNREF(JL) = PEXNREF(I1(JL),I2(JL),I3(JL))
-      ZZCPH(JL) = ZCPH(I1(JL),I2(JL),I3(JL))
-   ENDDO
-   ALLOCATE(ZZW(IMICRO))
-   ALLOCATE(ZLVFACT(IMICRO))
-   ZLVFACT(:) = (XLVTT+(XCPV-XCL)*(ZZT(:)-XTT))/ZZCPH(:) ! L_v/C_ph
-   ALLOCATE(ZRVSATW(IMICRO))
-   ALLOCATE(ZRVSATW_PRIME(IMICRO))
-!
-   ZZW(:) = EXP( XALPW - XBETAW/ZZT(:) - XGAMW*ALOG(ZZT(:) ) ) ! es_w
-   ZRVSATW(:) = ZEPS*ZZW(:) / ( ZPRES(:)-ZZW(:) )              ! r_sw
-   ZRVSATW_PRIME(:) = (( XBETAW/ZZT(:) - XGAMW ) / ZZT(:))  &  ! r'_sw
-                      * ZRVSATW(:) * ( 1. + ZRVSATW(:)/ZEPS )
-   ALLOCATE(ZAWW(IMICRO))
-   ALLOCATE(ZDELT1(IMICRO))
-   ALLOCATE(ZDELT2(IMICRO))
-   ALLOCATE(ZCND(IMICRO))
-!
-   ZAWW(:) = 1.0 + ZRVSATW_PRIME(:)*ZLVFACT(:)
-   ZDELT2(:) = (ZRVSATW_PRIME(:)*ZLVFACT(:)/ZAWW(:)) *                     &
-               ( ((-2.*XBETAW+XGAMW*ZZT(:))/(XBETAW-XGAMW*ZZT(:))          &
-               + (XBETAW/ZZT(:)-XGAMW)*(1.0+2.0*ZRVSATW(:)/ZEPS))/ZZT(:) )
-   ZDELT1(:) = (ZLVFACT(:)/ZAWW(:)) * ( ZRVSATW(:) - ZRVS(:)*ZDT )
-   ZCND(:) = - ZDELT1(:)*( 1.0 + 0.5*ZDELT1(:)*ZDELT2(:) ) / (ZLVFACT(:)*ZDT)
-!
-! Integration
-!
-   WHERE( ZCND(:) < 0.0 )
-      ZCND(:) = MAX ( ZCND(:), -ZRCS(:) )
-   ELSEWHERE
-      ZCND(:) = MIN ( ZCND(:),  ZRVS(:) )
-   END WHERE
-   ZRVS(:) = ZRVS(:) - ZCND(:)
-   ZRCS(:) = ZRCS(:) + ZCND(:)
-   ZTHS(:) = ZTHS(:) + ZCND(:) * ZLVFACT(:) / ZEXNREF(:)
-!
-   ZW(:,:,:) = PRVS(:,:,:)
-   PRVS(:,:,:) = UNPACK( ZRVS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:) = PRCS(:,:,:)
-   PRCS(:,:,:) = UNPACK( ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:) = PTHS(:,:,:)
-   PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-!
-   DEALLOCATE(ZRVT)
-   DEALLOCATE(ZRCT)
-   DEALLOCATE(ZRVS)
-   DEALLOCATE(ZRCS)
-   DEALLOCATE(ZTHS)
-   DEALLOCATE(ZRHODREF)
-   DEALLOCATE(ZZT)
-   DEALLOCATE(ZPRES)
-   DEALLOCATE(ZEXNREF)
-   DEALLOCATE(ZZCPH)
-   DEALLOCATE(ZZW)
-   DEALLOCATE(ZLVFACT)
-   DEALLOCATE(ZRVSATW)
-   DEALLOCATE(ZRVSATW_PRIME)
-   DEALLOCATE(ZAWW)
-   DEALLOCATE(ZDELT1)
-   DEALLOCATE(ZDELT2)
-   DEALLOCATE(ZCND)
-END IF ! IMICRO
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       6.     IMPLICIT-EXPLICIT SCHEME USING REISIN et al. (1996)
-!               ---------------------------------------------------
-! 
-!*              select cases where r_i>0 and r_c>0 (supercooled water)
-! 
-!
-GMICRO(IIB:IIE,IJB:IJE,IKB:IKE) =                                      &
-           .NOT. GMICRO_RI(IIB:IIE,IJB:IJE,IKB:IKE)                    &
-     .AND. .NOT. GMICRO_RC(IIB:IIE,IJB:IJE,IKB:IKE)                    &
-           .AND. ( PRIS(IIB:IIE,IJB:IJE,IKB:IKE)>ZRTMIN(4) .AND.       &
-                   PCIS(IIB:IIE,IJB:IJE,IKB:IKE)>ZCTMIN(4)       )     &
-           .AND. ( PRCS(IIB:IIE,IJB:IJE,IKB:IKE)>ZRTMIN(2) .AND.       &
-                   PCCS(IIB:IIE,IJB:IJE,IKB:IKE)>ZCTMIN(2)       )
-IMICRO = COUNTJV( GMICRO(:,:,:),I1(:),I2(:),I3(:))
-IF( IMICRO >= 1 ) THEN
-   ALLOCATE(ZRVT(IMICRO))
-   ALLOCATE(ZRCT(IMICRO))
-   ALLOCATE(ZRIT(IMICRO))
-   ALLOCATE(ZCCT(IMICRO))
-   ALLOCATE(ZCIT(IMICRO))
-!
-   ALLOCATE(ZRVS(IMICRO))
-   ALLOCATE(ZRCS(IMICRO))
-   ALLOCATE(ZRIS(IMICRO))
-   ALLOCATE(ZCCS(IMICRO))
-   ALLOCATE(ZCIS(IMICRO))
-   ALLOCATE(ZTHS(IMICRO))
-!
-   ALLOCATE(ZRHODREF(IMICRO))
-   ALLOCATE(ZZT(IMICRO))
-   ALLOCATE(ZPRES(IMICRO))
-   ALLOCATE(ZEXNREF(IMICRO))
-   ALLOCATE(ZZCPH(IMICRO))
-   DO JL=1,IMICRO
-      ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL))
-      ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL))
-      ZRIT(JL) = PRIT(I1(JL),I2(JL),I3(JL))
-      ZCCT(JL) = PCCT(I1(JL),I2(JL),I3(JL))
-      ZCIT(JL) = PCIT(I1(JL),I2(JL),I3(JL))
-!
-      ZRVS(JL) = PRVS(I1(JL),I2(JL),I3(JL))
-      ZRCS(JL) = PRCS(I1(JL),I2(JL),I3(JL))
-      ZRIS(JL) = PRIS(I1(JL),I2(JL),I3(JL))
-      ZCCS(JL) = PCCS(I1(JL),I2(JL),I3(JL))
-      ZCIS(JL) = PCIS(I1(JL),I2(JL),I3(JL))
-      ZTHS(JL) = PTHS(I1(JL),I2(JL),I3(JL))
-!
-      ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL))
-      ZZT(JL) = ZT(I1(JL),I2(JL),I3(JL))
-      ZPRES(JL) = 2.0*PPABST(I1(JL),I2(JL),I3(JL))-PPABSM(I1(JL),I2(JL),I3(JL))
-      ZEXNREF(JL) = PEXNREF(I1(JL),I2(JL),I3(JL))
-      ZZCPH(JL) = ZCPH(I1(JL),I2(JL),I3(JL))
-   ENDDO
-   ALLOCATE(ZZW(IMICRO))
-   ALLOCATE(ZLVFACT(IMICRO))
-   ALLOCATE(ZLSFACT(IMICRO))
-   ZLVFACT(:) = (XLVTT+(XCPV-XCL)*(ZZT(:)-XTT))/ZZCPH(:) ! L_v/C_ph
-   ZLSFACT(:) = (XLSTT+(XCPV-XCI)*(ZZT(:)-XTT))/ZZCPH(:) ! L_s/C_ph
-   ALLOCATE(ZRVSATW(IMICRO))
-   ALLOCATE(ZRVSATI(IMICRO))
-   ALLOCATE(ZRVSATW_PRIME(IMICRO))
-   ALLOCATE(ZRVSATI_PRIME(IMICRO))
-   ALLOCATE(ZDELTW(IMICRO))
-   ALLOCATE(ZDELTI(IMICRO))
-   ALLOCATE(ZAW(IMICRO))
-   ALLOCATE(ZAI(IMICRO))
-   ALLOCATE(ZCJ(IMICRO))
-   ALLOCATE(ZKA(IMICRO))
-   ALLOCATE(ZDV(IMICRO))
-   ALLOCATE(ZITW(IMICRO))
-   ALLOCATE(ZITI(IMICRO))
-!
-   ZKA(:) = 2.38E-2 + 0.0071E-2 * ( ZZT(:) - XTT )          ! k_a
-   ZDV(:) = 0.211E-4 * (ZZT(:)/XTT)**1.94 * (XP00/ZPRES(:)) ! D_v
-   ZCJ(:) = XSCFAC * ZRHODREF(:)**0.3 / SQRT( 1.718E-5+0.0049E-5*(ZZT(:)-XTT) )
-!
-!*       6.2    implicit adjustment at water saturation
-!
-   ZZW(:) = EXP( XALPW - XBETAW/ZZT(:) - XGAMW*ALOG(ZZT(:) ) ) ! es_w
-   ZRVSATW(:) = ZEPS*ZZW(:) / ( ZPRES(:)-ZZW(:) )              ! r_sw
-   ZRVSATW_PRIME(:) = (( XBETAW/ZZT(:) - XGAMW ) / ZZT(:))  &  ! r'_sw
-                      * ZRVSATW(:) * ( 1. + ZRVSATW(:)/ZEPS )
-   ZDELTW(:) = ABS( ZRVS(:)*ZDT - ZRVSATW(:) )
-   ZAW(:) = ( XLSTT + (XCPV-XCL)*(ZZT(:)-XTT) )**2 / (ZKA(:)*XRV*ZZT(:)**2) &
-                                  + ( XRV*ZZT(:) ) / (ZDV(:)*ZZW(:))
-   ZZW(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) ) ! es_i
-   ZRVSATI(:) = ZEPS*ZZW(:) / ( ZPRES(:)-ZZW(:) )              ! r_si
-   ZRVSATI_PRIME(:) = (( XBETAI/ZZT(:) - XGAMI ) / ZZT(:))  &  ! r'_si
-                      * ZRVSATI(:) * ( 1. + ZRVSATI(:)/ZEPS )
-   ZDELTI(:) = ABS( ZRVS(:)*ZDT - ZRVSATI(:) )
-   ZAI(:) = ( XLSTT + (XCPV-XCI)*(ZZT(:)-XTT) )**2 / (ZKA(:)*XRV*ZZT(:)**2) &
-                                  + ( XRV*ZZT(:) ) / (ZDV(:)*ZZW(:))
-!
-   ZZW(:) = MIN(1.E8,( XLBC* MAX(ZCCT(:),XCTMIN(2))                       &
-                           /(MAX(ZRCT(:),XRTMIN(2))) )**XLBEXC)
-                                                                  ! Lbda_c
-   ZITW(:) = ZCCT(:) * (X0CNDC/ZZW(:) + X2CNDC*ZCJ(:)*ZCJ(:)/ZZW(:)**(XDC+2.0)) &
-                     / (ZRVSATW(:)*ZAW(:))
-   ZZW(:) = MIN(1.E8,( XLBI* MAX(ZCIT(:),XCTMIN(4))                       &
-                     /(MAX(ZRIT(:),XRTMIN(4))) )**XLBEXI)
-                                                                  ! Lbda_I
-   ZITI(:) = ZCIT(:) * (X0DEPI/ZZW(:) + X2DEPI*ZCJ(:)*ZCJ(:)/ZZW(:)**(XDI+2.0)) &
-                     / (ZRVSATI(:)*ZAI(:))
-!
-   ALLOCATE(ZAWW(IMICRO))
-   ALLOCATE(ZAIW(IMICRO))
-   ALLOCATE(ZAWI(IMICRO))
-   ALLOCATE(ZAII(IMICRO))
-!
-   ALLOCATE(ZFACT(IMICRO))
-   ALLOCATE(ZDELT1(IMICRO))
-   ALLOCATE(ZDELT2(IMICRO))
-!
-   ZAII(:)  = ZITI(:)*ZDELTI(:)
-   WHERE( ZAII(:)<1.0E-15 )
-      ZFACT(:) = ZLVFACT(:)
-   ELSEWHERE          
-      ZFACT(:) = (ZLVFACT(:)*ZITW(:)*ZDELTW(:)+ZLSFACT(:)*ZITI(:)*ZDELTI(:)) &
-                        / (ZITW(:)*ZDELTW(:)+ZITI(:)*ZDELTI(:))
-   END WHERE
-   ZAWW(:) = 1.0 + ZRVSATW_PRIME(:)*ZFACT(:)
-!
-   ZDELT2(:) = (ZRVSATW_PRIME(:)*ZFACT(:)/ZAWW(:)) *                       &
-               ( ((-2.*XBETAW+XGAMW*ZZT(:))/(XBETAW-XGAMW*ZZT(:))          &
-                 + (XBETAW/ZZT(:)-XGAMW)*(1.0+2.0*ZRVSATW(:)/ZEPS))/ZZT(:) )
-   ZDELT1(:) = (ZFACT(:)/ZAWW(:)) * ( ZRVSATW(:) - ZRVS(:)*ZDT )
-!
-   ALLOCATE(ZCND(IMICRO))
-   ALLOCATE(ZDEP(IMICRO))
-   ZCND(:) = 0.0
-   ZDEP(:) = 0.0
-!
-   ZZW(:) =  - ZDELT1(:)*( 1.0 + 0.5*ZDELT1(:)*ZDELT2(:) ) / (ZFACT(:)*ZDT) 
-   WHERE( ZAII(:)<1.0E-15 )
-      ZCND(:) = ZZW(:)
-      ZDEP(:) = 0.0
-   ELSEWHERE          
-      ZCND(:) = ZZW(:)*ZITW(:)*ZDELTW(:) / (ZITW(:)*ZDELTW(:)+ZITI(:)*ZDELTI(:))
-      ZDEP(:) = ZZW(:)*ZITI(:)*ZDELTI(:) / (ZITW(:)*ZDELTW(:)+ZITI(:)*ZDELTI(:))
-   END WHERE
-!
-! Integration
-!
-   WHERE( ZCND(:) < 0.0 )
-      ZCND(:) = MAX ( ZCND(:), -ZRCS(:) )
-   ELSEWHERE 
-      ZCND(:) = MIN ( ZCND(:),  ZRVS(:) )
-   END WHERE
-   ZRVS(:) = ZRVS(:) - ZCND(:)
-   ZRCS(:) = ZRCS(:) + ZCND(:)
-   ZTHS(:) = ZTHS(:) + ZCND(:) * ZLVFACT(:) / ZEXNREF(:)
-!
-   WHERE( ZDEP(:) < 0.0 )
-      ZDEP(:) = MAX ( ZDEP(:), -ZRIS(:) )
-   ELSEWHERE
-      ZDEP(:) = MIN ( ZDEP(:),  ZRVS(:) )
-   END WHERE
-   ZRVS(:) = ZRVS(:) - ZDEP(:)
-   ZRIS(:) = ZRIS(:) + ZDEP(:)
-   ZTHS(:) = ZTHS(:) + ZDEP(:) * ZLSFACT(:) / ZEXNREF(:)
-!
-!*       6.3    explicit integration of the final eva/dep rates
-!
-   ZZT(:) = ( ZTHS(:) * ZDT ) * ( ZPRES(:) / XP00 ) ** (XRD/XCPD)
-   ZZW(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) ) ! es_i
-   ZRVSATI(:) = ZEPS*ZZW(:) / ( ZPRES(:)-ZZW(:) )              ! r_si
-!
-!  If Si < 0, implicit adjustment to Si=0 using ice only
-!
-   WHERE( ZRVS(:)*ZDT<ZRVSATI(:) )
-      ZZW(:)  = ZRVS(:) + ZRIS(:)
-      ZRVS(:) = MIN( ZZW(:),ZRVSATI(:)/ZDT )
-      ZTHS(:) = ZTHS(:) + ( MAX( 0.0,ZZW(:)-ZRVS(:) )-ZRIS(:) ) &
-                          * ZLSFACT(:) / ZEXNREF(:)
-      ZRIS(:) = MAX( 0.0,ZZW(:)-ZRVS(:) )
-   END WHERE
-!
-!  Following the previous adjustment, the real procedure begins
-!
-   ZZT(:) = ( ZTHS(:) * ZDT ) * ( ZPRES(:) / XP00 ) ** (XRD/XCPD)
-!
-   ZLVFACT(:) = (XLVTT+(XCPV-XCL)*(ZZT(:)-XTT))/ZZCPH(:) ! L_v/C_ph
-   ZLSFACT(:) = (XLSTT+(XCPV-XCI)*(ZZT(:)-XTT))/ZZCPH(:) ! L_s/C_ph
-!
-   ZKA(:) = 2.38E-2 + 0.0071E-2 * ( ZZT(:) - XTT )          ! k_a
-   ZDV(:) = 0.211E-4 * (ZZT(:)/XTT)**1.94 * (XP00/ZPRES(:)) ! D_v
-   ZCJ(:) = XSCFAC * ZRHODREF(:)**0.3 / SQRT( 1.718E-5+0.0049E-5*(ZZT(:)-XTT) )
-!
-   ZZW(:) = EXP( XALPW - XBETAW/ZZT(:) - XGAMW*ALOG(ZZT(:) ) ) ! es_w
-   ZRVSATW(:) = ZEPS*ZZW(:) / ( ZPRES(:)-ZZW(:) )              ! r_sw
-   ZRVSATW_PRIME(:) = (( XBETAW/ZZT(:) - XGAMW ) / ZZT(:))  &  ! r'_sw
-                      * ZRVSATW(:) * ( 1. + ZRVSATW(:)/ZEPS )
-   ZDELTW(:) = ZRVS(:)*ZDT - ZRVSATW(:)
-   ZAW(:) = ( XLSTT + (XCPV-XCL)*(ZZT(:)-XTT) )**2 / (ZKA(:)*XRV*ZZT(:)**2) &
-                                  + ( XRV*ZZT(:) ) / (ZDV(:)*ZZW(:))
-!
-   ZZW(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) ) ! es_i
-   ZRVSATI(:) = ZEPS*ZZW(:) / ( ZPRES(:)-ZZW(:) )              ! r_si
-   ZRVSATI_PRIME(:) = (( XBETAI/ZZT(:) - XGAMI ) / ZZT(:))  &  ! r'_si
-                      * ZRVSATI(:) * ( 1. + ZRVSATI(:)/ZEPS )
-   ZDELTI(:) = ZRVS(:)*ZDT - ZRVSATI(:)
-   ZAI(:) = ( XLSTT + (XCPV-XCI)*(ZZT(:)-XTT) )**2 / (ZKA(:)*XRV*ZZT(:)**2) &
-                                 + ( XRV*ZZT(:) ) / (ZDV(:)*ZZW(:))
-!                    
-   ZZW(:) = MIN(1.E8,( XLBC* MAX(ZCCS(:),ZCTMIN(2))                       &
-                           /(MAX(ZRCS(:),ZRTMIN(2))) )**XLBEXC)
-                                                                  ! Lbda_c
-   ZITW(:) = ZCCT(:) * (X0CNDC/ZZW(:) + X2CNDC*ZCJ(:)*ZCJ(:)/ZZW(:)**(XDC+2.0)) &
-                     / (ZRVSATW(:)*ZAW(:))
-   ZZW(:) = MIN(1.E8,( XLBI* MAX(ZCIS(:),ZCTMIN(4))                       &
-                           /(MAX(ZRIS(:),ZRTMIN(4))) )**XLBEXI)
-                                                                  ! Lbda_I
-   ZITI(:) = ZCIT(:) * (X0DEPI/ZZW(:) + X2DEPI*ZCJ(:)*ZCJ(:)/ZZW(:)**(XDI+2.0)) &
-                     / (ZRVSATI(:)*ZAI(:))
-!
-   ZAWW(:) = 1.0 + ZRVSATW_PRIME(:)*ZLVFACT(:)
-   ZAIW(:) = 1.0 + ZRVSATI_PRIME(:)*ZLVFACT(:)
-   ZAWI(:) = 1.0 + ZRVSATW_PRIME(:)*ZLSFACT(:)
-   ZAII(:) = 1.0 + ZRVSATI_PRIME(:)*ZLSFACT(:)
-!
-   ZCND(:) = 0.0      
-   ZDEP(:) = 0.0
-   ZZW(:) = ZAWW(:)*ZITW(:) + ZAII(:)*ZITI(:) ! R
-   WHERE( ZZW(:)<1.0E-2 )
-      ZFACT(:) = ZDT*(0.5 - (ZZW(:)*ZDT)/6.0)
-   ELSEWHERE          
-      ZFACT(:) = (1.0/ZZW(:))*(1.0-(1.0-EXP(-ZZW(:)*ZDT))/(ZZW(:)*ZDT))
-   END WHERE
-   ZCND(:) = ZITW(:)*(ZDELTW(:)-( ZAWW(:)*ZITW(:)*ZDELTW(:)           &
-                                + ZAWI(:)*ZITI(:)*ZDELTI(:) )*ZFACT(:))
-   ZDEP(:) = ZITI(:)*(ZDELTI(:)-( ZAIW(:)*ZITW(:)*ZDELTW(:)           &
-                                + ZAII(:)*ZITI(:)*ZDELTI(:) )*ZFACT(:))
-!                    
-! Integration        
-!           
-   WHERE( ZCND(:) < 0.0 )
-      ZCND(:) = MAX ( ZCND(:), -ZRCS(:) )
-   ELSEWHERE          
-      ZCND(:) = MIN ( ZCND(:),  ZRVS(:) )
-   END WHERE
-   WHERE( ZRCS(:) < ZRTMIN(2) )
-      ZCND(:) = 0.0
-   END WHERE
-   ZRVS(:) = ZRVS(:) - ZCND(:)
-   ZRCS(:) = ZRCS(:) + ZCND(:)
-   ZTHS(:) = ZTHS(:) + ZCND(:) * ZLVFACT(:) / ZEXNREF(:)
-!                    
-   WHERE( ZDEP(:) < 0.0 )
-      ZDEP(:) = MAX ( ZDEP(:), -ZRIS(:) )
-   ELSEWHERE          
-      ZDEP(:) = MIN ( ZDEP(:),  ZRVS(:) )
-   END WHERE
-   WHERE( ZRIS(:) < ZRTMIN(4) )
-      ZDEP(:) = 0.0
-   END WHERE
-   ZRVS(:) = ZRVS(:) - ZDEP(:)
-   ZRIS(:) = ZRIS(:) + ZDEP(:)
-   ZTHS(:) = ZTHS(:) + ZDEP(:) * ZLSFACT(:) / ZEXNREF(:)
-!
-!  Implicit ice crystal sublimation if ice saturated conditions are not met
-!
-   ZZT(:) = ( ZTHS(:) * ZDT ) * ( ZPRES(:) / XP00 ) ** (XRD/XCPD)
-   ZLVFACT(:) = (XLVTT+(XCPV-XCL)*(ZZT(:)-XTT))/ZZCPH(:) ! L_v/C_ph
-   ZLSFACT(:) = (XLSTT+(XCPV-XCI)*(ZZT(:)-XTT))/ZZCPH(:) ! L_s/C_ph   
-   ZZW(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) ) ! es_i
-   ZRVSATI(:) = ZEPS*ZZW(:) / ( ZPRES(:)-ZZW(:) )              ! r_si
-   WHERE( ZRVS(:)*ZDT<ZRVSATI(:) )
-      ZZW(:)  = ZRVS(:) + ZRIS(:)
-      ZRVS(:) = MIN( ZZW(:),ZRVSATI(:)/ZDT )
-      ZTHS(:) = ZTHS(:) + ( MAX( 0.0,ZZW(:)-ZRVS(:) )-ZRIS(:) ) &
-                                            * ZLSFACT(:) / ZEXNREF(:)
-      ZRIS(:) = MAX( 0.0,ZZW(:)-ZRVS(:) )
-   END WHERE
-!
-!                    
-!                    
-   ZW(:,:,:) = PRVS(:,:,:)
-   PRVS(:,:,:) = UNPACK( ZRVS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:) = PRCS(:,:,:)
-   PRCS(:,:,:) = UNPACK( ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:) = PRIS(:,:,:)
-   PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:) = PTHS(:,:,:)
-   PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-!
-   DEALLOCATE(ZRVT)
-   DEALLOCATE(ZRCT)
-   DEALLOCATE(ZRIT)
-   DEALLOCATE(ZCCT)
-   DEALLOCATE(ZCIT)
-   DEALLOCATE(ZRVS)
-   DEALLOCATE(ZRCS)
-   DEALLOCATE(ZRIS)
-   DEALLOCATE(ZCCS)
-   DEALLOCATE(ZCIS)
-   DEALLOCATE(ZTHS)
-   DEALLOCATE(ZRHODREF)
-   DEALLOCATE(ZZT)
-   DEALLOCATE(ZPRES)
-   DEALLOCATE(ZEXNREF)
-   DEALLOCATE(ZZCPH)
-   DEALLOCATE(ZZW)
-   DEALLOCATE(ZLVFACT)
-   DEALLOCATE(ZLSFACT)
-   DEALLOCATE(ZRVSATW)
-   DEALLOCATE(ZRVSATI)
-   DEALLOCATE(ZRVSATW_PRIME)
-   DEALLOCATE(ZRVSATI_PRIME)
-   DEALLOCATE(ZDELTW)
-   DEALLOCATE(ZDELTI)
-   DEALLOCATE(ZAW)
-   DEALLOCATE(ZAI)
-   DEALLOCATE(ZCJ)
-   DEALLOCATE(ZKA)
-   DEALLOCATE(ZDV)
-   DEALLOCATE(ZITW)
-   DEALLOCATE(ZITI)
-   DEALLOCATE(ZAWW)
-   DEALLOCATE(ZAIW)
-   DEALLOCATE(ZAWI)
-   DEALLOCATE(ZAII)
-   DEALLOCATE(ZFACT)
-   DEALLOCATE(ZDELT1)
-   DEALLOCATE(ZDELT2)
-   DEALLOCATE(ZCND)
-   DEALLOCATE(ZDEP)
-END IF ! IMICRO
-!
-END IF ! OSUBG_COND
-!
-! full sublimation of the cloud ice crystals if there are few
-!
-ZMASK(:,:,:) = 0.0
-ZW(:,:,:) = 0.
-WHERE (PRIS(:,:,:) <= ZRTMIN(4) .OR. PCIS(:,:,:) <= ZCTMIN(4)) 
-   PRVS(:,:,:) = PRVS(:,:,:) + PRIS(:,:,:) 
-   PTHS(:,:,:) = PTHS(:,:,:) - PRIS(:,:,:)*ZLS(:,:,:)/(ZCPH(:,:,:)*ZEXNS(:,:,:))
-   PRIS(:,:,:) = 0.0
-   ZW(:,:,:)   = MAX(PCIS(:,:,:),0.)
-   PCIS(:,:,:) = 0.0
-END WHERE
-!
-IF (LCOLD_LIMA .AND. (NMOD_IFN .GE. 1 .OR. NMOD_IMM .GE. 1)) THEN
-   ZW1(:,:,:) = 0.
-   IF (NMOD_IFN .GE. 1) ZW1(:,:,:) = ZW1(:,:,:) + SUM(PINS,DIM=4)
-   IF (NMOD_IMM .GE. 1) ZW1(:,:,:) = ZW1(:,:,:) + SUM(PNIS,DIM=4)
-   ZW (:,:,:) = MIN( ZW(:,:,:), ZW1(:,:,:) )
-   ZW2(:,:,:) = 0.
-   WHERE ( ZW(:,:,:) > 0. )
-      ZMASK(:,:,:) = 1.0
-      ZW2(:,:,:) = ZW(:,:,:) / ZW1(:,:,:)
-   ENDWHERE
-END IF
-!
-IF (LCOLD_LIMA .AND. NMOD_IFN.GE.1) THEN
-   DO JMOD_IFN = 1, NMOD_IFN
-      PIFS(:,:,:,JMOD_IFN) = PIFS(:,:,:,JMOD_IFN) +                    &
-           ZMASK(:,:,:) * PINS(:,:,:,JMOD_IFN) * ZW2(:,:,:)
-      PINS(:,:,:,JMOD_IFN) = PINS(:,:,:,JMOD_IFN) -                    &
-           ZMASK(:,:,:) * PINS(:,:,:,JMOD_IFN) * ZW2(:,:,:)
-      PINS(:,:,:,JMOD_IFN) = MAX( 0.0 , PINS(:,:,:,JMOD_IFN) )
-   ENDDO
-END IF
-!
-IF (LCOLD_LIMA .AND. NMOD_IMM.GE.1) THEN
-   JMOD_IMM = 0
-   DO JMOD = 1, NMOD_CCN
-      IF (NIMM(JMOD) == 1) THEN 
-         JMOD_IMM = JMOD_IMM + 1 
-         PNAS(:,:,:,JMOD)     = PNAS(:,:,:,JMOD) +                     &
-              ZMASK(:,:,:) * PNIS(:,:,:,JMOD_IMM) * ZW2(:,:,:)
-         PNIS(:,:,:,JMOD_IMM) = PNIS(:,:,:,JMOD_IMM) -                 &
-              ZMASK(:,:,:) * PNIS(:,:,:,JMOD_IMM) * ZW2(:,:,:)
-         PNIS(:,:,:,JMOD_IMM) = MAX( 0.0 , PNIS(:,:,:,JMOD_IMM) )
-      END IF
-   ENDDO
-END IF
-!
-! complete evaporation of the cloud droplets if there are few
-!
-ZMASK(:,:,:) = 0.0
-ZW(:,:,:) = 0.
-WHERE (PRCS(:,:,:) <= ZRTMIN(2) .OR. PCCS(:,:,:) <= ZCTMIN(2)) 
-   PRVS(:,:,:) = PRVS(:,:,:) + PRCS(:,:,:) 
-   PTHS(:,:,:) = PTHS(:,:,:) - PRCS(:,:,:)*ZLV(:,:,:)/(ZCPH(:,:,:)*ZEXNS(:,:,:))
-   PRCS(:,:,:) = 0.0
-   ZW(:,:,:)   = MAX(PCCS(:,:,:),0.)
-   PCCS(:,:,:) = 0.0
-END WHERE
-!
-ZW1(:,:,:) = 0.
-IF (LWARM_LIMA .AND. NMOD_CCN.GE.1) ZW1(:,:,:) = SUM(PNAS,DIM=4)
-ZW (:,:,:) = MIN( ZW(:,:,:), ZW1(:,:,:) )
-ZW2(:,:,:) = 0.
-WHERE ( ZW(:,:,:) > 0. )
-   ZMASK(:,:,:) = 1.0
-   ZW2(:,:,:) = ZW(:,:,:) / ZW1(:,:,:)
-ENDWHERE
-!
-IF (LWARM_LIMA .AND. NMOD_CCN.GE.1) THEN
-   DO JMOD = 1, NMOD_CCN
-      PNFS(:,:,:,JMOD) = PNFS(:,:,:,JMOD) +                           &
-           ZMASK(:,:,:) * PNAS(:,:,:,JMOD) * ZW2(:,:,:)
-      PNAS(:,:,:,JMOD) = PNAS(:,:,:,JMOD) -                           &
-           ZMASK(:,:,:) * PNAS(:,:,:,JMOD) * ZW2(:,:,:)
-      PNAS(:,:,:,JMOD) = MAX( 0.0 , PNAS(:,:,:,JMOD) )
-   ENDDO
-END IF
-!
-IF (LSCAV .AND. LAERO_MASS) PMAS(:,:,:) = PMAS(:,:,:) * (1-ZMASK(:,:,:))
-!
-!  end of the iterative loop
-!
-END DO
-!
-DEALLOCATE(ZRTMIN)
-DEALLOCATE(ZCTMIN)
-!
-!*       5.2    compute the cloud fraction PCLDFR (binary !!!!!!!)
-!
-IF ( .NOT. OSUBG_COND ) THEN
-   WHERE (PRCS(:,:,:) > 1.E-12 / ZDT)
-      ZW(:,:,:)  = 1.
-   ELSEWHERE
-      ZW(:,:,:)  = 0. 
-   ENDWHERE
-   IF ( SIZE(PSRCS,3) /= 0 ) THEN
-      PSRCS(:,:,:) = ZW(:,:,:) 
-   END IF
-END IF
-!
-IF ( HRAD /= 'NONE' ) THEN
-  PCLDFR(:,:,:) = ZW(:,:,:)
-END IF
-!
-IF ( OCLOSE_OUT ) THEN
-  ILENCH=LEN(YCOMMENT)
-  YRECFM  ='NEB'
-  YCOMMENT='X_Y_Z_NEB (0)'
-  IGRID   = 1
-  ILENG = SIZE(ZW,1)*SIZE(ZW,2)*SIZE(ZW,3)
-  CALL FMWRIT(HFMFILE,YRECFM,HLUOUT,'XY',ZW,IGRID,ILENCH,YCOMMENT,IRESP)
-END IF
-!
-!
-!*       6.  SAVE CHANGES IN PRS AND PSVS
-!            ----------------------------
-!
-!
-! Prepare 3D water mixing ratios
-PRS(:,:,:,1) = PRVS(:,:,:)
-IF ( KRR .GE. 2 ) PRS(:,:,:,2) = PRCS(:,:,:)
-IF ( KRR .GE. 3 ) PRS(:,:,:,3) = PRRS(:,:,:)
-IF ( KRR .GE. 4 ) PRS(:,:,:,4) = PRIS(:,:,:)
-IF ( KRR .GE. 5 ) PRS(:,:,:,5) = PRSS(:,:,:)
-IF ( KRR .GE. 6 ) PRS(:,:,:,6) = PRGS(:,:,:)
-!
-! Prepare 3D number concentrations
-!
-IF ( LWARM_LIMA ) PSVS(:,:,:,NSV_LIMA_NC) = PCCS(:,:,:)
-IF ( LCOLD_LIMA ) PSVS(:,:,:,NSV_LIMA_NI) = PCIS(:,:,:)
-!
-IF ( LSCAV .AND. LAERO_MASS ) PSVS(:,:,:,NSV_LIMA_SCAVMASS) = PMAS(:,:,:)
-! 
-IF ( LWARM_LIMA .AND. NMOD_CCN .GE. 1 ) THEN
-   PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) = PNFS(:,:,:,:)
-   PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1) = PNAS(:,:,:,:)
-END IF
-!
-IF ( LCOLD_LIMA .AND. NMOD_IFN .GE. 1 ) THEN
-   PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1) = PIFS(:,:,:,:)
-   PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1) = PINS(:,:,:,:)
-END IF
-!
-IF ( LCOLD_LIMA .AND. NMOD_IMM .GE. 1 ) THEN
-   PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1) = PNIS(:,:,:,:)
-END IF
-!
-! write SSI in LFI
-!
-IF ( OCLOSE_OUT ) THEN
-   ZT(:,:,:) = ( PTHS(:,:,:) * ZDT ) * ZEXNS(:,:,:)
-   ZW(:,:,:) = EXP( XALPI - XBETAI/ZT(:,:,:) - XGAMI*ALOG(ZT(:,:,:) ) )
-   ZW1(:,:,:)= 2.0*PPABST(:,:,:)-PPABSM(:,:,:)
-   ZW(:,:,:) = PRVT(:,:,:)*( ZW1(:,:,:)-ZW(:,:,:) ) / ( (XMV/XMD) * ZW(:,:,:) ) - 1.0
-
-   ILENCH=LEN(YCOMMENT)
-   YRECFM  ='SSI'
-   YCOMMENT='X_Y_Z_SSI'
-   IGRID   = 1
-   ILENG = SIZE(ZW,1)*SIZE(ZW,2)*SIZE(ZW,3)
-   CALL FMWRIT(HFMFILE,YRECFM,HLUOUT,'XY',ZW,IGRID,ILENCH,YCOMMENT,IRESP)
-END IF
-!
-!
-!*       7.  STORE THE BUDGET TERMS
-!            ----------------------
-!
-!
-IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-  IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:) * PRHODJ(:,:,:),4,'CEDS_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RV) CALL BUDGET_DDH (PRVS(:,:,:) * PRHODJ(:,:,:),6,'CEDS_BU_RRV',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:) * PRHODJ(:,:,:),7,'CEDS_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:) * PRHODJ(:,:,:),9,'CEDS_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_SV) THEN
-    CALL BUDGET_DDH (PCCS(:,:,:)   * PRHODJ(:,:,:),12+NSV_LIMA_NC,'CEDS_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! RCC
-    CALL BUDGET_DDH (PCIS(:,:,:)   * PRHODJ(:,:,:),12+NSV_LIMA_NI,'CEDS_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! RCI
-    IF (NMOD_CCN .GE. 1) THEN
-       DO JL = 1, NMOD_CCN
-          CALL BUDGET_DDH (PNFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_CCN_FREE+JL-1,'CEDS_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! RCC
-       END DO
-    END IF
-    IF (NMOD_IFN .GE. 1) THEN
-       DO JL = 1, NMOD_IFN
-          CALL BUDGET_DDH (PIFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'CEDS_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! RCC
-       END DO
-    END IF
-  END IF
-END IF
-
-IF (ALLOCATED(PNFS)) DEALLOCATE(PNFS)
-IF (ALLOCATED(PNAS)) DEALLOCATE(PNAS)
-IF (ALLOCATED(PIFS)) DEALLOCATE(PIFS)
-IF (ALLOCATED(PINS)) DEALLOCATE(PINS)
-IF (ALLOCATED(PNIS)) DEALLOCATE(PNIS)
-
-!
-!------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_ADJUST
diff --git a/src/arome/micro/lima_bergeron.F90 b/src/arome/micro/lima_bergeron.F90
deleted file mode 100644
index 63677da20cf0a6db2a08eb48ea66320b968a79fc..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_bergeron.F90
+++ /dev/null
@@ -1,127 +0,0 @@
-!      #################################
-       MODULE MODI_LIMA_BERGERON
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_BERGERON (HFMFILE, OCLOSE_OUT, LDCOMPUTE,    &
-                             PRCT, PRIT, PCIT, PLBDI,           &
-                             PSSIW, PAI, PCJ, PLVFACT, PLSFACT, &
-                             P_TH_BERFI, P_RC_BERFI,            &
-                             PA_TH, PA_RC, PA_RI                )
-!
-CHARACTER(LEN=*),     INTENT(IN)    :: HFMFILE 
-LOGICAL,              INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDI   ! 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PSSIW   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PAI     ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCJ     ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLVFACT ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_BERFI
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_BERFI
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RI
-!!
-END SUBROUTINE LIMA_BERGERON
-END INTERFACE
-END MODULE MODI_LIMA_BERGERON
-!
-!     ######################################################################
-      SUBROUTINE LIMA_BERGERON(HFMFILE, OCLOSE_OUT, LDCOMPUTE,    &
-                               PRCT, PRIT, PCIT, PLBDI,           &
-                               PSSIW, PAI, PCJ, PLVFACT, PLSFACT, &
-                               P_TH_BERFI, P_RC_BERFI,            &
-                               PA_TH, PA_RC, PA_RI                )
-!     ######################################################################
-!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the cold-phase homogeneous
-!!    freezing of CCN, droplets and drops (T<-35°C)
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy*   jan. 2014  add budgets
-!!      B.Vie 10/2016 Bug zero division
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCTMIN
-USE MODD_PARAM_LIMA_COLD,  ONLY : XDI, X0DEPI, X2DEPI
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-CHARACTER(LEN=*),     INTENT(IN)    :: HFMFILE 
-LOGICAL,              INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDI   ! 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PSSIW   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PAI     ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCJ     ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLVFACT ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_BERFI
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_BERFI
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RI
-!
-!*       0.2   Declarations of local variables :
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       1.     PRELIMINARY COMPUTATIONS
-!	        ------------------------
-!
-P_TH_BERFI(:) = 0.0
-P_RC_BERFI(:) = 0.0
-!
-WHERE( (PRCT(:)>XRTMIN(2)) .AND. (PRIT(:)>XRTMIN(4)) .AND. (PCIT(:)>XCTMIN(4)) .AND. LDCOMPUTE(:))
-!   ZZW(:) = EXP( (XALPW-XALPI) - (XBETAW-XBETAI)/ZZT(:)          &
-!        - (XGAMW-XGAMI)*ALOG(ZZT(:)) ) -1.0 
-! supersaturation over ice at water saturation
-   P_RC_BERFI(:) = - ( PSSIW(:) / PAI(:) ) * PCIT(:) *        &
-        ( X0DEPI/PLBDI(:)+X2DEPI*PCJ(:)*PCJ(:)/PLBDI(:)**(XDI+2.0) )
-   P_TH_BERFI(:) = - P_RC_BERFI(:)*(PLSFACT(:)-PLVFACT(:))
-END WHERE
-!
-PA_RC(:) = PA_RC(:) + P_RC_BERFI(:)
-PA_RI(:) = PA_RI(:) - P_RC_BERFI(:)
-PA_TH(:) = PA_TH(:) + P_TH_BERFI(:)
-!
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_BERGERON
diff --git a/src/arome/micro/lima_ccn_activation.F90 b/src/arome/micro/lima_ccn_activation.F90
deleted file mode 100644
index a4824192b76ee45437af77e580d16b9be1d74ce7..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_ccn_activation.F90
+++ /dev/null
@@ -1,766 +0,0 @@
-!      ###############################
-       MODULE MODI_LIMA_CCN_ACTIVATION
-!      ###############################
-!
-INTERFACE
-   SUBROUTINE LIMA_CCN_ACTIVATION (PTSTEP, HFMFILE, OCLOSE_OUT,                 &
-                                   PRHODREF, PEXNREF, PPABST, ZT, ZTM, PW_NU,   &
-                                   PTHT, PRVT, PRCT, PCCT, PRRT, PNFT, PNAT     )
-!
-REAL,                     INTENT(IN)    :: PTSTEP     ! Double Time step
-                                                      ! (single if cold start)
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE    ! Name of the output FM-file
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                      ! the output FM file
-!
-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)    :: ZT         ! Temperature
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: ZTM        ! Temperature at time t-dt
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PW_NU      ! updraft velocity used for
-                                                      ! the nucleation param.
-!   
-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(INOUT) :: PCCT       ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT       ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNFT       ! CCN C. available at t
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNAT       ! CCN C. activated at t
-!
-END SUBROUTINE LIMA_CCN_ACTIVATION
-END INTERFACE
-END MODULE MODI_LIMA_CCN_ACTIVATION
-!     #############################################################################
-   SUBROUTINE LIMA_CCN_ACTIVATION (PTSTEP, HFMFILE, OCLOSE_OUT,                 &
-                                   PRHODREF, PEXNREF, PPABST, ZT, ZTM, PW_NU,   &
-                                   PTHT, PRVT, PRCT, PCCT, PRRT, PNFT, PNAT     )
-!     #############################################################################
-!
-!!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the activation of CCN 
-!!    according to Cohard and Pinty, QJRMS, 2000
-!!
-!!
-!!**  METHOD
-!!    ------
-!!      The activation of CCN is checked for quasi-saturated air parcels 
-!!    to update the cloud droplet number concentration.
-!!
-!!    Computation steps :
-!!      1- Check where computations are necessary
-!!      2- and 3- Compute the maximum of supersaturation using the iterative 
-!!                Ridder algorithm
-!!      4- Compute the nucleation source
-!!      5- Deallocate local variables
-!! 
-!!    Contains :
-!!      6- Functions : Ridder algorithm
-!!
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!      Cohard, J.-M. and J.-P. Pinty, 2000: A comprehensive two-moment warm 
-!!      microphysical bulk scheme. 
-!!        Part I: Description and tests
-!!        Part II: 2D experiments with a non-hydrostatic model
-!!      Accepted for publication in Quart. J. Roy. Meteor. Soc. 
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_PARAMETERS,      ONLY : JPHEXT, JPVEXT
-USE MODD_CST,             ONLY : XALPW, XBETAW, XCL, XCPD, XCPV, XGAMW, XLVTT, XMD, XMV, XRV, XTT
-USE MODD_PARAM_LIMA,      ONLY : LACTIT_LIMA, NMOD_CCN, XKHEN_MULTI, XCTMIN, XLIMIT_FACTOR
-USE MODD_PARAM_LIMA_WARM, ONLY : XWMIN, NAHEN, NHYP, XAHENINTP1, XAHENINTP2, XCSTDCRIT, XHYPF12, &
-                                 XHYPINTP1, XHYPINTP2, XTMIN, XHYPF32, XPSI3, XAHENG, XPSI1
-!
-USE MODI_GAMMA
-USE MODI_LIMA_FUNCTIONS,  ONLY : COUNTJV
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-REAL,                     INTENT(IN)    :: PTSTEP     ! Double Time step
-                                                      ! (single if cold start)
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE    ! Name of the output FM-file
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                      ! the output FM file
-!
-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)    :: ZT         ! Temperature
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: ZTM        ! Temperature at time t-dt
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PW_NU      ! updraft velocity used for
-                                                      ! the nucleation param.
-!   
-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(INOUT) :: PCCT       ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT       ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNFT       ! CCN C. available at t
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNAT       ! CCN C. activated at t
-!
-!
-!*       0.1   Declarations of local variables :
-!
-! Packing variables
-LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: GNUCT 
-INTEGER :: INUCT
-INTEGER , DIMENSION(SIZE(GNUCT))   :: I1,I2,I3 ! Used to replace the COUNT
-INTEGER                            :: JL       ! and PACK intrinsics 
-!
-! Packed micophysical variables
-REAL, DIMENSION(:,:), ALLOCATABLE  :: ZNFT     ! available nucleus conc. source
-REAL, DIMENSION(:,:), ALLOCATABLE  :: ZNAT     ! activated nucleus conc. source
-!
-! Other packed variables
-REAL, DIMENSION(:)  , ALLOCATABLE  :: ZRHODREF ! RHO Dry REFerence
-REAL, DIMENSION(:)  , ALLOCATABLE  :: ZEXNREF  ! EXNer Pressure REFerence
-REAL, DIMENSION(:)  , ALLOCATABLE  :: ZZT      ! Temperature
-!
-! Work arrays
-REAL, DIMENSION(:), ALLOCATABLE    :: ZZW1, ZZW2, ZZW3, ZZW4, ZZW5, ZZW6, &
-                                      ZZTDT,          & ! dT/dt
-                                      ZSMAX,          & ! Maximum supersaturation
-                                      ZVEC1
-!
-REAL, DIMENSION(:,:), ALLOCATABLE  :: ZTMP, ZCHEN_MULTI
-!
-REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3))   &
-                                   :: ZTDT, ZDRC, ZRVSAT, ZW  
-REAL, DIMENSION(SIZE(PNFT,1),SIZE(PNFT,2),SIZE(PNFT,3))               &
-                                   :: ZCONC_TOT         ! total CCN C. available
-!
-INTEGER, DIMENSION(:), ALLOCATABLE :: IVEC1             ! Vectors of indices for
-                                                        ! interpolations
-!
-! 
-REAL    :: ZEPS                                ! molar mass ratio
-REAL    :: ZS1, ZS2, ZXACC 
-INTEGER :: JMOD
-INTEGER :: IIB, IIE, IJB, IJE, IKB, IKE        ! Physical domain
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       1.     PREPARE COMPUTATIONS - PACK
-!   	        ---------------------------
-!
-IIB=1+JPHEXT
-IIE=SIZE(PRHODREF,1) - JPHEXT
-IJB=1+JPHEXT
-IJE=SIZE(PRHODREF,2) - JPHEXT
-IKB=1+JPVEXT
-IKE=SIZE(PRHODREF,3) - JPVEXT
-!
-!  Saturation vapor mixing ratio and radiative tendency                    
-!
-ZEPS= XMV / XMD
-!
-ZRVSAT(:,:,:) = ZEPS / (PPABST(:,:,:) * &
-                EXP(-XALPW+XBETAW/ZT(:,:,:)+XGAMW*ALOG(ZT(:,:,:))) - 1.0)
-ZTDT(:,:,:)   = 0.
-!! ZDRC(:,:,:)   = 0.
-IF (LACTIT_LIMA) THEN
-   ZTDT(:,:,:)   = (ZT(:,:,:)-ZTM(:,:,:))/PTSTEP                   ! dT/dt 
-!!!   ZDRC(:,:,:)   = (PRCT(:,:,:)-PRCM(:,:,:))/PTSTEP                ! drc/dt
-!!   ZDRC(:,:,:)   = PRCS(:,:,:)-(PRCT(:,:,:)/PTSTEP)                ! drc/dt
-!!
-!! BV - W and drc/dt effect should not be included in ZTDT (already accounted for in the computations) ?  
-!!
-!!   ZTDT(:,:,:)   = MIN(0.,ZTDT(:,:,:)+(XG*PW_NU(:,:,:))/XCPD- &
-!!        (XLVTT+(XCPV-XCL)*(ZT(:,:,:)-XTT))*ZDRC(:,:,:)/XCPD)
-END IF
-!
-!  find locations where CCN are available
-!
-ZCONC_TOT(:,:,:) = 0.0
-DO JMOD = 1, NMOD_CCN 
-   ZCONC_TOT(:,:,:) = ZCONC_TOT(:,:,:) + PNFT(:,:,:,JMOD) ! sum over the free CCN
-ENDDO
-!
-!  optimization by looking for locations where
-!  the updraft velocity is positive!!!
-!
-GNUCT(:,:,:) = .FALSE.
-!
-! NEW : -22°C = limit sup for condensation freezing in Fridlin et al., 2007
-IF( LACTIT_LIMA ) THEN
-   GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) = (PW_NU(IIB:IIE,IJB:IJE,IKB:IKE)>XWMIN  .OR. &
-                                      ZTDT(IIB:IIE,IJB:IJE,IKB:IKE)<XTMIN) .AND.&
-            PRVT(IIB:IIE,IJB:IJE,IKB:IKE)>(0.98*ZRVSAT(IIB:IIE,IJB:IJE,IKB:IKE))&
-             .AND. ZT(IIB:IIE,IJB:IJE,IKB:IKE)>(XTT-22.)                        &
-             .AND. ZCONC_TOT(IIB:IIE,IJB:IJE,IKB:IKE)>XCTMIN(4)
-ELSE 
-   GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) =   PW_NU(IIB:IIE,IJB:IJE,IKB:IKE)>XWMIN .AND.&
-            PRVT(IIB:IIE,IJB:IJE,IKB:IKE)>(0.98*ZRVSAT(IIB:IIE,IJB:IJE,IKB:IKE))&
-             .AND. ZT(IIB:IIE,IJB:IJE,IKB:IKE)>(XTT-22.)                        &
-             .AND. ZCONC_TOT(IIB:IIE,IJB:IJE,IKB:IKE)>XCTMIN(4)
-END IF
-INUCT = COUNTJV( GNUCT(:,:,:),I1(:),I2(:),I3(:))
-!
-IF( INUCT >= 1 ) THEN
-!
-   ALLOCATE(ZNFT(INUCT,NMOD_CCN))
-   ALLOCATE(ZNAT(INUCT,NMOD_CCN))
-   ALLOCATE(ZTMP(INUCT,NMOD_CCN))
-   ALLOCATE(ZZT(INUCT)) 
-   ALLOCATE(ZZTDT(INUCT)) 
-   ALLOCATE(ZZW1(INUCT))
-   ALLOCATE(ZZW2(INUCT))
-   ALLOCATE(ZZW3(INUCT))
-   ALLOCATE(ZZW4(INUCT))
-   ALLOCATE(ZZW5(INUCT))
-   ALLOCATE(ZZW6(INUCT))
-   ALLOCATE(ZCHEN_MULTI(INUCT,NMOD_CCN))
-   ALLOCATE(ZVEC1(INUCT))
-   ALLOCATE(IVEC1(INUCT))
-   ALLOCATE(ZRHODREF(INUCT)) 
-   ALLOCATE(ZEXNREF(INUCT)) 
-   DO JL=1,INUCT
-      ZZT(JL)  = ZT(I1(JL),I2(JL),I3(JL))
-      ZZW1(JL) = ZRVSAT(I1(JL),I2(JL),I3(JL))
-      ZZW2(JL) = PW_NU(I1(JL),I2(JL),I3(JL))
-      ZZTDT(JL)  = ZTDT(I1(JL),I2(JL),I3(JL))
-      ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL))
-      ZEXNREF(JL)  = PEXNREF(I1(JL),I2(JL),I3(JL))
-      DO JMOD = 1,NMOD_CCN
-         ZNFT(JL,JMOD)        = PNFT(I1(JL),I2(JL),I3(JL),JMOD)
-         ZNAT(JL,JMOD)        = PNAT(I1(JL),I2(JL),I3(JL),JMOD)
-         ZCHEN_MULTI(JL,JMOD) = (ZNFT(JL,JMOD)+ZNAT(JL,JMOD))*ZRHODREF(JL) &
-                                                             / XLIMIT_FACTOR(JMOD)
-      ENDDO
-   ENDDO
-!
-   ZZW1(:) = 1.0/ZEPS + 1.0/ZZW1(:)                                   &
-             + (((XLVTT+(XCPV-XCL)*(ZZT(:)-XTT))/ZZT(:))**2)/(XCPD*XRV) ! Psi2
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       2. compute the constant term (ZZW3) relative to smax    
-!   	 ----------------------------------------------------
-!
-!  Remark : in LIMA's nucleation parameterization, Smax=0.01 for a supersaturation of 1% !
-!
-!
-   ZVEC1(:) = MAX( 1.00001, MIN( FLOAT(NAHEN)-0.00001, &
-                                 XAHENINTP1 * ZZT(:) + XAHENINTP2 )  )
-   IVEC1(:) = INT( ZVEC1(:) )
-   ZVEC1(:) = ZVEC1(:) - FLOAT( IVEC1(:) )
-   ALLOCATE(ZSMAX(INUCT))
-!
-!
-   IF (LACTIT_LIMA) THEN ! including a cooling rate
-!
-!       Compute the tabulation of function of ZZW3 :
-!
-!                                                  (Psi1*w+Psi3*DT/Dt)**1.5 
-!       ZZW3 = XAHENG*(Psi1*w + Psi3*DT/Dt)**1.5 = ------------------------ 
-!                                                   2*pi*rho_l*G**(3/2)     
-!
-!
-        ZZW4(:)=XPSI1( IVEC1(:)+1)*ZZW2(:)+XPSI3(IVEC1(:)+1)*ZZTDT(:)
-        ZZW5(:)=XPSI1( IVEC1(:)  )*ZZW2(:)+XPSI3(IVEC1(:)  )*ZZTDT(:)
-        WHERE (ZZW4(:) < 0. .OR. ZZW5(:) < 0.)
-           ZZW4(:) = 0.
-           ZZW5(:) = 0.
-        END WHERE
-        ZZW3(:) =   XAHENG( IVEC1(:)+1)*(ZZW4(:)**1.5)* ZVEC1(:)      &
-                  - XAHENG( IVEC1(:)  )*(ZZW5(:)**1.5)*(ZVEC1(:) - 1.0)
-                       ! Cste*((Psi1*w+Psi3*dT/dt)/(G))**1.5
-!
-!
-   ELSE ! LACTIT_LIMA , for clouds
-!
-!
-!       Compute the tabulation of function of ZZW3 :
-!
-!                                             (Psi1 * w)**1.5       
-!       ZZW3 = XAHENG * (Psi1 * w)**1.5  = -------------------------
-!                                            2 pi rho_l * G**(3/2)  
-!
-!
-        ZZW3(:)=XAHENG(IVEC1(:)+1)*((XPSI1(IVEC1(:)+1)*ZZW2(:))**1.5)* ZVEC1(:)    &
-               -XAHENG(IVEC1(:)  )*((XPSI1(IVEC1(:)  )*ZZW2(:))**1.5)*(ZVEC1(:)-1.0)
-!
-   END IF ! LACTIT_LIMA
-!
-!
-!              (Psi1*w+Psi3*DT/Dt)**1.5   rho_air
-!       ZZW3 = ------------------------ * -------
-!                 2*pi*rho_l*G**(3/2)       Psi2
-!
-   ZZW5(:) = 1.
-   ZZW3(:) = (ZZW3(:)/ZZW1(:))*ZRHODREF(:) ! R.H.S. of Eq 9 of CPB 98 but
-                                           ! for multiple aerosol modes
-   WHERE (ZZW3(:) == 0.)
-      ZZW5(:) = -1.
-   END WHERE
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       3. Compute the maximum of supersaturation
-!   	 -----------------------------------------
-!
-!
-! estimate S_max for the CPB98 parameterization with SEVERAL aerosols mode
-! Reminder : Smax=0.01 for a 1% supersaturation
-!
-! Interval bounds to tabulate sursaturation Smax
-! Check with values used for tabulation in ini_lima_warm.f90
-   ZS1 = 1.0E-5                   ! corresponds to  0.001% supersaturation
-   ZS2 = 5.0E-2                   ! corresponds to 5.0% supersaturation 
-   ZXACC = 1.0E-7                 ! Accuracy needed for the search in [NO UNITS]
-!
-   ZSMAX(:) = ZRIDDR(ZS1,ZS2,ZXACC,ZZW3(:),INUCT)    ! ZSMAX(:) is in [NO UNITS]
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       4. Compute the nucleus source
-!   	 -----------------------------
-!
-!
-! Again : Smax=0.01 for a 1% supersaturation
-! Modified values for Beta and C (see in init_aerosol_properties) account for that
-!
-   WHERE (ZZW5(:) > 0. .AND. ZSMAX(:) > 0.)
-      ZVEC1(:) = MAX( 1.00001, MIN( FLOAT(NHYP)-0.00001,  &
-                                    XHYPINTP1*LOG(ZSMAX(:))+XHYPINTP2 ) )
-      IVEC1(:) = INT( ZVEC1(:) )
-      ZVEC1(:) = ZVEC1(:) - FLOAT( IVEC1(:) )
-   END WHERE
-   ZZW6(:)  = 0. ! initialize the change of cloud droplet concentration
-!
-   ZTMP(:,:)=0.0
-!
-! Compute the concentration of activable aerosols for each mode
-! based on the max of supersaturation ( -> ZTMP )
-!
-   DO JMOD = 1, NMOD_CCN                     ! iteration on mode number
-      ZZW1(:) = 0.
-      ZZW2(:) = 0.
-      ZZW3(:) = 0.
-   !
-      WHERE( ZSMAX(:)>0.0 )
-         ZZW2(:) =  XHYPF12( IVEC1(:)+1,JMOD )* ZVEC1(:)      & ! hypergeo function
-                  - XHYPF12( IVEC1(:)  ,JMOD )*(ZVEC1(:) - 1.0) ! XHYPF12 is tabulated
-   !
-         ZTMP(:,JMOD) = (ZCHEN_MULTI(:,JMOD)/ZRHODREF(:))*ZSMAX(:)**XKHEN_MULTI(JMOD) &
-                                                         *ZZW2(:)
-      ENDWHERE
-   ENDDO
-!
-! Compute the concentration of aerosols activated at this time step
-! as the difference between ZTMP and the aerosols already activated at t-dt (ZZW1)
-!
-   DO JMOD = 1, NMOD_CCN                     ! iteration on mode number
-      ZZW1(:) = 0.
-      ZZW2(:) = 0.
-      ZZW3(:) = 0.
-   !
-      WHERE( SUM(ZTMP(:,:),DIM=2) .GT. 25.E6/ZRHODREF(:) ) 
-         ZZW1(:) = MIN( ZNFT(:,JMOD),MAX( ZTMP(:,JMOD)- ZNAT(:,JMOD) , 0.0 ) )
-      ENDWHERE
-   !
-   !* update the concentration of activated CCN = Na
-   !
-      PNAT(:,:,:,JMOD) = PNAT(:,:,:,JMOD) + UNPACK( ZZW1(:), MASK=GNUCT(:,:,:), FIELD=0.0 )
-   !
-   !* update the concentration of free CCN = Nf
-   !
-      PNFT(:,:,:,JMOD) = PNFT(:,:,:,JMOD) - UNPACK( ZZW1(:), MASK=GNUCT(:,:,:), FIELD=0.0 )
-   !
-   !* prepare to update the cloud water concentration 
-   !
-      ZZW6(:) = ZZW6(:) + ZZW1(:)
-   ENDDO
-!
-! Output tendencies
-!
-   ZZW1(:)=0.
-   WHERE (ZZW5(:)>0.0 .AND. ZSMAX(:)>0.0) ! ZZW1 is computed with ZSMAX [NO UNIT]
-      ZZW1(:) = MIN(XCSTDCRIT*ZZW6(:)/(((ZZT(:)*ZSMAX(:))**3)*ZRHODREF(:)),1.E-5)
-   END WHERE
-   ZW(:,:,:) = MIN( UNPACK( ZZW1(:),MASK=GNUCT(:,:,:),FIELD=0.0 ),PRVT(:,:,:) )
-!
-   PRVT(:,:,:) = PRVT(:,:,:) - ZW(:,:,:) 
-   PRCT(:,:,:) = PRCT(:,:,:) + ZW(:,:,:) 
-   PCCT(:,:,:) = PCCT(:,:,:) + UNPACK( ZZW6(:),MASK=GNUCT(:,:,:),FIELD=0. ) 
-   PTHT(:,:,:) = PTHT(:,:,:) + ZW(:,:,:) * (XLVTT+(XCPV-XCL)*(ZT(:,:,:)-XTT))/                &
-            (PEXNREF(:,:,:)*(XCPD+XCPV*PRVT(:,:,:)+XCL*(PRCT(:,:,:)+PRRT(:,:,:))))
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       5. Cleaning
-!   	 -----------
-!
-!
-   DEALLOCATE(IVEC1)
-   DEALLOCATE(ZVEC1)
-   DEALLOCATE(ZNFT)
-   DEALLOCATE(ZNAT)
-   DEALLOCATE(ZZT)
-   DEALLOCATE(ZSMAX)
-   DEALLOCATE(ZZW1)
-   DEALLOCATE(ZZW2)
-   DEALLOCATE(ZZW3)
-   DEALLOCATE(ZZW4)
-   DEALLOCATE(ZZW5)
-   DEALLOCATE(ZZW6)
-   DEALLOCATE(ZZTDT)
-   DEALLOCATE(ZRHODREF)
-   DEALLOCATE(ZCHEN_MULTI)
-   DEALLOCATE(ZEXNREF)
-!
-END IF ! INUCT
-!
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       6. Functions used to compute the maximum of supersaturation
-!   	 -----------------------------------------------------------
-!
-!
-CONTAINS
-!------------------------------------------------------------------------------
-!
-  FUNCTION ZRIDDR(PX1,PX2INIT,PXACC,PZZW3,NPTS)  RESULT(PZRIDDR)
-!
-!
-!!****  *ZRIDDR* - iterative algorithm to find root of a function
-!!
-!!
-!!    PURPOSE
-!!    -------
-!!       The purpose of this function is to find the root of a given function
-!!     the arguments are the brackets bounds (the interval where to find the root)
-!!     the accuracy needed and the input parameters of the given function.
-!!     Using Ridders' method, return the root of a function known to lie between 
-!!     PX1 and PX2. The root, returned as PZRIDDR, will be refined to an approximate
-!!     accuracy PXACC.
-!! 
-!!**  METHOD
-!!    ------
-!!       Ridders' method
-!!
-!!    EXTERNAL
-!!    --------
-!!       FUNCSMAX  
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!    REFERENCE
-!!    ---------
-!!      NUMERICAL RECIPES IN FORTRAN 77: THE ART OF SCIENTIFIC COMPUTING 
-!!     (ISBN 0-521-43064-X)
-!!      Copyright (C) 1986-1992 by Cambridge University Press.
-!!      Programs Copyright (C) 1986-1992 by Numerical Recipes Software.
-!!
-!!    AUTHOR
-!!    ------
-!!      Frederick Chosson *CERFACS*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original     12/07/07
-!!      S.BERTHET        2008 vectorization 
-!------------------------------------------------------------------------------
-!
-!*       0. DECLARATIONS
-!
-!
-IMPLICIT NONE
-!
-!*       0.1 declarations of arguments and result
-!
-INTEGER,            INTENT(IN)     :: NPTS
-REAL, DIMENSION(:), INTENT(IN)     :: PZZW3
-REAL,               INTENT(IN)     :: PX1, PX2INIT, PXACC
-REAL, DIMENSION(:), ALLOCATABLE    :: PZRIDDR
-!
-!*       0.2 declarations of local variables
-!
-!
-INTEGER, PARAMETER                 :: MAXIT=60
-REAL,    PARAMETER                 :: UNUSED=0.0 !-1.11e30
-REAL,    DIMENSION(:), ALLOCATABLE :: fh,fl, fm,fnew
-REAL                               :: s,xh,xl,xm,xnew
-REAL                               :: PX2
-INTEGER                            :: j, JL
-!
-ALLOCATE(  fh(NPTS))
-ALLOCATE(  fl(NPTS))
-ALLOCATE(  fm(NPTS))
-ALLOCATE(fnew(NPTS))
-ALLOCATE(PZRIDDR(NPTS))
-!
-PZRIDDR(:)= UNUSED
-PX2       = PX2INIT 
-fl(:)     = FUNCSMAX(PX1,PZZW3(:),NPTS)
-fh(:)     = FUNCSMAX(PX2,PZZW3(:),NPTS)
-!
-DO JL = 1, NPTS
-   PX2 = PX2INIT
-100 if ((fl(JL) > 0.0 .and. fh(JL) < 0.0) .or. (fl(JL) < 0.0 .and. fh(JL) > 0.0)) then
-      xl         = PX1
-      xh         = PX2
-      do j=1,MAXIT
-         xm     = 0.5*(xl+xh)
-         fm(JL) = SINGL_FUNCSMAX(xm,PZZW3(JL),JL)
-         s      = sqrt(fm(JL)**2-fl(JL)*fh(JL))
-         if (s == 0.0) then
-            GO TO 101
-         endif
-         xnew  = xm+(xm-xl)*(sign(1.0,fl(JL)-fh(JL))*fm(JL)/s)
-         if (abs(xnew - PZRIDDR(JL)) <= PXACC) then
-            GO TO 101 
-         endif
-         PZRIDDR(JL) = xnew
-         fnew(JL)  = SINGL_FUNCSMAX(PZRIDDR(JL),PZZW3(JL),JL)
-         if (fnew(JL) == 0.0) then
-            GO TO 101
-         endif
-         if (sign(fm(JL),fnew(JL)) /= fm(JL)) then
-            xl    =xm
-            fl(JL)=fm(JL)
-            xh    =PZRIDDR(JL)
-            fh(JL)=fnew(JL)
-         else if (sign(fl(JL),fnew(JL)) /= fl(JL)) then
-            xh    =PZRIDDR(JL)
-            fh(JL)=fnew(JL)
-         else if (sign(fh(JL),fnew(JL)) /= fh(JL)) then
-            xl    =PZRIDDR(JL)
-            fl(JL)=fnew(JL)
-         else if (PX2 .lt. 0.05) then
-            PX2 = PX2 + 1.0E-2
-            PRINT*, 'PX2 ALWAYS too small, we put a greater one : PX2 =',PX2
-            fh(JL)   = SINGL_FUNCSMAX(PX2,PZZW3(JL),JL)
-            go to 100
-            print*, 'PZRIDDR: never get here'
-            STOP
-         end if
-         if (abs(xh-xl) <= PXACC) then
-            GO TO 101 
-         endif
-!!SB
-!!$      if (j == MAXIT .and. (abs(xh-xl) > PXACC) ) then
-!!$        PZRIDDR(JL)=0.0
-!!$        go to 101
-!!$      endif   
-!!SB
-      end do
-      print*, 'PZRIDDR: exceeded maximum iterations',j
-      STOP
-   else if (fl(JL) == 0.0) then
-      PZRIDDR(JL)=PX1
-   else if (fh(JL) == 0.0) then
-      PZRIDDR(JL)=PX2
-   else if (PX2 .lt. 0.05) then
-      PX2 = PX2 + 1.0E-2
-      PRINT*, 'PX2 too small, we put a greater one : PX2 =',PX2
-      fh(JL)   = SINGL_FUNCSMAX(PX2,PZZW3(JL),JL)
-      go to 100
-   else
-!!$      print*, 'PZRIDDR: root must be bracketed'
-!!$      print*,'npts ',NPTS,'jl',JL
-!!$      print*, 'PX1,PX2,fl,fh',PX1,PX2,fl(JL),fh(JL)
-!!$      print*, 'PX2 = 30 % of supersaturation, there is no solution for Smax'
-!!$      print*, 'try to put greater PX2 (upper bound for Smax research)'
-!!$      STOP
-      PZRIDDR(JL)=0.0
-      go to 101
-   end if
-101 ENDDO
-!
-DEALLOCATE(  fh)
-DEALLOCATE(  fl)
-DEALLOCATE(  fm)
-DEALLOCATE(fnew)
-!
-END FUNCTION ZRIDDR
-!
-!------------------------------------------------------------------------------
-!
-  FUNCTION FUNCSMAX(PPZSMAX,PPZZW3,NPTS)  RESULT(PFUNCSMAX)
-!
-!
-!!****  *FUNCSMAX* - function describing SMAX function that you want to find the root
-!!
-!!
-!!    PURPOSE
-!!    -------
-!!       This function describe the equilibrium between Smax and two aerosol mode
-!!     acting as CCN. This function is derive from eq. (9) of CPB98 but for two
-!!     aerosols mode described by their respective parameters C, k, Mu, Beta.
-!!     the arguments are the supersaturation in "no unit" and the r.h.s. of this eq.
-!!     and the ratio of concentration of injected aerosols on maximum concentration
-!!     of injected aerosols ever.
-!!**  METHOD
-!!    ------
-!!       This function is called by zriddr.f90
-!!
-!!    EXTERNAL
-!!    --------
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!    Module MODD_PARAM_LIMA_WARM
-!!        XHYPF32
-!!
-!!        XHYPINTP1
-!!        XHYPINTP2
-!!
-!!    Module MODD_PARAM_C2R2
-!!        XKHEN_MULTI()
-!!        NMOD_CCN
-!!       
-!!    REFERENCE
-!!    ---------
-!!    Cohard, J.M., J.P.Pinty, K.Suhre, 2000:"On the parameterization of activation
-!!             spectra from cloud condensation nuclei microphysical properties",
-!!             J. Geophys. Res., Vol.105, N0.D9, pp. 11753-11766
-!!
-!!    AUTHOR
-!!    ------
-!!      Frederick Chosson *CERFACS*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original     12/07/07
-!!      S.Berthet    19/03/08 Extension a une population multimodale d aerosols
-!
-!------------------------------------------------------------------------------
-!
-!*       0. DECLARATIONS
-!
-IMPLICIT NONE
-!
-!*       0.1 declarations of arguments and result
-!
-INTEGER,            INTENT(IN)  :: NPTS
-REAL,               INTENT(IN)  :: PPZSMAX   ! supersaturation is already in no units
-REAL, DIMENSION(:), INTENT(IN)  :: PPZZW3    ! 
-REAL, DIMENSION(:), ALLOCATABLE :: PFUNCSMAX ! 
-!
-!*       0.2 declarations of local variables
-!
-REAL                           :: ZHYPF
-!
-REAL                           :: PZVEC1
-INTEGER                        :: PIVEC1
-!
-ALLOCATE(PFUNCSMAX(NPTS))
-!
-PFUNCSMAX(:) = 0.
-PZVEC1 = MAX( 1.00001,MIN( FLOAT(NHYP)-0.00001,               &
-                           XHYPINTP1*LOG(PPZSMAX)+XHYPINTP2 ) )
-PIVEC1 = INT( PZVEC1 )
-PZVEC1 = PZVEC1 - FLOAT( PIVEC1 )
-DO JMOD = 1, NMOD_CCN
-   ZHYPF        = 0.          ! XHYPF32 is tabulated with ZSMAX in [NO UNITS]
-   ZHYPF        =   XHYPF32( PIVEC1+1,JMOD ) * PZVEC1              &
-                  - XHYPF32( PIVEC1  ,JMOD ) *(PZVEC1 - 1.0)
-                             ! sum of s**(ki+2) * F32 * Ci * ki * beta(ki/2,3/2)
-   PFUNCSMAX(:) =  PFUNCSMAX(:) + (PPZSMAX)**(XKHEN_MULTI(JMOD) + 2) &
-                 * ZHYPF* XKHEN_MULTI(JMOD) * ZCHEN_MULTI(:,JMOD)    &
-                 * GAMMA_X0D( XKHEN_MULTI(JMOD)/2.0)*GAMMA_X0D(3.0/2.0)      &
-                 / GAMMA_X0D((XKHEN_MULTI(JMOD)+3.0)/2.0)
-ENDDO
-! function l.h.s. minus r.h.s. of eq. (9) of CPB98 but for NMOD_CCN aerosol mode
-PFUNCSMAX(:) = PFUNCSMAX(:) - PPZZW3(:)
-!
-END FUNCTION FUNCSMAX
-!
-!------------------------------------------------------------------------------
-!
-  FUNCTION SINGL_FUNCSMAX(PPZSMAX,PPZZW3,KINDEX)  RESULT(PSINGL_FUNCSMAX)
-!
-!
-!!****  *SINGL_FUNCSMAX* - same function as FUNCSMAX
-!!
-!!
-!!    PURPOSE
-!!    -------
-!        As for FUNCSMAX but for a scalar
-!!
-!!**  METHOD
-!!    ------
-!!       This function is called by zriddr.f90
-!!
-!------------------------------------------------------------------------------
-!
-!*       0. DECLARATIONS
-!
-IMPLICIT NONE
-!
-!*       0.1 declarations of arguments and result
-!
-INTEGER,            INTENT(IN)  :: KINDEX
-REAL,               INTENT(IN)  :: PPZSMAX   ! supersaturation is "no unit"
-REAL,               INTENT(IN)  :: PPZZW3    ! 
-REAL                            :: PSINGL_FUNCSMAX ! 
-!
-!*       0.2 declarations of local variables
-!
-REAL                           :: ZHYPF
-!
-REAL                           :: PZVEC1
-INTEGER                        :: PIVEC1
-!
-PSINGL_FUNCSMAX = 0.
-PZVEC1    = MAX( 1.00001,MIN( FLOAT(NHYP)-0.00001,               &
-                              XHYPINTP1*LOG(PPZSMAX)+XHYPINTP2 ) )
-PIVEC1 = INT( PZVEC1 )
-PZVEC1 = PZVEC1 - FLOAT( PIVEC1 )
-DO JMOD = 1, NMOD_CCN
-   ZHYPF        = 0.          ! XHYPF32 is tabulated with ZSMAX in [NO UNITS]
-   ZHYPF        =   XHYPF32( PIVEC1+1,JMOD ) * PZVEC1              &
-                  - XHYPF32( PIVEC1  ,JMOD ) *(PZVEC1 - 1.0)
-                             ! sum of s**(ki+2) * F32 * Ci * ki * bêta(ki/2,3/2)
-   PSINGL_FUNCSMAX = PSINGL_FUNCSMAX + (PPZSMAX)**(XKHEN_MULTI(JMOD) + 2)   &
-                   * ZHYPF* XKHEN_MULTI(JMOD) * ZCHEN_MULTI(KINDEX,JMOD) &
-                   * GAMMA_X0D( XKHEN_MULTI(JMOD)/2.0)*GAMMA_X0D(3.0/2.0)        &
-                   / GAMMA_X0D((XKHEN_MULTI(JMOD)+3.0)/2.0)
-ENDDO
-! function l.h.s. minus r.h.s. of eq. (9) of CPB98 but for NMOD_CCN aerosol mode
-PSINGL_FUNCSMAX = PSINGL_FUNCSMAX - PPZZW3
-!
-END FUNCTION SINGL_FUNCSMAX
-!
-!-----------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_CCN_ACTIVATION
diff --git a/src/arome/micro/lima_ccn_hom_freezing.F90 b/src/arome/micro/lima_ccn_hom_freezing.F90
deleted file mode 100644
index a7da41311666b48be8c8eca8f0b36c7660f91853..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_ccn_hom_freezing.F90
+++ /dev/null
@@ -1,398 +0,0 @@
-!      #################################
-       MODULE MODI_LIMA_CCN_HOM_FREEZING
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_CCN_HOM_FREEZING (HFMFILE, OCLOSE_OUT,                         &
-                                     PRHODREF, PEXNREF, PPABST, PW_NU,            &
-                                     PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,    &
-                                     PCCT, PCRT, PCIT, PNFT, PNHT                 )
-!
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE 
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT 
-!
-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)    :: PW_NU   ! updraft velocity used for
-                                                   ! the nucleation param.
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT)    :: PTHT    ! Theta at time t
-REAL, DIMENSION(:,:,:),   INTENT(INOUT)    :: PRVT    ! Water vapor m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT    ! Rain water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(INOUT)    :: PRIT    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRGT    ! Graupel m.r. at t 
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCCT    ! Cloud water C. at t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCRT    ! Rain water C. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT)    :: PCIT    ! Ice crystal C. source
-!
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT)    :: PNFT    ! Free CCN conc. 
-REAL, DIMENSION(:,:,:),   INTENT(INOUT)    :: PNHT    ! haze homogeneous freezing
-!
-END SUBROUTINE LIMA_CCN_HOM_FREEZING
-END INTERFACE
-END MODULE MODI_LIMA_CCN_HOM_FREEZING
-!
-!     ######################################################################
-   SUBROUTINE LIMA_CCN_HOM_FREEZING (HFMFILE, OCLOSE_OUT,                         &
-                                     PRHODREF, PEXNREF, PPABST, PW_NU,            &
-                                     PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,    &
-                                     PCCT, PCRT, PCIT, PNFT, PNHT                 )
-!     ######################################################################
-!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the cold-phase homogeneous
-!!    freezing of CCN, droplets and drops (T<-35°C)
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy*   jan. 2014  add budgets
-!!      B.Vie 10/2016 Bug zero division
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_PARAMETERS,      ONLY : JPHEXT, JPVEXT
-USE MODD_CST,             ONLY : XP00, XRD, XRV, XMV, XMD, XCPD, XCPV, XCL, XCI,   &
-                                 XTT, XLSTT, XLVTT, XALPI, XBETAI, XGAMI,          &
-                                 XG
-USE MODD_PARAM_LIMA,      ONLY : NMOD_CCN, NMOD_IMM, XRTMIN, XCTMIN, XNUC
-USE MODD_PARAM_LIMA_COLD, ONLY : XRCOEF_HONH, XCEXP_DIFVAP_HONH, XCOEF_DIFVAP_HONH,&
-                                 XCRITSAT1_HONH, XCRITSAT2_HONH, XTMAX_HONH,       &
-                                 XTMIN_HONH, XC1_HONH, XC2_HONH, XC3_HONH,         &
-                                 XDLNJODT1_HONH, XDLNJODT2_HONH, XRHOI_HONH,       &
-                                 XC_HONC, XTEXP1_HONC, XTEXP2_HONC, XTEXP3_HONC,   &
-                                 XTEXP4_HONC, XTEXP5_HONC 
-USE MODD_PARAM_LIMA_WARM, ONLY : XLBC
-USE MODI_LIMA_FUNCTIONS,  ONLY : COUNTJV
-!
-USE MODD_NSV
-USE MODD_BUDGET
-USE MODE_BUDGET, ONLY: BUDGET_DDH
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE 
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT 
-!
-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)    :: PW_NU   ! updraft velocity used for
-                                                   ! the nucleation param.
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT)    :: PTHT    ! Theta at time t
-REAL, DIMENSION(:,:,:),   INTENT(INOUT)    :: PRVT    ! Water vapor m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT    ! Rain water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(INOUT)    :: PRIT    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRGT    ! Graupel m.r. at t 
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCCT    ! Cloud water C. at t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCRT    ! Rain water C. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT)    :: PCIT    ! Ice crystal C. source
-!
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT)    :: PNFT    ! Free CCN conc. 
-REAL, DIMENSION(:,:,:),   INTENT(INOUT)    :: PNHT    ! haze homogeneous freezing
-!
-!*       0.2   Declarations of local variables :
-!
-REAL, DIMENSION(:), ALLOCATABLE :: ZRVT    ! Water vapor m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE :: ZRCT    ! Cloud water m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE :: ZRRT    ! Rain water m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE :: ZRIT    ! Pristine ice m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE :: ZRST    ! Snow/aggregate m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE :: ZRGT    ! Graupel/hail m.r. at t
-!
-REAL, DIMENSION(:), ALLOCATABLE :: ZTHT    ! Theta source
-!
-REAL, DIMENSION(:),   ALLOCATABLE :: ZCCT    ! Cloud water conc. source
-REAL, DIMENSION(:),   ALLOCATABLE :: ZCRT    ! Rain water conc. source
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZNFT    ! available nucleus conc. source
-REAL, DIMENSION(:),   ALLOCATABLE :: ZCIT    ! Pristine ice conc. source
-REAL, DIMENSION(:),   ALLOCATABLE :: ZZNHT   ! Nucleated Ice nuclei conc. source
-                                             !by Homogeneous freezing
-!
-REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3))   &
-                                  :: ZNHT  ! Nucleated Ice nuclei conc. source
-                                           ! by Homogeneous freezing of haze
-REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3))   &
-                                  :: ZW, ZT ! work arrays
-!
-REAL, DIMENSION(:), ALLOCATABLE &
-                           :: ZRHODREF, & ! RHO Dry REFerence
-                              ZRHODJ,   & ! RHO times Jacobian
-                              ZZT,      & ! Temperature
-                              ZPRES,    & ! Pressure
-                              ZEXNREF,  & ! EXNer Pressure REFerence
-                              ZZW,      & ! Work array
-                              ZZX,      & ! Work array
-                              ZZY,      & ! Work array
-                              ZLSFACT,  & ! L_s/(Pi_ref*C_ph)
-                              ZLVFACT,  & ! L_v/(Pi_ref*C_ph)
-                              ZLBDAC,   & ! Slope parameter of the cloud droplet distr.
-                              ZSI,      & ! Saturation over ice
-                              ZTCELSIUS,&
-                              ZLS,      &
-                              ZPSI1,    &
-                              ZPSI2,    &
-                              ZTAU,     &
-                              ZBFACT,   &
-                              ZW_NU,    &
-                              ZFREECCN, &
-                              ZCCNFROZEN
-!
-INTEGER :: IIB, IIE, IJB, IJE, IKB, IKE   ! Physical domain
-INTEGER :: JL, JMOD_CCN, JMOD_IMM         ! Loop index
-!
-INTEGER :: INEGT                          ! Case number of hom. nucleation
-LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) &
-			  :: GNEGT        ! Test where to compute the hom. nucleation
-INTEGER , DIMENSION(SIZE(GNEGT)) :: I1,I2,I3 ! Used to replace the COUNT
-!
-REAL    :: ZEPS                           ! molar mass ratio
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       1.     PRELIMINARY COMPUTATIONS
-!	        ------------------------
-!
-!
-! Physical domain
-IIB=1+JPHEXT
-IIE=SIZE(PTHT,1) - JPHEXT
-IJB=1+JPHEXT
-IJE=SIZE(PTHT,2) - JPHEXT
-IKB=1+JPVEXT
-IKE=SIZE(PTHT,3) - JPVEXT
-!
-! Temperature
-ZT(:,:,:) = PTHT(:,:,:) * ( PPABST(:,:,:)/XP00 ) ** (XRD/XCPD)
-!
-ZNHT(:,:,:) = PNHT(:,:,:)
-!
-! Computations only where the temperature is below -35°C
-! PACK variables
-!
-GNEGT(:,:,:) = .FALSE.
-GNEGT(IIB:IIE,IJB:IJE,IKB:IKE) = ZT(IIB:IIE,IJB:IJE,IKB:IKE)<XTT-35.0
-INEGT = COUNTJV( GNEGT(:,:,:),I1(:),I2(:),I3(:))
-!
-IF (INEGT.GT.0) THEN
-
-   ALLOCATE(ZRVT(INEGT)) 
-   ALLOCATE(ZRCT(INEGT)) 
-   ALLOCATE(ZRRT(INEGT)) 
-   ALLOCATE(ZRIT(INEGT)) 
-   ALLOCATE(ZRST(INEGT)) 
-   ALLOCATE(ZRGT(INEGT)) 
-   !
-   ALLOCATE(ZTHT(INEGT))
-   !
-   ALLOCATE(ZCCT(INEGT))
-   ALLOCATE(ZCRT(INEGT))
-   ALLOCATE(ZCIT(INEGT))
-   !
-   ALLOCATE(ZNFT(INEGT,NMOD_CCN))
-   ALLOCATE(ZZNHT(INEGT))
-   !
-   ALLOCATE(ZRHODREF(INEGT)) 
-   ALLOCATE(ZZT(INEGT)) 
-   ALLOCATE(ZPRES(INEGT)) 
-   ALLOCATE(ZEXNREF(INEGT))
-   !
-   DO JL=1,INEGT
-      ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL))
-      ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL))
-      ZRRT(JL) = PRRT(I1(JL),I2(JL),I3(JL))
-      ZRIT(JL) = PRIT(I1(JL),I2(JL),I3(JL))
-      ZRST(JL) = PRST(I1(JL),I2(JL),I3(JL))
-      ZRGT(JL) = PRGT(I1(JL),I2(JL),I3(JL))
-      !
-      ZTHT(JL) = PTHT(I1(JL),I2(JL),I3(JL))
-      !
-      ZCCT(JL) = PCCT(I1(JL),I2(JL),I3(JL))
-      ZCRT(JL) = PCRT(I1(JL),I2(JL),I3(JL))
-      ZCIT(JL) = PCIT(I1(JL),I2(JL),I3(JL))
-      !
-      DO JMOD_CCN = 1, NMOD_CCN
-         ZNFT(JL,JMOD_CCN) = PNFT(I1(JL),I2(JL),I3(JL),JMOD_CCN)
-      ENDDO
-      ZZNHT(JL) = ZNHT(I1(JL),I2(JL),I3(JL))
-      ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL))
-      ZZT(JL)      = ZT(I1(JL),I2(JL),I3(JL))
-      ZPRES(JL)    = PPABST(I1(JL),I2(JL),I3(JL))
-      ZEXNREF(JL)  = PEXNREF(I1(JL),I2(JL),I3(JL))
-   ENDDO
-!
-! PACK : done
-! Prepare computations
-!
-   ALLOCATE( ZLSFACT    (INEGT) )
-   ALLOCATE( ZLVFACT    (INEGT) )
-   ALLOCATE( ZSI        (INEGT) )
-   ALLOCATE( ZTCELSIUS  (INEGT) )
-   ALLOCATE( ZLBDAC     (INEGT) )
-!
-   ALLOCATE( ZZW (INEGT) ) ; ZZW(:) = 0.0
-   ALLOCATE( ZZX (INEGT) ) ; ZZX(:) = 0.0
-   ALLOCATE( ZZY (INEGT) ) ; ZZY(:) = 0.0
-!
-   ZTCELSIUS(:) = ZZT(:)-XTT                                    ! T [°C]
-   ZZW(:)  = ZEXNREF(:)*( XCPD+XCPV*ZRVT(:)+XCL*(ZRCT(:)+ZRRT(:)) &
-        +XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) )
-   ZLSFACT(:) = (XLSTT+(XCPV-XCI)*ZTCELSIUS(:))/ZZW(:)          ! L_s/(Pi_ref*C_ph)
-   ZLVFACT(:) = (XLVTT+(XCPV-XCL)*ZTCELSIUS(:))/ZZW(:)          ! L_v/(Pi_ref*C_ph)
-!
-   ZZW(:)  = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) ) ! es_i
-   ZSI(:)  = ZRVT(:)*(ZPRES(:)-ZZW(:))/((XMV/XMD)*ZZW(:))       ! Saturation over ice
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       2.     Haze homogeneous freezing
-!	        ------------------------
-!
-!
-!  Compute the haze homogeneous nucleation source: RHHONI
-!
-   IF( NMOD_CCN.GT.0 ) THEN
-
-! Sum of the available CCN
-      ALLOCATE( ZFREECCN(INEGT) )
-      ALLOCATE( ZCCNFROZEN(INEGT) )
-      ZFREECCN(:)=0.
-      ZCCNFROZEN(:)=0.
-      DO JMOD_CCN = 1, NMOD_CCN
-         ZFREECCN(:) = ZFREECCN(:) + ZNFT(:,JMOD_CCN)
-      END DO
-!
-      ALLOCATE(ZW_NU(INEGT))
-      DO JL=1,INEGT
-         ZW_NU(JL) = PW_NU(I1(JL),I2(JL),I3(JL))
-      END DO
-!
-      ZZW(:)  = 0.0
-      ZZX(:)  = 0.0
-      ZEPS    = XMV / XMD
-      ZZY(:)  = XCRITSAT1_HONH -                              &  ! Critical Sat.
-              (MIN( XTMAX_HONH,MAX( XTMIN_HONH,ZZT(:) ) )/XCRITSAT2_HONH)
-!
-      ALLOCATE(ZLS(INEGT))
-      ALLOCATE(ZPSI1(INEGT))
-      ALLOCATE(ZPSI2(INEGT))
-      ALLOCATE(ZTAU(INEGT))
-      ALLOCATE(ZBFACT(INEGT))
-!
-      WHERE( (ZZT(:)<XTT-35.0) .AND. (ZSI(:)>ZZY(:)) )
-            ZLS(:)   = XLSTT+(XCPV-XCI)*ZTCELSIUS(:)          ! Ls
-!
-            ZPSI1(:) = ZZY(:) * (XG/(XRD*ZZT(:)))*(ZEPS*ZLS(:)/(XCPD*ZZT(:))-1.)
-!                                                         ! Psi1 (a1*Scr in KL01)
-! BV correction PSI2 enlever 1/ZEPS ?
-!            ZPSI2(:) = ZSI(:) * (1.0/ZEPS+1.0/ZRVT(:)) +                           &
-            ZPSI2(:) = ZSI(:) * (1.0/ZRVT(:)) +                           &
-                 ZZY(:) * ((ZLS(:)/ZZT(:))**2)/(XCPD*XRV) 
-!                                                         ! Psi2 (a2+a3*Scr in KL01)
-            ZTAU(:) = 1.0 / ( MAX( XC1_HONH,XC1_HONH*(XC2_HONH-XC3_HONH*ZZT(:)) ) *&
-                 ABS( (XDLNJODT1_HONH - XDLNJODT2_HONH*ZZT(:))       *             &
-                 ((ZPRES(:)/XP00)**(XRD/XCPD))*ZTHT(:) ) )
-!
-            ZBFACT(:) = (XRHOI_HONH/ZRHODREF(:)) * (ZSI(:)/(ZZY(:)-1.0))           &
-! BV correction ZBFACT enlever 1/ZEPS ?
-!                 * (1.0/ZRVT(:)+1.0/ZEPS)                                          &
-                 * (1.0/ZRVT(:))                                          &
-                 / (XCOEF_DIFVAP_HONH*(ZZT(:)**XCEXP_DIFVAP_HONH /ZPRES(:)))
-!
-! BV correction ZZX rho_i{-1} ?
-!            ZZX(:) = MAX( MIN( XRHOI_HONH*ZBFACT(:)**1.5 * (ZPSI1(:)/ZPSI2(:))     &
-            ZZX(:) = MAX( MIN( (1/XRHOI_HONH)*ZBFACT(:)**1.5 * (ZPSI1(:)/ZPSI2(:))     &
-                 * (ZW_NU(:)/SQRT(ZTAU(:))) , ZFREECCN(:) ) , 0.)
-!
-            ZZW(:) = MIN( XRCOEF_HONH*ZZX(:)*(ZTAU(:)/ZBFACT(:))**1.5 , ZRVT(:) )
-      END WHERE
-!
-! Apply the changes 
-      DO JMOD_CCN = 1, NMOD_CCN
-         WHERE(ZFREECCN(:)>1.)
-            ZCCNFROZEN(:) = ZZX(:) * ZNFT(:,JMOD_CCN)/ZFREECCN(:)
-         END WHERE
-         PNFT(:,:,:,JMOD_CCN) = PNFT(:,:,:,JMOD_CCN) - UNPACK( ZCCNFROZEN(:), MASK=GNEGT(:,:,:),FIELD=0.)
-      END DO
-!
-      PTHT(:,:,:) = PTHT(:,:,:) + UNPACK( ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)), MASK=GNEGT(:,:,:),FIELD=0.)
-      PRVT(:,:,:) = PRVT(:,:,:) - UNPACK( ZZW(:), MASK=GNEGT(:,:,:),FIELD=0.)
-      PRIT(:,:,:) = PRIT(:,:,:) + UNPACK( ZZW(:), MASK=GNEGT(:,:,:),FIELD=0.)
-      PCIT(:,:,:) = PCIT(:,:,:) + UNPACK( ZZX(:), MASK=GNEGT(:,:,:),FIELD=0.)
-      PNHT(:,:,:) = PNHT(:,:,:) + UNPACK( ZZX(:), MASK=GNEGT(:,:,:),FIELD=0.)
-
-      DEALLOCATE(ZFREECCN)
-      DEALLOCATE(ZCCNFROZEN)
-      DEALLOCATE(ZLS)
-      DEALLOCATE(ZPSI1)
-      DEALLOCATE(ZPSI2)
-      DEALLOCATE(ZTAU)
-      DEALLOCATE(ZBFACT)
-      DEALLOCATE(ZW_NU)
-!
-   END IF
-!
-!
-   DEALLOCATE(ZRVT) 
-   DEALLOCATE(ZRCT) 
-   DEALLOCATE(ZRRT) 
-   DEALLOCATE(ZRIT) 
-   DEALLOCATE(ZRST) 
-   DEALLOCATE(ZRGT) 
-!
-   DEALLOCATE(ZTHT)
-!
-   DEALLOCATE(ZCCT)
-   DEALLOCATE(ZCRT)
-   DEALLOCATE(ZCIT)
-!
-   DEALLOCATE(ZNFT)
-   DEALLOCATE(ZZNHT)
-!
-   DEALLOCATE(ZRHODREF) 
-   DEALLOCATE(ZZT) 
-   DEALLOCATE(ZPRES) 
-   DEALLOCATE(ZEXNREF)
-!
-   DEALLOCATE(ZLSFACT)
-   DEALLOCATE(ZLVFACT)
-   DEALLOCATE(ZSI)
-   DEALLOCATE(ZTCELSIUS)
-   DEALLOCATE(ZLBDAC)
-!
-   DEALLOCATE(ZZW) 
-   DEALLOCATE(ZZX)
-   DEALLOCATE(ZZY)
-!
-!
-END IF ! INEGT>0
-!
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_CCN_HOM_FREEZING
diff --git a/src/arome/micro/lima_cold.F90 b/src/arome/micro/lima_cold.F90
deleted file mode 100644
index 2c6030595882735561eaa737fb363c8f161bab51..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_cold.F90
+++ /dev/null
@@ -1,446 +0,0 @@
-!      #####################
-       MODULE MODI_LIMA_COLD
-!      #####################
-!
-INTERFACE
-      SUBROUTINE LIMA_COLD (OSEDI, OHHONI, KSPLITG, PTSTEP, KMI,           &
-                           HFMFILE, HLUOUT, OCLOSE_OUT, KRR, PZZ, PRHODJ,  &
-                           PRHODREF, PEXNREF, PPABST, PW_NU,               &
-                           PTHM, PPABSM,                                   &
-                           PTHT, PRT, PSVT,                                &
-                           PTHS, PRS, PSVS,                                &
-                           PINPRS, PINPRG, PINPRH, &
-                            YDDDH, YDLDDH, YDMDDH)
-!
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-LOGICAL,                  INTENT(IN)    :: OSEDI   ! switch to activate the 
-                                                   ! cloud ice sedimentation
-LOGICAL,                  INTENT(IN)    :: OHHONI  ! enable haze freezing
-INTEGER,                  INTENT(IN)    :: KSPLITG ! Number of small time step 
-                                                   ! for ice sedimendation
-REAL,                     INTENT(IN)    :: PTSTEP  ! Time step          
-INTEGER,                  INTENT(IN)    :: KMI     ! Model index 
-!
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)    :: HLUOUT  ! Output-listing name for
-                                                   ! model n
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                   ! the tput FM fileoutp
-INTEGER,                  INTENT(IN)    :: KRR     ! Number of moist variables
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ     ! Height (z)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ  ! Dry density * Jacobian
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF ! Reference Exner function
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST  ! abs. pressure at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PW_NU   ! updraft velocity used for
-                                                   ! the nucleation param.
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHM    ! Theta at time t-dt
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABSM  ! abs. pressure at time t-dt
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT    ! Theta at time t
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT     ! m.r. at t 
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT    ! Concentrations at t 
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS    ! Theta source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS     ! m.r. source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS    ! Concentrations source
-!
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRS  ! Snow instant precip
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRG  ! Graupel instant precip
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRH  ! Hail instant precip
-!
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-END SUBROUTINE LIMA_COLD
-END INTERFACE
-END MODULE MODI_LIMA_COLD
-!
-!     ######################################################################
-      SUBROUTINE LIMA_COLD (OSEDI, OHHONI, KSPLITG, PTSTEP, KMI,           &
-                           HFMFILE, HLUOUT, OCLOSE_OUT, KRR, PZZ, PRHODJ,  &
-                           PRHODREF, PEXNREF, PPABST, PW_NU,               &
-                           PTHM, PPABSM,                                   &
-                           PTHT, PRT, PSVT,                                &
-                           PTHS, PRS, PSVS,                                &
-                           PINPRS, PINPRG, PINPRH, &
-                            YDDDH, YDLDDH, YDMDDH)
-!     ######################################################################
-!
-!!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the cold-phase 
-!!    microphysical sources involving only primary ice and snow, except for 
-!!    the sedimentation which also includes graupelns, and the homogeneous
-!!    freezing of CCNs, cloud droplets and raindrops.
-!!
-!!
-!!**  METHOD
-!!    ------
-!!      The nucleation of IFN is parameterized following either Meyers (1992)
-!!    or Phillips (2008, 2013).
-!!
-!!      The sedimentation rates are computed with a time spliting technique: 
-!!    an upstream scheme, written as a difference of non-advective fluxes. 
-!!    This source term is added to the next coming time step (split-implicit 
-!!    process).
-!!
-!!
-!!    REFERENCES
-!!    ----------
-!!
-!!      Cohard, J.-M. and J.-P. Pinty, 2000: A comprehensive two-moment warm 
-!!      microphysical bulk scheme. 
-!!        Part I: Description and tests
-!!        Part II: 2D experiments with a non-hydrostatic model
-!!      Accepted for publication in Quart. J. Roy. Meteor. Soc. 
-!!
-!!      Phillips et al., 2008: An empirical parameterization of heterogeneous
-!!        ice nucleation for multiple chemical species of aerosols, J. Atmos. Sci. 
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-USE MODD_NSV
-USE MODD_PARAM_LIMA
-!
-USE MODD_BUDGET
-USE MODE_BUDGET, ONLY: BUDGET_DDH
-!
-USE MODI_LIMA_COLD_SEDIMENTATION
-USE MODI_LIMA_MEYERS
-USE MODI_LIMA_PHILLIPS
-USE MODI_LIMA_COLD_HOM_NUCL
-USE MODI_LIMA_COLD_SLOW_PROCESSES
-!
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-LOGICAL,                  INTENT(IN)    :: OSEDI   ! switch to activate the 
-                                                   ! cloud ice sedimentation
-LOGICAL,                  INTENT(IN)    :: OHHONI  ! enable haze freezing
-INTEGER,                  INTENT(IN)    :: KSPLITG ! Number of small time step 
-                                                   ! for ice sedimendation
-REAL,                     INTENT(IN)    :: PTSTEP  ! Time step          
-INTEGER,                  INTENT(IN)    :: KMI     ! Model index 
-!
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)    :: HLUOUT  ! Output-listing name for
-                                                   ! model n
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                   ! the tput FM fileoutp
-INTEGER,                  INTENT(IN)    :: KRR     ! Number of moist variables
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ     ! Height (z)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ  ! Dry density * Jacobian
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF ! Reference Exner function
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST  ! abs. pressure at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PW_NU   ! updraft velocity used for
-                                                   ! the nucleation param.
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHM    ! Theta at time t-dt
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABSM  ! abs. pressure at time t-dt
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT    ! Theta at time t
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT     ! m.r. at t 
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT    ! Concentrations at t 
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS    ! Theta source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS     ! m.r. source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS    ! Concentrations source
-!
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRS  ! Snow instant precip
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRG  ! Graupel instant precip
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRH  ! Hail instant precip
-!
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-!
-!*       0.2   Declarations of local variables :
-!
-REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3))  &
-                                    :: PRVT,    & ! Water vapor m.r. at t 
-                                       PRCT,    & ! Cloud water m.r. at t 
-                                       PRRT,    & ! Rain water m.r. at t 
-                                       PRIT,    & ! Cloud ice m.r. at t 
-                                       PRST,    & ! Snow/aggregate m.r. at t 
-                                       PRGT,    & ! Graupel m.r. at t 
-                                       PRHT,    & ! Graupel m.r. at t 
-                                       !
-                                       PRVS,    & ! Water vapor m.r. source
-                                       PRCS,    & ! Cloud water m.r. source
-                                       PRRS,    & ! Rain water m.r. source
-                                       PRIS,    & ! Pristine ice m.r. source
-                                       PRSS,    & ! Snow/aggregate m.r. source
-                                       PRGS,    & ! Graupel/hail m.r. source
-                                       PRHS,    & ! Graupel/hail m.r. source
-                                       !
-                                       PCCT,    & ! Cloud water C. at t
-                                       PCRT,    & ! Rain water C. at t
-                                       PCIT,    & ! Ice crystal C. at t
-                                       !
-                                       PCCS,    & ! Cloud water C. source
-                                       PCRS,    & ! Rain water C. source
-                                       PCIS       ! Ice crystal C. source
-!
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: PNFS     ! CCN C. available source
-                                                  !used as Free ice nuclei for
-                                                  !HOMOGENEOUS nucleation of haze
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: PNAS     ! Cloud  C. nuclei C. source
-                                                  !used as Free ice nuclei for
-                                                  !IMMERSION freezing
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: PIFS     ! Free ice nuclei C. source 
-                                                  !for DEPOSITION and CONTACT
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: PINS     ! Activated ice nuclei C. source
-                                                  !for DEPOSITION and CONTACT
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: PNIS     ! Activated ice nuclei C. source
-                                                  !for IMMERSION
-REAL, DIMENSION(:,:,:), ALLOCATABLE :: PNHS     ! Haze homogeneous activation
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       0.     3D MICROPHYSCAL VARIABLES
-!	        -------------------------
-!
-!
-! Prepare 3D water mixing ratios
-PRVT(:,:,:) = PRT(:,:,:,1)
-PRVS(:,:,:) = PRS(:,:,:,1)
-!
-PRCT(:,:,:) = 0.
-PRCS(:,:,:) = 0.
-PRRT(:,:,:) = 0.
-PRRS(:,:,:) = 0.
-PRIT(:,:,:) = 0.
-PRIS(:,:,:) = 0.
-PRST(:,:,:) = 0.
-PRSS(:,:,:) = 0.
-PRGT(:,:,:) = 0.
-PRGS(:,:,:) = 0.
-PRHT(:,:,:) = 0.
-PRHS(:,:,:) = 0.
-!
-IF ( KRR .GE. 2 ) PRCT(:,:,:) = PRT(:,:,:,2)
-IF ( KRR .GE. 2 ) PRCS(:,:,:) = PRS(:,:,:,2)
-IF ( KRR .GE. 3 ) PRRT(:,:,:) = PRT(:,:,:,3) 
-IF ( KRR .GE. 3 ) PRRS(:,:,:) = PRS(:,:,:,3)
-IF ( KRR .GE. 4 ) PRIT(:,:,:) = PRT(:,:,:,4) 
-IF ( KRR .GE. 4 ) PRIS(:,:,:) = PRS(:,:,:,4)
-IF ( KRR .GE. 5 ) PRST(:,:,:) = PRT(:,:,:,5)
-IF ( KRR .GE. 5 ) PRSS(:,:,:) = PRS(:,:,:,5)
-IF ( KRR .GE. 6 ) PRGT(:,:,:) = PRT(:,:,:,6)
-IF ( KRR .GE. 6 ) PRGS(:,:,:) = PRS(:,:,:,6)
-IF ( KRR .GE. 7 ) PRHT(:,:,:) = PRT(:,:,:,7)
-IF ( KRR .GE. 7 ) PRHS(:,:,:) = PRS(:,:,:,7)
-!
-! Prepare 3D number concentrations
-PCCT(:,:,:) = 0.
-PCRT(:,:,:) = 0.
-PCIT(:,:,:) = 0.
-PCCS(:,:,:) = 0.
-PCRS(:,:,:) = 0.
-PCIS(:,:,:) = 0.
-!
-IF ( LWARM_LIMA ) PCCT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NC)
-IF ( LWARM_LIMA .AND. LRAIN_LIMA ) PCRT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NR)
-IF ( LCOLD_LIMA ) PCIT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NI)
-!
-IF ( LWARM_LIMA ) PCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC)
-IF ( LWARM_LIMA .AND. LRAIN_LIMA ) PCRS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR)
-IF ( LCOLD_LIMA ) PCIS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI)
-!
-IF ( NMOD_CCN .GE. 1 ) THEN
-   ALLOCATE( PNFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_CCN) )
-   ALLOCATE( PNAS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_CCN) )
-   PNFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1)
-   PNAS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1)
-ELSE
-   ALLOCATE( PNFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),1) )
-   ALLOCATE( PNAS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),1) )
-   PNFS(:,:,:,:) = 0.
-   PNAS(:,:,:,:) = 0.
-END IF
-!
-IF ( NMOD_IFN .GE. 1 ) THEN
-   ALLOCATE( PIFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_IFN) )
-   ALLOCATE( PINS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_IFN) )
-   PIFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1)
-   PINS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1)
-ELSE
-   ALLOCATE( PIFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),1) )
-   ALLOCATE( PINS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),1) )
-   PIFS(:,:,:,:) = 0.
-   PINS(:,:,:,:) = 0.
-END IF
-!
-IF ( NMOD_IMM .GE. 1 ) THEN
-   ALLOCATE( PNIS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_IMM) )
-   PNIS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1)
-ELSE
-   ALLOCATE( PNIS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),1) )
-   PNIS(:,:,:,:) = 0.0
-END IF
-!
-IF ( OHHONI ) THEN
-   ALLOCATE( PNHS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) )
-   PNHS(:,:,:) = PSVS(:,:,:,NSV_LIMA_HOM_HAZE)
-ELSE
-   ALLOCATE( PNHS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) )
-   PNHS(:,:,:) = 0.0
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       1.     COMPUTE THE SEDIMENTATION (RS) SOURCE
-!	        -------------------------------------
-!
-CALL LIMA_COLD_SEDIMENTATION (OSEDI, KSPLITG, PTSTEP, KMI,     &
-                              HFMFILE, HLUOUT, OCLOSE_OUT,     &
-                              PZZ, PRHODJ, PRHODREF,           &
-                              PRIT, PCIT,                      &
-                              PRIS, PRSS, PRGS, PRHS, PCIS,    &
-                              PINPRS, PINPRG,&
-                              PINPRH                  )
-IF (LBU_ENABLE) THEN
-  IF (LBUDGET_RI .AND. OSEDI)                                              &
-                  CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9 ,'SEDI_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10 ,'SEDI_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11 ,'SEDI_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RH) CALL BUDGET_DDH (PRHS(:,:,:)*PRHODJ(:,:,:),12 ,'SEDI_BU_RRH',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_SV) THEN
-    IF (OSEDI) CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'SEDI_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! RCI
-  END IF
-END IF
-!-------------------------------------------------------------------------------
-!
-!
-!               COMPUTE THE NUCLEATION PROCESS SOURCES
-!   	        --------------------------------------
-!
-IF (LNUCL_LIMA) THEN
-!
-   IF ( LMEYERS_LIMA ) THEN
-      PIFS(:,:,:,:) = 0.0
-      PNIS(:,:,:,:) = 0.0
-      CALL LIMA_MEYERS (OHHONI, PTSTEP, KMI, HFMFILE, HLUOUT, OCLOSE_OUT, &
-                        PZZ, PRHODJ, PRHODREF, PEXNREF, PPABST,           &
-                        PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PCCT,   &
-                        PTHS, PRVS, PRCS, PRIS,                           &
-                        PCCS, PCIS, PINS, &
-                            YDDDH, YDLDDH, YDMDDH )
-   ELSE
-      CALL LIMA_PHILLIPS (OHHONI, PTSTEP, KMI, HFMFILE, HLUOUT, OCLOSE_OUT, &
-                          PZZ, PRHODJ, PRHODREF, PEXNREF, PPABST,           &
-                          PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,         &
-                          PTHS, PRVS, PRCS, PRIS,                           &
-                          PCIT, PCCS, PCIS,                                 &
-                          PNAS, PIFS, PINS, PNIS, &
-                            YDDDH, YDLDDH, YDMDDH   )
-   END IF
-!
-   IF (LWARM_LIMA) THEN
-      CALL LIMA_COLD_HOM_NUCL (OHHONI, PTSTEP, KMI,                         &
-                               HFMFILE, HLUOUT, OCLOSE_OUT, PZZ, PRHODJ,    &
-                               PRHODREF, PEXNREF, PPABST, PW_NU,            &
-                               PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,    &
-                               PTHS, PRVS, PRCS, PRRS, PRIS, PRGS,          &
-                               PCCT,                                        &
-                               PCCS, PCRS, PNFS,                            &
-                               PCIS, PNIS, PNHS , &
-                            YDDDH, YDLDDH, YDMDDH                            )
-   END IF
-!
-END IF
-!
-!------------------------------------------------------------------------------
-!
-!
-!*       4.    SLOW PROCESSES: depositions, aggregation
-!              ----------------------------------------
-!
-IF (LSNOW_LIMA) THEN
-!
-   CALL LIMA_COLD_SLOW_PROCESSES(PTSTEP, KMI, HFMFILE, HLUOUT,             &
-                                 OCLOSE_OUT, PZZ, PRHODJ,                  &
-                                 PRHODREF, PEXNREF, PPABST,                &
-                                 PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
-                                 PTHS, PRVS, PRIS, PRSS,                   &
-                                 PCIT, PCIS, &
-                            YDDDH, YDLDDH, YDMDDH                                )
-!
-END IF
-!
-!------------------------------------------------------------------------------
-!
-!
-!*       4.    REPORT 3D MICROPHYSICAL VARIABLES IN PRS AND PSVS
-!              -------------------------------------------------
-!
-PRS(:,:,:,1) = PRVS(:,:,:)
-IF ( KRR .GE. 2 ) PRS(:,:,:,2) = PRCS(:,:,:)
-IF ( KRR .GE. 3 ) PRS(:,:,:,3) = PRRS(:,:,:)
-IF ( KRR .GE. 4 ) PRS(:,:,:,4) = PRIS(:,:,:)
-IF ( KRR .GE. 5 ) PRS(:,:,:,5) = PRSS(:,:,:)
-IF ( KRR .GE. 6 ) PRS(:,:,:,6) = PRGS(:,:,:)
-IF ( KRR .GE. 7 ) PRS(:,:,:,7) = PRHS(:,:,:)
-!
-! Prepare 3D number concentrations
-!
-IF ( LWARM_LIMA ) PSVS(:,:,:,NSV_LIMA_NC) = PCCS(:,:,:)
-IF ( LWARM_LIMA .AND. LRAIN_LIMA ) PSVS(:,:,:,NSV_LIMA_NR) = PCRS(:,:,:)
-IF ( LCOLD_LIMA ) PSVS(:,:,:,NSV_LIMA_NI) = PCIS(:,:,:)
-!
-IF ( NMOD_CCN .GE. 1 ) THEN
-   PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) = PNFS(:,:,:,:)
-   PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1) = PNAS(:,:,:,:)
-END IF
-!
-IF ( NMOD_IFN .GE. 1 ) THEN
-   PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1) = PIFS(:,:,:,:)
-   PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1) = PINS(:,:,:,:)
-END IF
-!
-IF ( NMOD_IMM .GE. 1 ) THEN
-   PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1) = PNIS(:,:,:,:)
-END IF
-
-IF ( OHHONI ) PSVS(:,:,:,NSV_LIMA_HOM_HAZE) = PNHS(:,:,:)
-!
-IF (ALLOCATED(PNFS)) DEALLOCATE(PNFS)
-IF (ALLOCATED(PNAS)) DEALLOCATE(PNAS)
-IF (ALLOCATED(PIFS)) DEALLOCATE(PIFS)
-IF (ALLOCATED(PINS)) DEALLOCATE(PINS)
-IF (ALLOCATED(PNIS)) DEALLOCATE(PNIS)
-IF (ALLOCATED(PNHS)) DEALLOCATE(PNHS)
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_COLD
diff --git a/src/arome/micro/lima_cold_hom_nucl.F90 b/src/arome/micro/lima_cold_hom_nucl.F90
deleted file mode 100644
index f30a0feb314e23c19f6c63ef96af144bcd158b60..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_cold_hom_nucl.F90
+++ /dev/null
@@ -1,696 +0,0 @@
-!      ######################
-       MODULE MODI_LIMA_COLD_HOM_NUCL
-!      ######################
-!
-INTERFACE
-      SUBROUTINE LIMA_COLD_HOM_NUCL (OHHONI, PTSTEP, KMI,             &
-                           HFMFILE, HLUOUT, OCLOSE_OUT, PZZ, PRHODJ,  &
-                           PRHODREF, PEXNREF, PPABST, PW_NU,          &
-                           PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,  &
-                           PTHS, PRVS, PRCS, PRRS, PRIS, PRGS,        &
-                           PCCT,                                      &
-                           PCCS, PCRS, PNFS,                          &
-                           PCIS, PNIS, PNHS, &
-                            YDDDH, YDLDDH, YDMDDH                           )
-!
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-LOGICAL,                  INTENT(IN)    :: OHHONI  ! enable haze freezing
-REAL,                     INTENT(IN)    :: PTSTEP  ! Time step          
-INTEGER,                  INTENT(IN)    :: KMI     ! Model index 
-!
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)    :: HLUOUT  ! Output-listing name for
-                                                   ! model n
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                   ! the tput FM fileoutp
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ     ! Height (z)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ  ! Dry density * Jacobian
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF ! Reference Exner function
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST  ! abs. pressure at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PW_NU   ! updraft velocity used for
-                                                   ! the nucleation param.
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT    ! Theta at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRVT    ! Water vapor m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT    ! Rain water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRIT    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRGT    ! Graupel m.r. at t 
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS    ! Theta source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRVS    ! Water vapor m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRCS    ! Cloud water m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRRS    ! Rain water m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRIS    ! Pristine ice m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRGS    ! Graupel/hail m.r. source
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCCT    ! Cloud water C. at t
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCCS    ! Cloud water C. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCRS    ! Rain water C. source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNFS    ! CCN C. available source
-                                                   !used as Free ice nuclei for
-                                                   !HOMOGENEOUS nucleation of haze
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCIS    ! Ice crystal C. source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNIS    ! Activated ice nuclei C. source
-                                                   !for IMMERSION
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PNHS    ! haze homogeneous freezing
-!
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-!
-END SUBROUTINE LIMA_COLD_HOM_NUCL
-END INTERFACE
-END MODULE MODI_LIMA_COLD_HOM_NUCL
-!
-!     ######################################################################
-      SUBROUTINE LIMA_COLD_HOM_NUCL (OHHONI, PTSTEP, KMI,             &
-                           HFMFILE, HLUOUT, OCLOSE_OUT, PZZ, PRHODJ,  &
-                           PRHODREF, PEXNREF, PPABST, PW_NU,          &
-                           PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,  &
-                           PTHS, PRVS, PRCS, PRRS, PRIS, PRGS,        &
-                           PCCT,                                      &
-                           PCCS, PCRS, PNFS,                          &
-                           PCIS, PNIS, PNHS, &
-                            YDDDH, YDLDDH, YDMDDH                           )
-!     ######################################################################
-!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the cold-phase homogeneous
-!!    freezing of CCN, droplets and drops (T<-35°C)
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy*   jan. 2014  add budgets
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_PARAMETERS,      ONLY : JPHEXT, JPVEXT
-USE MODD_CST,             ONLY : XP00, XRD, XRV, XMV, XMD, XCPD, XCPV, XCL, XCI,   &
-                                 XTT, XLSTT, XLVTT, XALPI, XBETAI, XGAMI,          &
-                                 XG
-USE MODD_PARAM_LIMA,      ONLY : NMOD_CCN, NMOD_IMM, XRTMIN, XCTMIN, XNUC
-USE MODD_PARAM_LIMA_COLD, ONLY : XRCOEF_HONH, XCEXP_DIFVAP_HONH, XCOEF_DIFVAP_HONH,&
-                                 XCRITSAT1_HONH, XCRITSAT2_HONH, XTMAX_HONH,       &
-                                 XTMIN_HONH, XC1_HONH, XC2_HONH, XC3_HONH,         &
-                                 XDLNJODT1_HONH, XDLNJODT2_HONH, XRHOI_HONH,       &
-                                 XC_HONC, XTEXP1_HONC, XTEXP2_HONC, XTEXP3_HONC,   &
-                                 XTEXP4_HONC, XTEXP5_HONC 
-USE MODD_PARAM_LIMA_WARM, ONLY : XLBC
-USE MODI_LIMA_FUNCTIONS,  ONLY : COUNTJV
-!
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-USE MODD_NSV
-USE MODD_BUDGET
-USE MODE_BUDGET, ONLY: BUDGET_DDH
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-LOGICAL,                  INTENT(IN)    :: OHHONI  ! enable haze freezing
-REAL,                     INTENT(IN)    :: PTSTEP  ! Time step          
-INTEGER,                  INTENT(IN)    :: KMI     ! Model index 
-!
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)    :: HLUOUT  ! Output-listing name for
-                                                   ! model n
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                   ! the tput FM fileoutp
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ     ! Height (z)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ  ! Dry density * Jacobian
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF ! Reference Exner function
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST  ! abs. pressure at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PW_NU   ! updraft velocity used for
-                                                   ! the nucleation param.
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT    ! Theta at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRVT    ! Water vapor m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT    ! Rain water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRIT    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRGT    ! Graupel m.r. at t 
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS    ! Theta source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRVS    ! Water vapor m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRCS    ! Cloud water m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRRS    ! Rain water m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRIS    ! Pristine ice m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRGS    ! Graupel/hail m.r. source
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCCT    ! Cloud water C. at t
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCCS    ! Cloud water C. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCRS    ! Rain water C. source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNFS    ! CCN C. available source
-                                                   !used as Free ice nuclei for
-                                                   !HOMOGENEOUS nucleation of haze
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCIS    ! Ice crystal C. source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNIS    ! Activated ice nuclei C. source
-                                                   !for IMMERSION
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PNHS    ! haze homogeneous freezing
-!
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-!
-!*       0.2   Declarations of local variables :
-!
-REAL, DIMENSION(:), ALLOCATABLE :: ZRVT    ! Water vapor m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE :: ZRCT    ! Cloud water m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE :: ZRRT    ! Rain water m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE :: ZRIT    ! Pristine ice m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE :: ZRST    ! Snow/aggregate m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE :: ZRGT    ! Graupel/hail m.r. at t
-!
-REAL, DIMENSION(:), ALLOCATABLE :: ZCCT    ! Cloud water conc. at t
-!
-REAL, DIMENSION(:), ALLOCATABLE :: ZTHS    ! Theta source
-!
-REAL, DIMENSION(:), ALLOCATABLE :: ZRVS    ! Water vapor m.r. source
-REAL, DIMENSION(:), ALLOCATABLE :: ZRCS    ! Cloud water m.r. source
-REAL, DIMENSION(:), ALLOCATABLE :: ZRRS    ! Rain water m.r. source
-REAL, DIMENSION(:), ALLOCATABLE :: ZRIS    ! Pristine ice m.r. source
-REAL, DIMENSION(:), ALLOCATABLE :: ZRGS    ! Graupel/hail m.r. source
-!
-REAL, DIMENSION(:),   ALLOCATABLE :: ZCCS    ! Cloud water conc. source
-REAL, DIMENSION(:),   ALLOCATABLE :: ZCRS    ! Rain water conc. source
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZNFS    ! available nucleus conc. source
-REAL, DIMENSION(:),   ALLOCATABLE :: ZCIS    ! Pristine ice conc. source
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZNIS    ! Nucleated Ice nuclei conc. source 
-                                             !by Immersion
-REAL, DIMENSION(:),   ALLOCATABLE :: ZZNHS   ! Nucleated Ice nuclei conc. source
-                                             !by Homogeneous freezing
-!
-REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3))   &
-                                  :: ZNHS  ! Nucleated Ice nuclei conc. source
-                                           ! by Homogeneous freezing of haze
-REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3))   &
-                                  :: ZW, ZT ! work arrays
-!
-REAL, DIMENSION(:), ALLOCATABLE &
-                           :: ZRHODREF, & ! RHO Dry REFerence
-                              ZRHODJ,   & ! RHO times Jacobian
-                              ZZT,      & ! Temperature
-                              ZPRES,    & ! Pressure
-                              ZEXNREF,  & ! EXNer Pressure REFerence
-                              ZZW,      & ! Work array
-                              ZZX,      & ! Work array
-                              ZZY,      & ! Work array
-                              ZLSFACT,  & ! L_s/(Pi_ref*C_ph)
-                              ZLVFACT,  & ! L_v/(Pi_ref*C_ph)
-                              ZLBDAC,   & ! Slope parameter of the cloud droplet distr.
-                              ZSI,      & ! Saturation over ice
-                              ZTCELSIUS,&
-                              ZLS,      &
-                              ZPSI1,    &
-                              ZPSI2,    &
-                              ZTAU,     &
-                              ZBFACT,   &
-                              ZW_NU,    &
-                              ZFREECCN, &
-                              ZCCNFROZEN
-!
-INTEGER :: IIB, IIE, IJB, IJE, IKB, IKE   ! Physical domain
-INTEGER :: JL, JMOD_CCN, JMOD_IMM         ! Loop index
-!
-INTEGER :: INEGT                          ! Case number of hom. nucleation
-LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) &
-			  :: GNEGT        ! Test where to compute the hom. nucleation
-INTEGER , DIMENSION(SIZE(GNEGT)) :: I1,I2,I3 ! Used to replace the COUNT
-!
-REAL    :: ZEPS                           ! molar mass ratio
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       1.     PRELIMINARY COMPUTATIONS
-!	        ------------------------
-!
-!
-! Physical domain
-IIB=1+JPHEXT
-IIE=SIZE(PZZ,1) - JPHEXT
-IJB=1+JPHEXT
-IJE=SIZE(PZZ,2) - JPHEXT
-IKB=1+JPVEXT
-IKE=SIZE(PZZ,3) - JPVEXT
-!
-! Temperature
-ZT(:,:,:)  = PTHT(:,:,:) * ( PPABST(:,:,:)/XP00 ) ** (XRD/XCPD)
-!
-IF( OHHONI ) THEN
-   ZNHS(:,:,:) = PNHS(:,:,:)
-ELSE
-   ZNHS(:,:,:) = 0.0 
-END IF
-!
-! Computations only where the temperature is below -35°C
-! PACK variables
-!
-GNEGT(:,:,:) = .FALSE.
-GNEGT(IIB:IIE,IJB:IJE,IKB:IKE) = ZT(IIB:IIE,IJB:IJE,IKB:IKE)<XTT-35.0
-INEGT = COUNTJV( GNEGT(:,:,:),I1(:),I2(:),I3(:))
-!
-IF (INEGT.GT.0) THEN
-
-   ALLOCATE(ZRVT(INEGT)) 
-   ALLOCATE(ZRCT(INEGT)) 
-   ALLOCATE(ZRRT(INEGT)) 
-   ALLOCATE(ZRIT(INEGT)) 
-   ALLOCATE(ZRST(INEGT)) 
-   ALLOCATE(ZRGT(INEGT)) 
-   !
-   ALLOCATE(ZCCT(INEGT))
-   !
-   ALLOCATE(ZRVS(INEGT)) 
-   ALLOCATE(ZRCS(INEGT))
-   ALLOCATE(ZRRS(INEGT))
-   ALLOCATE(ZRIS(INEGT))
-   ALLOCATE(ZRGS(INEGT))
-   !
-   ALLOCATE(ZTHS(INEGT))
-   !
-   ALLOCATE(ZCCS(INEGT))
-   ALLOCATE(ZCRS(INEGT))
-   ALLOCATE(ZCIS(INEGT))
-   !
-   ALLOCATE(ZNFS(INEGT,NMOD_CCN))
-   ALLOCATE(ZNIS(INEGT,NMOD_IMM))
-   ALLOCATE(ZZNHS(INEGT))
-   !
-   ALLOCATE(ZRHODREF(INEGT)) 
-   ALLOCATE(ZZT(INEGT)) 
-   ALLOCATE(ZPRES(INEGT)) 
-   ALLOCATE(ZEXNREF(INEGT))
-   !
-   DO JL=1,INEGT
-      ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL))
-      ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL))
-      ZRRT(JL) = PRRT(I1(JL),I2(JL),I3(JL))
-      ZRIT(JL) = PRIT(I1(JL),I2(JL),I3(JL))
-      ZRST(JL) = PRST(I1(JL),I2(JL),I3(JL))
-      ZRGT(JL) = PRGT(I1(JL),I2(JL),I3(JL))
-      !
-      ZCCT(JL) = PCCT(I1(JL),I2(JL),I3(JL))
-      !
-      ZRVS(JL) = PRVS(I1(JL),I2(JL),I3(JL))
-      ZRCS(JL) = PRCS(I1(JL),I2(JL),I3(JL))
-      ZRRS(JL) = PRRS(I1(JL),I2(JL),I3(JL))
-      ZRIS(JL) = PRIS(I1(JL),I2(JL),I3(JL))
-      ZRGS(JL) = PRGS(I1(JL),I2(JL),I3(JL))
-      !
-      ZTHS(JL) = PTHS(I1(JL),I2(JL),I3(JL))
-      !
-      ZCCS(JL) = PCCS(I1(JL),I2(JL),I3(JL))
-      ZCRS(JL) = PCRS(I1(JL),I2(JL),I3(JL))
-      ZCIS(JL) = PCIS(I1(JL),I2(JL),I3(JL))
-      !
-      DO JMOD_CCN = 1, NMOD_CCN
-         ZNFS(JL,JMOD_CCN) = PNFS(I1(JL),I2(JL),I3(JL),JMOD_CCN)
-      ENDDO
-      DO JMOD_IMM = 1, NMOD_IMM
-         ZNIS(JL,JMOD_IMM) = PNIS(I1(JL),I2(JL),I3(JL),JMOD_IMM)
-      ENDDO
-      ZZNHS(JL) = ZNHS(I1(JL),I2(JL),I3(JL))
-      ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL))
-      ZZT(JL)      = ZT(I1(JL),I2(JL),I3(JL))
-      ZPRES(JL)    = PPABST(I1(JL),I2(JL),I3(JL))
-      ZEXNREF(JL)  = PEXNREF(I1(JL),I2(JL),I3(JL))
-   ENDDO
-!
-! PACK : done
-! Prepare computations
-!
-   ALLOCATE( ZLSFACT    (INEGT) )
-   ALLOCATE( ZLVFACT    (INEGT) )
-   ALLOCATE( ZSI        (INEGT) )
-   ALLOCATE( ZTCELSIUS  (INEGT) )
-   ALLOCATE( ZLBDAC     (INEGT) )
-!
-   ALLOCATE( ZZW (INEGT) ) ; ZZW(:) = 0.0
-   ALLOCATE( ZZX (INEGT) ) ; ZZX(:) = 0.0
-   ALLOCATE( ZZY (INEGT) ) ; ZZY(:) = 0.0
-!
-   ZTCELSIUS(:) = ZZT(:)-XTT                                    ! T [°C]
-   ZZW(:)  = ZEXNREF(:)*( XCPD+XCPV*ZRVT(:)+XCL*(ZRCT(:)+ZRRT(:)) &
-        +XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) )
-   ZLSFACT(:) = (XLSTT+(XCPV-XCI)*ZTCELSIUS(:))/ZZW(:)          ! L_s/(Pi_ref*C_ph)
-   ZLVFACT(:) = (XLVTT+(XCPV-XCL)*ZTCELSIUS(:))/ZZW(:)          ! L_v/(Pi_ref*C_ph)
-!
-   ZZW(:)  = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) ) ! es_i
-   ZSI(:)  = ZRVT(:)*(ZPRES(:)-ZZW(:))/((XMV/XMD)*ZZW(:))       ! Saturation over ice
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       2.     Haze homogeneous freezing
-!	        ------------------------
-!
-!
-!  Compute the haze homogeneous nucleation source: RHHONI
-!
-   IF( OHHONI .AND. NMOD_CCN.GT.0 ) THEN
-
-! Sum of the available CCN
-      ALLOCATE( ZFREECCN(INEGT) )
-      ALLOCATE( ZCCNFROZEN(INEGT) )
-      ZFREECCN(:)=0.
-      ZCCNFROZEN(:)=0.
-      DO JMOD_CCN = 1, NMOD_CCN
-         ZFREECCN(:) = ZFREECCN(:) + ZNFS(:,JMOD_CCN)
-      END DO
-!
-      ALLOCATE(ZW_NU(INEGT))
-      DO JL=1,INEGT
-         ZW_NU(JL) = PW_NU(I1(JL),I2(JL),I3(JL))
-      END DO
-!
-      ZZW(:)  = 0.0
-      ZZX(:)  = 0.0
-      ZEPS    = XMV / XMD
-      ZZY(:)  = XCRITSAT1_HONH -                              &  ! Critical Sat.
-              (MIN( XTMAX_HONH,MAX( XTMIN_HONH,ZZT(:) ) )/XCRITSAT2_HONH)
-!
-      ALLOCATE(ZLS(INEGT))
-      ALLOCATE(ZPSI1(INEGT))
-      ALLOCATE(ZPSI2(INEGT))
-      ALLOCATE(ZTAU(INEGT))
-      ALLOCATE(ZBFACT(INEGT))
-!
-      WHERE( (ZZT(:)<XTT-35.0) .AND. (ZSI(:)>ZZY(:)) )
-            ZLS(:)   = XLSTT+(XCPV-XCI)*ZTCELSIUS(:)          ! Ls
-!
-            ZPSI1(:) = ZZY(:) * (XG/(XRD*ZZT(:)))*(ZEPS*ZLS(:)/(XCPD*ZZT(:))-1.)
-!                                                         ! Psi1 (a1*Scr in KL01)
-! BV correction PSI2 enlever 1/ZEPS ?
-!            ZPSI2(:) = ZSI(:) * (1.0/ZEPS+1.0/ZRVT(:)) +                           &
-            ZPSI2(:) = ZSI(:) * (1.0/ZRVT(:)) +                           &
-                 ZZY(:) * ((ZLS(:)/ZZT(:))**2)/(XCPD*XRV) 
-!                                                         ! Psi2 (a2+a3*Scr in KL01)
-            ZTAU(:) = 1.0 / ( MAX( XC1_HONH,XC1_HONH*(XC2_HONH-XC3_HONH*ZZT(:)) ) *&
-                 ABS( (XDLNJODT1_HONH - XDLNJODT2_HONH*ZZT(:))       *             &
-                 ((ZPRES(:)/XP00)**(XRD/XCPD))*ZTHS(:) ) )
-!
-            ZBFACT(:) = (XRHOI_HONH/ZRHODREF(:)) * (ZSI(:)/(ZZY(:)-1.0))           &
-! BV correction ZBFACT enlever 1/ZEPS ?
-!                 * (1.0/ZRVT(:)+1.0/ZEPS)                                          &
-                 * (1.0/ZRVT(:))                                          &
-                 / (XCOEF_DIFVAP_HONH*(ZZT(:)**XCEXP_DIFVAP_HONH /ZPRES(:)))
-!
-! BV correction ZZX rho_i{-1} ?
-!            ZZX(:) = MAX( MIN( XRHOI_HONH*ZBFACT(:)**1.5 * (ZPSI1(:)/ZPSI2(:))     &
-            ZZX(:) = MAX( MIN( (1/XRHOI_HONH)*ZBFACT(:)**1.5 * (ZPSI1(:)/ZPSI2(:))     &
-! BV correction ZZX PTSTEP wrong place ?
-!                 * (ZW_NU(:)/SQRT(ZTAU(:))), ZNFS(:,JMOD_CCN) )/PTSTEP , 0.)
-                 * (ZW_NU(:)/SQRT(ZTAU(:)))/PTSTEP , ZFREECCN(:) ) , 0.)
-!
-            ZZW(:) = MIN( XRCOEF_HONH*ZZX(:)*(ZTAU(:)/ZBFACT(:))**1.5 , ZRVS(:) )
-      END WHERE
-!
-! Apply the changes to ZNFS,
-    DO JMOD_CCN = 1, NMOD_CCN
-        WHERE(ZFREECCN(:)>1.)
-            ZCCNFROZEN(:) = ZZX(:) * ZNFS(:,JMOD_CCN)/ZFREECCN(:)
-            ZNFS(:,JMOD_CCN) = ZNFS(:,JMOD_CCN) - ZCCNFROZEN(:)
-        END WHERE
-        ZW(:,:,:) = PNFS(:,:,:,JMOD_CCN)
-        PNFS(:,:,:,JMOD_CCN)=UNPACK( ZNFS(:,JMOD_CCN), MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:))
-    END DO
-      ZZNHS(:)    = ZZNHS(:) + ZZX(:)
-      ZNHS(:,:,:) = UNPACK( ZZNHS(:), MASK=GNEGT(:,:,:),FIELD=0.0)
-      PNHS(:,:,:) = ZNHS(:,:,:)
-!
-      DEALLOCATE(ZFREECCN)
-      DEALLOCATE(ZCCNFROZEN)
-      DEALLOCATE(ZLS)
-      DEALLOCATE(ZPSI1)
-      DEALLOCATE(ZPSI2)
-      DEALLOCATE(ZTAU)
-      DEALLOCATE(ZBFACT)
-      DEALLOCATE(ZW_NU)
-!
-      ZRVS(:) = ZRVS(:) - ZZW(:)
-      ZRIS(:) = ZRIS(:) + ZZW(:)
-      ZTHS(:) = ZTHS(:) + ZZW(:) * (ZLSFACT(:)-ZLVFACT(:)) ! f(L_s*(RHHONI))
-      ZCIS(:) = ZCIS(:) + ZZX(:)
-!
-   END IF ! OHHONI
-!
-! Budget storage
-   IF (NBUMOD==KMI .AND. LBU_ENABLE .AND. OHHONI) THEN
-     IF (LBUDGET_TH) CALL BUDGET_DDH (                                                 &
-                     UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                                 4,'HONH_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_RV) CALL BUDGET_DDH (                                                 &
-                     UNPACK(ZRVS(:),MASK=GNEGT(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),&
-                                                                 6,'HONH_BU_RRV',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_RI) CALL BUDGET_DDH (                                                 &
-                     UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),&
-                                                                 9,'HONH_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_SV) THEN
-       CALL BUDGET_DDH ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),&
-                                                          12+NSV_LIMA_NI,'HONH_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! RCI
-       IF (NMOD_CCN.GE.1) THEN
-          DO JL=1, NMOD_CCN
-             CALL BUDGET_DDH ( UNPACK(ZNFS(:,JL),MASK=GNEGT(:,:,:),FIELD=PNFS(:,:,:,JL))*PRHODJ(:,:,:),&
-                  12+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV',YDDDH, YDLDDH, YDMDDH) 
-          END DO
-          CALL BUDGET_DDH ( UNPACK(ZZNHS(:),MASK=GNEGT(:,:,:),FIELD=ZNHS(:,:,:))*PRHODJ(:,:,:),&
-                  12+NSV_LIMA_HOM_HAZE,'HONH_BU_RSV',YDDDH, YDLDDH, YDMDDH) 
-
-       END IF
-     END IF
-   END IF
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       3.     Cloud droplets homogeneous freezing
-!	        -----------------------------------
-!
-!
-!  Compute the droplet homogeneous nucleation source: RCHONI
-!                 -> Pruppacher(1995)
-!
-   ZZW(:) = 0.0
-   ZZX(:) = 0.0
-   WHERE( (ZZT(:)<XTT-35.0) .AND. (ZCCT(:)>XCTMIN(2)) .AND. (ZRCT(:)>XRTMIN(2)) )
-      ZLBDAC(:) = XLBC*ZCCT(:) / (ZRCT(:)) ! Lambda_c**3
-      ZZX(:) = 1.0 / ( 1.0 + (XC_HONC/ZLBDAC(:))*PTSTEP*                      &
-           EXP( XTEXP1_HONC + ZTCELSIUS(:)*(                        &
-           XTEXP2_HONC + ZTCELSIUS(:)*(                        &
-           XTEXP3_HONC + ZTCELSIUS(:)*(                        &
-           XTEXP4_HONC + ZTCELSIUS(:)*XTEXP5_HONC))) ) )**XNUC
-      ZZW(:) = ZCCS(:) * (1.0 - ZZX(:))                                  ! CCHONI
-!                                                                       
-      ZCCS(:) = ZCCS(:) - ZZW(:)
-      ZCIS(:) = ZCIS(:) + ZZW(:)
-!
-      ZZW(:) = ZRCS(:) * (1.0 - ZZX(:))                                  ! RCHONI
-!                                                                       
-      ZRCS(:) = ZRCS(:) - ZZW(:)
-      ZRIS(:) = ZRIS(:) + ZZW(:)
-      ZTHS(:) = ZTHS(:) + ZZW(:) * (ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCHONI))
-   END WHERE
-!
-! Budget storage
-   IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-     IF (LBUDGET_TH) CALL BUDGET_DDH (                                              &
-                     UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                                 4,'HONC_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_RC) CALL BUDGET_DDH (                                              &
-                     UNPACK(ZRCS(:),MASK=GNEGT(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:),&
-                                                                 7,'HONC_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_RI) CALL BUDGET_DDH (                                              &
-                     UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),&
-                                                                 9,'HONC_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_SV) THEN
-       CALL BUDGET_DDH ( UNPACK(ZCCS(:),MASK=GNEGT(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:),&
-                                                          12+NSV_LIMA_NC,'HONC_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-       CALL BUDGET_DDH ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),&
-                                                          12+NSV_LIMA_NI,'HONC_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-     END IF
-   END IF
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       4.     Rain drops homogeneous freezing
-!	        -------------------------------
-!
-!
-!  Compute the drop homogeneous nucleation source: RRHONG
-!
-   ZZW(:) = 0.0
-   WHERE( (ZZT(:)<XTT-35.0) .AND. (ZRRS(:)>XRTMIN(3)/PTSTEP) )
-      ZZW(:)  = ZRRS(:) ! Instantaneous freezing of the raindrops
-      ZRRS(:) = ZRRS(:) - ZZW(:)
-      ZRGS(:) = ZRGS(:) + ZZW(:)
-      ZTHS(:) = ZTHS(:) + ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RRHONG))
-!
-      ZCRS(:) = 0.0     ! No more raindrops when T<-35 C
-   ENDWHERE
-!
-! Budget storage
-   IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-     IF (LBUDGET_TH) CALL BUDGET_DDH (                                                 &
-                     UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                                 4,'HONR_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_RR) CALL BUDGET_DDH (                                                 &
-                     UNPACK(ZRRS(:),MASK=GNEGT(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:),&
-                                                                 8,'HONR_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_RG) CALL BUDGET_DDH (                                                 &
-                     UNPACK(ZRGS(:),MASK=GNEGT(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:),&
-                                                                11,'HONR_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_SV) THEN
-       CALL BUDGET_DDH ( UNPACK(ZCRS(:),MASK=GNEGT(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:),&
-                                                          12+NSV_LIMA_NR,'HONR_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-     END IF
-   END IF
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       4.     Unpack variables, clean
-!	        -----------------------
-!
-!
-! End of homogeneous nucleation processes
-!
-   ZW(:,:,:)   = PRVS(:,:,:)
-   PRVS(:,:,:) = UNPACK( ZRVS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:)   = PRCS(:,:,:)
-   PRCS(:,:,:) = UNPACK( ZRCS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:)   = PRRS(:,:,:)
-   PRRS(:,:,:) = UNPACK( ZRRS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:)   = PRIS(:,:,:)
-   PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:)   = PRGS(:,:,:)
-   PRGS(:,:,:) = UNPACK( ZRGS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:)   = PTHS(:,:,:)
-   PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:)   = PCCS(:,:,:)
-   PCCS(:,:,:) = UNPACK( ZCCS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:)   = PCRS(:,:,:)
-   PCRS(:,:,:) = UNPACK( ZCRS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:)   = PCIS(:,:,:)
-   PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) )
-!   
-   DEALLOCATE(ZRVT) 
-   DEALLOCATE(ZRCT) 
-   DEALLOCATE(ZRRT) 
-   DEALLOCATE(ZRIT) 
-   DEALLOCATE(ZRST) 
-   DEALLOCATE(ZRGT) 
-!
-   DEALLOCATE(ZCCT)
-!
-   DEALLOCATE(ZRVS) 
-   DEALLOCATE(ZRCS)
-   DEALLOCATE(ZRRS)
-   DEALLOCATE(ZRIS)
-   DEALLOCATE(ZRGS)
-!
-   DEALLOCATE(ZTHS)
-!
-   DEALLOCATE(ZCCS)
-   DEALLOCATE(ZCRS)
-   DEALLOCATE(ZCIS)
-!
-   DEALLOCATE(ZNFS)
-   DEALLOCATE(ZNIS)
-   DEALLOCATE(ZZNHS)
-!
-   DEALLOCATE(ZRHODREF) 
-   DEALLOCATE(ZZT) 
-   DEALLOCATE(ZPRES) 
-   DEALLOCATE(ZEXNREF)
-!
-   DEALLOCATE(ZLSFACT)
-   DEALLOCATE(ZLVFACT)
-   DEALLOCATE(ZSI)
-   DEALLOCATE(ZTCELSIUS)
-   DEALLOCATE(ZLBDAC)
-!
-   DEALLOCATE(ZZW) 
-   DEALLOCATE(ZZX)
-   DEALLOCATE(ZZY)
-!
-ELSE
-!
-! Advance the budget calls
-!
-
-   IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-     IF ( OHHONI )  THEN
-        IF (LBUDGET_TH)  CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HONH_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-        IF (LBUDGET_RV)  CALL BUDGET_DDH (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HONH_BU_RRV',YDDDH, YDLDDH, YDMDDH)
-        IF (LBUDGET_RI)  CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HONH_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-        IF (LBUDGET_SV) THEN 
-          CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HONH_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-          IF (NMOD_CCN.GE.1) THEN
-             DO JL=1, NMOD_CCN
-                CALL BUDGET_DDH ( UNPACK(ZNFS(:,JL),MASK=GNEGT(:,:,:),FIELD=PNFS(:,:,:,JL))*PRHODJ(:,:,:),&
-                            & 12+NSV_LIMA_CCN_FREE+JL-1,'HONH_BU_RSV',YDDDH, YDLDDH, YDMDDH) 
-             END DO
-             CALL BUDGET_DDH (ZNHS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_HOM_HAZE,'HONH_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-          END IF     
-        END IF
-     END IF 
-     IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HONC_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HONC_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HONC_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_SV) THEN     
-        CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HONC_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-        CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HONC_BU_RSV',YDDDH, YDLDDH, YDMDDH) 
-     END IF
-     IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HONR_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'HONR_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'HONR_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_SV) CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'HONR_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-
-
-     
-
-     
-   END IF
-!
-END IF ! INEGT>0
-!
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_COLD_HOM_NUCL
diff --git a/src/arome/micro/lima_cold_sedimentation.F90 b/src/arome/micro/lima_cold_sedimentation.F90
deleted file mode 100644
index 635a0d931236226792af650bdbd3464f8e45ca3d..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_cold_sedimentation.F90
+++ /dev/null
@@ -1,383 +0,0 @@
-!      ###################################
-       MODULE MODI_LIMA_COLD_SEDIMENTATION
-!      ###################################
-!
-INTERFACE
-      SUBROUTINE LIMA_COLD_SEDIMENTATION (OSEDI, KSPLITG, PTSTEP, KMI,     &
-                                          HFMFILE, HLUOUT, OCLOSE_OUT,     &
-                                          PZZ, PRHODJ, PRHODREF,           &
-                                          PRIT, PCIT,                      &
-                                          PRIS, PRSS, PRGS, PRHS, PCIS,    &
-                                          PINPRS, PINPRG, PINPRH )
-!
-LOGICAL,                  INTENT(IN)    :: OSEDI      ! switch to activate the 
-                                                      ! cloud ice sedimentation
-INTEGER,                  INTENT(IN)    :: KSPLITG    ! Number of small time step 
-                                                      ! for ice sedimendation
-REAL,                     INTENT(IN)    :: PTSTEP     ! Time step          
-INTEGER,                  INTENT(IN)    :: KMI        ! Model index 
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE    ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)    :: HLUOUT     ! Output-listing name for
-                                                      ! model n
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                      ! the FM file output
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ        ! Height (z)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ     ! Dry density * Jacobian (Budgets)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF   ! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRIT       ! Cloud ice m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCIT       ! Ice crystal C. at t
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRIS       ! Pristine ice m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRSS       ! Snow/aggregate m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRGS       ! Graupel m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRHS       ! Hail m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCIS       ! Ice crystal C. source
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRS  ! Snow instant precip
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRG  ! Graupel instant precip
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRH  ! Hail instant precip
-
-!
-      END SUBROUTINE LIMA_COLD_SEDIMENTATION
-END INTERFACE
-END MODULE MODI_LIMA_COLD_SEDIMENTATION
-!
-!
-!     ######################################################################
-      SUBROUTINE LIMA_COLD_SEDIMENTATION (OSEDI, KSPLITG, PTSTEP, KMI,     &
-                                          HFMFILE, HLUOUT, OCLOSE_OUT,     &
-                                          PZZ, PRHODJ, PRHODREF,           &
-                                          PRIT, PCIT,                      &
-                                          PRIS, PRSS, PRGS, PRHS, PCIS,    &
-                                          PINPRS,PINPRG,PINPRH                 )
-!     ######################################################################
-!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the sediimentation
-!!    of primary ice, snow and graupel.
-!!
-!!    METHOD
-!!    ------
-!!      The sedimentation rates are computed with a time spliting technique: 
-!!    an upstream scheme, written as a difference of non-advective fluxes. 
-!!    This source term is added to the next coming time step (split-implicit 
-!!    process).
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy *  jan. 2014   add budgets
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_PARAM_LIMA_COLD,  ONLY : XLBEXI, XLBI, XDI,                 &
-                                  XFSEDRI, XFSEDCI, XFSEDS, XEXSEDS
-USE MODD_PARAM_LIMA_MIXED, ONLY : XFSEDG, XEXSEDG, XFSEDH, XEXSEDH
-USE MODD_PARAM_LIMA,       ONLY : XCEXVT, XRTMIN, XCTMIN
-USE MODD_CST,              ONLY : XRHOLW
-USE MODD_PARAMETERS,       ONLY : JPHEXT, JPVEXT
-USE MODI_LIMA_FUNCTIONS,   ONLY : COUNTJV
-!
-USE MODD_NSV
-
-IMPLICIT NONE
-
-!
-!*       0.1   Declarations of dummy arguments :
-!
-LOGICAL,                  INTENT(IN)    :: OSEDI      ! switch to activate the 
-                                                      ! cloud ice sedimentation
-INTEGER,                  INTENT(IN)    :: KSPLITG    ! Number of small time step 
-                                                      ! for ice sedimendation
-REAL,                     INTENT(IN)    :: PTSTEP     ! Time step          
-INTEGER,                  INTENT(IN)    :: KMI        ! Model index 
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE    ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)    :: HLUOUT     ! Output-listing name for
-                                                      ! model n
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                      ! the FM file output
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ        ! Height (z)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ     ! Dry density * Jacobian (Budgets)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF   ! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRIT       ! Cloud ice m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCIT       ! Ice crystal C. at t
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRIS       ! Pristine ice m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRSS       ! Snow/aggregate m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRGS       ! Graupel m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRHS       ! Hail m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCIS       ! Ice crystal C. source
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRS  ! Snow instant precip
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRG  ! Graupel instant precip
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRH  ! Hail instant precip
-
-!
-!*       0.2   Declarations of local variables :
-!
-INTEGER :: JK, JL, JN                     ! Loop index
-INTEGER :: IIB, IIE, IJB, IJE, IKB, IKE   ! Physical domain
-INTEGER :: ISEDIM                         ! Case number of sedimentation
-!
-LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) &
-                           :: GSEDIM      ! Test where to compute the SED processes
-REAL,    DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) &
-                           :: ZW          ! Work array
-REAL,    DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)+1) &
-                           :: ZWSEDR,   & ! Sedimentation of MMR
-                              ZWSEDC      ! Sedimentation of number conc.
-!
-REAL, DIMENSION(:), ALLOCATABLE         &
-                           :: ZRIS,     & ! Pristine ice m.r. source
-                              ZCIS,     & ! Pristine ice conc. source
-                              ZRSS,     & ! Snow/aggregate m.r. source
-                              ZRGS,     & ! Graupel/hail m.r. source
-                              ZRHS,     & ! Graupel/hail m.r. source
-                              ZRIT,     & ! Pristine ice m.r. at t
-                              ZCIT,     & ! Pristine ice conc. at t
-                              ZRHODREF, & ! RHO Dry REFerence
-                              ZRHODJ,   & ! RHO times Jacobian
-                              ZZW,      & ! Work array
-                              ZZX,      & ! Work array
-                              ZZY,      & ! Work array
-                              ZLBDAI,   & ! Slope parameter of the ice crystal distr.
-                              ZRTMIN 
-!
-INTEGER , DIMENSION(SIZE(PRHODREF)) :: I1,I2,I3 ! Indexes for PACK replacement
-!
-REAL    :: ZTSPLITG                       ! Small time step for rain sedimentation
-!
-INTEGER :: IKMAX 
-!
-!!!!!!!!!!! Entiers pour niveaux inversés dans AROME !!!!!!!!!!!!!!!!!!!!!!!!!!!
-INTEGER :: IBOTTOM, INVLVL
-!
-!-------------------------------------------------------------------------------
-!
-! Physical domain
-!
-IIB=1+JPHEXT
-IIE=SIZE(PZZ,1) - JPHEXT
-IJB=1+JPHEXT
-IJE=SIZE(PZZ,2) - JPHEXT
-IKB=1+JPVEXT
-IKE=SIZE(PZZ,3) - JPVEXT
-!
-!!!!!!!!!!! Entiers pour niveaux inversés dans AROME !!!!!!!!!!!!!!!!!!!!!!!!!!!
-IBOTTOM=IKE
-INVLVL=-1
-!
-ZWSEDR(:,:,:)=0.
-ZWSEDC(:,:,:)=0.
-IKMAX=SIZE(PRHODREF,3)
-!
-! Time splitting and ZRTMIN
-!
-ALLOCATE(ZRTMIN(SIZE(XRTMIN)))
-ZRTMIN(:) = XRTMIN(:) / PTSTEP
-!
-ZTSPLITG= PTSTEP / FLOAT(KSPLITG)
-!
-PINPRS(:,:) = 0.
-PINPRG(:,:) = 0.
-PINPRH(:,:) = 0.
-!
-! ################################
-! Compute the sedimentation fluxes
-! ################################
-!
-DO JN = 1 , KSPLITG 
-  ! Computation only where enough ice, snow, graupel or hail
-   GSEDIM(:,:,:) = .FALSE.
-   GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) = PRSS(IIB:IIE,IJB:IJE,IKB:IKE)>ZRTMIN(5) &
-                                .OR. PRGS(IIB:IIE,IJB:IJE,IKB:IKE)>ZRTMIN(6) &
-                                .OR. PRHS(IIB:IIE,IJB:IJE,IKB:IKE)>ZRTMIN(7)
-   IF( OSEDI ) THEN
-      GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) = GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) &
-                                .OR. PRIS(IIB:IIE,IJB:IJE,IKB:IKE)>ZRTMIN(4)
-   END IF
-!
-   ISEDIM = COUNTJV( GSEDIM(:,:,:),I1(:),I2(:),I3(:))
-   IF( ISEDIM >= 1 ) THEN
-!
-      IF( JN==1 ) THEN
-         IF( OSEDI ) THEN
-            PCIS(:,:,:) = PCIS(:,:,:) * PTSTEP
-            PRIS(:,:,:) = PRIS(:,:,:) * PTSTEP
-         END IF
-         PRSS(:,:,:) = PRSS(:,:,:) * PTSTEP
-         PRGS(:,:,:) = PRGS(:,:,:) * PTSTEP
-         PRHS(:,:,:) = PRHS(:,:,:) * PTSTEP
-         DO JK = IKB , IKE
-!Dans AROME, PZZ = épaisseur de la couche
-!            ZW(:,:,JK)=ZTSPLITG/(PZZ(:,:,JK+1)-PZZ(:,:,JK))
-            ZW(:,:,JK)=ZTSPLITG/(PZZ(:,:,JK))
-         END DO
-      END IF
-!
-      ALLOCATE(ZRHODREF(ISEDIM))
-      DO JL = 1,ISEDIM
-         ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL))
-      END DO
-!
-      ALLOCATE(ZZW(ISEDIM)) ; ZZW(:) = 0.0
-      ALLOCATE(ZZX(ISEDIM)) ; ZZX(:) = 0.0
-      ALLOCATE(ZZY(ISEDIM)) ; ZZY(:) = 0.0
-!
-!*       2.21   for pristine ice
-!
-      IF( OSEDI.AND.MAXVAL(PRIS(:,:,:))>ZRTMIN(4) ) THEN
-         ALLOCATE(ZRIS(ISEDIM))
-         ALLOCATE(ZCIS(ISEDIM))
-         ALLOCATE(ZRIT(ISEDIM))
-         ALLOCATE(ZCIT(ISEDIM))
-         ALLOCATE(ZLBDAI(ISEDIM))
-         DO JL = 1,ISEDIM
-            ZRIS(JL) = PRIS(I1(JL),I2(JL),I3(JL))
-            ZCIS(JL) = PCIS(I1(JL),I2(JL),I3(JL))
-            ZRIT(JL) = PRIT(I1(JL),I2(JL),I3(JL))
-            ZCIT(JL) = PCIT(I1(JL),I2(JL),I3(JL))
-         END DO
-         ZLBDAI(:)  = 1.E10
-         WHERE (ZRIT(:)>XRTMIN(4) .AND. ZCIT(:)>XCTMIN(4))
-            ZLBDAI(:) = ( XLBI*ZCIT(:) / ZRIT(:) )**XLBEXI
-         END WHERE
-         WHERE( ZRIS(:)>ZRTMIN(4) )
-            ZZY(:) = ZRHODREF(:)**(-XCEXVT) * ZLBDAI(:)**(-XDI)
-            ZZW(:) = XFSEDRI * ZRIS(:) * ZZY(:) * ZRHODREF(:)
-            ZZX(:) = XFSEDCI * ZCIS(:) * ZZY(:) * ZRHODREF(:)
-         END WHERE
-         ZWSEDR(:,:,1:IKMAX) = UNPACK( ZZW(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
-         ZWSEDC(:,:,1:IKMAX) = UNPACK( ZZX(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
-         DO JK = IKB+1 , IKE
-            PRIS(:,:,JK) = PRIS(:,:,JK) + ZW(:,:,JK)*    &
-                 (ZWSEDR(:,:,JK+1*INVLVL)-ZWSEDR(:,:,JK))/PRHODREF(:,:,JK)
-            PCIS(:,:,JK) = PCIS(:,:,JK) + ZW(:,:,JK)*    &
-                 (ZWSEDC(:,:,JK+1*INVLVL)-ZWSEDC(:,:,JK))/PRHODREF(:,:,JK)
-         END DO
-            PRIS(:,:,1) = PRIS(:,:,1) + ZW(:,:,1)*    &
-                 (0.-ZWSEDR(:,:,1))/PRHODREF(:,:,1)
-            PCIS(:,:,1) = PCIS(:,:,1) + ZW(:,:,1)*    &
-                 (0.-ZWSEDC(:,:,1))/PRHODREF(:,:,1)
-         DEALLOCATE(ZRIS)
-         DEALLOCATE(ZCIS)
-         DEALLOCATE(ZRIT)
-         DEALLOCATE(ZCIT)
-         DEALLOCATE(ZLBDAI)
-      END IF
-!
-!*       2.22   for aggregates
-!
-      ZZW(:) = 0.
-      IF( MAXVAL(PRSS(:,:,:))>ZRTMIN(5) ) THEN
-         ALLOCATE(ZRSS(ISEDIM)) 
-         DO JL = 1,ISEDIM
-            ZRSS(JL) = PRSS(I1(JL),I2(JL),I3(JL))
-         END DO
-         WHERE( ZRSS(:)>ZRTMIN(5) )
-! Correction BVIE ZRHODREF
-!            ZZW(:) = XFSEDS * ZRSS(:)**XEXSEDS * ZRHODREF(:)**(XEXSEDS-XCEXVT)
-            ZZW(:) = XFSEDS * ZRSS(:)**XEXSEDS * ZRHODREF(:)**(-XCEXVT) * ZRHODREF(:)
-         END WHERE
-         ZWSEDR(:,:,1:IKMAX) = UNPACK( ZZW(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
-         DO JK = IKB+1 , IKE
-            PRSS(:,:,JK) = PRSS(:,:,JK) + ZW(:,:,JK)* &
-                 (ZWSEDR(:,:,JK+1*INVLVL)-ZWSEDR(:,:,JK))/PRHODREF(:,:,JK)
-         END DO
-            PRSS(:,:,1) = PRSS(:,:,1) + ZW(:,:,1)* &
-                 (0.-ZWSEDR(:,:,1))/PRHODREF(:,:,1)
-         DEALLOCATE(ZRSS)
-      ELSE
-         ZWSEDR(:,:,IBOTTOM) = 0.0
-      END IF
-!    
-      PINPRS(:,:) = PINPRS(:,:) + ZWSEDR(:,:,IBOTTOM)/XRHOLW/KSPLITG                          ! in m/s
-!
-!*       2.23   for graupeln
-!
-      ZZW(:) = 0.
-      IF( MAXVAL(PRGS(:,:,:))>ZRTMIN(6) ) THEN
-         ALLOCATE(ZRGS(ISEDIM)) 
-         DO JL = 1,ISEDIM
-            ZRGS(JL) = PRGS(I1(JL),I2(JL),I3(JL))
-         END DO
-         WHERE( ZRGS(:)>ZRTMIN(6) )
-! Correction BVIE ZRHODREF
-!            ZZW(:) = XFSEDG * ZRGS(:)**XEXSEDG * ZRHODREF(:)**(XEXSEDG-XCEXVT)
-            ZZW(:) = XFSEDG * ZRGS(:)**XEXSEDG * ZRHODREF(:)**(-XCEXVT) * ZRHODREF(:)
-         END WHERE
-         ZWSEDR(:,:,1:IKMAX) = UNPACK( ZZW(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
-         DO JK = IKB+1 , IKE
-            PRGS(:,:,JK) = PRGS(:,:,JK) + ZW(:,:,JK)* &
-                 (ZWSEDR(:,:,JK+1*INVLVL)-ZWSEDR(:,:,JK))/PRHODREF(:,:,JK)
-         END DO
-            PRGS(:,:,1) = PRGS(:,:,1) + ZW(:,:,1)* &
-                 (0.-ZWSEDR(:,:,1))/PRHODREF(:,:,1)
-         DEALLOCATE(ZRGS)
-      ELSE
-         ZWSEDR(:,:,IBOTTOM) = 0.0
-      END IF
-!    
-      PINPRG(:,:) = PINPRG(:,:) + ZWSEDR(:,:,IBOTTOM)/XRHOLW/KSPLITG                        ! in m/s
-!
-!*       2.23   for hail
-!
-      ZZW(:) = 0.
-      IF( MAXVAL(PRHS(:,:,:))>ZRTMIN(7) ) THEN
-         ALLOCATE(ZRHS(ISEDIM)) 
-         DO JL = 1,ISEDIM
-            ZRHS(JL) = PRHS(I1(JL),I2(JL),I3(JL))
-         END DO
-         WHERE( ZRHS(:)>ZRTMIN(7) )
-! Correction BVIE ZRHODREF
-!            ZZW(:) = XFSEDH * ZRHS(:)**XEXSEDH * ZRHODREF(:)**(XEXSEDH-XCEXVT)
-            ZZW(:) = XFSEDH * ZRHS(:)**XEXSEDH * ZRHODREF(:)**(-XCEXVT) * ZRHODREF(:)
-         END WHERE
-         ZWSEDR(:,:,1:IKMAX) = UNPACK( ZZW(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
-         DO JK = IKB+1 , IKE
-            PRHS(:,:,JK) = PRHS(:,:,JK) + ZW(:,:,JK)* &
-                 (ZWSEDR(:,:,JK+1*INVLVL)-ZWSEDR(:,:,JK))/PRHODREF(:,:,JK)
-         END DO
-            PRHS(:,:,1) = PRHS(:,:,1) + ZW(:,:,1)* &
-                 (0.-ZWSEDR(:,:,1))/PRHODREF(:,:,1)
-         DEALLOCATE(ZRHS)
-      ELSE
-         ZWSEDR(:,:,IBOTTOM) = 0.0
-      END IF
-!    
-      PINPRH(:,:) = PINPRH(:,:) + ZWSEDR(:,:,IBOTTOM)/XRHOLW/KSPLITG                        ! in m/s
-!
-!*       2.24 End of sedimentation  
-!
-      DEALLOCATE(ZRHODREF)
-      DEALLOCATE(ZZW)
-      DEALLOCATE(ZZX)
-      DEALLOCATE(ZZY)
-      IF( JN==KSPLITG ) THEN
-         IF( OSEDI ) THEN
-            PRIS(:,:,:) = PRIS(:,:,:) / PTSTEP
-            PCIS(:,:,:) = PCIS(:,:,:) / PTSTEP
-         END IF
-         PRSS(:,:,:) = PRSS(:,:,:) / PTSTEP
-         PRGS(:,:,:) = PRGS(:,:,:) / PTSTEP
-         PRHS(:,:,:) = PRHS(:,:,:) / PTSTEP
-      END IF
-   END IF
-END DO
-!
-DEALLOCATE(ZRTMIN)
-!
-END SUBROUTINE LIMA_COLD_SEDIMENTATION
-!
-!-------------------------------------------------------------------------------
diff --git a/src/arome/micro/lima_cold_slow_processes.F90 b/src/arome/micro/lima_cold_slow_processes.F90
deleted file mode 100644
index a342f7d220a33f5a136080653c7c8c55fa104a13..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_cold_slow_processes.F90
+++ /dev/null
@@ -1,583 +0,0 @@
-!      #####################
-       MODULE MODI_LIMA_COLD_SLOW_PROCESSES
-!      #####################
-!
-INTERFACE
-      SUBROUTINE LIMA_COLD_SLOW_PROCESSES (PTSTEP, KMI, HFMFILE, HLUOUT,       &
-                                           OCLOSE_OUT, PZZ, PRHODJ,            &
-                                           PRHODREF, PEXNREF, PPABST,          &
-                                           PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
-                                           PTHS, PRVS, PRIS, PRSS,             &
-                                           PCIT, PCIS, &
-                            YDDDH, YDLDDH, YDMDDH                          )
-!
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-REAL,                     INTENT(IN)    :: PTSTEP  ! Time step          
-INTEGER,                  INTENT(IN)    :: KMI     ! Model index 
-!
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)    :: HLUOUT  ! Output-listing name for
-                                                   ! model n
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                   ! the tput FM fileoutp
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ     ! Height (z)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ  ! Dry density * Jacobian
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF ! Reference Exner function
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST  ! abs. pressure at time t
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT    ! Theta at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRVT    ! Water vapor m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT    ! Rain water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRIT    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRGT    ! Graupel m.r. at t 
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS    ! Theta source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRVS    ! Water vapor m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRIS    ! Pristine ice m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRSS    ! Snow/aggregate m.r. source
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCIT    ! Ice crystal C. at t
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCIS    ! Ice crystal C. source
-!
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-
-END SUBROUTINE LIMA_COLD_SLOW_PROCESSES
-END INTERFACE
-END MODULE MODI_LIMA_COLD_SLOW_PROCESSES
-!
-!     ######################################################################
-      SUBROUTINE LIMA_COLD_SLOW_PROCESSES (PTSTEP, KMI, HFMFILE, HLUOUT,       &
-                                           OCLOSE_OUT, PZZ, PRHODJ,            &
-                                           PRHODREF, PEXNREF, PPABST,          &
-                                           PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
-                                           PTHS, PRVS, PRIS, PRSS,             &
-                                           PCIT, PCIS, &
-                            YDDDH, YDLDDH, YDMDDH                          )
-!     ######################################################################
-!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the microphysical sources
-!!    for slow cold processes :
-!!      - conversion of snow to ice
-!!      - deposition of vapor on snow
-!!      - conversion of ice to snow (Harrington 1995)
-!!      - aggregation of ice on snow
-!!
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy *  jan. 2014   add budgets
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_PARAMETERS,      ONLY : JPHEXT, JPVEXT
-USE MODD_CST,             ONLY : XP00, XRD, XRV, XMV, XMD, XCPD, XCPV,        &
-                                 XCL, XCI, XTT, XLSTT, XALPI, XBETAI, XGAMI
-USE MODD_PARAM_LIMA,      ONLY : LSNOW_LIMA, XRTMIN, XCTMIN, XALPHAI, XALPHAS,     &
-                                 XNUI 
-USE MODD_PARAM_LIMA_COLD, ONLY : XLBI, XLBEXI, XLBS, XLBEXS, XBI, XCXS, XCCS, &
-                                 XLBDAS_MAX, XDSCNVI_LIM, XLBDASCNVI_MAX,     &
-                                 XC0DEPSI, XC1DEPSI, XR0DEPSI, XR1DEPSI,      &
-                                 XSCFAC, X1DEPS, X0DEPS, XEX1DEPS, XEX0DEPS,  &
-                                 XDICNVS_LIM, XLBDAICNVS_LIM,                 &
-                                 XC0DEPIS, XC1DEPIS, XR0DEPIS, XR1DEPIS,      &
-                                 XCOLEXIS, XAGGS_CLARGE1, XAGGS_CLARGE2,      &
-                                 XAGGS_RLARGE1, XAGGS_RLARGE2  
-USE MODI_LIMA_FUNCTIONS,  ONLY : COUNTJV
-USE MODD_BUDGET
-USE MODD_NSV, ONLY : NSV_LIMA_NI
-USE MODE_BUDGET, ONLY: BUDGET_DDH
-
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-REAL,                     INTENT(IN)    :: PTSTEP  ! Time step          
-INTEGER,                  INTENT(IN)    :: KMI     ! Model index 
-!
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)    :: HLUOUT  ! Output-listing name for
-                                                   ! model n
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                   ! the tput FM fileoutp
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ     ! Height (z)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ  ! Dry density * Jacobian
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF ! Reference Exner function
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST  ! abs. pressure at time t
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT    ! Theta at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRVT    ! Water vapor m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT    ! Rain water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRIT    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRGT    ! Graupel m.r. at t 
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS    ! Theta source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRVS    ! Water vapor m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRIS    ! Pristine ice m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRSS    ! Snow/aggregate m.r. source
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCIT    ! Ice crystal C. at t
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCIS    ! Ice crystal C. source
-!
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-!
-!*       0.2   Declarations of local variables :
-!
-LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) &
-			  :: GMICRO ! Computations only where necessary
-INTEGER :: IMICRO
-INTEGER , DIMENSION(SIZE(GMICRO)) :: I1,I2,I3 ! Used to replace PACK
-INTEGER                           :: JL       ! and PACK intrinsics
-!
-REAL, DIMENSION(:), ALLOCATABLE :: ZRVT    ! Water vapor m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE :: ZRCT    ! Cloud water m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE :: ZRRT    ! Rain water m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE :: ZRIT    ! Pristine ice m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE :: ZRST    ! Snow/aggregate m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE :: ZRGT    ! Graupel/hail m.r. at t
-!
-REAL, DIMENSION(:), ALLOCATABLE :: ZCIT    ! Pristine ice conc. at t
-!
-REAL, DIMENSION(:), ALLOCATABLE :: ZRVS    ! Water vapor m.r. source
-REAL, DIMENSION(:), ALLOCATABLE :: ZRIS    ! Pristine ice m.r. source
-REAL, DIMENSION(:), ALLOCATABLE :: ZRSS    ! Snow/aggregate m.r. source
-!
-REAL, DIMENSION(:),   ALLOCATABLE :: ZTHS    ! Theta source
-!
-REAL, DIMENSION(:),   ALLOCATABLE :: ZCIS    ! Pristine ice conc. source
-!
-REAL, DIMENSION(:), ALLOCATABLE &
-                   :: ZRHODREF, & ! RHO Dry REFerence
-                      ZRHODJ,   & ! RHO times Jacobian
-                      ZZT,      & ! Temperature
-                      ZPRES,    & ! Pressure
-                      ZEXNREF,  & ! EXNer Pressure REFerence
-                      ZZW,      & ! Work array
-                      ZZX,      & ! Work array
-                      ZLSFACT,  & ! L_s/(Pi_ref*C_ph)
-                      ZSSI,     & ! Supersaturation over ice
-                      ZLBDAI,   & ! Slope parameter of the ice crystal distr.
-                      ZLBDAS,   & ! Slope parameter of the aggregate distr.
-                      ZAI,      & ! Thermodynamical function
-                      ZCJ,      & ! used to compute the ventilation coefficient
-                      ZKA,      & ! Thermal conductivity of the air
-                      ZDV,      & ! Diffusivity of water vapor in the air
-                      ZVISCA      ! Viscosity of air
-!
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZZW1      ! Work arrays
-!
-REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3))   &
-                                  :: ZT, ZW ! Temperature
-!
-INTEGER :: IIB, IIE, IJB, IJE, IKB, IKE        ! Physical domain
-!
-REAL,    DIMENSION(:),   ALLOCATABLE :: ZRTMIN, ZCTMIN
-!
-!-------------------------------------------------------------------------------
-!
-! Physical domain
-!
-IIB=1+JPHEXT
-IIE=SIZE(PZZ,1) - JPHEXT
-IJB=1+JPHEXT
-IJE=SIZE(PZZ,2) - JPHEXT
-IKB=1+JPVEXT
-IKE=SIZE(PZZ,3) - JPVEXT
-!
-! Physical limitations
-!
-ALLOCATE(ZRTMIN(SIZE(XRTMIN)))
-ALLOCATE(ZCTMIN(SIZE(XCTMIN)))
-ZRTMIN(:) = XRTMIN(:) / PTSTEP
-ZCTMIN(:) = XCTMIN(:) / PTSTEP
-!
-! Temperature
-ZT(:,:,:)  = PTHT(:,:,:) * ( PPABST(:,:,:)/XP00 ) ** (XRD/XCPD)
-!
-! Looking for regions where computations are necessary
-!
-GMICRO(:,:,:) = .FALSE.
-GMICRO(IIB:IIE,IJB:IJE,IKB:IKE) =                            &
-     PRIT(IIB:IIE,IJB:IJE,IKB:IKE)>XRTMIN(4) .OR. &
-     PRST(IIB:IIE,IJB:IJE,IKB:IKE)>XRTMIN(5)
-!
-IMICRO = COUNTJV( GMICRO(:,:,:),I1(:),I2(:),I3(:))
-!
-IF( IMICRO >= 1 ) THEN
-!
-!------------------------------------------------------------------------------
-!
-!
-!*       1.    Optimization : packing variables
-!              --------------------------------
-!
-!
-!
-   ALLOCATE(ZRVT(IMICRO)) 
-   ALLOCATE(ZRCT(IMICRO)) 
-   ALLOCATE(ZRRT(IMICRO)) 
-   ALLOCATE(ZRIT(IMICRO)) 
-   ALLOCATE(ZRST(IMICRO)) 
-   ALLOCATE(ZRGT(IMICRO)) 
-!
-   ALLOCATE(ZCIT(IMICRO)) 
-!
-   ALLOCATE(ZRVS(IMICRO))  
-   ALLOCATE(ZRIS(IMICRO))
-   ALLOCATE(ZRSS(IMICRO))
-!
-   ALLOCATE(ZTHS(IMICRO))
-!
-   ALLOCATE(ZCIS(IMICRO))
-! 
-   ALLOCATE(ZRHODREF(IMICRO)) 
-   ALLOCATE(ZZT(IMICRO)) 
-   ALLOCATE(ZPRES(IMICRO)) 
-   ALLOCATE(ZEXNREF(IMICRO))
-   DO JL=1,IMICRO   
-      ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL))
-      ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL))
-      ZRRT(JL) = PRRT(I1(JL),I2(JL),I3(JL))
-      ZRIT(JL) = PRIT(I1(JL),I2(JL),I3(JL))
-      ZRST(JL) = PRST(I1(JL),I2(JL),I3(JL))
-      ZRGT(JL) = PRGT(I1(JL),I2(JL),I3(JL))
-!
-      ZCIT(JL) = PCIT(I1(JL),I2(JL),I3(JL))
-!
-      ZRVS(JL) = PRVS(I1(JL),I2(JL),I3(JL))
-      ZRIS(JL) = PRIS(I1(JL),I2(JL),I3(JL))
-      ZRSS(JL) = PRSS(I1(JL),I2(JL),I3(JL))
-!
-      ZTHS(JL) = PTHS(I1(JL),I2(JL),I3(JL))
-!
-      ZCIS(JL) = PCIS(I1(JL),I2(JL),I3(JL))
-!
-      ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL))
-      ZZT(JL)      = ZT(I1(JL),I2(JL),I3(JL))
-      ZPRES(JL)    = PPABST(I1(JL),I2(JL),I3(JL))
-      ZEXNREF(JL)  = PEXNREF(I1(JL),I2(JL),I3(JL))
-   ENDDO
-!
-   IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-      ALLOCATE(ZRHODJ(IMICRO))
-      ZRHODJ(:) = PACK( PRHODJ(:,:,:),MASK=GMICRO(:,:,:) )
-   END IF
-!
-!
-!------------------------------------------------------------------------------
-!
-!
-!*       2.    Microphysical computations
-!              --------------------------
-! 
-!
-   ALLOCATE(ZZW(IMICRO))
-   ALLOCATE(ZZX(IMICRO))
-   ALLOCATE(ZLSFACT(IMICRO))
-   ALLOCATE(ZSSI(IMICRO))
-   ALLOCATE(ZLBDAI(IMICRO)) 
-   ALLOCATE(ZLBDAS(IMICRO))
-   ALLOCATE(ZAI(IMICRO))
-   ALLOCATE(ZCJ(IMICRO))
-   ALLOCATE(ZKA(IMICRO))
-   ALLOCATE(ZDV(IMICRO))
-   ALLOCATE(ZZW1(IMICRO,7))
-!
-! Preliminary computations
-!
-   ZZW(:)  = ZEXNREF(:)*( XCPD+XCPV*ZRVT(:)+XCL*(ZRCT(:)+ZRRT(:)) &
-                                   +XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) )
-!
-   ZLSFACT(:) = (XLSTT+(XCPV-XCI)*(ZZT(:)-XTT))/ZZW(:) ! L_s/(Pi_ref*C_ph)
-!
-   ZZW(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) )
-   ZSSI(:) = ZRVT(:)*( ZPRES(:)-ZZW(:) ) / ( (XMV/XMD) * ZZW(:) ) - 1.0
-                                                       ! Supersaturation over ice
-! Distribution parameters for ice and snow
-   ZLBDAI(:)  = 1.E10
-   WHERE (ZRIT(:)>XRTMIN(4) .AND. ZCIT(:)>XCTMIN(4))
-      ZLBDAI(:) = ( XLBI*ZCIT(:) / ZRIT(:) )**XLBEXI
-   END WHERE
-   ZLBDAS(:)  = 1.E10
-   WHERE (ZRST(:)>XRTMIN(5) )
-      ZLBDAS(:) = XLBS*( ZRHODREF(:)*ZRST(:) )**XLBEXS
-   END WHERE
-!
-   ZKA(:) = 2.38E-2 + 0.0071E-2 * ( ZZT(:) - XTT )          ! k_a
-   ZDV(:) = 0.211E-4 * (ZZT(:)/XTT)**1.94 * (XP00/ZPRES(:)) ! D_v
-!
-! Thermodynamical function ZAI = A_i(T,P)
-   ZAI(:) = ( XLSTT + (XCPV-XCI)*(ZZT(:)-XTT) )**2 / (ZKA(:)*XRV*ZZT(:)**2) &
-                                         + ( XRV*ZZT(:) ) / (ZDV(:)*ZZW(:))
-! ZCJ = c^prime_j/c_i (in the ventilation factor) ( c_i from v(D)=c_i*D^(d_i) )
-   ZCJ(:) = XSCFAC * ZRHODREF(:)**0.3 / SQRT( 1.718E-5+0.0049E-5*(ZZT(:)-XTT) )
-!
-!
-!
-!
-!*       2.1    Conversion of snow to r_i: RSCNVI
-!        ----------------------------------------
-!
-!
-      WHERE ( ZRST(:)>XRTMIN(5) )
-         ZLBDAS(:)  = MIN( XLBDAS_MAX,                                           &
-                           XLBS*( ZRHODREF(:)*MAX( ZRST(:),XRTMIN(5) ) )**XLBEXS )
-      END WHERE
-      ZZW(:) = 0.0
-      WHERE ( ZLBDAS(:)<XLBDASCNVI_MAX .AND. (ZRST(:)>XRTMIN(5)) &
-                                       .AND. (ZSSI(:)<0.0)       )
-         ZZW(:) = (ZLBDAS(:)*XDSCNVI_LIM)**(XALPHAS)
-         ZZX(:) = ( -ZSSI(:)/ZAI(:) ) * (XCCS*ZLBDAS(:)**XCXS) * (ZZW(:)**XNUI) &
-                                                               * EXP(-ZZW(:))
-!
-! Correction BVIE RHODREF
-!         ZZW(:) = MIN( ( XR0DEPSI+XR1DEPSI*ZCJ(:) )*ZZX(:)/ZRHODREF(:),ZRSS(:) )
-         ZZW(:) = MIN( ( XR0DEPSI+XR1DEPSI*ZCJ(:) )*ZZX(:),ZRSS(:) )
-         ZRIS(:) = ZRIS(:) + ZZW(:)
-         ZRSS(:) = ZRSS(:) - ZZW(:)
-!
-         ZZW(:) = ZZW(:)*( XC0DEPSI+XC1DEPSI*ZCJ(:) )/( XR0DEPSI+XR1DEPSI*ZCJ(:) )
-         ZCIS(:) = ZCIS(:) + ZZW(:)
-      END WHERE
-!
-! Budget storage
-      IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-        IF (LBUDGET_RI) CALL BUDGET_DDH (                                          &
-                   UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),&
-                                                                9,'CNVI_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-        IF (LBUDGET_RS) CALL BUDGET_DDH (                                          &
-                   UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:),&
-                                                               10,'CNVI_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-        IF (LBUDGET_SV) CALL BUDGET_DDH (                                          &
-                   UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), &
-                                                   12+NSV_LIMA_NI,'CNVI_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-        END IF
-!
-!
-!*       2.2    Deposition of water vapor on r_s: RVDEPS
-!        -----------------------------------------------
-!
-!
-      ZZW(:) = 0.0
-      WHERE ( (ZRST(:)>XRTMIN(5)) .AND. (ZRSS(:)>ZRTMIN(5)) )
-!Correction BVIE rhodref
-!         ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*ZAI(:)) ) *                               &
-         ZZW(:) = ( ZSSI(:)/(ZAI(:)) ) *                               &
-                  ( X0DEPS*ZLBDAS(:)**XEX0DEPS + X1DEPS*ZCJ(:)*ZLBDAS(:)**XEX1DEPS )
-         ZZW(:) =    MIN( ZRVS(:),ZZW(:)      )*(0.5+SIGN(0.5,ZZW(:))) &
-                   - MIN( ZRSS(:),ABS(ZZW(:)) )*(0.5-SIGN(0.5,ZZW(:)))
-         ZRSS(:) = ZRSS(:) + ZZW(:)
-         ZRVS(:) = ZRVS(:) - ZZW(:)
-         ZTHS(:) = ZTHS(:) + ZZW(:)*ZLSFACT(:)
-      END WHERE
-!
-! Budget storage
-      IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-        IF (LBUDGET_TH) CALL BUDGET_DDH (                                                 &
-                   UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                                4,'DEPS_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-        IF (LBUDGET_RV) CALL BUDGET_DDH (                                                 &
-                   UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),&
-                                                                6,'DEPS_BU_RRV',YDDDH, YDLDDH, YDMDDH)
-        IF (LBUDGET_RS) CALL BUDGET_DDH (                                                 &
-                   UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:),&
-                                                               10,'DEPS_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-      END IF
-!
-!
-!*       2.3    Conversion of pristine ice to r_s: RICNVS
-!        ------------------------------------------------
-!
-!
-      ZZW(:) = 0.0
-      WHERE ( (ZLBDAI(:)<XLBDAICNVS_LIM) .AND. (ZCIT(:)>XCTMIN(4)) &
-                                         .AND. (ZSSI(:)>0.0)       )
-         ZZW(:) = (ZLBDAI(:)*XDICNVS_LIM)**(XALPHAI)
-         ZZX(:) = ( ZSSI(:)/ZAI(:) )*ZCIT(:) * (ZZW(:)**XNUI) *EXP(-ZZW(:))
-!
-! Correction BVIE
-!         ZZW(:) = MAX( MIN( ( XR0DEPIS + XR1DEPIS*ZCJ(:) )*ZZX(:)/ZRHODREF(:) &
-         ZZW(:) = MAX( MIN( ( XR0DEPIS + XR1DEPIS*ZCJ(:) )*ZZX(:) &
-                            ,ZRIS(:) ) + ZRTMIN(5), ZRTMIN(5) ) - ZRTMIN(5)
-         ZRIS(:) = ZRIS(:) - ZZW(:)
-         ZRSS(:) = ZRSS(:) + ZZW(:)
-!
-         ZZW(:) = MIN( ZZW(:)*(( XC0DEPIS+XC1DEPIS*ZCJ(:) )                   &
-                             /( XR0DEPIS+XR1DEPIS*ZCJ(:) )),ZCIS(:) )
-         ZCIS(:) = ZCIS(:) - ZZW(:)
-      END WHERE
-!
-! Budget storage
-      IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-        IF (LBUDGET_RI) CALL BUDGET_DDH (                                          &
-                   UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),&
-                                                                9,'CNVS_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-        IF (LBUDGET_RS) CALL BUDGET_DDH (                                          &
-                   UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:),&
-                                                               10,'CNVS_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-        IF (LBUDGET_SV) CALL BUDGET_DDH (                                           &
-                   UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), &
-                                                   12+NSV_LIMA_NI,'CNVS_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      END IF
-!
-!
-!*       2.4    Aggregation of r_i on r_s: CIAGGS and RIAGGS
-!        ---------------------------------------------------
-!
-!
-      WHERE ( (ZRIT(:)>XRTMIN(4)) .AND. (ZRST(:)>XRTMIN(5)) .AND. (ZRIS(:)>ZRTMIN(4)) &
-                                                            .AND. (ZCIS(:)>ZCTMIN(4)) )
-         ZZW1(:,3) = (ZLBDAI(:) / ZLBDAS(:))**3
-         ZZW1(:,1) = (ZCIT(:)*(XCCS*ZLBDAS(:)**XCXS)*EXP( XCOLEXIS*(ZZT(:)-XTT) )) &
-                                                    / (ZLBDAI(:)**3)
-         ZZW1(:,2) = MIN( ZZW1(:,1)*(XAGGS_CLARGE1+XAGGS_CLARGE2*ZZW1(:,3)),ZCIS(:) )
-         ZCIS(:) = ZCIS(:) - ZZW1(:,2)
-!
-         ZZW1(:,1) = ZZW1(:,1) / ZLBDAI(:)**XBI
-         ZZW1(:,2) = MIN( ZZW1(:,1)*(XAGGS_RLARGE1+XAGGS_RLARGE2*ZZW1(:,3)),ZRIS(:) )
-         ZRIS(:) = ZRIS(:) - ZZW1(:,2)
-         ZRSS(:) = ZRSS(:) + ZZW1(:,2)
-      END WHERE
-!
-! Budget storage
-      IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-        IF (LBUDGET_RI) CALL BUDGET_DDH (                                               &
-                       UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), &
-                                                                9,'AGGS_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-        IF (LBUDGET_RS) CALL BUDGET_DDH (                                               &
-                       UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), &
-                                                               10,'AGGS_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-        IF (LBUDGET_SV) CALL BUDGET_DDH (                                               &
-                       UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), &
-                                                   12+NSV_LIMA_NI,'AGGS_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      END IF
-!
-!
-!------------------------------------------------------------------------------
-!
-!
-!*       3.    Unpacking & Deallocating
-!              ------------------------
-!
-! 
-!
-  ZW(:,:,:) = PRVS(:,:,:)
-  PRVS(:,:,:) = UNPACK( ZRVS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-  ZW(:,:,:) = PRIS(:,:,:)
-  PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-  ZW(:,:,:) = PRSS(:,:,:)
-  PRSS(:,:,:) = UNPACK( ZRSS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-!
-  ZW(:,:,:) = PCIS(:,:,:)
-  PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-!
-  ZW(:,:,:) = PTHS(:,:,:)
-  PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-!
-  DEALLOCATE(ZRVT) 
-  DEALLOCATE(ZRCT) 
-  DEALLOCATE(ZRRT) 
-  DEALLOCATE(ZRIT) 
-  DEALLOCATE(ZRST) 
-  DEALLOCATE(ZRGT) 
-  DEALLOCATE(ZCIT) 
-  DEALLOCATE(ZRVS)  
-  DEALLOCATE(ZRIS)
-  DEALLOCATE(ZRSS)
-  DEALLOCATE(ZTHS)
-  DEALLOCATE(ZCIS)  
-  DEALLOCATE(ZRHODREF) 
-  DEALLOCATE(ZZT) 
-  DEALLOCATE(ZPRES) 
-  DEALLOCATE(ZEXNREF)
-  DEALLOCATE(ZZW)
-  DEALLOCATE(ZZX)
-  DEALLOCATE(ZLSFACT)
-  DEALLOCATE(ZSSI)
-  DEALLOCATE(ZLBDAI) 
-  DEALLOCATE(ZLBDAS)
-  DEALLOCATE(ZAI)
-  DEALLOCATE(ZCJ)
-  DEALLOCATE(ZKA)
-  DEALLOCATE(ZDV)
-  DEALLOCATE(ZZW1)
-  IF (NBUMOD==KMI .AND. LBU_ENABLE) DEALLOCATE(ZRHODJ)
-!
-!
-ELSE
-!
-! Advance the budget calls
-!
-  IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-    IF (LBUDGET_TH) THEN
-      ZW(:,:,:) = PTHS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET_DDH (ZW,4,'DEPS_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-    ENDIF
-    IF (LBUDGET_RV) THEN
-      ZW(:,:,:) = PRVS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET_DDH (ZW,6,'DEPS_BU_RRV',YDDDH, YDLDDH, YDMDDH)
-    ENDIF
-    IF (LBUDGET_RI) THEN
-      ZW(:,:,:) = PRIS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET_DDH (ZW,9,'CNVI_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-      CALL BUDGET_DDH (ZW,9,'CNVS_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-      CALL BUDGET_DDH (ZW,9,'AGGS_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-    ENDIF
-    IF (LBUDGET_RS) THEN
-      ZW(:,:,:) = PRSS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET_DDH (ZW,10,'CNVI_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-      CALL BUDGET_DDH (ZW,10,'DEPS_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-      CALL BUDGET_DDH (ZW,10,'CNVS_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-      CALL BUDGET_DDH (ZW,10,'AGGS_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-    ENDIF
-    IF (LBUDGET_SV) THEN
-      ZW(:,:,:) = PCIS(:,:,:)*PRHODJ(:,:,:)
-      CALL BUDGET_DDH (ZW,12+NSV_LIMA_NI,'CNVI_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      CALL BUDGET_DDH (ZW,12+NSV_LIMA_NI,'CNVS_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      CALL BUDGET_DDH (ZW,12+NSV_LIMA_NI,'AGGS_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-    ENDIF
-  ENDIF
-!
-END IF
-!
-DEALLOCATE(ZRTMIN)
-DEALLOCATE(ZCTMIN)
-!
-END SUBROUTINE LIMA_COLD_SLOW_PROCESSES
diff --git a/src/arome/micro/lima_conversion_melting_snow.F90 b/src/arome/micro/lima_conversion_melting_snow.F90
deleted file mode 100644
index 37c3b450127735ff97d6384ef0cc9f25c301dad8..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_conversion_melting_snow.F90
+++ /dev/null
@@ -1,142 +0,0 @@
-!      #################################
-       MODULE MODI_LIMA_CONVERSION_MELTING_SNOW
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_CONVERSION_MELTING_SNOW (HFMFILE, OCLOSE_OUT, LDCOMPUTE,     &
-                                            PRHODREF, PPRES, PT, PKA, PDV, PCJ, &
-                                            PRVT, PRST, PLBDS,                  &
-                                            P_RS_CMEL,                          &
-                                            PA_RS, PA_RG                        )
-!
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE 
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF ! Reference Exner function
-REAL, DIMENSION(:),   INTENT(IN)    :: PPRES    !
-REAL, DIMENSION(:),   INTENT(IN)    :: PT       !
-REAL, DIMENSION(:),   INTENT(IN)    :: PKA      !
-REAL, DIMENSION(:),   INTENT(IN)    :: PDV      !
-REAL, DIMENSION(:),   INTENT(IN)    :: PCJ      !
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRVT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS   ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_CMEL
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RS
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RG
-!
-END SUBROUTINE LIMA_CONVERSION_MELTING_SNOW
-END INTERFACE
-END MODULE MODI_LIMA_CONVERSION_MELTING_SNOW
-!
-!     ######################################################################
-      SUBROUTINE LIMA_CONVERSION_MELTING_SNOW (HFMFILE, OCLOSE_OUT, LDCOMPUTE,     &
-                                               PRHODREF, PPRES, PT, PKA, PDV, PCJ, &
-                                               PRVT, PRST, PLBDS,                  &
-                                               P_RS_CMEL,                          &
-                                               PA_RS, PA_RG                        )
-!     ######################################################################
-!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the cold-phase homogeneous
-!!    freezing of CCN, droplets and drops (T<-35°C)
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy*   jan. 2014  add budgets
-!!      B.Vie 10/2016 Bug zero division
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_CST,              ONLY : XTT, XMV, XMD, XLVTT, XCPV, XCL, XESTT, XRV
-USE MODD_PARAM_LIMA,       ONLY : XRTMIN
-USE MODD_PARAM_LIMA_MIXED, ONLY : XFSCVMG
-USE MODD_PARAM_LIMA_COLD,  ONLY : X0DEPS, XEX0DEPS, X1DEPS, XEX1DEPS
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE 
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF ! Reference Exner function
-REAL, DIMENSION(:),   INTENT(IN)    :: PPRES    !
-REAL, DIMENSION(:),   INTENT(IN)    :: PT       !
-REAL, DIMENSION(:),   INTENT(IN)    :: PKA      !
-REAL, DIMENSION(:),   INTENT(IN)    :: PDV      !
-REAL, DIMENSION(:),   INTENT(IN)    :: PCJ      !
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRVT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS   ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_CMEL
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RS
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RG
-!
-!*       0.2   Declarations of local variables :
-!
-REAL, DIMENSION(SIZE(PRST)) :: ZW ! work arrays
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       1.     PRELIMINARY COMPUTATIONS
-!	        ------------------------
-!
-!
-P_RS_CMEL(:)=0.
-!
-ZW(:) = 0.0
-WHERE( (PRST(:)>XRTMIN(5)) .AND. (PT(:)>XTT) .AND. LDCOMPUTE(:) )
-   ZW(:) = PRVT(:)*PPRES(:)/((XMV/XMD)+PRVT(:)) ! Vapor pressure
-   ZW(:) = PKA(:)*(XTT-PT(:)) +                                 &
-              ( PDV(:)*(XLVTT + ( XCPV - XCL ) * ( PT(:) - XTT )) &
-                          *(XESTT-ZW(:))/(XRV*PT(:))             )
-!
-! compute RSMLT
-!
-   ZW(:)  = XFSCVMG*MAX( 0.0,( -ZW(:) *             &
-                          ( X0DEPS*           PLBDS(:)**XEX0DEPS +     &
-                            X1DEPS*PCJ(:)*PLBDS(:)**XEX1DEPS ) ))!-    &
-!!! BVIE
-!!! ZZW1(1) et ZZW1(4) sont nuls là où PT>XTT !!!!!!!!!!!!!!
-!!! On ne tient pas compte de la collection de pluie et gouttelettes par la neige si T>0 !!!! 
-!                                    ( ZZW1(:,1)+ZZW1(:,4) ) *       &
-!                             ( ZRHODREF(:)*XCL*(XTT-ZZT(:))) ) /    &
-!                                            ( ZRHODREF(:)*XLMTT ) )
-!
-! note that RSCVMG = RSMLT*XFSCVMG but no heat is exchanged (at the rate RSMLT)
-! because the graupeln produced by this process are still icy!!!
-!
-   P_RS_CMEL(:) = - ZW(:)
-!
-END WHERE
-!
-PA_RS(:) = PA_RS(:) + P_RS_CMEL(:)
-PA_RG(:) = PA_RG(:) - P_RS_CMEL(:)
-!
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_CONVERSION_MELTING_SNOW
diff --git a/src/arome/micro/lima_droplets_accretion.F90 b/src/arome/micro/lima_droplets_accretion.F90
deleted file mode 100644
index 6ee2a57ec5574a8b05cc349a24e68c07b1f3d045..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_droplets_accretion.F90
+++ /dev/null
@@ -1,172 +0,0 @@
-!      #################################
-       MODULE MODI_LIMA_DROPLETS_ACCRETION
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_DROPLETS_ACCRETION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, &
-                                       PRHODREF,                       &
-                                       PRCT, PRRT, PCCT, PCRT,         &
-                                       PLBDC, PLBDC3, PLBDR, PLBDR3,   &
-                                       P_RC_ACCR, P_CC_ACCR,           &
-                                       PA_RC, PA_CC, PA_RR             )
-!
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE 
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF ! Reference Exner function
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT    ! Rain m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCCT    ! Cloud water conc. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCRT    ! Rain conc. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDC   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDC3  ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR3  ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_ACCR
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_ACCR
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RR
-!
-END SUBROUTINE LIMA_DROPLETS_ACCRETION
-END INTERFACE
-END MODULE MODI_LIMA_DROPLETS_ACCRETION
-!
-!     ######################################################################
-      SUBROUTINE LIMA_DROPLETS_ACCRETION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, &
-                                          PRHODREF,                       &
-                                          PRCT, PRRT, PCCT, PCRT,         &
-                                          PLBDC, PLBDC3, PLBDR, PLBDR3,   &
-                                          P_RC_ACCR, P_CC_ACCR,           &
-                                          PA_RC, PA_CC, PA_RR             )
-!     ######################################################################
-!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the cold-phase homogeneous
-!!    freezing of CCN, droplets and drops (T<-35°C)
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy*   jan. 2014  add budgets
-!!      B.Vie 10/2016 Bug zero division
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_PARAM_LIMA,      ONLY : XRTMIN, XCTMIN
-USE MODD_PARAM_LIMA_WARM, ONLY : XLAUTR, XAUTO1, XLAUTR_THRESHOLD, &
-                                 XACCR4, XACCR5, XACCR3, XACCR2, XACCR1, &
-                                 XACCR_CLARGE1, XACCR_CLARGE2, XACCR_RLARGE1, XACCR_RLARGE2, &
-                                 XACCR_CSMALL1, XACCR_CSMALL2, XACCR_RSMALL1, XACCR_RSMALL2
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE 
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF ! Reference Exner function
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT    ! Rain m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCCT    ! Cloud water conc. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCRT    ! Rain conc. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDC   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDC3  ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR3  ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_ACCR
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_ACCR
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RR
-!
-!*       0.2   Declarations of local variables :
-!
-REAL, DIMENSION(SIZE(PRCT)) :: ZW1, ZW2, ZW3, ZW4 ! work arrays
-LOGICAL, DIMENSION(SIZE(PRCT)) :: GACCR
-!
-!-------------------------------------------------------------------------------
-!
-!
-!
-!*       3. Autoconversion of cloud droplets (Berry-Reinhardt parameterization)
-!   	 ----------------------------------------------------------------------
-!
-P_RC_ACCR(:) = 0.0
-P_CC_ACCR(:) = 0.0
-!
-ZW1(:) = 0.0
-ZW2(:) = 0.0
-ZW3(:) = 0.0
-ZW4(:) = 0.0
-!
-WHERE( PRCT(:)>XRTMIN(2) .AND. PRRT(:)>XRTMIN(3) .AND. PCRT(:)>XCTMIN(3) .AND. LDCOMPUTE(:) )
-   ZW2(:) = MAX( 0.0,XLAUTR*PRHODREF(:)*PRCT(:)*(XAUTO1/PLBDC(:)**4-XLAUTR_THRESHOLD) ) ! L 
-   ZW4(:) = XACCR1/PLBDR(:)
-END WHERE
-!
-GACCR(:) = LDCOMPUTE(:)      .AND. &
-               PRRT(:)>XRTMIN(3) .AND. &
-               PCRT(:)>XCTMIN(3) .AND. &
-               PRCT(:)>XRTMIN(2) .AND. &
-               (PRRT(:)>1.2*ZW2(:)/PRHODREF(:) .OR. &
-                ZW4(:)>=MAX(XACCR2,XACCR3/(XACCR4/PLBDC(:)-XACCR5)) )
-!
-! Accretion for D>100 10-6 m
-WHERE( GACCR(:).AND.(ZW4(:)>1.E-4) )
-   ZW3(:) = PLBDC3(:) / PLBDR3(:)
-   ZW1(:) = ( PCCT(:)*PCRT(:) / PLBDC3(:) )*PRHODREF(:)
-   ZW2(:) = ZW1(:)*(XACCR_CLARGE1+XACCR_CLARGE2*ZW3(:))
-!
-   P_CC_ACCR(:) = - ZW2(:)
-!
-   ZW1(:) = ( ZW1(:) / PLBDC3(:) )
-   ZW2(:) = ZW1(:)*(XACCR_RLARGE1+XACCR_RLARGE2*ZW3(:))
-!
-   P_RC_ACCR(:) = - ZW2(:)
-END WHERE
-!
-! Accretion for D<100 10-6 m
-WHERE( GACCR(:).AND.(ZW4(:)<=1.E-4) )
-   ZW3(:) = PLBDC3(:) / PLBDR3(:)
-   ZW1(:) = ( PCCT(:)*PCRT(:) / PLBDC3(:)**2 )*PRHODREF(:)
-   ZW3(:) = ZW3(:)**2
-   ZW2(:) = ZW1(:)*(XACCR_CSMALL1+XACCR_CSMALL2*ZW3(:))
-!
-   P_CC_ACCR(:) = - ZW2(:)
-!
-   ZW1(:) = ZW1(:) / PLBDC3(:)
-   ZW2(:) = ZW1(:)*(XACCR_RSMALL1+XACCR_RSMALL2*ZW3(:))
-!
-   P_RC_ACCR(:) = - ZW2(:)
-END WHERE
-!
-PA_RC(:) = PA_RC(:) + P_RC_ACCR(:)
-PA_CC(:) = PA_CC(:) + P_CC_ACCR(:)
-PA_RR(:) = PA_RR(:) - P_RC_ACCR(:)
-!
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_DROPLETS_ACCRETION
diff --git a/src/arome/micro/lima_droplets_autoconversion.F90 b/src/arome/micro/lima_droplets_autoconversion.F90
deleted file mode 100644
index 9dbce4f64513bc02f6689c62e6f0112c9d0ff83e..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_droplets_autoconversion.F90
+++ /dev/null
@@ -1,143 +0,0 @@
-!      #################################
-       MODULE MODI_LIMA_DROPLETS_AUTOCONVERSION
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_DROPLETS_AUTOCONVERSION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, &
-                                            PRHODREF,                       &
-                                            PRCT, PLBDC, PLBDR,             &
-                                            P_RC_AUTO, P_CC_AUTO, P_CR_AUTO,&
-                                            PA_RC, PA_CC, PA_RR, PA_CR      )
-!
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE 
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF ! Reference Exner function
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDC   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR   ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_AUTO
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_AUTO
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_AUTO
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CR
-!
-END SUBROUTINE LIMA_DROPLETS_AUTOCONVERSION
-END INTERFACE
-END MODULE MODI_LIMA_DROPLETS_AUTOCONVERSION
-!
-!     ######################################################################
-      SUBROUTINE LIMA_DROPLETS_AUTOCONVERSION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, &
-                                               PRHODREF,                       &
-                                               PRCT, PLBDC, PLBDR,             &
-                                               P_RC_AUTO, P_CC_AUTO, P_CR_AUTO,&
-                                               PA_RC, PA_CC, PA_RR, PA_CR      )
-!     ######################################################################
-!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the cold-phase homogeneous
-!!    freezing of CCN, droplets and drops (T<-35°C)
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy*   jan. 2014  add budgets
-!!      B.Vie 10/2016 Bug zero division
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_PARAM_LIMA,      ONLY : XRTMIN
-USE MODD_PARAM_LIMA_WARM, ONLY : XLAUTR, XAUTO1, XLAUTR_THRESHOLD, &
-                                 XITAUTR, XAUTO2, XITAUTR_THRESHOLD, &
-                                 XACCR4, XACCR5, XACCR3, XACCR1, XAC
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE 
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF ! Reference Exner function
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDC   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR   ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_AUTO
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_AUTO
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_AUTO
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CR
-!
-!*       0.2   Declarations of local variables :
-!
-REAL, DIMENSION(SIZE(PRCT)) :: ZW1, ZW2, ZW3 ! work arrays
-!
-!-------------------------------------------------------------------------------
-!
-!
-!
-!*       3. Autoconversion of cloud droplets (Berry-Reinhardt parameterization)
-!   	 ----------------------------------------------------------------------
-!
-!
-!
-P_RC_AUTO(:) = 0.0
-P_CC_AUTO(:) = 0.0
-P_CR_AUTO(:) = 0.0
-!
-ZW3(:) = 0.0
-ZW2(:) = 0.0
-ZW1(:) = 0.0
-WHERE( PRCT(:)>XRTMIN(2) .AND. LDCOMPUTE(:) )
-   ZW2(:) = MAX( 0.0, &
-                     XLAUTR*PRHODREF(:)*PRCT(:)*(XAUTO1/PLBDC(:)**4-XLAUTR_THRESHOLD) ) ! L 
-!
-   ZW3(:) = MAX( 0.0, &
-                     XITAUTR*ZW2(:)*PRCT(:)*(XAUTO2/PLBDC(:)-XITAUTR_THRESHOLD) ) ! L/tau
-!
-   P_RC_AUTO(:) = - ZW3(:)
-!
-   ZW1(:) = MIN( MIN( 1.2E4, &
-                          (XACCR4/PLBDC(:)-XACCR5)/XACCR3 ), &
-                          PLBDR(:)/XACCR1 ) ! D**-1 threshold diameter for 
-                                                ! switching the autoconversion regimes
-                                                ! min (80 microns, D_h, D_r)
-   ZW3(:) = ZW3(:) * MAX( 0.0,ZW1(:) )**3 / XAC 
-!
-   P_CC_AUTO(:) = 0.
-   P_CR_AUTO(:) = ZW3(:)
-!
-   PA_RC(:) = PA_RC(:) + P_RC_AUTO(:)
-   PA_CC(:) = PA_CC(:) 
-   PA_RR(:) = PA_RR(:) - P_RC_AUTO(:)
-   PA_CR(:) = PA_CR(:) + P_CR_AUTO(:)
-END WHERE
-!
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_DROPLETS_AUTOCONVERSION
diff --git a/src/arome/micro/lima_droplets_hom_freezing.F90 b/src/arome/micro/lima_droplets_hom_freezing.F90
deleted file mode 100644
index c5afd129791fc060bc3961184f3df81b64091c5c..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_droplets_hom_freezing.F90
+++ /dev/null
@@ -1,160 +0,0 @@
-!      #################################
-       MODULE MODI_LIMA_DROPLETS_HOM_FREEZING
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_DROPLETS_HOM_FREEZING (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, &
-                                          PT, PLVFACT, PLSFACT,                   &
-                                          PRCT, PCCT, PLBDC,                      &
-                                          P_TH_HONC, P_RC_HONC, P_CC_HONC,        &
-                                          PA_TH, PA_RC, PA_CC, PA_RI, PA_CI       )
-!
-REAL,                 INTENT(IN)    :: PTSTEP 
-CHARACTER(LEN=*),     INTENT(IN)    :: HFMFILE 
-LOGICAL,              INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PT       ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLVFACT  ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT  ! 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCCT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDC   ! Cloud water lambda
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_HONC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_HONC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_HONC
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CI
-!
-END SUBROUTINE LIMA_DROPLETS_HOM_FREEZING
-END INTERFACE
-END MODULE MODI_LIMA_DROPLETS_HOM_FREEZING
-!
-!     ######################################################################
-      SUBROUTINE LIMA_DROPLETS_HOM_FREEZING (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, &
-                                             PT, PLVFACT, PLSFACT,                   &
-                                             PRCT, PCCT, PLBDC,                      &
-                                             P_TH_HONC, P_RC_HONC, P_CC_HONC,        &
-                                             PA_TH, PA_RC, PA_CC, PA_RI, PA_CI       )
-!     ######################################################################
-!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the cold-phase homogeneous
-!!    freezing of CCN, droplets and drops (T<-35°C)
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy*   jan. 2014  add budgets
-!!      B.Vie 10/2016 Bug zero division
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_CST,             ONLY : XTT
-USE MODD_PARAM_LIMA,      ONLY : XRTMIN, XCTMIN, XNUC
-USE MODD_PARAM_LIMA_COLD, ONLY : XC_HONC, XTEXP1_HONC, XTEXP2_HONC, XTEXP3_HONC,   &
-                                 XTEXP4_HONC, XTEXP5_HONC 
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-REAL,                 INTENT(IN)    :: PTSTEP 
-CHARACTER(LEN=*),     INTENT(IN)    :: HFMFILE 
-LOGICAL,              INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PT       ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLVFACT  ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT  ! 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCCT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDC   ! Cloud water lambda
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_HONC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_HONC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_HONC
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CI
-!
-!*       0.2   Declarations of local variables :
-!
-REAL, DIMENSION(SIZE(PT)) ::  ZZW, ZZX, ZZY, ZTCELSIUS
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       1.     PRELIMINARY COMPUTATIONS
-!	        ------------------------
-!
-!
-P_TH_HONC(:) = 0.
-P_RC_HONC(:) = 0.
-P_CC_HONC(:) = 0.
-!
-WHERE ( (PT(:)<XTT-35.0) .AND. (PCCT(:)>XCTMIN(2)) .AND. (PRCT(:)>XRTMIN(2)) )
-   ZTCELSIUS(:) = PT(:)-XTT                                    ! T [°C]
-!
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       3.     Cloud droplets homogeneous freezing
-!	        -----------------------------------
-!
-!
-!  Compute the droplet homogeneous nucleation source: RCHONI
-!                 -> Pruppacher(1995)
-!
-   ZZW(:) = 0.0
-   ZZX(:) = 0.0
-   ZZY(:) = 0.0
-
-   ZZX(:) = 1.0 / ( 1.0 + (XC_HONC/PLBDC(:))*PTSTEP*                      &
-           EXP( XTEXP1_HONC + ZTCELSIUS(:)*(                        &
-           XTEXP2_HONC + ZTCELSIUS(:)*(                        &
-           XTEXP3_HONC + ZTCELSIUS(:)*(                        &
-           XTEXP4_HONC + ZTCELSIUS(:)*XTEXP5_HONC))) ) )**XNUC
-!
-   ZZW(:) = PCCT(:) * (1.0 - ZZX(:))                                  ! CCHONI
-   ZZY(:) = PRCT(:) * (1.0 - ZZX(:))                                  ! RCHONI
-!
-   P_RC_HONC(:) = - ZZY(:)/PTSTEP
-   P_CC_HONC(:) = - ZZW(:)/PTSTEP
-   P_TH_HONC(:) = P_RC_HONC(:) * (PLSFACT(:)-PLVFACT(:))
-!
-   PA_TH(:) = PA_TH(:) + P_TH_HONC(:)
-   PA_RC(:) = PA_RC(:) + P_RC_HONC(:)
-   PA_CC(:) = PA_CC(:) + P_CC_HONC(:)
-   PA_RI(:) = PA_RI(:) - P_RC_HONC(:)
-   PA_CI(:) = PA_CI(:) - P_CC_HONC(:)
-!
-END WHERE
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_DROPLETS_HOM_FREEZING
diff --git a/src/arome/micro/lima_droplets_riming_snow.F90 b/src/arome/micro/lima_droplets_riming_snow.F90
deleted file mode 100644
index 0f8a3c60ecb459479dae635b866d78d8fed500f0..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_droplets_riming_snow.F90
+++ /dev/null
@@ -1,252 +0,0 @@
-!      #################################
-       MODULE MODI_LIMA_DROPLETS_RIMING_SNOW
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_DROPLETS_RIMING_SNOW (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE,                  &
-                                         PRHODREF, PT,                                            &
-                                         PRCT, PCCT, PRST, PLBDC, PLBDS, PLVFACT, PLSFACT,        &
-                                         P_TH_RIM, P_RC_RIM, P_CC_RIM, P_RS_RIM, P_RG_RIM,        &
-                                         P_RI_HMS, P_CI_HMS, P_RS_HMS,                            &
-                                         PA_TH, PA_RC, PA_CC, PA_RI, PA_CI, PA_RS, PA_RG          )
-!
-REAL,                 INTENT(IN)    :: PTSTEP 
-CHARACTER(LEN=*),     INTENT(IN)    :: HFMFILE 
-LOGICAL,              INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PT   ! 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCCT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDC   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLVFACT ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_RIM
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_RIM
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_RIM
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_RIM
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_RIM
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_HMS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_HMS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_HMS
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RS
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RG
-!
-END SUBROUTINE LIMA_DROPLETS_RIMING_SNOW
-END INTERFACE
-END MODULE MODI_LIMA_DROPLETS_RIMING_SNOW
-!
-!     ######################################################################
-      SUBROUTINE LIMA_DROPLETS_RIMING_SNOW (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE,                  &
-                                            PRHODREF, PT,                                            &
-                                            PRCT, PCCT, PRST, PLBDC, PLBDS, PLVFACT, PLSFACT,        &
-                                            P_TH_RIM, P_RC_RIM, P_CC_RIM, P_RS_RIM, P_RG_RIM,        &
-                                            P_RI_HMS, P_CI_HMS, P_RS_HMS,                            &
-                                            PA_TH, PA_RC, PA_CC, PA_RI, PA_CI, PA_RS, PA_RG          )
-!     ######################################################################
-!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the cold-phase homogeneous
-!!    freezing of CCN, droplets and drops (T<-35°C)
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy*   jan. 2014  add budgets
-!!      B.Vie 10/2016 Bug zero division
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_CST,              ONLY : XTT
-USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCEXVT
-USE MODD_PARAM_LIMA_MIXED, ONLY : NGAMINC, XRIMINTP1, XRIMINTP2, XGAMINC_RIM1, XGAMINC_RIM2, &
-                                  XCRIMSS, XEXCRIMSS, XSRIMCG, XEXSRIMCG, &
-                                  XHMLINTP1, XHMLINTP2, XGAMINC_HMC, XHM_FACTS, XHMTMIN, XHMTMAX
-USE MODD_PARAM_LIMA_COLD,  ONLY : XMNU0
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-REAL,                 INTENT(IN)    :: PTSTEP 
-CHARACTER(LEN=*),     INTENT(IN)    :: HFMFILE 
-LOGICAL,              INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PT   ! 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCCT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDC   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLVFACT ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_RIM
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_RIM
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_RIM
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_RIM
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_RIM
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_HMS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_HMS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_HMS
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RS
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RG
-!
-!*       0.2   Declarations of local variables :
-!
-LOGICAL, DIMENSION(SIZE(PRCT))  :: GRIM
-!
-REAL,    DIMENSION(SIZE(PRCT))  :: ZZW1, ZZW2, ZZW3, ZZW4
-!
-INTEGER, DIMENSION(SIZE(PRCT))  :: IVEC1,IVEC2      ! Vectors of indices
-REAL,    DIMENSION(SIZE(PRCT))  :: ZVEC1,ZVEC2      ! Work vectors
-!
-!-------------------------------------------------------------------------------
-!
-!
-P_TH_RIM(:) = 0.
-P_RC_RIM(:) = 0.
-P_CC_RIM(:) = 0.
-P_RS_RIM(:) = 0.
-P_RG_RIM(:) = 0.
-!
-P_RI_HMS(:) = 0.
-P_CI_HMS(:) = 0.
-P_RS_HMS(:) = 0.
-!
-ZZW1(:) = 0.
-ZZW2(:) = 0.
-ZZW3(:) = 0.
-ZZW4(:) = 0.
-!
-!*       Cloud droplet riming of the aggregates  
-!        -------------------------------------------
-!
-!
-GRIM(:) = .False.
-GRIM(:) = (PRCT(:)>XRTMIN(2)) .AND. (PRST(:)>XRTMIN(5)) .AND. (PT(:)<XTT) .AND. LDCOMPUTE(:)
-!
-WHERE( GRIM )
-!
-   ZVEC1(:) = PLBDS(:)
-!
-!        1.     find the next lower indice for the ZLBDAS in the geometrical
-!               set of Lbda_s used to tabulate some moments of the incomplete 
-!               gamma function
-!
-   ZVEC2(:) = MAX( 1.00001, MIN( FLOAT(NGAMINC)-0.00001,           &
-                         XRIMINTP1 * LOG( ZVEC1(:) ) + XRIMINTP2 ) )
-   IVEC2(:) = INT( ZVEC2(:) )
-   ZVEC2(:) = ZVEC2(:) - FLOAT( IVEC2(:) )
-!
-!        2.     perform the linear interpolation of the normalized
-!               "2+XDS"-moment of the incomplete gamma function
-!
-   ZVEC1(:) =   XGAMINC_RIM1( IVEC2(:)+1 )* ZVEC2(:)      &
-                    - XGAMINC_RIM1( IVEC2(:)   )*(ZVEC2(:) - 1.0)
-   ZZW1(:) = ZVEC1(:)
-!
-!        3.     perform the linear interpolation of the normalized
-!               "XBS"-moment of the incomplete gamma function
-!
-   ZVEC1(:) =  XGAMINC_RIM2( IVEC2(:)+1 )* ZVEC2(:)      &
-                   - XGAMINC_RIM2( IVEC2(:)   )*(ZVEC2(:) - 1.0)
-   ZZW2(:) = ZVEC1(:)
-!
-!        4.     riming
-!
-   ! Cloud droplets collected
-   P_RC_RIM(:) = - XCRIMSS * PRCT(:) * PLBDS(:)**XEXCRIMSS * PRHODREF(:)**(-XCEXVT)
-   P_CC_RIM(:) = P_RC_RIM(:) *(PCCT(:)/PRCT(:)) ! Lambda_c**3
-   !
-   ! Cloud droplets collected on small aggregates add to snow
-   P_RS_RIM(:) = - P_RC_RIM(:) * ZZW1(:)
-   !
-   ! Cloud droplets collected on large aggregates add to graupel
-   P_RG_RIM(:) = P_RC_RIM(:) - P_RS_RIM(:) 
-   !
-   ! Large aggregates collecting droplets add to graupel (instant process ???)
-   ZZW3(:) = XSRIMCG * PLBDS(:)**XEXSRIMCG * (1.0 - ZZW2(:))/(PTSTEP*PRHODREF(:))
-   P_RS_RIM(:) = P_RS_RIM(:) - ZZW3(:) 
-   P_RG_RIM(:) = P_RG_RIM(:) + ZZW3(:) 
-   !
-   P_TH_RIM(:) = - P_RC_RIM(:)*(PLSFACT(:)-PLVFACT(:))
-END WHERE
-!
-!
-!*       Hallett-Mossop ice production (HMS)  
-!        -------------------------------------------
-!
-!
-GRIM(:) = .False.
-GRIM(:) = (PT(:)<XHMTMAX)     .AND. (PT(:)>XHMTMIN)     .AND. &
-              (PRST(:)>XRTMIN(5)) .AND. (PRCT(:)>XRTMIN(2)) .AND. &
-               LDCOMPUTE(:)
-!
-WHERE ( GRIM )
-!
-   ZVEC1(:) = PLBDC(:)
-   ZVEC2(:) = MAX( 1.00001, MIN( FLOAT(NGAMINC)-0.00001,           &
-                         XHMLINTP1 * LOG( ZVEC1(:) ) + XHMLINTP2 ) )
-   IVEC2(:) = INT( ZVEC2(:) )
-   ZVEC2(:) = ZVEC2(:) - FLOAT( IVEC2(:) )
-   ZVEC1(:) =   XGAMINC_HMC( IVEC2(:)+1 )* ZVEC2(:)      &
-                    - XGAMINC_HMC( IVEC2(:)   )*(ZVEC2(:) - 1.0)
-   ZZW4(:) = ZVEC1(:) ! Large droplets
-!
-   WHERE ( ZZW4(:)<0.99 )
-      P_CI_HMS(:) = - P_RC_RIM(:) * (PCCT(:)/PRCT(:)) * (1.0-ZZW4(:)) * XHM_FACTS * &
-                          MAX( 0.0, MIN( (PT(:)-XHMTMIN)/3.0,(XHMTMAX-PT(:))/2.0 ) ) ! CCHMSI
-!
-      P_RI_HMS(:) = P_CI_HMS(:) * XMNU0                                     ! RCHMSI
-      P_RS_HMS(:) = - P_RI_HMS(:) 
-   END WHERE
-
-END WHERE
-!
-!
-PA_RC(:) = PA_RC(:) + P_RC_RIM(:) 
-PA_CC(:) = PA_CC(:) + P_CC_RIM(:) 
-PA_RI(:) = PA_RI(:) + P_RI_HMS(:)
-PA_CI(:) = PA_CI(:) + P_CI_HMS(:)
-PA_RS(:) = PA_RS(:) + P_RS_RIM(:) + P_RS_HMS(:)
-PA_RG(:) = PA_RG(:) + P_RG_RIM(:) 
-PA_TH(:) = PA_TH(:) + P_TH_RIM(:)
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_DROPLETS_RIMING_SNOW
diff --git a/src/arome/micro/lima_droplets_self_collection.F90 b/src/arome/micro/lima_droplets_self_collection.F90
deleted file mode 100644
index 5e0c994e08655820da833585f32019e8567aa9b6..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_droplets_self_collection.F90
+++ /dev/null
@@ -1,103 +0,0 @@
-!      #################################
-       MODULE MODI_LIMA_DROPLETS_SELF_COLLECTION
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_DROPLETS_SELF_COLLECTION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, &
-                                             PRHODREF,                       &
-                                             PCCT, PLBDC3,                   &
-                                             P_CC_SELF,                      &
-                                             PA_CC                           )
-!
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE 
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF ! Reference Exner function
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PCCT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDC3  ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_SELF
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CC
-!
-END SUBROUTINE LIMA_DROPLETS_SELF_COLLECTION
-END INTERFACE
-END MODULE MODI_LIMA_DROPLETS_SELF_COLLECTION
-!
-!     ######################################################################
-      SUBROUTINE LIMA_DROPLETS_SELF_COLLECTION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, &
-                                                PRHODREF,                       &
-                                                PCCT, PLBDC3,                   &
-                                                P_CC_SELF,                      &
-                                                PA_CC                           )
-!     ######################################################################
-!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the cold-phase homogeneous
-!!    freezing of CCN, droplets and drops (T<-35°C)
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy*   jan. 2014  add budgets
-!!      B.Vie 10/2016 Bug zero division
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_PARAM_LIMA,      ONLY : XCTMIN
-USE MODD_PARAM_LIMA_WARM, ONLY : XSELFC
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE 
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF ! Reference Exner function
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PCCT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDC3  ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_SELF
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CC
-!
-!*       0.2   Declarations of local variables :
-!
-REAL, DIMENSION(SIZE(PCCT)) :: ZW ! work arrays
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       1.     PRELIMINARY COMPUTATIONS
-!	        ------------------------
-!
-!
-P_CC_SELF(:)=0.
-!
-WHERE( PCCT(:)>XCTMIN(2) .AND. LDCOMPUTE(:) )
-   ZW(:) = XSELFC*(PCCT(:)/PLBDC3(:))**2 * PRHODREF(:) ! analytical integration
-   P_CC_SELF(:) = - ZW(:)
-   PA_CC(:) = PA_CC(:) + P_CC_SELF(:)
-END WHERE
-!
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_DROPLETS_SELF_COLLECTION
diff --git a/src/arome/micro/lima_drops_break_up.F90 b/src/arome/micro/lima_drops_break_up.F90
deleted file mode 100644
index fccda7a5b0cb71f8e0ad53f49276b2e148b1763e..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_drops_break_up.F90
+++ /dev/null
@@ -1,129 +0,0 @@
-!      ###############################
-       MODULE MODI_LIMA_DROPS_BREAK_UP
-!      ###############################
-!
-INTERFACE
-   SUBROUTINE LIMA_DROPS_BREAK_UP (HFMFILE, OCLOSE_OUT, LDCOMPUTE,    &
-                                   PCRT, PRRT,                        &
-                                   P_CR_BRKU,                         &
-                                   PB_CR                              )
-
-!
-CHARACTER(LEN=*),      INTENT(IN)    :: HFMFILE    
-LOGICAL,               INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:), INTENT(IN)    :: LDCOMPUTE  
-!
-REAL, DIMENSION(:),    INTENT(IN)    :: PCRT             !
-REAL, DIMENSION(:),    INTENT(IN)    :: PRRT             !
-!
-REAL, DIMENSION(:),    INTENT(INOUT) :: P_CR_BRKU        ! Concentration change (#/kg)
-REAL, DIMENSION(:),    INTENT(INOUT) :: PB_CR            ! Cumulated concentration change (#/kg)
-!
-END SUBROUTINE LIMA_DROPS_BREAK_UP
-END INTERFACE
-END MODULE MODI_LIMA_DROPS_BREAK_UP
-!     #####################################################################
-   SUBROUTINE LIMA_DROPS_BREAK_UP (HFMFILE, OCLOSE_OUT, LDCOMPUTE,    &
-                                   PCRT, PRRT,                        &
-                                   P_CR_BRKU,                         &
-                                   PB_CR                              )
-
-!     #####################################################################
-!
-!!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the warm microphysical 
-!!    sources: nucleation, sedimentation, autoconversion, accretion,  
-!!    self-collection and vaporisation which are parameterized according  
-!!    to Cohard and Pinty, QJRMS, 2000
-!!
-!!
-!!**  METHOD
-!!    ------
-!!      The activation of CCN is checked for quasi-saturated air parcels 
-!!    to update the cloud droplet number concentration. Then assuming a 
-!!    generalized gamma distribution law for the cloud droplets and the 
-!!    raindrops, the zeroth and third order moments tendencies are evaluated
-!!    for all the coalescence terms by integrating the Stochastic Collection 
-!!    Equation. As autoconversion is a process that cannot be resolved 
-!!    analytically, the Berry-Reinhardt parameterisation is employed with
-!!    modifications to initiate the raindrop spectrum mode. The integration
-!!    of the raindrop evaporation below clouds is straightforward.
-!!
-!!      The sedimentation rates are computed with a time spliting technique: 
-!!    an upstream scheme, written as a difference of non-advective fluxes. 
-!!    This source term is added to the next coming time step (split-implicit 
-!!    process).
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!      Cohard, J.-M. and J.-P. Pinty, 2000: A comprehensive two-moment warm 
-!!      microphysical bulk scheme. 
-!!        Part I: Description and tests
-!!        Part II: 2D experiments with a non-hydrostatic model
-!!      Accepted for publication in Quart. J. Roy. Meteor. Soc. 
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy *  jan. 2014   add budgets
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_PARAM_LIMA,      ONLY : XCTMIN, XRTMIN
-USE MODD_PARAM_LIMA_WARM, ONLY : XACCR1, XLBEXR, XLBR, XSPONBUD1, XSPONBUD3, XSPONCOEF2
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-CHARACTER(LEN=*),      INTENT(IN)    :: HFMFILE    
-LOGICAL,               INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:), INTENT(IN)    :: LDCOMPUTE  
-!
-REAL, DIMENSION(:),    INTENT(IN)    :: PCRT             !
-REAL, DIMENSION(:),    INTENT(IN)    :: PRRT             !
-!
-REAL, DIMENSION(:),    INTENT(INOUT) :: P_CR_BRKU        ! Concentration change (#/kg)
-REAL, DIMENSION(:),    INTENT(INOUT) :: PB_CR            ! Cumulated concentration change (#/kg)
-!
-!*       0.2   Declarations of local variables :
-!
-REAL,    DIMENSION(SIZE(PCRT)) :: ZWLBDR,ZWLBDR3
-INTEGER :: JL
-!
-!-------------------------------------------------------------------------------
-!
-!              SPONTANEOUS BREAK-UP (NUMERICAL FILTER)
-!              --------------------
-!
-P_CR_BRKU(:)=0.
-!
-ZWLBDR3(:) = 1.E30
-ZWLBDR(:) = 1.E10
-WHERE ( PRRT(:)>XRTMIN(3) .AND. PCRT(:)>XCTMIN(3) .AND. LDCOMPUTE(:) )
-   ZWLBDR3(:) = XLBR * PCRT(:) / PRRT(:)
-   ZWLBDR(:)  = ZWLBDR3(:)**XLBEXR
-END WHERE
-WHERE (ZWLBDR(:)<(XACCR1/XSPONBUD1) .AND. LDCOMPUTE(:))
-   P_CR_BRKU(:) = PCRT(:)*( MAX((1.+XSPONCOEF2*(XACCR1/ZWLBDR(:)-XSPONBUD1)**2),&
-                                                     (XACCR1/ZWLBDR(:)/XSPONBUD3)**3) -1. )
-END WHERE
-!
-PB_CR(:) = PB_CR(:) + P_CR_BRKU(:)
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_DROPS_BREAK_UP
diff --git a/src/arome/micro/lima_drops_hom_freezing.F90 b/src/arome/micro/lima_drops_hom_freezing.F90
deleted file mode 100644
index 90010219b5360ad0dcd04dca53dc40666ba6cf86..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_drops_hom_freezing.F90
+++ /dev/null
@@ -1,152 +0,0 @@
-!      #################################
-       MODULE MODI_LIMA_DROPS_HOM_FREEZING
-!      #################################
-!
-INTERFACE
-      SUBROUTINE LIMA_DROPS_HOM_FREEZING (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE, &
-                                        PEXNREF, PPABST,                          &
-                                        PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
-                                        PCRT,                                     &
-                                        P_TH_HONR, P_RR_HONR, P_CR_HONR,          &
-                                        PB_TH, PB_RR, PB_CR, PB_RG                )
-!
-REAL,                  INTENT(IN)    :: PTSTEP 
-CHARACTER(LEN=*),      INTENT(IN)    :: HFMFILE
-LOGICAL,               INTENT(IN)    :: OCLOSE_OUT
-LOGICAL, DIMENSION(:), INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),    INTENT(IN)    :: PEXNREF ! Reference Exner function
-REAL, DIMENSION(:),    INTENT(IN)    :: PPABST  ! abs. pressure at time t
-!
-REAL, DIMENSION(:),    INTENT(IN)    :: PTHT    ! Theta at time t
-REAL, DIMENSION(:),    INTENT(IN)    :: PRVT    ! Water vapor m.r. at t 
-REAL, DIMENSION(:),    INTENT(IN)    :: PRCT    ! Cloud water m.r. at t 
-REAL, DIMENSION(:),    INTENT(IN)    :: PRRT    ! Rain water m.r. at t 
-REAL, DIMENSION(:),    INTENT(IN)    :: PRIT    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:),    INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t 
-REAL, DIMENSION(:),    INTENT(IN)    :: PRGT    ! Graupel m.r. at t 
-!
-REAL, DIMENSION(:),    INTENT(IN)    :: PCRT    ! Rain water C. at t
-!
-REAL, DIMENSION(:),    INTENT(INOUT) :: P_TH_HONR
-REAL, DIMENSION(:),    INTENT(INOUT) :: P_RR_HONR
-REAL, DIMENSION(:),    INTENT(INOUT) :: P_CR_HONR
-REAL, DIMENSION(:),    INTENT(INOUT) :: PB_TH
-REAL, DIMENSION(:),    INTENT(INOUT) :: PB_RR
-REAL, DIMENSION(:),    INTENT(INOUT) :: PB_CR
-REAL, DIMENSION(:),    INTENT(INOUT) :: PB_RG
-!
-END SUBROUTINE LIMA_DROPS_HOM_FREEZING
-END INTERFACE
-END MODULE MODI_LIMA_DROPS_HOM_FREEZING
-!
-!     ######################################################################
-      SUBROUTINE LIMA_DROPS_HOM_FREEZING (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE,   &
-                                          PEXNREF, PPABST,                          &
-                                          PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
-                                          PCRT,                                     &
-                                          P_TH_HONR, P_RR_HONR, P_CR_HONR,          &
-                                          PB_TH, PB_RR, PB_CR, PB_RG                )
-!     ######################################################################
-!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the cold-phase homogeneous
-!!    freezing of CCN, droplets and drops (T<-35°C)
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy*   jan. 2014  add budgets
-!!      B.Vie 10/2016 Bug zero division
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_CST,             ONLY : XP00, XRD, XCPD, XCPV, XCL, XCI, XTT, XLSTT, XLVTT
-USE MODD_PARAM_LIMA,      ONLY : XRTMIN
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-REAL,                  INTENT(IN)    :: PTSTEP 
-CHARACTER(LEN=*),      INTENT(IN)    :: HFMFILE
-LOGICAL,               INTENT(IN)    :: OCLOSE_OUT
-LOGICAL, DIMENSION(:), INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),    INTENT(IN)    :: PEXNREF ! Reference Exner function
-REAL, DIMENSION(:),    INTENT(IN)    :: PPABST  ! abs. pressure at time t
-!
-REAL, DIMENSION(:),    INTENT(IN)    :: PTHT    ! Theta at time t
-REAL, DIMENSION(:),    INTENT(IN)    :: PRVT    ! Water vapor m.r. at t 
-REAL, DIMENSION(:),    INTENT(IN)    :: PRCT    ! Cloud water m.r. at t 
-REAL, DIMENSION(:),    INTENT(IN)    :: PRRT    ! Rain water m.r. at t 
-REAL, DIMENSION(:),    INTENT(IN)    :: PRIT    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:),    INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t 
-REAL, DIMENSION(:),    INTENT(IN)    :: PRGT    ! Graupel m.r. at t 
-!
-REAL, DIMENSION(:),    INTENT(IN)    :: PCRT    ! Rain water C. at t
-!
-REAL, DIMENSION(:),    INTENT(INOUT) :: P_TH_HONR
-REAL, DIMENSION(:),    INTENT(INOUT) :: P_RR_HONR
-REAL, DIMENSION(:),    INTENT(INOUT) :: P_CR_HONR
-REAL, DIMENSION(:),    INTENT(INOUT) :: PB_TH
-REAL, DIMENSION(:),    INTENT(INOUT) :: PB_RR
-REAL, DIMENSION(:),    INTENT(INOUT) :: PB_CR
-REAL, DIMENSION(:),    INTENT(INOUT) :: PB_RG
-!
-!*       0.2   Declarations of local variables :
-!
-REAL, DIMENSION(SIZE(PTHT)) ::  &
-     ZW,       &
-     ZT,       &
-     ZLSFACT,  &
-     ZLVFACT,  &
-     ZTCELSIUS
-!
-!
-!
-!
-!-------------------------------------------------------------------------------
-!
-P_TH_HONR(:) = 0.
-P_RR_HONR(:) = 0.
-P_CR_HONR(:) = 0.
-!
-! Temperature
-ZT(:)  = PTHT(:) * ( PPABST(:)/XP00 ) ** (XRD/XCPD)
-ZTCELSIUS(:) = ZT(:)-XTT                                    ! T [°C]
-!
-ZW(:) = PEXNREF(:)*( XCPD+XCPV*PRVT(:)+XCL*(PRCT(:)+PRRT(:)) &
-     +XCI*(PRIT(:)+PRST(:)+PRGT(:)) )
-ZLSFACT(:) = (XLSTT+(XCPV-XCI)*ZTCELSIUS(:))/ZW(:)          ! L_s/(Pi_ref*C_ph)
-ZLVFACT(:) = (XLVTT+(XCPV-XCL)*ZTCELSIUS(:))/ZW(:)          ! L_v/(Pi_ref*C_ph)
-!
-ZW(:) = 0.0
-
-WHERE( (ZT(:)<XTT-35.0) .AND. (PRRT(:)>XRTMIN(3)) .AND. LDCOMPUTE(:) )
-   P_TH_HONR(:) = PRRT(:)*(ZLSFACT(:)-ZLVFACT(:))
-   P_RR_HONR(:) = - PRRT(:)
-   P_CR_HONR(:) = - PCRT(:)
-   PB_TH(:) = PB_TH(:) + P_TH_HONR(:)
-   PB_RR(:) = PB_RR(:) - PRRT(:)
-   PB_CR(:) = PB_CR(:) - PCRT(:)
-   PB_RG(:) = PB_RG(:) + PRRT(:)
-ENDWHERE
-!
-!
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_DROPS_HOM_FREEZING
diff --git a/src/arome/micro/lima_drops_self_collection.F90 b/src/arome/micro/lima_drops_self_collection.F90
deleted file mode 100644
index adfa0adff737a653b4162183da102ede499ce06a..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_drops_self_collection.F90
+++ /dev/null
@@ -1,131 +0,0 @@
-!      #################################
-       MODULE MODI_LIMA_DROPS_SELF_COLLECTION
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_DROPS_SELF_COLLECTION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, &
-                                             PRHODREF,                       &
-                                             PCRT, PLBDR, PLBDR3,            &
-                                             P_CR_SCBU,                      &
-                                             PA_CR                           )
-!
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE 
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF ! Reference Exner function
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PCRT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR3  ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_SCBU
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CR
-!
-END SUBROUTINE LIMA_DROPS_SELF_COLLECTION
-END INTERFACE
-END MODULE MODI_LIMA_DROPS_SELF_COLLECTION
-!
-!     ######################################################################
-      SUBROUTINE LIMA_DROPS_SELF_COLLECTION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, &
-                                             PRHODREF,                       &
-                                             PCRT, PLBDR, PLBDR3,            &
-                                             P_CR_SCBU,                      &
-                                             PA_CR                           )
-!     ######################################################################
-!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the cold-phase homogeneous
-!!    freezing of CCN, droplets and drops (T<-35°C)
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy*   jan. 2014  add budgets
-!!      B.Vie 10/2016 Bug zero division
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_PARAM_LIMA,      ONLY : XCTMIN
-USE MODD_PARAM_LIMA_WARM, ONLY : XACCR1, XSCBUEXP1, XSCBU_EFF1, XSCBU_EFF2, &
-                                 XSCBU2, XSCBU3
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE 
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF ! Reference Exner function
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PCRT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR3  ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_SCBU
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CR
-!
-!*       0.2   Declarations of local variables :
-!
-REAL, DIMENSION(SIZE(PCRT)) :: &
-                                           ZW1, & ! work arrays
-                                           ZW2, &
-                                           ZW3, &
-                                           ZW4, &
-                                           ZSCBU
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       1.     PRELIMINARY COMPUTATIONS
-!	        ------------------------
-!
-!
-P_CR_SCBU(:)=0.
-!
-WHERE( PCRT(:)>XCTMIN(3) .AND. LDCOMPUTE(:) )
-   ZW4(:)  = XACCR1 / PLBDR(:)                ! Mean diameter
-END WHERE
-ZSCBU(:)=0.
-WHERE (ZW4(:)>=XSCBU_EFF1 .AND. PCRT(:)>XCTMIN(3) .AND. LDCOMPUTE(:)) &
-     ZSCBU(:) = EXP(XSCBUEXP1*(ZW4(:)-XSCBU_EFF1))  ! coalescence efficiency
-WHERE (ZW4(:)>=XSCBU_EFF2 .AND. LDCOMPUTE(:)) ZSCBU(:) = 0.0  ! Break-up
-!
-ZW1(:) = 0.0
-ZW2(:) = 0.0
-ZW3(:) = 0.0
-!
-WHERE (PCRT(:)>XCTMIN(3) .AND. (ZW4(:)>1.E-4) .AND. LDCOMPUTE(:))  ! analytical integration
-   ZW1(:) = XSCBU2 * PCRT(:)**2 / PLBDR3(:)   ! D>100 10-6 m
-   ZW3(:) = ZW1(:)*ZSCBU(:)
-END WHERE
-!
-WHERE (PCRT(:)>XCTMIN(3) .AND. (ZW4(:)<=1.E-4) .AND. LDCOMPUTE(:))
-   ZW2(:) = XSCBU3 *(PCRT(:) / PLBDR3(:))**2  ! D<100 10-6 m
-   ZW3(:) = ZW2(:)
-END WHERE
-!
-P_CR_SCBU(:) = - ZW3(:) * PRHODREF(:)
-!
-PA_CR(:) = PA_CR(:) + P_CR_SCBU(:)
-!
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_DROPS_SELF_COLLECTION
diff --git a/src/arome/micro/lima_functions.F90 b/src/arome/micro/lima_functions.F90
deleted file mode 100644
index 00bd01a6adb7f0ce8d097d200abd4af2a805a0c9..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_functions.F90
+++ /dev/null
@@ -1,380 +0,0 @@
-!#################################
-        MODULE MODI_LIMA_FUNCTIONS
-!#################################
-!
-INTERFACE
-!
-FUNCTION COUNTJV(LTAB,I1,I2,I3) RESULT(IC)
-  LOGICAL, DIMENSION(:,:,:),   INTENT(IN)           :: LTAB 
-  INTEGER, DIMENSION(:),       INTENT(INOUT)        :: I1,I2,I3 
-  INTEGER                                           :: IC
-END FUNCTION COUNTJV
-!
-FUNCTION MOMG (PALPHA,PNU,PP) RESULT (PMOMG)
-  REAL,                        INTENT(IN)           :: PALPHA 
-  REAL,                        INTENT(IN)           :: PNU    
-  REAL,                        INTENT(IN)           :: PP     
-  REAL                                              :: PMOMG  
-END FUNCTION MOMG
-!
-FUNCTION RECT(PA,PB,PX,PX1,PX2)  RESULT(PRECT)
-  REAL,                        INTENT(IN)           :: PA
-  REAL,                        INTENT(IN)           :: PB
-  REAL, DIMENSION(:),          INTENT(IN)           :: PX
-  REAL,                        INTENT(IN)           :: PX1
-  REAL,                        INTENT(IN)           :: PX2
-  REAL, DIMENSION(SIZE(PX,1))                       :: PRECT
-END FUNCTION RECT
-!
-FUNCTION DELTA(PA,PB,PX,PX1,PX2)  RESULT(PDELTA)
-  REAL,                        INTENT(IN)           :: PA
-  REAL,                        INTENT(IN)           :: PB
-  REAL, DIMENSION(:),          INTENT(IN)           :: PX
-  REAL,                        INTENT(IN)           :: PX1
-  REAL,                        INTENT(IN)           :: PX2
-  REAL, DIMENSION(SIZE(PX,1))                       :: PDELTA
-END FUNCTION DELTA
-!
-FUNCTION DELTA_VEC(PA,PB,PX,PX1,PX2)  RESULT(PDELTA_VEC)
-  REAL,                        INTENT(IN)           :: PA
-  REAL,                        INTENT(IN)           :: PB
-  REAL, DIMENSION(:),          INTENT(IN)           :: PX
-  REAL, DIMENSION(:),          INTENT(IN)           :: PX1
-  REAL, DIMENSION(:),          INTENT(IN)           :: PX2
-  REAL, DIMENSION(SIZE(PX,1))                       :: PDELTA_VEC
-END FUNCTION DELTA_VEC
-!
-FUNCTION ARTH(FIRST,INCREMENT,N) RESULT(PARTH)
-  REAL,                        INTENT(IN)           :: FIRST,INCREMENT
-  INTEGER,                     INTENT(IN)           :: N
-  REAL, DIMENSION(N)                                :: PARTH
-END FUNCTION ARTH
-!
-FUNCTION gammln(xx) RESULT(pgammln)
-  REAL,                        INTENT(IN)           :: xx
-  REAL                                              :: pgammln
-END FUNCTION gammln
-!
-SUBROUTINE GAULAG(x,w,n,alf)
-  INTEGER,                     INTENT(IN)           :: n
-  REAL,                        INTENT(IN)           :: alf
-  REAL, DIMENSION(n),          INTENT(INOUT)        :: w, x
-END SUBROUTINE GAULAG
-!
-SUBROUTINE GAUHER(x,w,n)
-  INTEGER,                     INTENT(IN)           :: n
-  REAL, DIMENSION(n),          INTENT(INOUT)        :: w, x
-END SUBROUTINE GAUHER
-!
-END INTERFACE
-!
-END MODULE MODI_LIMA_FUNCTIONS
-!
-!------------------------------------------------------------------------------
-!
-!#########################################
-FUNCTION COUNTJV(LTAB,I1,I2,I3) RESULT(IC)
-!#########################################
-!
-  IMPLICIT NONE
-!
-  LOGICAL, DIMENSION(:,:,:),   INTENT(IN)           :: LTAB     ! Mask
-  INTEGER, DIMENSION(:),       INTENT(INOUT)        :: I1,I2,I3 ! Used to replace the COUNT and PACK
-  INTEGER :: JI,JJ,JK,IC
-!
-  IC = 0
-  DO JK = 1,SIZE(LTAB,3)
-     DO JJ = 1,SIZE(LTAB,2)
-        DO JI = 1,SIZE(LTAB,1)
-           IF( LTAB(JI,JJ,JK) ) THEN
-              IC = IC +1
-              I1(IC) = JI
-              I2(IC) = JJ
-              I3(IC) = JK
-           END IF
-        END DO
-     END DO
-  END DO
-!
-END FUNCTION COUNTJV
-!
-!------------------------------------------------------------------------------
-!
-!###########################################
-FUNCTION MOMG (PALPHA,PNU,PP) RESULT (PMOMG)
-!###########################################
-!
-! auxiliary routine used to compute the Pth moment order of the generalized
-! gamma law
-!
-  USE MODI_GAMMA
-!
-  IMPLICIT NONE
-!
-  REAL, INTENT(IN)     :: PALPHA ! first shape parameter of the dimensionnal distribution
-  REAL, INTENT(IN)     :: PNU    ! second shape parameter of the dimensionnal distribution
-  REAL, INTENT(IN)     :: PP     ! order of the moment
-  REAL     :: PMOMG  ! result: moment of order ZP
-!
-  PMOMG = GAMMA_X0D(PNU+PP/PALPHA)/GAMMA_X0D(PNU)
-!
-END FUNCTION MOMG
-!
-!------------------------------------------------------------------------------
-!
-!#############################################
-FUNCTION RECT(PA,PB,PX,PX1,PX2)  RESULT(PRECT)
-!#############################################
-!
-!     PRECT takes the value PA if PX1<=PX<PX2, and PB outside the [PX1;PX2[ interval
-!
-  IMPLICIT NONE
-!
-  REAL,                        INTENT(IN)           :: PA
-  REAL,                        INTENT(IN)           :: PB
-  REAL, DIMENSION(:),          INTENT(IN)           :: PX
-  REAL,                        INTENT(IN)           :: PX1
-  REAL,                        INTENT(IN)           :: PX2
-  REAL, DIMENSION(SIZE(PX,1))                       :: PRECT
-!
-  PRECT(:) = PB
-  WHERE (PX(:).GE.PX1 .AND. PX(:).LT.PX2)
-     PRECT(:) = PA
-  END WHERE
-  RETURN
-!
-END FUNCTION RECT
-!
-!-------------------------------------------------------------------------------
-!
-!###############################################
-FUNCTION DELTA(PA,PB,PX,PX1,PX2)  RESULT(PDELTA)
-!###############################################
-!
-!     PDELTA takes the value PA if PX<PX1, and PB if PX>=PX2
-!     PDELTA is a cubic interpolation between PA and PB for PX between PX1 and PX2 
-!
-  IMPLICIT NONE
-!
-  REAL,                        INTENT(IN)           :: PA
-  REAL,                        INTENT(IN)           :: PB
-  REAL, DIMENSION(:),          INTENT(IN)           :: PX
-  REAL,                        INTENT(IN)           :: PX1
-  REAL,                        INTENT(IN)           :: PX2
-  REAL, DIMENSION(SIZE(PX,1))                       :: PDELTA
-!
-!*       local variable
-!
-  REAL                                              :: ZA
-!
-  ZA = 6.0*(PA-PB)/(PX2-PX1)**3
-  WHERE     (PX(:).LT.PX1)
-     PDELTA(:) = PA
-  ELSEWHERE (PX(:).GE.PX2)
-     PDELTA(:) = PB
-  ELSEWHERE
-     PDELTA(:) =   PA + ZA*PX1**2*(PX1/6.0 - 0.5*PX2)              &
-          + ZA*PX1*PX2*                          (PX(:))    &
-          - (0.5*ZA*(PX1+PX2))*                  (PX(:)**2) & 
-          + (ZA/3.0)*                            (PX(:)**3)
-  END WHERE
-  RETURN
-!
-END FUNCTION DELTA
-!
-!-------------------------------------------------------------------------------
-!
-!#######################################################
-FUNCTION DELTA_VEC(PA,PB,PX,PX1,PX2)  RESULT(PDELTA_VEC)
-!#######################################################
-!
-!    Same as DELTA for vectorized PX1 and PX2 arguments
-!
-  IMPLICIT NONE
-!
-  REAL,                        INTENT(IN)           :: PA
-  REAL,                        INTENT(IN)           :: PB
-  REAL, DIMENSION(:),          INTENT(IN)           :: PX
-  REAL, DIMENSION(:),          INTENT(IN)           :: PX1
-  REAL, DIMENSION(:),          INTENT(IN)           :: PX2
-  REAL, DIMENSION(SIZE(PX,1))                       :: PDELTA_VEC
-!
-!*       local variable
-!
-  REAL, DIMENSION(SIZE(PX,1))                       :: ZA
-!
-  ZA(:) = 0.0
-  wHERE     (PX(:)<=PX1(:))
-     PDELTA_VEC(:) = PA
-  ELSEWHERE (PX(:)>=PX2(:))
-     PDELTA_VEC(:) = PB
-  ELSEWHERE
-     ZA(:)         = 6.0*(PA-PB)/(PX2(:)-PX1(:))**3
-     PDELTA_VEC(:) =   PA + ZA(:)*PX1(:)**2*(PX1(:)/6.0 - 0.5*PX2(:))           &
-          + ZA(:)*PX1(:)*PX2(:)*                          (PX(:))    &
-          - (0.5*ZA(:)*(PX1(:)+PX2(:)))*                  (PX(:)**2) & 
-          + (ZA(:)/3.0)*                                  (PX(:)**3)
-  END WHERE
-  RETURN
-!
-END FUNCTION DELTA_VEC
-!
-!-------------------------------------------------------------------------------
-!
-!#######################################################
-FUNCTION ARTH(FIRST,INCREMENT,N) RESULT(PARTH)
-!#######################################################
-  REAL,INTENT(IN) :: FIRST,INCREMENT
-  INTEGER,INTENT(IN) :: N
-  REAL,DIMENSION(N) :: PARTH
-  INTEGER :: K
-  
-  DO K=1,N
-     PARTH(K)=FIRST+INCREMENT*(K-1)
-  END DO
-END FUNCTION ARTH
-!
-!-------------------------------------------------------------------------------
-!
-!#######################################################
-FUNCTION gammln(xx) RESULT(pgammln)
-!#######################################################
-
-  USE MODI_LIMA_FUNCTIONS, ONLY: ARTH
-
-  IMPLICIT NONE
-  REAL, INTENT(IN) :: xx
-  REAL :: pgammln
-  REAL :: tmp,x
-  REAL :: stp = 2.5066282746310005
-  REAL, DIMENSION(6) :: coef = (/76.18009172947146,& 
-       -86.50532032941677,24.01409824083091,& 
-       -1.231739572450155,0.1208650973866179e-2,&
-       -0.5395239384953e-5/)
-  x=xx
-  tmp=x+5.5
-  tmp=(x+0.5)*log(tmp)-tmp
-  pgammln=tmp+log(stp*(1.000000000190015+&
-       sum(coef(:)/arth(x+1.,1.,size(coef))))/x)
-!
-END FUNCTION gammln
-!
-!-------------------------------------------------------------------------------
-!
-!###########################
-SUBROUTINE gaulag(x,w,n,alf)
-!###########################
-  INTEGER,                     INTENT(IN)           :: n
-  REAL,                        INTENT(IN)           :: alf
-  INTEGER MAXIT
-  REAL w(n),x(n)
-  DOUBLE PRECISION EPS
-  PARAMETER (EPS=3.D-14,MAXIT=10)
-  INTEGER i,its,j
-  REAL ai
-  DOUBLE PRECISION p1,p2,p3,pp,z,z1
-!
-  REAL SUMW
-!
-  do 13 i=1,n
-     if(i.eq.1)then
-        z=(1.+alf)*(3.+.92*alf)/(1.+2.4*n+1.8*alf)
-     else if(i.eq.2)then
-        z=z+(15.+6.25*alf)/(1.+.9*alf+2.5*n)
-     else
-        ai=i-2
-        z=z+((1.+2.55*ai)/(1.9*ai)+1.26*ai*alf/(1.+3.5*ai))* &
-             (z-x(i-2))/(1.+.3*alf)
-     endif
-     do 12 its=1,MAXIT
-        p1=1.d0
-        p2=0.d0
-        do 11 j=1,n
-           p3=p2
-           p2=p1
-           p1=((2*j-1+alf-z)*p2-(j-1+alf)*p3)/j
-11      continue
-        pp=(n*p1-(n+alf)*p2)/z
-        z1=z
-        z=z1-p1/pp
-        if(abs(z-z1).le.EPS)goto 1
-12   continue
-1    x(i)=z
-     w(i)=-exp(gammln(alf+n)-gammln(float(n)))/(pp*n*p2)
-13 continue
-!
-! NORMALISATION
-!
-  SUMW = 0.0
-  DO 14 I=1,N
-     SUMW = SUMW + W(I)
-14 CONTINUE
-  DO 15 I=1,N
-     W(I) = W(I)/SUMW
-15 CONTINUE
-!
-  return
-END SUBROUTINE gaulag
-!
-!------------------------------------------------------------------------------
-!
-!##########################################
-SUBROUTINE gauher(x,w,n)
-!##########################################
-  INTEGER, INTENT(IN) ::  n
-  INTEGER MAXIT
-  REAL w(n),x(n)
-  DOUBLE PRECISION EPS,PIM4
-  PARAMETER (EPS=3.D-14,PIM4=.7511255444649425D0,MAXIT=10)
-  INTEGER i,its,j,m
-  DOUBLE PRECISION p1,p2,p3,pp,z,z1
-!
-  REAL SUMW
-!
-  m=(n+1)/2
-  do 13 i=1,m
-     if(i.eq.1)then
-        z=sqrt(float(2*n+1))-1.85575*(2*n+1)**(-.16667)
-     else if(i.eq.2)then
-        z=z-1.14*n**.426/z
-     else if (i.eq.3)then
-        z=1.86*z-.86*x(1)
-     else if (i.eq.4)then
-        z=1.91*z-.91*x(2)
-     else
-        z=2.*z-x(i-2)
-     endif
-     do 12 its=1,MAXIT
-        p1=PIM4
-        p2=0.d0
-        do 11 j=1,n
-           p3=p2
-           p2=p1
-           p1=z*sqrt(2.d0/j)*p2-sqrt(dble(j-1)/dble(j))*p3
-11      continue
-        pp=sqrt(2.d0*n)*p2
-        z1=z
-        z=z1-p1/pp
-        if(abs(z-z1).le.EPS)goto 1
-12   continue
-1    x(i)=z
-     x(n+1-i)=-z
-     pp=pp/PIM4 ! NORMALIZATION
-     w(i)=2.0/(pp*pp)
-     w(n+1-i)=w(i)
-13 continue
-!
-! NORMALISATION
-!
-  SUMW = 0.0
-  DO 14 I=1,N
-     SUMW = SUMW + W(I)
-14 CONTINUE
-  DO 15 I=1,N
-     W(I) = W(I)/SUMW
-15 CONTINUE
-!
-  return
-END SUBROUTINE gauher
-!
-!------------------------------------------------------------------------------
diff --git a/src/arome/micro/lima_graupel.F90 b/src/arome/micro/lima_graupel.F90
deleted file mode 100644
index 4cd28def544eaf47f33e0ebb179bedaa1aec3d01..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_graupel.F90
+++ /dev/null
@@ -1,565 +0,0 @@
-!      #################################
-       MODULE MODI_LIMA_GRAUPEL
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_GRAUPEL (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE,                &
-                            PRHODREF, PPRES, PT, PKA, PDV, PCJ,                    &
-                            PRVT, PRCT, PRRT, PRIT, PRST, PRGT,                    &
-                            PCCT, PCRT, PCIT,                                      &
-                            PLBDC, PLBDR, PLBDS, PLBDG,                            &
-                            PLVFACT, PLSFACT,                                      &
-                            P_TH_WETG, P_RC_WETG, P_CC_WETG, P_RR_WETG, P_CR_WETG, &
-                            P_RI_WETG, P_CI_WETG, P_RS_WETG, P_RG_WETG, P_RH_WETG, &
-                            P_TH_DRYG, P_RC_DRYG, P_CC_DRYG, P_RR_DRYG, P_CR_DRYG, &
-                            P_RI_DRYG, P_CI_DRYG, P_RS_DRYG, P_RG_DRYG,            &
-                            P_RI_HMG, P_CI_HMG, P_RG_HMG,                          &
-                            P_TH_GMLT, P_RR_GMLT, P_CR_GMLT,                       &
-                            PA_TH, PA_RC, PA_CC, PA_RR, PA_CR,                     &
-                            PA_RI, PA_CI, PA_RS, PA_RG, PA_RH                      )
-!
-REAL,                 INTENT(IN)    :: PTSTEP 
-CHARACTER(LEN=*),     INTENT(IN)    :: HFMFILE 
-LOGICAL,              INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PPRES    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PT   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PKA   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PDV   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCJ   ! 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRVT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRGT    !
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PCCT    !
-REAL, DIMENSION(:),   INTENT(IN)    :: PCRT    !
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT    !
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDC   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDG   ! 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PLVFACT ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RH_WETG
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_DRYG
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_HMG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_HMG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_HMG
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_GMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_GMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_GMLT
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RS
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RG
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RH
-!
-END SUBROUTINE LIMA_GRAUPEL
-END INTERFACE
-END MODULE MODI_LIMA_GRAUPEL
-!
-!     ######################################################################
-      SUBROUTINE LIMA_GRAUPEL (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE,                &
-                               PRHODREF, PPRES, PT, PKA, PDV, PCJ,                    &
-                               PRVT, PRCT, PRRT, PRIT, PRST, PRGT,                    &
-                               PCCT, PCRT, PCIT,                                      &
-                               PLBDC, PLBDR, PLBDS, PLBDG,                            &
-                               PLVFACT, PLSFACT,                                      &
-                               P_TH_WETG, P_RC_WETG, P_CC_WETG, P_RR_WETG, P_CR_WETG, &
-                               P_RI_WETG, P_CI_WETG, P_RS_WETG, P_RG_WETG, P_RH_WETG, &
-                               P_TH_DRYG, P_RC_DRYG, P_CC_DRYG, P_RR_DRYG, P_CR_DRYG, &
-                               P_RI_DRYG, P_CI_DRYG, P_RS_DRYG, P_RG_DRYG,            &
-                               P_RI_HMG, P_CI_HMG, P_RG_HMG,                          &
-                               P_TH_GMLT, P_RR_GMLT, P_CR_GMLT,                       &
-                               PA_TH, PA_RC, PA_CC, PA_RR, PA_CR,                     &
-                               PA_RI, PA_CI, PA_RS, PA_RG, PA_RH                      )
-!     ######################################################################
-!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the cold-phase homogeneous
-!!    freezing of CCN, droplets and drops (T<-35°C)
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy*   jan. 2014  add budgets
-!!      B.Vie 10/2016 Bug zero division
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_CST,              ONLY : XTT, XMD, XMV, XRD, XRV, XLVTT, XLMTT, XESTT, XCL, XCI, XCPV
-USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCEXVT, LHAIL_LIMA
-USE MODD_PARAM_LIMA_MIXED, ONLY : XCXG, XDG, X0DEPG, X1DEPG, NGAMINC,                             &
-                                  XFCDRYG, XFIDRYG, XCOLIG, XCOLSG, XCOLEXIG, XCOLEXSG,           &
-                                  XFSDRYG, XLBSDRYG1, XLBSDRYG2, XLBSDRYG3, XKER_SDRYG,           &
-                                  XFRDRYG, XLBRDRYG1, XLBRDRYG2, XLBRDRYG3, XKER_RDRYG,           &
-                                  XHMTMIN, XHMTMAX, XHMLINTP1, XHMLINTP2, XHM_FACTG, XGAMINC_HMC, &
-                                  XEX0DEPG, XEX1DEPG,                                             &
-                                  XDRYINTP1R, XDRYINTP1S, XDRYINTP1G,                             &
-                                  XDRYINTP2R, XDRYINTP2S, XDRYINTP2G,                             &
-                                  NDRYLBDAR, NDRYLBDAS, NDRYLBDAG
-USE MODD_PARAM_LIMA_COLD,  ONLY : XMNU0, XCXS, XBS
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-REAL,                 INTENT(IN)    :: PTSTEP 
-CHARACTER(LEN=*),     INTENT(IN)    :: HFMFILE 
-LOGICAL,              INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PPRES    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PT   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PKA   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PDV   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCJ   ! 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRVT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRGT    !
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PCCT    !
-REAL, DIMENSION(:),   INTENT(IN)    :: PCRT    !
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT    !
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDC   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDG   ! 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PLVFACT ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RH_WETG
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_DRYG
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_HMG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_HMG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_HMG
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_GMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_GMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_GMLT
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RS
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RG
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RH
-!
-!*       0.2   Declarations of local variables :
-!
-LOGICAL, DIMENSION(SIZE(PRCT))  :: GDRY
-INTEGER                         :: IGDRY
-INTEGER                         :: JJ
-!
-REAL,    DIMENSION(SIZE(PRCT))  :: Z1, Z2, Z3, Z4
-REAL,    DIMENSION(SIZE(PRCT))  :: ZZX, ZZW, ZZW1, ZZW2, ZZW3, ZZW4, ZZW5, ZZW6, ZZW7
-REAL,    DIMENSION(SIZE(PRCT))  :: ZRDRYG, ZRWETG
-!
-INTEGER, DIMENSION(SIZE(PRCT))  :: IVEC1,IVEC2        ! Vectors of indices
-REAL,    DIMENSION(SIZE(PRCT))  :: ZVEC1,ZVEC2, ZVEC3 ! Work vectors
-!
-INTEGER                         :: NHAIL
-!
-!-------------------------------------------------------------------------------
-!
-!
-P_RC_WETG(:) = 0.
-P_CC_WETG(:) = 0.
-P_RR_WETG(:) = 0.
-P_CR_WETG(:) = 0.
-P_RI_WETG(:) = 0.
-P_CI_WETG(:) = 0.
-P_RS_WETG(:) = 0.
-P_RG_WETG(:) = 0.
-P_RH_WETG(:) = 0.
-!
-P_RC_DRYG(:) = 0.
-P_CC_DRYG(:) = 0.
-P_RR_DRYG(:) = 0.
-P_CR_DRYG(:) = 0.
-P_RI_DRYG(:) = 0.
-P_CI_DRYG(:) = 0.
-P_RS_DRYG(:) = 0.
-P_RG_DRYG(:) = 0.
-!
-P_RI_HMG(:) = 0.
-P_CI_HMG(:) = 0.
-P_RG_HMG(:) = 0.
-!
-P_RR_GMLT(:) = 0.
-P_CR_GMLT(:) = 0.
-!
-ZZW1(:) = 0. ! RCDRYG
-ZZW2(:) = 0. ! RIDRYG
-ZZW3(:) = 0. ! RSDRYG
-ZZW4(:) = 0. ! RRDRYG
-ZZW5(:) = 0. ! RIWETG
-ZZW6(:) = 0. ! RSWETG
-ZZW7(:) = 0. ! 
-!
-ZRDRYG(:) = 0.
-ZRWETG(:) = 0.
-!
-!
-!*       1.  Graupel growth by collection (dry or wet case)
-!        --------------------------------------------------
-!
-!            1.a Collection of rc and ri in the dry mode
-!            --------------------------------------------
-!
-WHERE( PRGT(:)>XRTMIN(6) .AND. LDCOMPUTE(:) )
-   ZZW(:) = PLBDG(:)**(XCXG-XDG-2.0) * PRHODREF(:)**(-XCEXVT)
-   ZZW1(:) = XFCDRYG * PRCT(:) * ZZW(:)                                   ! RCDRYG - rc collected by graupel in dry mode 
-   ZZW2(:) = XFIDRYG * EXP( XCOLEXIG*(PT(:)-XTT) ) * PRIT(:) * ZZW(:) ! RIDRYG - ri collected by graupel in dry mode
-END WHERE
-!
-!*           1.b Collection of rs in the dry mode
-!            ------------------------------------
-!
-GDRY(:) = (PRST(:)>XRTMIN(5)) .AND. (PRGT(:)>XRTMIN(6)) .AND. LDCOMPUTE(:)
-!
-WHERE( GDRY )
-!
-!*       Select the (ZLBDAG,ZLBDAS) couplet
-!
-   ZVEC1(:) = PLBDG(:)
-   ZVEC2(:) = PLBDS(:)
-!
-!*       find the next lower indice for the ZLBDAG and for the ZLBDAS
-!        in the geometrical set of (Lbda_g,Lbda_s) couplet use to
-!        tabulate the SDRYG-kernel
-!
-   ZVEC1(:) = MAX( 1.00001, MIN( FLOAT(NDRYLBDAG)-0.00001,           &
-                         XDRYINTP1G * LOG( ZVEC1(:) ) + XDRYINTP2G ) )
-   IVEC1(:) = INT( ZVEC1(:) )
-   ZVEC1(:) = ZVEC1(:) - FLOAT( IVEC1(:) )
-!
-   ZVEC2(:) = MAX( 1.00001, MIN( FLOAT(NDRYLBDAS)-0.00001,           &
-                         XDRYINTP1S * LOG( ZVEC2(:) ) + XDRYINTP2S ) )
-   IVEC2(:) = INT( ZVEC2(:) )
-   ZVEC2(:) = ZVEC2(:) - FLOAT( IVEC2(:) )
-!
-!*       perform the bilinear interpolation of the normalized
-!        SDRYG-kernel
-   !
-   Z1(:) = GET_XKER_SDRYG(IVEC1(:)+1,IVEC2(:)+1)
-   Z2(:) = GET_XKER_SDRYG(IVEC1(:)+1,IVEC2(:)  )
-   Z3(:) = GET_XKER_SDRYG(IVEC1(:)  ,IVEC2(:)+1)
-   Z4(:) = GET_XKER_SDRYG(IVEC1(:)  ,IVEC2(:)  )
-   ZVEC3(:) =  (      Z1(:)* ZVEC2(:)          &
-                    - Z2(:)*(ZVEC2(:) - 1.0) ) &
-      			 	                            *  ZVEC1(:)    &
-                 - (  Z3(:)* ZVEC2(:)          &
-                    - Z4(:)*(ZVEC2(:) - 1.0) ) &
-       			                                    * (ZVEC1(:) - 1.0)
-   ZZW(:) = ZVEC3(:)
-!
-   ZZW3(:) = XFSDRYG * ZZW(:) * EXP( XCOLEXSG*(PT(:)-XTT) )  & ! RSDRYG - rs collected by graupel in dry mode
-                    *( PLBDS(:)**(XCXS-XBS) )*( PLBDG(:)**XCXG )    &
-                    *( PRHODREF(:)**(-XCEXVT-1.) )                      &
-                    *( XLBSDRYG1/( PLBDG(:)**2                 ) + &
-                       XLBSDRYG2/( PLBDG(:)   * PLBDS(:)   ) + &
-                       XLBSDRYG3/(                  PLBDS(:)**2) )
-END WHERE
-!
-!*           1.c  Collection of rr in the dry mode
-!            -------------------------------------
-!
-GDRY(:) = (PRRT(:)>XRTMIN(3)) .AND. (PRGT(:)>XRTMIN(6)) .AND. LDCOMPUTE(:)
-!
-WHERE( GDRY )
-!
-!*       Select the (ZLBDAG,ZLBDAR) couplet
-!
-   ZVEC1(:) = PLBDG(:)
-   ZVEC2(:) = PLBDR(:)
-!
-!*       Find the next lower indice for the ZLBDAG and for the ZLBDAR
-!        in the geometrical set of (Lbda_g,Lbda_r) couplet use to
-!        tabulate the RDRYG-kernel
-!
-   ZVEC1(:) = MAX( 1.00001, MIN( FLOAT(NDRYLBDAG)-0.00001,           &
-                         XDRYINTP1G * LOG( ZVEC1(:) ) + XDRYINTP2G ) )
-   IVEC1(:) = INT( ZVEC1(:) )
-   ZVEC1(:) = ZVEC1(:) - FLOAT( IVEC1(:) )
-!
-   ZVEC2(:) = MAX( 1.00001, MIN( FLOAT(NDRYLBDAR)-0.00001,           &
-                         XDRYINTP1R * LOG( ZVEC2(:) ) + XDRYINTP2R ) )
-   IVEC2(:) = INT( ZVEC2(:) )
-   ZVEC2(:) = ZVEC2(:) - FLOAT( IVEC2(:) )
-!
-!*       Perform the bilinear interpolation of the normalized
-!        RDRYG-kernel
-!
-   Z1(:) = GET_XKER_RDRYG(IVEC1(:)+1,IVEC2(:)+1)
-   Z2(:) = GET_XKER_RDRYG(IVEC1(:)+1,IVEC2(:)  )
-   Z3(:) = GET_XKER_RDRYG(IVEC1(:)  ,IVEC2(:)+1)
-   Z4(:) = GET_XKER_RDRYG(IVEC1(:)  ,IVEC2(:)  )
-      ZVEC3(:) =  (   Z1(:)* ZVEC2(:)          &
-                    - Z2(:)*(ZVEC2(:) - 1.0) ) &
-                     			 	             *  ZVEC1(:)   &
-                 - (  Z3(:)* ZVEC2(:)          &
-                    - Z4(:)*(ZVEC2(:) - 1.0) ) &
-                                 			     * (ZVEC1(:) - 1.0)
-   ZZW(:) = ZVEC3(:)
-!
-! BVIE manque PCRT ???????????????????????????????????
-!      ZZW4(:) = XFRDRYG * ZZW(:)                                 & ! RRDRYG
-   ZZW4(:) = XFRDRYG * ZZW(:) * PCRT(:)                   & ! RRDRYG
-                    *( PLBDG(:)**XCXG ) * ( PRHODREF(:)**(-XCEXVT-1.) ) &
-                    *( XLBRDRYG1/( PLBDG(:)**2                   ) + &
-                       XLBRDRYG2/( PLBDG(:)   * PLBDR(:)     ) + &
-                       XLBRDRYG3/(                  PLBDR(:)**2) ) / PLBDR(:)**3
-END WHERE
-!
-!            1.d Total collection in the dry mode
-!            ------------------------------------
-!
-ZRDRYG(:) = ZZW1(:) + ZZW2(:) + ZZW3(:) + ZZW4(:)
-!
-!            1.e Collection in the wet mode
-!            ------------------------------
-!
-ZZW(:) = 0.0
-WHERE( PRGT(:)>XRTMIN(6) .AND. LDCOMPUTE(:) )
-   ZZW5(:) = ZZW2(:) / (XCOLIG*EXP(XCOLEXIG*(PT(:)-XTT)) ) ! RIWETG
-   ZZW6(:) = ZZW3(:) / (XCOLSG*EXP(XCOLEXSG*(PT(:)-XTT)) ) ! RSWETG
-!
-   ZZW(:) = PRVT(:)*PPRES(:)/((XMV/XMD)+PRVT(:)) ! Vapor pressure
-   ZZW(:) = PKA(:)*(XTT-PT(:)) +                                  &
-              ( PDV(:)*(XLVTT + ( XCPV - XCL ) * ( PT(:) - XTT ))   &
-                          *(XESTT-ZZW(:))/(XRV*PT(:))             )
-!
-! Total mass gained by graupel in wet mode
-   ZRWETG(:)  = MAX( 0.0,                                                  &
-                   ( ZZW(:) * ( X0DEPG*           PLBDG(:)**XEX0DEPG +     &
-                                    X1DEPG*PCJ(:)*PLBDG(:)**XEX1DEPG ) +   &
-                   ( ZZW5(:)+ZZW6(:) ) *                            &
-                   ( PRHODREF(:)*(XLMTT+(XCI-XCL)*(XTT-PT(:)))   ) ) / &
-                                   ( PRHODREF(:)*(XLMTT-XCL*(XTT-PT(:))) )   )
-END WHERE
-!
-!            1.f Wet mode and partial conversion to hail
-!            -------------------------------------------
-!
-ZZW(:) = 0.0
-NHAIL = 0.
-IF (LHAIL_LIMA) NHAIL = 1. 
-WHERE( LDCOMPUTE(:)      .AND. PRGT(:)>XRTMIN(6)        .AND. PT(:)<XTT       &
-                             .AND. ZRDRYG(:)>=ZRWETG(:) .AND. ZRWETG(:)>0.0 ) 
-!
-! Mass of rain and cloud droplets frozen by graupel in wet mode : RCWETG + RRWETG = RWETG - RIWETG - RSWETG
-   ZZW7(:) = ZRWETG(:) - ZZW5(:) - ZZW6(:)
-!
-! assume a linear percent of conversion of graupel into hail
-! ZZW = percentage of graupel transformed
-!
-   ZZW(:) = ZRDRYG(:)*NHAIL/(ZRWETG(:)+ZRDRYG(:)) 
-!
-   P_RC_WETG(:) = - ZZW1(:)
-   P_CC_WETG(:) = P_RC_WETG(:) * PCCT(:)/MAX(PRCT(:),XRTMIN(2))
-   P_RR_WETG(:) = - ZZW7(:) + ZZW1(:)
-   P_CR_WETG(:) = P_RR_WETG(:) * PCRT(:)/MAX(PRRT(:),XRTMIN(3))
-   P_RI_WETG(:) = - ZZW5(:)
-   P_CI_WETG(:) = P_RI_WETG(:) * PCIT(:)/MAX(PRIT(:),XRTMIN(4))
-   P_RS_WETG(:) = - ZZW6(:)
-   P_RG_WETG(:) = - PRGT(:)/PTSTEP * ZZW(:) + ZRWETG(:) * (1.-ZZW(:))
-   P_RH_WETG(:) =   PRGT(:)/PTSTEP * ZZW(:) + ZRWETG(:) *     ZZW(:)
-   !
-   P_TH_WETG(:) = ZZW7(:) * (PLSFACT(:)-PLVFACT(:))
-END WHERE
-!
-!            1.g Dry mode
-!            ------------
-!
-WHERE( LDCOMPUTE(:)      .AND. PRGT(:)>XRTMIN(6)       .AND. PT(:)<XTT       &
-                             .AND. ZRDRYG(:)<ZRWETG(:) .AND. ZRDRYG(:)>0.0 )
-   !
-   P_RC_DRYG(:) = - ZZW1(:)
-   P_CC_DRYG(:) = P_RC_DRYG(:) * PCCT(:)/MAX(PRCT(:),XRTMIN(2))
-   P_RR_DRYG(:) = - ZZW4(:)
-   P_CR_DRYG(:) = P_RR_DRYG(:) * PCRT(:)/MAX(PRRT(:),XRTMIN(3))
-   P_RI_DRYG(:) = - ZZW2(:)
-   P_CI_DRYG(:) = P_RI_DRYG(:) * PCIT(:)/MAX(PRIT(:),XRTMIN(4))
-   P_RS_DRYG(:) = - ZZW3(:)
-   P_RG_DRYG(:) =   ZRDRYG(:)
-   !
-   P_TH_DRYG(:) = (ZZW1(:) + ZZW4(:)) * (PLSFACT(:)-PLVFACT(:))
-END WHERE
-!
-!
-!*       2.  Hallett-Mossop process (HMG)
-!        --------------------------------
-!
-! BVIE test ZRDRYG<ZZW ?????????????????????????
-!GDRY(:) = (PT(:)<XHMTMAX) .AND. (PT(:)>XHMTMIN)    .AND. (ZRDRYG(:)<ZZW(:))&
-GDRY(:) = (PT(:)<XHMTMAX) .AND. (PT(:)>XHMTMIN)     .AND. (ZRDRYG(:)<ZRWETG(:))&
-               .AND. (PRGT(:)>XRTMIN(6)) .AND. (PRCT(:)>XRTMIN(2)) .AND. LDCOMPUTE(:)
-
-WHERE( GDRY )
-!
-   ZVEC1(:) = PLBDC(:)
-   ZVEC2(:) = MAX( 1.00001, MIN( FLOAT(NGAMINC)-0.00001,           &
-                         XHMLINTP1 * LOG( ZVEC1(:) ) + XHMLINTP2 ) )
-   IVEC2(:) = INT( ZVEC2(:) )
-   ZVEC2(:) = ZVEC2(:) - FLOAT( IVEC2(:) )
-   ZVEC1(:) =   XGAMINC_HMC( IVEC2(:)+1 )* ZVEC2(:)      &
-                    - XGAMINC_HMC( IVEC2(:)   )*(ZVEC2(:) - 1.0)
-   ZZX(:) = ZVEC1(:) ! Large droplets
-!
-   WHERE ( ZZX(:)<0.99 ) ! Dry case
-      P_CI_HMG(:) = ZZW1(:)*(PCCT(:)/PRCT(:))*(1.0-ZZX(:))*XHM_FACTG*  &
-                        MAX( 0.0, MIN( (PT(:)-XHMTMIN)/3.0,(XHMTMAX-PT(:))/2.0 ) )
-      P_RI_HMG(:) = P_CI_HMG(:) * XMNU0
-      P_RG_HMG(:) = - P_RI_HMG(:)
-   END WHERE
-END WHERE
-!
-!
-!*       3.  Graupel Melting
-!        -------------------
-!
-ZZX(:) = 0.0
-WHERE( (PRGT(:)>XRTMIN(6)) .AND. (PT(:)>XTT) .AND. LDCOMPUTE(:) )
-   ZZX(:) = PRVT(:)*PPRES(:)/((XMV/XMD)+PRVT(:)) ! Vapor pressure
-   ZZX(:) = PKA(:)*(XTT-PT(:)) +                                 &
-              ( PDV(:)*(XLVTT + ( XCPV - XCL ) * ( PT(:) - XTT )) &
-                          *(XESTT-ZZX(:))/(XRV*PT(:))             )
-!
-! compute RGMLTR
-!
-   ZZX(:)  = MAX( 0.0,( -ZZX(:) *                     &
-                          ( X0DEPG*           PLBDG(:)**XEX0DEPG +     &
-                            X1DEPG*PCJ(:)*PLBDG(:)**XEX1DEPG ) -   &
-                                      ( ZZW1(:)+ZZW4(:) ) *        &
-                               ( PRHODREF(:)*XCL*(XTT-PT(:))) ) /  &
-                                            ( PRHODREF(:)*XLMTT ) )
-   P_RR_GMLT(:) = ZZX(:)
-   P_CR_GMLT(:) = ZZX(:) * 5.0E6  ! obtained after averaging, Dshed=1mm and 500 microns 
-   !
-   P_TH_GMLT(:) = - P_RR_GMLT(:) * (PLSFACT(:)-PLVFACT(:))
-END WHERE
-!
-!
-!
-!
-PA_RC(:) = PA_RC(:) + P_RC_WETG(:) + P_RC_DRYG(:) 
-PA_CC(:) = PA_CC(:) + P_CC_WETG(:) + P_CC_DRYG(:) 
-PA_RR(:) = PA_RR(:) + P_RR_WETG(:) + P_RR_DRYG(:)               + P_RR_GMLT(:)
-PA_CR(:) = PA_CR(:) + P_CR_WETG(:) + P_CR_DRYG(:)               + P_CR_GMLT(:)
-PA_RI(:) = PA_RI(:) + P_RI_WETG(:) + P_RI_DRYG(:) + P_RI_HMG(:) 
-PA_CI(:) = PA_CI(:) + P_CI_WETG(:) + P_CI_DRYG(:) + P_CI_HMG(:) 
-PA_RS(:) = PA_RS(:) + P_RS_WETG(:) + P_RS_DRYG(:) 
-PA_RG(:) = PA_RG(:) + P_RG_WETG(:) + P_RG_DRYG(:) + P_RG_HMG(:) - P_RR_GMLT(:)
-PA_RH(:) = PA_RH(:) + P_RH_WETG(:) 
-PA_TH(:) = PA_TH(:) + P_TH_WETG(:) + P_TH_DRYG(:)               + P_TH_GMLT(:) 
-!
-!-------------------------------------------------------------------------------
-!
-CONTAINS
-  FUNCTION GET_XKER_SDRYG(GRAUPEL,SNOW) RESULT(RET)
-    INTEGER, DIMENSION(:) :: GRAUPEL
-    INTEGER, DIMENSION(:) :: SNOW
-    REAL, DIMENSION(SIZE(SNOW)) :: RET
-    !
-    INTEGER I
-    !
-    DO I=1,SIZE(GRAUPEL)
-       RET(I) = XKER_SDRYG(MAX(MIN(GRAUPEL(I),SIZE(XKER_SDRYG,1)),1),MAX(MIN(SNOW(I),SIZE(XKER_SDRYG,2)),1))
-    END DO
-  END FUNCTION GET_XKER_SDRYG
-!
-!-------------------------------------------------------------------------------
-!
-  FUNCTION GET_XKER_RDRYG(GRAUPEL,RAIN) RESULT(RET)
-    INTEGER, DIMENSION(:) :: GRAUPEL
-    INTEGER, DIMENSION(:) :: RAIN
-    REAL, DIMENSION(SIZE(RAIN)) :: RET
-    !
-    INTEGER I
-    !
-    DO I=1,SIZE(GRAUPEL)
-       RET(I) = XKER_RDRYG(MAX(MIN(GRAUPEL(I),SIZE(XKER_RDRYG,1)),1),MAX(MIN(RAIN(I),SIZE(XKER_RDRYG,2)),1))
-    END DO
-  END FUNCTION GET_XKER_RDRYG
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_GRAUPEL
diff --git a/src/arome/micro/lima_graupel_deposition.F90 b/src/arome/micro/lima_graupel_deposition.F90
deleted file mode 100644
index c7b61b1c851f08848e3e01061d83af3f4c0c269c..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_graupel_deposition.F90
+++ /dev/null
@@ -1,115 +0,0 @@
-!      #################################
-       MODULE MODI_LIMA_GRAUPEL_DEPOSITION
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_GRAUPEL_DEPOSITION (HFMFILE, OCLOSE_OUT, LDCOMPUTE,       &
-                                       PRGT, PSSI, PLBDG, PAI, PCJ, PLSFACT, &
-                                       P_TH_DEPG, P_RG_DEPG,                 &
-                                       PA_TH, PA_RV, PA_RG                   )
-!
-CHARACTER(LEN=*),     INTENT(IN)    :: HFMFILE 
-LOGICAL,              INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRGT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PSSI    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDG   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PAI     ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCJ     ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_DEPG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_DEPG
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RV
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RG
-!!
-END SUBROUTINE LIMA_GRAUPEL_DEPOSITION
-END INTERFACE
-END MODULE MODI_LIMA_GRAUPEL_DEPOSITION
-!
-!     ######################################################################
-      SUBROUTINE LIMA_GRAUPEL_DEPOSITION (HFMFILE, OCLOSE_OUT, LDCOMPUTE,       &
-                                          PRGT, PSSI, PLBDG, PAI, PCJ, PLSFACT, &
-                                          P_TH_DEPG, P_RG_DEPG,                 &
-                                          PA_TH, PA_RV, PA_RG                   )
-!     ######################################################################
-!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the cold-phase homogeneous
-!!    freezing of CCN, droplets and drops (T<-35°C)
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy*   jan. 2014  add budgets
-!!      B.Vie 10/2016 Bug zero division
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_PARAM_LIMA,       ONLY : XRTMIN
-USE MODD_PARAM_LIMA_MIXED, ONLY : X0DEPG, XEX0DEPG, X1DEPG, XEX1DEPG
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE 
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRGT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PSSI    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDG   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PAI     ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCJ     ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_DEPG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_DEPG
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RV
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RG
-!
-!*       0.2   Declarations of local variables :
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       1.     PRELIMINARY COMPUTATIONS
-!	        ------------------------
-!
-P_TH_DEPG(:) = 0.0
-P_RG_DEPG(:) = 0.0
-WHERE ( (PRGT(:)>XRTMIN(6)) .AND. LDCOMPUTE(:) )
-   !Correction BVIE RHODREF
-   !      ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*ZAI(:)) ) *                               &
-   P_RG_DEPG(:) = ( PSSI(:)/(PAI(:)) ) *                               &
-        ( X0DEPG*PLBDG(:)**XEX0DEPG + X1DEPG*PCJ(:)*PLBDG(:)**XEX1DEPG )
-   P_TH_DEPG(:) = P_RG_DEPG(:)*PLSFACT(:)
-END WHERE
-!
-PA_RV(:) = PA_RV(:) - P_RG_DEPG(:)
-PA_RG(:) = PA_RG(:) + P_RG_DEPG(:)
-PA_TH(:) = PA_TH(:) + P_TH_DEPG(:)
-!
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_GRAUPEL_DEPOSITION
diff --git a/src/arome/micro/lima_ice_aggregation_snow.F90 b/src/arome/micro/lima_ice_aggregation_snow.F90
deleted file mode 100644
index e35ddfa09c6e27ff19153287d5bb61033bce9b6c..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_ice_aggregation_snow.F90
+++ /dev/null
@@ -1,144 +0,0 @@
-!      #################################
-       MODULE MODI_LIMA_ICE_AGGREGATION_SNOW
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_ICE_AGGREGATION_SNOW (HFMFILE, OCLOSE_OUT, LDCOMPUTE, &
-                                         PT,                             &
-                                         PRIT, PRST, PCIT, PLBDI, PLBDS, &
-                                         P_RI_AGGS, P_CI_AGGS,           &
-                                         PA_RI, PA_CI, PA_RS             )
-!
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE 
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PT
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDI 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_AGGS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_AGGS
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RS
-!
-END SUBROUTINE LIMA_ICE_AGGREGATION_SNOW
-END INTERFACE
-END MODULE MODI_LIMA_ICE_AGGREGATION_SNOW
-!
-!     ######################################################################
-      SUBROUTINE LIMA_ICE_AGGREGATION_SNOW (HFMFILE, OCLOSE_OUT, LDCOMPUTE, &
-                                            PT,                             &
-                                            PRIT, PRST, PCIT, PLBDI, PLBDS, &
-                                            P_RI_AGGS, P_CI_AGGS,           &
-                                            PA_RI, PA_CI, PA_RS             )
-!     ######################################################################
-!
-!!    PURPOSE
-!!    -------
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy*   jan. 2014  add budgets
-!!      B.Vie 10/2016 Bug zero division
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_CST,             ONLY : XTT
-USE MODD_PARAM_LIMA,      ONLY : XRTMIN, XCTMIN
-USE MODD_PARAM_LIMA_COLD, ONLY : XBI, XCCS, XCXS, XCOLEXIS, XAGGS_CLARGE1, XAGGS_CLARGE2, &
-                                 XAGGS_RLARGE1, XAGGS_RLARGE2
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE 
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PT
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDI 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_AGGS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_AGGS
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RS
-!
-!*       0.2   Declarations of local variables :
-!
-REAL, DIMENSION(SIZE(PRIT)) :: ZZW1, ZZW2, ZZW3 ! work arrays
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       2.4    Aggregation of r_i on r_s: CIAGGS and RIAGGS
-!        ---------------------------------------------------
-!
-ZZW1(:) = 0.
-ZZW2(:) = 0.
-ZZW3(:) = 0.
-!
-P_RI_AGGS(:) = 0.
-P_CI_AGGS(:) = 0.
-!
-!!$print *, "aggregation of i on s"
-!!$print *, "ri", PRIT(156,2,22)
-!!$print *, "Ni", PCIT(156,2,22)
-!!$print *, "rs", PRST(156,2,22)
-!!$print *, "lambda i", PLBDI(156,2,22)
-!!$print *, "lambda s", PLBDS(156,2,22)
-!!$print *, "T", PT(156,2,22)
-!!$print *, "C1", XAGGS_CLARGE1
-!!$print *, "C2", XAGGS_CLARGE2
-!!$print *, "R1", XAGGS_RLARGE1
-!!$print *, "R2", XAGGS_RLARGE2
-!
-WHERE ( (PRIT(:)>XRTMIN(4)) .AND. (PRST(:)>XRTMIN(5)) .AND. LDCOMPUTE(:) )
-   ZZW1(:) = (PLBDI(:) / PLBDS(:))**3
-   ZZW2(:) = (PCIT(:)*(XCCS*PLBDS(:)**XCXS)*EXP( XCOLEXIS*(PT(:)-XTT) )) &
-        / (PLBDI(:)**3)
-   ZZW3(:) = ZZW2(:)*(XAGGS_CLARGE1+XAGGS_CLARGE2*ZZW1(:))
-!
-   P_CI_AGGS(:) = - ZZW3(:)
-!
-   ZZW2(:) = ZZW2(:) / PLBDI(:)**XBI
-   ZZW2(:) = ZZW2(:)*(XAGGS_RLARGE1+XAGGS_RLARGE2*ZZW1(:))
-!
-   P_RI_AGGS(:) = - ZZW2(:)
-END WHERE
-!
-!!$print *, "tendance ci", P_CI_AGGS(156,2,22)
-!!$print *, "tendance ri", P_RI_AGGS(156,2,22)
-!
-PA_RI(:) = PA_RI(:) + P_RI_AGGS(:)
-PA_CI(:) = PA_CI(:) + P_CI_AGGS(:)
-PA_RS(:) = PA_RS(:) - P_RI_AGGS(:)
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_ICE_AGGREGATION_SNOW
diff --git a/src/arome/micro/lima_ice_melting.F90 b/src/arome/micro/lima_ice_melting.F90
deleted file mode 100644
index 88ea17f0ede09beb2c4d801224c49e0d0a532aba..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_ice_melting.F90
+++ /dev/null
@@ -1,169 +0,0 @@
-!      #################################
-       MODULE MODI_LIMA_ICE_MELTING
-!      #################################
-!
-INTERFACE
-      SUBROUTINE LIMA_ICE_MELTING (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE,   &
-                                   PEXNREF, PPABST,                          &
-                                   PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
-                                   PCIT, PINT,                               &
-                                   P_TH_IMLT, P_RC_IMLT, P_CC_IMLT,          &
-                                   PB_TH, PB_RC, PB_CC, PB_RI, PB_CI, PB_IFNN)
-!
-REAL,                     INTENT(IN)    :: PTSTEP 
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PEXNREF ! Reference Exner function
-REAL, DIMENSION(:),   INTENT(IN)    :: PPABST  ! abs. pressure at time t
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PTHT    ! Theta at time t
-REAL, DIMENSION(:),   INTENT(IN)    :: PRVT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRGT    ! 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT    ! Rain water C. at t
-REAL, DIMENSION(:,:), INTENT(IN)    :: PINT    ! Nucleated IFN C. at t
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_IMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_IMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_IMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: PB_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PB_RC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PB_CC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PB_RI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PB_CI
-REAL, DIMENSION(:,:), INTENT(INOUT) :: PB_IFNN
-!
-END SUBROUTINE LIMA_ICE_MELTING
-END INTERFACE
-END MODULE MODI_LIMA_ICE_MELTING
-!
-!     ######################################################################
-      SUBROUTINE LIMA_ICE_MELTING (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE,   &
-                                   PEXNREF, PPABST,                          &
-                                   PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
-                                   PCIT, PINT,                               &
-                                   P_TH_IMLT, P_RC_IMLT, P_CC_IMLT,          &
-                                   PB_TH, PB_RC, PB_CC, PB_RI, PB_CI, PB_IFNN)
-!     ######################################################################
-!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the cold-phase homogeneous
-!!    freezing of CCN, droplets and drops (T<-35°C)
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy*   jan. 2014  add budgets
-!!      B.Vie 10/2016 Bug zero division
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_CST,             ONLY : XP00, XRD, XCPD, XCPV, XCL, XCI, XTT, XLSTT, XLVTT
-USE MODD_PARAM_LIMA,      ONLY : XRTMIN, NMOD_IFN
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-REAL,                     INTENT(IN)    :: PTSTEP 
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PEXNREF ! Reference Exner function
-REAL, DIMENSION(:),   INTENT(IN)    :: PPABST  ! abs. pressure at time t
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PTHT    ! Theta at time t
-REAL, DIMENSION(:),   INTENT(IN)    :: PRVT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRGT    ! 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT    ! Rain water C. at t
-REAL, DIMENSION(:,:), INTENT(IN)    :: PINT    ! Nucleated IFN C. at t
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_IMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_IMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_IMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: PB_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PB_RC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PB_CC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PB_RI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PB_CI
-REAL, DIMENSION(:,:), INTENT(INOUT) :: PB_IFNN
-!
-!*       0.2   Declarations of local variables :
-!
-REAL, DIMENSION(SIZE(PTHT)) ::  &
-     ZW,       &
-     ZT,       &
-     ZTCELSIUS,&
-     ZLSFACT,  &
-     ZLVFACT,  &
-     ZMASK
-!
-INTEGER :: JMOD_IFN
-!
-!
-!
-!-------------------------------------------------------------------------------
-!
-P_TH_IMLT(:) = 0.
-P_RC_IMLT(:) = 0.
-P_CC_IMLT(:) = 0.
-!
-! Temperature
-ZT(:)  = PTHT(:) * ( PPABST(:)/XP00 ) ** (XRD/XCPD)
-ZTCELSIUS(:) = ZT(:)-XTT
-!
-ZW(:) = PEXNREF(:)*( XCPD+XCPV*PRVT(:)+XCL*(PRCT(:)+PRRT(:)) &
-     +XCI*(PRIT(:)+PRST(:)+PRGT(:)) )
-ZLSFACT(:) = (XLSTT+(XCPV-XCI)*ZTCELSIUS(:))/ZW(:)          ! L_s/(Pi_ref*C_ph)
-ZLVFACT(:) = (XLVTT+(XCPV-XCL)*ZTCELSIUS(:))/ZW(:)          ! L_v/(Pi_ref*C_ph)
-!
-ZW(:) = 0.0
-!
-ZMASK(:) = 0.
-!
-WHERE( (ZT(:)<XTT-35.0) .AND. (PRIT(:)>XRTMIN(3)) .AND. LDCOMPUTE(:) )
-   P_TH_IMLT(:) = - PRIT(:)*(ZLSFACT(:)-ZLVFACT(:))
-   P_RC_IMLT(:) = PRIT(:)
-   P_CC_IMLT(:) = PCIT(:)
-   PB_TH(:) = PB_TH(:) + P_TH_IMLT(:)
-   PB_RC(:) = PB_RC(:) + PRIT(:)
-   PB_CC(:) = PB_CC(:) + PCIT(:)
-   PB_RI(:) = PB_RI(:) - PRIT(:)
-   PB_CI(:) = PB_CI(:) - PCIT(:)
-   ZMASK(:) = 1.
-ENDWHERE
-!
-DO JMOD_IFN = 1,NMOD_IFN
-! Correction BVIE aerosols not released but in droplets
-!      ZIFS(:,JMOD_IFN) = ZIFS(:,JMOD_IFN) + ZINS(:,JMOD_IFN)*(1.-ZMASK(:)) 
-   PB_IFNN(:,JMOD_IFN) = PB_IFNN(:,JMOD_IFN) - PINT(:,JMOD_IFN)* ZMASK(:)
-ENDDO
-!
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_ICE_MELTING
diff --git a/src/arome/micro/lima_ice_snow_deposition.F90 b/src/arome/micro/lima_ice_snow_deposition.F90
deleted file mode 100644
index 8768b9e6cdfcfd1a971127d8926bbe131cfd18b0..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_ice_snow_deposition.F90
+++ /dev/null
@@ -1,242 +0,0 @@
-!      #####################
-       MODULE MODI_LIMA_ICE_SNOW_DEPOSITION
-!      #####################
-!
-INTERFACE
-      SUBROUTINE LIMA_ICE_SNOW_DEPOSITION (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE,   &
-                                           PRHODREF, PSSI, PAI, PCJ, PLSFACT,        &
-                                           PRIT, PRST, PCIT, PLBDI, PLBDS,           &
-                                           P_RI_CNVI, P_CI_CNVI,                     &
-                                           P_TH_DEPS, P_RS_DEPS,                     &
-                                           P_RI_CNVS, P_CI_CNVS,                     &
-                                           PA_TH, PA_RV, PA_RI, PA_CI, PA_RS         )
-!
-REAL,                 INTENT(IN)    :: PTSTEP
-CHARACTER(LEN=*),     INTENT(IN)    :: HFMFILE
-LOGICAL,              INTENT(IN)    :: OCLOSE_OUT
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF! Reference density
-REAL, DIMENSION(:),   INTENT(IN)    :: PSSI  ! abs. pressure at time t
-REAL, DIMENSION(:),   INTENT(IN)    :: PAI  ! abs. pressure at time t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCJ  ! abs. pressure at time t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT  ! abs. pressure at time t
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT    ! Ice crystal C. at t
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDI    ! Graupel m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS    ! Graupel m.r. at t 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_CNVI
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_CNVI
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_DEPS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_DEPS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_CNVS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_CNVS
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RV
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RS
-!
-END SUBROUTINE LIMA_ICE_SNOW_DEPOSITION
-END INTERFACE
-END MODULE MODI_LIMA_ICE_SNOW_DEPOSITION
-!
-!     ######################################################################
-SUBROUTINE LIMA_ICE_SNOW_DEPOSITION (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE,   &
-                                     PRHODREF,  PSSI, PAI, PCJ, PLSFACT,       &
-                                     PRIT, PRST, PCIT, PLBDI, PLBDS,           &
-                                     P_RI_CNVI, P_CI_CNVI,                     &
-                                     P_TH_DEPS, P_RS_DEPS,                     &
-                                     P_RI_CNVS, P_CI_CNVS,                     &
-                                     PA_TH, PA_RV, PA_RI, PA_CI, PA_RS         )
-!     ######################################################################
-!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the microphysical sources
-!!    for slow cold processes :
-!!      - conversion of snow to ice
-!!      - deposition of vapor on snow
-!!      - conversion of ice to snow (Harrington 1995)
-!!
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy *  jan. 2014   add budgets
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_PARAM_LIMA,      ONLY : XRTMIN, XCTMIN, XALPHAI, XALPHAS, XNUI 
-USE MODD_PARAM_LIMA_COLD, ONLY : XCXS, XCCS, &
-                                 XLBDAS_MAX, XDSCNVI_LIM, XLBDASCNVI_MAX,     &
-                                 XC0DEPSI, XC1DEPSI, XR0DEPSI, XR1DEPSI,      &
-                                 XSCFAC, X1DEPS, X0DEPS, XEX1DEPS, XEX0DEPS,  &
-                                 XDICNVS_LIM, XLBDAICNVS_LIM,                 &
-                                 XC0DEPIS, XC1DEPIS, XR0DEPIS, XR1DEPIS,      &
-                                 XCOLEXIS, XAGGS_CLARGE1, XAGGS_CLARGE2,      &
-                                 XAGGS_RLARGE1, XAGGS_RLARGE2  
-
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-REAL,                 INTENT(IN)    :: PTSTEP
-CHARACTER(LEN=*),     INTENT(IN)    :: HFMFILE
-LOGICAL,              INTENT(IN)    :: OCLOSE_OUT
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF! Reference density
-REAL, DIMENSION(:),   INTENT(IN)    :: PSSI  ! abs. pressure at time t
-REAL, DIMENSION(:),   INTENT(IN)    :: PAI  ! abs. pressure at time t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCJ  ! abs. pressure at time t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT  ! abs. pressure at time t
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT    ! Ice crystal C. at t
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDI    ! Graupel m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS    ! Graupel m.r. at t 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_CNVI
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_CNVI
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_DEPS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_DEPS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_CNVS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_CNVS
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RV
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RS
-!
-!*       0.2   Declarations of local variables :
-!
-LOGICAL, DIMENSION(SIZE(PRHODREF)) :: GMICRO ! Computations only where necessary
-REAL,    DIMENSION(SIZE(PRHODREF)) :: ZZW, ZZW2, ZZX ! Work array
-!
-!
-!-------------------------------------------------------------------------------
-!
-P_RI_CNVI(:) = 0.
-P_CI_CNVI(:) = 0.
-P_TH_DEPS(:) = 0.
-P_RS_DEPS(:) = 0.
-P_RI_CNVS(:) = 0.
-P_CI_CNVS(:) = 0.
-!
-! Physical limitations
-!
-!
-! Looking for regions where computations are necessary
-!
-GMICRO(:) = .FALSE.
-GMICRO(:) = LDCOMPUTE(:) .AND. &
-     (PRIT(:)>XRTMIN(4)      .OR.  &
-      PRST(:)>XRTMIN(5))
-!
-!
-WHERE( GMICRO )
-!
-!*       2.1    Conversion of snow to r_i: RSCNVI
-!        ----------------------------------------
-!
-!
-   ZZW2(:) = 0.0
-   ZZW(:) = 0.0
-   WHERE ( PLBDS(:)<XLBDASCNVI_MAX .AND. (PRST(:)>XRTMIN(5)) &
-                                   .AND. (PSSI(:)<0.0)       )
-      ZZW(:) = (PLBDS(:)*XDSCNVI_LIM)**(XALPHAS)
-      ZZX(:) = ( -PSSI(:)/PAI(:) ) * (XCCS*PLBDS(:)**XCXS) * (ZZW(:)**XNUI) * EXP(-ZZW(:))
-!
-! Correction BVIE RHODREF
-!         ZZW(:) = MIN( ( XR0DEPSI+XR1DEPSI*ZCJ(:) )*ZZX(:)/ZRHODREF(:),ZRSS(:) )
-      ZZW(:) = ( XR0DEPSI+XR1DEPSI*PCJ(:) )*ZZX(:)
-!
-      ZZW2(:) = ZZW(:)*( XC0DEPSI+XC1DEPSI*PCJ(:) )/( XR0DEPSI+XR1DEPSI*PCJ(:) )
-   END WHERE
-!
-   P_RI_CNVI(:) = ZZW(:)
-   P_CI_CNVI(:) = ZZW2(:)
-!
-   PA_RI(:) = PA_RI(:) + P_RI_CNVI(:)
-   PA_CI(:) = PA_CI(:) + P_CI_CNVI(:)
-   PA_RS(:) = PA_RS(:) - P_RI_CNVI(:)
-!
-!
-!*       2.2    Deposition of water vapor on r_s: RVDEPS
-!        -----------------------------------------------
-!
-!
-   ZZW(:) = 0.0
-   WHERE ( (PRST(:)>XRTMIN(5)) )
-!Correction BVIE rhodref
-!         ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*ZAI(:)) ) *                               &
-      ZZW(:) = ( PSSI(:)/(PAI(:)) ) * &
-           ( X0DEPS*PLBDS(:)**XEX0DEPS + X1DEPS*PCJ(:)*PLBDS(:)**XEX1DEPS )
-      ZZW(:) =    ZZW(:)*(0.5+SIGN(0.5,ZZW(:))) - ABS(ZZW(:))*(0.5-SIGN(0.5,ZZW(:)))
-   END WHERE
-!
-   P_RS_DEPS(:) = ZZW(:)
-   P_TH_DEPS(:) = P_RS_DEPS(:) * PLSFACT(:)
-!
-   PA_TH(:) = PA_TH(:) + P_TH_DEPS(:)
-   PA_RV(:) = PA_RV(:) - P_RS_DEPS(:) 
-   PA_RS(:) = PA_RS(:) + P_RS_DEPS(:) 
-!
-!
-!*       2.3    Conversion of pristine ice to r_s: RICNVS
-!        ------------------------------------------------
-!
-!
-   ZZW(:) = 0.0
-   ZZW2(:) = 0.0
-   WHERE ( (PLBDI(:)<XLBDAICNVS_LIM) .AND. (PCIT(:)>XCTMIN(4)) &
-                                     .AND. (PSSI(:)>0.0)       )
-      ZZW(:) = (PLBDI(:)*XDICNVS_LIM)**(XALPHAI)
-      ZZX(:) = ( PSSI(:)/PAI(:) )*PCIT(:) * (ZZW(:)**XNUI) *EXP(-ZZW(:))
-!
-! Correction BVIE
-!         ZZW(:) = MAX( MIN( ( XR0DEPIS + XR1DEPIS*ZCJ(:) )*ZZX(:)/ZRHODREF(:) &
-      ZZW(:) = ( XR0DEPIS + XR1DEPIS*PCJ(:) )*ZZX(:)                             
-!
-      ZZW2(:) = ZZW(:) * (XC0DEPIS+XC1DEPIS*PCJ(:)) / (XR0DEPIS+XR1DEPIS*PCJ(:))
-   END WHERE
-!
-P_RI_CNVS(:) = - ZZW(:)
-P_CI_CNVS(:) = - ZZW2(:)
-!
-PA_RI(:) = PA_RI(:) + P_RI_CNVS(:)
-PA_CI(:) = PA_CI(:) + P_CI_CNVS(:)
-PA_RS(:) = PA_RS(:) - P_RI_CNVS(:)
-!
-!
-END WHERE
-!
-
-!
-END SUBROUTINE LIMA_ICE_SNOW_DEPOSITION
diff --git a/src/arome/micro/lima_inst_procs.F90 b/src/arome/micro/lima_inst_procs.F90
deleted file mode 100644
index afad8c32497150caa08e6521388b03ac351a1266..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_inst_procs.F90
+++ /dev/null
@@ -1,164 +0,0 @@
-!      ###############################
-       MODULE MODI_LIMA_INST_PROCS
-!      ###############################
-!
-INTERFACE
-   SUBROUTINE LIMA_INST_PROCS (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE,             &
-                            PEXNREF, PPABST,           &
-                            PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,           &
-                            PCCT, PCRT, PCIT,                                   &
-                            PINT,                 &
-                            P_CR_BRKU,                                          & ! spontaneous break up of drops (BRKU) : Nr
-                            P_TH_HONR, P_RR_HONR, P_CR_HONR,                    & ! rain drops homogeneous freezing (HONR) : rr, Nr, rg=-rr, th
-                            P_TH_IMLT, P_RC_IMLT, P_CC_IMLT,                    & ! ice melting (IMLT) : rc, Nc, ri=-rc, Ni=-Nc, th, IFNF, IFNA
-                            PB_TH, PB_RV, PB_RC, PB_RR, PB_RI, PB_RG,           &
-                            PB_CC, PB_CR, PB_CI,                                &
-                            PB_IFNN)
-!
-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 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PEXNREF    ! Reference Exner function
-REAL, DIMENSION(:),   INTENT(IN)    :: PPABST     ! abs. pressure at time t
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PTHT       ! Theta at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRVT       ! Water vapor m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT       ! Cloud water m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT       ! Rain water m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT       ! 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)    :: PCCT       ! Cloud water conc. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCRT       ! Rain water conc. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT       ! Prinstine ice conc. at t
-!
-REAL, DIMENSION(:,:), INTENT(IN)    :: PINT       ! IFN C. activated at t
-!
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_CR_BRKU  ! Concentration change (#/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_TH_HONR  ! 
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_RR_HONR  ! mr change (kg/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_CR_HONR  ! Concentration change (#/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_TH_IMLT  ! 
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_RC_IMLT  ! mr change (kg/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_CC_IMLT  ! Concentration change (#/kg)
-!
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_TH      ! Cumulated theta change
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_RV      ! Cumulated mr change (kg/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_RC      ! Cumulated mr change (kg/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_RR      ! Cumulated mr change (kg/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_RI      ! Cumulated mr change (kg/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_RG      ! Cumulated mr change (kg/kg)
-!
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_CC      ! Cumulated concentration change (#/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_CR      ! Cumulated concentration change (#/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_CI      ! Cumulated concentration change (#/kg)
-!
-REAL, DIMENSION(:,:), INTENT(INOUT) :: PB_IFNN    ! Cumulated concentration change (#/kg)
-!
-   END SUBROUTINE LIMA_INST_PROCS
-END INTERFACE
-END MODULE MODI_LIMA_INST_PROCS
-!     #############################################################################
-SUBROUTINE LIMA_INST_PROCS (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE,             &
-                            PEXNREF, PPABST,           &
-                            PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,           &
-                            PCCT, PCRT, PCIT,                                   &
-                            PINT,                 &
-                            P_CR_BRKU,                                          & ! spontaneous break up of drops (BRKU) : Nr
-                            P_TH_HONR, P_RR_HONR, P_CR_HONR,                    & ! rain drops homogeneous freezing (HONR) : rr, Nr, rg=-rr, th
-                            P_TH_IMLT, P_RC_IMLT, P_CC_IMLT,                    & ! ice melting (IMLT) : rc, Nc, ri=-rc, Ni=-Nc, th, IFNF, IFNA
-                            PB_TH, PB_RV, PB_RC, PB_RR, PB_RI, PB_RG,           &
-                            PB_CC, PB_CR, PB_CI,                                &
-                            PB_IFNN)
-!     #############################################################################
-!
-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
-!
-USE MODI_LIMA_DROPS_BREAK_UP
-USE MODI_LIMA_DROPS_HOM_FREEZING
-USE MODI_LIMA_ICE_MELTING
-
-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 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PEXNREF    ! Reference Exner function
-REAL, DIMENSION(:),   INTENT(IN)    :: PPABST     ! abs. pressure at time t
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PTHT       ! Theta at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRVT       ! Water vapor m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT       ! Cloud water m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT       ! Rain water m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT       ! 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)    :: PCCT       ! Cloud water conc. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCRT       ! Rain water conc. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT       ! Prinstine ice conc. at t
-!
-REAL, DIMENSION(:,:), INTENT(IN)    :: PINT       ! IFN C. activated at t
-!
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_CR_BRKU  ! Concentration change (#/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_TH_HONR  ! 
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_RR_HONR  ! mr change (kg/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_CR_HONR  ! Concentration change (#/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_TH_IMLT  ! 
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_RC_IMLT  ! mr change (kg/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_CC_IMLT  ! Concentration change (#/kg)
-!
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_TH      ! Cumulated theta change
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_RV      ! Cumulated mr change (kg/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_RC      ! Cumulated mr change (kg/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_RR      ! Cumulated mr change (kg/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_RI      ! Cumulated mr change (kg/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_RG      ! Cumulated mr change (kg/kg)
-!
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_CC      ! Cumulated concentration change (#/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_CR      ! Cumulated concentration change (#/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_CI      ! Cumulated concentration change (#/kg)
-!
-REAL, DIMENSION(:,:), INTENT(INOUT) :: PB_IFNN    ! Cumulated concentration change (#/kg)
-!
-!-------------------------------------------------------------------------------
-!
-IF (LWARM_LIMA .AND. LRAIN_LIMA) THEN
-   CALL LIMA_DROPS_BREAK_UP (HFMFILE, OCLOSE_OUT, LDCOMPUTE,    &
-                             PCRT, PRRT,                        &
-                             P_CR_BRKU,                         &
-                             PB_CR                              )
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-IF (LCOLD_LIMA .AND. LWARM_LIMA .AND. LRAIN_LIMA) THEN
-   CALL LIMA_DROPS_HOM_FREEZING (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE,   &
-                                 PEXNREF, PPABST,                          &
-                                 PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
-                                 PCRT,                                     &
-                                 P_TH_HONR, P_RR_HONR, P_CR_HONR,          &
-                                 PB_TH, PB_RR, PB_CR, PB_RG                )
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-IF (LCOLD_LIMA .AND. LWARM_LIMA) THEN
-   CALL LIMA_ICE_MELTING (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE,   &
-                          PEXNREF, PPABST,                          &
-                          PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
-                          PCIT, PINT,                               &
-                          P_TH_IMLT, P_RC_IMLT, P_CC_IMLT,          &
-                          PB_TH, PB_RC, PB_CC, PB_RI, PB_CI, PB_IFNN)
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_INST_PROCS
diff --git a/src/arome/micro/lima_meyers.F90 b/src/arome/micro/lima_meyers.F90
deleted file mode 100644
index a10953731a448a6cfd393e63f7e94bff6eb4629a..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_meyers.F90
+++ /dev/null
@@ -1,486 +0,0 @@
-!      #######################
-       MODULE MODI_LIMA_MEYERS
-!      #######################
-!
-INTERFACE
-      SUBROUTINE LIMA_MEYERS   (OHHONI, PTSTEP, KMI, HFMFILE, HLUOUT, OCLOSE_OUT, &
-                                PZZ, PRHODJ, PRHODREF, PEXNREF, PPABST,           &
-                                PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PCCT,   &
-                                PTHS, PRVS, PRCS, PRIS,                           &
-                                PCCS, PCIS, PINS, &
-                            YDDDH, YDLDDH, YDMDDH )
-!
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-LOGICAL,                  INTENT(IN)    :: OHHONI  ! enable haze freezing
-REAL,                     INTENT(IN)    :: PTSTEP  ! Time step          
-INTEGER,                  INTENT(IN)    :: KMI     ! Model index 
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)    :: HLUOUT  ! Output-listing name for
-                                                   ! model n
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                   ! the tput FM fileoutp
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ     ! Height (z)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ  ! Dry density * Jacobian
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF ! Reference Exner function
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST  ! abs. pressure at time t
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT    ! Theta at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRVT    ! Water vapor m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT    ! Rain water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRIT    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRGT    ! Graupel m.r. at t 
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCCT    ! Cloud water C. at t
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS    ! Theta source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRVS    ! Water vapor m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRCS    ! Cloud water m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRIS    ! Pristine ice m.r. source
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCCS    ! Cloud water C. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCIS    ! Ice crystal C. source
-!
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PINS    ! Activated ice nuclei C. source
-                                                   !for DEPOSITION and CONTACT
-                                                   !for IMMERSION
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-!
-END SUBROUTINE LIMA_MEYERS
-END INTERFACE
-END MODULE MODI_LIMA_MEYERS
-!
-!     ######################################################################
-      SUBROUTINE LIMA_MEYERS   (OHHONI, PTSTEP, KMI, HFMFILE, HLUOUT, OCLOSE_OUT, &
-                                PZZ, PRHODJ, PRHODREF, PEXNREF, PPABST,           &
-                                PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PCCT,   &
-                                PTHS, PRVS, PRCS, PRIS,                           &
-                                PCCS, PCIS, PINS, &
-                            YDDDH, YDLDDH, YDMDDH )
-!     ######################################################################
-!!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the heterogeneous nucleation
-!!    following Phillips (2008).
-!!
-!!
-!!**  METHOD
-!!    ------
-!!      The parameterization of Phillips (2008) is based on observed nucleation
-!!    in the CFDC for a range of T and Si values. Phillips therefore defines a 
-!!    reference activity spectrum, that is, for given T and Si values, the 
-!!    reference concentration of primary ice crystals.
-!!      
-!!      The activation of IFN is closely related to their total surface. Thus, 
-!!    the activable fraction of each IFN specie is determined by an integration
-!!    over the particle size distributions.
-!!
-!!    Subroutine organisation :
-!!
-!!      1- Preliminary computations
-!!      2- Check where computations are necessary, and pack variables
-!!      3- Compute the saturation over water and ice
-!!      4- Compute the reference activity spectrum
-!!             -> CALL LIMA_PHILLIPS_REF_SPECTRUM
-!!         Integrate over the size distributions to compute the IFN activable fraction
-!!             -> CALL LIMA_PHILLIPS_INTEG
-!!      5- Heterogeneous nucleation of insoluble IFN
-!!      6- Heterogeneous nucleation of coated IFN
-!!      7- Unpack variables & deallocations
-!! 
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!      Phillips et al., 2008: An empirical parameterization of heterogeneous
-!!        ice nucleation for multiple chemical species of aerosols, J. Atmos. Sci. 
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy *  jan. 2014   add budgets
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_PARAMETERS
-USE MODD_CST
-USE MODD_PARAM_LIMA
-USE MODD_PARAM_LIMA_COLD
-USE MODD_BUDGET
-USE MODE_BUDGET, ONLY: BUDGET_DDH
-USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NI
-!
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-USE MODI_LIMA_FUNCTIONS,  ONLY : COUNTJV
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-LOGICAL,                  INTENT(IN)    :: OHHONI  ! enable haze freezing
-REAL,                     INTENT(IN)    :: PTSTEP  ! Time step          
-INTEGER,                  INTENT(IN)    :: KMI     ! Model index 
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)    :: HLUOUT  ! Output-listing name for
-                                                   ! model n
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                   ! the tput FM fileoutp
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ     ! Height (z)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ  ! Dry density * Jacobian
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF ! Reference Exner function
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST  ! abs. pressure at time t
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT    ! Theta at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRVT    ! Water vapor m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT    ! Rain water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRIT    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRGT    ! Graupel m.r. at t 
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCCT    ! Cloud water C. at t
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS    ! Theta source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRVS    ! Water vapor m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRCS    ! Cloud water m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRIS    ! Pristine ice m.r. source
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCCS    ! Cloud water C. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCIS    ! Ice crystal C. source
-!
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PINS    ! Activated ice nuclei C. source
-                                                   !for DEPOSITION and CONTACT
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-!
-!
-!*       0.2   Declarations of local variables :
-!
-!
-INTEGER :: IIB, IIE, IJB, IJE, IKB, IKE               ! Physical domain
-INTEGER :: JL     ! Loop index
-INTEGER :: INEGT  ! Case number of nucleation
-!
-LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) &
-			  :: GNEGT  ! Test where to compute the nucleation
-!
-INTEGER, DIMENSION(SIZE(PRHODREF))  :: I1,I2,I3 ! Indexes for PACK replacement
-!
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRVT    ! Water vapor m.r. at t
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRCT    ! Cloud water m.r. at t
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRRT    ! Rain water m.r. at t
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRIT    ! Pristine ice m.r. at t
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRST    ! Snow/aggregate m.r. at t
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRGT    ! Graupel/hail m.r. at t
-!
-REAL, DIMENSION(:),   ALLOCATABLE :: ZCCT    ! Cloud water conc. at t
-!
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRVS    ! Water vapor m.r. source
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRCS    ! Cloud water m.r. source
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRIS    ! Pristine ice m.r. source
-REAL, DIMENSION(:),   ALLOCATABLE :: ZCCS    ! Cloud water conc. source
-REAL, DIMENSION(:),   ALLOCATABLE :: ZCIS    ! Pristine ice conc. source
-!
-REAL, DIMENSION(:),   ALLOCATABLE :: ZTHS    ! Theta source
-!
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZINS    ! Nucleated Ice nuclei conc. source
-                                             ! by Deposition/Contact
-!
-REAL, DIMENSION(:), ALLOCATABLE &
-                           :: ZRHODREF, & ! RHO Dry REFerence
-                              ZRHODJ,   & ! RHO times Jacobian
-                              ZZT,      & ! Temperature
-                              ZPRES,    & ! Pressure
-                              ZEXNREF,  & ! EXNer Pressure REFerence
-                              ZZW,      & ! Work array
-                              ZZX,      & ! Work array
-                              ZZY,      & ! Work array
-                              ZLSFACT,  & ! L_s/(Pi_ref*C_ph)
-                              ZLVFACT,  & ! L_v/(Pi_ref*C_ph)
-                              ZSSI
-!
-REAL,    DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3))   &
-                                  :: ZW, ZT ! work arrays
-!
-REAL,    DIMENSION(:),   ALLOCATABLE :: ZTCELSIUS
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       1.     PRELIMINARY COMPUTATIONS
-!	        ------------------------
-!
-!
-! Physical domain
-!
-IIB=1+JPHEXT
-IIE=SIZE(PZZ,1) - JPHEXT
-IJB=1+JPHEXT
-IJE=SIZE(PZZ,2) - JPHEXT
-IKB=1+JPVEXT
-IKE=SIZE(PZZ,3) - JPVEXT
-!
-! Temperature
-!
-ZT(:,:,:)  = PTHT(:,:,:) * ( PPABST(:,:,:)/XP00 ) ** (XRD/XCPD)
-!
-! Saturation over ice
-!
-ZW(:,:,:) = EXP( XALPI - XBETAI/ZT(:,:,:) - XGAMI*ALOG(ZT(:,:,:) ) )
-ZW(:,:,:) = PRVT(:,:,:)*( PPABST(:,:,:)-ZW(:,:,:) ) / ( (XMV/XMD) * ZW(:,:,:) )
-!
-!
-!-------------------------------------------------------------------------------
-!
-!  optimization by looking for locations where
-!  the temperature is negative only !!!
-!
-GNEGT(:,:,:) = .FALSE.
-GNEGT(IIB:IIE,IJB:IJE,IKB:IKE) = ZT(IIB:IIE,IJB:IJE,IKB:IKE)<XTT .AND. &
-                                 ZW(IIB:IIE,IJB:IJE,IKB:IKE)>0.8
-INEGT = COUNTJV( GNEGT(:,:,:),I1(:),I2(:),I3(:))
-IF( INEGT >= 1 ) THEN
-  ALLOCATE(ZRVT(INEGT)) 
-  ALLOCATE(ZRCT(INEGT)) 
-  ALLOCATE(ZRRT(INEGT)) 
-  ALLOCATE(ZRIT(INEGT)) 
-  ALLOCATE(ZRST(INEGT)) 
-  ALLOCATE(ZRGT(INEGT)) 
-!
-  ALLOCATE(ZCCT(INEGT))
-!
-  ALLOCATE(ZRVS(INEGT)) 
-  ALLOCATE(ZRCS(INEGT))
-  ALLOCATE(ZRIS(INEGT))
-!
-  ALLOCATE(ZTHS(INEGT))
-!
-  ALLOCATE(ZCCS(INEGT))
-  ALLOCATE(ZINS(INEGT,1))
-  ALLOCATE(ZCIS(INEGT))
-!
-  ALLOCATE(ZRHODREF(INEGT)) 
-  ALLOCATE(ZZT(INEGT)) 
-  ALLOCATE(ZPRES(INEGT)) 
-  ALLOCATE(ZEXNREF(INEGT))
-  DO JL=1,INEGT
-    ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL))
-    ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL))
-    ZRRT(JL) = PRRT(I1(JL),I2(JL),I3(JL))
-    ZRIT(JL) = PRIT(I1(JL),I2(JL),I3(JL))
-    ZRST(JL) = PRST(I1(JL),I2(JL),I3(JL))
-    ZRGT(JL) = PRGT(I1(JL),I2(JL),I3(JL))
-!
-    ZCCT(JL) = PCCT(I1(JL),I2(JL),I3(JL))
-!
-    ZRVS(JL) = PRVS(I1(JL),I2(JL),I3(JL))
-    ZRCS(JL) = PRCS(I1(JL),I2(JL),I3(JL))
-    ZRIS(JL) = PRIS(I1(JL),I2(JL),I3(JL))
-!
-    ZTHS(JL) = PTHS(I1(JL),I2(JL),I3(JL))
-!
-    ZCCS(JL) = PCCS(I1(JL),I2(JL),I3(JL))
-    ZCIS(JL) = PCIS(I1(JL),I2(JL),I3(JL))
-!
-    ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL))
-    ZZT(JL)      = ZT(I1(JL),I2(JL),I3(JL))
-    ZPRES(JL)    = PPABST(I1(JL),I2(JL),I3(JL))
-    ZEXNREF(JL)  = PEXNREF(I1(JL),I2(JL),I3(JL))
-  ENDDO
-  ALLOCATE(ZZW(INEGT))
-  ALLOCATE(ZZX(INEGT))
-  ALLOCATE(ZZY(INEGT))
-  ALLOCATE(ZLSFACT(INEGT))
-  ALLOCATE(ZLVFACT(INEGT))
-  ALLOCATE(ZSSI(INEGT))
-  ALLOCATE(ZTCELSIUS(INEGT))
-!
-  ZZW(:)  = ZEXNREF(:)*( XCPD+XCPV*ZRVT(:)+XCL*(ZRCT(:)+ZRRT(:)) &
-                                  +XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) )
-  ZTCELSIUS(:) = MAX( ZZT(:)-XTT,-50.0 )
-  ZLSFACT(:) = (XLSTT+(XCPV-XCI)*ZTCELSIUS(:))/ZZW(:) ! L_s/(Pi_ref*C_ph)
-  ZLVFACT(:) = (XLVTT+(XCPV-XCL)*ZTCELSIUS(:))/ZZW(:) ! L_v/(Pi_ref*C_ph)
-!
-  ZZW(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:)) ) ! es_i
-  ZSSI(:) = ZRVT(:)*(ZPRES(:)-ZZW(:))/((XMV/XMD)*ZZW(:)) - 1.0
-                                                    ! Supersaturation over ice
-!
-!*            compute the heterogeneous nucleation by deposition: RVHNDI
-!
-  DO JL=1,INEGT
-    ZINS(JL,1) = PINS(I1(JL),I2(JL),I3(JL),1)
-  END DO
-  ZZW(:) = 0.0
-  ZZX(:) = 0.0
-  ZZY(:) = 0.0
-!
-  WHERE( ZZT(:)<XTT-5.0 .AND. ZSSI(:)>0.0 )
-    ZZY(:) = XNUC_DEP*EXP( XEXSI_DEP*100.*MIN(1.,ZSSI(:))+XEX_DEP)/(PTSTEP*ZRHODREF(:))
-    ZZX(:) = MAX( ZZY(:)-ZINS(:,1) , 0.0 )
-    ZZW(:) = MIN( XMNU0*ZZX(:) , ZRVS(:) )
-  END WHERE
-!
-  ZINS(:,1)     = ZINS(:,1) + ZZX(:)
-  ZW(:,:,:)     = PINS(:,:,:,1)
-  PINS(:,:,:,1) = UNPACK( ZINS(:,1), MASK=GNEGT(:,:,:), FIELD=ZW(:,:,:)  )
-!
-  ZRVS(:) = ZRVS(:) - ZZW(:)
-  ZRIS(:) = ZRIS(:) + ZZW(:)
-  ZTHS(:) = ZTHS(:) + ZZW(:) * (ZLSFACT(:)-ZLVFACT(:)) ! f(L_s*(RVHNDI))
-  ZCIS(:) = ZCIS(:) + ZZX(:)
-!
-!
-! Budget storage
-  IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-    IF (LBUDGET_TH) CALL BUDGET_DDH (                                                 &
-                    UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                                4,'HIND_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RV) CALL BUDGET_DDH (                                                 &
-                    UNPACK(ZRVS(:),MASK=GNEGT(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),&
-                                                                6,'HIND_BU_RRV',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RI) CALL BUDGET_DDH (                                                 &
-                    UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),&
-                                                                9,'HIND_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_SV) THEN
-      CALL BUDGET_DDH ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),&
-                                                   12+NSV_LIMA_NI,'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-    END IF
-  END IF
-!
-!*            compute the heterogeneous nucleation by contact: RVHNCI
-!
-  DO JL=1,INEGT
-    ZINS(JL,1) = PINS(I1(JL),I2(JL),I3(JL),1)
-  END DO
-  ZZW(:) = 0.0
-  ZZX(:) = 0.0
-  ZZY(:) = 0.0
-!
-  WHERE( ZZT(:)<XTT-2.0 .AND. ZCCT(:)>XCTMIN(2) .AND. ZRCT(:)>XRTMIN(2) )
-    ZZY(:) = MIN( XNUC_CON * EXP( XEXTT_CON*ZTCELSIUS(:)+XEX_CON )             &
-                                               /(PTSTEP*ZRHODREF(:)) , ZCCS(:) )
-    ZZX(:) = MAX( ZZY(:)-ZINS(:,1),0.0 )
-    ZZW(:) = MIN( (ZRCT(:)/ZCCT(:))*ZZX(:),ZRCS(:) )
-  END WHERE
-!
-  ZINS(:,1)     = ZINS(:,1) + ZZX(:)
-  ZW(:,:,:)     = PINS(:,:,:,1)
-  PINS(:,:,:,1) = UNPACK( ZINS(:,1), MASK=GNEGT(:,:,:), FIELD=ZW(:,:,:)  )
-!
-  ZRCS(:) = ZRCS(:) - ZZW(:)
-  ZRIS(:) = ZRIS(:) + ZZW(:)
-  ZTHS(:) = ZTHS(:) + ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_s*(RVHNCI))
-  ZCCS(:) = ZCCS(:) - ZZX(:)
-  ZCIS(:) = ZCIS(:) + ZZX(:)
-!
-!*            unpack variables
-!
-  ZW(:,:,:)   = PRVS(:,:,:)
-  PRVS(:,:,:) = UNPACK( ZRVS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) )
-  ZW(:,:,:)   = PRCS(:,:,:)
-  PRCS(:,:,:) = UNPACK( ZRCS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) )
-  ZW(:,:,:)   = PRIS(:,:,:)
-  PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) )
-  ZW(:,:,:)   = PTHS(:,:,:)
-  PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) )
-  ZW(:,:,:)   = PCCS(:,:,:)
-  PCCS(:,:,:) = UNPACK( ZCCS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) )
-  ZW(:,:,:)   = PCIS(:,:,:)
-  PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) )
-!
-! Budget storage
-  IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-    IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:), 4,'HINC_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:), 7,'HINC_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:), 9,'HINC_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_SV) THEN
-      CALL BUDGET_DDH ( PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      CALL BUDGET_DDH ( PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-    END IF
-  END IF
-
-!
-  DEALLOCATE(ZRVT) 
-  DEALLOCATE(ZRCT) 
-  DEALLOCATE(ZRRT) 
-  DEALLOCATE(ZRIT) 
-  DEALLOCATE(ZRST) 
-  DEALLOCATE(ZRGT) 
-!
-  DEALLOCATE(ZCCT)
-!
-  DEALLOCATE(ZRVS)
-  DEALLOCATE(ZRCS)
-  DEALLOCATE(ZRIS)
-!
-  DEALLOCATE(ZTHS)
-!
-  DEALLOCATE(ZCCS)
-  DEALLOCATE(ZINS)
-  DEALLOCATE(ZCIS)
-!
-  DEALLOCATE(ZRHODREF) 
-  DEALLOCATE(ZZT) 
-  DEALLOCATE(ZTCELSIUS)
-  DEALLOCATE(ZPRES) 
-  DEALLOCATE(ZEXNREF)
-  DEALLOCATE(ZSSI)
-  DEALLOCATE(ZZW)
-  DEALLOCATE(ZZX)
-  DEALLOCATE(ZZY)
-  DEALLOCATE(ZLSFACT)
-  DEALLOCATE(ZLVFACT)
-!
-ELSE
-!
-! Advance the budget calls
-!
-  IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-    IF (LBUDGET_TH)  CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HIND_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RV)  CALL BUDGET_DDH (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HIND_BU_RRV',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RI)  CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HIND_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_SV)  CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-
-    IF (LBUDGET_TH)  CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HINC_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RC)  CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HINC_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RI)  CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HINC_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_SV) THEN
-      CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-    END IF
-  END IF
-!
-END IF
-
-
-
-
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_MEYERS
diff --git a/src/arome/micro/lima_meyers_nucleation.F90 b/src/arome/micro/lima_meyers_nucleation.F90
deleted file mode 100644
index 2b90ca08c6b59dc50f8de755ce8a782755b420f6..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_meyers_nucleation.F90
+++ /dev/null
@@ -1,370 +0,0 @@
-!      ##################################
-       MODULE MODI_LIMA_MEYERS_NUCLEATION
-!      ##################################
-!
-INTERFACE
-   SUBROUTINE LIMA_MEYERS_NUCLEATION (PTSTEP, HFMFILE, OCLOSE_OUT,                &
-                                      PRHODREF, PEXNREF, PPABST,                  &
-                                      PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,   &
-                                      PCCT, PCIT, PINT,                           &
-                                      P_TH_HIND, P_RI_HIND, P_CI_HIND,            &
-                                      P_RC_HINC, P_CC_HINC                        )
-!
-REAL,                     INTENT(IN)    :: PTSTEP
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT
-!
-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(INOUT)    :: PTHT    ! Theta at time 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    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRGT    ! Graupel m.r. at t 
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT)    :: PCCT    ! Cloud water C. at t
-REAL, DIMENSION(:,:,:),   INTENT(INOUT)    :: PCIT    ! Ice crystal C. source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT)    :: PINT    ! Activated ice nuclei C.
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: P_TH_HIND
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: P_RI_HIND
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: P_CI_HIND
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: P_RC_HINC
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: P_CC_HINC
-!
-END SUBROUTINE LIMA_MEYERS_NUCLEATION
-END INTERFACE
-END MODULE MODI_LIMA_MEYERS_NUCLEATION
-!
-!     ######################################################################
-   SUBROUTINE LIMA_MEYERS_NUCLEATION (PTSTEP, HFMFILE, OCLOSE_OUT,                &
-                                      PRHODREF, PEXNREF, PPABST,                  &
-                                      PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,   &
-                                      PCCT, PCIT, PINT,                           &
-                                      P_TH_HIND, P_RI_HIND, P_CI_HIND,            &
-                                      P_RC_HINC, P_CC_HINC                        )
-!     ######################################################################
-!!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the heterogeneous nucleation
-!!    following Phillips (2008).
-!!
-!!
-!!**  METHOD
-!!    ------
-!!      The parameterization of Phillips (2008) is based on observed nucleation
-!!    in the CFDC for a range of T and Si values. Phillips therefore defines a 
-!!    reference activity spectrum, that is, for given T and Si values, the 
-!!    reference concentration of primary ice crystals.
-!!      
-!!      The activation of IFN is closely related to their total surface. Thus, 
-!!    the activable fraction of each IFN specie is determined by an integration
-!!    over the particle size distributions.
-!!
-!!    Subroutine organisation :
-!!
-!!      1- Preliminary computations
-!!      2- Check where computations are necessary, and pack variables
-!!      3- Compute the saturation over water and ice
-!!      4- Compute the reference activity spectrum
-!!             -> CALL LIMA_PHILLIPS_REF_SPECTRUM
-!!         Integrate over the size distributions to compute the IFN activable fraction
-!!             -> CALL LIMA_PHILLIPS_INTEG
-!!      5- Heterogeneous nucleation of insoluble IFN
-!!      6- Heterogeneous nucleation of coated IFN
-!!      7- Unpack variables & deallocations
-!! 
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!      Phillips et al., 2008: An empirical parameterization of heterogeneous
-!!        ice nucleation for multiple chemical species of aerosols, J. Atmos. Sci. 
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy *  jan. 2014   add budgets
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_PARAMETERS
-USE MODD_CST
-USE MODD_PARAM_LIMA
-USE MODD_PARAM_LIMA_COLD
-USE MODD_BUDGET
-USE MODE_BUDGET, ONLY: BUDGET_DDH
-USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NI
-!
-USE MODI_LIMA_FUNCTIONS,  ONLY : COUNTJV
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-REAL,                     INTENT(IN)    :: PTSTEP
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT
-!
-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(INOUT)    :: PTHT    ! Theta at time 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    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRGT    ! Graupel m.r. at t 
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT)    :: PCCT    ! Cloud water C. at t
-REAL, DIMENSION(:,:,:),   INTENT(INOUT)    :: PCIT    ! Ice crystal C. source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT)    :: PINT    ! Activated ice nuclei C.
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: P_TH_HIND
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: P_RI_HIND
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: P_CI_HIND
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: P_RC_HINC
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: P_CC_HINC
-!
-!
-!*       0.2   Declarations of local variables :
-!
-!
-INTEGER :: IIB, IIE, IJB, IJE, IKB, IKE               ! Physical domain
-INTEGER :: JL     ! Loop index
-INTEGER :: INEGT  ! Case number of nucleation
-!
-LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) &
-			  :: GNEGT  ! Test where to compute the nucleation
-!
-INTEGER, DIMENSION(SIZE(PRHODREF))  :: I1,I2,I3 ! Indexes for PACK replacement
-!
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRVT    ! Water vapor m.r. at t
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRCT    ! Cloud water m.r. at t
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRRT    ! Rain water m.r. at t
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRIT    ! Pristine ice m.r. at t
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRST    ! Snow/aggregate m.r. at t
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRGT    ! Graupel/hail m.r. at t
-!
-REAL, DIMENSION(:),   ALLOCATABLE :: ZCCT    ! Cloud water conc. at t
-REAL, DIMENSION(:),   ALLOCATABLE :: ZCIT    ! Pristine ice conc. source
-!
-REAL, DIMENSION(:),   ALLOCATABLE :: ZTHT    ! Theta source
-!
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZINT    ! Nucleated Ice nuclei conc. source
-                                             ! by Deposition/Contact
-!
-REAL, DIMENSION(:), ALLOCATABLE &
-                           :: ZRHODREF, & ! RHO Dry REFerence
-                              ZZT,      & ! Temperature
-                              ZPRES,    & ! Pressure
-                              ZEXNREF,  & ! EXNer Pressure REFerence
-                              ZZW,      & ! Work array
-                              ZZX,      & ! Work array
-                              ZZY,      & ! Work array
-                              ZLSFACT,  & ! L_s/(Pi_ref*C_ph)
-                              ZLVFACT,  & ! L_v/(Pi_ref*C_ph)
-                              ZSSI
-!
-REAL,    DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3))   &
-                                  :: ZW, ZT ! work arrays
-!
-REAL,    DIMENSION(:),   ALLOCATABLE :: ZTCELSIUS
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       1.     PRELIMINARY COMPUTATIONS
-!	        ------------------------
-!
-P_TH_HIND(:,:,:) = 0.
-P_RI_HIND(:,:,:) = 0.
-P_CI_HIND(:,:,:) = 0.
-P_RC_HINC(:,:,:) = 0.
-P_CC_HINC(:,:,:) = 0.
-!
-! Physical domain
-!
-IIB=1+JPHEXT
-IIE=SIZE(PTHT,1) - JPHEXT
-IJB=1+JPHEXT
-IJE=SIZE(PTHT,2) - JPHEXT
-IKB=1+JPVEXT
-IKE=SIZE(PTHT,3) - JPVEXT
-!
-! Temperature
-!
-ZT(:,:,:)  = PTHT(:,:,:) * ( PPABST(:,:,:)/XP00 ) ** (XRD/XCPD)
-!
-! Saturation over ice
-!
-ZW(:,:,:) = EXP( XALPI - XBETAI/ZT(:,:,:) - XGAMI*ALOG(ZT(:,:,:) ) )
-ZW(:,:,:) = PRVT(:,:,:)*( PPABST(:,:,:)-ZW(:,:,:) ) / ( (XMV/XMD) * ZW(:,:,:) )
-!
-!
-!-------------------------------------------------------------------------------
-!
-!  optimization by looking for locations where
-!  the temperature is negative only !!!
-!
-GNEGT(:,:,:) = .FALSE.
-GNEGT(IIB:IIE,IJB:IJE,IKB:IKE) = ZT(IIB:IIE,IJB:IJE,IKB:IKE)<XTT .AND. &
-                                 ZW(IIB:IIE,IJB:IJE,IKB:IKE)>0.8 
-INEGT = COUNTJV( GNEGT(:,:,:),I1(:),I2(:),I3(:))
-IF( INEGT >= 1 ) THEN
-  ALLOCATE(ZRVT(INEGT)) 
-  ALLOCATE(ZRCT(INEGT)) 
-  ALLOCATE(ZRRT(INEGT)) 
-  ALLOCATE(ZRIT(INEGT)) 
-  ALLOCATE(ZRST(INEGT)) 
-  ALLOCATE(ZRGT(INEGT)) 
-!
-  ALLOCATE(ZTHT(INEGT))
-!
-  ALLOCATE(ZCCT(INEGT))
-  ALLOCATE(ZINT(INEGT,1))
-  ALLOCATE(ZCIT(INEGT))
-!
-  ALLOCATE(ZRHODREF(INEGT)) 
-  ALLOCATE(ZZT(INEGT)) 
-  ALLOCATE(ZPRES(INEGT)) 
-  ALLOCATE(ZEXNREF(INEGT))
-  DO JL=1,INEGT
-    ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL))
-    ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL))
-    ZRRT(JL) = PRRT(I1(JL),I2(JL),I3(JL))
-    ZRIT(JL) = PRIT(I1(JL),I2(JL),I3(JL))
-    ZRST(JL) = PRST(I1(JL),I2(JL),I3(JL))
-    ZRGT(JL) = PRGT(I1(JL),I2(JL),I3(JL))
-!
-    ZCCT(JL) = PCCT(I1(JL),I2(JL),I3(JL))
-!
-    ZTHT(JL) = PTHT(I1(JL),I2(JL),I3(JL))
-!
-    ZCCT(JL) = PCCT(I1(JL),I2(JL),I3(JL))
-    ZCIT(JL) = PCIT(I1(JL),I2(JL),I3(JL))
-!
-    ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL))
-    ZZT(JL)      = ZT(I1(JL),I2(JL),I3(JL))
-    ZPRES(JL)    = PPABST(I1(JL),I2(JL),I3(JL))
-    ZEXNREF(JL)  = PEXNREF(I1(JL),I2(JL),I3(JL))
-  ENDDO
-  ALLOCATE(ZZW(INEGT))
-  ALLOCATE(ZZX(INEGT))
-  ALLOCATE(ZZY(INEGT))
-  ALLOCATE(ZLSFACT(INEGT))
-  ALLOCATE(ZLVFACT(INEGT))
-  ALLOCATE(ZSSI(INEGT))
-  ALLOCATE(ZTCELSIUS(INEGT))
-!
-  ZZW(:)  = ZEXNREF(:)*( XCPD+XCPV*ZRVT(:)+XCL*(ZRCT(:)+ZRRT(:)) &
-                                  +XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) )
-  ZTCELSIUS(:) = MAX( ZZT(:)-XTT,-50.0 )
-  ZLSFACT(:) = (XLSTT+(XCPV-XCI)*ZTCELSIUS(:))/ZZW(:) ! L_s/(Pi_ref*C_ph)
-  ZLVFACT(:) = (XLVTT+(XCPV-XCL)*ZTCELSIUS(:))/ZZW(:) ! L_v/(Pi_ref*C_ph)
-!
-  ZZW(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:)) ) ! es_i
-  ZSSI(:) = ZRVT(:)*(ZPRES(:)-ZZW(:))/((XMV/XMD)*ZZW(:)) - 1.0
-                                                    ! Supersaturation over ice
-!
-!---------------------------------------------------------------------------
-!
-!*            compute the heterogeneous nucleation by deposition: RVHNDI
-!
-  DO JL=1,INEGT
-    ZINT(JL,1) = PINT(I1(JL),I2(JL),I3(JL),1)
-  END DO
-  ZZW(:) = 0.0
-  ZZX(:) = 0.0
-  ZZY(:) = 0.0
-!
-  WHERE( ZZT(:)<XTT-5.0 .AND. ZSSI(:)>0.0 )
-    ZZY(:) = XNUC_DEP*EXP( XEXSI_DEP*100.*MIN(1.,ZSSI(:))+XEX_DEP)/ZRHODREF(:)
-    ZZX(:) = MAX( ZZY(:)-ZINT(:,1) , 0.0 ) ! number of ice crystals formed at this time step #/kg
-    ZZW(:) = MIN( XMNU0*ZZX(:) , ZRVT(:) ) ! mass of ice formed at this time step (kg/kg)
-  END WHERE
-  !
-  P_CI_HIND(:,:,:) = UNPACK( ZZX(:), MASK=GNEGT(:,:,:), FIELD=0. )
-  P_RI_HIND(:,:,:) = UNPACK( ZZW(:), MASK=GNEGT(:,:,:), FIELD=0. )
-  P_TH_HIND(:,:,:) = UNPACK( ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)), MASK=GNEGT(:,:,:), FIELD=0. )
-  PTHT(:,:,:) = PTHT(:,:,:) + P_TH_HIND(:,:,:)
-  PRVT(:,:,:) = PRVT(:,:,:) - P_RI_HIND(:,:,:)
-  PRIT(:,:,:) = PRIT(:,:,:) + P_RI_HIND(:,:,:)
-  PCIT(:,:,:) = PCIT(:,:,:) + P_CI_HIND(:,:,:)
-  PINT(:,:,:,1) = PINT(:,:,:,1) + P_CI_HIND(:,:,:)
-!
-!---------------------------------------------------------------------------
-!
-!*            compute the heterogeneous nucleation by contact: RVHNCI
-!
-!
-  DO JL=1,INEGT
-    ZINT(JL,1) = PINT(I1(JL),I2(JL),I3(JL),1)
-  END DO
-  ZZW(:) = 0.0
-  ZZX(:) = 0.0
-  ZZY(:) = 0.0
-!
-  WHERE( ZZT(:)<XTT-2.0 .AND. ZCCT(:)>XCTMIN(2) .AND. ZRCT(:)>XRTMIN(2) )
-    ZZY(:) = MIN( XNUC_CON * EXP( XEXTT_CON*ZTCELSIUS(:)+XEX_CON )             &
-                                               /ZRHODREF(:) , ZCCT(:) )
-    ZZX(:) = MAX( ZZY(:)-ZINT(:,1),0.0 )
-    ZZW(:) = MIN( (ZRCT(:)/ZCCT(:))*ZZX(:),ZRCT(:) )
-  END WHERE
-!
-  P_RC_HINC(:,:,:) = - UNPACK( ZZW(:), MASK=GNEGT(:,:,:), FIELD=0. )
-  P_CC_HINC(:,:,:) = - UNPACK( ZZX(:), MASK=GNEGT(:,:,:), FIELD=0. )
-  PTHT(:,:,:) = PTHT(:,:,:) + UNPACK( ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)), MASK=GNEGT(:,:,:), FIELD=0. )
-  PRCT(:,:,:) = PRCT(:,:,:) + P_RC_HINC(:,:,:)
-  PRIT(:,:,:) = PRIT(:,:,:) - P_RC_HINC(:,:,:)
-  PCCT(:,:,:) = PCCT(:,:,:) + P_CC_HINC(:,:,:)
-  PCIT(:,:,:) = PCIT(:,:,:) - P_CC_HINC(:,:,:)
-  PINT(:,:,:,1) = PINT(:,:,:,1) - P_CC_HINC(:,:,:)
-!
-  DEALLOCATE(ZRVT) 
-  DEALLOCATE(ZRCT) 
-  DEALLOCATE(ZRRT) 
-  DEALLOCATE(ZRIT) 
-  DEALLOCATE(ZRST) 
-  DEALLOCATE(ZRGT) 
-!
-  DEALLOCATE(ZTHT)
-!
-  DEALLOCATE(ZCCT)
-  DEALLOCATE(ZINT)
-  DEALLOCATE(ZCIT)
-!
-  DEALLOCATE(ZRHODREF) 
-  DEALLOCATE(ZZT) 
-  DEALLOCATE(ZTCELSIUS)
-  DEALLOCATE(ZPRES) 
-  DEALLOCATE(ZEXNREF)
-  DEALLOCATE(ZSSI)
-  DEALLOCATE(ZZW)
-  DEALLOCATE(ZZX)
-  DEALLOCATE(ZZY)
-  DEALLOCATE(ZLSFACT)
-  DEALLOCATE(ZLVFACT)
-!
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_MEYERS_NUCLEATION
diff --git a/src/arome/micro/lima_mixed.F90 b/src/arome/micro/lima_mixed.F90
deleted file mode 100644
index 000b503761054740e5f1279e7f1f093d8c4c13c1..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_mixed.F90
+++ /dev/null
@@ -1,816 +0,0 @@
-!      ######################
-       MODULE MODI_LIMA_MIXED
-!      ######################
-!
-INTERFACE
-      SUBROUTINE LIMA_MIXED (OSEDI, OHHONI, KSPLITG, PTSTEP, KMI,           &
-                             HFMFILE, HLUOUT, OCLOSE_OUT, KRR, PZZ, PRHODJ, &
-                             PRHODREF, PEXNREF, PPABST, PW_NU,              &
-                             PTHM, PPABSM,                                  &
-                             PTHT, PRT, PSVT,                               &
-                             PTHS, PRS, PSVS, &
-                            YDDDH, YDLDDH, YDMDDH                                      )
-!
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-LOGICAL,                  INTENT(IN)    :: OSEDI   ! switch to activate the 
-                                                   ! cloud ice sedimentation
-LOGICAL,                  INTENT(IN)    :: OHHONI  ! enable haze freezing
-INTEGER,                  INTENT(IN)    :: KSPLITG ! Number of small time step 
-                                      ! integration for  ice sedimendation
-REAL,                     INTENT(IN)    :: PTSTEP  ! Time step          
-INTEGER,                  INTENT(IN)    :: KMI     ! Model index 
-!
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)    :: HLUOUT  ! Output-listing name for
-                                                   ! model n
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                   ! the tput FM fileoutp
-INTEGER,                  INTENT(IN)    :: KRR     ! Number of moist variables
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ     ! Height (z)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ  ! Dry density * Jacobian
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF ! Reference Exner function
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST  ! abs. pressure at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PW_NU   ! updraft velocity used for
-                                                   ! the nucleation param.
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHM    ! Theta at time t-dt
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABSM  ! abs. pressure at time t-dt
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT    ! Theta at time t
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT     ! m.r. at t 
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT    ! Concentrations at t 
-
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS    ! Theta source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS     ! m.r. source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS    ! Concentrations source
-!
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-!
-END SUBROUTINE LIMA_MIXED
-END INTERFACE
-END MODULE MODI_LIMA_MIXED
-!
-!     #######################################################################
-      SUBROUTINE LIMA_MIXED (OSEDI, OHHONI, KSPLITG, PTSTEP, KMI,           &
-                             HFMFILE, HLUOUT, OCLOSE_OUT, KRR, PZZ, PRHODJ, &
-                             PRHODREF, PEXNREF, PPABST, PW_NU,              &
-                             PTHM, PPABSM,                                  &
-                             PTHT, PRT, PSVT,                               &
-                             PTHS, PRS, PSVS, &
-                            YDDDH, YDLDDH, YDMDDH                                      )
-!     #######################################################################
-!
-!!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the mixed-phase 
-!!    microphysical processes
-!!
-!!
-!!**  METHOD
-!!    ------
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!      Most of the parameterizations come from the ICE3 scheme, described in
-!!    the MESO-NH scientific documentation.
-!!
-!!      Cohard, J.-M. and J.-P. Pinty, 2000: A comprehensive two-moment warm 
-!!      microphysical bulk scheme. 
-!!        Part I: Description and tests
-!!        Part II: 2D experiments with a non-hydrostatic model
-!!      Accepted for publication in Quart. J. Roy. Meteor. Soc. 
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy *  jan. 2014   add budgets
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE YOMLUN   , ONLY : NULOUT
-!
-USE MODD_PARAMETERS,       ONLY : JPHEXT, JPVEXT
-USE MODD_CST,              ONLY : XP00, XRD, XRV, XMV, XMD, XCPD, XCPV,       &
-                                  XCL, XCI, XTT, XLSTT, XLVTT,                &
-                                  XALPI, XBETAI, XGAMI
-USE MODD_PARAM_LIMA,       ONLY : NMOD_IFN, XRTMIN, XCTMIN, LWARM_LIMA, LCOLD_LIMA,     &
-                                  NMOD_CCN, NMOD_IMM, LRAIN_LIMA, LHAIL_LIMA
-USE MODD_PARAM_LIMA_WARM,  ONLY : XLBC, XLBEXC, XLBR, XLBEXR
-USE MODD_PARAM_LIMA_COLD,  ONLY : XLBI, XLBEXI, XLBS, XLBEXS, XSCFAC
-USE MODD_PARAM_LIMA_MIXED, ONLY : XLBG, XLBEXG, XLBH, XLBEXH
-!USE MODD_BUDGET,           ONLY : LBU_ENABLE, NBUMOD
-!
-USE MODD_NSV
-!
-USE MODD_BUDGET
-USE MODE_BUDGET, ONLY: BUDGET_DDH
-!
-USE MODI_LIMA_FUNCTIONS,   ONLY : COUNTJV
-USE MODI_LIMA_MIXED_SLOW_PROCESSES
-USE MODI_LIMA_MIXED_FAST_PROCESSES
-!
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-LOGICAL,                  INTENT(IN)    :: OSEDI   ! switch to activate the 
-                                                   ! cloud ice sedimentation
-LOGICAL,                  INTENT(IN)    :: OHHONI  ! enable haze freezing
-INTEGER,                  INTENT(IN)    :: KSPLITG ! Number of small time step 
-                                      ! integration for  ice sedimendation
-REAL,                     INTENT(IN)    :: PTSTEP  ! Time step          
-INTEGER,                  INTENT(IN)    :: KMI     ! Model index 
-!
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)    :: HLUOUT  ! Output-listing name for
-                                                   ! model n
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                   ! the tput FM fileoutp
-INTEGER,                  INTENT(IN)    :: KRR     ! Number of moist variables
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ     ! Height (z)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ  ! Dry density * Jacobian
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF ! Reference Exner function
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST  ! abs. pressure at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PW_NU   ! updraft velocity used for
-                                                   ! the nucleation param.
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHM    ! Theta at time t-dt
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABSM  ! abs. pressure at time t-dt
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT    ! Theta at time t
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT     ! m.r. at t 
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT    ! Concentrations at t 
-
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS    ! Theta source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS     ! m.r. source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS    ! Concentrations source
-!
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-!
-!*       0.2   Declarations of local variables :
-!
-!3D microphysical variables
-REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3))  &
-                                    :: PRVT,    & ! Water vapor m.r. at t 
-                                       PRCT,    & ! Cloud water m.r. at t 
-                                       PRRT,    & ! Rain water m.r. at t 
-                                       PRIT,    & ! Cloud ice m.r. at t 
-                                       PRST,    & ! Snow/aggregate m.r. at t 
-                                       PRGT,    & ! Graupel m.r. at t 
-                                       PRHT,    & ! Hail m.r. at t 
-                                       !
-                                       PRVS,    & ! Water vapor m.r. source
-                                       PRCS,    & ! Cloud water m.r. source
-                                       PRRS,    & ! Rain water m.r. source
-                                       PRIS,    & ! Pristine ice m.r. source
-                                       PRSS,    & ! Snow/aggregate m.r. source
-                                       PRGS,    & ! Graupel m.r. source
-                                       PRHS,    & ! Hail m.r. source
-                                       !
-                                       PCCT,    & ! Cloud water C. at t
-                                       PCRT,    & ! Rain water C. at t
-                                       PCIT,    & ! Ice crystal C. at t
-                                       !
-                                       PCCS,    & ! Cloud water C. source
-                                       PCRS,    & ! Rain water C. source
-                                       PCIS       ! Ice crystal C. source
-!
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: PNFS     ! CCN C. available source
-                                                  !used as Free ice nuclei for
-                                                  !HOMOGENEOUS nucleation of haze
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: PNAS     ! Cloud  C. nuclei C. source
-                                                  !used as Free ice nuclei for
-                                                  !IMMERSION freezing
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: PIFS     ! Free ice nuclei C. source 
-                                                  !for DEPOSITION and CONTACT
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: PINS     ! Activated ice nuclei C. source
-                                                  !for DEPOSITION and CONTACT
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: PNIS     ! Activated ice nuclei C. source
-                                                  !for IMMERSION
-REAL, DIMENSION(:,:,:),   ALLOCATABLE :: PNHS     ! Hom. freezing of CCN
-!
-! Replace PACK
-LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: GMICRO
-INTEGER :: IMICRO
-INTEGER , DIMENSION(SIZE(GMICRO)) :: I1,I2,I3 ! Used to replace the COUNT
-INTEGER                           :: JL       ! and PACK intrinsics
-!
-! Packed microphysical variables
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRVT    ! Water vapor m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRCT    ! Cloud water m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRRT    ! Rain water m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRIT    ! Pristine ice m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRST    ! Snow/aggregate m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRGT    ! Graupel m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRHT    ! Hail m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE   :: ZCCT    ! Cloud water conc. at t
-REAL, DIMENSION(:), ALLOCATABLE   :: ZCRT    ! Rain water conc. at t
-REAL, DIMENSION(:), ALLOCATABLE   :: ZCIT    ! Pristine ice conc. at t
-!
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRVS    ! Water vapor m.r. source
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRCS    ! Cloud water m.r. source
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRRS    ! Rain water m.r. source
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRIS    ! Pristine ice m.r. source
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRSS    ! Snow/aggregate m.r. source
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRGS    ! Graupel m.r. source
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRHS    ! Hail m.r. source
-!
-REAL, DIMENSION(:), ALLOCATABLE   :: ZTHS    ! Theta source
-!
-REAL, DIMENSION(:),   ALLOCATABLE :: ZCCS    ! Cloud water conc. source
-REAL, DIMENSION(:),   ALLOCATABLE :: ZCRS    ! Rain water conc. source
-REAL, DIMENSION(:),   ALLOCATABLE :: ZCIS    ! Pristine ice conc. source
-!
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZIFS    ! Free Ice nuclei conc. source
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZINS    ! Nucleated Ice nuclei conc. source
-!
-! Other packed variables
-REAL, DIMENSION(:), ALLOCATABLE &
-                   :: ZRHODREF, & ! RHO Dry REFerence
-                      ZRHODJ,   & ! RHO times Jacobian
-                      ZZT,      & ! Temperature
-                      ZPRES,    & ! Pressure
-                      ZEXNREF,  & ! EXNer Pressure REFerence
-                      ZZW,      & ! Work array
-                      ZLSFACT,  & ! L_s/(Pi_ref*C_ph)
-                      ZLVFACT,  & ! L_v/(Pi_ref*C_ph)
-                      ZSSI,     & ! Supersaturation over ice
-                      ZLBDAC,   & ! Slope parameter of the cloud droplet distr.
-                      ZLBDAR,   & ! Slope parameter of the raindrop  distr.
-                      ZLBDAI,   & ! Slope parameter of the ice crystal distr.
-                      ZLBDAS,   & ! Slope parameter of the aggregate distr.
-                      ZLBDAG,   & ! Slope parameter of the graupel   distr.
-                      ZLBDAH,   & ! Slope parameter of the hail   distr.
-                      ZAI,      & ! Thermodynamical function
-                      ZCJ,      & ! used to compute the ventilation coefficient
-                      ZKA,      & ! Thermal conductivity of the air
-                      ZDV         ! Diffusivity of water vapor in the air
-!
-! 3D Temperature
-REAL,    DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: ZT, ZW
-!
-!
-INTEGER :: IIB, IIE, IJB, IJE, IKB, IKE        ! Physical domain
-INTEGER :: JMOD_IFN                            ! Loop index 
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       0.     3D MICROPHYSCAL VARIABLES
-!	        -------------------------
-!
-!
-! Prepare 3D water mixing ratios
-PRVT(:,:,:) = PRT(:,:,:,1)
-PRVS(:,:,:) = PRS(:,:,:,1)
-!
-PRCT(:,:,:) = 0.
-PRCS(:,:,:) = 0.
-PRRT(:,:,:) = 0.
-PRRS(:,:,:) = 0.
-PRIT(:,:,:) = 0.
-PRIS(:,:,:) = 0.
-PRST(:,:,:) = 0.
-PRSS(:,:,:) = 0.
-PRGT(:,:,:) = 0.
-PRGS(:,:,:) = 0.
-PRHT(:,:,:) = 0.
-PRHS(:,:,:) = 0.
-!
-IF ( KRR .GE. 2 ) PRCT(:,:,:) = PRT(:,:,:,2)
-IF ( KRR .GE. 2 ) PRCS(:,:,:) = PRS(:,:,:,2)
-IF ( KRR .GE. 3 ) PRRT(:,:,:) = PRT(:,:,:,3)
-IF ( KRR .GE. 3 ) PRRS(:,:,:) = PRS(:,:,:,3)
-IF ( KRR .GE. 4 ) PRIT(:,:,:) = PRT(:,:,:,4)
-IF ( KRR .GE. 4 ) PRIS(:,:,:) = PRS(:,:,:,4)
-IF ( KRR .GE. 5 ) PRST(:,:,:) = PRT(:,:,:,5) 
-IF ( KRR .GE. 5 ) PRSS(:,:,:) = PRS(:,:,:,5)
-IF ( KRR .GE. 6 ) PRGT(:,:,:) = PRT(:,:,:,6)
-IF ( KRR .GE. 6 ) PRGS(:,:,:) = PRS(:,:,:,6)
-IF ( KRR .GE. 7 ) PRHT(:,:,:) = PRT(:,:,:,7)
-IF ( KRR .GE. 7 ) PRHS(:,:,:) = PRS(:,:,:,7)
-!
-! Prepare 3D number concentrations
-PCCT(:,:,:) = 0.
-PCRT(:,:,:) = 0.
-PCIT(:,:,:) = 0.
-PCCS(:,:,:) = 0.
-PCRS(:,:,:) = 0.
-PCIS(:,:,:) = 0.
-!
-IF ( LWARM_LIMA ) PCCT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NC) 
-IF ( LWARM_LIMA .AND. LRAIN_LIMA ) PCRT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NR)
-IF ( LCOLD_LIMA ) PCIT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NI)
-!
-IF ( LWARM_LIMA ) PCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC)
-IF ( LWARM_LIMA .AND. LRAIN_LIMA ) PCRS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR)
-IF ( LCOLD_LIMA ) PCIS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI)
-!
-IF ( NMOD_CCN .GE. 1 ) THEN
-   ALLOCATE( PNFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_CCN) )
-   ALLOCATE( PNAS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_CCN) )
-   PNFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1)
-   PNAS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1)
-ELSE
-   ALLOCATE( PNFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),1) )
-   ALLOCATE( PNAS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),1) )
-   PNFS(:,:,:,:) = 0.
-   PNAS(:,:,:,:) = 0.
-END IF
-!
-IF ( NMOD_IFN .GE. 1 ) THEN
-   ALLOCATE( PIFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_IFN) )
-   ALLOCATE( PINS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_IFN) )
-   PIFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1)
-   PINS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1)
-ELSE
-   ALLOCATE( PIFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),1) )
-   ALLOCATE( PINS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),1) )
-   PIFS(:,:,:,:) = 0.
-   PINS(:,:,:,:) = 0.
-END IF
-!
-IF ( NMOD_IMM .GE. 1 ) THEN
-   ALLOCATE( PNIS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_IMM) )
-   PNIS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1)
-ELSE
-   ALLOCATE( PNIS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),1) )
-   PNIS(:,:,:,:) = 0.0
-END IF
-!
-IF ( OHHONI ) THEN
-   ALLOCATE( PNHS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) )
-   PNHS(:,:,:) = PSVS(:,:,:,NSV_LIMA_HOM_HAZE)
-ELSE
-   ALLOCATE( PNHS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) )
-   PNHS(:,:,:) = 0.0
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       1.     Pack variables, computations only where necessary
-!	        -------------------------------------------------
-!
-! Physical domain
-!
-IIB=1+JPHEXT
-IIE=SIZE(PZZ,1) - JPHEXT
-IJB=1+JPHEXT
-IJE=SIZE(PZZ,2) - JPHEXT
-IKB=1+JPVEXT
-IKE=SIZE(PZZ,3) - JPVEXT
-!
-! Temperature
-ZT(:,:,:)  = PTHT(:,:,:) * ( PPABST(:,:,:)/XP00 ) ** (XRD/XCPD)
-!
-! Looking for regions where computations are necessary
-GMICRO(:,:,:) = .FALSE.
-GMICRO(IIB:IIE,IJB:IJE,IKB:IKE) = PRCT(IIB:IIE,IJB:IJE,IKB:IKE)>XRTMIN(2) .OR. &
-                                  PRRT(IIB:IIE,IJB:IJE,IKB:IKE)>XRTMIN(3) .OR. &
-                                  PRIT(IIB:IIE,IJB:IJE,IKB:IKE)>XRTMIN(4) .OR. &
-                                  PRST(IIB:IIE,IJB:IJE,IKB:IKE)>XRTMIN(5) .OR. &
-                                  PRGT(IIB:IIE,IJB:IJE,IKB:IKE)>XRTMIN(6) .OR. &
-                                  PRHT(IIB:IIE,IJB:IJE,IKB:IKE)>XRTMIN(7)
-!
-IMICRO = COUNTJV( GMICRO(:,:,:),I1(:),I2(:),I3(:))
-!
-IF( IMICRO >= 1 ) THEN
-!
-   ALLOCATE(ZRVT(IMICRO)) 
-   ALLOCATE(ZRCT(IMICRO))
-   ALLOCATE(ZRRT(IMICRO))  
-   ALLOCATE(ZRIT(IMICRO)) 
-   ALLOCATE(ZRST(IMICRO)) 
-   ALLOCATE(ZRGT(IMICRO))  
-   ALLOCATE(ZRHT(IMICRO))  
-   !
-   ALLOCATE(ZCCT(IMICRO)) 
-   ALLOCATE(ZCRT(IMICRO)) 
-   ALLOCATE(ZCIT(IMICRO)) 
-   !
-   ALLOCATE(ZRVS(IMICRO))  
-   ALLOCATE(ZRCS(IMICRO)) 
-   ALLOCATE(ZRRS(IMICRO)) 
-   ALLOCATE(ZRIS(IMICRO))
-   ALLOCATE(ZRSS(IMICRO))
-   ALLOCATE(ZRGS(IMICRO)) 
-   ALLOCATE(ZRHS(IMICRO)) 
-   ALLOCATE(ZTHS(IMICRO))
-   !
-   ALLOCATE(ZCCS(IMICRO)) 
-   ALLOCATE(ZCRS(IMICRO)) 
-   ALLOCATE(ZCIS(IMICRO)) 
-   ALLOCATE(ZIFS(IMICRO,NMOD_IFN))
-   ALLOCATE(ZINS(IMICRO,NMOD_IFN))
-   !
-   ALLOCATE(ZRHODREF(IMICRO)) 
-   ALLOCATE(ZZT(IMICRO)) 
-   ALLOCATE(ZPRES(IMICRO)) 
-   ALLOCATE(ZEXNREF(IMICRO))
-   DO JL=1,IMICRO   
-      ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL))
-      ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL))
-      ZRRT(JL) = PRRT(I1(JL),I2(JL),I3(JL))
-      ZRIT(JL) = PRIT(I1(JL),I2(JL),I3(JL))
-      ZRST(JL) = PRST(I1(JL),I2(JL),I3(JL))
-      ZRGT(JL) = PRGT(I1(JL),I2(JL),I3(JL))
-      ZRHT(JL) = PRHT(I1(JL),I2(JL),I3(JL))
-      !
-      ZCCT(JL) = PCCT(I1(JL),I2(JL),I3(JL))
-      ZCRT(JL) = PCRT(I1(JL),I2(JL),I3(JL))
-      ZCIT(JL) = PCIT(I1(JL),I2(JL),I3(JL))
-      !
-      ZRVS(JL) = PRVS(I1(JL),I2(JL),I3(JL))
-      ZRCS(JL) = PRCS(I1(JL),I2(JL),I3(JL))
-      ZRRS(JL) = PRRS(I1(JL),I2(JL),I3(JL))
-      ZRIS(JL) = PRIS(I1(JL),I2(JL),I3(JL))
-      ZRSS(JL) = PRSS(I1(JL),I2(JL),I3(JL))
-      ZRGS(JL) = PRGS(I1(JL),I2(JL),I3(JL))
-      ZRHS(JL) = PRHS(I1(JL),I2(JL),I3(JL))
-      ZTHS(JL) = PTHS(I1(JL),I2(JL),I3(JL))
-      !
-      ZCCS(JL) = PCCS(I1(JL),I2(JL),I3(JL))
-      ZCRS(JL) = PCRS(I1(JL),I2(JL),I3(JL))
-      ZCIS(JL) = PCIS(I1(JL),I2(JL),I3(JL))
-      DO JMOD_IFN = 1, NMOD_IFN
-         ZIFS(JL,JMOD_IFN) = PIFS(I1(JL),I2(JL),I3(JL),JMOD_IFN)
-         ZINS(JL,JMOD_IFN) = PINS(I1(JL),I2(JL),I3(JL),JMOD_IFN)
-      ENDDO
-      !
-      ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL))
-      ZZT(JL)      = ZT(I1(JL),I2(JL),I3(JL))
-      ZPRES(JL)    = PPABST(I1(JL),I2(JL),I3(JL))
-      ZEXNREF(JL)  = PEXNREF(I1(JL),I2(JL),I3(JL))
-   ENDDO
-   IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-      ALLOCATE(ZRHODJ(IMICRO))
-      ZRHODJ(:) = PACK( PRHODJ(:,:,:),MASK=GMICRO(:,:,:) )
-   END IF
-!
-! Atmospheric parameters 
-!
-   ALLOCATE(ZZW(IMICRO))
-   ALLOCATE(ZLSFACT(IMICRO))
-   ALLOCATE(ZLVFACT(IMICRO))
-   ALLOCATE(ZSSI(IMICRO))
-   ALLOCATE(ZAI(IMICRO))
-   ALLOCATE(ZCJ(IMICRO))
-   ALLOCATE(ZKA(IMICRO))
-   ALLOCATE(ZDV(IMICRO))
-!
-   ZZW(:)  = ZEXNREF(:)*( XCPD+XCPV*ZRVT(:)+XCL*(ZRCT(:)+ZRRT(:)) &
-        +XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) )
-!
-   ZLSFACT(:) = (XLSTT+(XCPV-XCI)*(ZZT(:)-XTT))/ZZW(:) ! L_s/(Pi_ref*C_ph)
-   ZLVFACT(:) = (XLVTT+(XCPV-XCL)*(ZZT(:)-XTT))/ZZW(:) ! L_v/(Pi_ref*C_ph)
-!
-   ZZW(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) )
-   ZSSI(:) = ZRVT(:)*( ZPRES(:)-ZZW(:) ) / ( (XMV/XMD) * ZZW(:) ) - 1.0
-                                                       ! Supersaturation over ice
-!
-   ZKA(:) = 2.38E-2 + 0.0071E-2 * ( ZZT(:) - XTT )          ! k_a
-   ZDV(:) = 0.211E-4 * (ZZT(:)/XTT)**1.94 * (XP00/ZPRES(:)) ! D_v
-!
-! Thermodynamical function ZAI = A_i(T,P)
-   ZAI(:) = ( XLSTT + (XCPV-XCI)*(ZZT(:)-XTT) )**2 / (ZKA(:)*XRV*ZZT(:)**2) &
-                                         + ( XRV*ZZT(:) ) / (ZDV(:)*ZZW(:))
-! ZCJ = c^prime_j (in the ventilation factor)
-   ZCJ(:) = XSCFAC * ZRHODREF(:)**0.3 / SQRT( 1.718E-5+0.0049E-5*(ZZT(:)-XTT) )
-!
-!
-! Particle distribution parameters
-!
-   ALLOCATE(ZLBDAC(IMICRO)) 
-   ALLOCATE(ZLBDAR(IMICRO))
-   ALLOCATE(ZLBDAI(IMICRO)) 
-   ALLOCATE(ZLBDAS(IMICRO))
-   ALLOCATE(ZLBDAG(IMICRO))
-   ALLOCATE(ZLBDAH(IMICRO))
-   ZLBDAC(:)  = 1.E10
-   WHERE (ZRCT(:)>XRTMIN(2) .AND. ZCCT(:)>XCTMIN(2))
-      ZLBDAC(:) = ( XLBC*ZCCT(:) / ZRCT(:) )**XLBEXC
-   END WHERE
-   ZLBDAR(:)  = 1.E10
-   WHERE (ZRRT(:)>XRTMIN(3) .AND. ZCRT(:)>XCTMIN(3))
-      ZLBDAR(:) = ( XLBR*ZCRT(:) / ZRRT(:) )**XLBEXR
-   END WHERE
-   ZLBDAI(:)  = 1.E10
-   WHERE (ZRIT(:)>XRTMIN(4) .AND. ZCIT(:)>XCTMIN(4))
-      ZLBDAI(:) = ( XLBI*ZCIT(:) / ZRIT(:) )**XLBEXI
-   END WHERE
-   ZLBDAS(:)  = 1.E10
-   WHERE (ZRST(:)>XRTMIN(5) )
-      ZLBDAS(:) = XLBS*( ZRHODREF(:)*ZRST(:) )**XLBEXS
-   END WHERE
-   ZLBDAG(:)  = 1.E10
-   WHERE (ZRGT(:)>XRTMIN(6) )
-      ZLBDAG(:) = XLBG*( ZRHODREF(:)*ZRGT(:) )**XLBEXG
-   END WHERE
-   ZLBDAH(:)  = 1.E10
-   WHERE (ZRHT(:)>XRTMIN(7) )
-      ZLBDAH(:) = XLBH*( ZRHODREF(:)*ZRHT(:) )**XLBEXH
-   END WHERE
-! 
-!-------------------------------------------------------------------------------
-!
-!
-!*       2.     Compute the slow processes involving cloud water and graupel
-!	        ------------------------------------------------------------
-!
-   CALL LIMA_MIXED_SLOW_PROCESSES(ZRHODREF, ZZT, ZSSI, PTSTEP,  &
-                                  ZLSFACT, ZLVFACT, ZAI, ZCJ,   &
-                                  ZRGT, ZCIT,                   &
-                                  ZRVS, ZRCS, ZRIS, ZRGS, ZTHS, &
-                                  ZCCS, ZCIS, ZIFS, ZINS,       &
-                                  ZLBDAI, ZLBDAG,               &
-                                  ZRHODJ, GMICRO, PRHODJ, KMI,  &
-                                  PTHS, PRVS, PRCS, PRIS, PRGS, &
-                                  PCCS, PCIS, &
-                            YDDDH, YDLDDH, YDMDDH                    )
-! 
-!-------------------------------------------------------------------------------
-!
-!
-!        3.     Compute the fast RS and RG processes
-!   	        ------------------------------------
-!
-   CALL LIMA_MIXED_FAST_PROCESSES(ZRHODREF, ZZT, ZPRES, PTSTEP,           &
-                                  ZLSFACT, ZLVFACT, ZKA, ZDV, ZCJ,        &
-                                  ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT,     &
-                                  ZRHT, ZCCT, ZCRT, ZCIT,                 &
-                                  ZRCS, ZRRS, ZRIS, ZRSS, ZRGS, ZRHS,     &
-                                  ZTHS, ZCCS, ZCRS, ZCIS,                 &
-                                  ZLBDAC, ZLBDAR, ZLBDAS, ZLBDAG, ZLBDAH, &
-                                  ZRHODJ, GMICRO, PRHODJ, KMI, PTHS,      &
-                                  PRCS, PRRS, PRIS, PRSS, PRGS, PRHS,     &
-                                  PCCS, PCRS, PCIS, &
-                            YDDDH, YDLDDH, YDMDDH                        )
-!
-!-------------------------------------------------------------------------------
-!
-!
-!
-!        4.     Unpack variables
-!   	        ----------------
-!
-!
-   ZW(:,:,:) = PRVS(:,:,:)
-   PRVS(:,:,:) = UNPACK( ZRVS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:) = PRCS(:,:,:)
-   PRCS(:,:,:) = UNPACK( ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:) = PRRS(:,:,:)
-   PRRS(:,:,:) = UNPACK( ZRRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:) = PRIS(:,:,:)
-   PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:) = PRSS(:,:,:)
-   PRSS(:,:,:) = UNPACK( ZRSS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:) = PRGS(:,:,:)
-   PRGS(:,:,:) = UNPACK( ZRGS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:) = PRHS(:,:,:)
-   PRHS(:,:,:) = UNPACK( ZRHS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-!
-   ZW(:,:,:) = PTHS(:,:,:)
-   PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-!
-   ZW(:,:,:) = PCCS(:,:,:)
-   PCCS(:,:,:) = UNPACK( ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:) = PCRS(:,:,:)
-   PCRS(:,:,:) = UNPACK( ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:) = PCIS(:,:,:)
-   PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-!
-   DO JMOD_IFN = 1, NMOD_IFN
-      ZW(:,:,:) = PIFS(:,:,:,JMOD_IFN)
-      PIFS(:,:,:,JMOD_IFN) = UNPACK( ZIFS(:,JMOD_IFN),MASK=GMICRO(:,:,:),         &
-                                                    FIELD=ZW(:,:,:) )
-      ZW(:,:,:) = PINS(:,:,:,JMOD_IFN)
-      PINS(:,:,:,JMOD_IFN) = UNPACK( ZINS(:,JMOD_IFN),MASK=GMICRO(:,:,:),         &
-                                                    FIELD=ZW(:,:,:) )
-   ENDDO
-!
-   DEALLOCATE(ZRVT) 
-   DEALLOCATE(ZRCT)
-   DEALLOCATE(ZRRT)  
-   DEALLOCATE(ZRIT) 
-   DEALLOCATE(ZRST) 
-   DEALLOCATE(ZRGT)
-   DEALLOCATE(ZRHT)
-!  
-   DEALLOCATE(ZCCT) 
-   DEALLOCATE(ZCRT) 
-   DEALLOCATE(ZCIT)
-! 
-   DEALLOCATE(ZRVS)  
-   DEALLOCATE(ZRCS) 
-   DEALLOCATE(ZRRS) 
-   DEALLOCATE(ZRIS)
-   DEALLOCATE(ZRSS)
-   DEALLOCATE(ZRGS) 
-   DEALLOCATE(ZRHS) 
-   DEALLOCATE(ZTHS)
-!
-   DEALLOCATE(ZCCS) 
-   DEALLOCATE(ZCRS) 
-   DEALLOCATE(ZCIS)  
-   DEALLOCATE(ZIFS)
-   DEALLOCATE(ZINS)
-!
-   DEALLOCATE(ZRHODREF) 
-   DEALLOCATE(ZZT) 
-   DEALLOCATE(ZPRES) 
-   DEALLOCATE(ZEXNREF)
-!
-   DEALLOCATE(ZZW)
-   DEALLOCATE(ZLSFACT)
-   DEALLOCATE(ZLVFACT)
-   DEALLOCATE(ZSSI)
-   DEALLOCATE(ZAI)
-   DEALLOCATE(ZCJ)
-   DEALLOCATE(ZKA)
-   DEALLOCATE(ZDV)
-!
-   DEALLOCATE(ZLBDAC) 
-   DEALLOCATE(ZLBDAR)
-   DEALLOCATE(ZLBDAI) 
-   DEALLOCATE(ZLBDAS)
-   DEALLOCATE(ZLBDAG)
-   DEALLOCATE(ZLBDAH)
-!
-   IF (NBUMOD==KMI .AND. LBU_ENABLE) DEALLOCATE(ZRHODJ)
-!
-!
-ELSE
-!
-! Advance the budget calls
-!
-  IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
- 
-    IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DEPG_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RV) CALL BUDGET_DDH (PRVS(:,:,:)*PRHODJ(:,:,:),6,'DEPG_BU_RRV',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'DEPG_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-
-    IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'IMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'IMLT_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'IMLT_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_SV) CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'IMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_SV) CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'IMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-
-    IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'BERFI_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'BERFI_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'BERFI_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-        
-    IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'RIM_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'RIM_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10,'RIM_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'RIM_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_SV) CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'RIM_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-    
-    IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HMS_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10,'HMS_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_SV) CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HMS_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-    
-    IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'ACC_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'ACC_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10,'ACC_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'ACC_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_SV) CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'ACC_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-     
-    IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10,'CMEL_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'CMEL_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-    
-    IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'CFRZ_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'CFRZ_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'CFRZ_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'CFRZ_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_SV) CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'CFRZ_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_SV) CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'CFRZ_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-
-    IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'WETG_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'WETG_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'WETG_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'WETG_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10,'WETG_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'WETG_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RH) CALL BUDGET_DDH (PRHS(:,:,:)*PRHODJ(:,:,:),12,'WETG_BU_RRH',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_SV) CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_SV) CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_SV) CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH)    
-    
-    IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'DRYG_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'DRYG_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'DRYG_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'DRYG_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10,'DRYG_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'DRYG_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_SV) CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_SV) CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_SV) CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-
-    IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HMG_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'HMG_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_SV) CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HMG_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-    
-    IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'GMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'GMLT_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'GMLT_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_SV) CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'GMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-
-    IF (LHAIL_LIMA) THEN
-       IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'WETH_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-       IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'WETH_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-       IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'WETH_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-       IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'WETH_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-       IF (LBUDGET_RS) CALL BUDGET_DDH (PRSS(:,:,:)*PRHODJ(:,:,:),10,'WETH_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-       IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'WETH_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-       IF (LBUDGET_RH) CALL BUDGET_DDH (PRHS(:,:,:)*PRHODJ(:,:,:),12,'WETH_BU_RRH',YDDDH, YDLDDH, YDMDDH)
-       IF (LBUDGET_SV) CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'WETH_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-       IF (LBUDGET_SV) CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'WETH_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-       IF (LBUDGET_SV) CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'WETH_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-  
-       IF (LBUDGET_RG) CALL BUDGET_DDH (PRGS(:,:,:)*PRHODJ(:,:,:),11,'COHG_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-       IF (LBUDGET_RH) CALL BUDGET_DDH (PRHS(:,:,:)*PRHODJ(:,:,:),12,'COHG_BU_RRH',YDDDH, YDLDDH, YDMDDH)
-
-       IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-       IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8,'HMLT_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-       IF (LBUDGET_RH) CALL BUDGET_DDH (PRHS(:,:,:)*PRHODJ(:,:,:),12,'HMLT_BU_RRH',YDDDH, YDLDDH, YDMDDH) 
-       IF (LBUDGET_SV) CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'HMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH)  
-    ENDIF
-        
-  ENDIF
-!
-END IF ! IMICRO >= 1
-!
-!------------------------------------------------------------------------------
-!
-!
-!*       5.    REPORT 3D MICROPHYSICAL VARIABLES IN PRS AND PSVS
-!              -------------------------------------------------
-!
-PRS(:,:,:,1) = PRVS(:,:,:)
-IF ( KRR .GE. 2 ) PRS(:,:,:,2) = PRCS(:,:,:)
-IF ( KRR .GE. 3 ) PRS(:,:,:,3) = PRRS(:,:,:)
-IF ( KRR .GE. 4 ) PRS(:,:,:,4) = PRIS(:,:,:)
-IF ( KRR .GE. 5 ) PRS(:,:,:,5) = PRSS(:,:,:)
-IF ( KRR .GE. 6 ) PRS(:,:,:,6) = PRGS(:,:,:)
-IF ( KRR .GE. 7 ) PRS(:,:,:,7) = PRHS(:,:,:)
-!
-! Prepare 3D number concentrations
-!
-PSVS(:,:,:,NSV_LIMA_NC) = PCCS(:,:,:)
-IF ( LRAIN_LIMA ) PSVS(:,:,:,NSV_LIMA_NR) = PCRS(:,:,:)
-PSVS(:,:,:,NSV_LIMA_NI) = PCIS(:,:,:)
-!
-IF ( NMOD_CCN .GE. 1 ) THEN
-   PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) = PNFS(:,:,:,:)
-   PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1) = PNAS(:,:,:,:)
-END IF
-!
-IF ( NMOD_IFN .GE. 1 ) THEN
-   PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1) = PIFS(:,:,:,:)
-   PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1) = PINS(:,:,:,:)
-END IF
-!
-IF ( NMOD_IMM .GE. 1 ) THEN
-   PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1) = PNIS(:,:,:,:)
-END IF
-!
-IF (ALLOCATED(PNFS)) DEALLOCATE(PNFS)
-IF (ALLOCATED(PNAS)) DEALLOCATE(PNAS)
-IF (ALLOCATED(PIFS)) DEALLOCATE(PIFS)
-IF (ALLOCATED(PINS)) DEALLOCATE(PINS)
-IF (ALLOCATED(PNIS)) DEALLOCATE(PNIS)
-IF (ALLOCATED(PNHS)) DEALLOCATE(PNHS)
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_MIXED
diff --git a/src/arome/micro/lima_mixed_fast_processes.F90 b/src/arome/micro/lima_mixed_fast_processes.F90
deleted file mode 100644
index 9bcfa9bb67e4266f3bfc89f07fe31e47027889c8..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_mixed_fast_processes.F90
+++ /dev/null
@@ -1,1341 +0,0 @@
-!      #####################################
-       MODULE MODI_LIMA_MIXED_FAST_PROCESSES
-!      #####################################
-!
-INTERFACE
-      SUBROUTINE LIMA_MIXED_FAST_PROCESSES (ZRHODREF, ZZT, ZPRES, PTSTEP,           &
-                                            ZLSFACT, ZLVFACT, ZKA, ZDV, ZCJ,        &
-                                            ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT,     &
-                                            ZRHT, ZCCT, ZCRT, ZCIT,                 &
-                                            ZRCS, ZRRS, ZRIS, ZRSS, ZRGS, ZRHS,     &
-                                            ZTHS, ZCCS, ZCRS, ZCIS,                 &
-                                            ZLBDAC, ZLBDAR, ZLBDAS, ZLBDAG, ZLBDAH, &
-                                            ZRHODJ, GMICRO, PRHODJ, KMI, PTHS,      &
-                                            PRCS, PRRS, PRIS, PRSS, PRGS, PRHS,     &
-                                            PCCS, PCRS, PCIS, &
-                            YDDDH, YDLDDH, YDMDDH                        )
-!
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: ZRHODREF  ! RHO Dry REFerence
-REAL, DIMENSION(:),   INTENT(IN)    :: ZZT       ! Temperature
-REAL, DIMENSION(:),   INTENT(IN)    :: ZPRES     ! Pressure
-REAL,                 INTENT(IN)    :: PTSTEP    ! Time step          
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: ZLSFACT   ! L_s/(Pi_ref*C_ph)
-REAL, DIMENSION(:),   INTENT(IN)    :: ZLVFACT   ! L_v/(Pi_ref*C_ph)
-REAL, DIMENSION(:),   INTENT(IN)    :: ZKA       ! Thermal conductivity of the air
-REAL, DIMENSION(:),   INTENT(IN)    :: ZDV       ! Diffusivity of water vapor in the air
-REAL, DIMENSION(:),   INTENT(IN)    :: ZCJ       ! Ventilation coefficient ?
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: ZRVT    ! Water vapor m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: ZRCT    ! Cloud water m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: ZRRT    ! Rain water m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: ZRIT    ! Pristine ice m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: ZRST    ! Snow/aggregate m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: ZRGT    ! Graupel m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: ZRHT    ! Hail m.r. at t
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: ZCCT    ! Cloud water conc. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: ZCRT    ! Rain water conc. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: ZCIT    ! Pristine ice conc. at t
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZRCS    ! Cloud water m.r. source
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZRRS    ! Rain water m.r. source
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZRIS    ! Pristine ice m.r. source
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZRSS    ! Snow/aggregate m.r. source
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZRGS    ! Graupel/hail m.r. source
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZRHS    ! Hail m.r. source
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZTHS    ! Theta source
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZCCS    ! Cloud water conc. source
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZCRS    ! Rain water conc. source
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZCIS    ! Pristine ice conc. source
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: ZLBDAC  ! Slope param of the cloud droplet distr.
-REAL, DIMENSION(:),   INTENT(IN)    :: ZLBDAR  ! Slope param of the raindrop  distr
-REAL, DIMENSION(:),   INTENT(IN)    :: ZLBDAS  ! Slope param of the aggregate distr.
-REAL, DIMENSION(:),   INTENT(IN)    :: ZLBDAG  ! Slope param of the graupel distr.
-REAL, DIMENSION(:),   INTENT(IN)    :: ZLBDAH  ! Slope param of the hail distr.
-!
-! used for budget storage
-REAL,    DIMENSION(:),     INTENT(IN) :: ZRHODJ
-LOGICAL, DIMENSION(:,:,:), INTENT(IN) :: GMICRO 
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRHODJ
-INTEGER,                   INTENT(IN) :: KMI 
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PTHS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRCS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRRS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRIS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRSS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRGS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRHS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PCCS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PCRS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PCIS
-!
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-!
-END SUBROUTINE LIMA_MIXED_FAST_PROCESSES
-END INTERFACE
-END MODULE MODI_LIMA_MIXED_FAST_PROCESSES
-!
-!     #######################################################################
-      SUBROUTINE LIMA_MIXED_FAST_PROCESSES (ZRHODREF, ZZT, ZPRES, PTSTEP,           &
-                                            ZLSFACT, ZLVFACT, ZKA, ZDV, ZCJ,        &
-                                            ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT,     &
-                                            ZRHT, ZCCT, ZCRT, ZCIT,                 &
-                                            ZRCS, ZRRS, ZRIS, ZRSS, ZRGS, ZRHS,     &
-                                            ZTHS, ZCCS, ZCRS, ZCIS,                 &
-                                            ZLBDAC, ZLBDAR, ZLBDAS, ZLBDAG, ZLBDAH, &
-                                            ZRHODJ, GMICRO, PRHODJ, KMI, PTHS,      &
-                                            PRCS, PRRS, PRIS, PRSS, PRGS, PRHS,     &
-                                            PCCS, PCRS, PCIS, &
-                            YDDDH, YDLDDH, YDMDDH                        )
-!     #######################################################################
-!
-!!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the mixed-phase 
-!!    fast processes :
-!!      
-!!      - Fast RS processes :
-!!          - Cloud droplet riming of the aggregates
-!!          - Hallett-Mossop ice multiplication process due to snow riming
-!!          - Rain accretion onto the aggregates
-!!          - Conversion-Melting of the aggregates
-!!
-!!      - Fast RG processes :
-!!          - Rain contact freezing
-!!          - Wet/Dry growth of the graupel
-!!          - Hallett-Mossop ice multiplication process due to graupel riming
-!!          - Melting of the graupeln
-!!
-!!
-!!**  METHOD
-!!    ------
-!!
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!      Most of the parameterizations come from the ICE3 scheme, described in
-!!    the MESO-NH scientific documentation.
-!!
-!!      Cohard, J.-M. and J.-P. Pinty, 2000: A comprehensive two-moment warm 
-!!      microphysical bulk scheme. 
-!!        Part I: Description and tests
-!!        Part II: 2D experiments with a non-hydrostatic model
-!!      Accepted for publication in Quart. J. Roy. Meteor. Soc. 
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy *  jan. 2014    add budgets
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE YOMLUN   , ONLY : NULOUT
-!
-USE MODD_CST
-USE MODD_PARAM_LIMA
-USE MODD_PARAM_LIMA_COLD
-USE MODD_PARAM_LIMA_MIXED
-!
-USE MODD_NSV
-USE MODD_BUDGET
-USE MODE_BUDGET, ONLY: BUDGET_DDH
-!
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: ZRHODREF  ! RHO Dry REFerence
-REAL, DIMENSION(:),   INTENT(IN)    :: ZZT       ! Temperature
-REAL, DIMENSION(:),   INTENT(IN)    :: ZPRES     ! Pressure
-REAL,                 INTENT(IN)    :: PTSTEP    ! Time step          
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: ZLSFACT   ! L_s/(Pi_ref*C_ph)
-REAL, DIMENSION(:),   INTENT(IN)    :: ZLVFACT   ! L_v/(Pi_ref*C_ph)
-REAL, DIMENSION(:),   INTENT(IN)    :: ZKA       ! Thermal conductivity of the air
-REAL, DIMENSION(:),   INTENT(IN)    :: ZDV       ! Diffusivity of water vapor in the air
-REAL, DIMENSION(:),   INTENT(IN)    :: ZCJ       ! Ventilation coefficient ?
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: ZRVT    ! Water vapor m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: ZRCT    ! Cloud water m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: ZRRT    ! Rain water m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: ZRIT    ! Pristine ice m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: ZRST    ! Snow/aggregate m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: ZRGT    ! Graupel/hail m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: ZRHT    ! Hail m.r. at t
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: ZCCT    ! Cloud water conc. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: ZCRT    ! Rain water conc. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: ZCIT    ! Pristine ice conc. at t
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZRCS    ! Cloud water m.r. source
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZRRS    ! Rain water m.r. source
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZRIS    ! Pristine ice m.r. source
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZRSS    ! Snow/aggregate m.r. source
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZRGS    ! Graupel/hail m.r. source
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZRHS    ! Hail m.r. source
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZTHS    ! Theta source
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZCCS    ! Cloud water conc. source
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZCRS    ! Rain water conc. source
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZCIS    ! Pristine ice conc. source
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: ZLBDAC  ! Slope param of the cloud droplet distr.
-REAL, DIMENSION(:),   INTENT(IN)    :: ZLBDAR  ! Slope param of the raindrop  distr
-REAL, DIMENSION(:),   INTENT(IN)    :: ZLBDAS  ! Slope param of the aggregate distr.
-REAL, DIMENSION(:),   INTENT(IN)    :: ZLBDAG  ! Slope param of the graupel distr.
-REAL, DIMENSION(:),   INTENT(IN)    :: ZLBDAH  ! Slope param of the hail distr.
-!
-! used for budget storage
-REAL,    DIMENSION(:),     INTENT(IN) :: ZRHODJ
-LOGICAL, DIMENSION(:,:,:), INTENT(IN) :: GMICRO 
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRHODJ
-INTEGER,                   INTENT(IN) :: KMI
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PTHS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRCS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRRS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRIS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRSS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRGS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRHS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PCCS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PCRS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PCIS
-
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-!
-!
-!*       0.2   Declarations of local variables :
-!
-LOGICAL, DIMENSION(SIZE(ZZT)) :: GRIM, GACC, GDRY, GWET, GHAIL ! Test where to compute
-INTEGER :: IGRIM, IGACC, IGDRY, IGWET, IHAIL
-INTEGER :: JJ
-INTEGER, DIMENSION(:), ALLOCATABLE :: IVEC1,IVEC2        ! Vectors of indices
-REAL,    DIMENSION(:), ALLOCATABLE :: ZVEC1,ZVEC2, ZVEC3 ! Work vectors
-REAL,    DIMENSION(SIZE(ZZT))  :: ZZW, ZZX      
-REAL,    DIMENSION(SIZE(ZZT))  :: ZRDRYG, ZRWETG   
-REAL,    DIMENSION(SIZE(ZZT),7)  :: ZZW1 
-REAL :: NHAIL
-REAL :: ZTHRH, ZTHRC
-!
-!-------------------------------------------------------------------------------
-!
-!                         #################
-!                         FAST RS PROCESSES
-!                         #################
-!
-IF (LSNOW_LIMA) THEN
-!
-!
-!*       1.1  Cloud droplet riming of the aggregates  
-!        -------------------------------------------
-!
-!
-ZZW1(:,:) = 0.0
-!
-GRIM(:) = (ZRCT(:)>XRTMIN(2)) .AND. (ZRST(:)>XRTMIN(5)) .AND. (ZRCS(:)>XRTMIN(2)/PTSTEP) .AND. (ZZT(:)<XTT)
-IGRIM = COUNT( GRIM(:) )
-!
-IF( IGRIM>0 ) THEN
-!
-!        1.1.0  allocations
-!
-   ALLOCATE(ZVEC1(IGRIM))
-   ALLOCATE(ZVEC2(IGRIM))
-   ALLOCATE(IVEC1(IGRIM))
-   ALLOCATE(IVEC2(IGRIM))
-!
-!        1.1.1  select the ZLBDAS
-!
-   ZVEC1(:) = PACK( ZLBDAS(:),MASK=GRIM(:) )
-!
-!        1.1.2  find the next lower indice for the ZLBDAS in the geometrical
-!               set of Lbda_s used to tabulate some moments of the incomplete 
-!               gamma function
-!
-   ZVEC2(1:IGRIM) = MAX( 1.00001, MIN( FLOAT(NGAMINC)-0.00001,           &
-                         XRIMINTP1 * LOG( ZVEC1(1:IGRIM) ) + XRIMINTP2 ) )
-   IVEC2(1:IGRIM) = INT( ZVEC2(1:IGRIM) )
-   ZVEC2(1:IGRIM) = ZVEC2(1:IGRIM) - FLOAT( IVEC2(1:IGRIM) )
-!
-!        1.1.3  perform the linear interpolation of the normalized
-!               "2+XDS"-moment of the incomplete gamma function
-!
-   ZVEC1(1:IGRIM) =   XGAMINC_RIM1( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM)      &
-                    - XGAMINC_RIM1( IVEC2(1:IGRIM)   )*(ZVEC2(1:IGRIM) - 1.0)
-   ZZW(:) = UNPACK( VECTOR=ZVEC1(:),MASK=GRIM,FIELD=0.0 )
-!
-!        1.1.4  riming of the small sized aggregates
-!
-   WHERE ( GRIM(:) )
-      ZZW1(:,1) = MIN( ZRCS(:),                              &
-  	           XCRIMSS * ZZW(:) * ZRCT(:)                & ! RCRIMSS
-  	                            *   ZLBDAS(:)**XEXCRIMSS &
-    			            * ZRHODREF(:)**(-XCEXVT) )
-      ZRCS(:) = ZRCS(:) - ZZW1(:,1)
-      ZRSS(:) = ZRSS(:) + ZZW1(:,1)
-      ZTHS(:) = ZTHS(:) + ZZW1(:,1)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCRIMSS))
-!
-      ZCCS(:) = MAX( ZCCS(:)-ZZW1(:,1)*(ZCCT(:)/ZRCT(:)),0.0 ) ! Lambda_c**3
-   END WHERE
-!
-!        1.1.5  perform the linear interpolation of the normalized
-!               "XBS"-moment of the incomplete gamma function
-!
-   ZVEC1(1:IGRIM) =  XGAMINC_RIM2( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM)      &
-                   - XGAMINC_RIM2( IVEC2(1:IGRIM)   )*(ZVEC2(1:IGRIM) - 1.0)
-   ZZW(:) = UNPACK( VECTOR=ZVEC1(:),MASK=GRIM,FIELD=0.0 )
-!
-!        1.1.6  riming-conversion of the large sized aggregates into graupeln
-!
-!
-   WHERE ( GRIM(:) .AND. (ZRSS(:)>XRTMIN(5)/PTSTEP) )
-      ZZW1(:,2) = MIN( ZRCS(:),                     &
-    	           XCRIMSG * ZRCT(:)                & ! RCRIMSG
-    	                   *  ZLBDAS(:)**XEXCRIMSG  &
-  	                   * ZRHODREF(:)**(-XCEXVT) &
-    		           - ZZW1(:,1)              )
-      ZZW1(:,3) = MIN( ZRSS(:),                         &
-                       XSRIMCG * ZLBDAS(:)**XEXSRIMCG   & ! RSRIMCG
-   	                       * (1.0 - ZZW(:) )/(PTSTEP*ZRHODREF(:)))
-      ZRCS(:) = ZRCS(:) - ZZW1(:,2)
-      ZRSS(:) = ZRSS(:) - ZZW1(:,3)
-      ZRGS(:) = ZRGS(:) + ZZW1(:,2) + ZZW1(:,3)
-      ZTHS(:) = ZTHS(:) + ZZW1(:,2)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCRIMSG))
-!
-      ZCCS(:) = MAX( ZCCS(:)-ZZW1(:,2)*(ZCCT(:)/ZRCT(:)),0.0 ) ! Lambda_c**3
-   END WHERE
-   DEALLOCATE(IVEC2)
-   DEALLOCATE(IVEC1)
-   DEALLOCATE(ZVEC2)
-   DEALLOCATE(ZVEC1)
-END IF
-!
-! Budget storage
-IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-  IF (LBUDGET_TH) CALL BUDGET_DDH (                                               &
-                 UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), &
-                                                               4,'RIM_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RC) CALL BUDGET_DDH (                                               &
-                 UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), &
-                                                               7,'RIM_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RS) CALL BUDGET_DDH (                                               &
-                 UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), &
-                                                              10,'RIM_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RG) CALL BUDGET_DDH (                                               &
-                 UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), &
-                                                              11,'RIM_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_SV) THEN
-    CALL BUDGET_DDH (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), &
-                                                  12+NSV_LIMA_NC,'RIM_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-  END IF
-END IF
-!
-!
-!*       1.2  Hallett-Mossop ice multiplication process due to snow riming  
-!        -----------------------------------------------------------------
-!
-!
-GRIM(:) = (ZZT(:)<XHMTMAX) .AND. (ZZT(:)>XHMTMIN)                          &
-                           .AND. (ZRST(:)>XRTMIN(5)) .AND. (ZRCT(:)>XRTMIN(2))
-IGRIM = COUNT( GRIM(:) )
-IF( IGRIM>0 ) THEN
-   ALLOCATE(ZVEC1(IGRIM))
-   ALLOCATE(ZVEC2(IGRIM))
-   ALLOCATE(IVEC2(IGRIM))
-!
-   ZVEC1(:) = PACK( ZLBDAC(:),MASK=GRIM(:) )
-   ZVEC2(1:IGRIM) = MAX( 1.00001, MIN( FLOAT(NGAMINC)-0.00001,           &
-                         XHMLINTP1 * LOG( ZVEC1(1:IGRIM) ) + XHMLINTP2 ) )
-   IVEC2(1:IGRIM) = INT( ZVEC2(1:IGRIM) )
-   ZVEC2(1:IGRIM) = ZVEC2(1:IGRIM) - FLOAT( IVEC2(1:IGRIM) )
-   ZVEC1(1:IGRIM) =   XGAMINC_HMC( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM)      &
-                    - XGAMINC_HMC( IVEC2(1:IGRIM)   )*(ZVEC2(1:IGRIM) - 1.0)
-   ZZX(:) = UNPACK( VECTOR=ZVEC1(:),MASK=GRIM,FIELD=0.0 ) ! Large droplets
-!
-   WHERE ( GRIM(:) .AND. ZZX(:)<0.99 )
-      ZZW1(:,5) = (ZZW1(:,1)+ZZW1(:,2))*(ZCCT(:)/ZRCT(:))*(1.0-ZZX(:))* & 
-                                                             XHM_FACTS* &
-           MAX( 0.0, MIN( (ZZT(:)-XHMTMIN)/3.0,(XHMTMAX-ZZT(:))/2.0 ) ) ! CCHMSI
-      ZCIS(:) = ZCIS(:) + ZZW1(:,5)
-!
-      ZZW1(:,6) = ZZW1(:,5) * XMNU0                                     ! RCHMSI
-      ZRIS(:) = ZRIS(:) + ZZW1(:,6)
-      ZRSS(:) = ZRSS(:) - ZZW1(:,6)
-   END WHERE
-   DEALLOCATE(IVEC2)
-   DEALLOCATE(ZVEC2)
-   DEALLOCATE(ZVEC1)
-END IF
-!
-! Budget storage
-IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-  IF (LBUDGET_RI) CALL BUDGET_DDH (                                            &
-                     UNPACK(ZRIS(:),MASK=GMICRO,FIELD=PRIS)*PRHODJ(:,:,:), &
-                                                               9,'HMS_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RS) CALL BUDGET_DDH (                                            &
-                     UNPACK(ZRSS(:),MASK=GMICRO,FIELD=PRSS)*PRHODJ(:,:,:), &
-                                                              10,'HMS_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_SV) CALL BUDGET_DDH (                                            &
-                     UNPACK(ZCIS(:),MASK=GMICRO,FIELD=PCIS)*PRHODJ(:,:,:), &
-                                                  12+NSV_LIMA_NI,'HMS_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-END IF
-!
-!
-!*       1.3  Rain accretion onto the aggregates  
-!        ---------------------------------------
-!
-!
-ZZW1(:,2:3) = 0.0
-GACC(:) = (ZRRT(:)>XRTMIN(3)) .AND. (ZRST(:)>XRTMIN(5)) .AND. (ZRRS(:)>XRTMIN(3)/PTSTEP) .AND. (ZZT(:)<XTT)
-IGACC = COUNT( GACC(:) )
-!
-IF( IGACC>0 ) THEN
-!
-!        1.3.0  allocations
-!
-   ALLOCATE(ZVEC1(IGACC))
-   ALLOCATE(ZVEC2(IGACC))
-   ALLOCATE(ZVEC3(IGACC))
-   ALLOCATE(IVEC1(IGACC))
-   ALLOCATE(IVEC2(IGACC))
-!
-!        1.3.1  select the (ZLBDAS,ZLBDAR) couplet
-!
-   ZVEC1(:) = PACK( ZLBDAS(:),MASK=GACC(:) )
-   ZVEC2(:) = PACK( ZLBDAR(:),MASK=GACC(:) )
-!
-!        1.3.2  find the next lower indice for the ZLBDAS and for the ZLBDAR
-!               in the geometrical set of (Lbda_s,Lbda_r) couplet use to
-!               tabulate the RACCSS-kernel
-!
-   ZVEC1(1:IGACC) = MAX( 1.00001, MIN( FLOAT(NACCLBDAS)-0.00001,           &
-                         XACCINTP1S * LOG( ZVEC1(1:IGACC) ) + XACCINTP2S ) )
-   IVEC1(1:IGACC) = INT( ZVEC1(1:IGACC) )
-   ZVEC1(1:IGACC) = ZVEC1(1:IGACC) - FLOAT( IVEC1(1:IGACC) )
-!
-   ZVEC2(1:IGACC) = MAX( 1.00001, MIN( FLOAT(NACCLBDAR)-0.00001,           &
-                         XACCINTP1R * LOG( ZVEC2(1:IGACC) ) + XACCINTP2R ) )
-   IVEC2(1:IGACC) = INT( ZVEC2(1:IGACC) )
-   ZVEC2(1:IGACC) = ZVEC2(1:IGACC) - FLOAT( IVEC2(1:IGACC) )
-!
-!        1.3.3  perform the bilinear interpolation of the normalized
-!               RACCSS-kernel
-!
-   DO JJ = 1,IGACC
-      ZVEC3(JJ) =  (  XKER_RACCSS(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                    - XKER_RACCSS(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
-                				 	           * ZVEC1(JJ) &
-                 - (  XKER_RACCSS(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                    - XKER_RACCSS(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
-  	                    			             * (ZVEC1(JJ) - 1.0)
-   END DO
-   ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GACC,FIELD=0.0 )
-!
-!        1.3.4  raindrop accretion on the small sized aggregates
-!
-   WHERE ( GACC(:) )
-      ZZW1(:,2) =                                            & !! coef of RRACCS
-              XFRACCSS*( ZLBDAS(:)**XCXS )*( ZRHODREF(:)**(-XCEXVT-1.) ) &
-         *( XLBRACCS1/((ZLBDAS(:)**2)               ) +                  &
-            XLBRACCS2/( ZLBDAS(:)    * ZLBDAR(:)    ) +                  &
-            XLBRACCS3/(               (ZLBDAR(:)**2)) )/ZLBDAR(:)**3
-      ZZW1(:,4) = MIN( ZRRS(:),ZZW1(:,2)*ZZW(:) )           ! RRACCSS
-      ZRRS(:) = ZRRS(:) - ZZW1(:,4)
-      ZRSS(:) = ZRSS(:) + ZZW1(:,4)
-      ZTHS(:) = ZTHS(:) + ZZW1(:,4)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RRACCSS))
-!
-      ZCRS(:) = MAX( ZCRS(:)-ZZW1(:,4)*(ZCRT(:)/ZRRT(:)),0.0 ) ! Lambda_r**3 
-   END WHERE
-!
-!        1.3.4b perform the bilinear interpolation of the normalized
-!               RACCS-kernel
-!
-   DO JJ = 1,IGACC
-      ZVEC3(JJ) =  (   XKER_RACCS(IVEC2(JJ)+1,IVEC1(JJ)+1)* ZVEC1(JJ)          &
-                    -  XKER_RACCS(IVEC2(JJ)+1,IVEC1(JJ)  )*(ZVEC1(JJ) - 1.0) ) &
-                                                                         * ZVEC2(JJ) &
-                 - (   XKER_RACCS(IVEC2(JJ)  ,IVEC1(JJ)+1)* ZVEC1(JJ)          &
-                    -  XKER_RACCS(IVEC2(JJ)  ,IVEC1(JJ)  )*(ZVEC1(JJ) - 1.0) ) &
-                                                           * (ZVEC2(JJ) - 1.0)
-   END DO
-   ZZW1(:,2) = ZZW1(:,2)*UNPACK( VECTOR=ZVEC3(:),MASK=GACC(:),FIELD=0.0 ) !! RRACCS
-!
-!        1.3.5  perform the bilinear interpolation of the normalized
-!               SACCRG-kernel
-!
-   DO JJ = 1,IGACC
-      ZVEC3(JJ) =  (  XKER_SACCRG(IVEC2(JJ)+1,IVEC1(JJ)+1)* ZVEC1(JJ)          &
-                    - XKER_SACCRG(IVEC2(JJ)+1,IVEC1(JJ)  )*(ZVEC1(JJ) - 1.0) ) &
-      			 	                                   * ZVEC2(JJ) &
-                 - (  XKER_SACCRG(IVEC2(JJ)  ,IVEC1(JJ)+1)* ZVEC1(JJ)          &
-                    - XKER_SACCRG(IVEC2(JJ)  ,IVEC1(JJ)  )*(ZVEC1(JJ) - 1.0) ) &
-			                                     * (ZVEC2(JJ) - 1.0)
-   END DO
-   ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GACC,FIELD=0.0 )
-!
-!        1.3.6  raindrop accretion-conversion of the large sized aggregates
-!               into graupeln
-!
-   WHERE ( GACC(:) .AND. (ZRSS(:)>XRTMIN(5)/PTSTEP) )
-      ZZW1(:,2) = MIN( ZRRS(:),ZZW1(:,2)-ZZW1(:,4) )                  ! RRACCSG
-      ZZW1(:,3) = MIN( ZRSS(:),XFSACCRG*ZZW(:)*                     & ! RSACCRG
-            ( ZLBDAS(:)**(XCXS-XBS) )*( ZRHODREF(:)**(-XCEXVT-1.) ) &
-           *( XLBSACCR1/((ZLBDAR(:)**2)               ) +           &
-              XLBSACCR2/( ZLBDAR(:)    * ZLBDAS(:)    ) +           &
-              XLBSACCR3/(               (ZLBDAS(:)**2)) ) )
-      ZRRS(:) = ZRRS(:) - ZZW1(:,2)
-      ZRSS(:) = ZRSS(:) - ZZW1(:,3)
-      ZRGS(:) = ZRGS(:) + ZZW1(:,2)+ZZW1(:,3)
-      ZTHS(:) = ZTHS(:) + ZZW1(:,2)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RRACCSG))
-!
-      ZCRS(:) = MAX( ZCRS(:)-ZZW1(:,2)*(ZCRT(:)/ZRRT(:)),0.0 ) ! Lambda_r**3 
-   END WHERE
-   DEALLOCATE(IVEC2)
-   DEALLOCATE(IVEC1)
-   DEALLOCATE(ZVEC3)
-   DEALLOCATE(ZVEC2)
-   DEALLOCATE(ZVEC1)
-END IF
-!
-IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-  IF (LBUDGET_TH) CALL BUDGET_DDH (                                              &
-                 UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                               4,'ACC_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RR) CALL BUDGET_DDH (                                               &
-                 UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), &
-                                                               8,'ACC_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RS) CALL BUDGET_DDH (                                               &
-                 UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), &
-                                                              10,'ACC_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RG) CALL BUDGET_DDH (                                               &
-                 UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), &
-                                                              11,'ACC_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_SV) THEN
-    CALL BUDGET_DDH (UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), &
-                                                  12+NSV_LIMA_NR,'ACC_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-  END IF
-END IF
-!
-!
-!*       1.4  Conversion-Melting of the aggregates
-!        -----------------------------------------
-!
-!
-ZZW(:) = 0.0
-WHERE( (ZRST(:)>XRTMIN(5)) .AND. (ZRSS(:)>XRTMIN(5)/PTSTEP) .AND. (ZZT(:)>XTT) )
-   ZZW(:) = ZRVT(:)*ZPRES(:)/((XMV/XMD)+ZRVT(:)) ! Vapor pressure
-   ZZW(:) =  ZKA(:)*(XTT-ZZT(:)) +                                 &
-              ( ZDV(:)*(XLVTT + ( XCPV - XCL ) * ( ZZT(:) - XTT )) &
-                          *(XESTT-ZZW(:))/(XRV*ZZT(:))             )
-!
-! compute RSMLT
-!
-   ZZW(:)  = MIN( ZRSS(:), XFSCVMG*MAX( 0.0,( -ZZW(:) *             &
-                          ( X0DEPS*       ZLBDAS(:)**XEX0DEPS +     &
-                            X1DEPS*ZCJ(:)*ZLBDAS(:)**XEX1DEPS ) -   &
-                                    ( ZZW1(:,1)+ZZW1(:,4) ) *       &
-                             ( ZRHODREF(:)*XCL*(XTT-ZZT(:))) ) /    &
-                                            ( ZRHODREF(:)*XLMTT ) ) )
-!
-! note that RSCVMG = RSMLT*XFSCVMG but no heat is exchanged (at the rate RSMLT)
-! because the graupeln produced by this process are still icy!!!
-!
-   ZRSS(:) = ZRSS(:) - ZZW(:)
-   ZRGS(:) = ZRGS(:) + ZZW(:)
-END WHERE
-!
-! Budget storage
-IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-  IF (LBUDGET_RS) CALL BUDGET_DDH (                                                     &
-                       UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), &
-                                                               10,'CMEL_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RG) CALL BUDGET_DDH (                                                     &
-                       UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), &
-                                                               11,'CMEL_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-END IF
-!
-END IF ! LSNOW_LIMA
-!
-!------------------------------------------------------------------------------
-!
-!                         #################
-!                         FAST RG PROCESSES
-!                         #################
-!
-!
-!*       2.1  Rain contact freezing  
-!        --------------------------
-!
-!
-ZZW1(:,3:4) = 0.0
-WHERE( (ZRIT(:)>XRTMIN(4)) .AND. (ZRRT(:)>XRTMIN(3)) .AND. (ZRIS(:)>XRTMIN(4)/PTSTEP) .AND. (ZRRS(:)>XRTMIN(3)/PTSTEP) )
-   ZZW1(:,3) = MIN( ZRIS(:),XICFRR * ZRIT(:) * ZCRT(:)          & ! RICFRRG
-                                   * ZLBDAR(:)**XEXICFRR        &
-                                   * ZRHODREF(:)**(-XCEXVT-1.0) )
-!
-   ZZW1(:,4) = MIN( ZRRS(:),XRCFRI * ZCIT(:) * ZCRT(:)          & ! RRCFRIG
-                                   * ZLBDAR(:)**XEXRCFRI        &
-                                   * ZRHODREF(:)**(-XCEXVT-2.0) )
-   ZRIS(:) = ZRIS(:) - ZZW1(:,3)
-   ZRRS(:) = ZRRS(:) - ZZW1(:,4)
-   ZRGS(:) = ZRGS(:) + ZZW1(:,3)+ZZW1(:,4)
-   ZTHS(:) = ZTHS(:) + ZZW1(:,4)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*RRCFRIG)
-!
-   ZCIS(:) = MAX( ZCIS(:)-ZZW1(:,3)*(ZCIT(:)/ZRIT(:)),0.0 )     ! CICFRRG
-   ZCRS(:) = MAX( ZCRS(:)-ZZW1(:,4)*(ZCRT(:)/ZRRT(:)),0.0 )     ! CRCFRIG
-END WHERE
-!
-IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-  IF (LBUDGET_TH) CALL BUDGET_DDH (                                                 &
-                   UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), &
-                                                                4,'CFRZ_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RR) CALL BUDGET_DDH (                                                 &
-                   UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), &
-                                                                8,'CFRZ_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RI) CALL BUDGET_DDH (                                                 &
-                   UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), &
-                                                                9,'CFRZ_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RG) CALL BUDGET_DDH (                                                 &
-                   UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), &
-                                                               11,'CFRZ_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_SV) THEN
-    CALL BUDGET_DDH (  UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), &
-                                                   12+NSV_LIMA_NR,'CFRZ_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-    CALL BUDGET_DDH (  UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), &
-                                                   12+NSV_LIMA_NI,'CFRZ_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-  END IF
-END IF
-!
-!
-!*       2.2  Compute the Dry growth case
-!        --------------------------------
-!
-!
-ZZW1(:,:) = 0.0
-WHERE( ((ZRCT(:)>XRTMIN(2)) .AND. (ZRGT(:)>XRTMIN(6)) .AND. (ZRCS(:)>XRTMIN(2)/PTSTEP)) .OR. &
-       ((ZRIT(:)>XRTMIN(4)) .AND. (ZRGT(:)>XRTMIN(6)) .AND. (ZRIS(:)>XRTMIN(4)/PTSTEP))      )
-   ZZW(:) = ZLBDAG(:)**(XCXG-XDG-2.0) * ZRHODREF(:)**(-XCEXVT)
-   ZZW1(:,1) = MIN( ZRCS(:),XFCDRYG * ZRCT(:) * ZZW(:) )             ! RCDRYG
-   ZZW1(:,2) = MIN( ZRIS(:),XFIDRYG * EXP( XCOLEXIG*(ZZT(:)-XTT) ) &
-                                    * ZRIT(:) * ZZW(:) )             ! RIDRYG
-END WHERE
-!
-!*       2.2.1  accretion of aggregates on the graupeln
-!        ----------------------------------------------
-!
-GDRY(:) = (ZRST(:)>XRTMIN(5)) .AND. (ZRGT(:)>XRTMIN(6)) .AND. (ZRSS(:)>XRTMIN(5)/PTSTEP)
-IGDRY = COUNT( GDRY(:) )
-!
-IF( IGDRY>0 ) THEN
-!
-!*       2.2.2  allocations
-!
-   ALLOCATE(ZVEC1(IGDRY))
-   ALLOCATE(ZVEC2(IGDRY))
-   ALLOCATE(ZVEC3(IGDRY))
-   ALLOCATE(IVEC1(IGDRY))
-   ALLOCATE(IVEC2(IGDRY))
-!
-!*       2.2.3  select the (ZLBDAG,ZLBDAS) couplet
-!
-   ZVEC1(:) = PACK( ZLBDAG(:),MASK=GDRY(:) )
-   ZVEC2(:) = PACK( ZLBDAS(:),MASK=GDRY(:) )
-!
-!*       2.2.4  find the next lower indice for the ZLBDAG and for the ZLBDAS
-!               in the geometrical set of (Lbda_g,Lbda_s) couplet use to
-!               tabulate the SDRYG-kernel
-!
-   ZVEC1(1:IGDRY) = MAX( 1.00001, MIN( FLOAT(NDRYLBDAG)-0.00001,           &
-                         XDRYINTP1G * LOG( ZVEC1(1:IGDRY) ) + XDRYINTP2G ) )
-   IVEC1(1:IGDRY) = INT( ZVEC1(1:IGDRY) )
-   ZVEC1(1:IGDRY) = ZVEC1(1:IGDRY) - FLOAT( IVEC1(1:IGDRY) )
-!
-   ZVEC2(1:IGDRY) = MAX( 1.00001, MIN( FLOAT(NDRYLBDAS)-0.00001,           &
-                         XDRYINTP1S * LOG( ZVEC2(1:IGDRY) ) + XDRYINTP2S ) )
-   IVEC2(1:IGDRY) = INT( ZVEC2(1:IGDRY) )
-   ZVEC2(1:IGDRY) = ZVEC2(1:IGDRY) - FLOAT( IVEC2(1:IGDRY) )
-!
-!*       2.2.5  perform the bilinear interpolation of the normalized
-!               SDRYG-kernel
-!
-   DO JJ = 1,IGDRY
-      ZVEC3(JJ) =  (  XKER_SDRYG(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                    - XKER_SDRYG(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
-      			 	                                  * ZVEC1(JJ) &
-                 - (  XKER_SDRYG(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                    - XKER_SDRYG(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
-       			                                    * (ZVEC1(JJ) - 1.0)
-   END DO
-   ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GDRY,FIELD=0.0 )
-!
-   WHERE( GDRY(:) )
-      ZZW1(:,3) = MIN( ZRSS(:),XFSDRYG*ZZW(:)                         & ! RSDRYG
-                                      * EXP( XCOLEXSG*(ZZT(:)-XTT) )  &
-                    *( ZLBDAS(:)**(XCXS-XBS) )*( ZLBDAG(:)**XCXG )    &
-                    *( ZRHODREF(:)**(-XCEXVT-1.) )                    &
-                         *( XLBSDRYG1/( ZLBDAG(:)**2              ) + &
-                            XLBSDRYG2/( ZLBDAG(:)   * ZLBDAS(:)   ) + &
-                            XLBSDRYG3/(               ZLBDAS(:)**2) ) )
-   END WHERE
-   DEALLOCATE(IVEC2)
-   DEALLOCATE(IVEC1)
-   DEALLOCATE(ZVEC3)
-   DEALLOCATE(ZVEC2)
-   DEALLOCATE(ZVEC1)
-END IF
-!
-!*       2.2.6  accretion of raindrops on the graupeln
-!        ---------------------------------------------
-!
-GDRY(:) = (ZRRT(:)>XRTMIN(3)) .AND. (ZRGT(:)>XRTMIN(6)) .AND. (ZRRS(:)>XRTMIN(3))
-IGDRY = COUNT( GDRY(:) )
-!
-IF( IGDRY>0 ) THEN
-!
-!*       2.2.7  allocations
-!
-   ALLOCATE(ZVEC1(IGDRY))
-   ALLOCATE(ZVEC2(IGDRY))
-   ALLOCATE(ZVEC3(IGDRY))
-   ALLOCATE(IVEC1(IGDRY))
-   ALLOCATE(IVEC2(IGDRY))
-!
-!*       2.2.8  select the (ZLBDAG,ZLBDAR) couplet
-!
-   ZVEC1(:) = PACK( ZLBDAG(:),MASK=GDRY(:) )
-   ZVEC2(:) = PACK( ZLBDAR(:),MASK=GDRY(:) )
-!
-!*       2.2.9  find the next lower indice for the ZLBDAG and for the ZLBDAR
-!               in the geometrical set of (Lbda_g,Lbda_r) couplet use to
-!               tabulate the RDRYG-kernel
-!
-   ZVEC1(1:IGDRY) = MAX( 1.00001, MIN( FLOAT(NDRYLBDAG)-0.00001,           &
-                         XDRYINTP1G * LOG( ZVEC1(1:IGDRY) ) + XDRYINTP2G ) )
-   IVEC1(1:IGDRY) = INT( ZVEC1(1:IGDRY) )
-   ZVEC1(1:IGDRY) = ZVEC1(1:IGDRY) - FLOAT( IVEC1(1:IGDRY) )
-!
-   ZVEC2(1:IGDRY) = MAX( 1.00001, MIN( FLOAT(NDRYLBDAR)-0.00001,           &
-                         XDRYINTP1R * LOG( ZVEC2(1:IGDRY) ) + XDRYINTP2R ) )
-   IVEC2(1:IGDRY) = INT( ZVEC2(1:IGDRY) )
-   ZVEC2(1:IGDRY) = ZVEC2(1:IGDRY) - FLOAT( IVEC2(1:IGDRY) )
-!
-!*       2.2.10 perform the bilinear interpolation of the normalized
-!               RDRYG-kernel
-!
-   DO JJ = 1,IGDRY
-      ZVEC3(JJ) =  (  XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                    - XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
-                     			 	                  * ZVEC1(JJ) &
-                 - (  XKER_RDRYG(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                    - XKER_RDRYG(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
-                                 			     * (ZVEC1(JJ) - 1.0)
-   END DO
-   ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GDRY,FIELD=0.0 )
-!
-   WHERE( GDRY(:) )
-      ZZW1(:,4) = MIN( ZRRS(:),XFRDRYG*ZZW(:)                    & ! RRDRYG
-                        *( ZLBDAR(:)**(-3) )*( ZLBDAG(:)**XCXG ) &
-                                *( ZRHODREF(:)**(-XCEXVT-1.) )   &
-                    *( XLBRDRYG1/( ZLBDAG(:)**2              ) + &
-                       XLBRDRYG2/( ZLBDAG(:)   * ZLBDAR(:)   ) + &
-                       XLBRDRYG3/(               ZLBDAR(:)**2) ) )
-   END WHERE
-   DEALLOCATE(IVEC2)
-   DEALLOCATE(IVEC1)
-   DEALLOCATE(ZVEC3)
-   DEALLOCATE(ZVEC2)
-   DEALLOCATE(ZVEC1)
-END IF
-!
-ZRDRYG(:) = ZZW1(:,1) + ZZW1(:,2) + ZZW1(:,3) + ZZW1(:,4)
-!
-!
-!*       2.3  Compute the Wet growth case
-!        --------------------------------
-!
-!
-ZZW(:) = 0.0
-ZRWETG(:) = 0.0
-WHERE( ZRGT(:)>XRTMIN(6) )
-   ZZW1(:,5) = MIN( ZRIS(:),                                    &
-               ZZW1(:,2) / (XCOLIG*EXP(XCOLEXIG*(ZZT(:)-XTT)) ) ) ! RIWETG
-   ZZW1(:,6) = MIN( ZRSS(:),                                    &
-               ZZW1(:,3) / (XCOLSG*EXP(XCOLEXSG*(ZZT(:)-XTT)) ) ) ! RSWETG
-!
-   ZZW(:) = ZRVT(:)*ZPRES(:)/((XMV/XMD)+ZRVT(:)) ! Vapor pressure
-   ZZW(:) =  ZKA(:)*(XTT-ZZT(:)) +                                  &
-             ( ZDV(:)*(XLVTT + ( XCPV - XCL ) * ( ZZT(:) - XTT ))   &
-                           *(XESTT-ZZW(:))/(XRV*ZZT(:))             )
-!
-! compute RWETG
-!
-   ZRWETG(:)  = MAX( 0.0,                                               &
-                   ( ZZW(:) * ( X0DEPG*       ZLBDAG(:)**XEX0DEPG +     &
-                                X1DEPG*ZCJ(:)*ZLBDAG(:)**XEX1DEPG ) +   &
-                   ( ZZW1(:,5)+ZZW1(:,6) ) *                            &
-                   ( ZRHODREF(:)*(XLMTT+(XCI-XCL)*(XTT-ZZT(:)))   ) ) / &
-                                   ( ZRHODREF(:)*(XLMTT-XCL*(XTT-ZZT(:))) )   )
-END WHERE
-!
-!
-!*       2.4  Select Wet or Dry case
-!        ---------------------------
-!
-!
-! Wet case and partial conversion to hail
-!
-ZZW(:) = 0.0
-NHAIL = 0.
-IF (LHAIL_LIMA) NHAIL = 1. 
-WHERE( ZRGT(:)>XRTMIN(6) .AND. ZZT(:)<XTT                               &
-                         .AND. ZRDRYG(:)>=ZRWETG(:) .AND. ZRWETG(:)>0.0 ) 
-!   
-   ZZW(:) = ZRWETG(:) - ZZW1(:,5) - ZZW1(:,6) ! RCWETG+RRWETG
-!   
-! limitation of the available rainwater mixing ratio (RRWETH < RRS !)
-!   
-   ZZW1(:,7) = MAX( 0.0,MIN( ZZW(:),ZRRS(:)+ZZW1(:,1) ) )
-   ZZX(:)    = ZZW1(:,7) / ZZW(:)
-   ZZW1(:,5) = ZZW1(:,5)*ZZX(:)
-   ZZW1(:,6) = ZZW1(:,6)*ZZX(:)
-   ZRWETG(:) = ZZW1(:,7) + ZZW1(:,5) + ZZW1(:,6)
-!   
-   ZRCS(:) = ZRCS(:) - ZZW1(:,1)
-   ZRIS(:) = ZRIS(:) - ZZW1(:,5)
-   ZRSS(:) = ZRSS(:) - ZZW1(:,6)
-!
-! assume a linear percent of conversion of graupel into hail
-!
-   ZRGS(:) = ZRGS(:) + ZRWETG(:)
-   ZZW(:)  = ZRGS(:)*ZRDRYG(:)*NHAIL/(ZRWETG(:)+ZRDRYG(:)) 
-   ZRGS(:) = ZRGS(:) - ZZW(:)                        
-   ZRHS(:) = ZRHS(:) + ZZW(:)
-   ZRRS(:) = MAX( 0.0,ZRRS(:) - ZZW1(:,7) + ZZW1(:,1) )
-   ZTHS(:) = ZTHS(:) + ZZW1(:,7)*(ZLSFACT(:)-ZLVFACT(:))
-                                                 ! f(L_f*(RCWETG+RRWETG))
-!
-   ZCCS(:) = MAX( ZCCS(:)-ZZW1(:,1)*(ZCCT(:)/MAX(ZRCT(:),XRTMIN(2))),0.0 )
-   ZCIS(:) = MAX( ZCIS(:)-ZZW1(:,5)*(ZCIT(:)/MAX(ZRIT(:),XRTMIN(4))),0.0 )
-   ZCRS(:) = MAX( ZCRS(:)-MAX( ZZW1(:,7)-ZZW1(:,1),0.0 )                 &
-				   *(ZCRT(:)/MAX(ZRRT(:),XRTMIN(3))),0.0 )
-END WHERE
-!
-! Budget storage
-   IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-     IF (LBUDGET_TH) CALL BUDGET_DDH (                                              &
-                    UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                                4,'WETG_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_RC) CALL BUDGET_DDH (                                               &
-                    UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), &
-                                                                7,'WETG_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_RR) CALL BUDGET_DDH (                                               &
-                    UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), &
-                                                                8,'WETG_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_RI) CALL BUDGET_DDH (                                               &
-                    UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), &
-                                                                9,'WETG_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_RS) CALL BUDGET_DDH (                                               &
-                    UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), &
-                                                               10,'WETG_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_RG) CALL BUDGET_DDH (                                               &
-                    UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), &
-                                                               11,'WETG_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_RH) CALL BUDGET_DDH (                                               &
-                    UNPACK(ZRHS(:),MASK=GMICRO(:,:,:),FIELD=PRHS)*PRHODJ(:,:,:), &
-                                                               12,'WETG_BU_RRH',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_SV) THEN
-       CALL BUDGET_DDH (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), &
-                                                               12+NSV_LIMA_NC,'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-       CALL BUDGET_DDH (UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), &
-                                                               12+NSV_LIMA_NR,'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-       CALL BUDGET_DDH (UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), &
-                                                               12+NSV_LIMA_NI,'WETG_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-     END IF
-   END IF
-!
-! Dry case
-!
-WHERE( ZRGT(:)>XRTMIN(6) .AND. ZZT(:)<XTT                              &
-                         .AND. ZRDRYG(:)<ZRWETG(:) .AND. ZRDRYG(:)>0.0 ) ! case
-   ZRCS(:) = ZRCS(:) - ZZW1(:,1)
-   ZRIS(:) = ZRIS(:) - ZZW1(:,2)
-   ZRSS(:) = ZRSS(:) - ZZW1(:,3)
-   ZRRS(:) = ZRRS(:) - ZZW1(:,4)
-   ZRGS(:) = ZRGS(:) + ZRDRYG(:)
-   ZTHS(:) = ZTHS(:) + (ZZW1(:,1)+ZZW1(:,4))*(ZLSFACT(:)-ZLVFACT(:)) !
-  						        ! f(L_f*(RCDRYG+RRDRYG))
-!
-   ZCCS(:) = MAX( ZCCS(:)-ZZW1(:,1)*(ZCCT(:)/MAX(ZRCT(:),XRTMIN(2))),0.0 )
-   ZCIS(:) = MAX( ZCIS(:)-ZZW1(:,2)*(ZCIT(:)/MAX(ZRIT(:),XRTMIN(4))),0.0 )
-   ZCRS(:) = MAX( ZCRS(:)-ZZW1(:,4)*(ZCRT(:)/MAX(ZRRT(:),XRTMIN(3))),0.0 ) 
-                                                         ! Approximate rates
-END WHERE
-!
-! Budget storage
-IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-  IF (LBUDGET_TH) CALL BUDGET_DDH (                                                 &
-                   UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                                4,'DRYG_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RC) CALL BUDGET_DDH (                                                 &
-                   UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), &
-                                                                7,'DRYG_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RR) CALL BUDGET_DDH (                                                 &
-                   UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), &
-                                                                8,'DRYG_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RI) CALL BUDGET_DDH (                                                 &
-                   UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), &
-                                                                9,'DRYG_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RS) CALL BUDGET_DDH (                                                 &
-                   UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), &
-                                                               10,'DRYG_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RG) CALL BUDGET_DDH (                                                 &
-                   UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), &
-                                                               11,'DRYG_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_SV) THEN
-    CALL BUDGET_DDH (  UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), &
-                                                               12+NSV_LIMA_NC,'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-    CALL BUDGET_DDH (  UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), &
-                                                               12+NSV_LIMA_NR,'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-    CALL BUDGET_DDH (  UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), &
-                                                               12+NSV_LIMA_NI,'DRYG_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-  END IF
-END IF
-!
-!
-!*       2.5  Hallett-Mossop ice multiplication process due to graupel riming
-!        --------------------------------------------------------------------
-!
-!
-GDRY(:) = (ZZT(:)<XHMTMAX) .AND. (ZZT(:)>XHMTMIN)    .AND. (ZRDRYG(:)<ZZW(:))&
-                           .AND. (ZRGT(:)>XRTMIN(6)) .AND. (ZRCT(:)>XRTMIN(2))
-IGDRY = COUNT( GDRY(:) )
-IF( IGDRY>0 ) THEN
-   ALLOCATE(ZVEC1(IGDRY))
-   ALLOCATE(ZVEC2(IGDRY))
-   ALLOCATE(IVEC2(IGDRY))
-!
-   ZVEC1(:) = PACK( ZLBDAC(:),MASK=GDRY(:) )
-   ZVEC2(1:IGDRY) = MAX( 1.00001, MIN( FLOAT(NGAMINC)-0.00001,           &
-                         XHMLINTP1 * LOG( ZVEC1(1:IGDRY) ) + XHMLINTP2 ) )
-   IVEC2(1:IGDRY) = INT( ZVEC2(1:IGDRY) )
-   ZVEC2(1:IGDRY) = ZVEC2(1:IGDRY) - FLOAT( IVEC2(1:IGDRY) )
-   ZVEC1(1:IGDRY) =   XGAMINC_HMC( IVEC2(1:IGDRY)+1 )* ZVEC2(1:IGDRY)      &
-                    - XGAMINC_HMC( IVEC2(1:IGDRY)   )*(ZVEC2(1:IGDRY) - 1.0)
-   ZZX(:) = UNPACK( VECTOR=ZVEC1(:),MASK=GDRY,FIELD=0.0 ) ! Large droplets
-!
-   WHERE ( GDRY(:) .AND. ZZX(:)<0.99 ) ! Dry case
-      ZZW1(:,5) = ZZW1(:,1)*(ZCCT(:)/ZRCT(:))*(1.0-ZZX(:))*XHM_FACTG*  &
-           MAX( 0.0, MIN( (ZZT(:)-XHMTMIN)/3.0,(XHMTMAX-ZZT(:))/2.0 ) ) ! CCHMGI
-      ZCIS(:) = ZCIS(:) + ZZW1(:,5)
-!
-      ZZW1(:,6) = ZZW1(:,5) * XMNU0                                     ! RCHMGI
-      ZRIS(:) = ZRIS(:) + ZZW1(:,6)
-      ZRGS(:) = ZRGS(:) - ZZW1(:,6)
-   END WHERE
-   DEALLOCATE(IVEC2)
-   DEALLOCATE(ZVEC2)
-   DEALLOCATE(ZVEC1)
-END IF
-!
-! Budget storage
-IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-  IF (LBUDGET_RI) CALL BUDGET_DDH (                                               &
-                     UNPACK(ZRIS(:),MASK=GMICRO,FIELD=PRIS)*PRHODJ(:,:,:), &
-                                                               9,'HMG_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RG) CALL BUDGET_DDH (                                               &
-                     UNPACK(ZRGS(:),MASK=GMICRO,FIELD=PRGS)*PRHODJ(:,:,:), &
-                                                              11,'HMG_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_SV) CALL BUDGET_DDH (                                               &
-                     UNPACK(ZCIS(:),MASK=GMICRO,FIELD=PCIS)*PRHODJ(:,:,:), &
-                                                              12+NSV_LIMA_NI,'HMG_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-END IF
-!
-!
-!*       2.6  Melting of the graupeln
-!        ----------------------------
-!
-!
-ZZW(:) = 0.0
-WHERE( (ZRGT(:)>XRTMIN(6)) .AND. (ZRGS(:)>XRTMIN(6)/PTSTEP) .AND. (ZZT(:)>XTT) )
-   ZZW(:) = ZRVT(:)*ZPRES(:)/((XMV/XMD)+ZRVT(:)) ! Vapor pressure
-   ZZW(:) =  ZKA(:)*(XTT-ZZT(:)) +                                 &
-              ( ZDV(:)*(XLVTT + ( XCPV - XCL ) * ( ZZT(:) - XTT )) &
-                          *(XESTT-ZZW(:))/(XRV*ZZT(:))             )
-!
-! compute RGMLTR
-!
-   ZZW(:)  = MIN( ZRGS(:), MAX( 0.0,( -ZZW(:) *                     &
-                          ( X0DEPG*       ZLBDAG(:)**XEX0DEPG +     &
-                            X1DEPG*ZCJ(:)*ZLBDAG(:)**XEX1DEPG ) -   &
-                                    ( ZZW1(:,1)+ZZW1(:,4) ) *       &
-                             ( ZRHODREF(:)*XCL*(XTT-ZZT(:))) ) /    &
-                                            ( ZRHODREF(:)*XLMTT ) ) )
-   ZRRS(:) = ZRRS(:) + ZZW(:)
-   ZRGS(:) = ZRGS(:) - ZZW(:)
-   ZTHS(:) = ZTHS(:) - ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(-RGMLTR))
-!
-!   ZCRS(:) = MAX( ZCRS(:) + ZZW(:)*(XCCG*ZLBDAG(:)**XCXG/ZRGT(:)),0.0 )
-   ZCRS(:) = ZCRS(:) + ZZW(:)*5.0E6  ! obtained after averaging
-                                     ! Dshed=1mm and 500 microns
-END WHERE
-!
-IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-  IF (LBUDGET_TH) CALL BUDGET_DDH (                                                 &
-                   UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                                4,'GMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RR) CALL BUDGET_DDH (                                                 &
-                   UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), &
-                                                                8,'GMLT_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RG) CALL BUDGET_DDH (                                                 &
-                   UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), &
-                                                               11,'GMLT_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_SV) THEN
-    CALL BUDGET_DDH (  UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), &
-                                                               12+NSV_LIMA_NR,'GMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-  END IF
-END IF
-!
-!
-!------------------------------------------------------------------------------
-!
-!                         #################
-!                         FAST RH PROCESSES
-!                         #################
-!
-!
-IF (LHAIL_LIMA) THEN
-!
-GHAIL(:) = ZRHT(:)>XRTMIN(7)
-IHAIL = COUNT(GHAIL(:))
-!
-IF( IHAIL>0 ) THEN
-!
-!*       3.1 Wet growth of hail 
-!        ----------------------------
-!
-   ZZW1(:,:) = 0.0
-   WHERE( GHAIL(:) .AND. ( (ZRCT(:)>XRTMIN(2) .AND. ZRCS(:)>XRTMIN(2)/PTSTEP) .OR. &
-                           (ZRIT(:)>XRTMIN(4) .AND. ZRIS(:)>XRTMIN(4)/PTSTEP) )    )    
-      ZZW(:) = ZLBDAH(:)**(XCXH-XDH-2.0) * ZRHODREF(:)**(-XCEXVT)
-      ZZW1(:,1) = MIN( ZRCS(:),XFWETH * ZRCT(:) * ZZW(:) )             ! RCWETH
-      ZZW1(:,2) = MIN( ZRIS(:),XFWETH * ZRIT(:) * ZZW(:) )             ! RIWETH
-   END WHERE
-!
-!*       3.1.1  accretion of aggregates on the hailstones
-!        ------------------------------------------------
-!
-   GWET(:) = GHAIL(:) .AND. (ZRST(:)>XRTMIN(5) .AND. ZRSS(:)>XRTMIN(5)/PTSTEP)
-   IGWET = COUNT( GWET(:) )
-!
-   IF( IGWET>0 ) THEN
-!
-!*       3.1.2  allocations
-!
-      ALLOCATE(ZVEC1(IGWET))
-      ALLOCATE(ZVEC2(IGWET))
-      ALLOCATE(ZVEC3(IGWET))
-      ALLOCATE(IVEC1(IGWET))
-      ALLOCATE(IVEC2(IGWET))
-!
-!*       3.1.3  select the (ZLBDAH,ZLBDAS) couplet
-!
-      ZVEC1(:) = PACK( ZLBDAH(:),MASK=GWET(:) )
-      ZVEC2(:) = PACK( ZLBDAS(:),MASK=GWET(:) )
-!
-!*       3.1.4  find the next lower indice for the ZLBDAG and for the ZLBDAS
-!               in the geometrical set of (Lbda_h,Lbda_s) couplet use to
-!               tabulate the SWETH-kernel
-!
-      ZVEC1(1:IGWET) = MAX( 1.00001, MIN( FLOAT(NWETLBDAH)-0.00001,           &
-                            XWETINTP1H * LOG( ZVEC1(1:IGWET) ) + XWETINTP2H ) )
-      IVEC1(1:IGWET) = INT( ZVEC1(1:IGWET) )
-      ZVEC1(1:IGWET) = ZVEC1(1:IGWET) - FLOAT( IVEC1(1:IGWET) )
-!
-      ZVEC2(1:IGWET) = MAX( 1.00001, MIN( FLOAT(NWETLBDAS)-0.00001,           &
-                            XWETINTP1S * LOG( ZVEC2(1:IGWET) ) + XWETINTP2S ) )
-      IVEC2(1:IGWET) = INT( ZVEC2(1:IGWET) )
-      ZVEC2(1:IGWET) = ZVEC2(1:IGWET) - FLOAT( IVEC2(1:IGWET) )
-!
-!*       3.1.5  perform the bilinear interpolation of the normalized
-!               SWETH-kernel
-!
-      DO JJ = 1,IGWET
-        ZVEC3(JJ) = (  XKER_SWETH(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                     - XKER_SWETH(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
-        		 	                                   * ZVEC1(JJ) &
-                   - ( XKER_SWETH(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                     - XKER_SWETH(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
-         		                                     * (ZVEC1(JJ) - 1.0)
-      END DO
-      ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GWET,FIELD=0.0 )
-!
-      WHERE( GWET(:) )
-        ZZW1(:,3) = MIN( ZRSS(:),XFSWETH*ZZW(:)                       & ! RSWETH
-                      *( ZLBDAS(:)**(XCXS-XBS) )*( ZLBDAH(:)**XCXH )  &
-       	                 *( ZRHODREF(:)**(-XCEXVT-1.) )               &
-                         *( XLBSWETH1/( ZLBDAH(:)**2              ) + &
-                            XLBSWETH2/( ZLBDAH(:)   * ZLBDAS(:)   ) + &
-                            XLBSWETH3/(               ZLBDAS(:)**2) ) )
-      END WHERE
-      DEALLOCATE(IVEC2)
-      DEALLOCATE(IVEC1)
-      DEALLOCATE(ZVEC3)
-      DEALLOCATE(ZVEC2)
-      DEALLOCATE(ZVEC1)
-   END IF
-!
-!*       3.1.6  accretion of graupeln on the hailstones
-!        ----------------------------------------------
-!
-    GWET(:) = GHAIL(:) .AND. (ZRGT(:)>XRTMIN(6) .AND. ZRGS(:)>XRTMIN(6)/PTSTEP)
-    IGWET = COUNT( GWET(:) )
-!
-    IF( IGWET>0 ) THEN
-!
-!*       3.1.7  allocations
-!
-      ALLOCATE(ZVEC1(IGWET))
-      ALLOCATE(ZVEC2(IGWET))
-      ALLOCATE(ZVEC3(IGWET))
-      ALLOCATE(IVEC1(IGWET))
-      ALLOCATE(IVEC2(IGWET))
-!
-!*       3.1.8  select the (ZLBDAH,ZLBDAG) couplet
-!
-      ZVEC1(:) = PACK( ZLBDAH(:),MASK=GWET(:) )
-      ZVEC2(:) = PACK( ZLBDAG(:),MASK=GWET(:) )
-!
-!*       3.1.9  find the next lower indice for the ZLBDAH and for the ZLBDAG
-!               in the geometrical set of (Lbda_h,Lbda_g) couplet use to
-!               tabulate the GWETH-kernel
-!
-      ZVEC1(1:IGWET) = MAX( 1.00001, MIN( FLOAT(NWETLBDAG)-0.00001,           &
-                            XWETINTP1H * LOG( ZVEC1(1:IGWET) ) + XWETINTP2H ) )
-      IVEC1(1:IGWET) = INT( ZVEC1(1:IGWET) )
-      ZVEC1(1:IGWET) = ZVEC1(1:IGWET) - FLOAT( IVEC1(1:IGWET) )
-!
-      ZVEC2(1:IGWET) = MAX( 1.00001, MIN( FLOAT(NWETLBDAG)-0.00001,           &
-                            XWETINTP1G * LOG( ZVEC2(1:IGWET) ) + XWETINTP2G ) )
-      IVEC2(1:IGWET) = INT( ZVEC2(1:IGWET) )
-      ZVEC2(1:IGWET) = ZVEC2(1:IGWET) - FLOAT( IVEC2(1:IGWET) )
-!
-!*       3.1.10 perform the bilinear interpolation of the normalized
-!               GWETH-kernel
-!
-      DO JJ = 1,IGWET
-        ZVEC3(JJ) = (  XKER_GWETH(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                     - XKER_GWETH(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
-                       			 	                   * ZVEC1(JJ) &
-                  - (  XKER_GWETH(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                     - XKER_GWETH(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
-                                   			     * (ZVEC1(JJ) - 1.0)
-      END DO
-      ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GWET,FIELD=0.0 )
-!
-      WHERE( GWET(:) )
-        ZZW1(:,5) = MAX(MIN( ZRGS(:),XFGWETH*ZZW(:)                       & ! RGWETH
-                      *( ZLBDAG(:)**(XCXG-XBG) )*( ZLBDAH(:)**XCXH )  &
-                         *( ZRHODREF(:)**(-XCEXVT-1.) )               &
-                         *( XLBGWETH1/( ZLBDAH(:)**2              ) + &
-                            XLBGWETH2/( ZLBDAH(:)   * ZLBDAG(:)   ) + &
-                            XLBGWETH3/(               ZLBDAG(:)**2) ) ),0. )
-      END WHERE
-      DEALLOCATE(IVEC2)
-      DEALLOCATE(IVEC1)
-      DEALLOCATE(ZVEC3)
-      DEALLOCATE(ZVEC2)
-      DEALLOCATE(ZVEC1)
-   END IF
-!
-!*       3.2    compute the Wet growth of hail
-!        -------------------------------------
-!
-    ZZW(:) = 0.0
-    WHERE( GHAIL(:) .AND. ZZT(:)<XTT )
-       ZZW(:) = ZRVT(:)*ZPRES(:)/((XMV/XMD)+ZRVT(:)) ! Vapor pressure
-       ZZW(:) = ZKA(:)*(XTT-ZZT(:)) +                                 &
-                 ( ZDV(:)*(XLVTT + ( XCPV - XCL ) * ( ZZT(:) - XTT )) &
-                             *(XESTT-ZZW(:))/(XRV*ZZT(:))             )
-!
-! compute RWETH
-!
-       ZZW(:)  =  MAX(0.,  ( ZZW(:) * ( X0DEPH*       ZLBDAH(:)**XEX0DEPH +     &
-                                 X1DEPH*ZCJ(:)*ZLBDAH(:)**XEX1DEPH ) +   &
-                    ( ZZW1(:,2)+ZZW1(:,3)+ZZW1(:,5) ) *                  &
-                    ( ZRHODREF(:)*(XLMTT+(XCI-XCL)*(XTT-ZZT(:)))   ) ) / &
-                          ( ZRHODREF(:)*(XLMTT-XCL*(XTT-ZZT(:))) ) )
-!
-       ZZW1(:,6) = MAX( ZZW(:) - ZZW1(:,2) - ZZW1(:,3) - ZZW1(:,5),0.) ! RCWETH+RRWETH
-    END WHERE
-    WHERE ( GHAIL(:) .AND. ZZT(:)<XTT  .AND. ZZW1(:,6)/=0.)
-!
-! limitation of the available rainwater mixing ratio (RRWETH < RRS !)
-!
-       ZZW1(:,4) = MAX( 0.0,MIN( ZZW1(:,6),ZRRS(:)+ZZW1(:,1) ) )
-       ZZX(:)    = ZZW1(:,4) / ZZW1(:,6)
-       ZZW1(:,2) = ZZW1(:,2)*ZZX(:)
-       ZZW1(:,3) = ZZW1(:,3)*ZZX(:)
-       ZZW1(:,5) = ZZW1(:,5)*ZZX(:)
-       ZZW(:)    = ZZW1(:,4) + ZZW1(:,2) + ZZW1(:,3) + ZZW1(:,5)
-!
-!*       3.2.1  integrate the Wet growth of hail
-!
-       ZRCS(:) = ZRCS(:) - ZZW1(:,1)
-       ZRIS(:) = ZRIS(:) - ZZW1(:,2)
-       ZRSS(:) = ZRSS(:) - ZZW1(:,3)
-       ZRGS(:) = ZRGS(:) - ZZW1(:,5)
-       ZRHS(:) = ZRHS(:) + ZZW(:)
-       ZRRS(:) = MAX( 0.0,ZRRS(:) - ZZW1(:,4) + ZZW1(:,1) )
-       ZTHS(:) = ZTHS(:) + ZZW1(:,4)*(ZLSFACT(:)-ZLVFACT(:)) 
-       						        ! f(L_f*(RCWETH+RRWETH))
-!
-       ZCCS(:) = MAX( ZCCS(:)-ZZW1(:,1)*(ZCCT(:)/MAX(ZRCT(:),XRTMIN(2))),0.0 )
-       ZCIS(:) = MAX( ZCIS(:)-ZZW1(:,2)*(ZCIT(:)/MAX(ZRIT(:),XRTMIN(4))),0.0 )
-       ZCRS(:) = MAX( ZCRS(:)-MAX( ZZW1(:,4)-ZZW1(:,1),0.0 )                 &
-                                       *(ZCRT(:)/MAX(ZRRT(:),XRTMIN(3))),0.0 )
-    END WHERE
-!
-END IF ! IHAIL>0
-!
-!
-IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-   IF (LBUDGET_TH) CALL BUDGET_DDH (                                                 &
-        UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), &
-        4,'WETH_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-   IF (LBUDGET_RC) CALL BUDGET_DDH (                                                 &
-        UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), &
-        7,'WETH_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-   IF (LBUDGET_RR) CALL BUDGET_DDH (                                                 &
-        UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), &
-        8,'WETH_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-   IF (LBUDGET_RI) CALL BUDGET_DDH (                                                 &
-        UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), &
-        9,'WETH_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-   IF (LBUDGET_RS) CALL BUDGET_DDH (                                                 &
-        UNPACK(ZRSS(:),MASK=GMICRO(:,:,:),FIELD=PRSS)*PRHODJ(:,:,:), &
-        10,'WETH_BU_RRS',YDDDH, YDLDDH, YDMDDH)
-   IF (LBUDGET_RG) CALL BUDGET_DDH (                                                 &
-        UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), &
-        11,'WETH_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-   IF (LBUDGET_RH) CALL BUDGET_DDH (                                                 &
-        UNPACK(ZRHS(:),MASK=GMICRO(:,:,:),FIELD=PRHS)*PRHODJ(:,:,:), &
-        12,'WETH_BU_RRH',YDDDH, YDLDDH, YDMDDH)
-   IF (LBUDGET_SV) THEN
-      CALL BUDGET_DDH (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), &
-           12+NSV_LIMA_NC,'WETH_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      CALL BUDGET_DDH (UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), &
-           12+NSV_LIMA_NR,'WETH_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      CALL BUDGET_DDH (UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), &
-           12+NSV_LIMA_NI,'WETH_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-   END IF
-END IF
-!
-!
-! Partial reconversion of hail to graupel when rc and rh are small    
-!
-!
-!*       3.3   Conversion of the hailstones into graupel
-!        -----------------------------------------------
-!
-IF ( IHAIL>0 ) THEN
-    ZTHRH=0.01E-3
-    ZTHRC=0.001E-3
-    ZZW(:) = 0.0
-    WHERE( ZRHT(:)<ZTHRH .AND. ZRCT(:)<ZTHRC .AND. ZZT(:)<XTT )
-       ZZW(:) = MIN( 1.0,MAX( 0.0,1.0-(ZRCT(:)/ZTHRC) ) )
-!
-! assume a linear percent conversion rate of hail into graupel
-!
-       ZZW(:)  = ZRHS(:)*ZZW(:)
-       ZRGS(:) = ZRGS(:) + ZZW(:)                      !   partial conversion
-       ZRHS(:) = ZRHS(:) - ZZW(:)                      ! of hail into graupel
-!
-    END WHERE
-END IF
-!
-IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-   IF (LBUDGET_RG) CALL BUDGET_DDH (                                                 &
-        UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), &
-        11,'COHG_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-   IF (LBUDGET_RH) CALL BUDGET_DDH (                                                 &
-        UNPACK(ZRHS(:),MASK=GMICRO(:,:,:),FIELD=PRHS)*PRHODJ(:,:,:), &
-        12,'COHG_BU_RRH',YDDDH, YDLDDH, YDMDDH)
-END IF
-!
-!
-!*       3.4    Melting of the hailstones
-!
-IF ( IHAIL>0 ) THEN
-    ZZW(:) = 0.0
-    WHERE( GHAIL(:) .AND. (ZRHS(:)>XRTMIN(7)/PTSTEP) .AND. (ZRHT(:)>XRTMIN(7)) .AND. (ZZT(:)>XTT) )
-       ZZW(:) = ZRVT(:)*ZPRES(:)/((XMV/XMD)+ZRVT(:)) ! Vapor pressure
-       ZZW(:) = ZKA(:)*(XTT-ZZT(:)) +                              &
-            ( ZDV(:)*(XLVTT + ( XCPV - XCL ) * ( ZZT(:) - XTT )) &
-            *(XESTT-ZZW(:))/(XRV*ZZT(:))         )
-!
-! compute RHMLTR
-!
-       ZZW(:)  = MIN( ZRHS(:), MAX( 0.0,( -ZZW(:) *                     &
-                              ( X0DEPH*       ZLBDAH(:)**XEX0DEPH +     &
-                                X1DEPH*ZCJ(:)*ZLBDAH(:)**XEX1DEPH ) -   &
-                       ZZW1(:,6)*( ZRHODREF(:)*XCL*(XTT-ZZT(:))) ) /    &
-                                                ( ZRHODREF(:)*XLMTT ) ) )
-       ZRRS(:) = ZRRS(:) + ZZW(:)
-       ZRHS(:) = ZRHS(:) - ZZW(:)
-       ZTHS(:) = ZTHS(:) - ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(-RHMLTR))
-!
-       ZCRS(:) = MAX( ZCRS(:) + ZZW(:)*(XCCH*ZLBDAH(:)**XCXH/ZRHT(:)),0.0 )
-!
-    END WHERE
-END IF
-!
-IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-   IF (LBUDGET_TH) CALL BUDGET_DDH (                                                 &
-        UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-        4,'HMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-   IF (LBUDGET_RR) CALL BUDGET_DDH (                                                 &
-        UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=PRRS)*PRHODJ(:,:,:), &
-        8,'HMLT_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-   IF (LBUDGET_RH) CALL BUDGET_DDH (                                                 &
-        UNPACK(ZRHS(:),MASK=GMICRO(:,:,:),FIELD=PRHS)*PRHODJ(:,:,:), &
-        12,'HMLT_BU_RRH',YDDDH, YDLDDH, YDMDDH)
-   IF (LBUDGET_SV) THEN
-      CALL BUDGET_DDH (  UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=PCRS)*PRHODJ(:,:,:), &
-           12+NSV_LIMA_NR,'HMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-   END IF
-END IF
-!
-END IF
-!
-!------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_MIXED_FAST_PROCESSES
diff --git a/src/arome/micro/lima_mixed_slow_processes.F90 b/src/arome/micro/lima_mixed_slow_processes.F90
deleted file mode 100644
index ff8f782ce2387307ec721362792d2b6bd29273cf..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_mixed_slow_processes.F90
+++ /dev/null
@@ -1,297 +0,0 @@
-!      #####################################
-       MODULE MODI_LIMA_MIXED_SLOW_PROCESSES
-!      #####################################
-!
-INTERFACE
-      SUBROUTINE LIMA_MIXED_SLOW_PROCESSES(ZRHODREF, ZZT, ZSSI, PTSTEP,  &
-                                           ZLSFACT, ZLVFACT, ZAI, ZCJ,   &
-                                           ZRGT, ZCIT,                   &
-                                           ZRVS, ZRCS, ZRIS, ZRGS, ZTHS, &
-                                           ZCCS, ZCIS, ZIFS, ZINS,       &
-                                           ZLBDAI, ZLBDAG,               &
-                                           ZRHODJ, GMICRO, PRHODJ, KMI,  &
-                                           PTHS, PRVS, PRCS, PRIS, PRGS, &
-                                           PCCS, PCIS, &
-                            YDDDH, YDLDDH, YDMDDH                    )
-!
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: ZRHODREF  ! RHO Dry REFerence
-REAL, DIMENSION(:),   INTENT(IN)    :: ZZT       ! Temperature
-REAL, DIMENSION(:),   INTENT(IN)    :: ZSSI      ! Supersaturation over ice
-REAL,                 INTENT(IN)    :: PTSTEP    ! Time step          
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: ZLSFACT   ! L_s/(Pi_ref*C_ph)
-REAL, DIMENSION(:),   INTENT(IN)    :: ZLVFACT   ! L_v/(Pi_ref*C_ph)
-REAL, DIMENSION(:),   INTENT(IN)    :: ZAI       ! Thermodynamical function
-REAL, DIMENSION(:),   INTENT(IN)    :: ZCJ       ! for the ventilation coefficient
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: ZRGT      ! Graupel/hail m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: ZCIT      ! Pristine ice conc. at t
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZRVS      ! Water vapor m.r. source
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZRCS      ! Cloud water m.r. source
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZRIS      ! Pristine ice m.r. source
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZRGS      ! Graupel/hail m.r. source
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZTHS      ! Theta source
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZCCS      ! Cloud water conc. source
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZCIS      ! Pristine ice conc. source
-REAL, DIMENSION(:,:), INTENT(INOUT) :: ZIFS      ! Free Ice nuclei conc. source
-REAL, DIMENSION(:,:), INTENT(INOUT) :: ZINS      ! Nucleated Ice nuclei conc. source 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: ZLBDAI  ! Slope parameter of the ice crystal distr.
-REAL, DIMENSION(:),   INTENT(IN)    :: ZLBDAG  ! Slope parameter of the graupel distr.
-!
-! used for budget storage
-REAL,    DIMENSION(:),     INTENT(IN) :: ZRHODJ
-LOGICAL, DIMENSION(:,:,:), INTENT(IN) :: GMICRO 
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRHODJ
-INTEGER,                   INTENT(IN) :: KMI 
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PTHS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRVS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRCS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRIS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRGS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PCCS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PCIS
-!
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-!
-END SUBROUTINE LIMA_MIXED_SLOW_PROCESSES
-END INTERFACE
-END MODULE MODI_LIMA_MIXED_SLOW_PROCESSES
-!
-!     #######################################################################
-      SUBROUTINE LIMA_MIXED_SLOW_PROCESSES(ZRHODREF, ZZT, ZSSI, PTSTEP,  &
-                                           ZLSFACT, ZLVFACT, ZAI, ZCJ,   &
-                                           ZRGT, ZCIT,                   &
-                                           ZRVS, ZRCS, ZRIS, ZRGS, ZTHS, &
-                                           ZCCS, ZCIS, ZIFS, ZINS,       &
-                                           ZLBDAI, ZLBDAG,               &
-                                           ZRHODJ, GMICRO, PRHODJ, KMI,  &
-                                           PTHS, PRVS, PRCS, PRIS, PRGS, &
-                                           PCCS, PCIS, &
-                            YDDDH, YDLDDH, YDMDDH                    )
-!     #######################################################################
-!
-!!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the mixed-phase 
-!!    slow processes : 
-!!
-!!      Deposition of water vapor on graupeln
-!!      Cloud ice Melting
-!!      Bergeron-Findeisen effect
-!!
-!!**  METHOD
-!!    ------
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!      Most of the parameterizations come from the ICE3 scheme, described in
-!!    the MESO-NH scientific documentation.
-!!
-!!      Cohard, J.-M. and J.-P. Pinty, 2000: A comprehensive two-moment warm 
-!!      microphysical bulk scheme. 
-!!        Part I: Description and tests
-!!        Part II: 2D experiments with a non-hydrostatic model
-!!      Accepted for publication in Quart. J. Roy. Meteor. Soc. 
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy *  jan. 2014   add budgets
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_CST,              ONLY : XTT, XALPI, XBETAI, XGAMI,          &
-                                       XALPW, XBETAW, XGAMW
-USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCTMIN, NMOD_IFN
-USE MODD_PARAM_LIMA_COLD,  ONLY : XDI, X0DEPI, X2DEPI, XSCFAC  
-USE MODD_PARAM_LIMA_MIXED, ONLY : XLBG, XLBEXG, XLBDAG_MAX,           &
-                                  X0DEPG, XEX0DEPG, X1DEPG, XEX1DEPG 
-!
-USE MODD_NSV
-USE MODD_BUDGET
-USE MODE_BUDGET, ONLY: BUDGET_DDH
-!
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: ZRHODREF  ! RHO Dry REFerence
-REAL, DIMENSION(:),   INTENT(IN)    :: ZZT       ! Temperature
-REAL, DIMENSION(:),   INTENT(IN)    :: ZSSI      ! Supersaturation over ice
-REAL,                 INTENT(IN)    :: PTSTEP    ! Time step          
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: ZLSFACT   ! L_s/(Pi_ref*C_ph)
-REAL, DIMENSION(:),   INTENT(IN)    :: ZLVFACT   ! L_v/(Pi_ref*C_ph)
-REAL, DIMENSION(:),   INTENT(IN)    :: ZAI       ! Thermodynamical function
-REAL, DIMENSION(:),   INTENT(IN)    :: ZCJ       ! for the ventilation coefficient
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: ZRGT      ! Graupel/hail m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: ZCIT      ! Pristine ice conc. at t
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZRVS      ! Water vapor m.r. source
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZRCS      ! Cloud water m.r. source
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZRIS      ! Pristine ice m.r. source
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZRGS      ! Graupel/hail m.r. source
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZTHS      ! Theta source
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZCCS      ! Cloud water conc. source
-REAL, DIMENSION(:),   INTENT(INOUT) :: ZCIS      ! Pristine ice conc. source
-REAL, DIMENSION(:,:), INTENT(INOUT) :: ZIFS      ! Free Ice nuclei conc. source
-REAL, DIMENSION(:,:), INTENT(INOUT) :: ZINS      ! Nucleated Ice nuclei conc. source 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: ZLBDAI  ! Slope parameter of the ice crystal distr.
-REAL, DIMENSION(:),   INTENT(IN)    :: ZLBDAG  ! Slope parameter of the graupel distr.
-!
-! used for budget storage
-REAL,    DIMENSION(:),     INTENT(IN) :: ZRHODJ
-LOGICAL, DIMENSION(:,:,:), INTENT(IN) :: GMICRO 
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRHODJ
-INTEGER,                   INTENT(IN) :: KMI
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PTHS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRVS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRCS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRIS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRGS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PCCS
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PCIS
-!
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-!
-!*       0.2   Declarations of local variables :
-!
-REAL, DIMENSION(SIZE(ZZT)) :: ZZW, ZMASK    ! Work vectors
-!
-INTEGER :: JMOD_IFN
-!
-!-------------------------------------------------------------------------------
-!
-!*       1    Deposition of water vapor on r_g: RVDEPG
-!        ---------------------------------------------
-!
-!
-   ZZW(:) = 0.0
-   WHERE ( (ZRGT(:)>XRTMIN(6)) .AND. (ZRGS(:)>XRTMIN(6)/PTSTEP) )
-!Correction BVIE RHODREF
-!      ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*ZAI(:)) ) *                               &
-      ZZW(:) = ( ZSSI(:)/(ZAI(:)) ) *                               &
-               ( X0DEPG*ZLBDAG(:)**XEX0DEPG + X1DEPG*ZCJ(:)*ZLBDAG(:)**XEX1DEPG )
-      ZZW(:) =         MIN( ZRVS(:),ZZW(:)      )*(0.5+SIGN(0.5,ZZW(:))) &
-                     - MIN( ZRGS(:),ABS(ZZW(:)) )*(0.5-SIGN(0.5,ZZW(:)))
-      ZRGS(:) = ZRGS(:) + ZZW(:)
-      ZRVS(:) = ZRVS(:) - ZZW(:)
-      ZTHS(:) = ZTHS(:) + ZZW(:)*ZLSFACT(:)
-   END WHERE
-!
-! Budget storage
-   IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-     IF (LBUDGET_TH) CALL BUDGET_DDH (                                                 &
-                   UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                                4,'DEPG_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_RV) CALL BUDGET_DDH (                                                 &
-                   UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),&
-                                                                6,'DEPG_BU_RRV',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_RG) CALL BUDGET_DDH (                                                 &
-                   UNPACK(ZRGS(:),MASK=GMICRO(:,:,:),FIELD=PRGS)*PRHODJ(:,:,:), &
-                                                               11,'DEPG_BU_RRG',YDDDH, YDLDDH, YDMDDH)
-   END IF
-!
-!
-!*       2    cloud ice Melting: RIMLTC and CIMLTC
-!        -----------------------------------------
-!
-!
-   ZMASK(:) = 1.0
-   WHERE( (ZRIS(:)>XRTMIN(4)/PTSTEP) .AND. (ZZT(:)>XTT) )
-      ZRCS(:) = ZRCS(:) + ZRIS(:)
-      ZTHS(:) = ZTHS(:) - ZRIS(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(-RIMLTC))
-      ZRIS(:) = 0.0
-!
-      ZCCS(:) = ZCCS(:) + ZCIS(:)
-      ZCIS(:) = 0.0
-      ZMASK(:)= 0.0
-   END WHERE
-   DO JMOD_IFN = 1,NMOD_IFN
-! Correction BVIE aerosols not released but in droplets
-!      ZIFS(:,JMOD_IFN) = ZIFS(:,JMOD_IFN) + ZINS(:,JMOD_IFN)*(1.-ZMASK(:)) 
-      ZINS(:,JMOD_IFN) = ZINS(:,JMOD_IFN) * ZMASK(:)
-   ENDDO
-!
-! Budget storage
-   IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-     IF (LBUDGET_TH) CALL BUDGET_DDH (                                                 &
-                   UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                                4,'IMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_RC) CALL BUDGET_DDH (                                                 &
-                   UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), &
-                                                                7,'IMLT_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_RI) CALL BUDGET_DDH (                                                 &
-                   UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), &
-                                                                9,'IMLT_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_SV) THEN
-       CALL BUDGET_DDH (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:), &
-                                                               12+NSV_LIMA_NC,'IMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-       CALL BUDGET_DDH (UNPACK(ZCIS(:),MASK=GMICRO(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:), &
-                                                               12+NSV_LIMA_NI,'IMLT_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-     END IF
-   END IF
-!
-!
-!*       3    Bergeron-Findeisen effect: RCBERI
-!        --------------------------------------
-!
-!
-   ZZW(:) = 0.0
-   WHERE( (ZRCS(:)>XRTMIN(2)/PTSTEP) .AND. (ZRIS(:)>XRTMIN(4)/PTSTEP) .AND. (ZCIT(:)>XCTMIN(4)) )
-      ZZW(:) = EXP( (XALPW-XALPI) - (XBETAW-XBETAI)/ZZT(:)          &
-                                  - (XGAMW-XGAMI)*ALOG(ZZT(:)) ) -1.0 
-                                      ! supersaturation of saturated water over ice
-      ZZW(:) = MIN( ZRCS(:),( ZZW(:) / ZAI(:) ) * ZCIT(:) *        &
-                    ( X0DEPI/ZLBDAI(:)+X2DEPI*ZCJ(:)*ZCJ(:)/ZLBDAI(:)**(XDI+2.0) ) )
-      ZRCS(:) = ZRCS(:) - ZZW(:)
-      ZRIS(:) = ZRIS(:) + ZZW(:)
-      ZTHS(:) = ZTHS(:) + ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCBERI))
-   END WHERE
-!
-! Budget storage
-   IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-     IF (LBUDGET_TH) CALL BUDGET_DDH (                                                 &
-                   UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                               4,'BERFI_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_RC) CALL BUDGET_DDH (                                                 &
-                   UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:), &
-                                                               7,'BERFI_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-     IF (LBUDGET_RI) CALL BUDGET_DDH (                                                 &
-                   UNPACK(ZRIS(:),MASK=GMICRO(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:), &
-                                                               9,'BERFI_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-   END IF
-!
-!------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_MIXED_SLOW_PROCESSES
diff --git a/src/arome/micro/lima_nucleation_procs.F90 b/src/arome/micro/lima_nucleation_procs.F90
deleted file mode 100644
index 9b23d62f2eecc0767c22e64df6a43f57820fce37..0000000000000000000000000000000000000000
--- 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/arome/micro/lima_phillips.F90 b/src/arome/micro/lima_phillips.F90
deleted file mode 100644
index 6791798d429ba2196f73325c46c47259d27773a5..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_phillips.F90
+++ /dev/null
@@ -1,675 +0,0 @@
-!      #########################
-       MODULE MODI_LIMA_PHILLIPS
-!      #########################
-!
-INTERFACE
-      SUBROUTINE LIMA_PHILLIPS (OHHONI, PTSTEP, KMI, HFMFILE, HLUOUT, OCLOSE_OUT, &
-                                PZZ, PRHODJ, PRHODREF, PEXNREF, PPABST,           &
-                                PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,         &
-                                PTHS, PRVS, PRCS, PRIS,                           &
-                                PCIT, PCCS, PCIS,                                 &
-                                PNAS, PIFS, PINS, PNIS, &
-                            YDDDH, YDLDDH, YDMDDH   )
-!
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-LOGICAL,                  INTENT(IN)    :: OHHONI  ! enable haze freezing
-REAL,                     INTENT(IN)    :: PTSTEP  ! Time step          
-INTEGER,                  INTENT(IN)    :: KMI     ! Model index 
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)    :: HLUOUT  ! Output-listing name for
-                                                   ! model n
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                   ! the tput FM fileoutp
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ     ! Height (z)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ  ! Dry density * Jacobian
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF ! Reference Exner function
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST  ! abs. pressure at time t
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT    ! Theta at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRVT    ! Water vapor m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT    ! Rain water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRIT    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRGT    ! Graupel m.r. at t 
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS    ! Theta source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRVS    ! Water vapor m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRCS    ! Cloud water m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRIS    ! Pristine ice m.r. source
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCIT    ! Ice crystal C. at t
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCCS    ! Cloud water C. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCIS    ! Ice crystal C. source
-!
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNAS    ! Cloud  C. nuclei C. source
-                                                   !used as Free ice nuclei for
-                                                   !IMMERSION freezing
-!
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PIFS    ! Free ice nuclei C. source 
-                                                   !for DEPOSITION and CONTACT
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PINS    ! Activated ice nuclei C. source
-                                                   !for DEPOSITION and CONTACT
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNIS    ! Activated ice nuclei C. source
-                                                   !for IMMERSION
-!
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-!
-END SUBROUTINE LIMA_PHILLIPS
-END INTERFACE
-END MODULE MODI_LIMA_PHILLIPS
-!
-!     ######################################################################
-      SUBROUTINE LIMA_PHILLIPS (OHHONI, PTSTEP, KMI, HFMFILE, HLUOUT, OCLOSE_OUT, &
-                                PZZ, PRHODJ, PRHODREF, PEXNREF, PPABST,           &
-                                PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,         &
-                                PTHS, PRVS, PRCS, PRIS,                           &
-                                PCIT, PCCS, PCIS,                                 &
-                                PNAS, PIFS, PINS, PNIS, &
-                            YDDDH, YDLDDH, YDMDDH   )
-!     ######################################################################
-!!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the heterogeneous nucleation
-!!    following Phillips (2008).
-!!
-!!
-!!**  METHOD
-!!    ------
-!!      The parameterization of Phillips (2008) is based on observed nucleation
-!!    in the CFDC for a range of T and Si values. Phillips therefore defines a 
-!!    reference activity spectrum, that is, for given T and Si values, the 
-!!    reference concentration of primary ice crystals.
-!!      
-!!      The activation of IFN is closely related to their total surface. Thus, 
-!!    the activable fraction of each IFN specie is determined by an integration
-!!    over the particle size distributions.
-!!
-!!    Subroutine organisation :
-!!
-!!      1- Preliminary computations
-!!      2- Check where computations are necessary, and pack variables
-!!      3- Compute the saturation over water and ice
-!!      4- Compute the reference activity spectrum
-!!             -> CALL LIMA_PHILLIPS_REF_SPECTRUM
-!!         Integrate over the size distributions to compute the IFN activable fraction
-!!             -> CALL LIMA_PHILLIPS_INTEG
-!!      5- Heterogeneous nucleation of insoluble IFN
-!!      6- Heterogeneous nucleation of coated IFN
-!!      7- Unpack variables & deallocations
-!! 
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!      Phillips et al., 2008: An empirical parameterization of heterogeneous
-!!        ice nucleation for multiple chemical species of aerosols, J. Atmos. Sci. 
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy *  jan. 2014   add budgets
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_PARAMETERS,      ONLY : JPHEXT, JPVEXT
-USE MODD_CST,             ONLY : XP00, XRD, XMV, XMD, XCPD, XCPV, XCL, XCI,        &
-                                 XTT, XLSTT, XLVTT, XALPI, XBETAI, XGAMI,          &
-                                 XALPW, XBETAW, XGAMW, XPI
-USE MODD_PARAM_LIMA,      ONLY : NMOD_IFN, NSPECIE, XFRAC,                         &
-                                 NMOD_CCN, NMOD_IMM, NIND_SPECIE, NINDICE_CCN_IMM,  & 
-                                 XDSI0, XRTMIN, XCTMIN, NPHILLIPS
-USE MODD_PARAM_LIMA_COLD, ONLY : XMNU0
-!
-USE MODI_LIMA_FUNCTIONS,  ONLY : COUNTJV
-USE MODI_LIMA_PHILLIPS_REF_SPECTRUM
-USE MODI_LIMA_PHILLIPS_INTEG
-!
-USE MODD_BUDGET
-USE MODE_BUDGET, ONLY: BUDGET_DDH
-USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NI, NSV_LIMA_IFN_FREE
-!
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-LOGICAL,                  INTENT(IN)    :: OHHONI  ! enable haze freezing
-REAL,                     INTENT(IN)    :: PTSTEP  ! Time step          
-INTEGER,                  INTENT(IN)    :: KMI     ! Model index 
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)    :: HLUOUT  ! Output-listing name for
-                                                   ! model n
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                   ! the tput FM fileoutp
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ     ! Height (z)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ  ! Dry density * Jacobian
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF ! Reference Exner function
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST  ! abs. pressure at time t
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT    ! Theta at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRVT    ! Water vapor m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT    ! Rain water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRIT    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRGT    ! Graupel m.r. at t 
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS    ! Theta source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRVS    ! Water vapor m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRCS    ! Cloud water m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRIS    ! Pristine ice m.r. source
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCIT    ! Ice crystal C. at t
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCCS    ! Cloud water C. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCIS    ! Ice crystal C. source
-!
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNAS    ! Cloud  C. nuclei C. source
-                                                   !used as Free ice nuclei for
-                                                   !IMMERSION freezing
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PIFS    ! Free ice nuclei C. source 
-                                                   !for DEPOSITION and CONTACT
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PINS    ! Activated ice nuclei C. source
-                                                   !for DEPOSITION and CONTACT
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNIS    ! Activated ice nuclei C. source
-                                                   !for IMMERSION
-!
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-!
-!
-!*       0.2   Declarations of local variables :
-!
-!
-INTEGER :: IIB, IIE, IJB, IJE, IKB, IKE               ! Physical domain
-INTEGER :: JL, JMOD_CCN, JMOD_IFN, JSPECIE, JMOD_IMM  ! Loop index
-INTEGER :: INEGT  ! Case number of sedimentation, nucleation,
-!
-LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) &
-			  :: GNEGT  ! Test where to compute the nucleation
-!
-INTEGER, DIMENSION(SIZE(PRHODREF))  :: I1,I2,I3 ! Indexes for PACK replacement
-!
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRVT    ! Water vapor m.r. at t
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRCT    ! Cloud water m.r. at t
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRRT    ! Rain water m.r. at t
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRIT    ! Pristine ice m.r. at t
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRST    ! Snow/aggregate m.r. at t
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRGT    ! Graupel/hail m.r. at t
-REAL, DIMENSION(:),   ALLOCATABLE :: ZCIT    ! Pristine ice conc. at t
-!
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRVS    ! Water vapor m.r. source
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRCS    ! Cloud water m.r. source
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRIS    ! Pristine ice m.r. source
-REAL, DIMENSION(:),   ALLOCATABLE :: ZCCS    ! Cloud water conc. source
-REAL, DIMENSION(:),   ALLOCATABLE :: ZCIS    ! Pristine ice conc. source
-!
-REAL, DIMENSION(:),   ALLOCATABLE :: ZTHS    ! Theta source
-!
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZNAS    ! Cloud Cond. nuclei conc. source
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZIFS    ! Free Ice nuclei conc. source
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZINS    ! Nucleated Ice nuclei conc. source
-                                             !by Deposition/Contact
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZNIS    ! Nucleated Ice nuclei conc. source 
-                                             !by Immersion
-!
-REAL, DIMENSION(:), ALLOCATABLE &
-                           :: ZRHODREF, & ! RHO Dry REFerence
-                              ZRHODJ,   & ! RHO times Jacobian
-                              ZZT,      & ! Temperature
-                              ZPRES,    & ! Pressure
-                              ZEXNREF,  & ! EXNer Pressure REFerence
-                              ZZW,      & ! Work array
-                              ZZX,      & ! Work array
-                              ZZY,      & ! Work array
-                              ZLSFACT,  & ! L_s/(Pi_ref*C_ph)
-                              ZLVFACT,  & ! L_v/(Pi_ref*C_ph)
-                              ZLBDAC,   & ! Slope parameter of the cloud droplet distr.
-                              ZSI,      &
-                              ZSW,      &
-                              ZSI_W
-!
-REAL,    DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3))   &
-                                  :: ZW, ZT ! work arrays
-!
-REAL,    DIMENSION(:),   ALLOCATABLE :: ZRTMIN, ZCTMIN
-!
-REAL,    DIMENSION(:,:), ALLOCATABLE :: ZSI0, &    ! Si threshold in H_X for X={DM,BC,O}
-                                        Z_FRAC_ACT ! Activable frac. of each AP species
-REAL,    DIMENSION(:),   ALLOCATABLE :: ZTCELSIUS, ZZT_SI0_BC
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       1.     PRELIMINARY COMPUTATIONS
-!	        ------------------------
-!
-!
-! Physical domain
-!
-IIB=1+JPHEXT
-IIE=SIZE(PZZ,1) - JPHEXT
-IJB=1+JPHEXT
-IJE=SIZE(PZZ,2) - JPHEXT
-IKB=1+JPVEXT
-IKE=SIZE(PZZ,3) - JPVEXT
-!
-! Physical limitations
-!
-ALLOCATE(ZRTMIN(SIZE(XRTMIN)))
-ALLOCATE(ZCTMIN(SIZE(XCTMIN)))
-ZRTMIN(:) = XRTMIN(:) / PTSTEP
-ZCTMIN(:) = XCTMIN(:) / PTSTEP
-!
-! Temperature
-!
-ZT(:,:,:)  = PTHT(:,:,:) * ( PPABST(:,:,:)/XP00 ) ** (XRD/XCPD)
-!
-! Saturation over ice
-!
-ZW(:,:,:) = EXP( XALPI - XBETAI/ZT(:,:,:) - XGAMI*ALOG(ZT(:,:,:) ) )
-ZW(:,:,:) = PRVT(:,:,:)*( PPABST(:,:,:)-ZW(:,:,:) ) / ( (XMV/XMD) * ZW(:,:,:) )
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       2.     COMPUTATIONS ONLY WHERE NECESSARY : PACK
-!	        ----------------------------------------
-!
-!
-GNEGT(:,:,:) = .FALSE.
-GNEGT(IIB:IIE,IJB:IJE,IKB:IKE) = ZT(IIB:IIE,IJB:IJE,IKB:IKE)<XTT-2.0 .AND. &
-                                 ZW(IIB:IIE,IJB:IJE,IKB:IKE)>0.95
-INEGT = COUNTJV( GNEGT(:,:,:),I1(:),I2(:),I3(:))
-!
-IF (INEGT > 0) THEN
-!
-ALLOCATE(ZRVT(INEGT)) 
-ALLOCATE(ZRCT(INEGT)) 
-ALLOCATE(ZRRT(INEGT)) 
-ALLOCATE(ZRIT(INEGT)) 
-ALLOCATE(ZRST(INEGT)) 
-ALLOCATE(ZRGT(INEGT)) 
-!
-ALLOCATE(ZCIT(INEGT))
-!
-ALLOCATE(ZRVS(INEGT)) 
-ALLOCATE(ZRCS(INEGT))
-ALLOCATE(ZRIS(INEGT))
-!
-ALLOCATE(ZTHS(INEGT))
-!
-ALLOCATE(ZCCS(INEGT))
-ALLOCATE(ZCIS(INEGT))
-!
-ALLOCATE(ZNAS(INEGT,NMOD_CCN))
-ALLOCATE(ZIFS(INEGT,NMOD_IFN))
-ALLOCATE(ZINS(INEGT,NMOD_IFN))
-ALLOCATE(ZNIS(INEGT,NMOD_IMM))
-!
-ALLOCATE(ZRHODREF(INEGT)) 
-ALLOCATE(ZZT(INEGT)) 
-ALLOCATE(ZPRES(INEGT)) 
-ALLOCATE(ZEXNREF(INEGT))
-!
-DO JL=1,INEGT
-   ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL))
-   ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL))
-   ZRRT(JL) = PRRT(I1(JL),I2(JL),I3(JL))
-   ZRIT(JL) = PRIT(I1(JL),I2(JL),I3(JL))
-   ZRST(JL) = PRST(I1(JL),I2(JL),I3(JL))
-   ZRGT(JL) = PRGT(I1(JL),I2(JL),I3(JL))
-!
-   ZCIT(JL) = PCIT(I1(JL),I2(JL),I3(JL))
-!
-   ZRVS(JL) = PRVS(I1(JL),I2(JL),I3(JL))
-   ZRCS(JL) = PRCS(I1(JL),I2(JL),I3(JL))
-   ZRIS(JL) = PRIS(I1(JL),I2(JL),I3(JL))
-!
-   ZTHS(JL) = PTHS(I1(JL),I2(JL),I3(JL))
-!
-   ZCCS(JL) = PCCS(I1(JL),I2(JL),I3(JL))
-   ZCIS(JL) = PCIS(I1(JL),I2(JL),I3(JL))
-!
-   DO JMOD_CCN = 1, NMOD_CCN
-      ZNAS(JL,JMOD_CCN) = PNAS(I1(JL),I2(JL),I3(JL),JMOD_CCN)
-   ENDDO
-   DO JMOD_IFN = 1, NMOD_IFN
-      ZIFS(JL,JMOD_IFN) = PIFS(I1(JL),I2(JL),I3(JL),JMOD_IFN)
-      ZINS(JL,JMOD_IFN) = PINS(I1(JL),I2(JL),I3(JL),JMOD_IFN)
-   ENDDO
-   DO JMOD_IMM = 1, NMOD_IMM
-      ZNIS(JL,JMOD_IMM) = PNIS(I1(JL),I2(JL),I3(JL),JMOD_IMM)
-   ENDDO
-   ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL))
-   ZZT(JL)      = ZT(I1(JL),I2(JL),I3(JL))
-   ZPRES(JL)    = PPABST(I1(JL),I2(JL),I3(JL))
-   ZEXNREF(JL)  = PEXNREF(I1(JL),I2(JL),I3(JL))
-ENDDO
-!
-! PACK : done
-! Prepare computations
-!
-ALLOCATE( ZLSFACT    (INEGT) )
-ALLOCATE( ZLVFACT    (INEGT) )
-ALLOCATE( ZSI        (INEGT) )
-ALLOCATE( ZTCELSIUS  (INEGT) )
-ALLOCATE( ZZT_SI0_BC (INEGT) )
-ALLOCATE( ZLBDAC     (INEGT) )
-ALLOCATE( ZSI0       (INEGT,NSPECIE) )
-ALLOCATE( Z_FRAC_ACT (INEGT,NSPECIE) ) ; Z_FRAC_ACT(:,:) = 0.0
-ALLOCATE( ZSW        (INEGT) )
-ALLOCATE( ZSI_W      (INEGT) )
-!
-ALLOCATE( ZZW (INEGT) ) ; ZZW(:) = 0.0
-ALLOCATE( ZZX (INEGT) ) ; ZZX(:) = 0.0
-ALLOCATE( ZZY (INEGT) ) ; ZZY(:) = 0.0
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       3.     COMPUTE THE SATURATION OVER WATER AND ICE
-!	        -----------------------------------------
-!
-!
-ZTCELSIUS(:) = ZZT(:)-XTT                                    ! T [°C]
-ZZW(:)  = ZEXNREF(:)*( XCPD+XCPV*ZRVT(:)+XCL*(ZRCT(:)+ZRRT(:)) &
-     +XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) )
-ZLSFACT(:) = (XLSTT+(XCPV-XCI)*ZTCELSIUS(:))/ZZW(:)          ! L_s/(Pi_ref*C_ph)
-ZLVFACT(:) = (XLVTT+(XCPV-XCL)*ZTCELSIUS(:))/ZZW(:)          ! L_v/(Pi_ref*C_ph)
-!
-ZZW(:)  = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) ) ! es_i
-ZSI(:)  = ZRVT(:)*(ZPRES(:)-ZZW(:))/((XMV/XMD)*ZZW(:))       ! Saturation over ice
-!
-ZZY(:)  = EXP( XALPW - XBETAW/ZZT(:) - XGAMW*ALOG(ZZT(:) ) ) ! es_w
-ZSW(:)  = ZRVT(:)*(ZPRES(:)-ZZY(:))/((XMV/XMD)*ZZY(:))       ! Saturation over water
-!
-ZSI_W(:)= ZZY(:)/ZZW(:)     ! Saturation over ice at water saturation: es_w/es_i
-!
-! Saturation parameters for H_X, with X={Dust/Metallic (2 modes), Black Carbon, Organic}
-!
-ZSI0(:,1) = 1.0 + 10.0**( -1.0261 + 3.1656E-3* ZTCELSIUS(:)     &
-                                  + 5.3938E-4*(ZTCELSIUS(:)**2) &
-                                  + 8.2584E-6*(ZTCELSIUS(:)**3) ) ! with T [°C]
-ZSI0(:,2) = ZSI0(:,1) ! DM2 = DM1
-ZSI0(:,3) = 0.0       ! BC
-ZZT_SI0_BC(:) = MAX( 198.0, MIN( 239.0,ZZT(:) ) )
-ZSI0(:,3) = (-3.118E-5*ZZT_SI0_BC(:)+1.085E-2)*ZZT_SI0_BC(:)+0.5652 - XDSI0(3)
-IF (NPHILLIPS == 8) THEN
-   ZSI0(:,4) = ZSI0(:,3) ! O = BC
-ELSE IF (NPHILLIPS == 13) THEN
-   ZSI0(:,4) = 1.15      ! BIO
-END IF
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       4.     COMPUTE THE ACTIVABLE FRACTION OF EACH IFN SPECIE
-!	        -------------------------------------------------
-!
-!
-! Computation of the reference activity spectrum ( ZZY = N_{IN,1,*} )
-!
-CALL LIMA_PHILLIPS_REF_SPECTRUM(ZZT, ZSI, ZSI_W, ZZY)
-!
-! For each aerosol species (DM1, DM2, BC, O), compute the fraction that may be activated
-! Z_FRAC_ACT(INEGT,NSPECIE) = fraction of each species that may be activated
-!
-CALL LIMA_PHILLIPS_INTEG(ZZT, ZSI, ZSI0, ZSW, ZZY, Z_FRAC_ACT)
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       5.     COMPUTE THE HETEROGENEOUS NUCLEATION OF INSOLUBLE IFN
-!	        -----------------------------------------------------
-!
-!
-!
-DO JMOD_IFN = 1,NMOD_IFN    ! IFN modes
-   ZZX(:)=0.
-   DO JSPECIE = 1, NSPECIE  ! Each IFN mode is mixed with DM1, DM2, BC, O
-      ZZX(:)=ZZX(:)+XFRAC(JSPECIE,JMOD_IFN)*(ZIFS(:,JMOD_IFN)+ZINS(:,JMOD_IFN))* &
-                                            Z_FRAC_ACT(:,JSPECIE)
-   END DO                   
-! Now : ZZX(:) = number of activable AP.
-! Activated AP at this time step = activable AP - already activated AP 
-   ZZX(:) = MIN( ZIFS(:,JMOD_IFN), MAX( (ZZX(:)-ZINS(:,JMOD_IFN)),0.0 ))
-! Correction BVIE division by PTSTEP ?
-!   ZZW(:) = MIN( XMNU0*ZZX(:) / PTSTEP , ZRVS(:)     )
-   ZZW(:) = MIN( XMNU0*ZZX(:), ZRVS(:)     )
-!
-! Update the concentrations and MMR
-!   
-   ZIFS(:,JMOD_IFN)     = ZIFS(:,JMOD_IFN) - ZZX(:)
-   ZW(:,:,:)            = PIFS(:,:,:,JMOD_IFN)
-   PIFS(:,:,:,JMOD_IFN) = UNPACK( ZIFS(:,JMOD_IFN), MASK=GNEGT(:,:,:),        &
-                                                               FIELD=ZW(:,:,:) )
-!
-   ZINS(:,JMOD_IFN)     = ZINS(:,JMOD_IFN) + ZZX(:)
-   ZW(:,:,:)            = PINS(:,:,:,JMOD_IFN)
-   PINS(:,:,:,JMOD_IFN) = UNPACK( ZINS(:,JMOD_IFN), MASK=GNEGT(:,:,:),        &
-                                                               FIELD=ZW(:,:,:) )
-!
-   ZRVS(:) = ZRVS(:) - ZZW(:)
-   ZRIS(:) = ZRIS(:) + ZZW(:)
-   ZTHS(:) = ZTHS(:) + ZZW(:)*ZLSFACT(:)    !-ZLVFACT(:)) ! f(L_s*(RVHNDI))
-   ZCIS(:) = ZCIS(:) + ZZX(:)
-END DO
-!
-!
-! Budget storage
-IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-  IF (LBUDGET_TH) CALL BUDGET_DDH (                                              &
-                  UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                              4,'HIND_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RV) CALL BUDGET_DDH (                                              &
-                  UNPACK(ZRVS(:),MASK=GNEGT(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),&
-                                                              6,'HIND_BU_RRV',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RI) CALL BUDGET_DDH (                                              &
-                  UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),&
-                                                              9,'HIND_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_SV) THEN
-    CALL BUDGET_DDH ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),&
-                                                       12+NSV_LIMA_NI,'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-    IF (NMOD_IFN.GE.1) THEN
-       DO JL=1, NMOD_IFN
-          CALL BUDGET_DDH ( PIFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_IFN_FREE+JL-1,'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH) 
-       END DO
-    END IF
-  END IF
-END IF
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       6.     COMPUTE THE HETEROGENEOUS NUCLEATION OF COATED IFN
-!	        --------------------------------------------------
-!
-!
-! Heterogeneous nucleation by immersion of the activated CCN
-! Currently, we represent coated IFN as a pure aerosol type (NIND_SPECIE)
-!
-!
-DO JMOD_IMM = 1,NMOD_IMM  ! Coated IFN modes
-   JMOD_CCN = NINDICE_CCN_IMM(JMOD_IMM) ! Corresponding CCN mode
-   IF (JMOD_CCN .GT. 0) THEN
-!
-! OLD LIMA : Compute the appropriate mean diameter and sigma      
-!      XMDIAM_IMM = MIN( XMDIAM_IFN(NIND_SPECIE) , XR_MEAN_CCN(JMOD_CCN)*2. )
-!      XSIGMA_IMM = MIN( XSIGMA_IFN(JSPECIE) , EXP(XLOGSIG_CCN(JMOD_CCN)) )
-!
-      ZZW(:) = MIN( ZCCS(:) , ZNAS(:,JMOD_CCN) )
-      ZZX(:)=  ( ZZW(:)+ZNIS(:,JMOD_IMM) ) * Z_FRAC_ACT(:,NIND_SPECIE)
-! Now : ZZX(:) = number of activable AP.
-! Activated AP at this time step = activable AP - already activated AP 
-      ZZX(:) = MIN( ZZW(:), MAX( (ZZX(:)-ZNIS(:,JMOD_IMM)),0.0 ) )
-! Correction BVIE division by PTSTEP ?
-!      ZZY(:) = MIN( XMNU0*ZZX(:) / PTSTEP , ZRVS(:)     )
-      ZZY(:) = MIN( XMNU0*ZZX(:) , ZRVS(:)     )
-!
-! Update the concentrations and MMR
-!   
-      ZNAS(:,JMOD_CCN)     = ZNAS(:,JMOD_CCN) - ZZX(:)
-      ZW(:,:,:)            = PNAS(:,:,:,JMOD_CCN)
-      PNAS(:,:,:,JMOD_CCN) = UNPACK(ZNAS(:,JMOD_CCN),MASK=GNEGT(:,:,:), &
-                                                     FIELD=ZW(:,:,:))
-      ZNIS(:,JMOD_IMM)     = ZNIS(:,JMOD_IMM) + ZZX(:)
-      ZW(:,:,:)            = PNIS(:,:,:,JMOD_IMM)
-      PNIS(:,:,:,JMOD_IMM) = UNPACK(ZNIS(:,JMOD_IMM),MASK=GNEGT(:,:,:), &
-                                                     FIELD=ZW(:,:,:))
-!
-      ZRCS(:) = ZRCS(:) - ZZY(:)
-      ZRIS(:) = ZRIS(:) + ZZY(:)
-      ZTHS(:) = ZTHS(:) + ZZY(:)*ZLSFACT(:) !-ZLVFACT(:)) ! f(L_s*(RVHNCI))
-      ZCCS(:) = ZCCS(:) - ZZX(:)
-      ZCIS(:) = ZCIS(:) + ZZX(:)
-   END IF
-END DO
-!
-! Budget storage
-IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-  IF (LBUDGET_TH) CALL BUDGET_DDH (                                                 &
-                  UNPACK(ZTHS(:),MASK=GNEGT(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                              4,'HINC_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RC) CALL BUDGET_DDH (                                                 &
-                  UNPACK(ZRCS(:),MASK=GNEGT(:,:,:),FIELD=PRCS)*PRHODJ(:,:,:),&
-                                                              7,'HINC_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_RI) CALL BUDGET_DDH (                                                 &
-                  UNPACK(ZRIS(:),MASK=GNEGT(:,:,:),FIELD=PRIS)*PRHODJ(:,:,:),&
-                                                              9,'HINC_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-  IF (LBUDGET_SV) THEN
-    CALL BUDGET_DDH ( UNPACK(ZCCS(:),MASK=GNEGT(:,:,:),FIELD=PCCS)*PRHODJ(:,:,:),&
-                                                       12+NSV_LIMA_NC,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-    CALL BUDGET_DDH ( UNPACK(ZCIS(:),MASK=GNEGT(:,:,:),FIELD=PCIS)*PRHODJ(:,:,:),&
-                                                       12+NSV_LIMA_NI,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-  END IF
-END IF
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       7.     UNPACK VARIABLES AND CLEAN
-!	        --------------------------
-!
-!
-! End of the heterogeneous nucleation following Phillips 08
-! Unpack variables, deallocate...
-!
-!
-ZW(:,:,:)   = PRVS(:,:,:)
-PRVS(:,:,:) = UNPACK( ZRVS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) )
-ZW(:,:,:)   = PRCS(:,:,:)
-PRCS(:,:,:) = UNPACK( ZRCS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) )
-ZW(:,:,:)   = PRIS(:,:,:)
-PRIS(:,:,:) = UNPACK( ZRIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) )
-ZW(:,:,:)   = PTHS(:,:,:)
-PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) )
-ZW(:,:,:)   = PCCS(:,:,:)
-PCCS(:,:,:) = UNPACK( ZCCS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) )
-ZW(:,:,:)   = PCIS(:,:,:)
-PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GNEGT(:,:,:),FIELD=ZW(:,:,:) )
-!
-DEALLOCATE(ZRTMIN)
-DEALLOCATE(ZCTMIN)
-DEALLOCATE(ZRVT) 
-DEALLOCATE(ZRCT) 
-DEALLOCATE(ZRRT) 
-DEALLOCATE(ZRIT) 
-DEALLOCATE(ZRST) 
-DEALLOCATE(ZRGT) 
-DEALLOCATE(ZCIT)
-DEALLOCATE(ZRVS) 
-DEALLOCATE(ZRCS)
-DEALLOCATE(ZRIS)
-DEALLOCATE(ZTHS)
-DEALLOCATE(ZCCS)
-DEALLOCATE(ZCIS)
-DEALLOCATE(ZNAS)
-DEALLOCATE(ZIFS)
-DEALLOCATE(ZINS)
-DEALLOCATE(ZNIS)
-DEALLOCATE(ZRHODREF) 
-DEALLOCATE(ZZT) 
-DEALLOCATE(ZPRES) 
-DEALLOCATE(ZEXNREF)
-DEALLOCATE(ZLSFACT)
-DEALLOCATE(ZLVFACT)
-DEALLOCATE(ZSI)
-DEALLOCATE(ZTCELSIUS)
-DEALLOCATE(ZZT_SI0_BC)
-DEALLOCATE(ZLBDAC)
-DEALLOCATE(ZSI0)
-DEALLOCATE(Z_FRAC_ACT)
-DEALLOCATE(ZSW)
-DEALLOCATE(ZZW)
-DEALLOCATE(ZZX)
-DEALLOCATE(ZZY)
-DEALLOCATE(ZSI_W)
-!
-!
-ELSE
-!
-! Advance the budget calls
-!
-  IF (NBUMOD==KMI .AND. LBU_ENABLE) THEN
-    IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HIND_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RV) CALL BUDGET_DDH (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HIND_BU_RRV',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HIND_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_SV) THEN
-       !print*, 'LBUDGET_SV dans lima_phillips = ', LBUDGET_SV
-       CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HIND_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-       IF (NMOD_IFN.GE.1) THEN
-         DO JL=1, NMOD_IFN
-            CALL BUDGET_DDH ( PIFS(:,:,:,JL)*PRHODJ(:,:,:),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 (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HINC_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HINC_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HINC_BU_RRI',YDDDH, YDLDDH, YDMDDH)
-    IF (LBUDGET_SV) THEN
-       !print*, 'LBUDGET_SV dans lima_phillips = ', LBUDGET_SV
-       CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-       CALL BUDGET_DDH (PCIS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NI,'HINC_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-    END IF
-  END IF
-!
-!
-END IF ! INEGT > 0
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_PHILLIPS
diff --git a/src/arome/micro/lima_phillips_ifn_nucleation.F90 b/src/arome/micro/lima_phillips_ifn_nucleation.F90
deleted file mode 100644
index 068d15cfc3be0c89f61b485641cf7720f87848b6..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_phillips_ifn_nucleation.F90
+++ /dev/null
@@ -1,500 +0,0 @@
-!      ########################################
-       MODULE MODI_LIMA_PHILLIPS_IFN_NUCLEATION
-!      ########################################
-!
-INTERFACE
-   SUBROUTINE LIMA_PHILLIPS_IFN_NUCLEATION (PTSTEP, HFMFILE, OCLOSE_OUT,                      &
-                                            PRHODREF, PEXNREF, PPABST,                        &
-                                            PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,         &
-                                            PCCT, PCIT, PNAT, PIFT, PINT, PNIT,               &
-                                            P_TH_HIND, P_RI_HIND, P_CI_HIND,                  &
-                                            P_RC_HINC, P_CC_HINC                              )
-!
-REAL,                     INTENT(IN)    :: PTSTEP 
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE 
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT 
-!
-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(INOUT)    :: PTHT    ! Theta at time 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    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST    ! Snow/aggregate 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(INOUT)    :: PCIT    ! Cloud water conc. at t 
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT)    :: PNAT    ! CCN conc. used for immersion nucl.
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT)    :: PIFT    ! Free IFN conc.
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT)    :: PINT    ! Nucleated IFN conc.
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT)    :: PNIT    ! Nucleated (by immersion) CCN conc.
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: P_TH_HIND
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: P_RI_HIND
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: P_CI_HIND
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: P_RC_HINC
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: P_CC_HINC
-!
-END SUBROUTINE LIMA_PHILLIPS_IFN_NUCLEATION
-END INTERFACE
-END MODULE MODI_LIMA_PHILLIPS_IFN_NUCLEATION
-!
-!     ######################################################################
-   SUBROUTINE LIMA_PHILLIPS_IFN_NUCLEATION (PTSTEP, HFMFILE, OCLOSE_OUT,                      &
-                                            PRHODREF, PEXNREF, PPABST,                        &
-                                            PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,         &
-                                            PCCT, PCIT, PNAT, PIFT, PINT, PNIT,               &
-                                            P_TH_HIND, P_RI_HIND, P_CI_HIND,                  &
-                                            P_RC_HINC, P_CC_HINC                              )
-!     ######################################################################
-!!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the heterogeneous nucleation
-!!    following Phillips (2008).
-!!
-!!
-!!**  METHOD
-!!    ------
-!!      The parameterization of Phillips (2008) is based on observed nucleation
-!!    in the CFDC for a range of T and Si values. Phillips therefore defines a 
-!!    reference activity spectrum, that is, for given T and Si values, the 
-!!    reference concentration of primary ice crystals.
-!!      
-!!      The activation of IFN is closely related to their total surface. Thus, 
-!!    the activable fraction of each IFN specie is determined by an integration
-!!    over the particle size distributions.
-!!
-!!    Subroutine organisation :
-!!
-!!      1- Preliminary computations
-!!      2- Check where computations are necessary, and pack variables
-!!      3- Compute the saturation over water and ice
-!!      4- Compute the reference activity spectrum
-!!             -> CALL LIMA_PHILLIPS_REF_SPECTRUM
-!!         Integrate over the size distributions to compute the IFN activable fraction
-!!             -> CALL LIMA_PHILLIPS_INTEG
-!!      5- Heterogeneous nucleation of insoluble IFN
-!!      6- Heterogeneous nucleation of coated IFN
-!!      7- Unpack variables & deallocations
-!! 
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!      Phillips et al., 2008: An empirical parameterization of heterogeneous
-!!        ice nucleation for multiple chemical species of aerosols, J. Atmos. Sci. 
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy *  jan. 2014   add budgets
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_PARAMETERS,      ONLY : JPHEXT, JPVEXT
-USE MODD_CST,             ONLY : XP00, XRD, XMV, XMD, XCPD, XCPV, XCL, XCI,        &
-                                 XTT, XLSTT, XLVTT, XALPI, XBETAI, XGAMI,          &
-                                 XALPW, XBETAW, XGAMW, XPI
-USE MODD_PARAM_LIMA,      ONLY : NMOD_IFN, NSPECIE, XFRAC,                         &
-                                 NMOD_CCN, NMOD_IMM, NIND_SPECIE, NINDICE_CCN_IMM,  & 
-                                 XDSI0, XRTMIN, XCTMIN, NPHILLIPS
-USE MODD_PARAM_LIMA_COLD, ONLY : XMNU0
-!
-USE MODI_LIMA_FUNCTIONS,  ONLY : COUNTJV
-USE MODI_LIMA_PHILLIPS_REF_SPECTRUM
-USE MODI_LIMA_PHILLIPS_INTEG
-!
-USE MODD_BUDGET
-USE MODE_BUDGET, ONLY: BUDGET_DDH
-USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NI, NSV_LIMA_IFN_FREE
-!
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-REAL,                     INTENT(IN)    :: PTSTEP 
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE 
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT 
-!
-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(INOUT)    :: PTHT    ! Theta at time 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    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST    ! Snow/aggregate 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(INOUT)    :: PCIT    ! Cloud water conc. at t 
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT)    :: PNAT    ! CCN conc. used for immersion nucl.
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT)    :: PIFT    ! Free IFN conc.
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT)    :: PINT    ! Nucleated IFN conc.
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT)    :: PNIT    ! Nucleated (by immersion) CCN conc.
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: P_TH_HIND
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: P_RI_HIND
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: P_CI_HIND
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: P_RC_HINC
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: P_CC_HINC
-!
-!
-!*       0.2   Declarations of local variables :
-!
-!
-INTEGER :: IIB, IIE, IJB, IJE, IKB, IKE               ! Physical domain
-INTEGER :: JL, JMOD_CCN, JMOD_IFN, JSPECIE, JMOD_IMM  ! Loop index
-INTEGER :: INEGT  ! Case number of sedimentation, nucleation,
-!
-LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) &
-			  :: GNEGT  ! Test where to compute the nucleation
-!
-INTEGER, DIMENSION(SIZE(PRHODREF))  :: I1,I2,I3 ! Indexes for PACK replacement
-!
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRVT    ! Water vapor m.r. at t
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRCT    ! Cloud water m.r. at t
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRRT    ! Rain water m.r. at t
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRIT    ! Pristine ice m.r. at t
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRST    ! Snow/aggregate m.r. at t
-REAL, DIMENSION(:),   ALLOCATABLE :: ZRGT    ! Graupel/hail m.r. at t
-!
-REAL, DIMENSION(:),   ALLOCATABLE :: ZCCT    ! Cloud water conc. at t
-!
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZNAT    ! Cloud Cond. nuclei conc. source
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZIFT    ! Free Ice nuclei conc. source
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZINT    ! Nucleated Ice nuclei conc. source
-                                             !by Deposition/Contact
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZNIT    ! Nucleated Ice nuclei conc. source 
-                                             !by Immersion
-!
-REAL, DIMENSION(:), ALLOCATABLE &
-                           :: ZRHODREF, & ! RHO Dry REFerence
-                              ZRHODJ,   & ! RHO times Jacobian
-                              ZZT,      & ! Temperature
-                              ZPRES,    & ! Pressure
-                              ZEXNREF,  & ! EXNer Pressure REFerence
-                              ZZW,      & ! Work array
-                              ZZX,      & ! Work array
-                              ZZY,      & ! Work array
-                              ZLSFACT,  & ! L_s/(Pi_ref*C_ph)
-                              ZLVFACT,  & ! L_v/(Pi_ref*C_ph)
-                              ZLBDAC,   & ! Slope parameter of the cloud droplet distr.
-                              ZSI,      &
-                              ZSW,      &
-                              ZSI_W
-!
-REAL,    DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3))   &
-                                  :: ZW, ZT ! work arrays
-!
-REAL,    DIMENSION(:,:), ALLOCATABLE :: ZSI0, &    ! Si threshold in H_X for X={DM,BC,O}
-                                        Z_FRAC_ACT ! Activable frac. of each AP species
-REAL,    DIMENSION(:),   ALLOCATABLE :: ZTCELSIUS, ZZT_SI0_BC
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       1.     PRELIMINARY COMPUTATIONS
-!	        ------------------------
-!
-P_TH_HIND(:,:,:) = 0.
-P_RI_HIND(:,:,:) = 0.
-P_CI_HIND(:,:,:) = 0.
-P_RC_HINC(:,:,:) = 0.
-P_CC_HINC(:,:,:) = 0.
-!
-! Physical domain
-!
-IIB=1+JPHEXT
-IIE=SIZE(PTHT,1) - JPHEXT
-IJB=1+JPHEXT
-IJE=SIZE(PTHT,2) - JPHEXT
-IKB=1+JPVEXT
-IKE=SIZE(PTHT,3) - JPVEXT
-!
-! Temperature
-!
-ZT(:,:,:)  = PTHT(:,:,:) * ( PPABST(:,:,:)/XP00 ) ** (XRD/XCPD)
-!
-! Saturation over ice
-!
-ZW(:,:,:) = EXP( XALPI - XBETAI/ZT(:,:,:) - XGAMI*ALOG(ZT(:,:,:) ) )
-ZW(:,:,:) = PRVT(:,:,:)*( PPABST(:,:,:)-ZW(:,:,:) ) / ( (XMV/XMD) * ZW(:,:,:) )
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       2.     COMPUTATIONS ONLY WHERE NECESSARY : PACK
-!	        ----------------------------------------
-!
-!
-GNEGT(:,:,:) = .FALSE.
-GNEGT(IIB:IIE,IJB:IJE,IKB:IKE) = ZT(IIB:IIE,IJB:IJE,IKB:IKE)<XTT-2.0 .AND. &
-                                 ZW(IIB:IIE,IJB:IJE,IKB:IKE)>0.95 
-!
-INEGT = COUNTJV( GNEGT(:,:,:),I1(:),I2(:),I3(:))
-!
-IF (INEGT > 0) THEN
-!
-   ALLOCATE(ZRVT(INEGT)) 
-   ALLOCATE(ZRCT(INEGT)) 
-   ALLOCATE(ZRRT(INEGT)) 
-   ALLOCATE(ZRIT(INEGT)) 
-   ALLOCATE(ZRST(INEGT)) 
-   ALLOCATE(ZRGT(INEGT)) 
-!
-   ALLOCATE(ZCCT(INEGT)) 
-!
-   ALLOCATE(ZNAT(INEGT,NMOD_CCN))
-   ALLOCATE(ZIFT(INEGT,NMOD_IFN))
-   ALLOCATE(ZINT(INEGT,NMOD_IFN))
-   ALLOCATE(ZNIT(INEGT,NMOD_IMM))
-!
-   ALLOCATE(ZRHODREF(INEGT)) 
-   ALLOCATE(ZZT(INEGT)) 
-   ALLOCATE(ZPRES(INEGT)) 
-   ALLOCATE(ZEXNREF(INEGT))
-!
-   DO JL=1,INEGT
-      ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL))
-      ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL))
-      ZRRT(JL) = PRRT(I1(JL),I2(JL),I3(JL))
-      ZRIT(JL) = PRIT(I1(JL),I2(JL),I3(JL))
-      ZRST(JL) = PRST(I1(JL),I2(JL),I3(JL))
-      ZRGT(JL) = PRGT(I1(JL),I2(JL),I3(JL))
-!
-      ZCCT(JL) = PCCT(I1(JL),I2(JL),I3(JL))
-!
-      DO JMOD_CCN = 1, NMOD_CCN
-         ZNAT(JL,JMOD_CCN) = PNAT(I1(JL),I2(JL),I3(JL),JMOD_CCN)
-      ENDDO
-      DO JMOD_IFN = 1, NMOD_IFN
-         ZIFT(JL,JMOD_IFN) = PIFT(I1(JL),I2(JL),I3(JL),JMOD_IFN)
-         ZINT(JL,JMOD_IFN) = PINT(I1(JL),I2(JL),I3(JL),JMOD_IFN)
-      ENDDO
-      DO JMOD_IMM = 1, NMOD_IMM
-         ZNIT(JL,JMOD_IMM) = PNIT(I1(JL),I2(JL),I3(JL),JMOD_IMM)
-      ENDDO
-      ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL))
-      ZZT(JL)      = ZT(I1(JL),I2(JL),I3(JL))
-      ZPRES(JL)    = PPABST(I1(JL),I2(JL),I3(JL))
-      ZEXNREF(JL)  = PEXNREF(I1(JL),I2(JL),I3(JL))
-   ENDDO
-!
-! PACK : done
-! Prepare computations
-!
-   ALLOCATE( ZLSFACT    (INEGT) )
-   ALLOCATE( ZLVFACT    (INEGT) )
-   ALLOCATE( ZSI        (INEGT) )
-   ALLOCATE( ZTCELSIUS  (INEGT) )
-   ALLOCATE( ZZT_SI0_BC (INEGT) )
-   ALLOCATE( ZLBDAC     (INEGT) )
-   ALLOCATE( ZSI0       (INEGT,NSPECIE) )
-   ALLOCATE( Z_FRAC_ACT (INEGT,NSPECIE) ) ; Z_FRAC_ACT(:,:) = 0.0
-   ALLOCATE( ZSW        (INEGT) )
-   ALLOCATE( ZSI_W      (INEGT) )
-!
-   ALLOCATE( ZZW (INEGT) ) ; ZZW(:) = 0.0
-   ALLOCATE( ZZX (INEGT) ) ; ZZX(:) = 0.0
-   ALLOCATE( ZZY (INEGT) ) ; ZZY(:) = 0.0
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       3.     COMPUTE THE SATURATION OVER WATER AND ICE
-!	        -----------------------------------------
-!
-!
-   ZTCELSIUS(:) = ZZT(:)-XTT                                    ! T [°C]
-   ZZW(:)  = ZEXNREF(:)*( XCPD+XCPV*ZRVT(:)+XCL*(ZRCT(:)+ZRRT(:)) &
-        +XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) )
-   ZLSFACT(:) = (XLSTT+(XCPV-XCI)*ZTCELSIUS(:))/ZZW(:)          ! L_s/(Pi_ref*C_ph)
-   ZLVFACT(:) = (XLVTT+(XCPV-XCL)*ZTCELSIUS(:))/ZZW(:)          ! L_v/(Pi_ref*C_ph)
-!
-   ZZW(:)  = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) ) ! es_i
-   ZSI(:)  = ZRVT(:)*(ZPRES(:)-ZZW(:))/((XMV/XMD)*ZZW(:))       ! Saturation over ice
-!
-   ZZY(:)  = EXP( XALPW - XBETAW/ZZT(:) - XGAMW*ALOG(ZZT(:) ) ) ! es_w
-   ZSW(:)  = ZRVT(:)*(ZPRES(:)-ZZY(:))/((XMV/XMD)*ZZY(:))       ! Saturation over water
-!
-   ZSI_W(:)= ZZY(:)/ZZW(:)     ! Saturation over ice at water saturation: es_w/es_i
-!
-! Saturation parameters for H_X, with X={Dust/Metallic (2 modes), Black Carbon, Organic}
-!
-   ZSI0(:,1) = 1.0 + 10.0**( -1.0261 + 3.1656E-3* ZTCELSIUS(:)     &
-                                     + 5.3938E-4*(ZTCELSIUS(:)**2) &
-                                     + 8.2584E-6*(ZTCELSIUS(:)**3) ) ! with T [°C]
-   ZSI0(:,2) = ZSI0(:,1) ! DM2 = DM1
-   ZSI0(:,3) = 0.0       ! BC
-   ZZT_SI0_BC(:) = MAX( 198.0, MIN( 239.0,ZZT(:) ) )
-   ZSI0(:,3) = (-3.118E-5*ZZT_SI0_BC(:)+1.085E-2)*ZZT_SI0_BC(:)+0.5652 - XDSI0(3)
-   IF (NPHILLIPS == 8) THEN
-      ZSI0(:,4) = ZSI0(:,3) ! O = BC
-   ELSE IF (NPHILLIPS == 13) THEN
-      ZSI0(:,4) = 1.15      ! BIO
-   END IF
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       4.     COMPUTE THE ACTIVABLE FRACTION OF EACH IFN SPECIE
-!	        -------------------------------------------------
-!
-!
-! Computation of the reference activity spectrum ( ZZY = N_{IN,1,*} )
-!
-   CALL LIMA_PHILLIPS_REF_SPECTRUM(ZZT, ZSI, ZSI_W, ZZY)
-!
-! For each aerosol species (DM1, DM2, BC, O), compute the fraction that may be activated
-! Z_FRAC_ACT(INEGT,NSPECIE) = fraction of each species that may be activated
-!
-   CALL LIMA_PHILLIPS_INTEG(ZZT, ZSI, ZSI0, ZSW, ZZY, Z_FRAC_ACT)
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       5.     COMPUTE THE HETEROGENEOUS NUCLEATION OF INSOLUBLE IFN
-!	        -----------------------------------------------------
-!
-!
-!
-   DO JMOD_IFN = 1,NMOD_IFN    ! IFN modes
-      ZZX(:)=0.
-      DO JSPECIE = 1, NSPECIE  ! Each IFN mode is mixed with DM1, DM2, BC, O
-         ZZX(:)=ZZX(:)+XFRAC(JSPECIE,JMOD_IFN)*(ZIFT(:,JMOD_IFN)+ZINT(:,JMOD_IFN))* &
-                                               Z_FRAC_ACT(:,JSPECIE)
-      END DO
-! Now : ZZX(:) = number conc. of activable AP.
-! Activated AP at this time step = activable AP - already activated AP 
-      ZZX(:) = MIN( ZIFT(:,JMOD_IFN), MAX( (ZZX(:)-ZINT(:,JMOD_IFN)),0.0 ))
-      ZZW(:) = MIN( XMNU0*ZZX(:), ZRVT(:) )
-! Now : ZZX(:) = number conc. of AP activated at this time step (#/kg) from IFN mode JMOD_IFN
-! Now : ZZW(:) = mmr of ice nucleated at this time step (kg/kg) from IFN mode JMOD_IFN
-!
-! Update the concentrations and MMR
-!
-      ZW(:,:,:) = UNPACK( ZZX(:), MASK=GNEGT(:,:,:), FIELD=0. )
-      PIFT(:,:,:,JMOD_IFN) = PIFT(:,:,:,JMOD_IFN) - ZW(:,:,:)
-      PINT(:,:,:,JMOD_IFN) = PINT(:,:,:,JMOD_IFN) + ZW(:,:,:)
-!
-      P_CI_HIND(:,:,:) = P_CI_HIND(:,:,:) + ZW(:,:,:)
-      PCIT(:,:,:) = PCIT(:,:,:) + ZW(:,:,:)
-!
-      ZW(:,:,:) = UNPACK( ZZW(:), MASK=GNEGT(:,:,:), FIELD=0. )
-      P_RI_HIND(:,:,:) = P_RI_HIND(:,:,:) + ZW(:,:,:)
-      PRVT(:,:,:) = PRVT(:,:,:) - ZW(:,:,:)
-      PRIT(:,:,:) = PRIT(:,:,:) + ZW(:,:,:)
-!
-      P_TH_HIND(:,:,:) = UNPACK( ZZW(:)*ZLSFACT(:), MASK=GNEGT(:,:,:), FIELD=0. )
-      PTHT(:,:,:) = PTHT(:,:,:) + P_TH_HIND(:,:,:)
-   END DO
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       6.     COMPUTE THE HETEROGENEOUS NUCLEATION OF COATED IFN
-!	        --------------------------------------------------
-!
-!
-! Heterogeneous nucleation by immersion of the activated CCN
-! Currently, we represent coated IFN as a pure aerosol type (NIND_SPECIE)
-!
-!
-   DO JMOD_IMM = 1,NMOD_IMM  ! Coated IFN modes
-      JMOD_CCN = NINDICE_CCN_IMM(JMOD_IMM) ! Corresponding CCN mode
-      IF (JMOD_CCN .GT. 0) THEN
-!
-! OLD LIMA : Compute the appropriate mean diameter and sigma      
-!      XMDIAM_IMM = MIN( XMDIAM_IFN(NIND_SPECIE) , XR_MEAN_CCN(JMOD_CCN)*2. )
-!      XSIGMA_IMM = MIN( XSIGMA_IFN(JSPECIE) , EXP(XLOGSIG_CCN(JMOD_CCN)) )
-!
-         ZZW(:) = MIN( ZCCT(:) , ZNAT(:,JMOD_CCN) )
-         ZZX(:)=  ( ZZW(:)+ZNIT(:,JMOD_IMM) ) * Z_FRAC_ACT(:,NIND_SPECIE)
-! Now : ZZX(:) = number of activable AP.
-! Activated AP at this time step = activable AP - already activated AP 
-         ZZX(:) = MIN( ZZW(:), MAX( (ZZX(:)-ZNIT(:,JMOD_IMM)),0.0 ) )
-         ZZY(:) = MIN( XMNU0*ZZX(:) , ZRVT(:)     )
-!
-! Update the concentrations and MMR
-!
-         ZW(:,:,:) = UNPACK( ZZX(:), MASK=GNEGT(:,:,:), FIELD=0. )
-         PNIT(:,:,:,JMOD_IMM) = PNIT(:,:,:,JMOD_IMM) + ZW(:,:,:)
-         PNAT(:,:,:,JMOD_CCN) = PNAT(:,:,:,JMOD_CCN) - ZW(:,:,:)
-!
-         P_CC_HINC(:,:,:) = P_CC_HINC(:,:,:) - ZW(:,:,:) 
-         PCCT(:,:,:) = PCCT(:,:,:) - ZW(:,:,:)
-         PCIT(:,:,:) = PCIT(:,:,:) + ZW(:,:,:)
-!
-         ZW(:,:,:) = UNPACK( ZZY(:), MASK=GNEGT(:,:,:), FIELD=0. )
-         P_RC_HINC(:,:,:) = P_RC_HINC(:,:,:) - ZW(:,:,:)
-         PRCT(:,:,:) = PRCT(:,:,:) - ZW(:,:,:)
-         PRIT(:,:,:) = PRIT(:,:,:) + ZW(:,:,:)
-         PTHT(:,:,:) = PTHT(:,:,:) + UNPACK( ZZY(:)*ZLSFACT(:), MASK=GNEGT(:,:,:), FIELD=0. )
-      END IF
-   END DO
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       7.     CLEAN
-!	        -----
-!
-!
-   DEALLOCATE(ZRVT) 
-   DEALLOCATE(ZRCT) 
-   DEALLOCATE(ZRRT) 
-   DEALLOCATE(ZRIT) 
-   DEALLOCATE(ZRST) 
-   DEALLOCATE(ZRGT) 
-   DEALLOCATE(ZCCT) 
-   DEALLOCATE(ZNAT)
-   DEALLOCATE(ZIFT)
-   DEALLOCATE(ZINT)
-   DEALLOCATE(ZNIT)
-   DEALLOCATE(ZRHODREF) 
-   DEALLOCATE(ZZT) 
-   DEALLOCATE(ZPRES) 
-   DEALLOCATE(ZEXNREF)
-   DEALLOCATE(ZLSFACT)
-   DEALLOCATE(ZLVFACT)
-   DEALLOCATE(ZSI)
-   DEALLOCATE(ZTCELSIUS)
-   DEALLOCATE(ZZT_SI0_BC)
-   DEALLOCATE(ZLBDAC)
-   DEALLOCATE(ZSI0)
-   DEALLOCATE(Z_FRAC_ACT)
-   DEALLOCATE(ZSW)
-   DEALLOCATE(ZZW)
-   DEALLOCATE(ZZX)
-   DEALLOCATE(ZZY)
-   DEALLOCATE(ZSI_W)
-!
-END IF ! INEGT > 0
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_PHILLIPS_IFN_NUCLEATION
diff --git a/src/arome/micro/lima_rain_accr_snow.F90 b/src/arome/micro/lima_rain_accr_snow.F90
deleted file mode 100644
index b6c2db3d750c8bbe2ba57de7b344572e3027e8aa..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_rain_accr_snow.F90
+++ /dev/null
@@ -1,315 +0,0 @@
-!      #################################
-       MODULE MODI_LIMA_RAIN_ACCR_SNOW
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_RAIN_ACCR_SNOW (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE,                  &
-                                   PRHODREF, PT,                                            &
-                                   PRRT, PCRT, PRST, PLBDR, PLBDS, PLVFACT, PLSFACT,        &
-                                   P_TH_ACC, P_RR_ACC, P_CR_ACC, P_RS_ACC, P_RG_ACC,        &
-                                   PA_TH, PA_RR, PA_CR, PA_RS, PA_RG                        )
-!
-REAL,                 INTENT(IN)    :: PTSTEP 
-CHARACTER(LEN=*),     INTENT(IN)    :: HFMFILE 
-LOGICAL,              INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PT   ! 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCRT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLVFACT ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_ACC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_ACC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_ACC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_ACC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_ACC
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RS
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RG
-!
-END SUBROUTINE LIMA_RAIN_ACCR_SNOW
-END INTERFACE
-END MODULE MODI_LIMA_RAIN_ACCR_SNOW
-!
-!     ######################################################################
-      SUBROUTINE LIMA_RAIN_ACCR_SNOW (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE,                  &
-                                      PRHODREF, PT,                                            &
-                                      PRRT, PCRT, PRST, PLBDR, PLBDS, PLVFACT, PLSFACT,        &
-                                      P_TH_ACC, P_RR_ACC, P_CR_ACC, P_RS_ACC, P_RG_ACC,        &
-                                      PA_TH, PA_RR, PA_CR, PA_RS, PA_RG                        )
-!     ######################################################################
-!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the cold-phase homogeneous
-!!    freezing of CCN, droplets and drops (T<-35°C)
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy*   jan. 2014  add budgets
-!!      B.Vie 10/2016 Bug zero division
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_CST,              ONLY : XTT
-USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCEXVT
-USE MODD_PARAM_LIMA_COLD,  ONLY : XBS, XCXS
-USE MODD_PARAM_LIMA_MIXED, ONLY : NACCLBDAS, XACCINTP1S, XACCINTP2S,         &
-                                  NACCLBDAR, XACCINTP1R, XACCINTP2R,         &
-                                  XKER_RACCSS, XKER_RACCS, XKER_SACCRG,      &
-                                  XFRACCSS, XLBRACCS1, XLBRACCS2, XLBRACCS3, &
-                                  XFSACCRG, XLBSACCR1, XLBSACCR2, XLBSACCR3
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-REAL,                 INTENT(IN)    :: PTSTEP 
-CHARACTER(LEN=*),     INTENT(IN)    :: HFMFILE 
-LOGICAL,              INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PT   ! 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCRT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLVFACT ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_ACC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_ACC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_ACC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_ACC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_ACC
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RS
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RG
-!
-!*       0.2   Declarations of local variables :
-!
-LOGICAL, DIMENSION(SIZE(PRRT))  :: GACC
-!
-REAL,    DIMENSION(SIZE(PRRT))  :: Z1, Z2, Z3, Z4
-REAL,    DIMENSION(SIZE(PRRT))  :: ZZW1, ZZW2, ZZW3, ZZW4, ZZW5
-!
-INTEGER, DIMENSION(SIZE(PRRT))  :: IVEC1,IVEC2       ! Vectors of indices
-REAL,    DIMENSION(SIZE(PRRT))  :: ZVEC1,ZVEC2,ZVEC3 ! Work vectors
-!
-!-------------------------------------------------------------------------------
-!
-!
-P_TH_ACC(:) = 0.
-P_RR_ACC(:) = 0.
-P_CR_ACC(:) = 0.
-P_RS_ACC(:) = 0.
-P_RG_ACC(:) = 0.
-!
-ZZW1(:) = 0.
-ZZW2(:) = 0.
-ZZW3(:) = 0.
-ZZW4(:) = 0.
-ZZW5(:) = 0.
-!
-IVEC1(:) = 0
-IVEC2(:) = 0
-ZVEC1(:) = 0.
-ZVEC2(:) = 0.
-ZVEC3(:) = 0.
-!
-!*       Cloud droplet riming of the aggregates  
-!        -------------------------------------------
-!
-!
-GACC(:) = .False.
-GACC(:) = (PRRT(:)>XRTMIN(3)) .AND. (PRST(:)>XRTMIN(5)) .AND. (PT(:)<XTT) .AND. LDCOMPUTE(:)
-!
-WHERE( GACC )
-!
-!        1.3.1  select the (ZLBDAS,ZLBDAR) couplet
-!
-   ZVEC1(:) = PLBDS(:)
-   ZVEC2(:) = PLBDR(:)
-!
-!        1.3.2  find the next lower indice for the ZLBDAS and for the ZLBDAR
-!               in the geometrical set of (Lbda_s,Lbda_r) couplet use to
-!               tabulate the RACCSS-kernel
-!
-   ZVEC1(:) = MAX( 1.00001, MIN( FLOAT(NACCLBDAS)-0.00001,           &
-                         XACCINTP1S * LOG( ZVEC1(:) ) + XACCINTP2S ) )
-   IVEC1(:) = INT( ZVEC1(:) )
-   ZVEC1(:) = ZVEC1(:) - FLOAT( IVEC1(:) )
-!
-   ZVEC2(:) = MAX( 1.00001, MIN( FLOAT(NACCLBDAR)-0.00001,           &
-                         XACCINTP1R * LOG( ZVEC2(:) ) + XACCINTP2R ) )
-   IVEC2(:) = INT( ZVEC2(:) )
-   ZVEC2(:) = ZVEC2(:) - FLOAT( IVEC2(:) )
-!
-!        1.3.3  perform the bilinear interpolation of the normalized
-!               RACCSS-kernel : for small rain drops transformed into snow
-   !
-   Z1(:) = GET_XKER_RACCSS(IVEC1(:)+1,IVEC2(:)+1)
-   Z2(:) = GET_XKER_RACCSS(IVEC1(:)+1,IVEC2(:)  )
-   Z3(:) = GET_XKER_RACCSS(IVEC1(:)  ,IVEC2(:)+1)
-   Z4(:) = GET_XKER_RACCSS(IVEC1(:)  ,IVEC2(:)  )
-      ZVEC3(:) =  (   Z1(:)* ZVEC2(:)          &
-                    - Z2(:)*(ZVEC2(:) - 1.0) ) &
-                				 	     *  ZVEC1(:)    &
-                 - (  Z3(:)* ZVEC2(:)          &
-                    - Z4(:)*(ZVEC2(:) - 1.0) ) &
-  	                    			             * (ZVEC1(:) - 1.0)
-   ZZW1(:) = ZVEC3(:)
-!
-!        1.3.4b perform the bilinear interpolation of the normalized
-!               RACCS-kernel : total frozen rain drops
-!
-   Z1(:) = GET_XKER_RACCS(IVEC2(:)+1,IVEC1(:)+1)
-   Z2(:) = GET_XKER_RACCS(IVEC2(:)+1,IVEC1(:)  )
-   Z3(:) = GET_XKER_RACCS(IVEC2(:)  ,IVEC1(:)+1)
-   Z4(:) = GET_XKER_RACCS(IVEC2(:)  ,IVEC1(:)  )
-      ZVEC3(:) =  (    Z1(:)* ZVEC1(:)          &
-                    -  Z2(:)*(ZVEC1(:) - 1.0) ) &
-                                                           *  ZVEC2(:)      &
-                 - (   Z3(:)* ZVEC1(:)          &
-                    -  Z4(:)*(ZVEC1(:) - 1.0) ) &
-                                                           * (ZVEC2(:) - 1.0)
-   ZZW2(:) = ZVEC3(:)
-!
-!        1.3.5  perform the bilinear interpolation of the normalized
-!               SACCRG-kernel : snow transformed into graupel
-!
-   Z1(:) = GET_XKER_SACCRG(IVEC2(:)+1,IVEC1(:)+1)
-   Z2(:) = GET_XKER_SACCRG(IVEC2(:)+1,IVEC1(:)  )
-   Z3(:) = GET_XKER_SACCRG(IVEC2(:)  ,IVEC1(:)+1)
-   Z4(:) = GET_XKER_SACCRG(IVEC2(:)  ,IVEC1(:)  )
-      ZVEC3(:) =  (   Z1(:)* ZVEC1(:)          &
-                    - Z2(:)*(ZVEC1(:) - 1.0) ) &
-      			 	                             *  ZVEC2(:)    &
-                 - (  Z3(:)* ZVEC1(:)          &
-                    - Z4(:)*(ZVEC1(:) - 1.0) ) &
-			                                     * (ZVEC2(:) - 1.0)
-   ZZW3(:) = ZVEC3(:)
-!
-!        1.3.4  raindrop accretion on the small sized aggregates
-!      
-! BVIE manque PCRT ???????????????????????????????????
-!      ZZW4(:) =                                            & !! coef of RRACCS and RRACCS
-   ZZW4(:) = PCRT(:)                                     & !! coef of RRACCS and RRACCS
-         *  XFRACCSS *( PLBDS(:)**XCXS )*( PRHODREF(:)**(-XCEXVT-1.) ) &
-         *( XLBRACCS1/( PLBDS(:)**2 )                +                     &
-            XLBRACCS2/( PLBDS(:) * PLBDR(:)    ) +                     &
-            XLBRACCS3/(                PLBDR(:)**2 ) ) / PLBDR(:)**3
-
-!      ZRRS(:) = ZRRS(:) - ZZW1(:,4)
-!      ZRSS(:) = ZRSS(:) + ZZW1(:,4)
-!      ZTHS(:) = ZTHS(:) + ZZW1(:,4)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RRACCSS))
-!
-!      ZCRS(:) = MAX( ZCRS(:)-ZZW1(:,4)*(ZCRT(:)/ZRRT(:)),0.0 ) ! Lambda_r**3 
-!
-!        1.3.6  raindrop accretion-conversion of the large sized aggregates
-!               into graupeln
-!
-   ZZW5(:) = XFSACCRG*ZZW3(:) *                             & ! RSACCRG
-            ( PLBDS(:)**(XCXS-XBS) )*( PRHODREF(:)**(-XCEXVT-1.) ) &
-           *( XLBSACCR1/((PLBDR(:)**2)               ) +           &
-              XLBSACCR2/( PLBDR(:)    * PLBDS(:) ) +           &
-              XLBSACCR3/(                  (PLBDS(:)**2)) )
-      !
-!      P_RR_ACC(:) = - ZZW4(:) * ZZW1(:)           ! RRACCSS
-!      P_CR_ACC(:) = P_RR_ACC(:) * PCRT(:)/PRRT(:) ! Lambda_r**3 
-!      P_RS_ACC(:) = - P_RR_ACC(:) 
-      !
-!      P_RR_ACC(:) = P_RR_ACC(:) - ( ZZW2(:)-P_RS_ACC(:) )
-!      P_CR_ACC(:) = P_CR_ACC(:) - ( ZZW2(:)-P_RS_ACC(:) ) * PCRT(:)/PRRT(:) ! Lambda_r**3
-!      P_RS_ACC(:) = P_RS_ACC(:) - ZZW5(:)
-!      P_RG_ACC(:) = ( ZZW2(:)-P_RS_ACC(:) ) + ZZW5(:)
-      !
-   P_RR_ACC(:) = - ZZW4(:) *  ZZW2(:)
-   P_CR_ACC(:) = P_RR_ACC(:) * PCRT(:)/PRRT(:)
-   P_RS_ACC(:) = ZZW4(:) *  ZZW1(:) - ZZW5(:)
-   P_RG_ACC(:) = ZZW4(:) * ( ZZW2(:) - ZZW1(:) ) + ZZW5(:)
-   P_TH_ACC(:) = - P_RR_ACC(:) * (PLSFACT(:)-PLVFACT(:))
-   !
-END WHERE
-!
-!
-PA_RR(:) = PA_RR(:) + P_RR_ACC(:)
-PA_CR(:) = PA_CR(:) + P_CR_ACC(:)
-PA_RS(:) = PA_RS(:) + P_RS_ACC(:)
-PA_RG(:) = PA_RG(:) + P_RG_ACC(:)
-PA_TH(:) = PA_TH(:) + P_TH_ACC(:)
-!
-!-------------------------------------------------------------------------------
-!
-CONTAINS
-  FUNCTION GET_XKER_RACCSS(I1,I2) RESULT(RET)
-    INTEGER, DIMENSION(:) :: I1
-    INTEGER, DIMENSION(:) :: I2
-    REAL, DIMENSION(SIZE(I1)) :: RET
-    !
-    INTEGER I
-    !
-    DO I=1,SIZE(I1)
-       RET(I) = XKER_RACCSS(MAX(MIN(I1(I),SIZE(XKER_RACCSS,1)),1),MAX(MIN(I2(I),SIZE(XKER_RACCSS,2)),1))
-    END DO
-  END FUNCTION GET_XKER_RACCSS
-!
-!-------------------------------------------------------------------------------
-!
-  FUNCTION GET_XKER_RACCS(I1,I2) RESULT(RET)
-    INTEGER, DIMENSION(:) :: I1
-    INTEGER, DIMENSION(:) :: I2
-    REAL, DIMENSION(SIZE(I1)) :: RET
-    !
-    INTEGER I
-    !
-    DO I=1,SIZE(I1)
-       RET(I) = XKER_RACCS(MAX(MIN(I1(I),SIZE(XKER_RACCS,1)),1),MAX(MIN(I2(I),SIZE(XKER_RACCS,2)),1))
-    END DO
-  END FUNCTION GET_XKER_RACCS
-!
-!-------------------------------------------------------------------------------
-!
-  FUNCTION GET_XKER_SACCRG(I1,I2) RESULT(RET)
-    INTEGER, DIMENSION(:) :: I1
-    INTEGER, DIMENSION(:) :: I2
-    REAL, DIMENSION(SIZE(I1)) :: RET
-    !
-    INTEGER I
-    !
-    DO I=1,SIZE(I1)
-       RET(I) = XKER_SACCRG(MAX(MIN(I1(I),SIZE(XKER_SACCRG,1)),1),MAX(MIN(I2(I),SIZE(XKER_SACCRG,2)),1))
-    END DO
-  END FUNCTION GET_XKER_SACCRG
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_RAIN_ACCR_SNOW
diff --git a/src/arome/micro/lima_rain_evaporation.F90 b/src/arome/micro/lima_rain_evaporation.F90
deleted file mode 100644
index 8ba146e256d9544bd6b8d9b11d04d2efb9e7a9d8..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_rain_evaporation.F90
+++ /dev/null
@@ -1,161 +0,0 @@
-!      ##########################
-       MODULE MODI_LIMA_RAIN_EVAPORATION
-!      ##########################
-!
-INTERFACE
-      SUBROUTINE LIMA_RAIN_EVAPORATION (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE,     &
-                                        PRHODREF, PT, PLV, PLVFACT, PEVSAT, PRVSAT, &
-                                        PRVT, PRCT, PRRT, PLBDR,                    &
-                                        P_TH_EVAP, P_RR_EVAP,                       &
-                                        PA_RV, PA_RR, PA_TH,                        &
-                                        PEVAP3D                                     )
-!
-REAL,                 INTENT(IN)    :: PTSTEP     ! Time step
-CHARACTER(LEN=*),     INTENT(IN)    :: HFMFILE    ! Name of the output FM-file
-LOGICAL,              INTENT(IN)    :: OCLOSE_OUT !
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE  !
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF   ! Reference density
-REAL, DIMENSION(:),   INTENT(IN)    :: PT         ! Temperature
-REAL, DIMENSION(:),   INTENT(IN)    :: PLV        ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLVFACT    !
-REAL, DIMENSION(:),   INTENT(IN)    :: PEVSAT     !
-REAL, DIMENSION(:),   INTENT(IN)    :: PRVSAT     !
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRVT       ! Water vapor m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT       ! Cloud water m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT       ! Rain water m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR     ! Lambda(rain)
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_EVAP
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_EVAP
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RV
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_TH
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PEVAP3D    ! Rain evap profile
-!
-END SUBROUTINE LIMA_RAIN_EVAPORATION
-END INTERFACE
-END MODULE MODI_LIMA_RAIN_EVAPORATION
-!     #############################################################################
-      SUBROUTINE LIMA_RAIN_EVAPORATION (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE,     &
-                                        PRHODREF, PT, PLV, PLVFACT, PEVSAT, PRVSAT, &
-                                        PRVT, PRCT, PRRT, PLBDR,                    &
-                                        P_TH_EVAP, P_RR_EVAP,                       &
-                                        PA_RV, PA_RR, PA_TH,                        &
-                                        PEVAP3D                                     )
-!     #############################################################################
-!
-!!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the raindrop evaporation
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_CST,             ONLY : XRHOLW, XRV
-USE MODD_PARAM_LIMA,      ONLY : XRTMIN
-USE MODD_PARAM_LIMA_WARM, ONLY : X0EVAR, XEX0EVAR, X1EVAR, XEX2EVAR, XEX1EVAR, XTHCO, XDIVA
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-REAL,                 INTENT(IN)    :: PTSTEP     ! Time step
-CHARACTER(LEN=*),     INTENT(IN)    :: HFMFILE    ! Name of the output FM-file
-LOGICAL,              INTENT(IN)    :: OCLOSE_OUT !
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE  !
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF   ! Reference density
-REAL, DIMENSION(:),   INTENT(IN)    :: PT         ! Temperature
-REAL, DIMENSION(:),   INTENT(IN)    :: PLV        ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLVFACT    !
-REAL, DIMENSION(:),   INTENT(IN)    :: PEVSAT     !
-REAL, DIMENSION(:),   INTENT(IN)    :: PRVSAT     !
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRVT       ! Water vapor m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT       ! Cloud water m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT       ! Rain water m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR     ! Lambda(rain)
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_EVAP
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_EVAP
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RV
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_TH
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PEVAP3D    ! Rain evap profile
-!
-!*       0.1   Declarations of local variables :
-!
-! 
-LOGICAL, DIMENSION(SIZE(PRHODREF)) :: GEVAP
-REAL, DIMENSION(SIZE(PRHODREF))    :: ZZW1, ZZW2
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       1.     PREPARE COMPUTATIONS - PACK
-!   	        ---------------------------
-!
-P_TH_EVAP(:) = 0.
-P_RR_EVAP(:) = 0.
-!
-GEVAP(:) = .FALSE.
-GEVAP(:) = LDCOMPUTE(:)      .AND. &
-           PRRT(:)>XRTMIN(3) .AND. &
-           PRVT(:)<PRVSAT(:)
-!
-WHERE ( GEVAP )
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       2. compute the evaporation of rain drops    
-!   	 ----------------------------------------
-!
-!
-   ZZW1(:) = MAX((1.0 - PRVT(:)/PRVSAT(:)),0.0)  ! Subsaturation
-!
-! Compute the function G(T)
-!
-   ZZW2(:) = 1. / ( XRHOLW*((((PLV(:)/PT(:))**2)/(XTHCO*XRV)) +          & ! G
-          (XRV*PT(:))/(XDIVA*PEVSAT(:))))
-!
-! Compute the evaporation tendency
-!
-   ZZW2(:) = ZZW2(:) * ZZW1(:) * PRRT(:) *        &
-        (X0EVAR * PLBDR(:)**XEX0EVAR + X1EVAR * PRHODREF(:)**XEX2EVAR * PLBDR(:)**XEX1EVAR)
-   ZZW2(:) = MAX(ZZW2(:),0.0)
-!
-   P_RR_EVAP(:) = - ZZW2(:)
-   P_TH_EVAP(:) = P_RR_EVAP(:) * PLVFACT(:)
-   PEVAP3D(:) = - P_RR_EVAP(:)
-!
-PA_TH(:) = PA_TH(:) + P_TH_EVAP(:)
-PA_RV(:) = PA_RV(:) - P_RR_EVAP(:)
-PA_RR(:) = PA_RR(:) + P_RR_EVAP(:)
-END WHERE
-!
-!-----------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_RAIN_EVAPORATION
diff --git a/src/arome/micro/lima_rain_freezing.F90 b/src/arome/micro/lima_rain_freezing.F90
deleted file mode 100644
index c0e1bd384199fe79f966c45dc58ea22481c3e54b..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_rain_freezing.F90
+++ /dev/null
@@ -1,162 +0,0 @@
-!      #################################
-       MODULE MODI_LIMA_RAIN_FREEZING
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_RAIN_FREEZING (HFMFILE, OCLOSE_OUT, LDCOMPUTE,                        &
-                                  PRHODREF, PT, PLVFACT, PLSFACT,                        &
-                                  PRRT, PCRT, PRIT, PCIT, PLBDR,                         &
-                                  P_TH_CFRZ, P_RR_CFRZ, P_CR_CFRZ, P_RI_CFRZ, P_CI_CFRZ, &
-                                  PA_TH, PA_RR, PA_CR, PA_RI, PA_CI, PA_RG               )
-!
-CHARACTER(LEN=*),     INTENT(IN)    :: HFMFILE 
-LOGICAL,              INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF ! Reference Exner function
-REAL, DIMENSION(:),   INTENT(IN)    :: PT       !
-REAL, DIMENSION(:),   INTENT(IN)    :: PLVFACT  !
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT  !
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCRT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR   ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_CFRZ
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_CFRZ
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_CFRZ
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_CFRZ
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_CFRZ
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RG
-!
-END SUBROUTINE LIMA_RAIN_FREEZING
-END INTERFACE
-END MODULE MODI_LIMA_RAIN_FREEZING
-!
-!     ######################################################################
-      SUBROUTINE LIMA_RAIN_FREEZING (HFMFILE, OCLOSE_OUT, LDCOMPUTE,                        &
-                                     PRHODREF, PT, PLVFACT, PLSFACT,                        &
-                                     PRRT, PCRT, PRIT, PCIT, PLBDR,                         &
-                                     P_TH_CFRZ, P_RR_CFRZ, P_CR_CFRZ, P_RI_CFRZ, P_CI_CFRZ, &
-                                     PA_TH, PA_RR, PA_CR, PA_RI, PA_CI, PA_RG               )
-!     ######################################################################
-!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the cold-phase homogeneous
-!!    freezing of CCN, droplets and drops (T<-35°C)
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy*   jan. 2014  add budgets
-!!      B.Vie 10/2016 Bug zero division
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_CST,              ONLY : XTT
-USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCEXVT
-USE MODD_PARAM_LIMA_MIXED, ONLY : XICFRR, XEXICFRR, XRCFRI, XEXRCFRI
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-CHARACTER(LEN=*),     INTENT(IN)    :: HFMFILE 
-LOGICAL,              INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF ! Reference Exner function
-REAL, DIMENSION(:),   INTENT(IN)    :: PT       !
-REAL, DIMENSION(:),   INTENT(IN)    :: PLVFACT  !
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT  !
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCRT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR   ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_CFRZ
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_CFRZ
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_CFRZ
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_CFRZ
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_CFRZ
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RG
-!
-!*       0.2   Declarations of local variables :
-!
-REAL, DIMENSION(SIZE(PRRT)) :: ZW1, ZW2 ! work arrays
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       1.     PRELIMINARY COMPUTATIONS
-!	        ------------------------
-!
-!
-P_TH_CFRZ(:)=0.
-P_RR_CFRZ(:)=0.
-P_CR_CFRZ(:)=0.
-P_RI_CFRZ(:)=0.
-P_CI_CFRZ(:)=0.
-!
-ZW1(:)=0.
-ZW2(:)=0.
-!
-WHERE( (PRIT(:)>XRTMIN(4)) .AND. (PRRT(:)>XRTMIN(3)) .AND. (PT(:)>XTT) .AND. LDCOMPUTE(:) )
-!
-   ZW1(:) = XICFRR * PRIT(:) * PCRT(:)                    & ! RICFRRG
-                                     * PLBDR(:)**XEXICFRR         &
-                                     * PRHODREF(:)**(-XCEXVT-1.0)
-!
-   ZW2(:) = XRCFRI * PCIT(:) * PCRT(:)                    & ! RRCFRIG
-                                     * PLBDR(:)**XEXRCFRI         &
-!!! BVIE correction RHODREF
-!                                    * PRHODREF(:)**(-XCEXVT-2.0) 
-                                     * PRHODREF(:)**(-XCEXVT-1.0)
-!
-   P_RR_CFRZ(:) = - ZW2(:)
-   P_CR_CFRZ(:) = - ZW2(:) * (PCRT(:)/PRRT(:))
-   P_RI_CFRZ(:) = - ZW1(:)
-   P_CI_CFRZ(:) = - ZW1(:) * (PCIT(:)/PRIT(:))
-   P_TH_CFRZ(:) = - P_RR_CFRZ(:) * (PLSFACT(:)-PLVFACT(:))
-!
-END WHERE
-!
-PA_TH(:) = PA_TH(:) + P_TH_CFRZ(:)
-PA_RR(:) = PA_RR(:) + P_RR_CFRZ(:)
-PA_CR(:) = PA_CR(:) + P_CR_CFRZ(:)
-PA_RI(:) = PA_RI(:) + P_RI_CFRZ(:)
-PA_CI(:) = PA_CI(:) + P_CI_CFRZ(:)
-PA_RG(:) = PA_RG(:) - P_RR_CFRZ(:) - P_RI_CFRZ(:)
-!
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_RAIN_FREEZING
diff --git a/src/arome/micro/lima_tendencies.F90 b/src/arome/micro/lima_tendencies.F90
deleted file mode 100644
index 50b68870b0c2841a0abe1de787f21110b094a67b..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_tendencies.F90
+++ /dev/null
@@ -1,634 +0,0 @@
-!###############################
-MODULE MODI_LIMA_TENDENCIES
-!###############################
-  INTERFACE
-     SUBROUTINE LIMA_TENDENCIES (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE,                &
-                                 PEXNREF, PRHODREF, PPABST, PTHT,                       &
-                                 PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PRHT,              &
-                                 PCCT, PCRT, PCIT,                                      &
-                                 P_TH_HONC, P_RC_HONC, P_CC_HONC,                       & 
-                                 P_CC_SELF,                                             & 
-                                 P_RC_AUTO, P_CC_AUTO, P_CR_AUTO,                       & 
-                                 P_RC_ACCR, P_CC_ACCR,                                  & 
-                                 P_CR_SCBU,                                             & 
-                                 P_TH_EVAP, P_RR_EVAP,                                  & 
-                                 P_RI_CNVI, P_CI_CNVI,                                  & 
-                                 P_TH_DEPS, P_RS_DEPS,                                  & 
-                                 P_RI_CNVS, P_CI_CNVS,                                  & 
-                                 P_RI_AGGS, P_CI_AGGS,                                  & 
-                                 P_TH_DEPG, P_RG_DEPG,                                  & 
-                                 P_TH_BERFI, P_RC_BERFI,                                & 
-                                 P_TH_RIM, P_RC_RIM, P_CC_RIM, P_RS_RIM, P_RG_RIM,      & 
-                                 P_RI_HMS, P_CI_HMS, P_RS_HMS,                          & 
-                                 P_TH_ACC, P_RR_ACC, P_CR_ACC, P_RS_ACC, P_RG_ACC,      & 
-                                 P_RS_CMEL,                                             & 
-                                 P_TH_CFRZ, P_RR_CFRZ, P_CR_CFRZ, P_RI_CFRZ, P_CI_CFRZ, & 
-                                 P_TH_WETG, P_RC_WETG, P_CC_WETG, P_RR_WETG, P_CR_WETG, & 
-                                 P_RI_WETG, P_CI_WETG, P_RS_WETG, P_RG_WETG, P_RH_WETG, & 
-                                 P_TH_DRYG, P_RC_DRYG, P_CC_DRYG, P_RR_DRYG, P_CR_DRYG, & 
-                                 P_RI_DRYG, P_CI_DRYG, P_RS_DRYG, P_RG_DRYG,            & 
-                                 P_RI_HMG, P_CI_HMG, P_RG_HMG,                          & 
-                                 P_TH_GMLT, P_RR_GMLT, P_CR_GMLT,                       & 
-!!!     Z_RC_WETH, Z_CC_WETH, Z_RR_WETH, Z_CR_WETH,  &           ! wet growth of hail (WETH) : rc, Nc, rr, Nr, ri, Ni, rs, rg, rh, th
-!!!     Z_RI_WETH, Z_CI_WETH, Z_RS_WETH, Z_RG_WETH, Z_RH_WETH, & ! wet growth of hail (WETH) : rc, Nc, rr, Nr, ri, Ni, rs, rg, rh, th
-!!!     Z_RG_COHG, &                                             ! conversion of hail into graupel (COHG) : rg, rh
-!!!     Z_RR_HMLT, Z_CR_HMLT                                     ! hail melting (HMLT) : rr, Nr, rh=-rr, th
-                                 PA_TH, PA_RV, PA_RC, PA_CC, PA_RR, PA_CR,              &
-                                 PA_RI, PA_CI, PA_RS, PA_RG, PA_RH,                     &
-                                 PEVAP3D                                                )
-!
-REAL,                 INTENT(IN)    :: PTSTEP 
-CHARACTER(LEN=*),     INTENT(IN)    :: HFMFILE 
-LOGICAL,              INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PEXNREF   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF  ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PPABST    ! Pressure
-REAL, DIMENSION(:),   INTENT(IN)    :: PTHT      ! Potential temperature
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRVT      ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT      ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT      ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT      ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST      ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRGT      !
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHT      ! Mixing ratios (kg/kg)
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PCCT      !
-REAL, DIMENSION(:),   INTENT(IN)    :: PCRT      !
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT      ! Number concentrations (/kg)
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_HONC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_HONC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_HONC ! droplets homogeneous freezing (HONC) : rc, Nc, ri=-rc, Ni=-Nc, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_SELF ! self collection of droplets (SELF) : Nc
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_AUTO
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_AUTO
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_AUTO ! autoconversion of cloud droplets (AUTO) : rc, Nc, rr=-rc, Nr
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_ACCR
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_ACCR ! accretion of droplets by rain drops (ACCR) : rc, Nc, rr=-rr
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_SCBU ! self collectio break up of drops (SCBU) : Nr
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_EVAP
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_EVAP ! evaporation of rain drops (EVAP) : rr, rv=-rr
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_CNVI
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_CNVI  ! conversion snow -> ice (CNVI) : ri, Ni, rs=-ri
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_DEPS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_DEPS  ! deposition of vapor on snow (DEPS) : rv=-rs, rs, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_CNVS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_CNVS  ! conversion ice -> snow (CNVS) : ri, Ni, rs=-ri
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_AGGS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_AGGS  ! aggregation of ice on snow (AGGS) : ri, Ni, rs=-ri
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_DEPG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_DEPG  ! deposition of vapor on graupel (DEPG) : rv=-rg, rg, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_BERFI
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_BERFI ! Bergeron (BERFI) : rc, ri=-rc, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_RIM
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_RIM
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_RIM
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_RIM
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_RIM   ! cloud droplet riming (RIM) : rc, Nc, rs, rg, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_HMS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_HMS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_HMS   ! hallett mossop snow (HMS) : ri, Ni, rs
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_ACC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_ACC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_ACC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_ACC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_ACC   ! rain accretion on aggregates (ACC) : rr, Nr, rs, rg, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_CMEL  ! conversion-melting (CMEL) : rs, rg=-rs
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_CFRZ
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_CFRZ
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_CFRZ
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_CFRZ
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_CFRZ  ! rain freezing (CFRZ) : rr, Nr, ri, Ni, rg=-rr-ri, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RH_WETG ! wet growth of graupel (WETG) : rc, NC, rr, Nr, ri, Ni, rs, rg, rh, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_DRYG ! dry growth of graupel (DRYG) : rc, Nc, rr, Nr, ri, Ni, rs, rg, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_HMG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_HMG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_HMG  ! hallett mossop graupel (HMG) : ri, Ni, rg
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_GMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_GMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_GMLT ! graupel melting (GMLT) : rr, Nr, rg=-rr, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RV
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RS
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RG
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RH
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PEVAP3D
-!
-     END SUBROUTINE LIMA_TENDENCIES
-  END INTERFACE
-END MODULE MODI_LIMA_TENDENCIES
-!#####################################################################
-!
-!#####################################################################
-SUBROUTINE LIMA_TENDENCIES (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE,                &
-                            PEXNREF, PRHODREF, PPABST, PTHT,                       &
-                            PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PRHT,              &
-                            PCCT, PCRT, PCIT,                                      &
-                            P_TH_HONC, P_RC_HONC, P_CC_HONC,                       & 
-                            P_CC_SELF,                                             & 
-                            P_RC_AUTO, P_CC_AUTO, P_CR_AUTO,                       & 
-                            P_RC_ACCR, P_CC_ACCR,                                  & 
-                            P_CR_SCBU,                                             & 
-                            P_TH_EVAP, P_RR_EVAP,                                  & 
-                            P_RI_CNVI, P_CI_CNVI,                                  & 
-                            P_TH_DEPS, P_RS_DEPS,                                  & 
-                            P_RI_CNVS, P_CI_CNVS,                                  & 
-                            P_RI_AGGS, P_CI_AGGS,                                  & 
-                            P_TH_DEPG, P_RG_DEPG,                                  & 
-                            P_TH_BERFI, P_RC_BERFI,                                & 
-                            P_TH_RIM, P_RC_RIM, P_CC_RIM, P_RS_RIM, P_RG_RIM,      & 
-                            P_RI_HMS, P_CI_HMS, P_RS_HMS,                          & 
-                            P_TH_ACC, P_RR_ACC, P_CR_ACC, P_RS_ACC, P_RG_ACC,      & 
-                            P_RS_CMEL,                                             & 
-                            P_TH_CFRZ, P_RR_CFRZ, P_CR_CFRZ, P_RI_CFRZ, P_CI_CFRZ, & 
-                            P_TH_WETG, P_RC_WETG, P_CC_WETG, P_RR_WETG, P_CR_WETG, & 
-                            P_RI_WETG, P_CI_WETG, P_RS_WETG, P_RG_WETG, P_RH_WETG, & 
-                            P_TH_DRYG, P_RC_DRYG, P_CC_DRYG, P_RR_DRYG, P_CR_DRYG, & 
-                            P_RI_DRYG, P_CI_DRYG, P_RS_DRYG, P_RG_DRYG,            & 
-                            P_RI_HMG, P_CI_HMG, P_RG_HMG,                          & 
-                            P_TH_GMLT, P_RR_GMLT, P_CR_GMLT,                       & 
-!!!     Z_RC_WETH, Z_CC_WETH, Z_RR_WETH, Z_CR_WETH,  &           ! wet growth of hail (WETH) : rc, Nc, rr, Nr, ri, Ni, rs, rg, rh, th
-!!!     Z_RI_WETH, Z_CI_WETH, Z_RS_WETH, Z_RG_WETH, Z_RH_WETH, & ! wet growth of hail (WETH) : rc, Nc, rr, Nr, ri, Ni, rs, rg, rh, th
-!!!     Z_RG_COHG, &                                             ! conversion of hail into graupel (COHG) : rg, rh
-!!!     Z_RR_HMLT, Z_CR_HMLT                                     ! hail melting (HMLT) : rr, Nr, rh=-rr, th
-                            PA_TH, PA_RV, PA_RC, PA_CC, PA_RR, PA_CR,              &
-                            PA_RI, PA_CI, PA_RS, PA_RG, PA_RH,                     &
-                            PEVAP3D                                                )
-!     ######################################################################
-!!
-!!    PURPOSE
-!!    -------
-!!    AUTHOR
-!!    ------
-!!    MODIFICATIONS
-!!    -------------
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_CST,              ONLY : XP00, XRD, XRV, XMD, XMV, XCPD, XCPV, XCL, XCI, XLVTT, XLSTT, XTT, &
-                                  XALPW, XBETAW, XGAMW, XALPI, XBETAI, XGAMI
-USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCTMIN,                                                    &
-                                  LCOLD_LIMA, LNUCL_LIMA, LSNOW_LIMA, LHAIL_LIMA, LWARM_LIMA, LACTI_LIMA, LRAIN_LIMA
-USE MODD_PARAM_LIMA_WARM,  ONLY : XLBC, XLBEXC, XLBR, XLBEXR
-USE MODD_PARAM_LIMA_MIXED, ONLY : XLBG, XLBEXG, XLBH, XLBEXH
-USE MODD_PARAM_LIMA_COLD,  ONLY : XSCFAC, XLBI, XLBEXI, XLBS, XLBEXS
-!
-USE MODI_LIMA_DROPLETS_HOM_FREEZING
-USE MODI_LIMA_DROPLETS_SELF_COLLECTION
-USE MODI_LIMA_DROPLETS_AUTOCONVERSION
-USE MODI_LIMA_DROPLETS_ACCRETION
-USE MODI_LIMA_DROPS_SELF_COLLECTION
-USE MODI_LIMA_RAIN_EVAPORATION
-USE MODI_LIMA_ICE_SNOW_DEPOSITION
-USE MODI_LIMA_ICE_AGGREGATION_SNOW
-USE MODI_LIMA_GRAUPEL_DEPOSITION
-USE MODI_LIMA_BERGERON
-USE MODI_LIMA_DROPLETS_RIMING_SNOW
-USE MODI_LIMA_RAIN_ACCR_SNOW
-USE MODI_LIMA_CONVERSION_MELTING_SNOW
-USE MODI_LIMA_RAIN_FREEZING
-USE MODI_LIMA_GRAUPEL
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-REAL,                 INTENT(IN)    :: PTSTEP 
-CHARACTER(LEN=*),     INTENT(IN)    :: HFMFILE 
-LOGICAL,              INTENT(IN)    :: OCLOSE_OUT 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PEXNREF   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF  ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PPABST    ! Pressure
-REAL, DIMENSION(:),   INTENT(IN)    :: PTHT      ! Potential temperature
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRVT      ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT      ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT      ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT      ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST      ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRGT      !
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHT      ! Mixing ratios (kg/kg)
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PCCT      !
-REAL, DIMENSION(:),   INTENT(IN)    :: PCRT      !
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT      ! Number concentrations (/kg)
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_HONC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_HONC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_HONC ! droplets homogeneous freezing (HONC) : rc, Nc, ri=-rc, Ni=-Nc, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_SELF ! self collection of droplets (SELF) : Nc
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_AUTO
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_AUTO
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_AUTO ! autoconversion of cloud droplets (AUTO) : rc, Nc, rr=-rc, Nr
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_ACCR
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_ACCR ! accretion of droplets by rain drops (ACCR) : rc, Nc, rr=-rr
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_SCBU ! self collectio break up of drops (SCBU) : Nr
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_EVAP
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_EVAP ! evaporation of rain drops (EVAP) : rr, rv=-rr
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_CNVI
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_CNVI  ! conversion snow -> ice (CNVI) : ri, Ni, rs=-ri
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_DEPS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_DEPS  ! deposition of vapor on snow (DEPS) : rv=-rs, rs, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_CNVS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_CNVS  ! conversion ice -> snow (CNVS) : ri, Ni, rs=-ri
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_AGGS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_AGGS  ! aggregation of ice on snow (AGGS) : ri, Ni, rs=-ri
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_DEPG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_DEPG  ! deposition of vapor on graupel (DEPG) : rv=-rg, rg, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_BERFI
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_BERFI ! Bergeron (BERFI) : rc, ri=-rc, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_RIM
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_RIM
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_RIM
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_RIM
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_RIM   ! cloud droplet riming (RIM) : rc, Nc, rs, rg, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_HMS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_HMS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_HMS   ! hallett mossop snow (HMS) : ri, Ni, rs
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_ACC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_ACC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_ACC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_ACC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_ACC   ! rain accretion on aggregates (ACC) : rr, Nr, rs, rg, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_CMEL  ! conversion-melting (CMEL) : rs, rg=-rs
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_CFRZ
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_CFRZ
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_CFRZ
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_CFRZ
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_CFRZ  ! rain freezing (CFRZ) : rr, Nr, ri, Ni, rg=-rr-ri, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RH_WETG ! wet growth of graupel (WETG) : rc, NC, rr, Nr, ri, Ni, rs, rg, rh, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_DRYG ! dry growth of graupel (DRYG) : rc, Nc, rr, Nr, ri, Ni, rs, rg, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_HMG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_HMG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_HMG  ! hallett mossop graupel (HMG) : ri, Ni, rg
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_GMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_GMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_GMLT ! graupel melting (GMLT) : rr, Nr, rg=-rr, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RV
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RS
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RG
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RH
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PEVAP3D
-!
-!*       0.2   Declarations of local variables :
-!
-REAL,    DIMENSION(SIZE(PRCT))  :: ZT
-
-REAL,    DIMENSION(SIZE(PRCT))  :: ZLBDC
-REAL,    DIMENSION(SIZE(PRCT))  :: ZLBDC3
-REAL,    DIMENSION(SIZE(PRCT))  :: ZLBDR
-REAL,    DIMENSION(SIZE(PRCT))  :: ZLBDR3
-REAL,    DIMENSION(SIZE(PRCT))  :: ZLBDI
-REAL,    DIMENSION(SIZE(PRCT))  :: ZLBDS
-REAL,    DIMENSION(SIZE(PRCT))  :: ZLBDG
-REAL,    DIMENSION(SIZE(PRCT))  :: ZLBDH
-
-REAL,    DIMENSION(SIZE(PRCT))  :: ZAI
-REAL,    DIMENSION(SIZE(PRCT))  :: ZKA
-REAL,    DIMENSION(SIZE(PRCT))  :: ZDV
-REAL,    DIMENSION(SIZE(PRCT))  :: ZCJ
-
-REAL,    DIMENSION(SIZE(PRCT))  :: ZEPS
-REAL,    DIMENSION(SIZE(PRCT))  :: ZEVSAT
-REAL,    DIMENSION(SIZE(PRCT))  :: ZEISAT
-REAL,    DIMENSION(SIZE(PRCT))  :: ZRVSAT
-REAL,    DIMENSION(SIZE(PRCT))  :: ZRISAT
-!
-REAL,    DIMENSION(SIZE(PRCT))  :: ZSSI
-REAL,    DIMENSION(SIZE(PRCT))  :: ZSSIW
-
-REAL,    DIMENSION(SIZE(PRCT))  :: ZLV
-REAL,    DIMENSION(SIZE(PRCT))  :: ZLS
-REAL,    DIMENSION(SIZE(PRCT))  :: ZLVFACT
-REAL,    DIMENSION(SIZE(PRCT))  :: ZLSFACT
-!
-REAL,    DIMENSION(SIZE(PRCT))  :: ZW
-!
-!-------------------------------------------------------------------------------
-! Pre-compute quantities
-!
-WHERE (LDCOMPUTE(:))
-   ZT(:) = PTHT(:) * ( PPABST(:)/XP00 ) ** (XRD/XCPD)
-!
-   ZW(:) = PEXNREF(:)*( XCPD &
-                               +XCPV*PRVT(:) &
-                               +XCL*(PRCT(:)+PRRT(:)) &
-                               +XCI*(PRIT(:)+PRST(:)+PRGT(:)+PRHT(:)) )
-!
-   ZLV(:) = XLVTT + (XCPV-XCL)*(ZT(:)-XTT)
-   ZLVFACT(:) = ZLV(:)/ZW(:)               ! L_v/(Pi_ref*C_ph)
-   ZLS(:) = XLSTT + (XCPV-XCI)*(ZT(:)-XTT)
-   ZLSFACT(:) = ZLS(:)/ZW(:)               ! L_s/(Pi_ref*C_ph)
-!
-   ZEVSAT(:)  = EXP( XALPW - XBETAW/ZT(:) - XGAMW*ALOG(ZT(:) ) )
-   ZEISAT(:)  = EXP( XALPI - XBETAI/ZT(:) - XGAMI*ALOG(ZT(:) ) )
-   !
-   ZEPS= XMV / XMD
-   ZRVSAT(:) = ZEPS * ZEVSAT(:) / (PPABST(:) - ZEVSAT(:))
-   ZRISAT(:) = ZEPS * ZEISAT(:) / (PPABST(:) - ZEISAT(:))
-   !
-   ZSSI(:)  = PRVT(:)/ZRISAT(:) - 1.0             ! Si  =  rv/rsi - 1
-   ZSSIW(:) = ZRVSAT(:)/ZRISAT(:) - 1.0 ! Siw = rsw/rsi - 1
-!
-   ZKA(:) = 2.38E-2 + 0.0071E-2 * ( ZT(:) - XTT )
-!
-   ZDV(:) = 0.211E-4 * (ZT(:)/XTT)**1.94 * (XP00/PPABST(:))
-!
-   ZAI(:) =   ( XLSTT + (XCPV-XCI)*(ZT(:)-XTT) )**2 / (ZKA(:)*XRV*ZT(:)**2) &
-                + ( XRV*ZT(:) ) / (ZDV(:)*ZEISAT(:))
-!
-   ZCJ(:) = XSCFAC * PRHODREF(:)**0.3 / SQRT( 1.718E-5+0.0049E-5*(ZT(:)-XTT) )
-!
-END WHERE
-!
-!
-ZLBDC(:)  = 1.E10
-ZLBDC3(:) = 1.E30
-WHERE (PRCT(:)>XRTMIN(2) .AND. PCCT(:)>XCTMIN(2) .AND. LDCOMPUTE(:))
-   ZLBDC3(:) = XLBC*PCCT(:) / PRCT(:)
-   ZLBDC(:)  = ZLBDC3(:)**XLBEXC
-END WHERE
-ZLBDR(:)  = 1.E10
-ZLBDR3(:) = 1.E30
-WHERE (PRRT(:)>XRTMIN(3) .AND. PCRT(:)>XCTMIN(3) .AND. LDCOMPUTE(:))
-   ZLBDR3(:) = XLBR*PCRT(:) / PRRT(:)
-   ZLBDR(:)  = ZLBDR3(:)**XLBEXR
-END WHERE
-ZLBDI(:)  = 1.E10
-WHERE (PRIT(:)>XRTMIN(4) .AND. PCIT(:)>XCTMIN(4) .AND. LDCOMPUTE(:))
-   ZLBDI(:) = ( XLBI*PCIT(:) / PRIT(:) )**XLBEXI
-END WHERE
-ZLBDS(:)  = 1.E10
-WHERE (PRST(:)>XRTMIN(5) .AND. LDCOMPUTE(:) )
-   ZLBDS(:) = XLBS*( PRHODREF(:)*PRST(:) )**XLBEXS
-END WHERE
-ZLBDG(:)  = 1.E10
-WHERE (PRGT(:)>XRTMIN(6) .AND. LDCOMPUTE(:) )
-   ZLBDG(:) = XLBG*( PRHODREF(:)*PRGT(:) )**XLBEXG
-END WHERE
-ZLBDH(:)  = 1.E10
-WHERE (PRHT(:)>XRTMIN(7) .AND. LDCOMPUTE(:) )
-   ZLBDH(:) = XLBH*( PRHODREF(:)*PRHT(:) )**XLBEXH
-END WHERE
-!
-!-------------------------------------------------------------------------------
-! Call microphysical processes   
-!
-IF (LCOLD_LIMA .AND. LWARM_LIMA) THEN
-   CALL LIMA_DROPLETS_HOM_FREEZING (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE,    &
-                                    ZT, ZLVFACT, ZLSFACT,                      &
-                                    PRCT, PCCT, ZLBDC,                         &
-                                    P_TH_HONC, P_RC_HONC, P_CC_HONC,           &
-                                    PA_TH, PA_RC, PA_CC, PA_RI, PA_CI          )
-END IF
-!
-IF (LWARM_LIMA) THEN
-   CALL LIMA_DROPLETS_SELF_COLLECTION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, &
-                                       PRHODREF,                       &
-                                       PCCT, ZLBDC3,                   &
-                                       P_CC_SELF,                      &
-                                       PA_CC                           )
-END IF
-!
-IF (LWARM_LIMA .AND. LRAIN_LIMA) THEN
-   CALL LIMA_DROPLETS_AUTOCONVERSION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, &
-                                      PRHODREF,                       &
-                                      PRCT, ZLBDC, ZLBDR,             &
-                                      P_RC_AUTO, P_CC_AUTO, P_CR_AUTO,&
-                                      PA_RC, PA_CC, PA_RR, PA_CR      )
-END IF
-!
-IF (LWARM_LIMA .AND. LRAIN_LIMA) THEN
-   CALL LIMA_DROPLETS_ACCRETION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, &
-                                 PRHODREF,                       &
-                                 PRCT, PRRT, PCCT, PCRT,         &
-                                 ZLBDC, ZLBDC3, ZLBDR, ZLBDR3,   &
-                                 P_RC_ACCR, P_CC_ACCR,           &
-                                 PA_RC, PA_CC, PA_RR             )
-END IF
-!
-IF (LWARM_LIMA .AND. LRAIN_LIMA) THEN 
-   CALL LIMA_DROPS_SELF_COLLECTION (HFMFILE, OCLOSE_OUT, LDCOMPUTE, &
-                                    PRHODREF,                       &
-                                    PCRT, ZLBDR, ZLBDR3,            &
-                                    P_CR_SCBU,                      &
-                                    PA_CR                           )
-END IF
-!
-IF (LWARM_LIMA .AND. LRAIN_LIMA) THEN
-   CALL LIMA_RAIN_EVAPORATION (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE,     &
-                               PRHODREF, ZT, ZLV, ZLVFACT, ZEVSAT, ZRVSAT, &
-                               PRVT, PRCT, PRRT, ZLBDR,                    &
-                               P_TH_EVAP, P_RR_EVAP,                       &
-                               PA_RV, PA_RR, PA_TH,                        &
-                               PEVAP3D                                     )
-END IF
-!
-IF (LCOLD_LIMA .AND. LSNOW_LIMA) THEN
-   !
-   ! Includes vapour deposition on snow, ice -> snow and snow -> ice exchanges
-   !
-   CALL LIMA_ICE_SNOW_DEPOSITION (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE,   &
-                                  PRHODREF, ZSSI, ZAI, ZCJ, ZLSFACT,        &
-                                  PRIT, PRST, PCIT, ZLBDI, ZLBDS,           &
-                                  P_RI_CNVI, P_CI_CNVI,                     &
-                                  P_TH_DEPS, P_RS_DEPS,                     &
-                                  P_RI_CNVS, P_CI_CNVS,                     &
-                                  PA_TH, PA_RV, PA_RI, PA_CI, PA_RS         )
-END IF
-!
-IF (LCOLD_LIMA .AND. LSNOW_LIMA) THEN
-   CALL LIMA_ICE_AGGREGATION_SNOW (HFMFILE, OCLOSE_OUT, LDCOMPUTE, &
-                                   ZT,                             &
-                                   PRIT, PRST, PCIT, ZLBDI, ZLBDS, &
-                                   P_RI_AGGS, P_CI_AGGS,           &
-                                   PA_RI, PA_CI, PA_RS             )
-END IF
-!
-IF (LWARM_LIMA .AND. LCOLD_LIMA) THEN
-   CALL LIMA_GRAUPEL_DEPOSITION (HFMFILE, OCLOSE_OUT, LDCOMPUTE,       &
-                                 PRGT, ZSSI, ZLBDG, ZAI, ZCJ, ZLSFACT, &
-                                 P_TH_DEPG, P_RG_DEPG,                 &
-                                 PA_TH, PA_RV, PA_RG                   )
-END IF
-!
-IF (LWARM_LIMA .AND. LCOLD_LIMA) THEN
-   CALL LIMA_BERGERON (HFMFILE, OCLOSE_OUT, LDCOMPUTE,    &
-                       PRCT, PRIT, PCIT, ZLBDI,           &
-                       ZSSIW, ZAI, ZCJ, ZLVFACT, ZLSFACT, &
-                       P_TH_BERFI, P_RC_BERFI,            &
-                       PA_TH, PA_RC, PA_RI                )
-END IF
-!
-IF (LWARM_LIMA .AND. LCOLD_LIMA .AND. LSNOW_LIMA) THEN
-     !
-     ! Graupel production as tendency (or should be tendency + instant to stick to the previous version ?)
-     ! Includes the Hallett Mossop process for riming of droplets by snow (HMS)
-     !
-   CALL LIMA_DROPLETS_RIMING_SNOW (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE,                  &
-                                   PRHODREF, ZT,                                            &
-                                   PRCT, PCCT, PRST, ZLBDC, ZLBDS, ZLVFACT, ZLSFACT,        &
-                                   P_TH_RIM, P_RC_RIM, P_CC_RIM, P_RS_RIM, P_RG_RIM,        &
-                                   P_RI_HMS, P_CI_HMS, P_RS_HMS,                            &
-                                   PA_TH, PA_RC, PA_CC, PA_RI, PA_CI, PA_RS, PA_RG          )
-END IF
-!
-IF (LWARM_LIMA .AND. LRAIN_LIMA .AND. LCOLD_LIMA .AND. LSNOW_LIMA) THEN
-   CALL LIMA_RAIN_ACCR_SNOW (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE,                  &
-                             PRHODREF, ZT,                                            &
-                             PRRT, PCRT, PRST, ZLBDR, ZLBDS, ZLVFACT, ZLSFACT,        &
-                             P_TH_ACC, P_RR_ACC, P_CR_ACC, P_RS_ACC, P_RG_ACC,        &
-                             PA_TH, PA_RR, PA_CR, PA_RS, PA_RG                        )
-END IF
-!
-IF (LWARM_LIMA .AND. LCOLD_LIMA .AND. LSNOW_LIMA) THEN
-   !
-   ! Conversion melting of snow should account for collected droplets and drops where T>0C, but does not !
-   ! Some thermodynamical computations inside, to externalize ?
-   !
-   CALL LIMA_CONVERSION_MELTING_SNOW (HFMFILE, OCLOSE_OUT, LDCOMPUTE,      &
-                                      PRHODREF, PPABST, ZT, ZKA, ZDV, ZCJ, &
-                                      PRVT, PRST, ZLBDS,                   &
-                                      P_RS_CMEL,                           &
-                                      PA_RS, PA_RG                         )
-END IF
-!
-IF (LWARM_LIMA .AND. LRAIN_LIMA .AND. LCOLD_LIMA ) THEN
-   CALL LIMA_RAIN_FREEZING (HFMFILE, OCLOSE_OUT, LDCOMPUTE,                        &
-                            PRHODREF, ZT, ZLVFACT, ZLSFACT,                        &
-                            PRRT, PCRT, PRIT, PCIT, ZLBDR,                         &
-                            P_TH_CFRZ, P_RR_CFRZ, P_CR_CFRZ, P_RI_CFRZ, P_CI_CFRZ, &
-                            PA_TH, PA_RR, PA_CR, PA_RI, PA_CI, PA_RG               )
-END IF
-!
-IF (LWARM_LIMA .AND. LCOLD_LIMA) THEN
-     !
-     ! Melting of graupel should account for collected droplets and drops where T>0C, but does not !
-     ! Collection and water shedding should also happen where T>0C, but do not !
-     ! Hail production as tendency (should be instant to stick to the previous version ?)
-     ! Includes Hallett-Mossop  process for riming of droplets by graupel (HMG)
-     ! Some thermodynamical computations inside, to externalize ?
-     !
-   CALL LIMA_GRAUPEL (PTSTEP, HFMFILE, OCLOSE_OUT, LDCOMPUTE,                &
-                      PRHODREF, PPABST, ZT, ZKA, ZDV, ZCJ,                   &
-                      PRVT, PRCT, PRRT, PRIT, PRST, PRGT,                    &
-                      PCCT, PCRT, PCIT,                                      &
-                      ZLBDC, ZLBDR, ZLBDS, ZLBDG,                            &
-                      ZLVFACT, ZLSFACT,                                      &
-                      P_TH_WETG, P_RC_WETG, P_CC_WETG, P_RR_WETG, P_CR_WETG, &
-                      P_RI_WETG, P_CI_WETG, P_RS_WETG, P_RG_WETG, P_RH_WETG, &
-                      P_TH_DRYG, P_RC_DRYG, P_CC_DRYG, P_RR_DRYG, P_CR_DRYG, &
-                      P_RI_DRYG, P_CI_DRYG, P_RS_DRYG, P_RG_DRYG,            &
-                      P_RI_HMG, P_CI_HMG, P_RG_HMG,                          &
-                      P_TH_GMLT, P_RR_GMLT, P_CR_GMLT,                       &
-                      PA_TH, PA_RC, PA_CC, PA_RR, PA_CR,                     &
-                      PA_RI, PA_CI, PA_RS, PA_RG, PA_RH                      )
-END IF
-!
-IF (LWARM_LIMA .AND. LCOLD_LIMA .AND. LHAIL_LIMA) THEN
-!     CALL LIMA_HAIL_GROWTH
-
-!     CALL LIMA_HAIL_CONVERSION
-
-!     CALL LIMA_HAIL_MELTING
-END IF
-   !  
-END SUBROUTINE LIMA_TENDENCIES
diff --git a/src/arome/micro/lima_warm.F90 b/src/arome/micro/lima_warm.F90
deleted file mode 100644
index bcec122552a41bac0f997294e159a62349e92f1a..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_warm.F90
+++ /dev/null
@@ -1,459 +0,0 @@
-!      #####################
-       MODULE MODI_LIMA_WARM
-!      #####################
-!
-INTERFACE
-      SUBROUTINE LIMA_WARM (OACTIT, OSEDC, ORAIN, KSPLITR, PTSTEP, KMI, &
-                            HFMFILE, HLUOUT, OCLOSE_OUT, KRR, PZZ, PRHODJ,     &
-                            PRHODREF, PEXNREF, PW_NU, PPABSM, PPABST,          &
-                            PTHM, PRCM,                                   &
-                            PTHT, PRT, PSVT,                                   &
-                            PTHS, PRS, PSVS,                                   &
-                            PINPRC, PINPRR, PINPRR3D, PEVAP3D, &
-                            YDDDH, YDLDDH, YDMDDH      )
-
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-LOGICAL,                  INTENT(IN)    :: OACTIT     ! Switch to activate the
-                                                      ! activation by radiative
-                                                      ! tendency
-LOGICAL,                  INTENT(IN)    :: OSEDC      ! switch to activate the 
-                                                      ! cloud droplet sedimentation
-LOGICAL,                  INTENT(IN)    :: ORAIN      ! switch to activate the 
-                                                      ! rain formation by coalescence
-INTEGER,                  INTENT(IN)    :: KSPLITR    ! Number of small time step 
-                                                      ! for sedimendation
-REAL,                     INTENT(IN)    :: PTSTEP     ! Double Time step
-                                                      ! (single if cold start)
-INTEGER,                  INTENT(IN)    :: KMI        ! Model index 
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE    ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)    :: HLUOUT     ! Output-listing name for
-                                                      ! model n
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                      ! the tput FM fileoutp
-INTEGER,                  INTENT(IN)    :: KRR        ! Number of moist variables
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ        ! Height (z)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ     ! Dry density * Jacobian
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF   ! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF    ! Reference Exner function
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PW_NU      ! updraft velocity used for
-                                                      ! the nucleation param.
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABSM     ! abs. pressure at time t-dt
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST     ! abs. pressure at time t
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHM       ! Theta at time t-dt
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCM       ! Cloud water m.r. at t-dt
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT       ! Theta at time t
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT        ! m.r. at t 
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT       ! Concentrations at t 
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS       ! Theta source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS        ! m.r. source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS       ! Concentrations source
-!
-!
-!
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRC     ! Cloud instant precip
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRR     ! Rain instant precip
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PINPRR3D   ! Rain inst precip 3D
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PEVAP3D    ! Rain evap profile
-!
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-!
-END SUBROUTINE LIMA_WARM
-END INTERFACE
-END MODULE MODI_LIMA_WARM
-!     #####################################################################
-      SUBROUTINE LIMA_WARM (OACTIT, OSEDC, ORAIN, KSPLITR, PTSTEP, KMI, &
-                            HFMFILE, HLUOUT, OCLOSE_OUT, KRR, PZZ, PRHODJ,     &
-                            PRHODREF, PEXNREF, PW_NU, PPABSM, PPABST,          &
-                            PTHM, PRCM,                                  &
-                            PTHT, PRT, PSVT,                                   &
-                            PTHS, PRS, PSVS,                                   &
-                            PINPRC, PINPRR, PINPRR3D, PEVAP3D, &
-                            YDDDH, YDLDDH, YDMDDH       )
-!     #####################################################################
-!
-!!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the warm microphysical 
-!!    sources: nucleation, sedimentation, autoconversion, accretion,  
-!!    self-collection and vaporisation which are parameterized according  
-!!    to Cohard and Pinty, QJRMS, 2000
-!!
-!!
-!!**  METHOD
-!!    ------
-!!      The activation of CCN is checked for quasi-saturated air parcels 
-!!    to update the cloud droplet number concentration. Then assuming a 
-!!    generalized gamma distribution law for the cloud droplets and the 
-!!    raindrops, the zeroth and third order moments tendencies are evaluated
-!!    for all the coalescence terms by integrating the Stochastic Collection 
-!!    Equation. As autoconversion is a process that cannot be resolved 
-!!    analytically, the Berry-Reinhardt parameterisation is employed with
-!!    modifications to initiate the raindrop spectrum mode. The integration
-!!    of the raindrop evaporation below clouds is straightforward.
-!!
-!!      The sedimentation rates are computed with a time spliting technique: 
-!!    an upstream scheme, written as a difference of non-advective fluxes. 
-!!    This source term is added to the next coming time step (split-implicit 
-!!    process).
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!      Cohard, J.-M. and J.-P. Pinty, 2000: A comprehensive two-moment warm 
-!!      microphysical bulk scheme. 
-!!        Part I: Description and tests
-!!        Part II: 2D experiments with a non-hydrostatic model
-!!      Accepted for publication in Quart. J. Roy. Meteor. Soc. 
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy *  jan. 2014   add budgets
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE YOMLUN   , ONLY : NULOUT
-!
-USE MODD_PARAMETERS
-USE MODD_CST
-USE MODD_CONF
-USE MODD_PARAM_LIMA
-USE MODD_PARAM_LIMA_WARM
-USE MODD_NSV
-!
-!
-USE MODD_BUDGET
-USE MODE_BUDGET, ONLY: BUDGET_DDH
-!
-USE MODI_LIMA_WARM_SEDIMENTATION
-USE MODI_LIMA_WARM_NUCL
-USE MODI_LIMA_WARM_COAL
-USE MODI_LIMA_WARM_EVAP
-!
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-LOGICAL,                  INTENT(IN)    :: OACTIT     ! Switch to activate the
-                                                      ! activation by radiative
-                                                      ! tendency
-LOGICAL,                  INTENT(IN)    :: OSEDC      ! switch to activate the 
-                                                      ! cloud droplet sedimentation
-LOGICAL,                  INTENT(IN)    :: ORAIN      ! switch to activate the 
-                                                      ! rain formation by coalescence
-INTEGER,                  INTENT(IN)    :: KSPLITR    ! Number of small time step 
-                                                      ! for sedimendation
-REAL,                     INTENT(IN)    :: PTSTEP     ! Double Time step
-                                                      ! (single if cold start)
-INTEGER,                  INTENT(IN)    :: KMI        ! Model index 
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE    ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)    :: HLUOUT     ! Output-listing name for
-                                                      ! model n
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                      ! the tput FM fileoutp
-INTEGER,                  INTENT(IN)    :: KRR        ! Number of moist variables
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ        ! Height (z)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ     ! Dry density * Jacobian
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF   ! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF    ! Reference Exner function
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PW_NU      ! updraft velocity used for
-                                                      ! the nucleation param.
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABSM     ! abs. pressure at time t-dt
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST     ! abs. pressure at time t
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHM       ! Theta at time t-dt
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCM       ! Cloud water m.r. at t-dt
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT       ! Theta at time t
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT        ! m.r. at t 
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT       ! Concentrations at t 
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS       ! Theta source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS        ! m.r. source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS       ! Concentrations source
-!
-!
-!
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRC     ! Cloud instant precip
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRR     ! Rain instant precip
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PINPRR3D   ! Rain inst precip 3D
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PEVAP3D    ! Rain evap profile
-!
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-!
-!*       0.2   Declarations of local variables :
-!
-REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3))   &
-                                    :: PRVT,    & ! Water vapor m.r. at t 
-                                       PRCT,    & ! Cloud water m.r. at t 
-                                       PRRT,    & ! Rain water m.r. at t 
-                                       !
-                                       PRVS,    & ! Water vapor m.r. source
-                                       PRCS,    & ! Cloud water m.r. source
-                                       PRRS,    & ! Rain water m.r. source
-                                       !
-                                       PCCT,    & ! Cloud water C. at t
-                                       PCRT,    & ! Rain water C. at t
-                                       !
-                                       PCCS,    & ! Cloud water C. source
-                                       PCRS       ! Rain water C. source
-!
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: PNFS     ! CCN C. available source
-                                                  !used as Free ice nuclei for
-                                                  !HOMOGENEOUS nucleation of haze
-REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: PNAS     ! Cloud  C. nuclei C. source
-                                                  !used as Free ice nuclei for
-                                                  !IMMERSION freezing
-!
-!
-REAL,    DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3))   &
-                                  :: ZT, ZTM
-REAL,    DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3))   &
-                                  :: ZWLBDR,ZWLBDR3,ZWLBDC,ZWLBDC3
-INTEGER :: JL
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       0.     3D MICROPHYSCAL VARIABLES
-!	        -------------------------
-!
-!
-! Prepare 3D water mixing ratios
-PRVT(:,:,:) = PRT(:,:,:,1)
-PRVS(:,:,:) = PRS(:,:,:,1)
-!
-PRCT(:,:,:) = 0.
-PRCS(:,:,:) = 0.
-PRRT(:,:,:) = 0.
-PRRS(:,:,:) = 0.
-!
-IF ( KRR .GE. 2 ) PRCT(:,:,:) = PRT(:,:,:,2)
-IF ( KRR .GE. 2 ) PRCS(:,:,:) = PRS(:,:,:,2)
-IF ( KRR .GE. 3 ) PRRT(:,:,:) = PRT(:,:,:,3)
-IF ( KRR .GE. 3 ) PRRS(:,:,:) = PRS(:,:,:,3)
-!
-! Prepare 3D number concentrations
-PCCT(:,:,:) = 0.
-PCRT(:,:,:) = 0.
-PCCS(:,:,:) = 0.
-PCRS(:,:,:) = 0.
-!
-IF ( LWARM_LIMA ) PCCT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NC)
-IF ( LWARM_LIMA .AND. LRAIN_LIMA ) PCRT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NR)
-!
-IF ( LWARM_LIMA ) PCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC)
-IF ( LWARM_LIMA .AND. LRAIN_LIMA ) PCRS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR)
-!
-IF ( NMOD_CCN .GE. 1 ) THEN
-   ALLOCATE( PNFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_CCN) )
-   ALLOCATE( PNAS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_CCN) )
-   PNFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1)
-   PNAS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1)
-ELSE
-   ALLOCATE( PNFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),1) )
-   ALLOCATE( PNAS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),1) )
-   PNFS(:,:,:,:) = 0.
-   PNAS(:,:,:,:) = 0.
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       1.     COMPUTE THE SLOPE PARAMETERS ZLBDC,ZLBDR
-!   	        ----------------------------------------
-!
-!
-ZWLBDC3(:,:,:) = 1.E45
-ZWLBDC(:,:,:)  = 1.E15
-!
-WHERE (PRCT(:,:,:)>XRTMIN(2) .AND. PCCT(:,:,:)>XCTMIN(2))
-   ZWLBDC3(:,:,:) = XLBC * PCCT(:,:,:) / PRCT(:,:,:)
-   ZWLBDC(:,:,:)  = ZWLBDC3(:,:,:)**XLBEXC
-END WHERE
-!
-ZWLBDR3(:,:,:) = 1.E30
-ZWLBDR(:,:,:)  = 1.E10
-WHERE (PRRT(:,:,:)>XRTMIN(3) .AND. PCRT(:,:,:)>XCTMIN(3))
-   ZWLBDR3(:,:,:) = XLBR * PCRT(:,:,:) / PRRT(:,:,:)
-   ZWLBDR(:,:,:)  = ZWLBDR3(:,:,:)**XLBEXR
-END WHERE
-ZT(:,:,:)  = PTHT(:,:,:) * (PPABST(:,:,:)/XP00)**(XRD/XCPD)
-IF( OACTIT ) THEN
-   ZTM(:,:,:) = PTHM(:,:,:) * (PPABSM(:,:,:)/XP00)**(XRD/XCPD)
-ELSE 
-   ZTM(:,:,:) = ZT(:,:,:)
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       2.     COMPUTE THE SEDIMENTATION (RS) SOURCE
-!	        -------------------------------------
-!
-!
-CALL LIMA_WARM_SEDIMENTATION (OSEDC, KSPLITR, PTSTEP, KMI,  &
-                              HFMFILE, HLUOUT, OCLOSE_OUT,  &
-                              PZZ, PRHODREF, PPABST, ZT,    &
-                              ZWLBDC,                       &
-                              PRCT, PRRT, PCCT, PCRT,       &
-                              PRCS, PRRS, PCCS, PCRS,       &
-                              PINPRC, PINPRR,      &
-                              PINPRR3D    )
-!
-IF (LBUDGET_RC .AND. OSEDC)                                              &
-                CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'SEDI_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'SEDI_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-IF (LBUDGET_SV) THEN
-  IF (OSEDC) CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,&
-                    &'SEDI_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! RCC
-  IF (ORAIN) CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,&
-                    &'SEDI_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! RCR
-END IF
-!
-! 
-!-------------------------------------------------------------------------------
-!
-!*       2.     COMPUTES THE NUCLEATION PROCESS SOURCES
-!   	        --------------------------------------
-!
-!
-IF (LACTI_LIMA) THEN
-!
-   CALL LIMA_WARM_NUCL (OACTIT, PTSTEP, KMI, HFMFILE, HLUOUT, OCLOSE_OUT,&
-                        PRHODREF, PEXNREF, PPABST, ZT, ZTM, PW_NU,       &
-                        PRCM, PRVT, PRCT, PRRT,                          &
-                        PTHS, PRVS, PRCS, PCCS, PNFS, PNAS               )
-!
-   IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HENU_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-   IF (LBUDGET_RV) CALL BUDGET_DDH (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HENU_BU_RRV',YDDDH, YDLDDH, YDMDDH)
-   IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7,'HENU_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-   IF (LBUDGET_SV) THEN
-      CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'HENU_BU_RSV',YDDDH, YDLDDH, YDMDDH) ! RCN
-      IF (NMOD_CCN.GE.1) THEN
-         DO JL=1, NMOD_CCN
-            CALL BUDGET_DDH ( PNFS(:,:,:,JL)*PRHODJ(:,:,:),12+NSV_LIMA_CCN_FREE+JL-1,'HENU_BU_RSV',YDDDH, YDLDDH, YDMDDH) 
-         END DO
-      END IF
-   END IF
-!
-END IF ! LACTI_LIMA
-!
-!
-!------------------------------------------------------------------------------
-!
-!*       3.    COALESCENCE PROCESSES
-!              ---------------------
-!
-!
-   CALL LIMA_WARM_COAL (PTSTEP, KMI, HFMFILE, HLUOUT, OCLOSE_OUT,   &
-                        PRHODREF, ZWLBDC3, ZWLBDC, ZWLBDR3, ZWLBDR, &
-                        PRCT, PRRT, PCCT, PCRT,                     &
-                        PRCS, PRRS, PCCS, PCRS,                     &
-                        PRHODJ,YDDDH, YDLDDH, YDMDDH                )
-!
-!
-!-------------------------------------------------------------------------------
-!
-!        4.    EVAPORATION OF RAINDROPS
-!              ------------------------
-!
-!
-IF (ORAIN) THEN
-!
-   CALL LIMA_WARM_EVAP (PTSTEP, KMI, HFMFILE, HLUOUT, OCLOSE_OUT,   &
-                        PRHODREF, PEXNREF, PPABST, ZT,              &
-                        ZWLBDC3, ZWLBDC, ZWLBDR3, ZWLBDR,           &
-                        PRVT, PRCT, PRRT, PCRT,                     &
-                        PRVS, PRCS, PRRS, PCCS, PCRS, PTHS,         &
-                        PEVAP3D                                     )
-!
-   IF (LBUDGET_RV) CALL BUDGET_DDH (PRVS(:,:,:)*PRHODJ(:,:,:),6 ,'REVA_BU_RRV',YDDDH, YDLDDH, YDMDDH)
-   IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'REVA_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-   IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'REVA_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-   IF (LBUDGET_TH) CALL BUDGET_DDH (PTHS(:,:,:)*PRHODJ(:,:,:),4 ,'REVA_BU_RTH',YDDDH, YDLDDH, YDMDDH)
-   IF (LBUDGET_SV) CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'REVA_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-   IF (LBUDGET_SV) CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'REVA_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-!
-!
-!-------------------------------------------------------------------------------
-!
-!        5.    SPONTANEOUS BREAK-UP (NUMERICAL FILTER)
-!              --------------------
-!
-   ZWLBDR(:,:,:) = 1.E10
-   WHERE (PRRS(:,:,:)>XRTMIN(3)/PTSTEP.AND.PCRS(:,:,:)>XCTMIN(3)/PTSTEP )
-      ZWLBDR3(:,:,:) = XLBR * PCRS(:,:,:) / PRRS(:,:,:)
-      ZWLBDR(:,:,:)  = ZWLBDR3(:,:,:)**XLBEXR
-   END WHERE
-   WHERE (ZWLBDR(:,:,:)<(XACCR1/XSPONBUD1))
-      PCRS(:,:,:) = PCRS(:,:,:)*MAX((1.+XSPONCOEF2*(XACCR1/ZWLBDR(:,:,:)-XSPONBUD1)**2),&
-                                                     (XACCR1/ZWLBDR(:,:,:)/XSPONBUD3)**3)
-   END WHERE
-!
-! Budget storage
-   IF (LBUDGET_SV) &
-      CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,&
-                    &'BRKU_BU_RSV',YDDDH, YDLDDH, YDMDDH) 
-
-!
-ENDIF ! ORAIN
-!
-!------------------------------------------------------------------------------
-!
-!
-!*       6.    REPORT 3D MICROPHYSICAL VARIABLES IN PRS AND PSVS
-!              -------------------------------------------------
-!
-PRS(:,:,:,1) = PRVS(:,:,:)
-IF ( KRR .GE. 2 ) PRS(:,:,:,2) = PRCS(:,:,:)
-IF ( KRR .GE. 3 ) PRS(:,:,:,3) = PRRS(:,:,:)
-!
-! Prepare 3D number concentrations
-!
-IF ( LWARM_LIMA ) PSVS(:,:,:,NSV_LIMA_NC) = PCCS(:,:,:)
-IF ( LWARM_LIMA .AND. LRAIN_LIMA ) PSVS(:,:,:,NSV_LIMA_NR) = PCRS(:,:,:)
-!
-IF ( NMOD_CCN .GE. 1 ) THEN
-   PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) = PNFS(:,:,:,:)
-   PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1) = PNAS(:,:,:,:)
-END IF
-!
-IF (ALLOCATED(PNFS)) DEALLOCATE(PNFS)
-IF (ALLOCATED(PNAS)) DEALLOCATE(PNAS)
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_WARM
diff --git a/src/arome/micro/lima_warm_coal.F90 b/src/arome/micro/lima_warm_coal.F90
deleted file mode 100644
index cf7ade8f31605d5dc667bf75c58b1d6798437965..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_warm_coal.F90
+++ /dev/null
@@ -1,513 +0,0 @@
-!      ##########################
-       MODULE MODI_LIMA_WARM_COAL
-!      ##########################
-!
-INTERFACE
-      SUBROUTINE LIMA_WARM_COAL (PTSTEP, KMI, HFMFILE, HLUOUT, OCLOSE_OUT,   &
-                                 PRHODREF, ZWLBDC3, ZWLBDC, ZWLBDR3, ZWLBDR, &
-                                 PRCT, PRRT, PCCT, PCRT,                     &
-                                 PRCS, PRRS, PCCS, PCRS,                     &
-                                 PRHODJ, &
-                            YDDDH, YDLDDH, YDMDDH                              )
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-!
-REAL,                     INTENT(IN)    :: PTSTEP     ! Double Time step
-                                                      ! (single if cold start)
-INTEGER,                  INTENT(IN)    :: KMI        ! Model index 
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE    ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)    :: HLUOUT     ! Output-listing name for
-                                                      ! model n
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                      ! the tput FM fileoutp
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF   ! Reference density
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: ZWLBDC3    ! Lambda(cloud) **3
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: ZWLBDC     ! Lambda(cloud)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: ZWLBDR3    ! Lambda(rain) **3
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: ZWLBDR     ! Lambda(rain)
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT       ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT       ! Rain water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCCT       ! Cloud water C. at t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCRT       ! Rain water C. at t
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRCS       ! Cloud water m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRRS       ! Rain water m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCCS       ! Cloud water C. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCRS       ! Rain water C. source
-!
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRHODJ
-!
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-!
-      END SUBROUTINE LIMA_WARM_COAL
-END INTERFACE
-END MODULE MODI_LIMA_WARM_COAL
-!     #############################################################################
-      SUBROUTINE LIMA_WARM_COAL (PTSTEP, KMI, HFMFILE, HLUOUT, OCLOSE_OUT,   &
-                                 PRHODREF, ZWLBDC3, ZWLBDC, ZWLBDR3, ZWLBDR, &
-                                 PRCT, PRRT, PCCT, PCRT,                     &
-                                 PRCS, PRRS, PCCS, PCRS,                     &
-                                 PRHODJ, &
-                            YDDDH, YDLDDH, YDMDDH                              )
-!     #############################################################################
-!
-!!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the microphysical sources:
-!!    nucleation, sedimentation, autoconversion, accretion, self-collection 
-!!    and vaporisation which are parameterized according to Cohard and Pinty 
-!!    QJRMS, 2000
-!!
-!!
-!!**  METHOD
-!!    ------
-!!      Assuming a generalized gamma distribution law for the cloud droplets 
-!!    and the raindrops, the zeroth and third order moments tendencies 
-!!    are evaluated for all the coalescence terms by integrating the
-!!    Stochastic Collection Equation. As autoconversion is a process that 
-!!    cannot be resolved analytically, the Berry-Reinhardt parameterisation 
-!!    is employed with modifications to initiate the raindrop spectrum mode.
-!!     
-!!    Computation steps :
-!!      1- Check where computations are necessary, pack variables
-!!      2- Self collection of cloud droplets
-!!      3- Autoconversion of cloud droplets (Berry-Reinhardt parameterization)
-!!      4- Accretion sources
-!!      5- Self collection - Coalescence/Break-up
-!!      6- Unpack variables, clean
-!!
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!      Cohard, J.-M. and J.-P. Pinty, 2000: A comprehensive two-moment warm 
-!!      microphysical bulk scheme. 
-!!        Part I: Description and tests
-!!        Part II: 2D experiments with a non-hydrostatic model
-!!      Accepted for publication in Quart. J. Roy. Meteor. Soc. 
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!      C. Barthe  * LACy *  jan. 2014   add budgets
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_PARAMETERS,     ONLY : JPHEXT, JPVEXT
-USE MODD_PARAM_LIMA
-USE MODD_PARAM_LIMA_WARM
-!
-USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NR
-USE MODD_BUDGET
-USE MODE_BUDGET, ONLY: BUDGET_DDH
-!
-USE MODI_LIMA_FUNCTIONS, ONLY : COUNTJV
-!
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-REAL,                     INTENT(IN)    :: PTSTEP     ! Double Time step
-                                                      ! (single if cold start)
-INTEGER,                  INTENT(IN)    :: KMI        ! Model index 
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE    ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)    :: HLUOUT     ! Output-listing name for
-                                                      ! model n
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                      ! the tput FM fileoutp
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF   ! Reference density
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: ZWLBDC3    ! Lambda(cloud) **3
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: ZWLBDC     ! Lambda(cloud)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: ZWLBDR3    ! Lambda(rain) **3
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: ZWLBDR     ! Lambda(rain)
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT       ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT       ! Rain water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCCT       ! Cloud water C. at t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCRT       ! Rain water C. at t
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRCS       ! Cloud water m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRRS       ! Rain water m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCCS       ! Cloud water C. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCRS       ! Rain water C. source
-!
-REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRHODJ
-!
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-!
-!*       0.1   Declarations of local variables :
-!
-! Packing variables
-LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: GMICRO 
-INTEGER :: IMICRO
-INTEGER , DIMENSION(SIZE(GMICRO))   :: I1,I2,I3 ! Used to replace the COUNT
-INTEGER                             :: JL       ! and PACK intrinsics 
-!
-! Packed micophysical variables
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZRCT    ! Cloud water m.r. at t 
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZRRT    ! Rain water m.r. at t 
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZCCT    ! cloud conc. at t
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZCRT    ! rain conc. at t
-!
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZRCS    ! Cloud water m.r. source
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZRRS    ! Rain water m.r. source
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZCCS    ! cloud conc. source
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZCRS    ! rain conc. source
-!
-! Other packed variables
-REAL, DIMENSION(:)  , ALLOCATABLE  :: ZRHODREF ! RHO Dry REFerence
-REAL, DIMENSION(:)  , ALLOCATABLE  :: ZLBDC3
-REAL, DIMENSION(:)  , ALLOCATABLE  :: ZLBDC
-REAL, DIMENSION(:)  , ALLOCATABLE  :: ZLBDR3
-REAL, DIMENSION(:)  , ALLOCATABLE  :: ZLBDR
-!
-! Work arrays
-REAL,    DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: ZW
-!
-REAL, DIMENSION(:), ALLOCATABLE    :: ZZW1, ZZW2, ZZW3, ZZW4, ZSCBU
-LOGICAL, DIMENSION(:), ALLOCATABLE :: GSELF,               &
-                                      GACCR,               &
-                                      GSCBU,               &
-                                      GENABLE_ACCR_SCBU
-! 
-!
-INTEGER :: ISELF, IACCR, ISCBU
-INTEGER :: IIB, IIE, IJB, IJE, IKB, IKE        ! Physical domain
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       1.     PREPARE COMPUTATIONS - PACK
-!   	        ---------------------------
-!
-!
-IIB=1+JPHEXT
-IIE=SIZE(PRHODREF,1) - JPHEXT
-IJB=1+JPHEXT
-IJE=SIZE(PRHODREF,2) - JPHEXT
-IKB=1+JPVEXT
-IKE=SIZE(PRHODREF,3) - JPVEXT
-!
-GMICRO(:,:,:) = .FALSE.
-GMICRO(IIB:IIE,IJB:IJE,IKB:IKE) =                  &
-     PRCT(IIB:IIE,IJB:IJE,IKB:IKE)>XRTMIN(2) .OR.  &
-     PRRT(IIB:IIE,IJB:IJE,IKB:IKE)>XRTMIN(3)
-!
-IMICRO = COUNTJV( GMICRO(:,:,:),I1(:),I2(:),I3(:))
-!
-IF( IMICRO >= 1 ) THEN
-   ALLOCATE(ZRCT(IMICRO))
-   ALLOCATE(ZRRT(IMICRO))
-   ALLOCATE(ZCCT(IMICRO))
-   ALLOCATE(ZCRT(IMICRO))
-!
-   ALLOCATE(ZRCS(IMICRO))
-   ALLOCATE(ZRRS(IMICRO))
-   ALLOCATE(ZCCS(IMICRO))
-   ALLOCATE(ZCRS(IMICRO))
-!
-   ALLOCATE(ZLBDC(IMICRO)) 
-   ALLOCATE(ZLBDC3(IMICRO))
-   ALLOCATE(ZLBDR(IMICRO)) 
-   ALLOCATE(ZLBDR3(IMICRO))
-! 
-   ALLOCATE(ZRHODREF(IMICRO))
-   DO JL=1,IMICRO
-      ZCCT(JL) = PCCT(I1(JL),I2(JL),I3(JL))
-      ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL))
-      ZRRT(JL) = PRRT(I1(JL),I2(JL),I3(JL))
-      ZCRT(JL) = PCRT(I1(JL),I2(JL),I3(JL))
-      ZCCS(JL) = PCCS(I1(JL),I2(JL),I3(JL))
-      ZRCS(JL) = PRCS(I1(JL),I2(JL),I3(JL))
-      ZRRS(JL) = PRRS(I1(JL),I2(JL),I3(JL))
-      ZCRS(JL) = PCRS(I1(JL),I2(JL),I3(JL))
-      ZLBDR(JL) = ZWLBDR(I1(JL),I2(JL),I3(JL))
-      ZLBDR3(JL) = ZWLBDR3(I1(JL),I2(JL),I3(JL))
-      ZLBDC(JL) = ZWLBDC(I1(JL),I2(JL),I3(JL))
-      ZLBDC3(JL) = ZWLBDC3(I1(JL),I2(JL),I3(JL))
-      ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL))
-   END DO
-! 
-   ALLOCATE(GSELF(IMICRO))
-   ALLOCATE(GACCR(IMICRO))
-   ALLOCATE(GSCBU(IMICRO))
-   ALLOCATE(ZZW1(IMICRO))
-   ALLOCATE(ZZW2(IMICRO))
-   ALLOCATE(ZZW3(IMICRO))
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       2. Self-collection of cloud droplets    
-!   	 ------------------------------------
-!
-!
-   GSELF(:) = ZCCT(:)>XCTMIN(2)
-   ISELF = COUNT(GSELF(:))
-   IF( ISELF>0 ) THEN
-      ZZW1(:) = XSELFC*(ZCCT(:)/ZLBDC3(:))**2 * ZRHODREF(:) ! analytical integration
-      WHERE( GSELF(:) )
-         ZCCS(:) = ZCCS(:) - MIN( ZCCS(:),ZZW1(:) )
-      END WHERE
-   END IF
-!
-!
-  ZW(:,:,:) = PCCS(:,:,:)
-  IF (LBUDGET_SV) CALL BUDGET_DDH (                                 &
-                   UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:))&
-                   &*PRHODJ(:,:,:),12+NSV_LIMA_NC,'SELF_BU_RSV',YDDDH, YDLDDH, YDMDDH) 
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       3. Autoconversion of cloud droplets (Berry-Reinhardt parameterization)
-!   	 ----------------------------------------------------------------------
-!
-!
-IF (LRAIN_LIMA) THEN
-!
-   ZZW2(:) = 0.0
-   ZZW1(:) = 0.0
-   WHERE( ZRCT(:)>XRTMIN(2) )
-      ZZW2(:) = MAX( 0.0,XLAUTR*ZRHODREF(:)*ZRCT(:)*             &
-                           (XAUTO1/ZLBDC(:)**4-XLAUTR_THRESHOLD) ) ! L 
-!
-      ZZW3(:) = MIN( ZRCS(:), MAX( 0.0,XITAUTR*ZZW2(:)*ZRCT(:)*  &
-                           (XAUTO2/ZLBDC(:)-XITAUTR_THRESHOLD) ) ) ! L/tau
-!
-      ZRCS(:) = ZRCS(:) - ZZW3(:)
-      ZRRS(:) = ZRRS(:) + ZZW3(:)
-!
-      ZZW1(:) = MIN( MIN( 1.2E4,(XACCR4/ZLBDC(:)-XACCR5)/XACCR3),   &
-                           ZLBDR(:)/XACCR1 ) ! D**-1 threshold diameter for 
-                                             ! switching the autoconversion regimes
-                                             ! min (80 microns, D_h, D_r)
-      ZZW3(:) = ZZW3(:) * MAX( 0.0,ZZW1(:) )**3 / XAC 
-      ZCRS(:) = ZCRS(:) + ZZW3(:)
-   END WHERE
-!
-!
-   ZW(:,:,:) = PRCS(:,:,:)
-   IF (LBUDGET_RC) CALL BUDGET_DDH (                                  &
-               UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) &
-                            *PRHODJ(:,:,:),7 ,'AUTO_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-
-   ZW(:,:,:) = PRRS(:,:,:)
-   IF (LBUDGET_RR) CALL BUDGET_DDH (                                  &
-               UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) &
-                            *PRHODJ(:,:,:),8 ,'AUTO_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-   ZW(:,:,:) = PCRS(:,:,:)
-   IF (LBUDGET_SV) THEN
-      ZW(:,:,:) = PCRS(:,:,:)
-      CALL BUDGET_DDH (UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) &
-               *PRHODJ(:,:,:),12+NSV_LIMA_NR,'AUTO_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-      ZW(:,:,:) = PCCS(:,:,:)
-      CALL BUDGET_DDH (UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) &
-               *PRHODJ(:,:,:),12+NSV_LIMA_NC,'AUTO_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-   END IF
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       4. Accretion sources
-!   	 --------------------
-!
-!
-   GACCR(:) = ZRRT(:)>XRTMIN(3) .AND. ZCRT(:)>XCTMIN(3) 
-   IACCR = COUNT(GACCR(:))
-   IF( IACCR>0 ) THEN
-      ALLOCATE(ZZW4(IMICRO)); ZZW4(:) = XACCR1/ZLBDR(:)
-      ALLOCATE(GENABLE_ACCR_SCBU(IMICRO))
-      GENABLE_ACCR_SCBU(:) = ZRRT(:)>1.2*ZZW2(:)/ZRHODREF(:) .OR.           &
-                       ZZW4(:)>=MAX( XACCR2,XACCR3/(XACCR4/ZLBDC(:)-XACCR5) )
-      GACCR(:) = GACCR(:) .AND. ZRCT(:)>XRTMIN(2) .AND. GENABLE_ACCR_SCBU(:)
-   END IF
-!
-   IACCR = COUNT(GACCR(:))
-   IF( IACCR>0 ) THEN
-      WHERE( GACCR(:).AND.(ZZW4(:)>1.E-4) ) ! Accretion for D>100 10-6 m
-         ZZW3(:) = ZLBDC3(:) / ZLBDR3(:)
-         ZZW1(:) = ( ZCCT(:)*ZCRT(:) / ZLBDC3(:) )*ZRHODREF(:)
-         ZZW2(:) = MIN( ZZW1(:)*(XACCR_CLARGE1+XACCR_CLARGE2*ZZW3(:)),ZCCS(:) )
-         ZCCS(:) = ZCCS(:) - ZZW2(:)
-!
-         ZZW1(:) = ( ZZW1(:) / ZLBDC3(:) )*ZRHODREF(:)
-         ZZW2(:) = MIN( ZZW1(:)*(XACCR_RLARGE1+XACCR_RLARGE2*ZZW3(:)),ZRCS(:) )
-         ZRCS(:) = ZRCS(:) - ZZW2(:)
-         ZRRS(:) = ZRRS(:) + ZZW2(:)
-      END WHERE
-      WHERE( GACCR(:).AND.(ZZW4(:)<=1.E-4) ) ! Accretion for D<100 10-6 m
-         ZZW3(:) = ZLBDC3(:) / ZLBDR3(:)
-         ZZW1(:) = ( ZCCT(:)*ZCRT(:) / ZLBDC3(:)**2 )*ZRHODREF(:)
-         ZZW3(:) = ZZW3(:)**2
-         ZZW2(:) = MIN( ZZW1(:)*(XACCR_CSMALL1+XACCR_CSMALL2*ZZW3(:)),ZCCS(:) )
-         ZCCS(:) = ZCCS(:) - ZZW2(:)
-!
-         ZZW1(:) = ZZW1(:) / ZLBDC3(:)
-         ZZW2(:) = MIN( ZZW1(:)*(XACCR_RSMALL1+XACCR_RSMALL2*ZZW3(:))             &
-                                                          *ZRHODREF(:),ZRCS(:) )
-         ZRCS(:) = ZRCS(:) - ZZW2(:)
-         ZRRS(:) = ZRRS(:) + ZZW2(:)
-      END WHERE
-   END IF
-!
-!
-   ZW(:,:,:) = PRCS(:,:,:)
-   IF (LBUDGET_RC) CALL BUDGET_DDH (                                  &
-               UNPACK(ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) &
-                              *PRHODJ(:,:,:),7 ,'ACCR_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-   ZW(:,:,:) = PRRS(:,:,:)
-   IF (LBUDGET_RR) CALL BUDGET_DDH (                                  &
-               UNPACK(ZRRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) &
-                              *PRHODJ(:,:,:),8 ,'ACCR_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-   ZW(:,:,:) = PCCS(:,:,:)
-   IF (LBUDGET_SV) CALL BUDGET_DDH (                                  &
-               UNPACK(ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) &
-                  *PRHODJ(:,:,:),12+NSV_LIMA_NC,'ACCR_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       5. Self collection - Coalescence/Break-up
-!   	 -----------------------------------------
-!
-!
-   IF( IACCR>0 ) THEN
-      GSCBU(:) = ZCRT(:)>XCTMIN(3) .AND. GENABLE_ACCR_SCBU(:)
-      ISCBU = COUNT(GSCBU(:))
-   ELSE
-      ISCBU = 0.0
-   END IF
-   IF( ISCBU>0 ) THEN
-!
-!*       5.1  efficiencies
-!
-      IF (.NOT.ALLOCATED(ZZW4)) ALLOCATE(ZZW4(IMICRO))
-      ZZW4(:)  = XACCR1 / ZLBDR(:)                ! Mean diameter
-      ALLOCATE(ZSCBU(IMICRO))
-      ZSCBU(:) = 1.0
-      WHERE (ZZW4(:)>=XSCBU_EFF1 .AND. GSCBU(:))   ZSCBU(:) = &  ! Coalescence
-                            EXP(XSCBUEXP1*(ZZW4(:)-XSCBU_EFF1))  ! efficiency
-      WHERE (ZZW4(:)>=XSCBU_EFF2) ZSCBU(:) = 0.0  ! Break-up
-!
-!*       5.2  integration
-!
-      ZZW1(:) = 0.0
-      ZZW2(:) = 0.0
-      ZZW3(:) = 0.0
-      ZZW4(:) = XACCR1 / ZLBDR(:)                 ! Mean volume drop diameter
-      WHERE (GSCBU(:).AND.(ZZW4(:)>1.E-4))              ! analytical integration
-         ZZW1(:) = XSCBU2 * ZCRT(:)**2 / ZLBDR3(:)   ! D>100 10-6 m
-         ZZW3(:) = ZZW1(:)*ZSCBU(:)
-      END WHERE
-      WHERE (GSCBU(:).AND.(ZZW4(:)<=1.E-4))
-         ZZW2(:) = XSCBU3 *(ZCRT(:) / ZLBDR3(:))**2  ! D<100 10-6 m
-         ZZW3(:) = ZZW2(:)
-      END WHERE
-      ZCRS(:) = ZCRS(:) - MIN( ZCRS(:),ZZW3(:) * ZRHODREF(:) )
-      DEALLOCATE(ZSCBU)
-   END IF
-!
-!
-   ZW(:,:,:) = PCRS(:,:,:)
-   IF (LBUDGET_SV) CALL BUDGET_DDH (                                  &
-               UNPACK(ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:)) &
-                  *PRHODJ(:,:,:),12+NSV_LIMA_NR,'SCBU_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-!
-END IF ! LRAIN_LIMA
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       6. Unpack and clean
-!   	 -------------------
-!
-!
-   ZW(:,:,:) = PRCS(:,:,:)
-   PRCS(:,:,:) = UNPACK( ZRCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:) = PRRS(:,:,:)
-   PRRS(:,:,:) = UNPACK( ZRRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:) = PCCS(:,:,:)
-   PCCS(:,:,:) = UNPACK( ZCCS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:) = PCRS(:,:,:)
-   PCRS(:,:,:) = UNPACK( ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-!
-   DEALLOCATE(ZRCT)
-   DEALLOCATE(ZRRT)
-   DEALLOCATE(ZCCT)
-   DEALLOCATE(ZCRT)
-   DEALLOCATE(ZRCS)
-   DEALLOCATE(ZRRS)
-   DEALLOCATE(ZCRS)
-   DEALLOCATE(ZCCS)
-   DEALLOCATE(ZRHODREF) 
-   DEALLOCATE(GSELF)
-   DEALLOCATE(GACCR)
-   DEALLOCATE(GSCBU)
-   IF( ALLOCATED(GENABLE_ACCR_SCBU) ) DEALLOCATE(GENABLE_ACCR_SCBU)
-   DEALLOCATE(ZZW1)
-   DEALLOCATE(ZZW2)
-   DEALLOCATE(ZZW3)
-   IF( ALLOCATED(ZZW4) ) DEALLOCATE(ZZW4)
-   DEALLOCATE(ZLBDR3)
-   DEALLOCATE(ZLBDC3)
-   DEALLOCATE(ZLBDR)
-   DEALLOCATE(ZLBDC)
-!
-!
-!-------------------------------------------------------------------------------
-!
-ELSE
-!*       7. Budgets are forwarded
-!        ------------------------
-!
-!
-   IF (LBUDGET_SV) CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'SELF_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-!
-   IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'AUTO_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-   IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'AUTO_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-   IF (LBUDGET_SV) CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'AUTO_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-   IF (LBUDGET_SV) CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'AUTO_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-!
-   IF (LBUDGET_RC) CALL BUDGET_DDH (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'ACCR_BU_RRC',YDDDH, YDLDDH, YDMDDH)
-   IF (LBUDGET_RR) CALL BUDGET_DDH (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'ACCR_BU_RRR',YDDDH, YDLDDH, YDMDDH)
-   IF (LBUDGET_SV) CALL BUDGET_DDH (PCCS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NC,'ACCR_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-!
-   IF (LBUDGET_SV) CALL BUDGET_DDH (PCRS(:,:,:)*PRHODJ(:,:,:),12+NSV_LIMA_NR,'SCBU_BU_RSV',YDDDH, YDLDDH, YDMDDH)
-
-END IF ! IMICRO
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_WARM_COAL
diff --git a/src/arome/micro/lima_warm_evap.F90 b/src/arome/micro/lima_warm_evap.F90
deleted file mode 100644
index a7674a41eb30951d187ca89fac202d02907e3c59..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_warm_evap.F90
+++ /dev/null
@@ -1,350 +0,0 @@
-!      ##########################
-       MODULE MODI_LIMA_WARM_EVAP
-!      ##########################
-!
-INTERFACE
-      SUBROUTINE LIMA_WARM_EVAP (PTSTEP, KMI, HFMFILE, HLUOUT, OCLOSE_OUT,   &
-                                 PRHODREF, PEXNREF, PPABST, ZT,              &
-                                 ZWLBDC3, ZWLBDC, ZWLBDR3, ZWLBDR,           &
-                                 PRVT, PRCT, PRRT, PCRT,                     &
-                                 PRVS, PRCS, PRRS, PCCS, PCRS, PTHS,         &
-                                 PEVAP3D)
-!
-REAL,                     INTENT(IN)    :: PTSTEP     ! Double Time step
-                                                      ! (single if cold start)
-INTEGER,                  INTENT(IN)    :: KMI        ! Model index 
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE    ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)    :: HLUOUT     ! Output-listing name for
-                                                      ! model n
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                      ! the tput FM fileoutp
-!
-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)    :: ZT         ! Temperature
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: ZWLBDC3    ! Lambda(cloud) **3
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: ZWLBDC     ! Lambda(cloud)
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: ZWLBDR3    ! Lambda(rain) **3
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: ZWLBDR     ! Lambda(rain)
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRVT       ! Water vapor m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT       ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT       ! Rain water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCRT       ! Rain water C. at t
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRVS       ! Water vapor m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRCS       ! Cloud water m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRRS       ! Rain water m.r. source
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCCS       ! Cloud water C. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCRS       ! Rain water C. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS       ! Theta source
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PEVAP3D    ! Rain evap profile
-!
-      END SUBROUTINE LIMA_WARM_EVAP
-END INTERFACE
-END MODULE MODI_LIMA_WARM_EVAP
-!     #############################################################################
-      SUBROUTINE LIMA_WARM_EVAP (PTSTEP, KMI, HFMFILE, HLUOUT, OCLOSE_OUT,   &
-                                 PRHODREF, PEXNREF, PPABST, ZT,              &
-                                 ZWLBDC3, ZWLBDC, ZWLBDR3, ZWLBDR,           &
-                                 PRVT, PRCT, PRRT, PCRT,                     &
-                                 PRVS, PRCS, PRRS, PCCS, PCRS, PTHS,         &
-                                 PEVAP3D)
-!     #############################################################################
-!
-!!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the raindrop evaporation
-!!
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_PARAMETERS,     ONLY : JPHEXT, JPVEXT
-USE MODD_CST
-USE MODD_PARAM_LIMA
-USE MODD_PARAM_LIMA_WARM
-!
-USE MODI_LIMA_FUNCTIONS, ONLY : COUNTJV
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-REAL,                     INTENT(IN)    :: PTSTEP     ! Double Time step
-                                                      ! (single if cold start)
-INTEGER,                  INTENT(IN)    :: KMI        ! Model index 
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE    ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)    :: HLUOUT     ! Output-listing name for
-                                                      ! model n
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                      ! the tput FM fileoutp
-!
-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)    :: ZT         ! Temperature
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: ZWLBDC3    ! Lambda(cloud) **3
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: ZWLBDC     ! Lambda(cloud)
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: ZWLBDR3    ! Lambda(rain) **3
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: ZWLBDR     ! Lambda(rain)
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRVT       ! Water vapor m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT       ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT       ! Rain water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCRT       ! Rain water C. at t
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRVS       ! Water vapor m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRCS       ! Cloud water m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRRS       ! Rain water m.r. source
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCCS       ! Cloud water C. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCRS       ! Rain water C. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS       ! Theta source
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PEVAP3D    ! Rain evap profile
-!
-!*       0.1   Declarations of local variables :
-!
-! Packing variables
-LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: GEVAP, GMICRO 
-INTEGER :: IEVAP, IMICRO
-INTEGER , DIMENSION(SIZE(GEVAP))   :: I1,I2,I3 ! Used to replace the COUNT
-INTEGER                            :: JL       ! and PACK intrinsics 
-!
-! Packed micophysical variables
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZRVT     ! Water vapor m.r. at t 
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZRCT     ! Cloud water m.r. at t 
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZRRT     ! Rain water m.r. at t 
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZCRT     ! rain conc. at t
-!
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZRVS     ! Water vapor m.r. source
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZRRS     ! Rain water m.r. source
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZTHS     ! Theta source
-!
-! Other packed variables
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZRHODREF ! RHO Dry REFerence
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZEXNREF  ! EXNer Pressure REFerence
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZZT      ! Temperature
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZLBDR    ! Lambda(rain)
-!
-! Work arrays
-REAL, DIMENSION(:), ALLOCATABLE   :: ZZW1, ZZW2, ZZW3, &
-                                     ZRTMIN, ZCTMIN, &
-                                     ZZLV     ! Latent heat of vaporization at T
-!
-REAL,    DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3))   &
-                                  :: ZW, ZW2, ZRVSAT
-!
-!
-REAL    :: ZEPS, ZFACT
-INTEGER :: IIB, IIE, IJB, IJE, IKB, IKE        ! Physical domain
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       1.     PREPARE COMPUTATIONS - PACK
-!   	        ---------------------------
-!
-!
-IIB=1+JPHEXT
-IIE=SIZE(PRHODREF,1) - JPHEXT
-IJB=1+JPHEXT
-IJE=SIZE(PRHODREF,2) - JPHEXT
-IKB=1+JPVEXT
-IKE=SIZE(PRHODREF,3) - JPVEXT
-!
-ALLOCATE(ZRTMIN(SIZE(XRTMIN)))
-ALLOCATE(ZCTMIN(SIZE(XCTMIN)))
-ZRTMIN(:) = XRTMIN(:) / PTSTEP
-ZCTMIN(:) = XCTMIN(:) / PTSTEP
-!
-ZEPS= XMV / XMD
-ZRVSAT(:,:,:) = ZEPS / (PPABST(:,:,:) * &
-                   EXP(-XALPW+XBETAW/ZT(:,:,:)+XGAMW*ALOG(ZT(:,:,:))) - 1.0)
-
-!
-GEVAP(:,:,:) = .FALSE.
-GEVAP(IIB:IIE,IJB:IJE,IKB:IKE) =                              &
-     PRRS(IIB:IIE,IJB:IJE,IKB:IKE)>ZRTMIN(3) .AND.                    &
-     PRVT(IIB:IIE,IJB:IJE,IKB:IKE)<ZRVSAT(IIB:IIE,IJB:IJE,IKB:IKE)
-!
-IEVAP = COUNTJV( GEVAP(:,:,:),I1(:),I2(:),I3(:))
-!
-IF( IEVAP >= 1 ) THEN
-   ALLOCATE(ZRVT(IEVAP))
-   ALLOCATE(ZRCT(IEVAP))
-   ALLOCATE(ZRRT(IEVAP))
-   ALLOCATE(ZCRT(IEVAP))
-!
-   ALLOCATE(ZRVS(IEVAP))
-   ALLOCATE(ZRRS(IEVAP))
-   ALLOCATE(ZTHS(IEVAP))
-!
-   ALLOCATE(ZLBDR(IEVAP))
-!
-   ALLOCATE(ZRHODREF(IEVAP))
-   ALLOCATE(ZEXNREF(IEVAP))
-!
-   ALLOCATE(ZZT(IEVAP))  
-   ALLOCATE(ZZLV(IEVAP)) 
-   ALLOCATE(ZZW1(IEVAP)) 
-   DO JL=1,IEVAP
-      ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL))
-      ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL))
-      ZRRT(JL) = PRRT(I1(JL),I2(JL),I3(JL))
-      ZCRT(JL) = PCRT(I1(JL),I2(JL),I3(JL))
-      ZRRS(JL) = PRRS(I1(JL),I2(JL),I3(JL))
-      ZRVS(JL) = PRVS(I1(JL),I2(JL),I3(JL))
-      ZTHS(JL) = PTHS(I1(JL),I2(JL),I3(JL))
-      ZZT(JL) = ZT(I1(JL),I2(JL),I3(JL))
-      ZZW1(JL) = ZRVSAT(I1(JL),I2(JL),I3(JL))
-      ZLBDR(JL) = ZWLBDR(I1(JL),I2(JL),I3(JL))
-      ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL))
-      ZEXNREF(JL)  = PEXNREF(I1(JL),I2(JL),I3(JL))
-   END DO
-   ZZLV(:) = XLVTT + (XCPV-XCL)*(ZZT(:)-XTT)
-!
-   ALLOCATE(ZZW2(IEVAP)) 
-   ALLOCATE(ZZW3(IEVAP))
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       2. compute the evaporation of rain drops    
-!   	 ----------------------------------------
-!
-!
-   ZZW3(:) = MAX((1.0 - ZRVT(:)/ZZW1(:)),0.0)  ! Subsaturation
-!
-! Compute the function G(T)
-!
-   ZZW2(:) = 1. / ( XRHOLW*((((ZZLV(:)/ZZT(:))**2)/(XTHCO*XRV)) +          & ! G
-          (XRV*ZZT(:))/(XDIVA*EXP(XALPW-XBETAW/ZZT(:)-XGAMW*ALOG(ZZT(:))))))
-!
-! Compute the evaporation tendency
-!
-   ZZW2(:) = MIN( ZZW2(:) * ZZW3(:) * ZRRT(:) *        &
-                (X0EVAR*ZLBDR(:)**XEX0EVAR + X1EVAR*ZRHODREF(:)**XEX2EVAR* &
-                 ZLBDR(:)**XEX1EVAR),ZRRS(:) )
-   ZZW2(:) = MAX(ZZW2(:),0.0)
-!
-! Adjust sources
-!
-   ZRVS(:) = ZRVS(:) + ZZW2(:)
-   ZRRS(:) = ZRRS(:) - ZZW2(:)
-   ZTHS(:) = ZTHS(:) - ZZW2(:)*ZZLV(:) /                                        &
-                    ( ZEXNREF(:)*(XCPD + XCPV*ZRVT(:) + XCL*(ZRCT(:) + ZRRT(:)) ) )
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       3. Unpack and clean
-!   	 -------------------
-!
-!
-   ZW(:,:,:) = PRVS(:,:,:)
-   PRVS(:,:,:) = UNPACK( ZRVS(:),MASK=GEVAP(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:) = PRRS(:,:,:)
-   PRRS(:,:,:) = UNPACK( ZRRS(:),MASK=GEVAP(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:) = PTHS(:,:,:)
-   PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GEVAP(:,:,:),FIELD=ZW(:,:,:) )
-   ZW(:,:,:)= PEVAP3D(:,:,:)
-   PEVAP3D(:,:,:) = UNPACK( ZZW2(:),MASK=GEVAP(:,:,:),FIELD=ZW(:,:,:) )
-!
-   DEALLOCATE(ZRCT)
-   DEALLOCATE(ZRRT)
-   DEALLOCATE(ZRVT)
-   DEALLOCATE(ZCRT)
-   DEALLOCATE(ZRVS)
-   DEALLOCATE(ZRRS)
-   DEALLOCATE(ZTHS)
-   DEALLOCATE(ZZLV)
-   DEALLOCATE(ZZT)
-   DEALLOCATE(ZRHODREF)
-   DEALLOCATE(ZEXNREF)
-   DEALLOCATE(ZZW1)
-   DEALLOCATE(ZZW2)
-   DEALLOCATE(ZZW3)
-   DEALLOCATE(ZLBDR)
-!
-!
-!-----------------------------------------------------------------------------
-!
-!
-!*       4. Update Nr if:  80 microns < Dr < D_h
-!   	 ---------------------------------------
-!
-!
-   GEVAP(:,:,:) = PRRS(:,:,:)>ZRTMIN(3) .AND. PCRS(:,:,:)>ZCTMIN(3) .AND. &
-                  PRCS(:,:,:)>ZRTMIN(2) .AND. PCCS(:,:,:)>ZCTMIN(2)
-   WHERE (GEVAP(:,:,:))
-      ZWLBDR3(:,:,:) = XLBR * PCRS(:,:,:) / PRRS(:,:,:)
-      ZWLBDR(:,:,:)  = ZWLBDR3(:,:,:)**XLBEXR
-!
-      ZWLBDC3(:,:,:) = XLBC * PCCS(:,:,:) / PRCS(:,:,:)
-      ZWLBDC(:,:,:)  = ZWLBDC3(:,:,:)**XLBEXC
-      ZWLBDC3(:,:,:) = (XACCR1/XACCR3)*(XACCR4/ZWLBDC(:,:,:)-XACCR5) ! 1/D_h, not "Lambda_h"
-   END WHERE
-!
-   GMICRO(:,:,:) = GEVAP(:,:,:) .AND. ZWLBDR(:,:,:)>ZWLBDC3(:,:,:)
-                          ! the raindrops are too small, that is lower than D_h
-   ZFACT = 1.2E4*XACCR1
-   WHERE (GMICRO(:,:,:))
-      ZWLBDC(:,:,:) = XLBR / MIN( ZFACT,ZWLBDC3(:,:,:) )**3
-      ZW(:,:,:) = MIN( MAX(                                                      &
-           (PRHODREF(:,:,:)*PRRS(:,:,:) - ZWLBDC(:,:,:)*PCRS(:,:,:)) / &
-           (PRHODREF(:,:,:)*PRCS(:,:,:)/PCCS(:,:,:) - ZWLBDC(:,:,:)) , &
-                    0.0 ),PCRS(:,:,:),                                         &
-                          PCCS(:,:,:)*PRRS(:,:,:)/(PRCS(:,:,:)))
-!
-! Compute the percent (=1 if (ZWLBDR/XACCR1) >= 1.2E4
-! of transfer with    (=0 if (ZWLBDR/XACCR1) <= (XACCR4/ZWLBDC-XACCR5)/XACCR3
-!
-      ZW(:,:,:) = ZW(:,:,:)*( (MIN(ZWLBDR(:,:,:),1.2E4*XACCR1)-ZWLBDC3(:,:,:)) / &
-                            (                  1.2E4*XACCR1 -ZWLBDC3(:,:,:))   )
-!
-      ZW2(:,:,:) = PCCS(:,:,:)      !temporary storage
-      PCCS(:,:,:)   = PCCS(:,:,:)+ZW(:,:,:)
-      PCRS(:,:,:)   = PCRS(:,:,:)-ZW(:,:,:)
-      ZW(:,:,:)     = ZW(:,:,:) * (PRHODREF(:,:,:)*PRCS(:,:,:)/ZW2(:,:,:))
-      PRCS(:,:,:)   = PRCS(:,:,:)+ZW(:,:,:)
-      PRRS(:,:,:)   = PRRS(:,:,:)-ZW(:,:,:)
-   END WHERE
-!
-   GEVAP(:,:,:) = PRRS(:,:,:)<ZRTMIN(3) .OR. PCRS(:,:,:)<ZCTMIN(3)
-   WHERE (GEVAP(:,:,:))
-      PCRS(:,:,:) = 0.0
-      PRRS(:,:,:) = 0.0
-   END WHERE
-!
-END IF ! IEVAP
-!
-DEALLOCATE(ZRTMIN)
-DEALLOCATE(ZCTMIN)
-!
-!-----------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_WARM_EVAP
diff --git a/src/arome/micro/lima_warm_nucl.F90 b/src/arome/micro/lima_warm_nucl.F90
deleted file mode 100644
index a82de8ba9c7c8ecb2c63df42847532098fd5b939..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_warm_nucl.F90
+++ /dev/null
@@ -1,817 +0,0 @@
-!      ##########################
-       MODULE MODI_LIMA_WARM_NUCL
-!      ##########################
-!
-INTERFACE
-      SUBROUTINE LIMA_WARM_NUCL (OACTIT, PTSTEP, KMI, HFMFILE, HLUOUT, OCLOSE_OUT,&
-                                 PRHODREF, PEXNREF, PPABST, ZT, ZTM, PW_NU,       &
-                                 PRCM, PRVT, PRCT, PRRT,                          &
-                                 PTHS, PRVS, PRCS, PCCS, PNFS, PNAS               )
-!
-LOGICAL,                  INTENT(IN)    :: OACTIT     ! Switch to activate the
-                                                      ! activation by radiative
-                                                      ! tendency
-REAL,                     INTENT(IN)    :: PTSTEP     ! Double Time step
-                                                      ! (single if cold start)
-INTEGER,                  INTENT(IN)    :: KMI        ! Model index 
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE    ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)    :: HLUOUT     ! Output-listing name for
-                                                      ! model n
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                      ! the output FM file
-!
-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)    :: ZT         ! Temperature
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: ZTM        ! Temperature at time t-dt
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PW_NU      ! updraft velocity used for
-                                                      ! the nucleation param.
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCM       ! Cloud water m.r. at t-dt
-!   
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRVT       ! Water vapor m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT       ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT       ! Rain water m.r. at t 
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS       ! Theta source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRVS       ! Water vapor m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRCS       ! Cloud water m.r. source
-!
-REAL, DIMENSION(:,:,:)  , INTENT(INOUT) :: PCCS       ! Cloud water C. source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNFS       ! CCN C. available source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNAS       ! CCN C. activated source
-!
-END SUBROUTINE LIMA_WARM_NUCL
-END INTERFACE
-END MODULE MODI_LIMA_WARM_NUCL
-!     #############################################################################
-      SUBROUTINE LIMA_WARM_NUCL (OACTIT, PTSTEP, KMI, HFMFILE, HLUOUT, OCLOSE_OUT,&
-                                 PRHODREF, PEXNREF, PPABST, ZT, ZTM, PW_NU,       &
-                                 PRCM, PRVT, PRCT, PRRT,                          &
-                                 PTHS, PRVS, PRCS, PCCS, PNFS, PNAS               )
-!     #############################################################################
-!
-!!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the activation of CCN 
-!!    according to Cohard and Pinty, QJRMS, 2000
-!!
-!!
-!!**  METHOD
-!!    ------
-!!      The activation of CCN is checked for quasi-saturated air parcels 
-!!    to update the cloud droplet number concentration.
-!!
-!!    Computation steps :
-!!      1- Check where computations are necessary
-!!      2- and 3- Compute the maximum of supersaturation using the iterative 
-!!                Ridder algorithm
-!!      4- Compute the nucleation source
-!!      5- Deallocate local variables
-!! 
-!!    Contains :
-!!      6- Functions : Ridder algorithm
-!!
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!      Cohard, J.-M. and J.-P. Pinty, 2000: A comprehensive two-moment warm 
-!!      microphysical bulk scheme. 
-!!        Part I: Description and tests
-!!        Part II: 2D experiments with a non-hydrostatic model
-!!      Accepted for publication in Quart. J. Roy. Meteor. Soc. 
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_PARAMETERS,     ONLY : JPHEXT, JPVEXT
-USE MODD_CST
-USE MODD_PARAM_LIMA
-USE MODD_PARAM_LIMA_WARM
-!
-USE YOMLUN   , ONLY : NULOUT
-
-USE MODI_GAMMA
-USE MODI_LIMA_FUNCTIONS, ONLY : COUNTJV
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-LOGICAL,                  INTENT(IN)    :: OACTIT     ! Switch to activate the
-                                                      ! activation by radiative
-                                                      ! tendency
-REAL,                     INTENT(IN)    :: PTSTEP     ! Double Time step
-                                                      ! (single if cold start)
-INTEGER,                  INTENT(IN)    :: KMI        ! Model index 
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE    ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)    :: HLUOUT     ! Output-listing name for
-                                                      ! model n
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                      ! the output FM file
-!
-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)    :: ZT         ! Temperature
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: ZTM        ! Temperature at time t-dt
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PW_NU      ! updraft velocity used for
-                                                      ! the nucleation param.
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCM       ! Cloud water m.r. at t-dt
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRVT       ! Water vapor m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT       ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT       ! Rain water m.r. at t 
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS       ! Theta source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRVS       ! Water vapor m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRCS       ! Cloud water m.r. source
-!
-REAL, DIMENSION(:,:,:)  , INTENT(INOUT) :: PCCS       ! Cloud water C. source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNFS       ! CCN C. available source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNAS       ! CCN C. activated source
-!
-!
-!*       0.1   Declarations of local variables :
-!
-! Packing variables
-LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: GNUCT 
-INTEGER :: INUCT
-INTEGER , DIMENSION(SIZE(GNUCT))   :: I1,I2,I3 ! Used to replace the COUNT
-INTEGER                            :: JL       ! and PACK intrinsics 
-!
-! Packed micophysical variables
-REAL, DIMENSION(:)  , ALLOCATABLE  :: ZCCS     ! cloud conc. source
-REAL, DIMENSION(:,:), ALLOCATABLE  :: ZNFS     ! available nucleus conc. source
-REAL, DIMENSION(:,:), ALLOCATABLE  :: ZNAS     ! activated nucleus conc. source
-!
-! Other packed variables
-REAL, DIMENSION(:)  , ALLOCATABLE  :: ZRHODREF ! RHO Dry REFerence
-REAL, DIMENSION(:)  , ALLOCATABLE  :: ZEXNREF  ! EXNer Pressure REFerence
-REAL, DIMENSION(:)  , ALLOCATABLE  :: ZZT      ! Temperature
-!
-! Work arrays
-REAL, DIMENSION(:), ALLOCATABLE    :: ZZW1, ZZW2, ZZW3, ZZW4, ZZW5, ZZW6, &
-                                      ZRTMIN, ZCTMIN, &
-                                      ZZTDT,          & ! dT/dt
-                                      ZSMAX,          & ! Maximum supersaturation
-                                      ZVEC1
-!
-REAL, DIMENSION(:,:), ALLOCATABLE  :: ZTMP, ZCHEN_MULTI
-!
-REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3))   &
-                                   :: ZTDT, ZDRC, ZRVSAT, ZW  
-REAL, DIMENSION(SIZE(PNFS,1),SIZE(PNFS,2),SIZE(PNFS,3))               &
-                                   :: ZCONC_TOT         ! total CCN C. available
-!
-INTEGER, DIMENSION(:), ALLOCATABLE :: IVEC1             ! Vectors of indices for
-                                                        ! interpolations
-!
-! 
-REAL    :: ZEPS                                ! molar mass ratio
-REAL    :: ZS1, ZS2, ZXACC 
-INTEGER :: JMOD
-INTEGER :: IIB, IIE, IJB, IJE, IKB, IKE        ! Physical domain
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       1.     PREPARE COMPUTATIONS - PACK
-!   	        ---------------------------
-!
-!
-IIB=1+JPHEXT
-IIE=SIZE(PRHODREF,1) - JPHEXT
-IJB=1+JPHEXT
-IJE=SIZE(PRHODREF,2) - JPHEXT
-IKB=1+JPVEXT
-IKE=SIZE(PRHODREF,3) - JPVEXT
-!
-ALLOCATE(ZRTMIN(SIZE(XRTMIN)))
-ALLOCATE(ZCTMIN(SIZE(XCTMIN)))
-ZRTMIN(:) = XRTMIN(:) / PTSTEP
-ZCTMIN(:) = XCTMIN(:) / PTSTEP
-!
-!  Saturation vapor mixing ratio and radiative tendency                    
-!
-ZEPS= XMV / XMD
-!
-ZRVSAT(:,:,:) = ZEPS / (PPABST(:,:,:) * &
-                EXP(-XALPW+XBETAW/ZT(:,:,:)+XGAMW*ALOG(ZT(:,:,:))) - 1.0)
-ZTDT(:,:,:)   = 0.
-ZDRC(:,:,:)   = 0.
-IF (OACTIT) THEN
-   ZTDT(:,:,:)   = (ZT(:,:,:)-ZTM(:,:,:))/PTSTEP                   ! dT/dt 
-!!! JPP
-!!! JPP
-!!!   ZDRC(:,:,:)   = (PRCT(:,:,:)-PRCM(:,:,:))/PTSTEP                ! drc/dt
-   ZDRC(:,:,:)   = PRCS(:,:,:)-(PRCT(:,:,:)/PTSTEP)                ! drc/dt
-!!! JPP
-!!! JPP
-!!
-!! BV - W and drc/dt effect should not be included in ZTDT (already accounted for in the computations) ?  
-!!
-!!   ZTDT(:,:,:)   = MIN(0.,ZTDT(:,:,:)+(XG*PW_NU(:,:,:))/XCPD- &
-!!        (XLVTT+(XCPV-XCL)*(ZT(:,:,:)-XTT))*ZDRC(:,:,:)/XCPD)
-END IF
-!
-!  find locations where CCN are available
-!
-ZCONC_TOT(:,:,:) = 0.0
-DO JMOD = 1, NMOD_CCN 
-   ZCONC_TOT(:,:,:) = ZCONC_TOT(:,:,:) + PNFS(:,:,:,JMOD) ! sum over the free CCN
-ENDDO
-!
-!  optimization by looking for locations where
-!  the updraft velocity is positive!!!
-!
-GNUCT(:,:,:) = .FALSE.
-!
-! NEW : -22°C = limit sup for condensation freezing in Fridlin et al., 2007
-IF( OACTIT ) THEN
-   GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) = (PW_NU(IIB:IIE,IJB:IJE,IKB:IKE)>XWMIN  .OR. &
-                                      ZTDT(IIB:IIE,IJB:IJE,IKB:IKE)<XTMIN) .AND.&
-            PRVT(IIB:IIE,IJB:IJE,IKB:IKE)>(0.98*ZRVSAT(IIB:IIE,IJB:IJE,IKB:IKE))&
-             .AND. ZT(IIB:IIE,IJB:IJE,IKB:IKE)>(XTT-22.)                        &
-             .AND. ZCONC_TOT(IIB:IIE,IJB:IJE,IKB:IKE)>ZCTMIN(4)
-ELSE 
-   GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) =   PW_NU(IIB:IIE,IJB:IJE,IKB:IKE)>XWMIN .AND.&
-            PRVT(IIB:IIE,IJB:IJE,IKB:IKE)>(0.98*ZRVSAT(IIB:IIE,IJB:IJE,IKB:IKE))&
-             .AND. ZT(IIB:IIE,IJB:IJE,IKB:IKE)>(XTT-22.)                        &
-             .AND. ZCONC_TOT(IIB:IIE,IJB:IJE,IKB:IKE)>ZCTMIN(4)
-END IF
-INUCT = COUNTJV( GNUCT(:,:,:),I1(:),I2(:),I3(:))
-!
-!
-IF( INUCT >= 1 ) THEN
-!
-   ALLOCATE(ZNFS(INUCT,NMOD_CCN))
-   ALLOCATE(ZNAS(INUCT,NMOD_CCN))
-   ALLOCATE(ZTMP(INUCT,NMOD_CCN))
-   ALLOCATE(ZCCS(INUCT))
-   ALLOCATE(ZZT(INUCT)) 
-   ALLOCATE(ZZTDT(INUCT)) 
-   ALLOCATE(ZZW1(INUCT))
-   ALLOCATE(ZZW2(INUCT))
-   ALLOCATE(ZZW3(INUCT))
-   ALLOCATE(ZZW4(INUCT))
-   ALLOCATE(ZZW5(INUCT))
-   ALLOCATE(ZZW6(INUCT))
-   ALLOCATE(ZCHEN_MULTI(INUCT,NMOD_CCN))
-   ALLOCATE(ZVEC1(INUCT))
-   ALLOCATE(IVEC1(INUCT))
-   ALLOCATE(ZRHODREF(INUCT)) 
-   ALLOCATE(ZEXNREF(INUCT)) 
-   DO JL=1,INUCT
-      ZCCS(JL) = PCCS(I1(JL),I2(JL),I3(JL))
-      ZZT(JL)  = ZT(I1(JL),I2(JL),I3(JL))
-      ZZW1(JL) = ZRVSAT(I1(JL),I2(JL),I3(JL))
-      ZZW2(JL) = PW_NU(I1(JL),I2(JL),I3(JL))
-      ZZTDT(JL)  = ZTDT(I1(JL),I2(JL),I3(JL))
-      ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL))
-      ZEXNREF(JL)  = PEXNREF(I1(JL),I2(JL),I3(JL))
-      DO JMOD = 1,NMOD_CCN
-         ZNFS(JL,JMOD)        = PNFS(I1(JL),I2(JL),I3(JL),JMOD)
-         ZNAS(JL,JMOD)        = PNAS(I1(JL),I2(JL),I3(JL),JMOD)
-         ZCHEN_MULTI(JL,JMOD) = (ZNFS(JL,JMOD)+ZNAS(JL,JMOD))*PTSTEP*ZRHODREF(JL) &
-                                                             / XLIMIT_FACTOR(JMOD)
-      ENDDO
-   ENDDO
-!
-   ZZW1(:) = 1.0/ZEPS + 1.0/ZZW1(:)                                   &
-             + (((XLVTT+(XCPV-XCL)*(ZZT(:)-XTT))/ZZT(:))**2)/(XCPD*XRV) ! Psi2
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       2. compute the constant term (ZZW3) relative to smax    
-!   	 ----------------------------------------------------
-!
-!  Remark : in LIMA's nucleation parameterization, Smax=0.01 for a supersaturation of 1% !
-!
-!
-   ZVEC1(:) = MAX( 1.00001, MIN( FLOAT(NAHEN)-0.00001, &
-                                 XAHENINTP1 * ZZT(:) + XAHENINTP2 )  )
-   IVEC1(:) = INT( ZVEC1(:) )
-   ZVEC1(:) = ZVEC1(:) - FLOAT( IVEC1(:) )
-   ALLOCATE(ZSMAX(INUCT))
-!
-!
-   IF (OACTIT) THEN ! including a cooling rate
-!
-!       Compute the tabulation of function of ZZW3 :
-!
-!                                                  (Psi1*w+Psi3*DT/Dt)**1.5 
-!       ZZW3 = XAHENG*(Psi1*w + Psi3*DT/Dt)**1.5 = ------------------------ 
-!                                                   2*pi*rho_l*G**(3/2)     
-!
-!
-        ZZW4(:)=XPSI1( IVEC1(:)+1)*ZZW2(:)+XPSI3(IVEC1(:)+1)*ZZTDT(:)
-        ZZW5(:)=XPSI1( IVEC1(:)  )*ZZW2(:)+XPSI3(IVEC1(:)  )*ZZTDT(:)
-        WHERE (ZZW4(:) < 0. .OR. ZZW5(:) < 0.)
-           ZZW4(:) = 0.
-           ZZW5(:) = 0.
-        END WHERE
-        ZZW3(:) =   XAHENG( IVEC1(:)+1)*(ZZW4(:)**1.5)* ZVEC1(:)      &
-                  - XAHENG( IVEC1(:)  )*(ZZW5(:)**1.5)*(ZVEC1(:) - 1.0)
-                       ! Cste*((Psi1*w+Psi3*dT/dt)/(G))**1.5
-!
-!
-   ELSE ! OACTIT , for clouds
-!
-!
-!       Compute the tabulation of function of ZZW3 :
-!
-!                                             (Psi1 * w)**1.5       
-!       ZZW3 = XAHENG * (Psi1 * w)**1.5  = -------------------------
-!                                            2 pi rho_l * G**(3/2)  
-!
-!
-        ZZW3(:)=XAHENG(IVEC1(:)+1)*((XPSI1(IVEC1(:)+1)*ZZW2(:))**1.5)* ZVEC1(:)    &
-               -XAHENG(IVEC1(:)  )*((XPSI1(IVEC1(:)  )*ZZW2(:))**1.5)*(ZVEC1(:)-1.0)
-!
-   END IF ! OACTIT
-!
-!
-!              (Psi1*w+Psi3*DT/Dt)**1.5   rho_air
-!       ZZW3 = ------------------------ * -------
-!                 2*pi*rho_l*G**(3/2)       Psi2
-!
-   ZZW5(:) = 1.
-   ZZW3(:) = (ZZW3(:)/ZZW1(:))*ZRHODREF(:) ! R.H.S. of Eq 9 of CPB 98 but
-                                           ! for multiple aerosol modes
-   WHERE (ZZW3(:) == 0.)
-      ZZW5(:) = -1.
-   END WHERE
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       3. Compute the maximum of supersaturation
-!   	 -----------------------------------------
-!
-!
-! estimate S_max for the CPB98 parameterization with SEVERAL aerosols mode
-! Reminder : Smax=0.01 for a 1% supersaturation
-!
-! Interval bounds to tabulate sursaturation Smax
-! Check with values used for tabulation in ini_lima_warm.f90
-   ZS1 = 1.0E-5                   ! corresponds to  0.001% supersaturation
-   ZS2 = 5.0E-2                   ! corresponds to 5.0% supersaturation 
-   ZXACC = 1.0E-7                 ! Accuracy needed for the search in [NO UNITS]
-!
-   ZSMAX(:) = ZRIDDR(ZS1,ZS2,ZXACC,ZZW3(:),INUCT)    ! ZSMAX(:) is in [NO UNITS]
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       4. Compute the nucleus source
-!   	 -----------------------------
-!
-!
-! Again : Smax=0.01 for a 1% supersaturation
-! Modified values for Beta and C (see in init_aerosol_properties) account for that
-!
-   WHERE (ZZW5(:) > 0. .AND. ZSMAX(:) > 0.)
-      ZVEC1(:) = MAX( 1.00001, MIN( FLOAT(NHYP)-0.00001,  &
-                                    XHYPINTP1*LOG(ZSMAX(:))+XHYPINTP2 ) )
-      IVEC1(:) = INT( ZVEC1(:) )
-      ZVEC1(:) = ZVEC1(:) - FLOAT( IVEC1(:) )
-   END WHERE
-   ZZW6(:)  = 0. ! initialize the change of cloud droplet concentration
-!
-   ZTMP(:,:)=0.0
-!
-! Compute the concentration of activable aerosols for each mode
-! based on the max of supersaturation ( -> ZTMP )
-!
-   DO JMOD = 1, NMOD_CCN                     ! iteration on mode number
-      ZZW1(:) = 0.
-      ZZW2(:) = 0.
-      ZZW3(:) = 0.
-   !
-      WHERE( ZSMAX(:)>0.0 )
-         ZZW2(:) =  XHYPF12( IVEC1(:)+1,JMOD )* ZVEC1(:)      & ! hypergeo function
-                  - XHYPF12( IVEC1(:)  ,JMOD )*(ZVEC1(:) - 1.0) ! XHYPF12 is tabulated
-   !
-         ZTMP(:,JMOD) = (ZCHEN_MULTI(:,JMOD)/ZRHODREF(:))*ZSMAX(:)**XKHEN_MULTI(JMOD) &
-                                                         *ZZW2(:)/PTSTEP
-      ENDWHERE
-   ENDDO
-!
-! Compute the concentration of aerosols activated at this time step
-! as the difference between ZTMP and the aerosols already activated at t-dt (ZZW1)
-!
-   DO JMOD = 1, NMOD_CCN                     ! iteration on mode number
-      ZZW1(:) = 0.
-      ZZW2(:) = 0.
-      ZZW3(:) = 0.
-   !
-      WHERE( SUM(ZTMP(:,:),DIM=2)*PTSTEP .GT. 25.E6/ZRHODREF(:) ) 
-         ZZW1(:) = MIN( ZNFS(:,JMOD),MAX( ZTMP(:,JMOD)- ZNAS(:,JMOD) , 0.0 ) )
-      ENDWHERE
-   !
-   !* update the concentration of activated CCN = Na
-   !
-      PNAS(:,:,:,JMOD) = PNAS(:,:,:,JMOD) +                            &
-                         UNPACK( ZZW1(:), MASK=GNUCT(:,:,:), FIELD=0.0 )
-   !
-   !* update the concentration of free CCN = Nf
-   !
-      PNFS(:,:,:,JMOD) = PNFS(:,:,:,JMOD) -                            &
-                         UNPACK( ZZW1(:), MASK=GNUCT(:,:,:), FIELD=0.0 )
-   !
-   !* prepare to update the cloud water concentration 
-   !
-      ZZW6(:) = ZZW6(:) + ZZW1(:)
-   ENDDO
-!
-! Update PRVS, PRCS, PCCS, and PTHS
-!
-   ZZW1(:)=0.
-   WHERE (ZZW5(:)>0.0 .AND. ZSMAX(:)>0.0) ! ZZW1 is computed with ZSMAX [NO UNIT]
-      ZZW1(:) = MIN(XCSTDCRIT*ZZW6(:)/(((ZZT(:)*ZSMAX(:))**3)*ZRHODREF(:)),1.E-5)
-   END WHERE
-   ZW(:,:,:) = MIN( UNPACK( ZZW1(:),MASK=GNUCT(:,:,:),FIELD=0.0 ),PRVS(:,:,:) )
-!
-   PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:)
-   PRCS(:,:,:) = PRCS(:,:,:) + ZW(:,:,:) 
-   ZW(:,:,:)   = ZW(:,:,:) * (XLVTT+(XCPV-XCL)*(ZT(:,:,:)-XTT))/                &
-            (PEXNREF(:,:,:)*(XCPD+XCPV*PRVT(:,:,:)+XCL*(PRCT(:,:,:)+PRRT(:,:,:))))
-   PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)
-!
-   ZW(:,:,:)   = PCCS(:,:,:)
-   PCCS(:,:,:) = UNPACK( ZZW6(:)+ZCCS(:),MASK=GNUCT(:,:,:),FIELD=ZW(:,:,:) )
-!
-   ZW(:,:,:)   = UNPACK( 100.0*ZSMAX(:),MASK=GNUCT(:,:,:),FIELD=0.0 )
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       5. Cleaning
-!   	 -----------
-!
-!
-   DEALLOCATE(IVEC1)
-   DEALLOCATE(ZVEC1)
-   DEALLOCATE(ZNFS)
-   DEALLOCATE(ZNAS)
-   DEALLOCATE(ZCCS)
-   DEALLOCATE(ZZT)
-   DEALLOCATE(ZSMAX)
-   DEALLOCATE(ZZW1)
-   DEALLOCATE(ZZW2)
-   DEALLOCATE(ZZW3)
-   DEALLOCATE(ZZW4)
-   DEALLOCATE(ZZW5)
-   DEALLOCATE(ZZW6)
-   DEALLOCATE(ZZTDT)
-   DEALLOCATE(ZRHODREF)
-   DEALLOCATE(ZCHEN_MULTI)
-   DEALLOCATE(ZEXNREF)
-!
-END IF ! INUCT
-!
-DEALLOCATE(ZCTMIN)
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       6. Functions used to compute the maximum of supersaturation
-!   	 -----------------------------------------------------------
-!
-!
-CONTAINS
-!------------------------------------------------------------------------------
-!
-  FUNCTION ZRIDDR(PX1,PX2INIT,PXACC,PZZW3,NPTS)  RESULT(PZRIDDR)
-!
-!
-!!****  *ZRIDDR* - iterative algorithm to find root of a function
-!!
-!!
-!!    PURPOSE
-!!    -------
-!!       The purpose of this function is to find the root of a given function
-!!     the arguments are the brackets bounds (the interval where to find the root)
-!!     the accuracy needed and the input parameters of the given function.
-!!     Using Ridders' method, return the root of a function known to lie between 
-!!     PX1 and PX2. The root, returned as PZRIDDR, will be refined to an approximate
-!!     accuracy PXACC.
-!! 
-!!**  METHOD
-!!    ------
-!!       Ridders' method
-!!
-!!    EXTERNAL
-!!    --------
-!!       FUNCSMAX  
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!    REFERENCE
-!!    ---------
-!!      NUMERICAL RECIPES IN FORTRAN 77: THE ART OF SCIENTIFIC COMPUTING 
-!!     (ISBN 0-521-43064-X)
-!!      Copyright (C) 1986-1992 by Cambridge University Press.
-!!      Programs Copyright (C) 1986-1992 by Numerical Recipes Software.
-!!
-!!    AUTHOR
-!!    ------
-!!      Frederick Chosson *CERFACS*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original     12/07/07
-!!      S.BERTHET        2008 vectorization 
-!------------------------------------------------------------------------------
-!
-!*       0. DECLARATIONS
-!
-!
-IMPLICIT NONE
-!
-!*       0.1 declarations of arguments and result
-!
-INTEGER,            INTENT(IN)     :: NPTS
-REAL, DIMENSION(:), INTENT(IN)     :: PZZW3
-REAL,               INTENT(IN)     :: PX1, PX2INIT, PXACC
-REAL, DIMENSION(:), ALLOCATABLE    :: PZRIDDR
-!
-!*       0.2 declarations of local variables
-!
-!
-INTEGER, PARAMETER                 :: MAXIT=60
-REAL,    PARAMETER                 :: UNUSED=0.0 !-1.11e30
-REAL,    DIMENSION(:), ALLOCATABLE :: fh,fl, fm,fnew
-REAL                               :: s,xh,xl,xm,xnew
-REAL                               :: PX2
-INTEGER                            :: j, JL
-!
-ALLOCATE(  fh(NPTS))
-ALLOCATE(  fl(NPTS))
-ALLOCATE(  fm(NPTS))
-ALLOCATE(fnew(NPTS))
-ALLOCATE(PZRIDDR(NPTS))
-!
-PZRIDDR(:)= UNUSED
-PX2       = PX2INIT 
-fl(:)     = FUNCSMAX(PX1,PZZW3(:),NPTS)
-fh(:)     = FUNCSMAX(PX2,PZZW3(:),NPTS)
-!
-DO JL = 1, NPTS
-   PX2 = PX2INIT
-100 if ((fl(JL) > 0.0 .and. fh(JL) < 0.0) .or. (fl(JL) < 0.0 .and. fh(JL) > 0.0)) then
-      xl         = PX1
-      xh         = PX2
-      do j=1,MAXIT
-         xm     = 0.5*(xl+xh)
-         fm(JL) = SINGL_FUNCSMAX(xm,PZZW3(JL),JL)
-         s      = sqrt(fm(JL)**2-fl(JL)*fh(JL))
-         if (s == 0.0) then
-            GO TO 101
-         endif
-         xnew  = xm+(xm-xl)*(sign(1.0,fl(JL)-fh(JL))*fm(JL)/s)
-         if (abs(xnew - PZRIDDR(JL)) <= PXACC) then
-            GO TO 101 
-         endif
-         PZRIDDR(JL) = xnew
-         fnew(JL)  = SINGL_FUNCSMAX(PZRIDDR(JL),PZZW3(JL),JL)
-         if (fnew(JL) == 0.0) then
-            GO TO 101
-         endif
-         if (sign(fm(JL),fnew(JL)) /= fm(JL)) then
-            xl    =xm
-            fl(JL)=fm(JL)
-            xh    =PZRIDDR(JL)
-            fh(JL)=fnew(JL)
-         else if (sign(fl(JL),fnew(JL)) /= fl(JL)) then
-            xh    =PZRIDDR(JL)
-            fh(JL)=fnew(JL)
-         else if (sign(fh(JL),fnew(JL)) /= fh(JL)) then
-            xl    =PZRIDDR(JL)
-            fl(JL)=fnew(JL)
-         else if (PX2 .lt. 0.05) then
-            PX2 = PX2 + 1.0E-2
-            PRINT*, 'PX2 ALWAYS too small, we put a greater one : PX2 =',PX2
-            fh(JL)   = SINGL_FUNCSMAX(PX2,PZZW3(JL),JL)
-            go to 100
-            print*, 'PZRIDDR: never get here'
-            STOP
-         end if
-         if (abs(xh-xl) <= PXACC) then
-            GO TO 101 
-         endif
-!!SB
-!!$      if (j == MAXIT .and. (abs(xh-xl) > PXACC) ) then
-!!$        PZRIDDR(JL)=0.0
-!!$        go to 101
-!!$      endif   
-!!SB
-      end do
-      print*, 'PZRIDDR: exceeded maximum iterations',j
-      STOP
-   else if (fl(JL) == 0.0) then
-      PZRIDDR(JL)=PX1
-   else if (fh(JL) == 0.0) then
-      PZRIDDR(JL)=PX2
-   else if (PX2 .lt. 0.05) then
-      PX2 = PX2 + 1.0E-2
-      PRINT*, 'PX2 too small, we put a greater one : PX2 =',PX2
-      fh(JL)   = SINGL_FUNCSMAX(PX2,PZZW3(JL),JL)
-      go to 100
-   else
-!!$      print*, 'PZRIDDR: root must be bracketed'
-!!$      print*,'npts ',NPTS,'jl',JL
-!!$      print*, 'PX1,PX2,fl,fh',PX1,PX2,fl(JL),fh(JL)
-!!$      print*, 'PX2 = 30 % of supersaturation, there is no solution for Smax'
-!!$      print*, 'try to put greater PX2 (upper bound for Smax research)'
-!!$      STOP
-      PZRIDDR(JL)=0.0
-      go to 101
-   end if
-101 ENDDO
-!
-DEALLOCATE(  fh)
-DEALLOCATE(  fl)
-DEALLOCATE(  fm)
-DEALLOCATE(fnew)
-!
-END FUNCTION ZRIDDR
-!
-!------------------------------------------------------------------------------
-!
-  FUNCTION FUNCSMAX(PPZSMAX,PPZZW3,NPTS)  RESULT(PFUNCSMAX)
-!
-!
-!!****  *FUNCSMAX* - function describing SMAX function that you want to find the root
-!!
-!!
-!!    PURPOSE
-!!    -------
-!!       This function describe the equilibrium between Smax and two aerosol mode
-!!     acting as CCN. This function is derive from eq. (9) of CPB98 but for two
-!!     aerosols mode described by their respective parameters C, k, Mu, Beta.
-!!     the arguments are the supersaturation in "no unit" and the r.h.s. of this eq.
-!!     and the ratio of concentration of injected aerosols on maximum concentration
-!!     of injected aerosols ever.
-!!**  METHOD
-!!    ------
-!!       This function is called by zriddr.f90
-!!
-!!    EXTERNAL
-!!    --------
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!    Module MODD_PARAM_LIMA_WARM
-!!        XHYPF32
-!!
-!!        XHYPINTP1
-!!        XHYPINTP2
-!!
-!!    Module MODD_PARAM_C2R2
-!!        XKHEN_MULTI()
-!!        NMOD_CCN
-!!       
-!!    REFERENCE
-!!    ---------
-!!    Cohard, J.M., J.P.Pinty, K.Suhre, 2000:"On the parameterization of activation
-!!             spectra from cloud condensation nuclei microphysical properties",
-!!             J. Geophys. Res., Vol.105, N0.D9, pp. 11753-11766
-!!
-!!    AUTHOR
-!!    ------
-!!      Frederick Chosson *CERFACS*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original     12/07/07
-!!      S.Berthet    19/03/08 Extension a une population multimodale d aerosols
-!
-!------------------------------------------------------------------------------
-!
-!*       0. DECLARATIONS
-!
-IMPLICIT NONE
-!
-!*       0.1 declarations of arguments and result
-!
-INTEGER,            INTENT(IN)  :: NPTS
-REAL,               INTENT(IN)  :: PPZSMAX   ! supersaturation is already in no units
-REAL, DIMENSION(:), INTENT(IN)  :: PPZZW3    ! 
-REAL, DIMENSION(:), ALLOCATABLE :: PFUNCSMAX ! 
-!
-!*       0.2 declarations of local variables
-!
-REAL                           :: ZHYPF
-!
-REAL                           :: PZVEC1
-INTEGER                        :: PIVEC1
-!
-ALLOCATE(PFUNCSMAX(NPTS))
-!
-PFUNCSMAX(:) = 0.
-PZVEC1 = MAX( 1.00001,MIN( FLOAT(NHYP)-0.00001,               &
-                           XHYPINTP1*LOG(PPZSMAX)+XHYPINTP2 ) )
-PIVEC1 = INT( PZVEC1 )
-PZVEC1 = PZVEC1 - FLOAT( PIVEC1 )
-DO JMOD = 1, NMOD_CCN
-   ZHYPF        = 0.          ! XHYPF32 is tabulated with ZSMAX in [NO UNITS]
-   ZHYPF        =   XHYPF32( PIVEC1+1,JMOD ) * PZVEC1              &
-                  - XHYPF32( PIVEC1  ,JMOD ) *(PZVEC1 - 1.0)
-                             ! sum of s**(ki+2) * F32 * Ci * ki * beta(ki/2,3/2)
-   PFUNCSMAX(:) =  PFUNCSMAX(:) + (PPZSMAX)**(XKHEN_MULTI(JMOD) + 2) &
-                 * ZHYPF* XKHEN_MULTI(JMOD) * ZCHEN_MULTI(:,JMOD)    &
-                 * GAMMA_X0D( XKHEN_MULTI(JMOD)/2.0)*GAMMA_X0D(3.0/2.0)      &
-                 / GAMMA_X0D((XKHEN_MULTI(JMOD)+3.0)/2.0)
-ENDDO
-! function l.h.s. minus r.h.s. of eq. (9) of CPB98 but for NMOD_CCN aerosol mode
-PFUNCSMAX(:) = PFUNCSMAX(:) - PPZZW3(:)
-!
-END FUNCTION FUNCSMAX
-!
-!------------------------------------------------------------------------------
-!
-  FUNCTION SINGL_FUNCSMAX(PPZSMAX,PPZZW3,KINDEX)  RESULT(PSINGL_FUNCSMAX)
-!
-!
-!!****  *SINGL_FUNCSMAX* - same function as FUNCSMAX
-!!
-!!
-!!    PURPOSE
-!!    -------
-!        As for FUNCSMAX but for a scalar
-!!
-!!**  METHOD
-!!    ------
-!!       This function is called by zriddr.f90
-!!
-!------------------------------------------------------------------------------
-!
-!*       0. DECLARATIONS
-!
-IMPLICIT NONE
-!
-!*       0.1 declarations of arguments and result
-!
-INTEGER,            INTENT(IN)  :: KINDEX
-REAL,               INTENT(IN)  :: PPZSMAX   ! supersaturation is "no unit"
-REAL,               INTENT(IN)  :: PPZZW3    ! 
-REAL                            :: PSINGL_FUNCSMAX ! 
-!
-!*       0.2 declarations of local variables
-!
-REAL                           :: ZHYPF
-!
-REAL                           :: PZVEC1
-INTEGER                        :: PIVEC1
-!
-PSINGL_FUNCSMAX = 0.
-PZVEC1    = MAX( 1.00001,MIN( FLOAT(NHYP)-0.00001,               &
-                              XHYPINTP1*LOG(PPZSMAX)+XHYPINTP2 ) )
-PIVEC1 = INT( PZVEC1 )
-PZVEC1 = PZVEC1 - FLOAT( PIVEC1 )
-DO JMOD = 1, NMOD_CCN
-   ZHYPF        = 0.          ! XHYPF32 is tabulated with ZSMAX in [NO UNITS]
-   ZHYPF        =   XHYPF32( PIVEC1+1,JMOD ) * PZVEC1              &
-                  - XHYPF32( PIVEC1  ,JMOD ) *(PZVEC1 - 1.0)
-                             ! sum of s**(ki+2) * F32 * Ci * ki * bêta(ki/2,3/2)
-   PSINGL_FUNCSMAX = PSINGL_FUNCSMAX + (PPZSMAX)**(XKHEN_MULTI(JMOD) + 2)   &
-                   * ZHYPF* XKHEN_MULTI(JMOD) * ZCHEN_MULTI(KINDEX,JMOD) &
-                   * GAMMA_X0D( XKHEN_MULTI(JMOD)/2.0)*GAMMA_X0D(3.0/2.0)        &
-                   / GAMMA_X0D((XKHEN_MULTI(JMOD)+3.0)/2.0)
-ENDDO
-! function l.h.s. minus r.h.s. of eq. (9) of CPB98 but for NMOD_CCN aerosol mode
-PSINGL_FUNCSMAX = PSINGL_FUNCSMAX - PPZZW3
-!
-END FUNCTION SINGL_FUNCSMAX
-!
-!-----------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_WARM_NUCL
diff --git a/src/arome/micro/lima_warm_sedimentation.F90 b/src/arome/micro/lima_warm_sedimentation.F90
deleted file mode 100644
index 28a8fde5d75af1c47968fb2dae03ac3cfc441871..0000000000000000000000000000000000000000
--- a/src/arome/micro/lima_warm_sedimentation.F90
+++ /dev/null
@@ -1,425 +0,0 @@
-!      ###################################
-       MODULE MODI_LIMA_WARM_SEDIMENTATION
-!      ###################################
-!
-INTERFACE
-      SUBROUTINE LIMA_WARM_SEDIMENTATION (OSEDC, KSPLITR, PTSTEP, KMI,  &
-                                          HFMFILE, HLUOUT, OCLOSE_OUT,  &
-                                          PZZ, PRHODREF, PPABST, ZT,    &
-                                          ZWLBDC,                       &
-                                          PRCT, PRRT, PCCT, PCRT,       &
-                                          PRCS, PRRS, PCCS, PCRS,       &
-                                          PINPRC, PINPRR, PINPRR3D )
-!
-LOGICAL,                  INTENT(IN)    :: OSEDC      ! switch to activate the 
-                                                      ! cloud droplet sedimentation
-INTEGER,                  INTENT(IN)    :: KSPLITR    ! Number of small time step 
-                                                      ! for sedimendation
-REAL,                     INTENT(IN)    :: PTSTEP     ! Double Time step
-                                                      ! (single if cold start)
-INTEGER,                  INTENT(IN)    :: KMI        ! Model index 
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE    ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)    :: HLUOUT     ! Output-listing name for
-                                                      ! model n
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                      ! the tput FM fileoutp
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ        ! Height (z)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF   ! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST     ! abs. pressure at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: ZT         ! Temperature
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: ZWLBDC     ! libre parcours moyen
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT       ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT       ! Rain water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCCT       ! Cloud water C. at t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCRT       ! Rain water C. at t
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRCS       ! Cloud water m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRRS       ! Rain water m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCCS       ! Cloud water C. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCRS       ! Rain water C. source
-!
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRC     ! Cloud instant precip
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRR     ! Rain instant precip
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PINPRR3D   ! Rain inst precip 3D
-!
-END SUBROUTINE LIMA_WARM_SEDIMENTATION
-END INTERFACE
-END MODULE MODI_LIMA_WARM_SEDIMENTATION
-!     #####################################################################
-      SUBROUTINE LIMA_WARM_SEDIMENTATION (OSEDC, KSPLITR, PTSTEP, KMI,  &
-                                          HFMFILE, HLUOUT, OCLOSE_OUT,  &
-                                          PZZ, PRHODREF, PPABST, ZT,    &
-                                          ZWLBDC,                       &
-                                          PRCT, PRRT, PCCT, PCRT,       &
-                                          PRCS, PRRS, PCCS, PCRS,       &
-                                          PINPRC, PINPRR, PINPRR3D )
-!     #####################################################################
-!
-!!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the sedimentation
-!!    of cloud droplets and rain drops
-!!
-!!
-!!**  METHOD
-!!    ------
-!!      The sedimentation rates are computed with a time spliting technique: 
-!!    an upstream scheme, written as a difference of non-advective fluxes. 
-!!    This source term is added to the next coming time step (split-implicit 
-!!    process).
-!!
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!      Cohard, J.-M. and J.-P. Pinty, 2000: A comprehensive two-moment warm 
-!!      microphysical bulk scheme. 
-!!        Part I: Description and tests
-!!        Part II: 2D experiments with a non-hydrostatic model
-!!      Accepted for publication in Quart. J. Roy. Meteor. Soc. 
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_PARAMETERS,      ONLY : JPHEXT, JPVEXT
-USE MODD_CST,             ONLY : XRHOLW
-USE MODD_PARAM_LIMA,      ONLY : XRTMIN, XCTMIN, XALPHAC, XNUC, XCEXVT
-USE MODD_PARAM_LIMA_WARM, ONLY : XLBC, XLBEXC, XLBR, XLBEXR,        &
-                                 XFSEDRC, XFSEDCC, XFSEDRR, XFSEDCR,&
-                                 XDC, XDR
-USE MODI_LIMA_FUNCTIONS,  ONLY : COUNTJV
-USE MODI_GAMMA,           ONLY : GAMMA_X0D
-!
-USE YOMLUN   , ONLY : NULOUT
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-LOGICAL,                  INTENT(IN)    :: OSEDC      ! switch to activate the 
-                                                      ! cloud droplet sedimentation
-INTEGER,                  INTENT(IN)    :: KSPLITR    ! Number of small time step 
-                                                      ! for sedimendation
-REAL,                     INTENT(IN)    :: PTSTEP     ! Double Time step
-                                                      ! (single if cold start)
-INTEGER,                  INTENT(IN)    :: KMI        ! Model index 
-CHARACTER(LEN=*),         INTENT(IN)    :: HFMFILE    ! Name of the output FM-file
-CHARACTER(LEN=*),         INTENT(IN)    :: HLUOUT     ! Output-listing name for
-                                                      ! model n
-LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
-                                                      ! the tput FM fileoutp
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ        ! Height (z)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF   ! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST     ! abs. pressure at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: ZT         ! Temperature
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: ZWLBDC     ! libre parcours moyen
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT       ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT       ! Rain water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCCT       ! Cloud water C. at t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCRT       ! Rain water C. at t
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRCS       ! Cloud water m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRRS       ! Rain water m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCCS       ! Cloud water C. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCRS       ! Rain water C. source
-!
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRC     ! Cloud instant precip
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRR     ! Rain instant precip
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PINPRR3D   ! Rain inst precip 3D
-!
-!
-!*       0.2   Declarations of local variables :
-!
-! Packing variables
-LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: GSEDIM 
-INTEGER :: ISEDIM
-INTEGER , DIMENSION(SIZE(GSEDIM)) :: I1,I2,I3 ! Used to replace the COUNT
-INTEGER                           :: JL       ! and PACK intrinsics 
-!
-! Packed micophysical variables
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZRCT     ! Cloud water m.r. at t 
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZRRT     ! Rain water m.r. at t 
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZCCT     ! cloud conc. at t
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZCRT     ! rain conc. at t
-!
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZRCS     ! Cloud water m.r. source
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZRRS     ! Rain water m.r. source
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZCCS     ! cloud conc. source
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZCRS     ! rain conc. source
-!
-! Other packed variables
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZRHODREF ! RHO Dry REFerence
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZLBDC    
-REAL, DIMENSION(:)  , ALLOCATABLE :: ZLBDR    
-!
-! Work arrays
-REAL,    DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3))   &
-                                  :: ZW,             &
-                                     ZWLBDA,         &  ! Mean free path
-                                     ZRAY,           &  ! Mean volumic radius
-                                     ZCC                ! Terminal vertical velocity
-REAL,    DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)+1)   &
-                                  :: ZWSEDR, ZWSEDC     ! Sedim. fluxes
-!
-REAL, DIMENSION(:), ALLOCATABLE   :: ZZW1, ZZW2, ZZW3, &
-                                     ZTCC,             &
-                                     ZRTMIN, ZCTMIN
-!
-!
-INTEGER :: JK            ! Vertical loop index for the rain sedimentation 
-INTEGER :: JN            ! Temporal loop index for the rain sedimentation
-INTEGER :: IIB, IIE, IJB, IJE, IKB, IKE           ! Physical domain
-REAL    :: ZTSPLITR      ! Small time step for rain sedimentation
-!
-INTEGER :: IKMAX 
-!
-!!!!!!!!!!! Entiers pour niveaux inversés dans AROME !!!!!!!!!!!!!!!!!!!!!!!!!!!
-INTEGER :: IBOTTOM, INVLVL
-!
-!-------------------------------------------------------------------------------
-!
-!        0. Prepare computations
-!        -----------------------
-!
-!
-ALLOCATE(ZRTMIN(SIZE(XCTMIN)))
-ALLOCATE(ZCTMIN(SIZE(XCTMIN)))
-ZRTMIN(:) = XRTMIN(:) / PTSTEP
-ZCTMIN(:) = XCTMIN(:) / PTSTEP
-!
-IIB=1+JPHEXT
-IIE=SIZE(PZZ,1) - JPHEXT
-IJB=1+JPHEXT
-IJE=SIZE(PZZ,2) - JPHEXT
-IKB=1+JPVEXT
-IKE=SIZE(PZZ,3) - JPVEXT
-!
-!!!!!!!!!!! Entiers pour niveaux inversés dans AROME !!!!!!!!!!!!!!!!!!!!!!!!!!!
-IBOTTOM=IKE
-INVLVL=-1
-!
-ZWSEDR(:,:,:)=0.
-ZWSEDC(:,:,:)=0.
-IKMAX=SIZE(PRHODREF,3)
-!
-ZTSPLITR= PTSTEP / FLOAT(KSPLITR)
-!
-PINPRC(:,:) = 0.
-PINPRR(:,:) = 0.
-PINPRR3D(:,:,:) = 0.
-!
-IF (OSEDC) THEN
-   ZWLBDA(:,:,:) = 0.
-   ZRAY(:,:,:)   = 0.
-   ZCC(:,:,:) = 1. 
-   DO JK=IKB,IKE
-      ZWLBDA(:,:,JK) = 6.6E-8*(101325./PPABST(:,:,JK))*(ZT(:,:,JK)/293.15)
-   END DO
-   WHERE (PRCT(:,:,:)>XRTMIN(2) .AND. PCCT(:,:,:)>XCTMIN(2))
-      ZRAY(:,:,:) = 0.5*GAMMA_X0D(XNUC+1./XALPHAC)/(GAMMA_X0D(XNUC)*ZWLBDC(:,:,:))
-      ! ZCC : Corrective Cunningham term for the terminal velocity
-      ZCC(:,:,:)=1.+1.26*ZWLBDA(:,:,:)/ZRAY(:,:,:)
-   END WHERE
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-!
-!        1. Computations only where necessary
-!        ------------------------------------
-!
-!
-DO JN = 1 , KSPLITR
-   GSEDIM(:,:,:) = .FALSE.
-   GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) = PRRS(IIB:IIE,IJB:IJE,IKB:IKE)>ZRTMIN(3) &
-                               .AND. PCRS(IIB:IIE,IJB:IJE,IKB:IKE)>ZCTMIN(3)
-   IF( OSEDC ) THEN
-      GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) = GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) .OR.    &
-                                       (PRCS(IIB:IIE,IJB:IJE,IKB:IKE)>ZRTMIN(2) &
-                                  .AND. PCCS(IIB:IIE,IJB:IJE,IKB:IKE)>ZCTMIN(2) )
-   END IF
-!
-   ISEDIM = COUNTJV( GSEDIM(:,:,:),I1(:),I2(:),I3(:))
-   IF( ISEDIM >= 1 ) THEN
-!
-      IF( JN==1 ) THEN
-         IF( OSEDC ) THEN
-            PRCS(:,:,:) = PRCS(:,:,:) * PTSTEP
-            PCCS(:,:,:) = PCCS(:,:,:) * PTSTEP
-         END IF
-         PRRS(:,:,:) = PRRS(:,:,:) * PTSTEP
-         PCRS(:,:,:) = PCRS(:,:,:) * PTSTEP
-         DO JK = IKB , IKE
-!Dans AROME, PZZ = épaisseur de la couche
-!            ZW(:,:,JK)=ZTSPLITR/(PZZ(:,:,JK+1)-PZZ(:,:,JK))
-            ZW(:,:,JK)=ZTSPLITR/(PZZ(:,:,JK))
-         END DO
-      END IF
-!
-      ALLOCATE(ZRHODREF(ISEDIM))
-      DO JL = 1,ISEDIM
-         ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL))
-      END DO
-!
-      ALLOCATE(ZZW1(ISEDIM)) 
-      ALLOCATE(ZZW2(ISEDIM)) 
-      ALLOCATE(ZZW3(ISEDIM)) 
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!        2. Cloud droplets sedimentation
-!        -------------------------------
-!
-!
-      IF( OSEDC .AND. MAXVAL(PRCS(:,:,:))>ZRTMIN(2) ) THEN
-         ZZW1(:) = 0.0
-         ZZW2(:) = 0.0
-         ZZW3(:) = 0.0
-         ALLOCATE(ZRCS(ISEDIM))
-         ALLOCATE(ZCCS(ISEDIM))
-         ALLOCATE(ZRCT(ISEDIM))
-         ALLOCATE(ZCCT(ISEDIM))
-         ALLOCATE(ZTCC(ISEDIM))
-         ALLOCATE(ZLBDC(ISEDIM))
-         DO JL = 1,ISEDIM
-            ZRCS(JL) = PRCS(I1(JL),I2(JL),I3(JL))
-            ZCCS(JL) = PCCS(I1(JL),I2(JL),I3(JL))
-            ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL))
-            ZCCT(JL) = PCCT(I1(JL),I2(JL),I3(JL))
-            ZTCC(JL) = ZCC (I1(JL),I2(JL),I3(JL))
-         END DO
-         ZLBDC(:) = 1.E15
-         WHERE (ZRCT(:)>XRTMIN(2) .AND. ZCCT(:)>XCTMIN(2))
-            ZLBDC(:) = ( XLBC*ZCCT(:) / ZRCT(:) )**XLBEXC
-         END WHERE
-         WHERE( ZRCS(:)>ZRTMIN(2) )
-            ZZW3(:) = ZRHODREF(:)**(-XCEXVT) * ZLBDC(:)**(-XDC)
-            ZZW1(:) = ZTCC(:) * XFSEDRC * ZRCS(:) * ZZW3(:) * ZRHODREF(:)
-            ZZW2(:) = ZTCC(:) * XFSEDCC * ZCCS(:) * ZZW3(:) * ZRHODREF(:) 
-         END WHERE
-         ZWSEDR(:,:,1:IKMAX) = UNPACK( ZZW1(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
-         ZWSEDC(:,:,1:IKMAX) = UNPACK( ZZW2(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
-         DO JK = IKB+1 , IKE
-            PRCS(:,:,JK) = PRCS(:,:,JK) + ZW(:,:,JK)*                       &
-                 (ZWSEDR(:,:,JK+1*INVLVL)-ZWSEDR(:,:,JK))/PRHODREF(:,:,JK)
-            PCCS(:,:,JK) = PCCS(:,:,JK) + ZW(:,:,JK)*                       &
-                 (ZWSEDC(:,:,JK+1*INVLVL)-ZWSEDC(:,:,JK))/PRHODREF(:,:,JK)
-         END DO
-            PRCS(:,:,1) = PRCS(:,:,1) + ZW(:,:,1)*                       &
-                 (0.-ZWSEDR(:,:,1))/PRHODREF(:,:,1)
-            PCCS(:,:,1) = PCCS(:,:,1) + ZW(:,:,1)*                       &
-                 (0.-ZWSEDC(:,:,1))/PRHODREF(:,:,1)
-         DEALLOCATE(ZRCS)
-         DEALLOCATE(ZCCS)
-         DEALLOCATE(ZRCT)
-         DEALLOCATE(ZCCT)
-         DEALLOCATE(ZTCC)
-         DEALLOCATE(ZLBDC)
-!
-         PINPRC(:,:) = PINPRC(:,:) + ZWSEDR(:,:,IBOTTOM)/XRHOLW/KSPLITR                        ! in m/s
-      ELSE
-         ZWSEDR(:,:,IBOTTOM) = 0.0
-      END IF ! OSEDC
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-!        2. Rain drops sedimentation
-!        ---------------------------
-!
-!
-      IF( MAXVAL(PRRS(:,:,:))>ZRTMIN(3) ) THEN
-         ZZW1(:) = 0.0
-         ZZW2(:) = 0.0
-         ZZW3(:) = 0.0
-         ALLOCATE(ZRRS(ISEDIM)) 
-         ALLOCATE(ZCRS(ISEDIM))
-         ALLOCATE(ZRRT(ISEDIM)) 
-         ALLOCATE(ZCRT(ISEDIM))
-         ALLOCATE(ZLBDR(ISEDIM))
-         DO JL = 1,ISEDIM
-            ZRRS(JL) = PRRS(I1(JL),I2(JL),I3(JL))
-            ZCRS(JL) = PCRS(I1(JL),I2(JL),I3(JL))
-            ZRRT(JL) = PRRT(I1(JL),I2(JL),I3(JL))
-            ZCRT(JL) = PCRT(I1(JL),I2(JL),I3(JL))
-         END DO
-         ZLBDR(:) = 1.E10
-         WHERE (ZRRT(:)>XRTMIN(3) .AND. ZCRT(:)>XCTMIN(3))
-            ZLBDR(:) = ( XLBR*ZCRT(:) / ZRRT(:) )**XLBEXR
-         END WHERE
-         WHERE( ZRRS(:)>ZRTMIN(3) )
-            ZZW3(:) = ZRHODREF(:)**(-XCEXVT) * (ZLBDR(:)**(-XDR))
-            ZZW1(:) = XFSEDRR * ZRRS(:) * ZZW3(:) * ZRHODREF(:)
-            ZZW2(:) = XFSEDCR * ZCRS(:) * ZZW3(:) * ZRHODREF(:) 
-         END WHERE
-         ZWSEDR(:,:,1:IKMAX) = UNPACK( ZZW1(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
-         ZWSEDC(:,:,1:IKMAX) = UNPACK( ZZW2(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
-         DO JK = IKB+1 , IKE
-            PRRS(:,:,JK) = PRRS(:,:,JK) + ZW(:,:,JK)*                      &
-                 (ZWSEDR(:,:,JK+1*INVLVL)-ZWSEDR(:,:,JK))/PRHODREF(:,:,JK)
-            PCRS(:,:,JK) = PCRS(:,:,JK) + ZW(:,:,JK)*                      &
-                 (ZWSEDC(:,:,JK+1*INVLVL)-ZWSEDC(:,:,JK))/PRHODREF(:,:,JK)
-         END DO
-            PRRS(:,:,1) = PRRS(:,:,1) + ZW(:,:,1)*                      &
-                 (0.-ZWSEDR(:,:,1))/PRHODREF(:,:,1)
-            PCRS(:,:,1) = PCRS(:,:,1) + ZW(:,:,1)*                      &
-                 (0.-ZWSEDC(:,:,1))/PRHODREF(:,:,1)
-         DEALLOCATE(ZRRS)
-         DEALLOCATE(ZCRS)
-         DEALLOCATE(ZRRT)
-         DEALLOCATE(ZCRT)
-         DEALLOCATE(ZLBDR)
-      ELSE
-         ZWSEDR(:,:,IBOTTOM) = 0.0
-      END IF ! max PRRS > ZRTMIN(3)
-!    
-      PINPRR(:,:) = PINPRR(:,:) + ZWSEDR(:,:,IBOTTOM)/XRHOLW/KSPLITR              ! in m/s
-      PINPRR3D(:,:,:) = PINPRR3D(:,:,:) + ZWSEDR(:,:,1:IKMAX)/XRHOLW/KSPLITR        ! in m/s
-!
-      DEALLOCATE(ZRHODREF)
-      DEALLOCATE(ZZW1)
-      DEALLOCATE(ZZW2)
-      DEALLOCATE(ZZW3)
-      IF( JN==KSPLITR ) THEN
-         IF( OSEDC ) THEN
-            PRCS(:,:,:) = PRCS(:,:,:) / PTSTEP
-            PCCS(:,:,:) = PCCS(:,:,:) / PTSTEP
-         END IF
-         PRRS(:,:,:) = PRRS(:,:,:) / PTSTEP
-         PCRS(:,:,:) = PCRS(:,:,:) / PTSTEP
-      END IF
-   END IF ! ISEDIM
-END DO ! KSPLITR
-!
-!++cb++
-DEALLOCATE(ZRTMIN)
-DEALLOCATE(ZCTMIN)
-!--cb--
-
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_WARM_SEDIMENTATION
diff --git a/src/arome/micro/modd_lima_precip_scavengingn.F90 b/src/arome/micro/modd_lima_precip_scavengingn.F90
deleted file mode 100644
index a0866da9d6041ab3a6dedaef08223e9196d63d7a..0000000000000000000000000000000000000000
--- a/src/arome/micro/modd_lima_precip_scavengingn.F90
+++ /dev/null
@@ -1,59 +0,0 @@
-!     ####################################
-      MODULE MODD_LIMA_PRECIP_SCAVENGING_n
-!     ####################################
-!
-!!****  *MODD_PRECIP_SCAVENGING$n* - declaration of scavenged aerosols 
-!!                                   precipitating fields
-!!
-!!    PURPOSE
-!!    -------
-!       Stores the INstantaneous and ACcumulated PRecipitating fields of 
-!!      scavenged aerosol by rain
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.   DECLARATIONS
-!             ------------
-!
-USE MODD_PARAMETERS, ONLY: JPMODELMAX
-!
-IMPLICIT NONE
-!
-TYPE LIMA_PRECIP_SCAVENGING_t
-   REAL, DIMENSION(:,:), POINTER :: XINPAP=>NULL(), XACPAP=>NULL()
-                                         ! Instant and cumul of ground
-                                         ! precipitation fields of Scavenged
-                                         ! Aerosol Particles
-END TYPE LIMA_PRECIP_SCAVENGING_t
-
-TYPE(LIMA_PRECIP_SCAVENGING_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: PRECIP_SCAVENGING_MODEL
-
-REAL, DIMENSION(:,:), POINTER :: XINPAP=>NULL(), XACPAP=>NULL()
-
-CONTAINS
-
-SUBROUTINE LIMA_PRECIP_SCAVENGING_GOTO_MODEL(KFROM, KTO)
-  INTEGER, INTENT(IN) :: KFROM, KTO
-  !
-  ! Save current state for allocated arrays
-  PRECIP_SCAVENGING_MODEL(KFROM)%XINPAP=>XINPAP
-  PRECIP_SCAVENGING_MODEL(KFROM)%XACPAP=>XACPAP
-  !
-  ! Current model is set to model KTO
-  XINPAP=>PRECIP_SCAVENGING_MODEL(KTO)%XINPAP
-  XACPAP=>PRECIP_SCAVENGING_MODEL(KTO)%XACPAP
-  !
-END SUBROUTINE LIMA_PRECIP_SCAVENGING_GOTO_MODEL
-!
-!
-END MODULE MODD_LIMA_PRECIP_SCAVENGING_n
diff --git a/src/arome/micro/modd_param_lima.F90 b/src/arome/micro/modd_param_lima.F90
deleted file mode 100644
index bc29ea02e4bbe22e67b231f9afc9ae197b75cbb7..0000000000000000000000000000000000000000
--- a/src/arome/micro/modd_param_lima.F90
+++ /dev/null
@@ -1,185 +0,0 @@
-!     ######################
-      MODULE MODD_PARAM_LIMA
-!     ######################
-!
-!!****  *MODD_PARAM_LIMA* - declaration of the control parameters
-!!                               for use in the LIMA scheme.
-!!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this declarative module is to declare the microphysical
-!!    constants. This includes the descriptive parameters for the raindrop 
-!!    and the parameters relevant of the dimensional distributions.
-!!
-!!
-!!
-!!**  IMPLICIT ARGUMENTS
-!!    ------------------
-!!      None 
-!!
-!!    AUTHOR
-!!    ------
-!!	J.-P. Pinty  *Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!
-!-------------------------------------------------------------------------------
-!
-USE MODD_PARAMETERS, ONLY : JPLIMACCNMAX, JPLIMAIFNMAX
-!
-IMPLICIT NONE
-!
-LOGICAL, SAVE :: LLIMA_DIAG             ! Compute diagnostics for concentration /m3
-LOGICAL, SAVE :: LPTSPLIT               ! time-splitting technique by S. Riette
-!
-!*       1.   COLD SCHEME
-!             -----------
-!
-! 1.1 Cold scheme configuration
-!
-LOGICAL, SAVE :: LCOLD_LIMA                  ! TRUE to enable the cold scheme
-LOGICAL, SAVE :: LNUCL_LIMA                  ! TRUE to enable ice nucleation
-LOGICAL, SAVE :: LSEDI_LIMA                  ! TRUE to enable pristine ice sedimentation
-LOGICAL, SAVE :: LHHONI_LIMA                 ! TRUE to enable freezing of haze particules
-LOGICAL, SAVE :: LSNOW_LIMA                  ! TRUE to enable snow and graupel
-LOGICAL, SAVE :: LHAIL_LIMA                  ! TRUE to enable hail
-LOGICAL, SAVE :: LMEYERS_LIMA                ! TRUE to use Meyers nucleation
-!
-! 1.2 IFN initialisation
-!
-INTEGER, SAVE          :: NMOD_IFN      ! Number of IFN modes
-REAL, DIMENSION(JPLIMAIFNMAX), SAVE :: XIFN_CONC ! Ref. concentration of IFN(#/L)
-LOGICAL, SAVE          :: LIFN_HOM       ! True for z-homogeneous IFN concentrations
-CHARACTER(LEN=8), SAVE :: CIFN_SPECIES   ! Internal mixing species definitions
-CHARACTER(LEN=8), SAVE :: CINT_MIXING    ! Internal mixing type selection (pure DM1 ...)
-INTEGER, SAVE          :: NMOD_IMM      ! Number of CCN modes acting by immersion
-INTEGER, SAVE          :: NIND_SPECIE    ! CCN acting by immersion are considered pure
-                                        ! IFN of either DM = 1, BC = 2 or O = 3
-INTEGER, DIMENSION(:), SAVE, ALLOCATABLE :: NIMM        ! Link between CCN and IMM modes
-INTEGER, DIMENSION(:), SAVE, ALLOCATABLE :: NINDICE_CCN_IMM ! ??????????
-INTEGER, SAVE                            :: NSPECIE     ! Internal mixing number of species
-REAL, DIMENSION(:),    SAVE, ALLOCATABLE :: XMDIAM_IFN  ! Mean diameter of IFN modes
-REAL, DIMENSION(:),    SAVE, ALLOCATABLE :: XSIGMA_IFN  ! Sigma of IFN modes
-REAL, DIMENSION(:),    SAVE, ALLOCATABLE :: XRHO_IFN    ! Density of IFN modes 
-REAL, DIMENSION(:,:),  SAVE, ALLOCATABLE :: XFRAC       ! Composition of each IFN mode
-REAL, DIMENSION(:),    SAVE, ALLOCATABLE :: XFRAC_REF   ! AP compostion in Phillips 08
-!
-! 1.3 Ice characteristics
-!
-CHARACTER(LEN=4), SAVE :: CPRISTINE_ICE_LIMA ! Pristine type PLAT, COLU or BURO
-CHARACTER(LEN=4), SAVE :: CHEVRIMED_ICE_LIMA ! Heavily rimed type GRAU or HAIL
-REAL,SAVE              :: XALPHAI,XNUI ! Pristine ice   distribution parameters
-REAL,SAVE              :: XALPHAS,XNUS ! Snow/aggregate distribution parameters
-REAL,SAVE              :: XALPHAG,XNUG ! Graupel        distribution parameters
-!
-! 1.4 Phillips (2013) nucleation parameterization
-!
-INTEGER, SAVE          :: NPHILLIPS     ! =8 for Phillips08, =13 for Phillips13
-!
-REAL, DIMENSION(4), SAVE   :: XT0       ! Threshold of T in H_X for X={DM1,DM2,BC,O} [K]
-REAL, DIMENSION(4), SAVE   :: XDT0      ! Range in T for transition of H_X near XT0 [K]
-REAL, DIMENSION(4), SAVE   :: XDSI0     ! Range in Si for transition of H_X near XSI0
-REAL,               SAVE   :: XSW0      ! Threshold of Sw in H_X 
-REAL,               SAVE   :: XRHO_CFDC ! Air density at which CFDC data were reported [kg m**3]
-REAL, DIMENSION(4), SAVE   :: XH        ! Fraction<<1 of aerosol for X={DM,BC,O}
-REAL, DIMENSION(4), SAVE   :: XAREA1    ! Total surface of all aerosols in group X with
-                            ! diameters between 0.1 and 1 µm, for X={DM1,DM2,BC,O} [m**2 kg**-1]
-REAL,               SAVE   :: XGAMMA    ! Factor boosting IN concentration due to 
-                                        ! bulk-liquid modes
-!
-REAL, DIMENSION(4), SAVE   :: XTX1      ! Threshold of T in Xi for X={DM1,DM2,BC,O} [K]
-REAL, DIMENSION(4), SAVE   :: XTX2      ! Threshold of T in Xi for X={DM1,DM2,BC,O} [K]
-!
-REAL,DIMENSION(:), SAVE, ALLOCATABLE :: XABSCISS, XWEIGHT ! Gauss quadrature method 
-INTEGER,           SAVE              :: NDIAM             ! Gauss quadrature accuracy 
-!
-! 1.5 Meyers (1992) nucleation parameterization
-!
-REAL,SAVE :: XFACTNUC_DEP,XFACTNUC_CON  ! Amplification factor for IN conc.
-                                        !   DEP refers to DEPosition mode
-                                        !   CON refers to CONtact    mode
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       2.   WARM SCHEME
-!             -----------
-!
-! 2.1 Warm scheme configuration
-!
-LOGICAL, SAVE :: LWARM_LIMA         ! TRUE to enable the warm scheme
-LOGICAL, SAVE :: LACTI_LIMA         ! TRUE to enable CCN activation
-LOGICAL, SAVE :: LRAIN_LIMA         ! TRUE to enable the formation of rain
-LOGICAL, SAVE :: LSEDC_LIMA         ! TRUE to enable the droplet sedimentation
-LOGICAL, SAVE :: LACTIT_LIMA        ! TRUE to enable the usage of dT/dt in CCN activation
-!
-! 2.2 CCN initialisation
-!
-INTEGER,         SAVE                 :: NMOD_CCN      ! Number of CCN modes
-REAL, DIMENSION(JPLIMACCNMAX), SAVE   :: XCCN_CONC      ! CCN conc.  (#/cm3)
-LOGICAL,         SAVE                 :: LCCN_HOM       ! True for z-homogeneous CCN concentrations
-CHARACTER(LEN=8),SAVE                 :: CCCN_MODES     ! CCN modes characteristics (Jungfraujoch ...)
-REAL, DIMENSION(:), SAVE, ALLOCATABLE :: XR_MEAN_CCN ! Mean radius of CCN modes
-REAL, DIMENSION(:), SAVE, ALLOCATABLE :: XLOGSIG_CCN ! Log of geometric dispersion of the CCN modes
-REAL, DIMENSION(:), SAVE, ALLOCATABLE :: XRHO_CCN         ! Density of the CCN modes
-REAL, DIMENSION(:), SAVE, ALLOCATABLE :: XKHEN_MULTI      ! Parameters defining the CCN activation
-REAL, DIMENSION(:), SAVE, ALLOCATABLE :: XMUHEN_MULTI     ! spectra for a multimodal aerosol distribution
-REAL, DIMENSION(:), SAVE, ALLOCATABLE :: XBETAHEN_MULTI   ! spectra for a multimodal aerosol distribution
-REAL, DIMENSION(:,:,:)  ,SAVE, ALLOCATABLE :: XCONC_CCN_TOT    !* Total aerosol number concentration
-REAL, DIMENSION(:),      SAVE, ALLOCATABLE :: XLIMIT_FACTOR    !* compute CHEN ????????????
-!
-! 2.3 Water particles characteristics
-!
-REAL,SAVE     :: XALPHAR,XNUR          ! Raindrop       distribution parameters
-REAL,SAVE     :: XALPHAC,XNUC          ! Cloud droplet  distribution parameters
-!
-! 2.4 CCN activation
-!
-CHARACTER(LEN=3),SAVE :: HPARAM_CCN = 'CPB'   ! Parameterization of the CCN activation
-CHARACTER(LEN=3),SAVE :: HINI_CCN             ! Initialization type of CCN activation
-CHARACTER(LEN=1), DIMENSION (JPLIMACCNMAX),SAVE :: HTYPE_CCN ! 'M' or 'C' CCN type
-REAL,SAVE             :: XFSOLUB_CCN        ! Fractionnal solubility of the CCN
-REAL,SAVE             :: XACTEMP_CCN       ! Expected temperature of CCN activation
-REAL,SAVE             ::XAERDIFF, XAERHEIGHT ! For the vertical gradient of aerosol distribution
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       3.   BELOW CLOUD SCAVENGING
-!             ----------------------
-!
-LOGICAL, SAVE :: LSCAV           ! TRUE for aerosol scavenging by precipitations 
-LOGICAL, SAVE :: LAERO_MASS      ! TRUE to compute the total aerosol mass scavenging rate 
-!
-INTEGER       :: NDIAMR = 20     ! Max Number of droplet for quadrature method  
-INTEGER       :: NDIAMP = 20     ! Max Number of aerosol particle for quadrature method  
-!
-REAL, SAVE    :: XT0SCAV = 293.15  ! [K]
-REAL, SAVE    :: XTREF = 273.15    ! [K]
-REAL, SAVE    :: XNDO = 8.*1.0E6   ! [/m**4]
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       4.   ATMOSPHERIC & OTHER PARAMETERS
-!             ------------------------------
-!
-REAL, SAVE    :: XMUA0     = 1.711E-05  ![Pa.s] Air Viscosity at T=273.15K
-REAL, SAVE    :: XT_SUTH_A = 110.4      ![K] Sutherland Temperature for Air
-REAL, SAVE    :: XMFPA0    = 6.6E-08    ![m] Mean Free Path of Air under standard conditions
-!
-REAL, SAVE    :: XVISCW = 1.0E-3        ![Pa.s] water viscosity at 20°C
-! Correction
-!REAL, SAVE    :: XRHO00 = 1.292         !rho on the floor    [Kg/m**3]
-REAL, SAVE    :: XRHO00 = 1.2041         !rho at P=1013.25 and T=20°C
-!
-REAL,SAVE :: XCEXVT                    ! air density fall speed correction
-!
-REAL,DIMENSION(:),SAVE,ALLOCATABLE :: XRTMIN ! Min values of the mixing ratios
-REAL,DIMENSION(:),SAVE,ALLOCATABLE :: XCTMIN ! Min values of the drop concentrations
-!
-END MODULE MODD_PARAM_LIMA
diff --git a/src/arome/micro/modd_param_lima_cold.F90 b/src/arome/micro/modd_param_lima_cold.F90
deleted file mode 100644
index 2df3032ba305cac20467c695bd73119ccb42ad43..0000000000000000000000000000000000000000
--- a/src/arome/micro/modd_param_lima_cold.F90
+++ /dev/null
@@ -1,122 +0,0 @@
-!     ###########################
-      MODULE MODD_PARAM_LIMA_COLD
-!     ###########################
-!
-!!****  *MODD_PARAM_LIMA_COLD* - declaration of some descriptive parameters and
-!!                               microphysical factors extensively used in 
-!!                               the LIMA cold scheme.
-!!    AUTHOR
-!!    ------
-!!  	J.-P. Pinty  *Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!
-!-------------------------------------------------------------------------------
-!
-IMPLICIT NONE 
-!
-!*       1.   DESCRIPTIVE PARAMETERS
-!             ----------------------
-!
-!     Declaration of microphysical constants, including the descriptive
-!     parameters for the raindrop and the ice crystal habits, and the 
-!     parameters relevant of the dimensional distributions.
-!
-!         m(D)    = XAx * D**XBx      : Mass-MaxDim relationship
-!         v(D)    = XCx * D**XDx      : Fallspeed-MaxDim relationship
-!         N(Lbda) = XCCx * Lbda**XCXx : NumberConc-Slopeparam relationship
-!         XF0x, XF1x, XF2x            : Ventilation factors
-!         XC1x                        : Shape parameter for deposition
-!
-!              and
-!
-!         XALPHAx, XNUx                        : Generalized GAMMA law 
-!         Lbda = XLBx * (r_x*rho_dref)**XLBEXx : Slope parameter of the 
-!                                                distribution law
-!
-REAL,SAVE :: XLBEXI,XLBI              ! Prist. ice     distribution parameters
-REAL,SAVE :: XLBEXS,XLBS              ! Snow/agg.      distribution parameters
-!
-REAL,SAVE :: XAI,XBI,XC_I,XDI         ,XF0I,XF2I,XC1I ! Cloud ice      charact.
-REAL,SAVE ::                           XF0IS,XF1IS    ! (large Di vent. coef.)
-REAL,SAVE :: XAS,XBS,XCS,XDS,XCCS,XCXS,XF0S,XF1S,XC1S ! Snow/agg.      charact.
-!
-REAL,SAVE :: XLBDAS_MAX               ! Max values allowed for the shape
-                                      ! parameter of snow
-!
-CHARACTER(LEN=8),DIMENSION(5),PARAMETER &
-                              :: CLIMA_COLD_NAMES=(/'CICE    ','CIFNFREE','CIFNNUCL', &
-                                                        'CCNINIMM','CCCNNUCL'/)
-                                 ! basenames of the SV articles stored
-                                 ! in the binary files
-                                 !with IF:Ice-nuclei Free (nonactivated IFN by Dep/Cond)
-                                 !     IN:Ice-nuclei Nucleated (activated IFN by Dep/Cond)
-                                 !     NI:Nuclei Immersed (activated IFN by Imm)
-                                 !     HF:Homogeneous Freezing
-CHARACTER(LEN=3),DIMENSION(5),PARAMETER &
-                              :: CLIMA_COLD_CONC=(/'NI ','NIF','NIN','NNI','NNH'/)!for DIAG
-!
-!-------------------------------------------------------------------------------
-!
-!*       2.   MICROPHYSICAL FACTORS
-!             ---------------------
-!
-REAL,SAVE :: XFSEDRI,XFSEDCI,                  & ! Constants for sedimentation
-    	     XFSEDS, XEXSEDS                     ! fluxes of ice and snow
-!
-REAL,SAVE :: XNUC_DEP,XEXSI_DEP,XEX_DEP,       & ! Constants for heterogeneous
-    	     XNUC_CON,XEXTT_CON,XEX_CON,       & ! ice nucleation : DEP et CON
-    	     XMNU0                               ! mass of nucleated ice crystal
-!
-REAL,SAVE :: XRHOI_HONH,XCEXP_DIFVAP_HONH,     & ! Constants for homogeneous
-             XCOEF_DIFVAP_HONH,XRCOEF_HONH,    & ! haze freezing : HHONI
-             XCRITSAT1_HONH,XCRITSAT2_HONH,    &
-             XTMIN_HONH,XTMAX_HONH,            &
-             XDLNJODT1_HONH,XDLNJODT2_HONH,    &
-             XC1_HONH,XC2_HONH,XC3_HONH
-!
-REAL,SAVE :: XC_HONC,XR_HONC,                  & ! Constants for homogeneous
-    	     XTEXP1_HONC,XTEXP2_HONC,          & ! droplet freezing : CHONI
-             XTEXP3_HONC,XTEXP4_HONC,          &
-             XTEXP5_HONC
-!
-REAL,SAVE :: XCSCNVI_MAX, XLBDASCNVI_MAX,      &
-             XRHORSMIN,                        &
-             XDSCNVI_LIM, XLBDASCNVI_LIM,      & ! Constants for snow
-             XC0DEPSI,XC1DEPSI,                & ! sublimation conversion to
-             XR0DEPSI,XR1DEPSI                   ! pristine ice : SCNVI
-!
-REAL,SAVE :: XSCFAC,                           & ! Constants for the Bergeron
-    	     X0DEPI,X2DEPI,                    & ! Findeisen process and
-             X0DEPS,X1DEPS,XEX0DEPS,XEX1DEPS     ! deposition
-!
-REAL,SAVE :: XDICNVS_LIM, XLBDAICNVS_LIM,      & ! Constants for pristine ice
-             XC0DEPIS,XC1DEPIS,                & ! deposition conversion to
-             XR0DEPIS,XR1DEPIS                   ! snow : ICNVS
-!
-REAL,SAVE :: XCOLEXIS,                         & ! Constants for snow 
-    	     XAGGS_CLARGE1,XAGGS_CLARGE2,      & ! aggregation : AGG
-             XAGGS_RLARGE1,XAGGS_RLARGE2
-!
-!??????????????????
-REAL,SAVE :: XKER_ZRNIC_A1,XKER_ZRNIC_A2         ! Long-Zrnic Kernels (ini_ice_coma)
-!
-REAL,SAVE :: XSELFI,XCOLEXII                     ! Constants for pristine ice
-                                                 ! self-collection (ini_ice_coma)
-!
-REAL,SAVE :: XAUTO3, XAUTO4,                   & ! Constants for pristine ice
-             XLAUTS,   XLAUTS_THRESHOLD,       & ! autoconversion : AUT
-             XITAUTS, XITAUTS_THRESHOLD,       & ! (ini_ice_com) 
-             XTEXAUTI
-!
-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
-!
-!-------------------------------------------------------------------------------
-!
-END MODULE MODD_PARAM_LIMA_COLD
diff --git a/src/arome/micro/modd_param_lima_mixed.F90 b/src/arome/micro/modd_param_lima_mixed.F90
deleted file mode 100644
index f13accfc669e88fca83566c2eb72f5c2cc6f4945..0000000000000000000000000000000000000000
--- a/src/arome/micro/modd_param_lima_mixed.F90
+++ /dev/null
@@ -1,169 +0,0 @@
-!     ############################
-      MODULE MODD_PARAM_LIMA_MIXED
-!     ###########################{
-!
-!!****  *MODD_PARAM_LIMA_MIXED* - declaration of some descriptive parameters and
-!!                                microphysical factors extensively used in 
-!!                                the LIMA mixed scheme.
-!!    AUTHOR
-!!    ------
-!!  	J.-P. Pinty  *Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!
-!-------------------------------------------------------------------------------
-!
-IMPLICIT NONE
-!
-!*       1.   DESCRIPTIVE PARAMETERS
-!             ----------------------
-!
-!     Declaration of microphysical constants, including the descriptive
-!     parameters for the raindrop and the ice crystal habits, and the 
-!     parameters relevant of the dimensional distributions.
-!
-!         m(D)    = XAx * D**XBx      : Mass-MaxDim relationship
-!         v(D)    = XCx * D**XDx      : Fallspeed-MaxDim relationship
-!         N(Lbda) = XCCx * Lbda**XCXx : NumberConc-Slopeparam relationship
-!         XF0x, XF1x, XF2x            : Ventilation factors
-!         XC1x                        : Shape parameter for deposition
-!
-!              and
-!
-!         XALPHAx, XNUx                        : Generalized GAMMA law 
-!         Lbda = XLBx * (r_x*rho_dref)**XLBEXx : Slope parameter of the 
-!                                                distribution law
-!
-REAL,SAVE :: XAG,XBG,XCG,XDG,XCCG,XCXG,XF0G,XF1G,XC1G ! Graupel        charact.
-REAL,SAVE :: XLBEXG,XLBG              ! Graupel        distribution parameters 
-REAL,SAVE :: XLBDAG_MAX               ! Max values allowed for the shape
-                                      ! parameter of graupeln
-!
-REAL,SAVE :: XAH,XBH,XCH,XDH,XCCH,XCXH,XF0H,XF1H,XC1H ! Hail           charact.
-REAL,SAVE :: XALPHAH,XNUH,XLBEXH,XLBH ! Hail           distribution parameters
-!
-!-------------------------------------------------------------------------------
-!
-!*       2.   MICROPHYSICAL FACTORS - Graupel
-!             -------------------------------
-!
-REAL,SAVE :: XFSEDG, XEXSEDG                     ! Sedimentation fluxes of Graupel
-!
-REAL,SAVE :: X0DEPG,X1DEPG,XEX0DEPG,XEX1DEPG     ! Deposition on graupel
-!
-REAL,SAVE :: XHMTMIN,XHMTMAX,XHM1,XHM2,        & ! Constants for the
-             XHM_YIELD,XHM_COLLCS,XHM_FACTS,   & !      revised
-                       XHM_COLLCG,XHM_FACTG,   & ! Hallett-Mossop process
-    	     XGAMINC_HMC_BOUND_MIN,            & ! Min val. of Lbda_c for HMC
-    	     XGAMINC_HMC_BOUND_MAX,            & ! Max val. of Lbda_c for HMC
-             XHMSINTP1,XHMSINTP2,              & ! (this is no more used !)
-             XHMLINTP1,XHMLINTP2
-!
-REAL,SAVE :: XDCSLIM,XCOLCS,                   & ! Constants for the riming of
-    	     XEXCRIMSS,XCRIMSS,                & ! the aggregates : RIM
-    	     XEXCRIMSG,XCRIMSG,                & !
-    	     XEXSRIMCG,XSRIMCG,                & !
-    	     XGAMINC_BOUND_MIN,                & ! Min val. of Lbda_s for RIM
-    	     XGAMINC_BOUND_MAX,                & ! Max val. of Lbda_s for RIM
-    	     XRIMINTP1,XRIMINTP2                 ! Csts for lin. interpol. of 
-                                                 ! the tab. incomplete Gamma law
-INTEGER,SAVE :: NGAMINC                          ! Number of tab. Lbda_s
-REAL, DIMENSION(:), SAVE, ALLOCATABLE          &
-                       :: XGAMINC_RIM1,        & ! Tab. incomplete Gamma funct.
-                          XGAMINC_RIM2,        & ! for XDS+2 and for XBS
-                          XGAMINC_HMC            ! and for the HM process
-!
-REAL,SAVE :: XFRACCSS,                         & ! Constants for the accretion 
-             XLBRACCS1,XLBRACCS2,XLBRACCS3,    & ! raindrops onto the aggregates
-             XFSACCRG,                         & ! ACC (processes RACCSS and
-             XLBSACCR1,XLBSACCR2,XLBSACCR3,    & !                SACCRG)
-    	     XACCLBDAS_MIN,                    & ! Min val. of Lbda_s for ACC
-    	     XACCLBDAS_MAX,                    & ! Max val. of Lbda_s for ACC
-    	     XACCLBDAR_MIN,                    & ! Min val. of Lbda_r for ACC
-    	     XACCLBDAR_MAX,                    & ! Max val. of Lbda_r for ACC
-    	     XACCINTP1S,XACCINTP2S,            & ! Csts for bilin. interpol. of 
-    	     XACCINTP1R,XACCINTP2R               !   Lbda_s and Lbda_r in the 
-                        			 ! XKER_RACCSS and XKER_SACCRG
-                          			 !            tables
-INTEGER,SAVE :: NACCLBDAS,                     & ! Number of Lbda_s values and
-    	        NACCLBDAR                        !   of Lbda_r values in the
-                        			 ! XKER_RACCSS and XKER_SACCRG
-                        			 !            tables
-REAL,DIMENSION(:,:), SAVE, ALLOCATABLE         &
-       			 :: XKER_RACCSS,       & ! Normalized kernel for RACCSS
-       			    XKER_RACCS,        & ! Normalized kernel for RACCS
-       			    XKER_SACCRG          ! Normalized kernel for SACCRG 
-REAL,SAVE :: XFSCVMG                             ! Melting-conversion factor of
-                                                 ! the aggregates
-!
-REAL,SAVE :: XCOLIR,                           & ! Constants for rain contact
-    	     XEXRCFRI,XRCFRI,                  & ! freezing : CFR
-    	     XEXICFRR,XICFRR                     !
-!
-REAL,SAVE :: XFCDRYG,                          & ! Constants for the dry growth
-             XCOLCG,                           & ! of the graupeln :
-             XCOLIG,XCOLEXIG,XFIDRYG,          & ! 
-             XCOLSG,XCOLEXSG,XFSDRYG,          & !             RCDRYG
-             XLBSDRYG1,XLBSDRYG2,XLBSDRYG3,    & !             RIDRYG
-             XFRDRYG,                          & !             RSDRYG
-             XLBRDRYG1,XLBRDRYG2,XLBRDRYG3,    & !             RRDRYG
-             XDRYLBDAR_MIN,                    & ! Min val. of Lbda_r for DRY
-    	     XDRYLBDAR_MAX,                    & ! Max val. of Lbda_r for DRY
-             XDRYLBDAS_MIN,                    & ! Min val. of Lbda_s for DRY
-    	     XDRYLBDAS_MAX,                    & ! Max val. of Lbda_s for DRY
-    	     XDRYLBDAG_MIN,                    & ! Min val. of Lbda_g for DRY
-    	     XDRYLBDAG_MAX,                    & ! Max val. of Lbda_g for DRY
-    	     XDRYINTP1R,XDRYINTP2R,            & ! Csts for bilin. interpol. of 
-    	     XDRYINTP1S,XDRYINTP2S,            & ! Lbda_r, Lbda_s and Lbda_g in
-    	     XDRYINTP1G,XDRYINTP2G               ! the XKER_SDRYG and XKER_RDRYG
-                                                 !            tables
-INTEGER,SAVE :: NDRYLBDAR,                     & ! Number of Lbda_r,
-    	        NDRYLBDAS,                     & !        of Lbda_s and
-    	        NDRYLBDAG                        !        of Lbda_g values in
-    	                                         ! the XKER_SDRYG and XKER_RDRYG
-                        			 !            tables
-REAL,DIMENSION(:,:), SAVE, ALLOCATABLE         &
-                         :: XKER_SDRYG,        & ! Normalized kernel for SDRYG
-       			    XKER_RDRYG           ! Normalized kernel for RDRYG 
-!
-!-------------------------------------------------------------------------------
-!
-!*       2.   MICROPHYSICAL FACTORS - Hail
-!             ----------------------------
-!
-REAL,SAVE :: XFSEDH,XEXSEDH                      ! Constants for sedimentation
-!
-!
-REAL,SAVE :: X0DEPH,X1DEPH,XEX0DEPH,XEX1DEPH     ! Constants for deposition
-!
-REAL,SAVE :: XFWETH,XFSWETH,                   & ! Constants for the wet growth
-             XLBSWETH1,XLBSWETH2,XLBSWETH3,    & ! of the hailstones : WET
-             XFGWETH,                          & !   processes RSWETH
-             XLBGWETH1,XLBGWETH2,XLBGWETH3,    & !             RGWETH
-             XWETLBDAS_MIN,                    & ! Min val. of Lbda_s for WET
-             XWETLBDAS_MAX,                    & ! Max val. of Lbda_s for WET
-             XWETLBDAG_MIN,                    & ! Min val. of Lbda_g for WET
-             XWETLBDAG_MAX,                    & ! Max val. of Lbda_g for WET
-             XWETLBDAH_MIN,                    & ! Min val. of Lbda_h for WET
-             XWETLBDAH_MAX,                    & ! Max val. of Lbda_h for WET
-             XWETINTP1S,XWETINTP2S,            & ! Csts for bilin. interpol. of
-             XWETINTP1G,XWETINTP2G,            & ! Lbda_r, Lbda_s and Lbda_g in
-             XWETINTP1H,XWETINTP2H               ! the XKER_SWETH and XKER_GWETH
-                                                 !            tables
-INTEGER,SAVE :: NWETLBDAS,                     & ! Number of Lbda_s,
-                NWETLBDAG,                     & !        of Lbda_g and
-                NWETLBDAH                        !        of Lbda_h values in
-                                                 ! the XKER_SWETH and XKER_GWETH
-                                                 !            tables
-REAL,DIMENSION(:,:), SAVE, ALLOCATABLE         &
-                         :: XKER_SWETH,        & ! Normalized kernel for SWETH
-                            XKER_GWETH           ! Normalized kernel for GWETH
-
-!
-!-------------------------------------------------------------------------------
-!
-END MODULE MODD_PARAM_LIMA_MIXED
diff --git a/src/arome/micro/modd_param_lima_warm.F90 b/src/arome/micro/modd_param_lima_warm.F90
deleted file mode 100644
index d0688aa72acecbfa45b0810043a36b5386ffe2cb..0000000000000000000000000000000000000000
--- a/src/arome/micro/modd_param_lima_warm.F90
+++ /dev/null
@@ -1,119 +0,0 @@
-!     ###########################
-      MODULE MODD_PARAM_LIMA_WARM
-!     ###########################
-!
-!!****  *MODD_PARAM_LIMA_WARM* - declaration of some descriptive parameters and
-!!                               microphysical factors extensively used in 
-!!                               the LIMA warm scheme.
-!!    AUTHOR
-!!    ------
-!!  	J.-P. Pinty  *Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!
-!-------------------------------------------------------------------------------
-!
-IMPLICIT NONE 
-!
-!*       1.   DESCRIPTIVE PARAMETERS
-!             ----------------------
-!
-REAL,SAVE ::  XLBC, XLBEXC,          & ! shape parameters of the cloud droplets
-              XLBR, XLBEXR             ! shape parameters of the raindrops
-!
-REAL,SAVE :: XAR,XBR,XCR,XDR,XF0R,XF1R,     & ! Raindrop       charact.
-                                  XCCR,     & !For diagnostics
-             XAC,XBC,XCC,XDC,XF0C,XF2C,XC1C   ! Cloud droplet  charact.
-!
-!
-CHARACTER(LEN=8),DIMENSION(4),PARAMETER &
-                     :: CLIMA_WARM_NAMES=(/'CCLOUD  ','CRAIN   ','CCCNFREE','CCCNACTI'/)
-                                       ! basenames of the SV articles stored
-                                       ! in the binary files
-CHARACTER(LEN=5),DIMENSION(4),PARAMETER &                       
-                     :: CLIMA_WARM_CONC=(/'NC   ','NR   ','NFREE','NCCN '/)
-!                                       ! basenames of the SV articles stored
-!                                       ! in the binary files for DIAG
-!
-!* Special issue for Below-Cloud SCAVenging of Aerosol particles 
-CHARACTER(LEN=6),DIMENSION(2) :: CAERO_MASS =(/'MASSAP', 'MAP   '/)
-!
-!-------------------------------------------------------------------------------
-!
-!*       2.   MICROPHYSICAL FACTORS
-!             ---------------------
-!
-REAL,SAVE :: XFSEDRR,XFSEDCR,                  & ! Constants for sedimentation
-             XFSEDRC,XFSEDCC                     ! fluxes of R, C
-!
-!
-REAL,SAVE :: XDIVA,                            & ! Diffusivity of water vapor
-	     XTHCO                               ! Thermal conductivity
-REAL,SAVE :: XWMIN                               ! Min value of updraft velocity
-				                 ! to enable nucleation process
-REAL,SAVE :: XTMIN                               ! Min value of
-                                                 ! temperature evolution
-				                 ! to enable nucleation process
-REAL,SAVE :: XCSTHEN,XCSTDCRIT                   ! Cst for HEN precalculations
-INTEGER, SAVE :: NHYP                            ! Number of value of the HYP
-						 !    functions
-REAL,SAVE :: XHYPINTP1, XHYPINTP2                ! Factors defining the
-						 ! supersaturation log scale
-REAL, DIMENSION(:,:), SAVE, ALLOCATABLE        & ! Tabulated HYPgeometric
-	  :: XHYPF12, XHYPF32                    !   functions used in HEN
-INTEGER, SAVE :: NAHEN                           ! Number of value of the AHEN
-		                        	 !    functions
-REAL,SAVE :: XAHENINTP1, XAHENINTP2              ! Factors defining the
-						 ! temperatures in lin scale
-REAL, DIMENSION(:), SAVE, ALLOCATABLE          & ! 
-          :: XAHENG,XPSI1, XPSI3,              & ! Twomey-CPB98 and
-	     XAHENF,XAHENY                       ! Feingold-Heymsfield
-	                                         ! parameterization to compute Smax
-REAL,SAVE :: XWCOEF_F1, XWCOEF_F2, XWCOEF_F3,  & ! COEF_F of the polynomial temp.
-             XWCOEF_Y1, XWCOEF_Y2, XWCOEF_Y3     ! COEF_Y of the polynomial temp.
-						 ! function powering W
-!
-!
-REAL,SAVE :: XKERA1, XKERA2                      ! Constants to define the lin
-						 ! and parabolic kernel param. 
-REAL,SAVE :: XSELFC                              ! Constants for cloud droplet
-                                                 ! selfcollection : SELF
-!
-REAL,SAVE :: XAUTO1, XAUTO2, XCAUTR,           & ! Constants for cloud droplet
-    	     XLAUTR,   XLAUTR_THRESHOLD,       & ! autoconversion : AUT
-    	     XITAUTR, XITAUTR_THRESHOLD
-!
-REAL,SAVE :: XACCR1, XACCR2, XACCR3,           & ! Constants for the accretion
-	     XACCR4, XACCR5, XACCR6,           & ! process
-             XACCR_CLARGE1, XACCR_CLARGE2, XACCR_RLARGE1, XACCR_RLARGE2, &
-             XACCR_CSMALL1, XACCR_CSMALL2, XACCR_RSMALL1, XACCR_RSMALL2
-!
-REAL,SAVE :: XSCBU2, XSCBU3,                   & ! Constants for the raindrop
-             XSCBU_EFF1, XSCBU_EFF2, XSCBUEXP1   ! breakup-selfcollection: SCBU
-!
-REAL,SAVE :: XSPONBUD1,XSPONBUD2,XSPONBUD3,    & ! Spontaneous Break-up
-             XSPONCOEF2                          ! (drop size limiter)
-!
-REAL,SAVE :: X0EVAR, X1EVAR,                   & ! Constants for raindrop
-	     XEX0EVAR, XEX1EVAR, XEX2EVAR        ! evaporation: EVA 
-!
-REAL,DIMENSION(:,:,:,:), SAVE, ALLOCATABLE :: XCONCC_INI
-REAL,SAVE                                  :: XCONCR_PARAM_INI        
-                                      ! Used to initialize the 
-                                      ! concentrations from mixing ratios
-                                      ! (init and grid-nesting from Kessler)
-!
-REAL,SAVE :: X0CNDC, X2CNDC                   ! Constants for cloud droplet
-                                              ! condensation/evaporation
-REAL,SAVE :: XFREFFC  ! Factor to compute the cloud droplet effective radius
-REAL,SAVE :: XFREFFR  ! Factor to compute the rain drop     effective radius
-REAL,SAVE :: XCREC, XCRER
-                      ! Factors to compute reff when cloud and rain are present
-!
-!-------------------------------------------------------------------------------
-!
-END MODULE MODD_PARAM_LIMA_WARM
diff --git a/src/arome/micro/set_conc_lima_lbc.F90 b/src/arome/micro/set_conc_lima_lbc.F90
new file mode 100644
index 0000000000000000000000000000000000000000..99fe74a52891aac1083ddd1a271c9db67ae87049
--- /dev/null
+++ b/src/arome/micro/set_conc_lima_lbc.F90
@@ -0,0 +1,226 @@
+!MNH_LIC Copyright 2000-2020 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_set_conc_lima_lbc
+!#######################################
+
+implicit none
+
+contains
+
+!     ###########################################################################
+      SUBROUTINE SET_CONC_LIMA_LBC( kmi, HGETCLOUD, PRHODREF, PRT, PSVT )
+!     ###########################################################################
+!
+!!****  *SET_CONC_LIMA * - initialize droplet, raindrop and ice
+!!                   concentration for a RESTArt simulation of the LIMA scheme
+!!
+!!
+!!    PURPOSE
+!!    -------
+!!      The purpose of this routine is to initialize cloud droplet and rain drop
+!!    concentrations when the cloud droplet and rain drop mixing ratios are
+!!    only available (generally from a previous run using the Kessler scheme).
+!!      This routine is used to initialize the droplet/drop concentrations
+!!    using the r_c and r_r of a previous REVE or KESS run but also to compute
+!!    the LB tendencies in ONE_WAY$n in case of grid-nesting when the optional
+!!    argument PTIME is set (a LIMA run embedded in a KESS or REVE run).
+!!
+!!**  METHOD
+!!    ------
+!!      The method assumes a Csk law for the activation of aerososl with "s"
+!!    the supersaturation (here 0.05 % is chosen). A Marshall-Palmer law with
+!!    N_o=10**(-7) m**(-4) is assumed for the rain drop concentration.
+!!      The initialization of the PSVT is straightforward for the cloud droplets
+!!    while N_r=N_0/Lambda_r with Rho*r_r=Pi*Rho_w*N_0/(Lambda_r**4) is used for
+!!    the rain drops. The HGETCLOUD test is used to discriminate between the
+!!    'REVE' and 'KESS' options for CCLOUD in the previous run (from which
+!!     PRT was calculated).
+!!
+!!    EXTERNAL
+!!    --------
+!!      None
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!      Module MODD_RAIN_C2R2_DESCR, ONLY : XRTMIN, XCTMIN
+!!      Module MODD_RAIN_C2R2_KHKO_PARAM, ONLY : XCONCC_INI, XCONCR_PARAM_INI
+!!      Module MODD_CONF,            ONLY : NVERB
+!!
+!!    REFERENCE
+!!    ---------
+!!      Book2 of documentation ( routine SET_CONC_RAIN_C2R2 )
+!!
+!!    AUTHOR
+!!    ------
+!!      J.-P. Pinty      * Laboratoire d'Aerologie*
+!!      P. Jabouille     * CNRM/GMME *
+!!      B. Vié           * CNRM/GMME *
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    15/11/00
+!!                        2014 G.Delautier : remplace MODD_RAIN_C2R2_PARAM par MODD_RAIN_C2R2_KHKO_PARAM        *
+!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  B. Vié      03/03/2020: secure physical tests
+!  P. Wautelet 04/06/2020: correct array start for microphys. concentrations + add kmi dummy argument
+!                          (this subroutine is also called for other models)
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+USE MODD_PARAM_LIMA,      ONLY : XRTMIN, XCTMIN, NMOD_CCN, NMOD_IFN, &
+                                 NMOM_C, NMOM_R, NMOM_I
+USE MODD_PARAM_LIMA_COLD, ONLY : XAI, XBI, XAS, XBS
+USE MODD_PARAM_LIMA_MIXED,ONLY : XAG, XBG, XAH, XBH
+USE MODD_NSV,             ONLY : NSV_LIMA_BEG_A, NSV_LIMA_NC_A, NSV_LIMA_NR_A, NSV_LIMA_CCN_ACTI_A, &
+                                 NSV_LIMA_NI_A, NSV_LIMA_NS_A, NSV_LIMA_NG_A, NSV_LIMA_NH_A, NSV_LIMA_IFN_NUCL_A
+USE MODD_CST,             ONLY : XPI, XRHOLW, XRHOLI
+USE MODD_CONF,            ONLY : NVERB
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of dummy arguments :
+!
+integer,                   intent(in) :: kmi        ! Model number
+CHARACTER (LEN=4),         INTENT(IN) :: HGETCLOUD  ! Get indicator
+REAL, DIMENSION(:,:,:),    INTENT(IN) :: PRHODREF   ! Reference density
+!
+REAL, DIMENSION(:,:,:,:),  INTENT(INOUT) :: PRT     ! microphysical mixing ratios
+!
+REAL,  DIMENSION(:,:,:,NSV_LIMA_BEG_A(kmi):), INTENT(INOUT):: PSVT     ! microphys. concentrations
+!
+!
+!*       0.2   Declarations of local variables :
+!
+REAL       :: ZCONC
+!
+!-------------------------------------------------------------------------------
+!*       1.    RETRIEVE LOGICAL UNIT NUMBER
+!              ----------------------------
+!
+!
+!*       2.    INITIALIZATION
+!              --------------
+!
+IF (NMOM_C.GE.2) THEN
+!
+!  droplets
+!
+   ZCONC = 300.E6 ! droplet concentration set at 300 cm-3
+   WHERE ( PRT(:,:,:,2) > 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NC_A(kmi))<1.E-11)
+      PSVT(:,:,:,NSV_LIMA_NC_A(kmi)) = ZCONC
+   END WHERE
+   WHERE ( PRT(:,:,:,2) <= 1.E-11  .AND. PSVT(:,:,:,NSV_LIMA_NC_A(kmi))<1.E-11)
+      PRT(:,:,:,2)  = 0.0
+      PSVT(:,:,:,NSV_LIMA_NC_A(kmi)) = 0.0
+   END WHERE
+   
+   IF (NMOD_CCN .GE. 1) THEN
+      WHERE ( PRT(:,:,:,2) > 1.E-11  .AND. PSVT(:,:,:,NSV_LIMA_NC_A(kmi))<1.E-11)
+         PSVT(:,:,:,NSV_LIMA_CCN_ACTI_A(kmi)) = ZCONC
+      END WHERE
+      WHERE ( PRT(:,:,:,2) <= 1.E-11  .AND. PSVT(:,:,:,NSV_LIMA_NC_A(kmi))<1.E-11)
+         PSVT(:,:,:,NSV_LIMA_CCN_ACTI_A(kmi)) = 0.0
+      END WHERE
+   END IF
+   
+END IF
+!
+IF (NMOM_R.GE.2) THEN
+!
+!  drops
+!
+   ZCONC = (1.E7)**3/(XPI*XRHOLW) ! cf XCONCR_PARAM_INI in ini_rain_c2r2.f90
+   IF (HGETCLOUD == 'INI1') THEN ! init from REVE scheme
+      PSVT(:,:,:,NSV_LIMA_NR_A(kmi)) = 0.0
+   ELSE ! init from KESS, ICE3...
+      WHERE ( PRT(:,:,:,3) > 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NR_A(kmi))<1.E-11 )
+         PSVT(:,:,:,NSV_LIMA_NR_A(kmi)) = MAX( SQRT(SQRT(PRHODREF(:,:,:)*PRT(:,:,:,3) &
+              *ZCONC)),1. )
+      END WHERE
+      WHERE ( PRT(:,:,:,3) <= 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NR_A(kmi))<1.E-11 )
+         PRT(:,:,:,3)  = 0.0
+         PSVT(:,:,:,NSV_LIMA_NR_A(kmi)) = 0.0
+      END WHERE
+   END IF
+END IF
+!
+IF (NMOM_I.GE.2) THEN
+!
+! ice crystals
+!
+   ZCONC = 100.E3 ! maximum ice concentration set at 100/L
+   WHERE ( PRT(:,:,:,4) > 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NI_A(kmi))<1.E-11 )
+!
+!      PSVT(:,:,:,NSV_LIMA_NI_A(kmi)) = MIN( PRHODREF(:,:,:) /                                     &
+!           ( XRHOLI * XAI*(10.E-06)**XBI * PRT(:,:,:,4) ), &
+!           ZCONC )
+! Correction
+      PSVT(:,:,:,NSV_LIMA_NI_A(kmi)) = MIN(PRT(:,:,:,4)/(0.82*(10.E-06)**2.5),ZCONC )
+   END WHERE
+   WHERE ( PRT(:,:,:,4) <= 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NI_A(kmi))<1.E-11 )
+      PRT(:,:,:,4)  = 0.0
+      PSVT(:,:,:,NSV_LIMA_NI_A(kmi)) = 0.0
+   END WHERE
+
+   IF (NMOD_IFN .GE. 1) THEN
+      WHERE ( PRT(:,:,:,4) > 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NI_A(kmi))<1.E-11 )
+         PSVT(:,:,:,NSV_LIMA_IFN_NUCL_A(kmi)) = PSVT(:,:,:,NSV_LIMA_NI_A(kmi))
+      END WHERE
+      WHERE ( PRT(:,:,:,4) <= 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NI_A(kmi))<1.E-11 )
+         PSVT(:,:,:,NSV_LIMA_IFN_NUCL_A(kmi)) = 0.0
+      END WHERE
+   END IF
+
+END IF
+!
+IF (NSV_LIMA_NS_A(KMI).GE.1) THEN
+!
+!  snow
+!
+   ZCONC = 1./ (XAS*0.001**XBS) ! 1mm particle size
+   WHERE ( PRT(:,:,:,5) > 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NS_A(kmi))<1.E-11 )
+      PSVT(:,:,:,NSV_LIMA_NS_A(KMI)) = PRT(:,:,:,5) * ZCONC
+   END WHERE
+   WHERE ( PRT(:,:,:,5) <= 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NS_A(kmi))<1.E-11 )
+      PRT(:,:,:,5)  = 0.0
+      PSVT(:,:,:,NSV_LIMA_NS_A(KMI)) = 0.0
+   END WHERE
+END IF
+!
+IF (NSV_LIMA_NG_A(KMI).GE.1) THEN
+!
+!  graupel
+!
+   ZCONC = 1./ (XAG*0.001**XBG) ! 1mm particle size
+   WHERE ( PRT(:,:,:,6) > 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NG_A(kmi))<1.E-11 )
+      PSVT(:,:,:,NSV_LIMA_NG_A(KMI)) = PRT(:,:,:,6) * ZCONC
+   END WHERE
+   WHERE ( PRT(:,:,:,6) <= 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NG_A(kmi))<1.E-11 )
+      PRT(:,:,:,6)  = 0.0
+      PSVT(:,:,:,NSV_LIMA_NG_A(KMI)) = 0.0
+   END WHERE
+END IF
+!
+IF (NSV_LIMA_NH_A(KMI).GE.1) THEN
+!
+!  hail
+!
+   ZCONC = 1./ (XAH*0.001**XBH) ! 1mm particle size
+   WHERE ( PRT(:,:,:,7) > 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NH_A(kmi))<1.E-11 )
+      PSVT(:,:,:,NSV_LIMA_NH_A(KMI)) = PRT(:,:,:,7) * ZCONC
+   END WHERE
+   WHERE ( PRT(:,:,:,7) <= 1.E-11 .AND. PSVT(:,:,:,NSV_LIMA_NH_A(kmi))<1.E-11 )
+      PRT(:,:,:,7)  = 0.0
+      PSVT(:,:,:,NSV_LIMA_NH_A(KMI)) = 0.0
+   END WHERE
+END IF
+!
+END SUBROUTINE SET_CONC_LIMA_LBC
+
+end module mode_set_conc_lima_lbc
diff --git a/src/common/aux/modd_nsv.f90 b/src/common/aux/modd_nsv.f90
new file mode 100644
index 0000000000000000000000000000000000000000..9cfa343c413e3b78171c89590cf04432585986fc
--- /dev/null
+++ b/src/common/aux/modd_nsv.f90
@@ -0,0 +1,282 @@
+!MNH_LIC Copyright 2001-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 MODD_NSV
+!        ###############
+!
+!!****  *MODD_NSV* - declaration of scalar variables numbers
+!!
+!!    PURPOSE
+!!    -------
+!!       Arrays to store the per-model NSV_* values number (suffix _A denote an array)
+!!
+!!    AUTHOR
+!!    ------
+!!      D. Gazen   L.A.
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original  01/02/01
+!!       J.-P. Pinty   29/11/02 add C3R5, ELEC
+!!       V. Masson     01/2004  add scalar names
+!!       M. Leriche    12/04/07 add aqueous chemistry
+!!       M. Leriche    08/07/10 add ice phase chemistry
+!!       C.Lac         07/11    add conditional sampling
+!!       Pialat/Tulet  15/02/12 add ForeFire
+!!      Modification    01/2016  (JP Pinty) Add LIMA
+!!       V. Vionnet     07/17   add blowing snow
+!  B. Vie         06/2021: add prognostic supersaturation for LIMA
+!  P. Wautelet 26/11/2021: add TSVLIST and TSVLIST_A to store the metadata of all the scalar variables
+!  A. Costes      12/2021: add Blaze fire model smoke
+!  P. Wautelet 14/01/2022: add CSV_CHEM_LIST(_A) to store the list of all chemical variables
+!                          + NSV_CHEM_LIST(_A) the size of the list
+!-------------------------------------------------------------------------------
+!
+!*       0.   DECLARATIONS
+!             ------------
+!
+USE MODD_FIELD,      ONLY: tfieldmetadata
+USE MODD_PARAMETERS, ONLY: JPMODELMAX, &     ! Maximum allowed number of nested models
+                           JPSVMAX,    &     ! Maximum number of scalar variables
+                           JPSVNAMELGTMAX, & ! Maximum length of a scalar variable name
+                           NMNHNAMELGTMAX
+!
+IMPLICIT NONE
+SAVE
+!
+REAL,DIMENSION(JPSVMAX) :: XSVMIN ! minimum value for SV variables
+!
+LOGICAL :: LINI_NSV(JPMODELMAX) = .FALSE. ! becomes True when routine INI_NSV is called
+!
+CHARACTER(LEN=NMNHNAMELGTMAX), DIMENSION(:,:), ALLOCATABLE, TARGET :: CSV_CHEM_LIST_A !Names of all the chemical variables
+TYPE(tfieldmetadata), DIMENSION(:,:), ALLOCATABLE, TARGET :: TSVLIST_A !Metadata of all the scalar variables
+
+INTEGER,DIMENSION(JPMODELMAX)::NSV_A = 0 ! total number of scalar variables
+                                         ! NSV_A = NSV_USER_A+NSV_C2R2_A+NSV_CHEM_A+..
+INTEGER,DIMENSION(JPMODELMAX)::NSV_CHEM_LIST_A = 0 ! total number of chemical variables (including dust, salt...)
+INTEGER,DIMENSION(JPMODELMAX)::NSV_USER_A = 0  ! number of user scalar variables with 
+                                               ! indices in the range : 1...NSV_USER_A
+!
+INTEGER,DIMENSION(JPMODELMAX)::NSV_C2R2_A = 0    ! number of liq scalar in C2R2
+                                                 !                  and in C3R5
+INTEGER,DIMENSION(JPMODELMAX)::NSV_C2R2BEG_A = 0 ! with indices in the range :
+INTEGER,DIMENSION(JPMODELMAX)::NSV_C2R2END_A = 0 ! NSV_C2R2BEG_A...NSV_C2R2END_A
+!
+INTEGER,DIMENSION(JPMODELMAX)::NSV_C1R3_A = 0    ! number of ice scalar in C3R5
+INTEGER,DIMENSION(JPMODELMAX)::NSV_C1R3BEG_A = 0 ! with indices in the range :
+INTEGER,DIMENSION(JPMODELMAX)::NSV_C1R3END_A = 0 ! NSV_C1R3BEG_A...NSV_C1R3END_A
+!
+INTEGER,DIMENSION(JPMODELMAX)::NSV_ELEC_A = 0    ! number of scalar in ELEC
+INTEGER,DIMENSION(JPMODELMAX)::NSV_ELECBEG_A = 0 ! with indices in the range :
+INTEGER,DIMENSION(JPMODELMAX)::NSV_ELECEND_A = 0 ! NSV_ELECBEG_A...NSV_ELECEND_A
+!
+INTEGER,DIMENSION(JPMODELMAX)::NSV_CHEM_A = 0    ! number of chemical scalar
+INTEGER,DIMENSION(JPMODELMAX)::NSV_CHEMBEG_A = 0 ! with indices in the range :
+INTEGER,DIMENSION(JPMODELMAX)::NSV_CHEMEND_A = 0 ! NSV_CHEMBEG_A...NSV_CHEMEND_A
+!
+INTEGER,DIMENSION(JPMODELMAX)::NSV_CHGS_A = 0    ! number of gaseous chemcial species
+INTEGER,DIMENSION(JPMODELMAX)::NSV_CHGSBEG_A = 0 ! with indices
+INTEGER,DIMENSION(JPMODELMAX)::NSV_CHGSEND_A = 0 ! NSV_CHGSBEG_
+!
+INTEGER,DIMENSION(JPMODELMAX)::NSV_CHAC_A = 0    ! number of aqueous chemical species
+INTEGER,DIMENSION(JPMODELMAX)::NSV_CHACBEG_A = 0 ! with indices
+INTEGER,DIMENSION(JPMODELMAX)::NSV_CHACEND_A = 0 ! NSV_CHACBEG
+!
+INTEGER,DIMENSION(JPMODELMAX)::NSV_CHIC_A = 0    ! number of ice phase chemical species
+INTEGER,DIMENSION(JPMODELMAX)::NSV_CHICBEG_A = 0 ! with indices
+INTEGER,DIMENSION(JPMODELMAX)::NSV_CHICEND_A = 0 ! NSV_CHICBEG
+!
+INTEGER,DIMENSION(JPMODELMAX)::NSV_LG_A = 0    ! number of LaGrangian 
+INTEGER,DIMENSION(JPMODELMAX)::NSV_LGBEG_A = 0 ! with indices in the range :
+INTEGER,DIMENSION(JPMODELMAX)::NSV_LGEND_A = 0 ! NSV_LGBEG_A...NSV_LGEND_A
+!
+INTEGER,DIMENSION(JPMODELMAX)::NSV_LNOX_A = 0    ! number of lightning NOx
+INTEGER,DIMENSION(JPMODELMAX)::NSV_LNOXBEG_A = 0 ! with indices in the range :
+INTEGER,DIMENSION(JPMODELMAX)::NSV_LNOXEND_A = 0 ! NSV_LNOXBEG_A...NSV_LNOXEND_A
+INTEGER,DIMENSION(JPMODELMAX)::NSV_DST_A = 0    ! number of dust scalar
+INTEGER,DIMENSION(JPMODELMAX)::NSV_DSTBEG_A = 0 ! with indices in the range :
+INTEGER,DIMENSION(JPMODELMAX)::NSV_DSTEND_A = 0 ! NSV_DSTBEG_A...NSV_DSTEND_A
+!
+INTEGER,DIMENSION(JPMODELMAX)::NSV_SLT_A = 0    ! number of sea salt scalar
+INTEGER,DIMENSION(JPMODELMAX)::NSV_SLTBEG_A = 0 ! with indices in the range :
+INTEGER,DIMENSION(JPMODELMAX)::NSV_SLTEND_A = 0 ! NSV_SLTBEG_A...NSV_SLTEND_A
+!
+INTEGER,DIMENSION(JPMODELMAX)::NSV_AER_A = 0    ! number of aerosol scalar
+INTEGER,DIMENSION(JPMODELMAX)::NSV_AERBEG_A = 0 ! with indices in the range :
+INTEGER,DIMENSION(JPMODELMAX)::NSV_AEREND_A = 0 ! NSV_AERBEG_A...NSV_AEREND_A
+!
+INTEGER,DIMENSION(JPMODELMAX)::NSV_DSTDEP_A    = 0    ! number of aerosol scalar
+INTEGER,DIMENSION(JPMODELMAX)::NSV_DSTDEPBEG_A = 0 ! with indices in the range :
+INTEGER,DIMENSION(JPMODELMAX)::NSV_DSTDEPEND_A = 0 ! NSV_AERBEG_A...NSV_AEREND_A
+!
+INTEGER,DIMENSION(JPMODELMAX)::NSV_AERDEP_A    = 0    ! number of aerosol scalar
+INTEGER,DIMENSION(JPMODELMAX)::NSV_AERDEPBEG_A = 0 ! with indices in the range :
+INTEGER,DIMENSION(JPMODELMAX)::NSV_AERDEPEND_A = 0 ! NSV_AERBEG_A...NSV_AEREND_A
+!
+INTEGER,DIMENSION(JPMODELMAX)::NSV_SLTDEP_A    = 0    ! number of aerosol scalar
+INTEGER,DIMENSION(JPMODELMAX)::NSV_SLTDEPBEG_A = 0 ! with indices in the range :
+INTEGER,DIMENSION(JPMODELMAX)::NSV_SLTDEPEND_A = 0 ! NSV_SLTBEG_A...NSV_SLTEND_A
+!
+INTEGER,DIMENSION(JPMODELMAX)::NSV_PP_A = 0    ! number of passive pol.
+INTEGER,DIMENSION(JPMODELMAX)::NSV_PPBEG_A = 0 ! with indices in the range :
+INTEGER,DIMENSION(JPMODELMAX)::NSV_PPEND_A = 0 ! NSV_PPBEG_A...NSV_PPEND_A
+!
+INTEGER,DIMENSION(JPMODELMAX)::NSV_CS_A = 0    ! number of condit.samplings
+INTEGER,DIMENSION(JPMODELMAX)::NSV_CSBEG_A = 0 ! with indices in the range :
+INTEGER,DIMENSION(JPMODELMAX)::NSV_CSEND_A = 0 ! NSV_CSBEG_A...NSV_CSEND_A
+!
+INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_A = 0     ! number of scalar in LIMA
+INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_BEG_A = 0 ! with indices in the range :
+INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_END_A = 0 ! NSV_LIMA_BEG_A...NSV_LIMA_END_A
+INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_NC_A = 0       ! First Nc variable
+INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_NR_A = 0       ! First Nr variable
+INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_CCN_FREE_A = 0 ! First Free CCN conc.
+INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_CCN_ACTI_A = 0 ! First Acti. CNN conc.
+INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_SCAVMASS_A = 0 ! Scavenged mass variable
+INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_NI_A = 0       ! First Ni var.
+INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_NS_A = 0       ! First Ns var.
+INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_NG_A = 0       ! First Ng var.
+INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_NH_A = 0       ! First Nh var.
+INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_IFN_FREE_A = 0 ! First Free IFN conc.
+INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_IFN_NUCL_A = 0 ! First Nucl. IFN conc.
+INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_IMM_NUCL_A = 0 ! First Nucl. IMM conc.
+INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_HOM_HAZE_A = 0 ! Hom. freezing of CCN
+INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_SPRO_A = 0     ! Supersaturation
+!
+#ifdef MNH_FOREFIRE
+INTEGER,DIMENSION(JPMODELMAX)::NSV_FF_A = 0    ! number of ForeFire scalar variables
+INTEGER,DIMENSION(JPMODELMAX)::NSV_FFBEG_A = 0 ! with indices in the range :
+INTEGER,DIMENSION(JPMODELMAX)::NSV_FFEND_A = 0 ! NSV_FFBEG_A...NSV_FFEND_A
+!
+#endif
+! Blaze smoke indexes
+INTEGER,DIMENSION(JPMODELMAX)::NSV_FIRE_A = 0    ! number of Blaze smoke scalar variables
+INTEGER,DIMENSION(JPMODELMAX)::NSV_FIREBEG_A = 0 ! with indices in the range :
+INTEGER,DIMENSION(JPMODELMAX)::NSV_FIREEND_A = 0 ! NSV_FIREBEG_A...NSV_FIREEND_A
+!
+INTEGER,DIMENSION(JPMODELMAX)::NSV_SNW_A = 0    ! number of blowing snow scalar
+INTEGER,DIMENSION(JPMODELMAX)::NSV_SNWBEG_A = 0 ! with indices in the range :
+INTEGER,DIMENSION(JPMODELMAX)::NSV_SNWEND_A = 0 ! NSV_SNWBEG_A...NSV_SNWEND_A
+!
+!###############################################################################
+!
+! variables updated for the current model
+!
+CHARACTER(LEN=NMNHNAMELGTMAX), DIMENSION(:), POINTER :: CSV_CHEM_LIST !Names of all the chemical variables
+TYPE(tfieldmetadata), DIMENSION(:), POINTER :: TSVLIST !Metadata of all the scalar variables
+
+CHARACTER(LEN=6), DIMENSION(:), ALLOCATABLE :: CSV ! name of the scalar variables
+
+INTEGER :: NSV         = 0 ! total number of user scalar variables
+!
+INTEGER :: NSV_CHEM_LIST = 0 ! total number of chemical variables (including dust, salt...)
+!
+INTEGER :: NSV_USER    = 0 ! number of user scalar variables with indices
+                           ! in the range : 1...NSV_USER
+INTEGER :: NSV_C2R2    = 0 ! number of liq scalar used in C2R2 and in C3R5
+INTEGER :: NSV_C2R2BEG = 0 ! with indices in the range :
+INTEGER :: NSV_C2R2END = 0 ! NSV_C2R2BEG...NSV_C2R2END
+!
+INTEGER :: NSV_C1R3    = 0 ! number of ice scalar used in C3R5
+INTEGER :: NSV_C1R3BEG = 0 ! with indices in the range :
+INTEGER :: NSV_C1R3END = 0 ! NSV_C1R3BEG...NSV_C1R3END
+!
+INTEGER :: NSV_ELEC    = 0 ! number of scalar variables used in ELEC
+INTEGER :: NSV_ELECBEG = 0 ! with indices in the range :
+INTEGER :: NSV_ELECEND = 0 ! NSV_ELECBEG...NSV_ELECEND
+!
+INTEGER :: NSV_CHEM    = 0 ! number of chemical scalar variables
+INTEGER :: NSV_CHEMBEG = 0 ! with indices in the range :
+INTEGER :: NSV_CHEMEND = 0 ! NSV_CHEMBEG...NSV_CHEMEND
+!
+INTEGER :: NSV_CHGS    = 0 ! number of gas-phase chemicals 
+INTEGER :: NSV_CHGSBEG = 0 ! with indices in the range :
+INTEGER :: NSV_CHGSEND = 0 ! NSV_CHGSBEG...NSV_CHGSEND         
+!
+INTEGER :: NSV_CHAC    = 0 ! number of aqueous-phase chemicals
+INTEGER :: NSV_CHACBEG = 0 ! with indices in the range :
+INTEGER :: NSV_CHACEND = 0 ! NSV_CHACBEG...NSV_CHACEND
+!
+INTEGER :: NSV_CHIC    = 0 ! number of ice-phase chemicals
+INTEGER :: NSV_CHICBEG = 0 ! with indices in the range :
+INTEGER :: NSV_CHICEND = 0 ! NSV_CHICBEG...NSV_CHICEND
+!
+INTEGER :: NSV_LG    = 0 ! number of lagrangian
+INTEGER :: NSV_LGBEG = 0 ! with indices in the range :
+INTEGER :: NSV_LGEND = 0 ! NSV_LGBEG...NSV_LGEND
+!
+INTEGER :: NSV_LNOX    = 0 ! number of lightning NOx variables
+INTEGER :: NSV_LNOXBEG = 0 ! with indices in the range :
+INTEGER :: NSV_LNOXEND = 0 ! NSV_LNOXBEG...NSV_LNOXEND
+!
+INTEGER :: NSV_DST     = 0 ! number of dust scalar variables
+INTEGER :: NSV_DSTBEG  = 0 ! with indices in the range :
+INTEGER :: NSV_DSTEND  = 0 ! NSV_DSTBEG...NSV_DSTEND
+
+INTEGER :: NSV_SLT     = 0 ! number of sea salt scalar variables
+INTEGER :: NSV_SLTBEG  = 0 ! with indices in the range :
+INTEGER :: NSV_SLTEND  = 0 ! NSV_SLTBEG...NSV_SLTEND
+
+INTEGER :: NSV_AER     = 0 ! number of aerosol scalar variables
+INTEGER :: NSV_AERBEG  = 0 ! with indices in the range :
+INTEGER :: NSV_AEREND  = 0 ! NSV_AERBEG...NSV_AEREND
+
+INTEGER :: NSV_DSTDEP  = 0 ! number of aerosol scalar variables
+INTEGER :: NSV_DSTDEPBEG  = 0 ! with indices in the range :
+INTEGER :: NSV_DSTDEPEND  = 0 ! NSV_AERBEG...NSV_AEREND
+!
+INTEGER :: NSV_AERDEP  = 0 ! number of aerosol scalar variables
+INTEGER :: NSV_AERDEPBEG  = 0 ! with indices in the range :
+INTEGER :: NSV_AERDEPEND  = 0 ! NSV_AERBEG...NSV_AEREND
+
+INTEGER :: NSV_SLTDEP  = 0 ! number of aerosol scalar variables
+INTEGER :: NSV_SLTDEPBEG  = 0 ! with indices in the range :
+INTEGER :: NSV_SLTDEPEND  = 0 ! NSV_AERBEG...NSV_AEREND
+!
+INTEGER :: NSV_PP    = 0 ! number of passive pollutants       
+INTEGER :: NSV_PPBEG = 0 ! with indices in the range :
+INTEGER :: NSV_PPEND = 0 ! NSV_PPBEG...NSV_PPEND
+!
+INTEGER :: NSV_CS    = 0 ! number of condit.samplings         
+INTEGER :: NSV_CSBEG = 0 ! with indices in the range :
+INTEGER :: NSV_CSEND = 0 ! NSV_CSBEG...NSV_CSEND
+!
+INTEGER :: NSV_LIMA     ! number of scalar in LIMA
+INTEGER :: NSV_LIMA_BEG ! with indices in the range :
+INTEGER :: NSV_LIMA_END ! NSV_LIMA_BEG_A...NSV_LIMA_END_A
+INTEGER :: NSV_LIMA_NC       !
+INTEGER :: NSV_LIMA_NR       !
+INTEGER :: NSV_LIMA_CCN_FREE !
+INTEGER :: NSV_LIMA_CCN_ACTI !
+INTEGER :: NSV_LIMA_SCAVMASS !
+INTEGER :: NSV_LIMA_NI       !
+INTEGER :: NSV_LIMA_NS       !
+INTEGER :: NSV_LIMA_NG       !
+INTEGER :: NSV_LIMA_NH       !
+INTEGER :: NSV_LIMA_IFN_FREE !
+INTEGER :: NSV_LIMA_IFN_NUCL !
+INTEGER :: NSV_LIMA_IMM_NUCL !
+INTEGER :: NSV_LIMA_HOM_HAZE !
+INTEGER :: NSV_LIMA_SPRO     !
+!
+#ifdef MNH_FOREFIRE
+INTEGER :: NSV_FF    = 0 ! number of ForeFire scalar variables
+INTEGER :: NSV_FFBEG = 0 ! with indices in the range :
+INTEGER :: NSV_FFEND = 0 ! NSV_FFBEG...NSV_FFEND
+!
+#endif
+! Blaze smoke
+INTEGER :: NSV_FIRE    = 0 ! number of Blaze smoke scalar variables
+INTEGER :: NSV_FIREBEG = 0 ! with indices in the range :
+INTEGER :: NSV_FIREEND = 0 ! NSV_FIREBEG...NSV_FIREEND
+!
+INTEGER :: NSV_SNW     = 0 ! number of blowing snow scalar variables
+INTEGER :: NSV_SNWBEG  = 0 ! with indices in the range :
+INTEGER :: NSV_SNWEND  = 0 ! NSV_SNWBEG...NSV_SNWEND
+!
+INTEGER :: NSV_CO2     = 0  ! index for CO2
+!
+END MODULE MODD_NSV
diff --git a/src/mesonh/micro/hypgeo.f90 b/src/common/micro/hypgeo.F90
similarity index 100%
rename from src/mesonh/micro/hypgeo.f90
rename to src/common/micro/hypgeo.F90
diff --git a/src/mesonh/micro/ini_lima.f90 b/src/common/micro/ini_lima.F90
similarity index 98%
rename from src/mesonh/micro/ini_lima.f90
rename to src/common/micro/ini_lima.F90
index 54c784e641111c8f83b00b5063f2006b38eb8569..6f4bdcd0015f42e8c770bac6981c0542eb09ee4a 100644
--- a/src/mesonh/micro/ini_lima.f90
+++ b/src/common/micro/ini_lima.F90
@@ -55,7 +55,7 @@ USE MODD_CST
 USE MODD_REF
 USE MODD_PARAM_LIMA
 USE MODD_PARAMETERS
-USE MODD_LUNIT, ONLY : TLUOUT0
+!USE MODD_LUNIT, ONLY : TLUOUT0
 !
 IMPLICIT NONE
 !
@@ -88,7 +88,7 @@ INTEGER  :: IRESP   ! Return code of FM-routines
 !
 !
 ! Init output listing
-ILUOUT0 = TLUOUT0%NLU
+!ILUOUT0 = TLUOUT0%NLU
 !
 !
 ZVTRMAX(2) = 0.3         ! Maximum cloud droplet fall speed
diff --git a/src/mesonh/micro/ini_lima_cold_mixed.f90 b/src/common/micro/ini_lima_cold_mixed.F90
similarity index 69%
rename from src/mesonh/micro/ini_lima_cold_mixed.f90
rename to src/common/micro/ini_lima_cold_mixed.F90
index 2e3d956a46102eb75e5707369aed815f7f9bb798..55303431f6c033e1ae31ab923f02f13b7570af5a 100644
--- a/src/mesonh/micro/ini_lima_cold_mixed.f90
+++ b/src/common/micro/ini_lima_cold_mixed.F90
@@ -51,32 +51,30 @@ END MODULE MODI_INI_LIMA_COLD_MIXED
 !              ------------
 !
 USE MODD_CST
-USE MODD_LUNIT, ONLY: TLUOUT0
+!USE MODD_LUNIT, ONLY: TLUOUT0
 USE MODD_PARAMETERS
 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
 !
-USE MODI_LIMA_FUNCTIONS
+USE MODE_LIMA_FUNCTIONS, ONLY: MOMG, GAUHER
 USE MODI_GAMMA
 USE MODI_GAMMA_INC
 USE MODE_RRCOLSS, ONLY: RRCOLSS
 USE MODE_RZCOLX, ONLY: RZCOLX
 USE MODE_RSCOLRG, ONLY: RSCOLRG
-USE MODI_NRCOLSS
-USE MODI_NZCOLX
-USE MODI_NSCOLRG
-USE MODI_LIMA_READ_XKER_RACCS
-USE MODI_LIMA_READ_XKER_SDRYG
-USE MODI_LIMA_READ_XKER_RDRYG
-USE MODI_LIMA_READ_XKER_SWETH
-USE MODI_LIMA_READ_XKER_GWETH
+USE MODE_NRCOLSS, ONLY: NRCOLSS
+USE MODE_NZCOLX, ONLY: NZCOLX 
+USE MODE_NSCOLRG, ONLY: NSCOLRG
+USE MODE_LIMA_READ_XKER_RACCS, ONLY: LIMA_READ_XKER_RACCS
+USE MODE_LIMA_READ_XKER_SDRYG, ONLY: LIMA_READ_XKER_SDRYG
+USE MODE_LIMA_READ_XKER_RDRYG, ONLY: LIMA_READ_XKER_RDRYG
+USE MODE_LIMA_READ_XKER_SWETH, ONLY: LIMA_READ_XKER_SWETH
+USE MODE_LIMA_READ_XKER_GWETH, ONLY: LIMA_READ_XKER_GWETH
 !
 IMPLICIT NONE
 !
@@ -109,9 +107,9 @@ REAL :: ZESR, ZESS            ! Mean efficiency of rain-aggregate collection, ag
 REAL :: ZFDINFTY              ! Factor used to define the "infinite" diameter
 !
 !
-INTEGER  :: ILUOUT0 ! Logical unit number for output-listing
-LOGICAL  :: GFLAG   ! Logical flag for printing the constatnts on the output
-                    ! listing
+!INTEGER  :: ILUOUT0 ! Logical unit number for output-listing
+!LOGICAL  :: GFLAG   ! Logical flag for printing the constatnts on the output
+!                    ! listing
 REAL     :: ZCONC_MAX ! Maximal concentration for snow
 REAL     :: ZFACT_NUCL! Amplification factor for the minimal ice concentration
 !  
@@ -150,13 +148,13 @@ REAL :: ZRHOIW ! ice density
 !-------------------------------------------------------------------------------
 !
 !
-ILUOUT0 = TLUOUT0%NLU
+!ILUOUT0 = TLUOUT0%NLU
 !
 !
 !*       1.     CHARACTERISTICS OF THE SPECIES
 !   	        ------------------------------
 !
-CALL RAIN_ICE_PARAM_ASSOCIATE()
+!CALL RAIN_ICE_PARAM_ASSOCIATE()
 !
 !*       1.2    Ice crystal characteristics
 !
@@ -334,14 +332,14 @@ ELSE
    XLBH   = XAH * MOMG(XALPHAH,XNUH,XBH)
 END IF
 !
-GFLAG = .TRUE.
-IF (GFLAG) THEN
-  WRITE(UNIT=ILUOUT0,FMT='("      Shape Parameters")')
-  WRITE(UNIT=ILUOUT0,FMT='(" XLBEXI =",E13.6," XLBI =",E13.6)') XLBEXI,XLBI
-  WRITE(UNIT=ILUOUT0,FMT='(" XLBEXS =",E13.6," XLBS =",E13.6)') XLBEXS,XLBS
-  WRITE(UNIT=ILUOUT0,FMT='(" XLBEXG =",E13.6," XLBG =",E13.6)') XLBEXG,XLBG
-  WRITE(UNIT=ILUOUT0,FMT='(" XLBEXH =",E13.6," XLBH =",E13.6)') XLBEXH,XLBH
-END IF
+!!$GFLAG = .TRUE.
+!!$IF (GFLAG) THEN
+!!$  WRITE(UNIT=ILUOUT0,FMT='("      Shape Parameters")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" XLBEXI =",E13.6," XLBI =",E13.6)') XLBEXI,XLBI
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" XLBEXS =",E13.6," XLBS =",E13.6)') XLBEXS,XLBS
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" XLBEXG =",E13.6," XLBG =",E13.6)') XLBEXG,XLBG
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" XLBEXH =",E13.6," XLBH =",E13.6)') XLBEXH,XLBH
+!!$END IF
 !
 XLBDAS_MAX = 1.E7 ! (eq to r~1E-7kg/kg) (for non MP PSD, use conversion XTRANS_MP_GAMMAS)
 XLBDAS_MIN = 1.   ! (eq to r~0.18kg/kg) (for non MP PSD, use conversion XTRANS_MP_GAMMAS)
@@ -593,14 +591,14 @@ XEX_CON    = -2.8
 !
 XMNU0 = 6.88E-13
 !
-IF (LMEYERS) THEN
-  WRITE(UNIT=ILUOUT0,FMT='("      Heterogeneous nucleation")')
-  WRITE(UNIT=ILUOUT0,FMT='(" XNUC_DEP=",E13.6," XEXSI=",E13.6," XEX=",E13.6)') &
-                                                      XNUC_DEP,XEXSI_DEP,XEX_DEP
-  WRITE(UNIT=ILUOUT0,FMT='(" XNUC_CON=",E13.6," XEXTT=",E13.6," XEX=",E13.6)') &
-                                                      XNUC_CON,XEXTT_CON,XEX_CON
-  WRITE(UNIT=ILUOUT0,FMT='(" mass of embryo XMNU0=",E13.6)') XMNU0
-END IF
+!!$IF (LMEYERS) THEN
+!!$  WRITE(UNIT=ILUOUT0,FMT='("      Heterogeneous nucleation")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" XNUC_DEP=",E13.6," XEXSI=",E13.6," XEX=",E13.6)') &
+!!$                                                      XNUC_DEP,XEXSI_DEP,XEX_DEP
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" XNUC_CON=",E13.6," XEXTT=",E13.6," XEX=",E13.6)') &
+!!$                                                      XNUC_CON,XEXTT_CON,XEX_CON
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" mass of embryo XMNU0=",E13.6)') XMNU0
+!!$END IF
 !
 !                 ***************** 
 !*          4.3   NUCLEATION for NMOM_I=1
@@ -614,7 +612,7 @@ XNU20 = 1000.*ZFACT_NUCL
 XALPHA2 = 12.96
 XBETA2 = 0.639
 !
-IMNU0 = 6.88E-13
+!XMNU0 = 6.88E-13
 !-------------------------------------------------------------------------------
 !
 !
@@ -655,16 +653,16 @@ ELSE
                   '/= 3. No algorithm developed for this case' )
 END IF
 !
-GFLAG = .TRUE.
-IF (GFLAG) THEN
-  WRITE(UNIT=ILUOUT0,FMT='("      Homogeneous nucleation")')
-  WRITE(UNIT=ILUOUT0,FMT='(" XTEXP1_HONC=",E13.6)') XTEXP1_HONC
-  WRITE(UNIT=ILUOUT0,FMT='(" XTEXP2_HONC=",E13.6)') XTEXP2_HONC
-  WRITE(UNIT=ILUOUT0,FMT='(" XTEXP3_HONC=",E13.6)') XTEXP3_HONC
-  WRITE(UNIT=ILUOUT0,FMT='(" XTEXP4_HONC=",E13.6)') XTEXP4_HONC
-  WRITE(UNIT=ILUOUT0,FMT='(" XTEXP5_HONC=",E13.6)') XTEXP5_HONC
-  WRITE(UNIT=ILUOUT0,FMT='("XC_HONC=",E13.6," XR_HONC=",E13.6)') XC_HONC,XR_HONC
-END IF
+!!$GFLAG = .TRUE.
+!!$IF (GFLAG) THEN
+!!$  WRITE(UNIT=ILUOUT0,FMT='("      Homogeneous nucleation")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" XTEXP1_HONC=",E13.6)') XTEXP1_HONC
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" XTEXP2_HONC=",E13.6)') XTEXP2_HONC
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" XTEXP3_HONC=",E13.6)') XTEXP3_HONC
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" XTEXP4_HONC=",E13.6)') XTEXP4_HONC
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" XTEXP5_HONC=",E13.6)') XTEXP5_HONC
+!!$  WRITE(UNIT=ILUOUT0,FMT='("XC_HONC=",E13.6," XR_HONC=",E13.6)') XC_HONC,XR_HONC
+!!$END IF
 !
 !
 !*       5.2    Constants for vapor deposition on ice
@@ -756,11 +754,11 @@ XCOLEXII = 0.025   !  Temperature factor of the I+I collection efficiency
 !
 XTEXAUTI = 0.025   !  Temperature factor of the I+I collection efficiency
 !
-GFLAG = .TRUE.
-IF (GFLAG) THEN
-  WRITE(UNIT=ILUOUT0,FMT='("      pristine ice autoconversion")')
-  WRITE(UNIT=ILUOUT0,FMT='(" Temp. factor    XTEXAUTI=",E13.6)') XTEXAUTI
-END IF
+!!$GFLAG = .TRUE.
+!!$IF (GFLAG) THEN
+!!$  WRITE(UNIT=ILUOUT0,FMT='("      pristine ice autoconversion")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" Temp. factor    XTEXAUTI=",E13.6)') XTEXAUTI
+!!$END IF
 !
 XAUTO3 = 6.25E18*(ZGAMI(2))**(1./3.)*SQRT(ZGAMI(4))
 XAUTO4 = 0.5E6*(ZGAMI(4))**(1./6.)
@@ -780,11 +778,11 @@ XAGGS_CLARGE2 = XKER_ZRNIC_A2*ZGAMS(2)
 XAGGS_RLARGE1 = XKER_ZRNIC_A2*ZGAMI(6)*XAI
 XAGGS_RLARGE2 = XKER_ZRNIC_A2*ZGAMI(7)*ZGAMS(2)*XAI
 !
-GFLAG = .TRUE.
-IF (GFLAG) THEN
-  WRITE(UNIT=ILUOUT0,FMT='("      snow aggregation")')
-  WRITE(UNIT=ILUOUT0,FMT='(" Temp. factor     XCOLEXIS=",E13.6)') XCOLEXIS
-END IF
+!!$GFLAG = .TRUE.
+!!$IF (GFLAG) THEN
+!!$  WRITE(UNIT=ILUOUT0,FMT='("      snow aggregation")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" Temp. factor     XCOLEXIS=",E13.6)') XCOLEXIS
+!!$END IF
 !  
 !-------------------------------------------------------------------------------
 !
@@ -809,13 +807,13 @@ XEXSRIMCG= -XBS
 XSRIMCG2 = XAG*MOMG(XALPHAS,XNUS,XBG)
 XSRIMCG3 = 0.1
 XEXSRIMCG2=XBG
-GFLAG = .TRUE.
-IF (GFLAG) THEN
-  WRITE(UNIT=ILUOUT0,FMT='("      riming of the aggregates")')
-  WRITE(UNIT=ILUOUT0,FMT='(" D_cs^lim (Farley et al.) XDCSLIM=",E13.6)') XDCSLIM
-  WRITE(UNIT=ILUOUT0,FMT='(" Coll. efficiency          XCOLCS=",E13.6)') XCOLCS
-END IF
-!
+!!$GFLAG = .TRUE.
+!!$IF (GFLAG) THEN
+!!$  WRITE(UNIT=ILUOUT0,FMT='("      riming of the aggregates")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" D_cs^lim (Farley et al.) XDCSLIM=",E13.6)') XDCSLIM
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" Coll. efficiency          XCOLCS=",E13.6)') XCOLCS
+!!$END IF
+!!$!
 NGAMINC = 80
 XGAMINC_BOUND_MIN = (1000.*XTRANS_MP_GAMMAS*XDCSLIM)**XALPHAS !1.0E-1 ! Minimal value of (Lbda * D_cs^lim)**alpha
 XGAMINC_BOUND_MAX = (50000.*XTRANS_MP_GAMMAS*XDCSLIM)**XALPHAS !1.0E7 ! Maximal value of (Lbda * D_cs^lim)**alpha
@@ -929,33 +927,33 @@ CALL NSCOLRG ( IND, XALPHAS, XNUS, XALPHAR, XNUR,                          &
                ZESR, XCS, XDS, XFVELOS, XCR, XDR,                          & 
                XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, & 
                ZFDINFTY, XKER_N_SACCRG,XAG, XBS, XAS                       )
-WRITE(UNIT=ILUOUT0,FMT='("!")')
-WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_RACCSS) ) THEN")')          
-DO J1 = 1 , NACCLBDAS                                                    
-  DO J2 = 1 , NACCLBDAR                                                  
-  WRITE(UNIT=ILUOUT0,FMT='("  PKER_N_RACCSS(",I3,",",I3,") = ",E13.6)') &
-                    J1,J2,XKER_N_RACCSS(J1,J2)                          
-  END DO                                                                
-END DO                                                                   
-WRITE(UNIT=ILUOUT0,FMT='("!")')                                           
-WRITE(UNIT=ILUOUT0,FMT='("!")')
-WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_RACCS) ) THEN")')          
-DO J1 = 1 , NACCLBDAS                                                    
-  DO J2 = 1 , NACCLBDAR                                                  
-  WRITE(UNIT=ILUOUT0,FMT='("  PKER_N_RACCS(",I3,",",I3,") = ",E13.6)') &
-                    J1,J2,XKER_N_RACCS(J1,J2)                          
-  END DO                                                                
-END DO                                                                   
-WRITE(UNIT=ILUOUT0,FMT='("!")') 
-WRITE(UNIT=ILUOUT0,FMT='("!")')
-WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_SACCRG) ) THEN")')          
-DO J1 = 1 , NACCLBDAR                                                    
-  DO J2 = 1 , NACCLBDAS                                                  
-  WRITE(UNIT=ILUOUT0,FMT='("  PKER_N_SACCRG(",I3,",",I3,") = ",E13.6)') &
-                    J1,J2,XKER_N_SACCRG(J1,J2)                          
-  END DO                                                                
-END DO                                                                   
-WRITE(UNIT=ILUOUT0,FMT='("!")') 
+!!$WRITE(UNIT=ILUOUT0,FMT='("!")')
+!!$WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_RACCSS) ) THEN")')          
+!!$DO J1 = 1 , NACCLBDAS                                                    
+!!$  DO J2 = 1 , NACCLBDAR                                                  
+!!$  WRITE(UNIT=ILUOUT0,FMT='("  PKER_N_RACCSS(",I3,",",I3,") = ",E13.6)') &
+!!$                    J1,J2,XKER_N_RACCSS(J1,J2)                          
+!!$  END DO                                                                
+!!$END DO                                                                   
+!!$WRITE(UNIT=ILUOUT0,FMT='("!")')                                           
+!!$WRITE(UNIT=ILUOUT0,FMT='("!")')
+!!$WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_RACCS) ) THEN")')          
+!!$DO J1 = 1 , NACCLBDAS                                                    
+!!$  DO J2 = 1 , NACCLBDAR                                                  
+!!$  WRITE(UNIT=ILUOUT0,FMT='("  PKER_N_RACCS(",I3,",",I3,") = ",E13.6)') &
+!!$                    J1,J2,XKER_N_RACCS(J1,J2)                          
+!!$  END DO                                                                
+!!$END DO                                                                   
+!!$WRITE(UNIT=ILUOUT0,FMT='("!")') 
+!!$WRITE(UNIT=ILUOUT0,FMT='("!")')
+!!$WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_SACCRG) ) THEN")')          
+!!$DO J1 = 1 , NACCLBDAR                                                    
+!!$  DO J2 = 1 , NACCLBDAS                                                  
+!!$  WRITE(UNIT=ILUOUT0,FMT='("  PKER_N_SACCRG(",I3,",",I3,") = ",E13.6)') &
+!!$                    J1,J2,XKER_N_SACCRG(J1,J2)                          
+!!$  END DO                                                                
+!!$END DO                                                                   
+!!$WRITE(UNIT=ILUOUT0,FMT='("!")') 
 
 !
 CALL LIMA_READ_XKER_RACCS (KACCLBDAS,KACCLBDAR,KND,                                        &
@@ -982,71 +980,71 @@ IF( (KACCLBDAS/=NACCLBDAS) .OR. (KACCLBDAR/=NACCLBDAR) .OR. (KND/=IND) .OR. &
                  ZESR, XBS, XCS, XDS, XFVELOS, XCR, XDR,                     &
                  XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, &
                  ZFDINFTY, XKER_SACCRG,XAG, XBS, XAS                         )
-  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
-  WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF RACSS KERNELS ****")')
-  WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF RACS  KERNELS ****")')
-  WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF SACRG KERNELS ****")')
-  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
-  WRITE(UNIT=ILUOUT0,FMT='("!")')
-  WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND
-  WRITE(UNIT=ILUOUT0,FMT='("KACCLBDAS=",I3)') NACCLBDAS
-  WRITE(UNIT=ILUOUT0,FMT='("KACCLBDAR=",I3)') NACCLBDAR
-  WRITE(UNIT=ILUOUT0,FMT='("PALPHAS=",E13.6)') XALPHAS
-  WRITE(UNIT=ILUOUT0,FMT='("PNUS=",E13.6)') XNUS
-  WRITE(UNIT=ILUOUT0,FMT='("PALPHAR=",E13.6)') XALPHAR
-  WRITE(UNIT=ILUOUT0,FMT='("PNUR=",E13.6)') XNUR
-  WRITE(UNIT=ILUOUT0,FMT='("PESR=",E13.6)') ZESR
-  WRITE(UNIT=ILUOUT0,FMT='("PBS=",E13.6)') XBS
-  WRITE(UNIT=ILUOUT0,FMT='("PBR=",E13.6)') XBR
-  WRITE(UNIT=ILUOUT0,FMT='("PCS=",E13.6)') XCS
-  WRITE(UNIT=ILUOUT0,FMT='("PDS=",E13.6)') XDS
-  WRITE(UNIT=ILUOUT0,FMT='("PFVELOS=",E13.6)') XFVELOS
-  WRITE(UNIT=ILUOUT0,FMT='("PCR=",E13.6)') XCR
-  WRITE(UNIT=ILUOUT0,FMT='("PDR=",E13.6)') XDR
-  WRITE(UNIT=ILUOUT0,FMT='("PACCLBDAS_MAX=",E13.6)') &
-                                                    XACCLBDAS_MAX
-  WRITE(UNIT=ILUOUT0,FMT='("PACCLBDAR_MAX=",E13.6)') &
-                                                    XACCLBDAR_MAX
-  WRITE(UNIT=ILUOUT0,FMT='("PACCLBDAS_MIN=",E13.6)') &
-                                                    XACCLBDAS_MIN
-  WRITE(UNIT=ILUOUT0,FMT='("PACCLBDAR_MIN=",E13.6)') &
-                                                    XACCLBDAR_MIN
-  WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY
-  WRITE(UNIT=ILUOUT0,FMT='("!")')
-  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_RACCSS) ) THEN")')
-  DO J1 = 1 , NACCLBDAS
-    DO J2 = 1 , NACCLBDAR
-    WRITE(UNIT=ILUOUT0,FMT='("  PKER_RACCSS(",I3,",",I3,") = ",E13.6)') &
-                        J1,J2,XKER_RACCSS(J1,J2)
-    END DO
-  END DO
-  WRITE(UNIT=ILUOUT0,FMT='("END IF")')
-  WRITE(UNIT=ILUOUT0,FMT='("!")')
-  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_RACCS ) ) THEN")')
-  DO J1 = 1 , NACCLBDAS
-    DO J2 = 1 , NACCLBDAR
-    WRITE(UNIT=ILUOUT0,FMT='("  PKER_RACCS (",I3,",",I3,") = ",E13.6)') &
-                        J1,J2,XKER_RACCS (J1,J2)
-    END DO
-  END DO
-  WRITE(UNIT=ILUOUT0,FMT='("END IF")')
-  WRITE(UNIT=ILUOUT0,FMT='("!")')
-  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_SACCRG) ) THEN")')
-  DO J1 = 1 , NACCLBDAR
-    DO J2 = 1 , NACCLBDAS
-    WRITE(UNIT=ILUOUT0,FMT='("  PKER_SACCRG(",I3,",",I3,") = ",E13.6)') &
-                        J1,J2,XKER_SACCRG(J1,J2)
-    END DO
-  END DO
-  WRITE(UNIT=ILUOUT0,FMT='("END IF")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF RACSS KERNELS ****")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF RACS  KERNELS ****")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF SACRG KERNELS ****")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND
+!!$  WRITE(UNIT=ILUOUT0,FMT='("KACCLBDAS=",I3)') NACCLBDAS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("KACCLBDAR=",I3)') NACCLBDAR
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PALPHAS=",E13.6)') XALPHAS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PNUS=",E13.6)') XNUS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PALPHAR=",E13.6)') XALPHAR
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PNUR=",E13.6)') XNUR
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PESR=",E13.6)') ZESR
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PBS=",E13.6)') XBS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PBR=",E13.6)') XBR
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PCS=",E13.6)') XCS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PDS=",E13.6)') XDS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PFVELOS=",E13.6)') XFVELOS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PCR=",E13.6)') XCR
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PDR=",E13.6)') XDR
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PACCLBDAS_MAX=",E13.6)') &
+!!$                                                    XACCLBDAS_MAX
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PACCLBDAR_MAX=",E13.6)') &
+!!$                                                    XACCLBDAR_MAX
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PACCLBDAS_MIN=",E13.6)') &
+!!$                                                    XACCLBDAS_MIN
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PACCLBDAR_MIN=",E13.6)') &
+!!$                                                    XACCLBDAR_MIN
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY
+!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_RACCSS) ) THEN")')
+!!$  DO J1 = 1 , NACCLBDAS
+!!$    DO J2 = 1 , NACCLBDAR
+!!$    WRITE(UNIT=ILUOUT0,FMT='("  PKER_RACCSS(",I3,",",I3,") = ",E13.6)') &
+!!$                        J1,J2,XKER_RACCSS(J1,J2)
+!!$    END DO
+!!$  END DO
+!!$  WRITE(UNIT=ILUOUT0,FMT='("END IF")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_RACCS ) ) THEN")')
+!!$  DO J1 = 1 , NACCLBDAS
+!!$    DO J2 = 1 , NACCLBDAR
+!!$    WRITE(UNIT=ILUOUT0,FMT='("  PKER_RACCS (",I3,",",I3,") = ",E13.6)') &
+!!$                        J1,J2,XKER_RACCS (J1,J2)
+!!$    END DO
+!!$  END DO
+!!$  WRITE(UNIT=ILUOUT0,FMT='("END IF")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_SACCRG) ) THEN")')
+!!$  DO J1 = 1 , NACCLBDAR
+!!$    DO J2 = 1 , NACCLBDAS
+!!$    WRITE(UNIT=ILUOUT0,FMT='("  PKER_SACCRG(",I3,",",I3,") = ",E13.6)') &
+!!$                        J1,J2,XKER_SACCRG(J1,J2)
+!!$    END DO
+!!$  END DO
+!!$  WRITE(UNIT=ILUOUT0,FMT='("END IF")')
   ELSE
   CALL LIMA_READ_XKER_RACCS (KACCLBDAS,KACCLBDAR,KND,                                        &
                              PALPHAS,PNUS,PALPHAR,PNUR,PESR,PBS,PBR,PCS,PDS,PFVELOS,PCR,PDR, &
                              PACCLBDAS_MAX,PACCLBDAR_MAX,PACCLBDAS_MIN,PACCLBDAR_MIN,        &
                              PFDINFTY,XKER_RACCSS,XKER_RACCS,XKER_SACCRG                     )
-  WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_RACCSS")')
-  WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_RACCS ")')
-  WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_SACCRG")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_RACCSS")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_RACCS ")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_SACCRG")')
 END IF
 !
 !*       7.2N  Computations of the tabulated normalized kernels Snow Self Collection !! 
@@ -1083,31 +1081,31 @@ XSCINTP2S = 1.0 - LOG( XSCLBDAS_MIN ) / ZRATE
                XSCLBDAS_MAX, XSCLBDAS_MAX, XSCLBDAS_MIN, XSCLBDAS_MIN, & 
                ZFDINFTY, XKER_N_SSCS                                      ) 
 !
-  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
-  WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF SSCS  KERNELS ***")')
-  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
-  WRITE(UNIT=ILUOUT0,FMT='("!")')
-  WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND
-  WRITE(UNIT=ILUOUT0,FMT='("KSCLBDAS=",I3)') NSCLBDAS
-  WRITE(UNIT=ILUOUT0,FMT='("PALPHAS=",E13.6)') XALPHAS
-  WRITE(UNIT=ILUOUT0,FMT='("PNUS=",E13.6)') XNUS
-  WRITE(UNIT=ILUOUT0,FMT='("PESS=",E13.6)') ZESS
-  WRITE(UNIT=ILUOUT0,FMT='("PBS=",E13.6)') XBS
-  WRITE(UNIT=ILUOUT0,FMT='("PCS=",E13.6)') XCS
-  WRITE(UNIT=ILUOUT0,FMT='("PDS=",E13.6)') XDS
-  WRITE(UNIT=ILUOUT0,FMT='("PSCLBDAS_MAX=",E13.6)') &
-                                                  XSCLBDAS_MAX
-  WRITE(UNIT=ILUOUT0,FMT='("PSCLBDAS_MIN=",E13.6)') &
-                                                  XSCLBDAS_MIN
-  WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY
-  WRITE(UNIT=ILUOUT0,FMT='("!")')
-  WRITE(UNIT=ILUOUT0,FMT='("!")')
-  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_SSCS ) ) THEN")')           
-  DO J1 = 1 , NSCLBDAS                                                     
-    WRITE(UNIT=ILUOUT0,FMT='("  PKER_N_SSCS (",I3,",",I3,") = ",E13.6)') & 
-                      J1,J1,XKER_N_SSCS (J1,J1)                          
-  END DO                                                                    
-  WRITE(UNIT=ILUOUT0,FMT='("!")')  
+!!$  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF SSCS  KERNELS ***")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND
+!!$  WRITE(UNIT=ILUOUT0,FMT='("KSCLBDAS=",I3)') NSCLBDAS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PALPHAS=",E13.6)') XALPHAS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PNUS=",E13.6)') XNUS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PESS=",E13.6)') ZESS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PBS=",E13.6)') XBS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PCS=",E13.6)') XCS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PDS=",E13.6)') XDS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PSCLBDAS_MAX=",E13.6)') &
+!!$                                                  XSCLBDAS_MAX
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PSCLBDAS_MIN=",E13.6)') &
+!!$                                                  XSCLBDAS_MIN
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY
+!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_SSCS ) ) THEN")')           
+!!$  DO J1 = 1 , NSCLBDAS                                                     
+!!$    WRITE(UNIT=ILUOUT0,FMT='("  PKER_N_SSCS (",I3,",",I3,") = ",E13.6)') & 
+!!$                      J1,J1,XKER_N_SSCS (J1,J1)                          
+!!$  END DO                                                                    
+!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')  
 !
 !*       7.2N2    Constants for the 'spontaneous' break-up
 !
@@ -1123,11 +1121,11 @@ XSCINTP2S = 1.0 - LOG( XSCLBDAS_MIN ) / ZRATE
 !
 XFSCVMG = 2.0
 !
-GFLAG = .TRUE.
-IF (GFLAG) THEN
-  WRITE(UNIT=ILUOUT0,FMT='("      conversion-melting of the aggregates")')
-  WRITE(UNIT=ILUOUT0,FMT='(" Conv. factor XFSCVMG=",E13.6)') XFSCVMG
-END IF
+!!$GFLAG = .TRUE.
+!!$IF (GFLAG) THEN
+!!$  WRITE(UNIT=ILUOUT0,FMT='("      conversion-melting of the aggregates")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" Conv. factor XFSCVMG=",E13.6)') XFSCVMG
+!!$END IF
 !
 !
 !*       7.4 Constants for Ice-Ice collision process (CIBU)
@@ -1136,12 +1134,12 @@ XDCSLIM_CIBU_MIN = 2.0E-4 ! D_cs lim min
 XDCSLIM_CIBU_MAX = 1.0E-3 ! D_cs lim max
 XDCGLIM_CIBU_MIN = 2.0E-3 ! D_cg lim min
 !
-GFLAG = .TRUE.
-IF (GFLAG) THEN
-  WRITE(UNIT=ILUOUT0,FMT='(" Ice-ice collision process")')
-  WRITE(UNIT=ILUOUT0,FMT='(" D_cs^lim min-max =",E13.6)') XDCSLIM_CIBU_MIN,XDCSLIM_CIBU_MAX
-  WRITE(UNIT=ILUOUT0,FMT='(" D_cg^lim min     =",E13.6)') XDCGLIM_CIBU_MIN
-END IF
+!!$GFLAG = .TRUE.
+!!$IF (GFLAG) THEN
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" Ice-ice collision process")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" D_cs^lim min-max =",E13.6)') XDCSLIM_CIBU_MIN,XDCSLIM_CIBU_MAX
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" D_cg^lim min     =",E13.6)') XDCGLIM_CIBU_MIN
+!!$END IF
 !
 NGAMINC = 80
 !
@@ -1196,11 +1194,11 @@ XMOMGS_CIBU_3 = MOMG(XALPHAS,XNUS,XBS+XDS)
 !
 XDCRLIM_RDSF_MIN = 0.1E-3 ! D_cr lim min
 !
-GFLAG = .TRUE.
-IF (GFLAG) THEN
-  WRITE(UNIT=ILUOUT0,FMT='(" Ice-rain collision process")')
-  WRITE(UNIT=ILUOUT0,FMT='(" D_cr^lim min     =",E13.6)') XDCRLIM_RDSF_MIN
-END IF
+!!$GFLAG = .TRUE.
+!!$IF (GFLAG) THEN
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" Ice-rain collision process")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" D_cr^lim min     =",E13.6)') XDCRLIM_RDSF_MIN
+!!$END IF
 !
 NGAMINC = 80
 !
@@ -1246,11 +1244,11 @@ XEXICFRR  = -XDR-2.0
 XICFRR    = (XPI/4.0)*XCOLIR*XCR*(ZRHO00**XCEXVT)                  &
                                                      *MOMG(XALPHAR,XNUR,XDR+2.0)
 !
-GFLAG = .TRUE.
-IF (GFLAG) THEN
-  WRITE(UNIT=ILUOUT0,FMT='("      rain contact freezing")')
-  WRITE(UNIT=ILUOUT0,FMT='(" Coll. efficiency          XCOLIR=",E13.6)') XCOLIR
-END IF
+!!$GFLAG = .TRUE.
+!!$IF (GFLAG) THEN
+!!$  WRITE(UNIT=ILUOUT0,FMT='("      rain contact freezing")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" Coll. efficiency          XCOLIR=",E13.6)') XCOLIR
+!!$END IF
 !
 !
 !*       8.2    Constants for the dry growth of the graupeln
@@ -1270,16 +1268,16 @@ XCOLIG    = 0.25 ! Collection efficiency of I+G
 XCOLEXIG  = 0.05 ! Temperature factor of the I+G collection efficiency
 XCOLIG   = 0.01 ! Collection efficiency of I+G
 XCOLEXIG = 0.1  ! Temperature factor of the I+G collection efficiency
-WRITE (ILUOUT0, FMT=*) ' NEW Constants for the cloud ice collection by the graupeln'
-WRITE (ILUOUT0, FMT=*) ' XCOLIG, XCOLEXIG  = ',XCOLIG,XCOLEXIG
+!!$WRITE (ILUOUT0, FMT=*) ' NEW Constants for the cloud ice collection by the graupeln'
+!!$WRITE (ILUOUT0, FMT=*) ' XCOLIG, XCOLEXIG  = ',XCOLIG,XCOLEXIG
 XFIDRYG = (XPI/4.0)*XCOLIG*XCG*(ZRHO00**XCEXVT)*MOMG(XALPHAG,XNUG,XDG+2.0)
 !
-GFLAG = .TRUE.
-IF (GFLAG) THEN
-  WRITE(UNIT=ILUOUT0,FMT='("      cloud ice collection by the graupeln")')
-  WRITE(UNIT=ILUOUT0,FMT='(" Coll. efficiency XCOLIG=",E13.6)') XCOLIG
-  WRITE(UNIT=ILUOUT0,FMT='(" Temp. factor     XCOLEXIG=",E13.6)') XCOLEXIG
-END IF
+!!$GFLAG = .TRUE.
+!!$IF (GFLAG) THEN
+!!$  WRITE(UNIT=ILUOUT0,FMT='("      cloud ice collection by the graupeln")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" Coll. efficiency XCOLIG=",E13.6)') XCOLIG
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" Temp. factor     XCOLEXIG=",E13.6)') XCOLEXIG
+!!$END IF
 !
 !*       8.2.3  Constants for the aggregate collection by the graupeln
 !
@@ -1287,8 +1285,8 @@ XCOLSG    = 0.25 ! Collection efficiency of S+G
 XCOLEXSG  = 0.05 ! Temperature factor of the S+G collection efficiency
 XCOLSG   = 0.01 ! Collection efficiency of S+G
 XCOLEXSG = 0.1  ! Temperature factor of the S+G collection efficiency
-WRITE (ILUOUT0, FMT=*) ' NEW Constants for the aggregate collection by the graupeln'
-WRITE (ILUOUT0, FMT=*) ' XCOLSG, XCOLEXSG  = ',XCOLSG,XCOLEXSG
+!!$WRITE (ILUOUT0, FMT=*) ' NEW Constants for the aggregate collection by the graupeln'
+!!$WRITE (ILUOUT0, FMT=*) ' XCOLSG, XCOLEXSG  = ',XCOLSG,XCOLEXSG
 XFSDRYG = XNS*(XPI/4.0)*XCOLSG*XAS*(ZRHO00**XCEXVT)
 XFNSDRYG= (XPI/4.0)*XCOLSG*(ZRHO00**XCEXVT)
 !
@@ -1299,12 +1297,12 @@ XLBSDRYG1   =    MOMG(XALPHAG,XNUG,2.)*MOMG(XALPHAS,XNUS,XBS)
 XLBSDRYG2   = 2.*MOMG(XALPHAG,XNUG,1.)*MOMG(XALPHAS,XNUS,XBS+1.)
 XLBSDRYG3   =                          MOMG(XALPHAS,XNUS,XBS+2.)
 !
-GFLAG = .TRUE.
-IF (GFLAG) THEN
-  WRITE(UNIT=ILUOUT0,FMT='("      aggregate collection by the graupeln")')
-  WRITE(UNIT=ILUOUT0,FMT='(" Coll. efficiency XCOLSG=",E13.6)') XCOLSG
-  WRITE(UNIT=ILUOUT0,FMT='(" Temp. factor     XCOLEXSG=",E13.6)') XCOLEXSG
-END IF
+!!$GFLAG = .TRUE.
+!!$IF (GFLAG) THEN
+!!$  WRITE(UNIT=ILUOUT0,FMT='("      aggregate collection by the graupeln")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" Coll. efficiency XCOLSG=",E13.6)') XCOLSG
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" Temp. factor     XCOLEXSG=",E13.6)') XCOLEXSG
+!!$END IF
 !
 !*       8.2.4  Constants for the raindrop collection by the graupeln
 !
@@ -1352,15 +1350,15 @@ ALLOCATE( XKER_SDRYG(NDRYLBDAG,NDRYLBDAS) )
               ZEGS, XCG, XDG, 0., XCS, XDS, XFVELOS,                        & 
               XDRYLBDAG_MAX, XDRYLBDAS_MAX, XDRYLBDAG_MIN, XDRYLBDAS_MIN, & 
               ZFDINFTY, XKER_N_SDRYG                                      ) 
-  WRITE(UNIT=ILUOUT0,FMT='("!")')
-  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_SDRYG) ) THEN")')          
-  DO J1 = 1 , NDRYLBDAG                                                    
-    DO J2 = 1 , NDRYLBDAS                                                  
-    WRITE(UNIT=ILUOUT0,FMT='("  PKER_N_SDRYG(",I3,",",I3,") = ",E13.6)') &
-                      J1,J2,XKER_N_SDRYG(J1,J2)                          
-    END DO                                                                
-  END DO                                                                   
-  WRITE(UNIT=ILUOUT0,FMT='("!")') 
+!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_SDRYG) ) THEN")')          
+!!$  DO J1 = 1 , NDRYLBDAG                                                    
+!!$    DO J2 = 1 , NDRYLBDAS                                                  
+!!$    WRITE(UNIT=ILUOUT0,FMT='("  PKER_N_SDRYG(",I3,",",I3,") = ",E13.6)') &
+!!$                      J1,J2,XKER_N_SDRYG(J1,J2)                          
+!!$    END DO                                                                
+!!$  END DO                                                                   
+!!$  WRITE(UNIT=ILUOUT0,FMT='("!")') 
 !end if
 !
 CALL LIMA_READ_XKER_SDRYG (KDRYLBDAG,KDRYLBDAS,KND,                                    &
@@ -1379,48 +1377,48 @@ IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAS/=NDRYLBDAS) .OR. (KND/=IND) .OR. &
                 ZEGS, XBS, XCG, XDG, 0., XCS, XDS, XFVELOS,                 &
                 XDRYLBDAG_MAX, XDRYLBDAS_MAX, XDRYLBDAG_MIN, XDRYLBDAS_MIN, &
                 ZFDINFTY, XKER_SDRYG                                        )
-  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
-  WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF SDRYG KERNELS ****")')
-  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
-  WRITE(UNIT=ILUOUT0,FMT='("!")')
-  WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND
-  WRITE(UNIT=ILUOUT0,FMT='("KDRYLBDAG=",I3)') NDRYLBDAG
-  WRITE(UNIT=ILUOUT0,FMT='("KDRYLBDAS=",I3)') NDRYLBDAS
-  WRITE(UNIT=ILUOUT0,FMT='("PALPHAG=",E13.6)') XALPHAG
-  WRITE(UNIT=ILUOUT0,FMT='("PNUG=",E13.6)') XNUG
-  WRITE(UNIT=ILUOUT0,FMT='("PALPHAS=",E13.6)') XALPHAS
-  WRITE(UNIT=ILUOUT0,FMT='("PNUS=",E13.6)') XNUS
-  WRITE(UNIT=ILUOUT0,FMT='("PEGS=",E13.6)') ZEGS
-  WRITE(UNIT=ILUOUT0,FMT='("PBS=",E13.6)') XBS
-  WRITE(UNIT=ILUOUT0,FMT='("PCG=",E13.6)') XCG
-  WRITE(UNIT=ILUOUT0,FMT='("PDG=",E13.6)') XDG
-  WRITE(UNIT=ILUOUT0,FMT='("PCS=",E13.6)') XCS
-  WRITE(UNIT=ILUOUT0,FMT='("PDS=",E13.6)') XDS
-  WRITE(UNIT=ILUOUT0,FMT='("PFVELOS=",E13.6)') XFVELOS
-  WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAG_MAX=",E13.6)') &
-                                                    XDRYLBDAG_MAX
-  WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAS_MAX=",E13.6)') &
-                                                    XDRYLBDAS_MAX
-  WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAG_MIN=",E13.6)') &
-                                                    XDRYLBDAG_MIN
-  WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAS_MIN=",E13.6)') &
-                                                    XDRYLBDAS_MIN
-  WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY
-  WRITE(UNIT=ILUOUT0,FMT='("!")')
-  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_SDRYG) ) THEN")')
-  DO J1 = 1 , NDRYLBDAG
-    DO J2 = 1 , NDRYLBDAS
-    WRITE(UNIT=ILUOUT0,FMT='("PKER_SDRYG(",I3,",",I3,") = ",E13.6)') &
-                        J1,J2,XKER_SDRYG(J1,J2)
-    END DO
-  END DO
-  WRITE(UNIT=ILUOUT0,FMT='("END IF")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF SDRYG KERNELS ****")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND
+!!$  WRITE(UNIT=ILUOUT0,FMT='("KDRYLBDAG=",I3)') NDRYLBDAG
+!!$  WRITE(UNIT=ILUOUT0,FMT='("KDRYLBDAS=",I3)') NDRYLBDAS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PALPHAG=",E13.6)') XALPHAG
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PNUG=",E13.6)') XNUG
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PALPHAS=",E13.6)') XALPHAS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PNUS=",E13.6)') XNUS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PEGS=",E13.6)') ZEGS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PBS=",E13.6)') XBS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PCG=",E13.6)') XCG
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PDG=",E13.6)') XDG
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PCS=",E13.6)') XCS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PDS=",E13.6)') XDS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PFVELOS=",E13.6)') XFVELOS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAG_MAX=",E13.6)') &
+!!$                                                    XDRYLBDAG_MAX
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAS_MAX=",E13.6)') &
+!!$                                                    XDRYLBDAS_MAX
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAG_MIN=",E13.6)') &
+!!$                                                    XDRYLBDAG_MIN
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAS_MIN=",E13.6)') &
+!!$                                                    XDRYLBDAS_MIN
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY
+!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_SDRYG) ) THEN")')
+!!$  DO J1 = 1 , NDRYLBDAG
+!!$    DO J2 = 1 , NDRYLBDAS
+!!$    WRITE(UNIT=ILUOUT0,FMT='("PKER_SDRYG(",I3,",",I3,") = ",E13.6)') &
+!!$                        J1,J2,XKER_SDRYG(J1,J2)
+!!$    END DO
+!!$  END DO
+!!$  WRITE(UNIT=ILUOUT0,FMT='("END IF")')
   ELSE
   CALL LIMA_READ_XKER_SDRYG (KDRYLBDAG,KDRYLBDAS,KND,                                    &
                              PALPHAG,PNUG,PALPHAS,PNUS,PEGS,PBS,PCG,PDG,PCS,PDS,PFVELOS, &
                              PDRYLBDAG_MAX,PDRYLBDAS_MAX,PDRYLBDAG_MIN,PDRYLBDAS_MIN,    &
                              PFDINFTY,XKER_SDRYG                                         )
-  WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_SDRYG")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_SDRYG")')
 END IF
 !
 !
@@ -1435,15 +1433,15 @@ ALLOCATE( XKER_RDRYG(NDRYLBDAG,NDRYLBDAR) )
                ZEGR, XCG, XDG, 0., XCR, XDR, 0.,                            & 
                XDRYLBDAG_MAX, XDRYLBDAR_MAX, XDRYLBDAG_MIN, XDRYLBDAR_MIN, &
                ZFDINFTY, XKER_N_RDRYG                                      )
-  WRITE(UNIT=ILUOUT0,FMT='("!")')
-  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_RDRYG) ) THEN")')          
-  DO J1 = 1 , NDRYLBDAG                                                    
-    DO J2 = 1 , NDRYLBDAR                                                  
-    WRITE(UNIT=ILUOUT0,FMT='("  PKER_N_RDRYG(",I3,",",I3,") = ",E13.6)') &
-                      J1,J2,XKER_N_RDRYG(J1,J2)                          
-    END DO                                                                
-  END DO                                                                   
-  WRITE(UNIT=ILUOUT0,FMT='("!")') 
+!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_RDRYG) ) THEN")')          
+!!$  DO J1 = 1 , NDRYLBDAG                                                    
+!!$    DO J2 = 1 , NDRYLBDAR                                                  
+!!$    WRITE(UNIT=ILUOUT0,FMT='("  PKER_N_RDRYG(",I3,",",I3,") = ",E13.6)') &
+!!$                      J1,J2,XKER_N_RDRYG(J1,J2)                          
+!!$    END DO                                                                
+!!$  END DO                                                                   
+!!$  WRITE(UNIT=ILUOUT0,FMT='("!")') 
 !end if
 !
 CALL LIMA_READ_XKER_RDRYG (KDRYLBDAG,KDRYLBDAR,KND,                                 &
@@ -1462,47 +1460,47 @@ IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAR/=NDRYLBDAR) .OR. (KND/=IND) .OR. &
                 ZEGR, XBR, XCG, XDG, 0., XCR, XDR, 0.,                      &
                 XDRYLBDAG_MAX, XDRYLBDAR_MAX, XDRYLBDAG_MIN, XDRYLBDAR_MIN, &
                 ZFDINFTY, XKER_RDRYG                                        )
-  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
-  WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF RDRYG KERNELS ****")')
-  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
-  WRITE(UNIT=ILUOUT0,FMT='("!")')
-  WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND
-  WRITE(UNIT=ILUOUT0,FMT='("KDRYLBDAG=",I3)') NDRYLBDAG
-  WRITE(UNIT=ILUOUT0,FMT='("KDRYLBDAR=",I3)') NDRYLBDAR
-  WRITE(UNIT=ILUOUT0,FMT='("PALPHAG=",E13.6)') XALPHAG
-  WRITE(UNIT=ILUOUT0,FMT='("PNUG=",E13.6)') XNUG
-  WRITE(UNIT=ILUOUT0,FMT='("PALPHAR=",E13.6)') XALPHAR
-  WRITE(UNIT=ILUOUT0,FMT='("PNUR=",E13.6)') XNUR
-  WRITE(UNIT=ILUOUT0,FMT='("PEGR=",E13.6)') ZEGR
-  WRITE(UNIT=ILUOUT0,FMT='("PBR=",E13.6)') XBR
-  WRITE(UNIT=ILUOUT0,FMT='("PCG=",E13.6)') XCG
-  WRITE(UNIT=ILUOUT0,FMT='("PDG=",E13.6)') XDG
-  WRITE(UNIT=ILUOUT0,FMT='("PCR=",E13.6)') XCR
-  WRITE(UNIT=ILUOUT0,FMT='("PDR=",E13.6)') XDR
-  WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAG_MAX=",E13.6)') &
-                                                    XDRYLBDAG_MAX
-  WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAR_MAX=",E13.6)') &
-                                                    XDRYLBDAR_MAX
-  WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAG_MIN=",E13.6)') &
-                                                    XDRYLBDAG_MIN
-  WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAR_MIN=",E13.6)') &
-                                                    XDRYLBDAR_MIN
-  WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY
-  WRITE(UNIT=ILUOUT0,FMT='("!")')
-  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_RDRYG) ) THEN")')
-  DO J1 = 1 , NDRYLBDAG
-    DO J2 = 1 , NDRYLBDAR
-    WRITE(UNIT=ILUOUT0,FMT='("PKER_RDRYG(",I3,",",I3,") = ",E13.6)') &
-                        J1,J2,XKER_RDRYG(J1,J2)
-    END DO
-  END DO
-  WRITE(UNIT=ILUOUT0,FMT='("END IF")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF RDRYG KERNELS ****")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND
+!!$  WRITE(UNIT=ILUOUT0,FMT='("KDRYLBDAG=",I3)') NDRYLBDAG
+!!$  WRITE(UNIT=ILUOUT0,FMT='("KDRYLBDAR=",I3)') NDRYLBDAR
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PALPHAG=",E13.6)') XALPHAG
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PNUG=",E13.6)') XNUG
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PALPHAR=",E13.6)') XALPHAR
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PNUR=",E13.6)') XNUR
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PEGR=",E13.6)') ZEGR
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PBR=",E13.6)') XBR
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PCG=",E13.6)') XCG
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PDG=",E13.6)') XDG
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PCR=",E13.6)') XCR
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PDR=",E13.6)') XDR
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAG_MAX=",E13.6)') &
+!!$                                                    XDRYLBDAG_MAX
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAR_MAX=",E13.6)') &
+!!$                                                    XDRYLBDAR_MAX
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAG_MIN=",E13.6)') &
+!!$                                                    XDRYLBDAG_MIN
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PDRYLBDAR_MIN=",E13.6)') &
+!!$                                                    XDRYLBDAR_MIN
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY
+!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_RDRYG) ) THEN")')
+!!$  DO J1 = 1 , NDRYLBDAG
+!!$    DO J2 = 1 , NDRYLBDAR
+!!$    WRITE(UNIT=ILUOUT0,FMT='("PKER_RDRYG(",I3,",",I3,") = ",E13.6)') &
+!!$                        J1,J2,XKER_RDRYG(J1,J2)
+!!$    END DO
+!!$  END DO
+!!$  WRITE(UNIT=ILUOUT0,FMT='("END IF")')
   ELSE
   CALL LIMA_READ_XKER_RDRYG (KDRYLBDAG,KDRYLBDAR,KND,                                 &
                              PALPHAG,PNUG,PALPHAR,PNUR,PEGR,PBR,PCG,PDG,PCR,PDR,      &
                              PDRYLBDAG_MAX,PDRYLBDAR_MAX,PDRYLBDAG_MIN,PDRYLBDAR_MIN, &
                              PFDINFTY,XKER_RDRYG                                      )
-  WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_RDRYG")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_RDRYG")')
 END IF
 !  
 !-------------------------------------------------------------------------------
@@ -1575,15 +1573,15 @@ ZFDINFTY = 20.0  ! computing the kernels XKER_SWETH
               ZEHS, XCH, XDH, 0., XCS, XDS, XFVELOS,                       &  ! 
               XWETLBDAH_MAX, XWETLBDAS_MAX, XWETLBDAH_MIN, XWETLBDAS_MIN, &  ! 
               ZFDINFTY, XKER_N_SWETH                                        )
-  WRITE(UNIT=ILUOUT0,FMT='("!")')
-  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_SWETH) ) THEN")')          
-  DO J1 = 1 , NWETLBDAH                                                    
-    DO J2 = 1 , NWETLBDAS                                                  
-    WRITE(UNIT=ILUOUT0,FMT='("  PKER_N_SWETH(",I3,",",I3,") = ",E13.6)') &
-                      J1,J2,XKER_N_SWETH(J1,J2)                          
-    END DO                                                                
-  END DO                                                                   
-  WRITE(UNIT=ILUOUT0,FMT='("!")') 
+!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_SWETH) ) THEN")')          
+!!$  DO J1 = 1 , NWETLBDAH                                                    
+!!$    DO J2 = 1 , NWETLBDAS                                                  
+!!$    WRITE(UNIT=ILUOUT0,FMT='("  PKER_N_SWETH(",I3,",",I3,") = ",E13.6)') &
+!!$                      J1,J2,XKER_N_SWETH(J1,J2)                          
+!!$    END DO                                                                
+!!$  END DO                                                                   
+!!$  WRITE(UNIT=ILUOUT0,FMT='("!")') 
 !end  if
 IF( .NOT.ALLOCATED(XKER_SWETH) ) ALLOCATE( XKER_SWETH(NWETLBDAH,NWETLBDAS) )
 !
@@ -1603,48 +1601,48 @@ IF( (KWETLBDAH/=NWETLBDAH) .OR. (KWETLBDAS/=NWETLBDAS) .OR. (KND/=IND) .OR. &
                 ZEHS, XBS, XCH, XDH, 0., XCS, XDS, XFVELOS,                 &
                 XWETLBDAH_MAX, XWETLBDAS_MAX, XWETLBDAH_MIN, XWETLBDAS_MIN, &
                 ZFDINFTY, XKER_SWETH                                        )
-  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
-  WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF SWETH KERNELS ****")')
-  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
-  WRITE(UNIT=ILUOUT0,FMT='("!")')
-  WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND
-  WRITE(UNIT=ILUOUT0,FMT='("KWETLBDAH=",I3)') NWETLBDAH
-  WRITE(UNIT=ILUOUT0,FMT='("KWETLBDAS=",I3)') NWETLBDAS
-  WRITE(UNIT=ILUOUT0,FMT='("PALPHAH=",E13.6)') XALPHAH
-  WRITE(UNIT=ILUOUT0,FMT='("PNUH=",E13.6)') XNUH
-  WRITE(UNIT=ILUOUT0,FMT='("PALPHAS=",E13.6)') XALPHAS
-  WRITE(UNIT=ILUOUT0,FMT='("PNUS=",E13.6)') XNUS
-  WRITE(UNIT=ILUOUT0,FMT='("PEHS=",E13.6)') ZEHS
-  WRITE(UNIT=ILUOUT0,FMT='("PBS=",E13.6)') XBS
-  WRITE(UNIT=ILUOUT0,FMT='("PCH=",E13.6)') XCH
-  WRITE(UNIT=ILUOUT0,FMT='("PDH=",E13.6)') XDH
-  WRITE(UNIT=ILUOUT0,FMT='("PCS=",E13.6)') XCS
-  WRITE(UNIT=ILUOUT0,FMT='("PDS=",E13.6)') XDS
-  WRITE(UNIT=ILUOUT0,FMT='("PFVELOS=",E13.6)') XFVELOS
-  WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAH_MAX=",E13.6)') &
-                                                    XWETLBDAH_MAX
-  WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAS_MAX=",E13.6)') &
-                                                    XWETLBDAS_MAX
-  WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAH_MIN=",E13.6)') &
-                                                    XWETLBDAH_MIN
-  WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAS_MIN=",E13.6)') &
-                                                    XWETLBDAS_MIN
-  WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY
-  WRITE(UNIT=ILUOUT0,FMT='("!")')
-  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_SWETH) ) THEN")')
-  DO J1 = 1 , NWETLBDAH
-    DO J2 = 1 , NWETLBDAS
-    WRITE(UNIT=ILUOUT0,FMT='("PKER_SWETH(",I3,",",I3,") = ",E13.6)') &
-                        J1,J2,XKER_SWETH(J1,J2)
-    END DO
-  END DO
-  WRITE(UNIT=ILUOUT0,FMT='("END IF")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF SWETH KERNELS ****")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND
+!!$  WRITE(UNIT=ILUOUT0,FMT='("KWETLBDAH=",I3)') NWETLBDAH
+!!$  WRITE(UNIT=ILUOUT0,FMT='("KWETLBDAS=",I3)') NWETLBDAS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PALPHAH=",E13.6)') XALPHAH
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PNUH=",E13.6)') XNUH
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PALPHAS=",E13.6)') XALPHAS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PNUS=",E13.6)') XNUS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PEHS=",E13.6)') ZEHS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PBS=",E13.6)') XBS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PCH=",E13.6)') XCH
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PDH=",E13.6)') XDH
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PCS=",E13.6)') XCS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PDS=",E13.6)') XDS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PFVELOS=",E13.6)') XFVELOS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAH_MAX=",E13.6)') &
+!!$                                                    XWETLBDAH_MAX
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAS_MAX=",E13.6)') &
+!!$                                                    XWETLBDAS_MAX
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAH_MIN=",E13.6)') &
+!!$                                                    XWETLBDAH_MIN
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAS_MIN=",E13.6)') &
+!!$                                                    XWETLBDAS_MIN
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY
+!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_SWETH) ) THEN")')
+!!$  DO J1 = 1 , NWETLBDAH
+!!$    DO J2 = 1 , NWETLBDAS
+!!$    WRITE(UNIT=ILUOUT0,FMT='("PKER_SWETH(",I3,",",I3,") = ",E13.6)') &
+!!$                        J1,J2,XKER_SWETH(J1,J2)
+!!$    END DO
+!!$  END DO
+!!$  WRITE(UNIT=ILUOUT0,FMT='("END IF")')
   ELSE
   CALL LIMA_READ_XKER_SWETH (KWETLBDAH,KWETLBDAS,KND,                                    &
                              PALPHAH,PNUH,PALPHAS,PNUS,PEHS,PBS,PCH,PDH,PCS,PDS,PFVELOS, &
                              PWETLBDAH_MAX,PWETLBDAS_MAX,PWETLBDAH_MIN,PWETLBDAS_MIN,    &
                              PFDINFTY,XKER_SWETH                                         )
-  WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_SWETH")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_SWETH")')
 END IF
 !
 !
@@ -1658,15 +1656,15 @@ ZFDINFTY = 20.0
               ZEHG, XCH, XDH, 0., XCG, XDG, 0.,                            & 
               XWETLBDAH_MAX, XWETLBDAG_MAX, XWETLBDAH_MIN, XWETLBDAG_MIN, & 
               ZFDINFTY, XKER_N_GWETH                                      )
-  WRITE(UNIT=ILUOUT0,FMT='("!")')
-  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_GWETH) ) THEN")')          
-  DO J1 = 1 , NWETLBDAH                                                    
-    DO J2 = 1 , NWETLBDAG                                                  
-    WRITE(UNIT=ILUOUT0,FMT='("  PKER_N_GWETH(",I3,",",I3,") = ",E13.6)') &
-                      J1,J2,XKER_N_GWETH(J1,J2)                          
-    END DO                                                                
-  END DO                                                                   
-  WRITE(UNIT=ILUOUT0,FMT='("!")') 
+!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_N_GWETH) ) THEN")')          
+!!$  DO J1 = 1 , NWETLBDAH                                                    
+!!$    DO J2 = 1 , NWETLBDAG                                                  
+!!$    WRITE(UNIT=ILUOUT0,FMT='("  PKER_N_GWETH(",I3,",",I3,") = ",E13.6)') &
+!!$                      J1,J2,XKER_N_GWETH(J1,J2)                          
+!!$    END DO                                                                
+!!$  END DO                                                                   
+!!$  WRITE(UNIT=ILUOUT0,FMT='("!")') 
 !end if
 IF( .NOT.ALLOCATED(XKER_GWETH) ) ALLOCATE( XKER_GWETH(NWETLBDAH,NWETLBDAG) )
 !
@@ -1686,47 +1684,47 @@ IF( (KWETLBDAH/=NWETLBDAH) .OR. (KWETLBDAG/=NWETLBDAG) .OR. (KND/=IND) .OR. &
                 ZEHG, XBG, XCH, XDH, 0., XCG, XDG, 0.,                      &
                 XWETLBDAH_MAX, XWETLBDAG_MAX, XWETLBDAH_MIN, XWETLBDAG_MIN, &
                 ZFDINFTY, XKER_GWETH                                        )
-  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
-  WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF GWETH KERNELS ****")')
-  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
-  WRITE(UNIT=ILUOUT0,FMT='("!")')
-  WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND
-  WRITE(UNIT=ILUOUT0,FMT='("KWETLBDAH=",I3)') NWETLBDAH
-  WRITE(UNIT=ILUOUT0,FMT='("KWETLBDAG=",I3)') NWETLBDAG
-  WRITE(UNIT=ILUOUT0,FMT='("PALPHAH=",E13.6)') XALPHAH
-  WRITE(UNIT=ILUOUT0,FMT='("PNUH=",E13.6)') XNUH
-  WRITE(UNIT=ILUOUT0,FMT='("PALPHAG=",E13.6)') XALPHAG
-  WRITE(UNIT=ILUOUT0,FMT='("PNUG=",E13.6)') XNUG
-  WRITE(UNIT=ILUOUT0,FMT='("PEHG=",E13.6)') ZEHG
-  WRITE(UNIT=ILUOUT0,FMT='("PBG=",E13.6)') XBG
-  WRITE(UNIT=ILUOUT0,FMT='("PCH=",E13.6)') XCH
-  WRITE(UNIT=ILUOUT0,FMT='("PDH=",E13.6)') XDH
-  WRITE(UNIT=ILUOUT0,FMT='("PCG=",E13.6)') XCG
-  WRITE(UNIT=ILUOUT0,FMT='("PDG=",E13.6)') XDG
-  WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAH_MAX=",E13.6)') &
-                                                    XWETLBDAH_MAX
-  WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAG_MAX=",E13.6)') &
-                                                    XWETLBDAG_MAX
-  WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAH_MIN=",E13.6)') &
-                                                    XWETLBDAH_MIN
-  WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAG_MIN=",E13.6)') &
-                                                    XWETLBDAG_MIN
-  WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY
-  WRITE(UNIT=ILUOUT0,FMT='("!")')
-  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_GWETH) ) THEN")')
-  DO J1 = 1 , NWETLBDAH
-    DO J2 = 1 , NWETLBDAG
-    WRITE(UNIT=ILUOUT0,FMT='("PKER_GWETH(",I3,",",I3,") = ",E13.6)') &
-                        J1,J2,XKER_GWETH(J1,J2)
-    END DO
-  END DO
-  WRITE(UNIT=ILUOUT0,FMT='("END IF")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("**** UPDATE NEW SET OF GWETH KERNELS ****")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("KND=",I3)') IND
+!!$  WRITE(UNIT=ILUOUT0,FMT='("KWETLBDAH=",I3)') NWETLBDAH
+!!$  WRITE(UNIT=ILUOUT0,FMT='("KWETLBDAG=",I3)') NWETLBDAG
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PALPHAH=",E13.6)') XALPHAH
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PNUH=",E13.6)') XNUH
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PALPHAG=",E13.6)') XALPHAG
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PNUG=",E13.6)') XNUG
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PEHG=",E13.6)') ZEHG
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PBG=",E13.6)') XBG
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PCH=",E13.6)') XCH
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PDH=",E13.6)') XDH
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PCG=",E13.6)') XCG
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PDG=",E13.6)') XDG
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAH_MAX=",E13.6)') &
+!!$                                                    XWETLBDAH_MAX
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAG_MAX=",E13.6)') &
+!!$                                                    XWETLBDAG_MAX
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAH_MIN=",E13.6)') &
+!!$                                                    XWETLBDAH_MIN
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PWETLBDAG_MIN=",E13.6)') &
+!!$                                                    XWETLBDAG_MIN
+!!$  WRITE(UNIT=ILUOUT0,FMT='("PFDINFTY=",E13.6)') ZFDINFTY
+!!$  WRITE(UNIT=ILUOUT0,FMT='("!")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("IF( PRESENT(PKER_GWETH) ) THEN")')
+!!$  DO J1 = 1 , NWETLBDAH
+!!$    DO J2 = 1 , NWETLBDAG
+!!$    WRITE(UNIT=ILUOUT0,FMT='("PKER_GWETH(",I3,",",I3,") = ",E13.6)') &
+!!$                        J1,J2,XKER_GWETH(J1,J2)
+!!$    END DO
+!!$  END DO
+!!$  WRITE(UNIT=ILUOUT0,FMT='("END IF")')
   ELSE
   CALL LIMA_READ_XKER_GWETH (KWETLBDAH,KWETLBDAG,KND,                                 &
                              PALPHAH,PNUH,PALPHAG,PNUG,PEHG,PBG,PCH,PDH,PCG,PDG,      &
                              PWETLBDAH_MAX,PWETLBDAG_MAX,PWETLBDAH_MIN,PWETLBDAG_MIN, &
                              PFDINFTY,XKER_GWETH                                      )
-  WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_GWETH")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_GWETH")')
 END IF
 !
 !
@@ -1748,35 +1746,35 @@ XFREFFI = 0.5 * ZGAMI(8) * (1.0/XLBI)**XLBEXI
 !   	        -----------------------
 !
 !
-GFLAG = .TRUE.
-IF (GFLAG) THEN
-  WRITE(UNIT=ILUOUT0,FMT='(" Summary of the ice particule characteristics")')
-  WRITE(UNIT=ILUOUT0,FMT='("      PRISTINE ICE")')
-  WRITE(UNIT=ILUOUT0,FMT='("                   masse: A=",E13.6," B=",E13.6)') &
-                                                      XAI,XBI
-  WRITE(UNIT=ILUOUT0,FMT='("                 vitesse: C=",E13.6," D=",E13.6)') &
-                                                      XC_I,XDI
-  WRITE(UNIT=ILUOUT0,FMT='("            distribution:AL=",E13.6,"NU=",E13.6)') &
-                                                      XALPHAI,XNUI
-  WRITE(UNIT=ILUOUT0,FMT='("              SNOW")')
-  WRITE(UNIT=ILUOUT0,FMT='("                   masse: A=",E13.6," B=",E13.6)') &
-                                                      XAS,XBS
-  WRITE(UNIT=ILUOUT0,FMT='("                 vitesse: C=",E13.6," D=",E13.6)') &
-                                                      XCS,XDS
-  WRITE(UNIT=ILUOUT0,FMT='("           concentration:CC=",E13.6," x=",E13.6)') &
-                                                      XCCS,XCXS
-  WRITE(UNIT=ILUOUT0,FMT='("            distribution:AL=",E13.6,"NU=",E13.6)') &
-                                                      XALPHAS,XNUS
-  WRITE(UNIT=ILUOUT0,FMT='("            GRAUPEL")')
-  WRITE(UNIT=ILUOUT0,FMT='("                   masse: A=",E13.6," B=",E13.6)') &
-                                                      XAG,XBG
-  WRITE(UNIT=ILUOUT0,FMT='("                 vitesse: C=",E13.6," D=",E13.6)') &
-                                                      XCG,XDG
-  WRITE(UNIT=ILUOUT0,FMT='("           concentration:CC=",E13.6," x=",E13.6)') &
-                                                      XCCG,XCXG
-  WRITE(UNIT=ILUOUT0,FMT='("            distribution:AL=",E13.6,"NU=",E13.6)') &
-                                                      XALPHAG,XNUG
-END IF
+!!$GFLAG = .TRUE.
+!!$IF (GFLAG) THEN
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" Summary of the ice particule characteristics")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("      PRISTINE ICE")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("                   masse: A=",E13.6," B=",E13.6)') &
+!!$                                                      XAI,XBI
+!!$  WRITE(UNIT=ILUOUT0,FMT='("                 vitesse: C=",E13.6," D=",E13.6)') &
+!!$                                                      XC_I,XDI
+!!$  WRITE(UNIT=ILUOUT0,FMT='("            distribution:AL=",E13.6,"NU=",E13.6)') &
+!!$                                                      XALPHAI,XNUI
+!!$  WRITE(UNIT=ILUOUT0,FMT='("              SNOW")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("                   masse: A=",E13.6," B=",E13.6)') &
+!!$                                                      XAS,XBS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("                 vitesse: C=",E13.6," D=",E13.6)') &
+!!$                                                      XCS,XDS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("           concentration:CC=",E13.6," x=",E13.6)') &
+!!$                                                      XCCS,XCXS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("            distribution:AL=",E13.6,"NU=",E13.6)') &
+!!$                                                      XALPHAS,XNUS
+!!$  WRITE(UNIT=ILUOUT0,FMT='("            GRAUPEL")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("                   masse: A=",E13.6," B=",E13.6)') &
+!!$                                                      XAG,XBG
+!!$  WRITE(UNIT=ILUOUT0,FMT='("                 vitesse: C=",E13.6," D=",E13.6)') &
+!!$                                                      XCG,XDG
+!!$  WRITE(UNIT=ILUOUT0,FMT='("           concentration:CC=",E13.6," x=",E13.6)') &
+!!$                                                      XCCG,XCXG
+!!$  WRITE(UNIT=ILUOUT0,FMT='("            distribution:AL=",E13.6,"NU=",E13.6)') &
+!!$                                                      XALPHAG,XNUG
+!!$END IF
 !
 !------------------------------------------------------------------------------
 !
diff --git a/src/arome/micro/ini_lima_warm.F90 b/src/common/micro/ini_lima_warm.F90
similarity index 78%
rename from src/arome/micro/ini_lima_warm.F90
rename to src/common/micro/ini_lima_warm.F90
index e1fce381890992a8307515ccecc7873d8c3e0687..8ae14ed0fe38348f4a761530db6ec43c75b2238d 100644
--- a/src/arome/micro/ini_lima_warm.F90
+++ b/src/common/micro/ini_lima_warm.F90
@@ -1,11 +1,15 @@
+!MNH_LIC Copyright 2013-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
+!MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
 !      #########################
        MODULE MODI_INI_LIMA_WARM
 !      #########################
 !
 INTERFACE
-      SUBROUTINE INI_LIMA_WARM (KULOUT, PTSTEP, PDZMIN)
+      SUBROUTINE INI_LIMA_WARM (PTSTEP, PDZMIN)
 !
-INTEGER,                 INTENT(IN) :: KULOUT    ! output logical unit number
 REAL,                    INTENT(IN) :: PTSTEP    ! Effective Time step 
 REAL,                    INTENT(IN) :: PDZMIN    ! minimun vertical mesh size
 !
@@ -15,7 +19,7 @@ END INTERFACE
 !
 END MODULE MODI_INI_LIMA_WARM
 !     #########################################
-      SUBROUTINE INI_LIMA_WARM (KULOUT, PTSTEP, PDZMIN)
+      SUBROUTINE INI_LIMA_WARM (PTSTEP, PDZMIN)
 !     #########################################
 !
 !!    PURPOSE
@@ -33,20 +37,22 @@ END MODULE MODI_INI_LIMA_WARM
 !!    MODIFICATIONS
 !!    -------------
 !!      Original             ??/??/13 
-!!
+!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function
+!
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
 USE MODD_CST
-
+USE MODD_REF
 USE MODD_PARAM_LIMA
 USE MODD_PARAM_LIMA_WARM
 USE MODD_PARAMETERS
-USE MODD_LUNIT
+!USE MODD_LUNIT, ONLY : TLUOUT0
 !
-USE MODI_LIMA_FUNCTIONS
+USE MODE_LIMA_FUNCTIONS, ONLY: MOMG
 USE MODI_HYPGEO
 USE MODI_GAMMA
 !
@@ -54,7 +60,6 @@ IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
-INTEGER,                 INTENT(IN) :: KULOUT    ! output logical unit number
 REAL,                    INTENT(IN) :: PTSTEP    ! Effective Time step 
 REAL,                    INTENT(IN) :: PDZMIN    ! minimun vertical mesh size
 !
@@ -80,8 +85,9 @@ REAL :: ZSMIN, ZSMAX          ! Minimal and maximal supersaturation used to
                               ! discretize the HYP functions
 !
 !
-INTEGER  :: IRESP   ! Return code of FM-routines
-LOGICAL  :: GFLAG   ! Logical flag for printing the constatnts on the output
+!INTEGER  :: ILUOUT0 ! Logical unit number for output-listing
+!INTEGER  :: IRESP   ! Return code of FM-routines
+!LOGICAL  :: GFLAG   ! Logical flag for printing the constatnts on the output
                     ! listing
 !  
 !-------------------------------------------------------------------------------
@@ -156,8 +162,17 @@ ZGAMR(6) = MOMG(XALPHAR,XNUR,3.)**(2./3.)/MOMG(XALPHAR,XNUR,2.)
 !
 XLBC   = XAR*ZGAMC(2)
 XLBEXC = 1.0/XBC
-XLBR   = XAR*ZGAMR(2)
-XLBEXR = 1.0/XBR
+!
+XNR = 1.0/(XAR*MOMG(XALPHAR,XNUR,XBR))
+XCCR   = 8.E6
+XCXR   = -1.
+IF (NMOM_R.EQ.1) THEN
+   XLBEXR = 1.0/(XCXR-XBR)
+   XLBR   = ( XAR*XCCR*MOMG(XALPHAR,XNUR,XBR) )**(-XLBEXR)
+ELSE
+   XLBR   = XAR*ZGAMR(2)
+   XLBEXR = 1.0/XBR
+END IF
 !
 !
 !------------------------------------------------------------------------------
@@ -186,6 +201,17 @@ XFSEDCC  = XCC*GAMMA_X0D(XNUC+XDC/XALPHAC)/GAMMA_X0D(XNUC)*     &
             (ZRHO00)**XCEXVT
 
 !
+XLB(2)    = XLBC
+XLBEX(2)  = XLBEXC
+XD(2)     = XDC
+XFSEDR(2) = XFSEDRC
+XFSEDC(2) = XFSEDCC
+!
+XLB(3)    = XLBR
+XLBEX(3)  = XLBEXR
+XD(3)     = XDR
+XFSEDR(3) = XFSEDRR
+XFSEDC(3) = XFSEDCR
 !
 !------------------------------------------------------------------------------
 !
@@ -228,12 +254,12 @@ ALLOCATE (XHYPF32( NHYP, NMOD_CCN ))
 !
 ZSMIN = 1.0E-5  ! Minimum supersaturation set at 0.001 % 
 ZSMAX = 5.0E-2  ! Maximum supersaturation set at 5 %
-XHYPINTP1 = FLOAT(NHYP-1)/LOG(ZSMAX/ZSMIN)
-XHYPINTP2 = FLOAT(NHYP)-XHYPINTP1*LOG(ZSMAX)
+XHYPINTP1 = REAL(NHYP-1)/LOG(ZSMAX/ZSMIN)
+XHYPINTP2 = REAL(NHYP)-XHYPINTP1*LOG(ZSMAX)
 !
 DO JMOD = 1,NMOD_CCN 
    DO J1 = 1,NHYP
-      ZSS =ZSMAX*(ZSMIN/ZSMAX)**(FLOAT(NHYP-J1)/FLOAT(NHYP-1))
+      ZSS =ZSMAX*(ZSMIN/ZSMAX)**(REAL(NHYP-J1)/REAL(NHYP-1))
       XHYPF12(J1,JMOD) = HYPGEO(XMUHEN_MULTI(JMOD),0.5*XKHEN_MULTI(JMOD),&
                                 0.5*XKHEN_MULTI(JMOD)+1.0,XBETAHEN_MULTI(JMOD),ZSS)
       XHYPF32(J1,JMOD) = HYPGEO(XMUHEN_MULTI(JMOD),0.5*XKHEN_MULTI(JMOD),&
@@ -243,7 +269,7 @@ ENDDO
 !
 NAHEN = 81 ! Tabulation for each Kelvin degree in the range XTT-40 to XTT+40
 XAHENINTP1 = 1.0
-XAHENINTP2 = 0.5*FLOAT(NAHEN-1) - XTT
+XAHENINTP2 = 0.5*REAL(NAHEN-1) - XTT
 !
 !		Compute the tabulation of function of T :
 !
@@ -260,11 +286,13 @@ XAHENINTP2 = 0.5*FLOAT(NAHEN-1) - XTT
 !            G
 !
 ALLOCATE (XAHENG(NAHEN))
+ALLOCATE (XAHENG2(NAHEN))
+ALLOCATE (XAHENG3(NAHEN))
 ALLOCATE (XPSI1(NAHEN))
 ALLOCATE (XPSI3(NAHEN))
 XCSTHEN = 1.0 / ( XRHOLW*2.0*XPI )
 DO J1 = 1,NAHEN
-   ZTT = XTT + FLOAT(J1-(NAHEN-1)/2)                                         ! T
+   ZTT = XTT + REAL(J1-(NAHEN-1)/2)                                          ! T
    ZLV = XLVTT+(XCPV-XCL)*(ZTT-XTT)                                          ! Lv
    XPSI1(J1) = (XG/(XRD*ZTT))*(XMV*ZLV/(XMD*XCPD*ZTT)-1.)                    ! Psi1
    XPSI3(J1) = -1*XMV*ZLV/(XMD*XRD*(ZTT**2))                                 ! Psi3
@@ -272,6 +300,8 @@ DO J1 = 1,NAHEN
                          (XDIVA*EXP(XALPW-(XBETAW/ZTT)-(XGAMW*ALOG(ZTT)))) &
                        + (ZLV/ZTT)**2/(XTHCO*XRV) ) )              
    XAHENG(J1) = XCSTHEN/(ZG)**(3./2.)
+   XAHENG2(J1) = 1/(ZG)**(1./2.) * GAMMA_X0D(XNUC+1./XALPHAC)/GAMMA_X0D(XNUC)
+   XAHENG3(J1) = (ZG) * GAMMA_X0D(XNUC+1./XALPHAC)/GAMMA_X0D(XNUC)
 END DO
 !-------------------------------------------------------------------------------
 !
@@ -313,6 +343,7 @@ XLAUTR_THRESHOLD  = 0.4
 XITAUTR= 0.27 ! (Notice that T2 of BR74 is uncorrect and that 0.27=1./3.7
 XITAUTR_THRESHOLD = 7.5
 XCAUTR = 3.5E9
+XR0 = 25.0E-6
 !
 ! Cst for the accretion process
 !
@@ -331,6 +362,11 @@ XACCR_CSMALL2 = XKERA1*ZGAMR(3)
 XACCR_RSMALL1 = XKERA1*ZGAMC(5)*XRHOLW*(XPI/6.0)
 XACCR_RSMALL2 = XKERA1*ZGAMC(2)*ZGAMR(3)*XRHOLW*(XPI/6.0)
 !
+! ICE3 accretion of cloud droplets by rain drops
+!
+XFCACCR  = (XPI/4.0)*XCCR*XCR*(ZRHO00**XCEXVT)*MOMG(XALPHAR,XNUR,XDR+2.0)
+XEXCACCR = -XDR-3.0
+!
 ! Cst for the raindrop self-collection/breakup process
 !
 XSCBU2 = XKERA2*ZGAMR(2)
@@ -384,6 +420,7 @@ X0EVAR = (12.0)*XF0R*GAMMA_X0D(XNUR+1./XALPHAR)/GAMMA_X0D(XNUR+3./XALPHAR)
 X1EVAR = (12.0)*XF1R*((ZRHO00)**(XCEXVT)*(XCR/0.15E-4))**0.5*    &
            GAMMA_X0D(XNUR+(XDR+3.0)/(2.0*XALPHAR))/GAMMA_X0D(XNUR+3./XALPHAR)
 !
+XCEVAP = 0.86
 !
 !------------------------------------------------------------------------------
 !
@@ -411,28 +448,29 @@ XCRER = 1.0/ (ZGAMR(6) * XAR**(2.0/3.0))
 !   	        -----------------------
 !
 !
-GFLAG = .TRUE.
-IF (GFLAG) THEN
-  WRITE(UNIT=KULOUT,FMT='(" Summary of the cloud particule characteristics")')
-  WRITE(UNIT=KULOUT,FMT='("             CLOUD")')
-  WRITE(UNIT=KULOUT,FMT='("                   masse: A=",E13.6," B=",E13.6)') &
-                                                      XAR,XBR
-  WRITE(UNIT=KULOUT,FMT='("                 vitesse: C=",E13.6," D=",E13.6)') &
-                                                      XCC,XDC
-  WRITE(UNIT=KULOUT,FMT='("            distribution:AL=",E13.6,"NU=",E13.6)') &
-                                                      XALPHAC,XNUC
-  WRITE(UNIT=KULOUT,FMT='("               RAIN")')
-  WRITE(UNIT=KULOUT,FMT='("                   masse: A=",E13.6," B=",E13.6)') &
-                                                      XAR,XBR
-  WRITE(UNIT=KULOUT,FMT='("                 vitesse: C=",E13.6," D=",E13.6)') &
-                                                      XCR,XDR
-!!$  WRITE(UNIT=KULOUT,FMT='("            distribution:AL=",E13.6,"NU=",E13.6)') &
+!!$GFLAG = .TRUE.
+!!$IF (GFLAG) THEN
+!!$  ILUOUT0 = TLUOUT0%NLU
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" Summary of the cloud particule characteristics")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("             CLOUD")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("                   masse: A=",E13.6," B=",E13.6)') &
+!!$                                                      XAR,XBR
+!!$  WRITE(UNIT=ILUOUT0,FMT='("                 vitesse: C=",E13.6," D=",E13.6)') &
+!!$                                                      XCC,XDC
+!!$  WRITE(UNIT=ILUOUT0,FMT='("            distribution:AL=",E13.6,"NU=",E13.6)') &
+!!$                                                      XALPHAC,XNUC
+!!$  WRITE(UNIT=ILUOUT0,FMT='("               RAIN")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("                   masse: A=",E13.6," B=",E13.6)') &
+!!$                                                      XAR,XBR
+!!$  WRITE(UNIT=ILUOUT0,FMT='("                 vitesse: C=",E13.6," D=",E13.6)') &
+!!$                                                      XCR,XDR
+!!$  WRITE(UNIT=ILUOUT0,FMT='("            distribution:AL=",E13.6,"NU=",E13.6)') &
 !!$                                                      XALPHAR,XNUR
-!!$  WRITE(UNIT=KULOUT,FMT='(" Description of the nucleation spectrum")')
-!!$  WRITE(UNIT=KULOUT,FMT='("         C=",E13.6,"  k=",E13.6)') XCHEN, XKHEN
-!!$  WRITE(UNIT=KULOUT,FMT='("      Beta=",E13.6," MU=",E13.6)') XBETAHEN, XMUHEN
-!!$  WRITE(UNIT=KULOUT,FMT='("      CCN max=",E13.6)') XCONC_CCN
-END IF
+!!$  WRITE(UNIT=ILUOUT0,FMT='(" Description of the nucleation spectrum")')
+!!$  WRITE(UNIT=ILUOUT0,FMT='("         C=",E13.6,"  k=",E13.6)') XCHEN, XKHEN
+!!$  WRITE(UNIT=ILUOUT0,FMT='("      Beta=",E13.6," MU=",E13.6)') XBETAHEN, XMUHEN
+!!$  WRITE(UNIT=ILUOUT0,FMT='("      CCN max=",E13.6)') XCONC_CCN
+!!$END IF
 !
 !------------------------------------------------------------------------------
 !
diff --git a/src/mesonh/micro/init_aerosol_properties.f90 b/src/common/micro/init_aerosol_properties.F90
similarity index 92%
rename from src/mesonh/micro/init_aerosol_properties.f90
rename to src/common/micro/init_aerosol_properties.F90
index 52f7ddc882a89149d5f467797f07c70b1a9f5ba2..ecd30df7f7498c011657b3af21a40a14cc675103 100644
--- a/src/mesonh/micro/init_aerosol_properties.f90
+++ b/src/common/micro/init_aerosol_properties.F90
@@ -44,7 +44,7 @@ END MODULE MODI_INIT_AEROSOL_PROPERTIES
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_LUNIT,           ONLY : TLUOUT0
+!USE MODD_LUNIT,           ONLY : TLUOUT0
 USE MODD_PARAM_LIMA,      ONLY : NMOD_CCN, HINI_CCN, HTYPE_CCN,        &
                                  XR_MEAN_CCN, XLOGSIG_CCN, XRHO_CCN,                 &
                                  XKHEN_MULTI, XMUHEN_MULTI, XBETAHEN_MULTI,          &
@@ -52,12 +52,13 @@ USE MODD_PARAM_LIMA,      ONLY : NMOD_CCN, HINI_CCN, HTYPE_CCN,        &
                                  XACTEMP_CCN, XFSOLUB_CCN,                           &
                                  NMOD_IFN, NSPECIE, CIFN_SPECIES,       &
                                  XMDIAM_IFN, XSIGMA_IFN, XRHO_IFN, XFRAC, XFRAC_REF, &
-                                 CINT_MIXING, NPHILLIPS
+                                 CINT_MIXING, NPHILLIPS,           &
+                                 NIMM, NMOD_IMM, NINDICE_CCN_IMM
 !
 use mode_msg
 !
 USE MODI_GAMMA
-USE MODI_LIMA_INIT_CCN_ACTIVATION_SPECTRUM
+USE MODE_LIMA_INIT_CCN_ACTIVATION_SPECTRUM, ONLY: LIMA_INIT_CCN_ACTIVATION_SPECTRUM
 !
 IMPLICIT NONE
 !
@@ -84,8 +85,8 @@ REAL, DIMENSION(3) :: RHOCCN
 !
 INTEGER            :: I,J,JMOD
 !
-INTEGER  :: ILUOUT0 ! Logical unit number for output-listing
-INTEGER  :: IRESP   ! Return code of FM-routines
+!INTEGER  :: ILUOUT0 ! Logical unit number for output-listing
+!INTEGER  :: IRESP   ! Return code of FM-routines
 !
 REAL :: X1, X2, X3, X4, X5
 ! REAL, DIMENSION(7) :: diameters=(/ 0.01E-6, 0.05E-6, 0.1E-6, 0.2E-6, 0.5E-6, 1.E-6, 2.E-6 /)
@@ -97,7 +98,7 @@ INTEGER :: II, IJ, IK
 !
 !-------------------------------------------------------------------------------
 !
-ILUOUT0 = TLUOUT0%NLU
+!ILUOUT0 = TLUOUT0%NLU
 !
 !!!!!!!!!!!!!!!!
 ! CCN properties
@@ -183,13 +184,13 @@ IF ( NMOD_CCN .GE. 1 ) THEN
   IF (.NOT.(ALLOCATED(XLIMIT_FACTOR)))  ALLOCATE(XLIMIT_FACTOR(NMOD_CCN))
 !
   IF (HINI_CCN == 'CCN') THEN
-    IF (LSCAV) THEN
-! Attention !
-      WRITE(UNIT=ILUOUT0,FMT='("You are using a numerical initialization &
-        &not depending on the aerosol properties, however you need it for &
-        &scavenging.                                                      &
-        &With LSCAV = true, HINI_CCN should be set to AER for consistency")')
-    END IF
+!!$    IF (LSCAV) THEN
+!!$! Attention !
+!!$      WRITE(UNIT=ILUOUT0,FMT='("You are using a numerical initialization &
+!!$        &not depending on the aerosol properties, however you need it for &
+!!$        &scavenging.                                                      &
+!!$        &With LSCAV = true, HINI_CCN should be set to AER for consistency")')
+!!$    END IF
 ! Numerical initialization without dependence on AP physical properties
     DO JMOD = 1, NMOD_CCN
       XKHEN_MULTI(JMOD)    = XKHEN_TMP(JMOD)  
@@ -431,6 +432,22 @@ IF ( NMOD_IFN .GE. 1 ) THEN
          XFRAC_REF(4)=0.06
       END IF
 !
+! Immersion modes
+!
+   IF (.NOT.(ALLOCATED(NIMM))) ALLOCATE(NIMM(NMOD_CCN))
+   NIMM(:)=0
+   IF (ALLOCATED(NINDICE_CCN_IMM)) DEALLOCATE(NINDICE_CCN_IMM)
+   ALLOCATE(NINDICE_CCN_IMM(MAX(1,NMOD_IMM)))
+   IF (NMOD_IMM .GE. 1) THEN
+      DO J = 0, NMOD_IMM-1
+         NIMM(NMOD_CCN-J)=1
+         NINDICE_CCN_IMM(NMOD_IMM-J) = NMOD_CCN-J
+      END DO
+!   ELSE IF (NMOD_IMM == 0) THEN ! PNIS existe mais vaut 0, pour l'appel à resolved_cloud
+!      NMOD_IMM = 1
+!      NINDICE_CCN_IMM(1) = 0
+   END IF
+!
 END IF ! NMOD_IFN > 0
 ! 
 END SUBROUTINE INIT_AEROSOL_PROPERTIES
diff --git a/src/mesonh/micro/lima.f90 b/src/common/micro/lima.F90
similarity index 71%
rename from src/mesonh/micro/lima.f90
rename to src/common/micro/lima.F90
index 0ed11fe4885abca003bda12c21d85a861f293d43..c1d23e04f783deee4db97f278f061b20237e6838 100644
--- a/src/mesonh/micro/lima.f90
+++ b/src/common/micro/lima.F90
@@ -3,82 +3,17 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!      ######spl
-MODULE MODI_LIMA
-!      ####################
-!
-INTERFACE
-!
-   SUBROUTINE LIMA ( KKA, KKU, KKL,                                          &
-                     PTSTEP, TPFILE,                                         &
-                     PRHODREF, PEXNREF, PDZZ,                                &
-                     PRHODJ, PPABST,                                         &
-                     NCCN, NIFN, NIMM,                                       &
-                     PDTHRAD, PTHT, PRT, PSVT, PW_NU,                        &
-                     PTHS, PRS, PSVS,                                        &
-                     PINPRC, PINDEP, PINPRR, PINPRI, PINPRS, PINPRG, PINPRH, &
-                     PEVAP3D, PCLDFR, PICEFR, PPRCFR                         )
-!
-USE MODD_IO,  ONLY: TFILEDATA
-USE MODD_NSV, only: NSV_LIMA_BEG
-!
-INTEGER,                  INTENT(IN)    :: KKA   !near ground array index  
-INTEGER,                  INTENT(IN)    :: KKU   !uppest atmosphere array index
-INTEGER,                  INTENT(IN)    :: KKL   !vert. levels type 1=MNH -1=ARO
-!
-REAL,                     INTENT(IN)    :: PTSTEP     ! Time step
-TYPE(TFILEDATA),          INTENT(IN)    :: TPFILE     ! Output file
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF   ! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF    ! Reference Exner function
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDZZ       ! Layer thikness (m)
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ     ! Dry density * Jacobian
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST     ! absolute pressure at t
-!
-INTEGER,                  INTENT(IN)    :: NCCN       ! for array size declarations
-INTEGER,                  INTENT(IN)    :: NIFN       ! for array size declarations
-INTEGER,                  INTENT(IN)    :: NIMM       ! for array size declarations
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDTHRAD    ! dT/dt due to radiation
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT       ! Theta at time t
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT        ! Mixing ratios at time t
-REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(IN)    :: PSVT ! Concentrations at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PW_NU      ! w for CCN activation
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS       ! Theta source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS        ! Mixing ratios sources
-REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(INOUT) :: PSVS ! Concentration sources
-!
-REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRC     ! Cloud instant precip
-REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINDEP     ! Cloud droplets deposition
-REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRR     ! Rain instant precip
-REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRI     ! Rain instant precip
-REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRS     ! Snow instant precip
-REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRG     ! Graupel instant precip
-REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRH     ! Rain instant precip
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PEVAP3D    ! Rain evap profile
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCLDFR     ! Cloud fraction
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PICEFR     ! Cloud fraction
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PPRCFR     ! Cloud fraction
-!
-END SUBROUTINE LIMA
-END INTERFACE
-END MODULE MODI_LIMA
-!
-!
-!     ######spl
-      SUBROUTINE LIMA ( KKA, KKU, KKL,                                          &
-                        PTSTEP, TPFILE,                                         &
-                        PRHODREF, PEXNREF, PDZZ,                                &
-                        PRHODJ, PPABST,                                         &
-                        NCCN, NIFN, NIMM,                                       &
-                        PDTHRAD, PTHT, PRT, PSVT, PW_NU,                        &
-                        PTHS, PRS, PSVS,                                        &
-                        PINPRC, PINDEP, PINPRR, PINPRI, PINPRS, PINPRG, PINPRH, &
-                        PEVAP3D, PCLDFR, PICEFR, PPRCFR                         )
-!     ######################################################################
+!     #####################################################################
+SUBROUTINE LIMA ( D, CST, BUCONF, TBUDGETS, KBUDGETS,                     &
+                  PTSTEP,                                                 &
+                  PRHODREF, PEXNREF, PDZZ,                                &
+                  PRHODJ, PPABST,                                         &
+                  NCCN, NIFN, NIMM,                                       &
+                  PDTHRAD, PTHT, PRT, PSVT, PW_NU,                        &
+                  PTHS, PRS, PSVS,                                        &
+                  PINPRC, PINDEP, PINPRR, PINPRI, PINPRS, PINPRG, PINPRH, &
+                  PEVAP3D, PCLDFR, PICEFR, PPRCFR, PFPR                   )
+!     #####################################################################
 !
 !!    PURPOSE
 !!    -------
@@ -110,48 +45,44 @@ END MODULE MODI_LIMA
 !
 !*       0.    DECLARATIONS
 !              ------------
-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_RR, NBUDGET_RI,  &
-                                NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1,             &
-                                tbudgets
-USE MODD_CST,             ONLY: XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XTT, XRHOLW, XP00, XRD
+USE MODD_DIMPHYEX,        ONLY: DIMPHYEX_t
+USE MODD_BUDGET,          ONLY: TBUDGETDATA, TBUDGETCONF_t, NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, &
+                                NBUDGET_RI, NBUDGET_RR, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1
+USE MODD_CST,             ONLY: CST_t
 USE MODD_IO,              ONLY: TFILEDATA
-USE MODD_NSV,             ONLY: NSV_LIMA_BEG,                                                   &
-                                NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_FREE, NSV_LIMA_CCN_ACTI, &
+USE MODD_NSV,             ONLY: NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_FREE, NSV_LIMA_CCN_ACTI, &
                                 NSV_LIMA_NI, NSV_LIMA_NS, NSV_LIMA_NG, NSV_LIMA_NH,             &
-                                NSV_LIMA_IFN_FREE, NSV_LIMA_IFN_NUCL, NSV_LIMA_IMM_NUCL, NSV_LIMA_HOM_HAZE
+                                NSV_LIMA_IFN_FREE, NSV_LIMA_IFN_NUCL, NSV_LIMA_IMM_NUCL, NSV_LIMA_HOM_HAZE, &
+                                NSV_LIMA_BEG
 USE MODD_PARAMETERS,      ONLY: JPHEXT, JPVEXT
-USE MODD_PARAM_LIMA,      ONLY: LCOLD, LRAIN, LWARM, NMOD_CCN, NMOD_IFN, NMOD_IMM, LHHONI,      &
+USE MODD_PARAM_LIMA,      ONLY: NMOD_CCN, NMOD_IFN, NMOD_IMM, LHHONI,      &
                                 LACTIT, LFEEDBACKT, NMAXITER, XMRSTEP, XTSTEP_TS,               &
                                 LSEDC, LSEDI, XRTMIN, XCTMIN, LDEPOC, XVDEPOC,                  &
-                                LHAIL, LSNOW,                                                   &
                                 NMOM_C, NMOM_R, NMOM_I, NMOM_S, NMOM_G, NMOM_H
 USE MODD_PARAM_LIMA_COLD, ONLY: XAI, XBI
 USE MODD_PARAM_LIMA_WARM, ONLY: XLBC, XLBEXC, XAC, XBC, XAR, XBR
-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 mode_tools,           only: Countjv
 
-USE MODI_LIMA_COMPUTE_CLOUD_FRACTIONS
-USE MODI_LIMA_DROPS_TO_DROPLETS_CONV
-USE MODI_LIMA_INST_PROCS
-USE MODI_LIMA_NUCLEATION_PROCS
-USE MODI_LIMA_SEDIMENTATION
-USE MODI_LIMA_TENDENCIES
+USE MODE_LIMA_COMPUTE_CLOUD_FRACTIONS, ONLY: LIMA_COMPUTE_CLOUD_FRACTIONS
+USE MODE_LIMA_DROPS_TO_DROPLETS_CONV, ONLY: LIMA_DROPS_TO_DROPLETS_CONV
+USE MODE_LIMA_INST_PROCS, ONLY: LIMA_INST_PROCS
+USE MODE_LIMA_NUCLEATION_PROCS, ONLY: LIMA_NUCLEATION_PROCS
+USE MODE_LIMA_SEDIMENTATION, ONLY: LIMA_SEDIMENTATION
+USE MODE_LIMA_TENDENCIES, ONLY: LIMA_TENDENCIES
 !
 IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
-INTEGER,                  INTENT(IN)    :: KKA   !near ground array index  
-INTEGER,                  INTENT(IN)    :: KKU   !uppest atmosphere array index
-INTEGER,                  INTENT(IN)    :: KKL   !vert. levels type 1=MNH -1=ARO
+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     ! Time step
-TYPE(TFILEDATA),          INTENT(IN)    :: TPFILE     ! Output file
 !
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF   ! Reference density
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF    ! Reference Exner function
@@ -167,12 +98,12 @@ INTEGER,                  INTENT(IN)    :: NIMM       ! for array size declarati
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDTHRAD    ! dT/dt due to radiation
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT       ! Theta at time t
 REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT        ! Mixing ratios at time t
-REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(IN)    :: PSVT ! Concentrations at time t
+REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT       ! Concentrations at time t
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PW_NU      ! w for CCN activation
 !
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS       ! Theta source
 REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS        ! Mixing ratios sources
-REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(INOUT) :: PSVS ! Concentration sources
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS       ! Concentration sources
 !
 REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRC     ! Cloud instant precip
 REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINDEP     ! Cloud droplets deposition
@@ -186,6 +117,7 @@ REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PEVAP3D    ! Rain evap profile
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCLDFR     ! Cloud fraction
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PICEFR     ! Cloud fraction
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PPRCFR     ! Cloud fraction
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PFPR       ! Precipitation fluxes in altitude
 !
 !*       0.2   Declarations of local variables :
 !
@@ -340,7 +272,6 @@ REAL, DIMENSION(:), ALLOCATABLE                      :: ZCF1D, ZIF1D, ZPF1D
 ! Various parameters
 ! domain size and levels (AROME compatibility)
 INTEGER :: KRR
-INTEGER :: IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKT, IKTB, IKTE
 ! loops and packing
 INTEGER :: II, IPACK, JI, JJ, JK
 integer :: idx
@@ -355,26 +286,36 @@ REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3)) :: ZCPT    ! Total condense
 LOGICAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2))          :: GDEP
 real, dimension(:,:,:), allocatable :: zrhodjontstep
 !
+INTEGER :: ISV_LIMA_NC
+INTEGER :: ISV_LIMA_NR
+INTEGER :: ISV_LIMA_CCN_FREE
+INTEGER :: ISV_LIMA_CCN_ACTI
+INTEGER :: ISV_LIMA_NI
+INTEGER :: ISV_LIMA_NS
+INTEGER :: ISV_LIMA_NG
+INTEGER :: ISV_LIMA_NH
+INTEGER :: ISV_LIMA_IFN_FREE
+INTEGER :: ISV_LIMA_IFN_NUCL
+INTEGER :: ISV_LIMA_IMM_NUCL
+INTEGER :: ISV_LIMA_HOM_HAZE
+!
 !-------------------------------------------------------------------------------
 !
 !*       0.     Init
 !               ----
 !
-!
-IIB=1+JPHEXT      ! first physical point in i
-IIT=SIZE(PDZZ,1)  ! total number of points in i
-IIE=IIT - JPHEXT  ! last physical point in i
-!
-IJB=1+JPHEXT      ! first physical point in j
-IJT=SIZE(PDZZ,2)  ! total number of points in j
-IJE=IJT - JPHEXT  ! last physical point in j
-!
-IKB=KKA+JPVEXT*KKL ! near ground physical point
-IKE=KKU-JPVEXT*KKL ! near TOA physical point
-IKT=SIZE(PDZZ,3)   ! total number of points in k
-!
-IKTB=1+JPVEXT      ! first index for a physical point in k
-IKTE=IKT-JPVEXT    ! last index for a physical point in k
+ISV_LIMA_NC       = NSV_LIMA_NC       - NSV_LIMA_BEG + 1
+ISV_LIMA_NR       = NSV_LIMA_NR       - NSV_LIMA_BEG + 1
+ISV_LIMA_CCN_FREE = NSV_LIMA_CCN_FREE - NSV_LIMA_BEG + 1
+ISV_LIMA_CCN_ACTI = NSV_LIMA_CCN_ACTI - NSV_LIMA_BEG + 1
+ISV_LIMA_NI       = NSV_LIMA_NI       - NSV_LIMA_BEG + 1
+ISV_LIMA_NS       = NSV_LIMA_NS       - NSV_LIMA_BEG + 1
+ISV_LIMA_NG       = NSV_LIMA_NG       - NSV_LIMA_BEG + 1
+ISV_LIMA_NH       = NSV_LIMA_NH       - NSV_LIMA_BEG + 1
+ISV_LIMA_IFN_FREE = NSV_LIMA_IFN_FREE - NSV_LIMA_BEG + 1
+ISV_LIMA_IFN_NUCL = NSV_LIMA_IFN_NUCL - NSV_LIMA_BEG + 1
+ISV_LIMA_IMM_NUCL = NSV_LIMA_IMM_NUCL - NSV_LIMA_BEG + 1
+ISV_LIMA_HOM_HAZE = NSV_LIMA_HOM_HAZE - NSV_LIMA_BEG + 1
 !
 ZTHS(:,:,:) = PTHS(:,:,:)
 ZTHT(:,:,:) = PTHS(:,:,:) * PTSTEP
@@ -418,7 +359,7 @@ ZIMMNS(:,:,:,:) = 0.
 ZHOMFT(:,:,:)   = 0.
 ZHOMFS(:,:,:)   = 0.
 
-if ( lbu_enable ) then
+if ( BUCONF%lbu_enable ) then
   Z_RR_CVRC(:,:,:) = 0.
   Z_CR_CVRC(:,:,:) = 0.
   allocate( ZTOT_CR_BRKU (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CR_BRKU(:,:,:) = 0.
@@ -569,62 +510,62 @@ IF ( KRR .GE. 7 ) ZRHS(:,:,:) = PRS(:,:,:,7)
 ! Concentrations
 !
 IF ( NMOM_C.GE.2) THEN
-   ZCCT(:,:,:)   = PSVS(:,:,:,NSV_LIMA_NC) * PTSTEP
-   ZCCS(:,:,:)   = PSVS(:,:,:,NSV_LIMA_NC)
+   ZCCT(:,:,:)   = PSVS(:,:,:,ISV_LIMA_NC) * PTSTEP
+   ZCCS(:,:,:)   = PSVS(:,:,:,ISV_LIMA_NC)
 ELSE
    ZCCT(:,:,:)   = 300.E6 / PRHODREF(:,:,:)
    ZCCS(:,:,:)   = ZCCT(:,:,:) / PTSTEP
 END IF
-IF ( LWARM .AND. LRAIN .AND. NMOM_R.GE.2) ZCRT(:,:,:)   = PSVS(:,:,:,NSV_LIMA_NR) * PTSTEP
-IF ( LWARM .AND. LRAIN .AND. NMOM_R.GE.2) ZCRS(:,:,:)   = PSVS(:,:,:,NSV_LIMA_NR)
-IF ( LCOLD .AND. NMOM_I.GE.2)             ZCIT(:,:,:)   = PSVS(:,:,:,NSV_LIMA_NI) * PTSTEP
-IF ( LCOLD .AND. NMOM_I.GE.2)             ZCIS(:,:,:)   = PSVS(:,:,:,NSV_LIMA_NI)
-IF ( LCOLD .AND. LSNOW .AND. NMOM_S.GE.2) ZCST(:,:,:)   = PSVS(:,:,:,NSV_LIMA_NS) * PTSTEP
-IF ( LCOLD .AND. LSNOW .AND. NMOM_S.GE.2) ZCSS(:,:,:)   = PSVS(:,:,:,NSV_LIMA_NS)
-IF ( LCOLD .AND. NMOM_G.GE.2)             ZCGT(:,:,:)   = PSVS(:,:,:,NSV_LIMA_NG) * PTSTEP
-IF ( LCOLD .AND. NMOM_G.GE.2)             ZCGS(:,:,:)   = PSVS(:,:,:,NSV_LIMA_NG)
-IF ( LCOLD .AND. NMOM_H.GE.2)             ZCHT(:,:,:)   = PSVS(:,:,:,NSV_LIMA_NH) * PTSTEP
-IF ( LCOLD .AND. NMOM_H.GE.2)             ZCHS(:,:,:)   = PSVS(:,:,:,NSV_LIMA_NH)
-!
-IF ( NMOD_CCN .GE. 1 )   ZCCNFT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) * PTSTEP
-IF ( NMOD_CCN .GE. 1 )   ZCCNAT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1) * PTSTEP
-IF ( NMOD_CCN .GE. 1 )   ZCCNFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1)
-IF ( NMOD_CCN .GE. 1 )   ZCCNAS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1)
-!
-IF ( NMOD_IFN .GE. 1 )   ZIFNFT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1) * PTSTEP
-IF ( NMOD_IFN .GE. 1 )   ZIFNNT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1) * PTSTEP
-IF ( NMOD_IFN .GE. 1 )   ZIFNFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1)
-IF ( NMOD_IFN .GE. 1 )   ZIFNNS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1)
-!
-IF ( NMOD_IMM .GE. 1 )   ZIMMNT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1) * PTSTEP
-IF ( NMOD_IMM .GE. 1 )   ZIMMNS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1)
-!
-IF ( LCOLD .AND. LHHONI ) ZHOMFT(:,:,:)  = PSVS(:,:,:,NSV_LIMA_HOM_HAZE) * PTSTEP
-IF ( LCOLD .AND. LHHONI ) ZHOMFS(:,:,:)  = PSVS(:,:,:,NSV_LIMA_HOM_HAZE)
+IF ( NMOM_R.GE.2) ZCRT(:,:,:)   = PSVS(:,:,:,ISV_LIMA_NR) * PTSTEP
+IF ( NMOM_R.GE.2) ZCRS(:,:,:)   = PSVS(:,:,:,ISV_LIMA_NR)
+IF ( NMOM_I.GE.2) ZCIT(:,:,:)   = PSVS(:,:,:,ISV_LIMA_NI) * PTSTEP
+IF ( NMOM_I.GE.2) ZCIS(:,:,:)   = PSVS(:,:,:,ISV_LIMA_NI)
+IF ( NMOM_S.GE.2) ZCST(:,:,:)   = PSVS(:,:,:,ISV_LIMA_NS) * PTSTEP
+IF ( NMOM_S.GE.2) ZCSS(:,:,:)   = PSVS(:,:,:,ISV_LIMA_NS)
+IF ( NMOM_G.GE.2) ZCGT(:,:,:)   = PSVS(:,:,:,ISV_LIMA_NG) * PTSTEP
+IF ( NMOM_G.GE.2) ZCGS(:,:,:)   = PSVS(:,:,:,ISV_LIMA_NG)
+IF ( NMOM_H.GE.2) ZCHT(:,:,:)   = PSVS(:,:,:,ISV_LIMA_NH) * PTSTEP
+IF ( NMOM_H.GE.2) ZCHS(:,:,:)   = PSVS(:,:,:,ISV_LIMA_NH)
+!
+IF ( NMOD_CCN .GE. 1 ) ZCCNFT(:,:,:,:) = PSVS(:,:,:,ISV_LIMA_CCN_FREE:ISV_LIMA_CCN_FREE+NMOD_CCN-1) * PTSTEP
+IF ( NMOD_CCN .GE. 1 ) ZCCNAT(:,:,:,:) = PSVS(:,:,:,ISV_LIMA_CCN_ACTI:ISV_LIMA_CCN_ACTI+NMOD_CCN-1) * PTSTEP
+IF ( NMOD_CCN .GE. 1 ) ZCCNFS(:,:,:,:) = PSVS(:,:,:,ISV_LIMA_CCN_FREE:ISV_LIMA_CCN_FREE+NMOD_CCN-1)
+IF ( NMOD_CCN .GE. 1 ) ZCCNAS(:,:,:,:) = PSVS(:,:,:,ISV_LIMA_CCN_ACTI:ISV_LIMA_CCN_ACTI+NMOD_CCN-1)
+!
+IF ( NMOD_IFN .GE. 1 ) ZIFNFT(:,:,:,:) = PSVS(:,:,:,ISV_LIMA_IFN_FREE:ISV_LIMA_IFN_FREE+NMOD_IFN-1) * PTSTEP
+IF ( NMOD_IFN .GE. 1 ) ZIFNNT(:,:,:,:) = PSVS(:,:,:,ISV_LIMA_IFN_NUCL:ISV_LIMA_IFN_NUCL+NMOD_IFN-1) * PTSTEP
+IF ( NMOD_IFN .GE. 1 ) ZIFNFS(:,:,:,:) = PSVS(:,:,:,ISV_LIMA_IFN_FREE:ISV_LIMA_IFN_FREE+NMOD_IFN-1)
+IF ( NMOD_IFN .GE. 1 ) ZIFNNS(:,:,:,:) = PSVS(:,:,:,ISV_LIMA_IFN_NUCL:ISV_LIMA_IFN_NUCL+NMOD_IFN-1)
+!
+IF ( NMOD_IMM .GE. 1 ) ZIMMNT(:,:,:,:) = PSVS(:,:,:,ISV_LIMA_IMM_NUCL:ISV_LIMA_IMM_NUCL+NMOD_IMM-1) * PTSTEP
+IF ( NMOD_IMM .GE. 1 ) ZIMMNS(:,:,:,:) = PSVS(:,:,:,ISV_LIMA_IMM_NUCL:ISV_LIMA_IMM_NUCL+NMOD_IMM-1)
+!
+IF ( LHHONI ) ZHOMFT(:,:,:) = PSVS(:,:,:,ISV_LIMA_HOM_HAZE) * PTSTEP
+IF ( LHHONI ) ZHOMFS(:,:,:) = PSVS(:,:,:,ISV_LIMA_HOM_HAZE)
 !
 ZINV_TSTEP  = 1./PTSTEP
-ZEXN(:,:,:) = (PPABST(:,:,:)/XP00)**(XRD/XCPD)
+ZEXN(:,:,:) = (PPABST(:,:,:)/CST%XP00)**(CST%XRD/CST%XCPD)
 ZT(:,:,:)   = ZTHT(:,:,:) * ZEXN(:,:,:)
 !
 !-------------------------------------------------------------------------------
 !
 !*       0.     Check mean diameter for cloud, rain  and ice
 !               --------------------------------------------
-! if ( lbu_enable ) then
-!   if ( lbudget_rc .and. lwarm .and. lrain ) call Budget_store_init( tbudgets(NBUDGET_RC), 'CORR', zrcs(:, :, :) * prhodj(:, :, :) )
-!   if ( lbudget_rr .and. lwarm .and. lrain ) call Budget_store_init( tbudgets(NBUDGET_RR), 'CORR', zrrs(:, :, :) * prhodj(:, :, :) )
-!   if ( lbudget_ri .and. lcold .and. lsnow ) call Budget_store_init( tbudgets(NBUDGET_RI), 'CORR', zris(:, :, :) * prhodj(:, :, :) )
-!   if ( lbudget_rs .and. lcold .and. lsnow ) call Budget_store_init( tbudgets(NBUDGET_RS), 'CORR', zrss(:, :, :) * prhodj(:, :, :) )
-!   if ( lbudget_sv ) then
+! if ( BUCONF%lbu_enable ) then
+!   if ( BUCONF%lbudget_rc .and. lwarm .and. lrain ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RC), 'CORR', zrcs(:, :, :) * prhodj(:, :, :) )
+!   if ( BUCONF%lbudget_rr .and. lwarm .and. lrain ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RR), 'CORR', zrrs(:, :, :) * prhodj(:, :, :) )
+!   if ( BUCONF%lbudget_ri .and. lcold .and. lsnow ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RI), 'CORR', zris(:, :, :) * prhodj(:, :, :) )
+!   if ( BUCONF%lbudget_rs .and. lcold .and. lsnow ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RS), 'CORR', zrss(:, :, :) * prhodj(:, :, :) )
+!   if ( BUCONF%lbudget_sv ) then
 !     if ( lwarm .and. lrain .and. nmom_c.ge.2) &
-!       call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'CORR', zccs(:, :, :) * prhodj(:, :, :) )
+!       call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'CORR', zccs(:, :, :) * prhodj(:, :, :) )
 !     if ( lwarm .and. lrain .and. nmom_r.ge.2) &
-!       call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'CORR', zcrs(:, :, :) * prhodj(:, :, :) )
+!       call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nr), 'CORR', zcrs(:, :, :) * prhodj(:, :, :) )
 !     if ( lcold .and. lsnow .and. nmom_i.ge.2) &
-!       call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CORR', zcis(:, :, :) * prhodj(:, :, :) )
+!       call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CORR', zcis(:, :, :) * prhodj(:, :, :) )
 !   end if
 ! end if
-!!$IF (LWARM .AND. LRAIN) THEN
+!!$IF (NMOM_R.GE.2) THEN
 !!$   WHERE( ZRCT>XRTMIN(2) .AND. ZCCT>XCTMIN(2) .AND. ZRCT>XAC*ZCCT*(100.E-6)**XBC )
 !!$      ZRRT=ZRRT+ZRCT
 !!$      ZRRS=ZRRS+ZRCS
@@ -637,7 +578,7 @@ ZT(:,:,:)   = ZTHT(:,:,:) * ZEXN(:,:,:)
 !!$   END WHERE
 !!$END IF
 !!$!
-!!$IF (LWARM .AND. LRAIN) THEN
+!!$IF (NMOM_R.GE.2) THEN
 !!$   WHERE( ZRRT>XRTMIN(3) .AND. ZCRT>XCTMIN(3) .AND. ZRRT<XAR*ZCRT*(60.E-6)**XBR )
 !!$      ZRCT=ZRCT+ZRRT
 !!$      ZRCS=ZRCS+ZRRS
@@ -650,7 +591,7 @@ ZT(:,:,:)   = ZTHT(:,:,:) * ZEXN(:,:,:)
 !!$   END WHERE
 !!$END IF
 !!$!
-!!$IF (LCOLD .AND. LSNOW) THEN
+!!$IF (NMOM_S.GE.2) THEN
 !!$   WHERE( ZRIT>XRTMIN(4) .AND. ZCIT>XCTMIN(4) .AND. ZRIT>XAI*ZCIT*(250.E-6)**XBI )
 !!$      ZRST=ZRST+ZRIT
 !!$      ZRSS=ZRSS+ZRIS
@@ -661,18 +602,18 @@ ZT(:,:,:)   = ZTHT(:,:,:) * ZEXN(:,:,:)
 !!$   END WHERE
 !!$END IF
 !
-! if ( lbu_enable ) then
-!   if ( lbudget_rc .and. lwarm .and. lrain ) call Budget_store_end( tbudgets(NBUDGET_RC), 'CORR', zrcs(:, :, :) * prhodj(:, :, :) )
-!   if ( lbudget_rr .and. lwarm .and. lrain ) call Budget_store_end( tbudgets(NBUDGET_RR), 'CORR', zrrs(:, :, :) * prhodj(:, :, :) )
-!   if ( lbudget_ri .and. lcold .and. lsnow ) call Budget_store_end( tbudgets(NBUDGET_RI), 'CORR', zris(:, :, :) * prhodj(:, :, :) )
-!   if ( lbudget_rs .and. lcold .and. lsnow ) call Budget_store_end( tbudgets(NBUDGET_RS), 'CORR', zrss(:, :, :) * prhodj(:, :, :) )
-!   if ( lbudget_sv ) then
+! if ( BUCONF%lbu_enable ) then
+!   if ( BUCONF%lbudget_rc .and. lwarm .and. lrain ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RC), 'CORR', zrcs(:, :, :) * prhodj(:, :, :) )
+!   if ( BUCONF%lbudget_rr .and. lwarm .and. lrain ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RR), 'CORR', zrrs(:, :, :) * prhodj(:, :, :) )
+!   if ( BUCONF%lbudget_ri .and. lcold .and. lsnow ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RI), 'CORR', zris(:, :, :) * prhodj(:, :, :) )
+!   if ( BUCONF%lbudget_rs .and. lcold .and. lsnow ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RS), 'CORR', zrss(:, :, :) * prhodj(:, :, :) )
+!   if ( BUCONF%lbudget_sv ) then
 !     if ( lwarm .and. lrain .and. nmom_c.ge.2) &
-!       call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'CORR', zccs(:, :, :) * prhodj(:, :, :) )
+!       call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'CORR', zccs(:, :, :) * prhodj(:, :, :) )
 !     if ( lwarm .and. lrain .and. nmom_r.ge.2) &
-!       call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'CORR', zcrs(:, :, :) * prhodj(:, :, :) )
+!       call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nr), 'CORR', zcrs(:, :, :) * prhodj(:, :, :) )
 !     if ( lcold .and. lsnow .and. nmom_i.ge.2) &
-!       call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CORR', zcis(:, :, :) * prhodj(:, :, :) )
+!       call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CORR', zcis(:, :, :) * prhodj(:, :, :) )
 !   end if
 ! end if
 !-------------------------------------------------------------------------------
@@ -688,102 +629,130 @@ PINPRI=0.
 PINPRS=0.
 PINPRG=0.
 PINPRH=0.
-if ( lbu_enable ) then
-  if ( lbudget_th )                         call Budget_store_init( tbudgets(NBUDGET_TH), 'SEDI', zths(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_rc .and. lwarm .and. lsedc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'SEDI', zrcs(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_rr .and. lwarm .and. lrain ) call Budget_store_init( tbudgets(NBUDGET_RR), 'SEDI', zrrs(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_ri .and. lcold .and. lsedi ) call Budget_store_init( tbudgets(NBUDGET_RI), 'SEDI', zris(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_rs .and. lcold .and. lsnow ) call Budget_store_init( tbudgets(NBUDGET_RS), 'SEDI', zrss(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_rg .and. lcold .and. lsnow ) call Budget_store_init( tbudgets(NBUDGET_RG), 'SEDI', zrgs(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_rh .and. lcold .and. lhail ) call Budget_store_init( tbudgets(NBUDGET_RH), 'SEDI', zrhs(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_sv ) then
-    if ( lwarm .and. lsedc .and. nmom_c.ge.2) &
-      call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'SEDI', zccs(:, :, :) * prhodj(:, :, :) )
-    if ( lwarm .and. lrain .and. nmom_r.ge.2) &
-      call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'SEDI', zcrs(:, :, :) * prhodj(:, :, :) )
-    if ( lcold .and. lsedi .and. nmom_i.ge.2) &
-      call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'SEDI', zcis(:, :, :) * prhodj(:, :, :) )
+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. 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(:, :, :) )
+   if ( BUCONF%lbudget_rh .and. nmom_h.ge.1 ) &
+        call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RH), 'SEDI', zrhs(:, :, :) * prhodj(:, :, :) )
+  if ( BUCONF%lbudget_sv ) then
+    if ( lsedc .and. nmom_c.ge.2) &
+      call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'SEDI', zccs(:, :, :) * prhodj(:, :, :) )
+    if ( nmom_r.ge.2) &
+      call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nr), 'SEDI', zcrs(:, :, :) * prhodj(:, :, :) )
+    if ( lsedi .and. nmom_i.ge.2) &
+      call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ni), 'SEDI', zcis(:, :, :) * prhodj(:, :, :) )
+    if ( nmom_s.ge.2) &
+      call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ns), 'SEDI', zcss(:, :, :) * prhodj(:, :, :) )
+    if ( nmom_g.ge.2) &
+      call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ng), 'SEDI', zcgs(:, :, :) * prhodj(:, :, :) )
+    if ( nmom_h.ge.2) &
+      call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nh), 'SEDI', zchs(:, :, :) * prhodj(:, :, :) )
   end if
 end if
-
+PFPR(:,:,:,:)=0.
 ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP
-ZCPT    = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP
-IF (LWARM .AND. LSEDC) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, &
-     'L', 2, 2, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRCS, ZCCS, PINPRC)
+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, CST, &
+     'L', 2, 2, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRCS, ZCCS, PINPRC, PFPR(:,:,:,2))
 ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP
-ZCPT    = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP
-IF (LWARM .AND. LRAIN) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, &
-     'L', NMOM_R, 3, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRRS, ZCRS, PINPRR)
+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, CST, &
+     'L', NMOM_R, 3, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRRS, ZCRS, PINPRR, PFPR(:,:,:,3))
 ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP
-ZCPT    = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP
-IF (LCOLD .AND. LSEDI) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, &
-     'I', NMOM_I, 4, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRIS, ZCIS, ZW2D)
+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, CST, &
+     'I', NMOM_I, 4, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRIS, ZCIS, ZW2D, PFPR(:,:,:,4))
 ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP
-ZCPT    = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP
-IF (LCOLD .AND. LSNOW) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, &
-     'I', NMOM_S, 5, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRSS, ZCSS, PINPRS)
+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, CST, &
+     'I', NMOM_S, 5, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRSS, ZCSS, PINPRS, PFPR(:,:,:,5))
 ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP
-ZCPT    = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP
-IF (LCOLD .AND. LSNOW) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, &
-     'I', NMOM_G, 6, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRGS, ZCGS, PINPRG)
+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, CST, &
+     'I', NMOM_G, 6, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRGS, ZCGS, PINPRG, PFPR(:,:,:,6))
 ZRT_SUM = (ZRVS + ZRCS + ZRRS + ZRIS + ZRSS + ZRGS + ZRHS)*PTSTEP
-ZCPT    = XCPD + (XCPV * ZRVS + XCL * (ZRCS + ZRRS) + XCI * (ZRIS + ZRSS + ZRGS + ZRHS))*PTSTEP
-IF (LCOLD .AND. LHAIL) CALL LIMA_SEDIMENTATION(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKTB, IKTE, IKT, KKL, &
-     'I', NMOM_H, 7, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRHS, ZCHS, PINPRH)
+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, CST, &
+     'I', NMOM_H, 7, 1, PTSTEP, PDZZ, PRHODREF, PPABST, ZT, ZRT_SUM, ZCPT, ZRHS, ZCHS, PINPRH, PFPR(:,:,:,7))
 !
 ZTHS(:,:,:) = ZT(:,:,:) / ZEXN(:,:,:) * ZINV_TSTEP
 !
 ! Call budgets
 !
-if ( lbu_enable ) then
-  if ( lbudget_th )                         call Budget_store_end( tbudgets(NBUDGET_TH), 'SEDI', zths(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_rc .and. lwarm .and. lsedc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'SEDI', zrcs(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_rr .and. lwarm .and. lrain ) call Budget_store_end( tbudgets(NBUDGET_RR), 'SEDI', zrrs(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_ri .and. lcold .and. lsedi ) call Budget_store_end( tbudgets(NBUDGET_RI), 'SEDI', zris(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_rs .and. lcold .and. lsnow ) call Budget_store_end( tbudgets(NBUDGET_RS), 'SEDI', zrss(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_rg .and. lcold .and. lsnow ) call Budget_store_end( tbudgets(NBUDGET_RG), 'SEDI', zrgs(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_rh .and. lcold .and. lhail ) call Budget_store_end( tbudgets(NBUDGET_RH), 'SEDI', zrhs(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_sv ) then
-    if ( lwarm .and. lsedc .and. nmom_c.ge.2) &
-      call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'SEDI', zccs(:, :, :) * prhodj(:, :, :) )
-    if ( lwarm .and. lrain .and. nmom_r.ge.2) &
-      call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'SEDI', zcrs(:, :, :) * prhodj(:, :, :) )
-    if ( lcold .and. lsedi .and. nmom_i.ge.2) &
-      call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'SEDI', zcis(:, :, :) * prhodj(:, :, :) )
+if ( BUCONF%lbu_enable ) then
+   if ( BUCONF%lbudget_th ) &
+        call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_TH), 'SEDI', zths(:, :, :) * prhodj(:, :, :) )
+   if ( BUCONF%lbudget_rc .and. nmom_c.ge.1 .and. lsedc ) &
+        call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RC), 'SEDI', zrcs(:, :, :) * prhodj(:, :, :) )
+   if ( BUCONF%lbudget_rr .and. nmom_r.ge.2 ) &
+        call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RR), 'SEDI', zrrs(:, :, :) * prhodj(:, :, :) )
+   if ( BUCONF%lbudget_ri .and. nmom_i.ge.1 .and. lsedi ) &
+        call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RI), 'SEDI', zris(:, :, :) * prhodj(:, :, :) )
+   if ( BUCONF%lbudget_rs .and. nmom_s.ge.1 ) &
+        call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RS), 'SEDI', zrss(:, :, :) * prhodj(:, :, :) )
+   if ( BUCONF%lbudget_rg .and. nmom_g.ge.1 ) &
+        call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RG), 'SEDI', zrgs(:, :, :) * prhodj(:, :, :) )
+   if ( BUCONF%lbudget_rh .and. nmom_h.ge.1 ) &
+        call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RH), 'SEDI', zrhs(:, :, :) * prhodj(:, :, :) )
+  if ( BUCONF%lbudget_sv ) then
+    if ( lsedc .and. nmom_c.ge.2 ) &
+      call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'SEDI', zccs(:, :, :) * prhodj(:, :, :) )
+    if ( nmom_r.ge.2 ) &
+      call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nr), 'SEDI', zcrs(:, :, :) * prhodj(:, :, :) )
+    if ( lsedi .and. nmom_i.ge.2 ) &
+      call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ni), 'SEDI', zcis(:, :, :) * prhodj(:, :, :) )
+    if ( nmom_s.ge.2 ) &
+      call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ns), 'SEDI', zcss(:, :, :) * prhodj(:, :, :) )
+    if ( nmom_g.ge.2 ) &
+      call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ng), 'SEDI', zcgs(:, :, :) * prhodj(:, :, :) )
+    if ( nmom_h.ge.2 ) &
+      call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nh), 'SEDI', zchs(:, :, :) * prhodj(:, :, :) )
   end if
 end if
 !
 ! 1.bis Deposition at 1st level above ground
 !
-IF (LWARM .AND. LDEPOC) THEN
-  if ( lbudget_rc ) call Budget_store_init( tbudgets(NBUDGET_RC),                    'DEPO', zrcs(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_sv .and. nmom_c.ge.2) &
-       call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'DEPO', zccs(:, :, :) * prhodj(:, :, :) )
+IF (NMOM_C.GE.1 .AND. LDEPOC) THEN
+  if ( BUCONF%lbudget_rc ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RC), 'DEPO', zrcs(:, :, :) * prhodj(:, :, :) )
+  if ( BUCONF%lbudget_sv .and. nmom_c.ge.2) &
+       call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'DEPO', zccs(:, :, :) * prhodj(:, :, :) )
 
   PINDEP(:,:)=0.
   GDEP(:,:) = .FALSE.
-  GDEP(:,:) = ZRCS(:,:,IKB) >0 .AND. ZCCS(:,:,IKB) >0 .AND. ZRCT(:,:,IKB) >0 .AND. ZCCT(:,:,IKB) >0
+  GDEP(:,:) = ZRCS(:,:,D%NKB) >0 .AND. ZCCS(:,:,D%NKB) >0 .AND. ZRCT(:,:,D%NKB) >0 .AND. ZCCT(:,:,D%NKB) >0
   WHERE (GDEP)
-     ZRCS(:,:,IKB) = ZRCS(:,:,IKB) - XVDEPOC * ZRCT(:,:,IKB) / PDZZ(:,:,IKB)
-     ZCCS(:,:,IKB) = ZCCS(:,:,IKB) - XVDEPOC * ZCCT(:,:,IKB) / PDZZ(:,:,IKB)
-     PINPRC(:,:) = PINPRC(:,:) + XVDEPOC * ZRCT(:,:,IKB) * PRHODREF(:,:,IKB) /XRHOLW
-     PINDEP(:,:) = XVDEPOC * ZRCT(:,:,IKB) *  PRHODREF(:,:,IKB) /XRHOLW
+     ZRCS(:,:,D%NKB) = ZRCS(:,:,D%NKB) - XVDEPOC * ZRCT(:,:,D%NKB) / PDZZ(:,:,D%NKB)
+     ZCCS(:,:,D%NKB) = ZCCS(:,:,D%NKB) - XVDEPOC * ZCCT(:,:,D%NKB) / PDZZ(:,:,D%NKB)
+     PINPRC(:,:) = PINPRC(:,:) + XVDEPOC * ZRCT(:,:,D%NKB) * PRHODREF(:,:,D%NKB) /CST%XRHOLW
+     PINDEP(:,:) = XVDEPOC * ZRCT(:,:,D%NKB) *  PRHODREF(:,:,D%NKB) /CST%XRHOLW
   END WHERE
 
-  if ( lbudget_rc ) call Budget_store_end( tbudgets(NBUDGET_RC),                    'DEPO', zrcs(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_sv .and. nmom_c.ge.2) &
-       call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'DEPO', zccs(:, :, :) * prhodj(:, :, :) )
+  if ( BUCONF%lbudget_rc ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RC), 'DEPO', zrcs(:, :, :) * prhodj(:, :, :) )
+  if ( BUCONF%lbudget_sv .and. nmom_c.ge.2) &
+       call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'DEPO', zccs(:, :, :) * prhodj(:, :, :) )
 END IF
 !
 !
-!!$IF (LWARM .AND. LRAIN) THEN
-!!$   if( lbu_enable ) then
-!!$    if ( lbudget_rc ) call Budget_store_init( tbudgets(NBUDGET_RC),                    'R2C1', zrcs(:, :, :) * prhodj(:, :, :) )
-!!$    if ( lbudget_rr ) call Budget_store_init( tbudgets(NBUDGET_RR),                    'R2C1', zrrs(:, :, :) * prhodj(:, :, :) )
-!!$    if ( lbudget_sv .and. nmom_c.ge.2) &
-!!$         call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'R2C1', zccs(:, :, :) * prhodj(:, :, :) )
-!!$    if ( lbudget_sv .and. nmom_r.ge.2) &
-!!$         call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'R2C1', zcrs(:, :, :) * prhodj(:, :, :) )
+!!$Z_RR_CVRC(:,:,:) = 0.
+!!$Z_CR_CVRC(:,:,:) = 0.
+!!$IF (NMOM_R.GE.2) THEN
+!!$   if( BUCONF%lbu_enable ) then
+!!$    if ( BUCONF%lbudget_rc ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RC),                    'R2C1', zrcs(:, :, :) * prhodj(:, :, :) )
+!!$    if ( BUCONF%lbudget_rr ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RR),                    'R2C1', zrrs(:, :, :) * prhodj(:, :, :) )
+!!$    if ( BUCONF%lbudget_sv .and. nmom_c.ge.2) &
+!!$         call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'R2C1', zccs(:, :, :) * prhodj(:, :, :) )
+!!$    if ( BUCONF%lbudget_sv .and. nmom_r.ge.2) &
+!!$         call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nr), 'R2C1', zcrs(:, :, :) * prhodj(:, :, :) )
 !!$   end if
 !!$
 !!$   CALL LIMA_DROPS_TO_DROPLETS_CONV(PRHODREF, ZRCS*PTSTEP, ZRRS*PTSTEP, ZCCS*PTSTEP, ZCRS*PTSTEP, &
@@ -794,13 +763,13 @@ END IF
 !!$   ZCCS(:,:,:) = ZCCS(:,:,:) - Z_CR_CVRC(:,:,:)/PTSTEP
 !!$   ZCRS(:,:,:) = ZCRS(:,:,:) + Z_CR_CVRC(:,:,:)/PTSTEP
 !!$
-!!$   if( lbu_enable ) then
-!!$    if ( lbudget_rc ) call Budget_store_end( tbudgets(NBUDGET_RC),                    'R2C1', zrcs(:, :, :) * prhodj(:, :, :) )
-!!$    if ( lbudget_rr ) call Budget_store_end( tbudgets(NBUDGET_RR),                    'R2C1', zrrs(:, :, :) * prhodj(:, :, :) )
-!!$    if ( lbudget_sv .and. nmom_c.ge.2) &
-!!$         call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'R2C1', zccs(:, :, :) * prhodj(:, :, :) )
-!!$    if ( lbudget_sv .and. nmom_r.ge.2) &
-!!$         call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'R2C1', zcrs(:, :, :) * prhodj(:, :, :) )
+!!$   if( BUCONF%lbu_enable ) then
+!!$    if ( BUCONF%lbudget_rc ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RC),                    'R2C1', zrcs(:, :, :) * prhodj(:, :, :) )
+!!$    if ( BUCONF%lbudget_rr ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RR),                    'R2C1', zrrs(:, :, :) * prhodj(:, :, :) )
+!!$    if ( BUCONF%lbudget_sv .and. nmom_c.ge.2) &
+!!$         call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'R2C1', zccs(:, :, :) * prhodj(:, :, :) )
+!!$    if ( BUCONF%lbudget_sv .and. nmom_r.ge.2) &
+!!$         call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nr), 'R2C1', zcrs(:, :, :) * prhodj(:, :, :) )
 !!$   end if
 !!$END IF
 !
@@ -816,19 +785,19 @@ IF ( KRR .GE. 5 ) ZRST(:,:,:) = ZRSS(:,:,:) * PTSTEP
 IF ( KRR .GE. 6 ) ZRGT(:,:,:) = ZRGS(:,:,:) * PTSTEP
 IF ( KRR .GE. 7 ) ZRHT(:,:,:) = ZRHS(:,:,:) * PTSTEP
 !
-IF ( LWARM .AND. NMOM_C.GE.2 )             ZCCT(:,:,:)   = ZCCS(:,:,:) * PTSTEP
-IF ( LWARM .AND. LRAIN .AND. NMOM_R.GE.2 ) ZCRT(:,:,:)   = ZCRS(:,:,:) * PTSTEP
-IF ( LCOLD .AND. NMOM_I.GE.2 )             ZCIT(:,:,:)   = ZCIS(:,:,:) * PTSTEP
-IF ( LCOLD .AND. NMOM_S.GE.2 )             ZCST(:,:,:)   = ZCSS(:,:,:) * PTSTEP
-IF ( LCOLD .AND. NMOM_G.GE.2 )             ZCGT(:,:,:)   = ZCGS(:,:,:) * PTSTEP
-IF ( LCOLD .AND. NMOM_H.GE.2 )             ZCHT(:,:,:)   = ZCHS(:,:,:) * PTSTEP
+IF ( NMOM_C.GE.2 ) ZCCT(:,:,:) = ZCCS(:,:,:) * PTSTEP
+IF ( NMOM_R.GE.2 ) ZCRT(:,:,:) = ZCRS(:,:,:) * PTSTEP
+IF ( NMOM_I.GE.2 ) ZCIT(:,:,:) = ZCIS(:,:,:) * PTSTEP
+IF ( NMOM_S.GE.2 ) ZCST(:,:,:) = ZCSS(:,:,:) * PTSTEP
+IF ( NMOM_G.GE.2 ) ZCGT(:,:,:) = ZCGS(:,:,:) * PTSTEP
+IF ( NMOM_H.GE.2 ) ZCHT(:,:,:) = ZCHS(:,:,:) * PTSTEP
 ! 
 !-------------------------------------------------------------------------------
 !
 !*       2.     Compute cloud, ice and precipitation fractions
 !               ----------------------------------------------
 !
-CALL LIMA_COMPUTE_CLOUD_FRACTIONS (IIB, IIE, IJB, IJE, IKB, IKE, KKL, &
+CALL LIMA_COMPUTE_CLOUD_FRACTIONS (D,                                 &
                                    ZCCT, ZRCT,                        &
                                    ZCRT, ZRRT,                        &
                                    ZCIT, ZRIT,                        &
@@ -842,9 +811,10 @@ CALL LIMA_COMPUTE_CLOUD_FRACTIONS (IIB, IIE, IJB, IJE, IKB, IKE, KKL, &
 !*       2.     Nucleation processes
 !               --------------------
 !
-CALL LIMA_NUCLEATION_PROCS (PTSTEP, TPFILE, 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                              )
@@ -898,7 +868,7 @@ ZTIME(:,:,:)=0. ! Current integration time (all points may have a different inte
 ZRT_SUM(:,:,:) = ZRCT(:,:,:) + ZRRT(:,:,:) + ZRIT(:,:,:) + ZRST(:,:,:) + ZRGT(:,:,:) + ZRHT(:,:,:)
 WHERE (ZRT_SUM(:,:,:)<XRTMIN(2)) ZTIME(:,:,:)=PTSTEP ! no need to treat hydrometeor-free point
 !
-DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP))
+DO WHILE(ANY(ZTIME(D%NIB:D%NIE,D%NJB:D%NJE,D%NKTB:D%NKTE)<PTSTEP))
    !
    IF(XMRSTEP/=0.) THEN
       ! In this case we need to remember the mixing ratios used to compute the tendencies
@@ -919,7 +889,7 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP))
    ENDIF
    !
    LLCOMPUTE(:,:,:)=.FALSE.
-   LLCOMPUTE(IIB:IIE,IJB:IJE,IKTB:IKTE) = ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP ! Compuation only for points for which integration time has not reached the timestep
+   LLCOMPUTE(D%NIB:D%NIE,D%NJB:D%NJE,D%NKTB:D%NKTE) = ZTIME(D%NIB:D%NIE,D%NJB:D%NJE,D%NKTB:D%NKTE)<PTSTEP ! Compuation only for points for which integration time has not reached the timestep
    WHERE(LLCOMPUTE(:,:,:))
       IITER(:,:,:)=IITER(:,:,:)+1
    END WHERE
@@ -1233,13 +1203,13 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP))
       ! We need to adjust tendencies when temperature reaches 0
       IF(LFEEDBACKT) THEN
          !Is ZB_TH enough to change temperature sign?
-         WHERE( ((ZTHT1D(:) - 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?
          ZTIME_THRESHOLD(:)=-1.
          WHERE(ABS(ZA_TH(:))>1.E-20)
-            ZTIME_THRESHOLD(:)=(XTT/ZEXN1D(:) - ZB_TH(:) - ZTHT1D(:))/ZA_TH(:)
+            ZTIME_THRESHOLD(:)=(CST%XTT/ZEXN1D(:) - ZB_TH(:) - ZTHT1D(:))/ZA_TH(:)
          ENDWHERE
          WHERE(ZTIME_THRESHOLD(:)>0.)
             ZMAXTIME(:)=MIN(ZMAXTIME(:), ZTIME_THRESHOLD(:))
@@ -1455,7 +1425,7 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<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(:,:,:)
 
@@ -1803,248 +1773,248 @@ IF ( KRR .GE. 5 ) PRS(:,:,:,5) = ZRST(:,:,:) *ZINV_TSTEP
 IF ( KRR .GE. 6 ) PRS(:,:,:,6) = ZRGT(:,:,:) *ZINV_TSTEP
 IF ( KRR .GE. 7 ) PRS(:,:,:,7) = ZRHT(:,:,:) *ZINV_TSTEP
 !
-IF ( LWARM .AND. NMOM_C.GE.2 )             PSVS(:,:,:,NSV_LIMA_NC) = ZCCT(:,:,:) *ZINV_TSTEP
-IF ( LWARM .AND. LRAIN .AND. NMOM_R.GE.2 ) PSVS(:,:,:,NSV_LIMA_NR) = ZCRT(:,:,:) *ZINV_TSTEP
-IF ( LCOLD .AND. NMOM_I.GE.2 )             PSVS(:,:,:,NSV_LIMA_NI) = ZCIT(:,:,:) *ZINV_TSTEP
-IF ( LCOLD .AND. NMOM_S.GE.2 )             PSVS(:,:,:,NSV_LIMA_NS) = ZCST(:,:,:) *ZINV_TSTEP
-IF ( LCOLD .AND. NMOM_G.GE.2 )             PSVS(:,:,:,NSV_LIMA_NG) = ZCGT(:,:,:) *ZINV_TSTEP
-IF ( LCOLD .AND. NMOM_H.GE.2 )             PSVS(:,:,:,NSV_LIMA_NH) = ZCHT(:,:,:) *ZINV_TSTEP
+IF ( NMOM_C.GE.2 ) PSVS(:,:,:,ISV_LIMA_NC) = ZCCT(:,:,:) *ZINV_TSTEP
+IF ( NMOM_R.GE.2 ) PSVS(:,:,:,ISV_LIMA_NR) = ZCRT(:,:,:) *ZINV_TSTEP
+IF ( NMOM_I.GE.2 ) PSVS(:,:,:,ISV_LIMA_NI) = ZCIT(:,:,:) *ZINV_TSTEP
+IF ( NMOM_S.GE.2 ) PSVS(:,:,:,ISV_LIMA_NS) = ZCST(:,:,:) *ZINV_TSTEP
+IF ( NMOM_G.GE.2 ) PSVS(:,:,:,ISV_LIMA_NG) = ZCGT(:,:,:) *ZINV_TSTEP
+IF ( NMOM_H.GE.2 ) PSVS(:,:,:,ISV_LIMA_NH) = ZCHT(:,:,:) *ZINV_TSTEP
 !
-IF ( NMOD_CCN .GE. 1 )   PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) = ZCCNFT(:,:,:,:) *ZINV_TSTEP
-IF ( NMOD_CCN .GE. 1 )   PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1) = ZCCNAT(:,:,:,:) *ZINV_TSTEP
-IF ( NMOD_IFN .GE. 1 )   PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1) = ZIFNFT(:,:,:,:) *ZINV_TSTEP
-IF ( NMOD_IFN .GE. 1 )   PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1) = ZIFNNT(:,:,:,:) *ZINV_TSTEP
-IF ( NMOD_IMM .GE. 1 )   PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1) = ZIMMNT(:,:,:,:) *ZINV_TSTEP
-IF ( LCOLD .AND. LHHONI) PSVS(:,:,:,NSV_LIMA_HOM_HAZE) = ZHOMFT(:,:,:) *ZINV_TSTEP
+IF ( NMOD_CCN .GE. 1 )   PSVS(:,:,:,ISV_LIMA_CCN_FREE:ISV_LIMA_CCN_FREE+NMOD_CCN-1) = ZCCNFT(:,:,:,:) *ZINV_TSTEP
+IF ( NMOD_CCN .GE. 1 )   PSVS(:,:,:,ISV_LIMA_CCN_ACTI:ISV_LIMA_CCN_ACTI+NMOD_CCN-1) = ZCCNAT(:,:,:,:) *ZINV_TSTEP
+IF ( NMOD_IFN .GE. 1 )   PSVS(:,:,:,ISV_LIMA_IFN_FREE:ISV_LIMA_IFN_FREE+NMOD_IFN-1) = ZIFNFT(:,:,:,:) *ZINV_TSTEP
+IF ( NMOD_IFN .GE. 1 )   PSVS(:,:,:,ISV_LIMA_IFN_NUCL:ISV_LIMA_IFN_NUCL+NMOD_IFN-1) = ZIFNNT(:,:,:,:) *ZINV_TSTEP
+IF ( NMOD_IMM .GE. 1 )   PSVS(:,:,:,ISV_LIMA_IMM_NUCL:ISV_LIMA_IMM_NUCL+NMOD_IMM-1) = ZIMMNT(:,:,:,:) *ZINV_TSTEP
+IF ( LHHONI) PSVS(:,:,:,ISV_LIMA_HOM_HAZE) = ZHOMFT(:,:,:) *ZINV_TSTEP
 !
 !
 !
 ! Call budgets
 !
-if ( lbu_enable ) then
+if ( BUCONF%lbu_enable ) then
   allocate( zrhodjontstep(size( prhodj, 1), size( prhodj, 2), size( prhodj, 3) ) )
   zrhodjontstep(:, :, :) = zinv_tstep * prhodj(:, :, :)
 
-  if ( lbudget_th ) then
-    call Budget_store_add( tbudgets(NBUDGET_TH), 'REVA',  ztot_th_evap (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_TH), 'HONC',  ztot_th_honc (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_TH), 'HONR',  ztot_th_honr (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_TH), 'DEPS',  ztot_th_deps (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_TH), 'DEPI',  ztot_th_depi (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_TH), 'DEPG',  ztot_th_depg (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_TH), 'IMLT',  ztot_th_imlt (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_TH), 'BERFI', ztot_th_berfi(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_TH), 'RIM',   ztot_th_rim  (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_TH), 'ACC',   ztot_th_acc  (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_TH), 'CFRZ',  ztot_th_cfrz (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_TH), 'WETG',  ztot_th_wetg (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_TH), 'DRYG',  ztot_th_dryg (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_TH), 'GMLT',  ztot_th_gmlt (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_TH), 'DEPH',  ztot_th_deph (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_TH), 'WETH',  ztot_th_weth (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_TH), 'HMLT',  ztot_th_hmlt (:, :, :) * zrhodjontstep(:, :, :) )
+  if ( BUCONF%lbudget_th ) then
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'REVA',  ztot_th_evap (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HONC',  ztot_th_honc (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HONR',  ztot_th_honr (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DEPS',  ztot_th_deps (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DEPI',  ztot_th_depi (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DEPG',  ztot_th_depg (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'IMLT',  ztot_th_imlt (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'BERFI', ztot_th_berfi(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'RIM',   ztot_th_rim  (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'ACC',   ztot_th_acc  (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'CFRZ',  ztot_th_cfrz (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'WETG',  ztot_th_wetg (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DRYG',  ztot_th_dryg (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'GMLT',  ztot_th_gmlt (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'DEPH',  ztot_th_deph (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'WETH',  ztot_th_weth (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_TH), 'HMLT',  ztot_th_hmlt (:, :, :) * zrhodjontstep(:, :, :) )
   end if
 
-  if ( lbudget_rv ) then
-    call Budget_store_add( tbudgets(NBUDGET_RV), 'REVA', -ztot_rr_evap (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RV), 'DEPS', -ztot_rs_deps (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RV), 'DEPI', -ztot_ri_depi (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RV), 'DEPG', -ztot_rg_depg (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RV), 'CORR2', ztot_rv_corr2(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RV), 'DEPH', -ztot_rh_deph (:, :, :) * zrhodjontstep(:, :, :) )
+  if ( BUCONF%lbudget_rv ) then
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'REVA', -ztot_rr_evap (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'DEPS', -ztot_rs_deps (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'DEPI', -ztot_ri_depi (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'DEPG', -ztot_rg_depg (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'CORR2', ztot_rv_corr2(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RV), 'DEPH', -ztot_rh_deph (:, :, :) * zrhodjontstep(:, :, :) )
   end if
 
-  if ( lbudget_rc ) then
-    call Budget_store_add( tbudgets(NBUDGET_RC), 'AUTO',  ztot_rc_auto (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RC), 'ACCR',  ztot_rc_accr (:, :, :) * zrhodjontstep(:, :, :) )
-    !call Budget_store_add( tbudgets(NBUDGET_RC), 'REVA',  0. )
-    call Budget_store_add( tbudgets(NBUDGET_RC), 'HONC',  ztot_rc_honc (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RC), 'IMLT',  ztot_rc_imlt (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RC), 'BERFI', ztot_rc_berfi(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RC), 'RIM',   ztot_rc_rim  (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RC), 'WETG',  ztot_rc_wetg (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RC), 'DRYG',  ztot_rc_dryg (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RC), 'CVRC', -ztot_rr_cvrc (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RC), 'CORR2', ztot_rc_corr2(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RC), 'WETH',  ztot_rc_weth(:, :, :)  * zrhodjontstep(:, :, :) )
+  if ( BUCONF%lbudget_rc ) then
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'AUTO',  ztot_rc_auto (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'ACCR',  ztot_rc_accr (:, :, :) * zrhodjontstep(:, :, :) )
+    !call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'REVA',  0. )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'HONC',  ztot_rc_honc (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'IMLT',  ztot_rc_imlt (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'BERFI', ztot_rc_berfi(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'RIM',   ztot_rc_rim  (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'WETG',  ztot_rc_wetg (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'DRYG',  ztot_rc_dryg (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'CVRC', -ztot_rr_cvrc (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'CORR2', ztot_rc_corr2(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RC), 'WETH',  ztot_rc_weth(:, :, :)  * zrhodjontstep(:, :, :) )
   end if
 
-  if ( lbudget_rr ) then
-    call Budget_store_add( tbudgets(NBUDGET_RR), 'AUTO', -ztot_rc_auto(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RR), 'ACCR', -ztot_rc_accr(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RR), 'REVA',  ztot_rr_evap(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RR), 'HONR',  ztot_rr_honr(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RR), 'ACC',   ztot_rr_acc (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RR), 'CFRZ',  ztot_rr_cfrz(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RR), 'WETG',  ztot_rr_wetg(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RR), 'DRYG',  ztot_rr_dryg(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RR), 'GMLT',  ztot_rr_gmlt(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RR), 'CVRC',  ztot_rr_cvrc(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RR), 'CORR2', ztot_rr_corr2(:, :, :)* zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RR), 'WETH',  ztot_rr_weth(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RR), 'HMLT',  ztot_rr_hmlt(:, :, :) * zrhodjontstep(:, :, :) )
+  if ( BUCONF%lbudget_rr ) then
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'AUTO', -ztot_rc_auto(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'ACCR', -ztot_rc_accr(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'REVA',  ztot_rr_evap(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'HONR',  ztot_rr_honr(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'ACC',   ztot_rr_acc (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'CFRZ',  ztot_rr_cfrz(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'WETG',  ztot_rr_wetg(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'DRYG',  ztot_rr_dryg(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'GMLT',  ztot_rr_gmlt(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'CVRC',  ztot_rr_cvrc(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'CORR2', ztot_rr_corr2(:, :, :)* zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'WETH',  ztot_rr_weth(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RR), 'HMLT',  ztot_rr_hmlt(:, :, :) * zrhodjontstep(:, :, :) )
   end if
 
-  if ( lbudget_ri ) then
-    call Budget_store_add( tbudgets(NBUDGET_RI), 'HONC',  -ztot_rc_honc (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RI), 'CNVI',   ztot_ri_cnvi (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RI), 'CNVS',   ztot_ri_cnvs (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RI), 'AGGS',   ztot_ri_aggs (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RI), 'IMLT',  -ztot_rc_imlt (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RI), 'BERFI', -ztot_rc_berfi(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RI), 'HMS',    ztot_ri_hms  (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RI), 'CFRZ',   ztot_ri_cfrz (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RI), 'DEPI',   ztot_ri_depi (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RI), 'CIBU',   ztot_ri_cibu (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RI), 'RDSF',   ztot_ri_rdsf (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RI), 'WETG',   ztot_ri_wetg (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RI), 'DRYG',   ztot_ri_dryg (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RI), 'HMG',    ztot_ri_hmg  (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RI), 'CORR2',  ztot_ri_corr2(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RI), 'WETH',   ztot_ri_weth (:, :, :) * zrhodjontstep(:, :, :) )
+  if ( BUCONF%lbudget_ri ) then
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HONC',  -ztot_rc_honc (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'CNVI',   ztot_ri_cnvi (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'CNVS',   ztot_ri_cnvs (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'AGGS',   ztot_ri_aggs (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'IMLT',  -ztot_rc_imlt (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'BERFI', -ztot_rc_berfi(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HMS',    ztot_ri_hms  (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'CFRZ',   ztot_ri_cfrz (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'DEPI',   ztot_ri_depi (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'CIBU',   ztot_ri_cibu (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'RDSF',   ztot_ri_rdsf (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'WETG',   ztot_ri_wetg (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'DRYG',   ztot_ri_dryg (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'HMG',    ztot_ri_hmg  (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'CORR2',  ztot_ri_corr2(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RI), 'WETH',   ztot_ri_weth (:, :, :) * zrhodjontstep(:, :, :) )
   end if
 
-  if ( lbudget_rs ) then
-    call Budget_store_add( tbudgets(NBUDGET_RS), 'CNVI', -ztot_ri_cnvi(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RS), 'DEPS',  ztot_rs_deps(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RS), 'CNVS', -ztot_ri_cnvs(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RS), 'AGGS', -ztot_ri_aggs(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RS), 'RIM',   ztot_rs_rim (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RS), 'HMS',   ztot_rs_hms (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RS), 'ACC',   ztot_rs_acc (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RS), 'CMEL',  ztot_rs_cmel(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RS), 'CIBU', -ztot_ri_cibu(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RS), 'WETG',  ztot_rs_wetg(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RS), 'DRYG',  ztot_rs_dryg(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RS), 'WETH',  ztot_rs_weth(:, :, :) * zrhodjontstep(:, :, :) )
+  if ( BUCONF%lbudget_rs ) then
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'CNVI', -ztot_ri_cnvi(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'DEPS',  ztot_rs_deps(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'CNVS', -ztot_ri_cnvs(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'AGGS', -ztot_ri_aggs(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'RIM',   ztot_rs_rim (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'HMS',   ztot_rs_hms (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'ACC',   ztot_rs_acc (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'CMEL',  ztot_rs_cmel(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'CIBU', -ztot_ri_cibu(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'WETG',  ztot_rs_wetg(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'DRYG',  ztot_rs_dryg(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RS), 'WETH',  ztot_rs_weth(:, :, :) * zrhodjontstep(:, :, :) )
   end if
 
-  if ( lbudget_rg ) then
-    call Budget_store_add( tbudgets(NBUDGET_RG), 'HONR', -ztot_rr_honr(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RG), 'DEPG',  ztot_rg_depg(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RG), 'RIM',   ztot_rg_rim (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RG), 'ACC',   ztot_rg_acc (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RG), 'CMEL', -ztot_rs_cmel(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RG), 'CFRZ', ( -ztot_rr_cfrz(:, :, :) - ztot_ri_cfrz(:, :, :) ) &
+  if ( BUCONF%lbudget_rg ) then
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'HONR', -ztot_rr_honr(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'DEPG',  ztot_rg_depg(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'RIM',   ztot_rg_rim (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'ACC',   ztot_rg_acc (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'CMEL', -ztot_rs_cmel(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'CFRZ', ( -ztot_rr_cfrz(:, :, :) - ztot_ri_cfrz(:, :, :) ) &
                                                          * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RG), 'RDSF', -ztot_ri_rdsf(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RG), 'WETG',  ztot_rg_wetg(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RG), 'DRYG',  ztot_rg_dryg(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RG), 'HMG',   ztot_rg_hmg (:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RG), 'GMLT', -ztot_rr_gmlt(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RG), 'WETH',  ztot_rg_weth(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RG), 'COHG',  ztot_rg_cohg(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'RDSF', -ztot_ri_rdsf(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'WETG',  ztot_rg_wetg(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'DRYG',  ztot_rg_dryg(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'HMG',   ztot_rg_hmg (:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'GMLT', -ztot_rr_gmlt(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'WETH',  ztot_rg_weth(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RG), 'COHG',  ztot_rg_cohg(:, :, :) * zrhodjontstep(:, :, :) )
   end if
 
-  if ( lbudget_rh ) then
-    call Budget_store_add( tbudgets(NBUDGET_RH), 'WETG',  ztot_rh_wetg(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RH), 'DEPH',  ztot_rh_deph(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RH), 'WETH',  ztot_rh_weth(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RH), 'COHG', -ztot_rg_cohg(:, :, :) * zrhodjontstep(:, :, :) )
-    call Budget_store_add( tbudgets(NBUDGET_RH), 'HMLT', -ztot_rr_hmlt(:, :, :) * zrhodjontstep(:, :, :) )
+  if ( BUCONF%lbudget_rh ) then
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'WETG',  ztot_rh_wetg(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'DEPH',  ztot_rh_deph(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'WETH',  ztot_rh_weth(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'COHG', -ztot_rg_cohg(:, :, :) * zrhodjontstep(:, :, :) )
+    call BUDGET_STORE_ADD_PHY(D, TBUDGETS(NBUDGET_RH), 'HMLT', -ztot_rr_hmlt(:, :, :) * zrhodjontstep(:, :, :) )
   end if
 
-  if ( lbudget_sv ) then
+  if ( BUCONF%lbudget_sv ) then
     !
     ! Cloud droplets
     !
     if (nmom_c.ge.2) then 
        idx = NBUDGET_SV1 - 1 + nsv_lima_nc
-       call Budget_store_add( tbudgets(idx), 'SELF',  ztot_cc_self (:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'AUTO',  ztot_cc_auto (:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'ACCR',  ztot_cc_accr (:, :, :) * zrhodjontstep(:, :, :) )
-       !call Budget_store_add( tbudgets(idx), 'REVA',  0. )
-       call Budget_store_add( tbudgets(idx), 'HONC',  ztot_cc_honc (:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'IMLT',  ztot_cc_imlt (:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'RIM',   ztot_cc_rim  (:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'WETG',  ztot_cc_wetg (:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'DRYG',  ztot_cc_dryg (:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'CVRC', -ztot_cr_cvrc (:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'CORR2', ztot_cc_corr2(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'WETH',  ztot_cc_weth (:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'SELF',  ztot_cc_self (:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'AUTO',  ztot_cc_auto (:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'ACCR',  ztot_cc_accr (:, :, :) * zrhodjontstep(:, :, :) )
+       !call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'REVA',  0. )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'HONC',  ztot_cc_honc (:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'IMLT',  ztot_cc_imlt (:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'RIM',   ztot_cc_rim  (:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'WETG',  ztot_cc_wetg (:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'DRYG',  ztot_cc_dryg (:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CVRC', -ztot_cr_cvrc (:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CORR2', ztot_cc_corr2(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'WETH',  ztot_cc_weth (:, :, :) * zrhodjontstep(:, :, :) )
     end if
     !
     ! Rain drops
     !
     if (nmom_r.ge.2) then
        idx = NBUDGET_SV1 - 1 + nsv_lima_nr
-       call Budget_store_add( tbudgets(idx), 'AUTO',  ztot_cr_auto(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'SCBU',  ztot_cr_scbu(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'REVA',  ztot_cr_evap(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'BRKU',  ztot_cr_brku(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'HONR',  ztot_cr_honr(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'ACC',   ztot_cr_acc (:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'CFRZ',  ztot_cr_cfrz(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'WETG',  ztot_cr_wetg(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'DRYG',  ztot_cr_dryg(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'GMLT',  ztot_cr_gmlt(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'CVRC',  ztot_cr_cvrc(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'CORR2', ztot_cr_corr2(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'WETH',  ztot_cr_weth(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'HMLT',  ztot_cr_hmlt(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'AUTO',  ztot_cr_auto(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'SCBU',  ztot_cr_scbu(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'REVA',  ztot_cr_evap(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'BRKU',  ztot_cr_brku(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'HONR',  ztot_cr_honr(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'ACC',   ztot_cr_acc (:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CFRZ',  ztot_cr_cfrz(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'WETG',  ztot_cr_wetg(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'DRYG',  ztot_cr_dryg(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'GMLT',  ztot_cr_gmlt(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CVRC',  ztot_cr_cvrc(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CORR2', ztot_cr_corr2(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'WETH',  ztot_cr_weth(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'HMLT',  ztot_cr_hmlt(:, :, :) * zrhodjontstep(:, :, :) )
     end if
     !
     ! Ice crystals
     !
     if (nmom_i.ge.2) then
        idx = NBUDGET_SV1 - 1 + nsv_lima_ni
-       call Budget_store_add( tbudgets(idx), 'HONC',  -ztot_cc_honc (:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'CNVI',   ztot_ci_cnvi (:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'CNVS',   ztot_ci_cnvs (:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'AGGS',   ztot_ci_aggs (:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'IMLT',  -ztot_cc_imlt (:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'HMS',    ztot_ci_hms  (:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'CFRZ',   ztot_ci_cfrz (:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'CIBU',   ztot_ci_cibu (:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'RDSF',   ztot_ci_rdsf (:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'WETG',   ztot_ci_wetg (:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'DRYG',   ztot_ci_dryg (:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'HMG',    ztot_ci_hmg  (:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'CORR2',  ztot_ci_corr2(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'WETH',   ztot_ci_weth (:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'HONC',  -ztot_cc_honc (:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CNVI',   ztot_ci_cnvi (:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CNVS',   ztot_ci_cnvs (:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'AGGS',   ztot_ci_aggs (:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'IMLT',  -ztot_cc_imlt (:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'HMS',    ztot_ci_hms  (:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CFRZ',   ztot_ci_cfrz (:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CIBU',   ztot_ci_cibu (:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'RDSF',   ztot_ci_rdsf (:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'WETG',   ztot_ci_wetg (:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'DRYG',   ztot_ci_dryg (:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'HMG',    ztot_ci_hmg  (:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CORR2',  ztot_ci_corr2(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'WETH',   ztot_ci_weth (:, :, :) * zrhodjontstep(:, :, :) )
     end if
     !
     ! Snow
     !
     if (nmom_s.ge.2) then
        idx = NBUDGET_SV1 - 1 + nsv_lima_ns
-       call Budget_store_add( tbudgets(idx), 'CNVI',  -ztot_ci_cnvi(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'CNVS',  -ztot_ci_cnvs(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'RIM',    ztot_cs_rim(:, :, :)  * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'ACC',    ztot_cs_acc(:, :, :)  * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'CMEL',   ztot_cs_cmel(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'SSC',    ztot_cs_ssc(:, :, :)  * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'WETG',   ztot_cs_wetg(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'DRYG',   ztot_cs_dryg(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'WETH',   ztot_cs_weth(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CNVI',  -ztot_ci_cnvi(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CNVS',  -ztot_ci_cnvs(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'RIM',    ztot_cs_rim(:, :, :)  * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'ACC',    ztot_cs_acc(:, :, :)  * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CMEL',   ztot_cs_cmel(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'SSC',    ztot_cs_ssc(:, :, :)  * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'WETG',   ztot_cs_wetg(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'DRYG',   ztot_cs_dryg(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'WETH',   ztot_cs_weth(:, :, :) * zrhodjontstep(:, :, :) )
     end if
     !
     ! Graupel
     !
     if (nmom_g.ge.2) then
        idx = NBUDGET_SV1 - 1 + nsv_lima_ng
-       call Budget_store_add( tbudgets(idx), 'RIM',   -ztot_cs_rim(:, :, :)  * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'ACC',   -ztot_cs_acc(:, :, :)  * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'CMEL',  -ztot_cs_cmel(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'CFRZ',  -ztot_cr_cfrz(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'WETG',   ztot_cg_wetg(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'GMLT',   ztot_cg_gmlt(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'WETH',   ztot_cg_weth(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'COHG',   ztot_cg_cohg(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'RIM',   -ztot_cs_rim(:, :, :)  * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'ACC',   -ztot_cs_acc(:, :, :)  * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CMEL',  -ztot_cs_cmel(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'CFRZ',  -ztot_cr_cfrz(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'WETG',   ztot_cg_wetg(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'GMLT',   ztot_cg_gmlt(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'WETH',   ztot_cg_weth(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'COHG',   ztot_cg_cohg(:, :, :) * zrhodjontstep(:, :, :) )
     end if
     !
     ! Hail
     !
     if (nmom_h.ge.2) then
        idx = NBUDGET_SV1 - 1 + nsv_lima_nh
-       call Budget_store_add( tbudgets(idx), 'WETG',  -ztot_cg_wetg(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'COHG',  -ztot_cg_cohg(:, :, :) * zrhodjontstep(:, :, :) )
-       call Budget_store_add( tbudgets(idx), 'HMLT',   ztot_ch_hmlt(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'WETG',  -ztot_cg_wetg(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'COHG',  -ztot_cg_cohg(:, :, :) * zrhodjontstep(:, :, :) )
+       call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'HMLT',   ztot_ch_hmlt(:, :, :) * zrhodjontstep(:, :, :) )
     end if
 
     do ii = 1, nmod_ifn
       idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl + ii - 1
-      call Budget_store_add( tbudgets(idx), 'IMLT', ztot_ifnn_imlt(:, :, :, ii) * zrhodjontstep(:, :, :) )
+      call BUDGET_STORE_ADD_PHY(D, TBUDGETS(idx), 'IMLT', ztot_ifnn_imlt(:, :, :, ii) * zrhodjontstep(:, :, :) )
     end do
   end if
 
diff --git a/src/mesonh/micro/lima_adjust_split.f90 b/src/common/micro/lima_adjust_split.F90
similarity index 65%
rename from src/mesonh/micro/lima_adjust_split.f90
rename to src/common/micro/lima_adjust_split.F90
index d0b3425d8f83bec8cf9010ace6fe2dfab4e71acd..f85bde85b19f4019847185e086d78cae47ad1762 100644
--- a/src/mesonh/micro/lima_adjust_split.f90
+++ b/src/common/micro/lima_adjust_split.F90
@@ -3,76 +3,9 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!     #############################
-      MODULE MODI_LIMA_ADJUST_SPLIT
-!     #############################
-!
-INTERFACE
-!
-      SUBROUTINE LIMA_ADJUST_SPLIT(D, KRR, KMI, TPFILE, HCONDENS, HLAMBDA3,        &
-                             OSUBG_COND, OSIGMAS, PTSTEP, PSIGQSAT,             &
-                             PRHODREF, PRHODJ, PEXNREF, PSIGS, PMFCONV,         &
-                             PPABST, PPABSTT, PZZ, PDTHRAD, PW_NU,              &
-                             PRT, PRS, PSVT, PSVS,                              &
-                             PTHS, PSRCS, PCLDFR, PICEFR, PRC_MF, PRI_MF, PCF_MF)
-!
-USE MODD_IO,    ONLY: TFILEDATA
-USE MODD_NSV,   only: NSV_LIMA_BEG
-USE MODD_DIMPHYEX,       ONLY: DIMPHYEX_t
-!
-TYPE(DIMPHYEX_t),         INTENT(IN)   :: D
-INTEGER,                  INTENT(IN)   :: KRR        ! Number of moist variables
-INTEGER,                  INTENT(IN)   :: KMI        ! Model index 
-TYPE(TFILEDATA),          INTENT(IN)   :: TPFILE     ! Output file
-CHARACTER(len=80),        INTENT(IN)   :: HCONDENS
-CHARACTER(len=4),         INTENT(IN)   :: HLAMBDA3   ! formulation for lambda3 coeff
-LOGICAL,                  INTENT(IN)   :: OSUBG_COND ! Switch for Subgrid
-                                                     ! Condensation
-LOGICAL,                  INTENT(IN)   :: OSIGMAS    ! Switch for Sigma_s:
-                                                     ! use values computed in CONDENSATION
-                                                     ! or that from turbulence scheme
-REAL,                     INTENT(IN)   :: PTSTEP     ! Time step
-REAL,                     INTENT(IN)   :: PSIGQSAT   ! coeff applied to qsat variance contribution
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PRHODREF  ! Dry density of the 
-                                                     ! reference state
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PRHODJ    ! Dry density * Jacobian
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PEXNREF   ! Reference Exner function
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PSIGS     ! Sigma_s at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PMFCONV   ! 
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PPABST    ! Absolute Pressure at t     
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PPABSTT   ! Absolute Pressure at t+dt     
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PZZ       !     
-REAL, DIMENSION(:,:,:),   INTENT(IN)   :: PDTHRAD   ! Radiative temperature tendency
-REAL, DIMENSION(:,:,:),   INTENT(IN)   :: PW_NU     ! updraft velocity used for
-!
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT       ! m.r. at t
-!
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS       ! m.r. source
-!
-REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(IN)    :: PSVT ! Concentrations at time t
-!
-REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(INOUT) :: PSVS ! Concentration sources
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS      ! Theta source
-!
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PSRCS     ! Second-order flux
-                                                     ! s'rc'/2Sigma_s2 at time t+1
-                                                     ! multiplied by Lambda_3
-REAL, DIMENSION(:,:,:),   INTENT(INOUT)   :: PCLDFR    ! Cloud fraction          
-REAL, DIMENSION(:,:,:),   INTENT(INOUT)   :: PICEFR    ! Cloud fraction          
-REAL, DIMENSION(:,:,:),     INTENT(IN)    :: PRC_MF! Convective Mass Flux liquid mixing ratio
-REAL, DIMENSION(:,:,:),     INTENT(IN)    :: PRI_MF! Convective Mass Flux ice mixing ratio
-REAL, DIMENSION(:,:,:),     INTENT(IN)    :: PCF_MF! Convective Mass Flux Cloud fraction 
-!
-END SUBROUTINE LIMA_ADJUST_SPLIT
-!
-END INTERFACE
-!
-END MODULE MODI_LIMA_ADJUST_SPLIT
-!
 !     ###########################################################################
-      SUBROUTINE LIMA_ADJUST_SPLIT(D, KRR, KMI, TPFILE, 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,              &
@@ -152,15 +85,13 @@ END MODULE MODI_LIMA_ADJUST_SPLIT
 !*       0.    DECLARATIONS
 !              ------------
 !
-use modd_budget,           only: lbu_enable, nbumod,                                          &
-                                 lbudget_th, lbudget_rv, lbudget_rc, lbudget_ri, lbudget_sv,  &
-                                 NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RI, NBUDGET_SV1, &
-                                 tbudgets
+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_CST
-use modd_field,            only: TFIELDMETADATA, TYPEREAL
-USE MODD_IO,               ONLY: TFILEDATA
-USE MODD_LUNIT_n,          ONLY: TLUOUT
+!use modd_field,            only: TFIELDDATA, TYPEREAL
+!USE MODD_IO,               ONLY: TFILEDATA
+!USE MODD_LUNIT_n,          ONLY: TLUOUT
 USE MODD_NSV
 USE MODD_PARAMETERS
 USE MODD_PARAM_LIMA
@@ -172,15 +103,13 @@ USE MODD_NEB,              ONLY: NEB
 USE MODD_TURB_n,           ONLY: TURBN
 USE MODD_DIMPHYEX,         ONLY: DIMPHYEX_t
 !
-use mode_budget,           only: Budget_store_init, Budget_store_end
-USE MODE_IO_FIELD_WRITE,   only: IO_Field_write
+use mode_budget,           only: BUDGET_STORE_INIT_PHY, BUDGET_STORE_END_PHY
+!USE MODE_IO_FIELD_WRITE,   only: IO_Field_write
 use mode_msg
 use mode_tools,            only: Countjv
 !
-USE MODI_CONDENS
 USE MODI_CONDENSATION
-USE MODI_LIMA_FUNCTIONS
-USE MODI_LIMA_CCN_ACTIVATION
+USE MODE_LIMA_CCN_ACTIVATION, ONLY: LIMA_CCN_ACTIVATION
 !
 IMPLICIT NONE
 !
@@ -188,9 +117,13 @@ IMPLICIT NONE
 !
 !
 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
+!
 INTEGER,                  INTENT(IN)   :: KRR        ! Number of moist variables
 INTEGER,                  INTENT(IN)   :: KMI        ! Model index 
-TYPE(TFILEDATA),          INTENT(IN)   :: TPFILE     ! Output file
 CHARACTER(len=80),        INTENT(IN)    :: HCONDENS
 CHARACTER(len=4),         INTENT(IN)    :: HLAMBDA3  ! formulation for lambda3 coeff
 LOGICAL,                  INTENT(IN)   :: OSUBG_COND ! Switch for Subgrid 
@@ -217,9 +150,9 @@ REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT       ! m.r. at t
 !
 REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS       ! m.r. source
 !
-REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(IN)    :: PSVT ! Concentrations at time t
+REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT ! Concentrations at time t
 !
-REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(INOUT) :: PSVS ! Concentration sources
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS ! Concentration sources
 !
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS      ! Theta source
 !
@@ -244,6 +177,7 @@ REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) &
                             PRIT,        & ! Cloud ice  m.r. at t
                             PRST,        & ! Aggregate  m.r. at t
                             PRGT,        & ! Graupel    m.r. at t
+                            PRHT,        & ! Hail       m.r. at t
 !
                             PRVS,        & ! Water vapor m.r. source
                             PRCS,        & ! Cloud water m.r. source
@@ -251,6 +185,7 @@ REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) &
                             PRIS,        & ! Cloud ice  m.r. source
                             PRSS,        & ! Aggregate  m.r. source
                             PRGS,        & ! Graupel    m.r. source
+                            PRHS,        & ! Hail       m.r. source
 !
                             PCCT,        & ! Cloud water conc. at t
                             PCIT,        & ! Cloud ice   conc. at t
@@ -287,19 +222,19 @@ REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) &
                             ZRI, ZRI_IN,  &
                             Z_SIGS, Z_SRCS, &
                             ZW_MF, &
-                            ZCND, ZS, ZVEC1,ZDUM
+                            ZCND, ZS, ZVEC1, ZDUM
 REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2)) :: ZSIGQSAT2D
 !
 INTEGER, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) :: IVEC1
 !
-INTEGER                  :: IRESP      ! Return code of FM routines
+!INTEGER                  :: IRESP      ! Return code of FM routines
 INTEGER                  :: IIU,IJU,IKU! dimensions of dummy arrays
 INTEGER                  :: IKB        ! K index value of the first inner mass point
 INTEGER                  :: IKE        ! K index value of the last inner mass point
 INTEGER                  :: IIB,IJB    ! Horz index values of the first inner mass points
 INTEGER                  :: IIE,IJE    ! Horz index values of the last inner mass points
 INTEGER                  :: JITER,ITERMAX  ! iterative loop for first order adjustment
-INTEGER                  :: ILUOUT     ! Logical unit of output listing 
+!INTEGER                  :: ILUOUT     ! Logical unit of output listing 
 !
 INTEGER                           :: ISIZE
 LOGICAL                           :: G_SIGMAS, GUSERI
@@ -310,26 +245,34 @@ integer :: idx
 integer :: JI, JJ, JK, jl
 INTEGER                           :: JMOD, JMOD_IFN, JMOD_IMM
 !
-TYPE(TFIELDMETADATA)     :: TZFIELD
+!!$TYPE(TFIELDMETADATA)     :: TZFIELD
+!
+INTEGER :: ISV_LIMA_NC
+INTEGER :: ISV_LIMA_CCN_FREE
+INTEGER :: ISV_LIMA_CCN_ACTI
+INTEGER :: ISV_LIMA_SCAVMASS
+INTEGER :: ISV_LIMA_NI
+INTEGER :: ISV_LIMA_IFN_FREE
+INTEGER :: ISV_LIMA_IFN_NUCL
+INTEGER :: ISV_LIMA_IMM_NUCL
 !
 !-------------------------------------------------------------------------------
 !
 !*       1.     PRELIMINARIES
 !               -------------
 !
-ILUOUT = TLUOUT%NLU
+ISV_LIMA_NC       = NSV_LIMA_NC       - NSV_LIMA_BEG + 1
+ISV_LIMA_CCN_FREE = NSV_LIMA_CCN_FREE - NSV_LIMA_BEG + 1
+ISV_LIMA_CCN_ACTI = NSV_LIMA_CCN_ACTI - NSV_LIMA_BEG + 1
+ISV_LIMA_SCAVMASS = NSV_LIMA_SCAVMASS - NSV_LIMA_BEG + 1
+ISV_LIMA_NI       = NSV_LIMA_NI       - NSV_LIMA_BEG + 1
+ISV_LIMA_IFN_FREE = NSV_LIMA_IFN_FREE - NSV_LIMA_BEG + 1
+ISV_LIMA_IFN_NUCL = NSV_LIMA_IFN_NUCL - NSV_LIMA_BEG + 1
+ISV_LIMA_IMM_NUCL = NSV_LIMA_IMM_NUCL - NSV_LIMA_BEG + 1
 !
-IIU = SIZE(PEXNREF,1)
-IJU = SIZE(PEXNREF,2)
-IKU = SIZE(PEXNREF,3)
-IIB = 1 + JPHEXT
-IIE = SIZE(PRHODJ,1) - JPHEXT
-IJB = 1 + JPHEXT
-IJE = SIZE(PRHODJ,2) - JPHEXT
-IKB = 1 + JPVEXT
-IKE = SIZE(PRHODJ,3) - JPVEXT
+!ILUOUT = TLUOUT%NLU
 !
-ZEPS= XMV / XMD
+ZEPS= CST%XMV / CST%XMD
 !
 IF (OSUBG_COND) THEN
   ITERMAX=1
@@ -363,6 +306,8 @@ PRST(:,:,:) = 0.
 PRSS(:,:,:) = 0.
 PRGT(:,:,:) = 0.
 PRGS(:,:,:) = 0.
+PRHT(:,:,:) = 0.
+PRHS(:,:,:) = 0.
 !
 IF ( KRR .GE. 2 ) PRCT(:,:,:) = PRS(:,:,:,2)*PTSTEP
 IF ( KRR .GE. 2 ) PRCS(:,:,:) = PRS(:,:,:,2)
@@ -374,6 +319,8 @@ IF ( KRR .GE. 5 ) PRST(:,:,:) = PRT(:,:,:,5)
 IF ( KRR .GE. 5 ) PRSS(:,:,:) = PRS(:,:,:,5) 
 IF ( KRR .GE. 6 ) PRGT(:,:,:) = PRT(:,:,:,6)
 IF ( KRR .GE. 6 ) PRGS(:,:,:) = PRS(:,:,:,6)
+IF ( KRR .GE. 7 ) PRHT(:,:,:) = PRT(:,:,:,7)
+IF ( KRR .GE. 7 ) PRHS(:,:,:) = PRS(:,:,:,7)
 !
 ! Prepare 3D number concentrations
 PCCT(:,:,:) = 0.
@@ -381,68 +328,68 @@ PCIT(:,:,:) = 0.
 PCCS(:,:,:) = 0.
 ! PCIS(:,:,:) = 0.
 !
-IF ( LWARM .AND. NMOM_C.GE.2 ) PCCT(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC)*PTSTEP
-IF ( LCOLD .AND. NMOM_I.GE.2 ) PCIT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NI)
+IF ( NMOM_C.GE.2 ) PCCT(:,:,:) = PSVS(:,:,:,ISV_LIMA_NC)*PTSTEP
+IF ( NMOM_I.GE.2 ) PCIT(:,:,:) = PSVT(:,:,:,ISV_LIMA_NI)
 !
-IF ( LWARM .AND. NMOM_C.GE.2 ) PCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC)
-! IF ( LCOLD .AND. NMOM_I.GE.2 ) PCIS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI)
+IF ( NMOM_C.GE.2 ) PCCS(:,:,:) = PSVS(:,:,:,ISV_LIMA_NC)
+! IF (  NMOM_I.GE.2 ) PCIS(:,:,:) = PSVS(:,:,:,ISV_LIMA_NI)
 !
-IF ( LSCAV .AND. LAERO_MASS ) PMAS(:,:,:) = PSVS(:,:,:,NSV_LIMA_SCAVMASS)
+IF ( LSCAV .AND. LAERO_MASS ) PMAS(:,:,:) = PSVS(:,:,:,ISV_LIMA_SCAVMASS)
 ! 
-IF ( LWARM .AND. NMOD_CCN.GE.1 ) THEN
+IF ( NMOM_C.GE.1 .AND. NMOD_CCN.GE.1 ) THEN
    ALLOCATE( PNFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_CCN) )
    ALLOCATE( PNAS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_CCN) )
    ALLOCATE( PNFT(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_CCN) )
    ALLOCATE( PNAT(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_CCN) )
-   PNFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1)
-   PNAS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1)
-   PNFT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1)*PTSTEP
-   PNAT(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1)*PTSTEP
+   PNFS(:,:,:,:) = PSVS(:,:,:,ISV_LIMA_CCN_FREE:ISV_LIMA_CCN_FREE+NMOD_CCN-1)
+   PNAS(:,:,:,:) = PSVS(:,:,:,ISV_LIMA_CCN_ACTI:ISV_LIMA_CCN_ACTI+NMOD_CCN-1)
+   PNFT(:,:,:,:) = PSVS(:,:,:,ISV_LIMA_CCN_FREE:ISV_LIMA_CCN_FREE+NMOD_CCN-1)*PTSTEP
+   PNAT(:,:,:,:) = PSVS(:,:,:,ISV_LIMA_CCN_ACTI:ISV_LIMA_CCN_ACTI+NMOD_CCN-1)*PTSTEP
 END IF
 !
-! IF ( LCOLD .AND. NMOD_IFN .GE. 1 ) THEN
+! IF ( NMOM_I.GE.1 .AND. NMOD_IFN .GE. 1 ) THEN
 !    ALLOCATE( PIFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_IFN) )
 !    ALLOCATE( PINS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_IFN) )
-!    PIFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1)
-!    PINS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1)
+!    PIFS(:,:,:,:) = PSVS(:,:,:,ISV_LIMA_IFN_FREE:ISV_LIMA_IFN_FREE+NMOD_IFN-1)
+!    PINS(:,:,:,:) = PSVS(:,:,:,ISV_LIMA_IFN_NUCL:ISV_LIMA_IFN_NUCL+NMOD_IFN-1)
 ! END IF
 !
 ! IF ( NMOD_IMM .GE. 1 ) THEN
 !    ALLOCATE( PNIS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_IMM) )
-!    PNIS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1)
+!    PNIS(:,:,:,:) = PSVS(:,:,:,ISV_LIMA_IMM_NUCL:ISV_LIMA_IMM_NUCL+NMOD_IMM-1)
 ! END IF
 !
 !
-if ( nbumod == kmi .and. lbu_enable ) then
-  if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'CEDS', pths(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_rv ) call Budget_store_init( tbudgets(NBUDGET_RV), 'CEDS', prvs(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_rc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'CEDS', prcs(:, :, :) * prhodj(:, :, :) )
+if ( nbumod == kmi .and. BUCONF%lbu_enable ) then
+  if ( BUCONF%lbudget_th ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_TH), 'CEDS', pths(:, :, :) * prhodj(:, :, :) )
+  if ( BUCONF%lbudget_rv ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RV), 'CEDS', prvs(:, :, :) * prhodj(:, :, :) )
+  if ( BUCONF%lbudget_rc ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RC), 'CEDS', prcs(:, :, :) * prhodj(:, :, :) )
   !Remark: PRIS is not modified but source term kept for better coherence with lima_adjust and lima_notadjust
-  if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'CEDS', pris(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_sv ) then
-    if ( lwarm .and. nmom_c.ge.2) &
-      call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'CEDS', pccs(:, :, :) * prhodj(:, :, :) )
+  if ( BUCONF%lbudget_ri ) call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_RI), 'CEDS', pris(:, :, :) * prhodj(:, :, :) )
+  if ( BUCONF%lbudget_sv ) then
+    if ( nmom_c.ge.2) &
+      call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'CEDS', pccs(:, :, :) * prhodj(:, :, :) )
     if ( lscav .and. laero_mass ) &
-      call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_scavmass), 'CEDS', pmas(:, :, :) * prhodj(:, :, :) )
-    if ( lwarm ) then
+      call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_scavmass), 'CEDS', pmas(:, :, :) * prhodj(:, :, :) )
+    if ( nmom_c.ge.1 ) then
       do jl = 1, nmod_ccn
         idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_free - 1 + jl
-        call Budget_store_init( tbudgets(idx), 'CEDS', pnfs(:, :, :, jl) * prhodj(:, :, :) )
+        call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'CEDS', pnfs(:, :, :, jl) * prhodj(:, :, :) )
         idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_acti - 1 + jl
-        call Budget_store_init( tbudgets(idx), 'CEDS', pnas(:, :, :, jl) * prhodj(:, :, :) )
+        call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'CEDS', pnas(:, :, :, jl) * prhodj(:, :, :) )
       end do
     end if
-!     if ( lcold ) then
-!       call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CEDS', pcis(:, :, :) * prhodj(:, :, :) )
+!     if ( nmom_i.ge.2 ) then
+!       call BUDGET_STORE_INIT_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CEDS', pcis(:, :, :) * prhodj(:, :, :) )
 !       do jl = 1, nmod_ifn
 !         idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_free - 1 + jl
-!         call Budget_store_init( tbudgets(idx), 'CEDS', pifs(:, :, :, jl) * prhodj(:, :, :) )
+!         call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'CEDS', pifs(:, :, :, jl) * prhodj(:, :, :) )
 !         idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl - 1 + jl
-!         call Budget_store_init( tbudgets(idx), 'CEDS', pins(:, :, :, jl) * prhodj(:, :, :) )
+!         call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'CEDS', pins(:, :, :, jl) * prhodj(:, :, :) )
 !       end do
 !       do jl = 1, nmod_imm
 !         idx = NBUDGET_SV1 - 1 + nsv_lima_imm_nucl - 1 + jl
-!         call Budget_store_init( tbudgets(idx), 'CEDS', pnis(:, :, :, jl) * prhodj(:, :, :) )
+!         call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'CEDS', pnis(:, :, :, jl) * prhodj(:, :, :) )
 !       end do
 !     end if
   end if
@@ -457,11 +404,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(:,:,:)
@@ -469,7 +416,7 @@ END WHERE
 !
 !*       2.2    estimate the Exner function at t+1
 !
-ZEXNS(:,:,:) = ( PPABSTT(:,:,:) / XP00 ) ** (XRD/XCPD)  
+ZEXNS(:,:,:) = ( PPABSTT(:,:,:) / CST%XP00 ) ** (CST%XRD/CST%XCPD)  
 !
 !    beginning of the iterative loop
 !
@@ -482,15 +429,15 @@ DO JITER =1,ITERMAX
 !
 !*       2.4    compute the specific heat for moist air (Cph) at t+1
 !
-   ZCPH(:,:,:) = XCPD + XCPV  *ZDT*   PRVS(:,:,:)                             &
-                      + XCL   *ZDT* ( PRCS(:,:,:) + PRRS(:,:,:) )             &
-                      + XCI   *ZDT* ( PRIS(:,:,:) + PRSS(:,:,:) + PRGS(:,:,:) )
+   ZCPH(:,:,:) = CST%XCPD + CST%XCPV  *ZDT*   PRVS(:,:,:)                             &
+                      + CST%XCL *ZDT* ( PRCS(:,:,:) + PRRS(:,:,:) )             &
+                      + CST%XCI *ZDT* ( PRIS(:,:,:) + PRSS(:,:,:) + PRGS(:,:,:) + PRHS(:,:,:) )
 !
 !*       2.5    compute the latent heat of vaporization Lv(T*) at t+1
 !               and of sublimation Ls(T*) at t+1
 !
-   ZLV(:,:,:) = XLVTT + ( XCPV - XCL ) * ( ZT(:,:,:) -XTT )
-   ZLS(:,:,:) = XLSTT + ( XCPV - XCI ) * ( ZT(:,:,:) -XTT )
+   ZLV(:,:,:) = CST%XLVTT + ( CST%XCPV - CST%XCL ) * ( ZT(:,:,:) -CST%XTT )
+   ZLS(:,:,:) = CST%XLSTT + ( CST%XCPV - CST%XCI ) * ( ZT(:,:,:) -CST%XTT )
 !
 !
 !-------------------------------------------------------------------------------
@@ -498,12 +445,10 @@ DO JITER =1,ITERMAX
 !*       3.     FIRST ORDER SUBGRID CONDENSATION SCHEME
 !               ---------------------------------------
 !
-   ZRV=PRVS*PTSTEP
-   ZRC=PRCS*PTSTEP
+   ZRV_IN=PRVS*PTSTEP
    ZRV2=PRVT
+   ZRC_IN=PRCS*PTSTEP
    ZRC2=PRCT
-   ZRV_IN=ZRV
-   ZRC_IN=ZRC
    IF (NMOM_I.EQ.1) THEN
       ZRI_IN=PRIS*PTSTEP
       GUSERI=.TRUE.
@@ -533,7 +478,7 @@ DO JITER =1,ITERMAX
    IF (OSUBG_COND .AND. NMOM_C.GE.2 .AND. LACTI) THEN
       PSRCS=Z_SRCS
       ZW_MF=0.
-      CALL LIMA_CCN_ACTIVATION (TPFILE,                          &
+      CALL LIMA_CCN_ACTIVATION (CST,                          &
            PRHODREF, PEXNREF, PPABST, ZT2, PDTHRAD, PW_NU+ZW_MF, &
            PTHT, ZRV2, ZRC2, PCCT, PRRT, PNFT, PNAT,             &
            PCLDFR                                                )      
@@ -564,7 +509,7 @@ ELSE
                ZVEC1(JI,JJ,JK) = MAX( 1.0001, MIN( FLOAT(NAHEN)-0.0001, XAHENINTP1 * ZT(JI,JJ,JK) + XAHENINTP2 ) )
                IVEC1(JI,JJ,JK) = INT( ZVEC1(JI,JJ,JK) )
                ZVEC1(JI,JJ,JK) = ZVEC1(JI,JJ,JK) - FLOAT( IVEC1(JI,JJ,JK) )
-               ZW(JI,JJ,JK)=EXP( XALPW - XBETAW/ZT(JI,JJ,JK) - XGAMW*ALOG(ZT(JI,JJ,JK) ) ) ! es_w
+               ZW(JI,JJ,JK)=EXP( CST%XALPW - CST%XBETAW/ZT(JI,JJ,JK) - CST%XGAMW*ALOG(ZT(JI,JJ,JK) ) ) ! es_w
                ZW(JI,JJ,JK)=ZEPS*ZW(JI,JJ,JK) / ( PPABST(JI,JJ,JK)-ZW(JI,JJ,JK) ) 
                ZS(JI,JJ,JK) = PRVS(JI,JJ,JK)*PTSTEP / ZW(JI,JJ,JK) - 1.
                ZW(JI,JJ,JK) = PCCS(JI,JJ,JK)*PTSTEP/(XLBC*PCCS(JI,JJ,JK)/PRCS(JI,JJ,JK))**XLBEXC
@@ -652,7 +597,7 @@ IF (NMOM_C .GE. 2) THEN
 END IF
 !
 ZW1(:,:,:) = 0.
-IF (LWARM .AND. NMOD_CCN.GE.1) ZW1(:,:,:) = SUM(PNAS,DIM=4)
+IF (NMOM_C.GE.1 .AND. NMOD_CCN.GE.1) ZW1(:,:,:) = SUM(PNAS,DIM=4)
 ZW (:,:,:) = MIN( ZW(:,:,:), ZW1(:,:,:) )
 ZW2(:,:,:) = 0.
 WHERE ( ZW(:,:,:) > 0. )
@@ -660,7 +605,7 @@ WHERE ( ZW(:,:,:) > 0. )
    ZW2(:,:,:) = ZW(:,:,:) / ZW1(:,:,:)
 ENDWHERE
 !
-IF (LWARM .AND. NMOD_CCN.GE.1) THEN
+IF (NMOM_C.GE.1 .AND. NMOD_CCN.GE.1) THEN
    DO JMOD = 1, NMOD_CCN
       PNFS(:,:,:,JMOD) = PNFS(:,:,:,JMOD) +                           &
            ZMASK(:,:,:) * PNAS(:,:,:,JMOD) * ZW2(:,:,:)
@@ -681,20 +626,20 @@ ELSE
    WHERE(PICEFR(:,:,:)<1.E-10 .AND. PRIT(:,:,:)>XRTMIN(4) .AND. PCIT(:,:,:)>XCTMIN(4)) PICEFR(:,:,:)=1.
 END IF
 !
-IF ( tpfile%lopened ) THEN
-   TZFIELD = TFIELDMETADATA(   &
-     CMNHNAME   = 'NEB',       &
-     CSTDNAME   = '',          &
-     CLONGNAME  = 'NEB',       &
-     CUNITS     = '1',         &
-     CDIR       = 'XY',        &
-     CCOMMENT   = 'X_Y_Z_NEB', &
-     NGRID      = 1,           &
-     NTYPE      = TYPEREAL,    &
-     NDIMS      = 3,           &
-     LTIMEDEP   = .TRUE.       )
-   CALL IO_Field_write(TPFILE,TZFIELD,PCLDFR)
-END IF
+!!$IF ( tpfile%lopened ) THEN
+!!$   TZFIELD = TFIELDMETADATA(   &
+!!$     CMNHNAME   = 'NEB',       &
+!!$     CSTDNAME   = '',          &
+!!$     CLONGNAME  = 'NEB',       &
+!!$     CUNITS     = '1',         &
+!!$     CDIR       = 'XY',        &
+!!$     CCOMMENT   = 'X_Y_Z_NEB', &
+!!$     NGRID      = 1,           &
+!!$     NTYPE      = TYPEREAL,    &
+!!$     NDIMS      = 3,           &
+!!$     LTIMEDEP   = .TRUE.       )
+!!$   CALL IO_Field_write(TPFILE,TZFIELD,PCLDFR)
+!!$END IF
 !
 !
 !*       6.  SAVE CHANGES IN PRS AND PSVS
@@ -707,83 +652,84 @@ IF ( KRR .GE. 3 ) PRS(:,:,:,3) = PRRS(:,:,:)
 IF ( KRR .GE. 4 ) PRS(:,:,:,4) = PRIS(:,:,:)
 IF ( KRR .GE. 5 ) PRS(:,:,:,5) = PRSS(:,:,:)
 IF ( KRR .GE. 6 ) PRS(:,:,:,6) = PRGS(:,:,:)
+IF ( KRR .GE. 7 ) PRS(:,:,:,7) = PRHS(:,:,:)
 !
 ! Prepare 3D number concentrations
 !
-IF ( LWARM .AND. NMOM_C.GE.2 ) PSVS(:,:,:,NSV_LIMA_NC) = PCCS(:,:,:)
-! IF ( LCOLD .AND. NMOM_I.GE.2 ) PSVS(:,:,:,NSV_LIMA_NI) = PCIS(:,:,:)
+IF ( NMOM_C.GE.2 ) PSVS(:,:,:,ISV_LIMA_NC) = PCCS(:,:,:)
+! IF ( NMOM_I.GE.2 ) PSVS(:,:,:,ISV_LIMA_NI) = PCIS(:,:,:)
 !
-IF ( LSCAV .AND. LAERO_MASS ) PSVS(:,:,:,NSV_LIMA_SCAVMASS) = PMAS(:,:,:)
+IF ( LSCAV .AND. LAERO_MASS ) PSVS(:,:,:,ISV_LIMA_SCAVMASS) = PMAS(:,:,:)
 ! 
-IF ( LWARM .AND. NMOD_CCN .GE. 1 ) THEN
-   PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) = PNFS(:,:,:,:)
-   PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1) = PNAS(:,:,:,:)
+IF ( NMOM_C.GE.1 .AND. NMOD_CCN.GE.1 ) THEN
+   PSVS(:,:,:,ISV_LIMA_CCN_FREE:ISV_LIMA_CCN_FREE+NMOD_CCN-1) = PNFS(:,:,:,:)
+   PSVS(:,:,:,ISV_LIMA_CCN_ACTI:ISV_LIMA_CCN_ACTI+NMOD_CCN-1) = PNAS(:,:,:,:)
 END IF
 !
-! IF ( LCOLD .AND. NMOD_IFN .GE. 1 ) THEN
-!    PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1) = PIFS(:,:,:,:)
-!    PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1) = PINS(:,:,:,:)
+! IF ( NMOM_I.GE.1 .AND. NMOD_IFN .GE. 1 ) THEN
+!    PSVS(:,:,:,ISV_LIMA_IFN_FREE:ISV_LIMA_IFN_FREE+NMOD_IFN-1) = PIFS(:,:,:,:)
+!    PSVS(:,:,:,ISV_LIMA_IFN_NUCL:ISV_LIMA_IFN_NUCL+NMOD_IFN-1) = PINS(:,:,:,:)
 ! END IF
 !
-! IF ( LCOLD .AND. NMOD_IMM .GE. 1 ) THEN
-!    PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1) = PNIS(:,:,:,:)
+! IF ( NMOM_I.GE.1 .AND. NMOD_IMM .GE. 1 ) THEN
+!    PSVS(:,:,:,ISV_LIMA_IMM_NUCL:ISV_LIMA_IMM_NUCL+NMOD_IMM-1) = PNIS(:,:,:,:)
 ! END IF
 !
 ! write SSI in LFI
 !
-IF ( tpfile%lopened ) THEN
-   ZT(:,:,:) = ( PTHS(:,:,:) * ZDT ) * ZEXNS(:,:,:)
-   ZW(:,:,:) = EXP( XALPI - XBETAI/ZT(:,:,:) - XGAMI*ALOG(ZT(:,:,:) ) )
-   ZW1(:,:,:)= PPABSTT(:,:,:)
-   ZW(:,:,:) = PRVT(:,:,:)*( ZW1(:,:,:)-ZW(:,:,:) ) / ( (XMV/XMD) * ZW(:,:,:) ) - 1.0
-   
-   TZFIELD = TFIELDMETADATA(   &
-     CMNHNAME   = 'SSI',       &
-     CSTDNAME   = '',          &
-     CLONGNAME  = 'SSI',       &
-     CUNITS     = '',          &
-     CDIR       = 'XY',        &
-     CCOMMENT   = 'X_Y_Z_SSI', &
-     NGRID      = 1,           &
-     NTYPE      = TYPEREAL,    &
-     NDIMS      = 3,           &
-     LTIMEDEP   = .TRUE.       )
-   CALL IO_Field_write(TPFILE,TZFIELD,ZW)
-END IF
+!!$IF ( tpfile%lopened ) THEN
+!!$   ZT(:,:,:) = ( PTHS(:,:,:) * ZDT ) * ZEXNS(:,:,:)
+!!$   ZW(:,:,:) = EXP( XALPI - XBETAI/ZT(:,:,:) - XGAMI*ALOG(ZT(:,:,:) ) )
+!!$   ZW1(:,:,:)= PPABSTT(:,:,:)
+!!$   ZW(:,:,:) = PRVT(:,:,:)*( ZW1(:,:,:)-ZW(:,:,:) ) / ( (XMV/XMD) * ZW(:,:,:) ) - 1.0
+!!$   
+!!$   TZFIELD = TFIELDMETADATA(   &
+!!$     CMNHNAME   = 'SSI',       &
+!!$     CSTDNAME   = '',          &
+!!$     CLONGNAME  = 'SSI',       &
+!!$     CUNITS     = '',          &
+!!$     CDIR       = 'XY',        &
+!!$     CCOMMENT   = 'X_Y_Z_SSI', &
+!!$     NGRID      = 1,           &
+!!$     NTYPE      = TYPEREAL,    &
+!!$     NDIMS      = 3,           &
+!!$     LTIMEDEP   = .TRUE.       )
+!!$   CALL IO_Field_write(TPFILE,TZFIELD,ZW)
+!!$END IF
 !
 !
 !*       7.  STORE THE BUDGET TERMS
 !            ----------------------
 !
-if ( nbumod == kmi .and. lbu_enable ) then
-  if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'CEDS', pths(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_rv ) call Budget_store_end( tbudgets(NBUDGET_RV), 'CEDS', prvs(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_rc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'CEDS', prcs(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'CEDS', pris(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_sv ) then
-    if ( lwarm .and. nmom_c.ge.2) &
-      call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'CEDS', pccs(:, :, :) * prhodj(:, :, :) )
+if ( nbumod == kmi .and. BUCONF%lbu_enable ) then
+  if ( BUCONF%lbudget_th ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_TH), 'CEDS', pths(:, :, :) * prhodj(:, :, :) )
+  if ( BUCONF%lbudget_rv ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RV), 'CEDS', prvs(:, :, :) * prhodj(:, :, :) )
+  if ( BUCONF%lbudget_rc ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RC), 'CEDS', prcs(:, :, :) * prhodj(:, :, :) )
+  if ( BUCONF%lbudget_ri ) call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_RI), 'CEDS', pris(:, :, :) * prhodj(:, :, :) )
+  if ( BUCONF%lbudget_sv ) then
+    if ( nmom_c.ge.2) &
+      call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_nc), 'CEDS', pccs(:, :, :) * prhodj(:, :, :) )
     if ( lscav .and. laero_mass ) &
-      call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_scavmass), 'CEDS', pmas(:, :, :) * prhodj(:, :, :) )
-    if ( lwarm ) then
+      call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_scavmass), 'CEDS', pmas(:, :, :) * prhodj(:, :, :) )
+    if ( nmom_c.ge.1 ) then
       do jl = 1, nmod_ccn
         idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_free - 1 + jl
-        call Budget_store_end( tbudgets(idx), 'CEDS', pnfs(:, :, :, jl) * prhodj(:, :, :) )
+        call BUDGET_STORE_END_PHY(D, TBUDGETS(idx), 'CEDS', pnfs(:, :, :, jl) * prhodj(:, :, :) )
         idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_acti - 1 + jl
-        call Budget_store_end( tbudgets(idx), 'CEDS', pnas(:, :, :, jl) * prhodj(:, :, :) )
+        call BUDGET_STORE_END_PHY(D, TBUDGETS(idx), 'CEDS', pnas(:, :, :, jl) * prhodj(:, :, :) )
       end do
     end if
-!     if ( lcold ) then
-!       call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CEDS', pcis(:, :, :) * prhodj(:, :, :) )
+!     if ( nmom_i.ge.2 ) then
+!       call BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CEDS', pcis(:, :, :) * prhodj(:, :, :) )
 !       do jl = 1, nmod_ifn
 !         idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_free - 1 + jl
-!         call Budget_store_end( tbudgets(idx), 'CEDS', pifs(:, :, :, jl) * prhodj(:, :, :) )
+!         call BUDGET_STORE_END_PHY(D, TBUDGETS(idx), 'CEDS', pifs(:, :, :, jl) * prhodj(:, :, :) )
 !         idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl - 1 + jl
-!         call Budget_store_end( tbudgets(idx), 'CEDS', pins(:, :, :, jl) * prhodj(:, :, :) )
+!         call BUDGET_STORE_END_PHY(D, TBUDGETS(idx), 'CEDS', pins(:, :, :, jl) * prhodj(:, :, :) )
 !       end do
 !       do jl = 1, nmod_imm
 !         idx = NBUDGET_SV1 - 1 + nsv_lima_imm_nucl - 1 + jl
-!         call Budget_store_init( tbudgets(idx), 'CEDS', pnis(:, :, :, jl) * prhodj(:, :, :) )
+!         call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'CEDS', pnis(:, :, :, jl) * prhodj(:, :, :) )
 !       end do
 !     end if
   end if
diff --git a/src/arome/micro/lima_precip_scavenging.F90 b/src/common/micro/lima_precip_scavenging.F90
similarity index 85%
rename from src/arome/micro/lima_precip_scavenging.F90
rename to src/common/micro/lima_precip_scavenging.F90
index ad63b968348186447f7a3c7aaa39900ad8345810..acf263d021550e63a1d6f791bd9a0955b6630e4d 100644
--- a/src/arome/micro/lima_precip_scavenging.F90
+++ b/src/common/micro/lima_precip_scavenging.F90
@@ -1,48 +1,13 @@
-!      ##################################
-       MODULE MODI_LIMA_PRECIP_SCAVENGING
-!      ##################################
-!
-INTERFACE
-   SUBROUTINE LIMA_PRECIP_SCAVENGING (HCLOUD, KLUOUT, KTCOUNT, PTSTEP,        &
-                                      PRRT, PRHODREF, PRHODJ, PZZ,            & 
-                                      PPABST, PTHT, PSVT, PRSVS, PINPAP, &
-                            YDDDH, YDLDDH, YDMDDH )
-!
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-CHARACTER(LEN=4),       INTENT(IN)    :: HCLOUD   ! cloud paramerization
-INTEGER,                INTENT(IN)    :: KLUOUT   ! unit for output listing
-INTEGER,                INTENT(IN)    :: KTCOUNT  ! iteration count
-REAL,                   INTENT(IN)    :: PTSTEP   ! Double timestep except 
-                                                  ! for the first time step
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PRRT     ! Rain mixing ratio at t
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PRHODREF ! Air Density [kg/m**3]
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PRHODJ   ! Dry Density [kg]
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PZZ      ! Altitude
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PPABST   ! Absolute pressure at t
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PTHT     ! Theta at time t 
-!
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT   ! Particle Concentration [kg-1]
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRSVS  ! Total Number Scavenging Rate
-!
-REAL, DIMENSION(:,:),   INTENT(INOUT) :: PINPAP
-!
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-!
-END SUBROUTINE LIMA_PRECIP_SCAVENGING
-END INTERFACE
-END MODULE MODI_LIMA_PRECIP_SCAVENGING
-!
+!MNH_LIC Copyright 2013-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.
+!-----------------------------------------------------------------
 !########################################################################
-   SUBROUTINE LIMA_PRECIP_SCAVENGING (HCLOUD, KLUOUT, KTCOUNT, PTSTEP,        &
-                                      PRRT, PRHODREF, PRHODJ, PZZ,            &
-                                      PPABST, PTHT, PSVT, PRSVS, PINPAP , &
-                            YDDDH, YDLDDH, YDMDDH)
+   SUBROUTINE LIMA_PRECIP_SCAVENGING (D, CST, BUCONF, TBUDGETS, KBUDGETS, &
+                                      HCLOUD, KLUOUT, KTCOUNT, PTSTEP,    &
+                                      PRRT, PRHODREF, PRHODJ, PZZ,        &
+                                      PPABST, PTHT, PSVT, PRSVS, PINPAP )
 !########################################################################x
 !
 !!    PURPOSE
@@ -100,39 +65,48 @@ END MODULE MODI_LIMA_PRECIP_SCAVENGING
 !!    -------------
 !!      Original             ??/??/13 
 !!
+!  P. Wautelet 28/05/2018: corrected truncated integer division (3/2 -> 1.5)
+!  P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function
+!  P. Wautelet 28/05/2019: move COUNTJV function to tools.f90
+!  P. Wautelet    03/2020: use the new data structures and subroutines for budgets
+!  P. Wautelet 03/06/2020: bugfix: correct array starts for PSVT and PRSVS
+!  P. Wautelet 11/02/2021: bugfix: ZRTMIN was of wrong size (replaced by a scalar)
+!  P. Wautelet 11/02/2021: budgets: add missing term SCAV for NSV_LIMA_SCAVMASS budget
 !-------------------------------------------------------------------------------
 !
 !*                  0.DECLARATIONS          
 !                   --------------
 !
+USE MODD_DIMPHYEX,        ONLY: DIMPHYEX_t
+use modd_budget,          only: TBUDGETDATA, TBUDGETCONF_t, NBUDGET_SV1
+USE MODD_CST,             ONLY: CST_t
 USE MODD_NSV
-USE MODD_CST
 USE MODD_PARAMETERS
+USE MODD_PARAM_LIMA,      ONLY: NMOD_IFN, NSPECIE, XFRAC,                         &
+                                XMDIAM_IFN, XSIGMA_IFN, XRHO_IFN,                 &
+                                NMOD_CCN, XR_MEAN_CCN, XLOGSIG_CCN, XRHO_CCN,     &
+                                XALPHAR, XNUR,                                    &
+                                LAERO_MASS, NDIAMR, NDIAMP, XT0SCAV, XTREF, XNDO, &
+                                XMUA0, XT_SUTH_A, XMFPA0, XVISCW, XRHO00,         &
+                                XRTMIN, XCTMIN
+USE MODD_PARAM_LIMA_WARM, ONLY: XCR, XDR
+
+use mode_budget,          only: Budget_store_init_phy, Budget_store_end_phy
+use mode_tools,           only: Countjv
+
 USE MODI_GAMMA
-USE MODI_LIMA_FUNCTIONS
-!
-USE DDH_MIX, ONLY  : TYP_DDH
-USE YOMLDDH, ONLY  : TLDDH
-USE YOMMDDH, ONLY  : TMDDH
-!
-! Previous versions by S. Berthet were compatible with all schemes
-! Here : Compatibility with LIMA only
-USE MODD_PARAM_LIMA,      ONLY : NMOD_IFN, NSPECIE, XFRAC,                         &
-                                 XMDIAM_IFN, XSIGMA_IFN, XRHO_IFN,                 &
-                                 NMOD_CCN, XR_MEAN_CCN, XLOGSIG_CCN, XRHO_CCN,     &
-                                 XALPHAR, XNUR,                                    &
-                                 LAERO_MASS, NDIAMR, NDIAMP, XT0SCAV, XTREF, XNDO, &
-                                 XMUA0, XT_SUTH_A, XMFPA0, XVISCW, XRHO00,         &
-                                 XRTMIN, XCTMIN
-USE MODD_PARAM_LIMA_WARM, ONLY : XCR, XDR
-!
-USE MODD_BUDGET
-USE MODE_BUDGET, ONLY: BUDGET_DDH
-!
+USE MODE_LIMA_FUNCTIONS, ONLY: GAUHER, GAULAG
+
 IMPLICIT NONE
 !
 !*                 0.1 declarations of dummy arguments :
 !
+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
+!
 CHARACTER(LEN=4),       INTENT(IN)    :: HCLOUD   ! cloud paramerization
 INTEGER,                INTENT(IN)    :: KLUOUT   ! unit for output listing
 INTEGER,                INTENT(IN)    :: KTCOUNT  ! iteration count
@@ -151,10 +125,6 @@ REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRSVS  ! Total Number Scavenging Rate
 !
 REAL, DIMENSION(:,:),   INTENT(INOUT) :: PINPAP
 !
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-!
 !*       0.2   Declarations of local variables :
 !
 INTEGER :: IIB           !  Define the domain where is 
@@ -250,15 +220,32 @@ REAL, DIMENSION(:,:), ALLOCATABLE ::     &
                       ZVOLDR_INV            ! INV of Mean volumic Raindrop diameter [m]
 REAL               :: ZDENS_RATIO_SQRT 
 INTEGER :: SV_VAR, NM, JM
+integer :: idx
 REAL :: XMDIAMP 
 REAL :: XSIGMAP  
 REAL :: XRHOP   
 REAL :: XFRACP
 !
-!
+INTEGER :: ISV_LIMA_NR
+INTEGER :: ISV_LIMA_SCAVMASS
 !
 !------------------------------------------------------------------------------
-!
+ISV_LIMA_NR       = NSV_LIMA_NR       - NSV_LIMA_BEG + 1
+ISV_LIMA_SCAVMASS = NSV_LIMA_SCAVMASS - NSV_LIMA_BEG + 1
+
+if ( BUCONF%lbudget_sv ) then
+  do jl = 1, nmod_ccn
+    idx = nsv_lima_ccn_free - 1 + jl
+    call Budget_store_init_phy(D,  tbudgets(NBUDGET_SV1 - 1 + idx), 'SCAV', prsvs(:, :, :, idx) )
+  end do
+  do jl = 1, nmod_ifn
+    idx = nsv_lima_ifn_free - 1 + jl
+    call Budget_store_init_phy(D,  tbudgets(NBUDGET_SV1 - 1 + idx), 'SCAV', prsvs(:, :, :, idx) )
+  end do
+  if ( laero_mass ) then
+    call Budget_store_init_phy(D,  tbudgets(NBUDGET_SV1 - 1 + nsv_lima_scavmass), 'SCAV', prsvs(:, :, :, nsv_lima_scavmass) )
+  end if
+end if
 !
 !*       1.     PRELIMINARY COMPUTATIONS
 !   	        ------------------------
@@ -272,7 +259,7 @@ IKB=1+JPVEXT
 IKE=SIZE(PRHODREF,3) - JPVEXT
 !
 ! PCRT
-PCRT(:,:,:)=PSVT(:,:,:,NSV_LIMA_NR)
+PCRT(:,:,:)=PSVT(:,:,:,ISV_LIMA_NR)
 !
 ! Rain mask 
 GRAIN(:,:,:) = .FALSE.
@@ -303,19 +290,19 @@ ZSHAPE_FACTOR = GAMMA_X0D(XNUR+3./XALPHAR)/GAMMA_X0D(XNUR)
 !
 WHERE ( GRAIN(:,:,:) )
    !
-   ZT_3D(:,:,:)      = PTHT(:,:,:) * ( PPABST(:,:,:)/XP00 )**(XRD/XCPD)
+   ZT_3D(:,:,:)      = PTHT(:,:,:) * ( PPABST(:,:,:)/CST%XP00 )**(CST%XRD/CST%XCPD)
    ZCONCR_3D(:,:,:)  = PCRT(:,:,:) * PRHODREF(:,:,:)                    ![/m3]
    ! Sutherland law for viscosity of air
-   ZVISCA_3D(:,:,:)  = XMUA0*(ZT_3D(:,:,:)/XTREF)**(3/2)*(XTREF+XT_SUTH_A) &
+   ZVISCA_3D(:,:,:)  = XMUA0*(ZT_3D(:,:,:)/XTREF)**1.5*(XTREF+XT_SUTH_A) &
                                                         /(XT_SUTH_A+ZT_3D(:,:,:))
    ! Air mean free path
-   ZMFPA_3D(:,:,:)   = XMFPA0*(XP00*ZT_3D(:,:,:))/(PPABST(:,:,:)*XT0SCAV)           
+   ZMFPA_3D(:,:,:)   = XMFPA0*(CST%XP00*ZT_3D(:,:,:))/(PPABST(:,:,:)*XT0SCAV)           
    ! Viscosity ratio
    ZVISC_RATIO_3D(:,:,:) = ZVISCA_3D(:,:,:)/XVISCW   !!!!! inversé par rapport à orig. !
    ! Rain drops parameters
-   ZLAMBDAR_3D(:,:,:) = ( ((XPI/6.)*ZSHAPE_FACTOR*XRHOLW*ZCONCR_3D(:,:,:))  &
+   ZLAMBDAR_3D(:,:,:) = ( ((CST%XPI/6.)*ZSHAPE_FACTOR*CST%XRHOLW*ZCONCR_3D(:,:,:))  &
                           /(PRHODREF(:,:,:)*PRRT(:,:,:)) )**(1./3.)         ![/m]
-   FACTOR_3D(:,:,:) = XPI*0.25*ZCONCR_3D(:,:,:)*XCR*(XRHO00/PRHODREF(:,:,:))**(0.4)
+   FACTOR_3D(:,:,:) = CST%XPI*0.25*ZCONCR_3D(:,:,:)*XCR*(XRHO00/PRHODREF(:,:,:))**(0.4)
    !
 END WHERE
 !
@@ -351,11 +338,11 @@ DO JSV = 1, NMOD_CCN+NMOD_IFN
 !
    IF (JSV .LE. NMOD_CCN) THEN
       JMOD = JSV
-      SV_VAR = NSV_LIMA_CCN_FREE -1 + JMOD ! Variable number in PSVT
+      SV_VAR = NSV_LIMA_CCN_FREE - NSV_LIMA_BEG + JMOD ! Variable number in PSVT
       NM = 1                               ! Number of species (for IFN int. mixing)
    ELSE
       JMOD = JSV - NMOD_CCN
-      SV_VAR = NSV_LIMA_IFN_FREE -1 + JMOD
+      SV_VAR = NSV_LIMA_IFN_FREE - NSV_LIMA_BEG + JMOD
       NM = NSPECIE
    END IF
 !
@@ -459,7 +446,7 @@ DO JSV = 1, NMOD_CCN+NMOD_IFN
             ZKNUDSEN(:) = MIN( 20.,ZVOLDP(J1)/ZMFPA(:) )
             ZCUNSLIP(:,J1) = 1.0+2.0/ZKNUDSEN(:)*(1.257+0.4*EXP(-0.55*ZKNUDSEN(:)))
             ! Diffusion coefficient
-            ZDIFF(:,J1) = XBOLTZ*ZT(:)*ZCUNSLIP(:,J1)/(3.*XPI*ZVISCA(:)*ZVOLDP(J1))
+            ZDIFF(:,J1) = CST%XBOLTZ*ZT(:)*ZCUNSLIP(:,J1)/(3.*CST%XPI*ZVISCA(:)*ZVOLDP(J1))
             ! Schmidt number
             ZSC(:,J1)       = ZVISCA(:)/(ZRHODREF(:)*ZDIFF(:,J1))  
             ZSC_INV(:,J1)   = 1./ZSC(:,J1)
@@ -468,7 +455,7 @@ DO JSV = 1, NMOD_CCN+NMOD_IFN
             ! Characteristic Time Required for reaching terminal velocity 
             ZRELT(:,J1) = (ZVOLDP(J1)**2)*ZCUNSLIP(:,J1)*XRHOP/(18.*ZVISCA(:))
             ! Density number
-            ZDENS_RATIO = XRHOP/XRHOLW
+            ZDENS_RATIO = XRHOP/CST%XRHOLW
             ZDENS_RATIO_SQRT = SQRT(ZDENS_RATIO)
             ! Initialisation
             ZBC_SCAV_COEF(:,J1)=0.
@@ -477,7 +464,7 @@ DO JSV = 1, NMOD_CCN+NMOD_IFN
          !
             DO J2=1,NDIAMR
                ! Stokes number
-               ZST(:,J1,J2) = 2.*ZRELT(:,J1)*(ZFVELR(:,J2)-ZRELT(1,J1)*XG)          &
+               ZST(:,J1,J2) = 2.*ZRELT(:,J1)*(ZFVELR(:,J2)-ZRELT(1,J1)*CST%XG)          &
                                             *ZVOLDR_INV(:,J2)
                ! Size Ratio
                ZSIZE_RATIO(:,J1,J2) = ZVOLDP(J1)*ZVOLDR_INV(:,J2)
@@ -498,7 +485,7 @@ DO JSV = 1, NMOD_CCN+NMOD_IFN
             ! Total MASS Scavenging Rate of aerosol [kg.m**-3.s**-1]
             ZTOT_MASS_RATE(:) = ZTOT_MASS_RATE(:) +                                 &
                                 ZWEIGHTP(J1)*XFRACP*ZCONCP(:)*ZBC_SCAV_COEF(:,J1)   &
-                                *XPI/6.*XRHOP*(ZVOLDP(J1)**3)  
+                                *CST%XPI/6.*XRHOP*(ZVOLDP(J1)**3)  
          END DO
       ! End of the loop over the drops diameters
       !--------------------------------------------------------------------------
@@ -514,9 +501,9 @@ DO JSV = 1, NMOD_CCN+NMOD_IFN
             PTOT_MASS_RATE(:,:,:) = PTOT_MASS_RATE(:,:,:) +                         &
                  UNPACK(ZTOT_MASS_RATE(:), MASK=GSCAV(:,:,:), FIELD=0.0)
             CALL SCAV_MASS_SEDIMENTATION( HCLOUD, PTSTEP, KTCOUNT, PZZ, PRHODJ,     &
-                                      PRHODREF, PRRT, PSVT(:,:,:,NSV_LIMA_SCAVMASS),&
-                                      PRSVS(:,:,:,NSV_LIMA_SCAVMASS), PINPAP        )
-            PRSVS(:,:,:,NSV_LIMA_SCAVMASS)=PRSVS(:,:,:,NSV_LIMA_SCAVMASS) +         &
+                                      PRHODREF, PRRT, PSVT(:,:,:,ISV_LIMA_SCAVMASS),&
+                                      PRSVS(:,:,:,ISV_LIMA_SCAVMASS), PINPAP        )
+            PRSVS(:,:,:,ISV_LIMA_SCAVMASS)=PRSVS(:,:,:,ISV_LIMA_SCAVMASS) +         &
                              PTOT_MASS_RATE(:,:,:)*PRHODJ(:,:,:)/PRHODREF(:,:,:)
          END IF
       ENDDO
@@ -565,21 +552,19 @@ DO JSV = 1, NMOD_CCN+NMOD_IFN
    ENDIF
 ENDDO
 !
-IF (LBUDGET_SV) THEN
-   IF (NMOD_CCN.GE.1) THEN
-      DO JL=1, NMOD_CCN
-         CALL BUDGET_DDH ( PRSVS(:,:,:,NSV_LIMA_CCN_FREE+JL-1), &
-              12+NSV_LIMA_CCN_FREE+JL-1,'SCAV_BU_RSV',YDDDH, YDLDDH, YDMDDH) 
-      END DO
-   END IF
-   IF (NMOD_IFN.GE.1) THEN
-      DO JL=1, NMOD_IFN
-         CALL BUDGET_DDH ( PRSVS(:,:,:,NSV_LIMA_IFN_FREE+JL-1), &
-              12+NSV_LIMA_IFN_FREE+JL-1,'SCAV_BU_RSV',YDDDH, YDLDDH, YDMDDH) 
-      END DO
-   END IF
-END IF
-!
+if ( BUCONF%lbudget_sv ) then
+  do jl = 1, nmod_ccn
+    idx = nsv_lima_ccn_free - 1 + jl
+    call Budget_store_end_phy(D,  tbudgets(NBUDGET_SV1 - 1 + idx), 'SCAV', prsvs(:, :, :, idx) )
+  end do
+  do jl = 1, nmod_ifn
+    idx = nsv_lima_ifn_free - 1 + jl
+    call Budget_store_end_phy(D,  tbudgets(NBUDGET_SV1 - 1 + idx), 'SCAV', prsvs(:, :, :, idx) )
+  end do
+  if ( laero_mass ) then
+    call Budget_store_end_phy(D,  tbudgets(NBUDGET_SV1 - 1 + nsv_lima_scavmass), 'SCAV', prsvs(:, :, :, nsv_lima_scavmass) )
+  end if
+end if
 !------------------------------------------------------------------------------
 !
 !
@@ -683,7 +668,7 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZRRS,     & ! Rain water m.r. source
                                    ZRHODREF, & ! RHO Dry REFerence
                                    ZZW         ! Work array
 !
-REAL, DIMENSION(3)              :: ZRTMIN
+REAL                            :: ZRTMIN3
 !
 !
 REAL                            :: ZVTRMAX, ZDZMIN, ZT
@@ -716,7 +701,7 @@ firstcall : IF (GSFIRSTCALL) THEN
    ZDZMIN = MINVAL(PZZ(IIB:IIE,IJB:IJE,IKB+1:IKE+1)-PZZ(IIB:IIE,IJB:IJE,IKB:IKE))
    ISPLITR = 1
    SPLIT : DO
-      ZT = 2.* PTSTEP / FLOAT(ISPLITR)
+      ZT = 2.* PTSTEP / REAL(ISPLITR)
       IF ( ZT * ZVTRMAX / ZDZMIN .LT. 1.) EXIT SPLIT
       ISPLITR = ISPLITR + 1
    END DO SPLIT
@@ -728,10 +713,10 @@ END IF firstcall
 !*       2.2    time splitting loop initialization        
 !
 IF( (KTCOUNT==1) .AND. (CCONF=='START') ) THEN
-  ZTSPLITR = PTSTEP / FLOAT(ISPLITR)       ! Small time step
+  ZTSPLITR = PTSTEP / REAL(ISPLITR)       ! Small time step
   ZTSTEP   = PTSTEP                        ! Large time step
   ELSE
-  ZTSPLITR= 2. * PTSTEP / FLOAT(ISPLITR)
+  ZTSPLITR= 2. * PTSTEP / REAL(ISPLITR)
   ZTSTEP  = 2. * PTSTEP
 END IF
 !
@@ -740,11 +725,11 @@ END IF
 !  optimization by looking for locations where
 !  the precipitating fields are larger than a minimal value only !!!
 !
-ZRTMIN(:) = XRTMIN(:) / ZTSTEP
+ZRTMIN3 = XRTMIN(3) / ZTSTEP
 ZZS(:,:,:) = PRAIN(:,:,:)
 DO JN = 1 , ISPLITR
    GSEDIM(:,:,:) = .FALSE.
-   GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) = ZZS(IIB:IIE,IJB:IJE,IKB:IKE) > ZRTMIN(3)
+   GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) = ZZS(IIB:IIE,IJB:IJE,IKB:IKE) > ZRTMIN3
 ! 
    ISEDIM = COUNTJV( GSEDIM(:,:,:),I1(:),I2(:),I3(:))
    IF( ISEDIM >= 1 ) THEN
@@ -772,14 +757,14 @@ DO JN = 1 , ISPLITR
       END DO
       IF( JN==1 ) THEN
          PINPAP(:,:) = ZWSED(:,:,IKB)*                                            &
-                             ( PSVT_MASS(:,:,IKB)/MAX(ZRTMIN(3),PRRT(:,:,IKB)) )
+                             ( PSVT_MASS(:,:,IKB)/MAX(ZRTMIN3,PRRT(:,:,IKB)) )
       END IF
       DEALLOCATE(ZRHODREF)
       DEALLOCATE(ZRRS)
       DEALLOCATE(ZZW)
       IF( JN==ISPLITR ) THEN
          GSEDIM(:,:,:) = .FALSE.
-         GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) = ZZS(IIB:IIE,IJB:IJE,IKB:IKE) > ZRTMIN(3)
+         GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) = ZZS(IIB:IIE,IJB:IJE,IKB:IKE) > ZRTMIN3
          ZWSED(:,:,:) = 0.0
          WHERE( GSEDIM(:,:,:) ) 
             ZWSED(:,:,:) = 1.0/ZTSTEP - PRAIN(:,:,:)/ZZS(:,:,:)
diff --git a/src/common/micro/minpack.F90 b/src/common/micro/minpack.F90
new file mode 100644
index 0000000000000000000000000000000000000000..c927712e40538d3f25197984d88e40d459f953e7
--- /dev/null
+++ b/src/common/micro/minpack.F90
@@ -0,0 +1,5780 @@
+!!$ Minpack Copyright Notice (1999) University of Chicago.  All rights reserved
+!!$
+!!$ Redistribution and use in source and binary forms, with or
+!!$ without modification, are permitted provided that the
+!!$ following conditions are met:
+!!$
+!!$ 1. Redistributions of source code must retain the above
+!!$ copyright notice, this list of conditions and the following
+!!$ disclaimer.
+!!$
+!!$ 2. Redistributions in binary form must reproduce the above
+!!$ copyright notice, this list of conditions and the following
+!!$ disclaimer in the documentation and/or other materials
+!!$ provided with the distribution.
+!!$
+!!$ 3. The end-user documentation included with the
+!!$ redistribution, if any, must include the following
+!!$ acknowledgment:
+!!$
+!!$   "This product includes software developed by the
+!!$   University of Chicago, as Operator of Argonne National
+!!$   Laboratory."
+!!$
+!!$ Alternately, this acknowledgment may appear in the software
+!!$ itself, if and wherever such third-party acknowledgments
+!!$ normally appear.
+!!$
+!!$ 4. WARRANTY DISCLAIMER. THE SOFTWARE IS SUPPLIED "AS IS"
+!!$ WITHOUT WARRANTY OF ANY KIND. THE COPYRIGHT HOLDER, THE
+!!$ UNITED STATES, THE UNITED STATES DEPARTMENT OF ENERGY, AND
+!!$ THEIR EMPLOYEES: (1) DISCLAIM ANY WARRANTIES, EXPRESS OR
+!!$ IMPLIED, INCLUDING BUT NOT LIMITED TO ANY IMPLIED WARRANTIES
+!!$ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE
+!!$ OR NON-INFRINGEMENT, (2) DO NOT ASSUME ANY LEGAL LIABILITY
+!!$ OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR
+!!$ USEFULNESS OF THE SOFTWARE, (3) DO NOT REPRESENT THAT USE OF
+!!$ THE SOFTWARE WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS, (4)
+!!$ DO NOT WARRANT THAT THE SOFTWARE WILL FUNCTION
+!!$ UNINTERRUPTED, THAT IT IS ERROR-FREE OR THAT ANY ERRORS WILL
+!!$ BE CORRECTED.
+!!$
+!!$ 5. LIMITATION OF LIABILITY. IN NO EVENT WILL THE COPYRIGHT
+!!$ HOLDER, THE UNITED STATES, THE UNITED STATES DEPARTMENT OF
+!!$ ENERGY, OR THEIR EMPLOYEES: BE LIABLE FOR ANY INDIRECT,
+!!$ INCIDENTAL, CONSEQUENTIAL, SPECIAL OR PUNITIVE DAMAGES OF
+!!$ ANY KIND OR NATURE, INCLUDING BUT NOT LIMITED TO LOSS OF
+!!$ PROFITS OR LOSS OF DATA, FOR ANY REASON WHATSOEVER, WHETHER
+!!$ SUCH LIABILITY IS ASSERTED ON THE BASIS OF CONTRACT, TORT
+!!$ (INCLUDING NEGLIGENCE OR STRICT LIABILITY), OR OTHERWISE,
+!!$ EVEN IF ANY OF SAID PARTIES HAS BEEN WARNED OF THE
+!!$ POSSIBILITY OF SUCH LOSS OR DAMAGES.
+
+subroutine chkder ( m, n, x, fvec, fjac, ldfjac, xp, fvecp, mode, err )
+
+!*****************************************************************************80
+!
+!! CHKDER checks the gradients of M functions of N variables.
+!
+!  Discussion:
+!
+!    CHKDER checks the gradients of M nonlinear functions in N variables,
+!    evaluated at a point X, for consistency with the functions themselves.
+!
+!    The user calls CHKDER twice, first with MODE = 1 and then with MODE = 2.
+!
+!    MODE = 1.
+!      On input,
+!        X contains the point of evaluation.
+!      On output,
+!        XP is set to a neighboring point.
+!
+!    Now the user must evaluate the function and gradients at X, and the
+!    function at XP.  Then the subroutine is called again:
+!
+!    MODE = 2.
+!      On input,
+!        FVEC contains the function values at X,
+!        FJAC contains the function gradients at X.
+!        FVECP contains the functions evaluated at XP.
+!      On output,
+!        ERR contains measures of correctness of the respective gradients.
+!
+!    The subroutine does not perform reliably if cancellation or
+!    rounding errors cause a severe loss of significance in the
+!    evaluation of a function.  Therefore, none of the components
+!    of X should be unusually small (in particular, zero) or any
+!    other value which may cause loss of significance.
+!
+!  Licensing:
+!
+!    This code is distributed under the GNU LGPL license.
+!
+!  Modified:
+!
+!    06 April 2010
+!
+!  Author:
+!
+!    Original FORTRAN77 version by Jorge More, Burton Garbow, Kenneth Hillstrom.
+!    FORTRAN90 version by John Burkardt.
+!
+!  Reference:
+!
+!    Jorge More, Burton Garbow, Kenneth Hillstrom,
+!    User Guide for MINPACK-1,
+!    Technical Report ANL-80-74,
+!    Argonne National Laboratory, 1980.
+!
+!  Parameters:
+!
+!    Input, integer ( kind = 4 ) M, is the number of functions.
+!
+!    Input, integer ( kind = 4 ) N, is the number of variables.
+!
+!    Input, real ( kind = 8 ) X(N), the point at which the jacobian is to be
+!    evaluated.
+!
+!    Input, real ( kind = 8 ) FVEC(M), is used only when MODE = 2.
+!    In that case, it should contain the function values at X.
+!
+!    Input, real ( kind = 8 ) FJAC(LDFJAC,N), an M by N array.  When MODE = 2,
+!    FJAC(I,J) should contain the value of dF(I)/dX(J).
+!
+!    Input, integer ( kind = 4 ) LDFJAC, the leading dimension of FJAC.
+!    LDFJAC must be at least M.
+!
+!    Output, real ( kind = 8 ) XP(N), on output with MODE = 1, is a neighboring
+!    point of X, at which the function is to be evaluated.
+!
+!    Input, real ( kind = 8 ) FVECP(M), on input with MODE = 2, is the function
+!    value at XP.
+!
+!    Input, integer ( kind = 4 ) MODE, should be set to 1 on the first call, and
+!    2 on the second.
+!
+!    Output, real ( kind = 8 ) ERR(M).  On output when MODE = 2, ERR contains
+!    measures of correctness of the respective gradients.  If there is no
+!    severe loss of significance, then if ERR(I):
+!      = 1.0D+00, the I-th gradient is correct,
+!      = 0.0D+00, the I-th gradient is incorrect.
+!      > 0.5D+00, the I-th gradient is probably correct.
+!      < 0.5D+00, the I-th gradient is probably incorrect.
+!
+  implicit none
+
+  integer ( kind = 4 ) ldfjac
+  integer ( kind = 4 ) m
+  integer ( kind = 4 ) n
+
+  real ( kind = 8 ) eps
+  real ( kind = 8 ) epsf
+  real ( kind = 8 ) epslog
+  real ( kind = 8 ) epsmch
+  real ( kind = 8 ) err(m)
+  real ( kind = 8 ) fjac(ldfjac,n)
+  real ( kind = 8 ) fvec(m)
+  real ( kind = 8 ) fvecp(m)
+  integer ( kind = 4 ) i
+  integer ( kind = 4 ) j
+  integer ( kind = 4 ) mode
+  real ( kind = 8 ) temp
+  real ( kind = 8 ) x(n)
+  real ( kind = 8 ) xp(n)
+
+  epsmch = epsilon ( epsmch )
+  eps = sqrt ( epsmch )
+!
+!  MODE = 1.
+!
+  if ( mode == 1 ) then
+
+    do j = 1, n
+      temp = eps * abs ( x(j) )
+      if ( temp == 0.0D+00 ) then
+        temp = eps
+      end if
+      xp(j) = x(j) + temp
+    end do
+!
+!  MODE = 2.
+!
+  else if ( mode == 2 ) then
+
+    epsf = 100.0D+00 * epsmch
+    epslog = log10 ( eps )
+
+    err = 0.0D+00
+
+    do j = 1, n
+      temp = abs ( x(j) )
+      if ( temp == 0.0D+00 ) then
+        temp = 1.0D+00
+      end if
+      err(1:m) = err(1:m) + temp * fjac(1:m,j)
+    end do
+
+    do i = 1, m
+
+      temp = 1.0D+00
+
+      if ( fvec(i) /= 0.0D+00 .and. fvecp(i) /= 0.0D+00 .and. &
+        abs ( fvecp(i)-fvec(i)) >= epsf * abs ( fvec(i) ) ) then
+        temp = eps * abs ( (fvecp(i)-fvec(i)) / eps - err(i) ) &
+          / ( abs ( fvec(i) ) + abs ( fvecp(i) ) )
+      end if
+
+      err(i) = 1.0D+00
+
+      if ( epsmch < temp .and. temp < eps ) then
+        err(i) = ( log10 ( temp ) - epslog ) / epslog
+      end if
+
+      if ( eps <= temp ) then
+        err(i) = 0.0D+00
+      end if
+
+    end do
+
+  end if
+
+  return
+end
+subroutine dogleg ( n, r, lr, diag, qtb, delta, x )
+
+!*****************************************************************************80
+!
+!! DOGLEG finds the minimizing combination of Gauss-Newton and gradient steps.
+!
+!  Discussion:
+!
+!    Given an M by N matrix A, an N by N nonsingular diagonal
+!    matrix D, an M-vector B, and a positive number DELTA, the
+!    problem is to determine the convex combination X of the
+!    Gauss-Newton and scaled gradient directions that minimizes
+!    (A*X - B) in the least squares sense, subject to the
+!    restriction that the euclidean norm of D*X be at most DELTA.
+!
+!    This subroutine completes the solution of the problem
+!    if it is provided with the necessary information from the
+!    QR factorization of A.  That is, if A = Q*R, where Q has
+!    orthogonal columns and R is an upper triangular matrix,
+!    then DOGLEG expects the full upper triangle of R and
+!    the first N components of Q'*B.
+!
+!  Licensing:
+!
+!    This code is distributed under the GNU LGPL license.
+!
+!  Modified:
+!
+!    06 April 2010
+!
+!  Author:
+!
+!    Original FORTRAN77 version by Jorge More, Burton Garbow, Kenneth Hillstrom.
+!    FORTRAN90 version by John Burkardt.
+!
+!  Reference:
+!
+!    Jorge More, Burton Garbow, Kenneth Hillstrom,
+!    User Guide for MINPACK-1,
+!    Technical Report ANL-80-74,
+!    Argonne National Laboratory, 1980.
+!
+!  Parameters:
+!
+!    Input, integer ( kind = 4 ) N, the order of the matrix R.
+!
+!    Input, real ( kind = 8 ) R(LR), the upper triangular matrix R stored
+!    by rows.
+!
+!    Input, integer ( kind = 4 ) LR, the size of the R array, which must be 
+!    no less than (N*(N+1))/2.
+!
+!    Input, real ( kind = 8 ) DIAG(N), the diagonal elements of the matrix D.
+!
+!    Input, real ( kind = 8 ) QTB(N), the first N elements of the vector Q'* B.
+!
+!    Input, real ( kind = 8 ) DELTA, is a positive upper bound on the
+!    euclidean norm of D*X(1:N).
+!
+!    Output, real ( kind = 8 ) X(N), the desired convex combination of the
+!    Gauss-Newton direction and the scaled gradient direction.
+!
+  implicit none
+
+  integer ( kind = 4 ) lr
+  integer ( kind = 4 ) n
+
+  real ( kind = 8 ) alpha
+  real ( kind = 8 ) bnorm
+  real ( kind = 8 ) delta
+  real ( kind = 8 ) diag(n)
+  real ( kind = 8 ) enorm
+  real ( kind = 8 ) epsmch
+  real ( kind = 8 ) gnorm
+  integer ( kind = 4 ) i
+  integer ( kind = 4 ) j
+  integer ( kind = 4 ) jj
+  integer ( kind = 4 ) k
+  integer ( kind = 4 ) l
+  real ( kind = 8 ) qnorm
+  real ( kind = 8 ) qtb(n)
+  real ( kind = 8 ) r(lr)
+  real ( kind = 8 ) sgnorm
+  real ( kind = 8 ) sum2
+  real ( kind = 8 ) temp
+  real ( kind = 8 ) wa1(n)
+  real ( kind = 8 ) wa2(n)
+  real ( kind = 8 ) x(n)
+
+  epsmch = epsilon ( epsmch )
+!
+!  Calculate the Gauss-Newton direction.
+!
+  jj = ( n * ( n + 1 ) ) / 2 + 1
+
+  do k = 1, n
+
+     j = n - k + 1
+     jj = jj - k
+     l = jj + 1
+     sum2 = 0.0D+00
+
+     do i = j + 1, n
+       sum2 = sum2 + r(l) * x(i)
+       l = l + 1
+     end do
+
+     temp = r(jj)
+
+     if ( temp == 0.0D+00 ) then
+
+       l = j
+       do i = 1, j
+         temp = max ( temp, abs ( r(l)) )
+         l = l + n - i
+       end do
+
+       if ( temp == 0.0D+00 ) then
+         temp = epsmch
+       else
+         temp = epsmch * temp
+       end if
+
+     end if
+
+     x(j) = ( qtb(j) - sum2 ) / temp
+
+  end do
+!
+!  Test whether the Gauss-Newton direction is acceptable.
+!
+  wa1(1:n) = 0.0D+00
+  wa2(1:n) = diag(1:n) * x(1:n)
+  qnorm = enorm ( n, wa2 )
+
+  if ( qnorm <= delta ) then
+    return
+  end if
+!
+!  The Gauss-Newton direction is not acceptable.
+!  Calculate the scaled gradient direction.
+!
+  l = 1
+  do j = 1, n
+     temp = qtb(j)
+     do i = j, n
+       wa1(i) = wa1(i) + r(l) * temp
+       l = l + 1
+     end do
+     wa1(j) = wa1(j) / diag(j)
+  end do
+!
+!  Calculate the norm of the scaled gradient.
+!  Test for the special case in which the scaled gradient is zero.
+!
+  gnorm = enorm ( n, wa1 )
+  sgnorm = 0.0D+00
+  alpha = delta / qnorm
+
+  if ( gnorm /= 0.0D+00 ) then
+!
+!  Calculate the point along the scaled gradient which minimizes the quadratic.
+!
+    wa1(1:n) = ( wa1(1:n) / gnorm ) / diag(1:n)
+
+    l = 1
+    do j = 1, n
+      sum2 = 0.0D+00
+      do i = j, n
+        sum2 = sum2 + r(l) * wa1(i)
+        l = l + 1
+      end do
+      wa2(j) = sum2
+    end do
+
+    temp = enorm ( n, wa2 )
+    sgnorm = ( gnorm / temp ) / temp
+!
+!  Test whether the scaled gradient direction is acceptable.
+!
+    alpha = 0.0D+00
+!
+!  The scaled gradient direction is not acceptable.
+!  Calculate the point along the dogleg at which the quadratic is minimized.
+!
+    if ( sgnorm < delta ) then
+
+      bnorm = enorm ( n, qtb )
+      temp = ( bnorm / gnorm ) * ( bnorm / qnorm ) * ( sgnorm / delta )
+      temp = temp - ( delta / qnorm ) * ( sgnorm / delta) ** 2 &
+        + sqrt ( ( temp - ( delta / qnorm ) ) ** 2 &
+        + ( 1.0D+00 - ( delta / qnorm ) ** 2 ) &
+        * ( 1.0D+00 - ( sgnorm / delta ) ** 2 ) )
+
+      alpha = ( ( delta / qnorm ) * ( 1.0D+00 - ( sgnorm / delta ) ** 2 ) ) &
+        / temp
+
+    end if
+
+  end if
+!
+!  Form appropriate convex combination of the Gauss-Newton
+!  direction and the scaled gradient direction.
+!
+  temp = ( 1.0D+00 - alpha ) * min ( sgnorm, delta )
+
+  x(1:n) = temp * wa1(1:n) + alpha * x(1:n)
+
+  return
+end
+function enorm ( n, x )
+
+!*****************************************************************************80
+!
+!! ENORM computes the Euclidean norm of a vector.
+!
+!  Discussion:
+!
+!    This is an extremely simplified version of the original ENORM
+!    routine, which has been renamed to "ENORM2".
+!
+!  Licensing:
+!
+!    This code is distributed under the GNU LGPL license.
+!
+!  Modified:
+!
+!    06 April 2010
+!
+!  Author:
+!
+!    Original FORTRAN77 version by Jorge More, Burton Garbow, Kenneth Hillstrom.
+!    FORTRAN90 version by John Burkardt.
+!
+!  Reference:
+!
+!    Jorge More, Burton Garbow, Kenneth Hillstrom,
+!    User Guide for MINPACK-1,
+!    Technical Report ANL-80-74,
+!    Argonne National Laboratory, 1980.
+!
+!  Parameters:
+!
+!    Input, integer ( kind = 4 ) N, is the length of the vector.
+!
+!    Input, real ( kind = 8 ) X(N), the vector whose norm is desired.
+!
+!    Output, real ( kind = 8 ) ENORM, the Euclidean norm of the vector.
+!
+  implicit none
+
+  integer ( kind = 4 ) n
+  real ( kind = 8 ) x(n)
+  real ( kind = 8 ) enorm
+
+  enorm = sqrt ( sum ( x(1:n) ** 2 ))
+
+  return
+end
+function enorm2 ( n, x )
+
+!*****************************************************************************80
+!
+!! ENORM2 computes the Euclidean norm of a vector.
+!
+!  Discussion:
+!
+!    This routine was named ENORM.  It has been renamed "ENORM2",
+!    and a simplified routine has been substituted.
+!
+!    The Euclidean norm is computed by accumulating the sum of
+!    squares in three different sums.  The sums of squares for the
+!    small and large components are scaled so that no overflows
+!    occur.  Non-destructive underflows are permitted.  Underflows
+!    and overflows do not occur in the computation of the unscaled
+!    sum of squares for the intermediate components.
+!
+!    The definitions of small, intermediate and large components
+!    depend on two constants, RDWARF and RGIANT.  The main
+!    restrictions on these constants are that RDWARF^2 not
+!    underflow and RGIANT^2 not overflow.
+!
+!  Licensing:
+!
+!    This code is distributed under the GNU LGPL license.
+!
+!  Modified:
+!
+!    06 April 2010
+!
+!  Author:
+!
+!    Original FORTRAN77 version by Jorge More, Burton Garbow, Kenneth Hillstrom.
+!    FORTRAN90 version by John Burkardt.
+!
+!  Reference:
+!
+!    Jorge More, Burton Garbow, Kenneth Hillstrom,
+!    User Guide for MINPACK-1
+!    Argonne National Laboratory,
+!    Argonne, Illinois.
+!
+!  Parameters:
+!
+!    Input, integer ( kind = 4 ) N, is the length of the vector.
+!
+!    Input, real ( kind = 8 ) X(N), the vector whose norm is desired.
+!
+!    Output, real ( kind = 8 ) ENORM2, the Euclidean norm of the vector.
+!
+  implicit none
+
+  integer ( kind = 4 ) n
+
+  real ( kind = 8 ) agiant
+  real ( kind = 8 ) enorm2
+  integer ( kind = 4 ) i
+  real ( kind = 8 ) rdwarf
+  real ( kind = 8 ) rgiant
+  real ( kind = 8 ) s1
+  real ( kind = 8 ) s2
+  real ( kind = 8 ) s3
+  real ( kind = 8 ) x(n)
+  real ( kind = 8 ) xabs
+  real ( kind = 8 ) x1max
+  real ( kind = 8 ) x3max
+
+  rdwarf = sqrt ( tiny ( rdwarf ) )
+  rgiant = sqrt ( huge ( rgiant ) )
+
+  s1 = 0.0D+00
+  s2 = 0.0D+00
+  s3 = 0.0D+00
+  x1max = 0.0D+00
+  x3max = 0.0D+00
+  agiant = rgiant / real ( n, kind = 8 )
+
+  do i = 1, n
+
+    xabs = abs ( x(i) )
+
+    if ( xabs <= rdwarf ) then
+
+      if ( x3max < xabs ) then
+        s3 = 1.0D+00 + s3 * ( x3max / xabs ) ** 2
+        x3max = xabs
+      else if ( xabs /= 0.0D+00 ) then
+        s3 = s3 + ( xabs / x3max ) ** 2
+      end if
+
+    else if ( agiant <= xabs ) then
+
+      if ( x1max < xabs ) then
+        s1 = 1.0D+00 + s1 * ( x1max / xabs ) ** 2
+        x1max = xabs
+      else
+        s1 = s1 + ( xabs / x1max ) ** 2
+      end if
+
+    else
+
+      s2 = s2 + xabs ** 2
+
+    end if
+
+  end do
+!
+!  Calculation of norm.
+!
+  if ( s1 /= 0.0D+00 ) then
+
+    enorm2 = x1max * sqrt ( s1 + ( s2 / x1max ) / x1max )
+
+  else if ( s2 /= 0.0D+00 ) then
+
+    if ( x3max <= s2 ) then
+      enorm2 = sqrt ( s2 * ( 1.0D+00 + ( x3max / s2 ) * ( x3max * s3 ) ) )
+    else
+      enorm2 = sqrt ( x3max * ( ( s2 / x3max ) + ( x3max * s3 ) ) )
+    end if
+
+  else
+
+    enorm2 = x3max * sqrt ( s3 )
+
+  end if
+
+  return
+end
+subroutine fdjac1 ( fcn, n, x, fvec, fjac, ldfjac, iflag, ml, mu, epsfcn )
+
+!*****************************************************************************80
+!
+!! FDJAC1 estimates an N by N jacobian matrix using forward differences.
+!
+!  Discussion:
+!
+!    This subroutine computes a forward-difference approximation
+!    to the N by N jacobian matrix associated with a specified
+!    problem of N functions in N variables. If the jacobian has
+!    a banded form, then function evaluations are saved by only
+!    approximating the nonzero terms.
+!
+!  Licensing:
+!
+!    This code is distributed under the GNU LGPL license.
+!
+!  Modified:
+!
+!    06 April 2010
+!
+!  Author:
+!
+!    Original FORTRAN77 version by Jorge More, Burton Garbow, Kenneth Hillstrom.
+!    FORTRAN90 version by John Burkardt.
+!
+!  Reference:
+!
+!    Jorge More, Burton Garbow, Kenneth Hillstrom,
+!    User Guide for MINPACK-1,
+!    Technical Report ANL-80-74,
+!    Argonne National Laboratory, 1980.
+!
+!  Parameters:
+!
+!    Input, external FCN, the name of the user-supplied subroutine which
+!    calculates the functions.  The routine should have the form:
+!      subroutine fcn ( n, x, fvec, iflag )
+!      integer ( kind = 4 ) n
+!      real ( kind = 8 ) fvec(n)
+!      integer ( kind = 4 ) iflag
+!      real ( kind = 8 ) x(n)
+!    If IFLAG = 0 on input, then FCN is only being called to allow the user
+!    to print out the current iterate.
+!    If IFLAG = 1 on input, FCN should calculate the functions at X and
+!    return this vector in FVEC.
+!    To terminate the algorithm, FCN may set IFLAG negative on return.
+!
+!    Input, integer ( kind = 4 ) N, the number of functions and variables.
+!
+!    Input, real ( kind = 8 ) X(N), the point where the jacobian is evaluated.
+!
+!    Input, real ( kind = 8 ) FVEC(N), the functions evaluated at X.
+!
+!    Output, real ( kind = 8 ) FJAC(LDFJAC,N), the N by N approximate
+!    jacobian matrix.
+!
+!    Input, integer ( kind = 4 ) LDFJAC, the leading dimension of FJAC, which
+!    must not be less than N.
+!
+!    Output, integer ( kind = 4 ) IFLAG, is an error flag returned by FCN.  
+!    If FCN returns a nonzero value of IFLAG, then this routine returns 
+!    immediately to the calling program, with the value of IFLAG.
+!
+!    Input, integer ( kind = 4 ) ML, MU, specify the number of subdiagonals and
+!    superdiagonals within the band of the jacobian matrix.  If the
+!    jacobian is not banded, set ML and MU to N-1.
+!
+!    Input, real ( kind = 8 ) EPSFCN, is used in determining a suitable step
+!    length for the forward-difference approximation.  This approximation
+!    assumes that the relative errors in the functions are of the order of
+!    EPSFCN.  If EPSFCN is less than the machine precision, it is assumed that
+!    the relative errors in the functions are of the order of the machine
+!    precision.
+!
+  implicit none
+
+  integer ( kind = 4 ) ldfjac
+  integer ( kind = 4 ) n
+
+  real ( kind = 8 ) eps
+  real ( kind = 8 ) epsfcn
+  real ( kind = 8 ) epsmch
+  external fcn
+  real ( kind = 8 ) fjac(ldfjac,n)
+  real ( kind = 8 ) fvec(n)
+  real ( kind = 8 ) h
+  integer ( kind = 4 ) i
+  integer ( kind = 4 ) iflag
+  integer ( kind = 4 ) j
+  integer ( kind = 4 ) k
+  integer ( kind = 4 ) ml
+  integer ( kind = 4 ) msum
+  integer ( kind = 4 ) mu
+  real ( kind = 8 ) temp
+  real ( kind = 8 ) wa1(n)
+  real ( kind = 8 ) wa2(n)
+  real ( kind = 8 ) x(n)
+
+  epsmch = epsilon ( epsmch )
+
+  eps = sqrt ( max ( epsfcn, epsmch ) )
+  msum = ml + mu + 1
+!
+!  Computation of dense approximate jacobian.
+!
+  if ( n <= msum ) then
+
+     do j = 1, n
+
+        temp = x(j)
+        h = eps * abs ( temp )
+        if ( h == 0.0D+00 ) then
+          h = eps
+        end if
+
+        iflag = 1
+        x(j) = temp + h
+        call fcn ( n, x, wa1, iflag )
+
+        if ( iflag < 0 ) then
+          exit
+        end if
+
+        x(j) = temp
+        fjac(1:n,j) = ( wa1(1:n) - fvec(1:n) ) / h
+
+     end do
+
+  else
+!
+!  Computation of banded approximate jacobian.
+!
+     do k = 1, msum
+
+        do j = k, n, msum
+          wa2(j) = x(j)
+          h = eps * abs ( wa2(j) )
+          if ( h == 0.0D+00 ) then
+            h = eps
+          end if
+          x(j) = wa2(j) + h
+        end do
+
+        iflag = 1
+        call fcn ( n, x, wa1, iflag )
+
+        if ( iflag < 0 ) then
+          exit
+        end if
+
+        do j = k, n, msum
+
+           x(j) = wa2(j)
+
+           h = eps * abs ( wa2(j) )
+           if ( h == 0.0D+00 ) then
+             h = eps
+           end if
+
+           fjac(1:n,j) = 0.0D+00
+
+           do i = 1, n
+             if ( j - mu <= i .and. i <= j + ml ) then
+               fjac(i,j) = ( wa1(i) - fvec(i) ) / h
+             end if
+           end do
+
+        end do
+
+     end do
+
+  end if
+
+  return
+end
+subroutine fdjac2 ( fcn, m, n, x, fvec, fjac, ldfjac, iflag, epsfcn )
+
+!*****************************************************************************80
+!
+!! FDJAC2 estimates an M by N jacobian matrix using forward differences.
+!
+!  Discussion:
+!
+!    This subroutine computes a forward-difference approximation
+!    to the M by N jacobian matrix associated with a specified
+!    problem of M functions in N variables.
+!
+!  Licensing:
+!
+!    This code is distributed under the GNU LGPL license.
+!
+!  Modified:
+!
+!    06 April 2010
+!
+!  Author:
+!
+!    Original FORTRAN77 version by Jorge More, Burton Garbow, Kenneth Hillstrom.
+!    FORTRAN90 version by John Burkardt.
+!
+!  Reference:
+!
+!    Jorge More, Burton Garbow, Kenneth Hillstrom,
+!    User Guide for MINPACK-1,
+!    Technical Report ANL-80-74,
+!    Argonne National Laboratory, 1980.
+!
+!  Parameters:
+!
+!    Input, external FCN, the name of the user-supplied subroutine which
+!    calculates the functions.  The routine should have the form:
+!      subroutine fcn ( m, n, x, fvec, iflag )
+!      integer ( kind = 4 ) n
+!      real ( kind = 8 ) fvec(m)
+!      integer ( kind = 4 ) iflag
+!      real ( kind = 8 ) x(n)
+!
+!    If IFLAG = 0 on input, then FCN is only being called to allow the user
+!    to print out the current iterate.
+!    If IFLAG = 1 on input, FCN should calculate the functions at X and
+!    return this vector in FVEC.
+!    To terminate the algorithm, FCN may set IFLAG negative on return.
+!
+!    Input, integer ( kind = 4 ) M, is the number of functions.
+!
+!    Input, integer ( kind = 4 ) N, is the number of variables.  
+!    N must not exceed M.
+!
+!    Input, real ( kind = 8 ) X(N), the point where the jacobian is evaluated.
+!
+!    Input, real ( kind = 8 ) FVEC(M), the functions evaluated at X.
+!
+!    Output, real ( kind = 8 ) FJAC(LDFJAC,N), the M by N approximate
+!    jacobian matrix.
+!
+!    Input, integer ( kind = 4 ) LDFJAC, the leading dimension of FJAC, 
+!    which must not be less than M.
+!
+!    Output, integer ( kind = 4 ) IFLAG, is an error flag returned by FCN.  
+!    If FCN returns a nonzero value of IFLAG, then this routine returns 
+!    immediately to the calling program, with the value of IFLAG.
+!
+!    Input, real ( kind = 8 ) EPSFCN, is used in determining a suitable
+!    step length for the forward-difference approximation.  This approximation
+!    assumes that the relative errors in the functions are of the order of
+!    EPSFCN.  If EPSFCN is less than the machine precision, it is assumed that
+!    the relative errors in the functions are of the order of the machine
+!    precision.
+!
+  implicit none
+
+  integer ( kind = 4 ) ldfjac
+  integer ( kind = 4 ) m
+  integer ( kind = 4 ) n
+
+  real ( kind = 8 ) eps
+  real ( kind = 8 ) epsfcn
+  real ( kind = 8 ) epsmch
+  external fcn
+  real ( kind = 8 ) fjac(ldfjac,n)
+  real ( kind = 8 ) fvec(m)
+  real ( kind = 8 ) h
+  integer ( kind = 4 ) i
+  integer ( kind = 4 ) iflag
+  integer ( kind = 4 ) j
+  real ( kind = 8 ) temp
+  real ( kind = 8 ) wa(m)
+  real ( kind = 8 ) x(n)
+
+  epsmch = epsilon ( epsmch )
+
+  eps = sqrt ( max ( epsfcn, epsmch ) )
+
+  do j = 1, n
+
+    temp = x(j)
+    h = eps * abs ( temp )
+    if ( h == 0.0D+00 ) then
+      h = eps
+    end if
+
+    iflag = 1
+    x(j) = temp + h
+    call fcn ( m, n, x, wa, iflag )
+
+    if ( iflag < 0 ) then
+      exit
+    end if
+
+    x(j) = temp
+    fjac(1:m,j) = ( wa(1:m) - fvec(1:m) ) / h
+
+  end do
+
+  return
+end
+subroutine hybrd ( fcn, n, x, fvec, xtol, maxfev, ml, mu, epsfcn, diag, mode, &
+  factor, nprint, info, nfev, fjac, ldfjac, r, lr, qtf )
+
+!*****************************************************************************80
+!
+!! HYBRD seeks a zero of N nonlinear equations in N variables.
+!
+!  Discussion:
+!
+!    HYBRD finds a zero of a system of N nonlinear functions in N variables
+!    by a modification of the Powell hybrid method.  The user must provide a
+!    subroutine which calculates the functions.  The jacobian is
+!    then calculated by a forward-difference approximation.
+!
+!  Licensing:
+!
+!    This code is distributed under the GNU LGPL license.
+!
+!  Modified:
+!
+!    06 April 2010
+!
+!  Author:
+!
+!    Original FORTRAN77 version by Jorge More, Burton Garbow, Kenneth Hillstrom.
+!    FORTRAN90 version by John Burkardt.
+!
+!  Reference:
+!
+!    Jorge More, Burton Garbow, Kenneth Hillstrom,
+!    User Guide for MINPACK-1,
+!    Technical Report ANL-80-74,
+!    Argonne National Laboratory, 1980.
+!
+!  Parameters:
+!
+!    Input, external FCN, the name of the user-supplied subroutine which
+!    calculates the functions.  The routine should have the form:
+!      subroutine fcn ( n, x, fvec, iflag )
+!      integer ( kind = 4 ) n
+!      real ( kind = 8 ) fvec(n)
+!      integer ( kind = 4 ) iflag
+!      real ( kind = 8 ) x(n)
+!
+!    If IFLAG = 0 on input, then FCN is only being called to allow the user
+!    to print out the current iterate.
+!    If IFLAG = 1 on input, FCN should calculate the functions at X and
+!    return this vector in FVEC.
+!    To terminate the algorithm, FCN may set IFLAG negative on return.
+!
+!    Input, integer ( kind = 4 ) N, the number of functions and variables.
+!
+!    Input/output, real ( kind = 8 ) X(N).  On input, X must contain an initial
+!    estimate of the solution vector.  On output X contains the final
+!    estimate of the solution vector.
+!
+!    Output, real ( kind = 8 ) FVEC(N), the functions evaluated at the output X.
+!
+!    Input, real ( kind = 8 ) XTOL.  Termination occurs when the relative error
+!    between two consecutive iterates is at most XTOL.  XTOL should be
+!    nonnegative.
+!
+!    Input, integer ( kind = 4 ) MAXFEV.  Termination occurs when the number of
+!    calls to FCN is at least MAXFEV by the end of an iteration.
+!
+!    Input, integer ( kind = 4 ) ML, MU, specify the number of subdiagonals and
+!    superdiagonals within the band of the jacobian matrix.  If the jacobian
+!    is not banded, set ML and MU to at least n - 1.
+!
+!    Input, real ( kind = 8 ) EPSFCN, is used in determining a suitable step
+!    length for the forward-difference approximation.  This approximation
+!    assumes that the relative errors in the functions are of the order of
+!    EPSFCN.  If EPSFCN is less than the machine precision, it is assumed that
+!    the relative errors in the functions are of the order of the machine
+!    precision.
+!
+!    Input/output, real ( kind = 8 ) DIAG(N).  If MODE = 1, then DIAG is set
+!    internally.  If MODE = 2, then DIAG must contain positive entries that
+!    serve as multiplicative scale factors for the variables.
+!
+!    Input, integer ( kind = 4 ) MODE, scaling option.
+!    1, variables will be scaled internally.
+!    2, scaling is specified by the input DIAG vector.
+!
+!    Input, real ( kind = 8 ) FACTOR, determines the initial step bound.  This
+!    bound is set to the product of FACTOR and the euclidean norm of DIAG*X if
+!    nonzero, or else to FACTOR itself.  In most cases, FACTOR should lie
+!    in the interval (0.1, 100) with 100 the recommended value.
+!
+!    Input, integer ( kind = 4 ) NPRINT, enables controlled printing of
+!    iterates if it is positive.  In this case, FCN is called with IFLAG = 0 at
+!    the beginning of the first iteration and every NPRINT iterations thereafter
+!    and immediately prior to return, with X and FVEC available
+!    for printing.  If NPRINT is not positive, no special calls
+!    of FCN with IFLAG = 0 are made.
+!
+!    Output, integer ( kind = 4 ) INFO, error flag.  If the user has terminated
+!    execution, INFO is set to the (negative) value of IFLAG.
+!    See the description of FCN.
+!    Otherwise, INFO is set as follows:
+!    0, improper input parameters.
+!    1, relative error between two consecutive iterates is at most XTOL.
+!    2, number of calls to FCN has reached or exceeded MAXFEV.
+!    3, XTOL is too small.  No further improvement in the approximate
+!       solution X is possible.
+!    4, iteration is not making good progress, as measured by the improvement
+!       from the last five jacobian evaluations.
+!    5, iteration is not making good progress, as measured by the improvement
+!       from the last ten iterations.
+!
+!    Output, integer ( kind = 4 ) NFEV, the number of calls to FCN.
+!
+!    Output, real ( kind = 8 ) FJAC(LDFJAC,N), an N by N array which contains
+!    the orthogonal matrix Q produced by the QR factorization of the final
+!    approximate jacobian.
+!
+!    Input, integer ( kind = 4 ) LDFJAC, the leading dimension of FJAC.
+!    LDFJAC must be at least N.
+!
+!    Output, real ( kind = 8 ) R(LR), the upper triangular matrix produced by
+!    the QR factorization of the final approximate jacobian, stored rowwise.
+!
+!    Input, integer ( kind = 4 ) LR, the size of the R array, which must be no
+!    less than (N*(N+1))/2.
+!
+!    Output, real ( kind = 8 ) QTF(N), contains the vector Q'*FVEC.
+!
+  implicit none
+
+  integer ( kind = 4 ) ldfjac
+  integer ( kind = 4 ) lr
+  integer ( kind = 4 ) n
+
+  real ( kind = 8 ) actred
+  real ( kind = 8 ) delta
+  real ( kind = 8 ) diag(n)
+  real ( kind = 8 ) enorm
+  real ( kind = 8 ) epsfcn
+  real ( kind = 8 ) epsmch
+  real ( kind = 8 ) factor
+  external fcn
+  real ( kind = 8 ) fjac(ldfjac,n)
+  real ( kind = 8 ) fnorm
+  real ( kind = 8 ) fnorm1
+  real ( kind = 8 ) fvec(n)
+  integer ( kind = 4 ) i
+  integer ( kind = 4 ) iflag
+  integer ( kind = 4 ) info
+  integer ( kind = 4 ) iter
+  integer ( kind = 4 ) iwa(1)
+  integer ( kind = 4 ) j
+  logical jeval
+  integer ( kind = 4 ) l
+  integer ( kind = 4 ) maxfev
+  integer ( kind = 4 ) ml
+  integer ( kind = 4 ) mode
+  integer ( kind = 4 ) msum
+  integer ( kind = 4 ) mu
+  integer ( kind = 4 ) ncfail
+  integer ( kind = 4 ) nslow1
+  integer ( kind = 4 ) nslow2
+  integer ( kind = 4 ) ncsuc
+  integer ( kind = 4 ) nfev
+  integer ( kind = 4 ) nprint
+  logical pivot
+  real ( kind = 8 ) pnorm
+  real ( kind = 8 ) prered
+  real ( kind = 8 ) qtf(n)
+  real ( kind = 8 ) r(lr)
+  real ( kind = 8 ) ratio
+  logical sing
+  real ( kind = 8 ) sum2
+  real ( kind = 8 ) temp
+  real ( kind = 8 ) wa1(n)
+  real ( kind = 8 ) wa2(n)
+  real ( kind = 8 ) wa3(n)
+  real ( kind = 8 ) wa4(n)
+  real ( kind = 8 ) x(n)
+  real ( kind = 8 ) xnorm
+  real ( kind = 8 ) xtol
+
+  epsmch = epsilon ( epsmch )
+
+  info = 0
+  iflag = 0
+  nfev = 0
+!
+!  Check the input parameters for errors.
+!
+  if ( n <= 0 ) then
+    return
+  else if ( xtol < 0.0D+00 ) then
+    return
+  else if ( maxfev <= 0 ) then
+    return
+  else if ( ml < 0 ) then
+    return
+  else if ( mu < 0 ) then
+    return
+  else if ( factor <= 0.0D+00 ) then
+    return
+  else if ( ldfjac < n ) then
+    return
+  else if ( lr < ( n * ( n + 1 ) ) / 2 ) then
+    return
+  end if
+
+  if ( mode == 2 ) then
+
+    do j = 1, n
+      if ( diag(j) <= 0.0D+00 ) then
+        go to 300
+      end if
+    end do
+
+  end if
+!
+!  Evaluate the function at the starting point
+!  and calculate its norm.
+!
+  iflag = 1
+  call fcn ( n, x, fvec, iflag )
+  nfev = 1
+
+  if ( iflag < 0 ) then
+    go to 300
+  end if
+
+  fnorm = enorm ( n, fvec )
+!
+!  Determine the number of calls to FCN needed to compute the jacobian matrix.
+!
+  msum = min ( ml + mu + 1, n )
+!
+!  Initialize iteration counter and monitors.
+!
+  iter = 1
+  ncsuc = 0
+  ncfail = 0
+  nslow1 = 0
+  nslow2 = 0
+!
+!  Beginning of the outer loop.
+!
+30 continue
+
+    jeval = .true.
+!
+!  Calculate the jacobian matrix.
+!
+    iflag = 2
+    call fdjac1 ( fcn, n, x, fvec, fjac, ldfjac, iflag, ml, mu, epsfcn )
+
+    nfev = nfev + msum
+
+    if ( iflag < 0 ) then
+      go to 300
+    end if
+!
+!  Compute the QR factorization of the jacobian.
+!
+    pivot = .false.
+    call qrfac ( n, n, fjac, ldfjac, pivot, iwa, 1, wa1, wa2 )
+!
+!  On the first iteration, if MODE is 1, scale according
+!  to the norms of the columns of the initial jacobian.
+!
+    if ( iter == 1 ) then
+
+      if ( mode /= 2 ) then
+
+        diag(1:n) = wa2(1:n)
+        do j = 1, n
+          if ( wa2(j) == 0.0D+00 ) then
+            diag(j) = 1.0D+00
+          end if
+        end do
+
+      end if
+!
+!  On the first iteration, calculate the norm of the scaled X
+!  and initialize the step bound DELTA.
+!
+      wa3(1:n) = diag(1:n) * x(1:n)
+      xnorm = enorm ( n, wa3 )
+      delta = factor * xnorm
+      if ( delta == 0.0D+00 ) then
+        delta = factor
+      end if
+
+    end if
+!
+!  Form Q' * FVEC and store in QTF.
+!
+     qtf(1:n) = fvec(1:n)
+
+     do j = 1, n
+
+       if ( fjac(j,j) /= 0.0D+00 ) then
+         temp = - dot_product ( qtf(j:n), fjac(j:n,j) ) / fjac(j,j)
+         qtf(j:n) = qtf(j:n) + fjac(j:n,j) * temp
+       end if
+
+     end do
+!
+!  Copy the triangular factor of the QR factorization into R.
+!
+     sing = .false.
+
+     do j = 1, n
+        l = j
+        do i = 1, j - 1
+          r(l) = fjac(i,j)
+          l = l + n - i
+        end do
+        r(l) = wa1(j)
+        if ( wa1(j) == 0.0D+00 ) then
+          sing = .true.
+        end if
+     end do
+!
+!  Accumulate the orthogonal factor in FJAC.
+!
+     call qform ( n, n, fjac, ldfjac )
+!
+!  Rescale if necessary.
+!
+     if ( mode /= 2 ) then
+       do j = 1, n
+         diag(j) = max ( diag(j), wa2(j) )
+       end do
+     end if
+!
+!  Beginning of the inner loop.
+!
+180    continue
+!
+!  If requested, call FCN to enable printing of iterates.
+!
+        if ( 0 < nprint ) then
+          iflag = 0
+          if ( mod ( iter - 1, nprint ) == 0 ) then
+            call fcn ( n, x, fvec, iflag )
+          end if
+          if ( iflag < 0 ) then
+            go to 300
+          end if
+        end if
+!
+!  Determine the direction P.
+!
+        call dogleg ( n, r, lr, diag, qtf, delta, wa1 )
+!
+!  Store the direction P and X + P.
+!  Calculate the norm of P.
+!
+        wa1(1:n) = - wa1(1:n)
+        wa2(1:n) = x(1:n) + wa1(1:n)
+        wa3(1:n) = diag(1:n) * wa1(1:n)
+
+        pnorm = enorm ( n, wa3 )
+!
+!  On the first iteration, adjust the initial step bound.
+!
+        if ( iter == 1 ) then
+          delta = min ( delta, pnorm )
+        end if
+!
+!  Evaluate the function at X + P and calculate its norm.
+!
+        iflag = 1
+        call fcn ( n, wa2, wa4, iflag )
+        nfev = nfev + 1
+
+        if ( iflag < 0 ) then
+          go to 300
+        end if
+
+        fnorm1 = enorm ( n, wa4 )
+!
+!  Compute the scaled actual reduction.
+!
+        actred = -1.0D+00
+        if ( fnorm1 < fnorm ) then
+          actred = 1.0D+00 - ( fnorm1 / fnorm ) ** 2
+        endif
+!
+!  Compute the scaled predicted reduction.
+!
+        l = 1
+        do i = 1, n
+          sum2 = 0.0D+00
+          do j = i, n
+            sum2 = sum2 + r(l) * wa1(j)
+            l = l + 1
+          end do
+          wa3(i) = qtf(i) + sum2
+        end do
+
+        temp = enorm ( n, wa3 )
+        prered = 0.0D+00
+        if ( temp < fnorm ) then
+          prered = 1.0D+00 - ( temp / fnorm ) ** 2
+        end if
+!
+!  Compute the ratio of the actual to the predicted reduction.
+!
+        ratio = 0.0D+00
+        if ( 0.0D+00 < prered ) then
+          ratio = actred / prered
+        end if
+!
+!  Update the step bound.
+!
+        if ( ratio < 0.1D+00 ) then
+
+          ncsuc = 0
+          ncfail = ncfail + 1
+          delta = 0.5D+00 * delta
+
+        else
+
+          ncfail = 0
+          ncsuc = ncsuc + 1
+
+          if ( 0.5D+00 <= ratio .or. 1 < ncsuc ) then
+            delta = max ( delta, pnorm / 0.5D+00 )
+          end if
+
+          if ( abs ( ratio - 1.0D+00 ) <= 0.1D+00 ) then
+            delta = pnorm / 0.5D+00
+          end if
+
+        end if
+!
+!  Test for successful iteration.
+!
+!  Successful iteration.
+!  Update X, FVEC, and their norms.
+!
+        if ( 0.0001D+00 <= ratio ) then
+          x(1:n) = wa2(1:n)
+          wa2(1:n) = diag(1:n) * x(1:n)
+          fvec(1:n) = wa4(1:n)
+          xnorm = enorm ( n, wa2 )
+          fnorm = fnorm1
+          iter = iter + 1
+        end if
+!
+!  Determine the progress of the iteration.
+!
+        nslow1 = nslow1 + 1
+        if ( 0.001D+00 <= actred ) then
+          nslow1 = 0
+        end if
+
+        if ( jeval ) then
+          nslow2 = nslow2 + 1
+        end if
+
+        if ( 0.1D+00 <= actred ) then
+          nslow2 = 0
+        end if
+!
+!  Test for convergence.
+!
+        if ( delta <= xtol * xnorm .or. fnorm == 0.0D+00 ) then
+          info = 1
+        end if
+
+        if ( info /= 0 ) then
+          go to 300
+        end if
+!
+!  Tests for termination and stringent tolerances.
+!
+        if ( maxfev <= nfev ) then
+          info = 2
+        end if
+
+        if ( 0.1D+00 * max ( 0.1D+00 * delta, pnorm ) <= epsmch * xnorm ) then
+          info = 3
+        end if
+
+        if ( nslow2 == 5 ) then
+          info = 4
+        end if
+
+        if ( nslow1 == 10 ) then
+          info = 5
+        end if
+
+        if ( info /= 0 ) then
+          go to 300
+        end if
+!
+!  Criterion for recalculating jacobian approximation
+!  by forward differences.
+!
+        if ( ncfail == 2 ) then
+          go to 290
+        end if
+!
+!  Calculate the rank one modification to the jacobian
+!  and update QTF if necessary.
+!
+        do j = 1, n
+          sum2 = dot_product ( wa4(1:n), fjac(1:n,j) )
+          wa2(j) = ( sum2 - wa3(j) ) / pnorm
+          wa1(j) = diag(j) * ( ( diag(j) * wa1(j) ) / pnorm )
+          if ( 0.0001D+00 <= ratio ) then
+            qtf(j) = sum2
+          end if
+        end do
+!
+!  Compute the QR factorization of the updated jacobian.
+!
+        call r1updt ( n, n, r, lr, wa1, wa2, wa3, sing )
+        call r1mpyq ( n, n, fjac, ldfjac, wa2, wa3 )
+        call r1mpyq ( 1, n, qtf, 1, wa2, wa3 )
+!
+!  End of the inner loop.
+!
+        jeval = .false.
+        go to 180
+
+  290   continue
+!
+!  End of the outer loop.
+!
+     go to 30
+
+  300 continue
+!
+!  Termination, either normal or user imposed.
+!
+  if ( iflag < 0 ) then
+    info = iflag
+  end if
+
+  iflag = 0
+
+  if ( 0 < nprint ) then
+    call fcn ( n, x, fvec, iflag )
+  end if
+
+  return
+end
+subroutine hybrd1 ( fcn, n, x, fvec, tol, info )
+
+!*****************************************************************************80
+!
+!! HYBRD1 seeks a zero of N nonlinear equations in N variables.
+!
+!  Discussion:
+!
+!    HYBRD1 finds a zero of a system of N nonlinear functions in N variables
+!    by a modification of the Powell hybrid method.  This is done by using the
+!    more general nonlinear equation solver HYBRD.  The user must provide a
+!    subroutine which calculates the functions.  The jacobian is then
+!    calculated by a forward-difference approximation.
+!
+!  Licensing:
+!
+!    This code is distributed under the GNU LGPL license.
+!
+!  Modified:
+!
+!    19 August 2016
+!
+!  Author:
+!
+!    Original FORTRAN77 version by Jorge More, Burton Garbow, Kenneth Hillstrom.
+!    FORTRAN90 version by John Burkardt.
+!
+!  Reference:
+!
+!    Jorge More, Burton Garbow, Kenneth Hillstrom,
+!    User Guide for MINPACK-1,
+!    Technical Report ANL-80-74,
+!    Argonne National Laboratory, 1980.
+!
+!  Parameters:
+!
+!    Input, external FCN, the name of the user-supplied subroutine which
+!    calculates the functions.  The routine should have the form:
+!      subroutine fcn ( n, x, fvec, iflag )
+!      integer ( kind = 4 ) n
+!      real ( kind = 8 ) fvec(n)
+!      integer ( kind = 4 ) iflag
+!      real ( kind = 8 ) x(n)
+!    If IFLAG = 0 on input, then FCN is only being called to allow the user
+!    to print out the current iterate.
+!    If IFLAG = 1 on input, FCN should calculate the functions at X and
+!    return this vector in FVEC.
+!    To terminate the algorithm, FCN may set IFLAG negative on return.
+!
+!    Input, integer ( kind = 4 ) N, the number of functions and variables.
+!
+!    Input/output, real ( kind = 8 ) X(N).  On input, X must contain an initial
+!    estimate of the solution vector.  On output X contains the final
+!    estimate of the solution vector.
+!
+!    Output, real ( kind = 8 ) FVEC(N), the functions evaluated at the output X.
+!
+!    Input, real ( kind = 8 ) TOL.  Termination occurs when the algorithm
+!    estimates that the relative error between X and the solution is at
+!    most TOL.  TOL should be nonnegative.
+!
+!    Output, integer ( kind = 4 ) INFO, error flag.  If the user has terminated
+!    execution, INFO is set to the (negative) value of IFLAG. See the
+!    description of FCN.
+!    Otherwise, INFO is set as follows:
+!    0, improper input parameters.
+!    1, algorithm estimates that the relative error between X and the
+!       solution is at most TOL.
+!    2, number of calls to FCN has reached or exceeded 200*(N+1).
+!    3, TOL is too small.  No further improvement in the approximate
+!       solution X is possible.
+!    4, the iteration is not making good progress.
+!
+  implicit none
+
+  integer ( kind = 4 ) lwa
+  integer ( kind = 4 ) n
+
+  real ( kind = 8 ) diag(n)
+  real ( kind = 8 ) epsfcn
+  real ( kind = 8 ) factor
+  external fcn
+  real ( kind = 8 ) fjac(n,n)
+  real ( kind = 8 ) fvec(n)
+  integer ( kind = 4 ) info
+  integer ( kind = 4 ) j
+  integer ( kind = 4 ) ldfjac
+  integer ( kind = 4 ) lr
+  integer ( kind = 4 ) maxfev
+  integer ( kind = 4 ) ml
+  integer ( kind = 4 ) mode
+  integer ( kind = 4 ) mu
+  integer ( kind = 4 ) nfev
+  integer ( kind = 4 ) nprint
+  real ( kind = 8 ) qtf(n)
+  real ( kind = 8 ) r((n*(n+1))/2)
+  real ( kind = 8 ) tol
+  real ( kind = 8 ) x(n)
+  real ( kind = 8 ) xtol
+
+  if ( n <= 0 ) then
+    info = 0
+    return
+  end if
+
+  if ( tol < 0.0D+00 ) then
+    info = 0
+    return
+  end if
+
+  xtol = tol
+  maxfev = 200 * ( n + 1 )
+  ml = n - 1
+  mu = n - 1
+  epsfcn = 0.0D+00
+  diag(1:n) = 1.0D+00
+  mode = 2
+  factor = 100.0D+00
+  nprint = 0
+  info = 0
+  nfev = 0
+  fjac(1:n,1:n) = 0.0D+00
+  ldfjac = n
+  r(1:(n*(n+1))/2) = 0.0D+00
+  lr = ( n * ( n + 1 ) ) / 2
+  qtf(1:n) = 0.0D+00
+
+  call hybrd ( fcn, n, x, fvec, xtol, maxfev, ml, mu, epsfcn, diag, mode, &
+    factor, nprint, info, nfev, fjac, ldfjac, r, lr, qtf )
+
+  if ( info == 5 ) then
+    info = 4
+  end if
+
+  return
+end
+subroutine hybrj ( fcn, n, x, fvec, fjac, ldfjac, xtol, maxfev, diag, mode, &
+  factor, nprint, info, nfev, njev, r, lr, qtf )
+
+!*****************************************************************************80
+!
+!! HYBRJ seeks a zero of N nonlinear equations in N variables.
+!
+!  Discussion:
+!
+!    HYBRJ finds a zero of a system of N nonlinear functions in N variables
+!    by a modification of the Powell hybrid method.  The user must provide a
+!    subroutine which calculates the functions and the jacobian.
+!
+!  Licensing:
+!
+!    This code is distributed under the GNU LGPL license.
+!
+!  Modified:
+!
+!    06 April 2010
+!
+!  Author:
+!
+!    Original FORTRAN77 version by Jorge More, Burton Garbow, Kenneth Hillstrom.
+!    FORTRAN90 version by John Burkardt.
+!
+!  Reference:
+!
+!    Jorge More, Burton Garbow, Kenneth Hillstrom,
+!    User Guide for MINPACK-1,
+!    Technical Report ANL-80-74,
+!    Argonne National Laboratory, 1980.
+!
+!  Parameters:
+!
+!    Input, external FCN, the name of the user-supplied subroutine which
+!    calculates the functions and the jacobian.  FCN should have the form:
+!
+!      subroutine fcn ( n, x, fvec, fjac, ldfjac, iflag )
+!      integer ( kind = 4 ) ldfjac
+!      integer ( kind = 4 ) n
+!      real ( kind = 8 ) fjac(ldfjac,n)
+!      real ( kind = 8 ) fvec(n)
+!      integer ( kind = 4 ) iflag
+!      real ( kind = 8 ) x(n)
+!
+!    If IFLAG = 0 on input, then FCN is only being called to allow the user
+!    to print out the current iterate.
+!    If IFLAG = 1 on input, FCN should calculate the functions at X and
+!    return this vector in FVEC.
+!    If IFLAG = 2 on input, FCN should calculate the jacobian at X and
+!    return this matrix in FJAC.
+!    To terminate the algorithm, FCN may set IFLAG negative on return.
+!
+!    Input, integer ( kind = 4 ) N, the number of functions and variables.
+!
+!    Input/output, real ( kind = 8 ) X(N).  On input, X must contain an initial
+!    estimate of the solution vector.  On output X contains the final
+!    estimate of the solution vector.
+!
+!    Output, real ( kind = 8 ) FVEC(N), the functions evaluated at the output X.
+!
+!    Output, real ( kind = 8 ) FJAC(LDFJAC,N), an N by N matrix, containing
+!    the orthogonal matrix Q produced by the QR factorization
+!    of the final approximate jacobian.
+!
+!    Input, integer ( kind = 4 ) LDFJAC, the leading dimension of the
+!    array FJAC.  LDFJAC must be at least N.
+!
+!    Input, real ( kind = 8 ) XTOL.  Termination occurs when the relative error
+!    between two consecutive iterates is at most XTOL.  XTOL should be
+!    nonnegative.
+!
+!    Input, integer ( kind = 4 ) MAXFEV.  Termination occurs when the number of
+!    calls to FCN is at least MAXFEV by the end of an iteration.
+!
+!    Input/output, real ( kind = 8 ) DIAG(N).  If MODE = 1, then DIAG is set
+!    internally.  If MODE = 2, then DIAG must contain positive entries that
+!    serve as multiplicative scale factors for the variables.
+!
+!    Input, integer ( kind = 4 ) MODE, scaling option.
+!    1, variables will be scaled internally.
+!    2, scaling is specified by the input DIAG vector.
+!
+!    Input, real ( kind = 8 ) FACTOR, determines the initial step bound.  This
+!    bound is set to the product of FACTOR and the euclidean norm of DIAG*X if
+!    nonzero, or else to FACTOR itself.  In most cases, FACTOR should lie
+!    in the interval (0.1, 100) with 100 the recommended value.
+!
+!    Input, integer ( kind = 4 ) NPRINT, enables controlled printing of iterates
+!    if it is positive.  In this case, FCN is called with IFLAG = 0 at the
+!    beginning of the first iteration and every NPRINT iterations thereafter
+!    and immediately prior to return, with X and FVEC available
+!    for printing.  If NPRINT is not positive, no special calls
+!    of FCN with IFLAG = 0 are made.
+!
+!    Output, integer ( kind = 4 ) INFO, error flag.  If the user has terminated
+!    execution, INFO is set to the (negative) value of IFLAG.  
+!    See the description of FCN.  Otherwise, INFO is set as follows:
+!    0, improper input parameters.
+!    1, relative error between two consecutive iterates is at most XTOL.
+!    2, number of calls to FCN with IFLAG = 1 has reached MAXFEV.
+!    3, XTOL is too small.  No further improvement in
+!       the approximate solution X is possible.
+!    4, iteration is not making good progress, as measured by the
+!       improvement from the last five jacobian evaluations.
+!    5, iteration is not making good progress, as measured by the
+!       improvement from the last ten iterations.
+!
+!    Output, integer ( kind = 4 ) NFEV, the number of calls to FCN 
+!    with IFLAG = 1.
+!
+!    Output, integer ( kind = 4 ) NJEV, the number of calls to FCN 
+!    with IFLAG = 2.
+!
+!    Output, real ( kind = 8 ) R(LR), the upper triangular matrix produced
+!    by the QR factorization of the final approximate jacobian, stored rowwise.
+!
+!    Input, integer ( kind = 4 ) LR, the size of the R array, which must 
+!    be no less than (N*(N+1))/2.
+!
+!    Output, real ( kind = 8 ) QTF(N), contains the vector Q'*FVEC.
+!
+  implicit none
+
+  integer ( kind = 4 ) ldfjac
+  integer ( kind = 4 ) lr
+  integer ( kind = 4 ) n
+
+  real ( kind = 8 ) actred
+  real ( kind = 8 ) delta
+  real ( kind = 8 ) diag(n)
+  real ( kind = 8 ) enorm
+  real ( kind = 8 ) epsmch
+  real ( kind = 8 ) factor
+  external fcn
+  real ( kind = 8 ) fjac(ldfjac,n)
+  real ( kind = 8 ) fnorm
+  real ( kind = 8 ) fnorm1
+  real ( kind = 8 ) fvec(n)
+  integer ( kind = 4 ) i
+  integer ( kind = 4 ) iflag
+  integer ( kind = 4 ) info
+  integer ( kind = 4 ) iter
+  integer ( kind = 4 ) iwa(1)
+  integer ( kind = 4 ) j
+  logical jeval
+  integer ( kind = 4 ) l
+  integer ( kind = 4 ) maxfev
+  integer ( kind = 4 ) mode
+  integer ( kind = 4 ) ncfail
+  integer ( kind = 4 ) nslow1
+  integer ( kind = 4 ) nslow2
+  integer ( kind = 4 ) ncsuc
+  integer ( kind = 4 ) nfev
+  integer ( kind = 4 ) njev
+  integer ( kind = 4 ) nprint
+  logical pivot
+  real ( kind = 8 ) pnorm
+  real ( kind = 8 ) prered
+  real ( kind = 8 ) qtf(n)
+  real ( kind = 8 ) r(lr)
+  real ( kind = 8 ) ratio
+  logical sing
+  real ( kind = 8 ) sum2
+  real ( kind = 8 ) temp
+  real ( kind = 8 ) wa1(n)
+  real ( kind = 8 ) wa2(n)
+  real ( kind = 8 ) wa3(n)
+  real ( kind = 8 ) wa4(n)
+  real ( kind = 8 ) x(n)
+  real ( kind = 8 ) xnorm
+  real ( kind = 8 ) xtol
+
+  epsmch = epsilon ( epsmch )
+
+  info = 0
+  iflag = 0
+  nfev = 0
+  njev = 0
+!
+!  Check the input parameters for errors.
+!
+  if ( n <= 0 ) then
+    if ( iflag < 0 ) then
+      info = iflag
+    end if
+    iflag = 0
+    if ( 0 < nprint ) then
+      call fcn ( n, x, fvec, fjac, ldfjac, iflag )
+    end if
+    return
+  end if
+
+  if ( ldfjac < n .or. &
+       xtol < 0.0D+00 .or. &
+       maxfev <= 0 .or. &
+       factor <= 0.0D+00 .or. &
+       lr < ( n * ( n + 1 ) ) / 2 ) then
+    if ( iflag < 0 ) then
+      info = iflag
+    end if
+    iflag = 0
+    if ( 0 < nprint ) then
+      call fcn ( n, x, fvec, fjac, ldfjac, iflag )
+    end if
+    return
+  end if
+
+  if ( mode == 2 ) then
+    do j = 1, n
+      if ( diag(j) <= 0.0D+00 ) then
+        if ( iflag < 0 ) then
+          info = iflag
+        end if
+        iflag = 0
+        if ( 0 < nprint ) then
+          call fcn ( n, x, fvec, fjac, ldfjac, iflag )
+        end if
+        return
+      end if
+    end do
+  end if
+!
+!  Evaluate the function at the starting point and calculate its norm.
+!
+  iflag = 1
+  call fcn ( n, x, fvec, fjac, ldfjac, iflag )
+  nfev = 1
+
+  if ( iflag < 0 ) then
+    if ( iflag < 0 ) then
+      info = iflag
+    end if
+    iflag = 0
+    if ( 0 < nprint ) then
+      call fcn ( n, x, fvec, fjac, ldfjac, iflag )
+    end if
+    return
+  end if
+
+  fnorm = enorm ( n, fvec )
+!
+!  Initialize iteration counter and monitors.
+!
+  iter = 1
+  ncsuc = 0
+  ncfail = 0
+  nslow1 = 0
+  nslow2 = 0
+!
+!  Beginning of the outer loop.
+!
+  do
+
+    jeval = .true.
+!
+!  Calculate the jacobian matrix.
+!
+    iflag = 2
+    call fcn ( n, x, fvec, fjac, ldfjac, iflag )
+    njev = njev + 1
+
+    if ( iflag < 0 ) then
+      info = iflag
+      iflag = 0
+      if ( 0 < nprint ) then
+        call fcn ( n, x, fvec, fjac, ldfjac, iflag )
+      end if
+      return
+    end if
+!
+!  Compute the QR factorization of the jacobian.
+!
+    pivot = .false.
+    call qrfac ( n, n, fjac, ldfjac, pivot, iwa, 1, wa1, wa2 )
+!
+!  On the first iteration, if MODE is 1, scale according
+!  to the norms of the columns of the initial jacobian.
+!
+    if ( iter == 1 ) then
+
+      if ( mode /= 2 ) then
+        diag(1:n) = wa2(1:n)
+        do j = 1, n
+          if ( wa2(j) == 0.0D+00 ) then
+            diag(j) = 1.0D+00
+          end if
+        end do
+      end if
+!
+!  On the first iteration, calculate the norm of the scaled X
+!  and initialize the step bound DELTA.
+!
+      wa3(1:n) = diag(1:n) * x(1:n)
+      xnorm = enorm ( n, wa3 )
+      delta = factor * xnorm
+      if ( delta == 0.0D+00 ) then
+        delta = factor
+      end if
+
+    end if
+!
+!  Form Q'*FVEC and store in QTF.
+!
+    qtf(1:n) = fvec(1:n)
+
+    do j = 1, n
+      if ( fjac(j,j) /= 0.0D+00 ) then
+        sum2 = 0.0D+00
+        do i = j, n
+          sum2 = sum2 + fjac(i,j) * qtf(i)
+        end do
+        temp = - sum2 / fjac(j,j)
+        do i = j, n
+          qtf(i) = qtf(i) + fjac(i,j) * temp
+        end do
+      end if
+    end do
+!
+!  Copy the triangular factor of the QR factorization into R.
+!
+    sing = .false.
+
+    do j = 1, n
+      l = j
+      do i = 1, j - 1
+        r(l) = fjac(i,j)
+        l = l + n - i
+      end do
+      r(l) = wa1(j)
+      if ( wa1(j) == 0.0D+00 ) then
+        sing = .true.
+      end if
+    end do
+!
+!  Accumulate the orthogonal factor in FJAC.
+!
+    call qform ( n, n, fjac, ldfjac )
+!
+!  Rescale if necessary.
+!
+    if ( mode /= 2 ) then
+      do j = 1, n
+        diag(j) = max ( diag(j), wa2(j) )
+      end do
+    end if
+!
+!  Beginning of the inner loop.
+!
+    do
+!
+!  If requested, call FCN to enable printing of iterates.
+!
+      if ( 0 < nprint ) then
+
+        iflag = 0
+        if ( mod ( iter - 1, nprint ) == 0 ) then
+          call fcn ( n, x, fvec, fjac, ldfjac, iflag )
+        end if
+
+        if ( iflag < 0 ) then
+          info = iflag
+          iflag = 0
+          if ( 0 < nprint ) then
+            call fcn ( n, x, fvec, fjac, ldfjac, iflag )
+          end if
+          return
+        end if
+
+      end if
+!
+!  Determine the direction P.
+!
+      call dogleg ( n, r, lr, diag, qtf, delta, wa1 )
+!
+!  Store the direction P and X + P.
+!  Calculate the norm of P.
+!
+      wa1(1:n) = - wa1(1:n)
+      wa2(1:n) = x(1:n) + wa1(1:n)
+      wa3(1:n) = diag(1:n) * wa1(1:n)
+      pnorm = enorm ( n, wa3 )
+!
+!  On the first iteration, adjust the initial step bound.
+!
+      if ( iter == 1 ) then
+        delta = min ( delta, pnorm )
+      end if
+!
+!  Evaluate the function at X + P and calculate its norm.
+!
+      iflag = 1
+      call fcn ( n, wa2, wa4, fjac, ldfjac, iflag )
+      nfev = nfev + 1
+
+      if ( iflag < 0 ) then
+        info = iflag
+        iflag = 0
+        if ( 0 < nprint ) then
+          call fcn ( n, x, fvec, fjac, ldfjac, iflag )
+        end if
+        return
+      end if
+
+      fnorm1 = enorm ( n, wa4 )
+!
+!  Compute the scaled actual reduction.
+!
+      actred = -1.0D+00
+      if ( fnorm1 < fnorm ) then
+        actred = 1.0D+00 - ( fnorm1 / fnorm ) ** 2
+      end if
+!
+!  Compute the scaled predicted reduction.
+!
+      l = 1
+      do i = 1, n
+        sum2 = 0.0D+00
+        do j = i, n
+          sum2 = sum2 + r(l) * wa1(j)
+          l = l + 1
+        end do
+        wa3(i) = qtf(i) + sum2
+      end do
+
+      temp = enorm ( n, wa3 )
+      prered = 0.0D+00
+      if ( temp < fnorm ) then
+        prered = 1.0D+00 - ( temp / fnorm ) ** 2
+      end if
+!
+!  Compute the ratio of the actual to the predicted reduction.
+!
+      if ( 0.0D+00 < prered ) then
+        ratio = actred / prered
+      else
+        ratio = 0.0D+00
+      end if
+!
+!  Update the step bound.
+!
+      if ( ratio < 0.1D+00 ) then
+
+        ncsuc = 0
+        ncfail = ncfail + 1
+        delta = 0.5D+00 * delta
+
+      else
+
+        ncfail = 0
+        ncsuc = ncsuc + 1
+
+        if ( 0.5D+00 <= ratio .or. 1 < ncsuc ) then
+          delta = max ( delta, pnorm / 0.5D+00 )
+        end if
+
+        if ( abs ( ratio - 1.0D+00 ) <= 0.1D+00 ) then
+          delta = pnorm / 0.5D+00
+        end if
+
+      end if
+!
+!  Test for successful iteration.
+!
+
+!
+!  Successful iteration.
+!  Update X, FVEC, and their norms.
+!
+      if ( 0.0001D+00 <= ratio ) then
+        x(1:n) = wa2(1:n)
+        wa2(1:n) = diag(1:n) * x(1:n)
+        fvec(1:n) = wa4(1:n)
+        xnorm = enorm ( n, wa2 )
+        fnorm = fnorm1
+        iter = iter + 1
+      end if
+!
+!  Determine the progress of the iteration.
+!
+      nslow1 = nslow1 + 1
+      if ( 0.001D+00 <= actred ) then
+        nslow1 = 0
+      end if
+
+      if ( jeval ) then
+        nslow2 = nslow2 + 1
+      end if
+
+      if ( 0.1D+00 <= actred ) then
+        nslow2 = 0
+      end if
+!
+!  Test for convergence.
+!
+      if ( delta <= xtol * xnorm .or. fnorm == 0.0D+00 ) then
+        info = 1
+      end if
+
+      if ( info /= 0 ) then
+        iflag = 0
+        if ( 0 < nprint ) then
+          call fcn ( n, x, fvec, fjac, ldfjac, iflag )
+        end if
+        return
+      end if
+!
+!  Tests for termination and stringent tolerances.
+!
+      if ( maxfev <= nfev ) then
+        info = 2
+      end if
+
+      if ( 0.1D+00 * max ( 0.1D+00 * delta, pnorm ) <= epsmch * xnorm ) then
+        info = 3
+      end if
+
+      if ( nslow2 == 5 ) then
+        info = 4
+      end if
+
+      if ( nslow1 == 10 ) then
+        info = 5
+      end if
+
+      if ( info /= 0 ) then
+        iflag = 0
+        if ( 0 < nprint ) then
+          call fcn ( n, x, fvec, fjac, ldfjac, iflag )
+        end if
+        return
+      end if
+!
+!  Criterion for recalculating jacobian.
+!
+      if ( ncfail == 2 ) then
+        exit
+      end if
+!
+!  Calculate the rank one modification to the jacobian
+!  and update QTF if necessary.
+!
+      do j = 1, n
+        sum2 = dot_product ( wa4(1:n), fjac(1:n,j) )
+        wa2(j) = ( sum2 - wa3(j) ) / pnorm
+        wa1(j) = diag(j) * ( ( diag(j) * wa1(j) ) / pnorm )
+        if ( 0.0001D+00 <= ratio ) then
+          qtf(j) = sum2
+        end if
+      end do
+!
+!  Compute the QR factorization of the updated jacobian.
+!
+      call r1updt ( n, n, r, lr, wa1, wa2, wa3, sing )
+      call r1mpyq ( n, n, fjac, ldfjac, wa2, wa3 )
+      call r1mpyq ( 1, n, qtf, 1, wa2, wa3 )
+!
+!  End of the inner loop.
+!
+      jeval = .false.
+
+    end do
+!
+!  End of the outer loop.
+!
+  end do
+
+end
+subroutine hybrj1 ( fcn, n, x, fvec, fjac, ldfjac, tol, info )
+
+!*****************************************************************************80
+!
+!! HYBRJ1 seeks a zero of N equations in N variables by Powell's method.
+!
+!  Discussion:
+!
+!    HYBRJ1 finds a zero of a system of N nonlinear functions in N variables
+!    by a modification of the Powell hybrid method.  This is done by using the
+!    more general nonlinear equation solver HYBRJ.  The user
+!    must provide a subroutine which calculates the functions
+!    and the jacobian.
+!
+!  Licensing:
+!
+!    This code is distributed under the GNU LGPL license.
+!
+!  Modified:
+!
+!    06 April 2010
+!
+!  Author:
+!
+!    Original FORTRAN77 version by Jorge More, Burton Garbow, Kenneth Hillstrom.
+!    FORTRAN90 version by John Burkardt.
+!
+!  Reference:
+!
+!    Jorge More, Burton Garbow, Kenneth Hillstrom,
+!    User Guide for MINPACK-1,
+!    Technical Report ANL-80-74,
+!    Argonne National Laboratory, 1980.
+!
+!  Parameters:
+!
+!    Input, external FCN, the name of the user-supplied subroutine which
+!    calculates the functions and the jacobian.  FCN should have the form:
+!      subroutine fcn ( n, x, fvec, fjac, ldfjac, iflag )
+!      integer ( kind = 4 ) ldfjac
+!      integer ( kind = 4 ) n
+!      real ( kind = 8 ) fjac(ldfjac,n)
+!      real ( kind = 8 ) fvec(n)
+!      integer ( kind = 4 ) iflag
+!      real ( kind = 8 ) x(n)
+!
+!    If IFLAG = 0 on input, then FCN is only being called to allow the user
+!    to print out the current iterate.
+!    If IFLAG = 1 on input, FCN should calculate the functions at X and
+!    return this vector in FVEC.
+!    If IFLAG = 2 on input, FCN should calculate the jacobian at X and
+!    return this matrix in FJAC.
+!    To terminate the algorithm, FCN may set IFLAG negative on return.
+!
+!    Input, integer ( kind = 4 ) N, the number of functions and variables.
+!
+!    Input/output, real ( kind = 8 ) X(N).  On input, X must contain an initial
+!    estimate of the solution vector.  On output X contains the final
+!    estimate of the solution vector.
+!
+!    Output, real ( kind = 8 ) FVEC(N), the functions evaluated at the output X.
+!
+!    Output, real ( kind = 8 ) FJAC(LDFJAC,N), an N by N array which contains
+!    the orthogonal matrix Q produced by the QR factorization of the final
+!    approximate jacobian.
+!
+!    Input, integer ( kind = 4 ) LDFJAC, the leading dimension of  FJAC.
+!    LDFJAC must be at least N.
+!
+!    Input, real ( kind = 8 ) TOL.  Termination occurs when the algorithm
+!    estimates that the relative error between X and the solution is at most
+!    TOL.  TOL should be nonnegative.
+!
+!    Output, integer ( kind = 4 ) INFO, error flag.  If the user has terminated
+!    execution, INFO is set to the (negative) value of IFLAG. See description
+!    of FCN.  Otherwise, INFO is set as follows:
+!    0, improper input parameters.
+!    1, algorithm estimates that the relative error between X and the
+!       solution is at most TOL.
+!    2, number of calls to FCN with IFLAG = 1 has reached 100*(N+1).
+!    3, TOL is too small.  No further improvement in the approximate
+!       solution X is possible.
+!    4, iteration is not making good progress.
+!
+  implicit none
+
+  integer ( kind = 4 ) ldfjac
+  integer ( kind = 4 ) n
+
+  real ( kind = 8 ) diag(n)
+  real ( kind = 8 ) factor
+  external fcn
+  real ( kind = 8 ) fjac(ldfjac,n)
+  real ( kind = 8 ) fvec(n)
+  integer ( kind = 4 ) info
+  integer ( kind = 4 ) j
+  integer ( kind = 4 ) lr
+  integer ( kind = 4 ) maxfev
+  integer ( kind = 4 ) mode
+  integer ( kind = 4 ) nfev
+  integer ( kind = 4 ) njev
+  integer ( kind = 4 ) nprint
+  real ( kind = 8 ) qtf(n)
+  real ( kind = 8 ) r((n*(n+1))/2)
+  real ( kind = 8 ) tol
+  real ( kind = 8 ) x(n)
+  real ( kind = 8 ) xtol
+
+  info = 0
+
+  if ( n <= 0 ) then
+    return
+  else if ( ldfjac < n ) then
+    return
+  else if ( tol < 0.0D+00 ) then
+    return
+  end if
+
+  maxfev = 100 * ( n + 1 )
+  xtol = tol
+  mode = 2
+  diag(1:n) = 1.0D+00
+  factor = 100.0D+00
+  nprint = 0
+  lr = ( n * ( n + 1 ) ) / 2
+
+  call hybrj ( fcn, n, x, fvec, fjac, ldfjac, xtol, maxfev, diag, mode, &
+    factor, nprint, info, nfev, njev, r, lr, qtf )
+
+  if ( info == 5 ) then
+    info = 4
+  end if
+
+  return
+end
+subroutine lmder ( fcn, m, n, x, fvec, fjac, ldfjac, ftol, xtol, gtol, maxfev, &
+  diag, mode, factor, nprint, info, nfev, njev, ipvt, qtf )
+
+!*****************************************************************************80
+!
+!! LMDER minimizes M functions in N variables by the Levenberg-Marquardt method.
+!
+!  Discussion:
+!
+!    LMDER minimizes the sum of the squares of M nonlinear functions in
+!    N variables by a modification of the Levenberg-Marquardt algorithm.
+!    The user must provide a subroutine which calculates the functions
+!    and the jacobian.
+!
+!  Licensing:
+!
+!    This code is distributed under the GNU LGPL license.
+!
+!  Modified:
+!
+!    06 April 2010
+!
+!  Author:
+!
+!    Original FORTRAN77 version by Jorge More, Burton Garbow, Kenneth Hillstrom.
+!    FORTRAN90 version by John Burkardt.
+!
+!  Reference:
+!
+!    Jorge More, Burton Garbow, Kenneth Hillstrom,
+!    User Guide for MINPACK-1,
+!    Technical Report ANL-80-74,
+!    Argonne National Laboratory, 1980.
+!
+!  Parameters:
+!
+!    Input, external FCN, the name of the user-supplied subroutine which
+!    calculates the functions and the jacobian.  FCN should have the form:
+!      subroutine fcn ( m, n, x, fvec, fjac, ldfjac, iflag )
+!      integer ( kind = 4 ) ldfjac
+!      integer ( kind = 4 ) n
+!      real ( kind = 8 ) fjac(ldfjac,n)
+!      real ( kind = 8 ) fvec(m)
+!      integer ( kind = 4 ) iflag
+!      real ( kind = 8 ) x(n)
+!
+!    If IFLAG = 0 on input, then FCN is only being called to allow the user
+!    to print out the current iterate.
+!    If IFLAG = 1 on input, FCN should calculate the functions at X and
+!    return this vector in FVEC.
+!    If IFLAG = 2 on input, FCN should calculate the jacobian at X and
+!    return this matrix in FJAC.
+!    To terminate the algorithm, FCN may set IFLAG negative on return.
+!
+!    Input, integer ( kind = 4 ) M, is the number of functions.
+!
+!    Input, integer ( kind = 4 ) N, is the number of variables.  
+!    N must not exceed M.
+!
+!    Input/output, real ( kind = 8 ) X(N).  On input, X must contain an initial
+!    estimate of the solution vector.  On output X contains the final
+!    estimate of the solution vector.
+!
+!    Output, real ( kind = 8 ) FVEC(M), the functions evaluated at the output X.
+!
+!    Output, real ( kind = 8 ) FJAC(LDFJAC,N), an M by N array.  The upper
+!    N by N submatrix of FJAC contains an upper triangular matrix R with
+!    diagonal elements of nonincreasing magnitude such that
+!      P' * ( JAC' * JAC ) * P = R' * R,
+!    where P is a permutation matrix and JAC is the final calculated jacobian.
+!    Column J of P is column IPVT(J) of the identity matrix.  The lower
+!    trapezoidal part of FJAC contains information generated during
+!    the computation of R.
+!
+!    Input, integer ( kind = 4 ) LDFJAC, the leading dimension of FJAC.
+!    LDFJAC must be at least M.
+!
+!    Input, real ( kind = 8 ) FTOL.  Termination occurs when both the actual
+!    and predicted relative reductions in the sum of squares are at most FTOL.
+!    Therefore, FTOL measures the relative error desired in the sum of
+!    squares.  FTOL should be nonnegative.
+!
+!    Input, real ( kind = 8 ) XTOL.  Termination occurs when the relative error
+!    between two consecutive iterates is at most XTOL.  XTOL should be
+!    nonnegative.
+!
+!    Input, real ( kind = 8 ) GTOL.  Termination occurs when the cosine of the
+!    angle between FVEC and any column of the jacobian is at most GTOL in
+!    absolute value.  Therefore, GTOL measures the orthogonality desired
+!    between the function vector and the columns of the jacobian.  GTOL should
+!    be nonnegative.
+!
+!    Input, integer ( kind = 4 ) MAXFEV.  Termination occurs when the number of
+!    calls to FCN with IFLAG = 1 is at least MAXFEV by the end of an iteration.
+!
+!    Input/output, real ( kind = 8 ) DIAG(N).  If MODE = 1, then DIAG is set
+!    internally.  If MODE = 2, then DIAG must contain positive entries that
+!    serve as multiplicative scale factors for the variables.
+!
+!    Input, integer ( kind = 4 ) MODE, scaling option.
+!    1, variables will be scaled internally.
+!    2, scaling is specified by the input DIAG vector.
+!
+!    Input, real ( kind = 8 ) FACTOR, determines the initial step bound.  This
+!    bound is set to the product of FACTOR and the euclidean norm of DIAG*X if
+!    nonzero, or else to FACTOR itself.  In most cases, FACTOR should lie
+!    in the interval (0.1, 100) with 100 the recommended value.
+!
+!    Input, integer ( kind = 4 ) NPRINT, enables controlled printing of iterates
+!    if it is positive.  In this case, FCN is called with IFLAG = 0 at the
+!    beginning of the first iteration and every NPRINT iterations thereafter
+!    and immediately prior to return, with X and FVEC available
+!    for printing.  If NPRINT is not positive, no special calls
+!    of FCN with IFLAG = 0 are made.
+!
+!    Output, integer ( kind = 4 ) INFO, error flag.  If the user has terminated
+!    execution, INFO is set to the (negative) value of IFLAG. See description
+!    of FCN.  Otherwise, INFO is set as follows:
+!    0, improper input parameters.
+!    1, both actual and predicted relative reductions in the sum of
+!       squares are at most FTOL.
+!    2, relative error between two consecutive iterates is at most XTOL.
+!    3, conditions for INFO = 1 and INFO = 2 both hold.
+!    4, the cosine of the angle between FVEC and any column of the jacobian
+!       is at most GTOL in absolute value.
+!    5, number of calls to FCN with IFLAG = 1 has reached MAXFEV.
+!    6, FTOL is too small.  No further reduction in the sum of squares
+!       is possible.
+!    7, XTOL is too small.  No further improvement in the approximate
+!       solution X is possible.
+!    8, GTOL is too small.  FVEC is orthogonal to the columns of the
+!       jacobian to machine precision.
+!
+!    Output, integer ( kind = 4 ) NFEV, the number of calls to FCN with
+!    IFLAG = 1.
+!
+!    Output, integer ( kind = 4 ) NJEV, the number of calls to FCN with
+!    IFLAG = 2.
+!
+!    Output, integer ( kind = 4 ) IPVT(N), defines a permutation matrix P
+!    such that JAC*P = Q*R, where JAC is the final calculated jacobian, Q is
+!    orthogonal (not stored), and R is upper triangular with diagonal
+!    elements of nonincreasing magnitude.  Column J of P is column
+!    IPVT(J) of the identity matrix.
+!
+!    Output, real ( kind = 8 ) QTF(N), contains the first N elements of Q'*FVEC.
+!
+  implicit none
+
+  integer ( kind = 4 ) ldfjac
+  integer ( kind = 4 ) m
+  integer ( kind = 4 ) n
+
+  real ( kind = 8 ) actred
+  real ( kind = 8 ) delta
+  real ( kind = 8 ) diag(n)
+  real ( kind = 8 ) dirder
+  real ( kind = 8 ) enorm
+  real ( kind = 8 ) epsmch
+  real ( kind = 8 ) factor
+  external fcn
+  real ( kind = 8 ) fjac(ldfjac,n)
+  real ( kind = 8 ) fnorm
+  real ( kind = 8 ) fnorm1
+  real ( kind = 8 ) ftol
+  real ( kind = 8 ) fvec(m)
+  real ( kind = 8 ) gnorm
+  real ( kind = 8 ) gtol
+  integer ( kind = 4 ) i
+  integer ( kind = 4 ) iflag
+  integer ( kind = 4 ) info
+  integer ( kind = 4 ) ipvt(n)
+  integer ( kind = 4 ) iter
+  integer ( kind = 4 ) j
+  integer ( kind = 4 ) l
+  integer ( kind = 4 ) maxfev
+  integer ( kind = 4 ) mode
+  integer ( kind = 4 ) nfev
+  integer ( kind = 4 ) njev
+  integer ( kind = 4 ) nprint
+  real ( kind = 8 ) par
+  logical pivot
+  real ( kind = 8 ) pnorm
+  real ( kind = 8 ) prered
+  real ( kind = 8 ) qtf(n)
+  real ( kind = 8 ) ratio
+  real ( kind = 8 ) sum2
+  real ( kind = 8 ) temp
+  real ( kind = 8 ) temp1
+  real ( kind = 8 ) temp2
+  real ( kind = 8 ) wa1(n)
+  real ( kind = 8 ) wa2(n)
+  real ( kind = 8 ) wa3(n)
+  real ( kind = 8 ) wa4(m)
+  real ( kind = 8 ) xnorm
+  real ( kind = 8 ) x(n)
+  real ( kind = 8 ) xtol
+
+  epsmch = epsilon ( epsmch )
+
+  info = 0
+  iflag = 0
+  nfev = 0
+  njev = 0
+!
+!  Check the input parameters for errors.
+!
+  if ( n <= 0 ) then
+    go to 300
+  end if
+
+  if ( m < n ) then
+    go to 300
+  end if
+
+  if ( ldfjac < m &
+    .or. ftol < 0.0D+00 .or. xtol < 0.0D+00 .or. gtol < 0.0D+00 &
+     .or. maxfev <= 0 .or. factor <= 0.0D+00 ) then
+    go to 300
+  end if
+
+  if ( mode == 2 ) then
+    do j = 1, n
+      if ( diag(j) <= 0.0D+00 ) then
+        go to 300
+      end if
+    end do
+  end if
+!
+!  Evaluate the function at the starting point and calculate its norm.
+!
+  iflag = 1
+  call fcn ( m, n, x, fvec, fjac, ldfjac, iflag )
+  nfev = 1
+  if ( iflag < 0 ) then
+    go to 300
+  end if
+
+  fnorm = enorm ( m, fvec )
+!
+!  Initialize Levenberg-Marquardt parameter and iteration counter.
+!
+  par = 0.0D+00
+  iter = 1
+!
+!  Beginning of the outer loop.
+!
+30   continue
+!
+!  Calculate the jacobian matrix.
+!
+    iflag = 2
+    call fcn ( m, n, x, fvec, fjac, ldfjac, iflag )
+
+    njev = njev + 1
+
+    if ( iflag < 0 ) then
+      go to 300
+    end if
+!
+!  If requested, call FCN to enable printing of iterates.
+!
+    if ( 0 < nprint ) then
+      iflag = 0
+      if ( mod ( iter - 1, nprint ) == 0 ) then
+        call fcn ( m, n, x, fvec, fjac, ldfjac, iflag )
+      end if
+      if ( iflag < 0 ) then
+        go to 300
+      end if
+    end if
+!
+!  Compute the QR factorization of the jacobian.
+!
+    pivot = .true.
+    call qrfac ( m, n, fjac, ldfjac, pivot, ipvt, n, wa1, wa2 )
+!
+!  On the first iteration and if mode is 1, scale according
+!  to the norms of the columns of the initial jacobian.
+!
+    if ( iter == 1 ) then
+
+      if ( mode /= 2 ) then
+        diag(1:n) = wa2(1:n)
+        do j = 1, n
+          if ( wa2(j) == 0.0D+00 ) then
+            diag(j) = 1.0D+00
+          end if
+        end do
+      end if
+!
+!  On the first iteration, calculate the norm of the scaled X
+!  and initialize the step bound DELTA.
+!
+      wa3(1:n) = diag(1:n) * x(1:n)
+
+      xnorm = enorm ( n, wa3 )
+      delta = factor * xnorm
+      if ( delta == 0.0D+00 ) then
+        delta = factor
+      end if
+
+    end if
+!
+!  Form Q'*FVEC and store the first N components in QTF.
+!
+    wa4(1:m) = fvec(1:m)
+
+    do j = 1, n
+
+      if ( fjac(j,j) /= 0.0D+00 ) then
+        sum2 = dot_product ( wa4(j:m), fjac(j:m,j) )
+        temp = - sum2 / fjac(j,j)
+        wa4(j:m) = wa4(j:m) + fjac(j:m,j) * temp
+      end if
+
+      fjac(j,j) = wa1(j)
+      qtf(j) = wa4(j)
+
+    end do
+!
+!  Compute the norm of the scaled gradient.
+!
+    gnorm = 0.0D+00
+
+    if ( fnorm /= 0.0D+00 ) then
+
+      do j = 1, n
+        l = ipvt(j)
+        if ( wa2(l) /= 0.0D+00 ) then
+          sum2 = dot_product ( qtf(1:j), fjac(1:j,j) ) / fnorm
+          gnorm = max ( gnorm, abs ( sum2 / wa2(l) ) )
+        end if
+      end do
+
+    end if
+!
+!  Test for convergence of the gradient norm.
+!
+    if ( gnorm <= gtol ) then
+      info = 4
+      go to 300
+    end if
+!
+!  Rescale if necessary.
+!
+    if ( mode /= 2 ) then
+      do j = 1, n
+        diag(j) = max ( diag(j), wa2(j) )
+      end do
+    end if
+!
+!  Beginning of the inner loop.
+!
+200    continue
+!
+!  Determine the Levenberg-Marquardt parameter.
+!
+    call lmpar ( n, fjac, ldfjac, ipvt, diag, qtf, delta, par, wa1, wa2 )
+!
+!  Store the direction p and x + p. calculate the norm of p.
+!
+    wa1(1:n) = - wa1(1:n)
+    wa2(1:n) = x(1:n) + wa1(1:n)
+    wa3(1:n) = diag(1:n) * wa1(1:n)
+
+    pnorm = enorm ( n, wa3 )
+!
+!  On the first iteration, adjust the initial step bound.
+!
+    if ( iter == 1 ) then
+      delta = min ( delta, pnorm )
+    end if
+!
+!  Evaluate the function at x + p and calculate its norm.
+!
+    iflag = 1
+    call fcn ( m, n, wa2, wa4, fjac, ldfjac, iflag )
+
+    nfev = nfev + 1
+
+    if ( iflag < 0 ) then
+      go to 300
+    end if
+
+    fnorm1 = enorm ( m, wa4 )
+!
+!  Compute the scaled actual reduction.
+!
+    actred = -1.0D+00
+    if ( 0.1D+00 * fnorm1 < fnorm ) then
+      actred = 1.0D+00 - ( fnorm1 / fnorm ) ** 2
+    end if
+!
+!  Compute the scaled predicted reduction and
+!  the scaled directional derivative.
+!
+    do j = 1, n
+      wa3(j) = 0.0D+00
+      l = ipvt(j)
+      temp = wa1(l)
+      wa3(1:j) = wa3(1:j) + fjac(1:j,j) * temp
+    end do
+
+    temp1 = enorm ( n, wa3 ) / fnorm
+    temp2 = ( sqrt ( par ) * pnorm ) / fnorm
+    prered = temp1 ** 2 + temp2 ** 2 / 0.5D+00
+    dirder = - ( temp1 ** 2 + temp2 ** 2 )
+!
+!  Compute the ratio of the actual to the predicted reduction.
+!
+    if ( prered /= 0.0D+00 ) then
+      ratio = actred / prered
+    else
+      ratio = 0.0D+00
+    end if
+!
+!  Update the step bound.
+!
+    if ( ratio <= 0.25D+00 ) then
+
+      if ( 0.0D+00 <= actred ) then
+        temp = 0.5D+00
+      end if
+
+      if ( actred < 0.0D+00 ) then
+        temp = 0.5D+00 * dirder / ( dirder + 0.5D+00 * actred )
+      end if
+
+      if ( 0.1D+00 * fnorm1 >= fnorm .or. temp < 0.1D+00 ) then
+        temp = 0.1D+00
+      end if
+
+      delta = temp * min ( delta, pnorm / 0.1D+00 )
+      par = par / temp
+
+    else
+
+      if ( par == 0.0D+00 .or. ratio >= 0.75D+00 ) then
+        delta = 2.0D+00 * pnorm
+        par = 0.5D+00 * par
+      end if
+
+    end if
+!
+!  Successful iteration.
+!
+!  Update X, FVEC, and their norms.
+!
+    if ( 0.0001D+00 <= ratio ) then
+      x(1:n) = wa2(1:n)
+      wa2(1:n) = diag(1:n) * x(1:n)
+      fvec(1:m) = wa4(1:m)
+      xnorm = enorm ( n, wa2 )
+      fnorm = fnorm1
+      iter = iter + 1
+    end if
+!
+!  Tests for convergence.
+!
+    if ( abs ( actred) <= ftol .and. &
+      prered <= ftol .and. &
+      0.5D+00 * ratio <= 1.0D+00 ) then
+      info = 1
+    end if
+
+    if ( delta <= xtol * xnorm ) then
+      info = 2
+    end if
+
+    if ( abs ( actred) <= ftol .and. prered <= ftol &
+      .and. 0.5D+00 * ratio <= 1.0D+00 .and. info == 2 ) then
+      info = 3
+    end if
+
+    if ( info /= 0 ) then
+      go to 300
+    end if
+!
+!  Tests for termination and stringent tolerances.
+!
+    if ( nfev >= maxfev ) then
+      info = 5
+    end if
+
+    if ( abs ( actred ) <= epsmch .and. prered <= epsmch &
+      .and. 0.5D+00 * ratio <= 1.0D+00 ) then
+      info = 6
+    end if
+
+    if ( delta <= epsmch * xnorm ) then
+      info = 7
+    end if
+
+    if ( gnorm <= epsmch ) then
+      info = 8
+    end if
+
+    if ( info /= 0 ) then
+      go to 300
+    end if
+!
+!  End of the inner loop. repeat if iteration unsuccessful.
+!
+    if ( ratio < 0.0001D+00 ) then
+      go to 200
+    end if
+!
+!  End of the outer loop.
+!
+    go to 30
+
+  300 continue
+!
+!  Termination, either normal or user imposed.
+!
+  if ( iflag < 0 ) then
+    info = iflag
+  end if
+
+  iflag = 0
+
+  if ( 0 < nprint ) then
+    call fcn ( m, n, x, fvec, fjac, ldfjac, iflag )
+  end if
+
+  return
+end
+subroutine lmder1 ( fcn, m, n, x, fvec, fjac, ldfjac, tol, info )
+
+!*****************************************************************************80
+!
+!! LMDER1 minimizes M functions in N variables by Levenberg-Marquardt method.
+!
+!  Discussion:
+!
+!    LMDER1 minimizes the sum of the squares of M nonlinear functions in
+!    N variables by a modification of the Levenberg-Marquardt algorithm.
+!    This is done by using the more general least-squares solver LMDER.
+!    The user must provide a subroutine which calculates the functions
+!    and the jacobian.
+!
+!  Licensing:
+!
+!    This code is distributed under the GNU LGPL license.
+!
+!  Modified:
+!
+!    06 April 2010
+!
+!  Author:
+!
+!    Original FORTRAN77 version by Jorge More, Burton Garbow, Kenneth Hillstrom.
+!    FORTRAN90 version by John Burkardt.
+!
+!  Reference:
+!
+!    Jorge More, Burton Garbow, Kenneth Hillstrom,
+!    User Guide for MINPACK-1,
+!    Technical Report ANL-80-74,
+!    Argonne National Laboratory, 1980.
+!
+!  Parameters:
+!
+!    Input, external FCN, the name of the user-supplied subroutine which
+!    calculates the functions and the jacobian.  FCN should have the form:
+!      subroutine fcn ( m, n, x, fvec, fjac, ldfjac, iflag )
+!      integer ( kind = 4 ) ldfjac
+!      integer ( kind = 4 ) n
+!      real ( kind = 8 ) fjac(ldfjac,n)
+!      real ( kind = 8 ) fvec(m)
+!      integer ( kind = 4 ) iflag
+!      real ( kind = 8 ) x(n)
+!
+!    If IFLAG = 0 on input, then FCN is only being called to allow the user
+!    to print out the current iterate.
+!    If IFLAG = 1 on input, FCN should calculate the functions at X and
+!    return this vector in FVEC.
+!    If IFLAG = 2 on input, FCN should calculate the jacobian at X and
+!    return this matrix in FJAC.
+!    To terminate the algorithm, FCN may set IFLAG negative on return.
+!
+!    Input, integer ( kind = 4 ) M, the number of functions.
+!
+!    Input, integer ( kind = 4 ) N, is the number of variables.  
+!    N must not exceed M.
+!
+!    Input/output, real ( kind = 8 ) X(N).  On input, X must contain an initial
+!    estimate of the solution vector.  On output X contains the final
+!    estimate of the solution vector.
+!
+!    Output, real ( kind = 8 ) FVEC(M), the functions evaluated at the output X.
+!
+!    Output, real ( kind = 8 ) FJAC(LDFJAC,N), an M by N array.  The upper
+!    N by N submatrix contains an upper triangular matrix R with
+!    diagonal elements of nonincreasing magnitude such that
+!      P' * ( JAC' * JAC ) * P = R' * R,
+!    where P is a permutation matrix and JAC is the final calculated
+!    jacobian.  Column J of P is column IPVT(J) of the identity matrix.
+!    The lower trapezoidal part of FJAC contains information generated during
+!    the computation of R.
+!
+!    Input, integer ( kind = 4 ) LDFJAC, is the leading dimension of FJAC,
+!    which must be no less than M.
+!
+!    Input, real ( kind = 8 ) TOL.  Termination occurs when the algorithm
+!    estimates either that the relative error in the sum of squares is at
+!    most TOL or that the relative error between X and the solution is at
+!    most TOL.
+!
+!    Output, integer ( kind = 4 ) INFO, error flag.  If the user has terminated
+!    execution, INFO is set to the (negative) value of IFLAG. See description
+!    of FCN.  Otherwise, INFO is set as follows:
+!    0, improper input parameters.
+!    1, algorithm estimates that the relative error in the sum of squares
+!       is at most TOL.
+!    2, algorithm estimates that the relative error between X and the
+!       solution is at most TOL.
+!    3, conditions for INFO = 1 and INFO = 2 both hold.
+!    4, FVEC is orthogonal to the columns of the jacobian to machine precision.
+!    5, number of calls to FCN with IFLAG = 1 has reached 100*(N+1).
+!    6, TOL is too small.  No further reduction in the sum of squares is
+!       possible.
+!    7, TOL is too small.  No further improvement in the approximate
+!       solution X is possible.
+!
+  implicit none
+
+  integer ( kind = 4 ) ldfjac
+  integer ( kind = 4 ) m
+  integer ( kind = 4 ) n
+
+  real ( kind = 8 ) diag(n)
+  real ( kind = 8 ) factor
+  external fcn
+  real ( kind = 8 ) fjac(ldfjac,n)
+  real ( kind = 8 ) ftol
+  real ( kind = 8 ) fvec(m)
+  real ( kind = 8 ) gtol
+  integer ( kind = 4 ) info
+  integer ( kind = 4 ) ipvt(n)
+  integer ( kind = 4 ) maxfev
+  integer ( kind = 4 ) mode
+  integer ( kind = 4 ) nfev
+  integer ( kind = 4 ) njev
+  integer ( kind = 4 ) nprint
+  real ( kind = 8 ) qtf(n)
+  real ( kind = 8 ) tol
+  real ( kind = 8 ) x(n)
+  real ( kind = 8 ) xtol
+
+  info = 0
+
+  if ( n <= 0 ) then
+    return
+  else if ( m < n ) then
+    return
+  else if ( ldfjac < m ) then
+    return
+  else if ( tol < 0.0D+00 ) then
+    return
+  end if
+
+  factor = 100.0D+00
+  maxfev = 100 * ( n + 1 )
+  ftol = tol
+  xtol = tol
+  gtol = 0.0D+00
+  mode = 1
+  nprint = 0
+
+  call lmder ( fcn, m, n, x, fvec, fjac, ldfjac, ftol, xtol, gtol, maxfev, &
+    diag, mode, factor, nprint, info, nfev, njev, ipvt, qtf )
+
+  if ( info == 8 ) then
+    info = 4
+  end if
+
+  return
+end
+subroutine lmdif ( fcn, m, n, x, fvec, ftol, xtol, gtol, maxfev, epsfcn, &
+  diag, mode, factor, nprint, info, nfev, fjac, ldfjac, ipvt, qtf )
+
+!*****************************************************************************80
+!
+!! LMDIF minimizes M functions in N variables by the Levenberg-Marquardt method.
+!
+!  Discussion:
+!
+!    LMDIF minimizes the sum of the squares of M nonlinear functions in
+!    N variables by a modification of the Levenberg-Marquardt algorithm.
+!    The user must provide a subroutine which calculates the functions.
+!    The jacobian is then calculated by a forward-difference approximation.
+!
+!  Licensing:
+!
+!    This code is distributed under the GNU LGPL license.
+!
+!  Modified:
+!
+!    06 April 2010
+!
+!  Author:
+!
+!    Original FORTRAN77 version by Jorge More, Burton Garbow, Kenneth Hillstrom.
+!    FORTRAN90 version by John Burkardt.
+!
+!  Reference:
+!
+!    Jorge More, Burton Garbow, Kenneth Hillstrom,
+!    User Guide for MINPACK-1,
+!    Technical Report ANL-80-74,
+!    Argonne National Laboratory, 1980.
+!
+!  Parameters:
+!
+!    Input, external FCN, the name of the user-supplied subroutine which
+!    calculates the functions.  The routine should have the form:
+!      subroutine fcn ( m, n, x, fvec, iflag )
+!      integer ( kind = 4 ) m
+!      integer ( kind = 4 ) n
+!      real ( kind = 8 ) fvec(m)
+!      integer ( kind = 4 ) iflag
+!      real ( kind = 8 ) x(n)
+!    If IFLAG = 0 on input, then FCN is only being called to allow the user
+!    to print out the current iterate.
+!    If IFLAG = 1 on input, FCN should calculate the functions at X and
+!    return this vector in FVEC.
+!    To terminate the algorithm, FCN may set IFLAG negative on return.
+!
+!    Input, integer ( kind = 4 ) M, the number of functions.
+!
+!    Input, integer ( kind = 4 ) N, the number of variables.  
+!    N must not exceed M.
+!
+!    Input/output, real ( kind = 8 ) X(N).  On input, X must contain an initial
+!    estimate of the solution vector.  On output X contains the final
+!    estimate of the solution vector.
+!
+!    Output, real ( kind = 8 ) FVEC(M), the functions evaluated at the output X.
+!
+!    Input, real ( kind = 8 ) FTOL.  Termination occurs when both the actual
+!    and predicted relative reductions in the sum of squares are at most FTOL.
+!    Therefore, FTOL measures the relative error desired in the sum of
+!    squares.  FTOL should be nonnegative.
+!
+!    Input, real ( kind = 8 ) XTOL.  Termination occurs when the relative error
+!    between two consecutive iterates is at most XTOL.  Therefore, XTOL
+!    measures the relative error desired in the approximate solution.  XTOL
+!    should be nonnegative.
+!
+!    Input, real ( kind = 8 ) GTOL. termination occurs when the cosine of the
+!    angle between FVEC and any column of the jacobian is at most GTOL in
+!    absolute value.  Therefore, GTOL measures the orthogonality desired
+!    between the function vector and the columns of the jacobian.  GTOL should
+!    be nonnegative.
+!
+!    Input, integer ( kind = 4 ) MAXFEV.  Termination occurs when the number of
+!    calls to FCN is at least MAXFEV by the end of an iteration.
+!
+!    Input, real ( kind = 8 ) EPSFCN, is used in determining a suitable step 
+!    length for the forward-difference approximation.  This approximation 
+!    assumes that the relative errors in the functions are of the order of 
+!    EPSFCN.  If EPSFCN is less than the machine precision, it is assumed that
+!    the relative errors in the functions are of the order of the machine
+!    precision.
+!
+!    Input/output, real ( kind = 8 ) DIAG(N).  If MODE = 1, then DIAG is set
+!    internally.  If MODE = 2, then DIAG must contain positive entries that
+!    serve as multiplicative scale factors for the variables.
+!
+!    Input, integer ( kind = 4 ) MODE, scaling option.
+!    1, variables will be scaled internally.
+!    2, scaling is specified by the input DIAG vector.
+!
+!    Input, real ( kind = 8 ) FACTOR, determines the initial step bound.  
+!    This bound is set to the product of FACTOR and the euclidean norm of
+!    DIAG*X if nonzero, or else to FACTOR itself.  In most cases, FACTOR should 
+!    lie in the interval (0.1, 100) with 100 the recommended value.
+!
+!    Input, integer ( kind = 4 ) NPRINT, enables controlled printing of iterates
+!    if it is positive.  In this case, FCN is called with IFLAG = 0 at the
+!    beginning of the first iteration and every NPRINT iterations thereafter
+!    and immediately prior to return, with X and FVEC available
+!    for printing.  If NPRINT is not positive, no special calls
+!    of FCN with IFLAG = 0 are made.
+!
+!    Output, integer ( kind = 4 ) INFO, error flag.  If the user has terminated
+!    execution, INFO is set to the (negative) value of IFLAG. See description
+!    of FCN.  Otherwise, INFO is set as follows:
+!    0, improper input parameters.
+!    1, both actual and predicted relative reductions in the sum of squares
+!       are at most FTOL.
+!    2, relative error between two consecutive iterates is at most XTOL.
+!    3, conditions for INFO = 1 and INFO = 2 both hold.
+!    4, the cosine of the angle between FVEC and any column of the jacobian
+!       is at most GTOL in absolute value.
+!    5, number of calls to FCN has reached or exceeded MAXFEV.
+!    6, FTOL is too small.  No further reduction in the sum of squares
+!       is possible.
+!    7, XTOL is too small.  No further improvement in the approximate
+!       solution X is possible.
+!    8, GTOL is too small.  FVEC is orthogonal to the columns of the
+!       jacobian to machine precision.
+!
+!    Output, integer ( kind = 4 ) NFEV, the number of calls to FCN.
+!
+!    Output, real ( kind = 8 ) FJAC(LDFJAC,N), an M by N array.  The upper
+!    N by N submatrix of FJAC contains an upper triangular matrix R with
+!    diagonal elements of nonincreasing magnitude such that
+!
+!      P' * ( JAC' * JAC ) * P = R' * R,
+!
+!    where P is a permutation matrix and JAC is the final calculated jacobian.
+!    Column J of P is column IPVT(J) of the identity matrix.  The lower
+!    trapezoidal part of FJAC contains information generated during
+!    the computation of R.
+!
+!    Input, integer ( kind = 4 ) LDFJAC, the leading dimension of FJAC.
+!    LDFJAC must be at least M.
+!
+!    Output, integer ( kind = 4 ) IPVT(N), defines a permutation matrix P such
+!    that JAC * P = Q * R, where JAC is the final calculated jacobian, Q is
+!    orthogonal (not stored), and R is upper triangular with diagonal
+!    elements of nonincreasing magnitude.  Column J of P is column IPVT(J)
+!    of the identity matrix.
+!
+!    Output, real ( kind = 8 ) QTF(N), the first N elements of Q'*FVEC.
+!
+  implicit none
+
+  integer ( kind = 4 ) ldfjac
+  integer ( kind = 4 ) m
+  integer ( kind = 4 ) n
+
+  real ( kind = 8 ) actred
+  real ( kind = 8 ) delta
+  real ( kind = 8 ) diag(n)
+  real ( kind = 8 ) dirder
+  real ( kind = 8 ) enorm
+  real ( kind = 8 ) epsfcn
+  real ( kind = 8 ) epsmch
+  real ( kind = 8 ) factor
+  external fcn
+  real ( kind = 8 ) fjac(ldfjac,n)
+  real ( kind = 8 ) fnorm
+  real ( kind = 8 ) fnorm1
+  real ( kind = 8 ) ftol
+  real ( kind = 8 ) fvec(m)
+  real ( kind = 8 ) gnorm
+  real ( kind = 8 ) gtol
+  integer ( kind = 4 ) i
+  integer ( kind = 4 ) iflag
+  integer ( kind = 4 ) iter
+  integer ( kind = 4 ) info
+  integer ( kind = 4 ) ipvt(n)
+  integer ( kind = 4 ) j
+  integer ( kind = 4 ) l
+  integer ( kind = 4 ) maxfev
+  integer ( kind = 4 ) mode
+  integer ( kind = 4 ) nfev
+  integer ( kind = 4 ) nprint
+  real ( kind = 8 ) par
+  logical pivot
+  real ( kind = 8 ) pnorm
+  real ( kind = 8 ) prered
+  real ( kind = 8 ) qtf(n)
+  real ( kind = 8 ) ratio
+  real ( kind = 8 ) sum2
+  real ( kind = 8 ) temp
+  real ( kind = 8 ) temp1
+  real ( kind = 8 ) temp2
+  real ( kind = 8 ) wa1(n)
+  real ( kind = 8 ) wa2(n)
+  real ( kind = 8 ) wa3(n)
+  real ( kind = 8 ) wa4(m)
+  real ( kind = 8 ) x(n)
+  real ( kind = 8 ) xnorm
+  real ( kind = 8 ) xtol
+
+  epsmch = epsilon ( epsmch )
+
+  info = 0
+  iflag = 0
+  nfev = 0
+
+  if ( n <= 0 ) then
+    go to 300
+  else if ( m < n ) then
+    go to 300
+  else if ( ldfjac < m ) then
+    go to 300
+  else if ( ftol < 0.0D+00 ) then
+    go to 300
+  else if ( xtol < 0.0D+00 ) then
+    go to 300
+  else if ( gtol < 0.0D+00 ) then
+    go to 300
+  else if ( maxfev <= 0 ) then
+    go to 300
+  else if ( factor <= 0.0D+00 ) then
+    go to 300
+  end if
+
+  if ( mode == 2 ) then
+    do j = 1, n
+      if ( diag(j) <= 0.0D+00 ) then
+        go to 300
+      end if
+    end do
+  end if
+!
+!  Evaluate the function at the starting point and calculate its norm.
+!
+  iflag = 1
+  call fcn ( m, n, x, fvec, iflag )
+  nfev = 1
+
+  if ( iflag < 0 ) then
+    go to 300
+  end if
+
+  fnorm = enorm ( m, fvec )
+!
+!  Initialize Levenberg-Marquardt parameter and iteration counter.
+!
+  par = 0.0D+00
+  iter = 1
+!
+!  Beginning of the outer loop.
+!
+30 continue
+!
+!  Calculate the jacobian matrix.
+!
+  iflag = 2
+  call fdjac2 ( fcn, m, n, x, fvec, fjac, ldfjac, iflag, epsfcn )
+  nfev = nfev + n
+
+  if ( iflag < 0 ) then
+    go to 300
+  end if
+!
+!  If requested, call FCN to enable printing of iterates.
+!
+  if ( 0 < nprint ) then
+    iflag = 0
+    if ( mod ( iter - 1, nprint ) == 0 ) then
+      call fcn ( m, n, x, fvec, iflag )
+    end if
+    if ( iflag < 0 ) then
+      go to 300
+    end if
+  end if
+!
+!  Compute the QR factorization of the jacobian.
+!
+  pivot = .true.
+  call qrfac ( m, n, fjac, ldfjac, pivot, ipvt, n, wa1, wa2 )
+!
+!  On the first iteration and if MODE is 1, scale according
+!  to the norms of the columns of the initial jacobian.
+!
+     if ( iter == 1 ) then
+
+       if ( mode /= 2 ) then
+         diag(1:n) = wa2(1:n)
+         do j = 1, n
+           if ( wa2(j) == 0.0D+00 ) then
+             diag(j) = 1.0D+00
+           end if
+         end do
+       end if
+!
+!  On the first iteration, calculate the norm of the scaled X
+!  and initialize the step bound DELTA.
+!
+       wa3(1:n) = diag(1:n) * x(1:n)
+       xnorm = enorm ( n, wa3 )
+       delta = factor * xnorm
+       if ( delta == 0.0D+00 ) then
+         delta = factor
+       end if
+     end if
+!
+!  Form Q' * FVEC and store the first N components in QTF.
+!
+     wa4(1:m) = fvec(1:m)
+
+     do j = 1, n
+
+       if ( fjac(j,j) /= 0.0D+00 ) then
+         sum2 = dot_product ( wa4(j:m), fjac(j:m,j) )
+         temp = - sum2 / fjac(j,j)
+         wa4(j:m) = wa4(j:m) + fjac(j:m,j) * temp
+       end if
+
+       fjac(j,j) = wa1(j)
+       qtf(j) = wa4(j)
+
+     end do
+!
+!  Compute the norm of the scaled gradient.
+!
+     gnorm = 0.0D+00
+
+     if ( fnorm /= 0.0D+00 ) then
+
+       do j = 1, n
+
+         l = ipvt(j)
+
+         if ( wa2(l) /= 0.0D+00 ) then
+           sum2 = 0.0D+00
+           do i = 1, j
+             sum2 = sum2 + fjac(i,j) * ( qtf(i) / fnorm )
+           end do
+           gnorm = max ( gnorm, abs ( sum2 / wa2(l) ) )
+         end if
+
+       end do
+
+     end if
+!
+!  Test for convergence of the gradient norm.
+!
+     if ( gnorm <= gtol ) then
+       info = 4
+       go to 300
+     end if
+!
+!  Rescale if necessary.
+!
+     if ( mode /= 2 ) then
+       do j = 1, n
+         diag(j) = max ( diag(j), wa2(j) )
+       end do
+     end if
+!
+!  Beginning of the inner loop.
+!
+200  continue
+!
+!  Determine the Levenberg-Marquardt parameter.
+!
+        call lmpar ( n, fjac, ldfjac, ipvt, diag, qtf, delta, par, wa1, wa2 )
+!
+!  Store the direction P and X + P.
+!  Calculate the norm of P.
+!
+        wa1(1:n) = -wa1(1:n)
+        wa2(1:n) = x(1:n) + wa1(1:n)
+        wa3(1:n) = diag(1:n) * wa1(1:n)
+
+        pnorm = enorm ( n, wa3 )
+!
+!  On the first iteration, adjust the initial step bound.
+!
+        if ( iter == 1 ) then
+          delta = min ( delta, pnorm )
+        end if
+!
+!  Evaluate the function at X + P and calculate its norm.
+!
+        iflag = 1
+        call fcn ( m, n, wa2, wa4, iflag )
+        nfev = nfev + 1
+        if ( iflag < 0 ) then
+          go to 300
+        end if
+        fnorm1 = enorm ( m, wa4 )
+!
+!  Compute the scaled actual reduction.
+!
+        if ( 0.1D+00 * fnorm1 < fnorm ) then
+          actred = 1.0D+00 - ( fnorm1 / fnorm ) ** 2
+        else
+          actred = -1.0D+00
+        end if
+!
+!  Compute the scaled predicted reduction and the scaled directional derivative.
+!
+        do j = 1, n
+          wa3(j) = 0.0D+00
+          l = ipvt(j)
+          temp = wa1(l)
+          wa3(1:j) = wa3(1:j) + fjac(1:j,j) * temp
+        end do
+
+        temp1 = enorm ( n, wa3 ) / fnorm
+        temp2 = ( sqrt ( par ) * pnorm ) / fnorm
+        prered = temp1 ** 2 + temp2 ** 2 / 0.5D+00
+        dirder = - ( temp1 ** 2 + temp2 ** 2 )
+!
+!  Compute the ratio of the actual to the predicted reduction.
+!
+        ratio = 0.0D+00
+        if ( prered /= 0.0D+00 ) then
+          ratio = actred / prered
+        end if
+!
+!  Update the step bound.
+!
+        if ( ratio <= 0.25D+00 ) then
+
+           if ( actred >= 0.0D+00 ) then
+             temp = 0.5D+00
+           endif
+
+           if ( actred < 0.0D+00 ) then
+             temp = 0.5D+00 * dirder / ( dirder + 0.5D+00 * actred )
+           end if
+
+           if ( 0.1D+00 * fnorm1 >= fnorm .or. temp < 0.1D+00 ) then
+             temp = 0.1D+00
+           end if
+
+           delta = temp * min ( delta, pnorm / 0.1D+00  )
+           par = par / temp
+
+        else
+
+           if ( par == 0.0D+00 .or. ratio >= 0.75D+00 ) then
+             delta = 2.0D+00 * pnorm
+             par = 0.5D+00 * par
+           end if
+
+        end if
+!
+!  Test for successful iteration.
+!
+
+!
+!  Successful iteration. update X, FVEC, and their norms.
+!
+        if ( 0.0001D+00 <= ratio ) then
+          x(1:n) = wa2(1:n)
+          wa2(1:n) = diag(1:n) * x(1:n)
+          fvec(1:m) = wa4(1:m)
+          xnorm = enorm ( n, wa2 )
+          fnorm = fnorm1
+          iter = iter + 1
+        end if
+!
+!  Tests for convergence.
+!
+        if ( abs ( actred) <= ftol .and. prered <= ftol &
+          .and. 0.5D+00 * ratio <= 1.0D+00 ) then
+          info = 1
+        end if
+
+        if ( delta <= xtol * xnorm ) then
+          info = 2
+        end if
+
+        if ( abs ( actred) <= ftol .and. prered <= ftol &
+          .and. 0.5D+00 * ratio <= 1.0D+00 .and. info == 2 ) info = 3
+
+        if ( info /= 0 ) then
+          go to 300
+        end if
+!
+!  Tests for termination and stringent tolerances.
+!
+        if ( maxfev <= nfev ) then
+          info = 5
+        end if
+
+        if ( abs ( actred) <= epsmch .and. prered <= epsmch &
+          .and. 0.5D+00 * ratio <= 1.0D+00 ) then
+          info = 6
+        end if
+
+        if ( delta <= epsmch * xnorm ) then
+          info = 7
+        end if
+
+        if ( gnorm <= epsmch ) then
+          info = 8
+        end if
+
+        if ( info /= 0 ) then
+          go to 300
+        end if
+!
+!  End of the inner loop.  Repeat if iteration unsuccessful.
+!
+        if ( ratio < 0.0001D+00 ) then
+          go to 200
+        end if
+!
+!  End of the outer loop.
+!
+     go to 30
+
+300 continue
+!
+!  Termination, either normal or user imposed.
+!
+  if ( iflag < 0 ) then
+    info = iflag
+  end if
+
+  iflag = 0
+
+  if ( 0 < nprint ) then
+    call fcn ( m, n, x, fvec, iflag )
+  end if
+
+  return
+end
+subroutine lmdif1 ( fcn, m, n, x, fvec, tol, info )
+
+!*****************************************************************************80
+!
+!! LMDIF1 minimizes M functions in N variables using Levenberg-Marquardt method.
+!
+!  Discussion:
+!
+!    LMDIF1 minimizes the sum of the squares of M nonlinear functions in
+!    N variables by a modification of the Levenberg-Marquardt algorithm.
+!    This is done by using the more general least-squares solver LMDIF.
+!    The user must provide a subroutine which calculates the functions.
+!    The jacobian is then calculated by a forward-difference approximation.
+!
+!  Licensing:
+!
+!    This code is distributed under the GNU LGPL license.
+!
+!  Modified:
+!
+!    06 April 2010
+!
+!  Author:
+!
+!    Original FORTRAN77 version by Jorge More, Burton Garbow, Kenneth Hillstrom.
+!    FORTRAN90 version by John Burkardt.
+!
+!  Reference:
+!
+!    Jorge More, Burton Garbow, Kenneth Hillstrom,
+!    User Guide for MINPACK-1,
+!    Technical Report ANL-80-74,
+!    Argonne National Laboratory, 1980.
+!
+!  Parameters:
+!
+!    Input, external FCN, the name of the user-supplied subroutine which
+!    calculates the functions.  The routine should have the form:
+!      subroutine fcn ( m, n, x, fvec, iflag )
+!      integer ( kind = 4 ) n
+!      real ( kind = 8 ) fvec(m)
+!      integer ( kind = 4 ) iflag
+!      real ( kind = 8 ) x(n)
+!
+!    If IFLAG = 0 on input, then FCN is only being called to allow the user
+!    to print out the current iterate.
+!    If IFLAG = 1 on input, FCN should calculate the functions at X and
+!    return this vector in FVEC.
+!    To terminate the algorithm, FCN may set IFLAG negative on return.
+!
+!    Input, integer ( kind = 4 ) M, the number of functions.
+!
+!    Input, integer ( kind = 4 ) N, the number of variables.  
+!    N must not exceed M.
+!
+!    Input/output, real ( kind = 8 ) X(N).  On input, X must contain an initial
+!    estimate of the solution vector.  On output X contains the final
+!    estimate of the solution vector.
+!
+!    Output, real ( kind = 8 ) FVEC(M), the functions evaluated at the output X.
+!
+!    Input, real ( kind = 8 ) TOL.  Termination occurs when the algorithm
+!    estimates either that the relative error in the sum of squares is at
+!    most TOL or that the relative error between X and the solution is at
+!    most TOL.  TOL should be nonnegative.
+!
+!    Output, integer ( kind = 4 ) INFO, error flag.  If the user has terminated
+!    execution, INFO is set to the (negative) value of IFLAG. See description
+!    of FCN.  Otherwise, INFO is set as follows:
+!    0, improper input parameters.
+!    1, algorithm estimates that the relative error in the sum of squares
+!       is at most TOL.
+!    2, algorithm estimates that the relative error between X and the
+!       solution is at most TOL.
+!    3, conditions for INFO = 1 and INFO = 2 both hold.
+!    4, FVEC is orthogonal to the columns of the jacobian to machine precision.
+!    5, number of calls to FCN has reached or exceeded 200*(N+1).
+!    6, TOL is too small.  No further reduction in the sum of squares
+!       is possible.
+!    7, TOL is too small.  No further improvement in the approximate
+!       solution X is possible.
+!
+  implicit none
+
+  integer ( kind = 4 ) m
+  integer ( kind = 4 ) n
+
+  real ( kind = 8 ) diag(n)
+  real ( kind = 8 ) epsfcn
+  real ( kind = 8 ) factor
+  external fcn
+  real ( kind = 8 ) fjac(m,n)
+  real ( kind = 8 ) ftol
+  real ( kind = 8 ) fvec(m)
+  real ( kind = 8 ) gtol
+  integer ( kind = 4 ) info
+  integer ( kind = 4 ) ipvt(n)
+  integer ( kind = 4 ) ldfjac
+  integer ( kind = 4 ) maxfev
+  integer ( kind = 4 ) mode
+  integer ( kind = 4 ) nfev
+  integer ( kind = 4 ) nprint
+  real ( kind = 8 ) qtf(n)
+  real ( kind = 8 ) tol
+  real ( kind = 8 ) x(n)
+  real ( kind = 8 ) xtol
+
+  info = 0
+
+  if ( n <= 0 ) then
+    return
+  else if ( m < n ) then
+    return
+  else if ( tol < 0.0D+00 ) then
+    return
+  end if
+
+  ! *** BVIE BEGIN ***
+  !factor = 100.0D+00
+  factor = 0.1D+00
+  ! *** BVIE END ***
+  maxfev = 200 * ( n + 1 )
+  ftol = tol
+  xtol = tol
+  gtol = 0.0D+00
+  epsfcn = 0.0D+00
+  mode = 1
+  nprint = 0
+  ldfjac = m
+
+  call lmdif ( fcn, m, n, x, fvec, ftol, xtol, gtol, maxfev, epsfcn, &
+    diag, mode, factor, nprint, info, nfev, fjac, ldfjac, ipvt, qtf )
+
+  if ( info == 8 ) then
+    info = 4
+  end if
+
+  return
+end
+subroutine lmpar ( n, r, ldr, ipvt, diag, qtb, delta, par, x, sdiag )
+
+!*****************************************************************************80
+!
+!! LMPAR computes a parameter for the Levenberg-Marquardt method.
+!
+!  Discussion:
+!
+!    Given an M by N matrix A, an N by N nonsingular diagonal
+!    matrix D, an M-vector B, and a positive number DELTA,
+!    the problem is to determine a value for the parameter
+!    PAR such that if X solves the system
+!
+!      A*X = B,
+!      sqrt ( PAR ) * D * X = 0,
+!
+!    in the least squares sense, and DXNORM is the euclidean
+!    norm of D*X, then either PAR is zero and
+!
+!      ( DXNORM - DELTA ) <= 0.1 * DELTA,
+!
+!    or PAR is positive and
+!
+!      abs ( DXNORM - DELTA) <= 0.1 * DELTA.
+!
+!    This subroutine completes the solution of the problem
+!    if it is provided with the necessary information from the
+!    QR factorization, with column pivoting, of A.  That is, if
+!    A*P = Q*R, where P is a permutation matrix, Q has orthogonal
+!    columns, and R is an upper triangular matrix with diagonal
+!    elements of nonincreasing magnitude, then LMPAR expects
+!    the full upper triangle of R, the permutation matrix P,
+!    and the first N components of Q'*B.  On output
+!    LMPAR also provides an upper triangular matrix S such that
+!
+!      P' * ( A' * A + PAR * D * D ) * P = S'* S.
+!
+!    S is employed within LMPAR and may be of separate interest.
+!
+!    Only a few iterations are generally needed for convergence
+!    of the algorithm.  If, however, the limit of 10 iterations
+!    is reached, then the output PAR will contain the best
+!    value obtained so far.
+!
+!  Licensing:
+!
+!    This code is distributed under the GNU LGPL license.
+!
+!  Modified:
+!
+!    24 January 2014
+!
+!  Author:
+!
+!    Original FORTRAN77 version by Jorge More, Burton Garbow, Kenneth Hillstrom.
+!    FORTRAN90 version by John Burkardt.
+!
+!  Reference:
+!
+!    Jorge More, Burton Garbow, Kenneth Hillstrom,
+!    User Guide for MINPACK-1,
+!    Technical Report ANL-80-74,
+!    Argonne National Laboratory, 1980.
+!
+!  Parameters:
+!
+!    Input, integer ( kind = 4 ) N, the order of R.
+!
+!    Input/output, real ( kind = 8 ) R(LDR,N),the N by N matrix.  The full
+!    upper triangle must contain the full upper triangle of the matrix R.
+!    On output the full upper triangle is unaltered, and the strict lower
+!    triangle contains the strict upper triangle (transposed) of the upper
+!    triangular matrix S.
+!
+!    Input, integer ( kind = 4 ) LDR, the leading dimension of R.  LDR must be
+!    no less than N.
+!
+!    Input, integer ( kind = 4 ) IPVT(N), defines the permutation matrix P 
+!    such that A*P = Q*R.  Column J of P is column IPVT(J) of the 
+!    identity matrix.
+!
+!    Input, real ( kind = 8 ) DIAG(N), the diagonal elements of the matrix D.
+!
+!    Input, real ( kind = 8 ) QTB(N), the first N elements of the vector Q'*B.
+!
+!    Input, real ( kind = 8 ) DELTA, an upper bound on the euclidean norm
+!    of D*X.  DELTA should be positive.
+!
+!    Input/output, real ( kind = 8 ) PAR.  On input an initial estimate of the
+!    Levenberg-Marquardt parameter.  On output the final estimate.
+!    PAR should be nonnegative.
+!
+!    Output, real ( kind = 8 ) X(N), the least squares solution of the system
+!    A*X = B, sqrt(PAR)*D*X = 0, for the output value of PAR.
+!
+!    Output, real ( kind = 8 ) SDIAG(N), the diagonal elements of the upper
+!    triangular matrix S.
+!
+  implicit none
+
+  integer ( kind = 4 ) ldr
+  integer ( kind = 4 ) n
+
+  real ( kind = 8 ) delta
+  real ( kind = 8 ) diag(n)
+  real ( kind = 8 ) dwarf
+  real ( kind = 8 ) dxnorm
+  real ( kind = 8 ) enorm
+  real ( kind = 8 ) gnorm
+  real ( kind = 8 ) fp
+  integer ( kind = 4 ) i
+  integer ( kind = 4 ) ipvt(n)
+  integer ( kind = 4 ) iter
+  integer ( kind = 4 ) j
+  integer ( kind = 4 ) k
+  integer ( kind = 4 ) l
+  integer ( kind = 4 ) nsing
+  real ( kind = 8 ) par
+  real ( kind = 8 ) parc
+  real ( kind = 8 ) parl
+  real ( kind = 8 ) paru
+  real ( kind = 8 ) qnorm
+  real ( kind = 8 ) qtb(n)
+  real ( kind = 8 ) r(ldr,n)
+  real ( kind = 8 ) sdiag(n)
+  real ( kind = 8 ) sum2
+  real ( kind = 8 ) temp
+  real ( kind = 8 ) wa1(n)
+  real ( kind = 8 ) wa2(n)
+  real ( kind = 8 ) x(n)
+!
+!  DWARF is the smallest positive magnitude.
+!
+  dwarf = tiny ( dwarf )
+!
+!  Compute and store in X the Gauss-Newton direction.
+!
+!  If the jacobian is rank-deficient, obtain a least squares solution.
+!
+  nsing = n
+
+  do j = 1, n
+    wa1(j) = qtb(j)
+    if ( r(j,j) == 0.0D+00 .and. nsing == n ) then
+      nsing = j - 1
+    end if
+    if ( nsing < n ) then
+      wa1(j) = 0.0D+00
+    end if
+  end do
+
+  do k = 1, nsing
+    j = nsing - k + 1
+    wa1(j) = wa1(j) / r(j,j)
+    temp = wa1(j)
+    wa1(1:j-1) = wa1(1:j-1) - r(1:j-1,j) * temp
+  end do
+
+  do j = 1, n
+    l = ipvt(j)
+    x(l) = wa1(j)
+  end do
+!
+!  Initialize the iteration counter.
+!  Evaluate the function at the origin, and test
+!  for acceptance of the Gauss-Newton direction.
+!
+  iter = 0
+  wa2(1:n) = diag(1:n) * x(1:n)
+  dxnorm = enorm ( n, wa2 )
+  fp = dxnorm - delta
+
+  if ( fp <= 0.1D+00 * delta ) then
+    if ( iter == 0 ) then
+      par = 0.0D+00
+    end if
+    return
+  end if
+!
+!  If the jacobian is not rank deficient, the Newton
+!  step provides a lower bound, PARL, for the zero of
+!  the function.
+!
+!  Otherwise set this bound to zero.
+!
+  parl = 0.0D+00
+
+  if ( n <= nsing ) then
+
+    do j = 1, n
+      l = ipvt(j)
+      wa1(j) = diag(l) * ( wa2(l) / dxnorm )
+    end do
+
+    do j = 1, n
+      sum2 = dot_product ( wa1(1:j-1), r(1:j-1,j) )
+      wa1(j) = ( wa1(j) - sum2 ) / r(j,j)
+    end do
+
+    temp = enorm ( n, wa1 )
+    parl = ( ( fp / delta ) / temp ) / temp
+
+  end if
+!
+!  Calculate an upper bound, PARU, for the zero of the function.
+!
+  do j = 1, n
+    sum2 = dot_product ( qtb(1:j), r(1:j,j) )
+    l = ipvt(j)
+    wa1(j) = sum2 / diag(l)
+  end do
+
+  gnorm = enorm ( n, wa1 )
+  paru = gnorm / delta
+
+  if ( paru == 0.0D+00 ) then
+    paru = dwarf / min ( delta, 0.1D+00 )
+  end if
+!
+!  If the input PAR lies outside of the interval (PARL, PARU),
+!  set PAR to the closer endpoint.
+!
+  par = max ( par, parl )
+  par = min ( par, paru )
+  if ( par == 0.0D+00 ) then
+    par = gnorm / dxnorm
+  end if
+!
+!  Beginning of an iteration.
+!
+  do
+ 
+    iter = iter + 1
+!
+!  Evaluate the function at the current value of PAR.
+!
+    if ( par == 0.0D+00 ) then
+      par = max ( dwarf, 0.001D+00 * paru )
+    end if
+
+    wa1(1:n) = sqrt ( par ) * diag(1:n)
+
+    call qrsolv ( n, r, ldr, ipvt, wa1, qtb, x, sdiag )
+
+    wa2(1:n) = diag(1:n) * x(1:n)
+    dxnorm = enorm ( n, wa2 )
+    temp = fp
+    fp = dxnorm - delta
+!
+!  If the function is small enough, accept the current value of PAR.
+!
+    if ( abs ( fp ) <= 0.1D+00 * delta ) then
+      exit
+    end if
+!
+!  Test for the exceptional cases where PARL
+!  is zero or the number of iterations has reached 10.
+!
+    if ( parl == 0.0D+00 .and. fp <= temp .and. temp < 0.0D+00 ) then
+      exit
+    else if ( iter == 10 ) then
+      exit
+    end if
+!
+!  Compute the Newton correction.
+!
+    do j = 1, n
+      l = ipvt(j)
+      wa1(j) = diag(l) * ( wa2(l) / dxnorm )
+    end do
+
+    do j = 1, n
+      wa1(j) = wa1(j) / sdiag(j)
+      temp = wa1(j)
+      wa1(j+1:n) = wa1(j+1:n) - r(j+1:n,j) * temp
+    end do
+
+    temp = enorm ( n, wa1 )
+    parc = ( ( fp / delta ) / temp ) / temp
+!
+!  Depending on the sign of the function, update PARL or PARU.
+!
+    if ( 0.0D+00 < fp ) then
+      parl = max ( parl, par )
+    else if ( fp < 0.0D+00 ) then
+      paru = min ( paru, par )
+    end if
+!
+!  Compute an improved estimate for PAR.
+!
+    par = max ( parl, par + parc )
+!
+!  End of an iteration.
+!
+  end do
+!
+!  Termination.
+!
+  if ( iter == 0 ) then
+    par = 0.0D+00
+  end if
+
+  return
+end
+subroutine lmstr ( fcn, m, n, x, fvec, fjac, ldfjac, ftol, xtol, gtol, maxfev, &
+  diag, mode, factor, nprint, info, nfev, njev, ipvt, qtf )
+
+!*****************************************************************************80
+!
+!! LMSTR minimizes M functions in N variables using Levenberg-Marquardt method.
+!
+!  Discussion:
+!
+!    LMSTR minimizes the sum of the squares of M nonlinear functions in
+!    N variables by a modification of the Levenberg-Marquardt algorithm
+!    which uses minimal storage.
+!
+!    The user must provide a subroutine which calculates the functions and
+!    the rows of the jacobian.
+!
+!  Licensing:
+!
+!    This code is distributed under the GNU LGPL license.
+!
+!  Modified:
+!
+!    06 April 2010
+!
+!  Author:
+!
+!    Original FORTRAN77 version by Jorge More, Burton Garbow, Kenneth Hillstrom.
+!    FORTRAN90 version by John Burkardt.
+!
+!  Reference:
+!
+!    Jorge More, Burton Garbow, Kenneth Hillstrom,
+!    User Guide for MINPACK-1,
+!    Technical Report ANL-80-74,
+!    Argonne National Laboratory, 1980.
+!
+!  Parameters:
+!
+!    Input, external FCN, the name of the user-supplied subroutine which
+!    calculates the functions and the rows of the jacobian.
+!    FCN should have the form:
+!      subroutine fcn ( m, n, x, fvec, fjrow, iflag )
+!      integer ( kind = 4 ) m
+!      integer ( kind = 4 ) n
+!      real ( kind = 8 ) fjrow(n)
+!      real ( kind = 8 ) fvec(m)
+!      integer ( kind = 4 ) iflag
+!      real ( kind = 8 ) x(n)
+!    If IFLAG = 0 on input, then FCN is only being called to allow the user
+!    to print out the current iterate.
+!    If IFLAG = 1 on input, FCN should calculate the functions at X and
+!    return this vector in FVEC.
+!    If the input value of IFLAG is I > 1, calculate the (I-1)-st row of
+!    the jacobian at X, and return this vector in FJROW.
+!    To terminate the algorithm, set the output value of IFLAG negative.
+!
+!    Input, integer ( kind = 4 ) M, the number of functions.
+!
+!    Input, integer ( kind = 4 ) N, the number of variables.  
+!    N must not exceed M.
+!
+!    Input/output, real ( kind = 8 ) X(N).  On input, X must contain an initial
+!    estimate of the solution vector.  On output X contains the final
+!    estimate of the solution vector.
+!
+!    Output, real ( kind = 8 ) FVEC(M), the functions evaluated at the output X.
+!
+!    Output, real ( kind = 8 ) FJAC(LDFJAC,N), an N by N array.  The upper
+!    triangle of FJAC contains an upper triangular matrix R such that
+!
+!      P' * ( JAC' * JAC ) * P = R' * R,
+!
+!    where P is a permutation matrix and JAC is the final calculated jacobian.
+!    Column J of P is column IPVT(J) of the identity matrix.  The lower
+!    triangular part of FJAC contains information generated during
+!    the computation of R.
+!
+!    Input, integer ( kind = 4 ) LDFJAC, the leading dimension of FJAC.
+!    LDFJAC must be at least N.
+!
+!    Input, real ( kind = 8 ) FTOL.  Termination occurs when both the actual and
+!    predicted relative reductions in the sum of squares are at most FTOL.
+!    Therefore, FTOL measures the relative error desired in the sum of
+!    squares.  FTOL should be nonnegative.
+!
+!    Input, real ( kind = 8 ) XTOL.  Termination occurs when the relative error 
+!    between two consecutive iterates is at most XTOL.  XTOL should be 
+!    nonnegative.
+!
+!    Input, real ( kind = 8 ) GTOL. termination occurs when the cosine of the 
+!    angle between FVEC and any column of the jacobian is at most GTOL in 
+!    absolute value.  Therefore, GTOL measures the orthogonality desired 
+!    between the function vector and the columns of the jacobian.  GTOL should
+!    be nonnegative.
+!
+!    Input, integer ( kind = 4 ) MAXFEV.  Termination occurs when the number 
+!    of calls to FCN with IFLAG = 1 is at least MAXFEV by the end of 
+!    an iteration.
+!
+!    Input/output, real ( kind = 8 ) DIAG(N).  If MODE = 1, then DIAG is set 
+!    internally.  If MODE = 2, then DIAG must contain positive entries that 
+!    serve as multiplicative scale factors for the variables.
+!
+!    Input, integer ( kind = 4 ) MODE, scaling option.
+!    1, variables will be scaled internally.
+!    2, scaling is specified by the input DIAG vector.
+!
+!    Input, real ( kind = 8 ) FACTOR, determines the initial step bound.  This 
+!    bound is set to the product of FACTOR and the euclidean norm of DIAG*X if
+!    nonzero, or else to FACTOR itself.  In most cases, FACTOR should lie
+!    in the interval (0.1, 100) with 100 the recommended value.
+!
+!    Input, integer ( kind = 4 ) NPRINT, enables controlled printing of iterates
+!    if it is positive.  In this case, FCN is called with IFLAG = 0 at the
+!    beginning of the first iteration and every NPRINT iterations thereafter
+!    and immediately prior to return, with X and FVEC available
+!    for printing.  If NPRINT is not positive, no special calls
+!    of FCN with IFLAG = 0 are made.
+!
+!    Output, integer ( kind = 4 ) INFO, error flag.  If the user has terminated
+!    execution, INFO is set to the (negative) value of IFLAG. See the 
+!    description of FCN.  Otherwise, INFO is set as follows:
+!    0, improper input parameters.
+!    1, both actual and predicted relative reductions in the sum of squares
+!       are at most FTOL.
+!    2, relative error between two consecutive iterates is at most XTOL.
+!    3, conditions for INFO = 1 and INFO = 2 both hold.
+!    4, the cosine of the angle between FVEC and any column of the jacobian
+!       is at most GTOL in absolute value.
+!    5, number of calls to FCN with IFLAG = 1 has reached MAXFEV.
+!    6, FTOL is too small.  No further reduction in the sum of squares is
+!       possible.
+!    7, XTOL is too small.  No further improvement in the approximate
+!       solution X is possible.
+!    8, GTOL is too small.  FVEC is orthogonal to the columns of the
+!       jacobian to machine precision.
+!
+!    Output, integer ( kind = 4 ) NFEV, the number of calls to FCN 
+!    with IFLAG = 1.
+!
+!    Output, integer ( kind = 4 ) NJEV, the number of calls to FCN 
+!    with IFLAG = 2.
+!
+!    Output, integer ( kind = 4 ) IPVT(N), defines a permutation matrix P such
+!    that JAC * P = Q * R, where JAC is the final calculated jacobian, Q is
+!    orthogonal (not stored), and R is upper triangular.
+!    Column J of P is column IPVT(J) of the identity matrix.
+!
+!    Output, real ( kind = 8 ) QTF(N), contains the first N elements of Q'*FVEC.
+!
+  implicit none
+
+  integer ( kind = 4 ) ldfjac
+  integer ( kind = 4 ) m
+  integer ( kind = 4 ) n
+
+  real ( kind = 8 ) actred
+  real ( kind = 8 ) delta
+  real ( kind = 8 ) diag(n)
+  real ( kind = 8 ) dirder
+  real ( kind = 8 ) enorm
+  real ( kind = 8 ) epsmch
+  real ( kind = 8 ) factor
+  external fcn
+  real ( kind = 8 ) fjac(ldfjac,n)
+  real ( kind = 8 ) fnorm
+  real ( kind = 8 ) fnorm1
+  real ( kind = 8 ) ftol
+  real ( kind = 8 ) fvec(m)
+  real ( kind = 8 ) gnorm
+  real ( kind = 8 ) gtol
+  integer ( kind = 4 ) i
+  integer ( kind = 4 ) iflag
+  integer ( kind = 4 ) info
+  integer ( kind = 4 ) ipvt(n)
+  integer ( kind = 4 ) iter
+  integer ( kind = 4 ) j
+  integer ( kind = 4 ) l
+  integer ( kind = 4 ) maxfev
+  integer ( kind = 4 ) mode
+  integer ( kind = 4 ) nfev
+  integer ( kind = 4 ) njev
+  integer ( kind = 4 ) nprint
+  real ( kind = 8 ) par
+  logical pivot
+  real ( kind = 8 ) pnorm
+  real ( kind = 8 ) prered
+  real ( kind = 8 ) qtf(n)
+  real ( kind = 8 ) ratio
+  logical sing
+  real ( kind = 8 ) sum2
+  real ( kind = 8 ) temp
+  real ( kind = 8 ) temp1
+  real ( kind = 8 ) temp2
+  real ( kind = 8 ) wa1(n)
+  real ( kind = 8 ) wa2(n)
+  real ( kind = 8 ) wa3(n)
+  real ( kind = 8 ) wa4(m)
+  real ( kind = 8 ) x(n)
+  real ( kind = 8 ) xnorm
+  real ( kind = 8 ) xtol
+
+  epsmch = epsilon ( epsmch )
+
+  info = 0
+  iflag = 0
+  nfev = 0
+  njev = 0
+!
+!  Check the input parameters for errors.
+!
+  if ( n <= 0 ) then
+    go to 340
+  else if ( m < n ) then
+    go to 340
+  else if ( ldfjac < n ) then
+    go to 340
+  else if ( ftol < 0.0D+00 ) then
+    go to 340
+  else if ( xtol < 0.0D+00 ) then
+    go to 340
+  else if ( gtol < 0.0D+00 ) then
+    go to 340
+  else if ( maxfev <= 0 ) then
+    go to 340
+  else if ( factor <= 0.0D+00 ) then
+    go to 340
+  end if
+
+  if ( mode == 2 ) then
+    do j = 1, n
+      if ( diag(j) <= 0.0D+00 ) then
+        go to 340
+      end if
+    end do
+  end if
+!
+!  Evaluate the function at the starting point and calculate its norm.
+!
+  iflag = 1
+  call fcn ( m, n, x, fvec, wa3, iflag )
+  nfev = 1
+
+  if ( iflag < 0 ) then
+    go to 340
+  end if
+
+  fnorm = enorm ( m, fvec )
+!
+!  Initialize Levenberg-Marquardt parameter and iteration counter.
+!
+  par = 0.0D+00
+  iter = 1
+!
+!  Beginning of the outer loop.
+!
+   30 continue
+!
+!  If requested, call FCN to enable printing of iterates.
+!
+     if ( 0 < nprint ) then
+       iflag = 0
+       if ( mod ( iter-1, nprint ) == 0 ) then
+         call fcn ( m, n, x, fvec, wa3, iflag )
+       end if
+       if ( iflag < 0 ) then
+         go to 340
+       end if
+     end if
+!
+!  Compute the QR factorization of the jacobian matrix calculated one row
+!  at a time, while simultaneously forming Q'* FVEC and storing
+!  the first N components in QTF.
+!
+     qtf(1:n) = 0.0D+00
+     fjac(1:n,1:n) = 0.0D+00
+     iflag = 2
+
+     do i = 1, m
+       call fcn ( m, n, x, fvec, wa3, iflag )
+       if ( iflag < 0 ) then
+         go to 340
+       end if
+       temp = fvec(i)
+       call rwupdt ( n, fjac, ldfjac, wa3, qtf, temp, wa1, wa2 )
+       iflag = iflag + 1
+     end do
+
+     njev = njev + 1
+!
+!  If the jacobian is rank deficient, call QRFAC to
+!  reorder its columns and update the components of QTF.
+!
+     sing = .false.
+     do j = 1, n
+       if ( fjac(j,j) == 0.0D+00 ) then
+         sing = .true.
+       end if
+       ipvt(j) = j
+       wa2(j) = enorm ( j, fjac(1,j) )
+     end do
+
+     if ( sing ) then
+
+       pivot = .true.
+       call qrfac ( n, n, fjac, ldfjac, pivot, ipvt, n, wa1, wa2 )
+
+       do j = 1, n
+
+         if ( fjac(j,j) /= 0.0D+00 ) then
+
+           sum2 = dot_product ( qtf(j:n), fjac(j:n,j) )
+           temp = - sum2 / fjac(j,j)
+           qtf(j:n) = qtf(j:n) + fjac(j:n,j) * temp
+
+         end if
+
+         fjac(j,j) = wa1(j)
+
+       end do
+
+     end if
+!
+!  On the first iteration
+!    if mode is 1,
+!      scale according to the norms of the columns of the initial jacobian.
+!    calculate the norm of the scaled X,
+!    initialize the step bound delta.
+!
+     if ( iter == 1 ) then
+
+       if ( mode /= 2 ) then
+
+         diag(1:n) = wa2(1:n)
+         do j = 1, n
+           if ( wa2(j) == 0.0D+00 ) then
+             diag(j) = 1.0D+00
+           end if
+         end do
+
+       end if
+
+       wa3(1:n) = diag(1:n) * x(1:n)
+       xnorm = enorm ( n, wa3 )
+       delta = factor * xnorm
+       if ( delta == 0.0D+00 ) then
+         delta = factor
+       end if
+
+     end if
+!
+!  Compute the norm of the scaled gradient.
+!
+     gnorm = 0.0D+00
+
+     if ( fnorm /= 0.0D+00 ) then
+
+       do j = 1, n
+         l = ipvt(j)
+         if ( wa2(l) /= 0.0D+00 ) then
+           sum2 = dot_product ( qtf(1:j), fjac(1:j,j) ) / fnorm
+           gnorm = max ( gnorm, abs ( sum2 / wa2(l) ) )
+         end if
+       end do
+
+     end if
+!
+!  Test for convergence of the gradient norm.
+!
+     if ( gnorm <= gtol ) then
+       info = 4
+       go to 340
+     end if
+!
+!  Rescale if necessary.
+!
+     if ( mode /= 2 ) then
+       do j = 1, n
+         diag(j) = max ( diag(j), wa2(j) )
+       end do
+     end if
+!
+!  Beginning of the inner loop.
+!
+240    continue
+!
+!  Determine the Levenberg-Marquardt parameter.
+!
+        call lmpar ( n, fjac, ldfjac, ipvt, diag, qtf, delta, par, wa1, wa2 )
+!
+!  Store the direction P and X + P.
+!  Calculate the norm of P.
+!
+        wa1(1:n) = -wa1(1:n)
+        wa2(1:n) = x(1:n) + wa1(1:n)
+        wa3(1:n) = diag(1:n) * wa1(1:n)
+        pnorm = enorm ( n, wa3 )
+!
+!  On the first iteration, adjust the initial step bound.
+!
+        if ( iter == 1 ) then
+          delta = min ( delta, pnorm )
+        end if
+!
+!  Evaluate the function at X + P and calculate its norm.
+!
+        iflag = 1
+        call fcn ( m, n, wa2, wa4, wa3, iflag )
+        nfev = nfev + 1
+        if ( iflag < 0 ) then
+          go to 340
+        end if
+        fnorm1 = enorm ( m, wa4 )
+!
+!  Compute the scaled actual reduction.
+!
+        if ( 0.1D+00 * fnorm1 < fnorm ) then
+          actred = 1.0D+00 - ( fnorm1 / fnorm ) ** 2
+        else
+          actred = -1.0D+00
+        end if
+!
+!  Compute the scaled predicted reduction and
+!  the scaled directional derivative.
+!
+        do j = 1, n
+          wa3(j) = 0.0D+00
+          l = ipvt(j)
+          temp = wa1(l)
+          wa3(1:j) = wa3(1:j) + fjac(1:j,j) * temp
+        end do
+
+        temp1 = enorm ( n, wa3 ) / fnorm
+        temp2 = ( sqrt(par) * pnorm ) / fnorm
+        prered = temp1 ** 2 + temp2 ** 2 / 0.5D+00
+        dirder = - ( temp1 ** 2 + temp2 ** 2 )
+!
+!  Compute the ratio of the actual to the predicted reduction.
+!
+        if ( prered /= 0.0D+00 ) then
+          ratio = actred / prered
+        else
+          ratio = 0.0D+00
+        end if
+!
+!  Update the step bound.
+!
+        if ( ratio <= 0.25D+00 ) then
+
+          if ( actred >= 0.0D+00 ) then
+            temp = 0.5D+00
+          else
+            temp = 0.5D+00 * dirder / ( dirder + 0.5D+00 * actred )
+          end if
+
+          if ( 0.1D+00 * fnorm1 >= fnorm .or. temp < 0.1D+00 ) then
+            temp = 0.1D+00
+          end if
+
+          delta = temp * min ( delta, pnorm / 0.1D+00 )
+          par = par / temp
+
+        else
+
+          if ( par == 0.0D+00 .or. ratio >= 0.75D+00 ) then
+            delta = pnorm / 0.5D+00
+            par = 0.5D+00 * par
+          end if
+
+        end if
+!
+!  Test for successful iteration.
+!
+        if ( ratio >= 0.0001D+00 ) then
+          x(1:n) = wa2(1:n)
+          wa2(1:n) = diag(1:n) * x(1:n)
+          fvec(1:m) = wa4(1:m)
+          xnorm = enorm ( n, wa2 )
+          fnorm = fnorm1
+          iter = iter + 1
+        end if
+!
+!  Tests for convergence, termination and stringent tolerances.
+!
+        if ( abs ( actred ) <= ftol .and. prered <= ftol &
+          .and. 0.5D+00 * ratio <= 1.0D+00 ) then
+          info = 1
+        end if
+
+        if ( delta <= xtol * xnorm ) then
+          info = 2
+        end if
+
+        if ( abs ( actred ) <= ftol .and. prered <= ftol &
+          .and. 0.5D+00 * ratio <= 1.0D+00 .and. info == 2 ) then
+          info = 3
+        end if
+
+        if ( info /= 0 ) then
+          go to 340
+        end if
+
+        if ( nfev >= maxfev) then
+          info = 5
+        end if
+
+        if ( abs ( actred ) <= epsmch .and. prered <= epsmch &
+          .and. 0.5D+00 * ratio <= 1.0D+00 ) then
+          info = 6
+        end if
+
+        if ( delta <= epsmch * xnorm ) then
+          info = 7
+        end if
+
+        if ( gnorm <= epsmch ) then
+          info = 8
+        end if
+
+        if ( info /= 0 ) then
+          go to 340
+        end if
+!
+!  End of the inner loop.  Repeat if iteration unsuccessful.
+!
+        if ( ratio < 0.0001D+00 ) then
+          go to 240
+        end if
+!
+!  End of the outer loop.
+!
+     go to 30
+
+  340 continue
+!
+!  Termination, either normal or user imposed.
+!
+  if ( iflag < 0 ) then
+    info = iflag
+  end if
+
+  iflag = 0
+
+  if ( 0 < nprint ) then
+    call fcn ( m, n, x, fvec, wa3, iflag )
+  end if
+
+  return
+end
+subroutine lmstr1 ( fcn, m, n, x, fvec, fjac, ldfjac, tol, info )
+
+!*****************************************************************************80
+!
+!! LMSTR1 minimizes M functions in N variables using Levenberg-Marquardt method.
+!
+!  Discussion:
+!
+!    LMSTR1 minimizes the sum of the squares of M nonlinear functions in
+!    N variables by a modification of the Levenberg-Marquardt algorithm
+!    which uses minimal storage.
+!
+!    This is done by using the more general least-squares solver
+!    LMSTR.  The user must provide a subroutine which calculates
+!    the functions and the rows of the jacobian.
+!
+!  Licensing:
+!
+!    This code is distributed under the GNU LGPL license.
+!
+!  Modified:
+!
+!    19 August 2016
+!
+!  Author:
+!
+!    Original FORTRAN77 version by Jorge More, Burton Garbow, Kenneth Hillstrom.
+!    FORTRAN90 version by John Burkardt.
+!
+!  Reference:
+!
+!    Jorge More, Burton Garbow, Kenneth Hillstrom,
+!    User Guide for MINPACK-1,
+!    Technical Report ANL-80-74,
+!    Argonne National Laboratory, 1980.
+!
+!  Parameters:
+!
+!    Input, external FCN, the name of the user-supplied subroutine which
+!    calculates the functions and the rows of the jacobian.
+!    FCN should have the form:
+!      subroutine fcn ( m, n, x, fvec, fjrow, iflag )
+!      integer ( kind = 4 ) m
+!      integer ( kind = 4 ) n
+!      real ( kind = 8 ) fjrow(n)
+!      real ( kind = 8 ) fvec(m)
+!      integer ( kind = 4 ) iflag
+!      real ( kind = 8 ) x(n)
+!    If IFLAG = 0 on input, then FCN is only being called to allow the user
+!    to print out the current iterate.
+!    If IFLAG = 1 on input, FCN should calculate the functions at X and
+!    return this vector in FVEC.
+!    If the input value of IFLAG is I > 1, calculate the (I-1)-st row of
+!    the jacobian at X, and return this vector in FJROW.
+!    To terminate the algorithm, set the output value of IFLAG negative.
+!
+!    Input, integer ( kind = 4 ) M, the number of functions.
+!
+!    Input, integer ( kind = 4 ) N, the number of variables.  
+!    N must not exceed M.
+!
+!    Input/output, real ( kind = 8 ) X(N).  On input, X must contain an initial
+!    estimate of the solution vector.  On output X contains the final
+!    estimate of the solution vector.
+!
+!    Output, real ( kind = 8 ) FVEC(M), the functions evaluated at the output X.
+!
+!    Output, real ( kind = 8 ) FJAC(LDFJAC,N), an N by N array.  The upper
+!    triangle contains an upper triangular matrix R such that
+!
+!      P' * ( JAC' * JAC ) * P = R' * R,
+!
+!    where P is a permutation matrix and JAC is the final calculated
+!    jacobian.  Column J of P is column IPVT(J) of the identity matrix.
+!    The lower triangular part of FJAC contains information generated
+!    during the computation of R.
+!
+!    Input, integer ( kind = 4 ) LDFJAC, the leading dimension of FJAC.
+!    LDFJAC must be at least N.
+!
+!    Input, real ( kind = 8 ) TOL. Termination occurs when the algorithm 
+!    estimates either that the relative error in the sum of squares is at 
+!    most TOL or that the relative error between X and the solution is at 
+!    most TOL.  TOL should be nonnegative.
+!
+!    Output, integer ( kind = 4 ) INFO, error flag.  If the user has terminated
+!    execution, INFO is set to the (negative) value of IFLAG. See description
+!    of FCN.  Otherwise, INFO is set as follows:
+!    0, improper input parameters.
+!    1, algorithm estimates that the relative error in the sum of squares
+!       is at most TOL.
+!    2, algorithm estimates that the relative error between X and the
+!       solution is at most TOL.
+!    3, conditions for INFO = 1 and INFO = 2 both hold.
+!    4, FVEC is orthogonal to the columns of the jacobian to machine precision.
+!    5, number of calls to FCN with IFLAG = 1 has reached 100*(N+1).
+!    6, TOL is too small.  No further reduction in the sum of squares
+!       is possible.
+!    7, TOL is too small.  No further improvement in the approximate
+!       solution X is possible.
+!
+  implicit none
+
+  integer ( kind = 4 ) ldfjac
+  integer ( kind = 4 ) m
+  integer ( kind = 4 ) n
+
+  real ( kind = 8 ) diag(n)
+  real ( kind = 8 ) factor
+  external fcn
+  real ( kind = 8 ) fjac(ldfjac,n)
+  real ( kind = 8 ) ftol
+  real ( kind = 8 ) fvec(m)
+  real ( kind = 8 ) gtol
+  integer ( kind = 4 ) info
+  integer ( kind = 4 ) ipvt(n)
+  integer ( kind = 4 ) maxfev
+  integer ( kind = 4 ) mode
+  integer ( kind = 4 ) nfev
+  integer ( kind = 4 ) njev
+  integer ( kind = 4 ) nprint
+  real ( kind = 8 ) qtf(n)
+  real ( kind = 8 ) tol
+  real ( kind = 8 ) x(n)
+  real ( kind = 8 ) xtol
+
+  if ( n <= 0 ) then
+    info = 0
+    return
+  end if
+
+  if ( m < n ) then
+    info = 0
+    return
+  end if
+
+  if ( ldfjac < n ) then
+    info = 0
+    return
+  end if
+
+  if ( tol < 0.0D+00 ) then
+    info = 0
+    return
+  end if
+
+  fvec(1:n) = 0.0D+00
+  fjac(1:ldfjac,1:n) = 0.0D+00
+  ftol = tol
+  xtol = tol
+  gtol = 0.0D+00
+  maxfev = 100 * ( n + 1 )
+  diag(1:n) = 0.0D+00
+  mode = 1
+  factor = 100.0D+00
+  nprint = 0
+  info = 0
+  nfev = 0
+  njev = 0
+  ipvt(1:n) = 0
+  qtf(1:n) = 0.0D+00
+
+  call lmstr ( fcn, m, n, x, fvec, fjac, ldfjac, ftol, xtol, gtol, maxfev, &
+    diag, mode, factor, nprint, info, nfev, njev, ipvt, qtf )
+
+  if ( info == 8 ) then
+    info = 4
+  end if
+
+  return
+end
+subroutine qform ( m, n, q, ldq )
+
+!*****************************************************************************80
+!
+!! QFORM produces the explicit QR factorization of a matrix.
+!
+!  Discussion:
+!
+!    The QR factorization of a matrix is usually accumulated in implicit
+!    form, that is, as a series of orthogonal transformations of the
+!    original matrix.  This routine carries out those transformations,
+!    to explicitly exhibit the factorization constructed by QRFAC.
+!
+!  Licensing:
+!
+!    This code is distributed under the GNU LGPL license.
+!
+!  Modified:
+!
+!    06 April 2010
+!
+!  Author:
+!
+!    Original FORTRAN77 version by Jorge More, Burton Garbow, Kenneth Hillstrom.
+!    FORTRAN90 version by John Burkardt.
+!
+!  Reference:
+!
+!    Jorge More, Burton Garbow, Kenneth Hillstrom,
+!    User Guide for MINPACK-1,
+!    Technical Report ANL-80-74,
+!    Argonne National Laboratory, 1980.
+!
+!  Parameters:
+!
+!    Input, integer ( kind = 4 ) M, is a positive integer input variable set
+!    to the number of rows of A and the order of Q.
+!
+!    Input, integer ( kind = 4 ) N, is a positive integer input variable set
+!    to the number of columns of A.
+!
+!    Input/output, real ( kind = 8 ) Q(LDQ,M).  Q is an M by M array.
+!    On input the full lower trapezoid in the first min(M,N) columns of Q
+!    contains the factored form.
+!    On output, Q has been accumulated into a square matrix.
+!
+!    Input, integer ( kind = 4 ) LDQ, is a positive integer input variable 
+!    not less than M which specifies the leading dimension of the array Q.
+!
+  implicit none
+
+  integer ( kind = 4 ) ldq
+  integer ( kind = 4 ) m
+  integer ( kind = 4 ) n
+
+  integer ( kind = 4 ) j
+  integer ( kind = 4 ) k
+  integer ( kind = 4 ) l
+  integer ( kind = 4 ) minmn
+  real ( kind = 8 ) q(ldq,m)
+  real ( kind = 8 ) temp
+  real ( kind = 8 ) wa(m)
+
+  minmn = min ( m, n )
+
+  do j = 2, minmn
+    q(1:j-1,j) = 0.0D+00
+  end do
+!
+!  Initialize remaining columns to those of the identity matrix.
+!
+  q(1:m,n+1:m) = 0.0D+00
+
+  do j = n+1, m
+    q(j,j) = 1.0D+00
+  end do
+!
+!  Accumulate Q from its factored form.
+!
+  do l = 1, minmn
+
+    k = minmn - l + 1
+
+    wa(k:m) = q(k:m,k)
+
+    q(k:m,k) = 0.0D+00
+    q(k,k) = 1.0D+00
+
+    if ( wa(k) /= 0.0D+00 ) then
+
+      do j = k, m
+        temp = dot_product ( wa(k:m), q(k:m,j) ) / wa(k)
+        q(k:m,j) = q(k:m,j) - temp * wa(k:m)
+      end do
+
+    end if
+
+  end do
+
+  return
+end
+subroutine qrfac ( m, n, a, lda, pivot, ipvt, lipvt, rdiag, acnorm )
+
+!*****************************************************************************80
+!
+!! QRFAC computes a QR factorization using Householder transformations.
+!
+!  Discussion:
+!
+!    This subroutine uses Householder transformations with column
+!    pivoting (optional) to compute a QR factorization of the
+!    M by N matrix A.  That is, QRFAC determines an orthogonal
+!    matrix Q, a permutation matrix P, and an upper trapezoidal
+!    matrix R with diagonal elements of nonincreasing magnitude,
+!    such that A*P = Q*R.  The Householder transformation for
+!    column K, K = 1,2,...,min(M,N), is of the form
+!
+!      I - ( 1 / U(K) ) * U * U'
+!
+!    where U has zeros in the first K-1 positions.  The form of
+!    this transformation and the method of pivoting first
+!    appeared in the corresponding LINPACK subroutine.
+!
+!  Licensing:
+!
+!    This code is distributed under the GNU LGPL license.
+!
+!  Modified:
+!
+!    06 April 2010
+!
+!  Author:
+!
+!    Original FORTRAN77 version by Jorge More, Burton Garbow, Kenneth Hillstrom.
+!    FORTRAN90 version by John Burkardt.
+!
+!  Reference:
+!
+!    Jorge More, Burton Garbow, Kenneth Hillstrom,
+!    User Guide for MINPACK-1,
+!    Technical Report ANL-80-74,
+!    Argonne National Laboratory, 1980.
+!
+!  Parameters:
+!
+!    Input, integer ( kind = 4 ) M, the number of rows of A.
+!
+!    Input, integer ( kind = 4 ) N, the number of columns of A.
+!
+!    Input/output, real ( kind = 8 ) A(LDA,N), the M by N array.
+!    On input, A contains the matrix for which the QR factorization is to
+!    be computed.  On output, the strict upper trapezoidal part of A contains
+!    the strict upper trapezoidal part of R, and the lower trapezoidal
+!    part of A contains a factored form of Q (the non-trivial elements of
+!    the U vectors described above).
+!
+!    Input, integer ( kind = 4 ) LDA, the leading dimension of A, which must
+!    be no less than M.
+!
+!    Input, logical PIVOT, is TRUE if column pivoting is to be carried out.
+!
+!    Output, integer ( kind = 4 ) IPVT(LIPVT), defines the permutation matrix P 
+!    such that A*P = Q*R.  Column J of P is column IPVT(J) of the identity 
+!    matrix.  If PIVOT is false, IPVT is not referenced.
+!
+!    Input, integer ( kind = 4 ) LIPVT, the dimension of IPVT, which should 
+!    be N if pivoting is used.
+!
+!    Output, real ( kind = 8 ) RDIAG(N), contains the diagonal elements of R.
+!
+!    Output, real ( kind = 8 ) ACNORM(N), the norms of the corresponding
+!    columns of the input matrix A.  If this information is not needed,
+!    then ACNORM can coincide with RDIAG.
+!
+  implicit none
+
+  integer ( kind = 4 ) lda
+  integer ( kind = 4 ) lipvt
+  integer ( kind = 4 ) m
+  integer ( kind = 4 ) n
+
+  real ( kind = 8 ) a(lda,n)
+  real ( kind = 8 ) acnorm(n)
+  real ( kind = 8 ) ajnorm
+  real ( kind = 8 ) enorm
+  real ( kind = 8 ) epsmch
+  integer ( kind = 4 ) i
+  integer ( kind = 4 ) i4_temp
+  integer ( kind = 4 ) ipvt(lipvt)
+  integer ( kind = 4 ) j
+  integer ( kind = 4 ) k
+  integer ( kind = 4 ) kmax
+  integer ( kind = 4 ) minmn
+  logical pivot
+  real ( kind = 8 ) r8_temp(m)
+  real ( kind = 8 ) rdiag(n)
+  real ( kind = 8 ) temp
+  real ( kind = 8 ) wa(n)
+
+  epsmch = epsilon ( epsmch )
+!
+!  Compute the initial column norms and initialize several arrays.
+!
+  do j = 1, n
+    acnorm(j) = enorm ( m, a(1:m,j) )
+  end do
+
+  rdiag(1:n) = acnorm(1:n)
+  wa(1:n) = acnorm(1:n)
+
+  if ( pivot ) then
+    do j = 1, n
+      ipvt(j) = j
+    end do
+  end if
+!
+!  Reduce A to R with Householder transformations.
+!
+  minmn = min ( m, n )
+
+  do j = 1, minmn
+!
+!  Bring the column of largest norm into the pivot position.
+!
+    if ( pivot ) then
+
+      kmax = j
+
+      do k = j, n
+        if ( rdiag(kmax) < rdiag(k) ) then
+          kmax = k
+        end if
+      end do
+
+      if ( kmax /= j ) then
+
+        r8_temp(1:m) = a(1:m,j)
+        a(1:m,j)     = a(1:m,kmax)
+        a(1:m,kmax)  = r8_temp(1:m)
+
+        rdiag(kmax) = rdiag(j)
+        wa(kmax) = wa(j)
+
+        i4_temp    = ipvt(j)
+        ipvt(j)    = ipvt(kmax)
+        ipvt(kmax) = i4_temp
+
+      end if
+
+    end if
+!
+!  Compute the Householder transformation to reduce the
+!  J-th column of A to a multiple of the J-th unit vector.
+!
+    ajnorm = enorm ( m-j+1, a(j,j) )
+
+    if ( ajnorm /= 0.0D+00 ) then
+
+      if ( a(j,j) < 0.0D+00 ) then
+        ajnorm = -ajnorm
+      end if
+
+      a(j:m,j) = a(j:m,j) / ajnorm
+      a(j,j) = a(j,j) + 1.0D+00
+!
+!  Apply the transformation to the remaining columns and update the norms.
+!
+      do k = j + 1, n
+
+        temp = dot_product ( a(j:m,j), a(j:m,k) ) / a(j,j)
+
+        a(j:m,k) = a(j:m,k) - temp * a(j:m,j)
+
+        if ( pivot .and. rdiag(k) /= 0.0D+00 ) then
+
+          temp = a(j,k) / rdiag(k)
+          rdiag(k) = rdiag(k) * sqrt ( max ( 0.0D+00, 1.0D+00-temp ** 2 ) )
+
+          if ( 0.05D+00 * ( rdiag(k) / wa(k) ) ** 2 <= epsmch ) then
+            rdiag(k) = enorm ( m-j, a(j+1,k) )
+            wa(k) = rdiag(k)
+          end if
+
+        end if
+
+      end do
+
+    end if
+
+    rdiag(j) = - ajnorm
+
+  end do
+
+  return
+end
+subroutine qrsolv ( n, r, ldr, ipvt, diag, qtb, x, sdiag )
+
+!*****************************************************************************80
+!
+!! QRSOLV solves a rectangular linear system A*x=b in the least squares sense.
+!
+!  Discussion:
+!
+!    Given an M by N matrix A, an N by N diagonal matrix D,
+!    and an M-vector B, the problem is to determine an X which
+!    solves the system
+!
+!      A*X = B
+!      D*X = 0
+!
+!    in the least squares sense.
+!
+!    This subroutine completes the solution of the problem
+!    if it is provided with the necessary information from the
+!    QR factorization, with column pivoting, of A.  That is, if
+!    Q*P = Q*R, where P is a permutation matrix, Q has orthogonal
+!    columns, and R is an upper triangular matrix with diagonal
+!    elements of nonincreasing magnitude, then QRSOLV expects
+!    the full upper triangle of R, the permutation matrix p,
+!    and the first N components of Q'*B.
+!
+!    The system is then equivalent to
+!
+!      R*Z = Q'*B
+!      P'*D*P*Z = 0
+!
+!    where X = P*Z.  If this system does not have full rank,
+!    then a least squares solution is obtained.  On output QRSOLV
+!    also provides an upper triangular matrix S such that
+!
+!      P'*(A'*A + D*D)*P = S'*S.
+!
+!    S is computed within QRSOLV and may be of separate interest.
+!
+!  Licensing:
+!
+!    This code is distributed under the GNU LGPL license.
+!
+!  Modified:
+!
+!    06 April 2010
+!
+!  Author:
+!
+!    Original FORTRAN77 version by Jorge More, Burton Garbow, Kenneth Hillstrom.
+!    FORTRAN90 version by John Burkardt.
+!
+!  Reference:
+!
+!    Jorge More, Burton Garbow, Kenneth Hillstrom,
+!    User Guide for MINPACK-1,
+!    Technical Report ANL-80-74,
+!    Argonne National Laboratory, 1980.
+!
+!  Parameters:
+!
+!    Input, integer ( kind = 4 ) N, the order of R.
+!
+!    Input/output, real ( kind = 8 ) R(LDR,N), the N by N matrix.
+!    On input the full upper triangle must contain the full upper triangle
+!    of the matrix R.  On output the full upper triangle is unaltered, and
+!    the strict lower triangle contains the strict upper triangle
+!    (transposed) of the upper triangular matrix S.
+!
+!    Input, integer ( kind = 4 ) LDR, the leading dimension of R, which must be
+!    at least N.
+!
+!    Input, integer ( kind = 4 ) IPVT(N), defines the permutation matrix P such 
+!    that A*P = Q*R.  Column J of P is column IPVT(J) of the identity matrix.
+!
+!    Input, real ( kind = 8 ) DIAG(N), the diagonal elements of the matrix D.
+!
+!    Input, real ( kind = 8 ) QTB(N), the first N elements of the vector Q'*B.
+!
+!    Output, real ( kind = 8 ) X(N), the least squares solution.
+!
+!    Output, real ( kind = 8 ) SDIAG(N), the diagonal elements of the upper
+!    triangular matrix S.
+!
+  implicit none
+
+  integer ( kind = 4 ) ldr
+  integer ( kind = 4 ) n
+
+  real ( kind = 8 ) c
+  real ( kind = 8 ) cotan
+  real ( kind = 8 ) diag(n)
+  integer ( kind = 4 ) i
+  integer ( kind = 4 ) ipvt(n)
+  integer ( kind = 4 ) j
+  integer ( kind = 4 ) k
+  integer ( kind = 4 ) l
+  integer ( kind = 4 ) nsing
+  real ( kind = 8 ) qtb(n)
+  real ( kind = 8 ) qtbpj
+  real ( kind = 8 ) r(ldr,n)
+  real ( kind = 8 ) s
+  real ( kind = 8 ) sdiag(n)
+  real ( kind = 8 ) sum2
+  real ( kind = 8 ) t
+  real ( kind = 8 ) temp
+  real ( kind = 8 ) wa(n)
+  real ( kind = 8 ) x(n)
+!
+!  Copy R and Q'*B to preserve input and initialize S.
+!
+!  In particular, save the diagonal elements of R in X.
+!
+  do j = 1, n
+    r(j:n,j) = r(j,j:n)
+    x(j) = r(j,j)
+  end do
+
+  wa(1:n) = qtb(1:n)
+!
+!  Eliminate the diagonal matrix D using a Givens rotation.
+!
+  do j = 1, n
+!
+!  Prepare the row of D to be eliminated, locating the
+!  diagonal element using P from the QR factorization.
+!
+    l = ipvt(j)
+
+    if ( diag(l) /= 0.0D+00 ) then
+
+      sdiag(j:n) = 0.0D+00
+      sdiag(j) = diag(l)
+!
+!  The transformations to eliminate the row of D
+!  modify only a single element of Q'*B
+!  beyond the first N, which is initially zero.
+!
+      qtbpj = 0.0D+00
+
+      do k = j, n
+!
+!  Determine a Givens rotation which eliminates the
+!  appropriate element in the current row of D.
+!
+        if ( sdiag(k) /= 0.0D+00 ) then
+
+          if ( abs ( r(k,k) ) < abs ( sdiag(k) ) ) then
+            cotan = r(k,k) / sdiag(k)
+            s = 0.5D+00 / sqrt ( 0.25D+00 + 0.25D+00 * cotan ** 2 )
+            c = s * cotan
+          else
+            t = sdiag(k) / r(k,k)
+            c = 0.5D+00 / sqrt ( 0.25D+00 + 0.25D+00 * t ** 2 )
+            s = c * t
+          end if
+!
+!  Compute the modified diagonal element of R and
+!  the modified element of (Q'*B,0).
+!
+          r(k,k) = c * r(k,k) + s * sdiag(k)
+          temp = c * wa(k) + s * qtbpj
+          qtbpj = - s * wa(k) + c * qtbpj
+          wa(k) = temp
+!
+!  Accumulate the tranformation in the row of S.
+!
+          do i = k+1, n
+            temp = c * r(i,k) + s * sdiag(i)
+            sdiag(i) = - s * r(i,k) + c * sdiag(i)
+            r(i,k) = temp
+          end do
+
+        end if
+
+      end do
+
+    end if
+!
+!  Store the diagonal element of S and restore
+!  the corresponding diagonal element of R.
+!
+    sdiag(j) = r(j,j)
+    r(j,j) = x(j)
+
+  end do
+!
+!  Solve the triangular system for Z.  If the system is
+!  singular, then obtain a least squares solution.
+!
+  nsing = n
+
+  do j = 1, n
+
+    if ( sdiag(j) == 0.0D+00 .and. nsing == n ) then
+      nsing = j - 1
+    end if
+
+    if ( nsing < n ) then
+      wa(j) = 0.0D+00
+    end if
+
+  end do
+
+  do j = nsing, 1, -1
+    sum2 = dot_product ( wa(j+1:nsing), r(j+1:nsing,j) )
+    wa(j) = ( wa(j) - sum2 ) / sdiag(j)
+  end do
+!
+!  Permute the components of Z back to components of X.
+!
+  do j = 1, n
+    l = ipvt(j)
+    x(l) = wa(j)
+  end do
+
+  return
+end
+subroutine r1mpyq ( m, n, a, lda, v, w )
+
+!*****************************************************************************80
+!
+!! R1MPYQ computes A*Q, where Q is the product of Householder transformations.
+!
+!  Discussion:
+!
+!    Given an M by N matrix A, this subroutine computes A*Q where
+!    Q is the product of 2*(N - 1) transformations
+!
+!      GV(N-1)*...*GV(1)*GW(1)*...*GW(N-1)
+!
+!    and GV(I), GW(I) are Givens rotations in the (I,N) plane which
+!    eliminate elements in the I-th and N-th planes, respectively.
+!    Q itself is not given, rather the information to recover the
+!    GV, GW rotations is supplied.
+!
+!  Licensing:
+!
+!    This code is distributed under the GNU LGPL license.
+!
+!  Modified:
+!
+!    06 April 2010
+!
+!  Author:
+!
+!    Original FORTRAN77 version by Jorge More, Burton Garbow, Kenneth Hillstrom.
+!    FORTRAN90 version by John Burkardt.
+!
+!  Reference:
+!
+!    Jorge More, Burton Garbow, Kenneth Hillstrom,
+!    User Guide for MINPACK-1,
+!    Technical Report ANL-80-74,
+!    Argonne National Laboratory, 1980.
+!
+!  Parameters:
+!
+!    Input, integer ( kind = 4 ) M, the number of rows of A.
+!
+!    Input, integer ( kind = 4 ) N, the number of columns of A.
+!
+!    Input/output, real ( kind = 8 ) A(LDA,N), the M by N array.
+!    On input, the matrix A to be postmultiplied by the orthogonal matrix Q.
+!    On output, the value of A*Q.
+!
+!    Input, integer ( kind = 4 ) LDA, the leading dimension of A, which must not
+!    be less than M.
+!
+!    Input, real ( kind = 8 ) V(N), W(N), contain the information necessary
+!    to recover the Givens rotations GV and GW.
+!
+  implicit none
+
+  integer ( kind = 4 ) lda
+  integer ( kind = 4 ) m
+  integer ( kind = 4 ) n
+
+  real ( kind = 8 ) a(lda,n)
+  real ( kind = 8 ) c
+  integer ( kind = 4 ) i
+  integer ( kind = 4 ) j
+  real ( kind = 8 ) s
+  real ( kind = 8 ) temp
+  real ( kind = 8 ) v(n)
+  real ( kind = 8 ) w(n)
+!
+!  Apply the first set of Givens rotations to A.
+!
+  do j = n - 1, 1, -1
+
+     if ( 1.0D+00 < abs ( v(j) ) ) then
+       c = 1.0D+00 / v(j)
+       s = sqrt ( 1.0D+00 - c ** 2 )
+     else
+       s = v(j)
+       c = sqrt ( 1.0D+00 - s ** 2 )
+     end if
+
+     do i = 1, m
+        temp =   c * a(i,j) - s * a(i,n)
+        a(i,n) = s * a(i,j) + c * a(i,n)
+        a(i,j) = temp
+     end do
+
+  end do
+!
+!  Apply the second set of Givens rotations to A.
+!
+  do j = 1, n - 1
+
+     if ( abs ( w(j) ) > 1.0D+00 ) then
+       c = 1.0D+00 / w(j)
+       s = sqrt ( 1.0D+00 - c ** 2 )
+     else
+       s = w(j)
+       c = sqrt ( 1.0D+00 - s ** 2 )
+     end if
+
+     do i = 1, m
+        temp =     c * a(i,j) + s * a(i,n)
+        a(i,n) = - s * a(i,j) + c * a(i,n)
+        a(i,j) = temp
+     end do
+
+  end do
+
+  return
+end
+subroutine r1updt ( m, n, s, ls, u, v, w, sing )
+
+!*****************************************************************************80
+!
+!! R1UPDT re-triangularizes a matrix after a rank one update.
+!
+!  Discussion:
+!
+!    Given an M by N lower trapezoidal matrix S, an M-vector U, and an
+!    N-vector V, the problem is to determine an orthogonal matrix Q such that
+!
+!      (S + U * V' ) * Q
+!
+!    is again lower trapezoidal.
+!
+!    This subroutine determines Q as the product of 2 * (N - 1)
+!    transformations
+!
+!      GV(N-1)*...*GV(1)*GW(1)*...*GW(N-1)
+!
+!    where GV(I), GW(I) are Givens rotations in the (I,N) plane
+!    which eliminate elements in the I-th and N-th planes,
+!    respectively.  Q itself is not accumulated, rather the
+!    information to recover the GV and GW rotations is returned.
+!
+!  Licensing:
+!
+!    This code is distributed under the GNU LGPL license.
+!
+!  Modified:
+!
+!    06 April 2010
+!
+!  Author:
+!
+!    Original FORTRAN77 version by Jorge More, Burton Garbow, Kenneth Hillstrom.
+!    FORTRAN90 version by John Burkardt.
+!
+!  Reference:
+!
+!    Jorge More, Burton Garbow, Kenneth Hillstrom,
+!    User Guide for MINPACK-1,
+!    Technical Report ANL-80-74,
+!    Argonne National Laboratory, 1980.
+!
+!  Parameters:
+!
+!    Input, integer ( kind = 4 ) M, the number of rows of S.
+!
+!    Input, integer ( kind = 4 ) N, the number of columns of S.  
+!    N must not exceed M.
+!
+!    Input/output, real ( kind = 8 ) S(LS).  On input, the lower trapezoidal
+!    matrix S stored by columns.  On output S contains the lower trapezoidal
+!    matrix produced as described above.
+!
+!    Input, integer ( kind = 4 ) LS, the length of the S array.  LS must be at
+!    least (N*(2*M-N+1))/2.
+!
+!    Input, real ( kind = 8 ) U(M), the U vector.
+!
+!    Input/output, real ( kind = 8 ) V(N).  On input, V must contain the 
+!    vector V.  On output V contains the information necessary to recover the
+!    Givens rotations GV described above.
+!
+!    Output, real ( kind = 8 ) W(M), contains information necessary to
+!    recover the Givens rotations GW described above.
+!
+!    Output, logical SING, is set to TRUE if any of the diagonal elements
+!    of the output S are zero.  Otherwise SING is set FALSE.
+!
+  implicit none
+
+  integer ( kind = 4 ) ls
+  integer ( kind = 4 ) m
+  integer ( kind = 4 ) n
+
+  real ( kind = 8 ) cos
+  real ( kind = 8 ) cotan
+  real ( kind = 8 ) giant
+  integer ( kind = 4 ) i
+  integer ( kind = 4 ) j
+  integer ( kind = 4 ) jj
+  integer ( kind = 4 ) l
+  real ( kind = 8 ) s(ls)
+  real ( kind = 8 ) sin
+  logical sing
+  real ( kind = 8 ) tan
+  real ( kind = 8 ) tau
+  real ( kind = 8 ) temp
+  real ( kind = 8 ) u(m)
+  real ( kind = 8 ) v(n)
+  real ( kind = 8 ) w(m)
+!
+!  GIANT is the largest magnitude.
+!
+  giant = huge ( giant )
+!
+!  Initialize the diagonal element pointer.
+!
+  jj = ( n * ( 2 * m - n + 1 ) ) / 2 - ( m - n )
+!
+!  Move the nontrivial part of the last column of S into W.
+!
+  l = jj
+  do i = n, m
+    w(i) = s(l)
+    l = l + 1
+  end do
+!
+!  Rotate the vector V into a multiple of the N-th unit vector
+!  in such a way that a spike is introduced into W.
+!
+  do j = n - 1, 1, -1
+
+    jj = jj - ( m - j + 1 )
+    w(j) = 0.0D+00
+
+    if ( v(j) /= 0.0D+00 ) then
+!
+!  Determine a Givens rotation which eliminates the
+!  J-th element of V.
+!
+      if ( abs ( v(n) ) < abs ( v(j) ) ) then
+        cotan = v(n) / v(j)
+        sin = 0.5D+00 / sqrt ( 0.25D+00 + 0.25D+00 * cotan ** 2 )
+        cos = sin * cotan
+        tau = 1.0D+00
+        if ( abs ( cos ) * giant > 1.0D+00 ) then
+          tau = 1.0D+00 / cos
+        end if
+      else
+        tan = v(j) / v(n)
+        cos = 0.5D+00 / sqrt ( 0.25D+00 + 0.25D+00 * tan ** 2 )
+        sin = cos * tan
+        tau = sin
+      end if
+!
+!  Apply the transformation to V and store the information
+!  necessary to recover the Givens rotation.
+!
+      v(n) = sin * v(j) + cos * v(n)
+      v(j) = tau
+!
+!  Apply the transformation to S and extend the spike in W.
+!
+      l = jj
+      do i = j, m
+        temp = cos * s(l) - sin * w(i)
+        w(i) = sin * s(l) + cos * w(i)
+        s(l) = temp
+        l = l + 1
+      end do
+
+    end if
+
+  end do
+!
+!  Add the spike from the rank 1 update to W.
+!
+   w(1:m) = w(1:m) + v(n) * u(1:m)
+!
+!  Eliminate the spike.
+!
+  sing = .false.
+
+  do j = 1, n-1
+
+    if ( w(j) /= 0.0D+00 ) then
+!
+!  Determine a Givens rotation which eliminates the
+!  J-th element of the spike.
+!
+      if ( abs ( s(jj) ) < abs ( w(j) ) ) then
+
+        cotan = s(jj) / w(j)
+        sin = 0.5D+00 / sqrt ( 0.25D+00 + 0.25D+00 * cotan ** 2 )
+        cos = sin * cotan
+
+        if ( 1.0D+00 < abs ( cos ) * giant ) then
+          tau = 1.0D+00 / cos
+        else
+          tau = 1.0D+00
+        end if
+
+      else
+
+        tan = w(j) / s(jj)
+        cos = 0.5D+00 / sqrt ( 0.25D+00 + 0.25D+00 * tan ** 2 )
+        sin = cos * tan
+        tau = sin
+
+      end if
+!
+!  Apply the transformation to S and reduce the spike in W.
+!
+      l = jj
+      do i = j, m
+        temp = cos * s(l) + sin * w(i)
+        w(i) = - sin * s(l) + cos * w(i)
+        s(l) = temp
+        l = l + 1
+      end do
+!
+!  Store the information necessary to recover the Givens rotation.
+!
+      w(j) = tau
+
+    end if
+!
+!  Test for zero diagonal elements in the output S.
+!
+    if ( s(jj) == 0.0D+00 ) then
+      sing = .true.
+    end if
+
+    jj = jj + ( m - j + 1 )
+
+  end do
+!
+!  Move W back into the last column of the output S.
+!
+  l = jj
+  do i = n, m
+    s(l) = w(i)
+    l = l + 1
+  end do
+
+  if ( s(jj) == 0.0D+00 ) then
+    sing = .true.
+  end if
+
+  return
+end
+subroutine r8vec_print ( n, a, title )
+
+!*****************************************************************************80
+!
+!! R8VEC_PRINT prints an R8VEC.
+!
+!  Discussion:
+!
+!    An R8VEC is a vector of R8's.
+!
+!  Licensing:
+!
+!    This code is distributed under the GNU LGPL license.
+!
+!  Modified:
+!
+!    22 August 2000
+!
+!  Author:
+!
+!    John Burkardt
+!
+!  Parameters:
+!
+!    Input, integer ( kind = 4 ) N, the number of components of the vector.
+!
+!    Input, real ( kind = 8 ) A(N), the vector to be printed.
+!
+!    Input, character ( len = * ) TITLE, a title.
+!
+  implicit none
+
+  integer ( kind = 4 ) n
+
+  real ( kind = 8 ) a(n)
+  integer ( kind = 4 ) i
+  character ( len = * ) title
+
+  write ( *, '(a)' ) ' '
+  write ( *, '(a)' ) trim ( title )
+  write ( *, '(a)' ) ' '
+  do i = 1, n
+    write ( *, '(2x,i8,2x,g16.8)' ) i, a(i)
+  end do
+
+  return
+end
+subroutine rwupdt ( n, r, ldr, w, b, alpha, c, s )
+
+!*****************************************************************************80
+!
+!! RWUPDT computes the decomposition of triangular matrix augmented by one row.
+!
+!  Discussion:
+!
+!    Given an N by N upper triangular matrix R, this subroutine
+!    computes the QR decomposition of the matrix formed when a row
+!    is added to R.  If the row is specified by the vector W, then
+!    RWUPDT determines an orthogonal matrix Q such that when the
+!    N+1 by N matrix composed of R augmented by W is premultiplied
+!    by Q', the resulting matrix is upper trapezoidal.
+!    The matrix Q' is the product of N transformations
+!
+!      G(N)*G(N-1)* ... *G(1)
+!
+!    where G(I) is a Givens rotation in the (I,N+1) plane which eliminates
+!    elements in the (N+1)-st plane.  RWUPDT also computes the product
+!    Q'*C where C is the (N+1)-vector (B,ALPHA).  Q itself is not
+!    accumulated, rather the information to recover the G rotations is
+!    supplied.
+!
+!  Licensing:
+!
+!    This code is distributed under the GNU LGPL license.
+!
+!  Modified:
+!
+!    06 April 2010
+!
+!  Author:
+!
+!    Original FORTRAN77 version by Jorge More, Burton Garbow, Kenneth Hillstrom.
+!    FORTRAN90 version by John Burkardt.
+!
+!  Reference:
+!
+!    Jorge More, Burton Garbow, Kenneth Hillstrom,
+!    User Guide for MINPACK-1,
+!    Technical Report ANL-80-74,
+!    Argonne National Laboratory, 1980.
+!
+!  Parameters:
+!
+!    Input, integer ( kind = 4 ) N, the order of R.
+!
+!    Input/output, real ( kind = 8 ) R(LDR,N).  On input the upper triangular
+!    part of R must contain the matrix to be updated.  On output R contains the
+!    updated triangular matrix.
+!
+!    Input, integer ( kind = 4 ) LDR, the leading dimension of the array R.
+!    LDR must not be less than N.
+!
+!    Input, real ( kind = 8 ) W(N), the row vector to be added to R.
+!
+!    Input/output, real ( kind = 8 ) B(N).  On input, the first N elements
+!    of the vector C.  On output the first N elements of the vector Q'*C.
+!
+!    Input/output, real ( kind = 8 ) ALPHA.  On input, the (N+1)-st element
+!    of the vector C.  On output the (N+1)-st element of the vector Q'*C.
+!
+!    Output, real ( kind = 8 ) C(N), S(N), the cosines and sines of the
+!    transforming Givens rotations.
+!
+  implicit none
+
+  integer ( kind = 4 ) ldr
+  integer ( kind = 4 ) n
+
+  real ( kind = 8 ) alpha
+  real ( kind = 8 ) b(n)
+  real ( kind = 8 ) c(n)
+  real ( kind = 8 ) cotan
+  integer ( kind = 4 ) i
+  integer ( kind = 4 ) j
+  real ( kind = 8 ) r(ldr,n)
+  real ( kind = 8 ) rowj
+  real ( kind = 8 ) s(n)
+  real ( kind = 8 ) tan
+  real ( kind = 8 ) temp
+  real ( kind = 8 ) w(n)
+
+  do j = 1, n
+
+    rowj = w(j)
+!
+!  Apply the previous transformations to R(I,J), I=1,2,...,J-1, and to W(J).
+!
+    do i = 1, j - 1
+      temp =   c(i) * r(i,j) + s(i) * rowj
+      rowj = - s(i) * r(i,j) + c(i) * rowj
+      r(i,j) = temp
+    end do
+!
+!  Determine a Givens rotation which eliminates W(J).
+!
+    c(j) = 1.0D+00
+    s(j) = 0.0D+00
+
+    if ( rowj /= 0.0D+00 ) then
+
+      if ( abs ( r(j,j) ) < abs ( rowj ) ) then
+        cotan = r(j,j) / rowj
+        s(j) = 0.5D+00 / sqrt ( 0.25D+00 + 0.25D+00 * cotan ** 2 )
+        c(j) = s(j) * cotan
+      else
+        tan = rowj / r(j,j)
+        c(j) = 0.5D+00 / sqrt ( 0.25D+00 + 0.25D+00 * tan ** 2 )
+        s(j) = c(j) * tan
+      end if
+!
+!  Apply the current transformation to R(J,J), B(J), and ALPHA.
+!
+      r(j,j) =  c(j) * r(j,j) + s(j) * rowj
+      temp =    c(j) * b(j)   + s(j) * alpha
+      alpha = - s(j) * b(j)   + c(j) * alpha
+      b(j) = temp
+
+    end if
+
+  end do
+
+  return
+end
+subroutine timestamp ( )
+
+!*****************************************************************************80
+!
+!! TIMESTAMP prints the current YMDHMS date as a time stamp.
+!
+!  Example:
+!
+!    31 May 2001   9:45:54.872 AM
+!
+!  Licensing:
+!
+!    This code is distributed under the GNU LGPL license.
+!
+!  Modified:
+!
+!    18 May 2013
+!
+!  Author:
+!
+!    John Burkardt
+!
+!  Parameters:
+!
+!    None
+!
+  implicit none
+
+  character ( len = 8 ) ampm
+  integer ( kind = 4 ) d
+  integer ( kind = 4 ) h
+  integer ( kind = 4 ) m
+  integer ( kind = 4 ) mm
+  character ( len = 9 ), parameter, dimension(12) :: month = (/ &
+    'January  ', 'February ', 'March    ', 'April    ', &
+    'May      ', 'June     ', 'July     ', 'August   ', &
+    'September', 'October  ', 'November ', 'December ' /)
+  integer ( kind = 4 ) n
+  integer ( kind = 4 ) s
+  integer ( kind = 4 ) values(8)
+  integer ( kind = 4 ) y
+
+  call date_and_time ( values = values )
+
+  y = values(1)
+  m = values(2)
+  d = values(3)
+  h = values(5)
+  n = values(6)
+  s = values(7)
+  mm = values(8)
+
+  if ( h < 12 ) then
+    ampm = 'AM'
+  else if ( h == 12 ) then
+    if ( n == 0 .and. s == 0 ) then
+      ampm = 'Noon'
+    else
+      ampm = 'PM'
+    end if
+  else
+    h = h - 12
+    if ( h < 12 ) then
+      ampm = 'PM'
+    else if ( h == 12 ) then
+      if ( n == 0 .and. s == 0 ) then
+        ampm = 'Midnight'
+      else
+        ampm = 'AM'
+      end if
+    end if
+  end if
+
+  write ( *, '(i2.2,1x,a,1x,i4,2x,i2,a1,i2.2,a1,i2.2,a1,i3.3,1x,a)' ) &
+    d, trim ( month(m) ), y, h, ':', n, ':', s, '.', mm, trim ( ampm )
+
+  return
+end
diff --git a/src/mesonh/micro/modd_lima_precip_scavengingn.f90 b/src/common/micro/modd_lima_precip_scavengingn.F90
similarity index 100%
rename from src/mesonh/micro/modd_lima_precip_scavengingn.f90
rename to src/common/micro/modd_lima_precip_scavengingn.F90
diff --git a/src/mesonh/micro/modd_param_lima.f90 b/src/common/micro/modd_param_lima.F90
similarity index 97%
rename from src/mesonh/micro/modd_param_lima.f90
rename to src/common/micro/modd_param_lima.F90
index d199c2a666f0e97b165dff5f3dd4e1cf5a40c815..00af77b8569018404060bee7c6672e849b02f504 100644
--- a/src/mesonh/micro/modd_param_lima.f90
+++ b/src/common/micro/modd_param_lima.F90
@@ -52,12 +52,9 @@ REAL,    SAVE :: XTSTEP_TS              ! maximum time for the sub-time-step
 !
 ! 1.1 Cold scheme configuration
 !
-LOGICAL, SAVE :: LCOLD                  ! TRUE to enable the cold scheme
 LOGICAL, SAVE :: LNUCL                  ! TRUE to enable ice nucleation
 LOGICAL, SAVE :: LSEDI                  ! TRUE to enable pristine ice sedimentation
 LOGICAL, SAVE :: LHHONI                 ! TRUE to enable freezing of haze particules
-LOGICAL, SAVE :: LSNOW                  ! TRUE to enable snow and graupel
-LOGICAL, SAVE :: LHAIL                  ! TRUE to enable hail
 LOGICAL, SAVE :: LMEYERS                ! TRUE to use Meyers nucleation
 LOGICAL, SAVE :: LCIBU                  ! TRUE to use collisional ice breakup
 LOGICAL, SAVE :: LRDSF                  ! TRUE to use rain drop shattering by freezing
@@ -135,9 +132,7 @@ REAL,SAVE :: XNDEBRIS_CIBU              ! Number of ice crystal debris produced
 !
 ! 2.1 Warm scheme configuration
 !
-LOGICAL, SAVE :: LWARM         ! TRUE to enable the warm scheme
 LOGICAL, SAVE :: LACTI         ! TRUE to enable CCN activation
-LOGICAL, SAVE :: LRAIN         ! TRUE to enable the formation of rain
 LOGICAL, SAVE :: LSEDC         ! TRUE to enable the droplet sedimentation
 LOGICAL, SAVE :: LACTIT        ! TRUE to enable the usage of dT/dt in CCN activation
 LOGICAL, SAVE :: LBOUND        ! TRUE to enable the continuously replenishing
diff --git a/src/mesonh/micro/modd_param_lima_cold.f90 b/src/common/micro/modd_param_lima_cold.F90
similarity index 97%
rename from src/mesonh/micro/modd_param_lima_cold.f90
rename to src/common/micro/modd_param_lima_cold.F90
index 3801cfcb78da31c9274375af9c3800ace8c5419a..337480312280e054f1abdaabadfa4ca829fda3ae 100644
--- a/src/mesonh/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/mesonh/micro/modd_param_lima_mixed.f90 b/src/common/micro/modd_param_lima_mixed.F90
similarity index 100%
rename from src/mesonh/micro/modd_param_lima_mixed.f90
rename to src/common/micro/modd_param_lima_mixed.F90
diff --git a/src/mesonh/micro/modd_param_lima_warm.f90 b/src/common/micro/modd_param_lima_warm.F90
similarity index 100%
rename from src/mesonh/micro/modd_param_lima_warm.f90
rename to src/common/micro/modd_param_lima_warm.F90
diff --git a/src/mesonh/micro/lima_bergeron.f90 b/src/common/micro/mode_lima_bergeron.F90
similarity index 61%
rename from src/mesonh/micro/lima_bergeron.f90
rename to src/common/micro/mode_lima_bergeron.F90
index 7a4967708e09ec8b49e850a2583fd47a7c04ee6d..7df06b07fb522fb373f86bd6211ef365729bd9a1 100644
--- a/src/mesonh/micro/lima_bergeron.f90
+++ b/src/common/micro/mode_lima_bergeron.F90
@@ -2,41 +2,14 @@
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
 !MNH_LIC for details. version 1.
-!      #################################
-       MODULE MODI_LIMA_BERGERON
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_BERGERON (LDCOMPUTE,                         &
-                             PRCT, PRIT, PCIT, PLBDI,           &
-                             PSSIW, PAI, PCJ, PLVFACT, PLSFACT, &
-                             P_TH_BERFI, P_RC_BERFI             )
-!
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDI   ! 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PSSIW   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PAI     ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCJ     ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLVFACT ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_BERFI
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_BERFI
-!!
-END SUBROUTINE LIMA_BERGERON
-END INTERFACE
-END MODULE MODI_LIMA_BERGERON
-!
+MODULE MODE_LIMA_BERGERON
+  IMPLICIT NONE
+  CONTAINS
 !     #############################################################
-      SUBROUTINE LIMA_BERGERON( LDCOMPUTE,                        &
-                               PRCT, PRIT, PCIT, PLBDI,           &
-                               PSSIW, PAI, PCJ, PLVFACT, PLSFACT, &
-                               P_TH_BERFI, P_RC_BERFI             )
+    SUBROUTINE LIMA_BERGERON( LDCOMPUTE,                        &
+                              PRCT, PRIT, PCIT, PLBDI,           &
+                              PSSIW, PAI, PCJ, PLVFACT, PLSFACT, &
+                              P_TH_BERFI, P_RC_BERFI             )
 !     #############################################################
 !
 !!    PURPOSE
@@ -99,3 +72,4 @@ END WHERE
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_BERGERON
+END MODULE MODE_LIMA_BERGERON
diff --git a/src/mesonh/micro/lima_ccn_activation.f90 b/src/common/micro/mode_lima_ccn_activation.F90
similarity index 86%
rename from src/mesonh/micro/lima_ccn_activation.f90
rename to src/common/micro/mode_lima_ccn_activation.F90
index bac576fa00f953074ced8034ceeb6e1271f3aadb..1731dd8156a2f19ebaa201b3f7fad0e835e2d417 100644
--- a/src/mesonh/micro/lima_ccn_activation.f90
+++ b/src/common/micro/mode_lima_ccn_activation.F90
@@ -3,47 +3,15 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!      ###############################
-       MODULE MODI_LIMA_CCN_ACTIVATION
-!      ###############################
-!
-INTERFACE
-   SUBROUTINE LIMA_CCN_ACTIVATION (TPFILE,                                        &
-                                   PRHODREF, PEXNREF, PPABST, PT, PDTHRAD, PW_NU, &
-                                   PTHT, PRVT, PRCT, PCCT, PRRT, PNFT, PNAT,      &
-                                   PCLDFR                                         )
-USE MODD_IO, ONLY: TFILEDATA
-!
-TYPE(TFILEDATA),          INTENT(IN)    :: TPFILE     ! Output file
-!
-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)    :: PDTHRAD    ! Radiative temperature tendency
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PW_NU      ! updraft velocity used for
-                                                      ! the nucleation param.
-!   
-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(INOUT) :: PCCT       ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT       ! Cloud water m.r. 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(IN)    :: PCLDFR     ! Precipitation fraction
-!
-END SUBROUTINE LIMA_CCN_ACTIVATION
-END INTERFACE
-END MODULE MODI_LIMA_CCN_ACTIVATION
-!     #############################################################################
-   SUBROUTINE LIMA_CCN_ACTIVATION (TPFILE,                                        &
-                                   PRHODREF, PEXNREF, PPABST, PT, PDTHRAD, PW_NU, &
-                                   PTHT, PRVT, PRCT, PCCT, PRRT, PNFT, PNAT,      &
-                                   PCLDFR                                         )
-!     #############################################################################
+MODULE MODE_LIMA_CCN_ACTIVATION
+  IMPLICIT NONE
+CONTAINS
+!     ##############################################################################
+    SUBROUTINE LIMA_CCN_ACTIVATION (CST,                                           &
+                                    PRHODREF, PEXNREF, PPABST, PT, PDTHRAD, PW_NU, &
+                                    PTHT, PRVT, PRCT, PCCT, PRRT, PNFT, PNAT,      &
+                                    PCLDFR                                         )
+!     ##############################################################################
 !
 !!
 !!    PURPOSE
@@ -97,10 +65,10 @@ END MODULE MODI_LIMA_CCN_ACTIVATION
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_CST,             ONLY: XALPW, XBETAW, XCL, XCPD, XCPV, XGAMW, XLVTT, XMD, XMNH_EPSILON, XMV, XRV, XTT
-use modd_field,           only: TFIELDMETADATA, TYPEREAL
-USE MODD_IO,              ONLY: TFILEDATA
-USE MODD_LUNIT_n,         ONLY: TLUOUT
+USE MODD_CST,            ONLY: CST_t
+!use modd_field,           only: TFIELDDATA, TYPEREAL
+!USE MODD_IO,              ONLY: TFILEDATA
+!USE MODD_LUNIT_n,         ONLY: TLUOUT
 USE MODD_PARAMETERS,      ONLY: JPHEXT, JPVEXT
 USE MODD_PARAM_LIMA,      ONLY: LADJ, LACTIT, NMOD_CCN, XCTMIN, XKHEN_MULTI, XRTMIN, XLIMIT_FACTOR
 USE MODD_PARAM_LIMA_WARM, ONLY: XWMIN, NAHEN, NHYP, XAHENINTP1, XAHENINTP2, XCSTDCRIT, XHYPF12,      &
@@ -108,7 +76,7 @@ USE MODD_PARAM_LIMA_WARM, ONLY: XWMIN, NAHEN, NHYP, XAHENINTP1, XAHENINTP2, XCST
                                 XLBC, XLBEXC
 USE MODD_TURB_n,          ONLY: LSUBG_COND
 
-USE MODE_IO_FIELD_WRITE,  only: IO_Field_write
+!USE MODE_IO_FIELD_WRITE,  only: IO_Field_write
 use mode_tools,           only: Countjv
 
 USE MODI_GAMMA
@@ -117,7 +85,8 @@ IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
-TYPE(TFILEDATA),          INTENT(IN)    :: TPFILE     ! Output file
+TYPE(CST_t),              INTENT(IN)    :: CST
+!TYPE(TFILEDATA),          INTENT(IN)    :: TPFILE     ! Output file
 !
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF   ! Reference density
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF    ! Reference Exner function
@@ -180,11 +149,11 @@ REAL    :: ZS1, ZS2, ZXACC
 INTEGER :: JMOD
 INTEGER :: IIB, IIE, IJB, IJE, IKB, IKE        ! Physical domain
 !
-INTEGER                  :: ILUOUT     ! Logical unit of output listing 
-TYPE(TFIELDMETADATA) :: TZFIELD
+!!$INTEGER                  :: ILUOUT     ! Logical unit of output listing 
+!!$TYPE(TFIELDMETADATA) :: TZFIELD
 !-------------------------------------------------------------------------------
 !
-ILUOUT = TLUOUT%NLU
+!ILUOUT = TLUOUT%NLU
 !
 !*       1.     PREPARE COMPUTATIONS - PACK
 !   	        ---------------------------
@@ -198,8 +167,8 @@ IKE=SIZE(PRHODREF,3) - JPVEXT
 !
 !  Saturation vapor mixing ratio and radiative tendency                    
 !
-ZEPS= XMV / XMD
-ZRVSAT(:,:,:) = ZEPS / (PPABST(:,:,:)*EXP(-XALPW+XBETAW/PT(:,:,:)+XGAMW*ALOG(PT(:,:,:))) - 1.0)
+ZEPS= CST%XMV / CST%XMD
+ZRVSAT(:,:,:) = ZEPS / (PPABST(:,:,:)*EXP(-CST%XALPW+CST%XBETAW/PT(:,:,:)+CST%XGAMW*ALOG(PT(:,:,:))) - 1.0)
 ZTDT(:,:,:)   = 0.
 IF (LACTIT .AND. SIZE(PDTHRAD).GT.0) ZTDT(:,:,:)   = PDTHRAD(:,:,:) * PEXNREF(:,:,:)
 !
@@ -222,7 +191,7 @@ IF (LADJ) THEN
                                                 .OR. ZTDT(IIB:IIE,IJB:IJE,IKB:IKE)<XTMIN
 !
    GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) =       GNUCT(IIB:IIE,IJB:IJE,IKB:IKE)                       &
-                                    .AND. PT(IIB:IIE,IJB:IJE,IKB:IKE)>(XTT-22.)                &
+                                    .AND. PT(IIB:IIE,IJB:IJE,IKB:IKE)>(CST%XTT-22.)                &
                                     .AND. ZCONC_TOT(IIB:IIE,IJB:IJE,IKB:IKE)>XCTMIN(2)
 !
    IF (LSUBG_COND) GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) = GNUCT(IIB:IIE,IJB:IJE,IKB:IKE)       &
@@ -231,7 +200,7 @@ IF (LADJ) THEN
                                                     .AND. PRVT(IIB:IIE,IJB:IJE,IKB:IKE).GE.ZRVSAT(IIB:IIE,IJB:IJE,IKB:IKE)
 ELSE
    GNUCT(IIB:IIE,IJB:IJE,IKB:IKE) =       PRVT(IIB:IIE,IJB:IJE,IKB:IKE).GE.ZRVSAT(IIB:IIE,IJB:IJE,IKB:IKE) &
-                                    .AND. PT(IIB:IIE,IJB:IJE,IKB:IKE)>(XTT-22.)                            &
+                                    .AND. PT(IIB:IIE,IJB:IJE,IKB:IKE)>(CST%XTT-22.)                            &
                                     .AND. ZCONC_TOT(IIB:IIE,IJB:IJE,IKB:IKE)>XCTMIN(2)
 END IF
 !
@@ -285,7 +254,7 @@ IF( INUCT >= 1 ) THEN
    ALLOCATE(ZSMAX(INUCT))
    IF (LADJ) THEN
       ZZW1(:) = 1.0/ZEPS + 1.0/ZZW1(:)                                   &
-                + (((XLVTT+(XCPV-XCL)*(ZZT(:)-XTT))/ZZT(:))**2)/(XCPD*XRV) ! Psi2
+                + (((CST%XLVTT+(CST%XCPV-CST%XCL)*(ZZT(:)-CST%XTT))/ZZT(:))**2)/(CST%XCPD*CST%XRV) ! Psi2
 !
 !
 !-------------------------------------------------------------------------------
@@ -454,8 +423,8 @@ IF( INUCT >= 1 ) THEN
 !
    IF (.NOT.LSUBG_COND) THEN
       ZW(:,:,:) = MIN( UNPACK( ZZW1(:),MASK=GNUCT(:,:,:),FIELD=0.0 ),PRVT(:,:,:) )
-      PTHT(:,:,:) = PTHT(:,:,:) + ZW(:,:,:) * (XLVTT+(XCPV-XCL)*(PT(:,:,:)-XTT))/                &
-            (PEXNREF(:,:,:)*(XCPD+XCPV*PRVT(:,:,:)+XCL*(PRCT(:,:,:)+PRRT(:,:,:))))
+      PTHT(:,:,:) = PTHT(:,:,:) + ZW(:,:,:) * (CST%XLVTT+(CST%XCPV-CST%XCL)*(PT(:,:,:)-CST%XTT))/                &
+            (PEXNREF(:,:,:)*(CST%XCPD+CST%XCPV*PRVT(:,:,:)+CST%XCL*(PRCT(:,:,:)+PRRT(:,:,:))))
       PRVT(:,:,:) = PRVT(:,:,:) - ZW(:,:,:) 
       PRCT(:,:,:) = PRCT(:,:,:) + ZW(:,:,:) 
       PCCT(:,:,:) = PCCT(:,:,:) + UNPACK( ZZW6(:),MASK=GNUCT(:,:,:),FIELD=0. ) 
@@ -497,37 +466,36 @@ IF( INUCT >= 1 ) THEN
 !
 END IF ! INUCT
 !
-IF ( tpfile%lopened ) THEN
-  IF ( INUCT == 0 ) THEN
-    ZW (:,:,:) = 0.
-    ZW2(:,:,:) = 0.
-  END IF
-  TZFIELD = TFIELDMETADATA(    &
-    CMNHNAME   = 'SMAX',       &
-    CSTDNAME   = '',           &
-    CLONGNAME  = 'SMAX',       &
-    CUNITS     = '',           &
-    CDIR       = 'XY',         &
-    CCOMMENT   = 'X_Y_Z_SMAX', &
-    NGRID      = 1,            &
-    NTYPE      = TYPEREAL,     &
-    NDIMS      = 3,            &
-    LTIMEDEP   = .TRUE.        )
-  CALL IO_Field_write(TPFILE,TZFIELD,ZW)
-  !
-  TZFIELD = TFIELDMETADATA(    &
-    CMNHNAME   = 'NACT',       &
-    CSTDNAME   = '',           &
-    CLONGNAME  = 'NACT',       &
-    CUNITS     = 'kg-1',       &
-    CDIR       = 'XY',         &
-    CCOMMENT   = 'X_Y_Z_NACT', &
-    NGRID      = 1,            &
-    NTYPE      = TYPEREAL,     &
-    NDIMS      = 3,            &
-    LTIMEDEP   = .TRUE.        )
-  CALL IO_Field_write(TPFILE,TZFIELD,ZW2)
-END IF
+!!$IF ( tpfile%lopened ) THEN
+!!$  IF ( INUCT == 0 ) THEN
+!!$    ZW (:,:,:) = 0.
+!!$    ZW2(:,:,:) = 0.
+!!$  END IF
+!!$
+!!$  TZFIELD%CMNHNAME   ='SMAX'
+!!$  TZFIELD%CSTDNAME   = ''
+!!$  TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+!!$  TZFIELD%CUNITS     = ''
+!!$  TZFIELD%CDIR       = 'XY'
+!!$  TZFIELD%CCOMMENT   = 'X_Y_Z_SMAX'
+!!$  TZFIELD%NGRID      = 1
+!!$  TZFIELD%NTYPE      = TYPEREAL
+!!$  TZFIELD%NDIMS      = 3
+!!$  TZFIELD%LTIMEDEP   = .TRUE.
+!!$  CALL IO_Field_write(TPFILE,TZFIELD,ZW)
+!!$  !
+!!$  TZFIELD%CMNHNAME   ='NACT'
+!!$  TZFIELD%CSTDNAME   = ''
+!!$  TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+!!$  TZFIELD%CUNITS     = 'kg-1'
+!!$  TZFIELD%CDIR       = 'XY'
+!!$  TZFIELD%CCOMMENT   = 'X_Y_Z_NACT'
+!!$  TZFIELD%NGRID      = 1
+!!$  TZFIELD%NTYPE      = TYPEREAL
+!!$  TZFIELD%NDIMS      = 3
+!!$  TZFIELD%LTIMEDEP   = .TRUE.
+!!$  CALL IO_Field_write(TPFILE,TZFIELD,ZW2)
+!!$END IF
 !
 !
 !-------------------------------------------------------------------------------
@@ -770,7 +738,7 @@ INTEGER                        :: PIVEC1
 ALLOCATE(PFUNCSMAX(NPTS))
 !
 PFUNCSMAX(:) = 0.
-PZVEC1 = MAX( ( 1.0 + 10.0 * XMNH_EPSILON ) ,MIN( REAL(NHYP)*( 1.0 - 10.0 * XMNH_EPSILON ) ,               &
+PZVEC1 = MAX( ( 1.0 + 10.0 * CST%XMNH_EPSILON ) ,MIN( REAL(NHYP)*( 1.0 - 10.0 * CST%XMNH_EPSILON ) ,               &
                            XHYPINTP1*LOG(PPZSMAX)+XHYPINTP2 ) )
 PIVEC1 = INT( PZVEC1 )
 PZVEC1 = PZVEC1 - REAL( PIVEC1 )
@@ -849,3 +817,4 @@ END FUNCTION SINGL_FUNCSMAX
 !-----------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_CCN_ACTIVATION
+END MODULE MODE_LIMA_CCN_ACTIVATION
diff --git a/src/mesonh/micro/lima_ccn_hom_freezing.f90 b/src/common/micro/mode_lima_ccn_hom_freezing.F90
similarity index 78%
rename from src/mesonh/micro/lima_ccn_hom_freezing.f90
rename to src/common/micro/mode_lima_ccn_hom_freezing.F90
index 86b7a9408b864e7d93dde71f280c0ce432bf57a8..25744d42abb867dfca9935a86bb924329e49ee8e 100644
--- a/src/mesonh/micro/lima_ccn_hom_freezing.f90
+++ b/src/common/micro/mode_lima_ccn_hom_freezing.F90
@@ -3,48 +3,14 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-------------------------------------------------------------------------------
-!      #################################
-       MODULE MODI_LIMA_CCN_HOM_FREEZING
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_CCN_HOM_FREEZING (PRHODREF, PEXNREF, PPABST, PW_NU,         &
-                                     PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
-                                     PCCT, PCRT, PCIT, PNFT, PNHT,             &
-                                     PICEFR                                    )
-!
-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)    :: PW_NU   ! updraft velocity used for
-                                                   ! the nucleation param.
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHT    ! Theta at time t
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRVT    ! Water vapor m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT    ! Rain water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRIT    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRGT    ! Graupel m.r. at t 
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCCT    ! Cloud water C. at t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCRT    ! Rain water C. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCIT    ! Ice crystal C. source
-!
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNFT    ! Free CCN conc. 
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PNHT    ! haze homogeneous freezing
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PICEFR  ! Ice fraction
-!
-END SUBROUTINE LIMA_CCN_HOM_FREEZING
-END INTERFACE
-END MODULE MODI_LIMA_CCN_HOM_FREEZING
-!
+MODULE MODE_LIMA_CCN_HOM_FREEZING
+  IMPLICIT NONE
+CONTAINS
 !     ##########################################################################
-   SUBROUTINE LIMA_CCN_HOM_FREEZING (PRHODREF, PEXNREF, PPABST, PW_NU,         &
-                                     PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
-                                     PCCT, PCRT, PCIT, PNFT, PNHT ,            &
-                                     PICEFR                                    )
+  SUBROUTINE LIMA_CCN_HOM_FREEZING (CST, PRHODREF, PEXNREF, PPABST, PW_NU,    &
+                                    PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
+                                    PCCT, PCRT, PCIT, PNFT, PNHT ,            &
+                                    PICEFR                                    )
 !     ##########################################################################
 !
 !!    PURPOSE
@@ -69,9 +35,7 @@ END MODULE MODI_LIMA_CCN_HOM_FREEZING
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_CST,             ONLY: XP00, XRD, XRV, XMV, XMD, XCPD, XCPV, XCL, XCI,   &
-                                XTT, XLSTT, XLVTT, XALPI, XBETAI, XGAMI,          &
-                                XG
+USE MODD_CST,            ONLY: CST_t
 USE MODD_NSV
 USE MODD_PARAMETERS,      ONLY: JPHEXT, JPVEXT
 USE MODD_PARAM_LIMA,      ONLY: NMOD_CCN, NMOD_IMM, XRTMIN, XCTMIN, XNUC
@@ -89,6 +53,7 @@ IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
+TYPE(CST_t),              INTENT(IN)    :: CST
 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
@@ -185,7 +150,7 @@ IKB=1+JPVEXT
 IKE=SIZE(PTHT,3) - JPVEXT
 !
 ! Temperature
-ZT(:,:,:) = PTHT(:,:,:) * ( PPABST(:,:,:)/XP00 ) ** (XRD/XCPD)
+ZT(:,:,:) = PTHT(:,:,:) * ( PPABST(:,:,:)/CST%XP00 ) ** (CST%XRD/CST%XCPD)
 !
 ZNHT(:,:,:) = PNHT(:,:,:)
 !
@@ -193,7 +158,7 @@ ZNHT(:,:,:) = PNHT(:,:,:)
 ! PACK variables
 !
 GNEGT(:,:,:) = .FALSE.
-GNEGT(IIB:IIE,IJB:IJE,IKB:IKE) = ZT(IIB:IIE,IJB:IJE,IKB:IKE)<XTT-35.0
+GNEGT(IIB:IIE,IJB:IJE,IKB:IKE) = ZT(IIB:IIE,IJB:IJE,IKB:IKE)<CST%XTT-35.0
 INEGT = COUNTJV( GNEGT(:,:,:),I1(:),I2(:),I3(:))
 !
 IF (INEGT.GT.0) THEN
@@ -256,14 +221,14 @@ IF (INEGT.GT.0) THEN
    ALLOCATE( ZZX (INEGT) ) ; ZZX(:) = 0.0
    ALLOCATE( ZZY (INEGT) ) ; ZZY(:) = 0.0
 !
-   ZTCELSIUS(:) = ZZT(:)-XTT                                    ! T [°C]
-   ZZW(:)  = ZEXNREF(:)*( XCPD+XCPV*ZRVT(:)+XCL*(ZRCT(:)+ZRRT(:)) &
-             +XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) )
-   ZLSFACT(:) = (XLSTT+(XCPV-XCI)*ZTCELSIUS(:))/ZZW(:)          ! L_s/(Pi_ref*C_ph)
-   ZLVFACT(:) = (XLVTT+(XCPV-XCL)*ZTCELSIUS(:))/ZZW(:)          ! L_v/(Pi_ref*C_ph)
+   ZTCELSIUS(:) = ZZT(:)-CST%XTT                                    ! T [°C]
+   ZZW(:)  = ZEXNREF(:)*( CST%XCPD+CST%XCPV*ZRVT(:)+CST%XCL*(ZRCT(:)+ZRRT(:)) &
+             +CST%XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) )
+   ZLSFACT(:) = (CST%XLSTT+(CST%XCPV-CST%XCI)*ZTCELSIUS(:))/ZZW(:)          ! L_s/(Pi_ref*C_ph)
+   ZLVFACT(:) = (CST%XLVTT+(CST%XCPV-CST%XCL)*ZTCELSIUS(:))/ZZW(:)          ! L_v/(Pi_ref*C_ph)
 !
-   ZZW(:)  = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) ) ! es_i
-   ZSI(:)  = ZRVT(:)*(ZPRES(:)-ZZW(:))/((XMV/XMD)*ZZW(:))       ! Saturation over ice
+   ZZW(:)  = EXP( CST%XALPI - CST%XBETAI/ZZT(:) - CST%XGAMI*ALOG(ZZT(:) ) ) ! es_i
+   ZSI(:)  = ZRVT(:)*(ZPRES(:)-ZZW(:))/((CST%XMV/CST%XMD)*ZZW(:))       ! Saturation over ice
 !
 !
 !-------------------------------------------------------------------------------
@@ -293,7 +258,7 @@ IF (INEGT.GT.0) THEN
 !
       ZZW(:)  = 0.0
       ZZX(:)  = 0.0
-      ZEPS    = XMV / XMD
+      ZEPS    = CST%XMV / CST%XMD
       ZZY(:)  = XCRITSAT1_HONH -                              &  ! Critical Sat.
               (MIN( XTMAX_HONH,MAX( XTMIN_HONH,ZZT(:) ) )/XCRITSAT2_HONH)
 !
@@ -303,19 +268,19 @@ IF (INEGT.GT.0) THEN
       ALLOCATE(ZTAU(INEGT))
       ALLOCATE(ZBFACT(INEGT))
 !
-      WHERE( (ZZT(:)<XTT-35.0) .AND. (ZSI(:)>ZZY(:)) )
-            ZLS(:)   = XLSTT+(XCPV-XCI)*ZTCELSIUS(:)          ! Ls
+      WHERE( (ZZT(:)<CST%XTT-35.0) .AND. (ZSI(:)>ZZY(:)) )
+            ZLS(:)   = CST%XLSTT+(CST%XCPV-CST%XCI)*ZTCELSIUS(:)          ! Ls
 !
-            ZPSI1(:) = ZZY(:) * (XG/(XRD*ZZT(:)))*(ZEPS*ZLS(:)/(XCPD*ZZT(:))-1.)
+            ZPSI1(:) = ZZY(:) * (CST%XG/(CST%XRD*ZZT(:)))*(ZEPS*ZLS(:)/(CST%XCPD*ZZT(:))-1.)
 !                                                         ! Psi1 (a1*Scr in KL01)
 ! BV correction PSI2 enlever 1/ZEPS ?
 !            ZPSI2(:) = ZSI(:) * (1.0/ZEPS+1.0/ZRVT(:)) +                           &
             ZPSI2(:) = ZSI(:) * (1.0/ZRVT(:)) +                           &
-                 ZZY(:) * ((ZLS(:)/ZZT(:))**2)/(XCPD*XRV) 
+                 ZZY(:) * ((ZLS(:)/ZZT(:))**2)/(CST%XCPD*CST%XRV) 
 !                                                         ! Psi2 (a2+a3*Scr in KL01)
             ZTAU(:) = 1.0 / ( MAX( XC1_HONH,XC1_HONH*(XC2_HONH-XC3_HONH*ZZT(:)) ) *&
                  ABS( (XDLNJODT1_HONH - XDLNJODT2_HONH*ZZT(:))       *             &
-                 ((ZPRES(:)/XP00)**(XRD/XCPD))*ZTHT(:) ) )
+                 ((ZPRES(:)/CST%XP00)**(CST%XRD/CST%XCPD))*ZTHT(:) ) )
 !
             ZBFACT(:) = (XRHOI_HONH/ZRHODREF(:)) * (ZSI(:)/(ZZY(:)-1.0))           &
 ! BV correction ZBFACT enlever 1/ZEPS ?
@@ -395,3 +360,4 @@ END IF ! INEGT>0
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_CCN_HOM_FREEZING
+END MODULE MODE_LIMA_CCN_HOM_FREEZING
diff --git a/src/mesonh/micro/lima_collisional_ice_breakup.f90 b/src/common/micro/mode_lima_collisional_ice_breakup.F90
similarity index 90%
rename from src/mesonh/micro/lima_collisional_ice_breakup.f90
rename to src/common/micro/mode_lima_collisional_ice_breakup.F90
index a6848d14345bcdf23a70338347f5b8ab66940e7b..58a040f5af64a6c7b1b780d32a0b6ea0a448709a 100644
--- a/src/mesonh/micro/lima_collisional_ice_breakup.f90
+++ b/src/common/micro/mode_lima_collisional_ice_breakup.F90
@@ -3,43 +3,15 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-------------------------------------------------------------------------------
-!      ########################################
-       MODULE MODI_LIMA_COLLISIONAL_ICE_BREAKUP
-!      ########################################
-!
-INTERFACE
-   SUBROUTINE LIMA_COLLISIONAL_ICE_BREAKUP (LDCOMPUTE,              &
-                                            PRHODREF,               &
-                                            PRIT, PRST, PRGT, PCIT, PCST, PCGT, &
-                                            PLBDS, PLBDG,           &
-                                            P_RI_CIBU, P_CI_CIBU    )
-!
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST
-REAL, DIMENSION(:),   INTENT(IN)    :: PRGT
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT
-REAL, DIMENSION(:),   INTENT(IN)    :: PCST
-REAL, DIMENSION(:),   INTENT(IN)    :: PCGT
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDG 
-!
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_RI_CIBU
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_CI_CIBU
-!
-END SUBROUTINE LIMA_COLLISIONAL_ICE_BREAKUP
-END INTERFACE
-END MODULE MODI_LIMA_COLLISIONAL_ICE_BREAKUP
-!
+MODULE MODE_LIMA_COLLISIONAL_ICE_BREAKUP
+  IMPLICIT NONE
+CONTAINS
 !     #######################################################################
-      SUBROUTINE LIMA_COLLISIONAL_ICE_BREAKUP (LDCOMPUTE,              &
-                                               PRHODREF,               &
-                                               PRIT, PRST, PRGT, PCIT, PCST, PCGT, &
-                                               PLBDS, PLBDG,           &
-                                               P_RI_CIBU, P_CI_CIBU    )
+  SUBROUTINE LIMA_COLLISIONAL_ICE_BREAKUP (LDCOMPUTE,              &
+                                           PRHODREF,               &
+                                           PRIT, PRST, PRGT, PCIT, PCST, PCGT, &
+                                           PLBDS, PLBDG,           &
+                                           P_RI_CIBU, P_CI_CIBU    )
 !     #######################################################################
 !
 !!    PURPOSE
@@ -418,3 +390,4 @@ END IF
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_COLLISIONAL_ICE_BREAKUP
+END MODULE MODE_LIMA_COLLISIONAL_ICE_BREAKUP
diff --git a/src/mesonh/micro/lima_compute_cloud_fractions.f90 b/src/common/micro/mode_lima_compute_cloud_fractions.F90
similarity index 56%
rename from src/mesonh/micro/lima_compute_cloud_fractions.f90
rename to src/common/micro/mode_lima_compute_cloud_fractions.F90
index bc861da682fa9484669c5ed33d05d189230c20be..98ac4ae517cd8b246674fd551efabd46b21cd441 100644
--- a/src/mesonh/micro/lima_compute_cloud_fractions.f90
+++ b/src/common/micro/mode_lima_compute_cloud_fractions.F90
@@ -3,62 +3,18 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-------------------------------------------------------------------------------
-!#######################################
-MODULE MODI_LIMA_COMPUTE_CLOUD_FRACTIONS
-!#######################################
-  INTERFACE
-     SUBROUTINE LIMA_COMPUTE_CLOUD_FRACTIONS (KIB, KIE, KJB, KJE, KKB, KKE, KKL, &
-                                              PCCT, PRCT,                        &
-                                              PCRT, PRRT,                        &
-                                              PCIT, PRIT,                        &
-                                              PCST, PRST,                        &
-                                              PCGT, PRGT,                        &
-                                              PCHT, PRHT,                        &
-                                              PCLDFR, PICEFR, PPRCFR             )
-       INTEGER,               INTENT(IN)    :: KIB           !  
-       INTEGER,               INTENT(IN)    :: KIE           !  
-       INTEGER,               INTENT(IN)    :: KJB           !  
-       INTEGER,               INTENT(IN)    :: KJE           !  
-       INTEGER,               INTENT(IN)    :: KKB           !  
-       INTEGER,               INTENT(IN)    :: KKE           !  
-       INTEGER,               INTENT(IN)    :: KKL           !  
-       !
-       REAL, DIMENSION(:,:,:),INTENT(IN)    :: PCCT          !
-       REAL, DIMENSION(:,:,:),INTENT(IN)    :: PRCT          !
-       !
-       REAL, DIMENSION(:,:,:),INTENT(IN)    :: PCRT          !
-       REAL, DIMENSION(:,:,:),INTENT(IN)    :: PRRT          !
-       !
-       REAL, DIMENSION(:,:,:),INTENT(IN)    :: PCIT          !
-       REAL, DIMENSION(:,:,:),INTENT(IN)    :: PRIT          !
-       !
-       REAL, DIMENSION(:,:,:),INTENT(IN)    :: PCST          !
-       REAL, DIMENSION(:,:,:),INTENT(IN)    :: PRST          !
-       !
-       REAL, DIMENSION(:,:,:),INTENT(IN)    :: PCGT          !
-       REAL, DIMENSION(:,:,:),INTENT(IN)    :: PRGT          !
-       !
-       REAL, DIMENSION(:,:,:),INTENT(IN)    :: PCHT          !
-       REAL, DIMENSION(:,:,:),INTENT(IN)    :: PRHT          !
-       !
-       REAL, DIMENSION(:,:,:),INTENT(INOUT) :: PCLDFR        ! 
-       REAL, DIMENSION(:,:,:),INTENT(INOUT) :: PICEFR        ! 
-       REAL, DIMENSION(:,:,:),INTENT(INOUT) :: PPRCFR        ! 
-       !
-     END SUBROUTINE LIMA_COMPUTE_CLOUD_FRACTIONS
-  END INTERFACE
-END MODULE MODI_LIMA_COMPUTE_CLOUD_FRACTIONS
-!
-!
+MODULE MODE_LIMA_COMPUTE_CLOUD_FRACTIONS
+  IMPLICIT NONE
+CONTAINS
 !################################################################
-SUBROUTINE LIMA_COMPUTE_CLOUD_FRACTIONS (KIB, KIE, KJB, KJE, KKB, KKE, KKL, &
-                                         PCCT, PRCT,                        &
-                                         PCRT, PRRT,                        &
-                                         PCIT, PRIT,                        &
-                                         PCST, PRST,                        &
-                                         PCGT, PRGT,                        &
-                                         PCHT, PRHT,                        &
-                                         PCLDFR, PICEFR, PPRCFR             )
+  SUBROUTINE LIMA_COMPUTE_CLOUD_FRACTIONS (D,                     &
+                                           PCCT, PRCT,            &
+                                           PCRT, PRRT,            &
+                                           PCIT, PRIT,            &
+                                           PCST, PRST,            &
+                                           PCGT, PRGT,            &
+                                           PCHT, PRHT,            &
+                                           PCLDFR, PICEFR, PPRCFR )
 !################################################################
 !
 !!
@@ -79,6 +35,7 @@ SUBROUTINE LIMA_COMPUTE_CLOUD_FRACTIONS (KIB, KIE, KJB, KJE, KKB, KKE, KKL, &
 !*       0.    DECLARATIONS
 !              ------------
 !
+USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
 USE MODD_PARAM_LIMA,      ONLY : XCTMIN, XRTMIN, &
                                  NMOM_C, NMOM_R, NMOM_I, NMOM_S, NMOM_G, NMOM_H
 !
@@ -86,13 +43,7 @@ IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
-INTEGER,               INTENT(IN)    :: KIB           !  
-INTEGER,               INTENT(IN)    :: KIE           !  
-INTEGER,               INTENT(IN)    :: KJB           !  
-INTEGER,               INTENT(IN)    :: KJE           !  
-INTEGER,               INTENT(IN)    :: KKB           !  
-INTEGER,               INTENT(IN)    :: KKE           !  
-INTEGER,               INTENT(IN)    :: KKL           !  
+TYPE(DIMPHYEX_t),      INTENT(IN)    :: D
 !
 REAL, DIMENSION(:,:,:),INTENT(IN)    :: PCCT          !
 REAL, DIMENSION(:,:,:),INTENT(IN)    :: PRCT          !
@@ -134,14 +85,14 @@ WHERE(PICEFR(:,:,:)<1.E-10 .AND. PRIT(:,:,:)>XRTMIN(4) .AND. (NMOM_I.EQ.1 .OR. P
 !
 ! Precipitation fraction
 !!$PPRCFR(:,:,:) = MAX(PCLDFR(:,:,:),PICEFR(:,:,:))
-!!$DO JI = KIB,KIE
-!!$   DO JJ = KJB, KJE
-!!$      DO JK=KKE-KKL, KKB, -KKL
+!!$DO JI = D%NIB,D%NIE
+!!$   DO JJ = D%NJB, D%NJE
+!!$      DO JK=D%NKE-D%NKL, D%NKB, -D%NKL
 !!$         IF ( (PRRT(JI,JJ,JK).GT.XRTMIN(3) .AND. PCRT(JI,JJ,JK).GT.XCTMIN(3)) .OR. &
 !!$               PRST(JI,JJ,JK).GT.XRTMIN(5)                                    .OR. &
 !!$               PRGT(JI,JJ,JK).GT.XRTMIN(6)                                    .OR. &
 !!$               PRHT(JI,JJ,JK).GT.XRTMIN(7)                                         ) THEN
-!!$            PPRCFR(JI,JJ,JK)=MAX(PPRCFR(JI,JJ,JK),PPRCFR(JI,JJ,JK+KKL))
+!!$            PPRCFR(JI,JJ,JK)=MAX(PPRCFR(JI,JJ,JK),PPRCFR(JI,JJ,JK+D%NKL))
 !!$            IF (PPRCFR(JI,JJ,JK)==0) THEN
 !!$               PPRCFR(JI,JJ,JK)=1.
 !!$            END IF
@@ -153,14 +104,14 @@ WHERE(PICEFR(:,:,:)<1.E-10 .AND. PRIT(:,:,:)>XRTMIN(4) .AND. (NMOM_I.EQ.1 .OR. P
 !!$END DO
 !!$
 !!$PPRCFR(:,:,:) = MAX(PCLDFR(:,:,:),PICEFR(:,:,:))
-!!$DO JI = KIB,KIE
-!!$   DO JJ = KJB, KJE
-!!$      DO JK=KKE-KKL, KKB, -KKL
+!!$DO JI = D%NIB,D%NIE
+!!$   DO JJ = D%NJB, D%NJE
+!!$      DO JK=D%NKE-D%NKL, D%NKB, -D%NKL
 !!$         IF ( (PRRT(JI,JJ,JK).GT.0. .AND. PCRT(JI,JJ,JK).GT.0.) .OR. &
 !!$               PRST(JI,JJ,JK).GT.0.                             .OR. &
 !!$               PRGT(JI,JJ,JK).GT.0.                             .OR. &
 !!$               PRHT(JI,JJ,JK).GT.0.                                  ) THEN
-!!$            PPRCFR(JI,JJ,JK)=MAX(PPRCFR(JI,JJ,JK),PPRCFR(JI,JJ,JK+KKL))
+!!$            PPRCFR(JI,JJ,JK)=MAX(PPRCFR(JI,JJ,JK),PPRCFR(JI,JJ,JK+D%NKL))
 !!$            IF (PPRCFR(JI,JJ,JK)==0) THEN
 !!$               PPRCFR(JI,JJ,JK)=1.
 !!$            END IF
@@ -186,3 +137,4 @@ WHERE ( (PRRT(:,:,:).GT.0. .AND. (NMOM_R.EQ.1 .OR. PCRT(:,:,:).GT.0.) ) .OR. &
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_COMPUTE_CLOUD_FRACTIONS
+END MODULE MODE_LIMA_COMPUTE_CLOUD_FRACTIONS
diff --git a/src/mesonh/micro/lima_conversion_melting_snow.f90 b/src/common/micro/mode_lima_conversion_melting_snow.F90
similarity index 68%
rename from src/mesonh/micro/lima_conversion_melting_snow.f90
rename to src/common/micro/mode_lima_conversion_melting_snow.F90
index ef46c794f37aee347aa52ea5bf8c338502b53801..0921e3f73188b680251bbae80789d0f74870c35c 100644
--- a/src/mesonh/micro/lima_conversion_melting_snow.f90
+++ b/src/common/micro/mode_lima_conversion_melting_snow.F90
@@ -3,42 +3,14 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-------------------------------------------------------------------------------
-!      #################################
-       MODULE MODI_LIMA_CONVERSION_MELTING_SNOW
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_CONVERSION_MELTING_SNOW (LDCOMPUTE,                          &
-                                            PRHODREF, PPRES, PT, PKA, PDV, PCJ, &
-                                            PRVT, PRST, PCST, PLBDS,            &
-                                            P_RS_CMEL, P_CS_CMEL                )
-!
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF ! Reference Exner function
-REAL, DIMENSION(:),   INTENT(IN)    :: PPRES    !
-REAL, DIMENSION(:),   INTENT(IN)    :: PT       !
-REAL, DIMENSION(:),   INTENT(IN)    :: PKA      !
-REAL, DIMENSION(:),   INTENT(IN)    :: PDV      !
-REAL, DIMENSION(:),   INTENT(IN)    :: PCJ      !
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRVT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST    ! Snow mr at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCST    ! Snow C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS   ! 
-!
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_RS_CMEL
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_CS_CMEL
-!
-END SUBROUTINE LIMA_CONVERSION_MELTING_SNOW
-END INTERFACE
-END MODULE MODI_LIMA_CONVERSION_MELTING_SNOW
-!
+MODULE MODE_LIMA_CONVERSION_MELTING_SNOW
+  IMPLICIT NONE
+CONTAINS
 !     ##############################################################################
-      SUBROUTINE LIMA_CONVERSION_MELTING_SNOW (LDCOMPUTE,                          &
-                                               PRHODREF, PPRES, PT, PKA, PDV, PCJ, &
-                                               PRVT, PRST, PCST, PLBDS,            &
-                                               P_RS_CMEL, P_CS_CMEL                )
+  SUBROUTINE LIMA_CONVERSION_MELTING_SNOW (LDCOMPUTE,                          &
+                                           PRHODREF, PPRES, PT, PKA, PDV, PCJ, &
+                                           PRVT, PRST, PCST, PLBDS,            &
+                                           P_RS_CMEL, P_CS_CMEL                )
 !     ##############################################################################
 !
 !!    PURPOSE
@@ -127,3 +99,4 @@ END WHERE
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_CONVERSION_MELTING_SNOW
+END MODULE MODE_LIMA_CONVERSION_MELTING_SNOW
diff --git a/src/mesonh/micro/lima_droplets_accretion.f90 b/src/common/micro/mode_lima_droplets_accretion.F90
similarity index 75%
rename from src/mesonh/micro/lima_droplets_accretion.f90
rename to src/common/micro/mode_lima_droplets_accretion.F90
index d183953cd21da3563c87d7fc851af9bd76d10539..8e0119a4380f264f99c14f7c3e76426f049c175e 100644
--- a/src/mesonh/micro/lima_droplets_accretion.f90
+++ b/src/common/micro/mode_lima_droplets_accretion.F90
@@ -3,43 +3,15 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-------------------------------------------------------------------------------
-!      #################################
-       MODULE MODI_LIMA_DROPLETS_ACCRETION
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_DROPLETS_ACCRETION (LDCOMPUTE,                      &
-                                       PRHODREF,                       &
-                                       PRCT, PRRT, PCCT, PCRT,         &
-                                       PLBDC, PLBDC3, PLBDR, PLBDR3,   &
-                                       P_RC_ACCR, P_CC_ACCR            )
-!
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF ! Reference Exner function
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT    ! Rain m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCCT    ! Cloud water conc. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCRT    ! Rain conc. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDC   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDC3  ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR3  ! 
-!
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_RC_ACCR
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_CC_ACCR
-!
-END SUBROUTINE LIMA_DROPLETS_ACCRETION
-END INTERFACE
-END MODULE MODI_LIMA_DROPLETS_ACCRETION
-!
+MODULE MODE_LIMA_DROPLETS_ACCRETION
+  IMPLICIT NONE
+CONTAINS
 !     #####################################################################
-      SUBROUTINE LIMA_DROPLETS_ACCRETION (LDCOMPUTE,                      &
-                                          PRHODREF,                       &
-                                          PRCT, PRRT, PCCT, PCRT,         &
-                                          PLBDC, PLBDC3, PLBDR, PLBDR3,   &
-                                          P_RC_ACCR, P_CC_ACCR            )
+  SUBROUTINE LIMA_DROPLETS_ACCRETION (LDCOMPUTE,                      &
+                                      PRHODREF,                       &
+                                      PRCT, PRRT, PCCT, PCRT,         &
+                                      PLBDC, PLBDC3, PLBDR, PLBDR3,   &
+                                      P_RC_ACCR, P_CC_ACCR            )
 !     #####################################################################
 !
 !!    PURPOSE
@@ -190,3 +162,4 @@ END IF
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_DROPLETS_ACCRETION
+END MODULE MODE_LIMA_DROPLETS_ACCRETION
diff --git a/src/mesonh/micro/lima_droplets_autoconversion.f90 b/src/common/micro/mode_lima_droplets_autoconversion.F90
similarity index 72%
rename from src/mesonh/micro/lima_droplets_autoconversion.f90
rename to src/common/micro/mode_lima_droplets_autoconversion.F90
index 3fa32e7a65c04cff7af42821ceaa37fcbf7b374e..fca3fbf804de1e6b60bc4fd54a9073a4b04eb369 100644
--- a/src/mesonh/micro/lima_droplets_autoconversion.f90
+++ b/src/common/micro/mode_lima_droplets_autoconversion.F90
@@ -3,38 +3,14 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-------------------------------------------------------------------------------
-!      #################################
-       MODULE MODI_LIMA_DROPLETS_AUTOCONVERSION
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_DROPLETS_AUTOCONVERSION (LDCOMPUTE,                      &
-                                            PRHODREF,                       &
-                                            PRCT, PCCT, PLBDC, PLBDR,       &
-                                            P_RC_AUTO, P_CC_AUTO, P_CR_AUTO )
-!
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF ! Reference Exner function
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCCT    ! Cloud water conc. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDC   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR   ! 
-!
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_RC_AUTO
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_CC_AUTO
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_CR_AUTO
-!
-END SUBROUTINE LIMA_DROPLETS_AUTOCONVERSION
-END INTERFACE
-END MODULE MODI_LIMA_DROPLETS_AUTOCONVERSION
-!
+MODULE MODE_LIMA_DROPLETS_AUTOCONVERSION
+  IMPLICIT NONE
+CONTAINS
 !     ##########################################################################
-      SUBROUTINE LIMA_DROPLETS_AUTOCONVERSION (LDCOMPUTE,                      &
-                                               PRHODREF,                       &
-                                               PRCT, PCCT, PLBDC, PLBDR,       &
-                                               P_RC_AUTO, P_CC_AUTO, P_CR_AUTO )
+  SUBROUTINE LIMA_DROPLETS_AUTOCONVERSION (LDCOMPUTE,                      &
+                                           PRHODREF,                       &
+                                           PRCT, PCCT, PLBDC, PLBDR,       &
+                                           P_RC_AUTO, P_CC_AUTO, P_CR_AUTO )
 !     ##########################################################################
 !
 !!    PURPOSE
@@ -100,8 +76,8 @@ IF (NMOM_C.EQ.1 .AND. LKESSLERAC) THEN
    P_RC_AUTO(:) = - 1.E-3 * MAX ( PRCT(:) - 0.5E-3 / PRHODREF(:), 0. )
 ELSE IF (LKHKO) THEN
 !
-!        1. Autoconversion of cloud droplets (Berry-Reinhardt parameterization)
-!   	 ----------------------------------------------------------------------
+!        1. Autoconversion of cloud droplets
+!   	 -----------------------------------
 !
    WHERE ( PRCT(:)>XRTMIN(2) .AND. PCCT(:)>XCTMIN(2) .AND. LDCOMPUTE(:) )
 !
@@ -148,3 +124,4 @@ END IF
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_DROPLETS_AUTOCONVERSION
+END MODULE MODE_LIMA_DROPLETS_AUTOCONVERSION
diff --git a/src/mesonh/micro/lima_droplets_hom_freezing.f90 b/src/common/micro/mode_lima_droplets_hom_freezing.F90
similarity index 67%
rename from src/mesonh/micro/lima_droplets_hom_freezing.f90
rename to src/common/micro/mode_lima_droplets_hom_freezing.F90
index b33d7a3501fdf56c3925db691f50a11af30b2e5f..687e161ee34a2f9c138f4510f06f81b4e15035ba 100644
--- a/src/mesonh/micro/lima_droplets_hom_freezing.f90
+++ b/src/common/micro/mode_lima_droplets_hom_freezing.F90
@@ -2,40 +2,14 @@
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
 !MNH_LIC for details. version 1.
-!      #################################
-       MODULE MODI_LIMA_DROPLETS_HOM_FREEZING
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_DROPLETS_HOM_FREEZING (PTSTEP, LDCOMPUTE,                &
-                                          PT, PLVFACT, PLSFACT,             &
-                                          PRCT, PCCT, PLBDC,                &
-                                          P_TH_HONC, P_RC_HONC, P_CC_HONC   )
-!
-REAL,                 INTENT(IN)    :: PTSTEP 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PT       ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLVFACT  ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT  ! 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCCT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDC   ! Cloud water lambda
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_HONC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_HONC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_HONC
-!
-END SUBROUTINE LIMA_DROPLETS_HOM_FREEZING
-END INTERFACE
-END MODULE MODI_LIMA_DROPLETS_HOM_FREEZING
-!
+MODULE MODE_LIMA_DROPLETS_HOM_FREEZING
+  IMPLICIT NONE
+CONTAINS
 !     ##########################################################################
-      SUBROUTINE LIMA_DROPLETS_HOM_FREEZING (PTSTEP,  LDCOMPUTE,               &
-                                             PT, PLVFACT, PLSFACT,             &
-                                             PRCT, PCCT, PLBDC,                &
-                                             P_TH_HONC, P_RC_HONC, P_CC_HONC   )
+  SUBROUTINE LIMA_DROPLETS_HOM_FREEZING (PTSTEP,  LDCOMPUTE,               &
+                                         PT, PLVFACT, PLSFACT,             &
+                                         PRCT, PCCT, PLBDC,                &
+                                         P_TH_HONC, P_RC_HONC, P_CC_HONC   )
 !     ##########################################################################
 !
 !!    PURPOSE
@@ -123,3 +97,4 @@ END WHERE
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_DROPLETS_HOM_FREEZING
+END MODULE MODE_LIMA_DROPLETS_HOM_FREEZING
diff --git a/src/mesonh/micro/lima_droplets_riming_snow.f90 b/src/common/micro/mode_lima_droplets_riming_snow.F90
similarity index 76%
rename from src/mesonh/micro/lima_droplets_riming_snow.f90
rename to src/common/micro/mode_lima_droplets_riming_snow.F90
index cd46682388de1ab48cd16f98169998029eb2dca6..70ab95d4787ed23f3b4e12fb544d6c25f3edcf40 100644
--- a/src/mesonh/micro/lima_droplets_riming_snow.f90
+++ b/src/common/micro/mode_lima_droplets_riming_snow.F90
@@ -3,53 +3,15 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-------------------------------------------------------------------------------
-!      #################################
-       MODULE MODI_LIMA_DROPLETS_RIMING_SNOW
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_DROPLETS_RIMING_SNOW (PTSTEP,  LDCOMPUTE,                                               &
-                                         PRHODREF, PT,                                                     &
-                                         PRCT, PCCT, PRST, PCST, PLBDC, PLBDS, PLVFACT, PLSFACT,           &
-                                         P_TH_RIM, P_RC_RIM, P_CC_RIM, P_RS_RIM, P_CS_RIM, P_RG_RIM,       &
-                                         P_RI_HMS, P_CI_HMS, P_RS_HMS                                      )
-!
-REAL,                 INTENT(IN)    :: PTSTEP 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PT   ! 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT    ! Cloud water mr at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCCT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST    ! Snow mr at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCST    ! Snow C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDC   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLVFACT ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT ! 
-!
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_TH_RIM
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_RC_RIM
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_CC_RIM
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_RS_RIM
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_CS_RIM
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_RG_RIM
-!
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_RI_HMS
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_CI_HMS
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_RS_HMS
-!
-END SUBROUTINE LIMA_DROPLETS_RIMING_SNOW
-END INTERFACE
-END MODULE MODI_LIMA_DROPLETS_RIMING_SNOW
-!
+MODULE MODE_LIMA_DROPLETS_RIMING_SNOW
+  IMPLICIT NONE
+CONTAINS
 !     #########################################################################################
-      SUBROUTINE LIMA_DROPLETS_RIMING_SNOW (PTSTEP, LDCOMPUTE,                                                &
-                                            PRHODREF, PT,                                                     &
-                                            PRCT, PCCT, PRST, PCST, PLBDC, PLBDS, PLVFACT, PLSFACT,           &
-                                            P_TH_RIM, P_RC_RIM, P_CC_RIM, P_RS_RIM, P_CS_RIM, P_RG_RIM,       &
-                                            P_RI_HMS, P_CI_HMS, P_RS_HMS                                      )
+  SUBROUTINE LIMA_DROPLETS_RIMING_SNOW (PTSTEP, LDCOMPUTE,                                                &
+                                        PRHODREF, PT,                                                     &
+                                        PRCT, PCCT, PRST, PCST, PLBDC, PLBDS, PLVFACT, PLSFACT,           &
+                                        P_TH_RIM, P_RC_RIM, P_CC_RIM, P_RS_RIM, P_CS_RIM, P_RG_RIM,       &
+                                        P_RI_HMS, P_CI_HMS, P_RS_HMS                                      )
 !     #########################################################################################
 !
 !!    PURPOSE
@@ -234,3 +196,4 @@ END DO
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_DROPLETS_RIMING_SNOW
+END MODULE MODE_LIMA_DROPLETS_RIMING_SNOW
diff --git a/src/mesonh/micro/lima_droplets_self_collection.f90 b/src/common/micro/mode_lima_droplets_self_collection.F90
similarity index 63%
rename from src/mesonh/micro/lima_droplets_self_collection.f90
rename to src/common/micro/mode_lima_droplets_self_collection.F90
index 79312e8cb058055804d58a2d48c53f10a04deb65..6a4557c89610cb9cafac0c37c4c639926e4b9a90 100644
--- a/src/mesonh/micro/lima_droplets_self_collection.f90
+++ b/src/common/micro/mode_lima_droplets_self_collection.F90
@@ -3,34 +3,14 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-------------------------------------------------------------------------------
-!      #################################
-       MODULE MODI_LIMA_DROPLETS_SELF_COLLECTION
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_DROPLETS_SELF_COLLECTION (LDCOMPUTE,                      &
-                                             PRHODREF,                       &
-                                             PCCT, PLBDC3,                   &
-                                             P_CC_SELF                       )
-!
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF ! Reference Exner function
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PCCT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDC3  ! 
-!
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_CC_SELF
-!
-END SUBROUTINE LIMA_DROPLETS_SELF_COLLECTION
-END INTERFACE
-END MODULE MODI_LIMA_DROPLETS_SELF_COLLECTION
-!
+MODULE MODE_LIMA_DROPLETS_SELF_COLLECTION
+  IMPLICIT NONE
+CONTAINS
 !     ######################################################################
-      SUBROUTINE LIMA_DROPLETS_SELF_COLLECTION (LDCOMPUTE,                      &
-                                                PRHODREF,                       &
-                                                PCCT, PLBDC3,                   &
-                                                P_CC_SELF                       )
+  SUBROUTINE LIMA_DROPLETS_SELF_COLLECTION (LDCOMPUTE,                      &
+                                            PRHODREF,                       &
+                                            PCCT, PLBDC3,                   &
+                                            P_CC_SELF                       )
 !     ######################################################################
 !
 !!    PURPOSE
@@ -92,3 +72,4 @@ END WHERE
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_DROPLETS_SELF_COLLECTION
+END MODULE MODE_LIMA_DROPLETS_SELF_COLLECTION
diff --git a/src/mesonh/micro/lima_drops_break_up.f90 b/src/common/micro/mode_lima_drops_break_up.F90
similarity index 71%
rename from src/mesonh/micro/lima_drops_break_up.f90
rename to src/common/micro/mode_lima_drops_break_up.F90
index 697c682469036cd49ecd2f8906efd9bdd1bdb093..e2b36c2ab18e6bfa233bd9c9e27f5c40bbb62927 100644
--- a/src/mesonh/micro/lima_drops_break_up.f90
+++ b/src/common/micro/mode_lima_drops_break_up.F90
@@ -2,36 +2,14 @@
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
 !MNH_LIC for details. version 1.
-!      ###############################
-       MODULE MODI_LIMA_DROPS_BREAK_UP
-!      ###############################
-!
-INTERFACE
-   SUBROUTINE LIMA_DROPS_BREAK_UP (LDCOMPUTE,  &
-                                   PCRT, PRRT, &
-                                   P_CR_BRKU,  &
-                                   PB_CR       )
-
-!
-LOGICAL, DIMENSION(:), INTENT(IN)    :: LDCOMPUTE  
-!
-REAL, DIMENSION(:),    INTENT(IN)    :: PCRT             !
-REAL, DIMENSION(:),    INTENT(IN)    :: PRRT             !
-!
-REAL, DIMENSION(:),    INTENT(INOUT) :: P_CR_BRKU        ! Concentration change (#/kg)
-REAL, DIMENSION(:),    INTENT(INOUT) :: PB_CR            ! Cumulated concentration change (#/kg)
-!
-END SUBROUTINE LIMA_DROPS_BREAK_UP
-END INTERFACE
-END MODULE MODI_LIMA_DROPS_BREAK_UP
-!
-!
+MODULE MODE_LIMA_DROPS_BREAK_UP
+  IMPLICIT NONE
+CONTAINS
 !     ##########################################
-   SUBROUTINE LIMA_DROPS_BREAK_UP (LDCOMPUTE,  &
-                                   PCRT, PRRT, &
-                                   P_CR_BRKU,  &
-                                   PB_CR       )
-
+  SUBROUTINE LIMA_DROPS_BREAK_UP (LDCOMPUTE,  &
+                                  PCRT, PRRT, &
+                                  P_CR_BRKU,  &
+                                  PB_CR       )
 !     ##########################################
 !
 !!
@@ -98,3 +76,4 @@ PB_CR(:) = PB_CR(:) + P_CR_BRKU(:)
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_DROPS_BREAK_UP
+END MODULE MODE_LIMA_DROPS_BREAK_UP
diff --git a/src/mesonh/micro/lima_drops_hom_freezing.f90 b/src/common/micro/mode_lima_drops_hom_freezing.F90
similarity index 59%
rename from src/mesonh/micro/lima_drops_hom_freezing.f90
rename to src/common/micro/mode_lima_drops_hom_freezing.F90
index b8382155bd2b89953b7a60ae0f54063d4c99af8e..1d3e289dbaad05153f76fc9dd95c23226010cec3 100644
--- a/src/mesonh/micro/lima_drops_hom_freezing.f90
+++ b/src/common/micro/mode_lima_drops_hom_freezing.F90
@@ -2,53 +2,16 @@
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
 !MNH_LIC for details. version 1.
-!      #################################
-       MODULE MODI_LIMA_DROPS_HOM_FREEZING
-!      #################################
-!
-INTERFACE
-      SUBROUTINE LIMA_DROPS_HOM_FREEZING (PTSTEP, LDCOMPUTE,                        &
-                                          PEXNREF, PPABST,                          &
-                                          PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
-                                          PCRT,                                     &
-                                          P_TH_HONR, P_RR_HONR, P_CR_HONR,          &
-                                          PB_TH, PB_RR, PB_CR, PB_RG                )
-!
-REAL,                  INTENT(IN)    :: PTSTEP 
-LOGICAL, DIMENSION(:), INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),    INTENT(IN)    :: PEXNREF ! Reference Exner function
-REAL, DIMENSION(:),    INTENT(IN)    :: PPABST  ! abs. pressure at time t
-!
-REAL, DIMENSION(:),    INTENT(IN)    :: PTHT    ! Theta at time t
-REAL, DIMENSION(:),    INTENT(IN)    :: PRVT    ! Water vapor m.r. at t 
-REAL, DIMENSION(:),    INTENT(IN)    :: PRCT    ! Cloud water m.r. at t 
-REAL, DIMENSION(:),    INTENT(IN)    :: PRRT    ! Rain water m.r. at t 
-REAL, DIMENSION(:),    INTENT(IN)    :: PRIT    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:),    INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t 
-REAL, DIMENSION(:),    INTENT(IN)    :: PRGT    ! Graupel m.r. at t 
-!
-REAL, DIMENSION(:),    INTENT(IN)    :: PCRT    ! Rain water C. at t
-!
-REAL, DIMENSION(:),    INTENT(INOUT) :: P_TH_HONR
-REAL, DIMENSION(:),    INTENT(INOUT) :: P_RR_HONR
-REAL, DIMENSION(:),    INTENT(INOUT) :: P_CR_HONR
-REAL, DIMENSION(:),    INTENT(INOUT) :: PB_TH
-REAL, DIMENSION(:),    INTENT(INOUT) :: PB_RR
-REAL, DIMENSION(:),    INTENT(INOUT) :: PB_CR
-REAL, DIMENSION(:),    INTENT(INOUT) :: PB_RG
-!
-END SUBROUTINE LIMA_DROPS_HOM_FREEZING
-END INTERFACE
-END MODULE MODI_LIMA_DROPS_HOM_FREEZING
-!
+MODULE MODE_LIMA_DROPS_HOM_FREEZING
+  IMPLICIT NONE
+CONTAINS
 !     ###############################################################################
-      SUBROUTINE LIMA_DROPS_HOM_FREEZING (PTSTEP, LDCOMPUTE,                        &
-                                          PEXNREF, PPABST,                          &
-                                          PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
-                                          PCRT,                                     &
-                                          P_TH_HONR, P_RR_HONR, P_CR_HONR,          &
-                                          PB_TH, PB_RR, PB_CR, PB_RG                )
+  SUBROUTINE LIMA_DROPS_HOM_FREEZING (PTSTEP, LDCOMPUTE,                        &
+                                      PEXNREF, PPABST,                          &
+                                      PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
+                                      PCRT,                                     &
+                                      P_TH_HONR, P_RR_HONR, P_CR_HONR,          &
+                                      PB_TH, PB_RR, PB_CR, PB_RG                )
 !     ###############################################################################
 !
 !!    PURPOSE
@@ -142,3 +105,4 @@ ENDWHERE
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_DROPS_HOM_FREEZING
+END MODULE MODE_LIMA_DROPS_HOM_FREEZING
diff --git a/src/mesonh/micro/lima_drops_self_collection.f90 b/src/common/micro/mode_lima_drops_self_collection.F90
similarity index 73%
rename from src/mesonh/micro/lima_drops_self_collection.f90
rename to src/common/micro/mode_lima_drops_self_collection.F90
index 3f064dfcdc0f19a5124562e4d8a5658f2a31a7c5..0c16b69b4d41c53ba69667de98731a79df209c38 100644
--- a/src/mesonh/micro/lima_drops_self_collection.f90
+++ b/src/common/micro/mode_lima_drops_self_collection.F90
@@ -3,35 +3,14 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-------------------------------------------------------------------------------
-!      #################################
-       MODULE MODI_LIMA_DROPS_SELF_COLLECTION
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_DROPS_SELF_COLLECTION (LDCOMPUTE,           &
-                                          PRHODREF,            &
-                                          PCRT, PLBDR, PLBDR3, &
-                                          P_CR_SCBU            )
-!
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF ! Reference Exner function
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PCRT    ! Cloud water C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR3  ! 
-!
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_CR_SCBU
-!
-END SUBROUTINE LIMA_DROPS_SELF_COLLECTION
-END INTERFACE
-END MODULE MODI_LIMA_DROPS_SELF_COLLECTION
-!
+MODULE MODE_LIMA_DROPS_SELF_COLLECTION
+  IMPLICIT NONE
+CONTAINS
 !     #############################################################
-      SUBROUTINE LIMA_DROPS_SELF_COLLECTION (LDCOMPUTE,           &
-                                             PRHODREF,            &
-                                             PCRT, PLBDR, PLBDR3, &
-                                             P_CR_SCBU            )
+  SUBROUTINE LIMA_DROPS_SELF_COLLECTION (LDCOMPUTE,           &
+                                         PRHODREF,            &
+                                         PCRT, PLBDR, PLBDR3, &
+                                         P_CR_SCBU            )
 !     #############################################################
 !
 !!    PURPOSE
@@ -121,3 +100,4 @@ P_CR_SCBU(:) = - ZW3(:) * PRHODREF(:)
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_DROPS_SELF_COLLECTION
+END MODULE MODE_LIMA_DROPS_SELF_COLLECTION
diff --git a/src/mesonh/micro/lima_drops_to_droplets_conv.f90 b/src/common/micro/mode_lima_drops_to_droplets_conv.F90
similarity index 69%
rename from src/mesonh/micro/lima_drops_to_droplets_conv.f90
rename to src/common/micro/mode_lima_drops_to_droplets_conv.F90
index b2c63fde29ab9a752faf1669c721d3cce9b47037..808bed2403a360d48509250e1925cea5d12a25ca 100644
--- a/src/mesonh/micro/lima_drops_to_droplets_conv.f90
+++ b/src/common/micro/mode_lima_drops_to_droplets_conv.F90
@@ -2,31 +2,12 @@
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
 !MNH_LIC for details. version 1.
-!      #################################
-       MODULE MODI_LIMA_DROPS_TO_DROPLETS_CONV
-!      #################################
-!
-INTERFACE
-      SUBROUTINE LIMA_DROPS_TO_DROPLETS_CONV (PRHODREF, PRCT, PRRT, PCCT, PCRT, &
-                                              P_RR_CVRC, P_CR_CVRC    )
-!
-REAL, DIMENSION(:,:,:),    INTENT(IN)    :: PRHODREF! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),    INTENT(IN)    :: PRCT    ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),    INTENT(IN)    :: PRRT    ! Rain water m.r. at t 
-!
-REAL, DIMENSION(:,:,:),    INTENT(IN)    :: PCCT    ! Cloud water C. at t
-REAL, DIMENSION(:,:,:),    INTENT(IN)    :: PCRT    ! Rain water C. at t
-!
-REAL, DIMENSION(:,:,:),    INTENT(INOUT) :: P_RR_CVRC
-REAL, DIMENSION(:,:,:),    INTENT(INOUT) :: P_CR_CVRC
-!
-END SUBROUTINE LIMA_DROPS_TO_DROPLETS_CONV
-END INTERFACE
-END MODULE MODI_LIMA_DROPS_TO_DROPLETS_CONV
-!
+MODULE MODE_LIMA_DROPS_TO_DROPLETS_CONV
+  IMPLICIT NONE
+CONTAINS
 !     ######################################################################
-      SUBROUTINE LIMA_DROPS_TO_DROPLETS_CONV (PRHODREF, PRCT, PRRT, PCCT, PCRT, &
-                                              P_RR_CVRC, P_CR_CVRC    )
+  SUBROUTINE LIMA_DROPS_TO_DROPLETS_CONV (CST, PRHODREF, PRCT, PRRT, PCCT, PCRT, &
+                                          P_RR_CVRC, P_CR_CVRC    )
 !     ######################################################################
 !
 !!    PURPOSE
@@ -50,7 +31,7 @@ END MODULE MODI_LIMA_DROPS_TO_DROPLETS_CONV
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_CST,             ONLY : XPI, XRHOLW 
+USE MODD_CST,             ONLY : CST_t
 USE MODD_PARAM_LIMA,      ONLY : XRTMIN, XCTMIN
 USE MODD_PARAM_LIMA_WARM, ONLY : XLBR, XLBEXR, XLBC, XLBEXC, &
                                  XACCR1, XACCR3, XACCR4, XACCR5
@@ -59,6 +40,8 @@ IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
+TYPE(CST_t),              INTENT(IN)    :: CST
+!
 REAL, DIMENSION(:,:,:),    INTENT(IN)    :: PRHODREF! Cloud water m.r. at t 
 REAL, DIMENSION(:,:,:),    INTENT(IN)    :: PRCT    ! Cloud water m.r. at t 
 REAL, DIMENSION(:,:,:),    INTENT(IN)    :: PRRT    ! Rain water m.r. at t 
@@ -88,7 +71,7 @@ ZDR(:,:,:) = 9999.
 ZMASKR(:,:,:) = PRRT(:,:,:).GT.XRTMIN(3) .AND. PCRT(:,:,:).GT.XCTMIN(3)
 ZMASKC(:,:,:) = PRCT(:,:,:).GT.XRTMIN(2) .AND. PCCT(:,:,:).GT.XCTMIN(2)
 WHERE(ZMASKR(:,:,:))
-   ZDR(:,:,:)=(6.*PRRT(:,:,:)/XPI/XRHOLW/PCRT(:,:,:))**0.33
+   ZDR(:,:,:)=(6.*PRRT(:,:,:)/CST%XPI/CST%XRHOLW/PCRT(:,:,:))**0.33
 END WHERE
 !
 ! Transfer all drops in droplets if out of cloud and Dr<82microns
@@ -101,3 +84,4 @@ END WHERE
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_DROPS_TO_DROPLETS_CONV
+END MODULE MODE_LIMA_DROPS_TO_DROPLETS_CONV
diff --git a/src/common/micro/mode_lima_functions.F90 b/src/common/micro/mode_lima_functions.F90
new file mode 100644
index 0000000000000000000000000000000000000000..c65e6e23cbca066c1e02102e150f1284118134eb
--- /dev/null
+++ b/src/common/micro/mode_lima_functions.F90
@@ -0,0 +1,244 @@
+!MNH_LIC Copyright 2016-2019 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.
+!-----------------------------------------------------------------
+! Modifications:
+!  P. Wautelet 22/01/2019: replace double precision declarations by real(kind(0.0d0)) (to allow compilation by NAG compiler)
+!  P. Wautelet 19/04/2019: use modd_precision kinds
+!  P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function
+!  P. Wautelet 28/05/2019: move COUNTJV function to tools.f90
+!-----------------------------------------------------------------
+MODULE MODE_LIMA_FUNCTIONS
+  IMPLICIT NONE
+CONTAINS
+!
+!------------------------------------------------------------------------------
+!
+  FUNCTION MOMG (PALPHA,PNU,PP) RESULT (PMOMG)
+! Pth moment order of the generalized gamma law
+    USE MODI_GAMMA
+    IMPLICIT NONE
+    REAL     :: PALPHA ! first shape parameter of the dimensionnal distribution
+    REAL     :: PNU    ! second shape parameter of the dimensionnal distribution
+    REAL     :: PP     ! order of the moment
+    REAL     :: PMOMG  ! result: moment of order ZP
+    PMOMG = GAMMA_X0D(PNU+PP/PALPHA)/GAMMA_X0D(PNU)
+  END FUNCTION MOMG
+!
+!------------------------------------------------------------------------------
+!
+  FUNCTION RECT(PA,PB,PX,PX1,PX2)  RESULT(PRECT)
+!     PRECT takes the value PA if PX1<=PX<PX2, and PB outside the [PX1;PX2[ interval
+    IMPLICIT NONE
+    REAL,                        INTENT(IN) :: PA
+    REAL,                        INTENT(IN) :: PB
+    REAL, DIMENSION(:),          INTENT(IN) :: PX
+    REAL,                        INTENT(IN) :: PX1
+    REAL,                        INTENT(IN) :: PX2
+    REAL, DIMENSION(SIZE(PX,1))             :: PRECT
+    PRECT(:) = PB
+    WHERE (PX(:).GE.PX1 .AND. PX(:).LT.PX2)
+       PRECT(:) = PA
+    END WHERE
+    RETURN
+  END FUNCTION RECT
+!
+!-------------------------------------------------------------------------------
+!
+  FUNCTION DELTA(PA,PB,PX,PX1,PX2)  RESULT(PDELTA)
+!     PDELTA takes the value PA if PX<PX1, and PB if PX>=PX2
+!     PDELTA is a cubic interpolation between PA and PB for PX between PX1 and PX2 
+    IMPLICIT NONE
+    REAL,                        INTENT(IN) :: PA
+    REAL,                        INTENT(IN) :: PB
+    REAL, DIMENSION(:),          INTENT(IN) :: PX
+    REAL,                        INTENT(IN) :: PX1
+    REAL,                        INTENT(IN) :: PX2
+    REAL, DIMENSION(SIZE(PX,1))             :: PDELTA
+    REAL                                    :: ZA
+    ZA = 6.0*(PA-PB)/(PX2-PX1)**3
+    WHERE     (PX(:).LT.PX1)
+       PDELTA(:) = PA
+    ELSEWHERE (PX(:).GE.PX2)
+       PDELTA(:) = PB
+    ELSEWHERE
+       PDELTA(:) =   PA + ZA*PX1**2*(PX1/6.0 - 0.5*PX2)              &
+            + ZA*PX1*PX2*                          (PX(:))    &
+            - (0.5*ZA*(PX1+PX2))*                  (PX(:)**2) & 
+            + (ZA/3.0)*                            (PX(:)**3)
+    END WHERE
+    RETURN
+!
+  END FUNCTION DELTA
+!
+!-------------------------------------------------------------------------------
+!
+  FUNCTION DELTA_VEC(PA,PB,PX,PX1,PX2)  RESULT(PDELTA_VEC)
+!    Same as DELTA for vectorized PX1 and PX2 arguments
+    IMPLICIT NONE
+    REAL,                        INTENT(IN) :: PA
+    REAL,                        INTENT(IN) :: PB
+    REAL, DIMENSION(:),          INTENT(IN) :: PX
+    REAL, DIMENSION(:),          INTENT(IN) :: PX1
+    REAL, DIMENSION(:),          INTENT(IN) :: PX2
+    REAL, DIMENSION(SIZE(PX,1))             :: PDELTA_VEC
+    REAL, DIMENSION(SIZE(PX,1))             :: ZA
+    ZA(:) = 0.0
+    wHERE     (PX(:)<=PX1(:))
+       PDELTA_VEC(:) = PA
+    ELSEWHERE (PX(:)>=PX2(:))
+       PDELTA_VEC(:) = PB
+    ELSEWHERE
+       ZA(:)         = 6.0*(PA-PB)/(PX2(:)-PX1(:))**3
+       PDELTA_VEC(:) =   PA + ZA(:)*PX1(:)**2*(PX1(:)/6.0 - 0.5*PX2(:))           &
+            + ZA(:)*PX1(:)*PX2(:)*                          (PX(:))    &
+            - (0.5*ZA(:)*(PX1(:)+PX2(:)))*                  (PX(:)**2) & 
+            + (ZA(:)/3.0)*                                  (PX(:)**3)
+    END WHERE
+    RETURN
+  END FUNCTION DELTA_VEC
+!
+!-------------------------------------------------------------------------------
+!
+SUBROUTINE gaulag(x,w,n,alf)
+  use modd_precision, only: MNHREAL64
+  INTEGER n,MAXIT
+  REAL alf,w(n),x(n)
+  REAL(kind=MNHREAL64) :: EPS
+  PARAMETER (EPS=3.D-14,MAXIT=10)
+  INTEGER i,its,j
+  REAL ai
+  REAL(kind=MNHREAL64) :: p1,p2,p3,pp,z,z1
+!
+  REAL SUMW
+!
+  do 13 i=1,n
+     if(i.eq.1)then
+        z=(1.+alf)*(3.+.92*alf)/(1.+2.4*n+1.8*alf)
+     else if(i.eq.2)then
+        z=z+(15.+6.25*alf)/(1.+.9*alf+2.5*n)
+     else
+        ai=i-2
+        z=z+((1.+2.55*ai)/(1.9*ai)+1.26*ai*alf/(1.+3.5*ai))* &
+             (z-x(i-2))/(1.+.3*alf)
+     endif
+     do 12 its=1,MAXIT
+        p1=1.d0
+        p2=0.d0
+        do 11 j=1,n
+           p3=p2
+           p2=p1
+           p1=((2*j-1+alf-z)*p2-(j-1+alf)*p3)/j
+11      continue
+        pp=(n*p1-(n+alf)*p2)/z
+        z1=z
+        z=z1-p1/pp
+        if(abs(z-z1).le.EPS)goto 1
+12   continue
+1    x(i)=z
+     w(i)=-exp(gammln(alf+n)-gammln(real(n)))/(pp*n*p2)
+13 continue
+! NORMALISATION
+  SUMW = 0.0
+  DO 14 I=1,N
+     SUMW = SUMW + W(I)
+14 CONTINUE
+  DO 15 I=1,N
+     W(I) = W(I)/SUMW
+15 CONTINUE
+!
+  return
+END SUBROUTINE gaulag
+!
+!------------------------------------------------------------------------------
+!
+SUBROUTINE gauher(x,w,n)
+  use modd_precision, only: MNHREAL64
+  INTEGER n,MAXIT
+  REAL w(n),x(n)
+  REAL(kind=MNHREAL64) :: EPS,PIM4
+  PARAMETER (EPS=3.D-14,PIM4=.7511255444649425D0,MAXIT=10)
+  INTEGER i,its,j,m
+  REAL(kind=MNHREAL64) :: p1,p2,p3,pp,z,z1
+!
+  REAL SUMW
+!
+  m=(n+1)/2
+  do 13 i=1,m
+     if(i.eq.1)then
+        z=sqrt(real(2*n+1))-1.85575*(2*n+1)**(-.16667)
+     else if(i.eq.2)then
+        z=z-1.14*n**.426/z
+     else if (i.eq.3)then
+        z=1.86*z-.86*x(1)
+     else if (i.eq.4)then
+        z=1.91*z-.91*x(2)
+     else
+        z=2.*z-x(i-2)
+     endif
+     do 12 its=1,MAXIT
+        p1=PIM4
+        p2=0.d0
+        do 11 j=1,n
+           p3=p2
+           p2=p1
+           p1=z*sqrt(2.d0/j)*p2-sqrt(dble(j-1)/dble(j))*p3
+11      continue
+        pp=sqrt(2.d0*n)*p2
+        z1=z
+        z=z1-p1/pp
+        if(abs(z-z1).le.EPS)goto 1
+12   continue
+1    x(i)=z
+     x(n+1-i)=-z
+     pp=pp/PIM4 ! NORMALIZATION
+     w(i)=2.0/(pp*pp)
+     w(n+1-i)=w(i)
+13 continue
+! NORMALISATION
+  SUMW = 0.0
+  DO 14 I=1,N
+     SUMW = SUMW + W(I)
+14 CONTINUE
+  DO 15 I=1,N
+     W(I) = W(I)/SUMW
+15 CONTINUE
+!
+  return
+END SUBROUTINE gauher
+!
+!------------------------------------------------------------------------------
+!
+FUNCTION ARTH(FIRST,INCREMENT,N)
+  REAL,INTENT(IN) :: FIRST,INCREMENT
+  INTEGER,INTENT(IN) :: N
+  REAL,DIMENSION(N) :: ARTH
+  INTEGER :: K
+  DO K=1,N
+     ARTH(K)=FIRST+INCREMENT*(K-1)
+  END DO
+END FUNCTION ARTH
+!
+!------------------------------------------------------------------------------
+!
+FUNCTION gammln(xx)
+  IMPLICIT NONE
+  REAL, INTENT(IN) :: xx
+  REAL :: gammln
+  REAL :: tmp,x
+  REAL :: stp = 2.5066282746310005
+  REAL, DIMENSION(6) :: coef = (/76.18009172947146,& 
+       -86.50532032941677,24.01409824083091,& 
+       -1.231739572450155,0.1208650973866179e-2,&
+       -0.5395239384953e-5/)
+  x=xx
+  tmp=x+5.5
+  tmp=(x+0.5)*log(tmp)-tmp
+  gammln=tmp+log(stp*(1.000000000190015+&
+       sum(coef(:)/arth(x+1.,1.,size(coef))))/x)
+END FUNCTION gammln
+!
+!------------------------------------------------------------------------------
+!
+END MODULE MODE_LIMA_FUNCTIONS
diff --git a/src/mesonh/micro/lima_graupel.f90 b/src/common/micro/mode_lima_graupel.F90
similarity index 78%
rename from src/mesonh/micro/lima_graupel.f90
rename to src/common/micro/mode_lima_graupel.F90
index 8c96d2e0957a34003e2c4ff6ff5bf10b7bebcda1..42dfa71fbae577e18dab94b672e7be2cb42dae02 100644
--- a/src/mesonh/micro/lima_graupel.f90
+++ b/src/common/micro/mode_lima_graupel.F90
@@ -3,123 +3,24 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!      #################################
-       MODULE MODI_LIMA_GRAUPEL
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_GRAUPEL (PTSTEP, LDCOMPUTE,                                     &
-                            PRHODREF, PPRES, PT, PKA, PDV, PCJ,                    &
-                            PRVT, PRCT, PRRT, PRIT, PRST, PRGT,                    &
-                            PCCT, PCRT, PCIT, PCST, PCGT,                          &
-                            PLBDC, PLBDR, PLBDS, PLBDG,                            &
-                            PLVFACT, PLSFACT,                                      &
-                            P_TH_WETG, P_RC_WETG, P_CC_WETG, P_RR_WETG, P_CR_WETG, &
-                            P_RI_WETG, P_CI_WETG, P_RS_WETG, P_CS_WETG, P_RG_WETG, P_CG_WETG, P_RH_WETG, &
-                            P_TH_DRYG, P_RC_DRYG, P_CC_DRYG, P_RR_DRYG, P_CR_DRYG, &
-                            P_RI_DRYG, P_CI_DRYG, P_RS_DRYG, P_CS_DRYG, P_RG_DRYG, &
-                            P_RI_HMG, P_CI_HMG, P_RG_HMG,                          &
-                            P_TH_GMLT, P_RR_GMLT, P_CR_GMLT, P_CG_GMLT,            &
-                            PA_TH, PA_RC, PA_CC, PA_RR, PA_CR,                     &
-                            PA_RI, PA_CI, PA_RS, PA_CS, PA_RG, PA_CG, PA_RH, PA_CH )
-!
-REAL,                 INTENT(IN)    :: PTSTEP 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PPRES    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PT   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PKA   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PDV   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCJ   ! 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRVT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRGT    !
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PCCT    !
-REAL, DIMENSION(:),   INTENT(IN)    :: PCRT    !
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT    !
-REAL, DIMENSION(:),   INTENT(IN)    :: PCST    !
-REAL, DIMENSION(:),   INTENT(IN)    :: PCGT    !
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDC   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDG   ! 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PLVFACT ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CS_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CG_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RH_WETG
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CS_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_DRYG
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_HMG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_HMG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_HMG
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_GMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_GMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_GMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CG_GMLT
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RS
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CS
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RG
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CG
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CH
-!
-END SUBROUTINE LIMA_GRAUPEL
-END INTERFACE
-END MODULE MODI_LIMA_GRAUPEL
-!
+MODULE MODE_LIMA_GRAUPEL
+  IMPLICIT NONE
+CONTAINS
 !     #################################################################################
-      SUBROUTINE LIMA_GRAUPEL (PTSTEP, LDCOMPUTE,                                     &
-                               PRHODREF, PPRES, PT, PKA, PDV, PCJ,                    &
-                               PRVT, PRCT, PRRT, PRIT, PRST, PRGT,                    &
-                               PCCT, PCRT, PCIT, PCST, PCGT,                          &
-                               PLBDC, PLBDR, PLBDS, PLBDG,                            &
-                               PLVFACT, PLSFACT,                                      &
-                               P_TH_WETG, P_RC_WETG, P_CC_WETG, P_RR_WETG, P_CR_WETG, &
-                               P_RI_WETG, P_CI_WETG, P_RS_WETG, P_CS_WETG, P_RG_WETG, P_CG_WETG, P_RH_WETG, &
-                               P_TH_DRYG, P_RC_DRYG, P_CC_DRYG, P_RR_DRYG, P_CR_DRYG, &
-                               P_RI_DRYG, P_CI_DRYG, P_RS_DRYG, P_CS_DRYG, P_RG_DRYG, &
-                               P_RI_HMG, P_CI_HMG, P_RG_HMG,                          &
-                               P_TH_GMLT, P_RR_GMLT, P_CR_GMLT, P_CG_GMLT,            &
-                               PA_TH, PA_RC, PA_CC, PA_RR, PA_CR,                     &
-                               PA_RI, PA_CI, PA_RS, PA_CS, PA_RG, PA_CG, PA_RH, PA_CH )
+  SUBROUTINE LIMA_GRAUPEL (PTSTEP, LDCOMPUTE,                                     &
+                           PRHODREF, PPRES, PT, PKA, PDV, PCJ,                    &
+                           PRVT, PRCT, PRRT, PRIT, PRST, PRGT,                    &
+                           PCCT, PCRT, PCIT, PCST, PCGT,                          &
+                           PLBDC, PLBDR, PLBDS, PLBDG,                            &
+                           PLVFACT, PLSFACT,                                      &
+                           P_TH_WETG, P_RC_WETG, P_CC_WETG, P_RR_WETG, P_CR_WETG, &
+                           P_RI_WETG, P_CI_WETG, P_RS_WETG, P_CS_WETG, P_RG_WETG, P_CG_WETG, P_RH_WETG, &
+                           P_TH_DRYG, P_RC_DRYG, P_CC_DRYG, P_RR_DRYG, P_CR_DRYG, &
+                           P_RI_DRYG, P_CI_DRYG, P_RS_DRYG, P_CS_DRYG, P_RG_DRYG, &
+                           P_RI_HMG, P_CI_HMG, P_RG_HMG,                          &
+                           P_TH_GMLT, P_RR_GMLT, P_CR_GMLT, P_CG_GMLT,            &
+                           PA_TH, PA_RC, PA_CC, PA_RR, PA_CR,                     &
+                           PA_RI, PA_CI, PA_RS, PA_CS, PA_RG, PA_CG, PA_RH, PA_CH )
 !     #################################################################################
 !
 !!    PURPOSE
@@ -146,7 +47,7 @@ END MODULE MODI_LIMA_GRAUPEL
 !              ------------
 !
 USE MODD_CST,              ONLY : XTT, XMD, XMV, XRD, XRV, XLVTT, XLMTT, XESTT, XCL, XCI, XCPV
-USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCTMIN, XCEXVT, LHAIL
+USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCTMIN, XCEXVT, NMOM_H
 USE MODD_PARAM_LIMA_MIXED, ONLY : XCXG, XDG, X0DEPG, X1DEPG, NGAMINC,                             &
                                   XFCDRYG, XFIDRYG, XCOLIG, XCOLSG, XCOLEXIG, XCOLEXSG,           &
                                   XFSDRYG, XLBSDRYG1, XLBSDRYG2, XLBSDRYG3, XKER_SDRYG,           &
@@ -487,7 +388,7 @@ END WHERE
 !
 ZZW(:) = 0.0
 NHAIL = 0.
-IF (LHAIL) NHAIL = 1. 
+IF (NMOM_H.GE.1) NHAIL = 1. 
 WHERE( LDCOMPUTE(:) .AND. PRGT(:)>XRTMIN(6) .AND. PCGT(:)>XCTMIN(6) .AND. PT(:)<XTT .AND. &
        (ZRDRYG(:)-ZZW2(:)-ZZW3(:))>=(ZRWETG(:)-ZZW5(:)-ZZW6(:)) .AND. ZRWETG(:)-ZZW5(:)-ZZW6(:)>0.0 ) 
 !
@@ -668,3 +569,4 @@ CONTAINS
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_GRAUPEL
+END MODULE MODE_LIMA_GRAUPEL
diff --git a/src/mesonh/micro/lima_graupel_deposition.f90 b/src/common/micro/mode_lima_graupel_deposition.F90
similarity index 65%
rename from src/mesonh/micro/lima_graupel_deposition.f90
rename to src/common/micro/mode_lima_graupel_deposition.F90
index 83b28e3d202d33d6339b48fd0d81b7f5b79cdc5b..14e970084e17abc54a598dd2720b5e1e84156e84 100644
--- a/src/mesonh/micro/lima_graupel_deposition.f90
+++ b/src/common/micro/mode_lima_graupel_deposition.F90
@@ -3,37 +3,13 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-------------------------------------------------------------------------------
-!      #################################
-       MODULE MODI_LIMA_GRAUPEL_DEPOSITION
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_GRAUPEL_DEPOSITION (LDCOMPUTE, PRHODREF,                        &
-                                       PRGT, PCGT, PSSI, PLBDG, PAI, PCJ, PLSFACT, &
-                                       P_TH_DEPG, P_RG_DEPG                        )
-!
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF ! 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRGT     ! graupel mr
-REAL, DIMENSION(:),   INTENT(IN)    :: PCGT     ! graupel conc
-REAL, DIMENSION(:),   INTENT(IN)    :: PSSI     ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDG    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PAI      ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCJ      ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT  ! 
-!
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_TH_DEPG
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_RG_DEPG
-!!
-END SUBROUTINE LIMA_GRAUPEL_DEPOSITION
-END INTERFACE
-END MODULE MODI_LIMA_GRAUPEL_DEPOSITION
-!
+MODULE MODE_LIMA_GRAUPEL_DEPOSITION
+  IMPLICIT NONE
+CONTAINS
 !     ###########################################################################
-      SUBROUTINE LIMA_GRAUPEL_DEPOSITION (LDCOMPUTE, PRHODREF,                        &
-                                          PRGT, PCGT, PSSI, PLBDG, PAI, PCJ, PLSFACT, &
-                                          P_TH_DEPG, P_RG_DEPG                        )
+  SUBROUTINE LIMA_GRAUPEL_DEPOSITION (LDCOMPUTE, PRHODREF,                        &
+                                      PRGT, PCGT, PSSI, PLBDG, PAI, PCJ, PLSFACT, &
+                                      P_TH_DEPG, P_RG_DEPG                        )
 !     ###########################################################################
 !
 !!    PURPOSE
@@ -98,3 +74,4 @@ END WHERE
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_GRAUPEL_DEPOSITION
+END MODULE MODE_LIMA_GRAUPEL_DEPOSITION
diff --git a/src/mesonh/micro/lima_hail.f90 b/src/common/micro/mode_lima_hail.F90
similarity index 78%
rename from src/mesonh/micro/lima_hail.f90
rename to src/common/micro/mode_lima_hail.F90
index 8392316ae4106fd1e9ed2cbb4f22d287b084818e..4d1fef9038708a7578e9491e8cccc2b215d2fb65 100644
--- a/src/mesonh/micro/lima_hail.f90
+++ b/src/common/micro/mode_lima_hail.F90
@@ -3,110 +3,22 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!      #################################
-       MODULE MODI_LIMA_HAIL
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_HAIL (PTSTEP, LDCOMPUTE,                                     &
-                         PRHODREF, PPRES, PT, PKA, PDV, PCJ,                    &
-                         PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PRHT,              &
-                         PCCT, PCRT, PCIT, PCST, PCGT, PCHT,                    &
-                         PLBDC, PLBDR, PLBDS, PLBDG, PLBDH,                     &
-                         PLVFACT, PLSFACT,                                      &
-                         P_TH_WETH, P_RC_WETH, P_CC_WETH, P_RR_WETH, P_CR_WETH, &
-                         P_RI_WETH, P_CI_WETH, P_RS_WETH, P_CS_WETH, P_RG_WETH, P_CG_WETH, P_RH_WETH, &
-                         P_RG_COHG, P_CG_COHG,                                  &
-                         P_TH_HMLT, P_RR_HMLT, P_CR_HMLT, P_CH_HMLT,            &
-                         PA_TH, PA_RC, PA_CC, PA_RR, PA_CR,                     &
-                         PA_RI, PA_CI, PA_RS, PA_CS, PA_RG, PA_CG, PA_RH, PA_CH )
-!
-REAL,                 INTENT(IN)    :: PTSTEP 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PPRES    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PT   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PKA   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PDV   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCJ   ! 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRVT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRGT    !
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHT    !
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PCCT    !
-REAL, DIMENSION(:),   INTENT(IN)    :: PCRT    !
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT    !
-REAL, DIMENSION(:),   INTENT(IN)    :: PCST    !
-REAL, DIMENSION(:),   INTENT(IN)    :: PCGT    !
-REAL, DIMENSION(:),   INTENT(IN)    :: PCHT    !
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDC   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDG   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDH   ! 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PLVFACT ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_WETH
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_WETH
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_WETH
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_WETH
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_WETH
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_WETH
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_WETH
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_WETH
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CS_WETH
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_WETH
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CG_WETH
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RH_WETH
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_COHG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CG_COHG
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_HMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_HMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_HMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CH_HMLT
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RS
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CS
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RG
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CG
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CH
-!
-END SUBROUTINE LIMA_HAIL
-END INTERFACE
-END MODULE MODI_LIMA_HAIL
-!
+MODULE MODE_LIMA_HAIL
+  IMPLICIT NONE
+CONTAINS
 !     #################################################################################
-      SUBROUTINE LIMA_HAIL (PTSTEP, LDCOMPUTE,                                     &
-                            PRHODREF, PPRES, PT, PKA, PDV, PCJ,                    &
-                            PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PRHT,              &
-                            PCCT, PCRT, PCIT, PCST, PCGT, PCHT,                    &
-                            PLBDC, PLBDR, PLBDS, PLBDG, PLBDH,                     &
-                            PLVFACT, PLSFACT,                                      &
-                            P_TH_WETH, P_RC_WETH, P_CC_WETH, P_RR_WETH, P_CR_WETH, &
-                            P_RI_WETH, P_CI_WETH, P_RS_WETH, P_CS_WETH, P_RG_WETH, P_CG_WETH, P_RH_WETH, &
-                            P_RG_COHG, P_CG_COHG,                                  &
-                            P_TH_HMLT, P_RR_HMLT, P_CR_HMLT, P_CH_HMLT,            &
-                            PA_TH, PA_RC, PA_CC, PA_RR, PA_CR,                     &
-                            PA_RI, PA_CI, PA_RS, PA_CS, PA_RG, PA_CG, PA_RH, PA_CH )
+  SUBROUTINE LIMA_HAIL (PTSTEP, LDCOMPUTE,                                     &
+                        PRHODREF, PPRES, PT, PKA, PDV, PCJ,                    &
+                        PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PRHT,              &
+                        PCCT, PCRT, PCIT, PCST, PCGT, PCHT,                    &
+                        PLBDC, PLBDR, PLBDS, PLBDG, PLBDH,                     &
+                        PLVFACT, PLSFACT,                                      &
+                        P_TH_WETH, P_RC_WETH, P_CC_WETH, P_RR_WETH, P_CR_WETH, &
+                        P_RI_WETH, P_CI_WETH, P_RS_WETH, P_CS_WETH, P_RG_WETH, P_CG_WETH, P_RH_WETH, &
+                        P_RG_COHG, P_CG_COHG,                                  &
+                        P_TH_HMLT, P_RR_HMLT, P_CR_HMLT, P_CH_HMLT,            &
+                        PA_TH, PA_RC, PA_CC, PA_RR, PA_CR,                     &
+                        PA_RI, PA_CI, PA_RS, PA_CS, PA_RG, PA_CG, PA_RH, PA_CH )
 !     #################################################################################
 !
 !!    PURPOSE
@@ -133,7 +45,7 @@ END MODULE MODI_LIMA_HAIL
 !              ------------
 !
 USE MODD_CST,              ONLY : XTT, XMD, XMV, XRD, XRV, XLVTT, XLMTT, XESTT, XCL, XCI, XCPV
-USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCTMIN, XCEXVT, LHAIL
+USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCTMIN, XCEXVT
 USE MODD_PARAM_LIMA_MIXED, ONLY : NWETLBDAG, XWETINTP1G, XWETINTP2G, &
                                   NWETLBDAH, X0DEPH, X1DEPH, XDH, XEX0DEPH, XEX1DEPH, &
                                   XFWETH, XWETINTP1H, XWETINTP2H, &
@@ -574,3 +486,4 @@ CONTAINS
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_HAIL
+END MODULE MODE_LIMA_HAIL
diff --git a/src/mesonh/micro/lima_hail_deposition.f90 b/src/common/micro/mode_lima_hail_deposition.F90
similarity index 65%
rename from src/mesonh/micro/lima_hail_deposition.f90
rename to src/common/micro/mode_lima_hail_deposition.F90
index 1b411138fdfc344c7ab8cdc4043bc37e737baa2e..50eae03d08804182d5da09f0eefcf8fc30bed701 100644
--- a/src/mesonh/micro/lima_hail_deposition.f90
+++ b/src/common/micro/mode_lima_hail_deposition.F90
@@ -3,37 +3,13 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-------------------------------------------------------------------------------
-!      #################################
-       MODULE MODI_LIMA_HAIL_DEPOSITION
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_HAIL_DEPOSITION (LDCOMPUTE, PRHODREF,                        &
-                                    PRHT, PCHT, PSSI, PLBDH, PAI, PCJ, PLSFACT, &
-                                    P_TH_DEPH, P_RH_DEPH                        )
-!
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF ! 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHT     ! hail mr
-REAL, DIMENSION(:),   INTENT(IN)    :: PCHT     ! hail conc
-REAL, DIMENSION(:),   INTENT(IN)    :: PSSI     ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDH    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PAI      ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCJ      ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT  ! 
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_DEPH
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RH_DEPH
-!!
-END SUBROUTINE LIMA_HAIL_DEPOSITION
-END INTERFACE
-END MODULE MODI_LIMA_HAIL_DEPOSITION
-!
+MODULE MODE_LIMA_HAIL_DEPOSITION
+  IMPLICIT NONE
+CONTAINS
 !     ###########################################################################
-      SUBROUTINE LIMA_HAIL_DEPOSITION (LDCOMPUTE, PRHODREF,                        &
-                                       PRHT, PCHT, PSSI, PLBDH, PAI, PCJ, PLSFACT, &
-                                       P_TH_DEPH, P_RH_DEPH                        )
+  SUBROUTINE LIMA_HAIL_DEPOSITION (LDCOMPUTE, PRHODREF,                        &
+                                   PRHT, PCHT, PSSI, PLBDH, PAI, PCJ, PLSFACT, &
+                                   P_TH_DEPH, P_RH_DEPH                        )
 !     ###########################################################################
 !
 !!    PURPOSE
@@ -98,3 +74,4 @@ END WHERE
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_HAIL_DEPOSITION
+END MODULE MODE_LIMA_HAIL_DEPOSITION
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 0000000000000000000000000000000000000000..082b3c3e5f86ba5343e2bf2a243c58feb3a98253
--- /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/src/mesonh/micro/lima_ice_aggregation_snow.f90 b/src/common/micro/mode_lima_ice_aggregation_snow.F90
similarity index 72%
rename from src/mesonh/micro/lima_ice_aggregation_snow.f90
rename to src/common/micro/mode_lima_ice_aggregation_snow.F90
index 26b23005738fe4202944cb83e51d634d403aeede..03f4c10b228955877104f014612422e0374ce9d2 100644
--- a/src/mesonh/micro/lima_ice_aggregation_snow.f90
+++ b/src/common/micro/mode_lima_ice_aggregation_snow.F90
@@ -3,40 +3,14 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-------------------------------------------------------------------------------
-!      #################################
-       MODULE MODI_LIMA_ICE_AGGREGATION_SNOW
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_ICE_AGGREGATION_SNOW (LDCOMPUTE,                            &
-                                         PT, PRHODREF,                         &
-                                         PRIT, PRST, PCIT, PCST, PLBDI, PLBDS, &
-                                         P_RI_AGGS, P_CI_AGGS                  )
-!
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PT
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT
-REAL, DIMENSION(:),   INTENT(IN)    :: PCST
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDI 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS 
-!
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_RI_AGGS
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_CI_AGGS
-!
-END SUBROUTINE LIMA_ICE_AGGREGATION_SNOW
-END INTERFACE
-END MODULE MODI_LIMA_ICE_AGGREGATION_SNOW
-!
+MODULE MODE_LIMA_ICE_AGGREGATION_SNOW
+  IMPLICIT NONE
+CONTAINS
 !     #######################################################################
-      SUBROUTINE LIMA_ICE_AGGREGATION_SNOW (LDCOMPUTE,                            &
-                                            PT, PRHODREF,                         &
-                                            PRIT, PRST, PCIT, PCST, PLBDI, PLBDS, &
-                                            P_RI_AGGS, P_CI_AGGS                  )
+  SUBROUTINE LIMA_ICE_AGGREGATION_SNOW (LDCOMPUTE,                            &
+                                        PT, PRHODREF,                         &
+                                        PRIT, PRST, PCIT, PCST, PLBDI, PLBDS, &
+                                        P_RI_AGGS, P_CI_AGGS                  )
 !     #######################################################################
 !
 !!    PURPOSE
@@ -134,3 +108,4 @@ END IF
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_ICE_AGGREGATION_SNOW
+END MODULE MODE_LIMA_ICE_AGGREGATION_SNOW
diff --git a/src/mesonh/micro/lima_ice_deposition.f90 b/src/common/micro/mode_lima_ice_deposition.F90
similarity index 72%
rename from src/mesonh/micro/lima_ice_deposition.f90
rename to src/common/micro/mode_lima_ice_deposition.F90
index b9ca8ed7558349a6f1da6296770fd7a5e0a4c3d2..ed7540ca238a6898c0c9c4a61ac52eaad60d2035 100644
--- a/src/mesonh/micro/lima_ice_deposition.f90
+++ b/src/common/micro/mode_lima_ice_deposition.F90
@@ -3,48 +3,15 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-------------------------------------------------------------------------------
-!      #####################
-       MODULE MODI_LIMA_ICE_DEPOSITION
-!      #####################
-!
-INTERFACE
-      SUBROUTINE LIMA_ICE_DEPOSITION (PTSTEP, LDCOMPUTE,                     &
-                                      PRHODREF, PT, PSSI, PAI, PCJ, PLSFACT, &
-                                      PRIT, PCIT, PLBDI,                     &
-                                      P_TH_DEPI, P_RI_DEPI,                  &
-                                      P_RI_CNVS, P_CI_CNVS                   )
-!
-REAL,                 INTENT(IN)    :: PTSTEP
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF! Reference density
-REAL, DIMENSION(:),   INTENT(IN)    :: PT  ! abs. pressure at time t
-REAL, DIMENSION(:),   INTENT(IN)    :: PSSI  ! abs. pressure at time t
-REAL, DIMENSION(:),   INTENT(IN)    :: PAI  ! abs. pressure at time t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCJ  ! abs. pressure at time t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT  ! abs. pressure at time t
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT    ! Cloud ice m.r. at t 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT    ! Ice crystal C. at t
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDI    ! Graupel m.r. at t 
-!
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_TH_DEPI
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_RI_DEPI
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_RI_CNVS
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_CI_CNVS
-!
-END SUBROUTINE LIMA_ICE_DEPOSITION
-END INTERFACE
-END MODULE MODI_LIMA_ICE_DEPOSITION
-!
+MODULE MODE_LIMA_ICE_DEPOSITION
+  IMPLICIT NONE
+CONTAINS
 !     ##########################################################################
-SUBROUTINE LIMA_ICE_DEPOSITION (PTSTEP, LDCOMPUTE,                        &
-                                PRHODREF, PT,  PSSI, PAI, PCJ, PLSFACT,   &
-                                PRIT, PCIT, PLBDI,                        &
-                                P_TH_DEPI, P_RI_DEPI,                     &
-                                P_RI_CNVS, P_CI_CNVS                      )
+  SUBROUTINE LIMA_ICE_DEPOSITION (PTSTEP, LDCOMPUTE,                        &
+                                  PRHODREF, PT,  PSSI, PAI, PCJ, PLSFACT,   &
+                                  PRIT, PCIT, PLBDI,                        &
+                                  P_TH_DEPI, P_RI_DEPI,                     &
+                                  P_RI_CNVS, P_CI_CNVS                      )
 !     ##########################################################################
 !
 !!    PURPOSE
@@ -74,7 +41,7 @@ SUBROUTINE LIMA_ICE_DEPOSITION (PTSTEP, LDCOMPUTE,                        &
 !              ------------
 !
 USE MODD_PARAM_LIMA,      ONLY : XRTMIN, XCTMIN, XALPHAI, XALPHAS, XNUI, XNUS,&
-                                 LSNOW, NMOM_I 
+                                 NMOM_I, NMOM_S 
 USE MODD_PARAM_LIMA_COLD, ONLY : XCXS, XCCS,                                  &
                                  XLBDAS_MAX, XDSCNVI_LIM, XLBDASCNVI_MAX,     &
                                  XC0DEPSI, XC1DEPSI, XR0DEPSI, XR1DEPSI,      &
@@ -177,9 +144,10 @@ ELSE
    END WHERE
 END IF
 !
-IF (.NOT.LSNOW) THEN
+IF (NMOM_S.EQ.0) THEN
    P_RI_CNVS(:) = 0.
    P_CI_CNVS(:) = 0.
 END IF
 !
 END SUBROUTINE LIMA_ICE_DEPOSITION
+END MODULE MODE_LIMA_ICE_DEPOSITION
diff --git a/src/mesonh/micro/lima_ice_melting.f90 b/src/common/micro/mode_lima_ice_melting.F90
similarity index 60%
rename from src/mesonh/micro/lima_ice_melting.f90
rename to src/common/micro/mode_lima_ice_melting.F90
index a95f45044056fda9664059a03b549d2395581639..e2e7b475ec9a9c622bab7d00b003b6f4997ce240 100644
--- a/src/mesonh/micro/lima_ice_melting.f90
+++ b/src/common/micro/mode_lima_ice_melting.F90
@@ -2,56 +2,16 @@
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
 !MNH_LIC for details. version 1.
-!      #################################
-       MODULE MODI_LIMA_ICE_MELTING
-!      #################################
-!
-INTERFACE
-      SUBROUTINE LIMA_ICE_MELTING (PTSTEP, LDCOMPUTE,                        &
-                                   PEXNREF, PPABST,                          &
-                                   PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
-                                   PCIT, PINT,                               &
-                                   P_TH_IMLT, P_RC_IMLT, P_CC_IMLT,          &
-                                   PB_TH, PB_RC, PB_CC, PB_RI, PB_CI, PB_IFNN)
-!
-REAL,                 INTENT(IN)    :: PTSTEP 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PEXNREF ! Reference Exner function
-REAL, DIMENSION(:),   INTENT(IN)    :: PPABST  ! abs. pressure at time t
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PTHT    ! Theta at time t
-REAL, DIMENSION(:),   INTENT(IN)    :: PRVT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRGT    ! 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT    ! Rain water C. at t
-REAL, DIMENSION(:,:), INTENT(IN)    :: PINT    ! Nucleated IFN C. at t
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_IMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_IMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_IMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: PB_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PB_RC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PB_CC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PB_RI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PB_CI
-REAL, DIMENSION(:,:), INTENT(INOUT) :: PB_IFNN
-!
-END SUBROUTINE LIMA_ICE_MELTING
-END INTERFACE
-END MODULE MODI_LIMA_ICE_MELTING
-!
+MODULE MODE_LIMA_ICE_MELTING
+  IMPLICIT NONE
+CONTAINS
 !     ########################################################################
-      SUBROUTINE LIMA_ICE_MELTING (PTSTEP, LDCOMPUTE,                        &
-                                   PEXNREF, PPABST,                          &
-                                   PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
-                                   PCIT, PINT,                               &
-                                   P_TH_IMLT, P_RC_IMLT, P_CC_IMLT,          &
-                                   PB_TH, PB_RC, PB_CC, PB_RI, PB_CI, PB_IFNN)
+  SUBROUTINE LIMA_ICE_MELTING (PTSTEP, LDCOMPUTE,                        &
+                               PEXNREF, PPABST,                          &
+                               PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
+                               PCIT, PINT,                               &
+                               P_TH_IMLT, P_RC_IMLT, P_CC_IMLT,          &
+                               PB_TH, PB_RC, PB_CC, PB_RI, PB_CI, PB_IFNN)
 !     ########################################################################
 !
 !!    PURPOSE
@@ -162,3 +122,4 @@ ENDDO
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_ICE_MELTING
+END MODULE MODE_LIMA_ICE_MELTING
diff --git a/src/mesonh/micro/lima_init_ccn_activation_spectrum.f90 b/src/common/micro/mode_lima_init_ccn_activation_spectrum.F90
similarity index 93%
rename from src/mesonh/micro/lima_init_ccn_activation_spectrum.f90
rename to src/common/micro/mode_lima_init_ccn_activation_spectrum.F90
index 4403f97025e2c04b8f823efd603eec3accbb28ef..c11b9222e8a25524ee32b40d0a16b49c0abd7077 100644
--- a/src/mesonh/micro/lima_init_ccn_activation_spectrum.f90
+++ b/src/common/micro/mode_lima_init_ccn_activation_spectrum.F90
@@ -3,27 +3,11 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-------------------------------------------------------------------------------
-!      ####################
-       MODULE MODI_LIMA_INIT_CCN_ACTIVATION_SPECTRUM
-INTERFACE
-   SUBROUTINE LIMA_INIT_CCN_ACTIVATION_SPECTRUM (CTYPE_CCN,XD,XSIGMA,XLIMIT_FACTOR,XK,XMU,XBETA,XKAPPA)
-     !
-     CHARACTER(LEN=*), INTENT(IN)  :: CTYPE_CCN         ! Aerosol type
-     REAL,             INTENT(IN)  :: XD            ! Aerosol PSD modal diameter          
-     REAL,             INTENT(IN)  :: XSIGMA        ! Aerosol PSD width
-     REAL,             INTENT(OUT) :: XLIMIT_FACTOR ! C/Naer
-     REAL,             INTENT(OUT) :: XK            ! k
-     REAL,             INTENT(OUT) :: XMU           ! mu
-     REAL,             INTENT(OUT) :: XBETA         ! beta
-     REAL,             INTENT(OUT) :: XKAPPA        ! kappa
-!
-   END SUBROUTINE LIMA_INIT_CCN_ACTIVATION_SPECTRUM
-END INTERFACE
-END MODULE MODI_LIMA_INIT_CCN_ACTIVATION_SPECTRUM
-!      ####################
-!
+MODULE MODE_LIMA_INIT_CCN_ACTIVATION_SPECTRUM
+  IMPLICIT NONE
+CONTAINS
 !     #############################################################
-      SUBROUTINE LIMA_INIT_CCN_ACTIVATION_SPECTRUM (CTYPE_CCN,XD,XSIGMA,XLIMIT_FACTOR,XK,XMU,XBETA,XKAPPA)
+  SUBROUTINE LIMA_INIT_CCN_ACTIVATION_SPECTRUM (CTYPE_CCN,XD,XSIGMA,XLIMIT_FACTOR,XK,XMU,XBETA,XKAPPA)
 !     #############################################################
 
 !!
@@ -456,3 +440,4 @@ END FUNCTION DSDD
 !
 !------------------------------------------------------------------------------
 END SUBROUTINE LIMA_INIT_CCN_ACTIVATION_SPECTRUM
+END MODULE MODE_LIMA_INIT_CCN_ACTIVATION_SPECTRUM
diff --git a/src/common/micro/mode_lima_inst_procs.F90 b/src/common/micro/mode_lima_inst_procs.F90
new file mode 100644
index 0000000000000000000000000000000000000000..0deeb85fa8652fa12103407a5fc1b0ad2b8a7712
--- /dev/null
+++ b/src/common/micro/mode_lima_inst_procs.F90
@@ -0,0 +1,133 @@
+!MNH_LIC Copyright 2018-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_INST_PROCS
+  IMPLICIT NONE
+CONTAINS
+!     ###########################################################################
+  SUBROUTINE LIMA_INST_PROCS (PTSTEP, LDCOMPUTE,                                  &
+                              PEXNREF, PPABST,                                    &
+                              PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,           &
+                              PCCT, PCRT, PCIT,                                   &
+                              PINT,                                               &
+                              P_CR_BRKU,                                          & ! spontaneous break up of drops (BRKU) : Nr
+                              P_TH_HONR, P_RR_HONR, P_CR_HONR,                    & ! rain drops homogeneous freezing (HONR) : rr, Nr, rg=-rr, th
+                              P_TH_IMLT, P_RC_IMLT, P_CC_IMLT,                    & ! ice melting (IMLT) : rc, Nc, ri=-rc, Ni=-Nc, th, IFNF, IFNA
+                              PB_TH, PB_RV, PB_RC, PB_RR, PB_RI, PB_RG,           &
+                              PB_CC, PB_CR, PB_CI,                                &
+                              PB_IFNN,                                            &
+                              PCF1D, PIF1D, PPF1D                                 )
+!     ###########################################################################
+!
+!!    PURPOSE
+!!    -------
+!!      Compute sources of instantaneous microphysical processes for the
+!!    time-split version of LIMA
+!!
+!!    AUTHOR
+!!    ------
+!!      B.    Vié        * CNRM *
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original             15/03/2018
+!!
+!-------------------------------------------------------------------------------
+!
+!
+USE MODD_PARAM_LIMA, ONLY : NMOM_C, NMOM_R, NMOM_I, NMOM_G
+!
+USE MODE_LIMA_DROPS_BREAK_UP, ONLY: LIMA_DROPS_BREAK_UP
+USE MODE_LIMA_DROPS_HOM_FREEZING, ONLY: LIMA_DROPS_HOM_FREEZING
+USE MODE_LIMA_ICE_MELTING, ONLY: LIMA_ICE_MELTING
+
+IMPLICIT NONE
+
+
+
+REAL,                 INTENT(IN)    :: PTSTEP     ! Time step
+LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
+!
+REAL, DIMENSION(:),   INTENT(IN)    :: PEXNREF    ! Reference Exner function
+REAL, DIMENSION(:),   INTENT(IN)    :: PPABST     ! abs. pressure at time t
+!
+REAL, DIMENSION(:),   INTENT(IN)    :: PTHT       ! Theta at t 
+REAL, DIMENSION(:),   INTENT(IN)    :: PRVT       ! Water vapor m.r. at t 
+REAL, DIMENSION(:),   INTENT(IN)    :: PRCT       ! Cloud water m.r. at t 
+REAL, DIMENSION(:),   INTENT(IN)    :: PRRT       ! Rain water m.r. at t
+REAL, DIMENSION(:),   INTENT(IN)    :: PRIT       ! 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)    :: PCCT       ! Cloud water conc. at t 
+REAL, DIMENSION(:),   INTENT(IN)    :: PCRT       ! Rain water conc. at t
+REAL, DIMENSION(:),   INTENT(IN)    :: PCIT       ! Prinstine ice conc. at t
+!
+REAL, DIMENSION(:,:), INTENT(IN)    :: PINT       ! IFN C. activated at t
+!
+REAL, DIMENSION(:)  , INTENT(INOUT) :: P_CR_BRKU  ! Concentration change (#/kg)
+REAL, DIMENSION(:)  , INTENT(INOUT) :: P_TH_HONR  ! 
+REAL, DIMENSION(:)  , INTENT(INOUT) :: P_RR_HONR  ! mr change (kg/kg)
+REAL, DIMENSION(:)  , INTENT(INOUT) :: P_CR_HONR  ! Concentration change (#/kg)
+REAL, DIMENSION(:)  , INTENT(INOUT) :: P_TH_IMLT  ! 
+REAL, DIMENSION(:)  , INTENT(INOUT) :: P_RC_IMLT  ! mr change (kg/kg)
+REAL, DIMENSION(:)  , INTENT(INOUT) :: P_CC_IMLT  ! Concentration change (#/kg)
+!
+REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_TH      ! Cumulated theta change
+REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_RV      ! Cumulated mr change (kg/kg)
+REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_RC      ! Cumulated mr change (kg/kg)
+REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_RR      ! Cumulated mr change (kg/kg)
+REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_RI      ! Cumulated mr change (kg/kg)
+REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_RG      ! Cumulated mr change (kg/kg)
+!
+REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_CC      ! Cumulated concentration change (#/kg)
+REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_CR      ! Cumulated concentration change (#/kg)
+REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_CI      ! Cumulated concentration change (#/kg)
+!
+REAL, DIMENSION(:,:), INTENT(INOUT) :: PB_IFNN    ! Cumulated concentration change (#/kg)
+!
+REAL, DIMENSION(:)  , INTENT(INOUT) :: PCF1D      ! Liquid cloud fraction
+REAL, DIMENSION(:)  , INTENT(INOUT) :: PIF1D      ! Ice cloud fraction
+REAL, DIMENSION(:)  , INTENT(INOUT) :: PPF1D      ! Precipitation fraction
+!
+!-------------------------------------------------------------------------------
+!
+IF (NMOM_R.GE.2) THEN
+   CALL LIMA_DROPS_BREAK_UP (LDCOMPUTE,    & ! no dependance on CF, IF or PF
+                             PCRT, PRRT,   &
+                             P_CR_BRKU,    &
+                             PB_CR         )
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+IF (NMOM_G.GE.1 .AND. NMOM_R.GE.1) THEN
+   CALL LIMA_DROPS_HOM_FREEZING (PTSTEP, LDCOMPUTE,                        & ! no dependance on CF, IF or PF
+                                 PEXNREF, PPABST,                          &
+                                 PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
+                                 PCRT,                                     &
+                                 P_TH_HONR, P_RR_HONR, P_CR_HONR,          &
+                                 PB_TH, PB_RR, PB_CR, PB_RG                )
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+IF (NMOM_C.GE.1 .AND. NMOM_I.GE.1) THEN
+   CALL LIMA_ICE_MELTING (PTSTEP, LDCOMPUTE,                        & ! no dependance on CF, IF or PF
+                          PEXNREF, PPABST,                          & ! but ice fraction becomes cloud fraction
+                          PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & ! -> where ?
+                          PCIT, PINT,                               &
+                          P_TH_IMLT, P_RC_IMLT, P_CC_IMLT,          &
+                          PB_TH, PB_RC, PB_CC, PB_RI, PB_CI, PB_IFNN)
+   !
+   !PCF1D(:)=MAX(PCF1D(:),PIF1D(:))
+   !PIF1D(:)=0.
+   !
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE LIMA_INST_PROCS
+END MODULE MODE_LIMA_INST_PROCS
diff --git a/src/mesonh/micro/lima_meyers_nucleation.f90 b/src/common/micro/mode_lima_meyers_nucleation.F90
similarity index 71%
rename from src/mesonh/micro/lima_meyers_nucleation.f90
rename to src/common/micro/mode_lima_meyers_nucleation.F90
index f0c38fd6ad95ec88b8b3517646347640ce7f9091..989c3562cbcac6400404794c726c1c6f7237fe2d 100644
--- a/src/mesonh/micro/lima_meyers_nucleation.f90
+++ b/src/common/micro/mode_lima_meyers_nucleation.F90
@@ -3,58 +3,17 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!      ##################################
-       MODULE MODI_LIMA_MEYERS_NUCLEATION
-!      ##################################
-!
-INTERFACE
-   SUBROUTINE LIMA_MEYERS_NUCLEATION (PTSTEP,                                     &
-                                      PRHODREF, PEXNREF, PPABST,                  &
-                                      PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,   &
-                                      PCCT, PCIT, PINT,                           &
-                                      P_TH_HIND, P_RI_HIND, P_CI_HIND,            &
-                                      P_TH_HINC, P_RC_HINC, P_CC_HINC,            &
-                                      PICEFR                                      )
-!
-REAL,                     INTENT(IN)    :: PTSTEP
-!
-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(INOUT) :: PTHT    ! Theta at time 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    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRGT    ! Graupel m.r. at t 
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCCT    ! Cloud water C. at t
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCIT    ! Ice crystal C. source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PINT    ! Activated ice nuclei C.
-!
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: P_TH_HIND
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: P_RI_HIND
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: P_CI_HIND
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: P_TH_HINC
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: P_RC_HINC
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: P_CC_HINC
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PICEFR
-!
-END SUBROUTINE LIMA_MEYERS_NUCLEATION
-END INTERFACE
-END MODULE MODI_LIMA_MEYERS_NUCLEATION
-!
+MODULE MODE_LIMA_MEYERS_NUCLEATION
+  IMPLICIT NONE
+CONTAINS
 !     #############################################################################
-   SUBROUTINE LIMA_MEYERS_NUCLEATION (PTSTEP,                                     &
-                                      PRHODREF, PEXNREF, PPABST,                  &
-                                      PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,   &
-                                      PCCT, PCIT, PINT,                           &
-                                      P_TH_HIND, P_RI_HIND, P_CI_HIND,            &
-                                      P_TH_HINC, P_RC_HINC, P_CC_HINC,            &
-                                      PICEFR                                      )
+  SUBROUTINE LIMA_MEYERS_NUCLEATION (CST, PTSTEP,                                &
+                                     PRHODREF, PEXNREF, PPABST,                  &
+                                     PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,   &
+                                     PCCT, PCIT, PINT,                           &
+                                     P_TH_HIND, P_RI_HIND, P_CI_HIND,            &
+                                     P_TH_HINC, P_RC_HINC, P_CC_HINC,            &
+                                     PICEFR                                      )
 !     #############################################################################
 !!
 !!    PURPOSE
@@ -80,8 +39,7 @@ END MODULE MODI_LIMA_MEYERS_NUCLEATION
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_CST
-USE MODD_NSV,             ONLY: NSV_LIMA_NC, NSV_LIMA_NI
+USE MODD_CST,            ONLY: CST_t
 USE MODD_PARAMETERS
 USE MODD_PARAM_LIMA
 USE MODD_PARAM_LIMA_COLD
@@ -92,6 +50,7 @@ IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
+TYPE(CST_t),              INTENT(IN)    :: CST
 REAL,                     INTENT(IN)    :: PTSTEP
 !
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF! Reference density
@@ -188,12 +147,12 @@ IKE=SIZE(PTHT,3) - JPVEXT
 !
 ! Temperature
 !
-ZT(:,:,:)  = PTHT(:,:,:) * ( PPABST(:,:,:)/XP00 ) ** (XRD/XCPD)
+ZT(:,:,:)  = PTHT(:,:,:) * ( PPABST(:,:,:)/CST%XP00 ) ** (CST%XRD/CST%XCPD)
 !
 ! Saturation over ice
 !
-ZW(:,:,:) = EXP( XALPI - XBETAI/ZT(:,:,:) - XGAMI*ALOG(ZT(:,:,:) ) )
-ZW(:,:,:) = PRVT(:,:,:)*( PPABST(:,:,:)-ZW(:,:,:) ) / ( (XMV/XMD) * ZW(:,:,:) )
+ZW(:,:,:) = EXP( CST%XALPI - CST%XBETAI/ZT(:,:,:) - CST%XGAMI*ALOG(ZT(:,:,:) ) )
+ZW(:,:,:) = PRVT(:,:,:)*( PPABST(:,:,:)-ZW(:,:,:) ) / ( (CST%XMV/CST%XMD) * ZW(:,:,:) )
 !
 !
 !-------------------------------------------------------------------------------
@@ -202,7 +161,7 @@ ZW(:,:,:) = PRVT(:,:,:)*( PPABST(:,:,:)-ZW(:,:,:) ) / ( (XMV/XMD) * ZW(:,:,:) )
 !  the temperature is negative only !!!
 !
 GNEGT(:,:,:) = .FALSE.
-GNEGT(IIB:IIE,IJB:IJE,IKB:IKE) = ZT(IIB:IIE,IJB:IJE,IKB:IKE)<XTT .AND. &
+GNEGT(IIB:IIE,IJB:IJE,IKB:IKE) = ZT(IIB:IIE,IJB:IJE,IKB:IKE)<CST%XTT .AND. &
                                  ZW(IIB:IIE,IJB:IJE,IKB:IKE)>0.8 
 INEGT = COUNTJV( GNEGT(:,:,:),I1(:),I2(:),I3(:))
 IF( INEGT >= 1 ) THEN
@@ -251,14 +210,14 @@ IF( INEGT >= 1 ) THEN
   ALLOCATE(ZSSI(INEGT))
   ALLOCATE(ZTCELSIUS(INEGT))
 !
-  ZZW(:)  = ZEXNREF(:)*( XCPD+XCPV*ZRVT(:)+XCL*(ZRCT(:)+ZRRT(:)) &
-                                  +XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) )
-  ZTCELSIUS(:) = MAX( ZZT(:)-XTT,-50.0 )
-  ZLSFACT(:) = (XLSTT+(XCPV-XCI)*ZTCELSIUS(:))/ZZW(:) ! L_s/(Pi_ref*C_ph)
-  ZLVFACT(:) = (XLVTT+(XCPV-XCL)*ZTCELSIUS(:))/ZZW(:) ! L_v/(Pi_ref*C_ph)
+  ZZW(:)  = ZEXNREF(:)*( CST%XCPD+CST%XCPV*ZRVT(:)+CST%XCL*(ZRCT(:)+ZRRT(:)) &
+                                  +CST%XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) )
+  ZTCELSIUS(:) = MAX( ZZT(:)-CST%XTT,-50.0 )
+  ZLSFACT(:) = (CST%XLSTT+(CST%XCPV-CST%XCI)*ZTCELSIUS(:))/ZZW(:) ! L_s/(Pi_ref*C_ph)
+  ZLVFACT(:) = (CST%XLVTT+(CST%XCPV-CST%XCL)*ZTCELSIUS(:))/ZZW(:) ! L_v/(Pi_ref*C_ph)
 !
-  ZZW(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:)) ) ! es_i
-  ZSSI(:) = ZRVT(:)*(ZPRES(:)-ZZW(:))/((XMV/XMD)*ZZW(:)) - 1.0
+  ZZW(:) = EXP( CST%XALPI - CST%XBETAI/ZZT(:) - CST%XGAMI*ALOG(ZZT(:)) ) ! es_i
+  ZSSI(:) = ZRVT(:)*(ZPRES(:)-ZZW(:))/((CST%XMV/CST%XMD)*ZZW(:)) - 1.0
                                                     ! Supersaturation over ice
 !
 !---------------------------------------------------------------------------
@@ -272,7 +231,7 @@ IF( INEGT >= 1 ) THEN
   ZZX(:) = 0.0
   ZZY(:) = 0.0
 !
-  WHERE( ZZT(:)<XTT-5.0 .AND. ZSSI(:)>0.0 )
+  WHERE( ZZT(:)<CST%XTT-5.0 .AND. ZSSI(:)>0.0 )
     ZZY(:) = XNUC_DEP*EXP( XEXSI_DEP*100.*MIN(1.,ZSSI(:))+XEX_DEP)/ZRHODREF(:)
     ZZX(:) = MAX( ZZY(:)-ZINT(:,1) , 0.0 ) ! number of ice crystals formed at this time step #/kg
     ZZW(:) = MIN( XMNU0*ZZX(:) , ZRVT(:) ) ! mass of ice formed at this time step (kg/kg)
@@ -299,7 +258,7 @@ IF( INEGT >= 1 ) THEN
   ZZX(:) = 0.0
   ZZY(:) = 0.0
 !
-  WHERE( ZZT(:)<XTT-2.0 .AND. ZCCT(:)>XCTMIN(2) .AND. ZRCT(:)>XRTMIN(2) )
+  WHERE( ZZT(:)<CST%XTT-2.0 .AND. ZCCT(:)>XCTMIN(2) .AND. ZRCT(:)>XRTMIN(2) )
     ZZY(:) = MIN( XNUC_CON * EXP( XEXTT_CON*ZTCELSIUS(:)+XEX_CON )             &
                                                /ZRHODREF(:) , ZCCT(:) )
     ZZX(:) = MAX( ZZY(:)-ZINT(:,1),0.0 )
@@ -346,3 +305,4 @@ END IF
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_MEYERS_NUCLEATION
+END MODULE MODE_LIMA_MEYERS_NUCLEATION
diff --git a/src/common/micro/mode_lima_nucleation_procs.F90 b/src/common/micro/mode_lima_nucleation_procs.F90
new file mode 100644
index 0000000000000000000000000000000000000000..502d8a3c52e2dd9f4b57e27a66b7051cf96a1244
--- /dev/null
+++ b/src/common/micro/mode_lima_nucleation_procs.F90
@@ -0,0 +1,380 @@
+!MNH_LIC Copyright 2018-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_NUCLEATION_PROCS
+  IMPLICIT NONE
+CONTAINS
+!     #############################################################################
+  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
+!!    -------
+!!      Compute nucleation processes for the time-split version of LIMA
+!!
+!!    AUTHOR
+!!    ------
+!!      B.    Vié        * CNRM *
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original             15/03/2018
+!  M. Leriche     06/2019: missing update of PNFT after CCN hom. ncl.
+!  P. Wautelet 27/02/2020: bugfix: PNFT was not updated after LIMA_CCN_HOM_FREEZING
+!  P. Wautelet 27/02/2020: add Z_TH_HINC variable (for budgets)
+!  P. Wautelet    02/2020: use the new data structures and subroutines for budgets
+!  B. Vie      03/03/2020: use DTHRAD instead of dT/dt in Smax diagnostic computation
+!  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: 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, &
+                            NSV_LIMA_NI, NSV_LIMA_IFN_FREE, NSV_LIMA_IFN_NUCL, NSV_LIMA_IMM_NUCL, NSV_LIMA_HOM_HAZE
+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_PHY, BUDGET_STORE_INIT_PHY, BUDGET_STORE_END_PHY
+
+USE MODE_LIMA_CCN_ACTIVATION, ONLY: LIMA_CCN_ACTIVATION
+USE MODE_LIMA_CCN_HOM_FREEZING, ONLY: LIMA_CCN_HOM_FREEZING
+USE MODE_LIMA_MEYERS_NUCLEATION, ONLY: LIMA_MEYERS_NUCLEATION
+USE MODE_LIMA_PHILLIPS_IFN_NUCLEATION, ONLY: LIMA_PHILLIPS_IFN_NUCLEATION
+USE MODE_LIMA_ICE4_NUCLEATION, ONLY: LIMA_ICE4_NUCLEATION
+!
+!-------------------------------------------------------------------------------
+!
+IMPLICIT NONE
+!
+!-------------------------------------------------------------------------------
+!
+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
+!
+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)    :: PDTHRAD    ! Radiative temperature tendency
+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(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
+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
+!
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCLDFR     ! Cloud fraction
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PICEFR     ! Ice fraction
+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))          :: ZCIT, ZLSFACT, ZRVHENIMR
+!
+integer :: idx, jl
+INTEGER :: JI,JJ
+!
+!-------------------------------------------------------------------------------
+!
+IF ( LACTI .AND. NMOD_CCN >=1 .AND. NMOM_C.GE.2) THEN
+
+  IF (.NOT.LSUBG_COND .AND. .NOT.LSPRO) THEN
+
+    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_PHY(D, TBUDGETS(idx), 'HENU', pnft(:, :, :, jl) * prhodj(:, :, :) / ptstep )
+          idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_acti - 1 + jl
+          call BUDGET_STORE_INIT_PHY(D, TBUDGETS(idx), 'HENU', pnat(:, :, :, jl) * prhodj(:, :, :) / ptstep )
+        end do
+      end if
+    end if
+
+    CALL LIMA_CCN_ACTIVATION( CST,                                      &
+                              PRHODREF, PEXNREF, PPABST, PT, PDTHRAD, PW_NU,    &
+                              PTHT, PRVT, PRCT, PCCT, PRRT, PNFT, PNAT, PCLDFR  )
+    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_PHY(D, TBUDGETS(idx), 'HENU', pnft(:, :, :, jl) * prhodj(:, :, :) / ptstep )
+          idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_acti - 1 + jl
+          call BUDGET_STORE_END_PHY(D, TBUDGETS(idx), 'HENU', pnat(:, :, :, jl) * prhodj(:, :, :) / ptstep )
+        end do
+      end if
+    end if
+
+  END IF
+
+  WHERE(PCLDFR(:,:,:)<1.E-10 .AND. PRCT(:,:,:)>XRTMIN(2) .AND. PCCT(:,:,:)>XCTMIN(2)) PCLDFR(:,:,:)=1.
+
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+IF ( LNUCL .AND. NMOM_I>=2 .AND. .NOT.LMEYERS .AND. NMOD_IFN >= 1 ) 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_PHY(D, TBUDGETS(idx), 'HIND', pift(:, :, :, jl) * prhodj(:, :, :) / ptstep )
+        idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl - 1 + jl
+        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_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_PHY(D, TBUDGETS(idx), 'HINC', pnit(:, :, :, jl) * prhodj(:, :, :) / ptstep )
+      end do
+    end if
+  end if
+
+   CALL LIMA_PHILLIPS_IFN_NUCLEATION (CST, PTSTEP,                                      &
+                                      PRHODREF, PEXNREF, PPABST,                        &
+                                      PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,         &
+                                      PCCT, PCIT, PNAT, PIFT, PINT, PNIT,               &
+                                      Z_TH_HIND, Z_RI_HIND, Z_CI_HIND,                  &
+                                      Z_TH_HINC, Z_RC_HINC, Z_CC_HINC,                  &
+                                      PICEFR                                            )
+  WHERE(PICEFR(:,:,:)<1.E-10 .AND. PRIT(:,:,:)>XRTMIN(4) .AND. PCIT(:,:,:)>XCTMIN(4)) PICEFR(:,:,:)=1.
+!
+  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_PHY(D, TBUDGETS(idx), 'HIND', pift(:, :, :, jl) * prhodj(:, :, :) / ptstep )
+        idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl - 1 + jl
+        call BUDGET_STORE_END_PHY(D, TBUDGETS(idx), 'HIND', pint(:, :, :, jl) * prhodj(:, :, :) / ptstep )
+      end do
+    end if
+
+    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_PHY(D, TBUDGETS(NBUDGET_SV1-1+nsv_lima_nc), 'HINC',  z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
+       end if
+      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_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_PHY(D, TBUDGETS(idx), 'HINC', pnit(:, :, :, jl) * prhodj(:, :, :) / ptstep )
+      end do
+    end if
+  end if
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+IF (LNUCL .AND. NMOM_I>=2 .AND. LMEYERS) THEN
+   CALL LIMA_MEYERS_NUCLEATION (CST, PTSTEP,                                &
+                                PRHODREF, PEXNREF, PPABST,                  &
+                                PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,   &
+                                PCCT, PCIT, PINT,                           &
+                                Z_TH_HIND, Z_RI_HIND, Z_CI_HIND,            &
+                                Z_TH_HINC, Z_RC_HINC, Z_CC_HINC,            &
+                                PICEFR                                      )
+  WHERE(PICEFR(:,:,:)<1.E-10 .AND. PRIT(:,:,:)>XRTMIN(4) .AND. PCIT(:,:,:)>XCTMIN(4)) PICEFR(:,:,:)=1.
+  !
+  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_PHY(D, TBUDGETS(NBUDGET_SV1-1+nsv_lima_ifn_nucl), 'HIND', &
+                               z_ci_hind(:, :, :) * prhodj(:, :, :) / ptstep )
+    end if
+
+    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_PHY(D, TBUDGETS(NBUDGET_SV1-1+nsv_lima_nc), 'HINC',  z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
+       end if
+      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_PHY(D, TBUDGETS(NBUDGET_SV1-1+nsv_lima_ifn_nucl), 'HINC', &
+                               -z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
+    end if
+  end if
+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.
+  !
+  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
+  PRIT(:,:,:)=PRIT(:,:,:)+ZRVHENIMR(:,:,:)
+  PTHT(:,:,:)=PTHT(:,:,:)+ZRVHENIMR(:,:,:)*ZLSFACT(:,:,:)
+  PRVT(:,:,:)=PRVT(:,:,:)-ZRVHENIMR(:,:,:)
+!  Z_TH_HINC=0.
+!  Z_RC_HINC=0.
+!  Z_CC_HINC=0.
+!  !
+!  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_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl), 'HIND', &
+!                               z_ci_hind(:, :, :) * prhodj(:, :, :) / ptstep )
+!    end if
+!
+!    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_PHY(D, TBUDGETS(NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl), 'HINC', &
+!                               -z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
+!    end if
+!  end if
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+IF ( LNUCL .AND. LHHONI .AND. NMOD_CCN >= 1 .AND. NMOM_I.GE.2) THEN
+  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_PHY(D, TBUDGETS(idx), 'HONH', PNFT(:, :, :, jl) * prhodj(:, :, :) / ptstep )
+      end do
+      call BUDGET_STORE_INIT_PHY(D,TBUDGETS(NBUDGET_SV1-1+nsv_lima_hom_haze),'HONH',PNHT(:, :, :)*prhodj(:, :, :)/ptstep)
+    end if
+  end if
+
+  CALL LIMA_CCN_HOM_FREEZING (CST, PRHODREF, PEXNREF, PPABST, PW_NU,    &
+                              PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
+                              PCCT, PCRT, PCIT, PNFT, PNHT,             &
+                              PICEFR                                    )
+  WHERE(PICEFR(:,:,:)<1.E-10 .AND. PRIT(:,:,:)>XRTMIN(4) .AND. PCIT(:,:,:)>XCTMIN(4)) PICEFR(:,:,:)=1.
+!
+  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_PHY(D, TBUDGETS(idx), 'HONH', PNFT(:, :, :, jl) * prhodj(:, :, :) / ptstep )
+      end do
+      call BUDGET_STORE_END_PHY(D,TBUDGETS(NBUDGET_SV1-1+nsv_lima_hom_haze),'HONH',PNHT(:, :, :)*prhodj(:, :, :)/ptstep)
+    end if
+  end if
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE LIMA_NUCLEATION_PROCS
+END MODULE MODE_LIMA_NUCLEATION_PROCS
diff --git a/src/mesonh/micro/lima_phillips_ifn_nucleation.f90 b/src/common/micro/mode_lima_phillips_ifn_nucleation.F90
similarity index 77%
rename from src/mesonh/micro/lima_phillips_ifn_nucleation.f90
rename to src/common/micro/mode_lima_phillips_ifn_nucleation.F90
index 1010555ff86b477d3fd0dcebb638a0b9b0b32959..37d4b321f11f73814c63fb5fd163bd87b9ecf614 100644
--- a/src/mesonh/micro/lima_phillips_ifn_nucleation.f90
+++ b/src/common/micro/mode_lima_phillips_ifn_nucleation.F90
@@ -3,61 +3,17 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!      ########################################
-       MODULE MODI_LIMA_PHILLIPS_IFN_NUCLEATION
-!      ########################################
-!
-INTERFACE
-   SUBROUTINE LIMA_PHILLIPS_IFN_NUCLEATION (PTSTEP,                                   &
-                                            PRHODREF, PEXNREF, PPABST,                &
-                                            PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
-                                            PCCT, PCIT, PNAT, PIFT, PINT, PNIT,       &
-                                            P_TH_HIND, P_RI_HIND, P_CI_HIND,          &
-                                            P_TH_HINC, P_RC_HINC, P_CC_HINC,          &
-                                            PICEFR                                    )
-!
-REAL,                     INTENT(IN)    :: PTSTEP 
-!
-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(INOUT) :: PTHT    ! Theta at time 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    ! Cloud ice m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST    ! Snow/aggregate 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(INOUT) :: PCIT    ! Cloud water conc. at t 
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNAT    ! CCN conc. used for immersion nucl.
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PIFT    ! Free IFN conc.
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PINT    ! Nucleated IFN conc.
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PNIT    ! Nucleated (by immersion) CCN conc.
-!
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: P_TH_HIND
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: P_RI_HIND
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: P_CI_HIND
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: P_TH_HINC
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: P_RC_HINC
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: P_CC_HINC
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PICEFR
-!
-END SUBROUTINE LIMA_PHILLIPS_IFN_NUCLEATION
-END INTERFACE
-END MODULE MODI_LIMA_PHILLIPS_IFN_NUCLEATION
-!
+MODULE MODE_LIMA_PHILLIPS_IFN_NUCLEATION
+  IMPLICIT NONE
+CONTAINS
 !     #################################################################################
-   SUBROUTINE LIMA_PHILLIPS_IFN_NUCLEATION (PTSTEP,                                   &
-                                            PRHODREF, PEXNREF, PPABST,                &
-                                            PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
-                                            PCCT, PCIT, PNAT, PIFT, PINT, PNIT,       &
-                                            P_TH_HIND, P_RI_HIND, P_CI_HIND,          &
-                                            P_TH_HINC, P_RC_HINC, P_CC_HINC,          &
-                                            PICEFR                                    )
+  SUBROUTINE LIMA_PHILLIPS_IFN_NUCLEATION (CST, PTSTEP,                              &
+                                           PRHODREF, PEXNREF, PPABST,                &
+                                           PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
+                                           PCCT, PCIT, PNAT, PIFT, PINT, PNIT,       &
+                                           P_TH_HIND, P_RI_HIND, P_CI_HIND,          &
+                                           P_TH_HINC, P_RC_HINC, P_CC_HINC,          &
+                                           PICEFR                                    )
 !     #################################################################################
 !!
 !!    PURPOSE
@@ -115,10 +71,7 @@ END MODULE MODI_LIMA_PHILLIPS_IFN_NUCLEATION
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_CST,             ONLY : XP00, XRD, XMV, XMD, XCPD, XCPV, XCL, XCI,        &
-                                 XTT, XLSTT, XLVTT, XALPI, XBETAI, XGAMI,          &
-                                 XALPW, XBETAW, XGAMW, XPI
-USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NI, NSV_LIMA_IFN_FREE
+USE MODD_CST,            ONLY: CST_t
 USE MODD_PARAMETERS,      ONLY : JPHEXT, JPVEXT
 USE MODD_PARAM_LIMA,      ONLY : NMOD_IFN, NSPECIE, XFRAC,                         &
                                  NMOD_CCN, NMOD_IMM, NIND_SPECIE, NINDICE_CCN_IMM,  &
@@ -127,13 +80,14 @@ USE MODD_PARAM_LIMA_COLD, ONLY : XMNU0
 
 use mode_tools,           only: Countjv
 
-USE MODI_LIMA_PHILLIPS_INTEG
-USE MODI_LIMA_PHILLIPS_REF_SPECTRUM
+USE MODE_LIMA_PHILLIPS_INTEG, ONLY : LIMA_PHILLIPS_INTEG
+USE MODE_LIMA_PHILLIPS_REF_SPECTRUM, ONLY : LIMA_PHILLIPS_REF_SPECTRUM
 
 IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
+TYPE(CST_t),              INTENT(IN)    :: CST
 REAL,                     INTENT(IN)    :: PTSTEP 
 !
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF! Reference density
@@ -240,12 +194,12 @@ IKE=SIZE(PTHT,3) - JPVEXT
 !
 ! Temperature
 !
-ZT(:,:,:)  = PTHT(:,:,:) * ( PPABST(:,:,:)/XP00 ) ** (XRD/XCPD)
+ZT(:,:,:)  = PTHT(:,:,:) * ( PPABST(:,:,:)/CST%XP00 ) ** (CST%XRD/CST%XCPD)
 !
 ! Saturation over ice
 !
-ZW(:,:,:) = EXP( XALPI - XBETAI/ZT(:,:,:) - XGAMI*ALOG(ZT(:,:,:) ) )
-ZW(:,:,:) = PRVT(:,:,:)*( PPABST(:,:,:)-ZW(:,:,:) ) / ( (XMV/XMD) * ZW(:,:,:) )
+ZW(:,:,:) = EXP( CST%XALPI - CST%XBETAI/ZT(:,:,:) - CST%XGAMI*ALOG(ZT(:,:,:) ) )
+ZW(:,:,:) = PRVT(:,:,:)*( PPABST(:,:,:)-ZW(:,:,:) ) / ( (CST%XMV/CST%XMD) * ZW(:,:,:) )
 !
 !
 !-------------------------------------------------------------------------------
@@ -256,7 +210,7 @@ ZW(:,:,:) = PRVT(:,:,:)*( PPABST(:,:,:)-ZW(:,:,:) ) / ( (XMV/XMD) * ZW(:,:,:) )
 !
 !
 GNEGT(:,:,:) = .FALSE.
-GNEGT(IIB:IIE,IJB:IJE,IKB:IKE) = ZT(IIB:IIE,IJB:IJE,IKB:IKE)<XTT-2.0 .AND. &
+GNEGT(IIB:IIE,IJB:IJE,IKB:IKE) = ZT(IIB:IIE,IJB:IJE,IKB:IKE)<CST%XTT-2.0 .AND. &
                                  ZW(IIB:IIE,IJB:IJE,IKB:IKE)>0.95 
 !
 INEGT = COUNTJV( GNEGT(:,:,:),I1(:),I2(:),I3(:))
@@ -334,17 +288,17 @@ IF (INEGT > 0) THEN
 !	        -----------------------------------------
 !
 !
-   ZTCELSIUS(:) = ZZT(:)-XTT                                    ! T [°C]
-   ZZW(:)  = ZEXNREF(:)*( XCPD+XCPV*ZRVT(:)+XCL*(ZRCT(:)+ZRRT(:)) &
-        +XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) )
-   ZLSFACT(:) = (XLSTT+(XCPV-XCI)*ZTCELSIUS(:))/ZZW(:)          ! L_s/(Pi_ref*C_ph)
-   ZLVFACT(:) = (XLVTT+(XCPV-XCL)*ZTCELSIUS(:))/ZZW(:)          ! L_v/(Pi_ref*C_ph)
+   ZTCELSIUS(:) = ZZT(:)-CST%XTT                                    ! T [°C]
+   ZZW(:)  = ZEXNREF(:)*( CST%XCPD+CST%XCPV*ZRVT(:)+CST%XCL*(ZRCT(:)+ZRRT(:)) &
+        +CST%XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) )
+   ZLSFACT(:) = (CST%XLSTT+(CST%XCPV-CST%XCI)*ZTCELSIUS(:))/ZZW(:)          ! L_s/(Pi_ref*C_ph)
+   ZLVFACT(:) = (CST%XLVTT+(CST%XCPV-CST%XCL)*ZTCELSIUS(:))/ZZW(:)          ! L_v/(Pi_ref*C_ph)
 !
-   ZZW(:)  = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) ) ! es_i
-   ZSI(:)  = ZRVT(:)*(ZPRES(:)-ZZW(:))/((XMV/XMD)*ZZW(:))       ! Saturation over ice
+   ZZW(:)  = EXP( CST%XALPI - CST%XBETAI/ZZT(:) - CST%XGAMI*ALOG(ZZT(:) ) ) ! es_i
+   ZSI(:)  = ZRVT(:)*(ZPRES(:)-ZZW(:))/((CST%XMV/CST%XMD)*ZZW(:))       ! Saturation over ice
 !
-   ZZY(:)  = EXP( XALPW - XBETAW/ZZT(:) - XGAMW*ALOG(ZZT(:) ) ) ! es_w
-   ZSW(:)  = ZRVT(:)*(ZPRES(:)-ZZY(:))/((XMV/XMD)*ZZY(:))       ! Saturation over water
+   ZZY(:)  = EXP( CST%XALPW - CST%XBETAW/ZZT(:) - CST%XGAMW*ALOG(ZZT(:) ) ) ! es_w
+   ZSW(:)  = ZRVT(:)*(ZPRES(:)-ZZY(:))/((CST%XMV/CST%XMD)*ZZY(:))       ! Saturation over water
 !
    ZSI_W(:)= ZZY(:)/ZZW(:)     ! Saturation over ice at water saturation: es_w/es_i
 !
@@ -373,12 +327,12 @@ IF (INEGT > 0) THEN
 !
 ! Computation of the reference activity spectrum ( ZZY = N_{IN,1,*} )
 !
-   CALL LIMA_PHILLIPS_REF_SPECTRUM(ZZT, ZSI, ZSI_W, ZZY)
+   CALL LIMA_PHILLIPS_REF_SPECTRUM(CST, ZZT, ZSI, ZSI_W, ZZY)
 !
 ! For each aerosol species (DM1, DM2, BC, O), compute the fraction that may be activated
 ! Z_FRAC_ACT(INEGT,NSPECIE) = fraction of each species that may be activated
 !
-   CALL LIMA_PHILLIPS_INTEG(ZZT, ZSI, ZSI0, ZSW, ZZY, Z_FRAC_ACT)
+   CALL LIMA_PHILLIPS_INTEG(CST, ZZT, ZSI, ZSI0, ZSW, ZZY, Z_FRAC_ACT)
 !
 !
 !-------------------------------------------------------------------------------
@@ -510,3 +464,4 @@ END IF ! INEGT > 0
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_PHILLIPS_IFN_NUCLEATION
+END MODULE MODE_LIMA_PHILLIPS_IFN_NUCLEATION
diff --git a/src/arome/micro/lima_phillips_integ.F90 b/src/common/micro/mode_lima_phillips_integ.F90
similarity index 78%
rename from src/arome/micro/lima_phillips_integ.F90
rename to src/common/micro/mode_lima_phillips_integ.F90
index 3af3048c6be9e97c9e7f21db12995e446ec2c802..210dd08f9009aee84bcec0a9b8997d1cbe681e46 100644
--- a/src/arome/micro/lima_phillips_integ.F90
+++ b/src/common/micro/mode_lima_phillips_integ.F90
@@ -1,23 +1,8 @@
-!      ###############################
-       MODULE MODI_LIMA_PHILLIPS_INTEG
-!      ###############################
-!
-INTERFACE
-      SUBROUTINE LIMA_PHILLIPS_INTEG (ZZT, ZSI, ZSI0, ZSW, ZZY, Z_FRAC_ACT)
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: ZZT
-REAL, DIMENSION(:),   INTENT(IN)    :: ZSI
-REAL, DIMENSION(:,:), INTENT(IN)    :: ZSI0
-REAL, DIMENSION(:),   INTENT(IN)    :: ZSW
-REAL, DIMENSION(:),   INTENT(IN)    :: ZZY
-REAL, DIMENSION(:,:), INTENT(INOUT) :: Z_FRAC_ACT
-!
-END SUBROUTINE LIMA_PHILLIPS_INTEG
-END INTERFACE
-END MODULE MODI_LIMA_PHILLIPS_INTEG
-!
+MODULE MODE_LIMA_PHILLIPS_INTEG
+  IMPLICIT NONE
+CONTAINS
 !     ######################################################################
-      SUBROUTINE LIMA_PHILLIPS_INTEG (ZZT, ZSI, ZSI0, ZSW, ZZY, Z_FRAC_ACT)
+  SUBROUTINE LIMA_PHILLIPS_INTEG (CST, ZZT, ZSI, ZSI0, ZSW, ZZY, Z_FRAC_ACT)
 !     ######################################################################
 !!
 !!    PURPOSE
@@ -48,17 +33,18 @@ END MODULE MODI_LIMA_PHILLIPS_INTEG
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_CST,             ONLY : XTT, XPI
+USE MODD_CST,            ONLY: CST_t
 USE MODD_PARAM_LIMA,      ONLY : XMDIAM_IFN, XSIGMA_IFN, NSPECIE, XFRAC_REF, &
                                  XH, XAREA1, XGAMMA, XABSCISS, XWEIGHT, NDIAM,     &
                                  XT0, XDT0, XDSI0, XSW0, XTX1, XTX2
-USE MODI_LIMA_FUNCTIONS,  ONLY : DELTA, DELTA_VEC
+USE MODE_LIMA_FUNCTIONS,  ONLY : DELTA, DELTA_VEC
 USE MODI_GAMMA_INC
 !
 IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
+TYPE(CST_t),              INTENT(IN)    :: CST
 REAL, DIMENSION(:),   INTENT(IN)    :: ZZT
 REAL, DIMENSION(:),   INTENT(IN)    :: ZSI
 REAL, DIMENSION(:,:), INTENT(IN)    :: ZSI0
@@ -105,15 +91,15 @@ DO JSPECIE = 1, NSPECIE        ! = 4 = {DM1, DM2, BC, O} respectively
 ! For T warmer than -35°C, the integration is approximated with µ_X << 1
 ! Error function : GAMMA_INC(1/2, x**2) = ERF(x) !!! for x>=0 !!!
 !   
-!   WHERE (ZZT(:)>(XTT-35.) .AND. ZEMBRYO(:)>1.0E-8)   
-!      ZZX(:) = ZZX(:) + ZEMBRYO(:) * XPI * (XMDIAM_IFN(JSPECIE))**2 / 2.0           &
+!   WHERE (ZZT(:)>(CST%XTT-35.) .AND. ZEMBRYO(:)>1.0E-8)   
+!      ZZX(:) = ZZX(:) + ZEMBRYO(:) * CST%XPI * (XMDIAM_IFN(JSPECIE))**2 / 2.0           &
 !           * EXP(2*(LOG(XSIGMA_IFN(JSPECIE)))**2)                                   &
 !           * (1.0+GAMMA_INC(0.5,(SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE))-XB)**2))     
 !   END WHERE
 
    DO JL = 1, SIZE(ZZT)
-      IF (ZZT(JL)>(XTT-35.) .AND. ZEMBRYO(JL)>1.0E-8) THEN
-         ZZX(JL) = ZZX(JL) + ZEMBRYO(JL) * XPI * (XMDIAM_IFN(JSPECIE))**2 / 2.0        &
+      IF (ZZT(JL)>(CST%XTT-35.) .AND. ZEMBRYO(JL)>1.0E-8) THEN
+         ZZX(JL) = ZZX(JL) + ZEMBRYO(JL) * CST%XPI * (XMDIAM_IFN(JSPECIE))**2 / 2.0        &
               * EXP(2*(LOG(XSIGMA_IFN(JSPECIE)))**2)                                   &
               * (1.0+SIGN(1.,SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE))-XB)*GAMMA_INC(0.5,(SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE))-XB)**2))     
       END IF
@@ -124,12 +110,12 @@ DO JSPECIE = 1, NSPECIE        ! = 4 = {DM1, DM2, BC, O} respectively
 ! quadrature method and integration between 0 and 0.1 uses e(x) ~ 1+x+O(x**2)
 ! Beware : here, weights are normalized : XWEIGHT = wi/sqrt(pi)
 !
-   GINTEG(:) = ZZT(:)<=(XTT-35.) .AND. ZSI(:)>1.0 .AND. ZEMBRYO(:)>1.0E-8
+   GINTEG(:) = ZZT(:)<=(CST%XTT-35.) .AND. ZSI(:)>1.0 .AND. ZEMBRYO(:)>1.0E-8
 !
    DO JL = 1, NDIAM
       DO JL2 = 1, SIZE(GINTEG)
          IF (GINTEG(JL2)) THEN
-            ZZX(JL2) = ZZX(JL2) - XWEIGHT(JL)*EXP(-ZEMBRYO(JL2)*XPI*(XMDIAM_IFN(JSPECIE))**2 & 
+            ZZX(JL2) = ZZX(JL2) - XWEIGHT(JL)*EXP(-ZEMBRYO(JL2)*CST%XPI*(XMDIAM_IFN(JSPECIE))**2 & 
                  * EXP(2.0*SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE)) * XABSCISS(JL)) ) 
          END IF
       ENDDO
@@ -137,7 +123,7 @@ DO JSPECIE = 1, NSPECIE        ! = 4 = {DM1, DM2, BC, O} respectively
 !
 !   DO JL2 = 1, SIZE(GINTEG)
 !      IF (GINTEG(JL2)) THEN
-!         ZZX(JL2) = ZZX(JL2) + 0.5* XPI*ZEMBRYO(JL2)*(XMDIAM_IFN(JSPECIE))**2                &
+!         ZZX(JL2) = ZZX(JL2) + 0.5* CST%XPI*ZEMBRYO(JL2)*(XMDIAM_IFN(JSPECIE))**2                &
 !              * (1.0-( 1.0-GAMMA_INC(0.5,(SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE))-XB)**2))  &
 !              * EXP( 2.0*(LOG(XSIGMA_IFN(JSPECIE)))**2)  )
 !      END IF
@@ -145,7 +131,7 @@ DO JSPECIE = 1, NSPECIE        ! = 4 = {DM1, DM2, BC, O} respectively
    DO JL2 = 1, SIZE(GINTEG)
       IF (GINTEG(JL2)) THEN
          ZZX(JL2) = 1 + ZZX(JL2)  &
-              - ( 0.5* XPI*ZEMBRYO(JL2)*(XMDIAM_IFN(JSPECIE))**2 * EXP( 2.0*(LOG(XSIGMA_IFN(JSPECIE)))**2)   &
+              - ( 0.5* CST%XPI*ZEMBRYO(JL2)*(XMDIAM_IFN(JSPECIE))**2 * EXP( 2.0*(LOG(XSIGMA_IFN(JSPECIE)))**2)   &
               * ( 1.0-SIGN(1.,SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE))-XB)*GAMMA_INC(0.5,(SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE))-XB)**2)) )
       END IF
    ENDDO
@@ -161,3 +147,4 @@ DO JSPECIE = 1, NSPECIE        ! = 4 = {DM1, DM2, BC, O} respectively
 ENDDO
 !
 END SUBROUTINE LIMA_PHILLIPS_INTEG
+END MODULE MODE_LIMA_PHILLIPS_INTEG
diff --git a/src/arome/micro/lima_phillips_ref_spectrum.F90 b/src/common/micro/mode_lima_phillips_ref_spectrum.F90
similarity index 76%
rename from src/arome/micro/lima_phillips_ref_spectrum.F90
rename to src/common/micro/mode_lima_phillips_ref_spectrum.F90
index a49a998bd0cacca500e97c68598e35b8af3b9c8e..b1492d450bab9ae445a17bc7be1ec4594f091600 100644
--- a/src/arome/micro/lima_phillips_ref_spectrum.F90
+++ b/src/common/micro/mode_lima_phillips_ref_spectrum.F90
@@ -1,21 +1,8 @@
-!      ######################################
-       MODULE MODI_LIMA_PHILLIPS_REF_SPECTRUM
-!      ######################################
-!
-INTERFACE
-      SUBROUTINE LIMA_PHILLIPS_REF_SPECTRUM (ZZT, ZSI, ZSI_W, ZZY)
-!
-REAL, DIMENSION(:), INTENT(IN)    :: ZZT    ! Temperature
-REAL, DIMENSION(:), INTENT(IN)    :: ZSI    ! Saturation over ice
-REAL, DIMENSION(:), INTENT(IN)    :: ZSI_W  ! Saturation over ice at water sat.
-REAL, DIMENSION(:), INTENT(INOUT) :: ZZY    ! Reference activity spectrum
-!
-END SUBROUTINE LIMA_PHILLIPS_REF_SPECTRUM
-END INTERFACE
-END MODULE MODI_LIMA_PHILLIPS_REF_SPECTRUM
-!
+MODULE MODE_LIMA_PHILLIPS_REF_SPECTRUM
+  IMPLICIT NONE
+CONTAINS
 !     ######################################################################
-      SUBROUTINE LIMA_PHILLIPS_REF_SPECTRUM (ZZT, ZSI, ZSI_W, ZZY)
+  SUBROUTINE LIMA_PHILLIPS_REF_SPECTRUM (CST, ZZT, ZSI, ZSI_W, ZZY)
 !     ######################################################################
 !!
 !!    PURPOSE
@@ -46,14 +33,15 @@ END MODULE MODI_LIMA_PHILLIPS_REF_SPECTRUM
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_CST,             ONLY : XTT
+USE MODD_CST,            ONLY: CST_t
 USE MODD_PARAM_LIMA,      ONLY : XGAMMA, XRHO_CFDC
-USE MODI_LIMA_FUNCTIONS,  ONLY : RECT, DELTA
+USE MODE_LIMA_FUNCTIONS,  ONLY : RECT, DELTA
 !
 IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
+TYPE(CST_t),              INTENT(IN)    :: CST
 REAL, DIMENSION(:), INTENT(IN)    :: ZZT    ! Temperature
 REAL, DIMENSION(:), INTENT(IN)    :: ZSI    ! Saturation over ice
 REAL, DIMENSION(:), INTENT(IN)    :: ZSI_W  ! Saturation over ice at water sat.
@@ -93,7 +81,7 @@ WHERE( ZSI(:)>1.0 )
 !
    ZZY(:)  =1000.*XGAMMA/XRHO_CFDC                  &
         * ( EXP(12.96*(MIN(ZSI2(:),7.)-1.1)) )**0.3          &
-        * RECT(1.,0.,ZZT(:),(XTT-80.),(XTT-35.))
+        * RECT(1.,0.,ZZT(:),(CST%XTT-80.),(CST%XTT-35.))
 !
 !* -35 C < T <= -25 C (in Appendix A) 
 !
@@ -106,13 +94,13 @@ WHERE( ZSI(:)>1.0 )
 !
    ZMAX(:) =1000.*XGAMMA/XRHO_CFDC                  &
         * ( EXP(12.96*(ZSI_W(:)-1.1)) )**0.3        &
-        * RECT(1.,0.,ZZT(:),(XTT-35.),(XTT-30.))
+        * RECT(1.,0.,ZZT(:),(CST%XTT-35.),(CST%XTT-30.))
 !
 !* -30 C < T <= -25 C
 !
    ZMAX(:) = ZMAX(:) +1000.*XPSI                    &
         * EXP( 12.96*(ZSI_W(:)-1.0)-0.639 )         &
-        * RECT(1.,0.,ZZT(:),(XTT-30.),(XTT-25.))
+        * RECT(1.,0.,ZZT(:),(CST%XTT-30.),(CST%XTT-25.))
    Z1(:)   = MIN(ZZY1(:), ZMAX(:)) 
    Z2(:)   = MIN(ZZY2(:), ZMAX(:)) 
 !
@@ -120,11 +108,11 @@ WHERE( ZSI(:)>1.0 )
 !
    ZZY(:)  = ZZY(:) + 1000.*XPSI                    &
         * EXP( 12.96*(MIN(ZSI2(:),7.)-1.0)-0.639 )           &
-        * RECT(1.,0.,ZZT(:),(XTT-25.),(XTT-2.))
+        * RECT(1.,0.,ZZT(:),(CST%XTT-25.),(CST%XTT-2.))
 END WHERE
 !
 WHERE (Z2(:)>0.0 .AND. Z1(:)>0.0)
-   ZMOY(:) = Z2(:)*(Z1(:)/Z2(:))**DELTA(1.,0.,ZZT(:),(XTT-35.),(XTT-25.))
+   ZMOY(:) = Z2(:)*(Z1(:)/Z2(:))**DELTA(1.,0.,ZZT(:),(CST%XTT-35.),(CST%XTT-25.))
    ZZY(:)  = ZZY(:) + MIN(ZMOY(:),ZMAX(:))  ! N_{IN,1,*}
 END WHERE
 !
@@ -136,3 +124,4 @@ DEALLOCATE(Z1)
 DEALLOCATE(Z2)
 !
 END SUBROUTINE LIMA_PHILLIPS_REF_SPECTRUM
+END MODULE MODE_LIMA_PHILLIPS_REF_SPECTRUM
diff --git a/src/mesonh/micro/lima_rain_accr_snow.f90 b/src/common/micro/mode_lima_rain_accr_snow.F90
similarity index 87%
rename from src/mesonh/micro/lima_rain_accr_snow.f90
rename to src/common/micro/mode_lima_rain_accr_snow.F90
index a63ac24a4b9c776d316c18074682e61dddff53ed..66f06a67fe17542a7f11409800e09a9ea9f75d8e 100644
--- a/src/mesonh/micro/lima_rain_accr_snow.f90
+++ b/src/common/micro/mode_lima_rain_accr_snow.F90
@@ -3,47 +3,14 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!      #################################
-       MODULE MODI_LIMA_RAIN_ACCR_SNOW
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_RAIN_ACCR_SNOW (PTSTEP, LDCOMPUTE,                                         &
-                                   PRHODREF, PT,                                              &
-                                   PRRT, PCRT, PRST, PCST, PLBDR, PLBDS, PLVFACT, PLSFACT,    &
-                                   P_TH_ACC, P_RR_ACC, P_CR_ACC, P_RS_ACC, P_CS_ACC, P_RG_ACC )
-!
-REAL,                 INTENT(IN)    :: PTSTEP 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PT   ! 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT    ! Rain mr at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCRT    ! Rain C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST    ! Snow mr at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCST    ! Snow C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLVFACT ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT ! 
-!
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_TH_ACC
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_RR_ACC
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_CR_ACC
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_RS_ACC
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_CS_ACC
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_RG_ACC
-!
-END SUBROUTINE LIMA_RAIN_ACCR_SNOW
-END INTERFACE
-END MODULE MODI_LIMA_RAIN_ACCR_SNOW
-!
+MODULE MODE_LIMA_RAIN_ACCR_SNOW
+  IMPLICIT NONE
+CONTAINS
 !     ###################################################################################
-      SUBROUTINE LIMA_RAIN_ACCR_SNOW (PTSTEP, LDCOMPUTE,                                         &
-                                      PRHODREF, PT,                                              &
-                                      PRRT, PCRT, PRST, PCST, PLBDR, PLBDS, PLVFACT, PLSFACT,    &
-                                      P_TH_ACC, P_RR_ACC, P_CR_ACC, P_RS_ACC, P_CS_ACC, P_RG_ACC )
+  SUBROUTINE LIMA_RAIN_ACCR_SNOW (PTSTEP, LDCOMPUTE,                                         &
+                                  PRHODREF, PT,                                              &
+                                  PRRT, PCRT, PRST, PCST, PLBDR, PLBDS, PLVFACT, PLSFACT,    &
+                                  P_TH_ACC, P_RR_ACC, P_CR_ACC, P_RS_ACC, P_CS_ACC, P_RG_ACC )
 !     ###################################################################################
 !
 !!    PURPOSE
@@ -398,3 +365,4 @@ CONTAINS
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_RAIN_ACCR_SNOW
+END MODULE MODE_LIMA_RAIN_ACCR_SNOW
diff --git a/src/mesonh/micro/lima_rain_evaporation.f90 b/src/common/micro/mode_lima_rain_evaporation.F90
similarity index 66%
rename from src/mesonh/micro/lima_rain_evaporation.f90
rename to src/common/micro/mode_lima_rain_evaporation.F90
index c7211f2fcd62960a43373cb63f19c38314ea6d0f..86e59a8d7778eba2ba80b4263a1d9edea2980a3f 100644
--- a/src/mesonh/micro/lima_rain_evaporation.f90
+++ b/src/common/micro/mode_lima_rain_evaporation.F90
@@ -3,48 +3,15 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!      ##########################
-       MODULE MODI_LIMA_RAIN_EVAPORATION
-!      ##########################
-!
-INTERFACE
-      SUBROUTINE LIMA_RAIN_EVAPORATION (PTSTEP, LDCOMPUTE,                          &
-                                        PRHODREF, PT, PLV, PLVFACT, PEVSAT, PRVSAT, &
-                                        PRVT, PRCT, PRRT, PCRT, PLBDR,              &
-                                        P_TH_EVAP, P_RR_EVAP, P_CR_EVAP,            &
-                                        PEVAP3D                                     )
-!
-REAL,                 INTENT(IN)    :: PTSTEP     ! Time step
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE  !
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF   ! Reference density
-REAL, DIMENSION(:),   INTENT(IN)    :: PT         ! Temperature
-REAL, DIMENSION(:),   INTENT(IN)    :: PLV        ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLVFACT    !
-REAL, DIMENSION(:),   INTENT(IN)    :: PEVSAT     !
-REAL, DIMENSION(:),   INTENT(IN)    :: PRVSAT     !
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRVT       ! Water vapor m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT       ! Cloud water m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT       ! Rain water m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCRT       ! Rain water conc at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR     ! Lambda(rain)
-!
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_TH_EVAP
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_RR_EVAP
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_CR_EVAP
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PEVAP3D    ! Rain evap profile
-!
-END SUBROUTINE LIMA_RAIN_EVAPORATION
-END INTERFACE
-END MODULE MODI_LIMA_RAIN_EVAPORATION
+MODULE MODE_LIMA_RAIN_EVAPORATION
+  IMPLICIT NONE
+CONTAINS
 !     ###############################################################################
-      SUBROUTINE LIMA_RAIN_EVAPORATION (PTSTEP, LDCOMPUTE,                          &
-                                        PRHODREF, PT, PLV, PLVFACT, PEVSAT, PRVSAT, &
-                                        PRVT, PRCT, PRRT, PCRT, PLBDR,              &
-                                        P_TH_EVAP, P_RR_EVAP, P_CR_EVAP,            &
-                                        PEVAP3D                                     )
+  SUBROUTINE LIMA_RAIN_EVAPORATION (PTSTEP, LDCOMPUTE,                          &
+                                    PRHODREF, PT, PLV, PLVFACT, PEVSAT, PRVSAT, &
+                                    PRVT, PRCT, PRRT, PCRT, PLBDR,              &
+                                    P_TH_EVAP, P_RR_EVAP, P_CR_EVAP,            &
+                                    PEVAP3D                                     )
 !     ###############################################################################
 !
 !!
@@ -168,3 +135,4 @@ END IF
 !-----------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_RAIN_EVAPORATION
+END MODULE MODE_LIMA_RAIN_EVAPORATION
diff --git a/src/mesonh/micro/lima_rain_freezing.f90 b/src/common/micro/mode_lima_rain_freezing.F90
similarity index 65%
rename from src/mesonh/micro/lima_rain_freezing.f90
rename to src/common/micro/mode_lima_rain_freezing.F90
index a6c9504a1cef696a5003a099c293a41060ed4fa7..b3bee2145b48b566fd0673e947a804fe0f37a8d4 100644
--- a/src/mesonh/micro/lima_rain_freezing.f90
+++ b/src/common/micro/mode_lima_rain_freezing.F90
@@ -3,44 +3,14 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!      #################################
-       MODULE MODI_LIMA_RAIN_FREEZING
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_RAIN_FREEZING (LDCOMPUTE,                                             &
-                                  PRHODREF, PT, PLVFACT, PLSFACT,                        &
-                                  PRRT, PCRT, PRIT, PCIT, PLBDR,                         &
-                                  P_TH_CFRZ, P_RR_CFRZ, P_CR_CFRZ, P_RI_CFRZ, P_CI_CFRZ  )
-!
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF ! Reference Exner function
-REAL, DIMENSION(:),   INTENT(IN)    :: PT       !
-REAL, DIMENSION(:),   INTENT(IN)    :: PLVFACT  !
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT  !
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCRT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR   ! 
-!
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_TH_CFRZ
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_RR_CFRZ
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_CR_CFRZ
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_RI_CFRZ
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_CI_CFRZ
-!
-END SUBROUTINE LIMA_RAIN_FREEZING
-END INTERFACE
-END MODULE MODI_LIMA_RAIN_FREEZING
-!
+MODULE MODE_LIMA_RAIN_FREEZING
+  IMPLICIT NONE
+CONTAINS
 !     #######################################################################################
-      SUBROUTINE LIMA_RAIN_FREEZING (LDCOMPUTE,                                             &
-                                     PRHODREF, PT, PLVFACT, PLSFACT,                        &
-                                     PRRT, PCRT, PRIT, PCIT, PLBDR,                         &
-                                     P_TH_CFRZ, P_RR_CFRZ, P_CR_CFRZ, P_RI_CFRZ, P_CI_CFRZ  )
+  SUBROUTINE LIMA_RAIN_FREEZING (LDCOMPUTE,                                             &
+                                 PRHODREF, PT, PLVFACT, PLSFACT,                        &
+                                 PRRT, PCRT, PRIT, PCIT, PLBDR,                         &
+                                 P_TH_CFRZ, P_RR_CFRZ, P_CR_CFRZ, P_RI_CFRZ, P_CI_CFRZ  )
 !     #######################################################################################
 !
 !!    PURPOSE
@@ -133,3 +103,4 @@ END WHERE
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_RAIN_FREEZING
+END MODULE MODE_LIMA_RAIN_FREEZING
diff --git a/src/mesonh/micro/lima_raindrop_shattering_freezing.f90 b/src/common/micro/mode_lima_raindrop_shattering_freezing.F90
similarity index 74%
rename from src/mesonh/micro/lima_raindrop_shattering_freezing.f90
rename to src/common/micro/mode_lima_raindrop_shattering_freezing.F90
index dc7c14066214dfb589ad8428291dbc1c9262706d..43f20e08f1825fe23736064c7fb91e1c1694c8ad 100644
--- a/src/mesonh/micro/lima_raindrop_shattering_freezing.f90
+++ b/src/common/micro/mode_lima_raindrop_shattering_freezing.F90
@@ -3,41 +3,15 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-------------------------------------------------------------------------------
-!      #############################################
-       MODULE MODI_LIMA_RAINDROP_SHATTERING_FREEZING
-!      #############################################
-!
-INTERFACE
-   SUBROUTINE LIMA_RAINDROP_SHATTERING_FREEZING (LDCOMPUTE,                    &
-                                                 PRHODREF,                     &
-                                                 PRRT, PCRT, PRIT, PCIT, PRGT, &
-                                                 PLBDR,                        &
-                                                 P_RI_RDSF, P_CI_RDSF          )
-!
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT
-REAL, DIMENSION(:),   INTENT(IN)    :: PCRT
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT
-REAL, DIMENSION(:),   INTENT(IN)    :: PRGT
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDR 
-!
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_RI_RDSF
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_CI_RDSF
-!
-END SUBROUTINE LIMA_RAINDROP_SHATTERING_FREEZING
-END INTERFACE
-END MODULE MODI_LIMA_RAINDROP_SHATTERING_FREEZING
-!
+MODULE MODE_LIMA_RAINDROP_SHATTERING_FREEZING
+  IMPLICIT NONE
+CONTAINS
 !     #######################################################################
-      SUBROUTINE LIMA_RAINDROP_SHATTERING_FREEZING (LDCOMPUTE,                    &
-                                                    PRHODREF,                     &
-                                                    PRRT, PCRT, PRIT, PCIT, PRGT, &
-                                                    PLBDR,                        &
-                                                    P_RI_RDSF, P_CI_RDSF          )
+  SUBROUTINE LIMA_RAINDROP_SHATTERING_FREEZING (LDCOMPUTE,                    &
+                                                PRHODREF,                     &
+                                                PRRT, PCRT, PRIT, PCIT, PRGT, &
+                                                PLBDR,                        &
+                                                P_RI_RDSF, P_CI_RDSF          )
 !     #######################################################################
 !
 !!    PURPOSE
@@ -157,3 +131,4 @@ ENDIF
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_RAINDROP_SHATTERING_FREEZING
+END MODULE MODE_LIMA_RAINDROP_SHATTERING_FREEZING
diff --git a/src/mesonh/micro/lima_read_xker_gweth.f90 b/src/common/micro/mode_lima_read_xker_gweth.F90
similarity index 97%
rename from src/mesonh/micro/lima_read_xker_gweth.f90
rename to src/common/micro/mode_lima_read_xker_gweth.F90
index 25a567ec83399fb73d1774df9bacf5d879b67240..b0a514a0ba2fce4e6724da3ed87984e1d1496e74 100644
--- a/src/mesonh/micro/lima_read_xker_gweth.f90
+++ b/src/common/micro/mode_lima_read_xker_gweth.F90
@@ -3,49 +3,14 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 microph 2006/05/18 13:07:25
-!-----------------------------------------------------------------
-!     ###########################
-      MODULE MODI_LIMA_READ_XKER_GWETH
-!     ###########################
-!
-INTERFACE
-      SUBROUTINE LIMA_READ_XKER_GWETH (KWETLBDAH,KWETLBDAG,KND,                   &
-                    PALPHAH,PNUH,PALPHAG,PNUG,PEHG,PBG,PCH,PDH,PCG,PDG,      &
-                    PWETLBDAH_MAX,PWETLBDAG_MAX,PWETLBDAH_MIN,PWETLBDAG_MIN, &
-                    PFDINFTY,PKER_GWETH                                      )
-!
-INTEGER, INTENT(OUT) :: KND,KWETLBDAH,KWETLBDAG
-REAL,    INTENT(OUT) :: PALPHAH
-REAL,    INTENT(OUT) :: PNUH
-REAL,    INTENT(OUT) :: PALPHAG
-REAL,    INTENT(OUT) :: PNUG
-REAL,    INTENT(OUT) :: PEHG
-REAL,    INTENT(OUT) :: PBG
-REAL,    INTENT(OUT) :: PCH
-REAL,    INTENT(OUT) :: PDH
-REAL,    INTENT(OUT) :: PCG
-REAL,    INTENT(OUT) :: PDG
-REAL,    INTENT(OUT) :: PWETLBDAH_MAX
-REAL,    INTENT(OUT) :: PWETLBDAG_MAX
-REAL,    INTENT(OUT) :: PWETLBDAH_MIN
-REAL,    INTENT(OUT) :: PWETLBDAG_MIN
-REAL,    INTENT(OUT) :: PFDINFTY
-REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PKER_GWETH 
-!
-END SUBROUTINE LIMA_READ_XKER_GWETH
-!
-END INTERFACE
-!
-END MODULE MODI_LIMA_READ_XKER_GWETH
+MODULE MODE_LIMA_READ_XKER_GWETH
+  IMPLICIT NONE
+CONTAINS
 !     ########################################################################
-      SUBROUTINE LIMA_READ_XKER_GWETH (KWETLBDAH,KWETLBDAG,KND,                   &
-                    PALPHAH,PNUH,PALPHAG,PNUG,PEHG,PBG,PCH,PDH,PCG,PDG,      &
-                    PWETLBDAH_MAX,PWETLBDAG_MAX,PWETLBDAH_MIN,PWETLBDAG_MIN, &
-                    PFDINFTY,PKER_GWETH                                      )
+  SUBROUTINE LIMA_READ_XKER_GWETH (KWETLBDAH,KWETLBDAG,KND,                                 &
+                                   PALPHAH,PNUH,PALPHAG,PNUG,PEHG,PBG,PCH,PDH,PCG,PDG,      &
+                                   PWETLBDAH_MAX,PWETLBDAG_MAX,PWETLBDAH_MIN,PWETLBDAG_MIN, &
+                                   PFDINFTY,PKER_GWETH                                      )
 !     ########################################################################
 !
 !!****  * * - initialize the kernels for the graupel-hail wet growth process
@@ -1735,3 +1700,4 @@ PKER_GWETH( 40, 40) =  0.197923E-01
 END IF
 !
 END SUBROUTINE LIMA_READ_XKER_GWETH
+END MODULE MODE_LIMA_READ_XKER_GWETH
diff --git a/src/mesonh/micro/lima_read_xker_raccs.f90 b/src/common/micro/mode_lima_read_xker_raccs.F90
similarity index 98%
rename from src/mesonh/micro/lima_read_xker_raccs.f90
rename to src/common/micro/mode_lima_read_xker_raccs.F90
index 5a75adf255339c49ec3c786f1d70c08083274e16..55afa459085921cb76b02b6471ce22c7da2a5612 100644
--- a/src/mesonh/micro/lima_read_xker_raccs.f90
+++ b/src/common/micro/mode_lima_read_xker_raccs.F90
@@ -3,53 +3,14 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 init 2006/05/18 13:07:25
-!-----------------------------------------------------------------
-!     ###########################
-      MODULE MODI_LIMA_READ_XKER_RACCS 
-!     ###########################
-!
-INTERFACE
-      SUBROUTINE LIMA_READ_XKER_RACCS (KACCLBDAS,KACCLBDAR,KND,                        &
-                      PALPHAS,PNUS,PALPHAR,PNUR,PESR,PBS,PBR,PCS,PDS,PFVELOS,PCR,PDR,  &
-                      PACCLBDAS_MAX,PACCLBDAR_MAX,PACCLBDAS_MIN,PACCLBDAR_MIN,         &
-                      PFDINFTY,PKER_RACCSS,PKER_RACCS,PKER_SACCRG                      )
-!
-INTEGER, INTENT(OUT) :: KND,KACCLBDAS,KACCLBDAR
-REAL,    INTENT(OUT) :: PALPHAS
-REAL,    INTENT(OUT) :: PNUS
-REAL,    INTENT(OUT) :: PALPHAR
-REAL,    INTENT(OUT) :: PNUR
-REAL,    INTENT(OUT) :: PESR
-REAL,    INTENT(OUT) :: PBS
-REAL,    INTENT(OUT) :: PBR
-REAL,    INTENT(OUT) :: PCS
-REAL,    INTENT(OUT) :: PDS
-REAL,    INTENT(OUT) :: PFVELOS
-REAL,    INTENT(OUT) :: PCR
-REAL,    INTENT(OUT) :: PDR
-REAL,    INTENT(OUT) :: PACCLBDAS_MAX
-REAL,    INTENT(OUT) :: PACCLBDAR_MAX
-REAL,    INTENT(OUT) :: PACCLBDAS_MIN
-REAL,    INTENT(OUT) :: PACCLBDAR_MIN
-REAL,    INTENT(OUT) :: PFDINFTY
-REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PKER_RACCSS
-REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PKER_RACCS 
-REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PKER_SACCRG
-!
-END SUBROUTINE LIMA_READ_XKER_RACCS
-!
-END INTERFACE
-!
-END MODULE MODI_LIMA_READ_XKER_RACCS
+MODULE MODE_LIMA_READ_XKER_RACCS
+  IMPLICIT NONE
+CONTAINS
 !     ##########################################################################
-      SUBROUTINE LIMA_READ_XKER_RACCS (KACCLBDAS,KACCLBDAR,KND,                        &
-                      PALPHAS,PNUS,PALPHAR,PNUR,PESR,PBS,PBR,PCS,PDS,PFVELOS,PCR,PDR,  &
-                      PACCLBDAS_MAX,PACCLBDAR_MAX,PACCLBDAS_MIN,PACCLBDAR_MIN,         &
-                      PFDINFTY,PKER_RACCSS,PKER_RACCS,PKER_SACCRG                      )
+  SUBROUTINE LIMA_READ_XKER_RACCS (KACCLBDAS,KACCLBDAR,KND,                                         &
+                                   PALPHAS,PNUS,PALPHAR,PNUR,PESR,PBS,PBR,PCS,PDS,PFVELOS,PCR,PDR,  &
+                                   PACCLBDAS_MAX,PACCLBDAR_MAX,PACCLBDAS_MIN,PACCLBDAR_MIN,         &
+                                   PFDINFTY,PKER_RACCSS,PKER_RACCS,PKER_SACCRG                      )
 !     ##########################################################################
 !
 !!****  * * - initialize the kernels for the rain-snow accretion process
@@ -4951,3 +4912,4 @@ IF( PRESENT(PKER_SACCRG) ) THEN
 END IF
 !
 END SUBROUTINE LIMA_READ_XKER_RACCS
+END MODULE MODE_LIMA_READ_XKER_RACCS
diff --git a/src/mesonh/micro/lima_read_xker_rdryg.f90 b/src/common/micro/mode_lima_read_xker_rdryg.F90
similarity index 97%
rename from src/mesonh/micro/lima_read_xker_rdryg.f90
rename to src/common/micro/mode_lima_read_xker_rdryg.F90
index de1a4287401dc151fb785ab4e23b24010b8988e0..160392c58731e22c56e5fb8a5b96b161d6bcccde 100644
--- a/src/mesonh/micro/lima_read_xker_rdryg.f90
+++ b/src/common/micro/mode_lima_read_xker_rdryg.F90
@@ -3,49 +3,14 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 init 2006/05/18 13:07:25
-!-----------------------------------------------------------------
-!     ###########################
-      MODULE MODI_LIMA_READ_XKER_RDRYG
-!     ###########################
-!
-INTERFACE
-      SUBROUTINE LIMA_READ_XKER_RDRYG (KDRYLBDAG,KDRYLBDAR,KND,                   &
-                    PALPHAG,PNUG,PALPHAR,PNUR,PEGR,PBR,PCG,PDG,PCR,PDR,      &
-                    PDRYLBDAG_MAX,PDRYLBDAR_MAX,PDRYLBDAG_MIN,PDRYLBDAR_MIN, &
-                    PFDINFTY,PKER_RDRYG                                      )
-!
-INTEGER, INTENT(OUT) :: KND,KDRYLBDAG,KDRYLBDAR
-REAL,    INTENT(OUT) :: PALPHAG
-REAL,    INTENT(OUT) :: PNUG
-REAL,    INTENT(OUT) :: PALPHAR
-REAL,    INTENT(OUT) :: PNUR
-REAL,    INTENT(OUT) :: PEGR
-REAL,    INTENT(OUT) :: PBR
-REAL,    INTENT(OUT) :: PCG
-REAL,    INTENT(OUT) :: PDG
-REAL,    INTENT(OUT) :: PCR
-REAL,    INTENT(OUT) :: PDR
-REAL,    INTENT(OUT) :: PDRYLBDAG_MAX
-REAL,    INTENT(OUT) :: PDRYLBDAR_MAX
-REAL,    INTENT(OUT) :: PDRYLBDAG_MIN
-REAL,    INTENT(OUT) :: PDRYLBDAR_MIN
-REAL,    INTENT(OUT) :: PFDINFTY
-REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PKER_RDRYG 
-!
-END SUBROUTINE LIMA_READ_XKER_RDRYG
-!
-END INTERFACE
-!
-END MODULE MODI_LIMA_READ_XKER_RDRYG
+MODULE MODE_LIMA_READ_XKER_RDRYG
+  IMPLICIT NONE
+CONTAINS
 !     ########################################################################
-      SUBROUTINE LIMA_READ_XKER_RDRYG (KDRYLBDAG,KDRYLBDAR,KND,                   &
-                    PALPHAG,PNUG,PALPHAR,PNUR,PEGR,PBR,PCG,PDG,PCR,PDR,      &
-                    PDRYLBDAG_MAX,PDRYLBDAR_MAX,PDRYLBDAG_MIN,PDRYLBDAR_MIN, &
-                    PFDINFTY,PKER_RDRYG                                      )
+  SUBROUTINE LIMA_READ_XKER_RDRYG (KDRYLBDAG,KDRYLBDAR,KND,                   &
+                                   PALPHAG,PNUG,PALPHAR,PNUR,PEGR,PBR,PCG,PDG,PCR,PDR,      &
+                                   PDRYLBDAG_MAX,PDRYLBDAR_MAX,PDRYLBDAG_MIN,PDRYLBDAR_MIN, &
+                                   PFDINFTY,PKER_RDRYG                                      )
 !     ########################################################################
 !
 !!****  * * - initialize the kernels for the snow-graupel dry growth process
@@ -1734,3 +1699,4 @@ PKER_RDRYG( 40, 40) =  0.603544E-02
 END IF
 !
 END SUBROUTINE LIMA_READ_XKER_RDRYG
+END MODULE MODE_LIMA_READ_XKER_RDRYG
diff --git a/src/mesonh/micro/lima_read_xker_sdryg.f90 b/src/common/micro/mode_lima_read_xker_sdryg.F90
similarity index 98%
rename from src/mesonh/micro/lima_read_xker_sdryg.f90
rename to src/common/micro/mode_lima_read_xker_sdryg.F90
index f3c2377e598d75bfa99128901bc11047e768d4ee..d12ca6142379d89ae956366a15b105784e13f08c 100644
--- a/src/mesonh/micro/lima_read_xker_sdryg.f90
+++ b/src/common/micro/mode_lima_read_xker_sdryg.F90
@@ -3,50 +3,14 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 init 2006/05/18 13:07:25
-!-----------------------------------------------------------------
-!     ###########################
-      MODULE MODI_LIMA_READ_XKER_SDRYG
-!     ###########################
-!
-INTERFACE
-      SUBROUTINE LIMA_READ_XKER_SDRYG (KDRYLBDAG,KDRYLBDAS,KND,                 &
-                    PALPHAG,PNUG,PALPHAS,PNUS,PEGS,PBS,PCG,PDG,PCS,PDS,PFVELOS, &
-                    PDRYLBDAG_MAX,PDRYLBDAS_MAX,PDRYLBDAG_MIN,PDRYLBDAS_MIN,    &
-                    PFDINFTY,PKER_SDRYG                                         )
-!
-INTEGER, INTENT(OUT) :: KND,KDRYLBDAG,KDRYLBDAS
-REAL,    INTENT(OUT) :: PALPHAG
-REAL,    INTENT(OUT) :: PNUG
-REAL,    INTENT(OUT) :: PALPHAS
-REAL,    INTENT(OUT) :: PNUS
-REAL,    INTENT(OUT) :: PEGS
-REAL,    INTENT(OUT) :: PBS
-REAL,    INTENT(OUT) :: PCG
-REAL,    INTENT(OUT) :: PDG
-REAL,    INTENT(OUT) :: PCS
-REAL,    INTENT(OUT) :: PDS
-REAL,    INTENT(OUT) :: PFVELOS
-REAL,    INTENT(OUT) :: PDRYLBDAG_MAX
-REAL,    INTENT(OUT) :: PDRYLBDAS_MAX
-REAL,    INTENT(OUT) :: PDRYLBDAG_MIN
-REAL,    INTENT(OUT) :: PDRYLBDAS_MIN
-REAL,    INTENT(OUT) :: PFDINFTY
-REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PKER_SDRYG 
-!
-END SUBROUTINE LIMA_READ_XKER_SDRYG
-!
-END INTERFACE
-!
-END MODULE MODI_LIMA_READ_XKER_SDRYG
+MODULE MODE_LIMA_READ_XKER_SDRYG
+  IMPLICIT NONE
+CONTAINS
 !     ########################################################################
-      SUBROUTINE LIMA_READ_XKER_SDRYG (KDRYLBDAG,KDRYLBDAS,KND,                 &
-                    PALPHAG,PNUG,PALPHAS,PNUS,PEGS,PBS,PCG,PDG,PCS,PDS,PFVELOS, &
-                    PDRYLBDAG_MAX,PDRYLBDAS_MAX,PDRYLBDAG_MIN,PDRYLBDAS_MIN,    &
-                    PFDINFTY,PKER_SDRYG                                         )
+  SUBROUTINE LIMA_READ_XKER_SDRYG (KDRYLBDAG,KDRYLBDAS,KND,                                    &
+                                   PALPHAG,PNUG,PALPHAS,PNUS,PEGS,PBS,PCG,PDG,PCS,PDS,PFVELOS, &
+                                   PDRYLBDAG_MAX,PDRYLBDAS_MAX,PDRYLBDAG_MIN,PDRYLBDAS_MIN,    &
+                                   PFDINFTY,PKER_SDRYG                                         )
 !     ########################################################################
 !
 !!****  * * - initialize the kernels for the snow-graupel dry growth process
@@ -3338,3 +3302,4 @@ PKER_SDRYG( 40, 80) =  0.332823E+00
 END IF
 !
 END SUBROUTINE LIMA_READ_XKER_SDRYG
+END MODULE MODE_LIMA_READ_XKER_SDRYG
diff --git a/src/mesonh/micro/lima_read_xker_sweth.f90 b/src/common/micro/mode_lima_read_xker_sweth.F90
similarity index 98%
rename from src/mesonh/micro/lima_read_xker_sweth.f90
rename to src/common/micro/mode_lima_read_xker_sweth.F90
index a034ec708a09071c4185be149cc4ef3c89d294fa..fe423f89a53fda3abfc716d9fdc36d6d52f0ef64 100644
--- a/src/mesonh/micro/lima_read_xker_sweth.f90
+++ b/src/common/micro/mode_lima_read_xker_sweth.F90
@@ -3,50 +3,14 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 microph 2006/05/18 13:07:25
-!-----------------------------------------------------------------
-!     ###########################
-      MODULE MODI_LIMA_READ_XKER_SWETH
-!     ###########################
-!
-INTERFACE
-      SUBROUTINE LIMA_READ_XKER_SWETH (KWETLBDAH,KWETLBDAS,KND,                 &
-                    PALPHAH,PNUH,PALPHAS,PNUS,PEHS,PBS,PCH,PDH,PCS,PDS,PFVELOS, &
-                    PWETLBDAH_MAX,PWETLBDAS_MAX,PWETLBDAH_MIN,PWETLBDAS_MIN,    &
-                    PFDINFTY,PKER_SWETH                                         )
-!
-INTEGER, INTENT(OUT) :: KND,KWETLBDAH,KWETLBDAS
-REAL,    INTENT(OUT) :: PALPHAH
-REAL,    INTENT(OUT) :: PNUH
-REAL,    INTENT(OUT) :: PALPHAS
-REAL,    INTENT(OUT) :: PNUS
-REAL,    INTENT(OUT) :: PEHS
-REAL,    INTENT(OUT) :: PBS
-REAL,    INTENT(OUT) :: PCH
-REAL,    INTENT(OUT) :: PDH
-REAL,    INTENT(OUT) :: PCS
-REAL,    INTENT(OUT) :: PDS
-REAL,    INTENT(OUT) :: PFVELOS
-REAL,    INTENT(OUT) :: PWETLBDAH_MAX
-REAL,    INTENT(OUT) :: PWETLBDAS_MAX
-REAL,    INTENT(OUT) :: PWETLBDAH_MIN
-REAL,    INTENT(OUT) :: PWETLBDAS_MIN
-REAL,    INTENT(OUT) :: PFDINFTY
-REAL, DIMENSION(:,:), INTENT(OUT), OPTIONAL :: PKER_SWETH 
-!
-END SUBROUTINE LIMA_READ_XKER_SWETH
-!
-END INTERFACE
-!
-END MODULE MODI_LIMA_READ_XKER_SWETH
+MODULE MODE_LIMA_READ_XKER_SWETH
+  IMPLICIT NONE
+CONTAINS
 !     ########################################################################
-      SUBROUTINE LIMA_READ_XKER_SWETH (KWETLBDAH,KWETLBDAS,KND,                 &
-                    PALPHAH,PNUH,PALPHAS,PNUS,PEHS,PBS,PCH,PDH,PCS,PDS,PFVELOS, &
-                    PWETLBDAH_MAX,PWETLBDAS_MAX,PWETLBDAH_MIN,PWETLBDAS_MIN,    &
-                    PFDINFTY,PKER_SWETH                                         )
+  SUBROUTINE LIMA_READ_XKER_SWETH (KWETLBDAH,KWETLBDAS,KND,                                    &
+                                   PALPHAH,PNUH,PALPHAS,PNUS,PEHS,PBS,PCH,PDH,PCS,PDS,PFVELOS, &
+                                   PWETLBDAH_MAX,PWETLBDAS_MAX,PWETLBDAH_MIN,PWETLBDAS_MIN,    &
+                                   PFDINFTY,PKER_SWETH                                         )
 !     ########################################################################
 !
 !!****  * * - initialize the kernels for the snow-hail wet growth process
@@ -3338,3 +3302,4 @@ PKER_SWETH( 40, 80) =  0.310319E+00
 END IF
 !
 END SUBROUTINE LIMA_READ_XKER_SWETH
+END MODULE MODE_LIMA_READ_XKER_SWETH
diff --git a/src/mesonh/micro/lima_sedimentation.f90 b/src/common/micro/mode_lima_sedimentation.F90
similarity index 70%
rename from src/mesonh/micro/lima_sedimentation.f90
rename to src/common/micro/mode_lima_sedimentation.F90
index 23072bb81dab233cfbfdb920e0ee5b995c6a6848..dc6164d492aedbacd1aa7819285d9289d210e909 100644
--- a/src/mesonh/micro/lima_sedimentation.f90
+++ b/src/common/micro/mode_lima_sedimentation.F90
@@ -3,40 +3,13 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!      ###################################
-       MODULE MODI_LIMA_SEDIMENTATION
-!      ###################################
-!
-INTERFACE
-      SUBROUTINE LIMA_SEDIMENTATION (KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKTB, KKTE, KKT, KKL, &
-                                     HPHASE, KMOMENTS, KID, KSPLITG, PTSTEP, PDZZ, PRHODREF,       &
-                                     PPABST, PT, PRT_SUM, PCPT, PRS, PCS, PINPR )
-!
-INTEGER,                  INTENT(IN)    :: KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKTB, KKTE, KKT, KKL
-CHARACTER(1),             INTENT(IN)    :: HPHASE    ! Liquid or solid hydrometeors
-INTEGER,                  INTENT(IN)    :: KMOMENTS  ! Number of moments 
-INTEGER,                  INTENT(IN)    :: KID       ! Hydrometeor ID
-INTEGER,                  INTENT(IN)    :: KSPLITG   !  
-REAL,                     INTENT(IN)    :: PTSTEP    ! Time step          
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDZZ      ! Height (z)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF  ! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST    ! abs. pressure at time t
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PT        ! Temperature
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRT_SUM   ! total water mixing ratio
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCPT      ! Cp
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRS       ! m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCS       ! C. source
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPR     ! Instant precip rate
-!
-END SUBROUTINE LIMA_SEDIMENTATION
-END INTERFACE
-END MODULE MODI_LIMA_SEDIMENTATION
-!
-!
+MODULE MODE_LIMA_SEDIMENTATION
+  IMPLICIT NONE
+CONTAINS
 !     ######################################################################
-      SUBROUTINE LIMA_SEDIMENTATION (KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKTB, KKTE, KKT, KKL, &
-                                     HPHASE, KMOMENTS, KID, KSPLITG, PTSTEP, PDZZ, PRHODREF,       &
-                                     PPABST, PT, PRT_SUM, PCPT, PRS, PCS, PINPR )
+  SUBROUTINE LIMA_SEDIMENTATION (D, CST, &
+                                 HPHASE, KMOMENTS, KID, KSPLITG, PTSTEP, PDZZ, PRHODREF,       &
+                                 PPABST, PT, PRT_SUM, PCPT, PRS, PCS, PINPR, PFPR )
 !     ######################################################################
 !
 !!    PURPOSE
@@ -72,7 +45,8 @@ END MODULE MODI_LIMA_SEDIMENTATION
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_CST,              ONLY: XRHOLW, XCL, XCI, XPI
+USE MODD_DIMPHYEX,         ONLY: DIMPHYEX_t
+USE MODD_CST,              ONLY: CST_t
 USE MODD_PARAMETERS,       ONLY: JPHEXT, JPVEXT
 USE MODD_PARAM_LIMA,       ONLY: XCEXVT, XRTMIN, XCTMIN, NSPLITSED,           &
                                  XLB, XLBEX, XD, XFSEDR, XFSEDC,              &
@@ -89,7 +63,8 @@ IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
-INTEGER,                  INTENT(IN)    :: KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKTB, KKTE, KKT, KKL
+TYPE(DIMPHYEX_t),         INTENT(IN)    :: D
+TYPE(CST_t),              INTENT(IN)    :: CST
 CHARACTER(1),             INTENT(IN)    :: HPHASE    ! Liquid or solid hydrometeors
 INTEGER,                  INTENT(IN)    :: KMOMENTS  ! Number of moments 
 INTEGER,                  INTENT(IN)    :: KID       ! Hydrometeor ID
@@ -104,6 +79,7 @@ REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCPT      ! Cp
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRS       ! m.r. source
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCS       ! C. source
 REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPR     ! Instant precip rate
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PFPR      ! Precip. fluxes in altitude
 !
 !*       0.2   Declarations of local variables :
 !
@@ -114,9 +90,10 @@ LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) &
                            :: GSEDIM      ! Test where to compute the SED processes
 REAL,    DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) &
                            :: ZW,       & ! Work array
-                              ZWSEDR,   & ! Sedimentation of MMR
-                              ZWSEDC,   & ! Sedimentation of number conc.
                               ZWDT        ! Temperature change
+REAL,    DIMENSION(D%NIT,D%NJT,0:D%NKT+1) &
+                           :: ZWSEDR,   & ! Sedimentation of MMR
+                              ZWSEDC      ! Sedimentation of number conc.
 !
 REAL, DIMENSION(:), ALLOCATABLE         &
                            :: ZRS,      & ! m.r. source
@@ -147,19 +124,21 @@ ZTSPLITG= PTSTEP / REAL(NSPLITSED(KID))
 !
 ZWDT=0.
 PINPR(:,:) = 0.
+ZWSEDR(:,:,:) = 0.
+ZWSEDC(:,:,:) = 0.
 !
 PRS(:,:,:) = PRS(:,:,:) * PTSTEP
 IF (KMOMENTS==2) PCS(:,:,:) = PCS(:,:,:) * PTSTEP
-DO JK = KKTB , KKTE
+DO JK = D%NKTB , D%NKTE
    ZW(:,:,JK)=ZTSPLITG/PDZZ(:,:,JK)
 END DO
 !
-IF (HPHASE=='L') ZC=XCL
-IF (HPHASE=='I') ZC=XCI
+IF (HPHASE=='L') ZC=CST%XCL
+IF (HPHASE=='I') ZC=CST%XCI
 !
 IF (KID==4 .AND. ZMOMENTS==1) THEN
    ZMOMENTS=2
-   WHERE(PRS(:,:,:)>0) PCS(:,:,:)=1/(4*XPI*900.) * PRS(:,:,:) * &
+   WHERE(PRS(:,:,:)>0) PCS(:,:,:)=1/(4*CST%XPI*900.) * PRS(:,:,:) * &
         MAX(0.05E6,-0.15319E6-0.021454E6*ALOG(PRHODREF(:,:,:)*PRS(:,:,:)))**3
 END IF
 !
@@ -170,7 +149,7 @@ END IF
 DO JN = 1 ,  NSPLITSED(KID)
   ! Computation only where enough ice, snow, graupel or hail
    GSEDIM(:,:,:) = .FALSE.
-   GSEDIM(KIB:KIE,KJB:KJE,KKTB:KKTE) = PRS(KIB:KIE,KJB:KJE,KKTB:KKTE)>XRTMIN(KID)
+   GSEDIM(D%NIB:D%NIE,D%NJB:D%NJE,D%NKTB:D%NKTE) = PRS(D%NIB:D%NIE,D%NJB:D%NJE,D%NKTB:D%NKTE)>XRTMIN(KID)
    IF (ZMOMENTS==2)  GSEDIM(:,:,:) = GSEDIM(:,:,:) .AND. PCS(:,:,:)>XCTMIN(KID)
    ISEDIM = COUNTJV( GSEDIM(:,:,:),I1(:),I2(:),I3(:))
 !
@@ -224,26 +203,29 @@ DO JN = 1 ,  NSPLITSED(KID)
          ZZX(:) = ZCC(:) * ZZX(:)
       END IF
 
-      ZWSEDR(:,:,:) = UNPACK( ZZW(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
-      ZWSEDR(:,:,KKTB:KKTE) = MIN( ZWSEDR(:,:,KKTB:KKTE), PRS(:,:,KKTB:KKTE) * PRHODREF(:,:,KKTB:KKTE) / ZW(:,:,KKTB:KKTE) )
+      ZWSEDR(:,:,1:D%NKT) = UNPACK( ZZW(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
+      ZWSEDR(:,:,D%NKTB:D%NKTE) = MIN( ZWSEDR(:,:,D%NKTB:D%NKTE), PRS(:,:,D%NKTB:D%NKTE) &
+           * PRHODREF(:,:,D%NKTB:D%NKTE) / ZW(:,:,D%NKTB:D%NKTE) )
       IF (KMOMENTS==2) THEN
-         ZWSEDC(:,:,:) = UNPACK( ZZX(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
-         ZWSEDC(:,:,KKTB:KKTE) = MIN( ZWSEDC(:,:,KKTB:KKTE), PCS(:,:,KKTB:KKTE) * PRHODREF(:,:,KKTB:KKTE) / ZW(:,:,KKTB:KKTE) )
+         ZWSEDC(:,:,1:D%NKT) = UNPACK( ZZX(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
+         ZWSEDC(:,:,D%NKTB:D%NKTE) = MIN( ZWSEDC(:,:,D%NKTB:D%NKTE), PCS(:,:,D%NKTB:D%NKTE) &
+              * PRHODREF(:,:,D%NKTB:D%NKTE) / ZW(:,:,D%NKTB:D%NKTE) )
       END IF
       
-      DO JK = KKTB , KKTE
+      DO JK = D%NKTB , D%NKTE
          PRS(:,:,JK) = PRS(:,:,JK) + ZW(:,:,JK)*    &
-              (ZWSEDR(:,:,JK+KKL)-ZWSEDR(:,:,JK))/PRHODREF(:,:,JK)
+              (ZWSEDR(:,:,JK+D%NKL)-ZWSEDR(:,:,JK))/PRHODREF(:,:,JK)
+         PFPR(:,:,JK) = ZWSEDR(:,:,JK)
          IF (KMOMENTS==2) PCS(:,:,JK) = PCS(:,:,JK) + ZW(:,:,JK)*    &
-              (ZWSEDC(:,:,JK+KKL)-ZWSEDC(:,:,JK))/PRHODREF(:,:,JK)
+              (ZWSEDC(:,:,JK+D%NKL)-ZWSEDC(:,:,JK))/PRHODREF(:,:,JK)
          ! Heat transport
-         !PRT_SUM(:,:,JK-KKL) = PRT_SUM(:,:,JK-KKL) + ZW(:,:,JK-KKL)*ZWSEDR(:,:,JK)/PRHODREF(:,:,JK-KKL)
+         !PRT_SUM(:,:,JK-D%NKL) = PRT_SUM(:,:,JK-D%NKL) + ZW(:,:,JK-D%NKL)*ZWSEDR(:,:,JK)/PRHODREF(:,:,JK-D%NKL)
          !PRT_SUM(:,:,JK) = PRT_SUM(:,:,JK) - ZW(:,:,JK)*ZWSEDR(:,:,JK)/PRHODREF(:,:,JK)
-         !PCPT(:,:,JK-KKL) = PCPT(:,:,JK-KKL) + ZC * (ZW(:,:,JK-KKL)*ZWSEDR(:,:,JK)/PRHODREF(:,:,JK-KKL))
+         !PCPT(:,:,JK-D%NKL) = PCPT(:,:,JK-D%NKL) + ZC * (ZW(:,:,JK-D%NKL)*ZWSEDR(:,:,JK)/PRHODREF(:,:,JK-D%NKL))
          !PCPT(:,:,JK) = PCPT(:,:,JK) - ZC * (ZW(:,:,JK)*ZWSEDR(:,:,JK)/PRHODREF(:,:,JK))
-         !ZWDT(:,:,JK) =(PRHODREF(:,:,JK+KKL)*(1.+PRT_SUM(:,:,JK))*PCPT(:,:,JK)*PT(:,:,JK) + &
-         !     ZW(:,:,JK)*ZWSEDR(:,:,JK+1)*ZC*PT(:,:,JK+KKL)) / &
-         !     (PRHODREF(:,:,JK+KKL)*(1.+PRT_SUM(:,:,JK))*PCPT(:,:,JK) + ZW(:,:,JK)*ZWSEDR(:,:,JK+KKL)*ZC)
+         !ZWDT(:,:,JK) =(PRHODREF(:,:,JK+D%NKL)*(1.+PRT_SUM(:,:,JK))*PCPT(:,:,JK)*PT(:,:,JK) + &
+         !     ZW(:,:,JK)*ZWSEDR(:,:,JK+1)*ZC*PT(:,:,JK+D%NKL)) / &
+         !     (PRHODREF(:,:,JK+D%NKL)*(1.+PRT_SUM(:,:,JK))*PCPT(:,:,JK) + ZW(:,:,JK)*ZWSEDR(:,:,JK+D%NKL)*ZC)
          !ZWDT(:,:,JK) = ZWDT(:,:,JK) - PT(:,:,JK)
       END DO
       DEALLOCATE(ZRHODREF)
@@ -257,7 +239,7 @@ DO JN = 1 ,  NSPLITSED(KID)
       DEALLOCATE(ZZX)
       DEALLOCATE(ZZY)
       !      
-      PINPR(:,:) = PINPR(:,:) + ZWSEDR(:,:,KKB)/XRHOLW/NSPLITSED(KID)                          ! in m/s
+      PINPR(:,:) = PINPR(:,:) + ZWSEDR(:,:,D%NKB)/CST%XRHOLW/NSPLITSED(KID)                          ! in m/s
       !PT(:,:,:) = PT(:,:,:) + ZWDT(:,:,:)
       
    END IF
@@ -267,5 +249,4 @@ PRS(:,:,:) = PRS(:,:,:) / PTSTEP
 IF (KMOMENTS==2) PCS(:,:,:) = PCS(:,:,:) / PTSTEP
 !
 END SUBROUTINE LIMA_SEDIMENTATION
-!
-!-------------------------------------------------------------------------------
+END MODULE MODE_LIMA_SEDIMENTATION
diff --git a/src/mesonh/micro/lima_snow_deposition.f90 b/src/common/micro/mode_lima_snow_deposition.F90
similarity index 74%
rename from src/mesonh/micro/lima_snow_deposition.f90
rename to src/common/micro/mode_lima_snow_deposition.F90
index 3bd8d0141f23ef6c013ba7738e1da65518be4811..0a520c063aa1e96b4c6631a836ab3c4470b62023 100644
--- a/src/mesonh/micro/lima_snow_deposition.f90
+++ b/src/common/micro/mode_lima_snow_deposition.F90
@@ -3,45 +3,15 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!      #####################
-       MODULE MODI_LIMA_SNOW_DEPOSITION
-!      #####################
-!
-INTERFACE
-      SUBROUTINE LIMA_SNOW_DEPOSITION (LDCOMPUTE,                         &
-                                       PRHODREF, PSSI, PAI, PCJ, PLSFACT, &
-                                       PRST, PCST, PLBDS,                 &
-                                       P_RI_CNVI, P_CI_CNVI,              &
-                                       P_TH_DEPS, P_RS_DEPS               )
-!
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF! Reference density
-REAL, DIMENSION(:),   INTENT(IN)    :: PSSI  ! abs. pressure at time t
-REAL, DIMENSION(:),   INTENT(IN)    :: PAI  ! abs. pressure at time t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCJ  ! abs. pressure at time t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT  ! abs. pressure at time t
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCST    ! Snow/aggregate concentration 
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS    ! Graupel m.r. at t 
-!
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_RI_CNVI
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_CI_CNVI
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_TH_DEPS
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_RS_DEPS
-!
-END SUBROUTINE LIMA_SNOW_DEPOSITION
-END INTERFACE
-END MODULE MODI_LIMA_SNOW_DEPOSITION
-!
+MODULE MODE_LIMA_SNOW_DEPOSITION
+  IMPLICIT NONE
+CONTAINS
 !     ##########################################################################
-SUBROUTINE LIMA_SNOW_DEPOSITION (LDCOMPUTE,                                &
-                                 PRHODREF,  PSSI, PAI, PCJ, PLSFACT,       &
-                                 PRST, PCST, PLBDS,                        &
-                                 P_RI_CNVI, P_CI_CNVI,                     &
-                                 P_TH_DEPS, P_RS_DEPS                      )
+  SUBROUTINE LIMA_SNOW_DEPOSITION (LDCOMPUTE,                                &
+                                   PRHODREF,  PSSI, PAI, PCJ, PLSFACT,       &
+                                   PRST, PCST, PLBDS,                        &
+                                   P_RI_CNVI, P_CI_CNVI,                     &
+                                   P_TH_DEPS, P_RS_DEPS                      )
 !     ##########################################################################
 !
 !!    PURPOSE
@@ -177,3 +147,4 @@ ELSE
 END IF
 !
 END SUBROUTINE LIMA_SNOW_DEPOSITION
+END MODULE MODE_LIMA_SNOW_DEPOSITION
diff --git a/src/mesonh/micro/lima_snow_self_collection.f90 b/src/common/micro/mode_lima_snow_self_collection.F90
similarity index 78%
rename from src/mesonh/micro/lima_snow_self_collection.f90
rename to src/common/micro/mode_lima_snow_self_collection.F90
index ea38870b87d715c9d5d556b1ea1d9353c44bf41e..50339a87f9cfab882ee4e4ea81fea509d1aebfd2 100644
--- a/src/mesonh/micro/lima_snow_self_collection.f90
+++ b/src/common/micro/mode_lima_snow_self_collection.F90
@@ -3,36 +3,14 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-------------------------------------------------------------------------------
-!      #################################
-       MODULE MODI_LIMA_SNOW_SELF_COLLECTION
-!      #################################
-!
-INTERFACE
-   SUBROUTINE LIMA_SNOW_SELF_COLLECTION (LDCOMPUTE,          &
-                                         PRHODREF, PT,       &
-                                         PRST, PCST, PLBDS,  &
-                                         P_CS_SSC            )
-!
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF ! Reference Exner function
-REAL, DIMENSION(:),   INTENT(IN)    :: PT       ! Temperature
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST    ! Snow mr at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCST    ! Snow C. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS   ! 
-!
-REAL, DIMENSION(:),   INTENT(OUT)   :: P_CS_SSC 
-!
-END SUBROUTINE LIMA_SNOW_SELF_COLLECTION
-END INTERFACE
-END MODULE MODI_LIMA_SNOW_SELF_COLLECTION
-!
+MODULE MODE_LIMA_SNOW_SELF_COLLECTION
+  IMPLICIT NONE
+CONTAINS
 !     #############################################################
-      SUBROUTINE LIMA_SNOW_SELF_COLLECTION (LDCOMPUTE,          &
-                                            PRHODREF, PT,       &
-                                            PRST, PCST, PLBDS,  &
-                                            P_CS_SSC            )
+  SUBROUTINE LIMA_SNOW_SELF_COLLECTION (LDCOMPUTE,          &
+                                        PRHODREF, PT,       &
+                                        PRST, PCST, PLBDS,  &
+                                        P_CS_SSC            )
 !     #############################################################
 !
 !!    PURPOSE
@@ -147,3 +125,4 @@ END IF
 !-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_SNOW_SELF_COLLECTION
+END MODULE MODE_LIMA_SNOW_SELF_COLLECTION
diff --git a/src/mesonh/micro/lima_tendencies.f90 b/src/common/micro/mode_lima_tendencies.F90
similarity index 64%
rename from src/mesonh/micro/lima_tendencies.f90
rename to src/common/micro/mode_lima_tendencies.F90
index d8c8d18d9c1ee8371d6c0ef6274f5af50d85ac3d..d25250bcc03b6020789d727a7b4d915fce8ef20c 100644
--- a/src/mesonh/micro/lima_tendencies.f90
+++ b/src/common/micro/mode_lima_tendencies.F90
@@ -3,273 +3,50 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!###############################
-MODULE MODI_LIMA_TENDENCIES
-!###############################
-  INTERFACE
-     SUBROUTINE LIMA_TENDENCIES (PTSTEP, LDCOMPUTE,                                                &
-                                 PEXNREF, PRHODREF, PPABST, PTHT,                                  &
-                                 PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PRHT,                         &
-                                 PCCT, PCRT, PCIT, PCST, PCGT, PCHT,                               &
-                                 P_TH_HONC, P_RC_HONC, P_CC_HONC,                                  & 
-                                 P_CC_SELF,                                                        & 
-                                 P_RC_AUTO, P_CC_AUTO, P_CR_AUTO,                                  & 
-                                 P_RC_ACCR, P_CC_ACCR,                                             & 
-                                 P_CR_SCBU,                                                        & 
-                                 P_TH_EVAP, P_RR_EVAP, P_CR_EVAP,                                  & 
-                                 P_RI_CNVI, P_CI_CNVI,                                             & 
-                                 P_TH_DEPS, P_RS_DEPS,                                             & 
-                                 P_TH_DEPI, P_RI_DEPI,                                             & 
-                                 P_RI_CNVS, P_CI_CNVS,                                             &
-                                 P_CS_SSC,                                                         &
-                                 P_RI_AGGS, P_CI_AGGS,                                             & 
-                                 P_TH_DEPG, P_RG_DEPG,                                             & 
-                                 P_TH_BERFI, P_RC_BERFI,                                           & 
-                                 P_TH_RIM, P_RC_RIM, P_CC_RIM, P_RS_RIM, P_CS_RIM, P_RG_RIM,       & 
-                                 P_RI_HMS, P_CI_HMS, P_RS_HMS,                                     & 
-                                 P_TH_ACC, P_RR_ACC, P_CR_ACC, P_RS_ACC, P_CS_ACC, P_RG_ACC,       & 
-                                 P_RS_CMEL, P_CS_CMEL,                                             & 
-                                 P_TH_CFRZ, P_RR_CFRZ, P_CR_CFRZ, P_RI_CFRZ, P_CI_CFRZ,            & 
-                                 P_RI_CIBU, P_CI_CIBU,                                             & 
-                                 P_RI_RDSF, P_CI_RDSF,                                             & 
-                                 P_TH_WETG, P_RC_WETG, P_CC_WETG, P_RR_WETG, P_CR_WETG,            & 
-                                 P_RI_WETG, P_CI_WETG, P_RS_WETG, P_CS_WETG, P_RG_WETG, P_CG_WETG, P_RH_WETG, & 
-                                 P_TH_DRYG, P_RC_DRYG, P_CC_DRYG, P_RR_DRYG, P_CR_DRYG,            & 
-                                 P_RI_DRYG, P_CI_DRYG, P_RS_DRYG, P_CS_DRYG, P_RG_DRYG,            & 
-                                 P_RI_HMG, P_CI_HMG, P_RG_HMG,                                     & 
-                                 P_TH_GMLT, P_RR_GMLT, P_CR_GMLT, P_CG_GMLT,                       &
-                                 P_TH_DEPH, P_RH_DEPH,                                             &
-                                 P_TH_WETH, P_RC_WETH, P_CC_WETH, P_RR_WETH, P_CR_WETH,            &
-                                 P_RI_WETH, P_CI_WETH, P_RS_WETH, P_CS_WETH, P_RG_WETH, P_CG_WETH, P_RH_WETH, &
-                                 P_RG_COHG, P_CG_COHG,                                             &
-                                 P_TH_HMLT, P_RR_HMLT, P_CR_HMLT, P_CH_HMLT,                       &
-                                 PA_TH, PA_RV, PA_RC, PA_CC, PA_RR, PA_CR,                         &
-                                 PA_RI, PA_CI, PA_RS, PA_CS, PA_RG, PA_CG, PA_RH, PA_CH,           &
-                                 PEVAP3D,                                                          &
-                                 PCF1D, PIF1D, PPF1D                                               )
-!
-REAL,                 INTENT(IN)    :: PTSTEP 
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PEXNREF   ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF  ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PPABST    ! Pressure
-REAL, DIMENSION(:),   INTENT(IN)    :: PTHT      ! Potential temperature
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PRVT      ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT      ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT      ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT      ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST      ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRGT      !
-REAL, DIMENSION(:),   INTENT(IN)    :: PRHT      ! Mixing ratios (kg/kg)
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PCCT      !
-REAL, DIMENSION(:),   INTENT(IN)    :: PCRT      !
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT      ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCST      ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCGT      !
-REAL, DIMENSION(:),   INTENT(IN)    :: PCHT      ! Number concentrations (/kg)
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_HONC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_HONC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_HONC ! droplets homogeneous freezing (HONC) : rc, Nc, ri=-rc, Ni=-Nc, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_SELF ! self collection of droplets (SELF) : Nc
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_AUTO
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_AUTO
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_AUTO ! autoconversion of cloud droplets (AUTO) : rc, Nc, rr=-rc, Nr
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_ACCR
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_ACCR ! accretion of droplets by rain drops (ACCR) : rc, Nc, rr=-rr
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_SCBU ! self collectio break up of drops (SCBU) : Nr
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_EVAP
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_EVAP
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_EVAP ! evaporation of rain drops (EVAP) : rr, Nr, rv=-rr
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_CNVI
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_CNVI  ! conversion snow -> ice (CNVI) : ri, Ni, rs=-ri
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_DEPS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_DEPS  ! deposition of vapor on snow (DEPS) : rv=-rs, rs, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_DEPI
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_DEPI  ! deposition of vapor on ice (DEPI) : rv=-ri, ri, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_CNVS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_CNVS  ! conversion ice -> snow (CNVS) : ri, Ni, rs=-ri
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CS_SSC   ! self collection of snow (SSC) : Ns
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_AGGS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_AGGS  ! aggregation of ice on snow (AGGS) : ri, Ni, rs=-ri
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_DEPG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_DEPG  ! deposition of vapor on graupel (DEPG) : rv=-rg, rg, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_BERFI
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_BERFI ! Bergeron (BERFI) : rc, ri=-rc, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_RIM
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_RIM
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_RIM
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_RIM
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CS_RIM
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_RIM   ! cloud droplet riming (RIM) : rc, Nc, rs, Ns, rg, Ng=-Ns, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_HMS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_HMS
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_HMS   ! hallett mossop snow (HMS) : ri, Ni, rs
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_ACC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_ACC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_ACC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_ACC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CS_ACC
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_ACC   ! rain accretion on aggregates (ACC) : rr, Nr, rs, Ns, rg, Ng=-Ns, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_CMEL
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CS_CMEL  ! conversion-melting (CMEL) : rs, Ns, rg=-rs, Ng=-Ns
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_CFRZ
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_CFRZ
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_CFRZ
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_CFRZ
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_CFRZ  ! rain freezing (CFRZ) : rr, Nr, ri, Ni, rg=-rr-ri, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_CIBU
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_CIBU  ! collisional ice break-up (CIBU) : ri, Ni, rs=-ri
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_RDSF
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_RDSF  ! rain drops freezing shattering (RDSF) : ri, Ni, rg=-ri
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CS_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CG_WETG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RH_WETG ! wet growth of graupel (WETG) : rc, NC, rr, Nr, ri, Ni, rs, Ns, rg, Ng, rh, Nh=-Ng, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CS_DRYG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_DRYG ! dry growth of graupel (DRYG) : rc, Nc, rr, Nr, ri, Ni, rs, Ns, rg, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_HMG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_HMG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_HMG  ! hallett mossop graupel (HMG) : ri, Ni, rg
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_GMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_GMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_GMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CG_GMLT ! graupel melting (GMLT) : rr, Nr, rg=-rr, Ng, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_DEPH
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RH_DEPH  ! deposition of vapor on hail (DEPH) : rv=-rh, rh, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_WETH
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RC_WETH
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CC_WETH
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_WETH
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_WETH
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_WETH
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CI_WETH
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RS_WETH
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CS_WETH
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_WETH
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CG_WETH
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RH_WETH ! wet growth of hail (WETH) : rc, NC, rr, Nr, ri, Ni, rs, Ns, rg, Ng, rh, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_COHG
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CG_COHG ! conversion hail -> graupel (COHG) : rg, Ng, rh=-rg; Nh=-Ng
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_TH_HMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_RR_HMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CR_HMLT
-REAL, DIMENSION(:),   INTENT(INOUT) :: P_CH_HMLT ! hail melting (HMLT) : rr, Nr, rh=-rr, Nh, th
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_TH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RV
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CC
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CR
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CI
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RS
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CS
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RG
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CG
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_RH
-REAL, DIMENSION(:),   INTENT(INOUT) :: PA_CH
-!
-REAL, DIMENSION(:),   INTENT(INOUT) :: PEVAP3D
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PCF1D
-REAL, DIMENSION(:),   INTENT(IN)    :: PIF1D
-REAL, DIMENSION(:),   INTENT(IN)    :: PPF1D
-!
-     END SUBROUTINE LIMA_TENDENCIES
-  END INTERFACE
-END MODULE MODI_LIMA_TENDENCIES
-!#####################################################################
-!
+MODULE MODE_LIMA_TENDENCIES
+  IMPLICIT NONE
+CONTAINS
 !#####################################################################
-SUBROUTINE LIMA_TENDENCIES (PTSTEP, LDCOMPUTE,                                                &
-                            PEXNREF, PRHODREF, PPABST, PTHT,                                  &
-                            PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PRHT,                         &
-                            PCCT, PCRT, PCIT, PCST, PCGT, PCHT,                               &
-                            P_TH_HONC, P_RC_HONC, P_CC_HONC,                                  & 
-                            P_CC_SELF,                                                        & 
-                            P_RC_AUTO, P_CC_AUTO, P_CR_AUTO,                                  & 
-                            P_RC_ACCR, P_CC_ACCR,                                             & 
-                            P_CR_SCBU,                                                        & 
-                            P_TH_EVAP, P_RR_EVAP, P_CR_EVAP,                                  & 
-                            P_RI_CNVI, P_CI_CNVI,                                             & 
-                            P_TH_DEPS, P_RS_DEPS,                                             & 
-                            P_TH_DEPI, P_RI_DEPI,                                             & 
-                            P_RI_CNVS, P_CI_CNVS,                                             &
-                            P_CS_SSC,                                                         &
-                            P_RI_AGGS, P_CI_AGGS,                                             & 
-                            P_TH_DEPG, P_RG_DEPG,                                             & 
-                            P_TH_BERFI, P_RC_BERFI,                                           & 
-                            P_TH_RIM, P_RC_RIM, P_CC_RIM, P_RS_RIM, P_CS_RIM, P_RG_RIM,       & 
-                            P_RI_HMS, P_CI_HMS, P_RS_HMS,                                     & 
-                            P_TH_ACC, P_RR_ACC, P_CR_ACC, P_RS_ACC, P_CS_ACC, P_RG_ACC,       & 
-                            P_RS_CMEL, P_CS_CMEL,                                             & 
-                            P_TH_CFRZ, P_RR_CFRZ, P_CR_CFRZ, P_RI_CFRZ, P_CI_CFRZ,            & 
-                            P_RI_CIBU, P_CI_CIBU,                                             & 
-                            P_RI_RDSF, P_CI_RDSF,                                             & 
-                            P_TH_WETG, P_RC_WETG, P_CC_WETG, P_RR_WETG, P_CR_WETG,            & 
-                            P_RI_WETG, P_CI_WETG, P_RS_WETG, P_CS_WETG, P_RG_WETG, P_CG_WETG, P_RH_WETG, & 
-                            P_TH_DRYG, P_RC_DRYG, P_CC_DRYG, P_RR_DRYG, P_CR_DRYG,            & 
-                            P_RI_DRYG, P_CI_DRYG, P_RS_DRYG, P_CS_DRYG, P_RG_DRYG,            & 
-                            P_RI_HMG, P_CI_HMG, P_RG_HMG,                                     & 
-                            P_TH_GMLT, P_RR_GMLT, P_CR_GMLT, P_CG_GMLT,                       &
-                            P_TH_DEPH, P_RH_DEPH,                                             &
-                            P_TH_WETH, P_RC_WETH, P_CC_WETH, P_RR_WETH, P_CR_WETH,            &
-                            P_RI_WETH, P_CI_WETH, P_RS_WETH, P_CS_WETH, P_RG_WETH, P_CG_WETH, P_RH_WETH, &
-                            P_RG_COHG, P_CG_COHG,                                             &
-                            P_TH_HMLT, P_RR_HMLT, P_CR_HMLT, P_CH_HMLT,                       &
-                            PA_TH, PA_RV, PA_RC, PA_CC, PA_RR, PA_CR,                         &
-                            PA_RI, PA_CI, PA_RS, PA_CS, PA_RG, PA_CG, PA_RH, PA_CH,           &
-                            PEVAP3D,                                                          &
-                            PCF1D, PIF1D, PPF1D                                               )
+  SUBROUTINE LIMA_TENDENCIES (PTSTEP, LDCOMPUTE,                                                &
+                              PEXNREF, PRHODREF, PPABST, PTHT,                                  &
+                              PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PRHT,                         &
+                              PCCT, PCRT, PCIT, PCST, PCGT, PCHT,                               &
+                              P_TH_HONC, P_RC_HONC, P_CC_HONC,                                  & 
+                              P_CC_SELF,                                                        & 
+                              P_RC_AUTO, P_CC_AUTO, P_CR_AUTO,                                  & 
+                              P_RC_ACCR, P_CC_ACCR,                                             & 
+                              P_CR_SCBU,                                                        & 
+                              P_TH_EVAP, P_RR_EVAP, P_CR_EVAP,                                  & 
+                              P_RI_CNVI, P_CI_CNVI,                                             & 
+                              P_TH_DEPS, P_RS_DEPS,                                             & 
+                              P_TH_DEPI, P_RI_DEPI,                                             & 
+                              P_RI_CNVS, P_CI_CNVS,                                             &
+                              P_CS_SSC,                                                         &
+                              P_RI_AGGS, P_CI_AGGS,                                             & 
+                              P_TH_DEPG, P_RG_DEPG,                                             & 
+                              P_TH_BERFI, P_RC_BERFI,                                           & 
+                              P_TH_RIM, P_RC_RIM, P_CC_RIM, P_RS_RIM, P_CS_RIM, P_RG_RIM,       & 
+                              P_RI_HMS, P_CI_HMS, P_RS_HMS,                                     & 
+                              P_TH_ACC, P_RR_ACC, P_CR_ACC, P_RS_ACC, P_CS_ACC, P_RG_ACC,       & 
+                              P_RS_CMEL, P_CS_CMEL,                                             & 
+                              P_TH_CFRZ, P_RR_CFRZ, P_CR_CFRZ, P_RI_CFRZ, P_CI_CFRZ,            & 
+                              P_RI_CIBU, P_CI_CIBU,                                             & 
+                              P_RI_RDSF, P_CI_RDSF,                                             & 
+                              P_TH_WETG, P_RC_WETG, P_CC_WETG, P_RR_WETG, P_CR_WETG,            & 
+                              P_RI_WETG, P_CI_WETG, P_RS_WETG, P_CS_WETG, P_RG_WETG, P_CG_WETG, P_RH_WETG, & 
+                              P_TH_DRYG, P_RC_DRYG, P_CC_DRYG, P_RR_DRYG, P_CR_DRYG,            & 
+                              P_RI_DRYG, P_CI_DRYG, P_RS_DRYG, P_CS_DRYG, P_RG_DRYG,            & 
+                              P_RI_HMG, P_CI_HMG, P_RG_HMG,                                     & 
+                              P_TH_GMLT, P_RR_GMLT, P_CR_GMLT, P_CG_GMLT,                       &
+                              P_TH_DEPH, P_RH_DEPH,                                             &
+                              P_TH_WETH, P_RC_WETH, P_CC_WETH, P_RR_WETH, P_CR_WETH,            &
+                              P_RI_WETH, P_CI_WETH, P_RS_WETH, P_CS_WETH, P_RG_WETH, P_CG_WETH, P_RH_WETH, &
+                              P_RG_COHG, P_CG_COHG,                                             &
+                              P_TH_HMLT, P_RR_HMLT, P_CR_HMLT, P_CH_HMLT,                       &
+                              PA_TH, PA_RV, PA_RC, PA_CC, PA_RR, PA_CR,                         &
+                              PA_RI, PA_CI, PA_RS, PA_CS, PA_RG, PA_CG, PA_RH, PA_CH,           &
+                              PEVAP3D,                                                          &
+                              PCF1D, PIF1D, PPF1D                                               )
 !     ######################################################################
 !!
 !!    PURPOSE
@@ -296,35 +73,35 @@ SUBROUTINE LIMA_TENDENCIES (PTSTEP, LDCOMPUTE,
 USE MODD_CST,              ONLY : XP00, XRD, XRV, XMD, XMV, XCPD, XCPV, XCL, XCI, XLVTT, XLSTT, XTT, &
                                   XALPW, XBETAW, XGAMW, XALPI, XBETAI, XGAMI
 USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCTMIN, XNUS, LCIBU, LRDSF,                                &
-                                  LCOLD, LNUCL, LSNOW, LHAIL, LWARM, LACTI, LRAIN, LKHKO, LSNOW_T,   &
+                                  LNUCL, LACTI, LKHKO, LSNOW_T,   &
                                   NMOM_C, NMOM_R, NMOM_I, NMOM_S, NMOM_G, NMOM_H
 USE MODD_PARAM_LIMA_WARM,  ONLY : XLBC, XLBEXC, XLBR, XLBEXR, XCCR, XCXR
 USE MODD_PARAM_LIMA_MIXED, ONLY : XLBG, XLBEXG, XCCG, XCXG, XLBH, XLBEXH, XCCH, XCXH, XLBDAG_MAX
 USE MODD_PARAM_LIMA_COLD,  ONLY : XSCFAC, XLBI, XLBEXI, XLBS, XLBEXS, XLBDAS_MAX, XTRANS_MP_GAMMAS,  &
                                   XFVELOS, XLBDAS_MIN, XCCS, XCXS, XBS, XNS
 !
-USE MODI_LIMA_DROPLETS_HOM_FREEZING
-USE MODI_LIMA_DROPLETS_SELF_COLLECTION
-USE MODI_LIMA_DROPLETS_AUTOCONVERSION
-USE MODI_LIMA_DROPLETS_ACCRETION
-USE MODI_LIMA_DROPS_SELF_COLLECTION
-USE MODI_LIMA_RAIN_EVAPORATION
-USE MODI_LIMA_ICE_DEPOSITION
-USE MODI_LIMA_SNOW_DEPOSITION
-USE MODI_LIMA_SNOW_SELF_COLLECTION
-USE MODI_LIMA_ICE_AGGREGATION_SNOW
-USE MODI_LIMA_GRAUPEL_DEPOSITION
-USE MODI_LIMA_DROPLETS_RIMING_SNOW
-USE MODI_LIMA_RAIN_ACCR_SNOW
-USE MODI_LIMA_CONVERSION_MELTING_SNOW
-USE MODI_LIMA_RAIN_FREEZING
-USE MODI_LIMA_COLLISIONAL_ICE_BREAKUP
-USE MODI_LIMA_RAINDROP_SHATTERING_FREEZING
-USE MODI_LIMA_GRAUPEL
-USE MODI_LIMA_HAIL_DEPOSITION
-USE MODI_LIMA_HAIL
-!
-USE MODI_LIMA_BERGERON
+USE MODE_LIMA_DROPLETS_HOM_FREEZING, ONLY: LIMA_DROPLETS_HOM_FREEZING
+USE MODE_LIMA_DROPLETS_SELF_COLLECTION, ONLY: LIMA_DROPLETS_SELF_COLLECTION
+USE MODE_LIMA_DROPLETS_AUTOCONVERSION, ONLY: LIMA_DROPLETS_AUTOCONVERSION
+USE MODE_LIMA_DROPLETS_ACCRETION, ONLY: LIMA_DROPLETS_ACCRETION
+USE MODE_LIMA_DROPS_SELF_COLLECTION, ONLY: LIMA_DROPS_SELF_COLLECTION
+USE MODE_LIMA_RAIN_EVAPORATION, ONLY: LIMA_RAIN_EVAPORATION
+USE MODE_LIMA_ICE_DEPOSITION, ONLY: LIMA_ICE_DEPOSITION
+USE MODE_LIMA_SNOW_DEPOSITION, ONLY: LIMA_SNOW_DEPOSITION
+USE MODE_LIMA_SNOW_SELF_COLLECTION, ONLY: LIMA_SNOW_SELF_COLLECTION
+USE MODE_LIMA_ICE_AGGREGATION_SNOW, ONLY: LIMA_ICE_AGGREGATION_SNOW
+USE MODE_LIMA_GRAUPEL_DEPOSITION, ONLY: LIMA_GRAUPEL_DEPOSITION
+USE MODE_LIMA_DROPLETS_RIMING_SNOW, ONLY: LIMA_DROPLETS_RIMING_SNOW
+USE MODE_LIMA_RAIN_ACCR_SNOW, ONLY: LIMA_RAIN_ACCR_SNOW
+USE MODE_LIMA_CONVERSION_MELTING_SNOW, ONLY: LIMA_CONVERSION_MELTING_SNOW
+USE MODE_LIMA_RAIN_FREEZING, ONLY: LIMA_RAIN_FREEZING
+USE MODE_LIMA_COLLISIONAL_ICE_BREAKUP, ONLY: LIMA_COLLISIONAL_ICE_BREAKUP
+USE MODE_LIMA_RAINDROP_SHATTERING_FREEZING, ONLY: LIMA_RAINDROP_SHATTERING_FREEZING
+USE MODE_LIMA_GRAUPEL, ONLY: LIMA_GRAUPEL
+USE MODE_LIMA_HAIL_DEPOSITION, ONLY: LIMA_HAIL_DEPOSITION
+USE MODE_LIMA_HAIL, ONLY: LIMA_HAIL
+!
+USE MODE_LIMA_BERGERON, ONLY: LIMA_BERGERON
 !
 IMPLICIT NONE
 !
@@ -722,7 +499,7 @@ END IF
 !-------------------------------------------------------------------------------
 ! Call microphysical processes   
 !
-IF (LCOLD .AND. LWARM) THEN
+IF (NMOM_C.GE.1 .AND. NMOM_I.GE.1) THEN
    CALL LIMA_DROPLETS_HOM_FREEZING (PTSTEP, LDCOMPUTE,                 & ! independent from CF,IF,PF
                                     ZT, ZLVFACT, ZLSFACT,              &
                                     ZRCT, PCCT, ZLBDC,                 &
@@ -735,7 +512,7 @@ IF (LCOLD .AND. LWARM) THEN
    PA_TH(:) = PA_TH(:) + P_TH_HONC(:)
 END IF
 !
-IF (LWARM .AND. LRAIN .AND. (.NOT. LKHKO) .AND. NMOM_C.GE.2) THEN
+IF ((.NOT. LKHKO) .AND. NMOM_C.GE.2) THEN
    CALL LIMA_DROPLETS_SELF_COLLECTION (LDCOMPUTE,          & ! depends on CF
                                        PRHODREF,           &
                                        PCCT/ZCF1D, ZLBDC3, &
@@ -744,7 +521,7 @@ IF (LWARM .AND. LRAIN .AND. (.NOT. LKHKO) .AND. NMOM_C.GE.2) THEN
    PA_CC(:) = PA_CC(:) + P_CC_SELF(:)
 END IF
 !
-IF (LWARM .AND. LRAIN) THEN
+IF (NMOM_C.GE.1 .AND. NMOM_R.GE.1) THEN
    CALL LIMA_DROPLETS_AUTOCONVERSION (LDCOMPUTE,                             & ! depends on CF
                                       PRHODREF,                              &
                                       ZRCT/ZCF1D, PCCT/ZCF1D, ZLBDC, ZLBDR,  &
@@ -759,7 +536,7 @@ IF (LWARM .AND. LRAIN) THEN
    IF (NMOM_R.GE.2) PA_CR(:) = PA_CR(:) + P_CR_AUTO(:)
 END IF
 !
-IF (LWARM .AND. LRAIN) THEN
+IF (NMOM_C.GE.1 .AND. NMOM_R.GE.1) THEN
    CALL LIMA_DROPLETS_ACCRETION (LDCOMPUTE,                                     & ! depends on CF, PF
                                  PRHODREF,                                      &
                                  ZRCT/ZCF1D, ZRRT/ZPF1D, PCCT/ZCF1D, PCRT/ZPF1D,&
@@ -774,7 +551,7 @@ IF (LWARM .AND. LRAIN) THEN
    PA_RR(:) = PA_RR(:) - P_RC_ACCR(:)
 END IF
 !
-IF (LWARM .AND. LRAIN .AND. (.NOT. LKHKO) .AND. NMOM_R.GE.2) THEN 
+IF ((.NOT. LKHKO) .AND. NMOM_R.GE.2) THEN 
    CALL LIMA_DROPS_SELF_COLLECTION (LDCOMPUTE,           & ! depends on PF
                                     PRHODREF,            &
                                     PCRT/ZPF1D(:), ZLBDR, ZLBDR3, &
@@ -785,7 +562,7 @@ IF (LWARM .AND. LRAIN .AND. (.NOT. LKHKO) .AND. NMOM_R.GE.2) THEN
    PA_CR(:) = PA_CR(:) + P_CR_SCBU(:)
 END IF
 !
-IF (LWARM .AND. LRAIN) THEN
+IF (NMOM_R.GE.2) THEN
    CALL LIMA_RAIN_EVAPORATION (PTSTEP, LDCOMPUTE,                               & ! depends on PF > CF 
                                PRHODREF, ZT, ZLV, ZLVFACT, ZEVSAT, ZRVSAT,      &
                                PRVT, ZRCT/ZPF1D, ZRRT/ZPF1D, PCRT/ZPF1D, ZLBDR, &
@@ -802,7 +579,7 @@ IF (LWARM .AND. LRAIN) THEN
    IF (NMOM_R.GE.2) PA_CR(:) = PA_CR(:) + P_CR_EVAP(:)
 END IF
 !
-IF (LCOLD) THEN
+IF (NMOM_I.GE.1) THEN
    !
    ! Includes vapour deposition on ice, ice -> snow conversion
    !
@@ -826,7 +603,7 @@ IF (LCOLD) THEN
 
 END IF
 !
-IF (LCOLD .AND. LSNOW) THEN
+IF (NMOM_S.GE.1) THEN
    !
    ! Includes vapour deposition on snow, snow -> ice conversion
    !
@@ -850,7 +627,7 @@ IF (LCOLD .AND. LSNOW) THEN
 
 END IF
 !
-IF (LSNOW .AND. NMOM_S.GE.2) THEN 
+IF (NMOM_S.GE.2) THEN 
    CALL LIMA_SNOW_SELF_COLLECTION (LDCOMPUTE,           & ! depends on PF
                                    PRHODREF,            &
                                    ZRST(:)/ZPF1D(:), PCST/ZPF1D(:), ZLBDS, ZLBDS3, &
@@ -867,7 +644,7 @@ END IF
 !ZLBDS(:) = MIN( XLBDAS_MAX, ZLBDS(:))
 !
 !
-IF (LCOLD .AND. LSNOW) THEN
+IF (NMOM_I.GE.1 .AND. NMOM_S.GE.1) THEN
    CALL LIMA_ICE_AGGREGATION_SNOW (LDCOMPUTE,                                                    & ! depends on IF, PF
                                    ZT, PRHODREF,                                                 &
                                    ZRIT/ZIF1D, ZRST/ZPF1D, PCIT/ZIF1D, PCST/ZPF1D, ZLBDI, ZLBDS, &
@@ -880,7 +657,7 @@ IF (LCOLD .AND. LSNOW) THEN
    PA_RS(:) = PA_RS(:) - P_RI_AGGS(:)
 END IF
 !
-IF (LWARM .AND. LCOLD) THEN
+IF (NMOM_G.GE.1) THEN
    CALL LIMA_GRAUPEL_DEPOSITION (LDCOMPUTE, PRHODREF,                                    & ! depends on PF ?
                                  ZRGT/ZPF1D, PCGT/ZPF1D, ZSSI, ZLBDG, ZAI, ZCJ, ZLSFACT, &
                                  P_TH_DEPG, P_RG_DEPG                                    )
@@ -892,7 +669,7 @@ IF (LWARM .AND. LCOLD) THEN
    PA_TH(:) = PA_TH(:) + P_TH_DEPG(:)
 END IF
 !
-IF (LWARM .AND. LCOLD .AND. NMOM_I.EQ.1) THEN
+IF (NMOM_C.GE.1 .AND. NMOM_I.EQ.1) THEN
    CALL LIMA_BERGERON (LDCOMPUTE,                                 & ! depends on CF, IF
                        ZRCT/ZCF1D, ZRIT/ZIF1D, PCIT/ZIF1D, ZLBDI, &
                        ZSSIW, ZAI, ZCJ, ZLVFACT, ZLSFACT,         &
@@ -905,7 +682,7 @@ IF (LWARM .AND. LCOLD .AND. NMOM_I.EQ.1) THEN
    PA_TH(:) = PA_TH(:) + P_TH_BERFI(:)
 END IF
 !
-IF (LWARM .AND. LCOLD .AND. LSNOW) THEN
+IF (NMOM_C.GE.1 .AND. NMOM_S.GE.1) THEN
      !
      ! Graupel production as tendency (or should be tendency + instant to stick to the previous version ?)
      ! Includes the Hallett Mossop process for riming of droplets by snow (HMS)
@@ -937,7 +714,7 @@ IF (LWARM .AND. LCOLD .AND. LSNOW) THEN
 
 END IF
 !
-IF (LWARM .AND. LRAIN .AND. LCOLD .AND. LSNOW) THEN
+IF (NMOM_R.GE.1 .AND. NMOM_S.GE.1) THEN
    CALL LIMA_RAIN_ACCR_SNOW (PTSTEP, LDCOMPUTE,                                & ! depends on PF
                              PRHODREF, ZT,                                     &
                              ZRRT/ZPF1D, PCRT/ZPF1D, ZRST/ZPF1D, PCST/ZPF1D, ZLBDR, ZLBDS, ZLVFACT, ZLSFACT, &
@@ -959,7 +736,7 @@ IF (LWARM .AND. LRAIN .AND. LCOLD .AND. LSNOW) THEN
 
 END IF
 !
-IF (LWARM .AND. LCOLD .AND. LSNOW) THEN
+IF (NMOM_S.GE.1) THEN
    !
    ! Conversion melting of snow should account for collected droplets and drops where T>0C, but does not !
    ! Some thermodynamical computations inside, to externalize ?
@@ -978,7 +755,7 @@ IF (LWARM .AND. LCOLD .AND. LSNOW) THEN
 
 END IF
 !
-IF (LWARM .AND. LRAIN .AND. LCOLD ) THEN
+IF (NMOM_R.GE.1) THEN
    CALL LIMA_RAIN_FREEZING (LDCOMPUTE,                                             & ! depends on PF, IF
                             PRHODREF, ZT, ZLVFACT, ZLSFACT,                        &
                             ZRRT/ZPF1D, PCRT/ZPF1D, ZRIT/ZIF1D, PCIT/ZIF1D, ZLBDR, &
@@ -999,7 +776,7 @@ IF (LWARM .AND. LRAIN .AND. LCOLD ) THEN
 
 END IF
 !
-IF (LWARM .AND. LCOLD .AND. LSNOW .AND. LCIBU) THEN
+IF (NMOM_S.GE.1 .AND. NMOM_G.GE.1 .AND. LCIBU) THEN
    !
    ! Conversion melting of snow should account for collected droplets and drops where T>0C, but does not !
    ! Some thermodynamical computations inside, to externalize ?
@@ -1018,7 +795,7 @@ IF (LWARM .AND. LCOLD .AND. LSNOW .AND. LCIBU) THEN
 
 END IF
 !
-IF (LWARM .AND. LRAIN .AND. LCOLD .AND. LSNOW .AND. LRDSF) THEN
+IF (NMOM_R.GE.1 .AND. NMOM_I.GE.1 .AND. LRDSF) THEN
    !
    ! Conversion melting of snow should account for collected droplets and drops where T>0C, but does not !
    ! Some thermodynamical computations inside, to externalize ?
@@ -1037,7 +814,7 @@ IF (LWARM .AND. LRAIN .AND. LCOLD .AND. LSNOW .AND. LRDSF) THEN
 
 END IF
 !
-IF (LWARM .AND. LCOLD) THEN
+IF (NMOM_G.GE.1) THEN
      !
      ! Melting of graupel should account for collected droplets and drops where T>0C, but does not !
      ! Collection and water shedding should also happen where T>0C, but do not !
@@ -1061,7 +838,7 @@ IF (LWARM .AND. LCOLD) THEN
                       PA_RI, PA_CI, PA_RS, PA_CS, PA_RG, PA_CG, PA_RH, PA_CH )
 END IF
 !
-IF (LWARM .AND. LCOLD .AND. LHAIL) THEN
+IF (NMOM_H.GE.1) THEN
    CALL LIMA_HAIL_DEPOSITION (LDCOMPUTE, PRHODREF,                                    & ! depends on PF ?
                               ZRHT/ZPF1D, PCHT/ZPF1D, ZSSI, ZLBDH, ZAI, ZCJ, ZLSFACT, &
                               P_TH_DEPH, P_RH_DEPH                                    )
@@ -1087,3 +864,4 @@ IF (LWARM .AND. LCOLD .AND. LHAIL) THEN
 END IF
    !  
 END SUBROUTINE LIMA_TENDENCIES
+END MODULE MODE_LIMA_TENDENCIES
diff --git a/src/common/micro/mode_nrcolss.F90 b/src/common/micro/mode_nrcolss.F90
new file mode 100644
index 0000000000000000000000000000000000000000..3da87d0a49abb048b03c968b8334228ac906dd62
--- /dev/null
+++ b/src/common/micro/mode_nrcolss.F90
@@ -0,0 +1,271 @@
+!MNH_LIC Copyright 1994-2014 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_NRCOLSS
+  IMPLICIT NONE
+CONTAINS
+!     ########################################################################
+  SUBROUTINE NRCOLSS( KND, PALPHAS, PNUS, PALPHAR, PNUR,                  &
+                      PESR, PFALLS, PEXFALLS, PFALLEXPS, PFALLR, PEXFALLR,&
+                      PLBDASMAX, PLBDARMAX, PLBDASMIN, PLBDARMIN,         &
+                      PDINFTY, PNRCOLSS, PAG, PBS, PAS                    )
+!     ########################################################################
+!
+!
+!
+!!****  * -  Build up a look-up table containing the scaled fall speed
+!!           difference between size distributed particles of aggregates and Z
+!!
+!!
+!!    PURPOSE
+!!    -------
+!!      The purpose of this routine is to integrate numerically the scaled fall
+!!      speed difference between aggregates and rain  for use in collection
+!!      kernels FOR CONCENTRATIONS. A first integral of the form
+!!
+!!       infty  Dz_max
+!!           / /
+!!           |{|                                                 }
+!!           |{| E_xz (Dx+Dz)^2 |cxDx^dx-czDz^dz| n(Dz) dDz} n(Dx) dDx
+!!           |{|                                                 }
+!!           / /
+!!          0 Dz_min
+!!
+!!      is evaluated and normalised by a second integral of the form
+!!
+!!              infty
+!!             / /
+!!             |{|                          }
+!!             |{| (Dx+Dz)^2 n(Dz) dDz} n(Dx) dDx
+!!             |{|                          }
+!!             / /
+!!              0
+!!
+!!      The result is stored in a two-dimensional array.
+!! 
+!!**  METHOD
+!!    ------
+!!      The free parameters of the size distribution function of aggregates and Z
+!!      (slope parameter LAMBDA) are discretized with a geometrical rate in a
+!!      specific range
+!!            LAMBDA = exp( (Log(LAMBDA_max) - Log(LAMBDA_min))/N_interval )
+!!      The two above integrals are performed using the trapezoidal scheme.
+!!
+!!    EXTERNAL
+!!    --------
+!!      MODI_GENERAL_GAMMA: Generalized gamma distribution law 
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!      MODD_CST           : XPI,XRHOLW
+!!      MODD_RAIN_ICE_DESCR: XAS,XAS,XBS
+!!
+!!    REFERENCE
+!!    ---------
+!!      B.S. Ferrier , 1994 : A Double-Moment Multiple-Phase Four-Class
+!!                            Bulk Ice Scheme,JAS,51,249-280.
+!!
+!!    AUTHOR
+!!    ------
+!!      J.-P. Pinty     * Laboratoire d'Aerologie *
+!!
+!!    MODIFICATIONS 
+!!    -------------
+!!      Original    8/11/95
+!!      M. Taufour    03/2022  Adapted from rrcolss for concentration
+!!      J. Wurtz      03/2022  New snow characteristics
+!!
+!-------------------------------------------------------------------------------
+!
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+!
+USE MODI_GENERAL_GAMMA
+!
+USE MODD_CST
+USE MODD_RAIN_ICE_DESCR
+!
+IMPLICIT NONE
+!
+!
+!*       0.1   Declarations of dummy arguments 
+!              ------------------------------- 
+!
+!
+INTEGER, INTENT(IN) :: KND    ! Number of discrete size intervals in DS and DR  
+!
+REAL, INTENT(IN) :: PALPHAS   ! First shape parameter of the aggregates 
+                              ! size distribution (generalized gamma law)
+REAL, INTENT(IN) :: PNUS      ! Second shape parameter of the aggregates
+                              ! size distribution (generalized gamma law)
+REAL, INTENT(IN) :: PALPHAR   ! First shape parameter of the rain  
+                              ! size distribution (generalized gamma law)
+REAL, INTENT(IN) :: PNUR      ! Second shape parameter of the rain 
+                              ! size distribution (generalized gamma law)
+REAL, INTENT(IN) :: PESR      ! Efficiency of aggregates collecting rain 
+REAL, INTENT(IN) :: PFALLS    ! Fall speed constant of aggregates
+REAL, INTENT(IN) :: PEXFALLS  ! Fall speed exponent of aggregates
+REAL, INTENT(IN) :: PFALLEXPS ! Fall speed exponential of aggregates (Thompson 2008)
+REAL, INTENT(IN) :: PFALLR    ! Fall speed constant of rain 
+REAL, INTENT(IN) :: PEXFALLR  ! Fall speed exponent of rain 
+REAL, INTENT(IN) :: PLBDASMAX ! Maximun slope of size distribution of aggregates
+REAL, INTENT(IN) :: PLBDARMAX ! Maximun slope of size distribution of rain 
+REAL, INTENT(IN) :: PLBDASMIN ! Minimun slope of size distribution of aggregates
+REAL, INTENT(IN) :: PLBDARMIN ! Minimun slope of size distribution of rain 
+REAL, INTENT(IN) :: PDINFTY   ! Factor to define the largest diameter up to
+                              ! which the diameter integration is performed
+REAL, INTENT(IN) :: PAG, PBS, PAS
+!
+REAL, DIMENSION(:,:), INTENT(INOUT) :: PNRCOLSS! Scaled fall speed difference in
+                                               ! the mass collection kernel as a
+                                               ! function of LAMBDAX and LAMBDAZ
+!
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+!
+INTEGER :: JLBDAS  ! Slope index of the size distribution of aggregates
+INTEGER :: JLBDAR  ! Slope index of the size distribution of rain 
+INTEGER :: JDS     ! Diameter index of a particle of aggregates
+INTEGER :: JDR     ! Diameter index of a particle of rain 
+!
+INTEGER :: INR     ! Number of diameter step for the partial integration
+!
+!
+REAL :: ZLBDAS  ! Current slope parameter LAMBDA of aggregates
+REAL :: ZLBDAR  ! Current slope parameter LAMBDA of rain 
+REAL :: ZDLBDAS ! Growth rate of the slope parameter LAMBDA of aggregates
+REAL :: ZDLBDAR ! Growth rate of the slope parameter LAMBDA of rain 
+REAL :: ZDDS    ! Integration step of the diameter of aggregates
+REAL :: ZDDSCALR! Integration step of the diameter of rain  (scaling integral)
+REAL :: ZDDCOLLR! Integration step of the diameter of rain  (fallspe integral)
+REAL :: ZDS     ! Current diameter of the particle aggregates
+REAL :: ZDR     ! Current diameter of the rain 
+REAL :: ZDRMAX  ! Maximal diameter of the raindrops where the integration ends 
+REAL :: ZCOLLR  ! Single integral of the mass weighted fall speed difference 
+                ! over the spectrum of rain 
+REAL :: ZCOLLDRMAX ! Maximum ending point for the partial integral
+REAL :: ZCOLLSR ! Double integral of the mass weighted fall speed difference
+                ! over the spectra of aggregates and rain 
+REAL :: ZSCALR  ! Single integral of the scaling factor over 
+                ! the spectrum of rain 
+REAL :: ZSCALSR ! Double integral of the scaling factor over
+                ! the spectra of aggregates and rain 
+REAL :: ZFUNC   ! Ancillary function
+REAL :: ZCST1
+!
+!
+!-------------------------------------------------------------------------------
+!
+!
+!*       1       COMPUTE THE SCALED VELOCITY DIFFERENCE IN THE MASS
+!*                               COLLECTION KERNEL,
+!                -------------------------------------------------
+!
+!
+!
+!*       1.0     Initialization
+!
+PNRCOLSS(:,:) = 0.0
+ZCST1 = (3.0/XPI)/XRHOLW
+!
+!*       1.1     Compute the growth rate of the slope factors LAMBDA
+!
+ZDLBDAS = EXP( LOG(PLBDASMAX/PLBDASMIN)/REAL(SIZE(PNRCOLSS(:,:),1)-1) )
+ZDLBDAR = EXP( LOG(PLBDARMAX/PLBDARMIN)/REAL(SIZE(PNRCOLSS(:,:),2)-1) )
+!
+!*       1.2     Scan the slope factors LAMBDAX and LAMBDAZ
+!
+DO JLBDAS = 1,SIZE(PNRCOLSS(:,:),1)
+  ZLBDAS = PLBDASMIN * ZDLBDAS ** (JLBDAS-1) 
+!
+!*       1.3     Compute the diameter steps
+!
+  ZDDS   = PDINFTY / (REAL(KND) * ZLBDAS)
+  DO JLBDAR = 1,SIZE(PNRCOLSS(:,:),2)
+    ZLBDAR = PLBDARMIN * ZDLBDAR ** (JLBDAR-1)
+!
+!*       1.4     Initialize the collection integrals
+!
+    ZSCALSR = 0.0
+    ZCOLLSR = 0.0
+!
+!*       1.5     Compute the diameter steps
+!
+    ZDDSCALR = PDINFTY / (REAL(KND) * ZLBDAR)
+!
+!*       1.6     Scan over the diameters DS and DR
+!
+    DO JDS = 1,KND-1
+      ZDS = ZDDS * REAL(JDS)
+      ZSCALR = 0.0
+      ZCOLLR = 0.0
+      DO JDR = 1,KND-1
+        ZDR = ZDDSCALR * REAL(JDR)
+!
+!*       1.7     Compute the normalization factor by integration over the
+!                dimensional spectrum of rain   
+!
+        ZSCALR = ZSCALR + (ZDS+ZDR)**2 * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDR)
+      END DO
+!
+!*       1.8     Compute the scaled fall speed difference by partial
+!                integration over the dimensional spectrum of rain   
+!
+      ZFUNC = PAG - PAS*ZDS**(PBS-3.0) ! approximate limit is Ds=240 microns
+      IF( ZFUNC>0.0 ) THEN
+        ZDRMAX = ZDS*( ZCST1*ZFUNC )**0.3333333
+        ELSE
+        ZDRMAX = PDINFTY / ZLBDAR
+      END IF
+      IF( ZDS>1.0E-4 ) THEN            ! allow computation if Ds>100 microns
+            ! corresponding to a maximal density of the aggregates of XRHOLW
+        IF( ZDRMAX >= 0.5*ZDDSCALR ) THEN
+          INR = CEILING( ZDRMAX/ZDDSCALR )
+          ZDDCOLLR = ZDRMAX / REAL(INR)
+          IF (INR>=KND ) THEN
+            INR = KND
+            ZDDCOLLR = ZDDSCALR
+          END IF
+          DO JDR = 1,INR-1
+            ZDR = ZDDCOLLR * REAL(JDR)
+            ZCOLLR = ZCOLLR + (ZDS+ZDR)**2                                     &
+                       * PESR * ABS(PFALLS*ZDS**PEXFALLS * EXP(-(PFALLEXPS*ZDS)**PALPHAS)-PFALLR*ZDR**PEXFALLR) &
+                                      * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDR)
+          END DO
+          ZCOLLDRMAX = (ZDS+ZDRMAX)**2                                         &
+                    * PESR * ABS(PFALLS*ZDS**PEXFALLS* EXP(-(PFALLEXPS*ZDS)**PALPHAS)-PFALLR*ZDRMAX**PEXFALLR) &
+                                   * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDRMAX)
+          ZCOLLR = (ZCOLLR + 0.5*ZCOLLDRMAX)*(ZDDCOLLR/ZDDSCALR)
+!
+!*       1.9     Compute the normalization factor by integration over the
+!                dimensional spectrum of aggregates
+!
+          ZFUNC   = GENERAL_GAMMA(PALPHAS,PNUS,ZLBDAS,ZDS)
+          ZSCALSR = ZSCALSR + ZSCALR * ZFUNC
+!
+!*       1.10    Compute the scaled fall speed difference by integration over
+!                the dimensional spectrum of aggregates
+!
+          ZCOLLSR = ZCOLLSR + ZCOLLR * ZFUNC
+        END IF
+!
+! Otherwise ZDRMAX = 0.0 so the density of the graupel cannot be reached 
+!                    and so PRRCOLSS(JLBDAS,JLBDAR) = 0.0        !
+!
+      END IF
+    END DO
+!
+!*       1.11    Scale the fall speed difference
+!
+    IF( ZSCALSR>0.0 ) PNRCOLSS(JLBDAS,JLBDAR) = ZCOLLSR / ZSCALSR
+  END DO
+END DO
+!
+END SUBROUTINE NRCOLSS
+END MODULE MODE_NRCOLSS
diff --git a/src/common/micro/mode_nscolrg.F90 b/src/common/micro/mode_nscolrg.F90
new file mode 100644
index 0000000000000000000000000000000000000000..593d838d6951769c140653ea40fecdaac2352948
--- /dev/null
+++ b/src/common/micro/mode_nscolrg.F90
@@ -0,0 +1,272 @@
+!MNH_LIC Copyright 1994-2014 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_NSCOLRG
+  IMPLICIT NONE
+CONTAINS
+!     ########################################################################
+  SUBROUTINE NSCOLRG( KND, PALPHAS, PZNUS, PALPHAR, PNUR,                 &
+                      PESR, PFALLS, PEXFALLS, PFALLEXPS, PFALLR, PEXFALLR,&
+                      PLBDASMAX, PLBDARMAX, PLBDASMIN, PLBDARMIN,         &
+                      PDINFTY, PNSCOLRG,PAG, PBS, PAS                     )
+!     ########################################################################
+!
+!
+!
+!!****  * -  Build up a look-up table containing the scaled fall speed
+!!           difference between size distributed particles of the aggregates and Z
+!!
+!!
+!!    PURPOSE
+!!    -------
+!!      The purpose of this routine is to integrate numerically the scaled fall
+!!      speed difference between aggregates and rain  for use in collection
+!!      kernels. A first integral of the form
+!!
+!!       infty  Dz_max
+!!           / /
+!!           |{|                                                 }
+!!           |{| E_xz (Dx+Dz)^2 |cxDx^dx-czDz^dz| n(Dz) dDz} n(Dx) dDx
+!!           |{|                                                 }
+!!           / /
+!!          0 Dz_min
+!!
+!!      is evaluated and normalised by a second integral of the form
+!!
+!!              infty
+!!             / /
+!!             |{|                          }
+!!             |{| (Dx+Dz)^2 n(Dz) dDz} n(Dx) dDx
+!!             |{|                          }
+!!             / /
+!!              0
+!!
+!!      The result is stored in a two-dimensional array.
+!! 
+!!**  METHOD
+!!    ------
+!!      The free parameters of the size distribution function of the aggregates
+!!      and Z (slope parameter LAMBDA) are discretized with a geometrical rate 
+!!      in a specific range
+!!            LAMBDA = exp( (Log(LAMBDA_max) - Log(LAMBDA_min))/N_interval )
+!!      The two above integrals are performed using the trapezoidal scheme.
+!!
+!!    EXTERNAL
+!!    --------
+!!      MODI_GENERAL_GAMMA: Generalized gamma distribution law 
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!      MODD_CST           : XPI,XRHOLW
+!!      MODD_RAIN_ICE_DESCR: XAS,XAS,XBS
+!!
+!!    REFERENCE
+!!    ---------
+!!      B.S. Ferrier , 1994 : A Double-Moment Multiple-Phase Four-Class
+!!                            Bulk Ice Scheme,JAS,51,249-280.
+!!
+!!    AUTHOR
+!!    ------
+!!      J.-P. Pinty     * Laboratoire d'Aerologie *
+!!
+!!    MODIFICATIONS 
+!!    -------------
+!!      Original    8/11/95
+!!      M. Taufour    03/2022  Adapted from rscolrg for concentration
+!!      J. Wurtz      03/2022  New snow characteristics        
+!!
+!-------------------------------------------------------------------------------
+!
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+USE MODI_GENERAL_GAMMA
+!
+USE MODD_CST
+USE MODD_RAIN_ICE_DESCR
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of dummy arguments 
+!              ------------------------------- 
+!
+!
+INTEGER, INTENT(IN) :: KND    ! Number of discrete size intervals in DS and DR  
+!
+REAL, INTENT(IN) :: PALPHAS   ! First shape parameter of the aggregates 
+                              ! size distribution (generalized gamma law)
+REAL, INTENT(IN) :: PZNUS     ! Second shape parameter of the aggregates
+                              ! size distribution (generalized gamma law)
+REAL, INTENT(IN) :: PALPHAR   ! First shape parameter of the rain  
+                              ! size distribution (generalized gamma law)
+REAL, INTENT(IN) :: PNUR      ! Second shape parameter of the rain 
+                              ! size distribution (generalized gamma law)
+REAL, INTENT(IN) :: PESR      ! Efficiency of the aggregates collecting rain 
+REAL, INTENT(IN) :: PFALLS    ! Fall speed constant of the aggregates
+REAL, INTENT(IN) :: PEXFALLS  ! Fall speed exponent of the aggregates
+REAL, INTENT(IN) :: PFALLEXPS ! Fall speed exponential constant of the aggregates
+REAL, INTENT(IN) :: PFALLR    ! Fall speed constant of rain 
+REAL, INTENT(IN) :: PEXFALLR  ! Fall speed exponent of rain 
+REAL, INTENT(IN) :: PLBDASMAX ! Maximun slope of size distribution of the aggregates
+REAL, INTENT(IN) :: PLBDARMAX ! Maximun slope of size distribution of rain 
+REAL, INTENT(IN) :: PLBDASMIN ! Minimun slope of size distribution of the aggregates
+REAL, INTENT(IN) :: PLBDARMIN ! Minimun slope of size distribution of rain 
+REAL, INTENT(IN) :: PDINFTY   ! Factor to define the largest diameter up to
+                              ! which the diameter integration is performed
+REAL, INTENT(IN) :: PAG, PBS, PAS
+!
+REAL, DIMENSION(:,:), INTENT(INOUT) :: PNSCOLRG! Scaled fall speed difference in
+                                               ! the mass collection kernel as a
+                                               ! function of LAMBDAX and LAMBDAZ
+!
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+!
+INTEGER :: JLBDAS  ! Slope index of the size distribution of the aggregates
+INTEGER :: JLBDAR  ! Slope index of the size distribution of rain 
+INTEGER :: JDS     ! Diameter index of a particle of the aggregates
+INTEGER :: JDR     ! Diameter index of a particle of rain 
+!
+INTEGER :: INR     ! Number of diameter step for the partial integration
+!
+REAL :: ZLBDAS  ! Current slope parameter LAMBDA of the aggregates
+REAL :: ZLBDAR  ! Current slope parameter LAMBDA of rain 
+REAL :: ZDLBDAS ! Growth rate of the slope parameter LAMBDA of the aggregates
+REAL :: ZDLBDAR ! Growth rate of the slope parameter LAMBDA of rain 
+REAL :: ZDDS    ! Integration step of the diameter of the aggregates
+REAL :: ZDDSCALR! Integration step of the diameter of rain  (scaling integral)
+REAL :: ZDDCOLLR! Integration step of the diameter of rain  (fallspe integral)
+REAL :: ZDS     ! Current diameter of the particle aggregates
+REAL :: ZDR     ! Current diameter of the raindrops 
+REAL :: ZDRMIN  ! Minimal diameter of the raindrops where the integration starts
+REAL :: ZDRMAX  ! Maximal diameter of the raindrops where the integration ends
+REAL :: ZCOLLR  ! Single integral of the mass weighted fall speed difference 
+                ! over the spectrum of rain 
+REAL :: ZCOLLDRMIN ! Minimum ending point for the partial integral
+REAL :: ZCOLLSR ! Double integral of the mass weighted fall speed difference
+                ! over the spectra of the aggregates and rain 
+REAL :: ZSCALR  ! Single integral of the scaling factor over 
+                ! the spectrum of rain 
+REAL :: ZSCALSR ! Double integral of the scaling factor over
+                ! the spectra of the aggregates and rain 
+REAL :: ZFUNC   ! Ancillary function
+REAL :: ZCST1
+!
+!
+!-------------------------------------------------------------------------------
+!
+!
+!*       1       COMPUTE THE SCALED VELOCITY DIFFERENCE IN THE MASS
+!*                               COLLECTION KERNEL,
+!                -------------------------------------------------
+!
+!
+!*       1.0     Initialization
+!
+PNSCOLRG(:,:) = 0.0
+ZCST1  = (3.0/XPI)/XRHOLW
+!
+!*       1.1     Compute the growth rate of the slope factors LAMBDA
+!
+ZDLBDAR = EXP( LOG(PLBDARMAX/PLBDARMIN)/REAL(SIZE(PNSCOLRG(:,:),1)-1) )
+ZDLBDAS = EXP( LOG(PLBDASMAX/PLBDASMIN)/REAL(SIZE(PNSCOLRG(:,:),2)-1) )
+!
+!*       1.2     Scan the slope factors LAMBDAX and LAMBDAZ
+!
+DO JLBDAR = 1,SIZE(PNSCOLRG(:,:),1)
+  ZLBDAR = PLBDARMIN * ZDLBDAR ** (JLBDAR-1) 
+  ZDRMAX = PDINFTY / ZLBDAR
+!
+!*       1.3     Compute the diameter steps
+!
+  ZDDSCALR = PDINFTY / (REAL(KND) * ZLBDAR)
+  DO JLBDAS = 1,SIZE(PNSCOLRG(:,:),2)
+    ZLBDAS = PLBDASMIN * ZDLBDAS ** (JLBDAS-1)
+!
+!*       1.4     Initialize the collection integrals
+!
+    ZSCALSR = 0.0
+    ZCOLLSR = 0.0
+!
+!*       1.5     Compute the diameter steps
+!
+    ZDDS     = PDINFTY / (REAL(KND) * ZLBDAS)
+!
+!*       1.6     Scan over the diameters DS and DR
+!
+    DO JDS = 1,KND-1
+      ZDS = ZDDS * REAL(JDS)
+      ZSCALR = 0.0
+      ZCOLLR = 0.0
+      DO JDR = 1,KND-1
+        ZDR = ZDDSCALR * REAL(JDR)
+!
+!*       1.7     Compute the normalization factor by integration over the
+!                dimensional spectrum of rain   
+!
+        ZSCALR = ZSCALR + (ZDS+ZDR)**2 * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDR)
+      END DO
+!
+!*       1.8     Compute the scaled fall speed difference by partial
+!                integration over the dimensional spectrum of rain   
+!
+      ZFUNC = PAG - PAS*ZDS**(PBS-3.0) ! approximate limit is Ds=240 microns
+      IF( ZFUNC>0.0 ) THEN
+        ZDRMIN = ZDS*( ZCST1*ZFUNC )**0.3333333
+        ELSE
+        ZDRMIN = 0.0
+      END IF
+      IF( ZDS>1.0E-4 ) THEN            ! allow computation if Ds>100 microns 
+            ! corresponding to a maximal density of the aggregates of XRHOLW
+        IF( (ZDRMAX-ZDRMIN) >= 0.5*ZDDSCALR ) THEN
+          INR = CEILING( (ZDRMAX-ZDRMIN)/ZDDSCALR )
+          ZDDCOLLR = (ZDRMAX-ZDRMIN) / REAL(INR)
+          DO JDR = 1,INR-1
+            ZDR = ZDDCOLLR * REAL(JDR) + ZDRMIN
+            ZCOLLR = ZCOLLR + (ZDS+ZDR)**2                                     &
+                       * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDR)                &
+                         * PESR * ABS(PFALLS*ZDS**PEXFALLS*EXP(-(ZDS*PFALLEXPS)**PALPHAS)-PFALLR*ZDR**PEXFALLR)
+          END DO
+          IF( ZDRMIN>0.0 ) THEN
+            ZCOLLDRMIN = (ZDS+ZDRMIN)**2                                       &
+                      * GENERAL_GAMMA(PALPHAR,PNUR,ZLBDAR,ZDRMIN)              &
+                      * PESR * ABS(PFALLS*ZDS**PEXFALLS*EXP(-(ZDS*PFALLEXPS)**PALPHAS)-PFALLR*ZDRMIN**PEXFALLR)
+            ELSE
+            ZCOLLDRMIN = 0.0
+          END IF 
+          ZCOLLR = (ZCOLLR + 0.5*ZCOLLDRMIN)*(ZDDCOLLR/ZDDSCALR)
+!
+!*       1.9     Compute the normalization factor by integration over the
+!                dimensional spectrum of the aggregates
+!
+          ZFUNC   = GENERAL_GAMMA(PALPHAS,PZNUS,ZLBDAS,ZDS)  ! MTaufour : !*(ZDS**PEXMASSS)
+          ZSCALSR = ZSCALSR + ZSCALR * ZFUNC
+!
+!*       1.10    Compute the scaled fall speed difference by integration over
+!                the dimensional spectrum of the aggregates
+!
+          ZCOLLSR = ZCOLLSR + ZCOLLR * ZFUNC
+!
+! Otherwise ZDRMIN>ZDRMAX so PRRCOLSS(JLBDAS,JLBDAR) = 0.0        !
+!
+        END IF
+!
+! Otherwise ZDRMAX = 0.0 so the density of the graupel cannot be reached
+!                    and so PRRCOLSS(JLBDAS,JLBDAR) = 0.0        !
+!
+      END IF
+    END DO
+!
+!*       1.10    Scale the fall speed difference
+!
+    IF( ZSCALSR>0.0 ) PNSCOLRG(JLBDAR,JLBDAS) = ZCOLLSR / ZSCALSR
+  END DO
+END DO
+!
+END SUBROUTINE NSCOLRG
+END MODULE MODE_NSCOLRG
diff --git a/src/common/micro/mode_nzcolx.F90 b/src/common/micro/mode_nzcolx.F90
new file mode 100644
index 0000000000000000000000000000000000000000..5a3932bf461543d85ba4226d0c1d02531cd242fe
--- /dev/null
+++ b/src/common/micro/mode_nzcolx.F90
@@ -0,0 +1,232 @@
+!MNH_LIC Copyright 1994-2014 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_NZCOLX
+  IMPLICIT NONE
+CONTAINS
+!     ################################################################
+  SUBROUTINE NZCOLX( KND, PALPHAX, PNUX, PALPHAZ, PNUZ,          &
+                     PEXZ, PFALLX, PEXFALLX, PFALLEXPX,          &
+                     PFALLZ, PEXFALLZ, PFALLEXPZ,                &
+                     PLBDAXMAX, PLBDAZMAX, PLBDAXMIN, PLBDAZMIN, &
+                     PDINFTY, PNZCOLX                            )
+!     ################################################################
+!
+!
+!
+!!****  * -  Build up a look-up table containing the scaled fall speed
+!!           difference between size distributed particles of specy X and Z
+!!
+!!
+!!    PURPOSE
+!!    -------
+!!      The purpose of this routine is to integrate numerically the scaled fall
+!!      speed difference between specy X and specy Z for use in collection
+!!      kernels. A first integral of the form
+!!
+!!        infty
+!!       / /
+!!       |{|                                                 }
+!!       |{| E_xz (Dx+Dz)^2 |cxDx^dx-czDz^dz| g(Dz) dDz} g(Dx) dDx
+!!       |{|                                                 }
+!!       / /
+!!        0
+!!
+!!      is evaluated and normalised by a second integral of the form
+!!
+!!        infty
+!!       / /
+!!       |{|                          }
+!!       |{| (Dx+Dz)^2 g(Dz) dDz} g(Dx) dDx
+!!       |{|                          }
+!!       / /
+!!        0
+!!
+!!      where E_xz is a collection efficiency, g(D) is the generalized Gamma
+!!      distribution law. The 'infty' diameter is defined according to the
+!!      current value of the Lbda that is D_x=PDINFTY/Lbda_x or
+!!      D_z=PINFTY/Lbda_z. 
+!!      The result is stored in a two-dimensional array.
+!! 
+!!**  METHOD
+!!    ------
+!!      The free parameters of the size distribution function of specy X and Z
+!!      (slope parameter LAMBDA) are discretized with a geometrical rate in a
+!!      specific range
+!!            LAMBDA = exp( (Log(LAMBDA_max) - Log(LAMBDA_min))/N_interval )
+!!      The two above integrals are performed using the trapezoidal scheme and
+!!      the [0,infty] interval is discretized over KND values of D_x or D_z.
+!!
+!!    EXTERNAL
+!!    --------
+!!      MODI_GENERAL_GAMMA: Generalized gamma distribution law 
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!      None
+!!
+!!    REFERENCE
+!!    ---------
+!!      B.S. Ferrier , 1994 : A Double-Moment Multiple-Phase Four-Class
+!!                            Bulk Ice Scheme,JAS,51,249-280.
+!!
+!!    AUTHOR
+!!    ------
+!!      J.-P. Pinty     * Laboratoire d'Aerologie *
+!!
+!!    MODIFICATIONS 
+!!    -------------
+!!      Original    8/11/95
+!!      M. Taufour     03/2022: adapted from rzcolx for concentration
+!!      J. Wurtz       03/2022: new snow characteristics
+!!
+!-------------------------------------------------------------------------------
+!
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+USE MODI_GENERAL_GAMMA
+!
+IMPLICIT NONE
+!
+!
+!*       0.1   Declarations of dummy arguments 
+!              ------------------------------- 
+!
+!
+INTEGER, INTENT(IN) :: KND    ! Number of discrete size intervals in DX and DZ  
+!
+!
+REAL, INTENT(IN) :: PALPHAX   ! First shape parameter of the specy X 
+			      ! size distribution (generalized gamma law)
+REAL, INTENT(IN) :: PNUX      ! Second shape parameter of the specy X
+			      ! size distribution (generalized gamma law)
+REAL, INTENT(IN) :: PALPHAZ   ! First shape parameter of the specy Z 
+			      ! size distribution (generalized gamma law)
+REAL, INTENT(IN) :: PNUZ      ! Second shape parameter of the specy Z
+			      ! size distribution (generalized gamma law)
+REAL, INTENT(IN) :: PEXZ      ! Efficiency of specy X collecting specy Z
+REAL, INTENT(IN) :: PFALLX    ! Fall speed constant of specy X
+REAL, INTENT(IN) :: PEXFALLX  ! Fall speed exponent of specy X
+REAL, INTENT(IN) :: PFALLEXPX ! Fall speed exponential constant of specy X
+REAL, INTENT(IN) :: PFALLZ    ! Fall speed constant of specy Z
+REAL, INTENT(IN) :: PEXFALLZ  ! Fall speed exponent of specy Z
+REAL, INTENT(IN) :: PFALLEXPZ ! Fall speed exponential constant of specy Z
+REAL, INTENT(IN) :: PLBDAXMAX ! Maximun slope of size distribution of specy X
+REAL, INTENT(IN) :: PLBDAZMAX ! Maximun slope of size distribution of specy Z
+REAL, INTENT(IN) :: PLBDAXMIN ! Minimun slope of size distribution of specy X
+REAL, INTENT(IN) :: PLBDAZMIN ! Minimun slope of size distribution of specy Z
+REAL, INTENT(IN) :: PDINFTY   ! Factor to define the largest diameter up to
+			      ! which the diameter integration is performed
+!
+REAL, DIMENSION(:,:), INTENT(INOUT) :: PNZCOLX ! Scaled fall speed difference in
+				               ! the mass collection kernel as a
+					       ! function of LAMBDAX and LAMBDAZ
+!
+!
+!*       0.2   Declarations of local variables
+!              -------------------------------
+!
+!
+INTEGER :: JLBDAX  ! Slope index of the size distribution of specy X
+INTEGER :: JLBDAZ  ! Slope index of the size distribution of specy Z
+INTEGER :: JDX     ! Diameter index of a particle of specy X
+INTEGER :: JDZ     ! Diameter index of a particle of specy Z
+!
+!
+REAL    :: ZLBDAX  ! Current slope parameter LAMBDA of specy X
+REAL    :: ZLBDAZ  ! Current slope parameter LAMBDA of specy Z
+REAL    :: ZDLBDAX ! Growth rate of the slope parameter LAMBDA of specy X
+REAL    :: ZDLBDAZ ! Growth rate of the slope parameter LAMBDA of specy Z
+REAL    :: ZDDX    ! Integration step of the diameter of specy X
+REAL    :: ZDDZ    ! Integration step of the diameter of specy Z
+REAL    :: ZDX     ! Current diameter of the particle specy X
+REAL    :: ZDZ     ! Current diameter of the particle specy Z
+REAL    :: ZCOLLZ  ! Single integral of the mass weighted fall speed difference 
+		   ! over the spectrum of specy Z
+REAL    :: ZCOLLXZ ! Double integral of the mass weighted fall speed difference
+		   ! over the spectra of specy X and specy Z
+REAL    :: ZSCALZ  ! Single integral of the scaling factor over 
+		   ! the spectrum of specy Z
+REAL    :: ZSCALXZ ! Double integral of the scaling factor over
+		   ! the spectra of specy X and specy Z
+REAL    :: ZFUNC   ! Ancillary function
+!
+!
+!-------------------------------------------------------------------------------
+!
+!
+!*       1       COMPUTE THE SCALED VELOCITZ DIFFERENCE IN THE MASS
+!*                               COLLECTION KERNEL,
+!                -------------------------------------------------
+!
+!
+!
+!*       1.1     Compute the growth rate of the slope factors LAMBDA
+!
+ZDLBDAX = EXP( LOG(PLBDAXMAX/PLBDAXMIN)/REAL(SIZE(PNZCOLX(:,:),1)-1) )
+ZDLBDAZ = EXP( LOG(PLBDAZMAX/PLBDAZMIN)/REAL(SIZE(PNZCOLX(:,:),2)-1) )
+!
+!*       1.2     Scan the slope factors LAMBDAX and LAMBDAZ
+!
+DO JLBDAX = 1,SIZE(PNZCOLX(:,:),1)
+  ZLBDAX = PLBDAXMIN * ZDLBDAX ** (JLBDAX-1) 
+  DO JLBDAZ = 1,SIZE(PNZCOLX(:,:),2)
+    ZLBDAZ = PLBDAZMIN * ZDLBDAZ ** (JLBDAZ-1)
+!
+!*       1.3     Initialize the collection integrals
+!
+    ZSCALXZ = 0.0
+    ZCOLLXZ = 0.0
+!
+!*       1.4     Compute the diameter steps
+!
+    ZDDX = PDINFTY / (REAL(KND) * ZLBDAX)
+    ZDDZ = PDINFTY / (REAL(KND) * ZLBDAZ)
+!
+!*       1.5     Scan over the diameters DX and DZ
+!
+    DO JDX = 1,KND-1
+      ZDX = ZDDX * REAL(JDX)
+!
+      ZSCALZ = 0.0
+      ZCOLLZ = 0.0
+      DO JDZ = 1,KND-1
+        ZDZ = ZDDZ * REAL(JDZ)
+!
+!*       1.6     Compute the normalization factor by integration over the
+!                dimensional spectrum of specy Z  
+!
+	ZFUNC  = (ZDX+ZDZ)**2 * GENERAL_GAMMA(PALPHAZ,PNUZ,ZLBDAZ,ZDZ)
+	ZSCALZ = ZSCALZ + ZFUNC
+!
+!*       1.7     Compute the scaled fall speed difference by integration over
+!                the dimensional spectrum of specy Z
+!
+         ZCOLLZ = ZCOLLZ + ZFUNC * PEXZ * ABS( PFALLX*ZDX**PEXFALLX * EXP(-(ZDX*PFALLEXPX)**PALPHAX) &
+                                             - PFALLZ*ZDZ**PEXFALLZ * EXP(-(ZDZ*PFALLEXPZ)**PALPHAZ))
+      END DO
+!
+!*       1.8     Compute the normalization factor by integration over the
+!                dimensional spectrum of specy X
+!
+      ZFUNC   = GENERAL_GAMMA(PALPHAX,PNUX,ZLBDAX,ZDX)
+      ZSCALXZ = ZSCALXZ + ZSCALZ * ZFUNC
+!
+!*       1.9     Compute the scaled fall speed difference by integration over
+!                the dimensional spectrum of specy X
+!
+      ZCOLLXZ = ZCOLLXZ + ZCOLLZ * ZFUNC
+    END DO
+!
+!*       1.10    Scale the fall speed difference
+!
+    PNZCOLX(JLBDAX,JLBDAZ) = ZCOLLXZ / ZSCALXZ
+  END DO
+END DO
+!
+END SUBROUTINE NZCOLX
+END MODULE MODE_NZCOLX
diff --git a/src/mesonh/micro/set_conc_lima.f90 b/src/common/micro/mode_set_conc_lima.F90
similarity index 87%
rename from src/mesonh/micro/set_conc_lima.f90
rename to src/common/micro/mode_set_conc_lima.F90
index 09e6bc1e51c5658584cd908ebddbd8803ee797db..1a439bafcf36c03bb0f5afe28b8d639f4a823fe0 100644
--- a/src/mesonh/micro/set_conc_lima.f90
+++ b/src/common/micro/mode_set_conc_lima.F90
@@ -73,7 +73,7 @@ contains
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_PARAM_LIMA,      ONLY : XRTMIN, XCTMIN, LCOLD, LWARM, LRAIN, NMOD_CCN, NMOD_IFN, &
+USE MODD_PARAM_LIMA,      ONLY : XRTMIN, XCTMIN, NMOD_CCN, NMOD_IFN, &
                                  NMOM_C, NMOM_R, NMOM_I
 USE MODD_PARAM_LIMA_COLD, ONLY : XAI, XBI, XAS, XBS
 USE MODD_PARAM_LIMA_MIXED,ONLY : XAG, XBG, XAH, XBH
@@ -81,8 +81,6 @@ USE MODD_NSV,             ONLY : NSV_LIMA_BEG_A, NSV_LIMA_NC_A, NSV_LIMA_NR_A, N
                                  NSV_LIMA_NI_A, NSV_LIMA_NS_A, NSV_LIMA_NG_A, NSV_LIMA_NH_A, NSV_LIMA_IFN_NUCL_A
 USE MODD_CST,             ONLY : XPI, XRHOLW, XRHOLI
 USE MODD_CONF,            ONLY : NVERB
-USE MODD_CONF_n,          ONLY : NRR
-USE MODD_LUNIT_n,         ONLY : TLUOUT
 !
 IMPLICIT NONE
 !
@@ -99,20 +97,17 @@ REAL,  DIMENSION(:,:,:,NSV_LIMA_BEG_A(kmi):), INTENT(INOUT):: PSVT     ! microph
 !
 !*       0.2   Declarations of local variables :
 !
-INTEGER    :: IRESP   ! Return code of FM routines
-INTEGER    :: ILUOUT  ! Logical unit number of output-listing
 REAL       :: ZCONC
 !
 !-------------------------------------------------------------------------------
 !*       1.    RETRIEVE LOGICAL UNIT NUMBER
 !              ----------------------------
 !
-ILUOUT = TLUOUT%NLU
 !
 !*       2.    INITIALIZATION
 !              --------------
 !
-IF (LWARM .AND. NRR.GE.2 .AND. NMOM_C.GE.2) THEN
+IF (NMOM_C.GE.2) THEN
 !
 !  droplets
 !
@@ -134,13 +129,9 @@ IF (LWARM .AND. NRR.GE.2 .AND. NMOM_C.GE.2) THEN
       END WHERE
    END IF
    
-!   IF( NVERB >= 5 ) THEN
-!      WRITE (UNIT=ILUOUT,FMT=*) "!INI_MODEL$n: The droplet concentration has "
-!      WRITE (UNIT=ILUOUT,FMT=*) "been roughly initialised"
-!   END IF
 END IF
 !
-IF (LWARM .AND. LRAIN .AND. NRR.GE.3 .AND. NMOM_R.GE.2) THEN
+IF (NMOM_R.GE.2) THEN
 !
 !  drops
 !
@@ -156,14 +147,10 @@ IF (LWARM .AND. LRAIN .AND. NRR.GE.3 .AND. NMOM_R.GE.2) THEN
          PRT(:,:,:,3)  = 0.0
          PSVT(:,:,:,NSV_LIMA_NR_A(kmi)) = 0.0
       END WHERE
-!      IF( NVERB >= 5 ) THEN
-!         WRITE (UNIT=ILUOUT,FMT=*) "!INI_MODEL$n: The raindrop concentration has "
-!         WRITE (UNIT=ILUOUT,FMT=*) "been roughly initialised"
-!      END IF
    END IF
 END IF
 !
-IF (LCOLD .AND. NRR.GE.4 .AND. NMOM_I.GE.2) THEN
+IF (NMOM_I.GE.2) THEN
 !
 ! ice crystals
 !
@@ -190,11 +177,6 @@ IF (LCOLD .AND. NRR.GE.4 .AND. NMOM_I.GE.2) THEN
       END WHERE
    END IF
 
-!   IF( NVERB >= 5 ) THEN
-!      WRITE (UNIT=ILUOUT,FMT=*) "!INI_MODEL$n: The cloud ice concentration has "
-!      WRITE (UNIT=ILUOUT,FMT=*) "been roughly initialised"
-!   END IF
-!
 END IF
 !
 IF (NSV_LIMA_NS_A(KMI).GE.1) THEN
diff --git a/src/common/micro/modi_lima.F90 b/src/common/micro/modi_lima.F90
new file mode 100644
index 0000000000000000000000000000000000000000..6cd5fa338a4bde2175fa985d0e14d370718c9ec7
--- /dev/null
+++ b/src/common/micro/modi_lima.F90
@@ -0,0 +1,65 @@
+MODULE MODI_LIMA
+!
+INTERFACE
+!
+   SUBROUTINE LIMA ( D, CST, BUCONF, TBUDGETS, KBUDGETS,                     &
+                     PTSTEP,                                                 &
+                     PRHODREF, PEXNREF, PDZZ,                                &
+                     PRHODJ, PPABST,                                         &
+                     NCCN, NIFN, NIMM,                                       &
+                     PDTHRAD, PTHT, PRT, PSVT, PW_NU,                        &
+                     PTHS, PRS, PSVS,                                        &
+                     PINPRC, PINDEP, PINPRR, PINPRI, PINPRS, PINPRG, PINPRH, &
+                     PEVAP3D, PCLDFR, PICEFR, PPRCFR, PFPR                   )
+!
+USE MODD_IO,  ONLY: TFILEDATA
+USE MODD_DIMPHYEX, ONLY: DIMPHYEX_t
+USE MODD_BUDGET,   ONLY: TBUDGETDATA, TBUDGETCONF_t
+USE MODD_CST,            ONLY: CST_t
+!
+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     ! Time step
+!
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF   ! Reference density
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF    ! Reference Exner function
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDZZ       ! Layer thikness (m)
+!
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ     ! Dry density * Jacobian
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST     ! absolute pressure at t
+!
+INTEGER,                  INTENT(IN)    :: NCCN       ! for array size declarations
+INTEGER,                  INTENT(IN)    :: NIFN       ! for array size declarations
+INTEGER,                  INTENT(IN)    :: NIMM       ! for array size declarations
+!
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDTHRAD    ! dT/dt due to radiation
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT       ! Theta at time t
+REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT        ! Mixing ratios at time t
+REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT       ! Concentrations at time t
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PW_NU      ! w for CCN activation
+!
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS       ! Theta source
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS        ! Mixing ratios sources
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS       ! Concentration sources
+!
+REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRC     ! Cloud instant precip
+REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINDEP     ! Cloud droplets deposition
+REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRR     ! Rain instant precip
+REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRI     ! Rain instant precip
+REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRS     ! Snow instant precip
+REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRG     ! Graupel instant precip
+REAL, DIMENSION(:,:),     INTENT(OUT)   :: PINPRH     ! Rain instant precip
+REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PEVAP3D    ! Rain evap profile
+!
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCLDFR     ! Cloud fraction
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PICEFR     ! Cloud fraction
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PPRCFR     ! Cloud fraction
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PFPR       ! Precipitation fluxes in altitude
+!
+END SUBROUTINE LIMA
+END INTERFACE
+END MODULE MODI_LIMA
diff --git a/src/common/micro/modi_lima_adjust_split.F90 b/src/common/micro/modi_lima_adjust_split.F90
new file mode 100644
index 0000000000000000000000000000000000000000..aeb84748a1a24cd73f99e9c042969df03f645deb
--- /dev/null
+++ b/src/common/micro/modi_lima_adjust_split.F90
@@ -0,0 +1,71 @@
+!     #############################
+      MODULE MODI_LIMA_ADJUST_SPLIT
+!     #############################
+!
+INTERFACE
+!
+   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,              &
+                             PRT, PRS, PSVT, PSVS,                              &
+                             PTHS, PSRCS, PCLDFR, PICEFR, PRC_MF, PRI_MF, PCF_MF)
+!
+!USE MODD_IO,    ONLY: TFILEDATA
+USE MODD_DIMPHYEX,       ONLY: DIMPHYEX_t
+USE MODD_BUDGET,   ONLY: TBUDGETDATA, TBUDGETCONF_t
+USE MODD_CST,            ONLY: CST_t
+!
+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
+!
+INTEGER,                  INTENT(IN)   :: KRR        ! Number of moist variables
+INTEGER,                  INTENT(IN)   :: KMI        ! Model index 
+CHARACTER(len=80),        INTENT(IN)   :: HCONDENS
+CHARACTER(len=4),         INTENT(IN)   :: HLAMBDA3   ! formulation for lambda3 coeff
+LOGICAL,                  INTENT(IN)   :: OSUBG_COND ! Switch for Subgrid
+                                                     ! Condensation
+LOGICAL,                  INTENT(IN)   :: OSIGMAS    ! Switch for Sigma_s:
+                                                     ! use values computed in CONDENSATION
+                                                     ! or that from turbulence scheme
+REAL,                     INTENT(IN)   :: PTSTEP     ! Time step
+REAL,                     INTENT(IN)   :: PSIGQSAT   ! coeff applied to qsat variance contribution
+!
+REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PRHODREF  ! Dry density of the 
+                                                     ! reference state
+REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PRHODJ    ! Dry density * Jacobian
+REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PEXNREF   ! Reference Exner function
+REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PSIGS     ! Sigma_s at time t
+REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PMFCONV   ! 
+REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PPABST    ! Absolute Pressure at t     
+REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PPABSTT   ! Absolute Pressure at t+dt     
+REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PZZ       !     
+REAL, DIMENSION(:,:,:),   INTENT(IN)   :: PDTHRAD   ! Radiative temperature tendency
+REAL, DIMENSION(:,:,:),   INTENT(IN)   :: PW_NU     ! updraft velocity used for
+!
+REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT       ! m.r. at t
+!
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS       ! m.r. source
+!
+REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT ! Concentrations at time t
+!
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS ! Concentration sources
+!
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS      ! Theta source
+!
+REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PSRCS     ! Second-order flux
+                                                     ! s'rc'/2Sigma_s2 at time t+1
+                                                     ! multiplied by Lambda_3
+REAL, DIMENSION(:,:,:),   INTENT(INOUT)   :: PCLDFR    ! Cloud fraction          
+REAL, DIMENSION(:,:,:),   INTENT(INOUT)   :: PICEFR    ! Cloud fraction          
+REAL, DIMENSION(:,:,:),     INTENT(IN)    :: PRC_MF! Convective Mass Flux liquid mixing ratio
+REAL, DIMENSION(:,:,:),     INTENT(IN)    :: PRI_MF! Convective Mass Flux ice mixing ratio
+REAL, DIMENSION(:,:,:),     INTENT(IN)    :: PCF_MF! Convective Mass Flux Cloud fraction 
+!
+END SUBROUTINE LIMA_ADJUST_SPLIT
+END INTERFACE
+END MODULE MODI_LIMA_ADJUST_SPLIT
diff --git a/src/common/micro/modi_lima_precip_scavenging.F90 b/src/common/micro/modi_lima_precip_scavenging.F90
new file mode 100644
index 0000000000000000000000000000000000000000..918e2982eba4d565648da504c0051aa88922fb34
--- /dev/null
+++ b/src/common/micro/modi_lima_precip_scavenging.F90
@@ -0,0 +1,40 @@
+!#################################
+MODULE MODI_LIMA_PRECIP_SCAVENGING
+!#################################
+!
+  INTERFACE
+!
+     SUBROUTINE LIMA_PRECIP_SCAVENGING (D, CST, BUCONF, TBUDGETS, KBUDGETS, &
+                                        HCLOUD, KLUOUT, KTCOUNT, PTSTEP,    &
+                                        PRRT, PRHODREF, PRHODJ, PZZ,        &
+                                        PPABST, PTHT, PSVT, PRSVS, PINPAP )
+       USE MODD_DIMPHYEX,        ONLY: DIMPHYEX_t
+       use modd_budget,          only: TBUDGETDATA,TBUDGETCONF_t
+       USE MODD_CST,             ONLY: CST_t
+!
+       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
+!
+       CHARACTER(LEN=4),       INTENT(IN)      :: HCLOUD   ! cloud paramerization
+       INTEGER,                INTENT(IN)      :: KLUOUT   ! unit for output listing
+       INTEGER,                INTENT(IN)      :: KTCOUNT  ! iteration count
+       REAL,                   INTENT(IN)      :: PTSTEP   ! Double timestep except 
+                                                           ! for the first time step
+!
+       REAL, DIMENSION(:,:,:), INTENT(IN)      :: PRRT     ! Rain mixing ratio at t
+       REAL, DIMENSION(:,:,:), INTENT(IN)      :: PRHODREF ! Air Density [kg/m**3]
+       REAL, DIMENSION(:,:,:), INTENT(IN)      :: PRHODJ   ! Dry Density [kg]
+       REAL, DIMENSION(:,:,:), INTENT(IN)      :: PZZ      ! Altitude
+       REAL, DIMENSION(:,:,:), INTENT(IN)      :: PPABST   ! Absolute pressure at t
+       REAL, DIMENSION(:,:,:), INTENT(IN)      :: PTHT     ! Theta at time t 
+!
+       REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT   ! Particle Concentration [/m**3]
+       REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRSVS  ! Total Number Scavenging Rate
+!
+       REAL, DIMENSION(:,:),   INTENT(INOUT)   :: PINPAP
+     END SUBROUTINE LIMA_PRECIP_SCAVENGING
+  END INTERFACE
+END MODULE MODI_LIMA_PRECIP_SCAVENGING
diff --git a/src/common/turb/turb.F90 b/src/common/turb/turb.F90
index 58e0ba1847373e468597bdfa8ed1590f97281dc0..0cfafc17ae355cf3decb1037417d15745a7df402 100644
--- a/src/common/turb/turb.F90
+++ b/src/common/turb/turb.F90
@@ -1025,12 +1025,12 @@ CALL TURB_VER(D,CST,CSTURB,TURBN,TLES,                   &
           PSSTFL, PSSTFL_C, PSSRFL_C,PSSUFL_C,PSSVFL_C,  &
           PSSUFL,PSSVFL                                  )
 
-IF (HCLOUD == 'LIMA') THEN
-   IF (KSV_LIMA_NR.GT.0) PRSVS(:,:,KSV_LIMA_NR) = ZRSVS(:,:,KSV_LIMA_NR) 
-   IF (KSV_LIMA_NS.GT.0) PRSVS(:,:,KSV_LIMA_NS) = ZRSVS(:,:,KSV_LIMA_NS)
-   IF (KSV_LIMA_NG.GT.0) PRSVS(:,:,KSV_LIMA_NG) = ZRSVS(:,:,KSV_LIMA_NG) 
-   IF (KSV_LIMA_NH.GT.0) PRSVS(:,:,KSV_LIMA_NH) = ZRSVS(:,:,KSV_LIMA_NH)
-END IF
+!IF (HCLOUD == 'LIMA') THEN
+!   IF (KSV_LIMA_NR.GT.0) PRSVS(:,:,KSV_LIMA_NR) = ZRSVS(:,:,KSV_LIMA_NR) 
+!   IF (KSV_LIMA_NS.GT.0) PRSVS(:,:,KSV_LIMA_NS) = ZRSVS(:,:,KSV_LIMA_NS)
+!   IF (KSV_LIMA_NG.GT.0) PRSVS(:,:,KSV_LIMA_NG) = ZRSVS(:,:,KSV_LIMA_NG) 
+!   IF (KSV_LIMA_NH.GT.0) PRSVS(:,:,KSV_LIMA_NH) = ZRSVS(:,:,KSV_LIMA_NH)
+!END IF
 
 IF( BUCONF%LBUDGET_U ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_U), 'VTURB', PRUS(:,:) )
 IF( BUCONF%LBUDGET_V ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_V), 'VTURB', PRVS(:,:) )
@@ -1127,12 +1127,12 @@ IF( TURBN%CTURBDIM == '3DIM' ) THEN
           PRUS,PRVS,PRWS,PRTHLS,PRRS,PRSVS                     )
 #endif
   !
-  IF (HCLOUD == 'LIMA') THEN
-     IF (KSV_LIMA_NR.GT.0) PRSVS(:,:,KSV_LIMA_NR) = ZRSVS(:,:,KSV_LIMA_NR) 
-     IF (KSV_LIMA_NS.GT.0) PRSVS(:,:,KSV_LIMA_NS) = ZRSVS(:,:,KSV_LIMA_NS)
-     IF (KSV_LIMA_NG.GT.0) PRSVS(:,:,KSV_LIMA_NG) = ZRSVS(:,:,KSV_LIMA_NG) 
-     IF (KSV_LIMA_NH.GT.0) PRSVS(:,:,KSV_LIMA_NH) = ZRSVS(:,:,KSV_LIMA_NH)
-  END IF
+!  IF (HCLOUD == 'LIMA') THEN
+!     IF (KSV_LIMA_NR.GT.0) PRSVS(:,:,KSV_LIMA_NR) = ZRSVS(:,:,KSV_LIMA_NR) 
+!     IF (KSV_LIMA_NS.GT.0) PRSVS(:,:,KSV_LIMA_NS) = ZRSVS(:,:,KSV_LIMA_NS)
+!     IF (KSV_LIMA_NG.GT.0) PRSVS(:,:,KSV_LIMA_NG) = ZRSVS(:,:,KSV_LIMA_NG) 
+!     IF (KSV_LIMA_NH.GT.0) PRSVS(:,:,KSV_LIMA_NH) = ZRSVS(:,:,KSV_LIMA_NH)
+!  END IF
   !
   IF( BUCONF%LBUDGET_U ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_U), 'HTURB', PRUS(:,:) )
   IF( BUCONF%LBUDGET_V ) CALL BUDGET_STORE_END_PHY(D, TBUDGETS(NBUDGET_V), 'HTURB', PRVS(:,:) )
diff --git a/src/mesonh/aux/sources_neg_correct.f90 b/src/mesonh/aux/sources_neg_correct.f90
index a1e83273438f5385109ad6a35844d083b44317ca..0302839408bb4045ae0b78adc29bdc812452c071 100644
--- a/src/mesonh/aux/sources_neg_correct.f90
+++ b/src/mesonh/aux/sources_neg_correct.f90
@@ -53,7 +53,7 @@ use modd_budget,     only: lbudget_th, lbudget_rv, lbudget_rc, lbudget_rr, lbudg
 use modd_cst,        only: xci, xcl, xcpd, xcpv, xlstt, xlvtt, xp00, xrd, xtt
 use modd_nsv,        only: nsv_c2r2beg, nsv_c2r2end, nsv_lima_beg, nsv_lima_end, nsv_lima_nc, nsv_lima_nr,&
                            nsv_lima_ni, nsv_lima_ns, nsv_lima_ng, nsv_lima_nh
-use modd_param_lima, only: lcold_lima => lcold, lrain_lima => lrain, lspro_lima => lspro, lwarm_lima => lwarm, &
+use modd_param_lima, only: lspro_lima => lspro, &
                            xctmin_lima => xctmin, xrtmin_lima => xrtmin
 
 use mode_budget,         only: Budget_store_init, Budget_store_end
diff --git a/src/mesonh/ext/boundaries.f90 b/src/mesonh/ext/boundaries.f90
new file mode 100644
index 0000000000000000000000000000000000000000..111dbc701d5c112ccc4d00cbf6331afb089f129c
--- /dev/null
+++ b/src/mesonh/ext/boundaries.f90
@@ -0,0 +1,1281 @@
+!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
+!MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
+!#####################
+MODULE MODI_BOUNDARIES
+!#####################
+!
+INTERFACE
+!
+      SUBROUTINE BOUNDARIES (                                       &
+            PTSTEP,HLBCX,HLBCY,KRR,KSV,KTCOUNT,                     &
+            PLBXUM,PLBXVM,PLBXWM,PLBXTHM,PLBXTKEM,PLBXRM,PLBXSVM,   &
+            PLBYUM,PLBYVM,PLBYWM,PLBYTHM,PLBYTKEM,PLBYRM,PLBYSVM,   &
+            PLBXUS,PLBXVS,PLBXWS,PLBXTHS,PLBXTKES,PLBXRS,PLBXSVS,   &
+            PLBYUS,PLBYVS,PLBYWS,PLBYTHS,PLBYTKES,PLBYRS,PLBYSVS,   &
+            PRHODJ,PRHODREF,                                        &
+            PUT,PVT,PWT,PTHT,PTKET,PRT,PSVT,PSRCT                   )
+!
+REAL,                  INTENT(IN) :: PTSTEP        ! time step dt
+CHARACTER(LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX,HLBCY   ! X and Y-direc. LBC type
+!
+INTEGER,               INTENT(IN) :: KRR           ! Number of moist  variables
+INTEGER,               INTENT(IN) :: KSV           ! Number of Scalar Variables
+INTEGER,               INTENT(IN) :: KTCOUNT       ! Temporal loop COUNTer
+                                                   ! (=1 at the segment beginning)
+!
+! Lateral Boundary fields at time t
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXUM,PLBXVM,PLBXWM ! Wind
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXTHM              ! Mass
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBYUM,PLBYVM,PLBYWM ! Wind
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBYTHM              ! Mass
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXTKEM          ! TKE
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBYTKEM
+REAL, DIMENSION(:,:,:,:),        INTENT(IN) :: PLBXRM  ,PLBXSVM  ! Moisture and SV
+REAL, DIMENSION(:,:,:,:),        INTENT(IN) :: PLBYRM  ,PLBYSVM  ! in x and y-dir.
+! temporal derivative of the Lateral Boundary fields
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXUS,PLBXVS,PLBXWS ! Wind
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXTHS              ! Mass
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBYUS,PLBYVS,PLBYWS ! Wind
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBYTHS              ! Mass
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXTKES          ! TKE
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBYTKES
+REAL, DIMENSION(:,:,:,:),        INTENT(IN) :: PLBXRS  ,PLBXSVS  ! Moisture and SV
+REAL, DIMENSION(:,:,:,:),        INTENT(IN) :: PLBYRS  ,PLBYSVS  ! in x and y-dir.
+!
+REAL, DIMENSION(:,:,:),   INTENT(IN) :: PRHODJ    ! Jacobian * dry density of
+                                                  !  the reference state
+REAL, DIMENSION(:,:,:),   INTENT(IN) :: PRHODREF
+!
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PUT,PVT,PWT,PTHT,PTKET,PSRCT
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRT,PSVT
+                                                      ! Variables at t
+!
+END SUBROUTINE BOUNDARIES
+!
+END INTERFACE
+!
+
+END MODULE MODI_BOUNDARIES
+!
+!
+!     ####################################################################
+      SUBROUTINE BOUNDARIES (                                       &
+            PTSTEP,HLBCX,HLBCY,KRR,KSV,KTCOUNT,                     &
+            PLBXUM,PLBXVM,PLBXWM,PLBXTHM,PLBXTKEM,PLBXRM,PLBXSVM,   &
+            PLBYUM,PLBYVM,PLBYWM,PLBYTHM,PLBYTKEM,PLBYRM,PLBYSVM,   &
+            PLBXUS,PLBXVS,PLBXWS,PLBXTHS,PLBXTKES,PLBXRS,PLBXSVS,   &
+            PLBYUS,PLBYVS,PLBYWS,PLBYTHS,PLBYTKES,PLBYRS,PLBYSVS,   &
+            PRHODJ,PRHODREF,                                        &
+            PUT,PVT,PWT,PTHT,PTKET,PRT,PSVT,PSRCT                   )
+!     ####################################################################
+!
+!!****  *BOUNDARIES* - routine to prepare the Lateral Boundary Conditions for
+!!                 all variables at a scalar localization relative to the 
+!!                 considered boundary.
+!!
+!!    PURPOSE
+!!    -------
+!       Fill up the left and right lateral EXTernal zones, for all prognostic
+!       variables, at time t and t-dt, to avoid particular cases close to
+!       the Lateral Boundaries in routines computing the evolution terms, in
+!       particular in the advection routines.
+!
+!!**  METHOD
+!!    ------
+!!      3 different options are proposed: 'WALL' 'CYCL' 'OPEN'
+!!                    to define the Boundary Condition type,
+!!      though the variables HLBCX and HLBCY (for the X and Y-directions
+!!      respectively).
+!!       For the 'OPEN' type of LBC, the treatment depends
+!!      on the flow configuration: i.e. INFLOW or OUTFLOW conditions.
+!!   
+!!    EXTERNAL 
+!!    --------  
+!!    GET_INDICE_ll  : get physical sub-domain bounds
+!!    LWEAST_ll,LEAST_ll,LNORTH_ll,LSOUTH_ll : position functions
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------  
+!!      Module MODD_PARAMETERS : 
+!!        JPHEXT ,JPVEXT 
+!!
+!!      Module MODD_CONF :
+!!        CCONF
+!!
+!!      Module MODE_UPDATE_NSV :
+!!        NSV_CHEM, NSV_CHEMBEG, NSV_CHEMEND
+!!
+!!      Module MODD_CTURB :
+!!        XTKEMIN 
+!!
+!!    REFERENCE
+!!    ---------
+!!      Book1 and book2 of documentation (routine BOUNDARIES)
+!!
+!!    AUTHOR
+!!    ------
+!!	J.-P. Lafore J. Stein     * Meteo France *
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original        17/10/94 
+!!      Modification    02/11/94  (J.Stein) copy for t-dt at the external points
+!!                                          + change the copy formulation
+!!      Modification    18/11/94  (J.Stein) bug correction in the normal velocity
+!!                                          prescription in the WALL cases
+!!      Modification    13/02/95  (Lafore)  to account for the OPEN case and
+!!                                          for the LS fields introduction
+!!      Modification    03/03/95  (Mallet)  corrections in variables names in 
+!!                                          the Y-OPEN case
+!!                      16/03/95  (J.Stein) remove R from the historical variables
+!!      Modification    31/05/95  (Lafore)  MASTER_DEV2.1 preparation after the
+!!                                          LBC tests performed by I. Mallet
+!!      Modification    15/03/96  (Richard) bug correction for OPEN CASE: (TOP Y-LBC)
+!!                                          Rv case 
+!!      Modification    15/03/96  (Shure)   bug correction for SV variable in
+!!                                          open x  right case
+!!      Modification    24/10/96  (Masson)  initialization of outer points in
+!!                                          wall cases for spawning interpolations
+!!      Modification    13/03/97  (Lafore)  "surfacic" LS-fields introduction
+!!      Modification    10/04/97  (Lafore)  proper treatment of minima for TKE and EPS
+!!      Modification    01/09/97  (Masson)  minimum value for water and passive
+!!                                          scalars set to zero at instants M,T
+!!      Modification    20/10/97  (Lafore)  introduction of DAVI type of lbc
+!!                                           suppression of NEST type
+!!      Modification    12/11/97  ( Stein ) use the lB fields
+!!      Modification    02/06/98  (Lafore)  declaration of local variables (PLBXUM
+!!                                          and PLBXWM do'nt have the same size)
+!!      Modification    24/08/98   (Jabouille) parallelize the code 
+!!      Modification    20/04/99  ( Stein ) use the same conditions for times t
+!!                                          and t-dt
+!!      Modification    11/04/00  (Mari)    special conditions for chemical variables
+!!      Modification    10/01/01  (Tulet)   update for MOCAGE boundary conditions
+!!      Modification    22/01/01  (Gazen)   use NSV_CHEM,NSV_CHEMBEG,NSV_CHEMEND variables
+!!      Modification    22/06/01(Jabouille) use XSVMIN
+!!      Modification    20/11/01(Gazen & Escobar) rewrite GCHBOUNDARY for portability
+!!      Modification    14/03/05 (Tulet)    bug : in case of CYCL do not call ch_boundaries
+!!      Modification    14/05/05 (Tulet)    add aerosols / dust
+!!      Modification    05/06               Suppression of DAVI type of lbc
+!!      Modification    05/06               Remove EPS
+!!      Modification    12/2010  (Chong)    Add boundary condition for ions
+!!                                          (fair weather profiles)
+!!      Modification    07/2013  (Bosseur & Filippi) adds Forefire
+!!      Modification    04/2013  (C.Lac)    Remove instant M               
+!!      Modification    01/2015  (JL Redelsperger) Introduction of ponderation
+!!                                 for non normal velocity and potential temp
+!!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
+!!      Redelsperger & Pianezze : 08/2015 : add XPOND coefficient
+!!      Modification    01/2016  (JP Pinty) Add LIMA that is LBC for CCN and IFN
+!!      Modification    18/07/17 (Vionnet)  Add blowing snow variables 
+!!      Modification    01/2018  (JL Redelsperger) Correction for TKE treatment
+!!      Modification    03/02/2020 (B. Vié)  Correction for SV with LIMA
+!  P. Wautelet 04/06/2020: correct call to Set_conc_lima
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!         
+USE MODD_BLOWSNOW,  ONLY : LBLOWSNOW,NBLOWSNOW_2D
+USE MODD_BLOWSNOW_n
+USE MODD_CH_AEROSOL , ONLY : LORILAM
+USE MODD_CH_MNHC_n,   ONLY : LUSECHEM, LUSECHIC
+USE MODD_CONDSAMP,    ONLY : LCONDSAMP
+USE MODD_CONF
+USE MODD_CTURB
+USE MODD_DUST
+USE MODD_GRID_n,    ONLY : XZZ
+USE MODD_ELEC_DESCR
+USE MODD_ELEC_n
+#ifdef MNH_FOREFIRE
+USE MODD_FOREFIRE,   ONLY : LFOREFIRE
+#endif
+USE MODD_LBC_n,      ONLY : XPOND
+USE MODE_ll
+USE MODD_NESTING,      ONLY : NDAD
+USE MODD_NSV
+USE MODD_PARAMETERS
+USE MODD_PARAM_LIMA, ONLY : NMOD_CCN, NMOD_IFN, LBOUND
+USE MODD_PARAM_n,    ONLY : CELEC,CCLOUD
+USE MODD_PASPOL,      ONLY : LPASPOL
+USE MODD_PRECISION,   ONLY: MNHREAL32
+USE MODD_REF_n
+USE MODD_SALT,        ONLY : LSALT
+
+USE MODE_MODELN_HANDLER
+USE MODE_SET_CONC_LIMA
+
+USE MODI_CH_BOUNDARIES
+USE MODI_INIT_AEROSOL_CONCENTRATION
+USE MODI_ION_BOUNDARIES
+
+IMPLICIT NONE
+!
+!
+!*       0.1   declarations of arguments
+!
+!
+!
+!
+REAL,                  INTENT(IN) :: PTSTEP        ! time step dt
+CHARACTER(LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX,HLBCY   ! X and Y-direc. LBC type
+!
+INTEGER,               INTENT(IN) :: KRR           ! Number of moist  variables
+INTEGER,               INTENT(IN) :: KSV           ! Number of Scalar Variables
+INTEGER,               INTENT(IN) :: KTCOUNT       ! Temporal loop COUNTer
+                                                   ! (=1 at the segment beginning)
+!
+! Lateral Boundary fields at time t
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXUM,PLBXVM,PLBXWM ! Wind
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXTHM              ! Mass
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBYUM,PLBYVM,PLBYWM ! Wind
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBYTHM              ! Mass
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXTKEM          ! TKE
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBYTKEM
+REAL, DIMENSION(:,:,:,:),        INTENT(IN) :: PLBXRM  ,PLBXSVM  ! Moisture and SV
+REAL, DIMENSION(:,:,:,:),        INTENT(IN) :: PLBYRM  ,PLBYSVM  ! in x and y-dir.
+! temporal derivative of the Lateral Boundary fields
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXUS,PLBXVS,PLBXWS ! Wind
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXTHS              ! Mass
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBYUS,PLBYVS,PLBYWS ! Wind
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBYTHS              ! Mass
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXTKES          ! TKE
+REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBYTKES
+REAL, DIMENSION(:,:,:,:),        INTENT(IN) :: PLBXRS  ,PLBXSVS  ! Moisture and SV
+REAL, DIMENSION(:,:,:,:),        INTENT(IN) :: PLBYRS  ,PLBYSVS  ! in x and y-dir.
+!
+REAL, DIMENSION(:,:,:),   INTENT(IN) :: PRHODJ    ! Jacobian * dry density of
+                                                  !  the reference state
+REAL, DIMENSION(:,:,:),   INTENT(IN) :: PRHODREF
+!
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PUT,PVT,PWT,PTHT,PTKET,PSRCT
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRT,PSVT
+                                                      ! Variables at t
+!
+!*       0.2   declarations of local variables
+!
+INTEGER             :: IIB       ! indice I Beginning in x direction
+INTEGER             :: IJB       ! indice J Beginning in y direction
+INTEGER             :: IKB       ! indice K Beginning in z direction
+INTEGER             :: IIE       ! indice I End       in x direction 
+INTEGER             :: IJE       ! indice J End       in y direction 
+INTEGER             :: IKE       ! indice K End       in z direction 
+INTEGER             :: JEXT      ! Loop index for EXTernal points
+INTEGER             :: JRR       ! Loop index for RR variables (water)
+INTEGER             :: JSV       ! Loop index for Scalar Variables
+INTEGER             :: IMI       ! Model Index
+REAL                :: ZTSTEP    ! effective time step
+REAL                :: ZPOND      !  Coeff PONDERATION LS 
+INTEGER             :: ILBX,ILBY ! size of LB fields' arrays
+LOGICAL, SAVE, DIMENSION(:), ALLOCATABLE :: GCHBOUNDARY, GAERBOUNDARY,&
+                    GDSTBOUNDARY, GSLTBOUNDARY, GPPBOUNDARY,          &
+                    GCSBOUNDARY, GICBOUNDARY, GLIMABOUNDARY,GSNWBOUNDARY 
+LOGICAL, SAVE        :: GFIRSTCALL1 = .TRUE.
+LOGICAL, SAVE        :: GFIRSTCALL2 = .TRUE.
+LOGICAL, SAVE        :: GFIRSTCALL3 = .TRUE.
+LOGICAL, SAVE        :: GFIRSTCALL5 = .TRUE. 
+LOGICAL, SAVE        :: GFIRSTCALLPP = .TRUE.                         
+LOGICAL, SAVE        :: GFIRSTCALLCS = .TRUE.                         
+LOGICAL, SAVE        :: GFIRSTCALLIC = .TRUE.                 
+LOGICAL, SAVE        :: GFIRSTCALLLIMA = .TRUE.                 
+!
+REAL, DIMENSION(SIZE(PLBXWM,1),SIZE(PLBXWM,2),SIZE(PLBXWM,3)) ::  &
+                       ZLBXVT,ZLBXWT,ZLBXTHT
+REAL, DIMENSION(SIZE(PLBYWM,1),SIZE(PLBYWM,2),SIZE(PLBYWM,3)) ::  &
+                       ZLBYUT,ZLBYWT,ZLBYTHT
+REAL, DIMENSION(SIZE(PLBXTKEM,1),SIZE(PLBXTKEM,2),SIZE(PLBXTKEM,3)) ::  &
+                       ZLBXTKET
+REAL, DIMENSION(SIZE(PLBYTKEM,1),SIZE(PLBYTKEM,2),SIZE(PLBYTKEM,3)) ::  &
+                       ZLBYTKET
+REAL, DIMENSION(SIZE(PLBXRM,1),SIZE(PLBXRM,2),SIZE(PLBXRM,3),SIZE(PLBXRM,4)) :: &
+                       ZLBXRT
+REAL, DIMENSION(SIZE(PLBYRM,1),SIZE(PLBYRM,2),SIZE(PLBYRM,3),SIZE(PLBYRM,4)) :: &
+                       ZLBYRT
+REAL, DIMENSION(SIZE(PLBXSVM,1),SIZE(PLBXSVM,2),SIZE(PLBXSVM,3),SIZE(PLBXSVM,4)) :: &
+                       ZLBXSVT
+REAL, DIMENSION(SIZE(PLBYSVM,1),SIZE(PLBYSVM,2),SIZE(PLBYSVM,3),SIZE(PLBYSVM,4)) :: &
+                       ZLBYSVT
+LOGICAL              :: GCHTMP
+LOGICAL              :: GPPTMP
+LOGICAL              :: GCSTMP
+!
+LOGICAL, SAVE        :: GFIRSTCALL4 = .TRUE.
+!
+#ifdef MNH_FOREFIRE
+LOGICAL, SAVE, DIMENSION(:), ALLOCATABLE ::  GFFBOUNDARY
+LOGICAL, SAVE        :: GFIRSTCALLFF = .TRUE.                         
+LOGICAL              :: GFFTMP
+#endif
+!
+INTEGER              :: JI,JJ
+!
+REAL, DIMENSION(SIZE(PSVT,1),SIZE(PSVT,2),SIZE(PSVT,3),SIZE(PSVT,4)) :: ZSVT
+REAL, DIMENSION(SIZE(PRT,1),SIZE(PRT,2),SIZE(PRT,3),SIZE(PRT,4)) :: ZRT
+!
+!-------------------------------------------------------------------------------
+!
+!*       1.    COMPUTE DIMENSIONS OF ARRAYS AND OTHER INDICES:
+!              ----------------------------------------------
+CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
+IKB = 1 + JPVEXT
+IKE = SIZE(PUT,3) - JPVEXT
+IMI = GET_CURRENT_MODEL_INDEX()
+!
+!-------------------------------------------------------------------------------
+!
+!*       2.    UPPER AND LOWER BC FILLING:   
+!              ---------------------------
+!
+!*       2.1    COMPUTE THE FIELD EXTRAPOLATIONS AT THE GROUND
+!
+
+!
+!          at the instant t
+!
+IF(SIZE(PUT) /= 0) PUT  (:,:,IKB-1)   = PUT  (:,:,IKB) 
+IF(SIZE(PVT) /= 0) PVT  (:,:,IKB-1)   = PVT  (:,:,IKB) 
+IF(SIZE(PWT) /= 0) PWT  (:,:,IKB-1)   = PWT  (:,:,IKB)  
+IF(SIZE(PTHT) /= 0) PTHT (:,:,IKB-1)  = PTHT (:,:,IKB) 
+IF(SIZE(PTKET) /= 0) PTKET(:,:,IKB-1) = PTKET(:,:,IKB)
+IF(SIZE(PRT) /= 0)  PRT  (:,:,IKB-1,:)= PRT  (:,:,IKB,:)
+IF(SIZE(PSVT)/= 0)  PSVT (:,:,IKB-1,:)= PSVT (:,:,IKB,:)
+IF(SIZE(PSRCT) /= 0) PSRCT(:,:,IKB-1)   = PSRCT(:,:,IKB)
+!
+!
+!*       2.2    COMPUTE THE FIELD EXTRAPOLATIONS AT THE TOP
+!
+!          at the instant t
+!
+IF(SIZE(PWT) /= 0) PWT  (:,:,IKE+1)   = 0.           
+IF(SIZE(PUT) /= 0) PUT  (:,:,IKE+1)   = PUT  (:,:,IKE) 
+IF(SIZE(PVT) /= 0) PVT  (:,:,IKE+1)   = PVT  (:,:,IKE)
+IF(SIZE(PTHT) /= 0) PTHT (:,:,IKE+1)  = PTHT (:,:,IKE)
+IF(SIZE(PTKET) /= 0) PTKET(:,:,IKE+1) = PTKET(:,:,IKE)
+IF(SIZE(PRT) /= 0) PRT  (:,:,IKE+1,:) = PRT  (:,:,IKE,:)
+IF(SIZE(PSVT)/= 0) PSVT (:,:,IKE+1,:) = PSVT (:,:,IKE,:)
+IF(SIZE(PSRCT) /= 0) PSRCT(:,:,IKE+1)   = PSRCT(:,:,IKE)
+
+! specific for positive and negative ions mixing ratios (1/kg)
+
+IF (NSV_ELEC .NE. 0) THEN
+!
+   IF (SIZE(PWT) /= 0) THEN
+     WHERE ( PWT(:,:,IKE+1)  .GE. 0.)    ! Outflow
+         PSVT (:,:,IKE+1,NSV_ELECBEG) = 2.*PSVT (:,:,IKE,NSV_ELECBEG) -  &
+                                           PSVT (:,:,IKE-1,NSV_ELECBEG)
+         PSVT (:,:,IKE+1,NSV_ELECEND) = 2.*PSVT (:,:,IKE,NSV_ELECEND) -  &
+                                           PSVT (:,:,IKE-1,NSV_ELECEND)
+     ELSE WHERE                         ! Inflow from the top
+         PSVT (:,:,IKE+1,NSV_ELECBEG) = XCION_POS_FW(:,:,IKE+1)
+         PSVT (:,:,IKE+1,NSV_ELECEND) = XCION_NEG_FW(:,:,IKE+1)
+     END WHERE
+   ENDIF
+!
+END IF
+
+!
+!
+!-------------------------------------------------------------------------------
+!
+!*       3.    COMPUTE LB FIELDS AT TIME T
+!              ---------------------------
+!
+!
+IF ( KTCOUNT == 1) THEN
+  ZTSTEP = 0.
+ELSE
+  ZTSTEP = PTSTEP
+END IF
+!
+!
+IF ( SIZE(PLBXTHS,1) /= 0 .AND.                      &
+   (     HLBCX(1)=='OPEN' .OR. HLBCX(2)=='OPEN')     ) THEN            
+  ZLBXVT(:,:,:) = PLBXVM(:,:,:) + ZTSTEP * PLBXVS(:,:,:)
+  ZLBXWT(:,:,:) = PLBXWM(:,:,:) + ZTSTEP * PLBXWS(:,:,:)
+  ZLBXTHT(:,:,:) = PLBXTHM(:,:,:) + ZTSTEP * PLBXTHS(:,:,:)
+  IF ( SIZE(PTKET,1) /= 0 ) THEN
+    ZLBXTKET(:,:,:) = PLBXTKEM(:,:,:) + ZTSTEP * PLBXTKES(:,:,:)
+  END IF
+  IF ( KRR > 0) THEN
+    ZLBXRT(:,:,:,:) = PLBXRM(:,:,:,:) + ZTSTEP * PLBXRS(:,:,:,:)
+  END IF
+  IF ( KSV > 0) THEN
+    ZLBXSVT(:,:,:,:) = PLBXSVM(:,:,:,:) + ZTSTEP * PLBXSVS(:,:,:,:)
+  END IF
+!
+ELSE
+!
+  ZLBXVT(:,:,:) = PLBXVM(:,:,:)
+  ZLBXWT(:,:,:) = PLBXWM(:,:,:)
+  ZLBXTHT(:,:,:) = PLBXTHM(:,:,:)
+  IF ( SIZE(PTKET,1) /= 0 ) THEN
+    ZLBXTKET(:,:,:) = PLBXTKEM(:,:,:) 
+  END IF
+  IF ( KRR > 0) THEN
+    ZLBXRT(:,:,:,:) = PLBXRM(:,:,:,:) 
+  END IF
+  IF ( KSV > 0) THEN
+    ZLBXSVT(:,:,:,:) = PLBXSVM(:,:,:,:) 
+  END IF
+!
+END IF
+!
+!     ============================================================    
+!
+!  Reproductibility for RSTART -> truncate ZLB to real(knd=4) to have reproductible result
+!
+ZLBXVT(:,:,:)  = real(ZLBXVT(:,:,:),kind=MNHREAL32)
+ZLBXWT(:,:,:)  = real(ZLBXWT(:,:,:),kind=MNHREAL32)
+ZLBXTHT(:,:,:) = real(ZLBXTHT(:,:,:),kind=MNHREAL32)
+IF ( SIZE(PTKET,1) /= 0 ) THEN
+   ZLBXTKET(:,:,:) = real(ZLBXTKET(:,:,:),kind=MNHREAL32)
+END IF
+IF ( KRR > 0) THEN
+   ZLBXRT(:,:,:,:) = real(ZLBXRT(:,:,:,:),kind=MNHREAL32)
+END IF
+IF ( KSV > 0) THEN
+   ZLBXSVT(:,:,:,:) = real(ZLBXSVT(:,:,:,:),kind=MNHREAL32)
+END IF
+!     ============================================================ 
+!
+IF ( SIZE(PLBYTHS,1) /= 0 .AND.                       &
+     (    HLBCY(1)=='OPEN' .OR. HLBCY(2)=='OPEN'    ))  THEN          
+  ZLBYUT(:,:,:) = PLBYUM(:,:,:) + ZTSTEP * PLBYUS(:,:,:)
+  ZLBYWT(:,:,:) = PLBYWM(:,:,:) + ZTSTEP * PLBYWS(:,:,:)
+  ZLBYTHT(:,:,:) = PLBYTHM(:,:,:) + ZTSTEP * PLBYTHS(:,:,:)
+  IF ( SIZE(PTKET,1) /= 0 ) THEN
+    ZLBYTKET(:,:,:) = PLBYTKEM(:,:,:) + ZTSTEP * PLBYTKES(:,:,:)
+  END IF
+  IF ( KRR > 0) THEN
+    ZLBYRT(:,:,:,:) = PLBYRM(:,:,:,:) + ZTSTEP * PLBYRS(:,:,:,:)
+  END IF
+  IF ( KSV > 0) THEN
+    ZLBYSVT(:,:,:,:) = PLBYSVM(:,:,:,:) + ZTSTEP * PLBYSVS(:,:,:,:)
+  END IF
+!
+ELSE
+!
+  ZLBYUT(:,:,:) = PLBYUM(:,:,:)
+  ZLBYWT(:,:,:) = PLBYWM(:,:,:)
+  ZLBYTHT(:,:,:) = PLBYTHM(:,:,:)
+  IF ( SIZE(PTKET,1) /= 0 ) THEN
+    ZLBYTKET(:,:,:) = PLBYTKEM(:,:,:) 
+  END IF
+  IF ( KRR > 0) THEN
+    ZLBYRT(:,:,:,:) = PLBYRM(:,:,:,:) 
+  END IF
+  IF ( KSV > 0) THEN
+    ZLBYSVT(:,:,:,:) = PLBYSVM(:,:,:,:) 
+  END IF
+!
+END IF
+!
+!
+!     ============================================================    
+!
+!  Reproductibility for RSTART -> truncate ZLB to real(knd=4) to have reproductible result
+!
+ZLBYUT(:,:,:)  = real(ZLBYUT(:,:,:),kind=MNHREAL32)
+ZLBYWT(:,:,:)  = real(ZLBYWT(:,:,:),kind=MNHREAL32)
+ZLBYTHT(:,:,:) = real(ZLBYTHT(:,:,:),kind=MNHREAL32)
+IF ( SIZE(PTKET,1) /= 0 ) THEN
+   ZLBYTKET(:,:,:) = real(ZLBYTKET(:,:,:),kind=MNHREAL32)
+END IF
+IF ( KRR > 0) THEN
+   ZLBYRT(:,:,:,:) = real(ZLBYRT(:,:,:,:),kind=MNHREAL32)
+END IF
+IF ( KSV > 0) THEN
+   ZLBYSVT(:,:,:,:) = real(ZLBYSVT(:,:,:,:),kind=MNHREAL32)
+END IF
+!     ============================================================ 
+!
+!-------------------------------------------------------------------------------
+! PONDERATION COEFF for  Non-Normal velocities and pot temperature
+!
+ZPOND = XPOND
+!
+!*       4.    LBC FILLING IN THE X DIRECTION (LEFT WEST SIDE):   
+!              ------------------------------------------------
+IF (LWEST_ll( )) THEN
+!
+!
+SELECT CASE ( HLBCX(1) )  
+!
+!*       4.1  WALL CASE:  
+!             ========= 
+!
+  CASE ('WALL')
+!
+    DO JEXT=1,JPHEXT
+       IF(SIZE(PUT) /= 0) PUT  (IIB-JEXT,:,:)   = PUT  (IIB       ,:,:)   ! never used during run
+       IF(SIZE(PVT) /= 0) PVT  (IIB-JEXT,:,:)   = PVT  (IIB-1+JEXT,:,:)
+       IF(SIZE(PWT) /= 0) PWT  (IIB-JEXT,:,:)   = PWT  (IIB-1+JEXT,:,:)
+       IF(SIZE(PTHT) /= 0) PTHT(IIB-JEXT,:,:)   = PTHT (IIB-1+JEXT,:,:)
+       IF(SIZE(PTKET)/= 0) PTKET(IIB-JEXT,:,:)  = PTKET(IIB-1+JEXT,:,:)
+       IF(SIZE(PRT) /= 0) PRT  (IIB-JEXT,:,:,:) = PRT  (IIB-1+JEXT,:,:,:)
+       IF(SIZE(PSVT) /= 0) PSVT(IIB-JEXT,:,:,:) = PSVT (IIB-1+JEXT,:,:,:)
+       IF(SIZE(PSRCT) /= 0) PSRCT (IIB-JEXT,:,:)   = PSRCT (IIB-1+JEXT,:,:)
+       IF(LBLOWSNOW) XSNWCANO(IIB-JEXT,:,:)     = XSNWCANO(IIB-1+JEXT,:,:)            
+!
+    END DO
+!
+    IF(SIZE(PUT) /= 0) PUT(IIB     ,:,:)   = 0.    ! set the normal velocity
+!
+!
+!*       4.2  OPEN CASE:
+!             =========
+!
+  CASE ('OPEN')
+!
+    IF(SIZE(PUT) /= 0) THEN
+       DO JI=JPHEXT,1,-1
+          PUT(JI,:,:)=0.
+          WHERE ( PUT(IIB,:,:) <= 0. )               !  OUTFLOW condition
+             PVT  (JI,:,:) = 2.*PVT  (JI+1,:,:)  -PVT  (JI+2,:,:)
+             PWT  (JI,:,:) = 2.*PWT  (JI+1,:,:)  -PWT  (JI+2,:,:)
+             PTHT (JI,:,:) = 2.*PTHT (JI+1,:,:)  -PTHT (JI+2,:,:)
+             !
+          ELSEWHERE                                   !  INFLOW  condition
+             PVT  (JI,:,:) = ZPOND*ZLBXVT   (JI,:,:) + (1.-ZPOND)* PVT(JI+1,:,:) ! 1 
+             PWT  (JI,:,:) = ZPOND*ZLBXWT   (JI,:,:) + (1.-ZPOND)* PWT(JI+1,:,:) ! 1
+             PTHT (JI,:,:) = ZPOND*ZLBXTHT  (JI,:,:) + (1.-ZPOND)* PTHT(JI+1,:,:)! 1
+          ENDWHERE
+       ENDDO
+    ENDIF
+!
+!
+  IF(SIZE(PTKET) /= 0) THEN
+     DO JI=JPHEXT,1,-1
+        WHERE ( PUT(IIB,:,:) <= 0. )               !  OUTFLOW condition
+           PTKET(JI,:,:) = MAX(XTKEMIN, 2.*PTKET(JI+1,:,:)-PTKET(JI+2,:,:))  
+        ELSEWHERE                                  !  INFLOW  condition
+           PTKET(JI,:,:) = MAX(XTKEMIN, ZPOND*ZLBXTKET(JI,:,:) + (1.-ZPOND)*PTKET(JI+1,:,:))
+        ENDWHERE
+     ENDDO
+  END IF
+    !
+!                      Case with KRR moist variables 
+! 
+! 
+!
+  DO JRR =1 ,KRR
+     IF(SIZE(PUT) /= 0) THEN
+        DO JI=JPHEXT,1,-1
+           WHERE ( PUT(IIB,:,:) <= 0. )         !  OUTFLOW condition
+              PRT(JI,:,:,JRR) = MAX(0.,2.*PRT(JI+1,:,:,JRR) -PRT(JI+2,:,:,JRR))
+           ELSEWHERE                            !  INFLOW  condition
+              PRT(JI,:,:,JRR) = MAX(0.,ZLBXRT(JI,:,:,JRR)) ! 1
+           END WHERE
+        END DO
+     END IF
+     !
+  END DO
+!
+  IF(SIZE(PSRCT) /= 0) THEN
+     DO JI=JPHEXT,1,-1
+        PSRCT (JI,:,:)   = PSRCT (JI+1,:,:)
+     END DO
+  END IF
+!
+!                       Case with KSV scalar variables  
+  DO JSV=1 ,KSV
+    IF(SIZE(PUT) /= 0) THEN
+       DO JI=JPHEXT,1,-1
+          WHERE ( PUT(IIB,:,:) <= 0. )         !  OUTFLOW condition
+             PSVT(JI,:,:,JSV) = MAX(XSVMIN(JSV),2.*PSVT(JI+1,:,:,JSV) - &
+                  PSVT(JI+2,:,:,JSV))
+          ELSEWHERE                            !  INFLOW  condition
+             PSVT(JI,:,:,JSV) = MAX(XSVMIN(JSV),ZLBXSVT(JI,:,:,JSV)) ! 1
+          END WHERE
+       END DO
+    END IF
+    !
+  END DO
+  !
+    IF(LBLOWSNOW) THEN
+    DO JSV=1 ,NBLOWSNOW_2D
+      WHERE ( PUT(IIB,:,IKB) <= 0. )         !  OUTFLOW condition
+        XSNWCANO(IIB-1,:,JSV) = MAX(0.,2.*XSNWCANO(IIB,:,JSV) - &
+                                             XSNWCANO(IIB+1,:,JSV))
+      ELSEWHERE                            !  INFLOW  condition
+        XSNWCANO(IIB-1,:,JSV) = 0.         ! Assume no snow enter throug
+                                           ! boundaries
+      END WHERE
+    END DO
+   DO JSV=NSV_SNWBEG ,NSV_SNWEND
+    IF(SIZE(PUT) /= 0) THEN
+      WHERE ( PUT(IIB,:,:) <= 0. )         !  OUTFLOW condition
+        PSVT(IIB-1,:,:,JSV) = MAX(0.,2.*PSVT(IIB,:,:,JSV) - &
+                                               PSVT(IIB+1,:,:,JSV))
+      ELSEWHERE                            !  INFLOW  condition
+        PSVT(IIB-1,:,:,JSV) = 0.           ! Assume no snow enter throug
+                                           ! boundaries
+      END WHERE
+    END IF
+    !
+   END DO
+  ENDIF  
+!
+!
+END SELECT
+!
+END IF
+!-------------------------------------------------------------------------------
+!
+!*       5    LBC FILLING IN THE X DIRECTION (RIGHT EAST SIDE): 
+!              ===============--------------------------------
+!
+IF (LEAST_ll( )) THEN
+!
+SELECT CASE ( HLBCX(2) ) 
+!
+!*       5.1  WALL CASE:
+!             =========
+!
+  CASE ('WALL')
+!
+    DO JEXT=1,JPHEXT
+       IF(SIZE(PUT) /= 0) PUT  (IIE+JEXT,:,:)   = PUT  (IIE       ,:,:)   ! never used during run
+       IF(SIZE(PVT) /= 0) PVT  (IIE+JEXT,:,:)   = PVT  (IIE+1-JEXT,:,:)
+       IF(SIZE(PWT) /= 0) PWT  (IIE+JEXT,:,:)   = PWT  (IIE+1-JEXT,:,:)
+       IF(SIZE(PTHT) /= 0) PTHT (IIE+JEXT,:,:)  = PTHT (IIE+1-JEXT,:,:)
+       IF(SIZE(PTKET) /= 0) PTKET(IIE+JEXT,:,:) = PTKET(IIE+1-JEXT,:,:)
+       IF(SIZE(PRT) /= 0) PRT  (IIE+JEXT,:,:,:) = PRT  (IIE+1-JEXT,:,:,:)
+       IF(SIZE(PSVT) /= 0) PSVT(IIE+JEXT,:,:,:) = PSVT (IIE+1-JEXT,:,:,:)
+       IF(SIZE(PSRCT) /= 0) PSRCT (IIE+JEXT,:,:)= PSRCT (IIE+1-JEXT,:,:)
+       IF(LBLOWSNOW) XSNWCANO(IIE+JEXT,:,:) = XSNWCANO(IIE+1-JEXT,:,:)           
+!
+    END DO
+!
+    IF(SIZE(PUT) /= 0) PUT(IIE+1   ,:,:)   = 0.     ! set the normal velocity
+!
+!*       5.2  OPEN CASE:
+!             =========
+!
+  CASE ('OPEN')
+!
+     ILBX = SIZE(PLBXVM,1)
+     IF(SIZE(PUT) /= 0) THEN
+        DO JI=1,JPHEXT
+           WHERE ( PUT(IIE+1,:,:) >= 0. )               !  OUTFLOW condition
+              PVT  (IIE+JI,:,:) = 2.*PVT  (IIE+JI-1,:,:)   -PVT  (IIE+JI-2,:,:)
+              PWT  (IIE+JI,:,:) = 2.*PWT  (IIE+JI-1,:,:)   -PWT  (IIE+JI-2,:,:)
+              PTHT (IIE+JI,:,:) = 2.*PTHT (IIE+JI-1,:,:)   -PTHT (IIE+JI-2,:,:)
+              !
+           ELSEWHERE                                   !  INFLOW  condition
+              PVT  (IIE+JI,:,:) = ZPOND*ZLBXVT   (ILBX-JPHEXT+JI,:,:) + (1.-ZPOND)* PVT(IIE+JI-1,:,:)
+              PWT  (IIE+JI,:,:) = ZPOND*ZLBXWT   (ILBX-JPHEXT+JI,:,:) + (1.-ZPOND)* PWT(IIE+JI-1,:,:)
+              PTHT (IIE+JI,:,:) = ZPOND*ZLBXTHT  (ILBX-JPHEXT+JI,:,:) + (1.-ZPOND)* PTHT(IIE+JI-1,:,:)
+           ENDWHERE
+        END DO
+     ENDIF
+     !
+     IF(SIZE(PTKET) /= 0) THEN
+        ILBX = SIZE(PLBXTKEM,1)
+        DO JI=1,JPHEXT
+           WHERE ( PUT(IIE+1,:,:) >= 0. )             !  OUTFLOW condition
+              PTKET(IIE+JI,:,:) = MAX(XTKEMIN, 2.*PTKET(IIE+JI-1,:,:)-PTKET(IIE+JI-2,:,:))  
+           ELSEWHERE                                  !  INFLOW  condition
+              PTKET(IIE+JI,:,:) =  MAX(XTKEMIN, ZPOND*ZLBXTKET(ILBX-JPHEXT+JI,:,:) + &
+                                   (1.-ZPOND)*PTKET(IIE+JI-1,:,:))
+           ENDWHERE
+        END DO
+     END IF
+    !
+!
+!                      Case with KRR moist variables 
+! 
+! 
+  DO JRR =1 ,KRR
+    ILBX=SIZE(PLBXRM,1)
+    !
+    IF(SIZE(PUT) /= 0) THEN
+       DO JI=1,JPHEXT  
+          WHERE ( PUT(IIE+1,:,:) >= 0. )       !  OUTFLOW condition
+             PRT(IIE+JI,:,:,JRR) = MAX(0.,2.*PRT(IIE+JI-1,:,:,JRR) -PRT(IIE+JI-2,:,:,JRR))
+          ELSEWHERE                            !  INFLOW  condition
+             PRT(IIE+JI,:,:,JRR) = MAX(0.,ZLBXRT(ILBX-JPHEXT+JI,:,:,JRR))
+          END WHERE
+       END DO
+    END IF
+    !
+  END DO
+!
+  IF(SIZE(PSRCT) /= 0) THEN
+     DO JI=1,JPHEXT 
+        PSRCT (IIE+JI,:,:)   = PSRCT (IIE+JI-1,:,:)
+     END DO
+  END IF
+!                       Case with KSV scalar variables  
+  DO JSV=1 ,KSV
+    ILBX=SIZE(PLBXSVM,1)
+    IF(SIZE(PUT) /= 0) THEN
+       DO JI=1,JPHEXT 
+          WHERE ( PUT(IIE+1,:,:) >= 0. )       !  OUTFLOW condition
+             PSVT(IIE+JI,:,:,JSV) = MAX(XSVMIN(JSV),2.*PSVT(IIE+JI-1,:,:,JSV) - &
+                  PSVT(IIE+JI-2,:,:,JSV))
+          ELSEWHERE                            !  INFLOW  condition
+             PSVT(IIE+JI,:,:,JSV) = MAX(XSVMIN(JSV),ZLBXSVT(ILBX-JPHEXT+JI,:,:,JSV))
+          END WHERE
+       END DO
+    END IF
+    !
+  END DO
+!
+  IF(LBLOWSNOW) THEN
+    DO JSV=1 ,3
+      WHERE ( PUT(IIE+1,:,IKB) >= 0. )       !  OUTFLOW condition
+        XSNWCANO(IIE+1,:,JSV) = MAX(0.,2.*XSNWCANO(IIE,:,JSV) - &
+                                              XSNWCANO(IIE-1,:,JSV))
+      ELSEWHERE                            !  INFLOW  condition
+        XSNWCANO(IIE+1,:,JSV) = 0.         ! Assume no snow enter throug
+                                           ! boundaries
+      END WHERE
+    END DO
+    DO JSV=NSV_SNWBEG ,NSV_SNWEND
+    IF(SIZE(PUT) /= 0) THEN
+      WHERE ( PUT(IIE+1,:,:) >= 0. )       !  OUTFLOW condition
+        PSVT(IIE+1,:,:,JSV) = MAX(0.,2.*PSVT(IIE,:,:,JSV) - &
+                                               PSVT(IIE-1,:,:,JSV))
+      ELSEWHERE                            !  INFLOW  condition
+        PSVT(IIE+1,:,:,JSV) = 0.           ! Assume no snow enter throug
+                                           ! boundaries
+      END WHERE
+    END IF
+    !
+  END DO
+  END IF
+!
+END SELECT
+!
+END IF
+!-------------------------------------------------------------------------------
+!
+!*       6.    LBC FILLING IN THE Y DIRECTION (BOTTOM SOUTH SIDE): 
+!              ------------------------------
+IF (LSOUTH_ll( )) THEN
+!
+SELECT CASE ( HLBCY(1) )              
+!
+!*       6.1  WALL CASE:
+!             ========= 
+!
+  CASE ('WALL')
+!
+    DO JEXT=1,JPHEXT
+       IF(SIZE(PUT) /= 0) PUT  (:,IJB-JEXT,:)   = PUT  (:,IJB-1+JEXT,:)
+       IF(SIZE(PVT) /= 0) PVT  (:,IJB-JEXT,:)   = PVT  (:,IJB       ,:)   ! never used during run
+       IF(SIZE(PWT) /= 0) PWT  (:,IJB-JEXT,:)   = PWT  (:,IJB-1+JEXT,:)
+       IF(SIZE(PTHT) /= 0) PTHT (:,IJB-JEXT,:)  = PTHT (:,IJB-1+JEXT,:)
+       IF(SIZE(PTKET) /= 0) PTKET(:,IJB-JEXT,:) = PTKET(:,IJB-1+JEXT,:)
+       IF(SIZE(PRT) /= 0) PRT  (:,IJB-JEXT,:,:) = PRT  (:,IJB-1+JEXT,:,:)
+       IF(SIZE(PSVT) /= 0) PSVT (:,IJB-JEXT,:,:)= PSVT (:,IJB-1+JEXT,:,:)
+       IF(SIZE(PSRCT) /= 0) PSRCT(:,IJB-JEXT,:) = PSRCT(:,IJB-1+JEXT,:)
+       IF(LBLOWSNOW) XSNWCANO(:,IJB-JEXT,:)     = XSNWCANO(:,IJB-1+JEXT,:)     
+!
+    END DO
+!
+    IF(SIZE(PVT) /= 0) PVT(:,IJB     ,:)   = 0.       ! set the normal velocity
+!
+!*       6.2  OPEN CASE:
+!             =========
+!
+  CASE ('OPEN')
+!
+    IF(SIZE(PVT) /= 0) THEN
+       DO JJ=JPHEXT,1,-1
+          PVT(:,JJ,:)=0.
+          WHERE ( PVT(:,IJB,:) <= 0. )               !  OUTFLOW condition
+             PUT  (:,JJ,:) = 2.*PUT  (:,JJ+1,:)   -PUT  (:,JJ+2,:)
+             PWT  (:,JJ,:) = 2.*PWT  (:,JJ+1,:)   -PWT  (:,JJ+2,:)
+             PTHT (:,JJ,:) = 2.*PTHT (:,JJ+1,:)   -PTHT (:,JJ+2,:)
+          ELSEWHERE                                   !  INFLOW  condition
+             PUT  (:,JJ,:) = ZPOND*ZLBYUT   (:,JJ,:) + (1.-ZPOND)* PUT(:,JJ+1,:)
+             PWT  (:,JJ,:) = ZPOND*ZLBYWT   (:,JJ,:) + (1.-ZPOND)* PWT(:,JJ+1,:)
+             PTHT (:,JJ,:) = ZPOND*ZLBYTHT  (:,JJ,:) + (1.-ZPOND)* PTHT(:,JJ+1,:)
+          ENDWHERE
+       END DO
+    ENDIF
+!
+  IF(SIZE(PTKET) /= 0) THEN
+     DO JJ=JPHEXT,1,-1
+        WHERE ( PVT(:,IJB,:) <= 0. )             !  OUTFLOW condition
+           PTKET(:,JJ,:) = MAX(XTKEMIN, 2.*PTKET(:,JJ+1,:)-PTKET(:,JJ+2,:))  
+        ELSEWHERE                                !  INFLOW  condition
+           PTKET(:,JJ,:) =  MAX(XTKEMIN,ZPOND*ZLBYTKET(:,JJ,:) +  &
+                            (1.-ZPOND)*PTKET(:,JJ+1,:))
+        ENDWHERE
+     END DO
+  END IF
+    !
+!
+!                      Case with KRR moist variables 
+! 
+! 
+  DO JRR =1 ,KRR
+    IF(SIZE(PVT) /= 0) THEN
+       DO JJ=JPHEXT,1,-1
+          WHERE ( PVT(:,IJB,:) <= 0. )         !  OUTFLOW condition
+             PRT(:,JJ,:,JRR) = MAX(0.,2.*PRT(:,JJ+1,:,JRR) -PRT(:,JJ+2,:,JRR))
+          ELSEWHERE                            !  INFLOW  condition
+             PRT(:,JJ,:,JRR) = MAX(0.,ZLBYRT(:,JJ,:,JRR))
+          END WHERE
+       END DO
+    END IF
+    !
+  END DO
+!
+  IF(SIZE(PSRCT) /= 0) THEN
+     DO JJ=JPHEXT,1,-1
+        PSRCT(:,JJ,:)   = PSRCT(:,JJ+1,:)
+     END DO
+  END IF
+!
+!                       Case with KSV scalar variables  
+!
+  DO JSV=1 ,KSV
+    IF(SIZE(PVT) /= 0) THEN
+       DO JJ=JPHEXT,1,-1
+          WHERE ( PVT(:,IJB,:) <= 0. )         !  OUTFLOW condition
+             PSVT(:,JJ,:,JSV) = MAX(XSVMIN(JSV),2.*PSVT(:,JJ+1,:,JSV) - &
+                  PSVT(:,JJ+2,:,JSV))
+          ELSEWHERE                            !  INFLOW  condition
+             PSVT(:,JJ,:,JSV) = MAX(XSVMIN(JSV),ZLBYSVT(:,JJ,:,JSV))
+          END WHERE
+       END DO
+    END IF
+    !
+  END DO
+!
+   IF(LBLOWSNOW) THEN
+    DO JSV=1 ,3
+      WHERE ( PVT(:,IJB,IKB) <= 0. )         !  OUTFLOW condition
+        XSNWCANO(:,IJB-1,JSV) = MAX(0.,2.*XSNWCANO(:,IJB,JSV) - &
+                                             XSNWCANO(:,IJB+1,JSV))
+      ELSEWHERE                            !  INFLOW  condition
+        XSNWCANO(:,IJB-1,JSV) = 0.         ! Assume no snow enter throug
+                                           ! boundaries
+      END WHERE
+    END DO
+   DO JSV=NSV_SNWBEG ,NSV_SNWEND
+    IF(SIZE(PVT) /= 0) THEN
+      WHERE ( PVT(:,IJB,:) <= 0. )         !  OUTFLOW condition
+        PSVT(:,IJB-1,:,JSV) = MAX(0.,2.*PSVT(:,IJB,:,JSV) - &
+                                               PSVT(:,IJB+1,:,JSV))
+      ELSEWHERE                            !  INFLOW  condition
+        PSVT(:,IJB-1,:,JSV) = 0.           ! Assume no snow enter throug
+                                           ! boundaries
+      END WHERE
+    END IF
+    !
+  END DO
+  END IF 
+!
+!
+END SELECT
+!
+END IF
+!-------------------------------------------------------------------------------
+!
+!*       7.    LBC FILLING IN THE Y DIRECTION (TOP NORTH SIDE): 
+!              ===============
+!
+IF (LNORTH_ll( )) THEN
+!
+SELECT CASE ( HLBCY(2) ) 
+!
+!*       4.3.1  WALL CASE:
+!               ========= 
+!
+  CASE ('WALL')
+!
+    DO JEXT=1,JPHEXT
+       IF(SIZE(PUT) /= 0) PUT  (:,IJE+JEXT,:)   = PUT  (:,IJE+1-JEXT,:)
+       IF(SIZE(PVT) /= 0) PVT  (:,IJE+JEXT,:)   = PVT  (:,IJE       ,:)   ! never used during run
+       IF(SIZE(PWT) /= 0) PWT  (:,IJE+JEXT,:)   = PWT  (:,IJE+1-JEXT,:)
+       IF(SIZE(PTHT) /= 0) PTHT (:,IJE+JEXT,:)  = PTHT (:,IJE+1-JEXT,:)
+       IF(SIZE(PTKET) /= 0) PTKET(:,IJE+JEXT,:) = PTKET(:,IJE+1-JEXT,:)
+       IF(SIZE(PRT) /= 0) PRT  (:,IJE+JEXT,:,:) = PRT  (:,IJE+1-JEXT,:,:)
+       IF(SIZE(PSVT) /= 0) PSVT (:,IJE+JEXT,:,:)= PSVT (:,IJE+1-JEXT,:,:)
+       IF(SIZE(PSRCT) /= 0) PSRCT(:,IJE+JEXT,:) = PSRCT(:,IJE+1-JEXT,:)
+       IF(LBLOWSNOW) XSNWCANO(:,IJE+JEXT,:)     = XSNWCANO(:,IJE+1-JEXT,:)   
+!
+    END DO
+!
+    IF(SIZE(PVT) /= 0) PVT(:,IJE+1   ,:)   = 0.    ! set the normal velocity
+!
+!*       4.3.2  OPEN CASE:
+!               ========= 
+!
+  CASE ('OPEN')
+!
+!
+    ILBY=SIZE(PLBYUM,2)
+    IF(SIZE(PVT) /= 0) THEN
+       DO JJ=1,JPHEXT
+          WHERE ( PVT(:,IJE+1,:) >= 0. )               !  OUTFLOW condition
+             PUT  (:,IJE+JJ,:) = 2.*PUT  (:,IJE+JJ-1,:)   -PUT  (:,IJE+JJ-2,:)
+             PWT  (:,IJE+JJ,:) = 2.*PWT  (:,IJE+JJ-1,:)   -PWT  (:,IJE+JJ-2,:)
+             PTHT (:,IJE+JJ,:) = 2.*PTHT (:,IJE+JJ-1,:)   -PTHT (:,IJE+JJ-2,:)
+          ELSEWHERE                                   !  INFLOW  condition
+             PUT  (:,IJE+JJ,:) = ZPOND*ZLBYUT   (:,ILBY-JPHEXT+JJ,:) + (1.-ZPOND)* PUT(:,IJE+JJ-1,:)
+             PWT  (:,IJE+JJ,:) = ZPOND*ZLBYWT   (:,ILBY-JPHEXT+JJ,:) + (1.-ZPOND)* PWT(:,IJE+JJ-1,:)
+             PTHT (:,IJE+JJ,:) = ZPOND*ZLBYTHT  (:,ILBY-JPHEXT+JJ,:) + (1.-ZPOND)* PTHT(:,IJE+JJ-1,:)
+          ENDWHERE
+       END DO
+    ENDIF
+!
+  IF(SIZE(PTKET) /= 0) THEN
+    ILBY=SIZE(PLBYTKEM,2)
+    DO JJ=1,JPHEXT
+       WHERE ( PVT(:,IJE+1,:) >= 0. )             !  OUTFLOW condition
+          PTKET(:,IJE+JJ,:) = MAX(XTKEMIN, 2.*PTKET(:,IJE+JJ-1,:)-PTKET(:,IJE+JJ-2,:))  
+       ELSEWHERE                                  !  INFLOW  condition
+          PTKET(:,IJE+JJ,:) = MAX(XTKEMIN,ZPOND*ZLBYTKET(:,ILBY-JPHEXT+JJ,:) + &
+                              (1.-ZPOND)*PTKET(:,IJE+JJ-1,:))
+       ENDWHERE
+    END DO
+  ENDIF
+    !
+!                      Case with KRR moist variables 
+! 
+! 
+  DO JRR =1 ,KRR
+    ILBY=SIZE(PLBYRM,2)
+    !
+    IF(SIZE(PVT) /= 0) THEN
+       DO JJ=1,JPHEXT
+          WHERE ( PVT(:,IJE+1,:) >= 0. )         !  OUTFLOW condition
+             PRT(:,IJE+JJ,:,JRR) = MAX(0.,2.*PRT(:,IJE+JJ-1,:,JRR) -PRT(:,IJE+JJ-2,:,JRR))
+          ELSEWHERE                            !  INFLOW  condition
+             PRT(:,IJE+JJ,:,JRR) = MAX(0.,ZLBYRT(:,ILBY-JPHEXT+JJ,:,JRR))
+          END WHERE
+       END DO
+    END IF
+    !
+  END DO
+!
+  IF(SIZE(PSRCT) /= 0) THEN
+      DO JJ=1,JPHEXT
+         PSRCT(:,IJE+JJ,:)   = PSRCT(:,IJE+JJ-1,:)
+      END DO
+  END IF
+!
+!                       Case with KSV scalar variables  
+  DO JSV=1 ,KSV
+    ILBY=SIZE(PLBYSVM,2)
+    !
+    IF(SIZE(PVT) /= 0) THEN
+       DO JJ=1,JPHEXT
+          WHERE ( PVT(:,IJE+1,:) >= 0. )         !  OUTFLOW condition
+             PSVT(:,IJE+JJ,:,JSV) = MAX(XSVMIN(JSV),2.*PSVT(:,IJE+JJ-1,:,JSV) - &
+                  PSVT(:,IJE+JJ-2,:,JSV))
+          ELSEWHERE                            !  INFLOW  condition
+             PSVT(:,IJE+JJ,:,JSV) = MAX(XSVMIN(JSV),ZLBYSVT(:,ILBY-JPHEXT+JJ,:,JSV))
+          END WHERE
+       END DO
+    END IF
+    !
+  END DO
+!
+    IF(LBLOWSNOW) THEN
+  DO JSV=1 ,3
+    WHERE ( PVT(:,IJE+1,IKB) >= 0. )         !  OUTFLOW condition
+      XSNWCANO(:,IJE+1,JSV) = MAX(0.,2.*XSNWCANO(:,IJE,JSV) - &
+                                            XSNWCANO(:,IJE-1,JSV))
+    ELSEWHERE                            !  INFLOW  condition
+      XSNWCANO(:,IJE+1,JSV) = 0.         ! Assume no snow enter throug
+                                         ! boundaries
+    END WHERE
+  END DO
+  DO JSV=NSV_SNWBEG ,NSV_SNWEND
+    !
+    IF(SIZE(PVT) /= 0) THEN
+      WHERE ( PVT(:,IJE+1,:) >= 0. )         !  OUTFLOW condition
+        PSVT(:,IJE+1,:,JSV) = MAX(0.,2.*PSVT(:,IJE,:,JSV) - &
+                                               PSVT(:,IJE-1,:,JSV))
+      ELSEWHERE                            !  INFLOW  condition
+        PSVT(:,IJE+1,:,JSV) = 0.           ! Assume no snow enter throug
+                                           ! boundaries
+      END WHERE
+    END IF
+    !
+  END DO
+  ENDIF
+!
+END SELECT
+END IF
+!
+!
+IF (CCLOUD == 'LIMA' .AND. IMI == 1 .AND. CPROGRAM=='MESONH') THEN
+
+   ZSVT=PSVT
+   ZRT=PRT
+
+  IF (GFIRSTCALLLIMA) THEN
+    ALLOCATE(GLIMABOUNDARY(NSV_LIMA))
+    GFIRSTCALLLIMA = .FALSE.
+    DO JSV=NSV_LIMA_BEG,NSV_LIMA_END
+       GCHTMP = .FALSE.
+       IF (LWEST_ll().AND.HLBCX(1)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
+       IF (LEAST_ll().AND.HLBCX(2)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
+       IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
+       IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
+       GLIMABOUNDARY(JSV-NSV_LIMA_BEG+1) = GCHTMP
+    ENDDO
+  ENDIF
+  CALL INIT_AEROSOL_CONCENTRATION(PRHODREF,ZSVT,XZZ)
+  DO JSV=NSV_LIMA_CCN_FREE,NSV_LIMA_CCN_FREE+NMOD_CCN-1 ! LBC for CCN
+     IF (GLIMABOUNDARY(JSV-NSV_LIMA_BEG+1)) THEN
+        PSVT(IIB-1,:,:,JSV)=ZSVT(IIB-1,:,:,JSV)
+        PSVT(IIE+1,:,:,JSV)=ZSVT(IIE+1,:,:,JSV)
+        PSVT(:,IJB-1,:,JSV)=ZSVT(:,IJB-1,:,JSV)
+        PSVT(:,IJE+1,:,JSV)=ZSVT(:,IJE+1,:,JSV)
+     ENDIF
+  END DO
+  DO JSV=NSV_LIMA_IFN_FREE,NSV_LIMA_IFN_FREE+NMOD_IFN-1 ! LBC for IFN
+     IF (GLIMABOUNDARY(JSV-NSV_LIMA_BEG+1)) THEN
+        PSVT(IIB-1,:,:,JSV)=ZSVT(IIB-1,:,:,JSV)
+        PSVT(IIE+1,:,:,JSV)=ZSVT(IIE+1,:,:,JSV)
+        PSVT(:,IJB-1,:,JSV)=ZSVT(:,IJB-1,:,JSV)
+        PSVT(:,IJE+1,:,JSV)=ZSVT(:,IJE+1,:,JSV)
+     ENDIF
+  END DO
+
+  CALL SET_CONC_LIMA( IMI, 'NONE', PRHODREF, ZRT(:, :, :, :), ZSVT(:, :, :, NSV_LIMA_BEG:NSV_LIMA_END) )
+  IF (NSV_LIMA_NC.GE.1) THEN
+     IF (GLIMABOUNDARY(NSV_LIMA_NC-NSV_LIMA_BEG+1)) THEN
+        PSVT(IIB-1,:,:,NSV_LIMA_NC)=ZSVT(IIB-1,:,:,NSV_LIMA_NC) ! cloud
+        PSVT(IIE+1,:,:,NSV_LIMA_NC)=ZSVT(IIE+1,:,:,NSV_LIMA_NC)
+        PSVT(:,IJB-1,:,NSV_LIMA_NC)=ZSVT(:,IJB-1,:,NSV_LIMA_NC)
+        PSVT(:,IJE+1,:,NSV_LIMA_NC)=ZSVT(:,IJE+1,:,NSV_LIMA_NC)
+     ENDIF
+  ENDIF
+  IF (NSV_LIMA_NR.GE.1) THEN
+     IF (GLIMABOUNDARY(NSV_LIMA_NR-NSV_LIMA_BEG+1)) THEN
+        PSVT(IIB-1,:,:,NSV_LIMA_NR)=ZSVT(IIB-1,:,:,NSV_LIMA_NR) ! rain
+        PSVT(IIE+1,:,:,NSV_LIMA_NR)=ZSVT(IIE+1,:,:,NSV_LIMA_NR)
+        PSVT(:,IJB-1,:,NSV_LIMA_NR)=ZSVT(:,IJB-1,:,NSV_LIMA_NR)
+        PSVT(:,IJE+1,:,NSV_LIMA_NR)=ZSVT(:,IJE+1,:,NSV_LIMA_NR)
+     ENDIF
+  ENDIF
+  IF (NSV_LIMA_NI.GE.1) THEN
+     IF (GLIMABOUNDARY(NSV_LIMA_NI-NSV_LIMA_BEG+1)) THEN
+        PSVT(IIB-1,:,:,NSV_LIMA_NI)=ZSVT(IIB-1,:,:,NSV_LIMA_NI) ! ice
+        PSVT(IIE+1,:,:,NSV_LIMA_NI)=ZSVT(IIE+1,:,:,NSV_LIMA_NI)
+        PSVT(:,IJB-1,:,NSV_LIMA_NI)=ZSVT(:,IJB-1,:,NSV_LIMA_NI)
+        PSVT(:,IJE+1,:,NSV_LIMA_NI)=ZSVT(:,IJE+1,:,NSV_LIMA_NI)
+     ENDIF
+  END IF
+END IF
+!
+!
+IF (LUSECHEM .AND. IMI == 1) THEN
+  IF (GFIRSTCALL1) THEN
+    ALLOCATE(GCHBOUNDARY(NSV_CHEM))
+    GFIRSTCALL1 = .FALSE.
+    DO JSV=NSV_CHEMBEG,NSV_CHEMEND
+       GCHTMP = .FALSE.
+       IF (LWEST_ll().AND.HLBCX(1)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
+       IF (LEAST_ll().AND.HLBCX(2)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
+       IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
+       IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
+       GCHBOUNDARY(JSV-NSV_CHEMBEG+1) = GCHTMP
+    ENDDO
+  ENDIF
+
+  DO JSV=NSV_CHEMBEG,NSV_CHEMEND
+    IF (GCHBOUNDARY(JSV-NSV_CHEMBEG+1))  THEN
+      IF (SIZE(PSVT)>0) THEN
+        CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV),XSVMIN(JSV))
+      ENDIF
+    ENDIF
+  ENDDO
+ENDIF
+!
+IF (LUSECHIC .AND. IMI == 1) THEN
+  IF (GFIRSTCALLIC) THEN
+    ALLOCATE(GICBOUNDARY(NSV_CHIC))
+    GFIRSTCALLIC = .FALSE.
+    DO JSV=NSV_CHICBEG,NSV_CHICEND
+       GCHTMP = .FALSE.
+       IF (LWEST_ll().AND.HLBCX(1)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
+       IF (LEAST_ll().AND.HLBCX(2)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
+       IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
+       IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
+       GICBOUNDARY(JSV-NSV_CHICBEG+1) = GCHTMP
+    ENDDO
+  ENDIF
+
+  DO JSV=NSV_CHICBEG,NSV_CHICEND
+    IF (GICBOUNDARY(JSV-NSV_CHICBEG+1))  THEN
+      IF (SIZE(PSVT)>0) THEN
+        CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV),XSVMIN(JSV))
+      ENDIF
+    ENDIF
+  ENDDO
+ENDIF
+IF (LORILAM .AND. IMI == 1) THEN
+  IF (GFIRSTCALL2) THEN
+    ALLOCATE(GAERBOUNDARY(NSV_AER))
+    GFIRSTCALL2 = .FALSE.
+    DO JSV=NSV_AERBEG,NSV_AEREND
+       GCHTMP = .FALSE.
+       IF (LWEST_ll().AND.HLBCX(1)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
+       IF (LEAST_ll().AND.HLBCX(2)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
+       IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
+       IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
+       GAERBOUNDARY(JSV-NSV_AERBEG+1) = GCHTMP
+    ENDDO
+  ENDIF
+
+  DO JSV=NSV_AERBEG,NSV_AEREND
+    IF (GAERBOUNDARY(JSV-NSV_AERBEG+1)) THEN
+      IF (SIZE(PSVT)>0) THEN
+        CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV),XSVMIN(JSV))
+      ENDIF
+    ENDIF
+  ENDDO
+ENDIF
+!
+IF (LDUST .AND. IMI == 1) THEN
+  IF (GFIRSTCALL3) THEN
+    ALLOCATE(GDSTBOUNDARY(NSV_DST))
+    GFIRSTCALL3 = .FALSE.
+    DO JSV=NSV_DSTBEG,NSV_DSTEND
+       GCHTMP = .FALSE.
+       IF (LWEST_ll().AND.HLBCX(1)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
+       IF (LEAST_ll().AND.HLBCX(2)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
+       IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
+       IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
+       GDSTBOUNDARY(JSV-NSV_DSTBEG+1) = GCHTMP
+    ENDDO
+    ENDIF
+
+  DO JSV=NSV_DSTBEG,NSV_DSTEND
+    IF (GDSTBOUNDARY(JSV-NSV_DSTBEG+1)) THEN
+      IF (SIZE(PSVT)>0) THEN
+        CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV),XSVMIN(JSV))
+      ENDIF
+    ENDIF
+  ENDDO 
+ENDIF
+!
+IF (LSALT .AND. IMI == 1) THEN
+  IF (GFIRSTCALL5) THEN
+    ALLOCATE(GSLTBOUNDARY(NSV_SLT))
+    GFIRSTCALL5 = .FALSE.
+    DO JSV=NSV_SLTBEG,NSV_SLTEND
+       GCHTMP = .FALSE.
+       IF (LWEST_ll().AND.HLBCX(1)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
+       IF (LEAST_ll().AND.HLBCX(2)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
+       IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
+       IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
+       GSLTBOUNDARY(JSV-NSV_SLTBEG+1) = GCHTMP
+    ENDDO
+  ENDIF
+
+  DO JSV=NSV_SLTBEG,NSV_SLTEND
+    IF (GSLTBOUNDARY(JSV-NSV_SLTBEG+1)) THEN
+      IF (SIZE(PSVT)>0) THEN
+        CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV),XSVMIN(JSV))
+      ENDIF
+    ENDIF
+  ENDDO
+ENDIF
+!
+IF ( LPASPOL .AND. IMI == 1) THEN
+  IF (GFIRSTCALLPP) THEN
+    ALLOCATE(GPPBOUNDARY(NSV_PP))
+    GFIRSTCALLPP = .FALSE.
+    DO JSV=NSV_PPBEG,NSV_PPEND
+      GPPTMP = .FALSE.
+      IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GPPTMP = GPPTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
+      IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GPPTMP = GPPTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
+      IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GPPTMP = GPPTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
+      IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GPPTMP = GPPTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
+      GPPBOUNDARY(JSV-NSV_PPBEG+1) = GPPTMP
+    ENDDO
+  ENDIF
+
+  DO JSV=NSV_PPBEG,NSV_PPEND
+    IF (GPPBOUNDARY(JSV-NSV_PPBEG+1)) THEN
+      IF (SIZE(PSVT)>0) THEN
+        CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV),XSVMIN(JSV))
+      ENDIF
+    ENDIF
+  ENDDO
+ENDIF
+!
+IF ( LCONDSAMP .AND. IMI == 1) THEN
+  IF (GFIRSTCALLCS) THEN
+    ALLOCATE(GCSBOUNDARY(NSV_CS))
+    GFIRSTCALLCS = .FALSE.
+    DO JSV=NSV_CSBEG,NSV_CSEND
+      GCSTMP = .FALSE.
+      IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GCSTMP = GCSTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
+      IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GCSTMP = GCSTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
+      IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCSTMP = GCSTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
+      IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCSTMP = GCSTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
+      GCSBOUNDARY(JSV-NSV_CSBEG+1) = GCSTMP
+    ENDDO
+  ENDIF
+
+  DO JSV=NSV_CSBEG,NSV_CSEND
+    IF (GCSBOUNDARY(JSV-NSV_CSBEG+1)) THEN
+      IF (SIZE(PSVT)>0) THEN
+        CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV),XSVMIN(JSV))
+      ENDIF
+    ENDIF
+  ENDDO
+ENDIF
+
+IF (LBLOWSNOW .AND. IMI == 1) THEN
+  IF (GFIRSTCALL3) THEN
+    ALLOCATE(GSNWBOUNDARY(NSV_SNW))
+    GFIRSTCALL3 = .FALSE.
+    DO JSV=NSV_SNWBEG,NSV_SNWEND
+       GCHTMP = .FALSE.
+       IF (LWEST_ll().AND.HLBCX(1)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(1,:,:,JSV)==0)
+       IF (LEAST_ll().AND.HLBCX(2)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX,:,:,JSV)==0)
+       IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,1,:,JSV)==0)
+       IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY,:,JSV)==0)
+       GSNWBOUNDARY(JSV-NSV_SNWBEG+1) = GCHTMP
+    ENDDO
+  ENDIF
+ENDIF
+
+#ifdef MNH_FOREFIRE
+!ForeFire 
+IF ( LFOREFIRE .AND. IMI == 1) THEN
+  IF (GFIRSTCALLFF) THEN
+    ALLOCATE(GFFBOUNDARY(NSV_FF))
+    GFIRSTCALLFF = .FALSE.
+    DO JSV=NSV_FFBEG,NSV_FFEND
+      GFFTMP = .FALSE.
+      IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GFFTMP = GFFTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
+      IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GFFTMP = GFFTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
+      IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GFFTMP = GFFTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
+      IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GFFTMP = GFFTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
+      GFFBOUNDARY(JSV-NSV_FFBEG+1) = GFFTMP
+    ENDDO
+  ENDIF
+
+  DO JSV=NSV_FFBEG,NSV_FFEND
+    IF (GFFBOUNDARY(JSV-NSV_FFBEG+1)) THEN
+      IF (SIZE(PSVT)>0) THEN
+        CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV),XSVMIN(JSV))
+      ENDIF
+    ENDIF
+  ENDDO
+ENDIF
+#endif
+!
+IF ( CELEC /= 'NONE' .AND. (NSV_ELEC_A(NDAD(IMI)) == 0 .OR. IMI == 1)) THEN
+  CALL ION_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT)
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE BOUNDARIES
diff --git a/src/mesonh/ext/default_desfmn.f90 b/src/mesonh/ext/default_desfmn.f90
index 0597b379c5aeca8cd26e19d71a7b33d4fa478296..b5b8b062cd9e131280a96e635a6a1c5bf0cf6636 100644
--- a/src/mesonh/ext/default_desfmn.f90
+++ b/src/mesonh/ext/default_desfmn.f90
@@ -278,13 +278,13 @@ USE MODD_ALLPROFILER_n
 USE MODD_ALLSTATION_n
 !
 !
-USE MODD_PARAM_LIMA, ONLY : LCOLD, LNUCL, LSEDI, LHHONI, LSNOW, LHAIL, LMEYERS,         &
+USE MODD_PARAM_LIMA, ONLY : 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, LMURAKAMI,              &
                             YSNOW_T=>LSNOW_T, CPRISTINE_ICE_LIMA, CHEVRIMED_ICE_LIMA,   &
                             XFACTNUC_DEP, XFACTNUC_CON,                                 &
-                            OWARM=>LWARM, LACTI, ORAIN=>LRAIN, OSEDC=>LSEDC,            &
+                            LACTI, OSEDC=>LSEDC,                                        &
                             OACTIT=>LACTIT, LBOUND, LSPRO, LADJ, LKHKO, NMOM_C, NMOM_R, &
                             NMOD_CCN, XCCN_CONC, LKESSLERAC,                            &
                             LCCN_HOM, CCCN_MODES,                                       &
@@ -311,7 +311,7 @@ USE MODD_IBM_LSF
 #ifdef MNH_FOREFIRE
 USE MODD_FOREFIRE
 #endif
-USE MODD_FIRE
+USE MODD_FIRE_n
 !
 IMPLICIT NONE
 !
@@ -1009,9 +1009,7 @@ IF (KMI == 1) THEN
    YNUR    = 2.0
    YALPHAR = 1.0
 !
-   OWARM  = .TRUE.
    LACTI  = .TRUE.
-   ORAIN  = .TRUE.
    OSEDC  = .TRUE.
    OACTIT = .FALSE.
    LADJ   = .TRUE.
@@ -1049,11 +1047,8 @@ IF (KMI == 1) THEN
    XCCN_CONC(:)=300.
 !
    LHHONI = .FALSE.
-   LCOLD  = .TRUE.
    LNUCL  = .TRUE.
    LSEDI  = .TRUE.
-   LSNOW  = .TRUE.
-   LHAIL  = .FALSE.
    YSNOW_T = .FALSE.
    LMURAKAMI = .TRUE.
    CPRISTINE_ICE_LIMA = 'PLAT'
@@ -1431,68 +1426,66 @@ ENDIF
   XARECYCLS  = 0.
   XDRECYCLE  = 0.
   XARECYCLE  = 0.
-  XTMOY      = 0.
-  XTMOYCOUNT = 0.
-  XNUMBELT   = 28.
+  NTMOY      = 0
+  NTMOYCOUNT = 0
+  NNUMBELT   = 28
   XRCOEFF    = 0.2
   XTBVTOP    = 500.
   XTBVBOT    = 300.
 !
 !-------------------------------------------------------------------------------
 !
-!*      33.   SET DEFAULT VALUES FOR MODD_FIRE
-!             --------------------------------
+!*      33.   SET DEFAULT VALUES FOR MODD_FIRE_n
+!             ----------------------------------
 !
 ! Blaze fire model namelist
 !
-IF (KMI == 1) THEN
-  LBLAZE = .FALSE.	            ! Flag for Fire model use, default FALSE
-  !
-  CPROPAG_MODEL = 'SANTONI2011' ! Fire propagation model (default SANTONI2011)
-  !
-  CHEAT_FLUX_MODEL   = 'EXS'	  ! Sensible heat flux injection model (default EXS)
-  CLATENT_FLUX_MODEL = 'EXP'	  ! latent heat flux injection model (default EXP)
-  XFERR = 0.8                   ! Energy released in flamming stage (only for EXP)
-  !
-  CFIRE_CPL_MODE = '2WAYCPL'    ! Coupling mode (default 2way coupled)
-  CBMAPFILE = CINIFILE          ! File name of BMAP for FIR2ATM mode
-  LINTERPWIND = .TRUE.          ! Horizontal interpolation of wind
-  LSGBAWEIGHT = .FALSE.         ! Flag for use of weighted average method for SubGrid Burning Area computation
-  !
-  NFIRE_WENO_ORDER = 3	        ! Weno order (1,3,5)
-  NFIRE_RK_ORDER = 3	          ! Runge Kutta order (1,2,3,4)
-  !
-  NREFINX = 1	                  ! Refinement ratio X
-  NREFINY	= 1                   ! Refinement ratio Y
-  !
-  XCFLMAXFIRE = 0.8             ! Max CFL on fire mesh
-  XLSDIFFUSION = 0.1            ! Numerical diffusion of LevelSet
-  XROSDIFFUSION = 0.05          ! Numerical diffusion of ROS
-  !
-  XFLUXZEXT = 3.                ! Flux distribution on vertical caracteristic length
-  XFLUXZMAX = 4. * XFLUXZEXT    ! Flux distribution on vertical max injetion height
-  !
-  XFLXCOEFTMP = 1.              ! Flux multiplicator. For testing
-  !
-  LWINDFILTER = .FALSE.         ! Fire wind filtering flag
-  CWINDFILTER = 'EWAM'	        ! Wind filter method (EWAM or WLIM)
-  XEWAMTAU    = 20.             ! Time averaging constant for EWAM method (s)
-  XWLIMUTH    = 8.              ! Thresehold wind value for WLIM method (m/s)
-  XWLIMUTMAX  = 9.              ! Maximum wind value for WLIM method (m/s) (needs to be >= XWLIMUTH )
-  !
-  NNBSMOKETRACER = 1            ! Nb of smoke tracers
-  !
-  NWINDSLOPECPLMODE = 0         ! Flag for use of wind/slope in ROS (0 = wind + slope, 1 = wind only, 2 = slope only (U0=0))
-  !
-  !
-  !
-  !! DO NOT CHANGE BELOW PARAMETERS
-  XFIREMESHSIZE(:) = 0.         ! Fire mesh size (dxf,dyf)
-  LRESTA_ASE = .FALSE.          ! Flag for using ASE in RESTA file
-  LRESTA_AWC = .FALSE.          ! Flag for using AWC in RESTA file
-  LRESTA_EWAM = .FALSE.         ! Flag for using EWAM in RESTA file
-  LRESTA_WLIM = .FALSE.         ! Flag for using WLIM in RESTA file
-ENDIF
+LBLAZE = .FALSE.              ! Flag for Fire model use, default FALSE
+!
+CPROPAG_MODEL = 'SANTONI2011' ! Fire propagation model (default SANTONI2011)
+!
+CHEAT_FLUX_MODEL   = 'EXS'    ! Sensible heat flux injection model (default EXS)
+CLATENT_FLUX_MODEL = 'EXP'    ! latent heat flux injection model (default EXP)
+XFERR = 0.8                   ! Energy released in flamming stage (only for EXP)
+!
+CFIRE_CPL_MODE = '2WAYCPL'    ! Coupling mode (default 2way coupled)
+CBMAPFILE = CINIFILE          ! File name of BMAP for FIR2ATM mode
+LINTERPWIND = .TRUE.          ! Horizontal interpolation of wind
+LSGBAWEIGHT = .FALSE.         ! Flag for use of weighted average method for SubGrid Burning Area computation
+!
+NFIRE_WENO_ORDER = 3          ! Weno order (1,3,5)
+NFIRE_RK_ORDER = 3            ! Runge Kutta order (1,2,3,4)
+!
+NREFINX = 1                   ! Refinement ratio X
+NREFINY = 1                   ! Refinement ratio Y
+!
+XCFLMAXFIRE = 0.8             ! Max CFL on fire mesh
+XLSDIFFUSION = 0.1            ! Numerical diffusion of LevelSet
+XROSDIFFUSION = 0.05          ! Numerical diffusion of ROS
+!
+XFLUXZEXT = 3.                ! Flux distribution on vertical caracteristic length
+XFLUXZMAX = 4. * XFLUXZEXT    ! Flux distribution on vertical max injetion height
+!
+XFLXCOEFTMP = 1.              ! Flux multiplicator. For testing
+!
+LWINDFILTER = .FALSE.         ! Fire wind filtering flag
+CWINDFILTER = 'EWAM'          ! Wind filter method (EWAM or WLIM)
+XEWAMTAU    = 20.             ! Time averaging constant for EWAM method (s)
+XWLIMUTH    = 8.              ! Thresehold wind value for WLIM method (m/s)
+XWLIMUTMAX  = 9.              ! Maximum wind value for WLIM method (m/s) (needs to be >= XWLIMUTH )
+!
+NNBSMOKETRACER = 1            ! Nb of smoke tracers
+!
+NWINDSLOPECPLMODE = 0         ! Flag for use of wind/slope in ROS (0 = wind + slope, 1 = wind only, 2 = slope only (U0=0))
+!
+!
+!
+!! DO NOT CHANGE BELOW PARAMETERS
+XFIREMESHSIZE(:) = 0.         ! Fire mesh size (dxf,dyf)
+LRESTA_ASE = .FALSE.          ! Flag for using ASE in RESTA file
+LRESTA_AWC = .FALSE.          ! Flag for using AWC in RESTA file
+LRESTA_EWAM = .FALSE.         ! Flag for using EWAM in RESTA file
+LRESTA_WLIM = .FALSE.         ! Flag for using WLIM in RESTA file
 
 !-------------------------------------------------------------------------------
 END SUBROUTINE DEFAULT_DESFM_n
diff --git a/src/mesonh/ext/drag_veg.f90 b/src/mesonh/ext/drag_veg.f90
new file mode 100644
index 0000000000000000000000000000000000000000..de7fba893e0ef87438979ff249a803c7fd382864
--- /dev/null
+++ b/src/mesonh/ext/drag_veg.f90
@@ -0,0 +1,362 @@
+!MNH_LIC Copyright 2009-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
+!MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
+!     #######################
+       MODULE MODI_DRAG_VEG
+!     #######################
+!
+INTERFACE
+
+SUBROUTINE DRAG_VEG(PTSTEP,PUT,PVT,PTKET,ODEPOTREE, PVDEPOTREE, &
+                    HCLOUD,PPABST,PTHT,PRT,PSVT,         &
+                    PRHODJ,PZZ,PRUS, PRVS, PRTKES,       &
+                    PRRS,PSVS)
+!
+REAL,                     INTENT(IN)    :: PTSTEP ! Time step
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PUT, PVT   ! variables
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTKET           !   at t
+LOGICAL,                  INTENT(IN)    :: ODEPOTREE ! Droplet deposition on tree
+REAL,                     INTENT(IN)    :: PVDEPOTREE! Velocity deposition on tree
+CHARACTER (LEN=4),        INTENT(IN)    :: HCLOUD       ! Kind of microphysical scheme
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST          !   at t
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT          !   at t
+REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT             !   at t
+REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT            !   at t
+!
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ    ! dry Density * Jacobian
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ       ! Height (z)
+!
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRUS, PRVS       ! Sources of Momentum
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRTKES           ! Sources of Tke
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS         
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS       
+!
+END SUBROUTINE DRAG_VEG
+
+END INTERFACE
+
+END MODULE MODI_DRAG_VEG
+!
+!     ###################################################################
+SUBROUTINE DRAG_VEG(PTSTEP,PUT,PVT,PTKET,ODEPOTREE, PVDEPOTREE, &
+                    HCLOUD,PPABST,PTHT,PRT,PSVT,         &
+                    PRHODJ,PZZ,PRUS, PRVS, PRTKES,       &
+                    PRRS,PSVS)
+!     ###################################################################
+!
+!!****  *DRAG_VEG_n * -
+!!
+!!    PURPOSE
+!!    -------
+!
+!!**  METHOD
+!!    ------
+!!
+!!    REFERENCE
+!!    ---------
+!!      
+!!
+!!    AUTHOR
+!!    ------
+!!     P. Aumond 
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    07/2009
+!!       C.Lac      07/2011 : Add budgets
+!!       S. Donier  06/2015 : bug surface aerosols
+!!       C.Lac      07/2016 : Add droplet deposition
+!!       C.Lac      10/2017 : Correction on deposition
+!  C. Lac         11/2019: correction in the drag formula and application to building in addition to tree
+!  P. Wautelet 28/01/2020: use the new data structures and subroutines for budgets for U
+!  C. Lac         02/2020: correction missing condition for budget on RC and SV
+!  P. Wautelet 04/02/2021: budgets: bugfixes for LDRAGTREE if LIMA + small optimisations and verifications
+!  R. Schoetter 04/2022: bug add update halo for vegetation drag variables
+!!---------------------------------------------------------------
+!
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+USE MODD_ARGSLIST_ll, ONLY: LIST_ll
+use modd_budget,      only: lbudget_u, lbudget_v, lbudget_rc, lbudget_sv,  lbudget_tke, &
+                            NBUDGET_U, NBUDGET_V, NBUDGET_RC, NBUDGET_SV1, NBUDGET_TKE, &
+                            tbudgets
+USE MODD_CONF
+USE MODD_CST
+USE MODD_DYN
+USE MODD_DYN_n
+USE MODD_GROUND_PAR
+USE MODD_NSV
+USE MODD_PARAM_C2R2
+USE MODD_PARAM_LIMA,  ONLY: NMOM_C
+USE MODD_PARAM_n,     only: CSURF, CTURB
+USE MODD_PGDFIELDS
+USE MODD_VEG_n
+
+use mode_budget,     only: Budget_store_init, Budget_store_end
+use mode_msg
+USE MODE_ll
+
+USE MODI_MNHGET_SURF_PARAM_n
+USE MODI_SHUMAN
+
+IMPLICIT NONE
+!  
+!*       0.1   Declarations of dummy arguments :
+!
+REAL,                     INTENT(IN)    :: PTSTEP ! Time step
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PUT, PVT   ! variables
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTKET           !   at t
+LOGICAL,                  INTENT(IN)    :: ODEPOTREE ! Droplet deposition on tree
+REAL,                     INTENT(IN)    :: PVDEPOTREE! Velocity deposition on tree
+CHARACTER (LEN=4),        INTENT(IN)    :: HCLOUD       ! Kind of microphysical scheme
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST          !   at t
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT          !   at t
+REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT             !   at t
+REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT            !   at t
+!
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ    ! dry Density * Jacobian
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ       ! Height (z)
+!
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRUS, PRVS       ! Sources of Momentum
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRTKES           ! Sources of Tke
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS         
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS       
+!
+!*       0.2   Declarations of local variables :
+!
+INTEGER ::  IIU,IJU,IKU,IKV         ! array size along the k direction
+INTEGER :: JI, JJ, JK             ! loop index
+INTEGER :: IINFO_ll
+TYPE(LIST_ll), POINTER :: TZFIELDS_ll   ! list of fields to exchange
+!
+!
+REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) ::           &
+                              ZWORK1, ZWORK2, ZWORK3, ZUT_SCAL, ZVT_SCAL,   &
+                              ZUS, ZVS, ZTKES, ZTKET
+REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) ::           &
+                              ZCDRAG, ZDENSITY
+REAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2)) ::           &
+                              ZH,ZLAI           !  LAI, Vegetation height
+REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZT,ZEXN,ZLV,ZCPH                              
+LOGICAL, DIMENSION(SIZE(PUT,1),SIZE(PUT,2),SIZE(PUT,3)) &
+            :: GDEP
+REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZWDEPR,ZWDEPS
+
+IF ( CSURF /= 'EXTE' ) CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'DRAG_VEG', 'CSURF/=EXTE not allowed' )
+
+!Condition necessary because PTKET is used (and must be allocated)
+IF ( CTURB /= 'TKEL' ) CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'DRAG_VEG', 'CTURB/=TKEL not allowed' )
+!
+if ( lbudget_u   ) call Budget_store_init( tbudgets(NBUDGET_U  ), 'DRAG', prus  (:, :, :) )
+if ( lbudget_v   ) call Budget_store_init( tbudgets(NBUDGET_V  ), 'DRAG', prvs  (:, :, :) )
+if ( lbudget_tke ) call Budget_store_init( tbudgets(NBUDGET_TKE), 'DRAG', prtkes(:, :, :) )
+
+if ( odepotree ) then
+  if ( lbudget_rc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'DEPOTR', prrs(:, :, :, 2) )
+  if ( lbudget_sv .and. ( hcloud=='C2R2' .or. hcloud=='KHKO' ) ) &
+                    call Budget_store_init( tbudgets(NBUDGET_SV1-1+(NSV_C2R2BEG+1)), 'DEPOTR', psvs(:, :, :, NSV_C2R2BEG+1) )
+  if ( lbudget_sv .and.   hcloud=='LIMA' ) &
+                    call Budget_store_init( tbudgets(NBUDGET_SV1-1+NSV_LIMA_NC),     'DEPOTR', psvs(:, :, :, NSV_LIMA_NC) )
+end if
+
+IIU = SIZE(PUT,1)
+IJU = SIZE(PUT,2)
+IKU = SIZE(PUT,3)
+!
+ZUS   (:,:,:) = 0.0
+ZVS   (:,:,:) = 0.0
+ZTKES (:,:,:) = 0.0
+!
+ZH  (:,:) = XUNDEF
+ZLAI(:,:) = XUNDEF
+!
+ZCDRAG   (:,:,:) = 0.
+ZDENSITY (:,:,:) = 0.
+!
+CALL MNHGET_SURF_PARAM_n( PH_TREE = ZH, PLAI_TREE = ZLAI )
+!
+WHERE ( ZH   (:,:) > (XUNDEF-1.) ) ZH   (:,:) = 0.0
+WHERE ( ZLAI (:,:) > (XUNDEF-1.) ) ZLAI (:,:) = 0.0
+!
+!-------------------------------------------------------------------------------
+!
+!
+!*       1.     COMPUTES THE TRUE VELOCITY COMPONENTS
+!	        -------------------------------------
+!
+ZUT_SCAL(:,:,:) = MXF(PUT(:,:,:))
+ZVT_SCAL(:,:,:) = MYF(PVT(:,:,:))
+ZTKET(:,:,:)    = PTKET(:,:,:)
+!
+! Update halo
+!
+NULLIFY(TZFIELDS_ll)
+CALL ADD3DFIELD_ll( TZFIELDS_ll, ZUT_SCAL, 'DRAG_VEG::ZUT_SCAL')
+CALL ADD3DFIELD_ll( TZFIELDS_ll, ZVT_SCAL, 'DRAG_VEG::ZVT_SCAL')
+CALL ADD3DFIELD_ll( TZFIELDS_ll, ZTKET   , 'DRAG_VEG::ZTKET'   )
+CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
+CALL CLEANLIST_ll(TZFIELDS_ll)
+!
+!-------------------------------------------------------------------------------
+!
+!*      1.     Computations of wind tendency due to canopy drag
+!              ------------------------------------------------
+!
+!
+!
+! Ext = - Cdrag  * u- * u- * Sv       tree canopy drag
+!       - u'w'(ground)     * Sh       horizontal surfaces (ground)
+!
+!*      1.1    Drag coefficient by vegetation (Patton et al 2001)
+!              ------------------------------
+!
+GDEP(:,:,:) = .FALSE.
+!
+DO JJ=2,(IJU-1)
+   DO JI=2,(IIU-1)
+      !
+      ! Set density and drag coefficient for vegetation
+      !
+      IF (ZH(JI,JJ) /= 0) THEN
+         !
+         DO JK=2,(IKU-1)
+            !
+            IF ( (PZZ(JI,JJ,JK)-PZZ(JI,JJ,2)) .LT. ZH(JI,JJ) ) THEN
+               !
+               IF ((HCLOUD=='C2R2') .OR.  (HCLOUD=='KHKO')) THEN
+                  IF ((PRRS(JI,JJ,JK,2) >0.) .AND. (PSVS(JI,JJ,JK,NSV_C2R2BEG+1) >0.)) &
+                       GDEP(JI,JJ,JK) = .TRUE.
+               ELSE IF (HCLOUD /= 'NONE' .AND. HCLOUD /= 'REVE') THEN
+                  IF (PRRS(JI,JJ,JK,2) >0.) GDEP(JI,JJ,JK) = .TRUE.
+               ENDIF
+               !
+               ZCDRAG(JI,JJ,JK)  = 0.2 !0.075
+               ZDENSITY(JI,JJ,JK) = MAX((4 * (ZLAI(JI,JJ) *&
+                    (PZZ(JI,JJ,JK)-PZZ(JI,JJ,2)) *&
+                    (PZZ(JI,JJ,JK)-PZZ(JI,JJ,2)) *&
+                    (ZH(JI,JJ)-(PZZ(JI,JJ,JK)-PZZ(JI,JJ,2)))/&
+                    ZH(JI,JJ)**3)-&
+                    (0.30*((ZLAI(JI,JJ) *&
+                    (PZZ(JI,JJ,JK)-PZZ(JI,JJ,2)) *&
+                    (PZZ(JI,JJ,JK)-PZZ(JI,JJ,2)) *&
+                    (PZZ(JI,JJ,JK)-PZZ(JI,JJ,2)) /&
+                    (ZH(JI,JJ)**3))-ZLAI(JI,JJ))))/&
+                    ZH(JI,JJ), 0.)
+               !
+            ENDIF
+            !
+         ENDDO
+      ENDIF
+      !
+   ENDDO
+ENDDO
+!
+! To exclude the first vertical level already dealt in rain_ice or rain_c2r2_khko
+GDEP(:,:,2) = .FALSE.
+!
+! Update halo
+!
+NULLIFY(TZFIELDS_ll)
+CALL ADD3DFIELD_ll( TZFIELDS_ll, ZCDRAG  , 'DRAG_VEG::ZCDRAG')
+CALL ADD3DFIELD_ll( TZFIELDS_ll, ZDENSITY, 'DRAG_VEG::ZDENSITY')
+CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
+CALL CLEANLIST_ll(TZFIELDS_ll)
+!
+!
+!*      1.2    Drag force by wall surfaces
+!              ---------------------------
+!
+!* drag force by vertical surfaces
+!
+ZUS(:,:,:) = PUT(:,:,:)/( 1.0 + MXM ( ZCDRAG(:,:,:) * ZDENSITY(:,:,:) &
+     * PTSTEP * SQRT(ZUT_SCAL(:,:,:)**2+ZVT_SCAL(:,:,:)**2) ) )
+!
+ZVS(:,:,:) = PVT(:,:,:)/( 1.0 + MYM ( ZCDRAG(:,:,:) * ZDENSITY(:,:,:) &
+     * PTSTEP * SQRT(ZUT_SCAL(:,:,:)**2+ZVT_SCAL(:,:,:)**2) ) )
+!
+PRUS(:,:,:) = PRUS(:,:,:) + (ZUS(:,:,:)-PUT(:,:,:)) * MXM(PRHODJ(:,:,:)) / PTSTEP
+!
+PRVS(:,:,:) = PRVS(:,:,:) + (ZVS(:,:,:)-PVT(:,:,:)) * MYM(PRHODJ(:,:,:)) / PTSTEP
+!
+IF (ODEPOTREE) THEN
+  IF ( HCLOUD == 'NONE' ) CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'DRAG_VEG', 'LDEPOTREE=T not allowed if CCLOUD=NONE' )
+  IF ( HCLOUD == 'LIMA' .AND. NMOM_C.EQ.0 ) &
+    CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'DRAG_VEG', 'LDEPOTREE=T not allowed if CCLOUD=LIMA and NMOM_C=0' )
+
+  ZEXN(:,:,:)= (PPABST(:,:,:)/XP00)**(XRD/XCPD)
+  ZT(:,:,:)= PTHT(:,:,:)*ZEXN(:,:,:)
+  ZLV(:,:,:)=XLVTT +(XCPV-XCL) *(ZT(:,:,:)-XTT)
+  ZCPH(:,:,:)=XCPD +XCPV*PRT(:,:,:,1)
+  ZWDEPR(:,:,:)= 0.
+  ZWDEPS(:,:,:)= 0.
+  WHERE (GDEP)
+   ZWDEPR(:,:,:)= PVDEPOTREE * PRT(:,:,:,2) * PRHODJ(:,:,:)
+  END WHERE
+  IF ( HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO' ) THEN
+    WHERE (GDEP)
+      ZWDEPS(:,:,:)= PVDEPOTREE * PSVT(:,:,:,NSV_C2R2BEG+1) * PRHODJ(:,:,:)
+    END WHERE
+  ELSE IF ( HCLOUD == 'LIMA' ) THEN
+    WHERE (GDEP)
+      ZWDEPS(:,:,:)= PVDEPOTREE * PSVT(:,:,:,NSV_LIMA_NC) * PRHODJ(:,:,:)
+    END WHERE
+  END IF
+  DO JJ=2,(IJU-1)
+   DO JI=2,(IIU-1)
+     DO JK=2,(IKU-2) 
+       IF (GDEP(JI,JJ,JK)) THEN
+         PRRS(JI,JJ,JK,2) = PRRS(JI,JJ,JK,2) + (ZWDEPR(JI,JJ,JK+1)-ZWDEPR(JI,JJ,JK))/ &
+                            (PZZ(JI,JJ,JK+1)-PZZ(JI,JJ,JK))
+         IF ( HCLOUD == 'C2R2' .OR. HCLOUD == 'KHKO' ) THEN
+           PSVS(JI,JJ,JK,NSV_C2R2BEG+1) = PSVS(JI,JJ,JK,NSV_C2R2BEG+1) + &
+                                          (ZWDEPS(JI,JJ,JK+1)-ZWDEPS(JI,JJ,JK))/(PZZ(JI,JJ,JK+1)-PZZ(JI,JJ,JK))
+         ELSE IF ( HCLOUD == 'LIMA' ) THEN
+           PSVS(JI,JJ,JK,NSV_LIMA_NC) = PSVS(JI,JJ,JK,NSV_LIMA_NC) + &
+                                        (ZWDEPS(JI,JJ,JK+1)-ZWDEPS(JI,JJ,JK))/(PZZ(JI,JJ,JK+1)-PZZ(JI,JJ,JK))
+         END IF
+       END IF
+     END DO
+    END DO
+   END DO
+!
+!
+END IF
+!
+!*      3.     Computations of TKE  tendency due to canopy drag
+!              ------------------------------------------------
+
+!*      3.1    Creation of TKE by wake
+!              -----------------------
+!
+! from Kanda and Hino (1994)
+!
+! Ext = + Cd * u+^3  * Sv/Vair        vertical surfaces or trees             
+! Ext = - Cd * e * u  * Sv        trees Destruction of TKE due to 
+!   small-scale motions forced by leaves from Kanda and Hino (1994)
+!
+! with Vair = Vair/Vtot * Vtot = (Vair/Vtot) * Stot * Dz
+! and  Sv/Vair = (Sv/Stot) * Stot/Vair = (Sv/Stot) / (Vair/Vtot) / Dz
+!
+ZTKES(:,:,:)=  ( ZTKET(:,:,:) + PTSTEP * ZCDRAG(:,:,:) * ZDENSITY(:,:,:) &
+         * (SQRT( ZUT_SCAL(:,:,:)**2 + ZVT_SCAL(:,:,:)**2 ))**3 ) /      &
+     ( 1. + PTSTEP * ZCDRAG(:,:,:) * ZDENSITY(:,:,:) * SQRT(ZUT_SCAL(:,:,:)**2+ZVT_SCAL(:,:,:)**2))
+!
+PRTKES(:,:,:) = PRTKES(:,:,:) + (ZTKES(:,:,:)-ZTKET(:,:,:))*PRHODJ(:,:,:)/PTSTEP
+
+if ( lbudget_u   ) call Budget_store_end( tbudgets(NBUDGET_U  ), 'DRAG', prus  (:, :, :) )
+if ( lbudget_v   ) call Budget_store_end( tbudgets(NBUDGET_V  ), 'DRAG', prvs  (:, :, :) )
+if ( lbudget_tke ) call Budget_store_end( tbudgets(NBUDGET_TKE), 'DRAG', prtkes(:, :, :) )
+
+if ( odepotree ) then
+  if ( lbudget_rc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'DEPOTR', prrs(:, :, :, 2) )
+  if ( lbudget_sv .and. ( hcloud=='C2R2' .or. hcloud=='KHKO' ) ) &
+                    call Budget_store_end( tbudgets(NBUDGET_SV1-1+(NSV_C2R2BEG+1)), 'DEPOTR', psvs(:, :, :, NSV_C2R2BEG+1) )
+  if ( lbudget_sv .and.   hcloud=='LIMA' ) &
+                    call Budget_store_end( tbudgets(NBUDGET_SV1-1+NSV_LIMA_NC),     'DEPOTR', psvs(:, :, :, NSV_LIMA_NC) )
+end if
+
+END SUBROUTINE DRAG_VEG
diff --git a/src/mesonh/ext/ini_budget.f90 b/src/mesonh/ext/ini_budget.f90
new file mode 100644
index 0000000000000000000000000000000000000000..bc66bd58749351a9fbec8e702134909d600f6089
--- /dev/null
+++ b/src/mesonh/ext/ini_budget.f90
@@ -0,0 +1,4886 @@
+!MNH_LIC Copyright 1995-2022 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.
+!-----------------------------------------------------------------
+! Modifications:
+!  P. Wautelet 17/08/2020: add Budget_preallocate subroutine
+!-----------------------------------------------------------------
+module mode_ini_budget
+
+  use mode_msg
+
+  implicit none
+
+  private
+
+  public :: Budget_preallocate, Ini_budget
+
+  integer, parameter :: NSOURCESMAX = 60 !Maximum number of sources in a budget
+
+contains
+
+subroutine Budget_preallocate()
+
+use modd_budget, only: nbudgets, tbudgets,                                         &
+                       NBUDGET_U, NBUDGET_V, NBUDGET_W, NBUDGET_TH, NBUDGET_TKE,   &
+                       NBUDGET_RV, NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, &
+                       NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1
+use modd_nsv,    only: nsv, tsvlist
+
+integer          :: ibudget
+integer          :: jsv
+
+call Print_msg( NVERB_DEBUG, 'BUD', 'Budget_preallocate', 'called' )
+
+if ( allocated( tbudgets ) ) then
+  call Print_msg( NVERB_WARNING, 'BUD', 'Budget_preallocate', 'tbudgets already allocated' )
+  return
+end if
+
+nbudgets = NBUDGET_SV1 - 1 + nsv
+allocate( tbudgets( nbudgets ) )
+
+tbudgets(NBUDGET_U)%cname    = "UU"
+tbudgets(NBUDGET_U)%ccomment = "Budget for U"
+tbudgets(NBUDGET_U)%nid      = NBUDGET_U
+
+tbudgets(NBUDGET_V)%cname    = "VV"
+tbudgets(NBUDGET_V)%ccomment = "Budget for V"
+tbudgets(NBUDGET_V)%nid      = NBUDGET_V
+
+tbudgets(NBUDGET_W)%cname    = "WW"
+tbudgets(NBUDGET_W)%ccomment = "Budget for W"
+tbudgets(NBUDGET_W)%nid      = NBUDGET_W
+
+tbudgets(NBUDGET_TH)%cname    = "TH"
+tbudgets(NBUDGET_TH)%ccomment = "Budget for potential temperature"
+tbudgets(NBUDGET_TH)%nid      = NBUDGET_TH
+
+tbudgets(NBUDGET_TKE)%cname    = "TK"
+tbudgets(NBUDGET_TKE)%ccomment = "Budget for turbulent kinetic energy"
+tbudgets(NBUDGET_TKE)%nid      = NBUDGET_TKE
+
+tbudgets(NBUDGET_RV)%cname    = "RV"
+tbudgets(NBUDGET_RV)%ccomment = "Budget for water vapor mixing ratio"
+tbudgets(NBUDGET_RV)%nid      = NBUDGET_RV
+
+tbudgets(NBUDGET_RC)%cname    = "RC"
+tbudgets(NBUDGET_RC)%ccomment = "Budget for cloud water mixing ratio"
+tbudgets(NBUDGET_RC)%nid      = NBUDGET_RC
+
+tbudgets(NBUDGET_RR)%cname    = "RR"
+tbudgets(NBUDGET_RR)%ccomment = "Budget for rain water mixing ratio"
+tbudgets(NBUDGET_RR)%nid      = NBUDGET_RR
+
+tbudgets(NBUDGET_RI)%cname    = "RI"
+tbudgets(NBUDGET_RI)%ccomment = "Budget for cloud ice mixing ratio"
+tbudgets(NBUDGET_RI)%nid      = NBUDGET_RI
+
+tbudgets(NBUDGET_RS)%cname    = "RS"
+tbudgets(NBUDGET_RS)%ccomment = "Budget for snow/aggregate mixing ratio"
+tbudgets(NBUDGET_RS)%nid      = NBUDGET_RS
+
+tbudgets(NBUDGET_RG)%cname    = "RG"
+tbudgets(NBUDGET_RG)%ccomment = "Budget for graupel mixing ratio"
+tbudgets(NBUDGET_RG)%nid      = NBUDGET_RG
+
+tbudgets(NBUDGET_RH)%cname    = "RH"
+tbudgets(NBUDGET_RH)%ccomment = "Budget for hail mixing ratio"
+tbudgets(NBUDGET_RH)%nid      = NBUDGET_RH
+
+do jsv = 1, nsv
+  ibudget = NBUDGET_SV1 - 1 + jsv
+  tbudgets(ibudget)%cname    = Trim( tsvlist(jsv)%cmnhname )
+  tbudgets(ibudget)%ccomment = 'Budget for scalar variable ' // Trim( tsvlist(jsv)%cmnhname )
+  tbudgets(ibudget)%nid      = ibudget
+end do
+
+
+end subroutine Budget_preallocate
+
+
+!     #################################################################
+      SUBROUTINE Ini_budget(KLUOUT,PTSTEP,KSV,KRR,                    &
+      ONUMDIFU,ONUMDIFTH,ONUMDIFSV,                                   &
+      OHORELAX_UVWTH,OHORELAX_RV,OHORELAX_RC,OHORELAX_RR,             &
+      OHORELAX_RI,OHORELAX_RS, OHORELAX_RG, OHORELAX_RH,OHORELAX_TKE, &
+      OHORELAX_SV, OVE_RELAX, ove_relax_grd, OCHTRANS,                &
+      ONUDGING,ODRAGTREE,ODEPOTREE, OAERO_EOL,                        &
+      HRAD,HDCONV,HSCONV,HTURB,HTURBDIM,HCLOUD                        )
+!     #################################################################
+!
+!!****  *INI_BUDGET* - routine to initialize the parameters for the budgets
+!!
+!!    PURPOSE
+!!    -------
+!       The purpose of this routine is to set or compute the parameters used
+!     by the MESONH budgets. Names of files for budget recording are processed 
+!     and storage arrays are initialized.               
+!
+!!**  METHOD
+!!    ------
+!!      The essential of information is passed by modules. The choice of budgets 
+!!    and processes set by the user as integers is converted in "actions" 
+!!    readable  by the subroutine BUDGET under the form of string characters. 
+!!    For each complete process composed of several elementary processes, names 
+!!    of elementary processes are concatenated in order to have an explicit name
+!!    in the comment of the recording file for budget. 
+!!
+!!      
+!!    EXTERNAL
+!!    --------   
+!!      None
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------ 
+!!      Modules MODD_*
+!!
+!!    REFERENCE
+!!    ---------
+!!      Book2 of documentation (routine INI_BUDGET)
+!!      
+!!
+!!    AUTHOR
+!!    ------
+!!	P. Hereil      * Meteo France *
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original        01/03/95 
+!!      J. Stein        25/06/95  put the sources in phase with the code
+!!      J. Stein        20/07/95  reset to FALSE of all the switches when
+!!                                CBUTYPE /= MASK or CART
+!!      J. Stein        26/06/96  add the new sources + add the increment between
+!!                                2 active processes
+!!      J.-P. Pinty     13/12/96  Allowance of multiple SVs
+!!      J.-P. Pinty     11/01/97  Includes deep convection ice and forcing processes
+!!      J.-P. Lafore    10/02/98  Allocation of the RHODJs for budget
+!!      V. Ducrocq      04/06/99  //  
+!!      N. Asencio      18/06/99  // MASK case : delete KIMAX and KJMAX arguments,
+!!                                GET_DIM_EXT_ll initializes the dimensions of the
+!!                                extended local domain.
+!!                                LBU_MASK and NBUSURF are allocated on the extended
+!!                                local domain.
+!!                                add 3 local variables IBUDIM1,IBUDIM2,IBUDIM3
+!!                                to define the dimensions of the budget arrays
+!!                                in the different cases CART and MASK
+!!      J.-P. Pinty     23/09/00  add budget for C2R2
+!!      V. Masson       18/11/02  add budget for 2way nesting
+!!      O.Geoffroy      03/2006   Add KHKO scheme
+!!      J.-P. Pinty     22/04/97  add the explicit hail processes
+!!      C.Lac           10/08/07  Add ADV for PPM without contribution
+!!                                of each direction
+!!      C. Barthe       19/11/09  Add atmospheric electricity
+!!      C.Lac           01/07/11  Add vegetation drag        
+!!      P. Peyrille, M. Tomasini : include in the forcing term the 2D forcing
+!!                                terms in term 2DFRC search for modif PP . but Not very clean! 
+!!      C .Lac          27/05/14    add negativity corrections for chemical species
+!!      C.Lac           29/01/15  Correction for NSV_USER
+!!      J.Escobar       02/10/2015 modif for JPHEXT(JPVEXT) variable  
+!!      C.Lac           04/12/15  Correction for LSUPSAT 
+!  C. Lac         04/2016: negative contribution to the budget split between advection, turbulence and microphysics for KHKO/C2R2
+!  C. Barthe      01/2016: add budget for LIMA
+!  C. Lac         10/2016: add budget for droplet deposition
+!  S. Riette      11/2016: new budgets for ICE3/ICE4
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
+!  P. Wautelet 15/11/2019: remove unused CBURECORD variable
+!  P. Wautelet 24/02/2020: bugfix: corrected condition for budget NCDEPITH
+!  P. Wautelet 26/02/2020: bugfix: rename CEVA->REVA for budget for raindrop evaporation in C2R2 (necessary after commit 4ed805fc)
+!  P. Wautelet 26/02/2020: bugfix: add missing condition on OCOLD for NSEDIRH budget in LIMA case
+!  P. Wautelet 02-03/2020: use the new data structures and subroutines for budgets
+!  B. Vie      02/03/2020: LIMA negativity checks after turbulence, advection and microphysics budgets
+!  P .Wautelet 09/03/2020: add missing budgets for electricity
+!  P. Wautelet 25/03/2020: add missing ove_relax_grd
+!  P. Wautelet 23/04/2020: add nid in tbudgetdata datatype
+!  P. Wautelet + Benoit Vié 11/06/2020: improve removal of negative scalar variables + adapt the corresponding budgets
+!  P. Wautelet 30/06/2020: use NADVSV when possible
+!  P. Wautelet 30/06/2020: add NNETURSV, NNEADVSV and NNECONSV variables
+!  P. Wautelet 06/07/2020: bugfix: add condition on HTURB for NETUR sources for SV budgets
+!  P. Wautelet 08/12/2020: add nbusubwrite and nbutotwrite
+!  P. Wautelet 11/01/2021: ignore xbuwri for cartesian boxes (write at every xbulen interval)
+!  P. Wautelet 01/02/2021: bugfix: add missing CEDS source terms for SV budgets
+!  P. Wautelet 02/02/2021: budgets: add missing source terms for SV budgets in LIMA
+!  P. Wautelet 03/02/2021: budgets: add new source if LIMA splitting: CORR2
+!  P. Wautelet 10/02/2021: budgets: add missing sources for NSV_C2R2BEG+3 budget
+!  P. Wautelet 11/02/2021: budgets: add missing term SCAV for NSV_LIMA_SCAVMASS budget
+!  P. Wautelet 02/03/2021: budgets: add terms for blowing snow
+!  P. Wautelet 04/03/2021: budgets: add terms for drag due to buildings
+!  P. Wautelet 17/03/2021: choose source terms for budgets with character strings instead of multiple integer variables
+!  C. Barthe   14/03/2022: budgets: add terms for CIBU and RDSF in LIMA
+!  M. Taufour  01/07/2022: budgets: add concentration for snow, graupel, hail
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------ 
+!
+use modd_2d_frc,        only: l2d_adv_frc, l2d_rel_frc
+use modd_blowsnow,      only: lblowsnow
+use modd_blowsnow_n,    only: lsnowsubl
+use modd_budget
+use modd_ch_aerosol,    only: lorilam
+use modd_conf,          only: l1d, lcartesian, lforcing, lthinshell, nmodel
+use modd_dim_n,         only: nimax_ll, njmax_ll, nkmax
+use modd_dragbldg_n,    only: ldragbldg
+use modd_dust,          only: ldust
+use modd_dyn,           only: lcorio, xseglen
+use modd_dyn_n,         only: xtstep, locean
+use modd_elec_descr,    only: linductive, lrelax2fw_ion
+use modd_field,         only: TYPEREAL
+use modd_fire_n,        only: lblaze
+use modd_nsv,           only: nsv_aerbeg, nsv_aerend, nsv_aerdepbeg, nsv_aerdepend, nsv_c2r2beg, nsv_c2r2end,      &
+                              nsv_chembeg, nsv_chemend, nsv_chicbeg, nsv_chicend, nsv_csbeg, nsv_csend,            &
+                              nsv_dstbeg, nsv_dstend, nsv_dstdepbeg, nsv_dstdepend, nsv_elecbeg, nsv_elecend,      &
+#ifdef MNH_FOREFIRE
+                              nsv_ffbeg, nsv_ffend,                                                                &
+#endif
+                              nsv_lgbeg, nsv_lgend,                                                                &
+                              nsv_lima_beg, nsv_lima_end, nsv_lima_ccn_acti, nsv_lima_ccn_free, nsv_lima_hom_haze, &
+                              nsv_lima_ifn_free, nsv_lima_ifn_nucl, nsv_lima_imm_nucl,                             &
+                              nsv_lima_nc, nsv_lima_nr, nsv_lima_ni, nsv_lima_ns, nsv_lima_ng, nsv_lima_nh,        &
+                              nsv_lima_scavmass, nsv_lima_spro,                                                    &
+                              nsv_lnoxbeg, nsv_lnoxend, nsv_ppbeg, nsv_ppend,                                      &
+                              nsv_sltbeg, nsv_sltend, nsv_sltdepbeg, nsv_sltdepend, nsv_snwbeg, nsv_snwend,        &
+                              nsv_user, tsvlist
+use modd_parameters,   only: jphext
+use modd_param_c2r2,   only: ldepoc_c2r2 => ldepoc, lrain_c2r2 => lrain, lsedc_c2r2 => lsedc, lsupsat_c2r2 => lsupsat
+use modd_param_ice,    only: ladj_after, ladj_before, ldeposc_ice => ldeposc, lred, lsedic_ice => lsedic, lwarm_ice => lwarm
+use modd_param_n,      only: cactccn, celec
+use modd_param_lima,   only: laero_mass_lima => laero_mass, lacti_lima => lacti, ldepoc_lima => ldepoc, &
+                             lhhoni_lima => lhhoni, lmeyers_lima => lmeyers, lnucl_lima => lnucl,       &
+                             lptsplit,                                                                                       &
+                             lscav_lima => lscav, lsedc_lima => lsedc, lsedi_lima => lsedi,             &
+                             lspro_lima => lspro,  lcibu, lrdsf,           &
+                             nmom_c, nmom_r, nmom_i, nmom_s, nmom_g, nmom_h, nmod_ccn, nmod_ifn, nmod_imm
+use modd_ref,          only: lcouples
+use modd_salt,         only: lsalt
+use modd_turb_n,       only: lsubg_cond
+use modd_viscosity,    only: lvisc, lvisc_r, lvisc_sv, lvisc_th, lvisc_uvw
+
+USE MODE_ll
+
+IMPLICIT NONE
+!
+!*       0.1   declarations of argument
+!
+!
+INTEGER,         INTENT(IN) :: KLUOUT   ! Logical unit number for prints
+REAL, INTENT(IN)    :: PTSTEP           ! time step
+INTEGER, INTENT(IN) :: KSV              ! number of scalar variables
+INTEGER, INTENT(IN) :: KRR              ! number of moist variables
+LOGICAL, INTENT(IN) :: ONUMDIFU         ! switch to activate the numerical
+                                        ! diffusion for momentum
+LOGICAL, INTENT(IN) :: ONUMDIFTH        ! for meteorological scalar variables
+LOGICAL, INTENT(IN) :: ONUMDIFSV        ! for tracer scalar variables
+LOGICAL, INTENT(IN) :: OHORELAX_UVWTH  ! switch for the
+                       ! horizontal relaxation for U,V,W,TH
+LOGICAL, INTENT(IN) :: OHORELAX_RV     ! switch for the
+                       ! horizontal relaxation for Rv
+LOGICAL, INTENT(IN) :: OHORELAX_RC     ! switch for the
+                       ! horizontal relaxation for Rc
+LOGICAL, INTENT(IN) :: OHORELAX_RR     ! switch for the
+                       ! horizontal relaxation for Rr
+LOGICAL, INTENT(IN) :: OHORELAX_RI     ! switch for the
+                       ! horizontal relaxation for Ri
+LOGICAL, INTENT(IN) :: OHORELAX_RS     ! switch for the
+                       ! horizontal relaxation for Rs
+LOGICAL, INTENT(IN) :: OHORELAX_RG     ! switch for the
+                       ! horizontal relaxation for Rg
+LOGICAL, INTENT(IN) :: OHORELAX_RH     ! switch for the
+                       ! horizontal relaxation for Rh
+LOGICAL, INTENT(IN) :: OHORELAX_TKE    ! switch for the
+                       ! horizontal relaxation for tke
+LOGICAL,DIMENSION(:),INTENT(IN):: OHORELAX_SV     ! switch for the
+                       ! horizontal relaxation for scalar variables
+LOGICAL, INTENT(IN) :: OVE_RELAX        ! switch to activate the vertical
+                                        ! relaxation
+logical, intent(in) :: ove_relax_grd    ! switch to activate the vertical
+                                        ! relaxation to the lowest verticals
+LOGICAL, INTENT(IN) :: OCHTRANS         ! switch to activate convective
+                                        !transport for SV
+LOGICAL, INTENT(IN) :: ONUDGING         ! switch to activate nudging
+LOGICAL, INTENT(IN) :: ODRAGTREE        ! switch to activate vegetation drag
+LOGICAL, INTENT(IN) :: ODEPOTREE        ! switch to activate droplet deposition on tree
+LOGICAL, INTENT(IN) :: OAERO_EOL        ! switch to activate wind turbine wake
+CHARACTER (LEN=*), INTENT(IN) :: HRAD   ! type of the radiation scheme
+CHARACTER (LEN=*), INTENT(IN) :: HDCONV ! type of the deep convection scheme
+CHARACTER (LEN=*), INTENT(IN) :: HSCONV ! type of the shallow convection scheme
+CHARACTER (LEN=*), INTENT(IN) :: HTURB  ! type of the turbulence scheme
+CHARACTER (LEN=*), INTENT(IN) :: HTURBDIM! dimensionnality of the turbulence 
+                                        ! scheme
+CHARACTER (LEN=*), INTENT(IN) :: HCLOUD ! type of microphysical scheme
+!
+!*       0.2   declarations of local variables
+!
+real, parameter :: ITOL = 1e-6
+
+INTEGER :: JI, JJ                                         ! loop indices
+INTEGER :: IIMAX_ll, IJMAX_ll ! size of the physical global domain
+INTEGER :: IIU, IJU                                       ! size along x and y directions
+                                                          ! of the extended subdomain
+INTEGER :: IBUDIM1                                        ! first dimension of the budget arrays
+                                                          ! = NBUIMAX in CART case
+                                                          ! = NBUKMAX in MASK case
+INTEGER :: IBUDIM2                                        ! second dimension of the budget arrays
+                                                          ! = NBUJMAX in CART case
+                                                          ! = nbusubwrite in MASK case
+INTEGER :: IBUDIM3                                        ! third dimension of the budget arrays
+                                                          ! = NBUKMAX in CART case
+                                                          ! = NBUMASK in MASK case
+INTEGER             :: JSV               ! loop indice for the SVs
+INTEGER             :: IINFO_ll ! return status of the interface routine
+integer             :: ibudget
+logical             :: gtmp
+type(tbusourcedata) :: tzsource ! Used to prepare metadate of source terms
+
+call Print_msg( NVERB_DEBUG, 'BUD', 'Ini_budget', 'called' )
+!
+!*       1.    COMPUTE BUDGET VARIABLES
+!              ------------------------
+!
+NBUSTEP = NINT (XBULEN / PTSTEP)
+NBUTSHIFT=0
+!
+!  common dimension for all CBUTYPE values
+!
+IF (LBU_KCP) THEN
+  NBUKMAX = 1
+ELSE
+  NBUKMAX = NBUKH - NBUKL +1
+END IF
+!
+if ( cbutype == 'CART' .or. cbutype == 'MASK' ) then
+  !Check if xbulen is a multiple of xtstep (within tolerance)
+  if ( Abs( Nint( xbulen / xtstep ) * xtstep - xbulen ) > ( ITOL * xtstep ) ) &
+    call Print_msg( NVERB_WARNING, 'BUD', 'Ini_budget', 'xbulen is not a multiple of xtstep' )
+
+  if ( cbutype == 'CART' ) then
+    !Check if xseglen is a multiple of xbulen (within tolerance)
+    if ( Abs( Nint( xseglen / xbulen ) * xbulen - xseglen ) > ( ITOL * xseglen ) ) &
+      call Print_msg( NVERB_WARNING, 'BUD', 'Ini_budget', 'xseglen is not a multiple of xbulen' )
+
+    !Write cartesian budgets every xbulen time period (do not take xbuwri into account)
+    xbuwri = xbulen
+
+    nbusubwrite = 1                                      !Number of budget time average periods for each write
+    nbutotwrite = nbusubwrite * Nint( xseglen / xbulen ) !Total number of budget time average periods
+  else if ( cbutype == 'MASK' ) then
+    !Check if xbuwri is a multiple of xtstep (within tolerance)
+    if ( Abs( Nint( xbuwri / xtstep ) * xtstep - xbuwri ) > ( ITOL * xtstep ) ) &
+      call Print_msg( NVERB_WARNING, 'BUD', 'Ini_budget', 'xbuwri is not a multiple of xtstep' )
+
+    !Check if xbuwri is a multiple of xbulen (within tolerance)
+    if ( Abs( Nint( xbuwri / xbulen ) * xbulen - xbuwri ) > ( ITOL * xbulen ) ) &
+      call Print_msg( NVERB_WARNING, 'BUD', 'Ini_budget', 'xbuwri is not a multiple of xbulen' )
+
+    !Check if xseglen is a multiple of xbuwri (within tolerance)
+    if ( Abs( Nint( xseglen / xbuwri ) * xbuwri - xseglen ) > ( ITOL * xseglen ) ) &
+      call Print_msg( NVERB_WARNING, 'BUD', 'Ini_budget', 'xseglen is not a multiple of xbuwri' )
+
+    nbusubwrite = Nint ( xbuwri / xbulen )               !Number of budget time average periods for each write
+    nbutotwrite = nbusubwrite * Nint( xseglen / xbuwri ) !Total number of budget time average periods
+  end if
+end if
+
+IF (CBUTYPE=='CART') THEN              ! cartesian case only
+!
+  IF ( NBUIL < 1 )        CALL Print_msg( NVERB_ERROR, 'BUD', 'Ini_budget', 'NBUIL too small (<1)' )
+  IF ( NBUIL > NIMAX_ll ) CALL Print_msg( NVERB_ERROR, 'BUD', 'Ini_budget', 'NBUIL too large (>NIMAX)' )
+  IF ( NBUIH < 1 )        CALL Print_msg( NVERB_ERROR, 'BUD', 'Ini_budget', 'NBUIH too small (<1)' )
+  IF ( NBUIH > NIMAX_ll ) CALL Print_msg( NVERB_ERROR, 'BUD', 'Ini_budget', 'NBUIH too large (>NIMAX)' )
+  IF ( NBUIH < NBUIL )    CALL Print_msg( NVERB_ERROR, 'BUD', 'Ini_budget', 'NBUIH < NBUIL' )
+  IF (LBU_ICP) THEN
+    NBUIMAX_ll = 1
+  ELSE
+    NBUIMAX_ll = NBUIH - NBUIL +1
+  END IF
+
+  IF ( NBUJL < 1 )        CALL Print_msg( NVERB_ERROR, 'BUD', 'Ini_budget', 'NBUJL too small (<1)' )
+  IF ( NBUJL > NJMAX_ll ) CALL Print_msg( NVERB_ERROR, 'BUD', 'Ini_budget', 'NBUJL too large (>NJMAX)' )
+  IF ( NBUJH < 1 )        CALL Print_msg( NVERB_ERROR, 'BUD', 'Ini_budget', 'NBUJH too small (<1)' )
+  IF ( NBUJH > NJMAX_ll ) CALL Print_msg( NVERB_ERROR, 'BUD', 'Ini_budget', 'NBUJH too large (>NJMAX)' )
+  IF ( NBUJH < NBUJL )    CALL Print_msg( NVERB_ERROR, 'BUD', 'Ini_budget', 'NBUJH < NBUJL' )
+  IF (LBU_JCP) THEN
+    NBUJMAX_ll = 1
+  ELSE
+    NBUJMAX_ll = NBUJH - NBUJL +1
+  END IF
+
+  IF ( NBUKL < 1 )     CALL Print_msg( NVERB_ERROR, 'BUD', 'Ini_budget', 'NBUKL too small (<1)' )
+  IF ( NBUKL > NKMAX ) CALL Print_msg( NVERB_ERROR, 'BUD', 'Ini_budget', 'NBUKL too large (>NKMAX)' )
+  IF ( NBUKH < 1 )     CALL Print_msg( NVERB_ERROR, 'BUD', 'Ini_budget', 'NBUKH too small (<1)' )
+  IF ( NBUKH > NKMAX ) CALL Print_msg( NVERB_ERROR, 'BUD', 'Ini_budget', 'NBUKH too large (>NKMAX)' )
+  IF ( NBUKH < NBUKL ) CALL Print_msg( NVERB_ERROR, 'BUD', 'Ini_budget', 'NBUKH < NBUKL' )
+
+  CALL GET_INTERSECTION_ll(NBUIL+JPHEXT,NBUJL+JPHEXT,NBUIH+JPHEXT,NBUJH+JPHEXT, &
+      NBUSIL,NBUSJL,NBUSIH,NBUSJH,"PHYS",IINFO_ll)
+  IF ( IINFO_ll /= 1 ) THEN ! 
+    IF (LBU_ICP) THEN 
+      NBUIMAX = 1
+    ELSE
+      NBUIMAX = NBUSIH - NBUSIL +1
+    END IF
+    IF (LBU_JCP) THEN 
+      NBUJMAX = 1
+    ELSE
+      NBUJMAX =  NBUSJH - NBUSJL +1
+    END IF
+  ELSE ! the intersection is void 
+    CBUTYPE='SKIP'  ! no budget on this processor       
+    NBUIMAX = 0     ! in order to allocate void arrays
+    NBUJMAX = 0
+  ENDIF
+! three first dimensions of budget arrays in cart and skip cases
+   IBUDIM1=NBUIMAX
+   IBUDIM2=NBUJMAX
+   IBUDIM3=NBUKMAX
+! these variables are not be used 
+   NBUMASK=-1
+!
+ELSEIF (CBUTYPE=='MASK') THEN          ! mask case only 
+!
+  LBU_ENABLE=.TRUE.
+                                    ! result on the FM_FILE
+  NBUTIME = 1
+
+  CALL GET_DIM_EXT_ll ('B', IIU,IJU)
+  ALLOCATE( LBU_MASK( IIU ,IJU, NBUMASK) )
+  LBU_MASK(:,:,:)=.FALSE.
+  ALLOCATE( NBUSURF( IIU, IJU, NBUMASK, nbusubwrite) )
+  NBUSURF(:,:,:,:) = 0
+!
+! three first dimensions of budget arrays in mask case
+!  the order of the dimensions are the order expected in WRITE_DIACHRO routine:
+!  x,y,z,time,mask,processus  and in this case x and y are missing
+!  first dimension of the arrays : dimension along K
+!  second dimension of the arrays : number of the budget time period
+!  third dimension of the arrays : number of the budget masks zones
+  IBUDIM1=NBUKMAX
+  IBUDIM2=nbusubwrite
+  IBUDIM3=NBUMASK
+! these variables are not used in this case
+  NBUIMAX=-1
+  NBUJMAX=-1
+! the beginning and the end along x and y direction : global extended domain
+ ! get dimensions of the physical global domain
+   CALL GET_GLOBALDIMS_ll (IIMAX_ll,IJMAX_ll)
+   NBUIL=1
+   NBUIH=IIMAX_ll + 2 * JPHEXT
+   NBUJL=1 
+   NBUJH=IJMAX_ll + 2 * JPHEXT
+!
+ELSE                      ! default case
+!
+  LBU_ENABLE=.FALSE.
+  NBUIMAX = -1
+  NBUJMAX = -1
+  LBU_RU = .FALSE.
+  LBU_RV = .FALSE.
+  LBU_RW = .FALSE.
+  LBU_RTH= .FALSE.
+  LBU_RTKE= .FALSE.
+  LBU_RRV= .FALSE.
+  LBU_RRC= .FALSE.
+  LBU_RRR= .FALSE.
+  LBU_RRI= .FALSE.
+  LBU_RRS= .FALSE.
+  LBU_RRG= .FALSE.
+  LBU_RRH= .FALSE.
+  LBU_RSV= .FALSE.
+!
+! three first dimensions of budget arrays in default case
+  IBUDIM1=0
+  IBUDIM2=0
+  IBUDIM3=0
+!
+END IF  
+!
+!
+!-------------------------------------------------------------------------------
+!
+!*       2.    ALLOCATE MEMORY FOR BUDGET ARRAYS AND INITIALIZE
+!              ------------------------------------------------
+!
+LBU_BEG =.TRUE. 
+!
+!-------------------------------------------------------------------------------
+!
+!*       3.    INITALIZE VARIABLES
+!              -------------------
+!
+!Create intermediate variable to store rhodj for scalar variables
+if ( lbu_rth .or. lbu_rtke .or. lbu_rrv .or. lbu_rrc .or. lbu_rrr .or. &
+     lbu_rri .or. lbu_rrs  .or. lbu_rrg .or. lbu_rrh .or. lbu_rsv      ) then
+  allocate( tburhodj )
+
+  tburhodj%cmnhname  = 'RhodJS'
+  tburhodj%cstdname  = ''
+  tburhodj%clongname = 'RhodJS'
+  tburhodj%cunits    = 'kg'
+  tburhodj%ccomment  = 'RhodJ for Scalars variables'
+  tburhodj%ngrid     = 1
+  tburhodj%ntype     = TYPEREAL
+  tburhodj%ndims     = 3
+
+  allocate( tburhodj%xdata(ibudim1, ibudim2, ibudim3) )
+  tburhodj%xdata(:, :, :) = 0.
+end if
+
+
+tzsource%ntype    = TYPEREAL
+tzsource%ndims    = 3
+
+! Budget of RU
+tbudgets(NBUDGET_U)%lenabled = lbu_ru
+
+if ( lbu_ru ) then
+  allocate( tbudgets(NBUDGET_U)%trhodj )
+
+  tbudgets(NBUDGET_U)%trhodj%cmnhname  = 'RhodJX'
+  tbudgets(NBUDGET_U)%trhodj%cstdname  = ''
+  tbudgets(NBUDGET_U)%trhodj%clongname = 'RhodJX'
+  tbudgets(NBUDGET_U)%trhodj%cunits    = 'kg'
+  tbudgets(NBUDGET_U)%trhodj%ccomment  = 'RhodJ for momentum along X axis'
+  tbudgets(NBUDGET_U)%trhodj%ngrid     = 2
+  tbudgets(NBUDGET_U)%trhodj%ntype     = TYPEREAL
+  tbudgets(NBUDGET_U)%trhodj%ndims     = 3
+
+  allocate( tbudgets(NBUDGET_U)%trhodj%xdata(ibudim1, ibudim2, ibudim3) )
+  tbudgets(NBUDGET_U)%trhodj%xdata(:, :, :) = 0.
+
+  !Allocate all basic source terms (used or not)
+  !The size should be large enough (bigger than necessary is OK)
+  tbudgets(NBUDGET_U)%nsourcesmax = NSOURCESMAX
+  allocate( tbudgets(NBUDGET_U)%tsources(NSOURCESMAX) )
+
+  allocate( tbudgets(NBUDGET_U)%xtmpstore(ibudim1, ibudim2, ibudim3) )
+
+  tbudgets(NBUDGET_U)%tsources(:)%ngroup = 0
+
+  tzsource%ccomment = 'Budget of momentum along X axis'
+  tzsource%ngrid    = 2
+
+  tzsource%cunits   = 'm s-1'
+
+  tzsource%cmnhname   = 'INIF'
+  tzsource%clongname  = 'initial state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_U), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+  tzsource%cmnhname   = 'ENDF'
+  tzsource%clongname  = 'final state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_U), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+  tzsource%cmnhname   = 'AVEF'
+  tzsource%clongname  = 'averaged state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_U), tzsource, odonotinit = .true., ooverwrite = .false. )
+
+  tzsource%cunits   = 'm s-2'
+
+  tzsource%cmnhname   = 'ASSE'
+  tzsource%clongname  = 'time filter (Asselin)'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_U), tzsource )
+
+  tzsource%cmnhname   = 'NEST'
+  tzsource%clongname  = 'nesting'
+  tzsource%lavailable = nmodel > 1
+  call Budget_source_add( tbudgets(NBUDGET_U), tzsource )
+
+  tzsource%cmnhname   = 'FRC'
+  tzsource%clongname  = 'forcing'
+  tzsource%lavailable = lforcing
+  call Budget_source_add( tbudgets(NBUDGET_U), tzsource )
+
+  tzsource%cmnhname   = 'NUD'
+  tzsource%clongname  = 'nudging'
+  tzsource%lavailable = onudging
+  call Budget_source_add( tbudgets(NBUDGET_U), tzsource )
+
+  tzsource%cmnhname   = 'CURV'
+  tzsource%clongname  = 'curvature'
+  tzsource%lavailable = .not.l1d .and. .not.lcartesian
+  call Budget_source_add( tbudgets(NBUDGET_U), tzsource )
+
+  tzsource%cmnhname   = 'COR'
+  tzsource%clongname  = 'Coriolis'
+  tzsource%lavailable = lcorio
+  call Budget_source_add( tbudgets(NBUDGET_U), tzsource )
+
+  tzsource%cmnhname   = 'DIF'
+  tzsource%clongname  = 'numerical diffusion'
+  tzsource%lavailable = onumdifu
+  call Budget_source_add( tbudgets(NBUDGET_U), tzsource )
+
+  tzsource%cmnhname   = 'REL'
+  tzsource%clongname  = 'relaxation'
+  tzsource%lavailable = ohorelax_uvwth .or. ove_relax .or. ove_relax_grd
+  call Budget_source_add( tbudgets(NBUDGET_U), tzsource )
+
+  tzsource%cmnhname   = 'DRAG'
+  tzsource%clongname  = 'drag force due to trees'
+  tzsource%lavailable = odragtree
+  call Budget_source_add( tbudgets(NBUDGET_U), tzsource )
+
+  tzsource%cmnhname   = 'DRAGEOL'
+  tzsource%clongname  = 'drag force due to wind turbine'
+  tzsource%lavailable = OAERO_EOL
+  call Budget_source_add( tbudgets(NBUDGET_U), tzsource )
+
+  tzsource%cmnhname   = 'DRAGB'
+  tzsource%clongname  = 'drag force due to buildings'
+  tzsource%lavailable = ldragbldg
+  call Budget_source_add( tbudgets(NBUDGET_U), tzsource )
+
+  tzsource%cmnhname   = 'VTURB'
+  tzsource%clongname  = 'vertical turbulent diffusion'
+  tzsource%lavailable = hturb == 'TKEL'
+  call Budget_source_add( tbudgets(NBUDGET_U), tzsource )
+
+  tzsource%cmnhname   = 'HTURB'
+  tzsource%clongname  = 'horizontal turbulent diffusion'
+  tzsource%lavailable = hturb == 'TKEL' .and. HTURBDIM == '3DIM'
+  call Budget_source_add( tbudgets(NBUDGET_U), tzsource )
+
+  tzsource%cmnhname   = 'MAFL'
+  tzsource%clongname  = 'mass flux'
+  tzsource%lavailable = hsconv == 'EDKF'
+  call Budget_source_add( tbudgets(NBUDGET_U), tzsource )
+
+  tzsource%cmnhname   = 'VISC'
+  tzsource%clongname  = 'viscosity'
+  tzsource%lavailable = lvisc .and. lvisc_uvw
+  call Budget_source_add( tbudgets(NBUDGET_U), tzsource )
+
+  tzsource%cmnhname   = 'ADV'
+  tzsource%clongname  = 'advection'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_U), tzsource )
+
+  tzsource%cmnhname   = 'PRES'
+  tzsource%clongname  = 'pressure'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_U), tzsource )
+
+
+  call Sourcelist_sort_compact( tbudgets(NBUDGET_U) )
+
+  call Sourcelist_scan( tbudgets(NBUDGET_U), cbulist_ru )
+end if
+
+! Budget of RV
+tbudgets(NBUDGET_V)%lenabled = lbu_rv
+
+if ( lbu_rv ) then
+  allocate( tbudgets(NBUDGET_V)%trhodj )
+
+  tbudgets(NBUDGET_V)%trhodj%cmnhname  = 'RhodJY'
+  tbudgets(NBUDGET_V)%trhodj%cstdname  = ''
+  tbudgets(NBUDGET_V)%trhodj%clongname = 'RhodJY'
+  tbudgets(NBUDGET_V)%trhodj%cunits    = 'kg'
+  tbudgets(NBUDGET_V)%trhodj%ccomment  = 'RhodJ for momentum along Y axis'
+  tbudgets(NBUDGET_V)%trhodj%ngrid     = 3
+  tbudgets(NBUDGET_V)%trhodj%ntype     = TYPEREAL
+  tbudgets(NBUDGET_V)%trhodj%ndims     = 3
+
+  allocate( tbudgets(NBUDGET_V)%trhodj%xdata(ibudim1, ibudim2, ibudim3) )
+  tbudgets(NBUDGET_V)%trhodj%xdata(:, :, :) = 0.
+
+  !Allocate all basic source terms (used or not)
+  !The size should be large enough (bigger than necessary is OK)
+  tbudgets(NBUDGET_V)%nsourcesmax = NSOURCESMAX
+  allocate( tbudgets(NBUDGET_V)%tsources(NSOURCESMAX) )
+
+  allocate( tbudgets(NBUDGET_V)%xtmpstore(ibudim1, ibudim2, ibudim3) )
+
+  tbudgets(NBUDGET_V)%tsources(:)%ngroup = 0
+
+  tzsource%ccomment = 'Budget of momentum along Y axis'
+  tzsource%ngrid    = 3
+
+  tzsource%cunits   = 'm s-1'
+
+  tzsource%cmnhname   = 'INIF'
+  tzsource%clongname  = 'initial state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_V), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+  tzsource%cmnhname   = 'ENDF'
+  tzsource%clongname  = 'final state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_V), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+  tzsource%cmnhname   = 'AVEF'
+  tzsource%clongname  = 'averaged state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_V), tzsource, odonotinit = .true., ooverwrite = .false. )
+
+  tzsource%cunits   = 'm s-2'
+
+  tzsource%cmnhname   = 'ASSE'
+  tzsource%clongname  = 'time filter (Asselin)'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_V), tzsource )
+
+  tzsource%cmnhname   = 'NEST'
+  tzsource%clongname  = 'nesting'
+  tzsource%lavailable = nmodel > 1
+  call Budget_source_add( tbudgets(NBUDGET_V), tzsource )
+
+  tzsource%cmnhname   = 'FRC'
+  tzsource%clongname  = 'forcing'
+  tzsource%lavailable = lforcing
+  call Budget_source_add( tbudgets(NBUDGET_V), tzsource )
+
+  tzsource%cmnhname   = 'NUD'
+  tzsource%clongname  = 'nudging'
+  tzsource%lavailable = onudging
+  call Budget_source_add( tbudgets(NBUDGET_V), tzsource )
+
+  tzsource%cmnhname   = 'CURV'
+  tzsource%clongname  = 'curvature'
+  tzsource%lavailable = .not.l1d .and. .not.lcartesian
+  call Budget_source_add( tbudgets(NBUDGET_V), tzsource )
+
+  tzsource%cmnhname   = 'COR'
+  tzsource%clongname  = 'Coriolis'
+  tzsource%lavailable = lcorio
+  call Budget_source_add( tbudgets(NBUDGET_V), tzsource )
+
+  tzsource%cmnhname   = 'DIF'
+  tzsource%clongname  = 'numerical diffusion'
+  tzsource%lavailable = onumdifu
+  call Budget_source_add( tbudgets(NBUDGET_V), tzsource )
+
+  tzsource%cmnhname   = 'REL'
+  tzsource%clongname  = 'relaxation'
+  tzsource%lavailable = ohorelax_uvwth .or. ove_relax .or. ove_relax_grd
+  call Budget_source_add( tbudgets(NBUDGET_V), tzsource )
+
+  tzsource%cmnhname   = 'DRAG'
+  tzsource%clongname  = 'drag force due to trees'
+  tzsource%lavailable = odragtree
+  call Budget_source_add( tbudgets(NBUDGET_V), tzsource )
+
+  tzsource%cmnhname   = 'DRAGEOL'
+  tzsource%clongname  = 'drag force due to wind turbine'
+  tzsource%lavailable = OAERO_EOL
+  call Budget_source_add( tbudgets(NBUDGET_V), tzsource )
+
+  tzsource%cmnhname   = 'DRAGB'
+  tzsource%clongname  = 'drag force due to buildings'
+  tzsource%lavailable = ldragbldg
+  call Budget_source_add( tbudgets(NBUDGET_V), tzsource )
+
+  tzsource%cmnhname   = 'VTURB'
+  tzsource%clongname  = 'vertical turbulent diffusion'
+  tzsource%lavailable = hturb == 'TKEL'
+  call Budget_source_add( tbudgets(NBUDGET_V), tzsource )
+
+  tzsource%cmnhname   = 'HTURB'
+  tzsource%clongname  = 'horizontal turbulent diffusion'
+  tzsource%lavailable = hturb == 'TKEL' .and. HTURBDIM == '3DIM'
+  call Budget_source_add( tbudgets(NBUDGET_V), tzsource )
+
+  tzsource%cmnhname   = 'MAFL'
+  tzsource%clongname  = 'mass flux'
+  tzsource%lavailable = hsconv == 'EDKF'
+  call Budget_source_add( tbudgets(NBUDGET_V), tzsource )
+
+  tzsource%cmnhname   = 'VISC'
+  tzsource%clongname  = 'viscosity'
+  tzsource%lavailable = lvisc .and. lvisc_uvw
+  call Budget_source_add( tbudgets(NBUDGET_V), tzsource )
+
+  tzsource%cmnhname   = 'ADV'
+  tzsource%clongname  = 'advection'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_V), tzsource )
+
+  tzsource%cmnhname   = 'PRES'
+  tzsource%clongname  = 'pressure'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_V), tzsource )
+
+
+  call Sourcelist_sort_compact( tbudgets(NBUDGET_V) )
+
+  call Sourcelist_scan( tbudgets(NBUDGET_V), cbulist_rv )
+end if
+
+! Budget of RW
+tbudgets(NBUDGET_W)%lenabled = lbu_rw
+
+if ( lbu_rw ) then
+  allocate( tbudgets(NBUDGET_W)%trhodj )
+
+  tbudgets(NBUDGET_W)%trhodj%cmnhname  = 'RhodJZ'
+  tbudgets(NBUDGET_W)%trhodj%cstdname  = ''
+  tbudgets(NBUDGET_W)%trhodj%clongname = 'RhodJZ'
+  tbudgets(NBUDGET_W)%trhodj%cunits    = 'kg'
+  tbudgets(NBUDGET_W)%trhodj%ccomment  = 'RhodJ for momentum along Z axis'
+  tbudgets(NBUDGET_W)%trhodj%ngrid     = 4
+  tbudgets(NBUDGET_W)%trhodj%ntype     = TYPEREAL
+  tbudgets(NBUDGET_W)%trhodj%ndims     = 3
+
+  allocate( tbudgets(NBUDGET_W)%trhodj%xdata(ibudim1, ibudim2, ibudim3) )
+  tbudgets(NBUDGET_W)%trhodj%xdata(:, :, :) = 0.
+
+  !Allocate all basic source terms (used or not)
+  !The size should be large enough (bigger than necessary is OK)
+  tbudgets(NBUDGET_W)%nsourcesmax = NSOURCESMAX
+  allocate( tbudgets(NBUDGET_W)%tsources(NSOURCESMAX) )
+
+  allocate( tbudgets(NBUDGET_W)%xtmpstore(ibudim1, ibudim2, ibudim3) )
+
+  tbudgets(NBUDGET_W)%tsources(:)%ngroup = 0
+
+  tzsource%ccomment = 'Budget of momentum along Z axis'
+  tzsource%ngrid    = 4
+
+  tzsource%cunits   = 'm s-1'
+
+  tzsource%cmnhname   = 'INIF'
+  tzsource%clongname  = 'initial state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_W), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+  tzsource%cmnhname   = 'ENDF'
+  tzsource%clongname  = 'final state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_W), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+  tzsource%cmnhname   = 'AVEF'
+  tzsource%clongname  = 'averaged state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_W), tzsource, odonotinit = .true., ooverwrite = .false. )
+
+  tzsource%cunits   = 'm s-2'
+
+  tzsource%cmnhname   = 'ASSE'
+  tzsource%clongname  = 'time filter (Asselin)'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_W), tzsource )
+
+  tzsource%cmnhname   = 'NEST'
+  tzsource%clongname  = 'nesting'
+  tzsource%lavailable = nmodel > 1
+  call Budget_source_add( tbudgets(NBUDGET_W), tzsource )
+
+  tzsource%cmnhname   = 'FRC'
+  tzsource%clongname  = 'forcing'
+  tzsource%lavailable = lforcing
+  call Budget_source_add( tbudgets(NBUDGET_W), tzsource )
+
+  tzsource%cmnhname   = 'NUD'
+  tzsource%clongname  = 'nudging'
+  tzsource%lavailable = onudging
+  call Budget_source_add( tbudgets(NBUDGET_W), tzsource )
+
+  tzsource%cmnhname   = 'CURV'
+  tzsource%clongname  = 'curvature'
+  tzsource%lavailable = .not.l1d .and. .not.lcartesian .and. .not.lthinshell
+  call Budget_source_add( tbudgets(NBUDGET_W), tzsource )
+
+  tzsource%cmnhname   = 'COR'
+  tzsource%clongname  = 'Coriolis'
+  tzsource%lavailable = lcorio .and. .not.l1d .and. .not.lthinshell
+  call Budget_source_add( tbudgets(NBUDGET_W), tzsource )
+
+  tzsource%cmnhname   = 'DIF'
+  tzsource%clongname  = 'numerical diffusion'
+  tzsource%lavailable = onumdifu
+  call Budget_source_add( tbudgets(NBUDGET_W), tzsource )
+
+  tzsource%cmnhname   = 'REL'
+  tzsource%clongname  = 'relaxation'
+  tzsource%lavailable = ohorelax_uvwth .or. ove_relax .or. ove_relax_grd
+  call Budget_source_add( tbudgets(NBUDGET_W), tzsource )
+
+  tzsource%cmnhname   = 'VTURB'
+  tzsource%clongname  = 'vertical turbulent diffusion'
+  tzsource%lavailable = hturb == 'TKEL'
+  call Budget_source_add( tbudgets(NBUDGET_W), tzsource )
+
+  tzsource%cmnhname   = 'HTURB'
+  tzsource%clongname  = 'horizontal turbulent diffusion'
+  tzsource%lavailable = hturb == 'TKEL' .and. HTURBDIM == '3DIM'
+  call Budget_source_add( tbudgets(NBUDGET_W), tzsource )
+
+  tzsource%cmnhname   = 'VISC'
+  tzsource%clongname  = 'viscosity'
+  tzsource%lavailable = lvisc .and. lvisc_uvw
+  call Budget_source_add( tbudgets(NBUDGET_W), tzsource )
+
+  tzsource%cmnhname   = 'GRAV'
+  tzsource%clongname  = 'gravity'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_W), tzsource )
+
+  tzsource%cmnhname   = 'ADV'
+  tzsource%clongname  = 'advection'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_W), tzsource )
+
+  tzsource%cmnhname   = 'PRES'
+  tzsource%clongname  = 'pressure'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_W), tzsource )
+
+  tzsource%cmnhname   = 'DRAGEOL'
+  tzsource%clongname  = 'drag force due to wind turbine'
+  tzsource%lavailable = OAERO_EOL
+  call Budget_source_add( tbudgets(NBUDGET_W), tzsource )
+
+  call Sourcelist_sort_compact( tbudgets(NBUDGET_W) )
+
+  call Sourcelist_scan( tbudgets(NBUDGET_W), cbulist_rw )
+end if
+
+! Budget of RTH
+tbudgets(NBUDGET_TH)%lenabled = lbu_rth
+
+if ( lbu_rth ) then
+  tbudgets(NBUDGET_TH)%trhodj => tburhodj
+
+  !Allocate all basic source terms (used or not)
+  !The size should be large enough (bigger than necessary is OK)
+  tbudgets(NBUDGET_TH)%nsourcesmax = NSOURCESMAX
+  allocate( tbudgets(NBUDGET_TH)%tsources(NSOURCESMAX) )
+
+  allocate( tbudgets(NBUDGET_TH)%xtmpstore(ibudim1, ibudim2, ibudim3) )
+
+  tbudgets(NBUDGET_TH)%tsources(:)%ngroup = 0
+
+  tzsource%ccomment = 'Budget of potential temperature'
+  tzsource%ngrid    = 1
+
+  tzsource%cunits   = 'K'
+
+  tzsource%cmnhname   = 'INIF'
+  tzsource%clongname  = 'initial state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+  tzsource%cmnhname   = 'ENDF'
+  tzsource%clongname  = 'final state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+  tzsource%cmnhname   = 'AVEF'
+  tzsource%clongname  = 'averaged state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource, odonotinit = .true., ooverwrite = .false. )
+
+  tzsource%cunits   = 'K s-1'
+
+  tzsource%cmnhname   = 'ASSE'
+  tzsource%clongname  = 'time filter (Asselin)'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'NEST'
+  tzsource%clongname  = 'nesting'
+  tzsource%lavailable = nmodel > 1
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'FRC'
+  tzsource%clongname  = 'forcing'
+  tzsource%lavailable = lforcing
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = '2DADV'
+  tzsource%clongname  = 'advective forcing'
+  tzsource%lavailable = l2d_adv_frc
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = '2DREL'
+  tzsource%clongname  = 'relaxation forcing'
+  tzsource%lavailable = l2d_rel_frc
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'NUD'
+  tzsource%clongname  = 'nudging'
+  tzsource%lavailable = onudging
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'PREF'
+  tzsource%clongname  = 'reference pressure'
+  tzsource%lavailable = krr > 0 .and. .not.l1d
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'DIF'
+  tzsource%clongname  = 'numerical diffusion'
+  tzsource%lavailable = onumdifth
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'REL'
+  tzsource%clongname  = 'relaxation'
+  tzsource%lavailable = ohorelax_uvwth .or. ove_relax .or. ove_relax_grd
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'RAD'
+  tzsource%clongname  = 'radiation'
+  tzsource%lavailable = hrad /= 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'DCONV'
+  tzsource%clongname  = 'KAFR convection'
+  tzsource%lavailable = hdconv == 'KAFR' .OR. hsconv == 'KAFR'
+
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'BLAZE'
+  tzsource%clongname  = 'blaze fire model contribution'
+  tzsource%lavailable = lblaze
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'VTURB'
+  tzsource%clongname  = 'vertical turbulent diffusion'
+  tzsource%lavailable = hturb == 'TKEL'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'HTURB'
+  tzsource%clongname  = 'horizontal turbulent diffusion'
+  tzsource%lavailable = hturb == 'TKEL' .and. HTURBDIM == '3DIM'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'DISSH'
+  tzsource%clongname  = 'dissipation'
+  tzsource%lavailable = hturb == 'TKEL'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'NETUR'
+  tzsource%clongname  = 'negativity correction induced by turbulence'
+  tzsource%lavailable = hturb == 'TKEL' .and. (      hcloud == 'KESS' .or. hcloud == 'ICE3' .or. hcloud == 'ICE4' &
+                                                .or. hcloud == 'KHKO' .or. hcloud == 'C2R2' .or. hcloud == 'LIMA' )
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'MAFL'
+  tzsource%clongname  = 'mass flux'
+  tzsource%lavailable = hsconv == 'EDKF'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'SNSUB'
+  tzsource%clongname  = 'blowing snow sublimation'
+  tzsource%lavailable = lblowsnow .and. lsnowsubl
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'VISC'
+  tzsource%clongname  = 'viscosity'
+  tzsource%lavailable = lvisc .and. lvisc_th
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'OCEAN'
+  tzsource%clongname  = 'radiative tendency due to SW penetrating ocean'
+  tzsource%lavailable = locean .and. (.not. lcouples)
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'ADV'
+  tzsource%clongname  = 'total advection'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'NEADV'
+  tzsource%clongname  = 'negativity correction induced by advection'
+  tzsource%lavailable =       hcloud == 'KESS' .or. hcloud == 'ICE3' .or. hcloud == 'ICE4' &
+                         .or. hcloud == 'KHKO' .or. hcloud == 'C2R2' .or. hcloud == 'LIMA'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'NEGA'
+  tzsource%clongname  = 'negativity correction'
+  tzsource%lavailable =       hcloud == 'KESS' .or. hcloud == 'ICE3' .or. hcloud == 'ICE4' &
+                         .or. hcloud == 'KHKO' .or. hcloud == 'C2R2' .or. hcloud == 'LIMA'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'SEDI'
+  tzsource%clongname  = 'heat transport by hydrometeors sedimentation'
+  tzsource%lavailable = hcloud == 'LIMA' .and. lptsplit
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'HENU'
+  tzsource%clongname  = 'heterogeneous nucleation'
+  gtmp = cactccn == 'ABRK' .and. (lorilam .or. ldust .or. lsalt )
+  tzsource%lavailable =      ( hcloud      == 'LIMA' .and. nmom_c.ge.1 .and. lacti_lima .and. nmod_ccn >= 1   &
+                                                     .and. ( .not.lptsplit .or. .not.lsubg_cond )          ) &
+                        .or. ( hcloud      == 'C2R2' .and. ( gtmp .or. .not.lsupsat_c2r2 ) )                 &
+                        .or. ( hcloud      == 'KHKO' .and. ( gtmp .or. .not.lsupsat_c2r2 ) )
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'REVA'
+  tzsource%clongname  = 'rain evaporation'
+  tzsource%lavailable =     ( hcloud      == 'LIMA' .and. ( ( .not. lptsplit .and. nmom_r.ge.1 ) .or. lptsplit ) ) &
+                       .or. ( hcloud(1:3) == 'ICE'  .and. lwarm_ice )                                              &
+                       .or. ( hcloud      == 'C2R2' .and. lrain_c2r2 )                                             &
+                       .or. ( hcloud      == 'KHKO' .and. lrain_c2r2 )                                             &
+                       .or.   hcloud      == 'KESS'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'HIN'
+  tzsource%clongname  = 'heterogeneous ice nucleation'
+  tzsource%lavailable = hcloud(1:3) == 'ICE' .or. (hcloud == 'LIMA' .and. nmom_i == 1)
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'HIND'
+  tzsource%clongname  = 'heterogeneous nucleation by deposition'
+  tzsource%lavailable = hcloud == 'LIMA' .and. nmom_i.ge.1 .and. lnucl_lima
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'HINC'
+  tzsource%clongname  = 'heterogeneous nucleation by contact'
+  tzsource%lavailable = hcloud == 'LIMA' .and. nmom_i.ge.1 .and. lnucl_lima
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'HON'
+  tzsource%clongname  = 'homogeneous nucleation'
+  tzsource%lavailable = hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'HONH'
+  tzsource%clongname  = 'haze homogeneous nucleation'
+  tzsource%lavailable = hcloud == 'LIMA' .and. nmom_i.ge.1 .and. lnucl_lima .and. lhhoni_lima .and. nmod_ccn >= 1
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'HONC'
+  tzsource%clongname  = 'droplet homogeneous freezing'
+  tzsource%lavailable = hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. lnucl_lima ) )
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'HONR'
+  tzsource%clongname  = 'raindrop homogeneous freezing'
+  tzsource%lavailable = hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. lnucl_lima .and. nmom_r.ge.1 ) )
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'SFR'
+  tzsource%clongname  = 'spontaneous freezing'
+  tzsource%lavailable = hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'DEPS'
+  tzsource%clongname  = 'deposition on snow'
+  tzsource%lavailable = ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_s.ge.1 ) ) ) .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'DEPG'
+  tzsource%clongname  = 'deposition on graupel'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 ) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'DEPH'
+  tzsource%clongname  = 'deposition on hail'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. nmom_h.ge.1 ) ) &
+                        .or. hcloud == 'ICE4'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'IMLT'
+  tzsource%clongname  = 'melting of ice'
+  tzsource%lavailable = ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 ) ) ) .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'BERFI'
+  tzsource%clongname  = 'Bergeron-Findeisen'
+  tzsource%lavailable = ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 ) ) ) .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'RIM'
+  tzsource%clongname  = 'riming of cloud water'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 ) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'ACC'
+  tzsource%clongname  = 'accretion of rain on aggregates'
+  tzsource%lavailable =      ( hcloud == 'LIMA' .and. (        lptsplit                                                            &
+                                                        .or. ( nmom_s.ge.1 .and. nmom_r.ge.1 ) ) ) &
+                        .or.   hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'CFRZ'
+  tzsource%clongname  = 'conversion freezing of rain'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 ) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'WETG'
+  tzsource%clongname  = 'wet growth of graupel'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 ) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'DRYG'
+  tzsource%clongname  = 'dry growth of graupel'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 ) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'GMLT'
+  tzsource%clongname  = 'graupel melting'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 ) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'WETH'
+  tzsource%clongname  = 'wet growth of hail'
+  tzsource%lavailable =      ( hcloud == 'LIMA' .and. .not.lptsplit .and. nmom_h.ge.1 .and. nmom_i.ge.1 &
+                                                .and. nmom_c.ge.1    .and. nmom_s.ge.1 )                   &
+                        .or. ( hcloud == 'LIMA' .and. lptsplit ) &
+                        .or.   hcloud == 'ICE4' 
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'DRYH'
+  tzsource%clongname  = 'dry growth of hail'
+  tzsource%lavailable = hcloud == 'ICE4' .and. lred .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'HMLT'
+  tzsource%clongname  = 'melting of hail'
+  tzsource%lavailable =      ( hcloud == 'LIMA' .and. .not.lptsplit .and. nmom_h.ge.1 .and. nmom_i.ge.1 &
+                                                .and. nmom_c.ge.1    .and. nmom_s.ge.1 ) &
+                        .or. ( hcloud == 'LIMA' .and. lptsplit ) &
+                        .or.   hcloud == 'ICE4'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'CORR'
+  tzsource%clongname  = 'correction'
+  tzsource%lavailable = hcloud(1:3) == 'ICE' .and. lred .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'CEDS'
+  tzsource%clongname  = 'adjustment to saturation'
+  tzsource%lavailable = hcloud == 'LIMA'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'ADJU'
+  tzsource%clongname  = 'adjustment to saturation'
+  tzsource%lavailable = hcloud(1:3) == 'ICE' .and. lred .and. ladj_before .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'DEPI'
+  tzsource%clongname  = 'deposition on ice'
+  tzsource%lavailable =      ( hcloud(1:3) == 'ICE' .and. ( .not. lred .or. ( lred .and. ladj_after ) .or. celec /= 'NONE') ) &
+                        .or. ( hcloud == 'LIMA' .and. lptsplit )
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'COND'
+  tzsource%clongname  = 'vapor condensation or cloud water evaporation'
+  tzsource%lavailable = hcloud == 'C2R2' .or. hcloud == 'KHKO' .or. hcloud == 'KESS' .or. hcloud == 'REVE'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'NECON'
+  tzsource%clongname  = 'negativity correction induced by condensation'
+  tzsource%lavailable = (      hcloud == 'KESS' .or. hcloud == 'ICE3' .or. hcloud == 'ICE4'   &
+                          .or. hcloud == 'KHKO' .or. hcloud == 'C2R2' .or. hcloud == 'LIMA' ) &
+                        .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+
+  call Sourcelist_sort_compact( tbudgets(NBUDGET_TH) )
+
+  call Sourcelist_scan( tbudgets(NBUDGET_TH), cbulist_rth )
+end if
+
+! Budget of RTKE
+tbudgets(NBUDGET_TKE)%lenabled = lbu_rtke
+
+if ( lbu_rtke ) then
+  tbudgets(NBUDGET_TKE)%trhodj => tburhodj
+
+  !Allocate all basic source terms (used or not)
+  !The size should be large enough (bigger than necessary is OK)
+  tbudgets(NBUDGET_TKE)%nsourcesmax = NSOURCESMAX
+  allocate( tbudgets(NBUDGET_TKE)%tsources(NSOURCESMAX) )
+
+  allocate( tbudgets(NBUDGET_TKE)%xtmpstore(ibudim1, ibudim2, ibudim3) )
+
+  tbudgets(NBUDGET_TKE)%tsources(:)%ngroup = 0
+
+  tzsource%ccomment = 'Budget of turbulent kinetic energy'
+  tzsource%ngrid    = 1
+
+  tzsource%cunits   = 'm2 s-1'
+
+  tzsource%cmnhname   = 'INIF'
+  tzsource%clongname  = 'initial state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_TKE), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+  tzsource%cmnhname   = 'ENDF'
+  tzsource%clongname  = 'final state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_TKE), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+  tzsource%cmnhname   = 'AVEF'
+  tzsource%clongname  = 'averaged state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_TKE), tzsource, odonotinit = .true., ooverwrite = .false. )
+
+  tzsource%cunits   = 'm2 s-3'
+
+  tzsource%cmnhname   = 'ASSE'
+  tzsource%clongname  = 'time filter (Asselin)'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_TKE), tzsource )
+
+  tzsource%cmnhname   = 'FRC'
+  tzsource%clongname  = 'forcing'
+  tzsource%lavailable = lforcing
+  call Budget_source_add( tbudgets(NBUDGET_TKE), tzsource )
+
+  tzsource%cmnhname   = 'DIF'
+  tzsource%clongname  = 'numerical diffusion'
+  tzsource%lavailable = onumdifth
+  call Budget_source_add( tbudgets(NBUDGET_TKE), tzsource )
+
+  tzsource%cmnhname   = 'REL'
+  tzsource%clongname  = 'relaxation'
+  tzsource%lavailable = ohorelax_tke
+  call Budget_source_add( tbudgets(NBUDGET_TKE), tzsource )
+
+  tzsource%cmnhname   = 'DRAG'
+  tzsource%clongname  = 'drag force'
+  tzsource%lavailable = odragtree
+  call Budget_source_add( tbudgets(NBUDGET_TKE), tzsource )
+
+  tzsource%cmnhname   = 'DRAGB'
+  tzsource%clongname  = 'drag force due to buildings'
+  tzsource%lavailable = ldragbldg
+  call Budget_source_add( tbudgets(NBUDGET_TKE), tzsource )
+
+  tzsource%cmnhname   = 'DP'
+  tzsource%clongname  = 'dynamic production'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_TKE), tzsource )
+
+  tzsource%cmnhname   = 'TP'
+  tzsource%clongname  = 'thermal production'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_TKE), tzsource )
+
+  tzsource%cmnhname   = 'DISS'
+  tzsource%clongname  = 'dissipation of TKE'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_TKE), tzsource )
+
+  tzsource%cmnhname   = 'TR'
+  tzsource%clongname  = 'turbulent transport'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_TKE), tzsource )
+
+  tzsource%cmnhname   = 'ADV'
+  tzsource%clongname  = 'total advection'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_TKE), tzsource )
+
+
+  call Sourcelist_sort_compact( tbudgets(NBUDGET_TKE) )
+
+  call Sourcelist_scan( tbudgets(NBUDGET_TKE), cbulist_rtke )
+end if
+
+! Budget of RRV
+tbudgets(NBUDGET_RV)%lenabled = lbu_rrv .and. krr >= 1
+
+if ( tbudgets(NBUDGET_RV)%lenabled ) then
+  tbudgets(NBUDGET_RV)%trhodj => tburhodj
+
+  !Allocate all basic source terms (used or not)
+  !The size should be large enough (bigger than necessary is OK)
+  tbudgets(NBUDGET_RV)%nsourcesmax = NSOURCESMAX
+  allocate( tbudgets(NBUDGET_RV)%tsources(NSOURCESMAX) )
+
+  allocate( tbudgets(NBUDGET_RV)%xtmpstore(ibudim1, ibudim2, ibudim3) )
+
+  tbudgets(NBUDGET_RV)%tsources(:)%ngroup = 0
+
+  tzsource%ccomment = 'Budget of water vapor mixing ratio'
+  tzsource%ngrid    = 1
+
+  tzsource%cunits   = 'kg kg-1'
+
+  tzsource%cmnhname   = 'INIF'
+  tzsource%clongname  = 'initial state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+  tzsource%cmnhname   = 'ENDF'
+  tzsource%clongname  = 'final state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+  tzsource%cmnhname   = 'AVEF'
+  tzsource%clongname  = 'averaged state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource, odonotinit = .true., ooverwrite = .false. )
+
+  tzsource%cunits   = 's-1'
+
+  tzsource%cmnhname   = 'ASSE'
+  tzsource%clongname  = 'time filter (Asselin)'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'NEST'
+  tzsource%clongname  = 'nesting'
+  tzsource%lavailable = nmodel > 1
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'FRC'
+  tzsource%clongname  = 'forcing'
+  tzsource%lavailable = lforcing
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = '2DADV'
+  tzsource%clongname  = 'advective forcing'
+  tzsource%lavailable = l2d_adv_frc
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = '2DREL'
+  tzsource%clongname  = 'relaxation forcing'
+  tzsource%lavailable = l2d_rel_frc
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'NUD'
+  tzsource%clongname  = 'nudging'
+  tzsource%lavailable = onudging
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'DIF'
+  tzsource%clongname  = 'numerical diffusion'
+  tzsource%lavailable = onumdifth
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'REL'
+  tzsource%clongname  = 'relaxation'
+  tzsource%lavailable = ohorelax_rv
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'DCONV'
+  tzsource%clongname  = 'KAFR convection'
+  tzsource%lavailable = hdconv == 'KAFR' .OR. hsconv == 'KAFR'
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'BLAZE'
+  tzsource%clongname  = 'blaze fire model contribution'
+  tzsource%lavailable = lblaze
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'VTURB'
+  tzsource%clongname  = 'vertical turbulent diffusion'
+  tzsource%lavailable = hturb == 'TKEL'
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'HTURB'
+  tzsource%clongname  = 'horizontal turbulent diffusion'
+  tzsource%lavailable = hturb == 'TKEL' .and. HTURBDIM == '3DIM'
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'NETUR'
+  tzsource%clongname  = 'negativity correction induced by turbulence'
+  tzsource%lavailable = hturb == 'TKEL' .and. (      hcloud == 'KESS' .or. hcloud == 'ICE3' .or. hcloud == 'ICE4' &
+                                                .or. hcloud == 'KHKO' .or. hcloud == 'C2R2' .or. hcloud == 'LIMA' )
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'MAFL'
+  tzsource%clongname  = 'mass flux'
+  tzsource%lavailable = hsconv == 'EDKF'
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'SNSUB'
+  tzsource%clongname  = 'blowing snow sublimation'
+  tzsource%lavailable = lblowsnow .and. lsnowsubl
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'VISC'
+  tzsource%clongname  = 'viscosity'
+  tzsource%lavailable = lvisc .and. lvisc_r
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'ADV'
+  tzsource%clongname  = 'total advection'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'NEADV'
+  tzsource%clongname  = 'negativity correction induced by advection'
+  tzsource%lavailable =       hcloud == 'KESS' .or. hcloud == 'ICE3' .or. hcloud == 'ICE4' &
+                         .or. hcloud == 'KHKO' .or. hcloud == 'C2R2' .or. hcloud == 'LIMA'
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'NEGA'
+  tzsource%clongname  = 'negativity correction'
+  tzsource%lavailable =       hcloud == 'KESS' .or. hcloud == 'ICE3' .or. hcloud == 'ICE4' &
+                         .or. hcloud == 'KHKO' .or. hcloud == 'C2R2' .or. hcloud == 'LIMA'
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'HENU'
+  tzsource%clongname  = 'heterogeneous nucleation'
+  gtmp = cactccn == 'ABRK' .and. (lorilam .or. ldust .or. lsalt )
+  tzsource%lavailable =      ( hcloud      == 'LIMA' .and. nmom_c.ge.1 .and. lacti_lima .and. nmod_ccn >= 1   &
+                                                     .and. ( .not.lptsplit .or. .not.lsubg_cond )          ) &
+                        .or. ( hcloud      == 'C2R2' .and. ( gtmp .or. .not.lsupsat_c2r2 ) )                 &
+                        .or. ( hcloud      == 'KHKO' .and. ( gtmp .or. .not.lsupsat_c2r2 ) )
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'REVA'
+  tzsource%clongname  = 'rain evaporation'
+  tzsource%lavailable =      ( hcloud      == 'LIMA' .and. ( ( .not. lptsplit .and. nmom_c.ge.1 .and. nmom_r.ge.1 ) &
+                                                             .or.    lptsplit ) )                                 &
+                        .or. ( hcloud(1:3) == 'ICE'  .and. lwarm_ice )                                            &
+                        .or. ( hcloud      == 'C2R2' .and. lrain_c2r2 )                                           &
+                        .or. ( hcloud      == 'KHKO' .and. lrain_c2r2 )                                           &
+                        .or.   hcloud      == 'KESS'
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'HIN'
+  tzsource%clongname  = 'heterogeneous ice nucleation'
+  tzsource%lavailable = hcloud(1:3) == 'ICE' .or. ( hcloud == 'LIMA' .and. nmom_i == 1 )
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'HIND'
+  tzsource%clongname  = 'heterogeneous nucleation by deposition'
+  tzsource%lavailable = hcloud == 'LIMA' .and. nmom_i.ge.1 .and. lnucl_lima
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'HONH'
+  tzsource%clongname  = 'haze homogeneous nucleation'
+  tzsource%lavailable = hcloud == 'LIMA' .and. nmom_i.ge.1 .and. lnucl_lima .and. lhhoni_lima .and. nmod_ccn >= 1
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'DEPS'
+  tzsource%clongname  = 'deposition on snow'
+  tzsource%lavailable = ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_s.ge.1 ) ) ) .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'DEPG'
+  tzsource%clongname  = 'deposition on graupel'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 ) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'DEPH'
+  tzsource%clongname  = 'deposition on HAIL'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. nmom_h.ge.1 )  &
+                        .or. hcloud == 'ICE4' )
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'CEDS'
+  tzsource%clongname  = 'adjustment to saturation'
+  tzsource%lavailable = hcloud == 'LIMA'
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'ADJU'
+  tzsource%clongname  = 'adjustment to saturation'
+  tzsource%lavailable = hcloud(1:3) == 'ICE' .and. lred .and. ladj_before .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'COND'
+  tzsource%clongname  = 'vapor condensation or cloud water evaporation'
+  tzsource%lavailable = hcloud == 'C2R2' .or. hcloud == 'KHKO' .or. hcloud == 'KESS' .or. hcloud == 'REVE'
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'CORR'
+  tzsource%clongname  = 'correction'
+  tzsource%lavailable = hcloud(1:3) == 'ICE' .and. lred .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'DEPI'
+  tzsource%clongname  = 'deposition on ice'
+  tzsource%lavailable =      ( hcloud(1:3) == 'ICE' .and. ( .not. lred .or. ( lred .and. ladj_after ) .or. celec /= 'NONE') ) &
+                        .or. ( hcloud == 'LIMA' .and. lptsplit )
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'CORR2'
+  tzsource%clongname  = 'supplementary correction inside LIMA splitting'
+  tzsource%lavailable = hcloud == 'LIMA' .and. lptsplit
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+  tzsource%cmnhname   = 'NECON'
+  tzsource%clongname  = 'negativity correction induced by condensation'
+  tzsource%lavailable = (      hcloud == 'KESS' .or. hcloud == 'ICE3' .or. hcloud == 'ICE4'   &
+                          .or. hcloud == 'KHKO' .or. hcloud == 'C2R2' .or. hcloud == 'LIMA' ) &
+                        .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
+
+  call Sourcelist_sort_compact( tbudgets(NBUDGET_RV) )
+
+  call Sourcelist_scan( tbudgets(NBUDGET_RV), cbulist_rrv )
+end if
+
+! Budget of RRC
+tbudgets(NBUDGET_RC)%lenabled = lbu_rrc .and. krr >= 2
+
+if ( tbudgets(NBUDGET_RC)%lenabled ) then
+  if ( hcloud(1:3) == 'ICE' .and. lred .and. lsedic_ice .and. ldeposc_ice ) &
+    call Print_msg( NVERB_WARNING, 'BUD', 'Ini_budget', 'lred=T + lsedic=T + ldeposc=T:'// &
+                                                        'DEPO and SEDI source terms are mixed and stored in SEDI' )
+
+  tbudgets(NBUDGET_RC)%trhodj => tburhodj
+
+  !Allocate all basic source terms (used or not)
+  !The size should be large enough (bigger than necessary is OK)
+  tbudgets(NBUDGET_RC)%nsourcesmax = NSOURCESMAX
+  allocate( tbudgets(NBUDGET_RC)%tsources(NSOURCESMAX) )
+
+  allocate( tbudgets(NBUDGET_RC)%xtmpstore(ibudim1, ibudim2, ibudim3) )
+
+  tbudgets(NBUDGET_RC)%tsources(:)%ngroup = 0
+
+  tzsource%ccomment = 'Budget of cloud water mixing ratio'
+  tzsource%ngrid    = 1
+
+  tzsource%cunits   = 'kg kg-1'
+
+  tzsource%cmnhname   = 'INIF'
+  tzsource%clongname  = 'initial state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+  tzsource%cmnhname   = 'ENDF'
+  tzsource%clongname  = 'final state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+  tzsource%cmnhname   = 'AVEF'
+  tzsource%clongname  = 'averaged state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource, odonotinit = .true., ooverwrite = .false. )
+
+  tzsource%cunits   = 's-1'
+
+  tzsource%cmnhname   = 'ASSE'
+  tzsource%clongname  = 'time filter (Asselin)'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'NEST'
+  tzsource%clongname  = 'nesting'
+  tzsource%lavailable = nmodel > 1
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'FRC'
+  tzsource%clongname  = 'forcing'
+  tzsource%lavailable = lforcing
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'DIF'
+  tzsource%clongname  = 'numerical diffusion'
+  tzsource%lavailable = onumdifth
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'REL'
+  tzsource%clongname  = 'relaxation'
+  tzsource%lavailable = ohorelax_rc
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'DCONV'
+  tzsource%clongname  = 'KAFR convection'
+  tzsource%lavailable = hdconv == 'KAFR' .OR. hsconv == 'KAFR'
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'DEPOTR'
+  tzsource%clongname  = 'tree droplet deposition'
+  tzsource%lavailable = odragtree .and. odepotree
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'VTURB'
+  tzsource%clongname  = 'vertical turbulent diffusion'
+  tzsource%lavailable = hturb == 'TKEL'
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'HTURB'
+  tzsource%clongname  = 'horizontal turbulent diffusion'
+  tzsource%lavailable = hturb == 'TKEL' .and. HTURBDIM == '3DIM'
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'NETUR'
+  tzsource%clongname  = 'negativity correction induced by turbulence'
+  tzsource%lavailable = hturb == 'TKEL' .and. (      hcloud == 'KESS' .or. hcloud == 'ICE3' .or. hcloud == 'ICE4' &
+                                                .or. hcloud == 'KHKO' .or. hcloud == 'C2R2' .or. hcloud == 'LIMA' )
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'VISC'
+  tzsource%clongname  = 'viscosity'
+  tzsource%lavailable = lvisc .and. lvisc_r
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'ADV'
+  tzsource%clongname  = 'total advection'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'NEADV'
+  tzsource%clongname  = 'negativity correction induced by advection'
+  tzsource%lavailable =       hcloud == 'KESS' .or. hcloud == 'ICE3' .or. hcloud == 'ICE4' &
+                         .or. hcloud == 'KHKO' .or. hcloud == 'C2R2' .or. hcloud == 'LIMA'
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'NEGA'
+  tzsource%clongname  = 'negativity correction'
+  tzsource%lavailable =       hcloud == 'KESS' .or. hcloud == 'ICE3' .or. hcloud == 'ICE4' &
+                         .or. hcloud == 'KHKO' .or. hcloud == 'C2R2' .or. hcloud == 'LIMA'
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'CORR'
+  tzsource%clongname  = 'correction'
+!   tzsource%lavailable =       ( hcloud      == 'LIMA' .and. lptsplit .and. nmom_c.ge.1 .and. nmom_r.ge.1 ) &
+!                          .or. ( hcloud(1:3) == 'ICE' .and. lred .and. celec == 'NONE' )
+  tzsource%lavailable =  hcloud(1:3) == 'ICE' .and. lred .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'SEDI'
+  tzsource%clongname  = 'sedimentation of cloud'
+  tzsource%lavailable =    ( hcloud      == 'LIMA' .and. nmom_c.ge.1 .and. lsedc_lima ) &
+                      .or. ( hcloud(1:3) == 'ICE'  .and. lsedic_ice )                  &
+                      .or. ( hcloud      == 'C2R2' .and. lsedc_c2r2 )                  &
+                      .or. ( hcloud      == 'KHKO' .and. lsedc_c2r2 )
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'DEPO'
+  tzsource%clongname  = 'surface droplet deposition'
+  tzsource%lavailable =      ( hcloud == 'LIMA' .and. nmom_c.ge.1 .and. ldepoc_lima ) &
+                        .or. ( hcloud      == 'C2R2' .and. ldepoc_c2r2 )             &
+                        .or. ( hcloud      == 'KHKO' .and. ldepoc_c2r2 )             &
+                        .or. ( hcloud(1:3) == 'ICE'  .and. ldeposc_ice .and. celec == 'NONE' )
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'R2C1'
+  tzsource%clongname  = 'rain to cloud change after sedimentation'
+  tzsource%lavailable = hcloud == 'LIMA' .and. lptsplit .and. nmom_c.ge.1 .and. nmom_r.ge.1
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'HENU'
+  tzsource%clongname  = 'CCN activation'
+  gtmp = cactccn == 'ABRK' .and. (lorilam .or. ldust .or. lsalt )
+  tzsource%lavailable =      ( hcloud      == 'LIMA' .and. nmom_c.ge.1 .and. lacti_lima .and. nmod_ccn >= 1   &
+                                                     .and. ( .not.lptsplit .or. .not.lsubg_cond )          ) &
+                        .or. ( hcloud      == 'C2R2' .and. ( gtmp .or. .not.lsupsat_c2r2 ) )                 &
+                        .or. ( hcloud      == 'KHKO' .and. ( gtmp .or. .not.lsupsat_c2r2 ) )
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'HINC'
+  tzsource%clongname  = 'heterogeneous nucleation by contact'
+  tzsource%lavailable = hcloud == 'LIMA' .and. nmom_i.ge.1 .and. lnucl_lima
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'ADJU'
+  tzsource%clongname  = 'adjustment to saturation'
+  tzsource%lavailable = hcloud(1:3) == 'ICE' .and. lred .and. ladj_before .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'HON'
+  tzsource%clongname  = 'homogeneous nucleation'
+  tzsource%lavailable = hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'AUTO'
+  tzsource%clongname  = 'autoconversion into rain'
+  tzsource%lavailable =       ( hcloud      == 'LIMA' .and. ( lptsplit .or. ( nmom_c.ge.1 .and. nmom_r.ge.1 ) ) ) &
+                         .or.   hcloud      == 'KESS'                                                           &
+                         .or. ( hcloud(1:3) == 'ICE'  .and. lwarm_ice )                                         &
+                         .or. ( hcloud      == 'C2R2' .and. lrain_c2r2 )                                        &
+                         .or. ( hcloud      == 'KHKO' .and. lrain_c2r2 )
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'ACCR'
+  tzsource%clongname  = 'accretion of cloud droplets'
+  tzsource%lavailable =       ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_c.ge.1 .and. nmom_r.ge.1 ) ) ) &
+                         .or.   hcloud      == 'KESS'                                                      &
+                         .or. ( hcloud(1:3) == 'ICE'  .and. lwarm_ice )                                    &
+                         .or. ( hcloud      == 'C2R2' .and. lrain_c2r2 )                                   &
+                         .or. ( hcloud      == 'KHKO' .and. lrain_c2r2 )
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'REVA'
+  tzsource%clongname  = 'rain evaporation'
+  tzsource%lavailable =  hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_c.ge.1 .and. nmom_r.ge.1 ) )
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'HONC'
+  tzsource%clongname  = 'droplet homogeneous freezing'
+  tzsource%lavailable = hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. lnucl_lima ) )
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'IMLT'
+  tzsource%clongname  = 'melting of ice'
+  tzsource%lavailable = ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 ) ) ) .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'BERFI'
+  tzsource%clongname  = 'Bergeron-Findeisen'
+  tzsource%lavailable = ( hcloud == 'LIMA' .and. ( lptsplit .or. (nmom_i.ge.1 .and. nmom_c.ge.1) ) ) .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'RIM'
+  tzsource%clongname  = 'riming of cloud water'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 ) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'CMEL'
+  tzsource%clongname  = 'collection by snow and conversion into rain with T>XTT on ice'
+  tzsource%lavailable = hcloud(1:3) == 'ICE' .and. lred .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'WETG'
+  tzsource%clongname  = 'wet growth of graupel'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. (nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'DRYG'
+  tzsource%clongname  = 'dry growth of graupel'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. (nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'CVRC'
+  tzsource%clongname  = 'rain to cloud change after other microphysical processes'
+  tzsource%lavailable = hcloud == 'LIMA' .and. lptsplit
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'WETH'
+  tzsource%clongname  = 'wet growth of hail'
+  tzsource%lavailable =      ( hcloud == 'LIMA' .and. .not.lptsplit .and. nmom_h.ge.1 .and. nmom_i.ge.1  &
+                                                .and. nmom_c.ge.1    .and. nmom_s.ge.1 )                 &
+                        .or. ( hcloud == 'LIMA' .and. lptsplit ) &
+                        .or.   hcloud == 'ICE4'
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'DRYH'
+  tzsource%clongname  = 'dry growth of hail'
+  tzsource%lavailable = hcloud == 'ICE4' .and. lred .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'CEDS'
+  tzsource%clongname  = 'adjustment to saturation'
+  tzsource%lavailable = hcloud == 'LIMA'
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'DEPI'
+  tzsource%clongname  = 'condensation/deposition on ice'
+  tzsource%lavailable = hcloud(1:3) == 'ICE' .and. ( .not. lred .or. ( lred .and. ladj_after ) .or. celec /= 'NONE' )
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'COND'
+  tzsource%clongname  = 'vapor condensation or cloud water evaporation'
+  tzsource%lavailable = hcloud == 'C2R2' .or. hcloud == 'KHKO' .or. hcloud == 'KESS' .or. hcloud == 'REVE'
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'CORR2'
+  tzsource%clongname  = 'supplementary correction inside LIMA splitting'
+  tzsource%lavailable = hcloud == 'LIMA' .and. lptsplit
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+  tzsource%cmnhname   = 'NECON'
+  tzsource%clongname  = 'negativity correction induced by condensation'
+  tzsource%lavailable = (      hcloud == 'KESS' .or. hcloud == 'ICE3' .or. hcloud == 'ICE4'   &
+                          .or. hcloud == 'KHKO' .or. hcloud == 'C2R2' .or. hcloud == 'LIMA' ) &
+                        .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RC), tzsource )
+
+
+  call Sourcelist_sort_compact( tbudgets(NBUDGET_RC) )
+
+  call Sourcelist_scan( tbudgets(NBUDGET_RC), cbulist_rrc )
+end if
+
+! Budget of RRR
+tbudgets(NBUDGET_RR)%lenabled = lbu_rrr .and. krr >= 3
+
+if ( tbudgets(NBUDGET_RR)%lenabled ) then
+  tbudgets(NBUDGET_RR)%trhodj => tburhodj
+
+  !Allocate all basic source terms (used or not)
+  !The size should be large enough (bigger than necessary is OK)
+  tbudgets(NBUDGET_RR)%nsourcesmax = NSOURCESMAX
+  allocate( tbudgets(NBUDGET_RR)%tsources(NSOURCESMAX) )
+
+  allocate( tbudgets(NBUDGET_RR)%xtmpstore(ibudim1, ibudim2, ibudim3) )
+
+  tbudgets(NBUDGET_RR)%tsources(:)%ngroup = 0
+
+  tzsource%ccomment = 'Budget of rain water mixing ratio'
+  tzsource%ngrid    = 1
+
+  tzsource%cunits   = 'kg kg-1'
+
+  tzsource%cmnhname   = 'INIF'
+  tzsource%clongname  = 'initial state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+  tzsource%cmnhname   = 'ENDF'
+  tzsource%clongname  = 'final state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+  tzsource%cmnhname   = 'AVEF'
+  tzsource%clongname  = 'averaged state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource, odonotinit = .true., ooverwrite = .false. )
+
+  tzsource%cunits   = 's-1'
+
+  tzsource%cmnhname   = 'ASSE'
+  tzsource%clongname  = 'time filter (Asselin)'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'NEST'
+  tzsource%clongname  = 'nesting'
+  tzsource%lavailable = nmodel > 1
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'FRC'
+  tzsource%clongname  = 'forcing'
+  tzsource%lavailable = lforcing
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'DIF'
+  tzsource%clongname  = 'numerical diffusion'
+  tzsource%lavailable = onumdifth
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'REL'
+  tzsource%clongname  = 'relaxation'
+  tzsource%lavailable = ohorelax_rr
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'NETUR'
+  tzsource%clongname  = 'negativity correction induced by turbulence'
+  tzsource%lavailable = hturb == 'TKEL' .and. ( hcloud == 'KHKO' .or. hcloud == 'C2R2' .or. hcloud == 'LIMA' )
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'VISC'
+  tzsource%clongname  = 'viscosity'
+  tzsource%lavailable = lvisc .and. lvisc_r
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'ADV'
+  tzsource%clongname  = 'total advection'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'NEADV'
+  tzsource%clongname  = 'negativity correction induced by advection'
+  tzsource%lavailable =       hcloud == 'KESS' .or. hcloud == 'ICE3' .or. hcloud == 'ICE4' &
+                         .or. hcloud == 'KHKO' .or. hcloud == 'C2R2' .or. hcloud == 'LIMA'
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'NEGA'
+  tzsource%clongname  = 'negativity correction'
+  tzsource%lavailable =       hcloud == 'KESS' .or. hcloud == 'ICE3' .or. hcloud == 'ICE4' &
+                         .or. hcloud == 'KHKO' .or. hcloud == 'C2R2' .or. hcloud == 'LIMA'
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'CORR'
+  tzsource%clongname  = 'correction'
+!   tzsource%lavailable =       ( hcloud      == 'LIMA' .and. lptsplit .and. nmom_c.ge.1 .and. nmom_r.ge.1 ) &
+!                          .or. ( hcloud(1:3) == 'ICE' .and. lred .and. celec == 'NONE' )
+  tzsource%lavailable = hcloud(1:3) == 'ICE' .and. lred .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'SEDI'
+  tzsource%clongname  = 'sedimentation of rain drops'
+  tzsource%lavailable =      ( hcloud      == 'LIMA' .and. nmom_c.ge.1 .and. nmom_r.ge.1 ) &
+                        .or.   hcloud      == 'KESS'                                     &
+                        .or.   hcloud(1:3) == 'ICE'                                      &
+                        .or.   hcloud      == 'C2R2'                                     &
+                        .or.   hcloud      == 'KHKO'
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'R2C1'
+  tzsource%clongname  = 'rain to cloud change after sedimentation'
+  tzsource%lavailable = hcloud == 'LIMA' .and. lptsplit .and. nmom_c.ge.1 .and. nmom_r.ge.1
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'AUTO'
+  tzsource%clongname  = 'autoconversion into rain'
+  tzsource%lavailable =       ( hcloud      == 'LIMA' .and. ( lptsplit .or. ( nmom_c.ge.1 .and. nmom_r.ge.1 ) ) ) &
+                         .or.   hcloud      == 'KESS'                                                           &
+                         .or. ( hcloud(1:3) == 'ICE'  .and. lwarm_ice )                                         &
+                         .or. ( hcloud      == 'C2R2' .and. lrain_c2r2 )                                        &
+                         .or. ( hcloud      == 'KHKO' .and. lrain_c2r2 )
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'ACCR'
+  tzsource%clongname  = 'accretion of cloud droplets'
+  tzsource%lavailable =       ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_c.ge.1 .and. nmom_r.ge.1 ) ) ) &
+                         .or.   hcloud      == 'KESS'                                                      &
+                         .or. ( hcloud(1:3) == 'ICE'  .and. lwarm_ice )                                    &
+                         .or. ( hcloud      == 'C2R2' .and. lrain_c2r2 )                                   &
+                         .or. ( hcloud      == 'KHKO' .and. lrain_c2r2 )
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'REVA'
+  tzsource%clongname  = 'rain evaporation'
+  tzsource%lavailable =      ( hcloud      == 'LIMA' .and. ( lptsplit .or. ( nmom_c.ge.1 .and. nmom_r.ge.1 ) ) ) &
+                        .or.   hcloud      == 'KESS'                                                           &
+                        .or. ( hcloud(1:3) == 'ICE'  .and. lwarm_ice )                                         &
+                        .or. ( hcloud      == 'C2R2' .and. lrain_c2r2 )                                        &
+                        .or. ( hcloud      == 'KHKO' .and. lrain_c2r2 )
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'HONR'
+  tzsource%clongname  = 'rain homogeneous freezing'
+  tzsource%lavailable = hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. lnucl_lima .and. nmom_r.ge.1 ) )
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+
+  tzsource%cmnhname   = 'ACC'
+  tzsource%clongname  = 'accretion of rain on aggregates'
+  tzsource%lavailable =      ( hcloud == 'LIMA' .and. ( lptsplit .or. (       nmom_i.ge.1 .and. nmom_c.ge.1      &
+                                                                        .and. nmom_s.ge.1 .and. nmom_r.ge.1) ) ) &
+                        .or.   hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'CMEL'
+  tzsource%clongname  = 'collection of droplets by snow and conversion into rain'
+  tzsource%lavailable = hcloud(1:3) == 'ICE' .and. lred .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'CFRZ'
+  tzsource%clongname  = 'conversion freezing of rain'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. (nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'WETG'
+  tzsource%clongname  = 'wet growth of graupel'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. (nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'DRYG'
+  tzsource%clongname  = 'dry growth of graupel'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. (nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'GMLT'
+  tzsource%clongname  = 'graupel melting'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. (nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'CVRC'
+  tzsource%clongname  = 'rain to cloud change after other microphysical processes'
+  tzsource%lavailable = hcloud == 'LIMA' .and. lptsplit
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'WETH'
+  tzsource%clongname  = 'wet growth of hail'
+  tzsource%lavailable =      ( hcloud == 'LIMA' .and. .not.lptsplit .and. nmom_h.ge.1 .and. nmom_i.ge.1 &
+                                                .and. nmom_c.ge.1    .and. nmom_s.ge.1 )                &
+                        .or. ( hcloud == 'LIMA' .and. lptsplit ) &
+                        .or.   hcloud == 'ICE4'
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'DRYH'
+  tzsource%clongname  = 'dry growth of hail'
+  tzsource%lavailable = hcloud == 'ICE4' .and. lred .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'HMLT'
+  tzsource%clongname  = 'melting of hail'
+  tzsource%lavailable =       ( hcloud == 'LIMA' .and. .not.lptsplit .and. nmom_h.ge.1 .and. nmom_i.ge.1 &
+                                                .and. nmom_c.ge.1    .and. nmom_s.ge.1 )                &
+                        .or. ( hcloud == 'LIMA' .and. lptsplit ) &
+                         .or.   hcloud == 'ICE4'
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'SFR'
+  tzsource%clongname  = 'spontaneous freezing'
+  tzsource%lavailable = hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+!PW: a documenter
+  tzsource%cmnhname   = 'CORR2'
+  tzsource%clongname  = 'supplementary correction inside LIMA splitting'
+  tzsource%lavailable = hcloud == 'LIMA' .and. lptsplit
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+  tzsource%cmnhname   = 'NECON'
+  tzsource%clongname  = 'negativity correction induced by condensation'
+  tzsource%lavailable = (      hcloud == 'KESS' .or. hcloud == 'ICE3' .or. hcloud == 'ICE4'   &
+                          .or. hcloud == 'KHKO' .or. hcloud == 'C2R2' .or. hcloud == 'LIMA' ) &
+                        .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RR), tzsource )
+
+
+  call Sourcelist_sort_compact( tbudgets(NBUDGET_RR) )
+
+  call Sourcelist_scan( tbudgets(NBUDGET_RR), cbulist_rrr )
+end if
+
+! Budget of RRI
+tbudgets(NBUDGET_RI)%lenabled = lbu_rri .and. krr >= 4
+
+if ( tbudgets(NBUDGET_RI)%lenabled ) then
+  tbudgets(NBUDGET_RI)%trhodj => tburhodj
+
+  !Allocate all basic source terms (used or not)
+  !The size should be large enough (bigger than necessary is OK)
+  tbudgets(NBUDGET_RI)%nsourcesmax = NSOURCESMAX
+  allocate( tbudgets(NBUDGET_RI)%tsources(NSOURCESMAX) )
+
+  allocate( tbudgets(NBUDGET_RI)%xtmpstore(ibudim1, ibudim2, ibudim3) )
+
+  tbudgets(NBUDGET_RI)%tsources(:)%ngroup = 0
+
+  tzsource%ccomment = 'Budget of cloud ice mixing ratio'
+  tzsource%ngrid    = 1
+
+  tzsource%cunits   = 'kg kg-1'
+
+  tzsource%cmnhname   = 'INIF'
+  tzsource%clongname  = 'initial state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+  tzsource%cmnhname   = 'ENDF'
+  tzsource%clongname  = 'final state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+  tzsource%cmnhname   = 'AVEF'
+  tzsource%clongname  = 'averaged state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource, odonotinit = .true., ooverwrite = .false. )
+
+  tzsource%cunits   = 's-1'
+
+  tzsource%cmnhname   = 'ASSE'
+  tzsource%clongname  = 'time filter (Asselin)'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'NEST'
+  tzsource%clongname  = 'nesting'
+  tzsource%lavailable = nmodel > 1
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'FRC'
+  tzsource%clongname  = 'forcing'
+  tzsource%lavailable = lforcing
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'DIF'
+  tzsource%clongname  = 'numerical diffusion'
+  tzsource%lavailable = onumdifth
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'REL'
+  tzsource%clongname  = 'relaxation'
+  tzsource%lavailable = ohorelax_ri
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'DCONV'
+  tzsource%clongname  = 'KAFR convection'
+  tzsource%lavailable = hdconv == 'KAFR' .OR. hsconv == 'KAFR'
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'VTURB'
+  tzsource%clongname  = 'vertical turbulent diffusion'
+  tzsource%lavailable = hturb == 'TKEL'
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'HTURB'
+  tzsource%clongname  = 'horizontal turbulent diffusion'
+  tzsource%lavailable = hturb == 'TKEL' .and. HTURBDIM == '3DIM'
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'NETUR'
+  tzsource%clongname  = 'negativity correction induced by turbulence'
+  tzsource%lavailable = hturb == 'TKEL' .and. ( hcloud == 'ICE3' .or. hcloud == 'ICE4' .or. hcloud == 'LIMA' )
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'VISC'
+  tzsource%clongname  = 'viscosity'
+  tzsource%lavailable = lvisc .and. lvisc_r
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'ADV'
+  tzsource%clongname  = 'total advection'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'NEADV'
+  tzsource%clongname  = 'negativity correction induced by advection'
+  tzsource%lavailable =  .true.
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'NEGA'
+  tzsource%clongname  = 'negativity correction'
+  tzsource%lavailable =  .true.
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'CORR'
+  tzsource%clongname  = 'correction'
+!   tzsource%lavailable =       ( hcloud      == 'LIMA' .and. lptsplit .and. nmom_i.ge.1 .and. nmom_s.ge.1 ) &
+!                          .or. ( hcloud(1:3) == 'ICE' .and. lred .and. celec == 'NONE' )
+  tzsource%lavailable = hcloud(1:3) == 'ICE' .and. lred .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'ADJU'
+  tzsource%clongname  = 'adjustment to saturation'
+  tzsource%lavailable = hcloud(1:3) == 'ICE' .and. lred .and. ladj_before .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'SEDI'
+  tzsource%clongname  = 'sedimentation of rain drops'
+  tzsource%lavailable =      ( hcloud      == 'LIMA' .and. nmom_i.ge.1 .and. lsedi_lima ) &
+                        .or.   hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'HIN'
+  tzsource%clongname  = 'heterogeneous ice nucleation'
+  tzsource%lavailable =  hcloud(1:3) == 'ICE' .or. ( hcloud == 'LIMA' .and. nmom_i == 1)
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'HIND'
+  tzsource%clongname  = 'heterogeneous nucleation by deposition'
+  tzsource%lavailable = hcloud == 'LIMA' .and. nmom_i.ge.1 .and. lnucl_lima
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'HINC'
+  tzsource%clongname  = 'heterogeneous nucleation by contact'
+  tzsource%lavailable = hcloud == 'LIMA' .and. nmom_i.ge.1 .and. lnucl_lima
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'HON'
+  tzsource%clongname  = 'homogeneous nucleation'
+  tzsource%lavailable = hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'HONH'
+  tzsource%clongname  = 'haze homogeneous nucleation'
+  tzsource%lavailable = hcloud == 'LIMA' .and. nmom_i.ge.1 .and. lnucl_lima .and. lhhoni_lima .and. nmod_ccn >= 1
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'HONC'
+  tzsource%clongname  = 'droplet homogeneous freezing'
+  tzsource%lavailable = hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. lnucl_lima ) )
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'CNVI'
+  tzsource%clongname  = 'conversion of snow to cloud ice'
+  tzsource%lavailable = hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_s.ge.1 ) )
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'CNVS'
+  tzsource%clongname  = 'conversion of pristine ice to snow'
+  tzsource%lavailable = hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_s.ge.1 ) )
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'AGGS'
+  tzsource%clongname  = 'aggregation of snow'
+  tzsource%lavailable = ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_s.ge.1 ) ) ) .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'AUTS'
+  tzsource%clongname  = 'autoconversion of ice'
+  tzsource%lavailable = hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'IMLT'
+  tzsource%clongname  = 'melting of ice'
+  tzsource%lavailable = ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 ) ) ) .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'BERFI'
+  tzsource%clongname  = 'Bergeron-Findeisen'
+  tzsource%lavailable = ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 ) ) ) .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'HMS'
+  tzsource%clongname  = 'Hallett-Mossop ice multiplication process due to snow riming'
+  tzsource%lavailable = hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 ) )
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'CIBU'
+  tzsource%clongname  = 'ice multiplication process due to ice collisional breakup'
+  tzsource%lavailable = hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 .and. lcibu ) )
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'CFRZ'
+  tzsource%clongname  = 'conversion freezing of rain'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 ) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'RDSF'
+  tzsource%clongname  = 'ice multiplication process following rain contact freezing'
+  tzsource%lavailable = hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 .and. lrdsf ) )
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'WETG'
+  tzsource%clongname  = 'wet growth of graupel'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 ) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'DRYG'
+  tzsource%clongname  = 'dry growth of graupel'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 ) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'HMG'
+  tzsource%clongname  = 'Hallett-Mossop ice multiplication process due to graupel riming'
+  tzsource%lavailable = hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 ) )
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'WETH'
+  tzsource%clongname  = 'wet growth of hail'
+  tzsource%lavailable =      ( hcloud == 'LIMA' .and. .not.lptsplit .and. nmom_h.ge.1 .and. nmom_i.ge.1 &
+                                                .and. nmom_c.ge.1    .and. nmom_s.ge.1 )                &
+                        .or. ( hcloud == 'LIMA' .and. lptsplit ) &
+                        .or.   hcloud == 'ICE4'
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'DRYH'
+  tzsource%clongname  = 'dry growth of hail'
+  tzsource%lavailable = hcloud == 'ICE4' .and. lred .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'CEDS'
+  tzsource%clongname  = 'adjustment to saturation'
+  tzsource%lavailable = hcloud == 'LIMA'
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'DEPI'
+  tzsource%clongname  = 'condensation/deposition on ice'
+  tzsource%lavailable =      ( hcloud(1:3) == 'ICE' .and. ( .not. lred .or. ( lred .and. ladj_after ) .or. celec /= 'NONE') ) &
+                        .or. ( hcloud == 'LIMA' .and. lptsplit )
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'CORR2'
+  tzsource%clongname  = 'supplementary correction inside LIMA splitting'
+  tzsource%lavailable = hcloud == 'LIMA' .and. lptsplit
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+  tzsource%cmnhname   = 'NECON'
+  tzsource%clongname  = 'negativity correction induced by condensation'
+  tzsource%lavailable = celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RI), tzsource )
+
+
+  call Sourcelist_sort_compact( tbudgets(NBUDGET_RI) )
+
+  call Sourcelist_scan( tbudgets(NBUDGET_RI), cbulist_rri )
+end if
+
+! Budget of RRS
+tbudgets(NBUDGET_RS)%lenabled = lbu_rrs .and. krr >= 5
+
+if ( tbudgets(NBUDGET_RS)%lenabled ) then
+  tbudgets(NBUDGET_RS)%trhodj => tburhodj
+
+  !Allocate all basic source terms (used or not)
+  !The size should be large enough (bigger than necessary is OK)
+  tbudgets(NBUDGET_RS)%nsourcesmax = NSOURCESMAX
+  allocate( tbudgets(NBUDGET_RS)%tsources(NSOURCESMAX) )
+
+  allocate( tbudgets(NBUDGET_RS)%xtmpstore(ibudim1, ibudim2, ibudim3) )
+
+  tbudgets(NBUDGET_RS)%tsources(:)%ngroup = 0
+
+  tzsource%ccomment = 'Budget of snow/aggregate mixing ratio'
+  tzsource%ngrid    = 1
+
+  tzsource%cunits   = 'kg kg-1'
+
+  tzsource%cmnhname   = 'INIF'
+  tzsource%clongname  = 'initial state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+  tzsource%cmnhname   = 'ENDF'
+  tzsource%clongname  = 'final state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+  tzsource%cmnhname   = 'AVEF'
+  tzsource%clongname  = 'averaged state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource, odonotinit = .true., ooverwrite = .false. )
+
+  tzsource%cunits   = 's-1'
+
+  tzsource%cmnhname   = 'ASSE'
+  tzsource%clongname  = 'time filter (Asselin)'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+  tzsource%cmnhname   = 'NEST'
+  tzsource%clongname  = 'nesting'
+  tzsource%lavailable = nmodel > 1
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+  tzsource%cmnhname   = 'FRC'
+  tzsource%clongname  = 'forcing'
+  tzsource%lavailable = lforcing
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+  tzsource%cmnhname   = 'DIF'
+  tzsource%clongname  = 'numerical diffusion'
+  tzsource%lavailable = onumdifth
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+  tzsource%cmnhname   = 'REL'
+  tzsource%clongname  = 'relaxation'
+  tzsource%lavailable = ohorelax_rs
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+!   tzsource%cmnhname   = 'NETUR'
+!   tzsource%clongname  = 'negativity correction induced by turbulence'
+!   tzsource%lavailable = hturb == 'TKEL' .and. (      hcloud == 'ICE3' .or. hcloud == 'ICE4' &
+!                                   .or. hcloud == 'KHKO' .or. hcloud == 'C2R2' .or. hcloud == 'LIMA' )
+!   call Budget_source_add( tbudgets(NBUDGET_RS), tzsource nneturrs )
+
+  tzsource%cmnhname   = 'VISC'
+  tzsource%clongname  = 'viscosity'
+  tzsource%lavailable = lvisc .and. lvisc_r
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+  tzsource%cmnhname   = 'ADV'
+  tzsource%clongname  = 'total advection'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+  tzsource%cmnhname   = 'NEADV'
+  tzsource%clongname  = 'negativity correction induced by advection'
+  tzsource%lavailable =  .true.
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+  tzsource%cmnhname   = 'NEGA'
+  tzsource%clongname  = 'negativity correction'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+  tzsource%cmnhname   = 'CORR'
+  tzsource%clongname  = 'correction'
+!   tzsource%lavailable =       ( hcloud      == 'LIMA' .and. lptsplit .and. nmom_i.ge.1 .and. nmom_s.ge.1 ) &
+!                          .or. ( hcloud(1:3) == 'ICE' .and. lred .and. celec == 'NONE' )
+  tzsource%lavailable = hcloud(1:3) == 'ICE' .and. lred .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+  tzsource%cmnhname   = 'SEDI'
+  tzsource%clongname  = 'sedimentation'
+  tzsource%lavailable =      ( hcloud      == 'LIMA' .and. nmom_i.ge.1 .and. nmom_s.ge.1 ) &
+                        .or.   hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+  tzsource%cmnhname   = 'CNVI'
+  tzsource%clongname  = 'conversion of snow to cloud ice'
+  tzsource%lavailable = hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_s.ge.1 ) )
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+  tzsource%cmnhname   = 'DEPS'
+  tzsource%clongname  = 'deposition on snow'
+  tzsource%lavailable = ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_s.ge.1 ) ) ) .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+  tzsource%cmnhname   = 'CNVS'
+  tzsource%clongname  = 'conversion of pristine ice to snow'
+  tzsource%lavailable = hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_s.ge.1 ) )
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+  tzsource%cmnhname   = 'AGGS'
+  tzsource%clongname  = 'aggregation of snow'
+  tzsource%lavailable = ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_s.ge.1 ) ) ) .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+  tzsource%cmnhname   = 'AUTS'
+  tzsource%clongname  = 'autoconversion of ice'
+  tzsource%lavailable = hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+  tzsource%cmnhname   = 'RIM'
+  tzsource%clongname  = 'riming of cloud water'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 ) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+  tzsource%cmnhname   = 'HMS'
+  tzsource%clongname  = 'Hallett-Mossop ice multiplication process due to snow riming'
+  tzsource%lavailable = hcloud == 'LIMA' .and. ( lptsplit .or. (nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 ) )
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+  tzsource%cmnhname   = 'CIBU'
+  tzsource%clongname  = 'ice multiplication process due to ice collisional breakup'
+  tzsource%lavailable = hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 .and. lcibu ) )
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+  tzsource%cmnhname   = 'ACC'
+  tzsource%clongname  = 'accretion of rain on snow'
+  tzsource%lavailable =       ( hcloud == 'LIMA' .and. ( lptsplit .or. (       nmom_i.ge.1 .and. nmom_c.ge.1      &
+                                                                         .and. nmom_s.ge.1 .and. nmom_r.ge.1) ) ) &
+                         .or.   hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+  tzsource%cmnhname   = 'CMEL'
+  tzsource%clongname  = 'conversion melting'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 ) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+  tzsource%cmnhname   = 'WETG'
+  tzsource%clongname  = 'wet growth of graupel'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 ) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+  tzsource%cmnhname   = 'DRYG'
+  tzsource%clongname  = 'dry growth of graupel'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 ) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+  tzsource%cmnhname   = 'WETH'
+  tzsource%clongname  = 'wet growth of hail'
+  tzsource%lavailable =      ( hcloud == 'LIMA' .and. .not.lptsplit .and. nmom_h.ge.1 .and. nmom_i.ge.1 &
+                                                .and. nmom_c.ge.1    .and. nmom_s.ge.1 )                &
+                        .or. ( hcloud == 'LIMA' .and. lptsplit ) &
+                        .or.   hcloud == 'ICE4'
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+  tzsource%cmnhname   = 'DRYH'
+  tzsource%clongname  = 'dry growth of hail'
+  tzsource%lavailable = hcloud == 'ICE4' .and. lred .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+  tzsource%cmnhname   = 'NECON'
+  tzsource%clongname  = 'negativity correction induced by condensation'
+  tzsource%lavailable = celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RS), tzsource )
+
+
+  call Sourcelist_sort_compact( tbudgets(NBUDGET_RS) )
+
+  call Sourcelist_scan( tbudgets(NBUDGET_RS), cbulist_rrs )
+end if
+
+! Budget of RRG
+tbudgets(NBUDGET_RG)%lenabled = lbu_rrg .and. krr >= 6
+
+if ( tbudgets(NBUDGET_RG)%lenabled ) then
+  tbudgets(NBUDGET_RG)%trhodj => tburhodj
+
+  !Allocate all basic source terms (used or not)
+  !The size should be large enough (bigger than necessary is OK)
+  tbudgets(NBUDGET_RG)%nsourcesmax = NSOURCESMAX
+  allocate( tbudgets(NBUDGET_RG)%tsources(NSOURCESMAX) )
+
+  allocate( tbudgets(NBUDGET_RG)%xtmpstore(ibudim1, ibudim2, ibudim3) )
+
+  tbudgets(NBUDGET_RG)%tsources(:)%ngroup = 0
+
+  tzsource%ccomment = 'Budget of graupel mixing ratio'
+  tzsource%ngrid    = 1
+
+  tzsource%cunits   = 'kg kg-1'
+
+  tzsource%cmnhname   = 'INIF'
+  tzsource%clongname  = 'initial state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+  tzsource%cmnhname   = 'ENDF'
+  tzsource%clongname  = 'final state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+  tzsource%cmnhname   = 'AVEF'
+  tzsource%clongname  = 'averaged state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource, odonotinit = .true., ooverwrite = .false. )
+
+  tzsource%cunits   = 's-1'
+
+  tzsource%cmnhname   = 'ASSE'
+  tzsource%clongname  = 'time filter (Asselin)'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'NEST'
+  tzsource%clongname  = 'nesting'
+  tzsource%lavailable = nmodel > 1
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'FRC'
+  tzsource%clongname  = 'forcing'
+  tzsource%lavailable = lforcing
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'DIF'
+  tzsource%clongname  = 'numerical diffusion'
+  tzsource%lavailable = onumdifth
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'REL'
+  tzsource%clongname  = 'relaxation'
+  tzsource%lavailable = ohorelax_rg
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+!   tzsource%cmnhname   = 'NETUR'
+!   tzsource%clongname  = 'negativity correction induced by turbulence'
+!   tzsource%lavailable = hturb == 'TKEL' .and. (      hcloud == 'ICE3' .or. hcloud == 'ICE4' &
+!                                   .or. hcloud == 'KHKO' .or. hcloud == 'C2R2' .or. hcloud == 'LIMA' )
+!   call Budget_source_add( tbudgets(NBUDGET_RG), tzsource nneturrg )
+
+  tzsource%cmnhname   = 'VISC'
+  tzsource%clongname  = 'viscosity'
+  tzsource%lavailable = lvisc .and. lvisc_r
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'ADV'
+  tzsource%clongname  = 'total advection'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'NEADV'
+  tzsource%clongname  = 'negativity correction induced by advection'
+  tzsource%lavailable =  hcloud == 'ICE3' .or. hcloud == 'ICE4' .or. hcloud == 'LIMA'
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'NEGA'
+  tzsource%clongname  = 'negativity correction'
+  tzsource%lavailable =  hcloud == 'ICE3' .or. hcloud == 'ICE4' .or. hcloud == 'LIMA'
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'CORR'
+  tzsource%clongname  = 'correction'
+  tzsource%lavailable = hcloud(1:3) == 'ICE' .and. lred .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'SEDI'
+  tzsource%clongname  = 'sedimentation'
+  tzsource%lavailable =      ( hcloud      == 'LIMA' .and. nmom_i.ge.1 .and. nmom_s.ge.1 ) &
+                        .or.   hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'HONR'
+  tzsource%clongname  = 'rain homogeneous freezing'
+  tzsource%lavailable = hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. lnucl_lima .and. nmom_r.ge.1 ) )
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'SFR'
+  tzsource%clongname  = 'spontaneous freezing'
+  tzsource%lavailable = hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'DEPG'
+  tzsource%clongname  = 'deposition on graupel'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 ) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'RIM'
+  tzsource%clongname  = 'riming of cloud water'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 ) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'ACC'
+  tzsource%clongname  = 'accretion of rain on graupel'
+  tzsource%lavailable =      ( hcloud == 'LIMA' .and. ( lptsplit .or. (       nmom_i.ge.1 .and. nmom_c.ge.1      &
+                                                                        .and. nmom_s.ge.1 .and. nmom_r.ge.1) ) ) &
+                        .or.   hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'CMEL'
+  tzsource%clongname  = 'conversion melting of snow'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. (nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'CFRZ'
+  tzsource%clongname  = 'conversion freezing of rain'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. (nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'RDSF'
+  tzsource%clongname  = 'ice multiplication process following rain contact freezing'
+  tzsource%lavailable = hcloud == 'LIMA' .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 .and. lrdsf ) )
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )  
+
+  tzsource%cmnhname   = 'WETG'
+  tzsource%clongname  = 'wet growth of graupel'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. (nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'GHCV'
+  tzsource%clongname  = 'graupel to hail conversion'
+  tzsource%lavailable = hcloud == 'ICE4' .and. lred .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'DRYG'
+  tzsource%clongname  = 'dry growth of graupel'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. (nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'HMG'
+  tzsource%clongname  = 'Hallett-Mossop ice multiplication process due to graupel riming'
+  tzsource%lavailable = hcloud == 'LIMA' .and. ( lptsplit .or. (nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 ) )
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'GMLT'
+  tzsource%clongname  = 'graupel melting'
+  tzsource%lavailable =    ( hcloud == 'LIMA' .and. ( lptsplit .or. (nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1) ) ) &
+                        .or. hcloud(1:3) == 'ICE'
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'WETH'
+  tzsource%clongname  = 'wet growth of hail'
+  tzsource%lavailable =      ( hcloud == 'LIMA' .and. .not.lptsplit .and. nmom_h.ge.1 .and. nmom_i.ge.1 &
+                                                .and. nmom_c.ge.1    .and. nmom_s.ge.1 )                &
+                        .or. ( hcloud == 'LIMA' .and. lptsplit ) &
+                        .or.   hcloud == 'ICE4'
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'COHG'
+  tzsource%clongname  = 'conversion of hail to graupel'
+  tzsource%lavailable = hcloud == 'LIMA' .and. (lptsplit .or. (nmom_h.ge.1 .and. nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1) )
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'HGCV'
+  tzsource%clongname  = 'hail to graupel conversion'
+  tzsource%lavailable = hcloud == 'ICE4' .and. lred .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'DRYH'
+  tzsource%clongname  = 'dry growth of hail'
+  tzsource%lavailable = hcloud == 'ICE4' .and. lred .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+  tzsource%cmnhname   = 'NECON'
+  tzsource%clongname  = 'negativity correction induced by condensation'
+  tzsource%lavailable = (      hcloud == 'KESS' .or. hcloud == 'ICE3' .or. hcloud == 'ICE4'   &
+                          .or. hcloud == 'KHKO' .or. hcloud == 'C2R2' .or. hcloud == 'LIMA' ) &
+                        .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RG), tzsource )
+
+
+  call Sourcelist_sort_compact( tbudgets(NBUDGET_RG) )
+
+  call Sourcelist_scan( tbudgets(NBUDGET_RG), cbulist_rrg )
+end if
+
+! Budget of RRH
+tbudgets(NBUDGET_RH)%lenabled = lbu_rrh .and. krr >= 7
+
+if ( tbudgets(NBUDGET_RH)%lenabled ) then
+  tbudgets(NBUDGET_RH)%trhodj => tburhodj
+
+  !Allocate all basic source terms (used or not)
+  !The size should be large enough (bigger than necessary is OK)
+  tbudgets(NBUDGET_RH)%nsourcesmax = NSOURCESMAX
+  allocate( tbudgets(NBUDGET_RH)%tsources(NSOURCESMAX) )
+
+  allocate( tbudgets(NBUDGET_RH)%xtmpstore(ibudim1, ibudim2, ibudim3) )
+
+  tbudgets(NBUDGET_RH)%tsources(:)%ngroup = 0
+
+  tzsource%ccomment = 'Budget of hail mixing ratio'
+  tzsource%ngrid    = 1
+
+  tzsource%cunits   = 'kg kg-1'
+
+  tzsource%cmnhname   = 'INIF'
+  tzsource%clongname  = 'initial state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RH), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+  tzsource%cmnhname   = 'ENDF'
+  tzsource%clongname  = 'final state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RH), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+  tzsource%cmnhname   = 'AVEF'
+  tzsource%clongname  = 'averaged state'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RH), tzsource, odonotinit = .true., ooverwrite = .false. )
+
+  tzsource%cunits   = 's-1'
+
+  tzsource%cmnhname   = 'ASSE'
+  tzsource%clongname  = 'time filter (Asselin)'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RH), tzsource )
+
+  tzsource%cmnhname   = 'NEST'
+  tzsource%clongname  = 'nesting'
+  tzsource%lavailable = nmodel > 1
+  call Budget_source_add( tbudgets(NBUDGET_RH), tzsource )
+
+  tzsource%cmnhname   = 'FRC'
+  tzsource%clongname  = 'forcing'
+  tzsource%lavailable = lforcing
+  call Budget_source_add( tbudgets(NBUDGET_RH), tzsource )
+
+  tzsource%cmnhname   = 'DIF'
+  tzsource%clongname  = 'numerical diffusion'
+  tzsource%lavailable = onumdifth
+  call Budget_source_add( tbudgets(NBUDGET_RH), tzsource )
+
+  tzsource%cmnhname   = 'REL'
+  tzsource%clongname  = 'relaxation'
+  tzsource%lavailable = ohorelax_rh
+  call Budget_source_add( tbudgets(NBUDGET_RH), tzsource )
+
+!   tzsource%cmnhname   = 'NETUR'
+!   tzsource%clongname  = 'negativity correction induced by turbulence'
+!   tzsource%lavailable = hturb == 'TKEL' .and. (      hcloud == 'ICE3' .or. hcloud == 'ICE4' &
+!                                   .or. hcloud == 'KHKO' .or. hcloud == 'C2R2' .or. hcloud == 'LIMA' )
+!   call Budget_source_add( tbudgets(NBUDGET_RH), tzsource nneturrh )
+
+  tzsource%cmnhname   = 'VISC'
+  tzsource%clongname  = 'viscosity'
+  tzsource%lavailable = lvisc .and. lvisc_r
+  call Budget_source_add( tbudgets(NBUDGET_RH), tzsource )
+
+  tzsource%cmnhname   = 'ADV'
+  tzsource%clongname  = 'total advection'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RH), tzsource )
+
+  tzsource%cmnhname   = 'NEADV'
+  tzsource%clongname  = 'negativity correction induced by advection'
+  tzsource%lavailable = .true.
+  call Budget_source_add( tbudgets(NBUDGET_RH), tzsource )
+
+  tzsource%cmnhname   = 'NEGA'
+  tzsource%clongname  = 'negativity correction'
+  tzsource%lavailable =  .true.
+  call Budget_source_add( tbudgets(NBUDGET_RH), tzsource )
+
+  tzsource%cmnhname   = 'SEDI'
+  tzsource%clongname  = 'sedimentation'
+  tzsource%lavailable =      ( hcloud == 'LIMA' .and. nmom_i.ge.1 .and. nmom_h.ge.1 ) &
+                        .or.   hcloud == 'ICE4'
+  call Budget_source_add( tbudgets(NBUDGET_RH), tzsource )
+
+  tzsource%cmnhname   = 'DEPH'
+  tzsource%clongname  = 'deposition on hail'
+  tzsource%lavailable =      ( hcloud == 'LIMA' .and. nmom_h.ge.1 ) 
+  call Budget_source_add( tbudgets(NBUDGET_RH), tzsource )
+
+
+  tzsource%cmnhname   = 'GHCV'
+  tzsource%clongname  = 'graupel to hail conversion'
+  tzsource%lavailable = hcloud == 'ICE4' .and. lred .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RH), tzsource )
+
+  tzsource%cmnhname   = 'WETG'
+  tzsource%clongname  = 'wet growth of graupel'
+  tzsource%lavailable =      ( hcloud == 'LIMA' .and. nmom_h.ge.1                                                            &
+                                                .and. ( lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 ) ) ) &
+                        .or. ( hcloud == 'ICE4' .and. ( .not. lred .or. celec /= 'NONE' ) )
+  call Budget_source_add( tbudgets(NBUDGET_RH), tzsource )
+
+  tzsource%cmnhname   = 'WETH'
+  tzsource%clongname  = 'wet growth of hail'
+  tzsource%lavailable =      ( hcloud == 'LIMA' .and. .not.lptsplit .and. nmom_h.ge.1 .and. nmom_i.ge.1    &
+                                                                    .and. nmom_c.ge.1 .and. nmom_s.ge.1 ) &
+                        .or. ( hcloud == 'LIMA' .and. lptsplit ) &
+                        .or.   hcloud == 'ICE4'
+  call Budget_source_add( tbudgets(NBUDGET_RH), tzsource )
+
+  tzsource%cmnhname   = 'COHG'
+  tzsource%clongname  = 'conversion from hail to graupel'
+  tzsource%lavailable = hcloud == 'LIMA' .and. ( lptsplit .or. (nmom_h.ge.1 .and. nmom_i.ge.1 &
+                                                             .and. nmom_c.ge.1 .and. nmom_s.ge.1) )
+  call Budget_source_add( tbudgets(NBUDGET_RH), tzsource )
+
+  tzsource%cmnhname   = 'HGCV'
+  tzsource%clongname  = 'hail to graupel conversion'
+  tzsource%lavailable = hcloud == 'ICE4' .and. lred .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RH), tzsource )
+
+  tzsource%cmnhname   = 'DRYH'
+  tzsource%clongname  = 'dry growth of hail'
+  tzsource%lavailable = hcloud == 'ICE4' .and. lred .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RH), tzsource )
+
+  tzsource%cmnhname   = 'HMLT'
+  tzsource%clongname  = 'melting of hail'
+  tzsource%lavailable =      ( hcloud == 'LIMA' .and. .not. lptsplit .and. nmom_h.ge.1 .and. nmom_i.ge.1   &
+                                                                     .and. nmom_c.ge.1 .and. nmom_s.ge.1 ) &
+                        .or. ( hcloud == 'LIMA' .and. lptsplit ) &
+                        .or.   hcloud == 'ICE4'
+  call Budget_source_add( tbudgets(NBUDGET_RH), tzsource )
+
+  tzsource%cmnhname   = 'CORR'
+  tzsource%clongname  = 'correction'
+  tzsource%lavailable = hcloud == 'ICE4' .and. lred .and. celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RH), tzsource )
+
+  tzsource%cmnhname   = 'NECON'
+  tzsource%clongname  = 'negativity correction induced by condensation'
+  tzsource%lavailable = celec == 'NONE'
+  call Budget_source_add( tbudgets(NBUDGET_RH), tzsource )
+
+
+  call Sourcelist_sort_compact( tbudgets(NBUDGET_RH) )
+
+  call Sourcelist_scan( tbudgets(NBUDGET_RH), cbulist_rrh )
+end if
+
+! Budgets of RSV (scalar variables)
+
+if ( ksv > 999 ) call Print_msg( NVERB_FATAL, 'BUD', 'Ini_budget', 'number of scalar variables > 999' )
+
+SV_BUDGETS: do jsv = 1, ksv
+  ibudget = NBUDGET_SV1 - 1 + jsv
+
+  tbudgets(ibudget)%lenabled = lbu_rsv
+
+  if ( lbu_rsv ) then
+    tbudgets(ibudget)%trhodj => tburhodj
+
+    !Allocate all basic source terms (used or not)
+    !The size should be large enough (bigger than necessary is OK)
+    tbudgets(ibudget)%nsourcesmax = NSOURCESMAX
+    allocate( tbudgets(ibudget)%tsources(NSOURCESMAX) )
+
+    allocate( tbudgets(ibudget)%xtmpstore(ibudim1, ibudim2, ibudim3) )
+
+    tbudgets(ibudget)%tsources(:)%ngroup = 0
+
+    tzsource%ccomment = 'Budget of scalar variable ' // tsvlist(jsv)%cmnhname
+    tzsource%ngrid    = 1
+
+    tzsource%cunits   = '1'
+
+    tzsource%cmnhname   = 'INIF'
+    tzsource%clongname  = 'initial state'
+    tzsource%lavailable = .true.
+    call Budget_source_add( tbudgets(ibudget), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+    tzsource%cmnhname   = 'ENDF'
+    tzsource%clongname  = 'final state'
+    tzsource%lavailable = .true.
+    call Budget_source_add( tbudgets(ibudget), tzsource, odonotinit = .true., ooverwrite = .true. )
+
+    tzsource%cmnhname   = 'AVEF'
+    tzsource%clongname  = 'averaged state'
+    tzsource%lavailable = .true.
+    call Budget_source_add( tbudgets(ibudget), tzsource, odonotinit = .true., ooverwrite = .false. )
+
+    tzsource%cunits   = 's-1'
+
+    tzsource%cmnhname   = 'ASSE'
+    tzsource%clongname  = 'time filter (Asselin)'
+    tzsource%lavailable = .true.
+    call Budget_source_add( tbudgets(ibudget), tzsource )
+
+    tzsource%cmnhname   = 'NEST'
+    tzsource%clongname  = 'nesting'
+    tzsource%lavailable = nmodel > 1
+    call Budget_source_add( tbudgets(ibudget), tzsource )
+
+    tzsource%cmnhname   = 'FRC'
+    tzsource%clongname  = 'forcing'
+    tzsource%lavailable = lforcing
+    call Budget_source_add( tbudgets(ibudget), tzsource )
+
+    tzsource%cmnhname   = 'DIF'
+    tzsource%clongname  = 'numerical diffusion'
+    tzsource%lavailable = onumdifsv
+    call Budget_source_add( tbudgets(ibudget), tzsource )
+
+    tzsource%cmnhname   = 'REL'
+    tzsource%clongname  = 'relaxation'
+    tzsource%lavailable = ohorelax_sv( jsv ) .or. ( celec /= 'NONE' .and. lrelax2fw_ion                 &
+                                                    .and. (jsv == nsv_elecbeg .or. jsv == nsv_elecend ) )
+    call Budget_source_add( tbudgets(ibudget), tzsource )
+
+    tzsource%cmnhname   = 'DCONV'
+    tzsource%clongname  = 'KAFR convection'
+    tzsource%lavailable = ( hdconv == 'KAFR' .or. hsconv == 'KAFR' ) .and. ochtrans
+    call Budget_source_add( tbudgets(ibudget), tzsource )
+
+    tzsource%cmnhname   = 'VTURB'
+    tzsource%clongname  = 'vertical turbulent diffusion'
+    tzsource%lavailable = hturb == 'TKEL'
+    call Budget_source_add( tbudgets(ibudget), tzsource )
+
+    tzsource%cmnhname   = 'HTURB'
+    tzsource%clongname  = 'horizontal turbulent diffusion'
+    tzsource%lavailable = hturb == 'TKEL' .and. HTURBDIM == '3DIM'
+    call Budget_source_add( tbudgets(ibudget), tzsource )
+
+    tzsource%cmnhname   = 'MAFL'
+    tzsource%clongname  = 'mass flux'
+    tzsource%lavailable = hsconv == 'EDKF'
+    call Budget_source_add( tbudgets(ibudget), tzsource )
+
+    tzsource%cmnhname   = 'VISC'
+    tzsource%clongname  = 'viscosity'
+    tzsource%lavailable = lvisc .and. lvisc_sv
+    call Budget_source_add( tbudgets(ibudget), tzsource )
+
+    tzsource%cmnhname   = 'ADV'
+    tzsource%clongname  = 'total advection'
+    tzsource%lavailable = .true.
+    call Budget_source_add( tbudgets(ibudget), tzsource )
+
+    tzsource%cmnhname   = 'NEGA2'
+    tzsource%clongname  = 'negativity correction'
+    tzsource%lavailable = .true.
+    call Budget_source_add( tbudgets(ibudget), tzsource )
+
+    ! Add specific source terms to different scalar variables
+    SV_VAR: if ( jsv <= nsv_user ) then
+      ! nsv_user case
+      ! Nothing to do
+
+    else if ( jsv >= nsv_c2r2beg .and. jsv <= nsv_c2r2end ) then SV_VAR
+      ! C2R2 or KHKO Case
+
+      ! Source terms in common for all C2R2/KHKO budgets
+      tzsource%cmnhname   = 'NETUR'
+      tzsource%clongname  = 'negativity correction induced by turbulence'
+      tzsource%lavailable = hturb == 'TKEL'
+      call Budget_source_add( tbudgets(ibudget), tzsource )
+
+      tzsource%cmnhname   = 'NEADV'
+      tzsource%clongname  = 'negativity correction induced by advection'
+      tzsource%lavailable = .true.
+      call Budget_source_add( tbudgets(ibudget), tzsource )
+
+      tzsource%cmnhname   = 'NEGA'
+      tzsource%clongname  = 'negativity correction'
+      tzsource%lavailable = .true.
+      call Budget_source_add( tbudgets(ibudget), tzsource )
+
+      tzsource%cmnhname   = 'NECON'
+      tzsource%clongname  = 'negativity correction induced by condensation'
+      tzsource%lavailable = .true.
+      call Budget_source_add( tbudgets(ibudget), tzsource )
+
+      ! Source terms specific to each budget
+      SV_C2R2: select case( jsv - nsv_c2r2beg + 1 )
+        case ( 1 ) SV_C2R2
+          ! Concentration of activated nuclei
+          tzsource%cmnhname   = 'HENU'
+          tzsource%clongname  = 'CCN activation'
+          gtmp = cactccn == 'ABRK' .and. (lorilam .or. ldust .or. lsalt )
+          tzsource%lavailable =  gtmp .or. ( .not.gtmp .and. .not.lsupsat_c2r2 )
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'CEVA'
+          tzsource%clongname  = 'evaporation'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+
+        case ( 2 ) SV_C2R2
+          ! Concentration of cloud droplets
+          tzsource%cmnhname   = 'DEPOTR'
+          tzsource%clongname  = 'tree droplet deposition'
+          tzsource%lavailable = odragtree .and. odepotree
+          call Budget_source_add( tbudgets(ibudget), tzsource)
+
+          tzsource%cmnhname   = 'HENU'
+          tzsource%clongname  = 'CCN activation'
+          gtmp = cactccn == 'ABRK' .and. (lorilam .or. ldust .or. lsalt )
+          tzsource%lavailable =  gtmp .or. ( .not.gtmp .and. .not.lsupsat_c2r2 )
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'SELF'
+          tzsource%clongname  = 'self-collection of cloud droplets'
+          tzsource%lavailable = lrain_c2r2
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'ACCR'
+          tzsource%clongname  = 'accretion of cloud droplets'
+          tzsource%lavailable = lrain_c2r2
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'SEDI'
+          tzsource%clongname  = 'sedimentation'
+          tzsource%lavailable = lsedc_c2r2
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'DEPO'
+          tzsource%clongname  = 'surface droplet deposition'
+          tzsource%lavailable = ldepoc_c2r2
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'CEVA'
+          tzsource%clongname  = 'evaporation'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+
+        case ( 3 ) SV_C2R2
+          ! Concentration of raindrops
+          tzsource%cmnhname   = 'AUTO'
+          tzsource%clongname  = 'autoconversion into rain'
+          tzsource%lavailable = lrain_c2r2
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'SCBU'
+          tzsource%clongname  = 'self collection - coalescence/break-up'
+          tzsource%lavailable = hcloud /= 'KHKO'
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'REVA'
+          tzsource%clongname  = 'rain evaporation'
+          tzsource%lavailable = lrain_c2r2
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'BRKU'
+          tzsource%clongname  = 'spontaneous break-up'
+          tzsource%lavailable = lrain_c2r2
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'SEDI'
+          tzsource%clongname  = 'sedimentation'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+
+        case ( 4 ) SV_C2R2
+          ! Supersaturation
+          tzsource%cmnhname   = 'CEVA'
+          tzsource%clongname  = 'evaporation'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+      end select SV_C2R2
+
+
+    else if ( jsv >= nsv_lima_beg .and. jsv <= nsv_lima_end ) then SV_VAR
+      ! LIMA case
+
+      ! Source terms in common for all LIMA budgets (except supersaturation)
+      if ( jsv /= nsv_lima_spro ) then
+        tzsource%cmnhname   = 'NETUR'
+        tzsource%clongname  = 'negativity correction induced by turbulence'
+        tzsource%lavailable = hturb == 'TKEL'
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'NEADV'
+        tzsource%clongname  = 'negativity correction induced by advection'
+        tzsource%lavailable = .true.
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'NEGA'
+        tzsource%clongname  = 'negativity correction'
+        tzsource%lavailable = .true.
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'NECON'
+        tzsource%clongname  = 'negativity correction induced by condensation'
+        tzsource%lavailable = .true.
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+      end if
+
+
+      ! Source terms specific to each budget
+      SV_LIMA: if ( jsv == nsv_lima_nc ) then
+        ! Cloud droplets concentration
+        tzsource%cmnhname   = 'DEPOTR'
+        tzsource%clongname  = 'tree droplet deposition'
+        tzsource%lavailable = odragtree .and. odepotree
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+!         tzsource%cmnhname   = 'CORR'
+!         tzsource%clongname  = 'correction'
+!         tzsource%lavailable = lptsplit .and. nmom_c.ge.1  .and. nmom_r.ge.1
+!         call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'SEDI'
+        tzsource%clongname  = 'sedimentation'
+        tzsource%lavailable = nmom_c.ge.1  .and. lsedc_lima
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'DEPO'
+        tzsource%clongname  = 'surface droplet deposition'
+        tzsource%lavailable = nmom_c.ge.1  .and. ldepoc_lima
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'R2C1'
+        tzsource%clongname  = 'rain to cloud change after sedimentation'
+        tzsource%lavailable = lptsplit .and. nmom_c.ge.1  .and. nmom_r.ge.1
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'HENU'
+        tzsource%clongname  = 'CCN activation'
+        tzsource%lavailable = nmom_c.ge.1  .and. lacti_lima .and. nmod_ccn >= 1 .and. ( .not.lptsplit .or. .not.lsubg_cond )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'HINC'
+        tzsource%clongname  = 'heterogeneous nucleation by contact'
+        tzsource%lavailable = nmom_i.ge.1 .and. lnucl_lima
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'SELF'
+        tzsource%clongname  = 'self-collection of cloud droplets'
+        tzsource%lavailable = lptsplit .or. (nmom_c.ge.1 .and. nmom_r.ge.1)
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'AUTO'
+        tzsource%clongname  = 'autoconversion into rain'
+        tzsource%lavailable = lptsplit .or. ( nmom_c.ge.1  .and. nmom_r.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'ACCR'
+        tzsource%clongname  = 'accretion of cloud droplets'
+        tzsource%lavailable = lptsplit .or. ( nmom_c.ge.1  .and. nmom_r.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'REVA'
+        tzsource%clongname  = 'rain evaporation'
+        tzsource%lavailable = lptsplit .or. ( nmom_c.ge.1  .and. nmom_r.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'HONC'
+        tzsource%clongname  = 'droplet homogeneous freezing'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  .and. lnucl_lima )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'IMLT'
+        tzsource%clongname  = 'melting of ice'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'RIM'
+        tzsource%clongname  = 'riming of cloud water'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'WETG'
+        tzsource%clongname  = 'wet growth of graupel'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'DRYG'
+        tzsource%clongname  = 'dry growth of graupel'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CVRC'
+        tzsource%clongname  = 'rain to cloud change after other microphysical processes'
+        tzsource%lavailable = lptsplit
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'WETH'
+        tzsource%clongname  = 'wet growth of hail'
+        tzsource%lavailable = lptsplit .or. nmom_h.ge.1
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CORR2'
+        tzsource%clongname  = 'supplementary correction inside LIMA splitting'
+        tzsource%lavailable = lptsplit
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CEDS'
+        tzsource%clongname  = 'adjustment to saturation'
+        tzsource%lavailable = nmom_c.ge.1
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+
+      else if ( jsv == nsv_lima_nr ) then SV_LIMA
+        ! Rain drops concentration
+!         tzsource%cmnhname   = 'CORR'
+!         tzsource%clongname  = 'correction'
+!         tzsource%lavailable = lptsplit .and. nmom_c.ge.1  .and. nmom_r.ge.1
+!         call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'SEDI'
+        tzsource%clongname  = 'sedimentation'
+        tzsource%lavailable = nmom_c.ge.1  .and. nmom_r.ge.1
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'R2C1'
+        tzsource%clongname  = 'rain to cloud change after sedimentation'
+        tzsource%lavailable = lptsplit .and. nmom_c.ge.1  .and. nmom_r.ge.1
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'AUTO'
+        tzsource%clongname  = 'autoconversion into rain'
+        tzsource%lavailable = lptsplit .or. (nmom_c.ge.1  .and. nmom_r.ge.1)
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'SCBU'
+        tzsource%clongname  = 'self collection - coalescence/break-up'
+        tzsource%lavailable = lptsplit .or. (nmom_c.ge.1  .and. nmom_r.ge.1)
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'REVA'
+        tzsource%clongname  = 'rain evaporation'
+        tzsource%lavailable = lptsplit .or. (nmom_c.ge.1  .and. nmom_r.ge.1)
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'BRKU'
+        tzsource%clongname  = 'spontaneous break-up'
+        tzsource%lavailable = lptsplit .or. (nmom_c.ge.1  .and. nmom_r.ge.1)
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'HONR'
+        tzsource%clongname  = 'rain homogeneous freezing'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  .and. nmom_r.ge.1 .and. lnucl_lima )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'ACC'
+        tzsource%clongname  = 'accretion of rain  on aggregates'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  .and. nmom_s.ge.1 .and. nmom_r.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CFRZ'
+        tzsource%clongname  = 'conversion freezing of rain'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'WETG'
+        tzsource%clongname  = 'wet growth of graupel'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'DRYG'
+        tzsource%clongname  = 'dry growth of graupel'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'GMLT'
+        tzsource%clongname  = 'graupel melting'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CVRC'
+        tzsource%clongname  = 'rain to cloud change after other microphysical processes'
+        tzsource%lavailable = lptsplit
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'WETH'
+        tzsource%clongname  = 'wet growth of hail'
+        tzsource%lavailable = lptsplit .or. nmom_h.ge.1
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'HMLT'
+        tzsource%clongname  = 'melting of hail'
+        tzsource%lavailable = lptsplit .or. nmom_h.ge.1
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CORR2'
+        tzsource%clongname  = 'supplementary correction inside LIMA splitting'
+        tzsource%lavailable = lptsplit
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+
+      else if ( jsv >= nsv_lima_ccn_free .and. jsv <= nsv_lima_ccn_free + nmod_ccn - 1 ) then SV_LIMA
+        ! Free CCN concentration
+        tzsource%cmnhname   = 'HENU'
+        tzsource%clongname  = 'CCN activation'
+        tzsource%lavailable = nmom_c.ge.1  .and. lacti_lima .and. nmod_ccn >= 1 .and. ( .not.lptsplit .or. .not.lsubg_cond )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'HONH'
+        tzsource%clongname  = 'haze homogeneous nucleation'
+        tzsource%lavailable = nmom_i.ge.1 .and. lnucl_lima .and. lhhoni_lima .and. nmod_ccn >= 1
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CEDS'
+        tzsource%clongname  = 'adjustment to saturation'
+        tzsource%lavailable = nmom_c.ge.1
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'SCAV'
+        tzsource%clongname  = 'scavenging'
+        tzsource%lavailable = lscav_lima
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+
+      else if ( jsv >= nsv_lima_ccn_acti .and. jsv <= nsv_lima_ccn_acti + nmod_ccn - 1 ) then SV_LIMA
+        ! Activated CCN concentration
+        tzsource%cmnhname   = 'HENU'
+        tzsource%clongname  = 'CCN activation'
+        tzsource%lavailable = nmom_c.ge.1  .and. lacti_lima .and. nmod_ccn >= 1 .and. ( .not.lptsplit .or. .not.lsubg_cond )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'HINC'
+        tzsource%clongname  = 'heterogeneous nucleation by contact'
+        tzsource%lavailable = nmom_i.ge.1 .and. lnucl_lima .and. .not. lmeyers_lima
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CEDS'
+        tzsource%clongname  = 'adjustment to saturation'
+        tzsource%lavailable = nmom_c.ge.1
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+
+      else if ( jsv == nsv_lima_scavmass ) then SV_LIMA
+        ! Scavenged mass variable
+        tzsource%cmnhname   = 'SCAV'
+        tzsource%clongname  = 'scavenging'
+        tzsource%lavailable = lscav_lima .and. laero_mass_lima
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CEDS'
+        tzsource%clongname  = 'adjustment to saturation'
+        tzsource%lavailable = lscav_lima .and. laero_mass_lima .and. .not.lspro_lima
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+
+      else if ( jsv == nsv_lima_ni ) then SV_LIMA
+        ! Pristine ice crystals concentration
+!         tzsource%cmnhname   = 'CORR'
+!         tzsource%clongname  = 'correction'
+!         tzsource%lavailable = lptsplit .and. nmom_i.ge.1 .and. nmom_s.ge.1
+!         call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'SEDI'
+        tzsource%clongname  = 'sedimentation'
+        tzsource%lavailable = nmom_i.ge.1 .and. lsedi_lima
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'HIND'
+        tzsource%clongname  = 'heterogeneous nucleation by deposition'
+        tzsource%lavailable = nmom_i.ge.1 .and. lnucl_lima
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'HINC'
+        tzsource%clongname  = 'heterogeneous nucleation by contact'
+        tzsource%lavailable = nmom_i.ge.1 .and. lnucl_lima
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'HONH'
+        tzsource%clongname  = 'haze homogeneous nucleation'
+        tzsource%lavailable = nmom_i.ge.1 .and. lnucl_lima .and. lhhoni_lima .and. nmod_ccn >= 1
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'HONC'
+        tzsource%clongname  = 'droplet homogeneous freezing'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  .and. lnucl_lima )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CNVI'
+        tzsource%clongname  = 'conversion of snow to cloud ice'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CNVS'
+        tzsource%clongname  = 'conversion of pristine ice to snow'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'AGGS'
+        tzsource%clongname  = 'aggregation of snow'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'IMLT'
+        tzsource%clongname  = 'melting of ice'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'HMS'
+        tzsource%clongname  = 'Hallett-Mossop ice multiplication process due to snow riming'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CIBU'
+        tzsource%clongname  = 'ice multiplication process due to ice collisional breakup'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 .and. lcibu )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CFRZ'
+        tzsource%clongname  = 'conversion freezing of rain'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'RDSF'
+        tzsource%clongname  = 'ice multiplication process following rain contact freezing'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 .and. lrdsf )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'WETG'
+        tzsource%clongname  = 'wet growth of graupel'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'DRYG'
+        tzsource%clongname  = 'dry growth of graupel'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'HMG'
+        tzsource%clongname  = 'Hallett-Mossop ice multiplication process due to graupel riming'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'WETH'
+        tzsource%clongname  = 'wet growth of hail'
+        tzsource%lavailable = lptsplit .or. nmom_h.ge.1
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CEDS'
+        tzsource%clongname  = 'adjustment to saturation'
+        tzsource%lavailable = nmom_i.ge.1 .and. .not.lptsplit .and. .not.lspro_lima
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CORR2'
+        tzsource%clongname  = 'supplementary correction inside LIMA splitting'
+        tzsource%lavailable = lptsplit
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+      else if ( jsv == nsv_lima_ns ) then SV_LIMA
+
+        tzsource%cmnhname   = 'SEDI'
+        tzsource%clongname  = 'sedimentation'
+        tzsource%lavailable = lptsplit .or. ( nmom_s.ge.2 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CNVI'
+        tzsource%clongname  = 'conversion of snow to cloud ice'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CNVS'
+        tzsource%clongname  = 'conversion of pristine ice to snow'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'BRKU'
+        tzsource%clongname  = 'break up of snow'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'RIM'
+        tzsource%clongname  = 'heavy riming of cloud droplet on snow'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'ACC'
+        tzsource%clongname  = 'accretion of rain on snow'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CMEL'
+        tzsource%clongname  = 'conversion melting of snow'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'WETG'
+        tzsource%clongname  = 'wet growth of graupel'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'DRYG'
+        tzsource%clongname  = 'dry growth of graupel'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'WETH'
+        tzsource%clongname  = 'wet growth of hail'
+        tzsource%lavailable = lptsplit .or. nmom_h.ge.1
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'SSC'
+        tzsource%clongname  = 'snow self collection'
+        tzsource%lavailable = lptsplit  .or. ( nmom_i.ge.1 .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+        
+        tzsource%cmnhname   = 'CEDS'
+        tzsource%clongname  = 'adjustment to saturation'
+        tzsource%lavailable = nmom_i.ge.1 .and. .not.lptsplit .and. .not.lspro_lima
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+      else if ( jsv == nsv_lima_ng ) then SV_LIMA
+
+        tzsource%cmnhname   = 'SEDI'
+        tzsource%clongname  = 'sedimentation'
+        tzsource%lavailable = nmom_i.ge.1 .or. ( nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'RIM'
+        tzsource%clongname  = 'heavy riming of cloud droplet on snow'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'ACC'
+        tzsource%clongname  = 'accretion of rain on snow'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CMEL'
+        tzsource%clongname  = 'conversion melting of snow'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CFRZ'
+        tzsource%clongname  = 'conversion freezing of raindrop'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'WETG'
+        tzsource%clongname  = 'wet growth of graupel'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'GMLT'
+        tzsource%clongname  = 'graupel melting'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1  .and. nmom_s.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'WETH'
+        tzsource%clongname  = 'wet growth of hail'
+        tzsource%lavailable = lptsplit .or. nmom_h.ge.1
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'COHG'
+        tzsource%clongname  = 'conversion hail graupel'
+        tzsource%lavailable = lptsplit .or. nmom_h.ge.1
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+        
+        tzsource%cmnhname   = 'CEDS'
+        tzsource%clongname  = 'adjustment to saturation'
+        tzsource%lavailable = nmom_i.ge.1 .and. .not.lptsplit .and. .not.lspro_lima
+        call Budget_source_add( tbudgets(ibudget), tzsource )   
+
+      else if ( jsv == nsv_lima_nh .and. nmom_h.ge.1) then SV_LIMA
+
+        tzsource%cmnhname   = 'SEDI'
+        tzsource%clongname  = 'sedimentation'
+        tzsource%lavailable = nmom_i.ge.1 .or. ( nmom_i.ge.1 .and. nmom_s.ge.1 .and. nmom_h.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'WETG'
+        tzsource%clongname  = 'wet growth of graupel'
+        tzsource%lavailable = lptsplit .or. nmom_h.ge.1
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'COHG'
+        tzsource%clongname  = 'conversion hail graupel'
+        tzsource%lavailable = lptsplit .or. nmom_h.ge.1
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'HMLT'
+        tzsource%clongname  = 'hail melting'
+        tzsource%lavailable = lptsplit .or. nmom_h.ge.1
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+        
+      else if ( jsv >= nsv_lima_ifn_free .and. jsv <= nsv_lima_ifn_free + nmod_ifn - 1 ) then SV_LIMA
+        ! Free IFN concentration
+        tzsource%cmnhname   = 'HIND'
+        tzsource%clongname  = 'heterogeneous nucleation by deposition'
+        tzsource%lavailable = nmom_i.ge.1 .and. lnucl_lima .and. .not. lmeyers_lima
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CEDS'
+        tzsource%clongname  = 'adjustment to saturation'
+        tzsource%lavailable = nmom_i.ge.1 .and. .not.lptsplit .and. .not.lspro_lima
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'SCAV'
+        tzsource%clongname  = 'scavenging'
+        tzsource%lavailable = lscav_lima
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+
+      else if ( jsv >= nsv_lima_ifn_nucl .and. jsv <= nsv_lima_ifn_nucl + nmod_ifn - 1 ) then SV_LIMA
+        ! Nucleated IFN concentration
+        tzsource%cmnhname   = 'HIND'
+        tzsource%clongname  = 'heterogeneous nucleation by deposition'
+        tzsource%lavailable = nmom_i.ge.1 .and. lnucl_lima                                                     &
+                              .and. ( ( lmeyers_lima .and. jsv == nsv_lima_ifn_nucl ) .or. .not. lmeyers_lima )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'HINC'
+        tzsource%clongname  = 'heterogeneous nucleation by contact'
+        tzsource%lavailable = nmom_i.ge.1 .and. lnucl_lima .and. lmeyers_lima .and. jsv == nsv_lima_ifn_nucl
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'IMLT'
+        tzsource%clongname  = 'melting of ice'
+        tzsource%lavailable = lptsplit .or. ( nmom_i.ge.1 .and. nmom_c.ge.1 )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CEDS'
+        tzsource%clongname  = 'adjustment to saturation'
+        tzsource%lavailable = nmom_i.ge.1 .and. .not.lptsplit .and. .not.lspro_lima
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+
+      else if ( jsv >= nsv_lima_imm_nucl .and. jsv <= nsv_lima_imm_nucl + nmod_imm - 1 ) then SV_LIMA
+        ! Nucleated IMM concentration
+        tzsource%cmnhname   = 'HINC'
+        tzsource%clongname  = 'heterogeneous nucleation by contact'
+        tzsource%lavailable = nmom_i.ge.1 .and. lnucl_lima .and. .not. lmeyers_lima
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CEDS'
+        tzsource%clongname  = 'adjustment to saturation'
+        tzsource%lavailable = nmom_i.ge.1 .and. .not.lptsplit .and. .not.lspro_lima
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+
+      else if ( jsv == nsv_lima_hom_haze ) then SV_LIMA
+        ! Homogeneous freezing of CCN
+        tzsource%cmnhname   = 'HONH'
+        tzsource%clongname  = 'haze homogeneous nucleation'
+        tzsource%lavailable = nmom_i.ge.1 .and. lnucl_lima .and.                                             &
+                              ( ( lhhoni_lima .and. nmod_ccn >= 1 ) .or. ( .not.lptsplit .and. nmom_c.ge.1 ) )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+
+      else if ( jsv == nsv_lima_spro ) then SV_LIMA
+        ! Supersaturation
+        tzsource%cmnhname   = 'CEDS'
+        tzsource%clongname  = 'adjustment to saturation'
+        tzsource%lavailable = .true.
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+      end if SV_LIMA
+
+
+    else if ( jsv >= nsv_elecbeg .and. jsv <= nsv_elecend ) then SV_VAR
+      ! Electricity case
+      tzsource%cmnhname   = 'NEGA'
+      tzsource%clongname  = 'negativity correction'
+      tzsource%lavailable = .true.
+      call Budget_source_add( tbudgets(ibudget), tzsource )
+
+      SV_ELEC: select case( jsv - nsv_elecbeg + 1 )
+        case ( 1 ) SV_ELEC
+          ! volumetric charge of water vapor
+          tzsource%cmnhname   = 'DRIFT'
+          tzsource%clongname  = 'ion drift motion'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'CORAY'
+          tzsource%clongname  = 'cosmic ray source'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'DEPS'
+          tzsource%clongname  = 'deposition on snow'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'DEPG'
+          tzsource%clongname  = 'deposition on graupel'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'REVA'
+          tzsource%clongname  = 'rain evaporation'
+          tzsource%lavailable = lwarm_ice
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'DEPI'
+          tzsource%clongname  = 'condensation/deposition on ice'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'NEUT'
+          tzsource%clongname  = 'neutralization'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+
+        case ( 2 ) SV_ELEC
+          ! volumetric charge of cloud droplets
+          tzsource%cmnhname   = 'HON'
+          tzsource%clongname  = 'homogeneous nucleation'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'AUTO'
+          tzsource%clongname  = 'autoconversion into rain'
+          tzsource%lavailable = lwarm_ice
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'ACCR'
+          tzsource%clongname  = 'accretion of cloud droplets'
+          tzsource%lavailable = lwarm_ice
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'RIM'
+          tzsource%clongname  = 'riming of cloud water'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'WETG'
+          tzsource%clongname  = 'wet growth of graupel'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'DRYG'
+          tzsource%clongname  = 'dry growth of graupel'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'INCG'
+          tzsource%clongname  = 'inductive charge transfer between cloud droplets and graupel'
+          tzsource%lavailable = linductive
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'WETH'
+          tzsource%clongname  = 'wet growth of hail'
+          tzsource%lavailable = hcloud == 'ICE4'
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'IMLT'
+          tzsource%clongname  = 'melting of ice'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'BERFI'
+          tzsource%clongname  = 'Bergeron-Findeisen'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'SEDI'
+          tzsource%clongname  = 'sedimentation'
+          tzsource%lavailable = lsedic_ice
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'DEPI'
+          tzsource%clongname  = 'condensation/deposition on ice'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'NEUT'
+          tzsource%clongname  = 'neutralization'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+
+        case ( 3 ) SV_ELEC
+          ! volumetric charge of rain drops
+          tzsource%cmnhname   = 'SFR'
+          tzsource%clongname  = 'spontaneous freezing'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'AUTO'
+          tzsource%clongname  = 'autoconversion into rain'
+          tzsource%lavailable = lwarm_ice
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'ACCR'
+          tzsource%clongname  = 'accretion of cloud droplets'
+          tzsource%lavailable = lwarm_ice
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'REVA'
+          tzsource%clongname  = 'rain evaporation'
+          tzsource%lavailable = lwarm_ice
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'ACC'
+          tzsource%clongname  = 'accretion of rain  on aggregates'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'CFRZ'
+          tzsource%clongname  = 'conversion freezing of rain'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'WETG'
+          tzsource%clongname  = 'wet growth of graupel'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'DRYG'
+          tzsource%clongname  = 'dry growth of graupel'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'GMLT'
+          tzsource%clongname  = 'graupel melting'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'WETH'
+          tzsource%clongname  = 'wet growth of hail'
+          tzsource%lavailable = hcloud == 'ICE4'
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'HMLT'
+          tzsource%clongname  = 'melting of hail'
+          tzsource%lavailable = hcloud == 'ICE4'
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'SEDI'
+          tzsource%clongname  = 'sedimentation'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'NEUT'
+          tzsource%clongname  = 'neutralization'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        case ( 4 ) SV_ELEC
+          ! volumetric charge of ice crystals
+          tzsource%cmnhname   = 'HON'
+          tzsource%clongname  = 'homogeneous nucleation'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'AGGS'
+          tzsource%clongname  = 'aggregation of snow'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'AUTS'
+          tzsource%clongname  = 'autoconversion of ice'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'CFRZ'
+          tzsource%clongname  = 'conversion freezing of rain'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'WETG'
+          tzsource%clongname  = 'wet growth of graupel'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'DRYG'
+          tzsource%clongname  = 'dry growth of graupel'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'WETH'
+          tzsource%clongname  = 'wet growth of hail'
+          tzsource%lavailable = hcloud == 'ICE4'
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'IMLT'
+          tzsource%clongname  = 'melting of ice'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'BERFI'
+          tzsource%clongname  = 'Bergeron-Findeisen'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'NIIS'
+          tzsource%clongname  = 'non-inductive charge separation due to ice-snow collisions'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'SEDI'
+          tzsource%clongname  = 'sedimentation'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'DEPI'
+          tzsource%clongname  = 'condensation/deposition on ice'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'NEUT'
+          tzsource%clongname  = 'neutralization'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+
+        case ( 5 ) SV_ELEC
+          ! volumetric charge of snow
+          tzsource%cmnhname   = 'DEPS'
+          tzsource%clongname  = 'deposition on snow'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'AGGS'
+          tzsource%clongname  = 'aggregation of snow'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'AUTS'
+          tzsource%clongname  = 'autoconversion of ice'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'RIM'
+          tzsource%clongname  = 'riming of cloud water'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'ACC'
+          tzsource%clongname  = 'accretion of rain on snow'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'CMEL'
+          tzsource%clongname  = 'conversion melting'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'WETG'
+          tzsource%clongname  = 'wet growth of graupel'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'DRYG'
+          tzsource%clongname  = 'dry growth of graupel'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'NIIS'
+          tzsource%clongname  = 'non-inductive charge separation due to ice-snow collisions'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'WETH'
+          tzsource%clongname  = 'wet growth of hail'
+          tzsource%lavailable = hcloud == 'ICE4'
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'SEDI'
+          tzsource%clongname  = 'sedimentation'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'NEUT'
+          tzsource%clongname  = 'neutralization'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+
+        case ( 6 ) SV_ELEC
+          ! volumetric charge of graupel
+          tzsource%cmnhname   = 'SFR'
+          tzsource%clongname  = 'spontaneous freezing'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'DEPG'
+          tzsource%clongname  = 'deposition on graupel'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'RIM'
+          tzsource%clongname  = 'riming of cloud water'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'ACC'
+          tzsource%clongname  = 'accretion of rain  on graupel'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'CMEL'
+          tzsource%clongname  = 'conversion melting'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'CFRZ'
+          tzsource%clongname  = 'conversion freezing of rain'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'WETG'
+          tzsource%clongname  = 'wet growth of graupel'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'DRYG'
+          tzsource%clongname  = 'dry growth of graupel'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'INCG'
+          tzsource%clongname  = 'inductive charge transfer between cloud droplets and graupel'
+          tzsource%lavailable = linductive
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'GMLT'
+          tzsource%clongname  = 'graupel melting'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'WETH'
+          tzsource%clongname  = 'wet growth of hail'
+          tzsource%lavailable = hcloud == 'ICE4'
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'SEDI'
+          tzsource%clongname  = 'sedimentation'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          tzsource%cmnhname   = 'NEUT'
+          tzsource%clongname  = 'neutralization'
+          tzsource%lavailable = .true.
+          call Budget_source_add( tbudgets(ibudget), tzsource )
+
+
+        case ( 7: ) SV_ELEC
+          if ( ( hcloud == 'ICE4' .and. ( jsv - nsv_elecbeg + 1 ) == 7 ) ) then
+            ! volumetric charge of hail
+            tzsource%cmnhname   = 'WETG'
+            tzsource%clongname  = 'wet growth of graupel'
+            tzsource%lavailable = .true.
+            call Budget_source_add( tbudgets(ibudget), tzsource )
+
+            tzsource%cmnhname   = 'WETH'
+            tzsource%clongname  = 'wet growth of hail'
+            tzsource%lavailable = .true.
+            call Budget_source_add( tbudgets(ibudget), tzsource )
+
+            tzsource%cmnhname   = 'HMLT'
+            tzsource%clongname  = 'melting of hail'
+            tzsource%lavailable = .true.
+            call Budget_source_add( tbudgets(ibudget), tzsource )
+
+            tzsource%cmnhname   = 'SEDI'
+            tzsource%clongname  = 'sedimentation'
+            tzsource%lavailable = .true.
+            call Budget_source_add( tbudgets(ibudget), tzsource )
+
+            tzsource%cmnhname   = 'NEUT'
+            tzsource%clongname  = 'neutralization'
+            tzsource%lavailable = .true.
+            call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          else if (      ( hcloud == 'ICE3' .and. ( jsv - nsv_elecbeg + 1 ) == 7 ) &
+                    .or. ( hcloud == 'ICE4' .and. ( jsv - nsv_elecbeg + 1 ) == 8 ) ) then
+            ! Negative ions (NSV_ELECEND case)
+            tzsource%cmnhname   = 'DRIFT'
+            tzsource%clongname  = 'ion drift motion'
+            tzsource%lavailable = .true.
+            call Budget_source_add( tbudgets(ibudget), tzsource )
+
+            tzsource%cmnhname   = 'CORAY'
+            tzsource%clongname  = 'cosmic ray source'
+            tzsource%lavailable = .true.
+            call Budget_source_add( tbudgets(ibudget), tzsource )
+
+            tzsource%cmnhname   = 'DEPS'
+            tzsource%clongname  = 'deposition on snow'
+            tzsource%lavailable = .true.
+            call Budget_source_add( tbudgets(ibudget), tzsource )
+
+            tzsource%cmnhname   = 'DEPG'
+            tzsource%clongname  = 'deposition on graupel'
+            tzsource%lavailable = .true.
+            call Budget_source_add( tbudgets(ibudget), tzsource )
+
+            tzsource%cmnhname   = 'REVA'
+            tzsource%clongname  = 'rain evaporation'
+            tzsource%lavailable = lwarm_ice
+            call Budget_source_add( tbudgets(ibudget), tzsource )
+
+            tzsource%cmnhname   = 'DEPI'
+            tzsource%clongname  = 'condensation/deposition on ice'
+            tzsource%lavailable = .true.
+            call Budget_source_add( tbudgets(ibudget), tzsource )
+
+            tzsource%cmnhname   = 'NEUT'
+            tzsource%clongname  = 'neutralization'
+            tzsource%lavailable = .true.
+            call Budget_source_add( tbudgets(ibudget), tzsource )
+
+          else
+            call Print_msg( NVERB_FATAL, 'BUD', 'Ini_budget', 'unknown electricity budget' )
+          end if
+
+      end select SV_ELEC
+
+
+    else if ( jsv >= nsv_lgbeg .and. jsv <= nsv_lgend ) then SV_VAR
+      !Lagrangian variables
+
+
+    else if ( jsv >= nsv_ppbeg .and. jsv <= nsv_ppend ) then SV_VAR
+      !Passive pollutants
+
+
+#ifdef MNH_FOREFIRE
+    else if ( jsv >= nsv_ffbeg .and. jsv <= nsv_ffend ) then SV_VAR
+      !Forefire
+
+#endif
+    else if ( jsv >= nsv_csbeg .and. jsv <= nsv_csend ) then SV_VAR
+      !Conditional sampling
+
+
+    else if ( jsv >= nsv_chembeg .and. jsv <= nsv_chemend ) then SV_VAR
+      !Chemical case
+      tzsource%cmnhname   = 'CHEM'
+      tzsource%clongname  = 'chemistry activity'
+      tzsource%lavailable = .true.
+      call Budget_source_add( tbudgets(ibudget), tzsource )
+
+      tzsource%cmnhname   = 'NEGA'
+      tzsource%clongname  = 'negativity correction'
+      tzsource%lavailable = .true.
+      call Budget_source_add( tbudgets(ibudget), tzsource )
+
+
+    else if ( jsv >= nsv_chicbeg .and. jsv <= nsv_chicend ) then SV_VAR
+      !Ice phase chemistry
+
+
+    else if ( jsv >= nsv_aerbeg .and. jsv <= nsv_aerend ) then SV_VAR
+      !Chemical aerosol case
+      tzsource%cmnhname   = 'NEGA'
+      tzsource%clongname  = 'negativity correction'
+      tzsource%lavailable = lorilam
+      call Budget_source_add( tbudgets(ibudget), tzsource )
+
+    else if ( jsv >= nsv_aerdepbeg .and. jsv <= nsv_aerdepend ) then SV_VAR
+      !Aerosol wet deposition
+
+    else if ( jsv >= nsv_dstbeg .and. jsv <= nsv_dstend ) then SV_VAR
+      !Dust
+
+    else if ( jsv >= nsv_dstdepbeg .and. jsv <= nsv_dstdepend ) then SV_VAR
+      !Dust wet deposition
+
+    else if ( jsv >= nsv_sltbeg .and. jsv <= nsv_sltend ) then SV_VAR
+      !Salt
+
+    else if ( jsv >= nsv_sltdepbeg .and. jsv <= nsv_sltdepend ) then SV_VAR
+      !Salt wet deposition
+
+    else if ( jsv >= nsv_snwbeg .and. jsv <= nsv_snwend ) then SV_VAR
+      !Snow
+      tzsource%cmnhname   = 'SNSUB'
+      tzsource%clongname  = 'blowing snow sublimation'
+      tzsource%lavailable = lblowsnow .and. lsnowsubl
+      call Budget_source_add( tbudgets(ibudget), tzsource )
+
+      tzsource%cmnhname   = 'SNSED'
+      tzsource%clongname  = 'blowing snow sedimentation'
+      tzsource%lavailable = lblowsnow
+      call Budget_source_add( tbudgets(ibudget), tzsource )
+
+
+    else if ( jsv >= nsv_lnoxbeg .and. jsv <= nsv_lnoxend ) then SV_VAR
+      !LiNOX passive tracer
+
+    else SV_VAR
+      call Print_msg( NVERB_FATAL, 'BUD', 'Ini_budget', 'unknown scalar variable' )
+    end if SV_VAR
+
+
+    call Sourcelist_sort_compact( tbudgets(ibudget) )
+
+    call Sourcelist_scan( tbudgets(ibudget), cbulist_rsv )
+  end if
+end do SV_BUDGETS
+
+call Ini_budget_groups( tbudgets, ibudim1, ibudim2, ibudim3 )
+
+if ( tbudgets(NBUDGET_U)  %lenabled ) call Sourcelist_nml_compact( tbudgets(NBUDGET_U),   cbulist_ru   )
+if ( tbudgets(NBUDGET_V)  %lenabled ) call Sourcelist_nml_compact( tbudgets(NBUDGET_V),   cbulist_rv   )
+if ( tbudgets(NBUDGET_W)  %lenabled ) call Sourcelist_nml_compact( tbudgets(NBUDGET_W),   cbulist_rw   )
+if ( tbudgets(NBUDGET_TH) %lenabled ) call Sourcelist_nml_compact( tbudgets(NBUDGET_TH),  cbulist_rth  )
+if ( tbudgets(NBUDGET_TKE)%lenabled ) call Sourcelist_nml_compact( tbudgets(NBUDGET_TKE), cbulist_rtke )
+if ( tbudgets(NBUDGET_RV) %lenabled ) call Sourcelist_nml_compact( tbudgets(NBUDGET_RV),  cbulist_rrv  )
+if ( tbudgets(NBUDGET_RC) %lenabled ) call Sourcelist_nml_compact( tbudgets(NBUDGET_RC),  cbulist_rrc  )
+if ( tbudgets(NBUDGET_RR) %lenabled ) call Sourcelist_nml_compact( tbudgets(NBUDGET_RR),  cbulist_rrr  )
+if ( tbudgets(NBUDGET_RI) %lenabled ) call Sourcelist_nml_compact( tbudgets(NBUDGET_RI),  cbulist_rri  )
+if ( tbudgets(NBUDGET_RS) %lenabled ) call Sourcelist_nml_compact( tbudgets(NBUDGET_RS),  cbulist_rrs  )
+if ( tbudgets(NBUDGET_RG) %lenabled ) call Sourcelist_nml_compact( tbudgets(NBUDGET_RG),  cbulist_rrg  )
+if ( tbudgets(NBUDGET_RH) %lenabled ) call Sourcelist_nml_compact( tbudgets(NBUDGET_RH),  cbulist_rrh  )
+if ( lbu_rsv )                        call Sourcelist_sv_nml_compact( cbulist_rsv  )
+end subroutine Ini_budget
+
+
+subroutine Budget_source_add( tpbudget, tpsource, odonotinit, ooverwrite )
+  use modd_budget, only: tbudgetdata, tbusourcedata
+
+  type(tbudgetdata),   intent(inout) :: tpbudget
+  type(tbusourcedata), intent(in)    :: tpsource ! Metadata basis
+  logical, optional,   intent(in)    :: odonotinit
+  logical, optional,   intent(in)    :: ooverwrite
+
+  character(len=4) :: ynum
+  integer          :: isourcenumber
+
+  call Print_msg( NVERB_DEBUG, 'BUD', 'Budget_source_add', 'called for ' // Trim( tpbudget%cname ) &
+                  // ': ' // Trim( tpsource%cmnhname ) )
+
+  isourcenumber = tpbudget%nsources + 1
+  if ( isourcenumber > tpbudget%nsourcesmax ) then
+    Write( ynum, '( i4 )' ) tpbudget%nsourcesmax
+    cmnhmsg(1) = 'Insufficient max number of source terms (' // Trim(ynum) // ') for budget ' // Trim( tpbudget%cname )
+    cmnhmsg(2) = 'Please increaze value of parameter NSOURCESMAX'
+    call Print_msg( NVERB_FATAL, 'BUD', 'Budget_source_add' )
+  else
+    tpbudget%nsources = tpbudget%nsources + 1
+  end if
+
+  ! Copy metadata from provided tpsource
+  ! Modifications to source term metadata done with the other dummy arguments
+  tpbudget%tsources(isourcenumber) = tpsource
+
+  if ( present( odonotinit ) ) tpbudget%tsources(isourcenumber)%ldonotinit = odonotinit
+
+  if ( present( ooverwrite ) ) tpbudget%tsources(isourcenumber)%loverwrite = ooverwrite
+end subroutine Budget_source_add
+
+
+subroutine Ini_budget_groups( tpbudgets, kbudim1, kbudim2, kbudim3 )
+  use modd_budget,     only: tbudgetdata
+  use modd_field,      only: TYPEINT, TYPEREAL
+  use modd_parameters, only: NMNHNAMELGTMAX, NSTDNAMELGTMAX, NLONGNAMELGTMAX, NUNITLGTMAX, NCOMMENTLGTMAX
+
+  use mode_tools,  only: Quicksort
+
+  type(tbudgetdata), dimension(:), intent(inout) :: tpbudgets
+  integer,                         intent(in)    :: kbudim1
+  integer,                         intent(in)    :: kbudim2
+  integer,                         intent(in)    :: kbudim3
+
+  character(len=NMNHNAMELGTMAX)      :: ymnhname
+  character(len=NSTDNAMELGTMAX)      :: ystdname
+  character(len=NLONGNAMELGTMAX)     :: ylongname
+  character(len=NUNITLGTMAX)         :: yunits
+  character(len=NCOMMENTLGTMAX)      :: ycomment
+  integer                            :: ji, jj, jk
+  integer                            :: isources ! Number of source terms in a budget
+  integer                            :: inbgroups ! Number of budget groups
+  integer                            :: ival
+  integer                            :: icount
+  integer                            :: ivalmax, ivalmin
+  integer                            :: igrid
+  integer                            :: itype
+  integer                            :: idims
+  integer, dimension(:), allocatable :: igroups ! Temporary array to store sorted group numbers
+  integer, dimension(:), allocatable :: ipos    ! Temporary array to store initial position of group numbers
+  real                               :: zval
+  real                               :: zvalmax, zvalmin
+
+  call Print_msg( NVERB_DEBUG, 'BUD', 'Ini_budget_groups', 'called' )
+
+  BUDGETS: do ji = 1, size( tpbudgets )
+    ENABLED: if ( tpbudgets(ji)%lenabled ) then
+      isources = size( tpbudgets(ji)%tsources )
+      do jj = 1, isources
+        ! Check if ngroup is an allowed value
+        if ( tpbudgets(ji)%tsources(jj)%ngroup < 0 ) then
+          call Print_msg( NVERB_ERROR, 'BUD', 'Ini_budget', 'negative group value is not allowed' )
+          tpbudgets(ji)%tsources(jj)%ngroup = 0
+        end if
+
+        if ( tpbudgets(ji)%tsources(jj)%ngroup > 0 ) tpbudgets(ji)%tsources(jj)%lenabled = .true.
+      end do
+
+      !Count the number of groups of source terms
+      !ngroup=1 is for individual entries, >1 values are groups
+      allocate( igroups(isources ) )
+      allocate( ipos   (isources ) )
+      igroups(:) = tpbudgets(ji)%tsources(:)%ngroup
+      ipos(:) = [ ( jj, jj = 1, isources ) ]
+
+      !Sort the group list number
+      call Quicksort( igroups, 1, isources, ipos )
+
+      !Count the number of different groups
+      !and renumber the entries (from 1 to inbgroups)
+      inbgroups = 0
+      ival = igroups(1)
+      if ( igroups(1) /= 0 ) then
+        inbgroups = 1
+        igroups(1) = inbgroups
+      end if
+      do jj = 2, isources
+        if ( igroups(jj) == 1 ) then
+          inbgroups = inbgroups + 1
+          igroups(jj) = inbgroups
+        else if ( igroups(jj) > 0 ) then
+          if ( igroups(jj) /= ival ) then
+            ival = igroups(jj)
+            inbgroups = inbgroups + 1
+          end if
+          igroups(jj) = inbgroups
+        end if
+      end do
+
+      !Write the igroups values to the budget structure
+      do jj = 1, isources
+        tpbudgets(ji)%tsources(ipos(jj))%ngroup = igroups(jj)
+      end do
+
+      !Allocate the group structure + populate it
+      tpbudgets(ji)%ngroups = inbgroups
+      allocate( tpbudgets(ji)%tgroups(inbgroups) )
+
+      do jj = 1, inbgroups
+        !Search the list of sources for each group
+        !not the most efficient algorithm but do the job
+        icount = 0
+        do jk = 1, isources
+          if ( tpbudgets(ji)%tsources(jk)%ngroup == jj ) then
+            icount = icount + 1
+            ipos(icount) = jk !ipos is reused as a temporary work array
+          end if
+        end do
+        tpbudgets(ji)%tgroups(jj)%nsources = icount
+
+        allocate( tpbudgets(ji)%tgroups(jj)%nsourcelist(icount) )
+        tpbudgets(ji)%tgroups(jj)%nsourcelist(:) = ipos(1 : icount)
+
+        ! Set the name of the field
+        ymnhname = tpbudgets(ji)%tsources(ipos(1))%cmnhname
+        do jk = 2, tpbudgets(ji)%tgroups(jj)%nsources
+          ymnhname = trim( ymnhname ) // '_' // trim( tpbudgets(ji)%tsources(ipos(jk))%cmnhname )
+        end do
+        tpbudgets(ji)%tgroups(jj)%cmnhname = ymnhname
+
+        ! Set the standard name (CF convention)
+        if ( tpbudgets(ji)%tgroups(jj)%nsources == 1 ) then
+          ystdname = tpbudgets(ji)%tsources(ipos(1))%cstdname
+        else
+          ! The CF standard name is probably wrong if combining several source terms => set to ''
+          ystdname = ''
+        end if
+        tpbudgets(ji)%tgroups(jj)%cstdname = ystdname
+
+        ! Set the long name (CF convention)
+        ylongname = tpbudgets(ji)%tsources(ipos(1))%clongname
+        do jk = 2, tpbudgets(ji)%tgroups(jj)%nsources
+          ylongname = trim( ylongname ) // ' + ' // tpbudgets(ji)%tsources(ipos(jk))%clongname
+        end do
+        tpbudgets(ji)%tgroups(jj)%clongname = ylongname
+
+        ! Set the units
+        yunits = tpbudgets(ji)%tsources(ipos(1))%cunits
+        do jk = 2, tpbudgets(ji)%tgroups(jj)%nsources
+          if ( trim( yunits ) /= trim( tpbudgets(ji)%tsources(ipos(jk))%cunits ) ) then
+            call Print_msg( NVERB_WARNING, 'BUD', 'Ini_budget',                               &
+                            'incompatible units for the different source terms of the group ' &
+                            //trim( tpbudgets(ji)%tgroups(jj)%cmnhname ) )
+            yunits = 'unknown'
+          end if
+        end do
+        tpbudgets(ji)%tgroups(jj)%cunits = yunits
+
+        ! Set the comment
+        ! It is composed of the source comment followed by the clongnames of the different sources
+        ycomment = trim( tpbudgets(ji)%tsources(ipos(1))%ccomment ) // ': '// trim( tpbudgets(ji)%tsources(ipos(1))%clongname )
+        do jk = 2, tpbudgets(ji)%tgroups(jj)%nsources
+          ycomment = trim( ycomment ) // ', ' // trim( tpbudgets(ji)%tsources(ipos(jk))%clongname )
+        end do
+        ycomment = trim( ycomment ) // ' source term'
+        if ( tpbudgets(ji)%tgroups(jj)%nsources > 1 ) ycomment = trim( ycomment ) // 's'
+        tpbudgets(ji)%tgroups(jj)%ccomment = ycomment
+
+        ! Set the Arakawa grid
+        igrid = tpbudgets(ji)%tsources(ipos(1))%ngrid
+        do jk = 2, tpbudgets(ji)%tgroups(jj)%nsources
+          if ( igrid /= tpbudgets(ji)%tsources(ipos(jk))%ngrid ) then
+            call Print_msg( NVERB_WARNING, 'BUD', 'Ini_budget',                                             &
+                            'different Arakawa grid positions for the different source terms of the group ' &
+                            //trim( tpbudgets(ji)%tgroups(jj)%cmnhname ) )
+          end if
+        end do
+        tpbudgets(ji)%tgroups(jj)%ngrid = igrid
+
+        ! Set the data type
+        itype = tpbudgets(ji)%tsources(ipos(1))%ntype
+        do jk = 2, tpbudgets(ji)%tgroups(jj)%nsources
+          if ( itype /= tpbudgets(ji)%tsources(ipos(jk))%ntype ) then
+            call Print_msg( NVERB_FATAL, 'BUD', 'Ini_budget',                                             &
+                            'incompatible data types for the different source terms of the group ' &
+                            //trim( tpbudgets(ji)%tgroups(jj)%cmnhname ) )
+          end if
+        end do
+        tpbudgets(ji)%tgroups(jj)%ntype = itype
+
+        ! Set the number of dimensions
+        idims = tpbudgets(ji)%tsources(ipos(1))%ndims
+        do jk = 2, tpbudgets(ji)%tgroups(jj)%nsources
+          if ( idims /= tpbudgets(ji)%tsources(ipos(jk))%ndims ) then
+            call Print_msg( NVERB_FATAL, 'BUD', 'Ini_budget',                                             &
+                            'incompatible number of dimensions for the different source terms of the group ' &
+                            //trim( tpbudgets(ji)%tgroups(jj)%cmnhname ) )
+          end if
+        end do
+        tpbudgets(ji)%tgroups(jj)%ndims = idims
+
+        ! Set the fill values
+        if ( tpbudgets(ji)%tgroups(jj)%ntype == TYPEINT ) then
+          ival = tpbudgets(ji)%tsources(ipos(1))%nfillvalue
+          do jk = 2, tpbudgets(ji)%tgroups(jj)%nsources
+            if ( ival /= tpbudgets(ji)%tsources(ipos(jk))%nfillvalue ) then
+              call Print_msg( NVERB_WARNING, 'BUD', 'Ini_budget',                                             &
+                              'different (integer) fill values for the different source terms of the group ' &
+                              //trim( tpbudgets(ji)%tgroups(jj)%cmnhname ) )
+            end if
+          end do
+          tpbudgets(ji)%tgroups(jj)%nfillvalue = ival
+        end if
+
+        if ( tpbudgets(ji)%tgroups(jj)%ntype == TYPEREAL ) then
+          zval = tpbudgets(ji)%tsources(ipos(1))%xfillvalue
+          do jk = 2, tpbudgets(ji)%tgroups(jj)%nsources
+            if ( zval /= tpbudgets(ji)%tsources(ipos(jk))%xfillvalue ) then
+              call Print_msg( NVERB_WARNING, 'BUD', 'Ini_budget',                                             &
+                              'different (real) fill values for the different source terms of the group ' &
+                              //trim( tpbudgets(ji)%tgroups(jj)%cmnhname ) )
+            end if
+          end do
+          tpbudgets(ji)%tgroups(jj)%xfillvalue = zval
+        end if
+
+        ! Set the valid min/max values
+        ! Take the min or max of all the sources
+        ! Maybe, it would be better to take the sum? (if same sign, if not already the maximum allowed value for this type)
+        if ( tpbudgets(ji)%tgroups(jj)%ntype == TYPEINT ) then
+          ivalmin = tpbudgets(ji)%tsources(ipos(1))%nvalidmin
+          ivalmax = tpbudgets(ji)%tsources(ipos(1))%nvalidmax
+          do jk = 2, tpbudgets(ji)%tgroups(jj)%nsources
+            ivalmin = min( ivalmin, tpbudgets(ji)%tsources(ipos(jk))%nvalidmin )
+            ivalmax = max( ivalmax, tpbudgets(ji)%tsources(ipos(jk))%nvalidmax )
+          end do
+          tpbudgets(ji)%tgroups(jj)%nvalidmin = ivalmin
+          tpbudgets(ji)%tgroups(jj)%nvalidmax = ivalmax
+        end if
+
+        if ( tpbudgets(ji)%tgroups(jj)%ntype == TYPEREAL ) then
+          zvalmin = tpbudgets(ji)%tsources(ipos(1))%xvalidmin
+          zvalmax = tpbudgets(ji)%tsources(ipos(1))%xvalidmax
+          do jk = 2, tpbudgets(ji)%tgroups(jj)%nsources
+            zvalmin = min( zvalmin, tpbudgets(ji)%tsources(ipos(jk))%xvalidmin )
+            zvalmax = max( zvalmax, tpbudgets(ji)%tsources(ipos(jk))%xvalidmax )
+          end do
+          tpbudgets(ji)%tgroups(jj)%xvalidmin = zvalmin
+          tpbudgets(ji)%tgroups(jj)%xvalidmax = zvalmax
+        end if
+
+        allocate( tpbudgets(ji)%tgroups(jj)%xdata(kbudim1, kbudim2, kbudim3 ) )
+        tpbudgets(ji)%tgroups(jj)%xdata(:, :, :) = 0.
+      end do
+
+      deallocate( igroups )
+      deallocate( ipos )
+
+      !Check that a group does not contain more than 1 source term with ldonotinit=.true.
+      do jj = 1, inbgroups
+        if ( tpbudgets(ji)%tgroups(jj)%nsources > 1 ) then
+          do jk = 1, tpbudgets(ji)%tgroups(jj)%nsources
+            if ( tpbudgets(ji)%tsources(tpbudgets(ji)%tgroups(jj)%nsourcelist(jk) )%ldonotinit ) &
+              call Print_msg( NVERB_FATAL, 'BUD', 'Ini_budget', &
+                              'a group with more than 1 source term may not contain sources with ldonotinit=true' )
+            if ( tpbudgets(ji)%tsources(tpbudgets(ji)%tgroups(jj)%nsourcelist(jk) )%loverwrite ) &
+              call Print_msg( NVERB_FATAL, 'BUD', 'Ini_budget', &
+                              'a group with more than 1 source term may not contain sources with loverwrite=true' )
+          end do
+        end if
+      end do
+
+    end if ENABLED
+  end do BUDGETS
+
+end subroutine Ini_budget_groups
+
+
+subroutine Sourcelist_sort_compact( tpbudget )
+  !Sort the list of sources to put the non-available source terms at the end of the list
+  !and compact the list
+  use modd_budget, only: tbudgetdata, tbusourcedata
+
+  type(tbudgetdata), intent(inout) :: tpbudget
+
+  integer                                        :: ji
+  integer                                        :: isrc_avail, isrc_notavail
+  type(tbusourcedata), dimension(:), allocatable :: tzsources_avail
+  type(tbusourcedata), dimension(:), allocatable :: tzsources_notavail
+
+  isrc_avail    = 0
+  isrc_notavail = 0
+
+  Allocate( tzsources_avail   (tpbudget%nsources) )
+  Allocate( tzsources_notavail(tpbudget%nsources) )
+
+  !Separate source terms available or not during the execution
+  !(based on the criteria provided to Budget_source_add and stored in lavailable field)
+  do ji = 1, tpbudget%nsources
+    if ( tpbudget%tsources(ji)%lavailable ) then
+      isrc_avail = isrc_avail + 1
+      tzsources_avail(isrc_avail) = tpbudget%tsources(ji)
+    else
+      isrc_notavail = isrc_notavail + 1
+      tzsources_notavail(isrc_notavail) = tpbudget%tsources(ji)
+    end if
+  end do
+
+  !Reallocate/compact the source list
+  if ( Allocated( tpbudget%tsources ) ) Deallocate( tpbudget%tsources )
+  Allocate( tpbudget%tsources( tpbudget%nsources ) )
+
+  tpbudget%nsourcesmax = tpbudget%nsources
+  !Limit the number of sources to the available list
+  tpbudget%nsources    = isrc_avail
+
+  !Fill the source list beginning with the available sources and finishing with the non-available ones
+  do ji = 1, isrc_avail
+    tpbudget%tsources(ji) = tzsources_avail(ji)
+  end do
+
+  do ji = 1, isrc_notavail
+    tpbudget%tsources(isrc_avail + ji) = tzsources_notavail(ji)
+  end do
+
+end subroutine Sourcelist_sort_compact
+
+
+subroutine Sourcelist_scan( tpbudget, hbulist )
+  use modd_budget, only: tbudgetdata
+
+  type(tbudgetdata),              intent(inout) :: tpbudget
+  character(len=*), dimension(:), intent(in)    :: hbulist
+
+  character(len=:), allocatable :: yline
+  character(len=:), allocatable :: ysrc
+  character(len=:), dimension(:), allocatable :: ymsg
+  integer                       :: idx
+  integer                       :: igroup
+  integer                       :: igroup_idx
+  integer                       :: ipos
+  integer                       :: istart
+  integer                       :: ji
+
+  istart = 1
+
+  ! Case 'LIST_AVAIL': list all the available source terms
+  if ( Size( hbulist ) > 0 ) then
+    if ( Trim( hbulist(1) ) == 'LIST_AVAIL' ) then
+      Allocate( character(len=65) :: ymsg(tpbudget%nsources + 1) )
+      ymsg(1) = '---------------------------------------------------------------------'
+      ymsg(2) = 'Available source terms for budget ' // Trim( tpbudget%cname )
+      Write( ymsg(3), '( A32, " ", A32 )' ) 'Name', 'Long name'
+      idx = 3
+      do ji = 1, tpbudget%nsources
+        if ( All( tpbudget%tsources(ji)%cmnhname /= [ 'INIF' , 'ENDF', 'AVEF' ] ) ) then
+          idx = idx + 1
+          Write( ymsg(idx), '( A32, " ", A32 )' ) tpbudget%tsources(ji)%cmnhname, tpbudget%tsources(ji)%clongname
+        end if
+      end do
+      ymsg(tpbudget%nsources + 1 ) = '---------------------------------------------------------------------'
+      call Print_msg_multi( NVERB_WARNING, 'BUD', 'Sourcelist_scan', ymsg )
+      !To not read the 1st line again
+      istart = 2
+    end if
+  end if
+
+  ! Case 'LIST_ALL': list all the source terms
+  if ( Size( hbulist ) > 0 ) then
+    if ( Trim( hbulist(1) ) == 'LIST_ALL' ) then
+      Allocate( character(len=65) :: ymsg(tpbudget%nsourcesmax + 1) )
+      ymsg(1) = '---------------------------------------------------------------------'
+      ymsg(2) = 'Source terms for budget ' // Trim( tpbudget%cname )
+      Write( ymsg(3), '( A32, " ", A32 )' ) 'Name', 'Long name'
+      idx = 3
+      do ji = 1, tpbudget%nsourcesmax
+        if ( All( tpbudget%tsources(ji)%cmnhname /= [ 'INIF' , 'ENDF', 'AVEF' ] ) ) then
+          idx = idx + 1
+          Write( ymsg(idx), '( A32, " ", A32 )' ) tpbudget%tsources(ji)%cmnhname, tpbudget%tsources(ji)%clongname
+        end if
+      end do
+      ymsg(tpbudget%nsourcesmax + 1 ) = '---------------------------------------------------------------------'
+      call Print_msg_multi( NVERB_WARNING, 'BUD', 'Sourcelist_scan', ymsg )
+      !To not read the 1st line again
+      istart = 2
+    end if
+  end if
+
+  ! Case 'ALL': enable all available source terms
+  if ( Size( hbulist ) > 0 ) then
+    if ( Trim( hbulist(1) ) == 'ALL' ) then
+      do ji = 1, tpbudget%nsources
+        tpbudget%tsources(ji)%ngroup = 1
+      end do
+      return
+    end if
+  end if
+
+  !Always enable INIF, ENDF and AVEF terms
+  ipos = Source_find( tpbudget, 'INIF' )
+  if ( ipos < 1 ) call Print_msg( NVERB_FATAL, 'BUD', 'Sourcelist_scan', 'source term ' // Trim( tpbudget%cname ) &
+                            // ': INIF not found' )
+  tpbudget%tsources(ipos)%ngroup = 1
+
+  ipos = Source_find( tpbudget, 'ENDF' )
+  if ( ipos < 1 ) call Print_msg( NVERB_FATAL, 'BUD', 'Sourcelist_scan', 'source term ' // Trim( tpbudget%cname ) &
+                            // ': ENDF not found' )
+  tpbudget%tsources(ipos)%ngroup = 1
+
+  ipos = Source_find( tpbudget, 'AVEF' )
+  if ( ipos < 1 ) call Print_msg( NVERB_FATAL, 'BUD', 'Sourcelist_scan', 'source term ' // Trim( tpbudget%cname ) &
+                            // ': AVEF not found' )
+  tpbudget%tsources(ipos)%ngroup = 1
+
+  !igroup_idx start at 2 because 1 is reserved for individually stored source terms
+  igroup_idx = 2
+
+  do ji = istart, Size( hbulist )
+    if ( Len_trim( hbulist(ji) ) > 0 ) then
+      ! Scan the line and separate the different sources (separated by + signs)
+      yline = Trim(hbulist(ji))
+
+      idx = Index( yline, '+' )
+      if ( idx < 1 ) then
+        igroup = 1
+      else
+        igroup = igroup_idx
+        igroup_idx = igroup_idx + 1
+      end if
+
+      do
+        idx = Index( yline, '+' )
+        if ( idx < 1 ) then
+          ysrc = yline
+        else
+          ysrc = yline(1 : idx - 1)
+          yline = yline(idx + 1 :)
+        end if
+
+        !Check if the source is known
+        if ( Len_trim( ysrc ) > 0 ) then
+          ipos = Source_find( tpbudget, ysrc )
+
+          if ( ipos > 0 ) then
+            call Print_msg( NVERB_DEBUG, 'BUD', 'Sourcelist_scan', 'source term ' // Trim( tpbudget%cname ) &
+                            // ': ' // ysrc // ' found' )
+
+            if ( .not.  tpbudget%tsources(ipos)%lavailable ) then
+              call Print_msg( NVERB_WARNING, 'BUD', 'Sourcelist_scan', 'source term ' // Trim( tpbudget%cname ) &
+                              // ': ' // ysrc // ' not available' )
+              tpbudget%tsources(ipos)%ngroup = 0
+            else
+              tpbudget%tsources(ipos)%ngroup = igroup
+            end if
+          else
+            call Print_msg( NVERB_ERROR, 'BUD', 'Sourcelist_scan', 'source term ' // Trim( tpbudget%cname ) &
+                            // ': ' // ysrc // ' not found' )
+          end if
+        end if
+
+        if ( idx < 1 ) exit
+      end do
+    end if
+  end do
+end subroutine Sourcelist_scan
+
+
+subroutine Sourcelist_nml_compact( tpbudget, hbulist )
+  !This subroutine reduce the size of the hbulist to the minimum
+  !The list is generated from the group list
+  use modd_budget, only: NBULISTMAXLEN, tbudgetdata
+
+  type(tbudgetdata),                                       intent(in)    :: tpbudget
+  character(len=NBULISTMAXLEN), dimension(:), allocatable, intent(inout) :: hbulist
+
+  integer :: idx
+  integer :: isource
+  integer :: jg
+  integer :: js
+
+  if ( Allocated( hbulist ) ) Deallocate( hbulist )
+
+  if ( tpbudget%ngroups < 3 ) then
+    call Print_msg( NVERB_ERROR, 'BUD', 'Sourcelist_nml_compact', 'ngroups is too small' )
+    return
+  end if
+
+  Allocate( character(len=NBULISTMAXLEN) :: hbulist(tpbudget%ngroups - 3) )
+  hbulist(:) = ''
+
+  idx = 0
+  do jg = 1, tpbudget%ngroups
+    if ( tpbudget%tgroups(jg)%nsources < 1 ) then
+      call Print_msg( NVERB_ERROR, 'BUD', 'Sourcelist_nml_compact', 'no source for group' )
+      cycle
+    end if
+
+    !Do not put 'INIF', 'ENDF', 'AVEF' in hbulist because their presence is automatic if the corresponding budget is enabled
+    isource = tpbudget%tgroups(jg)%nsourcelist(1)
+    if ( Any( tpbudget%tsources(isource)%cmnhname ==  [ 'INIF', 'ENDF', 'AVEF' ] ) ) cycle
+
+    idx = idx + 1
+#if 0
+    !Do not do this way because the group cmnhname may be truncated (NMNHNAMELGTMAX is smaller than NBULISTMAXLEN)
+    !and the name separator is different ('_')
+    hbulist(idx) = Trim( tpbudget%tgroups(jg)%cmnhname )
+#else
+    do js = 1, tpbudget%tgroups(jg)%nsources
+      isource = tpbudget%tgroups(jg)%nsourcelist(js)
+      hbulist(idx) = Trim( hbulist(idx) ) // Trim( tpbudget%tsources(isource)%cmnhname )
+      if ( js < tpbudget%tgroups(jg)%nsources ) hbulist(idx) = Trim( hbulist(idx) ) // '+'
+    end do
+#endif
+  end do
+end subroutine Sourcelist_nml_compact
+
+
+subroutine Sourcelist_sv_nml_compact( hbulist )
+  !This subroutine reduce the size of the hbulist
+  !For SV variables the reduction is simpler than for other variables
+  !because it is too complex to do this cleanly (the enabled source terms are different for each scalar variable)
+  use modd_budget, only: NBULISTMAXLEN, tbudgetdata
+
+  character(len=*), dimension(:), allocatable, intent(inout) :: hbulist
+
+  character(len=NBULISTMAXLEN), dimension(:), allocatable :: ybulist_new
+  integer :: ilines
+  integer :: ji
+
+  ilines = 0
+  do ji = 1, Size( hbulist )
+    if ( Len_trim(hbulist(ji)) > 0 ) ilines = ilines + 1
+  end do
+
+  Allocate( ybulist_new(ilines) )
+
+  ilines = 0
+  do ji = 1, Size( hbulist )
+    if ( Len_trim(hbulist(ji)) > 0 ) then
+      ilines = ilines + 1
+      ybulist_new(ilines) = Trim( hbulist(ji) )
+    end if
+  end do
+
+  call Move_alloc( from = ybulist_new, to = hbulist )
+end subroutine Sourcelist_sv_nml_compact
+
+
+pure function Source_find( tpbudget, hsource ) result( ipos )
+  use modd_budget,     only: tbudgetdata
+
+  type(tbudgetdata), intent(in) :: tpbudget
+  character(len=*),  intent(in) :: hsource
+  integer :: ipos
+
+  integer :: ji
+  logical :: gfound
+
+  ipos = -1
+  gfound = .false.
+  do ji = 1, tpbudget%nsourcesmax
+    if ( Trim( hsource ) == Trim ( tpbudget%tsources(ji)%cmnhname ) ) then
+      gfound = .true.
+      ipos = ji
+      exit
+    end if
+  end do
+
+end function Source_find
+
+end module mode_ini_budget
diff --git a/src/mesonh/ext/ini_nsv.f90 b/src/mesonh/ext/ini_nsv.f90
new file mode 100644
index 0000000000000000000000000000000000000000..d1e5c5aaa2ccfd80acb3f95457177b15614e7890
--- /dev/null
+++ b/src/mesonh/ext/ini_nsv.f90
@@ -0,0 +1,1317 @@
+!MNH_LIC Copyright 2001-2023 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
+!MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
+!     ###################
+      MODULE MODI_INI_NSV
+!     ###################
+INTERFACE 
+!
+  SUBROUTINE INI_NSV(KMI)
+  INTEGER, INTENT(IN)            :: KMI ! model index
+  END SUBROUTINE INI_NSV
+!
+END INTERFACE
+!
+END MODULE MODI_INI_NSV
+!
+!
+!     ###########################
+      SUBROUTINE INI_NSV(KMI)
+!     ###########################
+!
+!!****   *INI_NSV* - compute NSV_* values and indices for model KMI
+!!
+!!    PURPOSE
+!!    -------
+!     
+!
+!     
+!!**  METHOD
+!!    ------
+!!
+!!    This routine is called from any routine which stores values in 
+!!    the first model module (for example READ_EXSEG).
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!      Module MODD_NSV     : contains NSV_A array variable
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!      D. Gazen              * LA *
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original   01/02/01
+!!      Modification   29/11/02  (Pinty)  add SV for C3R5 and ELEC
+!!      Modification   01/2004   (Masson) add scalar names
+!!      Modification   03/2006   (O.Geoffroy) add KHKO scheme
+!!      Modification   04/2007   (Leriche) add SV for aqueous chemistry
+!!      M. Chong       26/01/10   Add Small ions
+!!      Modification   07/2010   (Leriche) add SV for ice chemistry
+!!      X.Pialat & J.Escobar 11/2012 remove deprecated line NSV_A(KMI) = ISV
+!!      Modification   15/02/12  (Pialat/Tulet) Add SV for ForeFire scalars
+!!                     03/2013   (C.Lac) add supersaturation as 
+!!                               the 4th C2R2 scalar variable
+!!       J.escobar     04/08/2015 suit Pb with writ_lfin JSA increment , modif in ini_nsv to have good order initialization
+!!      Modification    01/2016  (JP Pinty) Add LIMA and LUSECHEM condition
+!!      Modification    07/2017  (V. Vionnet) Add blowing snow condition
+!  P. Wautelet 09/03/2021: move some chemistry initializations to ini_nsv
+!  P. Wautelet 10/03/2021: move scalar variable name initializations to ini_nsv
+!  P. Wautelet 30/03/2021: move NINDICE_CCN_IMM and NIMM initializations from init_aerosol_properties to ini_nsv
+!  B. Vie         06/2021: add prognostic supersaturation for LIMA
+!  P. Wautelet 26/11/2021: initialize TSVLIST_A
+!  A. Costes      12/2021: smoke tracer for fire model
+!  P. Wautelet 14/01/2022: add CSV_CHEM_LIST(_A) to store the list of all chemical variables
+!                          + NSV_CHEM_LIST(_A) the size of the list
+!-------------------------------------------------------------------------------
+!
+!*       0.   DECLARATIONS
+!             ------------
+!
+USE MODD_BLOWSNOW,        ONLY: CSNOWNAMES, LBLOWSNOW, NBLOWSNOW3D, YPSNOW_INI
+USE MODD_CH_AEROSOL
+! USE MODD_CH_AEROSOL,      ONLY: CAERONAMES, CDEAERNAMES, JPMODE, LAERINIT, LDEPOS_AER, LORILAM, &
+!                                 LVARSIGI, LVARSIGJ, NCARB, NM6_AER, NSOA, NSP
+USE MODD_CH_M9_n,         ONLY: CICNAMES, CNAMES, NEQ, NEQAQ
+USE MODD_CH_MNHC_n,       ONLY: LCH_PH, LUSECHEM, LUSECHAQ, LUSECHIC, CCH_SCHEME, LCH_CONV_LINOX
+USE MODD_CONDSAMP,        ONLY: LCONDSAMP, NCONDSAMP
+USE MODD_CONF,            ONLY: LLG, CPROGRAM, NVERB
+USE MODD_CST,             ONLY: XMNH_TINY
+USE MODD_DIAG_FLAG,       ONLY: LCHEMDIAG, LCHAQDIAG
+USE MODD_DUST,            ONLY: CDEDSTNAMES, CDUSTNAMES, JPDUSTORDER, LDEPOS_DST, LDSTINIT, LDSTPRES, LDUST, &
+                                LRGFIX_DST, LVARSIG, NMODE_DST, YPDEDST_INI, YPDUST_INI
+USE MODD_DYN_n,           ONLY: LHORELAX_SV,LHORELAX_SVC2R2,LHORELAX_SVC1R3,   &
+                                LHORELAX_SVFIRE, LHORELAX_SVLIMA,              &
+                                LHORELAX_SVELEC,LHORELAX_SVCHEM,LHORELAX_SVLG, &
+                                LHORELAX_SVDST,LHORELAX_SVAER, LHORELAX_SVSLT, &
+                                LHORELAX_SVPP,LHORELAX_SVCS, LHORELAX_SVCHIC,  &
+                                LHORELAX_SVSNW
+#ifdef MNH_FOREFIRE
+USE MODD_DYN_n,           ONLY: LHORELAX_SVFF
+#endif
+USE MODD_ELEC_DESCR,      ONLY: LLNOX_EXPLICIT
+USE MODD_ELEC_DESCR,      ONLY: CELECNAMES
+USE MODD_FIELD,           ONLY: TFIELDMETADATA, TYPEREAL
+USE MODD_FIRE_n
+#ifdef MNH_FOREFIRE
+USE MODD_FOREFIRE
+#endif
+USE MODD_ICE_C1R3_DESCR,  ONLY: C1R3NAMES
+USE MODD_LG,              ONLY: CLGNAMES, XLG1MIN, XLG2MIN, XLG3MIN
+USE MODD_LUNIT_n,         ONLY: TLUOUT
+USE MODD_NSV
+USE MODD_PARAM_C2R2,      ONLY: LSUPSAT
+USE MODD_PARAMETERS,      ONLY: NCOMMENTLGTMAX, NLONGNAMELGTMAX, NUNITLGTMAX
+USE MODD_PARAM_LIMA,      ONLY: NINDICE_CCN_IMM, NIMM, NMOD_CCN, LSCAV, LAERO_MASS, &
+                                NMOD_IFN, NMOD_IMM, LHHONI, &
+                                LSPRO,  &
+                                NMOM_C, NMOM_R, NMOM_I, NMOM_S, NMOM_G, NMOM_H
+USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES
+USE MODD_PARAM_LIMA_WARM, ONLY: CAERO_MASS, CLIMA_WARM_NAMES
+USE MODD_PARAM_n,         ONLY: CCLOUD, CELEC
+USE MODD_PASPOL,          ONLY: LPASPOL, NRELEASE
+USE MODD_PREP_REAL,       ONLY: XT_LS
+USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
+USE MODD_SALT,            ONLY: CSALTNAMES, CDESLTNAMES, JPSALTORDER, &
+                                LRGFIX_SLT, LSALT, LSLTINIT, LSLTPRES, LDEPOS_SLT, LVARSIG_SLT, NMODE_SLT, YPDESLT_INI, YPSALT_INI
+
+USE MODE_MSG
+
+USE MODI_CH_AER_INIT_SOA,  ONLY: CH_AER_INIT_SOA
+USE MODI_CH_INIT_SCHEME_n, ONLY: CH_INIT_SCHEME_n
+USE MODI_UPDATE_NSV,       ONLY: UPDATE_NSV
+!
+IMPLICIT NONE 
+!
+!-------------------------------------------------------------------------------
+!
+!*       0.1   Declarations of arguments
+!
+INTEGER, INTENT(IN)             :: KMI ! model index
+!
+!*       0.2   Declarations of local variables
+!
+CHARACTER(LEN=2) :: YNUM2
+CHARACTER(LEN=3) :: YNUM3
+CHARACTER(LEN=NCOMMENTLGTMAX) :: YCOMMENT
+CHARACTER(LEN=NUNITLGTMAX)    :: YUNITS
+CHARACTER(LEN=NLONGNAMELGTMAX), DIMENSION(:), ALLOCATABLE :: YAEROLONGNAMES
+CHARACTER(LEN=NLONGNAMELGTMAX), DIMENSION(:), ALLOCATABLE :: YDUSTLONGNAMES
+CHARACTER(LEN=NLONGNAMELGTMAX), DIMENSION(:), ALLOCATABLE :: YSALTLONGNAMES
+INTEGER :: ILUOUT
+INTEGER :: ICHIDX ! Index for position in CSV_CHEM_LIST_A array
+INTEGER :: ISV ! total number of scalar variables
+INTEGER :: IMODEIDX
+INTEGER :: JAER
+INTEGER :: JI, JJ, JSV
+INTEGER :: JMODE, JMOM, JSV_NAME
+INTEGER :: INMOMENTS_DST, INMOMENTS_SLT !Number of moments for dust or salt
+!
+!-------------------------------------------------------------------------------
+!
+LINI_NSV(KMI) = .TRUE.
+
+ILUOUT = TLUOUT%NLU
+
+ICHIDX = 0
+NSV_CHEM_LIST_A(KMI) = 0
+!
+! Users scalar variables are first considered
+!
+NSV_USER_A(KMI) = NSV_USER
+ISV = NSV_USER
+!
+! scalar variables used in microphysical schemes C2R2,KHKO and C3R5
+!
+IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO' ) THEN
+  IF ((CCLOUD == 'C2R2' .AND. LSUPSAT) .OR. (CCLOUD == 'KHKO'.AND. LSUPSAT)) THEN
+   ! 4th scalar field = supersaturation
+    NSV_C2R2_A(KMI)    = 4
+  ELSE
+    NSV_C2R2_A(KMI)    = 3
+  END IF
+  NSV_C2R2BEG_A(KMI) = ISV+1
+  NSV_C2R2END_A(KMI) = ISV+NSV_C2R2_A(KMI)
+  ISV                = NSV_C2R2END_A(KMI)
+  IF (CCLOUD == 'C3R5') THEN  ! the SVs for C2R2 and C1R3 must be contiguous
+    NSV_C1R3_A(KMI)    = 2
+    NSV_C1R3BEG_A(KMI) = ISV+1
+    NSV_C1R3END_A(KMI) = ISV+NSV_C1R3_A(KMI)
+    ISV                = NSV_C1R3END_A(KMI)
+  ELSE
+    NSV_C1R3_A(KMI)    = 0
+  ! force First index to be superior to last index
+  ! in order to create a null section
+    NSV_C1R3BEG_A(KMI) = 1
+    NSV_C1R3END_A(KMI) = 0
+  END IF
+ELSE
+  NSV_C2R2_A(KMI)    = 0
+  NSV_C1R3_A(KMI)    = 0
+! force First index to be superior to last index
+! in order to create a null section
+  NSV_C2R2BEG_A(KMI) = 1
+  NSV_C2R2END_A(KMI) = 0
+  NSV_C1R3BEG_A(KMI) = 1
+  NSV_C1R3END_A(KMI) = 0
+END IF
+!
+! scalar variables used in the LIMA microphysical scheme
+!
+IF (CCLOUD == 'LIMA' ) THEN
+   ISV = ISV+1
+   NSV_LIMA_BEG_A(KMI) = ISV
+   IF (NMOM_C.GE.2) THEN
+! Nc
+      NSV_LIMA_NC_A(KMI) = ISV
+      ISV = ISV+1
+   END IF
+! Nr
+   IF (NMOM_R.GE.2) THEN
+      NSV_LIMA_NR_A(KMI) = ISV
+      ISV = ISV+1
+   END IF
+! CCN
+   IF (NMOD_CCN .GT. 0) THEN
+      NSV_LIMA_CCN_FREE_A(KMI) = ISV
+      ISV = ISV + NMOD_CCN
+      NSV_LIMA_CCN_ACTI_A(KMI) = ISV
+      ISV = ISV + NMOD_CCN
+   END IF
+! Scavenging
+   IF (LSCAV .AND. LAERO_MASS) THEN
+      NSV_LIMA_SCAVMASS_A(KMI) = ISV
+      ISV = ISV+1
+   END IF
+! Ni
+   IF (NMOM_I.GE.2) THEN
+      NSV_LIMA_NI_A(KMI) = ISV
+      ISV = ISV+1
+   END IF
+! Ns
+   IF (NMOM_S.GE.2) THEN
+      NSV_LIMA_NS_A(KMI) = ISV
+      ISV = ISV+1
+   END IF
+! Ng
+   IF (NMOM_G.GE.2) THEN
+      NSV_LIMA_NG_A(KMI) = ISV
+      ISV = ISV+1
+   END IF
+! Nh
+   IF (NMOM_H.GE.2) THEN
+      NSV_LIMA_NH_A(KMI) = ISV
+      ISV = ISV+1
+   END IF
+! IFN
+   IF (NMOD_IFN .GT. 0) THEN
+      NSV_LIMA_IFN_FREE_A(KMI) = ISV
+      ISV = ISV + NMOD_IFN
+      NSV_LIMA_IFN_NUCL_A(KMI) = ISV
+      ISV = ISV + NMOD_IFN
+   END IF
+! IMM
+   IF (NMOD_IMM .GT. 0) THEN
+      NSV_LIMA_IMM_NUCL_A(KMI) = ISV
+      ISV = ISV + MAX(1,NMOD_IMM)
+   END IF
+
+  IF ( NMOD_IFN > 0 ) THEN
+    IF ( .NOT. ALLOCATED( NIMM ) ) ALLOCATE( NIMM(NMOD_CCN) )
+    NIMM(:) = 0
+    IF ( ALLOCATED( NINDICE_CCN_IMM ) ) DEALLOCATE( NINDICE_CCN_IMM )
+    ALLOCATE( NINDICE_CCN_IMM(MAX( 1, NMOD_IMM )) )
+    IF (NMOD_IMM > 0 ) THEN
+      DO JI = 0, NMOD_IMM - 1
+        NIMM(NMOD_CCN - JI) = 1
+        NINDICE_CCN_IMM(NMOD_IMM - JI) = NMOD_CCN - JI
+      END DO
+!     ELSE IF (NMOD_IMM == 0) THEN ! PNIS exists but is 0 for the call to resolved_cloud
+!       NMOD_IMM = 1
+!       NINDICE_CCN_IMM(1) = 0
+    END IF
+  END IF
+
+! Homogeneous freezing of CCN
+   IF (LHHONI) THEN
+      NSV_LIMA_HOM_HAZE_A(KMI) = ISV
+      ISV = ISV + 1
+   END IF
+! Supersaturation
+   IF (LSPRO) THEN
+      NSV_LIMA_SPRO_A(KMI) = ISV
+      ISV = ISV + 1
+   END IF
+!
+! End and total variables
+!
+   ISV = ISV - 1
+   NSV_LIMA_END_A(KMI) = ISV
+   NSV_LIMA_A(KMI) = NSV_LIMA_END_A(KMI) - NSV_LIMA_BEG_A(KMI) + 1
+ELSE
+   NSV_LIMA_A(KMI)    = 0
+!
+! force First index to be superior to last index
+! in order to create a null section
+!
+   NSV_LIMA_BEG_A(KMI) = 1
+   NSV_LIMA_END_A(KMI) = 0
+END IF ! CCLOUD = LIMA
+!
+!
+!  Add one scalar for negative ion
+!   First variable: positive ion (NSV_ELECBEG_A index number)
+!   Last  --------: negative ion (NSV_ELECEND_A index number)
+! Correspondence for ICE3:
+! Relative index    1       2        3       4      5      6       7
+! Charge for     ion+     cloud    rain     ice   snow  graupel  ion-
+!
+! Correspondence for ICE4:
+! Relative index    1       2        3       4      5      6       7       8
+! Charge for     ion+     cloud    rain     ice   snow  graupel   hail   ion-
+!
+IF (CELEC /= 'NONE') THEN
+  IF (CCLOUD == 'ICE3') THEN
+    NSV_ELEC_A(KMI)   = 7 
+    NSV_ELECBEG_A(KMI)= ISV+1
+    NSV_ELECEND_A(KMI)= ISV+NSV_ELEC_A(KMI)
+    ISV               = NSV_ELECEND_A(KMI)
+    CELECNAMES(7) = CELECNAMES(8) 
+  ELSE IF (CCLOUD == 'ICE4') THEN
+    NSV_ELEC_A(KMI)   = 8 
+    NSV_ELECBEG_A(KMI)= ISV+1
+    NSV_ELECEND_A(KMI)= ISV+NSV_ELEC_A(KMI)
+    ISV               = NSV_ELECEND_A(KMI)
+  END IF
+ELSE
+  NSV_ELEC_A(KMI)    = 0
+! force First index to be superior to last index
+! in order to create a null section
+  NSV_ELECBEG_A(KMI) = 1
+  NSV_ELECEND_A(KMI) = 0
+END IF
+!
+! scalar variables used as lagragian variables
+!
+IF (LLG) THEN
+  NSV_LG_A(KMI)     = 3
+  NSV_LGBEG_A(KMI)  = ISV+1
+  NSV_LGEND_A(KMI)  = ISV+NSV_LG_A(KMI)
+  ISV               = NSV_LGEND_A(KMI)
+ELSE
+  NSV_LG_A(KMI)     = 0
+! force First index to be superior to last index
+! in order to create a null section
+  NSV_LGBEG_A(KMI)  = 1
+  NSV_LGEND_A(KMI)  = 0
+END IF
+!
+! scalar variables used as LiNOX passive tracer
+!
+! In case without chemistry
+IF (LPASPOL) THEN
+  NSV_PP_A(KMI)   = NRELEASE
+  NSV_PPBEG_A(KMI)= ISV+1
+  NSV_PPEND_A(KMI)= ISV+NSV_PP_A(KMI)
+  ISV               = NSV_PPEND_A(KMI)
+ELSE
+  NSV_PP_A(KMI)   = 0
+! force First index to be superior to last index
+! in order to create a null section
+  NSV_PPBEG_A(KMI)= 1
+  NSV_PPEND_A(KMI)= 0
+END IF
+!
+#ifdef MNH_FOREFIRE
+! ForeFire tracers
+IF (LFOREFIRE .AND. NFFSCALARS .GT. 0) THEN
+  NSV_FF_A(KMI)    = NFFSCALARS
+  NSV_FFBEG_A(KMI) = ISV+1
+  NSV_FFEND_A(KMI) = ISV+NSV_FF_A(KMI)
+  ISV              = NSV_FFEND_A(KMI)
+ELSE
+  NSV_FF_A(KMI)   = 0
+! force First index to be superior to last index
+! in order to create a null section
+  NSV_FFBEG_A(KMI)= 1
+  NSV_FFEND_A(KMI)= 0
+END IF
+#endif
+! Blaze tracers
+IF (LBLAZE .AND. NNBSMOKETRACER .GT. 0) THEN
+  NSV_FIRE_A(KMI)    = NNBSMOKETRACER
+  NSV_FIREBEG_A(KMI) = ISV+1
+  NSV_FIREEND_A(KMI) = ISV+NSV_FIRE_A(KMI)
+  ISV              = NSV_FIREEND_A(KMI)
+ELSE
+  NSV_FIRE_A(KMI)   = 0
+! force First index to be superior to last index
+! in order to create a null section
+  NSV_FIREBEG_A(KMI)= 1
+  NSV_FIREEND_A(KMI)= 0
+END IF
+!
+! Conditional sampling variables  
+IF (LCONDSAMP) THEN
+  NSV_CS_A(KMI)   = NCONDSAMP
+  NSV_CSBEG_A(KMI)= ISV+1
+  NSV_CSEND_A(KMI)= ISV+NSV_CS_A(KMI)
+  ISV               = NSV_CSEND_A(KMI)
+ELSE
+  NSV_CS_A(KMI)   = 0
+! force First index to be superior to last index
+! in order to create a null section
+  NSV_CSBEG_A(KMI)= 1
+  NSV_CSEND_A(KMI)= 0
+END IF
+!
+! scalar variables used in chemical core system
+!
+IF (LUSECHEM) THEN
+  CALL CH_INIT_SCHEME_n(KMI,LUSECHAQ,LUSECHIC,LCH_PH,ILUOUT,NVERB)
+  IF (LORILAM) CALL CH_AER_INIT_SOA(ILUOUT, NVERB)
+END IF
+
+IF (LUSECHEM .AND.(NEQ .GT. 0)) THEN
+  NSV_CHEM_A(KMI)   = NEQ
+  NSV_CHEMBEG_A(KMI)= ISV+1
+  NSV_CHEMEND_A(KMI)= ISV+NSV_CHEM_A(KMI)
+  ISV               = NSV_CHEMEND_A(KMI)
+  NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_CHEM_A(KMI)
+ELSE
+  NSV_CHEM_A(KMI)   = 0
+! force First index to be superior to last index
+! in order to create a null section
+  NSV_CHEMBEG_A(KMI)= 1
+  NSV_CHEMEND_A(KMI)= 0
+END IF
+!
+! aqueous chemistry (part of the "chem" variables)       
+!                                                        
+IF ((LUSECHAQ .OR. LCHAQDIAG).AND.(NEQ .GT. 0)) THEN     
+  NSV_CHGS_A(KMI) = NEQ-NEQAQ                            
+  NSV_CHGSBEG_A(KMI)= NSV_CHEMBEG_A(KMI)                 
+  NSV_CHGSEND_A(KMI)= NSV_CHEMBEG_A(KMI)+(NEQ-NEQAQ)-1   
+  NSV_CHAC_A(KMI) = NEQAQ                                
+  NSV_CHACBEG_A(KMI)= NSV_CHGSEND_A(KMI)+1               
+  NSV_CHACEND_A(KMI)= NSV_CHEMEND_A(KMI)                 
+!  ice phase chemistry
+  IF (LUSECHIC) THEN
+    NSV_CHIC_A(KMI) = NEQAQ/2. -1.
+    NSV_CHICBEG_A(KMI)= ISV+1
+    NSV_CHICEND_A(KMI)= ISV+NSV_CHIC_A(KMI)
+    ISV               = NSV_CHICEND_A(KMI)
+    NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_CHIC_A(KMI)
+  ELSE
+    NSV_CHIC_A(KMI) = 0
+    NSV_CHICBEG_A(KMI)= 1
+    NSV_CHICEND_A(KMI)= 0
+  ENDIF
+ELSE                                                     
+  IF (NEQ .GT. 0) THEN
+    NSV_CHGS_A(KMI) = NEQ-NEQAQ                            
+    NSV_CHGSBEG_A(KMI)= NSV_CHEMBEG_A(KMI)                 
+    NSV_CHGSEND_A(KMI)= NSV_CHEMBEG_A(KMI)+(NEQ-NEQAQ)-1   
+    NSV_CHAC_A(KMI) = 0                                    
+    NSV_CHACBEG_A(KMI)= 1                                  
+    NSV_CHACEND_A(KMI)= 0                                  
+    NSV_CHIC_A(KMI) = 0
+    NSV_CHICBEG_A(KMI)= 1
+    NSV_CHICEND_A(KMI)= 0
+  ELSE
+    NSV_CHGS_A(KMI) = 0
+    NSV_CHGSBEG_A(KMI)= 1
+    NSV_CHGSEND_A(KMI)= 0
+    NSV_CHAC_A(KMI) = 0
+    NSV_CHACBEG_A(KMI)= 1
+    NSV_CHACEND_A(KMI)= 0   
+    NSV_CHIC_A(KMI) = 0
+    NSV_CHICBEG_A(KMI)= 1
+    NSV_CHICEND_A(KMI)= 0    
+  ENDIF
+END IF
+! aerosol variables
+IF (LORILAM.AND.(NEQ .GT. 0)) THEN
+  NM6_AER = 0
+  IF (LVARSIGI) NM6_AER = 1
+  IF (LVARSIGJ) NM6_AER = NM6_AER + 1
+  NSV_AER_A(KMI)   = (NSP+NCARB+NSOA+1)*JPMODE + NM6_AER
+  NSV_AERBEG_A(KMI)= ISV+1
+  NSV_AEREND_A(KMI)= ISV+NSV_AER_A(KMI)
+  ISV              = NSV_AEREND_A(KMI)
+  NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_AER_A(KMI)
+
+  ALLOCATE( YAEROLONGNAMES(NSV_AER_A(KMI)) )
+ELSE
+  NSV_AER_A(KMI)   = 0
+! force First index to be superior to last index
+! in order to create a null section
+  NSV_AERBEG_A(KMI)= 1
+  NSV_AEREND_A(KMI)= 0
+END IF
+IF (LORILAM .AND. LDEPOS_AER(KMI)) THEN
+  NSV_AERDEP_A(KMI)   = JPMODE*2
+  NSV_AERDEPBEG_A(KMI)= ISV+1
+  NSV_AERDEPEND_A(KMI)= ISV+NSV_AERDEP_A(KMI)
+  ISV                  = NSV_AERDEPEND_A(KMI)       
+  NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_AERDEP_A(KMI)
+ELSE
+  NSV_AERDEP_A(KMI)   = 0
+! force First index to be superior to last index
+! in order to create a null section
+  NSV_AERDEPBEG_A(KMI)= 1
+  NSV_AERDEPEND_A(KMI)= 0       
+! force First index to be superior to last index
+! in order to create a null section
+END IF
+!
+! scalar variables used in dust model
+!
+IF (LDUST) THEN
+  IF (ALLOCATED(XT_LS).AND. .NOT.(LDSTPRES)) LDSTINIT=.TRUE.
+  IF (CPROGRAM == 'IDEAL ') LVARSIG = .TRUE.
+  IF ((CPROGRAM == 'REAL  ').AND.LDSTINIT) LVARSIG = .TRUE.
+  !Determine number of moments
+  IF ( LRGFIX_DST ) THEN
+    INMOMENTS_DST = 1
+    IF ( LVARSIG ) CALL Print_msg( NVERB_WARNING, 'GEN', 'INI_NSV', 'LVARSIG forced to FALSE because LRGFIX_DST is TRUE' )
+    LVARSIG = .FALSE.
+  ELSE IF ( LVARSIG ) THEN
+    INMOMENTS_DST = 3
+  ELSE
+    INMOMENTS_DST = 2
+  END IF
+  !Number of entries = number of moments multiplied by number of modes
+  NSV_DST_A(KMI) = NMODE_DST * INMOMENTS_DST
+  NSV_DSTBEG_A(KMI)= ISV+1
+  NSV_DSTEND_A(KMI)= ISV+NSV_DST_A(KMI)
+  ISV              = NSV_DSTEND_A(KMI)
+  NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_DST_A(KMI)
+ELSE
+  NSV_DST_A(KMI)   = 0
+! force First index to be superior to last index
+! in order to create a null section
+  NSV_DSTBEG_A(KMI)= 1
+  NSV_DSTEND_A(KMI)= 0
+END IF
+IF ( LDUST .AND. LDEPOS_DST(KMI) ) THEN
+  NSV_DSTDEP_A(KMI)   = NMODE_DST*2
+  NSV_DSTDEPBEG_A(KMI)= ISV+1
+  NSV_DSTDEPEND_A(KMI)= ISV+NSV_DSTDEP_A(KMI)
+  ISV                  = NSV_DSTDEPEND_A(KMI)       
+  NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_DSTDEP_A(KMI)
+ELSE
+  NSV_DSTDEP_A(KMI)   = 0
+! force First index to be superior to last index
+! in order to create a null section
+  NSV_DSTDEPBEG_A(KMI)= 1
+  NSV_DSTDEPEND_A(KMI)= 0       
+! force First index to be superior to last index
+! in order to create a null section
+
+ END IF
+! scalar variables used in sea salt model
+!
+IF (LSALT) THEN
+  IF (ALLOCATED(XT_LS).AND. .NOT.(LSLTPRES)) LSLTINIT=.TRUE.
+  IF (CPROGRAM == 'IDEAL ') LVARSIG_SLT = .TRUE.
+  IF ((CPROGRAM == 'REAL  ').AND. LSLTINIT ) LVARSIG_SLT = .TRUE.
+  !Determine number of moments
+  IF ( LRGFIX_SLT ) THEN
+    INMOMENTS_SLT = 1
+    IF ( LVARSIG_SLT ) CALL Print_msg( NVERB_WARNING, 'GEN', 'INI_NSV', 'LVARSIG_SLT forced to FALSE because LRGFIX_SLT is TRUE' )
+    LVARSIG_SLT = .FALSE.
+  ELSE IF ( LVARSIG_SLT ) THEN
+    INMOMENTS_SLT = 3
+  ELSE
+    INMOMENTS_SLT = 2
+  END IF
+  !Number of entries = number of moments multiplied by number of modes
+  NSV_SLT_A(KMI) = NMODE_SLT * INMOMENTS_SLT
+  NSV_SLTBEG_A(KMI)= ISV+1
+  NSV_SLTEND_A(KMI)= ISV+NSV_SLT_A(KMI)
+  ISV              = NSV_SLTEND_A(KMI)
+  NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_SLT_A(KMI)
+ELSE
+  NSV_SLT_A(KMI)   = 0
+! force First index to be superior to last index
+! in order to create a null section
+  NSV_SLTBEG_A(KMI)= 1
+  NSV_SLTEND_A(KMI)= 0
+END IF
+IF ( LSALT .AND. LDEPOS_SLT(KMI) ) THEN
+  NSV_SLTDEP_A(KMI)   = NMODE_SLT*2
+  NSV_SLTDEPBEG_A(KMI)= ISV+1
+  NSV_SLTDEPEND_A(KMI)= ISV+NSV_SLTDEP_A(KMI)
+  ISV                  = NSV_SLTDEPEND_A(KMI)       
+  NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_SLTDEP_A(KMI)
+ELSE
+  NSV_SLTDEP_A(KMI)   = 0
+! force First index to be superior to last index
+! in order to create a null section
+  NSV_SLTDEPBEG_A(KMI)= 1
+  NSV_SLTDEPEND_A(KMI)= 0       
+! force First index to be superior to last index
+! in order to create a null section
+END IF
+!
+! scalar variables used in blowing snow model
+!
+IF (LBLOWSNOW) THEN
+  NSV_SNW_A(KMI)   = NBLOWSNOW3D
+  NSV_SNWBEG_A(KMI)= ISV+1
+  NSV_SNWEND_A(KMI)= ISV+NSV_SNW_A(KMI)
+  ISV              = NSV_SNWEND_A(KMI)
+ELSE
+  NSV_SNW_A(KMI)   = 0
+! force First index to be superior to last index
+! in order to create a null section
+  NSV_SNWBEG_A(KMI)= 1
+  NSV_SNWEND_A(KMI)= 0
+END IF
+!
+! scalar variables used as LiNOX passive tracer
+!
+! In case without chemistry
+IF (.NOT.(LUSECHEM.OR.LCHEMDIAG) .AND. (LCH_CONV_LINOX.OR.LLNOX_EXPLICIT)) THEN
+  NSV_LNOX_A(KMI)   = 1
+  NSV_LNOXBEG_A(KMI)= ISV+1
+  NSV_LNOXEND_A(KMI)= ISV+NSV_LNOX_A(KMI)
+  ISV               = NSV_LNOXEND_A(KMI)
+  NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_LNOX_A(KMI)
+ELSE
+  NSV_LNOX_A(KMI)   = 0
+! force First index to be superior to last index
+! in order to create a null section
+  NSV_LNOXBEG_A(KMI)= 1
+  NSV_LNOXEND_A(KMI)= 0
+END IF
+!
+! Final number of NSV variables
+!
+NSV_A(KMI) = ISV
+!
+!
+!*        Update LHORELAX_SV,CGETSVM,CGETSVT for NON USER SV 
+!
+! C2R2  or KHKO SV case
+!*BUG*JPC*MAR2006
+! IF (CCLOUD == 'C2R2'  .OR. CCLOUD == 'KHKO' ) &
+IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR.  CCLOUD == 'KHKO' ) &
+!*BUG*JPC*MAR2006
+LHORELAX_SV(NSV_C2R2BEG_A(KMI):NSV_C2R2END_A(KMI))=LHORELAX_SVC2R2
+! C3R5 SV case
+IF (CCLOUD == 'C3R5') &
+LHORELAX_SV(NSV_C1R3BEG_A(KMI):NSV_C1R3END_A(KMI))=LHORELAX_SVC1R3
+! LIMA SV case
+IF (CCLOUD == 'LIMA') &
+LHORELAX_SV(NSV_LIMA_BEG_A(KMI):NSV_LIMA_END_A(KMI))=LHORELAX_SVLIMA
+! Electrical SV case
+IF (CELEC /= 'NONE') &
+LHORELAX_SV(NSV_ELECBEG_A(KMI):NSV_ELECEND_A(KMI))=LHORELAX_SVELEC
+! Chemical SV case
+IF (LUSECHEM .OR. LCHEMDIAG) &
+LHORELAX_SV(NSV_CHEMBEG_A(KMI):NSV_CHEMEND_A(KMI))=LHORELAX_SVCHEM
+! Ice phase Chemical SV case
+IF (LUSECHIC) &
+LHORELAX_SV(NSV_CHICBEG_A(KMI):NSV_CHICEND_A(KMI))=LHORELAX_SVCHIC
+! LINOX SV case
+IF (.NOT.(LUSECHEM .OR. LCHEMDIAG) .AND. LCH_CONV_LINOX) &
+LHORELAX_SV(NSV_LNOXBEG_A(KMI):NSV_LNOXEND_A(KMI))=LHORELAX_SVCHEM
+! Dust SV case
+IF (LDUST) &
+LHORELAX_SV(NSV_DSTBEG_A(KMI):NSV_DSTEND_A(KMI))=LHORELAX_SVDST
+! Sea Salt SV case
+IF (LSALT) &
+LHORELAX_SV(NSV_SLTBEG_A(KMI):NSV_SLTEND_A(KMI))=LHORELAX_SVSLT
+! Aerosols SV case
+IF (LORILAM) &
+LHORELAX_SV(NSV_AERBEG_A(KMI):NSV_AEREND_A(KMI))=LHORELAX_SVAER
+! Lagrangian variables
+IF (LLG) &
+LHORELAX_SV(NSV_LGBEG_A(KMI):NSV_LGEND_A(KMI))=LHORELAX_SVLG
+! Passive pollutants  
+IF (LPASPOL) &
+LHORELAX_SV(NSV_PPBEG_A(KMI):NSV_PPEND_A(KMI))=LHORELAX_SVPP
+#ifdef MNH_FOREFIRE
+! Fire pollutants
+IF (LFOREFIRE) &
+LHORELAX_SV(NSV_FFBEG_A(KMI):NSV_FFEND_A(KMI))=LHORELAX_SVFF
+#endif
+! Blaze Fire pollutants
+IF (LBLAZE) &
+LHORELAX_SV(NSV_FIREBEG_A(KMI):NSV_FIREEND_A(KMI))=LHORELAX_SVFIRE
+! Conditional sampling
+IF (LCONDSAMP) &
+LHORELAX_SV(NSV_CSBEG_A(KMI):NSV_CSEND_A(KMI))=LHORELAX_SVCS
+! Blowing snow case
+IF (LBLOWSNOW) &
+LHORELAX_SV(NSV_SNWBEG_A(KMI):NSV_SNWEND_A(KMI))=LHORELAX_SVSNW
+! Update NSV* variables for model KMI
+CALL UPDATE_NSV(KMI)
+!
+!  SET MINIMUN VALUE FOR DIFFERENT SV GROUPS
+!
+XSVMIN(1:NSV_USER_A(KMI))=0.
+IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR.  CCLOUD == 'KHKO' ) &
+XSVMIN(NSV_C2R2BEG_A(KMI):NSV_C2R2END_A(KMI))=0.
+IF (CCLOUD == 'C3R5') &
+XSVMIN(NSV_C1R3BEG_A(KMI):NSV_C1R3END_A(KMI))=0.
+IF (CCLOUD == 'LIMA') &
+XSVMIN(NSV_LIMA_BEG_A(KMI):NSV_LIMA_END_A(KMI))=0.
+IF (CELEC /= 'NONE') &
+XSVMIN(NSV_ELECBEG_A(KMI):NSV_ELECEND_A(KMI))=0.
+IF (LUSECHEM .OR. LCHEMDIAG) &
+XSVMIN(NSV_CHEMBEG_A(KMI):NSV_CHEMEND_A(KMI))=0.
+IF (LUSECHIC) &
+XSVMIN(NSV_CHICBEG_A(KMI):NSV_CHICEND_A(KMI))=0.
+IF (.NOT.(LUSECHEM .OR. LCHEMDIAG) .AND. LCH_CONV_LINOX) &
+XSVMIN(NSV_LNOXBEG_A(KMI):NSV_LNOXEND_A(KMI))=0.
+IF (LORILAM .OR. LCHEMDIAG) &
+XSVMIN(NSV_AERBEG_A(KMI):NSV_AEREND_A(KMI))=0.
+IF (LDUST) XSVMIN(NSV_DSTBEG_A(KMI):NSV_DSTEND_A(KMI))=XMNH_TINY
+IF ((LDUST).AND.(LDEPOS_DST(KMI))) &
+XSVMIN(NSV_DSTDEPBEG_A(KMI):NSV_DSTDEPEND_A(KMI))=XMNH_TINY
+IF (LSALT) XSVMIN(NSV_SLTBEG_A(KMI):NSV_SLTEND_A(KMI))=XMNH_TINY
+IF (LLG) THEN
+  XSVMIN(NSV_LGBEG_A(KMI))  =XLG1MIN
+  XSVMIN(NSV_LGBEG_A(KMI)+1)=XLG2MIN
+  XSVMIN(NSV_LGEND_A(KMI))  =XLG3MIN
+ENDIF
+IF ((LSALT).AND.(LDEPOS_SLT(KMI))) &
+XSVMIN(NSV_SLTDEPBEG_A(KMI):NSV_SLTDEPEND_A(KMI))=XMNH_TINY
+IF ((LORILAM).AND.(LDEPOS_AER(KMI))) &
+XSVMIN(NSV_AERDEPBEG_A(KMI):NSV_AERDEPEND_A(KMI))=XMNH_TINY
+IF (LPASPOL) XSVMIN(NSV_PPBEG_A(KMI):NSV_PPEND_A(KMI))=0.    
+#ifdef MNH_FOREFIRE      
+IF (LFOREFIRE) XSVMIN(NSV_FFBEG_A(KMI):NSV_FFEND_A(KMI))=0.
+#endif
+! Blaze smoke
+IF (LBLAZE) XSVMIN(NSV_FIREBEG_A(KMI):NSV_FIREEND_A(KMI))=0.
+!
+IF (LCONDSAMP) XSVMIN(NSV_CSBEG_A(KMI):NSV_CSEND_A(KMI))=0.   
+IF (LBLOWSNOW) XSVMIN(NSV_SNWBEG_A(KMI):NSV_SNWEND_A(KMI))=XMNH_TINY
+!
+!  NAME OF THE SCALAR VARIABLES IN THE DIFFERENT SV GROUPS
+!
+IF (ALLOCATED(CSV)) DEALLOCATE(CSV)
+ALLOCATE(CSV(NSV))
+CSV(:) = '      '
+IF (LLG) THEN
+  CSV(NSV_LGBEG_A(KMI)  ) = 'X0     '
+  CSV(NSV_LGBEG_A(KMI)+1) = 'Y0     '
+  CSV(NSV_LGEND_A(KMI)  ) = 'Z0     '
+ENDIF
+
+! Initialize scalar variable names for dust
+IF ( LDUST ) THEN
+  IF ( NMODE_DST < 1 .OR. NMODE_DST > 3 ) CALL Print_msg( NVERB_FATAL, 'GEN', 'INI_NSV', 'NMODE_DST must in the 1 to 3 interval' )
+
+  ! Initialization of dust names
+  ! Was allocated for previous KMI
+  ! We assume that if LDUST=T on a model, NSV_DST_A(KMI) is the same for all
+  IF( .NOT. ALLOCATED( CDUSTNAMES ) ) THEN
+    ALLOCATE( CDUSTNAMES(NSV_DST_A(KMI)) )
+  ELSE IF ( SIZE( CDUSTNAMES ) /= NSV_DST_A(KMI) ) THEN
+    CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_NSV', 'NSV_DST not the same for different model (if LDUST=T)' )
+    DEALLOCATE( CDUSTNAMES )
+    ALLOCATE( CDUSTNAMES(NSV_DST_A(KMI)) )
+  END IF
+  ALLOCATE( YDUSTLONGNAMES(NSV_DST_A(KMI)) )
+  !Loop on all dust modes
+  IF ( INMOMENTS_DST == 1 ) THEN
+    DO JMODE = 1, NMODE_DST
+      IMODEIDX = JPDUSTORDER(JMODE)
+      JSV_NAME = ( IMODEIDX - 1 ) * 3 + 2
+      CDUSTNAMES(JMODE) = YPDUST_INI(JSV_NAME)
+      !Add meaning of the ppv unit (here for moment 3)
+      YDUSTLONGNAMES(JMODE) = TRIM( YPDUST_INI(JSV_NAME) ) // ' [molec_{aer}/molec_{air}]'
+    END DO
+  ELSE
+    DO JMODE = 1,NMODE_DST
+      !Find which mode we are dealing with
+      IMODEIDX = JPDUSTORDER(JMODE)
+      DO JMOM = 1, INMOMENTS_DST
+        !Find which number this is of the list of scalars
+        JSV = ( JMODE - 1 ) * INMOMENTS_DST + JMOM
+        !Find what name this corresponds to, always 3 moments assumed in YPDUST_INI
+        JSV_NAME = ( IMODEIDX - 1) * 3 + JMOM
+        !Get the right CDUSTNAMES which should follow the list of scalars transported in XSVM/XSVT
+        CDUSTNAMES(JSV) = YPDUST_INI(JSV_NAME)
+        !Add meaning of the ppv unit
+        IF ( JMOM == 1 ) THEN !Corresponds to moment 0
+          YDUSTLONGNAMES(JSV) = TRIM( YPDUST_INI(JSV_NAME) ) // ' [nb_aerosols/molec_{air}]'
+        ELSE IF ( JMOM == 2 ) THEN !Corresponds to moment 3
+          YDUSTLONGNAMES(JSV) = TRIM( YPDUST_INI(JSV_NAME) ) // ' [molec_{aer}/molec_{air}]'
+        ELSE IF ( JMOM == 3 ) THEN !Corresponds to moment 6
+          YDUSTLONGNAMES(JSV) = TRIM( YPDUST_INI(JSV_NAME) ) // ' [um6/molec_{air}*(cm3/m3)]'
+        ELSE
+          CALL Print_msg( NVERB_WARNING, 'GEN', 'INI_NSV', 'unknown moment for DUST' )
+          YDUSTLONGNAMES(JMODE) = TRIM( YPDUST_INI(JSV_NAME) )
+        END IF
+      ENDDO ! Loop on moments
+    ENDDO    ! Loop on dust modes
+  END IF
+
+  ! Initialization of deposition scheme names
+  IF ( LDEPOS_DST(KMI) ) THEN
+    IF( .NOT. ALLOCATED( CDEDSTNAMES ) ) THEN
+      ALLOCATE( CDEDSTNAMES(NMODE_DST * 2) )
+      DO JMODE = 1, NMODE_DST
+        IMODEIDX = JPDUSTORDER(JMODE)
+        CDEDSTNAMES(JMODE)             = YPDEDST_INI(IMODEIDX)
+        CDEDSTNAMES(NMODE_DST + JMODE) = YPDEDST_INI(NMODE_DST + IMODEIDX)
+      ENDDO
+    END IF
+  END IF
+END IF
+
+! Initialize scalar variable names for salt
+IF ( LSALT ) THEN
+  IF ( NMODE_SLT < 1 .OR. NMODE_SLT > 8 ) CALL Print_msg( NVERB_FATAL, 'GEN', 'INI_NSV', 'NMODE_SLT must in the 1 to 8 interval' )
+
+  ! Was allocated for previous KMI
+  ! We assume that if LSALT=T on a model, NSV_SLT_A(KMI) is the same for all
+  IF( .NOT. ALLOCATED( CSALTNAMES ) ) THEN
+    ALLOCATE( CSALTNAMES(NSV_SLT_A(KMI)) )
+  ELSE IF ( SIZE( CSALTNAMES ) /= NSV_SLT_A(KMI) ) THEN
+    CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_NSV', 'NSV_SLT not the same for different model (if LSALT=T)' )
+    DEALLOCATE( CSALTNAMES )
+    ALLOCATE( CSALTNAMES(NSV_SLT_A(KMI)) )
+  END IF
+  ALLOCATE( YSALTLONGNAMES(NSV_SLT_A(KMI)) )
+  !Loop on all dust modes
+  IF ( INMOMENTS_SLT == 1 ) THEN
+    DO JMODE = 1, NMODE_SLT
+      IMODEIDX = JPSALTORDER(JMODE)
+      JSV_NAME = ( IMODEIDX - 1 ) * 3 + 2
+      CSALTNAMES(JMODE) = YPSALT_INI(JSV_NAME)
+      !Add meaning of the ppv unit (here for moment 3)
+      YSALTLONGNAMES(JMODE) = TRIM( YPSALT_INI(JSV_NAME) ) // ' [molec_{aer}/molec_{air}]'
+    END DO
+  ELSE
+    DO JMODE = 1, NMODE_SLT
+      !Find which mode we are dealing with
+      IMODEIDX = JPSALTORDER(JMODE)
+      DO JMOM = 1, INMOMENTS_SLT
+        !Find which number this is of the list of scalars
+        JSV = ( JMODE - 1 ) * INMOMENTS_SLT + JMOM
+        !Find what name this corresponds to, always 3 moments assumed in YPSALT_INI
+        JSV_NAME = ( IMODEIDX - 1 ) * 3 + JMOM
+        !Get the right CSALTNAMES which should follow the list of scalars transported in XSVM/XSVT
+        CSALTNAMES(JSV) = YPSALT_INI(JSV_NAME)
+        !Add meaning of the ppv unit
+        IF ( JMOM == 1 ) THEN !Corresponds to moment 0
+          YSALTLONGNAMES(JSV) = TRIM( YPSALT_INI(JSV_NAME) ) // ' [nb_aerosols/molec_{air}]'
+        ELSE IF ( JMOM == 2 ) THEN !Corresponds to moment 3
+          YSALTLONGNAMES(JSV) = TRIM( YPSALT_INI(JSV_NAME) ) // ' [molec_{aer}/molec_{air}]'
+        ELSE IF ( JMOM == 3 ) THEN !Corresponds to moment 6
+          YSALTLONGNAMES(JSV) = TRIM( YPSALT_INI(JSV_NAME) ) // ' [um6/molec_{air}*(cm3/m3)]'
+        ELSE
+          CALL Print_msg( NVERB_WARNING, 'GEN', 'INI_NSV', 'unknown moment for SALT' )
+          YSALTLONGNAMES(JMODE) = TRIM( YPSALT_INI(JSV_NAME) )
+        END IF
+      ENDDO ! Loop on moments
+    ENDDO    ! Loop on dust modes
+  END IF
+
+  ! Initialization of deposition scheme
+  IF ( LDEPOS_SLT(KMI) ) THEN
+    IF( .NOT. ALLOCATED( CDESLTNAMES ) ) THEN
+      ALLOCATE( CDESLTNAMES(NMODE_SLT * 2) )
+      DO JMODE = 1, NMODE_SLT
+        IMODEIDX = JPSALTORDER(JMODE)
+        CDESLTNAMES(JMODE)             = YPDESLT_INI(IMODEIDX)
+        CDESLTNAMES(NMODE_SLT + JMODE) = YPDESLT_INI(NMODE_SLT + IMODEIDX)
+      ENDDO
+    ENDIF
+  ENDIF
+END IF
+
+! Initialize scalar variable names for snow
+IF ( LBLOWSNOW ) THEN
+  IF( .NOT. ALLOCATED( CSNOWNAMES ) ) THEN
+    ALLOCATE( CSNOWNAMES(NSV_SNW_A(KMI)) )
+    DO JMOM = 1, NSV_SNW_A(KMI)
+      CSNOWNAMES(JMOM) = YPSNOW_INI(JMOM)
+    END DO
+  END IF
+END IF
+
+!Fill metadata for model KMI
+DO JSV = 1, NSV_USER_A(KMI)
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(         &
+    CMNHNAME   = 'SVUSER' // YNUM3,             &
+    CSTDNAME   = '',                            &
+    CLONGNAME  = 'SVUSER' // YNUM3,             &
+    CUNITS     = 'kg kg-1',                     &
+    CDIR       = 'XY',                          &
+    CCOMMENT   = 'X_Y_Z_' // 'SVUSER' // YNUM3, &
+    NGRID      = 1,                             &
+    NTYPE      = TYPEREAL,                      &
+    NDIMS      = 3,                             &
+    LTIMEDEP   = .TRUE.                         )
+END DO
+
+DO JSV = NSV_C2R2BEG_A(KMI), NSV_C2R2END_A(KMI)
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                       &
+    CMNHNAME   = TRIM( C2R2NAMES(JSV-NSV_C2R2BEG_A(KMI)+1) ), &
+    CSTDNAME   = '',                                          &
+    CLONGNAME  = TRIM( C2R2NAMES(JSV-NSV_C2R2BEG_A(KMI)+1) ), &
+    CUNITS     = 'm-3',                                       &
+    CDIR       = 'XY',                                        &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3,                  &
+    NGRID      = 1,                                           &
+    NTYPE      = TYPEREAL,                                    &
+    NDIMS      = 3,                                           &
+    LTIMEDEP   = .TRUE.                                       )
+END DO
+
+DO JSV = NSV_C1R3BEG_A(KMI), NSV_C1R3END_A(KMI)
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                       &
+    CMNHNAME   = TRIM( C1R3NAMES(JSV-NSV_C2R2BEG_A(KMI)+1) ), &
+    CSTDNAME   = '',                                          &
+    CLONGNAME  = TRIM( C1R3NAMES(JSV-NSV_C2R2BEG_A(KMI)+1) ), &
+    CUNITS     = 'm-3',                                       &
+    CDIR       = 'XY',                                        &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3,                  &
+    NGRID      = 1,                                           &
+    NTYPE      = TYPEREAL,                                    &
+    NDIMS      = 3,                                           &
+    LTIMEDEP   = .TRUE.                                       )
+END DO
+
+DO JSV = NSV_LIMA_BEG_A(KMI), NSV_LIMA_END_A(KMI)
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(      &
+    CMNHNAME   = 'SV LIMA ' // YNUM3,        &
+    CSTDNAME   = '',                         &
+    CLONGNAME  = '',                         &
+    CUNITS     = 'kg-1',                     &
+    CDIR       = 'XY',                       &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3, &
+    NGRID      = 1,                          &
+    NTYPE      = TYPEREAL,                   &
+    NDIMS      = 3,                          &
+    LTIMEDEP   = .TRUE.                      )
+
+  IF ( JSV == NSV_LIMA_NC_A(KMI) ) THEN
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_WARM_NAMES(1) )
+  ELSE IF ( JSV == NSV_LIMA_NR_A(KMI) ) THEN
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_WARM_NAMES(2) )
+  ELSE IF ( JSV >= NSV_LIMA_CCN_FREE_A(KMI) .AND. JSV < NSV_LIMA_CCN_ACTI_A(KMI) ) THEN
+    WRITE( YNUM2, '( I2.2 )' ) JSV - NSV_LIMA_CCN_FREE_A(KMI) + 1
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_WARM_NAMES(3) ) // YNUM2
+  ELSE IF (JSV >= NSV_LIMA_CCN_ACTI_A(KMI) .AND. JSV < ( NSV_LIMA_CCN_ACTI_A(KMI) + NMOD_CCN ) ) THEN
+    WRITE( YNUM2, '( I2.2 )' ) JSV - NSV_LIMA_CCN_ACTI_A(KMI) + 1
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_WARM_NAMES(4) ) // YNUM2
+  ELSE IF ( JSV == NSV_LIMA_SCAVMASS_A(KMI) ) THEN
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CAERO_MASS(1) )
+    TSVLIST_A(JSV, KMI)%CUNITS = 'kg kg-1'
+  ELSE IF ( JSV == NSV_LIMA_NI_A(KMI) ) THEN
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_COLD_NAMES(1) )
+  ELSE IF ( JSV == NSV_LIMA_NS_A(KMI) ) THEN
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_COLD_NAMES(2) )
+  ELSE IF ( JSV == NSV_LIMA_NG_A(KMI) ) THEN
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_COLD_NAMES(3) )
+  ELSE IF ( JSV == NSV_LIMA_NH_A(KMI) ) THEN
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_COLD_NAMES(4) )
+  ELSE IF ( JSV >= NSV_LIMA_IFN_FREE_A(KMI) .AND. JSV < NSV_LIMA_IFN_NUCL_A(KMI) ) THEN
+    WRITE( YNUM2, '( I2.2 )' ) JSV - NSV_LIMA_IFN_FREE_A(KMI) + 1
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_COLD_NAMES(5) ) // YNUM2
+  ELSE IF ( JSV >= NSV_LIMA_IFN_NUCL_A(KMI) .AND. JSV < ( NSV_LIMA_IFN_NUCL_A(KMI) + NMOD_IFN ) ) THEN
+    WRITE( YNUM2, '( I2.2 )' ) JSV - NSV_LIMA_IFN_NUCL_A(KMI) + 1
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_COLD_NAMES(6) ) // YNUM2
+  ELSE IF ( JSV >= NSV_LIMA_IMM_NUCL_A(KMI) .AND. JSV < ( NSV_LIMA_IMM_NUCL_A(KMI) + NMOD_IMM ) ) THEN
+    WRITE( YNUM2, '( I2.2 )' ) NINDICE_CCN_IMM(JSV-NSV_LIMA_IMM_NUCL_A(KMI)+1)
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_COLD_NAMES(7) ) // YNUM2
+  ELSE IF ( JSV == NSV_LIMA_HOM_HAZE_A(KMI) ) THEN
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_COLD_NAMES(8) )
+  ELSE IF ( JSV == NSV_LIMA_SPRO_A(KMI) ) THEN
+    TSVLIST_A(JSV, KMI)%CUNITS = '1'
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_WARM_NAMES(5) )
+  ELSE
+    CALL Print_msg( NVERB_FATAL, 'GEN', 'INI_NSV', 'invalid index for LIMA' )
+  END IF
+
+   TSVLIST_A(JSV, KMI)%CLONGNAME = TRIM( TSVLIST_A(JSV, KMI)%CMNHNAME )
+END DO
+
+DO JSV = NSV_ELECBEG_A(KMI), NSV_ELECEND_A(KMI)
+  IF ( JSV > NSV_ELECBEG .AND. JSV < NSV_ELECEND ) THEN
+    YUNITS = 'C kg-1'
+    WRITE( YCOMMENT, '( A6, A3, I3.3 )' ) 'X_Y_Z_', 'SVT', JSV
+  ELSE
+    YUNITS = 'kg-1'
+    WRITE( YCOMMENT, '( A6, A3, I3.3, A8 )' ) 'X_Y_Z_', 'SVT', JSV, ' (nb ions/kg)'
+  END IF
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                        &
+    CMNHNAME   = TRIM( CELECNAMES(JSV-NSV_ELECBEG_A(KMI)+1) ), &
+    CSTDNAME   = '',                                           &
+    CLONGNAME  = TRIM( CELECNAMES(JSV-NSV_ELECBEG_A(KMI)+1) ), &
+    CUNITS     = TRIM( YUNITS ),                               &
+    CDIR       = 'XY',                                         &
+    CCOMMENT   = TRIM( YCOMMENT ),                             &
+    NGRID      = 1,                                            &
+    NTYPE      = TYPEREAL,                                     &
+    NDIMS      = 3,                                            &
+    LTIMEDEP   = .TRUE.                                        )
+END DO
+
+DO JSV = NSV_LGBEG_A(KMI), NSV_LGEND_A(KMI)
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                    &
+    CMNHNAME   = TRIM( CLGNAMES(JSV-NSV_LGBEG_A(KMI)+1) ), &
+    CSTDNAME   = '',                                       &
+    CLONGNAME  = TRIM( CLGNAMES(JSV-NSV_LGBEG_A(KMI)+1) ), &
+    CUNITS     = 'm',                                      &
+    CDIR       = 'XY',                                     &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3,               &
+    NGRID      = 1,                                        &
+    NTYPE      = TYPEREAL,                                 &
+    NDIMS      = 3,                                        &
+    LTIMEDEP   = .TRUE.                                    )
+END DO
+
+DO JSV = NSV_PPBEG_A(KMI), NSV_PPEND_A(KMI)
+  WRITE( YNUM3, '( I3.3 )' ) JSV-NSV_PPBEG_A(KMI)+1
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(      &
+    CMNHNAME   = 'SVPP' // YNUM3,            &
+    CSTDNAME   = '',                         &
+    CLONGNAME  = 'SVPP' // YNUM3,            &
+    CUNITS     = 'kg kg-1',                  &
+    CDIR       = 'XY',                       &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3, &
+    NGRID      = 1,                          &
+    NTYPE      = TYPEREAL,                   &
+    NDIMS      = 3,                          &
+    LTIMEDEP   = .TRUE.                      )
+END DO
+
+#ifdef MNH_FOREFIRE
+DO JSV = NSV_FFBEG_A(KMI), NSV_FFEND_A(KMI)
+  WRITE( YNUM3, '( I3.3 )' ) JSV-NSV_FFBEG_A(KMI)+1
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(      &
+    CMNHNAME   = 'SVFF' // YNUM3,            &
+    CSTDNAME   = '',                         &
+    CLONGNAME  = 'SVFF' // YNUM3,            &
+    CUNITS     = 'kg kg-1',                  &
+    CDIR       = 'XY',                       &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3, &
+    NGRID      = 1,                          &
+    NTYPE      = TYPEREAL,                   &
+    NDIMS      = 3,                          &
+    LTIMEDEP   = .TRUE.                      )
+END DO
+#endif
+
+DO JSV = NSV_FIREBEG_A(KMI), NSV_FIREEND_A(KMI)
+  WRITE( YNUM3, '( I3.3 )' ) JSV-NSV_FIREBEG_A(KMI)+1
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(      &
+    CMNHNAME   = 'SVFIRE' // YNUM3,          &
+    CSTDNAME   = '',                         &
+    CLONGNAME  = 'SVFIRE' // YNUM3,          &
+    CUNITS     = 'kg kg-1',                  &
+    CDIR       = 'XY',                       &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3, &
+    NGRID      = 1,                          &
+    NTYPE      = TYPEREAL,                   &
+    NDIMS      = 3,                          &
+    LTIMEDEP   = .TRUE.                      )
+END DO
+
+DO JSV = NSV_CSBEG_A(KMI), NSV_CSEND_A(KMI)
+  WRITE( YNUM3, '( I3.3 )' ) JSV-NSV_CSBEG_A(KMI)
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(      &
+    CMNHNAME   = 'SVCS' // YNUM3,            &
+    CSTDNAME   = '',                         &
+    CLONGNAME  = 'SVCS' // YNUM3,            &
+    CUNITS     = 'kg kg-1',                  &
+    CDIR       = 'XY',                       &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3, &
+    NGRID      = 1,                          &
+    NTYPE      = TYPEREAL,                   &
+    NDIMS      = 3,                          &
+    LTIMEDEP   = .TRUE.                      )
+END DO
+
+DO JSV = NSV_CHEMBEG_A(KMI), NSV_CHEMEND_A(KMI)
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CNAMES(JSV-NSV_CHEMBEG_A(KMI)+1) )
+
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                    &
+    CMNHNAME   = TRIM( CNAMES(JSV-NSV_CHEMBEG_A(KMI)+1) ), &
+    CSTDNAME   = '',                                       &
+    CLONGNAME  = TRIM( CNAMES(JSV-NSV_CHEMBEG_A(KMI)+1) ), &
+    CUNITS     = 'ppv',                                    &
+    CDIR       = 'XY',                                     &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3,               &
+    NGRID      = 1,                                        &
+    NTYPE      = TYPEREAL,                                 &
+    NDIMS      = 3,                                        &
+    LTIMEDEP   = .TRUE.                                    )
+END DO
+
+DO JSV = NSV_CHICBEG_A(KMI), NSV_CHICEND_A(KMI)
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CICNAMES(JSV-NSV_CHICBEG_A(KMI)+1) )
+
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                      &
+    CMNHNAME   = TRIM( CICNAMES(JSV-NSV_CHICBEG_A(KMI)+1) ), &
+    CSTDNAME   = '',                                         &
+    CLONGNAME  = TRIM( CICNAMES(JSV-NSV_CHICBEG_A(KMI)+1) ), &
+    CUNITS     = 'ppv',                                      &
+    CDIR       = 'XY',                                       &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3,                 &
+    NGRID      = 1,                                          &
+    NTYPE      = TYPEREAL,                                   &
+    NDIMS      = 3,                                          &
+    LTIMEDEP   = .TRUE.                                      )
+END DO
+
+DO JSV = NSV_AERBEG_A(KMI), NSV_AEREND_A(KMI)
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CAERONAMES(JSV-NSV_AERBEG_A(KMI)+1) )
+
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  !Determine moment to add meaning of the ppv unit
+  JAER = JSV - NSV_AERBEG_A(KMI) + 1
+  IF ( ANY( JAER == [JP_CH_M0i, JP_CH_M0j] ) ) THEN
+    !Moment 0
+    YAEROLONGNAMES = TRIM( CAERONAMES(JAER) ) // ' [nb_aerosols/molec_{air}]'
+  ELSE IF ( ANY( JAER == [ JP_CH_SO4i, JP_CH_SO4j, JP_CH_NO3i, JP_CH_NO3j, JP_CH_H2Oi, JP_CH_H2Oj, JP_CH_NH3i, JP_CH_NH3j,   &
+                           JP_CH_OCi,  JP_CH_OCj,  JP_CH_BCi,  JP_CH_BCj,  JP_CH_DSTi, JP_CH_DSTj ] )                        &
+            .OR. ( NSOA == 10 .AND.                                                                                          &
+                   ANY( JAER == [ JP_CH_SOA1i, JP_CH_SOA1j, JP_CH_SOA2i, JP_CH_SOA2j, JP_CH_SOA3i, JP_CH_SOA3j, JP_CH_SOA4i, &
+                                  JP_CH_SOA4j, JP_CH_SOA5i, JP_CH_SOA5j, JP_CH_SOA6i, JP_CH_SOA6j, JP_CH_SOA7i, JP_CH_SOA7j, &
+                                  JP_CH_SOA8i, JP_CH_SOA8j, JP_CH_SOA9i, JP_CH_SOA9j, JP_CH_SOA10i, JP_CH_SOA10j ] )       ) ) THEN
+    !Moment 3
+    YAEROLONGNAMES = TRIM( CAERONAMES(JAER) ) // ' [molec_{aer}/molec_{air}]'
+  ELSE IF ( ( LVARSIGI .AND. JSV == JP_CH_M6i ) .OR. ( LVARSIGJ .AND. JSV == JP_CH_M6j ) ) THEN
+    !Moment 6
+    YAEROLONGNAMES = TRIM( CAERONAMES(JAER) ) // ' [um6/molec_{air}*(cm3/m3)]'
+  ELSE
+    CALL Print_msg( NVERB_WARNING, 'GEN', 'INI_NSV', 'unknown moment for AER' )
+    YAEROLONGNAMES = TRIM( CAERONAMES(JAER) )
+  END IF
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                           &
+    CMNHNAME   = TRIM( CAERONAMES(JSV-NSV_AERBEG_A(KMI)+1) ),     &
+    CSTDNAME   = '',                                              &
+    CLONGNAME  = TRIM( YAEROLONGNAMES(JSV-NSV_AERBEG_A(KMI)+1) ), &
+    CUNITS     = 'ppv',                                           &
+    CDIR       = 'XY',                                            &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3,                      &
+    NGRID      = 1,                                               &
+    NTYPE      = TYPEREAL,                                        &
+    NDIMS      = 3,                                               &
+    LTIMEDEP   = .TRUE.                                           )
+END DO
+
+DO JSV = NSV_AERDEPBEG_A(KMI), NSV_AERDEPEND_A(KMI)
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CDEAERNAMES(JSV-NSV_AERDEPBEG_A(KMI)+1) )
+
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                           &
+    CMNHNAME   = TRIM( CDEAERNAMES(JSV-NSV_AERDEPBEG_A(KMI)+1) ), &
+    CSTDNAME   = '',                                              &
+    CLONGNAME  = TRIM( CDEAERNAMES(JSV-NSV_AERDEPBEG_A(KMI)+1) ), &
+    CUNITS     = 'ppv',                                           &
+    CDIR       = 'XY',                                            &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3,                      &
+    NGRID      = 1,                                               &
+    NTYPE      = TYPEREAL,                                        &
+    NDIMS      = 3,                                               &
+    LTIMEDEP   = .TRUE.                                           )
+END DO
+
+DO JSV = NSV_DSTBEG_A(KMI), NSV_DSTEND_A(KMI)
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CDUSTNAMES(JSV-NSV_DSTBEG_A(KMI)+1) )
+
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                           &
+    CMNHNAME   = TRIM( CDUSTNAMES(JSV-NSV_DSTBEG_A(KMI)+1) ),     &
+    CSTDNAME   = '',                                              &
+    CLONGNAME  = TRIM( YDUSTLONGNAMES(JSV-NSV_DSTBEG_A(KMI)+1) ), &
+    CUNITS     = 'ppv',                                           &
+    CDIR       = 'XY',                                            &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3,                      &
+    NGRID      = 1,                                               &
+    NTYPE      = TYPEREAL,                                        &
+    NDIMS      = 3,                                               &
+    LTIMEDEP   = .TRUE.                                           )
+END DO
+
+DO JSV = NSV_DSTDEPBEG_A(KMI), NSV_DSTDEPEND_A(KMI)
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CDEDSTNAMES(JSV-NSV_DSTDEPBEG_A(KMI)+1) )
+
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                           &
+    CMNHNAME   = TRIM( CDEDSTNAMES(JSV-NSV_DSTDEPBEG_A(KMI)+1) ), &
+    CSTDNAME   = '',                                              &
+    CLONGNAME  = TRIM( CDEDSTNAMES(JSV-NSV_DSTDEPBEG_A(KMI)+1) ), &
+    CUNITS     = 'ppv',                                           &
+    CDIR       = 'XY',                                            &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3,                      &
+    NGRID      = 1,                                               &
+    NTYPE      = TYPEREAL,                                        &
+    NDIMS      = 3,                                               &
+    LTIMEDEP   = .TRUE.                                           )
+END DO
+
+DO JSV = NSV_SLTBEG_A(KMI), NSV_SLTEND_A(KMI)
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CSALTNAMES(JSV-NSV_SLTBEG_A(KMI)+1) )
+
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                           &
+    CMNHNAME   = TRIM( CSALTNAMES(JSV-NSV_SLTBEG_A(KMI)+1) ),     &
+    CSTDNAME   = '',                                              &
+    CLONGNAME  = TRIM( YSALTLONGNAMES(JSV-NSV_SLTBEG_A(KMI)+1) ), &
+    CUNITS     = 'ppv',                                           &
+    CDIR       = 'XY',                                            &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3,                      &
+    NGRID      = 1,                                               &
+    NTYPE      = TYPEREAL,                                        &
+    NDIMS      = 3,                                               &
+    LTIMEDEP   = .TRUE.                                           )
+END DO
+
+DO JSV = NSV_SLTDEPBEG_A(KMI), NSV_SLTDEPEND_A(KMI)
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CDESLTNAMES(JSV-NSV_SLTDEPBEG_A(KMI)+1) )
+
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                           &
+    CMNHNAME   = TRIM( CDESLTNAMES(JSV-NSV_SLTDEPBEG_A(KMI)+1) ), &
+    CSTDNAME   = '',                                              &
+    CLONGNAME  = TRIM( CDESLTNAMES(JSV-NSV_SLTDEPBEG_A(KMI)+1) ), &
+    CUNITS     = 'ppv',                                           &
+    CDIR       = 'XY',                                            &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3,                      &
+    NGRID      = 1,                                               &
+    NTYPE      = TYPEREAL,                                        &
+    NDIMS      = 3,                                               &
+    LTIMEDEP   = .TRUE.                                           )
+END DO
+
+DO JSV = NSV_SNWBEG_A(KMI), NSV_SNWEND_A(KMI)
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                       &
+    CMNHNAME   = TRIM( CSNOWNAMES(JSV-NSV_SNWBEG_A(KMI)+1) ), &
+    CSTDNAME   = '',                                          &
+    CLONGNAME  = TRIM( CSNOWNAMES(JSV-NSV_SNWBEG_A(KMI)+1) ), &
+    CUNITS     = 'kg kg-1',                                   &
+    CDIR       = 'XY',                                        &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3,                  &
+    NGRID      = 1,                                           &
+    NTYPE      = TYPEREAL,                                    &
+    NDIMS      = 3,                                           &
+    LTIMEDEP   = .TRUE.                                       )
+END DO
+
+!Check if there is at most 1 LINOX scalar variable
+!if not, the name must be modified and different for all of them
+IF ( NSV_LNOX_A(KMI) > 1 ) &
+  CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_NSV', 'NSV_LNOX_A>1: problem with the names of the corresponding scalar variables' )
+
+DO JSV = NSV_LNOXBEG_A(KMI), NSV_LNOXEND_A(KMI)
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = 'LINOX'
+
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(      &
+    CMNHNAME   = 'LINOX',                    &
+    CSTDNAME   = '',                         &
+    CLONGNAME  = 'LINOX',                    &
+    CUNITS     = 'ppv',                      &
+    CDIR       = 'XY',                       &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3, &
+    NGRID      = 1,                          &
+    NTYPE      = TYPEREAL,                   &
+    NDIMS      = 3,                          &
+    LTIMEDEP   = .TRUE.                      )
+END DO
+
+IF ( ICHIDX /= NSV_CHEM_LIST_A(KMI) ) &
+  CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_NSV', 'ICHIDX /= NSV_CHEM_LIST_A(KMI)' )
+
+END SUBROUTINE INI_NSV
diff --git a/src/mesonh/ext/init_aerosol_concentration.f90 b/src/mesonh/ext/init_aerosol_concentration.f90
new file mode 100644
index 0000000000000000000000000000000000000000..fc4becd44a533d13ca84300d098be7872458d4f6
--- /dev/null
+++ b/src/mesonh/ext/init_aerosol_concentration.f90
@@ -0,0 +1,157 @@
+!MNH_LIC Copyright 2013-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
+!MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
+!######################################
+ MODULE MODI_INIT_AEROSOL_CONCENTRATION
+!######################################
+!
+INTERFACE INIT_AEROSOL_CONCENTRATION
+   SUBROUTINE INIT_AEROSOL_CONCENTRATION(PRHODREF, PSVT, PZZ)
+!
+     REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF !Air Density [kg/m**3]
+     REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVT     !Particles Concentration [/m**3]
+     REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ      ! Height (z)
+!
+   END SUBROUTINE INIT_AEROSOL_CONCENTRATION
+END INTERFACE INIT_AEROSOL_CONCENTRATION
+!
+END MODULE MODI_INIT_AEROSOL_CONCENTRATION
+!
+!     ##########################################################
+      SUBROUTINE INIT_AEROSOL_CONCENTRATION(PRHODREF, PSVT, PZZ)
+!     ##########################################################
+!!
+!!    PURPOSE
+!!    -------
+!!    Define the aerosol distributions
+!! 
+!!
+!!      MODD_BLANKn :
+!!      CDUMMY2 : CCN ou IFN pour le panache
+!!      NDUMMY1 : hauteur base du panache
+!!      NDUMMY2 : hauteur sommet du panache
+!!      XDUMMY8 : Concentration du panache (N/cm3 pour des CCN, N/L pour des IFN)
+!!
+!!
+!!    AUTHOR
+!!    ------
+!!      J.-P. Pinty      * Laboratoire d'Aerologie*
+!!      S.    Berthet    * Laboratoire d'Aerologie*
+!!      B.    Vié        * Laboratoire d'Aerologie*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original             ??/??/13 
+!!      Modification    01/2016  (JP Pinty) Add LIMA
+!!
+!!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+USE MODD_NSV
+USE MODD_PARAM_n,    ONLY : CCLOUD
+USE MODD_PARAM_LIMA, ONLY : NMOM_C, LACTI, NMOD_CCN, LSCAV, LAERO_MASS,     &
+                            XCCN_CONC, LCCN_HOM,                            &
+                            NMOM_I, LNUCL, NMOD_IFN, LMEYERS,               &
+                            XIFN_CONC, LIFN_HOM
+USE MODD_PARAMETERS, ONLY : JPVEXT
+USE MODD_BLANK_n,      ONLY : CDUMMY2, NDUMMY1, NDUMMY2, XDUMMY8
+!
+IMPLICIT NONE
+!
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF !Air Density [kg/m**3]
+REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVT     !Particles Concentration    
+                                                    ![particles/kg of dry air]
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ      ! Height (z)
+!
+! Local variables
+INTEGER                                 :: JMOD_IFN
+INTEGER                                 :: JSV, JINIT
+INTEGER                                 :: IKB, IKE
+!
+!-------------------------------------------------------------------------------
+!
+!
+!*initialization of N_FREE_CCN/N_ACTIVATED_CCN et N_FREE_IN/N_ACTIVATED_IN
+!
+!
+IF ( NMOM_C.GE.2 .AND. LACTI ) THEN
+  DO JSV = NSV_LIMA_CCN_FREE, NSV_LIMA_CCN_ACTI+NMOD_CCN-1
+    PSVT(:,:,:,JSV) = 0.0
+  ENDDO
+  IKB = 1+JPVEXT
+  IKE = SIZE(PSVT,3)-JPVEXT
+!
+! Initialisation des concentrations en CCN
+!
+!
+  IF (LCCN_HOM) THEN
+! concentration homogène (en nombre par m3) sur la verticale
+    DO JSV = 1, NMOD_CCN
+      PSVT(:,:,IKB:IKE,NSV_LIMA_CCN_FREE+JSV-1) = &
+        XCCN_CONC(JSV)*1.0E6 / PRHODREF(:,:,IKB:IKE)
+    END DO
+  ELSE
+! concentration décroissante selon z
+    DO JSV = 1, NMOD_CCN
+      WHERE (PZZ(:,:,:) .LE. 1000.) 
+         PSVT(:,:,:,NSV_LIMA_CCN_FREE+JSV-1) = XCCN_CONC(JSV)*1.0E6 / PRHODREF(:,:,:)
+      ELSEWHERE (PZZ(:,:,:) .LE. 10000.)
+         PSVT(:,:,:,NSV_LIMA_CCN_FREE+JSV-1) = XCCN_CONC(JSV)*1.0E6 &
+                 / PRHODREF(:,:,:) * EXP(-LOG(XCCN_CONC(JSV)/0.01)*PZZ(:,:,:)/10000.)
+      ELSEWHERE
+         PSVT(:,:,:,NSV_LIMA_CCN_FREE+JSV-1) = 0.01*1.0E6 / PRHODREF(:,:,:)
+      ENDWHERE
+    END DO
+  ENDIF
+END IF ! LWARM AND LACTI
+!
+! Initialisation des concentrations en IFN
+!
+IF ( NMOM_I.GE.2 .AND. LNUCL .AND. (.NOT. LMEYERS) ) THEN
+  DO JSV = NSV_LIMA_IFN_FREE, NSV_LIMA_IFN_NUCL+NMOD_IFN-1
+    PSVT(:,:,:,JSV) = 0.0
+  ENDDO
+  IKB = 1+JPVEXT
+  IKE = SIZE(PSVT,3)-JPVEXT
+!
+  IF (LIFN_HOM) THEN
+! concentration homogène (en nombre par m3) sur la verticale
+    DO JSV = 1, NMOD_IFN
+      PSVT(:,:,IKB:IKE,NSV_LIMA_IFN_FREE+JSV-1) = &
+             XIFN_CONC(JSV)*1.0E3 / PRHODREF(:,:,IKB:IKE)
+     END DO
+  ELSE
+! concentration décroissante selon z
+    DO JSV = 1, NMOD_IFN
+      WHERE (PZZ(:,:,:) .LE. 1000.)
+         PSVT(:,:,:,NSV_LIMA_IFN_FREE+JSV-1) = XIFN_CONC(JSV)*1.0E3 / PRHODREF(:,:,:)
+      ELSEWHERE (PZZ(:,:,:) .LE. 10000.)
+         PSVT(:,:,:,NSV_LIMA_IFN_FREE+JSV-1) = XIFN_CONC(JSV)*1.0E3 &
+                 / PRHODREF(:,:,:) * EXP(-LOG(XIFN_CONC(JSV)/1.)*PZZ(:,:,:)/10000.)
+      ELSEWHERE
+         PSVT(:,:,:,NSV_LIMA_IFN_FREE+JSV-1) = 1*1.0E3 / PRHODREF(:,:,:)
+      ENDWHERE
+    END DO
+  ENDIF
+END IF ! LCOLD AND LNUCL AND NOT LMEYERS
+!
+!
+! Cas d'un panache de "pollution", concentration homogène dans le panache :
+!
+SELECT CASE (CDUMMY2)
+  CASE ('CCN')
+    PSVT(:,:,:,NSV_LIMA_CCN_FREE+NMOD_CCN-1)=0.
+    WHERE ( (PZZ(:,:,:) .GE. NDUMMY1) .AND. (PZZ(:,:,:) .LE. NDUMMY2) ) &
+      PSVT(:,:,:,NSV_LIMA_CCN_FREE+NMOD_CCN-1)=XDUMMY8*1.0E6 / PRHODREF(:,:,:)
+  CASE ('IFN')
+    PSVT(:,:,:,NSV_LIMA_IFN_FREE+NMOD_IFN-1)=0.
+    WHERE ( (PZZ(:,:,:) .GE. NDUMMY1) .AND. (PZZ(:,:,:) .LE. NDUMMY2) ) &
+      PSVT(:,:,:,NSV_LIMA_IFN_FREE+NMOD_IFN-1)=XDUMMY8*1.0E3 / PRHODREF(:,:,:)
+END SELECT
+!
+! 
+END SUBROUTINE INIT_AEROSOL_CONCENTRATION
diff --git a/src/mesonh/ext/modeln.f90 b/src/mesonh/ext/modeln.f90
new file mode 100644
index 0000000000000000000000000000000000000000..b5ab334898edb2435108ee39274f9f58f0bd6ee0
--- /dev/null
+++ b/src/mesonh/ext/modeln.f90
@@ -0,0 +1,2414 @@
+!MNH_LIC Copyright 1994-2023 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
+!MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
+!     ###################
+      MODULE MODI_MODEL_n
+!     ###################
+!
+INTERFACE
+!
+       SUBROUTINE MODEL_n( KTCOUNT, TPBAKFILE, TPDTMODELN, OEXIT )
+!
+USE MODD_IO,        ONLY: TFILEDATA
+USE MODD_TYPE_DATE, ONLY: DATE_TIME
+!
+INTEGER,                  INTENT(IN)    :: KTCOUNT    ! Temporal loop index of model KMODEL
+TYPE(TFILEDATA), POINTER, INTENT(OUT)   :: TPBAKFILE  ! Pointer for backup file
+TYPE(DATE_TIME),          INTENT(OUT)   :: TPDTMODELN ! Time of current model computation
+LOGICAL,                  INTENT(INOUT) :: OEXIT      ! Switch for the end of the temporal loop
+!
+END SUBROUTINE MODEL_n
+!
+END INTERFACE
+!
+END MODULE MODI_MODEL_n
+
+!     ################################### 
+      SUBROUTINE MODEL_n( KTCOUNT, TPBAKFILE, TPDTMODELN, OEXIT )
+!     ###################################
+!
+!!****  *MODEL_n * -monitor of the model version _n 
+!!
+!!    PURPOSE
+!!    -------
+!       The purpose of this routine is to build up a typical model version
+!     by sequentially calling the specialized routines.
+!
+!!**  METHOD
+!!    ------
+!!      Some preliminary initializations are performed in the first section.
+!!    Then, specialized routines are called to update the guess of the future
+!!    instant XRxxS of the variable xx by adding the effects of all the
+!!    different sources of evolution.
+!!
+!!              (guess of xx at t+dt) * Rhod_ref * Jacobian
+!!      XRxxS = -------------------------------------------
+!!                           2 dt
+!!
+!!      At this level, the informations are transferred with a USE association
+!!    from the INIT step, where the modules have been previously filled. The
+!!    transfer to the subroutines computing each source term is performed by
+!!    argument in order to avoid repeated compilations of these subroutines.
+!!      This monitor model_n, must therefore be duplicated for each model,
+!!    model1 corresponds in this case to the outermost model, model2 is used
+!!    for the first level of gridnesting,....  
+!!      The effect of all parameterizations is computed in PHYS_PARAM_n, which
+!!    is itself a monitor. This is due to a possible large number of
+!!    parameterizations, which can be activated and therefore, will require a
+!!    very large list of arguments. To circumvent this problem, we transfer by
+!!    a USE association, the necessary informations in this monitor, which will
+!!    dispatch the pertinent information to every parametrization.
+!!      Some elaborated diagnostics, LES tools, budget storages are also called
+!!    at this level because they require informations about the fields at every
+!!    timestep.
+!!
+!!
+!!    EXTERNAL
+!!    --------
+!!      Subroutine IO_File_open: to open a file
+!!      Subroutine WRITE_DESFM: to write the descriptive part of a FMfile
+!!      Subroutine WRITE_LFIFM: to write the binary part of a FMfile
+!!      Subroutine SET_MASK   : to compute all the masks selected for budget
+!!                         computations
+!!      Subroutine BOUNDARIES   : set the fields at the marginal points in every
+!!                         directions according the selected boundary conditions
+!!      Subroutine INITIAL_GUESS: initializes the guess of the future instant
+!!      Subroutine LES_FLX_SPECTRA: computes the resolved fluxes and the
+!!                     spectra of some quantities when running in LES mode.
+!!      Subroutine ADVECTION: computes the advection terms.
+!!      Subroutine DYN_SOURCES: computes the curvature, Coriolis, gravity terms.
+!!      Subroutine NUM_DIFF: applies the fourth order numerical diffusion.
+!!      Subroutine RELAXATION: performs the relaxation to Larger Scale fields
+!!                             in the upper levels and outermost vertical planes
+!!      Subroutine PHYS_PARAM_n : computes the parameterized physical terms
+!!      Subroutine RAD_BOUND: prepares the velocity normal components for the bc.
+!!      Subroutine RESOLVED_CLOUD : computes the sources terms for water in any
+!!                                  form
+!!      Subroutine PRESSURE : computes the pressure gradient term and the
+!!                            absolute pressure
+!!      Subroutine EXCHANGE : updates the halo of each subdomains
+!!      Subroutine ENDSTEP : advances in time the  fields.
+!!      Subroutines UVW_LS_COUPLING and SCALAR_LS_COUPLING:
+!!                                 compute the large scale fields, used to
+!!                                 couple Model_n with outer informations.
+!!      Subroutine ENDSTEP_BUDGET: writes the budget informations.
+!!      Subroutine IO_File_close: closes a file
+!!      Subroutine DATETIME_CORRECTDATE: transform the current time in GMT
+!!      Subroutine FORCING : computes forcing terms
+!!      Subroutine ADD3DFIELD_ll : add a field to 3D-list
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!          MODD_DYN
+!!          MODD_CONF
+!!          MODD_NESTING
+!!          MODD_BUDGET
+!!          MODD_PARAMETERS
+!!          MODD_CONF_n
+!!          MODD_CURVCOR_n
+!!          MODD_DYN_n
+!!          MODD_DIM_n
+!!          MODD_ADV_n
+!!          MODD_FIELD_n
+!!          MODD_LSFIELD_n
+!!          MODD_GRID_n
+!!          MODD_METRICS_n
+!!          MODD_LBC_n
+!!          MODD_PARAM_n
+!!          MODD_REF_n
+!!          MODD_LUNIT_n
+!!          MODD_OUT_n
+!!          MODD_TIME_n
+!!          MODD_TURB_n
+!!          MODD_CLOUDPAR_n
+!!          MODD_TIME
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!    AUTHOR
+!!    ------
+!!      J.-P. Pinty                  * LA *
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    15/09/94
+!!      Modification 20/10/94  (J.Stein) for the outputs and abs_layers routines
+!!      Modification 10/11/94  (J.Stein) change ABS_LAYER_FIELDS call
+!!      Modification 16/11/94  (J.Stein) add call to the renormalization
+!!      Modification 17/11/94  (J.-P. Lafore and J.-P. Pinty) call NUM_DIFF
+!!      Modification 08/12/94  (J.Stein) cleaning + remove (RENORM + ABS_LAYER..
+!!                             ..) + add RELAXATION + LS fiels in the arguments
+!!      Modification 19/12/94  (J.Stein) switch for the num diff
+!!      Modification 22/12/94  (J.Stein) update tdtcur + change dyn_source call
+!!      Modification 05/01/95  (J.Stein) add the parameterization monitor
+!!      Modification 09/01/95  (J.Stein) add the 1D switch
+!!      Modification 10/01/95  (J.Stein) displace the TDTCUR computation
+!!      Modification 03/01/95  (J.-P. Lafore) Absolute pressure diagnosis
+!!      Modification Jan 19, 1995 (J. Cuxart) Shunt the DYN_SOURCES in 1D cases.
+!!      Modification Jan 24, 1995 (J. Stein)  Interchange Boundaries and
+!!                           Initial_guess to correct a bug in 2D configuration
+!!      Modification Feb 02, 1995 (I.Mallet) update BOUNDARIES and RAD_BOUND
+!!                                           calls
+!!      Modification Mar 10, 1995 (I.Mallet) add call to SET_COUPLING
+!!                   March,21, 1995 (J. Stein) remove R from the historical var.
+!!                   March,26, 1995 (J. Stein) add the EPS variable
+!!                   April 18, 1995 (J. Cuxart) add the LES call
+!!                   Sept 20,1995 (Lafore) coupling for the dry mass Md
+!!                   Nov   2,1995 (Stein) displace the temporal counter increase
+!!                   Jan   2,1996 (Stein) rm the test on the temporal counter
+!!      Modification Feb   5,1996 (J. Vila) implementation new advection
+!!                                          schemes for scalars
+!!      Modification Feb  20,1996 (J.Stein) doctor norm
+!!                   Dec95 - Jul96 (Georgelin, Pinty, Mari, Suhre) FORCING
+!!                   June 17,1996 (Vincent, Lafore, Jabouille)
+!!                                        statistics of computing time
+!!                   Aug 8, 1996 (K. Suhre) add chemistry
+!!                   October 12, 1996 (J. Stein) save the PSRC value
+!!                   Sept 05,1996 (V.Masson) print of loop index for debugging
+!!                                           purposes
+!!                   July 22,1996 (Lafore) improve write of computing time statistics
+!!                   July 29,1996 (Lafore) nesting introduction
+!!                   Aug.  1,1996 (Lafore) synchronization between models
+!!                   Sept. 4,1996 (Lafore) modification of call to routine SET_COUPLING
+!!                                         now split in 2 routines
+!!                                         (UVW_LS_COUPLING and SCALAR_LS_COUPLING)
+!!                   Sept  5,1996 (V.Masson) print of loop index for debugging
+!!                                           purposes
+!!                   Sept 25,1996 (V.Masson) test for coupling performed here
+!!                   Oct. 29,1996 (Lafore)   one-way nesting implementation
+!!                   Oct. 12,1996 (J. Stein) save the PSRC value
+!!                   Dec. 12,1996 (Lafore)   change call to RAD_BOUND
+!!                   Dec. 21,1996 (Lafore)   two-way nesting implementation
+!!                   Mar. 12,1997 (Lafore)   introduction of "surfacic" LS fields
+!!                   Nov 18, 1996 (J.-P. Pinty) FORCING revisited (translation)
+!!                   Dec 04, 1996 (J.-P. Pinty) include mixed-phase clouds
+!!                   Dec 20, 1996 (J.-P. Pinty) update the budgets
+!!                   Dec 23, 1996 (J.-P. Pinty) add the diachronic file control
+!!                   Jan 11, 1997 (J.-P. Pinty) add the deep convection control
+!!                   Dec  20,1996 (V.Masson) call boundaries before the writing
+!!                   Fev 25, 1997 (P.Jabouille) modify the LES tools
+!!                   April 3,1997 (Lafore)      merging of the nesting
+!!                                              developments on MASTER3
+!!                   Jul.  8,1997 (Lafore)  print control for nesting (NVERB>=7)
+!!                   Jul. 28,1997 (Masson)  supress LSTEADY_DMASS
+!!                   Aug. 19,1997 (Lafore)  full Clark's formulation introduction
+!!                   Sept 26,1997 (Lafore)  LS source calculation at restart
+!!                                          (temporarily test to have LS at instant t)
+!!                   Jan. 28,1998 (Bechtold) add SST forcing
+!!                   fev. 10,1998 (Lafore)  RHODJ computation and storage for budget
+!!                   Jul. 10,1998 (Stein )  sequentiel loop for nesting
+!!                   Apr. 07,1999 (Stein )  cleaning of the nesting subroutines
+!!                   oct. 20,1998 (Jabouille) //
+!!                   oct. 20,2000 (J.-P. Pinty) add the C2R2 scheme
+!!                   fev. 01,2001 (D.Gazen) add module MODD_NSV for NSV variables
+!!                   mar,  4,2002 (V.Ducrocq) call to temporal series
+!!                   mar, 8, 2001 (V. Masson) advection of perturbation of theta in neutral cases.
+!!                   Nov, 6, 2002 (V. Masson) time counters for budgets & LES
+!!                   mars 20,2001 (Pinty)   add ICE4 and C3R5 options
+!!                   jan. 2004    (Masson)  surface externalization
+!!                   sept 2004 (M. Tomasini) Cloud mixing length modification
+!!                   june 2005 (P. Tulet)  add aerosols / dusts
+!!                   Jul. 2005 (N. Asencio)  two_way and phys_param calls: 
+!!                             Add the surface parameters : precipitating 
+!!                             hydrometeors, Short and Long Wave , MASKkids array 
+!!                   Fev. 2006 (M. Leriche) add aqueous phase chemistry
+!!                   april 2006 (T.Maric) Add halo related to 4th order advection scheme
+!!                   May 2006 Remove KEPS
+!!                   Oct 2008 (C.Lac) FIT for variables advected with PPM
+!!                   July 2009 : Displacement of surface diagnostics call to be
+!!                               coherent with  surface diagnostics obtained with DIAG
+!!                   10/11/2009 (P. Aumond) Add mean moments
+!!                   Nov, 12, 2009 (C. Barthe) add cloud electrification and lightning flashes
+!!                   July 2010 (M. Leriche) add ice phase chemical species
+!!                   April 2011 (C.Lac) : Remove instant M 
+!!                   April 2011 (C.Lac, V.Masson) : Time splitting for advection
+!!      J.Escobar 21/03/2013: for HALOK comment all NHALO=1 test
+!!       P. Tulet      Nov 2014 accumulated moles of aqueous species that fall at the surface   
+!!                   Dec 2014 (C.Lac) : For reproducibility START/RESTA
+!!      J.Escobar 20/04/2015: missing UPDATE_HALO before UPDATE_HALO2
+!!              July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for
+!!                                      aircraft, ballon and profiler
+!!       C.Lac    11/09/2015: correction of the budget due to FIT temporal scheme
+!!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
+!!                   Sep 2015 (S. Bielli) : Remove YDADFILE from argument call 
+!                              of write_phys_param
+!!      J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files
+!!      M.Mazoyer : 04/2016      DTHRAD used for radiative cooling when LACTIT
+!!!      Modification    01/2016  (JP Pinty) Add LIMA
+!!  06/2016     (G.Delautier) phasage surfex 8
+!!      M.Leriche : 03/2016 Move computation of accumulated chem. in rain to ch_monitor
+!!                  09/2016 Add filter on negative values on AERDEP SV before relaxation
+!!                  10/2016  (C.Lac) _ Correction on the flag for Strang splitting
+!!                                  to insure reproducibility between START and RESTA
+!!                                  _  Add OSPLIT_WENO
+!!                                  _ Add droplet deposition 
+!!                   10/2016 (M.Mazoyer) New KHKO output fields
+!!      P.Wautelet : 11/07/2016 : removed MNH_NCWRIT define
+!!                   09/2017 Q.Rodier add LTEND_UV_FRC
+!!                   10/2017 (C.Lac) Necessity to have chemistry processes as
+!!                            the las process modifying XRSVS
+!!  01/2018      (G.Delautier) SURFEX 8.1
+!!  03/2018     (P.Wautelet)   replace ADD_FORECAST_TO_DATE by DATETIME_CORRECTDATE
+!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!!                  07/2017  (V. Vionnet) : Add blowing snow scheme 
+!!      S. Riette : 11/2016 Add ZPABST to keep pressure constant during timestep
+!!                   01/2018 (C.Lac) Add VISCOSITY
+!!  Philippe Wautelet: 21/01/2019: add LIO_ALLOW_NO_BACKUP and LIO_NO_WRITE to modd_io_ll
+!                                  to allow to disable writes (for bench purposes)
+!  P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines
+!                          (nsubfiles_ioz is now determined in IO_File_add2list)
+!!                   02/2019 C.Lac add rain fraction as an output field
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!  P. Wautelet 28/03/2019: use MNHTIME for time measurement variables
+!  P. Wautelet 28/03/2019: use TFILE instead of unit number for set_iluout_timing
+!  P. Wautelet 19/04/2019: removed unused dummy arguments and variables
+!  P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function
+!  P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine
+!  J. Escobar  09/07/2019: norme Doctor -> Rename Module Type variable TZ -> T
+!  J. Escobar  09/07/2019: for bug in management of XLSZWSM variable, add/use specific 2D TLSFIELD2D_ll pointer
+!  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
+!  J. Escobar  27/09/2019: add missing report timing of RESOLVED_ELEC
+!  P. Wautelet 02-03/2020: use the new data structures and subroutines for budgets
+!  P. Wautelet 12/10/2020: Write_les_n: remove HLES_AVG dummy argument and group all 4 calls
+!  F. Auguste  01/02/2021: add IBM
+!  T. Nagel    01/02/2021: add turbulence recycling
+!  P. Wautelet 19/02/2021: add NEGA2 term for SV budgets
+!  J.L. Redelsperger 03/2021: add Call NHOA_COUPLN (coupling O & A LES version)
+!  A. Costes      12/2021: add Blaze fire model
+!  C. Barthe   07/04/2022: deallocation of ZSEA
+!  P. Wautelet 08/12/2022: bugfix if no TDADFILE
+!  P. Wautelet 13/01/2023: manage close of backup files outside of MODEL_n
+!                          (useful to close them in reverse model order (child before parent, needed by WRITE_BALLOON_n)
+!!-------------------------------------------------------------------------------
+!
+!*       0.     DECLARATIONS
+!               ------------
+!
+USE MODD_2D_FRC
+USE MODD_ADV_n
+USE MODD_AIRCRAFT_BALLOON
+USE MODD_ARGSLIST_ll,     ONLY : LIST_ll
+USE MODD_BAKOUT
+USE MODD_BIKHARDT_n
+USE MODD_BLANK_n
+USE MODD_BLOWSNOW
+USE MODD_BLOWSNOW_n
+use modd_budget,          only: cbutype, lbu_ru, lbu_rv, lbu_rw, lbudget_u, lbudget_v, lbudget_w, lbudget_sv, lbu_enable, &
+                                NBUDGET_U, NBUDGET_V, NBUDGET_W, NBUDGET_SV1, nbumod, nbutime,                            &
+                                tbudgets, tbuconf, tburhodj,                                                                       &
+                                xtime_bu, xtime_bu_process
+USE MODD_CH_AERO_n,      ONLY: XSOLORG, XMI
+USE MODD_CH_MNHC_n,      ONLY: LUSECHEM,LCH_CONV_LINOX,LUSECHAQ,LUSECHIC, &
+                               LCH_INIT_FIELD
+USE MODD_CLOUD_MF_n
+USE MODD_CLOUDPAR_n
+USE MODD_CONF
+USE MODD_CONF_n
+USE MODD_CST,            ONLY: CST
+USE MODD_CURVCOR_n
+USE MODD_DEEP_CONVECTION_n
+USE MODD_DIM_n
+USE MODD_DIMPHYEX,       ONLY: DIMPHYEX_t
+USE MODD_DRAG_n
+USE MODD_DUST,           ONLY: LDUST
+USE MODD_DYN
+USE MODD_DYN_n
+USE MODD_DYNZD
+USE MODD_DYNZD_n
+USE MODD_ELEC_DESCR
+USE MODD_EOL_MAIN
+USE MODD_FIELD_n
+USE MODD_FRC
+USE MODD_FRC_n
+USE MODD_GET_n
+USE MODD_GRID,           ONLY: XLONORI,XLATORI
+USE MODD_GRID_n
+USE MODD_IBM_PARAM_n,    ONLY: CIBM_ADV, LIBM, LIBM_TROUBLE, XIBM_LS
+USE MODD_ICE_C1R3_DESCR, ONLY: XRTMIN_C1R3=>XRTMIN
+USE MODD_IO,             ONLY: LIO_NO_WRITE, TFILEDATA, TFILE_SURFEX, TFILE_DUMMY
+USE MODD_LBC_n
+USE MODD_LES
+USE MODD_LES_BUDGET
+USE MODD_LIMA_PRECIP_SCAVENGING_n
+USE MODD_LSFIELD_n
+USE MODD_LUNIT,          ONLY: TOUTDATAFILE
+USE MODD_LUNIT_n,        ONLY: TDIAFILE,TINIFILE,TINIFILEPGD,TLUOUT
+USE MODD_MEAN_FIELD
+USE MODD_MEAN_FIELD_n
+USE MODD_METRICS_n
+USE MODD_MNH_SURFEX_n
+USE MODD_NESTING
+USE MODD_NSV
+USE MODD_NUDGING_n
+USE MODD_OUT_n
+USE MODD_PARAM_C1R3,     ONLY: NSEDI => LSEDI, NHHONI => LHHONI
+USE MODD_PARAM_C2R2,     ONLY: NSEDC => LSEDC, NRAIN => LRAIN, NACTIT => LACTIT,LACTTKE,LDEPOC
+USE MODD_PARAMETERS
+USE MODD_PARAM_ICE,      ONLY: LWARM,LSEDIC,LCONVHG,LDEPOSC
+USE MODD_PARAM_LIMA,     ONLY: MSEDC => LSEDC, NMOM_C, NMOM_R, &
+                               MACTIT => LACTIT, LSCAV, NMOM_I,                 &
+                               MSEDI => LSEDI, MHHONI => LHHONI, NMOM_H,        &
+                               XRTMIN_LIMA=>XRTMIN, MACTTKE=>LACTTKE
+USE MODD_PARAM_MFSHALL_n
+USE MODD_PARAM_n
+USE MODD_PAST_FIELD_n
+USE MODD_PRECIP_n
+use modd_precision,      only: MNHTIME
+USE MODD_PROFILER_n
+USE MODD_RADIATIONS_n,   ONLY: XTSRAD,XSCAFLASWD,XDIRFLASWD,XDIRSRFSWD, XAER, XDTHRAD
+USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN
+USE MODD_RECYCL_PARAM_n, ONLY: LRECYCL
+USE MODD_REF,            ONLY: LCOUPLES
+USE MODD_REF_n
+USE MODD_SALT,           ONLY: LSALT
+USE MODD_SERIES,         ONLY: LSERIES
+USE MODD_SERIES_n,       ONLY: NFREQSERIES
+USE MODD_STATION_n
+USE MODD_SUB_MODEL_n
+USE MODD_TIME
+USE MODD_TIME_n 
+USE MODD_TIMEZ
+USE MODD_TURB_CLOUD,     ONLY: NMODEL_CLOUD,CTURBLEN_CLOUD,XCEI
+USE MODD_TURB_n
+USE MODD_TYPE_DATE,      ONLY: DATE_TIME
+USE MODD_VISCOSITY
+!
+USE MODE_AIRCRAFT_BALLOON
+use mode_budget,           only: Budget_store_init, Budget_store_end
+USE MODE_DATETIME
+USE MODE_ELEC_ll
+USE MODE_GRIDCART
+USE MODE_GRIDPROJ
+USE MODE_IO_FIELD_WRITE,   only: IO_Field_user_write, IO_Fieldlist_write, IO_Header_write
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list
+USE MODE_ll
+#ifdef MNH_IOLFI
+use mode_menu_diachro,     only: MENU_DIACHRO
+#endif
+USE MODE_MNH_TIMING
+USE MODE_MODELN_HANDLER
+USE MODE_MPPDB
+USE MODE_MSG
+USE MODE_ONE_WAY_n
+USE MODE_WRITE_AIRCRAFT_BALLOON
+use mode_write_les_n,               only: Write_les_n
+use mode_write_lfifmn_fordiachro_n, only: WRITE_LFIFMN_FORDIACHRO_n
+USE MODE_WRITE_PROFILER_n,          ONLY: WRITE_PROFILER_n
+USE MODE_WRITE_STATION_n,           ONLY: WRITE_STATION_n
+!
+USE MODI_ADDFLUCTUATIONS
+USE MODI_ADVECTION_METSV
+USE MODI_ADVECTION_UVW
+USE MODI_ADVECTION_UVW_CEN
+USE MODI_ADV_FORCING_n
+USE MODI_AER_MONITOR_n
+USE MODI_BLOWSNOW
+USE MODI_BOUNDARIES
+USE MODI_BUDGET_FLAGS
+USE MODI_CART_COMPRESS
+USE MODI_CH_MONITOR_n
+USE MODI_DIAG_SURF_ATM_N
+USE MODI_DYN_SOURCES
+USE MODI_END_DIAG_IN_RUN
+USE MODI_ENDSTEP
+USE MODI_ENDSTEP_BUDGET
+USE MODI_EXCHANGE
+USE MODI_FORCING
+USE MODI_FORC_SQUALL_LINE
+USE MODI_FORC_WIND
+USE MODI_GET_HALO
+USE MODI_GRAVITY_IMPL
+USE MODI_IBM_INIT
+USE MODI_IBM_FORCING
+USE MODI_IBM_FORCING_TR
+USE MODI_IBM_FORCING_ADV
+USE MODI_INI_DIAG_IN_RUN
+USE MODI_INI_LG
+USE MODI_INI_MEAN_FIELD
+USE MODI_INITIAL_GUESS
+USE MODI_LES_INI_TIMESTEP_n
+USE MODI_LES_N
+USE MODI_LIMA_PRECIP_SCAVENGING
+USE MODI_LS_COUPLING
+USE MODI_MASK_COMPRESS
+USE MODI_MEAN_FIELD
+USE MODI_MNHGET_SURF_PARAM_n
+USE MODI_MNHWRITE_ZS_DUMMY_n
+USE MODI_NUDGING
+USE MODI_NUM_DIFF
+USE MODI_PHYS_PARAM_n
+USE MODI_PRESSUREZ
+USE MODI_PROFILER_n
+USE MODI_RAD_BOUND
+USE MODI_RECYCLING
+USE MODI_RELAX2FW_ION 
+USE MODI_RELAXATION
+USE MODI_REL_FORCING_n
+USE MODI_RESOLVED_CLOUD
+USE MODI_RESOLVED_ELEC_n
+USE MODI_SERIES_N
+USE MODI_SETLB_LG
+USE MODI_SET_MASK
+USE MODI_SHUMAN
+USE MODI_SPAWN_LS_n
+USE MODI_STATION_n
+USE MODI_TURB_CLOUD_INDEX
+USE MODI_TWO_WAY
+USE MODI_UPDATE_NSV
+USE MODI_VISCOSITY
+USE MODI_WRITE_DESFM_n
+USE MODI_WRITE_DIAG_SURF_ATM_N
+USE MODI_WRITE_LFIFM_n
+USE MODI_WRITE_SERIES_n
+USE MODI_WRITE_SURF_ATM_N
+!
+USE MODD_FIRE_n
+IMPLICIT NONE
+!
+!*       0.1   declarations of arguments
+!
+!
+!
+INTEGER,                  INTENT(IN)    :: KTCOUNT    ! Temporal loop index of model KMODEL
+TYPE(TFILEDATA), POINTER, INTENT(OUT)   :: TPBAKFILE  ! Pointer for backup file
+TYPE(DATE_TIME),          INTENT(OUT)   :: TPDTMODELN ! Time of current model computation
+LOGICAL,                  INTENT(INOUT) :: OEXIT      ! Switch for the end of the temporal loop
+!
+!*       0.2   declarations of local variables
+!
+INTEGER :: ILUOUT      ! Logical unit number for the output listing
+INTEGER :: IIU,IJU,IKU ! array size in first, second and third dimensions
+INTEGER :: IIB,IIE,IJB,IJE ! index values for the physical subdomain
+INTEGER :: JSV,JRR     ! Loop index for scalar and moist variables
+INTEGER  :: INBVAR              ! number of HALO2_lls to allocate
+INTEGER  :: IINFO_ll            ! return code of parallel routine
+INTEGER :: IVERB                ! LFI verbosity level
+LOGICAL :: GSTEADY_DMASS        ! conditional call to mass computation
+!
+                                ! for computing time analysis
+REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME, ZTIME1, ZTIME2, ZEND, ZTOT, ZALL, ZTOT_PT, ZBLAZETOT
+REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME_STEP,ZTIME_STEP_PTS
+CHARACTER                 :: YMI
+INTEGER                   :: IPOINTS
+CHARACTER(len=16)         :: YTCOUNT,YPOINTS
+CHARACTER(LEN=:), ALLOCATABLE :: YDADNAME
+!
+INTEGER :: ISYNCHRO          ! model synchronic index relative to its father
+                             ! = 1  for the first time step in phase with DAD
+                             ! = 0  for the last  time step (out of phase)
+INTEGER      :: IMI ! Current model index
+REAL, DIMENSION(:,:),ALLOCATABLE          :: ZSEA
+REAL, DIMENSION(:,:),ALLOCATABLE          :: ZTOWN
+! Dummy pointers needed to correct an ifort Bug
+REAL, DIMENSION(:), POINTER :: DPTR_XZHAT
+REAL, DIMENSION(:), POINTER :: DPTR_XBMX1,DPTR_XBMX2,DPTR_XBMX3,DPTR_XBMX4
+REAL, DIMENSION(:), POINTER :: DPTR_XBMY1,DPTR_XBMY2,DPTR_XBMY3,DPTR_XBMY4
+REAL, DIMENSION(:), POINTER :: DPTR_XBFX1,DPTR_XBFX2,DPTR_XBFX3,DPTR_XBFX4
+REAL, DIMENSION(:), POINTER :: DPTR_XBFY1,DPTR_XBFY2,DPTR_XBFY3,DPTR_XBFY4
+CHARACTER(LEN=4), DIMENSION(:), POINTER :: DPTR_CLBCX,DPTR_CLBCY
+INTEGER, DIMENSION(:,:,:), POINTER :: DPTR_NKLIN_LBXU,DPTR_NKLIN_LBYU,DPTR_NKLIN_LBXV,DPTR_NKLIN_LBYV
+INTEGER, DIMENSION(:,:,:), POINTER :: DPTR_NKLIN_LBXW,DPTR_NKLIN_LBYW,DPTR_NKLIN_LBXM,DPTR_NKLIN_LBYM
+REAL, DIMENSION(:,:,:), POINTER :: DPTR_XCOEFLIN_LBXU,DPTR_XCOEFLIN_LBYU
+REAL, DIMENSION(:,:,:), POINTER :: DPTR_XCOEFLIN_LBXV,DPTR_XCOEFLIN_LBYV
+REAL, DIMENSION(:,:,:), POINTER :: DPTR_XCOEFLIN_LBXW,DPTR_XCOEFLIN_LBYW
+REAL, DIMENSION(:,:,:), POINTER :: DPTR_XCOEFLIN_LBXM,DPTR_XCOEFLIN_LBYM
+REAL, DIMENSION(:,:,:),   POINTER :: DPTR_XLBXUM,DPTR_XLBYUM,DPTR_XLBXVM,DPTR_XLBYVM
+REAL, DIMENSION(:,:,:),   POINTER :: DPTR_XLBXWM,DPTR_XLBYWM,DPTR_XLBXTHM,DPTR_XLBYTHM
+REAL, DIMENSION(:,:,:),   POINTER :: DPTR_XLBXTKEM,DPTR_XLBYTKEM
+REAL, DIMENSION(:,:,:,:),   POINTER :: DPTR_XLBXSVM,DPTR_XLBYSVM                
+REAL, DIMENSION(:,:,:,:), POINTER :: DPTR_XLBXRM,DPTR_XLBYRM
+REAL, DIMENSION(:,:,:),   POINTER ::  DPTR_XZZ
+REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLSUM,DPTR_XLSVM,DPTR_XLSWM,DPTR_XLSTHM,DPTR_XLSRVM
+REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLSUS,DPTR_XLSVS,DPTR_XLSWS,DPTR_XLSTHS,DPTR_XLSRVS
+REAL, DIMENSION(:,:),   POINTER :: DPTR_XLSZWSM,DPTR_XLSZWSS
+REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLBXUS,DPTR_XLBYUS,DPTR_XLBXVS,DPTR_XLBYVS
+REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLBXWS,DPTR_XLBYWS,DPTR_XLBXTHS,DPTR_XLBYTHS
+REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLBXTKES,DPTR_XLBYTKES
+REAL, DIMENSION(:,:,:,:), POINTER :: DPTR_XLBXRS,DPTR_XLBYRS,DPTR_XLBXSVS,DPTR_XLBYSVS
+!
+REAL, DIMENSION(:,:,:), POINTER :: DPTR_XRHODJ,DPTR_XUM,DPTR_XVM,DPTR_XWM,DPTR_XTHM
+REAL, DIMENSION(:,:,:), POINTER :: DPTR_XTKEM,DPTR_XRUS,DPTR_XRVS,DPTR_XRWS,DPTR_XRTHS
+REAL, DIMENSION(:,:,:), POINTER :: DPTR_XRTKES,DPTR_XDIRFLASWD,DPTR_XSCAFLASWD,DPTR_XDIRSRFSWD
+REAL, DIMENSION(:,:,:,:), POINTER :: DPTR_XRM,DPTR_XSVM,DPTR_XRRS,DPTR_XRSVS
+REAL, DIMENSION(:,:), POINTER :: DPTR_XINPRC,DPTR_XINPRR,DPTR_XINPRS,DPTR_XINPRG
+REAL, DIMENSION(:,:), POINTER :: DPTR_XINPRH,DPTR_XPRCONV,DPTR_XPRSCONV
+LOGICAL, DIMENSION(:,:),POINTER :: DPTR_GMASKkids
+!
+REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZSPEEDC
+REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZSPEEDR
+REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZSPEEDS
+REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZSPEEDG
+REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZSPEEDH
+REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZINPRC3D
+REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZINPRS3D
+REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZINPRG3D
+REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZINPRH3D
+!
+LOGICAL :: KWARM        
+LOGICAL :: KRAIN        
+LOGICAL :: KSEDC  
+LOGICAL :: KACTIT
+LOGICAL :: KSEDI
+LOGICAL :: KHHONI
+!
+REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZRUS,ZRVS,ZRWS
+REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZPABST !To give pressure at t 
+                                                     ! (and not t+1) to resolved_cloud
+REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZJ
+!
+TYPE(LIST_ll), POINTER :: TZFIELDC_ll   ! list of fields to exchange
+TYPE(HALO2LIST_ll), POINTER :: TZHALO2C_ll   ! list of fields to exchange
+LOGICAL :: GCLD                     ! conditionnal call for dust wet deposition
+LOGICAL :: GCLOUD_ONLY              ! conditionnal radiation computations for
+                                !      the only cloudy columns
+REAL, DIMENSION(SIZE(XRSVS,1), SIZE(XRSVS,2), SIZE(XRSVS,3), NSV_AER)  :: ZWETDEPAER
+!
+TYPE(TFILEDATA),POINTER :: TZOUTFILE
+! TYPE(TFILEDATA),SAVE    :: TZDIACFILE
+TYPE(DIMPHYEX_t) :: YLDIMPHYEX
+!-------------------------------------------------------------------------------
+!
+TPBAKFILE=> NULL()
+TZOUTFILE=> NULL()
+!
+TPDTMODELN = TDTCUR
+!
+!*       0.    MICROPHYSICAL SCHEME
+!              ------------------- 
+SELECT CASE(CCLOUD)
+CASE('C2R2','KHKO','C3R5')
+  KWARM  = .TRUE.        
+  KRAIN  = NRAIN
+  KSEDC  = NSEDC
+  KACTIT = NACTIT
+!
+  KSEDI  = NSEDI
+  KHHONI = NHHONI
+CASE('LIMA')
+   KRAIN  = NMOM_R.GE.1
+   KWARM  = NMOM_C.GE.1
+  KSEDC  = MSEDC
+  KACTIT = MACTIT
+!
+  KSEDI  = MSEDI
+  KHHONI = MHHONI
+CASE('ICE3','ICE4') !default values
+  KWARM  = LWARM        
+  KRAIN  = .TRUE.
+  KSEDC  = .TRUE.
+  KACTIT = .FALSE.
+!
+  KSEDI  = .TRUE.
+  KHHONI = .FALSE.
+END SELECT
+!
+!
+!*        1    PRELIMINARY
+!              ------------
+IMI = GET_CURRENT_MODEL_INDEX()
+!
+!*       1.0   update NSV_* variables for current model
+!              ----------------------------------------
+!
+CALL UPDATE_NSV(IMI)
+!
+!*       1.1   RECOVER THE LOGICAL UNIT NUMBER FOR THE OUTPUT PRINTS
+!
+ILUOUT = TLUOUT%NLU
+!
+!*       1.2   SET ARRAY SIZE
+!
+CALL GET_DIM_EXT_ll('B',IIU,IJU)
+IKU=NKMAX+2*JPVEXT
+CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
+!
+IF (IMI==1) THEN
+  GSTEADY_DMASS=LSTEADYLS
+ELSE
+  GSTEADY_DMASS=.FALSE.
+END IF
+!
+!*       1.3   OPEN THE DIACHRONIC FILE
+!
+IF (KTCOUNT == 1) THEN
+!
+  NULLIFY(TFIELDS_ll,TLSFIELD_ll,TFIELDT_ll)
+  NULLIFY(TLSFIELD2D_ll)
+  NULLIFY(THALO2T_ll)
+  NULLIFY(TLSHALO2_ll)
+  NULLIFY(TFIELDSC_ll)
+!
+  ALLOCATE(XWT_ACT_NUC(SIZE(XWT,1),SIZE(XWT,2),SIZE(XWT,3)))
+  ALLOCATE(GMASKkids(SIZE(XWT,1),SIZE(XWT,2)))
+!
+  IF ( .NOT. LIO_NO_WRITE ) THEN
+    CALL IO_File_open(TDIAFILE)
+!
+    CALL IO_Header_write(TDIAFILE)
+    CALL WRITE_DESFM_n(IMI,TDIAFILE)
+    CALL WRITE_LFIFMN_FORDIACHRO_n(TDIAFILE)
+  END IF
+!
+!*       1.4   Initialization of the list of fields for the halo updates
+!
+!                 a) Sources terms
+!
+  CALL ADD3DFIELD_ll( TFIELDS_ll, XRUS,      'MODEL_n::XRUS' )
+  CALL ADD3DFIELD_ll( TFIELDS_ll, XRVS,      'MODEL_n::XRVS' )
+  CALL ADD3DFIELD_ll( TFIELDS_ll, XRWS,      'MODEL_n::XRWS' )
+  CALL ADD3DFIELD_ll( TFIELDS_ll, XRTHS,     'MODEL_n::XRTHS' )
+  CALL ADD3DFIELD_ll( TFIELDS_ll, XRUS_PRES, 'MODEL_n::XRUS_PRES' )
+  CALL ADD3DFIELD_ll( TFIELDS_ll, XRVS_PRES, 'MODEL_n::XRVS_PRES' )
+  CALL ADD3DFIELD_ll( TFIELDS_ll, XRWS_PRES, 'MODEL_n::XRWS_PRES' )
+  CALL ADD3DFIELD_ll( TFIELDS_ll, XRTHS_CLD, 'MODEL_n::XRTHS_CLD' )
+  IF (SIZE(XRTKES,1) /= 0) CALL ADD3DFIELD_ll( TFIELDS_ll, XRTKES, 'MODEL_n::XRTKES' )
+  CALL ADD4DFIELD_ll( TFIELDS_ll, XRRS     (:,:,:,1:NRR), 'MODEL_n::XRRS' )
+  CALL ADD4DFIELD_ll( TFIELDS_ll, XRRS_CLD (:,:,:,1:NRR), 'MODEL_n::XRRS_CLD' )
+  CALL ADD4DFIELD_ll( TFIELDS_ll, XRSVS    (:,:,:,1:NSV), 'MODEL_n::XRSVS')
+  CALL ADD4DFIELD_ll( TFIELDS_ll, XRSVS_CLD(:,:,:,1:NSV), 'MODEL_n::XRSVS_CLD')
+  IF (SIZE(XSRCT,1) /= 0) CALL ADD3DFIELD_ll( TFIELDS_ll, XSRCT, 'MODEL_n::XSRCT' )
+  ! Fire model parallel setup
+  IF (LBLAZE) THEN
+    CALL ADD3DFIELD_ll( TFIELDS_ll, XLSPHI,     'MODEL_n::XLSPHI')
+    CALL ADD3DFIELD_ll( TFIELDS_ll, XBMAP,      'MODEL_n::XBMAP')
+    CALL ADD3DFIELD_ll( TFIELDS_ll, XFMRFA,     'MODEL_n::XFMRFA')
+    CALL ADD3DFIELD_ll( TFIELDS_ll, XFMWF0,     'MODEL_n::XFMWF0')
+    CALL ADD3DFIELD_ll( TFIELDS_ll, XFMR0,      'MODEL_n::XFMR0')
+    CALL ADD3DFIELD_ll( TFIELDS_ll, XFMR00,     'MODEL_n::XFMR00')
+    CALL ADD3DFIELD_ll( TFIELDS_ll, XFMIGNITION, 'MODEL_n::XFMIGNITION')
+    CALL ADD3DFIELD_ll( TFIELDS_ll, XFMFUELTYPE, 'MODEL_n::XFMFUELTYPE')
+    CALL ADD3DFIELD_ll( TFIELDS_ll, XFIRETAU,   'MODEL_n::XFIRETAU')
+    CALL ADD4DFIELD_ll( TFIELDS_ll, XFLUXPARAMH(:,:,:,1:SIZE(XFLUXPARAMH,4)), 'MODEL_n::XFLUXPARAMH')
+    CALL ADD4DFIELD_ll( TFIELDS_ll, XFLUXPARAMW(:,:,:,1:SIZE(XFLUXPARAMW,4)), 'MODEL_n::XFLUXPARAMW')
+    CALL ADD3DFIELD_ll( TFIELDS_ll, XFIRERW,    'MODEL_n::XFIRERW')
+    CALL ADD3DFIELD_ll( TFIELDS_ll, XFMASE,     'MODEL_n::XFMASE')
+    CALL ADD3DFIELD_ll( TFIELDS_ll, XFMAWC,     'MODEL_n::XFMAWC')
+    CALL ADD3DFIELD_ll( TFIELDS_ll, XFMWALKIG,  'MODEL_n::XFMWALKIG')
+    CALL ADD3DFIELD_ll( TFIELDS_ll, XFMFLUXHDH, 'MODEL_n::XFMFLUXHDH')
+    CALL ADD3DFIELD_ll( TFIELDS_ll, XFMFLUXHDW, 'MODEL_n::XFMFLUXHDW')
+    CALL ADD3DFIELD_ll( TFIELDS_ll, XFMHWS,     'MODEL_n::XFMHWS')
+    CALL ADD3DFIELD_ll( TFIELDS_ll, XFMWINDU,   'MODEL_n::XFMWINDU')
+    CALL ADD3DFIELD_ll( TFIELDS_ll, XFMWINDV,   'MODEL_n::XFMWINDV')
+    CALL ADD3DFIELD_ll( TFIELDS_ll, XFMWINDW,   'MODEL_n::XFMWINDW')
+    CALL ADD3DFIELD_ll( TFIELDS_ll, XFMGRADOROX, 'MODEL_n::XFMGRADOROX')
+    CALL ADD3DFIELD_ll( TFIELDS_ll, XFMGRADOROY, 'MODEL_n::XFMGRADOROY')
+  END IF
+  !
+  IF ((LNUMDIFU .OR. LNUMDIFTH .OR. LNUMDIFSV) ) THEN
+  !
+  !                 b) LS fields
+  !
+    CALL ADD3DFIELD_ll( TLSFIELD_ll,   XLSUM,   'MODEL_n::XLSUM'   )
+    CALL ADD3DFIELD_ll( TLSFIELD_ll,   XLSVM,   'MODEL_n::XLSVM'   )
+    CALL ADD3DFIELD_ll( TLSFIELD_ll,   XLSWM,   'MODEL_n::XLSWM'   )
+    CALL ADD3DFIELD_ll( TLSFIELD_ll,   XLSTHM,  'MODEL_n::XLSTHM'  )
+    CALL ADD2DFIELD_ll( TLSFIELD2D_ll, XLSZWSM, 'MODEL_n::XLSZWSM' )
+    IF (NRR >= 1) THEN
+      CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSRVM, 'MODEL_n::XLSRVM' )
+    ENDIF
+  !
+  !                 c) Fields at t
+  !
+    CALL ADD3DFIELD_ll( TFIELDT_ll, XUT,  'MODEL_n::XUT'  )
+    CALL ADD3DFIELD_ll( TFIELDT_ll, XVT,  'MODEL_n::XVT'  )
+    CALL ADD3DFIELD_ll( TFIELDT_ll, XWT,  'MODEL_n::XWT'  )
+    CALL ADD3DFIELD_ll( TFIELDT_ll, XTHT, 'MODEL_n::XTHT' )
+    IF (SIZE(XRTKES,1) /= 0) CALL ADD3DFIELD_ll( TFIELDT_ll, XTKET, 'MODEL_n::XTKET' )
+    CALL ADD4DFIELD_ll(TFIELDT_ll, XRT (:,:,:,1:NRR), 'MODEL_n::XSV'  )
+    CALL ADD4DFIELD_ll(TFIELDT_ll, XSVT(:,:,:,1:NSV), 'MODEL_n::XSVT' )
+  !
+  !*       1.5   Initialize the list of fields for the halo updates (2nd layer)
+  !
+    INBVAR = 4+NRR+NSV
+    IF (SIZE(XRTKES,1) /= 0) INBVAR=INBVAR+1
+    CALL INIT_HALO2_ll(THALO2T_ll,INBVAR,IIU,IJU,IKU)
+    CALL INIT_HALO2_ll(TLSHALO2_ll,4+MIN(1,NRR),IIU,IJU,IKU)
+  !
+  !*       1.6   Initialise the 2nd layer of the halo of the LS fields
+  !
+    IF ( LSTEADYLS ) THEN
+       CALL UPDATE_HALO_ll(TLSFIELD_ll, IINFO_ll)
+       CALL UPDATE_HALO_ll(TLSFIELD2D_ll,IINFO_ll) 
+       CALL UPDATE_HALO2_ll(TLSFIELD_ll, TLSHALO2_ll, IINFO_ll)
+    END IF
+  END IF
+  !
+!
+  !
+  XT_START     = 0.0_MNHTIME
+  !
+  XT_STORE     = 0.0_MNHTIME
+  XT_BOUND     = 0.0_MNHTIME
+  XT_GUESS     = 0.0_MNHTIME
+  XT_FORCING   = 0.0_MNHTIME
+  XT_NUDGING   = 0.0_MNHTIME
+  XT_ADV       = 0.0_MNHTIME
+  XT_ADVUVW    = 0.0_MNHTIME
+  XT_GRAV      = 0.0_MNHTIME
+  XT_SOURCES   = 0.0_MNHTIME
+  !
+  XT_DIFF      = 0.0_MNHTIME
+  XT_RELAX     = 0.0_MNHTIME
+  XT_PARAM     = 0.0_MNHTIME
+  XT_SPECTRA   = 0.0_MNHTIME
+  XT_HALO      = 0.0_MNHTIME
+  XT_VISC      = 0.0_MNHTIME
+  XT_RAD_BOUND = 0.0_MNHTIME
+  XT_PRESS     = 0.0_MNHTIME
+  !
+  XT_CLOUD     = 0.0_MNHTIME
+  XT_STEP_SWA  = 0.0_MNHTIME
+  XT_STEP_MISC = 0.0_MNHTIME
+  XT_COUPL     = 0.0_MNHTIME
+  XT_1WAY      = 0.0_MNHTIME
+  XT_STEP_BUD  = 0.0_MNHTIME
+  !
+  XT_RAD       = 0.0_MNHTIME
+  XT_DCONV     = 0.0_MNHTIME
+  XT_GROUND    = 0.0_MNHTIME
+  XT_TURB      = 0.0_MNHTIME
+  XT_MAFL      = 0.0_MNHTIME
+  XT_DRAG      = 0.0_MNHTIME
+  XT_EOL       = 0.0_MNHTIME
+  XT_TRACER    = 0.0_MNHTIME
+  XT_SHADOWS   = 0.0_MNHTIME
+  XT_ELEC      = 0.0_MNHTIME
+  XT_CHEM      = 0.0_MNHTIME
+  XT_2WAY      = 0.0_MNHTIME
+  !
+  XT_IBM_FORC  = 0.0_MNHTIME
+  ! Blaze fire model
+  XFIREPERF    = 0.0_MNHTIME
+  !
+END IF
+!
+!*       1.7   Allocation of arrays for observation diagnostics
+!
+CALL INI_DIAG_IN_RUN(IIU,IJU,IKU,LFLYER,LSTATION,LPROFILER)
+!
+!
+CALL SECOND_MNH2(ZEND)
+!
+!-------------------------------------------------------------------------------
+!
+!*       2.    ONE-WAY NESTING AND LARGE SCALE FIELD REFRESH
+!              ---------------------------------------------
+!
+!
+CALL SECOND_MNH2(ZTIME1)
+!
+ISYNCHRO = MODULO (KTCOUNT, NDTRATIO(IMI) )      ! test of synchronisation
+!
+!
+IF (LCOUPLES.AND.LOCEAN) THEN
+   CALL NHOA_COUPL_n(NDAD(IMI),XTSTEP,IMI,KTCOUNT,IKU)
+END IF
+! No Gridnest in coupled OA LES for now
+IF (.NOT. LCOUPLES .AND. IMI/=1 .AND. NDAD(IMI)/=IMI .AND. (ISYNCHRO==1 .OR. NDTRATIO(IMI) == 1) ) THEN     
+!                                                                         
+! Use dummy pointers to correct an ifort BUG
+  DPTR_XBMX1=>XBMX1
+  DPTR_XBMX2=>XBMX2
+  DPTR_XBMX3=>XBMX3
+  DPTR_XBMX4=>XBMX4
+  DPTR_XBMY1=>XBMY1
+  DPTR_XBMY2=>XBMY2
+  DPTR_XBMY3=>XBMY3
+  DPTR_XBMY4=>XBMY4
+  DPTR_XBFX1=>XBFX1
+  DPTR_XBFX2=>XBFX2
+  DPTR_XBFX3=>XBFX3
+  DPTR_XBFX4=>XBFX4
+  DPTR_XBFY1=>XBFY1
+  DPTR_XBFY2=>XBFY2
+  DPTR_XBFY3=>XBFY3
+  DPTR_XBFY4=>XBFY4
+  DPTR_CLBCX=>CLBCX
+  DPTR_CLBCY=>CLBCY
+  !
+  DPTR_XZZ=>XZZ
+  DPTR_XZHAT=>XZHAT
+  DPTR_XCOEFLIN_LBXM=>XCOEFLIN_LBXM
+  DPTR_XLSTHM=>XLSTHM
+  DPTR_XLSRVM=>XLSRVM
+  DPTR_XLSUM=>XLSUM
+  DPTR_XLSVM=>XLSVM
+  DPTR_XLSWM=>XLSWM
+  DPTR_XLSZWSM=>XLSZWSM
+  DPTR_XLSTHS=>XLSTHS
+  DPTR_XLSRVS=>XLSRVS
+  DPTR_XLSUS=>XLSUS
+  DPTR_XLSVS=>XLSVS
+  DPTR_XLSWS=>XLSWS
+  DPTR_XLSZWSS=>XLSZWSS
+  !
+  IF ( LSTEADYLS                     ) THEN
+    NCPL_CUR=0
+  ELSE
+    IF (NCPL_CUR/=1) THEN
+      IF ( KTCOUNT+1 == NCPL_TIMES(NCPL_CUR-1,IMI)  ) THEN
+        !
+        !  LS sources are interpolated from the LS field 
+        ! values of model DAD(IMI)
+        CALL SPAWN_LS_n(NDAD(IMI),XTSTEP,IMI,                        &
+             DPTR_XBMX1,DPTR_XBMX2,DPTR_XBMX3,DPTR_XBMX4,DPTR_XBMY1,DPTR_XBMY2,DPTR_XBMY3,DPTR_XBMY4,        &
+             DPTR_XBFX1,DPTR_XBFX2,DPTR_XBFX3,DPTR_XBFX4,DPTR_XBFY1,DPTR_XBFY2,DPTR_XBFY3,DPTR_XBFY4,        &
+             NDXRATIO_ALL(IMI),NDYRATIO_ALL(IMI),                    &
+             DPTR_CLBCX,DPTR_CLBCY,DPTR_XZZ,DPTR_XZHAT,LSLEVE,XLEN1,XLEN2,DPTR_XCOEFLIN_LBXM, &
+             DPTR_XLSTHM,DPTR_XLSRVM,DPTR_XLSUM,DPTR_XLSVM,DPTR_XLSWM,DPTR_XLSZWSM,                        &
+             DPTR_XLSTHS,DPTR_XLSRVS,DPTR_XLSUS,DPTR_XLSVS,DPTR_XLSWS, DPTR_XLSZWSS                         )
+      END IF
+    END IF
+    !
+  END IF
+  !
+  DPTR_NKLIN_LBXU=>NKLIN_LBXU
+  DPTR_XCOEFLIN_LBXU=>XCOEFLIN_LBXU
+  DPTR_NKLIN_LBYU=>NKLIN_LBYU
+  DPTR_XCOEFLIN_LBYU=>XCOEFLIN_LBYU
+  DPTR_NKLIN_LBXV=>NKLIN_LBXV
+  DPTR_XCOEFLIN_LBXV=>XCOEFLIN_LBXV
+  DPTR_NKLIN_LBYV=>NKLIN_LBYV
+  DPTR_XCOEFLIN_LBYV=>XCOEFLIN_LBYV
+  DPTR_NKLIN_LBXW=>NKLIN_LBXW
+  DPTR_XCOEFLIN_LBXW=>XCOEFLIN_LBXW
+  DPTR_NKLIN_LBYW=>NKLIN_LBYW
+  DPTR_XCOEFLIN_LBYW=>XCOEFLIN_LBYW
+  !
+  DPTR_NKLIN_LBXM=>NKLIN_LBXM
+  DPTR_XCOEFLIN_LBXM=>XCOEFLIN_LBXM
+  DPTR_NKLIN_LBYM=>NKLIN_LBYM
+  DPTR_XCOEFLIN_LBYM=>XCOEFLIN_LBYM
+  !
+  DPTR_XLBXUM=>XLBXUM
+  DPTR_XLBYUM=>XLBYUM
+  DPTR_XLBXVM=>XLBXVM
+  DPTR_XLBYVM=>XLBYVM
+  DPTR_XLBXWM=>XLBXWM
+  DPTR_XLBYWM=>XLBYWM
+  DPTR_XLBXTHM=>XLBXTHM
+  DPTR_XLBYTHM=>XLBYTHM
+  DPTR_XLBXTKEM=>XLBXTKEM
+  DPTR_XLBYTKEM=>XLBYTKEM
+  DPTR_XLBXRM=>XLBXRM
+  DPTR_XLBYRM=>XLBYRM
+  DPTR_XLBXSVM=>XLBXSVM
+  DPTR_XLBYSVM=>XLBYSVM
+  !  
+  DPTR_XLBXUS=>XLBXUS
+  DPTR_XLBYUS=>XLBYUS
+  DPTR_XLBXVS=>XLBXVS
+  DPTR_XLBYVS=>XLBYVS
+  DPTR_XLBXWS=>XLBXWS
+  DPTR_XLBYWS=>XLBYWS
+  DPTR_XLBXTHS=>XLBXTHS
+  DPTR_XLBYTHS=>XLBYTHS
+  DPTR_XLBXTKES=>XLBXTKES
+  DPTR_XLBYTKES=>XLBYTKES
+  DPTR_XLBXRS=>XLBXRS
+  DPTR_XLBYRS=>XLBYRS
+  DPTR_XLBXSVS=>XLBXSVS
+  DPTR_XLBYSVS=>XLBYSVS
+  !
+  CALL ONE_WAY_n(NDAD(IMI),XTSTEP,IMI,KTCOUNT,                   &
+       DPTR_XBMX1,DPTR_XBMX2,DPTR_XBMX3,DPTR_XBMX4,DPTR_XBMY1,DPTR_XBMY2,DPTR_XBMY3,DPTR_XBMY4,        &
+       DPTR_XBFX1,DPTR_XBFX2,DPTR_XBFX3,DPTR_XBFX4,DPTR_XBFY1,DPTR_XBFY2,DPTR_XBFY3,DPTR_XBFY4,        &
+       NDXRATIO_ALL(IMI),NDYRATIO_ALL(IMI),NDTRATIO(IMI),         &
+       DPTR_CLBCX,DPTR_CLBCY,NRIMX,NRIMY,                                &
+       DPTR_NKLIN_LBXU,DPTR_XCOEFLIN_LBXU,DPTR_NKLIN_LBYU,DPTR_XCOEFLIN_LBYU,      &
+       DPTR_NKLIN_LBXV,DPTR_XCOEFLIN_LBXV,DPTR_NKLIN_LBYV,DPTR_XCOEFLIN_LBYV,      &
+       DPTR_NKLIN_LBXW,DPTR_XCOEFLIN_LBXW,DPTR_NKLIN_LBYW,DPTR_XCOEFLIN_LBYW,      &
+       DPTR_NKLIN_LBXM,DPTR_XCOEFLIN_LBXM,DPTR_NKLIN_LBYM,DPTR_XCOEFLIN_LBYM,      &
+       GSTEADY_DMASS,CCLOUD,LUSECHAQ,LUSECHIC,                           &
+       DPTR_XLBXUM,DPTR_XLBYUM,DPTR_XLBXVM,DPTR_XLBYVM,DPTR_XLBXWM,DPTR_XLBYWM,              &
+       DPTR_XLBXTHM,DPTR_XLBYTHM,                                        &
+       DPTR_XLBXTKEM,DPTR_XLBYTKEM,                                      &
+       DPTR_XLBXRM,DPTR_XLBYRM,DPTR_XLBXSVM,DPTR_XLBYSVM,                          &
+       XDRYMASST,XDRYMASSS,                                    &
+       DPTR_XLBXUS,DPTR_XLBYUS,DPTR_XLBXVS,DPTR_XLBYVS,DPTR_XLBXWS,DPTR_XLBYWS,              &
+       DPTR_XLBXTHS,DPTR_XLBYTHS,                                        &
+       DPTR_XLBXTKES,DPTR_XLBYTKES,                                      &
+       DPTR_XLBXRS,DPTR_XLBYRS,DPTR_XLBXSVS,DPTR_XLBYSVS                           )
+  !
+END IF
+!
+CALL SECOND_MNH2(ZTIME2)                                                  
+XT_1WAY = XT_1WAY + ZTIME2 - ZTIME1 
+!
+!*       2.1    RECYCLING TURBULENCE
+!              ---- 
+IF (CTURB /= 'NONE' .AND. LRECYCL) THEN
+  CALL RECYCLING(XFLUCTUNW,XFLUCTVNN,XFLUCTUTN,XFLUCTVTW,XFLUCTWTW,XFLUCTWTN, &
+                 XFLUCTUNE,XFLUCTVNS,XFLUCTUTS,XFLUCTVTE,XFLUCTWTE,XFLUCTWTS, &
+                 KTCOUNT)
+ENDIF
+!
+!*       2.2    IBM
+!              ----
+!
+IF (LIBM .AND. KTCOUNT==1) THEN
+  !
+  IF (.NOT.LCARTESIAN) THEN
+    CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'MODELN', 'IBM can only be used in combination with cartesian coordinates')
+  ENDIF
+  !
+  CALL IBM_INIT(XIBM_LS)
+  !
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
+!*       3.    LATERAL BOUNDARY CONDITIONS EXCEPT FOR NORMAL VELOCITY
+!              ------------------------------------------------------
+!
+ZTIME1=ZTIME2
+!
+!*       3.1   Set the lagragian variables values at the LB
+!
+IF( LLG .AND. IMI==1 ) CALL SETLB_LG
+!
+IF (CCONF == "START" .OR. (CCONF == "RESTA" .AND. KTCOUNT /= 1 )) THEN
+CALL MPPDB_CHECK3DM("before BOUNDARIES:XUT, XVT, XWT, XTHT, XTKET",PRECISION,&
+                   &  XUT, XVT, XWT, XTHT, XTKET)
+CALL BOUNDARIES (                                                   &
+            XTSTEP,CLBCX,CLBCY,NRR,NSV,KTCOUNT,                     &
+            XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM,XLBXRM,XLBXSVM,   &
+            XLBYUM,XLBYVM,XLBYWM,XLBYTHM,XLBYTKEM,XLBYRM,XLBYSVM,   &
+            XLBXUS,XLBXVS,XLBXWS,XLBXTHS,XLBXTKES,XLBXRS,XLBXSVS,   &
+            XLBYUS,XLBYVS,XLBYWS,XLBYTHS,XLBYTKES,XLBYRS,XLBYSVS,   &
+            XRHODJ,XRHODREF,                                        &
+            XUT, XVT, XWT, XTHT, XTKET, XRT, XSVT, XSRCT            )
+CALL MPPDB_CHECK3DM("after  BOUNDARIES:XUT, XVT, XWT, XTHT, XTKET",PRECISION,&
+                   &  XUT, XVT, XWT, XTHT, XTKET)
+END IF
+!
+CALL SECOND_MNH2(ZTIME2)
+!
+XT_BOUND = XT_BOUND + ZTIME2 - ZTIME1
+!
+!
+! For START/RESTART MPPDB_CHECK use 
+!IF ( (IMI==1) .AND. (CCONF == "START") .AND. (KTCOUNT == 2) ) THEN
+!   CALL MPPDB_START_DEBUG()
+!ENDIF
+!IF ( (IMI==1) .AND. (CCONF == "RESTA") .AND. (KTCOUNT == 1) ) THEN
+!   CALL MPPDB_START_DEBUG()
+!ENDIF
+!-------------------------------------------------------------------------------
+!* initializes surface number
+IF (CSURF=='EXTE') CALL GOTO_SURFEX(IMI)
+!-------------------------------------------------------------------------------
+!
+!*       4.    STORAGE IN A SYNCHRONOUS FILE
+!              -----------------------------
+!
+ZTIME1 = ZTIME2
+!
+IF ( nfile_backup_current < NBAK_NUMB ) THEN
+  IF ( KTCOUNT == TBACKUPN(nfile_backup_current + 1)%NSTEP ) THEN
+    nfile_backup_current = nfile_backup_current + 1
+    !
+    TPBAKFILE => TBACKUPN(nfile_backup_current)%TFILE
+    IVERB    = TPBAKFILE%NLFIVERB
+    !
+    CALL IO_File_open(TPBAKFILE)
+    !
+    CALL WRITE_DESFM_n(IMI,TPBAKFILE)
+    CALL IO_Header_write( TBACKUPN(nfile_backup_current)%TFILE )
+    IF ( ASSOCIATED( TBACKUPN(nfile_backup_current)%TFILE%TDADFILE ) ) THEN
+      YDADNAME = TBACKUPN(nfile_backup_current)%TFILE%TDADFILE%CNAME
+    ELSE
+      ! Set a dummy name for the dad file. Its non-zero size will allow the writing of some data in the backup file
+      YDADNAME = 'DUMMY'
+    END IF
+    CALL WRITE_LFIFM_n( TBACKUPN(nfile_backup_current)%TFILE, TRIM( YDADNAME ) )
+    TOUTDATAFILE => TPBAKFILE
+    CALL MNHWRITE_ZS_DUMMY_n(TPBAKFILE)
+    IF (CSURF=='EXTE') THEN
+      TFILE_SURFEX => TPBAKFILE
+      CALL GOTO_SURFEX(IMI)
+      CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','ALL',.FALSE.)
+      IF ( KTCOUNT > 1) THEN
+        CALL DIAG_SURF_ATM_n(YSURF_CUR,'MESONH')
+        CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','ALL')
+      END IF
+      NULLIFY(TFILE_SURFEX)
+    END IF
+    !
+    ! Reinitialize Lagragian variables at every model backup
+    IF (LLG .AND. LINIT_LG .AND. CINIT_LG=='FMOUT') THEN
+      CALL INI_LG( XXHATM, XYHATM, XZZ, XSVT, XLBXSVM, XLBYSVM )
+      IF (IVERB>=5) THEN
+        WRITE(UNIT=ILUOUT,FMT=*) '************************************'
+        WRITE(UNIT=ILUOUT,FMT=*) '*** Lagrangian variables refreshed after ',TRIM(TPBAKFILE%CNAME),' backup'
+        WRITE(UNIT=ILUOUT,FMT=*) '************************************'
+      END IF
+    END IF
+    ! Reinitialise mean variables
+    IF (LMEAN_FIELD) THEN
+       CALL INI_MEAN_FIELD
+    END IF
+!
+  ELSE
+    !Necessary to have a 'valid' CNAME when calling some subroutines
+    TPBAKFILE => TFILE_DUMMY
+  END IF
+ELSE
+  !Necessary to have a 'valid' CNAME when calling some subroutines
+  TPBAKFILE => TFILE_DUMMY
+END IF
+!
+IF ( nfile_output_current < NOUT_NUMB ) THEN
+  IF ( KTCOUNT == TOUTPUTN(nfile_output_current + 1)%NSTEP ) THEN
+    nfile_output_current = nfile_output_current + 1
+    !
+    TZOUTFILE => TOUTPUTN(nfile_output_current)%TFILE
+    !
+    CALL IO_File_open(TZOUTFILE)
+    !
+    CALL IO_Header_write(TZOUTFILE)
+    CALL IO_Fieldlist_write(  TOUTPUTN(nfile_output_current) )
+    CALL IO_Field_user_write( TOUTPUTN(nfile_output_current) )
+    !
+    CALL IO_File_close(TZOUTFILE)
+    !
+  END IF
+END IF
+!
+CALL SECOND_MNH2(ZTIME2)
+!
+XT_STORE = XT_STORE + ZTIME2 - ZTIME1
+!
+!-------------------------------------------------------------------------------
+!
+!*       4.BIS    IBM and Fluctuations application
+!              -----------------------------
+!
+!*       4.B1   Add fluctuations at the domain boundaries
+!
+IF (LRECYCL) THEN
+  CALL ADDFLUCTUATIONS (                                    &
+           CLBCX,CLBCY,                                     &
+           XUT, XVT, XWT, XTHT, XTKET, XRT, XSVT, XSRCT,    &
+           XFLUCTUTN,XFLUCTVTW,XFLUCTUTS,XFLUCTVTE,         &
+           XFLUCTWTW,XFLUCTWTN,XFLUCTWTS,XFLUCTWTE          )
+ENDIF
+!
+!*       4.B2   Immersed boundaries
+!
+IF (LIBM) THEN
+  !
+  ZTIME1=ZTIME2
+  !
+  IF (.NOT.LCARTESIAN) THEN
+    CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'MODELN', 'IBM can only be used in combination with cartesian coordinates')
+  ENDIF
+  !
+  CALL IBM_FORCING(XUT,XVT,XWT,XTHT,XRT,XSVT,XTKET)
+  !
+  IF (LIBM_TROUBLE) THEN
+     CALL IBM_FORCING_TR(XUT,XVT,XWT,XTHT,XRT,XSVT,XTKET)
+  ENDIF
+  !
+  CALL SECOND_MNH2(ZTIME2)
+  !
+  XT_IBM_FORC = XT_IBM_FORC + ZTIME2 - ZTIME1
+  !
+ENDIF
+!-------------------------------------------------------------------------------
+!
+!*       5.    INITIALIZATION OF THE BUDGET VARIABLES
+!              --------------------------------------
+!
+IF (NBUMOD==IMI) THEN
+  LBU_ENABLE = CBUTYPE /='NONE'.AND. CBUTYPE /='SKIP' 
+ELSE
+  LBU_ENABLE = .FALSE.
+END IF
+!
+IF (NBUMOD==IMI .AND. CBUTYPE=='MASK' ) THEN
+  CALL SET_MASK()
+  if ( lbu_ru ) then
+    tbudgets(NBUDGET_U)%trhodj%xdata(:, nbutime, :) = tbudgets(NBUDGET_U)%trhodj%xdata(:, nbutime, :) &
+                                                      + Mask_compress( Mxm( xrhodj(:, :, :) ) )
+  end if
+  if ( lbu_rv ) then
+    tbudgets(NBUDGET_V)%trhodj%xdata(:, nbutime, :) = tbudgets(NBUDGET_V)%trhodj%xdata(:, nbutime, :) &
+                                                      + Mask_compress( Mym( xrhodj(:, :, :) ) )
+  end if
+  if ( lbu_rw ) then
+    tbudgets(NBUDGET_W)%trhodj%xdata(:, nbutime, :) = tbudgets(NBUDGET_W)%trhodj%xdata(:, nbutime, :) &
+                                                      + Mask_compress( Mzm( xrhodj(:, :, :) ) )
+  end if
+  if ( associated( tburhodj ) ) tburhodj%xdata(:, nbutime, :) = tburhodj%xdata(:, nbutime, :) + Mask_compress( xrhodj(:, :, :) )
+END IF
+!
+IF (NBUMOD==IMI .AND. CBUTYPE=='CART' ) THEN
+  if ( lbu_ru ) then
+    tbudgets(NBUDGET_U)%trhodj%xdata(:, :, :) = tbudgets(NBUDGET_U)%trhodj%xdata(:, :, :) + Cart_compress( Mxm( xrhodj(:, :, :) ) )
+  end if
+  if ( lbu_rv ) then
+    tbudgets(NBUDGET_V)%trhodj%xdata(:, :, :) = tbudgets(NBUDGET_V)%trhodj%xdata(:, :, :) + Cart_compress( Mym( xrhodj(:, :, :) ) )
+  end if
+  if ( lbu_rw ) then
+    tbudgets(NBUDGET_W)%trhodj%xdata(:, :, :) = tbudgets(NBUDGET_W)%trhodj%xdata(:, :, :) &
+                                                + Cart_compress( Mzm( xrhodj(:, :, :) ) )
+  end if
+  if ( associated( tburhodj ) ) tburhodj%xdata(:, :, :) = tburhodj%xdata(:, :, :) + Cart_compress( xrhodj(:, :, :) )
+END IF
+!
+CALL BUDGET_FLAGS(LUSERV, LUSERC, LUSERR,         &
+                  LUSERI, LUSERS, LUSERG, LUSERH  )
+!
+XTIME_BU   = 0.0
+!
+!-------------------------------------------------------------------------------
+!
+!*       6.    INITIALIZATION OF THE FIELD TENDENCIES
+!              --------------------------------------
+!
+ZTIME1 = ZTIME2
+XTIME_BU_PROCESS = 0.
+!
+CALL INITIAL_GUESS ( NRR, NSV, KTCOUNT, XRHODJ,IMI, XTSTEP,                 &
+                     XRUS, XRVS, XRWS, XRTHS, XRRS, XRTKES, XRSVS,          &
+                     XUT, XVT, XWT, XTHT, XRT, XTKET, XSVT )
+!
+CALL SECOND_MNH2(ZTIME2)
+!
+XT_GUESS = XT_GUESS + ZTIME2 - ZTIME1 - XTIME_BU_PROCESS
+!
+!-------------------------------------------------------------------------------
+!
+!*       7.    INITIALIZATION OF THE LES FOR CURRENT TIME-STEP
+!              -----------------------------------------------
+!
+XTIME_LES_BU   = 0.0
+XTIME_LES      = 0.0
+IF (LLES) CALL LES_INI_TIMESTEP_n(KTCOUNT)
+!
+!-------------------------------------------------------------------------------
+!
+!*       8.    TWO-WAY INTERACTIVE GRID-NESTING
+!              --------------------------------
+!
+!
+CALL SECOND_MNH2(ZTIME1)
+XTIME_BU_PROCESS = 0.
+XTIME_LES_BU_PROCESS = 0.
+!
+GMASKkids(:,:)=.FALSE.
+!
+IF (NMODEL>1) THEN
+  ! correct an ifort bug
+  DPTR_XRHODJ=>XRHODJ
+  DPTR_XUM=>XUT
+  DPTR_XVM=>XVT
+  DPTR_XWM=>XWT
+  DPTR_XTHM=>XTHT
+  DPTR_XRM=>XRT
+  DPTR_XTKEM=>XTKET
+  DPTR_XSVM=>XSVT
+  DPTR_XRUS=>XRUS
+  DPTR_XRVS=>XRVS
+  DPTR_XRWS=>XRWS
+  DPTR_XRTHS=>XRTHS
+  DPTR_XRRS=>XRRS
+  DPTR_XRTKES=>XRTKES
+  DPTR_XRSVS=>XRSVS
+  DPTR_XINPRC=>XINPRC
+  DPTR_XINPRR=>XINPRR
+  DPTR_XINPRS=>XINPRS
+  DPTR_XINPRG=>XINPRG
+  DPTR_XINPRH=>XINPRH
+  DPTR_XPRCONV=>XPRCONV
+  DPTR_XPRSCONV=>XPRSCONV
+  DPTR_XDIRFLASWD=>XDIRFLASWD
+  DPTR_XSCAFLASWD=>XSCAFLASWD
+  DPTR_XDIRSRFSWD=>XDIRSRFSWD
+  DPTR_GMASKkids=>GMASKkids
+  !
+  CALL TWO_WAY(     NRR,NSV,KTCOUNT,DPTR_XRHODJ,IMI,XTSTEP,                                    &
+       DPTR_XUM ,DPTR_XVM ,DPTR_XWM , DPTR_XTHM, DPTR_XRM,DPTR_XSVM,                           &
+       DPTR_XRUS,DPTR_XRVS,DPTR_XRWS,DPTR_XRTHS,DPTR_XRRS,DPTR_XRSVS,                          &
+       DPTR_XINPRC,DPTR_XINPRR,DPTR_XINPRS,DPTR_XINPRG,DPTR_XINPRH,DPTR_XPRCONV,DPTR_XPRSCONV, &
+       DPTR_XDIRFLASWD,DPTR_XSCAFLASWD,DPTR_XDIRSRFSWD,DPTR_GMASKkids           )
+END IF
+!
+CALL SECOND_MNH2(ZTIME2)
+XT_2WAY = XT_2WAY + ZTIME2 - ZTIME1 - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
+!
+!-------------------------------------------------------------------------------
+!-------------------------------------------------------------------------------
+!
+!*       10.    FORCING
+!               -------
+!
+!
+ZTIME1 = ZTIME2
+XTIME_BU_PROCESS = 0.
+XTIME_LES_BU_PROCESS = 0.
+IF (LCARTESIAN) THEN
+  CALL SM_GRIDCART(XXHAT,XYHAT,XZHAT,XZS,LSLEVE,XLEN1,XLEN2,XZSMT,XDXHAT,XDYHAT,XZZ,ZJ)
+  XMAP=1.
+ELSE
+  CALL SM_GRIDPROJ( XXHAT, XYHAT, XZHAT, XXHATM, XYHATM, XZS,      &
+                    LSLEVE, XLEN1, XLEN2, XZSMT, XLATORI, XLONORI, &
+                    XMAP, XLAT, XLON, XDXHAT, XDYHAT, XZZ, ZJ      )
+END IF
+!
+IF ( LFORCING ) THEN
+  CALL FORCING(XTSTEP,LUSERV,XRHODJ,XCORIOZ,XZHAT,XZZ,TDTCUR,&
+               XUFRC_PAST, XVFRC_PAST,XWTFRC,         &
+               XUT,XVT,XWT,XTHT,XTKET,XRT,XSVT,       &
+               XRUS,XRVS,XRWS,XRTHS,XRTKES,XRRS,XRSVS,IMI,ZJ)
+END IF
+!
+IF ( L2D_ADV_FRC ) THEN 
+  CALL ADV_FORCING_n(XRHODJ,TDTCUR,XTHT,XRT,XZZ,XRTHS,XRRS)
+END IF
+IF ( L2D_REL_FRC ) THEN 
+  CALL REL_FORCING_n(XRHODJ,TDTCUR,XTHT,XRT,XZZ,XRTHS,XRRS)
+END IF
+!
+CALL SECOND_MNH2(ZTIME2)
+!
+XT_FORCING = XT_FORCING + ZTIME2 - ZTIME1 &
+             - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
+!
+!-------------------------------------------------------------------------------
+!
+!*       11.    NUDGING
+!               -------
+!
+!
+ZTIME1 = ZTIME2
+XTIME_BU_PROCESS = 0.
+XTIME_LES_BU_PROCESS = 0.
+!
+IF ( LNUDGING ) THEN
+  CALL NUDGING(LUSERV,XRHODJ,XTNUDGING,         &
+               XUT,XVT,XWT,XTHT,XRT,            &
+               XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM, &
+               XRUS,XRVS,XRWS,XRTHS,XRRS)
+
+END IF
+!
+CALL SECOND_MNH2(ZTIME2)
+!
+XT_NUDGING = XT_NUDGING + ZTIME2 - ZTIME1 &
+             - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
+!
+!-------------------------------------------------------------------------------
+!
+!*       12.    DYNAMICAL SOURCES
+!               -----------------
+!
+ZTIME1 = ZTIME2
+XTIME_BU_PROCESS = 0.
+XTIME_LES_BU_PROCESS = 0.
+!
+IF( LTRANS ) THEN
+  XUT(:,:,:) = XUT(:,:,:) + XUTRANS
+  XVT(:,:,:) = XVT(:,:,:) + XVTRANS
+END IF
+!
+CALL DYN_SOURCES( NRR,NRRL, NRRI,                              &
+                  XUT, XVT, XWT, XTHT, XRT,                    &
+                  XCORIOX, XCORIOY, XCORIOZ, XCURVX, XCURVY,   &
+                  XRHODJ, XZZ, XTHVREF, XEXNREF,               &
+                  XRUS, XRVS, XRWS, XRTHS                      )
+!
+IF( LTRANS ) THEN
+  XUT(:,:,:) = XUT(:,:,:) - XUTRANS
+  XVT(:,:,:) = XVT(:,:,:) - XVTRANS
+END IF
+!
+CALL SECOND_MNH2(ZTIME2)
+!
+XT_SOURCES = XT_SOURCES + ZTIME2 - ZTIME1 &
+             - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
+!
+!-------------------------------------------------------------------------------
+!
+!*       13.    NUMERICAL DIFFUSION
+!               -------------------
+!
+ZTIME1 = ZTIME2
+XTIME_BU_PROCESS = 0.
+XTIME_LES_BU_PROCESS = 0.
+!
+IF ( LNUMDIFU .OR. LNUMDIFTH .OR. LNUMDIFSV ) THEN
+!
+  CALL UPDATE_HALO_ll(TFIELDT_ll, IINFO_ll)
+  CALL UPDATE_HALO2_ll(TFIELDT_ll, THALO2T_ll, IINFO_ll)
+  IF ( .NOT. LSTEADYLS ) THEN
+     CALL UPDATE_HALO_ll(TLSFIELD_ll, IINFO_ll)
+     CALL UPDATE_HALO_ll(TLSFIELD2D_ll,IINFO_ll) 
+     CALL UPDATE_HALO2_ll(TLSFIELD_ll, TLSHALO2_ll, IINFO_ll)
+  END IF
+  CALL NUM_DIFF ( CLBCX, CLBCY, NRR, NSV,                               &
+                  XDK2U, XDK4U, XDK2TH, XDK4TH, XDK2SV, XDK4SV, IMI,    &
+                  XUT, XVT, XWT, XTHT, XTKET, XRT, XSVT,                &
+                  XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,XRHODJ,               &
+                  XRUS, XRVS, XRWS, XRTHS, XRTKES, XRRS, XRSVS,         &
+                  LZDIFFU,LNUMDIFU, LNUMDIFTH, LNUMDIFSV,               &
+                  THALO2T_ll, TLSHALO2_ll,XZDIFFU_HALO2      )
+END IF
+
+if ( lbudget_sv ) then
+  do jsv = 1, nsv
+    call Budget_store_init( tbudgets(jsv + NBUDGET_SV1 - 1), 'NEGA2', xrsvs(:, :, :, jsv) )
+  end do
+end if
+
+DO JSV = NSV_CHEMBEG,NSV_CHEMEND
+  XRSVS(:,:,:,JSV) = MAX(XRSVS(:,:,:,JSV),0.)
+END DO
+DO JSV = NSV_CHICBEG,NSV_CHICEND
+  XRSVS(:,:,:,JSV) = MAX(XRSVS(:,:,:,JSV),0.)
+END DO
+DO JSV = NSV_AERBEG,NSV_AEREND
+  XRSVS(:,:,:,JSV) = MAX(XRSVS(:,:,:,JSV),0.)
+END DO
+DO JSV = NSV_LNOXBEG,NSV_LNOXEND
+  XRSVS(:,:,:,JSV) = MAX(XRSVS(:,:,:,JSV),0.)
+END DO
+DO JSV = NSV_DSTBEG,NSV_DSTEND
+  XRSVS(:,:,:,JSV) = MAX(XRSVS(:,:,:,JSV),0.)
+END DO
+DO JSV = NSV_SLTBEG,NSV_SLTEND
+  XRSVS(:,:,:,JSV) = MAX(XRSVS(:,:,:,JSV),0.)
+END DO
+DO JSV = NSV_PPBEG,NSV_PPEND
+  XRSVS(:,:,:,JSV) = MAX(XRSVS(:,:,:,JSV),0.)
+END DO
+#ifdef MNH_FOREFIRE
+DO JSV = NSV_FFBEG,NSV_FFEND
+  XRSVS(:,:,:,JSV) = MAX(XRSVS(:,:,:,JSV),0.)
+END DO
+#endif
+! Blaze smoke
+DO JSV = NSV_FIREBEG,NSV_FIREEND
+  XRSVS(:,:,:,JSV) = MAX(XRSVS(:,:,:,JSV),0.)
+END DO
+DO JSV = NSV_CSBEG,NSV_CSEND
+  XRSVS(:,:,:,JSV) = MAX(XRSVS(:,:,:,JSV),0.)
+END DO
+DO JSV = NSV_DSTDEPBEG,NSV_DSTDEPEND
+  XRSVS(:,:,:,JSV) = MAX(XRSVS(:,:,:,JSV),0.)
+END DO
+DO JSV = NSV_SLTDEPBEG,NSV_SLTDEPEND
+  XRSVS(:,:,:,JSV) = MAX(XRSVS(:,:,:,JSV),0.)
+END DO
+DO JSV = NSV_AERDEPBEG,NSV_AERDEPEND
+  XRSVS(:,:,:,JSV) = MAX(XRSVS(:,:,:,JSV),0.)
+END DO
+DO JSV = NSV_SNWBEG,NSV_SNWEND
+  XRSVS(:,:,:,JSV) = MAX(XRSVS(:,:,:,JSV),0.)
+END DO
+IF (CELEC .NE. 'NONE') THEN
+  XRSVS(:,:,:,NSV_ELECBEG) = MAX(XRSVS(:,:,:,NSV_ELECBEG),0.)
+  XRSVS(:,:,:,NSV_ELECEND) = MAX(XRSVS(:,:,:,NSV_ELECEND),0.)
+END IF
+
+if ( lbudget_sv ) then
+  do jsv = 1, nsv
+    call Budget_store_end( tbudgets(jsv + NBUDGET_SV1 - 1), 'NEGA2', xrsvs(:, :, :, jsv) )
+  end do
+end if
+!
+CALL SECOND_MNH2(ZTIME2)
+!
+XT_DIFF = XT_DIFF + ZTIME2 - ZTIME1 &
+          - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
+!
+!-------------------------------------------------------------------------------
+!
+!*       14.    UPPER AND LATERAL RELAXATION
+!               ----------------------------
+!
+ZTIME1 = ZTIME2
+XTIME_BU_PROCESS = 0.
+XTIME_LES_BU_PROCESS = 0.
+!
+IF(LVE_RELAX .OR. LVE_RELAX_GRD .OR. LHORELAX_UVWTH .OR. LHORELAX_RV .OR.&
+   LHORELAX_RC .OR. LHORELAX_RR .OR. LHORELAX_RI .OR. LHORELAX_RS .OR.   &
+   LHORELAX_RG .OR. LHORELAX_RH .OR. LHORELAX_TKE .OR.                   &
+   ANY(LHORELAX_SV)) THEN
+  CALL RELAXATION (LVE_RELAX,LVE_RELAX_GRD,LHORELAX_UVWTH,LHORELAX_RV,LHORELAX_RC,   &
+                   LHORELAX_RR,LHORELAX_RI,LHORELAX_RS,LHORELAX_RG,    &
+                   LHORELAX_RH,LHORELAX_TKE,LHORELAX_SV,               &
+                   LHORELAX_SVC2R2,LHORELAX_SVC1R3,                    &
+                   LHORELAX_SVELEC,LHORELAX_SVLG,                      &
+                   LHORELAX_SVCHEM,LHORELAX_SVCHIC,LHORELAX_SVAER,     &
+                   LHORELAX_SVDST,LHORELAX_SVSLT,LHORELAX_SVPP,        &
+                   LHORELAX_SVCS,LHORELAX_SVSNW,LHORELAX_SVFIRE,       &
+#ifdef MNH_FOREFIRE
+                   LHORELAX_SVFF,                                      &
+#endif
+                   KTCOUNT,NRR,NSV,XTSTEP,XRHODJ,                      &
+                   XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET,              &
+                   XLSUM, XLSVM, XLSWM, XLSTHM,                        &
+                   XLBXUM, XLBXVM, XLBXWM, XLBXTHM,                    &
+                   XLBXRM, XLBXSVM, XLBXTKEM,                          &
+                   XLBYUM, XLBYVM, XLBYWM, XLBYTHM,                    &
+                   XLBYRM, XLBYSVM, XLBYTKEM,                          &
+                   NALBOT, XALK, XALKW,                                &
+                   NALBAS, XALKBAS, XALKWBAS,                          &
+                   LMASK_RELAX,XKURELAX, XKVRELAX, XKWRELAX,           &
+                   NRIMX,NRIMY,                                        &
+                   XRUS, XRVS, XRWS, XRTHS, XRRS, XRSVS, XRTKES        )
+END IF
+
+IF (CELEC.NE.'NONE' .AND. LRELAX2FW_ION) THEN
+   CALL RELAX2FW_ION (KTCOUNT, IMI, XTSTEP, XRHODJ, XSVT, NALBOT,      &
+                      XALK, LMASK_RELAX, XKWRELAX, XRSVS )   
+END IF                      
+!
+CALL SECOND_MNH2(ZTIME2)
+!
+XT_RELAX = XT_RELAX + ZTIME2 - ZTIME1 &
+           - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
+!
+!-------------------------------------------------------------------------------
+!
+!*       15.    PARAMETRIZATIONS' MONITOR
+!               -------------------------
+!
+ZTIME1 = ZTIME2
+!
+CALL PHYS_PARAM_n( KTCOUNT, TPBAKFILE,                            &
+                   XT_RAD,  XT_SHADOWS, XT_DCONV, XT_GROUND,      &
+                   XT_MAFL, XT_DRAG, XT_EOL, XT_TURB,  XT_TRACER, &
+                   ZTIME, ZWETDEPAER, GMASKkids, GCLOUD_ONLY      )
+!
+IF (CDCONV/='NONE') THEN
+  XPACCONV = XPACCONV + XPRCONV * XTSTEP
+  IF (LCH_CONV_LINOX) THEN
+    XIC_TOTAL_NUMBER = XIC_TOTAL_NUMBER + XIC_RATE * XTSTEP
+    XCG_TOTAL_NUMBER = XCG_TOTAL_NUMBER + XCG_RATE * XTSTEP
+  END IF
+END IF
+!
+!
+CALL SECOND_MNH2(ZTIME2)
+!
+XT_PARAM = XT_PARAM + ZTIME2 - ZTIME1 - XTIME_LES - ZTIME
+!
+!-------------------------------------------------------------------------------
+!
+!*       16.    TEMPORAL SERIES
+!               ---------------
+!
+ZTIME1 = ZTIME2
+!
+IF (LSERIES) THEN
+  IF ( MOD (KTCOUNT-1,NFREQSERIES) == 0 ) CALL SERIES_n
+END IF
+!
+CALL SECOND_MNH2(ZTIME2)
+!
+XT_STEP_MISC = XT_STEP_MISC + ZTIME2 - ZTIME1
+!
+!-------------------------------------------------------------------------------
+!
+!*       17.    LARGE SCALE FIELD REFRESH
+!               -------------------------
+!
+ZTIME1 = ZTIME2
+!
+IF (.NOT. LSTEADYLS) THEN
+  IF (  IMI==1                             .AND.      &
+    NCPL_CUR < NCPL_NBR                              ) THEN
+    IF (KTCOUNT+1 == NCPL_TIMES(NCPL_CUR,1)          ) THEN
+                                  ! The next current time reachs a
+      NCPL_CUR=NCPL_CUR+1         ! coupling one, LS sources are refreshed
+      !
+      CALL LS_COUPLING(XTSTEP,GSTEADY_DMASS,CCONF,                          &
+             CGETTKET,                                                      &
+             CGETRVT,CGETRCT,CGETRRT,CGETRIT,                               &
+             CGETRST,CGETRGT,CGETRHT,CGETSVT,LCH_INIT_FIELD, NSV,           &
+             NIMAX_ll,NJMAX_ll,                                             &
+             NSIZELBX_ll,NSIZELBXU_ll,NSIZELBY_ll,NSIZELBYV_ll,             &
+             NSIZELBXTKE_ll,NSIZELBYTKE_ll,                                 &
+             NSIZELBXR_ll,NSIZELBYR_ll,NSIZELBXSV_ll,NSIZELBYSV_ll,         &
+             XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,XLSZWSM,XDRYMASST,             &
+             XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM,XLBXRM,XLBXSVM,          &
+             XLBYUM,XLBYVM,XLBYWM,XLBYTHM,XLBYTKEM,XLBYRM,XLBYSVM,          &
+             XLSUS,XLSVS,XLSWS,XLSTHS,XLSRVS,XLSZWSS,XDRYMASSS,             &
+             XLBXUS,XLBXVS,XLBXWS,XLBXTHS,XLBXTKES,XLBXRS,XLBXSVS,          &
+             XLBYUS,XLBYVS,XLBYWS,XLBYTHS,XLBYTKES,XLBYRS,XLBYSVS           )
+      !
+      DO JSV=NSV_CHEMBEG,NSV_CHEMEND
+        XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.)
+        XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.)
+      ENDDO
+      !
+      DO JSV=NSV_LNOXBEG,NSV_LNOXEND
+        XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.)
+        XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.)
+      ENDDO
+      !
+      DO JSV=NSV_AERBEG,NSV_AEREND
+        XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.)
+        XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.)
+      ENDDO
+      !
+      DO JSV=NSV_DSTBEG,NSV_DSTEND
+        XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.)
+        XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.)
+      ENDDO
+      !
+      DO JSV=NSV_DSTDEPBEG,NSV_DSTDEPEND
+        XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.)
+        XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.)
+      ENDDO
+      !
+      DO JSV=NSV_SLTBEG,NSV_SLTEND
+        XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.)
+        XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.)
+      ENDDO
+      !
+      DO JSV=NSV_SLTDEPBEG,NSV_SLTDEPEND
+        XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.)
+        XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.)
+      ENDDO
+      !
+      DO JSV=NSV_PPBEG,NSV_PPEND
+        XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.)
+        XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.)
+      ENDDO
+      !
+#ifdef MNH_FOREFIRE
+      DO JSV=NSV_FFBEG,NSV_FFEND
+        XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.)
+        XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.)
+      ENDDO
+      !
+#endif
+      DO JSV=NSV_FIREBEG,NSV_FIREEND
+        XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.)
+        XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.)
+      ENDDO
+      !
+      DO JSV=NSV_CSBEG,NSV_CSEND
+        XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.)
+        XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.)
+      ENDDO
+      !
+      DO JSV=NSV_SNWBEG,NSV_SNWEND
+        XLBXSVS(:,:,:,JSV)=MAX(XLBXSVS(:,:,:,JSV),0.)
+        XLBYSVS(:,:,:,JSV)=MAX(XLBYSVS(:,:,:,JSV),0.)
+      ENDDO
+      !
+     END IF
+  END IF
+END IF
+!
+CALL SECOND_MNH2(ZTIME2)
+!
+XT_COUPL = XT_COUPL + ZTIME2 - ZTIME1
+!
+!-------------------------------------------------------------------------------
+!
+!
+!
+!*      8 Bis . Blowing snow scheme
+!              ---------
+!
+IF ( LBLOWSNOW ) THEN
+ CALL BLOWSNOW( XTSTEP, NRR, XPABST, XTHT, XRT, XZZ, XRHODREF,        &
+                XRHODJ, XEXNREF, XRRS, XRTHS, XSVT, XRSVS, XSNWSUBL3D )
+ENDIF
+!
+!-----------------------------------------------------------------------
+!
+!*       8 Ter  VISCOSITY (no-slip condition inside)
+!              ---------
+!
+!
+IF ( LVISC ) THEN
+!
+ZTIME1 = ZTIME2
+!
+   CALL VISCOSITY(CLBCX, CLBCY, NRR, NSV, XMU_V,XPRANDTL,         &
+                  LVISC_UVW,LVISC_TH,LVISC_SV,LVISC_R,            &
+                  LDRAG,    &
+                  XUT, XVT, XWT, XTHT, XRT, XSVT,                 &
+                  XRHODJ, XDXX, XDYY, XDZZ, XDZX, XDZY,           &
+                  XRUS, XRVS, XRWS, XRTHS, XRRS, XRSVS,XDRAG )
+!
+ENDIF
+!
+CALL SECOND_MNH2(ZTIME2)
+!
+XT_VISC = XT_VISC + ZTIME2 - ZTIME1
+!!
+!-------------------------------------------------------------------------------
+!
+!*       9.    ADVECTION
+!              ---------
+!
+ZTIME1 = ZTIME2
+XTIME_BU_PROCESS = 0.
+XTIME_LES_BU_PROCESS = 0.
+!
+!
+!
+CALL MPPDB_CHECK3DM("before ADVEC_METSV:XU/V/W/TH/TKE/T,XRHODJ",PRECISION,&
+                   &  XUT, XVT, XWT, XTHT, XTKET,XRHODJ)
+ CALL ADVECTION_METSV ( TPBAKFILE, CUVW_ADV_SCHEME,                    &
+                 CMET_ADV_SCHEME, CSV_ADV_SCHEME, CCLOUD, NSPLIT,      &
+                 LSPLIT_CFL, XSPLIT_CFL, LCFL_WRIT,                    &
+                 CLBCX, CLBCY, NRR, NSV, TDTCUR, XTSTEP,               &
+                 XUT, XVT, XWT, XTHT, XRT, XTKET, XSVT, XPABST,        &
+                 XTHVREF, XRHODJ, XDXX, XDYY, XDZZ, XDZX, XDZY,        &
+                 XRTHS, XRRS, XRTKES, XRSVS,                           &
+                 XRTHS_CLD, XRRS_CLD, XRSVS_CLD, XRTKEMS               )
+CALL MPPDB_CHECK3DM("after  ADVEC_METSV:XU/V/W/TH/TKE/T,XRHODJ ",PRECISION,&
+                   &  XUT, XVT, XWT, XTHT, XTKET,XRHODJ)
+!
+CALL SECOND_MNH2(ZTIME2)
+!
+XT_ADV = XT_ADV + ZTIME2 - ZTIME1 - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
+!
+!-------------------------------------------------------------------------------
+ZTIME1 = ZTIME2
+XTIME_BU_PROCESS = 0.
+XTIME_LES_BU_PROCESS = 0.
+!
+ZRWS = XRWS
+!
+CALL GRAVITY_IMPL ( CLBCX, CLBCY, NRR, NRRL, NRRI,XTSTEP,            &
+                 XTHT, XRT, XTHVREF, XRHODJ, XRWS, XRTHS, XRRS,      &
+                 XRTHS_CLD, XRRS_CLD                                 )   
+!
+! At the initial instant the difference with the ref state creates a 
+! vertical velocity production that must not be advected as it is 
+! compensated by the pressure gradient
+!
+IF (KTCOUNT == 1 .AND. CCONF=='START') XRWS_PRES = - (XRWS - ZRWS) 
+!
+CALL SECOND_MNH2(ZTIME2)
+!
+XT_GRAV = XT_GRAV + ZTIME2 - ZTIME1 - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
+! 
+IF ( LIBM .AND. CIBM_ADV=='FORCIN' ) THEN
+  !
+  ZTIME1=ZTIME2
+  !
+  CALL IBM_FORCING_ADV   (XRUS,XRVS,XRWS)
+  !
+  CALL SECOND_MNH2(ZTIME2)
+  !
+  XT_IBM_FORC = XT_IBM_FORC + ZTIME2 - ZTIME1
+  !
+ENDIF
+!
+ZTIME1 = ZTIME2
+XTIME_BU_PROCESS = 0.
+XTIME_LES_BU_PROCESS = 0.
+!
+!MPPDB_CHECK_LB=.TRUE.
+CALL MPPDB_CHECK3DM("before ADVEC_UVW:XU/V/W/TH/TKE/T,XRHODJ,XRU/V/Ws",PRECISION,&
+                   &  XUT, XVT, XWT, XTHT, XTKET,XRHODJ,XRUS,XRVS,XRWS)
+IF ((CUVW_ADV_SCHEME(1:3)=='CEN') .AND. (CTEMP_SCHEME == 'LEFR')) THEN
+  IF (CUVW_ADV_SCHEME=='CEN4TH') THEN
+    NULLIFY(TZFIELDC_ll)
+    NULLIFY(TZHALO2C_ll)
+      CALL ADD3DFIELD_ll( TZFIELDC_ll, XUT, 'MODEL_n::XUT' )
+      CALL ADD3DFIELD_ll( TZFIELDC_ll, XVT, 'MODEL_n::XVT' )
+      CALL ADD3DFIELD_ll( TZFIELDC_ll, XWT, 'MODEL_n::XWT' )
+      CALL INIT_HALO2_ll(TZHALO2C_ll,3,IIU,IJU,IKU)
+      CALL UPDATE_HALO_ll(TZFIELDC_ll,IINFO_ll)
+      CALL UPDATE_HALO2_ll(TZFIELDC_ll, TZHALO2C_ll, IINFO_ll)
+  END IF
+ CALL ADVECTION_UVW_CEN(CUVW_ADV_SCHEME,                &
+                           CLBCX, CLBCY,                           &
+                           XTSTEP, KTCOUNT,                        &
+                           XUM, XVM, XWM, XDUM, XDVM, XDWM,        &
+                           XUT, XVT, XWT,                          &
+                           XRHODJ, XDXX, XDYY, XDZZ, XDZX, XDZY,   &
+                           XRUS,XRVS, XRWS,                        &
+                           TZHALO2C_ll                             )
+  IF (CUVW_ADV_SCHEME=='CEN4TH') THEN
+    CALL CLEANLIST_ll(TZFIELDC_ll)
+    NULLIFY(TZFIELDC_ll)
+    CALL  DEL_HALO2_ll(TZHALO2C_ll)
+    NULLIFY(TZHALO2C_ll)
+  END IF
+ELSE
+
+  CALL ADVECTION_UVW(CUVW_ADV_SCHEME, CTEMP_SCHEME,                  &
+                 NWENO_ORDER, LSPLIT_WENO,                           &
+                 CLBCX, CLBCY, XTSTEP,                               &
+                 XUT, XVT, XWT,                                      &
+                 XRHODJ, XDXX, XDYY, XDZZ, XDZX, XDZY,               &
+                 XRUS, XRVS, XRWS,                                   &
+                 XRUS_PRES, XRVS_PRES, XRWS_PRES                     )
+END IF
+!
+CALL MPPDB_CHECK3DM("after  ADVEC_UVW:XU/V/W/TH/TKE/T,XRHODJ,XRU/V/Ws",PRECISION,&
+                   &  XUT, XVT, XWT, XTHT, XTKET,XRHODJ,XRUS,XRVS,XRWS)
+!MPPDB_CHECK_LB=.FALSE.
+!
+CALL SECOND_MNH2(ZTIME2)
+!
+XT_ADVUVW = XT_ADVUVW + ZTIME2 - ZTIME1 - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
+!
+!-------------------------------------------------------------------------------
+!
+IF (NMODEL_CLOUD==IMI .AND. CTURBLEN_CLOUD/='NONE') THEN
+  CALL TURB_CLOUD_INDEX( XTSTEP, TPBAKFILE,                               &
+                         LTURB_DIAG, NRRI,                                &
+                         XRRS, XRT, XRHODJ, XDXX, XDYY, XDZZ, XDZX, XDZY, &
+                         XCEI                                             )
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+!*       18.    LATERAL BOUNDARY CONDITION FOR THE NORMAL VELOCITY
+!               --------------------------------------------------
+!
+ZTIME1 = ZTIME2
+!
+CALL MPPDB_CHECK3DM("before RAD_BOUND :XRU/V/WS",PRECISION,XRUS,XRVS,XRWS)
+ZRUS=XRUS
+ZRVS=XRVS
+ZRWS=XRWS
+!
+if ( .not. l1d ) then
+  if ( lbudget_u ) call Budget_store_init( tbudgets(NBUDGET_U), 'PRES', xrus(:, :, :) )
+  if ( lbudget_v ) call Budget_store_init( tbudgets(NBUDGET_V), 'PRES', xrvs(:, :, :) )
+  if ( lbudget_w ) call Budget_store_init( tbudgets(NBUDGET_W), 'PRES', xrws(:, :, :) )
+end if
+!
+CALL MPPDB_CHECK3DM("before RAD_BOUND : other var",PRECISION,XUT,XVT,XRHODJ,XTKET)
+CALL MPPDB_CHECKLB(XLBXUM,"modeln XLBXUM",PRECISION,'LBXU',NRIMX)
+CALL MPPDB_CHECKLB(XLBYVM,"modeln XLBYVM",PRECISION,'LBYV',NRIMY)
+CALL MPPDB_CHECKLB(XLBXUS,"modeln XLBXUS",PRECISION,'LBXU',NRIMX)
+CALL MPPDB_CHECKLB(XLBYVS,"modeln XLBYVS",PRECISION,'LBYV',NRIMY)
+!
+  CALL RAD_BOUND (CLBCX,CLBCY,CTURB,XCARPKMAX,           &
+                XTSTEP,                                  &
+                XDXHAT, XDYHAT, XZHAT,                   &
+                XUT, XVT,                                &
+                XLBXUM, XLBYVM, XLBXUS, XLBYVS,          &
+                XFLUCTUNW,XFLUCTVNN,XFLUCTUNE,XFLUCTVNS, &
+                XCPHASE, XCPHASE_PBL, XRHODJ,            &
+                XTKET,XRUS, XRVS, XRWS                   )
+ZRUS=XRUS-ZRUS
+ZRVS=XRVS-ZRVS
+ZRWS=XRWS-ZRWS
+!
+CALL SECOND_MNH2(ZTIME2)
+!
+XT_RAD_BOUND = XT_RAD_BOUND + ZTIME2 - ZTIME1
+!
+!-------------------------------------------------------------------------------
+!
+!*       19.    PRESSURE COMPUTATION
+!               --------------------
+!
+ZTIME1 = ZTIME2
+XTIME_BU_PROCESS = 0.
+XTIME_LES_BU_PROCESS = 0.
+!
+ZPABST = XPABST
+!
+IF(.NOT. L1D) THEN
+!
+CALL MPPDB_CHECK3DM("before pressurez:XRU/V/WS",PRECISION,XRUS,XRVS,XRWS)
+  XRUS_PRES = XRUS
+  XRVS_PRES = XRVS
+  XRWS_PRES = XRWS
+!
+  CALL PRESSUREZ( CLBCX,CLBCY,CPRESOPT,NITR,LITRADJ,KTCOUNT, XRELAX,IMI, &
+                  XRHODJ,XDXX,XDYY,XDZZ,XDZX,XDZY,XDXHATM,XDYHATM,XRHOM, &
+                  XAF,XBFY,XCF,XTRIGSX,XTRIGSY,NIFAXX,NIFAXY,            &
+                  NRR,NRRL,NRRI,XDRYMASST,XREFMASS,XMASS_O_PHI0,         &
+                  XTHT,XRT,XRHODREF,XTHVREF,XRVREF,XEXNREF, XLINMASS,    &
+                  XRUS, XRVS, XRWS, XPABST,                              &
+                  XBFB,&
+                  XBF_SXP2_YP1_Z) !JUAN Z_SPLITING
+!
+  XRUS_PRES = XRUS - XRUS_PRES + ZRUS
+  XRVS_PRES = XRVS - XRVS_PRES + ZRVS
+  XRWS_PRES = XRWS - XRWS_PRES + ZRWS
+  CALL MPPDB_CHECK3DM("after pressurez:XRU/V/WS",PRECISION,XRUS,XRVS,XRWS)
+!
+END IF
+!
+CALL SECOND_MNH2(ZTIME2)
+!
+XT_PRESS = XT_PRESS + ZTIME2 - ZTIME1 &
+           - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
+!
+!-------------------------------------------------------------------------------
+!
+!*       20.    CHEMISTRY/AEROSOLS
+!               ------------------
+!
+ZTIME1 = ZTIME2
+XTIME_BU_PROCESS = 0.
+XTIME_LES_BU_PROCESS = 0.
+!
+IF (LUSECHEM) THEN
+  CALL CH_MONITOR_n(ZWETDEPAER,KTCOUNT,XTSTEP, ILUOUT, NVERB)
+END IF
+!
+! For inert aerosol (dust and sea salt) => aer_monitor_n
+IF ((LDUST).OR.(LSALT)) THEN
+!
+! tests to see if any cloud exists
+!   
+    GCLD=.TRUE.
+    IF (GCLD .AND. NRR.LE.3 ) THEN 
+      IF( MAX(MAXVAL(XCLDFR(:,:,:)),MAXVAL(XICEFR(:,:,:))).LE. 1.E-10 .AND. GCLOUD_ONLY ) THEN
+          GCLD = .FALSE.                ! only the cloudy verticals would be 
+                                        ! refreshed but there is no clouds 
+      END IF
+    END IF
+!
+    IF (GCLD .AND. NRR.GE.4 ) THEN 
+      IF( CCLOUD(1:3)=='ICE' )THEN
+        IF( MAXVAL(XRT(:,:,:,2)).LE.XRTMIN(2) .AND.             &
+            MAXVAL(XRT(:,:,:,4)).LE.XRTMIN(4) .AND. GCLOUD_ONLY ) THEN
+            GCLD = .FALSE.            ! only the cloudy verticals would be 
+                                      ! refreshed but there is no cloudwater and ice
+        END IF
+      END IF
+      IF( CCLOUD=='C3R5' )THEN
+        IF( MAXVAL(XRT(:,:,:,2)).LE.XRTMIN_C1R3(2) .AND.             &
+            MAXVAL(XRT(:,:,:,4)).LE.XRTMIN_C1R3(4) .AND. GCLOUD_ONLY ) THEN
+            GCLD = .FALSE.            ! only the cloudy verticals would be 
+                                      ! refreshed but there is no cloudwater and ice
+        END IF
+      END IF
+      IF( CCLOUD=='LIMA' )THEN
+        IF( MAXVAL(XRT(:,:,:,2)).LE.XRTMIN_LIMA(2) .AND.             &
+            MAXVAL(XRT(:,:,:,4)).LE.XRTMIN_LIMA(4) .AND. GCLOUD_ONLY ) THEN
+            GCLD = .FALSE.            ! only the cloudy verticals would be 
+                                      ! refreshed but there is no cloudwater and ice
+        END IF
+      END IF
+    END IF
+
+!
+        CALL AER_MONITOR_n(KTCOUNT,XTSTEP, ILUOUT, NVERB, GCLD)
+END IF
+!
+!
+CALL SECOND_MNH2(ZTIME2)
+!
+XT_CHEM = XT_CHEM + ZTIME2 - ZTIME1 &
+      - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
+!
+ZTIME = ZTIME + XTIME_LES_BU_PROCESS + XTIME_BU_PROCESS
+
+!-------------------------------------------------------------------------------
+!
+!*       20.    WATER MICROPHYSICS
+!               ------------------
+!
+ZTIME1 = ZTIME2
+XTIME_BU_PROCESS = 0.
+XTIME_LES_BU_PROCESS = 0.
+!
+IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN
+!
+  IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO' .OR. CCLOUD == 'C3R5' &
+                                             .OR. CCLOUD == "LIMA" ) THEN
+    IF ( LFORCING ) THEN
+      XWT_ACT_NUC(:,:,:) = XWT(:,:,:) + XWTFRC(:,:,:)
+    ELSE
+      XWT_ACT_NUC(:,:,:) = XWT(:,:,:)
+    END IF
+    IF (CTURB /= 'NONE' ) THEN
+     IF ( ((CCLOUD=='C2R2'.OR.CCLOUD=='KHKO').AND.LACTTKE) .OR. (CCLOUD=='LIMA'.AND.MACTTKE) ) THEN 
+       XWT_ACT_NUC(:,:,:) = XWT_ACT_NUC(:,:,:) +  (2./3. * XTKET(:,:,:))**0.5
+     ELSE
+       XWT_ACT_NUC(:,:,:) = XWT_ACT_NUC(:,:,:) 
+     ENDIF
+    ENDIF
+  ELSE
+    XWT_ACT_NUC(:,:,:) = 0.
+  END IF
+!
+  XRTHS_CLD  = XRTHS
+  XRRS_CLD   = XRRS
+  XRSVS_CLD  = XRSVS
+  IF (CSURF=='EXTE') THEN
+    ALLOCATE (ZSEA(SIZE(XRHODJ,1),SIZE(XRHODJ,2)))
+    ALLOCATE (ZTOWN(SIZE(XRHODJ,1),SIZE(XRHODJ,2)))
+    ZSEA(:,:) = 0.
+    ZTOWN(:,:)= 0.
+    CALL MNHGET_SURF_PARAM_n (PSEA=ZSEA(:,:),PTOWN=ZTOWN(:,:))
+    CALL RESOLVED_CLOUD ( CCLOUD, CACTCCN, CSCONV, CMF_CLOUD, NRR, NSPLITR,    &
+                          NSPLITG, IMI, KTCOUNT,                               &
+                          CLBCX,CLBCY,TPBAKFILE, CRAD, CTURBDIM,               &
+                          LSUBG_COND,LSIGMAS,CSUBG_AUCV,XTSTEP,                &
+                          XZZ, XRHODJ, XRHODREF, XEXNREF,                      &
+                          ZPABST, XTHT,XRT,XSIGS,VSIGQSAT,XMFCONV,XTHM,XRCM,   &
+                          XPABST, XWT_ACT_NUC,XDTHRAD, XRTHS, XRRS,            &
+                          XSVT, XRSVS,                                         &
+                          XSRCT, XCLDFR,XICEFR, XCIT,                          &
+                          LSEDIC,KACTIT, KSEDC, KSEDI, KRAIN, KWARM, KHHONI,   &
+                          LCONVHG, XCF_MF,XRC_MF, XRI_MF,                      &
+                          XINPRC,ZINPRC3D,XINPRR, XINPRR3D, XEVAP3D,           &
+                          XINPRS,ZINPRS3D, XINPRG,ZINPRG3D, XINPRH,ZINPRH3D,   &
+                          XSOLORG, XMI,ZSPEEDC, ZSPEEDR, ZSPEEDS, ZSPEEDG, ZSPEEDH, &
+                          XINDEP, XSUPSAT, XNACT, XNPRO,XSSPRO, XRAINFR,       &
+                          XHLC_HRC, XHLC_HCF, XHLI_HRI, XHLI_HCF,              &
+                          ZSEA, ZTOWN                                          )
+    DEALLOCATE(ZTOWN)
+    DEALLOCATE(ZSEA)
+  ELSE
+    CALL RESOLVED_CLOUD ( CCLOUD, CACTCCN, CSCONV, CMF_CLOUD, NRR, NSPLITR,    &
+                          NSPLITG, IMI, KTCOUNT,                               &
+                          CLBCX,CLBCY,TPBAKFILE, CRAD, CTURBDIM,               &
+                          LSUBG_COND,LSIGMAS,CSUBG_AUCV,                       &
+                          XTSTEP,XZZ, XRHODJ, XRHODREF, XEXNREF,               &
+                          ZPABST, XTHT,XRT,XSIGS,VSIGQSAT,XMFCONV,XTHM,XRCM,   &
+                          XPABST, XWT_ACT_NUC,XDTHRAD, XRTHS, XRRS,            &
+                          XSVT, XRSVS,                                         &
+                          XSRCT, XCLDFR, XICEFR, XCIT,                         &
+                          LSEDIC,KACTIT, KSEDC, KSEDI, KRAIN, KWARM, KHHONI,   &
+                          LCONVHG, XCF_MF,XRC_MF, XRI_MF,                      &
+                          XINPRC,ZINPRC3D,XINPRR, XINPRR3D, XEVAP3D,           &
+                          XINPRS,ZINPRS3D, XINPRG,ZINPRG3D, XINPRH,ZINPRH3D,   &
+                          XSOLORG, XMI,ZSPEEDC, ZSPEEDR, ZSPEEDS, ZSPEEDG, ZSPEEDH, &
+                          XINDEP, XSUPSAT, XNACT, XNPRO,XSSPRO, XRAINFR,       &
+                          XHLC_HRC, XHLC_HCF, XHLI_HRI, XHLI_HCF               )
+  END IF
+  XRTHS_CLD  = XRTHS - XRTHS_CLD
+  XRRS_CLD   = XRRS  - XRRS_CLD
+  XRSVS_CLD  = XRSVS - XRSVS_CLD
+!
+  IF (CCLOUD /= 'REVE' ) THEN
+    XACPRR = XACPRR + XINPRR * XTSTEP
+          IF ( (CCLOUD(1:3) == 'ICE' .AND. LSEDIC ) .OR.                     &
+        ((CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO' &
+                           .OR. CCLOUD == 'LIMA' ) .AND. KSEDC ) )    THEN
+      XACPRC = XACPRC + XINPRC * XTSTEP
+      IF (LDEPOSC .OR. LDEPOC) XACDEP = XACDEP + XINDEP * XTSTEP
+    END IF
+    IF (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'C3R5' .OR. &
+                                 (CCLOUD == 'LIMA' .AND. NMOM_I.GE.1 ) ) THEN
+      XACPRS = XACPRS + XINPRS * XTSTEP
+      XACPRG = XACPRG + XINPRG * XTSTEP
+      IF (CCLOUD == 'ICE4' .OR. (CCLOUD == 'LIMA' .AND. NMOM_H.GE.1)) XACPRH = XACPRH + XINPRH * XTSTEP          
+    END IF
+!
+! Lessivage des CCN et IFN nucléables par Slinn
+!
+    IF (LSCAV .AND. (CCLOUD == 'LIMA')) THEN
+       CALL LIMA_PRECIP_SCAVENGING( YLDIMPHYEX,CST,TBUCONF,TBUDGETS,SIZE(TBUDGETS), &
+                                    CCLOUD, ILUOUT, KTCOUNT,XTSTEP,XRT(:,:,:,3),    &
+                                    XRHODREF, XRHODJ, XZZ, XPABST, XTHT,            &
+                                    XSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END),          &
+                                    XRSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), XINPAP  )
+!
+      XACPAP(:,:) = XACPAP(:,:) + XINPAP(:,:) * XTSTEP
+    END IF
+  END IF
+!
+! It is necessary that SV_C2R2 and SV_C1R3 are contiguous in the preceeding CALL
+!
+END IF
+!
+CALL SECOND_MNH2(ZTIME2)
+!
+XT_CLOUD = XT_CLOUD + ZTIME2 - ZTIME1 &
+           - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
+!
+!-------------------------------------------------------------------------------
+!
+!*       21.    CLOUD ELECTRIFICATION AND LIGHTNING FLASHES
+!               -------------------------------------------
+!
+ZTIME1 = ZTIME2
+XTIME_BU_PROCESS = 0.
+XTIME_LES_BU_PROCESS = 0.
+!
+IF (CELEC /= 'NONE' .AND. (CCLOUD(1:3) == 'ICE')) THEN
+  XWT_ACT_NUC(:,:,:) = 0.
+!
+  XRTHS_CLD = XRTHS
+  XRRS_CLD  = XRRS
+  XRSVS_CLD = XRSVS
+  IF (CSURF=='EXTE') THEN
+    ALLOCATE (ZSEA(SIZE(XRHODJ,1),SIZE(XRHODJ,2)))
+    ALLOCATE (ZTOWN(SIZE(XRHODJ,1),SIZE(XRHODJ,2)))
+    ZSEA(:,:) = 0.
+    ZTOWN(:,:)= 0.
+    CALL MNHGET_SURF_PARAM_n (PSEA=ZSEA(:,:),PTOWN=ZTOWN(:,:))
+    CALL RESOLVED_ELEC_n (CCLOUD, CSCONV, CMF_CLOUD,                     &
+                          NRR, NSPLITR, IMI, KTCOUNT, OEXIT,             &
+                          CLBCX, CLBCY, CRAD, CTURBDIM,                  &
+                          LSUBG_COND, LSIGMAS,VSIGQSAT,CSUBG_AUCV,       &
+                          XTSTEP, XZZ, XRHODJ, XRHODREF, XEXNREF,        &
+                          ZPABST, XTHT, XRTHS, XWT,  XRT, XRRS,          &
+                          XSVT, XRSVS, XCIT,                             &
+                          XSIGS, XSRCT, XCLDFR, XMFCONV, XCF_MF, XRC_MF, &
+                          XRI_MF, LSEDIC, LWARM,                         &
+                          XINPRC, XINPRR, XINPRR3D, XEVAP3D,             &
+                          XINPRS, XINPRG, XINPRH,                        &
+                          ZSEA, ZTOWN                                    )
+    DEALLOCATE(ZTOWN)
+    DEALLOCATE(ZSEA)
+  ELSE
+    CALL RESOLVED_ELEC_n (CCLOUD, CSCONV, CMF_CLOUD,                     &
+                          NRR, NSPLITR, IMI, KTCOUNT, OEXIT,             &
+                          CLBCX, CLBCY, CRAD, CTURBDIM,                  &
+                          LSUBG_COND, LSIGMAS,VSIGQSAT, CSUBG_AUCV,      &
+                          XTSTEP, XZZ, XRHODJ, XRHODREF, XEXNREF,        &
+                          ZPABST, XTHT, XRTHS, XWT,                      &
+                          XRT, XRRS, XSVT, XRSVS, XCIT,                  &
+                          XSIGS, XSRCT, XCLDFR, XMFCONV, XCF_MF, XRC_MF, &
+                          XRI_MF, LSEDIC, LWARM,                         &
+                          XINPRC, XINPRR, XINPRR3D, XEVAP3D,             &
+                          XINPRS, XINPRG, XINPRH                         )
+  END IF
+  XRTHS_CLD = XRTHS - XRTHS_CLD
+  XRRS_CLD  = XRRS  - XRRS_CLD
+  XRSVS_CLD = XRSVS - XRSVS_CLD
+!
+  XACPRR = XACPRR + XINPRR * XTSTEP
+  IF ((CCLOUD(1:3) == 'ICE' .AND. LSEDIC)) & 
+       XACPRC = XACPRC + XINPRC * XTSTEP
+  IF (CCLOUD(1:3) == 'ICE') THEN
+    XACPRS = XACPRS + XINPRS * XTSTEP
+    XACPRG = XACPRG + XINPRG * XTSTEP
+    IF (CCLOUD == 'ICE4') XACPRH = XACPRH + XINPRH * XTSTEP          
+  END IF
+END IF
+!
+CALL SECOND_MNH2(ZTIME2)
+!
+XT_ELEC = XT_ELEC + ZTIME2 - ZTIME1 &
+           - XTIME_LES_BU_PROCESS - XTIME_BU_PROCESS
+!
+!-------------------------------------------------------------------------------
+!
+!*       21.    L.E.S. COMPUTATIONS
+!               -------------------
+!
+ZTIME1 = ZTIME2
+!
+CALL LES_n
+!
+CALL SECOND_MNH2(ZTIME2)
+!
+XT_SPECTRA = XT_SPECTRA + ZTIME2 - ZTIME1 + XTIME_LES_BU + XTIME_LES
+!
+!-------------------------------------------------------------------------------
+!
+!*       21. bis    MEAN_UM
+!               --------------------
+!
+IF (LMEAN_FIELD) THEN
+   CALL MEAN_FIELD(XUT, XVT, XWT, XTHT, XTKET, XPABST, XSVT(:,:,:,1))
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+!*       22.    UPDATE HALO OF EACH SUBDOMAINS FOR TIME T+DT
+!               --------------------------------------------
+!
+ZTIME1 = ZTIME2
+!
+CALL EXCHANGE (XTSTEP,NRR,NSV,XRHODJ,TFIELDS_ll,     &
+               XRUS, XRVS,XRWS,XRTHS,XRRS,XRTKES,XRSVS)
+!
+CALL SECOND_MNH2(ZTIME2)
+!
+XT_HALO = XT_HALO + ZTIME2 - ZTIME1
+!
+!-------------------------------------------------------------------------------
+!
+!*       23.    TEMPORAL SWAPPING
+!               -----------------
+!
+ZTIME1 = ZTIME2
+XTIME_BU_PROCESS = 0.
+!
+CALL ENDSTEP  ( XTSTEP,NRR,NSV,KTCOUNT,IMI,               &
+                CUVW_ADV_SCHEME,CTEMP_SCHEME,XRHODJ,      &
+                XRUS,XRVS,XRWS,XDRYMASSS,                 &
+                XRTHS,XRRS,XRTKES,XRSVS,                  &
+                XLSUS,XLSVS,XLSWS,                        &
+                XLSTHS,XLSRVS,XLSZWSS,                    &
+                XLBXUS,XLBXVS,XLBXWS,                     &
+                XLBXTHS,XLBXRS,XLBXTKES,XLBXSVS,          &
+                XLBYUS,XLBYVS,XLBYWS,                     &
+                XLBYTHS,XLBYRS,XLBYTKES,XLBYSVS,          &
+                XUM,XVM,XWM,XZWS,                         &
+                XUT,XVT,XWT,XPABST,XDRYMASST,             &
+                XTHT, XRT, XTHM, XRCM, XPABSM,XTKET, XSVT,&
+                XLSUM,XLSVM,XLSWM,                        &
+                XLSTHM,XLSRVM,XLSZWSM,                    &
+                XLBXUM,XLBXVM,XLBXWM,                     &
+                XLBXTHM,XLBXRM,XLBXTKEM,XLBXSVM,          &
+                XLBYUM,XLBYVM,XLBYWM,                     &
+                XLBYTHM,XLBYRM,XLBYTKEM,XLBYSVM           )
+!
+CALL SECOND_MNH2(ZTIME2)
+!
+XT_STEP_SWA = XT_STEP_SWA + ZTIME2 - ZTIME1 - XTIME_BU_PROCESS
+!
+!-------------------------------------------------------------------------------
+!
+!*       24.1    BALLOON and AIRCRAFT
+!               --------------------
+!
+ZTIME1 = ZTIME2
+!
+IF (LFLYER) THEN
+  IF (CSURF=='EXTE') THEN
+    ALLOCATE(ZSEA(IIU,IJU))
+    ZSEA(:,:) = 0.
+    CALL MNHGET_SURF_PARAM_n (PSEA=ZSEA(:,:))
+    CALL AIRCRAFT_BALLOON( XTSTEP, XZZ, XMAP, XLONORI, XLATORI,                   &
+                           XUT, XVT, XWT, XPABST, XTHT, XRT, XSVT, XTKET, XTSRAD, &
+                           XRHODREF, XCIT, PSEA = ZSEA(:,:)                       )
+    DEALLOCATE(ZSEA)
+  ELSE
+    CALL AIRCRAFT_BALLOON( XTSTEP, XZZ, XMAP, XLONORI, XLATORI,                   &
+                           XUT, XVT, XWT, XPABST, XTHT, XRT, XSVT, XTKET, XTSRAD, &
+                           XRHODREF, XCIT                                         )
+  END IF
+END IF
+
+!-------------------------------------------------------------------------------
+!
+!*       24.2    STATION (observation diagnostic)
+!               --------------------------------
+!
+IF ( LSTATION ) &
+  CALL STATION_n( XZZ, XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST )
+!
+!---------------------------------------------------------
+!
+!*       24.3    PROFILER (observation diagnostic)
+!               ---------------------------------
+!
+IF (LPROFILER)  THEN
+  IF (CSURF=='EXTE') THEN
+    ALLOCATE(ZSEA(IIU,IJU))
+    ZSEA(:,:) = 0.
+    CALL MNHGET_SURF_PARAM_n (PSEA=ZSEA(:,:))
+    CALL PROFILER_n( XZZ, XRHODREF,                             &
+                     XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET,     &
+                     XTSRAD, XPABST, XAER, XCIT, PSEA=ZSEA(:,:) )
+    DEALLOCATE(ZSEA)
+  ELSE
+    CALL PROFILER_n( XZZ, XRHODREF,                         &
+                     XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, &
+                     XTSRAD, XPABST, XAER, XCIT             )
+  END IF
+END IF
+!
+IF (ALLOCATED(ZSEA)) DEALLOCATE (ZSEA)
+!
+CALL SECOND_MNH2(ZTIME2)
+!
+XT_STEP_MISC = XT_STEP_MISC + ZTIME2 - ZTIME1
+!
+!-------------------------------------------------------------------------------
+!
+!*       24.4   deallocation of observation diagnostics
+!               ---------------------------------------
+!
+CALL END_DIAG_IN_RUN
+!
+!-------------------------------------------------------------------------------
+!
+!
+!*       25.    STORAGE OF BUDGET FIELDS
+!               ------------------------
+!
+ZTIME1 = ZTIME2
+!
+IF ( .NOT. LIO_NO_WRITE ) THEN
+  IF (NBUMOD==IMI .AND. CBUTYPE/='NONE') THEN
+    CALL ENDSTEP_BUDGET(TDIAFILE,KTCOUNT,TDTCUR,XTSTEP,NSV)
+  END IF
+END IF
+!
+CALL SECOND_MNH2(ZTIME2)
+!
+XT_STEP_BUD = XT_STEP_BUD + ZTIME2 - ZTIME1 + XTIME_BU
+!
+!-------------------------------------------------------------------------------
+!
+!*       27.    CURRENT TIME REFRESH
+!               --------------------
+!
+TDTCUR%xtime=TDTCUR%xtime + XTSTEP
+CALL DATETIME_CORRECTDATE(TDTCUR)
+!
+!-------------------------------------------------------------------------------
+!
+!*       28.    CPU ANALYSIS
+!               ------------
+!
+CALL SECOND_MNH2(ZTIME2)
+XT_START=XT_START+ZTIME2-ZEND
+!
+!
+IF ( KTCOUNT == NSTOP .AND. IMI==1) THEN
+  OEXIT=.TRUE.
+END IF
+!
+IF (OEXIT) THEN
+!
+  IF ( .NOT. LIO_NO_WRITE ) THEN
+    IF (LSERIES) CALL WRITE_SERIES_n(TDIAFILE)
+    CALL WRITE_AIRCRAFT_BALLOON(TDIAFILE)
+    CALL WRITE_STATION_n(TDIAFILE)
+    CALL WRITE_PROFILER_n(TDIAFILE)
+    call Write_les_n( tdiafile )
+#ifdef MNH_IOLFI
+    CALL MENU_DIACHRO(TDIAFILE,'END')
+#endif
+    CALL IO_File_close(TDIAFILE)
+    ! Free memory of flyer that is not present on the master process of the file (was allocated in WRITE_AIRCRAFT_BALLOON)
+    CALL AIRCRAFT_BALLOON_FREE_NONLOCAL( TDIAFILE )
+  END IF
+  !
+  CALL IO_File_close(TINIFILE)
+  IF (CSURF=="EXTE") CALL IO_File_close(TINIFILEPGD)
+!
+!*       28.1   print statistics!
+!
+  ! Set File Timing OUTPUT
+  !
+  CALL SET_ILUOUT_TIMING(TLUOUT)
+  !
+  ! Compute global time
+  !
+  CALL TIME_STAT_ll(XT_START,ZTOT)
+  !
+  CALL TIME_HEADER_ll(IMI)
+  !
+  CALL TIME_STAT_ll(XT_1WAY,ZTOT,       ' ONE WAY','=')
+  CALL TIME_STAT_ll(XT_BOUND,ZTOT,      ' BOUNDARIES','=')
+  CALL TIME_STAT_ll(XT_STORE,ZTOT,      ' STORE-FIELDS','=')
+    CALL TIME_STAT_ll(TIMEZ%T_WRIT3D_SEND,ZTOT,    '   W3D_SEND ','-')
+    CALL TIME_STAT_ll(TIMEZ%T_WRIT3D_RECV,ZTOT,    '   W3D_RECV ','-')
+    CALL TIME_STAT_ll(TIMEZ%T_WRIT3D_WRIT,ZTOT,    '   W3D_WRIT ','-')
+    CALL TIME_STAT_ll(TIMEZ%T_WRIT3D_WAIT,ZTOT,    '   W3D_WAIT ','-')
+    CALL TIME_STAT_ll(TIMEZ%T_WRIT3D_ALL ,ZTOT,    '   W3D_ALL ','-')
+    CALL TIME_STAT_ll(TIMEZ%T_WRIT2D_GATH,ZTOT,    '   W2D_GATH ','-')
+    CALL TIME_STAT_ll(TIMEZ%T_WRIT2D_WRIT,ZTOT,    '   W2D_WRIT ','-')
+    CALL TIME_STAT_ll(TIMEZ%T_WRIT2D_ALL ,ZTOT,    '   W2D_ALL ','-')
+  CALL TIME_STAT_ll(XT_GUESS,ZTOT,      ' INITIAL_GUESS','=')
+  CALL TIME_STAT_ll(XT_2WAY,ZTOT,       ' TWO WAY','=')
+  CALL TIME_STAT_ll(XT_ADV,ZTOT,        ' ADVECTION MET','=')
+  CALL TIME_STAT_ll(XT_ADVUVW,ZTOT,     ' ADVECTION UVW','=')
+  CALL TIME_STAT_ll(XT_GRAV,ZTOT,       ' GRAVITY','=')
+  CALL TIME_STAT_ll(XT_FORCING,ZTOT,    ' FORCING','=')
+  CALL TIME_STAT_ll(XT_IBM_FORC,ZTOT,   ' IBM','=')  
+  CALL TIME_STAT_ll(XT_NUDGING,ZTOT,    ' NUDGING','=')
+  CALL TIME_STAT_ll(XT_SOURCES,ZTOT,    ' DYN_SOURCES','=')
+  CALL TIME_STAT_ll(XT_DIFF,ZTOT,       ' NUM_DIFF','=')
+  CALL TIME_STAT_ll(XT_RELAX,ZTOT,      ' RELAXATION','=')
+  !
+  CALL  TIMING_LEGEND() 
+  !
+  CALL TIME_STAT_ll(XT_PARAM,ZTOT,      ' PHYS_PARAM','=')
+    CALL TIME_STAT_ll(XT_RAD,ZTOT,      '   RAD       = '//CRAD  ,'-')
+    CALL TIME_STAT_ll(XT_SHADOWS,ZTOT,  '   SHADOWS'             ,'-')
+    CALL TIME_STAT_ll(XT_DCONV,ZTOT,    '   DEEP CONV = '//CDCONV,'-')
+    CALL TIME_STAT_ll(XT_GROUND,ZTOT,   '   GROUND'              ,'-')
+    ! Blaze perf
+    IF (LBLAZE) THEN
+      CALL TIME_STAT_ll(XFIREPERF,ZBLAZETOT)
+      CALL TIME_STAT_ll(XFIREPERF,ZTOT,           '     BLAZE'          ,'~')
+      CALL TIME_STAT_ll(XGRADPERF,ZBLAZETOT,      '       GRAD(PHI)'    ,' ')
+      CALL TIME_STAT_ll(XROSWINDPERF,ZBLAZETOT,   '       ROS & WIND'   ,' ')
+      CALL TIME_STAT_ll(XPROPAGPERF,ZBLAZETOT,    '       PROPAGATION'  ,' ')
+      CALL TIME_STAT_ll(XFLUXPERF,ZBLAZETOT,      '       HEAT FLUXES'  ,' ')
+    END IF
+    CALL TIME_STAT_ll(XT_TURB,ZTOT,     '   TURB      = '//CTURB ,'-')
+    CALL TIME_STAT_ll(XT_MAFL,ZTOT,     '   MAFL      = '//CSCONV,'-')
+    CALL TIME_STAT_ll(XT_CHEM,ZTOT,     '   CHIMIE'              ,'-')
+    CALL TIME_STAT_ll(XT_EOL,ZTOT,      '   WIND TURBINE'        ,'-')
+  CALL  TIMING_LEGEND()
+  CALL TIME_STAT_ll(XT_COUPL,ZTOT,      ' SET_COUPLING','=')
+  CALL TIME_STAT_ll(XT_RAD_BOUND,ZTOT,  ' RAD_BOUND','=')
+  !
+  CALL  TIMING_LEGEND()
+  ! 
+  CALL TIME_STAT_ll(XT_PRESS,ZTOT,      ' PRESSURE ','=','F')
+  !JUAN Z_SPLITTING
+    CALL TIME_STAT_ll(TIMEZ%T_MAP_B_SX_YP2_ZP1,ZTOT,          '   REMAP       B=>FFTXZ'  ,'-','F')
+    CALL TIME_STAT_ll(TIMEZ%T_MAP_SX_YP2_ZP1_SXP2_Y_ZP1,ZTOT, '   REMAP   FFTXZ=>FFTYZ'  ,'-','F')
+    CALL TIME_STAT_ll(TIMEZ%T_MAP_SXP2_Y_ZP1_B,ZTOT,          '   REMAP   FTTYZ=>B'      ,'-','F')
+    CALL TIME_STAT_ll(TIMEZ%T_MAP_SXP2_Y_ZP1_SXP2_YP1_Z,ZTOT, '   REMAP   FFTYZ=>SUBZ'   ,'-','F')
+    CALL TIME_STAT_ll(TIMEZ%T_MAP_B_SXP2_Y_ZP1,ZTOT,          '   REMAP       B=>FFTYZ-1','-','F')
+    CALL TIME_STAT_ll(TIMEZ%T_MAP_SXP2_YP1_Z_SXP2_Y_ZP1,ZTOT, '   REMAP    SUBZ=>FFTYZ-1','-','F')
+    CALL TIME_STAT_ll(TIMEZ%T_MAP_SXP2_Y_ZP1_SX_YP2_ZP1,ZTOT, '   REMAP FFTYZ-1=>FFTXZ-1','-','F')
+    CALL TIME_STAT_ll(TIMEZ%T_MAP_SX_YP2_ZP1_B,ZTOT,          '   REMAP FFTXZ-1=>B     ' ,'-','F')
+  ! JUAN P1/P2
+  CALL TIME_STAT_ll(XT_CLOUD,ZTOT,      ' RESOLVED_CLOUD','=')
+  CALL TIME_STAT_ll(XT_ELEC,ZTOT,      ' RESOLVED_ELEC','=')
+  CALL TIME_STAT_ll(XT_HALO,ZTOT,       ' EXCHANGE_HALO','=')
+  CALL TIME_STAT_ll(XT_STEP_SWA,ZTOT,   ' ENDSTEP','=')
+  CALL TIME_STAT_ll(XT_STEP_BUD,ZTOT,   ' BUDGETS','=')
+  CALL TIME_STAT_ll(XT_SPECTRA,ZTOT,    ' LES','=')
+  CALL TIME_STAT_ll(XT_STEP_MISC,ZTOT,  ' MISCELLANEOUS','=')
+  IF (LIBM) CALL TIME_STAT_ll(XT_IBM_FORC,ZTOT,' IBM FORCING','=') 
+  !
+  ! sum of call subroutine
+  !
+  ZALL   = XT_1WAY + XT_BOUND   + XT_STORE   + XT_GUESS    +  XT_2WAY   + &
+           XT_ADV  + XT_FORCING + XT_NUDGING + XT_SOURCES  +  XT_DIFF   + &
+           XT_ADVUVW  + XT_GRAV + XT_IBM_FORC                           + &
+           XT_RELAX+ XT_PARAM   + XT_COUPL   + XT_RAD_BOUND+XT_PRESS    + &
+           XT_CLOUD+ XT_ELEC    + XT_HALO    + XT_SPECTRA + XT_STEP_SWA + &
+           XT_STEP_MISC+ XT_STEP_BUD
+  CALL TIME_STAT_ll(ZALL,ZTOT,          ' SUM(CALL)','=')
+  CALL  TIMING_SEPARATOR('=')
+  !
+  ! Gobale Stat
+  !
+  WRITE(ILUOUT,FMT=*)
+  WRITE(ILUOUT,FMT=*)
+  CALL  TIMING_LEGEND() 
+  !
+  ! MODELN all included
+  !
+  CALL  TIMING_SEPARATOR('+')
+  CALL  TIMING_SEPARATOR('+')  
+  WRITE(YMI,FMT="(I0)") IMI
+  CALL TIME_STAT_ll(XT_START,ZTOT,      ' MODEL'//YMI,'+')
+  CALL  TIMING_SEPARATOR('+')
+  CALL  TIMING_SEPARATOR('+')
+  CALL  TIMING_SEPARATOR('+')
+  !
+  ! Timing/ Steps
+  !
+  ZTIME_STEP     =  XT_START / REAL(KTCOUNT)
+  WRITE(YTCOUNT,FMT="(I0)") KTCOUNT
+  CALL TIME_STAT_ll(ZTIME_STEP,ZTOT,     ' SECOND/STEP='//YTCOUNT,'=')
+  !
+  ! Timing/Step/Points
+  !
+  IPOINTS = NIMAX_ll*NJMAX_ll*NKMAX
+  WRITE(YPOINTS,FMT="(I0)") IPOINTS
+  ZTIME_STEP_PTS =  ZTIME_STEP / REAL(IPOINTS) * 1e6
+  CALL TIME_STAT_ll(ZTIME_STEP_PTS,ZTOT_PT)
+  CALL TIME_STAT_ll(ZTIME_STEP_PTS,ZTOT_PT,  ' MICROSEC/STP/PT='//YPOINTS,'-')
+  !
+  CALL  TIMING_SEPARATOR('=')
+  !
+END IF
+!
+END SUBROUTINE MODEL_n
diff --git a/src/mesonh/ext/radiations.f90 b/src/mesonh/ext/radiations.f90
new file mode 100644
index 0000000000000000000000000000000000000000..2ce3ff7dd8565c819745b9051509849eeee27520
--- /dev/null
+++ b/src/mesonh/ext/radiations.f90
@@ -0,0 +1,3504 @@
+!MNH_LIC Copyright 1995-2022 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
+!MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
+!    ########################
+     MODULE MODI_RADIATIONS   
+!    ########################
+!
+CONTAINS
+!
+!   ############################################################################
+    SUBROUTINE RADIATIONS (TPFILE,OCLEAR_SKY,OCLOUD_ONLY,                      &
+               KCLEARCOL_TM1,HEFRADL,HEFRADI,HOPWSW,HOPISW,HOPWLW,HOPILW,      &
+               PFUDG, KDLON, KFLEV, KRAD_DIAG, KFLUX, KRAD, KAER, KSWB_OLD,    &
+               KSWB_MNH,KLWB_MNH, KSTATM,KRAD_COLNBR,PCOSZEN,PSEA, PCORSOL,    &
+               PDIR_ALB, PSCA_ALB,PEMIS, PCLDFR, PCCO2, PTSRAD, PSTATM,        &
+               PTHT, PRT, PPABST, POZON, PAER, PDST_WL, PAER_CLIM, PSVT,       &
+               PDTHRAD, PSRFLWD, PSRFSWD_DIR,PSRFSWD_DIF, PRHODREF, PZZ,       &
+               PRADEFF, PSWU, PSWD, PLWU,PLWD, PDTHRADSW, PDTHRADLW            )
+!   ############################################################################
+!
+!!****  *RADIATIONS * - routine to call the SW and LW radiation calculations
+!!
+!!    PURPOSE
+!!    -------
+!!      The purpose of this routine is to prepare the temperature, water vapor
+!!    liquid water, cloud fraction, ozone profiles for the ECMWF radiation
+!!    calculations. There is a great number of available radiative fluxes in
+!!    the output, but only the potential temperature radiative tendency and the
+!!    SW and LW surface fluxes are provided in the output of the routine.
+!!    Two simplified computations are available (switches OCLEAR_SKY and
+!!    OCLOUD_ONLY). When OCLOUD_ONLY is .TRUE. the computations are performed
+!!    for the cloudy columns only. Furthermore with OCLEAR_SKY being .TRUE.
+!!    the clear sky columns are averaged and the computations are made for
+!!    the cloudy columns plus a single ensemble-mean clear sky column.
+!!
+!!**  METHOD
+!!    ------
+!!      First the temperature, water vapor, liquid water, cloud fraction
+!!    and  profile arrays are built using the current model fields and
+!!    the standard atmosphere for the upper layer filling.
+!!    The standard atmosphere is used between the levels IKUP and
+!!    KFLEV where KFLEV is the number of vertical levels for the radiation 
+!!    computations.    
+!!    The aerosols optical thickness and the ozone fields come directly
+!!    from ini_radiation step (climatlogies used) and are already defined for KFLEV. 
+!!    Surface parameter ( albedo, emiss ) are also defined from current surface fields.
+!!    In the case of clear-sky or cloud-only approximations, the cloudy
+!!    columns are selected by testing the vertically integrated cloud fraction
+!!    and the radiation computations are performed for these columns plus the
+!!    mean clear-sky one. In addition, columns where cloud have disapeared are determined
+!!    by saving cloud trace between radiation step and they are also recalculated
+!!    in cloud only step. In all case, the sun position correponds to  the centered
+!!    time between 2 full radiation steps (determined in physparam).
+!!      Then the ECMWF radiation package is called and the radiative
+!!    heating/cooling tendancies are reformatted in case of partial
+!!    computations.  In case of "cloud-only approximation" the only cloudy
+!!    column radiative fields are updated.
+!!
+!!    EXTERNAL
+!!    --------
+!!      Subroutine ECMWF_RADIATION_VERS2 : ECMWF interface calling radiation routines
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!      Module MODD_CST  : constants
+!!        XP00 : reference pressure
+!!        XCPD : calorific capacity of dry air at constant pressure
+!!        XRD  : gas constant for dry air
+!!      Module MODD_PARAMETERS : parameters
+!!        JPHEXT : Extra columns on the horizontal boundaries
+!!        JPVEXT : Extra levels on the vertical boundaries
+!!
+!!    REFERENCE
+!!    ---------
+!!      Book2 of documentation ( routine RADIATIONS )
+!!
+!!    AUTHOR
+!!    ------
+!!	J.-P. Pinty      * Laboratoire d'Aerologie*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    26/02/95 
+!!      J.Stein     20/12/95 add the array splitting in order to save memory
+!!      J.-P. Pinty 19/11/96 change the split arrays, specific humidity
+!!                           and add the ice phase
+!!      J.Stein     22/06/97 use of the absolute pressure
+!!      P.Jabouille 31/07/97 impose a zero humidity for dry simulation
+!!      V.Masson    22/09/97 case of clear-sky approx. with no clear-sky column
+!!      V.Masson    07/11/97 half level pressure defined from averaged Exner
+!!                           function
+!!      V.Masson    07/11/97 modification of junction between standard atm
+!!                           and model for half level variables (top model
+!!                           pressure and temperatures are used preferentially
+!!                           to atm standard profile for the first point).
+!!      P.Jabouille 24/08/98 impose positivity for ZQLAVE
+!!      J.-P. Pinty 29/01/98 add storage for diagnostics
+!!      J. Stein    18/07/99 add the ORAD_DIAG switch and keep inside the
+!!                           subroutine the partial tendencies 
+!!
+!!      F.Solmon    04/03/01  MAJOR MODIFICATIONS, updated version of ECMWF radiation scheme
+!!      P.Jabouille 05/05/03 bug in humidity conversion
+!!      Y.Seity     25/08/03  KSWB=6 for SW direct and scattered surface 
+!!                            downward fluxes used in surface scheme. 
+!!      P. Tulet    01/20/05  climatologic SSA
+!!      A. Grini    05/20/05  dust direct effect (optical properties)
+!!      V.Masson, C.Lac 08/10 Correction of inversion of Diffuse and direct albedo
+!!      B.Aouizerats 2010     Explicit aerosol optical properties
+!!      C.Lac       11/2015   Correction on aerosols
+!!      B.Vie            /13  LIMA
+!!      J.Escobar 30/03/2017  : Management of compilation of ECMWF_RAD in REAL*8 with MNH_REAL=R4
+!!      J.Escobar 29/06/2017  : Check if Pressure Decreasing with height <-> elsif PB & STOP 
+!!      Q.LIBOIS  06/2017     : correction on CLOUD_ONLY
+!!      Q.Libois  02/2018     : ECRAD
+!!      Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!!      J.Escobar 28/06/2018 : Reproductible parallelisation of CLOUD_ONLY case
+!!      J.Escobar 20/07/2018 : for real*4 compilation, convert with REAL(X) argument to SUM_DD... 
+!!      P.Wautelet 22/01/2019: use standard FLUSH statement instead of non standard intrinsics
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
+!  P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function
+!  P. Wautelet 06/09/2022: small fix: GSURF_CLOUD was not set outside of physical domain
+!-------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+!
+USE PARKIND1,         ONLY: JPRB
+USE OYOESW    , ONLY : RTAUA    ,RPIZA    ,RCGA
+!
+USE MODD_CH_AEROSOL,  ONLY: LORILAM
+USE MODD_CONF,        ONLY: LCARTESIAN
+USE MODD_CST
+USE MODD_DUST,        ONLY: LDUST
+use modd_field,          only: tfieldmetadata, TYPEREAL
+USE MODD_GRID ,       ONLY: XLAT0, XLON0
+USE MODD_GRID_n ,     ONLY: XLAT, XLON
+USE MODD_IO,          ONLY: TFILEDATA
+USE MODD_LUNIT_n,     ONLY: TLUOUT
+USE MODD_NSV,         ONLY: NSV_C2R2,NSV_C2R2BEG,NSV_C2R2END,     &
+                            NSV_C1R3,NSV_C1R3BEG,NSV_C1R3END,     &
+                            NSV_DSTBEG, NSV_DSTEND,               &
+                            NSV_AERBEG, NSV_AEREND,               &
+                            NSV_SLTBEG, NSV_SLTEND,               &
+                            NSV_LIMA,NSV_LIMA_BEG,NSV_LIMA_END,   &
+                            NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_NI
+USE MODD_PARAMETERS
+USE MODD_PARAM_LIMA
+USE MODD_PARAM_n,     ONLY: CCLOUD, CRAD
+USE MODD_PARAM_RAD_n, ONLY: CAOP
+USE MODD_RAIN_ICE_DESCR
+USE MODD_SALT,        ONLY: LSALT
+USE MODD_TIME
+!
+USE MODE_DUSTOPT
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
+USE MODE_ll
+use mode_msg
+USE MODE_REPRO_SUM,      ONLY : SUM_DD_R2_R1_ll,SUM_DD_R1_ll
+!
+#ifdef MNH_PGI
+USE MODE_PACK_PGI
+#endif
+USE MODE_SALTOPT
+USE MODE_SUM_ll,          ONLY: MIN_ll
+USE MODE_SUM2_ll,         ONLY: GMINLOC_ll
+USE MODE_THERMO
+!
+USE MODI_AEROOPT_GET
+USE MODI_ECMWF_RADIATION_VERS2
+USE MODI_ECRAD_INTERFACE
+USE MODD_VAR_ll,      ONLY: IP
+!  
+IMPLICIT NONE
+!
+!*       0.1   DECLARATIONS OF DUMMY ARGUMENTS :
+!
+TYPE(TFILEDATA),  INTENT(IN)         :: TPFILE    ! Output file
+LOGICAL, INTENT(IN)                  :: OCLOUD_ONLY! flag for the cloud column
+                                                   !    computations only
+LOGICAL, INTENT(IN)                  :: OCLEAR_SKY ! 
+INTEGER, INTENT(IN)                  :: KDLON   ! number of columns where the
+                                                ! radiation calculations are
+                                                !       performed
+INTEGER, INTENT(IN)                  :: KFLEV   ! number of vertical levels
+                                                !    where the radiation
+                                                ! calculations are performed
+INTEGER, INTENT(IN)                  :: KRAD_DIAG  ! index for the number of
+                                                   !  fields in the output
+INTEGER, INTENT(IN)                  :: KFLUX   ! number of top and ground 
+                                                ! fluxes for the ZFLUX array
+INTEGER, INTENT(IN)                  :: KRAD    ! number of satellite radiances
+                                                ! for the ZRAD and ZRADCS arrays
+INTEGER, INTENT(IN)                  :: KAER    ! number of AERosol classes
+
+INTEGER, INTENT(IN)                  :: KSWB_OLD    ! number of SW band ECMWF 
+INTEGER, INTENT(IN)                  :: KSWB_MNH    ! number of SW band ECRAD
+INTEGER, INTENT(IN)                  :: KLWB_MNH    ! number of LW band ECRAD
+INTEGER, INTENT(IN)                  :: KSTATM  ! index of the standard 
+                                                ! atmosphere level just above
+                                                !      the model top
+INTEGER, INTENT(IN)                  :: KRAD_COLNBR ! factor by which the memory
+                                                    ! is split
+                                                    !
+                                               !Choice of :             
+CHARACTER (LEN=*), INTENT (IN)       :: HEFRADL ! 
+CHARACTER (LEN=*), INTENT (IN)       :: HEFRADI ! 
+CHARACTER (LEN=*), INTENT (IN)       :: HOPWSW !cloud water SW optical properties   
+CHARACTER (LEN=*), INTENT (IN)       :: HOPISW !ice water SW optical properties 
+CHARACTER (LEN=*), INTENT (IN)       :: HOPWLW !cloud water LW optical properties
+CHARACTER (LEN=*), INTENT (IN)       :: HOPILW !ice water  LW optical properties
+REAL,               INTENT(IN)       :: PFUDG  ! subgrid cloud inhomogenity factor
+REAL, DIMENSION(:,:),     INTENT(IN) :: PCOSZEN ! COS(zenithal solar angle)
+REAL,                     INTENT(IN) :: PCORSOL ! SOLar constant CORrection
+REAL, DIMENSION(:,:),     INTENT(IN) :: PSEA    ! Land-sea mask
+!
+REAL, DIMENSION(:,:,:),   INTENT(IN) :: PDIR_ALB! Surface direct ALBedo
+REAL, DIMENSION(:,:,:),   INTENT(IN) :: PSCA_ALB! Surface diffuse ALBedo
+REAL, DIMENSION(:,:,:),   INTENT(IN) :: PEMIS   ! Surface IR EMISsivity
+REAL, DIMENSION(:,:,:),   INTENT(IN) :: PCLDFR  ! CLouD FRaction
+REAL,                     INTENT(IN) :: PCCO2   ! CO2 content
+REAL, DIMENSION(:,:),     INTENT(IN) :: PTSRAD  ! RADiative Surface Temperature
+REAL, DIMENSION(:,:),     INTENT(IN) :: PSTATM  ! selected standard atmosphere
+!
+REAL, DIMENSION(:,:,:),   INTENT(IN) :: PTHT    ! THeta at t
+REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRT     ! moist variables at t (humidity, cloud water, rain water, ice water)
+REAL, DIMENSION(:,:,:),   INTENT(IN) :: PPABST  ! pressure at t
+REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT    ! scalar variable ( C2R2 and C1R3  particle)
+!
+REAL, DIMENSION(:,:,:),   POINTER    :: POZON   ! OZONE field from clim.
+REAL, DIMENSION(:,:,:,:), POINTER    :: PAER    ! AERosols optical thickness from clim. 
+REAL, DIMENSION(:,:,:,:), POINTER    :: PDST_WL    ! AERosols Extinction by wavelength . 
+REAL, DIMENSION(:,:,:,:), POINTER    :: PAER_CLIM    ! AERosols optical thickness from clim.
+                                                ! note : the vertical dimension of 
+                                                ! these fields include the "radiation levels"
+                                                ! above domain top
+                                                ! 
+                                                 
+REAL, DIMENSION(:,:,:), INTENT(IN)   :: PRHODREF ![kg/m3] air density
+REAL, DIMENSION(:,:,:), INTENT(IN)   :: PZZ      ![m] height of layers
+
+INTEGER, DIMENSION(:,:), INTENT(INOUT)  :: KCLEARCOL_TM1 ! trace of cloud/clear col
+                                                         ! at the previous radiation step
+!                                                 
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PDTHRAD ! THeta RADiative Tendancy
+REAL, DIMENSION(:,:),     INTENT(INOUT) :: PSRFLWD ! Downward SuRFace LW Flux
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PSRFSWD_DIR ! Downward SuRFace SW Flux DIRect 
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PSRFSWD_DIF ! Downward SuRFace SW Flux DIFfuse 
+REAL, DIMENSION(:,:,:),     INTENT(INOUT) :: PSWU ! upward SW Flux 
+REAL, DIMENSION(:,:,:),     INTENT(INOUT) :: PSWD ! downward SW Flux 
+REAL, DIMENSION(:,:,:),     INTENT(INOUT) :: PLWU ! upward LW Flux 
+REAL, DIMENSION(:,:,:),     INTENT(INOUT) :: PLWD ! downward LW Flux 
+REAL, DIMENSION(:,:,:),     INTENT(INOUT) :: PDTHRADSW ! dthrad sw 
+REAL, DIMENSION(:,:,:),     INTENT(INOUT) :: PDTHRADLW !  dthradsw
+REAL, DIMENSION(:,:,:),     INTENT(INOUT) :: PRADEFF ! effective radius
+!
+!
+!*       0.2   DECLARATIONS OF LOCAL VARIABLES
+!
+LOGICAL                         :: GNOCL     ! .TRUE. when no cloud is present
+                                             !     with OCLEAR_SKY .TRUE.
+LOGICAL                         :: GAOP      ! .TRUE. when CAOP='EXPL'
+LOGICAL, DIMENSION(KDLON,KFLEV) :: GCLOUD    ! .TRUE. for the cloudy columns
+LOGICAL, DIMENSION(KFLEV,KDLON) :: GCLOUDT   ! transpose of the GCLOUD array
+LOGICAL, DIMENSION(KDLON)       :: GCLEAR_2D ! .TRUE. for the clear-sky columns
+LOGICAL, DIMENSION(KDLON,KFLEV) :: GCLEAR    ! .TRUE. for all the levels of the 
+                                             !                clear-sky columns
+LOGICAL, DIMENSION(KDLON,KSWB_MNH)  :: GCLEAR_SWB! .TRUE. for all the bands of the  
+                                             !                clear-sky columns
+INTEGER, DIMENSION(:), ALLOCATABLE :: ICLEAR_2D_TM1 !
+!
+INTEGER :: JI,JJ,JK,JK1,JK2,JKRAD,JALBS! loop indices
+!
+INTEGER :: IIB           ! I index value of the first inner mass point
+INTEGER :: IJB           ! J index value of the first inner mass point
+INTEGER :: IKB           ! K index value of the first inner mass point
+INTEGER :: IIE           ! I index value of the last inner mass point
+INTEGER :: IJE           ! J index value of the last inner mass point
+INTEGER :: IKE           ! K index value of the last inner mass point
+INTEGER :: IKU           ! array size for the third  index
+INTEGER :: IIJ           ! reformatted array index
+INTEGER :: IKSTAE        ! level number of the STAndard atmosphere array
+INTEGER :: IKUP          ! vertical level above which STAndard atmosphere data
+                         ! are filled in
+!
+INTEGER :: ICLEAR_COL    ! number of    clear-sky columns
+INTEGER :: ICLOUD_COL    ! number of    cloudy    columns
+INTEGER :: ICLOUD        ! number of levels corresponding of the cloudy columns
+INTEGER :: IDIM          ! effective number of columns for which the radiation
+                         ! code is run
+INTEGER :: INIR          ! index corresponding to NIR fisrt band (in SW)
+!
+REAL, DIMENSION(:,:), ALLOCATABLE   :: ZTAVE    ! mean-layer temperature
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZTAVE_RAD    ! mean-layer temperature
+REAL, DIMENSION(:,:), ALLOCATABLE   :: ZPAVE    ! mean-layer pressure
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZPAVE_RAD    ! mean-layer pressure
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZQSAVE   ! saturation specific humidity
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZQVAVE   ! mean-layer specific humidity
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZQLAVE   ! Liquid water KG/KG
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZQRAVE   ! Rain water  KG/KG
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZQIAVE   ! Ice water Kg/KG
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZQLWC   ! liquid water content kg/m3
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZQRWC   ! Rain water  content kg/m3
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZQIWC   ! ice water content  kg/m3
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZCFAVE   ! mean-layer cloud fraction
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZO3AVE   ! mean-layer ozone content 
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZPRES_HL ! half-level pressure
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZT_HL    ! half-level temperature
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZDPRES   ! layer pressure thickness
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZCCT_C2R2! Cloud water Concentarion (C2R2)
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZCRT_C2R2! Rain water Concentarion (C2R2)
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZCIT_C1R3! Ice water Concentarion (C2R2)
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZCCT_LIMA! Cloud water Concentration(LIMA)
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZCRT_LIMA! Rain water Concentration(LIMA)
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZCIT_LIMA! Ice water Concentration(LIMA)
+REAL(KIND=JPRB), DIMENSION(:,:,:), ALLOCATABLE :: ZAER     ! aerosol optical thickness
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZALBP    ! spectral surface albedo for direct radiations
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZALBD    ! spectral surface albedo for diffuse radiations 
+REAL(KIND=JPRB), DIMENSION (:,:),  ALLOCATABLE :: ZEMIS    ! surface LW  emissivity 
+REAL(KIND=JPRB), DIMENSION (:,:), ALLOCATABLE  :: ZEMIW    ! surface LW  WINDOW emissivity
+REAL(KIND=JPRB), DIMENSION(:), ALLOCATABLE     :: ZTS      ! reformatted surface PTSRAD array 
+REAL(KIND=JPRB), DIMENSION(:), ALLOCATABLE     :: ZLSM     ! reformatted land sea mask
+REAL(KIND=JPRB), DIMENSION(:),   ALLOCATABLE   :: ZRMU0    ! Reformatted ZMU0 array
+REAL(KIND=JPRB)                     :: ZRII0    ! corrected solar constant
+!
+REAL, DIMENSION(:,:), ALLOCATABLE :: ZDTLW    ! LW temperature tendency
+REAL, DIMENSION(:,:), ALLOCATABLE :: ZDTSW    ! SW temperature tendency
+REAL, DIMENSION(:,:), ALLOCATABLE :: ZNFLW_CS ! CLEAR-SKY LW NET FLUXES
+REAL, DIMENSION(:,:), ALLOCATABLE :: ZNFLW    ! TOTAL LW NET FLUXES
+REAL, DIMENSION(:,:), ALLOCATABLE :: ZNFSW_CS ! CLEAR-SKY SW NET FLUXES
+REAL, DIMENSION(:,:), ALLOCATABLE :: ZNFSW    ! TOTAL SW NET FLUXES
+REAL, DIMENSION(:,:), ALLOCATABLE :: ZFLUX_TOP_GND_IRVISNIR ! Top and 
+                                                            ! Ground radiative FLUXes
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZFLUX_SW_DOWN ! DowNward SW Flux profiles
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZFLUX_SW_UP   ! UPward   SW Flux profiles
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZFLUX_LW      !          LW Flux profiles
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZDTLW_CS ! LW Clear-Sky temp. tendency
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZDTSW_CS ! SW Clear-Sky temp. tendency
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZFLUX_TOP_GND_IRVISNIR_CS ! Top and
+                                                  !  Ground Clear-Sky radiative FLUXes
+REAL, DIMENSION(:,:), ALLOCATABLE   :: ZSFSWDIR !surface SW direct flux
+REAL, DIMENSION(:,:), ALLOCATABLE   :: ZSFSWDIF !surface SW diffuse flux
+
+REAL, DIMENSION(:),     ALLOCATABLE :: ZPLAN_ALB_VIS, ZPLAN_ALB_NIR
+                        ! PLANetary ALBedo in VISible, Near-InfraRed regions
+REAL, DIMENSION(:),     ALLOCATABLE :: ZPLAN_TRA_VIS, ZPLAN_TRA_NIR
+                        ! PLANetary TRANsmission in VISible, Near-InfraRed regions
+REAL, DIMENSION(:),     ALLOCATABLE :: ZPLAN_ABS_VIS, ZPLAN_ABS_NIR
+                        ! PLANetary ABSorption in VISible, Near-InfraRed regions
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZEFCL_LWD, ZEFCL_LWU
+                        ! EFective  DOWNward and UPward LW nebulosity (equivalent emissivities)
+                        ! undefined if RRTM is used for LW
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZFLWP, ZFIWP
+                        ! Liquid and Ice Water Path
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZRADLP, ZRADIP
+                        ! Cloud liquid water and ice effective radius
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZEFCL_RRTM, ZCLSW_TOTAL
+                        ! effective LW nebulosity ( RRTM case) 
+                        ! and SW CLoud fraction for mixed phase clouds
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTAU_TOTAL, ZOMEGA_TOTAL, ZCG_TOTAL
+                        ! effective optical thickness, single scattering albedo
+                        ! and asymetry factor for mixed phase clouds
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZFLUX_SW_DOWN_CS, ZFLUX_SW_UP_CS
+                        ! Clear-Sky  DowNward and UPward   SW Flux profiles
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZFLUX_LW_CS
+                        ! Thicknes of the mesh
+REAL(KIND=JPRB), DIMENSION(:,:),   ALLOCATABLE :: ZDZ
+!
+REAL, DIMENSION(KDLON,KFLEV) :: ZZDTSW ! SW diabatic heating
+REAL, DIMENSION(KDLON,KFLEV) :: ZZDTLW ! LW diabatic heating
+REAL, DIMENSION(KDLON)       :: ZZTGVIS! SW surface flux in the VIS band
+REAL, DIMENSION(KDLON)       :: ZZTGNIR! SW surface flux in the NIR band
+REAL, DIMENSION(KDLON)       :: ZZTGIR ! LW surface flux in the IR bands
+REAL, DIMENSION(KDLON,SIZE(PSRFSWD_DIR,3)) :: ZZSFSWDIR
+!                                      ! SW direct surface flux   
+REAL, DIMENSION(KDLON,SIZE(PSRFSWD_DIR,3)) :: ZZSFSWDIF
+!                                      ! SW diffuse surface flux   
+!
+REAL, DIMENSION(KDLON)       :: ZCLOUD ! vertically summed cloud fraction
+!
+REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) :: ZEXNT ! Exner function
+REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2))    :: ZLWD    ! surface Downward LW flux
+REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PSRFSWD_DIR,3)) :: ZSWDDIR ! surface
+REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PSRFSWD_DIR,3)) :: ZSWDDIF ! surface Downward SW diffuse flux
+REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3),KSWB_OLD) :: ZPIZAZ ! Aerosols SSA
+REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3),KSWB_OLD) :: ZTAUAZ ! Aerosols Optical Detph
+REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3),KSWB_OLD) :: ZCGAZ  ! Aerosols Asymetric factor
+REAL :: ZZTGVISC    ! downward surface SW flux (VIS band) for clear_sky
+REAL :: ZZTGNIRC    ! downward surface SW flux (NIR band) for clear_sky
+REAL :: ZZTGIRC     ! downward surface LW flux for clear_sky
+REAL, DIMENSION(SIZE(PSRFSWD_DIR,3)) :: ZZSFSWDIRC
+!                   ! downward surface SW direct flux for clear sky
+REAL, DIMENSION(SIZE(PSRFSWD_DIR,3)) :: ZZSFSWDIFC
+!                   ! downward surface SW diffuse flux for clear sky
+REAL, DIMENSION(KFLEV) :: ZT_CLEAR  ! ensemble mean clear-sky temperature
+REAL, DIMENSION(KFLEV) :: ZP_CLEAR  ! ensemble mean clear-sky temperature
+REAL, DIMENSION(KFLEV) :: ZQV_CLEAR ! ensemble mean clear-sky specific humidity
+REAL, DIMENSION(KFLEV) :: ZOZ_CLEAR ! ensemble mean clear-sky ozone
+REAL, DIMENSION(KFLEV) :: ZHP_CLEAR ! ensemble mean clear-sky half-lev. pression
+REAL, DIMENSION(KFLEV) :: ZHT_CLEAR ! ensemble mean clear-sky half-lev. temp.
+REAL, DIMENSION(KFLEV) :: ZDP_CLEAR ! ensemble mean clear-sky pressure thickness
+REAL, DIMENSION(KFLEV,KAER) :: ZAER_CLEAR  ! ensemble mean clear-sky aerosols optical thickness
+REAL, DIMENSION(KSWB_MNH)       :: ZALBP_CLEAR ! ensemble mean clear-sky surface albedo (parallel)
+REAL, DIMENSION(KSWB_MNH)       :: ZALBD_CLEAR ! ensemble mean clear-sky surface albedo (diffuse)
+REAL                        :: ZEMIS_CLEAR ! ensemble mean clear-sky surface emissivity
+REAL                        :: ZEMIW_CLEAR ! ensemble mean clear-sky LW window
+REAL                        :: ZRMU0_CLEAR ! ensemble mean clear-sky MU0
+REAL                        :: ZTS_CLEAR   ! ensemble mean clear-sky surface temperature.
+REAL                        :: ZLSM_CLEAR  !  ensemble mean clear-sky land sea-mask  
+REAL                        :: ZLAT_CLEAR,ZLON_CLEAR
+!
+!work arrays
+REAL, DIMENSION(:),   ALLOCATABLE :: ZWORK1, ZWORK2, ZWORK3, ZWORK
+REAL, DIMENSION(:,:), ALLOCATABLE :: ZWORK4, ZWORK1AER, ZWORK2AER, ZWORK_GRID
+LOGICAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2)) :: ZWORKL
+!
+!  split arrays used to split the memory required by the ECMWF_radiation 
+!  subroutine, the fields have the same meaning as their complete counterpart
+!
+REAL(KIND=JPRB), DIMENSION(:,:),   ALLOCATABLE :: ZALBP_SPLIT, ZALBD_SPLIT
+REAL(KIND=JPRB), DIMENSION(:),     ALLOCATABLE :: ZEMIS_SPLIT, ZEMIW_SPLIT
+REAL(KIND=JPRB), DIMENSION(:),     ALLOCATABLE :: ZRMU0_SPLIT
+REAL(KIND=JPRB), DIMENSION(:,:),   ALLOCATABLE :: ZCFAVE_SPLIT
+REAL(KIND=JPRB), DIMENSION(:,:),   ALLOCATABLE :: ZO3AVE_SPLIT
+REAL(KIND=JPRB), DIMENSION(:,:),   ALLOCATABLE :: ZT_HL_SPLIT
+REAL(KIND=JPRB), DIMENSION(:,:),   ALLOCATABLE :: ZPRES_HL_SPLIT
+REAL(KIND=JPRB), DIMENSION(:,:),   ALLOCATABLE :: ZTAVE_SPLIT
+REAL(KIND=JPRB), DIMENSION(:,:),   ALLOCATABLE :: ZPAVE_SPLIT
+REAL(KIND=JPRB), DIMENSION(:,:,:), ALLOCATABLE :: ZAER_SPLIT
+REAL(KIND=JPRB), DIMENSION(:,:),   ALLOCATABLE :: ZDPRES_SPLIT
+REAL(KIND=JPRB), DIMENSION(:),     ALLOCATABLE :: ZLSM_SPLIT
+REAL(KIND=JPRB), DIMENSION(:,:),   ALLOCATABLE :: ZQVAVE_SPLIT
+REAL(KIND=JPRB), DIMENSION(:,:),   ALLOCATABLE :: ZQSAVE_SPLIT
+REAL(KIND=JPRB), DIMENSION(:,:),   ALLOCATABLE :: ZQLAVE_SPLIT
+REAL(KIND=JPRB), DIMENSION(:,:),   ALLOCATABLE :: ZQIAVE_SPLIT
+REAL(KIND=JPRB), DIMENSION(:,:),   ALLOCATABLE :: ZQRAVE_SPLIT
+REAL(KIND=JPRB), DIMENSION(:,:),   ALLOCATABLE :: ZQRWC_SPLIT
+REAL(KIND=JPRB), DIMENSION(:,:),   ALLOCATABLE :: ZQLWC_SPLIT
+REAL(KIND=JPRB), DIMENSION(:,:),   ALLOCATABLE :: ZQIWC_SPLIT
+REAL(KIND=JPRB), DIMENSION(:,:),   ALLOCATABLE :: ZDZ_SPLIT
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZCCT_C2R2_SPLIT
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZCRT_C2R2_SPLIT
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZCIT_C1R3_SPLIT
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZCCT_LIMA_SPLIT
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZCRT_LIMA_SPLIT
+REAL(KIND=JPRB), DIMENSION(:,:), ALLOCATABLE   :: ZCIT_LIMA_SPLIT
+REAL(KIND=JPRB), DIMENSION(:),     ALLOCATABLE :: ZTS_SPLIT
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZSFSWDIR_SPLIT
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZSFSWDIF_SPLIT
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZNFLW_CS_SPLIT
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZNFLW_SPLIT
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZNFSW_CS_SPLIT
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZNFSW_SPLIT
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZDTLW_SPLIT
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZDTSW_SPLIT
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZFLUX_TOP_GND_IRVISNIR_SPLIT
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZFLUX_SW_DOWN_SPLIT
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZFLUX_SW_UP_SPLIT
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZFLUX_LW_SPLIT
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZDTLW_CS_SPLIT
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZDTSW_CS_SPLIT
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZFLUX_TOP_GND_IRVISNIR_CS_SPLIT
+REAL, DIMENSION(:),     ALLOCATABLE :: ZPLAN_ALB_VIS_SPLIT
+REAL, DIMENSION(:),     ALLOCATABLE :: ZPLAN_ALB_NIR_SPLIT
+REAL, DIMENSION(:),     ALLOCATABLE :: ZPLAN_TRA_VIS_SPLIT
+REAL, DIMENSION(:),     ALLOCATABLE :: ZPLAN_TRA_NIR_SPLIT
+REAL, DIMENSION(:),     ALLOCATABLE :: ZPLAN_ABS_VIS_SPLIT
+REAL, DIMENSION(:),     ALLOCATABLE :: ZPLAN_ABS_NIR_SPLIT
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZEFCL_LWD_SPLIT
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZEFCL_LWU_SPLIT
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZFLWP_SPLIT
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZFIWP_SPLIT
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZRADLP_SPLIT
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZRADIP_SPLIT
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZEFCL_RRTM_SPLIT
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZCLSW_TOTAL_SPLIT
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTAU_TOTAL_SPLIT
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZOMEGA_TOTAL_SPLIT
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZCG_TOTAL_SPLIT
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZFLUX_SW_DOWN_CS_SPLIT
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZFLUX_SW_UP_CS_SPLIT
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZFLUX_LW_CS_SPLIT
+REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZPIZA_EQ_TMP        !Single scattering albedo of aerosols (lon,lat,lev,wvl)
+REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZIR        !Real part of the aerosol refractive index(lon,lat,lev,wvl)
+REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZII        !Imaginary part of the aerosol refractive index (lon,lat,lev,wvl)
+REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZCGA_EQ_TMP         !Assymetry factor aerosols            (lon,lat,lev,wvl)
+REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZTAUREL_EQ_TMP      !tau/tau_{550} aerosols               (lon,lat,lev,wvl)
+REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZPIZA_DST_TMP        !Single scattering albedo of dust (lon,lat,lev,wvl)
+REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZCGA_DST_TMP         !Assymetry factor dust            (lon,lat,lev,wvl)
+REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZTAUREL_DST_TMP      !tau/tau_{550} dust               (lon,lat,lev,wvl)
+REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZPIZA_AER_TMP        !Single scattering albedo of aerosol from ORILAM (lon,lat,lev,wvl)
+REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZCGA_AER_TMP         !Assymetry factor aerosol from ORILAM            (lon,lat,lev,wvl)
+REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZTAUREL_AER_TMP      !tau/tau_{550} aerosol from ORILAM               (lon,lat,lev,wvl)
+REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZPIZA_SLT_TMP        !Single scattering albedo of sea salt (lon,lat,lev,wvl)
+REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZCGA_SLT_TMP         !Assymetry factor of sea salt            (lon,lat,lev,wvl)
+REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZTAUREL_SLT_TMP      !tau/tau_{550} of sea salt               (lon,lat,lev,wvl)
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: PAER_AER      !tau/tau_{550} aerosol from ORILAM               (lon,lat,lev,wvl)
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: PAER_SLT      !tau/tau_{550} sea salt               (lon,lat,lev,wvl)
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: PAER_DST     !tau/tau_{550} dust               (lon,lat,lev,wvl)
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTAU550_EQ_TMP      !tau/tau_{550} aerosols               (lon,lat,lev,wvl)
+REAL(KIND=JPRB), DIMENSION(:,:,:), ALLOCATABLE   :: ZPIZA_EQ            !Single scattering albedo of aerosols (points,lev,wvl)
+REAL(KIND=JPRB), DIMENSION(:,:,:), ALLOCATABLE   :: ZCGA_EQ             !Assymetry factor aerosols            (points,lev,wvl)
+REAL(KIND=JPRB), DIMENSION(:,:,:), ALLOCATABLE   :: ZTAUREL_EQ          !tau/tau_{550} aerosols               (points,lev,wvl)
+REAL(KIND=JPRB), DIMENSION(:,:,:), ALLOCATABLE   :: ZPIZA_EQ_SPLIT      !Single scattering albedo of aerosols (points,lev,wvl)
+REAL(KIND=JPRB), DIMENSION(:,:,:), ALLOCATABLE   :: ZCGA_EQ_SPLIT       !Assymetry factor aerosols            (points,lev,wvl)
+REAL(KIND=JPRB), DIMENSION(:,:,:), ALLOCATABLE   :: ZTAUREL_EQ_SPLIT    !tau/tau_{550} aerosols               (points,lev,wvl)
+REAL, DIMENSION(KFLEV,KSWB_OLD)           :: ZPIZA_EQ_CLEAR      !Single scattering albedo of aerosols (lev,wvl)
+REAL, DIMENSION(KFLEV,KSWB_OLD)           :: ZCGA_EQ_CLEAR       !Assymetry factor aerosols            (lev,wvl)
+REAL, DIMENSION(KFLEV,KSWB_OLD)           :: ZTAUREL_EQ_CLEAR    !tau/tau_{550} aerosols               (lev,wvl)
+INTEGER                               :: WVL_IDX              !Counter for wavelength
+
+!
+INTEGER  :: JI_SPLIT          ! loop on the split array
+INTEGER  :: INUM_CALL         ! number of CALL of the radiation scheme
+INTEGER  :: IDIM_EFF          ! effective number of air-columns to compute
+INTEGER  :: IDIM_RESIDUE      ! number of remaining air-columns to compute
+INTEGER  :: IBEG, IEND        ! auxiliary indices
+!
+!
+REAL, DIMENSION(SIZE(PDTHRAD,1),SIZE(PDTHRAD,2),SIZE(PDTHRAD,3)) &
+     :: ZDTRAD_LW! LW temperature tendency
+REAL, DIMENSION(SIZE(PDTHRAD,1),SIZE(PDTHRAD,2),SIZE(PDTHRAD,3)) &
+     :: ZDTRAD_SW! SW temperature tendency
+INTEGER             :: ILUOUT       ! Logical unit number for output-listing
+INTEGER             :: IRESP        ! Return code of FM routines
+REAL, DIMENSION(SIZE(PDTHRAD,1),SIZE(PDTHRAD,2),SIZE(PDTHRAD,3)) &
+     :: ZSTORE_3D, ZSTORE_3D2! 3D work array for storage
+REAL, DIMENSION(SIZE(PDTHRAD,1),SIZE(PDTHRAD,2)) &
+     :: ZSTORE_2D   ! 2D work array for storage!
+INTEGER                         :: JBAND       ! Solar band index
+CHARACTER (LEN=4), DIMENSION(KSWB_OLD) :: YBAND_NAME  ! Solar band name
+CHARACTER (LEN=2)               :: YDIR        ! Type of the data field
+!
+INTEGER :: ISWB ! number of SW spectral bands (between radiations and surface schemes)
+INTEGER :: JSWB ! loop on SW spectral bands
+INTEGER :: JAE  ! loop on aerosol class
+TYPE(TFIELDMeTaDATA) :: TZFIELD2D, TZFIELD3D
+!
+REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) :: ZDZPABST
+REAL :: ZMINVAL
+INTEGER, DIMENSION(3) :: IMINLOC
+INTEGER :: IINFO_ll
+LOGICAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2)) :: GCLOUD_SURF
+!
+REAL(KIND=JPRB), DIMENSION(:),   ALLOCATABLE :: ZLON,ZLAT
+REAL(KIND=JPRB), DIMENSION(:),   ALLOCATABLE :: ZLON_SPLIT,ZLAT_SPLIT
+!
+INTEGER                            :: ICLEAR_COL_ll
+INTEGER, DIMENSION(:), ALLOCATABLE :: INDEX_ICLEAR_COL
+REAL, DIMENSION(KFLEV)             :: ZT_CLEAR_DD  ! ensemble mean clear-sky temperature
+REAL                               :: ZCLEAR_COL_ll , ZDLON_ll
+!-------------------------------------------------------------------------
+!-------------------------------------------------------------------------
+!-------------------------------------------------------------------------
+!
+!*       1.    COMPUTE DIMENSIONS OF ARRAYS AND OTHER INDICES
+!              ----------------------------------------------
+!
+CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)  ! this definition must be coherent with
+                                      ! the one used in ini_radiations routine
+IKU = SIZE(PTHT,3)
+IKB = 1 + JPVEXT
+IKE = IKU - JPVEXT
+!
+IKSTAE = SIZE(PSTATM,1)
+IKUP   = IKE-JPVEXT+1
+! 
+ISWB   = SIZE(PSRFSWD_DIR,3)
+!
+!-------------------------------------------------------------------------------
+!*       1.1   CHECK PRESSURE DECREASING
+!              -------------------------
+ZDZPABST(:,:,1:IKU-1) = PPABST(:,:,1:IKU-1) - PPABST(:,:,2:IKU)
+ZDZPABST(:,:,IKU) = ZDZPABST(:,:,IKU-1)
+!
+ZMINVAL=MIN_ll(ZDZPABST,IINFO_ll)
+!
+IF ( ZMINVAL <= 0.0 ) THEN
+   ILUOUT = TLUOUT%NLU
+   IMINLOC=GMINLOC_ll( ZDZPABST )
+   WRITE(ILUOUT,*) ' radiation.f90 STOP :: SOMETHING WRONG WITH PRESSURE , ZDZPABST <= 0.0 '  
+   WRITE(ILUOUT,*) ' radiation :: ZDZPABST ', ZMINVAL,' located at ',   IMINLOC
+   FLUSH(unit=ILUOUT)
+   call Print_msg( NVERB_FATAL, 'GEN', 'RADIATIONS', 'something wrong with pressure: ZDZPABST <= 0.0' )
+
+ENDIF
+!------------------------------------------------------------------------------
+ALLOCATE(ZLAT(KDLON))
+ALLOCATE(ZLON(KDLON))
+IF(LCARTESIAN) THEN
+  ZLAT(:) = XLAT0*(XPI/180.)
+  ZLON(:) = XLON0*(XPI/180.)
+ELSE
+  DO JJ=IJB,IJE
+    DO JI=IIB,IIE
+        IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+        ZLAT(IIJ) =  XLAT(JI,JJ)*(XPI/180.)
+        ZLON(IIJ) =  XLON(JI,JJ)*(XPI/180.)
+    END DO
+  END DO
+END IF
+!-------------------------------------------------------------------------------
+!
+!*       2.    INITIALIZES THE MEAN-LAYER VARIABLES
+!              ------------------------------------
+!
+ZEXNT(:,:,:)= ( PPABST(:,:,:)/XP00 ) ** (XRD/XCPD)
+!
+! Columns where radiation is computed are put on a single line
+ALLOCATE(ZTAVE(KDLON,KFLEV))
+ALLOCATE(ZQVAVE(KDLON,KFLEV))
+ALLOCATE(ZQLAVE(KDLON,KFLEV))
+ALLOCATE(ZQIAVE(KDLON,KFLEV))
+ALLOCATE(ZCFAVE(KDLON,KFLEV))
+ALLOCATE(ZQRAVE(KDLON,KFLEV))
+ALLOCATE(ZQLWC(KDLON,KFLEV))
+ALLOCATE(ZQIWC(KDLON,KFLEV))
+ALLOCATE(ZQRWC(KDLON,KFLEV))
+ALLOCATE(ZDZ(KDLON,KFLEV))
+!
+ZQVAVE(:,:) = 0.0
+ZQLAVE(:,:) = 0.0
+ZQIAVE(:,:) = 0.0
+ZQRAVE(:,:) = 0.0
+ZCFAVE(:,:) = 0.0
+ZQLWC(:,:) = 0.0
+ZQIWC(:,:) = 0.0
+ZQRWC(:,:) = 0.0
+ZDZ(:,:)=0.0
+!
+!COMPUTE THE MESH SIZE
+DO JK=IKB,IKE
+  JKRAD = JK-JPVEXT
+  DO JJ=IJB,IJE
+    DO JI=IIB,IIE
+      IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+      ZDZ(IIJ,JKRAD)  =  PZZ(JI,JJ,JK+1) - PZZ(JI,JJ,JK)
+      ZTAVE(IIJ,JKRAD)  = PTHT(JI,JJ,JK)*ZEXNT(JI,JJ,JK) ! Conversion potential temperature -> actual temperature
+    END DO
+  END DO
+END DO
+!
+!  Check if the humidity mixing ratio is available
+!
+IF( SIZE(PRT(:,:,:,:),4) >= 1 ) THEN
+  DO JK=IKB,IKE
+    JKRAD = JK-JPVEXT
+    DO JJ=IJB,IJE
+      DO JI=IIB,IIE
+        IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+        ZQVAVE(IIJ,JKRAD) =MAX(0., PRT(JI,JJ,JK,1))
+      END DO
+    END DO
+  END DO
+END IF
+!
+!  Check if the cloudwater mixing ratio is available
+!
+IF( SIZE(PRT(:,:,:,:),4) >= 2 ) THEN
+  DO JK=IKB,IKE
+    JKRAD = JK-JPVEXT
+    DO JJ=IJB,IJE
+      DO JI=IIB,IIE
+        IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+        ZQLAVE(IIJ,JKRAD) = MAX(0.,PRT(JI,JJ,JK,2))
+        ZQLWC(IIJ,JKRAD) = MAX(0.,PRT(JI,JJ,JK,2)*PRHODREF(JI,JJ,JK))
+        ZCFAVE(IIJ,JKRAD) = PCLDFR(JI,JJ,JK)
+      END DO
+    END DO
+  END DO
+END IF
+!
+!  Check if the rainwater mixing ratio is available
+!
+IF( SIZE(PRT(:,:,:,:),4) >= 3 ) THEN
+  DO JK=IKB,IKE
+    JKRAD = JK-JPVEXT
+    DO JJ=IJB,IJE
+      DO JI=IIB,IIE
+        IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+        ZQRWC(IIJ,JKRAD) = MAX(0.,PRT(JI,JJ,JK,3)*PRHODREF(JI,JJ,JK))
+        ZQRAVE(IIJ,JKRAD) = MAX(0.,PRT(JI,JJ,JK,3))
+      END DO
+    END DO
+  END DO
+END IF
+!
+!  Check if the cloudice mixing ratio is available
+!
+IF( SIZE(PRT(:,:,:,:),4) >= 4 ) THEN
+  DO JK=IKB,IKE
+    JKRAD = JK-JPVEXT
+    DO JJ=IJB,IJE
+      DO JI=IIB,IIE
+        IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+        ZQIWC(IIJ,JKRAD) = MAX(0.,PRT(JI,JJ,JK,4)*PRHODREF(JI,JJ,JK))
+!        ZQIAVE(IIJ,JKRAD) = MAX( PRT(JI,JJ,JK,4)-XRTMIN(4),0.0 )
+        ZQIAVE(IIJ,JKRAD) = MAX( PRT(JI,JJ,JK,4),0.0 )
+      END DO
+    END DO
+  END DO
+END IF
+!
+!  Standard atmosphere extension
+!
+DO JK=IKUP,KFLEV
+  JK1 = (KSTATM-1)+(JK-IKUP)
+  JK2 = JK1+1
+  ZTAVE(:,JK)  = 0.5*( PSTATM(JK1,3)+PSTATM(JK2,3) )
+  ZQVAVE(:,JK) = 0.5*( PSTATM(JK1,5)/PSTATM(JK1,4)+   &
+                 PSTATM(JK2,5)/PSTATM(JK2,4)    )
+END DO
+!
+!        2.1 pronostic water concentation fields (C2R2 coupling) 
+!
+IF( NSV_C2R2 /= 0 ) THEN
+  ALLOCATE (ZCCT_C2R2(KDLON, KFLEV))
+  ALLOCATE (ZCRT_C2R2(KDLON, KFLEV))
+  ZCCT_C2R2(:, :) = 0.
+  ZCRT_C2R2 (:,:) = 0.
+  DO JK=IKB,IKE
+    JKRAD = JK-JPVEXT
+    DO JJ=IJB,IJE
+      DO JI=IIB,IIE
+        IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+        ZCCT_C2R2 (IIJ,JKRAD) = MAX(0.,PSVT(JI,JJ,JK,NSV_C2R2BEG+1))
+        ZCRT_C2R2 (IIJ,JKRAD) = MAX(0.,PSVT(JI,JJ,JK,NSV_C2R2BEG+2))
+      END DO
+    END DO
+  END DO
+ELSE 
+  ALLOCATE (ZCCT_C2R2(0,0))
+  ALLOCATE (ZCRT_C2R2(0,0))
+END IF
+!
+IF( NSV_C1R3 /= 0 ) THEN
+  ALLOCATE (ZCIT_C1R3(KDLON, KFLEV))
+  ZCIT_C1R3 (:,:) = 0.
+  DO JK=IKB,IKE
+    JKRAD = JK-JPVEXT
+    DO JJ=IJB,IJE
+      DO JI=IIB,IIE
+        IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+        ZCIT_C1R3 (IIJ,JKRAD) = MAX(0.,PSVT(JI,JJ,JK,NSV_C1R3BEG))
+      END DO
+    END DO
+  END DO
+ELSE 
+  ALLOCATE (ZCIT_C1R3(0,0))
+END IF
+!
+!
+!        2.1*bis pronostic water concentation fields (LIMA coupling) 
+!
+IF( CCLOUD == 'LIMA' ) THEN
+   ALLOCATE (ZCCT_LIMA(KDLON, KFLEV))
+   ALLOCATE (ZCRT_LIMA(KDLON, KFLEV))
+   ALLOCATE (ZCIT_LIMA(KDLON, KFLEV))
+   ZCCT_LIMA(:, :) = 0.
+   ZCRT_LIMA (:,:) = 0.
+   ZCIT_LIMA (:,:) = 0.
+   DO JK=IKB,IKE
+      JKRAD = JK-JPVEXT
+      DO JJ=IJB,IJE
+         DO JI=IIB,IIE
+            IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+            IF (NMOM_C.GE.2) ZCCT_LIMA(IIJ,JKRAD) = MAX(0.,PSVT(JI,JJ,JK,NSV_LIMA_NC))
+            IF (NMOM_R.GE.2) ZCRT_LIMA(IIJ,JKRAD) = MAX(0.,PSVT(JI,JJ,JK,NSV_LIMA_NR))
+            IF (NMOM_I.GE.2) ZCIT_LIMA(IIJ,JKRAD) = MAX(0.,PSVT(JI,JJ,JK,NSV_LIMA_NI))
+         END DO
+      END DO
+   END DO
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+!*       3.    INITIALIZES THE HALF-LEVEL VARIABLES
+!  	           ------------------------------------
+!
+ALLOCATE(ZPRES_HL(KDLON,KFLEV+1))
+ALLOCATE(ZT_HL(KDLON,KFLEV+1))
+!
+DO JK=IKB,IKE+1
+  JKRAD = JK-JPVEXT
+  DO JJ=IJB,IJE
+    DO JI=IIB,IIE
+      IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+      ZPRES_HL(IIJ,JKRAD) = XP00 * (0.5*(ZEXNT(JI,JJ,JK)+ZEXNT(JI,JJ,JK-1)))**(XCPD/XRD)
+    END DO
+  END DO
+END DO
+
+!  Standard atmosphere extension - pressure
+!* begining at ikup+1 level allows to use a model domain higher than 50km
+!
+DO JK=IKUP+1,KFLEV+1
+  JK1 = (KSTATM-1)+(JK-IKUP)
+  ZPRES_HL(:,JK) = PSTATM(JK1,2)*100.0 ! mb -> Pa
+END DO
+!
+!  Surface temperature at the first level
+!  and surface radiative temperature
+ALLOCATE(ZTS(KDLON))
+!
+DO JJ=IJB,IJE
+  DO JI=IIB,IIE
+    IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+    ZT_HL(IIJ,1) = PTSRAD(JI,JJ)
+    ZTS(IIJ) = PTSRAD(JI,JJ)
+  END DO
+END DO
+!
+!  Temperature at half levels
+!
+ZT_HL(:,2:IKE-JPVEXT) = 0.5*(ZTAVE(:,1:IKE-JPVEXT-1)+ZTAVE(:,2:IKE-JPVEXT))
+!
+DO JJ=IJB,IJE
+  DO JI=IIB,IIE
+    IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+    ZT_HL(IIJ,IKE-JPVEXT+1)  =  0.5*PTHT(JI,JJ,IKE  )*ZEXNT(JI,JJ,IKE  ) &
+         + 0.5*PTHT(JI,JJ,IKE+1)*ZEXNT(JI,JJ,IKE+1)
+  END DO
+END DO
+!
+!  Standard atmosphere extension - temperature
+!* begining at ikup+1 level allows to use a model domain higher than 50km
+!
+DO JK=IKUP+1,KFLEV+1
+  JK1 = (KSTATM-1)+(JK-IKUP)
+  ZT_HL(:,JK) = PSTATM(JK1,3)
+END DO
+!
+!mean layer pressure and layer differential pressure (from half level variables)
+!
+ALLOCATE(ZPAVE(KDLON,KFLEV))
+ALLOCATE(ZDPRES(KDLON,KFLEV))
+DO JKRAD=1,KFLEV
+  ZPAVE(:,JKRAD)=0.5*(ZPRES_HL(:,JKRAD)+ZPRES_HL(:,JKRAD+1))
+  ZDPRES(:,JKRAD)=ZPRES_HL(:,JKRAD)-ZPRES_HL(:,JKRAD+1)
+END DO
+!-----------------------------------------------------------------------
+!*       4.    INITIALIZES THE AEROSOLS and OZONE PROFILES from climatology
+!	           -------------------------------------------
+!
+!        4.1    AEROSOL optical thickness
+! EXPL -> defined online, otherwise climatology
+IF (CAOP=='EXPL') THEN
+   GAOP = .TRUE.
+ELSE
+   GAOP = .FALSE.
+ENDIF
+!
+IF (CAOP=='EXPL') THEN
+   ALLOCATE(ZPIZA_EQ_TMP(SIZE(PAER,1),SIZE(PAER,2),SIZE(PAER,3),KSWB_OLD))
+   ALLOCATE(ZCGA_EQ_TMP(SIZE(PAER,1),SIZE(PAER,2),SIZE(PAER,3),KSWB_OLD))
+   ALLOCATE(ZTAUREL_EQ_TMP(SIZE(PAER,1),SIZE(PAER,2),SIZE(PAER,3),KSWB_OLD))
+
+   ALLOCATE(ZPIZA_DST_TMP(SIZE(PAER,1),SIZE(PAER,2),SIZE(PAER,3),KSWB_OLD))
+   ALLOCATE(ZCGA_DST_TMP(SIZE(PAER,1),SIZE(PAER,2),SIZE(PAER,3),KSWB_OLD))
+   ALLOCATE(ZTAUREL_DST_TMP(SIZE(PAER,1),SIZE(PAER,2),SIZE(PAER,3),KSWB_OLD)) 
+   ALLOCATE(PAER_DST(SIZE(PAER,1),SIZE(PAER,2),SIZE(PAER,3)))
+
+   ALLOCATE(ZPIZA_AER_TMP(SIZE(PAER,1),SIZE(PAER,2),SIZE(PAER,3),KSWB_OLD))
+   ALLOCATE(ZCGA_AER_TMP(SIZE(PAER,1),SIZE(PAER,2),SIZE(PAER,3),KSWB_OLD))
+   ALLOCATE(ZTAUREL_AER_TMP(SIZE(PAER,1),SIZE(PAER,2),SIZE(PAER,3),KSWB_OLD))
+   ALLOCATE(PAER_AER(SIZE(PAER,1),SIZE(PAER,2),SIZE(PAER,3)))
+
+   ALLOCATE(ZPIZA_SLT_TMP(SIZE(PAER,1),SIZE(PAER,2),SIZE(PAER,3),KSWB_OLD))
+   ALLOCATE(ZCGA_SLT_TMP(SIZE(PAER,1),SIZE(PAER,2),SIZE(PAER,3),KSWB_OLD))
+   ALLOCATE(ZTAUREL_SLT_TMP(SIZE(PAER,1),SIZE(PAER,2),SIZE(PAER,3),KSWB_OLD))
+   ALLOCATE(PAER_SLT(SIZE(PAER,1),SIZE(PAER,2),SIZE(PAER,3)))
+   
+
+   ALLOCATE(ZII(SIZE(PSVT,1),SIZE(PSVT,2),SIZE(PSVT,3),KSWB_OLD))
+   ALLOCATE(ZIR(SIZE(PSVT,1),SIZE(PSVT,2),SIZE(PSVT,3),KSWB_OLD))
+
+  ZPIZA_EQ_TMP = 0.
+  ZCGA_EQ_TMP = 0.
+  ZTAUREL_EQ_TMP = 0.
+
+  ZPIZA_DST_TMP = 0.
+  ZCGA_DST_TMP = 0.
+  ZTAUREL_DST_TMP = 0
+
+  ZPIZA_SLT_TMP = 0.
+  ZCGA_SLT_TMP = 0.
+  ZTAUREL_SLT_TMP = 0
+
+  ZPIZA_AER_TMP = 0.
+  ZCGA_AER_TMP = 0.
+  ZTAUREL_AER_TMP = 0
+
+  PAER_DST=0.
+  PAER_SLT=0.
+  PAER_AER=0.
+  
+ IF (LORILAM) THEN
+   CALL AEROOPT_GET(                             &
+        PSVT(IIB:IIE,IJB:IJE,:,NSV_AERBEG:NSV_AEREND)        &  !I [ppv]  aerosols concentration
+        ,PZZ(IIB:IIE,IJB:IJE,:)                   &  !I [m] height of layers
+        ,PRHODREF(IIB:IIE,IJB:IJE,:)              &  !I [kg/m3] density of air
+        ,ZPIZA_AER_TMP(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,:)   &  !O [-] single scattering albedo of aerosols
+        ,ZCGA_AER_TMP(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,:)    &  !O [-] assymetry factor for aerosols
+        ,ZTAUREL_AER_TMP(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,:) &  !O [-] opt.depth(wvl=lambda)/opt.depth(wvl=550nm)
+        ,PAER_AER(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT)            &  !O [-] optical depth of aerosols at wvl=550nm
+        ,KSWB_OLD                                    &  !I |nbr] number of shortwave bands
+        ,ZIR(IIB:IIE,IJB:IJE,:,:) &  !O [-] opt.depth(wvl=lambda)/opt.depth(wvl=550nm)
+        ,ZII(IIB:IIE,IJB:IJE,:,:) &  !O [-] opt.depth(wvl=lambda)/opt.depth(wvl=550nm)
+        )
+ ENDIF
+ IF(LDUST) THEN
+   CALL DUSTOPT_GET(                             &
+        PSVT(IIB:IIE,IJB:IJE,:,NSV_DSTBEG:NSV_DSTEND)        &  !I [ppv] Dust scalar concentration
+        ,PZZ(IIB:IIE,IJB:IJE,:)                   &  !I [m] height of layers
+        ,PRHODREF(IIB:IIE,IJB:IJE,:)              &  !I [kg/m3] density of air
+        ,ZPIZA_DST_TMP(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,:)   &  !O [-] single scattering albedo of dust
+        ,ZCGA_DST_TMP(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,:)    &  !O [-] assymetry factor for dust
+        ,ZTAUREL_DST_TMP(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,:) &  !O [-] opt.depth(wvl=lambda)/opt.depth(wvl=550nm)
+        ,PAER_DST(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT)            &  !O [-] optical depth of dust at wvl=550nm
+        ,KSWB_OLD                                   &  !I |nbr] number of shortwave bands
+        )
+   DO WVL_IDX=1,KSWB_OLD
+     PDST_WL(:,:,:,WVL_IDX) = ZTAUREL_DST_TMP(:,:,:,WVL_IDX)* PAER(:,:,:,3)             
+   ENDDO
+ ENDIF
+ IF(LSALT) THEN
+   CALL SALTOPT_GET(                             &
+        PSVT(IIB:IIE,IJB:IJE,:,NSV_SLTBEG:NSV_SLTEND)        &  !I [ppv] sea salt scalar concentration
+        ,PZZ(IIB:IIE,IJB:IJE,:)                   &  !I [m] height of layers
+        ,PRHODREF(IIB:IIE,IJB:IJE,:)              &  !I [kg/m3] density of air
+        ,PTHT(IIB:IIE,IJB:IJE,:)                  &  !I [K] potential temperature
+        ,PPABST(IIB:IIE,IJB:IJE,:)                &  !I [hPa] pressure
+        ,PRT(IIB:IIE,IJB:IJE,:,:)                 &  !I [kg/kg] water mixing ratio
+        ,ZPIZA_SLT_TMP(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,:)   &  !O [-] single scattering albedo of sea salt
+        ,ZCGA_SLT_TMP(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,:)    &  !O [-] assymetry factor for sea salt
+        ,ZTAUREL_SLT_TMP(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,:) &  !O [-] opt.depth(wvl=lambda)/opt.depth(wvl=550nm)
+        ,PAER_SLT(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT)            &  !O [-] optical depth of sea salt at wvl=550nm
+        ,KSWB_OLD                                    &  !I |nbr] number of shortwave bands
+        )
+ ENDIF
+
+ ZTAUREL_EQ_TMP(:,:,:,:)=ZTAUREL_DST_TMP(:,:,:,:)+ZTAUREL_AER_TMP(:,:,:,:)+ZTAUREL_SLT_TMP(:,:,:,:)
+ 
+ PAER(:,:,:,2)=PAER_SLT(:,:,:)
+ PAER(:,:,:,3)=PAER_DST(:,:,:)
+ PAER(:,:,:,4)=PAER_AER(:,:,:)
+
+
+ WHERE (ZTAUREL_EQ_TMP(:,:,:,:).GT.0.0)
+  ZPIZA_EQ_TMP(:,:,:,:)=(ZPIZA_DST_TMP(:,:,:,:)*ZTAUREL_DST_TMP(:,:,:,:)+&
+                    ZPIZA_AER_TMP(:,:,:,:)*ZTAUREL_AER_TMP(:,:,:,:)+&
+                    ZPIZA_SLT_TMP(:,:,:,:)*ZTAUREL_SLT_TMP(:,:,:,:))/&
+                    ZTAUREL_EQ_TMP(:,:,:,:) 
+ END WHERE
+ WHERE ((ZTAUREL_EQ_TMP(:,:,:,:).GT.0.0).AND.(ZPIZA_EQ_TMP(:,:,:,:).GT.0.0))
+  ZCGA_EQ_TMP(:,:,:,:)=(ZPIZA_DST_TMP(:,:,:,:)*ZTAUREL_DST_TMP(:,:,:,:)*ZCGA_DST_TMP(:,:,:,:)+&
+                   ZPIZA_AER_TMP(:,:,:,:)*ZTAUREL_AER_TMP(:,:,:,:)*ZCGA_AER_TMP(:,:,:,:)+&
+                   ZPIZA_SLT_TMP(:,:,:,:)*ZTAUREL_SLT_TMP(:,:,:,:)*ZCGA_SLT_TMP(:,:,:,:))/&
+                   (ZTAUREL_EQ_TMP(:,:,:,:)*ZPIZA_EQ_TMP(:,:,:,:))
+ END WHERE
+
+ ZTAUREL_EQ_TMP(:,:,:,:)=max(1.E-8,ZTAUREL_EQ_TMP(:,:,:,:))
+ ZCGA_EQ_TMP(:,:,:,:)=max(1.E-8,ZCGA_EQ_TMP(:,:,:,:))
+ ZPIZA_EQ_TMP(:,:,:,:)=max(1.E-8,ZPIZA_EQ_TMP(:,:,:,:))
+ PAER(:,:,:,3)=max(1.E-8,PAER(:,:,:,3))
+ ZPIZA_EQ_TMP(:,:,:,:)=min(0.99,ZPIZA_EQ_TMP(:,:,:,:))
+
+
+ENDIF      
+!
+! Computes SSA, optical depth and assymetry factor for clear sky (aerosols)
+ZTAUAZ(:,:,:,:) = 0.
+ZPIZAZ(:,:,:,:) = 0.
+ZCGAZ(:,:,:,:)  = 0.
+DO WVL_IDX=1,KSWB_OLD
+ DO JAE=1,KAER
+      !Special optical properties for dust
+      IF (CAOP=='EXPL'.AND.(JAE==3)) THEN
+      !Ponderation of aerosol optical in case of explicit optical factor
+      !ti
+        ZTAUAZ(IIB:IIE,IJB:IJE,IKB:IKE,WVL_IDX)= ZTAUAZ(IIB:IIE,IJB:IJE,IKB:IKE,WVL_IDX) + &
+                                                 PAER(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,JAE) * &
+                                       ZTAUREL_EQ_TMP(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,WVL_IDX) 
+      !wi*ti
+        ZPIZAZ(IIB:IIE,IJB:IJE,IKB:IKE,WVL_IDX)= ZPIZAZ(IIB:IIE,IJB:IJE,IKB:IKE,WVL_IDX) + &
+                                  PAER(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,JAE)                * &
+                                  ZTAUREL_EQ_TMP(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,WVL_IDX) * &
+                                  ZPIZA_EQ_TMP(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,WVL_IDX)
+      !wi*ti*gi
+        ZCGAZ(IIB:IIE,IJB:IJE,IKB:IKE,WVL_IDX) = ZCGAZ(IIB:IIE,IJB:IJE,IKB:IKE,WVL_IDX) + &
+                                 PAER(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,JAE)                * &
+                                 ZTAUREL_EQ_TMP(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,WVL_IDX) * &
+                                 ZPIZA_EQ_TMP(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,WVL_IDX)   * &
+                                 ZCGA_EQ_TMP(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,WVL_IDX)
+      ELSE
+
+      !Ponderation of aerosol optical properties 
+      !ti
+        ZTAUAZ(IIB:IIE,IJB:IJE,IKB:IKE,WVL_IDX)=ZTAUAZ(IIB:IIE,IJB:IJE,IKB:IKE,WVL_IDX)+&
+             PAER(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,JAE) * RTAUA(WVL_IDX,JAE)
+      !wi*ti
+        ZPIZAZ(IIB:IIE,IJB:IJE,IKB:IKE,WVL_IDX)=ZPIZAZ(IIB:IIE,IJB:IJE,IKB:IKE,WVL_IDX)+&
+                                               PAER(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,JAE) *&
+                                        RTAUA(WVL_IDX,JAE)*RPIZA(WVL_IDX,JAE)
+      !wi*ti*gi
+        ZCGAZ(IIB:IIE,IJB:IJE,IKB:IKE,WVL_IDX) =  ZCGAZ(IIB:IIE,IJB:IJE,IKB:IKE,WVL_IDX) +&
+                                               PAER(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,JAE)   *&
+                        RTAUA(WVL_IDX,JAE)*RPIZA(WVL_IDX,JAE)*RCGA(WVL_IDX,JAE)
+           ENDIF
+ ENDDO
+! assymetry factor:
+
+ZCGAZ(IIB:IIE,IJB:IJE,IKB:IKE,WVL_IDX) = ZCGAZ(IIB:IIE,IJB:IJE,IKB:IKE,WVL_IDX)  / &
+                                   ZPIZAZ(IIB:IIE,IJB:IJE,IKB:IKE,WVL_IDX)
+! SSA:
+ZPIZAZ(IIB:IIE,IJB:IJE,IKB:IKE,WVL_IDX) = ZPIZAZ(IIB:IIE,IJB:IJE,IKB:IKE,WVL_IDX) / &
+                                    ZTAUAZ(IIB:IIE,IJB:IJE,IKB:IKE,WVL_IDX)
+ENDDO
+!
+
+!
+ALLOCATE(ZAER(KDLON,KFLEV,KAER))
+! Aerosol classes
+! 1=Continental   2=Maritime   3=Desert     4=Urban     5=Volcanic 6=Stratos.Bckgnd
+! Loaded from climatology
+DO JJ=IJB,IJE
+   DO JI=IIB,IIE
+      IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+      ZAER (IIJ,:,:) = PAER_CLIM  (JI,JJ,:,:)
+   END DO
+END DO
+IF ((CAOP=='EXPL') .AND. LDUST ) THEN
+  DO JJ=IJB,IJE
+    DO JI=IIB,IIE
+      IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+      ZAER (IIJ,:,3) = PAER  (JI,JJ,:,3)
+    END DO
+  END DO
+END IF
+IF ((CAOP=='EXPL') .AND. LSALT ) THEN
+  DO JJ=IJB,IJE
+    DO JI=IIB,IIE
+      IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+      ZAER (IIJ,:,2) = PAER  (JI,JJ,:,2)
+    END DO
+  END DO
+END IF
+IF ((CAOP=='EXPL') .AND. LORILAM ) THEN
+  DO JJ=IJB,IJE
+    DO JI=IIB,IIE
+      IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+      ZAER (IIJ,:,4) = PAER  (JI,JJ,:,4)
+    END DO
+  END DO
+END IF
+!
+ALLOCATE(ZPIZA_EQ(KDLON,KFLEV,KSWB_OLD))
+ALLOCATE(ZCGA_EQ(KDLON,KFLEV,KSWB_OLD))
+ALLOCATE(ZTAUREL_EQ(KDLON,KFLEV,KSWB_OLD))
+IF(CAOP=='EXPL')THEN
+    !Transform from vector of type #lon #lat #lev #wvl
+    !to vectors of type #points, #levs, #wavelengths
+  DO JJ=IJB,IJE
+  DO JI=IIB,IIE
+    IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+    ZPIZA_EQ(IIJ,:,:) = ZPIZA_EQ_TMP(JI,JJ,:,:)
+    ZCGA_EQ(IIJ,:,:)= ZCGA_EQ_TMP(JI,JJ,:,:)
+    ZTAUREL_EQ(IIJ,:,:)=ZTAUREL_EQ_TMP(JI,JJ,:,:)
+  END DO
+  END DO
+  DEALLOCATE(ZPIZA_EQ_TMP)
+  DEALLOCATE(ZCGA_EQ_TMP)
+  DEALLOCATE(ZTAUREL_EQ_TMP)
+  DEALLOCATE(ZPIZA_DST_TMP)
+  DEALLOCATE(ZCGA_DST_TMP)
+  DEALLOCATE(ZTAUREL_DST_TMP)  
+  DEALLOCATE(ZPIZA_AER_TMP)
+  DEALLOCATE(ZCGA_AER_TMP)
+  DEALLOCATE(ZTAUREL_AER_TMP)
+  DEALLOCATE(ZPIZA_SLT_TMP)
+  DEALLOCATE(ZCGA_SLT_TMP)
+  DEALLOCATE(ZTAUREL_SLT_TMP)
+  DEALLOCATE(PAER_DST)
+  DEALLOCATE(PAER_AER)
+  DEALLOCATE(PAER_SLT)
+  DEALLOCATE(ZIR)
+  DEALLOCATE(ZII)
+END IF
+
+
+!
+!      4.2   OZONE content 
+!
+ALLOCATE(ZO3AVE(KDLON,KFLEV))
+!
+DO JJ=IJB,IJE
+  DO JI=IIB,IIE
+    IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+    ZO3AVE(IIJ,:)  = POZON (JI,JJ,:)           
+  END DO
+END DO
+#ifdef MNH_ECRAD
+#if ( VER_ECRAD == 140 )
+POZON = POZON
+#endif
+#endif
+!
+!-------------------------------------------------------------------------------
+!
+!*       5.    CALLS THE E.C.M.W.F. RADIATION CODE
+!	           -----------------------------------
+!
+!
+!*       5.1   INITIALIZES 2D AND SURFACE FIELDS
+!
+ALLOCATE(ZRMU0(KDLON))
+ALLOCATE(ZLSM(KDLON))
+! 
+ALLOCATE(ZALBP(KDLON,KSWB_MNH))
+ALLOCATE(ZALBD(KDLON,KSWB_MNH))
+!
+ALLOCATE(ZEMIS(KDLON,KLWB_MNH))
+ALLOCATE(ZEMIW(KDLON,KLWB_MNH))
+!
+DO JJ=IJB,IJE
+  DO JI=IIB,IIE
+    IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+    ZEMIS(IIJ,:)   = PEMIS(JI,JJ,:)
+    ZRMU0(IIJ)    = PCOSZEN(JI,JJ)
+    ZLSM(IIJ)     = 1.0 - PSEA(JI,JJ)  
+  END DO
+END DO  
+!
+! spectral albedo
+!
+IF ( SIZE(PDIR_ALB,3)==1 ) THEN
+  DO JJ=IJB,IJE
+    DO JI=IIB,IIE
+      IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+      !  sw direct and diffuse albedos
+      ZALBP(IIJ,:)  = PDIR_ALB(JI,JJ,1)
+      ZALBD(IIJ,:)  = PSCA_ALB(JI,JJ,1)
+      !
+    END DO
+  END DO
+ELSE  
+  DO JK=1, SIZE(PDIR_ALB,3)
+    DO JJ=IJB,IJE
+      DO JI=IIB,IIE
+         IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+         !  sw direct and diffuse albedos
+         ZALBP(IIJ,JK)  = PDIR_ALB(JI,JJ,JK)
+         ZALBD(IIJ,JK)  = PSCA_ALB(JI,JJ,JK)
+       ENDDO
+     END DO
+   ENDDO  
+END IF
+!
+!
+! LW emissivity
+ZEMIW(:,:)= ZEMIS(:,:)
+!
+!solar constant
+ZRII0= PCORSOL*XI0  ! solar constant multiplied by seasonal variations due to Earth-Sun distance
+!
+!
+!*       5.2   ACCOUNTS FOR THE CLEAR-SKY APPROXIMATION
+!
+!  Performs the horizontal average of the fields when no cloud
+!
+ZCLOUD(:) = SUM( ZCFAVE(:,:),DIM=2 ) ! one where no cloud on the vertical
+!
+! MODIF option CLLY      
+ALLOCATE ( ICLEAR_2D_TM1(KDLON) )
+!
+DO JJ=IJB,IJE
+  DO JI=IIB,IIE
+    IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+    ICLEAR_2D_TM1(IIJ) = KCLEARCOL_TM1(JI,JJ)
+  END DO
+END DO
+!
+IF(OCLOUD_ONLY .OR. OCLEAR_SKY) THEN
+  !
+  GCLEAR_2D(:) = .TRUE.
+  WHERE( (ZCLOUD(:) > 0.0) .OR. (ICLEAR_2D_TM1(:)==0) )  ! FALSE on cloudy columns
+    GCLEAR_2D(:) = .FALSE.
+  END WHERE
+  !
+  ICLEAR_COL = COUNT( GCLEAR_2D(:) )  ! number of clear sky columns
+  !
+  ALLOCATE(INDEX_ICLEAR_COL(ICLEAR_COL))
+  IIJ = 0
+  DO JI=1,KDLON
+     IF ( GCLEAR_2D(JI) ) THEN
+         IIJ = IIJ + 1
+         INDEX_ICLEAR_COL(IIJ) = JI
+     END IF
+  END DO
+
+  IF( ICLEAR_COL == KDLON ) THEN ! No cloud case so only the mean clear-sky
+!!$    GCLEAR_2D(1) = .FALSE.       !           column is selected
+!!$    ICLEAR_COL = KDLON-1
+    GNOCL = .TRUE.               ! TRUE if no cloud at all
+  ELSE
+    GNOCL = .FALSE.
+  END IF
+
+  GCLEAR(:,:) = SPREAD( GCLEAR_2D(:),DIM=2,NCOPIES=KFLEV )  ! vertical extension of clear columns 2D map
+  ICLOUD_COL = KDLON - ICLEAR_COL                           ! number of  cloudy columns
+!
+  ZCLEAR_COL_ll = REAL(ICLEAR_COL)
+  CALL REDUCESUM_ll(ZCLEAR_COL_ll,IINFO_ll)
+  !ZDLON_ll = KDLON
+  !CALL REDUCESUM_ll(ZDLON_ll,IINFO_ll)
+
+  !IF (IP == 1 )  
+  !print*,",RADIATIOn COULD_ONLY=OCLOUD_ONLY,OCLEAR_SKY,ZCLEAR_COL_ll,ICLEAR_COL,ICLOUD_COL,KDON,ZDLON_ll,GNOCL=", &
+  !     OCLOUD_ONLY,OCLEAR_SKY,ZCLEAR_COL_ll,ICLEAR_COL,ICLOUD_COL,KDLON,ZDLON_ll,GNOCL
+!
+!!$  IF( ICLEAR_COL /=0 ) THEN ! at least one clear-sky column exists -> average profiles on clear columns
+  IF( ZCLEAR_COL_ll /= 0.0  ) THEN ! at least one clear-sky column exists -> average profiles on clear columns
+    ZT_CLEAR(:)  = SUM_DD_R2_R1_ll(ZTAVE(INDEX_ICLEAR_COL(:),:)) / ZCLEAR_COL_ll
+    ZP_CLEAR(:)  = SUM_DD_R2_R1_ll(ZPAVE(INDEX_ICLEAR_COL(:),:)) / ZCLEAR_COL_ll
+    ZQV_CLEAR(:) = SUM_DD_R2_R1_ll(REAL(ZQVAVE(INDEX_ICLEAR_COL(:),:))) / ZCLEAR_COL_ll
+    ZOZ_CLEAR(:) = SUM_DD_R2_R1_ll(REAL(ZO3AVE(INDEX_ICLEAR_COL(:),:))) / ZCLEAR_COL_ll
+    ZDP_CLEAR(:) = SUM_DD_R2_R1_ll(REAL(ZDPRES(INDEX_ICLEAR_COL(:),:))) / ZCLEAR_COL_ll
+ 
+    DO JK1=1,KAER
+      ZAER_CLEAR(:,JK1) = SUM_DD_R2_R1_ll(REAL(ZAER(INDEX_ICLEAR_COL(:),:,JK1))) / ZCLEAR_COL_ll
+    END DO
+    !Get an average value for the clear column
+    IF(CAOP=='EXPL')THEN
+       DO WVL_IDX=1,KSWB_OLD
+          ZPIZA_EQ_CLEAR(:,WVL_IDX)   = SUM_DD_R2_R1_ll(REAL(ZPIZA_EQ(  INDEX_ICLEAR_COL(:),:,WVL_IDX))) / ZCLEAR_COL_ll
+          ZCGA_EQ_CLEAR(:,WVL_IDX)    = SUM_DD_R2_R1_ll(REAL(ZCGA_EQ(   INDEX_ICLEAR_COL(:),:,WVL_IDX))) / ZCLEAR_COL_ll
+          ZTAUREL_EQ_CLEAR(:,WVL_IDX) = SUM_DD_R2_R1_ll(REAL(ZTAUREL_EQ(INDEX_ICLEAR_COL(:),:,WVL_IDX))) / ZCLEAR_COL_ll
+       ENDDO
+    ENDIF   
+    !
+    ZHP_CLEAR(1:KFLEV) = SUM_DD_R2_R1_ll(REAL(ZPRES_HL(INDEX_ICLEAR_COL(:),1:KFLEV))) / ZCLEAR_COL_ll
+    ZHT_CLEAR(1:KFLEV) = SUM_DD_R2_R1_ll(REAL(ZT_HL   (INDEX_ICLEAR_COL(:),1:KFLEV))) / ZCLEAR_COL_ll
+    ! 
+    ZALBP_CLEAR(:) = SUM_DD_R2_R1_ll(REAL(ZALBP(INDEX_ICLEAR_COL(:),:))) / ZCLEAR_COL_ll
+    ZALBD_CLEAR(:) = SUM_DD_R2_R1_ll(REAL(ZALBD(INDEX_ICLEAR_COL(:),:))) / ZCLEAR_COL_ll
+    ! 
+    ZEMIS_CLEAR = SUM_DD_R1_ll(REAL(ZEMIS(INDEX_ICLEAR_COL(:),1))) / ZCLEAR_COL_ll
+    ZEMIW_CLEAR = SUM_DD_R1_ll(REAL(ZEMIW(INDEX_ICLEAR_COL(:),1))) / ZCLEAR_COL_ll
+    ZRMU0_CLEAR = SUM_DD_R1_ll(REAL(ZRMU0(INDEX_ICLEAR_COL(:))))   / ZCLEAR_COL_ll
+    ZTS_CLEAR   = SUM_DD_R1_ll(REAL(ZTS(INDEX_ICLEAR_COL(:))))     / ZCLEAR_COL_ll
+    ZLSM_CLEAR  = SUM_DD_R1_ll(REAL(ZLSM(INDEX_ICLEAR_COL(:))))    / ZCLEAR_COL_ll
+    ZLAT_CLEAR  = SUM_DD_R1_ll(REAL(ZLAT(INDEX_ICLEAR_COL(:))))    / ZCLEAR_COL_ll
+    ZLON_CLEAR  = SUM_DD_R1_ll(REAL(ZLON(INDEX_ICLEAR_COL(:))))    / ZCLEAR_COL_ll 
+!
+  ELSE ! no clear columns -> the first column is chosen, without physical meaning: it will not be
+    ! unpacked after the call to the radiation ecmwf routine
+    ZT_CLEAR(:)  = ZTAVE(1,:)
+    ZP_CLEAR(:)  = ZPAVE(1,:)
+    ZQV_CLEAR(:) = ZQVAVE(1,:)
+    ZOZ_CLEAR(:) = ZO3AVE(1,:)
+    ZDP_CLEAR(:) = ZDPRES(1,:)
+    ZAER_CLEAR(:,:) = ZAER(1,:,:)
+    IF(CAOP=='EXPL')THEN
+       ZPIZA_EQ_CLEAR(:,:)=ZPIZA_EQ(1,:,:)
+       ZCGA_EQ_CLEAR(:,:)=ZCGA_EQ(1,:,:)
+       ZTAUREL_EQ_CLEAR(:,:)=ZTAUREL_EQ(1,:,:)
+    ENDIF
+!
+    ZHP_CLEAR(1:KFLEV)  = ZPRES_HL(1,1:KFLEV)
+    ZHT_CLEAR(1:KFLEV)  = ZT_HL(1,1:KFLEV)
+    ZALBP_CLEAR(:) = ZALBP(1,:)
+    ZALBD_CLEAR(:) = ZALBD(1,:)
+!
+    ZEMIS_CLEAR  = ZEMIS(1,1)
+    ZEMIW_CLEAR  = ZEMIW(1,1) 
+    ZRMU0_CLEAR  = ZRMU0(1)
+    ZTS_CLEAR    = ZTS(1) 
+    ZLSM_CLEAR   = ZLSM(1) 
+    ZLAT_CLEAR   = ZLAT(1)
+    ZLON_CLEAR   = ZLON(1)
+  END IF
+  !
+  GCLOUD(:,:) = .NOT.GCLEAR(:,:) ! .true. where the column is cloudy
+  GCLOUDT(:,:)=TRANSPOSE(GCLOUD(:,:))
+  ICLOUD = ICLOUD_COL*KFLEV ! total number of voxels in cloudy columns
+  ALLOCATE(ZWORK1(ICLOUD))
+  ALLOCATE(ZWORK2(ICLOUD+KFLEV)) !  allocation for the KFLEV levels of 
+                                 !  the ICLOUD cloudy columns
+                                 !  and of the KFLEV levels of the clear sky one
+  !
+  ! temperature profiles
+  !
+  ZWORK1(:) = PACK( TRANSPOSE(ZTAVE(:,:)),MASK=GCLOUDT(:,:) )
+  ZWORK2(1:ICLOUD) = ZWORK1(1:ICLOUD) ! fills the ICLOUD_COL cloudy columns
+  ZWORK2(ICLOUD+1:)= ZT_CLEAR(1:)      !   and the single clear_sky one
+  DEALLOCATE(ZTAVE)
+  ALLOCATE(ZTAVE(ICLOUD_COL+1,KFLEV))
+  ZTAVE(:,:) = TRANSPOSE( RESHAPE( ZWORK2(:),(/KFLEV,ICLOUD_COL+1/) ) )
+  !
+  ! vapor mixing ratio profiles
+  !
+  ZWORK1(:) = PACK( TRANSPOSE(ZQVAVE(:,:)),MASK=GCLOUDT(:,:) )
+  ZWORK2(1:ICLOUD) = ZWORK1(1:ICLOUD) ! fills the ICLOUD_COL cloudy columns
+  ZWORK2(ICLOUD+1:)= ZQV_CLEAR(1:)      !   and the single clear_sky one
+  DEALLOCATE(ZQVAVE)
+  ALLOCATE(ZQVAVE(ICLOUD_COL+1,KFLEV))
+  ZQVAVE(:,:) = TRANSPOSE( RESHAPE( ZWORK2(:),(/KFLEV,ICLOUD_COL+1/) ) )
+  !
+  ! mesh size 
+  !
+  ZWORK1(:) = PACK( TRANSPOSE(ZDZ(:,:)),MASK=GCLOUDT(:,:) )
+  ZWORK2(1:ICLOUD) = ZWORK1(1:ICLOUD) ! fills the ICLOUD_COL cloudy columns
+  ZWORK2(ICLOUD+1:)= 0.0              !   and the single clear_sky one
+  DEALLOCATE(ZDZ)
+  ALLOCATE(ZDZ(ICLOUD_COL+1,KFLEV))
+  ZDZ(:,:) = TRANSPOSE( RESHAPE( ZWORK2(:),(/KFLEV,ICLOUD_COL+1/) ) )
+  !
+  !
+  ! liquid water mixing ratio profiles
+  !
+  ZWORK1(:) = PACK( TRANSPOSE(ZQLAVE(:,:)),MASK=GCLOUDT(:,:) )
+  ZWORK2(1:ICLOUD) = ZWORK1(1:ICLOUD) ! fills the ICLOUD_COL cloudy columns
+  ZWORK2(ICLOUD+1:)= 0.0              !   and the single clear_sky one
+  DEALLOCATE(ZQLAVE)
+  ALLOCATE(ZQLAVE(ICLOUD_COL+1,KFLEV))
+  ZQLAVE(:,:) = TRANSPOSE( RESHAPE( ZWORK2(:),(/KFLEV,ICLOUD_COL+1/) ) )
+  !
+  !rain 
+  !
+  ZWORK1(:) = PACK( TRANSPOSE(ZQRAVE(:,:)),MASK=GCLOUDT(:,:) )
+  ZWORK2(1:ICLOUD) = ZWORK1(1:ICLOUD) ! fills the ICLOUD_COL cloudy columns
+  ZWORK2(ICLOUD+1:)= 0.0              !   and the single clear_sky one
+  DEALLOCATE(ZQRAVE)
+  ALLOCATE(ZQRAVE(ICLOUD_COL+1,KFLEV))
+  ZQRAVE(:,:) = TRANSPOSE( RESHAPE( ZWORK2(:),(/KFLEV,ICLOUD_COL+1/) ) )
+  ! 
+  ! ice water mixing ratio profiles
+  !
+  ZWORK1(:) = PACK( TRANSPOSE(ZQIAVE(:,:)),MASK=GCLOUDT(:,:) )
+  ZWORK2(1:ICLOUD) = ZWORK1(1:ICLOUD) ! fills the ICLOUD_COL cloudy columns
+  ZWORK2(ICLOUD+1:)= 0.0      !   and the single clear_sky one
+  DEALLOCATE(ZQIAVE)
+  ALLOCATE(ZQIAVE(ICLOUD_COL+1,KFLEV))
+  ZQIAVE(:,:) = TRANSPOSE( RESHAPE( ZWORK2(:),(/KFLEV,ICLOUD_COL+1/) ) )
+  !
+  !
+  ! liquid water mixing ratio profiles
+  !
+  ZWORK1(:) = PACK( TRANSPOSE(ZQLWC(:,:)),MASK=GCLOUDT(:,:) )
+  ZWORK2(1:ICLOUD) = ZWORK1(1:ICLOUD) ! fills the ICLOUD_COL cloudy columns
+  ZWORK2(ICLOUD+1:)= 0.0              !   and the single clear_sky one
+  DEALLOCATE(ZQLWC)
+  ALLOCATE(ZQLWC(ICLOUD_COL+1,KFLEV))
+  ZQLWC(:,:) = TRANSPOSE( RESHAPE( ZWORK2(:),(/KFLEV,ICLOUD_COL+1/) ) )
+  !
+  !rain 
+  !
+  ZWORK1(:) = PACK( TRANSPOSE(ZQRWC(:,:)),MASK=GCLOUDT(:,:) )
+  ZWORK2(1:ICLOUD) = ZWORK1(1:ICLOUD) ! fills the ICLOUD_COL cloudy columns
+  ZWORK2(ICLOUD+1:)= 0.0              !   and the single clear_sky one
+  DEALLOCATE(ZQRWC)
+  ALLOCATE(ZQRWC(ICLOUD_COL+1,KFLEV))
+  ZQRWC(:,:) = TRANSPOSE( RESHAPE( ZWORK2(:),(/KFLEV,ICLOUD_COL+1/) ) )
+  ! 
+  ! ice water mixing ratio profiles
+  !
+  ZWORK1(:) = PACK( TRANSPOSE(ZQIWC(:,:)),MASK=GCLOUDT(:,:) )
+  ZWORK2(1:ICLOUD) = ZWORK1(1:ICLOUD) ! fills the ICLOUD_COL cloudy columns
+  ZWORK2(ICLOUD+1:)= 0.0      !   and the single clear_sky one
+  DEALLOCATE(ZQIWC)
+  ALLOCATE(ZQIWC(ICLOUD_COL+1,KFLEV))
+  ZQIWC(:,:) = TRANSPOSE( RESHAPE( ZWORK2(:),(/KFLEV,ICLOUD_COL+1/) ) )
+  !
+  !
+  ! cloud fraction profiles
+  !
+  ZWORK1(:) = PACK( TRANSPOSE(ZCFAVE(:,:)),MASK=GCLOUDT(:,:) )
+  ZWORK2(1:ICLOUD) = ZWORK1(1:ICLOUD) ! fills the ICLOUD_COL cloudy columns
+  ZWORK2(ICLOUD+1:)= 0.0      !   and the single clear_sky one
+  DEALLOCATE(ZCFAVE)
+  ALLOCATE(ZCFAVE(ICLOUD_COL+1,KFLEV))
+  ZCFAVE(:,:) = TRANSPOSE( RESHAPE( ZWORK2(:),(/KFLEV,ICLOUD_COL+1/) ) )
+  !
+  ! C2R2 water particle concentration
+  !
+  IF ( SIZE(ZCCT_C2R2) > 0 )  THEN
+    ZWORK1(:) = PACK( TRANSPOSE(ZCCT_C2R2(:,:)),MASK=GCLOUDT(:,:) )
+    ZWORK2(1:ICLOUD) = ZWORK1(1:ICLOUD) ! fills the ICLOUD_COL cloudy columns
+    ZWORK2(ICLOUD+1:)= 0.0      !   and the single clear_sky one
+    DEALLOCATE(ZCCT_C2R2)
+    ALLOCATE(ZCCT_C2R2(ICLOUD_COL+1,KFLEV))
+    ZCCT_C2R2 (:,:) = TRANSPOSE( RESHAPE( ZWORK2(:),(/KFLEV,ICLOUD_COL+1/) ) )
+  ENDIF
+  IF ( SIZE (ZCRT_C2R2) > 0 )  THEN
+    ZWORK1(:) = PACK( TRANSPOSE(ZCRT_C2R2(:,:)),MASK=GCLOUDT(:,:) )
+    ZWORK2(1:ICLOUD) = ZWORK1(1:ICLOUD) ! fills the ICLOUD_COL cloudy columns
+    ZWORK2(ICLOUD+1:)= 0.0      !   and the single clear_sky one
+    DEALLOCATE(ZCRT_C2R2)
+    ALLOCATE(ZCRT_C2R2(ICLOUD_COL+1,KFLEV))
+    ZCRT_C2R2 (:,:) = TRANSPOSE( RESHAPE( ZWORK2(:),(/KFLEV,ICLOUD_COL+1/) ) )
+  ENDIF
+  IF ( SIZE (ZCIT_C1R3) > 0)  THEN
+    ZWORK1(:) = PACK( TRANSPOSE(ZCIT_C1R3(:,:)),MASK=GCLOUDT(:,:) )
+    ZWORK2(1:ICLOUD) = ZWORK1(1:ICLOUD) ! fills the ICLOUD_COL cloudy columns
+    ZWORK2(ICLOUD+1:)= 0.0      !   and the single clear_sky one
+    DEALLOCATE(ZCIT_C1R3)
+    ALLOCATE(ZCIT_C1R3(ICLOUD_COL+1,KFLEV))
+    ZCIT_C1R3 (:,:) = TRANSPOSE( RESHAPE( ZWORK2(:),(/KFLEV,ICLOUD_COL+1/) ) )
+  ENDIF
+  !
+  ! LIMA water particle concentration
+  !
+  IF( CCLOUD == 'LIMA' ) THEN
+     ZWORK1(:) = PACK( TRANSPOSE(ZCCT_LIMA(:,:)),MASK=GCLOUDT(:,:) )
+     ZWORK2(1:ICLOUD) = ZWORK1(1:ICLOUD) ! fills the ICLOUD_COL cloudy columns
+     ZWORK2(ICLOUD+1:)= 0.0      !   and the single clear_sky one
+     DEALLOCATE(ZCCT_LIMA)
+     ALLOCATE(ZCCT_LIMA(ICLOUD_COL+1,KFLEV))
+     ZCCT_LIMA (:,:) = TRANSPOSE( RESHAPE( ZWORK2(:),(/KFLEV,ICLOUD_COL+1/) ) )
+!
+     ZWORK1(:) = PACK( TRANSPOSE(ZCRT_LIMA(:,:)),MASK=GCLOUDT(:,:) )
+     ZWORK2(1:ICLOUD) = ZWORK1(1:ICLOUD) ! fills the ICLOUD_COL cloudy columns
+     ZWORK2(ICLOUD+1:)= 0.0      !   and the single clear_sky one
+     DEALLOCATE(ZCRT_LIMA)
+     ALLOCATE(ZCRT_LIMA(ICLOUD_COL+1,KFLEV))
+     ZCRT_LIMA (:,:) = TRANSPOSE( RESHAPE( ZWORK2(:),(/KFLEV,ICLOUD_COL+1/) ) )
+!
+     ZWORK1(:) = PACK( TRANSPOSE(ZCIT_LIMA(:,:)),MASK=GCLOUDT(:,:) )
+     ZWORK2(1:ICLOUD) = ZWORK1(1:ICLOUD) ! fills the ICLOUD_COL cloudy columns
+     ZWORK2(ICLOUD+1:)= 0.0      !   and the single clear_sky one
+     DEALLOCATE(ZCIT_LIMA)
+     ALLOCATE(ZCIT_LIMA(ICLOUD_COL+1,KFLEV))
+     ZCIT_LIMA (:,:) = TRANSPOSE( RESHAPE( ZWORK2(:),(/KFLEV,ICLOUD_COL+1/) ) )
+  ENDIF
+  !
+  ! ozone content profiles
+  !
+  ZWORK1(:) = PACK( TRANSPOSE(ZO3AVE(:,:)),MASK=GCLOUDT(:,:) )
+  ZWORK2(1:ICLOUD) = ZWORK1(1:ICLOUD) ! fills the ICLOUD_COL cloudy columns
+  ZWORK2(ICLOUD+1:)= ZOZ_CLEAR(1:)    !   and the single clear_sky one
+  DEALLOCATE(ZO3AVE)
+  ALLOCATE(ZO3AVE(ICLOUD_COL+1,KFLEV))
+  ZO3AVE(:,:) = TRANSPOSE( RESHAPE( ZWORK2(:),(/KFLEV,ICLOUD_COL+1/) ) )
+  !
+  ZWORK1(:) = PACK( TRANSPOSE(ZPAVE(:,:)),MASK=GCLOUDT(:,:) )
+  ZWORK2(1:ICLOUD) = ZWORK1(1:ICLOUD) ! fills the ICLOUD_COL cloudy columns
+  ZWORK2(ICLOUD+1:)= ZP_CLEAR(1:)     !   and the single clear_sky one
+  DEALLOCATE(ZPAVE)
+  ALLOCATE(ZPAVE(ICLOUD_COL+1,KFLEV))
+  ZPAVE(:,:) = TRANSPOSE( RESHAPE( ZWORK2(:),(/KFLEV,ICLOUD_COL+1/) ) )
+  !
+  !pressure thickness
+  !
+  ZWORK1(:) = PACK( TRANSPOSE(ZDPRES(:,:)),MASK=GCLOUDT(:,:) )
+  ZWORK2(1:ICLOUD) = ZWORK1(1:ICLOUD) ! fills the ICLOUD_COL cloudy columns
+  ZWORK2(ICLOUD+1:)= ZDP_CLEAR(1:)    !   and the single clear_sky one
+  DEALLOCATE(ZDPRES)
+  ALLOCATE(ZDPRES(ICLOUD_COL+1,KFLEV))
+  ZDPRES(:,:) = TRANSPOSE( RESHAPE( ZWORK2(:),(/KFLEV,ICLOUD_COL+1/) ) )
+  !
+  !aerosols
+  !
+  ALLOCATE(ZWORK1AER(ICLOUD,KAER))
+  ALLOCATE(ZWORK2AER(ICLOUD+KFLEV,KAER))
+  DO JK=1,KAER
+    ZWORK1AER(:,JK) = PACK( TRANSPOSE(ZAER(:,:,JK)),MASK=GCLOUDT(:,:) )
+    ZWORK2AER(1:ICLOUD,JK)=ZWORK1AER(:,JK)
+    ZWORK2AER(ICLOUD+1:,JK)=ZAER_CLEAR(:,JK)
+  END DO
+  DEALLOCATE(ZAER)
+  ALLOCATE(ZAER(ICLOUD_COL+1,KFLEV,KAER))
+  DO JK=1,KAER
+    ZAER(:,:,JK) = TRANSPOSE( RESHAPE( ZWORK2AER(:,JK),(/KFLEV,ICLOUD_COL+1/) ) )
+  END DO
+  DEALLOCATE (ZWORK1AER)
+  DEALLOCATE (ZWORK2AER)
+  !
+  IF(CAOP=='EXPL')THEN
+     ALLOCATE(ZWORK1AER(ICLOUD,KSWB_OLD))        !New vector with value for all cld. points
+     ALLOCATE(ZWORK2AER(ICLOUD+KFLEV,KSWB_OLD))  !New vector with value for all cld.points + 1 clr column
+     !Single scattering albedo
+     DO WVL_IDX=1,KSWB_OLD
+        ZWORK1AER(:,WVL_IDX) = PACK( TRANSPOSE(ZPIZA_EQ(:,:,WVL_IDX)),MASK=GCLOUDT(:,:) )
+        ZWORK2AER(1:ICLOUD,WVL_IDX) = ZWORK1AER(:,WVL_IDX)
+        ZWORK2AER(ICLOUD+1:,WVL_IDX) = ZPIZA_EQ_CLEAR(:,WVL_IDX)
+     ENDDO
+     DEALLOCATE(ZPIZA_EQ)
+     ALLOCATE(ZPIZA_EQ(ICLOUD_COL+1,KFLEV,KSWB_OLD))
+     DO WVL_IDX=1,KSWB_OLD
+        ZPIZA_EQ(:,:,WVL_IDX) = TRANSPOSE( RESHAPE( ZWORK2AER(:,WVL_IDX),(/KFLEV,ICLOUD_COL+1/) ) )
+     ENDDO
+     !Assymetry factor
+     DO WVL_IDX=1,KSWB_OLD
+        ZWORK1AER(:,WVL_IDX) = PACK(TRANSPOSE(ZCGA_EQ(:,:,WVL_IDX)), MASK=GCLOUDT(:,:))
+        ZWORK2AER(1:ICLOUD,WVL_IDX) = ZWORK1AER(:,WVL_IDX)
+        ZWORK2AER(ICLOUD+1:,WVL_IDX) = ZCGA_EQ_CLEAR(:,WVL_IDX)
+     ENDDO
+     DEALLOCATE(ZCGA_EQ)
+     ALLOCATE(ZCGA_EQ(ICLOUD_COL+1,KFLEV,KSWB_OLD))
+     DO WVL_IDX=1,KSWB_OLD
+        ZCGA_EQ(:,:,WVL_IDX) = TRANSPOSE(RESHAPE(ZWORK2AER(:,WVL_IDX),(/KFLEV,ICLOUD_COL+1/)))
+     ENDDO
+     !Relative wavelength-distributed optical depth
+     DO WVL_IDX=1,KSWB_OLD
+        ZWORK1AER(:,WVL_IDX) =  PACK(TRANSPOSE(ZTAUREL_EQ(:,:,WVL_IDX)), MASK=GCLOUDT(:,:))
+        ZWORK2AER(1:ICLOUD,WVL_IDX) = ZWORK1AER(:,WVL_IDX)
+        ZWORK2AER(ICLOUD+1:,WVL_IDX) = ZTAUREL_EQ_CLEAR(:,WVL_IDX)
+     ENDDO
+     DEALLOCATE(ZTAUREL_EQ)
+     ALLOCATE(ZTAUREL_EQ(ICLOUD_COL+1,KFLEV,KSWB_OLD))
+     DO WVL_IDX=1,KSWB_OLD
+        ZTAUREL_EQ(:,:,WVL_IDX) = TRANSPOSE(RESHAPE(ZWORK2AER(:,WVL_IDX),(/KFLEV,ICLOUD_COL+1/)))
+     ENDDO
+     DEALLOCATE(ZWORK1AER)
+     DEALLOCATE(ZWORK2AER)
+  ELSE
+     DEALLOCATE(ZPIZA_EQ)
+     ALLOCATE(ZPIZA_EQ(ICLOUD_COL+1,KFLEV,KSWB_OLD))
+     DEALLOCATE(ZCGA_EQ)
+     ALLOCATE(ZCGA_EQ(ICLOUD_COL+1,KFLEV,KSWB_OLD))
+     DEALLOCATE(ZTAUREL_EQ)
+     ALLOCATE(ZTAUREL_EQ(ICLOUD_COL+1,KFLEV,KSWB_OLD))
+  ENDIF !Check on LDUST
+  
+  ! half-level variables
+  !
+  ZWORK1(:) = PACK( TRANSPOSE(ZPRES_HL(:,1:KFLEV)),MASK=GCLOUDT(:,:) )
+  ZWORK2(1:ICLOUD) = ZWORK1(1:ICLOUD)  ! fills the ICLOUD_COL cloudy columns
+  ZWORK2(ICLOUD+1:)= ZHP_CLEAR(1:)     !   and the single clear_sky one
+  DEALLOCATE(ZPRES_HL)
+  ALLOCATE(ZPRES_HL(ICLOUD_COL+1,KFLEV+1))
+  ZPRES_HL(:,1:KFLEV) = TRANSPOSE( RESHAPE( ZWORK2(:),(/KFLEV,ICLOUD_COL+1/) ) )
+  ZPRES_HL(:,KFLEV+1) = PSTATM(IKSTAE,2)*100.0
+  !
+  ZWORK1(:) = PACK( TRANSPOSE(ZT_HL(:,1:KFLEV)),MASK=GCLOUDT(:,:) )
+  ZWORK2(1:ICLOUD) = ZWORK1(1:ICLOUD)  ! fills the ICLOUD_COL cloudy columns
+  ZWORK2(ICLOUD+1:)= ZHT_CLEAR(1:)     !   and the single clear_sky one
+  DEALLOCATE(ZT_HL)
+  ALLOCATE(ZT_HL(ICLOUD_COL+1,KFLEV+1))
+  ZT_HL(:,1:KFLEV) = TRANSPOSE( RESHAPE( ZWORK2(:),(/KFLEV,ICLOUD_COL+1/) ) )
+  ZT_HL(:,KFLEV+1) = PSTATM(IKSTAE,3)
+  !
+  ! surface fields
+  !
+  ALLOCATE(ZWORK3(ICLOUD_COL))
+  ALLOCATE(ZWORK4(ICLOUD_COL,KSWB_MNH))
+  ALLOCATE(ZWORK(KDLON))
+  DO JALBS=1,KSWB_MNH
+    ZWORK(:)  = ZALBP(:,JALBS)
+    ZWORK3(:) = PACK( ZWORK(:),MASK=.NOT.GCLEAR_2D(:) )
+    ZWORK4(:,JALBS) = ZWORK3(:)
+  END DO
+  DEALLOCATE(ZALBP)
+  ALLOCATE(ZALBP(ICLOUD_COL+1,KSWB_MNH))
+  ZALBP(1:ICLOUD_COL,:) = ZWORK4(1:ICLOUD_COL,:)
+  ZALBP(ICLOUD_COL+1,:) = ZALBP_CLEAR(:)
+  !
+  DO JALBS=1,KSWB_MNH
+    ZWORK(:)  = ZALBD(:,JALBS)
+    ZWORK3(:) = PACK( ZWORK(:),MASK=.NOT.GCLEAR_2D(:) )
+    ZWORK4(:,JALBS) = ZWORK3(:)
+  END DO
+  DEALLOCATE(ZALBD)
+  ALLOCATE(ZALBD(ICLOUD_COL+1,KSWB_MNH))
+  ZALBD(1:ICLOUD_COL,:) = ZWORK4(1:ICLOUD_COL,:)  
+  ZALBD(ICLOUD_COL+1,:) = ZALBD_CLEAR(:)  
+  !
+  DEALLOCATE(ZWORK4)
+  !
+  ZWORK3(:) = PACK( ZEMIS(:,1),MASK=.NOT.GCLEAR_2D(:) )
+  DEALLOCATE(ZEMIS)
+  ALLOCATE(ZEMIS(ICLOUD_COL+1,1))
+  ZEMIS(1:ICLOUD_COL,1) = ZWORK3(1:ICLOUD_COL)
+  ZEMIS(ICLOUD_COL+1,1) = ZEMIS_CLEAR
+  !
+  !
+  ZWORK3(:) = PACK( ZEMIW(:,1),MASK=.NOT.GCLEAR_2D(:) )
+  DEALLOCATE(ZEMIW)
+  ALLOCATE(ZEMIW(ICLOUD_COL+1,1))
+  ZEMIW(1:ICLOUD_COL,1) = ZWORK3(1:ICLOUD_COL)
+  ZEMIW(ICLOUD_COL+1,1) = ZEMIW_CLEAR
+  ! 
+  !
+  ZWORK3(:) = PACK( ZRMU0(:),MASK=.NOT.GCLEAR_2D(:) )
+  DEALLOCATE(ZRMU0)
+  ALLOCATE(ZRMU0(ICLOUD_COL+1))
+  ZRMU0(1:ICLOUD_COL) = ZWORK3(1:ICLOUD_COL)
+  ZRMU0(ICLOUD_COL+1) = ZRMU0_CLEAR
+  !
+  ZWORK3(:) = PACK( ZLSM(:),MASK=.NOT.GCLEAR_2D(:) )
+  DEALLOCATE(ZLSM)
+  ALLOCATE(ZLSM(ICLOUD_COL+1))
+  ZLSM(1:ICLOUD_COL) = ZWORK3(1:ICLOUD_COL)
+  ZLSM (ICLOUD_COL+1)= ZLSM_CLEAR
+  ! 
+  ZWORK3(:) = PACK( ZLAT(:),MASK=.NOT.GCLEAR_2D(:) )
+  DEALLOCATE(ZLAT)
+  ALLOCATE(ZLAT(ICLOUD_COL+1))
+  ZLAT(1:ICLOUD_COL) = ZWORK3(1:ICLOUD_COL)
+  ZLAT (ICLOUD_COL+1)= ZLAT_CLEAR
+  ! 
+  ZWORK3(:) = PACK( ZLON(:),MASK=.NOT.GCLEAR_2D(:) )
+  DEALLOCATE(ZLON)
+  ALLOCATE(ZLON(ICLOUD_COL+1))
+  ZLON(1:ICLOUD_COL) = ZWORK3(1:ICLOUD_COL)
+  ZLON (ICLOUD_COL+1)= ZLON_CLEAR
+  !   
+  ZWORK3(:) = PACK( ZTS(:),MASK=.NOT.GCLEAR_2D(:) )
+  DEALLOCATE(ZTS)
+  ALLOCATE(ZTS(ICLOUD_COL+1))
+  ZTS(1:ICLOUD_COL) = ZWORK3(1:ICLOUD_COL)
+  ZTS(ICLOUD_COL+1) = ZTS_CLEAR
+  !
+  DEALLOCATE(ZWORK1)
+  DEALLOCATE(ZWORK2)
+  DEALLOCATE(ZWORK3)
+  DEALLOCATE(ZWORK)
+  !  
+  IDIM = ICLOUD_COL +1 ! Number of columns where RT is computed 
+!
+ELSE 
+  !
+  !*       5.3   RADIATION COMPUTATIONS FOR THE FULL COLUMN NUMBER (KDLON)
+  !
+  IDIM = KDLON
+END IF
+!
+! initialisation of cloud trace for the next radiation time step
+! (if unchanged columns are not recomputed)
+WHERE ( ZCLOUD(:) <= 0.0 )
+  ICLEAR_2D_TM1(:) = 1
+ELSEWHERE
+  ICLEAR_2D_TM1(:) = 0
+END WHERE
+!
+DO JJ=IJB,IJE
+  DO JI=IIB,IIE
+    IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+    KCLEARCOL_TM1(JI,JJ) = ICLEAR_2D_TM1(IIJ) ! output to be saved for next time step
+  END DO
+END DO
+! 
+!
+!*       5.4  VERTICAL grid modification(up-down) for compatibility with ECMWF 
+!             radiation vertical grid. ALLOCATION of the outputs.  
+!            
+!             
+ALLOCATE (ZWORK_GRID(SIZE(ZPRES_HL,1),KFLEV+1))
+!
+!half level pressure
+ZWORK_GRID(:,:)=ZPRES_HL(:,:)
+DO JKRAD=1, KFLEV+1
+  JK1=(KFLEV+1)+1-JKRAD
+  ZPRES_HL(:,JKRAD) = ZWORK_GRID(:,JK1)
+END DO
+!
+!half level temperature
+ZWORK_GRID(:,:)=ZT_HL(:,:)
+DO  JKRAD=1, KFLEV+1
+  JK1=(KFLEV+1)+1-JKRAD
+  ZT_HL(:,JKRAD)=ZWORK_GRID(:,JK1)
+END DO
+!
+DEALLOCATE(ZWORK_GRID)
+!
+!mean layer variables
+!-------------------------------------
+ALLOCATE(ZWORK_GRID(SIZE(ZTAVE,1),KFLEV))
+!
+!mean layer temperature
+ZWORK_GRID(:,:)=ZTAVE(:,:)
+DO JKRAD=1, KFLEV
+  JK1=KFLEV+1-JKRAD
+  ZTAVE(:,JKRAD)=ZWORK_GRID(:,JK1)
+END DO
+!
+!mean layer pressure
+ZWORK_GRID(:,:)=ZPAVE(:,:)
+DO JKRAD=1, KFLEV
+  JK1=KFLEV+1-JKRAD
+  ZPAVE(:,JKRAD)=ZWORK_GRID(:,JK1)
+END DO
+!
+!mean layer pressure thickness
+ZWORK_GRID(:,:)=ZDPRES(:,:)
+DO JKRAD=1, KFLEV
+  JK1=KFLEV+1-JKRAD
+  ZDPRES(:,JKRAD)=ZWORK_GRID(:,JK1)
+END DO
+!
+!mesh size
+ZWORK_GRID(:,:)=ZDZ(:,:)
+DO JKRAD=1, KFLEV
+  JK1=KFLEV+1-JKRAD
+  ZDZ(:,JKRAD)=ZWORK_GRID(:,JK1)
+END DO
+
+!mean layer cloud fraction
+ZWORK_GRID(:,:)=ZCFAVE(:,:)
+DO JKRAD=1, KFLEV
+  JK1=KFLEV+1-JKRAD
+  ZCFAVE(:,JKRAD)=ZWORK_GRID(:,JK1)
+END DO
+!
+!mean layer water vapor mixing ratio
+ZWORK_GRID(:,:)=ZQVAVE(:,:)
+DO JKRAD=1, KFLEV
+  JK1=KFLEV+1-JKRAD
+  ZQVAVE(:,JKRAD)=ZWORK_GRID(:,JK1)
+END DO
+!
+!ice
+ZWORK_GRID(:,:)=ZQIAVE(:,:)
+DO JKRAD=1, KFLEV
+  JK1=KFLEV+1-JKRAD
+  ZQIAVE(:,JKRAD)=ZWORK_GRID(:,JK1)
+END DO
+!
+!liquid water
+ZWORK_GRID(:,:)=ZQLAVE(:,:)
+DO JKRAD=1, KFLEV
+  JK1=KFLEV+1-JKRAD
+  ZQLAVE(:,JKRAD)=ZWORK_GRID(:,JK1)
+END DO
+
+
+!rain water
+ZWORK_GRID(:,:)=ZQRAVE(:,:)
+DO JKRAD=1, KFLEV
+  JK1=KFLEV+1-JKRAD
+  ZQRAVE(:,JKRAD)=ZWORK_GRID(:,JK1)
+END DO
+!
+!ice water content
+ZWORK_GRID(:,:)=ZQIWC(:,:)
+DO JKRAD=1, KFLEV
+  JK1=KFLEV+1-JKRAD
+  ZQIWC(:,JKRAD)=ZWORK_GRID(:,JK1)
+END DO
+!
+!liquid water content
+ZWORK_GRID(:,:)=ZQLWC(:,:)
+DO JKRAD=1, KFLEV
+  JK1=KFLEV+1-JKRAD
+  ZQLWC(:,JKRAD)=ZWORK_GRID(:,JK1)
+END DO
+
+
+!rain water content
+ZWORK_GRID(:,:)=ZQRWC(:,:)
+DO JKRAD=1, KFLEV
+  JK1=KFLEV+1-JKRAD
+  ZQRWC(:,JKRAD)=ZWORK_GRID(:,JK1)
+END DO
+
+
+!C2R2 water particle concentration
+!
+IF (SIZE(ZCCT_C2R2) > 0) THEN
+  ZWORK_GRID(:,:)=ZCCT_C2R2(:,:)
+  DO JKRAD=1, KFLEV
+    JK1=KFLEV+1-JKRAD
+    ZCCT_C2R2(:,JKRAD)=ZWORK_GRID(:,JK1)
+  END DO
+END IF
+IF (SIZE(ZCRT_C2R2) > 0) THEN
+  ZWORK_GRID(:,:)=ZCRT_C2R2(:,:)
+  DO JKRAD=1, KFLEV
+    JK1=KFLEV+1-JKRAD
+    ZCRT_C2R2(:,JKRAD)=ZWORK_GRID(:,JK1)
+  END DO
+END IF
+IF (SIZE(ZCIT_C1R3) > 0) THEN
+  ZWORK_GRID(:,:)=ZCIT_C1R3(:,:)
+  DO JKRAD=1, KFLEV
+    JK1=KFLEV+1-JKRAD
+    ZCIT_C1R3(:,JKRAD)=ZWORK_GRID(:,JK1)
+  END DO
+END IF
+!
+!LIMA water particle concentration
+!
+IF( CCLOUD == 'LIMA' ) THEN
+   ZWORK_GRID(:,:)=ZCCT_LIMA(:,:)
+   DO JKRAD=1, KFLEV
+      JK1=KFLEV+1-JKRAD
+      ZCCT_LIMA(:,JKRAD)=ZWORK_GRID(:,JK1)
+   END DO
+!
+   ZWORK_GRID(:,:)=ZCRT_LIMA(:,:)
+   DO JKRAD=1, KFLEV
+      JK1=KFLEV+1-JKRAD
+      ZCRT_LIMA(:,JKRAD)=ZWORK_GRID(:,JK1)
+   END DO
+!
+   ZWORK_GRID(:,:)=ZCIT_LIMA(:,:)
+   DO JKRAD=1, KFLEV
+      JK1=KFLEV+1-JKRAD
+      ZCIT_LIMA(:,JKRAD)=ZWORK_GRID(:,JK1)
+   END DO
+END IF
+!
+!ozone content 
+ZWORK_GRID(:,:)=ZO3AVE(:,:)
+DO JKRAD=1, KFLEV
+  JK1=KFLEV+1-JKRAD
+  ZO3AVE(:,JKRAD)=ZWORK_GRID(:,JK1)
+END DO
+!
+!aerosol optical depth 
+DO JI=1,KAER
+  ZWORK_GRID(:,:)=ZAER(:,:,JI)
+  DO JKRAD=1, KFLEV
+    JK1=KFLEV+1-JKRAD
+    ZAER(:,JKRAD,JI)=ZWORK_GRID(:,JK1)
+  END DO
+END DO
+IF (CAOP=='EXPL') THEN
+!TURN MORE FIELDS UPSIDE DOWN...
+!Dust single scattering albedo
+DO JI=1,KSWB_OLD
+   ZWORK_GRID(:,:)=ZPIZA_EQ(:,:,JI)
+   DO JKRAD=1,KFLEV
+      JK1=KFLEV+1-JKRAD
+      ZPIZA_EQ(:,JKRAD,JI)=ZWORK_GRID(:,JK1)
+   ENDDO
+ENDDO
+!Dust asymmetry factor
+DO JI=1,KSWB_OLD
+   ZWORK_GRID(:,:)=ZCGA_EQ(:,:,JI)
+   DO JKRAD=1,KFLEV
+      JK1=KFLEV+1-JKRAD
+      ZCGA_EQ(:,JKRAD,JI)=ZWORK_GRID(:,JK1)
+   ENDDO
+ENDDO
+DO JI=1,KSWB_OLD
+   ZWORK_GRID(:,:)=ZTAUREL_EQ(:,:,JI)
+   DO JKRAD=1,KFLEV
+      JK1=KFLEV+1-JKRAD
+      ZTAUREL_EQ(:,JKRAD,JI)=ZWORK_GRID(:,JK1)
+   ENDDO
+ENDDO 
+
+END IF
+
+!
+DEALLOCATE(ZWORK_GRID)
+!
+!mean layer saturation specific humidity
+!
+ALLOCATE(ZQSAVE(SIZE(ZTAVE,1),SIZE(ZTAVE,2)))
+!
+WHERE (ZTAVE(:,:) > XTT)
+  ZQSAVE(:,:) = QSAT(ZTAVE, ZPAVE)
+ELSEWHERE
+  ZQSAVE(:,:) = QSATI(ZTAVE, ZPAVE)
+END WHERE
+!
+! allocations for the radiation code outputs
+!
+ALLOCATE(ZDTLW(IDIM,KFLEV))
+ALLOCATE(ZDTSW(IDIM,KFLEV))
+ALLOCATE(ZFLUX_TOP_GND_IRVISNIR(IDIM,KFLUX))
+ALLOCATE(ZSFSWDIR(IDIM,ISWB))
+ALLOCATE(ZSFSWDIF(IDIM,ISWB))
+ALLOCATE(ZDTLW_CS(IDIM,KFLEV))
+ALLOCATE(ZDTSW_CS(IDIM,KFLEV))
+ALLOCATE(ZFLUX_TOP_GND_IRVISNIR_CS(IDIM,KFLUX))
+!
+!
+ALLOCATE(ZFLUX_LW(IDIM,2,KFLEV+1))
+ALLOCATE(ZFLUX_SW_DOWN(IDIM,KFLEV+1))
+ALLOCATE(ZFLUX_SW_UP(IDIM,KFLEV+1))
+ALLOCATE(ZRADLP(IDIM,KFLEV))
+IF( KRAD_DIAG >= 1) THEN
+  ALLOCATE(ZNFLW(IDIM,KFLEV+1))
+  ALLOCATE(ZNFSW(IDIM,KFLEV+1))
+ELSE
+  ALLOCATE(ZNFLW(0,0))
+  ALLOCATE(ZNFSW(0,0))
+END IF
+! 
+IF( KRAD_DIAG >= 2) THEN
+  ALLOCATE(ZFLUX_SW_DOWN_CS(IDIM,KFLEV+1))
+  ALLOCATE(ZFLUX_SW_UP_CS(IDIM,KFLEV+1))
+  ALLOCATE(ZFLUX_LW_CS(IDIM,2,KFLEV+1))
+  ALLOCATE(ZNFLW_CS(IDIM,KFLEV+1))
+  ALLOCATE(ZNFSW_CS(IDIM,KFLEV+1))
+ELSE
+  ALLOCATE(ZFLUX_SW_DOWN_CS(0,0))
+  ALLOCATE(ZFLUX_SW_UP_CS(0,0))
+  ALLOCATE(ZFLUX_LW_CS(0,0,0))
+  ALLOCATE(ZNFSW_CS(0,0))
+  ALLOCATE(ZNFLW_CS(0,0))
+END IF
+!
+IF( KRAD_DIAG >= 3) THEN
+  ALLOCATE(ZPLAN_ALB_VIS(IDIM))
+  ALLOCATE(ZPLAN_ALB_NIR(IDIM))
+  ALLOCATE(ZPLAN_TRA_VIS(IDIM))
+  ALLOCATE(ZPLAN_TRA_NIR(IDIM))
+  ALLOCATE(ZPLAN_ABS_VIS(IDIM))
+  ALLOCATE(ZPLAN_ABS_NIR(IDIM))
+ELSE
+  ALLOCATE(ZPLAN_ALB_VIS(0))
+  ALLOCATE(ZPLAN_ALB_NIR(0))
+  ALLOCATE(ZPLAN_TRA_VIS(0))
+  ALLOCATE(ZPLAN_TRA_NIR(0))
+  ALLOCATE(ZPLAN_ABS_VIS(0))
+  ALLOCATE(ZPLAN_ABS_NIR(0))
+END IF
+!
+IF( KRAD_DIAG >= 4) THEN
+  ALLOCATE(ZEFCL_RRTM(IDIM,KFLEV))
+  ALLOCATE(ZCLSW_TOTAL(IDIM,KFLEV))
+  ALLOCATE(ZTAU_TOTAL(IDIM,KSWB_OLD,KFLEV))
+  ALLOCATE(ZOMEGA_TOTAL(IDIM,KSWB_OLD,KFLEV))
+  ALLOCATE(ZCG_TOTAL(IDIM,KSWB_OLD,KFLEV))
+  ALLOCATE(ZEFCL_LWD(IDIM,KFLEV))
+  ALLOCATE(ZEFCL_LWU(IDIM,KFLEV))
+  ALLOCATE(ZFLWP(IDIM,KFLEV))
+  ALLOCATE(ZFIWP(IDIM,KFLEV))  
+  ALLOCATE(ZRADIP(IDIM,KFLEV)) 
+ELSE
+  ALLOCATE(ZEFCL_RRTM(0,0))
+  ALLOCATE(ZCLSW_TOTAL(0,0))
+  ALLOCATE(ZTAU_TOTAL(0,0,0))
+  ALLOCATE(ZOMEGA_TOTAL(0,0,0))
+  ALLOCATE(ZCG_TOTAL(0,0,0))
+  ALLOCATE(ZEFCL_LWD(0,0))
+  ALLOCATE(ZEFCL_LWU(0,0))
+  ALLOCATE(ZFLWP(0,0))
+  ALLOCATE(ZFIWP(0,0))
+  ALLOCATE(ZRADIP(0,0))
+END IF
+!
+!*       5.6   CALLS THE ECMWF_RADIATION ROUTINES
+!
+! mixing ratio -> specific humidity conversion (for ECMWF routine)
+! mixing ratio = mv/md ; specific humidity = mv/(mv+md)
+
+ZQVAVE(:,:) = ZQVAVE(:,:) / (1.+ZQVAVE(:,:)) ! Because 
+! ZAER = 1e-5*ZAER
+! ZO3AVE = 1e-5*ZO3AVE!
+IF( IDIM <= KRAD_COLNBR ) THEN 
+!
+! there is less than KRAD_COLNBR columns to be considered therefore
+! no split of the arrays is performed
+! Note that radiation scheme only takes scalar emissivities so only fist value of the spectral emissivity is taken
+ ALLOCATE(ZTAVE_RAD(SIZE(ZTAVE,1),SIZE(ZTAVE,2)))
+ ALLOCATE(ZPAVE_RAD(SIZE(ZPAVE,1),SIZE(ZPAVE,2)))
+ ZTAVE_RAD = ZTAVE
+ ZPAVE_RAD = ZPAVE
+ IF (CCLOUD == 'LIMA') THEN
+  IF (CRAD == "ECMW") THEN
+    CALL ECMWF_RADIATION_VERS2  ( IDIM ,KFLEV, KRAD_DIAG, KAER,     &      
+        ZDZ,HEFRADL,HEFRADI,HOPWSW, HOPISW, HOPWLW, HOPILW,PFUDG,      &
+        ZRII0, ZAER , ZALBD, ZALBP, ZPRES_HL, ZPAVE_RAD,               &
+        PCCO2, ZCFAVE, ZDPRES, ZEMIS(:,1), ZEMIW(:,1), ZLSM, ZRMU0,          &
+        ZO3AVE , ZQVAVE, ZQIAVE ,ZQIWC,ZQLAVE,ZQLWC, ZQSAVE, ZQRAVE,  ZQRWC,  &
+        ZT_HL,ZTAVE_RAD, ZTS, ZCCT_LIMA, ZCRT_LIMA, ZCIT_LIMA,         &
+        ZNFLW_CS, ZNFLW, ZNFSW_CS,ZNFSW,                           &
+        ZDTLW, ZDTSW, ZFLUX_TOP_GND_IRVISNIR,                      &
+        ZSFSWDIR, ZSFSWDIF,                                        &
+        ZFLUX_SW_DOWN, ZFLUX_SW_UP, ZFLUX_LW ,                     &
+        ZDTLW_CS, ZDTSW_CS, ZFLUX_TOP_GND_IRVISNIR_CS,             &
+        ZFLUX_SW_DOWN_CS, ZFLUX_SW_UP_CS, ZFLUX_LW_CS,             &           
+        ZPLAN_ALB_VIS,ZPLAN_ALB_NIR, ZPLAN_TRA_VIS, ZPLAN_TRA_NIR, &
+        ZPLAN_ABS_VIS, ZPLAN_ABS_NIR,ZEFCL_LWD, ZEFCL_LWU,         &
+        ZFLWP, ZFIWP,ZRADLP, ZRADIP,ZEFCL_RRTM,  ZCLSW_TOTAL,  ZTAU_TOTAL,  &
+        ZOMEGA_TOTAL,ZCG_TOTAL,                                    &
+        GAOP, ZPIZA_EQ,ZCGA_EQ,ZTAUREL_EQ                       )
+
+        
+  ELSE IF (CRAD == "ECRA") THEN  
+    CALL ECRAD_INTERFACE  ( IDIM ,KFLEV, KRAD_DIAG, KAER,     &      
+        ZDZ,HEFRADL,HEFRADI,HOPWSW, HOPISW, HOPWLW, HOPILW,PFUDG,      &
+        ZRII0, ZAER , ZALBD, ZALBP, ZPRES_HL, ZPAVE_RAD,               &
+        PCCO2, ZCFAVE, ZDPRES, ZEMIS(:,1), ZEMIW(:,1), ZLSM, ZRMU0,          &
+        ZO3AVE , ZQVAVE, ZQIAVE ,ZQIWC,ZQLAVE,ZQLWC, ZQSAVE, ZQRAVE,  ZQRWC,  &
+        ZT_HL,ZTAVE_RAD, ZTS, ZCCT_LIMA, ZCRT_LIMA, ZCIT_LIMA,         &
+        ZNFLW, ZNFSW, ZNFLW_CS, ZNFSW_CS,                           &
+        ZDTLW, ZDTSW, ZFLUX_TOP_GND_IRVISNIR,                      &
+        ZSFSWDIR, ZSFSWDIF,                                        &
+        ZFLUX_SW_DOWN, ZFLUX_SW_UP, ZFLUX_LW ,                     &
+        ZDTLW_CS, ZDTSW_CS, ZFLUX_TOP_GND_IRVISNIR_CS,             &
+        ZFLUX_SW_DOWN_CS, ZFLUX_SW_UP_CS, ZFLUX_LW_CS,             &           
+        ZPLAN_ALB_VIS,ZPLAN_ALB_NIR, ZPLAN_TRA_VIS, ZPLAN_TRA_NIR, &
+        ZPLAN_ABS_VIS, ZPLAN_ABS_NIR,ZEFCL_LWD, ZEFCL_LWU,         &
+        ZFLWP, ZFIWP,ZRADLP, ZRADIP,ZEFCL_RRTM,  ZCLSW_TOTAL,  ZTAU_TOTAL,  &
+        ZOMEGA_TOTAL,ZCG_TOTAL,                                    &
+        GAOP, ZPIZA_EQ,ZCGA_EQ,ZTAUREL_EQ,ZLAT,ZLON                )      
+  ENDIF      
+ 
+ ELSE
+   IF (CRAD == "ECMW") THEN 
+     CALL ECMWF_RADIATION_VERS2  ( IDIM ,KFLEV, KRAD_DIAG, KAER,     &      
+        ZDZ,HEFRADL,HEFRADI,HOPWSW, HOPISW, HOPWLW, HOPILW,PFUDG,      &
+        ZRII0, ZAER , ZALBD, ZALBP, ZPRES_HL, ZPAVE_RAD,               &
+        PCCO2, ZCFAVE, ZDPRES, ZEMIS(:,1), ZEMIW(:,1), ZLSM, ZRMU0,          &
+        ZO3AVE , ZQVAVE, ZQIAVE ,ZQIWC,ZQLAVE,ZQLWC, ZQSAVE, ZQRAVE,  ZQRWC,  &
+        ZT_HL,ZTAVE_RAD, ZTS, ZCCT_C2R2, ZCRT_C2R2, ZCIT_C1R3,         &
+        ZNFLW_CS, ZNFLW, ZNFSW_CS,ZNFSW,                           &
+        ZDTLW, ZDTSW, ZFLUX_TOP_GND_IRVISNIR,                      &
+        ZSFSWDIR, ZSFSWDIF,                                        &
+        ZFLUX_SW_DOWN, ZFLUX_SW_UP, ZFLUX_LW ,                     &
+        ZDTLW_CS, ZDTSW_CS, ZFLUX_TOP_GND_IRVISNIR_CS,             &
+        ZFLUX_SW_DOWN_CS, ZFLUX_SW_UP_CS, ZFLUX_LW_CS,             &           
+        ZPLAN_ALB_VIS,ZPLAN_ALB_NIR, ZPLAN_TRA_VIS, ZPLAN_TRA_NIR, &
+        ZPLAN_ABS_VIS, ZPLAN_ABS_NIR,ZEFCL_LWD, ZEFCL_LWU,         &
+        ZFLWP, ZFIWP,ZRADLP, ZRADIP,ZEFCL_RRTM,  ZCLSW_TOTAL,  ZTAU_TOTAL,  &
+        ZOMEGA_TOTAL,ZCG_TOTAL,                                    &
+        GAOP, ZPIZA_EQ,ZCGA_EQ,ZTAUREL_EQ                       )
+   
+   ELSE IF (CRAD == "ECRA") THEN 
+     CALL ECRAD_INTERFACE  ( IDIM ,KFLEV, KRAD_DIAG, KAER,                   &      
+        ZDZ,HEFRADL,HEFRADI,HOPWSW, HOPISW, HOPWLW, HOPILW,PFUDG,      &
+        ZRII0, ZAER , ZALBD, ZALBP, ZPRES_HL, ZPAVE_RAD,               &
+        PCCO2, ZCFAVE, ZDPRES, ZEMIS(:,1), ZEMIW(:,1), ZLSM, ZRMU0,          &
+        ZO3AVE , ZQVAVE, ZQIAVE ,ZQIWC,ZQLAVE,ZQLWC, ZQSAVE, ZQRAVE,  ZQRWC,  &
+        ZT_HL,ZTAVE_RAD, ZTS, ZCCT_C2R2, ZCRT_C2R2, ZCIT_C1R3,         &
+        ZNFLW, ZNFSW, ZNFLW_CS, ZNFSW_CS,                           &
+        ZDTLW, ZDTSW, ZFLUX_TOP_GND_IRVISNIR,                      &
+        ZSFSWDIR, ZSFSWDIF,                                        &
+        ZFLUX_SW_DOWN, ZFLUX_SW_UP, ZFLUX_LW ,                     &
+        ZDTLW_CS, ZDTSW_CS, ZFLUX_TOP_GND_IRVISNIR_CS,             &
+        ZFLUX_SW_DOWN_CS, ZFLUX_SW_UP_CS, ZFLUX_LW_CS,             &           
+        ZPLAN_ALB_VIS,ZPLAN_ALB_NIR, ZPLAN_TRA_VIS, ZPLAN_TRA_NIR, &
+        ZPLAN_ABS_VIS, ZPLAN_ABS_NIR,ZEFCL_LWD, ZEFCL_LWU,         &
+        ZFLWP, ZFIWP,ZRADLP, ZRADIP,ZEFCL_RRTM,  ZCLSW_TOTAL,  ZTAU_TOTAL,  &
+        ZOMEGA_TOTAL,ZCG_TOTAL,                                    &
+        GAOP, ZPIZA_EQ,ZCGA_EQ,ZTAUREL_EQ ,ZLAT,ZLON               )
+  END IF      
+   
+   
+ END IF
+ DEALLOCATE(ZTAVE_RAD,ZPAVE_RAD)
+!
+ELSE
+!
+! the splitting of the arrays will be performed
+!
+  INUM_CALL = CEILING( REAL( IDIM ) / REAL( KRAD_COLNBR ) )
+  IDIM_RESIDUE = IDIM
+!
+  DO JI_SPLIT = 1 , INUM_CALL
+    IDIM_EFF = MIN( IDIM_RESIDUE,KRAD_COLNBR )
+    !
+    IF( JI_SPLIT == 1 .OR. JI_SPLIT == INUM_CALL ) THEN       
+      ALLOCATE(  ZALBP_SPLIT(IDIM_EFF,KSWB_MNH))
+      ALLOCATE(  ZALBD_SPLIT(IDIM_EFF,KSWB_MNH))  
+      ALLOCATE(  ZEMIS_SPLIT(IDIM_EFF))
+      ALLOCATE(  ZEMIW_SPLIT(IDIM_EFF))
+      ALLOCATE(  ZRMU0_SPLIT(IDIM_EFF))
+      ALLOCATE(  ZLAT_SPLIT(IDIM_EFF))
+      ALLOCATE(  ZLON_SPLIT(IDIM_EFF))
+      ALLOCATE(  ZCFAVE_SPLIT(IDIM_EFF,KFLEV))
+      ALLOCATE(  ZO3AVE_SPLIT(IDIM_EFF,KFLEV))
+      ALLOCATE(  ZT_HL_SPLIT(IDIM_EFF,KFLEV+1))
+      ALLOCATE(  ZPRES_HL_SPLIT(IDIM_EFF,KFLEV+1))
+      ALLOCATE(  ZDZ_SPLIT(IDIM_EFF,KFLEV))
+      ALLOCATE(  ZQLAVE_SPLIT(IDIM_EFF,KFLEV))
+      ALLOCATE(  ZQIAVE_SPLIT(IDIM_EFF,KFLEV))
+      ALLOCATE(  ZQRAVE_SPLIT(IDIM_EFF,KFLEV))
+      ALLOCATE(  ZQLWC_SPLIT(IDIM_EFF,KFLEV))
+      ALLOCATE(  ZQIWC_SPLIT(IDIM_EFF,KFLEV))
+      ALLOCATE(  ZQRWC_SPLIT(IDIM_EFF,KFLEV))
+      ALLOCATE(  ZQVAVE_SPLIT(IDIM_EFF,KFLEV))
+      ALLOCATE(  ZTAVE_SPLIT(IDIM_EFF,KFLEV))
+      ALLOCATE(  ZPAVE_SPLIT(IDIM_EFF,KFLEV))
+      ALLOCATE(  ZAER_SPLIT( IDIM_EFF,KFLEV,KAER))
+      ALLOCATE(  ZPIZA_EQ_SPLIT(IDIM_EFF,KFLEV,KSWB_OLD))
+      ALLOCATE(  ZCGA_EQ_SPLIT(IDIM_EFF,KFLEV,KSWB_OLD))
+      ALLOCATE(  ZTAUREL_EQ_SPLIT(IDIM_EFF,KFLEV,KSWB_OLD))
+      ALLOCATE(  ZDPRES_SPLIT(IDIM_EFF,KFLEV))
+      ALLOCATE(  ZLSM_SPLIT(IDIM_EFF))
+      ALLOCATE(  ZQSAVE_SPLIT(IDIM_EFF,KFLEV))
+      ALLOCATE(  ZTS_SPLIT(IDIM_EFF))
+      ! output pronostic       
+      ALLOCATE(  ZDTLW_SPLIT(IDIM_EFF,KFLEV))
+      ALLOCATE(  ZDTSW_SPLIT(IDIM_EFF,KFLEV))
+      ALLOCATE(  ZFLUX_TOP_GND_IRVISNIR_SPLIT(IDIM_EFF,KFLUX))
+      ALLOCATE(  ZSFSWDIR_SPLIT(IDIM_EFF,ISWB))
+      ALLOCATE(  ZSFSWDIF_SPLIT(IDIM_EFF,ISWB))
+      ALLOCATE(  ZDTLW_CS_SPLIT(IDIM_EFF,KFLEV))
+      ALLOCATE(  ZDTSW_CS_SPLIT(IDIM_EFF,KFLEV))
+      ALLOCATE(  ZFLUX_TOP_GND_IRVISNIR_CS_SPLIT(IDIM_EFF,KFLUX))
+!
+      ALLOCATE(  ZFLUX_LW_SPLIT(IDIM_EFF,2,KFLEV+1))
+      ALLOCATE(  ZFLUX_SW_DOWN_SPLIT(IDIM_EFF,KFLEV+1))
+      ALLOCATE(  ZFLUX_SW_UP_SPLIT(IDIM_EFF,KFLEV+1))
+      ALLOCATE(  ZRADLP_SPLIT(IDIM_EFF,KFLEV))
+      IF(KRAD_DIAG >=1) THEN
+        ALLOCATE(  ZNFSW_SPLIT(IDIM_EFF,KFLEV+1))
+        ALLOCATE(  ZNFLW_SPLIT(IDIM_EFF,KFLEV+1))
+      ELSE
+        ALLOCATE(  ZNFSW_SPLIT(0,0))
+        ALLOCATE(  ZNFLW_SPLIT(0,0))
+      END IF
+!
+      IF( KRAD_DIAG >= 2) THEN      
+        ALLOCATE(  ZFLUX_SW_DOWN_CS_SPLIT(IDIM_EFF,KFLEV+1))
+        ALLOCATE(  ZFLUX_SW_UP_CS_SPLIT(IDIM_EFF,KFLEV+1))
+        ALLOCATE(  ZFLUX_LW_CS_SPLIT(IDIM_EFF,2,KFLEV+1))
+        ALLOCATE(   ZNFSW_CS_SPLIT(IDIM_EFF,KFLEV+1))
+        ALLOCATE(   ZNFLW_CS_SPLIT(IDIM_EFF,KFLEV+1))
+      ELSE
+        ALLOCATE(  ZFLUX_SW_DOWN_CS_SPLIT(0,0))
+        ALLOCATE(  ZFLUX_SW_UP_CS_SPLIT(0,0))
+        ALLOCATE(  ZFLUX_LW_CS_SPLIT(0,0,0))
+        ALLOCATE(  ZNFSW_CS_SPLIT(0,0))
+        ALLOCATE(  ZNFLW_CS_SPLIT(0,0))
+      END IF
+!
+      IF( KRAD_DIAG >= 3) THEN
+        ALLOCATE(  ZPLAN_ALB_VIS_SPLIT(IDIM_EFF))
+        ALLOCATE(  ZPLAN_ALB_NIR_SPLIT(IDIM_EFF))
+        ALLOCATE(  ZPLAN_TRA_VIS_SPLIT(IDIM_EFF))
+        ALLOCATE(  ZPLAN_TRA_NIR_SPLIT(IDIM_EFF))
+        ALLOCATE(  ZPLAN_ABS_VIS_SPLIT(IDIM_EFF))
+        ALLOCATE(  ZPLAN_ABS_NIR_SPLIT(IDIM_EFF))
+      ELSE
+        ALLOCATE(  ZPLAN_ALB_VIS_SPLIT(0))
+        ALLOCATE(  ZPLAN_ALB_NIR_SPLIT(0))
+        ALLOCATE(  ZPLAN_TRA_VIS_SPLIT(0))
+        ALLOCATE(  ZPLAN_TRA_NIR_SPLIT(0))
+        ALLOCATE(  ZPLAN_ABS_VIS_SPLIT(0))
+        ALLOCATE(  ZPLAN_ABS_NIR_SPLIT(0))
+      END IF
+!
+      IF( KRAD_DIAG >= 4) THEN
+        ALLOCATE(  ZEFCL_RRTM_SPLIT(IDIM_EFF,KFLEV))
+        ALLOCATE(  ZCLSW_TOTAL_SPLIT(IDIM_EFF,KFLEV))
+        ALLOCATE(  ZTAU_TOTAL_SPLIT(IDIM_EFF,KSWB_OLD,KFLEV))
+        ALLOCATE(  ZOMEGA_TOTAL_SPLIT(IDIM_EFF,KSWB_OLD,KFLEV))
+        ALLOCATE(  ZCG_TOTAL_SPLIT(IDIM_EFF,KSWB_OLD,KFLEV))
+        ALLOCATE(  ZEFCL_LWD_SPLIT(IDIM_EFF,KFLEV))
+        ALLOCATE(  ZEFCL_LWU_SPLIT(IDIM_EFF,KFLEV))
+        ALLOCATE(  ZFLWP_SPLIT(IDIM_EFF,KFLEV))
+        ALLOCATE(  ZFIWP_SPLIT(IDIM_EFF,KFLEV))
+        ALLOCATE(  ZRADIP_SPLIT(IDIM_EFF,KFLEV))
+      ELSE
+        ALLOCATE(  ZEFCL_RRTM_SPLIT(0,0))
+        ALLOCATE(  ZCLSW_TOTAL_SPLIT(0,0))
+        ALLOCATE(  ZTAU_TOTAL_SPLIT(0,0,0))
+        ALLOCATE(  ZOMEGA_TOTAL_SPLIT(0,0,0))
+        ALLOCATE(  ZCG_TOTAL_SPLIT(0,0,0))
+        ALLOCATE(  ZEFCL_LWD_SPLIT(0,0))
+        ALLOCATE(  ZEFCL_LWU_SPLIT(0,0))
+        ALLOCATE(  ZFLWP_SPLIT(0,0))
+        ALLOCATE(  ZFIWP_SPLIT(0,0))
+        ALLOCATE(  ZRADIP_SPLIT(0,0))
+      END IF
+!
+! C2R2 coupling
+!
+      IF (SIZE (ZCCT_C2R2) > 0)  THEN
+        ALLOCATE (ZCCT_C2R2_SPLIT(IDIM_EFF,KFLEV))
+      ELSE
+        ALLOCATE (ZCCT_C2R2_SPLIT(0,0))
+      END IF
+!
+      IF (SIZE (ZCRT_C2R2) > 0)  THEN
+        ALLOCATE (ZCRT_C2R2_SPLIT(IDIM_EFF,KFLEV))
+      ELSE
+        ALLOCATE (ZCRT_C2R2_SPLIT(0,0))
+      END IF
+!
+      IF (SIZE (ZCIT_C1R3) > 0)  THEN
+        ALLOCATE (ZCIT_C1R3_SPLIT(IDIM_EFF,KFLEV))
+      ELSE
+        ALLOCATE (ZCIT_C1R3_SPLIT(0,0))
+      END IF
+!
+! LIMA coupling
+!
+      IF( CCLOUD == 'LIMA' ) THEN
+          ALLOCATE (ZCCT_LIMA_SPLIT(IDIM_EFF,KFLEV))
+          ALLOCATE (ZCRT_LIMA_SPLIT(IDIM_EFF,KFLEV))
+          ALLOCATE (ZCIT_LIMA_SPLIT(IDIM_EFF,KFLEV))
+      END IF
+    END IF
+! 
+! fill the split arrays with their values taken from the full arrays 
+!
+    IBEG = IDIM-IDIM_RESIDUE+1
+    IEND = IBEG+IDIM_EFF-1
+!
+    ZALBP_SPLIT(:,:) = ZALBP( IBEG:IEND ,:)
+    ZALBD_SPLIT(:,:) = ZALBD( IBEG:IEND ,:)
+    ZEMIS_SPLIT(:) = ZEMIS ( IBEG:IEND,1 )
+    ZEMIW_SPLIT(:) = ZEMIW ( IBEG:IEND,1 )
+    ZRMU0_SPLIT(:)    = ZRMU0 ( IBEG:IEND )
+    ZLAT_SPLIT(:)    = ZLAT ( IBEG:IEND )
+    ZLON_SPLIT(:)    = ZLON ( IBEG:IEND )
+    ZCFAVE_SPLIT(:,:) = ZCFAVE( IBEG:IEND ,:)
+    ZO3AVE_SPLIT(:,:) = ZO3AVE( IBEG:IEND ,:)
+    ZT_HL_SPLIT(:,:)    = ZT_HL( IBEG:IEND ,:)
+    ZPRES_HL_SPLIT(:,:) = ZPRES_HL( IBEG:IEND ,:)
+    ZQLAVE_SPLIT(:,:) = ZQLAVE( IBEG:IEND , :)
+    ZDZ_SPLIT(:,:) = ZDZ( IBEG:IEND , :)
+    ZQIAVE_SPLIT(:,:) = ZQIAVE( IBEG:IEND ,:)
+    ZQRAVE_SPLIT (:,:) = ZQRAVE (IBEG:IEND ,:)
+    ZQLWC_SPLIT(:,:) = ZQLWC( IBEG:IEND , :)
+    ZQIWC_SPLIT(:,:) = ZQIWC( IBEG:IEND ,:)
+    ZQRWC_SPLIT(:,:) = ZQRWC (IBEG:IEND ,:)
+    ZQVAVE_SPLIT(:,:) = ZQVAVE( IBEG:IEND ,:)
+    ZTAVE_SPLIT(:,:)  = ZTAVE ( IBEG:IEND ,:)
+    ZPAVE_SPLIT(:,:)  = ZPAVE ( IBEG:IEND ,:)
+    ZAER_SPLIT (:,:,:)  = ZAER  ( IBEG:IEND ,:,:)
+    IF(CAOP=='EXPL')THEN
+       ZPIZA_EQ_SPLIT(:,:,:)=ZPIZA_EQ(IBEG:IEND,:,:)
+       ZCGA_EQ_SPLIT(:,:,:)=ZCGA_EQ(IBEG:IEND,:,:)
+       ZTAUREL_EQ_SPLIT(:,:,:)=ZTAUREL_EQ(IBEG:IEND,:,:)
+    ENDIF
+    ZDPRES_SPLIT(:,:)  = ZDPRES (IBEG:IEND ,:)
+    ZLSM_SPLIT (:)    = ZLSM (IBEG:IEND)
+    ZQSAVE_SPLIT (:,:) = ZQSAVE (IBEG:IEND ,:)
+    ZTS_SPLIT (:) = ZTS (IBEG:IEND)
+!
+!  CALL the ECMWF radiation with the split array
+!
+  IF (CCLOUD == 'LIMA') THEN
+! LIMA concentrations
+     ZCCT_LIMA_SPLIT(:,:) = ZCCT_LIMA (IBEG:IEND ,:)
+     ZCRT_LIMA_SPLIT(:,:) = ZCRT_LIMA (IBEG:IEND ,:)
+     ZCIT_LIMA_SPLIT(:,:) = ZCIT_LIMA (IBEG:IEND ,:)
+     
+   IF (CRAD == "ECMW") THEN  
+!
+        CALL ECMWF_RADIATION_VERS2  ( IDIM_EFF , KFLEV, KRAD_DIAG, KAER,               &
+                ZDZ_SPLIT,HEFRADL,HEFRADI,HOPWSW, HOPISW, HOPWLW, HOPILW,PFUDG,          &
+                ZRII0, ZAER_SPLIT , ZALBD_SPLIT, ZALBP_SPLIT, ZPRES_HL_SPLIT,            &
+                ZPAVE_SPLIT,PCCO2, ZCFAVE_SPLIT, ZDPRES_SPLIT, ZEMIS_SPLIT, ZEMIW_SPLIT, &
+                ZLSM_SPLIT, ZRMU0_SPLIT,ZO3AVE_SPLIT , ZQVAVE_SPLIT, ZQIAVE_SPLIT ,ZQIWC_SPLIT,      &
+                ZQLAVE_SPLIT,ZQLWC_SPLIT,ZQSAVE_SPLIT, ZQRAVE_SPLIT,ZQRWC_SPLIT,  ZT_HL_SPLIT,      &
+                ZTAVE_SPLIT, ZTS_SPLIT, ZCCT_LIMA_SPLIT,ZCRT_LIMA_SPLIT,ZCIT_LIMA_SPLIT, &
+                ZNFLW_CS_SPLIT, ZNFLW_SPLIT, ZNFSW_CS_SPLIT,ZNFSW_SPLIT,                 &
+                ZDTLW_SPLIT, ZDTSW_SPLIT, ZFLUX_TOP_GND_IRVISNIR_SPLIT,                  &
+                ZSFSWDIR_SPLIT, ZSFSWDIF_SPLIT,                                          &
+                ZFLUX_SW_DOWN_SPLIT, ZFLUX_SW_UP_SPLIT, ZFLUX_LW_SPLIT ,                 &
+                ZDTLW_CS_SPLIT, ZDTSW_CS_SPLIT, ZFLUX_TOP_GND_IRVISNIR_CS_SPLIT,         &
+                ZFLUX_SW_DOWN_CS_SPLIT, ZFLUX_SW_UP_CS_SPLIT, ZFLUX_LW_CS_SPLIT,         &
+                ZPLAN_ALB_VIS_SPLIT,ZPLAN_ALB_NIR_SPLIT, ZPLAN_TRA_VIS_SPLIT,            &
+                ZPLAN_TRA_NIR_SPLIT, ZPLAN_ABS_VIS_SPLIT, ZPLAN_ABS_NIR_SPLIT,           &
+                ZEFCL_LWD_SPLIT, ZEFCL_LWU_SPLIT, ZFLWP_SPLIT,ZFIWP_SPLIT,               &
+                ZRADLP_SPLIT,ZRADIP_SPLIT,ZEFCL_RRTM_SPLIT, ZCLSW_TOTAL_SPLIT,           &
+                ZTAU_TOTAL_SPLIT,ZOMEGA_TOTAL_SPLIT, ZCG_TOTAL_SPLIT,                    &
+                GAOP,ZPIZA_EQ_SPLIT,ZCGA_EQ_SPLIT,ZTAUREL_EQ_SPLIT  )
+                
+   ELSE IF (CRAD == "ECRA") THEN  
+        CALL ECRAD_INTERFACE  ( IDIM_EFF ,KFLEV, KRAD_DIAG, KAER,                   &      
+            ZDZ,HEFRADL,HEFRADI,HOPWSW, HOPISW, HOPWLW, HOPILW,PFUDG,      &
+            ZRII0, ZAER_SPLIT , ZALBD_SPLIT, ZALBP_SPLIT, ZPRES_HL_SPLIT, ZPAVE_SPLIT,               &
+            PCCO2, ZCFAVE_SPLIT, ZDPRES_SPLIT, ZEMIS_SPLIT, ZEMIW_SPLIT, ZLSM_SPLIT, ZRMU0_SPLIT,          &
+            ZO3AVE_SPLIT , ZQVAVE_SPLIT, ZQIAVE_SPLIT ,ZQIWC_SPLIT,ZQLAVE_SPLIT,ZQLWC_SPLIT, &
+            ZQSAVE_SPLIT, ZQRAVE_SPLIT,  ZQRWC_SPLIT,  &
+            ZT_HL_SPLIT,ZTAVE_SPLIT, ZTS_SPLIT, ZCCT_LIMA_SPLIT, &
+            ZCRT_LIMA_SPLIT, ZCIT_LIMA_SPLIT,         &
+            ZNFLW_SPLIT, ZNFSW_SPLIT, ZNFLW_CS_SPLIT, ZNFSW_CS_SPLIT,                           &
+            ZDTLW_SPLIT, ZDTSW_SPLIT, ZFLUX_TOP_GND_IRVISNIR_SPLIT,                      &
+            ZSFSWDIR_SPLIT, ZSFSWDIF_SPLIT,                                        &
+            ZFLUX_SW_DOWN_SPLIT, ZFLUX_SW_UP_SPLIT, ZFLUX_LW_SPLIT ,                     &
+            ZDTLW_CS_SPLIT, ZDTSW_CS_SPLIT, ZFLUX_TOP_GND_IRVISNIR_CS_SPLIT,             &
+            ZFLUX_SW_DOWN_CS_SPLIT, ZFLUX_SW_UP_CS_SPLIT, ZFLUX_LW_CS_SPLIT,             &           
+            ZPLAN_ALB_VIS_SPLIT,ZPLAN_ALB_NIR_SPLIT, ZPLAN_TRA_VIS_SPLIT, ZPLAN_TRA_NIR_SPLIT, &
+            ZPLAN_ABS_VIS_SPLIT, ZPLAN_ABS_NIR_SPLIT,ZEFCL_LWD_SPLIT, ZEFCL_LWU_SPLIT,         &
+            ZFLWP_SPLIT, ZFIWP_SPLIT,ZRADLP_SPLIT, ZRADIP_SPLIT, &
+            ZEFCL_RRTM_SPLIT,  ZCLSW_TOTAL_SPLIT,  ZTAU_TOTAL_SPLIT,  &
+            ZOMEGA_TOTAL_SPLIT,ZCG_TOTAL_SPLIT,                                    &
+            GAOP, ZPIZA_EQ_SPLIT,ZCGA_EQ_SPLIT,ZTAUREL_EQ_SPLIT,ZLAT_SPLIT,ZLON_SPLIT    )
+  END IF              
+  ELSE
+! C2R2 concentrations
+    IF (SIZE (ZCCT_C2R2) > 0)  ZCCT_C2R2_SPLIT(:,:) = ZCCT_C2R2 (IBEG:IEND ,:)
+    IF (SIZE (ZCRT_C2R2) > 0)  ZCRT_C2R2_SPLIT(:,:) = ZCRT_C2R2 (IBEG:IEND ,:)  
+    IF (SIZE (ZCIT_C1R3) > 0)  ZCIT_C1R3_SPLIT(:,:) = ZCIT_C1R3 (IBEG:IEND ,:)
+    IF (CRAD == "ECMW") THEN   
+        CALL ECMWF_RADIATION_VERS2  ( IDIM_EFF , KFLEV, KRAD_DIAG, KAER,              &    
+                ZDZ_SPLIT,HEFRADL,HEFRADI,HOPWSW, HOPISW, HOPWLW, HOPILW,PFUDG,                    &
+                ZRII0, ZAER_SPLIT , ZALBD_SPLIT, ZALBP_SPLIT, ZPRES_HL_SPLIT,            &
+                ZPAVE_SPLIT,PCCO2, ZCFAVE_SPLIT, ZDPRES_SPLIT, ZEMIS_SPLIT, ZEMIW_SPLIT, &
+                ZLSM_SPLIT, ZRMU0_SPLIT,ZO3AVE_SPLIT , ZQVAVE_SPLIT, ZQIAVE_SPLIT ,ZQIWC_SPLIT,      & 
+                ZQLAVE_SPLIT,ZQLWC_SPLIT,ZQSAVE_SPLIT, ZQRAVE_SPLIT,ZQRWC_SPLIT,  ZT_HL_SPLIT,      &
+                ZTAVE_SPLIT, ZTS_SPLIT, ZCCT_C2R2_SPLIT,ZCRT_C2R2_SPLIT,ZCIT_C1R3_SPLIT, & 
+                ZNFLW_CS_SPLIT, ZNFLW_SPLIT, ZNFSW_CS_SPLIT,ZNFSW_SPLIT,                 &          
+                ZDTLW_SPLIT, ZDTSW_SPLIT, ZFLUX_TOP_GND_IRVISNIR_SPLIT,                  &
+                ZSFSWDIR_SPLIT, ZSFSWDIF_SPLIT,                                          &
+                ZFLUX_SW_DOWN_SPLIT, ZFLUX_SW_UP_SPLIT, ZFLUX_LW_SPLIT ,                 &
+                ZDTLW_CS_SPLIT, ZDTSW_CS_SPLIT, ZFLUX_TOP_GND_IRVISNIR_CS_SPLIT,         &
+                ZFLUX_SW_DOWN_CS_SPLIT, ZFLUX_SW_UP_CS_SPLIT, ZFLUX_LW_CS_SPLIT,         & 
+                ZPLAN_ALB_VIS_SPLIT,ZPLAN_ALB_NIR_SPLIT, ZPLAN_TRA_VIS_SPLIT,            &
+                ZPLAN_TRA_NIR_SPLIT, ZPLAN_ABS_VIS_SPLIT, ZPLAN_ABS_NIR_SPLIT,           &
+                ZEFCL_LWD_SPLIT, ZEFCL_LWU_SPLIT, ZFLWP_SPLIT,ZFIWP_SPLIT,               &
+                ZRADLP_SPLIT,ZRADIP_SPLIT,ZEFCL_RRTM_SPLIT, ZCLSW_TOTAL_SPLIT,           &
+                ZTAU_TOTAL_SPLIT,ZOMEGA_TOTAL_SPLIT, ZCG_TOTAL_SPLIT,                    &
+                GAOP,ZPIZA_EQ_SPLIT,ZCGA_EQ_SPLIT,ZTAUREL_EQ_SPLIT  )
+         
+    ELSE IF (CRAD == "ECRA") THEN  
+       CALL ECRAD_INTERFACE  ( IDIM_EFF ,KFLEV, KRAD_DIAG, KAER,                   &      
+            ZDZ_SPLIT,HEFRADL,HEFRADI,HOPWSW, HOPISW, HOPWLW, HOPILW,PFUDG,      &
+            ZRII0, ZAER_SPLIT , ZALBD_SPLIT, ZALBP_SPLIT, ZPRES_HL_SPLIT, ZPAVE_SPLIT,               &
+            PCCO2, ZCFAVE_SPLIT, ZDPRES_SPLIT, ZEMIS_SPLIT, ZEMIW_SPLIT, ZLSM_SPLIT, ZRMU0_SPLIT,          &
+            ZO3AVE_SPLIT , ZQVAVE_SPLIT, ZQIAVE_SPLIT ,ZQIWC_SPLIT,ZQLAVE_SPLIT,ZQLWC_SPLIT, &
+            ZQSAVE_SPLIT, ZQRAVE_SPLIT,  ZQRWC_SPLIT,  &
+            ZT_HL_SPLIT,ZTAVE_SPLIT, ZTS_SPLIT, ZCCT_C2R2_SPLIT, &
+            ZCRT_C2R2_SPLIT, ZCIT_C1R3_SPLIT,         &
+            ZNFLW_SPLIT, ZNFSW_SPLIT, ZNFLW_CS_SPLIT, ZNFSW_CS_SPLIT,                           &
+            ZDTLW_SPLIT, ZDTSW_SPLIT, ZFLUX_TOP_GND_IRVISNIR_SPLIT,                      &
+            ZSFSWDIR_SPLIT, ZSFSWDIF_SPLIT,                                        &
+            ZFLUX_SW_DOWN_SPLIT, ZFLUX_SW_UP_SPLIT, ZFLUX_LW_SPLIT ,                     &
+            ZDTLW_CS_SPLIT, ZDTSW_CS_SPLIT, ZFLUX_TOP_GND_IRVISNIR_CS_SPLIT,             &
+            ZFLUX_SW_DOWN_CS_SPLIT, ZFLUX_SW_UP_CS_SPLIT, ZFLUX_LW_CS_SPLIT,             &           
+            ZPLAN_ALB_VIS_SPLIT,ZPLAN_ALB_NIR_SPLIT, ZPLAN_TRA_VIS_SPLIT, ZPLAN_TRA_NIR_SPLIT, &
+            ZPLAN_ABS_VIS_SPLIT, ZPLAN_ABS_NIR_SPLIT,ZEFCL_LWD_SPLIT, ZEFCL_LWU_SPLIT,         &
+            ZFLWP_SPLIT, ZFIWP_SPLIT,ZRADLP_SPLIT, ZRADIP_SPLIT, &
+            ZEFCL_RRTM_SPLIT,  ZCLSW_TOTAL_SPLIT,  ZTAU_TOTAL_SPLIT,  &
+            ZOMEGA_TOTAL_SPLIT,ZCG_TOTAL_SPLIT,                                    &
+            GAOP, ZPIZA_EQ_SPLIT,ZCGA_EQ_SPLIT,ZTAUREL_EQ_SPLIT,ZLAT_SPLIT,ZLON_SPLIT    )
+    END IF                   
+    END IF 
+!
+! fill the full output arrays with the split arrays
+!
+    ZDTLW( IBEG:IEND ,:)  =  ZDTLW_SPLIT(:,:)  
+    ZDTSW( IBEG:IEND ,:)  =  ZDTSW_SPLIT(:,:) 
+    ZFLUX_TOP_GND_IRVISNIR( IBEG:IEND ,:)=  ZFLUX_TOP_GND_IRVISNIR_SPLIT(:,:) 
+    ZSFSWDIR (IBEG:IEND,:)  = ZSFSWDIR_SPLIT(:,:)
+    ZSFSWDIF (IBEG:IEND,:)  = ZSFSWDIF_SPLIT(:,:)
+!
+    ZDTLW_CS( IBEG:IEND ,:) =  ZDTLW_CS_SPLIT(:,:)
+    ZDTSW_CS( IBEG:IEND ,:) =  ZDTSW_CS_SPLIT(:,:)
+    ZFLUX_TOP_GND_IRVISNIR_CS( IBEG:IEND ,:) =                     &
+         ZFLUX_TOP_GND_IRVISNIR_CS_SPLIT(:,:)
+    ZFLUX_LW( IBEG:IEND ,:,:)    =  ZFLUX_LW_SPLIT(:,:,:) 
+    ZFLUX_SW_DOWN( IBEG:IEND ,:) =  ZFLUX_SW_DOWN_SPLIT(:,:)
+    ZFLUX_SW_UP( IBEG:IEND ,:)   =  ZFLUX_SW_UP_SPLIT(:,:)
+    ZRADLP( IBEG:IEND ,:) = ZRADLP_SPLIT(:,:)
+    IF ( tpfile%lopened ) THEN
+      IF( KRAD_DIAG >= 1) THEN
+        ZNFLW(IBEG:IEND ,:)= ZNFLW_SPLIT(:,:)
+        ZNFSW(IBEG:IEND ,:)= ZNFSW_SPLIT(:,:)
+        IF( KRAD_DIAG >= 2) THEN
+          ZFLUX_SW_DOWN_CS( IBEG:IEND ,:) = ZFLUX_SW_DOWN_CS_SPLIT(:,:)
+          ZFLUX_SW_UP_CS( IBEG:IEND ,:)   = ZFLUX_SW_UP_CS_SPLIT(:,:)
+          ZFLUX_LW_CS( IBEG:IEND ,:,:)    = ZFLUX_LW_CS_SPLIT(:,:,:)
+          ZNFLW_CS(IBEG:IEND ,:)= ZNFLW_CS_SPLIT(:,:)
+          ZNFSW_CS(IBEG:IEND ,:)= ZNFSW_CS_SPLIT(:,:)
+          IF( KRAD_DIAG >= 3) THEN
+            ZPLAN_ALB_VIS( IBEG:IEND ) = ZPLAN_ALB_VIS_SPLIT(:)
+            ZPLAN_ALB_NIR( IBEG:IEND ) = ZPLAN_ALB_NIR_SPLIT(:)
+            ZPLAN_TRA_VIS( IBEG:IEND ) = ZPLAN_TRA_VIS_SPLIT(:)
+            ZPLAN_TRA_NIR( IBEG:IEND ) = ZPLAN_TRA_NIR_SPLIT(:)
+            ZPLAN_ABS_VIS( IBEG:IEND ) = ZPLAN_ABS_VIS_SPLIT(:)
+            ZPLAN_ABS_NIR( IBEG:IEND ) = ZPLAN_ABS_NIR_SPLIT(:)          
+            IF( KRAD_DIAG >= 4) THEN
+              ZEFCL_LWD( IBEG:IEND ,:) = ZEFCL_LWD_SPLIT(:,:)
+              ZEFCL_LWU( IBEG:IEND ,:)   = ZEFCL_LWU_SPLIT(:,:)
+              ZFLWP( IBEG:IEND ,:) = ZFLWP_SPLIT(:,:)
+              ZFIWP( IBEG:IEND ,:) = ZFIWP_SPLIT(:,:)
+              ZRADIP( IBEG:IEND ,:) = ZRADIP_SPLIT(:,:)
+              ZEFCL_RRTM( IBEG:IEND ,:) = ZEFCL_RRTM_SPLIT(:,:)
+              ZCLSW_TOTAL( IBEG:IEND ,:) = ZCLSW_TOTAL_SPLIT(:,:)
+              ZTAU_TOTAL( IBEG:IEND ,:,:)  = ZTAU_TOTAL_SPLIT(:,:,:)
+              ZOMEGA_TOTAL( IBEG:IEND ,:,:)= ZOMEGA_TOTAL_SPLIT(:,:,:)
+              ZCG_TOTAL( IBEG:IEND ,:,:)   = ZCG_TOTAL_SPLIT(:,:,:)                
+            END IF
+          END IF
+        END IF
+      END IF
+    END IF
+!
+    IDIM_RESIDUE = IDIM_RESIDUE - IDIM_EFF
+!
+! desallocation of the split arrays
+!
+    IF( JI_SPLIT >= INUM_CALL-1 ) THEN
+      DEALLOCATE(  ZALBP_SPLIT )
+      DEALLOCATE(  ZALBD_SPLIT )  
+      DEALLOCATE(  ZEMIS_SPLIT  )
+      DEALLOCATE(  ZEMIW_SPLIT  )
+      DEALLOCATE(  ZLAT_SPLIT  )
+      DEALLOCATE(  ZLON_SPLIT  )
+      DEALLOCATE(  ZRMU0_SPLIT      )
+      DEALLOCATE(  ZCFAVE_SPLIT     )
+      DEALLOCATE(  ZO3AVE_SPLIT     )
+      DEALLOCATE(  ZT_HL_SPLIT      )
+      DEALLOCATE(  ZPRES_HL_SPLIT   )
+      DEALLOCATE(  ZDZ_SPLIT     )
+      DEALLOCATE(  ZQLAVE_SPLIT     )
+      DEALLOCATE(  ZQIAVE_SPLIT     )
+      DEALLOCATE(  ZQVAVE_SPLIT     )
+      DEALLOCATE(  ZTAVE_SPLIT      )
+      DEALLOCATE(  ZPAVE_SPLIT      )
+      DEALLOCATE(  ZAER_SPLIT       )
+      DEALLOCATE(  ZDPRES_SPLIT     )
+      DEALLOCATE(  ZLSM_SPLIT       )
+      DEALLOCATE(  ZQSAVE_SPLIT     )
+      DEALLOCATE(  ZQRAVE_SPLIT  )
+      DEALLOCATE(  ZQLWC_SPLIT     )
+      DEALLOCATE(  ZQRWC_SPLIT     )
+      DEALLOCATE(  ZQIWC_SPLIT     )
+      IF ( ALLOCATED( ZCCT_C2R2_SPLIT ) ) DEALLOCATE(   ZCCT_C2R2_SPLIT  )
+      IF ( ALLOCATED( ZCRT_C2R2_SPLIT ) ) DEALLOCATE(   ZCRT_C2R2_SPLIT  )
+      IF ( ALLOCATED( ZCIT_C1R3_SPLIT ) ) DEALLOCATE(   ZCIT_C1R3_SPLIT  )
+      IF ( ALLOCATED( ZCCT_LIMA_SPLIT ) ) DEALLOCATE(   ZCCT_LIMA_SPLIT  )
+      IF ( ALLOCATED( ZCRT_LIMA_SPLIT ) ) DEALLOCATE(   ZCRT_LIMA_SPLIT  )
+      IF ( ALLOCATED( ZCIT_LIMA_SPLIT ) ) DEALLOCATE(   ZCIT_LIMA_SPLIT  )
+      DEALLOCATE(  ZTS_SPLIT    )
+      DEALLOCATE(   ZNFLW_CS_SPLIT)
+      DEALLOCATE(   ZNFLW_SPLIT)
+      DEALLOCATE(   ZNFSW_CS_SPLIT)
+      DEALLOCATE(   ZNFSW_SPLIT)
+      DEALLOCATE(ZDTLW_SPLIT)
+      DEALLOCATE(ZDTSW_SPLIT)
+      DEALLOCATE(ZFLUX_TOP_GND_IRVISNIR_SPLIT)
+      DEALLOCATE(ZSFSWDIR_SPLIT)
+      DEALLOCATE(ZSFSWDIF_SPLIT)
+      DEALLOCATE(ZFLUX_SW_DOWN_SPLIT)
+      DEALLOCATE(ZFLUX_SW_UP_SPLIT)
+      DEALLOCATE(ZFLUX_LW_SPLIT)
+      DEALLOCATE(ZDTLW_CS_SPLIT)
+      DEALLOCATE(ZDTSW_CS_SPLIT)
+      DEALLOCATE(ZFLUX_TOP_GND_IRVISNIR_CS_SPLIT)
+      DEALLOCATE(ZPLAN_ALB_VIS_SPLIT)
+      DEALLOCATE(ZPLAN_ALB_NIR_SPLIT)
+      DEALLOCATE(ZPLAN_TRA_VIS_SPLIT)
+      DEALLOCATE(ZPLAN_TRA_NIR_SPLIT)
+      DEALLOCATE(ZPLAN_ABS_VIS_SPLIT)
+      DEALLOCATE(ZPLAN_ABS_NIR_SPLIT)
+      DEALLOCATE(ZEFCL_LWD_SPLIT)
+      DEALLOCATE(ZEFCL_LWU_SPLIT)
+      DEALLOCATE(ZFLWP_SPLIT)
+      DEALLOCATE(ZRADLP_SPLIT)
+      DEALLOCATE(ZRADIP_SPLIT)
+      DEALLOCATE(ZFIWP_SPLIT)
+      DEALLOCATE(ZEFCL_RRTM_SPLIT)
+      DEALLOCATE(ZCLSW_TOTAL_SPLIT)
+      DEALLOCATE(ZTAU_TOTAL_SPLIT)
+      DEALLOCATE(ZOMEGA_TOTAL_SPLIT)
+      DEALLOCATE(ZCG_TOTAL_SPLIT)
+      DEALLOCATE(ZFLUX_SW_DOWN_CS_SPLIT)
+      DEALLOCATE(ZFLUX_SW_UP_CS_SPLIT)
+      DEALLOCATE(ZFLUX_LW_CS_SPLIT)
+      DEALLOCATE(ZPIZA_EQ_SPLIT)
+      DEALLOCATE(ZCGA_EQ_SPLIT)
+      DEALLOCATE(ZTAUREL_EQ_SPLIT)
+    END IF
+  END DO
+END IF
+
+!
+DEALLOCATE(ZTAVE)
+DEALLOCATE(ZPAVE)
+DEALLOCATE(ZQVAVE)
+DEALLOCATE(ZQLAVE)
+DEALLOCATE(ZDZ)
+DEALLOCATE(ZQIAVE)
+DEALLOCATE(ZCFAVE)
+DEALLOCATE(ZPRES_HL)
+DEALLOCATE(ZT_HL)
+DEALLOCATE(ZRMU0) 
+DEALLOCATE(ZLSM)
+DEALLOCATE(ZQSAVE)
+DEALLOCATE(ZAER)
+DEALLOCATE(ZPIZA_EQ)
+DEALLOCATE(ZCGA_EQ)
+DEALLOCATE(ZTAUREL_EQ)
+DEALLOCATE(ZDPRES)
+DEALLOCATE(ZCCT_C2R2)
+DEALLOCATE(ZCRT_C2R2)
+DEALLOCATE(ZCIT_C1R3)
+DEALLOCATE(ZLAT)
+DEALLOCATE(ZLON)
+IF (CCLOUD == 'LIMA') THEN 
+  DEALLOCATE(ZCCT_LIMA)
+  DEALLOCATE(ZCRT_LIMA)
+  DEALLOCATE(ZCIT_LIMA)
+END IF
+!
+DEALLOCATE(ZTS)
+DEALLOCATE(ZALBP)
+DEALLOCATE(ZALBD)
+DEALLOCATE(ZEMIS)
+DEALLOCATE(ZEMIW)
+DEALLOCATE(ZQRAVE)
+DEALLOCATE(ZQLWC)
+DEALLOCATE(ZQIWC)
+DEALLOCATE(ZQRWC)
+DEALLOCATE(ICLEAR_2D_TM1)
+!
+!*       5.6   UNCOMPRESSES THE OUTPUT FIELD IN CASE OF 
+!                      CLEAR-SKY APPROXIMATION
+!
+IF(OCLEAR_SKY .OR. OCLOUD_ONLY) THEN
+  ALLOCATE(ZWORK1(ICLOUD))
+  ALLOCATE(ZWORK2(ICLOUD+KFLEV)) !       allocation for the KFLEV levels of 
+  ALLOCATE(ZWORK4(KFLEV,KDLON))
+  ZWORK2(:) = PACK( TRANSPOSE(ZDTLW(:,:)),MASK=.TRUE. )
+!
+  DO JK=1,KFLEV
+    ZWORK4(JK,:) = ZWORK2(ICLOUD+JK)
+  END DO
+  ZWORK1(1:ICLOUD) = ZWORK2(1:ICLOUD)
+  ZZDTLW(:,:) = TRANSPOSE( UNPACK( ZWORK1(:),MASK=GCLOUDT(:,:)   &
+       ,FIELD=ZWORK4(:,:) ) )
+  !
+  ZWORK2(:) = PACK( TRANSPOSE(ZDTSW(:,:)),MASK=.TRUE. )
+  DO JK=1,KFLEV
+    ZWORK4(JK,:) = ZWORK2(ICLOUD+JK)
+  END DO
+  ZWORK1(1:ICLOUD) = ZWORK2(1:ICLOUD)
+  ZZDTSW(:,:) = TRANSPOSE( UNPACK( ZWORK1(:),MASK=GCLOUDT(:,:)   &
+       ,FIELD=ZWORK4(:,:) ) )
+  !
+  DEALLOCATE(ZWORK1)
+  DEALLOCATE(ZWORK2)
+  DEALLOCATE(ZWORK4)
+  !
+  ZZTGVISC   = ZFLUX_TOP_GND_IRVISNIR(ICLOUD_COL+1,5)
+  !
+  ZZTGVIS(:) = UNPACK( ZFLUX_TOP_GND_IRVISNIR(:,5),MASK=.NOT.GCLEAR_2D(:), &
+       FIELD=ZZTGVISC  )
+  ZZTGNIRC   = ZFLUX_TOP_GND_IRVISNIR(ICLOUD_COL+1,6)
+  !
+  ZZTGNIR(:) = UNPACK( ZFLUX_TOP_GND_IRVISNIR(:,6),MASK=.NOT.GCLEAR_2D(:), &
+       FIELD=ZZTGNIRC )
+  ZZTGIRC    = ZFLUX_TOP_GND_IRVISNIR(ICLOUD_COL+1,4)
+  !
+  ZZTGIR (:) = UNPACK( ZFLUX_TOP_GND_IRVISNIR(:,4),MASK=.NOT.GCLEAR_2D(:), &
+       FIELD=ZZTGIRC  )
+  !
+  DO JSWB=1,ISWB
+    ZZSFSWDIRC(JSWB) = ZSFSWDIR (ICLOUD_COL+1,JSWB)
+    !
+    ZZSFSWDIR(:,JSWB) =  UNPACK(ZSFSWDIR (:,JSWB),MASK=.NOT.GCLEAR_2D(:), &
+         FIELD= ZZSFSWDIRC(JSWB)  ) 
+    !
+    ZZSFSWDIFC(JSWB) = ZSFSWDIF (ICLOUD_COL+1,JSWB)
+    !
+    ZZSFSWDIF(:,JSWB) =  UNPACK(ZSFSWDIF (:,JSWB),MASK=.NOT.GCLEAR_2D(:), &
+         FIELD= ZZSFSWDIFC(JSWB)  )
+  END DO
+!
+!  No cloud case
+!
+  IF( GNOCL ) THEN
+          IF (SIZE(ZZDTLW,1)>1) THEN
+             ZZDTLW(1,:)= ZZDTLW(2,:)
+          ENDIF
+          IF (SIZE(ZZDTSW,1)>1) THEN
+             ZZDTSW(1,:)= ZZDTSW(2,:)
+          ENDIF
+    ZZTGVIS(1) = ZZTGVISC
+    ZZTGNIR(1) = ZZTGNIRC
+    ZZTGIR(1)  = ZZTGIRC
+    ZZSFSWDIR(1,:) =  ZZSFSWDIRC(:)
+    ZZSFSWDIF(1,:) =  ZZSFSWDIFC(:)
+  END IF
+ELSE
+  ZZDTLW(:,:) = ZDTLW(:,:)
+  ZZDTSW(:,:) = ZDTSW(:,:)
+  ZZTGVIS(:)  = ZFLUX_TOP_GND_IRVISNIR(:,5)
+  ZZTGNIR(:)  = ZFLUX_TOP_GND_IRVISNIR(:,6)
+  ZZTGIR(:)   = ZFLUX_TOP_GND_IRVISNIR(:,4)
+  ZZSFSWDIR(:,:) =  ZSFSWDIR(:,:)
+  ZZSFSWDIF(:,:) =  ZSFSWDIF(:,:) 
+END IF
+!
+DEALLOCATE(ZDTLW)
+DEALLOCATE(ZDTSW)
+DEALLOCATE(ZSFSWDIR)
+DEALLOCATE(ZSFSWDIF)
+!
+!--------------------------------------------------------------------------------------------
+!
+!*       6.    COMPUTES THE RADIATIVE SOURCES AND THE DOWNWARD SURFACE FLUXES in 2D horizontal 
+!              ------------------------------------------------------------------------------
+!
+!  Computes the SW and LW radiative tendencies
+!  note : tendencies in K/s for MNH (from K/day)
+!
+ZDTRAD_LW(:,:,:)=0.0
+ZDTRAD_SW(:,:,:)=0.0
+DO JK=IKB,IKE
+  JKRAD= JK-JPVEXT
+  DO JJ=IJB,IJE
+    DO JI=IIB,IIE
+      IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+      ZDTRAD_LW(JI,JJ,JK) = ZZDTLW(IIJ,JKRAD)/XDAY  ! XDAY from  modd_cst (day duration in s)
+      ZDTRAD_SW(JI,JJ,JK) = ZZDTSW(IIJ,JKRAD)/XDAY      
+    END DO
+  END DO
+END DO
+!
+!  Computes the downward SW and LW surface fluxes + diffuse and direct contribution
+!
+ZLWD(:,:)=0.
+ZSWDDIR(:,:,:)=0.
+ZSWDDIF(:,:,:)=0.
+!
+DO JJ=IJB,IJE
+  DO JI=IIB,IIE
+    IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+    ZLWD(JI,JJ) = ZZTGIR(IIJ)
+    ZSWDDIR(JI,JJ,:) = ZZSFSWDIR (IIJ,:)
+    ZSWDDIF(JI,JJ,:) = ZZSFSWDIF (IIJ,:)
+  END DO
+END DO
+!
+!final  THETA_radiative tendency and surface fluxes 
+!
+IF(OCLOUD_ONLY) THEN
+
+  GCLOUD_SURF(:,:) = .FALSE.
+  DO JJ=IJB,IJE
+    DO JI=IIB,IIE
+        IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+        GCLOUD_SURF(JI,JJ) = GCLOUD(IIJ,1)
+    END DO
+  END DO
+ 
+  ZWORKL(:,:) = GCLOUD_SURF(:,:)
+
+  DO JK = IKB,IKE
+    WHERE( ZWORKL(:,:) )
+      PDTHRAD(:,:,JK) = (ZDTRAD_LW(:,:,JK)+ZDTRAD_SW(:,:,JK))/ZEXNT(:,:,JK)
+    ENDWHERE
+  END DO
+  !
+  WHERE( ZWORKL(:,:) )
+    PSRFLWD(:,:) = ZLWD(:,:)
+  ENDWHERE
+  DO JSWB=1,ISWB
+    WHERE( ZWORKL(:,:) )
+      PSRFSWD_DIR (:,:,JSWB) = ZSWDDIR(:,:,JSWB)
+      PSRFSWD_DIF (:,:,JSWB) = ZSWDDIF(:,:,JSWB)
+    END WHERE
+  END DO
+ELSE
+  PDTHRAD(:,:,:) = (ZDTRAD_LW(:,:,:)+ZDTRAD_SW(:,:,:))/ZEXNT(:,:,:)  ! tendency in potential temperature
+  PDTHRADSW(:,:,:) = ZDTRAD_SW(:,:,:)/ZEXNT(:,:,:)
+  PDTHRADLW(:,:,:) = ZDTRAD_LW(:,:,:)/ZEXNT(:,:,:)
+  PSRFLWD(:,:) = ZLWD(:,:)
+  DO JSWB=1,ISWB
+    PSRFSWD_DIR (:,:,JSWB) = ZSWDDIR(:,:,JSWB)
+    PSRFSWD_DIF (:,:,JSWB) = ZSWDDIF(:,:,JSWB)
+  END DO
+!
+!sw and lw fluxes 
+!
+  DO JK=IKB,IKE
+   JKRAD = JK - JPVEXT
+   DO JJ=IJB,IJE
+    DO JI=IIB,IIE
+          IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+          PSWU(JI,JJ,JK) = ZFLUX_SW_UP(IIJ,JKRAD)
+          PSWD(JI,JJ,JK) = ZFLUX_SW_DOWN(IIJ,JKRAD)
+          PLWU(JI,JJ,JK) = ZFLUX_LW(IIJ,1,JKRAD)
+          PLWD(JI,JJ,JK) = -ZFLUX_LW(IIJ,2,JKRAD)  ! in ECMWF all fluxes are upward
+    END DO
+   END DO
+  END DO
+!!!effective radius
+  DO JK=IKB,IKE
+   JKRAD = JK - JPVEXT
+   DO JJ=IJB,IJE
+    DO JI=IIB,IIE
+          IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+          PRADEFF(JI,JJ,JK) = ZRADLP(IIJ,JKRAD)
+    END DO
+   END DO
+  END DO
+END IF
+!
+!
+!-------------------------------------------------------------------------------
+!
+!*       7.    STORE SOME ADDITIONNAL RADIATIVE FIELDS
+!              ---------------------------------------
+!
+IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
+  ZSTORE_3D(:,:,:) = 0.0
+  ZSTORE_3D2(:,:,:) = 0.0
+  ZSTORE_2D(:,:)   = 0.0
+  !
+  TZFIELD2D = TFIELDMETADATA(                 &
+    CMNHNAME   = 'generic 2D for radiations', & !Temporary name to ease identification
+    CSTDNAME   = '',                          &
+    CDIR       = 'XY',                        &
+    NGRID      = 1,                           &
+    NTYPE      = TYPEREAL,                    &
+    NDIMS      = 2,                           &
+    LTIMEDEP   = .TRUE.                       )
+
+  TZFIELD3D = TFIELDMETADATA(                 &
+    CMNHNAME   = 'generic 3D for radiations', & !Temporary name to ease identification
+    CSTDNAME   = '',                          &
+    CDIR       = 'XY',                        &
+    NGRID      = 1,                           &
+    NTYPE      = TYPEREAL,                    &
+    NDIMS      = 3,                           &
+    LTIMEDEP   = .TRUE.                       )
+
+  IF( KRAD_DIAG >= 1) THEN
+    !
+    ILUOUT = TLUOUT%NLU
+    WRITE(UNIT=ILUOUT,FMT='(/," STORE ADDITIONNAL RADIATIVE FIELDS:", &
+         & " KRAD_DIAG=",I1,/)') KRAD_DIAG
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+          ZSTORE_3D(JI,JJ,JK) = ZFLUX_SW_DOWN(IIJ,JKRAD)
+        END DO
+      END DO
+    END DO
+    TZFIELD3D%CMNHNAME   = 'SWF_DOWN'
+    TZFIELD3D%CLONGNAME  = 'SWF_DOWN'
+    TZFIELD3D%CUNITS     = 'W m-2'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_SWF_DOWN'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+!
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+          ZSTORE_3D(JI,JJ,JK) = ZFLUX_SW_UP(IIJ,JKRAD)
+        END DO
+      END DO
+    END DO
+    TZFIELD3D%CMNHNAME   = 'SWF_UP'
+    TZFIELD3D%CLONGNAME  = 'SWF_UP'
+    TZFIELD3D%CUNITS     = 'W m-2'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_SWF_UP'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+!
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+          ZSTORE_3D(JI,JJ,JK) = -ZFLUX_LW(IIJ,2,JKRAD)
+        END DO
+      END DO
+    END DO
+    TZFIELD3D%CMNHNAME   = 'LWF_DOWN'
+    TZFIELD3D%CLONGNAME  = 'LWF_DOWN'
+    TZFIELD3D%CUNITS     = 'W m-2'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_LWF_DOWN'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+!
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+          ZSTORE_3D(JI,JJ,JK) = ZFLUX_LW(IIJ,1,JKRAD)
+        END DO
+      END DO
+    END DO
+    TZFIELD3D%CMNHNAME   = 'LWF_UP'
+    TZFIELD3D%CLONGNAME  = 'LWF_UP'
+    TZFIELD3D%CUNITS     = 'W m-2'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_LWF_UP'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+!
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+          ZSTORE_3D(JI,JJ,JK) = ZNFLW(IIJ,JKRAD)
+        END DO
+      END DO
+    END DO
+    TZFIELD3D%CMNHNAME   = 'LWF_NET'
+    TZFIELD3D%CLONGNAME  = 'LWF_NET'
+    TZFIELD3D%CUNITS     = 'W m-2'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_LWF_NET'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+!
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+          ZSTORE_3D(JI,JJ,JK) = ZNFSW(IIJ,JKRAD)
+        END DO
+      END DO
+    END DO
+    TZFIELD3D%CMNHNAME   = 'SWF_NET'
+    TZFIELD3D%CLONGNAME  = 'SWF_NET'
+    TZFIELD3D%CUNITS     = 'W m-2'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_SWF_NET'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+!
+    DO JK=IKB,IKE
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          ZSTORE_3D(JI,JJ,JK) = ZDTRAD_LW (JI,JJ,JK)*XDAY
+        END DO
+      END DO
+    END DO
+    TZFIELD3D%CMNHNAME   = 'DTRAD_LW'
+    TZFIELD3D%CLONGNAME  = 'DTRAD_LW'
+    TZFIELD3D%CUNITS     = 'K day-1'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_DTRAD_LW'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+!
+    DO JK=IKB,IKE
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          ZSTORE_3D(JI,JJ,JK) = ZDTRAD_SW (JI,JJ,JK)*XDAY
+        END DO
+      END DO
+    END DO
+    TZFIELD3D%CMNHNAME   = 'DTRAD_SW'
+    TZFIELD3D%CLONGNAME  = 'DTRAD_SW'
+    TZFIELD3D%CUNITS     = 'K day-1'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_DTRAD_SW'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+!
+    DO JJ=IJB,IJE
+      DO JI=IIB,IIE
+        IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+        ZSTORE_2D(JI,JJ) = ZFLUX_TOP_GND_IRVISNIR(IIJ,5)
+      END DO
+    END DO
+    TZFIELD2D%CMNHNAME   = 'RADSWD_VIS'
+    TZFIELD2D%CLONGNAME  = 'RADSWD_VIS'
+    TZFIELD2D%CUNITS     = ''
+    TZFIELD2D%CCOMMENT   = 'X_Y_RADSWD_VIS'
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D)
+!
+    DO JJ=IJB,IJE
+      DO JI=IIB,IIE
+        IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+        ZSTORE_2D(JI,JJ) = ZFLUX_TOP_GND_IRVISNIR(IIJ,6)
+      END DO
+    END DO
+    TZFIELD2D%CMNHNAME   = 'RADSWD_NIR'
+    TZFIELD2D%CLONGNAME  = 'RADSWD_NIR'
+    TZFIELD2D%CUNITS     = ''
+    TZFIELD2D%CCOMMENT   = 'X_Y_RADSWD_NIR'
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D)
+    !
+    DO JJ=IJB,IJE
+      DO JI=IIB,IIE
+        IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+        ZSTORE_2D(JI,JJ) = ZFLUX_TOP_GND_IRVISNIR(IIJ,4)
+      END DO
+    END DO
+    TZFIELD2D%CMNHNAME   = 'RADLWD'
+    TZFIELD2D%CLONGNAME  = 'RADLWD'
+    TZFIELD2D%CUNITS     = ''
+    TZFIELD2D%CCOMMENT   = 'X_Y_RADLWD'
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D)
+  END IF
+  !
+  !
+  IF( KRAD_DIAG >= 2) THEN
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+          ZSTORE_3D(JI,JJ,JK) = ZFLUX_SW_DOWN_CS(IIJ,JKRAD)
+        END DO
+      END DO
+    END DO
+    TZFIELD3D%CMNHNAME   = 'SWF_DOWN_CS'
+    TZFIELD3D%CLONGNAME  = 'SWF_DOWN_CS'
+    TZFIELD3D%CUNITS     = 'W m-2'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_SWF_DOWN_CS'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+    !
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+          ZSTORE_3D(JI,JJ,JK) = ZFLUX_SW_UP_CS(IIJ,JKRAD)
+        END DO
+      END DO
+    END DO
+    TZFIELD3D%CMNHNAME   = 'SWF_UP_CS'
+    TZFIELD3D%CLONGNAME  = 'SWF_UP_CS'
+    TZFIELD3D%CUNITS     = 'W m-2'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_SWF_UP_CS'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+    !
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+          ZSTORE_3D(JI,JJ,JK) = -ZFLUX_LW_CS(IIJ,2,JKRAD)
+        END DO
+      END DO
+    END DO
+    TZFIELD3D%CMNHNAME   = 'LWF_DOWN_CS'
+    TZFIELD3D%CLONGNAME  = 'LWF_DOWN_CS'
+    TZFIELD3D%CUNITS     = 'W m-2'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_LWF_DOWN_CS'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+    !
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+          ZSTORE_3D(JI,JJ,JK) = ZFLUX_LW_CS(IIJ,1,JKRAD)
+        END DO
+      END DO
+    END DO
+    TZFIELD3D%CMNHNAME   = 'LWF_UP_CS'
+    TZFIELD3D%CLONGNAME  = 'LWF_UP_CS'
+    TZFIELD3D%CUNITS     = 'W m-2'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_LWF_UP_CS'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+    !
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+          ZSTORE_3D(JI,JJ,JK) = ZNFLW_CS(IIJ,JKRAD)
+        END DO
+      END DO
+    END DO
+    TZFIELD3D%CMNHNAME   = 'LWF_NET_CS'
+    TZFIELD3D%CLONGNAME  = 'LWF_NET_CS'
+    TZFIELD3D%CUNITS     = 'W m-2'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_LWF_NET_CS'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+    !
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+          ZSTORE_3D(JI,JJ,JK) = ZNFSW_CS(IIJ,JKRAD)
+        END DO
+      END DO
+    END DO
+    TZFIELD3D%CMNHNAME   = 'SWF_NET_CS'
+    TZFIELD3D%CLONGNAME  = 'SWF_NET_CS'
+    TZFIELD3D%CUNITS     = 'W m-2'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_SWF_NET_CS'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+    !
+    DO JK=IKB,IKE
+      JKRAD = JK-JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+          ZSTORE_3D(JI,JJ,JK) = ZDTSW_CS(IIJ,JKRAD) 
+        END DO
+      END DO
+    END DO
+    TZFIELD3D%CMNHNAME   = 'DTRAD_SW_CS'
+    TZFIELD3D%CLONGNAME  = 'DTRAD_SW_CS'
+    TZFIELD3D%CUNITS     = 'K day-1'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_DTRAD_SW_CS'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+    !
+    DO JK=IKB,IKE
+      JKRAD = JK-JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+          ZSTORE_3D(JI,JJ,JK) = ZDTLW_CS(IIJ,JKRAD) 
+        END DO
+      END DO
+    END DO
+    TZFIELD3D%CMNHNAME   = 'DTRAD_LW_CS'
+    TZFIELD3D%CLONGNAME  = 'DTRAD_LW_CS'
+    TZFIELD3D%CUNITS     = 'K day-1'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_DTRAD_LW_CS'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+    !
+    DO JJ=IJB,IJE
+      DO JI=IIB,IIE
+        IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+        ZSTORE_2D(JI,JJ) = ZFLUX_TOP_GND_IRVISNIR_CS(IIJ,5)
+      END DO
+    END DO
+    TZFIELD2D%CMNHNAME   = 'RADSWD_VIS_CS'
+    TZFIELD2D%CLONGNAME  = 'RADSWD_VIS_CS'
+    TZFIELD2D%CUNITS     = ''
+    TZFIELD2D%CCOMMENT   = 'X_Y_RADSWD_VIS_CS'
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D)
+    !
+    DO JJ=IJB,IJE
+      DO JI=IIB,IIE
+        IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+        ZSTORE_2D(JI,JJ) = ZFLUX_TOP_GND_IRVISNIR_CS(IIJ,6)
+      END DO
+    END DO
+    TZFIELD2D%CMNHNAME   = 'RADSWD_NIR_CS'
+    TZFIELD2D%CLONGNAME  = 'RADSWD_NIR_CS'
+    TZFIELD2D%CUNITS     = ''
+    TZFIELD2D%CCOMMENT   = 'X_Y_RADSWD_NIR_CS'
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D)
+    !
+    DO JJ=IJB,IJE
+      DO JI=IIB,IIE
+        IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+        ZSTORE_2D(JI,JJ) = ZFLUX_TOP_GND_IRVISNIR_CS(IIJ,4)
+      END DO
+    END DO
+    TZFIELD2D%CMNHNAME   = 'RADLWD_CS'
+    TZFIELD2D%CLONGNAME  = 'RADLWD_CS'
+    TZFIELD2D%CUNITS     = ''
+    TZFIELD2D%CCOMMENT   = 'X_Y_RADLWD_CS'
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D)
+  END IF
+  !
+  !
+  IF( KRAD_DIAG >= 3) THEN
+    DO JJ=IJB,IJE
+      DO JI=IIB,IIE
+        IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+        ZSTORE_2D(JI,JJ) = ZPLAN_ALB_VIS(IIJ)
+      END DO
+    END DO
+    TZFIELD2D%CMNHNAME   = 'PLAN_ALB_VIS'
+    TZFIELD2D%CLONGNAME  = 'PLAN_ALB_VIS'
+    TZFIELD2D%CUNITS     = ''
+    TZFIELD2D%CCOMMENT   = 'X_Y_PLAN_ALB_VIS'
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D)
+    !
+    DO JJ=IJB,IJE
+      DO JI=IIB,IIE
+        IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+        ZSTORE_2D(JI,JJ) = ZPLAN_ALB_NIR(IIJ)
+      END DO
+    END DO
+    TZFIELD2D%CMNHNAME   = 'PLAN_ALB_NIR'
+    TZFIELD2D%CLONGNAME  = 'PLAN_ALB_NIR'
+    TZFIELD2D%CUNITS     = ''
+    TZFIELD2D%CCOMMENT   = 'X_Y_PLAN_ALB_NIR'
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D)
+    !
+    DO JJ=IJB,IJE
+      DO JI=IIB,IIE
+        IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+        ZSTORE_2D(JI,JJ) = ZPLAN_TRA_VIS(IIJ)
+      END DO
+    END DO
+    TZFIELD2D%CMNHNAME   = 'PLAN_TRA_VIS'
+    TZFIELD2D%CLONGNAME  = 'PLAN_TRA_VIS'
+    TZFIELD2D%CUNITS     = ''
+    TZFIELD2D%CCOMMENT   = 'X_Y_PLAN_TRA_VIS'
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D)
+    !
+    DO JJ=IJB,IJE
+      DO JI=IIB,IIE
+        IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+        ZSTORE_2D(JI,JJ) = ZPLAN_TRA_NIR(IIJ)
+      END DO
+    END DO
+    TZFIELD2D%CMNHNAME   = 'PLAN_TRA_NIR'
+    TZFIELD2D%CLONGNAME  = 'PLAN_TRA_NIR'
+    TZFIELD2D%CUNITS     = ''
+    TZFIELD2D%CCOMMENT   = 'X_Y_PLAN_TRA_NIR'
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D)
+    !
+    DO JJ=IJB,IJE
+      DO JI=IIB,IIE
+        IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+        ZSTORE_2D(JI,JJ) = ZPLAN_ABS_VIS(IIJ)
+      END DO
+    END DO
+    TZFIELD2D%CMNHNAME   = 'PLAN_ABS_VIS'
+    TZFIELD2D%CLONGNAME  = 'PLAN_ABS_VIS'
+    TZFIELD2D%CUNITS     = ''
+    TZFIELD2D%CCOMMENT   = 'X_Y_PLAN_ABS_VIS'
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D)
+    !
+    DO JJ=IJB,IJE
+      DO JI=IIB,IIE
+        IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+        ZSTORE_2D(JI,JJ) = ZPLAN_ABS_NIR(IIJ)
+      END DO
+    END DO
+    TZFIELD2D%CMNHNAME   = 'PLAN_ABS_NIR'
+    TZFIELD2D%CLONGNAME  = 'PLAN_ABS_NIR'
+    TZFIELD2D%CUNITS     = ''
+    TZFIELD2D%CCOMMENT   = 'X_Y_PLAN_ABS_NIR'
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D)
+    !
+    !
+  END IF
+!
+!
+  IF( KRAD_DIAG >= 4) THEN
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+          ZSTORE_3D(JI,JJ,JK) = ZEFCL_LWD(IIJ,JKRAD)
+        END DO
+      END DO
+    END DO
+    TZFIELD3D%CMNHNAME   = 'EFNEB_DOWN'
+    TZFIELD3D%CLONGNAME  = 'EFNEB_DOWN'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_EFNEB_DOWN'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+    !
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+          ZSTORE_3D(JI,JJ,JK) = ZEFCL_LWU(IIJ,JKRAD)
+        END DO
+      END DO
+    END DO
+    TZFIELD3D%CMNHNAME   = 'EFNEB_UP'
+    TZFIELD3D%CLONGNAME  = 'EFNEB_UP'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_EFNEB_UP'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+    !
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+          ZSTORE_3D(JI,JJ,JK) = ZFLWP(IIJ,JKRAD)
+        END DO
+      END DO
+    END DO
+    TZFIELD3D%CMNHNAME   = 'FLWP'
+    TZFIELD3D%CLONGNAME  = 'FLWP'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_FLWP'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+    !
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+          ZSTORE_3D(JI,JJ,JK) = ZFIWP(IIJ,JKRAD)
+        END DO
+      END DO
+    END DO
+    TZFIELD3D%CMNHNAME   = 'FIWP'
+    TZFIELD3D%CLONGNAME  = 'FIWP'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_FIWP'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+    !
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+          ZSTORE_3D(JI,JJ,JK) = ZRADLP(IIJ,JKRAD)
+        END DO
+      END DO
+    END DO
+    TZFIELD3D%CMNHNAME   = 'EFRADL'
+    TZFIELD3D%CLONGNAME  = 'EFRADL'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_RAD_microm'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+    ! 
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+          ZSTORE_3D(JI,JJ,JK) = ZRADIP(IIJ,JKRAD)
+        END DO
+      END DO
+    END DO
+    TZFIELD3D%CMNHNAME   = 'EFRADI'
+    TZFIELD3D%CLONGNAME  = 'EFRADI'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_RAD_microm'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+    !
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+          ZSTORE_3D(JI,JJ,JK) = ZCLSW_TOTAL(IIJ,JKRAD)
+        END DO
+      END DO
+    END DO
+    TZFIELD3D%CMNHNAME   = 'SW_NEB'
+    TZFIELD3D%CLONGNAME  = 'SW_NEB'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_SW_NEB'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+    !
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+          ZSTORE_3D(JI,JJ,JK) = ZEFCL_RRTM(IIJ,JKRAD)
+        END DO
+      END DO
+    END DO
+    TZFIELD3D%CMNHNAME   = 'RRTM_LW_NEB'
+    TZFIELD3D%CLONGNAME  = 'RRTM_LW_NEB'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_LW_NEB'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+    !
+    ! spectral bands
+    IF (KSWB_OLD==6) THEN
+      INIR = 4
+    ELSE
+      INIR = 2
+    END IF
+
+    DO JBAND=1,INIR-1
+      WRITE(YBAND_NAME(JBAND),'(A3,I1)') 'VIS', JBAND
+    END DO
+    DO JBAND= INIR, KSWB_OLD
+      WRITE(YBAND_NAME(JBAND),'(A3,I1)') 'NIR', JBAND
+    END DO
+!
+    DO JBAND=1,KSWB_OLD
+      TZFIELD3D%CMNHNAME   = 'ODAER_'//YBAND_NAME(JBAND)
+      TZFIELD3D%CLONGNAME  = 'ODAER_'//YBAND_NAME(JBAND)
+      TZFIELD3D%CUNITS     = ''
+      TZFIELD3D%CCOMMENT   = 'X_Y_Z_OD_'//YBAND_NAME(JBAND)
+      CALL IO_Field_write(TPFILE,TZFIELD3D,ZTAUAZ(:,:,:,JBAND))
+      !
+      TZFIELD3D%CMNHNAME   = 'SSAAER_'//YBAND_NAME(JBAND)
+      TZFIELD3D%CLONGNAME  = 'SSAAER_'//YBAND_NAME(JBAND)
+      TZFIELD3D%CUNITS     = ''
+      TZFIELD3D%CCOMMENT   = 'X_Y_Z_SSA_'//YBAND_NAME(JBAND)
+      CALL IO_Field_write(TPFILE,TZFIELD3D,ZPIZAZ(:,:,:,JBAND))
+      !
+      TZFIELD3D%CMNHNAME   = 'GAER_'//YBAND_NAME(JBAND)
+      TZFIELD3D%CLONGNAME  = 'GAER_'//YBAND_NAME(JBAND)
+      TZFIELD3D%CUNITS     = ''
+      TZFIELD3D%CCOMMENT   = 'X_Y_Z_G_'//YBAND_NAME(JBAND)
+      CALL IO_Field_write(TPFILE,TZFIELD3D,ZCGAZ(:,:,:,JBAND))
+    ENDDO
+
+    DO JBAND=1,KSWB_OLD
+      DO JK=IKB,IKE
+        JKRAD = JK - JPVEXT
+        DO JJ=IJB,IJE
+          DO JI=IIB,IIE
+            IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+            ZSTORE_3D(JI,JJ,JK) = ZTAU_TOTAL(IIJ,JBAND,JKRAD)
+          END DO
+        END DO
+      END DO
+      TZFIELD3D%CMNHNAME   = 'OTH_'//YBAND_NAME(JBAND)
+      TZFIELD3D%CLONGNAME  = 'OTH_'//YBAND_NAME(JBAND)
+      TZFIELD3D%CUNITS     = ''
+      TZFIELD3D%CCOMMENT   = 'X_Y_Z_OTH_'//YBAND_NAME(JBAND)
+      CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+      !
+      DO JK=IKB,IKE
+        JKRAD = JK - JPVEXT
+        DO JJ=IJB,IJE
+          DO JI=IIB,IIE
+            IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+            ZSTORE_3D(JI,JJ,JK) = ZOMEGA_TOTAL(IIJ,JBAND,JKRAD)
+          END DO
+        END DO
+      END DO
+      TZFIELD3D%CMNHNAME   = 'SSA_'//YBAND_NAME(JBAND)
+      TZFIELD3D%CLONGNAME  = 'SSA_'//YBAND_NAME(JBAND)
+      TZFIELD3D%CUNITS     = ''
+      TZFIELD3D%CCOMMENT   = 'X_Y_Z_SSA_'//YBAND_NAME(JBAND)
+      CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+      !
+      DO JK=IKB,IKE
+        JKRAD = JK - JPVEXT
+        DO JJ=IJB,IJE
+          DO JI=IIB,IIE
+            IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+            ZSTORE_3D(JI,JJ,JK) = ZCG_TOTAL(IIJ,JBAND,JKRAD)
+          END DO
+        END DO
+      END DO
+      TZFIELD3D%CMNHNAME   = 'ASF_'//YBAND_NAME(JBAND)
+      TZFIELD3D%CLONGNAME  = 'ASF_'//YBAND_NAME(JBAND)
+      TZFIELD3D%CUNITS     = ''
+      TZFIELD3D%CCOMMENT   = 'X_Y_Z_ASF_'//YBAND_NAME(JBAND)
+      CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+    END DO
+  END IF
+  !
+  !
+  IF (KRAD_DIAG >= 5)   THEN
+!
+! OZONE and AER optical thickness climato  entering the ecmwf_radiation_vers2
+! note the vertical grid is re-inversed for graphic !   
+    DO JK=IKB,IKE
+      JKRAD = KFLEV+1 - JK + JPVEXT               
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE 
+          IIJ = 1 + (JI-IIB) + (IIE-IIB+1)*(JJ-IJB)
+          ZSTORE_3D(JI,JJ,JK) = ZO3AVE(IIJ, JKRAD)
+        END DO
+      END DO
+    END DO
+    TZFIELD3D%CMNHNAME   = 'O3CLIM'
+    TZFIELD3D%CLONGNAME  = 'O3CLIM'
+    TZFIELD3D%CUNITS     = 'Pa Pa-1'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_O3'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
+! 
+!cumulated optical thickness of aerosols
+!cumul begin from the top of the domain, not from the TOA !      
+!
+!land 
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          ZSTORE_3D(JI,JJ,JK) = PAER(JI,JJ,JKRAD,1)
+        END DO
+      END DO
+    END DO
+!
+    ZSTORE_2D (:,:) = 0.
+    DO JK=IKB,IKE
+      JK1=IKE-JK+IKB 
+      ZSTORE_2D(:,:) = ZSTORE_2D(:,:) + ZSTORE_3D(:,:,JK1)
+      ZSTORE_3D2(:,:,JK1) = ZSTORE_2D(:,:)  
+    END DO
+    TZFIELD3D%CMNHNAME   = 'CUM_AER_LAND'
+    TZFIELD3D%CLONGNAME  = 'CUM_AER_LAND'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_CUM_AER_OPT'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D2)
+!
+! sea
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          ZSTORE_3D(JI,JJ,JK) = PAER(JI,JJ,JKRAD,2)
+        END DO
+      END DO
+    END DO
+!sum
+    ZSTORE_2D (:,:) = 0.
+    DO JK=IKB,IKE
+      JK1=IKE-JK+IKB 
+      ZSTORE_2D(:,:) = ZSTORE_2D(:,:) + ZSTORE_3D(:,:,JK1)
+      ZSTORE_3D2(:,:,JK1) = ZSTORE_2D(:,:)  
+    END DO
+!
+    TZFIELD3D%CMNHNAME   = 'CUM_AER_SEA'
+    TZFIELD3D%CLONGNAME  = 'CUM_AER_SEA'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_CUM_AER_OPT'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D2)
+!
+! desert
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          ZSTORE_3D(JI,JJ,JK) = PAER(JI,JJ,JKRAD,3)
+        END DO
+      END DO
+    END DO
+!sum     
+    ZSTORE_2D (:,:) = 0.
+    DO JK=IKB,IKE
+      JK1=IKE-JK+IKB 
+      ZSTORE_2D(:,:) = ZSTORE_2D(:,:) + ZSTORE_3D(:,:,JK1)
+      ZSTORE_3D2(:,:,JK1) = ZSTORE_2D(:,:)  
+    END DO
+!    
+    TZFIELD3D%CMNHNAME   = 'CUM_AER_DES'
+    TZFIELD3D%CLONGNAME  = 'CUM_AER_DES'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_CUM_AER_OPT'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D2)
+!
+! urban
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          ZSTORE_3D(JI,JJ,JK) = PAER(JI,JJ,JKRAD,4)
+        END DO
+      END DO
+    END DO
+!sum      
+    ZSTORE_2D (:,:) = 0.
+    DO JK=IKB,IKE
+      JK1=IKE-JK+IKB 
+      ZSTORE_2D(:,:) = ZSTORE_2D(:,:) + ZSTORE_3D(:,:,JK1)
+      ZSTORE_3D2(:,:,JK1) = ZSTORE_2D(:,:)  
+    END DO
+!
+    TZFIELD3D%CMNHNAME   = 'CUM_AER_URB'
+    TZFIELD3D%CLONGNAME  = 'CUM_AER_URB'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_CUM_AER_OPT'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D2)
+!
+! Volcanoes
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          ZSTORE_3D(JI,JJ,JK) = PAER(JI,JJ,JKRAD,5)
+        END DO
+      END DO
+    END DO
+!sum         
+    ZSTORE_2D (:,:) = 0.
+    DO JK=IKB,IKE
+      JK1=IKE-JK+IKB 
+      ZSTORE_2D(:,:) = ZSTORE_2D(:,:) + ZSTORE_3D(:,:,JK1)
+      ZSTORE_3D2(:,:,JK1) = ZSTORE_2D(:,:)  
+    END DO
+!
+    TZFIELD3D%CMNHNAME   = 'CUM_AER_VOL'
+    TZFIELD3D%CLONGNAME  = 'CUM_AER_VOL'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_CUM_AER_OPT'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D2)
+!
+! stratospheric background
+    DO JK=IKB,IKE
+      JKRAD = JK - JPVEXT
+      DO JJ=IJB,IJE
+        DO JI=IIB,IIE
+          ZSTORE_3D(JI,JJ,JK) = PAER(JI,JJ,JKRAD,6)
+        END DO
+      END DO
+    END DO
+!sum      
+    ZSTORE_2D (:,:) = 0.
+    DO JK=IKB,IKE
+      JK1=IKE-JK+IKB 
+      ZSTORE_2D(:,:) = ZSTORE_2D(:,:) + ZSTORE_3D(:,:,JK1)
+      ZSTORE_3D2(:,:,JK1) = ZSTORE_2D(:,:)  
+    END DO
+!
+    TZFIELD3D%CMNHNAME   = 'CUM_AER_STRB'
+    TZFIELD3D%CLONGNAME  = 'CUM_AER_STRB'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_CUM_AER_OPT'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D2)
+  ENDIF
+END IF
+!
+DEALLOCATE(ZNFLW_CS)
+DEALLOCATE(ZNFLW)
+DEALLOCATE(ZNFSW_CS)
+DEALLOCATE(ZNFSW)
+DEALLOCATE(ZFLUX_TOP_GND_IRVISNIR)
+DEALLOCATE(ZFLUX_SW_DOWN)
+DEALLOCATE(ZFLUX_SW_UP)
+DEALLOCATE(ZFLUX_LW)
+DEALLOCATE(ZDTLW_CS)
+DEALLOCATE(ZDTSW_CS)
+DEALLOCATE(ZFLUX_TOP_GND_IRVISNIR_CS)
+DEALLOCATE(ZPLAN_ALB_VIS)
+DEALLOCATE(ZPLAN_ALB_NIR)
+DEALLOCATE(ZPLAN_TRA_VIS)
+DEALLOCATE(ZPLAN_TRA_NIR)
+DEALLOCATE(ZPLAN_ABS_VIS)
+DEALLOCATE(ZPLAN_ABS_NIR)
+DEALLOCATE(ZEFCL_LWD)
+DEALLOCATE(ZEFCL_LWU)
+DEALLOCATE(ZFLWP)
+DEALLOCATE(ZFIWP)
+DEALLOCATE(ZRADLP)
+DEALLOCATE(ZRADIP)
+DEALLOCATE(ZEFCL_RRTM)
+DEALLOCATE(ZCLSW_TOTAL)
+DEALLOCATE(ZTAU_TOTAL)
+DEALLOCATE(ZOMEGA_TOTAL)
+DEALLOCATE(ZCG_TOTAL)
+DEALLOCATE(ZFLUX_SW_DOWN_CS)
+DEALLOCATE(ZFLUX_SW_UP_CS)
+DEALLOCATE(ZFLUX_LW_CS)
+DEALLOCATE(ZO3AVE)
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE RADIATIONS
+!
+END MODULE MODI_RADIATIONS  
diff --git a/src/mesonh/ext/read_exsegn.f90 b/src/mesonh/ext/read_exsegn.f90
new file mode 100644
index 0000000000000000000000000000000000000000..59d9b68d0284d1d6e9848b68ad7537b24c1f21ef
--- /dev/null
+++ b/src/mesonh/ext/read_exsegn.f90
@@ -0,0 +1,3064 @@
+!MNH_LIC Copyright 1994-2023 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
+!MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
+!     ###################### 
+      MODULE MODI_READ_EXSEG_n
+!     ######################
+!
+INTERFACE
+!
+      SUBROUTINE READ_EXSEG_n(KMI,TPEXSEGFILE,HCONF,OFLAT,OUSERV,                  &
+                   OUSERC,OUSERR,OUSERI,OUSECI,OUSERS,OUSERG,OUSERH,               &
+                   OUSECHEM,OUSECHAQ,OUSECHIC,OCH_PH,OCH_CONV_LINOX,OSALT,         &
+                   ODEPOS_SLT, ODUST,ODEPOS_DST, OCHTRANS,                         &
+                   OORILAM,ODEPOS_AER, OLG,OPASPOL, OFIRE,                         &
+#ifdef MNH_FOREFIRE
+                   OFOREFIRE,                                                      &
+#endif
+                   OLNOX_EXPLICIT,                                                 &
+                   OCONDSAMP,OBLOWSNOW,                                            &
+                   KRIMX,KRIMY, KSV_USER,                                          &
+                   HTURB,HTOM,ORMC01,HRAD,HDCONV,HSCONV,HCLOUD,HELEC,              &
+                   HEQNSYS,PTSTEP_ALL,HINIFILEPGD                                  )
+!
+USE MODD_IO,   ONLY: TFILEDATA
+!
+INTEGER,            INTENT(IN) :: KMI    ! Model index
+TYPE(TFILEDATA),    INTENT(IN) :: TPEXSEGFILE ! EXSEG file
+!     The following variables are read by READ_DESFM in DESFM descriptor : 
+CHARACTER (LEN=*),  INTENT(IN) :: HCONF  ! configuration var. linked to FMfile
+LOGICAL,            INTENT(IN) :: OFLAT  ! Logical for zero orography
+LOGICAL,            INTENT(IN) :: OUSERV,OUSERC,OUSERR,OUSERI,OUSERS, &
+                                  OUSERG,OUSERH  ! kind of moist variables in 
+                                                 ! FMfile
+LOGICAL,            INTENT(IN) :: OUSECI         ! ice concentration in
+                                                 ! FMfile
+LOGICAL,            INTENT(IN) :: OUSECHEM       ! Chemical FLAG in FMFILE
+LOGICAL,            INTENT(IN) :: OUSECHAQ       ! Aqueous chemical FLAG in FMFILE
+LOGICAL,            INTENT(IN) :: OUSECHIC       ! Ice chemical FLAG in FMFILE
+LOGICAL,            INTENT(IN) :: OCH_PH         ! pH FLAG in FMFILE
+LOGICAL,            INTENT(IN) :: OCH_CONV_LINOX ! LiNOx FLAG in FMFILE
+LOGICAL,            INTENT(IN) :: ODUST          ! Dust FLAG in FMFILE
+LOGICAL,DIMENSION(:), INTENT(IN)  :: ODEPOS_DST  ! Dust wet deposition FLAG in FMFILE     
+LOGICAL,DIMENSION(:), INTENT(IN)  :: ODEPOS_SLT  ! Sea Salt wet deposition FLAG in FMFILE     
+LOGICAL,DIMENSION(:), INTENT(IN)  :: ODEPOS_AER  ! Orilam wet deposition FLAG in FMFILE     
+LOGICAL,            INTENT(IN) :: OSALT          ! Sea Salt FLAG in FMFILE
+LOGICAL,            INTENT(IN) :: OORILAM        ! Orilam FLAG in FMFILE
+LOGICAL,            INTENT(IN) :: OPASPOL        ! Passive pollutant FLAG in FMFILE
+LOGICAL,            INTENT(IN) :: OFIRE          ! Blaze FLAG in FMFILE
+#ifdef MNH_FOREFIRE
+LOGICAL,            INTENT(IN) :: OFOREFIRE      ! ForeFire FLAG in FMFILE
+#endif
+LOGICAL,            INTENT(IN) :: OLNOX_EXPLICIT ! explicit LNOx FLAG in FMFILE
+LOGICAL,            INTENT(IN) :: OCONDSAMP      ! Conditional sampling FLAG in FMFILE
+LOGICAL,            INTENT(IN) :: OBLOWSNOW     ! Blowing snow FLAG in FMFILE
+LOGICAL,            INTENT(IN) :: OCHTRANS       ! LCHTRANS FLAG in FMFILE
+
+LOGICAL,            INTENT(IN) :: OLG            ! lagrangian FLAG in FMFILE
+INTEGER,            INTENT(IN) :: KRIMX, KRIMY   ! number of points for the
+                       ! horizontal relaxation for the outermost verticals
+INTEGER,            INTENT(IN) :: KSV_USER    ! number of additional scalar
+                                         ! variables in FMfile 
+CHARACTER (LEN=*),  INTENT(IN) :: HTURB  ! Kind of turbulence parameterization
+                                         ! used to  produce FMFILE
+CHARACTER (LEN=*),  INTENT(IN) :: HTOM   ! Kind of third order moment
+LOGICAL,            INTENT(IN) :: ORMC01 ! flag for RMC01 SBL computations
+CHARACTER (LEN=*),  INTENT(IN) :: HRAD   ! Kind of radiation scheme
+CHARACTER (LEN=4),  INTENT(IN) :: HDCONV ! Kind of deep convection scheme
+CHARACTER (LEN=4),  INTENT(IN) :: HSCONV ! Kind of shallow convection scheme
+CHARACTER (LEN=4),  INTENT(IN) :: HCLOUD ! Kind of microphysical scheme
+CHARACTER (LEN=4),  INTENT(IN) :: HELEC  ! Kind of electrical scheme
+CHARACTER (LEN=*),  INTENT(IN) :: HEQNSYS! type of equations' system
+REAL,DIMENSION(:),  INTENT(INOUT):: PTSTEP_ALL ! Time STEP of ALL models
+CHARACTER (LEN=*),  INTENT(IN) :: HINIFILEPGD ! name of PGD file
+!
+END SUBROUTINE READ_EXSEG_n
+!
+END INTERFACE
+!
+END MODULE MODI_READ_EXSEG_n
+!
+!
+!     #########################################################################
+      SUBROUTINE READ_EXSEG_n(KMI,TPEXSEGFILE,HCONF,OFLAT,OUSERV,                  &
+                   OUSERC,OUSERR,OUSERI,OUSECI,OUSERS,OUSERG,OUSERH,               &
+                   OUSECHEM,OUSECHAQ,OUSECHIC,OCH_PH,OCH_CONV_LINOX,OSALT,         &
+                   ODEPOS_SLT, ODUST,ODEPOS_DST, OCHTRANS,                         &
+                   OORILAM,ODEPOS_AER, OLG,OPASPOL, OFIRE,                         &
+#ifdef MNH_FOREFIRE
+                   OFOREFIRE,                                                      &
+#endif
+                   OLNOX_EXPLICIT,                                                 &
+                   OCONDSAMP, OBLOWSNOW,                                           &
+                   KRIMX,KRIMY, KSV_USER,                                          &
+                   HTURB,HTOM,ORMC01,HRAD,HDCONV,HSCONV,HCLOUD,HELEC,              &
+                   HEQNSYS,PTSTEP_ALL,HINIFILEPGD                                  )
+!     #########################################################################
+!
+!!****  *READ_EXSEG_n * - routine to read  the descriptor file EXSEG
+!!
+!!    PURPOSE
+!!    -------
+!       The purpose of this routine is to read the descriptor file called 
+!     EXSEG and to control the coherence with FMfile data . 
+!       
+!!
+!!**  METHOD
+!!    ------
+!!      The descriptor file is read. Namelists (NAMXXXn) which contain
+!!    variables linked to one nested model are at the beginning of the file.
+!!    Namelists (NAMXXX) which contain variables common to all models
+!!    are at the end of the file. When the  model index is different from 1, 
+!!    the end of the file (namelists NAMXXX) is not read. 
+!!
+!!      Coherence between the initial file (description read in DESFM file)
+!!    and the segment to perform (description read in EXSEG file)
+!!    is checked for segment achievement  configurations 
+!!    or  postprocessing configuration. The get indicators are set according 
+!!      to the following check :
+!!
+!!      - segment achievement and preinit configurations :
+!!
+!!       * if there is no turbulence kinetic energy in  initial
+!!      file (HTURB='NONE'), and the segment to perform requires a turbulence
+!!      parameterization (CTURB /= 'NONE'), the get indicators for turbulence 
+!!      kinetic energy variables are set to 'INIT'; i.e. these variables will be
+!!      set equal to  zero by READ_FIELD according to the get indicators.
+!!       * The same procedure is applied to the dissipation of TKE. 
+!!       * if there is no moist variables RRn  in  initial file (OUSERn=.FALSE.)
+!!      and the segment to perform requires  moist variables RRn
+!!      (LUSERn=.TRUE.),  the get indicators for moist variables RRn are set
+!!      equal to 'INIT'; i.e. these variables will be set equal to  zero by 
+!!      READ_FIELD according to the get indicators.
+!!       * if there are KSV_USER additional scalar variables in initial file and the
+!!      segment to perform needs more than KSV_USER additional variables,  the get
+!!      indicators for these (NSV_USER-KSV_USER) additional scalar variables are set 
+!!      equal to 'INIT'; i.e. these variables will be set equal to  zero by 
+!!      READ_FIELD according to the get indicators. If the segment to perform
+!!      needs less additional scalar variables than there are in initial file,
+!!      the get indicators for these (KSV_USER - NSV_USER) additional scalar variables are
+!!      set equal to 'SKIP'.      
+!!       * warning messages are printed if the fields in initial file are the
+!!      same at time t and t-dt (HCONF='START') and  a leap-frog advance 
+!!      at first time step will be used  for the segment to perform
+!!      (CCONF='RESTA'); It is likewise when HCONF='RESTA' and CCONF='START'.
+!!       * A warning message is printed if the orography in initial file is zero
+!!      (OFLAT=.TRUE.) and the segment to perform considers no-zero orography
+!!      (LFLAT=.FALSE.). It is likewise for LFLAT=.TRUE. and OFLAT=.FALSE..
+!!       If the segment to perform requires zero orography (LFLAT=.TRUE.), the
+!!       orography (XZS) will not read in initial file but  set equal to zero 
+!!       by SET_GRID.  
+!!       * check of the depths of the Lateral Damping Layer in x and y 
+!!       direction is performed
+!!       * If some coupling files are specified, LSTEADYLS is set to T
+!!       * If no coupling files are specified, LSTEADYLS is set to F
+!!
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!     Module MODN_CONF : CCONF,LTHINSHELL,LFLAT,NMODEL,NVERB     
+!!
+!!      Module MODN_DYN : LCORIO, LZDIFFU
+!!
+!!      Module MODN_NESTING : NDAD(m),NDTRATIO(m),XWAY(m)
+!!
+!!      Module MODN_BUDGET : CBUTYPE,XBULEN
+!!
+!!      Module MODN_CONF1 : LUSERV,LUSERC,LUSERR,LUSERI,LUSERS,LUSERG,LUSERH,CSEG
+!!
+!!      Module MODN_DYN1 : XTSTEP,CPRESOPT,NITR,XRELAX
+!!
+!!      Module MODD_ADV1 : CMET_ADV_SCHEME,CSV_ADV_SCHEME,CUVW_ADV_SCHEME,NLITER
+!!
+!!      Module MODN_PARAM1 : CTURB,CRAD,CDCONV,CSCONV
+!!
+!!      Module MODN_LUNIT1 : 
+!!      Module MODN_LBC1 : CLBCX,CLBCY,NLBLX,NLBLY,XCPHASE,XPOND
+!!
+!!      Module MODN_TURB_n : CTURBLEN,CTURBDIM
+!!
+!!      Module MODD_GET1: 
+!!        CGETTKEM,CGETTKET,
+!!        CGETRVM,CGETRCM,CGETRRM,CGETRIM,CGETRSM,CGETRGM,CGETRHM
+!!        CGETRVT,CGETRCT,CGETRRT,CGETRIT,CGETRST,CGETRGT,CGETRHT,CGETSVM
+!!        CGETSVT,CGETSIGS,CGETSRCM,CGETSRCT 
+!!        NCPL_NBR,NCPL_TIMES,NCPL_CUR
+!!      Module MODN_LES  : contains declaration of the control parameters
+!!                                for Large Eddy Simulations' storages
+!!                                for the forcing
+!!
+!!    REFERENCE
+!!    ---------
+!!      Book2 of the  documentation (routine READ_EXSEG_n)
+!!      
+!!
+!!    AUTHOR
+!!    ------
+!!  	V. Ducrocq       * Meteo France *
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    07/06/94 
+!!      Modification   26/10/94  (Stein)  remove NAM_GET from the Namelists
+!!      present in DESFM + change the namelist names
+!!      Modification   22/11/94  (Stein)  add GET indicator for phi
+!!      Modification   21/12/94  (Stein)  add GET indicator for LS fields  
+!!      Modification   06/01/95  (Stein)  bug in the test for Scalar Var.
+!!      Modifications  09/01/95  (Stein)  add the turbulence scheme
+!!      Modifications  09/01/95  (Stein)  add the 1D switch
+!!      Modifications  10/03/95  (Mallet) add coherence in coupling case
+!!      Modifications  16/03/95  (Stein)  remove R from the historical variables
+!!      Modifications  01/03/95  (Hereil) add the budget namelists
+!!      Modifications  16/06/95  (Stein)  coherence control for the
+!!                microphysical scheme + remove the wrong messge for RESTA conf
+!!      Modifications  30/06/95  (Stein)  conditionnal reading of the fields
+!!                used by the moist turbulence scheme
+!!      Modifications  12/09/95  (Pinty)  add the radiation scheme
+!!      Modification   06/02/96  (J.Vila) implement scalar advection schemes
+!!      Modifications  24/02/96  (Stein)  change the default value for CCPLFILE
+!!      Modifications  02/05/96  (Stein Jabouille) change the Z0SEA activation
+!!      Modifications  24/05/96  (Stein)  change the SRC SIGS control
+!!      Modifications  08/09/96  (Masson) the coupling file names are reset to
+!!                               default value " " before reading in EXSEG1.nam
+!!                               to avoid extra non-existant coupling files
+!!
+!!      Modifications  25/04/95  (K.Suhre)add namelist NAM_BLANK
+!!                                        add read for LFORCING
+!!                     25/04/95  (K.Suhre)add namelist NAM_FRC
+!!                                        and switch checking
+!!                     06/08/96  (K.Suhre)add namelist NAM_CH_MNHCn
+!!                                        and NAM_CH_SOLVER
+!!      Modifications  10/10/96  (Stein)  change SRC into SRCM and SRCT
+!!      Modifications  11/04/96  (Pinty)  add the rain-ice microphysical scheme
+!!      Modifications  11/01/97  (Pinty)  add the deep convection scheme
+!!      Modifications  22/05/97  (Lafore) gridnesting implementation
+!!      Modifications  22/06/97  (Stein)  add the absolute pressure + cleaning
+!!      Modifications  25/08/97  (Masson) add tests on surface schemes
+!!                     22/10/97  (Stein) remove the RIMX /= 0 control
+!!                                       + new namelist + cleaning
+!!      Modifications  17/04/98  (Masson) add tests on character variables
+!!      Modification   15/03/99  (Masson) add tests on PROGRAM
+!!      Modification   04/01/00  (Masson) removes TSZ0 case
+!!      Modification   04/06/00  (Pinty)  add C2R2 scheme
+!!                     11/12/00  (Tomasini) add CSEA_FLUX to MODD_PARAMn
+!!                                          delete the test on SST_FRC only in 1D
+!!      Modification   22/01/01  (Gazen)  change NSV,KSV to NSV_USER,KSV_USER and add
+!!                                        NSV_* variables initialization
+!!      Modification   15/10/01  (Mallet) allow namelists in different orders
+!!      Modification   18/03/02  (Solmon)  new radiation scheme test
+!!      Modification   29/11/02 (JP Pinty) add C3R5, ICE2, ICE4, ELEC
+!!      Modification   06/11/02  (Masson)  new LES BL height diagnostic
+!!      Modification   06/11/02  (Jabouille)  remove LTHINSHELL LFORCING test
+!!      Modification   01/12/03  (Gazen)   change Chemical scheme interface
+!!      Modification   01/2004   (Masson) removes surface (externalization)
+!!      Modification   01/2005   (Masson) removes 1D and 2D switches
+!!      Modification   04/2005   (Tulet)  add dust, orilam
+!!      Modification   03/2006   (O.Geoffroy) Add KHKO scheme
+!!      Modification   04/2006   (Maric)  include 4th order advection scheme
+!!      Modification   05/2006   (Masson) add nudging
+!!      Modification   05/2006   Remove KEPS
+!!      Modification   04/2006   (Maric)  include PPM advection scheme
+!!      Modification   04/2006   (J.Escobar) Bug dollarn add CALL UPDATE_NAM_CONFN  
+!!      Modifications  01/2007   (Malardel,Pergaud)  add the MF shallow
+!!                               convection scheme MODN_PARAM_MFSHALL_n
+!!      Modification   09/2009   (J.Escobar) add more info on relaxation problems
+!!      Modification   09/2011   (J.Escobar) re-add 'ZRESI' choose
+!!      Modification   12/2011   (C.Lac) Adaptation to FIT temporal scheme 
+!!      Modification   12/2012   (S.Bielli) add NAM_NCOUT for netcdf output (removed 08/07/2016)
+!!      Modification   02/2012   (Pialat/Tulet) add ForeFire
+!!      Modification   02/2012   (T.Lunet) add of new Runge-Kutta methods
+!!      Modification   01/2015   (C. Barthe) add explicit LNOx
+!!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
+!!      M.Leriche 18/12/2015 : bug chimie glace dans prep_real_case
+!!      Modification    01/2016  (JP Pinty) Add LIMA
+!!      Modification   02/2016   (M.Leriche) treat gas and aq. chemicals separately
+!!      P.Wautelet 08/07/2016 : removed MNH_NCWRIT define
+!!      Modification   10/2016    (C.LAC) Add OSPLIT_WENO + Add droplet
+!!                                deposition + Add max values
+!!      Modification   11/2016   (Ph. Wautelet) Allocate/initialise some output/backup structures
+!!      Modification   03/2017   (JP Chaboureau) Fix the initialization of
+!!                                               LUSERx-type variables for LIMA
+!!      M.Leriche      06/2017 for spawn and prep_real avoid abort if wet dep for 
+!!                             aerosol and no cloud scheme defined
+!!      Q.Libois       02/2018  ECRAD
+!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!!      Modification   07/2017   (V. Vionnet) add blowing snow scheme
+!!      Modification   01/2019   (Q. Rodier) define XCEDIS depending on BL89 or RM17 mixing length
+!!      Modification   01/2019   (P. Wautelet) bugs correction: incorrect writes
+!!      Modification   01/2019   (R. Honnert) remove SURF in CMF_UPDRAFT
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
+!  C. Lac         11/2019: correction in the drag formula and application to building in addition to tree
+!  Q. Rodier      03/2020: add abort if use of any LHORELAX and cyclic conditions
+!  F.Auguste      02/2021: add IBM
+!  T.Nagel        02/2021: add turbulence recycling
+!  E.Jezequel     02/2021: add stations read from CSV file
+!  P. Wautelet 09/03/2021: simplify allocation of scalar variable names
+!  P. Wautelet 09/03/2021: move some chemistry initializations to ini_nsv
+!  P. Wautelet 10/03/2021: move scalar variable name initializations to ini_nsv
+!  R. Honnert  23/04/2021: add HM21 mixing length and delete HRIO and BOUT from CMF_UPDRAFT
+!  S. Riette   11/05/2021  HighLow cloud
+!  A. Costes      12/2021: add Blaze fire model
+!  P. Wautelet 27/04/2022: add namelist for profilers
+!  P. Wautelet 24/06/2022: remove check on CSTORAGE_TYPE for restart of ForeFire variables
+!  P. Wautelet 13/07/2022: add namelist for flyers and balloons
+!  P. Wautelet 19/08/2022: add namelist for aircrafts
+!------------------------------------------------------------------------------
+!
+!*       0.    DECLARATIONS
+!              ------------
+USE MODD_AIRCRAFT_BALLOON, ONLY: NAIRCRAFTS, NBALLOONS
+USE MODD_BLOWSNOW
+USE MODD_BUDGET
+USE MODD_CH_AEROSOL
+USE MODD_CH_M9_n, ONLY : NEQ
+USE MODD_CONDSAMP
+USE MODD_CONF
+USE MODD_CONFZ
+! USE MODD_DRAG_n
+USE MODD_DUST
+USE MODD_DYN
+USE MODD_DYN_n, ONLY : LHORELAX_SVLIMA, LHORELAX_SVFIRE
+#ifdef MNH_FOREFIRE
+USE MODD_FOREFIRE
+#endif
+USE MODD_GET_n
+USE MODD_GR_FIELD_n
+USE MODD_IO,   ONLY: TFILEDATA
+USE MODD_LUNIT_n, ONLY: TLUOUT
+USE MODD_NSV,NSV_USER_n=>NSV_USER
+USE MODD_PARAMETERS
+USE MODD_PASPOL
+USE MODD_SALT
+USE MODD_VAR_ll,  ONLY: NPROC
+USE MODD_VISCOSITY
+
+USE MODE_MSG
+USE MODE_POS
+
+USE MODI_INI_NSV
+USE MODI_TEST_NAM_VAR
+
+USE MODN_2D_FRC
+USE MODN_ADV_n      ! The final filling of these modules for the model n is
+USE MODN_AIRCRAFTS, ONLY: AIRCRAFTS_NML_ALLOCATE, NAM_AIRCRAFTS
+USE MODN_BACKUP
+USE MODN_BALLOONS,  ONLY: BALLOONS_NML_ALLOCATE, NAM_BALLOONS
+USE MODN_BLANK_n
+USE MODN_BLOWSNOW
+USE MODN_BLOWSNOW_n
+USE MODN_BUDGET
+USE MODN_CH_MNHC_n
+USE MODN_CH_ORILAM
+USE MODN_CH_SOLVER_n
+USE MODN_CONDSAMP
+USE MODN_CONF
+USE MODN_CONF_n
+USE MODN_CONFZ
+USE MODN_DRAGBLDG_n
+USE MODN_DRAG_n
+USE MODN_DRAGTREE_n
+USE MODN_DUST
+USE MODN_DYN
+USE MODN_DYN_n      ! to avoid the duplication of this routine for each model.
+USE MODN_ELEC
+USE MODN_EOL
+USE MODN_EOL_ADNR
+USE MODN_EOL_ALM
+USE MODN_FIRE_n
+USE MODN_FLYERS
+#ifdef MNH_FOREFIRE
+USE MODN_FOREFIRE
+#endif
+USE MODN_FRC
+USE MODN_IBM_PARAM_n
+USE MODN_LATZ_EDFLX
+USE MODN_LBC_n      ! routine is used for each nested model. This has been done
+USE MODN_LES
+USE MODN_LUNIT_n
+USE MODN_MEAN
+USE MODN_NESTING
+USE MODN_NUDGING_n
+USE MODN_OUTPUT
+USE MODN_PARAM_C1R3, ONLY : NAM_PARAM_C1R3, CPRISTINE_ICE_C1R3,    &
+                            CHEVRIMED_ICE_C1R3
+USE MODN_PARAM_C2R2, ONLY : EPARAM_CCN=>HPARAM_CCN, EINI_CCN=>HINI_CCN, &
+                            WNUC=>XNUC, WALPHAC=>XALPHAC, NAM_PARAM_C2R2
+USE MODN_PARAM_ECRAD_n
+USE MODN_PARAM_ICE
+USE MODN_PARAM_KAFR_n
+USE MODN_PARAM_LIMA, ONLY : FINI_CCN=>HINI_CCN,NAM_PARAM_LIMA,NMOD_CCN,LSCAV, &
+                            CPRISTINE_ICE_LIMA, CHEVRIMED_ICE_LIMA, NMOD_IFN, NMOD_IMM, &
+                            LACTI, LNUCL, XALPHAC, XNUC, LMEYERS, &
+                            LPTSPLIT, LSPRO, LADJ, LKHKO, &
+                            NMOM_C, NMOM_R, NMOM_I, NMOM_S, NMOM_G, NMOM_H
+USE MODN_PARAM_MFSHALL_n
+USE MODN_PARAM_n    ! realized in subroutine ini_model n
+USE MODN_PARAM_RAD_n
+USE MODN_PASPOL
+USE MODN_PROFILER_n
+USE MODN_RECYCL_PARAM_n
+USE MODN_SALT
+USE MODN_SERIES
+USE MODN_SERIES_n
+USE MODN_STATION_n
+USE MODN_TURB
+USE MODN_TURB_CLOUD
+USE MODN_TURB_n
+USE MODN_VISCOSITY
+!
+IMPLICIT NONE
+!
+!*       0.1   declarations of arguments
+!
+!
+!
+INTEGER,            INTENT(IN) :: KMI    ! Model index
+TYPE(TFILEDATA),    INTENT(IN) :: TPEXSEGFILE ! EXSEG file
+!     The following variables are read by READ_DESFM in DESFM descriptor : 
+CHARACTER (LEN=*),  INTENT(IN) :: HCONF  ! configuration var. linked to FMfile
+LOGICAL,            INTENT(IN) :: OFLAT  ! Logical for zero orography
+LOGICAL,            INTENT(IN) :: OUSERV,OUSERC,OUSERR,OUSERI,OUSERS, &
+                                  OUSERG,OUSERH  ! kind of moist variables in 
+                                                 ! FMfile
+LOGICAL,            INTENT(IN) :: OUSECI         ! ice concentration in
+                                                 ! FMfile
+LOGICAL,            INTENT(IN) :: OUSECHEM       ! Chemical FLAG in FMFILE
+LOGICAL,            INTENT(IN) :: OUSECHAQ       ! Aqueous chemical FLAG in FMFILE
+LOGICAL,            INTENT(IN) :: OUSECHIC       ! Ice chemical FLAG in FMFILE
+LOGICAL,            INTENT(IN) :: OCH_PH         ! pH FLAG in FMFILE
+LOGICAL,            INTENT(IN) :: OCH_CONV_LINOX ! LiNOx FLAG in FMFILE
+LOGICAL,            INTENT(IN) :: ODUST          ! Dust FLAG in FMFILE
+LOGICAL,DIMENSION(:), INTENT(IN) :: ODEPOS_DST   ! Dust Deposition FLAG in FMFILE
+LOGICAL,DIMENSION(:), INTENT(IN) :: ODEPOS_SLT   ! Sea Salt wet deposition FLAG in FMFILE     
+LOGICAL,DIMENSION(:), INTENT(IN) :: ODEPOS_AER   ! Orilam wet deposition FLAG in FMFILE     
+LOGICAL,            INTENT(IN) :: OSALT          ! Sea Salt FLAG in FMFILE
+LOGICAL,            INTENT(IN) :: OORILAM        ! Orilam FLAG in FMFILE
+LOGICAL,            INTENT(IN) :: OPASPOL        ! Passive pollutant FLAG in FMFILE
+LOGICAL,            INTENT(IN) :: OFIRE          ! Blaze FLAG in FMFILE
+#ifdef MNH_FOREFIRE
+LOGICAL,            INTENT(IN) :: OFOREFIRE      ! ForeFire FLAG in FMFILE
+#endif
+LOGICAL,            INTENT(IN) :: OLNOX_EXPLICIT ! explicit LNOx FLAG in FMFILE
+LOGICAL,            INTENT(IN) :: OCONDSAMP      ! Conditional sampling FLAG in FMFILE
+LOGICAL,            INTENT(IN) :: OCHTRANS       ! LCHTRANS FLAG in FMFILE
+LOGICAL,            INTENT(IN) :: OBLOWSNOW     ! Blowing snow FLAG in FMFILE
+
+LOGICAL,            INTENT(IN) :: OLG            ! lagrangian FLAG in FMFILE
+INTEGER,            INTENT(IN) :: KRIMX, KRIMY   ! number of points for the
+                       ! horizontal relaxation for the outermost verticals
+INTEGER,            INTENT(IN) :: KSV_USER    ! number of additional scalar
+                                         ! variables in FMfile 
+CHARACTER (LEN=*),  INTENT(IN) :: HTURB  ! Kind of turbulence parameterization
+                                         ! used to  produce FMFILE
+CHARACTER (LEN=*),  INTENT(IN) :: HTOM   ! Kind of third order moment
+LOGICAL,            INTENT(IN) :: ORMC01 ! flag for RMC01 SBL computations
+CHARACTER (LEN=*),  INTENT(IN) :: HRAD   ! Kind of radiation scheme
+CHARACTER (LEN=4),  INTENT(IN) :: HDCONV ! Kind of deep convection scheme
+CHARACTER (LEN=4),  INTENT(IN) :: HSCONV ! Kind of shallow convection scheme
+CHARACTER (LEN=4),  INTENT(IN) :: HCLOUD ! Kind of microphysical scheme
+CHARACTER (LEN=4),  INTENT(IN) :: HELEC  ! Kind of electrical scheme
+CHARACTER (LEN=*),  INTENT(IN) :: HEQNSYS! type of equations' system
+REAL,DIMENSION(:),  INTENT(INOUT):: PTSTEP_ALL ! Time STEP of ALL models
+CHARACTER (LEN=*),  INTENT(IN) :: HINIFILEPGD ! name of PGD file
+!
+!*       0.2   declarations of local variables
+!
+INTEGER :: ILUSEG,ILUOUT ! logical unit numbers of EXSEG file and outputlisting
+INTEGER :: JS,JCI,JI,JSV       ! Loop indexes 
+LOGICAL :: GRELAX              
+LOGICAL :: GFOUND              ! Return code when searching namelist
+!
+!-------------------------------------------------------------------------------
+!
+!*       1.    READ EXSEG FILE
+!              ---------------
+!
+CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_EXSEG_n','called for '//TRIM(TPEXSEGFILE%CNAME))
+!
+ILUSEG = TPEXSEGFILE%NLU
+ILUOUT = TLUOUT%NLU
+!
+CALL INIT_NAM_LUNITN
+CCPLFILE(:)="                            "
+CALL INIT_NAM_CONFN
+CALL INIT_NAM_DYNN
+CALL INIT_NAM_ADVN
+CALL INIT_NAM_DRAGTREEN
+CALL INIT_NAM_DRAGBLDGN
+CALL INIT_NAM_PARAMN
+CALL INIT_NAM_PARAM_RADN
+#ifdef MNH_ECRAD
+CALL INIT_NAM_PARAM_ECRADN
+#endif
+CALL INIT_NAM_PARAM_KAFRN
+CALL INIT_NAM_PARAM_MFSHALLN
+CALL INIT_NAM_LBCN
+CALL INIT_NAM_NUDGINGN
+CALL INIT_NAM_TURBN
+CALL INIT_NAM_BLANKN
+CALL INIT_NAM_DRAGN
+CALL INIT_NAM_IBM_PARAMN
+CALL INIT_NAM_RECYCL_PARAMN
+CALL INIT_NAM_CH_MNHCN
+CALL INIT_NAM_CH_SOLVERN
+CALL INIT_NAM_SERIESN
+CALL INIT_NAM_BLOWSNOWN
+CALL INIT_NAM_PROFILERn
+CALL INIT_NAM_STATIONn
+CALL INIT_NAM_FIREn
+!
+WRITE(UNIT=ILUOUT,FMT="(/,'READING THE EXSEG.NAM FILE')")
+CALL POSNAM(ILUSEG,'NAM_LUNITN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_LUNITn)
+CALL POSNAM(ILUSEG,'NAM_CONFN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONFn)
+CALL POSNAM(ILUSEG,'NAM_DYNN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_DYNn)
+CALL POSNAM(ILUSEG,'NAM_ADVN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_ADVn)
+CALL POSNAM(ILUSEG,'NAM_PARAMN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAMn)
+CALL POSNAM(ILUSEG,'NAM_PARAM_RADN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_RADn)
+#ifdef MNH_ECRAD
+CALL POSNAM(ILUSEG,'NAM_PARAM_ECRADN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_ECRADn)
+#endif
+CALL POSNAM(ILUSEG,'NAM_PARAM_KAFRN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_KAFRn)
+CALL POSNAM(ILUSEG,'NAM_PARAM_MFSHALLN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_MFSHALLn)
+CALL POSNAM(ILUSEG,'NAM_LBCN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_LBCn)
+CALL POSNAM(ILUSEG,'NAM_NUDGINGN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_NUDGINGn)
+CALL POSNAM(ILUSEG,'NAM_TURBN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_TURBn)
+CALL POSNAM(ILUSEG,'NAM_DRAGN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_DRAGn)
+CALL POSNAM(ILUSEG,'NAM_IBM_PARAMN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_IBM_PARAMn)
+CALL POSNAM(ILUSEG,'NAM_RECYCL_PARAMN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_RECYCL_PARAMn)
+CALL POSNAM(ILUSEG,'NAM_CH_MNHCN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CH_MNHCn)
+CALL POSNAM(ILUSEG,'NAM_CH_SOLVERN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CH_SOLVERn)
+CALL POSNAM(ILUSEG,'NAM_SERIESN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_SERIESn)
+CALL POSNAM(ILUSEG,'NAM_BLANKN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BLANKn)
+CALL POSNAM(ILUSEG,'NAM_BLOWSNOWN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BLOWSNOWn)
+CALL POSNAM(ILUSEG,'NAM_DRAGTREEN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_DRAGTREEn)
+CALL POSNAM(ILUSEG,'NAM_DRAGBLDGN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_DRAGBLDGn)
+CALL POSNAM(ILUSEG,'NAM_EOL',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_EOL)
+CALL POSNAM(ILUSEG,'NAM_EOL_ADNR',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_EOL_ADNR)
+CALL POSNAM(ILUSEG,'NAM_EOL_ALM',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_EOL_ALM)
+CALL POSNAM(ILUSEG,'NAM_PROFILERN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PROFILERn)
+CALL POSNAM(ILUSEG,'NAM_STATIONN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_STATIONn)
+CALL POSNAM(ILUSEG,'NAM_FIREN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_FIREn)
+!
+IF (KMI == 1) THEN                                               
+  WRITE(UNIT=ILUOUT,FMT="(' namelists common to all the models ')")
+  CALL POSNAM(ILUSEG,'NAM_CONF',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONF)
+  CALL POSNAM(ILUSEG,'NAM_CONFZ',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONFZ)
+  CALL POSNAM(ILUSEG,'NAM_DYN',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_DYN)
+  CALL POSNAM(ILUSEG,'NAM_NESTING',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_NESTING)
+  CALL POSNAM(ILUSEG,'NAM_BACKUP',GFOUND,ILUOUT)
+  IF (GFOUND) THEN
+    !Should have been allocated before in READ_DESFM_n
+    IF (.NOT.ALLOCATED(XBAK_TIME)) THEN
+      ALLOCATE(XBAK_TIME(NMODEL,JPOUTMAX))
+      XBAK_TIME(:,:) = XNEGUNDEF
+    END IF
+    IF (.NOT.ALLOCATED(XOUT_TIME)) THEN
+      ALLOCATE(XOUT_TIME(NMODEL,JPOUTMAX)) !Allocate *OUT* variables to prevent
+      XOUT_TIME(:,:) = XNEGUNDEF
+    END IF
+    IF (.NOT.ALLOCATED(NBAK_STEP)) THEN
+      ALLOCATE(NBAK_STEP(NMODEL,JPOUTMAX))
+      NBAK_STEP(:,:) = NNEGUNDEF
+    END IF
+    IF (.NOT.ALLOCATED(NOUT_STEP)) THEN
+      ALLOCATE(NOUT_STEP(NMODEL,JPOUTMAX)) !problems if NAM_OUTPUT does not exist
+      NOUT_STEP(:,:) = NNEGUNDEF
+    END IF
+    IF (.NOT.ALLOCATED(COUT_VAR)) THEN
+      ALLOCATE(COUT_VAR (NMODEL,JPOUTVARMAX))
+      COUT_VAR(:,:)  = ''
+    END IF
+    READ(UNIT=ILUSEG,NML=NAM_BACKUP)
+  ELSE
+    CALL POSNAM(ILUSEG,'NAM_FMOUT',GFOUND)
+    IF (GFOUND) THEN
+      CALL PRINT_MSG(NVERB_FATAL,'IO','READ_EXSEG_n','use namelist NAM_BACKUP instead of namelist NAM_FMOUT')
+    ELSE
+      IF (CPROGRAM=='MESONH') CALL PRINT_MSG(NVERB_ERROR,'IO','READ_EXSEG_n','namelist NAM_BACKUP not found')
+    END IF
+  END IF
+  CALL POSNAM(ILUSEG,'NAM_OUTPUT',GFOUND,ILUOUT)
+  IF (GFOUND) THEN
+    !Should have been allocated before in READ_DESFM_n
+    IF (.NOT.ALLOCATED(XBAK_TIME)) THEN
+      ALLOCATE(XBAK_TIME(NMODEL,JPOUTMAX)) !Allocate *BAK* variables to prevent
+      XBAK_TIME(:,:) = XNEGUNDEF
+    END IF
+    IF (.NOT.ALLOCATED(XOUT_TIME)) THEN
+      ALLOCATE(XOUT_TIME(NMODEL,JPOUTMAX))
+      XOUT_TIME(:,:) = XNEGUNDEF
+    END IF
+    IF (.NOT.ALLOCATED(NBAK_STEP)) THEN
+      ALLOCATE(NBAK_STEP(NMODEL,JPOUTMAX)) !problems if NAM_BACKUP does not exist
+      NBAK_STEP(:,:) = NNEGUNDEF
+    END IF
+    IF (.NOT.ALLOCATED(NOUT_STEP)) THEN
+      ALLOCATE(NOUT_STEP(NMODEL,JPOUTMAX))
+      NOUT_STEP(:,:) = NNEGUNDEF
+    END IF
+    IF (.NOT.ALLOCATED(COUT_VAR)) THEN
+      ALLOCATE(COUT_VAR (NMODEL,JPOUTVARMAX))
+      COUT_VAR(:,:)  = ''
+    END IF
+    READ(UNIT=ILUSEG,NML=NAM_OUTPUT)
+  END IF
+  CALL POSNAM(ILUSEG,'NAM_BUDGET',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BUDGET)
+
+  CALL POSNAM(ILUSEG,'NAM_BU_RU',GFOUND,ILUOUT)
+  IF (GFOUND) THEN
+    IF ( ALLOCATED( CBULIST_RU ) ) THEN
+      CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RU was already allocated' )
+      DEALLOCATE( CBULIST_RU )
+    END IF
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RU(NBULISTMAXLINES) )
+    CBULIST_RU(:) = ''
+    READ(UNIT=ILUSEG,NML=NAM_BU_RU)
+  ELSE
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RU(0) )
+  END IF
+
+  CALL POSNAM(ILUSEG,'NAM_BU_RV',GFOUND,ILUOUT)
+  IF (GFOUND) THEN
+    IF ( ALLOCATED( CBULIST_RV ) ) THEN
+      CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RV was already allocated' )
+      DEALLOCATE( CBULIST_RV )
+    END IF
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RV(NBULISTMAXLINES) )
+    CBULIST_RV(:) = ''
+    READ(UNIT=ILUSEG,NML=NAM_BU_RV)
+  ELSE
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RV(0) )
+  END IF
+
+  CALL POSNAM(ILUSEG,'NAM_BU_RW',GFOUND,ILUOUT)
+  IF (GFOUND) THEN
+    IF ( ALLOCATED( CBULIST_RW ) ) THEN
+      CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RW was already allocated' )
+      DEALLOCATE( CBULIST_RW )
+    END IF
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RW(NBULISTMAXLINES) )
+    CBULIST_RW(:) = ''
+    READ(UNIT=ILUSEG,NML=NAM_BU_RW)
+  ELSE
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RW(0) )
+  END IF
+
+  CALL POSNAM(ILUSEG,'NAM_BU_RTH',GFOUND,ILUOUT)
+  IF (GFOUND) THEN
+    IF ( ALLOCATED( CBULIST_RTH ) ) THEN
+      CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RTH was already allocated' )
+      DEALLOCATE( CBULIST_RTH )
+    END IF
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RTH(NBULISTMAXLINES) )
+    CBULIST_RTH(:) = ''
+    READ(UNIT=ILUSEG,NML=NAM_BU_RTH)
+  ELSE
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RTH(0) )
+  END IF
+
+  CALL POSNAM(ILUSEG,'NAM_BU_RTKE',GFOUND,ILUOUT)
+  IF (GFOUND) THEN
+    IF ( ALLOCATED( CBULIST_RTKE ) ) THEN
+      CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RTKE was already allocated' )
+      DEALLOCATE( CBULIST_RTKE )
+    END IF
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RTKE(NBULISTMAXLINES) )
+    CBULIST_RTKE(:) = ''
+    READ(UNIT=ILUSEG,NML=NAM_BU_RTKE)
+  ELSE
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RTKE(0) )
+  END IF
+
+  CALL POSNAM(ILUSEG,'NAM_BU_RRV',GFOUND,ILUOUT)
+  IF (GFOUND) THEN
+    IF ( ALLOCATED( CBULIST_RRV ) ) THEN
+      CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRV was already allocated' )
+      DEALLOCATE( CBULIST_RRV )
+    END IF
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRV(NBULISTMAXLINES) )
+    CBULIST_RRV(:) = ''
+    READ(UNIT=ILUSEG,NML=NAM_BU_RRV)
+  ELSE
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRV(0) )
+  END IF
+
+  CALL POSNAM(ILUSEG,'NAM_BU_RRC',GFOUND,ILUOUT)
+  IF (GFOUND) THEN
+    IF ( ALLOCATED( CBULIST_RRC ) ) THEN
+      CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRC was already allocated' )
+      DEALLOCATE( CBULIST_RRC )
+    END IF
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRC(NBULISTMAXLINES) )
+    CBULIST_RRC(:) = ''
+    READ(UNIT=ILUSEG,NML=NAM_BU_RRC)
+  ELSE
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRC(0) )
+  END IF
+
+  CALL POSNAM(ILUSEG,'NAM_BU_RRR',GFOUND,ILUOUT)
+  IF (GFOUND) THEN
+    IF ( ALLOCATED( CBULIST_RRR ) ) THEN
+      CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRR was already allocated' )
+      DEALLOCATE( CBULIST_RRR )
+    END IF
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRR(NBULISTMAXLINES) )
+    CBULIST_RRR(:) = ''
+    READ(UNIT=ILUSEG,NML=NAM_BU_RRR)
+  ELSE
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRR(0) )
+  END IF
+
+  CALL POSNAM(ILUSEG,'NAM_BU_RRI',GFOUND,ILUOUT)
+  IF (GFOUND) THEN
+    IF ( ALLOCATED( CBULIST_RRI ) ) THEN
+      CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRI was already allocated' )
+      DEALLOCATE( CBULIST_RRI )
+    END IF
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRI(NBULISTMAXLINES) )
+    CBULIST_RRI(:) = ''
+    READ(UNIT=ILUSEG,NML=NAM_BU_RRI)
+  ELSE
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRI(0) )
+  END IF
+
+  CALL POSNAM(ILUSEG,'NAM_BU_RRS',GFOUND,ILUOUT)
+  IF (GFOUND) THEN
+    IF ( ALLOCATED( CBULIST_RRS ) ) THEN
+      CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRS was already allocated' )
+      DEALLOCATE( CBULIST_RRS )
+    END IF
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRS(NBULISTMAXLINES) )
+    CBULIST_RRS(:) = ''
+    READ(UNIT=ILUSEG,NML=NAM_BU_RRS)
+  ELSE
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRS(0) )
+  END IF
+
+  CALL POSNAM(ILUSEG,'NAM_BU_RRG',GFOUND,ILUOUT)
+  IF (GFOUND) THEN
+    IF ( ALLOCATED( CBULIST_RRG ) ) THEN
+      CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRG was already allocated' )
+      DEALLOCATE( CBULIST_RRG )
+    END IF
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRG(NBULISTMAXLINES) )
+    CBULIST_RRG(:) = ''
+    READ(UNIT=ILUSEG,NML=NAM_BU_RRG)
+  ELSE
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRG(0) )
+  END IF
+
+  CALL POSNAM(ILUSEG,'NAM_BU_RRH',GFOUND,ILUOUT)
+  IF (GFOUND) THEN
+    IF ( ALLOCATED( CBULIST_RRH ) ) THEN
+      CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RRH was already allocated' )
+      DEALLOCATE( CBULIST_RRH )
+    END IF
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRH(NBULISTMAXLINES) )
+    CBULIST_RRH(:) = ''
+    READ(UNIT=ILUSEG,NML=NAM_BU_RRH)
+  ELSE
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RRH(0) )
+  END IF
+
+  CALL POSNAM(ILUSEG,'NAM_BU_RSV',GFOUND,ILUOUT)
+  IF (GFOUND) THEN
+    IF ( ALLOCATED( CBULIST_RSV ) ) THEN
+      CALL Print_msg( NVERB_WARNING, 'IO', 'READ_EXSEG_n', 'unexpected: CBULIST_RSV was already allocated' )
+      DEALLOCATE( CBULIST_RSV )
+    END IF
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RSV(NBULISTMAXLINES) )
+    CBULIST_RSV(:) = ''
+    READ(UNIT=ILUSEG,NML=NAM_BU_RSV)
+  ELSE
+    ALLOCATE( CHARACTER(LEN=NBULISTMAXLEN) :: CBULIST_RSV(0) )
+  END IF
+
+  CALL POSNAM(ILUSEG,'NAM_LES',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_LES)
+  CALL POSNAM(ILUSEG,'NAM_MEAN',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_MEAN)
+  CALL POSNAM(ILUSEG,'NAM_PDF',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PDF)
+  CALL POSNAM(ILUSEG,'NAM_FRC',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_FRC)
+  CALL POSNAM(ILUSEG,'NAM_PARAM_ICE',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_ICE)
+  CALL POSNAM(ILUSEG,'NAM_PARAM_C2R2',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_C2R2)
+  CALL POSNAM(ILUSEG,'NAM_PARAM_C1R3',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_C1R3)
+  CALL POSNAM(ILUSEG,'NAM_PARAM_LIMA',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PARAM_LIMA)
+  CALL POSNAM(ILUSEG,'NAM_ELEC',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_ELEC)
+  CALL POSNAM(ILUSEG,'NAM_SERIES',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_SERIES)
+  CALL POSNAM(ILUSEG,'NAM_TURB_CLOUD',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_TURB_CLOUD)
+  CALL POSNAM(ILUSEG,'NAM_TURB',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_TURB)
+  CALL POSNAM(ILUSEG,'NAM_CH_ORILAM',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CH_ORILAM)
+  CALL POSNAM(ILUSEG,'NAM_DUST',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_DUST)
+  CALL POSNAM(ILUSEG,'NAM_SALT',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_SALT)
+  CALL POSNAM(ILUSEG,'NAM_PASPOL',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PASPOL)
+#ifdef MNH_FOREFIRE
+  CALL POSNAM(ILUSEG,'NAM_FOREFIRE',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_FOREFIRE)
+#endif
+  CALL POSNAM(ILUSEG,'NAM_CONDSAMP',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONDSAMP)
+  CALL POSNAM(ILUSEG,'NAM_2D_FRC',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_2D_FRC)
+  CALL POSNAM(ILUSEG,'NAM_LATZ_EDFLX',GFOUND)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_LATZ_EDFLX)
+  CALL POSNAM(ILUSEG,'NAM_BLOWSNOW',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BLOWSNOW)
+  CALL POSNAM(ILUSEG,'NAM_VISC',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_VISC)
+
+  CALL POSNAM(ILUSEG,'NAM_FLYERS',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_FLYERS)
+
+  IF ( NAIRCRAFTS > 0 ) THEN
+    CALL AIRCRAFTS_NML_ALLOCATE( NAIRCRAFTS )
+    CALL POSNAM(ILUSEG,'NAM_AIRCRAFTS',GFOUND,ILUOUT)
+    IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_AIRCRAFTS)
+  END IF
+
+  IF ( NBALLOONS > 0 ) THEN
+    CALL BALLOONS_NML_ALLOCATE( NBALLOONS )
+    CALL POSNAM(ILUSEG,'NAM_BALLOONS',GFOUND,ILUOUT)
+    IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BALLOONS)
+  END IF
+END IF
+!
+!-------------------------------------------------------------------------------
+!
+CALL TEST_NAM_VAR(ILUOUT,'CPRESOPT',CPRESOPT,'RICHA','CGRAD','CRESI','ZRESI')
+!
+CALL TEST_NAM_VAR(ILUOUT,'CUVW_ADV_SCHEME',CUVW_ADV_SCHEME, &
+       'CEN4TH','CEN2ND','WENO_K' ) 
+CALL TEST_NAM_VAR(ILUOUT,'CMET_ADV_SCHEME',CMET_ADV_SCHEME, &
+      &'PPM_00','PPM_01','PPM_02')
+CALL TEST_NAM_VAR(ILUOUT,'CSV_ADV_SCHEME',CSV_ADV_SCHEME,   &
+      &'PPM_00','PPM_01','PPM_02')
+CALL TEST_NAM_VAR(ILUOUT,'CTEMP_SCHEME',CTEMP_SCHEME,       &
+  &'RK11','RK21','RK33','RKC4','RK53','RK4B','RK62','RK65','NP32','SP32','LEFR')
+!
+CALL TEST_NAM_VAR(ILUOUT,'CTURB',CTURB,'NONE','TKEL')
+CALL TEST_NAM_VAR(ILUOUT,'CRAD',CRAD,'NONE','FIXE','ECMW',&
+#ifdef MNH_ECRAD
+                 'ECRA',&
+#endif
+                 'TOPA')
+CALL TEST_NAM_VAR(ILUOUT,'CCLOUD',CCLOUD,'NONE','REVE','KESS',  &
+      & 'ICE3','ICE4','C2R2','C3R5','KHKO','LIMA')
+CALL TEST_NAM_VAR(ILUOUT,'CDCONV',CDCONV,'NONE','KAFR')
+CALL TEST_NAM_VAR(ILUOUT,'CSCONV',CSCONV,'NONE','KAFR','EDKF')
+CALL TEST_NAM_VAR(ILUOUT,'CELEC',CELEC,'NONE','ELE3','ELE4')
+!
+CALL TEST_NAM_VAR(ILUOUT,'CAER',CAER,'TANR','TEGE','SURF','NONE')
+CALL TEST_NAM_VAR(ILUOUT,'CAOP',CAOP,'CLIM','EXPL')
+CALL TEST_NAM_VAR(ILUOUT,'CLW',CLW,'RRTM','MORC')
+CALL TEST_NAM_VAR(ILUOUT,'CEFRADL',CEFRADL,'PRES','OCLN','MART','C2R2','LIMA')
+CALL TEST_NAM_VAR(ILUOUT,'CEFRADI',CEFRADI,'FX40','LIOU','SURI','C3R5','LIMA')
+CALL TEST_NAM_VAR(ILUOUT,'COPWLW',COPWLW,'SAVI','SMSH','LILI','MALA')
+CALL TEST_NAM_VAR(ILUOUT,'COPILW',COPILW,'FULI','EBCU','SMSH','FU98')
+CALL TEST_NAM_VAR(ILUOUT,'COPWSW',COPWSW,'SLIN','FOUQ','MALA')
+CALL TEST_NAM_VAR(ILUOUT,'COPISW',COPISW,'FULI','EBCU','FU96')
+!
+CALL TEST_NAM_VAR(ILUOUT,'CLBCX(1)',CLBCX(1),'CYCL','WALL','OPEN')
+CALL TEST_NAM_VAR(ILUOUT,'CLBCX(2)',CLBCX(2),'CYCL','WALL','OPEN')
+CALL TEST_NAM_VAR(ILUOUT,'CLBCY(1)',CLBCY(1),'CYCL','WALL','OPEN')
+CALL TEST_NAM_VAR(ILUOUT,'CLBCY(2)',CLBCY(2),'CYCL','WALL','OPEN')
+!
+CALL TEST_NAM_VAR(ILUOUT,'CTURBDIM',CTURBDIM,'1DIM','3DIM')
+CALL TEST_NAM_VAR(ILUOUT,'CTURBLEN',CTURBLEN,'DELT','BL89','RM17','DEAR','BLKR','HM21')
+CALL TEST_NAM_VAR(ILUOUT,'CTOM',CTOM,'NONE','TM06')
+CALL TEST_NAM_VAR(ILUOUT,'CSUBG_AUCV',CSUBG_AUCV,'NONE','CLFR','SIGM','PDF','ADJU')
+CALL TEST_NAM_VAR(ILUOUT,'CSUBG_AUCV_RI',CSUBG_AUCV_RI,'NONE','CLFR','ADJU')
+CALL TEST_NAM_VAR(ILUOUT,'CCONDENS',CCONDENS,'CB02','GAUS')
+CALL TEST_NAM_VAR(ILUOUT,'CLAMBDA3',CLAMBDA3,'CB','NONE')
+CALL TEST_NAM_VAR(ILUOUT,'CSUBG_MF_PDF',CSUBG_MF_PDF,'NONE','TRIANGLE')
+!
+CALL TEST_NAM_VAR(ILUOUT,'CCH_TDISCRETIZATION',CCH_TDISCRETIZATION, &
+                 'SPLIT     ','CENTER    ','LAGGED    ')
+!
+CALL TEST_NAM_VAR(ILUOUT,'CCONF',CCONF,'START','RESTA')
+CALL TEST_NAM_VAR(ILUOUT,'CEQNSYS',CEQNSYS,'LHE','DUR','MAE')
+CALL TEST_NAM_VAR(ILUOUT,'CSPLIT',CSPLIT,'BSPLITTING','XSPLITTING','YSPLITTING')
+!
+CALL TEST_NAM_VAR(ILUOUT,'CBUTYPE',CBUTYPE,'NONE','CART','MASK')
+!
+CALL TEST_NAM_VAR(ILUOUT,'CRELAX_HEIGHT_TYPE',CRELAX_HEIGHT_TYPE,'FIXE','THGR')
+!
+CALL TEST_NAM_VAR(ILUOUT,'CLES_NORM_TYPE',CLES_NORM_TYPE,'NONE','CONV','EKMA','MOBU')
+CALL TEST_NAM_VAR(ILUOUT,'CBL_HEIGHT_DEF',CBL_HEIGHT_DEF,'TKE','KE','WTV','FRI','DTH')
+CALL TEST_NAM_VAR(ILUOUT,'CTURBLEN_CLOUD',CTURBLEN_CLOUD,'NONE','DEAR','DELT','BL89')
+!
+!   The test on the mass flux scheme for shallow convection
+!
+CALL TEST_NAM_VAR(ILUOUT,'CMF_UPDRAFT',CMF_UPDRAFT,'NONE','EDKF','RHCJ')
+CALL TEST_NAM_VAR(ILUOUT,'CMF_CLOUD',CMF_CLOUD,'NONE','STAT','DIRE')
+!
+!   The test on the CSOLVER name is made elsewhere
+!
+CALL TEST_NAM_VAR(ILUOUT,'CPRISTINE_ICE',CPRISTINE_ICE,'PLAT','COLU','BURO')
+CALL TEST_NAM_VAR(ILUOUT,'CSEDIM',CSEDIM,'SPLI','STAT','NONE')
+IF( CCLOUD == 'C3R5' ) THEN
+  CALL TEST_NAM_VAR(ILUOUT,'CPRISTINE_ICE_C1R3',CPRISTINE_ICE_C1R3, &
+                                                'PLAT','COLU','BURO')
+  CALL TEST_NAM_VAR(ILUOUT,'CHEVRIMED_ICE_C1R3',CHEVRIMED_ICE_C1R3, &
+                                                'GRAU','HAIL')
+END IF
+!
+IF( CCLOUD == 'LIMA' ) THEN
+  CALL TEST_NAM_VAR(ILUOUT,'CPRISTINE_ICE_LIMA',CPRISTINE_ICE_LIMA, &
+                                                'PLAT','COLU','BURO')
+  CALL TEST_NAM_VAR(ILUOUT,'CHEVRIMED_ICE_LIMA',CHEVRIMED_ICE_LIMA, &
+                                                'GRAU','HAIL')
+END IF
+! Blaze
+CALL UPDATE_NAM_FIREn
+IF (LBLAZE) THEN
+  CALL TEST_NAM_VAR(ILUOUT,'CPROPAG_MODEL',CPROPAG_MODEL,'SANTONI2011')
+  CALL TEST_NAM_VAR(ILUOUT,'CHEAT_FLUX_MODEL',CHEAT_FLUX_MODEL,'CST','EXP','EXS')
+  CALL TEST_NAM_VAR(ILUOUT,'CLATENT_FLUX_MODEL',CLATENT_FLUX_MODEL,'CST','EXP')
+  CALL TEST_NAM_VAR(ILUOUT,'CFIRE_CPL_MODE',CFIRE_CPL_MODE,'2WAYCPL','FIR2ATM','ATM2FIR')
+  CALL TEST_NAM_VAR(ILUOUT,'CWINDFILTER',CWINDFILTER,'EWAM','WLIM')
+END IF
+!
+IF(LBLOWSNOW) THEN
+       CALL TEST_NAM_VAR(ILUOUT,'CSNOWSEDIM',CSNOWSEDIM,'NONE','MITC','CARR','TABC')
+       IF (XALPHA_SNOW .NE. 3 .AND. CSNOWSEDIM=='TABC') THEN
+         WRITE(ILUOUT,*) '*****************************************'
+         WRITE(ILUOUT,*) '* XALPHA_SNW must be set to 3 when                '
+         WRITE(ILUOUT,*) '* CSNOWSEDIM = TABC                                 '
+         WRITE(ILUOUT,*) '* Update the look-up table in BLOWSNOW_SEDIM_LKT1D    '
+         WRITE(ILUOUT,*) '* to use TABC with a different value of XEMIALPHA_SNW'
+         WRITE(ILUOUT,*) '*****************************************'
+         !callabortstop
+         CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+       ENDIF
+END IF
+!
+!-------------------------------------------------------------------------------!
+!*       2.    FIRST INITIALIZATIONS
+!              ---------------------
+!
+!*       2.1   Time step in gridnesting case
+!
+IF (KMI /= 1 .AND. NDAD(KMI) /= KMI)  THEN
+  XTSTEP = PTSTEP_ALL(NDAD(KMI)) / NDTRATIO(KMI)
+END IF
+PTSTEP_ALL(KMI) = XTSTEP
+!
+!*       2.2    Fill the global configuration module 
+!
+! Check coherence between the microphysical scheme and water species and 
+!initialize the logicals LUSERn 
+!
+SELECT CASE ( CCLOUD )
+  CASE ( 'NONE' )
+    IF (.NOT. ( (.NOT. LUSERC) .AND. (.NOT. LUSERR) .AND. (.NOT. LUSERI) .AND. &
+                (.NOT. LUSERS) .AND. (.NOT. LUSERG) .AND. (.NOT. LUSERH)       &
+              ) .AND. CPROGRAM=='MESONH' )  THEN
+!
+      LUSERC=.FALSE.
+      LUSERR=.FALSE.; LUSERI=.FALSE.
+      LUSERS=.FALSE.; LUSERG=.FALSE. 
+      LUSERH=.FALSE.
+!
+    END IF
+!
+    IF (CSUBG_AUCV == 'SIGM')  THEN
+!
+      WRITE(UNIT=ILUOUT,FMT=9002) KMI
+      WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE THE SUBGRID AUTOCONVERSION SCHEME '                                         
+      WRITE(UNIT=ILUOUT,FMT=*) ' WITHOUT MICROPHYSICS'                         
+      WRITE(UNIT=ILUOUT,FMT=*) ' CSUBG_AUCV IS PUT TO "NONE"'                            
+!
+      CSUBG_AUCV = 'NONE'
+!
+    END IF
+!
+  CASE ( 'REVE' ) 
+    IF (.NOT. ( LUSERV .AND. LUSERC .AND. (.NOT. LUSERR) .AND. (.NOT. LUSERI) &
+               .AND. (.NOT. LUSERS) .AND. (.NOT. LUSERG) .AND. (.NOT. LUSERH) &
+              ) )  THEN
+!
+      WRITE(UNIT=ILUOUT,FMT=9002) KMI
+      WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE A REVERSIBLE MICROPHYSICAL "   ,&
+      &" SCHEME. YOU WILL ONLY HAVE VAPOR AND CLOUD WATER ",/,                 &
+      &" LUSERV AND LUSERC ARE TO TRUE AND THE OTHERS TO FALSE ")') 
+!
+      LUSERV=.TRUE. ; LUSERC=.TRUE.
+      LUSERR=.FALSE.; LUSERI=.FALSE.
+      LUSERS=.FALSE.; LUSERG=.FALSE. 
+      LUSERH=.FALSE.
+    END IF
+!
+    IF (CSUBG_AUCV == 'SIGM')  THEN
+!
+      WRITE(UNIT=ILUOUT,FMT=9003) KMI
+      WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE BOTH A REVERSIBLE MICROPHYSICAL SCHEME '
+      WRITE(UNIT=ILUOUT,FMT=*) ' AND THE SUBGRID AUTOCONVERSION SCHEME '       
+      WRITE(UNIT=ILUOUT,FMT=*) 'BUT YOU DO NOT HAVE RAIN in the "REVE" SCHEME'
+      WRITE(UNIT=ILUOUT,FMT=*) ' CSUBG_AUCV IS PUT TO "NONE"'                            
+!
+      CSUBG_AUCV = 'NONE'
+!
+    END IF
+!
+  CASE ( 'KESS' )
+    IF (.NOT. ( LUSERV .AND. LUSERC .AND. LUSERR .AND. (.NOT. LUSERI) .AND. &
+              (.NOT. LUSERS) .AND. (.NOT. LUSERG) .AND. (.NOT. LUSERH)      &
+              ) )  THEN
+!
+      WRITE(UNIT=ILUOUT,FMT=9002) KMI
+      WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE A KESSLER MICROPHYSICAL "   , &
+      &" SCHEME. YOU WILL ONLY HAVE VAPOR, CLOUD WATER AND RAIN ",/,           &
+      &" LUSERV, LUSERC AND LUSERR ARE SET TO TRUE AND THE OTHERS TO FALSE ")') 
+!
+      LUSERV=.TRUE. ; LUSERC=.TRUE. ; LUSERR=.TRUE.
+      LUSERI=.FALSE.; LUSERS=.FALSE.
+      LUSERG=.FALSE.; LUSERH=.FALSE.
+    END IF
+!
+    IF (CSUBG_AUCV == 'SIGM')  THEN
+!
+      WRITE(UNIT=ILUOUT,FMT=9003) KMI
+      WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE BOTH A KESSLER MICROPHYSICAL SCHEME '
+      WRITE(UNIT=ILUOUT,FMT=*) ' AND THE SUBGRID AUTOCONVERSION SCHEME USING'
+      WRITE(UNIT=ILUOUT,FMT=*) 'SIGMA_RC.'
+      WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT YET AVAILABLE.'
+      WRITE(UNIT=ILUOUT,FMT=*) 'SET CSUBG_AUCV TO "CLFR" or "NONE"  OR CCLOUD TO "ICE3"'
+!
+ !callabortstop
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+    END IF
+!
+  CASE ( 'ICE3' )
+    IF (.NOT. ( LUSERV .AND. LUSERC .AND. LUSERR .AND. LUSERI .AND. LUSECI &
+                       .AND. LUSERS .AND. LUSERG .AND. (.NOT. LUSERH))     &
+                .AND. CPROGRAM=='MESONH' )  THEN
+      !
+      WRITE(UNIT=ILUOUT,FMT=9002) KMI
+      WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE THE ice3 SIMPLE MIXED PHASE'
+      WRITE(UNIT=ILUOUT,FMT=*) 'MICROPHYSICAL SCHEME. YOU WILL ONLY HAVE VAPOR, CLOUD WATER,'
+      WRITE(UNIT=ILUOUT,FMT=*) 'RAIN WATER, CLOUD ICE (MIXING RATIO AND CONCENTRATION)'
+      WRITE(UNIT=ILUOUT,FMT=*) 'SNOW-AGGREGATES AND GRAUPELN.'
+      WRITE(UNIT=ILUOUT,FMT=*) 'LUSERV,LUSERC,LUSERR,LUSERI,LUSECI,LUSERS,LUSERG ARE SET TO TRUE'
+      WRITE(UNIT=ILUOUT,FMT=*) 'AND LUSERH TO FALSE'
+!
+      LUSERV=.TRUE. ; LUSERC=.TRUE. ; LUSERR=.TRUE.
+      LUSERI=.TRUE. ; LUSECI=.TRUE.
+      LUSERS=.TRUE. ; LUSERG=.TRUE. 
+      LUSERH=.FALSE.
+    END IF    
+!
+    IF (CSUBG_AUCV == 'SIGM' .AND. .NOT. LSUBG_COND)  THEN
+      WRITE(UNIT=ILUOUT,FMT=9002) KMI
+      WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE SUBGRID AUTOCONVERSION SCHEME'
+      WRITE(UNIT=ILUOUT,FMT=*) ' WITHOUT THE SUBGRID CONDENSATION SCHEME.'
+      WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT ALLOWED: CSUBG_AUCV is SET to NONE' 
+      CSUBG_AUCV='NONE' 
+    END IF
+!
+    IF (CSUBG_AUCV == 'CLFR' .AND. CSCONV /= 'EDKF')  THEN
+      WRITE(UNIT=ILUOUT,FMT=9002) KMI
+      WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE SUBGRID AUTOCONVERSION SCHEME'
+      WRITE(UNIT=ILUOUT,FMT=*) 'WITH THE CONVECTIVE CLOUD FRACTION WITHOUT EDKF'
+      WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT ALLOWED: CSUBG_AUCV is SET to NONE' 
+      CSUBG_AUCV='NONE' 
+    END IF
+!
+  CASE ( 'ICE4' )
+    IF (.NOT. ( LUSERV .AND. LUSERC .AND. LUSERR .AND. LUSERI .AND. LUSECI &
+                       .AND. LUSERS .AND. LUSERG .AND. LUSERH)             &
+                .AND. CPROGRAM=='MESONH' )  THEN
+      !
+      WRITE(UNIT=ILUOUT,FMT=9002) KMI
+      WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE THE ice4 SIMPLE MIXED PHASE'
+      WRITE(UNIT=ILUOUT,FMT=*) 'MICROPHYSICAL SCHEME. YOU WILL ONLY HAVE VAPOR, CLOUD WATER,'
+      WRITE(UNIT=ILUOUT,FMT=*) 'RAIN WATER, CLOUD ICE (MIXING RATIO AND CONCENTRATION)'
+      WRITE(UNIT=ILUOUT,FMT=*) 'SNOW-AGGREGATES, GRAUPELN AND HAILSTONES.'
+      WRITE(UNIT=ILUOUT,FMT=*) 'LUSERV,LUSERC,LUSERR,LUSERI,LUSECI,LUSERS,LUSERG'
+      WRITE(UNIT=ILUOUT,FMT=*) 'AND LUSERH ARE SET TO TRUE'
+!
+      LUSERV=.TRUE. ; LUSERC=.TRUE. ; LUSERR=.TRUE.
+      LUSERI=.TRUE. ; LUSECI=.TRUE.
+      LUSERS=.TRUE. ; LUSERG=.TRUE. ; LUSERH=.TRUE.
+    END IF
+!
+    IF (CSUBG_AUCV /= 'NONE' .AND. .NOT. LSUBG_COND)  THEN
+      WRITE(UNIT=ILUOUT,FMT=9002) KMI
+      WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE SUBGRID AUTOCONVERSION SCHEME'
+      WRITE(UNIT=ILUOUT,FMT=*) ' WITHOUT THE SUBGRID CONDENSATION SCHEME.'
+      WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT ALLOWED: CSUBG_AUCV is SET to NONE' 
+      CSUBG_AUCV='NONE' 
+    END IF
+!
+  CASE ( 'C2R2','C3R5', 'KHKO' )
+    IF (( EPARAM_CCN == 'XXX') .OR. (EINI_CCN  == 'XXX')) THEN
+          WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE A 2-MOMENT MICROPHYSICAL ",    &
+         &" SCHEME BUT YOU DIDNT FILL CORRECTLY NAM_PARAM_C2R2", &
+         &" YOU HAVE TO FILL HPARAM_CCN and HINI_CCN ")')
+ !callabortstop
+        CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+    END IF
+    IF (HCLOUD == 'NONE') THEN
+      CGETCLOUD = 'SKIP'
+    ELSE IF (HCLOUD == 'REVE' ) THEN
+      CGETCLOUD = 'INI1'
+    ELSE IF (HCLOUD == 'KESS' ) THEN
+      CGETCLOUD = 'INI2'
+    ELSE IF (HCLOUD == 'ICE3' ) THEN
+      IF (CCLOUD == 'C3R5') THEN
+        CGETCLOUD = 'INI2'
+      ELSE
+        WRITE(UNIT=ILUOUT,FMT=9003) KMI
+        WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE WARM MICROPHYSICAL ",    &
+        &" SCHEME BUT YOU WERE USING THE ICE3 SCHEME PREVIOUSLY.",/,          &
+        &" AS THIS IS A LITTLE BIT STUPID IT IS NOT AUTHORIZED !!!")')
+ !callabortstop
+        CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+      END IF
+    ELSE
+      CGETCLOUD = 'READ' ! This is automatically done
+    END IF
+!
+    IF ((CCLOUD == 'C2R2' ).OR. (CCLOUD == 'KHKO' )) THEN
+      IF (.NOT. ( LUSERV .AND. LUSERC .AND. LUSERR .AND. (.NOT. LUSERI) .AND. &
+                (.NOT. LUSERS) .AND. (.NOT. LUSERG) .AND. (.NOT. LUSERH)      &
+                ) )  THEN
+        WRITE(UNIT=ILUOUT,FMT=9002) KMI
+        WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE C2R2 MICROPHYSICAL ",    &
+        &" SCHEME. YOU WILL ONLY HAVE VAPOR, CLOUD WATER AND RAIN ",/,        &
+        &"LUSERV, LUSERC AND LUSERR ARE SET TO TRUE AND THE OTHERS TO FALSE ")')
+!
+        LUSERV=.TRUE. ; LUSERC=.TRUE. ; LUSERR=.TRUE.
+        LUSERI=.FALSE.; LUSERS=.FALSE.
+        LUSERG=.FALSE.; LUSERH=.FALSE.
+      END IF
+    ELSE IF (CCLOUD == 'C3R5') THEN
+      IF (.NOT. ( LUSERV .AND. LUSERC .AND. LUSERR .AND. LUSERI .AND. &
+                  LUSERS .AND. LUSERG .AND. (.NOT. LUSERH)            &
+                ) )  THEN
+        WRITE(UNIT=ILUOUT,FMT=9002) KMI
+        WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE C3R5 MICROPHYS. SCHEME.",&
+        &" YOU WILL HAVE VAPOR, CLOUD WATER/ICE, RAIN, SNOW AND GRAUPEL ",/,  &
+        &"LUSERV, LUSERC, LUSERR, LUSERI, LUSERS, LUSERG ARE SET TO TRUE")' )
+!
+        LUSERV=.TRUE. ; LUSERC=.TRUE. ; LUSERR=.TRUE.
+        LUSERI=.TRUE. ; LUSECI=.TRUE.
+        LUSERS=.TRUE. ; LUSERG=.TRUE.
+        LUSERH=.FALSE.
+      END IF
+    ELSE IF (CCLOUD == 'LIMA') THEN
+      IF (.NOT. ( LUSERV .AND. LUSERC .AND. LUSERR .AND. LUSERI .AND. &
+                  LUSERS .AND. LUSERG .AND. (.NOT. LUSERH)            &
+                ) )  THEN
+        WRITE(UNIT=ILUOUT,FMT=9002) KMI
+        WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE LIMA MICROPHYS. SCHEME.",&
+        &" YOU WILL HAVE VAPOR, CLOUD WATER/ICE, RAIN, SNOW AND GRAUPEL ",/,  &
+        &"LUSERV, LUSERC, LUSERR, LUSERI, LUSERS, LUSERG ARE SET TO TRUE")' )
+!
+        LUSERV=.TRUE. ; LUSERC=.TRUE. ; LUSERR=.TRUE.
+        LUSERI=.TRUE. ; LUSECI=.TRUE.        
+        LUSERS=.TRUE. ; LUSERG=.TRUE. 
+        LUSERH=.FALSE.
+      END IF
+    END IF
+!
+    IF (LSUBG_COND)  THEN
+      WRITE(UNIT=ILUOUT,FMT=9003) KMI
+      WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE BOTH THE SIMPLE MIXED PHASE'
+      WRITE(UNIT=ILUOUT,FMT=*) 'MICROPHYS. SCHEME AND THE SUBGRID COND. SCHEME.'
+      WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT YET AVAILABLE.'
+      WRITE(UNIT=ILUOUT,FMT=*) 'SET LSUBG_COND TO FALSE OR CCLOUD TO "REVE", "KESS"' 
+ !callabortstop
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+    END IF
+!
+    IF ( CEFRADL /= 'C2R2') THEN
+      WRITE(UNIT=ILUOUT,FMT=9001) KMI
+      WRITE(UNIT=ILUOUT,FMT=*) ' YOU DID NOT CHOOSE CEFRADL=C2R2 FOR RADIATION'
+      WRITE(UNIT=ILUOUT,FMT=*) ' IT IS ADVISED TO USE CEFRADL=C2R2 '                       
+      WRITE(UNIT=ILUOUT,FMT=*) ' WITH A 2-MOMENT MICROPHYSICAL SCHEME'                     
+    END IF
+!
+    IF ( CCLOUD == 'C3R5' .AND. CEFRADI /= 'C3R5') THEN
+      WRITE(UNIT=ILUOUT,FMT=9001) KMI
+      WRITE(UNIT=ILUOUT,FMT=*) ' YOU DID NOT CHOOSE CEFRADI=C3R5 FOR RADIATION'
+      WRITE(UNIT=ILUOUT,FMT=*) ' IT IS ADVISED TO USE CEFRADI=C3R5 '                       
+      WRITE(UNIT=ILUOUT,FMT=*) ' WITH A 2-MOMENT MICROPHYSICAL SCHEME'                     
+    END IF
+!
+   IF ( WALPHAC /= 3.0 .OR. WNUC /= 2.0) THEN
+      WRITE(UNIT=ILUOUT,FMT=9001) KMI
+      WRITE(UNIT=ILUOUT,FMT=*) 'IT IS ADVISED TO USE XALPHAC=3. and XNUC=2.'
+      WRITE(UNIT=ILUOUT,FMT=*) 'FOR STRATOCUMULUS WITH KHKO SCHEME. '
+   END IF
+!
+   IF ( CEFRADL /= 'C2R2') THEN
+      WRITE(UNIT=ILUOUT,FMT=9001) KMI
+      WRITE(UNIT=ILUOUT,FMT=*) ' YOU DID NOT CHOOSE CEFRADL=C2R2 FOR RADIATION'
+      WRITE(UNIT=ILUOUT,FMT=*) ' IT IS ADVISED TO USE CEFRADL=C2R2 '   
+      WRITE(UNIT=ILUOUT,FMT=*) ' WITH A 2-MOMENT MICROPHYSICAL SCHEME'
+   END IF
+!
+  CASE ( 'LIMA')
+    IF ((LACTI .AND. FINI_CCN  == 'XXX')) THEN
+      WRITE(UNIT=ILUOUT,FMT=9001) KMI
+      WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE A 2-MOMENT MICROPHYSICAL ",  &
+           &" SCHEME BUT YOU DIDNT FILL CORRECTLY NAM_PARAM_LIMA",             &
+           &" YOU HAVE TO FILL FINI_CCN ")')
+      call Print_msg( NVERB_FATAL, 'GEN', 'READ_EXSEG_n', '' )
+    END IF
+!
+    IF(LACTI .AND. NMOD_CCN == 0) THEN
+      WRITE(UNIT=ILUOUT,FMT=9001) KMI
+      WRITE(UNIT=ILUOUT,FMT='("ACTIVATION OF AEROSOL PARTICLES IS NOT ",      &
+           &"POSSIBLE IF NMOD_CCN HAS VALUE ZERO. YOU HAVE TO SET AN UPPER ", &
+           &"VALUE OF NMOD_CCN IN ORDER TO USE LIMA WARM ACTIVATION SCHEME.")') 
+      call Print_msg( NVERB_FATAL, 'GEN', 'READ_EXSEG_n', '' )
+    END IF
+!
+    IF(LNUCL .AND. NMOD_IFN == 0 .AND. (.NOT.LMEYERS)) THEN
+      WRITE(UNIT=ILUOUT,FMT=9001) KMI
+      WRITE(UNIT=ILUOUT,FMT='("NUCLEATION BY DEPOSITION AND CONTACT IS NOT ", &
+           &"POSSIBLE IF NMOD_IFN HAS VALUE ZERO. YOU HAVE TO SET AN UPPER",  &
+           &"VALUE OF NMOD_IFN IN ORDER TO USE LIMA COLD NUCLEATION SCHEME.")') 
+    END IF
+!
+    IF (HCLOUD == 'NONE') THEN
+      CGETCLOUD = 'SKIP'
+    ELSE IF (HCLOUD == 'REVE' ) THEN
+      CGETCLOUD = 'INI1'
+    ELSE IF (HCLOUD == 'KESS' ) THEN
+      CGETCLOUD = 'INI2'
+    ELSE IF (HCLOUD == 'ICE3' ) THEN
+      CGETCLOUD = 'INI2'
+    ELSE
+      CGETCLOUD = 'READ' ! This is automatically done
+    END IF
+!
+    IF (NMOM_C.GE.1) THEN
+      LUSERV=.TRUE. ; LUSERC=.TRUE. ; LUSERR=.TRUE.
+      LUSERI=.FALSE.; LUSERS=.FALSE. ; LUSERG=.FALSE.; LUSERH=.FALSE.
+    END IF
+!
+    IF (NMOM_I.GE.1) THEN
+      LUSERV=.TRUE. ; LUSERC=.TRUE. ; LUSERR=.TRUE.
+      LUSERI=.TRUE. ; LUSERS=.TRUE. ; LUSERG=.TRUE.
+      LUSERH= NMOM_H.GE.1
+    END IF
+    !
+    IF (LSPRO) LADJ=.FALSE.
+    IF (.NOT.LPTSPLIT) THEN
+       IF (NMOM_C==1) NMOM_C=2
+       IF (NMOM_R==1) NMOM_R=2
+       IF (NMOM_I==1) NMOM_I=2
+       IF (NMOM_S==2 .OR. NMOM_G==2 .OR. NMOM_H==2) THEN
+          NMOM_S=2
+          NMOM_G=2
+          IF (NMOM_H.GE.1) NMOM_H=2
+       END IF
+    END IF
+!
+    IF (LSUBG_COND .AND. (.NOT. LPTSPLIT)) THEN
+      WRITE(UNIT=ILUOUT,FMT=9001) KMI
+      WRITE(UNIT=ILUOUT,FMT=*) 'YOU MUST USE LPTSPLIT=T with CCLOUD=LIMA'
+      WRITE(UNIT=ILUOUT,FMT=*) 'AND LSUBG_COND '
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','use LPTSPLIT=T with LIMA and LSUBG_COND=T')
+    END IF
+!
+    IF (LSUBG_COND .AND. (.NOT. LADJ)) THEN
+      WRITE(UNIT=ILUOUT,FMT=9001) KMI
+      WRITE(UNIT=ILUOUT,FMT=*) 'YOU MUST USE LADJ=T with CCLOUD=LIMA'
+      WRITE(UNIT=ILUOUT,FMT=*) 'AND LSUBG_COND '
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','use LADJ=T with LIMA and LSUBG_COND=T')
+    END IF
+!    
+    IF ( LKHKO .AND. (XALPHAC /= 3.0 .OR. XNUC /= 2.0) ) THEN
+      WRITE(UNIT=ILUOUT,FMT=9001) KMI
+      WRITE(UNIT=ILUOUT,FMT=*) 'IT IS ADVISED TO USE XALPHAC=3. and XNUC=2.'
+      WRITE(UNIT=ILUOUT,FMT=*) 'FOR STRATOCUMULUS. '
+    END IF
+!
+    IF ( CEFRADL /= 'LIMA') THEN
+      WRITE(UNIT=ILUOUT,FMT=9001) KMI
+      WRITE(UNIT=ILUOUT,FMT=*) ' YOU DID NOT CHOOSE CEFRADL=LIMA FOR RADIATION'
+      WRITE(UNIT=ILUOUT,FMT=*) ' IT IS ADVISED TO USE CEFRADL=LIMA '
+      WRITE(UNIT=ILUOUT,FMT=*) ' WITH A 2-MOMENT MICROPHYSICAL SCHEME "LIMA"'
+    END IF
+!
+END SELECT
+!
+LUSERV_G(KMI) = LUSERV
+LUSERC_G(KMI) = LUSERC
+LUSERR_G(KMI) = LUSERR
+LUSERI_G(KMI) = LUSERI
+LUSERS_G(KMI) = LUSERS
+LUSERG_G(KMI) = LUSERG
+LUSERH_G(KMI) = LUSERH
+LUSETKE(KMI) = (CTURB /= 'NONE')
+!
+!-------------------------------------------------------------------------------
+!
+!*       2.3     Chemical and NSV_* variables initializations
+!
+CALL UPDATE_NAM_IBM_PARAMN
+CALL UPDATE_NAM_RECYCL_PARAMN
+CALL UPDATE_NAM_PARAMN
+CALL UPDATE_NAM_DYNN
+CALL UPDATE_NAM_CONFN
+!
+IF (LORILAM .AND. .NOT. LUSECHEM) THEN
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU CANNOT USE ORILAM AEROSOL SCHEME WITHOUT  '
+  WRITE(ILUOUT,FMT=*) 'CHEMICAL GASEOUS CHEMISTRY                    '
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LUSECHEM IS SET TO TRUE    '
+  LUSECHEM=.TRUE.
+END IF
+!
+IF (LUSECHAQ.AND.(.NOT.LUSECHEM))  THEN
+  WRITE(UNIT=ILUOUT,FMT=9003) KMI
+  WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE AQUEOUS PHASE CHEMISTRY'
+  WRITE(UNIT=ILUOUT,FMT=*) 'BUT THE CHEMISTRY IS NOT ACTIVATED'
+  WRITE(UNIT=ILUOUT,FMT=*) 'SET LUSECHEM TO TRUE IF YOU WANT REALLY USE CHEMISTRY' 
+  WRITE(UNIT=ILUOUT,FMT=*) 'OR SET LUSECHAQ TO FALSE IF YOU DO NOT WANT USE IT' 
+ !callabortstop
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+END IF
+IF (LUSECHAQ.AND.(.NOT.LUSERC).AND.CPROGRAM=='MESONH')  THEN
+  WRITE(UNIT=ILUOUT,FMT=9003) KMI
+  WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE AQUEOUS PHASE CHEMISTRY'
+  WRITE(UNIT=ILUOUT,FMT=*) 'BUT CLOUD MICROPHYSICS IS NOT ACTIVATED'
+  WRITE(UNIT=ILUOUT,FMT=*) 'LUSECHAQ IS SET TO FALSE' 
+  LUSECHAQ = .FALSE.
+END IF
+IF (LUSECHAQ.AND.CCLOUD(1:3) == 'ICE'.AND. .NOT. LUSECHIC) THEN
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE AQUEOUS PHASE CHEMISTRY'
+  WRITE(UNIT=ILUOUT,FMT=*) 'WITH MIXED PHASE CLOUD MICROPHYSICS'
+  WRITE(UNIT=ILUOUT,FMT=*) 'SET LUSECHIC TO TRUE IF YOU WANT TO ACTIVATE'
+  WRITE(UNIT=ILUOUT,FMT=*) 'ICE PHASE CHEMICAL SPECIES'
+  IF (LCH_RET_ICE) THEN
+    WRITE(UNIT=ILUOUT,FMT=*) 'LCH_RET_ICE TRUE MEANS ALL SOLUBLE'
+    WRITE(UNIT=ILUOUT,FMT=*) 'GASES ARE RETAINED IN ICE PHASE'
+    WRITE(UNIT=ILUOUT,FMT=*) 'WHEN SUPERCOOLED WATER FREEZES'
+  ELSE
+    WRITE(UNIT=ILUOUT,FMT=*) 'LCH_RET_ICE FALSE MEANS ALL SOLUBLE'
+    WRITE(UNIT=ILUOUT,FMT=*) 'GASES GO BACK TO THE GAS PHASE WHEN'
+    WRITE(UNIT=ILUOUT,FMT=*) 'SUPERCOOLED WATER FREEZES'
+  ENDIF
+ENDIF
+IF (LUSECHIC.AND. .NOT. CCLOUD(1:3) == 'ICE'.AND.CPROGRAM=='MESONH') THEN
+  WRITE(UNIT=ILUOUT,FMT=9003) KMI
+  WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE ICE PHASE CHEMISTRY'
+  WRITE(UNIT=ILUOUT,FMT=*) 'BUT MIXED PHASE CLOUD MICROPHYSICS IS NOT ACTIVATED'
+  WRITE(UNIT=ILUOUT,FMT=*) 'LUSECHIC IS SET TO FALSE'  
+  LUSECHIC= .FALSE.
+ENDIF
+IF (LCH_PH.AND. (.NOT. LUSECHAQ)) THEN
+  WRITE(UNIT=ILUOUT,FMT=9003) KMI
+  WRITE(UNIT=ILUOUT,FMT=*) 'DIAGNOSTIC PH COMPUTATION IS ACTIVATED'
+  WRITE(UNIT=ILUOUT,FMT=*) 'BUT AQUEOUS PHASE CHEMISTRY IS NOT ACTIVATED'
+  WRITE(UNIT=ILUOUT,FMT=*) 'SET LUSECHAQ TO TRUE IF YOU WANT TO ACTIVATE IT'
+  WRITE(UNIT=ILUOUT,FMT=*) 'LCH_PH IS SET TO FALSE'
+  LCH_PH= .FALSE.
+ENDIF
+IF (LUSECHIC.AND.(.NOT.LUSECHAQ))  THEN
+  WRITE(UNIT=ILUOUT,FMT=9003) KMI
+  WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE ICE PHASE CHEMISTRY'
+  WRITE(UNIT=ILUOUT,FMT=*) 'BUT THE AQUEOUS PHASE CHEMISTRY IS NOT ACTIVATED'
+  WRITE(UNIT=ILUOUT,FMT=*) 'SET LUSECHAQ TO TRUE IF YOU WANT REALLY USE CLOUD CHEMISTRY'
+  WRITE(UNIT=ILUOUT,FMT=*) 'OR SET LUSECHIC TO FALSE IF YOU DO NOT WANT USE IT'
+!callabortstop
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+END IF
+IF ((LUSECHIC).AND.(LCH_RET_ICE)) THEN
+  WRITE(UNIT=ILUOUT,FMT=9003) KMI
+  WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE RETENTION OF SOLUBLE GASES IN ICE'
+  WRITE(UNIT=ILUOUT,FMT=*) 'BUT THE ICE PHASE CHEMISTRY IS ACTIVATED'
+  WRITE(UNIT=ILUOUT,FMT=*) 'FLAG LCH_RET_ICE IS ONLY USES WHEN LUSECHIC IS SET'
+  WRITE(UNIT=ILUOUT,FMT=*) 'TO FALSE IE NO CHEMICAL SPECIES IN ICE' 
+ENDIF
+!
+CALL UPDATE_NAM_CH_MNHCN
+CALL INI_NSV(KMI)
+!
+! From this point, all NSV* variables contain valid values for model KMI
+! 
+DO JSV = 1,NSV
+ LUSESV(JSV,KMI) = .TRUE.
+END DO
+!
+IF ( CAOP=='EXPL' .AND. .NOT.LDUST .AND. .NOT.LORILAM          &
+                  .AND. .NOT.LSALT .AND. .NOT.(CCLOUD=='LIMA') ) THEN
+      WRITE(UNIT=ILUOUT,FMT=9001) KMI
+      WRITE(UNIT=ILUOUT,FMT=*) ' YOU WANT TO USE EXPLICIT AEROSOL OPTICAL '       
+      WRITE(UNIT=ILUOUT,FMT=*) 'PROPERTIES BUT YOU DONT HAVE DUST OR '            
+      WRITE(UNIT=ILUOUT,FMT=*) 'AEROSOL OR SALT THEREFORE CAOP=CLIM'            
+      CAOP='CLIM'
+END IF      
+!-------------------------------------------------------------------------------
+!
+!*       3.    CHECK COHERENCE BETWEEN EXSEG VARIABLES AND FMFILE ATTRIBUTES
+!              -------------------------------------------------------------
+!
+!
+!*       3.1  Turbulence variable 
+!
+IF ((CTURB /= 'NONE').AND.(HTURB == 'NONE')) THEN
+  CGETTKET ='INIT'
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(UNIT=ILUOUT,FMT=*)'YOU WANT TO USE TURBULENCE KINETIC ENERGY TKE'
+  WRITE(UNIT=ILUOUT,FMT=*)'WHEREAS IT  IS NOT IN INITIAL FMFILE'
+  WRITE(UNIT=ILUOUT,FMT=*)'TKE WILL BE INITIALIZED TO ZERO'
+ELSE 
+  IF (CTURB /= 'NONE') THEN 
+    CGETTKET ='READ'
+    IF ((CCONF=='START') .AND. CPROGRAM /= 'DIAG') CGETTKET='INIT' 
+  ELSE
+   CGETTKET ='SKIP'
+  END IF
+END IF
+!
+!
+IF ((CTOM == 'TM06').AND.(HTOM /= 'TM06')) THEN
+  CGETBL_DEPTH ='INIT'
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(UNIT=ILUOUT,FMT=*)'YOU WANT TO USE BL DEPTH FOR THIRD ORDER MOMENTS'
+  WRITE(UNIT=ILUOUT,FMT=*)'WHEREAS IT IS NOT IN INITIAL FMFILE'
+  WRITE(UNIT=ILUOUT,FMT=*)'IT WILL BE INITIALIZED TO ZERO'
+ELSE 
+  IF (CTOM == 'TM06') THEN 
+    CGETBL_DEPTH ='READ'
+  ELSE 
+    CGETBL_DEPTH ='SKIP'
+  END IF
+END IF
+!
+IF (LRMC01 .AND. .NOT. ORMC01) THEN
+  CGETSBL_DEPTH ='INIT'
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(UNIT=ILUOUT,FMT=*)'YOU WANT TO USE SBL DEPTH FOR RMC01'
+  WRITE(UNIT=ILUOUT,FMT=*)'WHEREAS IT IS NOT IN INITIAL FMFILE'
+  WRITE(UNIT=ILUOUT,FMT=*)'IT WILL BE INITIALIZED TO ZERO'
+ELSE 
+  IF (LRMC01) THEN 
+    CGETSBL_DEPTH ='READ'
+  ELSE 
+    CGETSBL_DEPTH ='SKIP'
+  END IF
+END IF
+!
+!
+!*       3.2  Moist  variables 
+!
+IF (LUSERV.AND. (.NOT.OUSERV)) THEN
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE VAPOR VARIABLE Rv WHEREAS IT  ", &
+                  & "IS NOT IN INITIAL FMFILE",/,                           &
+                  & "Rv WILL BE INITIALIZED TO ZERO")')
+  CGETRVT='INIT'
+ELSE                                                                
+  IF (LUSERV) THEN
+    CGETRVT='READ'
+  ELSE
+    CGETRVT='SKIP'
+  END IF
+END IF
+!
+IF (LUSERC.AND. (.NOT.OUSERC)) THEN
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE CLOUD VARIABLE Rc WHEREAS IT ",  &
+                 &   " IS NOT IN INITIAL FMFILE",/,                        &
+                 &   "Rc WILL BE INITIALIZED TO ZERO")')
+  CGETRCT='INIT'
+ELSE
+  IF (LUSERC) THEN
+    CGETRCT='READ'
+!   IF(CCONF=='START') CGETRCT='INIT' 
+  ELSE
+    CGETRCT='SKIP'
+  END IF
+END IF
+!
+IF (LUSERR.AND. (.NOT.OUSERR)) THEN
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE RAIN VARIABLE Rr WHEREAS IT ", &
+                  &  "IS NOT IN INITIAL FMFILE",/,                     &
+                  &  " Rr WILL BE INITIALIZED TO ZERO")')
+ 
+  CGETRRT='INIT'
+ELSE
+  IF (LUSERR) THEN
+    CGETRRT='READ'
+!   IF( (CCONF=='START').AND. CPROGRAM /= 'DIAG') CGETRRT='INIT' 
+  ELSE
+    CGETRRT='SKIP'
+  END IF
+END IF
+!
+IF (LUSERI.AND. (.NOT.OUSERI)) THEN
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE ICE VARIABLE Ri WHEREAS IT ", &
+               &    "IS NOT IN INITIAL FMFILE",/,                      &
+               &     " Ri WILL BE INITIALIZED TO ZERO")')
+  CGETRIT='INIT'
+ELSE
+  IF (LUSERI) THEN
+    CGETRIT='READ'
+!   IF(CCONF=='START') CGETRIT='INIT' 
+  ELSE
+    CGETRIT='SKIP'
+  END IF
+END IF
+!
+IF (LUSECI.AND. (.NOT.OUSECI)) THEN
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE ICE CONC. VARIABLE Ci WHEREAS IT ",&
+               &          "IS NOT IN INITIAL FMFILE",/,                       &
+               &          "   Ci WILL BE INITIALIZED TO ZERO")')
+  CGETCIT='INIT'
+ELSE
+  IF (LUSECI) THEN
+    CGETCIT='READ'
+  ELSE
+    CGETCIT='SKIP'
+  END IF
+END IF
+!
+IF (LUSERS.AND. (.NOT.OUSERS)) THEN
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE SNOW VARIABLE Rs WHEREAS IT ",&
+                  &  "IS NOT IN INITIAL FMFILE",/,                       &
+                  &  " Rs WILL BE INITIALIZED TO ZERO")')
+  CGETRST='INIT'
+ELSE
+  IF (LUSERS) THEN
+    CGETRST='READ'
+!   IF ( (CCONF=='START').AND. CPROGRAM /= 'DIAG') CGETRST='INIT' 
+  ELSE
+    CGETRST='SKIP'
+  END IF
+END IF
+!
+IF (LUSERG.AND. (.NOT.OUSERG)) THEN
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE GRAUPEL VARIABLE Rg WHEREAS ",&
+                   & " IT IS NOTIN INITIAL FMFILE",/,                    &
+                   & "Rg WILL BE INITIALIZED TO ZERO")')
+  CGETRGT='INIT'
+ELSE
+  IF (LUSERG) THEN
+    CGETRGT='READ'
+!   IF ( (CCONF=='START') .AND. CPROGRAM /= 'DIAG') CGETRGT='INIT' 
+  ELSE
+    CGETRGT='SKIP'
+  END IF
+END IF
+!
+IF (LUSERH.AND. (.NOT.OUSERH)) THEN
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE HAIL VARIABLE Rh WHEREAS",&
+                  &  "IT IS NOT IN INITIAL FMFILE",/,                &
+                  & " Rh WILL BE INITIALIZED TO ZERO")')
+   CGETRHT='INIT'
+ELSE
+  IF (LUSERH) THEN
+    CGETRHT='READ'
+!   IF ( (CCONF=='START') .AND. CPROGRAM /= 'DIAG') CGETRHT='INIT' 
+  ELSE
+    CGETRHT='SKIP'
+  END IF
+END IF
+!
+IF (LUSERC.AND. (.NOT.OUSERC)) THEN
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(UNIT=ILUOUT,FMT=*) 'THE CLOUD FRACTION WILL BE INITIALIZED ACCORDING'
+  WRITE(UNIT=ILUOUT,FMT=*) 'TO CLOUD MIXING RATIO VALUE OR SET TO 0'
+  CGETCLDFR = 'INIT'
+ELSE
+  IF ( LUSERC ) THEN
+    CGETCLDFR = 'READ'
+    IF ( (CCONF=='START') .AND. CPROGRAM /= 'DIAG') CGETCLDFR='INIT' 
+  ELSE
+    CGETCLDFR = 'SKIP'
+  END IF
+END IF
+!
+IF (LUSERI.AND. (.NOT.OUSERI)) THEN
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(UNIT=ILUOUT,FMT=*) 'THE ICE CLOUD FRACTION WILL BE INITIALIZED ACCORDING'
+  WRITE(UNIT=ILUOUT,FMT=*) 'TO CLOUD MIXING RATIO VALUE OR SET TO 0'
+  CGETICEFR = 'INIT'
+ELSE
+  IF ( LUSERI ) THEN
+    CGETICEFR = 'READ'
+    IF ( (CCONF=='START') .AND. CPROGRAM /= 'DIAG') CGETICEFR='INIT' 
+  ELSE
+    CGETICEFR = 'SKIP'
+  END IF
+END IF
+!
+IF(CTURBLEN=='RM17' .OR. CTURBLEN=='HM21') THEN
+  XCEDIS=0.34
+ELSE
+  XCEDIS=0.84
+END IF
+!
+!*       3.3  Moist turbulence
+!
+IF ( LUSERC .AND. CTURB /= 'NONE' ) THEN
+  IF ( .NOT. (OUSERC .AND. HTURB /= 'NONE') ) THEN
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE MOIST TURBULENCE WHEREAS IT ",/, &
+                 &   " WAS NOT THE CASE FOR THE INITIAL FMFILE GENERATION",/, &
+                 &    "SRC AND SIGS ARE INITIALIZED TO 0")')
+    CGETSRCT ='INIT'
+    CGETSIGS ='INIT'
+  ELSE
+    CGETSRCT ='READ'
+    IF ( (CCONF=='START') .AND. CPROGRAM /= 'DIAG') CGETSRCT ='INIT'
+    CGETSIGS ='READ'
+  END IF
+ELSE
+  CGETSRCT ='SKIP'
+  CGETSIGS ='SKIP'
+END IF
+!
+IF(NMODEL_CLOUD==KMI .AND. CTURBLEN_CLOUD/='NONE') THEN
+  IF (CTURB=='NONE' .OR. .NOT.LUSERC) THEN
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO COMPUTE A MIXING LENGTH FOR CLOUD=", &
+                 &   A4,/, &
+                 &   ", WHEREAS YOU DO NOT SPECIFY A TURBULENCE SCHEME OR ",  &
+                 &   "USE OF RC,",/," CTURBLEN_CLOUD IS SET TO NONE")')       &
+                 CTURBLEN_CLOUD
+    CTURBLEN_CLOUD='NONE'
+  END IF
+  IF( XCEI_MIN > XCEI_MAX ) THEN
+    WRITE(UNIT=ILUOUT,FMT=9003) KMI
+    WRITE(UNIT=ILUOUT,FMT='("PROBLEM OF CEI LIMITS FOR CLOUD MIXING  ",/, &
+                 &   "LENGTH COMPUTATION: XCEI_MIN=",E9.3,", XCEI_MAX=",E9.3)')&
+                 XCEI_MIN,XCEI_MAX
+ !callabortstop
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+  END IF
+END IF
+!
+IF ( LSIGMAS ) THEN
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE SIGMA_S FROM TURBULENCE SCHEME",/, &
+                 &   " IN ICE SUBGRID CONDENSATION, SO YOUR SIGMA_S"/, &
+                 &   " MIGHT BE SMALL ABOVE PBL DEPENDING ON LENGTH SCALE")')
+END IF
+!
+IF (LSUBG_COND .AND. CTURB=='NONE' ) THEN
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE SUBGRID CONDENSATION'
+  WRITE(UNIT=ILUOUT,FMT=*) ' WITHOUT TURBULENCE '                           
+  WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT ALLOWED: LSUBG_COND is SET to FALSE'
+  LSUBG_COND=.FALSE.
+END IF
+!
+IF (L1D .AND. CTURB/='NONE' .AND. CTURBDIM == '3DIM') THEN
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE 3D TURBULENCE IN 1D CONFIGURATION '
+  WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT POSSIBLE: CTURBDIM IS SET TO 1DIM'
+  CTURBDIM = '1DIM'
+END IF
+!
+!*       3.4  Additional scalar variables 
+!
+IF (NSV_USER == KSV_USER) THEN
+  DO  JS = 1,KSV_USER             ! to read all the variables in initial file 
+    CGETSVT(JS)='READ'            ! and to initialize them 
+!   IF(CCONF=='START')CGETSVT(JS)='INIT'       ! with  these values  
+  END DO
+ELSEIF (NSV_USER > KSV_USER) THEN
+ IF (KSV_USER == 0) THEN
+    CGETSVT(1:NSV_USER)='INIT'
+ ELSE
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE MORE ADDITIONAL SCALAR  " ,&
+  &" VARIABLES THAN THERE ARE IN INITIAL FMFILE",/,                  &
+  & "THE SUPPLEMENTARY VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') 
+  DO  JS = 1,KSV_USER             ! to read all the variables in initial file 
+    CGETSVT(JS)='READ'            ! and to initialize them
+!   IF(CCONF=='START')CGETSVT(JS)='INIT'        ! with  these values
+  END DO
+  DO JS = KSV_USER+1, NSV_USER    ! to initialize to zero supplementary
+    CGETSVT(JS)='INIT'            ! initial file)
+  END DO
+ END IF
+ELSE
+  WRITE(UNIT=ILUOUT,FMT=9000) KMI
+  WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE LESS ADDITIONAL SCALAR  " ,&
+  &" VARIABLES THAN THERE ARE IN INITIAL FMFILE")')
+  DO  JS = 1,NSV_USER             ! to read the first NSV_USER variables in initial file 
+    CGETSVT(JS)='READ'            ! and to initialize with these values
+!   IF(CCONF=='START') CGETSVT(JS)='INIT'  
+  END DO 
+  DO  JS = NSV_USER + 1, KSV_USER ! to skip the last (KSV_USER-NSV_USER) variables
+    CGETSVT(JS)='SKIP' 
+  END DO
+END IF
+!
+! C2R2 and KHKO SV case
+!
+IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO') THEN 
+  IF (HCLOUD == 'C2R2' .OR. HCLOUD == 'C3R5' .OR. HCLOUD == 'KHKO') THEN
+    CGETSVT(NSV_C2R2BEG:NSV_C2R2END)='READ'
+!   IF(CCONF=='START') CGETSVT(NSV_C2R2BEG:NSV_C2R2END)='INIT'
+  ELSE
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR C2R2 &
+         & (or KHKO) SCHEME IN INITIAL FMFILE",/,&
+         & "THE C2R2 (or KHKO) VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') 
+    CGETSVT(NSV_C2R2BEG:NSV_C2R2END)='INIT'
+  END IF
+END IF
+!
+! C3R5 SV case
+!
+IF (CCLOUD == 'C3R5') THEN 
+  IF (HCLOUD == 'C3R5') THEN
+    CGETSVT(NSV_C1R3BEG:NSV_C1R3END)='READ'
+!   IF(CCONF=='START') CGETSVT(NSV_C1R3BEG:NSV_C1R3END)='INIT'
+  ELSE
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR C3R5 &
+         &SCHEME IN INITIAL FMFILE",/,&
+         & "THE C1R3 VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') 
+    CGETSVT(NSV_C1R3BEG:NSV_C1R3END)='INIT'
+  END IF
+END IF
+!
+! LIMA SV case
+!
+IF (CCLOUD == 'LIMA') THEN
+  IF (HCLOUD == 'LIMA') THEN
+    CGETSVT(NSV_LIMA_BEG:NSV_LIMA_END)='READ'
+  ELSE
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR LIMA &
+           & SCHEME IN INITIAL FMFILE",/,&
+           & "THE LIMA VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') 
+    CGETSVT(NSV_LIMA_BEG:NSV_LIMA_END)='INIT'
+  END IF
+END IF
+!
+! Electrical SV case
+!
+IF (CELEC /= 'NONE') THEN 
+  IF (HELEC /= 'NONE') THEN
+    CGETSVT(NSV_ELECBEG:NSV_ELECEND)='READ'
+!   IF(CCONF=='START') CGETSVT(NSV_ELECBEG:NSV_ELECEND)='INIT'
+  ELSE
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR ELECTRICAL &
+         &SCHEME IN INITIAL FMFILE",/,&
+         & "THE ELECTRICAL VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') 
+    CGETSVT(NSV_ELECBEG:NSV_ELECEND)='INIT'
+  END IF
+END IF
+!
+! (explicit) LINOx SV case 
+!
+IF (CELEC /= 'NONE' .AND. LLNOX_EXPLICIT) THEN
+  IF (HELEC /= 'NONE' .AND. OLNOX_EXPLICIT) THEN
+    CGETSVT(NSV_LNOXBEG:NSV_LNOXEND)='READ' 
+  ELSE
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR LINOX &
+         & IN INITIAL FMFILE",/,& 
+         & "THE LINOX VARIABLES HAVE BEEN INITIALIZED TO ZERO ")')  
+    CGETSVT(NSV_LNOXBEG:NSV_LNOXEND)='INIT' 
+  END IF
+END IF
+!
+! Chemical SV case (excluding aqueous chemical species)
+!
+IF (LUSECHEM) THEN
+  IF (OUSECHEM) THEN
+    CGETSVT(NSV_CHGSBEG:NSV_CHGSEND)='READ'
+    IF(CCONF=='START' .AND. LCH_INIT_FIELD ) CGETSVT(NSV_CHGSBEG:NSV_CHGSEND)='INIT'
+  ELSE
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR CHEMICAL &
+         &SCHEME IN INITIAL FMFILE",/,&
+         & "THE CHEMICAL VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') 
+    CGETSVT(NSV_CHGSBEG:NSV_CHGSEND)='INIT'
+  END IF
+END IF
+! add aqueous chemical species
+IF (LUSECHAQ) THEN
+  IF (OUSECHAQ) THEN
+    CGETSVT(NSV_CHACBEG:NSV_CHACEND)='READ'
+!    IF(CCONF=='START') CGETSVT(NSV_CHACBEG:NSV_CHACEND)='INIT'
+  ELSE
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR CHEMICAL &
+         &SCHEME IN AQUEOUS PHASE IN INITIAL FMFILE",/,&
+         & "THE AQUEOUS PHASE CHEMICAL VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') 
+    CGETSVT(NSV_CHACBEG:NSV_CHACEND)='INIT'
+  END IF
+END IF
+! add ice phase chemical species
+IF (LUSECHIC) THEN
+  IF (OUSECHIC) THEN
+    CGETSVT(NSV_CHICBEG:NSV_CHICEND)='READ'
+!   IF(CCONF=='START') CGETSVT(NSV_CHICBEG:NSV_CHICEND)='INIT'
+  ELSE
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR CHEMICAL &
+         &SPECIES IN ICE PHASE IN INITIAL FMFILE",/,&
+         & "THE ICE PHASE CHEMICAL VARIABLES HAVE BEEN INITIALIZED TO ZERO ")')
+    CGETSVT(NSV_CHICBEG:NSV_CHICEND)='INIT'
+  END IF
+END IF
+! pH values = diagnostics
+IF (LCH_PH .AND. .NOT. OCH_PH) THEN
+  CGETPHC ='INIT'  !will be initialized to XCH_PHINIT
+  IF (LUSERR) THEN
+    CGETPHR = 'INIT' !idem
+  ELSE 
+    CGETPHR = 'SKIP'
+  ENDIF
+ELSE
+  IF (LCH_PH) THEN
+    CGETPHC ='READ'
+    IF (LUSERR) THEN
+      CGETPHR = 'READ'
+    ELSE
+      CGETPHR = 'SKIP'
+    ENDIF
+  ELSE
+    CGETPHC ='SKIP'
+    CGETPHR ='SKIP'
+  END IF
+END IF
+!
+! Dust case
+!
+IF (LDUST) THEN
+  IF (ODUST) THEN
+    CGETSVT(NSV_DSTBEG:NSV_DSTEND)='READ'
+!   IF(CCONF=='START') CGETSVT(NSV_DSTBEG:NSV_DSTEND)='INIT'
+  ELSE
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR DUST &
+         &SCHEME IN INITIAL FMFILE",/,&
+         & "THE DUST VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') 
+    CGETSVT(NSV_DSTBEG:NSV_DSTEND)='INIT'
+  END IF
+  IF (LDEPOS_DST(KMI)) THEN
+
+          !UPG *PT
+  IF((CCLOUD /= 'ICE3').AND.(CCLOUD /= 'ICE4').AND.(CCLOUD /= 'KESS')&
+  .AND.(CCLOUD /= 'KHKO').AND.(CCLOUD /= 'C2R2').AND.(CCLOUD /= 'LIMA').AND. &
+       (CPROGRAM/='SPAWN').AND.(CPROGRAM/='REAL'))  THEN
+    WRITE(UNIT=ILUOUT,FMT=9003) KMI
+    WRITE(UNIT=ILUOUT,FMT='("ERROR: WET DEPOSITION OF DUST IS ONLY CODED FOR THE",/,&
+         & "MICROPHYSICAL SCHEME as ICE3, ICE4, KESS, KHKO, LIMA and C2R2")') 
+          !UPG *PT
+ !callabortstop
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+  END IF  
+
+   IF (ODEPOS_DST(KMI) ) THEN
+    CGETSVT(NSV_DSTDEPBEG:NSV_DSTDEPEND)='READ'
+!   IF(CCONF=='START') CGETSVT(NSV_DSTDEPBEG:NSV_DSTDEPEND)='INIT'    
+   ELSE
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR RAIN and CLOUD DUST &
+         &  SCHEME IN INITIAL FMFILE",/,&
+         & "THE MOIST DUST VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') 
+    CGETSVT(NSV_DSTDEPBEG:NSV_DSTDEPEND)='INIT'    
+   END IF
+  END IF  
+
+  IF(NMODE_DST.GT.3 .OR. NMODE_DST.LT.1) THEN
+    WRITE(UNIT=ILUOUT,FMT=9003) KMI
+    WRITE(UNIT=ILUOUT,FMT='("DUST MODES MUST BE BETWEEN 1 and 3 ")') 
+ !callabortstop
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+  END IF     
+END IF
+!
+! Sea Salt case
+!
+IF (LSALT) THEN
+  IF (OSALT) THEN
+    CGETSVT(NSV_SLTBEG:NSV_SLTEND)='READ'
+    CGETZWS='READ'
+!   IF(CCONF=='START') CGETSVT(NSV_SLTBEG:NSV_SLTEND)='INIT'
+  ELSE
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR SALT &
+         &SCHEME IN INITIAL FMFILE",/,&
+         & "THE SALT VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') 
+    CGETSVT(NSV_SLTBEG:NSV_SLTEND)='INIT'
+    CGETZWS='INIT'
+  END IF
+  IF (LDEPOS_SLT(KMI)) THEN
+
+          !UPG*PT
+  IF((CCLOUD /= 'ICE3').AND.(CCLOUD /= 'ICE4').AND.(CCLOUD /= 'KESS')&
+  !.AND.(CCLOUD /= 'KHKO').AND.(CCLOUD /= 'C2R2').AND.                &
+  .AND.(CCLOUD /= 'KHKO').AND.(CCLOUD /= 'C2R2').AND.(CCLOUD /= 'LIMA').AND. &
+       (CPROGRAM/='SPAWN').AND.(CPROGRAM/='REAL'))  THEN
+    WRITE(UNIT=ILUOUT,FMT=9003) KMI
+    WRITE(UNIT=ILUOUT,FMT='("ERROR: WET DEPOSITION OF SEA SALT AEROSOLS IS ONLY CODED FOR THE",/,&
+         & "MICROPHYSICAL SCHEME as ICE3, ICE4, KESS, KHKO, LIMA and C2R2")') 
+          !UPG*PT
+ !callabortstop
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+  END IF  
+
+   IF (ODEPOS_SLT(KMI) ) THEN
+    CGETSVT(NSV_SLTDEPBEG:NSV_SLTDEPEND)='READ'
+!   IF(CCONF=='START') CGETSVT(NSV_SLTDEPBEG:NSV_SLTDEPEND)='INIT'    
+   ELSE
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR RAIN and CLOUD SEA SALT &
+         &  SCHEME IN INITIAL FMFILE",/,&
+         & "THE MOIST SEA SALT VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') 
+    CGETSVT(NSV_SLTDEPBEG:NSV_SLTDEPEND)='INIT'    
+   END IF
+  END IF
+  IF(NMODE_SLT.GT.8 .OR. NMODE_SLT.LT.1) THEN
+    WRITE(UNIT=ILUOUT,FMT=9003) KMI
+    WRITE(UNIT=ILUOUT,FMT='("SALT MODES MUST BE BETWEEN 1 and 8 ")') 
+ !callabortstop
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+  END IF     
+END IF 
+!
+! Orilam SV case
+!
+IF (LORILAM) THEN
+  IF (OORILAM) THEN
+    CGETSVT(NSV_AERBEG:NSV_AEREND)='READ'
+!   IF(CCONF=='START') CGETSVT(NSV_AERBEG:NSV_AEREND)='INIT'
+  ELSE
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR AEROSOL &
+         &SCHEME IN INITIAL FMFILE",/,&
+         & "THE AEROSOLS VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') 
+    CGETSVT(NSV_AERBEG:NSV_AEREND)='INIT'
+  END IF
+  IF (LDEPOS_AER(KMI)) THEN
+
+          !UPG*PT
+  IF((CCLOUD /= 'ICE3').AND.(CCLOUD /= 'ICE4').AND.(CCLOUD /= 'KESS')&
+  .AND.(CCLOUD /= 'KHKO').AND.(CCLOUD /= 'C2R2').AND.(CCLOUD /= 'LIMA').AND. &
+  !.AND.(CCLOUD /= 'KHKO').AND.(CCLOUD /= 'C2R2').AND.                &
+       (CPROGRAM/='SPAWN').AND.(CPROGRAM/='REAL'))  THEN
+    WRITE(UNIT=ILUOUT,FMT=9003) KMI
+    WRITE(UNIT=ILUOUT,FMT='("ERROR: WET DEPOSITION OF ORILAM AEROSOLS IS ONLY CODED FOR THE",/,&
+         & "MICROPHYSICAL SCHEME as ICE3, ICE4, KESS, KHKO, LIMA and C2R2")') 
+          !UPG*PT
+ !callabortstop
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+  END IF  
+
+   IF (ODEPOS_AER(KMI) ) THEN
+    CGETSVT(NSV_AERDEPBEG:NSV_AERDEPEND)='READ'
+!   IF(CCONF=='START') CGETSVT(NSV_AERDEPBEG:NSV_AERDEPEND)='INIT'    
+   ELSE
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR RAIN and IN CLOUD  &
+         &  AEROSOL SCHEME IN INITIAL FMFILE",/,&
+         & "THE MOIST AEROSOL VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') 
+    CGETSVT(NSV_AERDEPBEG:NSV_AERDEPEND)='INIT'    
+   END IF
+  END IF
+END IF
+!
+! Lagrangian variables
+!
+IF (LINIT_LG .AND. .NOT.(LLG)) THEN
+      WRITE(UNIT=ILUOUT,FMT=9001) KMI
+      WRITE(UNIT=ILUOUT,FMT='("IT IS INCOHERENT TO HAVE LINIT_LG=.T. AND LLG=.F.",/,&
+      & "IF YOU WANT LAGRANGIAN TRACERS CHANGE LLG TO .T. ")')
+ENDIF
+IF (LLG) THEN
+  IF (OLG .AND. .NOT.(LINIT_LG .AND. CPROGRAM=='MESONH')) THEN
+    CGETSVT(NSV_LGBEG:NSV_LGEND)='READ'
+!   IF(CCONF=='START') CGETSVT(NSV_LGBEG:NSV_LGEND)='INIT'
+  ELSE
+    IF(.NOT.(LINIT_LG) .AND. CPROGRAM=='MESONH') THEN
+      WRITE(UNIT=ILUOUT,FMT=9001) KMI
+      WRITE(UNIT=ILUOUT,FMT='("THERE IS NO LAGRANGIAN VARIABLES IN INITIAL FMFILE",/,&
+                       & "THE LAGRANGIAN VARIABLES HAVE BEEN REINITIALIZED")')
+      LINIT_LG=.TRUE.
+    ENDIF
+    CGETSVT(NSV_LGBEG:NSV_LGEND)='INIT'
+  END IF
+END IF
+!
+!
+! LINOx SV case
+!
+IF (.NOT.LUSECHEM .AND. LCH_CONV_LINOX) THEN
+  IF (.NOT.OUSECHEM .AND. OCH_CONV_LINOX) THEN
+    CGETSVT(NSV_LNOXBEG:NSV_LNOXEND)='READ'
+  ELSE
+    WRITE(UNIT=ILUOUT,FMT=9002) KMI
+    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR LINOX &
+         &IN INITIAL FMFILE",/,&
+         & "THE LINOX VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') 
+    CGETSVT(NSV_LNOXBEG:NSV_LNOXEND)='INIT'
+  END IF
+END IF
+!
+! Passive pollutant case
+!
+IF (LPASPOL) THEN
+  IF (OPASPOL) THEN
+    CGETSVT(NSV_PPBEG:NSV_PPEND)='READ'
+!   IF(CCONF=='START') CGETSVT(NSV_PPBEG:NSV_PPEND)='INIT'    
+  ELSE
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO PASSIVE SCALAR VARIABLES IN INITIAL FMFILE",/,&
+                       & "THE VARIABLES HAVE BEEN INITIALIZED TO ZERO")')
+    CGETSVT(NSV_PPBEG:NSV_PPEND)='INIT'
+  END IF
+END IF
+!
+#ifdef MNH_FOREFIRE
+! ForeFire
+!
+IF (LFOREFIRE) THEN
+  IF (OFOREFIRE) THEN
+    CGETSVT(NSV_FFBEG:NSV_FFEND)='READ'
+  ELSE
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO FOREFIRE SCALAR VARIABLES IN INITIAL FMFILE",/,&
+                       & "THE VARIABLES HAVE BEEN INITIALIZED TO ZERO")')
+    CGETSVT(NSV_FFBEG:NSV_FFEND)='INIT'
+  END IF
+END IF
+#endif
+! Blaze smoke
+!
+IF (LBLAZE) THEN
+  IF (OFIRE) THEN
+    CGETSVT(NSV_FIREBEG:NSV_FIREEND)='READ'
+  ELSE
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO BLAZE SCALAR VARIABLES IN INITIAL FMFILE",/,&
+                       & "THE VARIABLES HAVE BEEN INITIALIZED TO ZERO")')
+    CGETSVT(NSV_FIREBEG:NSV_FIREEND)='INIT'
+  END IF
+END IF
+!
+! Conditional sampling case
+!
+IF (LCONDSAMP) THEN
+  IF (OCONDSAMP) THEN
+    CGETSVT(NSV_CSBEG:NSV_CSEND)='READ'
+!   IF(CCONF=='START') CGETSVT(NSV_CSBEG:NSV_CSEND)='INIT'       
+  ELSE
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO PASSIVE SCALAR VARIABLES IN INITIAL FMFILE",/,&
+                       & "THE VARIABLES HAVE BEEN INITIALIZED TO ZERO")')
+    CGETSVT(NSV_CSBEG:NSV_CSEND)='INIT'
+  END IF
+END IF
+!
+! Blowing snow scheme
+!
+IF (LBLOWSNOW) THEN
+  IF (OBLOWSNOW) THEN
+    CGETSVT(NSV_SNWBEG:NSV_SNWEND)='READ'
+  ELSE
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR BLOWING SNOW &
+         &SCHEME IN INITIAL FMFILE",/,&
+         & "THE BLOWING SNOW VARIABLES HAVE BEEN INITIALIZED TO ZERO ")')
+    CGETSVT(NSV_SNWBEG:NSV_SNWEND)='INIT'
+  END IF
+END IF
+!
+!
+!
+!*       3.5  Check coherence between the radiation control parameters
+!
+IF( CRAD == 'ECMW' .AND. CPROGRAM=='MESONH' ) THEN
+  IF(CLW == 'RRTM' .AND. COPILW == 'SMSH') THEN
+    WRITE(UNIT=ILUOUT,FMT=9003) KMI
+    WRITE(UNIT=ILUOUT,FMT=*) 'the SMSH parametrisation of LW optical properties for cloud ice'
+    WRITE(UNIT=ILUOUT,FMT=*) '(COPILW) can not be used with RRTM radiation scheme'
+ !callabortstop
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+  ENDIF
+  IF(CLW == 'MORC' .AND. COPWLW == 'LILI') THEN
+    WRITE(UNIT=ILUOUT,FMT=9003) KMI
+    WRITE(UNIT=ILUOUT,FMT=*) 'the LILI parametrisation of LW optical properties for cloud water'
+    WRITE(UNIT=ILUOUT,FMT=*) '(COPWLW) can not be used with MORC radiation scheme'
+ !callabortstop
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+  ENDIF
+  IF( .NOT. LSUBG_COND) THEN
+    WRITE(UNIT=ILUOUT,FMT=9000) KMI
+    WRITE(UNIT=ILUOUT,FMT=*) 'YOU DO NOT WANT TO USE SUBGRID CONDENSATION'             
+    WRITE(UNIT=ILUOUT,FMT=*) 'THE OVERLAP OPTION IS NOVLP=5 IN ini_radconf.f90'
+  ELSE IF (CLW == 'MORC') THEN
+    WRITE(UNIT=ILUOUT,FMT=9000) KMI
+    WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE MORCRETTE LW SCHEME'                   
+    WRITE(UNIT=ILUOUT,FMT=*) 'THE OVERLAP OPTION IS NOVLP=5 IN ini_radconf.f90'
+  ELSE
+    WRITE(UNIT=ILUOUT,FMT=9000) KMI
+    WRITE(UNIT=ILUOUT,FMT=*) 'THE OVERLAP OPTION IS NOVLP=6 IN ini_radconf.f90'
+  ENDIF
+!
+  IF( LCLEAR_SKY .AND. XDTRAD_CLONLY /= XDTRAD) THEN
+    ! Check the validity of the LCLEAR_SKY approximation
+    WRITE(UNIT=ILUOUT,FMT=9003) KMI
+    WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE BOTH THE CLEAR-SKY APPROXIMATION'
+    WRITE(UNIT=ILUOUT,FMT=*) '(i.e. AVERAGE THE WHOLE CLOUDFREE VERTICALS BUT KEEP'
+    WRITE(UNIT=ILUOUT,FMT=*) 'ALL THE CLOUDY VERTICALS) AND'
+    WRITE(UNIT=ILUOUT,FMT=*) 'THE CLOUD-ONLY APPROXIMATION (i.e. YOU CALL MORE OFTEN THE'
+    WRITE(UNIT=ILUOUT,FMT=*) 'RADIATIONS FOR THE CLOUDY VERTICALS THAN FOR CLOUDFREE ONES).'
+    WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT POSSIBLE, SO CHOOSE BETWEEN :'
+    WRITE(UNIT=ILUOUT,FMT=*) 'XDTRAD_CLONLY = XDTRAD and LCLEAR_SKY = FALSE'
+!
+ !callabortstop
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+  END IF
+!
+  IF( XDTRAD_CLONLY > XDTRAD ) THEN
+    WRITE(UNIT=ILUOUT,FMT=9003) KMI
+    WRITE(UNIT=ILUOUT,FMT='("BAD USE OF THE CLOUD-ONLY APPROXIMATION   " ,&
+    &" XDTRAD SHOULD BE LARGER THAN XDTRAD_CLONLY                      ")')
+!
+ !callabortstop
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+  END IF
+!
+  IF(( XDTRAD < XTSTEP ).OR. ( XDTRAD_CLONLY < XTSTEP )) THEN
+    WRITE(UNIT=ILUOUT,FMT=9003) KMI
+    WRITE(UNIT=ILUOUT,FMT='("THE RADIATION CALL XDTRAD OR XDTRAD_CLONLY " ,&
+    &" IS MORE FREQUENT THAN THE TIME STEP SO ADJUST XDTRAD OR XDTRAD_CLONLY ")')
+!
+ !callabortstop
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+  END IF
+END IF
+!
+IF ( CRAD /= 'NONE' .AND. CPROGRAM=='MESONH' ) THEN
+  CGETRAD='READ'
+  IF( HRAD == 'NONE' .AND. CCONF=='RESTA') THEN
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(UNIT=ILUOUT,FMT=*) 'YOU ARE PERFORMING A RESTART. FOR THIS SEGMENT, YOU ARE USING A RADIATION'
+    WRITE(UNIT=ILUOUT,FMT=*) 'SCHEME AND NO RADIATION SCHEME WAS USED FOR THE PREVIOUS SEGMENT.'
+    CGETRAD='INIT'
+  END IF
+  IF(CCONF=='START') THEN
+    CGETRAD='INIT'
+  END IF
+  IF(CCONF=='RESTA' .AND. (.NOT. LAERO_FT) .AND.  (.NOT. LORILAM) &
+                    .AND. (.NOT. LSALT)  .AND. (.NOT. LDUST)) THEN
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(UNIT=ILUOUT,FMT=*) '!!! WARNING !!! FOR REPRODUCTIBILITY BETWEEN START and START+RESTART,'
+    WRITE(UNIT=ILUOUT,FMT=*) 'YOU MUST USE LAERO_FT=T WITH CAER=TEGE IF CCONF=RESTA IN ALL SEGMENTS'
+    WRITE(UNIT=ILUOUT,FMT=*) 'TO UPDATE THE OZONE AND AEROSOLS CLIMATOLOGY USED BY THE RADIATION CODE;'
+  END IF
+END IF
+!
+!        3.6  check the initialization of the deep convection scheme
+!
+IF ( (CDCONV /= 'KAFR') .AND. &
+      (CSCONV /= 'KAFR') .AND. LCHTRANS ) THEN
+   WRITE(UNIT=ILUOUT,FMT=9003) KMI
+   WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE LCHTRANS OPTION= ",&
+    &"CONVECTIVE TRANSPORT OF TRACERS BUT  IT CAN ONLY",&
+    &"BE USED FOR THE KAIN FRITSCH SCHEME ")')
+ !callabortstop
+   CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+END IF
+!
+SELECT CASE ( CDCONV )
+  CASE( 'KAFR' )
+    IF (.NOT. ( LUSERV ) ) THEN
+      WRITE(UNIT=ILUOUT,FMT=9002) KMI
+      WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE KAIN-FRITSCH DEEP CONV. ",&
+      &" SCHEME. YOU MUST HAVE VAPOR ",/,"LUSERV IS SET TO TRUE ")')
+      LUSERV=.TRUE.
+    ELSE IF (.NOT. ( LUSERI ) ) THEN
+      WRITE(UNIT=ILUOUT,FMT=9002) KMI
+      WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE KAIN-FRITSCH",&
+      &" DEEP CONV. SCHEME. BUT THE DETRAINED CLOUD ICE WILL BE ADDED TO   ",&
+      &" THE CLOUD WATER  ")')
+    ELSE IF (.NOT. ( LUSERI.AND.LUSERC ) ) THEN
+      WRITE(UNIT=ILUOUT,FMT=9002) KMI
+      WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE KAIN-FRITSCH",&
+      &" DEEP CONV. SCHEME. BUT THE DETRAINED CLOUD WATER AND CLOUD ICE    ",&
+      &" WILL BE ADDED TO THE WATER VAPOR FIELD  ")')
+    END IF
+    IF ( LCHTRANS .AND. NSV == 0 ) THEN
+      WRITE(UNIT=ILUOUT,FMT=9002) KMI
+      WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE LCHTRANS OPTION= ",&
+      &"CONVECTIVE TRANSPORT OF TRACERS BUT YOUR TRACER ",&
+      &"NUMBER NSV IS ZERO ",/,"LCHTRANS IS SET TO FALSE")')
+      LCHTRANS=.FALSE.
+    END IF
+END SELECT
+!
+IF ( CDCONV == 'KAFR' .AND. LCHTRANS .AND. NSV > 0 ) THEN
+  IF( OCHTRANS ) THEN
+    CGETSVCONV='READ'
+  ELSE  
+    CGETSVCONV='INIT'
+  END IF
+END IF
+!
+SELECT CASE ( CSCONV )
+  CASE( 'KAFR' )
+    IF (.NOT. ( LUSERV ) ) THEN
+      WRITE(UNIT=ILUOUT,FMT=9002) KMI
+      WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE KAIN-FRITSCH SHALLOW CONV. ",&
+      &" SCHEME. YOU MUST HAVE VAPOR ",/,"LUSERV IS SET TO TRUE ")')
+      LUSERV=.TRUE.
+    ELSE IF (.NOT. ( LUSERI ) ) THEN
+      WRITE(UNIT=ILUOUT,FMT=9002) KMI
+      WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE KAIN-FRITSCH",&
+      &" SHALLOW CONV. SCHEME. BUT THE DETRAINED CLOUD ICE WILL BE ADDED TO   ",&
+      &" THE CLOUD WATER  ")')
+    ELSE IF (.NOT. ( LUSERI.AND.LUSERC ) ) THEN
+      WRITE(UNIT=ILUOUT,FMT=9002) KMI
+      WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE KAIN-FRITSCH",&
+      &" SHALLOW CONV. SCHEME. BUT THE DETRAINED CLOUD WATER AND CLOUD ICE    ",&
+      &" WILL BE ADDED TO THE WATER VAPOR FIELD  ")')
+    END IF
+    IF ( LCHTRANS .AND. NSV == 0 ) THEN
+      WRITE(UNIT=ILUOUT,FMT=9002) KMI
+      WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE LCHTRANS OPTION= ",&
+      &"CONVECTIVE TRANSPORT OF TRACERS BUT YOUR TRACER ",&
+      &"NUMBER NSV IS ZERO ",/,"LCHTRANS IS SET TO FALSE")')
+      LCHTRANS=.FALSE.
+    END IF
+ CASE( 'EDKF' )
+    IF (CTURB == 'NONE' ) THEN
+      WRITE(UNIT=ILUOUT,FMT=9003) KMI
+      WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE EDKF ", & 
+      &"SHALLOW CONVECTION WITHOUT TURBULENCE SCHEME : ", &
+      &"IT IS NOT POSSIBLE")')
+!
+ !callabortstop
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+    END IF
+END SELECT
+!
+!
+CGETCONV = 'SKIP'
+!
+IF ( (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR' ) .AND. CPROGRAM=='MESONH') THEN
+  CGETCONV = 'READ'
+  IF( HDCONV == 'NONE' .AND. CCONF=='RESTA') THEN
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(UNIT=ILUOUT,FMT='(" YOU ARE PERFORMING A RESTART. FOR THIS  ",&
+     &" SEGMENT, YOU ARE USING A DEEP CONVECTION SCHEME AND NO DEEP    ",&
+     &" CONVECTION SCHEME WAS USED FOR THE PREVIOUS SEGMENT. ")')
+!
+    CGETCONV = 'INIT'
+  END IF
+  IF(CCONF=='START') THEN
+    CGETCONV = 'INIT'
+  END IF
+END IF
+!
+!*       3.7  configuration and model version
+!
+IF (KMI == 1) THEN                                                
+! 
+  IF (L1D.AND.(CLBCX(1)/='CYCL'.AND.CLBCX(2)/='CYCL' &
+          .AND.CLBCY(1)/='CYCL'.AND.CLBCY(2)/='CYCL')) THEN
+    WRITE(UNIT=ILUOUT,FMT=9003) KMI
+    WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE A 1D MODEL VERSION WITH NON-CYCL",&
+                & "CLBCX OR CLBCY VALUES")')
+ !callabortstop
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+  END IF
+  IF (L2D.AND.(CLBCY(1)/='CYCL'.AND.CLBCY(2)/='CYCL')) THEN
+    WRITE(UNIT=ILUOUT,FMT=9003) KMI
+    WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE A 2D MODEL VERSION WITH NON-CYCL",&
+                & " CLBCY VALUES")')
+ !callabortstop
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+  END IF
+  !
+ IF ( (.NOT. LCARTESIAN) .AND. ( LCORIO) .AND. (.NOT. LGEOST_UV_FRC) ) THEN
+   WRITE(UNIT=ILUOUT,FMT=9002) KMI
+   WRITE(UNIT=ILUOUT,FMT='("BE CAREFUL YOU COULD HAVE SPURIOUS MOTIONS      " ,&
+        & " NEAR THE LBC AS LCORIO=T and  LGEOST_UV_FRC=F")')
+ END IF
+  !
+  IF ((.NOT.LFLAT).AND.OFLAT) THEN                                      
+    WRITE(UNIT=ILUOUT,FMT=9002) KMI 
+    WRITE(UNIT=ILUOUT,FMT=*) 'ZERO OROGRAPHY IN INITIAL FILE'
+    WRITE(UNIT=ILUOUT,FMT=*) '***** ALL TERMS HAVE BEEN NEVERTHELESS COMPUTED WITHOUT SIMPLIFICATION*****'
+    WRITE(UNIT=ILUOUT,FMT=*) 'THIS SHOULD LEAD TO ERRORS IN THE PRESSURE COMPUTATION'     
+  END IF
+  IF (LFLAT.AND.(.NOT.OFLAT)) THEN
+    WRITE(UNIT=ILUOUT,FMT=9002) KMI
+    WRITE(UNIT=ILUOUT,FMT='(" OROGRAPHY IS NOT EQUAL TO ZERO ",            &
+          & "IN INITIAL FILE" ,/,                                          &
+          & "******* OROGRAPHY HAS BEEN SET TO ZERO *********",/,          &
+          & "ACCORDING TO ZERO OROGRAPHY, SIMPLIFICATIONS  HAVE  ",        &
+          & "BEEN MADE IN  COMPUTATIONS")')
+  END IF 
+END IF
+!
+!*       3.8  System of equations
+!
+IF ( HEQNSYS /= CEQNSYS ) THEN
+  WRITE(UNIT=ILUOUT,FMT=9003) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU HAVE CHANGED THE SYSTEM OF EQUATIONS'
+  WRITE(ILUOUT,FMT=*) 'THE ANELASTIC CONSTRAINT IS PERHAPS CHANGED :'
+  WRITE(ILUOUT,FMT=*) 'FOR THE INITIAL FILE YOU HAVE USED ',HEQNSYS
+  WRITE(ILUOUT,FMT=*) 'FOR THE RUN YOU PLAN TO USE ',CEQNSYS
+  WRITE(ILUOUT,FMT=*) 'THIS CAN LEAD TO A NUMERICAL EXPLOSION IN THE FIRST TIME STEPS'
+ !callabortstop
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+END IF
+!
+!        3.9  Numerical schemes
+!
+IF ( (CUVW_ADV_SCHEME == 'CEN4TH') .AND. &
+      (CTEMP_SCHEME /= 'LEFR') .AND. (CTEMP_SCHEME /= 'RKC4') ) THEN
+   WRITE(UNIT=ILUOUT,FMT=9003) KMI
+   WRITE(UNIT=ILUOUT,FMT='("CEN4TH SCHEME HAS TO BE USED WITH ",&
+    &"CTEMP_SCHEME = LEFR of RKC4 ONLY")')   
+ !callabortstop
+   CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+END IF
+!
+IF ( (CUVW_ADV_SCHEME == 'WENO_K') .AND. LNUMDIFU ) THEN
+   WRITE(UNIT=ILUOUT,FMT=9002) KMI
+   WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE NUMERICAL DIFFUSION ",&
+    &"WITH WENO SCHEME ALREADY DIFFUSIVE")')   
+END IF
+!-------------------------------------------------------------------------------
+!
+!*       4.    CHECK COHERENCE BETWEEN EXSEG VARIABLES
+!              ---------------------------------------
+!        
+!*       4.1  coherence between coupling variables in EXSEG file  
+!                      
+IF (KMI == 1) THEN
+  NCPL_NBR = 0
+  DO JCI = 1,JPCPLFILEMAX
+    IF (LEN_TRIM(CCPLFILE(JCI)) /= 0) THEN        ! Finds the number 
+      NCPL_NBR = NCPL_NBR + 1                     ! of coupling files
+    ENDIF
+    IF (JCI/=JPCPLFILEMAX) THEN                   ! Deplaces the coupling files
+      IF ((LEN_TRIM(CCPLFILE(JCI)) == 0) .AND.   &! names if one missing
+          (LEN_TRIM(CCPLFILE(JCI+1)) /= 0)) THEN
+        DO JI=JCI,JPCPLFILEMAX-1
+          CCPLFILE(JI)=CCPLFILE(JI+1)
+        END DO
+        CCPLFILE(JPCPLFILEMAX)='    '
+      END IF
+    END IF
+  END DO
+!
+  IF (NCPL_NBR /= 0) THEN         
+    LSTEADYLS = .FALSE.
+  ELSE
+    LSTEADYLS = .TRUE.
+  ENDIF 
+END IF
+!        
+!*       4.3   check consistency in forcing switches
+!
+IF ( LFORCING ) THEN
+  IF ( LRELAX_THRV_FRC .AND. ( LTEND_THRV_FRC .OR. LGEOST_TH_FRC ) ) THEN
+    WRITE(UNIT=ILUOUT,FMT=9002) KMI
+    WRITE(ILUOUT,FMT=*) 'YOU CHOSE A TEMPERATURE AND HUMIDITY RELAXATION'
+    WRITE(ILUOUT,FMT=*) 'TOGETHER WITH TENDENCY OR GEOSTROPHIC FORCING'
+    WRITE(ILUOUT,FMT=*) &
+  'YOU MIGHT CHECK YOUR SWITCHES: LRELAX_THRV_FRC, LTEND_THRV_FRC, AND'
+    WRITE(ILUOUT,FMT=*) 'LGEOST_TH_FRC'
+  END IF
+!
+  IF ( LRELAX_UV_FRC .AND. LRELAX_UVMEAN_FRC) THEN
+    WRITE(UNIT=ILUOUT,FMT=9003) KMI
+    WRITE(ILUOUT,FMT=*) 'YOU MUST CHOOSE BETWEEN A RELAXATION APPLIED TO'
+    WRITE(ILUOUT,FMT=*) 'THE 3D FULL WIND FIELD (LRELAX_UV_FRC) OR'
+    WRITE(ILUOUT,FMT=*) 'THE HORIZONTAL MEAN WIND (LRELAX_UVMEAN_FRC)'
+ !callabortstop
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+  END IF
+!
+  IF ( (LRELAX_UV_FRC .OR. LRELAX_UVMEAN_FRC) .AND. LGEOST_UV_FRC ) THEN
+    WRITE(UNIT=ILUOUT,FMT=9003) KMI
+    WRITE(ILUOUT,FMT=*) 'YOU MUST NOT USE A WIND RELAXATION' 
+    WRITE(ILUOUT,FMT=*) 'TOGETHER WITH A GEOSTROPHIC FORCING'
+    WRITE(ILUOUT,FMT=*) 'CHECK SWITCHES: LRELAX_UV_FRC, LRELAX_UVMEAN_FRC, LGEOST_UV_FRC'
+ !callabortstop
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+  END IF
+!
+  IF ( CRELAX_HEIGHT_TYPE.NE."FIXE" .AND. CRELAX_HEIGHT_TYPE.NE."THGR" ) THEN
+    WRITE(UNIT=ILUOUT,FMT=9003) KMI
+    WRITE(ILUOUT,FMT=*) 'CRELAX_HEIGHT_TYPE MUST BE EITHER "FIXE" OR "THGR"'
+    WRITE(ILUOUT,FMT=*) 'BUT IT IS "', CRELAX_HEIGHT_TYPE, '"'
+ !callabortstop
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+  END IF
+!
+  IF ( .NOT.LCORIO .AND. LGEOST_UV_FRC ) THEN
+    WRITE(UNIT=ILUOUT,FMT=9003) KMI
+    WRITE(ILUOUT,FMT=*) 'YOU CANNOT HAVE A GEOSTROPHIC FORCING WITHOUT'
+    WRITE(ILUOUT,FMT=*) 'ACTIVATING LCORIOLIS OPTION'
+ !callabortstop
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+  END IF
+!
+  IF ( LPGROUND_FRC ) THEN
+    WRITE(ILUOUT,FMT=*) 'SURFACE PRESSURE FORCING NOT YET IMPLEMENTED'
+ !callabortstop
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+  END IF
+!
+END IF
+!
+IF (LTRANS .AND. .NOT. LFLAT ) THEN
+    WRITE(UNIT=ILUOUT,FMT=9003) KMI
+    WRITE(ILUOUT,FMT=*) 'YOU ASK FOR A CONSTANT SPEED DOMAIN TRANSLATION '
+    WRITE(ILUOUT,FMT=*) 'BUT NOT IN THE FLAT TERRAIN CASE:'
+    WRITE(ILUOUT,FMT=*) 'THIS IS NOT ALLOWED ACTUALLY'
+ !callabortstop
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+END IF
+!
+!*       4.4  Check the coherence between the LUSERn and LHORELAX
+!
+IF (.NOT. LUSERV .AND. LHORELAX_RV) THEN
+  LHORELAX_RV=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX RV FIELD BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RV=FALSE'
+END IF
+!
+IF (.NOT. LUSERC .AND. LHORELAX_RC) THEN
+  LHORELAX_RC=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX RC FIELD BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RC=FALSE'
+END IF
+!
+IF (.NOT. LUSERR .AND. LHORELAX_RR) THEN
+  LHORELAX_RR=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX RR FIELD BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RR=FALSE'
+END IF
+!
+IF (.NOT. LUSERI .AND. LHORELAX_RI) THEN
+  LHORELAX_RI=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX RI FIELD BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RI=FALSE'
+END IF
+!
+IF (.NOT. LUSERS .AND. LHORELAX_RS) THEN
+  LHORELAX_RS=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX RS FIELD BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RS=FALSE'
+END IF
+!
+IF (.NOT. LUSERG .AND. LHORELAX_RG) THEN
+  LHORELAX_RG=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX RG FIELD BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RG=FALSE'
+END IF
+!
+IF (.NOT. LUSERH .AND. LHORELAX_RH) THEN
+  LHORELAX_RH=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX RH FIELD BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RH=FALSE'
+END IF
+!
+IF (CTURB=='NONE' .AND. LHORELAX_TKE) THEN
+  LHORELAX_TKE=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX TKE FIELD BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_TKE=FALSE'
+END IF
+!
+!
+IF (CCLOUD/='C2R2'  .AND. CCLOUD/='KHKO'  .AND. LHORELAX_SVC2R2) THEN
+  LHORELAX_SVC2R2=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX C2R2 or KHKO FIELD BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVC2R2=FALSE'
+END IF
+!
+IF (CCLOUD/='C3R5' .AND. LHORELAX_SVC1R3) THEN
+  LHORELAX_SVC1R3=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX C3R5 FIELD BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVC1R3=FALSE'
+END IF
+!
+IF (CCLOUD/='LIMA' .AND. LHORELAX_SVLIMA) THEN
+  LHORELAX_SVLIMA=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX LIMA FIELD BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVLIMA=FALSE'
+END IF
+!
+IF (CELEC(1:3) /= 'ELE' .AND. LHORELAX_SVELEC) THEN
+  LHORELAX_SVELEC=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX ELEC FIELD BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVELEC=FALSE'
+END IF
+!
+IF (.NOT. LUSECHEM .AND. LHORELAX_SVCHEM) THEN
+  LHORELAX_SVCHEM=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX CHEM FIELD BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVCHEM=FALSE'
+END IF
+!
+IF (.NOT. LUSECHIC .AND. LHORELAX_SVCHIC) THEN
+  LHORELAX_SVCHIC=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX ICE CHEM FIELD BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVCHIC=FALSE'
+END IF
+!
+IF (.NOT. LORILAM .AND. LHORELAX_SVAER) THEN
+  LHORELAX_SVAER=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX AEROSOL FIELD BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVAER=FALSE'
+END IF
+
+IF (.NOT. LDUST .AND. LHORELAX_SVDST) THEN
+  LHORELAX_SVDST=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX DUST FIELD BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVDST=FALSE'
+END IF
+
+IF (.NOT. LSALT .AND. LHORELAX_SVSLT) THEN
+  LHORELAX_SVSLT=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX SEA SALT FIELD BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVSLT=FALSE'
+END IF
+
+IF (.NOT. LPASPOL .AND. LHORELAX_SVPP) THEN
+  LHORELAX_SVPP=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX PASSIVE POLLUTANT FIELD BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVPP=FALSE'
+END IF
+#ifdef MNH_FOREFIRE
+IF (.NOT. LFOREFIRE .AND. LHORELAX_SVFF) THEN
+  LHORELAX_SVFF=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX FOREFIRE FLUXES BUT THEY DO NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVFF=FALSE'
+END IF
+#endif
+IF (.NOT. LBLAZE .AND. LHORELAX_SVFIRE) THEN
+  LHORELAX_SVFIRE=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX BLAZE FLUXES BUT THEY DO NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVFIRE=FALSE'
+END IF
+IF (.NOT. LCONDSAMP .AND. LHORELAX_SVCS) THEN
+  LHORELAX_SVCS=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX CONDITIONAL SAMPLING FIELD BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVCS=FALSE'
+END IF
+
+IF (.NOT. LBLOWSNOW .AND. LHORELAX_SVSNW) THEN
+  LHORELAX_SVSNW=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX BLOWING SNOW FIELD BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVSNW=FALSE'
+END IF
+
+IF (ANY(LHORELAX_SV(NSV+1:))) THEN
+  LHORELAX_SV(NSV+1:)=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX SV(NSV+1:) FIELD BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SV(NSV+1:)=FALSE'
+END IF
+!
+!*       4.5   check the number of points for the horizontal relaxation
+!
+IF ( NRIMX > KRIMX .AND. .NOT.LHORELAX_SVELEC ) THEN
+  NRIMX = KRIMX 
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO USE A LARGER NUMBER OF POINTS '
+  WRITE(ILUOUT,FMT=*) 'FOR THE HORIZONTAL RELAXATION THAN THE '
+  WRITE(ILUOUT,FMT=*) 'CORRESPONDING NUMBER OF LARGE SCALE FIELDS:'
+  WRITE(ILUOUT,FMT=*) 'IT IS THEREFORE REDUCED TO NRIMX =',NRIMX
+END IF
+!
+IF ( L2D .AND. KRIMY>0 ) THEN
+  NRIMY = 0 
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO USE A 2D MODEL THEREFORE  NRIMY=0 '
+END IF
+!
+IF ( NRIMY > KRIMY .AND. .NOT.LHORELAX_SVELEC ) THEN
+  NRIMY = KRIMY 
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO USE A LARGER NUMBER OF POINTS '
+  WRITE(ILUOUT,FMT=*) 'FOR THE HORIZONTAL RELAXATION THAN THE '
+  WRITE(ILUOUT,FMT=*) 'CORRESPONDING NUMBER OF LARGE SCALE FIELDS:'
+  WRITE(ILUOUT,FMT=*) 'IT IS THEREFORE REDUCED TO NRIMY =',NRIMY
+END IF
+!
+IF ( (.NOT. LHORELAX_UVWTH) .AND. (.NOT.(ANY(LHORELAX_SV))) .AND.  &
+     (.NOT. LHORELAX_SVC2R2).AND. (.NOT. LHORELAX_SVC1R3)   .AND.  &
+     (.NOT. LHORELAX_SVLIMA).AND.                                  &
+     (.NOT. LHORELAX_SVELEC).AND. (.NOT. LHORELAX_SVCHEM)   .AND.  &
+     (.NOT. LHORELAX_SVLG)  .AND. (.NOT. LHORELAX_SVPP)     .AND.  &
+     (.NOT. LHORELAX_SVCS)  .AND. (.NOT. LHORELAX_SVFIRE)   .AND.  &
+#ifdef MNH_FOREFIRE
+     (.NOT. LHORELAX_SVFF)  .AND.                                  &
+#endif
+     (.NOT. LHORELAX_RV)    .AND. (.NOT. LHORELAX_RC)       .AND.  &
+     (.NOT. LHORELAX_RR)    .AND. (.NOT. LHORELAX_RI)       .AND.  &
+     (.NOT. LHORELAX_RS)    .AND. (.NOT. LHORELAX_RG)       .AND.  &
+     (.NOT. LHORELAX_RH)    .AND. (.NOT. LHORELAX_TKE)      .AND.  &
+     (.NOT. LHORELAX_SVCHIC).AND.                                  &
+                                  (NRIMX /= 0 .OR. NRIMY /= 0))  THEN  
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU DO NOT WANT TO USE THE HORIZONTAL RELAXATION '
+  WRITE(ILUOUT,FMT=*) 'THEREFORE NRIMX=NRIMY=0     '
+  NRIMX=0
+  NRIMY=0
+END IF
+!
+IF ((LHORELAX_UVWTH  .OR. LHORELAX_SVPP   .OR.  &
+     LHORELAX_SVCS   .OR. LHORELAX_SVFIRE .OR.  &
+#ifdef MNH_FOREFIRE
+     LHORELAX_SVFF   .OR.                       &
+#endif
+     LHORELAX_SVC2R2 .OR. LHORELAX_SVC1R3 .OR.  &
+     LHORELAX_SVLIMA .OR.                       &
+     LHORELAX_SVELEC .OR. LHORELAX_SVCHEM .OR.  &
+     LHORELAX_SVLG   .OR. ANY(LHORELAX_SV) .OR. &
+     LHORELAX_RV     .OR. LHORELAX_RC .OR.      &
+     LHORELAX_RR     .OR. LHORELAX_RI .OR.      &
+     LHORELAX_RG     .OR. LHORELAX_RS .OR.      &
+     LHORELAX_RH     .OR. LHORELAX_TKE.OR.      &
+     LHORELAX_SVCHIC )                          &
+     .AND. (NRIMX==0 .OR. (NRIMY==0 .AND. .NOT.(L2D) ))) THEN
+  WRITE(UNIT=ILUOUT,FMT=9003) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO USE THE HORIZONTAL RELAXATION '
+  WRITE(ILUOUT,FMT=*) 'BUT NRIMX OR NRIMY=0 CHANGE YOUR VALUES   '
+  WRITE(ILUOUT,FMT=*) "LHORELAX_UVWTH=",LHORELAX_UVWTH
+  WRITE(ILUOUT,FMT=*) "LHORELAX_SVC2R2=",LHORELAX_SVC2R2
+  WRITE(ILUOUT,FMT=*) "LHORELAX_SVC1R3=",LHORELAX_SVC1R3
+  WRITE(ILUOUT,FMT=*) "LHORELAX_SVLIMA=",LHORELAX_SVLIMA
+  WRITE(ILUOUT,FMT=*) "LHORELAX_SVELEC=",LHORELAX_SVELEC
+  WRITE(ILUOUT,FMT=*) "LHORELAX_SVCHEM=",LHORELAX_SVCHEM
+  WRITE(ILUOUT,FMT=*) "LHORELAX_SVCHIC=",LHORELAX_SVCHIC
+  WRITE(ILUOUT,FMT=*) "LHORELAX_SVLG=",LHORELAX_SVLG
+  WRITE(ILUOUT,FMT=*) "LHORELAX_SVPP=",LHORELAX_SVPP
+  WRITE(ILUOUT,FMT=*) "LHORELAX_SVFIRE=",LHORELAX_SVFIRE
+#ifdef MNH_FOREFIRE
+  WRITE(ILUOUT,FMT=*) "LHORELAX_SVFF=",LHORELAX_SVFF
+#endif
+  WRITE(ILUOUT,FMT=*) "LHORELAX_SVCS=",LHORELAX_SVCS
+  WRITE(ILUOUT,FMT=*) "LHORELAX_SV=",LHORELAX_SV
+  WRITE(ILUOUT,FMT=*) "LHORELAX_RV=",LHORELAX_RV
+  WRITE(ILUOUT,FMT=*) "LHORELAX_RC=",LHORELAX_RC
+  WRITE(ILUOUT,FMT=*) "LHORELAX_RR=",LHORELAX_RR
+  WRITE(ILUOUT,FMT=*) "LHORELAX_RI=",LHORELAX_RI
+  WRITE(ILUOUT,FMT=*) "LHORELAX_RG=",LHORELAX_RG
+  WRITE(ILUOUT,FMT=*) "LHORELAX_RS=",LHORELAX_RS
+  WRITE(ILUOUT,FMT=*) "LHORELAX_RH=",LHORELAX_RH
+  WRITE(ILUOUT,FMT=*) "LHORELAX_TKE=", LHORELAX_TKE
+  WRITE(ILUOUT,FMT=*) "NRIMX=",NRIMX
+  WRITE(ILUOUT,FMT=*) "NRIMY=",NRIMY
+  WRITE(ILUOUT,FMT=*) "L2D=",L2D
+ !callabortstop
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+END IF
+! 
+IF ((LHORELAX_UVWTH  .OR. LHORELAX_SVPP  .OR.   &
+     LHORELAX_SVCS   .OR. LHORELAX_SVFIRE .OR.  &
+#ifdef MNH_FOREFIRE
+     LHORELAX_SVFF   .OR.                       &
+#endif
+     LHORELAX_SVC2R2 .OR. LHORELAX_SVC1R3 .OR.  &
+     LHORELAX_SVLIMA .OR.                       &
+     LHORELAX_SVELEC .OR. LHORELAX_SVCHEM .OR.  &
+     LHORELAX_SVLG   .OR. ANY(LHORELAX_SV) .OR. &
+     LHORELAX_RV     .OR. LHORELAX_RC .OR.      &
+     LHORELAX_RR     .OR. LHORELAX_RI .OR.      &
+     LHORELAX_RG     .OR. LHORELAX_RS .OR.      &
+     LHORELAX_RH     .OR. LHORELAX_TKE.OR.      &
+     LHORELAX_SVCHIC )                          &
+     .AND. (KMI /=1)) THEN
+  WRITE(UNIT=ILUOUT,FMT=9003) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO USE THE HORIZONTAL RELAXATION '
+  WRITE(ILUOUT,FMT=*) 'FOR A NESTED MODEL BUT THE COUPLING IS ALREADY DONE' 
+  WRITE(ILUOUT,FMT=*) 'BY THE GRID NESTING. CHANGE LHORELAX TO FALSE'
+ !callabortstop
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+END IF
+!
+IF ((LHORELAX_UVWTH  .OR. LHORELAX_SVPP  .OR.   &
+     LHORELAX_SVCS   .OR. LHORELAX_SVFIRE .OR.  &
+#ifdef MNH_FOREFIRE
+     LHORELAX_SVFF   .OR.                       &
+#endif
+     LHORELAX_SVC2R2 .OR. LHORELAX_SVC1R3 .OR.  &
+     LHORELAX_SVLIMA .OR.                       &
+     LHORELAX_SVELEC .OR. LHORELAX_SVCHEM .OR.  &
+     LHORELAX_SVLG   .OR. ANY(LHORELAX_SV) .OR. &
+     LHORELAX_RV     .OR. LHORELAX_RC .OR.      &
+     LHORELAX_RR     .OR. LHORELAX_RI .OR.      &
+     LHORELAX_RG     .OR. LHORELAX_RS .OR.      &
+     LHORELAX_RH     .OR. LHORELAX_TKE.OR.      &
+     LHORELAX_SVCHIC )                          &
+     .AND. (CLBCX(1)=='CYCL'.OR.CLBCX(2)=='CYCL' &
+          .OR.CLBCY(1)=='CYCL'.OR.CLBCY(2)=='CYCL')) THEN
+  WRITE(UNIT=ILUOUT,FMT=9003) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO USE THE HORIZONTAL RELAXATION '
+  WRITE(ILUOUT,FMT=*) 'FOR CYCLIC CLBCX OR CLBCY VALUES' 
+  WRITE(ILUOUT,FMT=*) 'CHANGE LHORELAX TO FALSE'
+ !callabortstop
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+END IF
+!
+IF (KMI==1) THEN
+  GRELAX = .NOT.(OUSERV)  .AND.  LUSERV  .AND. LHORELAX_RV
+ELSE
+  GRELAX = .NOT.(LUSERV_G(NDAD(KMI)))  .AND.  LUSERV_G(KMI).AND. LHORELAX_RV 
+END IF 
+!
+IF ( GRELAX )  THEN
+  LHORELAX_RV=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE RV FIELD'
+  WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI)
+  WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RV=FALSE'
+END IF
+!
+IF (KMI==1) THEN
+  GRELAX = .NOT.(OUSERC)  .AND.  LUSERC  .AND. LHORELAX_RC
+ELSE
+  GRELAX = .NOT.(LUSERC_G(NDAD(KMI)))  .AND.  LUSERC_G(KMI).AND. LHORELAX_RC 
+END IF 
+!
+IF ( GRELAX )  THEN
+  LHORELAX_RC=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE RC FIELD'
+  WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI)
+  WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RC=FALSE'
+END IF
+!
+IF (KMI==1) THEN
+  GRELAX = .NOT.(OUSERR)  .AND.  LUSERR  .AND. LHORELAX_RR
+ELSE
+  GRELAX = .NOT.(LUSERR_G(NDAD(KMI)))  .AND.  LUSERR_G(KMI).AND. LHORELAX_RR 
+END IF 
+!
+IF ( GRELAX )  THEN
+  LHORELAX_RR=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE RR FIELD'
+  WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI)
+  WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RR=FALSE'
+END IF
+!
+IF (KMI==1) THEN
+  GRELAX = .NOT.(OUSERI)  .AND.  LUSERI  .AND. LHORELAX_RI
+ELSE
+  GRELAX = .NOT.(LUSERI_G(NDAD(KMI)))  .AND.  LUSERI_G(KMI).AND. LHORELAX_RI 
+END IF 
+!
+IF ( GRELAX )  THEN
+  LHORELAX_RI=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE RI FIELD'
+  WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI)
+  WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RI=FALSE'
+END IF
+!
+IF (KMI==1) THEN
+  GRELAX = .NOT.(OUSERG)  .AND.  LUSERG  .AND. LHORELAX_RG
+ELSE
+  GRELAX = .NOT.(LUSERG_G(NDAD(KMI)))  .AND.  LUSERG_G(KMI).AND. LHORELAX_RG 
+END IF 
+!
+IF ( GRELAX )  THEN
+  LHORELAX_RG=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE RG FIELD'
+  WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI)
+  WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RG=FALSE'
+END IF
+!
+IF (KMI==1) THEN
+  GRELAX = .NOT.(OUSERH)  .AND.  LUSERH  .AND. LHORELAX_RH
+ELSE
+  GRELAX = .NOT.(LUSERH_G(NDAD(KMI)))  .AND.  LUSERH_G(KMI).AND. LHORELAX_RH 
+END IF 
+!
+IF ( GRELAX )  THEN
+  LHORELAX_RH=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE RH FIELD'
+  WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI)
+  WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RH=FALSE'
+END IF
+!
+IF (KMI==1) THEN
+  GRELAX = .NOT.(OUSERS)  .AND.  LUSERS  .AND. LHORELAX_RS
+ELSE
+  GRELAX = .NOT.(LUSERS_G(NDAD(KMI)))  .AND.  LUSERS_G(KMI).AND. LHORELAX_RS 
+END IF 
+!
+IF ( GRELAX )  THEN
+  LHORELAX_RS=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE RS FIELD'
+  WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI)
+  WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RS=FALSE'
+END IF
+!
+IF (KMI==1) THEN
+  GRELAX = HTURB=='NONE'  .AND.  LUSETKE(1).AND. LHORELAX_TKE
+ELSE
+  GRELAX = .NOT.(LUSETKE(NDAD(KMI)))  .AND.  LUSETKE(KMI) .AND. LHORELAX_TKE 
+END IF 
+!
+IF ( GRELAX )  THEN
+  LHORELAX_TKE=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE TKE FIELD'
+  WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI)
+  WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_TKE=FALSE'
+END IF
+!
+!
+DO JSV = 1,NSV_USER
+!
+  IF (KMI==1) THEN
+    GRELAX = KSV_USER<JSV  .AND.  LUSESV(JSV,1).AND.  LHORELAX_SV(JSV) 
+  ELSE
+    GRELAX = .NOT.(LUSESV(JSV,NDAD(KMI))) .AND. LUSESV(JSV,KMI) .AND. LHORELAX_SV(JSV)   
+  END IF 
+  !
+  IF ( GRELAX )  THEN
+  LHORELAX_SV(JSV)=.FALSE.
+  WRITE(UNIT=ILUOUT,FMT=9001) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE ',JSV,'  SV FIELD'
+  WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI)
+  WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SV(',JSV,')=FALSE'
+ END IF
+END DO
+!
+!*       4.6   consistency in LES diagnostics choices
+!
+IF (CLES_NORM_TYPE=='EKMA' .AND. .NOT. LCORIO) THEN
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO USE THE EKMAN NORMALIZATION'
+  WRITE(ILUOUT,FMT=*) 'BUT CORIOLIS FORCE IS NOT USED (LCORIO=.FALSE.)'
+  WRITE(ILUOUT,FMT=*) 'THEN, NO NORMALIZATION IS PERFORMED'
+  CLES_NORM_TYPE='NONE'
+END IF
+!
+!*       4.7  Check the coherence with LNUMDIFF
+!
+IF (L1D .AND. (LNUMDIFU .OR. LNUMDIFTH .OR. LNUMDIFSV) ) THEN
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU WANT TO USE HORIZONTAL DIFFUSION '
+  WRITE(ILUOUT,FMT=*) 'BUT YOU ARE IN A COLUMN MODEL (L1D=.TRUE.).'
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LNUMDIFU and LNUMDIFTH and LNUMDIFSV'
+  WRITE(ILUOUT,FMT=*) 'ARE SET TO FALSE'
+  LNUMDIFU=.FALSE.
+  LNUMDIFTH=.FALSE.
+  LNUMDIFSV=.FALSE.
+END IF
+!
+IF (.NOT. LNUMDIFTH .AND. LZDIFFU) THEN
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(ILUOUT,FMT=*) 'YOU DO NOT WANT TO USE HORIZONTAL DIFFUSION (LNUMDIFTH=F)'
+  WRITE(ILUOUT,FMT=*) 'BUT YOU WANT TO USE Z-NUMERICAL DIFFUSION  '
+  WRITE(ILUOUT,FMT=*) 'THEREFORE LNUMDIFTH IS SET TO TRUE'
+  LNUMDIFTH=.TRUE.
+END IF
+!
+!*       4.8  Other
+!
+IF (XTNUDGING < 4.*XTSTEP) THEN
+  XTNUDGING = 4.*XTSTEP
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(UNIT=ILUOUT,FMT='("TIME SCALE FOR NUDGING CAN NOT BE SMALLER THAN",  &
+                 &   " FOUR TIMES THE TIME STEP")')
+  WRITE(ILUOUT,FMT=*) 'XTNUDGING is SET TO ',XTNUDGING
+END IF
+!
+!
+IF (XWAY(KMI) == 3. ) THEN
+  XWAY(KMI) = 2.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(UNIT=ILUOUT,FMT='("XWAY=3 DOES NOT EXIST ANYMORE; ", &                               
+                 &   " IT IS REPLACED BY XWAY=2 ")')
+END IF
+!
+IF ( (KMI == 1) .AND. XWAY(KMI) /= 0. ) THEN
+  XWAY(KMI) = 0.
+  WRITE(UNIT=ILUOUT,FMT=9002) KMI
+  WRITE(UNIT=ILUOUT,FMT='("XWAY MUST BE EQUAL TO 0 FOR DAD MODEL")')   
+END IF
+!
+!JUANZ ZRESI solver need BSPLITTING 
+IF ( CPRESOPT == 'ZRESI' .AND. CSPLIT /= 'BSPLITTING' ) THEN
+  WRITE(UNIT=ILUOUT,FMT=9003) KMI
+  WRITE(UNIT=ILUOUT,FMT='("Paralleliez in Z solver CPRESOPT=ZRESI need also CSPLIT=BSPLITTING ")')
+  WRITE(ILUOUT,FMT=*) ' ERROR you have to set also CSPLIT=BSPLITTING '
+ !callabortstop
+  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+END IF
+!
+IF ( LEN_TRIM(HINIFILEPGD)>0 ) THEN
+  IF ( CINIFILEPGD/=HINIFILEPGD ) THEN 
+    WRITE(UNIT=ILUOUT,FMT=9001) KMI
+    WRITE(ILUOUT,FMT=*) ' ERROR : in EXSEG1.nam, in NAM_LUNITn you have CINIFILEPGD= ',CINIFILEPGD
+    WRITE(ILUOUT,FMT=*) ' whereas in .des you have CINIFILEPGD= ',HINIFILEPGD
+    WRITE(ILUOUT,FMT=*) ' Please check your Namelist '
+    WRITE(ILUOUT,FMT=*) ' For example, you may have specified the un-nested PGD file instead of the nested PGD file '
+    WRITE(ILUOUT,FMT=*) 
+    WRITE(ILUOUT,FMT=*) '###############'
+    WRITE(ILUOUT,FMT=*) ' MESONH ABORTS'
+    WRITE(ILUOUT,FMT=*) '###############'
+    WRITE(ILUOUT,FMT=*) 
+ !callabortstop
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
+  END IF
+ELSE
+  CINIFILEPGD = ''
+!* note that after a spawning, there is no value for CINIFILEPGD in the .des file,
+!  so the checking cannot be made if the user starts a simulation directly from
+!  a spawned file (without the prep_real_case stage)
+END IF
+!-------------------------------------------------------------------------------
+!
+!*       5.    WE DO NOT FORGET TO UPDATE ALL DOLLARN NAMELIST VARIABLES
+!              ---------------------------------------------------------
+!
+CALL UPDATE_NAM_LUNITN
+CALL UPDATE_NAM_CONFN
+CALL UPDATE_NAM_DRAGTREEN
+CALL UPDATE_NAM_DRAGBLDGN
+CALL UPDATE_NAM_DYNN
+CALL UPDATE_NAM_ADVN
+CALL UPDATE_NAM_PARAMN
+CALL UPDATE_NAM_PARAM_RADN
+#ifdef MNH_ECRAD
+CALL UPDATE_NAM_PARAM_ECRADN
+#endif
+CALL UPDATE_NAM_PARAM_KAFRN
+CALL UPDATE_NAM_PARAM_MFSHALLN
+CALL UPDATE_NAM_LBCN
+CALL UPDATE_NAM_NUDGINGN
+CALL UPDATE_NAM_TURBN
+CALL UPDATE_NAM_BLANKN
+CALL UPDATE_NAM_CH_MNHCN
+CALL UPDATE_NAM_CH_SOLVERN
+CALL UPDATE_NAM_SERIESN
+CALL UPDATE_NAM_BLOWSNOWN
+CALL UPDATE_NAM_PROFILERn
+CALL UPDATE_NAM_STATIONn
+CALL UPDATE_NAM_FIREn
+!-------------------------------------------------------------------------------
+WRITE(UNIT=ILUOUT,FMT='(/)')
+!-------------------------------------------------------------------------------
+!
+!*       6.    FORMATS
+!              -------
+!
+9000  FORMAT(/,'NOTE  IN READ_EXSEG FOR MODEL ', I2, ' : ',/, &
+             '--------------------------------')
+9001  FORMAT(/,'CAUTION ERROR IN READ_EXSEG FOR MODEL ', I2,' : ',/, &
+             '----------------------------------------' )
+9002  FORMAT(/,'WARNING IN READ_EXSEG FOR MODEL ', I2,' : ',/, &
+             '----------------------------------' )
+9003  FORMAT(/,'FATAL ERROR IN READ_EXSEG FOR MODEL ', I2,' : ',/, &
+             '--------------------------------------' )
+!
+!-------------------------------------------------------------------------------
+!
+END SUBROUTINE READ_EXSEG_n
diff --git a/src/mesonh/ext/resolved_cloud.f90 b/src/mesonh/ext/resolved_cloud.f90
index 2ab08f041204aeff43b7d3cdd2f003c06a640dd0..64d5eec3a4b455a24aac79de5c59f425d0789e2c 100644
--- a/src/mesonh/ext/resolved_cloud.f90
+++ b/src/mesonh/ext/resolved_cloud.f90
@@ -303,7 +303,7 @@ USE MODD_PARAM_C2R2,     ONLY: LSUPSAT
 USE MODD_PARAMETERS,     ONLY: JPHEXT, JPVEXT
 USE MODD_PARAM_ICE,      ONLY: CSEDIM, LADJ_BEFORE, LADJ_AFTER, CFRAC_ICE_ADJUST, LRED, &
                                PARAM_ICE
-USE MODD_PARAM_LIMA,     ONLY: LADJ, LCOLD, LPTSPLIT, LSPRO, NMOD_CCN, NMOD_IFN, NMOD_IMM
+USE MODD_PARAM_LIMA,     ONLY: LADJ, LPTSPLIT, LSPRO, NMOD_CCN, NMOD_IFN, NMOD_IMM, NMOM_I
 USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN, RAIN_ICE_DESCR
 USE MODD_RAIN_ICE_PARAM, ONLY: RAIN_ICE_PARAM
 USE MODD_SALT,           ONLY: LSALT
@@ -990,8 +990,8 @@ SELECT CASE ( HCLOUD )
     ENDDO
     ZZZ = MZF( PZZ )
      IF (LPTSPLIT) THEN
-        CALL LIMA (1, IKU, 1,                                              &
-                   PTSTEP, TPFILE,                                         &
+        CALL LIMA (YLDIMPHYEX,CST,TBUCONF,TBUDGETS,SIZE(TBUDGETS),         &
+                   PTSTEP,                                                 &
                    PRHODREF, PEXNREF, ZDZZ,                                &
                    PRHODJ, PPABST,                                         &
                    NMOD_CCN, NMOD_IFN, NMOD_IMM,                           &
@@ -999,7 +999,7 @@ SELECT CASE ( HCLOUD )
                    PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), PW_ACT,          &
                    PTHS, PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END),       &
                    PINPRC, PINDEP, PINPRR, ZINPRI, PINPRS, PINPRG, PINPRH, &
-                   PEVAP3D, PCLDFR, PICEFR, PRAINFR                        )
+                   PEVAP3D, PCLDFR, PICEFR, PRAINFR, ZFPR                 )
      ELSE
 
         IF (OWARM) CALL LIMA_WARM(OACTIT, OSEDC, ORAIN, KSPLITR, PTSTEP, KMI,       &
@@ -1010,14 +1010,14 @@ SELECT CASE ( HCLOUD )
                                   PTHS, PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), &
                                   PINPRC, PINPRR, PINDEP, PINPRR3D, PEVAP3D         )
 !
-        IF (LCOLD) CALL LIMA_COLD(OSEDI, OHHONI, KSPLITG, PTSTEP, KMI,               &
+        IF (NMOM_I.GE.1) CALL LIMA_COLD(CST, OSEDI, OHHONI, KSPLITG, PTSTEP, KMI,    &
                                   KRR, PZZ, PRHODJ,                                  &
                                   PRHODREF, PEXNREF, PPABST, PW_ACT,                 &
                                   PTHT, PRT, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END),  &
                                   PTHS, PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END),  &
                                   PINPRS, PINPRG, PINPRH                             )
 !
-        IF (OWARM .AND. LCOLD) CALL LIMA_MIXED(OSEDI, OHHONI, KSPLITG, PTSTEP, KMI,              &
+        IF (OWARM .AND. NMOM_I.GE.1) CALL LIMA_MIXED(OSEDI, OHHONI, KSPLITG, PTSTEP, KMI,              &
                                                KRR, PZZ, PRHODJ,                                 &
                                                PRHODREF, PEXNREF, PPABST, PW_ACT,                &
                                                PTHT, PRT, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), &
@@ -1033,7 +1033,8 @@ SELECT CASE ( HCLOUD )
                          PTHS,PRS, PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END),        &
                          PCLDFR, PICEFR, PRAINFR, PSRCS                          )
    ELSE IF (LPTSPLIT) THEN
-    CALL LIMA_ADJUST_SPLIT(YLDIMPHYEX, KRR, KMI, TPFILE, CCONDENS, CLAMBDA3,                     &
+    CALL LIMA_ADJUST_SPLIT(YLDIMPHYEX,CST,TBUCONF,TBUDGETS,SIZE(TBUDGETS),           &
+                     KRR, KMI, CCONDENS, CLAMBDA3,                                   &
                      OSUBG_COND, OSIGMAS, PTSTEP, PSIGQSAT,                          &
                      PRHODREF, PRHODJ, PEXNREF, PSIGS, PMFCONV, PPABST, PPABSTT, ZZZ,&
                      PDTHRAD, PW_ACT,                                                &
diff --git a/src/mesonh/micro/ini_lima_warm.f90 b/src/mesonh/micro/ini_lima_warm.f90
deleted file mode 100644
index aea2517cab9d168a998aa6785bd35693674050d9..0000000000000000000000000000000000000000
--- a/src/mesonh/micro/ini_lima_warm.f90
+++ /dev/null
@@ -1,477 +0,0 @@
-!MNH_LIC Copyright 2013-2021 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-!      #########################
-       MODULE MODI_INI_LIMA_WARM
-!      #########################
-!
-INTERFACE
-      SUBROUTINE INI_LIMA_WARM (PTSTEP, PDZMIN)
-!
-REAL,                    INTENT(IN) :: PTSTEP    ! Effective Time step 
-REAL,                    INTENT(IN) :: PDZMIN    ! minimun vertical mesh size
-!
-END SUBROUTINE INI_LIMA_WARM
-!
-END INTERFACE
-!
-END MODULE MODI_INI_LIMA_WARM
-!     #########################################
-      SUBROUTINE INI_LIMA_WARM (PTSTEP, PDZMIN)
-!     #########################################
-!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to initialize the constants used in the 
-!!    microphysical scheme LIMA for the warm phase species and processes. 
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function
-!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_CST
-USE MODD_REF
-USE MODD_PARAM_LIMA
-USE MODD_PARAM_LIMA_WARM
-USE MODD_PARAMETERS
-USE MODD_LUNIT, ONLY : TLUOUT0
-!
-USE MODI_LIMA_FUNCTIONS
-USE MODI_HYPGEO
-USE MODI_GAMMA
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-REAL,                    INTENT(IN) :: PTSTEP    ! Effective Time step 
-REAL,                    INTENT(IN) :: PDZMIN    ! minimun vertical mesh size
-!
-!*       0.2   Declarations of local variables :
-!
-INTEGER :: IKB                ! Coordinates of the first and last physical 
-                              ! points along z
-INTEGER :: J1                 ! Internal loop indexes
-INTEGER :: JMOD               ! Internal loop to index the CCN modes
-!
-REAL, DIMENSION(6)  :: ZGAMC, ZGAMR ! parameters involving various moments of
-                              ! the generalized gamma law
-!
-REAL :: ZTT                   ! Temperature in Celsius
-REAL :: ZLV                   ! Latent heat of vaporization
-REAL :: ZSS                   ! Supersaturation
-REAL :: ZPSI1, ZG             ! Psi1 and G functions
-REAL :: ZAHENR                ! r_star (FH92)
-REAL :: ZVTRMAX               ! Raindrop maximal fall velocity
-REAL :: ZRHO00                ! Surface reference air density
-REAL :: ZSURF_TEN             ! Water drop surface tension
-REAL :: ZSMIN, ZSMAX          ! Minimal and maximal supersaturation used to
-                              ! discretize the HYP functions
-!
-!
-INTEGER  :: ILUOUT0 ! Logical unit number for output-listing
-INTEGER  :: IRESP   ! Return code of FM-routines
-LOGICAL  :: GFLAG   ! Logical flag for printing the constatnts on the output
-                    ! listing
-!  
-!-------------------------------------------------------------------------------
-!
-!
-!*       1.     CHARACTERISTICS OF THE SPECIES
-!   	        ------------------------------
-!
-!
-!*       1.1    Cloud droplet characteristics
-!
-XAC = (XPI/6.0)*XRHOLW
-XBC = 3.0
-XCC = XRHOLW*XG/(18.0*1.816E-5) ! Stokes flow (Pruppacher eq. 10-138 for T=293K)
-!XCC = XRHOLW*XG/(18.0*1.7E-5) ! Stokes flow (Pruppacher eq. 10-138 for T=273K)
-XDC = 2.0
-!
-XF0C = 1.00
-XF2C = 0.108
-!
-XC1C = 1./2.
-!
-!*       1.2    Raindrops characteristics
-!
-XAR = (XPI/6.0)*XRHOLW
-XBR = 3.0
-XCR = 842.
-XDR = 0.8
-!
-XF0R = 0.780
-!Correction BVIE Pruppacher 1997 eq. 13-61
-!XF1R = 0.265
-XF1R = 0.308
-!
-!
-!------------------------------------------------------------------------------
-!
-!
-!*       2.     DIMENSIONAL DISTRIBUTIONS OF THE SPECIES
-!   	        ----------------------------------------
-!
-!
-!*       2.1    Cloud droplet distribution
-!
-!XALPHAC = 3.0  ! Gamma law of the Cloud droplet (here volume-like distribution)
-!XNUC    = 3.0  ! Gamma law with little dispersion
-!
-!*       2.2    Raindrop distribution
-!
-!XALPHAR = 3.0  ! Gamma law of the raindrops (here volume-like distribution)
-!XNUR    = 3.0  ! Gamma law for the raindrops 
-!XNUR    = 0.1
-!
-!*       2.3    Precalculation of the gamma function momentum
-!
-!
-ZGAMC(1) = GAMMA_X0D(XNUC)
-ZGAMC(2) = MOMG(XALPHAC,XNUC,3.)
-ZGAMC(3) = MOMG(XALPHAC,XNUC,6.)
-ZGAMC(4) = ZGAMC(3)-ZGAMC(2)**2  ! useful for Sig_c
-ZGAMC(5) = MOMG(XALPHAC,XNUC,9.)
-ZGAMC(6) = MOMG(XALPHAC,XNUC,3.)**(2./3.)/MOMG(XALPHAC,XNUC,2.)
-!
-ZGAMR(1) = GAMMA_X0D(XNUR)
-ZGAMR(2) = MOMG(XALPHAR,XNUR,3.)
-ZGAMR(3) = MOMG(XALPHAR,XNUR,6.)
-ZGAMR(4) = MOMG(XALPHAR,XNUR,6.)
-ZGAMR(5) = MOMG(XALPHAR,XNUR,9.)
-ZGAMR(6) = MOMG(XALPHAR,XNUR,3.)**(2./3.)/MOMG(XALPHAR,XNUR,2.)
-!
-!*       2.4    Csts for the shape parameter
-!
-XLBC   = XAR*ZGAMC(2)
-XLBEXC = 1.0/XBC
-!
-XNR = 1.0/(XAR*MOMG(XALPHAR,XNUR,XBR))
-XCCR   = 8.E6
-XCXR   = -1.
-IF (NMOM_R.EQ.1) THEN
-   XLBEXR = 1.0/(XCXR-XBR)
-   XLBR   = ( XAR*XCCR*MOMG(XALPHAR,XNUR,XBR) )**(-XLBEXR)
-ELSE
-   XLBR   = XAR*ZGAMR(2)
-   XLBEXR = 1.0/XBR
-END IF
-!
-!
-!------------------------------------------------------------------------------
-!
-!
-!*       3.     CONSTANTS FOR THE SEDIMENTATION
-!   	        -------------------------------
-!
-!
-!*       4.1    Exponent of the fall-speed air density correction
-!
-IKB = 1 + JPVEXT
-! Correction
-!ZRHO00 = XP00/(XRD*XTHVREFZ(IKB))
-ZRHO00 = 1.2041 ! at P=1013.25hPa and T=20°C
-!
-!*       4.2    Constants for sedimentation
-!
-XFSEDRR  = XCR*GAMMA_X0D(XNUR+(XDR+3.)/XALPHAR)/GAMMA_X0D(XNUR+3./XALPHAR)*     &
-            (ZRHO00)**XCEXVT
-XFSEDCR  = XCR*GAMMA_X0D(XNUR+XDR/XALPHAR)/GAMMA_X0D(XNUR)*     &
-            (ZRHO00)**XCEXVT
-XFSEDRC  = XCC*GAMMA_X0D(XNUC+(XDC+3.)/XALPHAC)/GAMMA_X0D(XNUC+3./XALPHAC)*     &
-            (ZRHO00)**XCEXVT
-XFSEDCC  = XCC*GAMMA_X0D(XNUC+XDC/XALPHAC)/GAMMA_X0D(XNUC)*     &
-            (ZRHO00)**XCEXVT
-
-!
-XLB(2)    = XLBC
-XLBEX(2)  = XLBEXC
-XD(2)     = XDC
-XFSEDR(2) = XFSEDRC
-XFSEDC(2) = XFSEDCC
-!
-XLB(3)    = XLBR
-XLBEX(3)  = XLBEXR
-XD(3)     = XDR
-XFSEDR(3) = XFSEDRR
-XFSEDC(3) = XFSEDCR
-!
-!------------------------------------------------------------------------------
-!
-!
-!*       4.     CONSTANTS FOR THE NUCLEATION PROCESS
-!   	        ------------------------------------
-!
-!
-XWMIN = 0.01 ! Minimal positive vertical velocity required 
-             ! for the activation process in Twomey and CPB scheme
-XTMIN = -0.000278 ! Minimal cooling required 1K/h
-!
-XDIVA = 226.E-7 ! Diffusivity of water vapor in the air
-XTHCO = 24.3E-3 ! Air thermal conductivity
-!
-!                        ( 8 Mw (Sigma)sw )3  Pi*Rho_l
-!            XCSTDCRIT = ( -------------- ) * --------
-!                        ( 3    Ra Rhow   )     6
-!
-ZSURF_TEN = 76.1E-3  ! Surface tension of a water drop at T=0 C
-XCSTDCRIT = (XPI/6.)*XRHOLW*( (8.0*ZSURF_TEN )/( 3.0*XRV*XRHOLW ) )**3
-!
-!
-!
-!	4.1   Tabulation of the hypergeometric functions in 'no units'
-!             --------------------------------------------------------
-!
-!               In LIMA's nucleation parameterization,
-!               supersaturation is not in % : Smax=0.01 for a 1% supersaturation.
-!               This is accounted for in the modified Beta and C values.
-!
-!               Here, we tabulate the
-!               F(mu,k/2, k/2+1 ,-Beta S**2) -> XHYPF12
-!               F(mu,k/2,(k+3)/2,-Beta S**2) -> XHYPF32 functions
-!               using a logarithmic scale for S
-!
-NHYP = 500 ! Number of points for the tabulation
-ALLOCATE (XHYPF12( NHYP, NMOD_CCN ))
-ALLOCATE (XHYPF32( NHYP, NMOD_CCN ))
-!
-ZSMIN = 1.0E-5  ! Minimum supersaturation set at 0.001 % 
-ZSMAX = 5.0E-2  ! Maximum supersaturation set at 5 %
-XHYPINTP1 = REAL(NHYP-1)/LOG(ZSMAX/ZSMIN)
-XHYPINTP2 = REAL(NHYP)-XHYPINTP1*LOG(ZSMAX)
-!
-DO JMOD = 1,NMOD_CCN 
-   DO J1 = 1,NHYP
-      ZSS =ZSMAX*(ZSMIN/ZSMAX)**(REAL(NHYP-J1)/REAL(NHYP-1))
-      XHYPF12(J1,JMOD) = HYPGEO(XMUHEN_MULTI(JMOD),0.5*XKHEN_MULTI(JMOD),&
-                                0.5*XKHEN_MULTI(JMOD)+1.0,XBETAHEN_MULTI(JMOD),ZSS)
-      XHYPF32(J1,JMOD) = HYPGEO(XMUHEN_MULTI(JMOD),0.5*XKHEN_MULTI(JMOD),&
-                                0.5*XKHEN_MULTI(JMOD)+1.5,XBETAHEN_MULTI(JMOD),ZSS)
-   END DO
-ENDDO
-!
-NAHEN = 81 ! Tabulation for each Kelvin degree in the range XTT-40 to XTT+40
-XAHENINTP1 = 1.0
-XAHENINTP2 = 0.5*REAL(NAHEN-1) - XTT
-!
-!		Compute the tabulation of function of T :
-!
-!                                   1
-!               XAHENG = -----------------------
-!                          XCSTHEN * G**(3/2)
-!
-!            Compute constants for the calculation of Smax.
-!            XCSTHEN = 1/(rho_l 2 pi)   
-!            PSI1
-!            PSI3
-!            T
-!            Lv
-!            G
-!
-ALLOCATE (XAHENG(NAHEN))
-ALLOCATE (XAHENG2(NAHEN))
-ALLOCATE (XAHENG3(NAHEN))
-ALLOCATE (XPSI1(NAHEN))
-ALLOCATE (XPSI3(NAHEN))
-XCSTHEN = 1.0 / ( XRHOLW*2.0*XPI )
-DO J1 = 1,NAHEN
-   ZTT = XTT + REAL(J1-(NAHEN-1)/2)                                          ! T
-   ZLV = XLVTT+(XCPV-XCL)*(ZTT-XTT)                                          ! Lv
-   XPSI1(J1) = (XG/(XRD*ZTT))*(XMV*ZLV/(XMD*XCPD*ZTT)-1.)                    ! Psi1
-   XPSI3(J1) = -1*XMV*ZLV/(XMD*XRD*(ZTT**2))                                 ! Psi3
-   ZG    = 1./( XRHOLW*( (XRV*ZTT)/                                        & ! G
-                         (XDIVA*EXP(XALPW-(XBETAW/ZTT)-(XGAMW*ALOG(ZTT)))) &
-                       + (ZLV/ZTT)**2/(XTHCO*XRV) ) )              
-   XAHENG(J1) = XCSTHEN/(ZG)**(3./2.)
-   XAHENG2(J1) = 1/(ZG)**(1./2.) * GAMMA_X0D(XNUC+1./XALPHAC)/GAMMA_X0D(XNUC)
-   XAHENG3(J1) = (ZG) * GAMMA_X0D(XNUC+1./XALPHAC)/GAMMA_X0D(XNUC)
-END DO
-!-------------------------------------------------------------------------------
-!
-! Parameters used to initialise the droplet and drop concentration
-! from the respective mixing ratios (used in RESTART_RAIN_C2R2)
-!
-! Droplet case
-!
-!!ALLOCATE(XCONCC_INI(SIZE(PNFS,1),SIZE(PNFS,2),SIZE(PNFS,3),SIZE(PNFS,4))) !NMOD_CCN))
-!!  XCONCC_INI(:,:,:,:) = 0.8 * PNFS(:,:,:,:) ! 80% of the maximum CCN conc. is assumed
-!
-! Raindrop case
-!
-XCONCR_PARAM_INI = (1.E7)**3/(XPI*XRHOLW) ! MP law with N_O=1.E7 m-1 is assumed
-!
-!
-!------------------------------------------------------------------------------
-!
-!
-!*       5.     CONSTANTS FOR THE COALESCENCE PROCESSES
-!   	        ---------------------------------------
-!
-!
-!*       6.1    Csts for the coalescence processes
-!
-XKERA1 = 2.59E15   ! From Long  a1=9.44E9 cm-3 so XKERA1= 9.44E9*1E6*(PI/6)**2
-XKERA2 = 3.03E3    ! From Long  a2=5.78E3      so XKERA2= 5.78E3*    (PI/6)
-!
-! Cst for the cloud droplet selfcollection process
-!
-XSELFC = XKERA1*ZGAMC(3)
-!
-! Cst for the autoconversion process
-!
-XAUTO1 = 6.25E18*(ZGAMC(2))**(1./3.)*SQRT(ZGAMC(4))
-XAUTO2 = 0.5E6*(ZGAMC(4))**(1./6.)
-XLAUTR = 2.7E-2
-XLAUTR_THRESHOLD  = 0.4
-XITAUTR= 0.27 ! (Notice that T2 of BR74 is uncorrect and that 0.27=1./3.7
-XITAUTR_THRESHOLD = 7.5
-XCAUTR = 3.5E9
-XR0 = 25.0E-6
-!
-! Cst for the accretion process
-!
-XACCR1 = ZGAMR(2)**(1./3.)
-XACCR2 = 5.0E-6
-XACCR3 = 12.6E-4
-XACCR4 = XAUTO2
-XACCR5 = 3.5
-XACCR6 = 1.2*XCAUTR
-XACCR_CLARGE1 = XKERA2*ZGAMC(2)
-XACCR_CLARGE2 = XKERA2*ZGAMR(2)
-XACCR_RLARGE1 = XKERA2*ZGAMC(3)*XRHOLW*(XPI/6.0)
-XACCR_RLARGE2 = XKERA2*ZGAMC(2)*ZGAMR(2)*XRHOLW*(XPI/6.0)
-XACCR_CSMALL1 = XKERA1*ZGAMC(3)
-XACCR_CSMALL2 = XKERA1*ZGAMR(3)
-XACCR_RSMALL1 = XKERA1*ZGAMC(5)*XRHOLW*(XPI/6.0)
-XACCR_RSMALL2 = XKERA1*ZGAMC(2)*ZGAMR(3)*XRHOLW*(XPI/6.0)
-!
-! ICE3 accretion of cloud droplets by rain drops
-!
-XFCACCR  = (XPI/4.0)*XCCR*XCR*(ZRHO00**XCEXVT)*MOMG(XALPHAR,XNUR,XDR+2.0)
-XEXCACCR = -XDR-3.0
-!
-! Cst for the raindrop self-collection/breakup process
-!
-XSCBU2 = XKERA2*ZGAMR(2)
-XSCBU3 = XKERA1*ZGAMR(3)
-XSCBU_EFF1 = 0.6E-3
-XSCBU_EFF2 = 2.0E-3
-XSCBUEXP1 = -2500.0
-!
-!
-!------------------------------------------------------------------------------
-!
-!
-!*       6.     CONSTANTS FOR THE "SONTANEOUS" BREAK-UP
-!   	        ---------------------------------------
-!
-!
-XSPONBUD1 = 3.0E-3
-XSPONBUD2 = 4.0E-3
-XSPONBUD3 = 5.0E-3
-XSPONCOEF2 = ((XSPONBUD3/XSPONBUD2)**3 - 1.0)/(XSPONBUD3-XSPONBUD1)**2
-!
-!
-!------------------------------------------------------------------------------
-!
-!
-!*        7.    CONSTANTS FOR EVAPORATION PROCESS
-!   	        ---------------------------------------
-!
-!
-X0CNDC = (4.0*XPI)*XC1C*XF0C*MOMG(XALPHAC,XNUC,1.)
-X2CNDC = (4.0*XPI)*XC1C*XF2C*XCC*MOMG(XALPHAC,XNUC,XDC+2.0)
-!
-! Valeurs utiles pour le calcul de l'évaporation en fonction de N_r
-!
-!XEX0EVAR = -1.0
-!XEX1EVAR = -1.0 - (XDR+1.0)*0.5
-!XEX2EVAR = -0.5*XCEXVT
-!
-!X0EVAR = (2.0*XPI)*XF0R*GAMMA_X0D(XNUR+1./XALPHAR)/GAMMA_X0D(XNUR)
-!X1EVAR = (2.0*XPI)*XF1R*((ZRHO00)**(XCEXVT)*(XCR/0.15E-4))**0.5*    &
-!           GAMMA_X0D(XNUR+(XDR+3.0)/(2.0*XALPHAR))/GAMMA_X0D(XNUR)
-!
-!
-! Valeurs utiles pour le calcul de l'évaporation en fonction de r_r
-!
-XEX0EVAR = 2.0
-XEX1EVAR = 2.0 - (XDR+1.0)*0.5
-XEX2EVAR = -0.5*XCEXVT
-!
-X0EVAR = (12.0)*XF0R*GAMMA_X0D(XNUR+1./XALPHAR)/GAMMA_X0D(XNUR+3./XALPHAR)
-X1EVAR = (12.0)*XF1R*((ZRHO00)**(XCEXVT)*(XCR/0.15E-4))**0.5*    &
-           GAMMA_X0D(XNUR+(XDR+3.0)/(2.0*XALPHAR))/GAMMA_X0D(XNUR+3./XALPHAR)
-!
-XCEVAP = 0.86
-!
-!------------------------------------------------------------------------------
-!
-!
-!*       8.     SET-UP RADIATIVE PARAMETERS
-!   	        ---------------------------
-!
-!
-! R_eff_c = XFREFFC * (rho*r_c/N_c)**(1/3)
-!
-!
-XFREFFC = 0.5 * ZGAMC(6) * (1.0/XAC)**(1.0/3.0)
-XFREFFR = 0.5 * ZGAMR(6) * (1.0/XAR)**(1.0/3.0)
-!
-! Coefficients used to compute reff when both cloud and rain are present
-!
-XCREC = 1.0/ (ZGAMC(6) * XAC**(2.0/3.0))
-XCRER = 1.0/ (ZGAMR(6) * XAR**(2.0/3.0))
-!
-!
-!------------------------------------------------------------------------------
-!
-!
-!*       9.     SOME PRINTS FOR CONTROL
-!   	        -----------------------
-!
-!
-GFLAG = .TRUE.
-IF (GFLAG) THEN
-  ILUOUT0 = TLUOUT0%NLU
-  WRITE(UNIT=ILUOUT0,FMT='(" Summary of the cloud particule characteristics")')
-  WRITE(UNIT=ILUOUT0,FMT='("             CLOUD")')
-  WRITE(UNIT=ILUOUT0,FMT='("                   masse: A=",E13.6," B=",E13.6)') &
-                                                      XAR,XBR
-  WRITE(UNIT=ILUOUT0,FMT='("                 vitesse: C=",E13.6," D=",E13.6)') &
-                                                      XCC,XDC
-  WRITE(UNIT=ILUOUT0,FMT='("            distribution:AL=",E13.6,"NU=",E13.6)') &
-                                                      XALPHAC,XNUC
-  WRITE(UNIT=ILUOUT0,FMT='("               RAIN")')
-  WRITE(UNIT=ILUOUT0,FMT='("                   masse: A=",E13.6," B=",E13.6)') &
-                                                      XAR,XBR
-  WRITE(UNIT=ILUOUT0,FMT='("                 vitesse: C=",E13.6," D=",E13.6)') &
-                                                      XCR,XDR
-!!$  WRITE(UNIT=ILUOUT0,FMT='("            distribution:AL=",E13.6,"NU=",E13.6)') &
-!!$                                                      XALPHAR,XNUR
-!!$  WRITE(UNIT=ILUOUT0,FMT='(" Description of the nucleation spectrum")')
-!!$  WRITE(UNIT=ILUOUT0,FMT='("         C=",E13.6,"  k=",E13.6)') XCHEN, XKHEN
-!!$  WRITE(UNIT=ILUOUT0,FMT='("      Beta=",E13.6," MU=",E13.6)') XBETAHEN, XMUHEN
-!!$  WRITE(UNIT=ILUOUT0,FMT='("      CCN max=",E13.6)') XCONC_CCN
-END IF
-!
-!------------------------------------------------------------------------------
-!
-END SUBROUTINE INI_LIMA_WARM
diff --git a/src/mesonh/micro/lima_adjust.f90 b/src/mesonh/micro/lima_adjust.f90
index 54b749e8be0e1166ef23eda588f09ffb95cc164b..abfe49fb7ebc640c3de1588cc78a245db2e6745a 100644
--- a/src/mesonh/micro/lima_adjust.f90
+++ b/src/mesonh/micro/lima_adjust.f90
@@ -168,8 +168,8 @@ use mode_tools,            only: Countjv
 !
 USE MODI_CONDENS
 USE MODI_CONDENSATION
-USE MODI_LIMA_FUNCTIONS
-USE MODI_LIMA_CCN_ACTIVATION
+USE MODE_LIMA_FUNCTIONS
+USE MODE_LIMA_CCN_ACTIVATION, ONLY: LIMA_CCN_ACTIVATION
 !
 IMPLICIT NONE
 !
@@ -357,22 +357,22 @@ PCIT(:,:,:) = 0.
 PCCS(:,:,:) = 0.
 PCIS(:,:,:) = 0.
 !
-IF ( LWARM ) PCCT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NC)
-IF ( LCOLD ) PCIT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NI)
+IF ( NMOM_C.GE.2 ) PCCT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NC)
+IF ( NMOM_I.GE.2 ) PCIT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NI)
 !
-IF ( LWARM ) PCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC)
-IF ( LCOLD ) PCIS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI)
+IF ( NMOM_C.GE.2 ) PCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC)
+IF ( NMOM_I.GE.2 ) PCIS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI)
 !
 IF ( LSCAV .AND. LAERO_MASS ) PMAS(:,:,:) = PSVS(:,:,:,NSV_LIMA_SCAVMASS)
 ! 
-IF ( LWARM .AND. NMOD_CCN.GE.1 ) THEN
+IF ( NMOM_C.GE.2 .AND. NMOD_CCN.GE.1 ) THEN
    ALLOCATE( PNFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_CCN) )
    ALLOCATE( PNAS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_CCN) )
    PNFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1)
    PNAS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1)
 END IF
 !
-IF ( LCOLD .AND. NMOD_IFN .GE. 1 ) THEN
+IF ( NMOM_I.GE.2 .AND. NMOD_IFN.GE.1 ) THEN
    ALLOCATE( PIFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_IFN) )
    ALLOCATE( PINS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_IFN) )
    PIFS(:,:,:,:) = PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1)
@@ -390,13 +390,13 @@ if ( nbumod == kmi .and. lbu_enable ) then
   if ( lbudget_rc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'CEDS', prcs(:, :, :) * prhodj(:, :, :) )
   if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'CEDS', pris(:, :, :) * prhodj(:, :, :) )
   if ( lbudget_sv ) then
-    if ( lwarm .and. nmom_c.ge.2) &
+    if ( nmom_c.ge.2) &
       call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc),       'CEDS', pccs(:, :, :) * prhodj(:, :, :) )
-    if ( lcold .and. nmom_i.ge.2) &
+    if ( nmom_i.ge.2) &
       call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni),       'CEDS', pcis(:, :, :) * prhodj(:, :, :) )
     if ( lscav .and. laero_mass ) &
       call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_scavmass), 'CEDS', pmas(:, :, :) * prhodj(:, :, :) )
-    if ( lwarm ) then
+    if ( nmom_c.ge.2 ) then
       do jl = 1, nmod_ccn
         idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_free - 1 + jl
         call Budget_store_init( tbudgets(idx), 'CEDS', pnfs(:, :, :, jl) * prhodj(:, :, :) )
@@ -404,7 +404,7 @@ if ( nbumod == kmi .and. lbu_enable ) then
         call Budget_store_init( tbudgets(idx), 'CEDS', pnas(:, :, :, jl) * prhodj(:, :, :) )
       end do
     end if
-    if ( lcold ) then
+    if ( nmom_i.ge.2 ) then
       do jl = 1, nmod_ifn
         idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_free - 1 + jl
         call Budget_store_init( tbudgets(idx), 'CEDS', pifs(:, :, :, jl) * prhodj(:, :, :) )
@@ -1096,7 +1096,7 @@ WHERE (PRIS(:,:,:) <= ZRTMIN(4) .OR. PCIS(:,:,:) <= ZCTMIN(4))
    PCIS(:,:,:) = 0.0
 END WHERE
 !
-IF (LCOLD .AND. (NMOD_IFN .GE. 1 .OR. NMOD_IMM .GE. 1)) THEN
+IF (NMOM_I.GE.2 .AND. (NMOD_IFN .GE. 1 .OR. NMOD_IMM .GE. 1)) THEN
    ZW1(:,:,:) = 0.
    IF (NMOD_IFN .GE. 1) ZW1(:,:,:) = ZW1(:,:,:) + SUM(PINS,DIM=4)
    IF (NMOD_IMM .GE. 1) ZW1(:,:,:) = ZW1(:,:,:) + SUM(PNIS,DIM=4)
@@ -1108,7 +1108,7 @@ IF (LCOLD .AND. (NMOD_IFN .GE. 1 .OR. NMOD_IMM .GE. 1)) THEN
    ENDWHERE
 END IF
 !
-IF (LCOLD .AND. NMOD_IFN.GE.1) THEN
+IF (NMOM_I.GE.2 .AND. NMOD_IFN.GE.1) THEN
    DO JMOD_IFN = 1, NMOD_IFN
       PIFS(:,:,:,JMOD_IFN) = PIFS(:,:,:,JMOD_IFN) +                    &
            ZMASK(:,:,:) * PINS(:,:,:,JMOD_IFN) * ZW2(:,:,:)
@@ -1118,7 +1118,7 @@ IF (LCOLD .AND. NMOD_IFN.GE.1) THEN
    ENDDO
 END IF
 !
-IF (LCOLD .AND. NMOD_IMM.GE.1) THEN
+IF (NMOM_I.GE.2 .AND. NMOD_IMM.GE.1) THEN
    JMOD_IMM = 0
    DO JMOD = 1, NMOD_CCN
       IF (NIMM(JMOD) == 1) THEN 
@@ -1145,7 +1145,7 @@ WHERE (PRCS(:,:,:) <= ZRTMIN(2) .OR. PCCS(:,:,:) <= ZCTMIN(2))
 END WHERE
 !
 ZW1(:,:,:) = 0.
-IF (LWARM .AND. NMOD_CCN.GE.1) ZW1(:,:,:) = SUM(PNAS,DIM=4)
+IF (NMOM_C.GE.2 .AND. NMOD_CCN.GE.1) ZW1(:,:,:) = SUM(PNAS,DIM=4)
 ZW (:,:,:) = MIN( ZW(:,:,:), ZW1(:,:,:) )
 ZW2(:,:,:) = 0.
 WHERE ( ZW(:,:,:) > 0. )
@@ -1153,7 +1153,7 @@ WHERE ( ZW(:,:,:) > 0. )
    ZW2(:,:,:) = ZW(:,:,:) / ZW1(:,:,:)
 ENDWHERE
 !
-IF (LWARM .AND. NMOD_CCN.GE.1) THEN
+IF (NMOM_C.GE.2 .AND. NMOD_CCN.GE.1) THEN
    DO JMOD = 1, NMOD_CCN
       PNFS(:,:,:,JMOD) = PNFS(:,:,:,JMOD) +                           &
            ZMASK(:,:,:) * PNAS(:,:,:,JMOD) * ZW2(:,:,:)
@@ -1230,22 +1230,22 @@ IF ( KRR .GE. 6 ) PRS(:,:,:,6) = PRGS(:,:,:)
 !
 ! Prepare 3D number concentrations
 !
-IF ( LWARM ) PSVS(:,:,:,NSV_LIMA_NC) = PCCS(:,:,:)
-IF ( LCOLD ) PSVS(:,:,:,NSV_LIMA_NI) = PCIS(:,:,:)
+IF ( NMOM_C.GE.2 ) PSVS(:,:,:,NSV_LIMA_NC) = PCCS(:,:,:)
+IF ( NMOM_I.GE.2 ) PSVS(:,:,:,NSV_LIMA_NI) = PCIS(:,:,:)
 !
 IF ( LSCAV .AND. LAERO_MASS ) PSVS(:,:,:,NSV_LIMA_SCAVMASS) = PMAS(:,:,:)
 ! 
-IF ( LWARM .AND. NMOD_CCN .GE. 1 ) THEN
+IF ( NMOM_C.GE.2 .AND. NMOD_CCN.GE.1 ) THEN
    PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) = PNFS(:,:,:,:)
    PSVS(:,:,:,NSV_LIMA_CCN_ACTI:NSV_LIMA_CCN_ACTI+NMOD_CCN-1) = PNAS(:,:,:,:)
 END IF
 !
-IF ( LCOLD .AND. NMOD_IFN .GE. 1 ) THEN
+IF ( NMOM_I.GE.2 .AND. NMOD_IFN.GE.1 ) THEN
    PSVS(:,:,:,NSV_LIMA_IFN_FREE:NSV_LIMA_IFN_FREE+NMOD_IFN-1) = PIFS(:,:,:,:)
    PSVS(:,:,:,NSV_LIMA_IFN_NUCL:NSV_LIMA_IFN_NUCL+NMOD_IFN-1) = PINS(:,:,:,:)
 END IF
 !
-IF ( LCOLD .AND. NMOD_IMM .GE. 1 ) THEN
+IF ( NMOM_I.GE.2 .AND. NMOD_IMM.GE.1 ) THEN
    PSVS(:,:,:,NSV_LIMA_IMM_NUCL:NSV_LIMA_IMM_NUCL+NMOD_IMM-1) = PNIS(:,:,:,:)
 END IF
 !
@@ -1281,13 +1281,13 @@ if ( nbumod == kmi .and. lbu_enable ) then
   if ( lbudget_rc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'CEDS', prcs(:, :, :) * prhodj(:, :, :) )
   if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'CEDS', pris(:, :, :) * prhodj(:, :, :) )
   if ( lbudget_sv ) then
-    if ( lwarm .and. nmom_c.ge.2) &
+    if ( nmom_c.ge.2) &
       call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc),       'CEDS', pccs(:, :, :) * prhodj(:, :, :) )
-    if ( lcold .and. nmom_i.ge.2) &
+    if ( nmom_i.ge.2) &
       call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni),       'CEDS', pcis(:, :, :) * prhodj(:, :, :) )
     if ( lscav .and. laero_mass ) &
       call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_scavmass), 'CEDS', pmas(:, :, :) * prhodj(:, :, :) )
-    if ( lwarm ) then
+    if ( nmom_c.ge.2 ) then
       do jl = 1, nmod_ccn
         idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_free - 1 + jl
         call Budget_store_end( tbudgets(idx), 'CEDS', pnfs(:, :, :, jl) * prhodj(:, :, :) )
@@ -1295,7 +1295,7 @@ if ( nbumod == kmi .and. lbu_enable ) then
         call Budget_store_end( tbudgets(idx), 'CEDS', pnas(:, :, :, jl) * prhodj(:, :, :) )
       end do
     end if
-    if ( lcold ) then
+    if ( nmom_i.ge.2 ) then
       do jl = 1, nmod_ifn
         idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_free - 1 + jl
         call Budget_store_end( tbudgets(idx), 'CEDS', pifs(:, :, :, jl) * prhodj(:, :, :) )
diff --git a/src/mesonh/micro/lima_cold.f90 b/src/mesonh/micro/lima_cold.f90
index 56ee422eb7a119cf64698742900da317719b4c39..b4c6b16540847310eea1d18a38e22c5713e339d0 100644
--- a/src/mesonh/micro/lima_cold.f90
+++ b/src/mesonh/micro/lima_cold.f90
@@ -8,7 +8,7 @@
 !      #####################
 !
 INTERFACE
-      SUBROUTINE LIMA_COLD (OSEDI, OHHONI, KSPLITG, PTSTEP, KMI,           &
+      SUBROUTINE LIMA_COLD (CST, OSEDI, OHHONI, KSPLITG, PTSTEP, KMI,      &
                            KRR, PZZ, PRHODJ,                               &
                            PRHODREF, PEXNREF, PPABST, PW_NU,               &
                            PTHT, PRT, PSVT,                                &
@@ -16,6 +16,9 @@ INTERFACE
                            PINPRS, PINPRG, PINPRH)
 !
 USE MODD_NSV,   only: NSV_LIMA_BEG
+USE MODD_CST,            ONLY: CST_t
+!
+TYPE(CST_t),              INTENT(IN)    :: CST
 !
 LOGICAL,                  INTENT(IN)    :: OSEDI   ! switch to activate the
                                                    ! cloud ice sedimentation
@@ -52,7 +55,7 @@ END INTERFACE
 END MODULE MODI_LIMA_COLD
 !
 !     ######################################################################
-      SUBROUTINE LIMA_COLD (OSEDI, OHHONI, KSPLITG, PTSTEP, KMI,           &
+      SUBROUTINE LIMA_COLD (CST, OSEDI, OHHONI, KSPLITG, PTSTEP, KMI,      &
                            KRR, PZZ, PRHODJ,                               &
                            PRHODREF, PEXNREF, PPABST, PW_NU,               &
                            PTHT, PRT, PSVT,                                &
@@ -111,6 +114,7 @@ END MODULE MODI_LIMA_COLD
 !*       0.    DECLARATIONS
 !              ------------
 
+USE MODD_CST,            ONLY: CST_t
 use modd_budget,     only: lbu_enable,                                                  &
                            lbudget_ri, lbudget_rs, lbudget_rg, lbudget_rh, lbudget_sv,  &
                            NBUDGET_RI, NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1, &
@@ -131,6 +135,8 @@ IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
+TYPE(CST_t),              INTENT(IN)    :: CST
+!
 LOGICAL,                  INTENT(IN)    :: OSEDI   ! switch to activate the 
                                                    ! cloud ice sedimentation
 LOGICAL,                  INTENT(IN)    :: OHHONI  ! enable haze freezing
@@ -261,16 +267,16 @@ PCSS(:,:,:) = 0.
 PCGS(:,:,:) = 0.  
 PCHS(:,:,:) = 0.
 !
-IF ( LWARM ) PCCT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NC)
-IF ( LWARM .AND. LRAIN ) PCRT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NR)
-IF ( LCOLD ) PCIT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NI)
+IF ( NMOM_C.GE.2 ) PCCT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NC)
+IF ( NMOM_R.GE.2 ) PCRT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NR)
+IF ( NMOM_I.GE.2 ) PCIT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NI)
 IF ( NMOM_S.GE.2 ) PCST(:,:,:) = PSVT(:,:,:,NSV_LIMA_NS)        
 IF ( NMOM_G.GE.2 ) PCGT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NG)        
 IF ( NMOM_H.GE.2 ) PCHT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NH)        
 !
-IF ( LWARM ) PCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC)
-IF ( LWARM .AND. LRAIN ) PCRS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR)
-IF ( LCOLD ) PCIS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI)
+IF ( NMOM_C.GE.2 ) PCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC)
+IF ( NMOM_R.GE.2 ) PCRS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR)
+IF ( NMOM_I.GE.2 ) PCIS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI)
 IF ( NMOM_S.GE.2 ) PCSS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NS)       
 IF ( NMOM_G.GE.2 ) PCGS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NG)        
 IF ( NMOM_H.GE.2 ) PCHS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NH)       
@@ -323,9 +329,9 @@ END IF
 !
 if ( lbu_enable ) then
   if ( lbudget_ri .and. osedi ) call Budget_store_init( tbudgets(NBUDGET_RI), 'SEDI', pris(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_rs .and. lsnow ) call Budget_store_init( tbudgets(NBUDGET_RS), 'SEDI', prss(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_rg .and. lsnow ) call Budget_store_init( tbudgets(NBUDGET_RG), 'SEDI', prgs(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_rh .and. lhail ) call Budget_store_init( tbudgets(NBUDGET_RH), 'SEDI', prhs(:, :, :) * prhodj(:, :, :) )
+  if ( lbudget_rs ) call Budget_store_init( tbudgets(NBUDGET_RS), 'SEDI', prss(:, :, :) * prhodj(:, :, :) )
+  if ( lbudget_rg ) call Budget_store_init( tbudgets(NBUDGET_RG), 'SEDI', prgs(:, :, :) * prhodj(:, :, :) )
+  if ( lbudget_rh ) call Budget_store_init( tbudgets(NBUDGET_RH), 'SEDI', prhs(:, :, :) * prhodj(:, :, :) )
   if ( lbudget_sv .and. osedi ) &
       call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'SEDI', pcis(:, :, :) * prhodj(:, :, :) )
   if (NMOM_S.GE.2) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ns), 'SEDI', pcss(:, :, :) * prhodj(:, :, :) )
@@ -341,9 +347,9 @@ CALL LIMA_COLD_SEDIMENTATION (OSEDI, KSPLITG, PTSTEP, KMI,     &
                               PCSS=PCSS, PCGS=PCGS, PCHS=PCHS    )
 if ( lbu_enable ) then
   if ( lbudget_ri .and. osedi ) call Budget_store_end( tbudgets(NBUDGET_RI), 'SEDI', pris(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_rs .and. lsnow ) call Budget_store_end( tbudgets(NBUDGET_RS), 'SEDI', prss(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_rg .and. lsnow ) call Budget_store_end( tbudgets(NBUDGET_RG), 'SEDI', prgs(:, :, :) * prhodj(:, :, :) )
-  if ( lbudget_rh .and. lhail ) call Budget_store_end( tbudgets(NBUDGET_RH), 'SEDI', prhs(:, :, :) * prhodj(:, :, :) )
+  if ( lbudget_rs ) call Budget_store_end( tbudgets(NBUDGET_RS), 'SEDI', prss(:, :, :) * prhodj(:, :, :) )
+  if ( lbudget_rg ) call Budget_store_end( tbudgets(NBUDGET_RG), 'SEDI', prgs(:, :, :) * prhodj(:, :, :) )
+  if ( lbudget_rh ) call Budget_store_end( tbudgets(NBUDGET_RH), 'SEDI', prhs(:, :, :) * prhodj(:, :, :) )
   if ( lbudget_sv .and. osedi ) &
       call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'SEDI', pcis(:, :, :) * prhodj(:, :, :) )
   if (NMOM_S.GE.2) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ns), 'SEDI', pcss(:, :, :) * prhodj(:, :, :) )
@@ -367,7 +373,7 @@ IF (LNUCL) THEN
                         PTHS, PRVS, PRCS, PRIS,                         &
                         PCCS, PCIS, PINS )
    ELSE
-      CALL LIMA_PHILLIPS (OHHONI, PTSTEP, KMI,                      &
+      CALL LIMA_PHILLIPS (CST, OHHONI, PTSTEP, KMI,                 &
                           PZZ, PRHODJ, PRHODREF, PEXNREF, PPABST,   &
                           PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
                           PTHS, PRVS, PRCS, PRIS,                   &
@@ -375,7 +381,7 @@ IF (LNUCL) THEN
                           PNAS, PIFS, PINS, PNIS   )
    END IF
 !
-   IF (LWARM .OR. (LHHONI .AND. NMOD_CCN.GE.1)) THEN
+   IF (NMOM_C.GE.1 .OR. (LHHONI .AND. NMOD_CCN.GE.1)) THEN
       CALL LIMA_COLD_HOM_NUCL (OHHONI, PTSTEP, KMI,                         &
                                PZZ, PRHODJ,                                 &
                                PRHODREF, PEXNREF, PPABST, PW_NU,            &
@@ -393,7 +399,7 @@ END IF
 !*       4.    SLOW PROCESSES: depositions, aggregation
 !              ----------------------------------------
 !
-IF (LSNOW) THEN
+IF (NMOM_S.GE.1) THEN
 !
    IF(NMOM_S.GE.2) THEN
       CALL LIMA_COLD_SLOW_PROCESSES(PTSTEP, KMI, PZZ, PRHODJ,                 &
@@ -449,9 +455,9 @@ IF ( KRR .GE. 7 ) PRS(:,:,:,7) = PRHS(:,:,:)
 !
 ! Prepare 3D number concentrations
 !
-IF ( LWARM ) PSVS(:,:,:,NSV_LIMA_NC) = PCCS(:,:,:)
-IF ( LWARM .AND. LRAIN ) PSVS(:,:,:,NSV_LIMA_NR) = PCRS(:,:,:)
-IF ( LCOLD ) PSVS(:,:,:,NSV_LIMA_NI) = PCIS(:,:,:)
+IF ( NMOM_C.GE.2 ) PSVS(:,:,:,NSV_LIMA_NC) = PCCS(:,:,:)
+IF ( NMOM_R.GE.2 ) PSVS(:,:,:,NSV_LIMA_NR) = PCRS(:,:,:)
+IF ( NMOM_I.GE.2 ) PSVS(:,:,:,NSV_LIMA_NI) = PCIS(:,:,:)
 IF ( NMOM_S.GE.2 ) PSVS(:,:,:,NSV_LIMA_NS) = PCSS(:,:,:) 
 IF ( NMOM_G.GE.2 ) PSVS(:,:,:,NSV_LIMA_NG) = PCGS(:,:,:) 
 IF ( NMOM_H.GE.2 ) PSVS(:,:,:,NSV_LIMA_NH) = PCHS(:,:,:) 
diff --git a/src/mesonh/micro/lima_cold_hom_nucl.f90 b/src/mesonh/micro/lima_cold_hom_nucl.f90
index 407ae868d0a8dc3de26edbc0c024a60fe0c4ba79..cf9fbfe5898328b4b9f941a15c5a8b6fcefbb910 100644
--- a/src/mesonh/micro/lima_cold_hom_nucl.f90
+++ b/src/mesonh/micro/lima_cold_hom_nucl.f90
@@ -104,7 +104,7 @@ USE MODD_CST,             ONLY: XP00, XRD, XRV, XMV, XMD, XCPD, XCPV, XCL, XCI,
                                 XG
 USE MODD_NSV
 USE MODD_PARAMETERS,      ONLY: JPHEXT, JPVEXT
-USE MODD_PARAM_LIMA,      ONLY: NMOD_CCN, NMOD_IMM, XRTMIN, XCTMIN, XNUC, LWARM, LRAIN
+USE MODD_PARAM_LIMA,      ONLY: NMOD_CCN, NMOD_IMM, XRTMIN, XCTMIN, XNUC, NMOM_C, NMOM_R
 USE MODD_PARAM_LIMA_COLD, ONLY: XRCOEF_HONH, XCEXP_DIFVAP_HONH, XCOEF_DIFVAP_HONH,&
                                 XCRITSAT1_HONH, XCRITSAT2_HONH, XTMAX_HONH,       &
                                 XTMIN_HONH, XC1_HONH, XC2_HONH, XC3_HONH,         &
@@ -485,7 +485,7 @@ IF (INEGT.GT.0) THEN
 !  Compute the droplet homogeneous nucleation source: RCHONI
 !                 -> Pruppacher(1995)
 !
-IF (LWARM) THEN
+IF (NMOM_C.GE.2) THEN
   if ( nbumod == kmi .and. lbu_enable ) then
     if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'HONC', &
                                              Unpack( zths(:), mask = gnegt(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) )
@@ -547,7 +547,7 @@ END IF
 !
 !  Compute the drop homogeneous nucleation source: RRHONG
 !
-IF (LWARM .AND. LRAIN) THEN
+IF (NMOM_R.GE.2) THEN
   if ( nbumod == kmi .and. lbu_enable ) then
     if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'HONR', &
                                              Unpack( zths(:), mask = gnegt(:, :, :), field = pths(:, :, :) ) * prhodj(:, :, :) )
diff --git a/src/mesonh/micro/lima_cold_slow_processes.f90 b/src/mesonh/micro/lima_cold_slow_processes.f90
index 0f74d6562a71c2d67b28f644df40dd449eb50bdd..64917a92a27c4bc1f32425e3d931f9919750fd89 100644
--- a/src/mesonh/micro/lima_cold_slow_processes.f90
+++ b/src/mesonh/micro/lima_cold_slow_processes.f90
@@ -98,7 +98,7 @@ USE MODD_CST,             ONLY: XP00, XRD, XRV, XMV, XMD, XCPD, XCPV,        &
                                 XCL, XCI, XTT, XLSTT, XALPI, XBETAI, XGAMI
 USE MODD_NSV,             ONLY: NSV_LIMA_NI, NSV_LIMA_NS
 USE MODD_PARAMETERS,      ONLY: JPHEXT, JPVEXT
-USE MODD_PARAM_LIMA,      ONLY: LSNOW, LSNOW_T, XRTMIN, XCTMIN,              &
+USE MODD_PARAM_LIMA,      ONLY: LSNOW_T, XRTMIN, XCTMIN,              &
                                 XALPHAI, XALPHAS, XNUI, XNUS, NMOM_S
 USE MODD_PARAM_LIMA_COLD, ONLY: XLBI, XLBEXI, XLBS, XLBEXS, XNS, XBI, XCXS, XCCS, &
                                 XLBDAS_MAX, XDSCNVI_LIM, XLBDASCNVI_MAX,     &
diff --git a/src/mesonh/micro/lima_functions.f90 b/src/mesonh/micro/lima_functions.f90
deleted file mode 100644
index b5a8f17d782405a0467ae9e39bc3d7cf8faf4b6a..0000000000000000000000000000000000000000
--- a/src/mesonh/micro/lima_functions.f90
+++ /dev/null
@@ -1,307 +0,0 @@
-!MNH_LIC Copyright 2016-2019 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.
-!-----------------------------------------------------------------
-! Modifications:
-!  P. Wautelet 22/01/2019: replace double precision declarations by real(kind(0.0d0)) (to allow compilation by NAG compiler)
-!  P. Wautelet 19/04/2019: use modd_precision kinds
-!  P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function
-!  P. Wautelet 28/05/2019: move COUNTJV function to tools.f90
-!-----------------------------------------------------------------
-!#################################
-        MODULE MODI_LIMA_FUNCTIONS
-!#################################
-!
-INTERFACE
-!
-FUNCTION MOMG (PALPHA,PNU,PP) RESULT (PMOMG)
-  REAL,                        INTENT(IN)           :: PALPHA 
-  REAL,                        INTENT(IN)           :: PNU    
-  REAL,                        INTENT(IN)           :: PP     
-  REAL                                              :: PMOMG  
-END FUNCTION MOMG
-!
-FUNCTION RECT(PA,PB,PX,PX1,PX2)  RESULT(PRECT)
-  REAL,                        INTENT(IN)           :: PA
-  REAL,                        INTENT(IN)           :: PB
-  REAL, DIMENSION(:),          INTENT(IN)           :: PX
-  REAL,                        INTENT(IN)           :: PX1
-  REAL,                        INTENT(IN)           :: PX2
-  REAL, DIMENSION(SIZE(PX,1))                       :: PRECT
-END FUNCTION RECT
-!
-FUNCTION DELTA(PA,PB,PX,PX1,PX2)  RESULT(PDELTA)
-  REAL,                        INTENT(IN)           :: PA
-  REAL,                        INTENT(IN)           :: PB
-  REAL, DIMENSION(:),          INTENT(IN)           :: PX
-  REAL,                        INTENT(IN)           :: PX1
-  REAL,                        INTENT(IN)           :: PX2
-  REAL, DIMENSION(SIZE(PX,1))                       :: PDELTA
-END FUNCTION DELTA
-!
-FUNCTION DELTA_VEC(PA,PB,PX,PX1,PX2)  RESULT(PDELTA_VEC)
-  REAL,                        INTENT(IN)           :: PA
-  REAL,                        INTENT(IN)           :: PB
-  REAL, DIMENSION(:),          INTENT(IN)           :: PX
-  REAL, DIMENSION(:),          INTENT(IN)           :: PX1
-  REAL, DIMENSION(:),          INTENT(IN)           :: PX2
-  REAL, DIMENSION(SIZE(PX,1))                       :: PDELTA_VEC
-END FUNCTION DELTA_VEC
-!
-SUBROUTINE GAULAG(x,w,n,alf)
-  INTEGER,                     INTENT(IN)           :: n
-  REAL,                        INTENT(IN)           :: alf
-  REAL, DIMENSION(n),          INTENT(INOUT)        :: w, x
-END SUBROUTINE GAULAG
-!
-SUBROUTINE GAUHER(x,w,n)
-  INTEGER,                     INTENT(IN)           :: n
-  REAL, DIMENSION(n),          INTENT(INOUT)        :: w, x
-END SUBROUTINE GAUHER
-!
-END INTERFACE
-!
-END MODULE MODI_LIMA_FUNCTIONS
-!
-!------------------------------------------------------------------------------
-!
-!###########################################
-FUNCTION MOMG (PALPHA,PNU,PP) RESULT (PMOMG)
-!###########################################
-!
-! auxiliary routine used to compute the Pth moment order of the generalized
-! gamma law
-!
-  USE MODI_GAMMA
-!
-  IMPLICIT NONE
-!
-  REAL     :: PALPHA ! first shape parameter of the dimensionnal distribution
-  REAL     :: PNU    ! second shape parameter of the dimensionnal distribution
-  REAL     :: PP     ! order of the moment
-  REAL     :: PMOMG  ! result: moment of order ZP
-!
-  PMOMG = GAMMA_X0D(PNU+PP/PALPHA)/GAMMA_X0D(PNU)
-!
-END FUNCTION MOMG
-!
-!------------------------------------------------------------------------------
-!
-!#############################################
-FUNCTION RECT(PA,PB,PX,PX1,PX2)  RESULT(PRECT)
-!#############################################
-!
-!     PRECT takes the value PA if PX1<=PX<PX2, and PB outside the [PX1;PX2[ interval
-!
-  IMPLICIT NONE
-!
-  REAL,                        INTENT(IN)           :: PA
-  REAL,                        INTENT(IN)           :: PB
-  REAL, DIMENSION(:),          INTENT(IN)           :: PX
-  REAL,                        INTENT(IN)           :: PX1
-  REAL,                        INTENT(IN)           :: PX2
-  REAL, DIMENSION(SIZE(PX,1))                       :: PRECT
-!
-  PRECT(:) = PB
-  WHERE (PX(:).GE.PX1 .AND. PX(:).LT.PX2)
-     PRECT(:) = PA
-  END WHERE
-  RETURN
-!
-END FUNCTION RECT
-!
-!-------------------------------------------------------------------------------
-!
-!###############################################
-FUNCTION DELTA(PA,PB,PX,PX1,PX2)  RESULT(PDELTA)
-!###############################################
-!
-!     PDELTA takes the value PA if PX<PX1, and PB if PX>=PX2
-!     PDELTA is a cubic interpolation between PA and PB for PX between PX1 and PX2 
-!
-  IMPLICIT NONE
-!
-  REAL,                        INTENT(IN)           :: PA
-  REAL,                        INTENT(IN)           :: PB
-  REAL, DIMENSION(:),          INTENT(IN)           :: PX
-  REAL,                        INTENT(IN)           :: PX1
-  REAL,                        INTENT(IN)           :: PX2
-  REAL, DIMENSION(SIZE(PX,1))                       :: PDELTA
-!
-!*       local variable
-!
-  REAL                                              :: ZA
-!
-  ZA = 6.0*(PA-PB)/(PX2-PX1)**3
-  WHERE     (PX(:).LT.PX1)
-     PDELTA(:) = PA
-  ELSEWHERE (PX(:).GE.PX2)
-     PDELTA(:) = PB
-  ELSEWHERE
-     PDELTA(:) =   PA + ZA*PX1**2*(PX1/6.0 - 0.5*PX2)              &
-          + ZA*PX1*PX2*                          (PX(:))    &
-          - (0.5*ZA*(PX1+PX2))*                  (PX(:)**2) & 
-          + (ZA/3.0)*                            (PX(:)**3)
-  END WHERE
-  RETURN
-!
-END FUNCTION DELTA
-!
-!-------------------------------------------------------------------------------
-!
-!#######################################################
-FUNCTION DELTA_VEC(PA,PB,PX,PX1,PX2)  RESULT(PDELTA_VEC)
-!#######################################################
-!
-!    Same as DELTA for vectorized PX1 and PX2 arguments
-!
-  IMPLICIT NONE
-!
-  REAL,                        INTENT(IN)           :: PA
-  REAL,                        INTENT(IN)           :: PB
-  REAL, DIMENSION(:),          INTENT(IN)           :: PX
-  REAL, DIMENSION(:),          INTENT(IN)           :: PX1
-  REAL, DIMENSION(:),          INTENT(IN)           :: PX2
-  REAL, DIMENSION(SIZE(PX,1))                       :: PDELTA_VEC
-!
-!*       local variable
-!
-  REAL, DIMENSION(SIZE(PX,1))                       :: ZA
-!
-  ZA(:) = 0.0
-  wHERE     (PX(:)<=PX1(:))
-     PDELTA_VEC(:) = PA
-  ELSEWHERE (PX(:)>=PX2(:))
-     PDELTA_VEC(:) = PB
-  ELSEWHERE
-     ZA(:)         = 6.0*(PA-PB)/(PX2(:)-PX1(:))**3
-     PDELTA_VEC(:) =   PA + ZA(:)*PX1(:)**2*(PX1(:)/6.0 - 0.5*PX2(:))           &
-          + ZA(:)*PX1(:)*PX2(:)*                          (PX(:))    &
-          - (0.5*ZA(:)*(PX1(:)+PX2(:)))*                  (PX(:)**2) & 
-          + (ZA(:)/3.0)*                                  (PX(:)**3)
-  END WHERE
-  RETURN
-!
-END FUNCTION DELTA_VEC
-!
-!-------------------------------------------------------------------------------
-!
-!###########################
-SUBROUTINE gaulag(x,w,n,alf)
-!###########################
-  use modd_precision, only: MNHREAL64
-
-  INTEGER n,MAXIT
-  REAL alf,w(n),x(n)
-  REAL(kind=MNHREAL64) :: EPS
-  PARAMETER (EPS=3.D-14,MAXIT=10)
-  INTEGER i,its,j
-  REAL ai
-  REAL(kind=MNHREAL64) :: p1,p2,p3,pp,z,z1
-!
-  REAL SUMW
-!
-  do 13 i=1,n
-     if(i.eq.1)then
-        z=(1.+alf)*(3.+.92*alf)/(1.+2.4*n+1.8*alf)
-     else if(i.eq.2)then
-        z=z+(15.+6.25*alf)/(1.+.9*alf+2.5*n)
-     else
-        ai=i-2
-        z=z+((1.+2.55*ai)/(1.9*ai)+1.26*ai*alf/(1.+3.5*ai))* &
-             (z-x(i-2))/(1.+.3*alf)
-     endif
-     do 12 its=1,MAXIT
-        p1=1.d0
-        p2=0.d0
-        do 11 j=1,n
-           p3=p2
-           p2=p1
-           p1=((2*j-1+alf-z)*p2-(j-1+alf)*p3)/j
-11      continue
-        pp=(n*p1-(n+alf)*p2)/z
-        z1=z
-        z=z1-p1/pp
-        if(abs(z-z1).le.EPS)goto 1
-12   continue
-1    x(i)=z
-     w(i)=-exp(gammln(alf+n)-gammln(real(n)))/(pp*n*p2)
-13 continue
-!
-! NORMALISATION
-!
-  SUMW = 0.0
-  DO 14 I=1,N
-     SUMW = SUMW + W(I)
-14 CONTINUE
-  DO 15 I=1,N
-     W(I) = W(I)/SUMW
-15 CONTINUE
-!
-  return
-END SUBROUTINE gaulag
-!
-!------------------------------------------------------------------------------
-!
-!##########################################
-SUBROUTINE gauher(x,w,n)
-!##########################################
-  use modd_precision, only: MNHREAL64
-
-  INTEGER n,MAXIT
-  REAL w(n),x(n)
-  REAL(kind=MNHREAL64) :: EPS,PIM4
-  PARAMETER (EPS=3.D-14,PIM4=.7511255444649425D0,MAXIT=10)
-  INTEGER i,its,j,m
-  REAL(kind=MNHREAL64) :: p1,p2,p3,pp,z,z1
-!
-  REAL SUMW
-!
-  m=(n+1)/2
-  do 13 i=1,m
-     if(i.eq.1)then
-        z=sqrt(real(2*n+1))-1.85575*(2*n+1)**(-.16667)
-     else if(i.eq.2)then
-        z=z-1.14*n**.426/z
-     else if (i.eq.3)then
-        z=1.86*z-.86*x(1)
-     else if (i.eq.4)then
-        z=1.91*z-.91*x(2)
-     else
-        z=2.*z-x(i-2)
-     endif
-     do 12 its=1,MAXIT
-        p1=PIM4
-        p2=0.d0
-        do 11 j=1,n
-           p3=p2
-           p2=p1
-           p1=z*sqrt(2.d0/j)*p2-sqrt(dble(j-1)/dble(j))*p3
-11      continue
-        pp=sqrt(2.d0*n)*p2
-        z1=z
-        z=z1-p1/pp
-        if(abs(z-z1).le.EPS)goto 1
-12   continue
-1    x(i)=z
-     x(n+1-i)=-z
-     pp=pp/PIM4 ! NORMALIZATION
-     w(i)=2.0/(pp*pp)
-     w(n+1-i)=w(i)
-13 continue
-!
-! NORMALISATION
-!
-  SUMW = 0.0
-  DO 14 I=1,N
-     SUMW = SUMW + W(I)
-14 CONTINUE
-  DO 15 I=1,N
-     W(I) = W(I)/SUMW
-15 CONTINUE
-!
-  return
-END SUBROUTINE gauher
-!
-!------------------------------------------------------------------------------
diff --git a/src/mesonh/micro/lima_inst_procs.f90 b/src/mesonh/micro/lima_inst_procs.f90
deleted file mode 100644
index 6a5aa149ea7368975e06dead5a299fc9e96d8226..0000000000000000000000000000000000000000
--- a/src/mesonh/micro/lima_inst_procs.f90
+++ /dev/null
@@ -1,197 +0,0 @@
-!MNH_LIC Copyright 2018-2021 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
-!MNH_LIC for details. version 1.
-!-------------------------------------------------------------------------------
-!      ###############################
-       MODULE MODI_LIMA_INST_PROCS
-!      ###############################
-!
-INTERFACE
-   SUBROUTINE LIMA_INST_PROCS (PTSTEP, LDCOMPUTE,                        &
-                               PEXNREF, PPABST,                          &
-                               PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
-                               PCCT, PCRT, PCIT,                         &
-                               PINT,                                     &
-                               P_CR_BRKU,                                & ! spontaneous break up of drops (BRKU) : Nr
-                               P_TH_HONR, P_RR_HONR, P_CR_HONR,          & ! rain drops homogeneous freezing (HONR) : rr, Nr, rg=-rr, th
-                               P_TH_IMLT, P_RC_IMLT, P_CC_IMLT,          & ! ice melting (IMLT) : rc, Nc, ri=-rc, Ni=-Nc, th, IFNF, IFNA
-                               PB_TH, PB_RV, PB_RC, PB_RR, PB_RI, PB_RG, &
-                               PB_CC, PB_CR, PB_CI,                      &
-                               PB_IFNN,                                  &
-                               PCF1D, PIF1D, PPF1D                       )
-!
-REAL,                 INTENT(IN)    :: PTSTEP     ! Time step
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PEXNREF    ! Reference Exner function
-REAL, DIMENSION(:),   INTENT(IN)    :: PPABST     ! abs. pressure at time t
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PTHT       ! Theta at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRVT       ! Water vapor m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT       ! Cloud water m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT       ! Rain water m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT       ! 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)    :: PCCT       ! Cloud water conc. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCRT       ! Rain water conc. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT       ! Prinstine ice conc. at t
-!
-REAL, DIMENSION(:,:), INTENT(IN)    :: PINT       ! IFN C. activated at t
-!
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_CR_BRKU  ! Concentration change (#/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_TH_HONR  ! 
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_RR_HONR  ! mr change (kg/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_CR_HONR  ! Concentration change (#/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_TH_IMLT  ! 
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_RC_IMLT  ! mr change (kg/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_CC_IMLT  ! Concentration change (#/kg)
-!
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_TH      ! Cumulated theta change
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_RV      ! Cumulated mr change (kg/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_RC      ! Cumulated mr change (kg/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_RR      ! Cumulated mr change (kg/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_RI      ! Cumulated mr change (kg/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_RG      ! Cumulated mr change (kg/kg)
-!
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_CC      ! Cumulated concentration change (#/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_CR      ! Cumulated concentration change (#/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_CI      ! Cumulated concentration change (#/kg)
-!
-REAL, DIMENSION(:,:), INTENT(INOUT) :: PB_IFNN    ! Cumulated concentration change (#/kg)
-!
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PCF1D      ! Liquid cloud fraction
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PIF1D      ! Ice cloud fraction
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PPF1D      ! Precipitation fraction
-!
-   END SUBROUTINE LIMA_INST_PROCS
-END INTERFACE
-END MODULE MODI_LIMA_INST_PROCS
-!
-!
-!     ###########################################################################
-SUBROUTINE LIMA_INST_PROCS (PTSTEP, LDCOMPUTE,                                  &
-                            PEXNREF, PPABST,                                    &
-                            PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,           &
-                            PCCT, PCRT, PCIT,                                   &
-                            PINT,                                               &
-                            P_CR_BRKU,                                          & ! spontaneous break up of drops (BRKU) : Nr
-                            P_TH_HONR, P_RR_HONR, P_CR_HONR,                    & ! rain drops homogeneous freezing (HONR) : rr, Nr, rg=-rr, th
-                            P_TH_IMLT, P_RC_IMLT, P_CC_IMLT,                    & ! ice melting (IMLT) : rc, Nc, ri=-rc, Ni=-Nc, th, IFNF, IFNA
-                            PB_TH, PB_RV, PB_RC, PB_RR, PB_RI, PB_RG,           &
-                            PB_CC, PB_CR, PB_CI,                                &
-                            PB_IFNN,                                            &
-                            PCF1D, PIF1D, PPF1D                                 )
-!     ###########################################################################
-!
-!!    PURPOSE
-!!    -------
-!!      Compute sources of instantaneous microphysical processes for the
-!!    time-split version of LIMA
-!!
-!!    AUTHOR
-!!    ------
-!!      B.    Vié        * CNRM *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             15/03/2018
-!!
-!-------------------------------------------------------------------------------
-!
-!
-USE MODD_PARAM_LIMA, ONLY : LCOLD, LWARM, LRAIN, NMOM_R
-!
-USE MODI_LIMA_DROPS_BREAK_UP
-USE MODI_LIMA_DROPS_HOM_FREEZING
-USE MODI_LIMA_ICE_MELTING
-
-IMPLICIT NONE
-
-
-
-REAL,                 INTENT(IN)    :: PTSTEP     ! Time step
-LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PEXNREF    ! Reference Exner function
-REAL, DIMENSION(:),   INTENT(IN)    :: PPABST     ! abs. pressure at time t
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: PTHT       ! Theta at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRVT       ! Water vapor m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT       ! Cloud water m.r. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRRT       ! Rain water m.r. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PRIT       ! 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)    :: PCCT       ! Cloud water conc. at t 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCRT       ! Rain water conc. at t
-REAL, DIMENSION(:),   INTENT(IN)    :: PCIT       ! Prinstine ice conc. at t
-!
-REAL, DIMENSION(:,:), INTENT(IN)    :: PINT       ! IFN C. activated at t
-!
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_CR_BRKU  ! Concentration change (#/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_TH_HONR  ! 
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_RR_HONR  ! mr change (kg/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_CR_HONR  ! Concentration change (#/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_TH_IMLT  ! 
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_RC_IMLT  ! mr change (kg/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: P_CC_IMLT  ! Concentration change (#/kg)
-!
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_TH      ! Cumulated theta change
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_RV      ! Cumulated mr change (kg/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_RC      ! Cumulated mr change (kg/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_RR      ! Cumulated mr change (kg/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_RI      ! Cumulated mr change (kg/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_RG      ! Cumulated mr change (kg/kg)
-!
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_CC      ! Cumulated concentration change (#/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_CR      ! Cumulated concentration change (#/kg)
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PB_CI      ! Cumulated concentration change (#/kg)
-!
-REAL, DIMENSION(:,:), INTENT(INOUT) :: PB_IFNN    ! Cumulated concentration change (#/kg)
-!
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PCF1D      ! Liquid cloud fraction
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PIF1D      ! Ice cloud fraction
-REAL, DIMENSION(:)  , INTENT(INOUT) :: PPF1D      ! Precipitation fraction
-!
-!-------------------------------------------------------------------------------
-!
-IF (LWARM .AND. LRAIN .AND. NMOM_R.GE.2) THEN
-   CALL LIMA_DROPS_BREAK_UP (LDCOMPUTE,    & ! no dependance on CF, IF or PF
-                             PCRT, PRRT,   &
-                             P_CR_BRKU,    &
-                             PB_CR         )
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-IF (LCOLD .AND. LWARM .AND. LRAIN) THEN
-   CALL LIMA_DROPS_HOM_FREEZING (PTSTEP, LDCOMPUTE,                        & ! no dependance on CF, IF or PF
-                                 PEXNREF, PPABST,                          &
-                                 PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
-                                 PCRT,                                     &
-                                 P_TH_HONR, P_RR_HONR, P_CR_HONR,          &
-                                 PB_TH, PB_RR, PB_CR, PB_RG                )
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-IF (LCOLD .AND. LWARM) THEN
-   CALL LIMA_ICE_MELTING (PTSTEP, LDCOMPUTE,                        & ! no dependance on CF, IF or PF
-                          PEXNREF, PPABST,                          & ! but ice fraction becomes cloud fraction
-                          PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, & ! -> where ?
-                          PCIT, PINT,                               &
-                          P_TH_IMLT, P_RC_IMLT, P_CC_IMLT,          &
-                          PB_TH, PB_RC, PB_CC, PB_RI, PB_CI, PB_IFNN)
-   !
-   !PCF1D(:)=MAX(PCF1D(:),PIF1D(:))
-   !PIF1D(:)=0.
-   !
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_INST_PROCS
diff --git a/src/mesonh/micro/lima_mixed.f90 b/src/mesonh/micro/lima_mixed.f90
index 400969656b513327addf6ebc070bff61d2e22fce..96fa6513876b27137b222d8b68de552fa8b65c9a 100644
--- a/src/mesonh/micro/lima_mixed.f90
+++ b/src/mesonh/micro/lima_mixed.f90
@@ -104,9 +104,9 @@ USE MODD_CST,              ONLY: XP00, XRD, XRV, XMV, XMD, XCPD, XCPV,       &
                                  XALPI, XBETAI, XGAMI
 USE MODD_NSV
 USE MODD_PARAMETERS,       ONLY: JPHEXT, JPVEXT
-USE MODD_PARAM_LIMA,       ONLY: NMOD_IFN, XRTMIN, XCTMIN, LWARM, LCOLD,     &
-                                 NMOD_CCN, NMOD_IMM, LRAIN, LSNOW, LHAIL, LSNOW_T,    &
-                                 NMOM_S, NMOM_G, NMOM_H
+USE MODD_PARAM_LIMA,       ONLY: NMOD_IFN, XRTMIN, XCTMIN,     &
+                                 NMOD_CCN, NMOD_IMM, LSNOW_T,    &
+                                 NMOM_C, NMOM_R, NMOM_I, NMOM_S, NMOM_G, NMOM_H
 USE MODD_PARAM_LIMA_WARM,  ONLY: XLBC, XLBEXC, XLBR, XLBEXR
 USE MODD_PARAM_LIMA_COLD,  ONLY: XLBI, XLBEXI, XLBS, XLBEXS, XSCFAC, &
                                  XLBDAS_MAX, XLBDAS_MIN, XTRANS_MP_GAMMAS, &
@@ -316,16 +316,16 @@ PCSS(:,:,:) = 0.
 PCGS(:,:,:) = 0. 
 PCHS(:,:,:) = 0. 
 !
-IF ( LWARM ) PCCT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NC) 
-IF ( LWARM .AND. LRAIN ) PCRT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NR)
-IF ( LCOLD ) PCIT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NI)
+IF ( NMOM_C.GE.2 ) PCCT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NC) 
+IF ( NMOM_R.GE.2 ) PCRT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NR)
+IF ( NMOM_I.GE.2 ) PCIT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NI)
 IF ( NMOM_S.GE.2 ) PCST(:,:,:) = PSVT(:,:,:,NSV_LIMA_NS)
 IF ( NMOM_G.GE.2 ) PCGT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NG)
 IF ( NMOM_H.GE.2 ) PCHT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NH)
 !
-IF ( LWARM ) PCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC)
-IF ( LWARM .AND. LRAIN ) PCRS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR)
-IF ( LCOLD ) PCIS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI)
+IF ( NMOM_C.GE.2 ) PCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC)
+IF ( NMOM_R.GE.2 ) PCRS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR)
+IF ( NMOM_I.GE.2 ) PCIS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI)
 IF ( NMOM_S.GE.2 ) PCSS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NS)
 IF ( NMOM_G.GE.2 ) PCGS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NG)
 IF ( NMOM_H.GE.2 ) PCHS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NH)
@@ -608,7 +608,7 @@ IF( IMICRO >= 0 ) THEN
 !        3.     Compute the fast RS and RG processes
 !   	        ------------------------------------
 !
-IF (LSNOW) THEN
+IF (NMOM_S.GE.1) THEN
    CALL LIMA_MIXED_FAST_PROCESSES(ZRHODREF, ZZT, ZPRES, PTSTEP,                   &
                                   ZLSFACT, ZLVFACT, ZKA, ZDV, ZCJ,                &
                                   ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT,             &
@@ -749,12 +749,12 @@ IF ( KRR .GE. 7 ) PRS(:,:,:,7) = PRHS(:,:,:)
 !
 ! Prepare 3D number concentrations
 !
-PSVS(:,:,:,NSV_LIMA_NC) = PCCS(:,:,:)
-IF ( LRAIN ) PSVS(:,:,:,NSV_LIMA_NR) = PCRS(:,:,:)
+IF ( NMOM_C.GE.2 ) PSVS(:,:,:,NSV_LIMA_NC) = PCCS(:,:,:)
+IF ( NMOM_R.GE.2 ) PSVS(:,:,:,NSV_LIMA_NR) = PCRS(:,:,:)
+IF ( NMOM_I.GE.2 ) PSVS(:,:,:,NSV_LIMA_NI) = PCIS(:,:,:)
 IF ( NMOM_S.GE.2 ) PSVS(:,:,:,NSV_LIMA_NS) = PCSS(:,:,:)
 IF ( NMOM_G.GE.2 ) PSVS(:,:,:,NSV_LIMA_NG) = PCGS(:,:,:)
 IF ( NMOM_H.GE.2 ) PSVS(:,:,:,NSV_LIMA_NH) = PCHS(:,:,:)
-PSVS(:,:,:,NSV_LIMA_NI) = PCIS(:,:,:)
 !
 IF ( NMOD_CCN .GE. 1 ) THEN
    PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) = PNFS(:,:,:,:)
diff --git a/src/mesonh/micro/lima_mixed_fast_processes.f90 b/src/mesonh/micro/lima_mixed_fast_processes.f90
index 6537474b4c65b126bd6e1052f844cd77d45c2e8b..fbd6f4262aeee15270085e26359d1cf0939daf31 100644
--- a/src/mesonh/micro/lima_mixed_fast_processes.f90
+++ b/src/mesonh/micro/lima_mixed_fast_processes.f90
@@ -309,13 +309,13 @@ LOGICAL :: M2_ICE
 !-------------------------------------------------------------------------------
 !
 M2_ICE = NMOM_S.GE.2 .AND. NMOM_G.GE.2
-IF (LHAIL) M2_ICE = M2_ICE .AND. NMOM_H.GE.2
+IF (NMOM_H.GE.1) M2_ICE = M2_ICE .AND. NMOM_H.GE.2
 !
 !                         #################
 !                         FAST RS PROCESSES
 !                         #################
 !
-SNOW: IF (LSNOW) THEN
+SNOW: IF (NMOM_S.GE.1) THEN
 !
 !
 !*       1.1  Cloud droplet riming of the aggregates  
@@ -832,7 +832,7 @@ ZZW1(:,2:3) = 0.0
 GACC(:) = (PRRT1D(:)>XRTMIN(3)) .AND. (PRST1D(:)>XRTMIN(5)) .AND. (PRRS1D(:)>XRTMIN(3)/PTSTEP) .AND. (PZT(:)<XTT)
 IGACC = COUNT( GACC(:) )
 !
-IF( IGACC>0 .AND. LRAIN) THEN
+IF( IGACC>0 .AND. NMOM_R.GE.2) THEN
   ! Budget storage
   if ( nbumod == kmi .and. lbu_enable ) then
     if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH), 'ACC', &
@@ -1269,7 +1269,7 @@ if ( nbumod == kmi .and. lbu_enable ) then
                                          Unpack( pcss1d(:), mask = gmicro(:, :, :), field = pcss(:, :, :) ) * prhodj(:, :, :) )
                   call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ng), 'WETG', &
                                          Unpack( pcgs1d(:), mask = gmicro(:, :, :), field = pcgs(:, :, :) ) * prhodj(:, :, :) )
-                  if (LHAIL) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nh), 'WETG', &
+                  if (NMOM_H.GE.2) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nh), 'WETG', &
                                          Unpack( pchs1d(:), mask = gmicro(:, :, :), field = pchs(:, :, :) ) * prhodj(:, :, :) )
        end if
   end if
@@ -1506,7 +1506,7 @@ END WHERE
 !
 ZZW(:) = 0.0
 NHAIL = 0.
-IF (LHAIL) NHAIL = 1.
+IF (NMOM_H.GE.1) NHAIL = 1.
 DO JJ=1, SIZE(PRGT1D)
    IF ( PRGT1D(JJ)>XRTMIN(6) .AND. PZT(JJ)<XTT .AND. &
         (ZRDRYG(JJ)-ZZW1(JJ,2)-ZZW1(JJ,3))>(ZRWETG(JJ)-ZZW1(JJ,5)-ZZW1(JJ,6)) .AND. (ZRWETG(JJ)-ZZW1(JJ,5)-ZZW1(JJ,6))>0.0 ) THEN
@@ -1576,7 +1576,7 @@ if ( nbumod == kmi .and. lbu_enable ) then
                                          Unpack( pcss1d(:), mask = gmicro(:, :, :), field = pcss(:, :, :) ) * prhodj(:, :, :) )
                   call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ng), 'WETG', &
                                          Unpack( pcgs1d(:), mask = gmicro(:, :, :), field = pcgs(:, :, :) ) * prhodj(:, :, :) )
-                  if (LHAIL) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nh), 'WETG', &
+                  if (NMOM_H.GE.2) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nh), 'WETG', &
                                          Unpack( pchs1d(:), mask = gmicro(:, :, :), field = pchs(:, :, :) ) * prhodj(:, :, :) )
        end if
   end if
@@ -1767,7 +1767,7 @@ end if
 !                         #################
 !
 !
-HAIL: IF (LHAIL) THEN
+HAIL: IF (NMOM_H.GE.1) THEN
 !
 GHAIL(:) = PRHT1D(:)>XRTMIN(7)
 IHAIL = COUNT(GHAIL(:))
diff --git a/src/mesonh/micro/lima_mixed_slow_processes.f90 b/src/mesonh/micro/lima_mixed_slow_processes.f90
index 1daf983b673fe3e601bdfe4ccd33a7a5f7f93304..609f54dd8d8f6d0a7ca7af505805ca7b9be8083f 100644
--- a/src/mesonh/micro/lima_mixed_slow_processes.f90
+++ b/src/mesonh/micro/lima_mixed_slow_processes.f90
@@ -132,7 +132,7 @@ use modd_budget,           only: lbu_enable, nbumod,
 USE MODD_CST,              ONLY : XTT, XALPI, XBETAI, XGAMI,          &
                                        XALPW, XBETAW, XGAMW
 USE MODD_NSV
-USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCTMIN, NMOD_IFN, LSNOW, LHAIL, NMOM_S, NMOM_G, NMOM_H
+USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCTMIN, NMOD_IFN, NMOM_S, NMOM_G, NMOM_H
 USE MODD_PARAM_LIMA_COLD,  ONLY : XDI, X0DEPI, X2DEPI, XSCFAC
 USE MODD_PARAM_LIMA_MIXED, ONLY : XLBG, XLBEXG, XLBDAG_MAX, XCCG, XCXG, &
                                   X0DEPG, XEX0DEPG, X1DEPG, XEX1DEPG,   &
@@ -202,7 +202,7 @@ INTEGER :: JMOD_IFN
 !        ---------------------------------------------
 !
 !
-IF (LSNOW) THEN
+IF (NMOM_S.GE.1) THEN
    ZZW(:) = 0.0
    WHERE ( (ZRGT(:)>XRTMIN(6)) .AND. (ZRGS(:)>XRTMIN(6)/PTSTEP) ) 
       ZZW(:) = ( ZSSI(:)/ZAI(:)/ZRHODREF(:) ) *  ZCGT(:) *               &
@@ -230,7 +230,7 @@ END IF
 !        ---------------------------------------------
 !
 !
-IF (LHAIL .AND. NMOM_H.GE.2) THEN
+IF (NMOM_H.GE.2) THEN
    ZZW(:) = 0.0
    WHERE ( (ZRHT(:)>XRTMIN(7)) .AND. (ZRHS(:)>XRTMIN(7)/PTSTEP) )
       ZZW(:) = ( ZSSI(:)/(ZAI(:)) ) *  ZCHT(:) *                                 &   
diff --git a/src/mesonh/micro/lima_notadjust.f90 b/src/mesonh/micro/lima_notadjust.f90
index ddd221297382b329637fea4589002845dcf4a696..255eaa618018099ffbd634f2e738f5541e0a4479 100644
--- a/src/mesonh/micro/lima_notadjust.f90
+++ b/src/mesonh/micro/lima_notadjust.f90
@@ -14,6 +14,7 @@ INTERFACE
                                 PTHT,PRT, PSVT, PTHS, PRS,PSVS, PCLDFR, PICEFR, PRAINFR, PSRCS )
 !
 USE MODD_IO, ONLY: TFILEDATA
+USE MODD_NSV,   only: NSV_LIMA_BEG
 !
 INTEGER,                  INTENT(IN)    :: KMI        ! Model index
 TYPE(TFILEDATA),          INTENT(IN)    :: TPFILE   ! Output file
@@ -30,10 +31,10 @@ REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ      ! Reference density
 !
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT     ! Theta
 REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT      ! m.r. at t
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT     ! Concentrations source
+REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(IN)    :: PSVT     ! Concentrations at t
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS     ! Theta source
 REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS      ! m.r. source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS     ! Concentrations source
+REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(INOUT) :: PSVS     ! Concentrations source
 REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PSRCS   ! Second-order flux
                                                    ! s'rc'/2Sigma_s2 at time t+1
                                                    ! multiplied by Lambda_3
@@ -120,10 +121,10 @@ REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ      ! Reference density
 !
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT     ! Theta
 REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT      ! m.r. at t
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PSVT     ! Concentrations source
+REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(IN)    :: PSVT     ! Concentrations at t
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS     ! Theta source
 REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRS      ! m.r. source
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PSVS     ! Concentrations source
+REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(INOUT) :: PSVS     ! Concentrations source
 REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PSRCS   ! Second-order flux
                                                    ! s'rc'/2Sigma_s2 at time t+1
                                                    ! multiplied by Lambda_3
@@ -192,7 +193,7 @@ if ( nbumod == kmi .and. lbu_enable ) then
   if ( lbudget_rc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'CEDS', prs(:, :, :, 2) * prhodj(:, :, :) )
   if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'CEDS', prs(:, :, :, 4) * prhodj(:, :, :) )
   if ( lbudget_sv ) then
-    if ( lwarm .and. nmom_c.ge.2) then
+    if ( nmom_c.ge.2) then
       call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'CEDS', psvs(:, :, :, nsv_lima_nc) * prhodj(:, :, :) )
       do jl = nsv_lima_ccn_free, nsv_lima_ccn_free + nmod_ccn - 1
         idx = NBUDGET_SV1 - 1 + jl
@@ -206,7 +207,7 @@ if ( nbumod == kmi .and. lbu_enable ) then
 !     if ( lscav .and. laero_mass ) &
 !       call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_scavmass), 'CEDS', psvs(:, :, :, nsv_lima_scavmass) &
 !                                                                                     * prhodj(:, :, :) )
-!     if ( lcold ) then
+!     if ( nmom_i.ge.2 ) then
 !       call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CEDS', psvs(:, :, :, nsv_lima_ni) * prhodj(:, :, :) )
 !       do jl = 1, nsv_lima_ifn_free, nsv_lima_ifn_free + nmod_ifn - 1
 !         idx = NBUDGET_SV1 - 1 + jl
@@ -611,7 +612,7 @@ if ( nbumod == kmi .and. lbu_enable ) then
   if ( lbudget_rc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'CEDS', prs(:, :, :, 2) * prhodj(:, :, :) )
   if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'CEDS', prs(:, :, :, 4) * prhodj(:, :, :) )
   if ( lbudget_sv ) then
-    if ( lwarm .and. nmom_c.ge.2) then
+    if (nmom_c.ge.2) then
       call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'CEDS', psvs(:, :, :, nsv_lima_nc) * prhodj(:, :, :) )
       do jl = nsv_lima_ccn_free, nsv_lima_ccn_free + nmod_ccn - 1
         idx = NBUDGET_SV1 - 1 + jl
@@ -625,7 +626,7 @@ if ( nbumod == kmi .and. lbu_enable ) then
 !     if ( lscav .and. laero_mass ) &
 !       call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_scavmass), 'CEDS', psvs(:, :, :, nsv_lima_scavmass) &
 !                                                                                     * prhodj(:, :, :) )
-!     if ( lcold ) then
+!     if ( nmom_i.ge.2 ) then
 !       call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CEDS', psvs(:, :, :, nsv_lima_ni) * prhodj(:, :, :) )
 !       do jl = 1, nsv_lima_ifn_free, nsv_lima_ifn_free + nmod_ifn - 1
 !         idx = NBUDGET_SV1 - 1 + jl
diff --git a/src/mesonh/micro/lima_nucleation_procs.f90 b/src/mesonh/micro/lima_nucleation_procs.f90
deleted file mode 100644
index 07213550da89d9bb98882dbae62392b49d708ded..0000000000000000000000000000000000000000
--- a/src/mesonh/micro/lima_nucleation_procs.f90
+++ /dev/null
@@ -1,392 +0,0 @@
-!MNH_LIC Copyright 2018-2021 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
-!MNH_LIC for details. version 1.
-!-------------------------------------------------------------------------------
-!      ###############################
-       MODULE MODI_LIMA_NUCLEATION_PROCS
-!      ###############################
-!
-INTERFACE
-   SUBROUTINE LIMA_NUCLEATION_PROCS (PTSTEP, TPFILE, 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                        )
-!
-USE MODD_IO, ONLY: TFILEDATA
-!
-REAL,                     INTENT(IN)    :: PTSTEP     ! Double Time step
-TYPE(TFILEDATA),          INTENT(IN)    :: TPFILE     ! Output file
-!
-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)    :: PDTHRAD    ! Radiative temperature tendency
-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
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCLDFR     ! Cloud fraction
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PICEFR     ! Ice fraction
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PPRCFR     ! Precipitation fraction
-!
-END SUBROUTINE LIMA_NUCLEATION_PROCS
-END INTERFACE
-END MODULE MODI_LIMA_NUCLEATION_PROCS
-!     #############################################################################
-SUBROUTINE LIMA_NUCLEATION_PROCS (PTSTEP, TPFILE, 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                        )
-!     #############################################################################
-!
-!!    PURPOSE
-!!    -------
-!!      Compute nucleation processes for the time-split version of LIMA
-!!
-!!    AUTHOR
-!!    ------
-!!      B.    Vié        * CNRM *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             15/03/2018
-!  M. Leriche     06/2019: missing update of PNFT after CCN hom. ncl.
-!  P. Wautelet 27/02/2020: bugfix: PNFT was not updated after LIMA_CCN_HOM_FREEZING
-!  P. Wautelet 27/02/2020: add Z_TH_HINC variable (for budgets)
-!  P. Wautelet    02/2020: use the new data structures and subroutines for budgets
-!  B. Vie      03/03/2020: use DTHRAD instead of dT/dt in Smax diagnostic computation
-!  B. Vie         03/2022: Add option for 1-moment pristine ice
-!-------------------------------------------------------------------------------
-!
-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_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, &
-                            NSV_LIMA_NI, NSV_LIMA_IFN_FREE, NSV_LIMA_IFN_NUCL, NSV_LIMA_IMM_NUCL, NSV_LIMA_HOM_HAZE
-USE MODD_PARAM_LIMA, ONLY : LCOLD, LNUCL, LMEYERS, LSNOW, LWARM, LACTI, LRAIN, 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 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
-!
-!-------------------------------------------------------------------------------
-!
-IMPLICIT NONE
-!
-!-------------------------------------------------------------------------------
-!
-REAL,                     INTENT(IN)    :: PTSTEP     ! Double Time step
-TYPE(TFILEDATA),          INTENT(IN)    :: TPFILE     ! Output file
-!
-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)    :: PDTHRAD    ! Radiative temperature tendency
-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
-!
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCLDFR     ! Cloud fraction
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PICEFR     ! Ice fraction
-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
-!
-integer :: idx
-INTEGER :: JL
-!
-!-------------------------------------------------------------------------------
-!
-IF ( LWARM .AND. 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 )
-        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 )
-          idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_acti - 1 + jl
-          call Budget_store_init( tbudgets(idx), 'HENU', pnat(:, :, :, jl) * prhodj(:, :, :) / ptstep )
-        end do
-      end if
-    end if
-
-    CALL LIMA_CCN_ACTIVATION( TPFILE,                                           &
-                              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 )
-        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 )
-          idx = NBUDGET_SV1 - 1 + nsv_lima_ccn_acti - 1 + jl
-          call Budget_store_end( tbudgets(idx), 'HENU', pnat(:, :, :, jl) * prhodj(:, :, :) / ptstep )
-        end do
-      end if
-    end if
-
-  END IF
-
-  WHERE(PCLDFR(:,:,:)<1.E-10 .AND. PRCT(:,:,:)>XRTMIN(2) .AND. PCCT(:,:,:)>XCTMIN(2)) PCLDFR(:,:,:)=1.
-
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-IF ( LCOLD .AND. LNUCL .AND. NMOM_I>=2 .AND. .NOT.LMEYERS .AND. NMOD_IFN >= 1 ) THEN
-  if ( lbu_enable ) then
-    if ( 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 )
-        idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl - 1 + jl
-        call Budget_store_init( 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 )
-      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 )
-      end do
-    end if
-  end if
-
-   CALL LIMA_PHILLIPS_IFN_NUCLEATION (PTSTEP,                                           &
-                                      PRHODREF, PEXNREF, PPABST,                        &
-                                      PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,         &
-                                      PCCT, PCIT, PNAT, PIFT, PINT, PNIT,               &
-                                      Z_TH_HIND, Z_RI_HIND, Z_CI_HIND,                  &
-                                      Z_TH_HINC, Z_RC_HINC, Z_CC_HINC,                  &
-                                      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 )
-      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 )
-        idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl - 1 + jl
-        call Budget_store_end( 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 (nmom_c.ge.2) then
-          call Budget_store_add( 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 )
-      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 )
-      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 )
-      end do
-    end if
-  end if
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-IF (LCOLD .AND. LNUCL .AND. NMOM_I>=2 .AND. LMEYERS) THEN
-   CALL LIMA_MEYERS_NUCLEATION (PTSTEP,                                     &
-                                PRHODREF, PEXNREF, PPABST,                  &
-                                PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT,   &
-                                PCCT, PCIT, PINT,                           &
-                                Z_TH_HIND, Z_RI_HIND, Z_CI_HIND,            &
-                                Z_TH_HINC, Z_RC_HINC, Z_CC_HINC,            &
-                                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 (nmod_ifn > 0 ) &
-        call Budget_store_add( 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 (nmom_c.ge.2) then
-          call Budget_store_add( 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 )
-      if (nmod_ifn > 0 ) &
-        call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl), 'HINC', &
-                               -z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
-    end if
-  end if
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-IF (LCOLD .AND. 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)
-  !
-!  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
-!  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 (nmod_ifn > 0 ) &
-!        call Budget_store_add( 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 (nmod_ifn > 0 ) &
-!        call Budget_store_add( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl), 'HINC', &
-!                               -z_cc_hinc(:, :, :) * prhodj(:, :, :) / ptstep )
-!    end if
-!  end if
-END IF
-!
-!-------------------------------------------------------------------------------
-!
-IF ( LCOLD .AND. 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 )
-      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 )
-      end do
-      call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_hom_haze), 'HONH', PNHT(:, :, :) * prhodj(:, :, :) / ptstep )
-    end if
-  end if
-
-  CALL LIMA_CCN_HOM_FREEZING (PRHODREF, PEXNREF, PPABST, PW_NU,          &
-                               PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
-                               PCCT, PCRT, PCIT, PNFT, PNHT,             &
-                               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 )
-      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 )
-      end do
-      call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_hom_haze), 'HONH', PNHT(:, :, :) * prhodj(:, :, :) / ptstep )
-    end if
-  end if
-ENDIF
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_NUCLEATION_PROCS
diff --git a/src/mesonh/micro/lima_phillips.f90 b/src/mesonh/micro/lima_phillips.f90
index 1ca330e353e142451acd53c6bec902cae233b4b8..2374f6725e657d915e3dce6501dab6ff527b0025 100644
--- a/src/mesonh/micro/lima_phillips.f90
+++ b/src/mesonh/micro/lima_phillips.f90
@@ -8,13 +8,16 @@
 !      #########################
 !
 INTERFACE
-      SUBROUTINE LIMA_PHILLIPS (OHHONI, PTSTEP, KMI,                      &
+      SUBROUTINE LIMA_PHILLIPS (CST, OHHONI, PTSTEP, KMI,                 &
                                 PZZ, PRHODJ, PRHODREF, PEXNREF, PPABST,   &
                                 PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
                                 PTHS, PRVS, PRCS, PRIS,                   &
                                 PCIT, PCCS, PCIS,                         &
                                 PNAS, PIFS, PINS, PNIS   )
 !
+USE MODD_CST,            ONLY: CST_t
+TYPE(CST_t),              INTENT(IN)    :: CST
+!
 LOGICAL,                  INTENT(IN)    :: OHHONI  ! enable haze freezing
 REAL,                     INTENT(IN)    :: PTSTEP  ! Time step          
 INTEGER,                  INTENT(IN)    :: KMI     ! Model index 
@@ -59,7 +62,7 @@ END INTERFACE
 END MODULE MODI_LIMA_PHILLIPS
 !
 !     #####################################################################
-      SUBROUTINE LIMA_PHILLIPS (OHHONI, PTSTEP, KMI,                      &
+      SUBROUTINE LIMA_PHILLIPS (CST, OHHONI, PTSTEP, KMI,                 &
                                 PZZ, PRHODJ, PRHODREF, PEXNREF, PPABST,   &
                                 PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
                                 PTHS, PRVS, PRCS, PRIS,                   &
@@ -128,9 +131,7 @@ use modd_budget,          only: lbu_enable, nbumod,
                                 lbudget_th, lbudget_rv, lbudget_rc, lbudget_ri, lbudget_sv,  &
                                 NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RI, NBUDGET_SV1, &
                                 tbudgets
-USE MODD_CST,             ONLY : XP00, XRD, XMV, XMD, XCPD, XCPV, XCL, XCI,        &
-                                 XTT, XLSTT, XLVTT, XALPI, XBETAI, XGAMI,          &
-                                 XALPW, XBETAW, XGAMW, XPI
+USE MODD_CST,             ONLY : CST_t
 USE MODD_NSV, ONLY : NSV_LIMA_NC, NSV_LIMA_NI, NSV_LIMA_CCN_ACTI, NSV_LIMA_IFN_FREE, NSV_LIMA_IFN_NUCL, NSV_LIMA_IMM_NUCL
 USE MODD_PARAMETERS,      ONLY : JPHEXT, JPVEXT
 USE MODD_PARAM_LIMA,      ONLY : NMOD_IFN, NSPECIE, XFRAC,                         &
@@ -141,13 +142,15 @@ USE MODD_PARAM_LIMA_COLD, ONLY : XMNU0
 use mode_budget,          only: Budget_store_init, Budget_store_end
 use mode_tools,           only: Countjv
 
-USE MODI_LIMA_PHILLIPS_INTEG
-USE MODI_LIMA_PHILLIPS_REF_SPECTRUM
+USE MODE_LIMA_PHILLIPS_INTEG, ONLY: LIMA_PHILLIPS_INTEG
+USE MODE_LIMA_PHILLIPS_REF_SPECTRUM, ONLY: LIMA_PHILLIPS_REF_SPECTRUM
 
 IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
+TYPE(CST_t),              INTENT(IN)    :: CST
+!
 LOGICAL,                  INTENT(IN)    :: OHHONI  ! enable haze freezing
 REAL,                     INTENT(IN)    :: PTSTEP  ! Time step          
 INTEGER,                  INTENT(IN)    :: KMI     ! Model index 
@@ -273,12 +276,12 @@ ZCTMIN(:) = XCTMIN(:) / PTSTEP
 !
 ! Temperature
 !
-ZT(:,:,:)  = PTHT(:,:,:) * ( PPABST(:,:,:)/XP00 ) ** (XRD/XCPD)
+ZT(:,:,:)  = PTHT(:,:,:) * ( PPABST(:,:,:)/CST%XP00 ) ** (CST%XRD/CST%XCPD)
 !
 ! Saturation over ice
 !
-ZW(:,:,:) = EXP( XALPI - XBETAI/ZT(:,:,:) - XGAMI*ALOG(ZT(:,:,:) ) )
-ZW(:,:,:) = PRVT(:,:,:)*( PPABST(:,:,:)-ZW(:,:,:) ) / ( (XMV/XMD) * ZW(:,:,:) )
+ZW(:,:,:) = EXP( CST%XALPI - CST%XBETAI/ZT(:,:,:) - CST%XGAMI*ALOG(ZT(:,:,:) ) )
+ZW(:,:,:) = PRVT(:,:,:)*( PPABST(:,:,:)-ZW(:,:,:) ) / ( (CST%XMV/CST%XMD) * ZW(:,:,:) )
 !
 !
 !-------------------------------------------------------------------------------
@@ -289,7 +292,7 @@ ZW(:,:,:) = PRVT(:,:,:)*( PPABST(:,:,:)-ZW(:,:,:) ) / ( (XMV/XMD) * ZW(:,:,:) )
 !
 !
 GNEGT(:,:,:) = .FALSE.
-GNEGT(IIB:IIE,IJB:IJE,IKB:IKE) = ZT(IIB:IIE,IJB:IJE,IKB:IKE)<XTT-2.0 .AND. &
+GNEGT(IIB:IIE,IJB:IJE,IKB:IKE) = ZT(IIB:IIE,IJB:IJE,IKB:IKE)<CST%XTT-2.0 .AND. &
                                  ZW(IIB:IIE,IJB:IJE,IKB:IKE)>0.95
 INEGT = COUNTJV( GNEGT(:,:,:),I1(:),I2(:),I3(:))
 !
@@ -384,17 +387,17 @@ ALLOCATE( ZZY (INEGT) ) ; ZZY(:) = 0.0
 !	        -----------------------------------------
 !
 !
-ZTCELSIUS(:) = ZZT(:)-XTT                                    ! T [°C]
-ZZW(:)  = ZEXNREF(:)*( XCPD+XCPV*ZRVT(:)+XCL*(ZRCT(:)+ZRRT(:)) &
-     +XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) )
-ZLSFACT(:) = (XLSTT+(XCPV-XCI)*ZTCELSIUS(:))/ZZW(:)          ! L_s/(Pi_ref*C_ph)
-ZLVFACT(:) = (XLVTT+(XCPV-XCL)*ZTCELSIUS(:))/ZZW(:)          ! L_v/(Pi_ref*C_ph)
+ZTCELSIUS(:) = ZZT(:)-CST%XTT                                    ! T [°C]
+ZZW(:)  = ZEXNREF(:)*( CST%XCPD+CST%XCPV*ZRVT(:)+CST%XCL*(ZRCT(:)+ZRRT(:)) &
+     +CST%XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) )
+ZLSFACT(:) = (CST%XLSTT+(CST%XCPV-CST%XCI)*ZTCELSIUS(:))/ZZW(:)          ! L_s/(Pi_ref*C_ph)
+ZLVFACT(:) = (CST%XLVTT+(CST%XCPV-CST%XCL)*ZTCELSIUS(:))/ZZW(:)          ! L_v/(Pi_ref*C_ph)
 !
-ZZW(:)  = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) ) ! es_i
-ZSI(:)  = ZRVT(:)*(ZPRES(:)-ZZW(:))/((XMV/XMD)*ZZW(:))       ! Saturation over ice
+ZZW(:)  = EXP( CST%XALPI - CST%XBETAI/ZZT(:) - CST%XGAMI*ALOG(ZZT(:) ) ) ! es_i
+ZSI(:)  = ZRVT(:)*(ZPRES(:)-ZZW(:))/((CST%XMV/CST%XMD)*ZZW(:))       ! Saturation over ice
 !
-ZZY(:)  = EXP( XALPW - XBETAW/ZZT(:) - XGAMW*ALOG(ZZT(:) ) ) ! es_w
-ZSW(:)  = ZRVT(:)*(ZPRES(:)-ZZY(:))/((XMV/XMD)*ZZY(:))       ! Saturation over water
+ZZY(:)  = EXP( CST%XALPW - CST%XBETAW/ZZT(:) - CST%XGAMW*ALOG(ZZT(:) ) ) ! es_w
+ZSW(:)  = ZRVT(:)*(ZPRES(:)-ZZY(:))/((CST%XMV/CST%XMD)*ZZY(:))       ! Saturation over water
 !
 ZSI_W(:)= ZZY(:)/ZZW(:)     ! Saturation over ice at water saturation: es_w/es_i
 !
@@ -423,12 +426,12 @@ END IF
 !
 ! Computation of the reference activity spectrum ( ZZY = N_{IN,1,*} )
 !
-CALL LIMA_PHILLIPS_REF_SPECTRUM(ZZT, ZSI, ZSI_W, ZZY)
+CALL LIMA_PHILLIPS_REF_SPECTRUM(CST, ZZT, ZSI, ZSI_W, ZZY)
 !
 ! For each aerosol species (DM1, DM2, BC, O), compute the fraction that may be activated
 ! Z_FRAC_ACT(INEGT,NSPECIE) = fraction of each species that may be activated
 !
-CALL LIMA_PHILLIPS_INTEG(ZZT, ZSI, ZSI0, ZSW, ZZY, Z_FRAC_ACT)
+CALL LIMA_PHILLIPS_INTEG(CST, ZZT, ZSI, ZSI0, ZSW, ZZY, Z_FRAC_ACT)
 !
 !
 !-------------------------------------------------------------------------------
diff --git a/src/mesonh/micro/lima_phillips_integ.f90 b/src/mesonh/micro/lima_phillips_integ.f90
deleted file mode 100644
index 3af3048c6be9e97c9e7f21db12995e446ec2c802..0000000000000000000000000000000000000000
--- a/src/mesonh/micro/lima_phillips_integ.f90
+++ /dev/null
@@ -1,163 +0,0 @@
-!      ###############################
-       MODULE MODI_LIMA_PHILLIPS_INTEG
-!      ###############################
-!
-INTERFACE
-      SUBROUTINE LIMA_PHILLIPS_INTEG (ZZT, ZSI, ZSI0, ZSW, ZZY, Z_FRAC_ACT)
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: ZZT
-REAL, DIMENSION(:),   INTENT(IN)    :: ZSI
-REAL, DIMENSION(:,:), INTENT(IN)    :: ZSI0
-REAL, DIMENSION(:),   INTENT(IN)    :: ZSW
-REAL, DIMENSION(:),   INTENT(IN)    :: ZZY
-REAL, DIMENSION(:,:), INTENT(INOUT) :: Z_FRAC_ACT
-!
-END SUBROUTINE LIMA_PHILLIPS_INTEG
-END INTERFACE
-END MODULE MODI_LIMA_PHILLIPS_INTEG
-!
-!     ######################################################################
-      SUBROUTINE LIMA_PHILLIPS_INTEG (ZZT, ZSI, ZSI0, ZSW, ZZY, Z_FRAC_ACT)
-!     ######################################################################
-!!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the fraction of each aerosol 
-!!    species (DM1, DM2, BC, O) that may be activated, following Phillips (2008)
-!!
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!      Phillips et al., 2008: An empirical parameterization of heterogeneous
-!!        ice nucleation for multiple chemical species of aerosols, J. Atmos. Sci. 
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_CST,             ONLY : XTT, XPI
-USE MODD_PARAM_LIMA,      ONLY : XMDIAM_IFN, XSIGMA_IFN, NSPECIE, XFRAC_REF, &
-                                 XH, XAREA1, XGAMMA, XABSCISS, XWEIGHT, NDIAM,     &
-                                 XT0, XDT0, XDSI0, XSW0, XTX1, XTX2
-USE MODI_LIMA_FUNCTIONS,  ONLY : DELTA, DELTA_VEC
-USE MODI_GAMMA_INC
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-REAL, DIMENSION(:),   INTENT(IN)    :: ZZT
-REAL, DIMENSION(:),   INTENT(IN)    :: ZSI
-REAL, DIMENSION(:,:), INTENT(IN)    :: ZSI0
-REAL, DIMENSION(:),   INTENT(IN)    :: ZSW
-REAL, DIMENSION(:),   INTENT(IN)    :: ZZY
-REAL, DIMENSION(:,:), INTENT(INOUT) :: Z_FRAC_ACT
-!
-!*       0.2   Declarations of local variables :
-!
-INTEGER :: JSPECIE, JL, JL2
-REAL :: XB
-!
-REAL, DIMENSION(:), ALLOCATABLE :: ZZX,      & ! Work array
-                                   ZFACTOR,  &
-                                   ZSUBSAT,  &
-                                   ZEMBRYO
-!
-LOGICAL, DIMENSION(:),   ALLOCATABLE :: GINTEG ! Mask to integrate over the
-                                               ! AP size spectrum
-!
-!
-!-------------------------------------------------------------------------------
-!
-!
-DO JSPECIE = 1, NSPECIE        ! = 4 = {DM1, DM2, BC, O} respectively  
-!
-   ALLOCATE(ZZX     (SIZE(ZZT)) ) ; ZZX(:) = 0.0
-   ALLOCATE(ZFACTOR (SIZE(ZZT)) )
-   ALLOCATE(ZSUBSAT (SIZE(ZZT)) )    
-   ALLOCATE(ZEMBRYO (SIZE(ZZT)) )
-   ALLOCATE(GINTEG  (SIZE(ZZT)) )
-
-! Compute log in advance for efficiency
-   XB = LOG(0.1E-6/XMDIAM_IFN(JSPECIE))/(SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE)))
-! ZFACTOR = f_c
-   ZFACTOR(:) = DELTA(1.,XH(JSPECIE),ZZT(:),XT0(JSPECIE),XT0(JSPECIE)+XDT0(JSPECIE))         &
-        * DELTA_VEC(0.,1.,ZSI(:),ZSI0(:,JSPECIE),ZSI0(:,JSPECIE)+XDSI0(JSPECIE)) / XGAMMA
-! ZSUBSAT = H_X
-   ZSUBSAT(:) = MIN(ZFACTOR(:)+(1.0-ZFACTOR(:))*DELTA(0.,1.,ZSW(:),XSW0,1.) , 1.0)
-! ZEMBRYO = µ_X/(pi*(D_X)**2) = A
-   ZEMBRYO(:) = ZSUBSAT(:)*DELTA(1.,0.,ZZT(:),XTX1(JSPECIE),XTX2(JSPECIE))          &
-        * XFRAC_REF(JSPECIE)*ZZY(:)/XAREA1(JSPECIE) 
-!
-! For T warmer than -35°C, the integration is approximated with µ_X << 1
-! Error function : GAMMA_INC(1/2, x**2) = ERF(x) !!! for x>=0 !!!
-!   
-!   WHERE (ZZT(:)>(XTT-35.) .AND. ZEMBRYO(:)>1.0E-8)   
-!      ZZX(:) = ZZX(:) + ZEMBRYO(:) * XPI * (XMDIAM_IFN(JSPECIE))**2 / 2.0           &
-!           * EXP(2*(LOG(XSIGMA_IFN(JSPECIE)))**2)                                   &
-!           * (1.0+GAMMA_INC(0.5,(SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE))-XB)**2))     
-!   END WHERE
-
-   DO JL = 1, SIZE(ZZT)
-      IF (ZZT(JL)>(XTT-35.) .AND. ZEMBRYO(JL)>1.0E-8) THEN
-         ZZX(JL) = ZZX(JL) + ZEMBRYO(JL) * XPI * (XMDIAM_IFN(JSPECIE))**2 / 2.0        &
-              * EXP(2*(LOG(XSIGMA_IFN(JSPECIE)))**2)                                   &
-              * (1.0+SIGN(1.,SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE))-XB)*GAMMA_INC(0.5,(SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE))-XB)**2))     
-      END IF
-   ENDDO
-
-!
-! For other T, integration between 0 and infinity is made with a Gauss-Hermite
-! quadrature method and integration between 0 and 0.1 uses e(x) ~ 1+x+O(x**2)
-! Beware : here, weights are normalized : XWEIGHT = wi/sqrt(pi)
-!
-   GINTEG(:) = ZZT(:)<=(XTT-35.) .AND. ZSI(:)>1.0 .AND. ZEMBRYO(:)>1.0E-8
-!
-   DO JL = 1, NDIAM
-      DO JL2 = 1, SIZE(GINTEG)
-         IF (GINTEG(JL2)) THEN
-            ZZX(JL2) = ZZX(JL2) - XWEIGHT(JL)*EXP(-ZEMBRYO(JL2)*XPI*(XMDIAM_IFN(JSPECIE))**2 & 
-                 * EXP(2.0*SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE)) * XABSCISS(JL)) ) 
-         END IF
-      ENDDO
-   ENDDO
-!
-!   DO JL2 = 1, SIZE(GINTEG)
-!      IF (GINTEG(JL2)) THEN
-!         ZZX(JL2) = ZZX(JL2) + 0.5* XPI*ZEMBRYO(JL2)*(XMDIAM_IFN(JSPECIE))**2                &
-!              * (1.0-( 1.0-GAMMA_INC(0.5,(SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE))-XB)**2))  &
-!              * EXP( 2.0*(LOG(XSIGMA_IFN(JSPECIE)))**2)  )
-!      END IF
-!   ENDDO
-   DO JL2 = 1, SIZE(GINTEG)
-      IF (GINTEG(JL2)) THEN
-         ZZX(JL2) = 1 + ZZX(JL2)  &
-              - ( 0.5* XPI*ZEMBRYO(JL2)*(XMDIAM_IFN(JSPECIE))**2 * EXP( 2.0*(LOG(XSIGMA_IFN(JSPECIE)))**2)   &
-              * ( 1.0-SIGN(1.,SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE))-XB)*GAMMA_INC(0.5,(SQRT(2.0)*LOG(XSIGMA_IFN(JSPECIE))-XB)**2)) )
-      END IF
-   ENDDO
-! 
-   Z_FRAC_ACT(:,JSPECIE)=ZZX(:)
-!
-   DEALLOCATE(ZZX)
-   DEALLOCATE(ZFACTOR)
-   DEALLOCATE(ZSUBSAT)    
-   DEALLOCATE(ZEMBRYO)
-   DEALLOCATE(GINTEG)
-!
-ENDDO
-!
-END SUBROUTINE LIMA_PHILLIPS_INTEG
diff --git a/src/mesonh/micro/lima_phillips_ref_spectrum.f90 b/src/mesonh/micro/lima_phillips_ref_spectrum.f90
deleted file mode 100644
index d549d7051fc8cb3c43ef7d755fe31da9060dd8b0..0000000000000000000000000000000000000000
--- a/src/mesonh/micro/lima_phillips_ref_spectrum.f90
+++ /dev/null
@@ -1,140 +0,0 @@
-!      ######################################
-       MODULE MODI_LIMA_PHILLIPS_REF_SPECTRUM
-!      ######################################
-!
-INTERFACE
-      SUBROUTINE LIMA_PHILLIPS_REF_SPECTRUM (ZZT, ZSI, ZSI_W, ZZY)
-!
-REAL, DIMENSION(:), INTENT(IN)    :: ZZT    ! Temperature
-REAL, DIMENSION(:), INTENT(IN)    :: ZSI    ! Saturation over ice
-REAL, DIMENSION(:), INTENT(IN)    :: ZSI_W  ! Saturation over ice at water sat.
-REAL, DIMENSION(:), INTENT(INOUT) :: ZZY    ! Reference activity spectrum
-!
-END SUBROUTINE LIMA_PHILLIPS_REF_SPECTRUM
-END INTERFACE
-END MODULE MODI_LIMA_PHILLIPS_REF_SPECTRUM
-!
-!     ######################################################################
-      SUBROUTINE LIMA_PHILLIPS_REF_SPECTRUM (ZZT, ZSI, ZSI_W, ZZY)
-!     ######################################################################
-!!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the reference activation spectrum
-!!    described by Phillips (2008)
-!!
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!      Phillips et al., 2008: An empirical parameterization of heterogeneous
-!!        ice nucleation for multiple chemical species of aerosols, J. Atmos. Sci. 
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-M. Cohard     * Laboratoire d'Aerologie*
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_CST,             ONLY : XTT
-USE MODD_PARAM_LIMA,      ONLY : XGAMMA, XRHO_CFDC
-USE MODI_LIMA_FUNCTIONS,  ONLY : RECT, DELTA
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-REAL, DIMENSION(:), INTENT(IN)    :: ZZT    ! Temperature
-REAL, DIMENSION(:), INTENT(IN)    :: ZSI    ! Saturation over ice
-REAL, DIMENSION(:), INTENT(IN)    :: ZSI_W  ! Saturation over ice at water sat.
-REAL, DIMENSION(:), INTENT(INOUT) :: ZZY    ! Reference activity spectrum
-!
-!*       0.2   Declarations of local variables :
-!
-REAL, DIMENSION(:), ALLOCATABLE   :: ZMAX, &
-                                     ZMOY, &
-                                     ZZY1, &
-                                     ZZY2, &
-                                     Z1,   &
-                                     Z2,   &
-                                     ZSI2
-!
-REAL                              :: XPSI
-!
-!-------------------------------------------------------------------------------
-!
-ALLOCATE(ZMAX(SIZE(ZZT))) ; ZMAX(:)= 0.0
-ALLOCATE(ZMOY(SIZE(ZZT))) ; ZMOY(:)= 0.0
-ALLOCATE(ZZY1(SIZE(ZZT))) ; ZZY1(:)= 0.0
-ALLOCATE(ZZY2(SIZE(ZZT))) ; ZZY2(:)= 0.0
-ALLOCATE(Z1(SIZE(ZZT)))   ; Z1(:)  = 0.0
-ALLOCATE(Z2(SIZE(ZZT)))   ; Z2(:)  = 0.0
-ALLOCATE(ZSI2(SIZE(ZZT))) ; ZSI2(:)= 0.0
-!
-ZZY(:) = 0.0   
-!
-XPSI   = 0.058707*XGAMMA/XRHO_CFDC
-!
-ZSI2(:)=min(ZSI(:),ZSI_W(:))
-!
-WHERE( ZSI(:)>1.0 )
-!
-!* T <= -35 C 
-!
-   ZZY(:)  =1000.*XGAMMA/XRHO_CFDC                  &
-        * ( EXP(12.96*(MIN(ZSI2(:),7.)-1.1)) )**0.3          &
-        * RECT(1.,0.,ZZT(:),(XTT-80.),(XTT-35.))
-!
-!* -35 C < T <= -25 C (in Appendix A) 
-!
-   ZZY1(:) =1000.*XGAMMA/XRHO_CFDC                  &
-        * ( EXP(12.96*(MIN(ZSI2(:),7.)-1.1)) )**0.3
-   ZZY2(:) =1000.*XPSI                              &
-        *   EXP(12.96*(MIN(ZSI2(:),7.)-1.0)-0.639)
-!
-!* -35 C < T <= -30 C
-!
-   ZMAX(:) =1000.*XGAMMA/XRHO_CFDC                  &
-        * ( EXP(12.96*(ZSI_W(:)-1.1)) )**0.3        &
-        * RECT(1.,0.,ZZT(:),(XTT-35.),(XTT-30.))
-!
-!* -30 C < T <= -25 C
-!
-   ZMAX(:) = ZMAX(:) +1000.*XPSI                    &
-        * EXP( 12.96*(ZSI_W(:)-1.0)-0.639 )         &
-        * RECT(1.,0.,ZZT(:),(XTT-30.),(XTT-25.))
-   Z1(:)   = MIN(ZZY1(:), ZMAX(:)) 
-   Z2(:)   = MIN(ZZY2(:), ZMAX(:)) 
-!
-!* T > -25 C 
-!
-   ZZY(:)  = ZZY(:) + 1000.*XPSI                    &
-        * EXP( 12.96*(MIN(ZSI2(:),7.)-1.0)-0.639 )           &
-        * RECT(1.,0.,ZZT(:),(XTT-25.),(XTT-2.))
-END WHERE
-!
-WHERE (Z2(:)>0.0 .AND. Z1(:)>0.0)
-   ZMOY(:) = Z2(:)*(Z1(:)/Z2(:))**DELTA(1.,0.,ZZT(:),(XTT-35.),(XTT-25.))
-   ZZY(:)  = ZZY(:) + MIN(ZMOY(:),ZMAX(:))  ! N_{IN,1,*}
-END WHERE
-!
-!++cb++
-DEALLOCATE(ZMAX)
-DEALLOCATE(ZMOY)
-DEALLOCATE(ZZY1)
-DEALLOCATE(ZZY2)
-DEALLOCATE(Z1)
-DEALLOCATE(Z2)
-!--cb--
-!
-END SUBROUTINE LIMA_PHILLIPS_REF_SPECTRUM
diff --git a/src/mesonh/micro/lima_precip_scavenging.f90 b/src/mesonh/micro/lima_precip_scavenging.f90
deleted file mode 100644
index aaabf3f298cc30a22fab869f8602151d82e12897..0000000000000000000000000000000000000000
--- a/src/mesonh/micro/lima_precip_scavenging.f90
+++ /dev/null
@@ -1,856 +0,0 @@
-!MNH_LIC Copyright 2013-2021 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-!      ##################################
-       MODULE MODI_LIMA_PRECIP_SCAVENGING
-!      ##################################
-!
-INTERFACE
-   SUBROUTINE LIMA_PRECIP_SCAVENGING (HCLOUD, KLUOUT, KTCOUNT, PTSTEP,        &
-                                      PRRT, PRHODREF, PRHODJ, PZZ,            & 
-                                      PPABST, PTHT, PSVT, PRSVS, PINPAP )
-
-use modd_nsv, only: nsv_lima_beg
-
-CHARACTER(LEN=4),       INTENT(IN)    :: HCLOUD   ! cloud paramerization
-INTEGER,                INTENT(IN)    :: KLUOUT   ! unit for output listing
-INTEGER,                INTENT(IN)    :: KTCOUNT  ! iteration count
-REAL,                   INTENT(IN)    :: PTSTEP   ! Double timestep except 
-                                                  ! for the first time step
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PRRT     ! Rain mixing ratio at t
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PRHODREF ! Air Density [kg/m**3]
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PRHODJ   ! Dry Density [kg]
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PZZ      ! Altitude
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PPABST   ! Absolute pressure at t
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PTHT     ! Theta at time t 
-!
-REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(IN)    :: PSVT   ! Particle Concentration [kg-1]
-REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(INOUT) :: PRSVS  ! Total Number Scavenging Rate
-!
-REAL, DIMENSION(:,:),   INTENT(INOUT) :: PINPAP
-!
-END SUBROUTINE LIMA_PRECIP_SCAVENGING
-END INTERFACE
-END MODULE MODI_LIMA_PRECIP_SCAVENGING
-!
-!########################################################################
-   SUBROUTINE LIMA_PRECIP_SCAVENGING (HCLOUD, KLUOUT, KTCOUNT, PTSTEP,        &
-                                      PRRT, PRHODREF, PRHODJ, PZZ,            &
-                                      PPABST, PTHT, PSVT, PRSVS, PINPAP )
-!########################################################################x
-!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the total number
-!!      below-cloud scavenging rate. 
-!!
-!!
-!!**  METHOD
-!!    ------
-!!      We assume a generalized gamma distribution law for the raindrop.
-!!      The aerosols particles distribution follows a log-normal law.
-!!      First, we have to compute the Collision Efficiency, which takes 
-!!      account of the three most important wet removal mechanism : 
-!!      Brownian diffusion, interception and inertial impaction. 
-!!      It is a function of several number (like Reynolds, Schmidt 
-!!      or Stokes number for instance). Consequently,
-!!      we need first to calculate these numbers. 
-!!
-!!      Then the scavenging coefficient is deduced from the integration 
-!!      of the droplet size distribution, the falling velocity of 
-!!      raindrop and aerosol, their diameter, and the collision 
-!!      (or collection) efficiency, over the spectrum of droplet
-!!      diameters.
-!!
-!!      The total scavenging rate of aerosol is computed from the 
-!!      integration, over all the spectrum of particles aerosols 
-!!      diameters, of the scavenging coefficient.
-!! 
-!!
-!!    EXTERNAL
-!!    --------
-!!      Subroutine SCAV_MASS_SEDIMENTATION
-!!
-!!      Function COLL_EFFIC    : computes the collision efficiency
-!!
-!!      Function CONTJV   |
-!!      Function GAUHER   |
-!!      Function GAULAG   |-> in lima_functions.f90
-!!      Function GAMMLN   |
-!!     
-!!
-!!   REFERENCES
-!!   ----------
-!!   Seinfeld and Pandis
-!!   Andronache
-!!   
-!!   AUTHOR
-!!   ------
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!      S.    Berthet    * Laboratoire d'Aerologie*
-!!      B.    Vié        * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original             ??/??/13 
-!!
-!  P. Wautelet 28/05/2018: corrected truncated integer division (3/2 -> 1.5)
-!  P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function
-!  P. Wautelet 28/05/2019: move COUNTJV function to tools.f90
-!  P. Wautelet    03/2020: use the new data structures and subroutines for budgets
-!  P. Wautelet 03/06/2020: bugfix: correct array starts for PSVT and PRSVS
-!  P. Wautelet 11/02/2021: bugfix: ZRTMIN was of wrong size (replaced by a scalar)
-!  P. Wautelet 11/02/2021: budgets: add missing term SCAV for NSV_LIMA_SCAVMASS budget
-!-------------------------------------------------------------------------------
-!
-!*                  0.DECLARATIONS          
-!                   --------------
-!
-use modd_budget,          only: lbudget_sv, NBUDGET_SV1, tbudgets
-USE MODD_CST
-USE MODD_NSV
-USE MODD_PARAMETERS
-USE MODD_PARAM_LIMA,      ONLY: NMOD_IFN, NSPECIE, XFRAC,                         &
-                                XMDIAM_IFN, XSIGMA_IFN, XRHO_IFN,                 &
-                                NMOD_CCN, XR_MEAN_CCN, XLOGSIG_CCN, XRHO_CCN,     &
-                                XALPHAR, XNUR,                                    &
-                                LAERO_MASS, NDIAMR, NDIAMP, XT0SCAV, XTREF, XNDO, &
-                                XMUA0, XT_SUTH_A, XMFPA0, XVISCW, XRHO00,         &
-                                XRTMIN, XCTMIN
-USE MODD_PARAM_LIMA_WARM, ONLY: XCR, XDR
-
-use mode_budget,          only: Budget_store_init, Budget_store_end
-use mode_tools,           only: Countjv
-
-USE MODI_GAMMA
-USE MODI_INI_NSV
-USE MODI_LIMA_FUNCTIONS
-
-IMPLICIT NONE
-!
-!*                 0.1 declarations of dummy arguments :
-!
-CHARACTER(LEN=4),       INTENT(IN)    :: HCLOUD   ! cloud paramerization
-INTEGER,                INTENT(IN)    :: KLUOUT   ! unit for output listing
-INTEGER,                INTENT(IN)    :: KTCOUNT  ! iteration count
-REAL,                   INTENT(IN)    :: PTSTEP   ! Double timestep except 
-                                                  ! for the first time step
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PRRT     ! Rain mixing ratio at t
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PRHODREF ! Air Density [kg/m**3]
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PRHODJ   ! Dry Density [kg]
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PZZ      ! Altitude
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PPABST   ! Absolute pressure at t
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PTHT     ! Theta at time t 
-!
-REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(IN)    :: PSVT   ! Particle Concentration [/m**3]
-REAL, DIMENSION(:,:,:,NSV_LIMA_BEG:), INTENT(INOUT) :: PRSVS  ! Total Number Scavenging Rate
-!
-REAL, DIMENSION(:,:),   INTENT(INOUT) :: PINPAP
-!
-!*       0.2   Declarations of local variables :
-!
-INTEGER :: IIB           !  Define the domain where is 
-INTEGER :: IIE           !  the microphysical sources have to be computed
-INTEGER :: IJB           ! 
-INTEGER :: IJE           !
-INTEGER :: IKB           ! 
-INTEGER :: IKE           !
-!
-INTEGER :: JSV               ! CCN or IFN mode 
-INTEGER :: J1, J2, IJ, JMOD
-!
-LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) &
-                                 :: GRAIN,  &! Test where rain is present
-                                    GSCAV    ! Test where rain is present
-INTEGER , DIMENSION(SIZE(GSCAV)) :: I1,I2,I3 ! Used to replace the COUNT
-INTEGER                          :: JL       ! and PACK intrinsics
-INTEGER                          :: ISCAV
-!
-REAL                     :: ZDENS_RATIO, & !density ratio 
-                            ZNUM,        & !PNU-1.               
-                            ZSHAPE_FACTOR
-!
-REAL,    DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3))  :: ZW     ! work array
-REAL,    DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3))  :: PCRT   ! cloud droplet conc.
-!
-REAL, DIMENSION(:), ALLOCATABLE :: ZLAMBDAR,      &  !slope parameter of the 
-                                                     ! generalized Gamma 
-                                                     !distribution law for the 
-                                                     !raindrop
-                                   ZVISC_RATIO,   &  !viscosity ratio 
-                                   ZMFPA,         &  !Mean Free Path
-                                   ZRHODREF,      &  !Air Density [kg/m**3]
-                                   ZVISCA,        &  !Viscosity of Air [kg/(m*s)]
-                                   ZT,            &  !Absolute Temperature
-                                   ZPABST,        &
-                                   ZRRT,          &
-                                   ZCONCP,        &
-                                   ZCONCR,        &
-                                   ZTOT_SCAV_RATE,&
-                                   ZTOT_MASS_RATE,&
-                                   ZMEAN_SCAV_COEF
-!
-REAL, DIMENSION(:,:), ALLOCATABLE :: &
-                      ZVOLDR,        &  !Mean volumic Raindrop diameter [m]
-                      ZBC_SCAV_COEF, &
-                      ZCUNSLIP,      &  !CUnningham SLIP correction factor 
-                      ZST_STAR,      &  !critical Stokes number for impaction
-                      ZSC,           &  !aerosol particle Schmidt number
-                      ZRE,           &  !raindrop Reynolds number (for radius)
-                      ZFVELR,        &  !Falling VELocity of the Raindrop
-                      ZRELT,         &  !RELaxation Time of the particle [s]
-                      ZDIFF             !Particle Diffusivity
-!
-REAL, DIMENSION(NDIAMP) :: ZVOLDP,          & !Mean volumic diameter [m]
-                           ZABSCISSP,       & !Aerosol Abscisses
-                           ZWEIGHTP           !Aerosol Weights
-REAL, DIMENSION(NDIAMR) :: ZABSCISSR,       & !Raindrop Abscisses
-                           ZWEIGHTR           !Raindrop Weights
-!
-REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZCOL_EF,     &! Collision efficiency
-                                       ZSIZE_RATIO, &! Size Ratio
-                                       ZST           ! Stokes number
-!
-REAL, DIMENSION(SIZE(PRRT,1),SIZE(PRRT,2),SIZE(PRRT,3)) :: ZRRS          
-!
-REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) &
-                                    :: PMEAN_SCAV_COEF, & !Mean Scavenging 
-                                                          ! Coefficient
-                                       PTOT_SCAV_RATE,  & !Total Number 
-                                                          ! Scavenging Rate
-                                       PTOT_MASS_RATE     !Total Mass
-                                                          ! Scavenging Rate
-REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3),NDIAMP) &
-                                    ::PBC_SCAV_COEF  !Scavenging Coefficient
-REAL, DIMENSION(:), ALLOCATABLE :: ZKNUDSEN ! Knuudsen number
-!
-! Opt. BVIE
-REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3))        &
-                   :: ZT_3D, ZCONCR_3D, ZVISCA_3D, ZMFPA_3D,               &
-                      ZVISC_RATIO_3D, ZLAMBDAR_3D, FACTOR_3D
-REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3),NDIAMP) &
-                   :: ZVOLDR_3D, ZVOLDR_3D_INV, ZVOLDR_3D_POW,             &
-                      ZFVELR_3D, ZRE_3D, ZRE_3D_SQRT, ZST_STAR_3D
-REAL, DIMENSION(:), ALLOCATABLE   :: FACTOR 
-REAL, DIMENSION(:,:), ALLOCATABLE ::     &
-                      ZRE_SQRT,          &  ! SQRT of raindrop Reynolds number
-                      ZRE_INV,           &  ! INV of raindrop Reynolds number
-                      ZSC_INV,           &  ! INV of aerosol particle Schmidt number
-                      ZSC_SQRT,          &  ! SQRT of aerosol particle Schmidt number
-                      ZSC_3SQRT,         &  ! aerosol particle Schmidt number**(1./3.)
-                      ZVOLDR_POW,        &  ! Mean volumic Raindrop diameter [m] **(2+ZDR)
-                      ZVOLDR_INV            ! INV of Mean volumic Raindrop diameter [m]
-REAL               :: ZDENS_RATIO_SQRT 
-INTEGER :: SV_VAR, NM, JM
-integer :: idx
-REAL :: XMDIAMP 
-REAL :: XSIGMAP  
-REAL :: XRHOP   
-REAL :: XFRACP
-!
-!
-!
-!------------------------------------------------------------------------------
-
-if ( lbudget_sv ) then
-  do jl = 1, nmod_ccn
-    idx = nsv_lima_ccn_free - 1 + jl
-    call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + idx), 'SCAV', prsvs(:, :, :, idx) )
-  end do
-  do jl = 1, nmod_ifn
-    idx = nsv_lima_ifn_free - 1 + jl
-    call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + idx), 'SCAV', prsvs(:, :, :, idx) )
-  end do
-  if ( laero_mass ) then
-    call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_scavmass), 'SCAV', prsvs(:, :, :, nsv_lima_scavmass) )
-  end if
-end if
-!
-!*       1.     PRELIMINARY COMPUTATIONS
-!   	        ------------------------
-!
-!
-IIB=1+JPHEXT
-IIE=SIZE(PRHODREF,1) - JPHEXT
-IJB=1+JPHEXT
-IJE=SIZE(PRHODREF,2) - JPHEXT
-IKB=1+JPVEXT
-IKE=SIZE(PRHODREF,3) - JPVEXT
-!
-! PCRT
-PCRT(:,:,:)=PSVT(:,:,:,NSV_LIMA_NR)
-!
-! Rain mask 
-GRAIN(:,:,:) = .FALSE.
-GRAIN(IIB:IIE,IJB:IJE,IKB:IKE) = (PRRT(IIB:IIE,IJB:IJE,IKB:IKE)>XRTMIN(3) &
-                            .AND. PCRT(IIB:IIE,IJB:IJE,IKB:IKE)>XCTMIN(3) )
-!
-! Initialize the total mass scavenging rate if LAERO_MASS=T
-IF (LAERO_MASS) PTOT_MASS_RATE(:,:,:)  = 0.
-!
-! Quadrature method: compute absissae and weights
-CALL GAUHER(ZABSCISSP,ZWEIGHTP,NDIAMP)
-ZNUM = XNUR-1.0E0
-CALL GAULAG(ZABSCISSR,ZWEIGHTR,NDIAMR,ZNUM)
-!
-!
-!------------------------------------------------------------------------------
-!
-!
-!*       2.     NUMERICAL OPTIMIZATION
-!   	        ----------------------
-!
-!
-! Optimization : compute in advance parameters depending on rain particles and
-! environment conditions only, to avoid multiple identical computations in loops
-!
-!
-ZSHAPE_FACTOR = GAMMA_X0D(XNUR+3./XALPHAR)/GAMMA_X0D(XNUR) 
-!
-WHERE ( GRAIN(:,:,:) )
-   !
-   ZT_3D(:,:,:)      = PTHT(:,:,:) * ( PPABST(:,:,:)/XP00 )**(XRD/XCPD)
-   ZCONCR_3D(:,:,:)  = PCRT(:,:,:) * PRHODREF(:,:,:)                    ![/m3]
-   ! Sutherland law for viscosity of air
-   ZVISCA_3D(:,:,:)  = XMUA0*(ZT_3D(:,:,:)/XTREF)**1.5*(XTREF+XT_SUTH_A) &
-                                                        /(XT_SUTH_A+ZT_3D(:,:,:))
-   ! Air mean free path
-   ZMFPA_3D(:,:,:)   = XMFPA0*(XP00*ZT_3D(:,:,:))/(PPABST(:,:,:)*XT0SCAV)           
-   ! Viscosity ratio
-   ZVISC_RATIO_3D(:,:,:) = ZVISCA_3D(:,:,:)/XVISCW   !!!!! inversé par rapport à orig. !
-   ! Rain drops parameters
-   ZLAMBDAR_3D(:,:,:) = ( ((XPI/6.)*ZSHAPE_FACTOR*XRHOLW*ZCONCR_3D(:,:,:))  &
-                          /(PRHODREF(:,:,:)*PRRT(:,:,:)) )**(1./3.)         ![/m]
-   FACTOR_3D(:,:,:) = XPI*0.25*ZCONCR_3D(:,:,:)*XCR*(XRHO00/PRHODREF(:,:,:))**(0.4)
-   !
-END WHERE
-!
-DO J2=1,NDIAMR
-   WHERE ( GRAIN(:,:,:) )
-      ! exchange of variables: [m]
-      ZVOLDR_3D(:,:,:,J2) = ZABSCISSR(J2)**(1./XALPHAR)/ZLAMBDAR_3D(:,:,:)
-      ZVOLDR_3D_INV(:,:,:,J2) = 1./ZVOLDR_3D(:,:,:,J2)
-      ZVOLDR_3D_POW(:,:,:,J2) = ZVOLDR_3D(:,:,:,J2)**(2.+XDR)
-      ! Raindrop Falling VELocity [m/s]
-      ZFVELR_3D(:,:,:,J2) = XCR*(ZVOLDR_3D(:,:,:,J2)**XDR)*(XRHO00/PRHODREF(:,:,:))**(0.4)
-      ! Reynolds number
-      ZRE_3D(:,:,:,J2) = ZVOLDR_3D(:,:,:,J2)*ZFVELR_3D(:,:,:,J2)          &
-                                            *PRHODREF(:,:,:)/(2.0*ZVISCA_3D(:,:,:))   
-      ZRE_3D_SQRT(:,:,:,J2) = SQRT( ZRE_3D(:,:,:,J2) )   
-      ! Critical Stokes number
-      ZST_STAR_3D(:,:,:,J2) = (1.2+(LOG(1.+ZRE_3D(:,:,:,J2)))/12.)        &
-                                           /(1.+LOG(1.+ZRE_3D(:,:,:,J2)))
-   END WHERE
-END DO
-!
-!
-!------------------------------------------------------------------------------
-!
-!
-!*       3.     AEROSOL SCAVENGING
-!   	        ------------------
-!
-!
-! Iteration over the aerosol type and mode
-!
-DO JSV = 1, NMOD_CCN+NMOD_IFN
-!
-   IF (JSV .LE. NMOD_CCN) THEN
-      JMOD = JSV
-      SV_VAR = NSV_LIMA_CCN_FREE -1 + JMOD ! Variable number in PSVT
-      NM = 1                               ! Number of species (for IFN int. mixing)
-   ELSE
-      JMOD = JSV - NMOD_CCN
-      SV_VAR = NSV_LIMA_IFN_FREE -1 + JMOD
-      NM = NSPECIE
-   END IF
-!
-   PBC_SCAV_COEF(:,:,:,:) = 0. 
-   PMEAN_SCAV_COEF(:,:,:) = 0.
-   PTOT_SCAV_RATE(:,:,:)  = 0.
-!
-   GSCAV(:,:,:) = .FALSE.
-   GSCAV(IIB:IIE,IJB:IJE,IKB:IKE) =GRAIN(IIB:IIE,IJB:IJE,IKB:IKE) .AND.        &
-        (PSVT(IIB:IIE,IJB:IJE,IKB:IKE,SV_VAR)>1.0E-2)
-   ISCAV = COUNTJV(GSCAV(:,:,:),I1(:),I2(:),I3(:))
-!
-   IF( ISCAV>=1 ) THEN
-      ALLOCATE(ZVISC_RATIO(ISCAV))
-      ALLOCATE(ZRHODREF(ISCAV))
-      ALLOCATE(ZVISCA(ISCAV))
-      ALLOCATE(ZT(ISCAV))
-      ALLOCATE(ZRRT(ISCAV))
-      ALLOCATE(ZCONCR(ISCAV))
-      ALLOCATE(ZLAMBDAR(ISCAV))  
-      ALLOCATE(ZCONCP(ISCAV))
-      ALLOCATE(ZMFPA(ISCAV))
-      ALLOCATE(ZTOT_SCAV_RATE(ISCAV))
-      ALLOCATE(ZTOT_MASS_RATE(ISCAV))
-      ALLOCATE(ZMEAN_SCAV_COEF(ISCAV))
-      ALLOCATE(ZPABST(ISCAV))
-      ALLOCATE(ZKNUDSEN(ISCAV))
-      ALLOCATE(FACTOR(ISCAV))
-!
-      ALLOCATE(ZCUNSLIP(ISCAV,NDIAMP))
-      ALLOCATE(ZBC_SCAV_COEF(ISCAV,NDIAMP))
-      ALLOCATE(ZSC(ISCAV,NDIAMP))
-      ALLOCATE(ZSC_INV(ISCAV,NDIAMP))
-      ALLOCATE(ZSC_SQRT(ISCAV,NDIAMP))
-      ALLOCATE(ZSC_3SQRT(ISCAV,NDIAMP))
-      ALLOCATE(ZRELT(ISCAV,NDIAMP))
-      ALLOCATE(ZDIFF(ISCAV,NDIAMP))
-      ALLOCATE(ZVOLDR(ISCAV,NDIAMR))
-      ALLOCATE(ZVOLDR_POW(ISCAV,NDIAMR))
-      ALLOCATE(ZVOLDR_INV(ISCAV,NDIAMR))
-      ALLOCATE(ZRE(ISCAV,NDIAMR))
-      ALLOCATE(ZRE_INV(ISCAV,NDIAMR))
-      ALLOCATE(ZRE_SQRT(ISCAV,NDIAMR))
-      ALLOCATE(ZST_STAR(ISCAV,NDIAMR))
-      ALLOCATE(ZFVELR(ISCAV,NDIAMR)) 
-      ALLOCATE(ZST(ISCAV,NDIAMP,NDIAMR))
-      ALLOCATE(ZCOL_EF(ISCAV,NDIAMP,NDIAMR))
-      ALLOCATE(ZSIZE_RATIO(ISCAV,NDIAMP,NDIAMR))
-!
-      ZMEAN_SCAV_COEF(:)=0.
-      ZTOT_SCAV_RATE(:) =0.
-      ZTOT_MASS_RATE(:) =0.
-      DO JL=1,ISCAV
-         ZRHODREF(JL) =  PRHODREF(I1(JL),I2(JL),I3(JL))
-         ZT(JL)       =     ZT_3D(I1(JL),I2(JL),I3(JL))
-         ZRRT(JL)     =      PRRT(I1(JL),I2(JL),I3(JL))
-         ZPABST(JL)   =    PPABST(I1(JL),I2(JL),I3(JL))
-         ZCONCP(JL)   =      PSVT(I1(JL),I2(JL),I3(JL),SV_VAR)*ZRHODREF(JL)![/m3]
-         ZCONCR(JL)   = ZCONCR_3D(I1(JL),I2(JL),I3(JL))                       ![/m3]
-         ZVISCA(JL)   = ZVISCA_3D(I1(JL),I2(JL),I3(JL))
-         ZMFPA(JL)    =  ZMFPA_3D(I1(JL),I2(JL),I3(JL))
-         ZVISC_RATIO(JL) = ZVISC_RATIO_3D(I1(JL),I2(JL),I3(JL))
-         ZLAMBDAR(JL) = ZLAMBDAR_3D(I1(JL),I2(JL),I3(JL))
-         FACTOR(JL)   = FACTOR_3D(I1(JL),I2(JL),I3(JL))
-         ZVOLDR(JL,:) = ZVOLDR_3D(I1(JL),I2(JL),I3(JL),:)
-         ZVOLDR_POW(JL,:) = ZVOLDR_3D_POW(I1(JL),I2(JL),I3(JL),:)
-         ZVOLDR_INV(JL,:) = ZVOLDR_3D_INV(I1(JL),I2(JL),I3(JL),:)
-         ZFVELR(JL,:) = ZFVELR_3D(I1(JL),I2(JL),I3(JL),:)
-         ZRE(JL,:)    = ZRE_3D(I1(JL),I2(JL),I3(JL),:)
-         ZRE_SQRT(JL,:) = ZRE_3D_SQRT(I1(JL),I2(JL),I3(JL),:)
-         ZST_STAR(JL,:) = ZST_STAR_3D(I1(JL),I2(JL),I3(JL),:)
-      ENDDO
-      ZRE_INV(:,:) = 1./ZRE(:,:)
-
-      IF (ANY(ZCONCR .eq. 0.)) print *, 'valeur nulle dans ZLAMBDAR !' 
-      IF (ANY(ZLAMBDAR .eq. 0.)) print *, 'valeur nulle dans ZLAMBDAR !' 
-!
-!------------------------------------------------------------------------------------
-!
-! Loop over the different species (for IFN int. mixing)
-!
-      DO JM = 1, NM  ! species (DM1,DM2,BC,O) for IFN
-         IF ( JSV .LE. NMOD_CCN ) THEN          ! CCN case
-            XRHOP   = XRHO_CCN(JMOD)
-            XMDIAMP = 2*XR_MEAN_CCN(JMOD)
-            XSIGMAP = EXP(XLOGSIG_CCN(JMOD))
-            XFRACP  = 1.0
-         ELSE                                   ! IFN case
-            XRHOP   = XRHO_IFN(JM)
-            XMDIAMP = XMDIAM_IFN(JM)
-            XSIGMAP = XSIGMA_IFN(JM)
-            XFRACP  = XFRAC(JM,JMOD)
-         END IF
-      !-----------------------------------------------------------------------------
-      ! Loop over the aerosols particles diameters (log normal distribution law) :
-      ! 
-         DO J1=1,NDIAMP                        
-            ! exchange of variables: [m]
-            ZVOLDP(J1) = XMDIAMP * EXP(ZABSCISSP(J1)*SQRT(2.)*LOG(XSIGMAP))
-            ! Cunningham slip correction factor (1+alpha*Knudsen) 
-            ZKNUDSEN(:) = MIN( 20.,ZVOLDP(J1)/ZMFPA(:) )
-            ZCUNSLIP(:,J1) = 1.0+2.0/ZKNUDSEN(:)*(1.257+0.4*EXP(-0.55*ZKNUDSEN(:)))
-            ! Diffusion coefficient
-            ZDIFF(:,J1) = XBOLTZ*ZT(:)*ZCUNSLIP(:,J1)/(3.*XPI*ZVISCA(:)*ZVOLDP(J1))
-            ! Schmidt number
-            ZSC(:,J1)       = ZVISCA(:)/(ZRHODREF(:)*ZDIFF(:,J1))  
-            ZSC_INV(:,J1)   = 1./ZSC(:,J1)
-            ZSC_SQRT(:,J1)  = SQRT( ZSC(:,J1) ) 
-            ZSC_3SQRT(:,J1) = ZSC(:,J1)**(1./3.)  
-            ! Characteristic Time Required for reaching terminal velocity 
-            ZRELT(:,J1) = (ZVOLDP(J1)**2)*ZCUNSLIP(:,J1)*XRHOP/(18.*ZVISCA(:))
-            ! Density number
-            ZDENS_RATIO = XRHOP/XRHOLW
-            ZDENS_RATIO_SQRT = SQRT(ZDENS_RATIO)
-            ! Initialisation
-            ZBC_SCAV_COEF(:,J1)=0.
-         !-------------------------------------------------------------------------
-         ! Loop over the drops diameters (generalized Gamma distribution) :
-         !
-            DO J2=1,NDIAMR
-               ! Stokes number
-               ZST(:,J1,J2) = 2.*ZRELT(:,J1)*(ZFVELR(:,J2)-ZRELT(1,J1)*XG)          &
-                                            *ZVOLDR_INV(:,J2)
-               ! Size Ratio
-               ZSIZE_RATIO(:,J1,J2) = ZVOLDP(J1)*ZVOLDR_INV(:,J2)
-               ! Collision Efficiency
-               ZCOL_EF(:,J1,J2) = COLL_EFFI(ZRE, ZRE_INV, ZRE_SQRT, ZSC, ZSC_INV,   &
-                                       ZSC_SQRT, ZSC_3SQRT, ZST, ZST_STAR,          &
-                                       ZSIZE_RATIO, ZVISC_RATIO, ZDENS_RATIO_SQRT) 
-               ! Below-Cloud Scavenging Coefficient for a fixed ZVOLDP: [/s]
-               ZBC_SCAV_COEF(:,J1) = ZBC_SCAV_COEF(:,J1) +                          &
-                                     ZCOL_EF(:,J1,J2) * ZWEIGHTR(J2) * FACTOR(:) * ZVOLDR_POW(:,J2)
-            END DO 
-         ! End of the loop over the drops diameters
-         !--------------------------------------------------------------------------
-
-            ! Total NUMBER Scavenging Rate of aerosol [m**-3.s**-1]
-            ZTOT_SCAV_RATE(:) = ZTOT_SCAV_RATE(:) -                                 &
-                                ZWEIGHTP(J1)*XFRACP*ZCONCP(:)*ZBC_SCAV_COEF(:,J1)
-            ! Total MASS Scavenging Rate of aerosol [kg.m**-3.s**-1]
-            ZTOT_MASS_RATE(:) = ZTOT_MASS_RATE(:) +                                 &
-                                ZWEIGHTP(J1)*XFRACP*ZCONCP(:)*ZBC_SCAV_COEF(:,J1)   &
-                                *XPI/6.*XRHOP*(ZVOLDP(J1)**3)  
-         END DO
-      ! End of the loop over the drops diameters
-      !--------------------------------------------------------------------------
-
-         ! Total NUMBER Scavenging Rate of aerosol [m**-3.s**-1]
-         PTOT_SCAV_RATE(:,:,:)=UNPACK(ZTOT_SCAV_RATE(:),MASK=GSCAV(:,:,:),FIELD=0.0)
-         ! Free particles (CCN or IFN) [/s]:
-         PRSVS(:,:,:,SV_VAR) = max(PRSVS(:,:,:,SV_VAR)+PTOT_SCAV_RATE(:,:,:)  &
-                                         * PRHODJ(:,:,:)/PRHODREF(:,:,:) , 0.0 )
-         ! Total MASS Scavenging Rate of aerosol which REACH THE FLOOR because of 
-         ! rain sedimentation [kg.m**-3.s**-1]
-         IF (LAERO_MASS)THEN
-            PTOT_MASS_RATE(:,:,:) = PTOT_MASS_RATE(:,:,:) +                         &
-                 UNPACK(ZTOT_MASS_RATE(:), MASK=GSCAV(:,:,:), FIELD=0.0)
-            CALL SCAV_MASS_SEDIMENTATION( HCLOUD, PTSTEP, KTCOUNT, PZZ, PRHODJ,     &
-                                      PRHODREF, PRRT, PSVT(:,:,:,NSV_LIMA_SCAVMASS),&
-                                      PRSVS(:,:,:,NSV_LIMA_SCAVMASS), PINPAP        )
-            PRSVS(:,:,:,NSV_LIMA_SCAVMASS)=PRSVS(:,:,:,NSV_LIMA_SCAVMASS) +         &
-                             PTOT_MASS_RATE(:,:,:)*PRHODJ(:,:,:)/PRHODREF(:,:,:)
-         END IF
-      ENDDO
-! End of the loop over the aerosol species
-!--------------------------------------------------------------------------
-!
-!
-!
-      DEALLOCATE(FACTOR)
-      DEALLOCATE(ZSC_INV)
-      DEALLOCATE(ZSC_SQRT)
-      DEALLOCATE(ZSC_3SQRT)
-      DEALLOCATE(ZRE_INV)
-      DEALLOCATE(ZRE_SQRT)
-      DEALLOCATE(ZVOLDR_POW)
-      DEALLOCATE(ZVOLDR_INV)
-!
-      DEALLOCATE(ZFVELR)
-      DEALLOCATE(ZRE)
-      DEALLOCATE(ZST_STAR)
-      DEALLOCATE(ZST)
-      DEALLOCATE(ZSIZE_RATIO)
-      DEALLOCATE(ZCOL_EF)
-      DEALLOCATE(ZVOLDR)
-      DEALLOCATE(ZDIFF)
-      DEALLOCATE(ZRELT)
-      DEALLOCATE(ZSC)
-      DEALLOCATE(ZCUNSLIP)
-      DEALLOCATE(ZBC_SCAV_COEF)
-!
-      DEALLOCATE(ZTOT_SCAV_RATE)
-      DEALLOCATE(ZTOT_MASS_RATE)
-      DEALLOCATE(ZMEAN_SCAV_COEF)
-!
-      DEALLOCATE(ZRRT)
-      DEALLOCATE(ZCONCR)
-      DEALLOCATE(ZLAMBDAR)
-      DEALLOCATE(ZCONCP)
-      DEALLOCATE(ZVISC_RATIO)
-      DEALLOCATE(ZRHODREF)
-      DEALLOCATE(ZVISCA)
-      DEALLOCATE(ZPABST)
-      DEALLOCATE(ZKNUDSEN)
-      DEALLOCATE(ZT)
-      DEALLOCATE(ZMFPA)
-   ENDIF
-ENDDO
-!
-if ( lbudget_sv ) then
-  do jl = 1, nmod_ccn
-    idx = nsv_lima_ccn_free - 1 + jl
-    call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + idx), 'SCAV', prsvs(:, :, :, idx) )
-  end do
-  do jl = 1, nmod_ifn
-    idx = nsv_lima_ifn_free - 1 + jl
-    call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + idx), 'SCAV', prsvs(:, :, :, idx) )
-  end do
-  if ( laero_mass ) then
-    call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_scavmass), 'SCAV', prsvs(:, :, :, nsv_lima_scavmass) )
-  end if
-end if
-!------------------------------------------------------------------------------
-!
-!
-!*       3.     SUBROUTINE AND FUNCTION
-!   	        -----------------------
-!
-!
-CONTAINS
-!
-!------------------------------------------------------------------------------
-!     ##########################################################################
-      SUBROUTINE SCAV_MASS_SEDIMENTATION( HCLOUD, PTSTEP, KTCOUNT, PZZ, PRHODJ,&
-                                PRHODREF, PRAIN, PSVT_MASS, PRSVS_MASS, PINPAP )
-!     ##########################################################################
-!
-!!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to compute the total mass of aerosol 
-!!    scavenged by precipitations
-!!
-!!
-!!**  METHOD
-!!    ------
-!!
-!!    EXTERNAL
-!!    --------
-!!      None
-!!     
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!      Module MODD_PARAMETERS
-!!          JPHEXT       : Horizontal external points number
-!!          JPVEXT       : Vertical external points number
-!!      Module MODD_CONF :
-!!          CCONF configuration of the model for the first time step
-!!
-!!    REFERENCE
-!!    ---------
-!!      Book1 of the documentation ( routine CH_AQUEOUS_SEDIMENTATION )
-!!
-!!    AUTHOR
-!!    ------
-!!      J.-P. Pinty      * Laboratoire d'Aerologie*
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original    22/07/07
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-USE MODD_PARAMETERS
-USE MODD_CONF
-!
-USE MODD_PARAM_LIMA,      ONLY : XCEXVT, XRTMIN
-USE MODD_PARAM_LIMA_WARM, ONLY : XBR, XDR, XFSEDRR
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-!
-CHARACTER (LEN=4),        INTENT(IN)    :: HCLOUD  ! Cloud parameterization
-REAL,                     INTENT(IN)    :: PTSTEP  ! Time step  
-INTEGER,                  INTENT(IN)    :: KTCOUNT ! Current time step number
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PZZ     ! Height (z)
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ  ! Dry Density [kg]
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF! Reference density
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRAIN   ! Rain water m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PSVT_MASS  ! Precip. aerosols at t
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRSVS_MASS ! Precip. aerosols source
-!
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPAP
-!
-!*       0.2   Declarations of local variables :
-!
-INTEGER :: JJ, JK, JN, JRR                ! Loop indexes 
-INTEGER :: IIB, IIE, IJB, IJE, IKB, IKE   ! Physical domain
-!
-REAL    :: ZTSPLITR      ! Small time step for rain sedimentation
-REAL    :: ZTSTEP        ! Large time step for rain sedimentation
-!
-!
-LOGICAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) &
-                                :: GSEDIM   ! where to compute the SED processes
-INTEGER :: ISEDIM 
-INTEGER , DIMENSION(SIZE(GSEDIM)) :: I1,I2,I3 ! Used to replace the COUNT
-INTEGER                           :: JL       ! and PACK intrinsics
-!
-!
-REAL,    DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3))   &
-                                :: ZW,    & ! work array
-                                   ZWSED, & ! sedimentation fluxes
-                                   ZZS      ! Rain water m.r. source
-!
-REAL, DIMENSION(:), ALLOCATABLE :: ZRRS,     & ! Rain water m.r. source
-                                   ZRHODREF, & ! RHO Dry REFerence
-                                   ZZW         ! Work array
-!
-REAL                            :: ZRTMIN3
-!
-!
-REAL                            :: ZVTRMAX, ZDZMIN, ZT
-REAL,    SAVE                   :: ZEXSEDR
-LOGICAL, SAVE                   :: GSFIRSTCALL = .TRUE.
-INTEGER, SAVE                   :: ISPLITR
-!
-!-------------------------------------------------------------------------------
-!
-!*       1.     COMPUTE THE LOOP BOUNDS
-!   	        -----------------------
-!
-IIB=1+JPHEXT
-IIE=SIZE(PZZ,1) - JPHEXT
-IJB=1+JPHEXT
-IJE=SIZE(PZZ,2) - JPHEXT
-IKB=1+JPVEXT
-IKE=SIZE(PZZ,3) - JPVEXT
-!
-!-------------------------------------------------------------------------------
-!
-!*       2.     COMPUTE THE SEDIMENTATION (RS) SOURCE
-!	        -------------------------------------
-!
-!*       2.1    splitting factor for high Courant number C=v_fall*(del_Z/del_T)
-!  
-firstcall : IF (GSFIRSTCALL) THEN
-   GSFIRSTCALL = .FALSE.
-   ZVTRMAX = 10.                          
-   ZDZMIN = MINVAL(PZZ(IIB:IIE,IJB:IJE,IKB+1:IKE+1)-PZZ(IIB:IIE,IJB:IJE,IKB:IKE))
-   ISPLITR = 1
-   SPLIT : DO
-      ZT = 2.* PTSTEP / REAL(ISPLITR)
-      IF ( ZT * ZVTRMAX / ZDZMIN .LT. 1.) EXIT SPLIT
-      ISPLITR = ISPLITR + 1
-   END DO SPLIT
-!
-   ZEXSEDR = (XBR+XDR+1.0)/(XBR+1.0) 
-!
-END IF firstcall
-!
-!*       2.2    time splitting loop initialization        
-!
-IF( (KTCOUNT==1) .AND. (CCONF=='START') ) THEN
-  ZTSPLITR = PTSTEP / REAL(ISPLITR)       ! Small time step
-  ZTSTEP   = PTSTEP                        ! Large time step
-  ELSE
-  ZTSPLITR= 2. * PTSTEP / REAL(ISPLITR)
-  ZTSTEP  = 2. * PTSTEP
-END IF
-!
-!*       2.3    compute the fluxes
-! 
-!  optimization by looking for locations where
-!  the precipitating fields are larger than a minimal value only !!!
-!
-ZRTMIN3 = XRTMIN(3) / ZTSTEP
-ZZS(:,:,:) = PRAIN(:,:,:)
-DO JN = 1 , ISPLITR
-   GSEDIM(:,:,:) = .FALSE.
-   GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) = ZZS(IIB:IIE,IJB:IJE,IKB:IKE) > ZRTMIN3
-! 
-   ISEDIM = COUNTJV( GSEDIM(:,:,:),I1(:),I2(:),I3(:))
-   IF( ISEDIM >= 1 ) THEN
-      IF( JN==1 ) THEN
-         ZZS(:,:,:) = ZZS(:,:,:) * ZTSTEP
-         DO JK = IKB , IKE-1
-            ZW(:,:,JK) =ZTSPLITR*2./(PRHODREF(:,:,JK)*(PZZ(:,:,JK+2)-PZZ(:,:,JK)))
-         END DO
-         ZW(:,:,IKE)  =ZTSPLITR/(PRHODREF(:,:,IKE)*(PZZ(:,:,IKE+1)-PZZ(:,:,IKE)))
-      END IF
-      ALLOCATE(ZRRS(ISEDIM)) 
-      ALLOCATE(ZRHODREF(ISEDIM))
-      DO JL=1,ISEDIM
-         ZRRS(JL) = ZZS(I1(JL),I2(JL),I3(JL))
-         ZRHODREF(JL) =  PRHODREF(I1(JL),I2(JL),I3(JL))
-      ENDDO
-      ALLOCATE(ZZW(ISEDIM)) ; ZZW(:) = 0.0
-!
-!*       2.2.1   for rain
-!
-      ZZW(:) = XFSEDRR * ZRRS(:)**(ZEXSEDR) * ZRHODREF(:)**(ZEXSEDR-XCEXVT)
-      ZWSED(:,:,:) = UNPACK( ZZW(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
-      DO JK = IKB , IKE
-         ZZS(:,:,JK) = ZZS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+1)-ZWSED(:,:,JK))
-      END DO
-      IF( JN==1 ) THEN
-         PINPAP(:,:) = ZWSED(:,:,IKB)*                                            &
-                             ( PSVT_MASS(:,:,IKB)/MAX(ZRTMIN3,PRRT(:,:,IKB)) )
-      END IF
-      DEALLOCATE(ZRHODREF)
-      DEALLOCATE(ZRRS)
-      DEALLOCATE(ZZW)
-      IF( JN==ISPLITR ) THEN
-         GSEDIM(:,:,:) = .FALSE.
-         GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) = ZZS(IIB:IIE,IJB:IJE,IKB:IKE) > ZRTMIN3
-         ZWSED(:,:,:) = 0.0
-         WHERE( GSEDIM(:,:,:) ) 
-            ZWSED(:,:,:) = 1.0/ZTSTEP - PRAIN(:,:,:)/ZZS(:,:,:)
-         END WHERE
-      END IF
-   END IF
-END DO
-!
-! Apply the rain sedimentation rate to the WR_xxx aqueous species
-!
-PRSVS_MASS(:,:,:) = PRSVS_MASS(:,:,:) + ZWSED(:,:,:)*PSVT_MASS(:,:,:)
-!
-END SUBROUTINE SCAV_MASS_SEDIMENTATION
-!
-!------------------------------------------------------------------------------
-!
-!###################################################################
-  FUNCTION COLL_EFFI (PRE, PRE_INV, PRE_SQRT, PSC, PSC_INV, PSC_SQRT, &
-                      PSC_3SQRT, PST, PST_STAR, PSIZE_RATIO,          &
-                      PVISC_RATIO, PDENS_RATIO_SQRT) RESULT(PCOL_EF)
-!###################################################################
-!
-!Compute the Raindrop-Aerosol Collision Efficiency
-!
-!*             0. DECLARATIONS  
-!              ---------------
-!
-  IMPLICIT NONE
-!
-  INTEGER :: I
-!
-  REAL, DIMENSION(:,:), INTENT(IN)    :: PRE         
-  REAL, DIMENSION(:,:), INTENT(IN)    :: PRE_INV         
-  REAL, DIMENSION(:,:), INTENT(IN)    :: PRE_SQRT         
-  REAL, DIMENSION(:,:), INTENT(IN)    :: PSC     
-  REAL, DIMENSION(:,:), INTENT(IN)    :: PSC_INV    
-  REAL, DIMENSION(:,:), INTENT(IN)    :: PSC_SQRT     
-  REAL, DIMENSION(:,:), INTENT(IN)    :: PSC_3SQRT     
-  REAL, DIMENSION(:,:), INTENT(IN)    :: PST_STAR   
-!
-  REAL, DIMENSION(:,:,:), INTENT(IN)  :: PST         
-  REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSIZE_RATIO 
-!
-  REAL, DIMENSION(:), INTENT(IN)    :: PVISC_RATIO 
-  REAL,               INTENT(IN)    :: PDENS_RATIO_SQRT 
-!
-  REAL, DIMENSION(SIZE(ZRE,1))      :: PCOL_EF   !result : collision efficiency
-!
-!-------------------------------------------------------------------------------
-!
-  PCOL_EF(:) = (4.*PSC_INV(:,J1)*PRE_INV(:,J2)*(1.+0.4*PRE_SQRT(:,J2)              &
-                  *PSC_3SQRT(:,J1)+0.16*PRE_SQRT(:,J2)*PSC_SQRT(:,J1)))      &
-              +(4.*PSIZE_RATIO(:,J1,J2)*(PVISC_RATIO(:)                    & 
-              +(1.+2.*PRE_SQRT(:,J2))*PSIZE_RATIO(:,J1,J2)))  
-  DO I=1,ISCAV
-    IF (PST(I,J1,J2)>PST_STAR(I,J2)) THEN            
-            PCOL_EF(I) = PCOL_EF(I)                                           &
-                    +(PDENS_RATIO_SQRT*((PST(I,J1,J2)-PST_STAR(I,J2))        &
-                    /(PST(I,J1,J2)-PST_STAR(I,J2)+2./3.))**(3./2.))
-    ENDIF
-  ENDDO
-  END FUNCTION COLL_EFFI
-!
-!------------------------------------------------------------------------------
-!
-END SUBROUTINE LIMA_PRECIP_SCAVENGING
diff --git a/src/mesonh/micro/lima_warm.f90 b/src/mesonh/micro/lima_warm.f90
index 97ff7edb8ce5000ddb47d67efbcde89932c74a91..4f954463b5071171871a778652241b6c1bc44738 100644
--- a/src/mesonh/micro/lima_warm.f90
+++ b/src/mesonh/micro/lima_warm.f90
@@ -262,11 +262,11 @@ PCRT(:,:,:) = 0.
 PCCS(:,:,:) = 0.
 PCRS(:,:,:) = 0.
 !
-IF ( LWARM ) PCCT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NC)
-IF ( LWARM .AND. LRAIN ) PCRT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NR)
+IF ( NMOM_C.GE.2 ) PCCT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NC)
+IF ( NMOM_R.GE.2 ) PCRT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NR)
 !
-IF ( LWARM ) PCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC)
-IF ( LWARM .AND. LRAIN ) PCRS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR)
+IF ( NMOM_C.GE.2 ) PCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC)
+IF ( NMOM_R.GE.2 ) PCRS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR)
 !
 IF ( NMOD_CCN .GE. 1 ) THEN
    ALLOCATE( ZNFS(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3),NMOD_CCN) )
@@ -311,10 +311,10 @@ ZT(:,:,:)  = PTHT(:,:,:) * (PPABST(:,:,:)/XP00)**(XRD/XCPD)
 !
 !
 if ( lbudget_rc .and. osedc ) call Budget_store_init( tbudgets(NBUDGET_RC), 'SEDI', prcs(:, :, :) * prhodj(:, :, :) )
-if ( lbudget_rr .and. orain ) call Budget_store_init( tbudgets(NBUDGET_RR), 'SEDI', prrs(:, :, :) * prhodj(:, :, :) )
+if ( lbudget_rr .and. nmom_r.ge.1 ) call Budget_store_init( tbudgets(NBUDGET_RR), 'SEDI', prrs(:, :, :) * prhodj(:, :, :) )
 if ( lbudget_sv ) then
   if ( osedc ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'SEDI', pccs(:, :, :) * prhodj(:, :, :) )
-  if ( orain ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'SEDI', pcrs(:, :, :) * prhodj(:, :, :) )
+  if ( nmom_r.ge.2 ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'SEDI', pcrs(:, :, :) * prhodj(:, :, :) )
 end if
 
 CALL LIMA_WARM_SEDIMENTATION (OSEDC, KSPLITR, PTSTEP, KMI,  &
@@ -326,10 +326,10 @@ CALL LIMA_WARM_SEDIMENTATION (OSEDC, KSPLITR, PTSTEP, KMI,  &
                               PINPRR3D    )
 
 if ( lbudget_rc .and. osedc ) call Budget_store_end( tbudgets(NBUDGET_RC), 'SEDI', prcs(:, :, :) * prhodj(:, :, :) )
-if ( lbudget_rr .and. orain ) call Budget_store_end( tbudgets(NBUDGET_RR), 'SEDI', prrs(:, :, :) * prhodj(:, :, :) )
+if ( lbudget_rr .and. nmom_r.ge.1 ) call Budget_store_end( tbudgets(NBUDGET_RR), 'SEDI', prrs(:, :, :) * prhodj(:, :, :) )
 if ( lbudget_sv ) then
   if ( osedc ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'SEDI', pccs(:, :, :) * prhodj(:, :, :) )
-  if ( orain ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'SEDI', pcrs(:, :, :) * prhodj(:, :, :) )
+  if ( nmom_r.ge.2 ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'SEDI', pcrs(:, :, :) * prhodj(:, :, :) )
 end if
 !
 ! 2.bis Deposition at 1st level above ground
@@ -411,7 +411,7 @@ END IF ! LACTI
 !              ------------------------
 !
 !
-IF (ORAIN) THEN
+IF (NMOM_R.GE.2) THEN
 
   if ( lbudget_th ) call Budget_store_init( tbudgets(NBUDGET_TH),                    'REVA', pths(:, :, :) * prhodj(:, :, :) )
   if ( lbudget_rv ) call Budget_store_init( tbudgets(NBUDGET_RV),                    'REVA', prvs(:, :, :) * prhodj(:, :, :) )
@@ -466,8 +466,8 @@ IF ( KRR .GE. 3 ) PRS(:,:,:,3) = PRRS(:,:,:)
 !
 ! Prepare 3D number concentrations
 !
-IF ( LWARM ) PSVS(:,:,:,NSV_LIMA_NC) = PCCS(:,:,:)
-IF ( LWARM .AND. LRAIN ) PSVS(:,:,:,NSV_LIMA_NR) = PCRS(:,:,:)
+IF ( NMOM_C.GE.2 ) PSVS(:,:,:,NSV_LIMA_NC) = PCCS(:,:,:)
+IF ( NMOM_R.GE.2 ) PSVS(:,:,:,NSV_LIMA_NR) = PCRS(:,:,:)
 !
 IF ( NMOD_CCN .GE. 1 ) THEN
    PSVS(:,:,:,NSV_LIMA_CCN_FREE:NSV_LIMA_CCN_FREE+NMOD_CCN-1) = ZNFS(:,:,:,:)
diff --git a/src/mesonh/micro/lima_warm_coal.f90 b/src/mesonh/micro/lima_warm_coal.f90
index 1c264a8fd844abd9c9e484ab25f60fdd5cbc938f..01d0bd60c6ecccca42efa09722ba36e0fda446f0 100644
--- a/src/mesonh/micro/lima_warm_coal.f90
+++ b/src/mesonh/micro/lima_warm_coal.f90
@@ -244,7 +244,7 @@ IF( IMICRO >= 0 ) THEN
 !
 !-------------------------------------------------------------------------------
 !
-IF (LRAIN) THEN
+IF (NMOM_R.GE.2) THEN
 !
 !*       2. Self-collection of cloud droplets    
 !   	 ------------------------------------
@@ -445,7 +445,7 @@ IF (LRAIN) THEN
     if ( lbudget_sv ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nr), 'SCBU', &
                                              Unpack( zcrs(:), mask = gmicro(:, :, :), field = pcrs(:, :, :) ) * prhodj(:, :, :) )
    END IF
-END IF ! LRAIN
+END IF
 !
 !
 !-------------------------------------------------------------------------------
diff --git a/src/mesonh/micro/modn_param_lima.f90 b/src/mesonh/micro/modn_param_lima.f90
index 44d46714532cecea5636b296e32983968ea57ab6..390ba1dc8853237ddf00550f04dbeb9465636c3d 100644
--- a/src/mesonh/micro/modn_param_lima.f90
+++ b/src/mesonh/micro/modn_param_lima.f90
@@ -17,7 +17,7 @@ USE MODD_PARAM_LIMA
 IMPLICIT NONE
 !
 !
-NAMELIST/NAM_PARAM_LIMA/LCOLD, LNUCL, LSEDI, LSNOW, LHAIL, LHHONI, LMEYERS,&
+NAMELIST/NAM_PARAM_LIMA/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,  &
@@ -25,7 +25,7 @@ NAMELIST/NAM_PARAM_LIMA/LCOLD, LNUCL, LSEDI, LSNOW, LHAIL, LHHONI, LMEYERS,&
                         XALPHAI, XNUI, XALPHAS, XNUS, XALPHAG, XNUG,       &
                         XFACTNUC_DEP, XFACTNUC_CON, NPHILLIPS,             &
                         LCIBU, XNDEBRIS_CIBU, LRDSF, LMURAKAMI,            &
-                        LWARM, LACTI, LRAIN, LSEDC, LACTIT, LBOUND, LSPRO, &
+                        LACTI, LSEDC, LACTIT, LBOUND, LSPRO,               &
                         LADJ, LKHKO, LKESSLERAC, NMOM_C, NMOM_R,           &
                         NMOD_CCN, XCCN_CONC,                               &
                         LCCN_HOM, CCCN_MODES, HINI_CCN, HTYPE_CCN,         &
diff --git a/tools/check_commit_ial.sh b/tools/check_commit_ial.sh
index 55e0785ea8688e86d42f49d7f9c8fee729ba675f..e5136d8dccf4bc21859488c9abe359cd67d0d378 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/
diff --git a/tools/conf_tests/big_3D/aro48t3.sh b/tools/conf_tests/big_3D/aro48t3.sh
index 4663a7184bbbee85922b83a16d966b5cbc780451..433a17b9376902ac5e501267f48df2b91969a12b 100644
--- a/tools/conf_tests/big_3D/aro48t3.sh
+++ b/tools/conf_tests/big_3D/aro48t3.sh
@@ -33,8 +33,8 @@ export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
 # Total number of MPI tasks:
 MPI_TASKS=$SLURM_NTASKS
 # Number of tasks reserved for the I/O server : 2 (hyperthreaded) nodes
-NTASKS_IO=$(($(grep processor /proc/cpuinfo | wc -l)/1/$OMP_NUM_THREADS))
-
+#NTASKS_IO=$(($(grep processor /proc/cpuinfo | wc -l)/1/$OMP_NUM_THREADS))
+NTASKS_IO=0
 echo NNODES=$NNODES
 echo MPITASKS_PER_NODE=$MPITASKS_PER_NODE
 echo