From edc3f88180fea50e1efde701bbafc70918a12dab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Riette?= <sebastien.riette@meteo.fr>
Date: Wed, 21 Sep 2022 11:03:51 +0200
Subject: [PATCH] S. Riette 21 sept 2022 merge micro from 48t3

---
 src/arome/ext/apl_arome.F90                   | 105 ++-
 src/arome/ext/aro_adjust.F90                  | 115 +--
 src/arome/ext/aro_adjust.h                    |  20 +-
 src/arome/ext/aro_rain_ice.F90                | 133 ++--
 src/arome/ext/aro_rain_ice.h                  |  22 +-
 src/arome/ext/aroini_micro.F90                | 198 +++++
 src/arome/ext/aroini_micro.h                  |  46 ++
 src/arome/ext/dead_code/aro_icecld.F90        | 217 ------
 src/arome/ext/dead_code/aro_tiwmx.F90         | 123 ----
 src/arome/ext/dead_code/modi_aro_icecld.F90   |  24 -
 src/arome/ext/dead_code/modi_aro_tiwmx.F90    |  11 -
 src/arome/ext/namparar.nam.h                  |  10 +-
 src/arome/ext/spp_mod_type.F90                | 122 ++++
 src/arome/ext/suparar.F90                     | 124 +++-
 src/arome/ext/suphmpa.F90                     |  17 +-
 src/arome/ext/yomparar.F90                    |  44 +-
 src/arome/micro/ini_rain_ice.F90              |  32 +-
 src/arome/micro/modi_rain_ice_old.F90         |  42 +-
 src/arome/micro/rain_ice_old.F90              | 683 +++++++++++-------
 src/common/micro/condensation.F90             | 117 ++-
 src/common/micro/ice_adjust.F90               |  79 +-
 src/common/micro/ini_rain_ice.F90             |  26 +-
 src/common/micro/ini_snow.F90                 | 170 +++++
 src/common/micro/ini_tiwmx.F90                |  55 ++
 src/common/micro/modd_rain_ice_param.F90      |   5 +-
 src/common/micro/mode_icecloud.F90            |   8 +-
 src/common/micro/mode_tiwmx_fun.F90           | 108 +++
 src/common/micro/modi_condensation.F90        |  35 +-
 src/common/micro/modi_ice_adjust.F90          | 105 +--
 src/common/micro/modi_ini_snow.F90            |  15 +
 src/common/micro/modi_ini_tiwmx.F90           |  16 +
 .../turb/{modd_turbn.f90 => modd_turbn.F90}   |   0
 .../turb/{mode_coefj.f90 => mode_coefj.F90}   |   0
 src/mesonh/ext/resolved_cloud.f90             |  21 +-
 src/mesonh/micro/ice_adjust_elec.f90          |  12 +-
 src/mesonh/micro/ini_rain_ice.f90             |  26 +-
 src/mesonh/micro/lima_adjust_split.f90        |  13 +-
 src/mesonh/micro/radtr_satel.f90              |  10 +-
 tools/check_commit_ial.sh                     |   1 +
 39 files changed, 1861 insertions(+), 1049 deletions(-)
 create mode 100644 src/arome/ext/aroini_micro.F90
 create mode 100644 src/arome/ext/aroini_micro.h
 delete mode 100644 src/arome/ext/dead_code/aro_icecld.F90
 delete mode 100644 src/arome/ext/dead_code/aro_tiwmx.F90
 delete mode 100644 src/arome/ext/dead_code/modi_aro_icecld.F90
 delete mode 100644 src/arome/ext/dead_code/modi_aro_tiwmx.F90
 create mode 100644 src/arome/ext/spp_mod_type.F90
 create mode 100644 src/common/micro/ini_snow.F90
 create mode 100644 src/common/micro/ini_tiwmx.F90
 create mode 100644 src/common/micro/mode_tiwmx_fun.F90
 create mode 100644 src/common/micro/modi_ini_snow.F90
 create mode 100644 src/common/micro/modi_ini_tiwmx.F90
 rename src/common/turb/{modd_turbn.f90 => modd_turbn.F90} (100%)
 rename src/common/turb/{mode_coefj.f90 => mode_coefj.F90} (100%)

diff --git a/src/arome/ext/apl_arome.F90 b/src/arome/ext/apl_arome.F90
index 1af66f4e8..1ab8b307a 100644
--- a/src/arome/ext/apl_arome.F90
+++ b/src/arome/ext/apl_arome.F90
@@ -252,8 +252,8 @@ SUBROUTINE APL_AROME(YDGEOMETRY,YDSURF, YDCFU, YDXFU, YDMODEL, KBL, KGPCOMP, KID
 
 !     Method
 !     ------
-!     - convert aladin variables into mesonh variables (level inversion 
-!       and q to r, t to theta) 
+!     - convert aladin variables into mesonh variables (level inversion
+!       and q to r, t to theta)
 !     - call mesoNH physics and ECMWF radiation scheme
 !     - convert mesoNH tendencies to aladin tendencies
 
@@ -265,44 +265,44 @@ SUBROUTINE APL_AROME(YDGEOMETRY,YDSURF, YDCFU, YDXFU, YDMODEL, KBL, KGPCOMP, KID
 !     externalisation of surface scheme call + small cleaning (20-07-04) Y.Seity
 !     Modifications
 !     -------------
-!      G. Hello 04-02-06: Add the call of KFB-convection scheme 
+!      G. Hello 04-02-06: Add the call of KFB-convection scheme
 !                         for future use in ALARO
-!      T.Kovacic 04-05-05: Added ZCVTENDPR_ and ZCVTENDPRS_ 
+!      T.Kovacic 04-05-05: Added ZCVTENDPR_ and ZCVTENDPRS_
 !        M.Hamrud      01-Oct-2003 CY28 Cleaning
 !      F.Bouyssel 04-05-05: New arguments in ACRADIN
 !     Y. Seity 30-Sept-2005 Add MNH Chemistry scheme
 !     R. Zaaboul 15-feb-2006 add surface scheme call
-!     T.Kovacic  2006-03-23: calls to subroutines for budgets 
+!     T.Kovacic  2006-03-23: calls to subroutines for budgets
 !                             and new arguments PFRTH and PFRSO
-!     Y. Seity   2007-05-07: add CFU and XFU calculations 
+!     Y. Seity   2007-05-07: add CFU and XFU calculations
 !                           and call aro_ground_diag
-!     S.Ivatek-S 2007-04-17: Over dimensioning of PGPAR by NGPAR+1 just 
+!     S.Ivatek-S 2007-04-17: Over dimensioning of PGPAR by NGPAR+1 just
 !                            (KLON,NGPAR) is used boundary checking bf
 !     T.Kovacic  2007-03-16: Fourth dim. in APFT
-!     JJMorcrette, ECMWF, 20080325: dummy arguments for RADACT to allow for 
+!     JJMorcrette, ECMWF, 20080325: dummy arguments for RADACT to allow for
 !                        using a new sulphate climatology in the ECMWF model
 !     Y. Seity   2008-06-15: correct calculations of PFRTHDS, PFRSODS and PFCLL
 !     Y. Seity   2008-09-29: phasing Chemistry corrections
 !     O.Riviere  2008-10-01: introduction of new data flow for DDH in Arome
 !     Y. Seity   2009-05-03: new version of EDKF and implementation of EDMF
-!     Y. Seity   2009-10-03: add missed deallocations 
+!     Y. Seity   2009-10-03: add missed deallocations
 !     S. Riette  2009-03-25: Arguments modification for AROCLDIA to add HTKERAF
 !     K. Yessad (Jul 2009): remove CDLOCK + some cleanings
 !     A. Alias   2009-09-01: Sulfate and Volcano aerosols added (call radaer)
 !     S. Riette  2010-01-19: ZUM__, ZVM__ and ZDEPTH_HEIGHT_ are given
-!                            ARO_GROUND_DIAG in 3D.                     
+!                            ARO_GROUND_DIAG in 3D.
 !     Y. Seity   2010-03-09: add PFEVN and PFEVL
 !     Y. Bouteloup 2010-03-26 : Add PQLRAD et PQIRAD
 !     Y. Seity : Test TKE > 0.
 !     Y. Seity : Optimized version of EDKF + diag HCLS
 !     Y. Seity : 2010-09 Save Ts at the end of apl_arome for ICMSH+0000
-!     L. Bengtsson (2010): Introduce cloud diagnostics based on geop. 
-!                               height (LWMOCLOUD), AND cloud-overlap assumptions 
+!     L. Bengtsson (2010): Introduce cloud diagnostics based on geop.
+!                               height (LWMOCLOUD), AND cloud-overlap assumptions
 !                               from C. Wittman 2009 (LACPANMX + WMXOV)
 !     S. Riette: 2010-12 aro_ground_diag interface modified
 !     Y. Seity: 2010-12 add hail diagnostic
 !     R. El Khatib 30-Jun-2010 NEC directive noloopfusion to preserve critical regions
-!     P.Marguinaud 2010-06-29 : KSURFEXCTL flag (disable SURFEX) 
+!     P.Marguinaud 2010-06-29 : KSURFEXCTL flag (disable SURFEX)
 !     2010-12    B. Decharme  : modify the radiative coupling with surfex (SW per band in ACRADIN and RADHEAT)
 !     2011-02    A. Voldoire : add ZAERINDS to CALL RADAER and ACRADIN
 !                              for sulfate indirect effect computation
@@ -331,11 +331,13 @@ SUBROUTINE APL_AROME(YDGEOMETRY,YDSURF, YDCFU, YDXFU, YDMODEL, KBL, KGPCOMP, KID
 !     2016-09, J. Masek: Proper calculation of sunshine duration in ACRANEB2.
 !     2016-10, P. Marguinaud : Port to single precision
 !     S. Riette 2016-11: Changes in ICE3/ICE4
+!     K.I Ivarsson 2018-02 : Some new variables for microphysics
 !     2018-09, E. Gleeson: Corrected misplaced arguments in ACRANEB2 call.
 !     2019-09-24 J.M. Piriou arguments for convective gusts.
 !     R. El Khatib 30-Oct-2018 substantial rewrite for optimization and coding standards respect.
 !     2018-10, I. Etchevers : add Visibilities
 !     2019-01, I. Etchevers, Y. Seity : add Precipitation Type
+!     2019-06, W. de Rooy: Modifications for new set-up statistical cloud scheme (LSTATNW)
 !     2019-09, J. Masek: Corrected dimensioning of dummy argument PGMU0.
 !                        Modified call to ACRANEB2 (clearsky fluxes).
 !     2019-10, I. Etchevers : Visibilities in ACVISIH, AROCLDIA=>ACCLDIA
@@ -375,6 +377,7 @@ USE YOMNSV     , ONLY : NSV_CO2
 USE DDH_MIX    , ONLY : ADD_FIELD_3D, NEW_ADD_FIELD_3D, TYP_DDH ! for new diag data flow
 USE YOMSPSDT   , ONLY : YSPPT_CONFIG, YSPPT
 USE SPP_MOD    , ONLY : YSPP_CONFIG, YSPP
+USE SPP_MOD_TYPE, ONLY : ALL_SPP_VARS, SET_ALL_SPP, CLEAR_ALL_SPP, APPLY_SPP
 USE YOMLSFORC  , ONLY : LMUSCLFA, NMUSCLFA, REMIS_FORC, RALB_FORC
 ! daand: radflex
 USE INTFLEX_MOD, ONLY : LINTFLEX, LRADFLEX,&
@@ -382,6 +385,25 @@ USE INTFLEX_MOD, ONLY : LINTFLEX, LRADFLEX,&
                       & NEWINTFIELD, NEWINTPROC
 USE YOMMP0     , ONLY : MYPROC     
 
+
+
+
+
+
+
+
+!SR phasing step, must be removed in 48t3
+USE SPP_MOD_TYPE, ONLY : TSPP_CONFIG_TYPE
+
+
+
+
+
+
+
+
+
+
 !     --------------------------------------------------------------------------
 
 IMPLICIT NONE
@@ -759,6 +781,14 @@ REAL(KIND=JPRB) :: ZZTOP_(KFDIA),  ZCVTENDPR_(KFDIA),      ZCVTENDPRS_(KFDIA)
 ! surface flux of x and y component of wind. are they really necessary ? REK
 REAL(KIND=JPRB) :: ZSFU_(KFDIA),   ZSFV_(KFDIA)
 
+! local areas for OCND2 option:
+! ZICLDFR = ice cloud fraction , ZWCLDFR = water or mixed-phase cloud fraction,
+! ZSSIO = Super-saturation with respect to ice in ZICLDFR , 
+! ZSSIU = Sub-saturation with respect to ice outside ZICLDFR,
+! ZIFR = variable used for calulation of subgridscale ice
+! Meso-NH world
+REAL(KIND=JPRB) :: ZICLDFR_(KFDIA,KLEV),    ZWCLDFR_(KFDIA,KLEV)
+REAL(KIND=JPRB) :: ZSSIO_(KFDIA,KLEV),      ZSSIU_(KFDIA,KLEV),      ZIFR_(KFDIA,KLEV)
 
 ! Arpege-style dimensionning :
 ! --------------------------
@@ -934,6 +964,22 @@ REAL(KIND=JPRB) :: ZMU,ZVAL
 INTEGER(KIND=JPIM) :: JKO,JKE
 
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+!SR phasing step
+TYPE(TSPP_CONFIG_TYPE) :: YSPP1, YSPP2, YSPP3
 !     --------------------------------------------------------------------------
 
 #include "abor1.intfb.h"
@@ -1020,7 +1066,7 @@ ASSOCIATE(MINPRR=>YDPARAR%MINPRR, MINPRS=>YDPARAR%MINPRS, MVQS=>YDPARAR%MVQS, &
  & CFRAC_ICE_SHALLOW_MF=>YDPARAR%CFRAC_ICE_SHALLOW_MF, CFRAC_ICE_ADJUST=>YDPARAR%CFRAC_ICE_ADJUST, &
  & MVTS=>YDPARAR%MVTS, NREFROI2=>YDPARAR%NREFROI2, NREFROI1=>YDPARAR%NREFROI1, &
  & MVEMIS=>YDPARAR%MVEMIS, LOWARM=>YDPARAR%LOWARM, LOCND2=>YDPARAR%LOCND2, &
- & LGRSN=>YDPARAR%LGRSN, LOSIGMAS=>YDPARAR%LOSIGMAS, NRR=>YDPARAR%NRR, &
+ & LOSIGMAS=>YDPARAR%LOSIGMAS, NRR=>YDPARAR%NRR, &
  & LOSUBG_COND=>YDPARAR%LOSUBG_COND, RADGR=>YDPARAR%RADGR, &
  & CMF_UPDRAFT=>YDPARAR%CMF_UPDRAFT, LHARATU=>YDPARAR%LHARATU, &
  & XMINLM=>YDPHY0%XMINLM, XMAXLM=>YDPHY0%XMAXLM, AERCS1=>YDPHY0%AERCS1, &
@@ -1042,6 +1088,7 @@ ASSOCIATE(MINPRR=>YDPARAR%MINPRR, MINPRS=>YDPARAR%MINPRS, MVQS=>YDPARAR%MVQS, &
  & NGFL_EXT=>YGFL%NGFL_EXT, YLRAD=>YGFL%YLRAD, YIRAD=>YGFL%YIRAD, &
  & NGFL_EZDIAG=>YGFL%NGFL_EZDIAG, &
  & NLIMA=>YGFL%NLIMA, CMICRO=>YDPARAR%CMICRO,NPROMICRO=>YDPARAR%NPROMICRO, &
+ & LKOGAN=>YDPARAR%LKOGAN, LHGT_QS=>YDPARAR%LHGT_QS, LMODICEDEP=>YDPARAR%LMODICEDEP, &
  & YSD_VAD=>YDSURF%YSD_VAD, &
  & QCO2=>YDPHY3%QCO2, &
  & NTEND_DIAG_POS=>YDPHY%NTEND_DIAG_POS, NTEND_DIAG_FREQ_RESET=>YDPHY%NTEND_DIAG_FREQ_RESET, &
@@ -1188,6 +1235,11 @@ IF (INIT0 >= 0) THEN
   ZMFM_(:,:)=ZVALUE
   ZSIGM_(:,:)=ZVALUE
   ZNEBMNH_(:,:)=ZVALUE
+  ZICLDFR_(:,:)=ZVALUE
+  ZWCLDFR_(:,:)=ZVALUE
+  ZSSIO_(:,:)=ZVALUE
+  ZSSIU_(:,:)=ZVALUE
+  ZIFR_(:,:)=ZVALUE
   ZEVAP_(:,:)=ZVALUE
 
   ZRSWAP_(:,:,:)=ZVALUE
@@ -1655,10 +1707,14 @@ IF (LMICRO) THEN
      & YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH)
   ELSE
 
+YSPP1%LPERT=.FALSE.
+YSPP2%LPERT=.FALSE.
+YSPP3%LPERT=.FALSE.
+
+!SR phasing step, YSPP1 and YSPP2 must be replaced by their values
     CALL ARO_ADJUST (KLEV,IKU,IKL,KFDIA,KLEV,NRR,&
-     & NGFL_EZDIAG, &
      & CFRAC_ICE_ADJUST, CCONDENS, CLAMBDA3, LOSUBG_COND, &
-     & LOSIGMAS, CMICRO, LOCND2, CSUBG_MF_PDF, &
+     & LOSIGMAS, CMICRO, LOCND2, LHGT_QS, CSUBG_MF_PDF, &
      & ZDT,VSIGQSAT,ZZZ_F_,&
      & ZRHODJM__(:,1:KLEV),&
      & ZEXNREFM_,&
@@ -1670,10 +1726,12 @@ IF (LMICRO) THEN
      & ZRI_MF_,ZCF_MF_,&
      & ZTHS__(:,1:KLEV),ZRS_,&
      & ZSRCS__(:,1:KLEV),ZNEBMNH_,&
+     & ZICLDFR_,ZWCLDFR_,ZSSIO_,ZSSIU_,ZIFR_,&
      & ZHLC_HRC__(:,1:KLEV), ZHLC_HCF__(:,1:KLEV),&
      & ZHLI_HRI__(:,1:KLEV), ZHLI_HCF__(:,1:KLEV),&
-     & PGP2DSPP,PEZDIAG,&
-     & YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH)
+     & YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH,&
+     & YSPP1, YSPP2)
+!     & ZSPP_ALL%YSPP_PSIGQSAT,ZSPP_ALL%YSPP_ICE_CLD_WGT)
 
   ENDIF
   
@@ -3306,16 +3364,19 @@ IF (LMICRO) THEN
      & ZINPRR_NOTINCR_, ZINPRS_NOTINCR_, ZINPRG_NOTINCR_, ZINPRH_NOTINCR_,ZPFPR_,&
      & YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH )
   ELSE
-    CALL ARO_RAIN_ICE (NPROMICRO,KLEV,IKU,IKL,KFDIA,KLEV,NRR,KSTEP+1,NSPLITR,NGFL_EZDIAG,&
+!SR phasing step, YSPP1, YSPP2 and YSPP3 must be replaced by their values
+    CALL ARO_RAIN_ICE (NPROMICRO,KLEV,IKU,IKL,KFDIA,KLEV,NRR,KSTEP+1,NSPLITR,&
      & LOSUBG_COND, CSUBG_AUCV_RC, CSUBG_AUCV_RI, LOSEDIC,CSEDIM, CMICRO, ZDT,ZDZZ_ ,&
      & ZRHODJM__(:,1:KLEV),ZRHODREFM__(:,1:KLEV), ZEXNREFM_, ZPABSM__(:,1:KLEV),&
      & ZHLC_HRC__(:,1:KLEV), ZHLC_HCF__(:,1:KLEV),&
      & ZHLI_HRI__(:,1:KLEV), ZHLI_HCF__(:,1:KLEV),&
      & ZTHM__(:,1:KLEV),ZRM_, ZSIGS__(:,1:KLEV), ZNEBMNH_, ZTHS__(:,1:KLEV),ZRS_,&
-     & ZEVAP_, ZCIT_,LOWARM,ZSEA_,ZTOWN_, LOCND2,LGRSN,&
+     & ZEVAP_, ZCIT_,LOWARM,ZSEA_,ZTOWN_, &
+     & ZICLDFR_, ZWCLDFR_, ZSSIO_, ZSSIU_, ZIFR_, &
+     & LOCND2, LKOGAN, LMODICEDEP,&
      & ZINPRR_NOTINCR_, ZINPRS_NOTINCR_, ZINPRG_NOTINCR_, ZINPRH_NOTINCR_,ZPFPR_,&
-     & PGP2DSPP,PEZDIAG, &
-     & YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH)
+     & YDDDH, YDMODEL%YRML_DIAG%YRLDDH, YDMODEL%YRML_DIAG%YRMDDH,&
+     & YSPP1, YSPP2, YSPP3)
   ENDIF
 
   DO JLON=KIDIA,KFDIA
diff --git a/src/arome/ext/aro_adjust.F90 b/src/arome/ext/aro_adjust.F90
index 4554df8ba..abae8e663 100644
--- a/src/arome/ext/aro_adjust.F90
+++ b/src/arome/ext/aro_adjust.F90
@@ -1,16 +1,16 @@
 !     ######spl
       SUBROUTINE  ARO_ADJUST(KKA,KKU,KKL,KLON,KLEV,  KRR,  &
-                                  NGFL_EZDIAG, &
                                   HFRAC_ICE, HCONDENS, HLAMBDA3, OSUBG_COND, &
-                                  OSIGMAS, CMICRO, OCND2, HSUBG_MF_PDF, &
+                                  OSIGMAS, CMICRO, OCND2, LHGT_QS, HSUBG_MF_PDF, &
                                   PTSTEP, PSIGQSAT, &
                                   PZZF, PRHODJ, PEXNREF, PRHODREF,&
                                   PPABSM, PTHT, PRT, PSIGS, &
                                   PMFCONV, PRC_MF, PRI_MF, PCF_MF, &
                                   PTHS, PRS,  PSRCS, PCLDFR,&
+                                  PICLDFR, PWCLDFR, PSSIO, PSSIU, PIFR, &
                                   PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF,&
-                                  PGP2DSPP,PEZDIAG, &
-                                  YDDDH,YDLDDH,YDMDDH)
+                                  YDDDH,YDLDDH,YDMDDH,&
+                                  YSPP_PSIGQSAT,YSPP_ICE_CLD_WGT)
       USE PARKIND1, ONLY : JPRB
       USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !     ##########################################################################
@@ -76,6 +76,7 @@
 !!      S. Riette ice for EDKF
 !!      2012-02 Y. Seity,  add possibility to run with reversed vertical levels
 !!      2016-11 S. Riette: new ice_adjust interface, add OLD3/OLD4 schemes
+!!      2018-02 K.I Ivarsson : More outputs from OCND2 option
 !!      2020-12 U. Andrae : Introduce SPP for HARMONIE-AROME
 !!     R. El Khatib 24-Aug-2021 Optimizations
 !!
@@ -88,11 +89,11 @@ USE MODD_CONF
 USE MODD_CST
 USE MODD_PARAMETERS
 USE MODD_RAIN_ICE_DESCR
+USE MODD_RAIN_ICE_PARAM, ONLY: XFRMIN
 USE MODD_BUDGET, ONLY: TBUDGETDATA, NBUDGET_RI
-USE MODD_SPP_TYPE
+USE SPP_MOD_TYPE, ONLY : TSPP_CONFIG_TYPE, CLEAR_SPP_TYPE, APPLY_SPP
 !
 USE MODI_ICE_ADJUST
-USE SPP_MOD, ONLY : YSPP_CONFIG,YSPP
 !
 USE DDH_MIX , ONLY : TYP_DDH
 USE YOMLDDH , ONLY : TLDDH
@@ -111,7 +112,6 @@ INTEGER,                  INTENT(IN)   :: KKL    !vert. levels type 1=MNH -1=ARO
 INTEGER,                  INTENT(IN)   :: KLON     !NPROMA under CPG
 INTEGER,                  INTENT(IN)   :: KLEV     !Number of vertical levels
 INTEGER,                  INTENT(IN)   :: KRR      ! Number of moist variables
-INTEGER,                  INTENT(IN)   :: NGFL_EZDIAG  ! Diagnostic array dimension
 CHARACTER*1,              INTENT(IN)   :: HFRAC_ICE
 CHARACTER*80,             INTENT(IN)   :: HCONDENS
 CHARACTER*4,              INTENT(IN)   :: HLAMBDA3 ! formulation for lambda3 coeff
@@ -121,6 +121,7 @@ LOGICAL,                  INTENT(IN)   :: OSIGMAS  ! Switch for Sigma_s:
                                         ! or that from turbulence scheme
 CHARACTER (LEN=4),        INTENT(IN)   :: CMICRO  ! Microphysics scheme
 LOGICAL,                  INTENT(IN)   :: OCND2
+LOGICAL,                  INTENT(IN)   :: LHGT_QS
 CHARACTER*80,             INTENT(IN)   :: HSUBG_MF_PDF
 REAL,                     INTENT(IN)   :: PTSTEP   ! Time step
 REAL,                     INTENT(IN)   :: PSIGQSAT ! coeff applied to qsat variance contribution
@@ -148,19 +149,25 @@ REAL, DIMENSION(KLON,1,KLEV),   INTENT(OUT)   :: PSRCS ! Second-order flux
                                                  ! s'rc'/2Sigma_s2 at time t+1
                                                  ! multiplied by Lambda_3
 REAL, DIMENSION(KLON,1,KLEV), INTENT(INOUT)   :: PCLDFR! Cloud fraction
+REAL, DIMENSION(KLON,1,KLEV),   INTENT(OUT)   :: PICLDFR ! ice cloud fraction
+REAL, DIMENSION(KLON,1,KLEV),   INTENT(OUT)   :: PWCLDFR ! water or mixed-phase cloud fraction
+REAL, DIMENSION(KLON,1,KLEV),   INTENT(OUT)   :: PSSIO   ! Super-saturation with respect to ice in the 
+                                                         ! supersaturated fraction
+REAL, DIMENSION(KLON,1,KLEV),   INTENT(OUT)   :: PSSIU   ! Sub-saturation with respect to ice in the 
+                                                         ! subsaturated fraction 
+REAL, DIMENSION(KLON,1,KLEV),   INTENT(OUT)   :: PIFR    ! Ratio cloud ice moist part to dry part
 !
 REAL, DIMENSION(KLON,1,KLEV), INTENT(OUT)   :: PHLC_HRC
 REAL, DIMENSION(KLON,1,KLEV), INTENT(OUT)   :: PHLC_HCF
 REAL, DIMENSION(KLON,1,KLEV), INTENT(OUT)   :: PHLI_HRI
 REAL, DIMENSION(KLON,1,KLEV), INTENT(OUT)   :: PHLI_HCF
 !
-REAL, DIMENSION(KLON,YSPP%N2D), TARGET, INTENT(INOUT) :: PGP2DSPP
-REAL, DIMENSION(KLON,KLEV,NGFL_EZDIAG), INTENT(INOUT) :: PEZDIAG
-!
 TYPE(TYP_DDH), INTENT(INOUT), TARGET :: YDDDH
 TYPE(TLDDH), INTENT(IN), TARGET :: YDLDDH
 TYPE(TMDDH), INTENT(IN), TARGET :: YDMDDH
 !
+TYPE(TSPP_CONFIG_TYPE), INTENT(INOUT) :: YSPP_PSIGQSAT,YSPP_ICE_CLD_WGT
+!
 !*       0.2   Declarations of local variables :
 
 CHARACTER*4               :: HBUNAME  ! Name of the budget
@@ -178,12 +185,9 @@ REAL  :: ZMASSTOT                   ! total mass  for one water category
 REAL  :: ZMASSPOS                   ! total mass  for one water category
                                     ! after removing the negative values
 REAL  :: ZRATIO                     ! ZMASSTOT / ZMASSCOR
-REAL  :: ZCOR(KLON)                       ! for the correction of negative rv
+REAL  :: ZCOR(KLON)                 ! for the correction of negative rv
 !
-TYPE(TSPP_CONFIG_MPA) :: YSPP_PSIGQSAT,YSPP_ICE_CLD_WGT
-REAL  :: ZMU, ZVAL
 REAL, DIMENSION(KLON,1) :: ZSIGQSAT, ZICE_CLD_WGT
-INTEGER :: JI
 TYPE(TBUDGETDATA), DIMENSION(NBUDGET_RI) :: YLBUDGET !NBUDGET_RI is the one with the highest number
 !
 !
@@ -195,69 +199,20 @@ REAL(KIND=JPRB) :: ZHOOK_HANDLE
 !
 IF (LHOOK) CALL DR_HOOK('ARO_ADJUST',0,ZHOOK_HANDLE)
 
-! Copy SPP settings
-IF ( YSPP_CONFIG%LSPP ) THEN
-
-  IF ( YSPP_CONFIG%LPERT_PSIGQSAT ) &
-  CALL SET_SPP_TYPE(YSPP_PSIGQSAT, &
-   YSPP_CONFIG%LLNN_MEAN1, YSPP_CONFIG%LLNN_MEAN1_PSIGQSAT, &
-   YSPP_CONFIG%CMPERT_PSIGQSAT, YSPP_CONFIG%SDEV, &
-   YSPP_CONFIG%CLIP_PSIGQSAT, &
-   YSPP%MP_PSIGQSAT, &
-   KLON,KLEV,YSPP%N2D,NGFL_EZDIAG, &
-   YSPP_CONFIG%IEZDIAG_POS, &
-   PGP2DSPP,PSIGQSAT,PEZDIAG)
-                    
-  IF ( YSPP_CONFIG%LPERT_ICE_CLD_WGT ) &
-  CALL SET_SPP_TYPE(YSPP_ICE_CLD_WGT, &
-   YSPP_CONFIG%LLNN_MEAN1, YSPP_CONFIG%LLNN_MEAN1_ICE_CLD_WGT, &
-   YSPP_CONFIG%CMPERT_ICE_CLD_WGT, YSPP_CONFIG%SDEV, &
-   YSPP_CONFIG%CLIP_ICE_CLD_WGT, &
-   YSPP%MP_ICE_CLD_WGT, &
-   KLON,KLEV,YSPP%N2D,NGFL_EZDIAG, &
-   YSPP_CONFIG%IEZDIAG_POS, &
-   PGP2DSPP,1.0_JPRB,PEZDIAG)
-   ! Awaiting merge of HARMONIE-AROME physics 
-   !PGP2DSPP,XFRMIN(21),PEZDIAG)
-
-ENDIF 
+!
+! Apply SPP perturbations
+!
 
-! Compute perturbations 
-! Perturb PSIGQSAT
 IF (YSPP_PSIGQSAT%LPERT) THEN
-  IF (YSPP_PSIGQSAT%LLNN_MEAN1.OR.YSPP_PSIGQSAT%LLNN_MEAN1_SELF) THEN
-    ZMU = -0.5 * (YSPP_PSIGQSAT%CMPERT * YSPP_PSIGQSAT%SDEV)**2
-  ELSE
-    ZMU = 0.
-  ENDIF
-  DO JI=1,KLON
-    ZVAL = &
-      PSIGQSAT*EXP(ZMU+YSPP_PSIGQSAT%CMPERT*YSPP_PSIGQSAT%PGP2DSPP(JI)) 
-    ZSIGQSAT(JI,1) = MAX(YSPP_PSIGQSAT%CLIP(1),MIN(ZVAL,YSPP_PSIGQSAT%CLIP(2)))
-  ENDDO
+ CALL APPLY_SPP(YSPP_PSIGQSAT,KLON,1,KLON,PSIGQSAT,ZSIGQSAT)
 ELSE
-  ZSIGQSAT(:,1) = PSIGQSAT
+ ZSIGQSAT(:,:) = PSIGQSAT
 ENDIF
 
-! Perturb ICE_CLD_WGT
 IF (YSPP_ICE_CLD_WGT%LPERT) THEN
-  IF (YSPP_ICE_CLD_WGT%LLNN_MEAN1.OR.YSPP_ICE_CLD_WGT%LLNN_MEAN1_SELF) THEN
-    ZMU = -0.5 * (YSPP_ICE_CLD_WGT%CMPERT * YSPP_ICE_CLD_WGT%SDEV)**2
-  ELSE
-    ZMU = 0.
-  ENDIF
-  DO JI=1,KLON
-  ! Awaiting HARMONIE-AROME physics changes
-  !    ZVAL = &
-  !     XFRMIN(21)* EXP(ZMU+YSPP_ICE_CLD_WGT%CMPERT*YSPP_ICE_CLD_WGT%PGP2DSPP(JI)) 
-     ZVAL = &
-      1.5* EXP(ZMU+YSPP_ICE_CLD_WGT%CMPERT*YSPP_ICE_CLD_WGT%PGP2DSPP(JI)) 
-    ZICE_CLD_WGT(JI,1) = &
-    MAX(YSPP_ICE_CLD_WGT%CLIP(1),MIN(ZVAL,YSPP_ICE_CLD_WGT%CLIP(2)))
-  ENDDO
+ CALL APPLY_SPP(YSPP_ICE_CLD_WGT,KLON,1,KLON,XFRMIN(21),ZICE_CLD_WGT)
 ELSE
-!  ZICE_CLD_WGT(:) = XFRMIN(21)
-   ZICE_CLD_WGT(:,1) = 1.5
+ ZICE_CLD_WGT(:,:) = XFRMIN(21)
 ENDIF
 
 HBUNAME='DEPI'
@@ -435,11 +390,13 @@ IF (KRR==6) THEN
   CALL ICE_ADJUST ( KKA=KKA,KKU=KKU,KKL=KKL,KRR=KRR,&
     & HFRAC_ICE=HFRAC_ICE, HCONDENS=HCONDENS, HLAMBDA3=HLAMBDA3, HBUNAME=HBUNAME, &
     & OSUBG_COND=OSUBG_COND, OSIGMAS=OSIGMAS, &
-    & OCND2=OCND2, HSUBG_MF_PDF=HSUBG_MF_PDF, &
+    & OCND2=OCND2, LHGT_QS=LHGT_QS, HSUBG_MF_PDF=HSUBG_MF_PDF, &
     & PTSTEP=ZTWOTSTEP,PSIGQSAT=ZSIGQSAT, &
     & PRHODJ=PRHODJ ,PEXNREF=PEXNREF, PRHODREF=PRHODREF,   &
     & PSIGS=PSIGS, PMFCONV=PMFCONV, PPABST=PPABSM, PZZ=ZZZ,    &
     & PEXN=PEXNREF, PCF_MF=PCF_MF,PRC_MF=PRC_MF,PRI_MF=PRI_MF, &
+    & PICLDFR=PICLDFR, PWCLDFR=PWCLDFR, & 
+    & PSSIO=PSSIO, PSSIU=PSSIU, PIFR=PIFR, &
     & PRV=ZRS(:,:,:,1), PRC=ZRS(:,:,:,2),  &
     & PRVS=PRS(:,:,:,1), PRCS=PRS(:,:,:,2), &
     & PTH=ZRS(:,:,:,0), PTHS=PTHS,PSRCS=PSRCS, PCLDFR=PCLDFR, &
@@ -447,19 +404,21 @@ IF (KRR==6) THEN
     & PRI=ZRS(:,:,:,4), PRIS=PRS(:,:,:,4), &
     & PRS=ZRS(:,:,:,5), &
     & PRG=ZRS(:,:,:,6), &
-    & PHLC_HRC=PHLC_HRC(:,:,:), PHLC_HCF=PHLC_HCF(:,:,:), &
-    & PHLI_HRI=PHLI_HRI(:,:,:), PHLI_HCF=PHLI_HCF(:,:,:), &
+    & TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET), &
     & PICE_CLD_WGT=ZICE_CLD_WGT(:,:), &
-    & TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET))
+    & PHLC_HRC=PHLC_HRC(:,:,:), PHLC_HCF=PHLC_HCF(:,:,:), &
+    & PHLI_HRI=PHLI_HRI(:,:,:), PHLI_HCF=PHLI_HCF(:,:,:))
 ELSE
   CALL ICE_ADJUST ( KKA=KKA,KKU=KKU,KKL=KKL,KRR=KRR,&
     & HFRAC_ICE=HFRAC_ICE, HCONDENS=HCONDENS, HLAMBDA3=HLAMBDA3, HBUNAME=HBUNAME,    &
     & OSUBG_COND=OSUBG_COND, OSIGMAS=OSIGMAS, &
-    & OCND2=OCND2, HSUBG_MF_PDF=HSUBG_MF_PDF, &
+    & OCND2=OCND2, LHGT_QS=LHGT_QS, HSUBG_MF_PDF=HSUBG_MF_PDF, &
     & PTSTEP=ZTWOTSTEP,PSIGQSAT=ZSIGQSAT, &
     & PRHODJ=PRHODJ ,PEXNREF=PEXNREF, PRHODREF=PRHODREF,   &
     & PSIGS=PSIGS, PMFCONV=PMFCONV, PPABST=PPABSM, PZZ=ZZZ,    &
     & PEXN=PEXNREF, PCF_MF=PCF_MF,PRC_MF=PRC_MF,PRI_MF=PRI_MF, &
+    & PICLDFR=PICLDFR, PWCLDFR=PWCLDFR, & 
+    & PSSIO=PSSIO, PSSIU=PSSIU, PIFR=PIFR, &
     & PRV=ZRS(:,:,:,1), PRC=ZRS(:,:,:,2), &
     & PRVS=PRS(:,:,:,1), PRCS=PRS(:,:,:,2), &
     & PTH=ZRS(:,:,:,0), PTHS=PTHS,PSRCS=PSRCS, PCLDFR=PCLDFR, &
@@ -467,11 +426,11 @@ ELSE
     & PRI=ZRS(:,:,:,4), PRIS=PRS(:,:,:,4), &
     & PRS=ZRS(:,:,:,5), &
     & PRG=ZRS(:,:,:,6), &
+    & TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET), &
+    & PICE_CLD_WGT=ZICE_CLD_WGT(:,:), &
     & PRH=ZRS(:,:,:,7), &
     & PHLC_HRC=PHLC_HRC(:,:,:), PHLC_HCF=PHLC_HCF(:,:,:), & 
-    & PHLI_HRI=PHLI_HRI(:,:,:), PHLI_HCF=PHLI_HCF(:,:,:), &
-    & PICE_CLD_WGT=ZICE_CLD_WGT(:,:), &
-    & TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET))
+    & PHLI_HRI=PHLI_HRI(:,:,:), PHLI_HCF=PHLI_HCF(:,:,:))
 ENDIF
 
 CALL CLEAR_SPP_TYPE(YSPP_PSIGQSAT)
diff --git a/src/arome/ext/aro_adjust.h b/src/arome/ext/aro_adjust.h
index 6f2856602..862153cee 100644
--- a/src/arome/ext/aro_adjust.h
+++ b/src/arome/ext/aro_adjust.h
@@ -1,17 +1,17 @@
 INTERFACE
  SUBROUTINE ARO_ADJUST(KKA,KKU,KKL,KLON,KLEV, KRR,&
- & NGFL_EZDIAG, &
  & HFRAC_ICE, HCONDENS, HLAMBDA3, OSUBG_COND, &
- & OSIGMAS, CMICRO, OCND2, HSUBG_MF_PDF,&
+ & OSIGMAS, CMICRO, OCND2, LHGT_QS, HSUBG_MF_PDF,&
  & PTSTEP, PSIGQSAT, PZZF, PRHODJ, PEXNREF, PRHODREF,&
  & PPABSM, PTHT, PRT, PSIGS,&
  & PMFCONV, PRC_MF, PRI_MF, PCF_MF,&
  & PTHS, PRS, PSRCS, PCLDFR, &
+ & PICLDFR, PWCLDFR, PSSIO, PSSIU, PIFR,&
  & PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, &
- & PGP2DSPP,PEZDIAG, &
- & YDDDH,YDLDDH,YDMDDH)
+ & YDDDH,YDLDDH,YDMDDH,&
+ & YSPP_PSIGQSAT,YSPP_ICE_CLD_WGT)
 USE PARKIND1  ,ONLY : JPIM     ,JPRB
-USE SPP_MOD, ONLY : YSPP
+USE SPP_MOD_TYPE, ONLY : TSPP_CONFIG_TYPE
 USE DDH_MIX, ONLY : TYP_DDH
 USE YOMLDDH, ONLY : TLDDH
 USE YOMMDDH, ONLY : TMDDH
@@ -21,7 +21,6 @@ INTEGER(KIND=JPIM), INTENT(IN) :: KKL
 INTEGER(KIND=JPIM), INTENT(IN) :: KLON
 INTEGER(KIND=JPIM), INTENT(IN) :: KLEV
 INTEGER(KIND=JPIM), INTENT(IN) :: KRR
-INTEGER(KIND=JPIM), INTENT(IN) :: NGFL_EZDIAG
 CHARACTER*1, INTENT(IN) :: HFRAC_ICE
 CHARACTER(LEN=80), INTENT(IN) :: HCONDENS
 CHARACTER*4, INTENT(IN) :: HLAMBDA3
@@ -29,6 +28,7 @@ LOGICAL, INTENT(IN) :: OSUBG_COND
 LOGICAL, INTENT(IN) :: OSIGMAS
 CHARACTER(LEN=4), INTENT(IN) :: CMICRO
 LOGICAL, INTENT(IN) :: OCND2
+LOGICAL, INTENT(IN) :: LHGT_QS
 CHARACTER(LEN=80), INTENT(IN) :: HSUBG_MF_PDF
 REAL(KIND=JPRB), INTENT(IN) :: PTSTEP
 REAL(KIND=JPRB), INTENT(IN) :: PSIGQSAT
@@ -46,14 +46,18 @@ REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PTHS
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PRS
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PSRCS
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PCLDFR
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(OUT)  :: PICLDFR 
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(OUT)  :: PWCLDFR
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(OUT)  :: PSSIO 
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(OUT)  :: PSSIU
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(OUT)  :: PIFR
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PHLC_HRC
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PHLC_HCF
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PHLI_HRI
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(OUT) :: PHLI_HCF
-REAL(KIND=JPRB), DIMENSION(KLON,YSPP%N2D), INTENT(INOUT) :: PGP2DSPP
-REAL(KIND=JPRB), DIMENSION(KLON,KLEV,NGFL_EZDIAG), INTENT(INOUT) :: PEZDIAG
 TYPE(TYP_DDH)                          , INTENT(INOUT) :: YDDDH
 TYPE(TLDDH)                          , INTENT(IN) :: YDLDDH
 TYPE(TMDDH)                          , INTENT(IN) :: YDMDDH
+TYPE(TSPP_CONFIG_TYPE), INTENT(INOUT) :: YSPP_PSIGQSAT,YSPP_ICE_CLD_WGT
 END SUBROUTINE ARO_ADJUST
 END INTERFACE
diff --git a/src/arome/ext/aro_rain_ice.F90 b/src/arome/ext/aro_rain_ice.F90
index ccc927141..7e321c995 100644
--- a/src/arome/ext/aro_rain_ice.F90
+++ b/src/arome/ext/aro_rain_ice.F90
@@ -1,15 +1,15 @@
 !     ######spl
       SUBROUTINE  ARO_RAIN_ICE(KPROMA,KKA,KKU,KKL,KLON,KLEV,  KRR, KTCOUNT, KSPLITR,&
-                                  KEZDIAG, &
                                   OSUBG_COND, CSUBG_AUCV_RC, CSUBG_AUCV_RI,OSEDIC, CSEDIM, CMICRO, &
                                   PTSTEP, PDZZ, PRHODJ, PRHODREF, PEXNREF,&
                                   PPABSM, PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, PTHT, PRT, PSIGS,PCLDFR, &
                                   PTHS, PRS, PEVAP,  &
                                   PCIT, OWARM, PSEA, PTOWN,   &
-                                  OCND2,LGRSN, &
+                                  PICLDFR, PWCLDFR, PSSIO, PSSIU, PIFR,  &
+                                  OCND2, LKOGAN, LMODICEDEP,&
                                   PINPRR,PINPRS,PINPRG,PINPRH,PFPR,     &
-                                  PGP2DSPP,PEZDIAG, &
-                                  YDDDH, YDLDDH, YDMDDH)
+                                  YDDDH, YDLDDH, YDMDDH, &
+                                  YSPP_ICENU,YSPP_KGN_ACON,YSPP_KGN_SBGR)
       USE PARKIND1, ONLY : JPRB
       USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 !     ##########################################################################
@@ -78,6 +78,7 @@
 !!      2014-11 S. Riette, ICE3/ICE4 modified, old versions under OLD3/OLD4
 !!      2014-11 S. Riette, ICE3/ICE4 modified, old versions under OLD3/OLD4
 !!      2020-12 U. Andrae : Introduce SPP for HARMONIE-AROME
+!!      2018-02 K.I: Ivarsson: More inputs to OCND2-option for saving computing time.
 !!     R. El Khatib 24-Aug-2021 Specific cache-blocking factor for microphysics
 !!
 !-------------------------------------------------------------------------------
@@ -89,7 +90,7 @@ USE MODD_CONF
 USE MODD_CST
 USE MODD_PARAMETERS
 USE MODD_RAIN_ICE_DESCR
-USE MODD_SPP_TYPE
+USE MODD_RAIN_ICE_PARAM, ONLY: XFRMIN
 !
 USE MODD_BUDGET, ONLY: LBUDGET_RV, LBUDGET_RC, LBUDGET_RR, LBUDGET_RI, LBUDGET_RS, &
                      & LBUDGET_RG, LBUDGET_RH, LBUDGET_TH, TBUDGETDATA, NBUDGET_RH
@@ -97,7 +98,7 @@ USE MODE_BUDGET, ONLY: BUDGET_DDH
 !
 USE MODI_RAIN_ICE
 !
-USE SPP_MOD, ONLY : YSPP_CONFIG,YSPP
+USE SPP_MOD_TYPE, ONLY : TSPP_CONFIG_TYPE, APPLY_SPP
 !
 USE MODI_RAIN_ICE_OLD
 !
@@ -121,7 +122,6 @@ INTEGER,                  INTENT(IN)   :: KLEV     !Number of vertical levels
 INTEGER,                  INTENT(IN)   :: KRR      ! Number of moist variables
 INTEGER,                  INTENT(IN)   :: KTCOUNT  ! Temporal loop counter
 INTEGER,                  INTENT(IN)   :: KSPLITR  ! Number of small time step
-INTEGER,                  INTENT(IN)   :: KEZDIAG  ! Size of diagnostics array
                                        ! integrations for  rain sedimendation
 LOGICAL,                  INTENT(IN)   :: OSUBG_COND ! Switch for Subgrid Cond.
 CHARACTER (LEN=4),        INTENT(IN)   :: CSUBG_AUCV_RC
@@ -150,6 +150,16 @@ REAL, DIMENSION(KLON,1,KLEV),   INTENT(IN)   :: PTHT    ! Theta at time t
 REAL, DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT):: PRT   ! Moist variables at time t
 REAL, DIMENSION(KLON,1,KLEV),   INTENT(IN)   :: PSIGS   ! Sigma_s at time t
 REAL, DIMENSION(KLON,1,KLEV),   INTENT(IN)   :: PCLDFR  ! Cloud fraction
+! input from aro_adjust / condensation with OCND2, dummy if OCND2 = F
+REAL, DIMENSION(KLON,1,KLEV),   INTENT(IN)   :: PICLDFR ! ice cloud fraction
+REAL, DIMENSION(KLON,1,KLEV),   INTENT(IN)   :: PWCLDFR ! water or mixed-phase cloud fraction
+REAL, DIMENSION(KLON,1,KLEV),   INTENT(IN)   :: PSSIO   ! Super-saturation with respect to ice in the  
+                                                        ! supersaturated fraction
+REAL, DIMENSION(KLON,1,KLEV),   INTENT(IN)   :: PSSIU   ! Sub-saturation with respect to ice in the  
+                                                        ! subsaturated fraction 
+REAL, DIMENSION(KLON,1,KLEV),   INTENT(INOUT):: PIFR    ! Ratio cloud ice moist part to dry part 
+!REAL, DIMENSION (KLON,1),       INTENT(IN)  :: PPBL    ! PBL top above ground (m)
+! input from aro_adjust / condensation with OCND2 END.
 !
 !
 REAL, DIMENSION(KLON,1,KLEV),   INTENT(INOUT) :: PTHS    ! Theta source
@@ -164,7 +174,8 @@ LOGICAL,                  INTENT(IN)    :: OWARM ! Control of the rain formation
                                                  !  by slow warm microphysical
                                                  !         processes
 LOGICAL,                  INTENT(IN)    :: OCND2 ! Logical switch to separate liquid and ice
-LOGICAL,                  INTENT(IN)    :: LGRSN ! Logical switch to turn graupel to snow for high supersaturation wrt ice 
+LOGICAL,                  INTENT(IN)    :: LKOGAN! Logical switch for using Kogan autoconversion of liquid
+LOGICAL,                  INTENT(IN)    :: LMODICEDEP ! Logical switch for alternative dep/evap of ice
 REAL, DIMENSION(KLON,1), INTENT(IN)        :: PSEA  ! Land sea mask
 REAL, DIMENSION(KLON,1), INTENT(IN)        :: PTOWN  ! Town mask
 REAL, DIMENSION(KLON,1), INTENT(OUT)       :: PINPRR! Rain instant precip
@@ -172,13 +183,13 @@ REAL, DIMENSION(KLON,1), INTENT(OUT)       :: PINPRS! Snow instant precip
 REAL, DIMENSION(KLON,1), INTENT(OUT)       :: PINPRG! Graupel instant precip
 REAL, DIMENSION(KLON,1), INTENT(OUT)       :: PINPRH! Hail instant precip
 REAL, DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PFPR ! upper-air precip
-REAL, DIMENSION(KLON,YSPP%N2D), TARGET, INTENT(INOUT) :: PGP2DSPP
-REAL, DIMENSION(KLON,KLEV,KEZDIAG), INTENT(INOUT) :: PEZDIAG
 !
 TYPE(TYP_DDH), INTENT(INOUT), TARGET :: YDDDH
 TYPE(TLDDH), INTENT(IN), TARGET :: YDLDDH
 TYPE(TMDDH), INTENT(IN), TARGET :: YDMDDH
 !
+TYPE(TSPP_CONFIG_TYPE), INTENT(INOUT) :: YSPP_ICENU,YSPP_KGN_ACON,YSPP_KGN_SBGR 
+!
 !
 !*       0.2   Declarations of local variables :
 INTEGER :: JRR           ! Loop index for the moist and scalar variables
@@ -189,6 +200,7 @@ REAL, DIMENSION(KLON,1,KLEV):: ZT,ZLV,ZLS,ZCPH
 REAL, DIMENSION(KLON,1,KLEV):: ZCOR
 REAL, DIMENSION(KLON,1):: ZINDEP     ! surf cloud deposition (already contained in sedimentation)
 REAL, DIMENSION(KLON,1,KLEV):: ZRAINFR
+REAL, DIMENSION(KLON,1) :: ZICENU, ZKGN_ACON, ZKGN_SBGR
 REAL, DIMENSION(KLON,1):: ZINPRC    ! surf cloud sedimentation
                                     ! for the correction of negative rv
 REAL  :: ZMASSTOT                   ! total mass  for one water category
@@ -197,8 +209,6 @@ REAL  :: ZMASSPOS                   ! total mass  for one water category
                                     ! after removing the negative values
 REAL  :: ZRATIO                     ! ZMASSTOT / ZMASSCOR
 
-TYPE(TSPP_CONFIG_MPA) :: YSPP_ICENU,YSPP_KGN_ACON,YSPP_KGN_SBGR
-
 LOGICAL, DIMENSION(KLON, 1, KLEV) :: LLMICRO !mask to limit computation
 
 TYPE(TBUDGETDATA), DIMENSION(NBUDGET_RH) :: YLBUDGET !NBUDGET_RH is the one with the highest number
@@ -217,43 +227,6 @@ IF (LHOOK) CALL DR_HOOK('ARO_RAIN_ICE',0,ZHOOK_HANDLE)
 ZINPRC=0.
 PINPRH=0.
 
-! Copy SPP settings
-IF ( YSPP_CONFIG%LSPP ) THEN
-
-  ! Awaiting HARMONIE-AROME physics changes
-
-  IF ( YSPP_CONFIG%LPERT_ICENU ) &
-  CALL SET_SPP_TYPE(YSPP_ICENU, &
-   YSPP_CONFIG%LLNN_MEAN1, YSPP_CONFIG%LLNN_MEAN1_ICENU, &
-   YSPP_CONFIG%CMPERT_ICENU, YSPP_CONFIG%SDEV, &
-   YSPP_CONFIG%CLIP_ICENU, &
-   YSPP%MP_ICENU, KLON,KLEV,YSPP%N2D,KEZDIAG, &
-   YSPP_CONFIG%IEZDIAG_POS, &
-   PGP2DSPP, 1.0_JPRB,PEZDIAG)
-   !PGP2DSPP, XFRMIN(9),PEZDIAG)
-
-  IF ( YSPP_CONFIG%LPERT_KGN_ACON ) &
-  CALL SET_SPP_TYPE(YSPP_KGN_ACON, &
-   YSPP_CONFIG%LLNN_MEAN1, YSPP_CONFIG%LLNN_MEAN1_KGN_ACON, &
-   YSPP_CONFIG%CMPERT_KGN_ACON, YSPP_CONFIG%SDEV, &
-   YSPP_CONFIG%CLIP_KGN_ACON, &
-   YSPP%MP_KGN_ACON, KLON,KLEV,YSPP%N2D,KEZDIAG, &
-   YSPP_CONFIG%IEZDIAG_POS, &
-   PGP2DSPP, 10._JPRB ,PEZDIAG)
-   !PGP2DSPP, XFRMIN(10),PEZDIAG)
-
-  IF ( YSPP_CONFIG%LPERT_KGN_SBGR ) &
-  CALL SET_SPP_TYPE(YSPP_KGN_SBGR, &
-   YSPP_CONFIG%LLNN_MEAN1, YSPP_CONFIG%LLNN_MEAN1_KGN_SBGR, &
-   YSPP_CONFIG%CMPERT_KGN_SBGR, YSPP_CONFIG%SDEV, &
-   YSPP_CONFIG%CLIP_KGN_SBGR, &
-   YSPP%MP_KGN_SBGR, KLON,KLEV,YSPP%N2D,KEZDIAG, &
-   YSPP_CONFIG%IEZDIAG_POS, &
-   PGP2DSPP, 1.0_JPRB,PEZDIAG)
-   !PGP2DSPP, XFRMIN(11),PEZDIAG)
-
-ENDIF
-
 !Mask to limit computation
 IF ( KRR == 7 ) THEN
   IF (CMICRO /= 'ICE4' .AND. CMICRO /= 'OLD4') THEN
@@ -462,11 +435,31 @@ ELSEIF (CMICRO=='ICE3') THEN
                  &  TBUDGETS=YLBUDGET, KBUDGETS=SIZE(YLBUDGET), &
                  &  PSEA=PSEA, PTOWN=PTOWN, PFPR=PFPR)
 ELSEIF (CMICRO=='OLD4') THEN
-    CALL RAIN_ICE_OLD( OSEDIC=OSEDIC, OCND2=OCND2, LGRSN=LGRSN, HSEDIM=CSEDIM, HSUBG_AUCV_RC=CSUBG_AUCV_RC,&
+    IF (YSPP_ICENU%LPERT) THEN
+     CALL APPLY_SPP(YSPP_ICENU,KLON,1,KLON,XFRMIN(9),ZICENU)
+    ELSE
+     ZICENU(:,:) = XFRMIN(9)
+    ENDIF
+   
+    IF (YSPP_KGN_ACON%LPERT) THEN
+     CALL APPLY_SPP(YSPP_KGN_ACON,KLON,1,KLON,XFRMIN(10),ZKGN_ACON)
+    ELSE
+     ZKGN_ACON(:,:) = XFRMIN(10)
+    ENDIF
+   
+    IF (YSPP_KGN_SBGR%LPERT) THEN
+     CALL APPLY_SPP(YSPP_KGN_SBGR,KLON,1,KLON,XFRMIN(11),ZKGN_SBGR)
+    ELSE
+     ZKGN_SBGR(:,:) = XFRMIN(11)
+    ENDIF
+    CALL RAIN_ICE_OLD( OSEDIC=OSEDIC, OCND2=OCND2, LKOGAN=LKOGAN, LMODICEDEP=LMODICEDEP, &
+                 &  HSEDIM=CSEDIM, HSUBG_AUCV_RC=CSUBG_AUCV_RC, &
                  &  OWARM=OWARM,KKA=KKA,KKU=KKU,KKL=KKL,KSPLITR=KSPLITR, &
                  &  PTSTEP=2*PTSTEP, KRR=KRR,                              &
                  &  PDZZ=PDZZ, PRHODJ=PRHODJ, PRHODREF=PRHODREF, PEXNREF=PEXNREF,&
                  &  PPABST=PPABSM, PCIT=PCIT, PCLDFR=PCLDFR,  &
+                 &  PICLDFR=PICLDFR, PWCLDFR=PWCLDFR, &
+                 &  PSSIO=PSSIO, PSSIU=PSSIU, PIFR=PIFR, &
                  &  PTHT=PTHT,PRVT= PRT(:,:,:,1),PRCT= PRT(:,:,:,2), &
                  &  PRRT=PRT(:,:,:,3), &
                  &  PRIT=PRT(:,:,:,4), PRST=PRT(:,:,:,5), &
@@ -476,15 +469,39 @@ ELSEIF (CMICRO=='OLD4') THEN
                  &  PRIS=PRS(:,:,:,4),PRSS= PRS(:,:,:,5),PRGS= PRS(:,:,:,6),&
                  &  PINPRC=ZINPRC,PINPRR=PINPRR,PEVAP3D=PEVAP,&
                  &  PINPRS=PINPRS, PINPRG=PINPRG, &
-                 &  PSIGS=PSIGS, PSEA=PSEA, PTOWN=PTOWN, PRHT=PRT(:,:,:,7),&
+                 &  PSIGS=PSIGS, PSEA=PSEA, PTOWN=PTOWN, &
+                 &  YDDDH=YDDDH,YDLDDH=YDLDDH,YDMDDH=YDMDDH, &
+                 &  PRHT=PRT(:,:,:,7),&
                  &  PRHS=PRS(:,:,:,7), PINPRH=PINPRH, PFPR=PFPR, &
-                 &  YDDDH=YDDDH,YDLDDH=YDLDDH,YDMDDH=YDMDDH )
+                 &  PICENU=ZICENU, &
+                 &  PKGN_ACON=ZKGN_ACON, &
+                 &  PKGN_SBGR=ZKGN_SBGR)
 ELSE
-      CALL RAIN_ICE_OLD ( OSEDIC=OSEDIC, OCND2=OCND2, LGRSN=LGRSN, HSEDIM=CSEDIM, HSUBG_AUCV_RC=CSUBG_AUCV_RC, &
+    IF (YSPP_ICENU%LPERT) THEN
+     CALL APPLY_SPP(YSPP_ICENU,KLON,1,KLON,XFRMIN(9),ZICENU)
+    ELSE
+     ZICENU(:,:) = XFRMIN(9)
+    ENDIF
+   
+    IF (YSPP_KGN_ACON%LPERT) THEN
+     CALL APPLY_SPP(YSPP_KGN_ACON,KLON,1,KLON,XFRMIN(10),ZKGN_ACON)
+    ELSE
+     ZKGN_ACON(:,:) = XFRMIN(10)
+    ENDIF
+   
+    IF (YSPP_KGN_SBGR%LPERT) THEN
+     CALL APPLY_SPP(YSPP_KGN_SBGR,KLON,1,KLON,XFRMIN(11),ZKGN_SBGR)
+    ELSE
+     ZKGN_SBGR(:,:) = XFRMIN(11)
+    ENDIF
+    CALL RAIN_ICE_OLD( OSEDIC=OSEDIC, OCND2=OCND2, LKOGAN=LKOGAN, LMODICEDEP=LMODICEDEP, &
+                 &  HSEDIM=CSEDIM, HSUBG_AUCV_RC=CSUBG_AUCV_RC, &
                  &  OWARM=OWARM,KKA=KKA,KKU=KKU,KKL=KKL,KSPLITR=KSPLITR, &
                  &  PTSTEP=2*PTSTEP, KRR=KRR,                              &
-                 &  PDZZ=PDZZ, PRHODJ=PRHODJ, PRHODREF=PRHODREF,PEXNREF=PEXNREF,&
+                 &  PDZZ=PDZZ, PRHODJ=PRHODJ, PRHODREF=PRHODREF, PEXNREF=PEXNREF,&
                  &  PPABST=PPABSM, PCIT=PCIT, PCLDFR=PCLDFR,  &
+                 &  PICLDFR=PICLDFR, PWCLDFR=PWCLDFR, &
+                 &  PSSIO=PSSIO, PSSIU=PSSIU, PIFR=PIFR, &
                  &  PTHT=PTHT,PRVT= PRT(:,:,:,1),PRCT= PRT(:,:,:,2), &
                  &  PRRT=PRT(:,:,:,3), &
                  &  PRIT=PRT(:,:,:,4), PRST=PRT(:,:,:,5), &
@@ -494,10 +511,12 @@ ELSE
                  &  PRIS=PRS(:,:,:,4),PRSS= PRS(:,:,:,5),PRGS= PRS(:,:,:,6),&
                  &  PINPRC=ZINPRC,PINPRR=PINPRR,PEVAP3D=PEVAP,&
                  &  PINPRS=PINPRS, PINPRG=PINPRG, &
-                 &  PSIGS=PSIGS, PSEA=PSEA, PTOWN=PTOWN, PFPR=PFPR, &          
+                 &  PSIGS=PSIGS, PSEA=PSEA, PTOWN=PTOWN, &
                  &  YDDDH=YDDDH,YDLDDH=YDLDDH,YDMDDH=YDMDDH, &
-                 &  YSPP_KGN_ACON=YSPP_KGN_ACON, &
-                 &  YSPP_KGN_SBGR=YSPP_KGN_SBGR)
+                 &  PFPR=PFPR, &
+                 &  PICENU=ZICENU, &
+                 &  PKGN_ACON=ZKGN_ACON, &
+                 &  PKGN_SBGR=ZKGN_SBGR)
 ENDIF
 !add ZINPRC in PINPRR
 PINPRR=PINPRR+ZINPRC
diff --git a/src/arome/ext/aro_rain_ice.h b/src/arome/ext/aro_rain_ice.h
index 825705af0..6b506fe89 100644
--- a/src/arome/ext/aro_rain_ice.h
+++ b/src/arome/ext/aro_rain_ice.h
@@ -1,19 +1,19 @@
 INTERFACE
  SUBROUTINE ARO_RAIN_ICE(KPROMA,KKA,KKU,KKL,KLON,KLEV, KRR, KTCOUNT, KSPLITR,&
- & KEZDIAG, &
  & OSUBG_COND, CSUBG_AUCV_RC, CSUBG_AUCV_RI, OSEDIC,CSEDIM,CMICRO,&
  & PTSTEP, PDZZ, PRHODJ, PRHODREF, PEXNREF,&
  & PPABSM, PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, PTHT, PRT, PSIGS,PCLDFR,&
  & PTHS, PRS, PEVAP,&
  & PCIT, OWARM, PSEA, PTOWN, &
- & OCND2, LGRSN, &
+ & PICLDFR, PWCLDFR, PSSIO, PSSIU, PIFR,  &
+ & OCND2, LKOGAN, LMODICEDEP,&
  & PINPRR,PINPRS,&
  & PINPRG,PINPRH,PFPR,&
- & PGP2DSPP,PEZDIAG, &
- & YDDDH,YDLDDH,YDMDDH)
+ & YDDDH,YDLDDH,YDMDDH,&
+ & YSPP_ICENU,YSPP_KGN_ACON,YSPP_KGN_SBGR)
 USE PARKIND1  ,ONLY : JPIM     ,JPRB
 USE DDH_MIX, ONLY : TYP_DDH
-USE SPP_MOD, ONLY : YSPP
+USE SPP_MOD_TYPE, ONLY : TSPP_CONFIG_TYPE
 USE YOMLDDH, ONLY : TLDDH
 USE YOMMDDH, ONLY : TMDDH
 INTEGER,            INTENT(IN) :: KPROMA
@@ -25,7 +25,6 @@ INTEGER(KIND=JPIM), INTENT(IN) :: KLEV
 INTEGER(KIND=JPIM), INTENT(IN) :: KRR
 INTEGER(KIND=JPIM), INTENT(IN) :: KTCOUNT
 INTEGER(KIND=JPIM), INTENT(IN) :: KSPLITR
-INTEGER(KIND=JPIM), INTENT(IN) :: KEZDIAG
 LOGICAL, INTENT(IN) :: OSUBG_COND
 CHARACTER(LEN=4), INTENT(IN) :: CSUBG_AUCV_RC
 CHARACTER(LEN=80), INTENT(IN) :: CSUBG_AUCV_RI
@@ -53,17 +52,22 @@ REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV), INTENT(INOUT) :: PCIT
 LOGICAL, INTENT(IN) :: OWARM
 REAL(KIND=JPRB), DIMENSION(KLON,1), INTENT(IN)    :: PSEA
 REAL(KIND=JPRB), DIMENSION(KLON,1), INTENT(IN)    :: PTOWN
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV),   INTENT(IN)  :: PICLDFR 
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV),   INTENT(IN)  :: PWCLDFR 
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV),   INTENT(IN)  :: PSSIO   
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV),   INTENT(IN)  :: PSSIU   
+REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV),   INTENT(IN)  :: PIFR
 LOGICAL, INTENT(IN) :: OCND2
-LOGICAL, INTENT(IN) :: LGRSN
+LOGICAL, INTENT(IN) :: LKOGAN
+LOGICAL, INTENT(IN) :: LMODICEDEP
 REAL(KIND=JPRB), DIMENSION(KLON,1), INTENT(INOUT) :: PINPRR
 REAL(KIND=JPRB), DIMENSION(KLON,1), INTENT(INOUT) :: PINPRS
 REAL(KIND=JPRB), DIMENSION(KLON,1), INTENT(INOUT) :: PINPRG
 REAL(KIND=JPRB), DIMENSION(KLON,1), INTENT(INOUT) :: PINPRH
 REAL(KIND=JPRB), DIMENSION(KLON,1,KLEV,KRR), INTENT(INOUT) :: PFPR
-REAL(KIND=JPRB), DIMENSION(KLON,YSPP%N2D), INTENT(INOUT) :: PGP2DSPP
-REAL(KIND=JPRB), DIMENSION(KLON,KLEV,1), INTENT(INOUT) :: PEZDIAG
 TYPE(TYP_DDH),                       INTENT(INOUT) :: YDDDH
 TYPE(TLDDH),                         INTENT(IN) :: YDLDDH
 TYPE(TMDDH),                         INTENT(IN) :: YDMDDH
+TYPE(TSPP_CONFIG_TYPE), INTENT(INOUT) :: YSPP_ICENU,YSPP_KGN_ACON,YSPP_KGN_SBGR
 END SUBROUTINE ARO_RAIN_ICE
 END INTERFACE
diff --git a/src/arome/ext/aroini_micro.F90 b/src/arome/ext/aroini_micro.F90
new file mode 100644
index 000000000..ddacff7d3
--- /dev/null
+++ b/src/arome/ext/aroini_micro.F90
@@ -0,0 +1,198 @@
+!     ######spl
+SUBROUTINE AROINI_MICRO(KULOUT,PTSTEP,LDWARM,CMICRO,KSPLITR,CCSEDIM,LDCRIAUTI,&
+              PCRIAUTI,PT0CRIAUTI,PCRIAUTC,PTSTEP_TS, CCSNOWRIMING, PMRSTEP, KMAXITER, &
+              LDFEEDBACKT, LDEVLIMIT, LDNULLWETG, LDWETGPOST, LDNULLWETH, LDWETHPOST, &
+              PFRACM90, LDCONVHG, CCSUBG_RC_RR_ACCR, CCSUBG_RR_EVAP, CCSUBG_PR_PDF, &
+              LDCRFLIMIT, CCFRAC_ICE_ADJUST, PSPLIT_MAXCFL,&
+              CCFRAC_ICE_SHALLOW_MF, LDSEDIM_AFTER,LDDEPOSC,PVDEPOSC, PFRMIN,&
+              LDDEPSG,PRDEPSRED,PRDEPGRED)
+
+USE PARKIND1, ONLY : JPRB
+USE YOMHOOK , ONLY : LHOOK, DR_HOOK
+!**** *INI_MICRO*   - Initialize common meso_NH MODD_ used in microphysics for AROME
+
+!     Purpose.
+!     --------
+!           Initialize 
+!           MODD_RAIN_ICE_DESCR, MODD_RAIN_ICE_PARAM and MODD_PARAM_ICE  
+!           parameters used in AROME microphysics 
+
+!**   Interface.
+!     ----------
+!        *CALL* *INI_MICRO (KULOUT,KSTEP,KSPLITR)
+
+!        Explicit arguments :
+!        --------------------
+!        KULOUT : Logical unit for the output
+!        PTSTEP  : Time step
+!        KSPLITR : Number of small time step interation for rain sedimentation 
+!        LDWARM : value assigned to LWARM       
+
+!        Implicit arguments :
+!        --------------------
+!        
+
+!     Method.
+!     -------
+!        See documentation
+
+!     Externals.
+!     ----------
+
+!     Reference.
+!     ----------
+!        Documentation AROME 
+
+!     Author.
+!     -------
+!        Y. Seity 
+
+!     Modifications.
+!     --------------
+!        Original : 03-12-12
+!        05-08-25 Kovacic  added LDWARM
+!        Jan 2015 S. Riette: LFEEDBACKT, LEVLIMIT, LNULLWETG, LWETGPOST, CSNOWRIMING,
+!                            XFRACM90, NMRSITER, XMRSTEP, LSIMULSG, XTSTEP_TS
+!                            LNULLWETH, LWETHPOST added
+!        Oct 2016 S. Riette: LDCRFLIMIT, CCFRAC_ICE_ADJUST
+!                            and CCFRAC_ICE_SHALLOW_MF added
+!        Dec 2020 Y. Seity : Add Fog deposition term
+!        Jan 2020 C.Wittmann: Add LDDEPSG,PRDEPSRED,PRDEPGRED
+!     ------------------------------------------------------------------
+
+USE MODD_RAIN_ICE_DESCR
+USE MODD_RAIN_ICE_PARAM
+USE MODD_PARAM_ICE
+USE MODD_PARAM_C1R3
+
+USE MODI_INI_RAIN_ICE
+USE MODI_INI_TIWMX
+
+IMPLICIT NONE
+! -----------------------------------------------------------------------
+!     DUMMY INTEGER SCALARS
+INTEGER, INTENT (IN) :: KULOUT
+REAL, INTENT (IN) :: PTSTEP
+LOGICAL, INTENT (IN) :: LDWARM
+CHARACTER(4), INTENT (IN) :: CMICRO 
+CHARACTER(4), INTENT (IN) :: CCSEDIM
+INTEGER, INTENT (OUT) :: KSPLITR
+LOGICAL, INTENT (IN) :: LDCRIAUTI
+REAL, INTENT (IN) :: PCRIAUTI
+REAL, INTENT (IN) :: PT0CRIAUTI
+REAL, INTENT (IN) :: PCRIAUTC
+REAL, INTENT (IN) :: PTSTEP_TS
+CHARACTER(4), INTENT (IN) :: CCSNOWRIMING
+REAL, INTENT (IN) :: PMRSTEP
+INTEGER, INTENT (IN) :: KMAXITER
+LOGICAL, INTENT (IN) :: LDFEEDBACKT
+LOGICAL, INTENT (IN) :: LDEVLIMIT
+LOGICAL, INTENT (IN) :: LDNULLWETG
+LOGICAL, INTENT (IN) :: LDWETGPOST
+LOGICAL, INTENT (IN) :: LDNULLWETH
+LOGICAL, INTENT (IN) :: LDWETHPOST
+REAL, INTENT (IN) :: PFRACM90
+LOGICAL, INTENT (IN) :: LDCONVHG
+CHARACTER(LEN=80), INTENT(IN) :: CCSUBG_RC_RR_ACCR
+CHARACTER(LEN=80), INTENT(IN) :: CCSUBG_RR_EVAP
+CHARACTER(LEN=80), INTENT(IN) :: CCSUBG_PR_PDF
+LOGICAL, INTENT (IN) :: LDCRFLIMIT
+CHARACTER(LEN=1), INTENT(IN) :: CCFRAC_ICE_ADJUST
+REAL, INTENT (IN) :: PSPLIT_MAXCFL
+CHARACTER(LEN=1), INTENT(IN) :: CCFRAC_ICE_SHALLOW_MF
+LOGICAL, INTENT (IN) :: LDSEDIM_AFTER
+LOGICAL, INTENT (IN) :: LDDEPOSC
+REAL, INTENT(IN):: PVDEPOSC
+REAL, OPTIONAL, INTENT (IN) :: PFRMIN(40)
+LOGICAL, INTENT (IN) :: LDDEPSG 
+REAL, INTENT (IN) :: PRDEPSRED, PRDEPGRED
+
+!-----------------------------------------------------------------------
+!    LOCAL VARIABLES
+REAL :: ZCRI0, ZTCRI0    
+! -----------------------------------------------------------------------
+!        1. Set implicit default values for MODD_PARAM_ICE
+
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('AROINI_MICRO',0,ZHOOK_HANDLE)
+LWARM=LDWARM
+CPRISTINE_ICE='PLAT'
+CPRISTINE_ICE_C1R3='PLAT'
+CHEVRIMED_ICE_C1R3='GRAU'
+CSEDIM=CCSEDIM
+CSUBG_RC_RR_ACCR=CCSUBG_RC_RR_ACCR
+CSUBG_RR_EVAP=CCSUBG_RR_EVAP
+CSUBG_PR_PDF=CCSUBG_PR_PDF
+LFEEDBACKT=LDFEEDBACKT ! When .TRUE. feed back on temperature is taken into account
+LEVLIMIT=LDEVLIMIT   ! When .TRUE. water vapour pressure is limited by saturation
+LNULLWETG=LDNULLWETG  ! When .TRUE. graupel wet growth is activated with null rate (to allow water shedding)
+LWETGPOST=LDWETGPOST  ! When .TRUE. graupel wet growth is activated with positive temperature (to allow water shedding)
+LNULLWETH=LDNULLWETH  ! Same as LNULLWETG but for hail
+LWETHPOST=LDWETHPOST  ! Same as LWETGPOST but for hail
+CSNOWRIMING=CCSNOWRIMING ! OLD or M90 for Murakami 1990 formulation
+XFRACM90=PFRACM90 ! Fraction used for the Murakami 1990 formulation
+NMAXITER=KMAXITER ! Maximum number of iterations for mixing ratio  or time splitting
+XMRSTEP=PMRSTEP ! maximum mixing ratio step for mixing ratio splitting
+LCONVHG=LDCONVHG ! TRUE to allow the conversion from hail to graupel
+LCRFLIMIT=LDCRFLIMIT !True to limit rain contact freezing to possible heat exchange
+CFRAC_ICE_ADJUST=CCFRAC_ICE_ADJUST !Choice of solid/liquid partition in adjustements
+CFRAC_ICE_SHALLOW_MF=CCFRAC_ICE_SHALLOW_MF !Choice of solid/liquid partition in shallow_mf
+XSPLIT_MAXCFL=PSPLIT_MAXCFL
+LSEDIM_AFTER=LDSEDIM_AFTER ! sedimentation done before or after microphysics
+!
+XTSTEP_TS=PTSTEP_TS ! Approximative time step for time-splitting (0 for no time-splitting)
+!
+!        2. Set implicit default values for MODD_RAIN_ICE_DESCR 
+!                     et MODD_RAIN_ICE_PARAM
+
+CALL INI_RAIN_ICE (KULOUT, PTSTEP, 20.,KSPLITR,CMICRO)
+CALL INI_TIWMX
+
+IF(PRESENT(PFRMIN))THEN
+   XFRMIN = PFRMIN
+   WRITE(UNIT=KULOUT,FMT='('' UPDATED VALUES OF XFRMIN FROM NAMPARAR :'')')
+   WRITE(UNIT=KULOUT,FMT='('' XFRMIN = '',40E10.3)') XFRMIN
+   IF(XFRMIN(16) > 0.) THEN
+      CALL INI_SNOW(KULOUT) ! Recalculate snow parameters :  XCCS = XFRMIN(16),XCXS = XFRMIN(17)
+   ENDIF
+ENDIF
+
+!update values from namparar
+LDEPOSC=LDDEPOSC
+XVDEPOSC=PVDEPOSC
+IF (LDCRIAUTI) THEN
+
+  XCRIAUTI=PCRIAUTI
+  XCRIAUTC=PCRIAUTC
+  XT0CRIAUTI=PT0CRIAUTI
+  !second point to determine 10**(aT+b) law
+  ZTCRI0=-40.0
+  ZCRI0=1.25E-6
+  
+  XBCRIAUTI=-( LOG10(XCRIAUTI) - LOG10(ZCRI0)*PT0CRIAUTI/ZTCRI0 )&
+                   *ZTCRI0/(XT0CRIAUTI-ZTCRI0)
+  XACRIAUTI=(LOG10(ZCRI0)-XBCRIAUTI)/ZTCRI0
+  
+  !        3. Write NSPLITR,updated CRIAUTI  
+      
+  WRITE(UNIT=KULOUT,FMT='('' NSPLITR = '',I8.4)')KSPLITR
+  WRITE(UNIT=KULOUT,FMT='('' UPDATED VALUES FROM NAMPARAR :'')')
+  WRITE(UNIT=KULOUT,FMT='('' LCRIAUTI = '',L5)')LDCRIAUTI
+  WRITE(UNIT=KULOUT,FMT='('' XCRIAUTI = '',E13.6)')XCRIAUTI
+  WRITE(UNIT=KULOUT,FMT='('' XACRIAUTI = '',E13.6)')XACRIAUTI
+  WRITE(UNIT=KULOUT,FMT='('' XBCRIAUTI = '',E13.6)')XBCRIAUTI
+  WRITE(UNIT=KULOUT,FMT='('' XT0CRIAUTI = '',E13.6)')XT0CRIAUTI
+  WRITE(UNIT=KULOUT,FMT='('' XCRIAUTC = '',E13.6)')XCRIAUTC
+  WRITE(UNIT=KULOUT,FMT='('' XVDEPOSC = '',E13.6)')XVDEPOSC
+  WRITE(UNIT=KULOUT,FMT='('' LDEPOSC = '',L5)')LDEPOSC
+ENDIF
+
+XRDEPSRED=PRDEPSRED
+XRDEPGRED=PRDEPGRED
+
+
+! -----------------------------------------------------------------------
+
+IF (LHOOK) CALL DR_HOOK('AROINI_MICRO',1,ZHOOK_HANDLE)
+RETURN
+END SUBROUTINE AROINI_MICRO
diff --git a/src/arome/ext/aroini_micro.h b/src/arome/ext/aroini_micro.h
new file mode 100644
index 000000000..bf6d1d18b
--- /dev/null
+++ b/src/arome/ext/aroini_micro.h
@@ -0,0 +1,46 @@
+INTERFACE
+SUBROUTINE AROINI_MICRO(KULOUT,PTSTEP,LDWARM,CMICRO,KSPLITR,CCSEDIM,LDCRIAUTI,&
+ &         PCRIAUTI,PT0CRIAUTI,PCRIAUTC,PTSTEP_TS,CCSNOWRIMING, PMRSTEP,KMAXITER,&
+ &         LDFEEDBACKT, LDEVLIMIT, LDNULLWETG, LDWETGPOST, LDNULLWETH, LDWETHPOST, &
+ &         PFRACM90, LDCONVHG, CCSUBG_RC_RR_ACCR, CCSUBG_RR_EVAP, CCSUBG_PR_PDF, &
+ &         LDCRFLIMIT, CCFRAC_ICE_ADJUST, PSPLIT_MAXCFL,&
+ &         CCFRAC_ICE_SHALLOW_MF, LDSEDIC_AFTER,LDDEPOSC, PVDEPOSC, PFRMIN,&
+ &         LDDEPSG,PRDEPSRED,PRDEPGRED)
+USE PARKIND1  ,ONLY : JPIM     ,JPRB
+INTEGER(KIND=JPIM), INTENT (IN) :: KULOUT
+REAL(KIND=JPRB), INTENT (IN) :: PTSTEP
+LOGICAL, INTENT (IN) :: LDWARM
+CHARACTER (LEN=4), INTENT (IN) :: CMICRO
+CHARACTER(4), INTENT (IN) :: CCSEDIM
+INTEGER(KIND=JPIM), INTENT (OUT) :: KSPLITR
+LOGICAL, INTENT (IN) :: LDCRIAUTI
+REAL(KIND=JPRB), INTENT (IN) :: PCRIAUTI
+REAL(KIND=JPRB), INTENT (IN) :: PT0CRIAUTI
+REAL(KIND=JPRB), INTENT (IN) :: PCRIAUTC
+REAL(KIND=JPRB), INTENT (IN) :: PTSTEP_TS
+CHARACTER(4), INTENT (IN) :: CCSNOWRIMING
+REAL(KIND=JPRB), INTENT (IN) :: PMRSTEP
+INTEGER(KIND=JPIM), INTENT (IN) :: KMAXITER
+LOGICAL, INTENT (IN) :: LDFEEDBACKT
+LOGICAL, INTENT (IN) :: LDEVLIMIT
+LOGICAL, INTENT (IN) :: LDNULLWETG
+LOGICAL, INTENT (IN) :: LDWETGPOST
+LOGICAL, INTENT (IN) :: LDNULLWETH
+LOGICAL, INTENT (IN) :: LDWETHPOST
+REAL(KIND=JPRB), INTENT (IN) :: PFRACM90
+LOGICAL, INTENT (IN) :: LDCONVHG
+CHARACTER(LEN=80), INTENT(IN) :: CCSUBG_RC_RR_ACCR
+CHARACTER(LEN=80), INTENT(IN) :: CCSUBG_RR_EVAP
+CHARACTER(LEN=80), INTENT(IN) :: CCSUBG_PR_PDF
+LOGICAL, INTENT (IN) :: LDCRFLIMIT
+CHARACTER(LEN=1), INTENT(IN) :: CCFRAC_ICE_ADJUST
+REAL(KIND=JPRB), INTENT (IN) :: PSPLIT_MAXCFL
+CHARACTER(LEN=1), INTENT(IN) :: CCFRAC_ICE_SHALLOW_MF
+LOGICAL, INTENT (IN) :: LDSEDIC_AFTER
+LOGICAL, INTENT (IN) :: LDDEPOSC
+REAL(KIND=JPRB), INTENT (IN) :: PVDEPOSC
+REAL(KIND=JPRB), OPTIONAL, INTENT (IN) :: PFRMIN(40)
+LOGICAL, INTENT (IN) :: LDDEPSG
+REAL(KIND=JPRB), INTENT (IN) :: PRDEPSRED, PRDEPGRED
+END SUBROUTINE AROINI_MICRO
+END INTERFACE
diff --git a/src/arome/ext/dead_code/aro_icecld.F90 b/src/arome/ext/dead_code/aro_icecld.F90
deleted file mode 100644
index 95b508910..000000000
--- a/src/arome/ext/dead_code/aro_icecld.F90
+++ /dev/null
@@ -1,217 +0,0 @@
-SUBROUTINE ARO_ICECLD  &
-!   Input :
-     & ( PP,PZ,PDZ,PT,PR,PPBLH,PWCLD,XW2D, &
-!   Output :
-     &  SIFRC,SSIO,SSIU,W2D,RSI)
-
-
-  USE PARKIND1, ONLY : JPRB
-  USE YOMHOOK , ONLY : LHOOK, DR_HOOK
-  USE MODD_CST,ONLY : XCPD,XCPV,XLVTT,XLSTT,XG,XRD,XTT,XMD,XMV,XEPSILO
-  IMPLICIT NONE
-!-----------------------------------------------------------------------
-!
-! Purpose:
-! calculate subgridscale fraction of supersaturation with respect to ice.
-! Method:
-! Assume a linear distubution of relative humidity and let the variability 
-! of humidity be a function of model level thickness.
-! (Also a function of of humidity itself in the boundary layer)
-!     Interface:    subroutine ARO_ICECLD  is called
-!     ------------  from subroutine 'rain_ice'
-!
-!     variable        type         content
-!     ========        ====         =======
-!
-!     INPUT  arguments  (arguments d'entree)
-!----------------------------------------------
-!     PP        : pressure at model level (Pa)
-!     PZ        : model level height (m)
-!     PDZ       : model level thickness (m)
-!     PT        : temperature (K)
-!     PR        : model level humidity mixing ratio (kg/kg)
-!     PPBLH     : plantetary layer height (m) (negative value means unknown)
-!     PWCLD     : water and / mixed phase cloud cover (negative means unknown)
-!     XW2D      : quota between ice crystal concentration between dry and wet
-!                 part of a gridbox
-
-!     OUTPUT  arguments  (arguments d'sortie)
-!---------------------------------------------
-!     SIFRC     : subgridscale fraction with supersaturation with respect to ice.
-!     SSIO      : Super-saturation with respect to ice in the  
-!                 supersaturated fraction
-!     SSIU      : Sub-saturation with respect to ice in the sub-saturated 
-!                 fraction
-!     W2D       : Factor used to get consistncy between the mean value of 
-!                 the gridbox and parts of the gridbox 
-!     RSI       : Saturation mixing ratio over ice
-
-
-
-
-REAL,  INTENT(IN)  ::      PP
-REAL,  INTENT(IN)  ::      PZ
-REAL,  INTENT(IN)  ::      PDZ
-REAL,  INTENT(IN)  ::      PT
-REAL,  INTENT(IN)  ::      PR
-REAL,  INTENT(IN)  ::      PPBLH
-REAL,  INTENT(IN)  ::      PWCLD
-REAL,  INTENT(IN)  ::      XW2D
-
-!     OUTPUT  arguments  (arguments d'sortie)
-!---------------------------------------------
-REAL,  INTENT(OUT) ::      SIFRC
-REAL,  INTENT(OUT) ::      SSIO
-REAL,  INTENT(OUT) ::      SSIU
-REAL,  INTENT(OUT) ::      W2D
-REAL,  INTENT(OUT) ::      RSI
-!     Working variables:
-
- REAL  :: ZSIGMAX,ZSIGMAY,ZSIGMAZ,ZFICE,ZXDIST, ZYDIST,&
-      & ZRSW,ZRHW,ZRHIN,ZDRHDZ,ZZ,ZRHDIST ,ZRHLIM, &
-      & ZRHDIF,ZWCLD ,ZI2W,ZRHLIMICE,ZRHLIMINV,ZA,ZRHI
-
-!     ==================================================================
-!     1. Declarations.
-!     ==================================================================
-!     1.1 MODULES USED
-!-----------------------------------------------------------------------
- REAL AROQSATMX
-
-REAL(KIND=JPRB) :: ZHOOK_HANDLE
-IF (LHOOK) CALL DR_HOOK('ARO_ICECLD',0,ZHOOK_HANDLE)
-
-SIFRC = 0.
-ZFICE = 0.
-ZRSW= AROQSATMX(PP,PT,ZFICE)
-ZRHW= PR/ZRSW
-ZFICE=1.
-RSI= AROQSATMX(PP,PT,ZFICE)
-ZRHI= PR/RSI
-ZI2W = ZRSW/RSI
-SSIU=ZRHI
-SSIO=SSIU
-W2D  = 1.
-
-IF(PT>XTT.OR. PR<=0.)THEN
-   SSIU=SSIU-1
-   SSIO=SSIU
-   IF(PWCLD>=0.)SIFRC=PWCLD
-   IF (LHOOK) CALL DR_HOOK('ARO_ICECLD',1,ZHOOK_HANDLE)
-   RETURN
-ENDIF
-
-ZSIGMAX=3.E-4         ! assumed rh variation in x axis direction
-ZFICE=0.                    ! fraction of ice
-ZSIGMAY=ZSIGMAX            ! assumed rh variation in y axis direction
-ZSIGMAZ=1.6E-2 ! t5
-
-!ZXDIST=MAX(0.10,DTHETA)*110000.
-!ZXDIST=DTHETA*110000.
-ZXDIST=2500. 
-   ! gridsize in  x axis (m) Avoid too low
-   ! since the model has a tendency to become
-   ! drier at high horizontal resolution
-   ! due to stronger vertical velocities.
-ZYDIST=ZXDIST          ! gridsize in  y axis (m)
-
-
-
-
-ZRHIN = MAX(0.05, MIN(1.,PR/ZRSW))
-
-ZDRHDZ=ZRHIN*XG /(PT*XRD)*  &
-              &     ( XEPSILO*XLVTT/(XCPD*PT) -1.) ! correct
-!              &     ( XEPSILO*XLSTT/(XCPD*PT) -1.)  ! incorrect but currently used
-!          more exact
-!          assumed rh variation in the z axis (rh/m) in the pbl .
-!          Also possible to just use
-!         zdrhdz=4.2e-4_jprb ! rh/m !
-ZZ=0.
-
-
-IF(PPBLH < 0. )THEN ! Assume boundary layer height is not available 
-   ZZ= MIN(1.,MAX(0.,PZ*0.001))
-ELSE
-   IF(PZ > 35. .AND. PZ > PPBLH)ZZ= 1.
-ENDIF
-
-!        1.6e-2 rh/m means variations is of order 0.5 for a 1km dept.
-!        sigmaz=4e-2 ! EO 140 lev.
-
-
-!        Compute rh-variation is x,y,z direction as approxmately
-!        independent, exept for the z variation in the pbl, where rh is
-!        assumed to be fairly constantly increasing with height
-if(ZXDIST*ZSIGMAX**2 + ZYDIST*ZSIGMAY**2 +  &
-     &           (1.-ZZ)* (PDZ* ZDRHDZ)**2 + ZZ*PDZ* ZSIGMAZ**2 < 0.)then
-write(*,*)'in ARO_ICECLD: PDZ ZDRHDZ,expression=',PDZ, ZDRHDZ&
-& ,ZXDIST*ZSIGMAX**2 + ZYDIST*ZSIGMAY**2 +  &
-     &           (1.-ZZ)* (PDZ* ZDRHDZ)**2 + ZZ*PDZ* ZSIGMAZ**2 
-endif
-ZRHDIST = SQRT( ZXDIST*ZSIGMAX**2 + ZYDIST*ZSIGMAY**2 +  &
-     &           (1.-ZZ)* (PDZ* ZDRHDZ)**2 + ZZ*PDZ* ZSIGMAZ**2)
-!         z-variation of rh in the pbl    z-variation of rh outside the pbl
-!         Safety for very coarse vertical resolution:
-IF(ZZ > 0.1) ZRHDIST = ZRHDIST/(1.+ZRHDIST)
-
-!!!! Note ZRHDIST is with respect to water ! !!!!!!!!!!!!
-
-
-ZRHLIM = MAX(0.5, MIN(0.99,1. - 0.5*ZRHDIST))
-
-
-IF(PWCLD < 0.)THEN
-   !  Assume water/mixed-phase cloud cover from e.g. 
-   ! statistical cloud scheme is not avialabe
-   ZRHDIF = (1. - ZRHW)/(1.0-ZRHLIM)
-   ZRHDIF =  1. - SQRT(MAX(0.,ZRHDIF))
-   ZWCLD = MIN(1.,MAX(ZRHDIF,0.0))
-ELSE
-   ZWCLD = PWCLD
-! possible to backwards compute a critical relative humity consitent with 
-!  input cloudcover:
-!   IF(PWCLD < 0.99 .AND. PWCLD > 0.01) ZRHLIM= 1. - (1.-ZRHW)/(1.-PWCLD)**2
-ENDIF
-
-SIFRC = ZWCLD
-
-!              relation rhlim with respect to water to that of ice:
-!ZRHLIMICE = MAX(ZRHDMIN*ZI2W,1.+ ZI2W*( ZRHLIM - 1.))
-ZRHLIMICE = 1.+ ZI2W*( ZRHLIM - 1.)
-
-IF(ZRHLIM <= 0.999)THEN
-
-   !              compute a 1/(1-rhlim) constistant with  lstmp(i,k):
-   ZRHLIMINV = 1./(1. - ZRHLIMICE)
-   ZRHDIF = (ZRHI - ZRHLIMICE)*ZRHLIMINV
-
-   IF(ZWCLD==0.)THEN
-      SIFRC = MIN(1.,0.5*MAX(0.,ZRHDIF))
-   ELSE
-      ZA =1. -  1./ZI2W
-      SIFRC =MIN(1.,ZA*0.5/ (1. - ZRHLIM))
-      SIFRC = MIN(1.,ZWCLD + SIFRC)
-   ENDIF
-ENDIF
-
-
-
-IF(SIFRC > 0.01) THEN
-   SSIU = SIFRC + ZRHLIMICE*(1.-SIFRC)
-   SSIO = (ZRHI - (1.- SIFRC)*SSIU)/SIFRC
-ELSE
-   SIFRC=0.! to aviod mismatch with output variables
-   ZA = MIN(0.,ZRHI-ZRHLIMICE)
-   SSIU = MAX(0.,SIFRC + ZRHLIMICE*(1.-SIFRC) + 2*ZA )
-ENDIF
-
-
-! Transform from relative humidity to degree of saturation:
-SSIU = SSIU - 1.
-SSIO = SSIO - 1.
-
-IF (XW2D > 1.) W2D = 1./(1. - SIFRC + XW2D*SIFRC)
-
-IF (LHOOK) CALL DR_HOOK('ARO_ICECLD',1,ZHOOK_HANDLE)
-END SUBROUTINE ARO_ICECLD
diff --git a/src/arome/ext/dead_code/aro_tiwmx.F90 b/src/arome/ext/dead_code/aro_tiwmx.F90
deleted file mode 100644
index 55a335c81..000000000
--- a/src/arome/ext/dead_code/aro_tiwmx.F90
+++ /dev/null
@@ -1,123 +0,0 @@
-FUNCTION ARO_TIWMX(P,T,QR,FICE,QRSN,RS,EPS)
-
-!     Purpose:  (*)
-!     The fuction arotiwmx returns the wet bulb temperature, but also the
-!     corresponding saturation specific humidity as an output parameter.
-!     -------------------------------------------------------------------
-!     Computation of wet bulb temperature.
-!     TIW is found iteratively. Note that Q is used instead of WV.
-!     Converges VERY quickly. EPS is the threshold value for
-!     TIW(n)-TIW(n-1) at wich the iteration is interupted. (n is
-!     iteration number).Modified in July 1988 by Stefan Gollvik
-!     Convereted to new fortran standard in Dec. 2006 by Karl-Ivar Ivarsson.
-!     Convereted to AROME in 2014 by Karl-Ivar Ivarsson.
-!     INTERFACE  :  the function is intended to be used everywhere.
-!     INPUT  arguments  (arguments d'entree)
-!     -----------------------------------------------------
-!     P        : pressure  (Pa)
-!     T        : temperature (K)
-!     QR       : mixing ratio humidity (kg/Kg)
-!     FICE     : fraction of ice (0 to 1)
-!     EPS      : The value determens the accuracy of the output value. 0.1
-!              : is suffient in most cases. Low value means high accuracy but
-!              : also high computational cost.
-
-!     OUTPUT  arguments  (arguments d'sortie)
-!     -----------------------------------------------------
-!     RS        : saturation mixing ratio (fice determines if it is over ice or water)
-!                
-!     QRSN     : saturation mixing ratio for the wet bulb temperature.
-!                (Kg/Kg)
-!     ( the function itself is the wet bulb temperature (K) )
-
-!     Work  variables  :
-!     -----------------------------------------------------
-!      f        : temporary variable , temperature (K)
-!      dfdt     : temporary variable   (K/K)
-!      t2       : temperature used in iteration (K)
-!      thigh    : temperature ( t2 + EPS K )
-!      tlow     : temperature ( t2 - EPS K )
-!      dt       : temperature residual (K)
-!      dqsdt    : approximative d(qsat)/d(T) in iteration (1/K)
-!      b        : (latent heat)/(heat capacity for dry air)  (K)
-!      iter     : iteration number
-
-!     1. Declarations.
-!     ==================================================================
-!     1.1 MODULES USED
-  USE MODD_CST,ONLY : XCPD,XCPV,XLVTT,XLSTT,XRD,XTT,XEPSILO, &
-       &    XALPW,XBETAW,XGAMW,XALPI,XBETAI,XGAMI
-  USE PARKIND1, ONLY : JPRB 
-  USE YOMHOOK , ONLY : LHOOK, DR_HOOK
-  IMPLICIT NONE
-
-!  Function name :
-  REAL                        :: ARO_TIWMX
-
-!  Input Arguments
-  REAL,  INTENT(IN)           ::  P,T,QR,FICE,EPS
-
-!  Output Arguments
-  REAL,  INTENT(OUT)          :: QRSN,RS
-
-!  Work variables :
-  REAL :: F,DFDT,T2,DT,QSN,DQSDT,B
-  REAL :: ZB,ZG,ZES,ZDESDT
-  INTEGER :: ITER
-  REAL(KIND=JPRB) :: ZHOOK_HANDLE
-  IF (LHOOK) CALL DR_HOOK('ARO_TIWMX',0,ZHOOK_HANDLE)
-
-  T2 = T
-!!  Q = QR !approximation
-
-  B = ( XLVTT*(1.-FICE) + FICE*XLSTT )/XCPD
-
-  ARO_TIWMX = T2
-  DO ITER=1,10
-     ZB = (XBETAI*FICE + XBETAW*(1.-FICE))/T2
-     ZG = XGAMI*FICE + XGAMW*(1.-FICE)
-     ZES = EXP(XALPI*FICE + XALPW*(1.-FICE) - ZB - ZG*ALOG(T2))
-     ZDESDT = ZES*(ZB - ZG)/T2
-     IF(ZES >= P)THEN
-        QSN = 1.
-        DQSDT = 0.
-     ELSE
-        QSN = XEPSILO*ZES/(P-ZES)
-        DQSDT = QSN*ZDESDT*( 1.0/ZES + 1.0/(P-ZES) )
-     ENDIF
-     IF ( ITER == 1 ) RS = QSN
-     F = T2 - T + B*(QSN - QR)
-     DFDT = 1. + B*DQSDT
-     DT = -F / DFDT
-     T2 = T2 + DT
-     IF(ABS(DT) <= EPS)THEN
-        ARO_TIWMX = T2
-        QSN = MIN(1.,QSN+DT*DQSDT)
-        QRSN = QSN ! approximation
-        IF (LHOOK) CALL DR_HOOK('ARO_TIWMX',1,ZHOOK_HANDLE)
-        RETURN
-     ENDIF
-  ENDDO
-  IF (LHOOK) CALL DR_HOOK('ARO_TIWMX',1,ZHOOK_HANDLE)
-END FUNCTION ARO_TIWMX
-!!!!!!!!!!!!
-FUNCTION AROQSATMX(P,T,FICE)
-  USE MODD_CST,ONLY : XALPW,XBETAW,XGAMW,XALPI,XBETAI,XGAMI,XTT,XEPSILO 
-  IMPLICIT NONE
-  REAL ZES,ZQS,P,T,FICE,&
-       &AROQSATMX
-
-  ZES = EXP(XALPI*FICE + XALPW*(1.-FICE) - &
-       & (XBETAI*FICE + XBETAW*(1.-FICE))/T -  &
-       & (XGAMI*FICE + XGAMW*(1.-FICE))*ALOG(T))
-
-  IF(ZES >= P)THEN ! temp > boiling point, condensation not possible.
-                   ! Then this function lacks physical meaning, 
-                   ! here set to one
-     ZQS=1.
-  ELSE
-!     ZQS=0.622*ZES/(P-0.378*ZES) !q
-     ZQS=XEPSILO*ZES/(P-ZES) !r
-  ENDIF
-  AROQSATMX=ZQS
-END FUNCTION AROQSATMX
diff --git a/src/arome/ext/dead_code/modi_aro_icecld.F90 b/src/arome/ext/dead_code/modi_aro_icecld.F90
deleted file mode 100644
index 10cf08aa0..000000000
--- a/src/arome/ext/dead_code/modi_aro_icecld.F90
+++ /dev/null
@@ -1,24 +0,0 @@
-!     ######spl
-       MODULE MODI_ARO_ICECLD
-!      ####################
-!
-INTERFACE
-SUBROUTINE ARO_ICECLD  &
-     & ( PP,PZ,PDZ,PT,PR,PPBLH,PWCLD,XW2D, &
-     &  SIFRC,SSIO,SSIU,W2D,RSI)
-REAL,  INTENT(IN)  ::      PP
-REAL,  INTENT(IN)  ::      PZ
-REAL,  INTENT(IN)  ::      PDZ
-REAL,  INTENT(IN)  ::      PT
-REAL,  INTENT(IN)  ::      PR
-REAL,  INTENT(IN)  ::      PPBLH
-REAL,  INTENT(IN)  ::      PWCLD
-REAL,  INTENT(IN)  ::      XW2D
-REAL,  INTENT(OUT) ::      SIFRC
-REAL,  INTENT(OUT) ::      SSIO
-REAL,  INTENT(OUT) ::      SSIU
-REAL,  INTENT(OUT) ::      W2D
-REAL,  INTENT(OUT) ::      RSI
-END SUBROUTINE ARO_ICECLD
-END INTERFACE
-END MODULE MODI_ARO_ICECLD
diff --git a/src/arome/ext/dead_code/modi_aro_tiwmx.F90 b/src/arome/ext/dead_code/modi_aro_tiwmx.F90
deleted file mode 100644
index 1f192046a..000000000
--- a/src/arome/ext/dead_code/modi_aro_tiwmx.F90
+++ /dev/null
@@ -1,11 +0,0 @@
-!     ######spl
-       MODULE MODI_ARO_TIWMX
-!      ####################
-!
-INTERFACE
-FUNCTION ARO_TIWMX(P,T,QR,FICE,QRSN,RS,EPS)
-  REAL,  INTENT(IN)           ::  P,T,QR,FICE,EPS
-  REAL,  INTENT(OUT)          :: QRSN,RS
-END FUNCTION ARO_TIWMX
-END INTERFACE
-END MODULE MODI_ARO_TIWMX
diff --git a/src/arome/ext/namparar.nam.h b/src/arome/ext/namparar.nam.h
index 6f667ceae..c3c90b342 100644
--- a/src/arome/ext/namparar.nam.h
+++ b/src/arome/ext/namparar.nam.h
@@ -1,9 +1,10 @@
 !    ------------------------------------------------------------------
 NAMELIST/NAMPARAR/LOSUBG_COND,CSUBG_AUCV_RC,CSUBG_AUCV_RI,LOSIGMAS,NSWB_MNH,NPRINTFR,LSQUALL,&
         &NREFROI1,NREFROI2,VSQUALL,NPTP,LDIAGWMAX,NDIAGWMAX,CMICRO,CSEDIM,&
-        &LAROBU_ENABLE,CMF_UPDRAFT,CMF_CLOUD,LMIXUV,LLCRIT,LTOTPREC,LOSEDIC,&
-        &VSIGQSAT,XLINI,LOLSMC,LOTOWNC,LOCND2,RADGR,RADSN,LHARATU,&
-        &LGRSN,NPROMICRO,&
+        &LAROBU_ENABLE,CMF_UPDRAFT,CMF_CLOUD,LMIXUV,LLCRIT,LTOTPREC,&
+        &LTOTPRECL,LHGT_QS,LOSEDIC,&
+        &VSIGQSAT,XLINI,LOLSMC,LOTOWNC,LOCND2,LKOGAN,LMODICEDEP,&
+        &LICERAD,RFRMIN,RADGR,RADSN,LSTATNW,LHARATU,NPROMICRO,&
         &XALP_PERT,XABUO,XBENTR,XBDETR,XCMF,XENTR_MF,XCRAD_MF,XENTR_DRY,&
         &XDETR_DRY,XDETR_LUP,XKCF_MF,XKRC_MF,XTAUSIGMF,XPRES_UV,XFRAC_UP_MAX,&
         &XALPHA_MF,XSIGMA_MF,XA1,XB,XC,XBETA1,LTHETAS,&
@@ -13,5 +14,6 @@ NAMELIST/NAMPARAR/LOSUBG_COND,CSUBG_AUCV_RC,CSUBG_AUCV_RI,LOSIGMAS,NSWB_MNH,NPRI
         &LFEEDBACKT,LEVLIMIT,LNULLWETG,LWETGPOST,LNULLWETH,LWETHPOST, &
         &XFRACM90, LCONVHG, LCRFLIMIT, &
         &CFRAC_ICE_ADJUST, XSPLIT_MAXCFL, CFRAC_ICE_SHALLOW_MF, LSEDIM_AFTER,&
-        &LDEPOSC, XVDEPOSC, CCONDENS, CLAMBDA3, CSUBG_MF_PDF
+        &LDEPOSC, XVDEPOSC, CCONDENS, CLAMBDA3, CSUBG_MF_PDF,&
+        &LDEPSG,RDEPSRED,RDEPGRED
 !       ------------------------------------------------------------------
diff --git a/src/arome/ext/spp_mod_type.F90 b/src/arome/ext/spp_mod_type.F90
new file mode 100644
index 000000000..0758cb3d9
--- /dev/null
+++ b/src/arome/ext/spp_mod_type.F90
@@ -0,0 +1,122 @@
+MODULE SPP_MOD_TYPE
+
+ USE MODE_MSG,            ONLY: PRINT_MSG, NVERB_FATAL
+
+ TYPE TSPP_CONFIG_TYPE
+
+  INTEGER :: MP_SELF=-1
+
+  LOGICAL :: LPERT=.FALSE.                
+  LOGICAL :: LPRINT=.TRUE.                
+  LOGICAL :: LLNN_MEAN1=.FALSE.
+  LOGICAL :: LPERT_UNIFORM=.FALSE.
+
+  REAL :: CMPERT
+  REAL :: UNIFORM_OFFSET
+  REAL :: SDEV
+  REAL :: CLIP(2)
+  REAL, POINTER :: PGP2DSPP(:) => NULL(), &
+                   PTRNDIAG(:) => NULL()
+
+  CHARACTER(LEN=20) :: CTAG = '#'
+
+ END TYPE TSPP_CONFIG_TYPE
+
+ TYPE ALL_SPP_VARS
+
+  ! Gather all parameter holders for convenience
+
+  TYPE(TSPP_CONFIG_TYPE) :: YSPP_RADGR,YSPP_RADSN, &
+  YSPP_CLDDPTH,YSPP_CLDDPTHDP, &
+  YSPP_RFAC_TWOC,YSPP_RZC_H,YSPP_RZL_INF, &
+  YSPP_PSIGQSAT,YSPP_ICE_CLD_WGT, &
+  YSPP_RSWINHF,YSPP_RLWINHF, &
+  YSPP_ICENU,YSPP_KGN_ACON,YSPP_KGN_SBGR
+
+ END TYPE ALL_SPP_VARS
+
+ CONTAINS
+
+ !
+ !-----------------------------------------------------------------------
+ !
+
+ SUBROUTINE CLEAR_SPP_TYPE(TSPP)
+  IMPLICIT NONE
+  TYPE(TSPP_CONFIG_TYPE), INTENT(INOUT) :: TSPP
+ END SUBROUTINE CLEAR_SPP_TYPE
+
+ !
+ !-----------------------------------------------------------------------
+ !
+
+ SUBROUTINE SET_SPP_TYPE(TSPP,CTAG,LLNN_MEAN1_SELF, &
+                         LPERT_UNIFORM, &
+                         CMPERT,UNIFORM_OFFSET,SDEV,CLIP,MP_SELF, &
+                         KLON,KLEV,NEZDIAG, &
+                         KSTA,KEND, &
+                         PGP2DSPP,PEZDIAG)
+  IMPLICIT NONE
+  TYPE(TSPP_CONFIG_TYPE),  INTENT(INOUT) :: TSPP
+  CHARACTER(LEN=*),        INTENT(IN   ) :: CTAG
+  LOGICAL,                 INTENT(IN   ) :: LLNN_MEAN1_SELF,LPERT_UNIFORM
+  REAL           ,         INTENT(IN   ) :: CMPERT,UNIFORM_OFFSET,SDEV,CLIP(2)
+  INTEGER           ,      INTENT(IN   ) :: MP_SELF,KLON,KLEV,KSTA,KEND, &
+                                            NEZDIAG
+  REAL           , TARGET, INTENT(IN   ) :: PGP2DSPP(KLON,0)
+  REAL           , TARGET, INTENT(INOUT) :: PEZDIAG(KLON,KLEV,NEZDIAG)
+  CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'SPP_MOD_TYPE', 'SET_SPP_TYPE is not implemented in PHYEX')
+ END SUBROUTINE SET_SPP_TYPE
+
+ !
+ !-----------------------------------------------------------------------
+ !
+
+ SUBROUTINE APPLY_SPP(TSPP, &
+                      KLON,KSTA,KEND, &
+                      PREFVAL,PFIELD)
+  IMPLICIT NONE
+  TYPE(TSPP_CONFIG_TYPE),    INTENT(INOUT) :: TSPP
+  INTEGER           ,        INTENT(IN   ) :: KLON,KSTA,KEND
+  REAL           ,           INTENT(IN   ) :: PREFVAL
+  REAL           ,           INTENT(INOUT) :: PFIELD(KLON)
+  CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'SPP_MOD_TYPE', 'APPLY_SPP is not implemented in PHYEX')
+ END SUBROUTINE APPLY_SPP
+
+ !
+ !-----------------------------------------------------------------------
+ !
+
+ SUBROUTINE DIA_SPP(TSPP,KSTA,KEND)
+  IMPLICIT NONE
+  TYPE(TSPP_CONFIG_TYPE),    INTENT(IN) :: TSPP
+  INTEGER           ,        INTENT(IN) :: KSTA,KEND
+  CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'SPP_MOD_TYPE', 'DIA_SPP is not implemented in PHYEX')
+ END SUBROUTINE DIA_SPP
+
+ !
+ !-----------------------------------------------------------------------
+ !
+ SUBROUTINE SET_ALL_SPP(KLON,KLEV,NGFL_EZDIAG, &
+  KIDIA,KFDIA,PGP2DSPP,PEZDIAG,YSPP_ALL)
+  IMPLICIT NONE
+  INTEGER           ,         INTENT(IN   ) :: KLON,KLEV,NGFL_EZDIAG,KIDIA,KFDIA
+  REAL           , TARGET,    INTENT(IN   ) :: PGP2DSPP(KLON,0)
+  REAL           ,            INTENT(INOUT) :: PEZDIAG(KLON,KLEV,NGFL_EZDIAG)
+  TYPE(ALL_SPP_VARS),         INTENT(INOUT) :: YSPP_ALL
+  CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'SPP_MOD_TYPE', 'SET_ALL_SPP is not implemented in PHYEX')
+ END SUBROUTINE SET_ALL_SPP
+
+ !
+ !-----------------------------------------------------------------------
+ !
+
+ SUBROUTINE CLEAR_ALL_SPP(YSPP_ALL)
+  IMPLICIT NONE
+  TYPE(ALL_SPP_VARS),         INTENT(INOUT) :: YSPP_ALL
+  CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'SPP_MOD_TYPE', 'CLEAR_ALL_SPP is not implemented in PHYEX')
+ END SUBROUTINE CLEAR_ALL_SPP
+
+END MODULE SPP_MOD_TYPE
+
+
diff --git a/src/arome/ext/suparar.F90 b/src/arome/ext/suparar.F90
index 286a2edca..8e3d6c403 100644
--- a/src/arome/ext/suparar.F90
+++ b/src/arome/ext/suparar.F90
@@ -1,14 +1,14 @@
 SUBROUTINE SUPARAR(YDGEOMETRY,YGFL,YDML_PHY_MF,KULOUT)
 
-!**** *SUPARAR*   - Initialize common parameters used in physics for AROME 
+!**** *SUPARAR*   - Initialize common parameters used in physics for AROME
 !                   and SURFEX
 
 !     Purpose.
 !     --------
 !           Initialize MODD_PARAMETERS, MODD_CST, MODD_CONF,
-!           MODD_RAIN_ICE_DESCR, MODD_RAIN_ICE_PARAM, MODD_BUDGET  
+!           MODD_RAIN_ICE_DESCR, MODD_RAIN_ICE_PARAM, MODD_BUDGET
 !           parameters used in meso_NH Physics and aladin/meso_NH physics
-!           interface 
+!           interface
 
 !**   Interface.
 !     ----------
@@ -31,7 +31,7 @@ SUBROUTINE SUPARAR(YDGEOMETRY,YGFL,YDML_PHY_MF,KULOUT)
 
 !     Reference.
 !     ----------
-!        Documentation AROME 
+!        Documentation AROME
 
 !     Author.
 !     -------
@@ -53,7 +53,7 @@ SUBROUTINE SUPARAR(YDGEOMETRY,YGFL,YDML_PHY_MF,KULOUT)
 !     2014-05-27: J.M. Piriou: default values of XCQVR and GQVPLIM.
 !     Nov. 2014: Y. Seity, add LFPREC3D for MOCAGE
 !     Nov 2016, S. Riette: New ICE3/ICE4 parameters
-!     R. El Khatib 24-Aug-2021 NPROMICRO specific cache-blocking factor for microphysics
+!     Jan 2021, C.Wittmann: add LDEPSG,RDEPSRED+RDEPGRED
 ! End Modifications
 !-------------------------------------------------------------------------------
 
@@ -100,7 +100,6 @@ REAL(KIND=JPRB) , POINTER ::  XDETR_DRY
 CHARACTER (LEN=4)  ::  CMF_UPDRAFT
 LOGICAL            , POINTER ::  LMIXUV
 LOGICAL            , POINTER ::  LLCRIT
-LOGICAL            , POINTER ::  LTOTPREC
 INTEGER(KIND=JPIM) , POINTER ::  NREFROI1
 REAL(KIND=JPRB) , POINTER ::  XTAUSIGMF
 LOGICAL , POINTER ::  LCRIAUTI
@@ -122,9 +121,16 @@ REAL(KIND=JPRB) , POINTER ::  XPRES_UV
 CHARACTER (LEN=4) ::  CSUBG_AUCV_RC
 CHARACTER (LEN=80) ::  CSUBG_AUCV_RI
 REAL(KIND=JPRB) , POINTER ::  XALP_PERT
-LOGICAL , POINTER ::  LOCND2
-LOGICAL , POINTER ::  LHARATU
-LOGICAL , POINTER :: LGRSN
+LOGICAL , POINTER :: LOCND2
+LOGICAL , POINTER :: LSTATNW
+LOGICAL , POINTER :: LHARATU
+LOGICAL , POINTER :: LKOGAN
+LOGICAL , POINTER :: LHGT_QS
+LOGICAL , POINTER :: LMODICEDEP
+LOGICAL , POINTER :: LICERAD
+LOGICAL , POINTER :: LTOTPREC
+LOGICAL , POINTER :: LTOTPRECL
+REAL(KIND=JPRB), DIMENSION(:), POINTER :: RFRMIN
 INTEGER(KIND=JPIM) , POINTER ::  NPRINTFR
 REAL(KIND=JPRB) , POINTER ::  XCQVR
 CHARACTER(LEN=4) ::  CMICRO
@@ -172,13 +178,16 @@ REAL(KIND=JPRB) , POINTER  :: XSPLIT_MAXCFL
 LOGICAL , POINTER  :: LDEPOSC
 REAL(KIND=JPRB) , POINTER  :: XVDEPOSC
 INTEGER(KIND=JPIM) , POINTER ::  NPROMICRO
+LOGICAL, POINTER :: LDEPSG
+REAL(KIND=JPRB), POINTER :: RDEPSRED
+REAL(KIND=JPRB), POINTER :: RDEPGRED
 
 #include "namparar.nam.h"
 #include "abor1.intfb.h"
 
 !     ------------------------------------------------------------------
 IF (LHOOK) CALL DR_HOOK('SUPARAR',0,ZHOOK_HANDLE)
-!Associate for variables not in the include namelists nor allocated in the routine 
+!Associate for variables not in the include namelists nor allocated in the routine
 ASSOCIATE(MACPRS=>YDML_PHY_MF%YRPARAR%MACPRS, MACPRR=>YDML_PHY_MF%YRPARAR%MACPRR, &
  & MINPRR=>YDML_PHY_MF%YRPARAR%MINPRR, MINPRS=>YDML_PHY_MF%YRPARAR%MINPRS, &
 
@@ -223,7 +232,13 @@ LQVTOP => YDPARAR%LQVTOP
 XBETA1 => YDPARAR%XBETA1
 NPTP => YDPARAR%NPTP
 LOCND2 => YDPARAR%LOCND2
-LGRSN => YDPARAR%LGRSN
+LKOGAN => YDPARAR%LKOGAN
+LHGT_QS => YDPARAR%LHGT_QS
+LMODICEDEP => YDPARAR%LMODICEDEP
+LICERAD => YDPARAR%LICERAD
+LTOTPREC => YDPARAR%LTOTPREC
+LTOTPRECL => YDPARAR%LTOTPRECL
+RFRMIN => YDPARAR%RFRMIN
 XCQVR => YDPARAR%XCQVR
 XFRAC_UP_MAX => YDPARAR%XFRAC_UP_MAX
 XB => YDPARAR%XB
@@ -245,7 +260,6 @@ LOSIGMAS => YDPARAR%LOSIGMAS
 GQVTOP => YDPARAR%GQVTOP
 LMIXUV => YDPARAR%LMIXUV
 LLCRIT => YDPARAR%LLCRIT
-LTOTPREC => YDPARAR%LTOTPREC
 XALPHA_MF => YDPARAR%XALPHA_MF
 XPRES_UV => YDPARAR%XPRES_UV
 LOLSMC => YDPARAR%LOLSMC
@@ -253,6 +267,7 @@ NDIAGWMAX => YDPARAR%NDIAGWMAX
 LOSUBG_COND => YDPARAR%LOSUBG_COND
 RADGR => YDPARAR%RADGR
 LFPREC3D => YDPARAR%LFPREC3D
+LSTATNW => YDPARAR%LSTATNW
 LHARATU => YDPARAR%LHARATU
 XTSTEP_TS => YDPARAR%XTSTEP_TS
 XMRSTEP => YDPARAR%XMRSTEP
@@ -271,6 +286,9 @@ XSPLIT_MAXCFL => YDPARAR%XSPLIT_MAXCFL
 LDEPOSC => YDPARAR%LDEPOSC
 XVDEPOSC => YDPARAR%XVDEPOSC
 NPROMICRO => YDPARAR%NPROMICRO
+LDEPSG => YDPARAR%LDEPSG
+RDEPSRED => YDPARAR%RDEPSRED
+RDEPGRED => YDPARAR%RDEPGRED
 
 !     ------------------------------------------------------------------
 
@@ -313,8 +331,8 @@ CLAMBDA3='CB'
 ! for squall line academic case
 LSQUALL=.FALSE.
 NREFROI1=1
-NREFROI2=1 
-VSQUALL=0._JPRB 
+NREFROI2=1
+VSQUALL=0._JPRB
 NPTP=1
 LDIAGWMAX=.FALSE.
 NDIAGWMAX=1
@@ -323,10 +341,31 @@ LOLSMC=.FALSE.
 LOTOWNC=.FALSE.
 
 LOCND2=.FALSE.
-LGRSN=.FALSE.
+LKOGAN=.FALSE.
+LHGT_QS=.FALSE.
+LMODICEDEP=.FALSE.
+LICERAD=.FALSE.
 RADGR=0._JPRB
 RADSN=0._JPRB
 
+! Tuning and modication of graupeln etc:
+RFRMIN(1:6)=0.
+RFRMIN(7:9)=1.
+RFRMIN(10) =10.
+RFRMIN(11) =1.
+RFRMIN(12) =0.
+RFRMIN(13) =1.0E-15
+RFRMIN(14) =120.
+RFRMIN(15) =1.0E-4
+RFRMIN(16:20)=0.
+RFRMIN(21:22)=1.
+RFRMIN(23)=0.5
+RFRMIN(24)=1.5
+RFRMIN(25)=30.
+RFRMIN(26:38)=0.
+RFRMIN(39)=0.25
+RFRMIN(40)=0.15
+
 ! default option for Mass Flux Scheme (Pergaud et al)
 CMF_UPDRAFT = 'EDKF'
 ! DIRE ou STAT
@@ -336,25 +375,26 @@ LMIXUV= .TRUE.
 !default option in EDMFm mass-flux scheme:
 LLCRIT=.FALSE.
 LTOTPREC=.FALSE.
+LTOTPRECL=.FALSE.
 
 !  Default for Mass Flux Scheme tuning variables
 
 XALP_PERT   = 0.3_JPRB  ! coefficient for the perturbation of
-                   ! theta_l and r_t at the first level of 
+                   ! theta_l and r_t at the first level of
                    ! the updraft
-XABUO       = 1._JPRB   ! coefficient of the buoyancy term in the w_up equation  
+XABUO       = 1._JPRB   ! coefficient of the buoyancy term in the w_up equation
 XBENTR      = 1._JPRB   ! coefficient of the entrainment term in the w_up equation
 XBDETR      = 0._JPRB   ! coefficient of the detrainment term in the w_up equation
-XCMF        = 0.065_JPRB! coefficient for the mass flux at the first level 
-                                ! of the updraft (closure) 
+XCMF        = 0.065_JPRB! coefficient for the mass flux at the first level
+                                ! of the updraft (closure)
 XENTR_MF    = 0.035_JPRB! entrainment constant (m/Pa) = 0.2 (m)
 XCRAD_MF    = 50._JPRB  ! cloud radius in cloudy part
-XENTR_DRY   = 0.55_JPRB ! coefficient for entrainment in dry part 
+XENTR_DRY   = 0.55_JPRB ! coefficient for entrainment in dry part
 XDETR_DRY   = 10._JPRB  ! coefficient for detrainment in dry part
 XDETR_LUP   = 1._JPRB   !  coefficient for detrainment in dry part
 XKCF_MF     = 2.75_JPRB ! coefficient for cloud fraction
 XKRC_MF     = 1._JPRB   ! coefficient for convective rc
-XTAUSIGMF   = 600._JPRB  
+XTAUSIGMF   = 600._JPRB
 XPRES_UV    = 0.5_JPRB  ! coefficient for pressure term in wind mixing
 XFRAC_UP_MAX= 0.33_JPRB ! maximum Updraft fraction
 XALPHA_MF = 2._JPRB     ! coefficient for updraft fraction in STA2 cloud scheme
@@ -405,8 +445,14 @@ LSEDIM_AFTER=.FALSE. ! Sedimentation done after microphysics
 XSPLIT_MAXCFL=0.8
 LDEPOSC=.FALSE.  ! water deposition on vegetation
 XVDEPOSC=0.02    ! deposition speed (2 cm.s-1)
+LDEPSG=.FALSE.   ! activate tuning of deposition of snow/graupel (RDEPSRED,RDEPGRED)
+RDEPSRED=1.0     
+RDEPGRED=1.0
 
 !
+! set up cloud scheme
+LSTATNW=.FALSE.
+
 ! for turbulence scheme
 XLINI=0._JPRB ! 0.1 in Meso-NH
 LHARATU=.FALSE.
@@ -425,6 +471,12 @@ IF (.NOT.LOCND2) THEN
    RADGR=0._JPRB
    RADSN=0._JPRB
 ENDIF
+IF (LHARATU .AND. CMF_UPDRAFT == 'EDKF') THEN
+  CALL ABOR1('Combination LHARATU and EDKF not valid!')
+ENDIF
+IF (.NOT. LHARATU .AND. LSTATNW ) THEN
+  CALL ABOR1('LSTATNW only tested in combination with HARATU and EDMFm!')
+ENDIF
 
 ! Work-around for PGI compiler bug
 YDPARAR%CMF_UPDRAFT=CMF_UPDRAFT
@@ -452,7 +504,7 @@ ENDIF
 IF ( CMICRO /= 'ICE3' .AND. CMICRO /= 'ICE4' .AND. &
    & CMICRO /= 'LIMA' .AND. CMICRO /= 'OLD3' .AND. CMICRO /= 'OLD4') THEN
   CALL ABOR1("AROME Microphysics must be ICE3, ICE4, LIMA, OLD3 or OLD4")
-ENDIF 
+ENDIF
 IF ( (CMICRO == 'ICE4' .OR. CMICRO == 'OLD4') .AND. .NOT.YH%LACTIVE ) THEN
   CALL ABOR1("ICE4 and OLD4 microphysics requires activation of YH in NAMGFL")
 ENDIF
@@ -512,6 +564,9 @@ ENDIF
 IF (LFPREC3D.AND.YGFL%NGFL_EZDIAG < 4) THEN
   CALL ABOR1 ("With LFPREC3D NGFL_EZDIAG should be >= 4 !")
 ENDIF
+IF (LOCND2 .AND. LDEPSG) THEN
+  CALL ABOR1 ("LDEPSG must not be activated together with LOCND2")
+ENDIF 
 
 !       3.Initialisation du buffer contenant les variables pseudo-historiques
 
@@ -562,7 +617,7 @@ IF (LMPA) THEN
   ENDIF
 ELSE
   IF (LMSE) THEN
-    NGPAR=8
+    NGPAR=9
     MRAIN=1
     MSNOW=2
     MVTS=3
@@ -583,7 +638,7 @@ ELSE
   ENDIF
 ENDIF
 
-! allocation du buffer 
+! allocation du buffer
 IF (NGPAR /= 0) THEN
   ALLOCATE (GPARBUF (YDGEOMETRY%YRDIM%NPROMA, NGPAR, YDGEOMETRY%YRDIM%NGPBLKS))
 ENDIF
@@ -600,11 +655,12 @@ WRITE(UNIT=KULOUT,FMT='('' CSUBG_RC_RR_ACCR = '',A80,&
 WRITE(UNIT=KULOUT,FMT='('' CLAMBDA3 = '',A80)')&
 & CLAMBDA3
 WRITE(UNIT=KULOUT,FMT='('' NREFROI1 = '',I3,&
- & '' NREFROI2 = '',I3,'' VSQUALL = '',E13.6)')NREFROI1, NREFROI2,VSQUALL  
+ & '' NREFROI2 = '',I3,'' VSQUALL = '',E13.6)')NREFROI1, NREFROI2,VSQUALL
 WRITE(UNIT=KULOUT,FMT='('' NGPAR = '',I3,&
  & '' MINPRR = '',I3,'' MACPRR = '',I3,'' MINPRS = '',I3,&
  & '' MACPRS = '',I3,'' MINPRG = '',I3,'' MACPRG = '',I3)')&
  & NGPAR,MINPRR,MACPRR,MINPRS,MACPRS,MINPRG,MACPRG
+WRITE(UNIT=KULOUT,FMT='('' MCD = '',I3,'' MRAIN = '',I3,'' MSNOW = '',I3)') MCD, MRAIN, MSNOW
 WRITE(UNIT=KULOUT,FMT='('' MSWDIR = '',I3,&
  & '' MSWDIF = '',I3)')MSWDIR,MSWDIF
 WRITE(UNIT=KULOUT,FMT='('' MALBDIR = '',I3,&
@@ -615,7 +671,7 @@ WRITE(UNIT=KULOUT,FMT='('' NPRINTFR = '',I3, '' NPTP = '',I3)')&
  & NPRINTFR,NPTP
 WRITE(UNIT=KULOUT,FMT='('' LDIAGWMAX = '',L5,&
  & '' NDIAGWMAX = '',I3,'' NDTCHEM = '',I3)')&
- & LDIAGWMAX, NDIAGWMAX,NDTCHEM  
+ & LDIAGWMAX, NDIAGWMAX,NDTCHEM
 WRITE(UNIT=KULOUT,FMT='('' NRR = '',I3,&
  & '' NRRL = '',I3,'' NRRI = '',I3)')&
  & NRR, NRRL, NRRI
@@ -628,7 +684,7 @@ WRITE(UNIT=KULOUT,FMT='(&
 WRITE(UNIT=KULOUT,FMT='('' CMF_UPDRAFT = '',A4,&
  & '' CMF_CLOUD  = '',A4)')&
  & CMF_UPDRAFT,CMF_CLOUD
- 
+
 WRITE(UNIT=KULOUT,FMT='(''Mass Flux Scheme tuning variables :'')')
 WRITE(UNIT=KULOUT,FMT='(''XALP_PERT = '',F6.3,'' XABUO = '',F6.3,'' XBENTR = '',F6.3,&
 &'' XBDETR = '',F6.3,'' XCMF = '',F6.3,'' XENTR_MF = '',F6.3,'' XCRAD_MF = '',F6.3,&
@@ -658,11 +714,19 @@ WRITE(UNIT=KULOUT,FMT='('' CFRAC_ICE_ADJUST = '',A1,&
 WRITE(UNIT=KULOUT,FMT='('' XSPLIT_MAXCFL = '',E13.6)') XSPLIT_MAXCFL
 WRITE(UNIT=KULOUT,FMT='('' LSEDIM_AFTER = '',L5)') LSEDIM_AFTER
 WRITE(UNIT=KULOUT,FMT=*) 'XCQVR=',XCQVR,' GQVPLIM=',GQVPLIM,' GQVTOP=',GQVTOP,' LQVTOP=',LQVTOP
+WRITE(UNIT=KULOUT,FMT='('' LLCRIT = '',L5)') LLCRIT
+WRITE(UNIT=KULOUT,FMT='('' LTOTPREC = '',L5)') LTOTPREC
+WRITE(UNIT=KULOUT,FMT='('' LTOTPRECL = '',L5)') LTOTPRECL
 WRITE(UNIT=KULOUT,FMT='('' LOCND2 = '',L5)') LOCND2
-WRITE(UNIT=KULOUT,FMT='('' LGRSN = '',L5)') LGRSN
-WRITE(UNIT=KULOUT,FMT='('' RADSN = '',E13.6)') RADSN
-WRITE(UNIT=KULOUT,FMT='('' RADGR = '',E13.6)') RADGR
+WRITE(UNIT=KULOUT,FMT='('' LKOGAN = '',L5)') LKOGAN
+WRITE(UNIT=KULOUT,FMT='('' LHGT_QS = '',L5)') LHGT_QS
+WRITE(UNIT=KULOUT,FMT='('' LSTATNW = '',L5)') LSTATNW
+WRITE(UNIT=KULOUT,FMT='('' LMODICEDEP = '',L5)') LMODICEDEP
+WRITE(UNIT=KULOUT,FMT='('' RADSN = '',f6.2)') RADSN
+WRITE(UNIT=KULOUT,FMT='('' RADGR = '',f6.2)') RADGR
+WRITE(UNIT=KULOUT,FMT='('' RFRMIN = '',40E10.3)') RFRMIN
 WRITE(UNIT=KULOUT,FMT='('' LHARATU = '',L2)') LHARATU
+WRITE(UNIT=KULOUT,FMT='('' LICERAD = '',L5)') LICERAD
 WRITE(UNIT=KULOUT,FMT='('' LDEPOSC = '',L5)') LDEPOSC
 WRITE(UNIT=KULOUT,FMT='('' XVDEPOSC = '',E13.6)') XVDEPOSC
 
diff --git a/src/arome/ext/suphmpa.F90 b/src/arome/ext/suphmpa.F90
index d5817d3a4..33f631f7f 100644
--- a/src/arome/ext/suphmpa.F90
+++ b/src/arome/ext/suphmpa.F90
@@ -105,12 +105,13 @@ ASSOCIATE(XDETR_LUP=>YDPARAR%XDETR_LUP, XCMF=>YDPARAR%XCMF, &
  & XKRC_MF=>YDPARAR%XKRC_MF, XALPHA_MF=>YDPARAR%XALPHA_MF, &
  & XPRES_UV=>YDPARAR%XPRES_UV, NRR=>YDPARAR%NRR, XCRAD_MF=>YDPARAR%XCRAD_MF, &
  & CMF_UPDRAFT=>YDPARAR%CMF_UPDRAFT, LHARATU=>YDPARAR%LHARATU, &
+ & LSTATNW=>YDPARAR%LSTATNW, &
  & LMPA=>YDARPHY%LMPA, LKFBCONV=>YDARPHY%LKFBCONV, LMFSHAL=>YDARPHY%LMFSHAL, &
  & LGRADHPHY=>YDARPHY%LGRADHPHY, &
  & NPROMA=>YDDIM%NPROMA, &
  & LEDKF=>YDPHY%LEDKF, LCVPPKF=>YDPHY%LCVPPKF, &
  & NFLEVG=>YDDIMV%NFLEVG, &
- & LSDDH=>YDLDDH%LSDDH, TSTEP=>YDRIP%TSTEP, &
+ & LSDDH=>YDLDDH%LSDDH, TSTEP=>YDRIP%TSTEP, RFRMIN=>YDPARAR%RFRMIN, &
  & XTSTEP_TS=>YDPARAR%XTSTEP_TS, CSNOWRIMING=>YDPARAR%CSNOWRIMING, XMRSTEP=>YDPARAR%XMRSTEP,&
  & NMAXITER_MICRO=>YDPARAR%NMAXITER_MICRO, LFEEDBACKT=>YDPARAR%LFEEDBACKT, LEVLIMIT=>YDPARAR%LEVLIMIT, &
  & LNULLWETG=>YDPARAR%LNULLWETG, LWETGPOST=>YDPARAR%LWETGPOST, LNULLWETH=>YDPARAR%LNULLWETH,&
@@ -119,7 +120,8 @@ ASSOCIATE(XDETR_LUP=>YDPARAR%XDETR_LUP, XCMF=>YDPARAR%XCMF, &
  & CSUBG_PR_PDF=>YDPARAR%CSUBG_PR_PDF, LCRFLIMIT=>YDPARAR%LCRFLIMIT, &
  & CFRAC_ICE_ADJUST=>YDPARAR%CFRAC_ICE_ADJUST, XSPLIT_MAXCFL=>YDPARAR%XSPLIT_MAXCFL,&
  & CFRAC_ICE_SHALLOW_MF=>YDPARAR%CFRAC_ICE_SHALLOW_MF, LSEDIM_AFTER=>YDPARAR%LSEDIM_AFTER,&
- & LDEPOSC=>YDPARAR%LDEPOSC, XVDEPOSC=>YDPARAR%XVDEPOSC)
+ & LDEPOSC=>YDPARAR%LDEPOSC, XVDEPOSC=>YDPARAR%XVDEPOSC,&
+ & LDEPSG=>YDPARAR%LDEPSG,RDEPSRED=>YDPARAR%RDEPSRED,RDEPGRED=>YDPARAR%RDEPGRED)
 !     ------------------------------------------------------------------
 !     ------------------------------------------------------------------
 !       1. Initialisation of MesoNH constantes
@@ -140,16 +142,18 @@ IF (CMICRO == 'LIMA') THEN
  &                    NMAXITER_MICRO, LFEEDBACKT, LEVLIMIT, LNULLWETG, LWETGPOST, LNULLWETH,&
  &                    LWETHPOST, XFRACM90, LCONVHG, CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, CSUBG_PR_PDF,&
  &                    LCRFLIMIT, CFRAC_ICE_ADJUST, XSPLIT_MAXCFL,&
- &                    CFRAC_ICE_SHALLOW_MF, LSEDIM_AFTER, LDEPOSC, XVDEPOSC)
+ &                    CFRAC_ICE_SHALLOW_MF, LSEDIM_AFTER, LDEPOSC, XVDEPOSC, RFRMIN,&
+ &                    LDEPSG,RDEPSRED,RDEPGRED)
    CALL AROINI_MICRO_LIMA (KULOUT,4,ZTSTEP,LOWARM,CMICRO,NSPLITR,NSPLITG,CSEDIM,LCRIAUTI,&
         &                 RCRIAUTI,RT0CRIAUTI,RCRIAUTC)
 ELSE
 CALL AROINI_MICRO (KULOUT,ZTSTEP,LOWARM,CMICRO,NSPLITR,CSEDIM,LCRIAUTI,&
- &                 RCRIAUTI,RT0CRIAUTI,RCRIAUTC,XTSTEP_TS, CSNOWRIMING, XMRSTEP,&
+ &                 RCRIAUTI,RT0CRIAUTI,RCRIAUTC, XTSTEP_TS, CSNOWRIMING, XMRSTEP,&
  &                 NMAXITER_MICRO, LFEEDBACKT, LEVLIMIT, LNULLWETG, LWETGPOST, LNULLWETH,&
  &                 LWETHPOST, XFRACM90, LCONVHG, CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, CSUBG_PR_PDF,&
  &                 LCRFLIMIT, CFRAC_ICE_ADJUST, XSPLIT_MAXCFL,&
- &                 CFRAC_ICE_SHALLOW_MF, LSEDIM_AFTER, LDEPOSC, XVDEPOSC)
+ &                 CFRAC_ICE_SHALLOW_MF, LSEDIM_AFTER, LDEPOSC, XVDEPOSC, RFRMIN,&
+ &                 LDEPSG,RDEPSRED,RDEPGRED)
  ENDIF
 
 !       3. Initialisation of Budget
@@ -160,8 +164,7 @@ CALL AROINI_BUDGET(LAROBU_ENABLE)
 
 !       4. Initialisation of Turbulence scheme
 
-!SR phasing step, .FALSE. must be replaced by the value read in namelist
-CALL AROINI_TURB(XLINI,LHARATU,.FALSE.)
+CALL AROINI_TURB(XLINI,LHARATU,LSTATNW)
 
 !       5. Initialisation of Mass Flux Shallow convection scheme
 
diff --git a/src/arome/ext/yomparar.F90 b/src/arome/ext/yomparar.F90
index 8c07934b9..808083cd3 100644
--- a/src/arome/ext/yomparar.F90
+++ b/src/arome/ext/yomparar.F90
@@ -26,7 +26,7 @@ INTEGER(KIND=JPIM) :: NSWB_MNH    !number of SW bands for surface
                                   ! (must be equal to NSW !!)
 INTEGER(KIND=JPIM) :: NGPAR       !number of fields in the buffer containing
                                   ! the 2D pseudo-historical variables.
-INTEGER(KIND=JPIM) :: MINPRR      !pointer on INPRR 
+INTEGER(KIND=JPIM) :: MINPRR      !pointer on INPRR
 INTEGER(KIND=JPIM) :: MINPRS      !pointer on INPRS
 INTEGER(KIND=JPIM) :: MINPRG      !pointer on INPRG
 INTEGER(KIND=JPIM) :: MACPRR      !pointer on ACPRR 
@@ -36,10 +36,10 @@ INTEGER(KIND=JPIM) :: MALBDIR     !pointer on ALBDIR
 INTEGER(KIND=JPIM) :: MALBSCA     !pointer on ALBSCA
 INTEGER(KIND=JPIM) :: MRAIN       !pointer on surface rain
 INTEGER(KIND=JPIM) :: MSNOW       !pointer on surface snow
-INTEGER(KIND=JPIM) :: MGZ0        !pointer on GZ0 
-INTEGER(KIND=JPIM) :: MGZ0H       !pointer on GZ0H 
+INTEGER(KIND=JPIM) :: MGZ0        !pointer on GZ0
+INTEGER(KIND=JPIM) :: MGZ0H       !pointer on GZ0H
 INTEGER(KIND=JPIM) :: MVQS        !pointer on surface moisture
-INTEGER(KIND=JPIM) :: MVTS        !pointer on surface temperature 
+INTEGER(KIND=JPIM) :: MVTS        !pointer on surface temperature
 INTEGER(KIND=JPIM) :: MVEMIS      !pointer on surface emissivity
 INTEGER(KIND=JPIM) :: MSWDIR      !pointer on SW direct surface flux
 INTEGER(KIND=JPIM) :: MSWDIF      !pointer on SW surface diffuse flux
@@ -53,19 +53,28 @@ LOGICAL :: LOSEDIC     ! activate cloud sedimentation
 LOGICAL :: LOWARM      ! see OWARM in mesoNH
 LOGICAL :: LOSIGMAS    ! activate calculation of variance of departure to 
                        ! saturation in turb scheme (to be used in subgrid condensation)
-LOGICAL :: LOLSMC      ! Land/sea mask for cloud droplet number conc. 
+LOGICAL :: LOLSMC      ! Land/sea mask for cloud droplet number conc.
 LOGICAL :: LOTOWNC     ! Town mask for cloud droplet number conc.
 
 LOGICAL :: LOCND2      ! Separate solid and liquid phase
-LOGICAL :: LGRSN       ! Turn graupel to snow for high supersaturation wrt ice 
+LOGICAL :: LKOGAN      ! Use Kogan autocoversion of liquid
+LOGICAL :: LMODICEDEP  ! Logical switch for alternative dep/evap of ice
+LOGICAL :: LICERAD     ! Assume higher fraction of condensate for 
+                       ! ice/snow/graupel than the actual cloud cover in
+                       ! radiation
 REAL(KIND=JPRB) :: RADGR  ! Tuning of ice for radiation, TO BE REMOVED
 REAL(KIND=JPRB) :: RADSN  ! Tuning of ice for radiation, TO BE REMOVED
 
 REAL(KIND=JPRB) :: VSIGQSAT ! coeff applied to qsat variance contribution
                             ! for subgrid condensation
 
+! Constants / tuning parameters for possible modifying some processes related to
+! graupeln in RFRMIN(1:8),  IN - concentration in RFRMIN(9) and Kogan
+! autoconversion in RFRMIN(10:11).
+REAL(KIND=JPRB) :: RFRMIN(40)
+
 ! switches for MF scheme (Pergaud et al)
-CHARACTER (LEN=4)  :: CMF_UPDRAFT  ! Type of Mass Flux Scheme 
+CHARACTER (LEN=4)  :: CMF_UPDRAFT  ! Type of Mass Flux Scheme
                                      ! 'NONE','DUAL', 'EDKF', 'RHCJ' or 'RAHA' 
 CHARACTER (LEN=4)  :: CMF_CLOUD  ! type of cloud scheme associated with MF Scheme
                                      ! 'NONE', 'DIRE' or 'STAT'
@@ -76,20 +85,22 @@ LOGICAL            :: LLCRIT    ! True if temperature dependent
 LOGICAL            :: LTOTPREC  ! True if precipitation tendencies
                                 ! from the sub-grid scheme are
                                 ! added to the total precip tendencies.
+LOGICAL            :: LTOTPRECL ! As LTOTPREC but updraft fraction untouched
+LOGICAL            :: LHGT_QS   ! Switch for height dependent VQSIGSAT
 
 ! Tuning variables for MF scheme 
 
 REAL(KIND=JPRB) :: XALP_PERT    ! coefficient for the perturbation of
-                                ! theta_l and r_t at the first level of 
+                                ! theta_l and r_t at the first level of
                                 ! the updraft
-REAL(KIND=JPRB) :: XABUO        ! coefficient of the buoyancy term in the w_up equation  
+REAL(KIND=JPRB) :: XABUO        ! coefficient of the buoyancy term in the w_up equation
 REAL(KIND=JPRB) :: XBENTR       ! coefficient of the entrainment term in the w_up equation
 REAL(KIND=JPRB) :: XBDETR       ! coefficient of the detrainment term in the w_up equation
-REAL(KIND=JPRB) :: XCMF         ! coefficient for the mass flux at the first level 
-                                ! of the updraft (closure) 
+REAL(KIND=JPRB) :: XCMF         ! coefficient for the mass flux at the first level
+                                ! of the updraft (closure)
 REAL(KIND=JPRB) :: XENTR_MF     ! entrainment constant (m/Pa) = 0.2 (m)
 REAL(KIND=JPRB) :: XCRAD_MF     ! cloud radius in cloudy part
-REAL(KIND=JPRB) :: XENTR_DRY    ! coefficient for entrainment in dry part 
+REAL(KIND=JPRB) :: XENTR_DRY    ! coefficient for entrainment in dry part
 REAL(KIND=JPRB) :: XDETR_DRY    ! coefficient for detrainment in dry part
 REAL(KIND=JPRB) :: XDETR_LUP    ! coefficient for detrainment in dry part
 REAL(KIND=JPRB) :: XKCF_MF      ! coefficient for cloud fraction
@@ -127,7 +138,7 @@ INTEGER(KIND=JPIM) :: NPTP ! index in NPROMA paquet where the print will be done
 INTEGER(KIND=JPIM) :: NPRINTFR !frequency of physical prints in apl_arome
 
 !* for other diagnostics
-!  wmax per vertical level 
+!  wmax per vertical level
 LOGICAL :: LDIAGWMAX !activate print of WMAX in apl_arome
 INTEGER(KIND=JPIM) :: NDIAGWMAX ! frequency of preceding prints (in time step)
 
@@ -138,6 +149,8 @@ INTEGER(KIND=JPIM) :: NDTCHEM ! time step factor for chemical scheme
 LOGICAL :: LAROBU_ENABLE ! for MNH budget anlysis
 !* for turbulence scheme
 REAL(KIND=JPRB) :: XLINI ! minimum bl89 mixing length
+LOGICAL :: LSTATNW !  updated full statistical cloud scheme
+                   !  (yet only to be used in combination with EDMFm convection (DUAL))
 LOGICAL :: LHARATU !  if true RACMO turbulence is used
                    !  (yet only to be used in combination with EDMFm convection (DUAL))
 !* Subgrid precipitation scheme
@@ -185,6 +198,11 @@ LOGICAL :: LSEDIM_AFTER !Sedimentation done after microphysics (.TRUE.) or befor
 REAL(KIND=JPRB) :: XSPLIT_MAXCFL ! Maximum CFL number allowed for SPLIT sedimentation scheme
 REAL(KIND=JPRB) :: XVDEPOSC ! Water deposition speed on vegetation (LDEPOSC) (DEPO_ICE3)
 !
+! for negative deposition (=sublimation) of qs,qg
+ LOGICAL :: LDEPSG   ! activate namelist read of sublimation factors
+REAL(KIND=JPRB) :: RDEPSRED  ! tuning factor of sublimation of snow
+REAL(KIND=JPRB) :: RDEPGRED  ! tuning factor of sublimation of graupel
+!
 !* For total cumulative 3D prec flux for MOCAGE
 LOGICAL :: LFPREC3D ! Switch on total cumulative 3D prec flux output (for MOCAGE use)
 !* For radiation :
diff --git a/src/arome/micro/ini_rain_ice.F90 b/src/arome/micro/ini_rain_ice.F90
index 4068a1ab9..6e2f1077d 100644
--- a/src/arome/micro/ini_rain_ice.F90
+++ b/src/arome/micro/ini_rain_ice.F90
@@ -399,7 +399,7 @@ XLBDAS_MAX = 100000.0
 XLBDAG_MAX = 100000.0
 !
 ZCONC_MAX  = 1.E6 ! Maximal concentration for falling particules set to 1 per cc
-XLBDAS_MAX = ( ZCONC_MAX/XCCS )**(1./XCXS)
+IF(XCCS>0. .AND. XCXS>0. )XLBDAS_MAX = ( ZCONC_MAX/XCCS )**(1./XCXS)
 !
 IF (HCLOUD == 'ICE4' .OR. HCLOUD == 'OLD4') THEN
   ALLOCATE( XRTMIN(7) )
@@ -545,16 +545,26 @@ X0DEPS = (4.0*XPI)*XCCS*XC1S*XF0S*MOMG(XALPHAS,XNUS,1.)
 X1DEPS = (4.0*XPI)*XCCS*XC1S*XF1S*SQRT(XCS)*MOMG(XALPHAS,XNUS,0.5*XDS+1.5)
 XEX0DEPS = XCXS-1.0
 XEX1DEPS = XCXS-0.5*(XDS+3.0)
+XRDEPSRED = 1.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)
+XRDEPGRED = 1.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)
+
+GFLAG = .TRUE.
+IF (GFLAG) THEN
+  WRITE(UNIT=KLUOUT,FMT='("      factors sublimation snow/groupel")')
+  WRITE(UNIT=KLUOUT,FMT='(" mod sublim snow =",E13.6)') XRDEPSRED
+  WRITE(UNIT=KLUOUT,FMT='(" mod sublim graupel =",E13.6)') XRDEPGRED
+END IF
+
 !
 !*       5.3    Constants for pristine ice autoconversion
 !
@@ -1047,6 +1057,26 @@ IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAR/=NDRYLBDAR) .OR. (KND/=IND) .OR. &
                      PFDINFTY,XKER_RDRYG                                      )
   WRITE(UNIT=KLUOUT,FMT='(" Read XKER_RDRYG")')
 END IF
+         
+!          8.2.6 Constants for possible modifying some processes related to 
+!                graupeln in XFRMIN(1:8),  IN - concentration in XFRMIN(9) and Kogan 
+!                autoconversion in XFRMIN(10:11). May be used for e.g. ensemble spread
+  XFRMIN(1:6)=0.
+  XFRMIN(7:9)=1.
+  XFRMIN(10) =10.
+  XFRMIN(11) =1.
+  XFRMIN(12) =100. !0 in suparar
+  XFRMIN(13) =1.0E-15
+  XFRMIN(14) =120.
+  XFRMIN(15) =1.0E-4
+  XFRMIN(16:20)=0.
+  XFRMIN(21:22)=1.
+  XFRMIN(23)=0.5
+  XFRMIN(24)=1.5
+  XFRMIN(25)=30.
+  XFRMIN(26:38)=0.
+  XFRMIN(39)=0.25
+  XFRMIN(40)=0.15
 !
 !
 !-------------------------------------------------------------------------------
diff --git a/src/arome/micro/modi_rain_ice_old.F90 b/src/arome/micro/modi_rain_ice_old.F90
index 2d09cf14c..81c0c368c 100644
--- a/src/arome/micro/modi_rain_ice_old.F90
+++ b/src/arome/micro/modi_rain_ice_old.F90
@@ -3,26 +3,27 @@
 !      ####################
 !
 INTERFACE
-      SUBROUTINE RAIN_ICE_OLD ( OSEDIC, OCND2, LGRSN, HSEDIM, HSUBG_AUCV_RC, OWARM,    &
+      SUBROUTINE RAIN_ICE_OLD ( OSEDIC, OCND2, LKOGAN, LMODICEDEP, HSEDIM, HSUBG_AUCV_RC, OWARM,    &
                             KKA, KKU, KKL,                                        &
                             KSPLITR, PTSTEP, KRR,                            &
                             PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,&
+                            PICLDFR, PWCLDFR, PSSIO, PSSIU, PIFR,                 &
                             PTHT, PRVT, PRCT, PRRT, PRIT, PRST, &
                             PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, &
                             PINPRC, PINPRR, PEVAP3D,                    &
                             PINPRS, PINPRG, PSIGS, PSEA, PTOWN,                   &
-                            PRHT, PRHS, PINPRH, PFPR, &
                             YDDDH, YDLDDH, YDMDDH, &
-                            YSPP_ICENU,YSPP_KGN_ACON,YSPP_KGN_SBGR)
+                            PICENU, PKGN_ACON, PKGN_SBGR, &
+                            PRHT, PRHS, PINPRH, PFPR)
 !
 USE DDH_MIX, ONLY : TYP_DDH
 USE YOMLDDH, ONLY : TLDDH
 USE YOMMDDH, ONLY : TMDDH
-USE MODD_SPP_TYPE, ONLY : TSPP_CONFIG_MPA
 !
 LOGICAL,                  INTENT(IN)    :: OSEDIC ! Switch for droplet sedim.
 LOGICAL,                  INTENT(IN)    :: OCND2  ! Logical switch to separate liquid and ice
-LOGICAL,                  INTENT(IN)    :: LGRSN
+LOGICAL,                  INTENT(IN)    :: LKOGAN ! Logical switch for using Kogan autoconversion of liquid.
+LOGICAL,                  INTENT(IN)    :: LMODICEDEP ! Logical switch for alternative dep/evap of ice
 CHARACTER(LEN=4),         INTENT(IN)    :: HSEDIM ! Sedimentation scheme
 CHARACTER(LEN=4),         INTENT(IN)    :: HSUBG_AUCV_RC ! Switch for rc->rr Subgrid autoconversion
                                         ! Kind of Subgrid autoconversion method
@@ -39,7 +40,7 @@ REAL,                     INTENT(IN)    :: PTSTEP  ! Double Time step
                                                    ! (single if cold start)
 INTEGER,                  INTENT(IN)    :: KRR     ! Number of moist variable
 !
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDZZ     ! Layer thikness (m)
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDZZ    ! Layer thickness (m)
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ  ! Dry density * Jacobian
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF! Reference density
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF ! Reference Exner function
@@ -55,8 +56,16 @@ REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT    ! Rain water m.r. at t
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRIT    ! Pristine ice m.r. at t
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRGT    ! Graupel/hail m.r. at t
-!
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PSIGS   ! Sigma_s at t
+! input from aro_adjust / condensation with OCND2, dummy if OCND2 = F
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PICLDFR ! ice cloud fraction
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PWCLDFR ! water or mixed-phase cloud fraction
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PSSIO   ! Super-saturation with respect to ice in the  
+                                                   ! supersaturated fraction
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PSSIU   ! Sub-saturation with respect to ice in the  
+                                                   ! subsaturated fraction 
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PIFR    ! Ratio cloud ice moist part to dry part 
+! input from aro_adjust / condensation with OCND2 END.
 !
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS    ! Theta source
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRVS    ! Water vapor m.r. source
@@ -65,7 +74,6 @@ REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRRS    ! Rain water m.r. source
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRIS    ! Pristine ice m.r. source
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRSS    ! Snow/aggregate m.r. source
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRGS    ! Graupel m.r. source
-
 !
 REAL, DIMENSION(:,:), INTENT(INOUT)     :: PINPRC! Cloud instant precip
 REAL, DIMENSION(:,:), INTENT(INOUT)     :: PINPRR! Rain instant precip
@@ -74,16 +82,14 @@ REAL, DIMENSION(:,:), INTENT(INOUT)     :: PINPRS! Snow instant precip
 REAL, DIMENSION(:,:), INTENT(INOUT)     :: PINPRG! Graupel instant precip
 REAL, DIMENSION(:,:), INTENT(IN)        :: PSEA ! Sea Mask
 REAL, DIMENSION(:,:), INTENT(IN)        :: PTOWN! Fraction that is town
-
-REAL, DIMENSION(:,:,:), OPTIONAL,  INTENT(IN)    :: PRHT    ! Hail m.r. at t
-REAL, DIMENSION(:,:,:), OPTIONAL,  INTENT(INOUT) :: PRHS    ! Hail m.r. source
-REAL, DIMENSION(:,:), OPTIONAL, INTENT(INOUT)     :: PINPRH! Hail instant precip
-REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(OUT)   :: PFPR ! upper-air precipitation fluxes
-TYPE(TYP_DDH),                      INTENT(INOUT) :: YDDDH
-TYPE(TLDDH),                      INTENT(IN) :: YDLDDH
-TYPE(TMDDH),                      INTENT(IN) :: YDMDDH
-
-TYPE(TSPP_CONFIG_MPA), OPTIONAL, INTENT(IN)       :: YSPP_ICENU,YSPP_KGN_ACON,YSPP_KGN_SBGR
+TYPE(TYP_DDH),        INTENT(INOUT)     :: YDDDH
+TYPE(TLDDH),          INTENT(IN)        :: YDLDDH
+TYPE(TMDDH),          INTENT(IN)        :: YDMDDH
+REAL, DIMENSION(:,:), INTENT(IN)        :: PICENU, PKGN_ACON, PKGN_SBGR
+REAL, DIMENSION(:,:,:),   OPTIONAL, INTENT(IN)    :: PRHT    ! Hail m.r. at t
+REAL, DIMENSION(:,:,:),   OPTIONAL, INTENT(INOUT) :: PRHS    ! Hail m.r. source
+REAL, DIMENSION(:,:),     OPTIONAL, INTENT(INOUT) :: PINPRH  ! Hail instant precip
+REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(OUT)   :: PFPR    ! upper-air precipitation fluxes
 !
 END SUBROUTINE RAIN_ICE_OLD
 END INTERFACE
diff --git a/src/arome/micro/rain_ice_old.F90 b/src/arome/micro/rain_ice_old.F90
index c1ac467d1..9d60e6f85 100644
--- a/src/arome/micro/rain_ice_old.F90
+++ b/src/arome/micro/rain_ice_old.F90
@@ -1,15 +1,16 @@
 !     ######spl
-      SUBROUTINE RAIN_ICE_OLD ( OSEDIC, OCND2, LGRSN, HSEDIM, HSUBG_AUCV, OWARM,      &
+      SUBROUTINE RAIN_ICE_OLD ( OSEDIC, OCND2, LKOGAN, LMODICEDEP, HSEDIM, HSUBG_AUCV_RC, OWARM,      &
                             KKA,KKU,KKL,                                          &
                             KSPLITR, PTSTEP, KRR,                            &
                             PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,&
+                            PICLDFR, PWCLDFR, PSSIO, PSSIU, PIFR,                 &
                             PTHT, PRVT, PRCT, PRRT, PRIT, PRST, &
                             PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, &
                             PINPRC, PINPRR, PEVAP3D,                    &
                             PINPRS, PINPRG, PSIGS, PSEA, PTOWN,                   &
-                            PRHT, PRHS, PINPRH, PFPR, &
                             YDDDH, YDLDDH, YDMDDH, &
-                            YSPP_ICENU,YSPP_KGN_ACON,YSPP_KGN_SBGR)
+                            PICENU, PKGN_ACON, PKGN_SBGR, &
+                            PRHT, PRHS, PINPRH, PFPR)
 
       USE PARKIND1, ONLY : JPRB
       USE YOMHOOK , ONLY : LHOOK, DR_HOOK
@@ -154,7 +155,11 @@
 !!      (C. Abiven, Y. Léauté, V. Seigner, S. Riette) Phasing of Turner rain subgrid param
 !!      (K.I Ivarsson 2014) OCND2-option, possible to use derived cloud dropelt conc for cloudphysics,
 !!                      replace XMV/XMD with XEPSILO
+!!      (K.I Ivarsson 2016) LKOGAN-option, possible to use Kogan autoconversion of liquid regardless of OCND2 option.
+!!      (K.I Ivarsson 2018-02 New varibles for input/ output mainly for optimation. Some updates of OCND2 option. 
+!!                          Sedimented ice should be preciptation
 !!      (U. Andrae Dec 2020) Introduce SPP for HARMONIE-AROME
+!!      (C. Wittmann Jan 2021) Introduce sublimation factor tuning 
 !
 !
 !*       0.    DECLARATIONS
@@ -167,7 +172,6 @@ USE MODD_RAIN_ICE_DESCR
 USE MODD_RAIN_ICE_PARAM
 USE MODD_PARAM_ICE
 USE MODD_BUDGET
-USE MODD_SPP_TYPE
 USE MODD_LES
 USE MODE_BUDGET, ONLY: BUDGET_DDH
 USE MODI_GAMMA
@@ -177,6 +181,7 @@ USE MODE_TIWMX_TAB, ONLY : TIWMX_TAB
 USE DDH_MIX, ONLY  : TYP_DDH
 USE YOMLDDH, ONLY  : TLDDH
 USE YOMMDDH, ONLY  : TMDDH
+
 !
 IMPLICIT NONE
 !
@@ -186,9 +191,10 @@ IMPLICIT NONE
 !
 LOGICAL,                  INTENT(IN)    :: OSEDIC ! Switch for droplet sedim.
 LOGICAL,                  INTENT(IN)    :: OCND2  ! Logical switch to separate liquid and ice
-LOGICAL,                  INTENT(IN)    :: LGRSN
+LOGICAL,                  INTENT(IN)    :: LKOGAN ! Logical switch for using Kogan autoconversion of liquid.
+LOGICAL,                  INTENT(IN)    :: LMODICEDEP ! Logical switch for alternative dep/evap of ice
 CHARACTER(LEN=4),         INTENT(IN)    :: HSEDIM ! Sedimentation scheme
-CHARACTER(LEN=4),         INTENT(IN)    :: HSUBG_AUCV
+CHARACTER(LEN=4),         INTENT(IN)    :: HSUBG_AUCV_RC ! Switch for rc->rr Subgrid autoconversion
                                         ! Kind of Subgrid autoconversion method
 LOGICAL,                  INTENT(IN)    :: OWARM   ! .TRUE. allows raindrops to
                                                    !   form by warm processes
@@ -203,14 +209,14 @@ REAL,                     INTENT(IN)    :: PTSTEP  ! Double Time step
                                                    ! (single if cold start)
 INTEGER,                  INTENT(IN)    :: KRR     ! Number of moist variable
 !
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDZZ    ! Layer thikness (m)
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDZZ    ! Layer thickness (m)
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ  ! Dry density * Jacobian
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF! Reference density
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF ! Reference Exner function
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PPABST  ! absolute pressure at t
 !
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCIT    ! Pristine ice n.c. at t
-REAL, DIMENSION(:,:,:),     INTENT(IN)  :: PCLDFR! Convective Mass Flux Cloud fraction
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCLDFR  ! Cloud fraction
 !
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT    ! Theta at time t
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRVT    ! Water vapor m.r. at t
@@ -220,6 +226,15 @@ REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRIT    ! Pristine ice m.r. at t
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRGT    ! Graupel/hail m.r. at t
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PSIGS   ! Sigma_s at t
+! input from aro_adjust / condensation with OCND2, dummy if OCND2 = F
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PICLDFR ! ice cloud fraction
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PWCLDFR ! water or mixed-phase cloud fraction
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PSSIO   ! Super-saturation with respect to ice in the  
+                                                   ! supersaturated fraction
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PSSIU   ! Sub-saturation with respect to ice in the  
+                                                   ! subsaturated fraction 
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PIFR    ! Ratio cloud ice moist part to dry part 
+! input from aro_adjust / condensation with OCND2 END.
 !
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS    ! Theta source
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRVS    ! Water vapor m.r. source
@@ -236,15 +251,14 @@ REAL, DIMENSION(:,:), INTENT(INOUT)     :: PINPRS! Snow instant precip
 REAL, DIMENSION(:,:), INTENT(INOUT)     :: PINPRG! Graupel instant precip
 REAL, DIMENSION(:,:), INTENT(IN)        :: PSEA ! Sea Mask
 REAL, DIMENSION(:,:), INTENT(IN)        :: PTOWN! Fraction that is town
-REAL, DIMENSION(:,:,:), OPTIONAL,  INTENT(IN)    :: PRHT    ! Hail m.r. at t
-REAL, DIMENSION(:,:,:), OPTIONAL,  INTENT(INOUT) :: PRHS    ! Hail m.r. source
-REAL, DIMENSION(:,:), OPTIONAL, INTENT(INOUT)     :: PINPRH! Hail instant precip
-REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(OUT)   :: PFPR ! upper-air precipitation fluxes
-TYPE(TYP_DDH), INTENT(INOUT) :: YDDDH
-TYPE(TLDDH), INTENT(IN) :: YDLDDH
-TYPE(TMDDH), INTENT(IN) :: YDMDDH
-
-TYPE(TSPP_CONFIG_MPA), OPTIONAL, INTENT(IN)       :: YSPP_ICENU,YSPP_KGN_ACON,YSPP_KGN_SBGR
+TYPE(TYP_DDH),        INTENT(INOUT)     :: YDDDH
+TYPE(TLDDH),          INTENT(IN)        :: YDLDDH
+TYPE(TMDDH),          INTENT(IN)        :: YDMDDH
+REAL, DIMENSION(:,:), INTENT(IN)        :: PICENU, PKGN_ACON, PKGN_SBGR
+REAL, DIMENSION(:,:,:),   OPTIONAL, INTENT(IN)    :: PRHT    ! Hail m.r. at t
+REAL, DIMENSION(:,:,:),   OPTIONAL, INTENT(INOUT) :: PRHS    ! Hail m.r. source
+REAL, DIMENSION(:,:),     OPTIONAL, INTENT(INOUT) :: PINPRH  ! Hail instant precip
+REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(OUT)   :: PFPR    ! upper-air precipitation fluxes
 
 !
 !*       0.2   Declarations of local variables :
@@ -393,6 +407,8 @@ REAL, DIMENSION(:), ALLOCATABLE &
                   ZSSIU,    & ! Sub-saturation with respect to ice in the 
                               ! sub-saturated fraction  of gridbox 
                   ZW2D,     & ! Factor for subgridscale calculations
+                  ZXW2D,    & ! Ratio cloud ice moist part to dry part 
+                  ZXW2D13,  & ! ZXW2D**0.333 or other expression for LMODICEDEP=T
                   ZCRYSHA,  & ! Ice crystal habit factor 
                   ZCI2S,    & ! factor to turn cloud ice with few lagre crystals into snow
                   ZCOLF,    & ! collision factor cloud liquid to snow / graupel
@@ -406,6 +422,7 @@ REAL, DIMENSION(:), ALLOCATABLE &
                   ZBB3W,    & ! as ZBB3 but for liquid
                   ZAM3,     & ! Meyers IN concentration function
                   ZREDIN,   & ! Reduction of IN concentration between 0 and -25 C
+                  ZTIW,     & ! Wet bulb temperature
                   ZARTMP,   & ! temporary work array
 !                          *******  end logical switch OCND2 *******
                   ZCC,      & ! terminal velocity
@@ -422,19 +439,23 @@ REAL            :: ZINVTSTEP
 REAL            :: ZRVSOLD,ZTSP,&
      &ZRSP,ZRISOLD,ZRSSOLD,ZRGSOLD,& ! Function,old ice 
      &ZRISFRC,ZRSSFRC,ZRGSFRC,ZRFRAC,ZRSA,ZRSTS,ZRSB,ZRSDIF,ZR20,  &
-     &ZRSI,ZXW2D,ZXW2D13,ZTC,ZHU,ZTMP,ZQIMAX,ZDICRIT,ZCITRED23,ZCITRED,ZRCW,ZVT,ZST, &
+     &ZRSI,ZRSW,ZTC,ZHU,ZTMP,ZQIMAX,ZDICRIT,ZCITRED23,ZCITRED,ZRCW,ZVT,ZST, &
      &ZREDGR,ZREDSN, &    ! Possible reduction of the rate of graupel,snow growth
            ZRSPO, &! Mixing ratio for saturation point for
                    ! supersaturated part of gridbox
-           ZRSPU   ! Mixing ratio for saturation point for
-                   ! subsaturated part of gridbox
+           ZRSPU, &! Mixing ratio for saturation point for
+                   ! subsaturated part of gridbox 
+            ZKVO, &! factor used for caluclate maximum mass in the ice
+                   ! distubution. 
+         ZTIMESC   ! Timescale for conversion lagre ice crystals to snow.
+                   ! distubution.
 !    *******  end logical switch OCND2 *******
 
 ! SPP arrays
 REAL, DIMENSION(:), ALLOCATABLE :: ZZICENU,ZZKGN_ACON,ZZKGN_SBGR
-REAL,    DIMENSION(SIZE(PEXNREF,1)) :: ZICENU,ZKGN_ACON,ZKGN_SBGR
-
 
+!  Tuning of sublimation (neg. sublimation)
+REAL            :: ZRDEPSRED, ZRDEPGRED            
 
      !internal fractions etc, finally saturation ratio over ice 'source' value
 
@@ -448,6 +469,8 @@ CHARACTER (LEN=100) :: YCOMMENT   ! Comment string in LFIFM file
 CHARACTER (LEN=16)  :: YRECFM     ! Name of the desired field in LFIFM file
 REAL :: ZCOEFFRCM,ZMU
 LOGICAL LTEST ! Only for test !
+LOGICAL LCHECKNOISE ! Noise check on/off
+LOGICAL LTIW   ! Use TIW for graupel melting ( set by XFRMIN(18) ~ 1)
 !
 !-------------------------------------------------------------------------------
 !
@@ -457,6 +480,7 @@ LOGICAL LTEST ! Only for test !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('RAIN_ICE_OLD',0,ZHOOK_HANDLE)
 LTEST=.FALSE.
+LCHECKNOISE=.TRUE.
 IIB=1+JPHEXT
 IIE=SIZE(PDZZ,1) - JPHEXT
 IJB=1+JPHEXT
@@ -467,113 +491,86 @@ IKT=SIZE(PDZZ,3)
 IKTB=1+JPVEXT
 IKTE=IKT-JPVEXT
 
-
-!ZICENU(:)    = XFRMIN( 9)
-!ZKGN_ACON(:) = XFRMIN(10)
-!ZKGN_SBGR(:) = XFRMIN(11)
-
-IF (PRESENT(YSPP_ICENU)) THEN
- !
- ! Perturb ICENU
- !
- IF (YSPP_ICENU%LPERT) THEN
-  IF (YSPP_ICENU%LLNN_MEAN1.OR.YSPP_ICENU%LLNN_MEAN1_SELF) THEN
-    ZMU = -0.5 * (YSPP_ICENU%CMPERT * YSPP_ICENU%SDEV)**2
-  ELSE
-    ZMU = 0.0
-  ENDIF
-! ZICENU(:) = &
-!   XFRMIN(9)*EXP(ZMU+YSPP_ICENU%CMPERT*YSPP_ICENU%PGP2DSPP(:))
-  WHERE (ZICENU(:) < YSPP_ICENU%CLIP(1) ) ZICENU(:) = YSPP_ICENU%CLIP(1)
-  WHERE (ZICENU(:) > YSPP_ICENU%CLIP(2) ) ZICENU(:) = YSPP_ICENU%CLIP(2)
- ENDIF
-ENDIF
-
-IF (PRESENT(YSPP_KGN_ACON)) THEN
- !
- ! Perturb KGN_ACON
- !
- IF (YSPP_KGN_ACON%LPERT) THEN
-  IF (YSPP_KGN_ACON%LLNN_MEAN1.OR.YSPP_KGN_ACON%LLNN_MEAN1_SELF) THEN
-    ZMU = -0.5 * (YSPP_KGN_ACON%CMPERT * YSPP_KGN_ACON%SDEV)**2
-  ELSE
-    ZMU = 0.0
-  ENDIF
-! ZKGN_ACON(:) = &
-!   XFRMIN(10)*EXP(ZMU+YSPP_KGN_ACON%CMPERT*YSPP_KGN_ACON%PGP2DSPP(:))
-  WHERE (ZKGN_ACON(:) < YSPP_KGN_ACON%CLIP(1) ) ZKGN_ACON(:) = YSPP_KGN_ACON%CLIP(1)
-  WHERE (ZKGN_ACON(:) > YSPP_KGN_ACON%CLIP(2) ) ZKGN_ACON(:) = YSPP_KGN_ACON%CLIP(2)
- ENDIF
-ENDIF
-
-IF (PRESENT(YSPP_KGN_SBGR)) THEN
- !
- ! Perturb KGN_SBGR
- !
- IF (YSPP_KGN_SBGR%LPERT) THEN
-  IF (YSPP_KGN_SBGR%LLNN_MEAN1.OR.YSPP_KGN_SBGR%LLNN_MEAN1_SELF) THEN
-    ZMU = -0.5 * (YSPP_KGN_SBGR%CMPERT * YSPP_KGN_SBGR%SDEV)**2
-  ELSE
-    ZMU = 0.0
-  ENDIF
-! ZKGN_SBGR(:) = &
-!   XFRMIN(11)*EXP(ZMU+YSPP_KGN_SBGR%CMPERT*YSPP_KGN_SBGR%PGP2DSPP(:))
-  WHERE (ZKGN_SBGR(:) < YSPP_KGN_SBGR%CLIP(1) ) ZKGN_SBGR(:) = YSPP_KGN_SBGR%CLIP(1)
-  WHERE (ZKGN_SBGR(:) > YSPP_KGN_SBGR%CLIP(2) ) ZKGN_SBGR(:) = YSPP_KGN_SBGR%CLIP(2)
- ENDIF
-ENDIF
-
 !
 !*       1.2     COMPUTE SOME CONSTANT PARAMETERS 
 !
 ZINVTSTEP=1./PTSTEP
 
-ZXW2D = 10.       ! ratio of cloud ice water mixing ratio wet to dry
-                  ! part of a gridbox
-ZXW2D13 = ZXW2D**0.333
  
 ZCITRED = 0.1     ! ratio of ice crystal concentration wet to dry
                   ! part of a gridbox
+ZDICRIT = XFRMIN(15)  ! Critical diameter of ice crystal to define what 
+                      ! is cloud ice and what is snow (m)
+
 ZCITRED23 = ZCITRED**0.667 
+IF (LMODICEDEP) THEN
+  ZCITRED = 1.
+  ZTIMESC = XFRMIN(14)
+  ZDICRIT = (700.*XPI/XAI/6.)**(1./XBI)*ZDICRIT**(3./XBI) ! from spherical diameter to maximum diameter
+  ZCITRED23 = ZCITRED**(1.+ XLBEXI)
+  ZKVO      = ((XALPHAI*XNUI + XBI -1.)/XALPHAI)**(1./XALPHAI)
+  ZKVO =  ZKVO/ZDICRIT/ZTIMESC
+  PIFR = 1.
+ENDIF
 
-ZDICRIT = 0.0001  ! Critical diameter of ice crystal to define what 
-                  ! is cloud ice and what is snow (m)
 ZREDGR  = 1.      ! Tuning of the deposition of graupel, 1. is ref. value 
 
-ZREDSN  = 1.      ! Tuning of the deposition of graupel, 1. is ref. value
+ZREDSN  = 1.      ! Tuning of the deposition of snow, 1. is ref. value
 
 IF(OCND2) THEN
-   ZREDGR  = 0.25 ! Tuning factor, may be /= 1. 
-   ZREDSN  = 0.1  ! Tuning factor, may be /= 1.
+   IF (.NOT. LMODICEDEP) THEN 
+      ZREDGR  = XFRMIN(39)  ! Tuning factor, may be /= 1.
+      ZREDSN  = XFRMIN(40)  ! Tuning factor, may be /= 1.
+   ENDIF
 ENDIF
 
+LTIW=.FALSE.
+IF (NINT(XFRMIN(18)) == 1) LTIW=.TRUE.
+
+ZRDEPSRED = XRDEPSRED
+ZRDEPGRED = XRDEPGRED
+
+
 !
 !*       1.3    COMPUTE THE DROPLET NUMBER CONCENTRATION 
 !   	        ----------------------------------------
-!         (Do it alreay here, since also used with OCND2=T )
+!         (Do it already here, since also used with OCND2=T )
 
 IF (OSEDIC.OR.OCND2) THEN
    ZRAY(:,:,:)   = 0.
    ZZZZ(:,:,IKTE)   = PDZZ(:,:,IKTE)*0.5
    ZZZT(:,:,IKTE)   = PDZZ(:,:,IKTE)
-   ZCONC_TMP(:,:)=PSEA(:,:)*XCONC_SEA+(1.-PSEA(:,:))*XCONC_LAND
-
-   DO JK=IKTB,IKTE
-      ZLBC(:,:,JK)   = PSEA(:,:)*XLBC(2)+(1.-PSEA(:,:))*XLBC(1)
-      ZFSEDC(:,:,JK) = (PSEA(:,:)*XFSEDC(2)+(1.-PSEA(:,:))*XFSEDC(1))
-      ZFSEDC(:,:,JK) = MAX(MIN(XFSEDC(1),XFSEDC(2)),ZFSEDC(:,:,JK))
-      ZCONC3D(:,:,JK)= (1.-PTOWN(:,:))*ZCONC_TMP(:,:)+PTOWN(:,:)*XCONC_URBAN
-      ZRAY(:,:,JK)   = 0.5*((1.-PSEA(:,:))*GAMMA(XNUC+1.0/XALPHAC)/(GAMMA(XNUC)) + &
+   IF (XFRMIN(26)>0.001) THEN ! Use alternative concentration given by (XFRMIN(26)
+      ZCONC_TMP(:,:) = XFRMIN(26)
+      DO JK=IKTB,IKTE
+         ZLBC(:,:,JK)   = 0.5* (XLBC(2)+XLBC(1)) ! Assume "average" distr. func for simplicity
+         ZFSEDC(:,:,JK) = 0.5* (XFSEDC(2)+XFSEDC(1))
+         ZFSEDC(:,:,JK) = MAX(MIN(XFSEDC(1),XFSEDC(2)),ZFSEDC(:,:,JK))
+         ZCONC3D(:,:,JK)= ZCONC_TMP(:,:)*PPABST(:,:,JK)/XP00 ! Let it be diluted with decreasing pressure
+         ZRAY(:,:,JK)   = 0.5*( 0.5*GAMMA(XNUC+1.0/XALPHAC)/(GAMMA(XNUC)) + &
+           0.5*GAMMA(XNUC2+1.0/XALPHAC2)/(GAMMA(XNUC2)))
+      ENDDO
+   ELSE
+     ZCONC_TMP(:,:)=PSEA(:,:)*XCONC_SEA+(1.-PSEA(:,:))*XCONC_LAND
+
+     DO JK=IKTB,IKTE
+        ZLBC(:,:,JK)   = PSEA(:,:)*XLBC(2)+(1.-PSEA(:,:))*XLBC(1)
+        ZFSEDC(:,:,JK) = (PSEA(:,:)*XFSEDC(2)+(1.-PSEA(:,:))*XFSEDC(1))
+        ZFSEDC(:,:,JK) = MAX(MIN(XFSEDC(1),XFSEDC(2)),ZFSEDC(:,:,JK))
+        ZCONC3D(:,:,JK)= (1.-PTOWN(:,:))*ZCONC_TMP(:,:)+PTOWN(:,:)*XCONC_URBAN
+        ZRAY(:,:,JK)   = 0.5*((1.-PSEA(:,:))*GAMMA(XNUC+1.0/XALPHAC)/(GAMMA(XNUC)) + &
            PSEA(:,:)*GAMMA(XNUC2+1.0/XALPHAC2)/(GAMMA(XNUC2)))
-   END DO
+     ENDDO
+   ENDIF
 
+   ZCONC3D(:,:,IKTE)= ZCONC3D(:,:,IKTE)*MAX(0.001,XFRMIN(22))
    ZRAY(:,:,:)      = MAX(1.,ZRAY(:,:,:))
-   ZLBC(:,:,:)      = MAX(MIN(XLBC(1),XLBC(2)),ZLBC(:,:,:)) 
+   ZLBC(:,:,:)      = MAX(MIN(XLBC(1),XLBC(2)),ZLBC(:,:,:))
 
    DO JK=IKTE-1,IKTB,-1
      ZZZT(:,:,JK) = ZZZT(:,:,JK+1) + PDZZ(:,:,JK) 
      ZZZZ(:,:,JK) = ZZZT(:,:,JK) - 0.5*PDZZ(:,:,JK)
-   END DO
+   ENDDO
 ENDIF
 
 CALL RAIN_ICE_NUCLEATION
@@ -584,25 +581,45 @@ CALL RAIN_ICE_NUCLEATION
 !
 GMICRO(:,:,:) = .FALSE.
 
- IF ( KRR == 7 ) THEN
-  GMICRO(IIB:IIE,IJB:IJE,IKTB:IKTE) =                          &
+IF (OCND2) THEN
+  IF ( KRR == 7 ) THEN
+    GMICRO(IIB:IIE,IJB:IJE,IKTB:IKTE) =                           &
+                PSSIO(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(12)  .OR. &
+                PRCT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(13)   .OR. &
+                PRRT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(13)   .OR. &
+                PRIT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(13)   .OR. &
+                PRST(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(13)   .OR. &
+                PRGT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(13)   .OR. &
+                PRHT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(13)
+  ELSEIF ( KRR == 6 ) THEN
+    GMICRO(IIB:IIE,IJB:IJE,IKTB:IKTE) =                           &
+                PSSIO(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(12)  .OR. &
+                PRCT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(13)   .OR. &
+                PRRT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(13)   .OR. &
+                PRIT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(13)   .OR. &
+                PRST(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(13)   .OR. &
+                PRGT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XFRMIN(13)
+  ENDIF
+ELSE
+  IF ( KRR == 7 ) THEN
+    GMICRO(IIB:IIE,IJB:IJE,IKTB:IKTE) =                        &
                 PRCT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(2) .OR. &
                 PRRT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(3) .OR. &
                 PRIT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(4) .OR. &
                 PRST(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(5) .OR. &
                 PRGT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(6) .OR. &
                 PRHT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(7)
- ELSE IF( KRR == 6 ) THEN
-  GMICRO(IIB:IIE,IJB:IJE,IKTB:IKTE) =                          &
+  ELSEIF ( KRR == 6 ) THEN
+    GMICRO(IIB:IIE,IJB:IJE,IKTB:IKTE) =                        &
                 PRCT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(2) .OR. &
                 PRRT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(3) .OR. &
                 PRIT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(4) .OR. &
                 PRST(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(5) .OR. &
                 PRGT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(6)
- END IF
-
+  ENDIF
+ENDIF
 IMICRO = COUNTJV( GMICRO(:,:,:),I1(:),I2(:),I3(:))
-IF( IMICRO >= 0 ) THEN
+IF ( IMICRO >= 0 ) THEN
   ALLOCATE(ZRVT(IMICRO))
   ALLOCATE(ZRCT(IMICRO))
   ALLOCATE(ZRRT(IMICRO))
@@ -639,23 +656,39 @@ IF( IMICRO >= 0 ) THEN
   ALLOCATE(ZCOLF(IMICRO))
   ALLOCATE(ZACRF(IMICRO))
   ALLOCATE(ZCONCM(IMICRO))
+  ALLOCATE(ZZKGN_ACON(IMICRO))
+  ALLOCATE(ZZKGN_SBGR(IMICRO))
+  IF (LTIW) ALLOCATE(ZTIW(IMICRO))
   IF (OCND2) THEN
-     ALLOCATE(ZZZ(IMICRO))
-     ALLOCATE(ZDZ(IMICRO))
+     ALLOCATE(ZESI(IMICRO))
+     ALLOCATE(ZESW(IMICRO))
      ALLOCATE(ZSIFRC(IMICRO))
      ALLOCATE(ZSSIO(IMICRO))
      ALLOCATE(ZSSIU(IMICRO))
      ALLOCATE(ZZWC(IMICRO))
      ALLOCATE(ZW2D(IMICRO))
+     ALLOCATE(ZXW2D(IMICRO))
+     ALLOCATE(ZXW2D13(IMICRO))
      ALLOCATE(ZCRYSHA(IMICRO))
      ALLOCATE(ZCI2S(IMICRO))
-     ALLOCATE(ZARTMP(IMICRO))
+     IF (LTEST) ALLOCATE(ZARTMP(IMICRO))
      ALLOCATE(ZAA2(IMICRO))
      ALLOCATE(ZBB3(IMICRO))
      ALLOCATE(ZAA2W(IMICRO))
      ALLOCATE(ZBB3W(IMICRO))
-     ALLOCATE(ZESI(IMICRO))
-     ALLOCATE(ZESW(IMICRO))
+  ENDIF
+  IF (OCND2) THEN
+     IF (LMODICEDEP) THEN
+        DO JL=1,IMICRO
+           ZXW2D(JL) = PIFR(I1(JL),I2(JL),I3(JL))
+           ZXW2D13(JL)=ZXW2D(JL)**(-XLBEXI)
+        ENDDO
+     ELSE
+        DO JL=1,IMICRO
+           ZXW2D(JL) = PIFR(I1(JL),I2(JL),I3(JL))
+           ZXW2D13(JL)=ZXW2D(JL)**0.333
+        ENDDO
+     ENDIF
   ENDIF
 
   DO JL=1,IMICRO
@@ -668,7 +701,7 @@ IF( IMICRO >= 0 ) THEN
     IF ( KRR == 7 ) ZRHT(JL) = PRHT(I1(JL),I2(JL),I3(JL))
     ZCIT(JL) = PCIT(I1(JL),I2(JL),I3(JL))
     ZCF(JL) = PCLDFR(I1(JL),I2(JL),I3(JL))
-    IF ( HSUBG_AUCV == 'PDF ' .AND. CSUBG_PR_PDF == 'SIGM' ) THEN
+    IF ( HSUBG_AUCV_RC == 'PDF ' .AND. CSUBG_PR_PDF == 'SIGM' ) THEN
       ZSIGMA_RC(JL) = PSIGS(I1(JL),I2(JL),I3(JL)) * 2.
     END IF
     ZRVS(JL) = PRVS(I1(JL),I2(JL),I3(JL))
@@ -689,6 +722,9 @@ IF( IMICRO >= 0 ) THEN
     ZCOLF(JL)=1. ! No change from orignal when  OCND2 = .FALSE.
     ZACRF(JL)=1. !    "      "       "            "       "
     ZCONCM(JL)=ZCONC3D(I1(JL),I2(JL),I3(JL))*0.000001 ! From m-3 to cm-3
+    IF (LTIW) ZTIW(JL)=TIWMX_TAB(ZPRES(JL),ZZT(JL), ZRVS(JL)*PTSTEP,0._JPRB,ZRSP,ZRSW,0.1_JPRB)
+    ZZKGN_ACON(JL)=PKGN_ACON(I1(JL),I2(JL))
+    ZZKGN_SBGR(JL)=PKGN_SBGR(I1(JL),I2(JL))
     IF (OCND2) THEN
        ZESI(JL) = ESATI(ZZT(JL))
        ZESW(JL) = ESATW(ZZT(JL))
@@ -696,8 +732,10 @@ IF( IMICRO >= 0 ) THEN
        ZBB3(JL) = BB3(ZZT(JL))
        ZAA2W(JL)= AA2W(ZZT(JL))
        ZBB3W(JL)= BB3W(ZZT(JL))
-       ZZZ(JL) = ZZZZ(I1(JL),I2(JL),I3(JL))       
-       ZDZ(JL) = PDZZ(I1(JL),I2(JL),I3(JL))
+       ZSIFRC(JL) = PICLDFR(I1(JL),I2(JL),I3(JL))
+       ZSSIO(JL) = PSSIO(I1(JL),I2(JL),I3(JL))
+       ZSSIU(JL) = PSSIU(I1(JL),I2(JL),I3(JL))
+       ZW2D(JL) = 1./(ZXW2D(JL)*ZSIFRC(JL) + 1. -ZSIFRC(JL))
        ZCOLF(JL)=0.00001
        ZACRF(JL)=0.00001
        IF(ZRCT(JL)>1.0E-10)THEN
@@ -768,7 +806,7 @@ IF( IMICRO >= 0 ) THEN
   !Cloud water split between high and low content part is done here
   !according to autoconversion option
   ZRCRAUTC(:)   = XCRIAUTC/ZRHODREF(:) ! Autoconversion rc threshold
-  IF (HSUBG_AUCV == 'NONE') THEN
+  IF (HSUBG_AUCV_RC == 'NONE') THEN
     !Cloud water is entirely in low or high part
     WHERE (ZRCT(:) > ZRCRAUTC(:))
       ZHLC_HCF(:) = 1.
@@ -790,7 +828,7 @@ IF( IMICRO >= 0 ) THEN
       ZRF(:)      = 0.
     END WHERE
 
-  ELSEIF (HSUBG_AUCV == 'CLFR') THEN
+  ELSEIF (HSUBG_AUCV_RC == 'CLFR') THEN
     !Cloud water is only in the cloudy part and entirely in low or high part
     WHERE (ZCF(:) > 0. )
       WHERE (ZRCT(:)/ZCF(:) > ZRCRAUTC(:))
@@ -820,7 +858,7 @@ IF( IMICRO >= 0 ) THEN
       ZRF(:)      = 0.
     END WHERE
 
-  ELSEIF (HSUBG_AUCV == 'PDF ') THEN
+  ELSEIF (HSUBG_AUCV_RC == 'PDF ') THEN
     !Cloud water is split between high and low part according to a PDF
     !    'HLCRECTPDF'    : rectangular PDF form
     !    'HLCTRIANGPDF'  : triangular PDF form
@@ -948,9 +986,9 @@ IF( IMICRO >= 0 ) THEN
       STOP 'wrong CSUBG_PR_PDF case'
     ENDIF
   ELSE
-    !wrong HSUBG_AUCV case
+    !wrong HSUBG_AUCV_RC case
     CALL ABORT
-    STOP 'wrong HSUBG_AUCV case'
+    STOP 'wrong HSUBG_AUCV_RC case'
   ENDIF
 
   !Diagnostic of precipitation fraction
@@ -1022,7 +1060,7 @@ IF( IMICRO >= 0 ) THEN
 !
   CALL RAIN_ICE_FAST_RI
 
-  IF(OCND2)THEN
+  IF (OCND2.AND.LCHECKNOISE) THEN
 !*       8     This check is mainly for noise reduction:
 !              ----------------------------------------
 ! Do not override saturation point over ice for temperatures below freezing. 
@@ -1174,23 +1212,25 @@ IF( IMICRO >= 0 ) THEN
   DEALLOCATE(ZCOLF)
   DEALLOCATE(ZACRF)
   DEALLOCATE(ZCONCM)
+  DEALLOCATE(ZZKGN_ACON,ZZKGN_SBGR)
+  IF (LTIW) DEALLOCATE(ZTIW)
   IF (OCND2) THEN
-     DEALLOCATE(ZARTMP)
-     DEALLOCATE(ZZZ)
-     DEALLOCATE(ZDZ)
+     DEALLOCATE(ZESI)
+     DEALLOCATE(ZESW)
      DEALLOCATE(ZSIFRC)
      DEALLOCATE(ZSSIO)
      DEALLOCATE(ZSSIU)
      DEALLOCATE(ZZWC)
      DEALLOCATE(ZW2D)
+     DEALLOCATE(ZXW2D)
+     DEALLOCATE(ZXW2D13)
      DEALLOCATE(ZCRYSHA)
-     DEALLOCATE(ZCI2S) 
+     DEALLOCATE(ZCI2S)
      DEALLOCATE(ZAA2)
      DEALLOCATE(ZBB3)
      DEALLOCATE(ZAA2W)
      DEALLOCATE(ZBB3W)
-     DEALLOCATE(ZESI)
-     DEALLOCATE(ZESW)
+     IF (LTEST) DEALLOCATE(ZARTMP)
   ENDIF
 
 !
@@ -2030,6 +2070,12 @@ END DO
    PRIS(:,:,:) = PRIS(:,:,:) * ZINVTSTEP
 
 
+#ifdef REPRO48
+   PINPRS(:,:) = 0.
+#else
+   PINPRS(:,:) = ZWSED(:,:,IKB)/XRHOLW
+#endif
+
 !
 !*       2.4   for aggregates/snow
 !
@@ -2085,7 +2131,7 @@ END DO
      ENDDO
    ENDIF
 
-   PINPRS(:,:) = ZWSED(:,:,IKB)/XRHOLW                        ! in m/s
+   PINPRS(:,:) = ZWSED(:,:,IKB)/XRHOLW    +  PINPRS(:,:)    ! in m/s (add ice fall)
 
    PRSS(:,:,:) = PRSS(:,:,:) * ZINVTSTEP
 
@@ -2262,16 +2308,11 @@ IF( INEGT >= 1 ) THEN
   ALLOCATE(ZCIT(INEGT)) ;
   ALLOCATE(ZZT(INEGT))  ;
   ALLOCATE(ZPRES(INEGT));
+  ALLOCATE(ZZICENU(INEGT));
   IF (OCND2) THEN
      ALLOCATE(ZZZ(INEGT))
-     ALLOCATE(ZDZ(INEGT))
      ALLOCATE(ZSIFRC(INEGT))
-     ALLOCATE(ZSSIO(INEGT))
-     ALLOCATE(ZSSIU(INEGT))
-     ALLOCATE(ZW2D(INEGT))
-     ALLOCATE(ZRVS(INEGT))
      ALLOCATE(ZAM3(INEGT)) 
-     ALLOCATE(ZARTMP(INEGT))
      ALLOCATE(ZREDIN(INEGT))
      ALLOCATE(ZESI(INEGT)) 
      ALLOCATE(ZESW(INEGT))
@@ -2281,14 +2322,14 @@ IF( INEGT >= 1 ) THEN
     ZCIT(JL) = PCIT(I1(JL),I2(JL),I3(JL))
     ZZT(JL) = ZT(I1(JL),I2(JL),I3(JL))
     ZPRES(JL) = PPABST(I1(JL),I2(JL),I3(JL))
+    ZZICENU(JL) = PICENU(I1(JL),I2(JL))
     IF (OCND2) THEN
-       ZRVS(JL)= PRVS(I1(JL),I2(JL),I3(JL))
        ZZZ(JL) = ZZZZ(I1(JL),I2(JL),I3(JL))
-       ZDZ(JL) = PDZZ(I1(JL),I2(JL),I3(JL))
        ZESI(JL) = ESATI(ZZT(JL))
        ZESW(JL) = ESATW(ZZT(JL))
-       ZAM3(JL) = AM3(ZZT(JL))
+       ZAM3(JL) = AM3(MAX(XFRMIN(27),ZZT(JL))) ! Avoid too high IN for very low temp.
        ZREDIN(JL) = REDIN(ZZT(JL))
+       ZSIFRC(JL) = PICLDFR(I1(JL),I2(JL),I3(JL))
     ENDIF
   ENDDO
   ALLOCATE(ZZW(INEGT))
@@ -2320,12 +2361,13 @@ IF( INEGT >= 1 ) THEN
   ZZW(:) = 0.0
   ZSSI(:) = MIN( ZSSI(:), ZUSW(:) ) ! limitation of SSi according to SSw=0
   IF(OCND2)THEN
-     ZARTMP(:) = -1.
-     CALL ICECLOUD(INEGT,ZPRES,ZZZ,ZDZ,ZZT,ZRVS,PTSTEP,-1.,ZARTMP, &
-          &        ZXW2D,ZSIFRC,ZSSIO,ZSSIU,ZW2D,ZZW)  !note: ZZW is dummy here, not used
-
-     ZZW(:) = ZREDIN(:)* MAX(0.1,((20000.- MIN(20000.,ZZZ(:)))/20000.)**4) &
+     IF (LMODICEDEP) THEN
+       ZZW(:) = 5.*EXP(0.304*(XTT-ZZT(:)))
+       ZZW(:) = MIN(1.,MAX(ZSSI(:)*10.,0.01))*ZZW(:)
+     ELSE
+       ZZW(:) = ZREDIN(:)* MAX(0.1,((20000.- MIN(20000.,ZZZ(:)))/20000.)**4) &
           &   *ZAM3(:)*(0.0001 + 0.9999*ZSIFRC(:))
+     ENDIF
   ELSE
      WHERE( (ZZT(:)<XTT-5.0) .AND. (ZSSI(:)>0.0) )
         ZZW(:) = XNU20 * EXP( XALPHA2*ZSSI(:)-XBETA2 )
@@ -2336,8 +2378,7 @@ IF( INEGT >= 1 ) THEN
              ( ZSSI(:)/ZUSW(:) )**XALPHA1 )
      END WHERE
   ENDIF
-
-  ZZW(:) = ZZW(:) - ZCIT(:)
+  ZZW(:) = ZZW(:)*ZZICENU(:) - ZCIT(:)
   IF( MAXVAL(ZZW(:)) > 0.0 ) THEN
 !
 !*       3.1.2   update the r_i and r_v mixing ratios
@@ -2371,17 +2412,12 @@ IF( INEGT >= 1 ) THEN
   DEALLOCATE(ZZT)
   DEALLOCATE(ZCIT)
   DEALLOCATE(ZRVT)
+  DEALLOCATE(ZZICENU)
   IF (OCND2) THEN
      DEALLOCATE(ZZZ)
-     DEALLOCATE(ZDZ)
      DEALLOCATE(ZSIFRC)
-     DEALLOCATE(ZSSIO)
-     DEALLOCATE(ZSSIU)
-     DEALLOCATE(ZW2D)
-     DEALLOCATE(ZRVS)
      DEALLOCATE(ZAM3)
      DEALLOCATE(ZREDIN)     
-     DEALLOCATE(ZARTMP)
      DEALLOCATE(ZESI)
      DEALLOCATE(ZESW)
   ENDIF
@@ -2395,6 +2431,80 @@ IF (LBUDGET_RI) CALL BUDGET_DDH (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HENU_BU_RRI',YDDDH
 !
   IF (LHOOK) CALL DR_HOOK('RAIN_ICE_OLD:RAIN_ICE_NUCLEATION',1,ZHOOK_HANDLE)
   END SUBROUTINE RAIN_ICE_NUCLEATION
+      REAL FUNCTION ICENUMBER2 (Q_ICE, T3D)
+
+      IMPLICIT NONE
+      REAL, PARAMETER:: ICE_DENSITY = 890.0
+      REAL, PARAMETER:: PI = 3.1415926536
+      INTEGER IDX_REI
+      REAL CORR, REICE, DEICE, Q_ICE, T3D
+      DOUBLE PRECISION LAMBDA
+
+!+---+-----------------------------------------------------------------+
+!..Table of lookup values of radiative effective radius of ice crystals
+!.. as a function of Temperature from -94C to 0C.  Taken from WRF RRTMG
+!.. radiation code where it is attributed to Jon Egill Kristjansson
+!.. and coauthors.
+!+---+-----------------------------------------------------------------+
+
+      REAL RETAB(95)
+      DATA RETAB /                                                      &
+         5.92779, 6.26422, 6.61973, 6.99539, 7.39234,                   &
+         7.81177, 8.25496, 8.72323, 9.21800, 9.74075, 10.2930,          &
+         10.8765, 11.4929, 12.1440, 12.8317, 13.5581, 14.2319,          &
+         15.0351, 15.8799, 16.7674, 17.6986, 18.6744, 19.6955,          &
+         20.7623, 21.8757, 23.0364, 24.2452, 25.5034, 26.8125,          &
+         27.7895, 28.6450, 29.4167, 30.1088, 30.7306, 31.2943,          &
+         31.8151, 32.3077, 32.7870, 33.2657, 33.7540, 34.2601,          &
+         34.7892, 35.3442, 35.9255, 36.5316, 37.1602, 37.8078,          &
+         38.4720, 39.1508, 39.8442, 40.5552, 41.2912, 42.0635,          &
+         42.8876, 43.7863, 44.7853, 45.9170, 47.2165, 48.7221,          &
+         50.4710, 52.4980, 54.8315, 57.4898, 60.4785, 63.7898,          &
+         65.5604, 71.2885, 75.4113, 79.7368, 84.2351, 88.8833,          &
+         93.6658, 98.5739, 103.603, 108.752, 114.025, 119.424,          &
+         124.954, 130.630, 136.457, 142.446, 148.608, 154.956,          &
+         161.503, 168.262, 175.248, 182.473, 189.952, 197.699,          &
+         205.728, 214.055, 222.694, 231.661, 240.971, 250.639/
+
+!+---+-----------------------------------------------------------------+
+!..From the model 3D temperature field, subtract 179K for which
+!.. index value of retab as a start.  Value of corr is for
+!.. interpolating between neighboring values in the table.
+!+---+-----------------------------------------------------------------+
+
+      IDX_REI = INT(T3D-179.)
+      IDX_REI = MIN(MAX(IDX_REI,1),95)
+      CORR = T3D - INT(T3D)
+      REICE = RETAB(IDX_REI)*(1.-CORR) + RETAB(MIN(95,IDX_REI+1))*CORR
+      DEICE = 2.*REICE * 1.E-6
+
+!+---+-----------------------------------------------------------------+
+!..Now we have the final radiative effective size of ice (as function
+!.. of temperature only).  This size represents 3rd moment divided by
+!.. second moment of the ice size distribution, so we can compute a
+!.. number concentration from the mean size and mass mixing ratio.
+!.. The mean (radiative effective) diameter is 3./Slope for an inverse
+!.. exponential size distribution.  So, starting with slope, work
+!.. backwords to get number concentration.
+!+---+-----------------------------------------------------------------+
+
+      LAMBDA = 3.0 / DEICE
+      ICENUMBER2 = Q_ICE * LAMBDA*LAMBDA*LAMBDA / (PI*ICE_DENSITY)
+ 
+!+---+-----------------------------------------------------------------+
+!..Example1: Common ice size coming from Thompson scheme is about 30 microns.
+!.. An example ice mixing ratio could be 0.001 g/kg for a temperature of -50C.
+!.. Remember to convert both into MKS units.  This gives N_ice=357652 per kg.
+!..Example2: Lower in atmosphere at T=-10C matching ~162 microns in retab,
+!.. and assuming we have 0.1 g/kg mixing ratio, then N_ice=28122 per kg,
+!.. which is 28 crystals per liter of air if the air density is 1.0.
+!+---+-----------------------------------------------------------------+
+
+      RETURN
+      END
+
+!
+!
 !
 !-------------------------------------------------------------------------------
 !
@@ -2504,6 +2614,9 @@ IMPLICIT NONE
              ( 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(:)))
+        WHERE (ZZW(:) < 0.0 )
+          ZZW(:) = ZZW(:) * ZRDEPSRED 
+        END WHERE  
         ZRSS(:) = ZRSS(:) + ZZW(:)
         ZRVS(:) = ZRVS(:) - ZZW(:)
         ZTHS(:) = ZTHS(:) + ZZW(:)*ZLSFACT(:)
@@ -2551,14 +2664,11 @@ IMPLICIT NONE
     ZRIS(:)  = ZRIS(:)  - ZZW(:)
   END WHERE
 
-  IF(OCND2)THEN ! 3.4.5 B: 
+  IF (OCND2 .AND. .NOT. LMODICEDEP) THEN ! 3.4.5 B: 
                 ! Turn ice crystals lagrer than a precribed size into snow:
                 ! (For the moment sperical ice crystals are assumed)
      ALLOCATE(ZBFT(IMICRO))
 
-     ZZW(:)=0._JPRB
-     ZZW(:) = MIN(ZPRES(:)/2._JPRB, ZESI(:))             ! es_i, safety limitation
-
      WHERE (  (ZRIS(:)>0.0_JPRB) .AND.(ZSSI(:)>0.001_JPRB) )
         ZBFT(:) =   0.5_JPRB*87.5_JPRB*(ZDICRIT)**2*ZAI(:)/ ZSSI(:)
         ZBFT(:) =   PTSTEP/ MAX(PTSTEP,ZBFT(:)*2._JPRB)
@@ -2569,6 +2679,33 @@ IMPLICIT NONE
      DEALLOCATE(ZBFT)
   ENDIF
 
+  IF (OCND2 .AND. LMODICEDEP) THEN ! 3.4.5 B: 
+                ! Turn ice to snow if ice crystal distrubution is such that
+                ! the ice crystal diameter for the (mass x N_i) maximum 
+                ! is lagrer than a precribed size. 
+                ! (ZDICRIT) The general gamma function is assumed
+     ALLOCATE(ZBFT(IMICRO))
+     DO JL=1,IMICRO
+        ZZW2(JL) = &
+        MAX(ZCIT(JL),ICENUMBER2(ZRIS(JL)*PTSTEP,ZZT(JL))*ZRHODREF(JL))
+     ENDDO
+
+     WHERE (  ZRIS(:)>XFRMIN(13) .AND.ZCIT(:) > 0. )
+           ZZW2(:) = MIN(1.E8,XLBI*( ZRHODREF(:)*ZRIS(:)* PTSTEP/ZZW2(:) )**XLBEXI) ! LAMBDA for ICE
+           ZBFT(:) = 1. - 0.5**( ZKVO /ZZW2(:))
+           ZBFT(:) = MIN(0.9*ZRIS(:)*PTSTEP, ZBFT(:)*ZRIS(:)*PTSTEP)
+           ZRSS(:) =   ZRSS(:)  + ZBFT(:)
+           ZRIS(:) =   ZRIS(:)  - ZBFT(:)
+     END WHERE
+!     DO JL=1,IMICRO
+
+!       IF(ZRIS(JL)>XFRMIN(13) .AND.ZCIT(JL) > 0. ) THEN
+!        print*,'345JL', ZZW2(JL),ZRIS(JL),ZBFT(JL),ZZT(JL)-XTT
+!       ENDIF
+!    ENDDO
+     DEALLOCATE(ZBFT)
+  ENDIF
+
   DEALLOCATE(ZCRIAUTI)
   IF (LBUDGET_RI) CALL BUDGET_DDH (                                                 &
                      UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),    &
@@ -2580,40 +2717,33 @@ IMPLICIT NONE
 !*       3.4.6  compute the deposition on r_g: RVDEPG
 !
 !
-
   ZZW2(:) = 0.0
-  IF(LGRSN) ZZW2(:) = MAX(0., MIN(1., (1.0E-7 - ZRGS(:))/1.0E-7))* &
-        &       MAX(0.,MIN(1.,ZSSI(:)/0.15))
-  
+  IF (XFRMIN(5)> 1.0E-12 .AND. XFRMIN(6) > 0.01) &
+        &        ZZW2(:) = MAX(0., MIN(1., (XFRMIN(5) - ZRGS(:))/XFRMIN(5)))* &
+        &	MAX(0.,MIN(1.,ZSSI(:)/XFRMIN(6)))
+
+
   WHERE ( ZRGT(:)>0.0 )
     ZLBDAG(:)  = XLBG*( ZRHODREF(:)*MAX( ZRGT(:),XRTMIN(6) ) )**XLBEXG
   END WHERE
   ZZW(:) = 0.0
-  
-  IF(LGRSN)THEN
-   WHERE ( (ZRGT(:)>XRTMIN(6)) .AND. (ZRGS(:)>0.0) )
+  WHERE ( (ZRGT(:)>XRTMIN(6)) .AND. (ZRGS(:)>0.0) )
     ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*ZAI(:)) ) *                               &
              ( X0DEPG*ZLBDAG(:)**XEX0DEPG + X1DEPG*ZCJ(:)*ZLBDAG(:)**XEX1DEPG )
     ZZW(:) =         MIN( ZRVS(:),ZZW(:)      )*(0.5+SIGN(0.5,ZZW(:))) &
                    - MIN( ZRGS(:),ABS(ZZW(:)) )*(0.5-SIGN(0.5,ZZW(:)))
     ZZW(:)  = ZZW(:)*ZREDGR
+    WHERE (ZZW(:) < 0.0 )
+      ZZW(:)  = ZZW(:) * ZRDEPGRED
+    END WHERE
     ZRSS(:) = (ZZW(:) + ZRGS(:))* ZZW2(:) + ZRSS(:)
     ZRGS(:) = (ZZW(:) + ZRGS(:))*(1. - ZZW2(:))
     ZRVS(:) = ZRVS(:) - ZZW(:)
     ZTHS(:) = ZTHS(:) + ZZW(:)*ZLSFACT(:)
-   END WHERE
-  ELSE
-   WHERE ( (ZRGT(:)>XRTMIN(6)) .AND. (ZRGS(:)>0.0) )
-    ZZW(:) = ( ZSSI(:)/(ZRHODREF(:)*ZAI(:)) ) *                               &
-             ( X0DEPG*ZLBDAG(:)**XEX0DEPG + X1DEPG*ZCJ(:)*ZLBDAG(:)**XEX1DEPG )
-    ZZW(:) =         MIN( ZRVS(:),ZZW(:)      )*(0.5+SIGN(0.5,ZZW(:))) &
-                   - MIN( ZRGS(:),ABS(ZZW(:)) )*(0.5-SIGN(0.5,ZZW(:)))
-    ZZW(:)  = ZZW(:)*ZREDGR
-    ZRGS(:) = ZRGS(:) + ZZW(:)                                                                                                                                                                                    
-    ZRVS(:) = ZRVS(:) - ZZW(:)
-    ZTHS(:) = ZTHS(:) + ZZW(:)*ZLSFACT(:)
-   END WHERE
-  END IF
+  END WHERE
+  WHERE (ZZW(:) < 0.0 )
+    ZZW(:)  = ZZW(:) * ZRDEPGRED
+  END WHERE
  
 
   IF (LBUDGET_TH) CALL BUDGET_DDH (                                                 &
@@ -2644,15 +2774,14 @@ IMPLICIT NONE
 !
 !*       4.2    compute the autoconversion of r_c for r_r production: RCAUTR
 !
-    REAL :: ZINHOMFACT 
     REAL(KIND=JPRB) :: ZHOOK_HANDLE
     IF (LHOOK) CALL DR_HOOK('RAIN_ICE_OLD:RAIN_ICE_WARM',0,ZHOOK_HANDLE)
 
-    ZINHOMFACT=10.
-
-    IF(OCND2)THEN
+    IF (LKOGAN) THEN
        WHERE( ZRCT(:) >  1.0E-8) ! Closely following Kogan autoconversion
-          ZZW(:) = 1350.0*ZINHOMFACT* ZCONCM(:)**(-1.79) * ZRCT(:)**2.47
+          ZZW(:) = 1350.0*ZZKGN_ACON(:)* ZCONCM(:)**(-1.79) * &
+         &  (ZRCT(:)/(MAX(ZZKGN_SBGR(:),ZCF(:))))**2.47
+          ZZW(:) = ZZW(:)*MAX(ZZKGN_SBGR(:),ZCF(:))
           ZZW(:) = MIN( ZRCS(:),ZZW(:))
           ZRCS(:) = ZRCS(:) - ZZW(:)
           ZRRS(:) = ZRRS(:) + ZZW(:)
@@ -2664,7 +2793,7 @@ IMPLICIT NONE
           ZRCS(:) = ZRCS(:) - ZZW(:)
           ZRRS(:) = ZRRS(:) + ZZW(:)
        END WHERE
-    ENDIF 
+    ENDIF
 !
       IF (LBUDGET_RC) CALL BUDGET_DDH (                                               &
                        UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),    &
@@ -2678,7 +2807,7 @@ IMPLICIT NONE
     IF (CSUBG_RC_RR_ACCR=='NONE') THEN
       !CLoud water and rain are diluted over the grid box
       WHERE( ZRCT(:)>XRTMIN(2) .AND. ZRRT(:)>XRTMIN(3) .AND. ZRCS(:)>0.0 )
-        ZZW(:) = MIN( ZRCS(:), XFCACCR * ZRCT(:)                &
+        ZZW(:) = MIN( ZRCS(:), XFCACCR * ZRCT(:)*ZACRF(:)                &
                  * ZLBDAR(:)**XEXCACCR    &
                  * ZRHODREF(:)**(-XCEXVT) )
         ZRCS(:) = ZRCS(:) - ZZW(:)
@@ -2906,27 +3035,15 @@ IMPLICIT NONE
 !
 !        5.1.4  riming of the small sized aggregates
 !
-    IF(OCND2)THEN
-      WHERE ( GRIM(:) )
-        ZZW1(:,1) = MIN( ZRCS(:),                                &
+    WHERE ( GRIM(:) )
+      ZZW1(:,1) = MIN( ZRCS(:),                                &
                      XCRIMSS * ZZW(:) * ZRCT(:)*ZCOLF(:)       & ! RCRIMSS
                                       *   ZLBDAS(:)**XEXCRIMSS &
                                       * ZRHODREF(:)**(-XCEXVT) )
-        ZRCS(:) = ZRCS(:) - ZZW1(:,1)
-        ZRSS(:) = ZRSS(:) + ZZW1(:,1)
-        ZTHS(:) = ZTHS(:) + ZZW1(:,1)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCRIMSS))
-        END WHERE 
-    ELSE
-      WHERE ( GRIM(:) )
-        ZZW1(:,1) = MIN( ZRCS(:),                                &
-                     XCRIMSS * ZZW(:) * ZRCT(:)                  & ! RCRIMSS
-                                      *   ZLBDAS(:)**XEXCRIMSS &
-                                      * ZRHODREF(:)**(-XCEXVT) )
-        ZRCS(:) = ZRCS(:) - ZZW1(:,1)
-        ZRSS(:) = ZRSS(:) + ZZW1(:,1)
-        ZTHS(:) = ZTHS(:) + ZZW1(:,1)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCRIMSS))
-      END WHERE
-    ENDIF
+      ZRCS(:) = ZRCS(:) - ZZW1(:,1)
+      ZRSS(:) = ZRSS(:) + ZZW1(:,1)
+      ZTHS(:) = ZTHS(:) + ZZW1(:,1)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCRIMSS))
+    END WHERE
 !
 !        5.1.5  perform the linear interpolation of the normalized
 !               "XBS"-moment of the incomplete gamma function
@@ -2938,37 +3055,20 @@ IMPLICIT NONE
 !        5.1.6  riming-conversion of the large sized aggregates into graupeln
 !
 !
-    IF(OCND2)THEN
-      WHERE ( GRIM(:) .AND. (ZRSS(:)>0.0) )
-        ZZW1(:,2) = MIN( ZRCS(:),                     &
+    WHERE ( GRIM(:) .AND. (ZRSS(:)>0.0) )
+      ZZW1(:,2) = MIN( ZRCS(:),                     &
                    XCRIMSG * ZRCT(:)*ZCOLF(:)       & ! RCRIMSG
                            *  ZLBDAS(:)**XEXCRIMSG  &
                            * ZRHODREF(:)**(-XCEXVT) &
                            - ZZW1(:,1)              )
-        ZZW1(:,3) = MIN( ZRSS(:),                         &
-                       XSRIMCG * ZLBDAS(:)**XEXSRIMCG   & ! RSRIMCG
-                               * (1.0 - ZZW(:) )/(PTSTEP*ZRHODREF(:)) )
-        ZRCS(:) = ZRCS(:) - ZZW1(:,2)
-        ZRSS(:) = ZRSS(:) - ZZW1(:,3)
-        ZRGS(:) = ZRGS(:) + ZZW1(:,2)+ZZW1(:,3)
-        ZTHS(:) = ZTHS(:) + ZZW1(:,2)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCRIMSG))
-      END WHERE
-    ELSE
-      WHERE ( GRIM(:) .AND. (ZRSS(:)>0.0) )
-        ZZW1(:,2) = MIN( ZRCS(:),                     &
-                   XCRIMSG * ZRCT(:)                  & ! RCRIMSG
-                           *  ZLBDAS(:)**XEXCRIMSG  &
-                           * ZRHODREF(:)**(-XCEXVT) &
-                           - ZZW1(:,1)              )
-        ZZW1(:,3) = MIN( ZRSS(:),                         &
+      ZZW1(:,3) = MIN( ZRSS(:),                         &
                        XSRIMCG * ZLBDAS(:)**XEXSRIMCG   & ! RSRIMCG
                                * (1.0 - ZZW(:) )/(PTSTEP*ZRHODREF(:)) )
-        ZRCS(:) = ZRCS(:) - ZZW1(:,2)
-        ZRSS(:) = ZRSS(:) - ZZW1(:,3)
-        ZRGS(:) = ZRGS(:) + ZZW1(:,2)+ZZW1(:,3)
-       ZTHS(:) = ZTHS(:) + ZZW1(:,2)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCRIMSG))
-      END WHERE
-    ENDIF
+      ZRCS(:) = ZRCS(:) - ZZW1(:,2)
+      ZRSS(:) = ZRSS(:) - ZZW1(:,3)
+      ZRGS(:) = ZRGS(:) + ZZW1(:,2)+ZZW1(:,3)
+      ZTHS(:) = ZTHS(:) + ZZW1(:,2)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCRIMSG))
+    END WHERE
     DEALLOCATE(IVEC2)
     DEALLOCATE(IVEC1)
     DEALLOCATE(ZVEC2)
@@ -3047,9 +3147,9 @@ IMPLICIT NONE
             XLBRACCS2/( ZLBDAS(:)    * ZLBDAR(:)    ) +                  &
             XLBRACCS3/(               (ZLBDAR(:)**2)) )/ZLBDAR(:)**4
       ZZW1(:,4) = MIN( ZRRS(:),ZZW1(:,2)*ZZW(:) )           ! RRACCSS
-      ZRRS(:) = ZRRS(:) - ZZW1(:,4)
-      ZRSS(:) = ZRSS(:) + ZZW1(:,4)
-      ZTHS(:) = ZTHS(:) + ZZW1(:,4)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RRACCSS))
+      ZRRS(:) = ZRRS(:) - ZZW1(:,4)*XFRMIN(7)
+      ZRSS(:) = ZRSS(:) + ZZW1(:,4)*XFRMIN(7)
+      ZTHS(:) = ZTHS(:) + ZZW1(:,4)*(ZLSFACT(:)-ZLVFACT(:))*XFRMIN(7) ! f(L_f*(RRACCSS))
     END WHERE
 !
 !        5.2.4b perform the bilinear interpolation of the normalized
@@ -3084,7 +3184,7 @@ IMPLICIT NONE
     WHERE ( GACC(:) .AND. (ZRSS(:)>0.0) )
       ZZW1(:,2) = MAX( MIN( ZRRS(:),ZZW1(:,2)-ZZW1(:,4) ),0.0 )       ! RRACCSG
     END WHERE
-    WHERE ( GACC(:) .AND. (ZRSS(:)>0.0) .AND. ZZW1(:,2)>0.0 )
+    WHERE ( GACC(:) .AND. (ZRSS(:)>0.0) .AND. ZZW1(:,2)>0.0 .AND. ZRSS(:)>XFRMIN(1)/PTSTEP )
       ZZW1(:,3) = MIN( ZRSS(:),XFSACCRG*ZZW(:)*                     & ! RSACCRG
             ( ZLBDAS(:)**(XCXS-XBS) )*( ZRHODREF(:)**(-XCEXVT-1.) ) &
            *( XLBSACCR1/((ZLBDAR(:)**2)               ) +           &
@@ -3167,7 +3267,7 @@ IMPLICIT NONE
   REAL(KIND=JPRB) :: ZHOOK_HANDLE
   IF (LHOOK) CALL DR_HOOK('RAIN_ICE_OLD:RAIN_ICE_FAST_RG',0,ZHOOK_HANDLE)
   ZZW1(:,3:4) = 0.0
-  WHERE( (ZRIT(:)>XRTMIN(4)) .AND. (ZRRT(:)>XRTMIN(3)) .AND.  &
+  WHERE( (ZRIT(:)>XRTMIN(4) .AND. ZRIT(:)>XFRMIN(2)) .AND. (ZRRT(:)>XRTMIN(3)) .AND.  &
                              (ZRIS(:)>0.0) .AND. (ZRRS(:)>0.0) )
     ZZW1(:,3) = MIN( ZRIS(:),XICFRR * ZRIT(:)                & ! RICFRRG
                                     * ZLBDAR(:)**XEXICFRR    &
@@ -3254,15 +3354,19 @@ IMPLICIT NONE
     END DO
     ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GDRY,FIELD=0.0 )
 !
-    WHERE( GDRY(:) )
-      ZZW1(:,3) = MIN( ZRSS(:),XFSDRYG*ZZW(:)                         & ! RSDRYG
-                                      * EXP( XCOLEXSG*(ZZT(:)-XTT) )  &
-                    *( ZLBDAS(:)**(XCXS-XBS) )*( ZLBDAG(:)**XCXG )    &
-                    *( ZRHODREF(:)**(-XCEXVT-1.) )                    &
-                         *( XLBSDRYG1/( ZLBDAG(:)**2              ) + &
-                            XLBSDRYG2/( ZLBDAG(:)   * ZLBDAS(:)   ) + &
-                            XLBSDRYG3/(               ZLBDAS(:)**2) ) )
-    END WHERE
+    IF (OCND2) THEN
+      ZZW1(:,3) = 0.
+    ELSE
+      WHERE( GDRY(:) )
+        ZZW1(:,3) = MIN( ZRSS(:),XFSDRYG*ZZW(:)                         & ! RSDRYG
+                                        * EXP( XCOLEXSG*(ZZT(:)-XTT) )  &
+                      *( ZLBDAS(:)**(XCXS-XBS) )*( ZLBDAG(:)**XCXG )    &
+                      *( ZRHODREF(:)**(-XCEXVT-1.) )                    &
+                           *( XLBSDRYG1/( ZLBDAG(:)**2              ) + &
+                              XLBSDRYG2/( ZLBDAG(:)   * ZLBDAS(:)   ) + &
+                              XLBSDRYG3/(               ZLBDAS(:)**2) ) )
+      END WHERE
+    ENDIF
     DEALLOCATE(IVEC2)
     DEALLOCATE(IVEC1)
     DEALLOCATE(ZVEC3)
@@ -3393,7 +3497,12 @@ IMPLICIT NONE
                                                  ! f(L_f*(RCWETG+RRWETG))
    END WHERE
    ELSE IF( KRR == 6 ) THEN
-     WHERE( ZRGT(:)>XRTMIN(6) .AND. ZZT(:)<XTT                            &
+     WHERE( ZRGT(:)>XRTMIN(6) .AND. ZRGT(:)>XFRMIN(3) .AND.            &
+#ifdef REPRO48
+                                           ZZT(:)<XTT                  &
+#else
+            ZRIS(:)*PTSTEP>XFRMIN(3) .AND. ZZT(:)<XTT                  &
+#endif
                                         .AND.                          & ! Wet
                               ZRDRYG(:)>=ZRWETG(:) .AND. ZRWETG(:)>0.0 ) ! case
     ZZW(:)  = ZRWETG(:)
@@ -3432,7 +3541,12 @@ IMPLICIT NONE
   END IF
 
 !
-  WHERE( ZRGT(:)>XRTMIN(6) .AND. ZZT(:)<XTT                            &
+  WHERE( ZRGT(:)>XRTMIN(6) .AND. ZRGT(:)>XFRMIN(4) .AND.               &
+#ifdef REPRO48
+                                        ZZT(:)<XTT                     &
+#else
+         ZRIS(:)*PTSTEP>XFRMIN(4) .AND. ZZT(:)<XTT                     &
+#endif
                                         .AND.                          &
                                ZRDRYG(:)<ZRWETG(:) .AND. ZRDRYG(:)>0.0 ) ! Dry
     ZRCS(:) = ZRCS(:) - ZZW1(:,1)
@@ -3470,24 +3584,50 @@ IMPLICIT NONE
 !*       6.5    Melting of the graupeln
 !
   ZZW(:) = 0.0
-   WHERE( (ZRGT(:)>XRTMIN(6)) .AND. (ZRGS(:)>0.0) .AND. (ZZT(:)>XTT) )
-    ZZW(:) = ZRVT(:)*ZPRES(:)/(XEPSILO+ZRVT(:)) ! Vapor pressure
-    ZZW(:) =  ZKA(:)*(XTT-ZZT(:)) +                                 &
-               ( ZDV(:)*(XLVTT + ( XCPV - XCL ) * ( ZZT(:) - XTT )) &
-                           *(XESTT-ZZW(:))/(XRV*ZZT(:))             )
+  IF (LTIW) THEN
+
+    WHERE( (ZRGT(:)>XRTMIN(6)) .AND. (ZRGS(:)>0.0) .AND. (ZTIW(:)>XTT) )
+      ZZW(:) = ZRVT(:)*ZPRES(:)/(XEPSILO+ZRVT(:)) ! Vapor pressure
+      ZZW(:) =  ZKA(:)*(XTT-ZTIW(:)) +                                 &
+                 ( ZDV(:)*(XLVTT + ( XCPV - XCL ) * ( ZTIW(:) - XTT )) &
+                             *(XESTT-ZZW(:))/(XRV*ZTIW(:))             )
 !
 ! compute RGMLTR
 !
-    ZZW(:)  = MIN( ZRGS(:), MAX( 0.0,( -ZZW(:) *                     &
-                           ( X0DEPG*       ZLBDAG(:)**XEX0DEPG +     &
-                             X1DEPG*ZCJ(:)*ZLBDAG(:)**XEX1DEPG ) -   &
-                                     ( ZZW1(:,1)+ZZW1(:,4) ) *       &
-                              ( ZRHODREF(:)*XCL*(XTT-ZZT(:))) ) /    &
-                                             ( ZRHODREF(:)*XLMTT ) ) )
-    ZRRS(:) = ZRRS(:) + ZZW(:)
-    ZRGS(:) = ZRGS(:) - ZZW(:)
-    ZTHS(:) = ZTHS(:) - ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(-RGMLTR))
-  END WHERE
+      ZZW(:)  = XFRMIN(8)*MIN( ZRGS(:), MAX( 0.0,( -ZZW(:) *           &
+                             ( X0DEPG*       ZLBDAG(:)**XEX0DEPG +     &
+                               X1DEPG*ZCJ(:)*ZLBDAG(:)**XEX1DEPG ) -   &
+                                       ( ZZW1(:,1)+ZZW1(:,4) ) *       &
+                                ( ZRHODREF(:)*XCL*(XTT-ZTIW(:))) ) /   &
+                                               ( ZRHODREF(:)*XLMTT ) ) )
+
+
+      ZRRS(:) = ZRRS(:) + ZZW(:)
+      ZRGS(:) = ZRGS(:) - ZZW(:)
+      ZTHS(:) = ZTHS(:) - ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(-RGMLTR))
+    END WHERE
+  ELSE
+
+    WHERE( (ZRGT(:)>XRTMIN(6)) .AND. (ZRGS(:)>0.0) .AND. (ZZT(:)>XTT) )
+      ZZW(:) = ZRVT(:)*ZPRES(:)/(XEPSILO+ZRVT(:)) ! Vapor pressure
+      ZZW(:) =  ZKA(:)*(XTT-ZZT(:)) +                                 &
+                 ( ZDV(:)*(XLVTT + ( XCPV - XCL ) * ( ZZT(:) - XTT )) &
+                             *(XESTT-ZZW(:))/(XRV*ZZT(:))             )
+!
+! compute RGMLTR
+!
+      ZZW(:)  = XFRMIN(8)*MIN( ZRGS(:), MAX( 0.0,( -ZZW(:) *           &
+                             ( X0DEPG*       ZLBDAG(:)**XEX0DEPG +     &
+                               X1DEPG*ZCJ(:)*ZLBDAG(:)**XEX1DEPG ) -   &
+                                       ( ZZW1(:,1)+ZZW1(:,4) ) *       &
+                                ( ZRHODREF(:)*XCL*(XTT-ZZT(:))) ) /    &
+                                               ( ZRHODREF(:)*XLMTT ) ) )
+      ZRRS(:) = ZRRS(:) + ZZW(:)
+      ZRGS(:) = ZRGS(:) - ZZW(:)
+      ZTHS(:) = ZTHS(:) - ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(-RGMLTR))
+    END WHERE
+  ENDIF
+
     IF (LBUDGET_TH) CALL BUDGET_DDH (                                                 &
                    UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),   &
                                                                 4,'GMLT_BU_RTH',YDDDH, YDLDDH, YDMDDH)
@@ -3834,10 +3974,26 @@ IMPLICIT NONE
      ! Sub gridscale decomposition into a supersaturation part of the gridbox, 
      ! ZSIFRC with a superaturation ZSSIO and a subsaturated part (1.- ZSIFRC)
      ! with a (negative) superaturation of ZSSIU
-     ZARTMP(:) = -1.
-     CALL ICECLOUD(IMICRO,ZPRES,ZZZ,ZDZ,ZZT,ZRVS,PTSTEP,-1.,ZARTMP, &
-          & ZXW2D,ZSIFRC,ZSSIO,ZSSIU,ZW2D,ZCI2S)  !note: ZCI2S is dummy here, not used
-     DO JK=1,IMICRO
+
+
+     IF (LMODICEDEP) THEN
+       DO JL=1,IMICRO
+         ZZW2(JL) = MAX(ZCIT(JL),ICENUMBER2(ZRIS(JL)*PTSTEP,ZZT(JL))* &
+         ZRHODREF(JL))
+       ENDDO
+       WHERE( ZZW2(:)>0.0 .AND. ZESI(:) < ZPRES(:)*0.5)
+          ZZW(:)= X0DEPI/(XLBI*ZAI(:)) *(ZZW2(:)/ZRHODREF(:))**(1.+XLBEXI) * &
+             & (PTSTEP*MAX(XRTMIN(4)/PTSTEP,ZRIS(:))*ZW2D(:) )**(-XLBEXI)
+          ZZW(:)=  MAX(-ZRIS(:)*ZW2D(:)*(1.-ZSIFRC(:))+ZZW(:)*ZSSIO(:)* ZSIFRC(:)* ZXW2D13(:), &
+        &  ZZW(:)* ( ZSSIO(:)* ZSIFRC(:)* ZXW2D13(:)  + ZCITRED23*ZSSIU(:)* (1.-ZSIFRC(:)) )) 
+
+          ZRIS(:) = ZRIS(:) + ZZW(:)
+          ZRVS(:) = ZRVS(:) - ZZW(:)  ! Budget here: ! cloud ice + vapor = const
+          ZTHS(:) = ZTHS(:) + ZZW(:)*ZLSFACT(:) ! f(L_f*(RCBERI))
+
+       END WHERE
+     ELSE
+      DO JK=1,IMICRO
 
         ZTC =  MAX(-18.,MIN(-1.,ZZT(JK)-XTT))
         ZHU =  MIN(0.15,MAX(0.,ZSSI(JK)))
@@ -3847,7 +4003,7 @@ IMPLICIT NONE
         ZCI2S(JK) = 0.
         IF(ZRIS(JK)*PTSTEP > 1.0e-12)THEN
             ZCI2S(JK)  =  ZRIS(JK)*(1. - MIN(1., 0.5*ZQIMAX /ZRIS(JK)/PTSTEP))* &
-                &  (1.-ZSIFRC(JK))/(  ZXW2D*ZSIFRC(JK) +  1.-ZSIFRC(JK))
+                &  (1.-ZSIFRC(JK))*ZW2D(JK)
 !                0.5*ZQIMAX /ZRIS(JK)/PTSTEP reduce ice wich a factot of 0.5 when 
 !                ZQIMAX = cloud ice content. 
 !                (1.-ZSIFRC(JK))/(  ZXW2D*ZSIFRC(JK) +  1.-ZSIFRC(JK)) is the ratio for cloudice 
@@ -3855,13 +4011,13 @@ IMPLICIT NONE
         ENDIF
 
 
-     ENDDO
-     WHERE( ZRIT(:)>XRTMIN(4) .AND. ZCIT(:)>0.0 .AND. ZESI(:) < ZPRES(:)*0.5  )
+      ENDDO
+      WHERE( ZCIT(:)>0.0 .AND. ZESI(:) < ZPRES(:)*0.5)
         ZZWC(:)=ZCRYSHA(:)*0.878/ZAI(:)*(ZCIT(:)/ZRHODREF(:))**0.667 &
-             &*(ZRIS(:)*PTSTEP*ZW2D(:))**0.333
+             &*(MAX(XRTMIN(4)/PTSTEP,ZRIS(:))*PTSTEP*ZW2D(:))**0.333
 !     Ice supersaturated part of grid box:
         WHERE( ZSSIO(:)>0. .AND. ZSIFRC(:) > 0.02_JPRB )
-           ZZW(:)  = ZZWC(:)*ZXW2D13*ZSSIO(:)
+           ZZW(:)  = ZZWC(:)*ZXW2D13(:)*ZSSIO(:)
            ZRIS(:) = ZRIS(:) + ZZW(:)*ZSIFRC(:)
            ZRVS(:) = ZRVS(:) - ZZW(:)*ZSIFRC(:)  ! Budget here: ! cloud ice + vapor = const
            ZTHS(:) = ZTHS(:) + ZZW(:)*ZLSFACT(:)*ZSIFRC(:) ! f(L_f*(RCBERI)) 
@@ -3876,7 +4032,8 @@ IMPLICIT NONE
            ZRVS(:) = ZRVS(:) - ZZW(:)*(1.-ZSIFRC(:))  
            ZTHS(:) = ZTHS(:) + ZZW(:)*ZLSFACT(:)*(1.-ZSIFRC(:))
         END WHERE
-     END WHERE
+      END WHERE
+     ENDIF
   ELSE ! End OCND2
   WHERE( (ZRCS(:)>0.0) .AND. (ZSSI(:)>0.0) .AND. &
          (ZRIT(:)>XRTMIN(4)) .AND. (ZCIT(:)>0.0)       )
diff --git a/src/common/micro/condensation.F90 b/src/common/micro/condensation.F90
index c1e03b3b9..e950151e3 100644
--- a/src/common/micro/condensation.F90
+++ b/src/common/micro/condensation.F90
@@ -4,14 +4,15 @@
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ######spl
-    SUBROUTINE CONDENSATION( KIU, KJU, KKU, KIB, KIE, KJB, KJE, KKB, KKE, KKL,         &
-       HFRAC_ICE, HCONDENS, HLAMBDA3,                                                  &
-       PPABS, PZZ, PRHODREF, PT, PRV_IN, PRV_OUT, PRC_IN, PRC_OUT, PRI_IN, PRI_OUT,    &
-       PRR, PRS, PRG, PSIGS, PMFCONV, PCLDFR, PSIGRC, OUSERI,                          &
-       OSIGMAS, OCND2, PSIGQSAT,                                                       &
-       PLV, PLS, PCPH,                                                                 &
-       PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF,                                         &
-       PICE_CLD_WGT)
+       SUBROUTINE CONDENSATION( KIU, KJU, KKU, KIB, KIE, KJB, KJE, KKB, KKE, KKL,&
+          HFRAC_ICE, HCONDENS, HLAMBDA3, &
+          PPABS, PZZ, PRHODREF, PT, PRV_IN, PRV_OUT, PRC_IN, PRC_OUT, PRI_IN, PRI_OUT, &
+          PRR, PRS, PRG, PSIGS, PMFCONV, PCLDFR, &
+          PSIGRC, OUSERI, OSIGMAS, OCND2, LHGT_QS, &
+          PICLDFR, PWCLDFR, PSSIO, PSSIU, PIFR, PSIGQSAT, &
+          PLV, PLS, PCPH, &
+          PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, &
+          PICE_CLD_WGT)
 !   ################################################################################
 !
 !!
@@ -74,6 +75,9 @@
 !!      2014-11 K.I Ivarsson add possibility to run with OCND2 option
 !!      2016   S.Riette Change INQ1
 !!      2016-11 S. Riette: use HFRAC_ICE, output adjusted state
+!!      2018-02 K.I Ivarsson: Some modificatons of OCND2 option, mainly for optimation - new outputs
+!!      2019-06 W.C. de Rooy: Mods for new set up statistical cloud scheme
+!!      2019-07 K.I.Ivarsson: Switch for height dependent VQSIGSAT: LHGT_QS
 !!      2020-12 U. Andrae : Introduce SPP for HARMONIE-AROME
 !!     R. El Khatib 24-Aug-2021 Optimizations
 !!      2021-01: SPP computations moved in aro_adjust (AROME/HARMONIE)
@@ -86,9 +90,10 @@ USE PARKIND1, ONLY : JPRB
 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
 USE MODD_CST
 USE MODD_PARAMETERS
-USE MODD_RAIN_ICE_PARAM, ONLY : XCRIAUTC, XCRIAUTI, XACRIAUTI, XBCRIAUTI
+USE MODD_RAIN_ICE_PARAM, ONLY : XCRIAUTC, XCRIAUTI, XACRIAUTI, XBCRIAUTI, XFRMIN
 USE MODE_TIWMX, ONLY : ESATW, ESATI
 USE MODE_ICECLOUD, ONLY : ICECLOUD
+USE MODD_CTURB, ONLY : LSTATNW
 !
 IMPLICIT NONE
 !
@@ -118,22 +123,31 @@ REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN)    :: PRC_IN ! grid scale r_c mixing ra
 REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT)   :: PRC_OUT! grid scale r_c mixing ratio (kg/kg) in output
 REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN)    :: PRI_IN ! grid scale r_i (kg/kg) in input
 REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT)   :: PRI_OUT! grid scale r_i (kg/kg) in output
+REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN)    :: PRR    ! grid scale mixing ration of rain (kg/kg)
+REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN)    :: PRS    ! grid scale mixing ration of snow (kg/kg)
+REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN)    :: PRG    ! grid scale mixing ration of graupel (kg/kg)
+REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN)    :: PSIGS  ! Sigma_s from turbulence scheme
+REAL, DIMENSION(:,:,:),       INTENT(IN)    :: PMFCONV! convective mass flux (kg /s m^2)
+REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT)   :: PCLDFR ! cloud fraction
+REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT)   :: PSIGRC ! s r_c / sig_s^2
+
 LOGICAL, INTENT(IN)                         :: OUSERI ! logical switch to compute both
                                                       ! liquid and solid condensate (OUSERI=.TRUE.)
                                                       ! or only solid condensate (OUSERI=.FALSE.)
 LOGICAL, INTENT(IN)                         :: OSIGMAS! use present global Sigma_s values
                                                       ! or that from turbulence scheme
 LOGICAL, INTENT(IN)                         :: OCND2  ! logical switch to sparate liquid and ice
-                                                      ! more rigid (DEFALT value : .FALSE.)
+                                                      ! more rigid (DEFAULT value : .FALSE.)
+LOGICAL, INTENT(IN)                         :: LHGT_QS! logical switch for height dependent VQSIGSAT
+REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT)   :: PICLDFR! ice cloud fraction
+REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT)   :: PWCLDFR! water or mixed-phase cloud fraction
+REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT)   :: PSSIO  ! Super-saturation with respect to ice in the  
+                                                      ! supersaturated fraction
+REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT)   :: PSSIU  ! Sub-saturation with respect to ice in the  
+                                                      ! subsaturated fraction
+REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT)   :: PIFR   ! Ratio cloud ice moist part
 REAL, DIMENSION(KIU,KJU),     INTENT(IN)    :: PSIGQSAT ! use an extra "qsat" variance contribution (OSIGMAS case)
                                                         ! multiplied by PSIGQSAT
-REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN)    :: PRR    ! grid scale mixing ration of rain (kg/kg)
-REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN)    :: PRS    ! grid scale mixing ration of snow (kg/kg)
-REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN)    :: PRG    ! grid scale mixing ration of graupel (kg/kg)
-REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN)    :: PSIGS  ! Sigma_s from turbulence scheme
-REAL, DIMENSION(:,:,:),       INTENT(IN)    :: PMFCONV! convective mass flux (kg /s m^2)
-REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT)   :: PCLDFR ! cloud fraction
-REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT)   :: PSIGRC ! s r_c / sig_s^2
 
 REAL, DIMENSION(KIU,KJU,KKU), OPTIONAL, INTENT(IN)    :: PLV    ! Latent heat L_v
 REAL, DIMENSION(KIU,KJU,KKU), OPTIONAL, INTENT(IN)    :: PLS    ! Latent heat L_s
@@ -142,7 +156,7 @@ REAL, DIMENSION(KIU,KJU,KKU), OPTIONAL, INTENT(OUT)   :: PHLC_HRC
 REAL, DIMENSION(KIU,KJU,KKU), OPTIONAL, INTENT(OUT)   :: PHLC_HCF ! cloud fraction
 REAL, DIMENSION(KIU,KJU,KKU), OPTIONAL, INTENT(OUT)   :: PHLI_HRI
 REAL, DIMENSION(KIU,KJU,KKU), OPTIONAL, INTENT(OUT)   :: PHLI_HCF
-REAL, DIMENSION(KIU,KJU),   OPTIONAL, INTENT(IN)   :: PICE_CLD_WGT
+REAL, DIMENSION(KIU,KJU),     OPTIONAL, INTENT(IN)    :: PICE_CLD_WGT
 !
 !
 !*       0.2   Declarations of local variables :
@@ -150,14 +164,14 @@ REAL, DIMENSION(KIU,KJU),   OPTIONAL, INTENT(IN)   :: PICE_CLD_WGT
 INTEGER  :: JI, JJ, JK, JKP, JKM, IKTB, IKTE    ! loop index
 REAL, DIMENSION(KIU,KJU,KKU) :: ZTLK, ZRT       ! work arrays for T_l and total water mixing ratio
 REAL, DIMENSION(KIU,KJU,KKU) :: ZL              ! length scale
-INTEGER, DIMENSION(KIU,KJU)  :: ITPL            ! top levels of troposphere 
+INTEGER, DIMENSION(KIU,KJU)  :: ITPL            ! top levels of troposphere
 REAL,    DIMENSION(KIU,KJU)  :: ZTMIN           ! minimum Temp. related to ITPL
 !
 REAL, DIMENSION(KIU,KJU,KKU) :: ZLV, ZLS, ZCPD
 REAL :: ZGCOND, ZAUTC, ZAUTI, ZGAUV, ZGAUC, ZGAUI, ZGAUTC, ZGAUTI, ZCRIAUTI   ! Used for Gaussian PDF integration
 REAL :: ZLVS                                      ! thermodynamics
 REAL, DIMENSION(KIU) :: ZPV, ZPIV, ZQSL, ZQSI ! thermodynamics
-REAL :: ZLL, DZZ, ZZZ                           ! used for length scales 
+REAL :: ZLL, DZZ, ZZZ                           ! used for length scales
 REAL :: ZAH, ZDRW, ZDTL, ZSIG_CONV                     ! related to computation of Sig_s
 REAL, DIMENSION(KIU) :: ZA, ZB, ZSBAR, ZSIGMA, ZQ1 ! related to computation of Sig_s
 REAL, DIMENSION(KIU) :: ZCOND
@@ -168,10 +182,14 @@ REAL :: ZINC
 REAL :: ZRSP,  ZRSW, ZRFRAC, ZRSDIF, ZRCOLD
 ! related to OCND2  ice cloud calulation :
 REAL, DIMENSION(KIU) :: ESATW_T
-REAL :: ZDUM1,ZDUM2,ZDUM3,ZDUM4,ZPRIFACT
-REAL, DIMENSION(KIU,KJU,KKU) :: TCLD
-REAL :: ZDZ(KIU), ZARDUM(KIU),ZCLDUM(KIU)
+REAL :: ZDUM1,ZDUM2,ZDUM3,ZDUM4,ZPRIFACT,ZLWINC
+REAL :: ZDZ(KIU), ZARDUM(KIU),ZARDUM2(KIE-KIB+1),ZCLDINI(KIB:KIE)
 ! end OCND2
+
+! LHGT_QS:
+REAL :: ZDZFACT,ZDZREF
+! LHGT_QS END
+
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 INTEGER, DIMENSION(KIU) :: IERR
 !
@@ -206,12 +224,20 @@ IKTE=KKU-JPVEXT
 PCLDFR(:,:,:) = 0. ! Initialize values
 PSIGRC(:,:,:) = 0. ! Initialize values
 ZPRIFACT = 1.      ! Initialize value
-ZCLDUM=-1.         ! Initialize value
+ZARDUM2 = 0.  ! Initialize values
+ZCLDINI = -1. ! Dummy Initialized cloud input to icecloud routine
+PIFR = 10. ! ratio of cloud ice water mixing ratio wet to dry
+           ! part of a gridbox
+ZDZREF = XFRMIN(25) ! Thickness for unchanged vqsigsat (only used for LHGT_QS)
 ! Init of the HALO (should be on HALO points only)
 #ifdef REPRO55
 PRC_OUT = PRC_IN
 PRV_OUT = PRV_IN
 PRI_OUT = PRI_IN
+PHLC_HRC = 0.
+PHLC_HCF = 0.
+PHLI_HRI = 0.
+PHLI_HCF = 0.
 #endif
 IF(OCND2)ZPRIFACT = 0.
 !
@@ -317,8 +343,8 @@ DO JK=IKTB,IKTE
        ZDZ(KIB:KIE) = PZZ(KIB:KIE,JJ,JKP) - PZZ(KIB:KIE,JJ,JKP-KKL)
        CALL ICECLOUD(KIE-KIB+1,PPABS(KIB,JJ,JK),PZZ(KIB,JJ,JK),ZDZ(KIB), &
             & PT(KIB,JJ,JK),PRV_IN(KIB,JJ,JK),1.,-1., &
-            & ZCLDUM(KIB:KIE),1.,TCLD(KIB,JJ,JK), &
-            & ZARDUM(KIB:KIE),ZARDUM(KIB:KIE),ZARDUM(KIB:KIE),ZARDUM(KIB:KIE))
+            & ZCLDINI,PIFR(KIB,JJ,JK),PICLDFR(KIB,JJ,JK), &
+            & PSSIO(KIB,JJ,JK),PSSIU(KIB,JJ,JK),ZARDUM2,ZARDUM)
        ! latent heats
        ! saturated water vapor mixing ratio over liquid water and ice
        DO JI=KIB,KIE
@@ -365,9 +391,23 @@ DO JK=IKTB,IKTE
     IF ( OSIGMAS ) THEN
       DO JI=KIB,KIE
         IF (PSIGQSAT(JI,JJ)/=0.) THEN
-          ZSIGMA(JI) = SQRT((2*PSIGS(JI,JJ,JK))**2 + (PSIGQSAT(JI,JJ)*ZQSL(JI)*ZA(JI))**2)
+          ZDZFACT = 1.
+          IF(LHGT_QS .AND. JK+1 <= IKTE)THEN
+             ZDZFACT= MAX(XFRMIN(23),MIN(XFRMIN(24),(PZZ(JI,JJ,JK) - PZZ(JI,JJ,JK+1))/ZDZREF))
+          ELSEIF(LHGT_QS)THEN
+             ZDZFACT= MAX(XFRMIN(23),MIN(XFRMIN(24),((PZZ(JI,JJ,JK-1) - PZZ(JI,JJ,JK)))*0.8/ZDZREF))
+          ENDIF
+          IF (LSTATNW) THEN
+            ZSIGMA(JI) = SQRT((PSIGS(JI,JJ,JK))**2 + (PSIGQSAT(JI,JJ)*ZDZFACT*ZQSL(JI)*ZA(JI))**2)
+          ELSE
+            ZSIGMA(JI) = SQRT((2*PSIGS(JI,JJ,JK))**2 + (PSIGQSAT(JI,JJ)*ZQSL(JI)*ZA(JI))**2)
+          ENDIF
         ELSE
-          ZSIGMA(JI) = 2*PSIGS(JI,JJ,JK)
+          IF (LSTATNW) THEN
+            ZSIGMA(JI) = PSIGS(JI,JJ,JK)
+          ELSE
+            ZSIGMA(JI) = 2*PSIGS(JI,JJ,JK)
+          ENDIF
         END IF
       END DO
     ELSE
@@ -497,34 +537,33 @@ DO JK=IKTB,IKTE
     ELSE
       DO JI=KIB,KIE
         PRC_OUT(JI,JJ,JK) = (1.-ZFRAC(JI)) * ZCOND(JI) ! liquid condensate
+        ZLWINC = PRC_OUT(JI,JJ,JK) - PRC_IN(JI,JJ,JK)
         !
 !       This check is mainly for noise reduction :
 !       -------------------------
-        IF(ABS(PRC_IN(JI,JJ,JK)-PRC_OUT(JI,JJ,JK))>1.0E-12 .AND. ESATW_T(JI) < PPABS(JI,JJ,JK)*0.5)THEN
+        IF(ABS(ZLWINC)>1.0E-12  .AND.  ESATW(PT(JI,JJ,JK)) < PPABS(JI,JJ,JK)*0.5 )THEN
            ZRCOLD = PRC_OUT(JI,JJ,JK)
-           ZRFRAC = PRV_IN(JI,JJ,JK) - ZCOND(JI) + PRC_OUT(JI,JJ,JK)
+           ZRFRAC = PRV_IN(JI,JJ,JK) - ZLWINC
            IF( PRV_IN(JI,JJ,JK) < ZRSW )THEN ! sub - saturation over water:
               ! Avoid drying of cloudwater leading to supersaturation with
               ! respect to water
               ZRSDIF= MIN(0.,ZRSP-ZRFRAC)
            ELSE  ! super - saturation over water:
-              ! Avoid depostition of water leading to sub-saturation with
+              ! Avoid deposition of water leading to sub-saturation with
               ! respect to water
               !            ZRSDIF= MAX(0.,ZRSP-ZRFRAC)
-              ZRSDIF= MAX(0.,ZRSP*PCLDFR(JI,JJ,JK) - ZRFRAC) 
+              ZRSDIF= 0. ! t7
            ENDIF
            PRC_OUT(JI,JJ,JK) = ZCOND(JI)  - ZRSDIF
         ELSE
           ZRCOLD = PRC_IN(JI,JJ,JK)
         ENDIF
- !      end check 
+ !      end check
 
  !      compute separate ice cloud:
-        ZDUM1 = MIN(1.0,20.* PRC_OUT(JI,JJ,JK)*SQRT(ZDZ(JI))/ZQSL(JI)) ! clould liquid water 
-                                                       ! factor 
-
-        ZDUM3 = MAX(0.,TCLD(JI,JJ,JK)-PCLDFR(JI,JJ,JK)) ! pure ice cloud part
-
+        PWCLDFR(JI,JJ,JK) = PCLDFR(JI,JJ,JK)
+        ZDUM1 = MIN(1.0,20.* PRC_OUT(JI,JJ,JK)*SQRT(ZDZ(JI))/ZQSL(JI)) ! cloud liquid water factor
+        ZDUM3 = MAX(0.,PICLDFR(JI,JJ,JK)-PWCLDFR(JI,JJ,JK)) ! pure ice cloud part 
         IF (JK==IKTB) THEN
           ZDUM4 = PRI_IN(JI,JJ,JK)
         ELSE
@@ -537,7 +576,7 @@ DO JK=IKTB,IKTE
         ZDUM2 = (0.8*PCLDFR(JI,JJ,JK)+0.2)*MIN(1.,ZDUM1 + ZDUM4*PCLDFR(JI,JJ,JK))
         ! water cloud, use 'statistical' cloud, but reduce it in case of low liquid content
 
-        PCLDFR(JI,JJ,JK) = MIN(1., ZDUM2 + (0.9*ZDUM3+0.1)*ZDUM4) ! Rad cloud
+        PCLDFR(JI,JJ,JK) = MIN(1., ZDUM2 + (0.5*ZDUM3+0.5)*ZDUM4) ! Rad cloud
              ! Reduce ice cloud part in case of low ice water content
         PRI_OUT(JI,JJ,JK) = PRI_IN(JI,JJ,JK)
         PT(JI,JJ,JK) = PT(JI,JJ,JK) + ((PRC_OUT(JI,JJ,JK)-ZRCOLD)*ZLV(JI,JJ,JK) + &
diff --git a/src/common/micro/ice_adjust.F90 b/src/common/micro/ice_adjust.F90
index d395b1493..1fcf3de24 100644
--- a/src/common/micro/ice_adjust.F90
+++ b/src/common/micro/ice_adjust.F90
@@ -5,16 +5,18 @@
 !-----------------------------------------------------------------
 !     ##########################################################################
       SUBROUTINE ICE_ADJUST (KKA, KKU, KKL, KRR, HFRAC_ICE, HCONDENS, HLAMBDA3,&
-                             HBUNAME, OSUBG_COND, OSIGMAS, OCND2, HSUBG_MF_PDF,&
-                             PTSTEP, PSIGQSAT,                                 &
+                             HBUNAME, OSUBG_COND, OSIGMAS, OCND2, LHGT_QS,     &
+                             HSUBG_MF_PDF, PTSTEP, PSIGQSAT,                   &
                              PRHODJ, PEXNREF, PRHODREF, PSIGS, PMFCONV,        &
                              PPABST, PZZ,                                      &
                              PEXN, PCF_MF, PRC_MF, PRI_MF,                     &
+                             PICLDFR, PWCLDFR, PSSIO, PSSIU, PIFR,             &
                              PRV, PRC, PRVS, PRCS, PTH, PTHS, PSRCS, PCLDFR,   &
-                             PRR, PRI, PRIS, PRS, PRG, TBUDGETS, KBUDGETS, PRH,&
+                             PRR, PRI, PRIS, PRS, PRG, TBUDGETS, KBUDGETS,     &
+                             PICE_CLD_WGT,                                     &
+                             PRH,                                              &
                              POUT_RV, POUT_RC, POUT_RI, POUT_TH,               &
-                             PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF,           &
-                             PICE_CLD_WGT)
+                             PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF)
 !     #########################################################################
 !
 !!****  *ICE_ADJUST* -  compute the ajustment of water vapor in mixed-phase 
@@ -95,6 +97,7 @@
 !!                         or to call it on S variables
 !!      2016-11 S. Riette: all-or-nothing adjustment now uses condensation
 !  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!!      2018-02 K.I.Ivarsson : More outputs for OCND2 option
 !  P. Wautelet    02/2020: use the new data structures and subroutines for budgets
 !!      2020-12 U. Andrae : Introduce SPP for HARMONIE-AROME
 !!     R. El Khatib 24-Aug-2021 Optimizations
@@ -124,23 +127,24 @@ IMPLICIT NONE
 !*       0.1   Declarations of dummy arguments :
 !
 !
-INTEGER,                  INTENT(IN)    :: KKA  !near ground array index  
-INTEGER,                  INTENT(IN)    :: KKU  !uppest atmosphere array index
-INTEGER,                  INTENT(IN)    :: KKL  !vert. levels type 1=MNH -1=ARO
+INTEGER,                  INTENT(IN)    :: KKA      !near ground array index
+INTEGER,                  INTENT(IN)    :: KKU      !uppest atmosphere array index
+INTEGER,                  INTENT(IN)    :: KKL      !vert. levels type 1=MNH -1=ARO
 INTEGER,                  INTENT(IN)    :: KRR      ! Number of moist variables
 CHARACTER(LEN=1),         INTENT(IN)    :: HFRAC_ICE
 CHARACTER(LEN=80),        INTENT(IN)    :: HCONDENS
 CHARACTER(LEN=4),         INTENT(IN)    :: HLAMBDA3 ! formulation for lambda3 coeff
 CHARACTER(LEN=4),         INTENT(IN)    :: HBUNAME  ! Name of the budget
-LOGICAL,                  INTENT(IN)    :: OSUBG_COND ! Switch for Subgrid 
+LOGICAL,                  INTENT(IN)    :: OSUBG_COND ! Switch for Subgrid
                                                     ! Condensation
-LOGICAL                                 :: OSIGMAS  ! Switch for Sigma_s: 
+LOGICAL,                  INTENT(IN)    :: OSIGMAS  ! Switch for Sigma_s:
                                                     ! use values computed in CONDENSATION
                                                     ! or that from turbulence scheme
-LOGICAL                                 :: OCND2    ! logical switch to sparate liquid 
+LOGICAL,                  INTENT(IN)    :: OCND2    ! logical switch to separate liquid
                                                     ! and ice
-                                                    ! more rigid (DEFALT value : .FALSE.)
-CHARACTER(LEN=80),        INTENT(IN)    :: HSUBG_MF_PDF
+                                                    ! more rigid (DEFAULT value : .FALSE.)
+LOGICAL,                  INTENT(IN)   :: LHGT_QS   ! logical switch for height dependent VQSIGSAT
+CHARACTER(LEN=80),        INTENT(IN)   :: HSUBG_MF_PDF
 REAL,                     INTENT(IN)   :: PTSTEP    ! Double Time step
                                                     ! (single if cold start)
 REAL, DIMENSION(:,:),     INTENT(IN)   :: PSIGQSAT  ! coeff applied to qsat variance contribution
@@ -151,16 +155,16 @@ REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)   ::  PRHODREF
 !
 REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)   ::  PSIGS   ! Sigma_s at time t
 REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)   ::  PMFCONV ! convective mass flux
-REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)   ::  PPABST  ! Absolute Pressure at t        
+REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)   ::  PPABST  ! Absolute Pressure at t
 REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)   ::  PZZ     ! height of model layer
 REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)   ::  PEXN    ! Exner function
 !
-REAL, DIMENSION(:,:,:), CONTIGUOUS,     INTENT(IN)    :: PCF_MF! Convective Mass Flux Cloud fraction 
-REAL, DIMENSION(:,:,:), CONTIGUOUS,     INTENT(IN)    :: PRC_MF! Convective Mass Flux liquid mixing ratio
-REAL, DIMENSION(:,:,:), CONTIGUOUS,     INTENT(IN)    :: PRI_MF! Convective Mass Flux ice mixing ratio
+REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)    :: PCF_MF  ! Convective Mass Flux Cloud fraction
+REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)    :: PRC_MF  ! Convective Mass Flux liquid mixing ratio
+REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)    :: PRI_MF  ! Convective Mass Flux ice mixing ratio
 !
-REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)   ::  PRV     ! Water vapor m.r. to adjust
-REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)   ::  PRC     ! Cloud water m.r. to adjust
+REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)    :: PRV     ! Water vapor m.r. to adjust
+REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)    :: PRC     ! Cloud water m.r. to adjust
 REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(INOUT) :: PRVS    ! Water vapor m.r. source
 REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(INOUT) :: PRCS    ! Cloud water m.r. source
 REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)    :: PTH     ! Theta to adjust
@@ -168,13 +172,23 @@ REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(INOUT) :: PTHS    ! Theta source
 REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(OUT)   :: PSRCS   ! Second-order flux
                                                    ! s'rc'/2Sigma_s2 at time t+1
                                                    ! multiplied by Lambda_3
-REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(OUT)   :: PCLDFR  ! Cloud fraction          
-!
-REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(INOUT)::  PRIS ! Cloud ice  m.r. at t+1
-REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(IN)   ::  PRR  ! Rain water m.r. to adjust
-REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(IN)   ::  PRI  ! Cloud ice  m.r. to adjust
-REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(IN)   ::  PRS  ! Aggregate  m.r. to adjust
-REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(IN)   ::  PRG  ! Graupel    m.r. to adjust
+REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(OUT)   :: PCLDFR  ! Cloud fraction
+REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(OUT)   :: PICLDFR ! ice cloud fraction
+REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(OUT)   :: PWCLDFR ! water or mixed-phase cloud fraction
+REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(OUT)   :: PSSIO   ! Super-saturation with respect to ice in the  
+                                                              ! supersaturated fraction
+REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(OUT)   :: PSSIU   ! Sub-saturation with respect to ice in the  
+                                                              ! subsaturated fraction 
+REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(OUT)   :: PIFR    ! Ratio cloud ice moist part to dry part
+!
+REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(INOUT) :: PRIS    ! Cloud ice  m.r. at t+1
+REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(IN)    :: PRR     ! Rain water m.r. to adjust
+REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(IN)    :: PRI     ! Cloud ice  m.r. to adjust
+REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(IN)    :: PRS     ! Aggregate  m.r. to adjust
+REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(IN)    :: PRG     ! Graupel    m.r. to adjust
+TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS
+INTEGER,                             INTENT(IN)    :: KBUDGETS
+REAL, DIMENSION(:,:),   CONTIGUOUS, OPTIONAL, INTENT(IN)   ::  PICE_CLD_WGT
 REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(IN)   ::  PRH  ! Hail       m.r. to adjust
 REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT)  ::  POUT_RV ! Adjusted value
 REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT)  ::  POUT_RC ! Adjusted value
@@ -184,9 +198,6 @@ REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT)  ::  PHLC_HRC
 REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT)  ::  PHLC_HCF
 REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT)  ::  PHLI_HRI
 REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT)  ::  PHLI_HCF
-TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS
-INTEGER, INTENT(IN) :: KBUDGETS
-REAL, DIMENSION(:,:), CONTIGUOUS,   OPTIONAL, INTENT(IN)   :: PICE_CLD_WGT
 !
 !*       0.2   Declarations of local variables :
 !
@@ -471,8 +482,8 @@ IF ( OSUBG_COND ) THEN
        HFRAC_ICE, HCONDENS, HLAMBDA3,                                    &
        PPABST, PZZ, PRHODREF, ZT, PRV_IN, PRV_OUT, PRC_IN, PRC_OUT, PRI_IN, PRI_OUT, &
        PRR, PRS, PRG, PSIGS, PMFCONV, PCLDFR, &
-       PSRCS, .TRUE., OSIGMAS,                                           &
-       OCND2, PSIGQSAT,                                                  &
+       PSRCS, .TRUE., OSIGMAS, OCND2, LHGT_QS,                           &
+       PICLDFR, PWCLDFR, PSSIO, PSSIU, PIFR, PSIGQSAT,                   &
        PLV=ZLV, PLS=ZLS, PCPH=ZCPH,                                      &
        PHLC_HRC=PHLC_HRC, PHLC_HCF=PHLC_HCF, PHLI_HRI=PHLI_HRI, PHLI_HCF=PHLI_HCF,&
        PICE_CLD_WGT=PICE_CLD_WGT)
@@ -489,9 +500,9 @@ ELSE
   CALL CONDENSATION(IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE, KKL,    &
        HFRAC_ICE, HCONDENS, HLAMBDA3,                                    &
        PPABST, PZZ, PRHODREF, ZT, PRV_IN, PRV_OUT, PRC_IN, PRC_OUT, PRI_IN, PRI_OUT, &
-       PRR, PRS, PRG, ZSIGS, PMFCONV, PCLDFR, &
-       ZSRCS, .TRUE., OSIGMAS=.TRUE.,                                    &
-       OCND2=OCND2, PSIGQSAT=ZSIGQSAT,                                   &
+       PRR, PRS, PRG, ZSIGS, PMFCONV, PCLDFR,                            &
+       ZSRCS, .TRUE., .TRUE., OCND2, LHGT_QS,                            &
+       PICLDFR, PWCLDFR, PSSIO, PSSIU, PIFR, ZSIGQSAT,                   &
        PLV=ZLV, PLS=ZLS, PCPH=ZCPH,                                      &
        PHLC_HRC=PHLC_HRC, PHLC_HCF=PHLC_HCF, PHLI_HRI=PHLI_HRI, PHLI_HCF=PHLI_HCF,&
        PICE_CLD_WGT=PICE_CLD_WGT)
diff --git a/src/common/micro/ini_rain_ice.F90 b/src/common/micro/ini_rain_ice.F90
index 85eb2f093..4929d778a 100644
--- a/src/common/micro/ini_rain_ice.F90
+++ b/src/common/micro/ini_rain_ice.F90
@@ -368,7 +368,7 @@ XLBDAS_MAX = 100000.0
 XLBDAG_MAX = 100000.0
 !
 ZCONC_MAX  = 1.E6 ! Maximal concentration for falling particules set to 1 per cc
-XLBDAS_MAX = ( ZCONC_MAX/XCCS )**(1./XCXS)
+IF(XCCS>0. .AND. XCXS>0. )XLBDAS_MAX = ( ZCONC_MAX/XCCS )**(1./XCXS)
 !
 IF (HCLOUD == 'ICE4') THEN
   ALLOCATE( XRTMIN(7) )
@@ -514,16 +514,26 @@ X0DEPS = (4.0*XPI)*XCCS*XC1S*XF0S*MOMG(XALPHAS,XNUS,1.)
 X1DEPS = (4.0*XPI)*XCCS*XC1S*XF1S*SQRT(XCS)*MOMG(XALPHAS,XNUS,0.5*XDS+1.5)
 XEX0DEPS = XCXS-1.0
 XEX1DEPS = XCXS-0.5*(XDS+3.0)
+XRDEPSRED = 1.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)
+XRDEPGRED = 1.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)
+
+GFLAG = .TRUE.
+IF (GFLAG) THEN
+  WRITE(UNIT=KLUOUT,FMT='("      factors sublimation snow/groupel")')
+  WRITE(UNIT=KLUOUT,FMT='(" mod sublim snow =",E13.6)') XRDEPSRED
+  WRITE(UNIT=KLUOUT,FMT='(" mod sublim graupel =",E13.6)') XRDEPGRED
+END IF
+
 !
 !*       5.3    Constants for pristine ice autoconversion
 !
@@ -1016,6 +1026,20 @@ IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAR/=NDRYLBDAR) .OR. (KND/=IND) .OR. &
                      PFDINFTY,XKER_RDRYG                                      )
   WRITE(UNIT=KLUOUT,FMT='(" Read XKER_RDRYG")')
 END IF
+         
+!          8.2.6 Constants for possible modifying some processes related to 
+!                graupeln in XFRMIN(1:8),  IN - concentration in XFRMIN(9) and Kogan 
+!                autoconversion in XFRMIN(10:11). May be used for e.g. ensemble spread
+  XFRMIN(1:6)=0.
+  XFRMIN(7:9)=1.
+  XFRMIN(10) =10.
+  XFRMIN(11) =1.
+  XFRMIN(12) =100.
+  XFRMIN(13) =1.0E-15
+  XFRMIN(14) =120.
+  XFRMIN(15) =1.0E-4
+  XFRMIN(16:20)=0.
+  XFRMIN(21)=1.
 !
 !
 !-------------------------------------------------------------------------------
diff --git a/src/common/micro/ini_snow.F90 b/src/common/micro/ini_snow.F90
new file mode 100644
index 000000000..b1d284f63
--- /dev/null
+++ b/src/common/micro/ini_snow.F90
@@ -0,0 +1,170 @@
+!     ######spl
+      SUBROUTINE INI_SNOW ( KLUOUT )
+      USE PARKIND1, ONLY : JPRB
+      USE YOMHOOK , ONLY : LHOOK, DR_HOOK
+!     ###########################################################
+!
+!!****  *INI_SNOW * - re-initialize the constants based on snow-size distubutio
+!!                        cold microphysical schemes.
+!!
+!!    PURPOSE
+!!    -------
+!!      The purpose of this routine is to reinitialize the constants for snow used to
+!!    resolve the mixed phase microphysical scheme.
+!!    EXTERNAL
+!!    --------
+!!      GAMMA    :  gamma function
+!!
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!      Module MODD_CST
+!!        XPI                  !
+!!        XP00                 ! Reference pressure
+!!        XRD                  ! Gaz constant for dry air
+!!        XRHOLW               ! Liquid water density
+!!      Module MODD_REF
+!!        XTHVREFZ             ! Reference virtual pot.temp. without orography
+!!      Module MODD_PARAMETERS
+!!        JPVEXT               !
+!!      Module MODD_RAIN_ICE_DESCR
+!!      Module MODD_RAIN_ICE_PARAM
+!!
+!!    REFERENCE
+!!    ---------
+!!      Book2 of documentation ( routine INI_RAIN_ICE )
+!!
+!!    ORIGINAL AUTHOR (from ini_rain_ice)
+!!    --------------
+!!      J.-P. Pinty      * Laboratoire d'Aerologie*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      2018-02
+!!      Karl-Ivar Ivarsson
+!*       0.    DECLARATIONS
+!              ------------
+!
+USE MODD_CST
+USE MODD_LUNIT
+USE MODD_PARAMETERS
+USE MODD_PARAM_ICE
+USE MODD_RAIN_ICE_DESCR
+USE MODD_RAIN_ICE_PARAM
+USE MODD_REF
+!
+USE MODI_GAMMA
+USE MODI_GAMMA_INC
+USE MODE_RRCOLSS
+USE MODE_RZCOLX
+USE MODE_RSCOLRG
+USE MODE_READ_XKER_RACCS
+USE MODE_READ_XKER_SDRYG
+USE MODE_READ_XKER_RDRYG
+USE MODE_READ_XKER_SWETH
+USE MODE_READ_XKER_GWETH
+
+
+IMPLICIT NONE
+!
+!*       0.1   Declarations of dummy arguments :
+!
+!
+INTEGER,                 INTENT(IN) :: KLUOUT   ! Logical unit number for prints
+
+!*       0.2   Declarations of local variables :
+!
+INTEGER :: IKB                ! Coordinates of the first physical
+                              ! points along z
+
+REAL :: ZRHO00                ! Surface reference air density
+
+REAL :: ZCONC_MAX ! Maximal concentration for snow
+
+
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+IF (LHOOK) CALL DR_HOOK('INI_RAIN_ICE',0,ZHOOK_HANDLE)
+
+
+XCCS = XFRMIN(16)
+XCXS = XFRMIN(17)
+IKB = 1 + JPVEXT
+ZRHO00 = XP00/(XRD*XTHVREFZ(IKB))
+!     recalculate ini_rain_ice stuff:
+
+!     3.4    Constants for shape parameter
+XLBEXS = 1.0/(XCXS-XBS)
+XLBS   = ( XAS*XCCS*MOMG(XALPHAS,XNUS,XBS) )**(-XLBEXS)
+ZCONC_MAX  = 1.E6 ! Maximal concentration for falling particules set to 1 per cc
+IF(XCCS>0. .AND. XCXS>0. )XLBDAS_MAX = ( ZCONC_MAX/XCCS )**(1./XCXS)
+
+!     4.2    Constants for sedimentation
+XEXSEDS = (XBS+XDS-XCXS)/(XBS-XCXS)
+
+XFSEDS  = XCS*XAS*XCCS*MOMG(XALPHAS,XNUS,XBS+XDS)*                         &
+     (XAS*XCCS*MOMG(XALPHAS,XNUS,XBS))**(-XEXSEDS)*(ZRHO00)**XCEXVT
+
+!     5.2    Constants for vapor deposition on ice
+X0DEPS = (4.0*XPI)*XCCS*XC1S*XF0S*MOMG(XALPHAS,XNUS,1.)
+X1DEPS = (4.0*XPI)*XCCS*XC1S*XF1S*SQRT(XCS)*MOMG(XALPHAS,XNUS,0.5*XDS+1.5)
+XEX0DEPS = XCXS-1.0
+XEX1DEPS = XCXS-0.5*(XDS+3.0)
+
+!     5.4    Constants for snow aggregation
+XFIAGGS  = (XPI/4.0)*XCOLIS*XCCS*XCS*(ZRHO00**XCEXVT)*MOMG(XALPHAS,XNUS,XDS+2.0)
+XEXIAGGS = XCXS-XDS-2.0
+
+!     7.1    Constants for the riming of the aggregates
+XEXCRIMSS= XCXS-XDS-2.0
+XCRIMSS  = (XPI/4.0)*XCOLCS*XCCS*XCS*(ZRHO00**XCEXVT)*MOMG(XALPHAS,XNUS,XDS+2.0)
+XEXCRIMSG= XEXCRIMSS
+XCRIMSG  = XCRIMSS
+XSRIMCG  = XCCS*XAS*MOMG(XALPHAS,XNUS,XBS)
+XEXSRIMCG= XCXS-XBS
+
+!     7.2    Constants for the accretion of raindrops onto aggregates
+
+XFRACCSS = ((XPI**2)/24.0)*XCCS*XCCR*XRHOLW*(ZRHO00**XCEXVT)
+
+XFSACCRG = (XPI/4.0)*XAS*XCCS*XCCR*(ZRHO00**XCEXVT)
+
+!     8.2.3  Constants for the aggregate collection by the graupeln
+XFSDRYG = (XPI/4.0)*XCOLSG*XCCG*XCCS*XAS*(ZRHO00**XCEXVT)
+
+!     9.2.2  Constants for the aggregate collection by the hailstones
+XFSWETH = (XPI/4.0)*XCCH*XCCS*XAS*(ZRHO00**XCEXVT)
+
+WRITE(UNIT=KLUOUT,FMT='("  updated snow concentration:C=",E13.6," x=",E13.6)') &
+                                                      XCCS,XCXS
+
+IF (LHOOK) CALL DR_HOOK('INI_SNOW',1,ZHOOK_HANDLE)
+
+CONTAINS
+!
+!------------------------------------------------------------------------------
+!
+  FUNCTION MOMG(PALPHA,PNU,PP) RESULT (PMOMG)
+!
+! auxiliary routine used to compute the Pth moment order of the generalized
+! gamma law
+!
+  USE MODI_GAMMA
+!
+  IMPLICIT NONE
+!
+  REAL     :: PALPHA ! first shape parameter of the dimensionnal distribution
+  REAL     :: PNU    ! second shape parameter of the dimensionnal distribution
+  REAL     :: PP     ! order of the moment
+  REAL     :: PMOMG  ! result: moment of order ZP
+!
+!------------------------------------------------------------------------------
+!
+!
+  PMOMG = GAMMA(PNU+PP/PALPHA)/GAMMA(PNU)
+!
+  END FUNCTION MOMG
+!
+!-------------------------------------------------------------------------------
+!
+!
+END SUBROUTINE INI_SNOW
diff --git a/src/common/micro/ini_tiwmx.F90 b/src/common/micro/ini_tiwmx.F90
new file mode 100644
index 000000000..2e3209a38
--- /dev/null
+++ b/src/common/micro/ini_tiwmx.F90
@@ -0,0 +1,55 @@
+SUBROUTINE INI_TIWMX
+  USE PARKIND1, ONLY  : JPRB
+  USE MODD_CST, ONLY  :  XALPW,XBETAW,XGAMW,XALPI,XBETAI,XGAMI,  &
+       &  XTT,XRV,XLVTT,XLSTT
+! Include function definitions
+  USE MODE_TIWMX_FUN, ONLY : ESATW,DESDTW,ESATI,DESDTI,AA2,AA2W,AM3,AF3,BB3,BB3W,REDIN
+! Only the tables, _NOT_ the functions!
+  USE MODE_TIWMX, ONLY : XNDEGR,NSTART,NSTOP,ESTABW,DESTABW,ESTABI,DESTABI, &
+       & A2TAB,BB3TAB,AM3TAB,AF3TAB,A2WTAB,BB3WTAB,REDINTAB
+  USE YOMHOOK, ONLY : LHOOK, DR_HOOK
+  IMPLICIT NONE
+
+  INTEGER :: JK
+  REAL :: ZTEMP
+
+  REAL(KIND=JPRB) :: ZHOOK_HANDLE
+
+  IF (LHOOK) CALL DR_HOOK('INI_TIWMX',0,ZHOOK_HANDLE)
+
+  DO JK=NSTART,NSTOP
+     ZTEMP = REAL(JK)/XNDEGR
+
+     ESTABW(JK) = ESATW(ZTEMP)
+     DESTABW(JK) = DESDTW(ZTEMP)
+
+     ESTABI(JK) = ESATI(ZTEMP)
+     DESTABI(JK) = DESDTI(ZTEMP)
+
+!    Functions for ice crystals or water droplets:
+     A2TAB(JK) = AA2(ZTEMP)
+     A2WTAB(JK) = AA2W(ZTEMP)
+     AM3TAB(JK) = AM3(ZTEMP)
+     AF3TAB(JK) = AF3(ZTEMP)
+     BB3TAB(JK) = BB3(ZTEMP)
+     BB3WTAB(JK) = BB3W(ZTEMP)
+     REDINTAB(JK) = REDIN(ZTEMP)
+
+     IF (ZTEMP.GT.273.15) THEN
+!       Avoid ice calculation above freezing level:
+        ESTABI(JK) = ESATW(ZTEMP)
+        DESTABI(JK) = DESDTW(ZTEMP)
+
+!       Functions for ice crystal growth:  
+        A2TAB(JK) = AA2(ZTEMP)
+        A2WTAB(JK) = AA2W(ZTEMP)
+        AM3TAB(JK) = 0.
+        AF3TAB(JK) = 0.
+        BB3TAB(JK) = BB3(ZTEMP)
+        BB3WTAB(JK) = BB3W(ZTEMP)
+     ENDIF
+  END DO
+
+  IF (LHOOK) CALL DR_HOOK('INI_TIWMX',1,ZHOOK_HANDLE)
+
+END SUBROUTINE INI_TIWMX
diff --git a/src/common/micro/modd_rain_ice_param.F90 b/src/common/micro/modd_rain_ice_param.F90
index 7568e2a68..8fdcd71e8 100644
--- a/src/common/micro/modd_rain_ice_param.F90
+++ b/src/common/micro/modd_rain_ice_param.F90
@@ -57,7 +57,9 @@ REAL,SAVE :: XSCFAC,                           & ! Constants for raindrop
              X0EVAR,X1EVAR,XEX0EVAR,XEX1EVAR,  & ! evaporation: EVA and for
              X0DEPI,X2DEPI,                    & ! deposition : DEP on I,
              X0DEPS,X1DEPS,XEX0DEPS,XEX1DEPS,  & !                  on S and
-             X0DEPG,X1DEPG,XEX0DEPG,XEX1DEPG     !                  on G
+             XRDEPSRED,&
+             X0DEPG,X1DEPG,XEX0DEPG,XEX1DEPG,  & !                  on G
+             XRDEPGRED
 !
 REAL,SAVE :: XTIMAUTI,XTEXAUTI,XCRIAUTI,       & ! Constants for pristine ice
              XT0CRIAUTI,XACRIAUTI,XBCRIAUTI      ! autoconversion : AUT
@@ -181,5 +183,6 @@ REAL,DIMENSION(:,:), SAVE, ALLOCATABLE         &
                          :: XKER_SWETH,        & ! Normalized kernel for SWETH
                             XKER_GWETH,        & ! Normalized kernel for GWETH
                             XKER_RWETH           ! Normalized kernel for RWETH
+REAL,SAVE :: XFRMIN(40)                          ! Parmeters to modify melt and growth of graupels etc.
 !
 END MODULE MODD_RAIN_ICE_PARAM
diff --git a/src/common/micro/mode_icecloud.F90 b/src/common/micro/mode_icecloud.F90
index 774dd6887..e53841902 100644
--- a/src/common/micro/mode_icecloud.F90
+++ b/src/common/micro/mode_icecloud.F90
@@ -11,8 +11,7 @@ SUBROUTINE ICECLOUD  &
   USE YOMHOOK , ONLY : LHOOK, DR_HOOK
   USE MODD_CST,ONLY : XCPD,XCPV,XLVTT,XLSTT,XG,XRD,XEPSILO
   USE MODE_TIWMX, ONLY: ESATW, ESATI
-  USE MODE_QSATMX_TAB
-!  USE MODI_TIWMX
+  USE MODE_QSATMX_TAB, ONLY: QSATMX_TAB
   IMPLICIT NONE
 !-----------------------------------------------------------------------
 !
@@ -77,15 +76,12 @@ REAL :: ZSIGMAX,ZSIGMAY,ZSIGMAZ,ZXDIST,ZYDIST,&
      & ZRHDIF,ZWCLD,ZI2W,ZRHLIMICE,ZRHLIMINV,ZA,ZRHI,ZR
 INTEGER :: JK
 
-!     External function
-!REAL :: QSATMX_TAB
-
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('ICECLOUD',0,ZHOOK_HANDLE)
 
 ZSIGMAX=3.E-4         ! assumed rh variation in x axis direction
 ZSIGMAY=ZSIGMAX            ! assumed rh variation in y axis direction
-ZSIGMAZ=1.6E-2 ! t5
+ZSIGMAZ=1.E-2
 
 !ZXDIST=DTHETA*110000.
 ZXDIST=2500.
diff --git a/src/common/micro/mode_tiwmx_fun.F90 b/src/common/micro/mode_tiwmx_fun.F90
new file mode 100644
index 000000000..7a708b859
--- /dev/null
+++ b/src/common/micro/mode_tiwmx_fun.F90
@@ -0,0 +1,108 @@
+!@no_insert_drhook
+!     ######spl
+      MODULE MODE_TIWMX_FUN
+!     ###############
+!
+!!****  *MODD_TIWMX_FUN* - 
+!!
+!!    PURPOSE
+!!    -------
+!       The purpose of this  ...
+!
+!!
+!!    REFERENCE
+!!    ---------
+!!      Book2 of documentation of Meso-NH (ha ha)
+!!          
+!!    AUTHOR
+!!    ------
+!!      K. I. Ivarsson   *SMHI*
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original    20/11/14  
+!-------------------------------------------------------------------------------
+!
+!*       0.   DECLARATIONS
+!             ------------
+!
+USE MODD_CST, ONLY : XALPW,XBETAW,XGAMW,XTT,XALPI,XBETAI,XGAMI,XLSTT,XRV,XLVTT,&
+     &XLSTT,XP00,XCPV,XCI,XCL
+
+IMPLICIT NONE
+
+CONTAINS
+!
+  REAL FUNCTION ESATW(TT)
+    REAL,INTENT(IN) :: TT
+    ESATW = EXP( XALPW - XBETAW/TT - XGAMW*ALOG(TT) )
+  END FUNCTION ESATW
+!      
+!     pure saturation pressure over ice for tt <0 C,
+!     esatw otherwise.
+!
+  REAL FUNCTION ESATI(TT)
+    REAL,INTENT(IN) :: TT
+    ESATI = ( 0.5 + SIGN(0.5,TT-XTT) )*EXP( XALPW - XBETAW/TT - XGAMW*ALOG(TT) ) - &
+         &   ( SIGN(0.5,TT-XTT) - 0.5)*EXP( XALPI - XBETAI/TT - XGAMI*ALOG(TT) )
+  END FUNCTION ESATI
+!
+!     pure saturation pressure over water
+  REAL FUNCTION DESDTW(TT)
+    REAL,INTENT(IN) :: TT
+    DESDTW = ESATW(TT)*(XBETAW/TT - XGAMW)/TT
+  END FUNCTION DESDTW
+
+  REAL FUNCTION DESDTI(TT)
+    REAL,INTENT(IN) :: TT
+    DESDTI = ( 0.5 + SIGN(0.5,TT-XTT) )*DESDTW(TT) - &
+         & ( SIGN(0.5,TT-XTT) - 0.5)*ESATI(TT)*(XBETAI/TT - XGAMI)/TT
+  END FUNCTION DESDTI
+
+!     Ice crystal function:
+  REAL FUNCTION AA2(TT)
+    REAL,INTENT(IN) :: TT
+    AA2 =  ( XLSTT + (XCPV-XCI)*(TT-XTT) )**2 / &
+     & (2.38E-2 + 0.0071E-2 *(TT - XTT))/(TT**2*XRV)
+  END FUNCTION AA2
+
+!     Water droplet function:
+  REAL FUNCTION AA2W(TT)
+    REAL,INTENT(IN) :: TT
+    AA2W = ( (XLVTT+ (XCPV-XCL)*(TT-XTT))**2)/ &
+     &  (2.38E-2 + 0.0071E-2 *(TT - XTT))/(TT**2*XRV)
+  END FUNCTION AA2W
+
+!     Ice crystal function:
+  REAL FUNCTION BB3(TT)
+    REAL,INTENT(IN) :: TT
+    BB3 = XRV/(0.211E-4 * (TT/XTT)**1.94 * XP00)*TT/ESATI(TT)
+  END FUNCTION BB3
+
+!     Water droplet function:
+  REAL FUNCTION BB3W(TT)
+    REAL,INTENT(IN) :: TT
+    BB3W =  XRV/(0.211E-4 * (TT/XTT)**1.94 * XP00)*TT/ESATW(TT)
+  END FUNCTION BB3W
+
+! Meyers IN concentration function:
+  REAL FUNCTION AM3(TT)
+    REAL,INTENT(IN) :: TT
+    AM3 = 1000.*EXP(12.96*(ESATW(TT)/ESATI(TT) -1.) -0.639)
+  END FUNCTION AM3
+
+! Fletchers IN concentration function:
+  REAL FUNCTION AF3(TT)
+    REAL,INTENT(IN) :: TT
+    AF3 = 0.01*EXP(0.6*(XTT-TT))
+  END FUNCTION AF3
+
+! Function for IN concentration reduction between 0 and -20 C:
+  REAL FUNCTION REDIN(TT)
+    REAL,INTENT(IN) :: TT
+    REAL ZZT
+    ZZT = MAX(0., MIN(1.,(XTT - TT)/20.))
+    REDIN = 1.- (1.-ZZT)/(ZZT**3 + (1.-ZZT)**3)**.333    
+  END FUNCTION REDIN
+
+END MODULE MODE_TIWMX_FUN
diff --git a/src/common/micro/modi_condensation.F90 b/src/common/micro/modi_condensation.F90
index 32d53731b..790f62fe5 100644
--- a/src/common/micro/modi_condensation.F90
+++ b/src/common/micro/modi_condensation.F90
@@ -7,10 +7,12 @@ INTERFACE
        SUBROUTINE CONDENSATION( KIU, KJU, KKU, KIB, KIE, KJB, KJE, KKB, KKE, KKL,&
           HFRAC_ICE, HCONDENS, HLAMBDA3, &
           PPABS, PZZ, PRHODREF, PT, PRV_IN, PRV_OUT, PRC_IN, PRC_OUT, PRI_IN, PRI_OUT, &
-          PRR, PRS, PRG, PSIGS, PMFCONV, PCLDFR, PSIGRC, OUSERI,&
-          OSIGMAS, OCND2, PSIGQSAT, &
+          PRR, PRS, PRG, PSIGS, PMFCONV, PCLDFR, &
+          PSIGRC, OUSERI, OSIGMAS, OCND2, LHGT_QS, &
+          PICLDFR, PWCLDFR, PSSIO, PSSIU, PIFR, PSIGQSAT, &
           PLV, PLS, PCPH, &
-          PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, PICE_CLD_WGT)
+          PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF, &
+          PICE_CLD_WGT)
 !
 !
 INTEGER,                      INTENT(IN)    :: KIU    ! horizontal dimension in x
@@ -32,15 +34,6 @@ REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN)    :: PRHODREF
 REAL, DIMENSION(KIU,KJU,KKU), INTENT(INOUT) :: PT     ! grid scale T  (K)
 REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN)    :: PRV_IN ! grid scale water vapor mixing ratio (kg/kg) in input
 REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT)   :: PRV_OUT! grid scale water vapor mixing ratio (kg/kg) in output
-LOGICAL, INTENT(IN)                         :: OUSERI ! logical switch to compute both
-                                                      ! liquid and solid condensate (OUSERI=.TRUE.)
-                                                      ! or only solid condensate (OUSERI=.FALSE.)
-LOGICAL, INTENT(IN)                         :: OSIGMAS! use present global Sigma_s values
-                                                      ! or that from turbulence scheme
-LOGICAL, INTENT(IN)                         :: OCND2  ! logical switch to sparate liquid and ice
-                                                      ! more rigid (DEFALT value : .FALSE.)
-REAL, DIMENSION(KIU,KJU),     INTENT(IN)    :: PSIGQSAT ! use an extra "qsat" variance contribution (OSIGMAS case)
-                                                        ! multiplied by PSIGQSAT
 REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN)    :: PRC_IN ! grid scale r_c mixing ratio (kg/kg) in input
 REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT)   :: PRC_OUT! grid scale r_c mixing ratio (kg/kg) in output
 REAL, DIMENSION(KIU,KJU,KKU), INTENT(IN)    :: PRI_IN ! grid scale r_i (kg/kg) in input
@@ -53,6 +46,24 @@ REAL, DIMENSION(:,:,:),       INTENT(IN)    :: PMFCONV! convective mass flux (kg
 REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT)   :: PCLDFR ! cloud fraction
 REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT)   :: PSIGRC ! s r_c / sig_s^2
 
+LOGICAL, INTENT(IN)                         :: OUSERI ! logical switch to compute both
+                                                      ! liquid and solid condensate (OUSERI=.TRUE.)
+                                                      ! or only solid condensate (OUSERI=.FALSE.)
+LOGICAL, INTENT(IN)                         :: OSIGMAS! use present global Sigma_s values
+                                                      ! or that from turbulence scheme
+LOGICAL, INTENT(IN)                         :: OCND2  ! logical switch to sparate liquid and ice
+                                                      ! more rigid (DEFAULT value : .FALSE.)
+LOGICAL, INTENT(IN)                         :: LHGT_QS! logical switch for height dependent VQSIGSAT
+REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT)   :: PICLDFR! ice cloud fraction
+REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT)   :: PWCLDFR! water or mixed-phase cloud fraction
+REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT)   :: PSSIO  ! Super-saturation with respect to ice in the  
+                                                      ! supersaturated fraction
+REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT)   :: PSSIU  ! Sub-saturation with respect to ice in the  
+                                                      ! subsaturated fraction
+REAL, DIMENSION(KIU,KJU,KKU), INTENT(OUT)   :: PIFR   ! Ratio cloud ice moist part
+REAL, DIMENSION(KIU,KJU),     INTENT(IN)    :: PSIGQSAT ! use an extra "qsat" variance contribution (OSIGMAS case)
+                                                        ! multiplied by PSIGQSAT
+
 REAL, DIMENSION(KIU,KJU,KKU), OPTIONAL, INTENT(IN)    :: PLV    ! Latent heat L_v
 REAL, DIMENSION(KIU,KJU,KKU), OPTIONAL, INTENT(IN)    :: PLS    ! Latent heat L_s
 REAL, DIMENSION(KIU,KJU,KKU), OPTIONAL, INTENT(IN)    :: PCPH   ! Specific heat C_ph
diff --git a/src/common/micro/modi_ice_adjust.F90 b/src/common/micro/modi_ice_adjust.F90
index 147a971cd..b955c8095 100644
--- a/src/common/micro/modi_ice_adjust.F90
+++ b/src/common/micro/modi_ice_adjust.F90
@@ -5,16 +5,19 @@
 INTERFACE
 !
       SUBROUTINE ICE_ADJUST (KKA, KKU, KKL, KRR, HFRAC_ICE, HCONDENS, HLAMBDA3,&
-                             HBUNAME, OSUBG_COND, OSIGMAS, OCND2, HSUBG_MF_PDF,&
-                             PTSTEP, PSIGQSAT,                                 &
+                             HBUNAME, OSUBG_COND, OSIGMAS, OCND2, LHGT_QS,     &
+                             HSUBG_MF_PDF, PTSTEP, PSIGQSAT,                   &
                              PRHODJ, PEXNREF, PRHODREF, PSIGS, PMFCONV,        &
                              PPABST, PZZ,                                      &
                              PEXN, PCF_MF, PRC_MF, PRI_MF,                     &
+                             PICLDFR, PWCLDFR, PSSIO, PSSIU, PIFR,             &
                              PRV, PRC, PRVS, PRCS, PTH, PTHS, PSRCS, PCLDFR,   &
-                             PRR, PRI, PRIS, PRS, PRG, TBUDGETS, KBUDGETS, PRH,&
+                             PRR, PRI, PRIS, PRS, PRG, TBUDGETS, KBUDGETS,     &
+                             PICE_CLD_WGT,                                     &
+                             PRH,                                              &
                              POUT_RV, POUT_RC, POUT_RI, POUT_TH,               &
-                             PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF,           &
-                             PICE_CLD_WGT)
+                             PHLC_HRC, PHLC_HCF, PHLI_HRI, PHLI_HCF)
+!
 USE MODD_BUDGET,         ONLY: TBUDGETDATA
 IMPLICIT NONE
 !
@@ -22,9 +25,9 @@ IMPLICIT NONE
 !*       0.1   Declarations of dummy arguments :
 !
 !
-INTEGER,                  INTENT(IN)    :: KKA  !near ground array index
-INTEGER,                  INTENT(IN)    :: KKU  !uppest atmosphere array index
-INTEGER,                  INTENT(IN)    :: KKL  !vert. levels type 1=MNH -1=ARO
+INTEGER,                  INTENT(IN)    :: KKA      !near ground array index
+INTEGER,                  INTENT(IN)    :: KKU      !uppest atmosphere array index
+INTEGER,                  INTENT(IN)    :: KKL      !vert. levels type 1=MNH -1=ARO
 INTEGER,                  INTENT(IN)    :: KRR      ! Number of moist variables
 CHARACTER(LEN=1),         INTENT(IN)    :: HFRAC_ICE
 CHARACTER(LEN=80),        INTENT(IN)    :: HCONDENS
@@ -32,59 +35,67 @@ CHARACTER(LEN=4),         INTENT(IN)    :: HLAMBDA3 ! formulation for lambda3 co
 CHARACTER(LEN=4),         INTENT(IN)    :: HBUNAME  ! Name of the budget
 LOGICAL,                  INTENT(IN)    :: OSUBG_COND ! Switch for Subgrid
                                                     ! Condensation
-LOGICAL                                 :: OSIGMAS  ! Switch for Sigma_s:
+LOGICAL,                  INTENT(IN)    :: OSIGMAS  ! Switch for Sigma_s:
                                                     ! use values computed in CONDENSATION
                                                     ! or that from turbulence scheme
-LOGICAL                                 :: OCND2    ! logical switch to sparate liquid
+LOGICAL,                  INTENT(IN)    :: OCND2    ! logical switch to separate liquid
                                                     ! and ice
-                                                    ! more rigid (DEFALT value : .FALSE.)
-CHARACTER(LEN=80),        INTENT(IN)    :: HSUBG_MF_PDF
+                                                    ! more rigid (DEFAULT value : .FALSE.)
+LOGICAL,                  INTENT(IN)   :: LHGT_QS   ! logical switch for height dependent VQSIGSAT
+CHARACTER(LEN=80),        INTENT(IN)   :: HSUBG_MF_PDF
 REAL,                     INTENT(IN)   :: PTSTEP    ! Double Time step
                                                     ! (single if cold start)
 REAL, DIMENSION(:,:),     INTENT(IN)   :: PSIGQSAT  ! coeff applied to qsat variance contribution
 !
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PRHODJ  ! Dry density * Jacobian
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PEXNREF ! Reference Exner function
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PRHODREF
+REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)   ::  PRHODJ  ! Dry density * Jacobian
+REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)   ::  PEXNREF ! Reference Exner function
+REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)   ::  PRHODREF
 !
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PSIGS   ! Sigma_s at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PMFCONV ! convective mass flux
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PPABST  ! Absolute Pressure at t
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PZZ     ! height of model layer
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PEXN    ! Exner function
+REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)   ::  PSIGS   ! Sigma_s at time t
+REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)   ::  PMFCONV ! convective mass flux
+REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)   ::  PPABST  ! Absolute Pressure at t
+REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)   ::  PZZ     ! height of model layer
+REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)   ::  PEXN    ! Exner function
 !
-REAL, DIMENSION(:,:,:),     INTENT(IN)    :: PCF_MF! Convective Mass Flux Cloud fraction
-REAL, DIMENSION(:,:,:),     INTENT(IN)    :: PRC_MF! Convective Mass Flux liquid mixing ratio
-REAL, DIMENSION(:,:,:),     INTENT(IN)    :: PRI_MF! Convective Mass Flux ice mixing ratio
+REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)    :: PCF_MF  ! Convective Mass Flux Cloud fraction
+REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)    :: PRC_MF  ! Convective Mass Flux liquid mixing ratio
+REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)    :: PRI_MF  ! Convective Mass Flux ice mixing ratio
 !
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PRV     ! Water vapor m.r. to adjust
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PRC     ! Cloud water m.r. to adjust
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRVS    ! Water vapor m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRCS    ! Cloud water m.r. source
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTH     ! Theta to adjust
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PTHS    ! Theta source
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PSRCS   ! Second-order flux
+REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)    :: PRV     ! Water vapor m.r. to adjust
+REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)    :: PRC     ! Cloud water m.r. to adjust
+REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(INOUT) :: PRVS    ! Water vapor m.r. source
+REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(INOUT) :: PRCS    ! Cloud water m.r. source
+REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(IN)    :: PTH     ! Theta to adjust
+REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(INOUT) :: PTHS    ! Theta source
+REAL, DIMENSION(:,:,:), CONTIGUOUS,   INTENT(OUT)   :: PSRCS   ! Second-order flux
                                                    ! s'rc'/2Sigma_s2 at time t+1
                                                    ! multiplied by Lambda_3
-REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PCLDFR  ! Cloud fraction
+REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(OUT)   :: PCLDFR  ! Cloud fraction
+REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(OUT)   :: PICLDFR ! ice cloud fraction
+REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(OUT)   :: PWCLDFR ! water or mixed-phase cloud fraction
+REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(OUT)   :: PSSIO   ! Super-saturation with respect to ice in the  
+                                                              ! supersaturated fraction
+REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(OUT)   :: PSSIU   ! Sub-saturation with respect to ice in the  
+                                                              ! subsaturated fraction 
+REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(OUT)   :: PIFR    ! Ratio cloud ice moist part to dry part
 !
-REAL, DIMENSION(:,:,:),  INTENT(INOUT)::  PRIS ! Cloud ice  m.r. at t+1
-REAL, DIMENSION(:,:,:),  INTENT(IN)   ::  PRR  ! Rain water m.r. to adjust
-REAL, DIMENSION(:,:,:),  INTENT(IN)   ::  PRI  ! Cloud ice  m.r. to adjust
-REAL, DIMENSION(:,:,:),  INTENT(IN)   ::  PRS  ! Aggregate  m.r. to adjust
-REAL, DIMENSION(:,:,:),  INTENT(IN)   ::  PRG  ! Graupel    m.r. to adjust
-REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(IN)   ::  PRH  ! Hail       m.r. to adjust
-REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT)  ::  POUT_RV ! Adjusted value
-REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT)  ::  POUT_RC ! Adjusted value
-REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT)  ::  POUT_RI ! Adjusted value
-REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT)  ::  POUT_TH ! Adjusted value
-REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT)  ::  PHLC_HRC
-REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT)  ::  PHLC_HCF
-REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT)  ::  PHLI_HRI
-REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(OUT)  ::  PHLI_HCF
+REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(INOUT) :: PRIS    ! Cloud ice  m.r. at t+1
+REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(IN)    :: PRR     ! Rain water m.r. to adjust
+REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(IN)    :: PRI     ! Cloud ice  m.r. to adjust
+REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(IN)    :: PRS     ! Aggregate  m.r. to adjust
+REAL, DIMENSION(:,:,:), CONTIGUOUS,  INTENT(IN)    :: PRG     ! Graupel    m.r. to adjust
 TYPE(TBUDGETDATA), DIMENSION(KBUDGETS), INTENT(INOUT) :: TBUDGETS
-INTEGER, INTENT(IN) :: KBUDGETS
-REAL, DIMENSION(:,:),   OPTIONAL, INTENT(IN)   :: PICE_CLD_WGT
+INTEGER,                             INTENT(IN)    :: KBUDGETS
+REAL, DIMENSION(:,:),   CONTIGUOUS, OPTIONAL, INTENT(IN)   ::  PICE_CLD_WGT
+REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(IN)   ::  PRH  ! Hail       m.r. to adjust
+REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT)  ::  POUT_RV ! Adjusted value
+REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT)  ::  POUT_RC ! Adjusted value
+REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT)  ::  POUT_RI ! Adjusted value
+REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT)  ::  POUT_TH ! Adjusted value
+REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT)  ::  PHLC_HRC
+REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT)  ::  PHLC_HCF
+REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT)  ::  PHLI_HRI
+REAL, DIMENSION(:,:,:), CONTIGUOUS, OPTIONAL, INTENT(OUT)  ::  PHLI_HCF
 !
 END SUBROUTINE ICE_ADJUST
 !
diff --git a/src/common/micro/modi_ini_snow.F90 b/src/common/micro/modi_ini_snow.F90
new file mode 100644
index 000000000..788ec7c9a
--- /dev/null
+++ b/src/common/micro/modi_ini_snow.F90
@@ -0,0 +1,15 @@
+!     ######spl
+       MODULE MODI_INI_SNOW
+!      ########################
+!
+INTERFACE
+      SUBROUTINE INI_SNOW ( KLUOUT )
+!
+INTEGER,                 INTENT(IN) :: KLUOUT    ! Logical unit number for prints
+
+!
+END SUBROUTINE INI_SNOW
+!
+END INTERFACE
+!
+END MODULE MODI_INI_SNOW
diff --git a/src/common/micro/modi_ini_tiwmx.F90 b/src/common/micro/modi_ini_tiwmx.F90
new file mode 100644
index 000000000..9ef7e6409
--- /dev/null
+++ b/src/common/micro/modi_ini_tiwmx.F90
@@ -0,0 +1,16 @@
+!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC for details. version 1.
+!     ######spl
+        MODULE MODI_INI_TIWMX
+!       #####################
+!
+INTERFACE
+!
+SUBROUTINE INI_TIWMX
+END SUBROUTINE INI_TIWMX
+!
+END INTERFACE
+!
+END MODULE MODI_INI_TIWMX
diff --git a/src/common/turb/modd_turbn.f90 b/src/common/turb/modd_turbn.F90
similarity index 100%
rename from src/common/turb/modd_turbn.f90
rename to src/common/turb/modd_turbn.F90
diff --git a/src/common/turb/mode_coefj.f90 b/src/common/turb/mode_coefj.F90
similarity index 100%
rename from src/common/turb/mode_coefj.f90
rename to src/common/turb/mode_coefj.F90
diff --git a/src/mesonh/ext/resolved_cloud.f90 b/src/mesonh/ext/resolved_cloud.f90
index a425fe89c..e087afdec 100644
--- a/src/mesonh/ext/resolved_cloud.f90
+++ b/src/mesonh/ext/resolved_cloud.f90
@@ -478,6 +478,7 @@ REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZICEFR
 REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZPRCFR
 REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZTM
 REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2)) :: ZSIGQSAT2D
+REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: ZDUM
 ZSIGQSAT2D(:,:) = PSIGQSAT
 !
 !------------------------------------------------------------------------------
@@ -743,10 +744,11 @@ SELECT CASE ( HCLOUD )
     ZZZ = MZF( PZZ )
     IF(LRED .AND. LADJ_BEFORE) THEN
       CALL ICE_ADJUST (1, IKU, 1, KRR, CFRAC_ICE_ADJUST, CCONDENS, CLAMBDA3,   &
-                      'ADJU', OSUBG_COND, OSIGMAS, .FALSE., CSUBG_MF_PDF,      &
-                      PTSTEP, ZSIGQSAT2D,                                      &
+                      'ADJU', OSUBG_COND, OSIGMAS, .FALSE., .FALSE.,           &
+                      CSUBG_MF_PDF, PTSTEP, ZSIGQSAT2D,                        &
                       PRHODJ, PEXNREF, PRHODREF, PSIGS, PMFCONV, PPABST, ZZZ,  &
                       ZEXN, PCF_MF, PRC_MF, PRI_MF,                            &
+                      ZDUM, ZDUM, ZDUM, ZDUM, ZDUM,                            &
                       PRV=PRS(:,:,:,1)*PTSTEP, PRC=PRS(:,:,:,2)*PTSTEP,        &
                       PRVS=PRS(:,:,:,1), PRCS=PRS(:,:,:,2),                    &
                       PTH=PTHS*PTSTEP, PTHS=PTHS, PSRCS=PSRCS, PCLDFR=PCLDFR,  &
@@ -795,10 +797,11 @@ SELECT CASE ( HCLOUD )
 !
     IF (.NOT. LRED .OR. (LRED .AND. LADJ_AFTER) ) THEN
       CALL ICE_ADJUST (1, IKU, 1, KRR, CFRAC_ICE_ADJUST, CCONDENS, CLAMBDA3,   &
-                       'DEPI', OSUBG_COND, OSIGMAS, .FALSE.,CSUBG_MF_PDF,      &
-                       PTSTEP, ZSIGQSAT2D,                                     &
+                       'DEPI', OSUBG_COND, OSIGMAS, .FALSE., .FALSE.,          &
+                       CSUBG_MF_PDF, PTSTEP, ZSIGQSAT2D,                       &
                        PRHODJ, PEXNREF, PRHODREF, PSIGS, PMFCONV, PPABST, ZZZ, &
                        ZEXN, PCF_MF, PRC_MF, PRI_MF,                           &
+                       ZDUM, ZDUM, ZDUM, ZDUM, ZDUM,                           &
                        PRV=PRS(:,:,:,1)*PTSTEP, PRC=PRS(:,:,:,2)*PTSTEP,       &
                        PRVS=PRS(:,:,:,1), PRCS=PRS(:,:,:,2),                   &
                        PTH=PTHS*PTSTEP, PTHS=PTHS, PSRCS=PSRCS, PCLDFR=PCLDFR, &
@@ -830,10 +833,11 @@ SELECT CASE ( HCLOUD )
     ZZZ = MZF( PZZ )
     IF(LRED .AND. LADJ_BEFORE) THEN
       CALL ICE_ADJUST (1, IKU, 1, KRR, CFRAC_ICE_ADJUST, CCONDENS, CLAMBDA3,   &
-                       'ADJU', OSUBG_COND, OSIGMAS, .FALSE., CSUBG_MF_PDF,     &
-                       PTSTEP, ZSIGQSAT2D,                                     &
+                       'ADJU', OSUBG_COND, OSIGMAS, .FALSE., .FALSE.,          &
+                       CSUBG_MF_PDF, PTSTEP, ZSIGQSAT2D,                       &
                        PRHODJ, PEXNREF, PRHODREF, PSIGS, PMFCONV, PPABST, ZZZ, &
                        ZEXN, PCF_MF, PRC_MF, PRI_MF,                           &
+                       ZDUM, ZDUM, ZDUM, ZDUM, ZDUM,                           &
                        PRV=PRS(:,:,:,1)*PTSTEP, PRC=PRS(:,:,:,2)*PTSTEP,       &
                        PRVS=PRS(:,:,:,1), PRCS=PRS(:,:,:,2),                   &
                        PTH=PTHS*PTSTEP, PTHS=PTHS, PSRCS=PSRCS, PCLDFR=PCLDFR, &
@@ -887,10 +891,11 @@ SELECT CASE ( HCLOUD )
 !
     IF (.NOT. LRED .OR. (LRED .AND. LADJ_AFTER) ) THEN
      CALL ICE_ADJUST (1, IKU, 1, KRR, CFRAC_ICE_ADJUST, CCONDENS, CLAMBDA3,  &
-                     'DEPI', OSUBG_COND, OSIGMAS, .FALSE., CSUBG_MF_PDF,     &
-                     PTSTEP, ZSIGQSAT2D,                                     &
+                     'DEPI', OSUBG_COND, OSIGMAS, .FALSE., .FALSE.,          &
+                     CSUBG_MF_PDF, PTSTEP, ZSIGQSAT2D,                       &
                      PRHODJ, PEXNREF, PRHODREF, PSIGS, PMFCONV, PPABST, ZZZ, &
                      ZEXN, PCF_MF, PRC_MF, PRI_MF,                           &
+                     ZDUM, ZDUM, ZDUM, ZDUM, ZDUM,                           &
                      PRV=PRS(:,:,:,1)*PTSTEP, PRC=PRS(:,:,:,2)*PTSTEP,       &
                      PRVS=PRS(:,:,:,1), PRCS=PRS(:,:,:,2),                   &
                      PTH=PTHS*PTSTEP, PTHS=PTHS, PSRCS=PSRCS, PCLDFR=PCLDFR, &
diff --git a/src/mesonh/micro/ice_adjust_elec.f90 b/src/mesonh/micro/ice_adjust_elec.f90
index 19ac78f72..a44b468c0 100644
--- a/src/mesonh/micro/ice_adjust_elec.f90
+++ b/src/mesonh/micro/ice_adjust_elec.f90
@@ -263,7 +263,7 @@ REAL, DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) &
                             ZLV,  &  ! guess of the Lv at t+1
                             ZLS,  &  ! guess of the Ls at t+1
       ZW1,ZW2,ZW3,ZW4,ZW5,ZW6,ZW7,&  ! Work arrays for intermediate fields
-      ZW1_IN, ZW2_IN, ZW3_IN,     &
+    ZW1_IN, ZW2_IN, ZW3_IN, ZDUM, &
                             ZCND     ! CND=(T-T00)/(T0-T00) cf sc doc and TAO etal (89)
 REAL, DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) &
                          :: ZWE1, &
@@ -377,11 +377,13 @@ DO JITER = 1, ITERMAX
     ZSIGQSAT2D(:,:)=PSIGQSAT
     ZW4 = 1. ! PRODREF is not used if HL variables are not present
 !
-    CALL CONDENSATION( IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE,1, 'T', 'CB02', 'CB',   &
+    CALL CONDENSATION( IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE,1, &
+       'T', 'CB02', 'CB',   &
        PPABST, PZZ, ZW4, ZT, ZW3_IN, ZW3, ZW1_IN, ZW1, ZW2_IN, ZW2, &
-       PRRS*PTSTEP, PRSS*PTSTEP, PRGS*PTSTEP, &
-       PSIGS, PMFCONV, PCLDFR, PSRCS, .TRUE., &
-       OSIGMAS, .FALSE., ZSIGQSAT2D, PLV=ZLV, PLS=ZLS, PCPH=ZCPH )
+       PRRS*PTSTEP, PRSS*PTSTEP, PRGS*PTSTEP, PSIGS, PMFCONV, PCLDFR, &
+       PSRCS, .TRUE., OSIGMAS, .FALSE., .FALSE., &
+       ZDUM, ZDUM, ZDUM, ZDUM, ZDUM, ZSIGQSAT2D, &
+       PLV=ZLV, PLS=ZLS, PCPH=ZCPH )
 !
 !*       3.2    compute the variation of mixing ratio
 !
diff --git a/src/mesonh/micro/ini_rain_ice.f90 b/src/mesonh/micro/ini_rain_ice.f90
index 9ee20cc3f..ab29fbc68 100644
--- a/src/mesonh/micro/ini_rain_ice.f90
+++ b/src/mesonh/micro/ini_rain_ice.f90
@@ -397,7 +397,7 @@ XLBH   = ( XAH*XCCH*MOMG(XALPHAH,XNUH,XBH) )**(-XLBEXH)
 XLBDAS_MAX = 100000.0
 !
 ZCONC_MAX  = 1.E6 ! Maximal concentration for falling particules set to 1 per cc
-XLBDAS_MAX = ( ZCONC_MAX/XCCS )**(1./XCXS)
+IF(XCCS>0. .AND. XCXS>0. )XLBDAS_MAX = ( ZCONC_MAX/XCCS )**(1./XCXS)
 !
 IF (HCLOUD == 'ICE4') THEN
   ALLOCATE( XRTMIN(7) )
@@ -543,16 +543,26 @@ X0DEPS = (4.0*XPI)*XCCS*XC1S*XF0S*MOMG(XALPHAS,XNUS,1.)
 X1DEPS = (4.0*XPI)*XCCS*XC1S*XF1S*SQRT(XCS)*MOMG(XALPHAS,XNUS,0.5*XDS+1.5)
 XEX0DEPS = XCXS-1.0
 XEX1DEPS = XCXS-0.5*(XDS+3.0)
+XRDEPSRED = 1.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)
+XRDEPGRED = 1.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)
+
+GFLAG = .TRUE.
+IF (GFLAG) THEN
+  WRITE(UNIT=KLUOUT,FMT='("      factors sublimation snow/groupel")')
+  WRITE(UNIT=KLUOUT,FMT='(" mod sublim snow =",E13.6)') XRDEPSRED
+  WRITE(UNIT=KLUOUT,FMT='(" mod sublim graupel =",E13.6)') XRDEPGRED
+END IF
+
 !
 !*       5.3    Constants for pristine ice autoconversion
 !
@@ -1045,6 +1055,20 @@ IF( (KDRYLBDAG/=NDRYLBDAG) .OR. (KDRYLBDAR/=NDRYLBDAR) .OR. (KND/=IND) .OR. &
                      PFDINFTY,XKER_RDRYG                                      )
   WRITE(UNIT=KLUOUT,FMT='(" Read XKER_RDRYG")')
 END IF
+         
+!          8.2.6 Constants for possible modifying some processes related to 
+!                graupeln in XFRMIN(1:8),  IN - concentration in XFRMIN(9) and Kogan 
+!                autoconversion in XFRMIN(10:11). May be used for e.g. ensemble spread
+  XFRMIN(1:6)=0.
+  XFRMIN(7:9)=1.
+  XFRMIN(10) =10.
+  XFRMIN(11) =1.
+  XFRMIN(12) =100.
+  XFRMIN(13) =1.0E-15
+  XFRMIN(14) =120.
+  XFRMIN(15) =1.0E-4
+  XFRMIN(16:20)=0.
+  XFRMIN(21)=1.
 !
 !
 !-------------------------------------------------------------------------------
diff --git a/src/mesonh/micro/lima_adjust_split.f90 b/src/mesonh/micro/lima_adjust_split.f90
index 7534a193a..ebe680c80 100644
--- a/src/mesonh/micro/lima_adjust_split.f90
+++ b/src/mesonh/micro/lima_adjust_split.f90
@@ -275,7 +275,7 @@ REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) &
                             ZRI, ZRI_IN, &
                             ZSIGS, &
                             ZW_MF
-REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2)) :: ZSIGQSAT2D
+REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2)) :: ZSIGQSAT2D, ZDUM
 LOGICAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) &
                          :: GMICRO ! Test where to compute cond/dep proc.
 INTEGER                  :: IMICRO
@@ -510,12 +510,13 @@ DO JITER =1,ITERMAX
       ZRI=0.
       ZSIGS=PSIGS
       ZSIGQSAT2D(:,:)=PSIGQSAT
-      CALL CONDENSATION(IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE, 1, 'S',   &
-           HCONDENS, HLAMBDA3, &
+      CALL CONDENSATION(IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE, 1, &
+           'S', HCONDENS, HLAMBDA3, &
            PPABST, PZZ, PRHODREF, ZT, ZRV_IN, ZRV, ZRC_IN, ZRC, ZRI_IN, ZRI,&
-           PRRS*PTSTEP, PRSS*PTSTEP, PRGS*PTSTEP, &
-           ZSIGS, PMFCONV, PCLDFR, PSRCS, .FALSE., OSIGMAS, .FALSE., &
-           ZSIGQSAT2D, PLV=ZLV, PLS=ZLS, PCPH=ZCPH )
+           PRRS*PTSTEP, PRSS*PTSTEP, PRGS*PTSTEP, ZSIGS, PMFCONV, PCLDFR, &
+           PSRCS, .FALSE., OSIGMAS, .FALSE., .FALSE., &
+           ZDUM, ZDUM, ZDUM, ZDUM, ZDUM, ZSIGQSAT2D, &
+           PLV=ZLV, PLS=ZLS, PCPH=ZCPH )
       PCLDFR(:,:,:) = MIN(PCLDFR(:,:,:) + PCF_MF(:,:,:) , 1.)
       ZRV(:,:,:) = ZRV(:,:,:) - MAX(MIN(PRC_MF(:,:,:), ZRV(:,:,:)),0.)
       ZRC(:,:,:) = ZRC(:,:,:) + MAX(MIN(PRC_MF(:,:,:), ZRV(:,:,:)),0.)
diff --git a/src/mesonh/micro/radtr_satel.f90 b/src/mesonh/micro/radtr_satel.f90
index dbc0cd4e6..48115b4c4 100644
--- a/src/mesonh/micro/radtr_satel.f90
+++ b/src/mesonh/micro/radtr_satel.f90
@@ -258,7 +258,7 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE  :: ZRC_IN, ZRC_OUT ! grid scale r_c mixing
 REAL, DIMENSION(:,:,:), ALLOCATABLE  :: ZRI_IN, ZRI_OUT ! grid scale r_i (kg/kg)
 REAL, DIMENSION(:,:,:), ALLOCATABLE  :: ZRV_IN, ZRV_OUT ! grid scale r_v (kg/kg)
 REAL, DIMENSION(:,:,:), ALLOCATABLE  :: ZRHO
-REAL, DIMENSION(SIZE(PPABST,1),SIZE(PPABST,2)) :: ZSIGQSAT2D
+REAL, DIMENSION(SIZE(PPABST,1),SIZE(PPABST,2)) :: ZSIGQSAT2D, ZDUM
 !----------------------------------------------------------------------------
 !
 !*       1.    INITIALIZATION OF CONSTANTS FOR TRANSFERT CODE
@@ -484,10 +484,12 @@ IF( SIZE(PRT(:,:,:,:),4) >= 2 ) THEN
     ALLOCATE(ZRHO(IIU,IJU,IKU))
     ZRHO=1. !unused
     ZSIGQSAT2D(:,:)=PSIGQSAT
-    CALL CONDENSATION( IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE, 1, 'T', 'CB02', 'CB',&
+    CALL CONDENSATION( IIU, IJU, IKU, IIB, IIE, IJB, IJE, IKB, IKE, 1, &
+         'T', 'CB02', 'CB',&
          PPABST, PZZ, ZRHO, ZTEMP, ZRV_IN, ZRV_OUT, ZRC_IN, ZRC_OUT, ZRI_IN, ZRI_OUT, &
-         PRT(:,:,:,2), PRT(:,:,:,5), PRT(:,:,:,6), PSIGS,&
-         PMFCONV, ZNCLD, ZSIGRC, OUSERI, OSIGMAS, .FALSE., PSIGQSAT=ZSIGQSAT2D )
+         PRT(:,:,:,2), PRT(:,:,:,5), PRT(:,:,:,6), PSIGS, PMFCONV, ZNCLD, &
+         ZSIGRC, OUSERI, OSIGMAS, .FALSE., .FALSE., &
+         ZDUM, ZDUM, ZDUM, ZDUM, ZDUM, ZSIGQSAT2D )
     DEALLOCATE(ZTEMP,ZSIGRC)
     DEALLOCATE(ZRV_OUT)
   ELSE
diff --git a/tools/check_commit_ial.sh b/tools/check_commit_ial.sh
index 2c025352d..cca87f5b8 100755
--- a/tools/check_commit_ial.sh
+++ b/tools/check_commit_ial.sh
@@ -277,6 +277,7 @@ if [ $compilation -eq 1 ]; then
     [ -f $EXT/suphmpa.F90 ] && mv $EXT/suphmpa.F90 ../arpifs/phys_dmn/
     #Special mpa case
     [ -f $EXT/modd_spp_type.F90 ] && mv $EXT/modd_spp_type.F90 ../mpa/micro/externals/
+    [ -f $EXT/spp_mod_type.F90 ] && mv $EXT/spp_mod_type.F90 ../mpa/micro/externals/
     [ -d $EXT/dead_code ] && rm -rf $EXT/dead_code/
     if [ $EXT == "PHYEX/externals" ]; then
       mv $EXT .
-- 
GitLab