diff --git a/src/ZSOLVER/get_halo.f90 b/src/ZSOLVER/get_halo.f90
index e53338d1f9e3db6a9798375bf8c17f4289b2ab20..8d6119d7c26032727ecc79dce6380ace5d1dc0a0 100644
--- a/src/ZSOLVER/get_halo.f90
+++ b/src/ZSOLVER/get_halo.f90
@@ -88,23 +88,49 @@ INTERFACE
 END INTERFACE
 !
 INTERFACE
-   SUBROUTINE GET_HALO_START_D(PSRC,KNB_REQ,KREQ,HDIR)
+   SUBROUTINE GET_HALO_START_D(PSRC,KNB_REQ,KREQ,&
+     PZNORTH_IN , PZSOUTH_IN , PZWEST_IN , PZEAST_IN , &
+     PZNORTH_OUT, PZSOUTH_OUT, PZWEST_OUT, PZEAST_OUT, &
+     KIIB,KIIE,KIJB,KIJE,KIIU,KIJU,KIKU,KIHALO_1,&
+     HDIR)
+     
      IMPLICIT NONE
      !
-     REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC    ! variable at t
+     REAL, DIMENSION(KIIU,KIJU,KIKU), INTENT(INOUT) :: PSRC    ! variable at t
      ! acc declare present (PSRC)
      INTEGER                               :: KNB_REQ ,  KREQ(8)
+     REAL            :: PZSOUTH_IN ( KIIB:KIIE   , KIJB:KIJB+KIHALO_1   , KIKU ) ,&
+                        PZNORTH_IN ( KIIB:KIIE   , KIJE-KIHALO_1:KIJE   , KIKU ) ,&
+                        PZWEST_IN  ( KIIB:KIIB+KIHALO_1   , KIJB:KIJE   , KIKU ) ,&
+                        PZEAST_IN  ( KIIE-KIHALO_1:KIIE   , KIJB:KIJE   , KIKU ) ,&
+       !
+                        PZSOUTH_OUT (   KIIB:KIIE   , 1:KIJB-1 , KIKU ) ,&
+                        PZNORTH_OUT (   KIIB:KIIE   , KIJE+1:KIJU , KIKU ) ,&
+                        PZWEST_OUT  ( 1:KIIB-1 ,   KIJB:KIJE   , KIKU ) ,&
+                        PZEAST_OUT  ( KIIE+1:KIIU ,   KIJB:KIJE   , KIKU ) 
+     INTEGER         :: KIIB,KIIE,KIJB,KIJE,KIIU,KIJU,KIKU,KIHALO_1
      CHARACTER(len=4), OPTIONAL :: HDIR ! to send only halo on X or Y direction
      !
    END SUBROUTINE GET_HALO_START_D
 END INTERFACE
 INTERFACE
-   SUBROUTINE GET_HALO_STOP_D(PSRC,KNB_REQ,KREQ,HDIR)
+   SUBROUTINE GET_HALO_STOP_D(PSRC,KNB_REQ,KREQ,&
+     PZNORTH_OUT, PZSOUTH_OUT, PZWEST_OUT, PZEAST_OUT, &
+     KIIB,KIIE,KIJB,KIJE,KIIU,KIJU,KIKU,&
+     HDIR)
+     
      IMPLICIT NONE
-     REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC    ! variable at t
+     !
+     REAL, DIMENSION(KIIU,KIJU,KIKU), INTENT(INOUT) :: PSRC    ! variable at t
      ! acc declare present (PSRC)
-     INTEGER                               :: KNB_REQ , KREQ(8)
+     INTEGER                               :: KNB_REQ ,  KREQ(8)
+     REAL            :: PZSOUTH_OUT (   KIIB:KIIE   , 1:KIJB-1 , KIKU ) ,&
+                        PZNORTH_OUT (   KIIB:KIIE   , KIJE+1:KIJU , KIKU ) ,&
+                        PZWEST_OUT  ( 1:KIIB-1 ,   KIJB:KIJE   , KIKU ) ,&
+                        PZEAST_OUT  ( KIIE+1:KIIU ,   KIJB:KIJE   , KIKU ) 
+     INTEGER         :: KIIB,KIIE,KIJB,KIJE,KIIU,KIJU,KIKU
      CHARACTER(len=4), OPTIONAL :: HDIR ! to send only halo on X or Y direction
+     !
    END SUBROUTINE GET_HALO_STOP_D
 END INTERFACE
 INTERFACE
@@ -409,8 +435,9 @@ END MODULE MODD_HALO_D
 USE MODD_HALO_D
 
 !USE MODE_MNH_ZWORK, ONLY : GWEST , GEAST, GSOUTH , GNORTH
-!USE MODE_MNH_ZWORK, ONLY : IIU,IJU,IKU
-!USE MODE_MNH_ZWORK, ONLY : IIB,IJB ,IIE,IJE 
+USE MODE_MNH_ZWORK, ONLY : IIU,IJU,IKU
+USE MODE_MNH_ZWORK, ONLY : IIB,IJB ,IIE,IJE
+
 !!
 !USE MODE_DEVICE
 USE MODE_MPPDB
@@ -427,22 +454,30 @@ INTEGER            :: INB_REQ , IREQ(8)
 !
 CALL MPPDB_CHECK(PSRC,"GET_HALO_D big:PSRC")
 !
-CALL GET_HALO_START_D(PSRC,INB_REQ,IREQ,HDIR)
-CALL GET_HALO_STOP_D(PSRC,INB_REQ,IREQ,HDIR)
+CALL GET_HALO_START_D(PSRC,INB_REQ,IREQ,&
+     ZNORTH_IN , ZSOUTH_IN , ZWEST_IN , ZEAST_IN , &
+     ZNORTH_OUT, ZSOUTH_OUT, ZWEST_OUT, ZEAST_OUT, &
+     IIB,IIE,IJB,IJE,IIU,IJU,IKU,IHALO_1,HDIR)
+
+CALL GET_HALO_STOP_D(PSRC,INB_REQ,IREQ,&
+     ZNORTH_OUT, ZSOUTH_OUT, ZWEST_OUT, ZEAST_OUT, &
+     IIB,IIE,IJB,IJE,IIU,IJU,IKU,HDIR)
 !
 CALL MPPDB_CHECK(PSRC,"GET_HALO_D end:PSRC")
 !
 END SUBROUTINE GET_HALO_D
 !     #########################
-      SUBROUTINE GET_HALO_START_D(PSRC,KNB_REQ,KREQ,HDIR)
+SUBROUTINE GET_HALO_START_D(PSRC,KNB_REQ,KREQ,&
+     PZNORTH_IN , PZSOUTH_IN , PZWEST_IN , PZEAST_IN , &
+     PZNORTH_OUT, PZSOUTH_OUT, PZWEST_OUT, PZEAST_OUT, &
+     KIIB,KIIE,KIJB,KIJE,KIIU,KIJU,KIKU,KIHALO_1,&
+     HDIR)
 !     #########################
 #define MNH_GPUDIRECT
 !
 USE MODD_HALO_D
 
 USE MODE_MNH_ZWORK, ONLY : GWEST , GEAST, GSOUTH , GNORTH
-USE MODE_MNH_ZWORK, ONLY : IIU,IJU,IKU
-USE MODE_MNH_ZWORK, ONLY : IIB,IJB ,IIE,IJE 
 !
 USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD
 USE MODD_MPIF,    ONLY : MPI_STATUSES_IGNORE
@@ -453,9 +488,20 @@ USE MODE_MPPDB
 !
 IMPLICIT NONE
 !
-REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC    ! variable at t
+REAL, DIMENSION(KIIU,KIJU,KIKU), INTENT(INOUT) :: PSRC    ! variable at t
 ! acc declare present (PSRC)
 INTEGER                               :: KNB_REQ ,  KREQ(8)
+REAL            :: PZSOUTH_IN ( KIIB:KIIE   , KIJB:KIJB+KIHALO_1   , KIKU ) ,&
+                   PZNORTH_IN ( KIIB:KIIE   , KIJE-KIHALO_1:KIJE   , KIKU ) ,&
+                   PZWEST_IN  ( KIIB:KIIB+KIHALO_1   , KIJB:KIJE   , KIKU ) ,&
+                   PZEAST_IN  ( KIIE-KIHALO_1:KIIE   , KIJB:KIJE   , KIKU ) ,&
+       !
+                   PZSOUTH_OUT (   KIIB:KIIE   , 1:KIJB-1 , KIKU ) ,&
+                   PZNORTH_OUT (   KIIB:KIIE   , KIJE+1:KIJU , KIKU ) ,&
+                   PZWEST_OUT  ( 1:KIIB-1 ,   KIJB:KIJE   , KIKU ) ,&
+                   PZEAST_OUT  ( KIIE+1:KIIU ,   KIJB:KIJE   , KIKU ) 
+INTEGER         :: KIIB,KIIE,KIJB,KIJE,KIIU,KIJU,KIKU,KIHALO_1
+
 CHARACTER(len=4), OPTIONAL :: HDIR ! to send only halo on X or Y direction
 !
 INTEGER                          :: IERROR                 ! error return code 
@@ -464,19 +510,15 @@ INTEGER,PARAMETER :: IS_WEST=1 , IS_EAST=2, IS_SOUTH=3, IS_NORTH=4
 LOGICAL      :: LX , LY
 INTEGER      :: NB_REQ, IERR
 !
-INTEGER :: JI,JJ,JK, JIU,JJU,JKU
-
-JIU = SIZE(PSRC,1)
-JJU = SIZE(PSRC,2)
-JKU = SIZE(PSRC,3)
+INTEGER :: JI,JJ,JK 
 
 CALL INIT_HALO_D()
 
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 !$acc data present (PSRC) &
-!$acc present (ZNORTH_IN, ZSOUTH_IN, ZWEST_IN, ZEAST_IN) &
-!$acc present (ZNORTH_OUT, ZSOUTH_OUT, ZWEST_OUT, ZEAST_OUT) 
+!$acc present (PZNORTH_IN, PZSOUTH_IN, PZWEST_IN, PZEAST_IN) &
+!$acc present (PZNORTH_OUT, PZSOUTH_OUT, PZWEST_OUT, PZEAST_OUT) 
 
 
 LX = .FALSE.
@@ -490,7 +532,7 @@ ELSE
 !!$LY = ( HDIR == "01_Y"  .OR. HDIR == "S0_Y" )
 LX = ( HDIR == "01_X" .OR. HDIR == "S0_X" .OR. HDIR == "S0_Y" )
 LY = ( HDIR == "01_Y" .OR. HDIR == "S0_Y" .OR. HDIR == "S0_X" )
-!!$print *,"IIB=",IIB," HDIR=",HDIR," LX=",LX," LY=",LY ; call flush(6)
+!!$print *,"KIIB=",KIIB," HDIR=",HDIR," LX=",LX," LY=",LY ; call flush(6)
 END IF
 
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -504,10 +546,10 @@ NB_REQ = 0
 IF (LX) THEN
    IF (.NOT. GWEST) THEN
 #ifdef MNH_GPUDIRECT
-      !$acc host_data use_device(ZWEST_OUT)
+      !$acc host_data use_device(PZWEST_OUT)
 #endif
       NB_REQ = NB_REQ + 1
-      CALL MPI_IRECV(ZWEST_OUT,SIZE(ZWEST_OUT),MNHREAL_MPI,NP_WEST-1,1000+IS_EAST,&
+      CALL MPI_IRECV(PZWEST_OUT,SIZE(PZWEST_OUT),MNHREAL_MPI,NP_WEST-1,1000+IS_EAST,&
                      NMNH_COMM_WORLD,KREQ(NB_REQ),IERR)
 #ifdef MNH_GPUDIRECT
       !$acc end host_data
@@ -515,10 +557,10 @@ IF (LX) THEN
    END IF
    IF (.NOT.GEAST) THEN 
 #ifdef MNH_GPUDIRECT
-      !$acc host_data use_device(ZEAST_OUT)
+      !$acc host_data use_device(PZEAST_OUT)
 #endif
       NB_REQ = NB_REQ + 1
-      CALL MPI_IRECV(ZEAST_OUT,SIZE(ZEAST_OUT),MNHREAL_MPI,NP_EAST-1,1000+IS_WEST,&
+      CALL MPI_IRECV(PZEAST_OUT,SIZE(PZEAST_OUT),MNHREAL_MPI,NP_EAST-1,1000+IS_WEST,&
                      NMNH_COMM_WORLD,KREQ(NB_REQ),IERR)
 #ifdef MNH_GPUDIRECT
       !$acc end host_data
@@ -529,10 +571,10 @@ END IF
 IF (LY) THEN
    IF (.NOT.GSOUTH) THEN
 #ifdef MNH_GPUDIRECT
-      !$acc host_data use_device(ZSOUTH_OUT)
+      !$acc host_data use_device(PZSOUTH_OUT)
 #endif
       NB_REQ = NB_REQ + 1
-      CALL MPI_IRECV(ZSOUTH_OUT,SIZE(ZSOUTH_OUT),MNHREAL_MPI,NP_SOUTH-1,1000+IS_NORTH,&
+      CALL MPI_IRECV(PZSOUTH_OUT,SIZE(PZSOUTH_OUT),MNHREAL_MPI,NP_SOUTH-1,1000+IS_NORTH,&
                      NMNH_COMM_WORLD,KREQ(NB_REQ),IERR)
 #ifdef MNH_GPUDIRECT
       !$acc end host_data
@@ -540,10 +582,10 @@ IF (LY) THEN
    ENDIF
    IF (.NOT.GNORTH) THEN
 #ifdef MNH_GPUDIRECT
-      !$acc host_data use_device(ZNORTH_OUT)
+      !$acc host_data use_device(PZNORTH_OUT)
 #endif
       NB_REQ = NB_REQ + 1
-      CALL MPI_IRECV(ZNORTH_OUT,SIZE(ZNORTH_OUT),MNHREAL_MPI,NP_NORTH-1,1000+IS_SOUTH,&
+      CALL MPI_IRECV(PZNORTH_OUT,SIZE(PZNORTH_OUT),MNHREAL_MPI,NP_NORTH-1,1000+IS_SOUTH,&
                      NMNH_COMM_WORLD,KREQ(NB_REQ),IERR)
 #ifdef MNH_GPUDIRECT
       !$acc end host_data
@@ -558,15 +600,15 @@ END IF
 IF (LX) THEN
    IF (.NOT. GWEST) THEN
       !$acc kernels async(IS_WEST)
-      !$mnh_expand_array(JI=IIB:IIB+IHALO_1 , JJ=IJB:IJE , JK=1:JKU )
-           ZWEST_IN ( IIB:IIB+IHALO_1  ,    IJB:IJE  , : )  = PSRC( IIB:IIB+IHALO_1  ,  IJB:IJE  , : )
+      !$mnh_expand_array(JI=KIIB:KIIB+KIHALO_1 , JJ=KIJB:KIJE , JK=1:KIKU )
+           PZWEST_IN ( KIIB:KIIB+KIHALO_1  ,    KIJB:KIJE  , : )  = PSRC( KIIB:KIIB+KIHALO_1  ,  KIJB:KIJE  , : )
       !$mnh_end_expand_array()
       !$acc end kernels
    END IF
    IF (.NOT.GEAST) THEN
       !$acc kernels async(IS_EAST)
-      !$mnh_expand_array(JI=IIE-IHALO_1:IIE , JJ=IJB:IJE , JK=1:JKU)
-           ZEAST_IN ( IIE-IHALO_1:IIE  ,    IJB:IJE  , : )  = PSRC( IIE-IHALO_1:IIE  ,  IJB:IJE  , : )
+      !$mnh_expand_array(JI=KIIE-KIHALO_1:KIIE , JJ=KIJB:KIJE , JK=1:KIKU)
+           PZEAST_IN ( KIIE-KIHALO_1:KIIE  ,    KIJB:KIJE  , : )  = PSRC( KIIE-KIHALO_1:KIIE  ,  KIJB:KIJE  , : )
       !$mnh_end_expand_array()
       !$acc end kernels
    ENDIF
@@ -575,15 +617,15 @@ END IF
 IF (LY) THEN
    IF (.NOT.GSOUTH) THEN
       !$acc kernels async(IS_SOUTH)
-      !$mnh_expand_array(JI=IIB:IIE , JJ=IJB:IJB+IHALO_1 , JK=1:JKU )
-           ZSOUTH_IN ( IIB:IIE  ,    IJB:IJB+IHALO_1  , : ) = PSRC( IIB:IIE  ,    IJB:IJB+IHALO_1  , : )
+      !$mnh_expand_array(JI=KIIB:KIIE , JJ=KIJB:KIJB+KIHALO_1 , JK=1:KIKU )
+           PZSOUTH_IN ( KIIB:KIIE  ,    KIJB:KIJB+KIHALO_1  , : ) = PSRC( KIIB:KIIE  ,    KIJB:KIJB+KIHALO_1  , : )
       !$mnh_end_expand_array()
       !$acc end kernels
    ENDIF
    IF (.NOT.GNORTH) THEN
       !$acc kernels async(IS_NORTH)
-      !$mnh_expand_array(JI=IIB:IIE , JJ=IJE-IHALO_1:IJE , JK=1:JKU )
-           ZNORTH_IN ( IIB:IIE  ,    IJE-IHALO_1:IJE  , : ) = PSRC( IIB:IIE  ,    IJE-IHALO_1:IJE  , : )
+      !$mnh_expand_array(JI=KIIB:KIIE , JJ=KIJE-KIHALO_1:KIJE , JK=1:KIKU )
+           PZNORTH_IN ( KIIB:KIIE  ,    KIJE-KIHALO_1:KIJE  , : ) = PSRC( KIIB:KIIE  ,    KIJE-KIHALO_1:KIJE  , : )
       !$mnh_end_expand_array()
       !$acc end kernels
    ENDIF   
@@ -597,12 +639,12 @@ ENDIF
 IF (LX) THEN
    IF (.NOT. GWEST) THEN
 #ifdef MNH_GPUDIRECT
-      !$acc host_data use_device(ZWEST_IN)
+      !$acc host_data use_device(PZWEST_IN)
 #else
-      !$acc update host(ZWEST_IN)
+      !$acc update host(PZWEST_IN)
 #endif
       NB_REQ = NB_REQ + 1
-      CALL MPI_ISEND(ZWEST_IN,SIZE(ZWEST_IN)  ,MNHREAL_MPI,NP_WEST-1,1000+IS_WEST,&
+      CALL MPI_ISEND(PZWEST_IN,SIZE(PZWEST_IN)  ,MNHREAL_MPI,NP_WEST-1,1000+IS_WEST,&
                      NMNH_COMM_WORLD,KREQ(NB_REQ),IERR)
 #ifdef MNH_GPUDIRECT
       !$acc end host_data
@@ -610,12 +652,12 @@ IF (LX) THEN
    END IF
    IF (.NOT.GEAST) THEN
 #ifdef MNH_GPUDIRECT
-      !$acc host_data use_device(ZEAST_IN)
+      !$acc host_data use_device(PZEAST_IN)
 #else
-      !$acc update host(ZEAST_IN)
+      !$acc update host(PZEAST_IN)
 #endif
       NB_REQ = NB_REQ + 1
-      CALL MPI_ISEND(ZEAST_IN,SIZE(ZEAST_IN)  ,MNHREAL_MPI,NP_EAST-1,1000+IS_EAST,&
+      CALL MPI_ISEND(PZEAST_IN,SIZE(PZEAST_IN)  ,MNHREAL_MPI,NP_EAST-1,1000+IS_EAST,&
                      NMNH_COMM_WORLD,KREQ(NB_REQ),IERR)
 #ifdef MNH_GPUDIRECT
       !$acc end host_data
@@ -626,12 +668,12 @@ END IF
 IF (LY) THEN
    IF (.NOT.GSOUTH) THEN
 #ifdef MNH_GPUDIRECT
-      !$acc host_data use_device(ZSOUTH_IN)
+      !$acc host_data use_device(PZSOUTH_IN)
 #else
-      !$acc update host(ZSOUTH_IN)
+      !$acc update host(PZSOUTH_IN)
 #endif
       NB_REQ = NB_REQ + 1
-      CALL MPI_ISEND(ZSOUTH_IN,SIZE(ZSOUTH_IN)  ,MNHREAL_MPI,NP_SOUTH-1,1000+IS_SOUTH,&
+      CALL MPI_ISEND(PZSOUTH_IN,SIZE(PZSOUTH_IN)  ,MNHREAL_MPI,NP_SOUTH-1,1000+IS_SOUTH,&
                      NMNH_COMM_WORLD,KREQ(NB_REQ),IERR)
 #ifdef MNH_GPUDIRECT
       !$acc end host_data
@@ -639,12 +681,12 @@ IF (LY) THEN
    ENDIF
    IF (.NOT.GNORTH) THEN
 #ifdef MNH_GPUDIRECT
-      !$acc host_data use_device(ZNORTH_IN)
+      !$acc host_data use_device(PZNORTH_IN)
 #else
-      !$acc update host(ZNORTH_IN)
+      !$acc update host(PZNORTH_IN)
 #endif
       NB_REQ = NB_REQ + 1
-      CALL MPI_ISEND(ZNORTH_IN,SIZE(ZNORTH_IN)  ,MNHREAL_MPI,NP_NORTH-1,1000+IS_NORTH,&
+      CALL MPI_ISEND(PZNORTH_IN,SIZE(PZNORTH_IN)  ,MNHREAL_MPI,NP_NORTH-1,1000+IS_NORTH,&
                      NMNH_COMM_WORLD,KREQ(NB_REQ),IERR)
 #ifdef MNH_GPUDIRECT
       !$acc end host_data
@@ -659,15 +701,18 @@ KNB_REQ = NB_REQ
 END SUBROUTINE GET_HALO_START_D
 !
 !     #########################
-      SUBROUTINE GET_HALO_STOP_D(PSRC,KNB_REQ,KREQ,HDIR)
+SUBROUTINE GET_HALO_STOP_D(PSRC,KNB_REQ,KREQ,&
+     PZNORTH_OUT, PZSOUTH_OUT, PZWEST_OUT, PZEAST_OUT, &
+     KIIB,KIIE,KIJB,KIJE,KIIU,KIJU,KIKU,&
+     HDIR)
 !     #########################
 #define MNH_GPUDIRECT
 !
 USE MODD_HALO_D
 
 USE MODE_MNH_ZWORK, ONLY : GWEST , GEAST, GSOUTH , GNORTH
-USE MODE_MNH_ZWORK, ONLY : IIU,IJU,IKU
-USE MODE_MNH_ZWORK, ONLY : IIB,IJB ,IIE,IJE 
+!!$USE MODE_MNH_ZWORK, ONLY : IIU,IJU,IKU
+!!$USE MODE_MNH_ZWORK, ONLY : IIB,IJB ,IIE,IJE 
 !
 USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD
 USE MODD_MPIF,    ONLY : MPI_STATUSES_IGNORE
@@ -678,9 +723,15 @@ USE MODE_MPPDB
 !
 IMPLICIT NONE
 !
-REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC    ! variable at t
+REAL, DIMENSION(KIIU,KIJU,KIKU), INTENT(INOUT) :: PSRC    ! variable at t
 ! acc declare present (PSRC)
 INTEGER                               :: KNB_REQ , KREQ(8)
+REAL            :: PZSOUTH_OUT (   KIIB:KIIE   , 1:KIJB-1 , KIKU ) ,&
+                   PZNORTH_OUT (   KIIB:KIIE   , KIJE+1:KIJU , KIKU ) ,&
+                   PZWEST_OUT  ( 1:KIIB-1 ,   KIJB:KIJE   , KIKU ) ,&
+                   PZEAST_OUT  ( KIIE+1:KIIU ,   KIJB:KIJE   , KIKU ) 
+INTEGER         :: KIIB,KIIE,KIJB,KIJE,KIIU,KIJU,KIKU
+
 CHARACTER(len=4), OPTIONAL :: HDIR ! to send only halo on X or Y direction
 !
 INTEGER                          :: IERROR                 ! error return code 
@@ -689,19 +740,14 @@ INTEGER,PARAMETER :: IS_WEST=1 , IS_EAST=2, IS_SOUTH=3, IS_NORTH=4
 LOGICAL      :: LX , LY
 INTEGER      :: NB_REQ, IERR
 !
-INTEGER :: JI,JJ,JK, JIU,JJU,JKU
-
-JIU = SIZE(PSRC,1)
-JJU = SIZE(PSRC,2)
-JKU = SIZE(PSRC,3)
+INTEGER :: JI,JJ,JK
 
 CALL INIT_HALO_D()
 
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 !$acc data  present (PSRC) &
-!$acc present (ZNORTH_IN, ZSOUTH_IN, ZWEST_IN, ZEAST_IN) &
-!$acc present (ZNORTH_OUT, ZSOUTH_OUT, ZWEST_OUT, ZEAST_OUT)
+!$acc & present (PZNORTH_OUT,PZSOUTH_OUT,PZWEST_OUT,PZEAST_OUT)
 
 LX = .FALSE.
 LY = .FALSE. 
@@ -714,7 +760,7 @@ ELSE
 !!$LY = ( HDIR == "01_Y"  .OR. HDIR == "S0_Y" )
 LX = ( HDIR == "01_X" .OR. HDIR == "S0_X" .OR. HDIR == "S0_Y" )
 LY = ( HDIR == "01_Y" .OR. HDIR == "S0_Y" .OR. HDIR == "S0_X" )
-!!$print *,"IIB=",IIB," HDIR=",HDIR," LX=",LX," LY=",LY ; call flush(6)
+!!$print *,"KIIB=",KIIB," HDIR=",HDIR," LX=",LX," LY=",LY ; call flush(6)
 END IF
 
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -730,21 +776,21 @@ CALL MPI_WAITALL(NB_REQ,KREQ,MPI_STATUSES_IGNORE,IERR)
 IF (LX) THEN
    IF (.NOT.GWEST) THEN
 #ifndef MNH_GPUDIRECT
-   !$acc update device(ZWEST_OUT) async(IS_WEST)
+   !$acc update device(PZWEST_OUT) async(IS_WEST)
 #endif
    !$acc kernels async(IS_WEST)
-   !$mnh_expand_array(JI=1:IIB-1 , JJ=IJB:IJE , JK=1:JKU )
-        PSRC( 1:IIB-1  ,      IJB:IJE      , : ) = ZWEST_OUT( 1:IIB-1  ,   IJB:IJE    , : )
+   !$mnh_expand_array(JI=1:KIIB-1 , JJ=KIJB:KIJE , JK=1:KIKU )
+        PSRC( 1:KIIB-1  ,      KIJB:KIJE      , : ) = PZWEST_OUT( 1:KIIB-1  ,   KIJB:KIJE    , : )
    !$mnh_end_expand_array()
    !$acc end kernels
    ENDIF
    IF (.NOT.GEAST) THEN
 #ifndef MNH_GPUDIRECT
-   !$acc update device(ZEAST_OUT) async(IS_EAST)
+   !$acc update device(PZEAST_OUT) async(IS_EAST)
 #endif
    !$acc kernels async(IS_EAST)
-   !$mnh_expand_array(JI=IIE+1:IIU , JJ=IJB:IJE , JK=1:JKU )
-        PSRC( IIE+1:IIU  ,      IJB:IJE      , : ) = ZEAST_OUT( IIE+1:IIU  ,   IJB:IJE    , : )  
+   !$mnh_expand_array(JI=KIIE+1:KIIU , JJ=KIJB:KIJE , JK=1:KIKU )
+        PSRC( KIIE+1:KIIU  ,      KIJB:KIJE      , : ) = PZEAST_OUT( KIIE+1:KIIU  ,   KIJB:KIJE    , : )  
    !$mnh_end_expand_array()
    !$acc end kernels
    ENDIF
@@ -752,21 +798,21 @@ END IF
 IF (LY) THEN
    IF (.NOT.GSOUTH) THEN
 #ifndef MNH_GPUDIRECT
-   !$acc update device(ZSOUTH_OUT) async(IS_SOUTH)
+   !$acc update device(PZSOUTH_OUT) async(IS_SOUTH)
 #endif
    !$acc kernels async(IS_SOUTH)
-   !$mnh_expand_array(JI=IIB:IIE , JJ=1:IJB-1 , JK=1:JKU )
-        PSRC(      IIB:IIE       ,  1:IJB-1 , : ) = ZSOUTH_OUT(  IIB:IIE     , 1:IJB-1  , : )
+   !$mnh_expand_array(JI=KIIB:KIIE , JJ=1:KIJB-1 , JK=1:KIKU )
+        PSRC(      KIIB:KIIE       ,  1:KIJB-1 , : ) = PZSOUTH_OUT(  KIIB:KIIE     , 1:KIJB-1  , : )
    !$mnh_end_expand_array()
    !$acc end kernels
    ENDIF
    IF (.NOT.GNORTH) THEN
 #ifndef MNH_GPUDIRECT
-   !$acc update device(ZNORTH_OUT) async(IS_NORTH)
+   !$acc update device(PZNORTH_OUT) async(IS_NORTH)
 #endif
    !$acc kernels async(IS_NORTH)
-   !$mnh_expand_array(JI=IIB:IIE , JJ=IJE+1:IJU , JK=1:JKU )
-        PSRC(      IIB:IIE       , IJE+1:IJU , : ) = ZNORTH_OUT (  IIB:IIE     , IJE+1:IJU  , : )
+   !$mnh_expand_array(JI=KIIB:KIIE , JJ=KIJE+1:KIJU , JK=1:KIKU )
+        PSRC(      KIIB:KIIE       , KIJE+1:KIJU , : ) = PZNORTH_OUT (  KIIB:KIIE     , KIJE+1:KIJU  , : )
    !$mnh_end_expand_array()
    !$acc end kernels
    ENDIF