diff --git a/src/MNH/rain_ice.f90 b/src/MNH/rain_ice.f90
index b77bbd14ba80d1ea612d20e676f8d30a5ff71e7b..d0de2f3ff69ea15ed7951c6c87675d2f9c435ae2 100644
--- a/src/MNH/rain_ice.f90
+++ b/src/MNH/rain_ice.f90
@@ -282,6 +282,10 @@ USE MODI_BITREP
 #endif
 use MODI_BUDGET
 USE MODI_ICE4_RAINFR_VERT
+#ifdef MNH_OPENACC
+USE MODE_MNH_ZWORK , ONLY : MNH_ALLOCATE_ZT3D , MNH_REL_ZT3D, MNH_ALLOCATE_ZT1DP , MNH_REL_ZT1D , &
+                            MNH_ALLOCATE_GT3D , MNH_REL_GT3D
+#endif
 
 IMPLICIT NONE
 !
@@ -362,31 +366,34 @@ INTEGER                           :: IKE,IKTE      !
 INTEGER                           :: IMICRO
 INTEGER, DIMENSION(:), ALLOCATABLE :: I1,I2,I3 ! Used to replace the COUNT
 INTEGER                           :: JL       ! and PACK intrinsics
-LOGICAL, DIMENSION(:,:,:), ALLOCATABLE &
-                                  :: GMICRO ! Test where to compute all processes
+LOGICAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS &
+                                         :: GMICRO ! Test where to compute all processes
+INTEGER :: IGMICRO
 REAL                              :: ZINVTSTEP
 REAL                              :: ZCOEFFRCM
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRVT    ! Water vapor m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRCT    ! Cloud water m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRRT    ! Rain water m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRIT    ! Pristine ice m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRST    ! Snow/aggregate m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRGT    ! Graupel m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRHT    ! Hail m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE   :: ZCIT    ! Pristine ice conc. at t
-!
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRVS    ! Water vapor m.r. source
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRCS    ! Cloud water m.r. source
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRRS    ! Rain water m.r. source
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRIS    ! Pristine ice m.r. source
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRSS    ! Snow/aggregate m.r. source
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRGS    ! Graupel m.r. source
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRHS    ! Hail m.r. source
-REAL, DIMENSION(:), ALLOCATABLE   :: ZTHS    ! Theta source
-REAL, DIMENSION(:), ALLOCATABLE   :: ZTHT    ! Potential temperature
-REAL, DIMENSION(:), ALLOCATABLE   :: ZTHLT   ! Liquid potential temperature
-!
-REAL, DIMENSION(:), ALLOCATABLE   :: ZRHODREF, &      ! RHO Dry REFerence
+REAL, DIMENSION(:), POINTER, CONTIGUOUS   :: ZRVT    ! Water vapor m.r. at t
+REAL, DIMENSION(:), POINTER, CONTIGUOUS   :: ZRCT    ! Cloud water m.r. at t
+REAL, DIMENSION(:), POINTER, CONTIGUOUS   :: ZRRT    ! Rain water m.r. at t
+REAL, DIMENSION(:), POINTER, CONTIGUOUS   :: ZRIT    ! Pristine ice m.r. at t
+REAL, DIMENSION(:), POINTER, CONTIGUOUS   :: ZRST    ! Snow/aggregate m.r. at t
+REAL, DIMENSION(:), POINTER, CONTIGUOUS   :: ZRGT    ! Graupel m.r. at t
+REAL, DIMENSION(:), POINTER, CONTIGUOUS   :: ZRHT    ! Hail m.r. at t
+REAL, DIMENSION(:), POINTER, CONTIGUOUS   :: ZCIT    ! Pristine ice conc. at t
+INTEGER :: IZRVT,IZRCT,IZRRT,IZRIT,IZRST,IZRGT,IZRHT,IZCIT
+!
+REAL, DIMENSION(:), POINTER, CONTIGUOUS   :: ZRVS    ! Water vapor m.r. source
+REAL, DIMENSION(:), POINTER, CONTIGUOUS   :: ZRCS    ! Cloud water m.r. source
+REAL, DIMENSION(:), POINTER, CONTIGUOUS   :: ZRRS    ! Rain water m.r. source
+REAL, DIMENSION(:), POINTER, CONTIGUOUS   :: ZRIS    ! Pristine ice m.r. source
+REAL, DIMENSION(:), POINTER, CONTIGUOUS   :: ZRSS    ! Snow/aggregate m.r. source
+REAL, DIMENSION(:), POINTER, CONTIGUOUS   :: ZRGS    ! Graupel m.r. source
+REAL, DIMENSION(:), POINTER, CONTIGUOUS   :: ZRHS    ! Hail m.r. source
+REAL, DIMENSION(:), POINTER, CONTIGUOUS   :: ZTHS    ! Theta source
+REAL, DIMENSION(:), POINTER, CONTIGUOUS   :: ZTHT    ! Potential temperature
+REAL, DIMENSION(:), POINTER, CONTIGUOUS   :: ZTHLT   ! Liquid potential temperature
+INTEGER :: IZRVS,IZRCS,IZRRS,IZRIS,IZRSS,IZRGS,IZRHS,IZTHS,IZTHT,IZTHLT
+!
+REAL, DIMENSION(:), POINTER, CONTIGUOUS   :: ZRHODREF, &      ! RHO Dry REFerence
                                      ZRHODJ,   &      ! RHO times Jacobian
                                      ZZT,      &      ! Temperature
                                      ZPRES,    &      ! Pressure
@@ -423,9 +430,21 @@ REAL, DIMENSION(:), ALLOCATABLE   :: ZRHODREF, &      ! RHO Dry REFerence
                                      ZHLC_LRCLOCAL    ! HLCLOUDS : LWC that is Low  LWC local in LCF
                                                       !    note that ZRC/CF = ZHLC_HRCLOCAL+ ZHLC_LRCLOCAL
                                                       !                     = ZHLC_HRC/HCF+ ZHLC_LRC/LCF
-REAL, DIMENSION(:,:),   ALLOCATABLE :: ZZW1 ! Work arrays
-REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZW ! work array
-REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZT ! Temperature
+INTEGER :: IZRHODREF,IZZT,IZPRES,IZEXNREF,IZSIGMA_RC,IZCF,IZRF
+INTEGER :: IZHLC_HCF,IZHLC_LCF,IZHLC_HRC,IZHLC_LRC,IZHLC_RCMAX
+INTEGER :: IZRCRAUTC,IZHLC_HRCLOCAL,IZHLC_LRCLOCAL
+INTEGER :: IZZW,IZLSFACT,IZLVFACT,IZUSW,IZSSI,IZLBDAR,IZLBDAR_RF
+INTEGER :: IZLBDAS,IZLBDAG,IZLBDAH,IZRDRYG,IZRWETG,IZAI,IZCJ
+INTEGER :: IZKA,IZDV,IZRHODJ
+!
+REAL, DIMENSION(:,:),   POINTER, CONTIGUOUS :: ZZW1 ! Work arrays
+REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZW ! work array
+REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZT ! Temperature
+INTEGER :: IZZW1,IZW,IZT
+
+INTEGER :: IIU,IJU,IKU
+!
+LOGICAl :: GPDF_SIGM
 !
 ! IN variables
 !
@@ -487,12 +506,23 @@ IF ( KRR == 7 ) THEN
 END IF
 #endif
 
+IIU =  size(PEXNREF, 1 )
+IJU =  size(PEXNREF, 2 )
+IKU =  size(PEXNREF, 3 )
+
 ALLOCATE( I1(SIZE(PEXNREF)), I2(SIZE(PEXNREF)), I3(SIZE(PEXNREF)) )
-ALLOCATE( GMICRO(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) )
-ALLOCATE( ZW    (SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) )
-ALLOCATE( ZT    (SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) )
 
-!$acc data create( I1, I2, I3, GMICRO, ZW, ZT )
+#ifndef MNH_OPENACC
+ALLOCATE( GMICRO(IIU,IJU,IKU) )
+ALLOCATE( ZW    (IIU,IJU,IKU) )
+ALLOCATE( ZT    (IIU,IJU,IKU) )
+#else
+IGMICRO = MNH_ALLOCATE_GT3D( GMICRO,IIU,IJU,IKU )
+IZW     = MNH_ALLOCATE_ZT3D( ZW    ,IIU,IJU,IKU )
+IZT     = MNH_ALLOCATE_ZT3D( ZT    ,IIU,IJU,IKU )
+#endif
+
+!$acc data create( I1, I2, I3 ) present (GMICRO, ZW, ZT )
 
 !-------------------------------------------------------------------------------
 !
@@ -511,6 +541,7 @@ IKTE=IKT-JPVEXT
 !
 ZINVTSTEP=1./PTSTEP
 !
+GPDF_SIGM =  ( HSUBG_AUCV == 'PDF ' .AND. CSUBG_PR_PDF == 'SIGM' )
 !
 !
 !*       2.     COMPUTES THE SLOW COLD PROCESS SOURCES
@@ -552,6 +583,7 @@ CALL COUNTJV_DEVICE(GMICRO(:,:,:),I1(:),I2(:),I3(:),IMICRO)
 #endif
 
 IF( IMICRO >= 0 ) THEN
+#ifndef MNH_OPENACC   
   ALLOCATE(ZRVT(IMICRO))
   ALLOCATE(ZRCT(IMICRO))
   ALLOCATE(ZRRT(IMICRO))
@@ -625,19 +657,98 @@ IF( IMICRO >= 0 ) THEN
   ELSE
     ALLOCATE(ZRHODJ(0))
   END IF
+#else
+IZRVT  = MNH_ALLOCATE_ZT1DP(ZRVT,IMICRO)
+IZRCT  = MNH_ALLOCATE_ZT1DP(ZRCT,IMICRO)
+IZRRT  = MNH_ALLOCATE_ZT1DP(ZRRT,IMICRO)
+IZRIT  = MNH_ALLOCATE_ZT1DP(ZRIT,IMICRO)
+IZRST  = MNH_ALLOCATE_ZT1DP(ZRST,IMICRO)
+IZRGT  = MNH_ALLOCATE_ZT1DP(ZRGT,IMICRO)
+  IF ( KRR == 7 ) THEN
+IZRHT    = MNH_ALLOCATE_ZT1DP(ZRHT,IMICRO)
+  ELSE
+IZRHT    = MNH_ALLOCATE_ZT1DP(ZRHT,0)
+  END IF
+IZCIT  = MNH_ALLOCATE_ZT1DP(ZCIT,IMICRO)
+IZRVS  = MNH_ALLOCATE_ZT1DP(ZRVS,IMICRO)
+IZRCS  = MNH_ALLOCATE_ZT1DP(ZRCS,IMICRO)
+IZRRS  = MNH_ALLOCATE_ZT1DP(ZRRS,IMICRO)
+IZRIS  = MNH_ALLOCATE_ZT1DP(ZRIS,IMICRO)
+IZRSS  = MNH_ALLOCATE_ZT1DP(ZRSS,IMICRO)
+IZRGS  = MNH_ALLOCATE_ZT1DP(ZRGS,IMICRO)
+  IF ( KRR == 7 ) THEN
+IZRHS    = MNH_ALLOCATE_ZT1DP(ZRHS,IMICRO)
+  ELSE
+IZRHS    = MNH_ALLOCATE_ZT1DP(ZRHS,0)
+  END IF
+IZTHS  = MNH_ALLOCATE_ZT1DP(ZTHS,IMICRO)
+IZTHT  = MNH_ALLOCATE_ZT1DP(ZTHT,IMICRO)
+IZTHLT  = MNH_ALLOCATE_ZT1DP(ZTHLT,IMICRO)
+IZRHODREF  = MNH_ALLOCATE_ZT1DP(ZRHODREF,IMICRO)
+IZZT  = MNH_ALLOCATE_ZT1DP(ZZT,IMICRO)
+IZPRES  = MNH_ALLOCATE_ZT1DP(ZPRES,IMICRO)
+IZEXNREF  = MNH_ALLOCATE_ZT1DP(ZEXNREF,IMICRO)
+IZSIGMA_RC  = MNH_ALLOCATE_ZT1DP(ZSIGMA_RC,IMICRO)
+IZCF  = MNH_ALLOCATE_ZT1DP(ZCF,IMICRO)
+IZRF  = MNH_ALLOCATE_ZT1DP(ZRF,IMICRO)
+IZHLC_HCF  = MNH_ALLOCATE_ZT1DP(ZHLC_HCF,IMICRO)
+IZHLC_LCF  = MNH_ALLOCATE_ZT1DP(ZHLC_LCF,IMICRO)
+IZHLC_HRC  = MNH_ALLOCATE_ZT1DP(ZHLC_HRC,IMICRO)
+IZHLC_LRC  = MNH_ALLOCATE_ZT1DP(ZHLC_LRC,IMICRO)
+IZHLC_RCMAX  = MNH_ALLOCATE_ZT1DP(ZHLC_RCMAX,IMICRO)
+IZRCRAUTC  = MNH_ALLOCATE_ZT1DP(ZRCRAUTC,IMICRO)
+IZHLC_HRCLOCAL  = MNH_ALLOCATE_ZT1DP(ZHLC_HRCLOCAL,IMICRO)
+IZHLC_LRCLOCAL  = MNH_ALLOCATE_ZT1DP(ZHLC_LRCLOCAL,IMICRO)
+!
+IZZW  = MNH_ALLOCATE_ZT1DP(ZZW,IMICRO)
+IZLSFACT  = MNH_ALLOCATE_ZT1DP(ZLSFACT,IMICRO)
+IZLVFACT  = MNH_ALLOCATE_ZT1DP(ZLVFACT,IMICRO)
+IZUSW  = MNH_ALLOCATE_ZT1DP(ZUSW,IMICRO)
+IZSSI  = MNH_ALLOCATE_ZT1DP(ZSSI,IMICRO)
+IZLBDAR  = MNH_ALLOCATE_ZT1DP(ZLBDAR,IMICRO)
+IZLBDAR_RF  = MNH_ALLOCATE_ZT1DP(ZLBDAR_RF,IMICRO)
+IZLBDAS  = MNH_ALLOCATE_ZT1DP(ZLBDAS,IMICRO)
+IZLBDAG  = MNH_ALLOCATE_ZT1DP(ZLBDAG,IMICRO)
+  IF ( KRR == 7 ) THEN
+IZLBDAH    = MNH_ALLOCATE_ZT1DP(ZLBDAH,IMICRO)
+  ELSE
+IZLBDAH    = MNH_ALLOCATE_ZT1DP(ZLBDAH,0)
+  END IF
+IZRDRYG  = MNH_ALLOCATE_ZT1DP(ZRDRYG,IMICRO)
+IZRWETG  = MNH_ALLOCATE_ZT1DP(ZRWETG,IMICRO)
+IZAI  = MNH_ALLOCATE_ZT1DP(ZAI,IMICRO)
+IZCJ  = MNH_ALLOCATE_ZT1DP(ZCJ,IMICRO)
+IZKA  = MNH_ALLOCATE_ZT1DP(ZKA,IMICRO)
+IZDV  = MNH_ALLOCATE_ZT1DP(ZDV,IMICRO)
+  IF ( KRR == 7 ) THEN
+     !IZZW1    = MNH_ALLOCATE_ZT1DP(ZZW1(IMICRO,7))
+     ALLOCATE(ZZW1(IMICRO,7))
+  ELSE IF( KRR == 6 ) THEN
+     !IZZW1    = MNH_ALLOCATE_ZT1DP(ZZW1(IMICRO,6))
+     ALLOCATE(ZZW1(IMICRO,6))
+  ENDIF
+!
+  IF (LBU_ENABLE .OR. LLES_CALL .OR. LCHECK ) THEN
+IZRHODJ    = MNH_ALLOCATE_ZT1DP(ZRHODJ,IMICRO)
+  ELSE
+IZRHODJ    = MNH_ALLOCATE_ZT1DP(ZRHODJ,0)
+  END IF
+#endif
+ 
 
-!$acc data create(    ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, ZRHT,                                 &
+!$acc data present(   ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, ZRHT,                                 &
 !$acc &               ZCIT, ZRVS,  ZRCS, ZRRS, ZRIS, ZRSS, ZRGS, ZRHS, ZTHS, ZTHT, ZTHLT,       &
 !$acc &               ZRHODREF, ZZT, ZPRES, ZEXNREF, ZSIGMA_RC, ZCF, ZRF,                                  &
 !$acc &               ZHLC_HCF, ZHLC_LCF, ZHLC_HRC, ZHLC_LRC, ZHLC_RCMAX, ZRCRAUTC,             &
 !$acc &               ZHLC_HRCLOCAL, ZHLC_LRCLOCAL, ZZW, ZLSFACT, ZLVFACT, ZUSW, ZSSI, &
 !$acc &               ZLBDAR, ZLBDAR_RF, ZLBDAS, ZLBDAG, ZLBDAH, ZRDRYG, ZRWETG,                &
-!$acc &               ZAI, ZCJ, ZKA, ZDV, ZZW1, ZRHODJ                                        )
+!$acc &               ZAI, ZCJ, ZKA, ZDV,  ZRHODJ                                        ) &
+!$acc &   create (  ZZW1 ) 
 
 !
 !$acc kernels
-!$acc loop independent
-  DO JL=1,IMICRO
+!acc loop independent
+  DO CONCURRENT ( JL=1:IMICRO )
     ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL))
     ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL))
     ZRRT(JL) = PRRT(I1(JL),I2(JL),I3(JL))
@@ -672,7 +783,7 @@ IF( IMICRO >= 0 ) THEN
     ENDDO
   ENDIF
 !
-  IF ( HSUBG_AUCV == 'PDF ' .AND. CSUBG_PR_PDF == 'SIGM' ) THEN
+  IF ( GPDF_SIGM ) THEN
 !$acc loop independent
     DO JL=1,IMICRO
       ZSIGMA_RC(JL) = PSIGS(I1(JL),I2(JL),I3(JL)) * 2.
@@ -688,7 +799,9 @@ IF( IMICRO >= 0 ) THEN
 #ifndef MNH_BITREP
   ZZW(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) )
 #else
-  ZZW(:) = BR_EXP( XALPI - XBETAI/ZZT(:) - XGAMI*BR_LOG(ZZT(:) ) )
+  DO CONCURRENT ( JL=1:IMICRO )
+     ZZW(JL) = BR_EXP( XALPI - XBETAI/ZZT(JL) - XGAMI*BR_LOG(ZZT(JL) ) )
+  END DO
 #endif
   ZSSI(:) = ZRVT(:)*( ZPRES(:)-ZZW(:) ) / ( (XMV/XMD) * ZZW(:) ) - 1.0
                                                     ! Supersaturation over ice
@@ -713,7 +826,7 @@ IF( IMICRO >= 0 ) THEN
 !$acc kernels
     !Cloud water is entirely in low or high part
 !$acc loop independent private(JL)
-    DO JL=1,IMICRO
+    DO CONCURRENT ( JL=1:IMICRO )
       IF (ZRCT(JL) > ZRCRAUTC(JL)) THEN
         ZHLC_HCF(JL) = 1.
         ZHLC_LCF(JL) = 0.0
@@ -1053,11 +1166,9 @@ END DO ! CONCURRENT
 !$acc end kernels
 
 !$acc end data
-
-
-!
 !
 !
+#ifndef MNH_OPENACC   
   DEALLOCATE(ZZW1)
   DEALLOCATE(ZDV)
   DEALLOCATE(ZCJ)
@@ -1109,6 +1220,18 @@ END DO ! CONCURRENT
   DEALLOCATE(ZRCRAUTC)
   DEALLOCATE(ZHLC_HRCLOCAL)
   DEALLOCATE(ZHLC_LRCLOCAL)
+#else
+  DEALLOCATE(ZZW1)
+  CALL MNH_REL_ZT1D(IZKA,IZDV,IZRHODJ)
+  CALL MNH_REL_ZT1D(IZLBDAS,IZLBDAG,IZLBDAH,IZRDRYG,IZRWETG,IZAI,IZCJ)
+  CALL MNH_REL_ZT1D(IZZW,IZLSFACT,IZLVFACT,IZUSW,IZSSI,IZLBDAR,IZLBDAR_RF)
+  CALL MNH_REL_ZT1D(IZRCRAUTC,IZHLC_HRCLOCAL,IZHLC_LRCLOCAL)
+  CALL MNH_REL_ZT1D(IZHLC_HCF,IZHLC_LCF,IZHLC_HRC,IZHLC_LRC,IZHLC_RCMAX)
+  CALL MNH_REL_ZT1D(IZRHODREF,IZZT,IZPRES,IZEXNREF,IZSIGMA_RC,IZCF,IZRF)
+  CALL MNH_REL_ZT1D(IZRVS,IZRCS,IZRRS,IZRIS,IZRSS,IZRGS,IZRHS,IZTHS,IZTHT,IZTHLT)
+  CALL MNH_REL_ZT1D(IZRVT,IZRCT,IZRRT,IZRIT,IZRST,IZRGT,IZRHT,IZCIT)
+#endif
+  
 !
   ELSE
 !
@@ -1254,10 +1377,18 @@ IF (MPPDB_INITIALIZED) THEN
   IF (PRESENT(PFPR))   CALL MPPDB_CHECK(PFPR,"RAIN_ICE end:PFPR")
 END IF
 !
-! !$acc end data
 
 !$acc end data
 
+DEALLOCATE (I1,I2,I3)
+
+#ifndef MNH_OPENACC
+DEALLOCATE ( GMICRO,ZW,ZT )
+#else
+CALL MNH_REL_GT3D ( IGMICRO )
+CALL MNH_REL_ZT3D ( IZW,IZT )
+#endif
+
 !$acc end data
 
 !-------------------------------------------------------------------------------