diff --git a/src/ZSOLVER/contrav.f90 b/src/ZSOLVER/contrav.f90
index ec2915c8132b0f54ff7c45584855121962a2e3f2..4b7299be16db2f9a9de4fc2af39649b6d5f12082 100644
--- a/src/ZSOLVER/contrav.f90
+++ b/src/ZSOLVER/contrav.f90
@@ -700,6 +700,8 @@ ELSE
 ! Z1(:,:,:) = 0.
 ! Z2(:,:,:) = 0.
 !
+CALL MPPDB_CHECK3DM("contrav_device :: init Z1/Z2",PRECISION,Z1,Z2)
+!
 IF (KADV_ORDER == 2 ) THEN
 #ifdef MNH_OPENACC
   call Print_msg( NVERB_WARNING, 'GEN', 'CONTRAV', 'OpenACC: KADV_ORDER=2 and LFLAT=.TRUE. not yet tested' )
@@ -782,7 +784,7 @@ ELSE IF (KADV_ORDER == 4 ) THEN
 !                      but ji loop can not be collapsed -> 10x slower on GPU
 !                     *ztmp1 and ztmp2 are not necessary but improve readability (no impact on performance)
 #ifdef MNH_COMPILER_NVHPC
-!$acc loop independent collapse(3) private(ztmp1, ztmp2)
+!$acc loop independent collapse(3)      
 #endif
   do concurrent(ji=IW:IE,jj=1:iju,jk=IKB:IKE+1)
         ztmp1 = ( 9.0 * PDZX(ji,   jj, jk ) - ( PDZX(ji+1, jj, jk ) + PDZX(ji,   jj, jk ) + PDZX(ji-1, jj, jk ) ) / 3.0 ) / 16.0
@@ -804,13 +806,16 @@ ELSE IF (KADV_ORDER == 4 ) THEN
                          - 0.5 * (  ( PRVCT(ji, jj-1, jk ) + PRVCT(ji, jj-1, jk-1 ) ) * PDZY(ji, jj-1, jk )           &
                                   + ( PRVCT(ji, jj+2, jk ) + PRVCT(ji, jj+2, jk-1 ) ) * PDZY(ji, jj+2, jk )  ) / 12.0
   end do
-!$acc end kernels     
+!$acc end kernels
+!
+!!$CALL MPPDB_CHECK3DM("contrav_device :: dom Z1/Z2",PRECISION,Z1,Z2)  
 !
 !*       3.2    limits of the process subdomain (inside the whole domain or in cyclic conditions)
 !
 !!$  IF (NHALO==1) THEN
+!$acc kernels async
 #ifdef MNH_COMPILER_NVHPC
-!$acc parallel loop independent collapse(2) async
+!$acc loop independent collapse(2)
 #endif
     do concurrent(jj=1:iju,jk=IKB:IKE+1)
       ztmp1 = ( 9.0 * PDZX(IIE,   jj, jk ) - ( PDZX(IIE+1, jj, jk ) + PDZX(IIE,   jj, jk ) + PDZX(IIE-1, jj, jk ) ) / 3.0 ) / 16.0
@@ -819,10 +824,12 @@ ELSE IF (KADV_ORDER == 4 ) THEN
                                  + ( PRUCT(IIE+1, jj, jk ) + PRUCT(IIE+1, jj, jk-1 ) ) * ztmp2               ) / 12.0 &
                         - 0.5 * (  ( PRUCT(IIE-1, jj, jk ) + PRUCT(IIE-1, jj, jk-1 ) ) * PDZX(IIE-1, jj, jk)          &
                                  + ( ZU_EAST     (jj, jk ) + ZU_EAST     (jj, jk-1 ) ) * ZDZX_EAST  (jj, jk)  ) / 12.0
-    end do
+   end do
+!$acc end kernels   
 !
+!$acc kernels async   
 #ifdef MNH_COMPILER_NVHPC
-!$acc parallel loop independent collapse(2) async
+!$acc loop independent collapse(2)
 #endif
     do concurrent(ji=1:iiu,jk=IKB:IKE+1)
       ztmp1 = ( 9.0 * PDZY(ji, IJE,   jk) - ( PDZY      (ji, IJE+1, jk) + PDZY(ji, IJE,   jk) + PDZY(ji, IJE-1, jk) ) / 3.0 ) / 16.0
@@ -832,6 +839,7 @@ ELSE IF (KADV_ORDER == 4 ) THEN
                         - 0.5 * (  ( PRVCT   (ji, IJE-1, jk ) + PRVCT   (ji, IJE-1, jk-1 ) ) * PDZY      (ji, IJE-1, jk )          &
                                  + ( ZV_NORTH(ji,        jk ) + ZV_NORTH(ji,        jk-1 ) ) * ZDZY_NORTH(ji,        jk ) ) / 12.0
    end do
+!$acc end kernels
 !$acc wait
 !!$  END IF
 !
@@ -885,6 +893,7 @@ ELSE IF (KADV_ORDER == 4 ) THEN
   end do
 !$acc end kernels 
 !
+CALL MPPDB_CHECK3DM("contrav_device :: PRWCT/Z1/Z2",PRECISION,PRWCT,Z1,Z2)
 !
 END IF
 !
diff --git a/src/ZSOLVER/get_halo.f90 b/src/ZSOLVER/get_halo.f90
index 9959c71d26b1be2de10e4c58d1d34c46ccdeb528..94ee57e29fce6830f5e6e8783374514479e8d2fa 100644
--- a/src/ZSOLVER/get_halo.f90
+++ b/src/ZSOLVER/get_halo.f90
@@ -419,15 +419,19 @@ USE MODI_GET_HALO, ONLY : GET_HALO_START_D,GET_HALO_STOP_D
 IMPLICIT NONE
 !
 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC    ! variable at t
-!$acc declare present (PSRC)
+! acc declare present (PSRC)
 CHARACTER(len=4), OPTIONAL :: HDIR ! to send only halo on X or Y direction
 character(len=*), optional, intent(in) :: HNAME ! Name of the field to be added
 !
 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 MPPDB_CHECK(PSRC,"GET_HALO_D end:PSRC")
+!
 END SUBROUTINE GET_HALO_D
 !     #########################
       SUBROUTINE GET_HALO_START_D(PSRC,KNB_REQ,KREQ,HDIR)
@@ -450,7 +454,7 @@ USE MODE_MPPDB
 IMPLICIT NONE
 !
 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC    ! variable at t
-!$acc declare present (PSRC)
+! acc declare present (PSRC)
 INTEGER                               :: KNB_REQ ,  KREQ(8)
 CHARACTER(len=4), OPTIONAL :: HDIR ! to send only halo on X or Y direction
 !
@@ -465,8 +469,10 @@ CALL INIT_HALO_D()
 
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
-!$acc data present (ZNORTH_IN, ZSOUTH_IN, ZWEST_IN, ZEAST_IN) &
-!$acc present (ZNORTH_OUT, ZSOUTH_OUT, ZWEST_OUT, ZEAST_OUT)
+!$acc data present (PSRC) &
+!$acc present (ZNORTH_IN, ZSOUTH_IN, ZWEST_IN, ZEAST_IN) &
+!$acc present (ZNORTH_OUT, ZSOUTH_OUT, ZWEST_OUT, ZEAST_OUT) 
+
 
 LX = .FALSE.
 LY = .FALSE. 
@@ -660,7 +666,7 @@ USE MODE_MPPDB
 IMPLICIT NONE
 !
 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PSRC    ! variable at t
-!$acc declare present (PSRC)
+! acc declare present (PSRC)
 INTEGER                               :: KNB_REQ , KREQ(8)
 CHARACTER(len=4), OPTIONAL :: HDIR ! to send only halo on X or Y direction
 !
@@ -675,7 +681,8 @@ CALL INIT_HALO_D()
 
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
-!$acc data present (ZNORTH_IN, ZSOUTH_IN, ZWEST_IN, ZEAST_IN) &
+!$acc data  present (PSRC) &
+!$acc present (ZNORTH_IN, ZSOUTH_IN, ZWEST_IN, ZEAST_IN) &
 !$acc present (ZNORTH_OUT, ZSOUTH_OUT, ZWEST_OUT, ZEAST_OUT)
 
 LX = .FALSE.
@@ -786,7 +793,12 @@ LOGICAL      :: LX , LY
 INTEGER      :: INB_REQ , IREQ(8)
 INTEGER      :: IERR
 
-if ( NPROC == 1 ) RETURN
+CALL MPPDB_CHECK(PSRC,"GET_HALO_DD big:PSRC")
+
+if ( NPROC == 1 ) THEN
+   CALL MPPDB_CHECK(PSRC,"GET_HALO_DD end:PSRC")
+   RETURN
+end if
 
 CALL INIT_HALO_D()
 
@@ -1020,6 +1032,8 @@ END IF
 
 !$acc end data
 
+CALL MPPDB_CHECK(PSRC,"GET_HALO_DD end:PSRC")
+
 END SUBROUTINE GET_HALO_DD
 !     ########################################
       SUBROUTINE GET_2D_HALO_DD(PSRC, HDIR, HNAME)
@@ -1063,7 +1077,12 @@ LOGICAL      :: LX , LY
 INTEGER      :: INB_REQ , IREQ(8)
 INTEGER      :: IERR
 
-if ( NPROC == 1 ) RETURN
+CALL MPPDB_CHECK(PSRC,"GET_2D_HALO_DD big:PSRC")
+
+if ( NPROC == 1 ) THEN
+   CALL MPPDB_CHECK(PSRC,"GET_2D_HALO_DD end:PSRC")
+   RETURN
+end if
 
 CALL INIT_HALO_D()
 
@@ -1297,6 +1316,8 @@ END IF
 
 !$acc end data
 
+CALL MPPDB_CHECK(PSRC,"GET_2D_HALO_DD end:PSRC")
+
 END SUBROUTINE GET_2D_HALO_DD
 !-------------------------------------------------------------------------------
 !     ########################################
@@ -1342,7 +1363,12 @@ INTEGER      :: INB_REQEW , IREQEW(4)
 INTEGER      :: INB_REQNS , IREQNS(4)
 INTEGER      :: IERR
 
-if ( NPROC == 1 ) RETURN
+CALL MPPDB_CHECK(PSRC,"GET_HALO_DDC big:PSRC")
+
+if ( NPROC == 1 ) then
+   CALL MPPDB_CHECK(PSRC,"GET_HALO_DDC end:PSRC")
+   RETURN
+   endif
 
 CALL INIT_HALO_D()
 
@@ -1605,6 +1631,8 @@ END IF
 
 !$acc end data
 
+CALL MPPDB_CHECK(PSRC,"GET_HALO_DDC end:PSRC")
+
 END SUBROUTINE GET_HALO_DDC
 !-------------------------------------------------------------------------------
 !     ########################################
@@ -1650,7 +1678,12 @@ INTEGER      :: INB_REQEW , IREQEW(4)
 INTEGER      :: INB_REQNS , IREQNS(4)
 INTEGER      :: IERR
 
-if ( NPROC == 1 ) RETURN
+CALL MPPDB_CHECK(PSRC,"GET_2D_HALO_DDC big:PSRC")
+
+if ( NPROC == 1 ) then
+   CALL MPPDB_CHECK(PSRC,"GET_2D_HALO_DDC end:PSRC")
+   RETURN
+end if
 
 CALL INIT_HALO_D()
 
@@ -1913,6 +1946,8 @@ END IF
 
 !$acc end data
 
+CALL MPPDB_CHECK(PSRC,"GET_2D_HALO_DDC end:PSRC")
+
 END SUBROUTINE GET_2D_HALO_DDC
 !-------------------------------------------------------------------------------
 !     ########################################
@@ -1957,7 +1992,14 @@ INTEGER      :: IERR
 
 REAL , DIMENSION(:,:) , POINTER , CONTIGUOUS :: ZH2_EAST,ZH2_WEST,ZH2_NORTH,ZH2_SOUTH
 
-if ( NPROC == 1 ) RETURN
+CALL MPPDB_CHECK(PSRC,"GET_HALO2_DD big:PSRC")
+
+if ( NPROC == 1 ) then
+   CALL MPPDB_CHECK(PSRC,"GET_HALO2_DD end:PSRC")
+   RETURN
+end if
+
+CALL INIT_HALO_D()
 
 !$acc data present ( PSRC ) &
 !$acc present (ZNORTH2_IN, ZSOUTH2_IN, ZWEST2_IN, ZEAST2_IN) &
@@ -2183,6 +2225,8 @@ END IF
 
 !$acc end data
 
+CALL MPPDB_CHECK(PSRC,"GET_HALO2_DD end:PSRC")
+
 END SUBROUTINE GET_HALO2_DD
 !-------------------------------------------------------------------------------
 !     ########################################
@@ -2227,7 +2271,12 @@ INTEGER      :: IERR
 
 REAL , DIMENSION(:,:) , POINTER , CONTIGUOUS :: ZH2F_EAST,ZH2F_WEST,ZH2F_NORTH,ZH2F_SOUTH
 
-if ( NPROC == 1 ) RETURN
+CALL MPPDB_CHECK(PSRC,"GET_HALO2_DF beg:PSRC")
+
+if ( NPROC == 1 ) then
+   CALL MPPDB_CHECK(PSRC,"GET_HALO2_DF end:PSRC")
+   RETURN
+end if
 
 CALL INIT_HALO_D()
 
@@ -2455,6 +2504,8 @@ END IF
 
 !$acc end data
 
+CALL MPPDB_CHECK(PSRC,"GET_HALO2_DF end:PSRC")
+
 END SUBROUTINE GET_HALO2_DF
 !
 !     ###################################################
@@ -2464,6 +2515,7 @@ END SUBROUTINE GET_HALO2_DF
 USE MODE_ll
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll, HALO2LIST_ll
 USE MODI_GET_HALO, ONLY : GET_HALO_D,GET_HALO_DD,GET_HALO2_DD
+USE MODE_MPPDB
 !
 IMPLICIT NONE
 !
@@ -2486,6 +2538,8 @@ else
   yname = 'PSRC'
 end if
 
+CALL MPPDB_CHECK(PSRC,"GET_HALO2_D big:PSRC")
+
 CALL GET_HALO_DD(PSRC,HNAME=yname)
 
 !!$NULLIFY( TZ_PSRC_ll,TP_PSRC_HALO2_ll)
@@ -2497,6 +2551,8 @@ CALL GET_HALO2_DD(PSRC,TP_PSRC_HALO2_ll,'GET_HALO2_DD::'//trim( yname ) )
 !
 !!$CALL CLEANLIST_ll(TZ_PSRC_ll)
 !
+CALL MPPDB_CHECK(PSRC,"GET_HALO2_D end:PSRC")
+!
 END SUBROUTINE GET_HALO2_D
 !
 #endif