From 95f7468a7513084c1b1869aee5d8d9b38d205fc1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Beno=C3=AEt=20Vi=C3=A9?= <benoit.vie@meteo.fr>
Date: Tue, 16 Aug 2022 16:58:37 +0200
Subject: [PATCH] LIMA2M compilation OK

---
 src/MNH/ini_budget.f90                   | 167 ++++++++++-
 src/MNH/ini_lima.f90                     |   6 +-
 src/MNH/ini_lima_cold_mixed.f90          | 301 ++++++++++++++++---
 src/MNH/ini_lima_warm.f90                |   1 +
 src/MNH/lima.f90                         | 367 ++++++++++++++++-------
 src/MNH/lima_cold_sedimentation.f90      | 215 ++++++++++---
 src/MNH/lima_cold_slow_processes.f90     | 217 ++++++++++----
 src/MNH/lima_collisional_ice_breakup.f90 |  71 +++--
 src/MNH/lima_conversion_melting_snow.f90 |  20 +-
 src/MNH/lima_droplets_riming_snow.f90    |  77 ++---
 src/MNH/lima_graupel.f90                 | 172 ++++++++---
 src/MNH/lima_graupel_deposition.f90      |  27 +-
 src/MNH/lima_ice_aggregation_snow.f90    |  27 +-
 src/MNH/lima_mixed.f90                   | 157 ++++++++--
 src/MNH/lima_mixed_slow_processes.f90    | 139 ++++++---
 src/MNH/lima_rain_accr_snow.f90          | 157 ++++++++--
 src/MNH/lima_sedimentation.f90           |   7 +-
 src/MNH/lima_snow_deposition.f90         |  22 +-
 src/MNH/lima_tendencies.f90              | 336 ++++++++++++++-------
 src/MNH/modd_param_lima_cold.f90         |  24 +-
 src/MNH/modd_param_lima_mixed.f90        |  40 ++-
 src/MNH/modd_param_lima_warm.f90         |   2 +-
 src/MNH/radar_rain_ice.f90               | 102 +++++--
 src/MNH/sources_neg_correct.f90          | 165 ++++++----
 src/MNH/update_nsv.f90                   |   3 +
 src/MNH/write_lfifm1_for_diag.f90        |  56 ++--
 src/MNH/write_lfin.f90                   |  20 +-
 27 files changed, 2167 insertions(+), 731 deletions(-)

diff --git a/src/MNH/ini_budget.f90 b/src/MNH/ini_budget.f90
index 91461134c..e608329df 100644
--- a/src/MNH/ini_budget.f90
+++ b/src/MNH/ini_budget.f90
@@ -209,6 +209,7 @@ end subroutine Budget_preallocate
 !  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
@@ -238,6 +239,7 @@ use modd_nsv,           only: csvnames,
                               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_scavmass, nsv_lima_spro,             &
+                              nsv_lima_ns, nsv_lima_ng, nsv_lima_nh,                                               &
                               nsv_lnoxbeg, nsv_lnoxend, nsv_ppbeg, nsv_ppend,                                      &
                               nsv_sltbeg, nsv_sltend, nsv_sltdepbeg, nsv_sltdepend, nsv_snwbeg, nsv_snwend,        &
                               nsv_user
@@ -249,8 +251,8 @@ use modd_param_lima,   only: laero_mass_lima => laero_mass, lacti_lima => lacti,
                              lhail_lima => lhail, lhhoni_lima => lhhoni, lmeyers_lima => lmeyers, lnucl_lima => lnucl,       &
                              lptsplit,                                                                                       &
                              lrain_lima => lrain, lscav_lima => lscav, lsedc_lima => lsedc, lsedi_lima => lsedi,             &
-                             lsnow_lima => lsnow, lspro_lima => lspro,  lwarm_lima => lwarm, lcibu, lrdsf, nmom_i,           &
-                             nmod_ccn, nmod_ifn, nmod_imm
+                             lsnow_lima => lsnow, lspro_lima => lspro,  lwarm_lima => lwarm, 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
@@ -1161,6 +1163,12 @@ if ( lbu_rth ) then
                         .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. lhail_lima ) ) &
+                        .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. ( lcold_lima .and. lwarm_lima ) ) ) .or. hcloud(1:3) == 'ICE'
@@ -1539,6 +1547,12 @@ if ( tbudgets(NBUDGET_RV)%lenabled ) then
                         .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. lhail_lima )  &
+                        .or. hcloud == 'ICE4' )
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
   tzsource%cmnhname   = 'CEDS'
   tzsource%clongname  = 'adjustment to saturation'
   tzsource%lavailable = hcloud == 'LIMA'
@@ -2836,6 +2850,12 @@ if ( tbudgets(NBUDGET_RH)%lenabled ) then
                         .or.   hcloud == 'ICE4'
   call Budget_source_add( tbudgets(NBUDGET_RH), tzsource )
 
+  tzsource%cmnhname   = 'DEPH'
+  tzsource%clongname  = 'deposition on hail'
+  tzsource%lavailable =      ( hcloud == 'LIMA' .and. lhail_lima ) 
+  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'
@@ -3237,7 +3257,7 @@ SV_BUDGETS: do jsv = 1, ksv
 
         tzsource%cmnhname   = 'WETH'
         tzsource%clongname  = 'wet growth of hail'
-        tzsource%lavailable = .not.lptsplit .and. lhail_lima .and. lcold_lima .and. lwarm_lima  .and. lsnow_lima
+        tzsource%lavailable = lptsplit .or. lhail_lima
         call Budget_source_add( tbudgets(ibudget), tzsource )
 
         tzsource%cmnhname   = 'CORR2'
@@ -3325,12 +3345,12 @@ SV_BUDGETS: do jsv = 1, ksv
 
         tzsource%cmnhname   = 'WETH'
         tzsource%clongname  = 'wet growth of hail'
-        tzsource%lavailable = .not.lptsplit .and. lhail_lima .and. lcold_lima .and. lwarm_lima  .and. lsnow_lima
+        tzsource%lavailable = lptsplit .or. lhail_lima
         call Budget_source_add( tbudgets(ibudget), tzsource )
 
         tzsource%cmnhname   = 'HMLT'
         tzsource%clongname  = 'melting of hail'
-        tzsource%lavailable = .not.lptsplit .and. lhail_lima .and. lcold_lima .and. lwarm_lima  .and. lsnow_lima
+        tzsource%lavailable = lptsplit .or. lhail_lima
         call Budget_source_add( tbudgets(ibudget), tzsource )
 
         tzsource%cmnhname   = 'CORR2'
@@ -3482,7 +3502,7 @@ SV_BUDGETS: do jsv = 1, ksv
 
         tzsource%cmnhname   = 'WETH'
         tzsource%clongname  = 'wet growth of hail'
-        tzsource%lavailable = .not.lptsplit .and. lhail_lima .and. lcold_lima .and. lwarm_lima  .and. lsnow_lima
+        tzsource%lavailable = lptsplit .or. lhail_lima
         call Budget_source_add( tbudgets(ibudget), tzsource )
 
         tzsource%cmnhname   = 'CEDS'
@@ -3495,7 +3515,142 @@ SV_BUDGETS: do jsv = 1, ksv
         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 = lcold_lima .or. ( lcold_lima .and. lsnow_lima )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CNVI'
+        tzsource%clongname  = 'conversion of snow to cloud ice'
+        tzsource%lavailable = lptsplit .or. ( lcold_lima .and. lsnow_lima )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CNVS'
+        tzsource%clongname  = 'conversion of pristine ice to snow'
+        tzsource%lavailable = lptsplit .or. ( lcold_lima .and. lsnow_lima )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'BRKU'
+        tzsource%clongname  = 'break up of snow'
+        tzsource%lavailable = lptsplit .or. ( lcold_lima .and. lsnow_lima )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'RIM'
+        tzsource%clongname  = 'heavy riming of cloud droplet on snow'
+        tzsource%lavailable = lptsplit .or. ( lcold_lima .and. lwarm_lima .and. lsnow_lima )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'ACC'
+        tzsource%clongname  = 'accretion of rain on snow'
+        tzsource%lavailable = lptsplit .or. ( lcold_lima .and. lwarm_lima  .and. lsnow_lima )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CMEL'
+        tzsource%clongname  = 'conversion melting of snow'
+        tzsource%lavailable = lptsplit .or. ( lcold_lima .and. lwarm_lima  .and. lsnow_lima )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'WETG'
+        tzsource%clongname  = 'wet growth of graupel'
+        tzsource%lavailable = lptsplit .or. ( lcold_lima .and. lwarm_lima  .and. lsnow_lima )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'DRYG'
+        tzsource%clongname  = 'dry growth of graupel'
+        tzsource%lavailable = lptsplit .or. ( lcold_lima .and. lwarm_lima  .and. lsnow_lima )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'WETH'
+        tzsource%clongname  = 'wet growth of hail'
+        tzsource%lavailable = lptsplit .or. lhail_lima
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'SSC'
+        tzsource%clongname  = 'snow self collection'
+        tzsource%lavailable = lptsplit  .or. ( lcold_lima .and. lsnow_lima )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+        
+        tzsource%cmnhname   = 'CEDS'
+        tzsource%clongname  = 'adjustment to saturation'
+        tzsource%lavailable = lcold_lima .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 = lcold_lima .or. ( lcold_lima .and. lsnow_lima )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'RIM'
+        tzsource%clongname  = 'heavy riming of cloud droplet on snow'
+        tzsource%lavailable = lptsplit .or. ( lcold_lima .and. lwarm_lima .and. lsnow_lima )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'ACC'
+        tzsource%clongname  = 'accretion of rain on snow'
+        tzsource%lavailable = lptsplit .or. ( lcold_lima .and. lwarm_lima  .and. lsnow_lima )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
 
+        tzsource%cmnhname   = 'CMEL'
+        tzsource%clongname  = 'conversion melting of snow'
+        tzsource%lavailable = lptsplit .or. ( lcold_lima .and. lwarm_lima  .and. lsnow_lima )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'CFRZ'
+        tzsource%clongname  = 'conversion freezing of raindrop'
+        tzsource%lavailable = lptsplit .or. ( lcold_lima .and. lwarm_lima  .and. lsnow_lima )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'WETG'
+        tzsource%clongname  = 'wet growth of graupel'
+        tzsource%lavailable = lptsplit .or. ( lcold_lima .and. lwarm_lima  .and. lsnow_lima )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'GMLT'
+        tzsource%clongname  = 'graupel melting'
+        tzsource%lavailable = lptsplit .or. ( lcold_lima .and. lwarm_lima  .and. lsnow_lima )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'WETH'
+        tzsource%clongname  = 'wet growth of hail'
+        tzsource%lavailable = lptsplit .or. lhail_lima
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'COHG'
+        tzsource%clongname  = 'conversion hail graupel'
+        tzsource%lavailable = lptsplit .or. lhail_lima
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+        
+        tzsource%cmnhname   = 'CEDS'
+        tzsource%clongname  = 'adjustment to saturation'
+        tzsource%lavailable = lcold_lima .and. .not.lptsplit .and. .not.lspro_lima
+        call Budget_source_add( tbudgets(ibudget), tzsource )   
+
+      else if ( jsv == nsv_lima_nh .and. lhail_lima) then SV_LIMA
+
+        tzsource%cmnhname   = 'SEDI'
+        tzsource%clongname  = 'sedimentation'
+        tzsource%lavailable = lcold_lima .or. ( lcold_lima .and. lsnow_lima .and. lhail_lima )
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'WETG'
+        tzsource%clongname  = 'wet growth of graupel'
+        tzsource%lavailable = lptsplit .or. lhail_lima
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'COHG'
+        tzsource%clongname  = 'conversion hail graupel'
+        tzsource%lavailable = lptsplit .or. lhail_lima
+        call Budget_source_add( tbudgets(ibudget), tzsource )
+
+        tzsource%cmnhname   = 'HMLT'
+        tzsource%clongname  = 'hail melting'
+        tzsource%lavailable = lptsplit .or. lhail_lima
+        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'
diff --git a/src/MNH/ini_lima.f90 b/src/MNH/ini_lima.f90
index d90f1e160..54c784e64 100644
--- a/src/MNH/ini_lima.f90
+++ b/src/MNH/ini_lima.f90
@@ -148,9 +148,9 @@ XCTMIN(1) = 1.0       ! Not used
 XCTMIN(2) = 1.0E-3    ! Nc
 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
+XCTMIN(5) = 1.0E-3    ! Ns
+XCTMIN(6) = 1.0E-3    ! Ng
+XCTMIN(7) = 1.0E-3    ! Nh
 !
 !
 ! Air density fall speed correction
diff --git a/src/MNH/ini_lima_cold_mixed.f90 b/src/MNH/ini_lima_cold_mixed.f90
index 0807d5512..61568b5a3 100644
--- a/src/MNH/ini_lima_cold_mixed.f90
+++ b/src/MNH/ini_lima_cold_mixed.f90
@@ -43,6 +43,7 @@ END MODULE MODI_INI_LIMA_COLD_MIXED
 !  P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function
 !  C. Barthe   14/03/2022: add CIBU and RDSF
 !  J. Wurtz       03/2022: new snow characteristics
+!  M. Taufour     07/2022: add concentration for snow, graupel, hail
 !
 !-------------------------------------------------------------------------------
 !
@@ -65,8 +66,11 @@ USE MODI_LIMA_FUNCTIONS
 USE MODI_GAMMA
 USE MODI_GAMMA_INC
 USE MODI_RRCOLSS
+USE MODI_NRCOLSS
 USE MODI_RZCOLX
+USE MODI_NZCOLX
 USE MODI_RSCOLRG
+USE MODI_NSCOLRG
 USE MODI_LIMA_READ_XKER_RACCS
 USE MODI_LIMA_READ_XKER_SDRYG
 USE MODI_LIMA_READ_XKER_RDRYG
@@ -100,7 +104,7 @@ REAL :: ZBOUND                ! XDCSLIM*Lbda_s: upper bound for the partial
 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 :: ZESR, ZESS            ! Mean efficiency of rain-aggregate collection, aggregate-aggregate collection
 REAL :: ZFDINFTY              ! Factor used to define the "infinite" diameter
 !
 !
@@ -270,14 +274,24 @@ IF (LSNOW_T) THEN
    XNUS    = 43.7   ! Generalized gamma law
    XTRANS_MP_GAMMAS = SQRT( ( GAMMA(XNUS + 2./XALPHAS)*GAMMA(XNUS + 4./XALPHAS) ) / &
                             ( 8.* GAMMA(XNUS + 1./XALPHAS)*GAMMA(XNUS + 3./XALPHAS) ) )
+ELSE IF (NMOM_S.EQ.2) THEN
+   XALPHAS = 1.0  ! Gamma law 
+   XNUS    = 2.0  !
+   XTRANS_MP_GAMMAS = SQRT( ( GAMMA(XNUS + 2./XALPHAS)*GAMMA(XNUS + 4./XALPHAS) ) / &
+                            ( 8.* GAMMA(XNUS + 1./XALPHAS)*GAMMA(XNUS + 3./XALPHAS) ) )
 ELSE
    XALPHAS = 1.0  ! Exponential law
    XNUS    = 1.0  ! Exponential law
    XTRANS_MP_GAMMAS = 1.
 END IF
 !
-XALPHAG = 1.0  ! Exponential law
-XNUG    = 1.0  ! Exponential law
+if (NMOM_G.GE.2) then
+   XALPHAG = 1.0  ! 
+   XNUG    = 2.0  !
+else
+   XALPHAG = 1.0  ! Exponential law
+   XNUG    = 1.0  ! Exponential law
+end if
 !
 XALPHAH = 1.0  ! Gamma law
 XNUH    = 8.0  ! Gamma law with little dispersion
@@ -287,8 +301,8 @@ XNUH    = 8.0  ! Gamma law with little dispersion
 XLBEXI = 1.0/XBI
 XLBI   = XAI*MOMG(XALPHAI,XNUI,XBI)
 !
+XNS = 1.0/(XAS*MOMG(XALPHAS,XNUS,XBS))
 IF (NMOM_S.EQ.1) THEN
-   XNS = 1.0/(XAS*MOMG(XALPHAS,XNUS,XBS))
    XLBEXS = 1.0/(XCXS-XBS)
    XLBS   = ( XAS*XCCS*MOMG(XALPHAS,XNUS,XBS) )**(-XLBEXS)
 ELSE
@@ -296,6 +310,7 @@ ELSE
    XLBS   = XAS * MOMG(XALPHAS,XNUS,XBS)
 END IF
 !
+XNG = 1.0/(XAG*MOMG(XALPHAG,XNUG,XBG))
 IF (NMOM_G.EQ.1) THEN
    XLBEXG = 1.0/(XCXG-XBG)
    XLBG   = ( XAG*XCCG*MOMG(XALPHAG,XNUG,XBG))**(-XLBEXG)
@@ -390,6 +405,26 @@ XFSEDG  = XCG*XAG*XCCG*MOMG(XALPHAG,XNUG,XBG+XDG)*                         &
 XEXSEDH = (XBH+XDH-XCXH)/(XBH-XCXH)
 XFSEDH  = XCH*XAH*XCCH*MOMG(XALPHAH,XNUH,XBH+XDH)*                         &
             (XAH*XCCH*MOMG(XALPHAH,XNUH,XBH))**(-XEXSEDH)*(ZRHO00)**XCEXVT
+IF (NMOM_S.GE.2) THEN
+  XFSEDRS  = XCS*GAMMA_X0D(XNUS+(XDS+XBS)/XALPHAS)/GAMMA_X0D(XNUS+XBS/XALPHAS)*  &   
+            (ZRHO00)**XCEXVT                                                       
+  XFSEDCS  = XCS*GAMMA_X0D(XNUS+XDS/XALPHAS)/GAMMA_X0D(XNUS)*                     & 
+            (ZRHO00)**XCEXVT
+END IF
+IF (NMOM_G.GE.2) THEN
+  XFSEDRG  = XCG*GAMMA_X0D(XNUG+(XDG+XBG)/XALPHAG)/GAMMA_X0D(XNUG+XBG/XALPHAG)*  &  
+               (ZRHO00)**XCEXVT                                                      
+  XFSEDCG  = XCG*GAMMA_X0D(XNUG+XDG/XALPHAG)/GAMMA_X0D(XNUG)*                     & 
+               (ZRHO00)**XCEXVT 
+END IF
+IF (NMOM_H.GE.2) THEN
+  XFSEDRH  = XCH*GAMMA_X0D(XNUH+(XDH+XBH)/XALPHAH)/GAMMA_X0D(XNUH+XBH/XALPHAH)*  &  
+            (ZRHO00)**XCEXVT                                                        
+  XFSEDCH  = XCH*GAMMA_X0D(XNUH+XDH/XALPHAH)/GAMMA_X0D(XNUH)*                     & 
+            (ZRHO00)**XCEXVT
+END IF
+!
+!
 !
 XLB(4)    = XLBI
 XLBEX(4)  = XLBEXI
@@ -402,18 +437,24 @@ XLBEX(5)  = XLBEXS
 XD(5)     = XDS
 XFSEDR(5) = XCS*GAMMA_X0D(XNUS+(XDS+XBS)/XALPHAS)/GAMMA_X0D(XNUS+XBS/XALPHAS)*     &
             (ZRHO00)**XCEXVT
+XFSEDC(5) = XCS*GAMMA_X0D(XNUS+XDS/XALPHAS)/GAMMA_X0D(XNUS)*                     & 
+            (ZRHO00)**XCEXVT
 !
 XLB(6)    = XLBG
 XLBEX(6)  = XLBEXG
 XD(6)     = XDG
 XFSEDR(6) = XCG*GAMMA_X0D(XNUG+(XDG+XBG)/XALPHAG)/GAMMA_X0D(XNUG+XBG/XALPHAG)*     &
             (ZRHO00)**XCEXVT
+XFSEDC(6) = XCG*GAMMA_X0D(XNUG+XDG/XALPHAG)/GAMMA_X0D(XNUG)*                     & 
+            (ZRHO00)**XCEXVT
 !
 XLB(7)    = XLBH
 XLBEX(7)  = XLBEXH
 XD(7)     = XDH
 XFSEDR(7) = XCH*GAMMA_X0D(XNUH+(XDH+XBH)/XALPHAH)/GAMMA_X0D(XNUH+XBH/XALPHAH)*     &
             (ZRHO00)**XCEXVT
+XFSEDC(7) = XCH*GAMMA_X0D(XNUH+XDH/XALPHAH)/GAMMA_X0D(XNUH)*                     & 
+            (ZRHO00)**XCEXVT
 !
 !-------------------------------------------------------------------------------
 !
@@ -652,21 +693,21 @@ XR1DEPSI = XC1DEPSI *(XAS*XDSCNVI_LIM**XBS)
 !
 ! Vapor deposition on snow and graupel and hail
 !
-X0DEPS = XNS*(4.0*XPI)*XC1S*XF0S*MOMG(XALPHAS,XNUS,1.)
-X1DEPS = XNS*(4.0*XPI)*XC1S*XF1S*SQRT(XCS)*MOMG(XALPHAS,XNUS,0.5*XDS+1.5)
-XEX0DEPS = XBS-1.0
+X0DEPS = (4.0*XPI)*XC1S*XF0S*MOMG(XALPHAS,XNUS,1.)
+X1DEPS = (4.0*XPI)*XC1S*XF1S*SQRT(XCS)*MOMG(XALPHAS,XNUS,0.5*XDS+1.5)
+XEX0DEPS = -1.0
 XEX1DEPS = -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)
+X0DEPG = (4.0*XPI)*XC1G*XF0G*MOMG(XALPHAG,XNUG,1.)  
+X1DEPG = (4.0*XPI)*XC1G*XF1G*SQRT(XCG)*MOMG(XALPHAG,XNUG,0.5*XDG+1.5) 
+XEX0DEPG = -1.0                                                       
+XEX1DEPG = -0.5*(XDG+3.0)
+!
+X0DEPH = (4.0*XPI)*XC1H*XF0H*MOMG(XALPHAH,XNUH,1.)   
+X1DEPH = (4.0*XPI)*XC1H*XF1H*SQRT(XCH)*MOMG(XALPHAH,XNUH,0.5*XDH+1.5) 
+XEX0DEPH = -1.0                                                        
+XEX1DEPH = -0.5*(XDH+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)
-!  
 !-------------------------------------------------------------------------------
 !
 !
@@ -749,18 +790,18 @@ END IF
 !
 XDCSLIM  = 0.007 ! D_cs^lim = 7 mm as suggested by Farley et al. (1989)
 XCOLCS   = 1.0
-XEXCRIMSS = -XDS-2.0
-XCRIMSS  = XNS * (XPI/4.0)*XCOLCS*XCS*(ZRHO00**XCEXVT)*MOMG(XALPHAS,XNUS,XDS+2.0)
+XEXCRIMSS= -XDS-2.0
+XCRIMSS  = (XPI/4.0)*XCOLCS*XCS*(ZRHO00**XCEXVT)*MOMG(XALPHAS,XNUS,XDS+2.0)
 
 XEXCRIMSG= XEXCRIMSS
 XCRIMSG  = XCRIMSS
-XSRIMCG  = XNS*XAS*MOMG(XALPHAS,XNUS,XBS)
+XSRIMCG  = XAS*MOMG(XALPHAS,XNUS,XBS)
 XEXSRIMCG= -XBS
 !
 !Pour Murakami 1990
-XSRIMCG2 = XNS*XAG*MOMG(XALPHAS,XNUS,XBG)
+XSRIMCG2 = XAG*MOMG(XALPHAS,XNUS,XBG)
 XSRIMCG3 = 0.1
-XEXSRIMCG2=XBS-XBG
+XEXSRIMCG2=XBG
 GFLAG = .TRUE.
 IF (GFLAG) THEN
   WRITE(UNIT=ILUOUT0,FMT='("      riming of the aggregates")')
@@ -819,17 +860,25 @@ 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 = XNS*XPI/4.0*XAR*(ZRHO00**XCEXVT)
+XFRACCSS  = XPI/4.0*XAR*(ZRHO00**XCEXVT)
+XFNRACCSS = XPI/4.0*(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.)
+XLBNRACCS1  =    MOMG(XALPHAS,XNUS,2.)                             
+XLBNRACCS2  = 2.*MOMG(XALPHAS,XNUS,1.)*MOMG(XALPHAR,XNUR,1.)       
+XLBNRACCS3  =                          MOMG(XALPHAR,XNUR,2.)
 !
-XFSACCRG = XNS*(XPI/4.0)*XAS*(ZRHO00**XCEXVT)
+XFSACCRG  = (XPI/4.0)*XAS*(ZRHO00**XCEXVT)
+XFNSACCRG = (XPI/4.0)*(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.)
+XLBNSACCR1  =    MOMG(XALPHAR,XNUR,2.)                             
+XLBNSACCR2  = 2.*MOMG(XALPHAR,XNUR,1.)*MOMG(XALPHAS,XNUS,1.)      
+XLBNSACCR3  =                          MOMG(XALPHAS,XNUS,2.)
 !
 !*       7.2.1  Defining the ranges for the computation of the kernels
 !
@@ -858,6 +907,49 @@ 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) )
+ALLOCATE( XKER_N_RACCSS(NACCLBDAS,NACCLBDAR) )
+ALLOCATE( XKER_N_RACCS (NACCLBDAS,NACCLBDAR) )
+ALLOCATE( XKER_N_SACCRG(NACCLBDAR,NACCLBDAS) )
+CALL NRCOLSS ( IND, XALPHAS, XNUS, XALPHAR, XNUR,                        & 
+               ZESR, XCS, XDS, XFVELOS, XCR, XDR,                        & 
+               XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, & 
+               ZFDINFTY, XKER_N_RACCSS, XAG, XBS, XAS                      )
+CALL NZCOLX  ( IND, XALPHAS, XNUS, XALPHAR, XNUR,                          & 
+               ZESR, XCS, XDS, XFVELOS, XCR, XDR, 0.,                      & ! 
+               XACCLBDAS_MAX, XACCLBDAR_MAX, XACCLBDAS_MIN, XACCLBDAR_MIN, & 
+               ZFDINFTY, XKER_N_RACCS                                      )
+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='("!")') 
+
 !
 CALL LIMA_READ_XKER_RACCS (KACCLBDAS,KACCLBDAR,KND,                                        &
                            PALPHAS,PNUS,PALPHAR,PNUR,PESR,PBS,PBR,PCS,PDS,PFVELOS,PCR,PDR, &
@@ -950,6 +1042,75 @@ IF( (KACCLBDAS/=NACCLBDAS) .OR. (KACCLBDAR/=NACCLBDAR) .OR. (KND/=IND) .OR. &
   WRITE(UNIT=ILUOUT0,FMT='(" Read XKER_SACCRG")')
 END IF
 !
+!*       7.2N  Computations of the tabulated normalized kernels Snow Self Collection !! 
+!
+!
+if (NMOM_S.GE.2) then
+  XCOLSS   = 0.1 ! Collection efficiency of S+S
+  XCOLEXSS = 0.1  ! Temperature factor of the S+S collection efficiency
+  XFNSSCS = (XPI/4.0)*XCOLSS*(ZRHO00**XCEXVT)/2.0       
+!
+  XLBNSSCS1   = 2.0*MOMG(XALPHAS,XNUS,2.)                        
+  XLBNSSCS2   = 2.0*MOMG(XALPHAS,XNUS,1.)**2  
+!
+!*       7.2N.1  Defining the ranges for the computation of the kernels
+!
+! Notice: One magnitude of lambda discretized over 10 points for snow
+!
+NSCLBDAS = 80
+XSCLBDAS_MIN = 1.0E0*XTRANS_MP_GAMMAS  ! Minimal value of Lbda_s to tabulate XKER_RSCS
+XSCLBDAS_MAX = 5.0E10*XTRANS_MP_GAMMAS ! Maximal value of Lbda_s to tabulate XKER_RSCS
+ZRATE = LOG(XSCLBDAS_MAX/XSCLBDAS_MIN)/FLOAT(NSCLBDAS-1)
+XSCINTP1S = 1.0 / ZRATE
+XSCINTP2S = 1.0 - LOG( XSCLBDAS_MIN ) / ZRATE
+!
+!
+  IND      = 50    ! Interval number, collection efficiency and infinite diameter
+  ZESS     = 1.0   ! factor used to integrate the dimensional distributions when
+  ZFDINFTY = 20.0  ! computing the kernels XKER_SSCSS
+!
+  ALLOCATE( XKER_N_SSCS(NSCLBDAS,NSCLBDAS) )
+!
+  CALL NZCOLX  ( IND, XALPHAS, XNUS, XALPHAS, XNUS,                          & 
+               ZESS, XCS, XDS, XFVELOS, XCS, XDS, XFVELOS,                   & 
+               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='("!")')  
+!
+!*       7.2N2    Constants for the 'spontaneous' break-up
+!
+  XACCS1=MOMG(XALPHAS,XNUS,XBS)
+  XSPONBUDS1 = 2.5E-3
+  XSPONBUDS2 = 3.5E-3
+  XSPONBUDS3 = 4.5E-3
+  XSPONCOEFS2 = ((XSPONBUDS3/XSPONBUDS2)**3 - 1.0)/(XSPONBUDS3-XSPONBUDS1)**2
+!
+end if
 !
 !*       7.3    Constant for the conversion-melting rate
 !
@@ -1017,13 +1178,13 @@ XCIBUINTP_G = XALPHAG / LOG(ZRATE_G)
 XCIBUINTP1_G = 1.0 + XCIBUINTP_G * LOG(XDCGLIM_CIBU_MIN/(XGAMINC_BOUND_CIBU_GMIN)**(1.0/XALPHAG))
 !
 ! For ZNI_CIBU
-XFACTOR_CIBU_NI = XNS * (XPI / 4.0) * XCCG  * (ZRHO00**XCEXVT)
+XFACTOR_CIBU_NI = (XPI / 4.0) * (ZRHO00**XCEXVT)
 XMOMGG_CIBU_1 = MOMG(XALPHAG,XNUG,2.0+XDG)
 XMOMGG_CIBU_2 = MOMG(XALPHAG,XNUG,2.0)
 XMOMGS_CIBU_1 = MOMG(XALPHAS,XNUS,XDS)
 !
 ! For ZRI_CIBU
-XFACTOR_CIBU_RI = XNS * XAS * (XPI / 4.0) * XCCG  * (ZRHO00**XCEXVT)
+XFACTOR_CIBU_RI = XAS * (XPI / 4.0) * (ZRHO00**XCEXVT)
 XMOMGS_CIBU_2 = MOMG(XALPHAS,XNUS,XBS)
 XMOMGS_CIBU_3 = MOMG(XALPHAS,XNUS,XBS+XDS)
 !
@@ -1095,7 +1256,7 @@ END IF
 !               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)
+XFCDRYG = (XPI/4.0)*XCOLCG*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)
@@ -1108,7 +1269,7 @@ 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
-XFIDRYG = (XPI/4.0)*XCOLIG*XCCG*XCG*(ZRHO00**XCEXVT)*MOMG(XALPHAG,XNUG,XDG+2.0)
+XFIDRYG = (XPI/4.0)*XCOLIG*XCG*(ZRHO00**XCEXVT)*MOMG(XALPHAG,XNUG,XDG+2.0)
 !
 GFLAG = .TRUE.
 IF (GFLAG) THEN
@@ -1125,8 +1286,12 @@ 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
-XFSDRYG = XNS*(XPI/4.0)*XCOLSG*XCCG*XAS*(ZRHO00**XCEXVT)
+XFSDRYG = XNS*(XPI/4.0)*XCOLSG*XAS*(ZRHO00**XCEXVT)
+XFNSDRYG = XNS*(XPI/4.0)*XCOLSG*XAS*(ZRHO00**XCEXVT)
 !
+XLBNSDRYG1  =    MOMG(XALPHAG,XNUG,2.)                        
+XLBNSDRYG2  = 2.*MOMG(XALPHAG,XNUG,1.)*MOMG(XALPHAS,XNUS,1.) 
+XLBNSDRYG3  =                          MOMG(XALPHAS,XNUS,2.)
 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.)
@@ -1140,11 +1305,15 @@ END IF
 !
 !*       8.2.4  Constants for the raindrop collection by the graupeln
 !
-XFRDRYG = ((XPI**2)/24.0)*XCCG*XRHOLW*(ZRHO00**XCEXVT)
+XFRDRYG = XNR*(XPI/4.0)*XAR*(ZRHO00**XCEXVT)
+XFNRDRYG= XNR*(XPI/4.0)*XAR*(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.)
+XLBNRDRYG1   =    MOMG(XALPHAG,XNUG,2.)                      
+XLBNRDRYG2   = 2.*MOMG(XALPHAG,XNUG,1.)*MOMG(XALPHAR,XNUR,1.) 
+XLBNRDRYG3   =                          MOMG(XALPHAR,XNUR,2.)
 !
 ! Notice: One magnitude of lambda discretized over 10 points
 !
@@ -1174,6 +1343,22 @@ ZEGS     = 1.0   ! factor used to integrate the dimensional distributions when
 ZFDINFTY = 20.0  ! computing the kernels XKER_SDRYG
 !
 ALLOCATE( XKER_SDRYG(NDRYLBDAG,NDRYLBDAS) )
+if (NMOM_S.GE.2) then
+  ALLOCATE( XKER_N_SDRYG(NDRYLBDAG,NDRYLBDAS) )
+  CALL NZCOLX  ( IND, XALPHAG, XNUG, XALPHAS, XNUS,                         & 
+              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='("!")') 
+end if
 !
 CALL LIMA_READ_XKER_SDRYG (KDRYLBDAG,KDRYLBDAS,KND,                                    &
                            PALPHAG,PNUG,PALPHAS,PNUS,PEGS,PBS,PCG,PDG,PCS,PDS,PFVELOS, &
@@ -1241,6 +1426,22 @@ ZEGR     = 1.0   ! distributions when computing the kernel XKER_RDRYG
 ZFDINFTY = 20.0
 !
 ALLOCATE( XKER_RDRYG(NDRYLBDAG,NDRYLBDAR) )
+if ( NMOM_R.GE.2 ) then
+  ALLOCATE( XKER_N_RDRYG(NDRYLBDAG,NDRYLBDAR) ) 
+  CALL NZCOLX  ( IND, XALPHAS, XNUS, XALPHAR, XNUR,                          & 
+               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='("!")') 
+end if
 !
 CALL LIMA_READ_XKER_RDRYG (KDRYLBDAG,KDRYLBDAR,KND,                                 &
                            PALPHAG,PNUG,PALPHAR,PNUR,PEGR,PBR,PCG,PDG,PCR,PDR,      &
@@ -1255,7 +1456,7 @@ IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAR/=NDRYLBDAR) .OR. (KND/=IND) .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.,                             &
+                ZEGR, XBR, XCG, XDG, 0., XCR, XDR, 0.,                      &
                 XDRYLBDAG_MAX, XDRYLBDAR_MAX, XDRYLBDAG_MIN, XDRYLBDAR_MIN, &
                 ZFDINFTY, XKER_RDRYG                                        )
   WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
@@ -1317,7 +1518,7 @@ 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)
-XFSWETH = XNS*(XPI/4.0)*XCCH*XAS*(ZRHO00**XCEXVT) ! Wurtz  
+XFSWETH = XNS*(XPI/4.0)*XAS*(ZRHO00**XCEXVT)
 !
 XLBSWETH1   =    MOMG(XALPHAH,XNUH,2.)*MOMG(XALPHAS,XNUS,XBS)
 XLBSWETH2   = 2.*MOMG(XALPHAH,XNUH,1.)*MOMG(XALPHAS,XNUS,XBS+1.)
@@ -1325,7 +1526,7 @@ 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)
+XFGWETH = XNG*(XPI/4.0)*XAG*(ZRHO00**XCEXVT)
 !
 XLBGWETH1   =    MOMG(XALPHAH,XNUH,2.)*MOMG(XALPHAG,XNUG,XBG)
 XLBGWETH2   = 2.*MOMG(XALPHAH,XNUH,1.)*MOMG(XALPHAG,XNUG,XBG+1.)
@@ -1358,6 +1559,22 @@ 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 ( NMOM_S.GE.2 ) then
+  IF( .NOT.ALLOCATED(XKER_N_SWETH) ) ALLOCATE( XKER_N_SWETH(NWETLBDAH,NWETLBDAS) )
+  CALL NZCOLX ( IND, XALPHAH, XNUH, XALPHAS, XNUS,                          &  
+              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='("!")') 
+end  if
 IF( .NOT.ALLOCATED(XKER_SWETH) ) ALLOCATE( XKER_SWETH(NWETLBDAH,NWETLBDAS) )
 !
 CALL LIMA_READ_XKER_SWETH (KWETLBDAH,KWETLBDAS,KND,                                    &
@@ -1373,7 +1590,7 @@ IF( (KWETLBDAH/=NWETLBDAH) .OR. (KWETLBDAS/=NWETLBDAS) .OR. (KND/=IND) .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, XFVELOS,                  &
+                ZEHS, XBS, XCH, XDH, 0., XCS, XDS, XFVELOS,                 &
                 XWETLBDAH_MAX, XWETLBDAS_MAX, XWETLBDAH_MIN, XWETLBDAS_MIN, &
                 ZFDINFTY, XKER_SWETH                                        )
   WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
@@ -1425,6 +1642,22 @@ IND      = 50    ! Number of interval used to integrate the dimensional
 ZEHG     = 1.0   ! distributions when computing the kernel XKER_GWETH
 ZFDINFTY = 20.0
 !
+if ( NMOM_G.GE.2 ) then
+  IF( .NOT.ALLOCATED(XKER_N_GWETH) ) ALLOCATE( XKER_N_GWETH(NWETLBDAH,NWETLBDAG) )
+  CALL NZCOLX ( IND, XALPHAH, XNUH, XALPHAG, XNUG,                          & 
+              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='("!")') 
+end if
 IF( .NOT.ALLOCATED(XKER_GWETH) ) ALLOCATE( XKER_GWETH(NWETLBDAH,NWETLBDAG) )
 !
 CALL LIMA_READ_XKER_GWETH (KWETLBDAH,KWETLBDAG,KND,                                 &
@@ -1440,7 +1673,7 @@ IF( (KWETLBDAH/=NWETLBDAH) .OR. (KWETLBDAG/=NWETLBDAG) .OR. (KND/=IND) .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.,                     &
+                ZEHG, XBG, XCH, XDH, 0., XCG, XDG, 0.,                      &
                 XWETLBDAH_MAX, XWETLBDAG_MAX, XWETLBDAH_MIN, XWETLBDAG_MIN, &
                 ZFDINFTY, XKER_GWETH                                        )
   WRITE(UNIT=ILUOUT0,FMT='("*****************************************")')
diff --git a/src/MNH/ini_lima_warm.f90 b/src/MNH/ini_lima_warm.f90
index 5ef1977aa..e01c3e526 100644
--- a/src/MNH/ini_lima_warm.f90
+++ b/src/MNH/ini_lima_warm.f90
@@ -163,6 +163,7 @@ ZGAMR(6) = MOMG(XALPHAR,XNUR,3.)**(2./3.)/MOMG(XALPHAR,XNUR,2.)
 XLBC   = XAR*ZGAMC(2)
 XLBEXC = 1.0/XBC
 !
+XNR = 1.0/(XAR*MOMG(XALPHAR,XNUR,XBR))
 IF (NMOM_R.EQ.1) THEN
    XCCR   = 8.E6
    XCXR   = -1.
diff --git a/src/MNH/lima.f90 b/src/MNH/lima.f90
index 5dd354385..6a6673423 100644
--- a/src/MNH/lima.f90
+++ b/src/MNH/lima.f90
@@ -239,26 +239,28 @@ REAL, DIMENSION(:), ALLOCATABLE ::                          &
      Z_TH_DEPS, Z_RS_DEPS,                                  & ! deposition of vapor on snow (DEPS) : rv=-rs, rs, th
      Z_TH_DEPI, Z_RI_DEPI,                                  & ! deposition of vapor on ice (DEPI) : rv=-ri, ri, th
      Z_RI_CNVS, Z_CI_CNVS,                                  & ! conversion ice -> snow (CNVS) : ri, Ni, rs=-ri
+     Z_CS_SSC,                                              & ! self collection of snow (SSC) : Ns
      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_TH_RIM, Z_RC_RIM, Z_CC_RIM, Z_RS_RIM, Z_CS_RIM, Z_RG_RIM,      & ! cloud droplet riming (RIM) : rc, Nc, rs, Ns, rg, Ng=-Ns, 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_ACC, Z_RR_ACC, Z_CR_ACC, Z_RS_ACC, Z_CS_ACC, Z_RG_ACC,      & ! rain accretion on aggregates (ACC) : rr, Nr, rs, Ns, rg, Ng=-Ns, th
+     Z_RS_CMEL, Z_CS_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_RI_CIBU, Z_CI_CIBU,                                  & ! collisional ice break-up (CIBU) : ri, Ni, rs=-ri
      Z_RI_RDSF, Z_CI_RDSF,                                  & ! rain drops freezing shattering (RDSF) : ri, Ni, rg=-ri
      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_RI_WETG, Z_CI_WETG, Z_RS_WETG, Z_CS_WETG, Z_RG_WETG, Z_CG_WETG, Z_RH_WETG, & ! wet growth of graupel (WETG) : rc, NC, rr, Nr, ri, Ni, rs, Ns, rg, Ng, rh, Nh=-Ng, 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_DRYG, Z_CI_DRYG, Z_RS_DRYG, Z_CS_DRYG, Z_RG_DRYG, & ! dry growth of graupel (DRYG) : rc, Nc, rr, Nr, ri, Ni, rs, Ns, 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
+     Z_TH_GMLT, Z_RR_GMLT, Z_CR_GMLT, Z_CG_GMLT,            & ! graupel melting (GMLT) : rr, Nr, rg=-rr, th
+     Z_TH_DEPH, Z_RH_DEPH,                                  & ! deposition of vapor on hail (DEPH) : rv=-rh, rh, th
+     Z_TH_WETH, 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_CS_WETH, Z_RG_WETH, Z_CG_WETH, Z_RH_WETH, & ! wet growth of hail (WETH) : rc, Nc, rr, Nr, ri, Ni, rs, rg, rh, th
+     Z_RG_COHG, Z_CG_COHG,                                  & ! conversion of hail into graupel (COHG) : rg, rh
+     Z_TH_HMLT, Z_RR_HMLT, Z_CR_HMLT, Z_CH_HMLT,            & ! hail melting (HMLT) : rr, Nr, rh=-rr, th
      Z_RV_CORR2, Z_RC_CORR2, Z_RR_CORR2, Z_RI_CORR2,        &
      Z_CC_CORR2, Z_CR_CORR2, Z_CI_CORR2
 !
@@ -292,26 +294,28 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE ::                                     &
      ZTOT_TH_DEPS, ZTOT_RS_DEPS,                                           & ! deposition of vapor on snow (DEPS)
      ZTOT_TH_DEPI, ZTOT_RI_DEPI,                                           & ! deposition of vapor on ice (DEPI)
      ZTOT_RI_CNVS, ZTOT_CI_CNVS,                                           & ! conversion ice -> snow (CNVS)
+     ZTOT_CS_SSC,                                                          & ! self collection of snow (SSC)
      ZTOT_RI_AGGS, ZTOT_CI_AGGS,                                           & ! aggregation of ice on snow (AGGS)
      ZTOT_TH_DEPG, ZTOT_RG_DEPG,                                           & ! deposition of vapor on graupel (DEPG)
      ZTOT_TH_BERFI, ZTOT_RC_BERFI,                                         & ! Bergeron (BERFI)
-     ZTOT_TH_RIM, ZTOT_RC_RIM, ZTOT_CC_RIM, ZTOT_RS_RIM, ZTOT_RG_RIM,      & ! cloud droplet riming (RIM)
+     ZTOT_TH_RIM, ZTOT_RC_RIM, ZTOT_CC_RIM, ZTOT_RS_RIM, ZTOT_CS_RIM, ZTOT_RG_RIM,      & ! cloud droplet riming (RIM)
      ZTOT_RI_HMS, ZTOT_CI_HMS, ZTOT_RS_HMS,                                & ! hallett mossop snow (HMS)
-     ZTOT_TH_ACC, ZTOT_RR_ACC, ZTOT_CR_ACC, ZTOT_RS_ACC, ZTOT_RG_ACC,      & ! rain accretion on aggregates (ACC)
-     ZTOT_RS_CMEL,                                                         & ! conversion-melting (CMEL)
+     ZTOT_TH_ACC, ZTOT_RR_ACC, ZTOT_CR_ACC, ZTOT_RS_ACC, ZTOT_CS_ACC, ZTOT_RG_ACC,      & ! rain accretion on aggregates (ACC)
+     ZTOT_RS_CMEL, ZTOT_CS_CMEL,                                                        & ! conversion-melting (CMEL)
      ZTOT_TH_CFRZ, ZTOT_RR_CFRZ, ZTOT_CR_CFRZ, ZTOT_RI_CFRZ, ZTOT_CI_CFRZ, & ! rain freezing (CFRZ)
      ZTOT_RI_CIBU, ZTOT_CI_CIBU,                                           & ! collisional ice break-up (CIBU)
      ZTOT_RI_RDSF, ZTOT_CI_RDSF,                                           & ! rain drops freezing shattering (RDSF)
      ZTOT_TH_WETG, ZTOT_RC_WETG, ZTOT_CC_WETG, ZTOT_RR_WETG, ZTOT_CR_WETG, & ! wet growth of graupel (WETG)
-     ZTOT_RI_WETG, ZTOT_CI_WETG, ZTOT_RS_WETG, ZTOT_RG_WETG, ZTOT_RH_WETG, & ! wet growth of graupel (WETG)
+     ZTOT_RI_WETG, ZTOT_CI_WETG, ZTOT_RS_WETG, ZTOT_CS_WETG, ZTOT_RG_WETG, ZTOT_CG_WETG, ZTOT_RH_WETG, & ! wet growth of graupel (WETG)
      ZTOT_TH_DRYG, ZTOT_RC_DRYG, ZTOT_CC_DRYG, ZTOT_RR_DRYG, ZTOT_CR_DRYG, & ! dry growth of graupel (DRYG)
-     ZTOT_RI_DRYG, ZTOT_CI_DRYG, ZTOT_RS_DRYG, ZTOT_RG_DRYG,               & ! dry growth of graupel (DRYG)
+     ZTOT_RI_DRYG, ZTOT_CI_DRYG, ZTOT_RS_DRYG, ZTOT_CS_DRYG, ZTOT_RG_DRYG,               & ! dry growth of graupel (DRYG)
      ZTOT_RI_HMG, ZTOT_CI_HMG, ZTOT_RG_HMG,                                & ! hallett mossop graupel (HMG)
-     ZTOT_TH_GMLT, ZTOT_RR_GMLT, ZTOT_CR_GMLT,                             & ! graupel melting (GMLT)
-!      ZTOT_RC_WETH, ZTOT_CC_WETH, ZTOT_RR_WETH, ZTOT_CR_WETH,               & ! wet growth of hail (WETH)
-!      ZTOT_RI_WETH, ZTOT_CI_WETH, ZTOT_RS_WETH, ZTOT_RG_WETH, ZTOT_RH_WETH, & ! wet growth of hail (WETH)
-!      ZTOT_RG_COHG,                                                         & ! conversion of hail into graupel (COHG)
-!      ZTOT_RR_HMLT, ZTOT_CR_HMLT,                                           & ! hail melting (HMLT)
+     ZTOT_TH_GMLT, ZTOT_RR_GMLT, ZTOT_CR_GMLT, ZTOT_CG_GMLT,               & ! graupel melting (GMLT)
+     ZTOT_TH_DEPH, ZTOT_RH_DEPH,                                           & ! deposition of vapor on hail (DEPH)
+     ZTOT_TH_WETH, ZTOT_RC_WETH, ZTOT_CC_WETH, ZTOT_RR_WETH, ZTOT_CR_WETH, & ! wet growth of hail (WETH)
+     ZTOT_RI_WETH, ZTOT_CI_WETH, ZTOT_RS_WETH, ZTOT_CS_WETH, ZTOT_RG_WETH, ZTOT_CG_WETH, ZTOT_RH_WETH, & ! wet growth of hail (WETH)
+     ZTOT_RG_COHG, ZTOT_CG_COHG,                                           & ! conversion of hail into graupel (COHG)
+     ZTOT_TH_HMLT, ZTOT_RR_HMLT, ZTOT_CR_HMLT, ZTOT_CH_HMLT,               & ! hail melting (HMLT)
      ZTOT_RR_CVRC, ZTOT_CR_CVRC,                                           & ! conversion of rain into cloud droplets if diameter too small
      ZTOT_RV_CORR2, ZTOT_RC_CORR2, ZTOT_RR_CORR2, ZTOT_RI_CORR2,           &
      ZTOT_CC_CORR2, ZTOT_CR_CORR2, ZTOT_CI_CORR2
@@ -448,6 +452,7 @@ if ( lbu_enable ) then
   allocate( ZTOT_RI_DEPI (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RI_DEPI(:,:,:) = 0.
   allocate( ZTOT_RI_CNVS (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RI_CNVS(:,:,:) = 0.
   allocate( ZTOT_CI_CNVS (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CI_CNVS(:,:,:) = 0.
+  allocate( ZTOT_CS_SSC  (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CS_SSC(:,:,:) = 0.
   allocate( ZTOT_RI_AGGS (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RI_AGGS(:,:,:) = 0.
   allocate( ZTOT_CI_AGGS (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CI_AGGS(:,:,:) = 0.
   allocate( ZTOT_TH_DEPG (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_TH_DEPG(:,:,:) = 0.
@@ -458,6 +463,7 @@ if ( lbu_enable ) then
   allocate( ZTOT_RC_RIM  (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RC_RIM(:,:,:) = 0.
   allocate( ZTOT_CC_RIM  (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CC_RIM(:,:,:) = 0.
   allocate( ZTOT_RS_RIM  (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RS_RIM(:,:,:) = 0.
+  allocate( ZTOT_CS_RIM  (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CS_RIM(:,:,:) = 0.
   allocate( ZTOT_RG_RIM  (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RG_RIM(:,:,:) = 0.
   allocate( ZTOT_RI_HMS  (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RI_HMS(:,:,:) = 0.
   allocate( ZTOT_CI_HMS  (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CI_HMS(:,:,:) = 0.
@@ -466,8 +472,10 @@ if ( lbu_enable ) then
   allocate( ZTOT_RR_ACC  (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RR_ACC(:,:,:) = 0.
   allocate( ZTOT_CR_ACC  (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CR_ACC(:,:,:) = 0.
   allocate( ZTOT_RS_ACC  (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RS_ACC(:,:,:) = 0.
+  allocate( ZTOT_CS_ACC  (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CS_ACC(:,:,:) = 0.
   allocate( ZTOT_RG_ACC  (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RG_ACC(:,:,:) = 0.
   allocate( ZTOT_RS_CMEL (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RS_CMEL(:,:,:) = 0.
+  allocate( ZTOT_CS_CMEL (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CS_CMEL(:,:,:) = 0.
   allocate( ZTOT_TH_CFRZ (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_TH_CFRZ(:,:,:) = 0.
   allocate( ZTOT_RR_CFRZ (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RR_CFRZ(:,:,:) = 0.
   allocate( ZTOT_CR_CFRZ (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CR_CFRZ(:,:,:) = 0.
@@ -485,7 +493,9 @@ if ( lbu_enable ) then
   allocate( ZTOT_RI_WETG (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RI_WETG(:,:,:) = 0.
   allocate( ZTOT_CI_WETG (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CI_WETG(:,:,:) = 0.
   allocate( ZTOT_RS_WETG (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RS_WETG(:,:,:) = 0.
+  allocate( ZTOT_CS_WETG (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CS_WETG(:,:,:) = 0.
   allocate( ZTOT_RG_WETG (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RG_WETG(:,:,:) = 0.
+  allocate( ZTOT_CG_WETG (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CG_WETG(:,:,:) = 0.
   allocate( ZTOT_RH_WETG (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RH_WETG(:,:,:) = 0.
   allocate( ZTOT_TH_DRYG (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_TH_DRYG(:,:,:) = 0.
   allocate( ZTOT_RC_DRYG (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RC_DRYG(:,:,:) = 0.
@@ -495,6 +505,7 @@ if ( lbu_enable ) then
   allocate( ZTOT_RI_DRYG (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RI_DRYG(:,:,:) = 0.
   allocate( ZTOT_CI_DRYG (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CI_DRYG(:,:,:) = 0.
   allocate( ZTOT_RS_DRYG (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RS_DRYG(:,:,:) = 0.
+  allocate( ZTOT_CS_DRYG (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CS_DRYG(:,:,:) = 0.
   allocate( ZTOT_RG_DRYG (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RG_DRYG(:,:,:) = 0.
   allocate( ZTOT_RI_HMG  (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RI_HMG(:,:,:) = 0.
   allocate( ZTOT_CI_HMG  (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CI_HMG(:,:,:) = 0.
@@ -502,18 +513,27 @@ if ( lbu_enable ) then
   allocate( ZTOT_TH_GMLT (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_TH_GMLT(:,:,:) = 0.
   allocate( ZTOT_RR_GMLT (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RR_GMLT(:,:,:) = 0.
   allocate( ZTOT_CR_GMLT (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CR_GMLT(:,:,:) = 0.
-!   allocate( ZTOT_RC_WETH (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RC_WETH(:,:,:) = 0.
-!   allocate( ZTOT_CC_WETH (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CC_WETH(:,:,:) = 0.
-!   allocate( ZTOT_RR_WETH (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RR_WETH(:,:,:) = 0.
-!   allocate( ZTOT_CR_WETH (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CR_WETH(:,:,:) = 0.
-!   allocate( ZTOT_RI_WETH (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RI_WETH(:,:,:) = 0.
-!   allocate( ZTOT_CI_WETH (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CI_WETH(:,:,:) = 0.
-!   allocate( ZTOT_RS_WETH (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RS_WETH(:,:,:) = 0.
-!   allocate( ZTOT_RG_WETH (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RG_WETH(:,:,:) = 0.
-!   allocate( ZTOT_RH_WETH (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RH_WETH(:,:,:) = 0.
-!   allocate( ZTOT_RG_COHG (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RG_COHG(:,:,:) = 0.
-!   allocate( ZTOT_RR_HMLT (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RR_HMLT(:,:,:) = 0.
-!   allocate( ZTOT_CR_HMLT (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CR_HMLT(:,:,:) = 0.
+  allocate( ZTOT_CG_GMLT (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CG_GMLT(:,:,:) = 0.
+  allocate( ZTOT_TH_DEPH (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_TH_DEPH(:,:,:) = 0.
+  allocate( ZTOT_RH_DEPH (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RH_DEPH(:,:,:) = 0.
+  allocate( ZTOT_TH_WETH (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_TH_WETH(:,:,:) = 0.
+  allocate( ZTOT_RC_WETH (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RC_WETH(:,:,:) = 0.
+  allocate( ZTOT_CC_WETH (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CC_WETH(:,:,:) = 0.
+  allocate( ZTOT_RR_WETH (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RR_WETH(:,:,:) = 0.
+  allocate( ZTOT_CR_WETH (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CR_WETH(:,:,:) = 0.
+  allocate( ZTOT_RI_WETH (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RI_WETH(:,:,:) = 0.
+  allocate( ZTOT_CI_WETH (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CI_WETH(:,:,:) = 0.
+  allocate( ZTOT_RS_WETH (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RS_WETH(:,:,:) = 0.
+  allocate( ZTOT_CS_WETH (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CS_WETH(:,:,:) = 0.
+  allocate( ZTOT_RG_WETH (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RG_WETH(:,:,:) = 0.
+  allocate( ZTOT_CG_WETH (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CG_WETH(:,:,:) = 0.
+  allocate( ZTOT_RH_WETH (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RH_WETH(:,:,:) = 0.
+  allocate( ZTOT_RG_COHG (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RG_COHG(:,:,:) = 0.
+  allocate( ZTOT_CG_COHG (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CG_COHG(:,:,:) = 0.
+  allocate( ZTOT_TH_HMLT (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_TH_HMLT(:,:,:) = 0.
+  allocate( ZTOT_RR_HMLT (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RR_HMLT(:,:,:) = 0.
+  allocate( ZTOT_CR_HMLT (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CR_HMLT(:,:,:) = 0.
+  allocate( ZTOT_CH_HMLT (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CH_HMLT(:,:,:) = 0.
   allocate( ZTOT_RR_CVRC (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_RR_CVRC(:,:,:) = 0.
   allocate( ZTOT_CR_CVRC (size( ptht, 1), size( ptht, 2), size( ptht, 3) ) ); ZTOT_CR_CVRC(:,:,:) = 0.
 
@@ -1045,68 +1065,96 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP))
       ALLOCATE(Z_RI_DEPI(IPACK))          ; Z_RI_DEPI(:) = 0.
       ALLOCATE(Z_RI_CNVS(IPACK))          ; Z_RI_CNVS(:) = 0.
       ALLOCATE(Z_CI_CNVS(IPACK))          ; Z_CI_CNVS(:) = 0.
+      ALLOCATE(Z_CS_SSC(IPACK))           ; Z_CS_SSC(:) = 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_RI_CIBU(IPACK))          ; Z_RI_CIBU = 0.
-      ALLOCATE(Z_CI_CIBU(IPACK))          ; Z_CI_CIBU = 0.
-      ALLOCATE(Z_RI_RDSF(IPACK))          ; Z_RI_RDSF = 0.
-      ALLOCATE(Z_CI_RDSF(IPACK))          ; Z_CI_RDSF = 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.
+      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_CS_RIM(IPACK))           ; Z_CS_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_CS_ACC(IPACK))           ; Z_CS_ACC(:) = 0.
+      ALLOCATE(Z_RG_ACC(IPACK))           ; Z_RG_ACC(:) = 0.
+      ALLOCATE(Z_RS_CMEL(IPACK))          ; Z_RS_CMEL(:) = 0.
+      ALLOCATE(Z_CS_CMEL(IPACK))          ; Z_CS_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_RI_CIBU(IPACK))          ; Z_RI_CIBU(:) = 0.
+      ALLOCATE(Z_CI_CIBU(IPACK))          ; Z_CI_CIBU(:) = 0.
+      ALLOCATE(Z_RI_RDSF(IPACK))          ; Z_RI_RDSF(:) = 0.
+      ALLOCATE(Z_CI_RDSF(IPACK))          ; Z_CI_RDSF(:) = 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_CS_WETG(IPACK))          ; Z_CS_WETG(:) = 0.
+      ALLOCATE(Z_RG_WETG(IPACK))          ; Z_RG_WETG(:) = 0.
+      ALLOCATE(Z_CG_WETG(IPACK))          ; Z_CG_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_CS_DRYG(IPACK))          ; Z_CS_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.
+      ALLOCATE(Z_CG_GMLT(IPACK))          ; Z_CG_GMLT(:) = 0.
+      ALLOCATE(Z_TH_DEPH(IPACK))          ; Z_TH_DEPH(:) = 0.
+      ALLOCATE(Z_RH_DEPH(IPACK))          ; Z_RH_DEPH(:) = 0.
+      ALLOCATE(Z_TH_WETH(IPACK))          ; Z_TH_WETH(:) = 0.
+      ALLOCATE(Z_RC_WETH(IPACK))          ; Z_RC_WETH(:) = 0.
+      ALLOCATE(Z_CC_WETH(IPACK))          ; Z_CC_WETH(:) = 0.
+      ALLOCATE(Z_RR_WETH(IPACK))          ; Z_RR_WETH(:) = 0.
+      ALLOCATE(Z_CR_WETH(IPACK))          ; Z_CR_WETH(:) = 0.
+      ALLOCATE(Z_RI_WETH(IPACK))          ; Z_RI_WETH(:) = 0.
+      ALLOCATE(Z_CI_WETH(IPACK))          ; Z_CI_WETH(:) = 0.
+      ALLOCATE(Z_RS_WETH(IPACK))          ; Z_RS_WETH(:) = 0.
+      ALLOCATE(Z_CS_WETH(IPACK))          ; Z_CS_WETH(:) = 0.
+      ALLOCATE(Z_RG_WETH(IPACK))          ; Z_RG_WETH(:) = 0.
+      ALLOCATE(Z_CG_WETH(IPACK))          ; Z_CG_WETH(:) = 0.
+      ALLOCATE(Z_RH_WETH(IPACK))          ; Z_RH_WETH(:) = 0.
+      ALLOCATE(Z_RG_COHG(IPACK))          ; Z_RG_COHG(:) = 0.
+      ALLOCATE(Z_CG_COHG(IPACK))          ; Z_CG_COHG(:) = 0.
+      ALLOCATE(Z_TH_HMLT(IPACK))          ; Z_TH_HMLT(:) = 0.
+      ALLOCATE(Z_RR_HMLT(IPACK))          ; Z_RR_HMLT(:) = 0.
+      ALLOCATE(Z_CR_HMLT(IPACK))          ; Z_CR_HMLT(:) = 0.
+      ALLOCATE(Z_CH_HMLT(IPACK))          ; Z_CH_HMLT(:) = 0.
 
-      ALLOCATE(Z_RV_CORR2(IPACK))         ; Z_RV_CORR2 = 0.
-      ALLOCATE(Z_RC_CORR2(IPACK))         ; Z_RC_CORR2 = 0.
-      ALLOCATE(Z_RR_CORR2(IPACK))         ; Z_RR_CORR2 = 0.
-      ALLOCATE(Z_RI_CORR2(IPACK))         ; Z_RI_CORR2 = 0.
-      ALLOCATE(Z_CC_CORR2(IPACK))         ; Z_CC_CORR2 = 0.
-      ALLOCATE(Z_CR_CORR2(IPACK))         ; Z_CR_CORR2 = 0.
-      ALLOCATE(Z_CI_CORR2(IPACK))         ; Z_CI_CORR2 = 0.
+      ALLOCATE(Z_RV_CORR2(IPACK))         ; Z_RV_CORR2(:) = 0.
+      ALLOCATE(Z_RC_CORR2(IPACK))         ; Z_RC_CORR2(:) = 0.
+      ALLOCATE(Z_RR_CORR2(IPACK))         ; Z_RR_CORR2(:) = 0.
+      ALLOCATE(Z_RI_CORR2(IPACK))         ; Z_RI_CORR2(:) = 0.
+      ALLOCATE(Z_CC_CORR2(IPACK))         ; Z_CC_CORR2(:) = 0.
+      ALLOCATE(Z_CR_CORR2(IPACK))         ; Z_CR_CORR2(:) = 0.
+      ALLOCATE(Z_CI_CORR2(IPACK))         ; Z_CI_CORR2(:) = 0.
       !
       !***       4.1 Tendecies computation
       !
@@ -1138,26 +1186,28 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP))
                             Z_TH_DEPS, Z_RS_DEPS,                                   & 
                             Z_TH_DEPI, Z_RI_DEPI,                                   & 
                             Z_RI_CNVS, Z_CI_CNVS,                                   & 
+                            Z_CS_SSC,                                               & 
                             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_TH_RIM, Z_RC_RIM, Z_CC_RIM, Z_RS_RIM, Z_CS_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_ACC, Z_RR_ACC, Z_CR_ACC, Z_RS_ACC, Z_CS_ACC, Z_RG_ACC,       & 
+                            Z_RS_CMEL, Z_CS_CMEL,                                   & 
                             Z_TH_CFRZ, Z_RR_CFRZ, Z_CR_CFRZ, Z_RI_CFRZ, Z_CI_CFRZ,  & 
                             Z_RI_CIBU, Z_CI_CIBU,                                   & 
                             Z_RI_RDSF, Z_CI_RDSF,                                   & 
                             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_RI_WETG, Z_CI_WETG, Z_RS_WETG, Z_CS_WETG, Z_RG_WETG, Z_CG_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_DRYG, Z_CI_DRYG, Z_RS_DRYG, Z_CS_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
+                            Z_TH_GMLT, Z_RR_GMLT, Z_CR_GMLT, Z_CG_GMLT,             &
+                            Z_TH_DEPH, Z_RH_DEPH,                                   &
+                            Z_TH_WETH, Z_RC_WETH, Z_CC_WETH, Z_RR_WETH, Z_CR_WETH,  &
+                            Z_RI_WETH, Z_CI_WETH, Z_RS_WETH, Z_CS_WETH, Z_RG_WETH, Z_CG_WETH, Z_RH_WETH, &
+                            Z_RG_COHG, Z_CG_COHG,                                   &
+                            Z_TH_HMLT, Z_RR_HMLT, Z_CR_HMLT, Z_CH_HMLT,             &
                             ZA_TH, ZA_RV, ZA_RC, ZA_CC, ZA_RR, ZA_CR,               &
                             ZA_RI, ZA_CI, ZA_RS, ZA_CS, ZA_RG, ZA_CG, ZA_RH, ZA_CH, &
                             ZEVAP1D,                                                &
@@ -1435,6 +1485,7 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP))
             ZTOT_RI_DEPI(I1(II),I2(II),I3(II)) =   ZTOT_RI_DEPI(I1(II),I2(II),I3(II))   + Z_RI_DEPI(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_CS_SSC(I1(II),I2(II),I3(II))  =   ZTOT_CS_SSC(I1(II),I2(II),I3(II))    + Z_CS_SSC(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)
@@ -1445,6 +1496,7 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP))
             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_CS_RIM(I1(II),I2(II),I3(II))  =   ZTOT_CS_RIM(I1(II),I2(II),I3(II))    + Z_CS_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)
@@ -1453,7 +1505,9 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP))
             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_CS_ACC(I1(II),I2(II),I3(II))  =   ZTOT_CS_ACC(I1(II),I2(II),I3(II))    + Z_CS_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_CS_CMEL(I1(II),I2(II),I3(II)) =   ZTOT_CS_CMEL(I1(II),I2(II),I3(II))   + Z_CS_CMEL(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)
@@ -1472,7 +1526,9 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP))
             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_CS_WETG(I1(II),I2(II),I3(II)) =   ZTOT_CS_WETG(I1(II),I2(II),I3(II))   + Z_CS_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_CG_WETG(I1(II),I2(II),I3(II)) =   ZTOT_CG_WETG(I1(II),I2(II),I3(II))   + Z_CG_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)
@@ -1482,6 +1538,7 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP))
             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_CS_DRYG(I1(II),I2(II),I3(II)) =   ZTOT_CS_DRYG(I1(II),I2(II),I3(II))   + Z_CS_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)
@@ -1489,18 +1546,27 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP))
             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)
+            ZTOT_CG_GMLT(I1(II),I2(II),I3(II)) =   ZTOT_CG_GMLT(I1(II),I2(II),I3(II))   + Z_CG_GMLT(II)  * ZMAXTIME(II)
+            ZTOT_TH_DEPH(I1(II),I2(II),I3(II)) =   ZTOT_TH_DEPH(I1(II),I2(II),I3(II))   + Z_TH_DEPH(II)  * ZMAXTIME(II)
+            ZTOT_RH_DEPH(I1(II),I2(II),I3(II)) =   ZTOT_RH_DEPH(I1(II),I2(II),I3(II))   + Z_RH_DEPH(II)  * ZMAXTIME(II)
+            ZTOT_TH_WETH(I1(II),I2(II),I3(II)) =   ZTOT_TH_WETH(I1(II),I2(II),I3(II))   + Z_TH_WETH(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_CS_WETH(I1(II),I2(II),I3(II)) =   ZTOT_CS_WETH(I1(II),I2(II),I3(II))   + Z_CS_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_CG_WETH(I1(II),I2(II),I3(II)) =   ZTOT_CG_WETH(I1(II),I2(II),I3(II))   + Z_CG_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_CG_COHG(I1(II),I2(II),I3(II)) =   ZTOT_CG_COHG(I1(II),I2(II),I3(II))   + Z_CG_COHG(II)  * ZMAXTIME(II)
+            ZTOT_TH_HMLT(I1(II),I2(II),I3(II)) =   ZTOT_RR_HMLT(I1(II),I2(II),I3(II))   + Z_RR_HMLT(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)
+            ZTOT_CH_HMLT(I1(II),I2(II),I3(II)) =   ZTOT_CH_HMLT(I1(II),I2(II),I3(II))   + Z_CH_HMLT(II)  * ZMAXTIME(II)
 
           !Correction term
           ZTOT_RV_CORR2(I1(II),I2(II),I3(II)) =   ZTOT_RV_CORR2(I1(II),I2(II),I3(II)) + Z_RV_CORR2(II)
@@ -1615,6 +1681,7 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP))
       DEALLOCATE(Z_RI_DEPI)
       DEALLOCATE(Z_RI_CNVS)
       DEALLOCATE(Z_CI_CNVS)
+      DEALLOCATE(Z_CS_SSC) 
       DEALLOCATE(Z_RI_AGGS) 
       DEALLOCATE(Z_CI_AGGS) 
       DEALLOCATE(Z_TH_DEPG) 
@@ -1625,6 +1692,7 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP))
       DEALLOCATE(Z_RC_RIM) 
       DEALLOCATE(Z_CC_RIM)  
       DEALLOCATE(Z_RS_RIM) 
+      DEALLOCATE(Z_CS_RIM) 
       DEALLOCATE(Z_RG_RIM) 
       DEALLOCATE(Z_RI_HMS) 
       DEALLOCATE(Z_CI_HMS) 
@@ -1634,6 +1702,7 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP))
       DEALLOCATE(Z_CR_ACC) 
       DEALLOCATE(Z_RS_ACC) 
       DEALLOCATE(Z_RG_ACC)  
+      DEALLOCATE(Z_CS_CMEL) 
       DEALLOCATE(Z_RS_CMEL) 
       DEALLOCATE(Z_TH_CFRZ)
       DEALLOCATE(Z_RR_CFRZ)
@@ -1652,7 +1721,9 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP))
       DEALLOCATE(Z_RI_WETG)
       DEALLOCATE(Z_CI_WETG)
       DEALLOCATE(Z_RS_WETG)
+      DEALLOCATE(Z_CS_WETG)
       DEALLOCATE(Z_RG_WETG)
+      DEALLOCATE(Z_CG_WETG)
       DEALLOCATE(Z_RH_WETG) 
       DEALLOCATE(Z_TH_DRYG) 
       DEALLOCATE(Z_RC_DRYG) 
@@ -1662,6 +1733,7 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP))
       DEALLOCATE(Z_RI_DRYG)
       DEALLOCATE(Z_CI_DRYG)
       DEALLOCATE(Z_RS_DRYG) 
+      DEALLOCATE(Z_CS_DRYG) 
       DEALLOCATE(Z_RG_DRYG)
       DEALLOCATE(Z_RI_HMG) 
       DEALLOCATE(Z_CI_HMG) 
@@ -1669,6 +1741,27 @@ DO WHILE(ANY(ZTIME(IIB:IIE,IJB:IJE,IKTB:IKTE)<PTSTEP))
       DEALLOCATE(Z_TH_GMLT)
       DEALLOCATE(Z_RR_GMLT)
       DEALLOCATE(Z_CR_GMLT)
+      DEALLOCATE(Z_CG_GMLT)
+      DEALLOCATE(Z_TH_DEPH) 
+      DEALLOCATE(Z_RH_DEPH) 
+      DEALLOCATE(Z_TH_WETH)
+      DEALLOCATE(Z_RC_WETH)
+      DEALLOCATE(Z_CC_WETH)
+      DEALLOCATE(Z_RR_WETH) 
+      DEALLOCATE(Z_CR_WETH) 
+      DEALLOCATE(Z_RI_WETH)
+      DEALLOCATE(Z_CI_WETH)
+      DEALLOCATE(Z_RS_WETH)
+      DEALLOCATE(Z_CS_WETH)
+      DEALLOCATE(Z_RG_WETH)
+      DEALLOCATE(Z_CG_WETH)
+      DEALLOCATE(Z_RH_WETH) 
+      DEALLOCATE(Z_RG_COHG)
+      DEALLOCATE(Z_CG_COHG)
+      DEALLOCATE(Z_TH_HMLT) 
+      DEALLOCATE(Z_RR_HMLT) 
+      DEALLOCATE(Z_CR_HMLT) 
+      DEALLOCATE(Z_CH_HMLT) 
 
       DEALLOCATE(Z_RV_CORR2)
       DEALLOCATE(Z_RC_CORR2)
@@ -1735,6 +1828,9 @@ if ( lbu_enable ) then
     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(:, :, :) )
   end if
 
   if ( lbudget_rv ) then
@@ -1743,6 +1839,7 @@ if ( lbu_enable ) then
     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(:, :, :) )
   end if
 
   if ( lbudget_rc ) then
@@ -1757,6 +1854,7 @@ if ( lbu_enable ) then
     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(:, :, :) )
   end if
 
   if ( lbudget_rr ) then
@@ -1770,7 +1868,9 @@ if ( lbu_enable ) then
     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), '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(:, :, :) )
   end if
 
   if ( lbudget_ri ) then
@@ -1789,6 +1889,7 @@ if ( lbu_enable ) then
     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(:, :, :) )
   end if
 
   if ( lbudget_rs ) then
@@ -1803,6 +1904,7 @@ if ( lbu_enable ) then
     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(:, :, :) )
   end if
 
   if ( lbudget_rg ) then
@@ -1818,10 +1920,16 @@ if ( lbu_enable ) then
     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(:, :, :) )
   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), '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(:, :, :) )
   end if
 
   if ( lbudget_sv ) then
@@ -1840,6 +1948,7 @@ if ( lbu_enable ) then
     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(:, :, :) )
     !
     ! Rain drops
     !
@@ -1856,6 +1965,8 @@ if ( lbu_enable ) then
     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(:, :, :) )
     !
     ! Ice crystals
     !
@@ -1873,6 +1984,40 @@ if ( lbu_enable ) then
     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(:, :, :) )
+    !
+    ! Snow
+    !
+    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(:, :, :) )
+    !
+    ! Graupel
+    !
+    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(:, :, :) )
+    !
+    ! Hail
+    !
+    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(:, :, :) )
+
 
     do ii = 1, nmod_ifn
       idx = NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl + ii - 1
diff --git a/src/MNH/lima_cold_sedimentation.f90 b/src/MNH/lima_cold_sedimentation.f90
index 6a62652b7..1cc8f19d1 100644
--- a/src/MNH/lima_cold_sedimentation.f90
+++ b/src/MNH/lima_cold_sedimentation.f90
@@ -12,7 +12,8 @@ INTERFACE
                                           PZZ, PRHODJ, PRHODREF,           &
                                           PRIT, PCIT,                      &
                                           PRIS, PRSS, PRGS, PRHS, PCIS,    &
-                                          PINPRS, PINPRG, PINPRH )
+                                          PINPRS, PINPRG, PINPRH,          &
+                                          PCSS, PCGS, PCHS)
 !
 LOGICAL,                  INTENT(IN)    :: OSEDI      ! switch to activate the 
                                                       ! cloud ice sedimentation
@@ -32,6 +33,9 @@ REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRSS       ! Snow/aggregate m.r. sour
 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(:,:,:),OPTIONAL,   INTENT(INOUT) :: PCSS       ! Snow/aggregate C. source   
+REAL, DIMENSION(:,:,:),OPTIONAL,   INTENT(INOUT) :: PCGS       ! Graupel C. source       
+REAL, DIMENSION(:,:,:),OPTIONAL,   INTENT(INOUT) :: PCHS       ! Hail 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
@@ -47,8 +51,8 @@ END MODULE MODI_LIMA_COLD_SEDIMENTATION
                                           PZZ, PRHODJ, PRHODREF,           &
                                           PRIT, PCIT,                      &
                                           PRIS, PRSS, PRGS, PRHS, PCIS,    &
-                                          PINPRS,PINPRG,&
-                                          PINPRH                )
+                                          PINPRS,PINPRG,PINPRH,            &
+                                          PCSS, PCGS, PCHS)
 !     ######################################################################
 !
 !!    PURPOSE
@@ -77,6 +81,7 @@ END MODULE MODI_LIMA_COLD_SEDIMENTATION
 !!  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
 !  P. Wautelet 28/05/2019: move COUNTJV function to tools.f90
+!  M. Taufour     07/2022: add concentration for snow, graupel, hail
 !
 !-------------------------------------------------------------------------------
 !
@@ -86,10 +91,17 @@ END MODULE MODI_LIMA_COLD_SEDIMENTATION
 USE MODD_CST,              ONLY : XRHOLW
 USE MODD_NSV
 USE MODD_PARAMETERS,       ONLY : JPHEXT, JPVEXT
-USE MODD_PARAM_LIMA,       ONLY : XCEXVT, XRTMIN, XCTMIN
+USE MODD_PARAM_LIMA,       ONLY : XCEXVT, XRTMIN, XCTMIN, &
+                                  NMOM_S, NMOM_G, NMOM_H
 USE MODD_PARAM_LIMA_COLD,  ONLY : XLBEXI, XLBI, XDI,                 &
-                                  XFSEDRI, XFSEDCI, XFSEDS, XEXSEDS
-USE MODD_PARAM_LIMA_MIXED, ONLY : XFSEDG, XEXSEDG, XFSEDH, XEXSEDH
+                                  XFSEDRI, XFSEDCI, XFSEDS, XEXSEDS, &
+                                  XLBEXS, XLBS, XDS,                 &
+                                  XFSEDRS, XFSEDCS 
+                               
+USE MODD_PARAM_LIMA_MIXED, ONLY : XFSEDG, XEXSEDG, XFSEDH, XEXSEDH, &
+                                  XLBEXG, XLBG, XDG,                &
+                                  XLBEXH, XLBH, XDH,                &
+                                  XFSEDRG, XFSEDCG, XFSEDRH, XFSEDCH
 !
 use mode_tools,           only: Countjv
 !
@@ -117,6 +129,9 @@ REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRSS       ! Snow/aggregate m.r. sour
 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(:,:,:),OPTIONAL,   INTENT(INOUT) :: PCSS       ! Snow/aggregate C. source  
+REAL, DIMENSION(:,:,:),OPTIONAL,   INTENT(INOUT) :: PCGS       ! Graupel C. source       
+REAL, DIMENSION(:,:,:),OPTIONAL,   INTENT(INOUT) :: PCHS       ! Hail 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
@@ -139,8 +154,11 @@ REAL, DIMENSION(:), ALLOCATABLE         &
                            :: ZRIS,     & ! Pristine ice m.r. source
                               ZCIS,     & ! Pristine ice conc. source
                               ZRSS,     & ! Snow/aggregate m.r. source
+                              ZCSS,     & ! Snow/aggregate conc. source
                               ZRGS,     & ! Graupel/hail m.r. source
+                              ZCGS,     & ! Graupel/hail conc. source
                               ZRHS,     & ! Graupel/hail m.r. source
+                              ZCHS,     & ! Graupel/hail conc. source 
                               ZRIT,     & ! Pristine ice m.r. at t
                               ZCIT,     & ! Pristine ice conc. at t
                               ZRHODREF, & ! RHO Dry REFerence
@@ -148,8 +166,8 @@ REAL, DIMENSION(:), ALLOCATABLE         &
                               ZZW,      & ! Work array
                               ZZX,      & ! Work array
                               ZZY,      & ! Work array
-                              ZLBDAI,   & ! Slope parameter of the ice crystal distr.
-                              ZRTMIN 
+                              ZLBDAI, ZLBDAS, ZLBDAG, ZLBDAH,   & ! Slope parameter of the ice crystal distr.
+                              ZRTMIN, ZCTMIN 
 !
 INTEGER , DIMENSION(SIZE(PRHODREF)) :: I1,I2,I3 ! Indexes for PACK replacement
 !
@@ -170,7 +188,9 @@ IKE=SIZE(PZZ,3) - JPVEXT
 ! Time splitting and ZRTMIN
 !
 ALLOCATE(ZRTMIN(SIZE(XRTMIN)))
+ALLOCATE(ZCTMIN(SIZE(XCTMIN)))
 ZRTMIN(:) = XRTMIN(:) / PTSTEP
+ZCTMIN(:) = XCTMIN(:) / PTSTEP
 !
 ZTSPLITG= PTSTEP / REAL(KSPLITG)
 !
@@ -185,9 +205,28 @@ PINPRH(:,:) = 0.
 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 (NMOM_S.EQ.2) THEN
+   GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) = PRSS(IIB:IIE,IJB:IJE,IKB:IKE)>ZRTMIN(5) .AND. &
+                                     PCSS(IIB:IIE,IJB:IJE,IKB:IKE)>ZCTMIN(5)
+ELSE
+   GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) = PRSS(IIB:IIE,IJB:IJE,IKB:IKE)>ZRTMIN(5)
+END IF
+IF (NMOM_G.EQ.2) THEN
+   GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) = GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) .OR. &
+                                   ( PRGS(IIB:IIE,IJB:IJE,IKB:IKE)>ZRTMIN(6) .AND. &
+                                     PCGS(IIB:IIE,IJB:IJE,IKB:IKE)>ZCTMIN(6) )
+ELSE
+   GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) = GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) .OR. &
+                                     PRGS(IIB:IIE,IJB:IJE,IKB:IKE)>ZRTMIN(6)
+END IF
+IF (NMOM_H.EQ.2) THEN
+   GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) = GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) .OR. &
+                                   ( PRSS(IIB:IIE,IJB:IJE,IKB:IKE)>ZRTMIN(7) .AND. &
+                                     PCSS(IIB:IIE,IJB:IJE,IKB:IKE)>ZCTMIN(7) )
+ELSE
+   GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) = GSEDIM(IIB:IIE,IJB:IJE,IKB:IKE) .OR. &
+                                     PRSS(IIB:IIE,IJB:IJE,IKB:IKE)>ZRTMIN(7)
+END IF
    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)
@@ -204,6 +243,9 @@ DO JN = 1 , KSPLITG
          PRSS(:,:,:) = PRSS(:,:,:) * PTSTEP
          PRGS(:,:,:) = PRGS(:,:,:) * PTSTEP
          PRHS(:,:,:) = PRHS(:,:,:) * PTSTEP
+         IF(NMOM_S.EQ.2) PCSS(:,:,:) = PCSS(:,:,:) * PTSTEP
+         IF(NMOM_G.EQ.2) PCGS(:,:,:) = PCGS(:,:,:) * PTSTEP
+         IF(NMOM_H.EQ.2) PCHS(:,:,:) = PCHS(:,:,:) * PTSTEP
          DO JK = IKB , IKE
             ZW(:,:,JK)=ZTSPLITG/(PZZ(:,:,JK+1)-PZZ(:,:,JK))
          END DO
@@ -259,21 +301,52 @@ DO JN = 1 , KSPLITG
 !*       2.22   for aggregates
 !
       ZZW(:) = 0.
+      ZZX(:) = 0.0                                                
+      ZZY(:) = 0.0
       IF( MAXVAL(PRSS(:,:,:))>XRTMIN(5) ) THEN
          ALLOCATE(ZRSS(ISEDIM)) 
-         DO JL = 1,ISEDIM
+         IF(NMOM_S.GE.2) THEN
+             ALLOCATE(ZCSS(ISEDIM))  
+             ALLOCATE(ZLBDAS(ISEDIM))
+            DO JL = 1,ISEDIM
             ZRSS(JL) = PRSS(I1(JL),I2(JL),I3(JL))
+            ZCSS(JL) = PCSS(I1(JL),I2(JL),I3(JL))       
          END DO
-         WHERE( ZRSS(:)>XRTMIN(5) )
-            ZZW(:) = XFSEDS * (ZRSS(:)*ZRHODREF(:))**XEXSEDS * ZRHODREF(:)**(-XCEXVT)
+         ZLBDAS(:)  = 1.E10         
+         WHERE( ZRSS(:)>XRTMIN(5) .AND. ZCSS(:)>XCTMIN(5) )            
+            ZLBDAS(:) = ( XLBS*ZCSS(:) / ZRSS(:) )**XLBEXS    
+            ZZY(:) = ZRHODREF(:)**(-XCEXVT) * (ZLBDAS(:)**(-XDS))
+            ZZW(:) = XFSEDRS * ZRSS(:) * ZZY(:) * ZRHODREF(:)
+            ZZX(:) = XFSEDCS * ZCSS(:) * ZZY(:) * ZRHODREF(:)
          END WHERE
          ZWSEDR(:,:,:) = UNPACK( ZZW(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
          ZWSEDR(:,:,IKB:IKE) = MIN( ZWSEDR(:,:,IKB:IKE), PRSS(:,:,IKB:IKE) * PRHODREF(:,:,IKB:IKE) / ZW(:,:,IKB:IKE) )
+         ZWSEDC(:,:,:) = UNPACK( ZZX(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
+         ZWSEDC(:,:,IKB:IKE) = MIN( ZWSEDC(:,:,IKB:IKE), PCSS(:,:,IKB:IKE) * PRHODREF(:,:,IKB:IKE) / ZW(:,:,IKB:IKE) )
          DO JK = IKB , IKE
-            PRSS(:,:,JK) = PRSS(:,:,JK) + ZW(:,:,JK)* &
+            PRSS(:,:,JK) = PRSS(:,:,JK) + ZW(:,:,JK)*                      &
                  (ZWSEDR(:,:,JK+1)-ZWSEDR(:,:,JK))/PRHODREF(:,:,JK)
-         END DO
+            PCSS(:,:,JK) = PCSS(:,:,JK) + ZW(:,:,JK)*                      &
+                 (ZWSEDC(:,:,JK+1)-ZWSEDC(:,:,JK))/PRHODREF(:,:,JK)
+         END DO          
          DEALLOCATE(ZRSS)
+         DEALLOCATE(ZCSS)
+         DEALLOCATE(ZLBDAS) 
+         ELSE
+             DO JL = 1,ISEDIM
+                ZRSS(JL) = PRSS(I1(JL),I2(JL),I3(JL))
+             END DO
+             WHERE( ZRSS(:)>XRTMIN(5) )
+                ZZW(:) = XFSEDS * (ZRSS(:)*ZRHODREF(:))**XEXSEDS * ZRHODREF(:)**(-XCEXVT)
+             END WHERE
+             ZWSEDR(:,:,:) = UNPACK( ZZW(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
+             ZWSEDR(:,:,IKB:IKE) = MIN( ZWSEDR(:,:,IKB:IKE), PRSS(:,:,IKB:IKE) * PRHODREF(:,:,IKB:IKE) / ZW(:,:,IKB:IKE) )
+             DO JK = IKB , IKE
+                PRSS(:,:,JK) = PRSS(:,:,JK) + ZW(:,:,JK)* &
+                      (ZWSEDR(:,:,JK+1)-ZWSEDR(:,:,JK))/PRHODREF(:,:,JK)
+             END DO
+             DEALLOCATE(ZRSS)
+     END IF
       ELSE
          ZWSEDR(:,:,IKB) = 0.0
       END IF
@@ -283,21 +356,52 @@ DO JN = 1 , KSPLITG
 !*       2.23   for graupeln
 !
       ZZW(:) = 0.
+      ZZX(:) = 0.0                                          
+      ZZY(:) = 0.0
       IF( MAXVAL(PRGS(:,:,:))>XRTMIN(6) ) THEN
          ALLOCATE(ZRGS(ISEDIM)) 
-         DO JL = 1,ISEDIM
-            ZRGS(JL) = PRGS(I1(JL),I2(JL),I3(JL))
-         END DO
-         WHERE( ZRGS(:)>XRTMIN(6) )
-            ZZW(:) = XFSEDG * (ZRGS(:)*ZRHODREF(:))**XEXSEDG * ZRHODREF(:)**(-XCEXVT)
-         END WHERE
-         ZWSEDR(:,:,:) = UNPACK( ZZW(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
-         ZWSEDR(:,:,IKB:IKE) = MIN( ZWSEDR(:,:,IKB:IKE), PRGS(:,:,IKB:IKE) * PRHODREF(:,:,IKB:IKE) / ZW(:,:,IKB:IKE) )
-         DO JK = IKB , IKE
-            PRGS(:,:,JK) = PRGS(:,:,JK) + ZW(:,:,JK)* &
-                 (ZWSEDR(:,:,JK+1)-ZWSEDR(:,:,JK))/PRHODREF(:,:,JK)
-         END DO
-         DEALLOCATE(ZRGS)
+         IF(NMOM_G.GE.2) THEN
+                 ALLOCATE(ZCGS(ISEDIM))                                   
+                 ALLOCATE(ZLBDAG(ISEDIM))                  
+                 DO JL = 1,ISEDIM
+                    ZRGS(JL) = PRGS(I1(JL),I2(JL),I3(JL))
+                    ZCGS(JL) = PCGS(I1(JL),I2(JL),I3(JL))            
+                 END DO 
+                 ZLBDAG(:)  = 1.E10         
+                 WHERE( ZRGS(:)>XRTMIN(6) .AND. ZCGS(:)>XCTMIN(6) )                          
+                    ZLBDAG(:) = ( XLBS*ZCGS(:) / ZRGS(:) )**XLBEXG    
+                    ZZY(:) = ZRHODREF(:)**(-XCEXVT) * (ZLBDAG(:)**(-XDG))
+                    ZZW(:) = XFSEDRG * ZRGS(:) * ZZY(:) * ZRHODREF(:)
+                    ZZX(:) = XFSEDCG * ZCGS(:) * ZZY(:) * ZRHODREF(:)
+                 END WHERE
+                 ZWSEDR(:,:,:) = UNPACK( ZZW(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
+                 ZWSEDR(:,:,IKB:IKE) = MIN( ZWSEDR(:,:,IKB:IKE), PRGS(:,:,IKB:IKE) * PRHODREF(:,:,IKB:IKE) / ZW(:,:,IKB:IKE) )
+                 ZWSEDC(:,:,:) = UNPACK( ZZX(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
+                 ZWSEDC(:,:,IKB:IKE) = MIN( ZWSEDC(:,:,IKB:IKE), PCGS(:,:,IKB:IKE) * PRHODREF(:,:,IKB:IKE) / ZW(:,:,IKB:IKE) )
+                 DO JK = IKB , IKE
+                    PRGS(:,:,JK) = PRGS(:,:,JK) + ZW(:,:,JK)*                      &
+                         (ZWSEDR(:,:,JK+1)-ZWSEDR(:,:,JK))/PRHODREF(:,:,JK)
+                    PCGS(:,:,JK) = PCGS(:,:,JK) + ZW(:,:,JK)*                      &
+                         (ZWSEDC(:,:,JK+1)-ZWSEDC(:,:,JK))/PRHODREF(:,:,JK)
+                 END DO          
+                 DEALLOCATE(ZRGS)
+                 DEALLOCATE(ZCGS)           
+                 DEALLOCATE(ZLBDAG)
+         ELSE
+                 DO JL = 1,ISEDIM
+                    ZRGS(JL) = PRGS(I1(JL),I2(JL),I3(JL))
+                 END DO
+                 WHERE( ZRGS(:)>XRTMIN(6) )
+                    ZZW(:) = XFSEDG * (ZRGS(:)*ZRHODREF(:))**XEXSEDG * ZRHODREF(:)**(-XCEXVT)
+                 END WHERE
+                 ZWSEDR(:,:,:) = UNPACK( ZZW(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
+                 ZWSEDR(:,:,IKB:IKE) = MIN( ZWSEDR(:,:,IKB:IKE), PRGS(:,:,IKB:IKE) * PRHODREF(:,:,IKB:IKE) / ZW(:,:,IKB:IKE) )
+                 DO JK = IKB , IKE
+                    PRGS(:,:,JK) = PRGS(:,:,JK) + ZW(:,:,JK)* &
+                         (ZWSEDR(:,:,JK+1)-ZWSEDR(:,:,JK))/PRHODREF(:,:,JK)
+                 END DO
+                 DEALLOCATE(ZRGS)
+         END IF
       ELSE
          ZWSEDR(:,:,IKB) = 0.0
       END IF
@@ -307,21 +411,48 @@ DO JN = 1 , KSPLITG
 !*       2.23   for hail
 !
       ZZW(:) = 0.
+      ZZX(:) = 0.
+      ZZY(:) = 0.      
       IF( MAXVAL(PRHS(:,:,:))>XRTMIN(7) ) THEN
          ALLOCATE(ZRHS(ISEDIM)) 
-         DO JL = 1,ISEDIM
-            ZRHS(JL) = PRHS(I1(JL),I2(JL),I3(JL))
-         END DO
-         WHERE( ZRHS(:)>XRTMIN(7) )
-            ZZW(:) = XFSEDH * (ZRHS(:)*ZRHODREF(:))**XEXSEDH * ZRHODREF(:)**(-XCEXVT)
-         END WHERE
-         ZWSEDR(:,:,:) = UNPACK( ZZW(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
-         ZWSEDR(:,:,IKB:IKE) = MIN( ZWSEDR(:,:,IKB:IKE), PRHS(:,:,IKB:IKE) * PRHODREF(:,:,IKB:IKE) / ZW(:,:,IKB:IKE) )
-         DO JK = IKB , IKE
-            PRHS(:,:,JK) = PRHS(:,:,JK) + ZW(:,:,JK)* &
-                 (ZWSEDR(:,:,JK+1)-ZWSEDR(:,:,JK))/PRHODREF(:,:,JK)
-         END DO
-         DEALLOCATE(ZRHS)
+         IF(NMOM_H.GE.2) THEN
+                ALLOCATE(ZCHS(ISEDIM))          
+                ALLOCATE(ZLBDAH(ISEDIM))                  
+                 DO JL = 1,ISEDIM
+                    ZRHS(JL) = PRHS(I1(JL),I2(JL),I3(JL))
+                    ZCHS(JL) = PRHS(I1(JL),I2(JL),I3(JL))            
+                 END DO
+                 ZLBDAH(:)  = 1.E10         
+                 WHERE( ZRHS(:)>XRTMIN(7) .AND. ZCHS(:)>XCTMIN(7) )
+                    ZLBDAH(:) = ( XLBH*ZCHS(:) / ZRHS(:) )**XLBEXH    
+                    ZZY(:) = ZRHODREF(:)**(-XCEXVT) * (ZLBDAH(:)**(-XDH))
+                    ZZW(:) = XFSEDRH * ZRHS(:) * ZZY(:) * ZRHODREF(:)
+                    ZZX(:) = XFSEDCH * ZCHS(:) * ZZY(:) * ZRHODREF(:)
+                 END WHERE
+                 ZWSEDR(:,:,:) = UNPACK( ZZW(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
+                 ZWSEDR(:,:,IKB:IKE) = MIN( ZWSEDR(:,:,IKB:IKE), PRHS(:,:,IKB:IKE) * PRHODREF(:,:,IKB:IKE) / ZW(:,:,IKB:IKE) )
+                 DO JK = IKB , IKE
+                    PRHS(:,:,JK) = PRHS(:,:,JK) + ZW(:,:,JK)*                      &
+                         (ZWSEDR(:,:,JK+1)-ZWSEDR(:,:,JK))/PRHODREF(:,:,JK)
+                 END DO
+                 DEALLOCATE(ZRHS)
+                 DEALLOCATE(ZLBDAH)
+                 DEALLOCATE(ZCHS)
+         ELSE
+                 DO JL = 1,ISEDIM
+                    ZRHS(JL) = PRHS(I1(JL),I2(JL),I3(JL))
+                 END DO
+                 WHERE( ZRHS(:)>XRTMIN(7) )
+                    ZZW(:) = XFSEDH * (ZRHS(:)*ZRHODREF(:))**XEXSEDH * ZRHODREF(:)**(-XCEXVT)
+                 END WHERE
+                 ZWSEDR(:,:,:) = UNPACK( ZZW(:),MASK=GSEDIM(:,:,:),FIELD=0.0 )
+                 ZWSEDR(:,:,IKB:IKE) = MIN( ZWSEDR(:,:,IKB:IKE), PRHS(:,:,IKB:IKE) * PRHODREF(:,:,IKB:IKE) / ZW(:,:,IKB:IKE) )
+                 DO JK = IKB , IKE
+                    PRHS(:,:,JK) = PRHS(:,:,JK) + ZW(:,:,JK)* &
+                         (ZWSEDR(:,:,JK+1)-ZWSEDR(:,:,JK))/PRHODREF(:,:,JK)
+                 END DO
+                 DEALLOCATE(ZRHS)
+         END IF
       ELSE
          ZWSEDR(:,:,IKB) = 0.0
       END IF
diff --git a/src/MNH/lima_cold_slow_processes.f90 b/src/MNH/lima_cold_slow_processes.f90
index 29c1aecbe..28203281b 100644
--- a/src/MNH/lima_cold_slow_processes.f90
+++ b/src/MNH/lima_cold_slow_processes.f90
@@ -12,7 +12,7 @@ INTERFACE
                                            PRHODREF, PEXNREF, PPABST,                &
                                            PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
                                            PTHS, PRVS, PRIS, PRSS,                   &
-                                           PCIT, PCIS                                )
+                                           PCIT, PCIS, PCST, PCSS                    )
 !
 REAL,                     INTENT(IN)    :: PTSTEP  ! Time step          
 INTEGER,                  INTENT(IN)    :: KMI     ! Model index 
@@ -37,8 +37,10 @@ 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(:,:,:),OPTIONAL,   INTENT(IN)    :: PCST    ! Ice crystal C. at t
 !
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCIS    ! Ice crystal C. source
+REAL, DIMENSION(:,:,:),OPTIONAL,   INTENT(INOUT) :: PCSS    ! Snow/aggregates C. source  
 !
 END SUBROUTINE LIMA_COLD_SLOW_PROCESSES
 END INTERFACE
@@ -49,7 +51,7 @@ END MODULE MODI_LIMA_COLD_SLOW_PROCESSES
                                            PRHODREF, PEXNREF, PPABST,                &
                                            PTHT, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, &
                                            PTHS, PRVS, PRIS, PRSS,                   &
-                                           PCIT, PCIS                                )
+                                           PCIT, PCIS, PCST, PCSS                    )
 !     ################################################################################
 !
 !!    PURPOSE
@@ -81,6 +83,7 @@ END MODULE MODI_LIMA_COLD_SLOW_PROCESSES
 !  P. Wautelet 28/05/2019: move COUNTJV function to tools.f90
 !  P. Wautelet    03/2020: use the new data structures and subroutines for budgets
 !  J. Wurtz       03/2022: new snow characteristics
+!  M. Taufour     07/2022: add concentration for snow, graupel, hail
 !
 !-------------------------------------------------------------------------------
 !
@@ -93,10 +96,10 @@ use modd_budget,          only: lbu_enable, nbumod,
                                 tbudgets
 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
+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,              &
-                                XALPHAI, XALPHAS, XNUI, XNUS
+                                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,     &
                                 XC0DEPSI, XC1DEPSI, XR0DEPSI, XR1DEPSI,      &
@@ -137,8 +140,10 @@ 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(:,:,:),OPTIONAL,   INTENT(IN)    :: PCST    ! Snow/aggregates C. at t 
 !
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCIS    ! Ice crystal C. source
+REAL, DIMENSION(:,:,:),OPTIONAL,   INTENT(INOUT) :: PCSS    ! Snow/aggregates C. source  
 !
 !*       0.2   Declarations of local variables :
 !
@@ -156,6 +161,7 @@ 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 :: ZCST    ! Snow/aggregate conc. at t !
 !
 REAL, DIMENSION(:), ALLOCATABLE :: ZRVS    ! Water vapor m.r. source
 REAL, DIMENSION(:), ALLOCATABLE :: ZRIS    ! Pristine ice m.r. source
@@ -164,6 +170,7 @@ 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 :: ZCSS    ! Snow/aggregates conc. source 
 !
 REAL, DIMENSION(:), ALLOCATABLE &
                    :: ZRHODREF, & ! RHO Dry REFerence
@@ -248,6 +255,8 @@ IF( IMICRO >= 1 ) THEN
    ALLOCATE(ZTHS(IMICRO))
 !
    ALLOCATE(ZCIS(IMICRO))
+   if (NMOM_S.GE.2) ALLOCATE(ZCST(IMICRO))
+   if (NMOM_S.GE.2) ALLOCATE(ZCSS(IMICRO)) 
 ! 
    ALLOCATE(ZRHODREF(IMICRO)) 
    ALLOCATE(ZZT(IMICRO)) 
@@ -270,6 +279,10 @@ IF( IMICRO >= 1 ) THEN
       ZTHS(JL) = PTHS(I1(JL),I2(JL),I3(JL))
 !
       ZCIS(JL) = PCIS(I1(JL),I2(JL),I3(JL))
+      if (NMOM_S.GE.2) then
+              ZCST(JL) = PCST(I1(JL),I2(JL),I3(JL)) 
+              ZCSS(JL) = PCSS(I1(JL),I2(JL),I3(JL)) 
+      end if
 !
       ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL))
       ZZT(JL)      = ZT(I1(JL),I2(JL),I3(JL))
@@ -326,6 +339,10 @@ IF( IMICRO >= 1 ) THEN
          ZLBDAS(:) = MAX(MIN(XLBDAS_MAX, 10**(6.226-0.0106*ZZT(:))),XLBDAS_MIN)
       END WHERE
       ZLBDAS(:) = ZLBDAS(:) * XTRANS_MP_GAMMAS
+   ELSE IF (NMOM_S.GE.2) THEN
+	WHERE (ZRST(:)>XRTMIN(5) .AND. ZCST(:)>XCTMIN(5))
+                ZLBDAS(:) = ( XLBS*ZCST(:) / ZRST(:) )**XLBEXS 
+        END WHERE
    ELSE
       WHERE (ZRST(:)>XRTMIN(5) )
          ZLBDAS(:) = MAX(MIN(XLBDAS_MAX,XLBS*( ZRHODREF(:)*ZRST(:) )**XLBEXS),XLBDAS_MIN)
@@ -352,21 +369,45 @@ IF( IMICRO >= 1 ) THEN
         if ( lbudget_rs ) call Budget_store_init( tbudgets(NBUDGET_RS), 'CNVI', prss(:, :, :) * prhodj(:, :, :) )
         if ( lbudget_sv ) &
           call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CNVI', pcis(:, :, :) * prhodj(:, :, :) )
+        if ( lbudget_sv .AND. NMOM_S.GE.2) &
+          call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ns), 'CNVI', pcss(:, :, :) * prhodj(:, :, :) )
       end if
-
-      ZZW(:) = 0.0
-      WHERE ( ZLBDAS(:)<XLBDASCNVI_MAX .AND. (ZRST(:)>XRTMIN(5)) &
-                                       .AND. (ZSSI(:)<0.0)       )
-         ZZW(:) = (ZLBDAS(:)*XDSCNVI_LIM)**(XALPHAS)
-         ZZX(:) = ( -ZSSI(:)/ZAI(:) ) * (XNS*ZRST(:)*ZLBDAS(:)**XBS) * (ZZW(:)**XNUS) * EXP(-ZZW(:))
-!
-         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
+      ZZW(:) = 0.0
+      if(NMOM_S.GE.2) THEN
+        WHERE ( ZLBDAS(:)<XLBDASCNVI_MAX .AND. (ZRST(:)>XRTMIN(5)) .AND.(ZCST(:)>XCTMIN(5))   &
+                                         .AND. (ZSSI(:)<0.0)       )
+           ZZW(:) = (ZLBDAS(:)*XDSCNVI_LIM)**(XALPHAS)
+           ZZX(:) = ( -ZSSI(:)/ZAI(:) ) * (ZCST(:)) * (ZZW(:)**XNUI) & 
+                                                        * EXP(-ZZW(:))
+!
+           ZZW(:) = MIN( ( XR0DEPSI+XR1DEPSI*ZCJ(:) )*ZZX(:),ZRSS(:) )
+           ZRIS(:) = ZRIS(:) + ZZW(:)
+           ZRSS(:) = ZRSS(:) - ZZW(:)
+!
+           ZZW(:) = MIN(ZZW(:)*( XC0DEPSI+XC1DEPSI*ZCJ(:) )/( XR0DEPSI+XR1DEPSI*ZCJ(:)),ZCSS(:) )
+           ZCIS(:) = ZCIS(:) + ZZW(:)
+           ZCSS(:) = ZCSS(:) - ZZW(:)
+        END WHERE
+      else
+        WHERE ( ZRST(:)>XRTMIN(5) )
+           ZLBDAS(:)  = MIN( XLBDAS_MAX,                                           &
+                             XLBS*( ZRHODREF(:)*MAX( ZRST(:),XRTMIN(5) ) )**XLBEXS )
+        END WHERE
+        WHERE ( ZLBDAS(:)<XLBDASCNVI_MAX .AND. (ZRST(:)>XRTMIN(5)) &
+                                         .AND. (ZSSI(:)<0.0)       )
+           ZZW(:) = (ZLBDAS(:)*XDSCNVI_LIM)**(XALPHAS)
+           ZZX(:) = ( -ZSSI(:)/ZAI(:) ) * (XCCS*ZLBDAS(:)**XCXS)/ZRHODREF(:) * (ZZW(:)**XNUI) &
+                                                                       * EXP(-ZZW(:))
+!
+           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
+      end if
 !
 ! Budget storage
       if ( nbumod == kmi .and. lbu_enable ) then
@@ -376,6 +417,9 @@ IF( IMICRO >= 1 ) THEN
                                                Unpack( zrss(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) )
         if ( lbudget_sv ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CNVI', &
                                                Unpack( zcis(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) )
+        if ( lbudget_sv .AND. NMOM_S.GE.2 ) &
+            call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ns), 'CNVI', &
+                                               Unpack( zcss(:), mask = gmicro(:, :, :), field = pcss(:, :, :) ) * prhodj(:, :, :) )
       end if
 !
 !
@@ -390,18 +434,28 @@ IF( IMICRO >= 1 ) THEN
       end if
 
       ZZW(:) = 0.0
-      WHERE ( (ZRST(:)>XRTMIN(5)) .AND. (ZRSS(:)>ZRTMIN(5)) )
-         ZZW(:) = ( ZRST(:)*ZSSI(:)/(ZAI(:)) ) *                                            &
-              ( X0DEPS*ZLBDAS(:)**XEX0DEPS +                                                &
-              (X1DEPS*ZCJ(:)*(1+0.5*(XFVELOS/ZLBDAS(:))**XALPHAS)**(-XNUS+XEX1DEPS/XALPHAS) * &
-              (ZLBDAS(:))**(XEX1DEPS+XBS)))
+      if (NMOM_S.GE.2) then
+         WHERE ( (ZRST(:)>XRTMIN(5)) .AND. (ZRSS(:)>ZRTMIN(5)) )
+            ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*ZAI(:)) ) * ZCST *                   &
+                     ( 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
+      else
+         WHERE ( (ZRST(:)>XRTMIN(5)) .AND. (ZRSS(:)>ZRTMIN(5)) )
+            ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*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
+            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
+      end if
 ! Budget storage
       if ( nbumod == kmi .and. lbu_enable ) then
         if ( lbudget_th ) call Budget_store_end( tbudgets(NBUDGET_TH), 'DEPS', &
@@ -422,23 +476,47 @@ IF( IMICRO >= 1 ) THEN
                                                Unpack( zrss(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) )
         if ( lbudget_sv ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CNVS', &
                                                Unpack( zcis(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) )
+        if ( lbudget_sv .AND. NMOM_S.GE.2 ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ns), 'CNVS', &
+                                               Unpack( zcss(:), mask = gmicro(:, :, :), field = pcss(:, :, :) ) * prhodj(:, :, :) )
       end if
 
       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(:))
-!
-         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
+      if (NMOM_S.GE.2) then
+         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(:)
+            ZCSS(:) = ZCSS(:) + ZZW(:)
+         END WHERE
+      else
+         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
+      end if
 !
 ! Budget storage
       if ( nbumod == kmi .and. lbu_enable ) then
@@ -448,6 +526,8 @@ IF( IMICRO >= 1 ) THEN
                                                Unpack( zrss(:), mask = gmicro(:, :, :), field = prss(:, :, :) ) * prhodj(:, :, :) )
         if ( lbudget_sv ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'CNVS', &
                                                Unpack( zcis(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) )
+        if ( lbudget_sv .AND. NMOM_S.GE.2 ) call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ns), 'CNVS', &
+                                               Unpack( zcss(:), mask = gmicro(:, :, :), field = pcss(:, :, :) ) * prhodj(:, :, :) )
       end if
 !
 !
@@ -462,20 +542,36 @@ IF( IMICRO >= 1 ) THEN
         if ( lbudget_sv ) call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'AGGS', &
                                                Unpack( zcis(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) )
       end if
-
-      WHERE ( (ZRIT(:)>XRTMIN(4)) .AND. (ZRST(:)>XRTMIN(5)) .AND. (ZRIS(:)>ZRTMIN(4)) &
-                                                            .AND. (ZCIS(:)>ZCTMIN(4)) )
-         ZZW1(:,3) = (ZLBDAI(:) / ZLBDAS(:))**3
-         ZZW1(:,1) = (ZCIT(:)*(XNS*ZRST(:)*ZLBDAS(:)**XBS)*EXP(XCOLEXIS*(ZZT(:)-XTT) ))*ZRHODREF(:) &
-                                                    / (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
+!
+      if (NMOM_S.GE.2) then
+         WHERE ( (ZRIT(:)>XRTMIN(4)) .AND. (ZRST(:)>XRTMIN(5)) .AND. (ZRIS(:)>ZRTMIN(4)) &
+                                                               .AND. (ZCIS(:)>ZCTMIN(4)) )
+              ZZW1(:,3) = (ZLBDAI(:) / ZLBDAS(:))**3
+              ZZW1(:,1) = (ZCIT(:)*ZCST(:)*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
+      else
+         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)/ZRHODREF(:)*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
+      end if
 ! Budget storage
       if ( nbumod == kmi .and. lbu_enable ) then
         if ( lbudget_ri ) call Budget_store_end( tbudgets(NBUDGET_RI), 'AGGS', &
@@ -501,6 +597,11 @@ IF( IMICRO >= 1 ) THEN
 !
   ZW(:,:,:) = PCIS(:,:,:)
   PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
+  if (NMOM_S.GE.2) then
+    ZW(:,:,:) = PCSS(:,:,:)
+    PCSS(:,:,:) = UNPACK( ZCSS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
+  end if
+
 !
   ZW(:,:,:) = PTHS(:,:,:)
   PTHS(:,:,:) = UNPACK( ZTHS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
@@ -516,7 +617,9 @@ IF( IMICRO >= 1 ) THEN
   DEALLOCATE(ZRIS)
   DEALLOCATE(ZRSS)
   DEALLOCATE(ZTHS)
-  DEALLOCATE(ZCIS)  
+  DEALLOCATE(ZCIS)
+  if (NMOM_S.GE.2)  DEALLOCATE(ZCSS)  
+  if (NMOM_S.GE.2)  DEALLOCATE(ZCST)  
   DEALLOCATE(ZRHODREF) 
   DEALLOCATE(ZZT) 
   DEALLOCATE(ZPRES) 
diff --git a/src/MNH/lima_collisional_ice_breakup.f90 b/src/MNH/lima_collisional_ice_breakup.f90
index c5afbb591..3c22bf960 100644
--- a/src/MNH/lima_collisional_ice_breakup.f90
+++ b/src/MNH/lima_collisional_ice_breakup.f90
@@ -10,7 +10,7 @@
 INTERFACE
    SUBROUTINE LIMA_COLLISIONAL_ICE_BREAKUP (LDCOMPUTE,              &
                                             PRHODREF,               &
-                                            PRIT, PRST, PRGT, PCIT, &
+                                            PRIT, PRST, PRGT, PCIT, PCST, PCGT, &
                                             PLBDS, PLBDG,           &
                                             P_RI_CIBU, P_CI_CIBU    )
 !
@@ -22,6 +22,8 @@ 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 
 !
@@ -35,7 +37,7 @@ END MODULE MODI_LIMA_COLLISIONAL_ICE_BREAKUP
 !     #######################################################################
       SUBROUTINE LIMA_COLLISIONAL_ICE_BREAKUP (LDCOMPUTE,              &
                                                PRHODREF,               &
-                                               PRIT, PRST, PRGT, PCIT, &
+                                               PRIT, PRST, PRGT, PCIT, PCST, PCGT, &
                                                PLBDS, PLBDG,           &
                                                P_RI_CIBU, P_CI_CIBU    )
 !     #######################################################################
@@ -83,6 +85,8 @@ 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 
 !
@@ -102,7 +106,7 @@ INTEGER, PARAMETER                 :: I_SEED_PARAM = 26032012
 INTEGER, DIMENSION(:), ALLOCATABLE :: I_SEED
 INTEGER                            :: NI_SEED
 !
-REAL,    DIMENSION(:), ALLOCATABLE :: ZVEC1_S, ZVEC1_S1, ZVEC1_S2,  & ! Work vectors
+REAL,    DIMENSION(:), ALLOCATABLE :: ZVEC1_S, ZVEC1_SW, ZVEC1_S1, ZVEC1_S2,  & ! Work vectors
                                       ZVEC1_S3, ZVEC1_S4,           &
                                       ZVEC1_S11, ZVEC1_S12,         & ! for snow
                                       ZVEC1_S21, ZVEC1_S22,         &
@@ -174,6 +178,7 @@ IF (ICIBU > 0) THEN
 !       1.3.1.0 allocations
 !
   ALLOCATE(ZVEC1_S(ICIBU))
+  ALLOCATE(ZVEC1_SW(ICIBU))
   ALLOCATE(ZVEC1_S1(ICIBU))
   ALLOCATE(ZVEC1_S2(ICIBU))
   ALLOCATE(ZVEC1_S3(ICIBU))
@@ -195,6 +200,7 @@ IF (ICIBU > 0) THEN
 !       1.3.1.1 select the PLBDS
 !
   ZVEC1_S(:) = PACK( PLBDS(:),MASK=GCIBU(:) )
+  ZVEC1_SW(:)= ( XFVELOS**XALPHAS + ZVEC1_S(:)**XALPHAS ) ** (1./XALPHAS) ! modified equivalent lambda 
 !
 !
 !       1.3.1.2 find the next lower indice for the PLBDS in the
@@ -233,29 +239,53 @@ IF (ICIBU > 0) THEN
 !
 !
 !       1.3.1.5 perform the linear interpolation of the
-!               normalized "XDS"-moment of the incomplete gamma function
+!               normalized "XBS"-moment of the incomplete gamma function
 !
 ! For lower boundary (0.2 mm)
-  ZVEC1_S21(1:ICIBU) = XGAMINC_CIBU_S(2,IVEC2_S1(1:ICIBU)+1) *  ZVEC2_S1(1:ICIBU) &
-                     - XGAMINC_CIBU_S(2,IVEC2_S1(1:ICIBU))   * (ZVEC2_S1(1:ICIBU)-1.0)
+  ZVEC1_S31(1:ICIBU) = XGAMINC_CIBU_S(3,IVEC2_S1(1:ICIBU)+1) *  ZVEC2_S1(1:ICIBU) &
+                     - XGAMINC_CIBU_S(3,IVEC2_S1(1:ICIBU))   * (ZVEC2_S1(1:ICIBU)-1.0)
 !
 ! For upper boundary (1 mm)
-  ZVEC1_S22(1:ICIBU) = XGAMINC_CIBU_S(2,IVEC2_S2(1:ICIBU)+1) *  ZVEC2_S2(1:ICIBU) &
-                     - XGAMINC_CIBU_S(2,IVEC2_S2(1:ICIBU))   * (ZVEC2_S2(1:ICIBU)-1.0)
+  ZVEC1_S32(1:ICIBU) = XGAMINC_CIBU_S(3,IVEC2_S2(1:ICIBU)+1) *  ZVEC2_S2(1:ICIBU) &
+                     - XGAMINC_CIBU_S(3,IVEC2_S2(1:ICIBU))   * (ZVEC2_S2(1:ICIBU)-1.0)
 !
 ! From 0.2 mm to 1 mm we need
-  ZVEC1_S2(1:ICIBU) = XMOMGS_CIBU_1 * (ZVEC1_S22(1:ICIBU) - ZVEC1_S21(1:ICIBU))
+  ZVEC1_S3(1:ICIBU) = XMOMGS_CIBU_2 * (ZVEC1_S32(1:ICIBU) - ZVEC1_S31(1:ICIBU))
+!
+!
+!       1.3.1.2 find the next lower indice for the PLBDS in the
+!               geometrical set of Lbda_s used to tabulate some moments of the
+!               incomplete gamma function, for boundary 1 (0.2 mm) for modified lambda (Wurtz snow fall speed)
+!
+  ZVEC2_S1(1:ICIBU) = MAX( 1.0001, MIN( FLOAT(NGAMINC)-0.0001,XCIBUINTP_S  &
+                      * LOG( ZVEC1_SW(1:ICIBU) ) + XCIBUINTP1_S  ) )
+  IVEC2_S1(1:ICIBU) = INT( ZVEC2_S1(1:ICIBU) )
+  ZVEC2_S1(1:ICIBU) = ZVEC2_S1(1:ICIBU) - FLOAT( IVEC2_S1(1:ICIBU) )
+!
+!
+!       1.3.1.3 find the next lower indice for the PLBDS in the
+!               geometrical set of Lbda_s used to tabulate some moments of the
+!               incomplete gamma function, for boundary 2 (1 mm) for modified lambda (Wurtz snow fall speed)
+!
+  ZVEC2_S2(1:ICIBU) = MAX( 1.0001, MIN( FLOAT(NGAMINC)-0.0001,XCIBUINTP_S  &
+                      * LOG( ZVEC1_SW(1:ICIBU) ) + XCIBUINTP2_S  ) )
+  IVEC2_S2(1:ICIBU) = INT( ZVEC2_S2(1:ICIBU) )
+  ZVEC2_S2(1:ICIBU) = ZVEC2_S2(1:ICIBU) - FLOAT( IVEC2_S2(1:ICIBU) )
+!
+!
+!       1.3.1.5 perform the linear interpolation of the
+!               normalized "XDS"-moment of the incomplete gamma function
 !
 ! For lower boundary (0.2 mm)
-  ZVEC1_S31(1:ICIBU) = XGAMINC_CIBU_S(3,IVEC2_S1(1:ICIBU)+1) *  ZVEC2_S1(1:ICIBU) &
-                     - XGAMINC_CIBU_S(3,IVEC2_S1(1:ICIBU))   * (ZVEC2_S1(1:ICIBU)-1.0)
+  ZVEC1_S21(1:ICIBU) = XGAMINC_CIBU_S(2,IVEC2_S1(1:ICIBU)+1) *  ZVEC2_S1(1:ICIBU) &
+                     - XGAMINC_CIBU_S(2,IVEC2_S1(1:ICIBU))   * (ZVEC2_S1(1:ICIBU)-1.0)
 !
 ! For upper boundary (1 mm)
-  ZVEC1_S32(1:ICIBU) = XGAMINC_CIBU_S(3,IVEC2_S2(1:ICIBU)+1) *  ZVEC2_S2(1:ICIBU) &
-                     - XGAMINC_CIBU_S(3,IVEC2_S2(1:ICIBU))   * (ZVEC2_S2(1:ICIBU)-1.0)
+  ZVEC1_S22(1:ICIBU) = XGAMINC_CIBU_S(2,IVEC2_S2(1:ICIBU)+1) *  ZVEC2_S2(1:ICIBU) &
+                     - XGAMINC_CIBU_S(2,IVEC2_S2(1:ICIBU))   * (ZVEC2_S2(1:ICIBU)-1.0)
 !
 ! From 0.2 mm to 1 mm we need
-  ZVEC1_S3(1:ICIBU) = XMOMGS_CIBU_2 * (ZVEC1_S32(1:ICIBU) - ZVEC1_S31(1:ICIBU))
+  ZVEC1_S2(1:ICIBU) = XMOMGS_CIBU_1 * (ZVEC1_S22(1:ICIBU) - ZVEC1_S21(1:ICIBU))
 !
 !
 !       1.3.1.6 perform the linear interpolation of the
@@ -331,11 +361,11 @@ IF (ICIBU > 0) THEN
 !        1.3.3 To compute final "CIBU" contributions
 !
   ZFRAG_CIBU(:) = UNPACK ( VECTOR=ZFRAGMENTS(:),MASK=GCIBU,FIELD=0.0 )
-  ZNI_CIBU(:) = ZFRAG_CIBU(:) * (XFACTOR_CIBU_NI * PRST(:) / (PRHODREF(:)**XCEXVT)) * &
+  ZNI_CIBU(:) = ZFRAG_CIBU(:) * (XFACTOR_CIBU_NI * PCST(:) * PCGT(:) / (PRHODREF(:)**XCEXVT)) * &
                 (XCG * ZINTG_GRAUPEL_1(:) * ZINTG_SNOW_1(:) *                                               &
-                 PLBDS(:)**(XBS) * PLBDG(:)**(XCXG-(XDG+2.0))                                             &
+                 PLBDG(:)**(-(XDG+2.0))                                             &
                - XCS * ZINTG_GRAUPEL_2(:) * ZINTG_SNOW_2(:) *                                               &
-                 PLBDS(:)**(-XDS+XBS) * PLBDG(:)**(XCXG-2.0) *                                            &
+                 PLBDS(:)**(-XDS) * PLBDG(:)**(-2.0) *                                            &
                  (1+(XFVELOS/PLBDS(:))**XALPHAS)**(-XNUS-XDS/XALPHAS) )
 
   P_CI_CIBU(:) = MAX(ZNI_CIBU(:),0.)
@@ -343,11 +373,11 @@ IF (ICIBU > 0) THEN
   DEALLOCATE(ZFRAGMENTS)
 !
 ! Max value of rs removed by CIBU
-  ZRI_CIBU(:) = (XFACTOR_CIBU_RI * PRST(:) / (PRHODREF(:)**XCEXVT)) * &
+  ZRI_CIBU(:) = (XFACTOR_CIBU_RI * PCST(:) * PCGT(:) / (PRHODREF(:)**XCEXVT)) * &
                  (XCG * ZINTG_GRAUPEL_1(:) * ZINTG_SNOW_3(:) *                              &
-                  PLBDG(:)**(XCXG-(XDG+2.0))                                               &
+                  PLBDS(:)**(-XBS) * PLBDG(:)**(-(XDG+2.0))                                               &
                 - XCS * ZINTG_GRAUPEL_2(:) * ZINTG_SNOW_4(:) *                              &
-                  PLBDS(:)**(-XDS) * PLBDG(:)**(XCXG-2.0) *                               &
+                  PLBDS(:)**(-XBS-XDS) * PLBDG(:)**(-2.0) *                               &
                   (1+(XFVELOS/PLBDS(:))**XALPHAS)**(-XNUS-(XBS+XDS)/XALPHAS) )
 !
 ! The value of rs removed by CIBU is determined by the mean mass of pristine ice
@@ -360,6 +390,7 @@ IF (ICIBU > 0) THEN
   P_RI_CIBU(:) = MAX(ZRI_CIBU(:), 0.)
 !
   DEALLOCATE(ZVEC1_S)
+  DEALLOCATE(ZVEC1_SW)
   DEALLOCATE(ZVEC1_S1)
   DEALLOCATE(ZVEC1_S2)
   DEALLOCATE(ZVEC1_S3)
diff --git a/src/MNH/lima_conversion_melting_snow.f90 b/src/MNH/lima_conversion_melting_snow.f90
index d1aa60aa4..9b6bf0912 100644
--- a/src/MNH/lima_conversion_melting_snow.f90
+++ b/src/MNH/lima_conversion_melting_snow.f90
@@ -10,8 +10,8 @@
 INTERFACE
    SUBROUTINE LIMA_CONVERSION_MELTING_SNOW (LDCOMPUTE,                          &
                                             PRHODREF, PPRES, PT, PKA, PDV, PCJ, &
-                                            PRVT, PRST, PLBDS,                  &
-                                            P_RS_CMEL                           )
+                                            PRVT, PRST, PCST, PLBDS,            &
+                                            P_RS_CMEL, P_CS_CMEL                )
 !
 LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
 !
@@ -23,10 +23,12 @@ 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)    :: 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
@@ -35,8 +37,8 @@ END MODULE MODI_LIMA_CONVERSION_MELTING_SNOW
 !     ##############################################################################
       SUBROUTINE LIMA_CONVERSION_MELTING_SNOW (LDCOMPUTE,                          &
                                                PRHODREF, PPRES, PT, PKA, PDV, PCJ, &
-                                               PRVT, PRST, PLBDS,                  &
-                                               P_RS_CMEL                           )
+                                               PRVT, PRST, PCST, PLBDS,            &
+                                               P_RS_CMEL, P_CS_CMEL                )
 !     ##############################################################################
 !
 !!    PURPOSE
@@ -80,10 +82,12 @@ 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)    :: 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
 !
 !*       0.2   Declarations of local variables :
 !
@@ -97,6 +101,7 @@ REAL, DIMENSION(SIZE(PRST)) :: ZW ! work arrays
 !
 !
 P_RS_CMEL(:)=0.
+P_CS_CMEL(:)=0.
 !
 ZW(:) = 0.0
 WHERE( (PRST(:)>XRTMIN(5)) .AND. (PT(:)>XTT) .AND. LDCOMPUTE(:) )
@@ -107,13 +112,14 @@ WHERE( (PRST(:)>XRTMIN(5)) .AND. (PT(:)>XTT) .AND. LDCOMPUTE(:) )
 !
 ! compute RSMLT
 !
-   ZW(:)  = XFSCVMG*MAX( 0.0,( -ZW(:) * PRST(:) *                        &
+   ZW(:)  = XFSCVMG*MAX( 0.0,( -ZW(:) * PCST(:) *                        &
                                ( X0DEPS*PLBDS(:)**XEX0DEPS +             &
                                  X1DEPS*PCJ(:)*PLBDS(:)**(XEX1DEPS+XBS)* &
                                    (1+0.5*(XFVELOS/PLBDS(:))**XALPHAS)**(-XNUS+XEX1DEPS/XALPHAS)) ))
 ! On ne tient pas compte de la collection de pluie et gouttelettes par la neige si T>0 !!!! 
 ! Note that no heat is exchanged because the graupeln produced are still icy!!!
    P_RS_CMEL(:) = - ZW(:)
+   P_CS_CMEL(:) = - ZW(:) * PCST(:) / PRST(:)
 !
 END WHERE
 !
diff --git a/src/MNH/lima_droplets_riming_snow.f90 b/src/MNH/lima_droplets_riming_snow.f90
index 4e650743e..ae585bbf1 100644
--- a/src/MNH/lima_droplets_riming_snow.f90
+++ b/src/MNH/lima_droplets_riming_snow.f90
@@ -8,11 +8,11 @@
 !      #################################
 !
 INTERFACE
-   SUBROUTINE LIMA_DROPLETS_RIMING_SNOW (PTSTEP,  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                      )
+   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
@@ -20,9 +20,10 @@ 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)    :: PRCT    ! Cloud water mr 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)    :: 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 ! 
@@ -32,6 +33,7 @@ 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
@@ -43,11 +45,11 @@ END INTERFACE
 END MODULE MODI_LIMA_DROPLETS_RIMING_SNOW
 !
 !     #########################################################################################
-      SUBROUTINE LIMA_DROPLETS_RIMING_SNOW (PTSTEP, 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                      )
+      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
@@ -90,9 +92,10 @@ LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
 REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF    ! 
 REAL, DIMENSION(:),   INTENT(IN)    :: PT   ! 
 !
-REAL, DIMENSION(:),   INTENT(IN)    :: PRCT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PCCT    ! 
-REAL, DIMENSION(:),   INTENT(IN)    :: PRST    ! 
+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 ! 
@@ -101,6 +104,7 @@ REAL, DIMENSION(:),   INTENT(IN)    :: PLSFACT !
 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_TH_RIM
@@ -112,8 +116,8 @@ REAL, DIMENSION(:),   INTENT(OUT)   :: P_RS_HMS
 !
 REAL,    DIMENSION(SIZE(PRCT))  :: ZZW1, ZZW2, ZZW3, ZZW4, ZZW5
 !
-INTEGER, DIMENSION(SIZE(PRCT))  :: IVEC1,IVEC2      ! Vectors of indices
-REAL,    DIMENSION(SIZE(PRCT))  :: ZVEC1,ZVEC2      ! Work vectors
+INTEGER, DIMENSION(SIZE(PRCT))  :: IVEC1,IVEC2        ! Vectors of indices
+REAL,    DIMENSION(SIZE(PRCT))  :: ZVEC1,ZVEC2,ZVEC1W ! Work vectors
 INTEGER                         :: JI
 !
 !-------------------------------------------------------------------------------
@@ -128,37 +132,38 @@ DO JI = 1, SIZE(PRCT)
    IF ( PRCT(JI)>XRTMIN(2) .AND. PRST(JI)>XRTMIN(5) .AND. PT(JI)<XTT .AND. LDCOMPUTE(JI) ) THEN
 !
       ZVEC1(JI) = PLBDS(JI)
+      ZVEC1W(JI)= ( XFVELOS**XALPHAS + PLBDS(JI)**XALPHAS ) ** (1./XALPHAS) ! modified equivalent lambda 
 !
-!        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
+!        2.     perform the linear interpolation of the normalized
+!               "2+XDS"-moment of the incomplete gamma function using the modified equivalent lambda
 !
       ZVEC2(JI) = MAX( 1.0001, MIN( REAL(NGAMINC)-0.0001,           &
-                       XRIMINTP1 * LOG( ZVEC1(JI) ) + XRIMINTP2 ) )
+                       XRIMINTP1 * LOG( ZVEC1W(JI) ) + XRIMINTP2 ) )
       IVEC2(JI) = INT( ZVEC2(JI) )
       ZVEC2(JI) = ZVEC2(JI) - REAL( IVEC2(JI) )
 !
-!        2.     perform the linear interpolation of the normalized
-!               "2+XDS"-moment of the incomplete gamma function
-!
-      ZVEC1(JI) =   XGAMINC_RIM1( IVEC2(JI)+1 )* ZVEC2(JI)      &
+      ZVEC1(JI) =  XGAMINC_RIM1( IVEC2(JI)+1 )* ZVEC2(JI)      &
                  - XGAMINC_RIM1( IVEC2(JI)   )*(ZVEC2(JI) - 1.0)
       ZZW1(JI) = ZVEC1(JI)
 !
 !        3.     perform the linear interpolation of the normalized
 !               "XBS"-moment of the incomplete gamma function
 !
-      ZVEC1(JI) =  XGAMINC_RIM2( IVEC2(JI)+1 )* ZVEC2(JI)      &
+      ZVEC2(JI) = MAX( 1.0001, MIN( REAL(NGAMINC)-0.0001,           &
+                       XRIMINTP1 * LOG( ZVEC1(JI) ) + XRIMINTP2 ) )
+      IVEC2(JI) = INT( ZVEC2(JI) )
+      ZVEC2(JI) = ZVEC2(JI) - REAL( IVEC2(JI) )
+!
+      ZVEC1(JI) = XGAMINC_RIM2( IVEC2(JI)+1 )* ZVEC2(JI)      &
                 - XGAMINC_RIM2( IVEC2(JI)   )*(ZVEC2(JI) - 1.0)
       ZZW2(JI) = ZVEC1(JI)
 !
 !        4.     riming
 !
    ! Cloud droplets collected
-      P_RC_RIM(JI) = - XCRIMSS  * PRCT(JI) * PRST(JI)*(1+(XFVELOS/PLBDS(JI))**XALPHAS)**(-XNUS+XEXCRIMSS/XALPHAS) &
-                                         * PRHODREF(JI)**(-XCEXVT+1) &
-                                         * (PLBDS(JI)) ** (XEXCRIMSS+XBS)
-      P_CC_RIM(JI) = P_RC_RIM(JI) *(PCCT(JI)/PRCT(JI)) ! Lambda_c**3
+      P_RC_RIM(JI) = - XCRIMSS  * PRCT(JI) * PCST(JI)*(1+(XFVELOS/PLBDS(JI))**XALPHAS)**(-XNUS+XEXCRIMSS/XALPHAS) &
+                                * PRHODREF(JI)**(-XCEXVT+1) * PLBDS(JI)**XEXCRIMSS
+      P_CC_RIM(JI) = P_RC_RIM(JI) * PCCT(JI)/PRCT(JI) ! Lambda_c**3
    !
    ! Cloud droplets collected on small aggregates add to snow
       P_RS_RIM(JI) = - P_RC_RIM(JI) * ZZW1(JI)
@@ -168,19 +173,20 @@ DO JI = 1, SIZE(PRCT)
    !
       IF (LMURAKAMI) THEN
    ! Graupel formation based on Murakami
-         ZVEC1(JI) =  XGAMINC_RIM4( IVEC2(JI)+1 )* ZVEC2(JI)      &
+         ZVEC1(JI) = XGAMINC_RIM4( IVEC2(JI)+1 )* ZVEC2(JI)      &
                    - XGAMINC_RIM4( IVEC2(JI)   )*(ZVEC2(JI) - 1.0)
          ZZW5(JI) = ZVEC1(JI)
-         ZZW3(JI) = XSRIMCG *PRHODREF(JI)*PRST(JI)* PLBDS(JI)**(XEXSRIMCG+XBS) * (1.0 - ZZW2(JI))!/(PTSTEP*PRHODREF(JI))
-         ZZW3(JI) = (P_RG_RIM(JI))*ZZW3(JI)/ &
+         ZZW3(JI) = XSRIMCG * PRHODREF(JI) * PCST(JI) * PLBDS(JI)**XEXSRIMCG * (1.0 - ZZW2(JI))!/(PTSTEP*PRHODREF(JI))
+         ZZW3(JI) = P_RG_RIM(JI)*ZZW3(JI)/ &
                        MAX(1.E-10, & !-20
-                           XSRIMCG3*XSRIMCG2*PRST(JI)*PRHODREF(JI)*PLBDS(JI)**(XEXSRIMCG2)*(1.-ZZW5(JI))- &
+                           XSRIMCG3*XSRIMCG2*PCST(JI)*PRHODREF(JI)*PLBDS(JI)**(XEXSRIMCG2)*(1.-ZZW5(JI))- &
                            XSRIMCG3*ZZW3(JI))
       ELSE
       ! Large aggregates collecting droplets add to graupel (instant process ???)
          ZZW3(JI) = PRST(JI)*(1.0 - ZZW2(JI))/PTSTEP
       END IF
       P_RS_RIM(JI) = P_RS_RIM(JI) - ZZW3(JI) 
+      P_CS_RIM(JI) = -ZZW3(JI) * PCST(JI)/PRST(JI)
       P_RG_RIM(JI) = P_RG_RIM(JI) + ZZW3(JI) 
    !
       P_TH_RIM(JI) = - P_RC_RIM(JI)*(PLSFACT(JI)-PLVFACT(JI))
@@ -189,6 +195,7 @@ DO JI = 1, SIZE(PRCT)
       P_RC_RIM(JI) = 0.
       P_CC_RIM(JI) = 0.
       P_RS_RIM(JI) = 0.
+      P_CS_RIM(JI) = 0.
       P_RG_RIM(JI) = 0.
    END IF
 !
@@ -203,7 +210,7 @@ DO JI = 1, SIZE(PRCT)
                          XHMLINTP1 * LOG( ZVEC1(JI) ) + XHMLINTP2 ) )
       IVEC2(JI) = INT( ZVEC2(JI) )
       ZVEC2(JI) = ZVEC2(JI) - REAL( IVEC2(JI) )
-      ZVEC1(JI) =   XGAMINC_HMC( IVEC2(JI)+1 )* ZVEC2(JI)      &
+      ZVEC1(JI) =  XGAMINC_HMC( IVEC2(JI)+1 )* ZVEC2(JI)      &
                  - XGAMINC_HMC( IVEC2(JI)   )*(ZVEC2(JI) - 1.0)
       ZZW4(JI) = ZVEC1(JI) ! Large droplets
 !
diff --git a/src/MNH/lima_graupel.f90 b/src/MNH/lima_graupel.f90
index 1883891a1..ec51cbc55 100644
--- a/src/MNH/lima_graupel.f90
+++ b/src/MNH/lima_graupel.f90
@@ -11,17 +11,17 @@ INTERFACE
    SUBROUTINE LIMA_GRAUPEL (PTSTEP, LDCOMPUTE,                                     &
                             PRHODREF, PPRES, PT, PKA, PDV, PCJ,                    &
                             PRVT, PRCT, PRRT, PRIT, PRST, PRGT,                    &
-                            PCCT, PCRT, PCIT,                                      &
+                            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_RG_WETG, P_RH_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_RG_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_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_RG, PA_RH                      )
+                            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
@@ -43,6 +43,8 @@ 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   ! 
@@ -60,7 +62,9 @@ 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
@@ -71,6 +75,7 @@ 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
@@ -80,6 +85,7 @@ 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
@@ -89,8 +95,11 @@ 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
@@ -100,17 +109,17 @@ END MODULE MODI_LIMA_GRAUPEL
       SUBROUTINE LIMA_GRAUPEL (PTSTEP, LDCOMPUTE,                                     &
                                PRHODREF, PPRES, PT, PKA, PDV, PCJ,                    &
                                PRVT, PRCT, PRRT, PRIT, PRST, PRGT,                    &
-                               PCCT, PCRT, PCIT,                                      &
+                               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_RG_WETG, P_RH_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_RG_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_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_RG, PA_RH                      )
+                               PA_RI, PA_CI, PA_RS, PA_CS, PA_RG, PA_CG, PA_RH, PA_CH )
 !     #################################################################################
 !
 !!    PURPOSE
@@ -141,7 +150,9 @@ USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCEXVT, LHAIL
 USE MODD_PARAM_LIMA_MIXED, ONLY : XCXG, XDG, X0DEPG, X1DEPG, NGAMINC,                             &
                                   XFCDRYG, XFIDRYG, XCOLIG, XCOLSG, XCOLEXIG, XCOLEXSG,           &
                                   XFSDRYG, XLBSDRYG1, XLBSDRYG2, XLBSDRYG3, XKER_SDRYG,           &
+                                  XFNSDRYG, XLBNSDRYG1, XLBNSDRYG2, XLBNSDRYG3, XKER_N_SDRYG,     &
                                   XFRDRYG, XLBRDRYG1, XLBRDRYG2, XLBRDRYG3, XKER_RDRYG,           &
+                                  XFNRDRYG, XLBNRDRYG1, XLBNRDRYG2, XLBNRDRYG3, XKER_N_RDRYG,     &
                                   XHMTMIN, XHMTMAX, XHMLINTP1, XHMLINTP2, XHM_FACTG, XGAMINC_HMC, &
                                   XEX0DEPG, XEX1DEPG,                                             &
                                   XDRYINTP1R, XDRYINTP1S, XDRYINTP1G,                             &
@@ -173,6 +184,8 @@ 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   ! 
@@ -190,7 +203,9 @@ 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
@@ -201,6 +216,7 @@ 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
@@ -210,6 +226,7 @@ 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
@@ -219,8 +236,11 @@ 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
 !
 !*       0.2   Declarations of local variables :
 !
@@ -230,6 +250,7 @@ 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))  :: ZZW3N, ZZW4N, ZZW6N 
 REAL,    DIMENSION(SIZE(PRCT))  :: ZRDRYG, ZRWETG
 !
 INTEGER, DIMENSION(SIZE(PRCT))  :: IVEC1,IVEC2        ! Vectors of indices
@@ -240,6 +261,7 @@ INTEGER                         :: NHAIL
 !-------------------------------------------------------------------------------
 !
 !
+P_TH_WETG(:) = 0.
 P_RC_WETG(:) = 0.
 P_CC_WETG(:) = 0.
 P_RR_WETG(:) = 0.
@@ -247,9 +269,12 @@ P_CR_WETG(:) = 0.
 P_RI_WETG(:) = 0.
 P_CI_WETG(:) = 0.
 P_RS_WETG(:) = 0.
+P_CS_WETG(:) = 0.
 P_RG_WETG(:) = 0.
+P_CG_WETG(:) = 0.
 P_RH_WETG(:) = 0.
 !
+P_TH_DRYG(:) = 0.
 P_RC_DRYG(:) = 0.
 P_CC_DRYG(:) = 0.
 P_RR_DRYG(:) = 0.
@@ -257,19 +282,24 @@ P_CR_DRYG(:) = 0.
 P_RI_DRYG(:) = 0.
 P_CI_DRYG(:) = 0.
 P_RS_DRYG(:) = 0.
+P_CS_DRYG(:) = 0.
 P_RG_DRYG(:) = 0.
 !
 P_RI_HMG(:) = 0.
 P_CI_HMG(:) = 0.
 P_RG_HMG(:) = 0.
 !
+P_TH_GMLT(:) = 0.
 P_RR_GMLT(:) = 0.
 P_CR_GMLT(:) = 0.
+P_CG_GMLT(:) = 0.
 !
 ZZW1(:) = 0. ! RCDRYG
 ZZW2(:) = 0. ! RIDRYG
 ZZW3(:) = 0. ! RSDRYG
+ZZW3N(:) = 0.! NSDRYG
 ZZW4(:) = 0. ! RRDRYG
+ZZW4N(:) = 0.! NRDRYG
 ZZW5(:) = 0. ! RIWETG
 ZZW6(:) = 0. ! RSWETG
 ZZW7(:) = 0. ! 
@@ -285,15 +315,15 @@ ZRWETG(:) = 0.
 !            --------------------------------------------
 !
 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 
+   ZZW(:) = PCGT(:) * PLBDG(:)**(-XDG-2.0) * PRHODREF(:)**(1-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(:)
+GDRY(:) = PRST(:)>XRTMIN(5) .AND. PRGT(:)>XRTMIN(6) .AND. LDCOMPUTE(:)
 !
 WHERE( GDRY )
 !
@@ -330,19 +360,36 @@ WHERE( GDRY )
                     - Z4(:)*(ZVEC2(:) - 1.0) ) &
        			                                    * (ZVEC1(:) - 1.0)
    ZZW(:) = ZVEC3(:)
-!
    ZZW3(:) = XFSDRYG * ZZW(:) * EXP( XCOLEXSG*(PT(:)-XTT) )       & ! RSDRYG - rs collected by graupel in dry mode
-                    *( PRST(:))*( PLBDG(:)**XCXG )                &
-                    *( PRHODREF(:)**(-XCEXVT) )                   &
+                    *  PRST(:) * PCGT(:)                          &
+                    *  PRHODREF(:)**(1-XCEXVT)                    &
                     *( XLBSDRYG1/( PLBDG(:)**2                ) + &
                        XLBSDRYG2/( PLBDG(:)    * PLBDS(:)     ) + &
                        XLBSDRYG3/(               PLBDS(:)**2) )
+!
+   Z1(:) = GET_XKER_N_SDRYG(IVEC1(:)+1,IVEC2(:)+1)
+   Z2(:) = GET_XKER_N_SDRYG(IVEC1(:)+1,IVEC2(:)  )
+   Z3(:) = GET_XKER_N_SDRYG(IVEC1(:)  ,IVEC2(:)+1)
+   Z4(:) = GET_XKER_N_SDRYG(IVEC1(:)  ,IVEC2(:)  )
+   ZVEC3(:) =  (      Z1(:)* ZVEC2(:)          &
+                    - Z2(:)*(ZVEC2(:) - 1.0) ) &
+      			 	                            *  ZVEC1(:)    &
+                 - (  Z3(:)* ZVEC2(:)          &
+                    - Z4(:)*(ZVEC2(:) - 1.0) ) &
+       			                                    * (ZVEC1(:) - 1.0)
+   ZZW(:) = ZVEC3(:)
+   ZZW3N(:) = XFNSDRYG * ZZW(:) * EXP( XCOLEXSG*(PT(:)-XTT) )        & ! NSDRYG - Ns collected by graupel in dry mode
+                      *  PCST(:) * PCGT(:)                           &
+                      *  PRHODREF(:)**(1-XCEXVT)                     &
+                      *( XLBNSDRYG1/( PLBDG(:)**2                ) + &
+                         XLBNSDRYG2/( PLBDG(:)    * PLBDS(:)     ) + &
+                         XLBNSDRYG3/(               PLBDS(:)**2) )
 END WHERE
 !
 !*           1.c  Collection of rr in the dry mode
 !            -------------------------------------
 !
-GDRY(:) = (PRRT(:)>XRTMIN(3)) .AND. (PRGT(:)>XRTMIN(6)) .AND. LDCOMPUTE(:)
+GDRY(:) = PRRT(:)>XRTMIN(3) .AND. PRGT(:)>XRTMIN(6) .AND. LDCOMPUTE(:)
 !
 WHERE( GDRY )
 !
@@ -379,14 +426,31 @@ WHERE( GDRY )
                     - 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
+   ZZW4(:) = XFRDRYG * ZZW(:)                                     & ! RRDRYG
+                     * PRRT(:) * PCGT(:)                          &
+                     * PRHODREF(:)**(1-XCEXVT)                    &
+                     *( XLBRDRYG1/( PLBDG(:)**2               ) + &
+                        XLBRDRYG2/( PLBDG(:)   * PLBDR(:)     ) + &
+                        XLBRDRYG3/(              PLBDR(:)**2) )
+!
+   Z1(:) = GET_XKER_N_RDRYG(IVEC1(:)+1,IVEC2(:)+1)
+   Z2(:) = GET_XKER_N_RDRYG(IVEC1(:)+1,IVEC2(:)  )
+   Z3(:) = GET_XKER_N_RDRYG(IVEC1(:)  ,IVEC2(:)+1)
+   Z4(:) = GET_XKER_N_RDRYG(IVEC1(:)  ,IVEC2(:)  )
+      ZVEC3(:) =  (   Z1(:)* ZVEC2(:)          &
+                    - Z2(:)*(ZVEC2(:) - 1.0) ) &
+                     			 	             *  ZVEC1(:)   &
+                 - (  Z3(:)* ZVEC2(:)          &
+                    - Z4(:)*(ZVEC2(:) - 1.0) ) &
+                                 			     * (ZVEC1(:) - 1.0)
+   ZZW(:) = ZVEC3(:)
+   ZZW4N(:) = XFNRDRYG * ZZW(:)                                      & ! NRDRYG
+                       * PCRT(:) * PCGT(:)                           &
+                       * PRHODREF(:)**(1-XCEXVT)                     &
+                       *( XLBNRDRYG1/( PLBDG(:)**2               ) + &
+                          XLBNRDRYG2/( PLBDG(:)   * PLBDR(:)     ) + &
+                          XLBNRDRYG3/(              PLBDR(:)**2) )
+   
 END WHERE
 !
 !            1.d Total collection in the dry mode
@@ -401,6 +465,7 @@ 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
+   ZZW6N(:)= ZZW3N(:)/ (XCOLSG*EXP(XCOLEXSG*(PT(:)-XTT)) ) ! NSWETG
 !
    ZZW(:) = PRVT(:)*PPRES(:)/((XMV/XMD)+PRVT(:)) ! Vapor pressure
    ZZW(:) = PKA(:)*(XTT-PT(:)) +                                  &
@@ -408,12 +473,11 @@ WHERE( PRGT(:)>XRTMIN(6) .AND. LDCOMPUTE(:) )
                           *(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(:))) )   )
+   ZRWETG(:)  = MAX( 0.0,                                                        &
+                   ( ZZW(:) * PCGT(:) * ( X0DEPG*       PLBDG(:)**XEX0DEPG +     &
+                                          X1DEPG*PCJ(:)*PLBDG(:)**XEX1DEPG ) +   &
+                   ( ZZW5(:)+ZZW6(:) ) * ( XLMTT + (XCI-XCL)*(XTT-PT(:)) )   )   &
+                   / (XLMTT-XCL*(XTT-PT(:)))                                     )
   !We must agregate, at least, the cold species
    ZRWETG(:)=MAX(ZRWETG(:), ZZW5(:)+ZZW6(:))
 END WHERE
@@ -442,7 +506,9 @@ WHERE( LDCOMPUTE(:) .AND. PRGT(:)>XRTMIN(6) .AND. PT(:)<XTT .AND. &
    P_RI_WETG(:) = - ZZW5(:)
    P_CI_WETG(:) = P_RI_WETG(:) * PCIT(:)/MAX(PRIT(:),XRTMIN(4))
    P_RS_WETG(:) = - ZZW6(:)
+   P_CS_WETG(:) = - ZZW6N(:)
    P_RG_WETG(:) = - PRGT(:)/PTSTEP * ZZW(:) + ZRWETG(:) * (1.-ZZW(:))
+   P_CG_WETG(:) = - PCGT(:)/PTSTEP * ZZW(:)
    P_RH_WETG(:) =   PRGT(:)/PTSTEP * ZZW(:) + ZRWETG(:) *     ZZW(:)
    !
    P_TH_WETG(:) = ZZW7(:) * (PLSFACT(:)-PLVFACT(:))
@@ -457,10 +523,11 @@ WHERE( LDCOMPUTE(:) .AND. PRGT(:)>XRTMIN(6) .AND. PT(:)<XTT .AND.
    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_CR_DRYG(:) = - ZZW4N(:)
    P_RI_DRYG(:) = - ZZW2(:)
    P_CI_DRYG(:) = P_RI_DRYG(:) * PCIT(:)/MAX(PRIT(:),XRTMIN(4))
    P_RS_DRYG(:) = - ZZW3(:)
+   P_CS_DRYG(:) = - ZZW3N(:)
    P_RG_DRYG(:) =   ZRDRYG(:)
    !
    P_TH_DRYG(:) = (ZZW1(:) + ZZW4(:)) * (PLSFACT(:)-PLVFACT(:))
@@ -512,14 +579,14 @@ WHERE( (PRGT(:)>XRTMIN(6)) .AND. (PT(:)>XTT) .AND. LDCOMPUTE(:) )
 !
 ! compute RGMLTR
 !
-   ZZX(:)  = MAX( 0.0,( -ZZX(:) *                     &
-                          ( X0DEPG*           PLBDG(:)**XEX0DEPG +     &
+   ZZX(:)  = MAX( 0.0,( -ZZX(:) * PCGT(:) *                        &
+                          ( X0DEPG*       PLBDG(:)**XEX0DEPG +     &
                             X1DEPG*PCJ(:)*PLBDG(:)**XEX1DEPG ) -   &
-                                      ( ZZW1(:)+ZZW4(:) ) *        &
-                               ( PRHODREF(:)*XCL*(XTT-PT(:))) ) /  &
-                                            ( PRHODREF(:)*XLMTT ) )
+                        ( ZZW1(:)+ZZW4(:) ) * ( XCL*(XTT-PT(:))) ) &
+                        / XLMTT                                    )
    P_RR_GMLT(:) = ZZX(:)
    P_CR_GMLT(:) = ZZX(:) * 5.0E6  ! obtained after averaging, Dshed=1mm and 500 microns 
+   P_CG_GMLT(:) = - ZZX(:) * PCGT(:)/PRGT(:)
    !
    P_TH_GMLT(:) = - P_RR_GMLT(:) * (PLSFACT(:)-PLVFACT(:))
 END WHERE
@@ -534,8 +601,11 @@ 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_CS(:) = PA_CS(:) + P_CS_WETG(:) + P_CS_DRYG(:) 
 PA_RG(:) = PA_RG(:) + P_RG_WETG(:) + P_RG_DRYG(:) + P_RG_HMG(:) - P_RR_GMLT(:)
+PA_CG(:) = PA_CG(:) + P_CG_WETG(:)                              + P_CG_GMLT(:)
 PA_RH(:) = PA_RH(:) + P_RH_WETG(:) 
+PA_CH(:) = PA_CH(:) - P_CG_WETG(:) 
 PA_TH(:) = PA_TH(:) + P_TH_WETG(:) + P_TH_DRYG(:)               + P_TH_GMLT(:) 
 !
 !-------------------------------------------------------------------------------
@@ -554,6 +624,20 @@ CONTAINS
   END FUNCTION GET_XKER_SDRYG
 !
 !-------------------------------------------------------------------------------
+!
+  FUNCTION GET_XKER_N_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_N_SDRYG(MAX(MIN(GRAUPEL(I),SIZE(XKER_N_SDRYG,1)),1),MAX(MIN(SNOW(I),SIZE(XKER_N_SDRYG,2)),1))
+    END DO
+  END FUNCTION GET_XKER_N_SDRYG
+!
+!-------------------------------------------------------------------------------
 !
   FUNCTION GET_XKER_RDRYG(GRAUPEL,RAIN) RESULT(RET)
     INTEGER, DIMENSION(:) :: GRAUPEL
@@ -568,5 +652,19 @@ CONTAINS
   END FUNCTION GET_XKER_RDRYG
 !
 !-------------------------------------------------------------------------------
+!
+  FUNCTION GET_XKER_N_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_N_RDRYG(MAX(MIN(GRAUPEL(I),SIZE(XKER_N_RDRYG,1)),1),MAX(MIN(RAIN(I),SIZE(XKER_N_RDRYG,2)),1))
+    END DO
+  END FUNCTION GET_XKER_N_RDRYG
+!
+!-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_GRAUPEL
diff --git a/src/MNH/lima_graupel_deposition.f90 b/src/MNH/lima_graupel_deposition.f90
index d283c9699..83b28e3d2 100644
--- a/src/MNH/lima_graupel_deposition.f90
+++ b/src/MNH/lima_graupel_deposition.f90
@@ -8,14 +8,15 @@
 !      #################################
 !
 INTERFACE
-   SUBROUTINE LIMA_GRAUPEL_DEPOSITION (LDCOMPUTE, PRHODREF,                  &
-                                       PRGT, 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                        )
 !
 LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
 REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF ! 
 !
-REAL, DIMENSION(:),   INTENT(IN)    :: PRGT     ! Cloud water C. at t
+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      ! 
@@ -30,9 +31,9 @@ END INTERFACE
 END MODULE MODI_LIMA_GRAUPEL_DEPOSITION
 !
 !     ###########################################################################
-      SUBROUTINE LIMA_GRAUPEL_DEPOSITION (LDCOMPUTE, PRHODREF,                  &
-                                          PRGT, 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
@@ -51,12 +52,13 @@ END MODULE MODI_LIMA_GRAUPEL_DEPOSITION
 !!    -------------
 !!      Original             15/03/2018
 !!
+!       M. Taufour              07/2022 add concentration for snow, graupel, hail        
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_PARAM_LIMA,       ONLY : XRTMIN
+USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCTMIN
 USE MODD_PARAM_LIMA_MIXED, ONLY : X0DEPG, XEX0DEPG, X1DEPG, XEX1DEPG
 !
 IMPLICIT NONE
@@ -66,7 +68,8 @@ IMPLICIT NONE
 LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
 REAL, DIMENSION(:),   INTENT(IN)    :: PRHODREF ! 
 !
-REAL, DIMENSION(:),   INTENT(IN)    :: PRGT     ! Cloud water C. at t
+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      ! 
@@ -85,9 +88,9 @@ REAL, DIMENSION(:),   INTENT(OUT)   :: P_RG_DEPG
 !
 P_TH_DEPG(:) = 0.0
 P_RG_DEPG(:) = 0.0
-WHERE ( (PRGT(:)>XRTMIN(6)) .AND. LDCOMPUTE(:) )
-   P_RG_DEPG(:) = ( PSSI(:)/PAI(:)/PRHODREF(:) ) *                       &
-        ( X0DEPG*PLBDG(:)**XEX0DEPG + X1DEPG*PCJ(:)*PLBDG(:)**XEX1DEPG )
+WHERE ( PRGT(:)>XRTMIN(6) .AND. PCGT(:)>XCTMIN(6) .AND. LDCOMPUTE(:) )
+   P_RG_DEPG(:) = PSSI(:) / PAI(:) * PCGT(:) *                      &
+                ( X0DEPG*PLBDG(:)**XEX0DEPG + X1DEPG*PCJ(:)*PLBDG(:)**XEX1DEPG )
    P_TH_DEPG(:) = P_RG_DEPG(:)*PLSFACT(:)
 END WHERE
 !
diff --git a/src/MNH/lima_ice_aggregation_snow.f90 b/src/MNH/lima_ice_aggregation_snow.f90
index af815a498..8268c17d6 100644
--- a/src/MNH/lima_ice_aggregation_snow.f90
+++ b/src/MNH/lima_ice_aggregation_snow.f90
@@ -8,10 +8,10 @@
 !      #################################
 !
 INTERFACE
-   SUBROUTINE LIMA_ICE_AGGREGATION_SNOW (LDCOMPUTE,                      &
-                                         PT, PRHODREF,                   &
-                                         PRIT, PRST, PCIT, 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                  )
 !
 LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
 !
@@ -21,6 +21,7 @@ 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 
 !
@@ -32,10 +33,10 @@ END INTERFACE
 END MODULE MODI_LIMA_ICE_AGGREGATION_SNOW
 !
 !     #######################################################################
-      SUBROUTINE LIMA_ICE_AGGREGATION_SNOW (LDCOMPUTE,                      &
-                                            PT, PRHODREF,                   &
-                                            PRIT, PRST, PCIT, 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
@@ -54,6 +55,7 @@ END MODULE MODI_LIMA_ICE_AGGREGATION_SNOW
 !!      Original             15/03/2018
 !  J. Wurtz       03/2022: new snow characteristics
 !  B. Vie         03/2022: Add option for 1-moment pristine ice
+!  M. Taufour     07/2022: add concentration for snow, graupel, hail        
 !
 !-------------------------------------------------------------------------------
 !
@@ -77,6 +79,7 @@ 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 
 !
@@ -102,7 +105,7 @@ P_CI_AGGS(:) = 0.
 !
 !
 IF (NMOM_I.EQ.1) THEN 
-   WHERE ( (PRIT(:)>XRTMIN(4)) .AND. (PRST(:)>XRTMIN(5)) .AND. LDCOMPUTE(:) )
+   WHERE ( PRIT(:)>XRTMIN(4) .AND. PRST(:)>XRTMIN(5) .AND. LDCOMPUTE(:) )
       ZZW1(:) = XFIAGGS * EXP( XCOLEXIS*(PT(:)-XTT) ) &
                         * PRIT(:)                     &
                         * PRST(:) * (1+(XFVELOS/PLBDS(:))**XALPHAS)**(-XNUS+XEXIAGGS/XALPHAS) &
@@ -112,10 +115,10 @@ IF (NMOM_I.EQ.1) THEN
       P_RI_AGGS(:) = - ZZW1(:)
    END WHERE
 ELSE
-   WHERE ( (PRIT(:)>XRTMIN(4)) .AND. (PRST(:)>XRTMIN(5)) .AND. LDCOMPUTE(:) )
+   WHERE ( PRIT(:)>XRTMIN(4) .AND. PRST(:)>XRTMIN(5) .AND. &
+           PCIT(:)>XCTMIN(4) .AND. PCST(:)>XCTMIN(5) .AND. LDCOMPUTE(:) )
       ZZW1(:) = (PLBDI(:) / PLBDS(:))**3
-      ZZW2(:) = (PCIT(:)*(XNS*PRST(:)*PLBDS(:)**XBS)*EXP(XCOLEXIS*(PT(:)-XTT) ))*PRHODREF(:) &
-           / (PLBDI(:)**3)
+      ZZW2(:) = PCIT(:)*PCST(:)*EXP(XCOLEXIS*(PT(:)-XTT))*PRHODREF(:) / (PLBDI(:)**3)
       ZZW3(:) = ZZW2(:)*(XAGGS_CLARGE1+XAGGS_CLARGE2*ZZW1(:))
 !
       P_CI_AGGS(:) = - ZZW3(:)
diff --git a/src/MNH/lima_mixed.f90 b/src/MNH/lima_mixed.f90
index 4d558eb1d..5c79c29d8 100644
--- a/src/MNH/lima_mixed.f90
+++ b/src/MNH/lima_mixed.f90
@@ -175,15 +175,30 @@ REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3))  &
                                        PCCT,    & ! Cloud water C. at t
                                        PCRT,    & ! Rain water C. at t
                                        PCIT,    & ! Ice crystal C. at t
+                                       PCST,    & ! Snow/aggregates C. at t       ! MTaufour
+                                       PCGT,    & ! Graupel C. at t               ! MTaufour
+                                       PCHT,    & ! Hail C. at t                  ! MTaufour
                                        !
                                        PCCS,    & ! Cloud water C. source
                                        PCRS,    & ! Rain water C. source
-                                       PCIS       ! Ice crystal C. source
-!
+                                       PCIS,    & ! Ice crystal C. source
+                                       PCSS,    & ! Snow/aggregates C. source    ! MTaufour
+                                       PCGS,    & ! Graupel C. source            ! MTaufour
+                                       PCHS       ! Hail C. source               ! MTaufour
+!
+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
@@ -202,6 +217,9 @@ 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   :: ZCST    ! Snow/aggregates conc. at t  ! MTaufour
+REAL, DIMENSION(:), ALLOCATABLE   :: ZCGT    ! Graupel conc. at t          ! MTaufour
+REAL, DIMENSION(:), ALLOCATABLE   :: ZCHT    ! Hail conc. at t             ! MTaufour
 !
 REAL, DIMENSION(:), ALLOCATABLE   :: ZRVS    ! Water vapor m.r. source
 REAL, DIMENSION(:), ALLOCATABLE   :: ZRCS    ! Cloud water m.r. source
@@ -216,6 +234,9 @@ 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 :: ZCSS    ! Snow/aggregates conc. at t  ! MTaufour
+REAL, DIMENSION(:),   ALLOCATABLE :: ZCGS    ! Graupel conc. at t          ! MTaufour
+REAL, DIMENSION(:),   ALLOCATABLE :: ZCHS    ! Hail conc. at t             ! MTaufour
 !
 REAL, DIMENSION(:,:), ALLOCATABLE :: ZIFS    ! Free Ice nuclei conc. source
 REAL, DIMENSION(:,:), ALLOCATABLE :: ZINS    ! Nucleated Ice nuclei conc. source
@@ -290,17 +311,41 @@ IF ( KRR .GE. 7 ) PRHS(:,:,:) = PRS(:,:,:,7)
 PCCT(:,:,:) = 0.
 PCRT(:,:,:) = 0.
 PCIT(:,:,:) = 0.
+PCST(:,:,:) = 0.  ! MTaufour
+PCGT(:,:,:) = 0.  ! MTaufour
+PCHT(:,:,:) = 0.  ! MTaufour
 PCCS(:,:,:) = 0.
 PCRS(:,:,:) = 0.
 PCIS(:,:,:) = 0.
+PCSS(:,:,:) = 0.  ! MTaufour
+PCGS(:,:,:) = 0.  ! MTaufour
+PCHS(:,:,:) = 0.  ! MTaufour
 !
 IF ( LWARM ) PCCT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NC) 
 IF ( LWARM .AND. LRAIN ) PCRT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NR)
 IF ( LCOLD ) PCIT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NI)
+IF ( LCOLD .AND. LSNOW ) PCST(:,:,:) = PSVT(:,:,:,NSV_LIMA_NS)          ! MTaufour
+IF ( LCOLD .AND. LSNOW ) PCGT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NG)          ! MTaufour
+IF ( LCOLD .AND. LHAIL ) PCHT(:,:,:) = PSVT(:,:,:,NSV_LIMA_NH)          ! MTaufour
 !
 IF ( LWARM ) PCCS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NC)
 IF ( LWARM .AND. LRAIN ) PCRS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NR)
 IF ( LCOLD ) PCIS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NI)
+IF ( LCOLD .AND. LSNOW ) PCSS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NS)          ! MTaufour
+IF ( LCOLD .AND. LSNOW ) PCGS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NG)          ! MTaufour
+IF ( LCOLD .AND. LHAIL ) PCHS(:,:,:) = PSVS(:,:,:,NSV_LIMA_NH)          ! MTaufour
+!
+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) )
@@ -314,6 +359,22 @@ ELSE
    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
+!
 !-------------------------------------------------------------------------------
 !
 !
@@ -343,7 +404,7 @@ GMICRO(IIB:IIE,IJB:IJE,IKB:IKE) = PRCT(IIB:IIE,IJB:IJE,IKB:IKE)>XRTMIN(2) .OR. &
 !
 IMICRO = COUNTJV( GMICRO(:,:,:),I1(:),I2(:),I3(:))
 !
-IF( IMICRO >= 1 ) THEN
+IF( IMICRO >= 0 ) THEN
 !
    ALLOCATE(ZRVT(IMICRO)) 
    ALLOCATE(ZRCT(IMICRO))
@@ -356,6 +417,9 @@ IF( IMICRO >= 1 ) THEN
    ALLOCATE(ZCCT(IMICRO)) 
    ALLOCATE(ZCRT(IMICRO)) 
    ALLOCATE(ZCIT(IMICRO)) 
+   ALLOCATE(ZCST(IMICRO)) ! MTaufour 
+   ALLOCATE(ZCGT(IMICRO)) ! MTaufour
+   ALLOCATE(ZCHT(IMICRO)) ! MTaufour   
    !
    ALLOCATE(ZRVS(IMICRO))  
    ALLOCATE(ZRCS(IMICRO)) 
@@ -369,6 +433,9 @@ IF( IMICRO >= 1 ) THEN
    ALLOCATE(ZCCS(IMICRO)) 
    ALLOCATE(ZCRS(IMICRO)) 
    ALLOCATE(ZCIS(IMICRO)) 
+   ALLOCATE(ZCSS(IMICRO)) ! MTaufour 
+   ALLOCATE(ZCGS(IMICRO)) ! MTaufour
+   ALLOCATE(ZCHS(IMICRO)) ! MTaufour   
    ALLOCATE(ZIFS(IMICRO,NMOD_IFN))
    ALLOCATE(ZINS(IMICRO,NMOD_IFN))
    !
@@ -388,6 +455,9 @@ IF( IMICRO >= 1 ) THEN
       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))
+      ZCST(JL) = PCST(I1(JL),I2(JL),I3(JL)) ! MTaufour
+      ZCGT(JL) = PCGT(I1(JL),I2(JL),I3(JL)) ! MTaufour
+      ZCHT(JL) = PCHT(I1(JL),I2(JL),I3(JL)) ! MTaufour      
       !
       ZRVS(JL) = PRVS(I1(JL),I2(JL),I3(JL))
       ZRCS(JL) = PRCS(I1(JL),I2(JL),I3(JL))
@@ -401,6 +471,9 @@ IF( IMICRO >= 1 ) THEN
       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))
+      ZCSS(JL) = PCSS(I1(JL),I2(JL),I3(JL)) ! MTaufour
+      ZCGS(JL) = PCGS(I1(JL),I2(JL),I3(JL)) ! MTaufour
+      ZCHS(JL) = PCHS(I1(JL),I2(JL),I3(JL)) ! MTaufour      
       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)
@@ -477,17 +550,17 @@ IF( IMICRO >= 1 ) THEN
       END WHERE
       ZLBDAS(:) = ZLBDAS(:)*XTRANS_MP_GAMMAS
    ELSE
-      WHERE (ZRST(:)>XRTMIN(5))
-         ZLBDAS(:) = MAX(MIN(XLBDAS_MAX, XLBS*( ZRHODREF(:)*ZRST(:) )**XLBEXS),XLBDAS_MIN)
+      WHERE (ZRST(:)>XRTMIN(5) .AND. ZCST(:)>XCTMIN(5))
+         ZLBDAS(:) = ( XLBS*ZCST(:) / ZRST(:) )**XLBEXS
       END WHERE
    END IF
    ZLBDAG(:)  = 1.E10
-   WHERE (ZRGT(:)>XRTMIN(6) )
-      ZLBDAG(:) = XLBG*( ZRHODREF(:)*ZRGT(:) )**XLBEXG
+   WHERE (ZRGT(:)>XRTMIN(6) .AND. ZCGT(:)>XCTMIN(6) )  ! MTaufour
+      ZLBDAG(:) =  ( XLBG*ZCGT(:) / ZRGT(:) )**XLBEXG  ! MTaufour
    END WHERE
    ZLBDAH(:)  = 1.E10
-   WHERE (ZRHT(:)>XRTMIN(7) )
-      ZLBDAH(:) = XLBH*( ZRHODREF(:)*ZRHT(:) )**XLBEXH
+   WHERE (ZRHT(:)>XRTMIN(7) .AND.  ZCHT(:)>XCTMIN(7))  ! MTaufour
+      ZLBDAH(:) =  ( XLBH*ZCHT(:) / ZRHT(:) )**XLBEXH  ! MTaufour
    END WHERE
 ! 
 !-------------------------------------------------------------------------------
@@ -496,15 +569,15 @@ IF( IMICRO >= 1 ) THEN
 !*       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, PINS              )
+   CALL LIMA_MIXED_SLOW_PROCESSES(ZRHODREF, ZZT, ZSSI, PTSTEP,        &
+                                  ZLSFACT, ZLVFACT, ZAI, ZCJ,         &
+                                  ZRGT, ZRHT, ZCIT, ZCGT, ZCHT,       & ! MTaufour add ZCGT, ZCHT
+                                  ZRVS, ZRCS, ZRIS, ZRGS, ZRHS, ZTHS, & ! MTaufour add ZRHS 
+                                  ZCCS, ZCIS, ZCGS, ZIFS, ZINS,       & ! MTaufour add ZCGS
+                                  ZLBDAI, ZLBDAG, ZLBDAH,             & ! MTaufour add ZLBDAH
+                                  ZRHODJ, GMICRO, PRHODJ, KMI,        &
+                                  PTHS, PRVS, PRCS, PRIS, PRGS, PRHS, & ! MTaufour add PRHS
+                                  PCCS, PCIS                          )
 ! 
 !-------------------------------------------------------------------------------
 !
@@ -513,16 +586,16 @@ IF( IMICRO >= 1 ) THEN
 !   	        ------------------------------------
 !
 IF (LSNOW) THEN
-   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                        )
+!   CALL LIMA_MIXED_FAST_PROCESSES(ZRHODREF, ZZT, ZPRES, PTSTEP,             &
+!                                  ZLSFACT, ZLVFACT, ZKA, ZDV, ZCJ,          &
+!                                  ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT,       &
+!                                  ZRHT, ZCCT, ZCRT, ZCIT, ZCST, ZCGT, ZCHT, & ! MTaufour add ZCST, ZCGT, ZCHT
+!                                  ZRCS, ZRRS, ZRIS, ZRSS, ZRGS, ZRHS,       &
+!                                  ZTHS, ZCCS, ZCRS, ZCIS, ZCSS, ZCGS, ZCHS, & ! MTaufour add  ZCSS, ZCGS, ZCHS
+!                                  ZLBDAC, ZLBDAR, ZLBDAI, ZLBDAS, ZLBDAG, ZLBDAH,   & ! MTaufour add ZLBDAI
+!                                  ZRHODJ, GMICRO, PRHODJ, KMI, PTHS,        &
+!                                  PRCS, PRRS, PRIS, PRSS, PRGS, PRHS,       &
+!                                  PCCS, PCRS, PCIS, PCSS, PCGS, PCHS        ) ! MTaufour add PCSS, PCGS, PCHS
 END IF
 !
 !-------------------------------------------------------------------------------
@@ -557,6 +630,12 @@ END IF
    PCRS(:,:,:) = UNPACK( ZCRS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
    ZW(:,:,:) = PCIS(:,:,:)
    PCIS(:,:,:) = UNPACK( ZCIS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
+   ZW(:,:,:) = PCSS(:,:,:)                                            ! MTaufour
+   PCSS(:,:,:) = UNPACK( ZCSS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) ! MTaufour
+   ZW(:,:,:) = PCGS(:,:,:)                                            ! MTaufour
+   PCGS(:,:,:) = UNPACK( ZCGS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) ! MTaufour
+   ZW(:,:,:) = PCHS(:,:,:)                                            ! MTaufour
+   PCHS(:,:,:) = UNPACK( ZCHS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) ) ! MTaufour
 !
    DO JMOD_IFN = 1, NMOD_IFN
       ZW(:,:,:) = PIFS(:,:,:,JMOD_IFN)
@@ -578,6 +657,9 @@ END IF
    DEALLOCATE(ZCCT) 
    DEALLOCATE(ZCRT) 
    DEALLOCATE(ZCIT)
+   DEALLOCATE(ZCST) ! MTaufour
+   DEALLOCATE(ZCGT) ! MTaufour
+   DEALLOCATE(ZCHT) ! MTaufour   
 ! 
    DEALLOCATE(ZRVS)  
    DEALLOCATE(ZRCS) 
@@ -591,6 +673,9 @@ END IF
    DEALLOCATE(ZCCS) 
    DEALLOCATE(ZCRS) 
    DEALLOCATE(ZCIS)  
+   DEALLOCATE(ZCSS) ! MTaufour  
+   DEALLOCATE(ZCGS) ! MTaufour     
+   DEALLOCATE(ZCHS) ! MTaufour        
    DEALLOCATE(ZIFS)
    DEALLOCATE(ZINS)
 !
@@ -637,16 +722,32 @@ IF ( KRR .GE. 7 ) PRS(:,:,:,7) = PRHS(:,:,:)
 !
 PSVS(:,:,:,NSV_LIMA_NC) = PCCS(:,:,:)
 IF ( LRAIN ) PSVS(:,:,:,NSV_LIMA_NR) = PCRS(:,:,:)
+IF ( LSNOW ) PSVS(:,:,:,NSV_LIMA_NS) = PCSS(:,:,:) ! MTaufour
+IF ( LSNOW ) PSVS(:,:,:,NSV_LIMA_NG) = PCGS(:,:,:) ! MTaufour
+IF ( LHAIL ) PSVS(:,:,:,NSV_LIMA_NH) = PCHS(:,:,:) ! MTaufour
 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
+!
 !++cb++
+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)
 !--cb--
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/lima_mixed_slow_processes.f90 b/src/MNH/lima_mixed_slow_processes.f90
index 6ef9b55f5..097d575ac 100644
--- a/src/MNH/lima_mixed_slow_processes.f90
+++ b/src/MNH/lima_mixed_slow_processes.f90
@@ -8,15 +8,15 @@
 !      #####################################
 !
 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,               &
-                                           PRHODJ1D, GMICRO, PRHODJ, KMI,&
-                                           PTHS, PRVS, PRCS, PRIS, PRGS, &
-                                           PCCS, PCIS, PINS              )
+      SUBROUTINE LIMA_MIXED_SLOW_PROCESSES(ZRHODREF, ZZT, ZSSI, PTSTEP,        &
+                                           ZLSFACT, ZLVFACT, ZAI, ZCJ,         &
+                                           ZRGT, ZRHT, ZCIT, ZCGT, ZCHT,       &
+                                           ZRVS, ZRCS, ZRIS, ZRGS, ZRHS, ZTHS, &
+                                           ZCCS, ZCIS, ZCGS, ZIFS, ZINS,       &
+                                           ZLBDAI, ZLBDAG, ZLBDAH,             &
+                                           PRHODJ1D, GMICRO, PRHODJ, KMI,      &
+                                           PTHS, PRVS, PRCS, PRIS, PRGS, PRHS, &
+                                           PCCS, PCIS                    )
 !
 REAL, DIMENSION(:),   INTENT(IN)    :: ZRHODREF  ! RHO Dry REFerence
 REAL, DIMENSION(:),   INTENT(IN)    :: ZZT       ! Temperature
@@ -29,21 +29,27 @@ 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)    :: ZRHT      ! Hail m.r. at t         
 REAL, DIMENSION(:),   INTENT(IN)    :: ZCIT      ! Pristine ice conc. at t
+REAL, DIMENSION(:),   INTENT(IN)    :: ZCGT      ! Graupel conc. at t  
+REAL, DIMENSION(:),   INTENT(IN)    :: ZCHT      ! Hail 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) :: ZRHS      ! 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) :: ZCGS      ! Graupel 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.
+REAL, DIMENSION(:),   INTENT(IN)    :: ZLBDAH  ! Slope parameter of the hail distr. 
 !
 ! used for budget storage
 REAL,    DIMENSION(:),     INTENT(IN) :: PRHODJ1D
@@ -55,24 +61,24 @@ REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRVS
 REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRCS
 REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRIS
 REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRGS
+REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRHS
 REAL,    DIMENSION(:,:,:), INTENT(IN) :: PCCS
 REAL,    DIMENSION(:,:,:), INTENT(IN) :: PCIS
-REAL,    DIMENSION(:,:,:,:), INTENT(IN) :: PINS
 !
 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,               &
-                                           PRHODJ1D, GMICRO, PRHODJ, KMI,&
-                                           PTHS, PRVS, PRCS, PRIS, PRGS, &
-                                           PCCS, PCIS, PINS              )
+      SUBROUTINE LIMA_MIXED_SLOW_PROCESSES(ZRHODREF, ZZT, ZSSI, PTSTEP,        &
+                                           ZLSFACT, ZLVFACT, ZAI, ZCJ,         &
+                                           ZRGT, ZRHT, ZCIT, ZCGT, ZCHT,       &
+                                           ZRVS, ZRCS, ZRIS, ZRGS, ZRHS, ZTHS, &
+                                           ZCCS, ZCIS, ZCGS, ZIFS, ZINS,       &
+                                           ZLBDAI, ZLBDAG, ZLBDAH,             &
+                                           PRHODJ1D, GMICRO, PRHODJ, KMI,      &
+                                           PTHS, PRVS, PRCS, PRIS, PRGS, PRHS, &
+                                           PCCS, PCIS                    )
 !     #######################################################################
 !
 !!
@@ -119,16 +125,17 @@ END MODULE MODI_LIMA_MIXED_SLOW_PROCESSES
 !              ------------
 !
 use modd_budget,           only: lbu_enable, nbumod,                                                                  &
-                                 lbudget_th, lbudget_rv, lbudget_rc, lbudget_rc, lbudget_ri, lbudget_rg, lbudget_sv,  &
-                                 NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RC, NBUDGET_RI, NBUDGET_RG, NBUDGET_SV1, &
+                                 lbudget_th, lbudget_rv, lbudget_rc, lbudget_rc, lbudget_ri, lbudget_rg, lbudget_rh, lbudget_sv,  &
+                                 NBUDGET_TH, NBUDGET_RV, NBUDGET_RC, NBUDGET_RC, NBUDGET_RI, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1, &
                                  tbudgets
 USE MODD_CST,              ONLY : XTT, XALPI, XBETAI, XGAMI,          &
                                        XALPW, XBETAW, XGAMW
 USE MODD_NSV
-USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCTMIN, NMOD_IFN, LSNOW
+USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCTMIN, NMOD_IFN, LSNOW, LHAIL, 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,           &
-                                  X0DEPG, XEX0DEPG, X1DEPG, XEX1DEPG
+USE MODD_PARAM_LIMA_MIXED, ONLY : XLBG, XLBEXG, XLBDAG_MAX, XCCG, XCXG, &
+                                  X0DEPG, XEX0DEPG, X1DEPG, XEX1DEPG,   &
+                                  X0DEPH, XEX0DEPH, X1DEPH, XEX1DEPH  
 use mode_budget,           only: Budget_store_add, Budget_store_init, Budget_store_end
 
 IMPLICIT NONE
@@ -146,21 +153,27 @@ 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)    :: ZRHT      ! Hail m.r. at t 
 REAL, DIMENSION(:),   INTENT(IN)    :: ZCIT      ! Pristine ice conc. at t
+REAL, DIMENSION(:),   INTENT(IN)    :: ZCGT      ! Graupel conc. at t     
+REAL, DIMENSION(:),   INTENT(IN)    :: ZCHT      ! hail 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) :: 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) :: ZCIS      ! Pristine ice conc. source
+REAL, DIMENSION(:),   INTENT(INOUT) :: ZCGS      ! Graupel 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.
+REAL, DIMENSION(:),   INTENT(IN)    :: ZLBDAH  ! Slope parameter of the hail distr. 
 !
 ! used for budget storage
 REAL,    DIMENSION(:),     INTENT(IN) :: PRHODJ1D
@@ -172,9 +185,9 @@ REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRVS
 REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRCS
 REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRIS
 REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRGS
+REAL,    DIMENSION(:,:,:), INTENT(IN) :: PRHS 
 REAL,    DIMENSION(:,:,:), INTENT(IN) :: PCCS
 REAL,    DIMENSION(:,:,:), INTENT(IN) :: PCIS
-REAL,    DIMENSION(:,:,:,:), INTENT(IN) :: PINS
 !
 !*       0.2   Declarations of local variables :
 !
@@ -190,15 +203,27 @@ INTEGER :: JMOD_IFN
 !
 IF (LSNOW) THEN
    ZZW(:) = 0.0
-   WHERE ( (ZRGT(:)>XRTMIN(6)) .AND. (ZRGS(:)>XRTMIN(6)/PTSTEP) )
-      ZZW(:) = ( ZSSI(:)/ZAI(:)/ZRHODREF(:) ) *                               &
-               ( 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
+   if (NMOM_G.GE.2) then
+      WHERE ( (ZRGT(:)>XRTMIN(6)) .AND. (ZRGS(:)>XRTMIN(6)/PTSTEP) ) 
+          ZZW(:) = ( ZSSI(:)/ZAI(:)/ZRHODREF(:) ) *  ZCGT(:) *               &
+                  ( 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
+   else
+       WHERE ( (ZRGT(:)>XRTMIN(6)) .AND. (ZRGS(:)>XRTMIN(6)/PTSTEP) )
+          ZZW(:) = ( ZSSI(:)/ZAI(:)/ZRHODREF(:) ) * XCCG *                      &
+                   ( X0DEPG*ZLBDAG(:)**(XCXG+XEX0DEPG) + X1DEPG*ZCJ(:)*ZLBDAG(:)**(XCXG+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
+   end if
 !
 ! Budget storage
   if ( nbumod == kmi .and. lbu_enable ) then
@@ -211,6 +236,34 @@ IF (LSNOW) THEN
   end if
 END IF
 !
+!                                                                          
+!*       1.0  Deposition of water vapor on r_h: RVDEPH
+!        ---------------------------------------------
+!
+!
+IF (LHAIL .AND. NMOM_H.GE.2) THEN
+   ZZW(:) = 0.0
+   WHERE ( (ZRHT(:)>XRTMIN(7)) .AND. (ZRHS(:)>XRTMIN(7)/PTSTEP) )
+      ZZW(:) = ( ZSSI(:)/(ZAI(:)) ) *  ZCHT(:) *                                 &   
+               ( X0DEPH*ZLBDAH(:)**XEX0DEPH + X1DEPH*ZCJ(:)*ZLBDAH(:)**XEX1DEPH )
+      ZZW(:) =         MIN( ZRVS(:),ZZW(:)      )*(0.5+SIGN(0.5,ZZW(:))) &
+                     - MIN( ZRHS(:),ABS(ZZW(:)) )*(0.5-SIGN(0.5,ZZW(:)))
+      ZRHS(:) = ZRHS(:) + ZZW(:)
+      ZRVS(:) = ZRVS(:) - ZZW(:)
+      ZTHS(:) = ZTHS(:) + ZZW(:)*ZLSFACT(:)
+   END WHERE
+!
+! Budget storage
+  if ( nbumod == kmi .and. lbu_enable ) then
+    if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'DEPH', &
+                                           Unpack(  zzw(:) * zlsfact(:) * prhodj1d(:), mask = gmicro(:, :, :), field = 0. ) )
+    if ( lbudget_rv ) call Budget_store_add( tbudgets(NBUDGET_RV), 'DEPH', &
+                                           Unpack( -zzw(:)              * prhodj1d(:), mask = gmicro(:, :, :), field = 0. ) )
+    if ( lbudget_rh ) call Budget_store_add( tbudgets(NBUDGET_RH), 'DEPH', &
+                                           Unpack(  zzw(:)              * prhodj1d(:), mask = gmicro(:, :, :), field = 0. ) )
+  end if
+END IF
+!       
 !
 !*       2    cloud ice Melting: RIMLTC and CIMLTC
 !        -----------------------------------------
@@ -223,10 +276,10 @@ END IF
     if ( lbudget_sv ) then
       call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_nc), 'IMLT', pccs(:, :, :) * prhodj(:, :, :) )
       call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'IMLT', pcis(:, :, :) * prhodj(:, :, :) )
-      do jmod_ifn = 1,nmod_ifn
-        call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl + jmod_ifn - 1), 'IMLT', &
-                                pins(:, :, :, jmod_ifn) * prhodj(:, :, :) )
-      enddo
+!      do jmod_ifn = 1,nmod_ifn
+!        call Budget_store_init( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl + jmod_ifn - 1), 'IMLT', &
+!                                pins(:, :, :, jmod_ifn) * prhodj(:, :, :) )
+!      enddo
     end if
   end if
 
@@ -243,7 +296,7 @@ END IF
    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(:)
+!      ZINS(:,JMOD_IFN) = ZINS(:,JMOD_IFN) * ZMASK(:)
    ENDDO
 !
 ! Budget storage
@@ -259,10 +312,10 @@ END IF
                                            Unpack( zccs(:), mask = gmicro(:, :, :), field = pccs(:, :, :) ) * prhodj(:, :, :) )
       call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ni), 'IMLT', &
                                            Unpack( zcis(:), mask = gmicro(:, :, :), field = pcis(:, :, :) ) * prhodj(:, :, :) )
-      do jmod_ifn = 1,nmod_ifn
-        call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl + jmod_ifn - 1), 'IMLT', &
-                          Unpack( zins(:, jmod_ifn), mask = gmicro(:, :, :), field = pins(:, :, :, jmod_ifn) ) * prhodj(:, :, :) )
-      enddo
+!      do jmod_ifn = 1,nmod_ifn
+!        call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_lima_ifn_nucl + jmod_ifn - 1), 'IMLT', &
+!                          Unpack( zins(:, jmod_ifn), mask = gmicro(:, :, :), field = pins(:, :, :, jmod_ifn) ) * prhodj(:, :, :) )
+!      enddo
     end if
   end if
 !
diff --git a/src/MNH/lima_rain_accr_snow.f90 b/src/MNH/lima_rain_accr_snow.f90
index 5ece49ac9..8973de927 100644
--- a/src/MNH/lima_rain_accr_snow.f90
+++ b/src/MNH/lima_rain_accr_snow.f90
@@ -8,10 +8,10 @@
 !      #################################
 !
 INTERFACE
-   SUBROUTINE LIMA_RAIN_ACCR_SNOW (PTSTEP, 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  )
+   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
@@ -19,9 +19,10 @@ 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)    :: 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 ! 
@@ -31,6 +32,7 @@ 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
@@ -38,10 +40,10 @@ END INTERFACE
 END MODULE MODI_LIMA_RAIN_ACCR_SNOW
 !
 !     ###################################################################################
-      SUBROUTINE LIMA_RAIN_ACCR_SNOW (PTSTEP, 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  )
+      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
@@ -71,11 +73,14 @@ USE MODD_CST,              ONLY : XTT
 USE MODD_PARAM_LIMA,       ONLY : XRTMIN, XCEXVT
 USE MODD_PARAM_LIMA_WARM,  ONLY : XBR
 USE MODD_PARAM_LIMA_COLD,  ONLY : XBS, XTRANS_MP_GAMMAS
-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
+USE MODD_PARAM_LIMA_MIXED, ONLY : NACCLBDAS, XACCINTP1S, XACCINTP2S,             &
+                                  NACCLBDAR, XACCINTP1R, XACCINTP2R,             &
+                                  XKER_RACCSS, XKER_RACCS, XKER_SACCRG,          &
+                                  XKER_N_RACCSS, XKER_N_RACCS, XKER_N_SACCRG,    &
+                                  XFRACCSS, XLBRACCS1, XLBRACCS2, XLBRACCS3,     &
+                                  XFNRACCSS, XLBNRACCS1, XLBNRACCS2, XLBNRACCS3, &
+                                  XFSACCRG, XLBSACCR1, XLBSACCR2, XLBSACCR3,     &
+                                  XFNSACCRG, XLBNSACCR1, XLBNSACCR2, XLBNSACCR3
 !
 IMPLICIT NONE
 !
@@ -87,9 +92,10 @@ 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)    :: 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 ! 
@@ -99,6 +105,7 @@ 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
 !
 !*       0.2   Declarations of local variables :
@@ -107,6 +114,7 @@ LOGICAL, DIMENSION(SIZE(PRRT))  :: GACC
 !
 REAL,    DIMENSION(SIZE(PRRT))  :: Z1, Z2, Z3, Z4
 REAL,    DIMENSION(SIZE(PRRT))  :: ZZW1, ZZW2, ZZW3, ZZW4, ZZW5
+REAL,    DIMENSION(SIZE(PRRT))  :: ZZWC1, ZZWC2, ZZWC3, ZZWC4, ZZWC5
 !
 INTEGER, DIMENSION(SIZE(PRRT))  :: IVEC1,IVEC2       ! Vectors of indices
 REAL,    DIMENSION(SIZE(PRRT))  :: ZVEC1,ZVEC2,ZVEC3 ! Work vectors
@@ -162,7 +170,7 @@ WHERE( GACC )
 !
 !        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)
@@ -175,7 +183,22 @@ WHERE( GACC )
   	                    			             * (ZVEC1(:) - 1.0)
    ZZW1(:) = ZVEC3(:)
 !
-!        1.3.4b perform the bilinear interpolation of the normalized
+!        1.3.3b perform the bilinear interpolation of the normalized
+!               RACCSS-kernel for concentration : for small rain drops transformed into snow
+!
+   Z1(:) = GET_XKER_N_RACCSS(IVEC1(:)+1,IVEC2(:)+1)
+   Z2(:) = GET_XKER_N_RACCSS(IVEC1(:)+1,IVEC2(:)  )
+   Z3(:) = GET_XKER_N_RACCSS(IVEC1(:)  ,IVEC2(:)+1)
+   Z4(:) = GET_XKER_N_RACCSS(IVEC1(:)  ,IVEC2(:)  )
+      ZVEC3(:) =  (   Z1(:)* ZVEC2(:)          &
+                    - Z2(:)*(ZVEC2(:) - 1.0) ) &
+                				 	     *  ZVEC1(:)    &
+                 - (  Z3(:)* ZVEC2(:)          &
+                    - Z4(:)*(ZVEC2(:) - 1.0) ) &
+  	                    			             * (ZVEC1(:) - 1.0)
+   ZZWC1(:) = ZVEC3(:)
+!
+!        1.3.4  perform the bilinear interpolation of the normalized
 !               RACCS-kernel : total frozen rain drops
 !
    Z1(:) = GET_XKER_RACCS(IVEC1(:)+1,IVEC2(:)+1)
@@ -190,10 +213,26 @@ WHERE( GACC )
                                                            * (ZVEC1(:) - 1.0)
    ZZW2(:) = ZVEC3(:)
 !
+!        1.3.4b perform the bilinear interpolation of the normalized
+!               RACCS-kernel for concentration : total frozen rain drops
+!
+   Z1(:) = GET_XKER_N_RACCS(IVEC1(:)+1,IVEC2(:)+1)
+   Z2(:) = GET_XKER_N_RACCS(IVEC1(:)+1,IVEC2(:)  )
+   Z3(:) = GET_XKER_N_RACCS(IVEC1(:)  ,IVEC2(:)+1)
+   Z4(:) = GET_XKER_N_RACCS(IVEC1(:)  ,IVEC2(:)  )
+      ZVEC3(:) =  (    Z1(:)* ZVEC2(:)          &
+                    -  Z2(:)*(ZVEC2(:) - 1.0) ) &
+                                                           *  ZVEC1(:)      &
+                 - (   Z3(:)* ZVEC2(:)          &
+                    -  Z4(:)*(ZVEC2(:) - 1.0) ) &
+                                                           * (ZVEC1(:) - 1.0)
+   ZZWC2(:) = ZVEC3(:)
+!
 ! Correction of ZZW1 to ensure that ZZW1 <= ZZW2
 ! ie                coll. of small drops <= coll. of all drops
 !
    ZZW1(:) = MIN(ZZW1(:),ZZW2(:))
+   ZZWC1(:)= MIN(ZZWC1(:),ZZWC2(:))
 !
 !        1.3.5  perform the bilinear interpolation of the normalized
 !               SACCRG-kernel : snow transformed into graupel
@@ -210,27 +249,55 @@ WHERE( GACC )
 			                                     * (ZVEC2(:) - 1.0)
    ZZW3(:) = ZVEC3(:)
 !
+!        1.3.5b perform the bilinear interpolation of the normalized
+!               SACCRG-kernel for concentration : snow transformed into graupel
+!
+   Z1(:) = GET_XKER_N_SACCRG(IVEC2(:)+1,IVEC1(:)+1)
+   Z2(:) = GET_XKER_N_SACCRG(IVEC2(:)+1,IVEC1(:)  )
+   Z3(:) = GET_XKER_N_SACCRG(IVEC2(:)  ,IVEC1(:)+1)
+   Z4(:) = GET_XKER_N_SACCRG(IVEC2(:)  ,IVEC1(:)  )
+      ZVEC3(:) =  (   Z1(:)* ZVEC1(:)          &
+                    - Z2(:)*(ZVEC1(:) - 1.0) ) &
+      			 	                             *  ZVEC2(:)    &
+                 - (  Z3(:)* ZVEC1(:)          &
+                    - Z4(:)*(ZVEC1(:) - 1.0) ) &
+			                                     * (ZVEC2(:) - 1.0)
+   ZZWC3(:) = ZVEC3(:)
+!
 !        1.3.4  raindrop accretion on the small sized aggregates
 !      
    ZZW4(:) = PCRT(:) *                                                      & !! coef of RRACCS and RRACCS
-            XFRACCSS *( PRST(:)*PLBDS(:)**XBS )*( PRHODREF(:)**(1-XCEXVT) ) &
+            XFRACCSS * PCST(:) * PRHODREF(:)**(1-XCEXVT)                    &
          *( XLBRACCS1/( PLBDS(:)**2               ) +                       &
             XLBRACCS2/( PLBDS(:)    * PLBDR(:)    ) +                       &
             XLBRACCS3/(               PLBDR(:)**2 ) ) / PLBDR(:)**XBR
+!
+   ZZWC4(:)= PCRT(:) *                                                      & !! coef of RRACCS and RRACCS
+            XFNRACCSS * PCST(:) * PRHODREF(:)**(1-XCEXVT)                    &
+         *( XLBNRACCS1/( PLBDS(:)**2               ) +                       &
+            XLBNRACCS2/( PLBDS(:)    * PLBDR(:)    ) +                       &
+            XLBNRACCS3/(               PLBDR(:)**2 ) ) / PLBDR(:)**XBR
 
 !
 !        1.3.6  raindrop accretion-conversion of the large sized aggregates
 !               into graupeln
 !
    ZZW5(:) = XFSACCRG * ZZW3(:) * PCRT(:) *             & ! RSACCRG
-            ( PRST(:) )*( PRHODREF(:)**(1-XCEXVT)   ) * &
+             PCST(:) * PLBDS(:)**(-XBS) * PRHODREF(:)**(1-XCEXVT) * &
             ( XLBSACCR1/( PLBDR(:)**2               ) + &
               XLBSACCR2/( PLBDR(:)    * PLBDS(:)    ) + &
               XLBSACCR3/(               PLBDS(:)**2 ) )
+!
+   ZZWC5(:)= XFNSACCRG * ZZW3(:) * PCRT(:) *             & ! RSACCRG
+             PCST(:) * PLBDS(:)**(-XBS) * PRHODREF(:)**(1-XCEXVT) * &
+            ( XLBNSACCR1/( PLBDR(:)**2               ) + &
+              XLBNSACCR2/( PLBDR(:)    * PLBDS(:)    ) + &
+              XLBNSACCR3/(               PLBDS(:)**2 ) )
 !
    P_RR_ACC(:) = - ZZW4(:) *  ZZW2(:)
-   P_CR_ACC(:) = P_RR_ACC(:) * PCRT(:)/PRRT(:)
+   P_CR_ACC(:) = - ZZWC4(:) * ZZWC2(:)
    P_RS_ACC(:) = ZZW4(:) *  ZZW1(:) - ZZW5(:)
+   P_CS_ACC(:) = - ZZWC5(:)
    P_RG_ACC(:) = ZZW4(:) * ( ZZW2(:) - ZZW1(:) ) + ZZW5(:)
    P_TH_ACC(:) = - P_RR_ACC(:) * (PLSFACT(:)-PLVFACT(:))
 !
@@ -253,6 +320,20 @@ CONTAINS
   END FUNCTION GET_XKER_RACCSS
 !
 !-------------------------------------------------------------------------------
+!
+  FUNCTION GET_XKER_N_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_N_RACCSS(MAX(MIN(I1(I),SIZE(XKER_N_RACCSS,1)),1),MAX(MIN(I2(I),SIZE(XKER_N_RACCSS,2)),1))
+    END DO
+  END FUNCTION GET_XKER_N_RACCSS
+!
+!-------------------------------------------------------------------------------
 !
   FUNCTION GET_XKER_RACCS(I1,I2) RESULT(RET)
     INTEGER, DIMENSION(:) :: I1
@@ -267,6 +348,20 @@ CONTAINS
   END FUNCTION GET_XKER_RACCS
 !
 !-------------------------------------------------------------------------------
+!
+  FUNCTION GET_XKER_N_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_N_RACCS(MAX(MIN(I1(I),SIZE(XKER_N_RACCS,1)),1),MAX(MIN(I2(I),SIZE(XKER_N_RACCS,2)),1))
+    END DO
+  END FUNCTION GET_XKER_N_RACCS
+!
+!-------------------------------------------------------------------------------
 !
   FUNCTION GET_XKER_SACCRG(I1,I2) RESULT(RET)
     INTEGER, DIMENSION(:) :: I1
@@ -281,5 +376,19 @@ CONTAINS
   END FUNCTION GET_XKER_SACCRG
 !
 !-------------------------------------------------------------------------------
+!
+  FUNCTION GET_XKER_N_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_N_SACCRG(MAX(MIN(I1(I),SIZE(XKER_N_SACCRG,1)),1),MAX(MIN(I2(I),SIZE(XKER_N_SACCRG,2)),1))
+    END DO
+  END FUNCTION GET_XKER_N_SACCRG
+!
+!-------------------------------------------------------------------------------
 !
 END SUBROUTINE LIMA_RAIN_ACCR_SNOW
diff --git a/src/MNH/lima_sedimentation.f90 b/src/MNH/lima_sedimentation.f90
index d7d26bf02..23072bb81 100644
--- a/src/MNH/lima_sedimentation.f90
+++ b/src/MNH/lima_sedimentation.f90
@@ -76,7 +76,8 @@ USE MODD_CST,              ONLY: XRHOLW, XCL, XCI, XPI
 USE MODD_PARAMETERS,       ONLY: JPHEXT, JPVEXT
 USE MODD_PARAM_LIMA,       ONLY: XCEXVT, XRTMIN, XCTMIN, NSPLITSED,           &
                                  XLB, XLBEX, XD, XFSEDR, XFSEDC,              &
-                                 XALPHAC, XNUC, XALPHAS, XNUS, LSNOW_T
+                                 XALPHAC, XNUC, XALPHAS, XNUS, LSNOW_T,       &
+                                 NMOM_S
 USE MODD_PARAM_LIMA_COLD,  ONLY: XLBEXI, XLBI, XDI, XLBDAS_MAX, XBS, XEXSEDS, &
                                  XLBDAS_MIN, XTRANS_MP_GAMMAS, XFVELOS
 
@@ -194,7 +195,7 @@ DO JN = 1 ,  NSPLITSED(KID)
          IF (ZMOMENTS==2) ZCS(JL) = PCS(I1(JL),I2(JL),I3(JL))
       END DO
 !
-      IF (KID == 5 .AND. LSNOW_T) THEN
+      IF (KID == 5 .AND. NMOM_S.EQ.1 .AND. LSNOW_T) THEN
          ZLBDA(:) = 1.E10
          WHERE(ZT(:)>263.15 .AND. ZRS(:)>XRTMIN(5))
             ZLBDA(:) = MAX(MIN(XLBDAS_MAX, 10**(14.554-0.0423*ZT(:))),XLBDAS_MIN)
@@ -209,6 +210,8 @@ DO JN = 1 ,  NSPLITSED(KID)
          IF (ZMOMENTS==1) ZLBDA(:) = XLB(KID) * ( ZRHODREF(:) * ZRS(:) )**XLBEX(KID)
          IF (ZMOMENTS==2) ZLBDA(:) = ( XLB(KID)*ZCS(:) / ZRS(:) )**XLBEX(KID)
          ZZY(:) = ZRHODREF(:)**(-XCEXVT) * ZLBDA(:)**(-XD(KID))
+         IF (LSNOW_T .AND. KID==5) &
+              ZZY(:) = ZZY(:) * (1 + (XFVELOS/ZLBDA(:))**XALPHAS)**(-XNUS-(XD(KID)+XBS)/XALPHAS)
          ZZW(:) = XFSEDR(KID) * ZRS(:) * ZZY(:) * ZRHODREF(:)
       END IF ! Wurtz
 !
diff --git a/src/MNH/lima_snow_deposition.f90 b/src/MNH/lima_snow_deposition.f90
index 5a6ec35ca..0531a3a4a 100644
--- a/src/MNH/lima_snow_deposition.f90
+++ b/src/MNH/lima_snow_deposition.f90
@@ -10,7 +10,7 @@
 INTERFACE
       SUBROUTINE LIMA_SNOW_DEPOSITION (LDCOMPUTE,                         &
                                        PRHODREF, PSSI, PAI, PCJ, PLSFACT, &
-                                       PRST, PLBDS,                       &
+                                       PRST, PCST, PLBDS,                 &
                                        P_RI_CNVI, P_CI_CNVI,              &
                                        P_TH_DEPS, P_RS_DEPS               )
 !
@@ -23,6 +23,7 @@ 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 
 !
@@ -38,7 +39,7 @@ END MODULE MODI_LIMA_SNOW_DEPOSITION
 !     ##########################################################################
 SUBROUTINE LIMA_SNOW_DEPOSITION (LDCOMPUTE,                                &
                                  PRHODREF,  PSSI, PAI, PCJ, PLSFACT,       &
-                                 PRST, PLBDS,                              &
+                                 PRST, PCST, PLBDS,                        &
                                  P_RI_CNVI, P_CI_CNVI,                     &
                                  P_TH_DEPS, P_RS_DEPS                      )
 !     ##########################################################################
@@ -65,6 +66,7 @@ SUBROUTINE LIMA_SNOW_DEPOSITION (LDCOMPUTE,                                &
 !!
 !  J. Wurtz       03/2022: new snow characteristics
 !  B. Vie         03/2022: Add option for 1-moment pristine ice
+!  M. Taufour     07/2022: add snow concentration
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -94,6 +96,7 @@ 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 m.r. at t 
 !
 REAL, DIMENSION(:),   INTENT(IN)    :: PLBDS    ! Graupel m.r. at t 
 !
@@ -124,7 +127,7 @@ IF (NMOM_I.EQ.1) THEN
 ! Deposition of water vapor on r_s: RVDEPS
 !
       ZZW(:) = 0.0
-      WHERE ( (PRST(:)>XRTMIN(5)) )
+      WHERE ( PRST(:)>XRTMIN(5) )
          ZZW(:) = PRST(:) * PSSI(:) / PAI(:) * &
               ( X0DEPS*PLBDS(:)**XEX0DEPS +                  &
                 X1DEPS*PLBDS(:)**(XEX1DEPS+XBS)*PCJ(:) *     &
@@ -142,10 +145,10 @@ ELSE
 !
       ZZW2(:) = 0.0
       ZZW(:) = 0.0
-      WHERE ( PLBDS(:)<XLBDASCNVI_MAX .AND. (PRST(:)>XRTMIN(5)) &
-                                      .AND. (PSSI(:)<0.0)       )
+      WHERE ( PLBDS(:)<XLBDASCNVI_MAX .AND. PRST(:)>XRTMIN(5) .AND. PCST(:)>XCTMIN(5) &
+                                      .AND. PSSI(:)<0.0                               )
          ZZW(:) = (PLBDS(:)*XDSCNVI_LIM)**(XALPHAS)
-         ZZX(:) = ( -PSSI(:)/PAI(:) ) * (XNS*PRST(:)*PLBDS(:)**XBS) * (ZZW(:)**XNUS) * EXP(-ZZW(:))
+         ZZX(:) = ( -PSSI(:)/PAI(:) ) * PCST(:) * (ZZW(:)**XNUS) * EXP(-ZZW(:))
 !
          ZZW(:) = ( XR0DEPSI+XR1DEPSI*PCJ(:) )*ZZX(:)
 !
@@ -161,16 +164,15 @@ ELSE
 !
 !
       ZZW(:) = 0.0
-      WHERE ( (PRST(:)>XRTMIN(5)) )
-         ZZW(:) = ( PRST(:)*PSSI(:)/(PAI(:)) ) *           &
+      WHERE ( PRST(:)>XRTMIN(5) .AND. PCST(:)>XCTMIN(5) )
+         ZZW(:) = ( PCST(:)*PSSI(:)/(PAI(:)) ) *           &
               ( X0DEPS*PLBDS(:)**XEX0DEPS +                &
-              ( X1DEPS*PCJ(:)*(PLBDS(:))**(XBS+XEX1DEPS) * &
+              ( X1DEPS*PCJ(:)*PLBDS(:)**XEX1DEPS * &
                    (1+0.5*(XFVELOS/PLBDS(:))**XALPHAS)**(-XNUS+XEX1DEPS/XALPHAS)) )
          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(:)
 ! 
    END WHERE
 END IF
diff --git a/src/MNH/lima_tendencies.f90 b/src/MNH/lima_tendencies.f90
index 3e63f4d38..19bc49ec6 100644
--- a/src/MNH/lima_tendencies.f90
+++ b/src/MNH/lima_tendencies.f90
@@ -7,44 +7,46 @@
 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_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_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_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_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                                               )
 !
 REAL,                 INTENT(IN)    :: PTSTEP 
 LOGICAL, DIMENSION(:),INTENT(IN)    :: LDCOMPUTE
@@ -100,6 +102,8 @@ REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_DEPI  ! deposition of vapor on ice (
 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
 !
@@ -113,7 +117,8 @@ 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_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
@@ -123,9 +128,11 @@ 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_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  ! conversion-melting (CMEL) : rs, rg=-rs
+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
@@ -147,8 +154,10 @@ 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_RH_WETG ! wet growth of graupel (WETG) : rc, NC, rr, Nr, ri, Ni, rs, rg, rh, th
+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
@@ -158,7 +167,8 @@ 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_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
@@ -166,7 +176,32 @@ REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_HMG  ! hallett mossop graupel (HMG)
 !
 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) :: 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
@@ -195,44 +230,46 @@ END MODULE MODI_LIMA_TENDENCIES
 !#####################################################################
 !
 !#####################################################################
-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_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_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_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_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
@@ -274,6 +311,7 @@ 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
@@ -283,6 +321,7 @@ 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_BERGERON
 !
@@ -344,6 +383,8 @@ REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_DEPI  ! deposition of vapor on ice (
 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
 !
@@ -357,6 +398,7 @@ 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, rg, th
 !
 REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_HMS
@@ -367,9 +409,11 @@ 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_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  ! conversion-melting (CMEL) : rs, rg=-rs
+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
@@ -391,8 +435,10 @@ 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_RH_WETG ! wet growth of graupel (WETG) : rc, NC, rr, Nr, ri, Ni, rs, rg, rh, th
+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
@@ -402,6 +448,7 @@ 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, rg, th
 !
 REAL, DIMENSION(:),   INTENT(INOUT) :: P_RI_HMG
@@ -410,7 +457,32 @@ REAL, DIMENSION(:),   INTENT(INOUT) :: P_RG_HMG  ! hallett mossop graupel (HMG)
 !
 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) :: 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
@@ -443,6 +515,7 @@ REAL,    DIMENSION(SIZE(PRCT))  :: ZLBDR
 REAL,    DIMENSION(SIZE(PRCT))  :: ZLBDR3
 REAL,    DIMENSION(SIZE(PRCT))  :: ZLBDI
 REAL,    DIMENSION(SIZE(PRCT))  :: ZLBDS
+REAL,    DIMENSION(SIZE(PRCT))  :: ZLBDS3
 REAL,    DIMENSION(SIZE(PRCT))  :: ZLBDG
 REAL,    DIMENSION(SIZE(PRCT))  :: ZLBDH
 
@@ -615,6 +688,7 @@ IF (NMOM_S.EQ.1) THEN
 ELSE
    ZLBDS(:) = (XLBS*PCST(:)/ZRST(:))**XLBEXS
 END IF
+ZLBDS3(:) = ZLBDS(:)**3.
 !
 ! Graupel
 ZLBDG(:)  = 1.E10
@@ -741,6 +815,7 @@ IF (LCOLD) THEN
    PA_RI(:) = PA_RI(:) + P_RI_DEPI(:) + P_RI_CNVS(:)
    IF (NMOM_I.GE.2) PA_CI(:) = PA_CI(:)                + P_CI_CNVS(:)
    PA_RS(:) = PA_RS(:)                - P_RI_CNVS(:)
+   IF (NMOM_S.GE.2) PA_CS(:) = PA_CS(:)                - P_CI_CNVS(:)
 
 END IF
 !
@@ -750,7 +825,7 @@ IF (LCOLD .AND. LSNOW) THEN
    !
    CALL LIMA_SNOW_DEPOSITION (LDCOMPUTE,                         & ! depends on IF, PF
                               PRHODREF, ZSSI, ZAI, ZCJ, ZLSFACT, &
-                              ZRST/ZPF1D, ZLBDS,                 &
+                              ZRST/ZPF1D, PCST/ZPF1D, ZLBDS,     &
                               P_RI_CNVI, P_CI_CNVI,              &
                               P_TH_DEPS, P_RS_DEPS               )
    !
@@ -762,11 +837,23 @@ IF (LCOLD .AND. LSNOW) THEN
    PA_RI(:) = PA_RI(:) + P_RI_CNVI(:)
    IF (NMOM_I.GE.2) PA_CI(:) = PA_CI(:) + P_CI_CNVI(:)
    PA_RS(:) = PA_RS(:) - P_RI_CNVI(:) + P_RS_DEPS(:) 
+   IF (NMOM_S.GE.2) PA_CS(:) = PA_CS(:) - P_CI_CNVI(:)
    PA_TH(:) = PA_TH(:)                + P_TH_DEPS(:)
    PA_RV(:) = PA_RV(:)                - P_RS_DEPS(:) 
 
 END IF
 !
+IF (LSNOW .AND. NMOM_S.GE.2) THEN 
+   CALL LIMA_SNOW_SELF_COLLECTION (LDCOMPUTE,           & ! depends on PF
+                                   PRHODREF,            &
+                                   PCST/ZPF1D(:), ZLBDS, ZLBDS3, &
+                                   P_CS_SSC             )
+   !
+   P_CS_SSC(:) = P_CS_SSC(:) * ZPF1D(:)
+   !
+   PA_CS(:) = PA_CS(:) + P_CS_SSC(:)
+END IF
+!
 ! Lambda_s limited for collection processes to prevent too high concentrations
 ! must be changed or removed if C and x modified
 !
@@ -774,10 +861,10 @@ END IF
 !
 !
 IF (LCOLD .AND. LSNOW) THEN
-   CALL LIMA_ICE_AGGREGATION_SNOW (LDCOMPUTE,                                        & ! depends on IF, PF
-                                   ZT, PRHODREF,                                     &
-                                   ZRIT/ZIF1D, ZRST/ZPF1D, PCIT/ZIF1D, ZLBDI, ZLBDS, &
-                                   P_RI_AGGS, P_CI_AGGS                              )
+   CALL LIMA_ICE_AGGREGATION_SNOW (LDCOMPUTE,                                                    & ! depends on IF, PF
+                                   ZT, PRHODREF,                                                 &
+                                   ZRIT/ZIF1D, ZRST/ZPF1D, PCIT/ZIF1D, PCST/ZPF1D, ZLBDI, ZLBDS, &
+                                   P_RI_AGGS, P_CI_AGGS                                          )
    P_CI_AGGS(:) = P_CI_AGGS(:) * ZIF1D(:)
    P_RI_AGGS(:) = P_RI_AGGS(:) * ZIF1D(:)
    !
@@ -787,9 +874,9 @@ IF (LCOLD .AND. LSNOW) THEN
 END IF
 !
 IF (LWARM .AND. LCOLD) THEN
-   CALL LIMA_GRAUPEL_DEPOSITION (LDCOMPUTE, PRHODREF,                        & ! depends on PF ?
-                                 ZRGT/ZPF1D, ZSSI, ZLBDG, ZAI, ZCJ, ZLSFACT, &
-                                 P_TH_DEPG, P_RG_DEPG                        )
+   CALL LIMA_GRAUPEL_DEPOSITION (LDCOMPUTE, PRHODREF,                                    & ! depends on PF ?
+                                 ZRGT/ZPF1D, PCGT/ZPF1D, ZSSI, ZLBDG, ZAI, ZCJ, ZLSFACT, &
+                                 P_TH_DEPG, P_RG_DEPG                                    )
    P_RG_DEPG(:) = P_RG_DEPG(:) * ZPF1D(:)
    P_TH_DEPG(:) = P_RG_DEPG(:) * ZLSFACT(:)
    !
@@ -818,12 +905,13 @@ IF (LWARM .AND. LCOLD .AND. LSNOW) THEN
      !
    CALL LIMA_DROPLETS_RIMING_SNOW (PTSTEP, LDCOMPUTE,                                & ! depends on CF
                                    PRHODREF, ZT,                                     &
-                                   ZRCT/ZCF1D, PCCT/ZCF1D, ZRST/ZPF1D, ZLBDC, ZLBDS, ZLVFACT, ZLSFACT, &
-                                   P_TH_RIM, P_RC_RIM, P_CC_RIM, P_RS_RIM, P_RG_RIM, &
+                                   ZRCT/ZCF1D, PCCT/ZCF1D, ZRST/ZPF1D, PCST/ZPF1D, ZLBDC, ZLBDS, ZLVFACT, ZLSFACT, &
+                                   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_RC_RIM(:) = P_RC_RIM(:) * ZCF1D(:)
    P_CC_RIM(:) = P_CC_RIM(:) * ZCF1D(:)
    P_RS_RIM(:) = P_RS_RIM(:) * ZCF1D(:)
+   P_CS_RIM(:) = P_CS_RIM(:) * ZCF1D(:)
    P_RG_RIM(:) = P_RG_RIM(:) * ZCF1D(:)
    P_TH_RIM(:) = - P_RC_RIM(:) * (ZLSFACT(:)-ZLVFACT(:))
    P_RI_HMS(:) = P_RI_HMS(:) * ZCF1D(:)
@@ -835,7 +923,9 @@ IF (LWARM .AND. LCOLD .AND. LSNOW) THEN
    PA_RI(:) = PA_RI(:)               + P_RI_HMS(:)
    IF (NMOM_I.GE.2) PA_CI(:) = PA_CI(:)               + P_CI_HMS(:)
    PA_RS(:) = PA_RS(:) + P_RS_RIM(:) + P_RS_HMS(:)
+   IF (NMOM_S.GE.2) PA_CS(:) = PA_CS(:) + P_CS_RIM(:)
    PA_RG(:) = PA_RG(:) + P_RG_RIM(:) 
+   IF (NMOM_G.GE.2) PA_CG(:) = PA_CG(:) - P_CS_RIM(:)
    PA_TH(:) = PA_TH(:) + P_TH_RIM(:)
 
 END IF
@@ -843,18 +933,21 @@ END IF
 IF (LWARM .AND. LRAIN .AND. LCOLD .AND. LSNOW) THEN
    CALL LIMA_RAIN_ACCR_SNOW (PTSTEP, LDCOMPUTE,                                & ! depends on PF
                              PRHODREF, ZT,                                     &
-                             ZRRT/ZPF1D, PCRT/ZPF1D, ZRST/ZPF1D, ZLBDR, ZLBDS, ZLVFACT, ZLSFACT, &
-                             P_TH_ACC, P_RR_ACC, P_CR_ACC, P_RS_ACC, P_RG_ACC )
+                             ZRRT/ZPF1D, PCRT/ZPF1D, ZRST/ZPF1D, PCST/ZPF1D, ZLBDR, ZLBDS, ZLVFACT, ZLSFACT, &
+                             P_TH_ACC, P_RR_ACC, P_CR_ACC, P_RS_ACC, P_CS_ACC, P_RG_ACC )
    P_RR_ACC(:) = P_RR_ACC(:) * ZPF1D(:)
    P_CR_ACC(:) = P_CR_ACC(:) * ZPF1D(:)
    P_RS_ACC(:) = P_RS_ACC(:) * ZPF1D(:)
+   P_CS_ACC(:) = P_CS_ACC(:) * ZPF1D(:)
    P_RG_ACC(:) = P_RG_ACC(:) * ZPF1D(:)
    P_TH_ACC(:) = - P_RR_ACC(:) * (ZLSFACT(:)-ZLVFACT(:))
    !
    PA_RR(:) = PA_RR(:) + P_RR_ACC(:)
    IF (NMOM_R.GE.2) PA_CR(:) = PA_CR(:) + P_CR_ACC(:)
    PA_RS(:) = PA_RS(:) + P_RS_ACC(:)
+   IF (NMOM_S.GE.2) PA_CS(:) = PA_CS(:) + P_CS_ACC(:)
    PA_RG(:) = PA_RG(:) + P_RG_ACC(:)
+   IF (NMOM_G.GE.2) PA_CG(:) = PA_CG(:) - P_CS_ACC(:)
    PA_TH(:) = PA_TH(:) + P_TH_ACC(:)
 
 END IF
@@ -866,12 +959,15 @@ IF (LWARM .AND. LCOLD .AND. LSNOW) THEN
    !
    CALL LIMA_CONVERSION_MELTING_SNOW (LDCOMPUTE,                           & ! depends on PF
                                       PRHODREF, PPABST, ZT, ZKA, ZDV, ZCJ, &
-                                      PRVT, ZRST/ZPF1D, ZLBDS,             &
-                                      P_RS_CMEL                           )
+                                      PRVT, ZRST/ZPF1D, PCST/ZPF1D, ZLBDS, &
+                                      P_RS_CMEL, P_CS_CMEL                 )
    P_RS_CMEL(:) = P_RS_CMEL(:) * ZPF1D(:)
+   P_CS_CMEL(:) = P_CS_CMEL(:) * ZPF1D(:)
    !
    PA_RS(:) = PA_RS(:) + P_RS_CMEL(:)
+   IF (NMOM_S.GE.2) PA_CS(:) = PA_CS(:) + P_CS_CMEL(:)
    PA_RG(:) = PA_RG(:) - P_RS_CMEL(:)
+   IF (NMOM_G.GE.2) PA_CG(:) = PA_CG(:) - P_CS_CMEL(:)
 
 END IF
 !
@@ -892,6 +988,7 @@ IF (LWARM .AND. LRAIN .AND. LCOLD ) THEN
    PA_RI(:) = PA_RI(:) + P_RI_CFRZ(:)
    IF (NMOM_I.GE.2) PA_CI(:) = PA_CI(:) + P_CI_CFRZ(:)
    PA_RG(:) = PA_RG(:) - P_RR_CFRZ(:) - P_RI_CFRZ(:)
+   IF (NMOM_G.GE.2) PA_CG(:) = PA_CG(:) - P_CR_CFRZ(:)
 
 END IF
 !
@@ -902,7 +999,7 @@ IF (LWARM .AND. LCOLD .AND. LSNOW .AND. LCIBU) THEN
    !
    CALL LIMA_COLLISIONAL_ICE_BREAKUP (LDCOMPUTE,                                      & ! depends on PF (IF for fragments size)
                                       PRHODREF,                                       &
-                                      ZRIT/ZIF1D, ZRST/ZPF1D, ZRGT/ZPF1D, PCIT/ZIF1D, &
+                                      ZRIT/ZIF1D, ZRST/ZPF1D, ZRGT/ZPF1D, PCIT/ZIF1D, PCST/ZPF1D, PCST/ZPF1D, &
                                       ZLBDS, ZLBDG,                                   &
                                       P_RI_CIBU, P_CI_CIBU                            )
    P_RI_CIBU(:) = P_RI_CIBU(:) * ZPF1D(:)
@@ -944,25 +1041,42 @@ IF (LWARM .AND. LCOLD) THEN
    CALL LIMA_GRAUPEL (PTSTEP, LDCOMPUTE,                                     & ! depends on PF, CF, IF
                       PRHODREF, PPABST, ZT, ZKA, ZDV, ZCJ,                   &
                       PRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT,                    &
-                      PCCT, PCRT, PCIT,                                      &
+                      PCCT, PCRT, PCIT, PCST, PCGT,                          &
                       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_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_RG_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_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_RG, PA_RH                      )
+                      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
-!     CALL LIMA_HAIL_GROWTH
-
-!     CALL LIMA_HAIL_CONVERSION
-
-!     CALL LIMA_HAIL_MELTING
+   CALL LIMA_HAIL_DEPOSITION (LDCOMPUTE, PRHODREF,                                    & ! depends on PF ?
+                              ZRHT/ZPF1D, PCHT/ZPF1D, ZSSI, ZLBDH, ZAI, ZCJ, ZLSFACT, &
+                              P_TH_DEPH, P_RH_DEPH                                    )
+   P_RH_DEPH(:) = P_RH_DEPH(:) * ZPF1D(:)
+   P_TH_DEPH(:) = P_RH_DEPH(:) * ZLSFACT(:)
+   !
+   PA_RV(:) = PA_RV(:) - P_RH_DEPH(:)
+   PA_RH(:) = PA_RH(:) + P_RH_DEPH(:)
+   PA_TH(:) = PA_TH(:) + P_TH_DEPH(:)
+!     CALL LIMA_HAIL_GROWTH   LIMA_HAIL_CONVERSION   LIMA_HAIL_MELTING
+   CALL LIMA_HAIL (PTSTEP, LDCOMPUTE,                                     & ! depends on PF, CF, IF
+                   PRHODREF, PPABST, ZT, ZKA, ZDV, ZCJ,                   &
+                   PRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, ZRHT,              &
+                   PCCT, PCRT, PCIT, PCST, PCGT, PCHT,                    &
+                   ZLBDC, ZLBDR, ZLBDS, ZLBDG, ZLBDH,                     &
+                   ZLVFACT, ZLSFACT,                                      &
+                   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 )
 END IF
    !  
 END SUBROUTINE LIMA_TENDENCIES
diff --git a/src/MNH/modd_param_lima_cold.f90 b/src/MNH/modd_param_lima_cold.f90
index 3ae77bb76..3801cfcb7 100644
--- a/src/MNH/modd_param_lima_cold.f90
+++ b/src/MNH/modd_param_lima_cold.f90
@@ -20,7 +20,8 @@
 !!    -------------
 !!      Original             ??/??/13 
 !!      C. Barthe            14/03/2022  add CIBU and RDSF
-!  J. Wurtz       03/2022: new snow characteristics
+!       J. Wurtz                03/2022: new snow characteristics
+!       M. Taufour              07/2022: add concentration for snow, graupel, hail
 !!
 !-------------------------------------------------------------------------------
 USE MODD_PARAMETERS, ONLY: JPSVNAMELGTMAX
@@ -57,8 +58,9 @@ REAL,SAVE :: XLBDAS_MIN, XLBDAS_MAX   ! Max values allowed for the shape paramet
 REAL,SAVE :: XFVELOS                  ! Wurtz - snow fall speed parameterizaed after Thompson 2008
 REAL,SAVE :: XTRANS_MP_GAMMAS         ! Wurtz - change between lambda value for MP and gen. gamma
 !
-CHARACTER(LEN=JPSVNAMELGTMAX),DIMENSION(5),PARAMETER &
-                              :: CLIMA_COLD_NAMES=(/'CICE    ','CIFNFREE','CIFNNUCL', &
+CHARACTER(LEN=JPSVNAMELGTMAX),DIMENSION(8),PARAMETER &
+                              :: CLIMA_COLD_NAMES=(/'CICE    ','CSNOW   ','CGRAUPEL','CHAIL   ',&
+                                                        'CIFNFREE','CIFNNUCL', &
                                                         'CCNINIMM','CCCNNUCL'/)
                                  ! basenames of the SV articles stored
                                  ! in the binary files
@@ -66,8 +68,8 @@ CHARACTER(LEN=JPSVNAMELGTMAX),DIMENSION(5),PARAMETER &
                                  !     IN:Ice-nuclei Nucleated (activated IFN by Dep/Cond)
                                  !     NI:Nuclei Immersed (activated IFN by Imm)
                                  !     HF:Homogeneous Freezing
-CHARACTER(LEN=JPSVNAMELGTMAX),DIMENSION(5),PARAMETER &
-                              :: CLIMA_COLD_CONC=(/'NI ','NIF','NIN','NNI','NNH'/)!for DIAG
+CHARACTER(LEN=JPSVNAMELGTMAX),DIMENSION(8),PARAMETER &
+                              :: CLIMA_COLD_CONC=(/'NI ','NS ','NG ','NH ','NIF','NIN','NNI','NNH'/)!for DIAG
 !
 !-------------------------------------------------------------------------------
 !
@@ -75,7 +77,8 @@ CHARACTER(LEN=JPSVNAMELGTMAX),DIMENSION(5),PARAMETER &
 !             ---------------------
 !
 REAL,SAVE :: XFSEDRI,XFSEDCI,                  & ! Constants for sedimentation
-             XFSEDS, XEXSEDS                     ! fluxes of ice and snow
+             XFSEDRS,XFSEDCS,                  & !         
+    	     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
@@ -112,12 +115,21 @@ REAL,SAVE :: XCOLEXIS,                         & ! Constants for snow
              XAGGS_RLARGE1,XAGGS_RLARGE2,      &
              XFIAGGS,XEXIAGGS
 !
+REAL,SAVE :: XACCS1, XSPONBUDS1, XSPONBUDS2,   & ! Constant for snow
+             XSPONBUDS3, XSPONCOEFS2             ! spontaneous break-up
+!
 !??????????????????
 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,DIMENSION(:,:), SAVE, ALLOCATABLE :: XKER_N_SSCS
+REAL,SAVE :: XCOLSS,XCOLEXSS,XFNSSCS,          & !
+             XLBNSSCS1,XLBNSSCS2,              & ! Constants for snow self collection
+             XSCINTP1S,XSCINTP2S                 ! 
+INTEGER,SAVE :: NSCLBDAS                         !
+
 REAL,SAVE :: XAUTO3, XAUTO4,                   & ! Constants for pristine ice
              XLAUTS,   XLAUTS_THRESHOLD,       & ! autoconversion : AUT
              XITAUTS, XITAUTS_THRESHOLD,       & ! (ini_ice_com) 
diff --git a/src/MNH/modd_param_lima_mixed.f90 b/src/MNH/modd_param_lima_mixed.f90
index 6074d09fb..6a9c763dc 100644
--- a/src/MNH/modd_param_lima_mixed.f90
+++ b/src/MNH/modd_param_lima_mixed.f90
@@ -15,7 +15,8 @@
 !!    -------------
 !!      Original             ??/??/13 
 !!      C. Barthe            14/03/2022  add CIBU and RDSF
-!  J. Wurtz       03/2022: new snow characteristics
+!       J. Wurtz                03/2022: new snow characteristics
+!       M. Taufour              07/2022: add concentration for snow, graupel, hail
 !!
 !-------------------------------------------------------------------------------
 !
@@ -41,7 +42,7 @@ IMPLICIT NONE
 !                                                distribution law
 !
 REAL,SAVE :: XAG,XBG,XCG,XDG,XCCG,XCXG,XF0G,XF1G,XC1G ! Graupel        charact.
-REAL,SAVE :: XLBEXG,XLBG              ! Graupel        distribution parameters 
+REAL,SAVE :: XLBEXG,XLBG,XNG          ! Graupel        distribution parameters 
 REAL,SAVE :: XLBDAG_MAX               ! Max values allowed for the shape
                                       ! parameter of graupeln
 !
@@ -90,7 +91,7 @@ REAL, DIMENSION(:), SAVE, ALLOCATABLE          &
 !*       3.   MICROPHYSICAL FACTORS - Graupel
 !             -------------------------------
 !
-REAL,SAVE :: XFSEDG, XEXSEDG                     ! Sedimentation fluxes of Graupel
+REAL,SAVE :: XFSEDG, XEXSEDG, XFSEDRG, XFSEDCG   ! Sedimentation fluxes of Graupel
 !
 REAL,SAVE :: X0DEPG,X1DEPG,XEX0DEPG,XEX1DEPG     ! Deposition on graupel
 !
@@ -119,9 +120,15 @@ REAL, DIMENSION(:), SAVE, ALLOCATABLE          &
                           XGAMINC_HMC            ! and for the HM process
 !
 REAL,SAVE :: XFRACCSS,                         & ! Constants for the accretion 
+             XFNRACCSS,                        & ! Constants for the accretion 
              XLBRACCS1,XLBRACCS2,XLBRACCS3,    & ! raindrops onto the aggregates
+             XLBNRACCS1,XLBNRACCS2,XLBNRACCS3, & ! raindrops onto the aggregates 
              XFSACCRG,                         & ! ACC (processes RACCSS and
+             XFNSACCRG,                        & ! ACC (processes RACCSS and 
              XLBSACCR1,XLBSACCR2,XLBSACCR3,    & !                SACCRG)
+             XLBNSACCR1,XLBNSACCR2,XLBNSACCR3, & !                SACCRG)             
+             XSCLBDAS_MIN,                     & ! Min val. of Lbda_s for ACC
+    	     XSCLBDAS_MAX,                     & ! Max val. of Lbda_s for ACC   
     	     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
@@ -137,7 +144,10 @@ INTEGER,SAVE :: NACCLBDAS,                     & ! Number of Lbda_s values and
 REAL,DIMENSION(:,:), SAVE, ALLOCATABLE         &
        			 :: XKER_RACCSS,       & ! Normalized kernel for RACCSS
        			    XKER_RACCS,        & ! Normalized kernel for RACCS
-       			    XKER_SACCRG          ! Normalized kernel for SACCRG 
+       			    XKER_SACCRG,        & ! Normalized kernel for SACCRG 
+       			    XKER_N_RACCSS,     & ! Normalized kernel for RACCSS  
+       			    XKER_N_RACCS,      & ! Normalized kernel for RACCS   
+       			    XKER_N_SACCRG        ! Normalized kernel for SACCRG
 REAL,SAVE :: XFSCVMG                             ! Melting-conversion factor of
                                                  ! the aggregates
 !
@@ -148,10 +158,12 @@ REAL,SAVE :: XCOLIR,                           & ! Constants for rain contact
 REAL,SAVE :: XFCDRYG,                          & ! Constants for the dry growth
              XCOLCG,                           & ! of the graupeln :
              XCOLIG,XCOLEXIG,XFIDRYG,          & ! 
-             XCOLSG,XCOLEXSG,XFSDRYG,          & !             RCDRYG
+             XCOLSG,XCOLEXSG,XFSDRYG,XFNSDRYG, & !             RCDRYG
              XLBSDRYG1,XLBSDRYG2,XLBSDRYG3,    & !             RIDRYG
-             XFRDRYG,                          & !             RSDRYG
+             XLBNSDRYG1,XLBNSDRYG2,XLBNSDRYG3, & !             RIDRYG  
+             XFRDRYG,XFNRDRYG,                 & !             RSDRYG
              XLBRDRYG1,XLBRDRYG2,XLBRDRYG3,    & !             RRDRYG
+             XLBNRDRYG1,XLBNRDRYG2,XLBNRDRYG3, & !             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
@@ -169,22 +181,26 @@ INTEGER,SAVE :: NDRYLBDAR,                     & ! Number of Lbda_r,
                         			 !            tables
 REAL,DIMENSION(:,:), SAVE, ALLOCATABLE         &
                          :: XKER_SDRYG,        & ! Normalized kernel for SDRYG
-       			    XKER_RDRYG           ! Normalized kernel for RDRYG 
+       			    XKER_RDRYG,        & ! Normalized kernel for RDRYG 
+       			    XKER_N_SDRYG,      & ! Normalized kernel for RDRYG    
+       			    XKER_N_RDRYG         ! Normalized kernel for RDRYG 
 !
 !-------------------------------------------------------------------------------
 !
 !*       4.   MICROPHYSICAL FACTORS - Hail
 !             ----------------------------
 !
-REAL,SAVE :: XFSEDH,XEXSEDH                      ! Constants for sedimentation
+REAL,SAVE :: XFSEDH,XEXSEDH,XFSEDRH,XFSEDCH      ! Constants for sedimentation
 !
 !
 REAL,SAVE :: X0DEPH,X1DEPH,XEX0DEPH,XEX1DEPH     ! Constants for deposition
 !
-REAL,SAVE :: XFWETH,XFSWETH,                   & ! Constants for the wet growth
+REAL,SAVE :: XFWETH,XFSWETH,XFNSWETH,          & ! Constants for the wet growth
              XLBSWETH1,XLBSWETH2,XLBSWETH3,    & ! of the hailstones : WET
-             XFGWETH,                          & !   processes RSWETH
+             XLBNSWETH1,XLBNSWETH2,XLBNSWETH3, & ! of the hailstones : WET 
+             XFGWETH, XFNGWETH,                & !   processes RSWETH
              XLBGWETH1,XLBGWETH2,XLBGWETH3,    & !             RGWETH
+             XLBNGWETH1,XLBNGWETH2,XLBNGWETH3, & !             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
@@ -202,7 +218,9 @@ INTEGER,SAVE :: NWETLBDAS,                     & ! Number of Lbda_s,
                                                  !            tables
 REAL,DIMENSION(:,:), SAVE, ALLOCATABLE         &
                          :: XKER_SWETH,        & ! Normalized kernel for SWETH
-                            XKER_GWETH           ! Normalized kernel for GWETH
+                            XKER_GWETH,        & ! Normalized kernel for GWETH
+                            XKER_N_SWETH,      & ! Normalized kernel for GWETH 
+                            XKER_N_GWETH         ! Normalized kernel for GWETH
 
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/modd_param_lima_warm.f90 b/src/MNH/modd_param_lima_warm.f90
index 8089a5f5d..cf555286d 100644
--- a/src/MNH/modd_param_lima_warm.f90
+++ b/src/MNH/modd_param_lima_warm.f90
@@ -29,7 +29,7 @@ IMPLICIT NONE
 !             ----------------------
 !
 REAL,SAVE ::  XLBC, XLBEXC,          & ! shape parameters of the cloud droplets
-              XLBR, XLBEXR             ! shape parameters of the raindrops
+              XLBR, XLBEXR, XNR        ! shape parameters of the raindrops
 !
 REAL,SAVE :: XAR,XBR,XCR,XDR,XF0R,XF1R,     & ! Raindrop       charact.
                              XCCR,XCXR,     & !For diagnostics
diff --git a/src/MNH/radar_rain_ice.f90 b/src/MNH/radar_rain_ice.f90
index 027372e44..c8ff0e2d5 100644
--- a/src/MNH/radar_rain_ice.f90
+++ b/src/MNH/radar_rain_ice.f90
@@ -9,7 +9,7 @@
 !
 INTERFACE
       SUBROUTINE RADAR_RAIN_ICE(PRT,PCIT,PRHODREF,PTEMP,PRARE,PVDOP,PRZDR,PRKDP,&
-                             PCRT)
+                             PCRT,PCST,PCGT,PCHT)
 !
 REAL,  DIMENSION(:,:,:,:), INTENT(IN)  :: PRT  ! microphysical  mix. ratios at t
 REAL,  DIMENSION(:,:,:),   INTENT(IN)  :: PCIT ! pristine ice concentration at t
@@ -23,7 +23,9 @@ REAL,  DIMENSION(:,:,:), INTENT(OUT) :: PRZDR! radar differential reflectivity
 REAL,  DIMENSION(:,:,:), INTENT(OUT) :: PRKDP! radar differential phase shift
                                              ! H-V in degree/km
 REAL,  DIMENSION(:,:,:),   INTENT(IN),OPTIONAL  :: PCRT ! rain concentration at t
-                                             
+REAL,  DIMENSION(:,:,:),   INTENT(IN),OPTIONAL  :: PCST ! snow concentration at t !
+REAL,  DIMENSION(:,:,:),   INTENT(IN),OPTIONAL  :: PCGT ! graupel concentration at t ! 
+REAL,  DIMENSION(:,:,:),   INTENT(IN),OPTIONAL  :: PCHT ! hail concentration at t !                                             
 !
 END SUBROUTINE RADAR_RAIN_ICE
 !
@@ -31,7 +33,7 @@ END INTERFACE
 !
 END MODULE MODI_RADAR_RAIN_ICE
 !     #########################################################################
-      SUBROUTINE RADAR_RAIN_ICE(PRT,PCIT,PRHODREF,PTEMP,PRARE,PVDOP,PRZDR,PRKDP,PCRT)
+      SUBROUTINE RADAR_RAIN_ICE(PRT,PCIT,PRHODREF,PTEMP,PRARE,PVDOP,PRZDR,PRKDP,PCRT,PCST,PCGT,PCHT)
 !     #########################################################################
 !
 !!****  *RADAR_RAIN_ICE * - computes some pertinent radar parameters
@@ -125,7 +127,7 @@ USE MODD_PARAM_LIMA_MIXED, ONLY:XDG_L=>XDG,XLBEXG_L=>XLBEXG,XLBG_L=>XLBG,XCCG_L=
 
 USE MODD_PARAM_LIMA, ONLY: XALPHAR_L=>XALPHAR,XNUR_L=>XNUR,XALPHAS_L=>XALPHAS,XNUS_L=>XNUS,&
                            XALPHAG_L=>XALPHAG,XNUG_L=>XNUG, XALPHAI_L=>XALPHAI,XNUI_L=>XNUI,&
-                           XRTMIN_L=>XRTMIN,XALPHAC_L=>XALPHAC,XNUC_L=>XNUC, LSNOW_T_L=>LSNOW_T                      
+                           XRTMIN_L=>XRTMIN,XALPHAC_L=>XALPHAC,XNUC_L=>XNUC,LSNOW_T_L=>LSNOW_T,NMOM_S,NMOM_G,NMOM_H                      
 USE MODD_PARAMETERS
 USE MODD_PARAM_n, ONLY : CCLOUD
 USE MODD_LUNIT
@@ -147,6 +149,9 @@ REAL,  DIMENSION(:,:,:), INTENT(OUT) :: PRZDR! radar differential reflectivity
 REAL,  DIMENSION(:,:,:), INTENT(OUT) :: PRKDP! radar differential phase shift
                                              ! H-V in degree/km
 REAL,  DIMENSION(:,:,:),   INTENT(IN),OPTIONAL  :: PCRT ! rain concentration at t
+REAL,  DIMENSION(:,:,:),   INTENT(IN),OPTIONAL  :: PCST ! snow concentration at t     
+REAL,  DIMENSION(:,:,:),   INTENT(IN),OPTIONAL  :: PCGT ! graupel concentration at t  
+REAL,  DIMENSION(:,:,:),   INTENT(IN),OPTIONAL  :: PCHT ! hail concentration at t   
 !
 !*       0.2   Declarations of local variables :
 !
@@ -338,7 +343,11 @@ IF (SIZE(PRT,4) >= 5) THEN
     WHERE(PTEMP(:,:,:)<=-10 .AND. PRT(:,:,:,5).GT.XRTMIN_L(5))
        ZLBDA(:,:,:) = MAX(MIN(XLBDAS_MAX, 10**(6.226-0.0106*(PTEMP(:,:,:)+273.15))),XLBDAS_MIN)
     END WHERE
-    ZN(:,:,:)=XNS_L*PRHODREF(:,:,:)*PRT(:,:,:,5)*ZLBDA(:,:,:)**XBS_L
+    IF (NMOM_S.GE.2) THEN
+      ZN(:,:,:)=PCST(:,:,:)
+    ELSE
+      ZN(:,:,:)=XNS_L*PRHODREF(:,:,:)*PRT(:,:,:,5)*ZLBDA(:,:,:)**XBS_L
+    END IF
     WHERE( PRT(:,:,:,5).GT.XRTMIN_L(5) )
       ZW(:,:,:) = ZEQICE*ZDMELT_FACT                                             &
                   *1.E18*ZN(:,:,:)*(ZLBDA(:,:,:)**(-ZEXP))*MOMG(XALPHAS_L,XNUS_L,ZEXP)
@@ -366,14 +375,25 @@ IF (SIZE(PRT,4) >= 5) THEN
   ELSEIF (CCLOUD=='LIMA') THEN
     ZDMELT_FACT = ( (6.0*XAS_L)/(XPI*XRHOLW) )**(2.0)
     ZEXP = 2.0*XBS_L
-    WHERE( PRT(:,:,:,5).GT.XRTMIN_L(5) )
-      ZLBDA(:,:,:) = XLBS_L*( PRHODREF(:,:,:)*PRT(:,:,:,5) )**XLBEXS_L
-      ZW(:,:,:) = ZEQICE*ZDMELT_FACT                                             &
+    if (NMOM_S.GE.2) then
+      WHERE( PRT(:,:,:,5).GT.XRTMIN_L(5) .AND. PCST(:,:,:).GT.0.0)      
+        ZLBDA(:,:,:) = XLBS_L**(XLBEXS_L)*(PRT(:,:,:,5)/PCST(:,:,:))**(-XLBEXS_L)  
+        ZW(:,:,:) = ZEQICE*ZDMELT_FACT                                             &
+                    *1.E18*PRHODREF(:,:,:)*PCST(:,:,:)*(ZLBDA(:,:,:)**(-ZEXP))*MOMG(XALPHAS_L,XNUS_L,ZEXP)
+        PVDOP(:,:,:) = PVDOP(:,:,:)+ZEQICE*ZDMELT_FACT*MOMG(XALPHAS_L,XNUS_L,ZEXP+XDS_L) &
+                       *1.E18*PRHODREF(:,:,:)*PCST(:,:,:)*XCS_L*(ZLBDA(:,:,:)**(-ZEXP-XDS_L))
+        PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:)
+      END WHERE             
+    else
+      WHERE( PRT(:,:,:,5).GT.XRTMIN_L(5) )
+        ZLBDA(:,:,:) = XLBS_L*( PRHODREF(:,:,:)*PRT(:,:,:,5) )**XLBEXS_L
+        ZW(:,:,:) = ZEQICE*ZDMELT_FACT                                             &
                   *1.E18*XCCS_L*(ZLBDA(:,:,:)**(XCXS_L-ZEXP))*MOMG(XALPHAS_L,XNUS_L,ZEXP)
-      PVDOP(:,:,:) = PVDOP(:,:,:)+ZEQICE*ZDMELT_FACT*MOMG(XALPHAS_L,XNUS_L,ZEXP+XDS_L) &
+        PVDOP(:,:,:) = PVDOP(:,:,:)+ZEQICE*ZDMELT_FACT*MOMG(XALPHAS_L,XNUS_L,ZEXP+XDS_L) &
                      *1.E18*XCCS_L*XCS_L*(ZLBDA(:,:,:)**(XCXS_L-ZEXP-XDS_L))
-      PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:)
-    END WHERE
+        PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:)
+      END WHERE
+    end if
   ELSE
     ZDMELT_FACT = ( (6.0*XAS_I)/(XPI*XRHOLW) )**(2.0)
     ZEXP = 2.0*XBS_I
@@ -402,15 +422,27 @@ IF (SIZE(PRT,4) >= 6) THEN
     END WHERE
 !
     ZEXP = 2.0*XBG_L
-    WHERE( PRT(:,:,:,6).GT.XRTMIN_L(6) )
-      ZLBDA(:,:,:) = XLBG_L*( PRHODREF(:,:,:)*PRT(:,:,:,6) )**XLBEXG_L
-      ZW(:,:,:)    = ZREFL_MELT_CONV(:,:,:)*1.E18*XCCG_L*                &
-                    (ZLBDA(:,:,:)**(XCXG_L-ZEXP))*MOMG(XALPHAG_L,XNUG_L,ZEXP)
-      PVDOP(:,:,:) = PVDOP(:,:,:) +                                            &
-                     ZREFL_MELT_CONV(:,:,:)*1.E18*XCCG_L*XCG_L*                    &
-                     (ZLBDA(:,:,:)**(XCXG_L-ZEXP-XDG_L))*MOMG(XALPHAG_L,XNUG_L,ZEXP+XDG_L)
-      PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:)
-    END WHERE
+    if(NMOM_G.GE.2) then
+      WHERE( PRT(:,:,:,6).GT.XRTMIN_L(6) .AND. PCGT(:,:,:).GT.1.0E-3 )      
+        ZLBDA(:,:,:) = XLBG_L**(XLBEXG_L)*(PRT(:,:,:,6)/PCGT(:,:,:))**(-XLBEXG_L)  
+        ZW(:,:,:)    = ZREFL_MELT_CONV(:,:,:)          &
+                  *1.E18*PRHODREF(:,:,:)*PCGT(:,:,:)*(ZLBDA(:,:,:)**(-ZEXP))*MOMG(XALPHAG_L,XNUG_L,ZEXP)   
+        PVDOP(:,:,:) = PVDOP(:,:,:) +                                            &
+                       ZREFL_MELT_CONV(:,:,:)*1.E18                      &
+                       *1.E18*PRHODREF(:,:,:)*PCGT(:,:,:)*XCG_L*(ZLBDA(:,:,:)**(-ZEXP-XDG_L))
+        PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:)
+      END WHERE
+    else
+      WHERE( PRT(:,:,:,6).GT.XRTMIN_L(6) )
+        ZLBDA(:,:,:) = XLBG_L*( PRHODREF(:,:,:)*PRT(:,:,:,6) )**XLBEXG_L
+        ZW(:,:,:)    = ZREFL_MELT_CONV(:,:,:)*1.E18*XCCG_L*                &
+                      (ZLBDA(:,:,:)**(XCXG_L-ZEXP))*MOMG(XALPHAG_L,XNUG_L,ZEXP)
+        PVDOP(:,:,:) = PVDOP(:,:,:) +                                            &
+                       ZREFL_MELT_CONV(:,:,:)*1.E18*XCCG_L*XCG_L*                    &
+                       (ZLBDA(:,:,:)**(XCXG_L-ZEXP-XDG_L))*MOMG(XALPHAG_L,XNUG_L,ZEXP+XDG_L)
+        PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:)
+      END WHERE
+    end if
   ELSE
     ZFRAC_WATER = 0.14
     ZDMELT_FACT = ( (6.0*XAG_I)/(XPI*XRHOLW) )**(2.0)
@@ -443,15 +475,27 @@ IF (SIZE(PRT,4) >= 7) THEN
     ZREFL_MELT_CONV(:,:,:) = ((1.0-ZFRAC_WATER)*ZEQICE+ZFRAC_WATER)*ZDMELT_FACT
 !
     ZEXP = 2.0*XBH_L
-    WHERE( PRT(:,:,:,7).GT.XRTMIN_L(7) )
-      ZLBDA(:,:,:) = XLBH_L*( PRHODREF(:,:,:)*PRT(:,:,:,7) )**XLBEXH_L
-      ZW(:,:,:)    = ZREFL_MELT_CONV(:,:,:)*1.E18*XCCH_L*                &
-                   (ZLBDA(:,:,:)**(XCXH_L-ZEXP))*MOMG(XALPHAH_L,XNUH_L,ZEXP)
-      PVDOP(:,:,:) = PVDOP(:,:,:) +                                            &
-                   ZREFL_MELT_CONV(:,:,:)*1.E18*XCCH_L*XCH_L*                    &
-                   (ZLBDA(:,:,:)**(XCXH_L-ZEXP-XDH_L))*MOMG(XALPHAH_L,XNUH_L,ZEXP+XDH_L)
-      PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:)
-    END WHERE
+    if (NMOM_H.GE.2) then
+      WHERE( PRT(:,:,:,7).GT.XRTMIN_L(7) .AND. PCHT(:,:,:).GT.1.0E-3 ) 
+        ZLBDA(:,:,:) =  XLBH_L**(XLBEXH_L)*(PRT(:,:,:,7)/PCHT(:,:,:))**(-XLBEXH_L)  
+        ZW(:,:,:)    = ZREFL_MELT_CONV(:,:,:)     &
+                    *1.E18*PRHODREF(:,:,:)*PCHT(:,:,:)*(ZLBDA(:,:,:)**(-ZEXP))*MOMG(XALPHAH_L,XNUH_L,ZEXP)   
+        PVDOP(:,:,:) = PVDOP(:,:,:) +                                            &
+                     ZREFL_MELT_CONV(:,:,:)            &
+                       *1.E18*PRHODREF(:,:,:)*PCHT(:,:,:)*XCH_L*(ZLBDA(:,:,:)**(-ZEXP-XDH_L)) 
+        PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:)
+      END WHERE            
+    else
+      WHERE( PRT(:,:,:,7).GT.XRTMIN_L(7) )
+        ZLBDA(:,:,:) = XLBH_L*( PRHODREF(:,:,:)*PRT(:,:,:,7) )**XLBEXH_L
+        ZW(:,:,:)    = ZREFL_MELT_CONV(:,:,:)*1.E18*XCCH_L*                &
+                     (ZLBDA(:,:,:)**(XCXH_L-ZEXP))*MOMG(XALPHAH_L,XNUH_L,ZEXP)
+        PVDOP(:,:,:) = PVDOP(:,:,:) +                                            &
+                     ZREFL_MELT_CONV(:,:,:)*1.E18*XCCH_L*XCH_L*                    &
+                     (ZLBDA(:,:,:)**(XCXH_L-ZEXP-XDH_L))*MOMG(XALPHAH_L,XNUH_L,ZEXP+XDH_L)
+        PRARE(:,:,:) = PRARE(:,:,:) + ZW(:,:,:)
+      END WHERE
+    end if
   ELSE
     ZFRAC_WATER = 1.
     ZDMELT_FACT = ( (6.0*XAH_I)/(XPI*XRHOLW) )**(2.0)
diff --git a/src/MNH/sources_neg_correct.f90 b/src/MNH/sources_neg_correct.f90
index aa5978a54..2160bf2d4 100644
--- a/src/MNH/sources_neg_correct.f90
+++ b/src/MNH/sources_neg_correct.f90
@@ -27,9 +27,10 @@ use modd_budget,     only: lbudget_th, lbudget_rv, lbudget_rc, lbudget_rr, lbudg
                            NBUDGET_RS, NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1,            &
                            tbudgets
 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
+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, &
-                           xctmin_lima => xctmin, xrtmin_lima => xrtmin, nmom_c, nmom_r, nmom_i
+                           xctmin_lima => xctmin, xrtmin_lima => xrtmin, nmom_c, nmom_r, nmom_i, nmom_s, nmom_g, nmom_h
 
 use mode_budget,         only: Budget_store_init, Budget_store_end
 use mode_msg
@@ -237,77 +238,109 @@ CLOUD: select case ( hcloud )
 !
 !
   case( 'LIMA' )
-    allocate( zmask  ( Size( prths, 1 ), Size( prths, 2 ), Size( prths, 3 ) ) )
+     allocate( zmask  ( Size( prths, 1 ), Size( prths, 2 ), Size( prths, 3 ) ) )
 ! Correction where rc<0 or Nc<0
-    if ( lwarm_lima ) then
-      zmask(:,:,:)=(prrs(:, :, :, 2) < xrtmin_lima(2) / ptstep)
-      if (nmom_c.ge.2) zmask(:,:,:)=(zmask(:,:,:) .or. prsvs(:, :, :, nsv_lima_nc) < 0. )
-      where ( zmask(:,:,:) )
-        prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, 2)
-        prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, 2) * zlv(:, :, :) /  &
-                 ( zcph(:, :, :) * zexn(:, :, :) )
-        prrs(:, :, :, 2)  = 0.
-      end where
-      where ( prrs(:, :, :, 1) < 0. .and. prrs(:, :, :, 2) > 0. )
-        prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, 2)
-        prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, 2) * zlv(:, :, :) /  &
-           ( zcph(:, :, :) * zexn(:, :, :) )
-        prrs(:, :, :, 2) = 0.
-      end where
-      if (nmom_c.ge.2) then
-         where (prrs(:, :, :, 2) == 0.)  prsvs(:, :, :, nsv_lima_nc) = 0.
-      end if
-    end if
+     if ( krr.GE.2 ) then
+        zmask(:,:,:)=(prrs(:, :, :, 2) < xrtmin_lima(2) / ptstep)
+        if (nmom_c.ge.2) zmask(:,:,:)=(zmask(:,:,:) .or. prsvs(:, :, :, nsv_lima_nc) < 0. )
+        where ( zmask(:,:,:) )
+           prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, 2)
+           prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, 2) * zlv(:, :, :) /  &
+                ( zcph(:, :, :) * zexn(:, :, :) )
+           prrs(:, :, :, 2)  = 0.
+        end where
+        where ( prrs(:, :, :, 1) < 0. .and. prrs(:, :, :, 2) > 0. )
+           prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, 2)
+           prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, 2) * zlv(:, :, :) /  &
+                ( zcph(:, :, :) * zexn(:, :, :) )
+           prrs(:, :, :, 2) = 0.
+        end where
+        if (nmom_c.ge.2) then
+           where (prrs(:, :, :, 2) == 0.)  prsvs(:, :, :, nsv_lima_nc) = 0.
+        end if
+     end if
 ! Correction where rr<0 or Nr<0
-    if ( lwarm_lima .and. lrain_lima ) then
-      zmask(:,:,:)=(prrs(:, :, :, 3) < xrtmin_lima(3) / ptstep)
-      if (nmom_r.ge.2) zmask(:,:,:)=(zmask(:,:,:) .or. prsvs(:, :, :, nsv_lima_nr) < 0. )
-      where ( zmask(:,:,:) )
-        prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, 3)
-        prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, 3) * zlv(:, :, :) /  &
-                 ( zcph(:, :, :) * zexn(:, :, :) )
-        prrs(:, :, :, 3)  = 0.
-      end where
-      if (nmom_r.ge.2) then
-         where (prrs(:, :, :, 3) == 0.)  prsvs(:, :, :, nsv_lima_nr) = 0.
-      end if
-    end if
+     if ( krr.GE.3 ) then
+        zmask(:,:,:)=(prrs(:, :, :, 3) < xrtmin_lima(3) / ptstep)
+        if (nmom_r.ge.2) zmask(:,:,:)=(zmask(:,:,:) .or. prsvs(:, :, :, nsv_lima_nr) < 0. )
+        where ( zmask(:,:,:) )
+           prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, 3)
+           prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, 3) * zlv(:, :, :) /  &
+                ( zcph(:, :, :) * zexn(:, :, :) )
+           prrs(:, :, :, 3)  = 0.
+        end where
+        if (nmom_r.ge.2) then
+           where (prrs(:, :, :, 3) == 0.)  prsvs(:, :, :, nsv_lima_nr) = 0.
+        end if
+     end if
 ! Correction where ri<0 or Ni<0
-    if ( lcold_lima ) then
-      zmask(:,:,:)=(prrs(:, :, :, 4) < xrtmin_lima(4) / ptstep)
-      if (nmom_i.ge.2) zmask(:,:,:)=(zmask(:,:,:) .or. prsvs(:, :, :, nsv_lima_ni) < 0. )
-      where ( zmask(:,:,:) )
-        prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, 4)
-        prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, 4) * zls(:, :, :) /  &
-                 ( zcph(:, :, :) * zexn(:, :, :) )
-        prrs(:, :, :, 4)  = 0.
-      end where
-      if ( hbudname /= 'NETUR' ) then
-        do jr = 5, Size( prrs, 4 )
-          where ( prrs(:, :, :, jr) < 0. )
-            prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, jr)
-            prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, jr) * zls(:, :, :) /  &
-                    ( zcph(:, :, :) * zexn(:, :, :) )
-            prrs(:, :, :, jr) = 0.
-          end where
-        end do
-      end if
-      if(krr > 3) then
+     if ( krr.GE.4 ) then
+        zmask(:,:,:)=(prrs(:, :, :, 4) < xrtmin_lima(4) / ptstep)
+        if (nmom_i.ge.2) zmask(:,:,:)=(zmask(:,:,:) .or. prsvs(:, :, :, nsv_lima_ni) < 0. )
+        where ( zmask(:,:,:) )
+           prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, 4)
+           prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, 4) * zls(:, :, :) /  &
+                ( zcph(:, :, :) * zexn(:, :, :) )
+           prrs(:, :, :, 4)  = 0.
+        end where
+     end if
+     if(krr > 3) then
         allocate( zcor( Size( prths, 1 ), Size( prths, 2 ), Size( prths, 3 ) ) )
         where ( prrs(:, :, :, 1) < 0. .and. prrs(:, :, :, 4) > 0. )
-          zcor(:, :, :) = Min( -prrs(:, :, :, 1), prrs(:, :, :, 4) )
-          prrs(:, :, :, 1) = prrs(:, :, :, 1) + zcor(:, :, :)
-          prths(:, :, :) = prths(:, :, :) - zcor(:, :, :) * zls(:, :, :) /  &
-             ( zcph(:, :, :) * zexn(:, :, :) )
-          prrs(:, :, :, 4) = prrs(:, :, :, 4) - zcor(:, :, :)
+           zcor(:, :, :) = Min( -prrs(:, :, :, 1), prrs(:, :, :, 4) )
+           prrs(:, :, :, 1) = prrs(:, :, :, 1) + zcor(:, :, :)
+           prths(:, :, :) = prths(:, :, :) - zcor(:, :, :) * zls(:, :, :) /  &
+                ( zcph(:, :, :) * zexn(:, :, :) )
+           prrs(:, :, :, 4) = prrs(:, :, :, 4) - zcor(:, :, :)
         end where
         deallocate( zcor )
-      end if
-      if (nmom_i.ge.2) then
-         where (prrs(:, :, :, 4) == 0.)  prsvs(:, :, :, nsv_lima_ni) = 0.
-      end if
-    end if
-
+     end if
+     if (nmom_i.ge.2) then
+        where (prrs(:, :, :, 4) == 0.)  prsvs(:, :, :, nsv_lima_ni) = 0.
+     end if
+! Snow     
+     if ( krr.GE.5 ) then
+        zmask(:,:,:)=(prrs(:, :, :, 5) < xrtmin_lima(5) / ptstep)
+        if (nmom_s.ge.2) zmask(:,:,:)=(zmask(:,:,:) .or. prsvs(:, :, :, nsv_lima_ns) < 0. )
+        where ( zmask(:,:,:) )
+           prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, 5)
+           prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, 5) * zls(:, :, :) /  &
+                ( zcph(:, :, :) * zexn(:, :, :) )
+           prrs(:, :, :, 5)  = 0.
+        end where
+     end if
+     if (nmom_s.ge.2) then
+        where (prrs(:, :, :, 5) == 0.)  prsvs(:, :, :, nsv_lima_ns) = 0.
+     end if
+! Graupel
+     if ( krr.GE.6 ) then
+        zmask(:,:,:)=(prrs(:, :, :, 6) < xrtmin_lima(6) / ptstep)
+        if (nmom_g.ge.2) zmask(:,:,:)=(zmask(:,:,:) .or. prsvs(:, :, :, nsv_lima_ng) < 0. )
+        where ( zmask(:,:,:) )
+           prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, 6)
+           prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, 6) * zls(:, :, :) /  &
+                ( zcph(:, :, :) * zexn(:, :, :) )
+           prrs(:, :, :, 6)  = 0.
+        end where
+     end if
+     if (nmom_g.ge.2) then
+        where (prrs(:, :, :, 6) == 0.)  prsvs(:, :, :, nsv_lima_ng) = 0.
+     end if
+! Hail
+     if ( krr.GE.7 ) then
+        zmask(:,:,:)=(prrs(:, :, :, 7) < xrtmin_lima(7) / ptstep)
+        if (nmom_h.ge.2) zmask(:,:,:)=(zmask(:,:,:) .or. prsvs(:, :, :, nsv_lima_nh) < 0. )
+        where ( zmask(:,:,:) )
+           prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, 7)
+           prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, 7) * zls(:, :, :) /  &
+                ( zcph(:, :, :) * zexn(:, :, :) )
+           prrs(:, :, :, 7)  = 0.
+        end where
+     end if
+     if (nmom_h.ge.2) then
+        where (prrs(:, :, :, 7) == 0.)  prsvs(:, :, :, nsv_lima_nh) = 0.
+     end if
+!
     prsvs(:, :, :, nsv_lima_beg : isv_lima_end) = Max( 0.0, prsvs(:, :, :, nsv_lima_beg : isv_lima_end) )
     deallocate(zmask)
 end select CLOUD
diff --git a/src/MNH/update_nsv.f90 b/src/MNH/update_nsv.f90
index c706bfe90..b8e6b36c5 100644
--- a/src/MNH/update_nsv.f90
+++ b/src/MNH/update_nsv.f90
@@ -83,6 +83,9 @@ NSV_LIMA_CCN_FREE = NSV_LIMA_CCN_FREE_A(KMI)
 NSV_LIMA_CCN_ACTI = NSV_LIMA_CCN_ACTI_A(KMI)
 NSV_LIMA_SCAVMASS = NSV_LIMA_SCAVMASS_A(KMI)
 NSV_LIMA_NI       = NSV_LIMA_NI_A(KMI)
+NSV_LIMA_NS       = NSV_LIMA_NS_A(KMI)   
+NSV_LIMA_NG       = NSV_LIMA_NG_A(KMI)      
+NSV_LIMA_NH       = NSV_LIMA_NH_A(KMI)
 NSV_LIMA_IFN_FREE = NSV_LIMA_IFN_FREE_A(KMI)
 NSV_LIMA_IFN_NUCL = NSV_LIMA_IFN_NUCL_A(KMI)
 NSV_LIMA_IMM_NUCL = NSV_LIMA_IMM_NUCL_A(KMI)
diff --git a/src/MNH/write_lfifm1_for_diag.f90 b/src/MNH/write_lfifm1_for_diag.f90
index d5245ba54..7630a9363 100644
--- a/src/MNH/write_lfifm1_for_diag.f90
+++ b/src/MNH/write_lfifm1_for_diag.f90
@@ -196,7 +196,7 @@ USE MODD_PARAM_LIMA,      ONLY : NMOD_CCN, NMOD_IFN, NMOD_IMM, NINDICE_CCN_IMM,&
                                  LSCAV, LHHONI, LAERO_MASS,                    &
                                  LLIMA_DIAG,                                   &
                                  NSPECIE, XMDIAM_IFN, XSIGMA_IFN, ZFRAC=>XFRAC,&
-                                 XR_MEAN_CCN, XLOGSIG_CCN 
+                                 XR_MEAN_CCN, XLOGSIG_CCN, NMOM_S, NMOM_G, NMOM_H 
 USE MODD_PARAM_LIMA_WARM, ONLY : CLIMA_WARM_CONC, CAERO_MASS
 USE MODD_PARAM_LIMA_COLD, ONLY : CLIMA_COLD_CONC
 USE MODD_LG,              ONLY : CLGNAMES
@@ -333,7 +333,7 @@ INTEGER           :: IACCMODE
 !
 !-------------------------------------------------------------------------------
 INTEGER :: IAUX ! work variable 
-REAL,DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZWORK35,ZWORK36
+REAL,DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZWORK35,ZWORK36, ZW1, ZW2, ZW3
 REAL,DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2))              :: ZWORK25,ZWORK26
 REAL    :: ZEAU ! Mean precipitable water
 INTEGER, DIMENSION(SIZE(XZZ,1),SIZE(XZZ,2))          ::IKTOP ! level in which is the altitude 3000m
@@ -751,7 +751,7 @@ IF (LVAR_PR ) THEN
 ENDIF
 !
 !
-!* Flux d'humidité et d'hydrométéores
+!* Flux d'humidite et d'hydrometeores
 IF (LHU_FLX) THEN
   ZWORK35(:,:,:) = XRHODREF(:,:,:) * XRT(:,:,:,1)
   ZWORK31(:,:,:) = MXM(ZWORK35(:,:,:)) * XUT(:,:,:)
@@ -815,7 +815,7 @@ IF (LHU_FLX) THEN
     ENDDO
   ENDIF
   ! Ecriture
-  !  composantes U et V du flux surfacique d'humidité  
+  !  composantes U et V du flux surfacique d'humidite 
   TZFIELD%CMNHNAME   = 'UM90'
   TZFIELD%CSTDNAME   = ''
   TZFIELD%CLONGNAME  = 'UM90'
@@ -839,7 +839,7 @@ IF (LHU_FLX) THEN
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
   CALL IO_Field_write(TPFILE,TZFIELD,ZWORK32)
-  !  composantes U et V du flux d'humidité intégré sur 3000 metres
+  !  composantes U et V du flux d'humidite integre sur 3000 metres
   TZFIELD%CMNHNAME   = 'UM91'
   TZFIELD%CSTDNAME   = ''
   TZFIELD%CLONGNAME  = 'UM91'
@@ -864,7 +864,7 @@ IF (LHU_FLX) THEN
   TZFIELD%LTIMEDEP   = .TRUE.
   CALL IO_Field_write(TPFILE,TZFIELD,ZWORK22)
   !
-  !   Convergence d'humidité
+  !   Convergence d'humidite
   TZFIELD%CMNHNAME   = 'HMCONV'
   TZFIELD%CSTDNAME   = ''
   TZFIELD%CLONGNAME  = 'HMCONV'
@@ -877,7 +877,7 @@ IF (LHU_FLX) THEN
   TZFIELD%LTIMEDEP   = .TRUE.
   CALL IO_Field_write(TPFILE,TZFIELD,-ZWORK35)
   !
-  !   Convergence d'humidité intégré sur 3000 mètres
+  !   Convergence d'humidite integre sur 3000 metres
   TZFIELD%CMNHNAME   = 'HMCONV3000'
   TZFIELD%CSTDNAME   = ''
   TZFIELD%CLONGNAME  = 'HMCONV3000'
@@ -891,7 +891,7 @@ IF (LHU_FLX) THEN
   CALL IO_Field_write(TPFILE,TZFIELD,-ZWORK25)
   !
   IF  (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'LIMA') THEN
-    !  composantes U et V du flux surfacique d'hydrométéores  
+    !  composantes U et V du flux surfacique d'hydrometeores  
     TZFIELD%CMNHNAME   = 'UM92'
     TZFIELD%CSTDNAME   = ''
     TZFIELD%CLONGNAME  = 'UM92'
@@ -915,7 +915,7 @@ IF (LHU_FLX) THEN
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
     CALL IO_Field_write(TPFILE,TZFIELD,ZWORK34)
-    !  composantes U et V du flux d'hydrométéores intégré sur 3000 metres
+    !  composantes U et V du flux d'hydrometeores integre sur 3000 metres
     TZFIELD%CMNHNAME   = 'UM93'
     TZFIELD%CSTDNAME   = ''
     TZFIELD%CLONGNAME  = 'UM93'
@@ -939,7 +939,7 @@ IF (LHU_FLX) THEN
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
     CALL IO_Field_write(TPFILE,TZFIELD,ZWORK24)
-    !   Convergence d'hydrométéores
+    !   Convergence d'hydrometeores
     TZFIELD%CMNHNAME   = 'HMCONV_TT'
     TZFIELD%CSTDNAME   = ''
     TZFIELD%CLONGNAME  = 'HMCONV_TT'
@@ -951,7 +951,7 @@ IF (LHU_FLX) THEN
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
     CALL IO_Field_write(TPFILE,TZFIELD,-ZWORK36)
-    !   Convergence d'hydrométéores intégré sur 3000 mètres
+    !   Convergence d'hydrometeores integre sur 3000 metres
     TZFIELD%CMNHNAME   = 'HMCONV3000_TT'
     TZFIELD%CSTDNAME   = ''
     TZFIELD%CLONGNAME  = 'HMCONV3000_TT'
@@ -1152,24 +1152,36 @@ IF (LLIMA_DIAG) THEN
     IF (JSV .EQ. NSV_LIMA_NI) THEN
       TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_CONC(1))//'T'
     END IF
+! Ns
+    IF (JSV .EQ. NSV_LIMA_NS) THEN
+      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_CONC(2))//'T'
+    END IF
+! Ng
+    IF (JSV .EQ. NSV_LIMA_NG) THEN
+      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_CONC(3))//'T'
+    END IF
+! Nh
+    IF (JSV .EQ. NSV_LIMA_NH) THEN
+      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_CONC(4))//'T'
+    END IF
 ! N IFN free
     IF (JSV .GE. NSV_LIMA_IFN_FREE .AND. JSV .LT. NSV_LIMA_IFN_NUCL) THEN
       WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_FREE + 1)
-      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_CONC(2))//INDICE//'T'
+      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_CONC(5))//INDICE//'T'
     END IF
 ! N IFN nucl
     IF (JSV .GE. NSV_LIMA_IFN_NUCL .AND. JSV .LT. NSV_LIMA_IFN_NUCL + NMOD_IFN) THEN
       WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_NUCL + 1)
-      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_CONC(3))//INDICE//'T'
+      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_CONC(6))//INDICE//'T'
     END IF
 ! N IMM nucl
     IF (JSV .GE. NSV_LIMA_IMM_NUCL .AND. JSV .LT. NSV_LIMA_IMM_NUCL + NMOD_IMM) THEN
       WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(JSV - NSV_LIMA_IMM_NUCL + 1))
-      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_CONC(4))//INDICE//'T'
+      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_CONC(7))//INDICE//'T'
     END IF
 ! Hom. freez. of CCN
     IF (JSV .EQ. NSV_LIMA_HOM_HAZE) THEN
-      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_CONC(5))//'T'
+      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_CONC(8))//'T'
     END IF
     !
 ! Supersaturation          
@@ -3637,13 +3649,17 @@ IF(LRADAR .AND. LUSERR) THEN
     XCIT(:,:,:)=XSVT(:,:,:,NSV_LIMA_NI)
     CALL INI_RADAR('PLAT')
   END IF
-!       
+! 
+  IF (NMOM_S.GE.2) ZW1(:,:,:)=XSVT(:,:,:,NSV_LIMA_NS)
+  IF (NMOM_G.GE.2) ZW2(:,:,:)=XSVT(:,:,:,NSV_LIMA_NG)
+  IF (NMOM_H.GE.2) ZW3(:,:,:)=XSVT(:,:,:,NSV_LIMA_NH)
   IF (NVERSION_RAD == 1) THEN 
 ! original version of radar diagnostics 
       WRITE(ILUOUT0,*) 'radar diagnostics from RADAR_RAIN_ICE routine'
     IF (CCLOUD=='LIMA') THEN
-      CALL RADAR_RAIN_ICE (XRT, XCIT, XRHODREF, ZTEMP, ZWORK31, ZWORK32, &
-                       ZWORK33, ZWORK34,XSVT(:,:,:,NSV_LIMA_NR) )
+        CALL RADAR_RAIN_ICE (XRT, XCIT, XRHODREF, ZTEMP, ZWORK31, ZWORK32, &
+                         ZWORK33, ZWORK34,XSVT(:,:,:,NSV_LIMA_NR),         &
+                         ZW1(:,:,:),ZW2(:,:,:),ZW3(:,:,:) )
     ELSE          
       CALL RADAR_RAIN_ICE (XRT, XCIT, XRHODREF, ZTEMP, ZWORK31, ZWORK32, &
                                                          ZWORK33, ZWORK34 )
@@ -4025,7 +4041,7 @@ END IF
 !
 IF (CBLTOP == 'THETA') THEN
   !
-  ! méthode de la parcelle
+  ! methode de la parcelle
   !
   ALLOCATE(ZSHMIX(IIU,IJU))
 
@@ -4064,7 +4080,7 @@ IF (CBLTOP == 'THETA') THEN
   DEALLOCATE(ZSHMIX)
 ELSEIF (CBLTOP == 'RICHA') THEN
   !
-  ! méthode du "bulk Richardson number"
+  ! methode du "bulk Richardson number"
   !
   ALLOCATE(ZRIB(IIU,IJU,IKU))
   ALLOCATE(ZSHMIX(IIU,IJU))
diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90
index b7264511f..9a23c67e3 100644
--- a/src/MNH/write_lfin.f90
+++ b/src/MNH/write_lfin.f90
@@ -990,24 +990,36 @@ IF (NSV >=1) THEN
     IF (JSV .EQ. NSV_LIMA_NI) THEN
       TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(1))//'T'
     END IF
+! Ns                                                                                
+    IF (JSV .EQ. NSV_LIMA_NS) THEN                                                  
+      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(2))//'T'                           
+    END IF
+! Ng
+    IF (JSV .EQ. NSV_LIMA_NG) THEN                                                  
+      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(3))//'T'                           
+    END IF                                                                          
+! Nh
+    IF (JSV .EQ. NSV_LIMA_NH) THEN                                                  
+      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(4))//'T'                           
+    END IF 
 ! N IFN free
     IF (JSV .GE. NSV_LIMA_IFN_FREE .AND. JSV .LT. NSV_LIMA_IFN_NUCL) THEN
       WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_FREE + 1)
-      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(2))//INDICE//'T'
+      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(5))//INDICE//'T'
     END IF
 ! N IFN nucl
     IF (JSV .GE. NSV_LIMA_IFN_NUCL .AND. JSV .LT. NSV_LIMA_IFN_NUCL + NMOD_IFN) THEN
       WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_NUCL + 1)
-      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(3))//INDICE//'T'
+      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(6))//INDICE//'T'
     END IF
 ! N IMM nucl
     IF (JSV .GE. NSV_LIMA_IMM_NUCL .AND. JSV .LT. NSV_LIMA_IMM_NUCL + NMOD_IMM) THEN
       WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(JSV - NSV_LIMA_IMM_NUCL + 1))
-      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(4))//INDICE//'T'
+      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(7))//INDICE//'T'
     END IF
 ! Hom. freez. of CCN
     IF (JSV .EQ. NSV_LIMA_HOM_HAZE) THEN
-      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(5))//'T'
+      TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_NAMES(8))//'T'
     END IF
     !
 ! Supersaturation     
-- 
GitLab