diff --git a/src/MNH/etheta.f90 b/src/MNH/etheta.f90
index b9f0fa5d184c9d90d9999f43e360a1ef9a991666..74620d7669887a855b58312a415aff303d6384e2 100644
--- a/src/MNH/etheta.f90
+++ b/src/MNH/etheta.f90
@@ -193,7 +193,7 @@ ELSE
 !$acc end kernels
 
     IF ( KRRI>0 ) THEN  ! rc and ri case
-      !$acc kernels
+      !$acc kernels present(ZA)
       ZRW(:,:,:) = ZRW(:,:,:) + PRM(:,:,:,3)
       !$acc loop seq
       DO JRR=5,KRR
diff --git a/src/MNH/gradient_m.f90 b/src/MNH/gradient_m.f90
index 4bcc5378ac1b61badb6eb83d287702861f7c0e40..8ae6247196dff65f3c8f347faf1f3609c0c25cd0 100644
--- a/src/MNH/gradient_m.f90
+++ b/src/MNH/gradient_m.f90
@@ -323,7 +323,7 @@ IF (.NOT. LFLAT) THEN
   CALL DXF_DEVICE( ZTMP1(:,:,:), ZTMP2(:,:,:) )
   CALL MXF_DEVICE( PDZX, ZTMP1(:,:,:) )
   CALL DZM_DEVICE( PA(:,:,:), ZTMP3(:,:,:) )
-  !$acc kernels
+  !$acc kernels present(ZTMP4)
   ZTMP4(:,:,:) = ZTMP1(:,:,:) * ZTMP3(:,:,:) / PDZZ(:,:,:)
   !$acc end kernels
   CALL MZF_DEVICE( ZTMP4(:,:,:), ZTMP1(:,:,:) )
@@ -500,7 +500,7 @@ IF (.NOT. LFLAT) THEN
   CALL DYF_DEVICE( ZTMP1(:,:,:), ZTMP2(:,:,:) )
   CALL MYF_DEVICE( PDZY, ZTMP1(:,:,:) )
   CALL DZM_DEVICE( PA, ZTMP3(:,:,:) )
-  !$acc kernels
+  !$acc kernels present(ZTMP4)
   ZTMP4(:,:,:) = ZTMP1(:,:,:) * ZTMP3(:,:,:) / PDZZ(:,:,:)
   !$acc end kernels
   CALL MZF_DEVICE( ZTMP4(:,:,:), ZTMP1(:,:,:) )
diff --git a/src/MNH/mode_prandtl.f90 b/src/MNH/mode_prandtl.f90
index 262fd50fed1d75c6003960c69b8b245bca554e48..50bf57bf14c697c5ee35b7c21b84c7055fe0249b 100644
--- a/src/MNH/mode_prandtl.f90
+++ b/src/MNH/mode_prandtl.f90
@@ -100,6 +100,7 @@ SUBROUTINE PHI3(PREDTH1,PREDR1,PRED2TH3,PRED2R3,PRED2THR3,HTURBDIM,OUSERV,PPHI3)
 
   INTEGER  :: JIU,JJU,JKU
   INTEGER  :: JI,JJ,JK
+  LOGICAL  :: LTURBDIM_3DIM
   
 !$acc data present( PREDTH1, PREDR1, PRED2TH3, PRED2R3, PRED2THR3, PPHI3 )
 
@@ -110,6 +111,8 @@ JIU =  size( predth1, 1 )
 JJU =  size( predth1, 2 )
 JKU =  size( predth1, 3 )
 
+LTURBDIM_3DIM = (HTURBDIM=='3DIM')
+
 #ifndef MNH_OPENACC
 allocate( zw1      ( size( predth1, 1 ), size( predth1, 2 ), size( predth1, 3 ) ) )
 allocate( zw2      ( size( predth1, 1 ), size( predth1, 2 ), size( predth1, 3 ) ) )
@@ -125,8 +128,8 @@ CALL MNH_MEM_GET( gphi3logic, JIU,JJU,JKU )
 
 !$acc data present( zw1, zw2, gphi3logic )
 
-!$acc kernels
-IF (HTURBDIM=='3DIM') THEN
+!$acc kernels present(GPHI3LOGIC,PPHI3)
+IF (LTURBDIM_3DIM) THEN
         !* 3DIM case
   IF (OUSERV) THEN
 #ifndef MNH_BITREP
@@ -302,14 +305,16 @@ SUBROUTINE D_PHI3DTDZ_O_DDTDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,O
   REAL, DIMENSION(SIZE(PREDTH1,1),SIZE(PREDTH1,2),SIZE(PREDTH1,3)), INTENT(OUT) :: PD_PHI3DTDZ_O_DDTDZ
 #endif
   INTEGER :: IKB, IKE,JL,JK,JJ
+  LOGICAL  :: LTURBDIM_3DIM
 
 !$acc data present( PPHI3, PREDTH1, PREDR1, PRED2TH3, PRED2THR3, PD_PHI3DTDZ_O_DDTDZ )
 
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PREDTH1,3)-JPVEXT_TURB
+LTURBDIM_3DIM = (HTURBDIM=='3DIM')
 !
 !$acc kernels
-IF (HTURBDIM=='3DIM') THEN
+IF (LTURBDIM_3DIM) THEN
         !* 3DIM case
   IF (OUSERV) THEN
     WHERE (PPHI3(:,:,:)<=XPHI_LIM)
@@ -394,15 +399,17 @@ SUBROUTINE D_PHI3DRDZ_O_DDRDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,O
   REAL, DIMENSION(SIZE(PREDTH1,1),SIZE(PREDTH1,2),SIZE(PREDTH1,3)), INTENT(OUT) :: PD_PHI3DRDZ_O_DDRDZ
 #endif
   INTEGER :: IKB, IKE
+  LOGICAL  :: LTURBDIM_3DIM
 
 !$acc data present( PPHI3, PREDTH1, PREDR1, PRED2TH3, PRED2THR3, PD_PHI3DRDZ_O_DDRDZ )
 
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PREDTH1,3)-JPVEXT_TURB
+LTURBDIM_3DIM = (HTURBDIM=='3DIM')
 !
 !
 !$acc kernels
-IF (HTURBDIM=='3DIM') THEN
+IF (LTURBDIM_3DIM) THEN
         !* 3DIM case
   IF (OUSERV) THEN
     WHERE (PPHI3(:,:,:)<=XPHI_LIM)
@@ -468,7 +475,8 @@ SUBROUTINE D_PHI3DTDZ2_O_DDTDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,PDTDZ,HTU
 #ifdef MNH_OPENACC
   REAL, DIMENSION(:,:,:), pointer , contiguous :: ZTMP1_DEVICE
 #endif
-
+  LOGICAL  :: LTURBDIM_3DIM
+  
 !$acc data present( PPHI3, PREDTH1, PREDR1, PRED2TH3, PRED2THR3, PDTDZ, PD_PHI3DTDZ2_O_DDTDZ )
 
 #ifdef MNH_OPENACC
@@ -482,9 +490,10 @@ CALL MNH_MEM_GET( ztmp1_device, size( predth1, 1 ), size( predth1, 2 ), size( pr
 
 IKB = 1+JPVEXT_TURB
 IKE = SIZE(PREDTH1,3)-JPVEXT_TURB
+LTURBDIM_3DIM = (HTURBDIM=='3DIM')
 !
 !
-IF (HTURBDIM=='3DIM') THEN
+IF (LTURBDIM_3DIM) THEN
    ! by derivation of (phi3 dtdz) * dtdz according to dtdz we obtain:
 #ifndef MNH_OPENACC
    PD_PHI3DTDZ2_O_DDTDZ(:,:,:) = PDTDZ * (PPHI3 +  &
diff --git a/src/MNH/shuman_device.f90 b/src/MNH/shuman_device.f90
index d33acba5d2596bb0f7a04875abb4689c0906464d..f9158420a88803f8a1104c72e351b08c82d15517 100644
--- a/src/MNH/shuman_device.f90
+++ b/src/MNH/shuman_device.f90
@@ -413,7 +413,7 @@ IIU = SIZE(PA,1)
 IJU = SIZE(PA,2)
 IKU = SIZE(PA,3)
 !
-!$acc kernels present(PA,PMYF)
+!$acc kernels present(PA,PMYF,JPHEXT)
 #ifndef _OPT_LINEARIZED_LOOPS
 !$acc loop independent collapse(3)
 DO JK=1,IKU
@@ -531,7 +531,7 @@ IJU = SIZE(PA,2)
 IKU = SIZE(PA,3)
 !
 #ifndef _OPT_LINEARIZED_LOOPS
-!$acc kernels present(PA,PMYM)
+!$acc kernels present(PA,PMYM,JPHEXT)
 !$acc loop independent collapse(3)
 DO JK=1,IKU
   DO JJ=2,IJU !TODO: remplacer le 1+1 par 1+JPHEXT ?
@@ -545,7 +545,7 @@ JIJKOR  = 1 + IIU
 JIJKEND = IIU*IJU*IKU
 !CDIR NODEP
 !OCL NOVREC
-!$acc kernels present(PA,PMYM)
+!$acc kernels present(PA,PMYM,JPHEXT)
 DO JIJK=JIJKOR , JIJKEND
    PMYM(JIJK,1,1) = 0.5*( PA(JIJK,1,1)+PA(JIJK-IIU,1,1) )
 END DO
@@ -1118,7 +1118,7 @@ IIU = SIZE(PA,1)
 IJU = SIZE(PA,2)
 IKU = SIZE(PA,3)
 !
-!$acc kernels present(PA,PDYF)
+!$acc kernels present(PA,PDYF,JPHEXT)
 #ifndef _OPT_LINEARIZED_LOOPS
 !$acc loop independent collapse(3)
 DO JK=1,IKU
@@ -1233,7 +1233,7 @@ IJU=SIZE(PA,2)
 IKU=SIZE(PA,3)
 !
 #ifndef _OPT_LINEARIZED_LOOPS
-!$acc kernels present(PA,PDYM)
+!$acc kernels present(PA,PDYM,JPHEXT)
 !$acc loop independent collapse(3)
 DO JK=1,IKU
   DO JJ=2,IJU !TODO: remplacer le 2 par JPHEXT+1 ?
diff --git a/src/MNH/turb_hor_tke.f90 b/src/MNH/turb_hor_tke.f90
index dac1e826edf89f16feb60d21e4b6746eb82e856a..4e42a64a53bd2f3c38438007683bce55a3dd6397 100644
--- a/src/MNH/turb_hor_tke.f90
+++ b/src/MNH/turb_hor_tke.f90
@@ -254,7 +254,7 @@ ZFLX(:,:,IKB:IKB) =                                                      &
 CALL MXM_DEVICE( PK(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1) )
 CALL DXM_DEVICE( PTKEM(:,:,IKB:IKB), ZTMP2_DEVICE(:,:,1:1) )
 CALL MXM_DEVICE( ZFLX (:,:,IKB:IKB), ZTMP3_DEVICE(:,:,1:1) )
-!$acc kernels
+!$acc kernels present(ZFLX)
 ZFLX(:,:,IKB) =                                                &
          - XCET * ZTMP1_DEVICE(:,:,1)                 *  (        &
            ZTMP2_DEVICE(:,:,1) * PINV_PDXX(:,:,IKB)               &
@@ -384,7 +384,7 @@ IF (.NOT. L2D) THEN
 !
 ! special case near the ground ( uncentred gradient )
 !
-!$acc kernels  
+!$acc kernels present(ZFLX)  
   ZFLX(:,:,IKB) =  ZCOEFF(:,:,IKB+2)*PTKEM(:,:,IKB+2)                     &
                  + ZCOEFF(:,:,IKB+1)*PTKEM(:,:,IKB+1)                     &
                  + ZCOEFF(:,:,IKB  )*PTKEM(:,:,IKB  )     
@@ -400,7 +400,7 @@ IF (.NOT. L2D) THEN
   CALL MYM_DEVICE( PK(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1) )
   CALL DYM_DEVICE( PTKEM(:,:,IKB:IKB), ZTMP2_DEVICE(:,:,1:1) )
   CALL MYM_DEVICE( ZFLX (:,:,IKB:IKB), ZTMP3_DEVICE(:,:,1:1) )
-!$acc kernels
+!$acc kernels present(ZFLX)
   ZFLX(:,:,IKB) =                                                      &
      - XCET * ZTMP1_DEVICE(:,:,1) *  (           &
        ZTMP2_DEVICE(:,:,1) * PINV_PDYY(:,:,IKB)                 &
diff --git a/src/MNH/turb_hor_uv.f90 b/src/MNH/turb_hor_uv.f90
index 2d15fd75f5434180c314b9307d60bcd618ba6877..1720e36ed9c56aaefed47f78934a7bbe1ef2c916 100644
--- a/src/MNH/turb_hor_uv.f90
+++ b/src/MNH/turb_hor_uv.f90
@@ -395,18 +395,18 @@ CALL DYM_DEVICE(PUM(:,:,IKB:IKB),ZTMP1_DEVICE(:,:,1:1))
 CALL MXM_DEVICE(PDZZ(:,:,IKB+1:IKB+1),ZTMP2_DEVICE(:,:,1:1))
 CALL MXM_DEVICE(PDZZ(:,:,IKB:IKB),ZTMP3_DEVICE(:,:,1:1))
 !
-!$acc kernels
+!$acc kernels present(ZTMP5_DEVICE)
 ZTMP5_DEVICE(:,:,1) = (PUM(:,:,IKB+1)-PUM(:,:,IKB))*(1./ZTMP2_DEVICE(:,:,1)+1./ZTMP3_DEVICE(:,:,1))
 !$acc end kernels
 CALL MYM_DEVICE(ZTMP5_DEVICE(:,:,1:1),ZTMP4_DEVICE(:,:,1:1))
 !
-!$acc kernels
+!$acc kernels present(ZTMP5_DEVICE)
 ZTMP5_DEVICE(:,:,1) = PDZY(:,:,IKB+1) + PDZY(:,:,IKB)
 !$acc end kernels
 CALL MXM_DEVICE(ZTMP5_DEVICE(:,:,1:1),ZTMP2_DEVICE(:,:,1:1))
 !
 CALL MXM_DEVICE(PDYY(:,:,IKB:IKB),ZTMP3_DEVICE(:,:,1:1))
-!$acc kernels
+!$acc kernels present(ZTMP5_DEVICE)
 ZTMP5_DEVICE(:,:,1) = ( ZTMP1_DEVICE(:,:,1) - ZTMP4_DEVICE(:,:,1)*0.5*ZTMP2_DEVICE(:,:,1) ) &
                       / ZTMP3_DEVICE(:,:,1)
 !$acc end kernels
@@ -416,7 +416,7 @@ CALL DXM_DEVICE(PVM(:,:,IKB:IKB),ZTMP1_DEVICE(:,:,1:1))
 !
 CALL MYM_DEVICE(PDZZ(:,:,IKB:IKB),ZTMP2_DEVICE(:,:,1:1))
 CALL MYM_DEVICE(PDZZ(:,:,IKB+1:IKB+1),ZTMP3_DEVICE(:,:,1:1))
-!$acc kernels
+!$acc kernels present(ZTMP6_DEVICE)
 ZTMP6_DEVICE(:,:,1) = (PVM(:,:,IKB+1)-PVM(:,:,IKB))*(1./ZTMP3_DEVICE(:,:,1)+1./ZTMP2_DEVICE(:,:,1))
 !$acc end kernels
 CALL MXM_DEVICE(ZTMP6_DEVICE(:,:,1:1),ZTMP4_DEVICE(:,:,1:1))
@@ -427,7 +427,7 @@ ZTMP6_DEVICE(:,:,1:1) = (PDZX(:,:,IKB+1:IKB+1)+PDZX(:,:,IKB:IKB))
 CALL MYM_DEVICE(ZTMP6_DEVICE(:,:,1:1),ZTMP2_DEVICE(:,:,1:1))
 !
 CALL MYM_DEVICE(PDXX(:,:,IKB:IKB),ZTMP3_DEVICE(:,:,1:1))
-!$acc kernels
+!$acc kernels present(ZTMP6_DEVICE)
 ZTMP6_DEVICE(:,:,1) = ( ZTMP1_DEVICE(:,:,1) - ZTMP4_DEVICE(:,:,1)*0.5*ZTMP2_DEVICE(:,:,1) ) &
                       / ZTMP3_DEVICE(:,:,1)
 !$acc end kernels
@@ -435,13 +435,13 @@ ZTMP6_DEVICE(:,:,1) = ( ZTMP1_DEVICE(:,:,1) - ZTMP4_DEVICE(:,:,1)*0.5*ZTMP2_DEVI
 CALL MXM_DEVICE(PK(:,:,IKB:IKB),ZTMP1_DEVICE(:,:,1:1))
 CALL MYM_DEVICE(ZTMP1_DEVICE(:,:,1:1),ZTMP2_DEVICE(:,:,1:1))
 !
-!$acc kernels
+!$acc kernels present(ZFLX)
 ZFLX(:,:,IKB) = - XCMFS * ZTMP2_DEVICE(:,:,1) * ( ZTMP5_DEVICE(:,:,1) + ZTMP6_DEVICE(:,:,1) )
 !$acc end kernels
 #endif
 ! 
 ! extrapolates this flux under the ground with the surface flux
-!$acc kernels
+!$acc kernels present(ZFLX)
 #ifndef MNH_BITREP
 ZFLX(:,:,IKB-1) =                                                           &
    PTAU11M(:,:) * PCOSSLOPE(:,:) * PSINSLOPE(:,:) * PDIRCOSZW(:,:)**2         &
@@ -479,7 +479,7 @@ ZFLX(:,:,IKB-1:IKB-1) = 2. * MXM( MYM( ZFLX(:,:,IKB-1:IKB-1) ) )  &
 #else
 CALL MYM_DEVICE(ZFLX(:,:,IKB-1:IKB-1),ZTMP1_DEVICE(:,:,1:1))
 CALL MXM_DEVICE(ZTMP1_DEVICE(:,:,1:1),ZTMP2_DEVICE(:,:,1:1))
-!$acc kernels
+!$acc kernels present(ZFLX)
 ZFLX(:,:,IKB-1) = 2. * ZTMP2_DEVICE(:,:,1) - ZFLX(:,:,IKB)
 !$acc end kernels
 #endif
@@ -728,7 +728,7 @@ IF (KSPLT==1) THEN
         ) / MXF(MYM( 0.5*(PDXX(:,:,IKB:IKB)+PDXX(:,:,IKB+1:IKB+1)) ) )&
     ) 
 #else
-  !$acc kernels
+  !$acc kernels present(ZTMP1_DEVICE)
   ZTMP1_DEVICE(:,:,1) = 0.5 * (ZFLX(:,:,IKB+1)+ZFLX(:,:,IKB))
   !$acc end kernels
   CALL MYF_DEVICE(ZTMP1_DEVICE(:,:,1:1),ZTMP2_DEVICE(:,:,1:1))
@@ -750,27 +750,27 @@ IF (KSPLT==1) THEN
   ZTMP2_DEVICE(:,:,1) = 0.5*(PDXX(:,:,IKB)+PDXX(:,:,IKB+1))
 !$acc end kernels
   CALL MYM_DEVICE(ZTMP2_DEVICE(:,:,1:1),ZTMP6_DEVICE(:,:,1:1))
-!$acc kernels
+!$acc kernels present(ZTMP2_DEVICE)
   ZTMP2_DEVICE(:,:,1) = ZTMP3_DEVICE(:,:,1) / ZTMP4_DEVICE(:,:,1) + ZTMP5_DEVICE(:,:,1) / ZTMP6_DEVICE(:,:,1)
 !$acc end kernels
   CALL MYF_DEVICE(ZTMP2_DEVICE(:,:,1:1),ZTMP3_DEVICE(:,:,1:1))
   CALL MXF_DEVICE(ZTMP3_DEVICE(:,:,1:1),ZTMP2_DEVICE(:,:,1:1))
   !
   CALL MXM_DEVICE(PDZZ(:,:,IKB+1:IKB+1),ZTMP3_DEVICE(:,:,1:1))
-!$acc kernels
+!$acc kernels present(ZTMP5_DEVICE)
   ZTMP5_DEVICE(:,:,1) = (PUM(:,:,IKB+1)-PUM(:,:,IKB)) / ZTMP3_DEVICE(:,:,1) * PDZY(:,:,IKB+1)
 !$acc end kernels
   CALL MXF_DEVICE(ZTMP5_DEVICE(:,:,1:1),ZTMP3_DEVICE(:,:,1:1))
   CALL MYF_DEVICE(ZTMP4_DEVICE(:,:,1:1),ZTMP5_DEVICE(:,:,1:1)) !Re-use of ZTMP4_DEVICE
   !
   CALL MYM_DEVICE(PDZZ(:,:,IKB+1:IKB+1),ZTMP4_DEVICE(:,:,1:1))
-!$acc kernels
+!$acc kernels present(ZTMP7_DEVICE)
   ZTMP7_DEVICE(:,:,1) = (PVM(:,:,IKB+1)-PVM(:,:,IKB)) / ZTMP4_DEVICE(:,:,1) * PDZX(:,:,IKB+1)
 !$acc end kernels
   CALL MYF_DEVICE(ZTMP7_DEVICE(:,:,1:1),ZTMP4_DEVICE(:,:,1:1))
   CALL MXF_DEVICE(ZTMP6_DEVICE(:,:,1:1),ZTMP7_DEVICE(:,:,1:1)) !Re-use of ZTMP6_DEVICE
   !  
-!$acc kernels
+!$acc kernels present(ZWORK)
   ZWORK(:,:,IKB) =  - ZTMP1_DEVICE(:,:,1) * (ZTMP2_DEVICE(:,:,1) &
                                              - ZTMP3_DEVICE(:,:,1) / ZTMP5_DEVICE(:,:,1) &
                                              - ZTMP4_DEVICE(:,:,1) / ZTMP7_DEVICE(:,:,1) ) 
diff --git a/src/MNH/turb_hor_uw.f90 b/src/MNH/turb_hor_uw.f90
index 3be5e10613fde6a02f86eb6cf4f0292593cb5266..aaf35a767e3529b55b48ebb9389008173d6cad46 100644
--- a/src/MNH/turb_hor_uw.f90
+++ b/src/MNH/turb_hor_uw.f90
@@ -476,7 +476,7 @@ IF (KSPLT==1) THEN
                 /(PDZZ(:,:,IKB+1)+PDZZ(:,:,IKB))
   !$acc end kernels
   CALL MXM_DEVICE( ZTMP3_DEVICE(:,:,1:1), ZTMP4_DEVICE(:,:,1:1) )
-  !$acc kernels
+  !$acc kernels present(ZTMP3_DEVICE)
   ZTMP3_DEVICE(:,:,1) = ZFLX(:,:,IKB+1) *                  &
    (   (PUM(:,:,IKB+1)-PUM(:,:,IKB)) / ZTMP1_DEVICE(:,:,1) &
      + ( ZTMP2_DEVICE(:,:,1)                               &
@@ -486,7 +486,7 @@ IF (KSPLT==1) THEN
    )
   !$acc end kernels
   CALL MXF_DEVICE( ZTMP3_DEVICE(:,:,1:1), ZTMP1_DEVICE(:,:,1:1) )
-  !$acc kernels
+  !$acc kernels present(ZWORK)
   ZWORK(:,:,IKB) = - ZTMP1_DEVICE(:,:,1) 
   !$acc end kernels
 #endif
diff --git a/src/MNH/turb_hor_vw.f90 b/src/MNH/turb_hor_vw.f90
index 6e6a7fab1aeed4956d27bc70a13ac6608cf40375..cd411e778a030734f90d0b6257ba60dc084e5069 100644
--- a/src/MNH/turb_hor_vw.f90
+++ b/src/MNH/turb_hor_vw.f90
@@ -496,7 +496,7 @@ IF (KSPLT==1) THEN
 		    /(PDZZ(:,:,IKB+1)+PDZZ(:,:,IKB))
     !$acc end kernels
     CALL MYM_DEVICE( ZTMP3_DEVICE(:,:,1:1), ZTMP4_DEVICE(:,:,1:1) )
-    !$acc kernels
+    !$acc kernels present(ZTMP3_DEVICE)
     ZTMP3_DEVICE(:,:,1) = ZFLX(:,:,IKB+1) *                    &
       (   (PVM(:,:,IKB+1)-PVM(:,:,IKB)) / ZTMP1_DEVICE(:,:,1)  &
 	+ ( ZTMP2_DEVICE(:,:,1)                                &
@@ -505,7 +505,7 @@ IF (KSPLT==1) THEN
       )
     !$acc end kernels
     CALL MYF_DEVICE( ZTMP3_DEVICE(:,:,1:1), ZTMP1_DEVICE(:,:,1:1) )
-    !$acc kernels
+    !$acc kernels present(ZWORK)
     ZWORK(:,:,IKB) = - ZTMP1_DEVICE(:,:,1)
     !$acc end kernels
 #endif
diff --git a/src/MNH/turb_ver_dyn_flux.f90 b/src/MNH/turb_ver_dyn_flux.f90
index ada6514b9e771552853c05c1c4eb3700f3ffd00d..b75fcc15fd997d603353bf1712563866bc180cdd 100644
--- a/src/MNH/turb_ver_dyn_flux.f90
+++ b/src/MNH/turb_ver_dyn_flux.f90
@@ -577,7 +577,7 @@ CALL MXM_DEVICE( ZKEFF, ZTMP1_DEVICE )
 CALL MZM_DEVICE(PRHODJ, ZTMP2_DEVICE )
 CALL MXM_DEVICE(ZTMP2_DEVICE,ZTMP3_DEVICE)
 CALL MXM_DEVICE( PDZZ, ZTMP4_DEVICE )
-!$acc kernels
+!$acc kernels present(ZA)
 #ifndef MNH_BITREP
 ZA(:,:,:) = -PTSTEP * XCMFS * ZTMP1_DEVICE(:,:,:) * ZTMP3_DEVICE(:,:,:) / ZTMP4_DEVICE(:,:,:)**2
 #else
@@ -596,7 +596,7 @@ END DO
 !
 ! compute the coefficient between the vertical flux and the 2 components of the 
 ! wind following the slope
-!$acc kernels
+!$acc kernels present(ZCOEFFLXU)
 #ifndef MNH_BITREP
 ZCOEFFLXU(:,:,1) = PCDUEFF(:,:) * (PDIRCOSZW(:,:)**2 - ZDIRSINZW(:,:)**2) &
      * PCOSSLOPE(:,:)
@@ -662,7 +662,7 @@ ELSE             !ATMOS MODEL ONLY
       * 0.5 * ( 1. + MXM(PRHODJ(:,:,KKA:KKA)) / MXM(PRHODJ(:,:,IKB:IKB)) )
   ELSE               
     ! compute the explicit tangential flux at the W point
-!$acc kernels
+!$acc kernels present(ZSOURCE,ZTMP1_DEVICE,ZTMP2_DEVICE)
     ZSOURCE(:,:,IKB)     =                                              &
      PTAU11M(:,:) * PCOSSLOPE(:,:) * PDIRCOSZW(:,:) * ZDIRSINZW(:,:) &
      -PTAU12M(:,:) * PSINSLOPE(:,:) * ZDIRSINZW(:,:)                  &
@@ -690,7 +690,7 @@ ELSE             !ATMOS MODEL ONLY
     CALL MXM_DEVICE( ZTMP2_DEVICE(:,:,1:1), ZTMP4_DEVICE(:,:,1:1) )
     CALL MXM_DEVICE(PRHODJ(:,:,KKA:KKA),ZTMP1_DEVICE(:,:,KKA:KKA))
     CALL MXM_DEVICE(PRHODJ(:,:,IKB:IKB),ZTMP2_DEVICE(:,:,IKB:IKB))
-!$acc kernels
+!$acc kernels present(ZSOURCE)
     ZSOURCE(:,:,IKB) = ( ZTMP3_DEVICE(:,:,1) + ZTMP4_DEVICE(:,:,1) - ZCOEFS(:,:,1) * PUM(:,:,IKB) * PIMPL  &
                           ) * 0.5 * ( 1. + ZTMP1_DEVICE(:,:,KKA) / ZTMP2_DEVICE(:,:,IKB) )
 !$acc end kernels
@@ -764,7 +764,7 @@ ZFLXZ(:,:,IKB:IKB)   =   MXM(PDZZ(:,:,IKB:IKB))  *                &
 CALL MXM_DEVICE(PDZZ(:,:,IKB:IKB),ZTMP1_DEVICE(:,:,IKB:IKB))
 CALL MXM_DEVICE(PRHODJ(:,:,KKA:KKA),ZTMP2_DEVICE(:,:,KKA:KKA))
 CALL MXM_DEVICE(PRHODJ(:,:,IKB:IKB),ZTMP3_DEVICE(:,:,IKB:IKB))
-!$acc kernels
+!$acc kernels present(ZFLXZ)
 ZFLXZ(:,:,IKB:IKB)   =   ZTMP1_DEVICE(:,:,IKB:IKB)  *                &
   ( ZSOURCE(:,:,IKB:IKB)                                          &
    +ZCOEFS(:,:,1:1) * ZRES(:,:,IKB:IKB) * PIMPL                   &                
@@ -833,7 +833,7 @@ PDP(:,:,IKB:IKB) = - MXF (
                          )
 #else
 CALL MXM_DEVICE(PDZZ(:,:,IKB+KKL:IKB+KKL),ZTMP1_DEVICE(:,:,IKB+KKL:IKB+KKL))
-!$acc kernels
+!$acc kernels present(ZTMP2_DEVICE)
 ZTMP2_DEVICE(:,:,IKB:IKB) = ZFLXZ(:,:,IKB+KKL:IKB+KKL) * (PUM(:,:,IKB+KKL:IKB+KKL)-PUM(:,:,IKB:IKB))  &
                          / ZTMP1_DEVICE(:,:,IKB+KKL:IKB+KKL)
 !$acc end kernels
@@ -1017,13 +1017,13 @@ IF(HTURBDIM=='3DIM') THEN
               /(PDZZ(:,:,IKB+KKL)+PDZZ(:,:,IKB  )) 
 !$acc end kernels
   CALL MXM_DEVICE(ZTMP2_DEVICE(:,:,1:1),ZTMP3_DEVICE(:,:,1:1))
-!$acc kernels
+!$acc kernels present(ZTMP2_DEVICE)
   ZTMP2_DEVICE(:,:,1) = ZFLXZ(:,:,IKB+KKL) *                          &
      ( ZTMP1_DEVICE(:,:,1) - ZTMP3_DEVICE(:,:,1) * PDZX(:,:,IKB+KKL) )   &
      / (0.5*(PDXX(:,:,IKB+KKL)+PDXX(:,:,IKB)))
 !$acc end kernels
   CALL MXF_DEVICE(ZTMP2_DEVICE(:,:,1:1),ZTMP4_DEVICE(:,:,1:1))
-!$acc kernels
+!$acc kernels present(ZA)
   ZA(:,:,IKB:IKB) = - ZTMP4_DEVICE(:,:,1:1)
 !$acc end kernels
 #endif
@@ -1134,7 +1134,7 @@ CALL MYM_DEVICE( ZKEFF, ZTMP1_DEVICE )
 CALL MYM_DEVICE( PDZZ, ZTMP2_DEVICE )
 CALL MZM_DEVICE(PRHODJ, ZTMP3_DEVICE )
 CALL MYM_DEVICE(ZTMP3_DEVICE,ZTMP4_DEVICE)
-!$acc kernels
+!$acc kernels present(ZA,ZCOEFFLXU)
 #ifndef MNH_BITREP
 ZA(:,:,:)    = - PTSTEP * XCMFS * ZTMP1_DEVICE(:,:,:) * ZTMP4_DEVICE(:,:,:) / ZTMP2_DEVICE(:,:,:)**2
 #else
@@ -1203,7 +1203,7 @@ IF (GOCEAN) THEN ! Ocean case
 ELSE ! Atmos case
   IF (.NOT.LCOUPLES) THEN !  only atmosp without coupling
   ! compute the explicit tangential flux at the W point
-!$acc kernels
+!$acc kernels present(ZSOURCE,ZTMP1_DEVICE)
     ZSOURCE(:,:,IKB)       =                                                  &
       PTAU11M(:,:) * PSINSLOPE(:,:) * PDIRCOSZW(:,:) * ZDIRSINZW(:,:)         &
      +PTAU12M(:,:) * PCOSSLOPE(:,:) * ZDIRSINZW(:,:)                          &
@@ -1223,7 +1223,7 @@ ELSE ! Atmos case
     ZTMP1_DEVICE(:,:,1) = ZSOURCE(:,:,IKB)   / PDZZ(:,:,IKB)
 !$acc end kernels
     CALL MYM_DEVICE( ZTMP1_DEVICE(:,:,1:1), ZTMP2_DEVICE(:,:,1:1) )
-!$acc kernels
+!$acc kernels present(ZTMP1_DEVICE)
     ZTMP1_DEVICE(:,:,1) = ZCOEFFLXU(:,:,1) / PDZZ(:,:,IKB) &
               *ZUSLOPEM(:,:,1)                          &
               +ZCOEFFLXV(:,:,1) / PDZZ(:,:,IKB)         &
@@ -1232,7 +1232,7 @@ ELSE ! Atmos case
     CALL MYM_DEVICE(ZTMP1_DEVICE(:,:,1:1),ZTMP3_DEVICE(:,:,1:1))
     CALL MYM_DEVICE(PRHODJ(:,:,KKA:KKA),ZTMP1_DEVICE(:,:,1:1))
     CALL MYM_DEVICE(PRHODJ(:,:,IKB:IKB),ZTMP4_DEVICE(:,:,1:1))
-!$acc kernels
+!$acc kernels present(ZSOURCE)
     ZSOURCE(:,:,IKB) = ( ZTMP2_DEVICE(:,:,1) +  ZTMP3_DEVICE(:,:,1) - ZCOEFS(:,:,1) * PVM(:,:,IKB) * PIMPL ) &
       * 0.5 * ( 1. + ZTMP1_DEVICE(:,:,1) / ZTMP4_DEVICE(:,:,1) )
 !$acc end kernels
@@ -1309,7 +1309,7 @@ END DO
 CALL MYM_DEVICE(PDZZ(:,:,IKB:IKB),ZTMP1_DEVICE(:,:,1:1))
 CALL MYM_DEVICE(PRHODJ(:,:,KKA:KKA),ZTMP2_DEVICE(:,:,1:1))
 CALL MYM_DEVICE(PRHODJ(:,:,IKB:IKB),ZTMP3_DEVICE(:,:,1:1))
-!$acc kernels
+!$acc kernels present(ZFLXZ)
 ZFLXZ(:,:,IKB)   =   ZTMP1_DEVICE(:,:,1)  *                 &
   ( ZSOURCE(:,:,IKB)                                     &
    +ZCOEFS(:,:,1) * ZRES(:,:,IKB) * PIMPL                &      
@@ -1384,11 +1384,11 @@ ZFLXZ(:,:,IKB+KKL:IKB+KKL) * (PVM(:,:,IKB+KKL:IKB+KKL)-PVM(:,:,IKB:IKB))  &
                        )
 #else
 CALL MYM_DEVICE( PDZZ(:,:,IKB+KKL:IKB+KKL), ZTMP1_DEVICE(:,:,1:1) )
-!$acc kernels
+!$acc kernels present(ZTMP2_DEVICE)
 ZTMP2_DEVICE(:,:,1) = ZFLXZ(:,:,IKB+KKL) * (PVM(:,:,IKB+KKL)-PVM(:,:,IKB)) / ZTMP1_DEVICE(:,:,1)
 !$acc end kernels
 CALL MYF_DEVICE( ZTMP2_DEVICE(:,:,1:1), ZTMP1_DEVICE(:,:,1:1) )
-!$acc kernels
+!$acc kernels present(ZA)
 ZA(:,:,IKB)  = - ZTMP1_DEVICE(:,:,1)
 !$acc end kernels
 #endif
@@ -1567,13 +1567,13 @@ IF(HTURBDIM=='3DIM') THEN
                 /(PDZZ(:,:,IKB+KKL)+PDZZ(:,:,IKB  ))
 !$acc end kernels
     CALL MYM_DEVICE( ZTMP2_DEVICE(:,:,1:1), ZTMP3_DEVICE(:,:,1:1) )
-!$acc kernels
+!$acc kernels present(ZTMP2_DEVICE)
     ZTMP2_DEVICE(:,:,1) = ZFLXZ(:,:,IKB+KKL) *                        &
        ( ZTMP1_DEVICE(:,:,1) - ZTMP3_DEVICE(:,:,1) * PDZY(:,:,IKB+KKL) ) &
        / (0.5*(PDYY(:,:,IKB+KKL)+PDYY(:,:,IKB)))
 !$acc end kernels
     CALL MYF_DEVICE( ZTMP2_DEVICE(:,:,1:1), ZTMP1_DEVICE(:,:,1:1) )
-!$acc kernels
+!$acc kernels present(ZA)
     ZA(:,:,IKB:IKB) = - ZTMP1_DEVICE(:,:,1:1)
 !$acc end kernels
 #endif
diff --git a/src/MNH/turb_ver_thermo_corr.f90 b/src/MNH/turb_ver_thermo_corr.f90
index c6460dcee8af51e0c6dd1f571243bb21fd04ca2e..8d61bacab7cb2fe6069e2fd30fcf250ce071cd32 100644
--- a/src/MNH/turb_ver_thermo_corr.f90
+++ b/src/MNH/turb_ver_thermo_corr.f90
@@ -728,7 +728,7 @@ END IF
   END DO
   !$acc end kernels
   CALL MZF_DEVICE( ZTMP3_DEVICE(:,:,:), ZTMP4_DEVICE(:,:,:) )
-  !$acc kernels
+  !$acc kernels present(ZFLXZ)
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
@@ -1409,7 +1409,7 @@ END IF
     END DO
     !$acc end kernels
     CALL MZF_DEVICE( ZTMP2_DEVICE(:,:,:), ZTMP3_DEVICE(:,:,:) )
-    !$acc kernels
+    !$acc kernels present(ZFLXZ)
 #ifdef MNH_COMPILER_NVHPC
     !$acc loop independent collapse(3)
 #endif
diff --git a/src/MNH/turb_ver_thermo_flux.f90 b/src/MNH/turb_ver_thermo_flux.f90
index 0752d12fd69b685e3175842e4a8e483e642b09b5..0e02f50cdf89a01a1d1a792fd8ef53afc652ce52 100644
--- a/src/MNH/turb_ver_thermo_flux.f90
+++ b/src/MNH/turb_ver_thermo_flux.f90
@@ -1114,7 +1114,7 @@ END IF
 #else
 IF ( KRRL >= 1 ) THEN
   IF ( KRRI >= 1 ) THEN
-!$acc kernels
+!$acc kernels present(ZTMP2_DEVICE)
     ZTMP1_DEVICE(:,:,:) = PRHODJ(:,:,:) * PATHETA(:,:,:) * 2. * PSRCM(:,:,:)
     ZTMP2_DEVICE(:,:,:) = ZFLXZ(:,:,:) / PDZZ(:,:,:)
 !$acc end kernels
@@ -1124,7 +1124,7 @@ IF ( KRRL >= 1 ) THEN
     PRRS(:,:,:,4) = PRRS(:,:,:,4) - ZTMP1_DEVICE(:,:,:) * ZTMP3_DEVICE * PFRAC_ICE(:,:,:)
 !$acc end kernels
   ELSE
-!$acc kernels
+!$acc kernels present(ZTMP2_DEVICE)
     !dir$ concurrent 
     ZTMP1_DEVICE(:,:,:) = PRHODJ(:,:,:) * PATHETA(:,:,:) * 2. * PSRCM(:,:,:)
     ZTMP2_DEVICE(:,:,:) = ZFLXZ(:,:,:) / PDZZ(:,:,:)
@@ -1562,7 +1562,7 @@ END DO
       ZA(JI,JJ,JK)   =  PBETA(JI,JJ,JK) * ZTMP3_DEVICE(JI,JJ,JK)
     END DO
 !$acc end kernels
-!$acc kernels
+!$acc kernels present(ZA)
 #endif
     ZA(:,:,IKB) =  PBETA(:,:,IKB) * PEMOIST(:,:,IKB) *   &
                    0.5 * ( ZFLXZ (:,:,IKB) + ZFLXZ (:,:,IKB+KKL) )
@@ -1610,7 +1610,7 @@ END DO
 #else
   IF ( KRRL >= 1 ) THEN
     IF ( KRRI >= 1 ) THEN
-      !$acc kernels
+      !$acc kernels present(ZTMP2_DEVICE)
       !dir$ concurrent 
       ZTMP1_DEVICE(:,:,:) = PRHODJ(:,:,:)*PAMOIST(:,:,:)*2.*PSRCM(:,:,:)
       ZTMP2_DEVICE(:,:,:) = ZFLXZ(:,:,:)/PDZZ(:,:,:)
@@ -1621,7 +1621,8 @@ END DO
       PRRS(:,:,:,4) = PRRS(:,:,:,4) - ZTMP1_DEVICE(:,:,:) * ZTMP3_DEVICE(:,:,:) * PFRAC_ICE(:,:,:)
 !$acc end kernels
     ELSE
-!$acc kernels
+      !$acc kernels present(ZTMP2_DEVICE)
+      !dir$ concurrent 
       ZTMP1_DEVICE(:,:,:) = PRHODJ(:,:,:)*PAMOIST(:,:,:)*2.*PSRCM(:,:,:)
       ZTMP2_DEVICE(:,:,:) = ZFLXZ(:,:,:)/PDZZ(:,:,:)
 !$acc end kernels