From 797a64ead43ae9bf60fffe451a90469b7b211b81 Mon Sep 17 00:00:00 2001
From: Juan ESCOBAR <juan.escobar@aero.obs-mip.fr>
Date: Fri, 15 Apr 2022 19:01:35 +0200
Subject: [PATCH] Juan 15/04/2022:MNH/ZSOLVER/turb_hor_thermo_flux.f90, Cray
 GPU Opt/Bug bypass, add present_cr + acc_nv , where needeed

---
 src/MNH/turb_hor_thermo_flux.f90     | 191 +++++---------
 src/ZSOLVER/turb_hor_thermo_flux.f90 | 374 ++++++---------------------
 2 files changed, 155 insertions(+), 410 deletions(-)

diff --git a/src/MNH/turb_hor_thermo_flux.f90 b/src/MNH/turb_hor_thermo_flux.f90
index 4e0bd16f6..52cff5188 100644
--- a/src/MNH/turb_hor_thermo_flux.f90
+++ b/src/MNH/turb_hor_thermo_flux.f90
@@ -332,9 +332,7 @@ ZFLX(:,:,IKE+1) = ZFLX(:,:,IKE)
 CALL MXM_DEVICE( PK, ZTMP1_DEVICE )
 CALL GX_M_U_DEVICE(1,IKU,1,PTHLM,PDXX,PDZZ,PDZX,ZTMP2_DEVICE)
 !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-!$acc loop independent collapse(3)
-#endif
+!$acc_nv loop independent collapse(3)
 DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZFLX(JI,JJ,JK)     = -XCSHF * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK)
 END DO
@@ -355,18 +353,18 @@ ZFLX(:,:,IKB:IKB) = -XCSHF * MXM( PK(:,:,IKB:IKB) ) *          &
 #else
 CALL MXM_DEVICE( PK(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1) )
 CALL DXM_DEVICE( PTHLM(:,:,IKB:IKB), ZTMP2_DEVICE(:,:,1:1) )
-!$acc kernels
+!$acc kernels present_cr(ZTMP3_DEVICE)
 ZTMP3_DEVICE(:,:,1) = ZCOEFF(:,:,IKB+2)*PTHLM(:,:,IKB+2)        &
          +ZCOEFF(:,:,IKB+1)*PTHLM(:,:,IKB+1)       &
          +ZCOEFF(:,:,IKB  )*PTHLM(:,:,IKB  )
 !$acc end kernels
 CALL MXM_DEVICE( ZTMP3_DEVICE(:,:,1:1), ZTMP4_DEVICE(:,:,1:1)) 
-!$acc kernels
+!$acc kernels present_cr(ZFLX,ZTMP1_DEVICE)
 ZFLX(:,:,IKB) = -XCSHF * ZTMP1_DEVICE(:,:,1) *          &
   ( ZTMP2_DEVICE(:,:,1) * PINV_PDXX(:,:,IKB) - ZTMP4_DEVICE(:,:,1)      &
         *0.5* ( PDZX(:,:,IKB+1)+PDZX(:,:,IKB))       &
         * PINV_PDXX(:,:,IKB) )
-!$acc end kernels
+! acc end kernels
 #endif
 ! extrapolates the flux under the ground so that the vertical average with 
 ! the IKB flux gives the ground value  ( warning the tangential surface
@@ -375,17 +373,13 @@ ZFLX(:,:,IKB) = -XCSHF * ZTMP1_DEVICE(:,:,1) *          &
 ZFLX(:,:,IKB-1:IKB-1) = 2. * MXM(  SPREAD( PSFTHM(:,:)* PDIRCOSXW(:,:), 3,1) )  &
                        - ZFLX(:,:,IKB:IKB)
 #else
-!$acc kernels
-!PW: BUG: commented 'acc loop independent collapse(2)' to workaround compiler bug (NVHPC 21.1)
-#ifdef MNH_COMPILER_NVHPC
-!acc loop independent collapse(2)
-#endif
+! acc kernels
 DO CONCURRENT ( JI=1:JIU,JJ=1:JJU )
    ZTMP1_DEVICE(JI,JJ,1) = PSFTHM(JI,JJ)* PDIRCOSXW(JI,JJ)
 END DO
 !$acc end kernels
   CALL MXM_DEVICE( ZTMP1_DEVICE(:,:,1:1), ZTMP2_DEVICE(:,:,1:1) )
-!$acc kernels
+!$acc kernels present_cr(ZFLX)
   ZFLX(:,:,IKB-1) = 2. * ZTMP2_DEVICE(:,:,1) - ZFLX(:,:,IKB)
 !$acc end kernels
 #endif
@@ -404,36 +398,28 @@ END IF
 IF (.NOT. LFLAT) THEN
   CALL MXM_DEVICE(PRHODJ, ZTMP1_DEVICE)
   !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-  !$acc loop independent collapse(3)
-#endif
+  !$acc_nv loop independent collapse(3)
   DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * ZFLX(JI,JJ,JK) * PINV_PDXX(JI,JJ,JK)
   END DO
   !$acc end kernels
   CALL DXF_DEVICE(ZTMP2_DEVICE, ZTMP3_DEVICE)
   !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-  !$acc loop independent collapse(3)
-#endif
+  !$acc_nv loop independent collapse(3)
   DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZTMP2_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK) * PINV_PDXX(JI,JJ,JK)
   END DO
   !$acc end kernels
   CALL MZM_DEVICE(ZTMP2_DEVICE,ZTMP4_DEVICE)
   !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-  !$acc loop independent collapse(3)
-#endif
+  !$acc_nv loop independent collapse(3)
   DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)  
      ZTMP2_DEVICE(JI,JJ,JK) = PDZX(JI,JJ,JK)*ZTMP4_DEVICE(JI,JJ,JK)
   END DO
 !$acc end kernels
   CALL MXF_DEVICE(ZTMP2_DEVICE, ZTMP4_DEVICE)
 !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-!$acc loop independent collapse(3)  
-#endif
+!$acc_nv loop independent collapse(3)  
 DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZTMP2_DEVICE(JI,JJ,JK) = PMZM_PRHODJ(JI,JJ,JK) * ZTMP4_DEVICE(JI,JJ,JK) * PINV_PDZZ(JI,JJ,JK)
 END DO
@@ -505,23 +491,23 @@ IF ( KRRL >= 1 ) THEN
     !$acc end kernels
     CALL MZM_DEVICE( ZTMP1_DEVICE, ZTMP4_DEVICE )
     CALL MXM_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )
-    !$acc kernels
+    !$acc kernels present_cr(ZTMP1_DEVICE)
     ZTMP1_DEVICE(:,:,:) = ZTMP2_DEVICE(:,:,:) *ZFLX(:,:,:)
     !$acc end kernels
     CALL MXF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE)
-    !$acc kernels
+    !$acc kernels present_cr(ZTMP1_DEVICE)
     ZTMP1_DEVICE(:,:,:) = ZFLX(:,:,:)*PINV_PDXX(:,:,:)
     !$acc end kernels
     CALL MZM_DEVICE( ZTMP1_DEVICE, ZTMP5_DEVICE )
-    !$acc kernels
+    !$acc kernels present_cr(ZTMP6_DEVICE)
     ZTMP6_DEVICE(:,:,:) = PDZX(:,:,:)*ZTMP5_DEVICE(:,:,:)
     !$acc end kernels
     CALL MXF_DEVICE( ZTMP6_DEVICE, ZTMP5_DEVICE )
-    !$acc kernels
+    !$acc kernels present_cr(ZTMP6_DEVICE)
     ZTMP6_DEVICE(:,:,:) =  ZTMP4_DEVICE(:,:,:)*ZTMP5_DEVICE(:,:,:)
     !$acc end kernels
     CALL MZF_DEVICE( ZTMP6_DEVICE, ZTMP7_DEVICE )
-    !$acc kernels
+    !$acc kernels present_cr(ZFLXC)
     ZFLXC(:,:,:) = 2.*( ZTMP2_DEVICE(:,:,:) +ZTMP7_DEVICE(:,:,:) )
     !$acc end kernels
     IF ( KRRI >= 1 ) THEN
@@ -529,11 +515,11 @@ IF ( KRRL >= 1 ) THEN
       ZTMP1_DEVICE(:,:,:) = PRHODJ(:,:,:)*PATHETA(:,:,:)*PSRCM(:,:,:)
       !$acc end kernels
       CALL MXM_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) 
-      !$acc kernels
+      !$acc kernels present_cr(ZTMP6_DEVICE)
       ZTMP6_DEVICE(:,:,:) = ZTMP2_DEVICE(:,:,:)*ZFLX(:,:,:)*PINV_PDXX(:,:,:)
       !$acc end kernels
       CALL DXF_DEVICE( ZTMP6_DEVICE, ZTMP2_DEVICE)
-      !$acc kernels
+      !$acc kernels present_cr(ZTMP3_DEVICE)
       ZTMP3_DEVICE(:,:,:) = ZTMP4_DEVICE(:,:,:)*ZTMP5_DEVICE(:,:,:)*PINV_PDZZ(:,:,:)
       !$acc end kernels
       CALL DZF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE )
@@ -636,7 +622,7 @@ IF (KSPLT==1 .AND. LLES_CALL) THEN
   ZTMP3_DEVICE(:,:,:) = ZTMP1_DEVICE(:,:,:)*ZTMP2_DEVICE(:,:,:)
   !$acc end kernels
   CALL MXF_DEVICE(ZTMP3_DEVICE,ZTMP1_DEVICE)
-  CALL MZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )
+  CALL MZF_DEVICE(ZTMP1_DEVICE,ZTMP2_DEVICE)
   CALL LES_MEAN_SUBGRID( ZTMP2_DEVICE,X_LES_RES_ddxa_W_SBG_UaThl , .TRUE. )
   !
   CALL GX_M_M_DEVICE(PTHLM,PDXX,PDZZ,PDZX,ZTMP1_DEVICE)
@@ -779,9 +765,7 @@ END IF
   CALL MXM_DEVICE( PK, ZTMP1_DEVICE )
   CALL GX_M_U_DEVICE(1,IKU,1,PRM(:,:,:,1),PDXX,PDZZ,PDZX,ZTMP2_DEVICE)
 !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-!$acc loop independent collapse(3)
-#endif
+!$acc_nv loop independent collapse(3)
 DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZFLX(JI,JJ,JK)     = -XCHF * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK)
 END DO
@@ -792,13 +776,13 @@ END DO
 ! gradient
   CALL MXM_DEVICE( PK(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1) )
   CALL DXM_DEVICE(PRM(:,:,IKB:IKB,1), ZTMP2_DEVICE(:,:,1:1))
-!$acc kernels
+!$acc kernels present_cr(ZTMP3_DEVICE)
   ZTMP3_DEVICE(:,:,1) = ZCOEFF(:,:,IKB+2)*PRM(:,:,IKB+2,1) &
                     +ZCOEFF(:,:,IKB+1)*PRM(:,:,IKB+1,1) &
                     +ZCOEFF(:,:,IKB  )*PRM(:,:,IKB  ,1)
 !$acc end kernels
   CALL MXM_DEVICE(ZTMP3_DEVICE(:,:,1:1),ZTMP4_DEVICE(:,:,1:1))
-!$acc kernels
+!$acc kernels present_cr(ZFLX)
   ZFLX(:,:,IKB) = -XCHF * ZTMP1_DEVICE(:,:,1) *              &
                   ( ZTMP2_DEVICE(:,:,1) * PINV_PDXX(:,:,IKB) &
                   -ZTMP4_DEVICE(:,:,1)                       &
@@ -810,7 +794,7 @@ END DO
   ZTMP1_DEVICE(:,:,1) =  PSFRM(:,:)* PDIRCOSXW(:,:)
 !$acc end kernels
   CALL MXM_DEVICE(ZTMP1_DEVICE(:,:,1:1),ZTMP2_DEVICE(:,:,1:1))
-  !$acc kernels
+  !$acc kernels present_cr(ZFLX)
   ZFLX(:,:,IKB-1) = 2. * ZTMP2_DEVICE(:,:,1) - ZFLX(:,:,IKB)
   !$acc end kernels
 
@@ -820,45 +804,35 @@ END DO
   IF (.NOT. LFLAT) THEN
     CALL MXM_DEVICE(PRHODJ,ZTMP1_DEVICE)
     !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-    !$acc loop independent collapse(3)
-#endif
+    !$acc_nv loop independent collapse(3)
     DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * ZFLX(JI,JJ,JK) * PINV_PDXX(JI,JJ,JK)
     END DO
     !$acc end kernels
     CALL DXF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE )
     !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-    !$acc loop independent collapse(3)
-#endif
+    !$acc_nv loop independent collapse(3)
     DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP2_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK) * PINV_PDXX(JI,JJ,JK)
     END DO
     !$acc end kernels
     CALL MZM_DEVICE(ZTMP2_DEVICE,ZTMP4_DEVICE)
     !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-    !$acc loop independent collapse(3)
-#endif
+    !$acc_nv loop independent collapse(3)
     DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP2_DEVICE(JI,JJ,JK) = PDZX(JI,JJ,JK)*ZTMP4_DEVICE(JI,JJ,JK)
     END DO
     !$acc end kernels
     CALL MXF_DEVICE(ZTMP2_DEVICE,ZTMP4_DEVICE)
     !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-    !$acc loop independent collapse(3)
-#endif
+    !$acc_nv loop independent collapse(3)
     DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP2_DEVICE(JI,JJ,JK) = PMZM_PRHODJ(JI,JJ,JK) * ZTMP4_DEVICE(JI,JJ,JK) * PINV_PDZZ(JI,JJ,JK)
     END DO
     !$acc end kernels
-    CALL DZF_DEVICE( ZTMP2_DEVICE, ZTMP4_DEVICE )
+    CALL DZF_DEVICE(ZTMP2_DEVICE,ZTMP4_DEVICE)
     !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-    !$acc loop independent collapse(3)
-#endif
+    !$acc_nv loop independent collapse(3)
     DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)    
        PRRS(JI,JJ,JK,1) = PRRS(JI,JJ,JK,1) - ZTMP3_DEVICE(JI,JJ,JK) + ZTMP4_DEVICE(JI,JJ,JK)
     END DO
@@ -877,36 +851,33 @@ END DO
   ! Compute the equivalent tendancy for Rc and Ri
   !
   IF ( KRRL >= 1 ) THEN
-    !$acc kernels
+    !$acc kernels present_cr(ZTMP2_DEVICE)
     ZTMP1_DEVICE(:,:,:) = PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:)
     ZTMP2_DEVICE(:,:,:) = ZFLX(:,:,:)*PINV_PDXX(:,:,:)
     !$acc end kernels
     CALL MXM_DEVICE( ZTMP1_DEVICE, ZTMP8_DEVICE )
     IF (.NOT. LFLAT) THEN
-      !$acc kernels
+      !$acc kernels present_cr(ZTMP4_DEVICE)
       ZTMP4_DEVICE(:,:,:) = ZTMP8_DEVICE(:,:,:) * ZFLX(:,:,:)
       !$acc end kernels
       CALL MXF_DEVICE( ZTMP4_DEVICE, ZTMP3_DEVICE )
       CALL MZM_DEVICE( ZTMP1_DEVICE, ZTMP4_DEVICE )
       CALL MZM_DEVICE( ZTMP2_DEVICE, ZTMP5_DEVICE )
-      !$acc kernels
+      !$acc kernels present_cr(ZTMP6_DEVICE)
       ZTMP6_DEVICE(:,:,:) = PDZX(:,:,:)*ZTMP5_DEVICE(:,:,:)
       !$acc end kernels
       CALL MXF_DEVICE( ZTMP6_DEVICE, ZTMP5_DEVICE )
-      !$acc kernels
+      !$acc kernels present_cr(ZTMP6_DEVICE)
       ZTMP6_DEVICE(:,:,:) = ZTMP4_DEVICE(:,:,:)*ZTMP5_DEVICE(:,:,:)
       !$acc end kernels
       CALL MZF_DEVICE( ZTMP6_DEVICE, ZTMP7_DEVICE )
-      !$acc kernels
+      !$acc kernels present_cr(ZFLXC,ZTMP6_DEVICE)
       ZFLXC(:,:,:) = ZFLXC(:,:,:) + 2.*( ZTMP3_DEVICE(:,:,:) + ZTMP7_DEVICE(:,:,:) )
-      !$acc end kernels
-      !
       !
-      !$acc kernels
       ZTMP6_DEVICE(:,:,:) = ZTMP4_DEVICE(:,:,:)*ZTMP5_DEVICE(:,:,:)*PINV_PDZZ(:,:,:)
       !$acc end kernels
       CALL DZF_DEVICE( ZTMP6_DEVICE, ZTMP3_DEVICE )
-      !$acc kernels
+      !$acc kernels present_cr(ZTMP4_DEVICE)
       ZTMP4_DEVICE(:,:,:) = ZTMP8_DEVICE(:,:,:) * ZFLX(:,:,:)*PINV_PDXX(:,:,:)
       !$acc end kernels
       CALL DXF_DEVICE(ZTMP4_DEVICE, ZTMP5_DEVICE)
@@ -1169,9 +1140,7 @@ END IF
   CALL MYM_DEVICE( PK, ZTMP1_DEVICE )
   CALL GY_M_V_DEVICE(1,IKU,1,PTHLM,PDYY,PDZZ,PDZY,ZTMP2_DEVICE)
   !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-  !$acc loop independent collapse(3)
-#endif
+  !$acc_nv loop independent collapse(3)
   DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZFLX(JI,JJ,JK)     = -XCSHF * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK)
   END DO
@@ -1188,13 +1157,13 @@ END IF
 ! gradient
 CALL MYM_DEVICE( PK(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1) )
 CALL DYM_DEVICE(PTHLM(:,:,IKB:IKB), ZTMP2_DEVICE(:,:,1:1) )
-!$acc kernels
+!$acc kernels present_cr(ZTMP3_DEVICE)
 ZTMP3_DEVICE(:,:,1) = ZCOEFF(:,:,IKB+2)*PTHLM(:,:,IKB+2) &
                   +ZCOEFF(:,:,IKB+1)*PTHLM(:,:,IKB+1) &
                   +ZCOEFF(:,:,IKB  )*PTHLM(:,:,IKB  )
 !$acc end kernels
 CALL MYM_DEVICE( ZTMP3_DEVICE(:,:,1:1), ZTMP4_DEVICE(:,:,1:1) ) 
-!$acc kernels
+!$acc kernels present_cr(ZFLX)
 ZFLX(:,:,IKB) = -XCSHF * ZTMP1_DEVICE(:,:,1) *             &
                 ( ZTMP2_DEVICE(:,:,1) * PINV_PDYY(:,:,IKB) &
                 - ZTMP4_DEVICE(:,:,1)                      &
@@ -1208,7 +1177,7 @@ ZFLX(:,:,IKB) = -XCSHF * ZTMP1_DEVICE(:,:,1) *             &
 ZTMP1_DEVICE(:,:,1) = PSFTHM(:,:)* PDIRCOSYW(:,:)
 !$acc end kernels
 CALL MYM_DEVICE( ZTMP1_DEVICE(:,:,1:1), ZTMP2_DEVICE(:,:,1:1) )
-!$acc kernels
+!$acc kernels present_cr(ZFLX)
 ZFLX(:,:,IKB-1) = 2. * ZTMP2_DEVICE(:,:,1) - ZFLX(:,:,IKB)
 !$acc end kernels
 !
@@ -1218,45 +1187,35 @@ IF (.NOT. L2D) THEN
   IF (.NOT. LFLAT) THEN
     CALL MYM_DEVICE(PRHODJ, ZTMP1_DEVICE)
     !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-    !$acc loop independent collapse(3)
-#endif
+    !$acc_nv loop independent collapse(3)
     DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * ZFLX(JI,JJ,JK) * PINV_PDYY(JI,JJ,JK)
     END DO
     !$acc end kernels
     CALL DYF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE )
     !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-    !$acc loop independent collapse(3)
-#endif
+    !$acc_nv loop independent collapse(3)
     DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP1_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK) * PINV_PDYY(JI,JJ,JK)
     END DO
     !$acc end kernels
     CALL MZM_DEVICE(ZTMP1_DEVICE, ZTMP2_DEVICE)
     !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-    !$acc loop independent collapse(3)
-#endif
+    !$acc_nv loop independent collapse(3)
     DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP1_DEVICE(JI,JJ,JK) = PDZY(JI,JJ,JK)*ZTMP2_DEVICE(JI,JJ,JK)
     END DO
     !$acc end kernels
     CALL MYF_DEVICE(ZTMP1_DEVICE, ZTMP2_DEVICE)
     !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-    !$acc loop independent collapse(3)
-#endif
+    !$acc_nv loop independent collapse(3)
     DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP1_DEVICE(JI,JJ,JK) = PMZM_PRHODJ(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK) * PINV_PDZZ(JI,JJ,JK)
     END DO
     !$acc end kernels
     CALL DZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )
     !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-    !$acc loop independent collapse(3)
-#endif
+    !$acc_nv loop independent collapse(3)
     DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        PRTHLS(JI,JJ,JK) = PRTHLS(JI,JJ,JK) - ZTMP3_DEVICE(JI,JJ,JK) + ZTMP2_DEVICE(JI,JJ,JK)
     END DO
@@ -1282,32 +1241,32 @@ IF ( KRRL >= 1 .AND. .NOT. L2D) THEN
     ZTMP1_DEVICE(:,:,:) = PRHODJ(:,:,:)*PATHETA(:,:,:)*PSRCM(:,:,:)
     !$acc end kernels
     CALL MYM_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )
-    !$acc kernels
+    !$acc kernels present_cr(ZTMP4_DEVICE)
     ZTMP4_DEVICE(:,:,:) = ZTMP2_DEVICE(:,:,:)*ZFLX(:,:,:)
     !$acc end kernels
     CALL MYF_DEVICE( ZTMP4_DEVICE, ZTMP3_DEVICE )
-    !$acc kernels
+    !$acc kernels present_cr(ZTMP4_DEVICE)
     ZTMP4_DEVICE(:,:,:) = ZFLX(:,:,:)*PINV_PDYY(:,:,:)
     !$acc end kernels
     CALL MZM_DEVICE( ZTMP4_DEVICE, ZTMP5_DEVICE )
-    !$acc kernels
+    !$acc kernels present_cr(ZTMP4_DEVICE)
     ZTMP4_DEVICE(:,:,:) = PDZY(:,:,:)*ZTMP5_DEVICE(:,:,:)
     !$acc end kernels
     CALL MYF_DEVICE( ZTMP4_DEVICE, ZTMP5_DEVICE)
     CALL MZM_DEVICE( ZTMP1_DEVICE, ZTMP4_DEVICE )
-    !$acc kernels
+    !$acc kernels present_cr(ZTMP6_DEVICE)
     ZTMP6_DEVICE(:,:,:) = ZTMP4_DEVICE(:,:,:)*ZTMP5_DEVICE(:,:,:)
     !$acc end kernels
     CALL MZF_DEVICE( ZTMP6_DEVICE, ZTMP4_DEVICE )
-    !$acc kernels
+    !$acc kernels present_cr(ZFLXC)
     ZFLXC(:,:,:) = 2.*( ZTMP3_DEVICE(:,:,:) + ZTMP4_DEVICE(:,:,:) )
     !$acc end kernels
     IF ( KRRI >= 1 ) THEN
-      !$acc kernels
+    !$acc kernels present_cr(ZTMP3_DEVICE)
       ZTMP3_DEVICE(:,:,:) = ZTMP2_DEVICE(:,:,:)*ZFLX(:,:,:)*PINV_PDYY(:,:,:)
       !$acc end kernels
       CALL DYF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE )
-      !$acc kernels
+      !$acc kernels present_cr(ZTMP3_DEVICE)
       ZTMP3_DEVICE(:,:,:) = ZTMP6_DEVICE(:,:,:)*PINV_PDZZ(:,:,:)
       !$acc end kernels
       CALL DZF_DEVICE( ZTMP3_DEVICE, ZTMP5_DEVICE )
@@ -1441,7 +1400,7 @@ IF (KRR/=0) THEN
            +ZCOEFF(:,:,IKB  :IKB  )*PRM(:,:,IKB  :IKB  ,1) )     &
            *0.5* ( PDZY(:,:,IKB+1:IKB+1)+PDZY(:,:,IKB:IKB))      &
           * PINV_PDYY(:,:,IKB:IKB) )
-! extrapolates the flux under the ground so that the vertical average with
+! extrapolates the flux under the ground so that the vertical average with 
 ! the IKB flux gives the ground value  ( warning the tangential surface
 ! flux has been set to 0 for the moment !!  to be improved )
   ZFLX(:,:,IKB-1:IKB-1) = 2. * MYM(  SPREAD( PSFRM(:,:)* PDIRCOSYW(:,:), 3,1) ) &
@@ -1548,9 +1507,7 @@ IF (KRR/=0) THEN
     CALL MYM_DEVICE( PK, ZTMP1_DEVICE )
     CALL GY_M_V_DEVICE(1,IKU,1,PRM(:,:,:,1),PDYY,PDZZ,PDZY, ZTMP2_DEVICE)
     !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-    !$acc loop independent collapse(3)
-#endif
+    !$acc_nv loop independent collapse(3)
     DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZFLX(JI,JJ,JK)     = -XCHF * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK)
     END DO !CONCURRENT
@@ -1566,39 +1523,37 @@ IF (KRR/=0) THEN
 ! gradient
   CALL MYM_DEVICE( PK(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1) )
   CALL DYM_DEVICE(PRM(:,:,IKB:IKB,1), ZTMP2_DEVICE(:,:,1:1))
-  !$acc kernels
+  !$acc kernels present_cr(ZTMP3_DEVICE)
   ZTMP3_DEVICE(:,:,1) = ZCOEFF(:,:,IKB+2)*PRM(:,:,IKB+2,1) &
                     +ZCOEFF(:,:,IKB+1)*PRM(:,:,IKB+1,1) &
                     +ZCOEFF(:,:,IKB  )*PRM(:,:,IKB  ,1)
   !$acc end kernels
   CALL MYM_DEVICE( ZTMP3_DEVICE(:,:,1:1), ZTMP4_DEVICE(:,:,1:1) )
-  !$acc kernels
+  !$acc kernels present_cr(ZFLX)
   ZFLX(:,:,IKB) = -XCHF * ZTMP1_DEVICE(:,:,1) *             &
                  ( ZTMP2_DEVICE(:,:,1) * PINV_PDYY(:,:,IKB) &
                  - ZTMP4_DEVICE(:,:,1)                      &
                  *0.5* ( PDZY(:,:,IKB+1)+PDZY(:,:,IKB))  &
                  * PINV_PDYY(:,:,IKB) )
   !$acc end kernels
-! extrapolates the flux under the ground so that the vertical average with
+! extrapolates the flux under the ground so that the vertical average with 
 ! the IKB flux gives the ground value  ( warning the tangential surface
 ! flux has been set to 0 for the moment !!  to be improved )
   !$acc kernels
   ZTMP1_DEVICE(:,:,1) = PSFRM(:,:)* PDIRCOSYW(:,:)
   !$acc end kernels
   CALL MYM_DEVICE( ZTMP1_DEVICE(:,:,1:1), ZTMP2_DEVICE(:,:,1:1) )
-  !$acc kernels
+  !$acc kernels present_cr(ZFLX)
   ZFLX(:,:,IKB-1) = 2. * ZTMP2_DEVICE(:,:,1) - ZFLX(:,:,IKB)
   !$acc end kernels
-!
+  !
   ! Add this source to the conservative mixing ratio sources
   !
   IF (.NOT. L2D) THEN 
     IF (.NOT. LFLAT) THEN
       CALL MYM_DEVICE(PRHODJ, ZTMP1_DEVICE)
       !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-      !$acc loop independent collapse(3)
-#endif
+      !$acc_nv loop independent collapse(3)
       DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
          ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * ZFLX(JI,JJ,JK) * PINV_PDYY(JI,JJ,JK)
       END DO
@@ -1606,27 +1561,21 @@ IF (KRR/=0) THEN
       CALL DYF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE )
       !
       !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-      !$acc loop independent collapse(3)
-#endif
+      !$acc_nv loop independent collapse(3)
       DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
          ZTMP1_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK) * PINV_PDYY(JI,JJ,JK)
       END DO
       !$acc end kernels
       CALL MZM_DEVICE(ZTMP1_DEVICE,ZTMP2_DEVICE)
       !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-      !$acc loop independent collapse(3)
-#endif
+      !$acc_nv loop independent collapse(3)
       DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
          ZTMP1_DEVICE(JI,JJ,JK) = PDZY(JI,JJ,JK)*ZTMP2_DEVICE(JI,JJ,JK)
       END DO
       !$acc end kernels
       CALL MYF_DEVICE(ZTMP1_DEVICE,ZTMP2_DEVICE)
       !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-      !$acc loop independent collapse(3)
-#endif
+      !$acc_nv loop independent collapse(3)
       DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
          ZTMP1_DEVICE(JI,JJ,JK) = PMZM_PRHODJ(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK) * PINV_PDZZ(JI,JJ,JK)
       END DO
@@ -1634,9 +1583,7 @@ IF (KRR/=0) THEN
       CALL DZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )
       !
       !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-      !$acc loop independent collapse(3)
-#endif
+      !$acc_nv loop independent collapse(3)
       DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
          PRRS(JI,JJ,JK,1) = PRRS(JI,JJ,JK,1) - ZTMP3_DEVICE(JI,JJ,JK) + ZTMP2_DEVICE(JI,JJ,JK)
       END DO
@@ -1661,32 +1608,32 @@ IF (KRR/=0) THEN
       ZTMP1_DEVICE(:,:,:) = PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:)
       !$acc end kernels
       CALL MYM_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )
-      !$acc kernels
+      !$acc kernels present_cr(ZTMP3_DEVICE)
       ZTMP3_DEVICE(:,:,:) = ZTMP2_DEVICE(:,:,:)*ZFLX(:,:,:)
       !$acc end kernels
       CALL MXF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE )
       CALL MZM_DEVICE( ZTMP1_DEVICE, ZTMP5_DEVICE )
-      !$acc kernels
+      !$acc kernels present_cr(ZTMP1_DEVICE)
       ZTMP1_DEVICE(:,:,:) = ZFLX(:,:,:)*PINV_PDYY(:,:,:)
       !$acc end kernels
       CALL MZM_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )
-      !$acc kernels
+      !$acc kernels present_cr(ZTMP1_DEVICE)
       ZTMP1_DEVICE(:,:,:) = PDZY(:,:,:)*ZTMP2_DEVICE(:,:,:)
       !$acc end kernels
       CALL MYF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )
-      !$acc kernels
+      !$acc kernels present_cr(ZTMP1_DEVICE)
       ZTMP1_DEVICE(:,:,:) = ZTMP5_DEVICE(:,:,:)*ZTMP2_DEVICE(:,:,:)
       !$acc end kernels
       CALL MZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )
-      !$acc kernels
+      !$acc kernels present_cr(ZFLXC)
       ZFLXC(:,:,:) = ZFLXC(:,:,:) + 2.*( ZTMP4_DEVICE(:,:,:) + ZTMP2_DEVICE(:,:,:) )
       !$acc end kernels
       IF ( KRRI >= 1 ) THEN
-        !$acc kernels
+        !$acc kernels present_cr(ZTMP2_DEVICE)
         ZTMP2_DEVICE(:,:,:) = ZTMP3_DEVICE(:,:,:) * PINV_PDYY(:,:,:)
         !$acc end kernels
         CALL DYF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE )
-        !$acc kernels
+        !$acc kernels present_cr(ZTMP2_DEVICE)
         ZTMP2_DEVICE(:,:,:) = ZTMP1_DEVICE(:,:,:)* PINV_PDZZ(:,:,:)
         !$acc end kernels
         CALL DZF_DEVICE( ZTMP2_DEVICE, ZTMP4_DEVICE )
diff --git a/src/ZSOLVER/turb_hor_thermo_flux.f90 b/src/ZSOLVER/turb_hor_thermo_flux.f90
index a767a3163..52cff5188 100644
--- a/src/ZSOLVER/turb_hor_thermo_flux.f90
+++ b/src/ZSOLVER/turb_hor_thermo_flux.f90
@@ -332,9 +332,7 @@ ZFLX(:,:,IKE+1) = ZFLX(:,:,IKE)
 CALL MXM_DEVICE( PK, ZTMP1_DEVICE )
 CALL GX_M_U_DEVICE(1,IKU,1,PTHLM,PDXX,PDZZ,PDZX,ZTMP2_DEVICE)
 !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-!$acc loop independent collapse(3)
-#endif
+!$acc_nv loop independent collapse(3)
 DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZFLX(JI,JJ,JK)     = -XCSHF * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK)
 END DO
@@ -355,21 +353,13 @@ ZFLX(:,:,IKB:IKB) = -XCSHF * MXM( PK(:,:,IKB:IKB) ) *          &
 #else
 CALL MXM_DEVICE( PK(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1) )
 CALL DXM_DEVICE( PTHLM(:,:,IKB:IKB), ZTMP2_DEVICE(:,:,1:1) )
-#ifdef MNH_COMPILER_CCE
-!$acc kernels present(ZTMP3_DEVICE)
-#else
-!$acc kernels 
-#endif
+!$acc kernels present_cr(ZTMP3_DEVICE)
 ZTMP3_DEVICE(:,:,1) = ZCOEFF(:,:,IKB+2)*PTHLM(:,:,IKB+2)        &
          +ZCOEFF(:,:,IKB+1)*PTHLM(:,:,IKB+1)       &
          +ZCOEFF(:,:,IKB  )*PTHLM(:,:,IKB  )
 !$acc end kernels
 CALL MXM_DEVICE( ZTMP3_DEVICE(:,:,1:1), ZTMP4_DEVICE(:,:,1:1)) 
-#ifdef MNH_COMPILER_CCE
-!$acc kernels present(ZFLX)
-#else
-!$acc kernels 
-#endif
+!$acc kernels present_cr(ZFLX,ZTMP1_DEVICE)
 ZFLX(:,:,IKB) = -XCSHF * ZTMP1_DEVICE(:,:,1) *          &
   ( ZTMP2_DEVICE(:,:,1) * PINV_PDXX(:,:,IKB) - ZTMP4_DEVICE(:,:,1)      &
         *0.5* ( PDZX(:,:,IKB+1)+PDZX(:,:,IKB))       &
@@ -389,11 +379,7 @@ DO CONCURRENT ( JI=1:JIU,JJ=1:JJU )
 END DO
 !$acc end kernels
   CALL MXM_DEVICE( ZTMP1_DEVICE(:,:,1:1), ZTMP2_DEVICE(:,:,1:1) )
-#ifdef MNH_COMPILER_CCE
-!$acc kernels present(ZFLX)
-#else
-!$acc kernels 
-#endif
+!$acc kernels present_cr(ZFLX)
   ZFLX(:,:,IKB-1) = 2. * ZTMP2_DEVICE(:,:,1) - ZFLX(:,:,IKB)
 !$acc end kernels
 #endif
@@ -412,36 +398,28 @@ END IF
 IF (.NOT. LFLAT) THEN
   CALL MXM_DEVICE(PRHODJ, ZTMP1_DEVICE)
   !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-  !$acc loop independent collapse(3)
-#endif
+  !$acc_nv loop independent collapse(3)
   DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * ZFLX(JI,JJ,JK) * PINV_PDXX(JI,JJ,JK)
   END DO
   !$acc end kernels
   CALL DXF_DEVICE(ZTMP2_DEVICE, ZTMP3_DEVICE)
   !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-  !$acc loop independent collapse(3)
-#endif
+  !$acc_nv loop independent collapse(3)
   DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZTMP2_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK) * PINV_PDXX(JI,JJ,JK)
   END DO
   !$acc end kernels
   CALL MZM_DEVICE(ZTMP2_DEVICE,ZTMP4_DEVICE)
   !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-  !$acc loop independent collapse(3)
-#endif
+  !$acc_nv loop independent collapse(3)
   DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)  
      ZTMP2_DEVICE(JI,JJ,JK) = PDZX(JI,JJ,JK)*ZTMP4_DEVICE(JI,JJ,JK)
   END DO
 !$acc end kernels
   CALL MXF_DEVICE(ZTMP2_DEVICE, ZTMP4_DEVICE)
 !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-!$acc loop independent collapse(3)  
-#endif
+!$acc_nv loop independent collapse(3)  
 DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZTMP2_DEVICE(JI,JJ,JK) = PMZM_PRHODJ(JI,JJ,JK) * ZTMP4_DEVICE(JI,JJ,JK) * PINV_PDZZ(JI,JJ,JK)
 END DO
@@ -513,43 +491,23 @@ IF ( KRRL >= 1 ) THEN
     !$acc end kernels
     CALL MZM_DEVICE( ZTMP1_DEVICE, ZTMP4_DEVICE )
     CALL MXM_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )
-#ifdef MNH_COMPILER_CCE
-    !$acc kernels present(ZTMP1_DEVICE)
-#else
-    !$acc kernels 
-#endif
+    !$acc kernels present_cr(ZTMP1_DEVICE)
     ZTMP1_DEVICE(:,:,:) = ZTMP2_DEVICE(:,:,:) *ZFLX(:,:,:)
     !$acc end kernels
     CALL MXF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE)
-#ifdef MNH_COMPILER_CCE    
-    !$acc kernels present(ZTMP1_DEVICE)
-#else
-    !$acc kernels 
-#endif    
+    !$acc kernels present_cr(ZTMP1_DEVICE)
     ZTMP1_DEVICE(:,:,:) = ZFLX(:,:,:)*PINV_PDXX(:,:,:)
     !$acc end kernels
     CALL MZM_DEVICE( ZTMP1_DEVICE, ZTMP5_DEVICE )
-#ifdef MNH_COMPILER_CCE    
-    !$acc kernels present(ZTMP6_DEVICE)
-#else
-    !$acc kernels 
-#endif    
+    !$acc kernels present_cr(ZTMP6_DEVICE)
     ZTMP6_DEVICE(:,:,:) = PDZX(:,:,:)*ZTMP5_DEVICE(:,:,:)
     !$acc end kernels
     CALL MXF_DEVICE( ZTMP6_DEVICE, ZTMP5_DEVICE )
-#ifdef MNH_COMPILER_CCE
-    !$acc kernels present(ZTMP6_DEVICE)
-#else
-    !$acc kernels 
-#endif
+    !$acc kernels present_cr(ZTMP6_DEVICE)
     ZTMP6_DEVICE(:,:,:) =  ZTMP4_DEVICE(:,:,:)*ZTMP5_DEVICE(:,:,:)
     !$acc end kernels
     CALL MZF_DEVICE( ZTMP6_DEVICE, ZTMP7_DEVICE )
-#ifdef MNH_COMPILER_CCE
-    !$acc kernels present(ZFLXC)
-#else
-    !$acc kernels 
-#endif
+    !$acc kernels present_cr(ZFLXC)
     ZFLXC(:,:,:) = 2.*( ZTMP2_DEVICE(:,:,:) +ZTMP7_DEVICE(:,:,:) )
     !$acc end kernels
     IF ( KRRI >= 1 ) THEN
@@ -557,19 +515,11 @@ IF ( KRRL >= 1 ) THEN
       ZTMP1_DEVICE(:,:,:) = PRHODJ(:,:,:)*PATHETA(:,:,:)*PSRCM(:,:,:)
       !$acc end kernels
       CALL MXM_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) 
-#ifdef MNH_COMPILER_CCE
-      !$acc kernels present(ZTMP6_DEVICE)
-#else
-      !$acc kernels 
-#endif
+      !$acc kernels present_cr(ZTMP6_DEVICE)
       ZTMP6_DEVICE(:,:,:) = ZTMP2_DEVICE(:,:,:)*ZFLX(:,:,:)*PINV_PDXX(:,:,:)
       !$acc end kernels
       CALL DXF_DEVICE( ZTMP6_DEVICE, ZTMP2_DEVICE)
-#ifdef MNH_COMPILER_CCE
-      !$acc kernels present(ZTMP3_DEVICE)
-#else
-      !$acc kernels 
-#endif
+      !$acc kernels present_cr(ZTMP3_DEVICE)
       ZTMP3_DEVICE(:,:,:) = ZTMP4_DEVICE(:,:,:)*ZTMP5_DEVICE(:,:,:)*PINV_PDZZ(:,:,:)
       !$acc end kernels
       CALL DZF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE )
@@ -672,7 +622,7 @@ IF (KSPLT==1 .AND. LLES_CALL) THEN
   ZTMP3_DEVICE(:,:,:) = ZTMP1_DEVICE(:,:,:)*ZTMP2_DEVICE(:,:,:)
   !$acc end kernels
   CALL MXF_DEVICE(ZTMP3_DEVICE,ZTMP1_DEVICE)
-  CALL MZF_DEVICE( ZTMP1_DEVICE,ZTMP2_DEVICE)
+  CALL MZF_DEVICE(ZTMP1_DEVICE,ZTMP2_DEVICE)
   CALL LES_MEAN_SUBGRID( ZTMP2_DEVICE,X_LES_RES_ddxa_W_SBG_UaThl , .TRUE. )
   !
   CALL GX_M_M_DEVICE(PTHLM,PDXX,PDZZ,PDZX,ZTMP1_DEVICE)
@@ -815,9 +765,7 @@ END IF
   CALL MXM_DEVICE( PK, ZTMP1_DEVICE )
   CALL GX_M_U_DEVICE(1,IKU,1,PRM(:,:,:,1),PDXX,PDZZ,PDZX,ZTMP2_DEVICE)
 !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-!$acc loop independent collapse(3)
-#endif
+!$acc_nv loop independent collapse(3)
 DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZFLX(JI,JJ,JK)     = -XCHF * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK)
 END DO
@@ -828,21 +776,13 @@ END DO
 ! gradient
   CALL MXM_DEVICE( PK(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1) )
   CALL DXM_DEVICE(PRM(:,:,IKB:IKB,1), ZTMP2_DEVICE(:,:,1:1))
-#ifdef MNH_COMPILER_CCE
-!$acc kernels present(ZTMP3_DEVICE)
-#else
-!$acc kernels 
-#endif
+!$acc kernels present_cr(ZTMP3_DEVICE)
   ZTMP3_DEVICE(:,:,1) = ZCOEFF(:,:,IKB+2)*PRM(:,:,IKB+2,1) &
                     +ZCOEFF(:,:,IKB+1)*PRM(:,:,IKB+1,1) &
                     +ZCOEFF(:,:,IKB  )*PRM(:,:,IKB  ,1)
 !$acc end kernels
   CALL MXM_DEVICE(ZTMP3_DEVICE(:,:,1:1),ZTMP4_DEVICE(:,:,1:1))
-#ifdef MNH_COMPILER_CCE
-!$acc kernels present(ZFLX)
-#else
-!$acc kernels 
-#endif
+!$acc kernels present_cr(ZFLX)
   ZFLX(:,:,IKB) = -XCHF * ZTMP1_DEVICE(:,:,1) *              &
                   ( ZTMP2_DEVICE(:,:,1) * PINV_PDXX(:,:,IKB) &
                   -ZTMP4_DEVICE(:,:,1)                       &
@@ -854,11 +794,7 @@ END DO
   ZTMP1_DEVICE(:,:,1) =  PSFRM(:,:)* PDIRCOSXW(:,:)
 !$acc end kernels
   CALL MXM_DEVICE(ZTMP1_DEVICE(:,:,1:1),ZTMP2_DEVICE(:,:,1:1))
-#ifdef MNH_COMPILER_CCE
-  !$acc kernels present(ZFLX)
-#else
-  !$acc kernels 
-#endif
+  !$acc kernels present_cr(ZFLX)
   ZFLX(:,:,IKB-1) = 2. * ZTMP2_DEVICE(:,:,1) - ZFLX(:,:,IKB)
   !$acc end kernels
 
@@ -868,45 +804,35 @@ END DO
   IF (.NOT. LFLAT) THEN
     CALL MXM_DEVICE(PRHODJ,ZTMP1_DEVICE)
     !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-    !$acc loop independent collapse(3)
-#endif
+    !$acc_nv loop independent collapse(3)
     DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * ZFLX(JI,JJ,JK) * PINV_PDXX(JI,JJ,JK)
     END DO
     !$acc end kernels
     CALL DXF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE )
     !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-    !$acc loop independent collapse(3)
-#endif
+    !$acc_nv loop independent collapse(3)
     DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP2_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK) * PINV_PDXX(JI,JJ,JK)
     END DO
     !$acc end kernels
     CALL MZM_DEVICE(ZTMP2_DEVICE,ZTMP4_DEVICE)
     !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-    !$acc loop independent collapse(3)
-#endif
+    !$acc_nv loop independent collapse(3)
     DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP2_DEVICE(JI,JJ,JK) = PDZX(JI,JJ,JK)*ZTMP4_DEVICE(JI,JJ,JK)
     END DO
     !$acc end kernels
     CALL MXF_DEVICE(ZTMP2_DEVICE,ZTMP4_DEVICE)
     !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-    !$acc loop independent collapse(3)
-#endif
+    !$acc_nv loop independent collapse(3)
     DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP2_DEVICE(JI,JJ,JK) = PMZM_PRHODJ(JI,JJ,JK) * ZTMP4_DEVICE(JI,JJ,JK) * PINV_PDZZ(JI,JJ,JK)
     END DO
     !$acc end kernels
-    CALL DZF_DEVICE( ZTMP2_DEVICE, ZTMP4_DEVICE)
+    CALL DZF_DEVICE(ZTMP2_DEVICE,ZTMP4_DEVICE)
     !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-    !$acc loop independent collapse(3)
-#endif
+    !$acc_nv loop independent collapse(3)
     DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)    
        PRRS(JI,JJ,JK,1) = PRRS(JI,JJ,JK,1) - ZTMP3_DEVICE(JI,JJ,JK) + ZTMP4_DEVICE(JI,JJ,JK)
     END DO
@@ -925,57 +851,33 @@ END DO
   ! Compute the equivalent tendancy for Rc and Ri
   !
   IF ( KRRL >= 1 ) THEN
-#ifdef MNH_COMPILER_CCE
-    !$acc kernels present(ZTMP2_DEVICE)
-#else
-    !$acc kernels 
-#endif
+    !$acc kernels present_cr(ZTMP2_DEVICE)
     ZTMP1_DEVICE(:,:,:) = PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:)
     ZTMP2_DEVICE(:,:,:) = ZFLX(:,:,:)*PINV_PDXX(:,:,:)
     !$acc end kernels
     CALL MXM_DEVICE( ZTMP1_DEVICE, ZTMP8_DEVICE )
     IF (.NOT. LFLAT) THEN
-#ifdef MNH_COMPILER_CCE
-      !$acc kernels present(ZTMP4_DEVICE)
-#else
-      !$acc kernels 
-#endif
+      !$acc kernels present_cr(ZTMP4_DEVICE)
       ZTMP4_DEVICE(:,:,:) = ZTMP8_DEVICE(:,:,:) * ZFLX(:,:,:)
       !$acc end kernels
       CALL MXF_DEVICE( ZTMP4_DEVICE, ZTMP3_DEVICE )
       CALL MZM_DEVICE( ZTMP1_DEVICE, ZTMP4_DEVICE )
       CALL MZM_DEVICE( ZTMP2_DEVICE, ZTMP5_DEVICE )
-#ifdef MNH_COMPILER_CCE
-      !$acc kernels present(ZTMP6_DEVICE)
-#else
-      !$acc kernels 
-#endif
+      !$acc kernels present_cr(ZTMP6_DEVICE)
       ZTMP6_DEVICE(:,:,:) = PDZX(:,:,:)*ZTMP5_DEVICE(:,:,:)
       !$acc end kernels
       CALL MXF_DEVICE( ZTMP6_DEVICE, ZTMP5_DEVICE )
-#ifdef MNH_COMPILER_CCE
-      !$acc kernels present(ZTMP6_DEVICE)
-#else
-      !$acc kernels 
-#endif
+      !$acc kernels present_cr(ZTMP6_DEVICE)
       ZTMP6_DEVICE(:,:,:) = ZTMP4_DEVICE(:,:,:)*ZTMP5_DEVICE(:,:,:)
       !$acc end kernels
       CALL MZF_DEVICE( ZTMP6_DEVICE, ZTMP7_DEVICE )
-#ifdef MNH_COMPILER_CCE
-      !$acc kernels present(ZFLXC,ZTMP6_DEVICE)
-#else
-      !$acc kernels 
-#endif
+      !$acc kernels present_cr(ZFLXC,ZTMP6_DEVICE)
       ZFLXC(:,:,:) = ZFLXC(:,:,:) + 2.*( ZTMP3_DEVICE(:,:,:) + ZTMP7_DEVICE(:,:,:) )
       !
       ZTMP6_DEVICE(:,:,:) = ZTMP4_DEVICE(:,:,:)*ZTMP5_DEVICE(:,:,:)*PINV_PDZZ(:,:,:)
       !$acc end kernels
       CALL DZF_DEVICE( ZTMP6_DEVICE, ZTMP3_DEVICE )
-#ifdef MNH_COMPILER_CCE
-      !$acc kernels present(ZTMP4_DEVICE)
-#else
-      !$acc kernels 
-#endif
+      !$acc kernels present_cr(ZTMP4_DEVICE)
       ZTMP4_DEVICE(:,:,:) = ZTMP8_DEVICE(:,:,:) * ZFLX(:,:,:)*PINV_PDXX(:,:,:)
       !$acc end kernels
       CALL DXF_DEVICE(ZTMP4_DEVICE, ZTMP5_DEVICE)
@@ -1238,9 +1140,7 @@ END IF
   CALL MYM_DEVICE( PK, ZTMP1_DEVICE )
   CALL GY_M_V_DEVICE(1,IKU,1,PTHLM,PDYY,PDZZ,PDZY,ZTMP2_DEVICE)
   !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-  !$acc loop independent collapse(3)
-#endif
+  !$acc_nv loop independent collapse(3)
   DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZFLX(JI,JJ,JK)     = -XCSHF * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK)
   END DO
@@ -1257,21 +1157,13 @@ END IF
 ! gradient
 CALL MYM_DEVICE( PK(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1) )
 CALL DYM_DEVICE(PTHLM(:,:,IKB:IKB), ZTMP2_DEVICE(:,:,1:1) )
-#ifdef MNH_COMPILER_CCE
-!$acc kernels present(ZTMP3_DEVICE)
-#else
-!$acc kernels 
-#endif
+!$acc kernels present_cr(ZTMP3_DEVICE)
 ZTMP3_DEVICE(:,:,1) = ZCOEFF(:,:,IKB+2)*PTHLM(:,:,IKB+2) &
                   +ZCOEFF(:,:,IKB+1)*PTHLM(:,:,IKB+1) &
                   +ZCOEFF(:,:,IKB  )*PTHLM(:,:,IKB  )
 !$acc end kernels
 CALL MYM_DEVICE( ZTMP3_DEVICE(:,:,1:1), ZTMP4_DEVICE(:,:,1:1) ) 
-#ifdef MNH_COMPILER_CCE
-!$acc kernels present(ZFLX)
-#else
-!$acc kernels 
-#endif
+!$acc kernels present_cr(ZFLX)
 ZFLX(:,:,IKB) = -XCSHF * ZTMP1_DEVICE(:,:,1) *             &
                 ( ZTMP2_DEVICE(:,:,1) * PINV_PDYY(:,:,IKB) &
                 - ZTMP4_DEVICE(:,:,1)                      &
@@ -1285,11 +1177,7 @@ ZFLX(:,:,IKB) = -XCSHF * ZTMP1_DEVICE(:,:,1) *             &
 ZTMP1_DEVICE(:,:,1) = PSFTHM(:,:)* PDIRCOSYW(:,:)
 !$acc end kernels
 CALL MYM_DEVICE( ZTMP1_DEVICE(:,:,1:1), ZTMP2_DEVICE(:,:,1:1) )
-#ifdef MNH_COMPILER_CCE
-!$acc kernels present(ZFLX)
-#else
-!$acc kernels 
-#endif
+!$acc kernels present_cr(ZFLX)
 ZFLX(:,:,IKB-1) = 2. * ZTMP2_DEVICE(:,:,1) - ZFLX(:,:,IKB)
 !$acc end kernels
 !
@@ -1299,45 +1187,35 @@ IF (.NOT. L2D) THEN
   IF (.NOT. LFLAT) THEN
     CALL MYM_DEVICE(PRHODJ, ZTMP1_DEVICE)
     !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-    !$acc loop independent collapse(3)
-#endif
+    !$acc_nv loop independent collapse(3)
     DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * ZFLX(JI,JJ,JK) * PINV_PDYY(JI,JJ,JK)
     END DO
     !$acc end kernels
     CALL DYF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE )
     !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-    !$acc loop independent collapse(3)
-#endif
+    !$acc_nv loop independent collapse(3)
     DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP1_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK) * PINV_PDYY(JI,JJ,JK)
     END DO
     !$acc end kernels
     CALL MZM_DEVICE(ZTMP1_DEVICE, ZTMP2_DEVICE)
     !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-    !$acc loop independent collapse(3)
-#endif
+    !$acc_nv loop independent collapse(3)
     DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP1_DEVICE(JI,JJ,JK) = PDZY(JI,JJ,JK)*ZTMP2_DEVICE(JI,JJ,JK)
     END DO
     !$acc end kernels
     CALL MYF_DEVICE(ZTMP1_DEVICE, ZTMP2_DEVICE)
     !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-    !$acc loop independent collapse(3)
-#endif
+    !$acc_nv loop independent collapse(3)
     DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP1_DEVICE(JI,JJ,JK) = PMZM_PRHODJ(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK) * PINV_PDZZ(JI,JJ,JK)
     END DO
     !$acc end kernels
     CALL DZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )
     !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-    !$acc loop independent collapse(3)
-#endif
+    !$acc_nv loop independent collapse(3)
     DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        PRTHLS(JI,JJ,JK) = PRTHLS(JI,JJ,JK) - ZTMP3_DEVICE(JI,JJ,JK) + ZTMP2_DEVICE(JI,JJ,JK)
     END DO
@@ -1363,60 +1241,32 @@ IF ( KRRL >= 1 .AND. .NOT. L2D) THEN
     ZTMP1_DEVICE(:,:,:) = PRHODJ(:,:,:)*PATHETA(:,:,:)*PSRCM(:,:,:)
     !$acc end kernels
     CALL MYM_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )
-#ifdef MNH_COMPILER_CCE
-    !$acc kernels present(ZTMP4_DEVICE)
-#else
-    !$acc kernels 
-#endif
+    !$acc kernels present_cr(ZTMP4_DEVICE)
     ZTMP4_DEVICE(:,:,:) = ZTMP2_DEVICE(:,:,:)*ZFLX(:,:,:)
     !$acc end kernels
     CALL MYF_DEVICE( ZTMP4_DEVICE, ZTMP3_DEVICE )
-#ifdef MNH_COMPILER_CCE
-    !$acc kernels present(ZTMP4_DEVICE)
-#else
-    !$acc kernels 
-#endif
+    !$acc kernels present_cr(ZTMP4_DEVICE)
     ZTMP4_DEVICE(:,:,:) = ZFLX(:,:,:)*PINV_PDYY(:,:,:)
     !$acc end kernels
     CALL MZM_DEVICE( ZTMP4_DEVICE, ZTMP5_DEVICE )
-#ifdef MNH_COMPILER_CCE
-    !$acc kernels present(ZTMP4_DEVICE)
-#else
-    !$acc kernels 
-#endif
+    !$acc kernels present_cr(ZTMP4_DEVICE)
     ZTMP4_DEVICE(:,:,:) = PDZY(:,:,:)*ZTMP5_DEVICE(:,:,:)
     !$acc end kernels
     CALL MYF_DEVICE( ZTMP4_DEVICE, ZTMP5_DEVICE)
     CALL MZM_DEVICE( ZTMP1_DEVICE, ZTMP4_DEVICE )
-#ifdef MNH_COMPILER_CCE
-    !$acc kernels present(ZTMP6_DEVICE)
-#else
-    !$acc kernels 
-#endif
+    !$acc kernels present_cr(ZTMP6_DEVICE)
     ZTMP6_DEVICE(:,:,:) = ZTMP4_DEVICE(:,:,:)*ZTMP5_DEVICE(:,:,:)
     !$acc end kernels
     CALL MZF_DEVICE( ZTMP6_DEVICE, ZTMP4_DEVICE )
-#ifdef MNH_COMPILER_CCE
-    !$acc kernels present(ZFLXC)
-#else
-    !$acc kernels 
-#endif
+    !$acc kernels present_cr(ZFLXC)
     ZFLXC(:,:,:) = 2.*( ZTMP3_DEVICE(:,:,:) + ZTMP4_DEVICE(:,:,:) )
     !$acc end kernels
     IF ( KRRI >= 1 ) THEN
-#ifdef MNH_COMPILER_CCE
-    !$acc kernels present(ZTMP3_DEVICE)
-#else
-    !$acc kernels 
-#endif
+    !$acc kernels present_cr(ZTMP3_DEVICE)
       ZTMP3_DEVICE(:,:,:) = ZTMP2_DEVICE(:,:,:)*ZFLX(:,:,:)*PINV_PDYY(:,:,:)
       !$acc end kernels
       CALL DYF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE )
-#ifdef MNH_COMPILER_CCE
-      !$acc kernels present(ZTMP3_DEVICE)
-#else
-      !$acc kernels 
-#endif
+      !$acc kernels present_cr(ZTMP3_DEVICE)
       ZTMP3_DEVICE(:,:,:) = ZTMP6_DEVICE(:,:,:)*PINV_PDZZ(:,:,:)
       !$acc end kernels
       CALL DZF_DEVICE( ZTMP3_DEVICE, ZTMP5_DEVICE )
@@ -1573,42 +1423,42 @@ IF (KRR/=0) THEN
   !
   IF ( KRRL >= 1 .AND. .NOT. L2D) THEN   ! Sub-grid condensation
     IF (.NOT. LFLAT) THEN
-      ZFLXC(:,:,:) = ZFLXC(:,:,:)            &
-            + 2.*( MXF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:) )                     &
-                +  MZF( MZM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*MYF(                       &
-                                               PDZY(:,:,:)*(MZM( ZFLX(:,:,:)*PINV_PDYY(:,:,:) )) ) )&
+      ZFLXC(:,:,:) = ZFLXC(:,:,:)                                                                    &
+            + 2.*( MXF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:) )               &
+                +  MZF( MZM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*MYF(                        &
+                                               PDZY(:,:,:)*(MZM( ZFLX(:,:,:)*PINV_PDYY(:,:,:) )) ) ) &
                  )
       IF ( KRRI >= 1 ) THEN
-        PRRS(:,:,:,2) = PRRS(:,:,:,2) +  2. *                                  &
-        (- DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)/PDYY )                        &
-         + DZF( MZM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*MYF( PDZY(:,:,:)* &
-           (MZM( ZFLX(:,:,:)*PINV_PDYY(:,:,:) )) )&
-                                           * PINV_PDZZ(:,:,:) )                       &
+        PRRS(:,:,:,2) = PRRS(:,:,:,2) +  2. *                                            &
+        (- DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)*PINV_PDYY ) &
+         + DZF( MZM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*MYF( PDZY(:,:,:)*       &
+           (MZM( ZFLX(:,:,:)*PINV_PDYY(:,:,:) )) )                                       &
+                                           * PINV_PDZZ(:,:,:) )                          &
         )*(1.0-PFRAC_ICE(:,:,:))
-        PRRS(:,:,:,4) = PRRS(:,:,:,4) +  2. *                                  &
-        (- DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)/PDYY )                        &
-         + DZF( MZM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*MYF( PDZY(:,:,:)* &
-           (MZM( ZFLX(:,:,:)*PINV_PDYY(:,:,:) )) )&
-                                           * PINV_PDZZ(:,:,:) )                       &
+        PRRS(:,:,:,4) = PRRS(:,:,:,4) +  2. *                                            &
+        (- DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)*PINV_PDYY ) &
+         + DZF( MZM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*MYF( PDZY(:,:,:)*       &
+           (MZM( ZFLX(:,:,:)*PINV_PDYY(:,:,:) )) )                                       &
+                                           * PINV_PDZZ(:,:,:) )                          &
         )*PFRAC_ICE(:,:,:)
       ELSE
-        PRRS(:,:,:,2) = PRRS(:,:,:,2) +  2. *                                  &
-        (- DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)/PDYY )                        &
-         + DZF( MZM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*MYF( PDZY(:,:,:)* &
-           (MZM( ZFLX(:,:,:)*PINV_PDYY(:,:,:) )) )&
-                                           * PINV_PDZZ(:,:,:) )                       &
+        PRRS(:,:,:,2) = PRRS(:,:,:,2) +  2. *                                            &
+        (- DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)*PINV_PDYY ) &
+         + DZF( MZM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*MYF( PDZY(:,:,:)*       &
+           (MZM( ZFLX(:,:,:)*PINV_PDYY(:,:,:) )) )                                       &
+                                           * PINV_PDZZ(:,:,:) )                          &
         )
       END IF
     ELSE
       ZFLXC(:,:,:) = ZFLXC(:,:,:) + 2.*MXF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX )
       IF ( KRRI >= 1 ) THEN
         PRRS(:,:,:,2) = PRRS(:,:,:,2) - 2. *                                   &
-        DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)/PDYY )*(1.0-PFRAC_ICE(:,:,:))
+        DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)*PINV_PDYY )*(1.0-PFRAC_ICE(:,:,:))
         PRRS(:,:,:,4) = PRRS(:,:,:,4) - 2. *                                   &
-        DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)/PDYY )*PFRAC_ICE(:,:,:)
+        DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)*PINV_PDYY )*PFRAC_ICE(:,:,:)
       ELSE
         PRRS(:,:,:,2) = PRRS(:,:,:,2) - 2. *                                   &
-        DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)/PDYY )
+        DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)*PINV_PDYY )
       END IF
     END IF
   END IF
@@ -1657,9 +1507,7 @@ IF (KRR/=0) THEN
     CALL MYM_DEVICE( PK, ZTMP1_DEVICE )
     CALL GY_M_V_DEVICE(1,IKU,1,PRM(:,:,:,1),PDYY,PDZZ,PDZY, ZTMP2_DEVICE)
     !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-    !$acc loop independent collapse(3)
-#endif
+    !$acc_nv loop independent collapse(3)
     DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZFLX(JI,JJ,JK)     = -XCHF * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK)
     END DO !CONCURRENT
@@ -1675,21 +1523,13 @@ IF (KRR/=0) THEN
 ! gradient
   CALL MYM_DEVICE( PK(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1) )
   CALL DYM_DEVICE(PRM(:,:,IKB:IKB,1), ZTMP2_DEVICE(:,:,1:1))
-#ifdef MNH_COMPILER_CCE
-  !$acc kernels present(ZTMP3_DEVICE)
-#else
-  !$acc kernels 
-#endif
+  !$acc kernels present_cr(ZTMP3_DEVICE)
   ZTMP3_DEVICE(:,:,1) = ZCOEFF(:,:,IKB+2)*PRM(:,:,IKB+2,1) &
                     +ZCOEFF(:,:,IKB+1)*PRM(:,:,IKB+1,1) &
                     +ZCOEFF(:,:,IKB  )*PRM(:,:,IKB  ,1)
   !$acc end kernels
   CALL MYM_DEVICE( ZTMP3_DEVICE(:,:,1:1), ZTMP4_DEVICE(:,:,1:1) )
-#ifdef MNH_COMPILER_CCE
-  !$acc kernels present(ZFLX)
-#else
-  !$acc kernels 
-#endif
+  !$acc kernels present_cr(ZFLX)
   ZFLX(:,:,IKB) = -XCHF * ZTMP1_DEVICE(:,:,1) *             &
                  ( ZTMP2_DEVICE(:,:,1) * PINV_PDYY(:,:,IKB) &
                  - ZTMP4_DEVICE(:,:,1)                      &
@@ -1703,11 +1543,7 @@ IF (KRR/=0) THEN
   ZTMP1_DEVICE(:,:,1) = PSFRM(:,:)* PDIRCOSYW(:,:)
   !$acc end kernels
   CALL MYM_DEVICE( ZTMP1_DEVICE(:,:,1:1), ZTMP2_DEVICE(:,:,1:1) )
-#ifdef MNH_COMPILER_CCE
-  !$acc kernels present(ZFLX)
-#else
-  !$acc kernels 
-#endif
+  !$acc kernels present_cr(ZFLX)
   ZFLX(:,:,IKB-1) = 2. * ZTMP2_DEVICE(:,:,1) - ZFLX(:,:,IKB)
   !$acc end kernels
   !
@@ -1717,9 +1553,7 @@ IF (KRR/=0) THEN
     IF (.NOT. LFLAT) THEN
       CALL MYM_DEVICE(PRHODJ, ZTMP1_DEVICE)
       !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-      !$acc loop independent collapse(3)
-#endif
+      !$acc_nv loop independent collapse(3)
       DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
          ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * ZFLX(JI,JJ,JK) * PINV_PDYY(JI,JJ,JK)
       END DO
@@ -1727,27 +1561,21 @@ IF (KRR/=0) THEN
       CALL DYF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE )
       !
       !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-      !$acc loop independent collapse(3)
-#endif
+      !$acc_nv loop independent collapse(3)
       DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
          ZTMP1_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK) * PINV_PDYY(JI,JJ,JK)
       END DO
       !$acc end kernels
       CALL MZM_DEVICE(ZTMP1_DEVICE,ZTMP2_DEVICE)
       !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-      !$acc loop independent collapse(3)
-#endif
+      !$acc_nv loop independent collapse(3)
       DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
          ZTMP1_DEVICE(JI,JJ,JK) = PDZY(JI,JJ,JK)*ZTMP2_DEVICE(JI,JJ,JK)
       END DO
       !$acc end kernels
       CALL MYF_DEVICE(ZTMP1_DEVICE,ZTMP2_DEVICE)
       !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-      !$acc loop independent collapse(3)
-#endif
+      !$acc_nv loop independent collapse(3)
       DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
          ZTMP1_DEVICE(JI,JJ,JK) = PMZM_PRHODJ(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK) * PINV_PDZZ(JI,JJ,JK)
       END DO
@@ -1755,9 +1583,7 @@ IF (KRR/=0) THEN
       CALL DZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )
       !
       !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-      !$acc loop independent collapse(3)
-#endif
+      !$acc_nv loop independent collapse(3)
       DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
          PRRS(JI,JJ,JK,1) = PRRS(JI,JJ,JK,1) - ZTMP3_DEVICE(JI,JJ,JK) + ZTMP2_DEVICE(JI,JJ,JK)
       END DO
@@ -1782,60 +1608,32 @@ IF (KRR/=0) THEN
       ZTMP1_DEVICE(:,:,:) = PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:)
       !$acc end kernels
       CALL MYM_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )
-#ifdef MNH_COMPILER_CCE
-      !$acc kernels present(ZTMP3_DEVICE)
-#else
-      !$acc kernels 
-#endif
+      !$acc kernels present_cr(ZTMP3_DEVICE)
       ZTMP3_DEVICE(:,:,:) = ZTMP2_DEVICE(:,:,:)*ZFLX(:,:,:)
       !$acc end kernels
       CALL MXF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE )
       CALL MZM_DEVICE( ZTMP1_DEVICE, ZTMP5_DEVICE )
-#ifdef MNH_COMPILER_CCE
-      !$acc kernels present(ZTMP1_DEVICE)
-#else
-      !$acc kernels 
-#endif
+      !$acc kernels present_cr(ZTMP1_DEVICE)
       ZTMP1_DEVICE(:,:,:) = ZFLX(:,:,:)*PINV_PDYY(:,:,:)
       !$acc end kernels
       CALL MZM_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )
-#ifdef MNH_COMPILER_CCE
-      !$acc kernels present(ZTMP1_DEVICE)
-#else
-      !$acc kernels 
-#endif
+      !$acc kernels present_cr(ZTMP1_DEVICE)
       ZTMP1_DEVICE(:,:,:) = PDZY(:,:,:)*ZTMP2_DEVICE(:,:,:)
       !$acc end kernels
       CALL MYF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )
-#ifdef MNH_COMPILER_CCE
-      !$acc kernels present(ZTMP1_DEVICE)
-#else
-      !$acc kernels 
-#endif
+      !$acc kernels present_cr(ZTMP1_DEVICE)
       ZTMP1_DEVICE(:,:,:) = ZTMP5_DEVICE(:,:,:)*ZTMP2_DEVICE(:,:,:)
       !$acc end kernels
       CALL MZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )
-#ifdef MNH_COMPILER_CCE
-      !$acc kernels present(ZFLXC)
-#else
-      !$acc kernels 
-#endif
+      !$acc kernels present_cr(ZFLXC)
       ZFLXC(:,:,:) = ZFLXC(:,:,:) + 2.*( ZTMP4_DEVICE(:,:,:) + ZTMP2_DEVICE(:,:,:) )
       !$acc end kernels
       IF ( KRRI >= 1 ) THEN
-#ifdef MNH_COMPILER_CCE
-        !$acc kernels present(ZTMP2_DEVICE)
-#else
-        !$acc kernels 
-#endif
+        !$acc kernels present_cr(ZTMP2_DEVICE)
         ZTMP2_DEVICE(:,:,:) = ZTMP3_DEVICE(:,:,:) * PINV_PDYY(:,:,:)
         !$acc end kernels
         CALL DYF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE )
-#ifdef MNH_COMPILER_CCE
-        !$acc kernels present(ZTMP2_DEVICE)
-#else
-        !$acc kernels 
-#endif
+        !$acc kernels present_cr(ZTMP2_DEVICE)
         ZTMP2_DEVICE(:,:,:) = ZTMP1_DEVICE(:,:,:)* PINV_PDZZ(:,:,:)
         !$acc end kernels
         CALL DZF_DEVICE( ZTMP2_DEVICE, ZTMP4_DEVICE )
-- 
GitLab