diff --git a/src/MNH/advection_metsv.f90 b/src/MNH/advection_metsv.f90
index a54dc3d1adc87c4172af4bf4de5dcf79599e94f9..6aa9852404122334f2335a53165bcc230eb85d36 100644
--- a/src/MNH/advection_metsv.f90
+++ b/src/MNH/advection_metsv.f90
@@ -587,13 +587,13 @@ END DO ! CONCURRENT
 #else
   IF (.NOT. L2D) THEN
      !$acc kernels
-     !$mnh_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)))
      !$mnh_end_do()
      !$acc end kernels
   ELSE
      !$acc kernels
-     !$mnh_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)))
      !$mnh_end_do()
      !$acc end kernels
@@ -606,8 +606,8 @@ ELSE
 !if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
 #if !defined(MNH_BITREP)
    ZCFL(:,:,:) = SQRT(ZCFLW(:,:,:)**2)
-#else  
-   !$mnh_do_concurrent(JI=1:JIU,JJ=1:JJU,JK=1:JKU )
+#else
+   !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU )
       ZCFL(JI,JJ,JK) = SQRT(BR_P2(ZCFLW(JI,JJ,JK)))
    !$mnh_end_do()
 #endif
@@ -698,11 +698,13 @@ ZCFLU_MAX = 0.0 ; ZCFLV_MAX = 0.0 ; ZCFLW_MAX = 0.0 ; ZCFL_MAX = 0.0
 !$acc end parallel
 #endif
 !
+#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,  &
@@ -964,7 +966,7 @@ DO JSPL=1,KSPLIT
       !$acc end kernels
    END IF
    !$acc kernels
-   !$mnh_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)
    !$mnh_end_do() !CONCURRENT 
diff --git a/src/MNH/advection_uvw.f90 b/src/MNH/advection_uvw.f90
index bffd4fdeef32fe864c39dc147a14c58b727aea6a..55069401400eeca413c3a215d71aba3a2bd74791 100644
--- a/src/MNH/advection_uvw.f90
+++ b/src/MNH/advection_uvw.f90
@@ -436,17 +436,20 @@ DO JSPL=1,ISPLIT
 !
 ! Tendencies on wind
 !$acc kernels
-!$mnh_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
 !$mnh_end_do()
+!$acc end kernels
+
   IF (JSPL<ISPLIT) THEN
+!$acc kernels
 !
 ! Guesses for next time splitting loop
 !
 !
-!$mnh_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) *  &
@@ -454,8 +457,8 @@ DO JSPL=1,ISPLIT
   ZW(JI,JJ,JK) = ZW(JI,JJ,JK) + ZTSTEP / ZMZM_RHODJ(JI,JJ,JK) *  &
               (ZRWS_OTHER(JI,JJ,JK) + ZRWS_ADV(JI,JJ,JK))
 !$mnh_end_do()
-END IF
 !$acc end kernels
+END IF
 !
 ! Top and bottom Boundaries 
 !
diff --git a/src/MNH/advection_uvw_cen.f90 b/src/MNH/advection_uvw_cen.f90
index 340947ef192b8f135ff653cd435529671ccdc315..7db6ad59e30c4f1ec7fe59628aea7969e107be59 100644
--- a/src/MNH/advection_uvw_cen.f90
+++ b/src/MNH/advection_uvw_cen.f90
@@ -404,7 +404,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/call_rttov13.f90 b/src/MNH/call_rttov13.f90
index 97ccf20af2a1a608ad00478b2f05046572cef425..362d018b272d60bfbcbcb9805452ce75dd9271ec 100644
--- a/src/MNH/call_rttov13.f90
+++ b/src/MNH/call_rttov13.f90
@@ -39,7 +39,7 @@ LOGICAL, INTENT(IN)                  :: OUSERI ! logical switch to compute both
 !
 INTEGER, DIMENSION(:,:), INTENT(IN) :: KRTTOVINFO ! platform, satellite, sensor,
                                                   ! and selection calculations
-TYPE(TFILEDATA),   INTENT(IN) :: TPFILE ! File characteristics
+TYPE(TFILEDATA),   INTENT(INOUT) :: TPFILE ! File characteristics
 !
 END SUBROUTINE CALL_RTTOV13
 END INTERFACE
@@ -169,7 +169,7 @@ LOGICAL, INTENT(IN)                  :: OUSERI ! logical switch to compute both
 !!!
 INTEGER, DIMENSION(:,:), INTENT(IN) :: KRTTOVINFO ! platform, satellite, sensor,
                                                   ! and selection calculations
-TYPE(TFILEDATA),   INTENT(IN) :: TPFILE ! File characteristics
+TYPE(TFILEDATA),   INTENT(INOUT) :: TPFILE ! File characteristics
 !
 #ifdef MNH_RTTOV_13
 !!!
diff --git a/src/MNH/condensation.f90 b/src/MNH/condensation.f90
index d4bc2503409420b3bd37d62e71b0b84a89c6481a..6c8d331cf942b2e1c62aa08b6e6c4260a436bee5 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
 !
@@ -500,11 +502,10 @@ IF (OUSERI) CALL COMPUTE_FRAC_ICE3D_DEVICE(HFRAC_ICE, ZFRAC, PT)
 #endif
 !
 !$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 +705,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 3a2b4a79261b5f39b2f1317ec46c0d3e74db1b53..494cf6b1bf69889d09c7fd71e67a7fed147492d0 100644
--- a/src/MNH/get_halo.f90
+++ b/src/MNH/get_halo.f90
@@ -439,7 +439,7 @@ END MODULE MODD_HALO_D
 !     #########################
       SUBROUTINE GET_HALO_D(PSRC,HDIR,HNAME)
 !     #########################
-#define MNH_GPUDIRECT
+!define MNH_GPUDIRECT
 !
 USE MODD_HALO_D
 
@@ -484,7 +484,7 @@ SUBROUTINE GET_HALO_START_D(PSRC,KNB_REQ,KREQ,&
      KIIB,KIIE,KIJB,KIJE,KIIU,KIJU,KIKU,KIHALO_1,&
      HDIR)
 !     #########################
-#define MNH_GPUDIRECT
+!define MNH_GPUDIRECT
 !
 USE MODD_HALO_D
 
@@ -721,7 +721,7 @@ SUBROUTINE GET_HALO_STOP_D(PSRC,KNB_REQ,KREQ,&
      KIIB,KIIE,KIJB,KIJE,KIIU,KIJU,KIKU,&
      HDIR)
 !     #########################
-#define MNH_GPUDIRECT
+!define MNH_GPUDIRECT
 !
 USE MODD_HALO_D
 
@@ -841,7 +841,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
@@ -1125,7 +1125,7 @@ END SUBROUTINE GET_HALO_DD
 !     ########################################
       SUBROUTINE GET_2D_HALO_DD(PSRC, HDIR, HNAME)
 !     ########################################
-#define MNH_GPUDIRECT
+!define MNH_GPUDIRECT
 !
 USE MODD_HALO_D
 USE MODE_ll
@@ -1410,7 +1410,7 @@ END SUBROUTINE GET_2D_HALO_DD
 !     ########################################
       SUBROUTINE GET_HALO_DDC(PSRC, HDIR, HNAME)
 !     ########################################
-#define MNH_GPUDIRECT
+!define MNH_GPUDIRECT
 !
 USE MODD_HALO_D
 USE MODE_ll
@@ -1727,7 +1727,7 @@ END SUBROUTINE GET_HALO_DDC
 !     ########################################
       SUBROUTINE GET_2D_HALO_DDC(PSRC, HDIR, HNAME)
 !     ########################################
-#define MNH_GPUDIRECT
+!define MNH_GPUDIRECT
 !
 USE MODD_HALO_D
 USE MODE_ll
@@ -2044,7 +2044,7 @@ END SUBROUTINE GET_2D_HALO_DDC
 !     ########################################
       SUBROUTINE GET_HALO2_DD(PSRC, TP_PSRC_HALO2_ll, HNAME)
 !     ########################################
-#define MNH_GPUDIRECT
+!define MNH_GPUDIRECT
 !
 USE MODD_HALO_D
 USE MODE_ll
@@ -2323,7 +2323,7 @@ END SUBROUTINE GET_HALO2_DD
 !     ########################################
 SUBROUTINE GET_HALO2_DF(PSRC, TP_PSRC_HALO2F_ll, HNAME)
 !     ########################################
-#define MNH_GPUDIRECT
+!define MNH_GPUDIRECT
   !
 USE MODD_HALO_D  
 USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll
diff --git a/src/MNH/gradient_m.f90 b/src/MNH/gradient_m.f90
index 2b558170cdf544fd07faa58bcf890a39dc6e33ad..0a5fa93268dc88af4ecde5be0b4035e73560077d 100644
--- a/src/MNH/gradient_m.f90
+++ b/src/MNH/gradient_m.f90
@@ -1089,10 +1089,9 @@ ELSE
                                / PDYY(:,1+1:IJU,:)
 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 8e65513d3040dd3b5078ce53929348c746d52a53..f4e1102b9fcb1c509db21e48548e6f400f052162 100644
--- a/src/MNH/gradient_u.f90
+++ b/src/MNH/gradient_u.f90
@@ -239,21 +239,15 @@ IF (.NOT. LFLAT) THEN
   CALL DXF_DEVICE(PA,ZTMP1_DEVICE)
   CALL DZM_DEVICE( PA, 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) = 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)
@@ -435,33 +429,24 @@ IF (.NOT. LFLAT) THEN
   CALL DZM_DEVICE( PA, ZTMP1_DEVICE )
   CALL MXM_DEVICE(PDZZ,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) = 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)
   !$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) = 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)
   CALL MXM_DEVICE(PDYY,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)
      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 2daf81dcdda27f0d81068ab293532270365a96dc..624ec1e21bf62eada67a8d9836b9fc442138c7aa 100644
--- a/src/MNH/gradient_v.f90
+++ b/src/MNH/gradient_v.f90
@@ -241,21 +241,15 @@ IF (.NOT. LFLAT) THEN
   CALL DYF_DEVICE(PA,ZTMP1_DEVICE)
   CALL DZM_DEVICE( PA, 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) = 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)
@@ -436,32 +430,23 @@ IF (.NOT. LFLAT) THEN
   CALL MYM_DEVICE(PDZZ,ZTMP2_DEVICE)
   CALL DZM_DEVICE( PA, 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)
      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)
   !$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)
      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)
   !$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)
      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 9b8f6087ede4aa45d09e3bdbfd609bdc9d68e7f0..63f86857964996005d034ba866a4e7287cf7fd3e 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 a1329e53d11346ed5a0976ba4f5824e340ba8f7f..78b5a90c9fa5ebd0eb50dfcdef19a6bb8c4e1580 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&     present( 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( 'ICE4_FAST_RG' )
 #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 8ffab3db7a68ca1a2ab1fe376d531e71c6aa2751..8094310c6fe7d6439d98b962ae23f2ddcc515ee9 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 75c76b335defc087a5dd2c7c8c5830efe575fd08..e4630fa297a5ccf76547cafb09991f1b463c6aaf 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 8abfaed13e9f8cfec25b2a06a31a53af3382f637..d72de99e3e9f9942384b8af86923a561be2d9dfc 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 38f6ad05de23a77a6fdb2f20f16f7cd72de0b2ac..52d13f1ccfbd381ce191630ba541beabfac78411 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
@@ -647,8 +646,8 @@ DO WHILE (ANY(ZREMAINT>0.))
 !$acc kernels
     !******* for cloud
     ZWSED(:,:,:) = 0.
-!$acc loop independent private(JI,JJ,JK,JL,ZZWLBDC,ZRAY,ZZT,ZZWLBDA,ZZCC)
-    DO CONCURRENT( JL = 1 : ISEDIM )
+! acc loop independent private(JI,JJ,JK,JL,ZZWLBDC,ZRAY,ZZT,ZZWLBDA,ZZCC)
+    !$mnh_do_concurrent( JL = 1 : ISEDIM )
       JI=I1(JL)
       JJ=I2(JL)
       JK=I3(JL)
@@ -673,14 +672,14 @@ DO WHILE (ANY(ZREMAINT>0.))
                   BR_POW(ZZWLBDC,-XDC)*ZZCC*PFSEDC(JI,JJ,JK) * PRXT(JI,JJ,JK)
 #endif
       ENDIF
-    ENDDO
+    !$mnh_end_do()
 !$acc end kernels
   ELSEIF(KSPE==4) THEN
 !$acc kernels
     ! ******* for pristine ice
     ZWSED(:,:,:) = 0.
-!$acc loop independent private(JI,JJ,JK,JL)
-    DO CONCURRENT( JL = 1 : ISEDIM )
+! acc loop independent private(JI,JJ,JK,JL)
+    !$mnh_do_concurrent( JL = 1 : ISEDIM )
       JI=I1(JL)
       JJ=I2(JL)
       JK=I3(JL)
@@ -697,7 +696,7 @@ DO WHILE (ANY(ZREMAINT>0.))
                             &      BR_LOG(PRHODREF(JI,JJ,JK)*PRXT(JI,JJ,JK))),XEXCSEDI)
 #endif
       ENDIF
-    ENDDO
+    !$mnh_end_do()
 !$acc end kernels
   ELSE
 !acc kernels
@@ -730,8 +729,8 @@ DO WHILE (ANY(ZREMAINT>0.))
     !
 !$acc kernels
     ZWSED(:,:,:) = 0.
-!$acc loop independent private(JI,JJ,JK,JL)
-    DO CONCURRENT( JL = 1 : ISEDIM )
+! acc loop independent private(JI,JJ,JK,JL)
+    !$mnh_do_concurrent( JL = 1 : ISEDIM )
       JI=I1(JL)
       JJ=I2(JL)
       JK=I3(JL)
@@ -744,13 +743,13 @@ DO WHILE (ANY(ZREMAINT>0.))
                                    * BR_POW(PRHODREF(JI, JJ, JK),ZEXSED-XCEXVT)
 #endif
       ENDIF
-    ENDDO
+    !$mnh_end_do()
 !$acc end kernels
   ENDIF
 !$acc kernels
   ZMAX_TSTEP(:,:) = ZREMAINT(:,:)
-!acc loop independent private(JI,JJ,JK,JL)
-  DO CONCURRENT( JL = 1 : ISEDIM )
+! acc loop independent private(JI,JJ,JK,JL)
+  !$mnh_do_concurrent( JL = 1 : ISEDIM )
     JI=I1(JL)
     JJ=I2(JL)
     JK=I3(JL)
@@ -760,19 +759,16 @@ DO WHILE (ANY(ZREMAINT>0.))
                            PRXT(JI, JJ, JK) * PDZZ(JI, JJ, JK) / ZWSED(JI, JJ, JK))
 !acc end atomic
     ENDIF
-  ENDDO
+  !$mnh_end_do()
   ZREMAINT(:,:) = ZREMAINT(:,:) - ZMAX_TSTEP(:,:)
 !$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 ad36fcb3b282c47f1659d04131bdf15edd3ec6d5..4ccb0613056c4844ebb85626e4eecb82088a2248 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 4862751471f0f9b62a631c1e3ca5529e64c6ba8e..e1b74ed1940dab6d2fc172d9f82f82d9afb6a6e9 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 126d3d898298b3282409101a869ad9c876a17f1a..243d0b8cb317b8d986fb59f62fd313dc4edb6660 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/pressurez.f90 b/src/MNH/pressurez.f90
index 128661e9b7df7476f9332362561b975e116704b5..d27cce3771b9dbdb5774abf3fb827c7f53be2f49 100644
--- a/src/MNH/pressurez.f90
+++ b/src/MNH/pressurez.f90
@@ -276,6 +276,11 @@ USE MODI_SHUMAN_DEVICE
 USE MODI_ZSOLVER
 #endif
 
+#if defined(MNH_COMPILER_CCE) && defined(MNH_BITREP_OMP)
+!$mnh_undef(LOOP)
+!$mnh_undef(OPENACC)
+#endif
+
 IMPLICIT NONE
 !
 !*       0.1   declarations of arguments
@@ -667,13 +672,13 @@ IF(CEQNSYS=='MAE' .OR. CEQNSYS=='DUR') THEN
 #endif
 #else
   !$acc kernels
-  DO CONCURRENT ( JI=1:IIU,JJ=1:IJU,JK=1:IKU )
+  !$mnh_do_concurrent ( JI=1:IIU,JJ=1:IJU,JK=1:IKU )
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
     ZPHIT(JI,JJ,JK)=(PPABST(JI,JJ,JK)/XP00)**(XRD/XCPD)-PEXNREF(JI,JJ,JK)
 #else
     ZPHIT(JI,JJ,JK)=BR_POW((PPABST(JI,JJ,JK)/XP00),(XRD/XCPD))-PEXNREF(JI,JJ,JK)
 #endif
-  END DO
+  !$mnh_end_do()
   !$acc end kernels
 #endif  
   !
@@ -843,30 +848,20 @@ IF ( GWEST ) THEN
 !!!!!!!!!!!!!!!!  FUJI  compiler directive !!!!!!!!!!
 !!!!!!!!!!!!!!!!  FUJI  compiler directive !!!!!!!!!!
    !$acc kernels async
-#ifdef MNH_COMPILER_NVHPC
-   !$acc loop independent collapse(2)
-#else
-   !$acc loop independent
-#endif
-   DO CONCURRENT (JJ=1:IJU , JK=2:IKU-1)
+   !$mnh_do_concurrent (JJ=1:IJU , JK=2:IKU-1)
       ZDV_SOURCE(IIB,JJ,JK)=                                                    &
        (ZPHIT(IIB,JJ,JK) - ZPHIT(IIB-1,JJ,JK) - 0.5 * (                              &
         PDZX(IIB,JJ,JK)   * (ZPHIT(IIB,JJ,JK)-ZPHIT(IIB,JJ,JK-1)) / PDZZ(IIB,JJ,JK)      &
        +PDZX(IIB,JJ,JK+1) * (ZPHIT(IIB,JJ,JK+1)-ZPHIT(IIB,JJ,JK)) / PDZZ(IIB,JJ,JK+1)    &
                                               )                              &
        ) / PDXX(IIB,JJ,JK)
-   END DO
+   !$mnh_end_do()
    !$acc end kernels
 ENDIF
   !
 IF( GEAST ) THEN
    !$acc kernels async
-#ifdef MNH_COMPILER_NVHPC
-   !$acc loop independent collapse(2)
-#else
-   !$acc loop independent
-#endif
-   DO CONCURRENT (JJ=1:IJU , JK=2:IKU-1)
+   !$mnh_do_concurrent (JJ=1:IJU , JK=2:IKU-1)
       ZDV_SOURCE(IIE+1,JJ,JK)=                                                   &
         (ZPHIT(IIE+1,JJ,JK) - ZPHIT(IIE+1-1,JJ,JK) - 0.5 * (                        &
          PDZX(IIE+1,JJ,JK)   * (ZPHIT(IIE+1-1,JJ,JK)-ZPHIT(IIE+1-1,JJ,JK-1))           &
@@ -875,7 +870,7 @@ IF( GEAST ) THEN
                           / PDZZ(IIE+1-1,JJ,JK+1)                                &
                                                      )                        &
         ) / PDXX(IIE+1,JJ,JK)
-   END DO
+   !$mnh_end_do()
    !$acc end kernels
 END IF
 !$acc wait
@@ -918,30 +913,20 @@ IF(.NOT. L2D) THEN
 !!!!!!!!!!!!!!!!  FUJI  compiler directive !!!!!!!!!!
 !!!!!!!!!!!!!!!!  FUJI  compiler directive !!!!!!!!!!
       !$acc kernels async
-#ifdef MNH_COMPILER_NVHPC
-      !$acc loop independent collapse(2)
-#else
-      !$acc loop independent
-#endif
-      DO CONCURRENT (JI=1:IIU , JK=2:IKU-1)
+      !$mnh_do_concurrent (JI=1:IIU , JK=2:IKU-1)
          ZDV_SOURCE(JI,IJB,JK)=                                                  &
               (ZPHIT(JI,IJB,JK) - ZPHIT(JI,IJB-1,JK) - 0.5 * (                            &
               PDZY(JI,IJB,JK)   * (ZPHIT(JI,IJB,JK)-ZPHIT(JI,IJB,JK-1)) / PDZZ(JI,IJB,JK)    &
               +PDZY(JI,IJB,JK+1) * (ZPHIT(JI,IJB,JK+1)-ZPHIT(JI,IJB,JK)) / PDZZ(JI,IJB,JK+1)  &
               )                            &
               ) / PDYY(JI,IJB,JK)
-      END DO
+      !$mnh_end_do()
       !$acc end kernels
    END IF
    !
    IF ( GNORTH ) THEN
       !$acc kernels async
-#ifdef MNH_COMPILER_NVHPC
-      !$acc loop independent collapse(2)
-#else
-      !$acc loop independent
-#endif
-      DO CONCURRENT (JI=1:IIU , JK=2:IKU-1) 
+      !$mnh_do_concurrent (JI=1:IIU , JK=2:IKU-1) 
          ZDV_SOURCE(JI,IJE+1,JK)=                                                &
               (ZPHIT(JI,IJE+1,JK) - ZPHIT(JI,IJE+1-1,JK) - 0.5 * (                      &
               PDZY(JI,IJE+1,JK)   * (ZPHIT(JI,IJE+1-1,JK)-ZPHIT(JI,IJE+1-1,JK-1))         &
@@ -950,7 +935,7 @@ IF(.NOT. L2D) THEN
               / PDZZ(JI,IJE+1-1,JK+1)                              &
               )                      &
               ) / PDYY(JI,IJE+1,JK)
-      END DO
+      !$mnh_end_do()
       !$acc end kernels
   END IF
 !$acc wait  
@@ -1095,9 +1080,9 @@ IF ((ZMAX_ll > 1.E-12) .AND. KTCOUNT >0 ) THEN
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
      PPABST(:,:,:)=XP00*(ZPHIT(:,:,:)+PEXNREF(:,:,:))**(XCPD/XRD)
 #else
-     DO CONCURRENT(JI=1:IIU,JJ=1:IJU,JK=1:IKU)
+     !$mnh_do_concurrent(JI=1:IIU,JJ=1:IJU,JK=1:IKU)
         PPABST(JI,JJ,JK)=XP00*BR_POW((ZPHIT(JI,JJ,JK)+PEXNREF(JI,JJ,JK)),(XCPD/XRD))
-     END DO
+     !$mnh_end_do()
 #endif
      !$acc end kernels
   ELSEIF(CEQNSYS=='LHE') THEN
diff --git a/src/MNH/rain_ice.f90 b/src/MNH/rain_ice.f90
index cbb91af2c959f3193a2afddd18226e86facbf507..a93c8dd96595592c48c1523af76c4da355dde18e 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 14101b80037ee6d9d656237d2199ad2e71120d3c..499cb5096ee433ab44dc7897905fcd31ec770a41 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 24c30713af7d7ba6280938b1fc7fbf69e0052061..20cc4e8a069f3d1f304e388bab3f605da339c920 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 b96befdb0827ea5b9c3fe4bfb5fd3767a671d67f..9fa840bab71c42a3c6c2e8d07d3aea592dfc3107 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 8302bd5e8505f7591eae74a0deedf64fc8328633..a2e368359764e6a2bdc42dbc403b7c79b58e6001 100644
--- a/src/MNH/rain_ice_red.f90
+++ b/src/MNH/rain_ice_red.f90
@@ -688,13 +688,6 @@ REAL, DIMENSION(:,:,:), pointer, contiguous :: ZTEMP_BUD
 !
 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")
@@ -733,6 +726,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
@@ -1277,7 +1277,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))   &
@@ -1285,7 +1285,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
@@ -1521,7 +1521,6 @@ IF(HSUBG_AUCV_RC=='PDF ' .AND. CSUBG_PR_PDF=='SIGM') GTEST=.true.
 #endif
 
 IF(IMICRO>0) THEN
-!acc loop independent
   !$mnh_do_concurrent(JL=1:IMICRO)
     ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL))
     ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL))
@@ -1742,8 +1741,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)
@@ -1755,7 +1755,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
     !
@@ -1780,6 +1782,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
@@ -1814,7 +1818,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
@@ -1823,7 +1828,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))
 
@@ -1841,7 +1848,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)
@@ -1922,7 +1932,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
@@ -1940,7 +1951,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)), &
@@ -1950,10 +1962,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)
@@ -1966,12 +1980,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
     !
@@ -2040,7 +2054,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.
@@ -2116,14 +2130,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)
@@ -2168,8 +2182,7 @@ end if
 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
@@ -2177,14 +2190,13 @@ 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
@@ -2246,14 +2258,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
@@ -2262,7 +2274,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
@@ -2832,6 +2844,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( 'RAIN_ICE_RED' )
@@ -2859,8 +2873,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 c9478caa3c5489dead0419653fc98dca4ecd3db5..8a3e99149561270cc084633f73c344197f9903a5 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 :
@@ -142,6 +147,7 @@ REAL,    DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZW          ! Work array
 REAL,    DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZWSED       ! sedimentation fluxes
 
 INTEGER :: IIU,IJU,IKU, IIJKU
+LOGICAL :: GKRR_7,GSEDIC
 !
 !-------------------------------------------------------------------------------
 !
@@ -298,6 +304,12 @@ IF ( PRESENT( PSEA ) ) THEN
 ELSE
   GPRESENT_PSEA = .FALSE.
 END IF
+IF ( KRR == 7 ) THEN
+   GKRR_7 = .TRUE.
+ELSE
+   GKRR_7 = .FALSE.
+END IF
+GSEDIC = OSEDIC
 
 if ( lbudget_rc .and. osedic ) call Budget_store_init( tbudgets(NBUDGET_RC), 'SEDI', prcs(:, :, :) * prhodj(:, :, :) )
 if ( lbudget_rr )              call Budget_store_init( tbudgets(NBUDGET_RR), 'SEDI', prrs(:, :, :) * prhodj(:, :, :) )
@@ -309,7 +321,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)
 !
@@ -423,21 +435,21 @@ DO JN = 1 , KSPLITR
     IF ( KRR == 7 ) PRHS(:,:,:) = PRHS(:,:,:) + ZPRHS(:,:,:) * ZTSPLITR
   END IF
   !
-  !$mnh_do_concurrent( JI=KIB:KIE,JJ=KJB:KJE,JK=KKTB:KKTE )
-  IF ( OSEDIC ) GSEDIMC(JI,JJ,JK) =                &
-                   PRCS(JI,JJ,JK) > ZRTMIN(2)
-  GSEDIMR(JI,JJ,JK) =                            &
-                   PRRS(JI,JJ,JK) > ZRTMIN(3)
-  GSEDIMI(JI,JJ,JK) =                            &
-                   PRIS(JI,JJ,JK) > ZRTMIN(4)
-  GSEDIMS(JI,JJ,JK) =                            &
-                   PRSS(JI,JJ,JK) > ZRTMIN(5)
-  GSEDIMG(JI,JJ,JK) =                            &
-                   PRGS(JI,JJ,JK) > ZRTMIN(6)
-  IF ( KRR == 7 ) GSEDIMH(JI,JJ,JK) =            &
-       PRHS(JI,JJ,JK) > ZRTMIN(7)
-  !$mnh_end_do() ! CONCURRENT
-!$acc end kernels
+  ! mnh_do_concurrent( JI=KIB:KIE,JJ=KJB:KJE,JK=KKTB:KKTE )
+  IF ( GSEDIC ) GSEDIMC(:,:,:) =                &
+                   PRCS(:,:,:) > ZRTMIN(2)
+  GSEDIMR(:,:,:) =                            &
+                   PRRS(:,:,:) > ZRTMIN(3)
+  GSEDIMI(:,:,:) =                            &
+                   PRIS(:,:,:) > ZRTMIN(4)
+  GSEDIMS(:,:,:) =                            &
+                   PRSS(:,:,:) > ZRTMIN(5)
+  GSEDIMG(:,:,:) =                            &
+                   PRGS(:,:,:) > ZRTMIN(6)
+  IF ( GKRR_7 ) GSEDIMH(:,:,:) =            &
+                   PRHS(:,:,:) > ZRTMIN(7)
+  ! mnh_end_do() ! CONCURRENT
+  !$acc end kernels
 !
 #ifndef MNH_OPENACC
   IF ( OSEDIC ) ISEDIMC = COUNTJV( GSEDIMC(:,:,:), IC1(:), IC2(:), IC3(:) )
@@ -461,8 +473,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
@@ -502,7 +513,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
@@ -521,8 +532,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))
@@ -535,7 +545,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
@@ -554,8 +564,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))
@@ -571,7 +580,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
@@ -588,8 +597,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))
@@ -601,7 +609,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
@@ -619,8 +627,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))
@@ -632,7 +639,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
@@ -651,8 +658,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))
@@ -664,7 +670,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 690cbda36b5fbe985e99272d99da77b7d18b737f..887c8d3703b0cf86755b6894a063614d5c7f68e7 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
@@ -260,8 +260,7 @@ END DO
   !$mnh_end_do() ! CONCURRENT
   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 +274,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', &
@@ -290,8 +289,7 @@ END DO
 !$acc kernels
   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 +305,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 +319,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
@@ -353,8 +351,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 +361,10 @@ 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 +378,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 48ec7a5d07dd5a376f40eccb205e846447495727..2fb7efda00ff93ec60325e894608d7e3bff2846d 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 c08f6ffa45b66c56d2c09bbb10720463e9adc722..60a91dc4c0cf4d28e06c8704cce805044e685cf2 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
 !
 !
@@ -235,8 +240,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 +255,11 @@ 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 +272,13 @@ 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 +290,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 b98dcb2e81335ed15d7afcb27874f43c14416e20..c421fe7be432bcb775f143e9fe80374511f4bf61 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,29 @@ 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 +353,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 1fb7b5dc4ed0bba504b147f0c4209f0e6e3513a8..33f1de21130a0768c334059c2c5e1cefc9691454 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
 !
 !
@@ -347,12 +352,9 @@ IKE=KKU-JPVEXT_TURB*KKL
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
 ZKEFF(:,:,:) = PLM(:,:,:) * SQRT(PTKEM(:,:,:))
 #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)
    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
@@ -388,21 +390,15 @@ PDP(:,:,IKB) = PDP(:,:,IKB) * (1. + PDZZ(:,:,IKB+KKL)/PDZZ(:,:,IKB))
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
 ZFLX(:,:,:) = XCED * SQRT(PTKEM(:,:,:)) / PLEPS(:,:,:)
 #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)
    ZFLX(JI,JJ,JK) = XCED * BR_POW(PTKEM(JI,JJ,JK),0.5) / PLEPS(JI,JJ,JK)
-END DO
-#endif
-#ifdef MNH_COMPILER_NVHPC
-!$acc loop independent collapse(3)
+!$mnh_end_do()
 #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
@@ -427,10 +423,9 @@ CALL MZM_DEVICE(PRHODJ,ZTMP2_DEVICE) !Warning: re-used later
 ZA(:,:,:)     = - PTSTEP * XCET * ZTMP1_DEVICE(:,:,:) * ZTMP2_DEVICE(:,:,:) / PDZZ(:,:,:)**2
 !$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
@@ -443,12 +438,9 @@ CALL TRIDIAG_TKE(KKA,KKU,KKL,PTKEM,ZA,PTSTEP,PEXPL,PIMPL,PRHODJ,&
 CALL GET_HALO(ZRES)
 #else
 !$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) = 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 +548,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 +568,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 +586,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 81b1efeb290b65ba524d3be3d66924a8d7165885..bfa623c09c17160a3d4c409b71ad0bb9441620b2 100644
--- a/src/MNH/tridiag_thermo.f90
+++ b/src/MNH/tridiag_thermo.f90
@@ -262,10 +262,9 @@ CALL MZM_DEVICE(PRHODJ,ZMZM_RHODJ)
 #ifndef MNH_BITREP
 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 +281,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 +299,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 +323,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 +360,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
@@ -396,33 +371,28 @@ END DO !CONCURRENT
 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   
+   ! acc loop independent gang, vector collapse(2)   
 #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
@@ -433,25 +403,20 @@ END DO !CONCURRENT
 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   
+   ! acc loop independent gang, vector collapse(2)   
 #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 +426,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 6187983ab9d383388d5cb9b8a4d1e3dc8fb849de..5dd1ca731939e4142a9726d0b26a596dfc9670c7 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,25 +257,20 @@ 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
   !$acc loop  seq
   DO JK = IKB+KKL,IKE-KKL,KKL
 #ifdef MNH_COMPILER_NVHPC     
-     !$acc loop gang, vector collapse(2) independent
-#else
-     !$acc loop independent
+     ! acc loop gang, vector collapse(2) 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 d1e733a48fa88b0aa3ae617f25bb0cefd191e574..93bf378e4214a5cfbbaf6ec864ee82732743738d 100644
--- a/src/MNH/turb.f90
+++ b/src/MNH/turb.f90
@@ -878,7 +878,7 @@ END IF              ! loop end on KRRL >= 1
 IF ( KRRL >= 1 ) THEN
 !$acc kernels present_cr( zlocpexnm )
   IF ( KRRI >= 1 ) THEN
-    !$mnh_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)
@@ -889,7 +889,7 @@ IF ( KRRL >= 1 ) THEN
             - ZLSOCPEXNM(JI,JJ,JK) * PRRS(JI,JJ,JK,4)
     !$mnh_end_do()
  ELSE
-    !$mnh_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)
@@ -1084,7 +1084,7 @@ ENDIF
   ZCDUEFF(:,:) =-SQRT ( (PSFU(:,:)**2 + PSFV(:,:)**2) /                  &
                         (XMNH_TINY + ZUSLOPE(:,:)**2 + ZVSLOPE(:,:)**2 ) )
 #else
-  !$mnh_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)) ) )     
   !$mnh_end_do()
@@ -1878,7 +1878,7 @@ 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
-  !$mnh_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) ) )
   !$mnh_end_do()
 #endif
@@ -1931,7 +1931,8 @@ CALL MNH_MEM_GET( zdrvsatdt, size( pexn, 1 ), size( pexn, 2 ), size( pexn, 3 ) )
 !$acc end kernels
 !*      1.7 Lv/Cph/Exner at t-1
 !
-!$acc kernels present_cr(PLOCPEXN)
+!!$acc kernels present(PLOCPEXN)
+!$acc kernels
 !$mnh_do_concurrent(JI=1:JIU,JJ=1:JJU,JK=1:JKU)
    PLOCPEXN(JI,JJ,JK) = PLOCPEXN(JI,JJ,JK) / PEXN(JI,JJ,JK)
 !$mnh_end_do()
@@ -2214,6 +2215,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)
@@ -2272,7 +2274,7 @@ IF (ODZ) THEN
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
       PLM(:,:,:) = ( PLM(:,:,:) * ZTMP1_DEVICE(:,:,:) * ZTMP2_DEVICE(:,:,:) ) ** (1./3.)
 #else
-!$mnh_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. )
 !$mnh_end_do()
 #endif
@@ -2306,7 +2308,7 @@ ELSE
 #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP)
       PLM(:,:,:) = ( ZTMP1_DEVICE * ZTMP2_DEVICE ) ** (1./2.)
 #else
-   !$mnh_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. )
    !$mnh_end_do()
 #endif
@@ -2330,24 +2332,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   
@@ -2357,11 +2358,11 @@ IF (.NOT. ORMC01) THEN
 END IF
 !
 !$acc kernels
-!$mnh_do_concurrent(JI=1:JIU,JJ=1:JJU)
-   PLM(JI,JJ,KKA) = PLM(JI,JJ,KKB)
-! mnh_end_do()
-! mnh_do_concurrent(JI=1:JIU,JJ=1:JJU)
-   PLM(JI,JJ,KKU) = PLM(JI,JJ,KKE)
+!$mnh_do_concurrent(JI=1:JIU , JJ=1:JJU )
+   PLM(JI,JJ,KKA) = PLM(JI,JJ,KKB  )
+!$mnh_end_do()
+!$mnh_do_concurrent(JI=1:JIU , JJ=1:JJU )
+   PLM(JI,JJ,KKU  ) = PLM(JI,JJ,KKE)
 !$mnh_end_do()
 !$acc end kernels
 
@@ -2470,6 +2471,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 )
@@ -2577,7 +2579,7 @@ IF ( HTURBDIM /= '1DIM' ) THEN  ! 3D turbulence scheme
        call Mppdb_check( plm, "Dear mid1:plm" )
     end if
 !$acc kernels
-!$mnh_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. )
 !$mnh_end_do()
 !$acc end kernels
@@ -2600,8 +2602,8 @@ CALL EMOIST(KRR,KRRI,PTHLT,PRT,PLOCPEXNM,PAMOIST,PSRCT,ZEMOIST)
 !
 !$acc kernels present(ZWORK2D,PLM)
 IF (KRR>0) THEN
-   ! acc loop private(ZVAR)
-   !$mnh_do_concurrent(JI=1:JIU,JJ=1:JJU,JK=KKTB+1:KKTE-1)          
+   ! acc_nv loop independent collapse(3) private(ZVAR)
+   !$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)+ &
@@ -2619,8 +2621,8 @@ IF (KRR>0) THEN
             END IF
    !$mnh_end_do()
 ELSE! For dry atmos or unsalted ocean runs
-   ! acc loop private(ZVAR)
-   !$mnh_do_concurrent(JI=1:JIU,JJ=1:JJU,JK=KKTB+1:KKTE-1)
+   ! acc_nv loop independent collapse(3) private(ZVAR)
+   !$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
@@ -2650,7 +2652,7 @@ IF (GOCEAN) THEN
   ZWORK2D(:,:)=XG*(XALPHAOC*ZDTHLDZ(:,:,KKB)-XBETAOC*ZDRTDZ(:,:,KKB))
 #else
 !PW: bug: nvhpc 21.11 does not parallelize this loop even with loop independent directive!
-  !$mnh_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))
   !$mnh_end_do()
 #endif
@@ -2661,7 +2663,7 @@ ELSE
               (ZETHETA(:,:,KKB)*ZDTHLDZ(:,:,KKB)+ZEMOIST(:,:,KKB)*ZDRTDZ(:,:,KKB))
 #else
 !PW: bug: nvhpc 21.11 does not parallelize this loop even with loop independent directive!
-  !$mnh_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))
   !$mnh_end_do()
@@ -2681,14 +2683,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
@@ -2696,10 +2698,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 d36659eefcecfcb468ece7301982646d7f14fa02..554ac79574189ab8bd29cafd8ccae138736e3eb2 100644
--- a/src/MNH/turb_hor_thermo_flux.f90
+++ b/src/MNH/turb_hor_thermo_flux.f90
@@ -332,10 +332,9 @@ ZFLX(:,:,IKE+1) = ZFLX(:,:,IKE)
 CALL MXM_DEVICE( PK, ZTMP1_DEVICE )
 CALL GX_M_U_DEVICE(1,IKU,1,PTHLM,PDXX,PDZZ,PDZX,ZTMP2_DEVICE)
 !$acc kernels 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 +373,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)
@@ -398,31 +397,27 @@ END IF
 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)
@@ -765,10 +760,9 @@ END IF
   CALL MXM_DEVICE( PK, ZTMP1_DEVICE )
   CALL GX_M_U_DEVICE(1,IKU,1,PRM(:,:,:,1),PDXX,PDZZ,PDZX,ZTMP2_DEVICE)
 !$acc kernels 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
 !
@@ -804,38 +798,33 @@ END DO
   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
-    !$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)
@@ -1140,10 +1129,9 @@ END IF
   CALL MYM_DEVICE( PK, ZTMP1_DEVICE )
   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
@@ -1187,38 +1175,33 @@ IF (.NOT. L2D) THEN
   IF (.NOT. LFLAT) 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)
@@ -1507,10 +1490,9 @@ IF (KRR/=0) THEN
     CALL MYM_DEVICE( PK, ZTMP1_DEVICE )
     CALL GY_M_V_DEVICE(1,IKU,1,PRM(:,:,:,1),PDYY,PDZZ,PDZY, ZTMP2_DEVICE)
     !$acc kernels 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
@@ -1553,40 +1535,35 @@ IF (KRR/=0) THEN
     IF (.NOT. LFLAT) 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 bc2f326e218b664e672a99c5e8e350524b427fff..f724b68e3c183261e475f1b9c9cbae2b8f0fc9e9 100644
--- a/src/MNH/turb_hor_tke.f90
+++ b/src/MNH/turb_hor_tke.f90
@@ -224,24 +224,18 @@ ZFLX = -XCET * MXM(PK) * GX_M_U(1,IKU,1,PTKEM,PDXX,PDZZ,PDZX) ! < u'e >
 CALL MXM_DEVICE(PK,ZTMP1_DEVICE)
 CALL GX_M_U_DEVICE(1,IKU,1,PTKEM,PDXX,PDZZ,PDZX,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)
    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 )
 !
-#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
@@ -295,48 +289,33 @@ END IF
 IF (.NOT. LFLAT) THEN
   CALL MXM_DEVICE(PRHODJ,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) * 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)
@@ -377,12 +356,9 @@ IF (.NOT. L2D) THEN
   CALL MYM_DEVICE(PK,ZTMP1_DEVICE)
   CALL GY_M_V_DEVICE(1,IKU,1,PTKEM,PDYY,PDZZ,PDZY,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)
       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
 !
@@ -451,49 +427,34 @@ IF (.NOT. L2D) THEN
   IF (.NOT. LFLAT) THEN
     CALL MYM_DEVICE(PRHODJ,ZTMP1_DEVICE)
     !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-    !$acc loop independent collapse(3)
-#endif
-    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 8179cacc11d970fde619a4a35a4d5bf943fba9cb..3e6cd5654ef2120f87f7cb62a76d5cb35b39af22 100644
--- a/src/MNH/turb_hor_uw.f90
+++ b/src/MNH/turb_hor_uw.f90
@@ -286,12 +286,9 @@ ZFLX(:,:,:) =                                                      &
 CALL MZM_DEVICE(PK,ZTMP1_DEVICE)
 CALL MXM_DEVICE(ZTMP1_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)
    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 ) )
@@ -329,21 +326,15 @@ PRUS(:,:,:) = PRUS(:,:,:) - DZF( ZFLX* MXM( PMZM_PRHODJ ) / MXM( PDZZ ) )
 CALL MXM_DEVICE( PMZM_PRHODJ, ZTMP1_DEVICE )
 CALL MXM_DEVICE( PDZZ, 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) = 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
 !
@@ -359,61 +350,43 @@ END IF
 #else
   CALL MXM_DEVICE(PRHODJ,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) * 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
    !$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)*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 )
    !$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)
       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
@@ -432,22 +405,16 @@ IF (KSPLT==1) THEN
 #else
   CALL GZ_U_UW_DEVICE(PUM,PDZZ,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) *( 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 )
   !$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)
      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 7792771dcc5c986e3766df2a2c5ce54664255a1a..8ed651299666b659f0c029be7dc436fcb7752edb 100644
--- a/src/MNH/turb_hor_vw.f90
+++ b/src/MNH/turb_hor_vw.f90
@@ -286,12 +286,9 @@ IF (.NOT. L2D) THEN
   CALL MZM_DEVICE(PK,ZTMP1_DEVICE)
   CALL MYM_DEVICE(ZTMP1_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)
      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
@@ -336,21 +333,15 @@ IF (.NOT. L2D) THEN
   CALL MYM_DEVICE( PMZM_PRHODJ, ZTMP1_DEVICE )
   CALL MYM_DEVICE( PDZZ, 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) = 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
@@ -371,60 +362,42 @@ IF (.NOT. L2D) THEN
   IF (.NOT. LFLAT) THEN
     CALL MYM_DEVICE(PRHODJ, ZTMP1_DEVICE)
     !$acc kernels
-#ifdef MNH_COMPILER_NVHPC
-    !$acc loop independent collapse(3)
-#endif
-    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 )
     !$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)
        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)
@@ -453,22 +426,16 @@ IF (KSPLT==1) THEN
 #else
     CALL GZ_V_VW_DEVICE(PVM,PDZZ,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) *( 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 )
     !$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)
        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 8cd2a2ff7880c7ea80f82c5012fa4f135615cea6..c6058cb8a0c78525ee5a2f52b6680a03766c9ee3 100644
--- a/src/MNH/turb_ver.f90
+++ b/src/MNH/turb_ver.f90
@@ -676,12 +676,9 @@ ENDIF
 ! Denominator factor in 3rd order terms
 !
 !$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)
    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 18fb68491560fc02eff9e2ce3c23f3436a8bba7d..b2b0f0ead0f9bb7f805ad1fc26e08e39d75db264 100644
--- a/src/MNH/turb_ver_dyn_flux.f90
+++ b/src/MNH/turb_ver_dyn_flux.f90
@@ -531,10 +531,9 @@ ZSOURCE(:,:,:) = 0.
 #ifndef MNH_BITREP
 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
 
@@ -583,10 +582,9 @@ CALL MXM_DEVICE( PDZZ, ZTMP4_DEVICE )
 #ifndef MNH_BITREP
 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
@@ -601,29 +599,26 @@ END DO
 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
@@ -728,19 +723,17 @@ ZFLXZ(:,:,:)     = -XCMFS * MXM(ZKEFF) * &
                   DZM (PIMPL*ZRES + PEXPL*PUM) / MXM(PDZZ)
 #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
 !
@@ -801,10 +794,9 @@ PDP(:,:,:) = - MZF( MXF ( ZFLXZ * GZ_U_UW(PUM,PDZZ) )  )
 #else
 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 )
@@ -903,40 +895,35 @@ IF(HTURBDIM=='3DIM') THEN
 #else
   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)
@@ -956,18 +943,16 @@ IF(HTURBDIM=='3DIM') THEN
 #else
   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
   !
@@ -1115,10 +1100,9 @@ CALL MYM_DEVICE(ZTMP3_DEVICE,ZTMP4_DEVICE)
 #ifndef MNH_BITREP
 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
 !
@@ -1131,29 +1115,26 @@ END DO
 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
@@ -1256,19 +1237,17 @@ ZFLXZ(:,:,IKB:IKB)   =   MYM(PDZZ(:,:,IKB:IKB))  *                       &
   ) / 0.5 / ( 1. + MYM(PRHODJ(:,:,KKA:KKA)) / MYM(PRHODJ(:,:,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))
@@ -1321,18 +1300,16 @@ ZA(:,:,:) = - MZF( MYF ( ZFLXZ * GZ_V_VW(PVM,PDZZ) ) )
 #else
 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
 !
@@ -1426,40 +1403,35 @@ IF(HTURBDIM=='3DIM') THEN
   IF (.NOT. L2D) 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)
@@ -1480,18 +1452,16 @@ IF(HTURBDIM=='3DIM') THEN
 #else
     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 383ce40f41ff9f25094591c63348d98a47da258f..7ee5ec9af0563f6c3b05f67e2383b9616b942f98 100644
--- a/src/MNH/turb_ver_thermo_corr.f90
+++ b/src/MNH/turb_ver_thermo_corr.f90
@@ -566,22 +566,16 @@ END IF
   !dir$ concurrent
   ZTMP1_DEVICE(:,:,:) = PPHI3(:,:,:)*PDTH_DZ(:,:,:)**2
 #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)
      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(:,:,:) )
   !$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)
      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 
@@ -722,12 +716,9 @@ END IF
   !$acc end kernels
   CALL DZM_DEVICE( ZTMP1_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
+  !$mnh_end_do()
   !$acc end kernels
   CALL MZF_DEVICE( ZTMP3_DEVICE(:,:,:), ZTMP4_DEVICE(:,:,:) )
 #ifdef MNH_COMPILER_CCE
@@ -736,13 +727,10 @@ END IF
 #else
   !$acc kernels 
 #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)
      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
   !
@@ -763,10 +751,7 @@ END IF
   !$acc end kernels
 #else
   !$acc kernels 
-#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 +763,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
 
@@ -869,12 +854,9 @@ END IF
 !$acc end kernels
     CALL MZF_DEVICE( ZTMP1_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)
       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)  
@@ -1060,13 +1042,10 @@ END IF
     CALL DZM_DEVICE( ZTMP1_DEVICE(:,:,:), ZTMP3_DEVICE(:,:,:) )
     CALL DZM_DEVICE( ZTMP2_DEVICE(:,:,:), ZTMP4_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)
        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(:,:,:), &
@@ -1085,15 +1064,12 @@ END IF
     CALL DZM_DEVICE( ZTMP8_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)
        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)
@@ -1103,35 +1079,26 @@ END IF
     CALL DZM_DEVICE( ZTMP1_DEVICE(:,:,:), ZTMP3_DEVICE(:,:,:) )
     CALL DZM_DEVICE( ZTMP2_DEVICE(:,:,:), ZTMP4_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)
        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(:,:,:) )
     CALL MZF_DEVICE( ZTMP1_DEVICE(:,:,:), ZTMP4_DEVICE(:,:,:) )
     CALL MZF_DEVICE( ZTMP2_DEVICE(:,:,:), ZTMP5_DEVICE(:,:,:) )
     !$acc kernels  present_cr(zflxz)
-#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 +1116,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) 
@@ -1246,22 +1213,16 @@ END IF
     !dir$ concurrent
     ZTMP1_DEVICE(:,:,:) = PPSI3(:,:,:)*PDR_DZ(:,:,:)**2
 #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)
        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(:,:,:) )
     !$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)
        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
@@ -1404,21 +1365,15 @@ END IF
     !$acc end kernels
     CALL DZM_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) = 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
@@ -1426,14 +1381,11 @@ END IF
 #else
     !$acc kernels 
 #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)
        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
     !
@@ -1454,10 +1406,7 @@ END IF
    !$acc end kernels
 #else
     !$acc kernels 
-#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 +1418,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 a9499222d9919943d1479fa61655acd9114dcd37..3a7e9e213b45b74a79e20cba43ad476a8a664a26 100644
--- a/src/MNH/turb_ver_thermo_flux.f90
+++ b/src/MNH/turb_ver_thermo_flux.f90
@@ -745,22 +745,16 @@ ZDFDDTDZ(:,:,:) = -XCSHF*ZKEFF(:,:,:)*D_PHI3DTDZ_O_DDTDZ(PPHI3,PREDTH1,PREDR1,PR
 #else
 CALL DZM_DEVICE(PTHLM, 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)
    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)
 !$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)
    ZDFDDTDZ(JI,JJ,JK) = -XCSHF*ZKEFF(JI,JJ,JK)*ZTMP2_DEVICE(JI,JJ,JK)
-END DO   
+!$mnh_end_do()   
 !$acc end kernels
 #endif
 !
@@ -978,12 +972,9 @@ ZTMP1_DEVICE(:,:,:) = PTHLP(:,:,:) - PTHLM(:,:,:)
 !$acc end kernels
 CALL DZM_DEVICE( ZTMP1_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)
    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
@@ -1055,12 +1046,9 @@ ELSE
   IF (KRR /= 0) THEN
     CALL MZM_DEVICE(PETHETA,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) * ZFLXZ(JI,JJ,JK)
-    END DO
+    !$mnh_end_do()
 !$acc end kernels
     CALL MZF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE )
 !$acc kernels
@@ -1211,11 +1199,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
@@ -1256,22 +1244,16 @@ IF (KRR /= 0) THEN
 #else
   CALL DZM_DEVICE( PRM(:,:,:,1), 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)
      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)
   !$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)
      ZDFDDRDZ(JI,JJ,JK) = -XCSHF*ZKEFF(JI,JJ,JK)*ZTMP1_DEVICE(JI,JJ,JK)
-  END DO
+  !$mnh_end_do()
   !$acc end kernels
 #endif
   !
@@ -1492,12 +1474,9 @@ IF (KRR /= 0) THEN
 !$acc end kernels
   CALL DZM_DEVICE( ZTMP1_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)  
    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
   !
@@ -1555,21 +1534,15 @@ END DO
 #else
     CALL MZM_DEVICE(PEMOIST,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) * 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 +1563,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
diff --git a/src/MNH/write_lfifm1_for_diag_supp.f90 b/src/MNH/write_lfifm1_for_diag_supp.f90
index ea51feba2e068f73f4f09a49b7c737db1178363a..0967bc28ecc39aedeffc1d17f38d7e13b1d519fb 100644
--- a/src/MNH/write_lfifm1_for_diag_supp.f90
+++ b/src/MNH/write_lfifm1_for_diag_supp.f90
@@ -846,15 +846,15 @@ END IF
 !
 IF (NRTTOVINFO(1,1) /= NUNDEF) THEN
 ! PRINT*,'YOU ASK FOR BRIGHTNESS TEMPERATURE COMPUTED BY THE RTTOV CODE'
-#ifdef MNH_RTTOV_8
+#if defined(MNH_RTTOV_8)
   CALL CALL_RTTOV8(NDLON, NFLEV, NSTATM, XEMIS(:,:,1), XTSRAD, XSTATM, XTHT, XRT, &
                   XPABST, XZZ, XMFCONV, XCLDFR, XUT(:,:,IKB), XVT(:,:,IKB),   &
                   LUSERI, NRTTOVINFO, TPFILE                                  )
-#elif MNH_RTTOV_11
+#elif defined(MNH_RTTOV_11)
   CALL CALL_RTTOV11(NDLON, NFLEV, XEMIS(:,:,1), XTSRAD, XTHT, XRT,            &
                   XPABST, XZZ, XMFCONV, XCLDFR, XUT(:,:,IKB), XVT(:,:,IKB),   &
                   LUSERI, NRTTOVINFO, TPFILE                                  )
-#elif MNH_RTTOV_13
+#elif defined(MNH_RTTOV_13)
   CALL CALL_RTTOV13(NDLON, NFLEV, XEMIS(:,:,1), XTSRAD, XTHT, XRT,            &
                   XPABST, XZZ, XMFCONV, XCLDFR, XUT(:,:,IKB), XVT(:,:,IKB),   &
                   LUSERI, NRTTOVINFO, TPFILE                                  )
diff --git a/src/Rules.LXcray.mk b/src/Rules.LXcray.mk
index e1725ac089e31504e3698436663d204d78fe56da..9d23c4171761b42a1a7944cbf9b904e87bc114c0 100644
--- a/src/Rules.LXcray.mk
+++ b/src/Rules.LXcray.mk
@@ -255,11 +255,13 @@ MNH_MGSOLVER ?= YES
 MNH_GRIBAPI=no
 #
 NETCDF_SUPPFLAGS='-emf'
-ECCODES_FFLAGS='-emf -hsystem_alloc'
-ECCODES_CFLAGS=' -gdwarf-4 '
+ECCODES_FFLAGS='-hcpu=x86-64 -emf -hsystem_alloc'
+ECCODES_CFLAGS='-hcpu=x86-64 -gdwarf-4 '
 EC_CONF='-DIEEE_LE=1'
 CDF_CONF= CPP=cpp 
-HDF_CONF= CPP=cpp 
+HDF_CONF= CPP=cpp
+HDF_OPT ?= -hcpu=x86-64
+NETCDF_OPT ?= -hcpu=x86-64
 #
 # Bypat nvidia70 problème
 ifeq "$(CRAY_ACCEL_TARGET)" "nvidia70"
diff --git a/src/Rules.LXgfortran.mk b/src/Rules.LXgfortran.mk
index 5f4fffc6b00db2127d08950c94e897f58fcc97dc..c9c93db8f82097adfd5dc54bc4fc8c8f20ab4ec7 100644
--- a/src/Rules.LXgfortran.mk
+++ b/src/Rules.LXgfortran.mk
@@ -8,8 +8,6 @@
 #                                                        #
 ##########################################################
 #
-#   Gfortran version
-GFV=$(shell  gfortran --version | grep -E -m1 -o ' [[:digit:]\.]{2,}( |$$)'  | sed 's/\.//g' )
 #
 #OBJDIR_PATH=/home/escj/azertyuiopqsdfghjklm/wxcvbn/azertyuiopqsdfghjklmwxcvbn
 #
@@ -20,7 +18,7 @@ OPT_PERF2 = -O2
 OPT_CHECK = -fbounds-check -finit-real=nan
 OPT_I8    = -fdefault-integer-8 
 OPT_R8    = -fdefault-real-8 -fdefault-double-8
-OPT_OPENACC = -fopenacc -foffload=-march=gfx90a
+OPT_OPENACC = -fopenacc
 #
 ifeq "$(VER_USER)" "ZSOLVER"
 CPPFLAGS  += -DCARTESIANGEOMETRY -DPIECEWISELINEAR
@@ -66,8 +64,8 @@ CFLAGS    += -g -O0
 endif
 #
 ifeq "$(OPTLEVEL)" "OPENACC"
-CPPFLAGS    += -DMNH_OPENACC -fopenacc
-#OPT_BASE += -foffload=-lm
+CPPFLAGS    += -DMNH_OPENACC 
+OPT_BASE +=  -foffload=-march=gfx90a -foffload=-g -foffload=-lm -fno-fast-math -fno-associative-math
 OPT       = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF2)
 OPT0      = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF0)
 OPT_NOCB  = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF2)
@@ -76,9 +74,13 @@ CXXFLAGS = $(OPT_OPENACC)
 #$(OBJS_REPROD) : OPT = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF2) -Mvect=nosimd -Minfo=all -g
 endif
 #
-CC = gcc
-CXX = g++
-FC = gfortran 
+CC ?= gcc
+CXX ?= g++
+FC ?= gfortran 
+
+#   Gfortran version
+GFV=$(shell  $(F90) --version | grep -E -m1 -o ' [[:digit:]\.]{2,}( |$$)'  | sed 's/\.//g' )
+
 ifeq "$(VER_MPI)" "MPIAUTO"
 F90 = mpif90
 CPPFLAGS_SURCOUCHE += -DMNH_USE_MPI_STATUSES_IGNORE
@@ -87,7 +89,7 @@ ifeq "$(VER_MPI)" "MPICRAY"
 F90 = ftn
 CPPFLAGS_SURCOUCHE += -DMNH_USE_MPI_STATUSES_IGNORE
 else         
-F90 = gfortran
+F90 ?= gfortran
 endif
 endif
 #
@@ -98,7 +100,7 @@ FX90 = $(F90)
 FX90FLAGS     =  $(OPT) 
 #
 #LDFLAGS   =   -Wl,-warn-once
-LDFLAGS = $(OPT)
+LDFLAGS += $(OPT)
 #
 # preprocessing flags 
 #
@@ -107,12 +109,12 @@ CPP = mnh_expand
 #
 CPPFLAGS_C         += -DLITTLE_endian
 CPPFLAGS_SURFEX    =
-CPPFLAGS_SURCOUCHE += -DDEV_NULL
+CPPFLAGS_SURCOUCHE += -DDEV_NULL -DMPIVIDE
 CPPFLAGS_RAD       =
 CPPFLAGS_NEWLFI    = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT}
 CPPFLAGS_MNH       = -DMNH=MNH -DSFX_MNH
 CPPFLAGS_MNH       += -imacros MNH_OPENACC_NV_CR.CPP
-CPPFLAGS_MNH       += -DMNH_EXPAND
+CPPFLAGS_MNH       += -DMNH_EXPAND -DMNH_EXPAND_LOOP
 ifdef VER_GA
 CPPFLAGS_SURCOUCHE += -DMNH_GA
 INC                += -I${GA_ROOT}/include