diff --git a/MNH/advec_ppm_algo.f90 b/MNH/advec_ppm_algo.f90
index c5cadd21140cc3e986d8f6093e6b1490567cbfa6..834360306225394b154ed49dd291ebe24330016b 100644
--- a/MNH/advec_ppm_algo.f90
+++ b/MNH/advec_ppm_algo.f90
@@ -10,13 +10,55 @@
 !
 CONTAINS
 !
-!
-!
 !     ##########################################################################
       SUBROUTINE  ADVEC_PPM_ALGO(HMET_ADV_SCHEME, HLBCX, HLBCY, KGRID, PFIELDT, &
                                  PRHODJ, PTSTEP, &
                                  PRHOX1, PRHOX2, PRHOY1, PRHOY2, PRHOZ1,PRHOZ2,&
                                  PSRC, KTCOUNT, PCRU, PCRV, PCRW)
+
+  USE MODE_MNH_ZWORK, ONLY : ZT3D, MNH_GET_ZT3D , MNH_REL_ZT3D
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of dummy arguments :
+!
+CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX  ! X direction LBC type
+CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY  ! Y direction LBC type
+CHARACTER (LEN=6),               INTENT(IN) :: HMET_ADV_SCHEME
+!
+REAL, DIMENSION(:,:,:), INTENT(IN)  :: PFIELDT      ! variable at t
+INTEGER,                INTENT(IN)  :: KGRID        ! C grid localisation
+!
+REAL, DIMENSION(:,:,:), INTENT(IN)  :: PCRU, PCRV, PCRW ! Courant numbers 
+!
+REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHODJ  ! density
+REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHOX1, PRHOX2
+REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHOY1, PRHOY2
+REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHOZ1, PRHOZ2
+REAL,                   INTENT(IN)  :: PTSTEP  ! Time step 
+INTEGER,                INTENT(IN)  :: KTCOUNT ! iteration count
+!
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRC    ! source term after advection
+
+INTEGER :: IZPPM
+
+           CALL  MNH_GET_ZT3D(IZPPM)
+
+           CALL ADVEC_PPM_ALGO_D(HMET_ADV_SCHEME, HLBCX, HLBCY, KGRID, PFIELDT, &
+                               & PRHODJ, PTSTEP, &
+                               & PRHOX1, PRHOX2, PRHOY1, PRHOY2, PRHOZ1,PRHOZ2,&
+                               & PSRC, KTCOUNT, PCRU, PCRV, PCRW, & 
+                               & ZT3D(:,:,:,IZPPM) )
+
+           CALL  MNH_REL_ZT3D(IZPPM)
+
+CONTAINS
+
+      SUBROUTINE  ADVEC_PPM_ALGO_D(HMET_ADV_SCHEME, HLBCX, HLBCY, KGRID, PFIELDT, &
+                                 PRHODJ, PTSTEP, &
+                                 PRHOX1, PRHOX2, PRHOY1, PRHOY2, PRHOZ1,PRHOZ2,&
+                                 PSRC, KTCOUNT, PCRU, PCRV, PCRW, &
+                                 ZPPM)
 !     ##########################################################################
 !!
 !!****  *ADVEC_PPM_ALGO* - interface for 3D advection with PPM type scheme
@@ -50,8 +92,6 @@ CONTAINS
 USE MODI_SHUMAN
 USE MODI_PPM
 !
-USE MODE_MNH_ZWORK, ONLY : ZPPM
-!
 IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
@@ -74,11 +114,11 @@ INTEGER,                INTENT(IN)  :: KTCOUNT ! iteration count
 !
 REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSRC    ! source term after advection
 !
-!TYPE(HALO2_ll), OPTIONAL, POINTER   :: TPHALO2 ! halo2 for the field at t
 !
 !*       0.2   Declarations of local variables :
 !
-!!$REAL, DIMENSION(SIZE(PFIELDT,1),SIZE(PFIELDT,2),SIZE(PFIELDT,3)) :: ZPPM   ! temp PPM output
+REAL, DIMENSION(SIZE(PFIELDT,1),SIZE(PFIELDT,2),SIZE(PFIELDT,3)) :: ZPPM   ! temp PPM output
+!$acc declare present(ZPPM)
 !
 !INTEGER:: IW,IE,IS,IN,IT,IB,IWF,IEF,ISF,INF   ! Coordinate of 4th order diffusion area
 !
@@ -285,6 +325,8 @@ PSRC = (PSRC - PFIELDT)*PRHODJ/PTSTEP
 !$acc end kernels
 !$acc end data
 !
+END SUBROUTINE ADVEC_PPM_ALGO_D
+
 END SUBROUTINE ADVEC_PPM_ALGO
 
 END MODULE MODI_ADVEC_PPM_ALGO
diff --git a/MNH/mode_mnh_zwork.f90 b/MNH/mode_mnh_zwork.f90
index f72687df5c16384c21a92e581c11c3749fcfc5cc..15c959c44238120d6ea78cf95d7f9897af208858 100644
--- a/MNH/mode_mnh_zwork.f90
+++ b/MNH/mode_mnh_zwork.f90
@@ -14,17 +14,13 @@ MODULE MODE_MNH_ZWORK
 
   LOGICAL, SAVE                   :: GFIRST_CALL_MNH_ALLOC_ZWORK = .TRUE.
   !
-
-  REAL, SAVE, ALLOCATABLE , DIMENSION(:,:,:) ::  ZPPM
-  !$acc declare mirror(ZPPM)
-
   REAL, SAVE, ALLOCATABLE , DIMENSION(:,:)   :: ZPSRC_HALO2_WEST
   REAL, SAVE, ALLOCATABLE , DIMENSION(:,:)   :: ZPSRC_HALO2_SOUTH
   !$acc declare mirror(ZPSRC_HALO2_WEST,ZPSRC_HALO2_SOUTH)
 
   REAL, SAVE, ALLOCATABLE , DIMENSION(:,:,:) :: ZUNIT3D
   !$acc declare mirror(ZUNIT3D)
-  !
+
   INTEGER                                   :: JPMAX_T3D = 25
   INTEGER , ALLOCATABLE, DIMENSION (:)      :: NT3D_POOL
   INTEGER                                   :: NT3D_TOP , NT3D_TOP_MAX = 0  
@@ -38,8 +34,6 @@ MODULE MODE_MNH_ZWORK
 
   TYPE(TMODEL) , DIMENSION(10) :: MODEL
 
-  !acc declare mirror(MODEL)
-
 CONTAINS
 
   SUBROUTINE MNH_ALLOC_ZWORK(IMODEL)
@@ -84,8 +78,6 @@ CONTAINS
        !
        ! Work array
        ! 
-       ALLOCATE (ZPPM(IIU,IJU,IKU))
-
        ALLOCATE (ZPSRC_HALO2_WEST(IJU,IKU)) 
        ALLOCATE (ZPSRC_HALO2_SOUTH(IIU,IKU)) 
 
@@ -102,27 +94,18 @@ CONTAINS
        END DO
 
        !$acc kernels 
- 
-       ZPPM   = XUNDEF
-
        ZPSRC_HALO2_WEST = XUNDEF
        ZPSRC_HALO2_SOUTH = XUNDEF
 
        ZUNIT3D = 1.0 
 
-       ZT3D_A1 =  XUNDEF
-
+       ZT3D  =  XUNDEF
        !$acc end kernels
 
-       !$acc update host (ZPPM)
-
        !$acc update host (ZPSRC_HALO2_WEST,ZPSRC_HALO2_SOUTH)
        !$acc update host (ZUNIT3D)  
-
        !$acc update host (ZT3D)
 
-
-
     END IF
 
   END SUBROUTINE MNH_ALLOC_ZWORK