diff --git a/src/common/micro/ice4_nucleation_elem.func.h b/src/common/micro/ice4_nucleation_elem.func.h
deleted file mode 100644
index 32c89bc74f05b320197a43fb3531c7437ded6111..0000000000000000000000000000000000000000
--- a/src/common/micro/ice4_nucleation_elem.func.h
+++ /dev/null
@@ -1,114 +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.
-ELEMENTAL SUBROUTINE ICE4_NUCLEATION_ELEM(CST, PARAMI, ICEP, ICED, ODCOMPUTE, &
-                           PTHT, PPABST, PRHODREF, PEXN, PLSFACT, PT, &
-                           PRVT, &
-                           PCIT, PRVHENI_MR)
-! ******* TO BE INCLUDED IN THE *CONTAINS* OF A SUBROUTINE, IN ORDER TO EASE AUTOMATIC INLINING ******
-! => Don't use drHook !!!
-!
-
-!!
-!!**  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
-!!     S. Riette Feb 2022: as an include file
-!
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-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
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-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
-LOGICAL, INTENT(IN)    :: ODCOMPUTE
-REAL,    INTENT(IN)    :: PTHT    ! Theta at t
-REAL,    INTENT(IN)    :: PPABST  ! absolute pressure at t
-REAL,    INTENT(IN)    :: PRHODREF! Reference density
-REAL,    INTENT(IN)    :: PEXN    ! Exner function
-REAL,    INTENT(IN)    :: PLSFACT
-REAL,    INTENT(IN)    :: PT      ! Temperature at time t
-REAL,    INTENT(IN)    :: PRVT    ! Water vapor m.r. at t
-REAL,    INTENT(INOUT) :: PCIT    ! Pristine ice n.c. at t
-REAL,    INTENT(OUT)   :: PRVHENI_MR ! Mixing ratio change due to the heterogeneous nucleation
-!
-!*       0.2  declaration of local variables
-!
-REAL :: ZW ! work array
-LOGICAL :: GNEGT  ! Test where to compute the HEN process
-REAL  :: ZZW,      & ! Work scalar
-         ZUSW,     & ! Undersaturation over water
-         ZSSI        ! Supersaturation over ice
-!-------------------------------------------------------------------------------
-!
-GNEGT=PT<CST%XTT .AND. PRVT>ICED%XRTMIN(1) .AND. ODCOMPUTE
-
-PRVHENI_MR=0.
-IF(GNEGT) THEN
-  ZZW=ALOG(PT)
-  ZUSW=EXP(CST%XALPW - CST%XBETAW/PT - CST%XGAMW*ZZW)          ! es_w
-  ZZW=EXP(CST%XALPI - CST%XBETAI/PT - CST%XGAMI*ZZW)           ! es_i
-
-  ZZW=MIN(PPABST/2., ZZW)             ! safety limitation
-  ZSSI=PRVT*(PPABST-ZZW) / (CST%XEPSILO*ZZW) - 1.0 ! Supersaturation over ice
-  ZUSW=MIN(PPABST/2., ZUSW)            ! safety limitation
-  ZUSW=(ZUSW/ZZW)*((PPABST-ZZW)/(PPABST-ZUSW)) - 1.0
-                             ! Supersaturation of saturated water vapor over ice
-  !
-  !*       3.1     compute the heterogeneous nucleation source RVHENI
-  !
-  !*       3.1.1   compute the cloud ice concentration
-  !
-  ZSSI=MIN(ZSSI, ZUSW) ! limitation of SSi according to SSw=0
-
-  IF(PT<CST%XTT-5. .AND. ZSSI>0.) THEN
-    ZZW=ICEP%XNU20*EXP(ICEP%XALPHA2*ZSSI-ICEP%XBETA2)
-  ELSEIF(PT<=CST%XTT-2. .AND. PT>=CST%XTT-5. .AND. ZSSI>0.) THEN
-    ZZW=MAX(ICEP%XNU20*EXP(-ICEP%XBETA2 ), &
-            ICEP%XNU10*EXP(-ICEP%XBETA1*(PT-CST%XTT))*(ZSSI/ZUSW)**ICEP%XALPHA1)
-  ELSE
-    ZZW=0.
-  ENDIF
-
-  ZZW=ZZW-PCIT
-  ZZW=MIN(ZZW, 50.E3) ! limitation provisoire a 50 l^-1
-  !
-  !*       3.1.2   update the r_i and r_v mixing ratios
-  !
-  PRVHENI_MR=MAX(ZZW, 0.0)*ICEP%XMNU0/PRHODREF
-  PRVHENI_MR=MIN(PRVT, PRVHENI_MR)
-  !
-  !Limitation due to 0 crossing of temperature
-  !
-  IF(PARAMI%LFEEDBACKT) THEN
-    ZW=MIN(PRVHENI_MR, MAX(0., (CST%XTT/PEXN-PTHT)/PLSFACT)) / &
-       MAX(PRVHENI_MR, 1.E-20)
-    PRVHENI_MR=PRVHENI_MR*ZW
-    ZZW=ZZW*ZW
-  ENDIF
-  !
-  PCIT=MAX(ZZW+PCIT, PCIT)
-ENDIF
-!
-END SUBROUTINE ICE4_NUCLEATION_ELEM
diff --git a/src/common/micro/mode_ice4_nucleation.F90 b/src/common/micro/mode_ice4_nucleation.F90
new file mode 100644
index 0000000000000000000000000000000000000000..1ba3335b97e17fe3c7384fd210aebf21fe3d3e04
--- /dev/null
+++ b/src/common/micro/mode_ice4_nucleation.F90
@@ -0,0 +1,148 @@
+!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(CST, PARAMI, ICEP, ICED, 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: 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 PARKIND1, ONLY : JPRB
+USE YOMHOOK , ONLY : LHOOK, DR_HOOK
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of dummy arguments :
+!
+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)    :: 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
+INTEGER :: JI
+!-------------------------------------------------------------------------------
+!
+IF (LHOOK) CALL DR_HOOK('ICE4_NUCLEATION', 0, ZHOOK_HANDLE)!
+!
+!$mnh_expand_where(JI=1:KSIZE)
+GNEGT(:)=PT(:)<CST%XTT .AND. PRVT(:)>ICED%XRTMIN(1) .AND. ODCOMPUTE(:)
+!$mnh_end_expand_where(JI=1:KSIZE)
+
+ZUSW(:)=0.
+ZZW(:)=0.
+!$mnh_expand_where(JI=1:KSIZE)
+WHERE(GNEGT(:))
+  ZZW(:)=ALOG(PT(:))
+  ZUSW(:)=EXP(CST%XALPW - CST%XBETAW/PT(:) - CST%XGAMW*ZZW(:))          ! es_w
+  ZZW(:)=EXP(CST%XALPI - CST%XBETAI/PT(:) - CST%XGAMI*ZZW(:))           ! es_i
+END WHERE
+!$mnh_end_expand_where(JI=1:KSIZE)
+
+ZSSI(:)=0.
+!$mnh_expand_where(JI=1:KSIZE)
+WHERE(GNEGT(:))
+  ZZW(:)=MIN(PPABST(:)/2., ZZW(:))             ! safety limitation
+  ZSSI(:)=PRVT(:)*(PPABST(:)-ZZW(:)) / (CST%XEPSILO*ZZW(:)) - 1.0
+                                               ! Supersaturation over ice
+  ZUSW(:)=MIN(PPABST(:)/2., ZUSW(:))            ! safety limitation
+  ZUSW(:)=(ZUSW(:)/ZZW(:))*((PPABST(:)-ZZW(:))/(PPABST(:)-ZUSW(:))) - 1.0
+                             ! Supersaturation of saturated water vapor over ice
+  !
+  !*       3.1     compute the heterogeneous nucleation source RVHENI
+  !
+  !*       3.1.1   compute the cloud ice concentration
+  !
+  ZSSI(:)=MIN(ZSSI(:), ZUSW(:)) ! limitation of SSi according to SSw=0
+END WHERE
+!$mnh_end_expand_where(JI=1:KSIZE)
+
+ZZW(:)=0.
+!$mnh_expand_where(JI=1:KSIZE)
+WHERE(GNEGT(:) .AND. PT(:)<CST%XTT-5.0 .AND. ZSSI(:)>0.0 )
+  ZZW(:)=ICEP%XNU20*EXP(ICEP%XALPHA2*ZSSI(:)-ICEP%XBETA2)
+ELSEWHERE(GNEGT(:) .AND. PT(:)<=CST%XTT-2.0 .AND. PT(:)>=CST%XTT-5.0 .AND. ZSSI(:)>0.0)
+  ZZW(:)=MAX(ICEP%XNU20*EXP(-ICEP%XBETA2 ), &
+             ICEP%XNU10*EXP(-ICEP%XBETA1*(PT(:)-CST%XTT))*(ZSSI(:)/ZUSW(:))**ICEP%XALPHA1)
+END WHERE
+!$mnh_end_expand_where(JI=1:KSIZE)
+!$mnh_expand_where(JI=1:KSIZE)
+WHERE(GNEGT(:))
+  ZZW(:)=ZZW(:)-PCIT(:)
+  ZZW(:)=MIN(ZZW(:), 50.E3) ! limitation provisoire a 50 l^-1
+END WHERE
+!$mnh_end_expand_where(JI=1:KSIZE)
+
+PRVHENI_MR(:)=0.
+!$mnh_expand_where(JI=1:KSIZE)
+WHERE(GNEGT(:))
+  !
+  !*       3.1.2   update the r_i and r_v mixing ratios
+  !
+  PRVHENI_MR(:)=MAX(ZZW(:), 0.0)*ICEP%XMNU0/PRHODREF(:)
+  PRVHENI_MR(:)=MIN(PRVT(:), PRVHENI_MR(:))
+END WHERE
+!$mnh_end_expand_where(JI=1:KSIZE)
+!Limitation due to 0 crossing of temperature
+IF(PARAMI%LFEEDBACKT) THEN
+  ZW(:)=0.
+  !$mnh_expand_where(JI=1:KSIZE)
+  WHERE(GNEGT(:))
+    ZW(:)=MIN(PRVHENI_MR(:), &
+              MAX(0., (CST%XTT/PEXN(:)-PTHT(:))/PLSFACT(:))) / &
+              MAX(PRVHENI_MR(:), 1.E-20)
+  END WHERE
+  PRVHENI_MR(:)=PRVHENI_MR(:)*ZW(:)
+  ZZW(:)=ZZW(:)*ZW(:)
+  !$mnh_end_expand_where(JI=1:KSIZE)
+ENDIF
+!$mnh_expand_where(JI=1:KSIZE)
+PCIT(:)=MAX(ZZW(:)+PCIT(:), PCIT(:))
+!$mnh_end_expand_where(JI=1:KSIZE)
+!
+IF (LHOOK) CALL DR_HOOK('ICE4_NUCLEATION', 1, ZHOOK_HANDLE)
+END SUBROUTINE ICE4_NUCLEATION
+END MODULE MODE_ICE4_NUCLEATION
diff --git a/src/common/micro/mode_ice4_tendencies.F90 b/src/common/micro/mode_ice4_tendencies.F90
index 346a3eb494e34a17ded77597bd5d61d691e06d6a..5cdcfcba54cf8d5c0b1814f8467ae2f10e71826c 100644
--- a/src/common/micro/mode_ice4_tendencies.F90
+++ b/src/common/micro/mode_ice4_tendencies.F90
@@ -76,6 +76,7 @@ USE MODE_ICE4_FAST_RS, ONLY: ICE4_FAST_RS
 USE MODE_ICE4_FAST_RG, ONLY: ICE4_FAST_RG
 USE MODE_ICE4_FAST_RH, ONLY: ICE4_FAST_RH
 USE MODE_ICE4_FAST_RI, ONLY: ICE4_FAST_RI
+USE MODE_ICE4_NUCLEATION, ONLY: ICE4_NUCLEATION
 !
 USE PARKIND1, ONLY : JPRB
 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
@@ -211,13 +212,10 @@ ELSE
   !
   !*       2.     COMPUTES THE SLOW COLD PROCESS SOURCES
   !               --------------------------------------
-!DIR$ VECTOR ALWAYS
-  DO CONCURRENT (JL=1:KSIZE)
-    CALL ICE4_NUCLEATION_ELEM(CST, PARAMI, ICEP, ICED, LDCOMPUTE(JL), &
-                     ZVART(JL,ITH), PPRES(JL), PRHODREF(JL), PEXN(JL), PLSFACT(JL), ZT(JL), &
-                     ZVART(JL,IRV), &
-                     PCIT(JL), PRVHENI_MR(JL))
-  ENDDO
+  CALL ICE4_NUCLEATION(CST, PARAMI, ICEP, ICED, KSIZE, LDCOMPUTE(:), &
+                   ZVART(:,ITH), PPRES(:), PRHODREF(:), PEXN(:), PLSFACT(:), ZT(:), &
+                   ZVART(:,IRV), &
+                   PCIT(:), PRVHENI_MR(:))
   DO JL=1, KSIZE
     ZVART(JL,ITH)=ZVART(JL,ITH) + PRVHENI_MR(JL)*PLSFACT(JL)
     ZT(JL) = ZVART(JL,ITH) * PEXN(JL)
@@ -610,7 +608,5 @@ ENDDO
 !
 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 657f11f458986d9cea510fd46e49ba27b7bb5524..a38ae64d0b1f00b13b6ee52cb33aa25ec62ec9c2 100644
--- a/src/common/micro/rain_ice.F90
+++ b/src/common/micro/rain_ice.F90
@@ -206,6 +206,7 @@ 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_TENDENCIES, ONLY: ICE4_TENDENCIES
+USE MODE_ICE4_NUCLEATION, ONLY: ICE4_NUCLEATION
 !
 IMPLICIT NONE
 !
@@ -426,7 +427,9 @@ REAL :: ZDEVIDE, ZX, ZRICE
 !
 INTEGER :: IC, JMICRO
 LOGICAL :: LLSIGMA_RC, LL_ANY_ITER, LL_AUCV_ADJU
-
+!
+REAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: ZW3D
+LOGICAL, DIMENSION(D%NIT,D%NJT,D%NKT) :: LLW3D
 !
 !-------------------------------------------------------------------------------
 IF (LHOOK) CALL DR_HOOK('RAIN_ICE', 0, ZHOOK_HANDLE)
@@ -1106,19 +1109,21 @@ PCIT(:,:,:)=ZCITOUT(:,:,:)
 !
 DO JK=D%NKTB,D%NKTE
   DO JJ=D%NJB,D%NJE
-!DIR$ VECTOR ALWAYS
-    DO CONCURRENT (JI=D%NIB:D%NIE)
+    DO JI=D%NIB,D%NIE
       IF (.NOT. ODMICRO(JI, JJ, JK)) THEN
-        ZW0D=ZZ_LSFACT(JI, JJ, JK)/PEXN(JI, JJ, JK)
+        LLW3D(JI, JJ, JK)=.TRUE.
+        ZW3D(JI, JJ, JK)=ZZ_LSFACT(JI, JJ, JK)/PEXN(JI, JJ, JK)
+      ELSE
+        LLW3D(JI, JJ, JK)=.FALSE.
       ENDIF
-      CALL ICE4_NUCLEATION_ELEM(CST, PARAMI, ICEP, ICED, .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
+CALL ICE4_NUCLEATION(CST, PARAMI, ICEP, ICED, D%NIT*D%NJT*D%NKT, LLW3D(:,:,:), &
+                     PTHT(:, :, :), PPABST(:, :, :), PRHODREF(:, :, :), &                                       
+                     PEXN(:, :, :), ZW3D(:, :, :), ZT(:, :, :), &                                                           
+                     PRVT(:, :, :), &                                                                                 
+                     PCIT(:, :, :), ZZ_RVHENI_MR(:, :, :))
 !
 !-------------------------------------------------------------------------------
 !
@@ -1811,6 +1816,4 @@ CONTAINS
   !
   END SUBROUTINE CORRECT_NEGATIVITIES
 !
-INCLUDE "ice4_nucleation_elem.func.h"
-!
 END SUBROUTINE RAIN_ICE