From c53a881a38a99ab0b0a6e7c37b0941b18912fc95 Mon Sep 17 00:00:00 2001
From: Juan ESCOBAR <juan.escobar@aero.obs-mip.fr>
Date: Mon, 13 Feb 2023 17:55:19 +0100
Subject: [PATCH] Juan 13/02/2023: MNH modif for compile with
 sourceryg/2022.09-7-orig+OPENACC + optimization for CRAY ftn

---
 src/MNH/advection_metsv.f90              |  22 +++--
 src/MNH/advection_uvw.f90                |   8 +-
 src/MNH/advection_uvw_cen.f90            |   2 +-
 src/MNH/condensation.f90                 |  14 +--
 src/MNH/get_halo.f90                     |   8 +-
 src/MNH/gradient_m.f90                   |   4 +-
 src/MNH/gradient_u.f90                   |  20 ++--
 src/MNH/gradient_v.f90                   |  20 ++--
 src/MNH/ice4_compute_pdf.f90             |  35 +++----
 src/MNH/ice4_fast_rg.f90                 |  52 +++++-----
 src/MNH/ice4_fast_rs.f90                 |  23 ++---
 src/MNH/ice4_nucleation.f90              |  25 ++---
 src/MNH/ice4_rsrimcg_old.f90             |  20 ++--
 src/MNH/ice4_sedimentation_split.f90     |  16 ++-
 src/MNH/ice4_tendencies.f90              |  65 +++++-------
 src/MNH/ice4_warm.f90                    |  16 ++-
 src/MNH/mode_prandtl.f90                 |  16 +--
 src/MNH/rain_ice.f90                     |  55 +++++------
 src/MNH/rain_ice_fast_rg.f90             |  57 +++++------
 src/MNH/rain_ice_fast_rs.f90             |  54 +++++-----
 src/MNH/rain_ice_nucleation.f90          |  82 +++++++---------
 src/MNH/rain_ice_red.f90                 |  73 ++++++++------
 src/MNH/rain_ice_sedimentation_split.f90 |  37 ++++---
 src/MNH/rain_ice_slow.f90                |  28 +++---
 src/MNH/rain_ice_warm.f90                |  30 +++---
 src/MNH/rotate_wind.f90                  |  17 ++--
 src/MNH/sources_neg_correct.f90          |  16 +--
 src/MNH/tke_eps_sources.f90              |  37 ++++---
 src/MNH/tridiag_thermo.f90               |  93 ++++++------------
 src/MNH/tridiag_tke.f90                  |  66 ++++---------
 src/MNH/turb.f90                         |  96 +++++++++---------
 src/MNH/turb_hor_thermo_flux.f90         |  96 +++++++++---------
 src/MNH/turb_hor_tke.f90                 |  52 +++++-----
 src/MNH/turb_hor_uw.f90                  |  44 ++++-----
 src/MNH/turb_hor_vw.f90                  |  44 ++++-----
 src/MNH/turb_ver.f90                     |   4 +-
 src/MNH/turb_ver_dyn_flux.f90            | 120 +++++++++++------------
 src/MNH/turb_ver_thermo_corr.f90         |  68 ++++++-------
 src/MNH/turb_ver_thermo_flux.f90         |  44 ++++-----
 39 files changed, 734 insertions(+), 845 deletions(-)

diff --git a/src/MNH/advection_metsv.f90 b/src/MNH/advection_metsv.f90
index 408861cdd..90ecf0437 100644
--- a/src/MNH/advection_metsv.f90
+++ b/src/MNH/advection_metsv.f90
@@ -573,16 +573,16 @@ IF (.NOT. L1D) THEN
   IF (.NOT. L2D) THEN
      !$acc kernels
      !$acc_nv loop independent collapse(3)
-     DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU )
+     !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU )
         ZCFL(JI,JJ,JK)  = SQRT(BR_P2(ZCFLU(JI,JJ,JK))+BR_P2(ZCFLV(JI,JJ,JK))+BR_P2(ZCFLW(JI,JJ,JK)))
-     END DO
+     !$mnh_end_do()
      !$acc end kernels
   ELSE
      !$acc kernels
      !$acc_nv loop independent collapse(3)
-     DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU )
+     !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU )
         ZCFL(JI,JJ,JK)  = SQRT(BR_P2(ZCFLU(JI,JJ,JK))+BR_P2(ZCFLW(JI,JJ,JK)))
-     END DO
+     !$mnh_end_do()
      !$acc end kernels
   END IF
 #endif 
@@ -594,9 +594,9 @@ ELSE
    ZCFL(:,:,:) = SQRT(ZCFLW(:,:,:)**2)
 #else
    !$acc_nv loop independent collapse(3)
-   DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU )
+   !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU )
       ZCFL(JI,JJ,JK) = SQRT(BR_P2(ZCFLW(JI,JJ,JK)))
-   END DO
+   !$mnh_end_do()
 #endif
    !$acc end kernels
 END IF
@@ -673,11 +673,13 @@ ZCFLW_MAX = MAXVAL(ZCFLW(IIB:IIE,IJB:IJE,IKB:IKE))
 ZCFL_MAX  = MAXVAL(ZCFL (IIB:IIE,IJB:IJE,IKB:IKE))
 !$acc end kernels
 !
+#ifndef MPIVIDE
 CALL MPI_ALLREDUCE(MPI_IN_PLACE,ZCFLU_MAX,1,MNHREAL_MPI,MPI_MAX,NMNH_COMM_WORLD,IINFO_ll)
 CALL MPI_ALLREDUCE(MPI_IN_PLACE,ZCFLV_MAX,1,MNHREAL_MPI,MPI_MAX,NMNH_COMM_WORLD,IINFO_ll)
 CALL MPI_ALLREDUCE(MPI_IN_PLACE,ZCFLW_MAX,1,MNHREAL_MPI,MPI_MAX,NMNH_COMM_WORLD,IINFO_ll)
 CALL MPI_ALLREDUCE(MPI_IN_PLACE,ZCFL_MAX,1,MNHREAL_MPI,MPI_MAX,NMNH_COMM_WORLD,IINFO_ll)
 #endif
+#endif
 !
 WRITE(ILUOUT,FMT='(A24,F10.2,A5,F10.2,A5,F10.2,A9,F10.2)') &
                 'Max. CFL number for U : ',ZCFLU_MAX,  &
@@ -926,17 +928,17 @@ DO JSPL=1,KSPLIT
    END IF
    !$acc kernels
    !$acc_nv loop independent collapse(4)
-   DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU, JR=1:KRR )
+   !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU, JR=1:KRR )
       ZR(JI,JJ,JK,JR) = ZR(JI,JJ,JK,JR) + ( ZRRS_PPM(JI,JJ,JK,JR) + ZRRS_OTHER(JI,JJ,JK,JR) + PRRS_CLD(JI,JJ,JK,JR) ) &
            * ZTSTEP_PPM / PRHODJ(JI,JJ,JK)
-   END DO !CONCURRENT 
+   !$mnh_end_do() !CONCURRENT 
    !$acc loop seq
    DO JSV = 1, KSV
       !$acc_nv loop independent collapse(3)
-      DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+      !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
          ZSV(JI,JJ,JK,JSV) = ZSV(JI,JJ,JK,JSV) + ( ZRSVS_PPM(JI,JJ,JK,JSV) + ZRSVS_OTHER(JI,JJ,JK,JSV) +  &
               PRSVS_CLD(JI,JJ,JK,JSV) ) * ZTSTEP_PPM / PRHODJ(JI,JJ,JK)
-      END DO !CONCURRENT 
+      !$mnh_end_do() !CONCURRENT 
    END DO
    !$acc end kernels
    END IF
diff --git a/src/MNH/advection_uvw.f90 b/src/MNH/advection_uvw.f90
index 3603c22ca..ef92cc975 100644
--- a/src/MNH/advection_uvw.f90
+++ b/src/MNH/advection_uvw.f90
@@ -438,11 +438,11 @@ DO JSPL=1,ISPLIT
 #ifdef MNH_COMPILER_NVHPC  
 !$acc loop independent collapse(3)
 #endif     
-DO CONCURRENT (JI=1:IIU , JJ=1:IJU , JK=1:IKU )
+!$mnh_do_concurrent (JI=1:IIU , JJ=1:IJU , JK=1:IKU )
   PRUS(JI,JJ,JK) = PRUS(JI,JJ,JK) + ZRUS_ADV(JI,JJ,JK) / ISPLIT
   PRVS(JI,JJ,JK) = PRVS(JI,JJ,JK) + ZRVS_ADV(JI,JJ,JK) / ISPLIT
   PRWS(JI,JJ,JK) = PRWS(JI,JJ,JK) + ZRWS_ADV(JI,JJ,JK) / ISPLIT
-END DO
+!$mnh_end_do()
 !$acc end kernels
 
   IF (JSPL<ISPLIT) THEN
@@ -452,14 +452,14 @@ END DO
 !
 !
 !$acc_nv loop independent collapse(3)
-DO CONCURRENT (JI=1:IIU , JJ=1:IJU , JK=1:IKU )
+!$mnh_do_concurrent (JI=1:IIU , JJ=1:IJU , JK=1:IKU )
   ZU(JI,JJ,JK) = ZU(JI,JJ,JK) + ZTSTEP / ZMXM_RHODJ(JI,JJ,JK) *  &
               (ZRUS_OTHER(JI,JJ,JK) + ZRUS_ADV(JI,JJ,JK))
   ZV(JI,JJ,JK) = ZV(JI,JJ,JK) + ZTSTEP / ZMYM_RHODJ(JI,JJ,JK) *  &
               (ZRVS_OTHER(JI,JJ,JK) + ZRVS_ADV(JI,JJ,JK))
   ZW(JI,JJ,JK) = ZW(JI,JJ,JK) + ZTSTEP / ZMZM_RHODJ(JI,JJ,JK) *  &
               (ZRWS_OTHER(JI,JJ,JK) + ZRWS_ADV(JI,JJ,JK))
-END DO
+!$mnh_end_do()
 !$acc end kernels
  END IF
 !
diff --git a/src/MNH/advection_uvw_cen.f90 b/src/MNH/advection_uvw_cen.f90
index 69f0e1206..129a0f688 100644
--- a/src/MNH/advection_uvw_cen.f90
+++ b/src/MNH/advection_uvw_cen.f90
@@ -381,7 +381,7 @@ ELSEIF (HUVW_ADV_SCHEME=='CEN4TH') THEN
 END IF
 !
 !$acc kernels present(ZRUS,ZRVS,ZRWS,ZMXM_RHODJ,ZMYM_RHODJ,ZMZM_RHODJ) &
-!$acc present_cr(PRUS,PRVS,PRWS,PDUM,PDWM)
+!$acc & present_cr(PRUS,PRVS,PRWS,PDUM,PDWM)
 ZUS(:,:,:) = ZRUS(:,:,:)/ZMXM_RHODJ(:,:,:)*2.*PTSTEP
 ZVS(:,:,:) = ZRVS(:,:,:)/ZMYM_RHODJ(:,:,:)*2.*PTSTEP
 ZWS(:,:,:) = ZRWS(:,:,:)/ZMZM_RHODJ(:,:,:)*2.*PTSTEP
diff --git a/src/MNH/condensation.f90 b/src/MNH/condensation.f90
index d4ca85714..5dc18b098 100644
--- a/src/MNH/condensation.f90
+++ b/src/MNH/condensation.f90
@@ -234,6 +234,7 @@ LOGICAL :: GPRESENT_PLV, GPRESENT_PLS, GPRESENT_PCPH
 LOGICAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: GWORK
 CHARACTER(LEN=4) :: YLAMBDA3 !Necessary to workaround NVHPC bug (version 21.7 if OpenACC enabled)
 LOGICAL :: GPRESENT_PHLC_HCF, GPRESENT_PHLC_HRC, GPRESENT_PHLI_HCF, GPRESENT_PHLI_HRI
+LOGICAL :: GYLAMBDA3_CB
 !
 INTEGER,    DIMENSION(:), POINTER, CONTIGUOUS :: JKPK,JKMK
 !
@@ -266,6 +267,7 @@ GPRESENT_PHLC_HCF = PRESENT(PHLC_HCF)
 GPRESENT_PHLC_HRC = PRESENT(PHLC_HRC)
 GPRESENT_PHLI_HCF = PRESENT(PHLI_HCF)
 GPRESENT_PHLI_HRI = PRESENT(PHLI_HRI)
+GYLAMBDA3_CB = (YLAMBDA3=='CB')
 !
 IF (MPPDB_INITIALIZED) THEN
   !Check all IN arrays
@@ -476,7 +478,7 @@ IF ( .NOT. OSIGMAS ) THEN
         DO CONCURRENT (JI=KIB:KIE,JJ=KJB:KJE)
         IF ( ZZZP(JI,JJ) > 0.9*(PZZ(JI,JJ,JKPP(JI,JJ))-PZZ(JI,JJ,KKB)) ) &
            ZL(JI,JJ,JK) = .6 * ZL(JI,JJ,JK-KKL)
-     END DO
+        END DO
   END DO
 !$acc end kernels
 END IF
@@ -487,9 +489,9 @@ END IF
 !Ice fraction
 ZFRAC(:,:,:) = 0.
 IF (OUSERI) THEN
-  DO CONCURRENT ( JI = KIB : KIE, JJ = KJB : KJE, JK = KKB : KKE )
+  !$mnh_do_concurrent ( JI = KIB : KIE, JJ = KJB : KJE, JK = KKB : KKE )
     IF ( PRC(JI,JJ,JK) + PRI(JI,JJ,JK) > 1.E-20 ) ZFRAC(JI,JJ,JK) = PRI(JI,JJ,JK) / ( PRC(JI,JJ,JK) + PRI(JI,JJ,JK) )
-  END DO
+  !$mnh_end_do()
 ENDIF
 !$acc end kernels
 !
@@ -501,10 +503,10 @@ IF (OUSERI) CALL COMPUTE_FRAC_ICE3D_DEVICE(HFRAC_ICE, ZFRAC, PT)
 !
 !$acc kernels
 !$acc_nv loop independent
-DO  CONCURRENT ( JK=IKTB:IKTE )
+!$mnh_do_concurrent ( JK=IKTB:IKTE )
   JKPK(JK)=MAX(MIN(JK+KKL,IKTE),IKTB)
   JKMK(JK)=MAX(MIN(JK-KKL,IKTE),IKTB)
-END DO
+!$mnh_end_do()
 ! Bypass CCE/14++ compile bug with index in the good order !!!
 #if defined(MNH_COMPILER_CCE) && defined(MNH_BITREP_OMP)
 DO CONCURRENT(JI=KIB:KIE,JJ=KJB:KJE,JK=IKTB:IKTE)
@@ -704,7 +706,7 @@ DO CONCURRENT(JI=KIB:KIE,JJ=KJB:KJE,JK=IKTB:IKTE)
 !      PSIGRC(JI,JJ,JK) = 2.*PCLDFR(JI,JJ,JK) * MIN( 3. , MAX(1.,1.-ZQ1P(JI,JJ,JK)) )
 ! in the 3D case lambda_3 = 1.
 
-      IF(YLAMBDA3=='CB')THEN
+      IF(GYLAMBDA3_CB)THEN
         PSIGRC(JI,JJ,JK) = PSIGRC(JI,JJ,JK)* MIN( 3. , MAX(1.,1.-ZQ1P(JI,JJ,JK)) )
       ENDIF
 #if defined(MNH_COMPILER_CCE) && defined(MNH_BITREP_OMP)
diff --git a/src/MNH/get_halo.f90 b/src/MNH/get_halo.f90
index b56e1fcff..59931bcf1 100644
--- a/src/MNH/get_halo.f90
+++ b/src/MNH/get_halo.f90
@@ -236,7 +236,7 @@ END MODULE MODD_HALO_D
 !     #########################
       SUBROUTINE GET_HALO_D(PSRC,HDIR,HNAME)
 !     #########################
-#define MNH_GPUDIRECT
+!define MNH_GPUDIRECT
 !
 USE MODD_HALO_D
 
@@ -264,7 +264,7 @@ END SUBROUTINE GET_HALO_D
 !     #########################
       SUBROUTINE GET_HALO_START_D(PSRC,KNB_REQ,KREQ,HDIR)
 !     #########################
-#define MNH_GPUDIRECT
+!define MNH_GPUDIRECT
 !
 USE MODD_HALO_D
 
@@ -476,7 +476,7 @@ END SUBROUTINE GET_HALO_START_D
 !     #########################
       SUBROUTINE GET_HALO_STOP_D(PSRC,KNB_REQ,KREQ,HDIR)
 !     #########################
-#define MNH_GPUDIRECT
+!define MNH_GPUDIRECT
 !
 USE MODD_HALO_D
 
@@ -582,7 +582,7 @@ END SUBROUTINE GET_HALO_STOP_D
 !     ########################################
       SUBROUTINE GET_HALO_DD(PSRC, HDIR, HNAME)
 !     ########################################
-#define MNH_GPUDIRECT
+!define MNH_GPUDIRECT
 !
 USE MODD_HALO_D
 USE MODE_ll
diff --git a/src/MNH/gradient_m.f90 b/src/MNH/gradient_m.f90
index 15ced8198..fa869751c 100644
--- a/src/MNH/gradient_m.f90
+++ b/src/MNH/gradient_m.f90
@@ -1090,9 +1090,9 @@ ELSE
 ENDIF  
 DO JJ=1,JPHEXT
   !$acc_nv loop independent collapse(2) 
-  DO CONCURRENT ( JI=1:IIU , JK=1:IKU ) 
+  !$mnh_do_concurrent ( JI=1:IIU , JK=1:IKU ) 
      PGY_M_V(JI,JJ,JK)=PGY_M_V(JI,IJU-2*JPHEXT+JJ,JK)
-  END DO
+  !$mnh_end_do()
 END DO
 !$acc end kernels
 
diff --git a/src/MNH/gradient_u.f90 b/src/MNH/gradient_u.f90
index 57d1f6c41..73ddd61e0 100644
--- a/src/MNH/gradient_u.f90
+++ b/src/MNH/gradient_u.f90
@@ -242,18 +242,18 @@ IF (.NOT. LFLAT) THEN
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-   DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+   !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZTMP3_DEVICE(JI,JJ,JK) = PDZX(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK)
-  END DO !CONCURRENT
+  !$mnh_end_do() !CONCURRENT
   !$acc end kernels
   CALL MXF_DEVICE(ZTMP3_DEVICE,ZTMP2_DEVICE)
   !$acc kernels
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZTMP3_DEVICE(JI,JJ,JK) = ZTMP2_DEVICE(JI,JJ,JK) / PDZZ(JI,JJ,JK)
-  END DO !CONCURRENT
+  !$mnh_end_do() !CONCURRENT
   !$acc end kernels
   CALL MZF_DEVICE( ZTMP3_DEVICE, ZTMP2_DEVICE )
   CALL MXF_DEVICE(PDXX,ZTMP3_DEVICE)
@@ -438,9 +438,9 @@ IF (.NOT. LFLAT) THEN
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZTMP3_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK)/ZTMP2_DEVICE(JI,JJ,JK)
-  END DO !CONCURRENT    
+  !$mnh_end_do() !CONCURRENT    
   !$acc end kernels
   CALL MYM_DEVICE(ZTMP3_DEVICE,ZTMP1_DEVICE)
   CALL MXM_DEVICE(PDZY,ZTMP2_DEVICE)
@@ -448,9 +448,9 @@ IF (.NOT. LFLAT) THEN
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZTMP3_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK)*ZTMP2_DEVICE(JI,JJ,JK)
-  END DO !CONCURRENT   
+  !$mnh_end_do() !CONCURRENT   
   !$acc end kernels
   CALL MZF_DEVICE( ZTMP3_DEVICE, ZTMP2_DEVICE )
   CALL DYM_DEVICE(PA,ZTMP1_DEVICE)
@@ -459,9 +459,9 @@ IF (.NOT. LFLAT) THEN
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      PGY_U_UV_DEVICE(JI,JJ,JK)=  ( ZTMP1_DEVICE(JI,JJ,JK) - ZTMP2_DEVICE(JI,JJ,JK) ) / ZTMP3_DEVICE(JI,JJ,JK)
-  END DO !CONCURRENT   
+  !$mnh_end_do() !CONCURRENT   
   !$acc end kernels
 ELSE
   CALL DYM_DEVICE(PA,ZTMP1_DEVICE)
diff --git a/src/MNH/gradient_v.f90 b/src/MNH/gradient_v.f90
index 57ebbd0d9..4dd8e9585 100644
--- a/src/MNH/gradient_v.f90
+++ b/src/MNH/gradient_v.f90
@@ -244,18 +244,18 @@ IF (.NOT. LFLAT) THEN
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZTMP3_DEVICE(JI,JJ,JK) = PDZY(JI,JJ,JK)*ZTMP2_DEVICE(JI,JJ,JK)
-  END DO !CONCURRENT
+  !$mnh_end_do() !CONCURRENT
   !$acc end kernels
   CALL MYF_DEVICE(ZTMP3_DEVICE,ZTMP2_DEVICE)
   !$acc kernels
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZTMP3_DEVICE(JI,JJ,JK) = ZTMP2_DEVICE(JI,JJ,JK)/PDZZ(JI,JJ,JK)
-  END DO !CONCURRENT
+  !$mnh_end_do() !CONCURRENT
   !$acc end kernels
   CALL MZF_DEVICE( ZTMP3_DEVICE, ZTMP2_DEVICE )
   CALL MYF_DEVICE(PDYY,ZTMP3_DEVICE)
@@ -439,9 +439,9 @@ IF (.NOT. LFLAT) THEN
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZTMP4_DEVICE(JI,JJ,JK) = ZTMP3_DEVICE(JI,JJ,JK) / ZTMP2_DEVICE(JI,JJ,JK)
-  END DO !CONCURRENT   
+  !$mnh_end_do() !CONCURRENT   
   !$acc end kernels
   CALL MXM_DEVICE(ZTMP4_DEVICE,ZTMP2_DEVICE)
   CALL MYM_DEVICE(PDZX,ZTMP3_DEVICE)
@@ -449,9 +449,9 @@ IF (.NOT. LFLAT) THEN
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZTMP4_DEVICE(JI,JJ,JK) = ZTMP2_DEVICE(JI,JJ,JK) *ZTMP3_DEVICE(JI,JJ,JK)
-  END DO !CONCURRENT   
+  !$mnh_end_do() !CONCURRENT   
   !$acc end kernels
   CALL MZF_DEVICE( ZTMP4_DEVICE, ZTMP2_DEVICE )
   CALL MYM_DEVICE(PDXX,ZTMP3_DEVICE)
@@ -459,9 +459,9 @@ IF (.NOT. LFLAT) THEN
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      PGX_V_UV_DEVICE(JI,JJ,JK)= ( ZTMP1_DEVICE(JI,JJ,JK) - ZTMP2_DEVICE(JI,JJ,JK) ) / ZTMP3_DEVICE(JI,JJ,JK)
-  END DO !CONCURRENT   
+  !$mnh_end_do() !CONCURRENT   
   !$acc end kernels
 ELSE
   CALL DXM_DEVICE(PA,ZTMP1_DEVICE)
diff --git a/src/MNH/ice4_compute_pdf.f90 b/src/MNH/ice4_compute_pdf.f90
index 9b8f6087e..63f868579 100644
--- a/src/MNH/ice4_compute_pdf.f90
+++ b/src/MNH/ice4_compute_pdf.f90
@@ -227,10 +227,9 @@ ELSEIF(HSUBG_AUCV_RC=='CLFR') THEN
 ELSEIF(HSUBG_AUCV_RC=='ADJU') THEN
 !$acc kernels present( GWORK )
   ZSUMRC(:)=PHLC_LRC(:)+PHLC_HRC(:)
-!$acc loop independent
-  DO CONCURRENT( JI = 1 : ISIZE )
+  !$mnh_do_concurrent( JI = 1 : ISIZE )
     GWORK(JI) = ZSUMRC(JI) > 0.
-  END DO
+  !$mnh_end_do()
   WHERE(GWORK(:))
     PHLC_LRC(:)=PHLC_LRC(:)*PRCT(:)/ZSUMRC(:)
     PHLC_HRC(:)=PHLC_HRC(:)*PRCT(:)/ZSUMRC(:)
@@ -249,13 +248,12 @@ ELSEIF(HSUBG_AUCV_RC=='PDF ') THEN
   IF(HSUBG_PR_PDF=='SIGM') THEN
 !$acc kernels present( GWORK, GWORK2, GWORK3 )
     ! Redelsperger and Sommeria (1986) but organised according to Turner (2011, 2012)
-!$acc loop independent
-    DO CONCURRENT( JI = 1 : ISIZE )
+    !$mnh_do_concurrent( JI = 1 : ISIZE )
       GWORK(JI)  = PRCT(JI)>  ZRCRAUTC(JI)+PSIGMA_RC(JI)
       GWORK2(JI) = PRCT(JI)> (ZRCRAUTC(JI)-PSIGMA_RC(JI)) .AND. &
                    PRCT(JI)<=(ZRCRAUTC(JI)+PSIGMA_RC(JI))
       GWORK3(JI) = PRCT(JI)>XRTMIN(2) .AND. PCF(JI)>0.
-    END DO
+    !$mnh_end_do()
     WHERE (GWORK(:))
       PHLC_HCF(:)=1.
       PHLC_LCF(:)=0.
@@ -308,18 +306,16 @@ SELECT CASE( HSUBG_PR_PDF )
 END SELECT
 
 !$acc kernels
-!$acc loop independent
-    DO CONCURRENT( JI = 1 : ISIZE )
+    !$mnh_do_concurrent( JI = 1 : ISIZE )
       IF ( PRCT(JI)>0. .AND. PCF(JI)>0. ) ZHLC_RCMAX(JI) = ZCOEFFRCM * PRCT(JI) / PCF(JI)
-    END DO
+    !$mnh_end_do()
 !$acc end kernels
     ! Split available water and cloud fraction in two parts
     ! Calculate local mean values int he low and high parts for the 3 PDF forms:
 !$acc kernels present( GWORK )
-!$acc loop independent
-    DO CONCURRENT( JI = 1 : ISIZE )
+    !$mnh_do_concurrent( JI = 1 : ISIZE )
       GWORK(JI) = PRCT(JI)>0. .AND. PCF(JI)>0. .AND. ZHLC_RCMAX(JI)>ZRCRAUTC(JI)
-    END DO
+    !$mnh_end_do()
 !$acc end kernels
     !IF(HSUBG_PR_PDF=='HLCRECTPDF') THEN
     IF (IHSUBG_PR_PDF==1) THEN
@@ -341,8 +337,7 @@ END SELECT
     !ELSE IF(HSUBG_PR_PDF=='HLCQUADRAPDF') THEN
     ELSE IF (IHSUBG_PR_PDF==3) THEN
 !$acc kernels present( GWORK )
-!$acc loop independent
-      DO CONCURRENT( JI = 1 : ISIZE )
+      !$mnh_do_concurrent( JI = 1 : ISIZE )
         IF ( GWORK(JI) ) THEN
 #ifndef MNH_BITREP
           ZHLC_LRCLOCAL(JI)=(3.0 *ZRCRAUTC(JI)**3 - 8.0 *ZRCRAUTC(JI)**2 * ZHLC_RCMAX(JI) &
@@ -359,13 +354,12 @@ END SELECT
 #endif
           ZHLC_HRCLOCAL(JI)=(ZHLC_RCMAX(JI) + 3.0*ZRCRAUTC(JI))/4.0
         END IF
-      END DO
+      !$mnh_end_do()
 !$acc end kernels
     !ELSE IF(HSUBG_PR_PDF=='HLCISOTRIPDF') THEN
     ELSE IF (IHSUBG_PR_PDF==4) THEN
 !$acc kernels present( GWORK, GWORK2 )
-!$acc loop independent
-      DO CONCURRENT( JI = 1 : ISIZE )
+      !$mnh_do_concurrent( JI = 1 : ISIZE )
         IF ( GWORK(JI) ) THEN
           IF ( PRCT(JI) <= ZRCRAUTC(JI)*PCF(JI) ) THEN
 #ifndef MNH_BITREP
@@ -395,15 +389,14 @@ END SELECT
 #endif
           END IF
         END IF
-      END DO
+      !$mnh_end_do()
 !$acc end kernels
     END IF
 !$acc kernels present( GWORK, GWORK2 )
     ! Compare r_cM  to r_cR to know if cloud water content is high enough to split in two parts or not
-!$acc loop independent
-    DO CONCURRENT( JI = 1 : ISIZE )
+    !$mnh_do_concurrent( JI = 1 : ISIZE )
       GWORK2(JI) = PRCT(JI)>0. .AND. PCF(JI)>0. .AND. ZHLC_RCMAX(JI)<=ZRCRAUTC(JI)
-    END DO
+    !$mnh_end_do()
     WHERE(GWORK(:))
       ! Calculate final values for LCF and HCF:
       PHLC_LCF(:)=PCF(:) &
diff --git a/src/MNH/ice4_fast_rg.f90 b/src/MNH/ice4_fast_rg.f90
index 0e2e92deb..67eb2a2e3 100644
--- a/src/MNH/ice4_fast_rg.f90
+++ b/src/MNH/ice4_fast_rg.f90
@@ -188,10 +188,7 @@ REAL,    DIMENSION(:), POINTER, CONTIGUOUS :: ZZW,         &
 !
 !-------------------------------------------------------------------------------
 !
-!$acc data present(PCOMPUTE,PRHODREF,PLVFACT,PLSFACT,PPRES,PDV,PKA,PCJ,PCIT,PLBDAR,PLBDAS,PLBDAG,  &
-!$acc&                PT,PRVT,PRCT,PRRT,PRIT,PRST,PRGT,PRGSI,PRGSI_MR,PWETG,PRICFRRG,PRRCFRIG,PRICFRR,PRCWETG,PRIWETG, &
-!$acc&                PRRWETG,PRSWETG,PRCDRYG,PRIDRYG,PRRDRYG,PRSDRYG,PRWETGH,PRWETGH_MR,PRGMLTR,PRG_TEND,              &
-!$acc&                PA_TH,PA_RC,PA_RR,PA_RI,PA_RS,PA_RG,PA_RH,PB_RG,PB_RH)
+
 
 IF (MPPDB_INITIALIZED) THEN
   !Check all IN arrays
@@ -270,9 +267,13 @@ CALL MNH_MEM_GET( zrdryg_init, isize )
 CALL MNH_MEM_GET( zrwetg_init, isize )
 #endif
 
-!$acc data create ( IGDRY ) &
-!$acc&     present( I1, IVEC1, IVEC2, GDRY, ZDRY, ZDRYG, ZMASK, ZVEC1, ZVEC2, ZVEC3, ZZW, ZRDRYG_INIT, ZRWETG_INIT ) &
-!$acc&     copyin ( XRTMIN )
+!$acc data present(PCOMPUTE,PRHODREF,PLVFACT,PLSFACT,PPRES,PDV,PKA,PCJ,PCIT,PLBDAR,PLBDAS,PLBDAG,  &
+!$acc &                PT,PRVT,PRCT,PRRT,PRIT,PRST,PRGT,PRGSI,PRGSI_MR,PWETG,PRICFRRG,PRRCFRIG,PRICFRR,PRCWETG,PRIWETG, &
+!$acc &                PRRWETG,PRSWETG,PRCDRYG,PRIDRYG,PRRDRYG,PRSDRYG,PRWETGH,PRWETGH_MR,PRGMLTR,PRG_TEND,              &
+!$acc &                PA_TH,PA_RC,PA_RR,PA_RI,PA_RS,PA_RG,PA_RH,PB_RG,PB_RH) &
+!$acc &     create ( IGDRY ) &
+!$acc &     present( I1, IVEC1, IVEC2, GDRY, ZDRY, ZDRYG, ZMASK, ZVEC1, ZVEC2, ZVEC3, ZZW, ZRDRYG_INIT, ZRWETG_INIT ) &
+!$acc &     copyin ( XRTMIN )
 
 !
 !*       6.1    rain contact freezing
@@ -395,9 +396,9 @@ ELSE
 ENDIF
 
 
-! !$acc end kernels
+!  !acc end kernels
 ! call mppdb_check(PRG_TEND,"ICE4_FAST_RG:PRG_TEND 02")
-! !$acc kernels
+!  !acc kernels
 
 
 
@@ -405,7 +406,7 @@ ENDIF
 IGDRY = 0
 !$acc end kernels
 !$acc parallel loop private(idx) copy(IGDRY) independent
-DO CONCURRENT( JJ = 1 : SIZE( GDRY ) )
+DO JJ = 1 , SIZE( GDRY ) 
   ZDRY(JJ)=MAX(0., -SIGN(1., XRTMIN(5)-PRST(JJ))) * & ! WHERE(PRST(:)>XRTMIN(5))
           &MAX(0., -SIGN(1., XRTMIN(6)-PRGT(JJ))) * & ! WHERE(PRGT(:)>XRTMIN(6))
           &PCOMPUTE(JJ)
@@ -420,7 +421,7 @@ DO CONCURRENT( JJ = 1 : SIZE( GDRY ) )
     GDRY(JJ) = .FALSE.
   END IF
 END DO
-! !$acc kernels
+! ! acc end kernels
 IF(LDSOFT) THEN
 !$acc kernels
   DO JL=1, ISIZE
@@ -434,7 +435,7 @@ ELSE
   PRG_TEND(:, IRSWETG)=0.
 !$acc end kernels
 
-!$acc update self( IGDRY )
+!$acc update host( IGDRY )
   IF(IGDRY>0)THEN
 !$acc kernels
     !
@@ -450,8 +451,7 @@ ELSE
     !               in the geometrical set of (Lbda_g,Lbda_s) couplet use to
     !               tabulate the SDRYG-kernel
     !
-!$acc loop independent
-    DO CONCURRENT( JJ = 1 : IGDRY )
+    !$mnh_do_concurrent( JJ = 1 : IGDRY )
       ZVEC1(JJ) = MAX( 1.00001, MIN( REAL( NDRYLBDAG ) - 0.00001,           &
 #ifndef MNH_BITREP
                             XDRYINTP1G * LOG( ZVEC1(JJ) ) + XDRYINTP2G ) )
@@ -469,7 +469,7 @@ ELSE
 #endif
       IVEC2(JJ) = INT( ZVEC2(JJ) )
       ZVEC2(JJ) = ZVEC2(JJ) - REAL( IVEC2(JJ) )
-    END DO
+    !$mnh_end_do()
     !
     !*       6.2.5  perform the bilinear interpolation of the normalized
     !               SDRYG-kernel
@@ -519,7 +519,7 @@ ENDIF
 !
 IGDRY = 0
 !$acc parallel loop private(idx) copy(IGDRY) independent
-DO CONCURRENT( JJ = 1 : SIZE( GDRY ) )
+DO JJ = 1 , SIZE( GDRY ) 
   ZDRY(JJ)=MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JJ))) * & ! WHERE(PRRT(:)>XRTMIN(3))
           &MAX(0., -SIGN(1., XRTMIN(6)-PRGT(JJ))) * & ! WHERE(PRGT(:)>XRTMIN(6))
           &PCOMPUTE(JJ)
@@ -545,14 +545,14 @@ ELSE
 !$acc kernels
   PRG_TEND(:, IRRDRYG)=0.
 !$acc end kernels
-!$acc update self( IGDRY )
+! acc update host( IGDRY )
   !
-!$acc kernels
   IF(IGDRY>0) THEN
+    !$acc kernels
     !
     !*       6.2.8  select the (PLBDAG,PLBDAR) couplet
     !
-!$acc loop independent
+    !$acc loop independent
     DO JJ = 1, IGDRY
       ZVEC1(JJ) = PLBDAG(I1(JJ))
       ZVEC2(JJ) = PLBDAR(I1(JJ))
@@ -562,7 +562,7 @@ ELSE
     !               in the geometrical set of (Lbda_g,Lbda_r) couplet use to
     !               tabulate the RDRYG-kernel
     !
-!$acc loop independent
+    !$acc loop independent
     DO JJ = 1, IGDRY
       ZVEC1(JJ) = MAX( 1.00001, MIN( REAL( NDRYLBDAG ) - 0.00001,           &
 #ifndef MNH_BITREP
@@ -586,7 +586,7 @@ ELSE
     !*       6.2.10 perform the bilinear interpolation of the normalized
     !               RDRYG-kernel
     !
-!$acc loop independent
+    !$acc loop independent
     DO JJ=1, IGDRY
       ZVEC3(JJ)= (  XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
                     - XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
@@ -596,11 +596,12 @@ ELSE
                                                          *(ZVEC1(JJ) - 1.0)
     END DO
     ZZW(:) = 0.
-!$acc loop independent
+    !$acc loop independent
     DO JJ = 1, IGDRY
       ZZW(I1(JJ)) = ZVEC3(JJ)
     END DO
     !
+    !$mnh_expand_where(JJ=1:IGDRY)
     WHERE(GDRY(:))
 #ifndef MNH_BITREP
       PRG_TEND(:, IRRDRYG) = XFRDRYG*ZZW(:)                    & ! RRDRYG
@@ -617,12 +618,12 @@ ELSE
                        XLBRDRYG2/( PLBDAG(:)   * PLBDAR(:)   )    + &
                        XLBRDRYG3/               BR_P2(PLBDAR(:))  )
 #endif
-    END WHERE
+   END WHERE
+   !$mnh_end_expand_where()
+   !$acc end kernels
   ENDIF
-!$acc end kernels
 ENDIF
 !$acc kernels
-
 DO JL=1, ISIZE
   ZRDRYG_INIT(JL)=PRG_TEND(JL, IRCDRYG)+PRG_TEND(JL, IRIDRYG)+ &
                  &PRG_TEND(JL, IRSDRYG)+PRG_TEND(JL, IRRDRYG)
@@ -854,6 +855,5 @@ deallocate( i1          )
 CALL MNH_MEM_RELEASE()
 #endif
 
-!$acc end data
 
 END SUBROUTINE ICE4_FAST_RG
diff --git a/src/MNH/ice4_fast_rs.f90 b/src/MNH/ice4_fast_rs.f90
index 4fb4434d6..3b7056e62 100644
--- a/src/MNH/ice4_fast_rs.f90
+++ b/src/MNH/ice4_fast_rs.f90
@@ -292,7 +292,7 @@ ENDDO
 !
 IGRIM = 0
 !$acc parallel loop private(idx) copy(IGRIM) independent present_cr( I1, GRIM, PCOMPUTE, PRCT, PRST, XRTMIN, ZRIM )
-DO CONCURRENT( JJ = 1 : SIZE( GRIM ) )
+DO JJ = 1 , SIZE( GRIM ) 
   ZRIM(JJ)=MAX(0., -SIGN(1., XRTMIN(2)-PRCT(JJ))) * & !WHERE(PRCT(:)>XRTMIN(2))
           &MAX(0., -SIGN(1., XRTMIN(5)-PRST(JJ))) * & !WHERE(PRST(:)>XRTMIN(5))
           &PCOMPUTE(JJ)
@@ -328,8 +328,7 @@ ELSE
     !        5.1.1  select the PLBDAS
     !
 !$acc kernels copyin( CSNOWRIMING )
-!$acc loop independent
-    DO CONCURRENT( JJ = 1 : IGRIM )
+    !$mnh_do_concurrent( JJ = 1 : IGRIM )
       ZVEC1(JJ) = PLBDAS(I1(JJ))
     !
     !        5.1.2  find the next lower indice for the PLBDAS in the geometrical
@@ -350,7 +349,7 @@ ELSE
       !
       ZVEC1(JJ) =   XGAMINC_RIM1( IVEC2(JJ)+1 )* ZVEC2(JJ)      &
                   - XGAMINC_RIM1( IVEC2(JJ)   )*(ZVEC2(JJ) - 1.0)
-    END DO
+    !$mnh_end_do()
 !$acc end kernels
 !$acc kernels
     ZZW(:) = 0.
@@ -361,7 +360,7 @@ ELSE
     !
     !        5.1.4  riming of the small sized aggregates
     !
-    DO CONCURRENT( JJ = 1 : ISIZE )
+    !$mnh_do_concurrent( JJ = 1 : ISIZE )
       IF ( GRIM(JJ) ) THEN
         PRS_TEND(JJ, IRCRIMSS) = XCRIMSS * ZZW(JJ) * PRCT(JJ)                & ! RCRIMSS
 #ifndef MNH_BITREP
@@ -372,7 +371,7 @@ ELSE
                                          * BR_POW(PRHODREF(JJ),-XCEXVT)
 #endif
       END IF
-    END DO
+    !$mnh_end_do()
     !
     !        5.1.5  perform the linear interpolation of the normalized
     !               "XBS"-moment of the incomplete gamma function (XGAMINC_RIM2) and
@@ -397,8 +396,7 @@ ELSE
     !        5.1.6  riming-conversion of the large sized aggregates into graupeln
     !
     !
-!$acc loop independent
-    DO CONCURRENT( JJ = 1 : ISIZE )
+    !$mnh_do_concurrent( JJ = 1 : ISIZE )
       IF ( GRIM(JJ) ) THEN
         PRS_TEND(JJ, IRCRIMS)=XCRIMSG * PRCT(JJ)               & ! RCRIMS
 #ifndef MNH_BITREP
@@ -410,7 +408,7 @@ ELSE
 #endif
         ZZW6(JJ) = PRS_TEND(JJ, IRCRIMS) - PRS_TEND(JJ, IRCRIMSS) ! RCRIMSG
       END IF
-    END DO
+    !$mnh_end_do()
 
     IF(CSNOWRIMING=='M90 ')THEN
       !Murakami 1990
@@ -466,7 +464,7 @@ ENDDO
 !
 IGACC = 0
 !$acc parallel loop private(idx) copy(IGACC) independent present_cr( I1, GACC, PCOMPUTE, PRRT, PRST, XRTMIN, ZACC )
-DO CONCURRENT( JJ = 1 : SIZE( GACC ) )
+DO JJ = 1 , SIZE( GACC ) 
   ZACC(JJ)=MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JJ))) * & !WHERE(PRRT(:)>XRTMIN(3))
           &MAX(0., -SIGN(1., XRTMIN(5)-PRST(JJ))) * & !WHERE(PRST(:)>XRTMIN(5))
           &PCOMPUTE(JJ)
@@ -511,8 +509,7 @@ ELSE
     !               in the geometrical set of (Lbda_s,Lbda_r) couplet use to
     !               tabulate the RACCSS-kernel
     !
-!$acc loop independent
-    DO CONCURRENT( JJ = 1 : IGACC )
+    !$mnh_do_concurrent( JJ = 1 : IGACC )
       ZVEC1(JJ) = MAX( 1.00001, MIN( REAL(NACCLBDAS)-0.00001,           &
 #ifndef MNH_BITREP
                           XACCINTP1S * LOG( ZVEC1(JJ) ) + XACCINTP2S ) )
@@ -530,7 +527,7 @@ ELSE
 #endif
       IVEC2(JJ) = INT( ZVEC2(JJ) )
       ZVEC2(JJ) = ZVEC2(JJ) - REAL( IVEC2(JJ) )
-    END DO
+    !$mnh_end_do()
     !
     !        5.2.3  perform the bilinear interpolation of the normalized
     !               RACCSS-kernel
diff --git a/src/MNH/ice4_nucleation.f90 b/src/MNH/ice4_nucleation.f90
index 75c76b335..e4630fa29 100644
--- a/src/MNH/ice4_nucleation.f90
+++ b/src/MNH/ice4_nucleation.f90
@@ -151,8 +151,7 @@ IF(.NOT. ODSOFT) THEN
   ZSSI(:)=0.
   ZUSW(:)=0.
   ZZW(:)=0.
-!$acc loop independent
-  DO CONCURRENT( JI = 1 : size( odcompute ) )
+  !$mnh_do_concurrent( JI = 1 : size( odcompute ) )
     IF ( GNEGT(ji) ) THEN
 #ifndef MNH_BITREP
       ZZW(JI)=ALOG(PT(JI))
@@ -164,9 +163,8 @@ IF(.NOT. ODSOFT) THEN
       ZZW(JI)  = BR_EXP(XALPI - XBETAI/PT(JI) - XGAMI*ZZW(JI))          ! es_i
 #endif
     END IF
-  END DO
-!$acc loop independent
-  DO CONCURRENT( JI = 1 : size( odcompute ) )
+  !$mnh_end_do()
+  !$mnh_do_concurrent( JI = 1 : size( odcompute ) )
     IF ( GNEGT(ji) ) THEN
       ZZW(JI)=MIN(PPABST(JI)/2., ZZW(JI))             ! safety limitation
       ZSSI(JI)=PRVT(JI)*(PPABST(JI)-ZZW(JI)) / (XEPSILO*ZZW(JI)) - 1.0
@@ -181,13 +179,12 @@ IF(.NOT. ODSOFT) THEN
       !
       ZSSI(JI)=MIN(ZSSI(JI), ZUSW(JI)) ! limitation of SSi according to SSw=0
     END IF
-  END DO
+  !$mnh_end_do()
   ZZW(:)=0.
-!$acc loop independent
-  DO CONCURRENT( JI = 1 : size( odcompute ) )
+  !$mnh_do_concurrent( JI = 1 : size( odcompute ) )
     GWORK(JI)  = GNEGT(JI) .AND. PT(JI)<XTT-5.0  .AND. ZSSI(JI)>0.0
     GWORK2(JI) = GNEGT(JI) .AND. PT(JI)<=XTT-2.0 .AND. PT(JI)>=XTT-5.0 .AND. ZSSI(JI)>0.0
-  END DO
+  !$mnh_end_do()
 #ifndef MNH_BITREP
 #ifndef MNH_OPENACC
   WHERE(GWORK(:))
@@ -227,11 +224,10 @@ IF(.NOT. ODSOFT) THEN
   END DO
 #endif
 #endif
-!$acc loop independent
-  DO CONCURRENT( JI = 1 : size( odcompute ) )
+  !$mnh_do_concurrent( JI = 1 : size( odcompute ) )
     ZZW(JI)=ZZW(JI)-PCIT(JI)
     ZZW(JI)=MIN(ZZW(JI), 50.E3) ! limitation provisoire a 50 l^-1
-  END DO
+  !$mnh_end_do()
   WHERE(GNEGT(:))
     !
     !*       3.1.2   update the r_i and r_v mixing ratios
@@ -241,8 +237,7 @@ IF(.NOT. ODSOFT) THEN
   END WHERE
   !Limitation due to 0 crossing of temperature
   IF(LFEEDBACKT) THEN
-!$acc loop independent
-    DO CONCURRENT( JI = 1 : size( odcompute ) )
+    !$mnh_do_concurrent( JI = 1 : size( odcompute ) )
       IF ( GNEGT(JI) ) THEN
         ZW(JI)=MIN(PRVHENI_MR(JI), &
                    MAX(0., (XTT/PEXN(JI)-PTHT(JI))/PLSFACT(JI))) / &
@@ -250,7 +245,7 @@ IF(.NOT. ODSOFT) THEN
       ELSE
         ZW(JI) = 0.
       END IF
-    END DO
+    !$mnh_end_do()
   ELSE
     ZW(:)=1.
   ENDIF
diff --git a/src/MNH/ice4_rsrimcg_old.f90 b/src/MNH/ice4_rsrimcg_old.f90
index 8abfaed13..d72de99e3 100644
--- a/src/MNH/ice4_rsrimcg_old.f90
+++ b/src/MNH/ice4_rsrimcg_old.f90
@@ -162,8 +162,7 @@ IF(.NOT. ODSOFT) THEN
     !
     !        5.1.1  select the PLBDAS
     !
-    !$acc loop independent
-    DO CONCURRENT( JL = 1 : IGRIM )
+    !$mnh_do_concurrent( JL = 1 : IGRIM )
       ZVEC1(JL) = PLBDAS(IVEC1(JL))
       !
       !        5.1.2  find the next lower indice for the PLBDAS in the geometrical
@@ -185,21 +184,18 @@ IF(.NOT. ODSOFT) THEN
       !
       ZVEC1(JL) =  XGAMINC_RIM2( IVEC2(JL)+1 )* ZVEC2(JL)      &
                       - XGAMINC_RIM2( IVEC2(JL)   )*(ZVEC2(JL) - 1.0)
-    END DO
-    !$acc loop independent
-    DO CONCURRENT( JL = 1 : size( prhodref ) )
+    !$mnh_end_do()
+    !$mnh_do_concurrent( JL = 1 : size( prhodref ) )
       ZZW(JL) = 0.
-    END DO
-    !$acc loop independent
-    DO CONCURRENT( JL = 1 : IGRIM )
+    !$mnh_end_do()
+    !$mnh_do_concurrent( JL = 1 : IGRIM )
       ZZW(IVEC1(JL)) = ZVEC1(JL)
-    END DO
+    !$mnh_end_do()
     !
     !        5.1.6  riming-conversion of the large sized aggregates into graupeln
     !
     !
-    !$acc loop independent
-    DO CONCURRENT( JL = 1 : size( prhodref ) )
+    !$mnh_do_concurrent( JL = 1 : size( prhodref ) )
       IF ( GRIM(JL) ) THEN
 #ifndef MNH_BITREP
         PRSRIMCG_MR(:) = XSRIMCG * PLBDAS(:)**XEXSRIMCG   & ! RSRIMCG
@@ -209,7 +205,7 @@ IF(.NOT. ODSOFT) THEN
                                  * (1.0 - ZZW(:) )/PRHODREF(:)
         PRSRIMCG_MR(:)=MIN(PRST(:), PRSRIMCG_MR(:))
       END IF
-    END DO
+    !$mnh_end_do()
  !$acc end kernels
  END IF ! IGRIM
 ENDIF ! ODSOFT
diff --git a/src/MNH/ice4_sedimentation_split.f90 b/src/MNH/ice4_sedimentation_split.f90
index 5d15c772c..c8b634e3c 100644
--- a/src/MNH/ice4_sedimentation_split.f90
+++ b/src/MNH/ice4_sedimentation_split.f90
@@ -173,8 +173,8 @@ REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZCONC3D, & !  droplet condensatio
 #endif
 !-------------------------------------------------------------------------------
 
-!$acc data present( PDZZ, PRHODREF, PPABST, PTHT, PRHODJ, PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT,                 &
-!$acc&              PINPRC, PINDEP, PINPRR, PINPRI, PINPRS, PINPRG, PSEA, PTOWN, PINPRH, PRHT, PRHS, PFPR )
+!$acc data present(PDZZ,PRHODREF,PPABST,PTHT,PRHODJ,PRCS,PRCT,PRRS,PRRT,PRIS,PRIT,PRSS,PRST,PRGS,PRGT, &
+!$acc &            PINPRC,PINDEP,PINPRR,PINPRI,PINPRS,PINPRG,PSEA,PTOWN,PINPRH,PRHT,PRHS,PFPR )
 
 IF (MPPDB_INITIALIZED) THEN
   !Check all IN arrays
@@ -310,8 +310,7 @@ IF (OSEDIC) THEN
 !$acc end kernels
 #else
 !$acc kernels present_cr( PSEA, PTOWN, ZCONC3D, ZFSEDC, ZLBC, ZRAY )
-!$acc loop independent
-    DO CONCURRENT( JI = 1 : KIT, JJ = 1 : KJT, JK = KKTB : KKTE )
+    !$mnh_do_concurrent( JI = 1 : KIT, JJ = 1 : KJT, JK = KKTB : KKTE )
       ZLBC(JI,JJ,JK)   = PSEA(JI,JJ)*XLBC(2)+(1.-PSEA(JI,JJ))*XLBC(1)
       ZFSEDC(JI,JJ,JK) = (PSEA(JI,JJ)*XFSEDC(2)+(1.-PSEA(JI,JJ))*XFSEDC(1))
       ZFSEDC(JI,JJ,JK) = MAX(MIN(XFSEDC(1),XFSEDC(2)),ZFSEDC(JI,JJ,JK))
@@ -319,7 +318,7 @@ IF (OSEDIC) THEN
       ZRAY(JI,JJ,JK)   = 0.5*((1.-PSEA(JI,JJ))*GAMMA(XNUC+1.0/XALPHAC)/(GAMMA(XNUC)) + &
               PSEA(JI,JJ)*GAMMA(XNUC2+1.0/XALPHAC2)/(GAMMA(XNUC2)))
 
-    END DO
+    !$mnh_end_do()
 !$acc end kernels
 #endif
   ELSE
@@ -765,14 +764,11 @@ DO WHILE (ANY(ZREMAINT>0.))
 !$acc end kernels
 !$acc kernels
   DO JK = KKTB , KKTE
-#ifdef MNH_COMPILER_NVHPC
-!$acc loop independent collapse(2)
-#endif
-    DO CONCURRENT( JI = 1 : KIT, JJ = 1 : KJT )
+    !$mnh_do_concurrent( JI = 1 : KIT, JJ = 1 : KJT )
       ZMRCHANGE(JI,JJ) = ZMAX_TSTEP(JI,JJ) * POORHODZ(JI,JJ,JK)*(ZWSED(JI,JJ,JK+KKL)-ZWSED(JI,JJ,JK))
       PRXT(JI,JJ,JK) = PRXT(JI,JJ,JK) + ZMRCHANGE(JI,JJ) + PPRXS(JI,JJ,JK) * ZMAX_TSTEP(JI,JJ)
       PRXS(JI,JJ,JK) = PRXS(JI,JJ,JK) + ZMRCHANGE(JI,JJ) * ZINVTSTEP
-    END DO
+    !$mnh_end_do()
   ENDDO
 !$acc end kernels
 !$acc kernels
diff --git a/src/MNH/ice4_tendencies.f90 b/src/MNH/ice4_tendencies.f90
index 6593e4bc0..8ee10ef63 100644
--- a/src/MNH/ice4_tendencies.f90
+++ b/src/MNH/ice4_tendencies.f90
@@ -480,8 +480,7 @@ PB_RS(:)=0.
 PB_RG(:)=0.
 PB_RH(:)=0.
 !
-!$acc loop independent
-DO CONCURRENT ( JL = 1 : ISIZE )
+!$mnh_do_concurrent ( JL = 1 : ISIZE )
   ZRVT(JL)=PRVT(JL)
   ZRCT(JL)=PRCT(JL)
   ZRRT(JL)=PRRT(JL)
@@ -491,7 +490,7 @@ DO CONCURRENT ( JL = 1 : ISIZE )
   ZTHT(JL)=PTHT(JL)
   ZRHT(JL)=PRHT(JL)
   ZT(JL)=PT(JL)
-ENDDO
+!$mnh_end_do()
 !$acc end kernels
 IF(ODSOFT) THEN
 !$acc kernels
@@ -513,13 +512,12 @@ ELSE
                        ZRVT, &
                        PCIT, PRVHENI_MR, PB_TH, PB_RV, PB_RI)
 !$acc kernels
-!$acc loop independent
-  DO CONCURRENT ( JL = 1 : ISIZE )
+  !$mnh_do_concurrent ( JL = 1 : ISIZE )
     ZRIT(JL)=ZRIT(JL) + PRVHENI_MR(JL)
     ZRVT(JL)=ZRVT(JL) - PRVHENI_MR(JL)
     ZTHT(JL)=ZTHT(JL) + PRVHENI_MR(JL)*PLSFACT(JL)
     ZT(JL) = ZTHT(JL) * PEXN(JL)
-  ENDDO
+  !$mnh_end_do()
 !$acc end kernels
   !
   !*       3.3     compute the spontaneous freezing source: RRHONG
@@ -530,13 +528,12 @@ ELSE
                   &ZTHT, &
                   &PRRHONG_MR, PB_TH, PB_RR, PB_RG)
 !$acc kernels
-!$acc loop independent
-  DO CONCURRENT ( JL = 1 : ISIZE )
+  !$mnh_do_concurrent ( JL = 1 : ISIZE )
     ZRGT(JL) = ZRGT(JL) + PRRHONG_MR(JL)
     ZRRT(JL) = ZRRT(JL) - PRRHONG_MR(JL)
     ZTHT(JL) = ZTHT(JL) + PRRHONG_MR(JL)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(RRHONG))
     ZT(JL) = ZTHT(JL) * PEXN(JL)
-  ENDDO
+  !$mnh_end_do()
 !$acc end kernels
   !
   !*       7.1    cloud ice melting
@@ -547,21 +544,19 @@ ELSE
                   &ZTHT, ZRIT, &
                   &PRIMLTC_MR, PB_TH, PB_RC, PB_RI)
 !$acc kernels
-!$acc loop independent
-  DO CONCURRENT ( JL = 1 : ISIZE )
+  !$mnh_do_concurrent ( JL = 1 : ISIZE )
     ZRCT(JL) = ZRCT(JL) + PRIMLTC_MR(JL)
     ZRIT(JL) = ZRIT(JL) - PRIMLTC_MR(JL)
     ZTHT(JL) = ZTHT(JL) - PRIMLTC_MR(JL)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(-RIMLTC))
     ZT(JL) = ZTHT(JL) * PEXN(JL)
-  ENDDO
+  !$mnh_end_do()
 !$acc end kernels
   !
   !        5.1.6  riming-conversion of the large sized aggregates into graupel (old parametrisation)
   !
   IF(CSNOWRIMING=='OLD ') THEN
 !$acc kernels
-!$acc loop independent
-    DO CONCURRENT ( JL = 1 : ISIZE )
+    !$mnh_do_concurrent ( JL = 1 : ISIZE )
       IF ( ZRST(JL) > 0. ) THEN
 #ifndef MNH_BITREP
         ZLBDAS(JL)  = MIN(XLBDAS_MAX, XLBS*(PRHODREF(JL)*MAX(ZRST(JL), XRTMIN(5)))**XLBEXS)
@@ -571,7 +566,7 @@ ELSE
       ELSE
         ZLBDAS(JL) = 0.
       END IF
-    END DO
+    !$mnh_end_do()
 !$acc end kernels
     CALL ICE4_RSRIMCG_OLD(ODSOFT, PCOMPUTE==1., &
                          &PRHODREF, &
@@ -579,11 +574,10 @@ ELSE
                          &ZT, ZRCT, ZRST, &
                          &PRSRIMCG_MR, PB_RS, PB_RG)
 !$acc kernels
-!$acc loop independent
-    DO CONCURRENT ( JL = 1 : ISIZE )
+    !$mnh_do_concurrent ( JL = 1 : ISIZE )
       ZRST(JL) = ZRST(JL) - PRSRIMCG_MR(JL)
       ZRGT(JL) = ZRGT(JL) + PRSRIMCG_MR(JL)
-    ENDDO
+    !$mnh_end_do()
 !$acc end kernels
   ELSE
 !$acc kernels
@@ -686,8 +680,7 @@ IF(ISIZE>0) THEN
   !*  compute the slope parameters
   !
 !$acc kernels
-!$acc loop independent
-  DO CONCURRENT ( JL = 1 : ISIZE )
+  !$mnh_do_concurrent ( JL = 1 : ISIZE )
     IF ( ZRST(JL) > 0. ) THEN
 #ifndef MNH_BITREP
       ZLBDAS(JL)  = MIN(XLBDAS_MAX, XLBS*(PRHODREF(JL)*MAX(ZRST(JL), XRTMIN(5)))**XLBEXS)
@@ -697,9 +690,8 @@ IF(ISIZE>0) THEN
     ELSE
       ZLBDAS(JL) = 0.
     END IF
-  END DO
-!$acc loop independent
-  DO CONCURRENT ( JL = 1 : ISIZE )
+  !$mnh_end_do()
+  !$mnh_do_concurrent ( JL = 1 : ISIZE )
     IF ( ZRGT(JL) > 0. ) THEN
 #ifndef MNH_BITREP
       ZLBDAG(JL)  = XLBG*(PRHODREF(JL)*MAX(ZRGT(JL), XRTMIN(6)))**XLBEXG
@@ -709,10 +701,9 @@ IF(ISIZE>0) THEN
     ELSE
       ZLBDAG(JL) = 0.
     END IF
-  END DO
+  !$mnh_end_do()
   !ZLBDAR will be used when we consider rain diluted over the grid box
-!$acc loop independent
-  DO CONCURRENT ( JL = 1 : ISIZE )
+  !$mnh_do_concurrent ( JL = 1 : ISIZE )
     IF ( ZRRT(JL) > 0. ) THEN
 #ifndef MNH_BITREP
       ZLBDAR(JL)  = XLBR*( PRHODREF(JL)*MAX( ZRRT(JL), XRTMIN(3)))**XLBEXR
@@ -722,14 +713,13 @@ IF(ISIZE>0) THEN
     ELSE
       ZLBDAR(JL) = 0.
     END IF
-  END DO
+  !$mnh_end_do()
 !$acc end kernels
   !ZLBDAR_RF is used when we consider rain concentrated in its fraction
   IF (HSUBG_RC_RR_ACCR=='PRFR' .OR. HSUBG_RR_EVAP=='PRFR') THEN
 !PW: 20211012: kernels directive inside IF to prevent crash with nvhpc 21.9
 !$acc kernels
-!$acc loop independent
-    DO CONCURRENT( JL = 1 : ISIZE )
+    !$mnh_do_concurrent( JL = 1 : ISIZE )
       IF ( ZRRT(JL) >0. .AND. ZRF(JL) > 0. ) THEN
 #ifndef MNH_BITREP
         ZLBDAR_RF(JL) = XLBR*( PRHODREF(JL) *MAX( ZRRT(JL)/ZRF(JL) , XRTMIN(3)))**XLBEXR
@@ -739,21 +729,19 @@ IF(ISIZE>0) THEN
       ELSE
         ZLBDAR_RF(JL) = 0.
       END IF
-    END DO
+    !$mnh_end_do()
 !$acc end kernels
   ELSE
 !$acc kernels
 !     ZLBDAR_RF(:) = ZLBDAR(:)
-!$acc loop independent
-    DO CONCURRENT( JL = 1 : ISIZE )
+    !$mnh_do_concurrent( JL = 1 : ISIZE )
       ZLBDAR_RF(JL) = ZLBDAR(JL)
-    END DO
+    !$mnh_end_do()
 !$acc end kernels
   ENDIF
 !$acc kernels
   IF(KRR==7) THEN
-!$acc loop independent
-    DO CONCURRENT ( JL = 1 : ISIZE )
+    !$mnh_do_concurrent ( JL = 1 : ISIZE )
       IF ( PRHT(JL) > 0. ) THEN
 #ifndef MNH_BITREP
         ZLBDAH(JL) = XLBH*(PRHODREF(JL)*MAX(PRHT(JL), XRTMIN(7)))**XLBEXH
@@ -763,7 +751,7 @@ IF(ISIZE>0) THEN
       ELSE
         ZLBDAH(JL) = 0.
       END IF
-    END DO
+    !$mnh_end_do()
   ENDIF
 !$acc end kernels
 ENDIF
@@ -827,12 +815,11 @@ CALL ICE4_FAST_RS(ODSOFT, PCOMPUTE, &
 !                  ------------------------------------------------------
 !
 !$acc kernels
-!$acc loop independent
-DO CONCURRENT ( JL = 1 : ISIZE )
+!$mnh_do_concurrent ( JL = 1 : ISIZE )
   ZRGSI(JL) = PRVDEPG(JL) + PRSMLTG(JL) + PRRACCSG(JL) + &
            & PRSACCRG(JL) + PRCRIMSG(JL) + PRSRIMCG(JL)
   ZRGSI_MR(JL) = PRRHONG_MR(JL) + PRSRIMCG_MR(JL)
-ENDDO
+!$mnh_end_do()
 !$acc end kernels
 CALL ICE4_FAST_RG(ODSOFT, PCOMPUTE, KRR, &
                  &PRHODREF, PLVFACT, PLSFACT, PPRES, &
diff --git a/src/MNH/ice4_warm.f90 b/src/MNH/ice4_warm.f90
index 486275147..e1b74ed19 100644
--- a/src/MNH/ice4_warm.f90
+++ b/src/MNH/ice4_warm.f90
@@ -270,8 +270,7 @@ ELSEIF (HSUBG_RC_RR_ACCR=='PRFR') THEN
   ! if PRF<PCF (rain is entirely falling in cloud): PRF-PHLC_HCF
   ! if PRF>PCF (rain is falling in cloud and in clear sky): PCF-PHLC_HCF
   ! => min(PCF, PRF)-PHLC_HCF
-!$acc loop independent
-  DO CONCURRENT ( JL = 1 : ISIZE )
+  !$mnh_do_concurrent ( JL = 1 : ISIZE )
     ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(2)-PRCT(JL))) * & ! PRCT(:)>XRTMIN(2)
              &MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JL))) * & ! PRRT(:)>XRTMIN(3)
              &PCOMPUTE(JL)
@@ -344,8 +343,7 @@ IF (HSUBG_RR_EVAP=='NONE') THEN
   ELSE
     PRREVAV(:) = 0.
     !Evaporation only when there's no cloud (RC must be 0)
-!$acc loop independent
-    DO CONCURRENT ( JL = 1 : ISIZE )
+    !$mnh_do_concurrent ( JL = 1 : ISIZE )
       IF ( ZMASK(Jl) == 1. ) THEN
 #ifndef MNH_BITREP
         PRREVAV(JL)  = EXP( XALPW - XBETAW/PT(JL) - XGAMW*ALOG(PT(JL) ) ) ! es_w
@@ -365,7 +363,7 @@ IF (HSUBG_RR_EVAP=='NONE') THEN
           ( X0EVAR*BR_POW(PLBDAR(JL),XEX0EVAR)+X1EVAR*PCJ(JL)*BR_POW(PLBDAR(JL),XEX1EVAR) )
 #endif
       END IF
-    END DO
+    !$mnh_end_do()
   ENDIF
 !$acc end kernels
 
@@ -391,8 +389,7 @@ IF (HSUBG_RR_EVAP=='CLFR') GHSUBG_RR_EVAP=.true.
   !Ces variables devraient être sorties de rain_ice_slow et on mettrait le calcul de T^u, T^s
   !et plusieurs versions (comme actuellement, en ciel clair, en ciel nuageux) de PKA, PDV, PCJ dans rain_ice
   !On utiliserait la bonne version suivant l'option NONE, CLFR... dans l'évaporation et ailleurs
-!$acc loop independent
-  DO CONCURRENT ( JL = 1 : ISIZE )
+  !$mnh_do_concurrent ( JL = 1 : ISIZE )
     ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JL))) * & ! PRRT(:)>XRTMIN(3)
              &MAX(0., -SIGN(1., PCF(JL)-ZZW4(JL))) * & ! ZZW4(:) > PCF(:)
              &PCOMPUTE(JL)
@@ -403,8 +400,7 @@ IF (HSUBG_RR_EVAP=='CLFR') GHSUBG_RR_EVAP=.true.
     ENDDO
   ELSE
     PRREVAV(:) = 0.
-!$acc loop independent
-    DO CONCURRENT ( JL = 1 : ISIZE )
+    !$mnh_do_concurrent ( JL = 1 : ISIZE )
       IF ( ZMASK(Jl) == 1. ) THEN
         ! outside the cloud (environment) the use of T^u (unsaturated) instead of T
         ! Bechtold et al. 1993
@@ -441,7 +437,7 @@ IF (HSUBG_RR_EVAP=='CLFR') GHSUBG_RR_EVAP=.true.
         !
         PRREVAV(JL) = PRREVAV(JL)*(ZZW4(JL)-PCF(JL))
       END IF
-    END DO
+    !$mnh_end_do()
   ENDIF
 !$acc end kernels
 
diff --git a/src/MNH/mode_prandtl.f90 b/src/MNH/mode_prandtl.f90
index e8e8bb1cb..9b4db7e1a 100644
--- a/src/MNH/mode_prandtl.f90
+++ b/src/MNH/mode_prandtl.f90
@@ -133,19 +133,19 @@ IF (LTURBDIM_3DIM) THEN
         !* 3DIM case
   IF (OUSERV) THEN
 #ifndef MNH_BITREP
-    DO CONCURRENT (JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent (JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZW1(JI,JJ,JK) = 1. + 1.5* (PREDTH1(JI,JJ,JK)+PREDR1(JI,JJ,JK)) +     &
                          ( 0.5 * (PREDTH1(JI,JJ,JK)**2+PREDR1(JI,JJ,JK)**2) &
                                 + PREDTH1(JI,JJ,JK) * PREDR1(JI,JJ,JK)      &
                          )
-    END DO
+    !$mnh_end_do()
 #else
-    DO CONCURRENT (JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent (JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZW1(JI,JJ,JK) = 1. + 1.5* (PREDTH1(JI,JJ,JK)+PREDR1(JI,JJ,JK)) +      &
                    ( 0.5 * (BR_P2(PREDTH1(JI,JJ,JK))+BR_P2(PREDR1(JI,JJ,JK)))  &
                          + PREDTH1(JI,JJ,JK) * PREDR1(JI,JJ,JK)        &
                          )
-    END DO
+    !$mnh_end_do()
 #endif    
     ZW2(:,:,:) = 0.5 * (PRED2TH3(:,:,:)-PRED2R3(:,:,:))
     PPHI3(:,:,:)= 1. -                                          &
@@ -155,15 +155,15 @@ IF (LTURBDIM_3DIM) THEN
     ) / ZW1(:,:,:)
  ELSE
 #ifndef MNH_BITREP    
-    DO CONCURRENT (JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent (JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZW1(JI,JJ,JK) = 1. + 1.5* PREDTH1(JI,JJ,JK) + &    
                     0.5* PREDTH1(JI,JJ,JK)**2
-    END DO
+    !$mnh_end_do()
 #else
-    DO CONCURRENT (JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent (JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZW1(JI,JJ,JK) = 1. + 1.5* PREDTH1(JI,JJ,JK) + &    
                     0.5* BR_P2(PREDTH1(JI,JJ,JK))
-    END DO
+    !$mnh_end_do()
 #endif
     ZW2(:,:,:) = 0.5* PRED2TH3(:,:,:)
     PPHI3(:,:,:)= 1. -                                       &
diff --git a/src/MNH/rain_ice.f90 b/src/MNH/rain_ice.f90
index 2c9d9a834..4b7923188 100644
--- a/src/MNH/rain_ice.f90
+++ b/src/MNH/rain_ice.f90
@@ -258,6 +258,11 @@ USE MODI_ICE4_RAINFR_VERT
 USE MODE_MNH_ZWORK,                    ONLY: MNH_MEM_GET, MNH_MEM_POSITION_PIN, MNH_MEM_RELEASE
 #endif
 
+#if defined(MNH_COMPILER_CCE) && defined(MNH_BITREP_OMP)
+!$mnh_undef(LOOP)
+!$mnh_undef(OPENACC)
+#endif
+
 IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
@@ -720,8 +725,7 @@ IF( IMICRO >= 0 ) THEN
 
 !
 !$acc kernels
-!$acc loop independent
-  DO CONCURRENT ( JL=1:IMICRO )
+  !$mnh_do_concurrent ( JL=1:IMICRO )
     ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL))
     ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL))
     ZRRT(JL) = PRRT(I1(JL),I2(JL),I3(JL))
@@ -746,7 +750,7 @@ IF( IMICRO >= 0 ) THEN
     ZTHLT(JL) = ZTHT(JL) - XLVTT * ZTHT(JL) / XCPD / ZZT(JL) * ZRCT(JL)
     ZPRES(JL) = PPABST(I1(JL),I2(JL),I3(JL))
     ZEXNREF(JL) = PEXNREF(I1(JL),I2(JL),I3(JL))
-  ENDDO
+  !$mnh_end_do()
   !
   IF (KRR == 7 ) THEN
 !$acc loop independent
@@ -764,26 +768,23 @@ IF( IMICRO >= 0 ) THEN
     END DO
   END IF
   !
-  !$acc loop independent
-  DO CONCURRENT ( JL=1:IMICRO )
+  !$mnh_do_concurrent ( JL=1:IMICRO )
      ZZW(JL)  = ZEXNREF(JL)*( XCPD+XCPV*ZRVT(JL)+XCL*(ZRCT(JL)+ZRRT(JL)) &
           +XCI*(ZRIT(JL)+ZRST(JL)+ZRGT(JL)) )
      ZLSFACT(JL) = (XLSTT+(XCPV-XCI)*(ZZT(JL)-XTT))/ZZW(JL) ! L_s/(Pi_ref*C_ph)
      ZLVFACT(JL) = (XLVTT+(XCPV-XCL)*(ZZT(JL)-XTT))/ZZW(JL) ! L_v/(Pi_ref*C_ph)
-  END DO
+  !$mnh_end_do()
   
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
-  !$acc loop independent
-  DO CONCURRENT ( JL=1:IMICRO )
+  !$mnh_do_concurrent ( JL=1:IMICRO )
      ZZW(JL) = EXP( XALPI - XBETAI/ZZT(JL) - XGAMI*LOG(ZZT(JL) ) )
      ZSSI(JL) = ZRVT(JL)*( ZPRES(JL)-ZZW(JL) ) / ( (XMV/XMD) * ZZW(JL) ) - 1.0
-  END DO
+  !$mnh_end_do()
 #else
-  !$acc loop independent
-  DO CONCURRENT ( JL=1:IMICRO )
+  !$mnh_do_concurrent ( JL=1:IMICRO )
      ZZW(JL) = BR_EXP( XALPI - XBETAI/ZZT(JL) - XGAMI*BR_LOG(ZZT(JL) ) )
      ZSSI(JL) = ZRVT(JL)*( ZPRES(JL)-ZZW(JL) ) / ( (XMV/XMD) * ZZW(JL) ) - 1.0
-  END DO
+  !$mnh_end_do()
 #endif
   
                                                     ! Supersaturation over ice
@@ -797,10 +798,9 @@ IF( IMICRO >= 0 ) THEN
 !
   !Cloud water split between high and low content part is done here
   !according to autoconversion option
-  !$acc loop independent
-  DO CONCURRENT ( JL=1:IMICRO )
+  !$mnh_do_concurrent ( JL=1:IMICRO )
      ZRCRAUTC(JL)   = XCRIAUTC/ZRHODREF(JL) ! Autoconversion rc threshold
-  END DO
+  !$mnh_end_do()
 !$acc end kernels
 #ifdef MNH_OPENACC
   IF (LBU_ENABLE .OR. LLES_CALL) THEN
@@ -810,8 +810,7 @@ IF( IMICRO >= 0 ) THEN
   IF (HSUBG_AUCV == 'NONE') THEN
 !$acc kernels
     !Cloud water is entirely in low or high part
-!$acc loop independent private(JL)
-    DO CONCURRENT ( JL=1:IMICRO )
+    !$mnh_do_concurrent ( JL=1:IMICRO )
       IF (ZRCT(JL) > ZRCRAUTC(JL)) THEN
         ZHLC_HCF(JL) = 1.
         ZHLC_LCF(JL) = 0.0
@@ -831,7 +830,7 @@ IF( IMICRO >= 0 ) THEN
         ZHLC_LRC(JL) = 0.0
         ZRF(JL)      = 0.
       END IF
-    END DO
+    !$mnh_end_do()
 !$acc end kernels
 
   ELSEIF (HSUBG_AUCV == 'CLFR') THEN
@@ -1042,43 +1041,39 @@ IF( IMICRO >= 0 ) THEN
 !$acc kernels
   !ZLBDAR will be used when we consider rain diluted over the grid box
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)  
-!$acc loop independent
-  DO CONCURRENT ( JL=1:IMICRO )
+  !$mnh_do_concurrent ( JL=1:IMICRO )
     IF ( ZRRT(JL)>0.0 ) THEN
       ZLBDAR(JL)  = XLBR * ( ZRHODREF(JL) * MAX( ZRRT(JL), XRTMIN(3) ) )**XLBEXR
     ELSE
       ZLBDAR(JL)  = 0.
    END IF
-  END DO ! CONCURRENT
+  !$mnh_end_do() ! CONCURRENT
 #else
-!$acc loop independent
-  DO CONCURRENT ( JL=1:IMICRO )
+  !$mnh_do_concurrent ( JL=1:IMICRO )
     IF ( ZRRT(JL)>0.0 ) THEN
       ZLBDAR(JL)  = XLBR * BR_POW( ZRHODREF(JL) * MAX( ZRRT(JL), XRTMIN(3) ), XLBEXR )
     ELSE
       ZLBDAR(JL)  = 0.
    END IF
-  END DO ! CONCURRENT
+  !$mnh_end_do() ! CONCURRENT
 #endif 
   !ZLBDAR_RF will be used when we consider rain concentrated in its fraction
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)  
-!$acc loop independent
-  DO CONCURRENT ( JL=1:IMICRO )
+  !$mnh_do_concurrent ( JL=1:IMICRO )
     IF ( ZRRT(JL)>0.0 .AND. ZRF(JL)>0.0 ) THEN
       ZLBDAR_RF(JL)  = XLBR * ( ZRHODREF(JL) * MAX( ZRRT(JL)/ZRF(JL), XRTMIN(3) ) )**XLBEXR
     ELSE
       ZLBDAR_RF(JL)  = 0.
     END IF
-  END DO ! CONCURRENT
+  !$mnh_end_do() ! CONCURRENT
 #else
-!$acc loop independent
-  DO CONCURRENT ( JL=1:IMICRO )
+  !$mnh_do_concurrent ( JL=1:IMICRO )
     IF ( ZRRT(JL)>0.0 .AND. ZRF(JL)>0.0 ) THEN
       ZLBDAR_RF(JL)  = XLBR * BR_POW( ZRHODREF(JL) * MAX( ZRRT(JL)/ZRF(JL), XRTMIN(3) ), XLBEXR )
     ELSE
       ZLBDAR_RF(JL)  = 0.
     END IF
-  END DO ! CONCURRENT
+  !$mnh_end_do() ! CONCURRENT
 #endif 
   !Not necessary but useful for verifications
   ZUSW(:) = XNEGUNDEF
diff --git a/src/MNH/rain_ice_fast_rg.f90 b/src/MNH/rain_ice_fast_rg.f90
index 14101b800..499cb5096 100644
--- a/src/MNH/rain_ice_fast_rg.f90
+++ b/src/MNH/rain_ice_fast_rg.f90
@@ -205,8 +205,7 @@ CALL MNH_MEM_GET( ZZW1,  SIZE(PRHODREF), 7 )
 !$acc end kernels
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
 !$acc parallel present_cr(ZZW1,GWORK)
-  !$acc loop independent
-  DO CONCURRENT ( JL=1:JLU )
+  !$mnh_do_concurrent ( JL=1:JLU )
     IF ( GWORK(JL) ) THEN
       ZZW1(JL,3) = MIN( PRIS(JL),XICFRR * PRIT(JL)                & ! RICFRRG
                                       * PLBDAR(JL)**XEXICFRR      &
@@ -219,12 +218,11 @@ CALL MNH_MEM_GET( ZZW1,  SIZE(PRHODREF), 7 )
       PRGS(JL) = PRGS(JL) + ZZW1(JL,3)+ZZW1(JL,4)
       PTHS(JL) = PTHS(JL) + ZZW1(JL,4)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*RRCFRIG)
     END IF
- END DO ! CONCURRENT
+  !$mnh_end_do() ! CONCURRENT
 !$acc end parallel
 #else
 !$acc parallel present_cr(ZZW1,GWORK)
-  !$acc loop independent
-  DO CONCURRENT ( JL=1:JLU )
+  !$mnh_do_concurrent ( JL=1:JLU )
     IF ( GWORK(JL) ) THEN
        ZZW1(JL,3) = MIN( PRIS(JL),XICFRR * PRIT(JL)                     & ! RICFRRG
             * BR_POW(PLBDAR(JL),XEXICFRR)  &
@@ -237,7 +235,7 @@ CALL MNH_MEM_GET( ZZW1,  SIZE(PRHODREF), 7 )
        PRGS(JL) = PRGS(JL) + ZZW1(JL,3)+ZZW1(JL,4)
        PTHS(JL) = PTHS(JL) + ZZW1(JL,4)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*RRCFRIG)
     END IF
- END DO ! CONCURRENT
+  !$mnh_end_do() ! CONCURRENT
 !$acc end parallel
 #endif 
 
@@ -383,18 +381,17 @@ END IF
 !*       6.2.5  perform the bilinear interpolation of the normalized
 !               SDRYG-kernel
 !
-    !$acc loop independent
-    DO CONCURRENT ( JJ = 1:IGDRY )
+    !$mnh_do_concurrent ( JJ = 1:IGDRY )
       ZVEC3(JJ) =  (  XKER_SDRYG(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
                     - XKER_SDRYG(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
                                                          * ZVEC1(JJ) &
                  - (  XKER_SDRYG(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
                     - XKER_SDRYG(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
                                                          * (ZVEC1(JJ) - 1.0)
-    END DO ! CONCURRENT
+    !$mnh_end_do() ! CONCURRENT
 !
-    !$acc loop independent , private (JL) 
-    DO CONCURRENT (JJ=1:IGDRY)
+    ! acc loop independent , private (JL) 
+    !$mnh_do_concurrent (JJ=1:IGDRY)
       JL = I1(JJ)
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
       ZZW1(JL,3) = MIN( PRSS(JL),XFSDRYG*ZVEC3(JJ)                           & ! RSDRYG
@@ -413,7 +410,7 @@ END IF
                            + XLBSDRYG2 / ( ZVECLBDAG(JJ)   * ZVECLBDAS(JJ) )      &
                            + XLBSDRYG3 /   BR_P2(ZVECLBDAS(JJ)) ) )
 #endif
-    END DO
+    !$mnh_end_do()
 !$acc end kernels
 IF (MPPDB_INITIALIZED) THEN
     CALL MPPDB_CHECK(ZZW1,"RAIN_ICE_FAST_RG 6.2.5:ZZW1")
@@ -507,17 +504,16 @@ END IF
 !               RDRYG-kernel
 !
 !$acc kernels ! present_cr(ZVECLBDAG,ZVECLBDAR,ZZW1)    
-    !$acc loop independent
-    DO CONCURRENT (JJ = 1:IGDRY )
+    !$mnh_do_concurrent (JJ = 1:IGDRY )
       ZVEC3(JJ) =  (  XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
                     - XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
                                                                   * ZVEC1(JJ) &
                  - (  XKER_RDRYG(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
                     - XKER_RDRYG(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
                                                          * (ZVEC1(JJ) - 1.0)
-    END DO ! CONCURRENT
-    !$acc loop independent , private (JL)
-    DO CONCURRENT (JJ=1:IGDRY)
+    !$mnh_end_do() ! CONCURRENT
+    ! acc loop independent , private (JL)
+    !$mnh_do_concurrent (JJ=1:IGDRY)
       JL = I1(JJ)
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
       ZZW1(JL,4) = MIN( PRRS(JL),XFRDRYG*ZVEC3(JJ)                  & ! RRDRYG
@@ -534,7 +530,7 @@ END IF
                       + XLBRDRYG2/( ZVECLBDAG(JJ) * ZVECLBDAR(JJ) )              &
                       + XLBRDRYG3/  BR_P2(ZVECLBDAR(JJ)) ) )
 #endif
-    END DO
+    !$mnh_end_do()
 !$acc end kernels
 IF (MPPDB_INITIALIZED) THEN
     CALL MPPDB_CHECK(ZZW1,"RAIN_ICE_FAST_RG 6.2.10:ZZW1")
@@ -565,8 +561,7 @@ END IF
 !$acc end kernels  
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
 !$acc parallel present_cr(GWORK)
-  !$acc loop independent
-  DO CONCURRENT ( JL=1:JLU )
+  !$mnh_do_concurrent ( JL=1:JLU )
     IF ( GWORK(JL) ) THEN
        ZZW1(JL,5) = MIN( PRIS(JL),                                    &
             ZZW1(JL,2) / (XCOLIG*EXP(XCOLEXIG*(PZT(JL)-XTT)) ) ) ! RIWETG
@@ -587,12 +582,11 @@ END IF
             ( PRHODREF(JL)*(XLMTT+(XCI-XCL)*(XTT-PZT(JL)))   ) ) / &
             ( PRHODREF(JL)*(XLMTT-XCL*(XTT-PZT(JL))) )   )
     END IF
-  END DO ! CONCURRENT
+  !$mnh_end_do() ! CONCURRENT
   !$acc end parallel
 #else
 !$acc parallel present_cr(GWORK)
-!$acc loop independent
-  DO CONCURRENT ( JL=1:JLU )
+  !$mnh_do_concurrent ( JL=1:JLU )
     IF ( GWORK(JL) ) THEN
        ZZW1(JL,5) = MIN( PRIS(JL),                                    &
             ZZW1(JL,2) / (XCOLIG*BR_EXP(XCOLEXIG*(PZT(JL)-XTT)) ) ) ! RIWETG
@@ -613,7 +607,7 @@ END IF
             ( PRHODREF(JL)*(XLMTT+(XCI-XCL)*(XTT-PZT(JL)))   ) ) / &
             ( PRHODREF(JL)*(XLMTT-XCL*(XTT-PZT(JL))) )   )
     END IF
-  END DO ! CONCURRENT
+  !$mnh_end_do() ! CONCURRENT
   !$acc end parallel
 #endif 
 !
@@ -621,8 +615,7 @@ END IF
 !
 !$acc kernels present_cr(GWORK)
   IF     ( KRR == 7 ) THEN
-!$acc loop independent 
-DO CONCURRENT (JL=1:JLU)     
+!$mnh_do_concurrent (JL=1:JLU)     
    GWORK(JL) = PRGT(JL)>XRTMIN(6) .AND. PZT(JL)<XTT .and. PRDRYG(JL)>=PRWETG(JL) .AND. PRWETG(JL)>0.0 ! Wet case
    IF( GWORK(JL) )THEN
      ZZW(JL) = PRWETG(JL) - ZZW1(JL,5) - ZZW1(JL,6) ! RCWETG+RRWETG
@@ -650,7 +643,7 @@ DO CONCURRENT (JL=1:JLU)
     PTHS(JL) = PTHS(JL) + ZZW1(JL,7)*(PLSFACT(JL)-PLVFACT(JL))
                                                  ! f(L_f*(RCWETG+RRWETG))
    ENDIF
-ENDDO
+!$mnh_end_do()
 ELSE IF( KRR == 6 ) THEN
  !$mnh_expand_where(JL=1:JLU)
    GWORK(:) = PRGT(:)>XRTMIN(6) .AND. PZT(:)<XTT .AND. PRDRYG(:)>=PRWETG(:) .AND. PRWETG(:)>0.0 ! Wet case
@@ -747,8 +740,7 @@ END IF
 !$acc end kernels
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
 !$acc parallel present_cr(GWORK)
-  !$acc loop independent
-  DO CONCURRENT ( JL=1:JLU )
+  !$mnh_do_concurrent ( JL=1:JLU )
     IF ( GWORK(JL) ) THEN
       ZZW(JL) = PRVT(JL)*PPRES(JL)/((XMV/XMD)+PRVT(JL)) ! Vapor pressure
       ZZW(JL) =  PKA(JL)*(XTT-PZT(JL)) +                                &
@@ -767,12 +759,11 @@ END IF
       PRGS(JL) = PRGS(JL) - ZZW(JL)
       PTHS(JL) = PTHS(JL) - ZZW(JL)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(-RGMLTR))
     END IF
-  END DO ! CONCURRENT
+  !$mnh_end_do() ! CONCURRENT
 !$acc end parallel
 #else
 !$acc parallel present_cr(GWORK)
-  !$acc loop independent
-  DO CONCURRENT ( JL=1:JLU )
+  !$mnh_do_concurrent ( JL=1:JLU )
     IF ( GWORK(JL) ) THEN
        ZZW(JL) = PRVT(JL)*PPRES(JL)/((XMV/XMD)+PRVT(JL)) ! Vapor pressure
        ZZW(JL) =  PKA(JL)*(XTT-PZT(JL)) +                                 &
@@ -791,7 +782,7 @@ END IF
        PRGS(JL) = PRGS(JL) - ZZW(JL)
        PTHS(JL) = PTHS(JL) - ZZW(JL)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(-RGMLTR))
     END IF
-  END DO ! CONCURRENT
+  !$mnh_end_do() ! CONCURRENT
 !$acc end parallel
 #endif 
 
diff --git a/src/MNH/rain_ice_fast_rs.f90 b/src/MNH/rain_ice_fast_rs.f90
index 24c30713a..20cc4e8a0 100644
--- a/src/MNH/rain_ice_fast_rs.f90
+++ b/src/MNH/rain_ice_fast_rs.f90
@@ -249,16 +249,15 @@ CALL COUNTJV_DEVICE( GWORK(:), I1(:), IGRIM )
 !        5.1.3  perform the linear interpolation of the normalized
 !               "2+XDS"-moment of the incomplete gamma function
 !
-    !$acc loop independent
-    DO CONCURRENT (JJ=1:IGRIM)
+    !$mnh_do_concurrent (JJ=1:IGRIM)
        ZVEC1(JJ) =   XGAMINC_RIM1( IVEC2(JJ)+1 )* ZVEC2(JJ)      &
                    - XGAMINC_RIM1( IVEC2(JJ)   )*(ZVEC2(JJ) - 1.0)
-    END DO ! CONCURRENT
+    !$mnh_end_do() ! CONCURRENT
 !
 !        5.1.4  riming of the small sized aggregates
 !
-    !$acc loop independent , private (JL)
-    DO CONCURRENT ( JJ = 1:IGRIM )
+    ! acc loop independent , private (JL)
+    !$mnh_do_concurrent ( JJ = 1:IGRIM )
       JL = I1(JJ)
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
       ZZW1(JJ) = MIN( PRCS(JL),                           &
@@ -274,7 +273,7 @@ CALL COUNTJV_DEVICE( GWORK(:), I1(:), IGRIM )
       PRCS(JL) = PRCS(JL) - ZZW1(JJ)
       PRSS(JL) = PRSS(JL) + ZZW1(JJ)
       PTHS(JL) = PTHS(JL) + ZZW1(JJ)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(RCRIMSS))
-   END DO ! CONCURRENT
+   !$mnh_end_do() ! CONCURRENT
    !
 !$acc end kernels   
 IF (MPPDB_INITIALIZED) THEN
@@ -288,17 +287,16 @@ END IF
 !        5.1.5  perform the linear interpolation of the normalized
 !               "XBS"-moment of the incomplete gamma function
 !
-    !$acc loop independent
-    DO CONCURRENT (JJ=1:IGRIM)
+    !$mnh_do_concurrent (JJ=1:IGRIM)
        ZVEC1(JJ) =  XGAMINC_RIM2( IVEC2(JJ)+1 )* ZVEC2(JJ)      &
                   - XGAMINC_RIM2( IVEC2(JJ)   )*(ZVEC2(JJ) - 1.0)
-    END DO ! CONCURRENT
+    !$mnh_end_do() ! CONCURRENT
 !
 !        5.1.6  riming-conversion of the large sized aggregates into graupeln
 !
     !
-    !$acc loop independent , private (JL)
-    DO CONCURRENT (JJ = 1:IGRIM )
+    ! acc loop independent , private (JL)
+    !$mnh_do_concurrent (JJ = 1:IGRIM )
       JL = I1(JJ)
       IF ( PRSS(JL) > 0.0 ) THEN
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
@@ -325,7 +323,7 @@ END IF
         PRGS(JL) = PRGS(JL) + ZZW2(JJ)+ZZW3(JJ)
         PTHS(JL) = PTHS(JL) + ZZW2(JJ)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(RCRIMSG))
       END IF
-   END DO ! CONCURRENT
+   !$mnh_end_do() ! CONCURRENT
 !$acc end kernels
 
 IF (MPPDB_INITIALIZED) THEN
@@ -449,20 +447,19 @@ END IF
 !        5.2.3  perform the bilinear interpolation of the normalized
 !               RACCSS-kernel
 !
-!$acc loop independent
-    DO CONCURRENT ( JJ = 1:IGACC )
+    !$mnh_do_concurrent ( JJ = 1:IGACC )
       ZVEC3(JJ) =  (  XKER_RACCSS(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
                     - XKER_RACCSS(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
                                                           * ZVEC1(JJ) &
                  - (  XKER_RACCSS(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
                     - XKER_RACCSS(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
                                                           * (ZVEC1(JJ) - 1.0)
-    END DO ! CONCURRENT
+    !$mnh_end_do() ! CONCURRENT
 !
 !        5.2.4  raindrop accretion on the small sized aggregates
 !
-!$acc loop independent , private (JL)
-    DO CONCURRENT ( JJ = 1:IGACC )
+! acc loop independent , private (JL)
+    !$mnh_do_concurrent ( JJ = 1:IGACC )
       JL = I1(JJ)
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
       ZZW2(JJ) =                                                          & !! coef of RRACCS
@@ -481,7 +478,7 @@ END IF
       PRRS(JL) = PRRS(JL) - ZZW4(JJ)
       PRSS(JL) = PRSS(JL) + ZZW4(JJ)
       PTHS(JL) = PTHS(JL) + ZZW4(JJ)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(RRACCSS))
-   END DO ! CONCURRENT
+   !$mnh_end_do() ! CONCURRENT
 !$acc end kernels
 IF (MPPDB_INITIALIZED) THEN
    CALL MPPDB_CHECK(ZVEC1,"RAIN_ICE_FAST_RS 5.2.4:IVEC1")
@@ -498,8 +495,7 @@ END IF
 !        5.2.4b perform the bilinear interpolation of the normalized
 !               RACCS-kernel
 !
-    !$acc loop independent
-    DO CONCURRENT (JJ = 1:IGACC )
+    !$mnh_do_concurrent (JJ = 1:IGACC )
       ZVEC3(JJ) =  (   XKER_RACCS(IVEC2(JJ)+1,IVEC1(JJ)+1)* ZVEC1(JJ)          &
                     -  XKER_RACCS(IVEC2(JJ)+1,IVEC1(JJ)  )*(ZVEC1(JJ) - 1.0) ) &
                                                                    * ZVEC2(JJ) &
@@ -507,26 +503,25 @@ END IF
                     -  XKER_RACCS(IVEC2(JJ)  ,IVEC1(JJ)  )*(ZVEC1(JJ) - 1.0) ) &
                                                            * (ZVEC2(JJ) - 1.0)
       ZZW2(JJ) = ZZW2(JJ) * ZVEC3(JJ)
-    END DO ! CONCURRENT
+    !$mnh_end_do() ! CONCURRENT
                                                                        !! RRACCS!
 !        5.2.5  perform the bilinear interpolation of the normalized
 !               SACCRG-kernel
     !
-    !$acc loop independent
-    DO CONCURRENT (JJ = 1:IGACC )
+    !$mnh_do_concurrent (JJ = 1:IGACC )
       ZVEC3(JJ) =  (  XKER_SACCRG(IVEC2(JJ)+1,IVEC1(JJ)+1)* ZVEC1(JJ)          &
                     - XKER_SACCRG(IVEC2(JJ)+1,IVEC1(JJ)  )*(ZVEC1(JJ) - 1.0) ) &
                                                           * ZVEC2(JJ) &
                  - (  XKER_SACCRG(IVEC2(JJ)  ,IVEC1(JJ)+1)* ZVEC1(JJ)          &
                     - XKER_SACCRG(IVEC2(JJ)  ,IVEC1(JJ)  )*(ZVEC1(JJ) - 1.0) ) &
                                                           * (ZVEC2(JJ) - 1.0)
-    END DO ! CONCURRENT
+    !$mnh_end_do() ! CONCURRENT
 !
 !        5.2.6  raindrop accretion-conversion of the large sized aggregates
 !               into graupeln
     !
-    !$acc loop independent , private (JL)
-    DO CONCURRENT ( JJ = 1:IGACC )
+    ! acc loop independent , private (JL)
+    !$mnh_do_concurrent ( JJ = 1:IGACC )
       JL = I1(JJ)
       IF ( PRSS(JL) > 0.0 ) THEN
         ZZW2(JJ) = MAX( MIN( PRRS(JL),ZZW2(JJ)-ZZW4(JJ) ),0.0 )       ! RRACCSG
@@ -551,7 +546,7 @@ END IF
                                 ! f(L_f*(RRACCSG))
         END IF
       END IF
-    END DO ! CONCURRENT
+    !$mnh_end_do() ! CONCURRENT
 !$acc end kernels
 
 !$acc end data
@@ -591,8 +586,7 @@ END IF
   GWORK(:) = PRST(:)>XRTMIN(5) .AND. PRSS(:)>0.0 .AND. PZT(:)>XTT
 !$acc end kernels
 !$acc parallel present_cr(GWORK,zzw)  
-  !$acc loop independent
-  DO CONCURRENT (JJ=1:JJU)
+  !$mnh_do_concurrent (JJ=1:JJU)
    IF ( GWORK(JJ) ) THEN
     ZZW(JJ) = PRVT(JJ)*PPRES(JJ)/((XMV/XMD)+PRVT(JJ)) ! Vapor pressure
     ZZW(JJ) =  PKA(JJ)*(XTT-PZT(JJ)) +                                 &
@@ -619,7 +613,7 @@ END IF
     PRSS(JJ) = PRSS(JJ) - ZZW(JJ)
     PRGS(JJ) = PRGS(JJ) + ZZW(JJ)
   END IF
- END DO ! CONCURRENT
+ !$mnh_end_do() ! CONCURRENT
 !$acc end parallel
 
   if ( lbudget_rs ) call Budget_store_add( tbudgets(NBUDGET_RS), 'CMEL', &
diff --git a/src/MNH/rain_ice_nucleation.f90 b/src/MNH/rain_ice_nucleation.f90
index dbac01ac7..f650d312d 100644
--- a/src/MNH/rain_ice_nucleation.f90
+++ b/src/MNH/rain_ice_nucleation.f90
@@ -49,6 +49,11 @@ use modi_bitrep
 USE MODE_MNH_ZWORK,       ONLY: MNH_MEM_GET, MNH_MEM_POSITION_PIN, MNH_MEM_RELEASE
 #endif
 
+#if defined(MNH_COMPILER_CCE) && defined(MNH_BITREP_OMP)
+!$mnh_undef(LOOP)
+!$mnh_undef(OPENACC)
+#endif
+
 IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
@@ -165,12 +170,9 @@ if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'HENU', pris(:,
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
 PT(:,:,:) = PTHT(:,:,:) * ( PPABST(:,:,:) / XP00 ) ** ( XRD / XCPD )
 #else
-#ifdef MNH_COMPILER_NVHPC
-!$acc loop independent collapse(3)
-#endif
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    PT(JI,JJ,JK) = PTHT(JI,JJ,JK) * BR_POW( PPABST(JI,JJ,JK) / XP00, XRD / XCPD )
-END DO
+!$mnh_end_do()
 #endif
 !
 !$acc end kernels
@@ -211,54 +213,47 @@ IF( INEGT >= 1 ) THEN
 !$acc data present( zrvt, zcit, zzt, zpres, zzw, zusw, zssi )
 
   !$acc kernels 
-  !$acc loop independent
-  DO CONCURRENT ( JL=1:INEGT )
+  !$mnh_do_concurrent ( JL=1:INEGT )
     ZRVT(JL)  = PRVT  (I1(JL),I2(JL),I3(JL))
     ZCIT(JL)  = PCIT  (I1(JL),I2(JL),I3(JL))
     ZZT(JL)   = PT    (I1(JL),I2(JL),I3(JL))
     ZPRES(JL) = PPABST(I1(JL),I2(JL),I3(JL))
-  ENDDO
+  !$mnh_end_do()
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
-  !$acc loop independent
-  DO CONCURRENT ( JL=1:INEGT )
+  !$mnh_do_concurrent ( JL=1:INEGT )
     ZZW(JL) = EXP( XALPI - XBETAI/ZZT(JL) - XGAMI*LOG(ZZT(JL) ) )      ! es_i
-  END DO
+  !$mnh_end_do()
 #else
-  !$acc loop independent
-  DO CONCURRENT ( JL=1:INEGT )
+  !$mnh_do_concurrent ( JL=1:INEGT )
     ZZW(JL) = BR_EXP( XALPI - XBETAI/ZZT(JL) - XGAMI*BR_LOG(ZZT(JL) ) )      ! es_i
-  END DO
+  !$mnh_end_do()
 #endif
-  !$acc loop independent
-  DO CONCURRENT ( JL=1:INEGT )
+  !$mnh_do_concurrent ( JL=1:INEGT )
     ZZW(JL) = MIN(ZPRES(JL)/2., ZZW(JL))             ! safety limitation
     ZSSI(JL) = ZRVT(JL)*( ZPRES(JL)-ZZW(JL) ) / ( (XMV/XMD) * ZZW(JL) ) - 1.0
                          ! Supersaturation over ice
-  END DO
+  !$mnh_end_do()
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
-  !$acc loop independent
-  DO CONCURRENT ( JL=1:INEGT )
+  !$mnh_do_concurrent ( JL=1:INEGT )
     ZUSW(JL) = EXP( XALPW - XBETAW/ZZT(JL) - XGAMW*LOG(ZZT(JL) ) )     ! es_w
     ZUSW(JL) = MIN(ZPRES(JL)/2.,ZUSW(JL))            ! safety limitation
     ZUSW(JL) = ( ZUSW(JL)/ZZW(JL) )*( (ZPRES(JL)-ZZW(JL))/(ZPRES(JL)-ZUSW(JL)) ) - 1.0
                        ! Supersaturation of saturated water vapor over ice
-  END DO
+  !$mnh_end_do()
 #else
-  !$acc loop independent
-  DO CONCURRENT ( JL=1:INEGT )
+  !$mnh_do_concurrent ( JL=1:INEGT )
     ZUSW(JL) = BR_EXP( XALPW - XBETAW/ZZT(JL) - XGAMW*BR_LOG(ZZT(JL) ) )     ! es_w
     ZUSW(JL) = MIN(ZPRES(JL)/2.,ZUSW(JL))            ! safety limitation
     ZUSW(JL) = ( ZUSW(JL)/ZZW(JL) )*( (ZPRES(JL)-ZZW(JL))/(ZPRES(JL)-ZUSW(JL)) ) - 1.0
                        ! Supersaturation of saturated water vapor over ice
-  END DO
+  !$mnh_end_do()
 #endif  
 !
 !*       3.1     compute the heterogeneous nucleation source: RVHENI
 !
 !*       3.1.1   compute the cloud ice concentration
 !
-!$acc loop independent
-DO CONCURRENT ( JL=1:INEGT )
+!$mnh_do_concurrent ( JL=1:INEGT )
   ZZW(JL) = 0.0
   ZSSI(JL) = MIN( ZSSI(JL), ZUSW(JL) ) ! limitation of SSi according to SSw=0
   IF ( (ZZT(JL)<XTT-5.0) .AND. (ZSSI(JL)>0.0) ) THEN
@@ -268,29 +263,26 @@ DO CONCURRENT ( JL=1:INEGT )
     ZZW(JL) = XNU20 * BR_EXP( XALPHA2*ZSSI(JL)-XBETA2 )
 #endif
  END IF
-END DO
+!$mnh_end_do()
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
- !$acc loop independent
- DO CONCURRENT ( JL=1:INEGT )
+ !$mnh_do_concurrent ( JL=1:INEGT )
     IF ( (ZZT(JL)<=XTT-2.0) .AND. (ZZT(JL)>=XTT-5.0) .AND. (ZSSI(JL)>0.0) ) THEN
        ZZW(JL) = MAX( XNU20 * EXP( -XBETA2 ),XNU10 * EXP( -XBETA1*(ZZT(JL)-XTT) ) * &
             ( ZSSI(JL)/ZUSW(JL) )**XALPHA1 )
     END IF
- END DO ! CONCURRENT
+ !$mnh_end_do() ! CONCURRENT
 #else
- !$acc loop independent
- DO CONCURRENT ( JL=1:INEGT )
+ !$mnh_do_concurrent ( JL=1:INEGT )
     IF ( (ZZT(JL)<=XTT-2.0) .AND. (ZZT(JL)>=XTT-5.0) .AND. (ZSSI(JL)>0.0) ) THEN
        ZZW(JL) = MAX( XNU20 * BR_EXP( -XBETA2 ),XNU10 * BR_EXP( -XBETA1*(ZZT(JL)-XTT) ) * &
             BR_POW( ZSSI(JL)/ZUSW(JL),XALPHA1 ) )
     END IF
- END DO ! CONCURRENT
+ !$mnh_end_do() ! CONCURRENT
 #endif
  ! WARNING COMPILER BUG NVHPC20.X/3 <-> if array syntaxe ZZW(1:INEGT) = ZZW(1:INEGT)
- !$acc loop independent
- DO CONCURRENT ( JL=1:INEGT )
+ !$mnh_do_concurrent ( JL=1:INEGT )
     ZZW(JL) = ZZW(JL) - ZCIT(JL)
- END DO
+ !$mnh_end_do()
 #ifndef MNH_COMPILER_NVHPC
  ZZWMAX = MAXVAL(ZZW(1:INEGT))
 !$acc end kernels
@@ -310,15 +302,13 @@ END DO
 !
 !*       3.1.2   update the r_i and r_v mixing ratios
      !
-  !$acc loop independent
-  DO CONCURRENT ( JL=1:INEGT )
+  !$mnh_do_concurrent ( JL=1:INEGT )
      ZZW(JL) = MIN( ZZW(JL),50.E3 ) ! limitation provisoire a 50 l^-1
-  END DO
+  !$mnh_end_do()
     ZW(:,:,:) = 0.0
-    !$acc loop independent
-    DO CONCURRENT ( JL=1:INEGT )
+    !$mnh_do_concurrent ( JL=1:INEGT )
       ZW(I1(JL), I2(JL), I3(JL)) = ZZW( JL )
-    END DO
+    !$mnh_end_do()
     ZW(:,:,:) = MAX( ZW(:,:,:) ,0.0 ) *XMNU0/(PRHODREF(:,:,:)*PTSTEP)
     PRIS(:,:,:) = PRIS(:,:,:) + ZW(:,:,:)
     PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:)
@@ -332,15 +322,13 @@ END DO
                    + XCI*(PRIT(:,:,:)+PRST(:,:,:)+PRGT(:,:,:)))*PEXNREF(:,:,:) )
     END IF
                                  ! f(L_s*(RVHENI))
-    !$acc loop independent
-    DO CONCURRENT ( JL=1:INEGT )
+    !$mnh_do_concurrent ( JL=1:INEGT )
        ZZW(JL) = MAX( ZZW(JL)+ZCIT(JL),ZCIT(JL) )
-    END DO
+    !$mnh_end_do()
     PCIT(:,:,:) = MAX( PCIT(:,:,:), 0.0 )
-    !$acc loop independent
-    DO CONCURRENT ( JL=1:INEGT )
+    !$mnh_do_concurrent ( JL=1:INEGT )
       PCIT(I1(JL), I2(JL), I3(JL)) = MAX( ZZW( JL ), PCIT(I1(JL), I2(JL), I3(JL)), 0.0 )
-   END DO
+   !$mnh_end_do()
   !$acc end kernels
 END IF
 
diff --git a/src/MNH/rain_ice_red.f90 b/src/MNH/rain_ice_red.f90
index c598b4c69..937ac58e8 100644
--- a/src/MNH/rain_ice_red.f90
+++ b/src/MNH/rain_ice_red.f90
@@ -686,13 +686,6 @@ REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: &
 !
 LOGICAL :: GTEST ! temporary variable for OpenACC character limitation (Cray CCE)
 
-!$acc data present( ODMICRO, PEXN, PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR, &
-!$acc &             PHLC_HRC, PTHT, PRVT,                                                 &
-!$acc &             PRCT, PHLC_HCF, PHLI_HRI, PHLI_HCF, PRRT, PRIT, PRST, PRGT, PSIGS,    &
-!$acc &             PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS,                             &
-!$acc &             PINPRC, PINDEP, PINPRR, PEVAP3D, PINPRS, PINPRG, PRAINFR,             &
-!$acc &             PSEA, PTOWN, PRHT, PRHS, PINPRH, PFPR )
-
 IF (MPPDB_INITIALIZED) THEN
   !Check all IN arrays
   CALL MPPDB_CHECK(ODMICRO,"RAIN_ICE_RED beg:ODMICRO")
@@ -731,6 +724,13 @@ IF (MPPDB_INITIALIZED) THEN
   IF (PRESENT(PRHS)) CALL MPPDB_CHECK(PRHS,"RAIN_ICE_RED beg:PRHS")
 END IF
 
+!$acc data present( ODMICRO, PEXN, PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR, &
+!$acc &             PHLC_HRC, PTHT, PRVT,                                                 &
+!$acc &             PRCT, PHLC_HCF, PHLI_HRI, PHLI_HCF, PRRT, PRIT, PRST, PRGT, PSIGS,    &
+!$acc &             PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS,                             &
+!$acc &             PINPRC, PINDEP, PINPRR, PEVAP3D, PINPRS, PINPRG, PRAINFR,             &
+!$acc &             PSEA, PTOWN, PRHT, PRHS, PINPRH, PFPR )
+
 !$acc kernels
 imicro = count(odmicro)
 !$acc end kernels
@@ -1257,7 +1257,7 @@ ELSE
     ENDDO
   ENDDO
 #else
-DO CONCURRENT( JI = 1 : KIT, JJ = 1 : KJT, JK = 1 : KKT )
+!$mnh_do_concurrent( JI = 1 : KIT, JJ = 1 : KJT, JK = 1 : KKT )
   ZT(JI,JJ,JK) = PTHT(JI,JJ,JK) * PEXN(JI,JJ,JK)
   ZZ_LSFACT(JI,JJ,JK)=(XLSTT+(XCPV-XCI)*(ZT(JI,JJ,JK)-XTT))   &
                    /( XCPD + XCPV*PRVT(JI,JJ,JK) + XCL*(PRCT(JI,JJ,JK)+PRRT(JI,JJ,JK))   &
@@ -1265,7 +1265,7 @@ DO CONCURRENT( JI = 1 : KIT, JJ = 1 : KJT, JK = 1 : KKT )
   ZZ_LVFACT(JI,JJ,JK)=(XLVTT+(XCPV-XCL)*(ZT(JI,JJ,JK)-XTT))   &
                    /( XCPD + XCPV*PRVT(JI,JJ,JK) + XCL*(PRCT(JI,JJ,JK)+PRRT(JI,JJ,JK))   &
                    + XCI*(PRIT(JI,JJ,JK)+PRST(JI,JJ,JK)+PRGT(JI,JJ,JK)))
-END DO
+!$mnh_end_do()
 #endif
 ENDIF
 !$acc end kernels
@@ -1626,8 +1626,9 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies
                         &ZHLC_HCF, ZHLC_LCF, ZHLC_HRC, ZHLC_LRC, &
                         &ZHLI_HCF, ZHLI_LCF, ZHLI_HRI, ZHLI_LRI, PRAINFR)
     ! External tendencies
-!$acc kernels
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     IF(GEXT_TEND) THEN
+!$acc kernels
 !$acc loop independent
       DO JL=1, IMICRO
         ZA_TH(JL) = ZA_TH(JL) + ZEXT_TH(JL)
@@ -1639,7 +1640,9 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies
         ZA_RG(JL) = ZA_RG(JL) + ZEXT_RG(JL)
         ZA_RH(JL) = ZA_RH(JL) + ZEXT_RH(JL)
       ENDDO
-    ENDIF
+!$acc end kernels
+   ENDIF
+!$acc kernels   
     !
     !***       4.2 Integration time
     !
@@ -1664,6 +1667,8 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies
                      ZW1D(JL) * MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL))
       ENDDO
     ENDIF
+!$acc end kernels
+!$acc kernels
     !We need to adjust tendencies when a specy disappears
     !When a species is missing, only the external tendencies can be negative (and we must keep track of it)
 !$acc loop independent
@@ -1698,7 +1703,8 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies
       ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + &
                   &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB_RG(JL)+ZRGT(JL))/MIN(ZA_RG(JL), -1.E-20))
     ENDDO
-
+!$acc end kernels
+!$acc kernels
     IF(KRR==7) THEN
 !$acc loop independent
       DO JL=1, IMICRO
@@ -1707,7 +1713,9 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies
         ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + &
                     &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB_RH(JL)+ZRHT(JL))/MIN(ZA_RH(JL), -1.E-20))
       ENDDO
-    ENDIF
+   ENDIF
+!$acc end kernels
+!$acc kernels   
     !We stop when the end of the timestep is reached
     ZCOMPUTE(:)=ZCOMPUTE(:) * MAX(0., -SIGN(1., ZTIME(:)+ZMAXTIME(:)-PTSTEP))
 
@@ -1725,7 +1733,10 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies
     !We must recompute tendencies when the maximum allowed change is reached
     !When a specy is missing, only the external tendencies can be active and we do not want to recompute
     !the microphysical tendencies when external tendencies are negative (results won't change because specy was already missing)
+!$acc end kernels
+
     IF(XMRSTEP/=0.) THEN
+!$acc kernels
 !$acc loop independent
       DO JL=1, IMICRO
         ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX)
@@ -1806,7 +1817,8 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies
                     &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL))
         ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL))
       ENDDO
-
+!$acc end kernels
+!$acc kernels
       IF(KRR==7) THEN
 !$acc loop independent
         DO JL=1, IMICRO
@@ -1824,7 +1836,8 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies
           ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL))
         ENDDO
       ENDIF
-
+!$acc end kernels
+!$acc kernels
 !$acc loop independent
       DO JL=1, IMICRO
         ZW1D(JL)=MAX(ABS(ZB_RV(JL)), ABS(ZB_RC(JL)), ABS(ZB_RR(JL)), ABS(ZB_RI(JL)), &
@@ -1834,10 +1847,12 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies
         ZMAXTIME(JL)=(1.-ZW1D(JL))*ZMAXTIME(JL)
         ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL))
       ENDDO
-    ENDIF
+!$acc end kernels
+   ENDIF
     !
     !***       4.3 New values of variables for next iteration
     !
+!$acc kernels
 !$acc loop independent
     DO JL=1, IMICRO
       ZTHT(JL)=ZTHT(JL)+ZA_TH(JL)*ZMAXTIME(JL)+ZB_TH(JL)
@@ -1850,12 +1865,12 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies
       ZCIT(JL)=ZCIT(JL) * MAX(0., -SIGN(1., -ZRIT(JL))) ! WHERE(ZRIT(:)==0.) ZCIT(:) = 0.
     ENDDO
 !$acc end kernels
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!    
     IF(KRR==7) THEN
 !$acc kernels
       ZRHT(:)=ZRHT(:)+ZA_RH(:)*ZMAXTIME(:)+ZB_RH(:)
 !$acc end kernels
     END IF
-! !$acc end kernels
     !
     !***       4.4 Mixing ratio change due to each process
     !
@@ -1924,7 +1939,7 @@ ENDDO
 !*       5.     UNPACKING DIAGNOSTICS
 !               ---------------------
 !
-! !$acc kernels
+! ! acc kernels
 IF(IMICRO>0) THEN
 !$acc kernels present_cr( ZHLC_HCF3D, ZHLC_LCF3D, ZHLC_HRC3D, ZHLC_LRC3D, ZHLI_HCF3D, ZHLI_LCF3D, ZHLI_HRI3D, ZHLI_LRI3D )
   ZHLC_HCF3D(:,:,:)=0.
@@ -2000,14 +2015,14 @@ ENDDO
 !$acc end kernels
 #else
 !$acc kernels present_cr( PEXNREF, PRIS, PRVS, PTHS, ZZ_LSFACT, ZZ_LVFACT, ZZ_RVHENI )
-DO CONCURRENT( JI = 1 : KIT, JJ = 1 : KJT, JK = 1 : KKT )
+!$mnh_do_concurrent( JI = 1 : KIT, JJ = 1 : KJT, JK = 1 : KKT )
   ZZ_LSFACT(JI,JJ,JK)=ZZ_LSFACT(JI,JJ,JK)/PEXNREF(JI,JJ,JK)
   ZZ_LVFACT(JI,JJ,JK)=ZZ_LVFACT(JI,JJ,JK)/PEXNREF(JI,JJ,JK)
   ZZ_RVHENI(JI,JJ,JK) = MIN(PRVS(JI,JJ,JK), ZZ_RVHENI_MR(JI,JJ,JK)/PTSTEP)
   PRIS(JI,JJ,JK)=PRIS(JI,JJ,JK)+ZZ_RVHENI(JI,JJ,JK)
   PRVS(JI,JJ,JK)=PRVS(JI,JJ,JK)-ZZ_RVHENI(JI,JJ,JK)
   PTHS(JI,JJ,JK)=PTHS(JI,JJ,JK) + ZZ_RVHENI(JI,JJ,JK)*ZZ_LSFACT(JI,JJ,JK)
-END DO
+!$mnh_end_do()
 !$acc end kernels
 #endif
 !$acc update self(PRIS,PRVS,PTHS)
@@ -2032,7 +2047,7 @@ IF(GEXT_TEND) THEN
 !$acc kernels
   !Z..T variables contain the exeternal tendency, we substract it
 !$acc loop independent
-  DO CONCURRENT ( JL = 1 : IMICRO )
+  !$mnh_do_concurrent ( JL = 1 : IMICRO )
     ZRVT(JL) = ZRVT(JL) - ZEXT_RV(JL) * PTSTEP
     ZRCT(JL) = ZRCT(JL) - ZEXT_RC(JL) * PTSTEP
     ZRRT(JL) = ZRRT(JL) - ZEXT_RR(JL) * PTSTEP
@@ -2040,14 +2055,14 @@ IF(GEXT_TEND) THEN
     ZRST(JL) = ZRST(JL) - ZEXT_RS(JL) * PTSTEP
     ZRGT(JL) = ZRGT(JL) - ZEXT_RG(JL) * PTSTEP
     ZTHT(JL) = ZTHT(JL) - ZEXT_TH(JL) * PTSTEP
-  END DO
+  !$mnh_end_do()
 !$acc end kernels
   IF (KRR==7) THEN
 !$acc kernels
 !$acc loop independent
-    DO CONCURRENT ( JL = 1 : IMICRO )
+    !$mnh_do_concurrent ( JL = 1 : IMICRO )
       ZRHT(JL) = ZRHT(JL) - ZEXT_RH(JL) * PTSTEP
-    END DO
+    !$mnh_end_do()
 !$acc end kernels
   END IF
 END IF
@@ -2109,14 +2124,14 @@ IF (KRR==7) THEN
 ELSE
 
 !PW: BUG: this should work...
-! !$acc kernels
+! ! acc kernels
 !   ZW_RVS(JI,JJ,JK) = 0.
 !   ZW_RCS(JI,JJ,JK) = 0.
 !   ZW_RRS(JI,JJ,JK) = 0.
 !   ZW_RIS(JI,JJ,JK) = 0.
 !   ZW_RSS(JI,JJ,JK) = 0.
 !   ZW_RGS(JI,JJ,JK) = 0.
-! !$acc loop independent
+! ! acc loop independent
 !   DO JL=1,IMICRO
 !     ZW_RVS(I1(JL), I2(JL), I3(JL)) = ( ZRVT(JL) - PRVT(I1(JL), I2(JL), I3(JL)) ) * ZINV_TSTEP
 !     ZW_RCS(I1(JL), I2(JL), I3(JL)) = ( ZRCT(JL) - PRCT(I1(JL), I2(JL), I3(JL)) ) * ZINV_TSTEP
@@ -2125,7 +2140,7 @@ ELSE
 !     ZW_RSS(I1(JL), I2(JL), I3(JL)) = ( ZRST(JL) - PRST(I1(JL), I2(JL), I3(JL)) ) * ZINV_TSTEP
 !     ZW_RGS(I1(JL), I2(JL), I3(JL)) = ( ZRGT(JL) - PRGT(I1(JL), I2(JL), I3(JL)) ) * ZINV_TSTEP
 !   END DO
-! !$acc end kernels
+! ! acc end kernels
 
 #if 0
 !$acc kernels
@@ -2695,6 +2710,8 @@ ENDIF
 
 !$acc end data
 
+!$acc end data
+
 #ifdef MNH_OPENACC
 !Release all memory allocated with MNH_MEM_GET calls since last call to MNH_MEM_POSITION_PIN
 CALL MNH_MEM_RELEASE()
@@ -2722,8 +2739,6 @@ IF (MPPDB_INITIALIZED) THEN
   IF (PRESENT(PFPR))   CALL MPPDB_CHECK(PFPR,  "RAIN_ICE_RED end:PFPR")
 END IF
 
-!$acc end data
-
 CONTAINS
   !
   SUBROUTINE CORRECT_NEGATIVITIES(KIT, KJT, KKT, KRR, PRV, PRC, PRR, &
diff --git a/src/MNH/rain_ice_sedimentation_split.f90 b/src/MNH/rain_ice_sedimentation_split.f90
index ab5091edf..91eb1eda9 100644
--- a/src/MNH/rain_ice_sedimentation_split.f90
+++ b/src/MNH/rain_ice_sedimentation_split.f90
@@ -55,6 +55,11 @@ USE MODI_BITREP
 USE MODE_MNH_ZWORK,      ONLY: MNH_MEM_GET, MNH_MEM_POSITION_PIN, MNH_MEM_RELEASE
 #endif
 
+#if defined(MNH_COMPILER_CCE) && defined(MNH_BITREP_OMP)
+!$mnh_undef(LOOP)
+!$mnh_undef(OPENACC)
+#endif
+
 IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
@@ -307,7 +312,7 @@ if ( lbudget_rh )              call Budget_store_init( tbudgets(NBUDGET_RH), 'SE
 !        O. Initialization of for sedimentation
 !
 !$acc kernels present_cr(ZOMPSEA,ZTMP1_2D,zconc_tmp,ztmp3_2d,ztmp2_2d,ztmp4_2d,ZLBC,ZFSEDC) &
-!$acc present_cr(zconc3d,zray,zprrs,zprss)
+!$acc & present_cr(zconc3d,zray,zprrs,zprss)
 ZINVTSTEP=1./PTSTEP
 ZTSPLITR= PTSTEP / REAL(KSPLITR)
 !
@@ -459,8 +464,7 @@ DO JN = 1 , KSPLITR
   IF ( OSEDIC ) THEN
     ZWSED(:,:,:) = 0.
     IF( JN==1 ) PRCS(:,:,:) = PRCS(:,:,:) * PTSTEP
-    !$acc loop independent
-     DO CONCURRENT (JL=1:ISEDIMC)
+     !$mnh_do_concurrent (JL=1:ISEDIMC)
        ZRSLOC = PRCS(IC1(JL),IC2(JL),IC3(JL))
        ZRTLOC = PRCT(IC1(JL),IC2(JL),IC3(JL))
        IF (ZRSLOC > ZRTMIN(2) .AND. ZRTLOC > XRTMIN(2)) THEN
@@ -500,7 +504,7 @@ DO JN = 1 , KSPLITR
                                           * BR_POW(ZWLBDC,-XDC)*ZCC*ZFSEDC1D * ZRSLOC
 #endif
       END IF
-    END DO
+    !$mnh_end_do()
     DO JK = KKTB , KKTE
       PRCS(:,:,JK) = PRCS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
     END DO
@@ -519,8 +523,7 @@ DO JN = 1 , KSPLITR
 !
   IF( JN==1 ) PRRS(:,:,:) = PRRS(:,:,:) * PTSTEP
   ZWSED(:,:,:) = 0.
-!$acc loop independent
-  DO CONCURRENT (JL=1:ISEDIMR)
+  !$mnh_do_concurrent (JL=1:ISEDIMR)
     ZRSLOC = PRRS(IR1(JL),IR2(JL),IR3(JL))
     IF( ZRSLOC > ZRTMIN(3) ) THEN
       ZRHODREFLOC =  PRHODREF(IR1(JL),IR2(JL),IR3(JL))
@@ -533,7 +536,7 @@ DO JN = 1 , KSPLITR
                                        BR_POW(ZRHODREFLOC,XEXSEDR-XCEXVT)
 #endif
     END IF
-  END DO
+  !$mnh_end_do()
   DO JK = KKTB , KKTE
     PRRS(:,:,JK) = PRRS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
   END DO
@@ -552,8 +555,7 @@ DO JN = 1 , KSPLITR
 !
   IF( JN==1 ) PRIS(:,:,:) = PRIS(:,:,:) * PTSTEP
   ZWSED(:,:,:) = 0.
-  !$acc loop independent
-  DO  CONCURRENT (JL=1:ISEDIMI)
+  !$mnh_do_concurrent (JL=1:ISEDIMI)
     ZRSLOC = PRIS(II1(JL),II2(JL),II3(JL))
     IF( ZRSLOC >  MAX(ZRTMIN(4),1.0E-7 )) THEN ! limitation of the McF&H formula
       ZRHODREFLOC =  PRHODREF(II1(JL),II2(JL),II3(JL))
@@ -569,7 +571,7 @@ DO JN = 1 , KSPLITR
                                         BR_LOG(ZRHODREFLOC*ZRSLOC) ), XEXCSEDI)
 #endif
     END IF
-  END DO
+  !$mnh_end_do()
   DO JK = KKTB , KKTE
     PRIS(:,:,JK) = PRIS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
   END DO
@@ -586,8 +588,7 @@ DO JN = 1 , KSPLITR
 !
   IF( JN==1 ) PRSS(:,:,:) = PRSS(:,:,:) * PTSTEP
   ZWSED(:,:,:) = 0.
-  !$acc loop independent
-  DO CONCURRENT (JL=1:ISEDIMS)
+  !$mnh_do_concurrent (JL=1:ISEDIMS)
     ZRSLOC = PRSS(IS1(JL),IS2(JL),IS3(JL))
     IF( ZRSLOC > ZRTMIN(5) ) THEN
       ZRHODREFLOC =  PRHODREF(IS1(JL),IS2(JL),IS3(JL))
@@ -599,7 +600,7 @@ DO JN = 1 , KSPLITR
                                         BR_POW(ZRHODREFLOC,XEXSEDS-XCEXVT)
 #endif
     END IF
-  END DO
+  !$mnh_end_do()
   DO JK = KKTB , KKTE
     PRSS(:,:,JK) = PRSS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
   END DO
@@ -617,8 +618,7 @@ DO JN = 1 , KSPLITR
 !
   ZWSED(:,:,:) = 0.
   IF( JN==1 ) PRGS(:,:,:) = PRGS(:,:,:) * PTSTEP
-  !$acc loop independent
-  DO  CONCURRENT (JL=1:ISEDIMG)
+  !$mnh_do_concurrent (JL=1:ISEDIMG)
     ZRSLOC = PRGS(IG1(JL),IG2(JL),IG3(JL))
     IF( ZRSLOC > ZRTMIN(6) ) THEN
       ZRHODREFLOC =  PRHODREF(IG1(JL),IG2(JL),IG3(JL))
@@ -630,7 +630,7 @@ DO JN = 1 , KSPLITR
                                         BR_POW(ZRHODREFLOC,XEXSEDG-XCEXVT)
 #endif
     END IF
-  END DO
+  !$mnh_end_do()
   DO JK = KKTB , KKTE
     PRGS(:,:,JK) = PRGS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
   END DO
@@ -649,8 +649,7 @@ DO JN = 1 , KSPLITR
   IF ( KRR == 7 ) THEN
     IF( JN==1 ) PRHS(:,:,:) = PRHS(:,:,:) * PTSTEP
     ZWSED(:,:,:) = 0.
-    !$acc loop independent
-    DO CONCURRENT (JL=1:ISEDIMH)
+    !$mnh_do_concurrent (JL=1:ISEDIMH)
       ZRSLOC = PRHS(IH1(JL),IH2(JL),IH3(JL))
       IF( ZRSLOC > ZRTMIN(7) ) THEN
         ZRHODREFLOC =  PRHODREF(IH1(JL),IH2(JL),IH3(JL))
@@ -662,7 +661,7 @@ DO JN = 1 , KSPLITR
                                           BR_POW(ZRHODREFLOC,XEXSEDH-XCEXVT)
 #endif
       END IF
-    END DO
+    !$mnh_end_do()
     DO JK = KKTB , KKTE
       PRHS(:,:,JK) = PRHS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
     END DO
diff --git a/src/MNH/rain_ice_slow.f90 b/src/MNH/rain_ice_slow.f90
index 690cbda36..ff37338cc 100644
--- a/src/MNH/rain_ice_slow.f90
+++ b/src/MNH/rain_ice_slow.f90
@@ -210,9 +210,9 @@ CALL MNH_MEM_GET( zz_diff,  SIZE(PLSFACT) )
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
   PDV(:) = 0.211E-4 * (PZT(:)/XTT)**1.94 * (XP00/PPRES(:)) ! D_v
 #else
-DO CONCURRENT ( JL=1:JLU )
+!$mnh_do_concurrent ( JL=1:JLU )
    PDV(JL) = 0.211E-4 * BR_POW(PZT(JL)/XTT,1.94) * (XP00/PPRES(JL)) ! D_v
-END DO   
+!$mnh_end_do()   
 #endif
 !
 !*       3.4.1  compute the thermodynamical function A_i(T,P)
@@ -224,12 +224,12 @@ END DO
                                  + ( XRV*PZT(:) ) / (PDV(:)*PAI(:))
   PCJ(:) = XSCFAC * PRHODREF(:)**0.3 / SQRT( 1.718E-5+0.0049E-5*(PZT(:)-XTT) )
 #else
-DO CONCURRENT ( JL=1:JLU )
+!$mnh_do_concurrent ( JL=1:JLU )
   PAI(JL) = BR_EXP( XALPI - XBETAI/PZT(JL) - XGAMI*BR_LOG(PZT(JL) ) ) ! es_i
   PAI(JL) = BR_P2( XLSTT + (XCPV-XCI)*(PZT(JL)-XTT) ) / (PKA(JL)*XRV*BR_P2(PZT(JL))) &
                                  + ( XRV*PZT(JL) ) / (PDV(JL)*PAI(JL))
   PCJ(JL) = XSCFAC * BR_POW(PRHODREF(JL),0.3) / BR_POW( 1.718E-5+0.0049E-5*(PZT(JL)-XTT) , 0.5)
-END DO
+!$mnh_end_do()
 #endif
 !
 !*       3.4.2  compute the riming-conversion of r_c for r_i production: RCAUTI
@@ -261,7 +261,7 @@ END DO
   ZZW(:) = 0.0
   GWORK(:) = (PRST(:)>XRTMIN(5)) .AND. (PRSS(:)>0.0)
  !$acc loop independent
- DO CONCURRENT ( JL=1:JLU )
+ !$mnh_do_concurrent ( JL=1:JLU )
     IF ( GWORK(JL) ) THEN
        ZZW(JL) = ( PSSI(JL)/(PRHODREF(JL)*PAI(JL)) ) *                               &
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
@@ -275,7 +275,7 @@ END DO
        PRVS(JL) = PRVS(JL) - ZZW(JL)
        PTHS(JL) = PTHS(JL) + ZZW(JL)*PLSFACT(JL)
     END IF
- END DO
+ !$mnh_end_do()
 !$acc end kernels
 
   if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'DEPS', &
@@ -291,7 +291,7 @@ END DO
   ZZW(:) = 0.0
   GWORK(:) = PRIT(:)>XRTMIN(4) .AND. PRST(:)>XRTMIN(5) .AND. PRIS(:)>0.0
   !$acc loop independent
-  DO CONCURRENT ( JL=1:JLU )
+  !$mnh_do_concurrent ( JL=1:JLU )
     IF ( GWORK(JL) ) THEN
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)  
       ZZW(JL) = MIN( PRIS(JL),XFIAGGS * EXP( XCOLEXIS*(PZT(JL)-XTT) ) &
@@ -307,7 +307,7 @@ END DO
       PRSS(JL)  = PRSS(JL)  + ZZW(JL)
       PRIS(JL)  = PRIS(JL)  - ZZW(JL)
    END IF
-  END DO ! CONCURRENT
+  !$mnh_end_do() ! CONCURRENT
 !$acc end kernels
 
   if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'AGGS', &
@@ -321,9 +321,9 @@ END DO
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
   ZCRIAUTI(:)=MIN(XCRIAUTI,10**(XACRIAUTI*(PZT(:)-XTT)+XBCRIAUTI))
 #else
-DO CONCURRENT ( JL=1:JLU )
+!$mnh_do_concurrent ( JL=1:JLU )
   ZCRIAUTI(JL)=MIN(XCRIAUTI, BR_POW(10.,XACRIAUTI*(PZT(JL)-XTT)+XBCRIAUTI) )
-END DO
+!$mnh_end_do()
 #endif
   ZZW(:) = 0.0
   GWORK(:) = PRIT(:)>XRTMIN(4) .AND. PRIS(:)>0.0
@@ -354,7 +354,7 @@ END DO
 !$acc kernels
   GWORK(:) = PRGT(:)>0.0
   !$acc loop independent
-  DO CONCURRENT ( JL=1:JLU )
+  !$mnh_do_concurrent ( JL=1:JLU )
     IF ( GWORK(JL) ) THEN
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)  
       PLBDAG(JL)  = XLBG*( PRHODREF(JL)*MAX( PRGT(JL),XRTMIN(6) ) )**XLBEXG
@@ -364,11 +364,11 @@ END DO
     ELSE
       PLBDAG(JL) = 0.
     END IF
-  END DO ! CONCURRENT
+  !$mnh_end_do() ! CONCURRENT
   ZZW(:) = 0.0
   GWORK(:) = PRGT(:)>XRTMIN(6) .AND. PRGS(:)>0.0
   !$acc loop independent
-  DO CONCURRENT ( JL=1:JLU )
+  !$mnh_do_concurrent ( JL=1:JLU )
     IF ( GWORK(JL) ) THEN
       ZZW(JL) = ( PSSI(JL)/(PRHODREF(JL)*PAI(JL)) ) *                               &
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
@@ -382,7 +382,7 @@ END DO
       PRVS(JL) = PRVS(JL) - ZZW(JL)
       PTHS(JL) = PTHS(JL) + ZZW(JL)*PLSFACT(JL)
     END IF
-  END DO ! CONCURRENT
+  !$mnh_end_do() ! CONCURRENT
 !$acc end kernels
 
   if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'DEPG', &
diff --git a/src/MNH/rain_ice_warm.f90 b/src/MNH/rain_ice_warm.f90
index 48ec7a5d0..2fb7efda0 100644
--- a/src/MNH/rain_ice_warm.f90
+++ b/src/MNH/rain_ice_warm.f90
@@ -44,6 +44,11 @@ use MODE_MSG
 USE MODI_BITREP
 #endif
 
+#if defined(MNH_COMPILER_CCE) && defined(MNH_BITREP_OMP)
+!$mnh_undef(LOOP)
+!$mnh_undef(OPENACC)
+#endif
+
 IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
@@ -202,8 +207,7 @@ zzw(JL) = 0.
 !$acc kernels
       !CLoud water and rain are diluted over the grid box
       GWORK(:) = PRCT(:)>XRTMIN(2) .AND. PRRT(:)>XRTMIN(3) .AND. PRCS(:)>0.0
-     !$acc loop independent
-     DO CONCURRENT ( JL=1:JLU )
+     !$mnh_do_concurrent ( JL=1:JLU )
         IF ( GWORK(JL) )  THEN
            ZZW(JL) = MIN( PRCS(JL), XFCACCR * PRCT(JL) &
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)       
@@ -216,7 +220,7 @@ zzw(JL) = 0.
            PRCS(JL) = PRCS(JL) - ZZW(JL)
            PRRS(JL) = PRRS(JL) + ZZW(JL)
         END IF
-     END DO ! CONCURRENT
+     !$mnh_end_do() ! CONCURRENT
 !$acc end kernels
 
     ELSEIF (CSUBG_RC_RR_ACCR=='PRFR') THEN
@@ -233,8 +237,7 @@ zzw(JL) = 0.
       ! => min(PCF, PRF)-PHLC_HCF
       ZZW(:) = 0.
       GWORK(:) = PHLC_HRC(:)>XRTMIN(2) .AND. PRRT(:)>XRTMIN(3) .AND. PRCS(:)>0.0 .AND. PHLC_HCF(:)>0
-     !$acc loop independent
-     DO CONCURRENT ( JL=1:JLU )
+     !$mnh_do_concurrent ( JL=1:JLU )
         IF ( GWORK(JL) ) THEN
            !Accretion due to rain falling in high cloud content
            ZZW(JL) = XFCACCR * ( PHLC_HRC(JL)/PHLC_HCF(JL) ) &
@@ -247,10 +250,9 @@ zzw(JL) = 0.
 #endif
                 * PHLC_HCF(JL)
         END IF
-     END DO ! CONCURRENT
+     !$mnh_end_do() ! CONCURRENT
      GWORK(:) = PHLC_LRC(:)>XRTMIN(2) .AND. PRRT(:)>XRTMIN(3) .AND. PRCS(:)>0.0 .AND. PHLC_LCF(:)>0
- !$acc loop independent
- DO CONCURRENT ( JL=1:JLU )
+ !$mnh_do_concurrent ( JL=1:JLU )
     IF ( GWORK(JL) ) THEN     
         !We add acrretion due to rain falling in low cloud content
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
@@ -268,7 +270,7 @@ zzw(JL) = 0.
       ZZW(JL)=MIN(PRCS(JL), ZZW(JL))
       PRCS(JL) = PRCS(JL) - ZZW(JL)
       PRRS(JL) = PRRS(JL) + ZZW(JL)
-   END DO ! CONCURRENT
+   !$mnh_end_do() ! CONCURRENT
 !$acc end kernels
 
     ELSE
@@ -306,8 +308,7 @@ zzw(JL) = 0.
        END WHERE
        !$mnh_end_expand_where()
 #else
-       !$acc loop independent
-       DO CONCURRENT ( JL=1:JLU )
+       !$mnh_do_concurrent ( JL=1:JLU )
           IF ( GWORK(JL) ) THEN
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)       
              ZZW(JL)  = EXP( XALPW - XBETAW/PZT(JL) - XGAMW*LOG(PZT(JL) ) ) ! es_w
@@ -332,7 +333,7 @@ zzw(JL) = 0.
              PRVS(JL) = PRVS(JL) + ZZW(JL)
              PTHS(JL) = PTHS(JL) - ZZW(JL)*PLVFACT(JL)
           END IF
-       END DO ! CONCURRENT
+       !$mnh_end_do() ! CONCURRENT
 #endif       
 !$acc end kernels
     ELSEIF (CSUBG_RR_EVAP=='CLFR' .OR. CSUBG_RR_EVAP=='PRFR') THEN
@@ -360,8 +361,7 @@ IF (CSUBG_RR_EVAP=='CLFR') GCSUBG_RR_EVAP=.true.
       !Ces variables devraient être sorties de rain_ice_slow et on mettrait le calcul de T^u, T^s
       !et plusieurs versions (comme actuellement, en ciel clair, en ciel nuageux) de PKA, PDV, PCJ dans rain_ice
       !On utiliserait la bonne version suivant l'option NONE, CLFR... dans l'évaporation et ailleurs
-      !$acc loop independent
-      DO CONCURRENT ( JL=1:JLU )
+      !$mnh_do_concurrent ( JL=1:JLU )
         GWORK(JL) = PRRT(JL)>XRTMIN(3) .AND. ZZW4(JL)>PCF(JL)
         IF ( GWORK(JL) ) THEN
         ! outside the cloud (environment) the use of T^u (unsaturated) instead of T
@@ -400,7 +400,7 @@ IF (CSUBG_RR_EVAP=='CLFR') GCSUBG_RR_EVAP=.true.
         PRVS(JL) = PRVS(JL) + ZZW(JL)
         PTHS(JL) = PTHS(JL) - ZZW(JL)*PLVFACT(JL)
         END IF
-     END DO ! CONCURRENT
+     !$mnh_end_do() ! CONCURRENT
 !$acc end kernels
 
     ELSE
diff --git a/src/MNH/rotate_wind.f90 b/src/MNH/rotate_wind.f90
index c08f6ffa4..f2b752afb 100644
--- a/src/MNH/rotate_wind.f90
+++ b/src/MNH/rotate_wind.f90
@@ -117,6 +117,11 @@ use mode_mppdb
 USE MODI_BITREP
 #endif
 !
+#if defined(MNH_COMPILER_CCE) && defined(MNH_BITREP_OMP)
+!$mnh_undef(LOOP)
+!$mnh_undef(OPENACC)
+#endif
+!
 IMPLICIT NONE
 !
 !
@@ -236,7 +241,7 @@ JLOC(:,:)=NINT(SIGN(1.,-PSINSLOPE(:,:)))
 ! interpolation in x direction
 !
 !$acc_nv loop independent collapse(2)
-DO CONCURRENT(JI=IIB:IIE,JJ=1:IJU)
+!$mnh_do_concurrent(JI=IIB:IIE,JJ=1:IJU)
     ZCOEFF(JI,JJ) =                                                  &
       (0.5*PDXX(JI,JJ,IKB) + 0.5*PDZZ(JI,JJ,IKB)*PDIRCOSXW(JI,JJ) )  & 
       * 2. / (PDXX(JI,JJ,IKB)+PDXX(JI+1,JJ,IKB))
@@ -251,12 +256,12 @@ DO CONCURRENT(JI=IIB:IIE,JJ=1:IJU)
     ZWINT(JI,JJ) = ZCOEFM(JI,JJ)  * (PW(JI,JJ,IKB+1)+ZWGROUND(JI,JJ)) * 0.5    &
               + (1.-ZCOEFM(JI,JJ))                                             &
                *(PW(JI+ILOC(JI,JJ),JJ,IKB+1)+ZWGROUND(JI+ILOC(JI,JJ),JJ)) * 0.5
-END DO
+!$mnh_end_do()
 !
 ! interpolation in y direction
 !
 !$acc_nv loop independent collapse(2)
-DO CONCURRENT(JI=IIB:IIE,JJ=IJB:IJE)
+!$mnh_do_concurrent(JI=IIB:IIE,JJ=IJB:IJE)
     ZCOEFF(JI,JJ) =                                                     &
       (0.5*PDYY(JI,JJ,IKB) + 0.5*PDZZ(JI,JJ,IKB)*PDIRCOSYW(JI,JJ) )     & 
       * 2. / (PDYY(JI,JJ,IKB)+PDYY(JI+1,JJ,IKB))
@@ -269,14 +274,14 @@ DO CONCURRENT(JI=IIB:IIE,JJ=IJB:IJE)
                    (1.-ZCOEFM(JI,JJ)) * ZUINT(JI,JJ+JLOC(JI,JJ))
     ZWFIN(JI,JJ) = ZCOEFM(JI,JJ)      * ZWINT(JI,JJ)                +    &
                    (1.-ZCOEFM(JI,JJ)) * ZWINT(JI,JJ+JLOC(JI,JJ))
-END DO
+!$mnh_end_do()
 !
 !*      3.    ROTATE THE WIND
 !             ---------------
 !
 !
 !$acc_nv loop independent collapse(2)
-DO CONCURRENT(JI=IIB:IIE,JJ=IJB:IJE)
+!$mnh_do_concurrent(JI=IIB:IIE,JJ=IJB:IJE)
     PUSLOPE(JI,JJ) = PCOSSLOPE(JI,JJ) * PDIRCOSZW(JI,JJ) * ZUFIN(JI,JJ) +   &
                      PSINSLOPE(JI,JJ) * PDIRCOSZW(JI,JJ) * ZVFIN(JI,JJ) +   &
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
@@ -288,7 +293,7 @@ DO CONCURRENT(JI=IIB:IIE,JJ=IJB:IJE)
     PVSLOPE(JI,JJ) =-PSINSLOPE(JI,JJ)                    * ZUFIN(JI,JJ) +   &
                      PCOSSLOPE(JI,JJ)                    * ZVFIN(JI,JJ)
     !
-END DO
+!$mnh_end_do()
 !$acc end kernels
 
 !$acc end data
diff --git a/src/MNH/sources_neg_correct.f90 b/src/MNH/sources_neg_correct.f90
index f08c426fa..551de61db 100644
--- a/src/MNH/sources_neg_correct.f90
+++ b/src/MNH/sources_neg_correct.f90
@@ -304,14 +304,14 @@ CLOUD: select case ( hcloud )
     end if
 !$acc kernels
     do jr = 4, jrmax
-      do concurrent( ji = 1 : jiu, jj = 1 : jju, jk = 1 : jku )
+      !$mnh_do_concurrent( ji = 1 : jiu, jj = 1 : jju, jk = 1 : jku )
         if ( prrs(ji, jj, jk, jr) < 0. ) then
           prrs(ji, jj, jk, 1) = prrs(ji, jj, jk, 1) + prrs(ji, jj, jk, jr)
           prths(ji, jj, jk)   = prths(ji, jj, jk) - prrs(ji, jj, jk, jr) * zls(ji, jj, jk) /  &
                                 ( zcph(ji, jj, jk) * zexn(ji, jj, jk) )
           prrs(ji, jj, jk, jr) = 0.
         end if
-      end do
+      !$mnh_end_do()
     end do
 !$acc end kernels
 !
@@ -323,32 +323,32 @@ CLOUD: select case ( hcloud )
     end if
 !$acc kernels
     do jr = 2, jrmax
-      do concurrent( ji = 1 : jiu, jj = 1 : jju, jk = 1 : jku )
+      !$mnh_do_concurrent( ji = 1 : jiu, jj = 1 : jju, jk = 1 : jku )
         if ( prrs(ji, jj, jk, jr) < 0. ) then
           prrs(ji, jj, jk, 1) = prrs(ji, jj, jk, 1) + prrs(ji, jj, jk, jr)
           prths(ji, jj, jk)   = prths(ji, jj, jk) - prrs(ji, jj, jk, jr) * zlv(ji, jj, jk) /  &
                                 ( zcph(ji, jj, jk) * zexn(ji, jj, jk) )
           prrs(ji, jj, jk, jr) = 0.
         end if
-      end do
+      !$mnh_end_do()
     end do
 !
 ! if rc or ri are positive, we can correct negative rv
 !   cloud
-    do concurrent( ji = 1 : jiu, jj = 1 : jju, jk = 1 : jku )
+    !$mnh_do_concurrent( ji = 1 : jiu, jj = 1 : jju, jk = 1 : jku )
       if ( prrs(ji, jj, jk, 1) < 0. .and. prrs(ji, jj, jk, 2) > 0. ) then
         prrs(ji, jj, jk, 1) = prrs(ji, jj, jk, 1) + prrs(ji, jj, jk, 2)
         prths(ji, jj, jk)   = prths(ji, jj, jk) - prrs(ji, jj, jk, 2) * zlv(ji, jj, jk) /  &
                               ( zcph(ji, jj, jk) * zexn(ji, jj, jk) )
         prrs(ji, jj, jk, 2) = 0.
       end if
-    end do
+    !$mnh_end_do()
 !   ice
     if ( krr > 3 ) then
 #ifdef MNH_COMPILER_NVHPC
 !$acc loop independent collapse(3)
 #endif
-      do concurrent( ji = 1 : jiu, jj = 1 : jju, jk = 1 : jku )
+      !$mnh_do_concurrent( ji = 1 : jiu, jj = 1 : jju, jk = 1 : jku )
         if ( prrs(ji, jj, jk, 1) < 0. .and. prrs(ji, jj, jk, 4) > 0. ) then
           zcor(ji, jj, jk)    = Min( -prrs(ji, jj, jk, 1), prrs(ji, jj, jk, 4) )
           prrs(ji, jj, jk, 1) = prrs(ji, jj, jk, 1) + zcor(ji, jj, jk)
@@ -356,7 +356,7 @@ CLOUD: select case ( hcloud )
                                 ( zcph(ji, jj, jk) * zexn(ji, jj, jk) )
           prrs(ji, jj, jk, 4) = prrs(ji, jj, jk, 4) - zcor(ji, jj, jk)
         end if
-      end do
+      !$mnh_end_do()
     end if
 !$acc end kernels
 !
diff --git a/src/MNH/tke_eps_sources.f90 b/src/MNH/tke_eps_sources.f90
index 0636775b9..68b912f64 100644
--- a/src/MNH/tke_eps_sources.f90
+++ b/src/MNH/tke_eps_sources.f90
@@ -207,6 +207,11 @@ USE MODI_SHUMAN_DEVICE
 #endif
 USE MODI_TRIDIAG_TKE
 !
+#if defined(MNH_COMPILER_CCE) && defined(MNH_BITREP_OMP)
+!$mnh_undef(LOOP)
+!$mnh_undef(OPENACC)
+#endif
+!
 IMPLICIT NONE
 !
 !
@@ -350,9 +355,9 @@ ZKEFF(:,:,:) = PLM(:,:,:) * SQRT(PTKEM(:,:,:))
 #ifdef MNH_COMPILER_NVHPC
 !$acc loop independent collapse(3)
 #endif
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZKEFF(JI,JJ,JK) = PLM(JI,JJ,JK) * BR_POW(PTKEM(JI,JJ,JK),0.5)
-END DO
+!$mnh_end_do()
 #endif
 !
 !$acc end kernels
@@ -391,18 +396,18 @@ ZFLX(:,:,:) = XCED * SQRT(PTKEM(:,:,:)) / PLEPS(:,:,:)
 #ifdef MNH_COMPILER_NVHPC
 !$acc loop independent collapse(3)
 #endif
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZFLX(JI,JJ,JK) = XCED * BR_POW(PTKEM(JI,JJ,JK),0.5) / PLEPS(JI,JJ,JK)
-END DO
+!$mnh_end_do()
 #endif
 #ifdef MNH_COMPILER_NVHPC
 !$acc loop independent collapse(3)
 #endif
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZSOURCE(JI,JJ,JK) = ( PRTKES(JI,JJ,JK) + PRTKESM(JI,JJ,JK) ) / PRHODJ(JI,JJ,JK) &
         - PTKEM(JI,JJ,JK) / PTSTEP &
         + PDP(JI,JJ,JK) + PTP(JI,JJ,JK) + PTR(JI,JJ,JK) - PEXPL * ZFLX(JI,JJ,JK) * PTKEM(JI,JJ,JK)
-END DO !CONCURRENT
+!$mnh_end_do() !CONCURRENT
 !$acc end kernels
 !
 !*       2.2  implicit vertical TKE transport
@@ -428,9 +433,9 @@ ZA(:,:,:)     = - PTSTEP * XCET * ZTMP1_DEVICE(:,:,:) * ZTMP2_DEVICE(:,:,:) / PD
 !$mnh_end_expand_array()
 #else
 !$acc_nv loop independent collapse(3)
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZA(JI,JJ,JK)     = - PTSTEP * XCET * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK) / BR_P2(PDZZ(JI,JJ,JK))
-END DO !CONCURRENT   
+!$mnh_end_do() !CONCURRENT   
 #endif
 !$acc end kernels
 #endif
@@ -446,9 +451,9 @@ CALL GET_HALO(ZRES)
 #ifdef MNH_COMPILER_NVHPC
 !$acc loop independent collapse(3)
 #endif
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZTMP3_DEVICE(JI,JJ,JK) = PTSTEP*ZFLX(JI,JJ,JK)
-END DO !CONCURRENT   
+!$mnh_end_do() !CONCURRENT   
 !$acc end kernels
 CALL TRIDIAG_TKE(KKA,KKU,KKL,PTKEM,ZA,PTSTEP,PEXPL,PIMPL,PRHODJ,&
             & ZSOURCE,ZTMP3_DEVICE,ZRES)
@@ -556,9 +561,9 @@ if (lbudget_tke) then
 end if
 
 !$acc kernels
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    PRTKES(JI,JJ,JK) = ZRES(JI,JJ,JK) * PRHODJ(JI,JJ,JK) / PTSTEP -  PRTKESM(JI,JJ,JK)
-ENDDO
+!$mnh_end_do()
 !$acc end kernels
 !
 ! stores the whole turbulent transport
@@ -576,10 +581,10 @@ if (lbudget_tke) call Budget_store_end( tbudgets(NBUDGET_TKE), 'TR', prtkes(:, :
 PRTHLS(:,:,:) = PRTHLS(:,:,:) + XCED * SQRT(PTKEM(:,:,:)) / PLEPS(:,:,:) * &
         (PEXPL*PTKEM(:,:,:) + PIMPL*ZRES(:,:,:)) * PRHODJ(:,:,:) * PCOEF_DISS(:,:,:)
 #else
-DO CONCURRENT (JI=1:JIU, JJ=1:JJU ,JK=1:JKU)
+!$mnh_do_concurrent (JI=1:JIU, JJ=1:JJU ,JK=1:JKU)
    PRTHLS(JI,JJ,JK) = PRTHLS(JI,JJ,JK) + XCED * BR_POW(PTKEM(JI,JJ,JK),0.5) / PLEPS(JI,JJ,JK) * &
         (PEXPL*PTKEM(JI,JJ,JK) + PIMPL*ZRES(JI,JJ,JK)) * PRHODJ(JI,JJ,JK) * PCOEF_DISS(JI,JJ,JK)
-ENDDO
+!$mnh_end_do()
 #endif
 !$acc end kernels
 
@@ -594,9 +599,9 @@ if (lbudget_th) call Budget_store_end( tbudgets(NBUDGET_TH), 'DISSH', prthls(:,
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
 PDISS(:,:,:) =  -XCED * (PTKEM(:,:,:)**1.5) / PLEPS(:,:,:)
 #else
-DO CONCURRENT (JI=1:JIU, JJ=1:JJU, JK=1:JKU)
+!$mnh_do_concurrent (JI=1:JIU, JJ=1:JJU, JK=1:JKU)
    PDISS(JI,JJ,JK) =  -XCED * BR_POW(PTKEM(JI,JJ,JK),1.5) / PLEPS(JI,JJ,JK)
-ENDDO
+!$mnh_end_do()
 #endif
 !$acc end kernels
 !
diff --git a/src/MNH/tridiag_thermo.f90 b/src/MNH/tridiag_thermo.f90
index 871581a06..2855dae8e 100644
--- a/src/MNH/tridiag_thermo.f90
+++ b/src/MNH/tridiag_thermo.f90
@@ -263,9 +263,9 @@ CALL MZM_DEVICE(PRHODJ,ZMZM_RHODJ)
 ZRHODJ_DFDDTDZ_O_DZ2(:,:,:) = ZMZM_RHODJ(:,:,:)*PDFDDTDZ(:,:,:)/PDZZ(:,:,:)**2
 #else
 !$acc_nv loop independent collapse(3)
-DO CONCURRENT (JK=1:JKU,JJ=1:JJU,JI=1:JIU) 
+!$mnh_do_concurrent (JK=1:JKU,JJ=1:JJU,JI=1:JIU) 
    ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,JK) = ZMZM_RHODJ(JI,JJ,JK)*PDFDDTDZ(JI,JJ,JK)/BR_P2(PDZZ(JI,JJ,JK))
-END DO !CONCURRENT   
+!$mnh_end_do() !CONCURRENT   
 #endif
 !$acc end kernels
 !
@@ -282,23 +282,17 @@ ZY=0.
 !           ---------------------------
 !
 !$acc kernels ! async
-#ifdef MNH_COMPILER_NVHPC
-!$acc loop independent collapse(2)
-#endif
-DO CONCURRENT (JJ=1:JJU,JI=1:JIU)
+!$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU)
 ZY(JI,JJ,IKB) = PRHODJ(JI,JJ,IKB)*PVARM(JI,JJ,IKB)/PTSTEP                  &
     - ZMZM_RHODJ(JI,JJ,IKB+KKL) * PF(JI,JJ,IKB+KKL)/PDZZ(JI,JJ,IKB+KKL)    &
     + ZMZM_RHODJ(JI,JJ,IKB  ) * PF(JI,JJ,IKB  )/PDZZ(JI,JJ,IKB  )          &
     + ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,IKB+KKL) * PIMPL * PVARM(JI,JJ,IKB+KKL) &
     - ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,IKB+KKL) * PIMPL * PVARM(JI,JJ,IKB  )
-END DO !CONCURRENT
+!$mnh_end_do() !CONCURRENT
 !$acc end kernels
 !
 !$acc kernels ! async
-#ifdef MNH_COMPILER_NVHPC
-!$acc loop independent collapse(3)
-#endif
-DO CONCURRENT (JK=IKTB+1:IKTE-1,JJ=1:JJU,JI=1:JIU)
+!$mnh_do_concurrent (JK=IKTB+1:IKTE-1,JJ=1:JJU,JI=1:JIU)
   ZY(JI,JJ,JK) = PRHODJ(JI,JJ,JK)*PVARM(JI,JJ,JK)/PTSTEP                 &
     - ZMZM_RHODJ(JI,JJ,JK+KKL) * PF(JI,JJ,JK+KKL)/PDZZ(JI,JJ,JK+KKL)     &
     + ZMZM_RHODJ(JI,JJ,JK  ) * PF(JI,JJ,JK  )/PDZZ(JI,JJ,JK  )           &
@@ -306,20 +300,17 @@ DO CONCURRENT (JK=IKTB+1:IKTE-1,JJ=1:JJU,JI=1:JIU)
     - ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,JK+KKL) * PIMPL * PVARM(JI,JJ,JK  )   &
     - ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,JK    ) * PIMPL * PVARM(JI,JJ,JK  )   &
     + ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,JK    ) * PIMPL * PVARM(JI,JJ,JK-KKL)
-END DO !CONCURRENT
+!$mnh_end_do() !CONCURRENT
 !$acc end kernels
 ! 
 !$acc kernels ! async
-#ifdef MNH_COMPILER_NVHPC
-!$acc loop independent collapse(2)
-#endif
-DO CONCURRENT (JJ=1:JJU,JI=1:JIU)
+!$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU)
 ZY(JI,JJ,IKE) = PRHODJ(JI,JJ,IKE)*PVARM(JI,JJ,IKE)/PTSTEP               &
     - ZMZM_RHODJ(JI,JJ,IKE+KKL) * PF(JI,JJ,IKE+KKL)/PDZZ(JI,JJ,IKE+KKL) &
     + ZMZM_RHODJ(JI,JJ,IKE  ) * PF(JI,JJ,IKE  )/PDZZ(JI,JJ,IKE  )       &
     - ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,IKE ) * PIMPL * PVARM(JI,JJ,IKE  )   &
     + ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,IKE ) * PIMPL * PVARM(JI,JJ,IKE-KKL)
-END DO !CONCURRENT
+!$mnh_end_do() !CONCURRENT
 !$acc end kernels
 !
 ! acc wait
@@ -333,46 +324,34 @@ IF ( PIMPL > 1.E-10 ) THEN
 !            --------------
 !
 !$acc kernels ! async
-#ifdef MNH_COMPILER_NVHPC
-!$acc loop independent collapse(2)   
-#endif
-DO CONCURRENT (JJ=1:JJU,JI=1:JIU)   
+!$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU)   
   ZB(JI,JJ,IKB) =   PRHODJ(JI,JJ,IKB)/PTSTEP                   &
                 - ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,IKB+KKL) * PIMPL
-END DO !CONCURRENT 
+!$mnh_end_do() !CONCURRENT 
 !$acc end kernels
 !
 !$acc kernels ! async
-#ifdef MNH_COMPILER_NVHPC
-!$acc loop independent collapse(2)
-#endif
-DO CONCURRENT (JJ=1:JJU,JI=1:JIU)
+!$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU)
   ZC(JI,JJ,IKB) =   ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,IKB+KKL) * PIMPL
-END DO !CONCURRENT
+!$mnh_end_do() !CONCURRENT
 !$acc end kernels
 !
 !$acc kernels ! async
-#ifdef MNH_COMPILER_NVHPC
-!$acc loop independent collapse(3)
-#endif
-DO CONCURRENT (JK=IKTB+1:IKTE-1,JJ=1:JJU,JI=1:JIU)
+!$mnh_do_concurrent (JK=IKTB+1:IKTE-1,JJ=1:JJU,JI=1:JIU)
   ZA(JI,JJ,JK) =   ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,JK) * PIMPL
   ZB(JI,JJ,JK) =   PRHODJ(JI,JJ,JK)/PTSTEP                        &
                           - ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,JK+KKL) * PIMPL &
                           - ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,JK) * PIMPL
   ZC(JI,JJ,JK) =   ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,JK+KKL) * PIMPL
-END DO !CONCURRENT
+!$mnh_end_do() !CONCURRENT
 !$acc end kernels
 !
 !$acc kernels ! async
-#ifdef MNH_COMPILER_NVHPC
-!$acc loop independent collapse(2)
-#endif
-DO CONCURRENT (JJ=1:JJU,JI=1:JIU)
+!$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU)
   ZA(JI,JJ,IKE) =   ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,IKE  ) * PIMPL
   ZB(JI,JJ,IKE) =   PRHODJ(JI,JJ,IKE)/PTSTEP                   &
                 - ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,IKE  ) * PIMPL
-END DO !CONCURRENT
+!$mnh_end_do() !CONCURRENT
 !$acc end kernels
 !
 ! acc wait
@@ -382,13 +361,10 @@ END DO !CONCURRENT
 !            --------
 !
 !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-!$acc loop independent collapse(2)
-#endif
-DO CONCURRENT (JJ=1:JJU,JI=1:JIU)
+!$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU)
   ZBET(JI,JJ) = ZB(JI,JJ,IKB)  ! bet = b(ikb)
   PVARP(JI,JJ,IKB) = ZY(JI,JJ,IKB) / ZBET(JI,JJ)
-END DO !CONCURRENT
+!$mnh_end_do() !CONCURRENT
 !$acc end kernels
 !
 !$acc parallel
@@ -397,32 +373,27 @@ DO JK = IKB+KKL,IKE-KKL,KKL
 #ifdef MNH_COMPILER_NVHPC
    ! gang+vector needed or parallisation vector only
    !$acc loop independent gang, vector collapse(2)   
-#else
-   !$acc loop independent   
 #endif
-   DO CONCURRENT (JJ=1:JJU,JI=1:JIU)
+   !$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU)
       ZGAM(JI,JJ,JK) = ZC(JI,JJ,JK-KKL) / ZBET(JI,JJ)  
       ! gam(k) = c(k-1) / bet
       ZBET(JI,JJ)    = ZB(JI,JJ,JK) - ZA(JI,JJ,JK) * ZGAM(JI,JJ,JK)
       ! bet = b(k) - a(k)* gam(k)  
       PVARP(JI,JJ,JK)= ( ZY(JI,JJ,JK) - ZA(JI,JJ,JK) * PVARP(JI,JJ,JK-KKL) ) / ZBET(JI,JJ)
       ! res(k) = (y(k) -a(k)*res(k-1))/ bet
-   END DO !CONCURRENT 
+   !$mnh_end_do() !CONCURRENT 
 END DO
 !$acc end parallel
 !$acc kernels
 ! special treatment for the last level
-#ifdef MNH_COMPILER_NVHPC
-!$acc loop independent collapse(2)
-#endif
-DO CONCURRENT (JJ=1:JJU,JI=1:JIU)
+!$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU)
       ZGAM(JI,JJ,IKE) = ZC(JI,JJ,IKE-KKL) / ZBET(JI,JJ) 
       ! gam(k) = c(k-1) / bet
       ZBET(JI,JJ)     = ZB(JI,JJ,IKE) - ZA(JI,JJ,IKE) * ZGAM(JI,JJ,IKE)
       ! bet = b(k) - a(k)* gam(k)  
       PVARP(JI,JJ,IKE)= ( ZY(JI,JJ,IKE) - ZA(JI,JJ,IKE) * PVARP(JI,JJ,IKE-KKL) ) / ZBET(JI,JJ)
       ! res(k) = (y(k) -a(k)*res(k-1))/ bet 
-END DO !CONCURRENT
+!$mnh_end_do() !CONCURRENT
 !$acc end kernels
 !
 !*       3.3 going down
@@ -434,24 +405,19 @@ DO JK = IKE-KKL,IKB,-1*KKL
 #ifdef MNH_COMPILER_NVHPC
    ! gang+vector needed or parallisation vector only
    !$acc loop independent gang, vector collapse(2)   
-#else
-   !$acc loop independent   
 #endif
-   DO CONCURRENT (JJ=1:JJU,JI=1:JIU)
+   !$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU)
       PVARP(JI,JJ,JK) = PVARP(JI,JJ,JK) - ZGAM(JI,JJ,JK+KKL) * PVARP(JI,JJ,JK+KKL)
-   END DO !CONCURRENT
+   !$mnh_end_do() !CONCURRENT
 END DO
 !$acc end parallel
 !
 ELSE
 ! 
 !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-!$acc loop independent collapse(3)   
-#endif
-DO CONCURRENT (JK=IKTB:IKTE,JJ=1:JJU,JI=1:JIU)   
+!$mnh_do_concurrent (JK=IKTB:IKTE,JJ=1:JJU,JI=1:JIU)   
    PVARP(JI,JJ,JK) = ZY(JI,JJ,JK) * PTSTEP / PRHODJ(JI,JJ,JK)
-END DO !CONCURRENT
+!$mnh_end_do() !CONCURRENT
 !$acc end kernels
 !
 END IF 
@@ -461,13 +427,10 @@ END IF
 !            ----------------------------------------
 !
 !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-!$acc loop independent collapse(2)
-#endif
-DO CONCURRENT (JJ=1:JJU,JI=1:JIU)
+!$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU)
    PVARP(JI,JJ,KKA)=PVARP(JI,JJ,IKB)
    PVARP(JI,JJ,KKU)=PVARP(JI,JJ,IKE)
-END DO !CONCURRENT
+!$mnh_end_do() !CONCURRENT
 !$acc end kernels
 
 if ( mppdb_initialized ) then
diff --git a/src/MNH/tridiag_tke.f90 b/src/MNH/tridiag_tke.f90
index 89840fb59..ba836e09c 100644
--- a/src/MNH/tridiag_tke.f90
+++ b/src/MNH/tridiag_tke.f90
@@ -221,42 +221,31 @@ IKE=KKU-JPVEXT_TURB*KKL
 !$acc kernels
 !
 !
-#ifdef MNH_COMPILER_NVHPC
-!$acc loop independent collapse(2)
-#endif
-DO CONCURRENT (JJ=1:JJU,JI=1:JIU)
+!$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU)
    ZY(JI,JJ,IKB) = PVARM(JI,JJ,IKB)  + PTSTEP*PSOURCE(JI,JJ,IKB) -   &
         PEXPL / PRHODJ(JI,JJ,IKB) * PA(JI,JJ,IKB+KKL) * (PVARM(JI,JJ,IKB+KKL) - PVARM(JI,JJ,IKB))
-END DO !CONCURRENT
+!$mnh_end_do() !CONCURRENT
 !$acc end kernels
 !
 !$acc parallel
 !$acc loop seq
 DO JK=IKTB+1,IKTE-1
-#ifdef MNH_COMPILER_NVHPC
-   !$acc loop independent collapse(2)
-#else
-   !$acc loop independent
-#endif
-   DO CONCURRENT (JJ=1:JJU,JI=1:JIU)
+   !$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU)
       ZY(JI,JJ,JK)= PVARM(JI,JJ,JK)  + PTSTEP*PSOURCE(JI,JJ,JK) -               &
            PEXPL / PRHODJ(JI,JJ,JK) *                                           &
            ( PVARM(JI,JJ,JK-KKL)*PA(JI,JJ,JK)                &
            -PVARM(JI,JJ,JK)*(PA(JI,JJ,JK)+PA(JI,JJ,JK+KKL))   &
            +PVARM(JI,JJ,JK+KKL)*PA(JI,JJ,JK+KKL)              &
            )
-   END DO !CONCURRENT
+   !$mnh_end_do() !CONCURRENT
 END DO
 !$acc end parallel
 !
 !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-!$acc loop independent collapse(2)
-#endif
-DO CONCURRENT (JJ=1:JJU,JI=1:JIU)
+!$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU)
    ZY(JI,JJ,IKE)= PVARM(JI,JJ,IKE) + PTSTEP*PSOURCE(JI,JJ,IKE) +               &
         PEXPL / PRHODJ(JI,JJ,IKE) * PA(JI,JJ,IKE) * (PVARM(JI,JJ,IKE)-PVARM(JI,JJ,IKE-KKL))
-END DO !CONCURRENT
+!$mnh_end_do() !CONCURRENT
 !$acc end kernels
 !
 !
@@ -268,14 +257,11 @@ IF ( PIMPL > 1.E-10 ) THEN
   !
   !  going up
   !
-#ifdef MNH_COMPILER_NVHPC
-  !$acc loop independent collapse(2)
-#endif
-  DO CONCURRENT (JJ=1:JJU,JI=1:JIU) 
+  !$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU) 
      ZBET(JI,JJ) = 1. + PIMPL * (PDIAG(JI,JJ,IKB)-PA(JI,JJ,IKB+KKL) / PRHODJ(JI,JJ,IKB))
      ! bet = b(ikb)
      PVARP(JI,JJ,IKB) = ZY(JI,JJ,IKB) / ZBET(JI,JJ)
-  END DO !CONCURRENT
+  !$mnh_end_do() !CONCURRENT
   !
 !$acc end kernels
 !$acc parallel
@@ -283,10 +269,8 @@ IF ( PIMPL > 1.E-10 ) THEN
   DO JK = IKB+KKL,IKE-KKL,KKL
 #ifdef MNH_COMPILER_NVHPC     
      !$acc loop gang, vector collapse(2) independent
-#else
-     !$acc loop independent
 #endif
-     DO CONCURRENT (JJ=1:JJU,JI=1:JIU)
+     !$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU)
         ZGAM(JI,JJ,JK) = PIMPL * PA(JI,JJ,JK) / PRHODJ(JI,JJ,JK-KKL) / ZBET(JI,JJ)  
                                                     ! gam(k) = c(k-1) / bet
         ZBET(JI,JJ)    = 1. + PIMPL * ( PDIAG(JI,JJ,JK) -                 &
@@ -298,15 +282,12 @@ IF ( PIMPL > 1.E-10 ) THEN
                     * PVARP(JI,JJ,JK-KKL)                                         &
                    ) / ZBET(JI,JJ)
                                         ! res(k) = (y(k) -a(k)*res(k-1))/ bet 
-     END DO
+     !$mnh_end_do()
   END DO 
 !$acc end parallel
 !$acc kernels  
   ! special treatment for the last level
-#ifdef MNH_COMPILER_NVHPC
-  !$acc loop independent collapse(2)
-#endif
-  DO CONCURRENT (JJ=1:JJU,JI=1:JIU)
+  !$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU)
      ZGAM(JI,JJ,IKE) = PIMPL * PA(JI,JJ,IKE) / PRHODJ(JI,JJ,IKE-KKL) / ZBET(JI,JJ) 
      ! gam(k) = c(k-1) / bet
      ZBET(JI,JJ)    = 1. + PIMPL * ( PDIAG(JI,JJ,IKE) -                   &
@@ -317,7 +298,7 @@ IF ( PIMPL > 1.E-10 ) THEN
           * PVARP(JI,JJ,IKE-KKL)                      &
           ) / ZBET(JI,JJ)
      ! res(k) = (y(k) -a(k)*res(k-1))/ bet
-  END DO !CONCURRENT
+  !$mnh_end_do() !CONCURRENT
 !$acc end kernels
   !
   !  going down
@@ -325,26 +306,18 @@ IF ( PIMPL > 1.E-10 ) THEN
 !$acc parallel  
   !$acc loop seq
   DO JK = IKE-KKL,IKB,-1*KKL
-#ifdef MNH_COMPILER_NVHPC
-     !$acc loop gang, vector collapse(2)
-#else
-     !$acc loop independent
-#endif
-     DO CONCURRENT (JJ=1:JJU,JI=1:JIU)
+     !$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU)
         PVARP(JI,JJ,JK) = PVARP(JI,JJ,JK) - ZGAM(JI,JJ,JK+KKL) * PVARP(JI,JJ,JK+KKL)
-     END DO !CONCURRENT   
+     !$mnh_end_do() !CONCURRENT   
   END DO
 !$acc end parallel
 !  
 ELSE
   !
 !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-  !$acc loop independent collapse(2)
-#endif
-  DO CONCURRENT (JJ=1:JJU,JI=1:JIU) 
+  !$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU) 
      PVARP(JI,JJ,IKTB:IKTE) = ZY(JI,JJ,IKTB:IKTE)
-  END DO !CONCURRENT   
+  !$mnh_end_do() !CONCURRENT   
 !
 !$acc end kernels
 END IF
@@ -354,13 +327,10 @@ END IF
 !            ----------------------------------------
 !
 !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-!$acc loop independent collapse(2)
-#endif
-DO CONCURRENT (JJ=1:JJU,JI=1:JIU)
+!$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU)
    PVARP(JI,JJ,KKA)=PVARP(JI,JJ,IKB)
    PVARP(JI,JJ,KKU)=PVARP(JI,JJ,IKE)
-END DO !CONCURRENT
+!$mnh_end_do() !CONCURRENT
 !$acc end kernels
 
 if ( mppdb_initialized ) then
diff --git a/src/MNH/turb.f90 b/src/MNH/turb.f90
index abfde1c07..9b44aed1e 100644
--- a/src/MNH/turb.f90
+++ b/src/MNH/turb.f90
@@ -761,9 +761,9 @@ ELSE
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
   ZEXN(:,:,:) = (PPABST(:,:,:)/XP00) ** (XRD/XCPD)
 #else
-DO CONCURRENT(JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent(JI=1:JIU,JJ=1:JJU,JK=1:JKU)
   ZEXN(JI,JJ,JK) = BR_POW(PPABST(JI,JJ,JK)/XP00,XRD/XCPD)
-END DO
+!$mnh_end_do()
 #endif
 END IF
 !
@@ -812,11 +812,11 @@ IF (KRRL >=1) THEN
                                  ZLSOCPEXNM,ZAMOIST_ICE,ZATHETA_ICE)
 !
 !$acc kernels present_cr( zamoist, zatheta, zlocpexnm, zlvocpexnm, zlsocpexnm, zamoist_ice, zatheta_ice )    
-    DO CONCURRENT(JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent(JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        IF (PRT(JI,JJ,JK,2)+PRT(JI,JJ,JK,4)>0.0) THEN
           ZFRAC_ICE(JI,JJ,JK) = PRT(JI,JJ,JK,4) / ( PRT(JI,JJ,JK,2)+PRT(JI,JJ,JK,4) )
        END IF
-    END DO
+    !$mnh_end_do()
 !
     ZLOCPEXNM(:,:,:) = (1.0-ZFRAC_ICE(:,:,:))*ZLVOCPEXNM(:,:,:) &
                            +ZFRAC_ICE(:,:,:) *ZLSOCPEXNM(:,:,:)
@@ -878,7 +878,7 @@ END IF              ! loop end on KRRL >= 1
 IF ( KRRL >= 1 ) THEN
 !$acc kernels present_cr( zlocpexnm )
   IF ( KRRI >= 1 ) THEN
-    DO CONCURRENT (JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent (JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ! Rnp at t
        PRT(JI,JJ,JK,1)  = PRT(JI,JJ,JK,1)  + PRT(JI,JJ,JK,2)  + PRT(JI,JJ,JK,4)
        PRRS(JI,JJ,JK,1) = PRRS(JI,JJ,JK,1) + PRRS(JI,JJ,JK,2) + PRRS(JI,JJ,JK,4)
@@ -887,16 +887,16 @@ IF ( KRRL >= 1 ) THEN
             - ZLSOCPEXNM(JI,JJ,JK) * PRT(JI,JJ,JK,4)
        PRTHLS(JI,JJ,JK) = PRTHLS(JI,JJ,JK) - ZLVOCPEXNM(JI,JJ,JK) * PRRS(JI,JJ,JK,2) &
             - ZLSOCPEXNM(JI,JJ,JK) * PRRS(JI,JJ,JK,4)
-    ENDDO
+    !$mnh_end_do()
  ELSE
-    DO CONCURRENT (JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent (JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ! Rnp at t   
        PRT(JI,JJ,JK,1)  = PRT(JI,JJ,JK,1)  + PRT(JI,JJ,JK,2) 
        PRRS(JI,JJ,JK,1) = PRRS(JI,JJ,JK,1) + PRRS(JI,JJ,JK,2)
        ! Theta_l at t
        PTHLT(JI,JJ,JK)  = PTHLT(JI,JJ,JK)  - ZLOCPEXNM(JI,JJ,JK) * PRT(JI,JJ,JK,2)
        PRTHLS(JI,JJ,JK) = PRTHLS(JI,JJ,JK) - ZLOCPEXNM(JI,JJ,JK) * PRRS(JI,JJ,JK,2)
-    ENDDO
+    !$mnh_end_do()
  END IF
 !$acc end kernels
 END IF
@@ -1085,10 +1085,10 @@ ENDIF
                         (XMNH_TINY + ZUSLOPE(:,:)**2 + ZVSLOPE(:,:)**2 ) )
 #else
   !$acc_nv loop independent collapse(2)
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU )
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU )
      ZCDUEFF(JI,JJ) =-SQRT ( (BR_P2(PSFU(JI,JJ)) + BR_P2(PSFV(JI,JJ))) /                  &
                     (XMNH_TINY + BR_P2(ZUSLOPE(JI,JJ)) + BR_P2(ZVSLOPE(JI,JJ)) ) )     
-  END DO
+  !$mnh_end_do()
 #endif
 !$acc end kernels
 !
@@ -1870,9 +1870,9 @@ CALL MNH_MEM_GET( zdrvsatdt, size( pexn, 1 ), size( pexn, 2 ), size( pexn, 3 ) )
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
   ZRVSAT(:,:,:) =  EXP( PALP - PBETA/PT(:,:,:) - PGAM*ALOG( PT(:,:,:) ) )
 #else
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZRVSAT(JI,JJ,JK) =  BR_EXP( PALP - PBETA/PT(JI,JJ,JK) - PGAM*BR_LOG( PT(JI,JJ,JK) ) )
-  END DO
+  !$mnh_end_do()
 #endif
 !$acc end kernels  
 !$acc kernels present_cr(ZRVSAT,ZDRVSATDT)
@@ -1909,7 +1909,7 @@ CALL MNH_MEM_GET( zdrvsatdt, size( pexn, 1 ), size( pexn, 2 ), size( pexn, 3 ) )
 #else
 !$acc kernels
 !$acc_nv loop independent collapse(3)
-DO CONCURRENT(JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent(JI=1:JIU,JJ=1:JJU,JK=1:JKU)
  PATHETA(JI,JJ,JK)= PAMOIST(JI,JJ,JK) * PEXN(JI,JJ,JK) *                             &
         ( ( ZRVSAT(JI,JJ,JK) - PRT(JI,JJ,JK,1) ) * PLOCPEXN(JI,JJ,JK) /              &
           ( 1. + ZDRVSATDT(JI,JJ,JK) * PLOCPEXN(JI,JJ,JK) )        *                 &
@@ -1921,7 +1921,7 @@ DO CONCURRENT(JI=1:JIU,JJ=1:JJU,JK=1:JKU)
           )                                                                          &
          - ZDRVSATDT(JI,JJ,JK)                                                       &
         )
-ENDDO
+!$mnh_end_do()
 !$acc end kernels
 #endif
 !*      1.7 Lv/Cph/Exner at t-1
@@ -1929,9 +1929,9 @@ ENDDO
 !!$acc kernels present(PLOCPEXN)
 !$acc kernels
 !$acc_nv loop independent collapse(3)
-DO CONCURRENT(JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent(JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    PLOCPEXN(JI,JJ,JK) = PLOCPEXN(JI,JJ,JK) / PEXN(JI,JJ,JK)
-END DO
+!$mnh_end_do()
 !$acc end kernels
 
   if ( mppdb_initialized ) then
@@ -2211,6 +2211,7 @@ REAL                :: ZD           ! distance to the surface
 real, dimension(:,:,:), pointer , contiguous :: ztmp1_device, ztmp2_device
 #endif
 !
+LOGICAL :: GZD
 !-------------------------------------------------------------------------------
 JIU=SIZE(pdxx,1)
 JJU=SIZE(pdxx,2)
@@ -2271,9 +2272,9 @@ IF (ODZ) THEN
 !$acc end kernels
 #else
 !$acc kernels
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
       PLM(JI,JJ,JK) = BR_POW( PLM(JI,JJ,JK) * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK), 1./3. )
-ENDDO
+!$mnh_end_do()
 !$acc end kernels
 #endif
 #endif
@@ -2305,9 +2306,9 @@ ELSE
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
       PLM(:,:,:) = ( ZTMP1_DEVICE * ZTMP2_DEVICE ) ** (1./2.)
 #else
-   DO CONCURRENT( JI=1:JIU, JJ=1:JJU, JK=1:JKU )
+   !$mnh_do_concurrent( JI=1:JIU, JJ=1:JJU, JK=1:JKU )
       PLM(JI,JJ,JK) = BR_POW( ZTMP1_DEVICE(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK),  1. / 2. )
-   END DO
+   !$mnh_end_do()
 #endif
 !$acc end kernels
 #endif
@@ -2329,24 +2330,23 @@ IF (.NOT. ORMC01) THEN
 !$acc kernels  
   DO JJ=1,JJU
     DO JI=1,JIU
+      GZD = .TRUE.
       IF (GOCEAN) THEN
         !$acc loop seq
         DO JK=KKTE,KKTB,-1
           ZD=ZALPHA*(PZZ(JI,JJ,KKTE+1)-PZZ(JI,JJ,JK))
-          IF ( PLM(JI,JJ,JK)>ZD) THEN
+          IF ( (PLM(JI,JJ,JK)>ZD) .AND. GZD ) THEN
             PLM(JI,JJ,JK)=ZD
-          ELSE
-            EXIT
+            GZD = .FALSE.
           ENDIF
        END DO
       ELSE
         !$acc loop seq
         DO JK=KKTB,KKTE
           ZD = ZALPHA * ( 0.5 * ( PZZ(JI, JJ, JK) + PZZ(JI, JJ, JK+KKL) ) - PZZ(JI, JJ, KKB) ) * PDIRCOSZW(JI, JJ)
-          IF ( PLM(JI,JJ,JK) > ZD ) THEN
+          IF ( ( PLM(JI,JJ,JK) > ZD ) .AND. GZD ) THEN
             PLM(JI,JJ,JK) = ZD
-          ELSE
-            EXIT
+            GZD = .FALSE.
           ENDIF
         END DO
       ENDIF   
@@ -2356,12 +2356,12 @@ IF (.NOT. ORMC01) THEN
 END IF
 !
 !$acc kernels
-DO CONCURRENT(JI=1:JIU , JJ=1:JJU )
+!$mnh_do_concurrent(JI=1:JIU , JJ=1:JJU )
    PLM(JI,JJ,KKA) = PLM(JI,JJ,KKB  )
-END DO
-DO CONCURRENT(JI=1:JIU , JJ=1:JJU )
+!$mnh_end_do()
+!$mnh_do_concurrent(JI=1:JIU , JJ=1:JJU )
    PLM(JI,JJ,KKU  ) = PLM(JI,JJ,KKE)
-END DO
+!$mnh_end_do()
 !$acc end kernels
 
 !$acc end data
@@ -2469,6 +2469,7 @@ REAL, DIMENSION(:,:,:), POINTER , CONTIGUOUS :: ZTMP1_DEVICE,ZTMP2_DEVICE
 #endif
 INTEGER  :: JIU,JJU,JKU
 LOGICAL :: GOCEAN !Intermediate variable used to work around a Cray compiler bug (CCE 13.0.0)
+LOGiCAL :: GZD
 !----------------------------------------------------------------------------
 
 !$acc data present( PDXX, PDYY, PDZZ, PZZ, PDIRCOSZW, PTHLT, PTHVREF, PTKET, PSRCT, PRT, PLOCPEXNM, PATHETA, PAMOIST, PLM )
@@ -2576,9 +2577,9 @@ IF ( HTURBDIM /= '1DIM' ) THEN  ! 3D turbulence scheme
        call Mppdb_check( plm, "Dear mid1:plm" )
     end if
 !$acc kernels
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
     PLM(JI,JJ,JK) = BR_POW( PLM(JI,JJ,JK)*ZTMP1_DEVICE(JI,JJ,JK)    *ZTMP2_DEVICE(JI,JJ,JK)     , 1./3. )
-ENDDO
+!$mnh_end_do()
 !$acc end kernels
     if ( mppdb_initialized ) then
        call Mppdb_check( plm, "Dear mid2:plm" )
@@ -2600,7 +2601,7 @@ CALL EMOIST(KRR,KRRI,PTHLT,PRT,PLOCPEXNM,PAMOIST,PSRCT,ZEMOIST)
 !$acc kernels present(ZWORK2D,PLM)
 IF (KRR>0) THEN
    !$acc_nv loop independent collapse(3) private(ZVAR)
-   DO CONCURRENT( JI=1:JIU, JJ=1:JJU, JK = KKTB+1:KKTE-1)          
+   !$mnh_do_concurrent( JI=1:JIU, JJ=1:JJU, JK = KKTB+1:KKTE-1)          
             ZDTHLDZ(JI,JJ,JK)= 0.5*((PTHLT(JI,JJ,JK+KKL)-PTHLT(JI,JJ,JK    ))/PDZZ(JI,JJ,JK+KKL)+ &
                  (PTHLT(JI,JJ,JK    )-PTHLT(JI,JJ,JK-KKL))/PDZZ(JI,JJ,JK    ))
             ZDRTDZ(JI,JJ,JK) = 0.5*((PRT(JI,JJ,JK+KKL,1)-PRT(JI,JJ,JK    ,1))/PDZZ(JI,JJ,JK+KKL)+ &
@@ -2616,10 +2617,10 @@ IF (KRR>0) THEN
                PLM(JI,JJ,JK)=MAX(XMNH_EPSILON,MIN(PLM(JI,JJ,JK), &
                     0.76* SQRT(PTKET(JI,JJ,JK)/ZVAR)))
             END IF
-   END DO
+   !$mnh_end_do()
 ELSE! For dry atmos or unsalted ocean runs
    !$acc_nv loop independent collapse(3) private(ZVAR)
-   DO CONCURRENT( JI=1:JIU, JJ=1:JJU, JK = KKTB+1:KKTE-1)
+   !$mnh_do_concurrent( JI=1:JIU, JJ=1:JJU, JK = KKTB+1:KKTE-1)
             ZDTHLDZ(JI,JJ,JK)= 0.5*((PTHLT(JI,JJ,JK+KKL)-PTHLT(JI,JJ,JK    ))/PDZZ(JI,JJ,JK+KKL)+ &
                  (PTHLT(JI,JJ,JK    )-PTHLT(JI,JJ,JK-KKL))/PDZZ(JI,JJ,JK    ))
             IF (GOCEAN) THEN
@@ -2632,7 +2633,7 @@ ELSE! For dry atmos or unsalted ocean runs
                PLM(JI,JJ,JK)=MAX(XMNH_EPSILON,MIN(PLM(JI,JJ,JK), &
                     0.76* SQRT(PTKET(JI,JJ,JK)/ZVAR)))
             END IF
-   END DO
+   !$mnh_end_do()
 END IF
 !  special case near the surface
 ZDTHLDZ(:,:,KKB)=(PTHLT(:,:,KKB+KKL)-PTHLT(:,:,KKB))/PDZZ(:,:,KKB+KKL)
@@ -2652,9 +2653,9 @@ IF (GOCEAN) THEN
 #ifdef MNH_COMPILER_NVHPC
 !$acc loop independent collapse(2)
 #endif
-  DO CONCURRENT( JI = 1 : JIU, JJ = 1 : JJU )
+  !$mnh_do_concurrent( JI = 1 : JIU, JJ = 1 : JJU )
     ZWORK2D(JI,JJ)=XG*(XALPHAOC*ZDTHLDZ(JI,JJ,KKB)-XBETAOC*ZDRTDZ(JI,JJ,KKB))
-  END DO
+  !$mnh_end_do()
 #endif
 ELSE
 #if 0
@@ -2666,18 +2667,18 @@ ELSE
 #ifdef MNH_COMPILER_NVHPC
 !$acc loop independent collapse(2)
 #endif
-  DO CONCURRENT( JI = 1 : JIU, JJ = 1 : JJU )
+  !$mnh_do_concurrent( JI = 1 : JIU, JJ = 1 : JJU )
     ZWORK2D(JI,JJ)=XG/PTHVREF(JI,JJ,KKB)*                                           &
               (ZETHETA(JI,JJ,KKB)*ZDTHLDZ(JI,JJ,KKB)+ZEMOIST(JI,JJ,KKB)*ZDRTDZ(JI,JJ,KKB))
-  END DO
+  !$mnh_end_do()
 #endif
 END IF
-DO CONCURRENT(JI=1:JIU,JJ=1:JJU)
+!$mnh_do_concurrent(JI=1:JIU,JJ=1:JJU)
    IF (ZWORK2D(JI,JJ)>0.) THEN
       PLM(JI,JJ,KKB)=MAX(XMNH_EPSILON,MIN( PLM(JI,JJ,KKB),                 &
            0.76* SQRT(PTKET(JI,JJ,KKB)/ZWORK2D(JI,JJ))))
    END IF
-END DO
+!$mnh_end_do()
 !
 !  mixing length limited by the distance normal to the surface (with the same factor as for BL89)
 !
@@ -2686,14 +2687,14 @@ IF (.NOT. ORMC01) THEN
   !
   DO JJ=1,SIZE(PLM,2)
     DO JI=1,SIZE(PLM,1)
+      GZD = .TRUE.       
       IF (GOCEAN) THEN
         !$acc loop seq
         DO JK=KKTE,KKTB,-1
           ZD=ZALPHA*(PZZ(JI,JJ,KKTE+1)-PZZ(JI,JJ,JK))
-          IF ( PLM(JI,JJ,JK)>ZD) THEN
+          IF ( (PLM(JI,JJ,JK)>ZD) .AND. GZD ) THEN
             PLM(JI,JJ,JK)=ZD
-          ELSE
-            EXIT
+            GZD = .FALSE.
           ENDIF
         END DO
       ELSE
@@ -2701,10 +2702,9 @@ IF (.NOT. ORMC01) THEN
         DO JK=KKTB,KKTE
           ZD=ZALPHA*(0.5*(PZZ(JI,JJ,JK)+PZZ(JI,JJ,JK+KKL))-PZZ(JI,JJ,KKB)) &
             *PDIRCOSZW(JI,JJ)
-          IF ( PLM(JI,JJ,JK)>ZD) THEN
+          IF ( (PLM(JI,JJ,JK)>ZD) .AND. GZD ) THEN
             PLM(JI,JJ,JK)=ZD
-          ELSE
-            EXIT
+            GZD = .FALSE.
           ENDIF
         END DO
       ENDIF 
diff --git a/src/MNH/turb_hor_thermo_flux.f90 b/src/MNH/turb_hor_thermo_flux.f90
index e1fc823fd..7fbb58985 100644
--- a/src/MNH/turb_hor_thermo_flux.f90
+++ b/src/MNH/turb_hor_thermo_flux.f90
@@ -333,9 +333,9 @@ CALL MXM_DEVICE( PK, ZTMP1_DEVICE )
 CALL GX_M_U_DEVICE(1,IKU,1,PTHLM,PDXX,PDZZ,PDZX,ZTMP2_DEVICE)
 !$acc kernels present_cr(ZFLX)
 !$acc_nv loop independent collapse(3)
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_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
+!$mnh_end_do()
 ZFLX(:,:,IKE+1) = ZFLX(:,:,IKE) 
 !$acc end kernels
 #endif
@@ -374,9 +374,9 @@ ZFLX(:,:,IKB-1:IKB-1) = 2. * MXM(  SPREAD( PSFTHM(:,:)* PDIRCOSXW(:,:), 3,1) )
                        - ZFLX(:,:,IKB:IKB)
 #else
 ! acc kernels present_cr(ZTMP1_DEVICE)
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU )
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU )
    ZTMP1_DEVICE(JI,JJ,1) = PSFTHM(JI,JJ)* PDIRCOSXW(JI,JJ)
-END DO
+!$mnh_end_do()
 !$acc end kernels
   CALL MXM_DEVICE( ZTMP1_DEVICE(:,:,1:1), ZTMP2_DEVICE(:,:,1:1) )
 !$acc kernels present_cr(ZFLX)
@@ -399,30 +399,30 @@ IF (.NOT. LFLAT) THEN
   CALL MXM_DEVICE(PRHODJ, ZTMP1_DEVICE)
   !$acc kernels present_cr(ZTMP2_DEVICE)
   !$acc_nv loop independent collapse(3)
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_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
+  !$mnh_end_do()
   !$acc end kernels
   CALL DXF_DEVICE(ZTMP2_DEVICE, ZTMP3_DEVICE)
   !$acc kernels present_cr(ZTMP2_DEVICE)
   !$acc_nv loop independent collapse(3)
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_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
+  !$mnh_end_do()
   !$acc end kernels
   CALL MZM_DEVICE(ZTMP2_DEVICE,ZTMP4_DEVICE)
   !$acc kernels present_cr(ZTMP2_DEVICE)
   !$acc_nv loop independent collapse(3)
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)  
+  !$mnh_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
+  !$mnh_end_do()
 !$acc end kernels
   CALL MXF_DEVICE(ZTMP2_DEVICE, ZTMP4_DEVICE)
 !$acc kernels present_cr(ZTMP2_DEVICE)
 !$acc_nv loop independent collapse(3)  
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_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
+!$mnh_end_do()
 !$acc end kernels
   CALL DZF_DEVICE( ZTMP2_DEVICE, ZTMP4_DEVICE )
 !$acc kernels present_cr(PRTHLS)
@@ -766,9 +766,9 @@ END IF
   CALL GX_M_U_DEVICE(1,IKU,1,PRM(:,:,:,1),PDXX,PDZZ,PDZX,ZTMP2_DEVICE)
 !$acc kernels present_cr(ZFLX)
 !$acc_nv loop independent collapse(3)
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_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
+!$mnh_end_do()
   ZFLX(:,:,IKE+1) = ZFLX(:,:,IKE) 
 !$acc end kernels
 !
@@ -805,37 +805,37 @@ END DO
     CALL MXM_DEVICE(PRHODJ,ZTMP1_DEVICE)
     !$acc kernels present_cr(ZTMP2_DEVICE)
     !$acc_nv loop independent collapse(3)
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_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
+    !$mnh_end_do()
     !$acc end kernels
     CALL DXF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE )
     !$acc kernels present_cr(ZTMP2_DEVICE)
     !$acc_nv loop independent collapse(3)
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_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
+    !$mnh_end_do()
     !$acc end kernels
     CALL MZM_DEVICE(ZTMP2_DEVICE,ZTMP4_DEVICE)
     !$acc kernels present_cr(ZTMP2_DEVICE)
     !$acc_nv loop independent collapse(3)
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_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
+    !$mnh_end_do()
     !$acc end kernels
     CALL MXF_DEVICE(ZTMP2_DEVICE,ZTMP4_DEVICE)
     !$acc kernels present_cr(ZTMP2_DEVICE)
     !$acc_nv loop independent collapse(3)
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_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
+    !$mnh_end_do()
     !$acc end kernels
     CALL DZF_DEVICE(ZTMP2_DEVICE,ZTMP4_DEVICE)
     !$acc kernels
     !$acc_nv loop independent collapse(3)
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)    
+    !$mnh_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
+    !$mnh_end_do()
     !$acc end kernels
   ELSE
     CALL MXM_DEVICE(PRHODJ,ZTMP1_DEVICE)
@@ -1141,9 +1141,9 @@ END IF
   CALL GY_M_V_DEVICE(1,IKU,1,PTHLM,PDYY,PDZZ,PDZY,ZTMP2_DEVICE)
   !$acc kernels present_cr(ZFLX)
   !$acc_nv loop independent collapse(3)
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_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
+  !$mnh_end_do()
   ZFLX(:,:,IKE+1) = ZFLX(:,:,IKE) 
   !$acc end kernels
 ELSE
@@ -1188,37 +1188,37 @@ IF (.NOT. L2D) THEN
     CALL MYM_DEVICE(PRHODJ, ZTMP1_DEVICE)
     !$acc kernels present_cr(ZTMP2_DEVICE)
     !$acc_nv loop independent collapse(3)
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_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
+    !$mnh_end_do()
     !$acc end kernels
     CALL DYF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE )
     !$acc kernels present_cr(ZTMP1_DEVICE)
     !$acc_nv loop independent collapse(3)
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_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
+    !$mnh_end_do()
     !$acc end kernels
     CALL MZM_DEVICE(ZTMP1_DEVICE, ZTMP2_DEVICE)
     !$acc kernels present_cr(ZTMP1_DEVICE)
     !$acc_nv loop independent collapse(3)
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_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
+    !$mnh_end_do()
     !$acc end kernels
     CALL MYF_DEVICE(ZTMP1_DEVICE, ZTMP2_DEVICE)
     !$acc kernels present_cr(ZTMP1_DEVICE)
     !$acc_nv loop independent collapse(3)
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_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
+    !$mnh_end_do()
     !$acc end kernels
     CALL DZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )
     !$acc kernels
     !$acc_nv loop independent collapse(3)
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_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
+    !$mnh_end_do()
     !$acc end kernels
   ELSE
     CALL MYM_DEVICE(PRHODJ, ZTMP1_DEVICE)
@@ -1508,9 +1508,9 @@ IF (KRR/=0) THEN
     CALL GY_M_V_DEVICE(1,IKU,1,PRM(:,:,:,1),PDYY,PDZZ,PDZY, ZTMP2_DEVICE)
     !$acc kernels present_cr(ZFLX)
     !$acc_nv loop independent collapse(3)
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_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
+    !$mnh_end_do() !CONCURRENT
     ZFLX(:,:,IKE+1) = ZFLX(:,:,IKE) 
     !$acc end kernels
   ELSE
@@ -1554,39 +1554,39 @@ IF (KRR/=0) THEN
       CALL MYM_DEVICE(PRHODJ, ZTMP1_DEVICE)
       !$acc kernels present_cr(ZTMP2_DEVICE)
       !$acc_nv loop independent collapse(3)
-      DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+      !$mnh_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
+      !$mnh_end_do()
       !$acc end kernels
       CALL DYF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE )
       !
       !$acc kernels present_cr(ZTMP1_DEVICE)
       !$acc_nv loop independent collapse(3)
-      DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+      !$mnh_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
+      !$mnh_end_do()
       !$acc end kernels
       CALL MZM_DEVICE(ZTMP1_DEVICE,ZTMP2_DEVICE)
       !$acc kernels present_cr(ZTMP1_DEVICE)
       !$acc_nv loop independent collapse(3)
-      DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+      !$mnh_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
+      !$mnh_end_do()
       !$acc end kernels
       CALL MYF_DEVICE(ZTMP1_DEVICE,ZTMP2_DEVICE)
       !$acc kernels present_cr(ZTMP1_DEVICE)
       !$acc_nv loop independent collapse(3)
-      DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+      !$mnh_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
+      !$mnh_end_do()
       !$acc end kernels
       CALL DZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )
       !
       !$acc kernels
       !$acc_nv loop independent collapse(3)
-      DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+      !$mnh_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
+      !$mnh_end_do()
       !$acc end kernels
     ELSE
       CALL MYM_DEVICE(PRHODJ, ZTMP1_DEVICE)
diff --git a/src/MNH/turb_hor_tke.f90 b/src/MNH/turb_hor_tke.f90
index d538b366d..2e97d39d2 100644
--- a/src/MNH/turb_hor_tke.f90
+++ b/src/MNH/turb_hor_tke.f90
@@ -227,9 +227,9 @@ CALL GX_M_U_DEVICE(1,IKU,1,PTKEM,PDXX,PDZZ,PDZX,ZTMP2_DEVICE)
 #ifdef MNH_COMPILER_NVHPC
 !$acc loop independent collapse(3)
 #endif
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZFLX(JI,JJ,JK) = -XCET * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK) ! < u'e >
-END DO !CONCURRENT    
+!$mnh_end_do() !CONCURRENT    
 #endif
 !
 ! special case near the ground ( uncentred gradient )
@@ -237,11 +237,11 @@ END DO !CONCURRENT
 #ifdef MNH_COMPILER_NVHPC
 !$acc loop independent collapse(2)
 #endif
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU )
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU )
    ZFLX(JI,JJ,IKB) =  ZCOEFF(JI,JJ,IKB+2)*PTKEM(JI,JJ,IKB+2)                     &
                  + ZCOEFF(JI,JJ,IKB+1)*PTKEM(JI,JJ,IKB+1)                     &
                  + ZCOEFF(JI,JJ,IKB  )*PTKEM(JI,JJ,IKB  )
-END DO
+!$mnh_end_do()
 !$acc end kernels 
 !
 #ifndef MNH_OPENACC
@@ -298,45 +298,45 @@ IF (.NOT. LFLAT) THEN
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_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 !CONCURRENT   
+  !$mnh_end_do() !CONCURRENT   
   !$acc end kernels 
   CALL DXF_DEVICE(ZTMP2_DEVICE,ZTMP1_DEVICE)
   !$acc kernels
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_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 !CONCURRENT   
+  !$mnh_end_do() !CONCURRENT   
   !$acc end kernels 
   CALL MZM_DEVICE(ZTMP2_DEVICE,ZTMP3_DEVICE)
   !$acc kernels
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZTMP2_DEVICE(JI,JJ,JK) = PDZX(JI,JJ,JK) * ZTMP3_DEVICE(JI,JJ,JK)
-  END DO !CONCURRENT   
+  !$mnh_end_do() !CONCURRENT   
   !$acc end kernels 
   CALL MXF_DEVICE( ZTMP2_DEVICE,ZTMP3_DEVICE)
   !$acc kernels
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZTMP2_DEVICE(JI,JJ,JK) = PMZM_PRHODJ(JI,JJ,JK) * ZTMP3_DEVICE(JI,JJ,JK) * PINV_PDZZ(JI,JJ,JK)
-  END DO !CONCURRENT   
+  !$mnh_end_do() !CONCURRENT   
   !$acc end kernels 
   CALL DZF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE )
   !$acc kernels
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      PTRH(JI,JJ,JK) =-( ZTMP1_DEVICE(JI,JJ,JK) - ZTMP3_DEVICE(JI,JJ,JK) ) /PRHODJ(JI,JJ,JK)
-  END DO !CONCURRENT   
+  !$mnh_end_do() !CONCURRENT   
   !$acc end kernels 
 ELSE
   CALL MXM_DEVICE(PRHODJ,ZTMP1_DEVICE)
@@ -380,9 +380,9 @@ IF (.NOT. L2D) THEN
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-   DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+   !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
       ZFLX(JI,JJ,JK) =-XCET * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK) ! < v'e >
-   END DO !CONCURRENT   
+   !$mnh_end_do() !CONCURRENT   
    !$acc end kernels  
 #endif
 !
@@ -454,46 +454,46 @@ IF (.NOT. L2D) THEN
 #ifdef MNH_COMPILER_NVHPC
     !$acc loop independent collapse(3)
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_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 !CONCURRENT   
+    !$mnh_end_do() !CONCURRENT   
     !$acc end kernels 
     CALL DYF_DEVICE(ZTMP2_DEVICE,ZTMP1_DEVICE)
     !$acc kernels
 #ifdef MNH_COMPILER_NVHPC
     !$acc loop independent collapse(3)
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP2_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK)*PINV_PDYY(JI,JJ,JK)
-    END DO !CONCURRENT   
+    !$mnh_end_do() !CONCURRENT   
     !$acc end kernels 
     CALL MZM_DEVICE(ZTMP2_DEVICE,ZTMP3_DEVICE)
     !$acc kernels
 #ifdef MNH_COMPILER_NVHPC
     !$acc loop independent collapse(3)
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP2_DEVICE(JI,JJ,JK) = PDZY(JI,JJ,JK) * ZTMP3_DEVICE(JI,JJ,JK)
-    END DO !CONCURRENT   
+    !$mnh_end_do() !CONCURRENT   
     !$acc end kernels 
     CALL MYF_DEVICE(ZTMP2_DEVICE,ZTMP3_DEVICE)
     !$acc kernels
 #ifdef MNH_COMPILER_NVHPC
     !$acc loop independent collapse(3)
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP2_DEVICE(JI,JJ,JK) = PMZM_PRHODJ(JI,JJ,JK) * ZTMP3_DEVICE(JI,JJ,JK) * PINV_PDZZ(JI,JJ,JK)
-    END DO !CONCURRENT   
+    !$mnh_end_do() !CONCURRENT   
     !$acc end kernels 
     CALL DZF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE )
     !$acc kernels
 #ifdef MNH_COMPILER_NVHPC
     !$acc loop independent collapse(3)
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        PTRH(JI,JJ,JK) = PTRH(JI,JJ,JK) - (  ZTMP1_DEVICE(JI,JJ,JK) - ZTMP3_DEVICE(JI,JJ,JK) ) &
             /PRHODJ(JI,JJ,JK)
-    END DO !CONCURRENT   
+    !$mnh_end_do() !CONCURRENT   
     !$acc end kernels 
   ELSE
     CALL MYM_DEVICE(PRHODJ,ZTMP1_DEVICE)
diff --git a/src/MNH/turb_hor_uw.f90 b/src/MNH/turb_hor_uw.f90
index 186fb9de8..0c003af62 100644
--- a/src/MNH/turb_hor_uw.f90
+++ b/src/MNH/turb_hor_uw.f90
@@ -289,9 +289,9 @@ CALL MXM_DEVICE(ZTMP1_DEVICE,ZTMP2_DEVICE)
 #ifdef MNH_COMPILER_NVHPC
 !$acc loop independent collapse(3)
 #endif
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZFLX(JI,JJ,JK) = - XCMFS * ZTMP2_DEVICE(JI,JJ,JK) * GX_W_UW_PWM(JI,JJ,JK)
-END DO !CONCURRENT   
+!$mnh_end_do() !CONCURRENT   
 #endif
 !!         &  to be tested
 !!  - (2./3.) * XCMFB * MZM( ZVPTU * MXM( PLM / SQRT(PTKEM) * XG / PTHVREF ) )
@@ -332,18 +332,18 @@ CALL MXM_DEVICE( PDZZ, ZTMP2_DEVICE )
 #ifdef MNH_COMPILER_NVHPC
 !$acc loop independent collapse(3)
 #endif
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZTMP3_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK)* ZTMP1_DEVICE(JI,JJ,JK) / ZTMP2_DEVICE(JI,JJ,JK)
-END DO !CONCURRENT   
+!$mnh_end_do() !CONCURRENT   
 !$acc end kernels
 CALL DZF_DEVICE( ZTMP3_DEVICE, ZTMP1_DEVICE )
 !$acc kernels
 #ifdef MNH_COMPILER_NVHPC
 !$acc loop independent collapse(3)
 #endif
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    PRUS(JI,JJ,JK) = PRUS(JI,JJ,JK) - ZTMP1_DEVICE(JI,JJ,JK)
-END DO !CONCURRENT   
+!$mnh_end_do() !CONCURRENT   
 !$acc end kernels
 #endif
 !
@@ -362,18 +362,18 @@ END IF
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * PINV_PDXX(JI,JJ,JK)
-  END DO !CONCURRENT   
+  !$mnh_end_do() !CONCURRENT   
   !$acc end kernels
   CALL MZM_DEVICE(ZTMP2_DEVICE, ZTMP1_DEVICE)
   !$acc kernels
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_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)
-  END DO !CONCURRENT   
+  !$mnh_end_do() !CONCURRENT   
   !$acc end kernels
   CALL DXF_DEVICE( ZTMP2_DEVICE,ZTMP1_DEVICE)
 IF (.NOT. LFLAT) THEN
@@ -381,18 +381,18 @@ IF (.NOT. LFLAT) THEN
 #ifdef MNH_COMPILER_NVHPC
    !$acc loop independent collapse(3)
 #endif
-   DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+   !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
       ZTMP2_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK)*PDZX(JI,JJ,JK)
-   END DO !CONCURRENT   
+   !$mnh_end_do() !CONCURRENT   
    !$acc end kernels
    CALL MZF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE )
    !$acc kernels
 #ifdef MNH_COMPILER_NVHPC
    !$acc loop independent collapse(3)
 #endif
-   DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+   !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZTMP2_DEVICE(JI,JJ,JK) = ZTMP3_DEVICE(JI,JJ,JK)*PINV_PDXX(JI,JJ,JK)
-   END DO !CONCURRENT  
+   !$mnh_end_do() !CONCURRENT  
    !$acc end kernels
    CALL MXF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE )
    CALL MZF_DEVICE( PDZZ, ZTMP2_DEVICE )
@@ -400,20 +400,20 @@ IF (.NOT. LFLAT) THEN
 #ifdef MNH_COMPILER_NVHPC
    !$acc loop independent collapse(3)
 #endif
-   DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+   !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
       ZTMP4_DEVICE(JI,JJ,JK) = PRHODJ(JI,JJ,JK) * ZTMP3_DEVICE(JI,JJ,JK) / ZTMP2_DEVICE(JI,JJ,JK)
-   END DO !CONCURRENT   
+   !$mnh_end_do() !CONCURRENT   
    !$acc end kernels
    CALL DZM_DEVICE( ZTMP4_DEVICE, ZTMP2_DEVICE )
    !$acc kernels
 #ifdef MNH_COMPILER_NVHPC
    !$acc loop independent collapse(3)
 #endif
-   DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+   !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
       PRWS(JI,JJ,JK) = PRWS(JI,JJ,JK)         &
            - ZTMP1_DEVICE(JI,JJ,JK)           &
            + ZTMP2_DEVICE(JI,JJ,JK)
-   END DO !CONCURRENT
+   !$mnh_end_do() !CONCURRENT
    !$acc end kernels
 ELSE 
   !$acc kernels
@@ -435,9 +435,9 @@ IF (KSPLT==1) THEN
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZTMP2_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK) *( ZTMP1_DEVICE(JI,JJ,JK) + GX_W_UW_PWM(JI,JJ,JK) )
-  END DO !CONCURRENT   
+  !$mnh_end_do() !CONCURRENT   
   !$acc end kernels
   CALL MXF_DEVICE( ZTMP2_DEVICE,ZTMP1_DEVICE )
   CALL MZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )
@@ -445,9 +445,9 @@ IF (KSPLT==1) THEN
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZWORK(JI,JJ,JK) = -ZTMP2_DEVICE(JI,JJ,JK)
-  END DO !CONCURRENT   
+  !$mnh_end_do() !CONCURRENT   
   !$acc end kernels
 #endif
   !
diff --git a/src/MNH/turb_hor_vw.f90 b/src/MNH/turb_hor_vw.f90
index 023773412..7f67565d3 100644
--- a/src/MNH/turb_hor_vw.f90
+++ b/src/MNH/turb_hor_vw.f90
@@ -289,9 +289,9 @@ IF (.NOT. L2D) THEN
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZFLX(JI,JJ,JK) = - XCMFS * ZTMP2_DEVICE(JI,JJ,JK) * GY_W_VW_PWM(JI,JJ,JK)
-  END DO !CONCURRENT
+  !$mnh_end_do() !CONCURRENT
   !$acc end kernels
 #endif
 ELSE
@@ -339,18 +339,18 @@ IF (.NOT. L2D) THEN
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZTMP3_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK)* ZTMP1_DEVICE(JI,JJ,JK) / ZTMP2_DEVICE(JI,JJ,JK)
-  END DO !CONCURRENT   
+  !$mnh_end_do() !CONCURRENT   
   !$acc end kernels
   CALL DZF_DEVICE( ZTMP3_DEVICE, ZTMP1_DEVICE )
   !$acc kernels
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      PRVS(JI,JJ,JK) = PRVS(JI,JJ,JK) - ZTMP1_DEVICE(JI,JJ,JK)
-  END DO !CONCURRENT   
+  !$mnh_end_do() !CONCURRENT   
   !$acc end kernels
 ENDIF
 #endif
@@ -374,36 +374,36 @@ IF (.NOT. L2D) THEN
 #ifdef MNH_COMPILER_NVHPC
     !$acc loop independent collapse(3)
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * PINV_PDYY(JI,JJ,JK)
-    END DO !CONCURRENT  
+    !$mnh_end_do() !CONCURRENT  
     !$acc end kernels
     CALL MZM_DEVICE(ZTMP2_DEVICE, ZTMP1_DEVICE)
     !$acc kernels
 #ifdef MNH_COMPILER_NVHPC
     !$acc loop independent collapse(3)
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_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)
-    END DO !CONCURRENT   
+    !$mnh_end_do() !CONCURRENT   
     !$acc end kernels
     CALL DYF_DEVICE( ZTMP2_DEVICE, ZTMP1_DEVICE )
     !$acc kernels
 #ifdef MNH_COMPILER_NVHPC
     !$acc loop independent collapse(3)
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP2_DEVICE(JI,JJ,JK)  = ZFLX(JI,JJ,JK) *PDZY(JI,JJ,JK) 
-    END DO !CONCURRENT   
+    !$mnh_end_do() !CONCURRENT   
     !$acc end kernels
     CALL MZF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE )
     !$acc kernels
 #ifdef MNH_COMPILER_NVHPC
     !$acc loop independent collapse(3)
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP2_DEVICE(JI,JJ,JK) = ZTMP3_DEVICE(JI,JJ,JK) * PINV_PDYY(JI,JJ,JK)
-    END DO !CONCURRENT  
+    !$mnh_end_do() !CONCURRENT  
     !$acc end kernels
     CALL MYF_DEVICE(ZTMP2_DEVICE,ZTMP3_DEVICE)
     CALL MZF_DEVICE( PDZZ, ZTMP2_DEVICE )
@@ -411,20 +411,20 @@ IF (.NOT. L2D) THEN
 #ifdef MNH_COMPILER_NVHPC
     !$acc loop independent collapse(3)
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP4_DEVICE(JI,JJ,JK) = PRHODJ(JI,JJ,JK) * ZTMP3_DEVICE(JI,JJ,JK) / ZTMP2_DEVICE(JI,JJ,JK)
-    END DO !CONCURRENT   
+    !$mnh_end_do() !CONCURRENT   
     !$acc end kernels
     CALL DZM_DEVICE( ZTMP4_DEVICE, ZTMP2_DEVICE )
     !$acc kernels
 #ifdef MNH_COMPILER_NVHPC
     !$acc loop independent collapse(3)
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        PRWS(JI,JJ,JK) = PRWS(JI,JJ,JK)  &
             - ZTMP1_DEVICE(JI,JJ,JK)          &
             + ZTMP2_DEVICE(JI,JJ,JK)
-    END DO !CONCURRENT
+    !$mnh_end_do() !CONCURRENT
     !$acc end kernels
   ELSE
     CALL MYM_DEVICE(PRHODJ, ZTMP1_DEVICE)
@@ -456,9 +456,9 @@ IF (KSPLT==1) THEN
 #ifdef MNH_COMPILER_NVHPC
     !$acc loop independent collapse(3)
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP2_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK) *( ZTMP1_DEVICE(JI,JJ,JK) + GY_W_VW_PWM(JI,JJ,JK) )
-    END DO !CONCURRENT   
+    !$mnh_end_do() !CONCURRENT   
     !$acc end kernels
     CALL MYF_DEVICE(ZTMP2_DEVICE,ZTMP1_DEVICE)
     CALL MZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )
@@ -466,9 +466,9 @@ IF (KSPLT==1) THEN
 #ifdef MNH_COMPILER_NVHPC
     !$acc loop independent collapse(3)
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZWORK(JI,JJ,JK) = -ZTMP2_DEVICE(JI,JJ,JK)
-    END DO !CONCURRENT   
+    !$mnh_end_do() !CONCURRENT   
     !$acc end kernels
 #endif
   !
diff --git a/src/MNH/turb_ver.f90 b/src/MNH/turb_ver.f90
index 21851b90b..4963175b2 100644
--- a/src/MNH/turb_ver.f90
+++ b/src/MNH/turb_ver.f90
@@ -679,9 +679,9 @@ ENDIF
 #ifdef MNH_COMPILER_NVHPC
 !$acc loop independent collapse(3)
 #endif
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZD(JI,JJ,JK) = (1.+ZREDTH1(JI,JJ,JK)+ZREDR1(JI,JJ,JK)) * (1.+0.5*(ZREDTH1(JI,JJ,JK)+ZREDR1(JI,JJ,JK)))
-END DO   
+!$mnh_end_do()   
 !$acc end kernels
 !
 ! Phi3 and Psi3 Prandtl numbers
diff --git a/src/MNH/turb_ver_dyn_flux.f90 b/src/MNH/turb_ver_dyn_flux.f90
index f608c5be7..6046b2f54 100644
--- a/src/MNH/turb_ver_dyn_flux.f90
+++ b/src/MNH/turb_ver_dyn_flux.f90
@@ -532,9 +532,9 @@ ZSOURCE(:,:,:) = 0.
 ZDIRSINZW(:,:) = SQRT(1.-PDIRCOSZW(:,:)**2)
 #else
 !$acc_nv loop independent collapse(2)
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU )
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU )
    ZDIRSINZW(JI,JJ) = SQRT(1.-BR_P2(PDIRCOSZW(JI,JJ)))
-END DO
+!$mnh_end_do()
 #endif
 !$acc end kernels
 
@@ -584,9 +584,9 @@ CALL MXM_DEVICE( PDZZ, ZTMP4_DEVICE )
 ZA(:,:,:) = -PTSTEP * XCMFS * ZTMP1_DEVICE(:,:,:) * ZTMP3_DEVICE(:,:,:) / ZTMP4_DEVICE(:,:,:)**2
 #else
 !$acc_nv loop independent collapse(3)
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZA(JI,JJ,JK) = -PTSTEP * XCMFS * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP3_DEVICE(JI,JJ,JK) / BR_P2(ZTMP4_DEVICE(JI,JJ,JK))
-END DO
+!$mnh_end_do()
 #endif
 !$acc end kernels
 #endif
@@ -602,28 +602,28 @@ ZCOEFFLXU(:,:,1) = PCDUEFF(:,:) * (PDIRCOSZW(:,:)**2 - ZDIRSINZW(:,:)**2) &
      * PCOSSLOPE(:,:)
 #else
 !$acc_nv loop independent collapse(2)
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU )     
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU )     
    ZCOEFFLXU(JI,JJ,1) = PCDUEFF(JI,JJ) * (BR_P2(PDIRCOSZW(JI,JJ)) - BR_P2(ZDIRSINZW(JI,JJ))) &
         * PCOSSLOPE(JI,JJ)
-END DO
+!$mnh_end_do()
 #endif
 !$acc_nv loop independent collapse(2)
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU )
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU )
    ZCOEFFLXV(JI,JJ,1) = PCDUEFF(JI,JJ) * PDIRCOSZW(JI,JJ) * PSINSLOPE(JI,JJ)
    
    ! prepare the implicit scheme coefficients for the surface flux
    ZCOEFS(JI,JJ,1)=  ZCOEFFLXU(JI,JJ,1) * PCOSSLOPE(JI,JJ) * PDIRCOSZW(JI,JJ)  &
         +ZCOEFFLXV(JI,JJ,1) * PSINSLOPE(JI,JJ)
-END DO
+!$mnh_end_do()
 !
 ! average this flux to be located at the U,W vorticity point
 #ifndef MNH_OPENACC
 ZCOEFS(:,:,1:1)=MXM(ZCOEFS(:,:,1:1) / PDZZ(:,:,IKB:IKB) )
 #else
 !$acc_nv loop independent collapse(2)
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU )
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU )
    ZTMP1_DEVICE(JI,JJ,1) = ZCOEFS(JI,JJ,1) / PDZZ(JI,JJ,IKB)
-END DO
+!$mnh_end_do()
 !$acc end kernels
 CALL MXM_DEVICE(ZTMP1_DEVICE(:,:,1:1),ZCOEFS(:,:,1:1))
 #endif
@@ -729,18 +729,18 @@ ZFLXZ(:,:,:)     = -XCMFS * MXM(ZKEFF) * &
 #else
 !$acc kernels
 !$acc_nv loop independent collapse(3)
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZTMP2_DEVICE(JI,JJ,JK) = PIMPL*ZRES(JI,JJ,JK) + PEXPL*PUM(JI,JJ,JK)
-END DO
+!$mnh_end_do()
 !$acc end kernels
 CALL MXM_DEVICE(ZKEFF,ZTMP1_DEVICE)
 CALL DZM_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE )
 CALL MXM_DEVICE(PDZZ,ZTMP4_DEVICE)
 !$acc kernels
 !$acc_nv loop independent collapse(3)
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZFLXZ(JI,JJ,JK)     = -XCMFS * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP3_DEVICE(JI,JJ,JK) / ZTMP4_DEVICE(JI,JJ,JK)
-END DO
+!$mnh_end_do()
 !$acc end kernels
 #endif
 !
@@ -802,9 +802,9 @@ PDP(:,:,:) = - MZF( MXF ( ZFLXZ * GZ_U_UW(PUM,PDZZ) )  )
 CALL GZ_U_UW_DEVICE(PUM,PDZZ,ZTMP1_DEVICE)
 !$acc kernels
 !$acc_nv loop independent collapse(3)
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU )
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU )
    ZTMP2_DEVICE(JI,JJ,JK) = ZFLXZ(JI,JJ,JK) * ZTMP1_DEVICE(JI,JJ,JK)
-END DO
+!$mnh_end_do()
 !$acc end kernels
 CALL MXF_DEVICE( ZTMP2_DEVICE,ZTMP3_DEVICE )
 CALL MZF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE )
@@ -904,39 +904,39 @@ IF(HTURBDIM=='3DIM') THEN
   CALL MXM_DEVICE(PRHODJ,ZTMP1_DEVICE)
   !$acc kernels
   !$acc_nv loop independent collapse(3)
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) /PDXX(JI,JJ,JK)
-  END DO
+  !$mnh_end_do()
 !$acc end kernels
   CALL MZM_DEVICE(ZTMP2_DEVICE,ZTMP3_DEVICE )
   !$acc kernels
   !$acc_nv loop independent collapse(3)
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) 
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) 
      ZTMP2_DEVICE(JI,JJ,JK) = ZTMP3_DEVICE(JI,JJ,JK) * ZFLXZ(JI,JJ,JK)
-  END DO
+  !$mnh_end_do()
 !$acc end kernels
   CALL DXF_DEVICE( ZTMP2_DEVICE,ZTMP1_DEVICE )
   IF (.NOT. LFLAT) THEN
     CALL MZF_DEVICE( PDZZ, ZTMP2_DEVICE )
     !$acc kernels
     !$acc_nv loop independent collapse(3)
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP3_DEVICE(JI,JJ,JK) = ZFLXZ(JI,JJ,JK)*PDZX(JI,JJ,JK)
-    END DO
+    !$mnh_end_do()
     !$acc end kernels
     CALL MZF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE )
     !$acc kernels
     !$acc_nv loop independent collapse(3)
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP3_DEVICE(JI,JJ,JK) = ZTMP4_DEVICE(JI,JJ,JK) / PDXX(JI,JJ,JK)
-    END DO   
+    !$mnh_end_do()   
     !$acc end kernels
     CALL MXF_DEVICE( ZTMP3_DEVICE,ZTMP4_DEVICE )
     !$acc kernels
     !$acc_nv loop independent collapse(3)
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP3_DEVICE(JI,JJ,JK) = PRHODJ(JI,JJ,JK) / ZTMP2_DEVICE(JI,JJ,JK) * ZTMP4_DEVICE(JI,JJ,JK)
-    END DO
+    !$mnh_end_do()
     !$acc end kernels
     CALL DZM_DEVICE( ZTMP3_DEVICE, ZTMP2_DEVICE )
     !$acc kernels present_cr(PRWS)
@@ -957,17 +957,17 @@ IF(HTURBDIM=='3DIM') THEN
   CALL GX_W_UW_DEVICE( PWM,PDXX,PDZZ,PDZX,ZTMP1_DEVICE)
   !$acc kernels
   !$acc_nv loop independent collapse(3)
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZTMP2_DEVICE(JI,JJ,JK) = ZFLXZ(JI,JJ,JK) * ZTMP1_DEVICE(JI,JJ,JK)
-  END DO
+  !$mnh_end_do()
 !$acc end kernels
   CALL MXF_DEVICE(ZTMP2_DEVICE,ZTMP1_DEVICE)
   CALL MZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )
   !$acc kernels
   !$acc_nv loop independent collapse(3)
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZA(JI,JJ,JK)=-ZTMP2_DEVICE(JI,JJ,JK)
-  END DO
+  !$mnh_end_do()
 !$acc end kernels
 #endif
   !
@@ -1116,9 +1116,9 @@ CALL MYM_DEVICE(ZTMP3_DEVICE,ZTMP4_DEVICE)
 ZA(:,:,:)    = - PTSTEP * XCMFS * ZTMP1_DEVICE(:,:,:) * ZTMP4_DEVICE(:,:,:) / ZTMP2_DEVICE(:,:,:)**2
 #else
 !$acc_nv loop independent collapse(3)
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZA(JI,JJ,JK)    = - PTSTEP * XCMFS * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP4_DEVICE(JI,JJ,JK) / BR_P2(ZTMP2_DEVICE(JI,JJ,JK))
-END DO
+!$mnh_end_do()
 #endif
 #endif
 !
@@ -1132,28 +1132,28 @@ ZCOEFFLXU(:,:,1) = PCDUEFF(:,:) * (PDIRCOSZW(:,:)**2 - ZDIRSINZW(:,:)**2) &
                                    * PSINSLOPE(:,:)
 #else
 !$acc_nv loop independent collapse(2)
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU )
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU )
 ZCOEFFLXU(JI,JJ,1) = PCDUEFF(JI,JJ) * (BR_P2(PDIRCOSZW(JI,JJ)) - BR_P2(ZDIRSINZW(JI,JJ))) &
      * PSINSLOPE(JI,JJ)
-END DO
+!$mnh_end_do()
 #endif
 ZCOEFFLXV(:,:,1) = PCDUEFF(:,:) * PDIRCOSZW(:,:) * PCOSSLOPE(:,:)
 
 ! prepare the implicit scheme coefficients for the surface flux
 !$acc_nv loop independent collapse(2)
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU )
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU )
 ZCOEFS(JI,JJ,1)=  ZCOEFFLXU(JI,JJ,1) * PSINSLOPE(JI,JJ) * PDIRCOSZW(JI,JJ)  &
      +ZCOEFFLXV(JI,JJ,1) * PCOSSLOPE(JI,JJ)
-END DO
+!$mnh_end_do()
 !
 ! average this flux to be located at the V,W vorticity point
 #ifndef MNH_OPENACC
 ZCOEFS(:,:,1:1)=MYM(ZCOEFS(:,:,1:1) / PDZZ(:,:,IKB:IKB) )
 #else
 !$acc_nv loop independent collapse(2)
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU )
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU )
    ZTMP1_DEVICE(JI,JJ,1) = ZCOEFS(JI,JJ,1) / PDZZ(JI,JJ,IKB)
-END DO
+!$mnh_end_do()
 !$acc end kernels
 CALL MYM_DEVICE(ZTMP1_DEVICE(:,:,1:1),ZCOEFS(:,:,1:1) )
 #endif
@@ -1257,18 +1257,18 @@ ZFLXZ(:,:,IKB:IKB)   =   MYM(PDZZ(:,:,IKB:IKB))  *                       &
 #else
 !$acc kernels
 !$acc_nv loop independent collapse(3)
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZTMP1_DEVICE(JI,JJ,JK) = PIMPL*ZRES(JI,JJ,JK) + PEXPL*PVM(JI,JJ,JK)
-END DO
+!$mnh_end_do()
 !$acc end kernels
 CALL DZM_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )
 CALL MYM_DEVICE(PDZZ,ZTMP3_DEVICE)
 CALL MYM_DEVICE(ZKEFF,ZTMP1_DEVICE)
 !$acc kernels
 !$acc_nv loop independent collapse(3)
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZFLXZ(JI,JJ,JK)   = -XCMFS * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK) / ZTMP3_DEVICE(JI,JJ,JK)
-END DO
+!$mnh_end_do()
 !$acc end kernels
 !
 CALL MYM_DEVICE(PDZZ(:,:,IKB:IKB),ZTMP1_DEVICE(:,:,1:1))
@@ -1322,17 +1322,17 @@ ZA(:,:,:) = - MZF( MYF ( ZFLXZ * GZ_V_VW(PVM,PDZZ) ) )
 CALL GZ_V_VW_DEVICE(PVM,PDZZ,ZTMP1_DEVICE)
 !$acc kernels
 !$acc_nv loop independent collapse(3)
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZTMP2_DEVICE(JI,JJ,JK) = ZFLXZ(JI,JJ,JK) * ZTMP1_DEVICE(JI,JJ,JK)
-END DO
+!$mnh_end_do()
 !$acc end kernels
 CALL MYF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE )
 CALL MZF_DEVICE( ZTMP3_DEVICE, ZTMP1_DEVICE )
 !$acc kernels
 !$acc_nv loop independent collapse(3)
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZA(JI,JJ,JK) = - ZTMP1_DEVICE(JI,JJ,JK)
-END DO   
+!$mnh_end_do()   
 !$acc end kernels
 #endif
 !
@@ -1427,39 +1427,39 @@ IF(HTURBDIM=='3DIM') THEN
     CALL MYM_DEVICE(PRHODJ,ZTMP1_DEVICE)
     !$acc kernels
     !$acc_nv loop independent collapse(3)
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) /PDYY(JI,JJ,JK)
-    END DO
+    !$mnh_end_do()
     !$acc end kernels
     CALL MZM_DEVICE(ZTMP2_DEVICE,ZTMP1_DEVICE)
     !$acc kernels
     !$acc_nv loop independent collapse(3)
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * ZFLXZ(JI,JJ,JK)
-    END DO
+    !$mnh_end_do()
     !$acc end kernels
     CALL DYF_DEVICE( ZTMP2_DEVICE,ZTMP1_DEVICE )
     IF (.NOT. LFLAT) THEN
       CALL MZF_DEVICE( PDZZ, ZTMP2_DEVICE )
       !$acc kernels
       !$acc_nv loop independent collapse(3)
-      DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+      !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
          ZTMP3_DEVICE(JI,JJ,JK) = ZFLXZ(JI,JJ,JK)*PDZY(JI,JJ,JK)
-      END DO
+      !$mnh_end_do()
       !$acc end kernels
       CALL MZF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE )
       !$acc kernels
       !$acc_nv loop independent collapse(3)
-      DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+      !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
          ZTMP3_DEVICE(JI,JJ,JK) = ZTMP4_DEVICE(JI,JJ,JK) / PDYY(JI,JJ,JK)
-      END DO
+      !$mnh_end_do()
       !$acc end kernels
       CALL MYF_DEVICE(ZTMP3_DEVICE,ZTMP4_DEVICE)
       !$acc kernels
       !$acc_nv loop independent collapse(3)
-      DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+      !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
          ZTMP3_DEVICE(JI,JJ,JK) =  PRHODJ(JI,JJ,JK) / ZTMP2_DEVICE(JI,JJ,JK) * ZTMP4_DEVICE(JI,JJ,JK)
-      END DO
+      !$mnh_end_do()
       !$acc end kernels
       CALL DZM_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE )
       !$acc kernels present_cr(PRWS)
@@ -1481,17 +1481,17 @@ IF(HTURBDIM=='3DIM') THEN
     CALL GY_W_VW_DEVICE( PWM,PDYY,PDZZ,PDZY,ZTMP1_DEVICE)
     !$acc kernels
     !$acc_nv loop independent collapse(3)
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP2_DEVICE(JI,JJ,JK) = ZFLXZ(JI,JJ,JK) * ZTMP1_DEVICE(JI,JJ,JK)
-    END DO
+    !$mnh_end_do()
     !$acc end kernels
     CALL MYF_DEVICE(ZTMP2_DEVICE,ZTMP1_DEVICE)
     CALL MZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )
     !$acc kernels
     !$acc_nv loop independent collapse(3)
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZA(JI,JJ,JK) = - ZTMP2_DEVICE(JI,JJ,JK)
-    END DO
+    !$mnh_end_do()
     !$acc end kernels
 #endif
   !
diff --git a/src/MNH/turb_ver_thermo_corr.f90 b/src/MNH/turb_ver_thermo_corr.f90
index c4a205956..c78119ca5 100644
--- a/src/MNH/turb_ver_thermo_corr.f90
+++ b/src/MNH/turb_ver_thermo_corr.f90
@@ -569,9 +569,9 @@ END IF
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZTMP1_DEVICE(JI,JJ,JK) = PPHI3(JI,JJ,JK)*BR_P2(PDTH_DZ(JI,JJ,JK))
-  END DO
+  !$mnh_end_do()
 #endif
   !$acc end kernels
   CALL MZF_DEVICE( ZTMP1_DEVICE(:,:,:), ZTMP2_DEVICE(:,:,:) )
@@ -579,9 +579,9 @@ END IF
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZF      (JI,JJ,JK) = XCTV*PLM(JI,JJ,JK)*PLEPS(JI,JJ,JK)*ZTMP2_DEVICE(JI,JJ,JK) 
-  END DO
+  !$mnh_end_do()
   !$acc end kernels
   !$acc kernels present_cr(ZDFDDTDZ)
   ZDFDDTDZ(:,:,:) = 0.     ! this term, because of discretization, is treated separately 
@@ -725,9 +725,9 @@ END IF
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZTMP3_DEVICE(JI,JJ,JK) = ZTMP2_DEVICE(JI,JJ,JK) / PDZZ(JI,JJ,JK)
-  END DO
+  !$mnh_end_do()
   !$acc end kernels
   CALL MZF_DEVICE( ZTMP3_DEVICE(:,:,:), ZTMP4_DEVICE(:,:,:) )
 #ifdef MNH_COMPILER_CCE
@@ -739,10 +739,10 @@ END IF
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZFLXZ(JI,JJ,JK)   = ZF(JI,JJ,JK)                                                              &
           + PIMPL * ZDFDDTDZ(JI,JJ,JK) * ZTMP4_DEVICE(JI,JJ,JK)
-  END DO
+  !$mnh_end_do()
 !$acc end kernels
 #endif
   !
@@ -766,7 +766,7 @@ END IF
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(2)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU )
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU )
   ZFLXZ(JI,JJ,IKB) = XCTV * PPHI3(JI,JJ,IKB+KKL) * PLM(JI,JJ,IKB)   &
      * PLEPS(JI,JJ,IKB)                                         &
   *( PEXPL *                                                  &
@@ -778,7 +778,7 @@ END IF
       +ZCOEFF(JI,JJ,IKB+KKL  )*PTHLP(JI,JJ,IKB+KKL  )             &
       +ZCOEFF(JI,JJ,IKB      )*PTHLP(JI,JJ,IKB  )   )             &
       )
-   END DO
+   !$mnh_end_do()
   !$acc end kernels
 #endif
 
@@ -872,9 +872,9 @@ END IF
 #ifdef MNH_COMPILER_NVHPC
 !$acc loop independent collapse(3)    
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
       ZF      (JI,JJ,JK) = XCTV*PLM(JI,JJ,JK)*PLEPS(JI,JJ,JK)*ZTMP2_DEVICE(JI,JJ,JK)
-    END DO
+    !$mnh_end_do()
 !$acc end kernels    
 #endif
 !$acc kernels present_cr(ZDFDDTDZ,ZDFDDRDZ)  
@@ -1063,10 +1063,10 @@ END IF
 #ifdef MNH_COMPILER_NVHPC
     !$acc loop independent collapse(3)
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP1_DEVICE(JI,JJ,JK) = ZTMP3_DEVICE(JI,JJ,JK) / PDZZ(JI,JJ,JK)
        ZTMP2_DEVICE(JI,JJ,JK) = ZTMP4_DEVICE(JI,JJ,JK) / PDZZ(JI,JJ,JK)      
-    END DO
+    !$mnh_end_do()
 
     !$acc end kernels
     CALL D_PHI3DTDZ_O_DDTDZ(PPHI3(:,:,:),PREDTH1(:,:,:),PREDR1(:,:,:),PRED2TH3(:,:,:),PRED2THR3(:,:,:), &
@@ -1088,12 +1088,12 @@ END IF
 #ifdef MNH_COMPILER_NVHPC
     !$acc loop independent collapse(3)
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP7_DEVICE(JI,JJ,JK) =   ( ZTMP3_DEVICE(JI,JJ,JK) + ZTMP4_DEVICE(JI,JJ,JK)) * PDR_DZ(JI,JJ,JK)  &
                               * ZTMP2_DEVICE(JI,JJ,JK) / PDZZ(JI,JJ,JK) &
                               + ( ZTMP5_DEVICE(JI,JJ,JK) + ZTMP6_DEVICE(JI,JJ,JK)) * PDTH_DZ(JI,JJ,JK) &
                               * ZTMP1_DEVICE(JI,JJ,JK) / PDZZ(JI,JJ,JK)
-    END DO
+    !$mnh_end_do()
     !$acc end kernels
     !!!
     !$acc kernels present_cr(ZTMP1_DEVICE,ZTMP2_DEVICE)
@@ -1106,10 +1106,10 @@ END IF
 #ifdef MNH_COMPILER_NVHPC
     !$acc loop independent collapse(3)
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP1_DEVICE(JI,JJ,JK) = ZTMP3_DEVICE(JI,JJ,JK) / PDZZ(JI,JJ,JK)
        ZTMP2_DEVICE(JI,JJ,JK) = ZTMP4_DEVICE(JI,JJ,JK) /PDZZ(JI,JJ,JK)
-    END DO
+    !$mnh_end_do()
     !$acc end kernels
     !!!
     CALL MZF_DEVICE( ZTMP7_DEVICE(:,:,:), ZTMP3_DEVICE(:,:,:) )
@@ -1119,19 +1119,19 @@ END IF
 #ifdef MNH_COMPILER_NVHPC
     !$acc loop independent collapse(3)
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZFLXZ(JI,JJ,JK)   = ZF(JI,JJ,JK)                           &
             + PIMPL * XCTV*PLM(JI,JJ,JK)*PLEPS(JI,JJ,JK)*0.5 * ZTMP3_DEVICE(JI,JJ,JK)  &
             + PIMPL * ZDFDDTDZ(JI,JJ,JK) * ZTMP4_DEVICE(JI,JJ,JK)            &
             + PIMPL * ZDFDDRDZ(JI,JJ,JK) * ZTMP5_DEVICE(JI,JJ,JK)
-    END DO
+    !$mnh_end_do()
 #endif
     !
     ! special case near the ground ( uncentred gradient )
 #ifdef MNH_COMPILER_NVHPC
     !$acc loop independent collapse(2)
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU )
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU )
     ZFLXZ(JI,JJ,IKB) =                                            & 
     (XCHT1 * PPHI3(JI,JJ,IKB+KKL) + XCHT2 * PPSI3(JI,JJ,IKB+KKL))   &
     *( PEXPL *                                                  &
@@ -1149,7 +1149,7 @@ END IF
         +ZCOEFF(JI,JJ,IKB+KKL  )*PRP(JI,JJ,IKB+KKL    )             & 
         +ZCOEFF(JI,JJ,IKB      )*PRP(JI,JJ,IKB        ))            &
         )
-    END DO
+    !$mnh_end_do()
 !$acc end kernels
     !$acc kernels present_cr(ZFLXZ,PSIGS)    
     ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) 
@@ -1249,9 +1249,9 @@ END IF
 #ifdef MNH_COMPILER_NVHPC
     !$acc loop independent collapse(3)
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP1_DEVICE(JI,JJ,JK) = PPSI3(JI,JJ,JK)*BR_P2(PDR_DZ(JI,JJ,JK))
-    END DO
+    !$mnh_end_do()
 #endif
     !$acc end kernels
     CALL MZF_DEVICE( ZTMP1_DEVICE(:,:,:), ZTMP2_DEVICE(:,:,:) )
@@ -1259,9 +1259,9 @@ END IF
 #ifdef MNH_COMPILER_NVHPC
     !$acc loop independent collapse(3)
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZF      (JI,JJ,JK) = XCTV*PLM(JI,JJ,JK)*PLEPS(JI,JJ,JK)*ZTMP2_DEVICE(JI,JJ,JK)
-    END DO
+    !$mnh_end_do()
 #endif
     ZDFDDRDZ(:,:,:) = 0.     ! this term, because of discretization, is treated separately
     !$acc end kernels
@@ -1407,18 +1407,18 @@ END IF
 #ifdef MNH_COMPILER_NVHPC
     !$acc loop independent collapse(3)
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * ZTMP3_DEVICE(JI,JJ,JK) / PDZZ(JI,JJ,JK)
-    END DO
+    !$mnh_end_do()
     !$acc end kernels
     CALL MZF_DEVICE( ZTMP2_DEVICE(:,:,:), ZTMP1_DEVICE(:,:,:) )
     !$acc kernels
 #ifdef MNH_COMPILER_NVHPC
     !$acc loop independent collapse(3)    
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZTMP2_DEVICE(JI,JJ,JK) = ZTMP3_DEVICE(JI,JJ,JK) / PDZZ(JI,JJ,JK)
-    END DO
+    !$mnh_end_do()
     !$acc end kernels
     CALL MZF_DEVICE( ZTMP2_DEVICE(:,:,:), ZTMP3_DEVICE(:,:,:) )
 #ifdef MNH_COMPILER_CCE
@@ -1429,11 +1429,11 @@ END IF
 #ifdef MNH_COMPILER_NVHPC
     !$acc loop independent collapse(3)
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
        ZFLXZ(JI,JJ,JK)   = ZF(JI,JJ,JK)                        &
             + PIMPL * XCTV*PLM(JI,JJ,JK)*PLEPS(JI,JJ,JK) * ZTMP1_DEVICE(JI,JJ,JK) &
             + PIMPL * ZDFDDRDZ(JI,JJ,JK) * ZTMP3_DEVICE(JI,JJ,JK)
-    END DO
+    !$mnh_end_do()
    !$acc end kernels
 #endif
     !
@@ -1457,7 +1457,7 @@ END IF
 #ifdef MNH_COMPILER_NVHPC
     !$acc loop independent collapse(2)
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU )
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU )
     ZFLXZ(JI,JJ,IKB) = XCHV * PPSI3(JI,JJ,IKB+KKL) * PLM(JI,JJ,IKB)   &
         * PLEPS(JI,JJ,IKB)                                        &
     *( PEXPL *                                                  &
@@ -1469,7 +1469,7 @@ END IF
         +ZCOEFF(JI,JJ,IKB+KKL  )*PRP(JI,JJ,IKB+KKL  )               &
         +ZCOEFF(JI,JJ,IKB      )*PRP(JI,JJ,IKB      ))              &
         )
-    END DO
+    !$mnh_end_do()
    !$acc end kernels
 #endif
     !
diff --git a/src/MNH/turb_ver_thermo_flux.f90 b/src/MNH/turb_ver_thermo_flux.f90
index bf4f25c3e..4dae26c8d 100644
--- a/src/MNH/turb_ver_thermo_flux.f90
+++ b/src/MNH/turb_ver_thermo_flux.f90
@@ -748,9 +748,9 @@ CALL DZM_DEVICE(PTHLM, ZTMP1_DEVICE )
 #ifdef MNH_COMPILER_NVHPC
 !$acc loop independent collapse(3)
 #endif
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZF      (JI,JJ,JK) = -XCSHF*PPHI3(JI,JJ,JK)*ZKEFF(JI,JJ,JK)*ZTMP1_DEVICE(JI,JJ,JK)/PDZZ(JI,JJ,JK)
-END DO    
+!$mnh_end_do()    
 !$acc end kernels
 !
 CALL D_PHI3DTDZ_O_DDTDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,GUSERV,ZTMP2_DEVICE)
@@ -758,9 +758,9 @@ CALL D_PHI3DTDZ_O_DDTDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,GUSERV,
 #ifdef MNH_COMPILER_NVHPC
 !$acc loop independent collapse(3)
 #endif
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZDFDDTDZ(JI,JJ,JK) = -XCSHF*ZKEFF(JI,JJ,JK)*ZTMP2_DEVICE(JI,JJ,JK)
-END DO   
+!$mnh_end_do()   
 !$acc end kernels
 #endif
 !
@@ -981,9 +981,9 @@ CALL DZM_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )
 #ifdef MNH_COMPILER_NVHPC
 !$acc loop independent collapse(3)
 #endif
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    ZFLXZ(JI,JJ,JK)   =  ZF(JI,JJ,JK) + PIMPL * ZDFDDTDZ(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK) / PDZZ(JI,JJ,JK)
-END DO
+!$mnh_end_do()
 !$acc end kernels
 #endif
 ! replace the flux by the Leonard terms
@@ -1058,9 +1058,9 @@ ELSE
 #ifdef MNH_COMPILER_NVHPC
 !$acc loop independent collapse(3)  
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
       ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * ZFLXZ(JI,JJ,JK)
-    END DO
+    !$mnh_end_do()
 !$acc end kernels
     CALL MZF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE )
 !$acc kernels
@@ -1211,11 +1211,11 @@ IF (LLES_CALL) THEN
   !* diagnostic of mixing coefficient for heat
   CALL DZM_DEVICE( PTHLP, ZA )
   !$acc kernels
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      IF  (ZA(JI,JJ,JK)==0.) THEN
         ZA(JI,JJ,JK)=1.E-6
      END IF
-  END DO
+  !$mnh_end_do()
   ZA(:,:,:) = - ZFLXZ(:,:,:) / ZA(:,:,:) * PDZZ(:,:,:)
   ZA(:,:,IKB) = XCSHF*PPHI3(:,:,IKB)*ZKEFF(:,:,IKB)
   !Copy ZA into ZTMP1_DEVICE to prevent aliasing in the following call to MZF_DEVICE
@@ -1259,9 +1259,9 @@ IF (KRR /= 0) THEN
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZF      (JI,JJ,JK) = -XCSHF*PPSI3(JI,JJ,JK)*ZKEFF(JI,JJ,JK)*ZTMP1_DEVICE(JI,JJ,JK)/PDZZ(JI,JJ,JK)
-  END DO
+  !$mnh_end_do()
   !$acc end kernels
   CALL D_PSI3DRDZ_O_DDRDZ(PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,GUSERV,ZTMP1_DEVICE)
 !CALL D_PHI3DRDZ_O_DDRDZ_DEVICE(PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,GUSERV,ZTMP1_DEVICE)
@@ -1269,9 +1269,9 @@ IF (KRR /= 0) THEN
 #ifdef MNH_COMPILER_NVHPC
   !$acc loop independent collapse(3)
 #endif
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      ZDFDDRDZ(JI,JJ,JK) = -XCSHF*ZKEFF(JI,JJ,JK)*ZTMP1_DEVICE(JI,JJ,JK)
-  END DO
+  !$mnh_end_do()
   !$acc end kernels
 #endif
   !
@@ -1495,9 +1495,9 @@ IF (KRR /= 0) THEN
 #ifdef MNH_COMPILER_NVHPC
 !$acc loop independent collapse(3)  
 #endif
-DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)  
+!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)  
    ZFLXZ(JI,JJ,JK)   = ZF(JI,JJ,JK) + PIMPL * ZDFDDRDZ(JI,JJ,JK) *ZTMP2_DEVICE(JI,JJ,JK) / PDZZ(JI,JJ,JK)
-END DO
+!$mnh_end_do()
 !$acc end kernels
 #endif
   !
@@ -1558,18 +1558,18 @@ END DO
 #ifdef MNH_COMPILER_NVHPC
 !$acc loop independent collapse(3)
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
       ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * ZFLXZ(JI,JJ,JK)
-    END DO
+    !$mnh_end_do()
 !$acc end kernels
     CALL MZF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE )
 !$acc kernels
 #ifdef MNH_COMPILER_NVHPC
 !$acc loop independent collapse(3)
 #endif
-    DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+    !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
       ZA(JI,JJ,JK)   =  PBETA(JI,JJ,JK) * ZTMP3_DEVICE(JI,JJ,JK)
-    END DO
+    !$mnh_end_do()
 !$acc end kernels
 #ifdef MNH_COMPILER_CCE
 !$acc kernels present(ZA)
@@ -1590,9 +1590,9 @@ END DO
 #else
   CALL MZM_DEVICE(PEMOIST,ZTMP1_DEVICE)
   !$acc kernels
-  DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
+  !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU)
      PWTHV(JI,JJ,JK)          = PWTHV(JI,JJ,JK)          + ZTMP1_DEVICE(JI,JJ,JK) * ZFLXZ(JI,JJ,JK)
-  END DO
+  !$mnh_end_do()
   !$acc end kernels
 #endif
   !$acc kernels
-- 
GitLab