diff --git a/src/ZSOLVER/advecuvw_rk.f90 b/src/ZSOLVER/advecuvw_rk.f90
index 6bdfae2fe4342040acd6d061ac9fa988b5f72be6..8f26e4bf548757446dacf981a2d6d0df79b7f2a0 100644
--- a/src/ZSOLVER/advecuvw_rk.f90
+++ b/src/ZSOLVER/advecuvw_rk.f90
@@ -205,8 +205,10 @@ REAL, DIMENSION(:),   ALLOCATABLE :: ZBUTS! Butcher array coefficients
 !JUAN
 TYPE(LIST_ll), POINTER      :: TZFIELDMT_ll ! list of fields to exchange
 TYPE(HALO2LIST_ll), POINTER :: TZHALO2MT_ll ! momentum variables
+#ifdef MNH_OPENACC
 TYPE(HALO2LIST_ll), SAVE , POINTER :: TZHALO2_UT,TZHALO2_VT,TZHALO2_WT
 LOGICAL , SAVE :: GFIRST_CALL_ADVECUVW_RK = .TRUE.
+#endif
 INTEGER                     :: INBVAR
 INTEGER :: IIU, IJU, IKU ! array sizes
 !JUAN
@@ -455,11 +457,6 @@ ZRWS(:, :, :, : ) = 0.
         CALL UPDATE_HALO_ll(TZFIELDMT_ll,IINFO_ll)
         CALL UPDATE_HALO2_ll(TZFIELDMT_ll, TZHALO2MT_ll, IINFO_ll)
 #else
-! acc update self(ZUT,ZVT,ZWT)
-!!$        CALL GET_HALO_D(ZUT,HNAME='ZUT')
-!!$        CALL GET_HALO_D(ZVT,HNAME='ZVT')
-!!$        CALL GET_HALO_D(ZWT,HNAME='ZWT')
-!!$        CALL UPDATE_HALO2_ll(TZFIELDMT_ll, TZHALO2MT_ll, IINFO_ll)
 IF (GFIRST_CALL_ADVECUVW_RK) THEN
    GFIRST_CALL_ADVECUVW_RK = .FALSE.
    NULLIFY(TZHALO2_UT,TZHALO2_VT,TZHALO2_WT)
@@ -470,7 +467,6 @@ END IF
         CALL GET_HALO2_DF(ZUT,TZHALO2_UT,HNAME='ZUT')
         CALL GET_HALO2_DF(ZVT,TZHALO2_VT,HNAME='ZVT')
         CALL GET_HALO2_DF(ZWT,TZHALO2_WT,HNAME='ZWT')               
-! acc update device(ZUT,ZVT,ZWT)       
 #endif
         
 
@@ -487,11 +483,11 @@ END IF
     CALL ADVECUVW_WENO_K (HLBCX, HLBCY, KWENO_ORDER, ZUT, ZVT, ZWT,     &
                         PRUCT, PRVCT, PRWCT,                            &
                         ZRUS(:,:,:,JS), ZRVS(:,:,:,JS), ZRWS(:,:,:,JS), &
-                        TZHALO2_UT,TZHALO2_VT,TZHALO2_WT &
 #ifndef MNH_OPENACC
-                        )
+                        TZHALO2MT_ll                                    )
 #else
-                        , ZT3D(:,:,:,IZMEAN), ZT3D(:,:,:,IZWORK) )
+                        TZHALO2_UT,TZHALO2_VT,TZHALO2_WT &
+                        , ZT3D(:,:,:,IZMEAN), ZT3D(:,:,:,IZWORK)        )
 #endif
   ELSE IF ((HUVW_ADV_SCHEME=='CEN4TH') .AND. (HTEMP_SCHEME=='RKC4')) THEN
     CALL ADVECUVW_4TH (HLBCX, HLBCY, PRUCT, PRVCT, PRWCT,               &
@@ -561,9 +557,6 @@ CALL MNH_REL_ZT3D(IZMEAN,IZWORK)
 !
 CALL CLEANLIST_ll(TZFIELDMT_ll)
 CALL DEL_HALO2_ll(TZHALO2MT_ll)
-!!$CALL DEL_HALO2_ll(TZHALO2_UT)
-!!$CALL DEL_HALO2_ll(TZHALO2_VT)
-!!$CALL DEL_HALO2_ll(TZHALO2_WT)
 !$acc update self(PRUS_ADV,PRVS_ADV,PRWS_ADV)
 !-------------------------------------------------------------------------------
 !
diff --git a/src/ZSOLVER/advecuvw_weno_k.f90 b/src/ZSOLVER/advecuvw_weno_k.f90
index f41009ae4ef63792834dff1b2f025e0808f1a2e2..2cc4fb32e4dc0fdd54ff18894ad5ec2294b6095b 100644
--- a/src/ZSOLVER/advecuvw_weno_k.f90
+++ b/src/ZSOLVER/advecuvw_weno_k.f90
@@ -11,10 +11,10 @@ INTERFACE
 !
       SUBROUTINE ADVECUVW_WENO_K(HLBCX, HLBCY, KWENO_ORDER, PUT, PVT, PWT,       &
                              PRUCT, PRVCT, PRWCT, PRUS, PRVS, PRWS, & 
-                             TPHALO2_UT,TPHALO2_VT,TPHALO2_WT &
 #ifndef MNH_OPENACC
-                             )
+                             TPHALO2LIST )
 #else
+                             TPHALO2_UT,TPHALO2_VT,TPHALO2_WT &
                              , ZMEAN, ZWORK)
 #endif
 !
@@ -33,7 +33,11 @@ REAL, DIMENSION(:,:,:),   INTENT(IN) :: PUT, PVT, PWT        ! U,V,W at t
 !
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRUS, PRVS, PRWS     ! Source terms
 !
+#ifndef MNH_OPENACC
+TYPE(HALO2LIST_ll), POINTER :: TPHALO2LIST ! list for diffusion
+#else
 TYPE(HALO2LIST_ll), POINTER :: TPHALO2_UT,TPHALO2_VT,TPHALO2_WT
+#endif
 !
 #ifdef MNH_OPENACC
 ! Work arrays
@@ -49,10 +53,10 @@ END MODULE MODI_ADVECUVW_WENO_K
 !     ##########################################################################
       SUBROUTINE ADVECUVW_WENO_K(HLBCX, HLBCY, KWENO_ORDER, PUT, PVT, PWT,      &
                              PRUCT, PRVCT, PRWCT, PRUS, PRVS, PRWS, & 
-                             TPHALO2_UT,TPHALO2_VT,TPHALO2_WT &
 #ifndef MNH_OPENACC
-                             )
+                             TPHALO2LIST )
 #else
+                             TPHALO2_UT,TPHALO2_VT,TPHALO2_WT &
                              , ZMEAN, ZWORK)
 #endif
 !     ##########################################################################
@@ -114,11 +118,15 @@ REAL, DIMENSION(:,:,:),   INTENT(IN) :: PUT, PVT, PWT     ! Variables at t
 !
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRUS, PRVS, PRWS     ! Source terms
 !
+#ifndef MNH_OPENACC
+TYPE(HALO2LIST_ll), POINTER :: TPHALO2LIST ! list for diffusion
+#else
+TYPE(HALO2LIST_ll), POINTER :: TPHALO2_UT,TPHALO2_VT,TPHALO2_WT
+#endif
 !
 !*       0.2   Declarations of local variables :
 !
-TYPE(HALO2LIST_ll), POINTER :: TPHALO2_UT,TPHALO2_VT,TPHALO2_WT
-
+TYPE(HALO2LIST_ll), POINTER :: TZHALO2_UT,TZHALO2_VT,TZHALO2_WT
 INTEGER                     :: IINFO_ll    ! return code of parallel routine
 !
 #ifndef MNH_OPENACC
@@ -166,9 +174,15 @@ CALL INIT_ON_HOST_AND_DEVICE(ZWORK,2e90,'ADVECUVW_WENO_K::ZWORK')
 !------------------------- ADVECTION OF MOMENTUM ------------------------------
 !
 !
-!!$TPHALO2_UT => TPHALO2LIST                   ! 1rst add3dfield in model_n
-!!$TPHALO2_VT => TPHALO2LIST%NEXT              ! 2nd  add3dfield in model_n
-!!$TPHALO2_WT => TPHALO2LIST%NEXT%NEXT         ! 3rst add3dfield in model_n
+#ifndef MNH_OPENACC
+TZHALO2_UT => TPHALO2LIST                   ! 1rst add3dfield in model_n
+TZHALO2_VT => TPHALO2LIST%NEXT              ! 2nd  add3dfield in model_n
+TZHALO2_WT => TPHALO2LIST%NEXT%NEXT         ! 3rst add3dfield in model_n
+#else
+TZHALO2_UT => TPHALO2_UT
+TZHALO2_VT => TPHALO2_VT
+TZHALO2_WT => TPHALO2_WT
+#endif
 !
 IKU=SIZE(PUT,3)
 !      -------------------------------------------------------
@@ -289,13 +303,13 @@ CASE(3) ! WENO 3
 ! U component
 !
   ZWORK = MXF(PRUCT)
-  CALL ADVEC_WENO_K_2_UX(HLBCX, PUT, ZWORK, ZMEAN, TPHALO2_UT%HALO2)
+  CALL ADVEC_WENO_K_2_UX(HLBCX, PUT, ZWORK, ZMEAN, TZHALO2_UT%HALO2)
   PRUS = PRUS - DXM(ZMEAN)
   
 !   
   IF (.NOT.L2D) THEN
     ZWORK = MXM(PRVCT)
-    CALL ADVEC_WENO_K_2_MY(HLBCY, PUT, ZWORK, ZMEAN, TPHALO2_UT%HALO2)
+    CALL ADVEC_WENO_K_2_MY(HLBCY, PUT, ZWORK, ZMEAN, TZHALO2_UT%HALO2)
     PRUS = PRUS - DYF(ZMEAN)
   END IF
 !
@@ -305,11 +319,11 @@ CASE(3) ! WENO 3
 !
   IF (.NOT.L2D) THEN
     ZWORK = MYM(PRUCT)
-    CALL ADVEC_WENO_K_2_MX(HLBCX, PVT, ZWORK, ZMEAN, TPHALO2_VT%HALO2)
+    CALL ADVEC_WENO_K_2_MX(HLBCX, PVT, ZWORK, ZMEAN, TZHALO2_VT%HALO2)
     PRVS = PRVS - DXF(ZMEAN)
 !   
     ZWORK = MYF(PRVCT)
-    CALL ADVEC_WENO_K_2_VY(HLBCY, PVT, ZWORK, ZMEAN, TPHALO2_VT%HALO2)
+    CALL ADVEC_WENO_K_2_VY(HLBCY, PVT, ZWORK, ZMEAN, TZHALO2_VT%HALO2)
     PRVS = PRVS - DYM(ZMEAN)
 !
     PRVS = PRVS - DZF(WENO_K_2_MZ(PVT, MYM(PRWCT)))
@@ -318,12 +332,12 @@ CASE(3) ! WENO 3
 ! W component
 !
   ZWORK = MZM(PRUCT)
-  CALL ADVEC_WENO_K_2_MX(HLBCX, PWT, ZWORK, ZMEAN, TPHALO2_WT%HALO2)
+  CALL ADVEC_WENO_K_2_MX(HLBCX, PWT, ZWORK, ZMEAN, TZHALO2_WT%HALO2)
   PRWS = PRWS - DXF(ZMEAN)
 !
   IF (.NOT.L2D) THEN
     ZWORK = MZM(PRVCT)
-    CALL ADVEC_WENO_K_2_MY(HLBCY, PWT, ZWORK, ZMEAN, TPHALO2_WT%HALO2)
+    CALL ADVEC_WENO_K_2_MY(HLBCY, PWT, ZWORK, ZMEAN, TZHALO2_WT%HALO2)
     PRWS = PRWS - DYF(ZMEAN)
   END IF
 !
@@ -334,7 +348,7 @@ CASE(3) ! WENO 3
 ! U component
 !
   CALL MXF_DEVICE(PRUCT,ZWORK)
-  CALL ADVEC_WENO_K_2_UX(HLBCX, PUT, ZWORK, ZMEAN, TPHALO2_UT%HALO2%WEST, TPHALO2_UT%HALO2%EAST,             &
+  CALL ADVEC_WENO_K_2_UX(HLBCX, PUT, ZWORK, ZMEAN, TZHALO2_UT%HALO2%WEST, TZHALO2_UT%HALO2%EAST,             &
                          ZT3D(:,:,:,IZFPOS1), ZT3D(:,:,:,IZFPOS2), ZT3D(:,:,:,IZFNEG1), ZT3D(:,:,:,IZFNEG2), &
                          ZT3D(:,:,:,IZBPOS1), ZT3D(:,:,:,IZBPOS2), ZT3D(:,:,:,IZBNEG1), ZT3D(:,:,:,IZBNEG2), &
                          ZT3D(:,:,:,IZOMP1),  ZT3D(:,:,:,IZOMP2),  ZT3D(:,:,:,IZOMN1),  ZT3D(:,:,:,IZOMN2) )
@@ -345,7 +359,7 @@ CASE(3) ! WENO 3
 !   
   IF (.NOT.L2D) THEN
     CALL MXM_DEVICE(PRVCT,ZWORK)
-    CALL ADVEC_WENO_K_2_MY(HLBCY, PUT, ZWORK, ZMEAN, TPHALO2_UT%HALO2%NORTH, TPHALO2_UT%HALO2%SOUTH,           &
+    CALL ADVEC_WENO_K_2_MY(HLBCY, PUT, ZWORK, ZMEAN, TZHALO2_UT%HALO2%NORTH, TZHALO2_UT%HALO2%SOUTH,           &
                            ZT3D(:,:,:,IZFPOS1), ZT3D(:,:,:,IZFPOS2), ZT3D(:,:,:,IZFNEG1), ZT3D(:,:,:,IZFNEG2), &
                            ZT3D(:,:,:,IZBPOS1), ZT3D(:,:,:,IZBPOS2), ZT3D(:,:,:,IZBNEG1), ZT3D(:,:,:,IZBNEG2), &
                            ZT3D(:,:,:,IZOMP1),  ZT3D(:,:,:,IZOMP2),  ZT3D(:,:,:,IZOMN1),  ZT3D(:,:,:,IZOMN2) )
@@ -370,7 +384,7 @@ CASE(3) ! WENO 3
 !
   IF (.NOT.L2D) THEN
     CALL MYM_DEVICE(PRUCT,ZWORK)
-    CALL ADVEC_WENO_K_2_MX(HLBCX, PVT, ZWORK, ZMEAN, TPHALO2_VT%HALO2%WEST, TPHALO2_VT%HALO2%EAST,             &
+    CALL ADVEC_WENO_K_2_MX(HLBCX, PVT, ZWORK, ZMEAN, TZHALO2_VT%HALO2%WEST, TZHALO2_VT%HALO2%EAST,             &
                            ZT3D(:,:,:,IZFPOS1), ZT3D(:,:,:,IZFPOS2), ZT3D(:,:,:,IZFNEG1), ZT3D(:,:,:,IZFNEG2), &
                            ZT3D(:,:,:,IZBPOS1), ZT3D(:,:,:,IZBPOS2), ZT3D(:,:,:,IZBNEG1), ZT3D(:,:,:,IZBNEG2), &
                            ZT3D(:,:,:,IZOMP1),  ZT3D(:,:,:,IZOMP2),  ZT3D(:,:,:,IZOMN1),  ZT3D(:,:,:,IZOMN2) )
@@ -380,7 +394,7 @@ CASE(3) ! WENO 3
 !$acc end kernels
 !   
     CALL MYF_DEVICE(PRVCT,ZWORK)
-    CALL ADVEC_WENO_K_2_VY(HLBCY, PVT, ZWORK, ZMEAN, TPHALO2_VT%HALO2%NORTH, TPHALO2_VT%HALO2%SOUTH,           &
+    CALL ADVEC_WENO_K_2_VY(HLBCY, PVT, ZWORK, ZMEAN, TZHALO2_VT%HALO2%NORTH, TZHALO2_VT%HALO2%SOUTH,           &
                            ZT3D(:,:,:,IZFPOS1), ZT3D(:,:,:,IZFPOS2), ZT3D(:,:,:,IZFNEG1), ZT3D(:,:,:,IZFNEG2), &
                            ZT3D(:,:,:,IZBPOS1), ZT3D(:,:,:,IZBPOS2), ZT3D(:,:,:,IZBNEG1), ZT3D(:,:,:,IZBNEG2), &
                            ZT3D(:,:,:,IZOMP1),  ZT3D(:,:,:,IZOMP2),  ZT3D(:,:,:,IZOMN1),  ZT3D(:,:,:,IZOMN2) )
@@ -405,7 +419,7 @@ CASE(3) ! WENO 3
 !
 !  ZWORK = MZM(1,IKU,1,PRUCT)
   CALL MZM_DEVICE(PRUCT,ZWORK)
-  CALL ADVEC_WENO_K_2_MX(HLBCX, PWT, ZWORK, ZMEAN, TPHALO2_WT%HALO2%WEST, TPHALO2_WT%HALO2%EAST,             &
+  CALL ADVEC_WENO_K_2_MX(HLBCX, PWT, ZWORK, ZMEAN, TZHALO2_WT%HALO2%WEST, TZHALO2_WT%HALO2%EAST,             &
                          ZT3D(:,:,:,IZFPOS1), ZT3D(:,:,:,IZFPOS2), ZT3D(:,:,:,IZFNEG1), ZT3D(:,:,:,IZFNEG2), &
                          ZT3D(:,:,:,IZBPOS1), ZT3D(:,:,:,IZBPOS2), ZT3D(:,:,:,IZBNEG1), ZT3D(:,:,:,IZBNEG2), &
                          ZT3D(:,:,:,IZOMP1),  ZT3D(:,:,:,IZOMP2),  ZT3D(:,:,:,IZOMN1),  ZT3D(:,:,:,IZOMN2) )
@@ -417,7 +431,7 @@ CASE(3) ! WENO 3
   IF (.NOT.L2D) THEN
 !    ZWORK = MZM(1,IKU,1,PRVCT)
     CALL MZM_DEVICE(PRVCT,ZWORK)
-    CALL ADVEC_WENO_K_2_MY(HLBCY, PWT, ZWORK, ZMEAN, TPHALO2_WT%HALO2%NORTH, TPHALO2_WT%HALO2%SOUTH,           &
+    CALL ADVEC_WENO_K_2_MY(HLBCY, PWT, ZWORK, ZMEAN, TZHALO2_WT%HALO2%NORTH, TZHALO2_WT%HALO2%SOUTH,           &
                            ZT3D(:,:,:,IZFPOS1), ZT3D(:,:,:,IZFPOS2), ZT3D(:,:,:,IZFNEG1), ZT3D(:,:,:,IZFNEG2), &
                            ZT3D(:,:,:,IZBPOS1), ZT3D(:,:,:,IZBPOS2), ZT3D(:,:,:,IZBNEG1), ZT3D(:,:,:,IZBNEG2), &
                            ZT3D(:,:,:,IZOMP1),  ZT3D(:,:,:,IZOMP2),  ZT3D(:,:,:,IZOMN1),  ZT3D(:,:,:,IZOMN2) )
diff --git a/src/ZSOLVER/ppm.f90 b/src/ZSOLVER/ppm.f90
index 6c80487d465aecf2a6ddbc78f07daae49da0017f..2b6a2937cef87f6131a4b7f2500fe05331dc71e5 100644
--- a/src/ZSOLVER/ppm.f90
+++ b/src/ZSOLVER/ppm.f90
@@ -2758,11 +2758,14 @@ INTEGER                          :: I,J,K
 REAL, DIMENSION(:,:)             :: ZPSRC_HALO2_WEST
 #endif
 
+#ifndef MNH_OPENACC
+TYPE(HALO2LIST_ll), POINTER      :: TZ_PSRC_HALO2_ll         ! halo2 for PSRC
+#else
 TYPE(HALO2LIST_ll), SAVE , POINTER      :: TZ_PSRC_HALO2_ll         ! halo2 for PSRC
 LOGICAL, SAVE :: GFIRST_CALL_PPM_S0_X = .TRUE.
 !
 REAL , POINTER , CONTIGUOUS , DIMENSION(:,:) :: ZWEST
-
+#endif
 !-------------------------------------------------------------------------------
 
 !$acc data present( PSRC, PCR, PRHO, PR , &
@@ -2794,9 +2797,10 @@ GEAST = LEAST_ll()
 !
 !*              initialise & update halo & halo2 for PSRC
 !
-!!$CALL GET_HALO2(PSRC, TZ_PSRC_HALO2_ll, HNAME='PSRC')
-!!$ZPSRC_HALO2_WEST(:,:) = TZ_PSRC_HALO2_ll%HALO2%WEST(:,:)
-!!$!$acc update device (ZPSRC_HALO2_WEST)
+#ifndef MNH_OPENACC
+CALL GET_HALO2(PSRC, TZ_PSRC_HALO2_ll, HNAME='PSRC')
+ZPSRC_HALO2_WEST(:,:) = TZ_PSRC_HALO2_ll%HALO2%WEST(:,:)
+#else
 IF (GFIRST_CALL_PPM_S0_X) THEN
    GFIRST_CALL_PPM_S0_X = .FALSE.
    NULLIFY(TZ_PSRC_HALO2_ll)
@@ -2806,6 +2810,9 @@ CALL GET_HALO2_DF(PSRC, TZ_PSRC_HALO2_ll, HNAME='PSRC')
 ZWEST => TZ_PSRC_HALO2_ll%HALO2%WEST
 !$acc kernels
 ZPSRC_HALO2_WEST(:,:) = ZWEST(:,:)
+!$acc end kernels
+#endif
+!$acc kernels
 ZPHAT=PSRC
 ZFPOS=PSRC
 ZFNEG=PSRC
@@ -3044,7 +3051,9 @@ CALL GET_HALO(PR, HNAME='PR')
 CALL GET_HALO_D(PR, HDIR="S0_X", HNAME='PR')
 #endif
 !-------------------------------------------------------------------------------
-!!$CALL  DEL_HALO2_ll(TZ_PSRC_HALO2_ll)
+#ifndef MNH_OPENACC
+CALL  DEL_HALO2_ll(TZ_PSRC_HALO2_ll)
+#endif
 
 IF (MPPDB_INITIALIZED) THEN
   !Check all INOUT arrays
@@ -3203,9 +3212,15 @@ REAL, DIMENSION(:,:,:) :: ZFPOS, ZFNEG
 ! variable at cell edges
 REAL, DIMENSION(:,:,:) :: ZPHAT
 !
+#ifndef MNH_OPENACC
+TYPE(HALO2LIST_ll), POINTER      :: TZ_PSRC_HALO2_ll         ! halo2 for PSRC
+#else
 TYPE(HALO2LIST_ll), SAVE ,POINTER      :: TZ_PSRC_HALO2_ll         ! halo2 for PSRC
 LOGICAL, SAVE :: GFIRST_CALL_PPM_S0_Y = .TRUE.
 
+REAL , POINTER , CONTIGUOUS , DIMENSION(:,:) :: ZSOUTH
+#endif
+
 TYPE(HALO2LIST_ll), POINTER      :: TZ_PHAT_HALO2_ll         ! halo2 for ZPHAT
 !
 REAL, DIMENSION(:,:,:) :: ZRHO_MYM , ZCR_MYM , ZCR_DYF
@@ -3215,8 +3230,6 @@ INTEGER                          :: I,J,K
 REAL, DIMENSION(:,:)             :: ZPSRC_HALO2_SOUTH
 #endif
 !
-REAL , POINTER , CONTIGUOUS , DIMENSION(:,:) :: ZSOUTH
-!
 !-------------------------------------------------------------------------------
 
 !$acc data present( PSRC, PCR, PRHO, PR , &
@@ -3255,10 +3268,11 @@ IF ( L2D ) THEN
   CALL MPPDB_CHECK(PR,"PPM_S0_Y end:PR")
 !   RETURN
 ELSE !not L2D
-   !   
-!!$CALL GET_HALO2(PSRC, TZ_PSRC_HALO2_ll, HNAME='PSRC')
-!!$ZPSRC_HALO2_SOUTH(:,:) = TZ_PSRC_HALO2_ll%HALO2%SOUTH(:,:)
-!!$!$acc update device (ZPSRC_HALO2_SOUTH)
+   !
+#ifndef MNH_OPENACC   
+CALL GET_HALO2(PSRC, TZ_PSRC_HALO2_ll, HNAME='PSRC')
+ZPSRC_HALO2_SOUTH(:,:) = TZ_PSRC_HALO2_ll%HALO2%SOUTH(:,:)
+#else
 IF (GFIRST_CALL_PPM_S0_Y) THEN
    GFIRST_CALL_PPM_S0_Y = .FALSE.
    NULLIFY(TZ_PSRC_HALO2_ll)
@@ -3266,11 +3280,14 @@ IF (GFIRST_CALL_PPM_S0_Y) THEN
 END IF   
 CALL GET_HALO2_DF(PSRC, TZ_PSRC_HALO2_ll, HNAME='PSRC')
 ZSOUTH => TZ_PSRC_HALO2_ll%HALO2%SOUTH(:,:)
+!$acc kernels
+ZPSRC_HALO2_SOUTH(:,:) = ZSOUTH(:,:)
+!$acc end kernels
+#endif
 !
 ! Initialize with relalistic value all work array 
 !
 !$acc kernels
-ZPSRC_HALO2_SOUTH(:,:) = ZSOUTH(:,:) 
 ZPHAT=PSRC
 ZFPOS=PSRC
 ZFNEG=PSRC
@@ -3501,7 +3518,9 @@ CALL GET_HALO(PR, HNAME='PR')
 CALL GET_HALO_D(PR, HDIR="S0_Y", HNAME='PR')
 #endif
 !
-!!$CALL  DEL_HALO2_ll(TZ_PSRC_HALO2_ll)
+#ifndef MNH_OPENACC
+CALL  DEL_HALO2_ll(TZ_PSRC_HALO2_ll)
+#endif
 !
 IF (MPPDB_INITIALIZED) THEN
   !Check all INOUT arrays
diff --git a/src/ZSOLVER/qlap.f90 b/src/ZSOLVER/qlap.f90
index 5f76e50d9b5f77db9717497307716ce2d7e2fef0..417514389d28bc9ddc7ad47cc366b42cb720de82 100644
--- a/src/ZSOLVER/qlap.f90
+++ b/src/ZSOLVER/qlap.f90
@@ -20,8 +20,8 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY    ! y-direction LBC type
                                                  ! Metric coefficients:
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PDXX      ! d*xx 
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PDYY      ! d*yy 
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PDZX      ! d*zx 
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PDZY      ! d*zy 
+REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PDZX      ! d*zx 
+REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PDZY      ! d*zy 
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PDZZ      ! d*zz
 !
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHODJ    ! density of reference * J
@@ -47,8 +47,8 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY    ! y-direction LBC type
                                                  ! Metric coefficients:
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PDXX      ! d*xx 
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PDYY      ! d*yy 
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PDZX      ! d*zx 
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PDZY      ! d*zy 
+REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PDZX      ! d*zx 
+REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PDZY      ! d*zy 
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PDZZ      ! d*zz
 !
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHODJ    ! density of reference * J
@@ -152,6 +152,9 @@ USE MODI_GRADIENT_M
 USE MODI_SHUMAN
 !
 USE MODE_MPPDB
+#ifdef MNH_OPENACC
+USE MODE_MNH_ZWORK , ONLY : MNH_ALLOCATE_ZT3D , MNH_REL_ZT3D
+#endif
 !
 IMPLICIT NONE
 !
@@ -164,8 +167,8 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY    ! y-direction LBC type
                                                  ! Metric coefficients:
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PDXX      ! d*xx 
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PDYY      ! d*yy 
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PDZX      ! d*zx 
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PDZY      ! d*zy 
+REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PDZX      ! d*zx 
+REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PDZY      ! d*zy 
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PDZZ      ! d*zz
 !
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHODJ    ! density of reference * J
@@ -177,11 +180,21 @@ REAL, DIMENSION(SIZE(PY,1),SIZE(PY,2),SIZE(PY,3)) :: PQLAP ! final divergence
 !
 !*       0.2   declarations of local variables
 !
+#ifndef MNH_OPENACC
 REAL, DIMENSION(SIZE(PY,1),SIZE(PY,2),SIZE(PY,3)) :: ZU ! rho*J*gradient along x
 !
 REAL, DIMENSION(SIZE(PY,1),SIZE(PY,2),SIZE(PY,3)) :: ZV ! rho*J*gradient along y
 !
 REAL, DIMENSION(SIZE(PY,1),SIZE(PY,2),SIZE(PY,3)) :: ZW ! rho*J*gradient along z
+#else
+REAL, DIMENSION(:,:,:) , POINTER , CONTIGUOUS :: ZU ! rho*J*gradient along x
+!
+REAL, DIMENSION(:,:,:) , POINTER , CONTIGUOUS :: ZV ! rho*J*gradient along y
+!
+REAL, DIMENSION(:,:,:) , POINTER , CONTIGUOUS :: ZW ! rho*J*gradient along z
+!
+INTEGER :: IZU,IZV,IZW
+#endif
 !
 INTEGER                          :: IIU,IJU,IKU         ! I,J,K array sizes
 INTEGER                          :: JK,JJ,JI            ! vertical loop index
@@ -198,6 +211,16 @@ CALL GET_DIM_EXT_ll('B',IIU,IJU)
 CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
 IKU=SIZE(PY,3)
 !
+#ifndef MNH_OPENACC
+ALLOCATE (ZU(IIU,IJU,IKU))
+ALLOCATE (ZV(IIU,IJU,IKU))
+ALLOCATE (ZW(IIU,IJU,IKU))
+#else
+IZU = MNH_ALLOCATE_ZT3D( ZU,IIU,IJU,IKU  )
+IZV = MNH_ALLOCATE_ZT3D( ZV,IIU,IJU,IKU  )   
+IZW = MNH_ALLOCATE_ZT3D( ZW,IIU,IJU,IKU  )
+#endif
+!
 ZU = GX_M_U(1,IKU,1,PY,PDXX,PDZZ,PDZX)
 CALL MPPDB_CHECK3D(ZU,'QLAP::ZU',PRECISION)
 !
@@ -286,6 +309,11 @@ CALL CLEANLIST_ll(TZFIELDS_ll)
 !
 CALL GDIV(HLBCX,HLBCY,PDXX,PDYY,PDZX,PDZY,PDZZ,ZU,ZV,ZW,PQLAP)    
 !
+#ifndef MNH_OPENACC
+DEALLOCATE(ZU,ZV,ZW)
+#else
+CALL MNH_REL_ZT3D (  IZU,IZV,IZW )
+#endif
 !-------------------------------------------------------------------------------
 !
 END FUNCTION QLAP
@@ -395,8 +423,8 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY    ! y-direction LBC type
                                                  ! Metric coefficients:
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PDXX      ! d*xx 
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PDYY      ! d*yy 
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PDZX      ! d*zx 
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PDZY      ! d*zy 
+REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PDZX      ! d*zx 
+REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PDZY      ! d*zy 
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PDZZ      ! d*zz
 !
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHODJ    ! density of reference * J
diff --git a/src/ZSOLVER/turb.f90 b/src/ZSOLVER/turb.f90
index 9d5f3bfa99c5c9e6b916e628f882e8bb9f8e6d7c..e9ae5dcd939754ffd4e59b17a44ded6c21f97474 100644
--- a/src/ZSOLVER/turb.f90
+++ b/src/ZSOLVER/turb.f90
@@ -1581,7 +1581,9 @@ USE MODE_ll
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
 USE MODD_CONF
 !
+#ifdef MNH_OPENACC
 USE MODI_GET_HALO
+#endif
 !
 IMPLICIT NONE
 !
@@ -1614,17 +1616,18 @@ CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
 !         2 Update halo if necessary
 !
 !!$IF (NHALO == 1) THEN
-!!$!$acc update self(PUSLOPE,PVSLOPE)
-!!$  CALL ADD2DFIELD_ll( TZFIELDS_ll, PUSLOPE, 'UPDATE_ROTATE_WIND::PUSLOPE' )
-!!$  CALL ADD2DFIELD_ll( TZFIELDS_ll, PVSLOPE, 'UPDATE_ROTATE_WIND::PVSLOPE' )
-!!$  CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
-!!$  CALL CLEANLIST_ll(TZFIELDS_ll)
-!!$!$acc update device(PUSLOPE,PVSLOPE)
+#ifndef MNH_OPENACC
+  CALL ADD2DFIELD_ll( TZFIELDS_ll, PUSLOPE, 'UPDATE_ROTATE_WIND::PUSLOPE' )
+  CALL ADD2DFIELD_ll( TZFIELDS_ll, PVSLOPE, 'UPDATE_ROTATE_WIND::PVSLOPE' )
+  CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
+  CALL CLEANLIST_ll(TZFIELDS_ll)
+#else
 !
 !  /!\ warning conner needed -> GET_HALO...C
 !
 CALL GET_2D_HALO_DDC( PUSLOPE, HNAME='UPDATE_ROTATE_WIND::PUSLOPE' )
 CALL GET_2D_HALO_DDC( PVSLOPE, HNAME='UPDATE_ROTATE_WIND::PVSLOPE' )
+#endif
 !!$ENDIF
 !
 !        3 Boundary conditions for non cyclic case
diff --git a/src/ZSOLVER/turb_hor_dyn_corr.f90 b/src/ZSOLVER/turb_hor_dyn_corr.f90
index b59a3dfaa26314a1a3360157b626ff755290bc70..df9f9e4c7c4414d059768828020bda4a9337af35 100644
--- a/src/ZSOLVER/turb_hor_dyn_corr.f90
+++ b/src/ZSOLVER/turb_hor_dyn_corr.f90
@@ -176,8 +176,8 @@ USE MODI_BITREP
 #endif
 #ifdef MNH_OPENACC
 USE MODE_MNH_ZWORK , ONLY : MNH_ALLOCATE_ZT3D , MNH_REL_ZT3D, MNH_ALLOCATE_ZT3DP , MNH_ALLOCATE_ZT2D
-#endif
 USE MODI_GET_HALO
+#endif
 !
 IMPLICIT NONE
 !
@@ -393,7 +393,9 @@ iztmp4_device = MNH_ALLOCATE_ZT3D( ztmp4_device,JIU,JJU,JKU )
 !
 !*       1.   PRELIMINARY COMPUTATIONS
 !             ------------------------
+#ifndef MNH_OPENACC
 NULLIFY(TZFIELDS_ll)
+#endif
 !
 IKB = 1+JPVEXT               
 IKE = SIZE(PUM,3)-JPVEXT    
@@ -429,8 +431,9 @@ CALL GZ_W_M_DEVICE(1,IKU,1,PWM,PDZZ,GZ_W_M_PWM)
 CALL MZF_DEVICE(1,IKU,1,PDZZ,ZMZF_DZZ)
 #endif
 !
+#ifndef MNH_OPENACC
 CALL ADD3DFIELD_ll( TZFIELDS_ll, ZFLX, 'TURB_HOR_DYN_CORR::ZFLX' )
-
+#endif
 
 !  compute the coefficients for the uncentred gradient computation near the 
 !  ground
@@ -660,10 +663,11 @@ ZFLX(:,:,IKB-1) = 2. * ZFLX(:,:,IKB-1) -  ZFLX(:,:,IKB)
 !!! to be absolutely sure, we do a wait
 !$acc wait
 !
-!!$!$acc update self(ZFLX)
-!!$CALL UPDATE_HALO_ll(TZFIELDS_ll, IINFO_ll)
-!!$!$acc update device(ZFLX) async(10)
+#ifndef MNH_OPENACC
+CALL UPDATE_HALO_ll(TZFIELDS_ll, IINFO_ll)
+#else
 CALL GET_HALO_D(ZFLX)
+#endif
 !
 IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN
   ! stores <U U>  
@@ -869,10 +873,11 @@ ZFLX(:,:,IKB-1) = 2. * ZFLX(:,:,IKB-1) -  ZFLX(:,:,IKB)
 ! ! !$acc wait(3)
 !
 !$acc wait(3)
-!!$!$acc update self(ZFLX)
-!!$CALL UPDATE_HALO_ll(TZFIELDS_ll, IINFO_ll)
-!!$!$acc update device(ZFLX) async(10)
+#ifndef MNH_OPENACC
+CALL UPDATE_HALO_ll(TZFIELDS_ll, IINFO_ll)
+#else
 CALL GET_HALO_D(ZFLX)
+#endif
 !
 IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN
   ! stores <V V>  
@@ -1266,7 +1271,9 @@ END IF
 !!! et un dernier wait pour etre sur
 !$acc wait
 !
+#ifndef MNH_OPENACC
 CALL CLEANLIST_ll(TZFIELDS_ll)
+#endif
 
 if ( mppdb_initialized ) then
   !Check all inout arrays
diff --git a/src/ZSOLVER/update_lm.f90 b/src/ZSOLVER/update_lm.f90
index 7b82c64c7d766f33f34af358abd3c5c5cb3b37ae..b27ff04f2cb430ef4342c6456eff3947c706f130 100644
--- a/src/ZSOLVER/update_lm.f90
+++ b/src/ZSOLVER/update_lm.f90
@@ -66,7 +66,9 @@ USE MODD_PARAMETERS
 !
 USE MODE_ll
 use mode_mppdb
+#ifdef MNH_OPENACC
 USE MODI_GET_HALO
+#endif
 !
 IMPLICIT NONE
 !
@@ -103,7 +105,9 @@ end if
 !*       1.    COMPUTE DIMENSIONS OF ARRAYS :
 !              ----------------------------
 CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
-!!$NULLIFY(TZLM_ll)
+#ifndef MNH_OPENACC
+NULLIFY(TZLM_ll)
+#endif
 !
 !-------------------------------------------------------------------------------
 !
@@ -112,17 +116,18 @@ CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
 !
 !
 !!$IF(NHALO == 1) THEN
-!!$!$acc update self(PLM,PLEPS)
-!!$  CALL ADD3DFIELD_ll( TZLM_ll, PLM,   'UPDATE_LM::PLM'   )
-!!$  CALL ADD3DFIELD_ll( TZLM_ll, PLEPS, 'UPDATE_LM::PLEPS' )
-!!$  CALL UPDATE_HALO_ll(TZLM_ll,IINFO_ll)
-!!$  CALL CLEANLIST_ll(TZLM_ll)
-!!$!$acc update device(PLM,PLEPS)
+#ifndef MNH_OPENACC
+  CALL ADD3DFIELD_ll( TZLM_ll, PLM,   'UPDATE_LM::PLM'   )
+  CALL ADD3DFIELD_ll( TZLM_ll, PLEPS, 'UPDATE_LM::PLEPS' )
+  CALL UPDATE_HALO_ll(TZLM_ll,IINFO_ll)
+  CALL CLEANLIST_ll(TZLM_ll)
+#else
 !
 ! /!\ Corner update needed ! -> GET_HALO_DDC
 !
 CALL GET_HALO_DDC( PLM,   HNAME='UPDATE_LM::PLM'   )
 CALL GET_HALO_DDC( PLEPS, HNAME='UPDATE_LM::PLEPS' )
+#endif
 !!$END IF
 !
 !-------------------------------------------------------------------------------
diff --git a/src/ZSOLVER/zsolver_inv.f90 b/src/ZSOLVER/zsolver_inv.f90
index 29965951e8ee7546dad9e2e27d6f93e6a1cd3e1e..09e6ee8c091f11d6490ad40cb2bb9b0e75b68a65 100644
--- a/src/ZSOLVER/zsolver_inv.f90
+++ b/src/ZSOLVER/zsolver_inv.f90
@@ -309,10 +309,14 @@ SUBROUTINE ZSOLVER_INV(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF, &
        
   call mg_main_mnh_solve()  
   call mg_main_get_u_mnh(IIB,IIE,IIU,IJB,IJE,IJU,IKU,PF_1_Y)
+#ifndef MNH_OPENACC  
+  CALL GET_HALO(PF_1_Y)
+#else
   !
   !  WARNING WITH GET_HALO_D not BITREPROD !!!
-  !
+  !  
   CALL GET_HALO_DDC(PF_1_Y)
+#endif  
   !
   CALL PF_1_Y_BOUND(PF_1_Y)  
   !-------------------------------------------------------------------------------