diff --git a/src/arome/gmkpack_ignored_files b/src/arome/gmkpack_ignored_files
index 10c5e38ab406d69febb7865b66c5c4114f6bc608..7621cb09a4e3724de9aa3db56ed5cf9991b5c66d 100644
--- a/src/arome/gmkpack_ignored_files
+++ b/src/arome/gmkpack_ignored_files
@@ -85,3 +85,10 @@ phyex/micro/ini_budget.F90
 phyex/micro/modd_budget.F90
 phyex/micro/modi_budget.F90
 phyex/micro/modi_ini_budget.F90
+phyex/turb/compute_frac_ice1d.F90
+phyex/turb/compute_frac_ice2d.F90
+phyex/turb/compute_frac_ice3d.F90
+phyex/turb/modi_compute_frac_ice.F90
+phyex/turb/modi_compute_frac_ice1d.F90
+phyex/turb/modi_compute_frac_ice3d.F90
+
diff --git a/src/arome/micro/condensation.F90 b/src/arome/micro/condensation.F90
index da5c6e905ded11b20eb3d007a84155daf3eb9ffc..a3033817e45fba3362d15ab7f1037bb6f10dfda8 100644
--- a/src/arome/micro/condensation.F90
+++ b/src/arome/micro/condensation.F90
@@ -76,7 +76,7 @@
 !
 USE MODD_CST
 USE MODD_PARAMETERS
-USE MODI_COMPUTE_FRAC_ICE
+USE MODE_COMPUTE_FRAC_ICE, ONLY : COMPUTE_FRAC_ICE
 USE MODD_TIWMX
 USE MODI_ICECLOUD
 USE MODI_TIWMX
@@ -321,7 +321,7 @@ ZFRAC(:,:,:) = 0.
 WHERE(PRC(:,:,:)+PRI(:,:,:) > 1.E-20)
   ZFRAC(:,:,:) = PRI(:,:,:) / (PRC(:,:,:)+PRI(:,:,:))
 ENDWHERE
-CALL COMPUTE_FRAC_ICE(HFRAC_ICE, ZFRAC, PT)
+CALL COMPUTE_FRAC_ICE(SIZE(ZFRAC, 1), SIZE(ZFRAC, 2), SIZE(ZFRAC, 3), HFRAC_ICE, ZFRAC, PT)
 IF(.NOT. OUSERI) ZFRAC(:,:,:)=0.
 IF(OCND2) ZFRAC=0.
 !
diff --git a/src/arome/modset_Ryad/mpa/turb/internals/compute_frac_ice1d.F90 b/src/arome/modset_Ryad/mpa/turb/internals/compute_frac_ice1d.F90
deleted file mode 100644
index 07af7f515eedd3bfaf79d25cba7e3fccd653b22b..0000000000000000000000000000000000000000
--- a/src/arome/modset_Ryad/mpa/turb/internals/compute_frac_ice1d.F90
+++ /dev/null
@@ -1,84 +0,0 @@
-!     ######spl
-      SUBROUTINE COMPUTE_FRAC_ICE1D(HFRAC_ICE,PFRAC_ICE,PT)
-!    ##########################################################
-!
-!
-!!****  *COMPUTE_FRAC_ICE* - computes ice fraction
-!!
-!!    PURPOSE
-!!    -------
-!!
-!!**  METHOD
-!!    ------
-!!    
-!!
-!!    EXTERNAL
-!!    --------
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!    AUTHOR
-!!    ------
-!!      Julien PERGAUD      * Meteo-France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original         13/03/06
-!!      S. Riette        April 2011 optimisation
-!!      S. Riette        08/2016 add option O
-!!      R. El Khatib 24-Aug-2021 Optimization by cache re-use + assume data is contiguous
-!!
-!! --------------------------------------------------------------------------
-!       0. DECLARATIONS
-!          ------------
-!
-USE PARKIND1, ONLY : JPRB
-USE YOMHOOK , ONLY : LHOOK, DR_HOOK
-USE MODD_NEB, ONLY : XTMINMIX, XTMAXMIX
-USE MODD_CST, ONLY : XTT
-!
-IMPLICIT NONE
-!
-!
-!*      0.1  declarations of arguments
-!
-CHARACTER*1       , INTENT(IN)    :: HFRAC_ICE  ! scheme to use
-REAL, CONTIGUOUS, DIMENSION(:), INTENT(IN)    :: PT         ! temperature
-REAL, CONTIGUOUS, DIMENSION(:), INTENT(INOUT) :: PFRAC_ICE  ! Ice fraction (1 for ice only, 0 for liquid only)
-!
-!               0.2  declaration of local variables
-! 
-REAL(KIND=JPRB) :: ZHOOK_HANDLE
-!
-!               0.2  initialisation
-!
-IF (LHOOK) CALL DR_HOOK('COMPUTE_FRAC_ICE1D',0,ZHOOK_HANDLE)
-!
-!------------------------------------------------------------------------
-!                1. Compute FRAC_ICE
-!
-SELECT CASE(HFRAC_ICE)
-  CASE ('T') !using Temperature
-    PFRAC_ICE(:) = MAX( 0., MIN(1., (( XTMAXMIX - PT(:) ) / ( XTMAXMIX - XTMINMIX )) ) ) ! freezing interval
-  CASE ('O') !using Temperature with old formulae
-    PFRAC_ICE(:) = MAX( 0., MIN(1., (( XTT - PT(:) ) / 40.) ) ) ! freezing interval
-  CASE ('N') !No ice
-    PFRAC_ICE(:) = 0.
-  CASE ('S') !Same as previous
-    ! (almost) nothing to do
-    PFRAC_ICE(:) = MAX( 0., MIN(1., PFRAC_ICE(:) ) )
-  CASE DEFAULT
-    WRITE(*,*) ' STOP'
-    WRITE(*,*) ' INVALID OPTION IN COMPUTE_FRAC_ICE, HFRAC_ICE=',HFRAC_ICE
-    CALL ABORT
-    STOP
-END SELECT
-
-IF (LHOOK) CALL DR_HOOK('COMPUTE_FRAC_ICE1D',1,ZHOOK_HANDLE)
-
-END SUBROUTINE COMPUTE_FRAC_ICE1D
diff --git a/src/arome/modset_Ryad/mpa/turb/internals/compute_frac_ice2d.F90 b/src/arome/modset_Ryad/mpa/turb/internals/compute_frac_ice2d.F90
deleted file mode 100644
index f399e394f4cf449a1974e803a8317ad43d45fdfb..0000000000000000000000000000000000000000
--- a/src/arome/modset_Ryad/mpa/turb/internals/compute_frac_ice2d.F90
+++ /dev/null
@@ -1,75 +0,0 @@
-!     ######spl
-      SUBROUTINE COMPUTE_FRAC_ICE2D(HFRAC_ICE,PFRAC_ICE,PT)
-!    ##########################################################
-!
-!
-!!****  *COMPUTE_FRAC_ICE* - computes ice fraction
-!!
-!!    PURPOSE
-!!    -------
-!!
-!!**  METHOD
-!!    ------
-!!    
-!!
-!!    EXTERNAL
-!!    --------
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!    AUTHOR
-!!    ------
-!!      Julien PERGAUD      * Meteo-France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original         13/03/06
-!!      S. Riette        April 2011 optimisation
-!!      R. El Khatib 24-Aug-2021 Optimize by loop collapsing + assume data is contiguous
-!!
-!! --------------------------------------------------------------------------
-!       0. DECLARATIONS
-!          ------------
-!
-USE PARKIND1, ONLY : JPRB
-USE YOMHOOK , ONLY : LHOOK, DR_HOOK
-USE MODI_COMPUTE_FRAC_ICE1D
-!
-IMPLICIT NONE
-!
-!
-!*      0.1  declarations of arguments
-!
-CHARACTER*1         , INTENT(IN)    :: HFRAC_ICE ! scheme to use
-REAL, TARGET, CONTIGUOUS, DIMENSION(:,:), INTENT(IN)    :: PT        ! Temperature
-REAL, TARGET, CONTIGUOUS, DIMENSION(:,:), INTENT(INOUT) :: PFRAC_ICE ! Ice fraction (1 for ice only, 0 for liquid only)
-!-------------------------------------------------------------------------
-!
-!       0.2  declaration of local variables
-!
-REAL, POINTER, DIMENSION(:) :: ZT, ZFRAC_ICE
-
-REAL(KIND=JPRB) :: ZHOOK_HANDLE
-!-------------------------------------------------------------------------
-!
-!       0.3  Initialisation
-!
-IF (LHOOK) CALL DR_HOOK('COMPUTE_FRAC_ICE2D',0,ZHOOK_HANDLE)
-!
-!----------------------------------------------------------------------------
-!
-!       1 Compute FRAC_ICE
-!         ----------------
-!
-ZT(1:SIZE(PT))=>PT
-ZFRAC_ICE(1:SIZE(PFRAC_ICE))=>PFRAC_ICE
-CALL COMPUTE_FRAC_ICE1D(HFRAC_ICE,ZFRAC_ICE,ZT)
-
-IF (LHOOK) CALL DR_HOOK('COMPUTE_FRAC_ICE2D',1,ZHOOK_HANDLE)
-
-END SUBROUTINE COMPUTE_FRAC_ICE2D
diff --git a/src/arome/modset_Ryad/mpa/turb/internals/compute_frac_ice3d.F90 b/src/arome/modset_Ryad/mpa/turb/internals/compute_frac_ice3d.F90
deleted file mode 100644
index 1834f72d8eec509fcdba562c0f681514746c0251..0000000000000000000000000000000000000000
--- a/src/arome/modset_Ryad/mpa/turb/internals/compute_frac_ice3d.F90
+++ /dev/null
@@ -1,76 +0,0 @@
-!     ######spl
-      SUBROUTINE COMPUTE_FRAC_ICE3D(HFRAC_ICE,PFRAC_ICE,PT)
-!     #################################################################
-!
-!
-!!****  *COMPUTE_FRAC_ICE* - computes ice fraction
-!!
-!!    PURPOSE
-!!    -------
-!!
-!!**  METHOD
-!!    ------
-!!    
-!!
-!!    EXTERNAL
-!!    --------
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!    AUTHOR
-!!    ------
-!!      Julien PERGAUD      * Meteo-France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original         13/03/06
-!!      S. Riette        April 2011 optimisation
-!!      R. El Khatib 24-Aug-2021 Optimize by loop collapsing  + assume data is contiguous
-!!
-!! --------------------------------------------------------------------------
-!       
-!*      0. DECLARATIONS
-!          ------------
-!
-USE PARKIND1, ONLY : JPRB
-USE YOMHOOK , ONLY : LHOOK, DR_HOOK
-USE MODI_COMPUTE_FRAC_ICE1D
-!
-IMPLICIT NONE
-!
-!
-!*      0.1  declarations of arguments
-!
-CHARACTER*1           , INTENT(IN)    :: HFRAC_ICE ! scheme to use
-REAL, TARGET, CONTIGUOUS, DIMENSION(:,:,:), INTENT(IN)    :: PT        ! Temperature
-REAL, TARGET, CONTIGUOUS, DIMENSION(:,:,:), INTENT(INOUT) :: PFRAC_ICE ! Ice fraction (1 for ice only, 0 for liquid only)
-!-------------------------------------------------------------------------
-!
-!       0.2  declaration of local variables
-!
-REAL, POINTER, DIMENSION(:) :: ZT, ZFRAC_ICE
-
-REAL(KIND=JPRB) :: ZHOOK_HANDLE
-!-------------------------------------------------------------------------
-!
-!       0.3  Initialisation
-!
-IF (LHOOK) CALL DR_HOOK('COMPUTE_FRAC_ICE3D',0,ZHOOK_HANDLE)
-!
-!----------------------------------------------------------------------------
-!
-!       1 Compute FRAC_ICE
-!         ----------------
-!
-ZT(1:SIZE(PT))=>PT
-ZFRAC_ICE(1:SIZE(PFRAC_ICE))=>PFRAC_ICE
-CALL COMPUTE_FRAC_ICE1D(HFRAC_ICE,ZFRAC_ICE,ZT)
-
-IF (LHOOK) CALL DR_HOOK('COMPUTE_FRAC_ICE3D',1,ZHOOK_HANDLE)
-
-END SUBROUTINE COMPUTE_FRAC_ICE3D
diff --git a/src/arome/turb/compute_frac_ice1d.F90 b/src/arome/turb/compute_frac_ice1d.F90
deleted file mode 100644
index f06cd703e577c9c64678d2b0d7b22717742eeb89..0000000000000000000000000000000000000000
--- a/src/arome/turb/compute_frac_ice1d.F90
+++ /dev/null
@@ -1,83 +0,0 @@
-!     ######spl
-      SUBROUTINE COMPUTE_FRAC_ICE1D(HFRAC_ICE,PFRAC_ICE,PT)
-!    ##########################################################
-!
-!
-!!****  *COMPUTE_FRAC_ICE* - computes ice fraction
-!!
-!!    PURPOSE
-!!    -------
-!!
-!!**  METHOD
-!!    ------
-!!    
-!!
-!!    EXTERNAL
-!!    --------
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!    AUTHOR
-!!    ------
-!!      Julien PERGAUD      * Meteo-France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original         13/03/06
-!!      S. Riette        April 2011 optimisation
-!!      S. Riette        08/2016 add option O
-!!
-!! --------------------------------------------------------------------------
-!       0. DECLARATIONS
-!          ------------
-!
-USE PARKIND1, ONLY : JPRB
-USE YOMHOOK , ONLY : LHOOK, DR_HOOK
-USE MODD_NEB, ONLY : XTMINMIX, XTMAXMIX
-USE MODD_CST, ONLY : XTT
-!
-IMPLICIT NONE
-!
-!
-!*      0.1  declarations of arguments
-!
-CHARACTER*1       , INTENT(IN)    :: HFRAC_ICE  ! scheme to use
-REAL, DIMENSION(:), INTENT(IN)    :: PT         ! temperature
-REAL, DIMENSION(:), INTENT(INOUT) :: PFRAC_ICE  ! Ice fraction (1 for ice only, 0 for liquid only)
-!
-!               0.2  declaration of local variables
-! 
-REAL(KIND=JPRB) :: ZHOOK_HANDLE
-!
-!               0.2  initialisation
-!
-IF (LHOOK) CALL DR_HOOK('COMPUTE_FRAC_ICE1D',0,ZHOOK_HANDLE)
-!
-!------------------------------------------------------------------------
-!                1. Compute FRAC_ICE
-!
-IF (HFRAC_ICE=='T') THEN !using Temperature
-  PFRAC_ICE(:) = ( XTMAXMIX - PT(:) ) / ( XTMAXMIX - XTMINMIX ) ! freezing interval
-ELSEIF (HFRAC_ICE=='O') THEN !using Temperature with old formulae
-  PFRAC_ICE(:) = ( XTT - PT(:) ) / 40. ! freezing interval
-ELSEIF (HFRAC_ICE=='N') THEN !No ice
-  PFRAC_ICE(:) = 0.
-ELSEIF (HFRAC_ICE=='S') THEN !Same as previous
-  !nothing to do
-ELSE
-  WRITE(*,*) ' STOP'
-  WRITE(*,*) ' INVALID OPTION IN COMPUTE_FRAC_ICE, HFRAC_ICE=',HFRAC_ICE
-  CALL ABORT
-  STOP
-ENDIF
-
-PFRAC_ICE(:) = MAX( 0., MIN(1., PFRAC_ICE(:) ) )
-
-IF (LHOOK) CALL DR_HOOK('COMPUTE_FRAC_ICE1D',1,ZHOOK_HANDLE)
-
-END SUBROUTINE COMPUTE_FRAC_ICE1D
diff --git a/src/arome/turb/compute_frac_ice2d.F90 b/src/arome/turb/compute_frac_ice2d.F90
deleted file mode 100644
index 8dfca6d4abb7bda106f538590a5f61aaba6f47a3..0000000000000000000000000000000000000000
--- a/src/arome/turb/compute_frac_ice2d.F90
+++ /dev/null
@@ -1,73 +0,0 @@
-!     ######spl
-      SUBROUTINE COMPUTE_FRAC_ICE2D(HFRAC_ICE,PFRAC_ICE,PT)
-!    ##########################################################
-!
-!
-!!****  *COMPUTE_FRAC_ICE* - computes ice fraction
-!!
-!!    PURPOSE
-!!    -------
-!!
-!!**  METHOD
-!!    ------
-!!    
-!!
-!!    EXTERNAL
-!!    --------
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!    AUTHOR
-!!    ------
-!!      Julien PERGAUD      * Meteo-France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original         13/03/06
-!!      S. Riette        April 2011 optimisation
-!!
-!! --------------------------------------------------------------------------
-!       0. DECLARATIONS
-!          ------------
-!
-USE PARKIND1, ONLY : JPRB
-USE YOMHOOK , ONLY : LHOOK, DR_HOOK
-USE MODI_COMPUTE_FRAC_ICE1D
-!
-IMPLICIT NONE
-!
-!
-!*      0.1  declarations of arguments
-!
-CHARACTER*1         , INTENT(IN)    :: HFRAC_ICE ! scheme to use
-REAL, DIMENSION(:,:), INTENT(IN)    :: PT        ! Temperature
-REAL, DIMENSION(:,:), INTENT(INOUT) :: PFRAC_ICE ! Ice fraction (1 for ice only, 0 for liquid only)
-!-------------------------------------------------------------------------
-!
-!       0.2  declaration of local variables
-!
-INTEGER :: JK
-REAL(KIND=JPRB) :: ZHOOK_HANDLE
-!-------------------------------------------------------------------------
-!
-!       0.3  Initialisation
-!
-IF (LHOOK) CALL DR_HOOK('COMPUTE_FRAC_ICE2D',0,ZHOOK_HANDLE)
-!
-!----------------------------------------------------------------------------
-!
-!       1 Compute FRAC_ICE
-!         ----------------
-!
-DO JK=1, SIZE(PT,2)
-  CALL COMPUTE_FRAC_ICE1D(HFRAC_ICE,PFRAC_ICE(:,JK),PT(:,JK))
-ENDDO
-
-IF (LHOOK) CALL DR_HOOK('COMPUTE_FRAC_ICE2D',1,ZHOOK_HANDLE)
-
-END SUBROUTINE COMPUTE_FRAC_ICE2D
diff --git a/src/arome/turb/compute_frac_ice3d.F90 b/src/arome/turb/compute_frac_ice3d.F90
deleted file mode 100644
index 4a5b1a89f252a9d67996a8ddbe57b2c3326713c1..0000000000000000000000000000000000000000
--- a/src/arome/turb/compute_frac_ice3d.F90
+++ /dev/null
@@ -1,76 +0,0 @@
-!     ######spl
-      SUBROUTINE COMPUTE_FRAC_ICE3D(HFRAC_ICE,PFRAC_ICE,PT)
-!     #################################################################
-!
-!
-!!****  *COMPUTE_FRAC_ICE* - computes ice fraction
-!!
-!!    PURPOSE
-!!    -------
-!!
-!!**  METHOD
-!!    ------
-!!    
-!!
-!!    EXTERNAL
-!!    --------
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!    AUTHOR
-!!    ------
-!!      Julien PERGAUD      * Meteo-France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original         13/03/06
-!!      S. Riette        April 2011 optimisation
-!!
-!! --------------------------------------------------------------------------
-!       
-!*      0. DECLARATIONS
-!          ------------
-!
-USE PARKIND1, ONLY : JPRB
-USE YOMHOOK , ONLY : LHOOK, DR_HOOK
-USE MODI_COMPUTE_FRAC_ICE1D
-!
-IMPLICIT NONE
-!
-!
-!*      0.1  declarations of arguments
-!
-CHARACTER*1           , INTENT(IN)    :: HFRAC_ICE ! scheme to use
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PT        ! Temperature
-REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PFRAC_ICE ! Ice fraction (1 for ice only, 0 for liquid only)
-!-------------------------------------------------------------------------
-!
-!       0.2  declaration of local variables
-!
-INTEGER :: JJ, JK
-REAL(KIND=JPRB) :: ZHOOK_HANDLE
-!-------------------------------------------------------------------------
-!
-!       0.3  Initialisation
-!
-IF (LHOOK) CALL DR_HOOK('COMPUTE_FRAC_ICE3D',0,ZHOOK_HANDLE)
-!
-!----------------------------------------------------------------------------
-!
-!       1 Compute FRAC_ICE
-!         ----------------
-!
-DO JK=1, SIZE(PT,3)
-  DO JJ=1, SIZE(PT,2)
-    CALL COMPUTE_FRAC_ICE1D(HFRAC_ICE,PFRAC_ICE(:,JJ,JK),PT(:,JJ,JK))
-  ENDDO
-ENDDO
-
-IF (LHOOK) CALL DR_HOOK('COMPUTE_FRAC_ICE3D',1,ZHOOK_HANDLE)
-
-END SUBROUTINE COMPUTE_FRAC_ICE3D
diff --git a/src/arome/turb/modi_compute_frac_ice.F90 b/src/arome/turb/modi_compute_frac_ice.F90
deleted file mode 100644
index 89238dc3da3e1e9a0fa69a8432dd747294bf8fb3..0000000000000000000000000000000000000000
--- a/src/arome/turb/modi_compute_frac_ice.F90
+++ /dev/null
@@ -1,33 +0,0 @@
-!     ######spl
-     MODULE MODI_COMPUTE_FRAC_ICE  
-!    ############################ 
-!
-INTERFACE COMPUTE_FRAC_ICE
-!
-    SUBROUTINE COMPUTE_FRAC_ICE3D(HFRAC_ICE,PFRAC_ICE,PT)
-!
-CHARACTER*1           , INTENT(IN) :: HFRAC_ICE
-REAL, DIMENSION(:,:,:), INTENT(IN) :: PT
-REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PFRAC_ICE                                             
-!
-   END SUBROUTINE COMPUTE_FRAC_ICE3D
-!
-   SUBROUTINE COMPUTE_FRAC_ICE2D(HFRAC_ICE,PFRAC_ICE,PT)
-!
-CHARACTER*1           , INTENT(IN) :: HFRAC_ICE
-REAL, DIMENSION(:,:), INTENT(IN) :: PT
-REAL, DIMENSION(:,:), INTENT(INOUT) :: PFRAC_ICE                                             
-!
-   END SUBROUTINE COMPUTE_FRAC_ICE2D
-
-   SUBROUTINE COMPUTE_FRAC_ICE1D(HFRAC_ICE,PFRAC_ICE,PT)
-!
-CHARACTER*1           , INTENT(IN) :: HFRAC_ICE
-REAL, DIMENSION(:), INTENT(IN) :: PT
-REAL, DIMENSION(:), INTENT(INOUT) :: PFRAC_ICE                                             
-
-   END SUBROUTINE COMPUTE_FRAC_ICE1D
-
-END INTERFACE
-!
-END MODULE MODI_COMPUTE_FRAC_ICE
diff --git a/src/arome/turb/modi_compute_frac_ice1d.F90 b/src/arome/turb/modi_compute_frac_ice1d.F90
deleted file mode 100644
index 863787fd379159c001ceaa7cc37d350496577b11..0000000000000000000000000000000000000000
--- a/src/arome/turb/modi_compute_frac_ice1d.F90
+++ /dev/null
@@ -1,15 +0,0 @@
-!     ######spl
-      MODULE MODI_COMPUTE_FRAC_ICE1D
-!     ############################## 
-
-INTERFACE 
-!
-    SUBROUTINE COMPUTE_FRAC_ICE1D(HFRAC_ICE,PFRAC_ICE,PT)
-!
-CHARACTER*1       , INTENT(IN)    :: HFRAC_ICE
-REAL, DIMENSION(:), INTENT(IN)    :: PT
-REAL, DIMENSION(:), INTENT(INOUT) :: PFRAC_ICE
-!
-   END SUBROUTINE COMPUTE_FRAC_ICE1D
-END INTERFACE
-END MODULE MODI_COMPUTE_FRAC_ICE1D
diff --git a/src/arome/turb/modi_compute_frac_ice3d.F90 b/src/arome/turb/modi_compute_frac_ice3d.F90
deleted file mode 100644
index fb3b0cc93da86adef6acadb4797eb9b1ba6472ea..0000000000000000000000000000000000000000
--- a/src/arome/turb/modi_compute_frac_ice3d.F90
+++ /dev/null
@@ -1,15 +0,0 @@
-!     ######spl
-      MODULE MODI_COMPUTE_FRAC_ICE3D  
-!     ############################## 
-
-INTERFACE 
-!
-    SUBROUTINE COMPUTE_FRAC_ICE3D(HFRAC_ICE,PFRAC_ICE,PT)
-!
-CHARACTER*1           , INTENT(IN) :: HFRAC_ICE
-REAL, DIMENSION(:,:,:), INTENT(IN) :: PT
-REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PFRAC_ICE                                             
-!
-   END SUBROUTINE COMPUTE_FRAC_ICE3D
-END INTERFACE
-END MODULE MODI_COMPUTE_FRAC_ICE3D
diff --git a/src/arome/turb/shallow_mf.F90 b/src/arome/turb/shallow_mf.F90
index 1173fc67f6e6f56433c0e0cc3f3fe89d0de9260c..03c55548d0aeeed3d3656b22462cfcb41975f6c6 100644
--- a/src/arome/turb/shallow_mf.F90
+++ b/src/arome/turb/shallow_mf.F90
@@ -70,7 +70,7 @@ USE MODI_COMPUTE_UPDRAFT_RAHA
 USE MODI_MF_TURB
 USE MODI_MF_TURB_EXPL
 USE MODI_COMPUTE_MF_CLOUD
-USE MODI_COMPUTE_FRAC_ICE
+USE MODE_COMPUTE_FRAC_ICE, ONLY : COMPUTE_FRAC_ICE
 !
 IMPLICIT NONE
 
@@ -186,7 +186,8 @@ ZFRAC_ICE(:,:) = 0.
 WHERE(PRM(:,:,2)+PRM(:,:,4) > 1.E-20)
   ZFRAC_ICE(:,:) = PRM(:,:,4) / (PRM(:,:,2)+PRM(:,:,4))
 ENDWHERE
-CALL COMPUTE_FRAC_ICE(HFRAC_ICE,ZFRAC_ICE(:,:),PTHM(:,:)*PEXNM(:,:))
+CALL COMPUTE_FRAC_ICE(SIZE(ZFRAC_ICE, 1), SIZE(ZFRAC_ICE, 2), &
+                      HFRAC_ICE,ZFRAC_ICE(:,:),PTHM(:,:)*PEXNM(:,:))
 
 ! Conservative variables at t-dt
 CALL THL_RT_FROM_TH_R_MF(KRR,KRRL,KRRI,    &
diff --git a/src/arome/turb/th_r_from_thl_rt_1d.F90 b/src/arome/turb/th_r_from_thl_rt_1d.F90
index 5a17d25695a87c9346e1b352d3b183bc238afdfe..6add0bb6429ec3a9f727b68d8da9c3805db9939a 100644
--- a/src/arome/turb/th_r_from_thl_rt_1d.F90
+++ b/src/arome/turb/th_r_from_thl_rt_1d.F90
@@ -43,7 +43,7 @@
 !
 USE PARKIND1, ONLY : JPRB
 USE YOMHOOK , ONLY : LHOOK, DR_HOOK
-USE MODI_COMPUTE_FRAC_ICE
+USE MODE_COMPUTE_FRAC_ICE, ONLY : COMPUTE_FRAC_ICE
 USE MODD_CST!, ONLY: XP00, XRD, XCPD, XCPV, XCL, XCI, XLVTT, XTT, XLSTT
 USE MODE_THERMO
 !
@@ -127,7 +127,7 @@ DO II=1,JITER
       PFRAC_ICE(J) = PRI(J) / (PRL(J)+PRI(J))
     ENDIF
   ENDDO
-  CALL COMPUTE_FRAC_ICE(HFRAC_ICE,PFRAC_ICE(:),ZT(:))
+  CALL COMPUTE_FRAC_ICE(SIZE(PFRAC_ICE, 1), HFRAC_ICE,PFRAC_ICE(:),ZT(:))
 
   !Computation of Rvsat and dRsat/dT
   !In this version QSAT, QSATI, DQSAT and DQASATI functions are not used
diff --git a/src/common/micro/mode_compute_frac_ice.F90 b/src/common/micro/mode_compute_frac_ice.F90
new file mode 100644
index 0000000000000000000000000000000000000000..6ebe4a28d70df699ddf38c5f92b46f0a60a390e8
--- /dev/null
+++ b/src/common/micro/mode_compute_frac_ice.F90
@@ -0,0 +1,146 @@
+!MNH_LIC Copyright 2006-2019 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 MODE_COMPUTE_FRAC_ICE
+!    ############################
+!
+!!****  *COMPUTE_FRAC_ICE* - computes ice fraction
+!!
+!!    PURPOSE
+!!    -------
+!!
+!!**  METHOD
+!!    ------
+!!    
+!!
+!!    EXTERNAL
+!!    --------
+!!
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!
+!!    REFERENCE
+!!    ---------
+!!
+!!    AUTHOR
+!!    ------
+!!      Julien PERGAUD      * Meteo-France *
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Original         13/03/06
+!!      S. Riette        April 2011 optimisation
+!!      S. Riette        08/2016 add option O
+!!      P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
+!!      R. El Khatib 24-Aug-2021 Optimization by cache re-use + assume data is contiguous
+!!      S. Riette Jan-2022 Merge the 3 procedures in one module + array shape declaration
+!
+! 
+USE PARKIND1, ONLY : JPRB
+USE YOMHOOK , ONLY : LHOOK, DR_HOOK
+!
+INTERFACE COMPUTE_FRAC_ICE 
+  MODULE PROCEDURE COMPUTE_FRAC_ICE1D, COMPUTE_FRAC_ICE2D, COMPUTE_FRAC_ICE3D
+END INTERFACE COMPUTE_FRAC_ICE
+
+CONTAINS
+
+!!       ==========
+!!       3D version
+!!       ==========
+!
+SUBROUTINE COMPUTE_FRAC_ICE3D(KIT, KJT, KKT, HFRAC_ICE, PFRAC_ICE, PT)
+IMPLICIT NONE
+INTEGER,                              INTENT(IN)    :: KIT, KJT, KKT
+CHARACTER(LEN=1),                     INTENT(IN)    :: HFRAC_ICE ! scheme to use
+REAL, TARGET, DIMENSION(KIT,KJT,KKT), INTENT(IN)    :: PT        ! Temperature
+REAL, TARGET, DIMENSION(KIT,KJT,KKT), INTENT(INOUT) :: PFRAC_ICE ! Ice fraction (1 for ice only, 0 for liquid only)
+REAL, POINTER, DIMENSION(:) :: ZT, ZFRAC_ICE
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+IF (LHOOK) CALL DR_HOOK('COMPUTE_FRAC_ICE3D',0,ZHOOK_HANDLE)
+!
+ZT(1:SIZE(PT))=>PT
+ZFRAC_ICE(1:SIZE(PFRAC_ICE))=>PFRAC_ICE
+CALL COMPUTE_FRAC_ICE1D(SIZE(PT), HFRAC_ICE,ZFRAC_ICE,ZT)
+!
+IF (LHOOK) CALL DR_HOOK('COMPUTE_FRAC_ICE3D',1,ZHOOK_HANDLE)
+END SUBROUTINE COMPUTE_FRAC_ICE3D
+!
+!
+!!       ==========
+!!       2D version
+!!       ==========
+!
+SUBROUTINE COMPUTE_FRAC_ICE2D(KIT, KJT, HFRAC_ICE, PFRAC_ICE, PT)
+IMPLICIT NONE
+INTEGER,                          INTENT(IN)    :: KIT, KJT
+CHARACTER(LEN=1),                 INTENT(IN)    :: HFRAC_ICE ! scheme to use
+REAL, TARGET, DIMENSION(KIT,KJT), INTENT(IN)    :: PT        ! Temperature
+REAL, TARGET, DIMENSION(KIT,KJT), INTENT(INOUT) :: PFRAC_ICE ! Ice fraction (1 for ice only, 0 for liquid only)
+REAL, POINTER, DIMENSION(:) :: ZT, ZFRAC_ICE
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+IF (LHOOK) CALL DR_HOOK('COMPUTE_FRAC_ICE2D',0,ZHOOK_HANDLE)
+!
+ZT(1:SIZE(PT))=>PT
+ZFRAC_ICE(1:SIZE(PFRAC_ICE))=>PFRAC_ICE
+CALL COMPUTE_FRAC_ICE1D(SIZE(PT), HFRAC_ICE,ZFRAC_ICE,ZT)
+!
+IF (LHOOK) CALL DR_HOOK('COMPUTE_FRAC_ICE2D',1,ZHOOK_HANDLE)
+END SUBROUTINE COMPUTE_FRAC_ICE2D
+!
+!
+!!       ==========
+!!       1D version
+!!       ==========
+!
+SUBROUTINE COMPUTE_FRAC_ICE1D(KIT, HFRAC_ICE, PFRAC_ICE, PT)
+!! --------------------------------------------------------------------------
+!       0. DECLARATIONS
+!          ------------
+!
+USE MODD_NEB, ONLY : XTMINMIX, XTMAXMIX
+USE MODD_CST, ONLY : XTT
+USE MODE_MSG, ONLY : PRINT_MSG, NVERB_FATAL
+!
+IMPLICIT NONE
+!
+!
+!*      0.1  declarations of arguments
+!
+INTEGER,                      INTENT(IN)    :: KIT
+CHARACTER(LEN=1),             INTENT(IN)    :: HFRAC_ICE ! scheme to use
+REAL, TARGET, DIMENSION(KIT), INTENT(IN)    :: PT        ! Temperature
+REAL, TARGET, DIMENSION(KIT), INTENT(INOUT) :: PFRAC_ICE ! Ice fraction (1 for ice only, 0 for liquid only)
+!
+!               0.2  declaration of local variables
+! 
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+IF (LHOOK) CALL DR_HOOK('COMPUTE_FRAC_ICE1D',0,ZHOOK_HANDLE)
+!------------------------------------------------------------------------
+!                1. Compute FRAC_ICE
+!
+SELECT CASE(HFRAC_ICE)
+  CASE ('T') !using Temperature
+    PFRAC_ICE(:) = MAX( 0., MIN(1., (( XTMAXMIX - PT(:) ) / ( XTMAXMIX - XTMINMIX )) ) ) ! freezing interval
+  CASE ('O') !using Temperature with old formulae
+    PFRAC_ICE(:) = MAX( 0., MIN(1., (( XTT - PT(:) ) / 40.) ) ) ! freezing interval
+  CASE ('N') !No ice
+    PFRAC_ICE(:) = 0.
+  CASE ('S') !Same as previous
+    ! (almost) nothing to do
+    PFRAC_ICE(:) = MAX( 0., MIN(1., PFRAC_ICE(:) ) )
+  CASE DEFAULT
+    CALL PRINT_MSG(NVERB_FATAL, 'GEN', 'COMPUTE_FRAC_ICE', 'invalid option for HFRAC_ICE='//HFRAC_ICE)
+END SELECT
+!
+IF (LHOOK) CALL DR_HOOK('COMPUTE_FRAC_ICE1D',1,ZHOOK_HANDLE)
+!
+END SUBROUTINE COMPUTE_FRAC_ICE1D
+!
+END MODULE MODE_COMPUTE_FRAC_ICE
diff --git a/src/common/micro/rain_ice.F90 b/src/common/micro/rain_ice.F90
index 952e54e53c6a2bc10323bdd57b406e5194c36adb..b75c0de45c8b4a86992470a6fc09742f6ce614a1 100644
--- a/src/common/micro/rain_ice.F90
+++ b/src/common/micro/rain_ice.F90
@@ -411,6 +411,7 @@ REAL, DIMENSION(KPROMA) :: ZRVHENI_MR, & ! heterogeneous nucleation mixing ratio
 !
 !For mixing-ratio-splitting
 LOGICAL :: LLCPZ0RT
+REAL :: ZTIME_THRESHOLD1D(KPROMA) ! Time to reach threshold
 REAL, DIMENSION(KPROMA, KRR) :: Z0RT ! Mixing-ratios at the beginig of the current loop
 !
 REAL, DIMENSION(KPROMA,0:7) :: &
@@ -974,12 +975,14 @@ IF (KSIZE > 0) THEN
               IF (LLCPZ0RT) Z0RT(1:IMICRO, JV)=ZVART(1:IMICRO, JV)
               DO JL=1, IMICRO
                 IF (IITER(JL)<INB_ITER_MAX .AND. ABS(ZA(JL,JV))>1.E-20) THEN
-                  ZTIME_THRESHOLD=(SIGN(1., ZA(JL, JV))*XMRSTEP+Z0RT(JL, JV)-ZVART(JL, JV)-ZB(JL, JV))/ZA(JL, JV)
+                  ZTIME_THRESHOLD1D(JL)=(SIGN(1., ZA(JL, JV))*XMRSTEP+Z0RT(JL, JV)-ZVART(JL, JV)-ZB(JL, JV))/ZA(JL, JV)
                 ELSE
-                  ZTIME_THRESHOLD=-1.
+                  ZTIME_THRESHOLD1D(JL)=-1.
                 ENDIF
-                IF (ZTIME_THRESHOLD>=0 .AND. ZTIME_THRESHOLD<ZMAXTIME(JL) .AND. (ZVART(JL, JV)>XRTMIN(JV) .OR. ZA(JL, JV)>0.)) THEN
-                  ZMAXTIME(JL)=MIN(ZMAXTIME(JL), ZTIME_THRESHOLD)
+              ENDDO
+              DO JL=1, IMICRO
+                IF (ZTIME_THRESHOLD1D(JL)>=0 .AND. ZTIME_THRESHOLD1D(JL)<ZMAXTIME(JL) .AND. (ZVART(JL, JV)>XRTMIN(JV) .OR. ZA(JL, JV)>0.)) THEN
+                  ZMAXTIME(JL)=MIN(ZMAXTIME(JL), ZTIME_THRESHOLD1D(JL))
                   ZCOMPUTE(JL)=0.
                 ENDIF
               ENDDO
diff --git a/src/mesonh/micro/condensation.f90 b/src/mesonh/micro/condensation.f90
index ec60d40671691d994a02f4b1f4981f4cc70c06aa..d0c88e2a339cf556152c7ff1037c43c36adda651 100644
--- a/src/mesonh/micro/condensation.f90
+++ b/src/mesonh/micro/condensation.f90
@@ -138,7 +138,7 @@ USE MODD_RAIN_ICE_PARAM, ONLY : XCRIAUTC, XCRIAUTI, XACRIAUTI, XBCRIAUTI
 !
 use mode_msg
 !
-USE MODI_COMPUTE_FRAC_ICE
+USE MODE_COMPUTE_FRAC_ICE, ONLY : COMPUTE_FRAC_ICE
 !
 !
 IMPLICIT NONE
@@ -332,7 +332,7 @@ IF (OUSERI) THEN
   WHERE(PRC(:,:,:)+PRI(:,:,:) > 1.E-20)
     ZFRAC(:,:,:) = PRI(:,:,:) / (PRC(:,:,:)+PRI(:,:,:))
   ENDWHERE
-  CALL COMPUTE_FRAC_ICE(HFRAC_ICE, ZFRAC, PT)
+  CALL COMPUTE_FRAC_ICE(SIZE(ZFRAC, 1), SIZE(ZFRAC, 2), SIZE(ZFRAC, 3), HFRAC_ICE, ZFRAC, PT)
 ENDIF
 !
 DO JK=IKTB,IKTE
diff --git a/src/mesonh/turb/compute_frac_ice.f90 b/src/mesonh/turb/compute_frac_ice.f90
deleted file mode 100644
index b0e8e7b2de884a2396f21c4217495d801a91546d..0000000000000000000000000000000000000000
--- a/src/mesonh/turb/compute_frac_ice.f90
+++ /dev/null
@@ -1,286 +0,0 @@
-!MNH_LIC Copyright 2006-2019 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_COMPUTE_FRAC_ICE  
-!    ############################ 
-!
-INTERFACE COMPUTE_FRAC_ICE
-!
-    SUBROUTINE COMPUTE_FRAC_ICE3D(HFRAC_ICE,PFRAC_ICE,PT)
-!
-CHARACTER(len=1),       INTENT(IN) :: HFRAC_ICE
-REAL, DIMENSION(:,:,:), INTENT(IN) :: PT
-REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PFRAC_ICE                                             
-!
-   END SUBROUTINE COMPUTE_FRAC_ICE3D
-!
-   SUBROUTINE COMPUTE_FRAC_ICE2D(HFRAC_ICE,PFRAC_ICE,PT)
-!
-CHARACTER(len=1),     INTENT(IN) :: HFRAC_ICE
-REAL, DIMENSION(:,:), INTENT(IN) :: PT
-REAL, DIMENSION(:,:), INTENT(INOUT) :: PFRAC_ICE                                             
-!
-   END SUBROUTINE COMPUTE_FRAC_ICE2D
-
-   SUBROUTINE COMPUTE_FRAC_ICE1D(HFRAC_ICE,PFRAC_ICE,PT)
-!
-CHARACTER(len=1),   INTENT(IN) :: HFRAC_ICE
-REAL, DIMENSION(:), INTENT(IN) :: PT
-REAL, DIMENSION(:), INTENT(INOUT) :: PFRAC_ICE                                             
-
-   END SUBROUTINE COMPUTE_FRAC_ICE1D
-
-END INTERFACE
-!
-END MODULE MODI_COMPUTE_FRAC_ICE
-!
-!     ##############################
-      MODULE MODI_COMPUTE_FRAC_ICE3D  
-!     ############################## 
-
-INTERFACE 
-!
-    SUBROUTINE COMPUTE_FRAC_ICE3D(HFRAC_ICE,PFRAC_ICE,PT)
-!
-CHARACTER(len=1),       INTENT(IN) :: HFRAC_ICE
-REAL, DIMENSION(:,:,:), INTENT(IN) :: PT
-REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PFRAC_ICE                                             
-!
-   END SUBROUTINE COMPUTE_FRAC_ICE3D
-END INTERFACE
-END MODULE MODI_COMPUTE_FRAC_ICE3D
-!
-!     ##############################
-       MODULE MODI_COMPUTE_FRAC_ICE1D  
-!     ############################## 
-
-INTERFACE 
-!
-    SUBROUTINE COMPUTE_FRAC_ICE1D(HFRAC_ICE,PFRAC_ICE,PT)
-!
-CHARACTER(len=1),   INTENT(IN)    :: HFRAC_ICE
-REAL, DIMENSION(:), INTENT(IN)    :: PT
-REAL, DIMENSION(:), INTENT(INOUT) :: PFRAC_ICE
-!
-   END SUBROUTINE COMPUTE_FRAC_ICE1D
-END INTERFACE
-END MODULE MODI_COMPUTE_FRAC_ICE1D
-!    ##########################################################
-      SUBROUTINE COMPUTE_FRAC_ICE3D(HFRAC_ICE,PFRAC_ICE,PT)
-!     #################################################################
-!
-!
-!!****  *COMPUTE_FRAC_ICE* - computes ice fraction
-!!
-!!    PURPOSE
-!!    -------
-!!
-!!**  METHOD
-!!    ------
-!!    
-!!
-!!    EXTERNAL
-!!    --------
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!    AUTHOR
-!!    ------
-!!      Julien PERGAUD      * Meteo-France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original         13/03/06
-!!      S. Riette        April 2011 optimisation
-!!
-!! --------------------------------------------------------------------------
-!       
-!*      0. DECLARATIONS
-!          ------------
-!
-USE MODI_COMPUTE_FRAC_ICE1D
-!
-IMPLICIT NONE
-!
-!
-!*      0.1  declarations of arguments
-!
-CHARACTER(len=1),       INTENT(IN)    :: HFRAC_ICE ! scheme to use
-REAL, DIMENSION(:,:,:), INTENT(IN)    :: PT        ! Temperature
-REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PFRAC_ICE ! Ice fraction (1 for ice only, 0 for liquid only)
-!-------------------------------------------------------------------------
-!
-!       0.2  declaration of local variables
-!
-INTEGER :: JJ, JK
-!-------------------------------------------------------------------------
-!
-!       0.3  Initialisation
-!
-!
-!----------------------------------------------------------------------------
-!
-!       1 Compute FRAC_ICE
-!         ----------------
-!
-DO JK=1, SIZE(PT,3)
-  DO JJ=1, SIZE(PT,2)
-    CALL COMPUTE_FRAC_ICE1D(HFRAC_ICE,PFRAC_ICE(:,JJ,JK),PT(:,JJ,JK))
-  ENDDO
-ENDDO
-
-
-END SUBROUTINE COMPUTE_FRAC_ICE3D
-!    ##########################################################
-      SUBROUTINE COMPUTE_FRAC_ICE2D(HFRAC_ICE,PFRAC_ICE,PT)
-!    ##########################################################
-!
-!
-!!****  *COMPUTE_FRAC_ICE* - computes ice fraction
-!!
-!!    PURPOSE
-!!    -------
-!!
-!!**  METHOD
-!!    ------
-!!    
-!!
-!!    EXTERNAL
-!!    --------
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!    AUTHOR
-!!    ------
-!!      Julien PERGAUD      * Meteo-France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original         13/03/06
-!!      S. Riette        April 2011 optimisation
-!!
-!! --------------------------------------------------------------------------
-!       0. DECLARATIONS
-!          ------------
-!
-USE MODI_COMPUTE_FRAC_ICE1D
-!
-IMPLICIT NONE
-!
-!
-!*      0.1  declarations of arguments
-!
-CHARACTER(len=1),     INTENT(IN)    :: HFRAC_ICE ! scheme to use
-REAL, DIMENSION(:,:), INTENT(IN)    :: PT        ! Temperature
-REAL, DIMENSION(:,:), INTENT(INOUT) :: PFRAC_ICE ! Ice fraction (1 for ice only, 0 for liquid only)
-!-------------------------------------------------------------------------
-!
-!       0.2  declaration of local variables
-!
-INTEGER :: JK
-!-------------------------------------------------------------------------
-!
-!       0.3  Initialisation
-!
-!
-!----------------------------------------------------------------------------
-!
-!       1 Compute FRAC_ICE
-!         ----------------
-!
-DO JK=1, SIZE(PT,2)
-  CALL COMPUTE_FRAC_ICE1D(HFRAC_ICE,PFRAC_ICE(:,JK),PT(:,JK))
-ENDDO
-
-
-END SUBROUTINE COMPUTE_FRAC_ICE2D
-!    ##########################################################
-      SUBROUTINE COMPUTE_FRAC_ICE1D(HFRAC_ICE,PFRAC_ICE,PT)
-!    ##########################################################
-!
-!
-!!****  *COMPUTE_FRAC_ICE* - computes ice fraction
-!!
-!!    PURPOSE
-!!    -------
-!!
-!!**  METHOD
-!!    ------
-!!    
-!!
-!!    EXTERNAL
-!!    --------
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!    AUTHOR
-!!    ------
-!!      Julien PERGAUD      * Meteo-France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original         13/03/06
-!!      S. Riette        April 2011 optimisation
-!!      S. Riette        08/2016 add option O
-!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
-!!
-!! --------------------------------------------------------------------------
-!       0. DECLARATIONS
-!          ------------
-!
-USE MODD_NEB, ONLY : XTMINMIX, XTMAXMIX
-USE MODD_CST, ONLY : XTT
-USE MODE_MSG
-!
-IMPLICIT NONE
-!
-!
-!*      0.1  declarations of arguments
-!
-CHARACTER(len=1),   INTENT(IN)    :: HFRAC_ICE  ! scheme to use
-REAL, DIMENSION(:), INTENT(IN)    :: PT         ! temperature
-REAL, DIMENSION(:), INTENT(INOUT) :: PFRAC_ICE  ! Ice fraction (1 for ice only, 0 for liquid only)
-!
-!               0.2  declaration of local variables
-! 
-!
-!               0.2  initialisation
-!
-!
-!------------------------------------------------------------------------
-!                1. Compute FRAC_ICE
-!
-IF (HFRAC_ICE=='T') THEN !using Temperature
-  PFRAC_ICE(:) = ( XTMAXMIX - PT(:) ) / ( XTMAXMIX - XTMINMIX ) ! freezing interval
-ELSEIF (HFRAC_ICE=='O') THEN !using Temperature with old formulae
-  PFRAC_ICE(:) = ( XTT - PT(:) ) / 40. ! freezing interval
-ELSEIF (HFRAC_ICE=='N') THEN !No ice
-  PFRAC_ICE(:) = 0.
-ELSEIF (HFRAC_ICE=='S') THEN !Same as previous
-  !nothing to do
-ELSE
-  call Print_msg(NVERB_FATAL,'GEN','COMPUTE_FRAC_ICE','invalid option for HFRAC_ICE='//HFRAC_ICE)
-ENDIF
-
-PFRAC_ICE(:) = MAX( 0., MIN(1., PFRAC_ICE(:) ) )
-
-
-END SUBROUTINE COMPUTE_FRAC_ICE1D
diff --git a/src/mesonh/turb/shallow_mf.f90 b/src/mesonh/turb/shallow_mf.f90
index 2ae315ad50a14bfbde7b9d63aa515abfd3646b0a..6bf7075e2135cce64485145003ad5f957ef18768 100644
--- a/src/mesonh/turb/shallow_mf.f90
+++ b/src/mesonh/turb/shallow_mf.f90
@@ -188,7 +188,7 @@ USE MODI_MF_TURB
 USE MODI_MF_TURB_EXPL
 USE MODI_MF_TURB_GREYZONE
 USE MODI_COMPUTE_MF_CLOUD
-USE MODI_COMPUTE_FRAC_ICE
+USE MODE_COMPUTE_FRAC_ICE, ONLY : COMPUTE_FRAC_ICE
 USE MODI_SHUMAN_MF
 !
 USE MODI_COMPUTE_BL89_ML
@@ -322,7 +322,8 @@ IF (SIZE(PRM,3).GE.4) THEN
     ZFRAC_ICE(:,:) = PRM(:,:,4) / (PRM(:,:,2)+PRM(:,:,4))
   ENDWHERE
 ENDIF
-CALL COMPUTE_FRAC_ICE(HFRAC_ICE,ZFRAC_ICE(:,:),PTHM(:,:)*PEXNM(:,:))
+CALL COMPUTE_FRAC_ICE(SIZE(ZFRAC_ICE, 1), SIZE(ZFRAC_ICE, 2), &
+                     &HFRAC_ICE,ZFRAC_ICE(:,:),PTHM(:,:)*PEXNM(:,:))
 
 ! Conservative variables at t-dt
 CALL THL_RT_FROM_TH_R_MF(KRR,KRRL,KRRI,    &