diff --git a/MNH/mode_mnh_zwork.f90 b/MNH/mode_mnh_zwork.f90
index 4cbc8cd339680f6eb1386bb7316ff8fa471b4335..f72687df5c16384c21a92e581c11c3749fcfc5cc 100644
--- a/MNH/mode_mnh_zwork.f90
+++ b/MNH/mode_mnh_zwork.f90
@@ -14,11 +14,9 @@ MODULE MODE_MNH_ZWORK
 
   LOGICAL, SAVE                   :: GFIRST_CALL_MNH_ALLOC_ZWORK = .TRUE.
   !
-  REAL, SAVE, ALLOCATABLE , DIMENSION(:,:,:) :: & 
-       & ZW3D20,ZW3D21,ZW3D22,ZW3D23,ZW3D24,ZW3D25, &
-       & ZPPM
-  !$acc declare mirror (ZW3D20,ZW3D21,ZW3D22,ZW3D23,ZW3D24,ZW3D25) &
-  !$acc & mirror(ZPPM)
+
+  REAL, SAVE, ALLOCATABLE , DIMENSION(:,:,:) ::  ZPPM
+  !$acc declare mirror(ZPPM)
 
   REAL, SAVE, ALLOCATABLE , DIMENSION(:,:)   :: ZPSRC_HALO2_WEST
   REAL, SAVE, ALLOCATABLE , DIMENSION(:,:)   :: ZPSRC_HALO2_SOUTH
@@ -26,17 +24,21 @@ MODULE MODE_MNH_ZWORK
 
   REAL, SAVE, ALLOCATABLE , DIMENSION(:,:,:) :: ZUNIT3D
   !$acc declare mirror(ZUNIT3D)
-
-  REAL, SAVE, ALLOCATABLE, DIMENSION(:,:,:) :: &
-       ZRUT,ZRVT,ZRWT,ZRUCT,ZRVCT,ZRWCT
-  !$acc declare mirror(ZRUT,ZRVT,ZRWT,ZRUCT,ZRVCT,ZRWCT)
   !
-
-  INTEGER                                   :: JPMAX_T3D = 20
+  INTEGER                                   :: JPMAX_T3D = 25
   INTEGER , ALLOCATABLE, DIMENSION (:)      :: NT3D_POOL
   INTEGER                                   :: NT3D_TOP , NT3D_TOP_MAX = 0  
-  REAL    , ALLOCATABLE, DIMENSION(:,:,:,:) :: ZT3D , ZT3D_REALLOC
-  !$acc declare mirror(ZT3D,ZT3D_REALLOC)
+  REAL    , ALLOCATABLE, DIMENSION(:,:,:,:) , TARGET :: ZT3D_A1,ZT3D_A2,ZT3D_A3,ZT3D_A4
+  REAL    , POINTER    , DIMENSION(:,:,:,:)          :: ZT3D
+  !$acc declare mirror(ZT3D_A1,ZT3D_A2,ZT3D_A3,ZT3D_A4)
+
+  TYPE TMODEL
+      REAL    , POINTER, DIMENSION(:,:,:,:) :: X
+  END TYPE TMODEL
+
+  TYPE(TMODEL) , DIMENSION(10) :: MODEL
+
+  !acc declare mirror(MODEL)
 
 CONTAINS
 
@@ -82,14 +84,6 @@ CONTAINS
        !
        ! Work array
        ! 
-
-       ALLOCATE (ZW3D20(IIU,IJU,IKU)) 
-       ALLOCATE (ZW3D21(IIU,IJU,IKU))
-       ALLOCATE (ZW3D22(IIU,IJU,IKU))
-       ALLOCATE (ZW3D23(IIU,IJU,IKU))
-       ALLOCATE (ZW3D24(IIU,IJU,IKU))
-       ALLOCATE (ZW3D25(IIU,IJU,IKU))
- 
        ALLOCATE (ZPPM(IIU,IJU,IKU))
 
        ALLOCATE (ZPSRC_HALO2_WEST(IJU,IKU)) 
@@ -97,10 +91,10 @@ CONTAINS
 
        ALLOCATE (ZUNIT3D(IIU,IJU,IKU)) 
 
-       ALLOCATE (ZRUT(IIU,IJU,IKU),ZRVT(IIU,IJU,IKU),ZRWT(IIU,IJU,IKU))
-       ALLOCATE (ZRUCT(IIU,IJU,IKU),ZRVCT(IIU,IJU,IKU),ZRWCT(IIU,IJU,IKU))
+       ALLOCATE (ZT3D_A1(IIU,IJU,IKU,JPMAX_T3D))
+       MODEL(1)%X => ZT3D_A1
+       ZT3D => MODEL(1)%X
 
-       ALLOCATE (ZT3D(IIU,IJU,IKU,JPMAX_T3D))
        ALLOCATE (NT3D_POOL(JPMAX_T3D))
        NT3D_TOP = 0
        DO JI = 1, JPMAX_T3D
@@ -108,42 +102,27 @@ CONTAINS
        END DO
 
        !$acc kernels 
-
-       ZW3D20 = XUNDEF
-       ZW3D21 = XUNDEF
-       ZW3D22 = XUNDEF
-       ZW3D23 = XUNDEF
-       ZW3D24 = XUNDEF
-       ZW3D25 = XUNDEF
  
        ZPPM   = XUNDEF
 
        ZPSRC_HALO2_WEST = XUNDEF
        ZPSRC_HALO2_SOUTH = XUNDEF
 
-       ZUNIT3D = 1.0
-
-       ZRUT = XUNDEF
-       ZRVT = XUNDEF
-       ZRWT = XUNDEF
-       ZRUCT = XUNDEF
-       ZRVCT = XUNDEF
-       ZRWCT = XUNDEF
+       ZUNIT3D = 1.0 
 
-       ZT3D =  XUNDEF
+       ZT3D_A1 =  XUNDEF
 
        !$acc end kernels
 
-       !$acc update host (ZW3D20,ZW3D21,ZW3D22,ZW3D23,ZW3D24,ZW3D25)
        !$acc update host (ZPPM)
 
        !$acc update host (ZPSRC_HALO2_WEST,ZPSRC_HALO2_SOUTH)
        !$acc update host (ZUNIT3D)  
 
-       !$acc update host (ZRUT,ZRVT,ZRWT,ZRUCT,ZRVCT,ZRWCT)
-
        !$acc update host (ZT3D)
 
+
+
     END IF
 
   END SUBROUTINE MNH_ALLOC_ZWORK