diff --git a/MNH/ppm.f90 b/MNH/ppm.f90
index 3e4ebc41e898e807268a1881b825424728b5f5fd..b60c580723565108012a07867df8bfabd81d484e 100644
--- a/MNH/ppm.f90
+++ b/MNH/ppm.f90
@@ -10,54 +10,61 @@
 !
 INTERFACE
 !
-FUNCTION PPM_01_X(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP) &
-               RESULT(PR)
+!!$FUNCTION PPM_01_X(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP) &
+!!$               RESULT(PR)
+SUBROUTINE  PPM_01_X(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP, PR)
 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
 REAL,                   INTENT(IN)  :: PTSTEP  ! Time step 
 !
 ! output source term
-REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PR
+!$acc reflected (PSRC,PCR,PRHO,PR)
 !
-END FUNCTION PPM_01_X
+!!$END FUNCTION PPM_01_X
+END SUBROUTINE PPM_01_X
 !
-FUNCTION PPM_01_Y(HLBCY, KGRID, PSRC, PCR, PRHO, PTSTEP) &
-               RESULT(PR)
+!!$FUNCTION PPM_01_Y(HLBCY, KGRID, PSRC, PCR, PRHO, PTSTEP) &
+!!$               RESULT(PR)
+SUBROUTINE PPM_01_Y(HLBCY, KGRID, PSRC, PCR, PRHO, PTSTEP, PR)
 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
 REAL,                   INTENT(IN)  :: PTSTEP  ! Time step 
 !
 ! output source term
-REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PR
+!$acc reflected (PSRC,PCR,PRHO,PR)
 !
-END FUNCTION PPM_01_Y
+END SUBROUTINE PPM_01_Y
 !
-FUNCTION PPM_01_Z(KGRID, PSRC, PCR, PRHO, PTSTEP) RESULT(PR)
+!!$FUNCTION PPM_01_Z(KGRID, PSRC, PCR, PRHO, PTSTEP) RESULT(PR)
+SUBROUTINE PPM_01_Z(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
 REAL,                   INTENT(IN)  :: PTSTEP  ! Time step 
 !
 ! output source term
-REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PR
+!$acc reflected (PSRC,PCR,PRHO,PR)
 !
-END FUNCTION PPM_01_Z
+END SUBROUTINE PPM_01_Z
 !
 FUNCTION PPM_S0_X(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP) &
                RESULT(PR)
@@ -173,8 +180,10 @@ END MODULE MODI_PPM
 !-------------------------------------------------------------------------------
 !-------------------------------------------------------------------------------
 !     ########################################################################
-      FUNCTION PPM_01_X(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP) &
-               RESULT(PR)
+!!$      FUNCTION PPM_01_X(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP) &
+!!$               RESULT(PR)
+        SUBROUTINE  PPM_01_X(HLBCX, KGRID, PSRC, PCR, PRHO, PTSTEP, PR)
+
 !     ########################################################################
 !!
 !!****  PPM_01_X - PPM_01 fully monotonic PPM advection scheme in X direction
@@ -207,14 +216,14 @@ 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
 REAL,                   INTENT(IN)  :: PTSTEP  ! Time step 
 !
 ! output source term
-REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PR
+!$acc reflected (PSRC,PCR,PRHO,PR)
 !
 !*       0.2   Declarations of local variables :
 !
@@ -222,15 +231,14 @@ 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(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZQL,ZQR
-REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZDQ,ZQ6
-REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZDMQ
+REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: &
+  ZQL,ZQR, ZDQ,ZQ6, ZDMQ &
 !
 ! extra variables for the initial guess of parabolae parameters
-REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZQL0,ZQR0,ZQ60
+  , ZQL0,ZQR0,ZQ60 &
 !
 ! advection fluxes
-REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZFPOS, ZFNEG
+  , ZFPOS, ZFNEG
 !
 !BEG JUAN PPM_LL
 INTEGER                          :: ILUOUT,IRESP             ! for prints
@@ -277,11 +285,11 @@ IF(NHALO /= 1) THEN
     STOP
 ENDIF
 !
-CALL GET_HALO(PSRC,HDIR="01_X")
+CALL GET_HALO_D(PSRC,HDIR="01_X")
 !
 #define JUAN_ACC_01_X
 #ifdef JUAN_ACC_01_X
-!$acc data region local (ZQL,ZQR,ZDQ,ZQ6,ZDMQ,ZQL0,ZQR0,ZQ60,ZFPOS,ZFNEG) copyin (psrc,pcr,prho) copyout(pr) 
+!$acc data region local (ZQL,ZQR,ZDQ,ZQ6,ZDMQ,ZQL0,ZQR0,ZQ60,ZFPOS,ZFNEG)  
 !$acc region 
 #endif
  DO K=1,IKU ; DO J = 1,IJU ; DO I=1,IIU
@@ -607,7 +615,7 @@ CALL GET_HALO_D(ZFNEG,HDIR="01_X")
 !$acc end data region 
 #endif
 
-   CALL GET_HALO(PR,HDIR="01_X")   
+   CALL GET_HALO_D(PR,HDIR="01_X")   
 !
 !!$END SELECT
 !
@@ -668,15 +676,17 @@ CALL GET_HALO_D(ZFNEG,HDIR="01_X")
 !!$!
 !!$END FUNCTION DIF2X
 !
-END FUNCTION PPM_01_X
+!!$END FUNCTION PPM_01_X
+ END SUBROUTINE PPM_01_X
 !
 !
 !-------------------------------------------------------------------------------
 !-------------------------------------------------------------------------------
 !
 !     ########################################################################
-      FUNCTION PPM_01_Y(HLBCY, KGRID, PSRC, PCR, PRHO, PTSTEP) &
-               RESULT(PR)
+!!$      FUNCTION PPM_01_Y(HLBCY, KGRID, PSRC, PCR, PRHO, PTSTEP) &
+!!$               RESULT(PR)
+      SUBROUTINE PPM_01_Y(HLBCY, KGRID, PSRC, PCR, PRHO, PTSTEP,PR)
 !     ########################################################################
 !!
 !!****  PPM_01_Y - PPM_01 fully monotonic PPM advection scheme in Y direction
@@ -710,17 +720,20 @@ CHARACTER (LEN=4), DIMENSION(2), INTENT(IN) :: HLBCY  ! Y direction LBC type
 INTEGER,                INTENT(IN)  :: KGRID   ! C grid localisation
 REAL,                   INTENT(IN)  :: PTSTEP   ! Time step 
 !
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC  &  ! variable at t
-                                     , PCR   &  ! Courant number
+REAL, DIMENSION(:,:,:), INTENT(INOUT):: PSRC ! variable at t
+REAL, DIMENSION(:,:,:), INTENT(IN)  :: PCR   &  ! Courant number
                                      , PRHO     ! density
 !
 ! output source term
-REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR &
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PR
+!$acc reflected (PSRC,PCR,PRHO,PR)
+!
 !
 !*       0.2   Declarations of local variables :
 !
 ! terms used in parabolic interpolation, dmq, qL, qR, dq, q6
-    , ZQL,ZQR , ZDQ,ZQ6 , ZDMQ & 
+REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: &
+     ZQL,ZQR , ZDQ,ZQ6 , ZDMQ & 
 ! extra variables for the initial guess of parabolae parameters
     , ZQL0,ZQR0,ZQ60 &
 ! advection fluxes
@@ -730,17 +743,6 @@ REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR &
 INTEGER:: IIB,IJB    ! Begining useful area in x,y,z directions
 INTEGER:: IIE,IJE    ! End useful area in x,y,z directions
 !
-
-!!$REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZQL,ZQR
-!!$REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZDQ,ZQ6
-!!$REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZDMQ 
-!!$!
-!!$
-!!$REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZQL0,ZQR0,ZQ60
-!!$!
-!!$
-!!$REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: ZFPOS, ZFNEG
-!
 !BEG JUAN PPM_LL
 INTEGER                          :: ILUOUT,IRESP             ! for prints
 INTEGER                          :: IIW,IIA
@@ -783,7 +785,7 @@ IF(NHALO /= 1) THEN
     STOP
 ENDIF
 !
-CALL GET_HALO(PSRC,HDIR="01_Y")
+CALL GET_HALO_D(PSRC,HDIR="01_Y")
 !
 !
 !-------------------------------------------------------------------------------
@@ -791,7 +793,7 @@ CALL GET_HALO(PSRC,HDIR="01_Y")
 !
 #define JUAN_ACC_01_Y
 #ifdef JUAN_ACC_01_Y
-!$acc data region local (ZQL,ZQR,ZDQ,ZQ6,ZDMQ,ZQL0,ZQR0,ZQ60,ZFPOS,ZFNEG) copyin (psrc,pcr,prho) copyout(pr)
+!$acc data region local (ZQL,ZQR,ZDQ,ZQ6,ZDMQ,ZQL0,ZQR0,ZQ60,ZFPOS,ZFNEG) 
 !$acc region
 #endif
 PR=PSRC
@@ -1141,7 +1143,7 @@ CALL GET_HALO_D(ZFPOS,HDIR="01_Y")
 !$acc end data region 
 #endif
 
-   CALL GET_HALO(PR,HDIR="01_Y")
+   CALL GET_HALO_D(PR,HDIR="01_Y")
 
 !
 !!$END SELECT
@@ -1206,14 +1208,15 @@ CALL GET_HALO_D(ZFPOS,HDIR="01_Y")
 !!$!
 !!$END FUNCTION DIF2Y
 !
-END FUNCTION PPM_01_Y
+ END SUBROUTINE PPM_01_Y
 !
 !
 !-------------------------------------------------------------------------------
 !-------------------------------------------------------------------------------
 !
 !     ########################################################################
-      FUNCTION PPM_01_Z(KGRID, PSRC, PCR, PRHO, PTSTEP) RESULT(PR)
+!!$      FUNCTION PPM_01_Z(KGRID, PSRC, PCR, PRHO, PTSTEP) RESULT(PR)
+      SUBROUTINE PPM_01_Z(KGRID, PSRC, PCR, PRHO, PTSTEP, PR)
 !     ########################################################################
 !!
 !!****  PPM_01_Z - PPM_01 fully monotonic PPM advection scheme in Z direction
@@ -1239,20 +1242,21 @@ IMPLICIT NONE
 !*       0.1   Declarations of dummy arguments :
 !
 INTEGER,                INTENT(IN)  :: KGRID   ! C grid localisation
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PSRC    ! variable at t
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PCR     ! Courant number
-!
-REAL, DIMENSION(:,:,:), INTENT(IN)  :: PRHO  ! density
 REAL,                   INTENT(IN)  :: PTSTEP  ! Time step 
 !
+REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC    ! variable at t
+REAL, DIMENSION(:,:,:), INTENT(IN)    :: PCR &    ! Courant number
+                                      ,  PRHO  ! density
+!
 ! output source term
-REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: PR &
+REAL, DIMENSION(:,:,:), INTENT(OUT) :: PR
+!$acc reflected (PSRC,PCR,PRHO,PR)
 !
 !*       0.2   Declarations of local variables :
 !
 ! terms used in parabolic interpolation, dmq, qL, qR, dq, q6
-                                                     , ZQL, ZQR, ZDQ, ZQ6, ZDMQ &
+REAL, DIMENSION(SIZE(PCR,1),SIZE(PCR,2),SIZE(PCR,3)) :: &
+                                                      ZQL, ZQR, ZDQ, ZQ6, ZDMQ &
 !
 ! extra variables for the initial guess of parabolae parameters
                                                      , ZQL0,ZQR0,ZQ60 &
@@ -1288,7 +1292,7 @@ IKU=size(psrc,3)
 
 #define JUAN_ACC_01_Z
 #ifdef JUAN_ACC_01_Z
-!$acc data region local (ZDMQ,ZQL0,ZQR0,ZDQ,ZQ60,ZQL,ZQR,ZQ6,ZFPOS,ZFNEG) copyin (psrc,pcr,prho) copyout(pr) 
+!$acc data region local (ZDMQ,ZQL0,ZQR0,ZDQ,ZQ60,ZQL,ZQR,ZQ6,ZFPOS,ZFNEG)
 !$acc region  
 #endif
 !
@@ -1401,7 +1405,7 @@ ZFNEG(:,:,IKE+1) = (ZQR(:,:,IKE)-PSRC(:,:,IKE+1))*PCR(:,:,IKE+1) + &
 !$acc end data region  
 #endif
 
-CALL GET_HALO(PR)
+CALL GET_HALO_D(PR)
 CALL MPPDB_CHECK3DM("PPM::PPM_01_Z ::PR",PRECISION,PR)
 !
 !!$CONTAINS
@@ -1465,7 +1469,7 @@ CALL MPPDB_CHECK3DM("PPM::PPM_01_Z ::PR",PRECISION,PR)
 !!$!
 !!$END FUNCTION DIF2Z
 !
-END FUNCTION PPM_01_Z
+END SUBROUTINE PPM_01_Z
 !
 !
 !-------------------------------------------------------------------------------