From c2ae9e7fdaa41bf96a3d5f071231d13e3f04a0d0 Mon Sep 17 00:00:00 2001
From: Juan ESCOBAR <juan.escobar@aero.obs-mip.fr>
Date: Fri, 4 Nov 2022 19:01:16 +0100
Subject: [PATCH] Juan 04/11/2022:MNH/turb*.f90 , CCE > 14.X Optimization, add
 acc present_cr

---
 src/MNH/turb_hor_dyn_corr.f90    |  2 +-
 src/MNH/turb_hor_sv_flux.f90     | 56 ++++++++++++++--------------
 src/MNH/turb_hor_thermo_corr.f90 | 64 ++++++++++++++++----------------
 src/MNH/turb_hor_thermo_flux.f90 |  6 +--
 4 files changed, 64 insertions(+), 64 deletions(-)

diff --git a/src/MNH/turb_hor_dyn_corr.f90 b/src/MNH/turb_hor_dyn_corr.f90
index 59b5e3631..d504591e9 100644
--- a/src/MNH/turb_hor_dyn_corr.f90
+++ b/src/MNH/turb_hor_dyn_corr.f90
@@ -175,7 +175,7 @@ USE MODE_MPPDB
 #if defined(MNH_BITREP) || defined(MNH_BITREP_OMP)
 USE MODI_BITREP
 #endif
-#ifdef MNH_BITREP_OMP
+#ifdef MNH_COMPILER_CCE
 !$mnh_undef(LOOP)
 !$mnh_undef(OPENACC)
 #endif
diff --git a/src/MNH/turb_hor_sv_flux.f90 b/src/MNH/turb_hor_sv_flux.f90
index bd352dcef..9cf51e163 100644
--- a/src/MNH/turb_hor_sv_flux.f90
+++ b/src/MNH/turb_hor_sv_flux.f90
@@ -310,7 +310,7 @@ DO JSV=1,ISV
 #else
   CALL MXM_DEVICE(PK,ZTMP1_DEVICE) 
   CALL GX_M_U_DEVICE(1,IKU,1,PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX,ZTMP2_DEVICE)
-!$acc kernels
+!$acc kernels present_cr(ZFLXX)
   ZFLXX(:,:,:) = -ZCSV * ZTMP1_DEVICE * ZTMP2_DEVICE
 #endif
   ZFLXX(:,:,IKE+1) = ZFLXX(:,:,IKE) 
@@ -330,13 +330,13 @@ DO JSV=1,ISV
 #else
   CALL MXM_DEVICE( PK(:,:,IKB:IKB),ZTMP1_DEVICE(:,:,1:1) )
   CALL DXM_DEVICE(PSVM(:,:,IKB:IKB,JSV),ZTMP2_DEVICE(:,:,1:1))
-!$acc kernels
+!$acc kernels present_cr(ZTMP3_DEVICE)
   ZTMP3_DEVICE(:,:,1) = ZCOEFF(:,:,IKB+2)*PSVM(:,:,IKB+2,JSV) &
                     +ZCOEFF(:,:,IKB+1)*PSVM(:,:,IKB+1,JSV) &
                     +ZCOEFF(:,:,IKB)*PSVM(:,:,IKB,JSV)
 !$acc end kernels
   CALL MXM_DEVICE( ZTMP3_DEVICE(:,:,1:1), ZTMP4_DEVICE(:,:,1:1) )
-!$acc kernels
+!$acc kernels present_cr(ZFLXX)
   ZFLXX(:,:,IKB) = -ZCSV * ZTMP1_DEVICE(:,:,1) *                                  &
                   ( ZTMP2_DEVICE(:,:,1) * PINV_PDXX(:,:,IKB)                      &
                   - ZTMP4_DEVICE(:,:,1) * 0.5 * ( PDZX(:,:,IKB+1)+PDZX(:,:,IKB) ) &
@@ -346,14 +346,14 @@ DO JSV=1,ISV
 #endif
 ! extrapolates the flux under the ground so that the vertical average with 
 ! the IKB flux gives the ground value
-!$acc kernels
+!$acc kernels present_cr(ZWORK2D)
   ZWORK2D(:,:,1)=PSFSVM(:,:,JSV) * PDIRCOSXW(:,:)
 !$acc end kernels
 #ifndef MNH_OPENACC
   ZFLXX(:,:,IKB-1:IKB-1) = 2. * MXM( ZWORK2D(:,:,1:1) ) - ZFLXX(:,:,IKB:IKB)
 #else
   CALL MXM_DEVICE( ZWORK2D(:,:,1:1),ZTMP1_DEVICE(:,:,1:1) )
-!$acc kernels
+!$acc kernels present_cr(ZFLXX)
   ZFLXX(:,:,IKB-1) = 2. * ZTMP1_DEVICE(:,:,1) - ZFLXX(:,:,IKB)
 !$acc end kernels
 #endif
@@ -391,7 +391,7 @@ DO JSV=1,ISV
     !
     CALL GX_W_UW_DEVICE(PWM,PDXX,PDZZ,PDZX,ZTMP1_DEVICE)
     CALL MZM_DEVICE(ZFLXX,ZTMP2_DEVICE)
-    !$acc kernels
+    !$acc kernels present_cr(ZTMP3_DEVICE)
     ZTMP3_DEVICE = ZTMP1_DEVICE*ZTMP2_DEVICE
     !$acc end kernels
     CALL MXF_DEVICE(ZTMP3_DEVICE,ZTMP1_DEVICE)
@@ -400,7 +400,7 @@ DO JSV=1,ISV
     !
     CALL GX_M_M_DEVICE(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX,ZTMP1_DEVICE)
     CALL MXF_DEVICE(ZFLXX,ZTMP2_DEVICE)
-    !$acc kernels
+    !$acc kernels present_cr(ZTMP3_DEVICE)
     ZTMP3_DEVICE = ZTMP1_DEVICE*ZTMP2_DEVICE
     !$acc end kernels
     CALL LES_MEAN_SUBGRID( ZTMP3_DEVICE, X_LES_RES_ddxa_Sv_SBG_UaSv(:,:,:,JSV), .TRUE. )
@@ -422,7 +422,7 @@ DO JSV=1,ISV
 #else
     CALL MYM_DEVICE(PK,ZTMP1_DEVICE)
     CALL GY_M_V_DEVICE(1,IKU,1,PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY,ZTMP2_DEVICE)
-    !$acc kernels
+    !$acc kernels present_cr(ZFLXY)
     ZFLXY(:,:,:)=-ZCSV * ZTMP1_DEVICE * ZTMP2_DEVICE
 #endif
     ZFLXY(:,:,IKE+1) = ZFLXY(:,:,IKE) 
@@ -443,13 +443,13 @@ DO JSV=1,ISV
 #else
     CALL MYM_DEVICE( PK(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1) )
     CALL DYM_DEVICE( PSVM(:,:,IKB:IKB,JSV), ZTMP2_DEVICE(:,:,1:1) )
-    !$acc kernels
+    !$acc kernels present_cr(ZTMP3_DEVICE)
     ZTMP3_DEVICE(:,:,1) = ZCOEFF(:,:,IKB+2)*PSVM(:,:,IKB+2,JSV)       &
              +ZCOEFF(:,:,IKB+1)*PSVM(:,:,IKB+1,JSV)       &
              +ZCOEFF(:,:,IKB)*PSVM(:,:,IKB,JSV)
     !$acc end kernels
     CALL MYM_DEVICE( ZTMP3_DEVICE(:,:,1:1), ZTMP4_DEVICE(:,:,1:1) )
-    !$acc kernels
+    !$acc kernels present_cr(ZFLXY)
     ZFLXY(:,:,IKB) = -ZCSV * ZTMP1_DEVICE(:,:,1) *                                   &
                      ( ZTMP2_DEVICE(:,:,1) * PINV_PDYY(:,:,IKB)                      &
                      - ZTMP4_DEVICE(:,:,1) * 0.5 * ( PDZY(:,:,IKB+1)+PDZY(:,:,IKB) ) &
@@ -459,14 +459,14 @@ DO JSV=1,ISV
 #endif
 ! extrapolates the flux under the ground so that the vertical average with 
 ! the IKB flux gives the ground value
-!$acc kernels
+!$acc kernels present_cr(ZWORK2D)
     ZWORK2D(:,:,1)=PSFSVM(:,:,JSV) * PDIRCOSYW(:,:)
 !$acc end kernels
 #ifndef MNH_OPENACC
     ZFLXY(:,:,IKB-1:IKB-1) = 2. * MYM( ZWORK2D(:,:,1:1) ) - ZFLXY(:,:,IKB:IKB)
 #else
     CALL MYM_DEVICE( ZWORK2D(:,:,1:1), ZTMP1_DEVICE(:,:,1:1) )
-    !$acc kernels
+    !$acc kernels present_cr(ZFLXY)
     ZFLXY(:,:,IKB-1) = 2. * ZTMP1_DEVICE(:,:,1) - ZFLXY(:,:,IKB)
     !$acc end kernels
 #endif
@@ -510,7 +510,7 @@ DO JSV=1,ISV
     !
     CALL GY_W_VW_DEVICE(PWM,PDYY,PDZZ,PDZY,ZTMP1_DEVICE)
     CALL MZM_DEVICE(ZFLXY,ZTMP2_DEVICE)
-    !$acc kernels
+    !$acc kernels present_cr(ZTMP3_DEVICE)
     ZTMP3_DEVICE = ZTMP1_DEVICE*ZTMP2_DEVICE
     !$acc end kernels
     CALL MYF_DEVICE(ZTMP3_DEVICE,ZTMP1_DEVICE)
@@ -519,7 +519,7 @@ DO JSV=1,ISV
     !
     CALL GY_M_M_DEVICE(PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY,ZTMP1_DEVICE)
     CALL MYF_DEVICE(ZFLXY,ZTMP2_DEVICE)
-    !$acc kernels
+    !$acc kernels present_cr(ZTMP3_DEVICE)
     ZTMP3_DEVICE = ZTMP1_DEVICE*ZTMP2_DEVICE
     !$acc end kernels
     CALL LES_MEAN_SUBGRID( ZTMP3_DEVICE, X_LES_RES_ddxa_Sv_SBG_UaSv(:,:,:,JSV) , .TRUE. )
@@ -562,64 +562,64 @@ DO JSV=1,ISV
   END IF
 #else
   CALL MXM_DEVICE(PRHODJ,ZTMP1_DEVICE)
-  !$acc kernels
+  !$acc kernels present_cr(ZTMP2_DEVICE)
   ZTMP2_DEVICE = ZTMP1_DEVICE * ZFLXX * PINV_PDXX
   !$acc end kernels
   CALL DXF_DEVICE( ZTMP2_DEVICE, ZTMP1_DEVICE )
   IF (.NOT. L2D) THEN
     CALL MYM_DEVICE(PRHODJ,ZTMP3_DEVICE)
-    !$acc kernels
+    !$acc kernels present_cr(ZTMP4_DEVICE)
     ZTMP4_DEVICE = ZTMP1_DEVICE * ZFLXY * PINV_PDYY
     !$acc end kernels
     CALL DYF_DEVICE( ZTMP4_DEVICE, ZTMP2_DEVICE )
     IF (.NOT. LFLAT) THEN
-      !$acc kernels
+      !$acc kernels present_cr(ZTMP3_DEVICE)
       ZTMP3_DEVICE = ZFLXX * PINV_PDXX
       !$acc end kernels
       CALL MZM_DEVICE(ZTMP3_DEVICE,ZTMP4_DEVICE)
-      !$acc kernels
+      !$acc kernels present_cr(ZTMP3_DEVICE)
       ZTMP3_DEVICE = ZTMP4_DEVICE * PDZX
       !$acc end kernels
       CALL MXF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE )
-      !$acc kernels
+      !$acc kernels present_cr(ZTMP3_DEVICE)
       ZTMP3_DEVICE = ZFLXY * PINV_PDYY
       !$acc end kernels
       CALL MZM_DEVICE(ZTMP3_DEVICE,ZTMP5_DEVICE)
-      !$acc kernels
+      !$acc kernels present_cr(ZTMP3_DEVICE)
       ZTMP3_DEVICE = ZTMP5_DEVICE * PDZY
       !$acc end kernels
       CALL MYF_DEVICE( ZTMP3_DEVICE,ZTMP5_DEVICE )
-      !$acc kernels
+      !$acc kernels present_cr(ZTMP3_DEVICE)
       ZTMP3_DEVICE = PMZM_PRHODJ * PINV_PDZZ * ( ZTMP4_DEVICE + ZTMP5_DEVICE )
       !$acc end kernels
       CALL DZF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE )
-      !$acc kernels
+      !$acc kernels present_cr(PRSVS)
       PRSVS(:,:,:,JSV) = PRSVS(:,:,:,JSV) - ZTMP1_DEVICE - ZTMP2_DEVICE + ZTMP4_DEVICE
       !$acc end kernels
     ELSE
-      !$acc kernels
+      !$acc kernels present_cr(PRSVS)
       PRSVS(:,:,:,JSV) = PRSVS(:,:,:,JSV) - ZTMP1_DEVICE - ZTMP2_DEVICE
       !$acc end kernels
     END IF
   ELSE
     IF (.NOT. LFLAT) THEN
-      !$acc kernels
+      !$acc kernels present_cr(ZTMP3_DEVICE)
       ZTMP3_DEVICE = ZFLXX * PINV_PDXX
       !$acc end kernels
       CALL MZM_DEVICE(ZTMP3_DEVICE,ZTMP4_DEVICE)
-      !$acc kernels
+      !$acc kernels present_cr(ZTMP3_DEVICE)
       ZTMP3_DEVICE = ZTMP4_DEVICE * PDZX
       !$acc end kernels
       CALL MXF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE )
-      !$acc kernels
+      !$acc kernels present_cr(ZTMP3_DEVICE)
       ZTMP3_DEVICE = PMZM_PRHODJ * PINV_PDZZ * ZTMP4_DEVICE
       !$acc end kernels
       CALL DZF_DEVICE( ZTMP3_DEVICE, ZTMP2_DEVICE)
-      !$acc kernels
+      !$acc kernels present_cr(PRSVS)
       PRSVS(:,:,:,JSV) = PRSVS(:,:,:,JSV) - ZTMP1_DEVICE + ZTMP2_DEVICE
       !$acc end kernels
     ELSE
-      !$acc kernels
+      !$acc kernels present_cr(PRSVS)
       PRSVS(:,:,:,JSV) = PRSVS(:,:,:,JSV) - ZTMP1_DEVICE
       !$acc end kernels
     END IF
diff --git a/src/MNH/turb_hor_thermo_corr.f90 b/src/MNH/turb_hor_thermo_corr.f90
index 93378881d..260054485 100644
--- a/src/MNH/turb_hor_thermo_corr.f90
+++ b/src/MNH/turb_hor_thermo_corr.f90
@@ -301,7 +301,7 @@ IKU = NKMAX + 2 * JPVEXT
 !
 !  compute the coefficients for the uncentred gradient computation near the 
 !  ground
-!$acc kernels
+!$acc kernels present_cr(ZCOEFF)
 ZCOEFF(:,:,IKB+2)= - PDZZ(:,:,IKB+1) /      &
        ( (PDZZ(:,:,IKB+2)+PDZZ(:,:,IKB+1)) * PDZZ(:,:,IKB+2) )
 ZCOEFF(:,:,IKB+1)=   (PDZZ(:,:,IKB+2)+PDZZ(:,:,IKB+1)) /      &
@@ -343,7 +343,7 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. tpfile%lopened ) &
   IF (.NOT. L2D) THEN
     CALL GX_M_M_DEVICE(PTHLM,PDXX,PDZZ,PDZX,ZTMP1_DEVICE)
     CALL GY_M_M_DEVICE(PTHLM,PDYY,PDZZ,PDZY,ZTMP2_DEVICE)
-!$acc kernels
+!$acc kernels present_cr(ZFLX)
 #ifndef MNH_BITREP
     ZFLX(:,:,:) = XCTV * PLM(:,:,:) * PLEPS(:,:,:) * ( ZTMP1_DEVICE(:,:,:)**2 + ZTMP2_DEVICE(:,:,:)**2 )
 #else
@@ -354,7 +354,7 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. tpfile%lopened ) &
 !$acc end kernels
   ELSE
     CALL GX_M_M_DEVICE(PTHLM,PDXX,PDZZ,PDZX,ZTMP1_DEVICE)
-!$acc kernels
+!$acc kernels present_cr(ZFLX)
 #ifndef MNH_BITREP
     ZFLX(:,:,:) = XCTV * PLM(:,:,:) * PLEPS(:,:,:) * ZTMP1_DEVICE(:,:,:)**2
 #else
@@ -388,20 +388,20 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. tpfile%lopened ) &
   ) ** 2                                             )
 #else
   CALL DXM_DEVICE(PTHLM(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1))
-!$acc kernels
+!$acc kernels present_cr(ZTMP2_DEVICE)
   ZTMP2_DEVICE(:,:,1) = ZTMP1_DEVICE(:,:,1) * PINV_PDXX(:,:,IKB)
 !$acc end kernels
   CALL MXF_DEVICE(ZTMP2_DEVICE(:,:,1:1), ZTMP3_DEVICE(:,:,1:1))
   CALL MXF_DEVICE(PDXX(:,:,IKB:IKB), ZTMP4_DEVICE(:,:,1:1))
   !
   CALL DYM_DEVICE(PTHLM(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1))
-!$acc kernels
+!$acc kernels present_cr(ZTMP2_DEVICE)
   ZTMP2_DEVICE(:,:,1) = ZTMP1_DEVICE(:,:,1) * PINV_PDYY(:,:,IKB)
 !$acc end kernels
   CALL MYF_DEVICE(ZTMP2_DEVICE(:,:,1:1), ZTMP1_DEVICE(:,:,1:1))
   CALL MYF_DEVICE(PDYY(:,:,IKB:IKB), ZTMP2_DEVICE(:,:,1:1))
   !
-!$acc kernels
+!$acc kernels present_cr(ZFLX)
 !$mnh_expand_array(JI=1:JIU,JJ=1:JJU)
   ZFLX(:,:,IKB) = XCTV * PLM(:,:,IKB)                  &
   * PLEPS(:,:,IKB) *  (                                    &
@@ -465,23 +465,23 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. tpfile%lopened ) &
     CALL LES_MEAN_SUBGRID( ZFLX, X_LES_SUBGRID_Thl2, .TRUE. ) 
     !
     CALL MZF_DEVICE( PWM, ZTMP1_DEVICE)
-!$acc kernels
+!$acc kernels present_cr(ZTMP2_DEVICE)
     ZTMP2_DEVICE(:,:,:) = ZTMP1_DEVICE(:,:,:)*ZFLX(:,:,:)
 !$acc end kernels
     CALL LES_MEAN_SUBGRID( ZTMP2_DEVICE, X_LES_RES_W_SBG_Thl2, .TRUE. ) 
     !
-!$acc kernels
+!$acc kernels present_cr(ZTMP1_DEVICE)
     ZTMP1_DEVICE(:,:,:) = -2.*XCTD*SQRT(PTKEM(:,:,:))*ZFLX(:,:,:)/PLEPS(:,:,:)
 !$acc end kernels
     CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE ,X_LES_SUBGRID_DISS_Thl2, .TRUE. )
     !
     CALL ETHETA(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM, ZA(:,:,:))
-!$acc kernels
+!$acc kernels present_cr(ZTMP1_DEVICE)
     ZTMP1_DEVICE(:,:,:) = ZA(:,:,:)*ZFLX(:,:,:)
 !$acc end kernels
     CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE, X_LES_SUBGRID_ThlThv, .TRUE. ) 
     !
-!$acc kernels
+!$acc kernels present_cr(ZTMP1_DEVICE)
     ZTMP1_DEVICE(:,:,:) = -XG/PTHVREF(:,:,:)/3.*ZA(:,:,:)*ZFLX(:,:,:)
 !$acc end kernels
     CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE, X_LES_SUBGRID_ThlPz, .TRUE. )
@@ -526,7 +526,7 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. tpfile%lopened ) &
     ELSE
       CALL GX_M_M_DEVICE(PTHLM       ,PDXX,PDZZ,PDZX,ZTMP1_DEVICE)
       CALL GX_M_M_DEVICE(PRM(:,:,:,1),PDXX,PDZZ,PDZX,ZTMP2_DEVICE)
-!$acc kernels
+!$acc kernels present_cr(ZFLX)
       ZFLX(:,:,:)=PLM(:,:,:) * PLEPS(:,:,:) * (ZTMP1_DEVICE(:,:,:)*ZTMP2_DEVICE(:,:,:)) * (XCHT1+XCHT2)
 !$acc end kernels
     END IF
@@ -567,32 +567,32 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. tpfile%lopened ) &
     )                                                          )
 #else
     CALL DXM_DEVICE(PTHLM(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1))
-!$acc kernels
+!$acc kernels present_cr(ZTMP2_DEVICE)
     ZTMP2_DEVICE(:,:,1) = ZTMP1_DEVICE(:,:,1)* PINV_PDXX(:,:,IKB)
 !$acc end kernels
     CALL MXF_DEVICE( ZTMP2_DEVICE(:,:,1:1), ZTMP3_DEVICE(:,:,1:1) )
     CALL MXF_DEVICE(PDXX(:,:,IKB:IKB),ZTMP4_DEVICE(:,:,1:1))
     !
     CALL DXM_DEVICE(PRM(:,:,IKB:IKB,1), ZTMP1_DEVICE(:,:,1:1))
-!$acc kernels
+!$acc kernels present_cr(ZTMP2_DEVICE)
     ZTMP2_DEVICE(:,:,1) = ZTMP1_DEVICE(:,:,1)* PINV_PDXX(:,:,IKB)
 !$acc end kernels
     CALL MXF_DEVICE( ZTMP2_DEVICE(:,:,1:1), ZTMP5_DEVICE(:,:,1:1) )
     !
     CALL DYM_DEVICE(PTHLM(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1))
-!$acc kernels
+!$acc kernels present_cr(ZTMP2_DEVICE)
     ZTMP2_DEVICE(:,:,1) = ZTMP1_DEVICE(:,:,1)* PINV_PDYY(:,:,IKB)
 !$acc end kernels
     CALL MYF_DEVICE( ZTMP2_DEVICE(:,:,1:1), ZTMP6_DEVICE(:,:,1:1) )
     CALL MYF_DEVICE(PDYY(:,:,IKB:IKB),ZTMP7_DEVICE(:,:,1:1))
     !
     CALL DYM_DEVICE(PRM(:,:,IKB:IKB,1), ZTMP1_DEVICE(:,:,1:1))
-!$acc kernels
+!$acc kernels present_cr(ZTMP2_DEVICE)
     ZTMP2_DEVICE(:,:,1) = ZTMP1_DEVICE(:,:,1)* PINV_PDYY(:,:,IKB)
 !$acc end kernels
     CALL MYF_DEVICE( ZTMP2_DEVICE(:,:,1:1), ZTMP8_DEVICE(:,:,1:1) )
     !
-!$acc kernels
+!$acc kernels present_cr(ZFLX)
     ZFLX(:,:,IKB) = (XCHT1+XCHT2) * PLM(:,:,IKB)         &
     * PLEPS(:,:,IKB)  *  (                                   &
     ( ZTMP3_DEVICE(:,:,1)      &
@@ -670,33 +670,33 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. tpfile%lopened ) &
       CALL LES_MEAN_SUBGRID( ZFLX, X_LES_SUBGRID_ThlRt, .TRUE. ) 
       !
       CALL MZF_DEVICE( PWM, ZTMP1_DEVICE )
-!$acc kernels
+!$acc kernels present_cr(ZTMP2_DEVICE)
       ZTMP2_DEVICE(:,:,:) = ZTMP1_DEVICE(:,:,:)*ZFLX(:,:,:)
 !$acc end kernels
       CALL LES_MEAN_SUBGRID( ZTMP2_DEVICE, X_LES_RES_W_SBG_ThlRt, .TRUE. ) 
       !
-!$acc kernels
+!$acc kernels present_cr(ZTMP1_DEVICE)
       ZTMP1_DEVICE(:,:,:) = -XCTD*SQRT(PTKEM(:,:,:))*ZFLX(:,:,:)/PLEPS(:,:,:)
 !$acc end kernels
       CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE ,X_LES_SUBGRID_DISS_ThlRt, .TRUE. )
       !
-!$acc kernels
+!$acc kernels present_cr(ZTMP1_DEVICE)
       ZTMP1_DEVICE(:,:,:) = ZA(:,:,:)*ZFLX(:,:,:)
 !$acc end kernels
       CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE, X_LES_SUBGRID_RtThv, .TRUE. ) 
       !
-!$acc kernels
+!$acc kernels present_cr(ZTMP1_DEVICE)
       ZTMP1_DEVICE(:,:,:) = -XG/PTHVREF(:,:,:)/3.*ZA(:,:,:)*ZFLX(:,:,:)
 !$acc end kernels
       CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE, X_LES_SUBGRID_RtPz,.TRUE.)
       !
       CALL EMOIST(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,ZA(:,:,:))
-!$acc kernels
+!$acc kernels present_cr(ZTMP1_DEVICE)
       ZTMP1_DEVICE(:,:,:) = ZA(:,:,:)*ZFLX(:,:,:)
 !$acc end kernels
       CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE, X_LES_SUBGRID_ThlThv, .TRUE. ) 
       !
-!$acc kernels
+!$acc kernels present_cr(ZTMP1_DEVICE)
       ZTMP1_DEVICE(:,:,:) = -XG/PTHVREF(:,:,:)/3.*ZA(:,:,:)*ZFLX(:,:,:)
 !$acc end kernels
       CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE, X_LES_SUBGRID_ThlPz,.TRUE.)
@@ -732,7 +732,7 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. tpfile%lopened ) &
     IF (.NOT. L2D) THEN
       CALL GX_M_M_DEVICE(PRM(:,:,:,1),PDXX,PDZZ,PDZX,ZTMP1_DEVICE)
       CALL GY_M_M_DEVICE(PRM(:,:,:,1),PDYY,PDZZ,PDZY,ZTMP2_DEVICE)
-!$acc kernels
+!$acc kernels present_cr(ZFLX)
 #ifndef MNH_BITREP
       ZFLX(:,:,:) = XCHV * PLM(:,:,:) * PLEPS(:,:,:) * ( ZTMP1_DEVICE(:,:,:)**2 + ZTMP2_DEVICE(:,:,:)**2 )
 #else
@@ -743,7 +743,7 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. tpfile%lopened ) &
 !$acc end kernels
     ELSE
       CALL GX_M_M_DEVICE(PRM(:,:,:,1),PDXX,PDZZ,PDZX,ZTMP1_DEVICE)
-!$acc kernels
+!$acc kernels present_cr(ZFLX)
 #ifndef MNH_BITREP
       ZFLX(:,:,:) = XCHV * PLM(:,:,:) * PLEPS(:,:,:) * ZTMP1_DEVICE(:,:,:)**2
 #else
@@ -776,20 +776,20 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. tpfile%lopened ) &
     ) ** 2                                             )
 #else
     CALL DXM_DEVICE(PRM(:,:,IKB:IKB,1), ZTMP1_DEVICE(:,:,1:1))
-!$acc kernels
+!$acc kernels present_cr(ZTMP2_DEVICE)
     ZTMP2_DEVICE(:,:,1) = ZTMP1_DEVICE(:,:,1)* PINV_PDXX(:,:,IKB)
 !$acc end kernels
     CALL MXF_DEVICE( ZTMP2_DEVICE(:,:,1:1), ZTMP3_DEVICE(:,:,1:1) )
     CALL MXF_DEVICE(PDXX(:,:,IKB:IKB),ZTMP4_DEVICE(:,:,1:1))
     !
     CALL DYM_DEVICE(PRM(:,:,IKB:IKB,1), ZTMP1_DEVICE(:,:,1:1))
-!$acc kernels
+!$acc kernels present_cr(ZTMP2_DEVICE)
     ZTMP2_DEVICE(:,:,1) = ZTMP1_DEVICE(:,:,1)* PINV_PDYY(:,:,IKB)
 !$acc end kernels
     CALL MYF_DEVICE( ZTMP2_DEVICE(:,:,1:1), ZTMP5_DEVICE(:,:,1:1) )
     CALL MYF_DEVICE(PDYY(:,:,IKB:IKB),ZTMP6_DEVICE(:,:,1:1))
     !
-!$acc kernels
+!$acc kernels present_cr(ZFLX)
 !$mnh_expand_array(JI=1:JIU,JJ=1:JJU,JK=1:JKU)
     ZFLX(:,:,IKB) = XCHV * PLM(:,:,IKB)                  &
     * PLEPS(:,:,IKB) *  (                                    &
@@ -851,22 +851,22 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. tpfile%lopened ) &
       CALL LES_MEAN_SUBGRID( ZFLX, X_LES_SUBGRID_Rt2, .TRUE. ) 
       !
       CALL MZF_DEVICE( PWM, ZTMP1_DEVICE )
-!$acc kernels    
+!$acc kernels present_cr(ZTMP2_DEVICE)
       ZTMP2_DEVICE(:,:,:) = ZTMP1_DEVICE(:,:,:)*ZFLX(:,:,:)
 !$acc end kernels
       CALL LES_MEAN_SUBGRID( ZTMP2_DEVICE, X_LES_RES_W_SBG_Rt2, .TRUE. ) 
       !
-!$acc kernels    
+!$acc kernels present_cr(ZTMP1_DEVICE)
       ZTMP1_DEVICE(:,:,:) = ZA(:,:,:)*ZFLX(:,:,:)
 !$acc end kernels
       CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE, X_LES_SUBGRID_RtThv, .TRUE. ) 
       !
-!$acc kernels    
+!$acc kernels present_cr(ZTMP1_DEVICE)
       ZTMP1_DEVICE(:,:,:) = -XG/PTHVREF(:,:,:)/3.*ZA(:,:,:)*ZFLX(:,:,:)
 !$acc end kernels
       CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE, X_LES_SUBGRID_RtPz,.TRUE.)
       !
-!$acc kernels    
+!$acc kernels present_cr(ZTMP1_DEVICE)
       ZTMP1_DEVICE(:,:,:) = -2.*XCTD*SQRT(PTKEM(:,:,:))*ZFLX(:,:,:)/PLEPS(:,:,:)
 !$acc end kernels
       CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE, X_LES_SUBGRID_DISS_Rt2, .TRUE. )
@@ -883,7 +883,7 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. tpfile%lopened ) &
 !
   IF ( KRRL > 0 ) THEN   
     !
-    !$acc kernels    
+    !$acc kernels present_cr(PSIGS)
     PSIGS(:,:,:)=PSIGS(:,:,:)*PSIGS(:,:,:) + ZWORK(:,:,:)
     ! Extrapolate PSIGS at the ground and at the top
     PSIGS(:,:,IKB-1) = PSIGS(:,:,IKB)
diff --git a/src/MNH/turb_hor_thermo_flux.f90 b/src/MNH/turb_hor_thermo_flux.f90
index 18f237e55..e1fc823fd 100644
--- a/src/MNH/turb_hor_thermo_flux.f90
+++ b/src/MNH/turb_hor_thermo_flux.f90
@@ -373,7 +373,7 @@ ZFLX(:,:,IKB) = -XCSHF * ZTMP1_DEVICE(:,:,1) *          &
 ZFLX(:,:,IKB-1:IKB-1) = 2. * MXM(  SPREAD( PSFTHM(:,:)* PDIRCOSXW(:,:), 3,1) )  &
                        - ZFLX(:,:,IKB:IKB)
 #else
-! acc kernels present(ZTMP1_DEVICE)
+! acc kernels present_cr(ZTMP1_DEVICE)
 DO CONCURRENT ( JI=1:JIU,JJ=1:JJU )
    ZTMP1_DEVICE(JI,JJ,1) = PSFTHM(JI,JJ)* PDIRCOSXW(JI,JJ)
 END DO
@@ -553,7 +553,7 @@ IF ( KRRL >= 1 ) THEN
     ZTMP3_DEVICE(:,:,:) = ZTMP2_DEVICE(:,:,:)*ZFLX(:,:,:)
     !$acc end kernels
     CALL MXF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE )
-    !$acc kernels
+    !$acc kernels present_cr(ZFLXC)
     ZFLXC(:,:,:) = 2.*ZTMP4_DEVICE(:,:,:)
     !$acc end kernels
     IF ( KRRI >= 1 ) THEN
@@ -1296,7 +1296,7 @@ IF ( KRRL >= 1 .AND. .NOT. L2D) THEN
     ZTMP1_DEVICE(:,:,:) = ZTMP2_DEVICE(:,:,:)*ZFLX(:,:,:)
     !$acc end kernels
     CALL MYF_DEVICE( ZTMP1_DEVICE, ZTMP3_DEVICE )
-    !$acc kernels
+    !$acc kernels present_cr(ZFLXC)
     ZFLXC(:,:,:) = 2.*ZTMP3_DEVICE(:,:,:)
     !$acc end kernels
     !
-- 
GitLab