diff --git a/src/MNH/advection_metsv.f90 b/src/MNH/advection_metsv.f90 index 4cc80a34cd2d6c40143573aa9be371a170c7194f..b846cefbaf48e614406154b4dc6a8720d08d7972 100644 --- a/src/MNH/advection_metsv.f90 +++ b/src/MNH/advection_metsv.f90 @@ -630,7 +630,6 @@ ZTSTEP_PPM = PTSTEP / REAL(KSPLIT) ! !* 2.4 normalized contravariant components for splitted PPM time-step ! -!$acc update device(PRHODJ,PRTHS,PRTKES,PRRS,PRSVS) !$acc kernels ZRUCPPM = ZRUCPPM*ZTSTEP_PPM ZRVCPPM = ZRVCPPM*ZTSTEP_PPM @@ -735,7 +734,6 @@ IF(LBLOWSNOW) THEN ENDIF ! !* time splitting loop -!$acc update device(PTHVREF) if(LNEUTRAL) DO JSPL=1,KSPLIT ! !ZRTHS_PPM(:,:,:) = 0. @@ -788,7 +786,9 @@ DO JSPL=1,KSPLIT END DO END IF !$acc end kernels -!$acc update self(PRTHS,PRRS,PRSVS) + +!PW: bug PGI 18.10: not necessary for PRRS,PRSVS but error with decriptor not present +!$acc update self(PRRS,PRSVS) ! ! Top and bottom Boundaries and LBC for the guesses ! @@ -864,7 +864,6 @@ IF (GTKE) THEN PRTKES(:,:,:) = PRTKES(:,:,:) + PRTKES_ADV(:,:,:) PRTKES(:,:,:) = MAX (PRTKES(:,:,:) , XTKEMIN * PRHODJ(:,:,:) / PTSTEP ) !$acc end kernels -!$acc update host(PRTKES,PRTKES_ADV) END IF ! ! @@ -891,18 +890,48 @@ END IF !* 5. BUDGETS ! ------- ! -IF (LBUDGET_TH) CALL BUDGET (PRTHS,4,'ADV_BU_RTH') -IF (LBUDGET_TKE) CALL BUDGET (PRTKES,5,'ADV_BU_RTKE') -IF (KRR>=1.AND.LBUDGET_RV) CALL BUDGET (PRRS(:,:,:,1),6,'ADV_BU_RRV') -IF (KRR>=2.AND.LBUDGET_RC) CALL BUDGET (PRRS(:,:,:,2),7,'ADV_BU_RRC') -IF (KRR>=3.AND.LBUDGET_RR) CALL BUDGET (PRRS(:,:,:,3),8,'ADV_BU_RRR') -IF (KRR>=4.AND.LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9,'ADV_BU_RRI') -IF (KRR>=5.AND.LBUDGET_RS) CALL BUDGET (PRRS(:,:,:,5),10,'ADV_BU_RRS') -IF (KRR>=6.AND.LBUDGET_RG) CALL BUDGET (PRRS(:,:,:,6),11,'ADV_BU_RRG') -IF (KRR>=7.AND.LBUDGET_RH) CALL BUDGET (PRRS(:,:,:,7),12,'ADV_BU_RRH') -DO JSV=1,KSV - IF (LBUDGET_SV) CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADV_BU_RSV') -END DO +IF (LBUDGET_TH) THEN +!$acc update self(PRTHS) + CALL BUDGET (PRTHS,4,'ADV_BU_RTH') +END IF +IF (LBUDGET_TKE) THEN +!$acc update self(PRTKES) + CALL BUDGET (PRTKES,5,'ADV_BU_RTKE') +END IF +IF (KRR>=1.AND.LBUDGET_RV) THEN +!$acc update self(PRRS(:,:,:,1)) + CALL BUDGET (PRRS(:,:,:,1),6,'ADV_BU_RRV') +END IF +IF (KRR>=2.AND.LBUDGET_RC) THEN +!$acc update self(PRRS(:,:,:,2)) + CALL BUDGET (PRRS(:,:,:,2),7,'ADV_BU_RRC') +END IF +IF (KRR>=3.AND.LBUDGET_RR) THEN +!$acc update self(PRRS(:,:,:,3)) + CALL BUDGET (PRRS(:,:,:,3),8,'ADV_BU_RRR') +END IF +IF (KRR>=4.AND.LBUDGET_RI) THEN +!$acc update self(PRRS(:,:,:,4)) + CALL BUDGET (PRRS(:,:,:,4),9,'ADV_BU_RRI') +END IF +IF (KRR>=5.AND.LBUDGET_RS) THEN +!$acc update self(PRRS(:,:,:,5)) + CALL BUDGET (PRRS(:,:,:,5),10,'ADV_BU_RRS') +END IF +IF (KRR>=6.AND.LBUDGET_RG) THEN +!$acc update self(PRRS(:,:,:,6)) + CALL BUDGET (PRRS(:,:,:,6),11,'ADV_BU_RRG') +END IF +IF (KRR>=7.AND.LBUDGET_RH) THEN +!$acc update self(PRRS(:,:,:,7)) + CALL BUDGET (PRRS(:,:,:,7),12,'ADV_BU_RRH') +END IF +IF (LBUDGET_SV) THEN +!$acc update self(PRSVS) + DO JSV=1,KSV + CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'ADV_BU_RSV') + END DO +END IF ! IF ((HCLOUD == 'KHKO') .OR. (HCLOUD == 'C2R2')) THEN #ifdef _OPENACC diff --git a/src/MNH/advection_uvw.f90 b/src/MNH/advection_uvw.f90 index aeb69ecb23039ce00fd566d5f4c7e34d764f9db6..9bc529b5f638daab2f2e5a0e2bd0544c2a10c57a 100644 --- a/src/MNH/advection_uvw.f90 +++ b/src/MNH/advection_uvw.f90 @@ -367,7 +367,6 @@ NULLIFY(TZFIELDS_ll) !* 2. COMPUTES THE TENDENCIES SINCE THE BEGINNING OF THE TIME STEP ! ------------------------------------------------------------ ! -!$acc update device(PRUS,PRVS,PRWS) !$acc kernels ZRUS_OTHER(:,:,:) = PRUS(:,:,:) - ZRUT(:,:,:) / PTSTEP + PRUS_PRES(:,:,:) ZRVS_OTHER(:,:,:) = PRVS(:,:,:) - ZRVT(:,:,:) / PTSTEP + PRVS_PRES(:,:,:) @@ -463,7 +462,6 @@ DO JSPL=1,ISPLIT (ZRWS_OTHER(:,:,:) + ZRWS_ADV(:,:,:)) END IF !$acc end kernels -!$acc update self(PRUS,PRVS,PRWS) ! ! Top and bottom Boundaries ! @@ -490,9 +488,18 @@ END DO !* 4. BUDGETS ! ------- ! -IF (LBUDGET_U) CALL BUDGET (PRUS,1,'ADV_BU_RU') -IF (LBUDGET_V) CALL BUDGET (PRVS,2,'ADV_BU_RV') -IF (LBUDGET_W) CALL BUDGET (PRWS,3,'ADV_BU_RW') +IF (LBUDGET_U) THEN +!$acc update self(PRUS) + CALL BUDGET (PRUS,1,'ADV_BU_RU') +END IF +IF (LBUDGET_V) THEN +!$acc update self(PRVS) + CALL BUDGET (PRVS,2,'ADV_BU_RV') +END IF +IF (LBUDGET_W) THEN +!$acc update self(PRWS) + CALL BUDGET (PRWS,3,'ADV_BU_RW') +END IF !------------------------------------------------------------------------------- ! #ifdef _OPENACC diff --git a/src/MNH/advection_uvw_cen.f90 b/src/MNH/advection_uvw_cen.f90 index c444cdcfd2a6134db35815c1e386ac2e877094b3..888ef5cc75cf4b356429b1056e5bc39b92e5baf8 100644 --- a/src/MNH/advection_uvw_cen.f90 +++ b/src/MNH/advection_uvw_cen.f90 @@ -134,6 +134,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PUM, PVM, PWM !$acc declare present(PUM,PVM,PWM) ! Variables at t-dt REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PDUM, PDVM, PDWM +!$acc declare present(PDUM, PDVM, PDWM) REAL, DIMENSION(:,:,:), INTENT(IN) :: PUT , PVT , PWT, PRHODJ !$acc declare present(PUT,PVT,PWT,PRHODJ) REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX,PDYY,PDZZ,PDZX,PDZY @@ -141,6 +142,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX,PDYY,PDZZ,PDZX,PDZY ! metric coefficients REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRUS , PRVS , PRWS ! Sources terms +!$acc declare present(PRUS, PRVS, PRWS) ! ! halo lists for 4th order advection TYPE(HALO2LIST_ll), POINTER :: TPHALO2MLIST ! momentum variables @@ -300,9 +302,7 @@ ELSEIF (HUVW_ADV_SCHEME=='CEN4TH') THEN ! END IF ! -!$acc kernels present(ZRUS,ZRVS,ZRWS) present(ZUS,ZVS,ZWS) present(PUM,PVM,PWM) & -!$acc & present(ZMXM_RHODJ,ZMYM_RHODJ,ZMZM_RHODJ) pcopy(PDUM,PDVM,PDWM,PRUS,PRVS,PRWS) -!default added in OpenACC 2.5 !!$acc & default(none) +!$acc kernels ZUS(:,:,:) = ZRUS(:,:,:)/ZMXM_RHODJ(:,:,:)*2.*PTSTEP ZVS(:,:,:) = ZRVS(:,:,:)/ZMYM_RHODJ(:,:,:)*2.*PTSTEP ZWS(:,:,:) = ZRWS(:,:,:)/ZMZM_RHODJ(:,:,:)*2.*PTSTEP diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90 index ffc6a80e7463ebdcebe9f0647525743a6fed8988..2ad2d2e71f9be81df0d1561fe30f6b0e4b99eb1a 100644 --- a/src/MNH/modeln.f90 +++ b/src/MNH/modeln.f90 @@ -1484,19 +1484,14 @@ ZTIME1 = ZTIME2 XTIME_BU_PROCESS = 0. XTIME_LES_BU_PROCESS = 0. ! +!$acc data create (XUT, XVT, XWT) & +!$acc & copyin (XTHT, XPABST, XRT, XSVT, XRTHS_CLD, XRRS_CLD, XTHVREF) & +!$acc & copy (XRTHS, XRRS, XRUS, XRVS, XRWS) & +!$acc & present(XDXX, XDYY, XDZZ, XDZX, XDZY, XRHODJ) +! +!$acc update device(XUT, XVT, XWT, XRHODJ) ! ! -!$acc data copyin (XUT, XVT, XWT) & -!$acc & copyin (XTHT, XTKET) & -!$acc & present(XRHODJ) & -!$acc & copyin (XPABST) & -!$acc & copyin (XRT, XSVT) & -!$acc & create (XTHVREF) & -!$acc & present(XDXX, XDYY, XDZZ, XDZX, XDZY) & -!$acc & create (XRTHS, XRTKES) & -!$acc & create (XRRS, XRSVS) & -!$acc & copyin (XRTHS_CLD, XRRS_CLD, XRSVS_CLD) & -!$acc & create (XRTKEMS) CALL ADVECTION_METSV ( TZBAKFILE, GCLOSE_OUT,CUVW_ADV_SCHEME, & CMET_ADV_SCHEME, CSV_ADV_SCHEME, CCLOUD, NSPLIT, & LSPLIT_CFL, XSPLIT_CFL, LCFL_WRIT, & @@ -1516,21 +1511,23 @@ ZTIME1 = ZTIME2 XTIME_BU_PROCESS = 0. XTIME_LES_BU_PROCESS = 0. ! -ZRWS = XRWS +!$acc kernels +ZRWS(:,:,:) = XRWS(:,:,:) +!$acc end kernels ! -!$acc data copyin (XTHT, XRT, XTHVREF, XRTHS, XRRS, XRTHS_CLD, XRRS_CLD) & -!$acc & present(XRHODJ) & -!$acc & copy (XRWS) CALL GRAVITY_IMPL ( CLBCX, CLBCY, NRR, NRRL, NRRI,XTSTEP, & XTHT, XRT, XTHVREF, XRHODJ, XRWS, XRTHS, XRRS, & XRTHS_CLD, XRRS_CLD ) -!$acc end data ! ! At the initial instant the difference with the ref state creates a ! vertical velocity production that must not be advected as it is ! compensated by the pressure gradient ! -IF (KTCOUNT == 1 .AND. CCONF=='START') XRWS_PRES = - (XRWS - ZRWS) +IF (KTCOUNT == 1 .AND. CCONF=='START') THEN +!$acc kernels + XRWS_PRES(:,:,:) = ZRWS(:,:,:) - XRWS(:,:,:) +!$acc end kernels +END IF ! CALL SECOND_MNH2(ZTIME2) ! @@ -1550,12 +1547,10 @@ IF ((CUVW_ADV_SCHEME(1:3)=='CEN') .AND. (CTEMP_SCHEME == 'LEFR')) THEN CALL INIT_HALO2_ll(TZHALO2C_ll,3,IIU,IJU,IKU) CALL UPDATE_HALO_ll(TZFIELDC_ll,IINFO_ll) CALL UPDATE_HALO2_ll(TZFIELDC_ll, TZHALO2C_ll, IINFO_ll) +!$acc update device(XUT, XVT, XWT) END IF -!$acc data & -!$acc & copyin (XUM, XVM, XWM) & -!$acc & copyin (XUT, XVT, XWT) & -!$acc & present(XRHODJ) & -!$acc & present(XDXX, XDYY, XDZZ, XDZX, XDZY) +!$acc data copyin(XUM, XVM, XWM) & +!$acc & copy (XDUM, XDVM, XDWM) CALL ADVECTION_UVW_CEN(CUVW_ADV_SCHEME, & CLBCX, CLBCY, & XTSTEP, KTCOUNT, & @@ -1573,12 +1568,7 @@ IF ((CUVW_ADV_SCHEME(1:3)=='CEN') .AND. (CTEMP_SCHEME == 'LEFR')) THEN END IF ELSE -!$acc data & -!$acc & copyin(XUT,XVT,XWT) & -!$acc & present(XRHODJ) & -!$acc & present(XDXX,XDYY,XDZZ,XDZX,XDZY) & -!$acc & create(XRUS,XRVS,XRWS) & -!$acc & copyin(XRUS_PRES, XRVS_PRES, XRWS_PRES) +!$acc data copyin(XRUS_PRES, XRVS_PRES, XRWS_PRES) CALL ADVECTION_UVW(CUVW_ADV_SCHEME, CTEMP_SCHEME, & NWENO_ORDER, LSPLIT_WENO, & CLBCX, CLBCY, XTSTEP, & @@ -1589,6 +1579,7 @@ ELSE !$acc end data END IF ! +!$acc end data ! CALL SECOND_MNH2(ZTIME2) !