diff --git a/src/common/micro/condensation.F90 b/src/common/micro/condensation.F90
index e07e87f180092a51b6f615a8693292e33c9d961b..b5beb21a6915d5b5620348754737804503fbf4ef 100644
--- a/src/common/micro/condensation.F90
+++ b/src/common/micro/condensation.F90
@@ -329,7 +329,7 @@ DO JK=D%NKTB,D%NKTE
           ZFRAC(JI) = PRI_IN(JI,JJ,JK) / (PRC_IN(JI,JJ,JK)+PRI_IN(JI,JJ,JK))
         ENDIF
       END DO
-      CALL COMPUTE_FRAC_ICE(HFRAC_ICE, NEB, ZFRAC(:), PT(:,JJ,JK), IERR) !error code IERR cannot be checked here to not break vectorization
+      CALL COMPUTE_FRAC_ICE(HFRAC_ICE, NEB, ZFRAC(D%NIB:D%NIE), PT(D%NIB:D%NIE,JJ,JK), IERR) !error code IERR cannot be checked here to not break vectorization
     ENDIF
     DO JI=D%NIB,D%NIE
       ZQSL(JI)   = CST%XRD / CST%XRV * ZPV(JI) / ( PPABS(JI,JJ,JK) - ZPV(JI) )
diff --git a/src/common/micro/mode_ice4_compute_pdf.F90 b/src/common/micro/mode_ice4_compute_pdf.F90
index 6fb091d6c2c54691f9cad6371574c0f6417049d3..cbe4a3e2e65872de922705767ba6b65eb04de449 100644
--- a/src/common/micro/mode_ice4_compute_pdf.F90
+++ b/src/common/micro/mode_ice4_compute_pdf.F90
@@ -75,6 +75,7 @@ REAL, DIMENSION(KSIZE) :: ZRCRAUTC,      & !RC value to begin rain formation =XC
                           ZSUMRC, ZSUMRI
 REAL :: ZCOEFFRCM
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
+INTEGER :: JI
 !-------------------------------------------------------------------------------
 !
 IF (LHOOK) CALL DR_HOOK('ICE4_COMPUTE_PDF', 0, ZHOOK_HANDLE)!
@@ -83,6 +84,7 @@ IF (LHOOK) CALL DR_HOOK('ICE4_COMPUTE_PDF', 0, ZHOOK_HANDLE)!
 ZRCRAUTC(:)=XCRIAUTC/PRHODREF(:) ! Autoconversion rc threshold
 IF(HSUBG_AUCV_RC=='NONE') THEN
   !Cloud water is entirely in low or high part
+ !$mnh_expand_where(JI=1:KSIZE)
   WHERE(PRCT(:)>ZRCRAUTC(:))
     PHLC_HCF(:)=1.
     PHLC_LCF(:)=0.
@@ -99,9 +101,11 @@ IF(HSUBG_AUCV_RC=='NONE') THEN
     PHLC_HRC(:)=0.
     PHLC_LRC(:)=0.
   END WHERE
+ !$mnh_end_expand_where(JI=1:KSIZE)
 
 ELSEIF(HSUBG_AUCV_RC=='CLFR') THEN
   !Cloud water is only in the cloudy part and entirely in low or high part
+ !$mnh_expand_where(JI=1:KSIZE)
   WHERE(PCF(:)>0. .AND. PRCT(:)>ZRCRAUTC(:)*PCF(:))
     PHLC_HCF(:)=PCF(:)
     PHLC_LCF(:)=0.
@@ -118,15 +122,18 @@ ELSEIF(HSUBG_AUCV_RC=='CLFR') THEN
     PHLC_HRC(:)=0.
     PHLC_LRC(:)=0.
   END WHERE
+ !$mnh_end_expand_where(JI=1:KSIZE)
 ELSEIF(HSUBG_AUCV_RC=='ADJU') THEN
+ !$mnh_expand_where(JI=1:KSIZE)
   ZSUMRC(:)=PHLC_LRC(:)+PHLC_HRC(:)
-  WHERE(ZSUMRC .GT. 0.)
+  WHERE(ZSUMRC(:) .GT. 0.)
     PHLC_LRC(:)=PHLC_LRC(:)*PRCT(:)/ZSUMRC(:)
     PHLC_HRC(:)=PHLC_HRC(:)*PRCT(:)/ZSUMRC(:)
   ELSEWHERE
     PHLC_LRC(:)=0.
     PHLC_HRC(:)=0.
   ENDWHERE
+ !$mnh_end_expand_where(JI=1:KSIZE)
 ELSEIF(HSUBG_AUCV_RC=='PDF ') THEN
   !Cloud water is split between high and low part according to a PDF
   !    'HLCRECTPDF'    : rectangular PDF form
@@ -136,6 +143,7 @@ ELSEIF(HSUBG_AUCV_RC=='PDF ') THEN
   !    'SIGM'          : Redelsperger and Sommeria (1986)
   IF(HSUBG_PR_PDF=='SIGM') THEN
     ! Redelsperger and Sommeria (1986) but organised according to Turner (2011, 2012)
+   !$mnh_expand_where(JI=1:KSIZE)
     WHERE (PRCT(:)>ZRCRAUTC(:)+PSIGMA_RC(:))
       PHLC_HCF(:)=1.
       PHLC_LCF(:)=0.
@@ -161,9 +169,10 @@ ELSEIF(HSUBG_AUCV_RC=='PDF ') THEN
       PHLC_HRC(:)=0.
       PHLC_LRC(:)=0.
     END WHERE
-   ! Turner (2011, 2012)
+   !$mnh_end_expand_where(JI=1:KSIZE)
   ELSEIF(HSUBG_PR_PDF=='HLCRECTPDF' .OR. HSUBG_PR_PDF=='HLCISOTRIPDF' .OR. &
          &HSUBG_PR_PDF=='HLCTRIANGPDF' .OR. HSUBG_PR_PDF=='HLCQUADRAPDF') THEN
+    ! Turner (2011, 2012)
     ! Calculate maximum value r_cM from PDF forms
     IF(HSUBG_PR_PDF=='HLCRECTPDF' .OR. HSUBG_PR_PDF=='HLCISOTRIPDF') THEN
       ZCOEFFRCM=2.
@@ -172,6 +181,7 @@ ELSEIF(HSUBG_AUCV_RC=='PDF ') THEN
     ELSE IF(HSUBG_PR_PDF=='HLCQUADRAPDF') THEN
       ZCOEFFRCM=4.
     END IF
+   !$mnh_expand_where(JI=1:KSIZE)
     WHERE(PRCT(:).GT.0. .AND. PCF(:).GT.0.)
       ZHLC_RCMAX(:)=ZCOEFFRCM*PRCT(:)/PCF(:)
     END WHERE
@@ -218,13 +228,13 @@ ELSEIF(HSUBG_AUCV_RC=='PDF ') THEN
     WHERE (PRCT(:).GT.0. .AND. PCF(:).GT.0. .AND. ZHLC_RCMAX(:).GT.ZRCRAUTC(:))
       ! Calculate final values for LCF and HCF:
       PHLC_LCF(:)=PCF(:) &
-                    *(ZHLC_HRCLOCAL- &
+                    *(ZHLC_HRCLOCAL(:)- &
                     (PRCT(:) / PCF(:))) &
-                    / (ZHLC_HRCLOCAL-ZHLC_LRCLOCAL)
+                    / (ZHLC_HRCLOCAL(:)-ZHLC_LRCLOCAL(:))
       PHLC_HCF(:)=MAX(0., PCF(:)-PHLC_LCF(:))
       !
       ! Calculate final values for LRC and HRC:
-      PHLC_LRC(:)=ZHLC_LRCLOCAL*PHLC_LCF(:)
+      PHLC_LRC(:)=ZHLC_LRCLOCAL(:)*PHLC_LCF(:)
       PHLC_HRC(:)=MAX(0., PRCT(:)-PHLC_LRC(:))
     ELSEWHERE (PRCT(:).GT.0. .AND. PCF(:).GT.0. .AND. ZHLC_RCMAX(:).LE.ZRCRAUTC(:))
       ! Put all available cloud water and his fraction in the low part
@@ -238,18 +248,20 @@ ELSEIF(HSUBG_AUCV_RC=='PDF ') THEN
       PHLC_LRC(:)=0.
       PHLC_HRC(:)=0.
     END WHERE
-   ELSE
-     CALL PRINT_MSG(NVERB_FATAL,'GEN','ICE4_COMPUTE_PDF','wrong HSUBG_PR_PDF case')
-   ENDIF
+   !$mnh_end_expand_where(JI=1:KSIZE)
+  ELSE
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','ICE4_COMPUTE_PDF','wrong HSUBG_PR_PDF case')
+  ENDIF
 ELSE
   CALL PRINT_MSG(NVERB_FATAL,'GEN','ICE4_COMPUTE_PDF','wrong HSUBG_AUCV case')
 ENDIF
 !
 !Ice water split between high and low content part is done according to autoconversion option
-ZCRIAUTI(:)=MIN(XCRIAUTI,10**(XACRIAUTI*(PT(:)-XTT)+XBCRIAUTI)) ! Autoconversion ri threshold
+!$mnh_expand_where(JI=1:KSIZE)
+  ZCRIAUTI(:)=MIN(XCRIAUTI,10**(XACRIAUTI*(PT(:)-XTT)+XBCRIAUTI)) ! Autoconversion ri threshold
+!$mnh_end_expand_where(JI=1:KSIZE)
 IF(HSUBG_AUCV_RI=='NONE') THEN
-
-
+ !$mnh_expand_where(JI=1:KSIZE)
 !La raison de la non reproduction n'est pas comprise avec certitude
 !Il faudra vérifier que le code fait toujours ce qui est attendu
 !une fois tous les éléments assemblés
@@ -277,8 +289,10 @@ IF(HSUBG_AUCV_RI=='NONE') THEN
     PHLI_LRI(:)=0.
   END WHERE
 #endif
+ !$mnh_end_expand_where(JI=1:KSIZE)
 ELSEIF(HSUBG_AUCV_RI=='CLFR') THEN
   !Cloud water is only in the cloudy part and entirely in low or high part
+ !$mnh_expand_where(JI=1:KSIZE)
   WHERE(PCF(:)>0. .AND. PRIT(:)>ZCRIAUTI(:)*PCF(:))
     PHLI_HCF(:)=PCF(:)
     PHLI_LCF(:)=0.
@@ -295,21 +309,26 @@ ELSEIF(HSUBG_AUCV_RI=='CLFR') THEN
     PHLI_HRI(:)=0.
     PHLI_LRI(:)=0.
   END WHERE
+ !$mnh_end_expand_where(JI=1:KSIZE)
 ELSEIF(HSUBG_AUCV_RI=='ADJU') THEN
+ !$mnh_expand_where(JI=1:KSIZE)
   ZSUMRI(:)=PHLI_LRI(:)+PHLI_HRI(:)
-  WHERE(ZSUMRI .GT. 0.)
+  WHERE(ZSUMRI(:) .GT. 0.)
     PHLI_LRI(:)=PHLI_LRI(:)*PRIT(:)/ZSUMRI(:)
     PHLI_HRI(:)=PHLI_HRI(:)*PRIT(:)/ZSUMRI(:)
   ELSEWHERE
     PHLI_LRI(:)=0.
     PHLI_HRI(:)=0.
   ENDWHERE
+ !$mnh_end_expand_where(JI=1:KSIZE)
 ELSE
   !wrong HSUBG_AUCV_RI case
   CALL PRINT_MSG( NVERB_FATAL, 'GEN', 'ICE4_COMPUTE_PDF', 'wrong HSUBG_AUCV_RI case' )
 ENDIF
 !
-PRF=MAX(PHLC_HCF,PHLI_HCF)
+!$mnh_expand_where(JI=1:KSIZE)
+  PRF(:)=MAX(PHLC_HCF(:),PHLI_HCF(:))
+!$mnh_end_expand_where(JI=1:KSIZE)
 !
 IF (LHOOK) CALL DR_HOOK('ICE4_COMPUTE_PDF', 1, ZHOOK_HANDLE)
 END SUBROUTINE ICE4_COMPUTE_PDF
diff --git a/src/common/micro/mode_ice4_nucleation.F90 b/src/common/micro/mode_ice4_nucleation.F90
deleted file mode 100644
index f603022fd103f74ee2deb0dbdaa7079ae7b97323..0000000000000000000000000000000000000000
--- a/src/common/micro/mode_ice4_nucleation.F90
+++ /dev/null
@@ -1,133 +0,0 @@
-!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-MODULE MODE_ICE4_NUCLEATION
-IMPLICIT NONE
-CONTAINS
-SUBROUTINE ICE4_NUCLEATION(KSIZE, ODCOMPUTE, &
-                           PTHT, PPABST, PRHODREF, PEXN, PLSFACT, PT, &
-                           PRVT, &
-                           PCIT, PRVHENI_MR)
-!!
-!!**  PURPOSE
-!!    -------
-!!      Computes the nucleation
-!!
-!!    AUTHOR
-!!    ------
-!!      S. Riette from the splitting of rain_ice source code (nov. 2014)
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!
-!!     R. El Khatib 24-Aug-2021 Optimizations
-!
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-USE MODD_CST,            ONLY: XALPI, XALPW, XBETAI, XBETAW, XGAMI, XGAMW, XMD, XMV, XTT, XEPSILO
-USE MODD_PARAM_ICE,      ONLY: LFEEDBACKT
-USE MODD_RAIN_ICE_PARAM, ONLY: XALPHA1, XALPHA2, XBETA1, XBETA2, XMNU0, XNU10, XNU20
-USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN
-USE PARKIND1, ONLY : JPRB
-USE YOMHOOK , ONLY : LHOOK, DR_HOOK
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-INTEGER,                  INTENT(IN)    :: KSIZE
-LOGICAL, DIMENSION(KSIZE),INTENT(IN)    :: ODCOMPUTE
-REAL, DIMENSION(KSIZE),   INTENT(IN)    :: PTHT    ! Theta at t
-REAL, DIMENSION(KSIZE),   INTENT(IN)    :: PPABST  ! absolute pressure at t
-REAL, DIMENSION(KSIZE),   INTENT(IN)    :: PRHODREF! Reference density
-REAL, DIMENSION(KSIZE),   INTENT(IN)    :: PEXN    ! Exner function
-REAL, DIMENSION(KSIZE),   INTENT(IN)    :: PLSFACT
-REAL, DIMENSION(KSIZE),   INTENT(IN)    :: PT      ! Temperature at time t
-REAL, DIMENSION(KSIZE),   INTENT(IN)    :: PRVT    ! Water vapor m.r. at t
-REAL, DIMENSION(KSIZE),   INTENT(INOUT) :: PCIT    ! Pristine ice n.c. at t
-REAL, DIMENSION(KSIZE),   INTENT(OUT)   :: PRVHENI_MR ! Mixing ratio change due to the heterogeneous nucleation
-!
-!*       0.2  declaration of local variables
-!
-REAL, DIMENSION(KSIZE) :: ZW ! work array
-REAL(KIND=JPRB) :: ZHOOK_HANDLE
-LOGICAL, DIMENSION(KSIZE) :: GNEGT  ! Test where to compute the HEN process
-REAL, DIMENSION(KSIZE)  :: ZZW,      & ! Work array
-                           ZUSW,     & ! Undersaturation over water
-                           ZSSI        ! Supersaturation over ice
-!-------------------------------------------------------------------------------
-!
-IF (LHOOK) CALL DR_HOOK('ICE4_NUCLEATION', 0, ZHOOK_HANDLE)!
-!
-CALL ICE4_NUCLEATION_ELEM(ODCOMPUTE, &
-                             PTHT, PPABST, PRHODREF, PEXN, PLSFACT, PT, &
-                             PRVT, &
-                             PCIT, PRVHENI_MR)
-         !!!GNEGT(:)=PT(:)<XTT .AND. PRVT(:)>XRTMIN(1) .AND. ODCOMPUTE(:)
-         !!!
-         !!!ZUSW(:)=0.
-         !!!ZZW(:)=0.
-         !!!WHERE(GNEGT(:))
-         !!!  ZZW(:)=ALOG(PT(:))
-         !!!  ZUSW(:)=EXP(XALPW - XBETAW/PT(:) - XGAMW*ZZW(:))          ! es_w
-         !!!  ZZW(:)=EXP(XALPI - XBETAI/PT(:) - XGAMI*ZZW(:))           ! es_i
-         !!!END WHERE
-         !!!
-         !!!ZSSI(:)=0.
-         !!!WHERE(GNEGT(:))
-         !!!  ZZW(:)=MIN(PPABST(:)/2., ZZW(:))             ! safety limitation
-         !!!  ZSSI(:)=PRVT(:)*(PPABST(:)-ZZW(:)) / (XEPSILO*ZZW(:)) - 1.0
-         !!!                                               ! Supersaturation over ice
-         !!!  ZUSW(:)=MIN(PPABST(:)/2., ZUSW(:))            ! safety limitation
-         !!!  ZUSW(:)=(ZUSW(:)/ZZW(:))*((PPABST(:)-ZZW(:))/(PPABST(:)-ZUSW(:))) - 1.0
-         !!!                             ! Supersaturation of saturated water vapor over ice
-         !!!  !
-         !!!  !*       3.1     compute the heterogeneous nucleation source RVHENI
-         !!!  !
-         !!!  !*       3.1.1   compute the cloud ice concentration
-         !!!  !
-         !!!  ZSSI(:)=MIN(ZSSI(:), ZUSW(:)) ! limitation of SSi according to SSw=0
-         !!!END WHERE
-         !!!
-         !!!ZZW(:)=0.
-         !!!WHERE(GNEGT(:) .AND. PT(:)<XTT-5.0 .AND. ZSSI(:)>0.0 )
-         !!!  ZZW(:)=XNU20*EXP(XALPHA2*ZSSI(:)-XBETA2)
-         !!!ELSEWHERE(GNEGT(:) .AND. PT(:)<=XTT-2.0 .AND. PT(:)>=XTT-5.0 .AND. ZSSI(:)>0.0)
-         !!!  ZZW(:)=MAX(XNU20*EXP(-XBETA2 ), &
-         !!!             XNU10*EXP(-XBETA1*(PT(:)-XTT))*(ZSSI(:)/ZUSW(:))**XALPHA1)
-         !!!END WHERE
-         !!!WHERE(GNEGT(:))
-         !!!  ZZW(:)=ZZW(:)-PCIT(:)
-         !!!  ZZW(:)=MIN(ZZW(:), 50.E3) ! limitation provisoire a 50 l^-1
-         !!!END WHERE
-         !!!
-         !!!PRVHENI_MR(:)=0.
-         !!!WHERE(GNEGT(:))
-         !!!  !
-         !!!  !*       3.1.2   update the r_i and r_v mixing ratios
-         !!!  !
-         !!!  PRVHENI_MR(:)=MAX(ZZW(:), 0.0)*XMNU0/PRHODREF(:)
-         !!!  PRVHENI_MR(:)=MIN(PRVT(:), PRVHENI_MR(:))
-         !!!END WHERE
-         !!!!Limitation due to 0 crossing of temperature
-         !!!IF(LFEEDBACKT) THEN
-         !!!  ZW(:)=0.
-         !!!  WHERE(GNEGT(:))
-         !!!    ZW(:)=MIN(PRVHENI_MR(:), &
-         !!!              MAX(0., (XTT/PEXN(:)-PTHT(:))/PLSFACT(:))) / &
-         !!!              MAX(PRVHENI_MR(:), 1.E-20)
-         !!!  END WHERE
-         !!!  PRVHENI_MR(:)=PRVHENI_MR(:)*ZW(:)
-         !!!  ZZW(:)=ZZW(:)*ZW(:)
-         !!!ENDIF
-         !!!PCIT(:)=MAX(ZZW(:)+PCIT(:), PCIT(:))
-         !!!!
-IF (LHOOK) CALL DR_HOOK('ICE4_NUCLEATION', 1, ZHOOK_HANDLE)
-CONTAINS
-INCLUDE "ice4_nucleation_elem.func.h"
-END SUBROUTINE ICE4_NUCLEATION
-END MODULE MODE_ICE4_NUCLEATION
diff --git a/src/common/micro/mode_ice4_nucleation_wrapper.F90 b/src/common/micro/mode_ice4_nucleation_wrapper.F90
deleted file mode 100644
index 58b77c5d608c2d6d7f4841f0c06d7d91827946ef..0000000000000000000000000000000000000000
--- a/src/common/micro/mode_ice4_nucleation_wrapper.F90
+++ /dev/null
@@ -1,146 +0,0 @@
-!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-MODULE MODE_ICE4_NUCLEATION_WRAPPER
-IMPLICIT NONE
-CONTAINS
-SUBROUTINE ICE4_NUCLEATION_WRAPPER(KIT, KJT, KKT, LDMASK, &
-                                   PTHT, PPABST, PRHODREF, PEXN, PLSFACT, PT, &
-                                   PRVT, &
-                                   PCIT, PRVHENI_MR)
-!!
-!!**  PURPOSE
-!!    -------
-!!      Computes the nucleation
-!!
-!!    AUTHOR
-!!    ------
-!!      S. Riette from the splitting of rain_ice source code (nov. 2014)
-!!
-!!    MODIFICATIONS
-!!    -------------
-!  P. Wautelet 28/05/2019: move COUNTJV function to tools.f90
-!  P. Wautelet 29/05/2019: remove PACK/UNPACK intrinsics (to get more performance and better OpenACC support)
-!!     R. El Khatib 24-Aug-2021 Optimizations
-!
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-USE MODD_CST,   ONLY: XTT
-USE MODE_TOOLS, ONLY: COUNTJV
-USE MODE_ICE4_NUCLEATION, ONLY: ICE4_NUCLEATION
-USE PARKIND1,   ONLY : JPRB
-USE YOMHOOK ,   ONLY : LHOOK, DR_HOOK
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-INTEGER,                        INTENT(IN)    :: KIT, KJT, KKT
-LOGICAL, DIMENSION(KIT,KJT,KKT),INTENT(IN)    :: LDMASK
-REAL, DIMENSION(KIT,KJT,KKT),   INTENT(IN)    :: PTHT    ! Theta at t
-REAL, DIMENSION(KIT,KJT,KKT),   INTENT(IN)    :: PPABST  ! absolute pressure at t
-REAL, DIMENSION(KIT,KJT,KKT),   INTENT(IN)    :: PRHODREF! Reference density
-REAL, DIMENSION(KIT,KJT,KKT),   INTENT(IN)    :: PEXN    ! Exner function
-REAL, DIMENSION(KIT,KJT,KKT),   INTENT(IN)    :: PLSFACT
-REAL, DIMENSION(KIT,KJT,KKT),   INTENT(IN)    :: PT      ! Temperature at time t
-REAL, DIMENSION(KIT,KJT,KKT),   INTENT(IN)    :: PRVT    ! Water vapor m.r. at t
-REAL, DIMENSION(KIT,KJT,KKT),   INTENT(INOUT) :: PCIT    ! Pristine ice n.c. at t
-REAL, DIMENSION(KIT,KJT,KKT),   INTENT(OUT)   :: PRVHENI_MR ! Mixing ratio change due to the heterogeneous nucleation
-!
-!*       0.2  declaration of local variables
-!
-REAL(KIND=JPRB) :: ZHOOK_HANDLE
-         !!!INTEGER                            :: JL
-         !!!INTEGER                            :: INEGT
-         !!!INTEGER, DIMENSION(COUNT(PT<XTT .AND. LDMASK)) :: I1,I2,I3
-         !!!LOGICAL, DIMENSION(COUNT(PT<XTT .AND. LDMASK))  :: GLDCOMPUTE ! computation criterium
-         !!!LOGICAL, DIMENSION(KIT, KJT, KKT)  :: GNEGT  ! Test where to compute the HEN process
-         !!!REAL, DIMENSION(COUNT(PT<XTT .AND. LDMASK))  :: ZZT,      & ! Temperature
-         !!!                                      ZPRES,      & ! Pressure
-         !!!                                      ZRVT,       & ! Water vapor m.r. at t
-         !!!                                      ZCIT,       & ! Pristine ice conc. at t
-         !!!                                      ZTHT,       & ! Theta at t
-         !!!                                      ZRHODREF,   &
-         !!!                                      ZEXN,       &
-         !!!                                      ZLSFACT,    &
-         !!!                                      ZRVHENI_MR
-         !!!!! MNH version INTEGER, DIMENSION(:), ALLOCATABLE :: I1,I2,I3
-         !!!!! MNH version LOGICAL, DIMENSION(:), ALLOCATABLE :: GLDCOMPUTE
-         !!!!! MNH version LOGICAL, DIMENSION(KIT,KJT,KKT)    :: GNEGT  ! Test where to compute the HEN process
-         !!!!! MNH version REAL, DIMENSION(:), ALLOCATABLE    :: ZZT,       & ! Temperature
-         !!!!! MNH version                                       ZPRES,      & ! Pressure
-         !!!!! MNH version                                       ZRVT,       & ! Water vapor m.r. at t
-         !!!!! MNH version                                       ZCIT,       & ! Pristine ice conc. at t
-         !!!!! MNH version                                       ZTHT,       & ! Theta at t
-         !!!!! MNH version                                       ZRHODREF,   &
-         !!!!! MNH version                                       ZEXN,       &
-         !!!!! MNH version                                       ZLSFACT,    &
-         !!!!! MNH version                                       ZRVHENI_MR
-!
-!-------------------------------------------------------------------------------
-!
-IF (LHOOK) CALL DR_HOOK('ICE4_NUCLEATION_WRAPPER', 0, ZHOOK_HANDLE)!
-!
-CALL ICE4_NUCLEATION_ELEM(LDMASK, &
-                          PTHT, PPABST, PRHODREF, PEXN, PLSFACT, PT, &
-                          PRVT, &
-                          PCIT, PRVHENI_MR)
-         !!!!
-         !!!!
-         !!!!  optimization by looking for locations where
-         !!!!  the temperature is negative only !!!
-         !!!!
-         !!!GNEGT(:,:,:)=PT(:,:,:)<XTT .AND. LDMASK
-         !!!INEGT = COUNT(GNEGT(:,:,:))
-         !!!!
-         !!!!! MNH version ALLOCATE(GLDCOMPUTE(INEGT))
-         !!!!! MNH version ALLOCATE(I1(INEGT),I2(INEGT),I3(INEGT))
-         !!!!! MNH version ALLOCATE(ZZT(INEGT))
-         !!!!! MNH version ALLOCATE(ZPRES(INEGT))
-         !!!!! MNH version ALLOCATE(ZRVT(INEGT))
-         !!!!! MNH version ALLOCATE(ZCIT(INEGT))
-         !!!!! MNH version ALLOCATE(ZTHT(INEGT))
-         !!!!! MNH version ALLOCATE(ZRHODREF(INEGT))
-         !!!!! MNH version ALLOCATE(ZEXN(INEGT))
-         !!!!! MNH version ALLOCATE(ZLSFACT(INEGT))
-         !!!!! MNH version ALLOCATE(ZRVHENI_MR(INEGT))
-         !!!!
-         !!!IF(INEGT>0) INEGT=COUNTJV(GNEGT(:,:,:), I1(:), I2(:), I3(:))
-         !!!!
-         !!!PRVHENI_MR(:,:,:)=0.
-         !!!IF(INEGT>0) THEN
-         !!!  DO JL=1, INEGT
-         !!!    ZRVT(JL)=PRVT(I1(JL), I2(JL), I3(JL))
-         !!!    ZCIT(JL)=PCIT(I1(JL), I2(JL), I3(JL))
-         !!!    ZPRES(JL)=PPABST(I1(JL), I2(JL), I3(JL))
-         !!!    ZTHT(JL)=PTHT(I1(JL), I2(JL), I3(JL))
-         !!!    ZRHODREF(JL)=PRHODREF(I1(JL), I2(JL), I3(JL))
-         !!!    ZEXN(JL)=PEXN(I1(JL), I2(JL), I3(JL))
-         !!!    ZLSFACT(JL)=PLSFACT(I1(JL), I2(JL), I3(JL)) / ZEXN(JL)
-         !!!    ZZT(JL)=PT(I1(JL), I2(JL), I3(JL))
-         !!!    GLDCOMPUTE(JL)=ZZT(JL)<XTT
-         !!!  ENDDO
-         !!!  CALL ICE4_NUCLEATION(INEGT, GLDCOMPUTE, &
-         !!!                       ZTHT, ZPRES, ZRHODREF, ZEXN, ZLSFACT, ZZT, &
-         !!!                       ZRVT, &
-         !!!                       ZCIT, ZRVHENI_MR)
-         !!!  DO JL=1, INEGT
-         !!!    PRVHENI_MR(I1(JL), I2(JL), I3(JL)) = ZRVHENI_MR(JL)
-         !!!    PCIT      (I1(JL), I2(JL), I3(JL)) = ZCIT      (JL)
-         !!!  END DO
-         !!!END IF
-         !!!!
-         !!!!! MNH versionDEALLOCATE(GLDCOMPUTE)
-         !!!!! MNH versionDEALLOCATE(I1,I2,I3)
-         !!!!! MNH versionDEALLOCATE(ZZT,ZPRES,ZRVT,ZCIT,ZTHT,ZRHODREF,ZEXN,ZLSFACT,ZRVHENI_MR)
-!
-IF (LHOOK) CALL DR_HOOK('ICE4_NUCLEATION_WRAPPER', 1, ZHOOK_HANDLE)
-
-CONTAINS
-INCLUDE "ice4_nucleation_elem.func.h"
-END SUBROUTINE ICE4_NUCLEATION_WRAPPER
-END MODULE MODE_ICE4_NUCLEATION_WRAPPER
diff --git a/src/common/micro/mode_ice4_rsrimcg_old.F90 b/src/common/micro/mode_ice4_rsrimcg_old.F90
index 23d50034330ccf8342f103271c41fe837f87e48a..ff29be25fd07ae4515f0be23d6fe76c44f126381 100644
--- a/src/common/micro/mode_ice4_rsrimcg_old.F90
+++ b/src/common/micro/mode_ice4_rsrimcg_old.F90
@@ -10,7 +10,7 @@ SUBROUTINE ICE4_RSRIMCG_OLD(KSIZE, LDSOFT, LDCOMPUTE, &
                            &PRHODREF, &
                            &PLBDAS, &
                            &PT, PRCT, PRST, &
-                           &PRSRIMCG_MR, PB_RS, PB_RG)
+                           &PRSRIMCG_MR)
 !!
 !!**  PURPOSE
 !!    -------
@@ -50,8 +50,6 @@ REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PT       ! Temperature
 REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRCT     ! Cloud water m.r. at t
 REAL, DIMENSION(KSIZE),       INTENT(IN)    :: PRST     ! Snow/aggregate m.r. at t
 REAL, DIMENSION(KSIZE),       INTENT(OUT)   :: PRSRIMCG_MR ! Mr change due to cloud droplet riming of the aggregates
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PB_RS
-REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PB_RG
 !
 !*       0.2  declaration of local variables
 !
@@ -122,8 +120,6 @@ IF(.NOT. LDSOFT) THEN
     END WHERE
   END IF
 ENDIF
-PB_RS(:) = PB_RS(:) - PRSRIMCG_MR(:)
-PB_RG(:) = PB_RG(:) + PRSRIMCG_MR(:)
 !
 IF (LHOOK) CALL DR_HOOK('ICE4_RSRIMCG_OLD', 1, ZHOOK_HANDLE)
 !
diff --git a/src/common/micro/mode_ice4_tendencies.F90 b/src/common/micro/mode_ice4_tendencies.F90
index ea9e8f8ae1e4fc078eded42e9adfbda498ea8c8b..065a1a0a2974bdcbd237855c4b16ce16cac478d6 100644
--- a/src/common/micro/mode_ice4_tendencies.F90
+++ b/src/common/micro/mode_ice4_tendencies.F90
@@ -6,7 +6,7 @@
 MODULE MODE_ICE4_TENDENCIES
 IMPLICIT NONE
 CONTAINS
-SUBROUTINE ICE4_TENDENCIES(KPROMA, KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, &
+SUBROUTINE ICE4_TENDENCIES(D, CST, PARAMI, ICEP, ICED, KPROMA, KSIZE, &
                           &KRR, ODSOFT, PCOMPUTE, &
                           &OWARM, HSUBG_RC_RR_ACCR, HSUBG_RR_EVAP, &
                           &HSUBG_AUCV_RC, HSUBG_AUCV_RI, HSUBG_PR_PDF, &
@@ -48,11 +48,12 @@ SUBROUTINE ICE4_TENDENCIES(KPROMA, KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE
 !          ------------
 !
 USE MODD_BUDGET,    ONLY : LBU_ENABLE
+USE MODD_DIMPHYEX,       ONLY: DIMPHYEX_t
 USE MODE_MSG,            ONLY: PRINT_MSG, NVERB_FATAL
-USE MODD_CST,            ONLY: XALPI, XBETAI, XCI, XCPV, XEPSILO, XGAMI, XLSTT, XMD, XMV, XP00, XRV, XTT
-USE MODD_PARAM_ICE,      ONLY: CSNOWRIMING
-USE MODD_RAIN_ICE_DESCR, ONLY: XLBDAS_MAX, XLBEXG, XLBEXH, XLBEXR, XLBEXS, XLBG, XLBH, XLBR, XLBS, XRTMIN
-USE MODD_RAIN_ICE_PARAM, ONLY: XSCFAC
+USE MODD_CST,            ONLY: CST_t
+USE MODD_PARAM_ICE,      ONLY: PARAM_ICE_t
+USE MODD_RAIN_ICE_DESCR, ONLY: RAIN_ICE_DESCR_t
+USE MODD_RAIN_ICE_PARAM, ONLY: RAIN_ICE_PARAM_t
 !
 USE MODD_FIELDS_ADDRESS, ONLY : & ! common fields adress
       & ITH,     & ! Potential temperature
@@ -64,7 +65,6 @@ USE MODD_FIELDS_ADDRESS, ONLY : & ! common fields adress
       & IRG,     & ! Graupel
       & IRH        ! Hail
 !
-USE MODE_ICE4_NUCLEATION, ONLY: ICE4_NUCLEATION
 USE MODE_ICE4_RRHONG, ONLY: ICE4_RRHONG
 USE MODE_ICE4_RIMLTC, ONLY: ICE4_RIMLTC
 USE MODE_ICE4_RSRIMCG_OLD, ONLY: ICE4_RSRIMCG_OLD
@@ -84,7 +84,12 @@ IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
-INTEGER,                      INTENT(IN)    :: KPROMA, KSIZE, KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL
+TYPE(DIMPHYEX_t),         INTENT(IN)    :: D
+TYPE(CST_t),              INTENT(IN)    :: CST
+TYPE(PARAM_ICE_t),        INTENT(IN)    :: PARAMI
+TYPE(RAIN_ICE_PARAM_t),   INTENT(IN)    :: ICEP
+TYPE(RAIN_ICE_DESCR_t),   INTENT(IN)    :: ICED
+INTEGER,                      INTENT(IN)    :: KPROMA, KSIZE
 INTEGER,                      INTENT(IN)    :: KRR
 LOGICAL,                      INTENT(IN)    :: ODSOFT
 REAL, DIMENSION(KPROMA),       INTENT(IN)    :: PCOMPUTE
@@ -168,7 +173,7 @@ REAL, DIMENSION(KPROMA),       INTENT(INOUT)   :: PHLI_HCF
 REAL, DIMENSION(KPROMA),       INTENT(INOUT)   :: PHLI_LCF
 REAL, DIMENSION(KPROMA),       INTENT(INOUT)   :: PHLI_HRI
 REAL, DIMENSION(KPROMA),       INTENT(INOUT)   :: PHLI_LRI
-REAL, DIMENSION(KIT,KJT,KKT), INTENT(OUT)   :: PRAINFR   ! Rain fraction
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT), INTENT(OUT)   :: PRAINFR   ! Rain fraction
 !
 !*       0.2  declaration of local variables
 !
@@ -177,7 +182,7 @@ REAL, DIMENSION(KPROMA) :: ZT, ZRAINFR, &
                         & ZKA, ZDV, ZAI, ZCJ, &
                         & ZLBDAR, ZLBDAS, ZLBDAG, ZLBDAH, ZLBDAR_RF, &
                         & ZRGSI, ZRGSI_MR
-REAL, DIMENSION(KIT,KJT,KKT) :: ZRRT3D, ZRST3D, ZRGT3D, ZRHT3D
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZRRT3D, ZRST3D, ZRGT3D, ZRHT3D
 INTEGER :: JL, JV
 REAL, DIMENSION(KPROMA) :: ZWETG ! 1. if graupel growths in wet mode, 0. otherwise
 REAL :: ZZW
@@ -207,10 +212,13 @@ ELSE
   !
   !*       2.     COMPUTES THE SLOW COLD PROCESS SOURCES
   !               --------------------------------------
-  CALL ICE4_NUCLEATION(KSIZE, LLCOMPUTE, &
-                       ZVART(:,ITH), PPRES, PRHODREF, PEXN, PLSFACT, ZT, &
-                       ZVART(:,IRV), &
-                       PCIT, PRVHENI_MR)
+!DIR$ VECTOR ALWAYS
+  DO CONCURRENT (JL=1:KSIZE)
+    CALL ICE4_NUCLEATION_ELEM(LLCOMPUTE(JL), &
+                     ZVART(JL,ITH), PPRES(JL), PRHODREF(JL), PEXN(JL), PLSFACT(JL), ZT(JL), &
+                     ZVART(JL,IRV), &
+                     PCIT(JL), PRVHENI_MR(JL))
+  ENDDO
   DO JL=1, KSIZE
     ZVART(JL,ITH)=ZVART(JL,ITH) + PRVHENI_MR(JL)*PLSFACT(JL)
     ZT(JL) = ZVART(JL,ITH) * PEXN(JL)
@@ -245,36 +253,19 @@ ELSE
     ZVART(JL,IRC) = ZVART(JL,IRC) + PRIMLTC_MR(JL)
     ZVART(JL,IRI) = ZVART(JL,IRI) - PRIMLTC_MR(JL)
   ENDDO
-
-  DO JL=1, KSIZE
-    PB(JL, ITH)=PB(JL, ITH) + PRVHENI_MR(JL)*PLSFACT(JL)
-    PB(JL, ITH)=PB(JL, ITH) + PRRHONG_MR(JL)*(PLSFACT(JL)-PLVFACT(JL))
-    PB(JL, ITH)=PB(JL, ITH) - PRIMLTC_MR(JL)*(PLSFACT(JL)-PLVFACT(JL))
-
-    PB(JL, IRV)=PB(JL, IRV) - PRVHENI_MR(JL)
-
-    PB(JL, IRC)=PB(JL, IRC) + PRIMLTC_MR(JL)
-
-    PB(JL, IRR)=PB(JL, IRR) - PRRHONG_MR(JL)
-
-    PB(JL, IRI)=PB(JL, IRI) + PRVHENI_MR(JL)
-    PB(JL, IRI)=PB(JL, IRI) - PRIMLTC_MR(JL)
-
-    PB(JL, IRG)=PB(JL, IRG) + PRRHONG_MR(JL)
-  ENDDO
   !
   !        5.1.6  riming-conversion of the large sized aggregates into graupel (old parametrisation)
   !
-  IF(CSNOWRIMING=='OLD ') THEN
+  IF(PARAMI%CSNOWRIMING=='OLD ') THEN
     ZLBDAS(1:KSIZE)=0.
     WHERE(ZVART(1:KSIZE,IRS)>0.)
-      ZLBDAS(1:KSIZE)  = MIN(XLBDAS_MAX, XLBS*(PRHODREF(1:KSIZE)*MAX(ZVART(1:KSIZE,IRS), XRTMIN(5)))**XLBEXS)
+      ZLBDAS(1:KSIZE)  = MIN(ICED%XLBDAS_MAX, ICED%XLBS*(PRHODREF(1:KSIZE)*MAX(ZVART(1:KSIZE,IRS), ICED%XRTMIN(5)))**ICED%XLBEXS)
     END WHERE
     CALL ICE4_RSRIMCG_OLD(KSIZE, ODSOFT, LLCOMPUTE, &
                          &PRHODREF, &
                          &ZLBDAS, &
                          &ZT, ZVART(:,IRC), ZVART(:,IRS), &
-                         &PRSRIMCG_MR, PB(:, IRS), PB(:, IRG))
+                         &PRSRIMCG_MR)
     DO JL=1, KSIZE
       ZVART(JL,IRS) = ZVART(JL,IRS) - PRSRIMCG_MR(JL)
       ZVART(JL,IRG) = ZVART(JL,IRG) + PRSRIMCG_MR(JL)
@@ -282,18 +273,38 @@ ELSE
   ELSE
     PRSRIMCG_MR(:) = 0.
   ENDIF
-  !
+ 
+  DO JL=1, KSIZE
+    PB(JL, ITH)=PB(JL, ITH) + PRVHENI_MR(JL)*PLSFACT(JL)
+    PB(JL, ITH)=PB(JL, ITH) + PRRHONG_MR(JL)*(PLSFACT(JL)-PLVFACT(JL))
+    PB(JL, ITH)=PB(JL, ITH) - PRIMLTC_MR(JL)*(PLSFACT(JL)-PLVFACT(JL))
+
+    PB(JL, IRV)=PB(JL, IRV) - PRVHENI_MR(JL)
+
+    PB(JL, IRC)=PB(JL, IRC) + PRIMLTC_MR(JL)
+
+    PB(JL, IRR)=PB(JL, IRR) - PRRHONG_MR(JL)
+
+    PB(JL, IRI)=PB(JL, IRI) + PRVHENI_MR(JL)
+    PB(JL, IRI)=PB(JL, IRI) - PRIMLTC_MR(JL)
+
+    PB(JL, IRS)=PB(JL, IRS) - PRSRIMCG_MR(JL)
+
+    PB(JL, IRG)=PB(JL, IRG) + PRRHONG_MR(JL)
+    PB(JL, IRG)=PB(JL, IRG) + PRSRIMCG_MR(JL)
+  ENDDO
+ !
   !* Derived fields
   !
   DO JL=1, KSIZE
-    ZZW = EXP(XALPI-XBETAI/ZT(JL)-XGAMI*ALOG(ZT(JL)))
-    PSSI(JL) = ZVART(JL,IRV)*( PPRES(JL)-ZZW ) / ( XEPSILO * ZZW ) - 1.0
+    ZZW = EXP(CST%XALPI-CST%XBETAI/ZT(JL)-CST%XGAMI*ALOG(ZT(JL)))
+    PSSI(JL) = ZVART(JL,IRV)*( PPRES(JL)-ZZW ) / ( CST%XEPSILO * ZZW ) - 1.0
                                                       ! Supersaturation over ice
-    ZKA(JL) = 2.38E-2 + 0.0071E-2*(ZT(JL)-XTT) ! k_a
-    ZDV(JL) = 0.211E-4*(ZT(JL)/XTT)**1.94 * (XP00/PPRES(JL)) ! D_v
-    ZAI(JL) = (XLSTT+(XCPV-XCI)*(ZT(JL)-XTT))**2 / (ZKA(JL)*XRV*ZT(JL)**2) &
-                                 + ( XRV*ZT(JL) ) / (ZDV(JL)*ZZW)
-    ZCJ(JL) = XSCFAC*PRHODREF(JL)**0.3 / SQRT(1.718E-5+0.0049E-5*(ZT(JL)-XTT))
+    ZKA(JL) = 2.38E-2 + 0.0071E-2*(ZT(JL)-CST%XTT) ! k_a
+    ZDV(JL) = 0.211E-4*(ZT(JL)/CST%XTT)**1.94 * (CST%XP00/PPRES(JL)) ! D_v
+    ZAI(JL) = (CST%XLSTT+(CST%XCPV-CST%XCI)*(ZT(JL)-CST%XTT))**2 / (ZKA(JL)*CST%XRV*ZT(JL)**2) &
+                                 + ( CST%XRV*ZT(JL) ) / (ZDV(JL)*ZZW)
+    ZCJ(JL) = ICEP%XSCFAC*PRHODREF(JL)**0.3 / SQRT(1.718E-5+0.0049E-5*(ZT(JL)-CST%XTT))
   ENDDO
 ENDIF ! ODSOFT
 !
@@ -330,7 +341,7 @@ IF (LLRFR) THEN
       ZRHT3D (K1(JL), K2(JL), K3(JL)) = ZVART(JL,IRH)
     ENDDO
   ENDIF
-  CALL ICE4_RAINFR_VERT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, PRAINFR(:,:,:), &
+  CALL ICE4_RAINFR_VERT(D, ICED, PRAINFR(:,:,:), &
                        &ZRRT3D(:,:,:), ZRST3D(:,:,:), ZRGT3D(:,:,:), ZRHT3D(:,:,:))
   DO JL=1,KSIZE
     ZRAINFR(JL)=PRAINFR(K1(JL), K2(JL), K3(JL))
@@ -345,14 +356,14 @@ ENDIF
 DO JL=1, KSIZE
   !ZLBDAR will be used when we consider rain diluted over the grid box
   IF(ZVART(JL,IRR)>0.) THEN
-    ZLBDAR(JL)=XLBR*(PRHODREF(JL)*MAX(ZVART(JL,IRR), XRTMIN(3)))**XLBEXR
+    ZLBDAR(JL)=ICED%XLBR*(PRHODREF(JL)*MAX(ZVART(JL,IRR), ICED%XRTMIN(3)))**ICED%XLBEXR
   ELSE
     ZLBDAR(JL)=0.
   ENDIF
   !ZLBDAR_RF is used when we consider rain concentrated in its fraction
   IF(LLRFR) THEN
     IF(ZVART(JL,IRR)>0. .AND. ZRAINFR(JL)>0.) THEN
-      ZLBDAR_RF(JL)=XLBR*(PRHODREF(JL)*MAX(ZVART(JL,IRR)/ZRAINFR(JL), XRTMIN(3)))**XLBEXR
+      ZLBDAR_RF(JL)=ICED%XLBR*(PRHODREF(JL)*MAX(ZVART(JL,IRR)/ZRAINFR(JL), ICED%XRTMIN(3)))**ICED%XLBEXR
     ELSE
       ZLBDAR_RF(JL)=0.
     ENDIF
@@ -360,18 +371,18 @@ DO JL=1, KSIZE
     ZLBDAR_RF(JL)=ZLBDAR(JL)
   ENDIF
   IF(ZVART(JL,IRS)>0.) THEN
-    ZLBDAS(JL)=MIN(XLBDAS_MAX, XLBS*(PRHODREF(JL)*MAX(ZVART(JL,IRS), XRTMIN(5)))**XLBEXS)
+    ZLBDAS(JL)=MIN(ICED%XLBDAS_MAX, ICED%XLBS*(PRHODREF(JL)*MAX(ZVART(JL,IRS), ICED%XRTMIN(5)))**ICED%XLBEXS)
   ELSE
     ZLBDAS(JL)=0.
   ENDIF
   IF(ZVART(JL,IRG)>0.) THEN
-    ZLBDAG(JL)=XLBG*(PRHODREF(JL)*MAX(ZVART(JL,IRG), XRTMIN(6)))**XLBEXG
+    ZLBDAG(JL)=ICED%XLBG*(PRHODREF(JL)*MAX(ZVART(JL,IRG), ICED%XRTMIN(6)))**ICED%XLBEXG
   ELSE
     ZLBDAG(JL)=0.
   ENDIF
   IF(KRR==7) THEN
     IF(ZVART(JL,IRH)>0.) THEN
-      ZLBDAH(JL)=XLBH*(PRHODREF(JL)*MAX(ZVART(JL,IRH), XRTMIN(7)))**XLBEXH
+      ZLBDAH(JL)=ICED%XLBH*(PRHODREF(JL)*MAX(ZVART(JL,IRH), ICED%XRTMIN(7)))**ICED%XLBEXH
     ELSE
       ZLBDAH(JL)=0.
     ENDIF
@@ -497,5 +508,7 @@ CALL ICE4_FAST_RI(KSIZE, ODSOFT, PCOMPUTE, &
 !
 IF (LHOOK) CALL DR_HOOK('ICE4_TENDENCIES', 1, ZHOOK_HANDLE)
 !
+CONTAINS
+INCLUDE "ice4_nucleation_elem.func.h"
 END SUBROUTINE ICE4_TENDENCIES
 END MODULE MODE_ICE4_TENDENCIES
diff --git a/src/common/micro/rain_ice.F90 b/src/common/micro/rain_ice.F90
index 7b3d57386352b946c5840699bda66e56af420a3b..24b1bd5a6e297c6971bd7f1b89e92a1bc4a29922 100644
--- a/src/common/micro/rain_ice.F90
+++ b/src/common/micro/rain_ice.F90
@@ -204,7 +204,6 @@ USE MODE_ICE4_RAINFR_VERT, ONLY: ICE4_RAINFR_VERT
 USE MODE_ICE4_SEDIMENTATION_STAT, ONLY: ICE4_SEDIMENTATION_STAT
 USE MODE_ICE4_SEDIMENTATION_SPLIT, ONLY: ICE4_SEDIMENTATION_SPLIT
 USE MODE_ICE4_SEDIMENTATION_SPLIT_MOMENTUM, ONLY: ICE4_SEDIMENTATION_SPLIT_MOMENTUM
-USE MODE_ICE4_NUCLEATION_WRAPPER, ONLY: ICE4_NUCLEATION_WRAPPER
 USE MODE_ICE4_TENDENCIES, ONLY: ICE4_TENDENCIES
 !
 IMPLICIT NONE
@@ -311,7 +310,7 @@ REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2)) :: ZINPRI ! Pristine ice instant prec
 LOGICAL :: GEXT_TEND
 LOGICAL :: LSOFT ! Must we really compute tendencies or only adjust them to new T variables
 INTEGER :: INB_ITER_MAX ! Maximum number of iterations (with real tendencies computation)
-REAL :: ZW1D
+REAL :: ZW0D
 REAL :: ZTSTEP ! length of sub-timestep in case of time splitting
 REAL :: ZINV_TSTEP ! Inverse ov PTSTEP
 REAL :: ZTIME_THRESHOLD ! Time to reach threshold
@@ -864,7 +863,8 @@ IF (KSIZE > 0) THEN
         !***       4.1 Tendencies computation
         !
         ! Tendencies are *really* computed when LSOFT==.FALSE. and only adjusted otherwise
-    CALL ICE4_TENDENCIES(KPROMA, IMICRO, D%NIB, D%NIE, D%NIT, D%NJB, D%NJE, D%NJT, D%NKB, D%NKE, D%NKT, D%NKL, &
+    CALL ICE4_TENDENCIES(D, CST, PARAMI, ICEP, ICED, &
+                        &KPROMA, IMICRO, &
                         &KRR, LSOFT, ZCOMPUTE, &
                         &OWARM, PARAMI%CSUBG_RC_RR_ACCR, PARAMI%CSUBG_RR_EVAP, &
                         &HSUBG_AUCV_RC, HSUBG_AUCV_RI, PARAMI%CSUBG_PR_PDF, &
@@ -1096,10 +1096,21 @@ PCIT(:,:,:)=ZCITOUT(:,:,:)
 !*       6.     COMPUTES THE SLOW COLD PROCESS SOURCES OUTSIDE OF ODMICRO POINTS
 !               ----------------------------------------------------------------
 !
-CALL ICE4_NUCLEATION_WRAPPER(D%NIT, D%NJT, D%NKT, .NOT. ODMICRO, &
-                             PTHT, PPABST, PRHODREF, PEXN, ZZ_LSFACT, ZT, &
-                             PRVT, &
-                             PCIT, ZZ_RVHENI_MR)
+DO JK=D%NKTB,D%NKTE
+  DO JJ=D%NJB,D%NJE
+!DIR$ VECTOR ALWAYS
+    DO CONCURRENT (JI=D%NIB:D%NIE)
+      IF (.NOT. ODMICRO(JI, JJ, JK)) THEN
+        ZW0D=ZZ_LSFACT(JI, JJ, JK)/PEXN(JI, JJ, JK)
+      ENDIF
+      CALL ICE4_NUCLEATION_ELEM(.NOT. ODMICRO(JI, JJ, JK), &
+                                PTHT(JI, JJ, JK), PPABST(JI, JJ, JK), PRHODREF(JI, JJ, JK), &
+                                PEXN(JI, JJ, JK), ZW0D, ZT(JI, JJ, JK), &
+                                PRVT(JI, JJ, JK), &
+                                PCIT(JI, JJ, JK), ZZ_RVHENI_MR(JI, JJ, JK))
+    ENDDO
+  ENDDO
+ENDDO
 !
 !-------------------------------------------------------------------------------
 !
@@ -1111,8 +1122,7 @@ CALL ICE4_NUCLEATION_WRAPPER(D%NIT, D%NJT, D%NKT, .NOT. ODMICRO, &
 !
 DO JK = D%NKTB, D%NKTE
   DO JJ = D%NJB, D%NJE
-!DEC$ IVDEP
-    DO JI = D%NIB, D%NIE
+    DO CONCURRENT (JI=D%NIB:D%NIE)
       !LV/LS
       ZZ_LSFACT(JI,JJ,JK)=ZZ_LSFACT(JI,JJ,JK)/PEXNREF(JI,JJ,JK)
       ZZ_LVFACT(JI,JJ,JK)=ZZ_LVFACT(JI,JJ,JK)/PEXNREF(JI,JJ,JK)
@@ -1766,6 +1776,7 @@ CONTAINS
   IF (LHOOK) CALL DR_HOOK('RAIN_ICE:CORRECT_NEGATIVITIES', 1, ZHOOK_HANDLE)
   !
   END SUBROUTINE CORRECT_NEGATIVITIES
-
+!
+INCLUDE "ice4_nucleation_elem.func.h"
 !
 END SUBROUTINE RAIN_ICE
diff --git a/src/mesonh/micro/rain_ice_red.f90 b/src/mesonh/micro/rain_ice_red.f90
index fd80dbca2264706d558904d4728eebf4a2b1f874..c82e76e9658a3d6d19164ca90872088a4dd4adc5 100644
--- a/src/mesonh/micro/rain_ice_red.f90
+++ b/src/mesonh/micro/rain_ice_red.f90
@@ -314,7 +314,6 @@ USE MODE_ICE4_RAINFR_VERT, ONLY: ICE4_RAINFR_VERT
 USE MODE_ICE4_SEDIMENTATION_STAT, ONLY: ICE4_SEDIMENTATION_STAT
 USE MODE_ICE4_SEDIMENTATION_SPLIT, ONLY: ICE4_SEDIMENTATION_SPLIT
 USE MODE_ICE4_SEDIMENTATION_SPLIT_MOMENTUM, ONLY: ICE4_SEDIMENTATION_SPLIT_MOMENTUM
-USE MODE_ICE4_NUCLEATION_WRAPPER, ONLY: ICE4_NUCLEATION_WRAPPER
 USE MODE_ICE4_TENDENCIES, ONLY: ICE4_TENDENCIES
 !
 IMPLICIT NONE
@@ -421,7 +420,7 @@ REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2)) :: ZINPRI ! Pristine ice instant prec
 LOGICAL :: GEXT_TEND
 LOGICAL :: LSOFT ! Must we really compute tendencies or only adjust them to new T variables
 INTEGER :: INB_ITER_MAX ! Maximum number of iterations (with real tendencies computation)
-REAL :: ZW1D
+REAL :: ZW0D
 REAL :: ZTSTEP ! length of sub-timestep in case of time splitting
 REAL :: ZINV_TSTEP ! Inverse ov PTSTEP
 REAL :: ZTIME_THRESHOLD ! Time to reach threshold
@@ -974,7 +973,8 @@ IF (KSIZE > 0) THEN
         !***       4.1 Tendencies computation
         !
         ! Tendencies are *really* computed when LSOFT==.FALSE. and only adjusted otherwise
-    CALL ICE4_TENDENCIES(KPROMA, IMICRO, D%NIB, D%NIE, D%NIT, D%NJB, D%NJE, D%NJT, D%NKB, D%NKE, D%NKT, D%NKL, &
+    CALL ICE4_TENDENCIES(D, CST, PARAMI, ICEP, ICED, &
+                        &KPROMA, IMICRO, &
                         &KRR, LSOFT, ZCOMPUTE, &
                         &OWARM, PARAMI%CSUBG_RC_RR_ACCR, PARAMI%CSUBG_RR_EVAP, &
                         &HSUBG_AUCV_RC, HSUBG_AUCV_RI, PARAMI%CSUBG_PR_PDF, &
@@ -1206,10 +1206,21 @@ PCIT(:,:,:)=ZCITOUT(:,:,:)
 !*       6.     COMPUTES THE SLOW COLD PROCESS SOURCES OUTSIDE OF ODMICRO POINTS
 !               ----------------------------------------------------------------
 !
-CALL ICE4_NUCLEATION_WRAPPER(D%NIT, D%NJT, D%NKT, .NOT. ODMICRO, &
-                             PTHT, PPABST, PRHODREF, PEXN, ZZ_LSFACT, ZT, &
-                             PRVT, &
-                             PCIT, ZZ_RVHENI_MR)
+DO JK=D%NKTB,D%NKTE
+  DO JJ=D%NJB,D%NJE
+!DIR$ VECTOR ALWAYS
+    DO CONCURRENT (JI=D%NIB:D%NIE)
+      IF (.NOT. ODMICRO(JI, JJ, JK)) THEN
+        ZW0D=ZZ_LSFACT(JI, JJ, JK)/PEXN(JI, JJ, JK)
+      ENDIF
+      CALL ICE4_NUCLEATION_ELEM(.NOT. ODMICRO(JI, JJ, JK), &
+                                PTHT(JI, JJ, JK), PPABST(JI, JJ, JK), PRHODREF(JI, JJ, JK), &
+                                PEXN(JI, JJ, JK), ZW0D, ZT(JI, JJ, JK), &
+                                PRVT(JI, JJ, JK), &
+                                PCIT(JI, JJ, JK), ZZ_RVHENI_MR(JI, JJ, JK))
+    ENDDO
+  ENDDO
+ENDDO
 !
 !-------------------------------------------------------------------------------
 !
@@ -1221,8 +1232,7 @@ CALL ICE4_NUCLEATION_WRAPPER(D%NIT, D%NJT, D%NKT, .NOT. ODMICRO, &
 !
 DO JK = D%NKTB, D%NKTE
   DO JJ = D%NJB, D%NJE
-!DEC$ IVDEP
-    DO JI = D%NIB, D%NIE
+    DO CONCURRENT (JI=D%NIB:D%NIE)
       !LV/LS
       ZZ_LSFACT(JI,JJ,JK)=ZZ_LSFACT(JI,JJ,JK)/PEXNREF(JI,JJ,JK)
       ZZ_LVFACT(JI,JJ,JK)=ZZ_LVFACT(JI,JJ,JK)/PEXNREF(JI,JJ,JK)
@@ -1876,6 +1886,7 @@ CONTAINS
   IF (LHOOK) CALL DR_HOOK('RAIN_ICE:CORRECT_NEGATIVITIES', 1, ZHOOK_HANDLE)
   !
   END SUBROUTINE CORRECT_NEGATIVITIES
-
+!
+INCLUDE "ice4_nucleation_elem.func.h"
 !
 END SUBROUTINE RAIN_ICE_RED