diff --git a/MNH/get_halo.f90 b/MNH/get_halo.f90
index 48dcc0e05208005ec9c34e21720af50208bdf28b..2a2ccc43d7a0f7cfb2d1b530d2a7a57863f2c2db 100644
--- a/MNH/get_halo.f90
+++ b/MNH/get_halo.f90
@@ -18,9 +18,10 @@ TYPE(HALO2LIST_ll), POINTER         :: TP_PSRC_HALO2_ll          ! halo2 for SRC
 !
 END SUBROUTINE GET_HALO2
 !
-SUBROUTINE GET_HALO(PSRC)
+SUBROUTINE GET_HALO(PSRC,HDIR)
 !
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC    ! variable at t
+CHARACTER(len=4), OPTIONAL :: HDIR ! to send only halo on X or Y direction
 !
 END SUBROUTINE GET_HALO
 !
@@ -70,7 +71,7 @@ END SUBROUTINE GET_HALO2
 !-------------------------------------------------------------------------------
 !-------------------------------------------------------------------------------
 !     #########################
-      SUBROUTINE GET_HALO(PSRC)
+      SUBROUTINE GET_HALO(PSRC,HDIR)
 !     #########################
 !
 USE MODE_ll
@@ -79,6 +80,7 @@ USE MODD_ARGSLIST_ll, ONLY : LIST_ll
 IMPLICIT NONE
 !
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC    ! variable at t
+CHARACTER(len=4), OPTIONAL :: HDIR ! to send only halo on X or Y direction
 !
 TYPE(LIST_ll)     , POINTER      :: TZ_PSRC_ll               ! halo
 INTEGER                          :: IERROR                 ! error return code 
@@ -86,7 +88,7 @@ INTEGER                          :: IERROR                 ! error return code
 NULLIFY( TZ_PSRC_ll)
 !
 CALL ADD3DFIELD_ll(TZ_PSRC_ll,PSRC)
-CALL UPDATE_HALO_ll(TZ_PSRC_ll,IERROR)
+CALL UPDATE_HALO_ll(TZ_PSRC_ll,IERROR, HDIR=HDIR )
 CALL CLEANLIST_ll(TZ_PSRC_ll)
 !
 END SUBROUTINE GET_HALO
diff --git a/MNH/ppm.f90 b/MNH/ppm.f90
index ba517e6a5c745dfe58e65b751525bfbb2528ab37..7761f294fc2c64abba1187303fbb12d7e1ad3ae8 100644
--- a/MNH/ppm.f90
+++ b/MNH/ppm.f90
@@ -197,6 +197,7 @@ USE MODD_CONF
 !BEG JUAN PPM_LL
 USE MODD_LUNIT
 !END JUAN PPM_LL
+USE MODE_MPPDB
 !
 IMPLICIT NONE
 !
@@ -257,7 +258,9 @@ IF(NHALO /= 1) THEN
     CALL ABORT
     STOP
 ENDIF
-CALL GET_HALO(PSRC)
+!
+CALL GET_HALO(PSRC,HDIR="01_X")
+!
 PR=PSRC
 ZQL=PSRC
 ZQR=PSRC
@@ -279,7 +282,7 @@ SELECT CASE ( HLBCX(1) ) ! X direction LBC type: (1) for left side
 !
 CASE ('CYCL','WALL')          ! In that case one must have HLBCX(1) == HLBCX(2)
 !
-! calculate dmq
+! calculate dmq ZDMQ(i) = Fct[ PSRC(i-1),PSRC(i+1) ]
    ZDMQ = DIF2X(PSRC)
 !
 ! monotonize the difference followinq eq. 5 in Lin94
@@ -312,7 +315,8 @@ CASE ('CYCL','WALL')          ! In that case one must have HLBCX(1) == HLBCX(2)
 !
 !  update ZDMQ HALO before next/further  utilisation 
 !
-   CALL  GET_HALO(ZDMQ)
+   CALL  GET_HALO(ZDMQ,HDIR="01_X")  ! PB AVEC HDIR="X1"
+   CALL MPPDB_CHECK3DM("PPM::PPM_01_X CYCL ::ZDMQ",PRECISION,ZDMQ)
 !
 ! calculate qL and qR with the modified dmq
 !
@@ -321,7 +325,7 @@ CASE ('CYCL','WALL')          ! In that case one must have HLBCX(1) == HLBCX(2)
    ZQL0(IIB:IIE+1,IJS:IJN,:) = 0.5*(PSRC(IIB:IIE+1,IJS:IJN,:) + PSRC(IIB-1:IIE,IJS:IJN,:)) - &
         (ZDMQ(IIB:IIE+1,IJS:IJN,:) - ZDMQ(IIB-1:IIE,IJS:IJN,:))/6.0
 !
-   CALL  GET_HALO(ZQL0)
+   CALL  GET_HALO(ZQL0,HDIR="01_X")
 !  
 !  WEST BOUND
 !
@@ -329,7 +333,7 @@ CASE ('CYCL','WALL')          ! In that case one must have HLBCX(1) == HLBCX(2)
 !
    ZQR0(IIB-1:IIE,IJS:IJN,:) = ZQL0(IIB:IIE+1,IJS:IJN,:)
 !
-   CALL  GET_HALO(ZQR0)
+   CALL  GET_HALO(ZQR0,HDIR="01_X")
 !
 !  EAST BOUND
 !
@@ -374,7 +378,7 @@ CASE ('CYCL','WALL')          ! In that case one must have HLBCX(1) == HLBCX(2)
         (ZDQ(IIB-1:IIE,IJS:IJN,:) - (1.0 - 2.0*ZCR(IIB:IIE+1,IJS:IJN,:)/3.0)        &
         * ZQ6(IIB-1:IIE,IJS:IJN,:))
 !
-   CALL GET_HALO(ZFPOS)
+   CALL GET_HALO(ZFPOS,HDIR="Z1_X")
 !
 !  WEST BOUND
 !
@@ -385,13 +389,14 @@ CASE ('CYCL','WALL')          ! In that case one must have HLBCX(1) == HLBCX(2)
    ZFNEG(:,IJS:IJN,:) = ZQL(:,IJS:IJN,:) - 0.5*ZCR(:,IJS:IJN,:) *      &            
         ( ZDQ(:,IJS:IJN,:) + (1.0 + 2.0*ZCR(:,IJS:IJN,:)/3.0) * ZQ6(:,IJS:IJN,:) )
 !
-   CALL GET_HALO(ZFNEG)
+   CALL GET_HALO(ZFNEG,HDIR="Z1_X")
 !
 ! advect the actual field in X direction by U*dt
 !
    PR = DXF( ZCR*MXM(PRHO)*( ZFPOS*(0.5+SIGN(0.5,ZCR)) + & 
                              ZFNEG*(0.5-SIGN(0.5,ZCR)) ) )
-   CALL GET_HALO(PR)   
+   CALL GET_HALO(PR,HDIR="01_X")   
+   CALL MPPDB_CHECK3DM("PPM::PPM_01_X CYCL ::PR",PRECISION,PR)
 !
 !
 !*       1.2    NON-CYCLIC BOUNDARY CONDITIONS IN THE X DIRECTION 
@@ -447,7 +452,8 @@ CASE('OPEN')
 !
 !  update ZDMQ HALO before next/further  utilisation 
 !
-   CALL  GET_HALO(ZDMQ)
+   CALL  GET_HALO(ZDMQ,HDIR="01_X")
+   CALL MPPDB_CHECK3DM("PPM::PPM_01_X OPEN ::ZDMQ",PRECISION,ZDMQ)
 !
 ! calculate qL and qR
 !
@@ -456,7 +462,7 @@ CASE('OPEN')
    ZQL0(IIB:IIE+1,IJS:IJN,:) = 0.5*(PSRC(IIB:IIE+1,IJS:IJN,:) + PSRC(IIB-1:IIE,IJS:IJN,:)) - &
         (ZDMQ(IIB:IIE+1,IJS:IJN,:) - ZDMQ(IIB-1:IIE,IJS:IJN,:))/6.0
 !
-   CALL  GET_HALO(ZQL0)
+   CALL  GET_HALO(ZQL0,HDIR="01_X")
 !  
 !  WEST BOUND
 !
@@ -466,7 +472,7 @@ CASE('OPEN')
 !
    ZQR0(IIB-1:IIE,IJS:IJN,:) = ZQL0(IIB:IIE+1,IJS:IJN,:)
 !
-   CALL  GET_HALO(ZQR0)
+   CALL  GET_HALO(ZQR0,HDIR="01_X")
 !
 !  EAST BOUND
 !
@@ -517,7 +523,7 @@ CASE('OPEN')
         (ZDQ(IIB-1:IIE,IJS:IJN,:) - (1.0 - 2.0*ZCR(IIB:IIE+1,IJS:IJN,:)/3.0)        &
         * ZQ6(IIB-1:IIE,IJS:IJN,:))
 !
-   CALL GET_HALO(ZFPOS)
+   CALL GET_HALO(ZFPOS,HDIR="01_X")
 !
 !
 !  WEST BOUND
@@ -538,7 +544,7 @@ CASE('OPEN')
    ZFNEG(:,IJS:IJN,:) = ZQL(:,IJS:IJN,:) - 0.5*ZCR(:,IJS:IJN,:) *      &            
         ( ZDQ(:,IJS:IJN,:) + (1.0 + 2.0*ZCR(:,IJS:IJN,:)/3.0) * ZQ6(:,IJS:IJN,:) )
 !
-   CALL GET_HALO(ZFNEG)
+   CALL GET_HALO(ZFNEG,HDIR="01_X")
 !
 !  EAST BOUND
 !
@@ -552,7 +558,7 @@ CASE('OPEN')
 !
    PR = DXF( ZCR*MXM(PRHO)*( ZFPOS*(0.5+SIGN(0.5,ZCR)) + & 
                              ZFNEG*(0.5-SIGN(0.5,ZCR)) ) )
-   CALL GET_HALO(PR)   
+   CALL GET_HALO(PR,HDIR="01_X")   
 !
 !
 END SELECT
@@ -644,6 +650,7 @@ USE MODD_CONF
 !BEG JUAN PPM_LL
 USE MODD_LUNIT
 !END JUAN PPM_LL
+USE MODE_MPPDB
 !
 IMPLICIT NONE
 !
@@ -699,8 +706,9 @@ IF(NHALO /= 1) THEN
     CALL ABORT
     STOP
 ENDIF
-CALL GET_HALO(PSRC)
-
+!
+CALL GET_HALO(PSRC,HDIR="01_Y")
+!
 !
 !-------------------------------------------------------------------------------
 !
@@ -756,14 +764,15 @@ CASE ('CYCL','WALL')          ! In that case one must have HLBCY(1) == HLBCY(2)
 !
 !  update ZDMQ HALO before next/further  utilisation 
 !
-   CALL  GET_HALO(ZDMQ)
+   CALL  GET_HALO(ZDMQ,HDIR="01_Y")
+   CALL MPPDB_CHECK3DM("PPM::PPM_01_Y CYCL ::ZDMQ",PRECISION,ZDMQ)
 !
 ! calculate qL and qR with the modified dmq
 !
    ZQL0(IIW:IIA,IJB:IJE+1,:) = 0.5*(PSRC(IIW:IIA,IJB:IJE+1,:) + PSRC(IIW:IIA,IJB-1:IJE,:)) - &
         (ZDMQ(IIW:IIA,IJB:IJE+1,:) - ZDMQ(IIW:IIA,IJB-1:IJE,:))/6.0
 !
-   CALL  GET_HALO(ZQL0)
+   CALL  GET_HALO(ZQL0,HDIR="01_Y")
 !  
 !  SOUTH BOUND
 !
@@ -771,7 +780,7 @@ CASE ('CYCL','WALL')          ! In that case one must have HLBCY(1) == HLBCY(2)
 !
    ZQR0(IIW:IIA,IJB-1:IJE,:) = ZQL0(IIW:IIA,IJB:IJE+1,:)
 !
-   CALL  GET_HALO(ZQR0)
+   CALL  GET_HALO(ZQR0,HDIR="01_Y")
 !
 !  NORTH BOUND
 !
@@ -816,7 +825,7 @@ CASE ('CYCL','WALL')          ! In that case one must have HLBCY(1) == HLBCY(2)
         (ZDQ(IIW:IIA,IJB-1:IJE,:) - (1.0 - 2.0*ZCR(IIW:IIA,IJB:IJE+1,:)/3.0)        &
         * ZQ6(IIW:IIA,IJB-1:IJE,:))
 !
-   CALL GET_HALO(ZFPOS)
+   CALL GET_HALO(ZFPOS,HDIR="01_Y")
 !
 ! SOUTH BOUND
 !
@@ -827,13 +836,14 @@ CASE ('CYCL','WALL')          ! In that case one must have HLBCY(1) == HLBCY(2)
    ZFNEG(IIW:IIA,:,:) = ZQL(IIW:IIA,:,:) - 0.5*ZCR(IIW:IIA,:,:) *      &            
         ( ZDQ(IIW:IIA,:,:) + (1.0 + 2.0*ZCR(IIW:IIA,:,:)/3.0) * ZQ6(IIW:IIA,:,:) )
 !
-   CALL GET_HALO(ZFNEG)
+   CALL GET_HALO(ZFNEG,HDIR="01_Y")
 !
 ! advect the actual field in Y direction by V*dt
 !
    PR = DYF( ZCR*MYM(PRHO)*( ZFPOS*(0.5+SIGN(0.5,ZCR)) + & 
                              ZFNEG*(0.5-SIGN(0.5,ZCR)) ) )
-   CALL GET_HALO(PR) 
+   CALL GET_HALO(PR,HDIR="01_Y") 
+   CALL MPPDB_CHECK3DM("PPM::PPM_01_Y CYCL ::PR",PRECISION,PR)
 !
 !*       2.2    NON-CYCLIC BOUNDARY CONDITIONS IN THE Y DIRECTION
 !               -------------------------------------------------
@@ -876,14 +886,14 @@ CASE('OPEN')
 !
 !  update ZDMQ HALO before next/further  utilisation 
 !
-   CALL  GET_HALO(ZDMQ)  
+   CALL  GET_HALO(ZDMQ,HDIR="01_Y")  
 !
 ! calculate qL and qR with the modified dmq
 !
    ZQL0(IIW:IIA,IJB:IJE+1,:) = 0.5*(PSRC(IIW:IIA,IJB:IJE+1,:) + PSRC(IIW:IIA,IJB-1:IJE,:)) - &
         (ZDMQ(IIW:IIA,IJB:IJE+1,:) - ZDMQ(IIW:IIA,IJB-1:IJE,:))/6.0
 !
-   CALL  GET_HALO(ZQL0)
+   CALL  GET_HALO(ZQL0,HDIR="01_Y")
 !  
 !  SOUTH BOUND
 !
@@ -938,7 +948,7 @@ CASE('OPEN')
         (ZDQ(IIW:IIA,IJB-1:IJE,:) - (1.0 - 2.0*ZCR(IIW:IIA,IJB:IJE+1,:)/3.0)        &
         * ZQ6(IIW:IIA,IJB-1:IJE,:))
 !
-   CALL GET_HALO(ZFPOS)
+   CALL GET_HALO(ZFPOS,HDIR="01_Y")
 !
 !
 ! advection flux at open boundary when u(IJB) > 0
@@ -960,7 +970,7 @@ CASE('OPEN')
    ZFNEG(IIW:IIA,:,:) = ZQL(IIW:IIA,:,:) - 0.5*ZCR(IIW:IIA,:,:) *      &            
         ( ZDQ(IIW:IIA,:,:) + (1.0 + 2.0*ZCR(IIW:IIA,:,:)/3.0) * ZQ6(IIW:IIA,:,:) )
 !
-   CALL GET_HALO(ZFNEG)
+   CALL GET_HALO(ZFNEG,HDIR="01_Y")
 !
 ! advection flux at open boundary when u(IJE+1) < 0
 !
@@ -976,7 +986,7 @@ CASE('OPEN')
    PR = DYF( ZCR*MYM(PRHO)*( ZFPOS*(0.5+SIGN(0.5,ZCR)) + & 
                              ZFNEG*(0.5-SIGN(0.5,ZCR)) ) )
 !
-   CALL GET_HALO(PR)
+   CALL GET_HALO(PR,HDIR="01_Y")
 !
 !
 END SELECT
@@ -1066,6 +1076,7 @@ USE MODI_GET_HALO
 USE MODD_CONF
 USE MODD_PARAMETERS
 !USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll
+USE MODE_MPPDB
 !
 IMPLICIT NONE
 !
@@ -1200,6 +1211,7 @@ ZFNEG(:,:,IKE+1) = (ZQR(:,:,IKE)-PSRC(:,:,IKE+1))*ZCR(:,:,IKE+1) + &
 PR = DZF( ZCR*MZM(PRHO)*( ZFPOS*(0.5+SIGN(0.5,ZCR)) + & 
                           ZFNEG*(0.5-SIGN(0.5,ZCR)) ) )
 CALL GET_HALO(PR)
+CALL MPPDB_CHECK3DM("PPM::PPM_01_Z ::PR",PRECISION,PR)
 !
 CONTAINS
 !
@@ -1293,6 +1305,7 @@ USE MODD_CONF
 USE MODD_LUNIT
 USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll
 !END JUAN PPM_LL
+USE MODE_MPPDB
 !
 IMPLICIT NONE
 !
@@ -1366,9 +1379,11 @@ PR=PSRC
 !
 !BEG JUAN PPM_LL
 !
-!   ZPATH(i) = Fct[ PSRC(i),PSRC(i-1),PSRC(i+1),PSRC(i-2)]
+!   i=IIB+1:IIE  (  inner domain IIB exclude )
+!          ZPATH(i)   = Fct[ PSRC(i)  ,PSRC(i-1),PSRC(i+1),PSRC(i-2) ]    
 !
-!       inner domain       
+! doc MNH  ZPATH(i+1) = Fct[ PSRC(i+1),PSRC(i)  ,PSRC(i+2),PSRC(i-1) ] 
+!      
 !
 ZPHAT(IIB+1:IIE,IJS:IJN,:) = ( 7.0 * &
                        ( PSRC(IIB+1:IIE  ,IJS:IJN,:) + PSRC(IIB  :IIE-1,IJS:IJN,:) ) - &
@@ -1386,6 +1401,8 @@ CASE ('CYCL','WALL')            ! In that case one must have HLBCX(1) == HLBCX(2
 !!$   ZPHAT(IIB-1,:,:) = ZPHAT(IIE,:,:)
 !
 !  WEST BOUND 
+!  i=IIB ( need halo2 psrc(iib-2) )
+!   ZPATH(IIB) = Fct[ PSRC(IIB),PSRC(IIB-1),PSRC(IIB+1),PSRC(IIB-2) ] 
 !
    ZPHAT(IIB  ,IJS:IJN,:) = ( 7.0 * &
                       ( PSRC(IIB  ,IJS:IJN,:) + PSRC(IIB-1,IJS:IJN,:)                  ) - &
@@ -1394,7 +1411,7 @@ CASE ('CYCL','WALL')            ! In that case one must have HLBCX(1) == HLBCX(2
 !
 !  The ZPHAT(IIB-1,:,:) doesn't matter only define an realistic value
 !
-!!$   ZPHAT(IIB-1,:,:) = ZPHAT(IIB,:,:) ! JUANTEST1
+!!$   ZPHAT(IIB-1,:,:) = ZPHAT(IIB,:,:) ! JUANTEST1 already done at init by ZPHAT = PSRC
 !
 ! EAST BOUND
 !
@@ -1402,35 +1419,50 @@ CASE ('CYCL','WALL')            ! In that case one must have HLBCX(1) == HLBCX(2
 !
 !!$   ZPHAT(IIE+1,:,:) = ZPHAT(IIE,:,:) ! JUANTEST1
 !
-!
 !   update ZPHAT HALO before next/further  utilisation 
 !
-CALL  GET_HALO(ZPHAT)
+!  /!\ not needed if ZPHAT(IIB-1) & ZPHAT(IIE+1) doen't matter ???
 !
-   ZFPOS(IIB:IIE+1,IJS:IJN,:) = ZPHAT(IIB:IIE+1,IJS:IJN,:) - & 
-        ZCR(IIB:IIE+1,IJS:IJN,:)*(ZPHAT(IIB:IIE+1,IJS:IJN,:) - PSRC(IIB-1:IIE,IJS:IJN,:)) - &
-        ZCR(IIB:IIE+1,IJS:IJN,:)*(1.0 - ZCR(IIB:IIE+1,IJS:IJN,:)) * &
-        (ZPHAT(IIB-1:IIE,IJS:IJN,:) - 2.0*PSRC(IIB-1:IIE,IJS:IJN,:) + ZPHAT(IIB:IIE+1,IJS:IJN,:))
+CALL  GET_HALO(ZPHAT,HDIR="Z0_X")
+!
+!!$   ZFPOS(IIB:IIE+1,IJS:IJN,:) = ZPHAT(IIB:IIE+1,IJS:IJN,:) - & 
+!!$        ZCR(IIB:IIE+1,IJS:IJN,:)*(ZPHAT(IIB:IIE+1,IJS:IJN,:) - PSRC(IIB-1:IIE,IJS:IJN,:)) - &
+!!$        ZCR(IIB:IIE+1,IJS:IJN,:)*(1.0 - ZCR(IIB:IIE+1,IJS:IJN,:)) * &
+!!$        (ZPHAT(IIB-1:IIE,IJS:IJN,:) - 2.0*PSRC(IIB-1:IIE,IJS:IJN,:) + ZPHAT(IIB:IIE+1,IJS:IJN,:))
+!
+   ZFPOS(IIB:IIE,IJS:IJN,:) = ZPHAT(IIB:IIE,IJS:IJN,:) - & 
+        ZCR(IIB:IIE,IJS:IJN,:)*(ZPHAT(IIB:IIE,IJS:IJN,:) - PSRC(IIB-1:IIE-1,IJS:IJN,:)) - &
+        ZCR(IIB:IIE,IJS:IJN,:)*(1.0 - ZCR(IIB:IIE,IJS:IJN,:)) * &
+        (ZPHAT(IIB-1:IIE-1,IJS:IJN,:) - 2.0*PSRC(IIB-1:IIE-1,IJS:IJN,:) + ZPHAT(IIB:IIE,IJS:IJN,:))
 !
 !!$   ZFPOS(IIB-1,:,:) = ZFPOS(IIE,:,:) !JUAN
-CALL GET_HALO(ZFPOS) ! JUAN
 !
-   ZFNEG(IIB-1:IIE,IJS:IJN,:) = ZPHAT(IIB-1:IIE,IJS:IJN,:) + & 
-        ZCR(IIB-1:IIE,IJS:IJN,:)*(ZPHAT(IIB-1:IIE,IJS:IJN,:) - PSRC(IIB-1:IIE,IJS:IJN,:)) + &
-        ZCR(IIB-1:IIE,IJS:IJN,:)*(1.0 + ZCR(IIB-1:IIE,IJS:IJN,:)) * &
-        (ZPHAT(IIB-1:IIE,IJS:IJN,:) - 2.0*PSRC(IIB-1:IIE,IJS:IJN,:) + ZPHAT(IIB:IIE+1,IJS:IJN,:))
+CALL GET_HALO(ZFPOS,HDIR="Z0_X") ! JUAN
+!
+!!$   ZFNEG(IIB-1:IIE,IJS:IJN,:) = ZPHAT(IIB-1:IIE,IJS:IJN,:) + & 
+!!$        ZCR(IIB-1:IIE,IJS:IJN,:)*(ZPHAT(IIB-1:IIE,IJS:IJN,:) - PSRC(IIB-1:IIE,IJS:IJN,:)) + &
+!!$        ZCR(IIB-1:IIE,IJS:IJN,:)*(1.0 + ZCR(IIB-1:IIE,IJS:IJN,:)) * &
+!!$        (ZPHAT(IIB-1:IIE,IJS:IJN,:) - 2.0*PSRC(IIB-1:IIE,IJS:IJN,:) + ZPHAT(IIB:IIE+1,IJS:IJN,:))
+!
+   ZFNEG(IIB:IIE,IJS:IJN,:) = ZPHAT(IIB:IIE,IJS:IJN,:) + & 
+        ZCR(IIB:IIE,IJS:IJN,:)*(ZPHAT(IIB:IIE,IJS:IJN,:) - PSRC(IIB:IIE,IJS:IJN,:)) + &
+        ZCR(IIB:IIE,IJS:IJN,:)*(1.0 + ZCR(IIB:IIE,IJS:IJN,:)) * &
+        (ZPHAT(IIB:IIE,IJS:IJN,:) - 2.0*PSRC(IIB:IIE,IJS:IJN,:) + ZPHAT(IIB+1:IIE+1,IJS:IJN,:))
+!
 !
 ! define fluxes for CYCL BC outside physical domain
 !!$   ZFNEG(IIE+1,:,:) = ZFNEG(IIB,:,:) !JUAN
-CALL GET_HALO(ZFNEG) ! JUAN
-
+!
+CALL GET_HALO(ZFNEG,HDIR="Z0_X") ! JUAN
 !
 ! calculate the advection
 !
    PR = PSRC * PRHO - &
         DXF( ZCR*MXM(PRHO)*( ZFPOS*(0.5+SIGN(0.5,ZCR)) + & 
                              ZFNEG*(0.5-SIGN(0.5,ZCR)) ) )
-   CALL GET_HALO(PR) ! JUAN
+!
+   CALL GET_HALO(PR,HDIR="S0_X") 
+   CALL MPPDB_CHECK3DM("PPM::PPM_S0_X CYCL ::PR",PRECISION,PR)
 !
 CASE ('OPEN')
 !
@@ -1447,7 +1479,7 @@ CASE ('OPEN')
 ! <=>  WEST BOUND     ( PSRC(IIB+1,IJS:IJN,:) + PSRC(IIB-2,IJS:IJN,:)                  ) ) / 12.0
   ENDIF
 !
-CALL  GET_HALO(ZPHAT)
+CALL  GET_HALO(ZPHAT,HDIR="Z0_X")
 !
   IF (LWEST_ll()) THEN
    ZPHAT(IIB  ,IJS:IJN,:) = 0.5*(PSRC(IIB-1,IJS:IJN,:) + PSRC(IIB,IJS:IJN,:))
@@ -1468,12 +1500,18 @@ CALL  GET_HALO(ZPHAT)
 !!$        ZCR(IIB+1:IIE+1,:,:)*(ZPHAT(IIB+1:IIE+1,:,:) - PSRC(IIB:IIE,:,:)) - &
 !!$        ZCR(IIB+1:IIE+1,:,:)*(1.0 - ZCR(IIB+1:IIE+1,:,:)) * &
 !!$        (ZPHAT(IIB:IIE,:,:) - 2.0*PSRC(IIB:IIE,:,:) + ZPHAT(IIB+1:IIE+1,:,:))
-   ZFPOS(IIB:IIE+1,IJS:IJN,:) = ZPHAT(IIB:IIE+1,IJS:IJN,:) - & 
-        ZCR(IIB:IIE+1,IJS:IJN,:)*(ZPHAT(IIB:IIE+1,IJS:IJN,:) - PSRC(IIB-1:IIE,IJS:IJN,:)) - &
-        ZCR(IIB:IIE+1,IJS:IJN,:)*(1.0 - ZCR(IIB:IIE+1,IJS:IJN,:)) * &
-        (ZPHAT(IIB-1:IIE,IJS:IJN,:) - 2.0*PSRC(IIB-1:IIE,IJS:IJN,:) + ZPHAT(IIB:IIE+1,IJS:IJN,:))
 !
-CALL GET_HALO(ZFPOS) ! JUAN
+!!$   ZFPOS(IIB:IIE+1,IJS:IJN,:) = ZPHAT(IIB:IIE+1,IJS:IJN,:) - & 
+!!$        ZCR(IIB:IIE+1,IJS:IJN,:)*(ZPHAT(IIB:IIE+1,IJS:IJN,:) - PSRC(IIB-1:IIE,IJS:IJN,:)) - &
+!!$        ZCR(IIB:IIE+1,IJS:IJN,:)*(1.0 - ZCR(IIB:IIE+1,IJS:IJN,:)) * &
+!!$        (ZPHAT(IIB-1:IIE,IJS:IJN,:) - 2.0*PSRC(IIB-1:IIE,IJS:IJN,:) + ZPHAT(IIB:IIE+1,IJS:IJN,:))
+!!$!
+   ZFPOS(IIB:IIE,IJS:IJN,:) = ZPHAT(IIB:IIE,IJS:IJN,:) - & 
+        ZCR(IIB:IIE,IJS:IJN,:)*(ZPHAT(IIB:IIE,IJS:IJN,:) - PSRC(IIB-1:IIE-1,IJS:IJN,:)) - &
+        ZCR(IIB:IIE,IJS:IJN,:)*(1.0 - ZCR(IIB:IIE,IJS:IJN,:)) * &
+        (ZPHAT(IIB-1:IIE-1,IJS:IJN,:) - 2.0*PSRC(IIB-1:IIE-1,IJS:IJN,:) + ZPHAT(IIB:IIE,IJS:IJN,:))
+!
+CALL GET_HALO(ZFPOS,HDIR="Z0_X") ! JUAN
 !
 ! positive flux on the WEST boundary
   IF (LWEST_ll()) THEN
@@ -1488,12 +1526,19 @@ CALL GET_HALO(ZFPOS) ! JUAN
 !!$        ZCR(IIB:IIE,:,:)*(ZPHAT(IIB:IIE,:,:) - PSRC(IIB:IIE,:,:)) + &
 !!$        ZCR(IIB:IIE,:,:)*(1.0 + ZCR(IIB:IIE,:,:)) * &
 !!$        (ZPHAT(IIB:IIE,:,:) - 2.0*PSRC(IIB:IIE,:,:) + ZPHAT(IIB+1:IIE+1,:,:))
-   ZFNEG(IIB-1:IIE,IJS:IJN,:) = ZPHAT(IIB-1:IIE,IJS:IJN,:) + & 
-        ZCR(IIB-1:IIE,IJS:IJN,:)*(ZPHAT(IIB-1:IIE,IJS:IJN,:) - PSRC(IIB-1:IIE,IJS:IJN,:)) + &
-        ZCR(IIB-1:IIE,IJS:IJN,:)*(1.0 + ZCR(IIB-1:IIE,IJS:IJN,:)) * &
-        (ZPHAT(IIB-1:IIE,IJS:IJN,:) - 2.0*PSRC(IIB-1:IIE,IJS:IJN,:) + ZPHAT(IIB:IIE+1,IJS:IJN,:))
 !
-   CALL GET_HALO(ZFNEG) ! JUAN
+!!$   ZFNEG(IIB-1:IIE,IJS:IJN,:) = ZPHAT(IIB-1:IIE,IJS:IJN,:) + & 
+!!$        ZCR(IIB-1:IIE,IJS:IJN,:)*(ZPHAT(IIB-1:IIE,IJS:IJN,:) - PSRC(IIB-1:IIE,IJS:IJN,:)) + &
+!!$        ZCR(IIB-1:IIE,IJS:IJN,:)*(1.0 + ZCR(IIB-1:IIE,IJS:IJN,:)) * &
+!!$        (ZPHAT(IIB-1:IIE,IJS:IJN,:) - 2.0*PSRC(IIB-1:IIE,IJS:IJN,:) + ZPHAT(IIB:IIE+1,IJS:IJN,:))
+!
+   ZFNEG(IIB:IIE,IJS:IJN,:) = ZPHAT(IIB:IIE,IJS:IJN,:) + & 
+        ZCR(IIB:IIE,IJS:IJN,:)*(ZPHAT(IIB:IIE,IJS:IJN,:) - PSRC(IIB:IIE,IJS:IJN,:)) + &
+        ZCR(IIB:IIE,IJS:IJN,:)*(1.0 + ZCR(IIB:IIE,IJS:IJN,:)) * &
+        (ZPHAT(IIB:IIE,IJS:IJN,:) - 2.0*PSRC(IIB:IIE,IJS:IJN,:) + ZPHAT(IIB+1:IIE+1,IJS:IJN,:))
+!
+!
+   CALL GET_HALO(ZFNEG,HDIR="Z0_X") ! JUAN
 !
   IF (LEAST_ll()) THEN
 !
@@ -1532,11 +1577,11 @@ CALL GET_HALO(ZFPOS) ! JUAN
    END WHERE
   ENDIF
 !
+CALL GET_HALO(PR,HDIR="S0_X") 
+CALL MPPDB_CHECK3DM("PPM::PPM_S0_X OPEN ::PR",PRECISION,PR)
 !
 END SELECT
 !
-CALL GET_HALO(PR) 
-!
 !-------------------------------------------------------------------------------
 CALL  DEL_HALO2_ll(TZ_PSRC_HALO2_ll)
 !
@@ -1568,6 +1613,7 @@ USE MODI_GET_HALO
 USE MODD_LUNIT
 USE MODD_CONF
 !USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll
+USE MODE_MPPDB
 !
 IMPLICIT NONE
 !
@@ -1668,34 +1714,45 @@ CASE ('CYCL','WALL')            ! In that case one must have HLBCY(1) == HLBCY(2
 !
 !   update ZPHAT HALO before next/further  utilisation 
 !
-CALL  GET_HALO(ZPHAT)
+CALL  GET_HALO(ZPHAT,HDIR="Z0_Y")
 !
 ! calculate the fluxes:
 !
-   ZFPOS(IIW:IIA,IJB:IJE+1,:) = ZPHAT(IIW:IIA,IJB:IJE+1,:) - & 
-        ZCR(IIW:IIA,IJB:IJE+1,:)*(ZPHAT(IIW:IIA,IJB:IJE+1,:) - PSRC(IIW:IIA,IJB-1:IJE,:)) - &
-        ZCR(IIW:IIA,IJB:IJE+1,:)*(1.0 - ZCR(IIW:IIA,IJB:IJE+1,:)) * &
-        (ZPHAT(IIW:IIA,IJB-1:IJE,:) - 2.0*PSRC(IIW:IIA,IJB-1:IJE,:) + ZPHAT(IIW:IIA,IJB:IJE+1,:))
+!!$   ZFPOS(IIW:IIA,IJB:IJE+1,:) = ZPHAT(IIW:IIA,IJB:IJE+1,:) - & 
+!!$        ZCR(IIW:IIA,IJB:IJE+1,:)*(ZPHAT(IIW:IIA,IJB:IJE+1,:) - PSRC(IIW:IIA,IJB-1:IJE,:)) - &
+!!$        ZCR(IIW:IIA,IJB:IJE+1,:)*(1.0 - ZCR(IIW:IIA,IJB:IJE+1,:)) * &
+!!$        (ZPHAT(IIW:IIA,IJB-1:IJE,:) - 2.0*PSRC(IIW:IIA,IJB-1:IJE,:) + ZPHAT(IIW:IIA,IJB:IJE+1,:))
+!
+   ZFPOS(IIW:IIA,IJB:IJE,:) = ZPHAT(IIW:IIA,IJB:IJE,:) - & 
+        ZCR(IIW:IIA,IJB:IJE,:)*(ZPHAT(IIW:IIA,IJB:IJE,:) - PSRC(IIW:IIA,IJB-1:IJE-1,:)) - &
+        ZCR(IIW:IIA,IJB:IJE,:)*(1.0 - ZCR(IIW:IIA,IJB:IJE,:)) * &
+        (ZPHAT(IIW:IIA,IJB-1:IJE-1,:) - 2.0*PSRC(IIW:IIA,IJB-1:IJE-1,:) + ZPHAT(IIW:IIA,IJB:IJE,:))
 !
 !!$   ZFPOS(:,IJB-1,:) = ZFPOS(:,IJE,:)
-CALL GET_HALO(ZFPOS) ! JUAN
+CALL GET_HALO(ZFPOS,HDIR="Z0_Y") ! JUAN
 !
-   ZFNEG(IIW:IIA,IJB-1:IJE,:) = ZPHAT(IIW:IIA,IJB-1:IJE,:) + & 
-        ZCR(IIW:IIA,IJB-1:IJE,:)*(ZPHAT(IIW:IIA,IJB-1:IJE,:) - PSRC(IIW:IIA,IJB-1:IJE,:)) + &
-        ZCR(IIW:IIA,IJB-1:IJE,:)*(1.0 + ZCR(IIW:IIA,IJB-1:IJE,:)) * &
-        (ZPHAT(IIW:IIA,IJB-1:IJE,:) - 2.0*PSRC(IIW:IIA,IJB-1:IJE,:) +ZPHAT(IIW:IIA,IJB:IJE+1,:))
+!!$   ZFNEG(IIW:IIA,IJB-1:IJE,:) = ZPHAT(IIW:IIA,IJB-1:IJE,:) + & 
+!!$        ZCR(IIW:IIA,IJB-1:IJE,:)*(ZPHAT(IIW:IIA,IJB-1:IJE,:) - PSRC(IIW:IIA,IJB-1:IJE,:)) + &
+!!$        ZCR(IIW:IIA,IJB-1:IJE,:)*(1.0 + ZCR(IIW:IIA,IJB-1:IJE,:)) * &
+!!$        (ZPHAT(IIW:IIA,IJB-1:IJE,:) - 2.0*PSRC(IIW:IIA,IJB-1:IJE,:) +ZPHAT(IIW:IIA,IJB:IJE+1,:))
+!
+   ZFNEG(IIW:IIA,IJB:IJE,:) = ZPHAT(IIW:IIA,IJB:IJE,:) + & 
+        ZCR(IIW:IIA,IJB:IJE,:)*(ZPHAT(IIW:IIA,IJB:IJE,:) - PSRC(IIW:IIA,IJB:IJE,:)) + &
+        ZCR(IIW:IIA,IJB:IJE,:)*(1.0 + ZCR(IIW:IIA,IJB:IJE,:)) * &
+        (ZPHAT(IIW:IIA,IJB:IJE,:) - 2.0*PSRC(IIW:IIA,IJB:IJE,:) +ZPHAT(IIW:IIA,IJB+1:IJE+1,:))
 !
-
 !
 ! define fluxes for CYCL BC outside physical domain
 !!$   ZFNEG(:,IJE+1,:) = ZFNEG(:,IJB,:)
-CALL GET_HALO(ZFNEG) ! JUAN
+CALL GET_HALO(ZFNEG,HDIR="Z0_Y") ! JUAN
 !
 ! calculate the advection
 !
    PR = PSRC * PRHO - &
         DYF( ZCR*MYM(PRHO)*( ZFPOS*(0.5+SIGN(0.5,ZCR)) + & 
                              ZFNEG*(0.5-SIGN(0.5,ZCR)) ) )
+   CALL GET_HALO(PR,HDIR="S0_Y") 
+   CALL MPPDB_CHECK3DM("PPM::PPM_S0_Y CYCL ::PR",PRECISION,PR)   
 !
 CASE ('OPEN')
 !
@@ -1713,7 +1770,7 @@ CASE ('OPEN')
 ! <=> SOUTH BOUND     (PSRC(IIW:IIA,IJB+1,:) + PSRC(IIW:IIA,IJB-2,:)                   )) / 12.0
   ENDIF
 !
-CALL  GET_HALO(ZPHAT)
+CALL  GET_HALO(ZPHAT,HDIR="Z0_Y")
 !
   IF (LSOUTH_ll()) THEN
    ZPHAT(IIW:IIA,IJB  ,:) = 0.5*(PSRC(IIW:IIA,IJB-1,:) + PSRC(IIW:IIA,IJB,:))
@@ -1729,7 +1786,7 @@ CALL  GET_HALO(ZPHAT)
 !
 !   update ZPHAT HALO before next/further  utilisation 
 !
-!!$CALL  GET_HALO(ZPHAT)
+!!$CALL  GET_HALO(ZPHAT,HDIR="Z0_Y")
 !
 ! calculate the fluxes:
 ! positive fluxes
@@ -1737,12 +1794,18 @@ CALL  GET_HALO(ZPHAT)
 !!$        ZCR(:,IJB+1:IJE+1,:)*(ZPHAT(:,IJB+1:IJE+1,:) - PSRC(:,IJB:IJE,:)) - &
 !!$        ZCR(:,IJB+1:IJE+1,:)*(1.0 - ZCR(:,IJB+1:IJE+1,:)) * &
 !!$        (ZPHAT(:,IJB:IJE,:) - 2.0*PSRC(:,IJB:IJE,:) + ZPHAT(:,IJB+1:IJE+1,:))
-ZFPOS(IIW:IIA,IJB:IJE+1,:) = ZPHAT(IIW:IIA,IJB:IJE+1,:) - & 
-        ZCR(IIW:IIA,IJB:IJE+1,:)*( ZPHAT(IIW:IIA,IJB:IJE+1,:) - PSRC(IIW:IIA,IJB-1:IJE  ,:) ) - &
-        ZCR(IIW:IIA,IJB:IJE+1,:)*( 1.0                  -  ZCR(IIW:IIA,IJB  :IJE+1,:) ) * &
-        (ZPHAT(IIW:IIA,IJB-1:IJE,:) - 2.0*PSRC(IIW:IIA,IJB-1:IJE,:) + ZPHAT(IIW:IIA,IJB:IJE+1,:))
 !
-CALL GET_HALO(ZFPOS) ! JUAN
+!!$ZFPOS(IIW:IIA,IJB:IJE+1,:) = ZPHAT(IIW:IIA,IJB:IJE+1,:) - & 
+!!$        ZCR(IIW:IIA,IJB:IJE+1,:)*( ZPHAT(IIW:IIA,IJB:IJE+1,:) - PSRC(IIW:IIA,IJB-1:IJE  ,:) ) - &
+!!$        ZCR(IIW:IIA,IJB:IJE+1,:)*( 1.0                  -  ZCR(IIW:IIA,IJB  :IJE+1,:) ) * &
+!!$        (ZPHAT(IIW:IIA,IJB-1:IJE,:) - 2.0*PSRC(IIW:IIA,IJB-1:IJE,:) + ZPHAT(IIW:IIA,IJB:IJE+1,:))
+!
+   ZFPOS(IIW:IIA,IJB:IJE,:) = ZPHAT(IIW:IIA,IJB:IJE,:) - & 
+        ZCR(IIW:IIA,IJB:IJE,:)*(ZPHAT(IIW:IIA,IJB:IJE,:) - PSRC(IIW:IIA,IJB-1:IJE-1,:)) - &
+        ZCR(IIW:IIA,IJB:IJE,:)*(1.0 - ZCR(IIW:IIA,IJB:IJE,:)) * &
+        (ZPHAT(IIW:IIA,IJB-1:IJE-1,:) - 2.0*PSRC(IIW:IIA,IJB-1:IJE-1,:) + ZPHAT(IIW:IIA,IJB:IJE,:))
+!
+CALL GET_HALO(ZFPOS,HDIR="Z0_Y") ! JUAN
 !
 ! positive flux on the SOUTH boundary
   IF (LSOUTH_ll()) THEN
@@ -1758,12 +1821,18 @@ CALL GET_HALO(ZFPOS) ! JUAN
 !!$        ZCR(:,IJB:IJE,:)*(ZPHAT(:,IJB:IJE,:) - PSRC(:,IJB:IJE,:)) + &
 !!$        ZCR(:,IJB:IJE,:)*(1.0 + ZCR(:,IJB:IJE,:)) * &
 !!$        (ZPHAT(:,IJB:IJE,:) - 2.0*PSRC(:,IJB:IJE,:) +ZPHAT(:,IJB+1:IJE+1,:))
-   ZFNEG(IIW:IIA,IJB-1:IJE,:) = ZPHAT(IIW:IIA,IJB-1:IJE,:) + & 
-        ZCR(IIW:IIA,IJB-1:IJE,:)*(ZPHAT(IIW:IIA,IJB-1:IJE,:) - PSRC(IIW:IIA,IJB-1:IJE,:)) + &
-        ZCR(IIW:IIA,IJB-1:IJE,:)*(1.0 + ZCR(IIW:IIA,IJB-1:IJE,:)) * &
-        (ZPHAT(IIW:IIA,IJB-1:IJE,:) - 2.0*PSRC(IIW:IIA,IJB-1:IJE,:) +ZPHAT(IIW:IIA,IJB:IJE+1,:))
 !
-   CALL GET_HALO(ZFNEG) ! JUAN
+!!$   ZFNEG(IIW:IIA,IJB-1:IJE,:) = ZPHAT(IIW:IIA,IJB-1:IJE,:) + & 
+!!$        ZCR(IIW:IIA,IJB-1:IJE,:)*(ZPHAT(IIW:IIA,IJB-1:IJE,:) - PSRC(IIW:IIA,IJB-1:IJE,:)) + &
+!!$        ZCR(IIW:IIA,IJB-1:IJE,:)*(1.0 + ZCR(IIW:IIA,IJB-1:IJE,:)) * &
+!!$        (ZPHAT(IIW:IIA,IJB-1:IJE,:) - 2.0*PSRC(IIW:IIA,IJB-1:IJE,:) +ZPHAT(IIW:IIA,IJB:IJE+1,:))
+!
+   ZFNEG(IIW:IIA,IJB:IJE,:) = ZPHAT(IIW:IIA,IJB:IJE,:) + & 
+        ZCR(IIW:IIA,IJB:IJE,:)*(ZPHAT(IIW:IIA,IJB:IJE,:) - PSRC(IIW:IIA,IJB:IJE,:)) + &
+        ZCR(IIW:IIA,IJB:IJE,:)*(1.0 + ZCR(IIW:IIA,IJB:IJE,:)) * &
+        (ZPHAT(IIW:IIA,IJB:IJE,:) - 2.0*PSRC(IIW:IIA,IJB:IJE,:) +ZPHAT(IIW:IIA,IJB+1:IJE+1,:))
+!
+   CALL GET_HALO(ZFNEG,HDIR="Z0_Y") ! JUAN
 !
   IF (LNORTH_ll()) THEN
 ! this is not used
@@ -1798,11 +1867,13 @@ CALL GET_HALO(ZFPOS) ! JUAN
    END WHERE
   ENDIF
 !
+   CALL GET_HALO(PR,HDIR="S0_Y") 
+   CALL MPPDB_CHECK3DM("PPM::PPM_S0_Y OPEN ::PR",PRECISION,PR)  
 ! 
 !
 END SELECT
 !
-CALL GET_HALO(PR) 
+!!$CALL GET_HALO(PR) 
 !
 CALL  DEL_HALO2_ll(TZ_PSRC_HALO2_ll)
 !
@@ -1834,6 +1905,7 @@ USE MODI_GET_HALO
 USE MODD_CONF
 USE MODD_PARAMETERS
 !USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll
+USE MODE_MPPDB
 !
 IMPLICIT NONE
 !
@@ -1875,7 +1947,6 @@ IKE = SIZE(PSRC,3) - JPVEXT
 !
 CALL GET_HALO(PSRC)
 !
-!
 ZPHAT(:,:,IKB+1:IKE) = (7.0 * &
                        (PSRC(:,:,IKB+1:IKE) + PSRC(:,:,IKB:IKE-1)) - &
                        (PSRC(:,:,IKB+2:IKE+1) + PSRC(:,:,IKB-1:IKE-2))) / 12.0
@@ -1932,6 +2003,7 @@ PR = PSRC * PRHO - &
       PR(:,:,IKE+1) = PR(:,:,IKE)
 !
    CALL GET_HALO(PR) ! JUAN
+   CALL MPPDB_CHECK3DM("PPM::PPM_S0_Z ::PR",PRECISION,PR)
 !
 END FUNCTION PPM_S0_Z
 !
diff --git a/SURCOUCHE/extern_usersurc_ll.f90 b/SURCOUCHE/extern_usersurc_ll.f90
index 7ec65f30d84ddcd2d852dcbba88fe6357c81b593..a9567a1220dabac587479c06417ba2681c660f60 100644
--- a/SURCOUCHE/extern_usersurc_ll.f90
+++ b/SURCOUCHE/extern_usersurc_ll.f90
@@ -1228,60 +1228,7 @@
        END SUBROUTINE REDUCE_SUM_3D_ll
 !
 !!     ##########################################
-       SUBROUTINE REDUCE_SUM_I0D_ll( PRES, KINFO )
-!!     ##########################################
-!
-  USE MODE_SUM_ll, ONLY : E_REDUCE_SUM_I0D_ll => REDUCE_SUM_I0D_ll
-!
-  INTEGER, INTENT(INOUT)  :: PRES
-  INTEGER, INTENT(OUT) :: KINFO
-!
-  CALL E_REDUCE_SUM_I0D_ll(PRES, KINFO)
-!
-       END SUBROUTINE REDUCE_SUM_I0D_ll
-!
-!!     ##########################################
-       SUBROUTINE REDUCE_SUM_I1D_ll( PRES, KINFO )
-!!     ##########################################
-!
-  USE MODE_SUM_ll, ONLY : E_REDUCE_SUM_I1D_ll => REDUCE_SUM_I1D_ll
-!
-  INTEGER, DIMENSION(:), INTENT(INOUT) :: PRES
-  INTEGER, INTENT(OUT)              :: KINFO
-!
-  CALL E_REDUCE_SUM_I1D_ll( PRES, KINFO )
-!
-       END SUBROUTINE REDUCE_SUM_I1D_ll
-!
-!!     ##########################################
-       SUBROUTINE REDUCE_SUM_I2D_ll( PRES, KINFO )
-!!     ##########################################
-!
-  USE MODE_SUM_ll, ONLY : E_REDUCE_SUM_I2D_ll => REDUCE_SUM_I2D_ll
-!
-  INTEGER, DIMENSION(:,:), INTENT(INOUT) :: PRES
-  INTEGER, INTENT(OUT)                :: KINFO
-!
-  CALL E_REDUCE_SUM_I2D_ll( PRES, KINFO )
-!
-       END SUBROUTINE REDUCE_SUM_I2D_ll
-!
-!!     ##########################################
-       SUBROUTINE REDUCE_SUM_I3D_ll( PRES, KINFO )
-!!     ##########################################
-!
-  USE MODE_SUM_ll, ONLY : E_REDUCE_SUM_I3D_ll => REDUCE_SUM_I3D_ll
-!
-  INTEGER, DIMENSION(:,:,:), INTENT(INOUT) :: PRES
-  INTEGER, INTENT(OUT)                  :: KINFO
-!
-  CALL E_REDUCE_SUM_I3D_ll(PRES, KINFO)
-!
-       END SUBROUTINE REDUCE_SUM_I3D_ll
-!
-
-!!     ##########################################
-       SUBROUTINE UPDATE_HALO_ll( TPLIST, KINFO )
+       SUBROUTINE UPDATE_HALO_ll( TPLIST, KINFO,  HDIR  )
 !!     ##########################################
 !
   USE MODE_EXCHANGE_ll, ONLY : E_UPDATE_HALO_ll => UPDATE_HALO_ll
@@ -1290,8 +1237,9 @@
 !
   TYPE(LIST_ll), POINTER :: TPLIST
   INTEGER                :: KINFO
+  CHARACTER(len=4), OPTIONAL :: HDIR ! to send only halo on X or Y direction
 !
-  CALL E_UPDATE_HALO_ll( TPLIST, KINFO )
+  CALL E_UPDATE_HALO_ll( TPLIST, KINFO, HDIR=HDIR )
 !
        END SUBROUTINE UPDATE_HALO_ll
 !
diff --git a/SURCOUCHE/mode_exchange_ll.f90 b/SURCOUCHE/mode_exchange_ll.f90
index c2d1a7cb281eb7c5b5462941df41a31ed825a34e..bf72f12ad3c61883ec9d876ca064db939dd1478c 100644
--- a/SURCOUCHE/mode_exchange_ll.f90
+++ b/SURCOUCHE/mode_exchange_ll.f90
@@ -87,7 +87,7 @@
   CONTAINS
 !
 !     ########################################
-      SUBROUTINE UPDATE_HALO_ll(TPLIST, KINFO)
+      SUBROUTINE UPDATE_HALO_ll(TPLIST, KINFO, HDIR )
 !     ########################################
 !
 !!****  *UPDATE_HALO_ll* - routine to update halo
@@ -148,6 +148,7 @@
 !
   TYPE(LIST_ll), POINTER :: TPLIST ! pointer to the list of fields to be updated
   INTEGER                :: KINFO  ! return status
+  CHARACTER(len=4), OPTIONAL :: HDIR ! to send only halo on X or Y direction
 !
 !*       0.2   declarations of local variables
 !
@@ -157,7 +158,7 @@
 !               -------------------------------------------------------------
 !
   CALL SEND_RECV_CRSPD(TCRRT_COMDATA%TSEND_HALO1, TCRRT_COMDATA%TRECV_HALO1, &
-                       TPLIST, TPLIST, NHALO_COM, KINFO)
+                       TPLIST, TPLIST, NHALO_COM, KINFO, HDIR=HDIR )
 !
 !*       2.     UPDATE THE ZONES THE PROCESSOR SENDS OR RECEIVED FROM ITSELF
 !               ------------------------------------------------------------
@@ -2111,7 +2112,7 @@ INTEGER                                               :: NB_REQ,NFIRST_REQ_RECV
 !     ##############################################################
       SUBROUTINE SEND_RECV_CRSPD(TPCRSPDSEND, TPCRSPDRECV, &
                                  TPFIELDLISTSEND, TPFIELDLISTRECV, &
-                                 KMPI_COMM, KINFO, KBARRIER)
+                                 KMPI_COMM, KINFO, KBARRIER, HDIR )
 !     ##############################################################
 !
 !!****  *SEND_RECV_CRSPD*-
@@ -2208,6 +2209,8 @@ INTEGER                                               :: NB_REQ,NFIRST_REQ_RECV
   INTEGER :: KMPI_COMM
   INTEGER :: KINFO
   INTEGER, OPTIONAL :: KBARRIER
+  CHARACTER(len=4), OPTIONAL :: HDIR ! to send only halo on X or Y direction
+  
 !
 !*       0.2   declarations of local variables
 !
@@ -2241,6 +2244,10 @@ INTEGER,SAVE,DIMENSION(MPI_MAX_REQ)                   :: REQ_TAB
 INTEGER,SAVE,DIMENSION(MPI_STATUS_SIZE,MPI_MAX_REQ)   :: STATUS_TAB
 INTEGER                                               :: NB_REQ,NFIRST_REQ_RECV
 !endif
+INTEGER                                               :: IERR
+!
+LOGICAL                                               :: GDIR_ALL , GLX ,  GLY
+INTEGER                                               :: INX , INY
 ! JUAN
 !
 !-------------------------------------------------------------------------------
@@ -2252,6 +2259,10 @@ INTEGER                                               :: NB_REQ,NFIRST_REQ_RECV
     .OR.(.NOT.ASSOCIATED(TPFIELDLISTRECV))) THEN
     RETURN
   ENDIF
+!
+! init test if only halo in some direction are need
+!
+CALL INIT_GOOD_DIR(HDIR)
 !
   IF (.NOT.ASSOCIATED(TPCRSPDSEND)) THEN
     ISENDNB = 0
@@ -2315,29 +2326,31 @@ endif
   ! Build the send buffer
        TZZONESEND => TPMAILSEND%TELT 
        IF (TZZONESEND%NUMBER /= IP) THEN 
-          JINC = 0
-! JUAN
-!if defined (MNH_MPI_ISEND)
-          IF ( .NOT. LMNH_MPI_BSEND) THEN
-             NB_REQ = NB_REQ + 1
-             CALL FILLIN_BUFFERS(TZFIELDLISTSEND, TZZONESEND, TZBUFFER(:,NB_REQ), JINC)
-          else
-             CALL FILLIN_BUFFERS(TZFIELDLISTSEND, TZZONESEND, TZBUFFER(:,1), JINC)
-          endif
-          ! JUAN 
-!if defined(MNH_MPI_BSEND)
-          IF (LMNH_MPI_BSEND) THEN
-             CALL MPI_BSEND(TZBUFFER, JINC, MPI_PRECISION, TZZONESEND%NUMBER - 1,  &
-                  TZZONESEND%MSSGTAG + ITAGOFFSET, KMPI_COMM,  KERROR)
-          else
+          IF ( GOOD_DIR(TPMAILSEND) ) THEN  
+             JINC = 0
              ! JUAN
              !if defined (MNH_MPI_ISEND)
-             CALL MPI_ISEND(TZBUFFER(1,NB_REQ), JINC, MPI_PRECISION, TZZONESEND%NUMBER - 1,  &
-                  TZZONESEND%MSSGTAG + ITAGOFFSET, KMPI_COMM, REQ_TAB(NB_REQ), KERROR)
+             IF ( .NOT. LMNH_MPI_BSEND) THEN
+                NB_REQ = NB_REQ + 1
+                CALL FILLIN_BUFFERS(TZFIELDLISTSEND, TZZONESEND, TZBUFFER(:,NB_REQ), JINC)
+             else
+                CALL FILLIN_BUFFERS(TZFIELDLISTSEND, TZZONESEND, TZBUFFER(:,1), JINC)
+             endif
+             ! JUAN 
+             !if defined(MNH_MPI_BSEND)
+             IF (LMNH_MPI_BSEND) THEN
+                CALL MPI_BSEND(TZBUFFER, JINC, MPI_PRECISION, TZZONESEND%NUMBER - 1,  &
+                     TZZONESEND%MSSGTAG + ITAGOFFSET, KMPI_COMM,  KERROR)
+             else
+                ! JUAN
+                !if defined (MNH_MPI_ISEND)
+                CALL MPI_ISEND(TZBUFFER(1,NB_REQ), JINC, MPI_PRECISION, TZZONESEND%NUMBER - 1,  &
+                     TZZONESEND%MSSGTAG + ITAGOFFSET, KMPI_COMM, REQ_TAB(NB_REQ), KERROR)
+                
+             endif
              
-          endif
-
-      ENDIF
+          ENDIF
+       ENDIF
       TPMAILSEND => TPMAILSEND%TNEXT
     ENDIF
   ENDDO
@@ -2355,24 +2368,26 @@ endif
      IF (TPMAILRECV%TELT%NUMBER == IP) THEN
         TPMAILRECV => TPMAILRECV%TNEXT
      ELSE
-!if defined (MNH_MPI_ISEND)
-        IF ( .NOT. LMNH_MPI_BSEND) THEN
-           NB_REQ = NB_REQ + 1
-           CALL MPI_IRECV(TZBUFFER(1,NB_REQ), IBUFFSIZE, MPI_PRECISION, &
-                TPMAILRECV%TELT%NUMBER -1 , &
-                TPMAILRECV%TELT%MSSGTAG + ITAGOFFSET, &
-                KMPI_COMM, REQ_TAB(NB_REQ), KERROR)
-        else
-           CALL MPI_RECV(TZBUFFER, IBUFFSIZE, MPI_PRECISION, &
-                TPMAILRECV%TELT%NUMBER -1 , &
-                TPMAILRECV%TELT%MSSGTAG + ITAGOFFSET, &
-                KMPI_COMM, IRECVSTATUS, KERROR)
-           JINC = 0 
-           CALL FILLOUT_BUFFERS(TZFIELDLISTRECV, TPMAILRECV%TELT, TZBUFFER(:,1), JINC)
-        endif
-        ! JUAN
-        TPMAILRECV => TPMAILRECV%TNEXT
-        !
+        IF ( GOOD_DIR(TPMAILRECV) ) THEN
+           !if defined (MNH_MPI_ISEND)
+           IF ( .NOT. LMNH_MPI_BSEND) THEN
+              NB_REQ = NB_REQ + 1
+              CALL MPI_IRECV(TZBUFFER(1,NB_REQ), IBUFFSIZE, MPI_PRECISION, &
+                   TPMAILRECV%TELT%NUMBER -1 , &
+                   TPMAILRECV%TELT%MSSGTAG + ITAGOFFSET, &
+                   KMPI_COMM, REQ_TAB(NB_REQ), KERROR)
+           else
+              CALL MPI_RECV(TZBUFFER, IBUFFSIZE, MPI_PRECISION, &
+                   TPMAILRECV%TELT%NUMBER -1 , &
+                   TPMAILRECV%TELT%MSSGTAG + ITAGOFFSET, &
+                   KMPI_COMM, IRECVSTATUS, KERROR)
+              JINC = 0 
+              CALL FILLOUT_BUFFERS(TZFIELDLISTRECV, TPMAILRECV%TELT, TZBUFFER(:,1), JINC)
+           endif
+           ! JUAN
+           TPMAILRECV => TPMAILRECV%TNEXT
+           !
+        END IF
      ENDIF
      
      !
@@ -2390,14 +2405,15 @@ endif
         IF (TPMAILRECV%TELT%NUMBER == IP) THEN
            TPMAILRECV => TPMAILRECV%TNEXT
         ELSE 
-           !
-           NB_REQ = NB_REQ + 1
-           JINC = 0 
-           CALL FILLOUT_BUFFERS(TZFIELDLISTRECV, TPMAILRECV%TELT, TZBUFFER(:,NB_REQ), JINC)
-           TPMAILRECV => TPMAILRECV%TNEXT
-           !
-        ENDIF
-        
+           IF ( GOOD_DIR(TPMAILRECV) ) THEN 
+              !
+              NB_REQ = NB_REQ + 1
+              JINC = 0 
+              CALL FILLOUT_BUFFERS(TZFIELDLISTRECV, TPMAILRECV%TELT, TZBUFFER(:,NB_REQ), JINC)
+              TPMAILRECV => TPMAILRECV%TNEXT
+              !
+           END IF
+        ENDIF        
         !
      ENDDO
   endif
@@ -2415,6 +2431,82 @@ endif
 !
 !-------------------------------------------------------------------------------
 !
-      END SUBROUTINE SEND_RECV_CRSPD
-!
+  CONTAINS
+    SUBROUTINE INIT_GOOD_DIR(HDIR)
+      !
+      ! init the direction of halo if needed
+      ! 
+      IMPLICIT NONE
+      CHARACTER(len=4), OPTIONAL :: HDIR
+      !
+ 
+      IF (.NOT. PRESENT(HDIR)) THEN
+         GDIR_ALL = .TRUE.
+      ELSE
+         !print*,"GOOD_DIR HDIR=",HDIR,"####" 
+         GDIR_ALL = .FALSE.
+         INX = 0
+         INY = 0
+         GLX = .FALSE.
+         GLY = .FALSE.
+         IF ( HDIR == "Z0_X" ) THEN
+            !print*,"ZZZZZ0000_XXXXXXXXXXXXXXXX"
+            !GDIR_ALL = .TRUE.
+            INX = -100 ! -100 also OK so not really needed !!!
+            GLX = .TRUE.
+         ELSEIF ( HDIR == "S0_X" ) THEN
+            !print*,"SSSSS0000_XXXXXXXXXXXXXXXX"
+            GDIR_ALL = .TRUE.
+            INX = 1
+            GLX = .TRUE.
+         ELSEIF ( HDIR == "Z0_Y" ) THEN
+            !print*,"ZZZZZ0000_YYYYYYYYYYYYYYY"
+            !GDIR_ALL = .TRUE.
+            INY = -100  ! -100 also OK so not really needed !!!
+            GLY = .TRUE.
+         ELSEIF ( HDIR == "S0_Y" ) THEN
+            !print*,"SSSS0000_YYYYYYYYYYYYYYY"
+            GDIR_ALL = .TRUE.
+            INY = 1
+            GLY = .TRUE.
+         ELSEIF ( HDIR == "01_X" ) THEN
+            !print*,"01_X" 
+            !GDIR_ALL = .TRUE.
+            INX = 1
+            GLX = .TRUE.
+         ELSEIF ( HDIR == "Z1_X" ) THEN
+            !print*,"ZZZZZZZZZZZZZZZZ1_X" 
+            !GDIR_ALL = .TRUE.
+            INX = -100
+            GLX = .TRUE.
+         ELSEIF ( HDIR == "01_Y" ) THEN
+            !print*,"01_YYYYYYYYYYYYY"
+            !GDIR_ALL = .TRUE.
+            INY = 1
+            GLY = .TRUE.
+         ELSE
+            print*,"GOOD_DIR DEFAULT :: SOMETHING WRONG !!! HDIR=",HDIR,"####"
+            STOP "INIT_GOOD_DIR  :: SOMETHING WRONG !!! "
+         END IF
+      END IF
+    END SUBROUTINE INIT_GOOD_DIR
+    !
+    LOGICAL FUNCTION GOOD_DIR(TP)
+      IMPLICIT NONE
+      type(crspd_ll) :: TP
+      !
+      GOOD_DIR = .FALSE. 
+      ! RETURN 
+      IF (GDIR_ALL) THEN
+         GOOD_DIR = .TRUE.
+      ELSEIF ( GLX ) THEN
+         GOOD_DIR =  ( (TP%TELT%NXEND - TP%TELT%NXOR + 1 ) == INX )  .AND. ( (TP%TELT%NYEND - TP%TELT%NYOR + 1 ) /= INX  ) 
+      ELSEIF ( GLY ) THEN
+         GOOD_DIR =  ( (TP%TELT%NYEND - TP%TELT%NYOR + 1 ) == INY )  .AND. ( (TP%TELT%NXEND - TP%TELT%NXOR + 1 ) /= INY  ) 
+      END IF
+      !
+    END FUNCTION GOOD_DIR
+    !
+  END SUBROUTINE SEND_RECV_CRSPD
+  !
 END MODULE MODE_EXCHANGE_ll
diff --git a/SURCOUCHE/modi_update_ll.f90 b/SURCOUCHE/modi_update_ll.f90
index e7c23116f84fa786e505abf5fc6c7edf8b69f875..73a6ce87ab021c87848d1687d5e4430db98cae3b 100644
--- a/SURCOUCHE/modi_update_ll.f90
+++ b/SURCOUCHE/modi_update_ll.f90
@@ -15,13 +15,14 @@
 INTERFACE
 !
 !!     ##########################################
-       SUBROUTINE UPDATE_HALO_ll( TPLIST, KINFO )
+       SUBROUTINE UPDATE_HALO_ll( TPLIST, KINFO,  HDIR )
 !!     ##########################################
 !
   USE MODD_ARGSLIST_ll, ONLY : LIST_ll
 !
   TYPE(LIST_ll), POINTER :: TPLIST ! pointer to the list of fields to be updated
   INTEGER                :: KINFO  ! return status
+  CHARACTER(len=4), OPTIONAL :: HDIR ! to send only halo on X or Y direction
 !
        END SUBROUTINE UPDATE_HALO_ll
 !