diff --git a/src/MNH/advection_uvw.f90 b/src/MNH/advection_uvw.f90 index f9f9048a49d7a723af04a64642527b1509fda5a1..36ea18b0a8b986f52e92652df46d8c75c217fb8a 100644 --- a/src/MNH/advection_uvw.f90 +++ b/src/MNH/advection_uvw.f90 @@ -195,6 +195,8 @@ TYPE(LIST_ll), POINTER :: TZFIELDS0_ll ! list of fields to exchange ! INTEGER :: IIU,IJU,IKU ! +INTEGER :: JI,JJ,JK +! !------------------------------------------------------------------------------- ! !* 0. INITIALIZATION @@ -433,21 +435,31 @@ DO JSPL=1,ISPLIT ! Tendencies on wind !$acc update device(ZRUS_ADV,ZRVS_ADV,ZRWS_ADV) !$acc kernels - PRUS(:,:,:) = PRUS(:,:,:) + ZRUS_ADV(:,:,:) / ISPLIT - PRVS(:,:,:) = PRVS(:,:,:) + ZRVS_ADV(:,:,:) / ISPLIT - PRWS(:,:,:) = PRWS(:,:,:) + ZRWS_ADV(:,:,:) / ISPLIT - +#ifdef MNH_COMPILER_NVHPC +!$acc loop independent collapse(3) +#endif +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 +END DO IF (JSPL<ISPLIT) THEN ! ! Guesses for next time splitting loop ! - ZU(:,:,:) = ZU(:,:,:) + ZTSTEP / ZMXM_RHODJ * & - (ZRUS_OTHER(:,:,:) + ZRUS_ADV(:,:,:)) - ZV(:,:,:) = ZV(:,:,:) + ZTSTEP / ZMYM_RHODJ * & - (ZRVS_OTHER(:,:,:) + ZRVS_ADV(:,:,:)) - ZW(:,:,:) = ZW(:,:,:) + ZTSTEP / ZMZM_RHODJ * & - (ZRWS_OTHER(:,:,:) + ZRWS_ADV(:,:,:)) - END IF +! +#ifdef MNH_COMPILER_NVHPC +!$acc loop independent collapse(3) +#endif +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) * & + (ZRVS_OTHER(JI,JJ,JK) + ZRVS_ADV(JI,JJ,JK)) + ZW(JI,JJ,JK) = ZW(JI,JJ,JK) + ZTSTEP / ZMZM_RHODJ(JI,JJ,JK) * & + (ZRWS_OTHER(JI,JJ,JK) + ZRWS_ADV(JI,JJ,JK)) +END DO +END IF !$acc end kernels ! ! Top and bottom Boundaries diff --git a/src/MNH/gravity_impl.f90 b/src/MNH/gravity_impl.f90 index a5f7acadc521a75aaf480c5552660465c7fc40d6..fb02de4bdd1abef5893e64754de57f8d80b07079 100644 --- a/src/MNH/gravity_impl.f90 +++ b/src/MNH/gravity_impl.f90 @@ -200,7 +200,9 @@ END DO CALL GRAVITY ( KRR,KRRL, KRRI, ZTH, ZR, PRHODJ, PTHVREF, ZRWS_GRAV(:,:,:) ) ! !$acc kernels -PRWS(:,:,:) = PRWS(:,:,:) + ZRWS_GRAV(:,:,:) +DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU ) + PRWS(JI,JJ,JK) = PRWS(JI,JJ,JK) + ZRWS_GRAV(JI,JJ,JK) +END DO !$acc end kernels ! if ( lbudget_w ) then diff --git a/src/MNH/rain_ice_sedimentation_split.f90 b/src/MNH/rain_ice_sedimentation_split.f90 index 7e9471339418294952e1541d9a733ce7d80d0260..9e9f29c71a43446517645a4bdd0e6b175c6dc69a 100644 --- a/src/MNH/rain_ice_sedimentation_split.f90 +++ b/src/MNH/rain_ice_sedimentation_split.f90 @@ -326,9 +326,10 @@ IF ( OSEDIC ) THEN ZTMP2 = 0.5 * GAMMA( XNUC2 + 1.0 / XALPHAC2 ) / ( GAMMA( XNUC2 ) ) IF ( GPRESENT_PSEA ) THEN - !$acc loop independent collapse(2) - DO JJ = 1, SIZE( PRCS, 2 ) - DO JI = 1, SIZE( PRCS, 1 ) +#ifdef MNH_COMPILER_NVHPC + !$acc loop independent collapse(2) +#endif + DO CONCURRENT ( JI=1:SIZE( PRCS, 1 ) , JJ = 1: SIZE( PRCS, 2 ) ) ZOMPSEA (JI,JJ) = 1.-PSEA(JI,JJ) ZTMP1_2D (JI,JJ) = PSEA(JI,JJ)*XLBC(2) +ZOMPSEA(JI,JJ)*XLBC(1) ZTMP2_2D (JI,JJ) = PSEA(JI,JJ)*XFSEDC(2)+ZOMPSEA(JI,JJ)*XFSEDC(1) @@ -336,19 +337,15 @@ IF ( OSEDIC ) THEN ZTMP3_2D (JI,JJ) = (1.-PTOWN(JI,JJ))*ZCONC_TMP(JI,JJ)+PTOWN(JI,JJ)*XCONC_URBAN ZTMP4_2D (JI,JJ) = MAX( 1. , ZOMPSEA(JI,JJ)*ZTMP1 + PSEA(JI,JJ)*ZTMP2 ) END DO - END DO - -!$acc loop independent collapse(3) - DO JK = KKTB, KKTE - DO JJ = 1, SIZE( PRCS, 2 ) - DO JI = 1, SIZE( PRCS, 1 ) +#ifdef MNH_COMPILER_NVHPC + !$acc loop independent collapse(3) +#endif + DO CONCURRENT ( JI=1:SIZE( PRCS, 1 ) , JJ = 1:SIZE( PRCS, 2 ) , JK=KKTB:KKTE ) ZLBC (JI,JJ,JK) = ZTMP1_2D(JI,JJ) ZFSEDC (JI,JJ,JK) = ZTMP2_2D(JI,JJ) ZCONC3D(JI,JJ,JK) = ZTMP3_2D(JI,JJ) ZRAY (JI,JJ,JK) = ZTMP4_2D(JI,JJ) - END DO END DO - END DO ELSE ZLBC (:,:,:) = XLBC(1) ZFSEDC (:,:,:) = XFSEDC(1) @@ -390,29 +387,25 @@ PRSS(:,:,:) = PRST(:,:,:)* ZINVTSTEP PRGS(:,:,:) = PRGT(:,:,:)* ZINVTSTEP IF ( KRR == 7 ) PRHS(:,:,:) = PRHT(:,:,:)* ZINVTSTEP #else +#ifdef MNH_COMPILER_NVHPC !$acc loop collapse(3) independent -DO JK = 1, SIZE( PRRS, 3 ) - DO JJ = 1, SIZE( PRRS, 2 ) - DO JI = 1, SIZE( PRRS, 1 ) +#endif +DO CONCURRENT ( JI=1:SIZE( PRRS, 1 ) , JJ=1:SIZE( PRRS, 2 ) , JK=1:SIZE( PRRS, 3 ) ) ZPRRS(JI,JJ,JK) = PRRS(JI,JJ,JK) - PRRT(JI,JJ,JK) * ZINVTSTEP ZPRSS(JI,JJ,JK) = PRSS(JI,JJ,JK) - PRST(JI,JJ,JK) * ZINVTSTEP ZPRGS(JI,JJ,JK) = PRGS(JI,JJ,JK) - PRGT(JI,JJ,JK) * ZINVTSTEP PRRS (JI,JJ,JK) = PRRT(JI,JJ,JK) * ZINVTSTEP PRSS (JI,JJ,JK) = PRST(JI,JJ,JK) * ZINVTSTEP PRGS (JI,JJ,JK) = PRGT(JI,JJ,JK) * ZINVTSTEP - END DO - END DO END DO IF ( KRR == 7 ) THEN +#ifdef MNH_COMPILER_NVHPC !$acc loop collapse(3) independent -DO JK = 1, SIZE( PRHS, 3 ) - DO JJ = 1, SIZE( PRHS, 2 ) - DO JI = 1, SIZE( PRHS, 1 ) +#endif +DO CONCURRENT ( JI=1:SIZE( PRRS, 1 ) , JJ=1:SIZE( PRRS, 2 ) , JK=1:SIZE( PRRS, 3 ) ) ZPRHS(JI,JJ,JK) = PRHS(JI,JJ,JK) - PRHT(JI,JJ,JK) * ZINVTSTEP PRHS (JI,JJ,JK) = PRHT(JI,JJ,JK) * ZINVTSTEP - END DO - END DO - END DO +END DO END IF #endif !$acc end kernels diff --git a/src/MNH/resolved_cloud.f90 b/src/MNH/resolved_cloud.f90 index e8e69e2f54f6b85944b4d83e2f2302d45b27b253..d57fd7eb5548d469a02337e18a80ad2c44447171 100644 --- a/src/MNH/resolved_cloud.f90 +++ b/src/MNH/resolved_cloud.f90 @@ -676,9 +676,9 @@ DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU ,JRR = 1:KRR ) END DO ! CONCURRENT ! IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA') THEN - DO JSV = ISVBEG, ISVEND - PSVS(:,:,:,JSV) = PSVS(:,:,:,JSV) / PRHODJ(:,:,:) - ENDDO + DO CONCURRENT ( JI=1:JIU , JJ=1:JJU,JK=1:JKU , JSV=ISVBEG:ISVEND ) + PSVS(JI,JJ,JK,JSV) = PSVS(JI,JJ,JK,JSV) / PRHODJ(JI,JJ,JK) + ENDDO ENDIF ! ! complete the lateral boundaries to avoid possible problems