diff --git a/src/MNH/mode_mnh_zwork.f90 b/src/MNH/mode_mnh_zwork.f90
index 041a5e4409a136c9be2da38a34121366ceb9b05a..fe0e5782319a6c69ecd3bb23f210456dbf4ff5e1 100644
--- a/src/MNH/mode_mnh_zwork.f90
+++ b/src/MNH/mode_mnh_zwork.f90
@@ -19,7 +19,7 @@ MODULE MODE_MNH_ZWORK
   !
   INTEGER,SAVE                    :: IJS,IJN, IIW,IIA
   !
-  INTEGER, SAVE                   :: IIU,IJU,IKU
+  INTEGER, SAVE                   :: IIU,IJU,IKU,IIJKU
   LOGICAL, SAVE                   :: GWEST , GEAST
   LOGICAL, SAVE                   :: GSOUTH , GNORTH
 
@@ -37,7 +37,8 @@ MODULE MODE_MNH_ZWORK
   !REAL    , ALLOCATABLE, DIMENSION(:,:,:,:) , TARGET :: ZT3D_A1,ZT3D_A2,ZT3D_A3,ZT3D_A4
   !REAL    , POINTER    , DIMENSION(:,:,:,:)          :: ZT3D
   REAL,SAVE    , ALLOCATABLE, TARGET , DIMENSION(:,:,:,:)          :: ZT3D
-  
+
+  REAL,SAVE    , ALLOCATABLE, TARGET , DIMENSION(:)                :: ZT1D_OSIZE
   REAL,SAVE    , ALLOCATABLE, TARGET , DIMENSION(:,:)              :: ZT2D_OSIZE
   REAL,SAVE    , ALLOCATABLE, TARGET , DIMENSION(:,:,:)            :: ZT3D_OSIZE
   REAL,SAVE    , ALLOCATABLE, TARGET , DIMENSION(:,:,:,:)          :: ZT4D_OSIZE
@@ -53,6 +54,17 @@ MODULE MODE_MNH_ZWORK
   INTEGER , ALLOCATABLE, DIMENSION (:)      :: NT3D_POOL_G
   INTEGER                                   :: NT3D_TOP_G , NT3D_TOP_G_MAX = 0  
   LOGICAL,SAVE    , ALLOCATABLE, TARGET , DIMENSION(:,:,:,:)       :: GT3D
+
+  INTEGER, parameter                        :: JPMAX_T3D_I = 4
+  INTEGER , ALLOCATABLE, DIMENSION (:)      :: NT3D_POOL_I
+  INTEGER                                   :: NT3D_TOP_I , NT3D_TOP_I_MAX = 0  
+  INTEGER,SAVE    , ALLOCATABLE, TARGET , DIMENSION(:,:,:,:)       :: IT3D
+
+  INTEGER, parameter                        :: JPMAX_T1D_R = 60
+  INTEGER , ALLOCATABLE, DIMENSION (:)      :: NT1D_POOL_R
+  INTEGER                                   :: NT1D_TOP_R , NT1D_TOP_R_MAX = 0  
+  REAL,SAVE    , ALLOCATABLE, TARGET , DIMENSION(:,:)       :: ZT1D 
+  
   
 CONTAINS
 
@@ -76,6 +88,7 @@ CONTAINS
        !
        CALL GET_DIM_EXT_ll('B',IIU,IJU)     
        IKU=NKMAX + 2* JPVEXT
+       IIJKU = IIU*IJU*IKU
        !
        ! Computation bound
        !
@@ -113,10 +126,11 @@ CONTAINS
        ALLOCATE (ZT3D(IIU,IJU,IKU,JPMAX_T3D))
        !$acc enter data create(ZT3D)
 
+       ALLOCATE (ZT1D_OSIZE(0))
        ALLOCATE (ZT2D_OSIZE(IIU,0))
        ALLOCATE (ZT3D_OSIZE(IIU,IJU,0))
        ALLOCATE (ZT4D_OSIZE(IIU,IJU,IKU,0))
-       !$acc enter data create(ZT2D_OSIZE,ZT3D_OSIZE,ZT4D_OSIZE)      
+       !$acc enter data create(ZT1D_OSIZE,ZT2D_OSIZE,ZT3D_OSIZE,ZT4D_OSIZE)      
 
        ALLOCATE (NT3D_POOL(JPMAX_T3D))
        NT3D_TOP = 0
@@ -129,11 +143,33 @@ CONTAINS
        ALLOCATE (GT3D(IIU,IJU,IKU,JPMAX_T3D_G))
        !$acc enter data create(GT3D)
 
-       ALLOCATE (NT3D_POOL_G(JPMAX_T3D))
+       ALLOCATE (NT3D_POOL_G(JPMAX_T3D_G))
        NT3D_TOP_G = 0
-       DO JI = 1, JPMAX_T3D
+       DO JI = 1, JPMAX_T3D_G
           NT3D_POOL_G(JI) = JI
        END DO
+
+!------ Integer pool
+       
+       ALLOCATE (IT3D(IIU,IJU,IKU,JPMAX_T3D_I))
+       !$acc enter data create(IT3D)
+
+       ALLOCATE (NT3D_POOL_I(JPMAX_T3D_I))
+       NT3D_TOP_I = 0
+       DO JI = 1, JPMAX_T3D_I
+          NT3D_POOL_I(JI) = JI
+       END DO
+
+!------ Real 1D pool
+       
+       ALLOCATE (ZT1D(IIU*IJU*IKU,JPMAX_T1D_R))
+       !$acc enter data create(ZT1D)
+
+       ALLOCATE (NT1D_POOL_R(JPMAX_T1D_R))
+       NT1D_TOP_R = 0
+       DO JI = 1, JPMAX_T1D_R
+          NT1D_POOL_R(JI) = JI
+       END DO
        
 !------ Default values
        
@@ -145,12 +181,17 @@ CONTAINS
        ZUNIT3D = 1.0
 
        ZT3D  =  XUNDEF
+       ZT1D  =  XUNDEF
+
+       IT3D  = 0.0
+
+       GT3D  = .FALSE.
 
        !$acc end kernels
 
        !$acc update host (ZPSRC_HALO2_WEST,ZPSRC_HALO2_SOUTH)
        !$acc update host (ZUNIT3D)
-       !$acc update host (ZT3D)
+       !$acc update host (ZT3D,ZT1D)
 
     END IF
 
@@ -546,6 +587,161 @@ CONTAINS
        
   END FUNCTION MNH_ALLOCATE_GT3D
 
+  !------------ End Logical Pool
+
+  !-------- Real 1D Pool Managment
+  
+    SUBROUTINE MNH_GET_ZT1D_N0(KTEMP)
+
+    IMPLICIT NONE
+
+    INTEGER :: KTEMP
+
+    IF (NT1D_TOP_R == JPMAX_T1D_R ) THEN
+      WRITE( *, '( " MNH_GET_ZT1D_N0: NT1D_TOP_R too big (increaze JPMAX_T1D_R) , NT1D_TOP_R=",I4 )' ) NT1D_TOP_R
+      call Print_msg( NVERB_FATAL, 'GEN', 'MNH_GET_ZT1D_N0', 'NT1D_TOP_R too big (increaze JPMAX_T1D_R)' )
+    ELSE
+       NT1D_TOP_R = NT1D_TOP_R + 1
+       KTEMP = NT1D_POOL_R(NT1D_TOP_R)
+       NT1D_POOL_R(NT1D_TOP_R) = - KTEMP
+       IF (  NT1D_TOP_R > NT1D_TOP_R_MAX ) THEN
+          NT1D_TOP_R_MAX = NT1D_TOP_R
+          !WRITE( *, '( " MNH_GET_ZT1D: NT1D_TOP_R_MAX=",I4," KTEMP=",I4 )' ) NT1D_TOP_R_MAX,KTEMP
+       END IF
+    ENDIF
+    !WRITE( *, '( "MNH_GET_ZT1D: reserving ZT1D (",I4,")" )' ) KTEMP
+
+  END SUBROUTINE MNH_GET_ZT1D_N0
+
+  SUBROUTINE MNH_GET_ZT1D(KTEMP1,KTEMP2,KTEMP3,KTEMP4,KTEMP5,KTEMP6,KTEMP7,KTEMP8,KTEMP9, &
+                          KTEMP10,KTEMP11,KTEMP12,KTEMP13,KTEMP14,KTEMP15,KTEMP16,KTEMP17,KTEMP18)
+
+    IMPLICIT NONE
+
+    INTEGER          :: KTEMP1
+    INTEGER,OPTIONAL :: KTEMP2,KTEMP3,KTEMP4,KTEMP5,KTEMP6,KTEMP7,KTEMP8,KTEMP9
+    INTEGER,OPTIONAL :: KTEMP10,KTEMP11,KTEMP12,KTEMP13,KTEMP14,KTEMP15,KTEMP16,KTEMP17,KTEMP18
+
+                          CALL MNH_GET_ZT1D_N0(KTEMP1)
+    IF (PRESENT(KTEMP2))  CALL MNH_GET_ZT1D_N0(KTEMP2)
+    IF (PRESENT(KTEMP3))  CALL MNH_GET_ZT1D_N0(KTEMP3)
+    IF (PRESENT(KTEMP4))  CALL MNH_GET_ZT1D_N0(KTEMP4)
+    IF (PRESENT(KTEMP5))  CALL MNH_GET_ZT1D_N0(KTEMP5)
+    IF (PRESENT(KTEMP6))  CALL MNH_GET_ZT1D_N0(KTEMP6)
+    IF (PRESENT(KTEMP7))  CALL MNH_GET_ZT1D_N0(KTEMP7)
+    IF (PRESENT(KTEMP8))  CALL MNH_GET_ZT1D_N0(KTEMP8)
+    IF (PRESENT(KTEMP9))  CALL MNH_GET_ZT1D_N0(KTEMP9)
+    IF (PRESENT(KTEMP10)) CALL MNH_GET_ZT1D_N0(KTEMP10)
+    IF (PRESENT(KTEMP11)) CALL MNH_GET_ZT1D_N0(KTEMP11)
+    IF (PRESENT(KTEMP12)) CALL MNH_GET_ZT1D_N0(KTEMP12)
+    IF (PRESENT(KTEMP13)) CALL MNH_GET_ZT1D_N0(KTEMP13)
+    IF (PRESENT(KTEMP14)) CALL MNH_GET_ZT1D_N0(KTEMP14)
+    IF (PRESENT(KTEMP15)) CALL MNH_GET_ZT1D_N0(KTEMP15)
+    IF (PRESENT(KTEMP16)) CALL MNH_GET_ZT1D_N0(KTEMP16)
+    IF (PRESENT(KTEMP17)) CALL MNH_GET_ZT1D_N0(KTEMP17)
+    IF (PRESENT(KTEMP18)) CALL MNH_GET_ZT1D_N0(KTEMP18)
+
+  END SUBROUTINE MNH_GET_ZT1D
+
+    SUBROUTINE MNH_REL_ZT1D_N0(KTEMP)
+
+    IMPLICIT NONE
+
+    INTEGER :: KTEMP
+
+    IF ( ( NT1D_TOP_R > JPMAX_T1D_R ) .OR. ( NT1D_TOP_R < 1 ) ) THEN
+      call Print_msg( NVERB_FATAL, 'GEN', 'MNH_REL_ZT1D_N0', 'invalid value for NT1D_TOP_R' )
+    ELSE
+      NT1D_POOL_R(KTEMP) = KTEMP
+      IF (KTEMP == NT1D_TOP_R) THEN
+        NT1D_TOP_R = NT1D_TOP_R - 1
+     ELSE
+        WRITE( *, '( "MNH_REL_ZT1D_N0: invalid value for KTEMP <> NT1D_TOP_R  (",2I8,")" )' ) KTEMP, NT1D_TOP_R
+        FLUSH(6)
+        call Print_msg( NVERB_FATAL, 'GEN', 'MNH_REL_ZT1D_N0', 'invalid value for KTEMP <> NT1D_TOP_R' )
+      END IF
+    ENDIF
+    !WRITE( *, '( "MNH_REL_ZT1D_N0: releasing ZT1D (",I4,")" )' ) KTEMP
+
+  END SUBROUTINE MNH_REL_ZT1D_N0
+
+  SUBROUTINE MNH_REL_ZT1D(KTEMP1,KTEMP2,KTEMP3,KTEMP4,KTEMP5,KTEMP6,KTEMP7,KTEMP8,KTEMP9, &
+                          KTEMP10,KTEMP11,KTEMP12,KTEMP13,KTEMP14,KTEMP15,KTEMP16,KTEMP17,KTEMP18, &
+                          KTEMP19,KTEMP20)
+
+    IMPLICIT NONE
+
+    INTEGER          :: KTEMP1
+    INTEGER,OPTIONAL :: KTEMP2,KTEMP3,KTEMP4,KTEMP5,KTEMP6,KTEMP7,KTEMP8,KTEMP9
+    INTEGER,OPTIONAL :: KTEMP10,KTEMP11,KTEMP12,KTEMP13,KTEMP14,KTEMP15,KTEMP16,KTEMP17,KTEMP18
+    INTEGER,OPTIONAL :: KTEMP19,KTEMP20
+
+    IF (PRESENT(KTEMP20)) CALL MNH_REL_ZT1D_N0(KTEMP20)
+    IF (PRESENT(KTEMP19)) CALL MNH_REL_ZT1D_N0(KTEMP19)
+    IF (PRESENT(KTEMP18)) CALL MNH_REL_ZT1D_N0(KTEMP18)
+    IF (PRESENT(KTEMP17)) CALL MNH_REL_ZT1D_N0(KTEMP17)
+    IF (PRESENT(KTEMP16)) CALL MNH_REL_ZT1D_N0(KTEMP16)
+    IF (PRESENT(KTEMP15)) CALL MNH_REL_ZT1D_N0(KTEMP15)
+    IF (PRESENT(KTEMP14)) CALL MNH_REL_ZT1D_N0(KTEMP14)
+    IF (PRESENT(KTEMP13)) CALL MNH_REL_ZT1D_N0(KTEMP13)
+    IF (PRESENT(KTEMP12)) CALL MNH_REL_ZT1D_N0(KTEMP12)
+    IF (PRESENT(KTEMP11)) CALL MNH_REL_ZT1D_N0(KTEMP11)
+    IF (PRESENT(KTEMP10)) CALL MNH_REL_ZT1D_N0(KTEMP10)
+    IF (PRESENT(KTEMP9))  CALL MNH_REL_ZT1D_N0(KTEMP9)
+    IF (PRESENT(KTEMP8))  CALL MNH_REL_ZT1D_N0(KTEMP8)
+    IF (PRESENT(KTEMP7))  CALL MNH_REL_ZT1D_N0(KTEMP7)
+    IF (PRESENT(KTEMP6))  CALL MNH_REL_ZT1D_N0(KTEMP6)
+    IF (PRESENT(KTEMP5))  CALL MNH_REL_ZT1D_N0(KTEMP5)
+    IF (PRESENT(KTEMP4))  CALL MNH_REL_ZT1D_N0(KTEMP4)
+    IF (PRESENT(KTEMP3))  CALL MNH_REL_ZT1D_N0(KTEMP3)
+    IF (PRESENT(KTEMP2))  CALL MNH_REL_ZT1D_N0(KTEMP2)
+    CALL MNH_REL_ZT1D_N0(KTEMP1)
+    
+  END SUBROUTINE MNH_REL_ZT1D
+
+  FUNCTION MNH_ALLOCATE_ZT1D(PTAB,KI) RESULT (KINDEX)
+    
+    REAL, POINTER, CONTIGUOUS , DIMENSION(:), INTENT(INOUT) :: PTAB
+    INTEGER , INTENT(IN)    :: KI
+    INTEGER                 :: KINDEX
+
+    !local
+
+    IF (KI .EQ. IIU) THEN 
+       CALL MNH_GET_ZT1D_N0(KINDEX)
+       PTAB => ZT1D(:,KINDEX)
+    ELSE
+       call Print_msg( NVERB_ERROR, 'GEN', 'MNH_ALLOCATE_ZT1D', ' Size mismatsh ' )
+    END IF
+    !WRITE( *, '( "MNH_ALLOCATE_ZT1D: KI=(",I4,") , KINDEX=(",I4,")" )' ) KI,KINDEX
+    !FLUSH(6) 
+       
+  END FUNCTION MNH_ALLOCATE_ZT1D
+
+  FUNCTION MNH_ALLOCATE_ZT1DP(PTAB,KI) RESULT (KINDEX)
+    
+    REAL, POINTER, CONTIGUOUS , DIMENSION(:), INTENT(INOUT) :: PTAB
+    INTEGER , INTENT(IN)    :: KI
+    INTEGER                 :: KINDEX
+
+    !local
+
+    IF (KI .LE. IIJKU) THEN 
+       CALL MNH_GET_ZT1D_N0(KINDEX)
+       IF (KI .NE. 0) THEN
+          PTAB(1:KI) => ZT1D(:,KINDEX)
+       ELSE
+          PTAB => ZT1D_OSIZE
+       END IF
+    ELSE
+       call Print_msg( NVERB_ERROR, 'GEN', 'MNH_ALLOCATE_ZT1DP', ' Size mismatsh ' )
+    END IF
+    !WRITE( *, '( "MNH_ALLOCATE_ZT1DP: KI=(",I9,") , KINDEX=(",I4,")" )' ) KI,KINDEX
+    
+  END FUNCTION MNH_ALLOCATE_ZT1DP
+
+  ! End Real 1D management
+
   SUBROUTINE MNH_CHECK_IN_ZT3D(HSUB)
     IMPLICIT NONE