diff --git a/src/ZSOLVER/ice_adjust.f90 b/src/ZSOLVER/ice_adjust.f90
index 864b5bc88ec32ff45953d8c38e6bab3b092fc26d..d19aa6b93f9c21a966943bdc63c3e4ab4343f274 100644
--- a/src/ZSOLVER/ice_adjust.f90
+++ b/src/ZSOLVER/ice_adjust.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1996-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1996-2022 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -280,6 +280,20 @@ INTEGER             :: IKE        ! K index value of the last inner mass point
 INTEGER             :: JITER,ITERMAX ! iterative loop for first order adjustment
 INTEGER             :: JI,JJ,JK
 !
+#ifndef MNH_OPENACC
+LOGICAL,DIMENSION(:,:,:), allocatable :: GTEMP
+!
+REAL, DIMENSION(:,:,:), allocatable :: ZSIGS,ZSRCS
+REAL, DIMENSION(:,:,:), allocatable &
+                         :: ZT,   &  ! adjusted temperature
+                   ZRV, ZRC, ZRI, &  ! adjusted state
+                            ZCPH, &  ! guess of the CPh for the mixing
+                            ZLV,  &  ! guess of the Lv at t+1
+                            ZLS,  &  ! guess of the Ls at t+1
+                         ZW1,ZW2, &  ! Work arrays for intermediate fields
+                         ZCRIAUT, &  ! Autoconversion thresholds
+                       ZHCF, ZHR
+#else
 LOGICAL,DIMENSION(:,:,:), POINTER, CONTIGUOUS :: GTEMP
 !
 REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZSIGS,ZSRCS
@@ -293,9 +307,16 @@ REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS &
                          ZCRIAUT, &  ! Autoconversion thresholds
                          ZHCF, ZHR
 REAL, DIMENSION(:,:,:), pointer , contiguous :: ZTEMP_BUD
+#endif
 !
+LOGICAL :: GPOUT_RV,GPOUT_RC,GPOUT_RI,GPOUT_TH
 !-------------------------------------------------------------------------------
 !
+GPOUT_RV = PRESENT(POUT_RV)
+GPOUT_RC = PRESENT(POUT_RC)
+GPOUT_RI = PRESENT(POUT_RI)
+GPOUT_TH = PRESENT(POUT_TH)
+!
 ! IN variables
 !
 !$acc data present( PRHODJ, PEXNREF, PSIGS, PMFCONV, PPABST, PZZ,     &
@@ -434,7 +455,7 @@ DO JITER =1,ITERMAX
   !*       2.3    compute the latent heat of vaporization Lv(T*) at t+1
   !                   and the latent heat of sublimation  Ls(T*) at t+1
   !
-!$acc kernels
+!$acc kernels present_cr(ZLV,ZLS,ZCPH)
   ZLV(:,:,:) = XLVTT + ( XCPV - XCL ) * ( ZT(:,:,:) -XTT )
   ZLS(:,:,:) = XLSTT + ( XCPV - XCI ) * ( ZT(:,:,:) -XTT )
   !
@@ -547,13 +568,15 @@ ENDDO
 !*       5.2    compute the cloud fraction PCLDFR
 !
 IF ( .NOT. OSUBG_COND ) THEN
-!$acc kernels
-  GTEMP(:,:,:) = PRCS(:,:,:) + PRIS(:,:,:) > 1.E-12 / PTSTEP
-  WHERE ( GTEMP(:,:,:) )
-    PCLDFR(:,:,:)  = 1.
-  ELSEWHERE
-    PCLDFR(:,:,:)  = 0.
-  ENDWHERE 
+!$acc kernels present_cr(GTEMP)
+DO CONCURRENT (JI=1:IIU,JJ=1:IJU,JK=1:IKU)   
+  GTEMP(JI,JJ,JK) = PRCS(JI,JJ,JK) + PRIS(JI,JJ,JK) > 1.E-12 / PTSTEP
+  IF ( GTEMP(JI,JJ,JK) )THEN
+    PCLDFR(JI,JJ,JK)  = 1.
+  ELSE
+    PCLDFR(JI,JJ,JK)  = 0.
+ ENDIF
+ENDDO
   IF ( SIZE(PSRCS,3) /= 0 ) THEN
     PSRCS(:,:,:) = PCLDFR(:,:,:)
   END IF
@@ -630,8 +653,8 @@ ELSE
   PTHS(:,:,:) = PTHS(:,:,:) + &
                 (ZW1 * ZLV(:,:,:) + ZW2 * ZLS(:,:,:)) / ZCPH(:,:,:)     &
                 /  PEXNREF(:,:,:)
-  IF(PRESENT(POUT_RV) .OR. PRESENT(POUT_RC) .OR. &
-    &PRESENT(POUT_RI) .OR. PRESENT(POUT_TH)) THEN
+  IF(GPOUT_RV .OR. GPOUT_RC .OR. &
+    &GPOUT_RI .OR. GPOUT_TH) THEN
     ZW1(:,:,:)=PRC_MF(:,:,:)
     ZW2(:,:,:)=PRI_MF(:,:,:)
     GTEMP(:,:,:) = ZW1(:,:,:)+ZW2(:,:,:)>ZRV(:,:,:)
@@ -648,10 +671,10 @@ ELSE
 ENDIF
 !
 !$acc kernels
-IF(PRESENT(POUT_RV)) POUT_RV=ZRV
-IF(PRESENT(POUT_RC)) POUT_RC=ZRC
-IF(PRESENT(POUT_RI)) POUT_RI=ZRI
-IF(PRESENT(POUT_TH)) POUT_TH=ZT / PEXN(:,:,:)
+IF(GPOUT_RV) POUT_RV=ZRV
+IF(GPOUT_RC) POUT_RC=ZRC
+IF(GPOUT_RI) POUT_RI=ZRI
+IF(GPOUT_TH) POUT_TH=ZT / PEXN(:,:,:)
 !$acc end kernels
 !
 !
@@ -701,10 +724,10 @@ CALL MPPDB_CHECK3D(PRIS,"ICE_ADJUST end:PRIS",PRECISION)
 !Check all OUT arrays
 CALL MPPDB_CHECK3D(PSRCS,"ICE_ADJUST end:PSRCS",PRECISION)
 CALL MPPDB_CHECK3D(PCLDFR,"ICE_ADJUST end:PCLDFR",PRECISION)
-IF (PRESENT(POUT_RV)) CALL MPPDB_CHECK3D(POUT_RV,"ICE_ADJUST end:POUT_RV")
-IF (PRESENT(POUT_RC)) CALL MPPDB_CHECK3D(POUT_RC,"ICE_ADJUST end:POUT_RC")
-IF (PRESENT(POUT_RI)) CALL MPPDB_CHECK3D(POUT_RI,"ICE_ADJUST end:POUT_RI")
-IF (PRESENT(POUT_TH)) CALL MPPDB_CHECK3D(POUT_TH,"ICE_ADJUST end:POUT_TH")
+IF (GPOUT_RV) CALL MPPDB_CHECK3D(POUT_RV,"ICE_ADJUST end:POUT_RV")
+IF (GPOUT_RC) CALL MPPDB_CHECK3D(POUT_RC,"ICE_ADJUST end:POUT_RC")
+IF (GPOUT_RI) CALL MPPDB_CHECK3D(POUT_RI,"ICE_ADJUST end:POUT_RI")
+IF (GPOUT_TH) CALL MPPDB_CHECK3D(POUT_TH,"ICE_ADJUST end:POUT_TH")
 IF (PRESENT(PHLC_HRC)) CALL MPPDB_CHECK3D(PHLC_HRC,"ICE_ADJUST end:PHLC_HRC")
 IF (PRESENT(PHLC_HCF)) CALL MPPDB_CHECK3D(PHLC_HCF,"ICE_ADJUST end:PHLC_HCF")
 IF (PRESENT(PHLI_HRI)) CALL MPPDB_CHECK3D(PHLI_HRI,"ICE_ADJUST end:PHLI_HRI")
diff --git a/src/ZSOLVER/sources_neg_correct.f90 b/src/ZSOLVER/sources_neg_correct.f90
index c712ef026ac09badd5cb03c8b11287b15d931de5..5602b75ccf615817e299c332cf382beb9053c7f6 100644
--- a/src/ZSOLVER/sources_neg_correct.f90
+++ b/src/ZSOLVER/sources_neg_correct.f90
@@ -243,11 +243,7 @@ end if
 
 !$acc data present( zt, zexn, zlv, zcph, zls, zcor )
 
-#ifdef MNH_COMPILER_CCE
-!$acc kernels present(zexn,zt,zlv)
-#else
-!$acc kernels 
-#endif
+!$acc kernels present_cr(zexn,zt,zlv)
 #ifndef MNH_BITREP
 zexn(:, :, :) = ( ppabst(:, :, :) / xp00 ) ** (xrd / xcpd )
 #else
@@ -257,11 +253,7 @@ zt  (:, :, :) = ptht(:, :, :) * zexn(:, :, :)
 zlv (:, :, :) = xlvtt + ( xcpv - xcl ) * ( zt(:, :, :) - xtt )
 !$acc end kernels
 if ( hcloud == 'ICE3' .or. hcloud == 'ICE4' .or. hcloud == 'LIMA' ) then
-#ifdef MNH_COMPILER_CCE
-!$acc kernels present(zls)
-#else
-!$acc kernels 
-#endif
+!$acc kernels present_cr(zls)
   zls(:, :, :) = xlstt + ( xcpv - xci ) * ( zt(:, :, :) - xtt )
 !$acc end kernels
 end if