diff --git a/MNH/ppm.f90 b/MNH/ppm.f90
index 8f431e0cdd768ac7c8d4d96e51ece33187659c4e..254e3296d7e5f621fb53caedeb059ce078112b9c 100644
--- a/MNH/ppm.f90
+++ b/MNH/ppm.f90
@@ -25,7 +25,6 @@ REAL,                   INTENT(IN)  :: PTSTEP  ! Time step
 !
 ! output source term
 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PR
-!acc reflected (PSRC,PCR,PRHO,PR)
 !
 !!$END FUNCTION PPM_01_X
 END SUBROUTINE PPM_01_X
@@ -62,7 +61,6 @@ REAL,                   INTENT(IN)  :: PTSTEP  ! Time step
 !
 ! output source term
 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PR
-!acc reflected (PSRC,PCR,PRHO,PR)
 !
 END SUBROUTINE PPM_01_Z
 !
@@ -75,7 +73,7 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX  ! X direction LBC type
 !
 INTEGER,                INTENT(IN)  :: KGRID   ! C grid localisation
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC    ! variable at t
+REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PSRC    ! variable at t
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PCR     ! Courant number
 !
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO  ! density
@@ -96,7 +94,7 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! Y direction LBC type
 !
 INTEGER,                INTENT(IN)  :: KGRID   ! C grid localisation
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC    ! variable at t
+REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PSRC    ! variable at t
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PCR     ! Courant number
 !
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO  ! density
@@ -115,7 +113,7 @@ SUBROUTINE PPM_S0_Z(KGRID, PSRC, PCR, PRHO, PTSTEP &
 !
 INTEGER,                INTENT(IN)  :: KGRID   ! C grid localisation
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC    ! variable at t
+REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PSRC    ! variable at t
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PCR     ! Courant number
 !
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO  ! density
@@ -133,7 +131,7 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX  ! X direction LBC type
 !
 INTEGER,                INTENT(IN)  :: KGRID   ! C grid localisation
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC    ! variable at t
+REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PSRC    ! variable at t
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PCR     ! Courant number
 !
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO  ! density
@@ -152,7 +150,7 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY  ! X direction LBC type
 !
 INTEGER,                INTENT(IN)  :: KGRID   ! C grid localisation
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC    ! variable at t
+REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PSRC    ! variable at t
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PCR     ! Courant number
 !
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO  ! density
@@ -169,7 +167,7 @@ FUNCTION PPM_S1_Z(KGRID, PSRC, PCR, PRHO, PRHOT, PTSTEP) &
 !
 INTEGER,                INTENT(IN)  :: KGRID   ! C grid localisation
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC    ! variable at t
+REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PSRC    ! variable at t
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PCR     ! Courant number
 !
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO  ! density
@@ -193,6 +191,7 @@ END MODULE MODI_PPM
 SUBROUTINE  PPM_01_X(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP, PR)
 
   USE MODE_MNH_ZWORK, ONLY : ZT3D, MNH_GET_ZT3D , MNH_REL_ZT3D
+  USE MODE_MNH_ZWORK, ONLY : IIU,IJU,IKU
 
   IMPLICIT NONE
 !
@@ -214,7 +213,8 @@ INTEGER :: IZQL,IZQR,IZDQ,IZQ6,IZDMQ,IZQL0,IZQR0,IZQ60,IZFPOS,IZFNEG
 
         CALL  MNH_GET_ZT3D(IZQL,IZQR,IZDQ,IZQ6,IZDMQ,IZQL0,IZQR0,IZQ60,IZFPOS,IZFNEG)
 
-        CALL  PPM_01_X_D(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP, PR, &
+        CALL  PPM_01_X_D(IIU,IJU,IKU,HLBCX, KGRID, &
+                     & PSRC, PCR, PRHO, PTSTEP, PR, &
                      & ZT3D(:,:,:,IZQL),ZT3D(:,:,:,IZQR),ZT3D(:,:,:,IZDQ),ZT3D(:,:,:,IZQ6), &
                      & ZT3D(:,:,:,IZDMQ),ZT3D(:,:,:,IZQL0),ZT3D(:,:,:,IZQR0), ZT3D(:,:,:,IZQ60), &
                      & ZT3D(:,:,:,IZFPOS),ZT3D(:,:,:,IZFNEG) )
@@ -223,7 +223,8 @@ INTEGER :: IZQL,IZQR,IZDQ,IZQ6,IZDMQ,IZQL0,IZQR0,IZQ60,IZFPOS,IZFNEG
 
 CONTAINS
 
-        SUBROUTINE  PPM_01_X_D(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP, PR, &
+        SUBROUTINE  PPM_01_X_D(IIU,IJU,IKU,HLBCX, KGRID, &
+                     & PSRC, PCR, PRHO, PTSTEP, PR, &
                      & ZQL,ZQR,ZDQ,ZQ6,ZDMQ,ZQL0,ZQR0,ZQ60,ZFPOS,ZFNEG)
 
 !     ########################################################################
@@ -249,25 +250,25 @@ USE MODD_LUNIT
 !END JUAN PPM_LL
 USE MODE_MPPDB
 USE MODD_PARAMETERS, ONLY : JPHEXT
+USE MODE_TOOLS_ll, ONLY : GET_INDICE_ll, LEAST_ll, LWEST_ll
 !
 !
-USE MODE_MNH_ZWORK, ONLY : IIB,IIE, IIU,IJU,IKU , IJS,IJN, GWEST,GEAST
-!
 IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
+INTEGER                        , INTENT(IN) :: IIU,IJU,IKU
 CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX  ! X direction LBC type
 !
 INTEGER,                INTENT(IN)  :: KGRID   ! C grid localisation
 !
-REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC    ! variable at t
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PCR     ! Courant number
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO  ! density
+REAL, DIMENSION(IIU,IJU,IKU), INTENT(INOUT) :: PSRC    ! variable at t
+REAL, DIMENSION(IIU,IJU,IKU), INTENT(IN)  :: PCR     ! Courant number
+REAL, DIMENSION(IIU,IJU,IKU), INTENT(IN)  :: PRHO  ! density
 REAL,                   INTENT(IN)  :: PTSTEP  ! Time step 
 !
 ! output source term
-REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PR
+REAL, DIMENSION(IIU,IJU,IKU), INTENT(INOUT) :: PR
 !$acc declare present (PSRC,PCR,PRHO,PR) 
 !
 !*       0.2   Declarations of local variables :
@@ -276,11 +277,11 @@ INTEGER                          :: ILUOUT,IRESP             ! for prints
 INTEGER                          :: I,J,K 
 !
 !
-!!$INTEGER, SAVE :: IIB,IJB    ! Begining useful area in x,y,z directions
-!!$INTEGER, SAVE :: IIE,IJE    ! End useful area in x,y,z directions
+INTEGER :: IIB,IJB    ! Begining useful area in x,y,z directions
+INTEGER :: IIE,IJE    ! End useful area in x,y,z directions
 !!$!
 !!$! terms used in parabolic interpolation, dmq, qL, qR, dq, q6
-REAL , DIMENSION(:,:,:) :: &
+REAL , DIMENSION(IIU,IJU,IKU) :: &
   ZQL,ZQR, ZDQ,ZQ6, ZDMQ &
 !!$!
 !!$! extra variables for the initial guess of parabolae parameters
@@ -289,14 +290,12 @@ REAL , DIMENSION(:,:,:) :: &
 !!$! advection fluxes
   , ZFPOS, ZFNEG
 !$acc declare present (ZQL,ZQR,ZDQ,ZQ6,ZDMQ,ZQL0,ZQR0,ZQ60,ZFPOS,ZFNEG)  
-!!$!
-!!$!BEG JUAN PPM_LL
-!!$INTEGER,SAVE                    :: IJS,IJN
-!!$!END JUAN PPM_LL
-!!$!JUAN ACC
-!!$INTEGER, SAVE                   :: IIU,IJU,IKU
-!!$LOGICAL, SAVE                   :: GWEST , GEAST
-!!$LOGICAL, SAVE                   :: GFIRST_CALL_PPM_01_X = .TRUE.
+!
+!BEG JUAN PPM_LL
+INTEGER                :: IJS,IJN
+!END JUAN PPM_LL
+!JUAN ACC
+LOGICAL                :: GWEST , GEAST
 !
 ! inline shuman with macro
 ! 
@@ -312,7 +311,11 @@ DQ(IIE+1,:,:)=0.5*(PQ(IIB+1,:,:)-PQ(IIE,:,:)) ! DIF2X(DQ,PQ)
 !
 !*       0.3.     COMPUTES THE DOMAIN DIMENSIONS
 !                 ------------------------------
-!
+CALL GET_INDICE_ll(IIB,IJB,IIE,IJE)
+IJS=IJB
+IJN=IJE
+GWEST = LWEST_ll()
+GEAST = LEAST_ll()
 !
 !BEG JUAN PPM_LL
 !
@@ -347,18 +350,24 @@ CALL GET_HALO_D(PSRC,HDIR="01_X")
 !!$ZFPOS(I,J,K)=PSRC(I,J,K)
 !!$ZFNEG(I,J,K)=PSRC(I,J,K)
 !!$ENDDO ; ENDDO ; ENDDO
-PR=PSRC
-ZQL=PSRC
-ZQR=PSRC
-ZDQ=PSRC
-ZQ6=PSRC
-ZDMQ=PSRC
-ZQL0=PSRC
-ZQR0=PSRC
-ZQ60=PSRC
+
+!acc parallel vector_length(32)
+
+!!$PR=PSRC
+!!$ZQL=PSRC
+!!$ZQR=PSRC
+!!$ZDQ=PSRC
+!!$ZQ6=PSRC
+!!$ZDMQ=PSRC
+!!$ZQL0=PSRC
+!!$ZQR0=PSRC
+!!$ZQ60=PSRC
+
 ZFPOS=PSRC
 ZFNEG=PSRC
-! acc end kernels 
+
+!acc end parallel
+!acc kernels
 !
 !-------------------------------------------------------------------------------
 !
@@ -527,6 +536,9 @@ ZFNEG=PSRC
 #ifdef TEMPO_JUAN  
 !$acc end kernels   
 CALL  GET_HALO_D(ZDMQ,HDIR="01_X") 
+IF (MPPDB_INITIALIZED) THEN
+!$acc update host(ZDMQ)
+ENDIF
 CALL MPPDB_CHECK3DM("PPM::PPM_01_X OPEN ::ZDMQ",PRECISION,ZDMQ)
 !$acc kernels
 #endif   
@@ -618,7 +630,7 @@ ENDDO ; ENDDO ; ENDDO
 !
 #ifdef TEMPO_JUAN 
 !$acc end kernels     
-CALL GET_HALO_D(ZFPOS(:,:,:),HDIR="01_X")
+CALL GET_HALO_D(ZFPOS,HDIR="01_X")
 !$acc kernels 
 #endif
 !
@@ -641,7 +653,7 @@ CALL GET_HALO_D(ZFPOS(:,:,:),HDIR="01_X")
 !
 #ifdef TEMPO_JUAN  
 !$acc end kernels   
-CALL GET_HALO_D(ZFNEG(:,:,:),HDIR="01_X")
+CALL GET_HALO_D(ZFNEG,HDIR="01_X")
 !$acc kernels
 #endif
 !
@@ -659,7 +671,7 @@ CALL GET_HALO_D(ZFNEG(:,:,:),HDIR="01_X")
 !
     ! acc kernels   
     mxm(ZQL,PRHO)
-    ZQR =  PCR* ZQL(:,:,:) *( ZFPOS(:,:,:)*(0.5+SIGN(0.5,PCR)) + ZFNEG(:,:,:)*(0.5-SIGN(0.5,PCR)) )  
+    ZQR =  PCR* ZQL *( ZFPOS*(0.5+SIGN(0.5,PCR)) + ZFNEG*(0.5-SIGN(0.5,PCR)) )  
     dxf(PR,ZQR)
 
 !!$   PR = DXF( PCR*MXM(PRHO)*( ZFPOS*(0.5+SIGN(0.5,PCR)) + & 
@@ -895,7 +907,7 @@ CALL GET_HALO_D(PSRC,HDIR="01_Y")
 !$acc kernels
 #endif
 PR=PSRC
-ZQL(:,:,:)=PSRC
+ZQL=PSRC
 ZQR=PSRC
 ZDQ=PSRC
 ZQ6=PSRC
@@ -903,7 +915,7 @@ ZDMQ=PSRC
 ZQL0=PSRC
 ZQR0=PSRC
 ZQ60=PSRC
-ZFPOS(:,:,:)=PSRC
+ZFPOS=PSRC
 ZFNEG=PSRC
 ! acc end kernels
 !
@@ -1173,7 +1185,7 @@ CALL  GET_HALO_D(ZQL0,HDIR="01_Y")
 !
 #ifdef TEMPO_JUAN
 !$acc end kernels   
-CALL GET_HALO_D(ZFPOS(:,:,:),HDIR="01_Y")
+CALL GET_HALO_D(ZFPOS,HDIR="01_Y")
 !$acc kernels   
 #endif
 !
@@ -1540,6 +1552,9 @@ ZFNEG(:,:,IKE+1) = (ZQR(:,:,IKE)-PSRC(:,:,IKE+1))*PCR(:,:,IKE+1) + &
 #endif
 
 CALL GET_HALO_D(PR)
+IF (MPPDB_INITIALIZED) THEN
+!$acc update host(PR)
+ENDIF
 CALL MPPDB_CHECK3DM("PPM::PPM_01_Z ::PR",PRECISION,PR)
 !
 !!$CONTAINS
@@ -1627,7 +1642,7 @@ SUBROUTINE PPM_S0_X(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP , PR)
   !
   INTEGER,                INTENT(IN)  :: KGRID   ! C grid localisation
   !
-  REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC    ! variable at t
+  REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PSRC    ! variable at t
   REAL, DIMENSION(:,:,:), INTENT(IN)  :: PCR     ! Courant number
   !
   REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO  ! density
@@ -1689,7 +1704,7 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX  ! X direction LBC type
 !
 INTEGER,                INTENT(IN)  :: KGRID   ! C grid localisation
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC    ! variable at t
+REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PSRC    ! variable at t
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PCR     ! Courant number
 !
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO  ! density
@@ -1965,6 +1980,9 @@ ENDIF
 #endif
 !
 CALL GET_HALO(PR,HDIR="S0_X") 
+IF (MPPDB_INITIALIZED) THEN
+!$acc update host(PR)
+ENDIF
 CALL MPPDB_CHECK3DM("PPM::PPM_S0_X OPEN ::PR",PRECISION,PR)
 !!$!
 !!$END SELECT
@@ -1995,7 +2013,7 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! Y direction LBC type
 !
 INTEGER,                INTENT(IN)  :: KGRID   ! C grid localisation
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC    ! variable at t
+REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PSRC    ! variable at t
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PCR     ! Courant number
 !
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO  ! density
@@ -2055,7 +2073,7 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY ! Y direction LBC type
 !
 INTEGER,                INTENT(IN)  :: KGRID   ! C grid localisation
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC    ! variable at t
+REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PSRC    ! variable at t
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PCR     ! Courant number
 !
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO  ! density
@@ -2303,6 +2321,9 @@ ENDIF
 #endif
 !
    CALL GET_HALO(PR,HDIR="S0_Y") 
+   IF (MPPDB_INITIALIZED) THEN
+      !$acc update host(PR)
+   ENDIF
    CALL MPPDB_CHECK3DM("PPM::PPM_S0_Y OPEN ::PR",PRECISION,PR)  
 ! 
 !!$END SELECT
@@ -2330,7 +2351,7 @@ SUBROUTINE PPM_S0_Z(KGRID, PSRC, PCR, PRHO, PTSTEP &
 !
 INTEGER,                INTENT(IN)  :: KGRID   ! C grid localisation
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC    ! variable at t
+REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PSRC    ! variable at t
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PCR     ! Courant number
 !
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO  ! density
@@ -2383,7 +2404,7 @@ IMPLICIT NONE
 !
 INTEGER,                INTENT(IN)  :: KGRID   ! C grid localisation
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC    ! variable at t
+REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PSRC    ! variable at t
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PCR     ! Courant number
 !
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO  ! density
@@ -2495,6 +2516,9 @@ ZFNEG(:,:,IKE+1) = (ZPHAT(:,:,IKE+1) - PSRC(:,:,IKE+1))*PCR(:,:,IKE+1) + &
 #endif
 !
    CALL GET_HALO(PR) ! JUAN
+   IF (MPPDB_INITIALIZED) THEN
+      !$acc update host(PR)
+   ENDIF
    CALL MPPDB_CHECK3DM("PPM::PPM_S0_Z ::PR",PRECISION,PR)
 !
 END SUBROUTINE PPM_S0_Z_D
@@ -2537,7 +2561,7 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCX  ! X direction LBC type
 !
 INTEGER,                INTENT(IN)  :: KGRID   ! C grid localisation
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC    ! variable at t
+REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PSRC    ! variable at t
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PCR     ! Courant number
 !
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO  ! density
@@ -2794,7 +2818,7 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY  ! X direction LBC type
 !
 INTEGER,                INTENT(IN)  :: KGRID   ! C grid localisation
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC    ! variable at t
+REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PSRC    ! variable at t
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PCR     ! Courant number
 !
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO  ! density
@@ -3051,7 +3075,7 @@ IMPLICIT NONE
 !
 INTEGER,                INTENT(IN)  :: KGRID   ! C grid localisation
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC    ! variable at t
+REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PSRC    ! variable at t
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PCR     ! Courant number
 !
 REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO  ! density