diff --git a/src/MNH/condensation.f90 b/src/MNH/condensation.f90
index 4216322b05baf248ba8b5649561c920916f93b46..5af15ec9da3326514362b4fa54843659fec98f5f 100644
--- a/src/MNH/condensation.f90
+++ b/src/MNH/condensation.f90
@@ -394,12 +394,13 @@ IF (OUSERI) CALL COMPUTE_FRAC_ICE(HFRAC_ICE, ZFRAC, PT)
 IF (OUSERI) CALL COMPUTE_FRAC_ICE3D_DEVICE(HFRAC_ICE, ZFRAC, PT)
 #endif
 !
+!$acc kernels
 DO JK=IKTB,IKTE
 !PW: note: 10x faster to put the kernels zone inside the JK loop (NVHPC 21.9)
-!$acc kernels
+!acc kernels
   JKP=MAX(MIN(JK+KKL,IKTE),IKTB)
   JKM=MAX(MIN(JK-KKL,IKTE),IKTB)
-!$acc loop independent collapse(2)
+!$acc loop independent collapse(2) private( ZCOND, ZQ1, ZTEMP )
   DO JJ=KJB,KJE
     DO JI=KIB,KIE
       ! latent heats
@@ -594,8 +595,9 @@ DO JK=IKTB,IKTE
 
     END DO
   END DO
-!$acc end kernels
+!acc end kernels
 END DO
+!$acc end kernels
 !
 IF (MPPDB_INITIALIZED) THEN
   !Check all INOUT arrays
diff --git a/src/MNH/ice4_fast_rs.f90 b/src/MNH/ice4_fast_rs.f90
index cedb6f7aa783c51e57b02d374352e72ca6dbd353..9d635fc3efa5615ff115b4cf09f7dedebc7b112d 100644
--- a/src/MNH/ice4_fast_rs.f90
+++ b/src/MNH/ice4_fast_rs.f90
@@ -164,7 +164,8 @@ INTEGER                                    :: IZZW, IZZW2, IZZW6, IZFREEZ_RATE
 !$acc data present( PCOMPUTE, PRHODREF, PLVFACT, PLSFACT, PPRES, PDV, PKA, PCJ,                        &
 !$acc&              PLBDAR, PLBDAS, PT, PRVT, PRCT, PRRT, PRST, PRIAGGS, PRCRIMSS, PRCRIMSG, PRSRIMCG, &
 !$acc&              PRRACCSS, PRRACCSG, PRSACCRG, PRSMLTG, PRCMLTSR, PRS_TEND, PA_TH,                  &
-!$acc&              PA_RC, PA_RR, PA_RS, PA_RG )
+!$acc&              PA_RC, PA_RR, PA_RS, PA_RG )                                                       &
+!$acc&     present( XGAMINC_RIM1, XGAMINC_RIM2, XGAMINC_RIM4 )
 !
 !-------------------------------------------------------------------------------
 !
@@ -332,31 +333,32 @@ ELSE
     !
     !        5.1.1  select the PLBDAS
     !
-!$acc kernels
+!$acc kernels copyin( CSNOWRIMING )
 !$acc loop independent
     DO CONCURRENT( JJ = 1 : IGRIM )
       ZVEC1(JJ) = PLBDAS(I1(JJ))
-    END DO
     !
     !        5.1.2  find the next lower indice for the PLBDAS in the geometrical
     !               set of Lbda_s used to tabulate some moments of the incomplete
     !               gamma function
     !
-    ZVEC2(1:IGRIM) = MAX( 1.00001, MIN( REAL(NGAMINC)-0.00001,           &
+      ZVEC2(JJ) = MAX( 1.00001, MIN( REAL(NGAMINC)-0.00001,           &
 #ifndef MNH_BITREP
-                          XRIMINTP1 * LOG( ZVEC1(1:IGRIM) ) + XRIMINTP2 ) )
+                          XRIMINTP1 * LOG( ZVEC1(JJ) ) + XRIMINTP2 ) )
 #else
-                          XRIMINTP1 * BR_LOG( ZVEC1(1:IGRIM) ) + XRIMINTP2 ) )
+                          XRIMINTP1 * BR_LOG( ZVEC1(JJ) ) + XRIMINTP2 ) )
 #endif
-    IVEC2(1:IGRIM) = INT( ZVEC2(1:IGRIM) )
-    ZVEC2(1:IGRIM) = ZVEC2(1:IGRIM) - REAL( IVEC2(1:IGRIM) )
-    !
-    !        5.1.3  perform the linear interpolation of the normalized
-    !               "2+XDS"-moment of the incomplete gamma function
-    !
-    ZVEC1(1:IGRIM) =   XGAMINC_RIM1( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM)      &
-                     - XGAMINC_RIM1( IVEC2(1:IGRIM)   )*(ZVEC2(1:IGRIM) - 1.0)
+      IVEC2(JJ) = INT( ZVEC2(JJ) )
+      ZVEC2(JJ) = ZVEC2(JJ) - REAL( IVEC2(JJ) )
+      !
+      !        5.1.3  perform the linear interpolation of the normalized
+      !               "2+XDS"-moment of the incomplete gamma function
+      !
+      ZVEC1(JJ) =   XGAMINC_RIM1( IVEC2(JJ)+1 )* ZVEC2(JJ)      &
+                  - XGAMINC_RIM1( IVEC2(JJ)   )*(ZVEC2(JJ) - 1.0)
+    END DO
     ZZW(:) = 0.
+!$acc loop independent
     DO JJ = 1, IGRIM
       ZZW(I1(JJ)) = ZVEC1(JJ)
     END DO
@@ -383,6 +385,7 @@ ELSE
     ZVEC1(1:IGRIM) =  XGAMINC_RIM2( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM)      &
                     - XGAMINC_RIM2( IVEC2(1:IGRIM)   )*(ZVEC2(1:IGRIM) - 1.0)
     ZZW(:) = 0.
+!$acc loop independent
     DO JJ = 1, IGRIM
       ZZW(I1(JJ)) = ZVEC1(JJ)
     END DO
@@ -390,6 +393,7 @@ ELSE
     ZVEC1(1:IGRIM) =  XGAMINC_RIM4( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM)      &
                     - XGAMINC_RIM4( IVEC2(1:IGRIM)   )*(ZVEC2(1:IGRIM) - 1.0)
     ZZW2(:) = 0.
+!$acc loop independent
     DO JJ = 1, IGRIM
       ZZW2(I1(JJ)) = ZVEC1(JJ)
     END DO
@@ -397,17 +401,20 @@ ELSE
     !        5.1.6  riming-conversion of the large sized aggregates into graupeln
     !
     !
-    WHERE(GRIM(:))
-      PRS_TEND(:, IRCRIMS)=XCRIMSG * PRCT(:)               & ! RCRIMS
+!$acc loop independent
+    DO CONCURRENT( JJ = 1 : ISIZE )
+      IF ( GRIM(JJ) ) THEN
+        PRS_TEND(JJ, IRCRIMS)=XCRIMSG * PRCT(JJ)               & ! RCRIMS
 #ifndef MNH_BITREP
-                                   * PLBDAS(:)**XEXCRIMSG  &
-                                   * PRHODREF(:)**(-XCEXVT)
+                                     * PLBDAS(JJ)**XEXCRIMSG  &
+                                     * PRHODREF(JJ)**(-XCEXVT)
 #else
-                                   * BR_POW(PLBDAS(:),XEXCRIMSG) &
-                                   * BR_POW(PRHODREF(:),-XCEXVT)
+                                     * BR_POW(PLBDAS(JJ),XEXCRIMSG) &
+                                     * BR_POW(PRHODREF(JJ),-XCEXVT)
 #endif
-      ZZW6(:) = PRS_TEND(:, IRCRIMS) - PRS_TEND(:, IRCRIMSS) ! RCRIMSG
-    END WHERE
+        ZZW6(JJ) = PRS_TEND(JJ, IRCRIMS) - PRS_TEND(JJ, IRCRIMSS) ! RCRIMSG
+      END IF
+    END DO
 
     IF(CSNOWRIMING=='M90 ')THEN
       !Murakami 1990
@@ -499,6 +506,7 @@ ELSE
     !
     !        5.2.1  select the (PLBDAS,PLBDAR) couplet
     !
+!$acc loop independent
     DO JJ = 1, IGACC
       ZVEC1(JJ) = PLBDAS(I1(JJ))
       ZVEC2(JJ) = PLBDAR(I1(JJ))
@@ -508,27 +516,31 @@ ELSE
     !               in the geometrical set of (Lbda_s,Lbda_r) couplet use to
     !               tabulate the RACCSS-kernel
     !
-    ZVEC1(1:IGACC) = MAX( 1.00001, MIN( REAL(NACCLBDAS)-0.00001,           &
+!$acc loop independent
+    DO CONCURRENT( JJ = 1 : IGACC )
+      ZVEC1(JJ) = MAX( 1.00001, MIN( REAL(NACCLBDAS)-0.00001,           &
 #ifndef MNH_BITREP
-                          XACCINTP1S * LOG( ZVEC1(1:IGACC) ) + XACCINTP2S ) )
+                          XACCINTP1S * LOG( ZVEC1(JJ) ) + XACCINTP2S ) )
 #else
-                          XACCINTP1S * BR_LOG( ZVEC1(1:IGACC) ) + XACCINTP2S ) )
+                          XACCINTP1S * BR_LOG( ZVEC1(JJ) ) + XACCINTP2S ) )
 #endif
-    IVEC1(1:IGACC) = INT( ZVEC1(1:IGACC) )
-    ZVEC1(1:IGACC) = ZVEC1(1:IGACC) - REAL( IVEC1(1:IGACC) )
-    !
-    ZVEC2(1:IGACC) = MAX( 1.00001, MIN( REAL(NACCLBDAR)-0.00001,           &
+      IVEC1(JJ) = INT( ZVEC1(JJ) )
+      ZVEC1(JJ) = ZVEC1(JJ) - REAL( IVEC1(JJ) )
+      !
+      ZVEC2(JJ) = MAX( 1.00001, MIN( REAL(NACCLBDAR)-0.00001,           &
 #ifndef MNH_BITREP
-                          XACCINTP1R * LOG( ZVEC2(1:IGACC) ) + XACCINTP2R ) )
+                          XACCINTP1R * LOG( ZVEC2(JJ) ) + XACCINTP2R ) )
 #else
-                          XACCINTP1R * BR_LOG( ZVEC2(1:IGACC) ) + XACCINTP2R ) )
+                          XACCINTP1R * BR_LOG( ZVEC2(JJ) ) + XACCINTP2R ) )
 #endif
-    IVEC2(1:IGACC) = INT( ZVEC2(1:IGACC) )
-    ZVEC2(1:IGACC) = ZVEC2(1:IGACC) - REAL( IVEC2(1:IGACC) )
+      IVEC2(JJ) = INT( ZVEC2(JJ) )
+      ZVEC2(JJ) = ZVEC2(JJ) - REAL( IVEC2(JJ) )
+    END DO
     !
     !        5.2.3  perform the bilinear interpolation of the normalized
     !               RACCSS-kernel
     !
+!$acc loop independent
     DO 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) ) &
@@ -538,6 +550,7 @@ ELSE
                                                           * (ZVEC1(JJ) - 1.0)
     END DO
     ZZW(:) = 0.
+!$acc loop independent
     DO JJ = 1, IGACC
       ZZW(I1(JJ)) = ZVEC3(JJ)
     END DO
@@ -567,6 +580,7 @@ ELSE
     !        5.2.4b perform the bilinear interpolation of the normalized
     !               RACCS-kernel
     !
+!$acc loop independent
     DO JJ = 1, IGACC
       ZVEC3(JJ) =  (   XKER_RACCS(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
                     -  XKER_RACCS(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
@@ -576,6 +590,7 @@ ELSE
                                                            * (ZVEC1(JJ) - 1.0)
     END DO
     ZZW(:) = 0.
+!$acc loop independent
     DO JJ = 1, IGACC
       ZZW(I1(JJ)) = ZVEC3(JJ)
     END DO
@@ -585,6 +600,7 @@ ELSE
     !        5.2.5  perform the bilinear interpolation of the normalized
     !               SACCRG-kernel
     !
+!$acc loop independent
     DO 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) ) &
@@ -594,6 +610,7 @@ ELSE
                                                             * (ZVEC2(JJ) - 1.0)
     END DO
     ZZW(:) = 0.
+!$acc loop independent
     DO JJ = 1, IGACC
       ZZW(I1(JJ)) = ZVEC3(JJ)
     END DO
diff --git a/src/MNH/ice4_sedimentation_split.f90 b/src/MNH/ice4_sedimentation_split.f90
index 25c9ab140a2570488c485080651a8401f09dbdbe..184ad4a387e45abed787887b3ac7540ccbd14c24 100644
--- a/src/MNH/ice4_sedimentation_split.f90
+++ b/src/MNH/ice4_sedimentation_split.f90
@@ -680,13 +680,16 @@ DO WHILE (ANY(ZREMAINT>0.))
 !$acc end kernels
 !PW:BUG PGI: do not set independent (wrong results with PGI 19.10)
 !acc loop independent private(ZMRCHANGE)
-  DO JK = KKTB , KKTE
 !$acc kernels
-    ZMRCHANGE(:,:) = ZMAX_TSTEP(:,:) * POORHODZ(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
-    PRXT(:,:,JK) = PRXT(:,:,JK) + ZMRCHANGE(:,:) + PPRXS(:,:,JK) * ZMAX_TSTEP(:,:)
-    PRXS(:,:,JK) = PRXS(:,:,JK) + ZMRCHANGE(:,:) * ZINVTSTEP
-!$acc end kernels
+  DO JK = KKTB , KKTE
+!$acc loop independent collapse(2)
+    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
   ENDDO
+!$acc end kernels
 !$acc kernels
   PINPRX(:,:) = PINPRX(:,:) + ZWSED(:,:,KKB) / XRHOLW * (ZMAX_TSTEP(:,:) * ZINVTSTEP)
   IF (GPRESENT_PFPR) THEN