From 0bf04e3a421fec7ac463fe642cbc27c4a038842e Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Thu, 10 Oct 2019 11:21:15 +0200
Subject: [PATCH] Philippe 10/10/2019: OpenACC: replace 'declare copyin' by
 'data copyin' for use-associated variables (to be standard compliant)

---
 src/MNH/ice4_compute_pdf.f90             | 13 ++++++----
 src/MNH/ice4_fast_rg.f90                 | 20 +++++++++------
 src/MNH/ice4_fast_rh.f90                 | 18 +++++++------
 src/MNH/ice4_fast_rs.f90                 | 32 +++++++++++++-----------
 src/MNH/ice4_nucleation.f90              | 13 ++++++----
 src/MNH/ice4_nucleation_wrapper.f90      |  6 +++--
 src/MNH/ice4_rainfr_vert.f90             |  7 ++++--
 src/MNH/ice4_rimltc.f90                  |  7 ++++--
 src/MNH/ice4_rrhong.f90                  |  7 ++++--
 src/MNH/ice4_rsrimcg_old.f90             |  6 +++--
 src/MNH/ice4_sedimentation_split.f90     | 10 +++++---
 src/MNH/ice4_slow.f90                    | 13 ++++++----
 src/MNH/ice4_tendencies.f90              | 10 +++++---
 src/MNH/rain_ice_fast_rg.f90             |  5 ++--
 src/MNH/rain_ice_fast_rh.f90             |  6 ++---
 src/MNH/rain_ice_fast_rs.f90             |  5 ++--
 src/MNH/rain_ice_nucleation.f90          |  5 ++--
 src/MNH/rain_ice_red.f90                 | 14 +++++------
 src/MNH/rain_ice_sedimentation_split.f90 |  5 ++--
 src/MNH/resolved_cloud.f90               |  9 ++++---
 src/MNH/slow_terms.f90                   | 10 ++++----
 21 files changed, 130 insertions(+), 91 deletions(-)

diff --git a/src/MNH/ice4_compute_pdf.f90 b/src/MNH/ice4_compute_pdf.f90
index b95d226ed..2d56d0908 100644
--- a/src/MNH/ice4_compute_pdf.f90
+++ b/src/MNH/ice4_compute_pdf.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 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.
+!-----------------------------------------------------------------
 MODULE MODI_ICE4_COMPUTE_PDF
 INTERFACE
 SUBROUTINE ICE4_COMPUTE_PDF(KSIZE, HSUBG_AUCV, HSUBG_PR_PDF, &
@@ -93,10 +94,10 @@ REAL :: ZCOEFFRCM
 !
 !$acc declare create(GWORK,GWORK2,GWORK3,ZRCRAUTC,ZHLC_RCMAX,ZHLC_LRCLOCAL,ZHLC_HRCLOCAL,ZCOEFFRCM)
 !
-!$acc declare copyin(XCRIAUTC,XRTMIN)
-!
 !-------------------------------------------------------------------------------
-!
+
+!$acc data copyin( XCRIAUTC, XRTMIN )
+
 IF (MPPDB_INITIALIZED) THEN
   !Check all IN arrays
   CALL MPPDB_CHECK1D(PRHODREF,"ICE4_COMPUTE_PDF beg:PRHODREF",PRECISION)
@@ -359,5 +360,7 @@ IF (MPPDB_INITIALIZED) THEN
   CALL MPPDB_CHECK1D(PHLC_LRC,"ICE4_COMPUTE_PDF end:PHLC_LRC",PRECISION)
   CALL MPPDB_CHECK1D(PRF,"ICE4_COMPUTE_PDF end:PRF",PRECISION)
 END IF
-!
+
+!$acc end data
+
 END SUBROUTINE ICE4_COMPUTE_PDF
diff --git a/src/MNH/ice4_fast_rg.f90 b/src/MNH/ice4_fast_rg.f90
index 90f968144..fbd1f5140 100644
--- a/src/MNH/ice4_fast_rg.f90
+++ b/src/MNH/ice4_fast_rg.f90
@@ -190,13 +190,13 @@ REAL, DIMENSION(SIZE(PRHODREF))    :: ZZW,         &
 !
 !$acc declare create(IGDRY,I1,IVEC1,IVEC2,GDRY,GLDRYG,GMASK,ZVEC1,ZVEC2,ZVEC3,ZZW,ZRDRYG_INIT,ZRWETG_INIT)
 !
-!$acc declare copyin(XALPI,XALPW,XBETAI,XBETAW,XGAMW,XCI,XCL,XCPV,XESTT,XGAMI,XLMTT,XLVTT,XMD,XMV,XRV,XTT,   &
-!$acc&               LCRFLIMIT,LEVLIMIT,LNULLWETG,LWETGPOST,                                                 &
-!$acc&               XBS,XCEXVT,XCXG,XCXS,XDG,XRTMIN,                                                        &
-!$acc&               NDRYLBDAG,NDRYLBDAR,NDRYLBDAS,X0DEPG,X1DEPG,XCOLEXIG,XCOLEXSG,XCOLIG,XCOLSG,XDRYINTP1G, &
-!$acc&               XDRYINTP1R,XDRYINTP1S,XDRYINTP2G,XDRYINTP2R,XDRYINTP2S,XEX0DEPG,XEX1DEPG,XEXICFRR,      &
-!$acc&               XEXRCFRI,XFCDRYG,XFIDRYG,XFRDRYG,XFSDRYG,XICFRR,XKER_RDRYG,XKER_SDRYG,XLBRDRYG1,        &
-!$acc&               XLBRDRYG2,XLBRDRYG3,XLBSDRYG1,XLBSDRYG2,XLBSDRYG3,XRCFRI)
+!$acc data copyin( XALPI, XALPW, XBETAI, XBETAW, XGAMW, XCI, XCL, XCPV, XESTT, XGAMI, XLMTT, XLVTT, XMD, XMV, XRV, XTT, &
+!$acc&             LCRFLIMIT, LEVLIMIT, LNULLWETG, LWETGPOST,                                                           &
+!$acc&             XBS, XCEXVT, XCXG, XCXS, XDG, XRTMIN,                                                                &
+!$acc&             NDRYLBDAG, NDRYLBDAR, NDRYLBDAS, X0DEPG, X1DEPG, XCOLEXIG, XCOLEXSG, XCOLIG, XCOLSG, XDRYINTP1G,     &
+!$acc&             XDRYINTP1R, XDRYINTP1S, XDRYINTP2G, XDRYINTP2R, XDRYINTP2S, XEX0DEPG, XEX1DEPG, XEXICFRR,            &
+!$acc&             XEXRCFRI, XFCDRYG, XFIDRYG, XFRDRYG, XFSDRYG, XICFRR, XKER_RDRYG, XKER_SDRYG, XLBRDRYG1,             &
+!$acc&             XLBRDRYG2, XLBRDRYG3, XLBSDRYG1, XLBSDRYG2, XLBSDRYG3, XRCFRI )
 !
 !-------------------------------------------------------------------------------
 !
@@ -256,6 +256,7 @@ IRR       = KRR
 !*       6.1    rain contact freezing
 !
 !$acc kernels
+#if 1
 GMASK(:)=PRIT(:)>XRTMIN(4) .AND. PRRT(:)>XRTMIN(3) .AND. LDCOMPUTE(:)
 IF(GDSOFT) THEN
   WHERE(.NOT. GMASK(:))
@@ -301,6 +302,7 @@ PA_RI(:) = PA_RI(:) - PRICFRRG(:) - PRICFRR(:)
 PA_RR(:) = PA_RR(:) - PRRCFRIG(:) + PRICFRR(:)
 PA_RG(:) = PA_RG(:) + PRICFRRG(:) + PRRCFRIG(:)
 PA_TH(:) = PA_TH(:) + (PRRCFRIG(:) - PRICFRR(:))*(PLSFACT(:)-PLVFACT(:))
+#endif
 !
 !
 !*       6.3    compute the graupel growth
@@ -734,5 +736,7 @@ IF (MPPDB_INITIALIZED) THEN
   CALL MPPDB_CHECK1D(PRWETGH,"ICE4_FAST_RG end:PRWETGH",PRECISION)
   CALL MPPDB_CHECK1D(PRWETGH_MR,"ICE4_FAST_RG end:PRWETGH_MR",PRECISION)
 END IF
-!
+
+!$acc end data
+
 END SUBROUTINE ICE4_FAST_RG
diff --git a/src/MNH/ice4_fast_rh.f90 b/src/MNH/ice4_fast_rh.f90
index 35122273e..4d27b08cb 100644
--- a/src/MNH/ice4_fast_rh.f90
+++ b/src/MNH/ice4_fast_rh.f90
@@ -175,13 +175,13 @@ REAL, DIMENSION(SIZE(PRHODREF))    :: ZZW, &
 !$acc declare create(IHAIL,IGWET,I1,IVEC1,IVEC2,GHAIL,GWET,GMASK,LLWETH,LLDRYH, &
 !$acc&               ZVEC1,ZVEC2,ZVEC3,ZZW,ZRDRYH_INIT,ZRWETH_INIT,ZRDRYHG)
 !
-!$acc declare copyin(XALPI,XALPW,XBETAI,XBETAW,XGAMW,XCI,XCL,XCPV,XESTT,XGAMI,XLMTT,XLVTT,XMD,XMV,XRV,XTT,           &
-!$acc&               LCONVHG,LEVLIMIT,LNULLWETH,LWETHPOST,                                                           &
-!$acc&               XBG,XBS,XCEXVT,XCXG,XCXH,XCXS,XDH,XRTMIN,                                                       &
-!$acc&               NWETLBDAG,NWETLBDAH,NWETLBDAR,NWETLBDAS,X0DEPH,X1DEPH,XCOLEXGH,XCOLEXIH,XCOLGH,XCOLIH,XCOLEXSH, &
-!$acc&               XCOLSH,XEX0DEPH,XEX1DEPH,XFGWETH,XFRWETH,XFSWETH,XFWETH,XKER_GWETH,XKER_RWETH,XKER_SWETH,       &
-!$acc&               XLBGWETH1,XLBGWETH2,XLBGWETH3,XLBRWETH1,XLBRWETH2,XLBRWETH3,XLBSWETH1,XLBSWETH2,XLBSWETH3,      &
-!$acc&               XWETINTP1G,XWETINTP1H,XWETINTP1R,XWETINTP1S,XWETINTP2G,XWETINTP2H,XWETINTP2R,XWETINTP2S)
+!$acc data copyin( XALPI, XALPW, XBETAI, XBETAW, XGAMW, XCI, XCL, XCPV, XESTT, XGAMI, XLMTT, XLVTT, XMD, XMV, XRV, XTT,      &
+!$acc&             LCONVHG, LEVLIMIT, LNULLWETH, LWETHPOST,                                                                  &
+!$acc&             XBG, XBS, XCEXVT, XCXG, XCXH, XCXS, XDH, XRTMIN,                                                          &
+!$acc&             NWETLBDAG, NWETLBDAH, NWETLBDAR, NWETLBDAS, X0DEPH, X1DEPH, XCOLEXGH, XCOLEXIH, XCOLGH, XCOLIH, XCOLEXSH, &
+!$acc&             XCOLSH, XEX0DEPH, XEX1DEPH, XFGWETH, XFRWETH, XFSWETH, XFWETH, XKER_GWETH, XKER_RWETH, XKER_SWETH,        &
+!$acc&             XLBGWETH1, XLBGWETH2, XLBGWETH3, XLBRWETH1, XLBRWETH2, XLBRWETH3, XLBSWETH1, XLBSWETH2, XLBSWETH3,        &
+!$acc&             XWETINTP1G, XWETINTP1H, XWETINTP1R, XWETINTP1S, XWETINTP2G, XWETINTP2H, XWETINTP2R, XWETINTP2S )
 !
 !-------------------------------------------------------------------------------
 !
@@ -768,5 +768,7 @@ IF (MPPDB_INITIALIZED) THEN
   CALL MPPDB_CHECK1D(PRGDRYH,"ICE4_FAST_RH end:PRGDRYH",PRECISION)
   CALL MPPDB_CHECK1D(PRDRYHG,"ICE4_FAST_RH end:PRDRYHG",PRECISION)
 END IF
-!
+
+!$acc end data
+
 END SUBROUTINE ICE4_FAST_RH
diff --git a/src/MNH/ice4_fast_rs.f90 b/src/MNH/ice4_fast_rs.f90
index a1689ce7d..837b581c9 100644
--- a/src/MNH/ice4_fast_rs.f90
+++ b/src/MNH/ice4_fast_rs.f90
@@ -134,11 +134,6 @@ REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RR
 REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RS
 REAL, DIMENSION(KSIZE),       INTENT(INOUT) :: PA_RG
 !
-!$acc declare present(KSIZE,LDSOFT,LDCOMPUTE,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)
-!
 !*       0.2  declaration of local variables
 !
 INTEGER, PARAMETER :: IRCRIMS=1, IRCRIMSS=2, IRSRIMCG=3, IRRACCS=4, IRRACCSS=5, IRSACCRG=6
@@ -152,17 +147,22 @@ LOGICAL                            :: GDSOFT,GEVLIMIT !Workaround of PGI bug wit
 LOGICAL, DIMENSION(SIZE(PRHODREF)) :: GRIM, GACC, GMASK
 REAL, DIMENSION(SIZE(PRHODREF))    :: ZVEC1, ZVEC2, ZVEC3
 REAL, DIMENSION(SIZE(PRHODREF))    :: ZZW, ZZW2, ZZW6, ZFREEZ_RATE
+
+!$acc data present( KSIZE, LDSOFT, LDCOMPUTE, 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 declare create(IGRIM,IGACC,I1,IVEC1,IVEC2,GRIM,GACC,GMASK,ZVEC1,ZVEC2,ZVEC3,ZZW,ZZW2,ZZW6,ZFREEZ_RATE)
+!$acc&     create( IGRIM, IGACC, I1, IVEC1, IVEC2, GRIM, GACC, GMASK, ZVEC1, ZVEC2, ZVEC3, ZZW, ZZW2, ZZW6, ZFREEZ_RATE ) &
 !
-!$acc declare copyin(XALPI,XALPW,XBETAI,XBETAW,XCI,XCL,XCPV,XESTT,XGAMI,XGAMW,XLMTT,XLVTT,XMD,XMV,XRV,XTT,  &
-!$acc&               LEVLIMIT, CSNOWRIMING,                                                                 &
-!$acc&               XBS,XCEXVT,XCXS,XRTMIN,                                                                &
-!$acc&               NACCLBDAR,NACCLBDAS,NGAMINC,X0DEPS,X1DEPS,XACCINTP1R,XACCINTP1S,XACCINTP2R,XACCINTP2S, &
-!$acc&               XCRIMSG,XCRIMSS,XEX0DEPS,XEX1DEPS,XEXCRIMSG,XEXCRIMSS,XEXSRIMCG,XEXSRIMCG2,XFRACCSS,   &
-!$acc&               XFSACCRG,XFSCVMG,XGAMINC_RIM1,XGAMINC_RIM1,XGAMINC_RIM2,XGAMINC_RIM4,XKER_RACCS,       &
-!$acc&               XKER_RACCSS,XKER_SACCRG,XLBRACCS1,XLBRACCS2,XLBRACCS3,XLBSACCR1,XLBSACCR2,XLBSACCR3,   &
-!$acc&               XRIMINTP1,XRIMINTP2,XSRIMCG,XSRIMCG2,XSRIMCG3)
+!$acc&     copyin( XALPI, XALPW, XBETAI, XBETAW, XCI, XCL, XCPV, XESTT, XGAMI, XGAMW, XLMTT, XLVTT, XMD, XMV, XRV, XTT,   &
+!$acc&             LEVLIMIT,  CSNOWRIMING,                                                                                &
+!$acc&             XBS, XCEXVT, XCXS, XRTMIN,                                                                             &
+!$acc&             NACCLBDAR, NACCLBDAS, NGAMINC, X0DEPS, X1DEPS, XACCINTP1R, XACCINTP1S, XACCINTP2R, XACCINTP2S,         &
+!$acc&             XCRIMSG, XCRIMSS, XEX0DEPS, XEX1DEPS, XEXCRIMSG, XEXCRIMSS, XEXSRIMCG, XEXSRIMCG2, XFRACCSS,           &
+!$acc&             XFSACCRG, XFSCVMG, XGAMINC_RIM1, XGAMINC_RIM2, XGAMINC_RIM4, XKER_RACCS,                               &
+!$acc&             XKER_RACCSS, XKER_SACCRG, XLBRACCS1, XLBRACCS2, XLBRACCS3, XLBSACCR1, XLBSACCR2, XLBSACCR3,            &
+!$acc&             XRIMINTP1, XRIMINTP2, XSRIMCG, XSRIMCG2, XSRIMCG3 )
 !
 !-------------------------------------------------------------------------------
 !
@@ -671,5 +671,7 @@ IF (MPPDB_INITIALIZED) THEN
   CALL MPPDB_CHECK1D(PRRACCSG,"ICE4_FAST_RS end:PRRACCSG",PRECISION)
   CALL MPPDB_CHECK1D(PRSACCRG,"ICE4_FAST_RS end:PRSACCRG",PRECISION)
 END IF
-!
+
+!$acc end data
+
 END SUBROUTINE ICE4_FAST_RS
diff --git a/src/MNH/ice4_nucleation.f90 b/src/MNH/ice4_nucleation.f90
index 73c5f20b1..c03d530d5 100644
--- a/src/MNH/ice4_nucleation.f90
+++ b/src/MNH/ice4_nucleation.f90
@@ -2,6 +2,7 @@
 !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.
+!-----------------------------------------------------------------
 MODULE MODI_ICE4_NUCLEATION
 INTERFACE
 SUBROUTINE ICE4_NUCLEATION(KSIZE, ODSOFT, ODCOMPUTE, &
@@ -94,10 +95,10 @@ REAL, DIMENSION(KSIZE)    :: ZZW,      & ! Work array
 !
 !$acc declare create(JI,GNEGT,GWORK,GWORK2,ZW,ZZW,ZUSW,ZSSI)
 !
-!$acc declare copyin(XALPI,XALPW,XBETAI,XBETAW,XGAMI,XGAMW,XMD,XMV,XTT, &
-!$acc&               LFEEDBACKT,                                        &
-!$acc&               XALPHA1,XALPHA2,XBETA1,XBETA2,XMNU0,XNU10,XNU20,   &
-!$acc&               XRTMIN)
+!$acc data copyin( XALPI, XALPW, XBETAI, XBETAW, XGAMI, XGAMW, XMD, XMV, XTT, &
+!$acc&             LFEEDBACKT,                                                &
+!$acc&             XALPHA1, XALPHA2, XBETA1, XBETA2, XMNU0, XNU10, XNU20,     &
+!$acc&             XRTMIN )
 !
 !-------------------------------------------------------------------------------
 !
@@ -239,5 +240,7 @@ IF (MPPDB_INITIALIZED) THEN
   CALL MPPDB_CHECK(PB_RV,"ICE4_NUCLEATION end:PB_RV")
   CALL MPPDB_CHECK(PB_RI,"ICE4_NUCLEATION end:PB_RI")
 END IF
-!
+
+!$acc end data
+
 END SUBROUTINE ICE4_NUCLEATION
diff --git a/src/MNH/ice4_nucleation_wrapper.f90 b/src/MNH/ice4_nucleation_wrapper.f90
index 328fd5f3c..c9718a988 100644
--- a/src/MNH/ice4_nucleation_wrapper.f90
+++ b/src/MNH/ice4_nucleation_wrapper.f90
@@ -96,7 +96,7 @@ REAL, DIMENSION(:), ALLOCATABLE    :: ZZT,       & ! Temperature
 !$acc declare create(IDX,JI,JJ,JK,JL,GDSOFT,GLDCOMPUTE,GNEGT,INEGT,INEGT_TMP,I1,I2,I3,ZZT,ZPRES,ZRVT,ZCIT,ZTHT, &
 !$acc&               ZRHODREF,ZEXN,ZLSFACT,ZRVHENI_MR,ZB_TH,ZB_RV,ZB_RI)
 !
-!$acc declare copyin(XTT)
+!$acc data copyin( XTT )
 !-------------------------------------------------------------------------------
 !
 IF (MPPDB_INITIALIZED) THEN
@@ -192,5 +192,7 @@ IF (MPPDB_INITIALIZED) THEN
   !Check all OUT arrays
   CALL MPPDB_CHECK(PRVHENI_MR,"ICE4_NUCLEATION_WRAPPER end:PRVHENI_MR")
 END IF
-!
+
+!$acc end data
+
 END SUBROUTINE ICE4_NUCLEATION_WRAPPER
diff --git a/src/MNH/ice4_rainfr_vert.f90 b/src/MNH/ice4_rainfr_vert.f90
index 6229d3980..d0787c12f 100644
--- a/src/MNH/ice4_rainfr_vert.f90
+++ b/src/MNH/ice4_rainfr_vert.f90
@@ -2,6 +2,7 @@
 !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.
+!-----------------------------------------------------------------
 MODULE MODI_ICE4_RAINFR_VERT
 INTERFACE
 SUBROUTINE ICE4_RAINFR_VERT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, PPRFR, PRR)
@@ -49,7 +50,7 @@ REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN)    :: PRR   !Rain field
 !
 INTEGER :: JI, JJ, JK
 !
-!$acc declare copyin(XRTMIN)
+!$acc data copyin( XRTMIN )
 !
 !-------------------------------------------------------------------------------
 !
@@ -81,5 +82,7 @@ END DO
 !
 !Check all INOUT arrays
 CALL MPPDB_CHECK3D(PPRFR,"ICE4_RAINFR_VERT end:PPRFR",PRECISION)
-!
+
+!$acc end data
+
 END SUBROUTINE ICE4_RAINFR_VERT
diff --git a/src/MNH/ice4_rimltc.f90 b/src/MNH/ice4_rimltc.f90
index 65968cf75..026fc4afc 100644
--- a/src/MNH/ice4_rimltc.f90
+++ b/src/MNH/ice4_rimltc.f90
@@ -2,6 +2,7 @@
 !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.
+!-----------------------------------------------------------------
 MODULE MODI_ICE4_RIMLTC
 INTERFACE
 SUBROUTINE ICE4_RIMLTC(KSIZE, LDSOFT, LDCOMPUTE, &
@@ -80,7 +81,7 @@ LOGICAL :: GDSOFT, GFEEDBACKT !Workaround of PGI bug with OpenACC (at least up t
 LOGICAL, DIMENSION(KSIZE) :: GMASK
 !$acc declare create(GMASK)
 !
-!$acc declare copyin(XTT,LFEEDBACKT)
+!$acc data copyin( XTT, LFEEDBACKT )
 !-------------------------------------------------------------------------------
 IF (MPPDB_INITIALIZED) THEN
   !Check all IN arrays
@@ -131,5 +132,7 @@ IF (MPPDB_INITIALIZED) THEN
   !Check all OUT arrays
   CALL MPPDB_CHECK(PRIMLTC_MR,"ICE4_RIMLTC end:PRIMLTC_MR")
 END IF
-!
+
+!$acc end data
+
 END SUBROUTINE ICE4_RIMLTC
diff --git a/src/MNH/ice4_rrhong.f90 b/src/MNH/ice4_rrhong.f90
index 92eff5e43..be99b28cc 100644
--- a/src/MNH/ice4_rrhong.f90
+++ b/src/MNH/ice4_rrhong.f90
@@ -2,6 +2,7 @@
 !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.
+!-----------------------------------------------------------------
 MODULE MODI_ICE4_RRHONG
 INTERFACE
 SUBROUTINE ICE4_RRHONG(KSIZE, LDSOFT, LDCOMPUTE, &
@@ -81,7 +82,7 @@ LOGICAL :: GDSOFT, GFEEDBACKT !Workaround of PGI bug with OpenACC (at least up t
 LOGICAL, DIMENSION(SIZE(PRRT)) :: GMASK
 !$acc declare create(GMASK)
 !
-!$acc declare copyin(XTT,XRTMIN,LFEEDBACKT)
+!$acc data copyin( XTT, XRTMIN, LFEEDBACKT )
 !
 !-------------------------------------------------------------------------------
 IF (MPPDB_INITIALIZED) THEN
@@ -132,5 +133,7 @@ IF (MPPDB_INITIALIZED) THEN
   !Check all OUT arrays
   CALL MPPDB_CHECK(PRRHONG_MR,"ICE4_RRHONG end:PRRHONG_MR")
 END IF
-!
+
+!$acc end data
+
 END SUBROUTINE ICE4_RRHONG
diff --git a/src/MNH/ice4_rsrimcg_old.f90 b/src/MNH/ice4_rsrimcg_old.f90
index 19022b11d..ea1c477b9 100644
--- a/src/MNH/ice4_rsrimcg_old.f90
+++ b/src/MNH/ice4_rsrimcg_old.f90
@@ -91,7 +91,7 @@ REAL, DIMENSION(SIZE(PRHODREF))    :: ZZW
 !
 !$acc declare create(IGRIM, IVEC1, IVEC2, GRIM, ZVEC1, ZVEC2, ZZW)
 !
-!$acc declare copyin(XTT,CSNOWRIMING,XRTMIN,NGAMINC,XEXSRIMCG,XGAMINC_RIM2,XRIMINTP1,XRIMINTP2,XSRIMCG)
+!$acc data copyin( XTT, CSNOWRIMING, XRTMIN, NGAMINC, XEXSRIMCG, XGAMINC_RIM2, XRIMINTP1, XRIMINTP2, XSRIMCG )
 !
 !-------------------------------------------------------------------------------
 !
@@ -191,5 +191,7 @@ IF (MPPDB_INITIALIZED) THEN
   !Check all OUT arrays
   CALL MPPDB_CHECK(PRSRIMCG_MR,"ICE4_RSRIMCG_OLD end:PRSRIMCG_MR")
 END IF
-!
+
+!$acc end data
+
 END SUBROUTINE ICE4_RSRIMCG_OLD
diff --git a/src/MNH/ice4_sedimentation_split.f90 b/src/MNH/ice4_sedimentation_split.f90
index 15f5b7189..be8781cd4 100644
--- a/src/MNH/ice4_sedimentation_split.f90
+++ b/src/MNH/ice4_sedimentation_split.f90
@@ -442,9 +442,9 @@ REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),0:SIZE(PRHODREF,3)+1) :: ZWSED
 !$acc declare create(I1,I2,I3,ZINVTSTEP,   &
 !$acc               ZFSED,ZEXSED,ZMAX_TSTEP,ZRSMIN,ZREMAINT,ZWSED)
 !
-!$acc declare copyin(XCPD,XP00,XRD,                                                             &
-!$acc&               XCC,XCEXVT,XDC,XLBEXC,XRTMIN,                                              &
-!$acc&               XEXCSEDI,XEXSEDG,XEXSEDH,XEXSEDR,XEXSEDS,XFSEDG,XFSEDH,XFSEDI,XFSEDR,XFSEDS)
+!$acc data copyin( XCPD, XP00, XRD,                                                                     &
+!$acc&             XCC, XCEXVT, XDC, XLBEXC, XRTMIN,                                                    &
+!$acc&             XEXCSEDI, XEXSEDG, XEXSEDH, XEXSEDR, XEXSEDS, XFSEDG, XFSEDH, XFSEDI, XFSEDR, XFSEDS )
 !
 IF (MPPDB_INITIALIZED) THEN
   !Check all IN arrays
@@ -661,7 +661,9 @@ IF (MPPDB_INITIALIZED) THEN
   !Check all OUT arrays
   CALL MPPDB_CHECK(PINPRX,"INTERNAL_SEDIM_SPLI end:PINPRX")
 END IF
-!
+
+!$acc end data
+
 END SUBROUTINE INTERNAL_SEDIM_SPLI
 !
 END SUBROUTINE ICE4_SEDIMENTATION_SPLIT
diff --git a/src/MNH/ice4_slow.f90 b/src/MNH/ice4_slow.f90
index 5459558e3..38416765e 100644
--- a/src/MNH/ice4_slow.f90
+++ b/src/MNH/ice4_slow.f90
@@ -2,6 +2,7 @@
 !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.
+!-----------------------------------------------------------------
 MODULE MODI_ICE4_SLOW
 INTERFACE
 SUBROUTINE ICE4_SLOW(KSIZE, LDSOFT, LDCOMPUTE, PRHODREF, PT,&
@@ -125,10 +126,10 @@ REAL                               :: ZTIMAUTIC
 !
 !$acc declare create(ZCRIAUTI,ZTIMAUTIC,GMASK)
 !
-!$acc declare copyin(XTT,                                                                              &
-!$acc&               XCEXVT,XRTMIN,                                                                    &
-!$acc&               X0DEPG,X0DEPS,X1DEPG,X1DEPS,XACRIAUTI,XALPHA3,XBCRIAUTI,XBETA3,XCOLEXIS,XCRIAUTI, &
-!$acc&               XEX0DEPG,XEX0DEPS,XEX1DEPG,XEX1DEPS,XEXIAGGS,XFIAGGS,XHON,XTEXAUTI,XTIMAUTI       )
+!$acc data copyin( XTT,                                                                                       &
+!$acc&             XCEXVT, XRTMIN,                                                                            &
+!$acc&             X0DEPG, X0DEPS, X1DEPG, X1DEPS, XACRIAUTI, XALPHA3, XBCRIAUTI, XBETA3, XCOLEXIS, XCRIAUTI, &
+!$acc&             XEX0DEPG, XEX0DEPS, XEX1DEPG, XEX1DEPS, XEXIAGGS, XFIAGGS, XHON, XTEXAUTI, XTIMAUTI        )
 !
 !-------------------------------------------------------------------------------
 !
@@ -319,5 +320,7 @@ IF (MPPDB_INITIALIZED) THEN
   CALL MPPDB_CHECK(PA_RS,"ICE4_SLOW end:PA_RS")
   CALL MPPDB_CHECK(PA_RG,"ICE4_SLOW end:PA_RG")
 END IF
-!
+
+!$acc end data
+
 END SUBROUTINE ICE4_SLOW
diff --git a/src/MNH/ice4_tendencies.f90 b/src/MNH/ice4_tendencies.f90
index e819001b0..377b3cce2 100644
--- a/src/MNH/ice4_tendencies.f90
+++ b/src/MNH/ice4_tendencies.f90
@@ -329,9 +329,9 @@ REAL, DIMENSION(KIT,KJT,KKT) :: ZRRT3D
 !$acc declare create(ZRVT,ZRCT,ZRRT,ZRIT,ZRST,ZRGT,ZT,ZTHT,ZZW,ZSSI,ZKA,ZDV,ZAI,ZCJ,ZRF,               &
 !$acc&               ZLBDAR,ZLBDAS,ZLBDAG,ZLBDAH,ZLBDAR_RF,ZRGSI,ZRGSI_MR,ZRRT3D,IDX,JI,JJ,JK,JL,LLWETG)
 !
-!$acc declare copyin(XALPI,XBETAI,XCI,XCPV,XGAMI,XLSTT,XMD,XMV,XP00,XRV,XTT,          &
-!$acc&               XSCFAC,                                                          &
-!$acc&               XLBDAS_MAX,XLBEXG,XLBEXH,XLBEXR,XLBEXS,XLBG,XLBH,XLBR,XLBS,XRTMIN)
+!$acc data copyin( XALPI, XBETAI, XCI, XCPV, XGAMI, XLSTT, XMD, XMV, XP00, XRV, XTT,          &
+!$acc&             XSCFAC,                                                                    &
+!$acc&             XLBDAS_MAX, XLBEXG, XLBEXH, XLBEXR, XLBEXS, XLBG, XLBH, XLBR, XLBS, XRTMIN )
 !
 IF (MPPDB_INITIALIZED) THEN
   !Check all IN arrays
@@ -787,5 +787,7 @@ IF (MPPDB_INITIALIZED) THEN
   CALL MPPDB_CHECK(PHLC_LRC,"ICE4_TENDENCIES end:PHLC_LRC")
   CALL MPPDB_CHECK(PRAINFR,"ICE4_TENDENCIES end:PRAINFR")
 END IF
-!
+
+!$acc end data
+
 END SUBROUTINE ICE4_TENDENCIES
diff --git a/src/MNH/rain_ice_fast_rg.f90 b/src/MNH/rain_ice_fast_rg.f90
index 0924e73c5..9825fb51b 100644
--- a/src/MNH/rain_ice_fast_rg.f90
+++ b/src/MNH/rain_ice_fast_rg.f90
@@ -101,7 +101,6 @@ REAL,    DIMENSION(:,:), ALLOCATABLE :: ZZW1              ! Work arrays
 !$acc declare device_resident(I1, IVEC1, IVEC2, GWORK, ZZW, ZVEC1, ZVEC2, ZVEC3, &
 !$acc &                       ZVECLBDAG, ZVECLBDAR, ZVECLBDAS, ZZW1)
 !
-!$acc declare copyin(XKER_RDRYG, XKER_SDRYG)
 !-------------------------------------------------------------------------------
 !
 ! IN variables
@@ -116,7 +115,9 @@ REAL,    DIMENSION(:,:), ALLOCATABLE :: ZZW1              ! Work arrays
 !
 ! OUT variables
 !
-!$acc &             PRDRYG, PRWETG )
+!$acc &             PRDRYG, PRWETG ) &
+
+!$acc &     copyin( XKER_RDRYG, XKER_SDRYG )
 
 IF (MPPDB_INITIALIZED) THEN
   !Check all IN arrays
diff --git a/src/MNH/rain_ice_fast_rh.f90 b/src/MNH/rain_ice_fast_rh.f90
index a3453162b..ca176ca9c 100644
--- a/src/MNH/rain_ice_fast_rh.f90
+++ b/src/MNH/rain_ice_fast_rh.f90
@@ -96,8 +96,6 @@ REAL,    DIMENSION(:,:), ALLOCATABLE :: ZZW1              ! Work arrays
 !$acc declare device_resident(I1H, I1W, IVEC1, IVEC2, GWORK, ZVEC1, ZVEC2, ZVEC3, &
 !$acc &                       ZVECLBDAG, ZVECLBDAH, ZVECLBDAS, ZZW, ZZW1)
 !
-!$acc declare copyin(XKER_GWETH, XKER_SWETH)
-!
 !-------------------------------------------------------------------------------
 !
 ! IN variables
@@ -108,12 +106,14 @@ REAL,    DIMENSION(:,:), ALLOCATABLE :: ZZW1              ! Work arrays
 !
 ! INOUT variables
 !
-!$acc &             PLBDAH, PRCS, PRRS, PRIS, PRSS, PRGS, PRHS, PTHS, PUSW )
+!$acc &             PLBDAH, PRCS, PRRS, PRIS, PRSS, PRGS, PRHS, PTHS, PUSW ) &
 !
 ! OUT variables
 !
 !NONE
 
+!$acc &     copyin( XKER_GWETH, XKER_SWETH )
+
 #ifdef _OPENACC
 CALL PRINT_MSG(NVERB_WARNING,'GEN','RAIN_ICE_FAST_RH','OPENACC: not yet tested')
 #endif
diff --git a/src/MNH/rain_ice_fast_rs.f90 b/src/MNH/rain_ice_fast_rs.f90
index 4e44cff75..83c303da7 100644
--- a/src/MNH/rain_ice_fast_rs.f90
+++ b/src/MNH/rain_ice_fast_rs.f90
@@ -92,7 +92,6 @@ REAL,    DIMENSION(:), ALLOCATABLE :: ZZW1, ZZW2, ZZW3, ZZW4 ! Work arrays
 !$acc declare device_resident(I1, IVEC1, IVEC2, GWORK, ZZW, ZVEC1, ZVEC2, ZVEC3, &
 !$acc &                       ZVECLBDAR, ZVECLBDAS, ZZW1, ZZW2, ZZW3, ZZW4)
 !
-!$acc declare copyin(XKER_RACCS, XKER_RACCSS, XKER_SACCRG)
 !-------------------------------------------------------------------------------
 !
 ! IN variables
@@ -103,12 +102,14 @@ REAL,    DIMENSION(:), ALLOCATABLE :: ZZW1, ZZW2, ZZW3, ZZW4 ! Work arrays
 !
 ! INOUT variables
 !
-!$acc &             PRCS, PRRS, PRSS, PRGS, PTHS )
+!$acc &             PRCS, PRRS, PRSS, PRGS, PTHS )                    &
 !
 ! OUT variables
 !
 !NONE
 
+!$acc &     copyin( XKER_RACCS, XKER_RACCSS, XKER_SACCRG )
+
 IF (MPPDB_INITIALIZED) THEN
   !Check all IN arrays
   CALL MPPDB_CHECK(OMICRO,"RAIN_ICE_FAST_RS beg:OMICRO")
diff --git a/src/MNH/rain_ice_nucleation.f90 b/src/MNH/rain_ice_nucleation.f90
index 4c87404cc..8b7367d2a 100644
--- a/src/MNH/rain_ice_nucleation.f90
+++ b/src/MNH/rain_ice_nucleation.f90
@@ -89,7 +89,6 @@ REAL,    DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3))   &
 !$acc declare device_resident(ZRVT, ZCIT, ZZT, ZPRES, ZZW, ZUSW, ZSSI, ZW)
 !$acc declare device_resident(I1, I2, I3, GNEGT)
 
-!$acc declare copyin(XALPHA1)
 !-------------------------------------------------------------------------------
 !
 ! IN variables
@@ -103,7 +102,9 @@ REAL,    DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3))   &
 !
 ! OUT variables
 !
-!$acc &             PT )
+!$acc &             PT )                                        &
+
+!$acc &     copyin( XALPHA1 )
 
 IF (MPPDB_INITIALIZED) THEN
   !Check all IN arrays
diff --git a/src/MNH/rain_ice_red.f90 b/src/MNH/rain_ice_red.f90
index 94140e264..d9cdc2a85 100644
--- a/src/MNH/rain_ice_red.f90
+++ b/src/MNH/rain_ice_red.f90
@@ -516,18 +516,18 @@ REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) :: &
 !$acc &              ZINV_TSTEP,ZRS_TEND,ZRG_TEND,ZRH_TEND,ZW_RVS,ZW_RCS,ZW_RRS,ZW_RIS,ZW_RSS,ZW_RGS,ZW_RHS,ZW_THS)
 !
 !acc declare copyin(JPVEXT,XUNDEF) !These are parameters
-!$acc declare copyin(XCI,XCL,XCPD,XCPV,XLSTT,XLVTT,XTT,                                                                &
-!$acc&               XRTMIN,                                                                                           &
-!$acc&               CSUBG_PR_PDF,CSUBG_RC_RR_ACCR,CSUBG_RR_EVAP,LDEPOSC,LFEEDBACKT,LSEDIM_AFTER,                      &
-!$acc&               NMAXITER,XMRSTEP,XTSTEP_TS,XVDEPOSC,                                                              &
-!$acc&               LBU_ENABLE,LBUDGET_RC,LBUDGET_RR,LBUDGET_RI,LBUDGET_RS,LBUDGET_RG,LBUDGET_RH,LBUDGET_RV,LBUDGET_TH)
-!
 
 !$acc data present( OSEDIC, HSEDIM, HSUBG_AUCV_RC, OWARM, KKA, KKU, KKL, PTSTEP, KRR,                 &
 !$acc &             ODMICRO, PEXN, PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR, PTHT, PRVT, &
 !$acc &             PRCT, PRRT, PRIT, PRST, PRGT, PSIGS, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS,    &
 !$acc &             PINPRC, PINDEP, PINPRR, PEVAP3D, PINPRS, PINPRG, PRAINFR,                         &
-!$acc &             PSEA, PTOWN, PRHT, PRHS, PINPRH, PFPR )
+!$acc &             PSEA, PTOWN, PRHT, PRHS, PINPRH, PFPR )                                           &
+
+!$acc &     copyin( XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XTT,                                                                   &
+!$acc &             XRTMIN,                                                                                                    &
+!$acc &             CSUBG_PR_PDF, CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP, LDEPOSC, LFEEDBACKT, LSEDIM_AFTER,                          &
+!$acc &             NMAXITER, XMRSTEP, XTSTEP_TS, XVDEPOSC,                                                                    &
+!$acc &             LBU_ENABLE, LBUDGET_RC, LBUDGET_RR, LBUDGET_RI, LBUDGET_RS, LBUDGET_RG, LBUDGET_RH, LBUDGET_RV, LBUDGET_TH )
 
 IF (MPPDB_INITIALIZED) THEN
   !Check all IN arrays
diff --git a/src/MNH/rain_ice_sedimentation_split.f90 b/src/MNH/rain_ice_sedimentation_split.f90
index 4e7561b52..7df6680ec 100644
--- a/src/MNH/rain_ice_sedimentation_split.f90
+++ b/src/MNH/rain_ice_sedimentation_split.f90
@@ -141,7 +141,6 @@ REAL,    DIMENSION(:,:,:), ALLOCATABLE :: ZWSED       ! sedimentation fluxes
 !$acc &                       ZRAY, ZLBC, ZFSEDC,                                                                       &
 !$acc &                       ZPRCS, ZPRRS, ZPRSS, ZPRGS, ZPRHS, ZW, ZWSED)
 !
-!$acc declare copyin(XFSEDC, XLBC, XLBEXC, XRTMIN)
 !-------------------------------------------------------------------------------
 !
 ! IN variables
@@ -155,7 +154,9 @@ REAL,    DIMENSION(:,:,:), ALLOCATABLE :: ZWSED       ! sedimentation fluxes
 !
 ! OUT variables
 !
-!$acc &             PINPRR, PINPRS, PINPRG, PINPRR3D, PINPRH, PFPR )
+!$acc &             PINPRR, PINPRS, PINPRG, PINPRR3D, PINPRH, PFPR )                    &
+
+!$acc &     copyin( XFSEDC, XLBC, XLBEXC, XRTMIN )
 
 IF (MPPDB_INITIALIZED) THEN
   !Check all IN arrays
diff --git a/src/MNH/resolved_cloud.f90 b/src/MNH/resolved_cloud.f90
index f4e5fbb01..a131a553b 100644
--- a/src/MNH/resolved_cloud.f90
+++ b/src/MNH/resolved_cloud.f90
@@ -488,8 +488,7 @@ REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZTHSSTEP
 REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZRSSTEP
 !
 !$acc declare create(ZDZZ,ZEXN,ZLV,ZLS,ZCPH,ZZZ,ZSVT,ZSVS) create(ZT) create(ZCOR,ZRSMIN) &
-!$acc &       create(ZTHSSTEP,ZRSSTEP,LLMICRO) &
-!$acc &       copyin(XRTMIN)
+!$acc &       create(ZTHSSTEP,ZRSSTEP,LLMICRO)
 !
 !------------------------------------------------------------------------------
 !
@@ -509,8 +508,10 @@ REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZRSSTEP
 !
 ! OUT variables
 !
-!$acc &            PSRCS, PRAINFR )
-!
+!$acc &            PSRCS, PRAINFR )                                                   &
+
+!$acc &    copyin( XRTMIN )
+
 !*       1.     PRELIMINARY COMPUTATIONS
 !               ------------------------
 !
diff --git a/src/MNH/slow_terms.f90 b/src/MNH/slow_terms.f90
index 266cd9d6e..b3f760f52 100644
--- a/src/MNH/slow_terms.f90
+++ b/src/MNH/slow_terms.f90
@@ -218,13 +218,13 @@ INTEGER                              :: JI,JJ,IC,JL ! loop control for packed ar
 
 !$acc declare create( ZT, ZW, ZW1, ZW2, ZW3, ZEXNT, ZDZZ, G3D )
 
-!$acc declare copyin( XC1RC, XC2RC, XC1RE, XC2RE, XCEXRA, XCEXRE, XCEXRS, XCEXVT, XCRA, XCRS, XDIVA, XTHCO, &
-!$acc &               XALPW, XBETAW, XGAMW, XCL, XCPD, XCPV, XLVTT, XMD, XMV, XP00, XRD, XRHOLW, XRV, XTT)
-
 !-------------------------------------------------------------------------------
 
-!$acc data present( PZZ, PRHODJ, PRHODREF, PCLDFR, PTHT, PRVT, PRCT, PRRT,    &
-!$acc &             PPABST, PTHS, PRVS, PRCS, PRRS, PINPRR, PINPRR3D, PEVAP3D )
+!$acc data present( PZZ, PRHODJ, PRHODREF, PCLDFR, PTHT, PRVT, PRCT, PRRT,      &
+!$acc &             PPABST, PTHS, PRVS, PRCS, PRRS, PINPRR, PINPRR3D, PEVAP3D ) &
+
+!$acc &     copyin( XC1RC, XC2RC, XC1RE, XC2RE, XCEXRA, XCEXRE, XCEXRS, XCEXVT, XCRA, XCRS, XDIVA, XTHCO, &
+!$acc &             XALPW, XBETAW, XGAMW, XCL, XCPD, XCPV, XLVTT, XMD, XMV, XP00, XRD, XRHOLW, XRV, XTT )
 
 IF (MPPDB_INITIALIZED) THEN
   !Check all IN arrays
-- 
GitLab