From 498511e0261a0f44fdb685d680c88eaa5675e567 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Beno=C3=AEt=20Vi=C3=A9?= <benoit.vie@meteo.fr>
Date: Wed, 2 Feb 2022 14:19:52 +0100
Subject: [PATCH] Add namelist keyword NMOM_I + compatibility of ICE1M with
 SUBG_COND - 1st try

---
 src/MNH/default_desfmn.f90            |   3 +-
 src/MNH/lima_adjust_split.f90         | 261 +++++++++++++-------------
 src/MNH/lima_bergeron.f90             |  26 +--
 src/MNH/lima_ice_aggregation_snow.f90 |  44 +++--
 src/MNH/lima_ice_deposition.f90       |  90 +++++----
 src/MNH/lima_nucleation_procs.f90     |  49 ++++-
 src/MNH/lima_snow_deposition.f90      |  80 ++++----
 src/MNH/lima_tendencies.f90           |  33 ++--
 src/MNH/modd_param_lima.f90           |   1 +
 src/MNH/modn_param_lima.f90           |   2 +-
 src/MNH/resolved_cloud.f90            |   2 +-
 11 files changed, 300 insertions(+), 291 deletions(-)

diff --git a/src/MNH/default_desfmn.f90 b/src/MNH/default_desfmn.f90
index c1be2c51e..8bf7523a2 100644
--- a/src/MNH/default_desfmn.f90
+++ b/src/MNH/default_desfmn.f90
@@ -274,7 +274,7 @@ USE MODD_ALLSTATION_n
 !
 !
 USE MODD_PARAM_LIMA, ONLY : LCOLD, LNUCL, LSEDI, LHHONI, LSNOW, LHAIL, LMEYERS,       &
-                            NMOD_IFN, XIFN_CONC, LIFN_HOM, CIFN_SPECIES,              &
+                            NMOD_IFN, NMOM_I, XIFN_CONC, LIFN_HOM, CIFN_SPECIES,      &
                             CINT_MIXING, NMOD_IMM, NIND_SPECIE,                       &
                             CPRISTINE_ICE_LIMA, CHEVRIMED_ICE_LIMA,                   &
                             XFACTNUC_DEP, XFACTNUC_CON,                               &
@@ -1030,6 +1030,7 @@ IF (KMI == 1) THEN
   CHEVRIMED_ICE_LIMA = 'GRAU'
   XFACTNUC_DEP = 1.0  
   XFACTNUC_CON = 1.0
+  NMOM_I = 2
   NMOD_IFN = 1
   NIND_SPECIE = 1
   LMEYERS = .FALSE.
diff --git a/src/MNH/lima_adjust_split.f90 b/src/MNH/lima_adjust_split.f90
index 6d8bd3dae..0e3a9a9da 100644
--- a/src/MNH/lima_adjust_split.f90
+++ b/src/MNH/lima_adjust_split.f90
@@ -14,7 +14,7 @@ INTERFACE
                              PRHODREF, PRHODJ, PEXNREF, PPABSM, PSIGS, PMFCONV, &
                              PPABST, PZZ, PDTHRAD, PW_NU,                       &
                              PRT, PRS, PSVT, PSVS,                              &
-                             PTHS, PSRCS, PCLDFR, PRC_MF, PCF_MF                )
+                             PTHS, PSRCS, PCLDFR, PRC_MF, PRI_MF, PCF_MF        )
 !
 USE MODD_IO,    ONLY: TFILEDATA
 USE MODD_NSV,   only: NSV_LIMA_BEG
@@ -59,6 +59,7 @@ REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PSRCS     ! Second-order flux
                                                      ! multiplied by Lambda_3
 REAL, DIMENSION(:,:,:),   INTENT(INOUT)   :: PCLDFR    ! 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
@@ -73,7 +74,7 @@ END MODULE MODI_LIMA_ADJUST_SPLIT
                              PRHODREF, PRHODJ, PEXNREF, PPABSM, PSIGS, PMFCONV, &
                              PPABST, PZZ, PDTHRAD, PW_NU,                       &
                              PRT, PRS, PSVT, PSVS,                              &
-                             PTHS, PSRCS, PCLDFR, PRC_MF, PCF_MF                )
+                             PTHS, PSRCS, PCLDFR, PRC_MF, PRI_MF, PCF_MF        )
 !     ###########################################################################
 !
 !!****  *MIMA_ADJUST* -  compute the fast microphysical sources 
@@ -218,6 +219,7 @@ REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PSRCS     ! Second-order flux
                                                      ! multiplied by Lambda_3
 REAL, DIMENSION(:,:,:),   INTENT(INOUT)   :: PCLDFR    ! 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 
 !
 !
@@ -273,7 +275,7 @@ REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) &
                             ZRV, ZRV2,  &
                             ZRC, ZRC2,  &
                             ZRI,  &
-                            ZSIGS, ZSRCS, &
+                            Z_SIGS, Z_SRCS, &
                             ZW_MF
 LOGICAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) &
                          :: GMICRO ! Test where to compute cond/dep proc.
@@ -310,6 +312,8 @@ INTEGER                           :: JMOD, JMOD_IFN, JMOD_IMM
 !
 INTEGER , DIMENSION(3) :: BV
 TYPE(TFIELDDATA)  :: TZFIELD
+LOGICAL :: G_SIGMAS, GUSERI
+REAL :: Z_SIGQSAT
 !
 !-------------------------------------------------------------------------------
 !
@@ -497,152 +501,147 @@ DO JITER =1,ITERMAX
 !*       3.     FIRST ORDER SUBGRID CONDENSATION SCHEME
 !               ---------------------------------------
 !
-   IF ( OSUBG_COND ) THEN
-     !
-      ZRV=PRVS*PTSTEP
-      ZRC=PRCS*PTSTEP
-      ZRV2=PRVT
-      ZRC2=PRCT
+   ZRV=PRVS*PTSTEP
+   ZRC=PRCS*PTSTEP
+   ZRV2=PRVT
+   ZRC2=PRCT
+   IF (NMOM_I.EQ.1) THEN
+      ZRI=PRIS*PTSTEP
+      GUSERI=.TRUE.
+   ELSE
       ZRI=0.
-      ZSIGS=PSIGS
-      CALL CONDENSATION(IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE, 1, 'S',   &
-           HCONDENS, HLAMBDA3, &
-           PPABST, PZZ, PRHODREF, ZT, ZRV, ZRC, ZRI, PRSS*PTSTEP, PRGS*PTSTEP, &
-           ZSIGS, PMFCONV, PCLDFR, PSRCS, .FALSE., OSIGMAS, &
-           PSIGQSAT, PLV=ZLV, PLS=ZLS, PCPH=ZCPH )
-      PCLDFR(:,:,:) = MIN(PCLDFR(:,:,:) + PCF_MF(:,:,:) , 1.)
-      ZRV(:,:,:) = ZRV(:,:,:) - MAX(MIN(PRC_MF(:,:,:), ZRV(:,:,:)),0.)
-      ZRC(:,:,:) = ZRC(:,:,:) + MAX(MIN(PRC_MF(:,:,:), ZRV(:,:,:)),0.)
-      ZW_MF=0.
-      CALL LIMA_CCN_ACTIVATION (TPFILE,                         &
-           PRHODREF, PEXNREF, PPABST, ZT2, PDTHRAD, PW_NU+ZW_MF, &
-           PTHT, ZRV2, ZRC2, PCCT, PRRT, PNFT, PNAT,              &
-           PCLDFR                                               )
-!
+      GUSERI=.FALSE.
+   END IF
+   IF (OSUBG_COND) THEN
+      Z_SIGS=PSIGS
+      G_SIGMAS=OSIGMAS
+      Z_SIGQSAT=PSIGQSAT
    ELSE
-!
-!-------------------------------------------------------------------------------
-!
-      ZRV=PRVS*PTSTEP
-      ZRC=PRCS*PTSTEP
-      ZRI=PRIS*PTSTEP
-      ZSIGS=0
-      CALL CONDENSATION(IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE, 1, 'S',   &
-           HCONDENS, HLAMBDA3, &
-           PPABST, PZZ, PRHODREF, ZT, ZRV, ZRC, ZRI, PRSS*PTSTEP, PRGS*PTSTEP, &
-           ZSIGS, PMFCONV, PCLDFR, ZSRCS, .TRUE., OSIGMAS=.TRUE., &
-           PSIGQSAT=0., PLV=ZLV, PLS=ZLS, PCPH=ZCPH )
+      Z_SIGS=0.
+      G_SIGMAS=.TRUE.
+      Z_SIGQSAT=0.
+   END IF
 
-      ZW1(:,:,:) = (ZRC(:,:,:) - PRCS(:,:,:)*PTSTEP) / PTSTEP       ! Pcon = ----------
-                                                      !         2 Delta t
+   CALL CONDENSATION(IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE, 1, 'S',   &
+        HCONDENS, HLAMBDA3,                                                 &
+        PPABST, PZZ, PRHODREF, ZT, ZRV, ZRC, ZRI, PRSS*PTSTEP, PRGS*PTSTEP, &
+        Z_SIGS, PMFCONV, PCLDFR, Z_SRCS, GUSERI, G_SIGMAS,                  &
+        Z_SIGQSAT, PLV=ZLV, PLS=ZLS, PCPH=ZCPH )
 
-      ZW2(:,:,:) = (ZRI(:,:,:) - PRIS(:,:,:)*PTSTEP) / PTSTEP       ! idem ZW1 but for Ri
+   IF (OSUBG_COND) THEN
+      PSRCS=Z_SRCS
+      ZW_MF=0.
+      CALL LIMA_CCN_ACTIVATION (TPFILE,                          &
+           PRHODREF, PEXNREF, PPABST, ZT2, PDTHRAD, PW_NU+ZW_MF, &
+           PTHT, ZRV2, ZRC2, PCCT, PRRT, PNFT, PNAT,             &
+           PCLDFR                                                )      
+   END IF
+
+END DO
 !
 !*       5.1    compute the sources
 !
-      WHERE( ZW1(:,:,:) < 0.0 )
-         ZW1(:,:,:) = MAX ( ZW1(:,:,:), -PRCS(:,:,:) )
-      ELSEWHERE
-         ZW1(:,:,:) = MIN ( ZW1(:,:,:),  PRVS(:,:,:) )
-      END WHERE
-      PRVS(:,:,:) = PRVS(:,:,:) - ZW1(:,:,:)
-      PRCS(:,:,:) = PRCS(:,:,:) + ZW1(:,:,:)
-      PTHS(:,:,:) = PTHS(:,:,:) +        &
-           ZW1(:,:,:) * ZLV(:,:,:) / (ZCPH(:,:,:) * PEXNREF(:,:,:))
-!
-      WHERE( ZW2(:,:,:) < 0.0 )
-         ZW2(:,:,:) = MAX ( ZW2(:,:,:), -PRIS(:,:,:) )
-      ELSEWHERE
-         ZW2(:,:,:) = MIN ( ZW2(:,:,:),  PRVS(:,:,:) )
-      END WHERE
-      PRVS(:,:,:) = PRVS(:,:,:) - ZW2(:,:,:)
-      PRIS(:,:,:) = PRIS(:,:,:) + ZW2(:,:,:)
-      PTHS(:,:,:) = PTHS(:,:,:) +        &
-           ZW2(:,:,:) * ZLS(:,:,:) / (ZCPH(:,:,:) * PEXNREF(:,:,:))
-!
-   END IF ! end of adjustment procedure (test on OSUBG_COND)
+                                                        !         Rc - Rc*
+ZW1(:,:,:) = (ZRC(:,:,:) - PRCS(:,:,:)*PTSTEP) / PTSTEP ! Pcon = ----------
+                                                        !         2 Delta t
+WHERE( ZW1(:,:,:) < 0.0 )
+   ZW1(:,:,:) = MAX ( ZW1(:,:,:), -PRCS(:,:,:) )
+ELSEWHERE
+   ZW1(:,:,:) = MIN ( ZW1(:,:,:),  PRVS(:,:,:) )
+END WHERE
+PRVS(:,:,:) = PRVS(:,:,:) - ZW1(:,:,:)
+PRCS(:,:,:) = PRCS(:,:,:) + ZW1(:,:,:)
+PTHS(:,:,:) = PTHS(:,:,:) +        &
+              ZW1(:,:,:) * ZLV(:,:,:) / (ZCPH(:,:,:) * PEXNREF(:,:,:))
 !
-! Remove 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
+IF (NMOM_I.EQ.1) THEN
+   ZW2(:,:,:) = (ZRI(:,:,:) - PRIS(:,:,:)*PTSTEP) / PTSTEP ! idem ZW1 but for Ri
+!
+   WHERE( ZW2(:,:,:) < 0.0 )
+      ZW2(:,:,:) = MAX ( ZW2(:,:,:), -PRIS(:,:,:) )
+   ELSEWHERE
+      ZW2(:,:,:) = MIN ( ZW2(:,:,:),  PRVS(:,:,:) )
    END WHERE
+   PRVS(:,:,:) = PRVS(:,:,:) - ZW2(:,:,:)
+   PRIS(:,:,:) = PRIS(:,:,:) + ZW2(:,:,:)
+   PTHS(:,:,:) = PTHS(:,:,:) +        &
+                 ZW2(:,:,:) * ZLS(:,:,:) / (ZCPH(:,:,:) * PEXNREF(:,:,:))
+END IF
 !
-   ZW1(:,:,:) = 0.
-   IF (LWARM .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
+!*       5.2    compute the cloud fraction PCLDFR
 !
-   IF (LWARM .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
+IF ( .NOT. OSUBG_COND ) THEN
+  WHERE (PRCS(:,:,:) + PRIS(:,:,:) > 1.E-12 / PTSTEP)
+    PCLDFR(:,:,:)  = 1.
+  ELSEWHERE
+    PCLDFR(:,:,:)  = 0. 
+  ENDWHERE 
+  IF ( SIZE(PSRCS,3) /= 0 ) THEN
+     WHERE (PRCS(:,:,:) + PRIS(:,:,:) > 1.E-12 / ZDT)
+        PSRCS(:,:,:)  = 1.
+     ELSEWHERE
+        PSRCS(:,:,:)  = 0.
+     ENDWHERE
+  END IF
+ELSE
+! We limit PRC_MF+PRI_MF to PRVS*PTSTEP to avoid negative humidity
+   ZW1(:,:,:)=PRC_MF(:,:,:)/PTSTEP
+   IF (NMOM_I.EQ.1) THEN
+      ZW2(:,:,:)=PRI_MF(:,:,:)/PTSTEP
+   ELSE
+      ZW2(:,:,:)=0.
    END IF
+   WHERE(ZW1(:,:,:)+ZW2(:,:,:)>PRVS(:,:,:))
+      ZW1(:,:,:)=ZW1(:,:,:)*PRVS(:,:,:)/(ZW1(:,:,:)+ZW2(:,:,:))
+      ZW2(:,:,:)=PRVS(:,:,:)-ZW1(:,:,:)
+   ENDWHERE
+! Compute CF and update rc, ri from MF scheme
+   PRVS(:,:,:)   = PRVS(:,:,:) - ZW1(:,:,:) -ZW2(:,:,:)
+   PRCS(:,:,:)   = PRCS(:,:,:) + ZW1(:,:,:)
+   PRIS(:,:,:)   = PRIS(:,:,:) + ZW2(:,:,:)
+   PCCS(:,:,:)   = PCCT(:,:,:) / PTSTEP
+   PNFS(:,:,:,:) = PNFT(:,:,:,:) / PTSTEP
+   PNAS(:,:,:,:) = PNAT(:,:,:,:) / PTSTEP
+   PTHS(:,:,:)   = PTHS(:,:,:) + &
+                   (ZW1(:,:,:) * ZLV(:,:,:) + ZW2 * ZLS(:,:,:)) / ZCPH(:,:,:)     &
+                   /  PEXNREF(:,:,:)
+END IF
 !
-   IF (LSCAV .AND. LAERO_MASS) PMAS(:,:,:) = PMAS(:,:,:) * (1-ZMASK(:,:,:))
-!
+! Remove cloud droplets if there are few
 !
-END DO !  end of the iterative loop
+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 .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 .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
 !
-!*       5.2    compute the cloud fraction PCLDFR (binary !!!!!!!)
+IF (LSCAV .AND. LAERO_MASS) PMAS(:,:,:) = PMAS(:,:,:) * (1-ZMASK(:,:,:))
 !
-IF ( .NOT. OSUBG_COND ) THEN
-   WHERE (PRCS(:,:,:) + PRIS(:,:,:) + PRSS(:,:,:) > 1.E-12 / ZDT)
-      PCLDFR(:,:,:)  = 1.
-   ELSEWHERE
-      PCLDFR(:,:,:)  = 0.
-   ENDWHERE
-END IF
 !
-IF ( SIZE(PSRCS,3) /= 0 ) THEN
-   WHERE (PRCS(:,:,:) + PRIS(:,:,:) > 1.E-12 / ZDT)
-      PSRCS(:,:,:)  = 1.
-   ELSEWHERE
-      PSRCS(:,:,:)  = 0.
-   ENDWHERE
-END IF
 !
-IF ( OSUBG_COND ) THEN
-   !
-   ! Mixing ratio change (cloud liquid water)
-   !
-   ZW1(:,:,:) = (ZRC(:,:,:) - PRCS(:,:,:)*PTSTEP) / PTSTEP
-   WHERE( ZW1(:,:,:) < 0.0 )
-      ZW1(:,:,:) = MAX ( ZW1(:,:,:), -PRCS(:,:,:) )
-   ELSEWHERE
-      ZW1(:,:,:) = MIN ( ZW1(:,:,:),  PRVS(:,:,:) )
-   END WHERE
-
-   WHERE (PCCT(:,:,:) < PCLDFR(:,:,:)*XCTMIN(2) .OR. ZRC(:,:,:)<PCLDFR(:,:,:)*XRTMIN(2))
-      ZW1=-PRCS
-      PCCS=0.
-      PCLDFR=0.
-   END WHERE
-   
-   PRVS(:,:,:)   = PRVS(:,:,:) - ZW1(:,:,:)
-   PRCS(:,:,:)   = PRCS(:,:,:) + ZW1(:,:,:)
-   PCCS(:,:,:)   = PCCT(:,:,:) / PTSTEP
-   PNFS(:,:,:,:) = PNFT(:,:,:,:) / PTSTEP
-   PNAS(:,:,:,:) = PNAT(:,:,:,:) / PTSTEP
-   PTHS(:,:,:)   = PTHS(:,:,:) +        &
-                   ZW1(:,:,:) * ZLV(:,:,:) / (ZCPH(:,:,:) * PEXNREF(:,:,:))
-END IF ! fin test OSUBG_COND
-
 IF ( tpfile%lopened ) THEN
    TZFIELD%CMNHNAME   = 'NEB'
    TZFIELD%CSTDNAME   = ''
@@ -661,7 +660,6 @@ END IF
 !*       6.  SAVE CHANGES IN PRS AND PSVS
 !            ----------------------------
 !
-!
 ! Prepare 3D water mixing ratios
 PRS(:,:,:,1) = PRVS(:,:,:)
 IF ( KRR .GE. 2 ) PRS(:,:,:,2) = PRCS(:,:,:)
@@ -720,7 +718,6 @@ 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(:, :, :) )
-  !Remark: PRIS is not modified but source term kept for better coherence with lima_adjust and lima_notadjust
   if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'CEDS', pris(:, :, :) * prhodj(:, :, :) )
   if ( lbudget_sv ) then
     if ( lwarm ) &
diff --git a/src/MNH/lima_bergeron.f90 b/src/MNH/lima_bergeron.f90
index 9afd9ac36..7a4967708 100644
--- a/src/MNH/lima_bergeron.f90
+++ b/src/MNH/lima_bergeron.f90
@@ -10,8 +10,7 @@ INTERFACE
    SUBROUTINE LIMA_BERGERON (LDCOMPUTE,                         &
                              PRCT, PRIT, PCIT, PLBDI,           &
                              PSSIW, PAI, PCJ, PLVFACT, PLSFACT, &
-                             P_TH_BERFI, P_RC_BERFI,            &
-                             PA_TH, PA_RC, PA_RI                )
+                             P_TH_BERFI, P_RC_BERFI             )
 !
 LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
 !
@@ -28,10 +27,6 @@ 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
@@ -41,8 +36,7 @@ END MODULE MODI_LIMA_BERGERON
       SUBROUTINE LIMA_BERGERON( LDCOMPUTE,                        &
                                PRCT, PRIT, PCIT, PLBDI,           &
                                PSSIW, PAI, PCJ, PLVFACT, PLSFACT, &
-                               P_TH_BERFI, P_RC_BERFI,            &
-                               PA_TH, PA_RC, PA_RI                )
+                               P_TH_BERFI, P_RC_BERFI             )
 !     #############################################################
 !
 !!    PURPOSE
@@ -89,18 +83,9 @@ 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.     Bergeron-Findeisen process
-!	        --------------------------
+! Bergeron-Findeisen process
 !
 P_TH_BERFI(:) = 0.0
 P_RC_BERFI(:) = 0.0
@@ -111,11 +96,6 @@ WHERE( (PRCT(:)>XRTMIN(2)) .AND. (PRIT(:)>XRTMIN(4)) .AND. (PCIT(:)>XCTMIN(4)) .
    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/MNH/lima_ice_aggregation_snow.f90 b/src/MNH/lima_ice_aggregation_snow.f90
index 698697a2c..7ded11bd1 100644
--- a/src/MNH/lima_ice_aggregation_snow.f90
+++ b/src/MNH/lima_ice_aggregation_snow.f90
@@ -59,7 +59,7 @@ END MODULE MODI_LIMA_ICE_AGGREGATION_SNOW
 !              ------------
 !
 USE MODD_CST,             ONLY : XTT
-USE MODD_PARAM_LIMA,      ONLY : XRTMIN, XCTMIN, XCEXVT
+USE MODD_PARAM_LIMA,      ONLY : XRTMIN, XCTMIN, XCEXVT, NMOM_I
 USE MODD_PARAM_LIMA_COLD, ONLY : XBI, XCCS, XCXS, XCOLEXIS, XAGGS_CLARGE1, XAGGS_CLARGE2, &
                                  XAGGS_RLARGE1, XAGGS_RLARGE2, XFIAGGS
 !
@@ -99,24 +99,30 @@ P_RI_AGGS(:) = 0.
 P_CI_AGGS(:) = 0.
 !
 !
-WHERE ( (PRIT(:)>XRTMIN(4)) .AND. (PRST(:)>XRTMIN(5)) .AND. LDCOMPUTE(:) )
-!!$   ZZW1(:) = (PLBDI(:) / PLBDS(:))**3
-!!$   ZZW2(:) = (PCIT(:)*(XCCS*PLBDS(:)**XCXS)/PRHODREF(:)*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(:))
-!
-   ZZW1(:) = XFIAGGS * EXP( XCOLEXIS*(PT(:)-XTT) ) &
-                     * PRIT(:)                     &
-                     * PLBDS(:)**(1.-0.27-2.)      &
-                     * PRHODREF(:)**(-XCEXVT)
-!
-   P_RI_AGGS(:) = - ZZW1(:)
-END WHERE
+IF (NMOM_I.EQ.1) THEN 
+   WHERE ( (PRIT(:)>XRTMIN(4)) .AND. (PRST(:)>XRTMIN(5)) .AND. LDCOMPUTE(:) )
+      ZZW1(:) = XFIAGGS * EXP( XCOLEXIS*(PT(:)-XTT) ) &
+                        * PRIT(:)                     &
+                        * PLBDS(:)**(1.-0.27-2.)      &
+                        * PRHODREF(:)**(-XCEXVT)
+!
+      P_RI_AGGS(:) = - ZZW1(:)
+   END WHERE
+ELSE
+   WHERE ( (PRIT(:)>XRTMIN(4)) .AND. (PRST(:)>XRTMIN(5)) .AND. LDCOMPUTE(:) )
+      ZZW1(:) = (PLBDI(:) / PLBDS(:))**3
+      ZZW2(:) = (PCIT(:)*(XCCS*PLBDS(:)**XCXS)/PRHODREF(:)*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
+END IF
 !
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/lima_ice_deposition.f90 b/src/MNH/lima_ice_deposition.f90
index 34dd0c2c1..0c9bfedda 100644
--- a/src/MNH/lima_ice_deposition.f90
+++ b/src/MNH/lima_ice_deposition.f90
@@ -73,8 +73,9 @@ SUBROUTINE LIMA_ICE_DEPOSITION (PTSTEP, LDCOMPUTE,                        &
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_PARAM_LIMA,      ONLY : XRTMIN, XCTMIN, XALPHAI, XALPHAS, XNUI, XNUS, LSNOW 
-USE MODD_PARAM_LIMA_COLD, ONLY : XCXS, XCCS, &
+USE MODD_PARAM_LIMA,      ONLY : XRTMIN, XCTMIN, XALPHAI, XALPHAS, XNUI, XNUS,&
+                                 LSNOW, NMOM_I 
+USE MODD_PARAM_LIMA_COLD, ONLY : XCXS, XCCS,                                  &
                                  XLBDAS_MAX, XDSCNVI_LIM, XLBDASCNVI_MAX,     &
                                  XC0DEPSI, XC1DEPSI, XR0DEPSI, XR1DEPSI,      &
                                  XSCFAC, X1DEPS, X0DEPS, XEX1DEPS, XEX0DEPS,  &
@@ -131,54 +132,51 @@ P_CI_CNVS(:) = 0.
 GMICRO(:) = LDCOMPUTE(:) .AND. PRIT(:)>XRTMIN(4)
 !
 !
-WHERE( GMICRO )
+IF (NMOM_I.EQ.1) THEN
+   WHERE( GMICRO )
 !
+!*       Conversion of pristine ice to r_s: RICNVS
+!        -----------------------------------------
 !
-!*       2.2    Deposition of water vapor on r_i: RVDEPI
-!        -----------------------------------------------
+      ZCRIAUTI(:)=MIN(0.2E-4,10**(0.06*(PT(:)-XTT)-3.5))
+      ZZW(:) = 0.0
+      WHERE ( (PRIT(:)>XRTMIN(4)))
+         ZZW(:)   = 1.E-3 * EXP( 0.015*(PT(:)-XTT) ) * MAX( PRIT(:)-ZCRIAUTI(:),0.0 )
+      END WHERE
 !
-!
-!   ZZW(:) = 0.0
-!   WHERE ( (PRIT(:)>XRTMIN(4)) .AND. (PCIT(:)>XCTMIN(4)) )
-!      ZZW(:) = ( PSSI(:) / PAI(:) ) * PCIT(:) *        &
-!        ( X0DEPI/PLBDI(:)+X2DEPI*PCJ(:)*PCJ(:)/PLBDI(:)**(XDI+2.0) )
-!   END WHERE
-!
-!   P_RI_DEPI(:) = ZZW(:)
-!!$   P_TH_DEPI(:) = P_RI_DEPI(:) * PLSFACT(:)
-!
-!!$   PA_TH(:) = PA_TH(:) + P_TH_DEPI(:)
-!!$   PA_RV(:) = PA_RV(:) - P_RI_DEPI(:) 
-!!$   PA_RI(:) = PA_RI(:) + P_RI_DEPI(:) 
-!
-!
-!*       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(:))
-!!$!
-!!$      ZZW(:) = ( XR0DEPIS + XR1DEPIS*PCJ(:) )*ZZX(:)                             
-!!$!
-!!$      ZZW2(:) = ZZW(:) * (XC0DEPIS+XC1DEPIS*PCJ(:)) / (XR0DEPIS+XR1DEPIS*PCJ(:))
-!!$   END WHERE
-!
-   ZCRIAUTI(:)=MIN(0.2E-4,10**(0.06*(PT(:)-XTT)-3.5))
-   ZZW(:) = 0.0
-   WHERE ( (PRIT(:)>XRTMIN(4)))
-      ZZW(:)   = 1.E-3 * EXP( 0.015*(PT(:)-XTT) ) * MAX( PRIT(:)-ZCRIAUTI(:),0.0 )
+      P_RI_CNVS(:) = - ZZW(:)
    END WHERE
-!
-P_RI_CNVS(:) = - ZZW(:)
-!P_CI_CNVS(:) = - ZZW2(:)
-!
-!
-END WHERE
+ELSE
+   WHERE( GMICRO )
+!
+!*       Deposition of water vapor on r_i: RVDEPI
+!        ----------------------------------------
+!
+      ZZW(:) = 0.0
+      WHERE ( (PRIT(:)>XRTMIN(4)) .AND. (PCIT(:)>XCTMIN(4)) )
+         ZZW(:) = ( PSSI(:) / PAI(:) ) * PCIT(:) *        &
+              ( X0DEPI/PLBDI(:)+X2DEPI*PCJ(:)*PCJ(:)/PLBDI(:)**(XDI+2.0) )
+      END WHERE
+      P_RI_DEPI(:) = ZZW(:)
+!
+!*       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(:))
+!
+         ZZW(:) = (XR0DEPIS + XR1DEPIS*PCJ(:))*ZZX(:)                             
+!
+         ZZW2(:) = ZZW(:) * (XC0DEPIS+XC1DEPIS*PCJ(:)) / (XR0DEPIS+XR1DEPIS*PCJ(:))
+      END WHERE
+      P_RI_CNVS(:) = - ZZW(:)
+      P_CI_CNVS(:) = - ZZW2(:)
+   END WHERE
+END IF
 !
 IF (.NOT.LSNOW) THEN
    P_RI_CNVS(:) = 0.
diff --git a/src/MNH/lima_nucleation_procs.f90 b/src/MNH/lima_nucleation_procs.f90
index 430099268..11fb8d6c5 100644
--- a/src/MNH/lima_nucleation_procs.f90
+++ b/src/MNH/lima_nucleation_procs.f90
@@ -90,7 +90,7 @@ 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
+                            NMOD_CCN, NMOD_IFN, NMOD_IMM, XCTMIN, XRTMIN, LSPRO, NMOM_I
 USE MODD_TURB_n,     ONLY : LSUBG_COND
 
 use mode_budget,     only: Budget_store_add, Budget_store_init, Budget_store_end
@@ -196,7 +196,7 @@ END IF
 !
 !-------------------------------------------------------------------------------
 !
-IF ( LCOLD .AND. LNUCL .AND. .NOT.LMEYERS .AND. NMOD_IFN >= 1 ) THEN
+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
@@ -260,14 +260,43 @@ END IF
 !
 !-------------------------------------------------------------------------------
 !
-IF (LCOLD .AND. LNUCL .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                                      )
+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
+      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. NMOM_I.EQ.1) THEN
   WHERE(PICEFR(:,:,:)<1.E-10 .AND. PRIT(:,:,:)>XRTMIN(4) .AND. PCIT(:,:,:)>XCTMIN(4)) PICEFR(:,:,:)=1.
   !
   ZTHS=PTHT/PTSTEP
diff --git a/src/MNH/lima_snow_deposition.f90 b/src/MNH/lima_snow_deposition.f90
index 7d923f1c9..0f864f4c6 100644
--- a/src/MNH/lima_snow_deposition.f90
+++ b/src/MNH/lima_snow_deposition.f90
@@ -68,7 +68,7 @@ SUBROUTINE LIMA_SNOW_DEPOSITION (LDCOMPUTE,                                &
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_PARAM_LIMA,      ONLY : XRTMIN, XCTMIN, XALPHAI, XALPHAS, XNUI, XNUS 
+USE MODD_PARAM_LIMA,      ONLY : XRTMIN, XCTMIN, XALPHAI, XALPHAS, XNUI, XNUS, NMOM_I
 USE MODD_PARAM_LIMA_COLD, ONLY : XCXS, XCCS, &
                                  XLBDAS_MAX, XDSCNVI_LIM, XLBDASCNVI_MAX,     &
                                  XC0DEPSI, XC1DEPSI, XR0DEPSI, XR1DEPSI,      &
@@ -113,51 +113,49 @@ P_CI_CNVI(:) = 0.
 P_TH_DEPS(:) = 0.
 P_RS_DEPS(:) = 0.
 !
-! Physical limitations
-!
-!
 ! Looking for regions where computations are necessary
-!
 GMICRO(:) = LDCOMPUTE(:) .AND. PRST(:)>XRTMIN(5)
 !
+IF (NMOM_I.EQ.1) THEN
+   WHERE( GMICRO )
 !
-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(:)**XNUS) * EXP(-ZZW(:))
-!!$!
-!!$      ZZW(:) = ( XR0DEPSI+XR1DEPSI*PCJ(:) )*ZZX(:)
-!!$!
-!!$      ZZW2(:) = ZZW(:)*( XC0DEPSI+XC1DEPSI*PCJ(:) )/( XR0DEPSI+XR1DEPSI*PCJ(:) )
-!!$   END WHERE
-!!$!
-!!$   P_RI_CNVI(:) = ZZW(:)
-!!$   P_CI_CNVI(:) = ZZW2(:)
+! Deposition of water vapor on r_s: RVDEPS
 !
-!
-!*       2.2    Deposition of water vapor on r_s: RVDEPS
-!        -----------------------------------------------
-!
-!
-   ZZW(:) = 0.0
-   WHERE ( (PRST(:)>XRTMIN(5)) )
-      ZZW(:) = ( PSSI(:)/(PAI(:)*PRHODREF(:)) ) * &
-           ( X0DEPS*PLBDS(:)**XEX0DEPS + X1DEPS*PCJ(:)*PLBDS(:)**XEX1DEPS )
-      ZZW(:) =    ZZW(:)*(0.5+SIGN(0.5,ZZW(:))) - ABS(ZZW(:))*(0.5-SIGN(0.5,ZZW(:)))
+      ZZW(:) = 0.0
+      WHERE ( (PRST(:)>XRTMIN(5)) )
+         ZZW(:) = ( PSSI(:)/(PAI(:)*PRHODREF(:)) ) * &
+              ( 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(:)
    END WHERE
-!
-   P_RS_DEPS(:) = ZZW(:)
-!!$   P_TH_DEPS(:) = P_RS_DEPS(:) * PLSFACT(:)
-! 
-END WHERE
-!
+ELSE
+   WHERE( GMICRO )
+!
+!  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(:)**XNUS) * EXP(-ZZW(:))
+         ZZW(:) = ( XR0DEPSI+XR1DEPSI*PCJ(:) )*ZZX(:)
+         ZZW2(:) = ZZW(:)*( XC0DEPSI+XC1DEPSI*PCJ(:) )/( XR0DEPSI+XR1DEPSI*PCJ(:) )
+      END WHERE
+      P_RI_CNVI(:) = ZZW(:)
+      P_CI_CNVI(:) = ZZW2(:)
+!
+! Deposition of water vapor on r_s: RVDEPS
+!
+      ZZW(:) = 0.0
+      WHERE ( (PRST(:)>XRTMIN(5)) )
+         ZZW(:) = ( PSSI(:)/(PAI(:)*PRHODREF(:)) ) * &
+              ( 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(:)
+   END WHERE
+END IF
 !
 END SUBROUTINE LIMA_SNOW_DEPOSITION
diff --git a/src/MNH/lima_tendencies.f90 b/src/MNH/lima_tendencies.f90
index 5a62b0345..312599929 100644
--- a/src/MNH/lima_tendencies.f90
+++ b/src/MNH/lima_tendencies.f90
@@ -239,7 +239,7 @@ 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,                                                    &
-                                  LCOLD, LNUCL, LSNOW, LHAIL, LWARM, LACTI, LRAIN
+                                  LCOLD, LNUCL, LSNOW, LHAIL, LWARM, LACTI, LRAIN, NMOM_I
 USE MODD_PARAM_LIMA_WARM,  ONLY : XLBC, XLBEXC, XLBR, XLBEXR
 USE MODD_PARAM_LIMA_MIXED, ONLY : XLBG, XLBEXG, XLBH, XLBEXH, XLBDAG_MAX
 USE MODD_PARAM_LIMA_COLD,  ONLY : XSCFAC, XLBI, XLBEXI, XLBS, XLBEXS, XLBDAS_MAX
@@ -619,11 +619,11 @@ IF (LCOLD .AND. LSNOW) THEN
    !
    ! Includes vapour deposition on snow, snow -> ice conversion
    !
-   CALL LIMA_SNOW_DEPOSITION (LDCOMPUTE,                             & ! depends on IF, PF
+   CALL LIMA_SNOW_DEPOSITION (LDCOMPUTE,                         & ! depends on IF, PF
                               PRHODREF, ZSSI, ZAI, ZCJ, ZLSFACT, &
-                              PRST/ZPF1D, ZLBDS,                     &
-                              P_RI_CNVI, P_CI_CNVI,                  &
-                              P_TH_DEPS, P_RS_DEPS                   )
+                              PRST/ZPF1D, ZLBDS,                 &
+                              P_RI_CNVI, P_CI_CNVI,              &
+                              P_TH_DEPS, P_RS_DEPS               )
    !
    P_RI_CNVI(:) = P_RI_CNVI(:) * ZPF1D(:)
    P_CI_CNVI(:) = P_CI_CNVI(:) * ZPF1D(:)
@@ -669,19 +669,18 @@ IF (LWARM .AND. LCOLD) THEN
    PA_TH(:) = PA_TH(:) + P_TH_DEPG(:)
 END IF
 !
-IF (LWARM .AND. LCOLD) THEN
-   CALL LIMA_BERGERON (LDCOMPUTE,                         & ! depends on CF, IF
-                       PRCT, PRIT, PCIT, ZLBDI,           &
-                       ZSSIW, ZAI, ZCJ, ZLVFACT, ZLSFACT, &
-                       P_TH_BERFI, P_RC_BERFI,            &
-                       PA_TH, PA_RC, PA_RI                )
+IF (LWARM .AND. LCOLD .AND. NMOM_I.EQ.1) THEN
+   CALL LIMA_BERGERON (LDCOMPUTE,                                 & ! depends on CF, IF
+                       PRCT/ZCF1D, PRIT/ZIF1D, PCIT/ZIF1D, ZLBDI, &
+                       ZSSIW, ZAI, ZCJ, ZLVFACT, ZLSFACT,         &
+                       P_TH_BERFI, P_RC_BERFI                     )
+   P_TH_BERFI(:) = P_TH_BERFI(:) * MIN(ZCF1D,ZIF1D)
+   P_RC_BERFI(:) = P_RC_BERFI(:) * MIN(ZCF1D,ZIF1D)
+!
+   PA_RC(:) = PA_RC(:) + P_RC_BERFI(:)
+   PA_RI(:) = PA_RI(:) - P_RC_BERFI(:)
+   PA_TH(:) = PA_TH(:) + P_TH_BERFI(:)
 END IF
-!P_TH_BERFI(:) = 0.
-!P_RC_BERFI(:) = 0.
-!
-PA_RC(:) = PA_RC(:) + P_RC_BERFI(:)
-PA_RI(:) = PA_RI(:) - P_RC_BERFI(:)
-PA_TH(:) = PA_TH(:) + P_TH_BERFI(:)
 !
 IF (LWARM .AND. LCOLD .AND. LSNOW) THEN
      !
diff --git a/src/MNH/modd_param_lima.f90 b/src/MNH/modd_param_lima.f90
index 66156a056..02aa28088 100644
--- a/src/MNH/modd_param_lima.f90
+++ b/src/MNH/modd_param_lima.f90
@@ -62,6 +62,7 @@ LOGICAL, SAVE :: LMEYERS                ! TRUE to use Meyers nucleation
 ! 1.2 IFN initialisation
 !
 INTEGER, SAVE          :: NMOD_IFN               ! Number of IFN modes
+INTEGER, SAVE          :: NMOM_I                 ! Number of moments for pristine ice
 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
diff --git a/src/MNH/modn_param_lima.f90 b/src/MNH/modn_param_lima.f90
index f86b1add0..9fd76de57 100644
--- a/src/MNH/modn_param_lima.f90
+++ b/src/MNH/modn_param_lima.f90
@@ -18,7 +18,7 @@ IMPLICIT NONE
 !
 !
 NAMELIST/NAM_PARAM_LIMA/LCOLD, LNUCL, LSEDI, LSNOW, LHAIL, LHHONI, LMEYERS,&
-                        NMOD_IFN, XIFN_CONC, LIFN_HOM,                     &
+                        NMOD_IFN, NMOM_I, XIFN_CONC, LIFN_HOM,             &
                         CIFN_SPECIES, CINT_MIXING, NMOD_IMM, NIND_SPECIE,  &
                         CPRISTINE_ICE_LIMA, CHEVRIMED_ICE_LIMA,            &
                         XALPHAI, XNUI, XALPHAS, XNUS, XALPHAG, XNUG,       &
diff --git a/src/MNH/resolved_cloud.f90 b/src/MNH/resolved_cloud.f90
index 30616e6c5..04ab0ad62 100644
--- a/src/MNH/resolved_cloud.f90
+++ b/src/MNH/resolved_cloud.f90
@@ -981,7 +981,7 @@ SELECT CASE ( HCLOUD )
                      PDTHRAD, PW_ACT,                                                &
                      PRT, PRS, PSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END),                &
                      PSVS(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END),                          &
-                     PTHS, PSRCS, PCLDFR, PRC_MF, PCF_MF                             )
+                     PTHS, PSRCS, PCLDFR, PRC_MF, PRI_MF, PCF_MF                     )
    ELSE
     CALL LIMA_ADJUST(KRR, KMI, TPFILE,                                &
                      OSUBG_COND, PTSTEP,                              &
-- 
GitLab