diff --git a/src/MNH/advection_metsv.f90 b/src/MNH/advection_metsv.f90 index 408861cddf11554929925b44c84373269cecc515..90ecf0437470dfca680c8f16f2e2671475ff54a2 100644 --- a/src/MNH/advection_metsv.f90 +++ b/src/MNH/advection_metsv.f90 @@ -573,16 +573,16 @@ IF (.NOT. L1D) THEN IF (.NOT. L2D) THEN !$acc kernels !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU ) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU ) ZCFL(JI,JJ,JK) = SQRT(BR_P2(ZCFLU(JI,JJ,JK))+BR_P2(ZCFLV(JI,JJ,JK))+BR_P2(ZCFLW(JI,JJ,JK))) - END DO + !$mnh_end_do() !$acc end kernels ELSE !$acc kernels !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU ) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU ) ZCFL(JI,JJ,JK) = SQRT(BR_P2(ZCFLU(JI,JJ,JK))+BR_P2(ZCFLW(JI,JJ,JK))) - END DO + !$mnh_end_do() !$acc end kernels END IF #endif @@ -594,9 +594,9 @@ ELSE ZCFL(:,:,:) = SQRT(ZCFLW(:,:,:)**2) #else !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU ) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU ) ZCFL(JI,JJ,JK) = SQRT(BR_P2(ZCFLW(JI,JJ,JK))) - END DO + !$mnh_end_do() #endif !$acc end kernels END IF @@ -673,11 +673,13 @@ ZCFLW_MAX = MAXVAL(ZCFLW(IIB:IIE,IJB:IJE,IKB:IKE)) ZCFL_MAX = MAXVAL(ZCFL (IIB:IIE,IJB:IJE,IKB:IKE)) !$acc end kernels ! +#ifndef MPIVIDE CALL MPI_ALLREDUCE(MPI_IN_PLACE,ZCFLU_MAX,1,MNHREAL_MPI,MPI_MAX,NMNH_COMM_WORLD,IINFO_ll) CALL MPI_ALLREDUCE(MPI_IN_PLACE,ZCFLV_MAX,1,MNHREAL_MPI,MPI_MAX,NMNH_COMM_WORLD,IINFO_ll) CALL MPI_ALLREDUCE(MPI_IN_PLACE,ZCFLW_MAX,1,MNHREAL_MPI,MPI_MAX,NMNH_COMM_WORLD,IINFO_ll) CALL MPI_ALLREDUCE(MPI_IN_PLACE,ZCFL_MAX,1,MNHREAL_MPI,MPI_MAX,NMNH_COMM_WORLD,IINFO_ll) #endif +#endif ! WRITE(ILUOUT,FMT='(A24,F10.2,A5,F10.2,A5,F10.2,A9,F10.2)') & 'Max. CFL number for U : ',ZCFLU_MAX, & @@ -926,17 +928,17 @@ DO JSPL=1,KSPLIT END IF !$acc kernels !$acc_nv loop independent collapse(4) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU, JR=1:KRR ) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU, JR=1:KRR ) ZR(JI,JJ,JK,JR) = ZR(JI,JJ,JK,JR) + ( ZRRS_PPM(JI,JJ,JK,JR) + ZRRS_OTHER(JI,JJ,JK,JR) + PRRS_CLD(JI,JJ,JK,JR) ) & * ZTSTEP_PPM / PRHODJ(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc loop seq DO JSV = 1, KSV !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZSV(JI,JJ,JK,JSV) = ZSV(JI,JJ,JK,JSV) + ( ZRSVS_PPM(JI,JJ,JK,JSV) + ZRSVS_OTHER(JI,JJ,JK,JSV) + & PRSVS_CLD(JI,JJ,JK,JSV) ) * ZTSTEP_PPM / PRHODJ(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT END DO !$acc end kernels END IF diff --git a/src/MNH/advection_uvw.f90 b/src/MNH/advection_uvw.f90 index 3603c22ca0b935ac55e11644635fbd3502227c36..ef92cc97539b8038a0fb9fb84304b9bd4e765d5e 100644 --- a/src/MNH/advection_uvw.f90 +++ b/src/MNH/advection_uvw.f90 @@ -438,11 +438,11 @@ DO JSPL=1,ISPLIT #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif -DO CONCURRENT (JI=1:IIU , JJ=1:IJU , JK=1:IKU ) +!$mnh_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 +!$mnh_end_do() !$acc end kernels IF (JSPL<ISPLIT) THEN @@ -452,14 +452,14 @@ END DO ! ! !$acc_nv loop independent collapse(3) -DO CONCURRENT (JI=1:IIU , JJ=1:IJU , JK=1:IKU ) +!$mnh_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 +!$mnh_end_do() !$acc end kernels END IF ! diff --git a/src/MNH/advection_uvw_cen.f90 b/src/MNH/advection_uvw_cen.f90 index 69f0e1206c52e35695b8a082796e26fa83e3b721..129a0f6889b81215a980ec992a195d75972bbba5 100644 --- a/src/MNH/advection_uvw_cen.f90 +++ b/src/MNH/advection_uvw_cen.f90 @@ -381,7 +381,7 @@ ELSEIF (HUVW_ADV_SCHEME=='CEN4TH') THEN END IF ! !$acc kernels present(ZRUS,ZRVS,ZRWS,ZMXM_RHODJ,ZMYM_RHODJ,ZMZM_RHODJ) & -!$acc present_cr(PRUS,PRVS,PRWS,PDUM,PDWM) +!$acc & present_cr(PRUS,PRVS,PRWS,PDUM,PDWM) ZUS(:,:,:) = ZRUS(:,:,:)/ZMXM_RHODJ(:,:,:)*2.*PTSTEP ZVS(:,:,:) = ZRVS(:,:,:)/ZMYM_RHODJ(:,:,:)*2.*PTSTEP ZWS(:,:,:) = ZRWS(:,:,:)/ZMZM_RHODJ(:,:,:)*2.*PTSTEP diff --git a/src/MNH/condensation.f90 b/src/MNH/condensation.f90 index d4ca85714eadd55b5c6057a7e8db749f2b015fcb..5dc18b09823a6dcce302856e9b795b934cab5cd7 100644 --- a/src/MNH/condensation.f90 +++ b/src/MNH/condensation.f90 @@ -234,6 +234,7 @@ LOGICAL :: GPRESENT_PLV, GPRESENT_PLS, GPRESENT_PCPH LOGICAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: GWORK CHARACTER(LEN=4) :: YLAMBDA3 !Necessary to workaround NVHPC bug (version 21.7 if OpenACC enabled) LOGICAL :: GPRESENT_PHLC_HCF, GPRESENT_PHLC_HRC, GPRESENT_PHLI_HCF, GPRESENT_PHLI_HRI +LOGICAL :: GYLAMBDA3_CB ! INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: JKPK,JKMK ! @@ -266,6 +267,7 @@ GPRESENT_PHLC_HCF = PRESENT(PHLC_HCF) GPRESENT_PHLC_HRC = PRESENT(PHLC_HRC) GPRESENT_PHLI_HCF = PRESENT(PHLI_HCF) GPRESENT_PHLI_HRI = PRESENT(PHLI_HRI) +GYLAMBDA3_CB = (YLAMBDA3=='CB') ! IF (MPPDB_INITIALIZED) THEN !Check all IN arrays @@ -476,7 +478,7 @@ IF ( .NOT. OSIGMAS ) THEN DO CONCURRENT (JI=KIB:KIE,JJ=KJB:KJE) IF ( ZZZP(JI,JJ) > 0.9*(PZZ(JI,JJ,JKPP(JI,JJ))-PZZ(JI,JJ,KKB)) ) & ZL(JI,JJ,JK) = .6 * ZL(JI,JJ,JK-KKL) - END DO + END DO END DO !$acc end kernels END IF @@ -487,9 +489,9 @@ END IF !Ice fraction ZFRAC(:,:,:) = 0. IF (OUSERI) THEN - DO CONCURRENT ( JI = KIB : KIE, JJ = KJB : KJE, JK = KKB : KKE ) + !$mnh_do_concurrent ( JI = KIB : KIE, JJ = KJB : KJE, JK = KKB : KKE ) IF ( PRC(JI,JJ,JK) + PRI(JI,JJ,JK) > 1.E-20 ) ZFRAC(JI,JJ,JK) = PRI(JI,JJ,JK) / ( PRC(JI,JJ,JK) + PRI(JI,JJ,JK) ) - END DO + !$mnh_end_do() ENDIF !$acc end kernels ! @@ -501,10 +503,10 @@ IF (OUSERI) CALL COMPUTE_FRAC_ICE3D_DEVICE(HFRAC_ICE, ZFRAC, PT) ! !$acc kernels !$acc_nv loop independent -DO CONCURRENT ( JK=IKTB:IKTE ) +!$mnh_do_concurrent ( JK=IKTB:IKTE ) JKPK(JK)=MAX(MIN(JK+KKL,IKTE),IKTB) JKMK(JK)=MAX(MIN(JK-KKL,IKTE),IKTB) -END DO +!$mnh_end_do() ! Bypass CCE/14++ compile bug with index in the good order !!! #if defined(MNH_COMPILER_CCE) && defined(MNH_BITREP_OMP) DO CONCURRENT(JI=KIB:KIE,JJ=KJB:KJE,JK=IKTB:IKTE) @@ -704,7 +706,7 @@ DO CONCURRENT(JI=KIB:KIE,JJ=KJB:KJE,JK=IKTB:IKTE) ! PSIGRC(JI,JJ,JK) = 2.*PCLDFR(JI,JJ,JK) * MIN( 3. , MAX(1.,1.-ZQ1P(JI,JJ,JK)) ) ! in the 3D case lambda_3 = 1. - IF(YLAMBDA3=='CB')THEN + IF(GYLAMBDA3_CB)THEN PSIGRC(JI,JJ,JK) = PSIGRC(JI,JJ,JK)* MIN( 3. , MAX(1.,1.-ZQ1P(JI,JJ,JK)) ) ENDIF #if defined(MNH_COMPILER_CCE) && defined(MNH_BITREP_OMP) diff --git a/src/MNH/get_halo.f90 b/src/MNH/get_halo.f90 index b56e1fcff44690f88bb9d0b596a74352525d9687..59931bcf1d742e1949e6d5a3b63ab32afff736cd 100644 --- a/src/MNH/get_halo.f90 +++ b/src/MNH/get_halo.f90 @@ -236,7 +236,7 @@ END MODULE MODD_HALO_D ! ######################### SUBROUTINE GET_HALO_D(PSRC,HDIR,HNAME) ! ######################### -#define MNH_GPUDIRECT +!define MNH_GPUDIRECT ! USE MODD_HALO_D @@ -264,7 +264,7 @@ END SUBROUTINE GET_HALO_D ! ######################### SUBROUTINE GET_HALO_START_D(PSRC,KNB_REQ,KREQ,HDIR) ! ######################### -#define MNH_GPUDIRECT +!define MNH_GPUDIRECT ! USE MODD_HALO_D @@ -476,7 +476,7 @@ END SUBROUTINE GET_HALO_START_D ! ######################### SUBROUTINE GET_HALO_STOP_D(PSRC,KNB_REQ,KREQ,HDIR) ! ######################### -#define MNH_GPUDIRECT +!define MNH_GPUDIRECT ! USE MODD_HALO_D @@ -582,7 +582,7 @@ END SUBROUTINE GET_HALO_STOP_D ! ######################################## SUBROUTINE GET_HALO_DD(PSRC, HDIR, HNAME) ! ######################################## -#define MNH_GPUDIRECT +!define MNH_GPUDIRECT ! USE MODD_HALO_D USE MODE_ll diff --git a/src/MNH/gradient_m.f90 b/src/MNH/gradient_m.f90 index 15ced819881101e4ca0b3212c44407fe3bfa4137..fa869751c54a4c477445a1cde973e8f92cdf7e9b 100644 --- a/src/MNH/gradient_m.f90 +++ b/src/MNH/gradient_m.f90 @@ -1090,9 +1090,9 @@ ELSE ENDIF DO JJ=1,JPHEXT !$acc_nv loop independent collapse(2) - DO CONCURRENT ( JI=1:IIU , JK=1:IKU ) + !$mnh_do_concurrent ( JI=1:IIU , JK=1:IKU ) PGY_M_V(JI,JJ,JK)=PGY_M_V(JI,IJU-2*JPHEXT+JJ,JK) - END DO + !$mnh_end_do() END DO !$acc end kernels diff --git a/src/MNH/gradient_u.f90 b/src/MNH/gradient_u.f90 index 57d1f6c41c592e0b0e7d2564228ef161ccbcafcf..73ddd61e0e97f1b3467e262b7babdcb5db7286df 100644 --- a/src/MNH/gradient_u.f90 +++ b/src/MNH/gradient_u.f90 @@ -242,18 +242,18 @@ IF (.NOT. LFLAT) THEN #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP3_DEVICE(JI,JJ,JK) = PDZX(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL MXF_DEVICE(ZTMP3_DEVICE,ZTMP2_DEVICE) !$acc kernels #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP3_DEVICE(JI,JJ,JK) = ZTMP2_DEVICE(JI,JJ,JK) / PDZZ(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL MZF_DEVICE( ZTMP3_DEVICE, ZTMP2_DEVICE ) CALL MXF_DEVICE(PDXX,ZTMP3_DEVICE) @@ -438,9 +438,9 @@ IF (.NOT. LFLAT) THEN #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP3_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK)/ZTMP2_DEVICE(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL MYM_DEVICE(ZTMP3_DEVICE,ZTMP1_DEVICE) CALL MXM_DEVICE(PDZY,ZTMP2_DEVICE) @@ -448,9 +448,9 @@ IF (.NOT. LFLAT) THEN #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP3_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK)*ZTMP2_DEVICE(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL MZF_DEVICE( ZTMP3_DEVICE, ZTMP2_DEVICE ) CALL DYM_DEVICE(PA,ZTMP1_DEVICE) @@ -459,9 +459,9 @@ IF (.NOT. LFLAT) THEN #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) PGY_U_UV_DEVICE(JI,JJ,JK)= ( ZTMP1_DEVICE(JI,JJ,JK) - ZTMP2_DEVICE(JI,JJ,JK) ) / ZTMP3_DEVICE(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels ELSE CALL DYM_DEVICE(PA,ZTMP1_DEVICE) diff --git a/src/MNH/gradient_v.f90 b/src/MNH/gradient_v.f90 index 57ebbd0d967878f9f953a6845cc8d7667398779c..4dd8e9585002839bc96f284efb0948dcad4fe9a1 100644 --- a/src/MNH/gradient_v.f90 +++ b/src/MNH/gradient_v.f90 @@ -244,18 +244,18 @@ IF (.NOT. LFLAT) THEN #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP3_DEVICE(JI,JJ,JK) = PDZY(JI,JJ,JK)*ZTMP2_DEVICE(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL MYF_DEVICE(ZTMP3_DEVICE,ZTMP2_DEVICE) !$acc kernels #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP3_DEVICE(JI,JJ,JK) = ZTMP2_DEVICE(JI,JJ,JK)/PDZZ(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL MZF_DEVICE( ZTMP3_DEVICE, ZTMP2_DEVICE ) CALL MYF_DEVICE(PDYY,ZTMP3_DEVICE) @@ -439,9 +439,9 @@ IF (.NOT. LFLAT) THEN #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP4_DEVICE(JI,JJ,JK) = ZTMP3_DEVICE(JI,JJ,JK) / ZTMP2_DEVICE(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL MXM_DEVICE(ZTMP4_DEVICE,ZTMP2_DEVICE) CALL MYM_DEVICE(PDZX,ZTMP3_DEVICE) @@ -449,9 +449,9 @@ IF (.NOT. LFLAT) THEN #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP4_DEVICE(JI,JJ,JK) = ZTMP2_DEVICE(JI,JJ,JK) *ZTMP3_DEVICE(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL MZF_DEVICE( ZTMP4_DEVICE, ZTMP2_DEVICE ) CALL MYM_DEVICE(PDXX,ZTMP3_DEVICE) @@ -459,9 +459,9 @@ IF (.NOT. LFLAT) THEN #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) PGX_V_UV_DEVICE(JI,JJ,JK)= ( ZTMP1_DEVICE(JI,JJ,JK) - ZTMP2_DEVICE(JI,JJ,JK) ) / ZTMP3_DEVICE(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels ELSE CALL DXM_DEVICE(PA,ZTMP1_DEVICE) diff --git a/src/MNH/ice4_compute_pdf.f90 b/src/MNH/ice4_compute_pdf.f90 index 9b8f6087ede4aa45d09e3bdbfd609bdc9d68e7f0..63f86857964996005d034ba866a4e7287cf7fd3e 100644 --- a/src/MNH/ice4_compute_pdf.f90 +++ b/src/MNH/ice4_compute_pdf.f90 @@ -227,10 +227,9 @@ ELSEIF(HSUBG_AUCV_RC=='CLFR') THEN ELSEIF(HSUBG_AUCV_RC=='ADJU') THEN !$acc kernels present( GWORK ) ZSUMRC(:)=PHLC_LRC(:)+PHLC_HRC(:) -!$acc loop independent - DO CONCURRENT( JI = 1 : ISIZE ) + !$mnh_do_concurrent( JI = 1 : ISIZE ) GWORK(JI) = ZSUMRC(JI) > 0. - END DO + !$mnh_end_do() WHERE(GWORK(:)) PHLC_LRC(:)=PHLC_LRC(:)*PRCT(:)/ZSUMRC(:) PHLC_HRC(:)=PHLC_HRC(:)*PRCT(:)/ZSUMRC(:) @@ -249,13 +248,12 @@ ELSEIF(HSUBG_AUCV_RC=='PDF ') THEN IF(HSUBG_PR_PDF=='SIGM') THEN !$acc kernels present( GWORK, GWORK2, GWORK3 ) ! Redelsperger and Sommeria (1986) but organised according to Turner (2011, 2012) -!$acc loop independent - DO CONCURRENT( JI = 1 : ISIZE ) + !$mnh_do_concurrent( JI = 1 : ISIZE ) GWORK(JI) = PRCT(JI)> ZRCRAUTC(JI)+PSIGMA_RC(JI) GWORK2(JI) = PRCT(JI)> (ZRCRAUTC(JI)-PSIGMA_RC(JI)) .AND. & PRCT(JI)<=(ZRCRAUTC(JI)+PSIGMA_RC(JI)) GWORK3(JI) = PRCT(JI)>XRTMIN(2) .AND. PCF(JI)>0. - END DO + !$mnh_end_do() WHERE (GWORK(:)) PHLC_HCF(:)=1. PHLC_LCF(:)=0. @@ -308,18 +306,16 @@ SELECT CASE( HSUBG_PR_PDF ) END SELECT !$acc kernels -!$acc loop independent - DO CONCURRENT( JI = 1 : ISIZE ) + !$mnh_do_concurrent( JI = 1 : ISIZE ) IF ( PRCT(JI)>0. .AND. PCF(JI)>0. ) ZHLC_RCMAX(JI) = ZCOEFFRCM * PRCT(JI) / PCF(JI) - END DO + !$mnh_end_do() !$acc end kernels ! Split available water and cloud fraction in two parts ! Calculate local mean values int he low and high parts for the 3 PDF forms: !$acc kernels present( GWORK ) -!$acc loop independent - DO CONCURRENT( JI = 1 : ISIZE ) + !$mnh_do_concurrent( JI = 1 : ISIZE ) GWORK(JI) = PRCT(JI)>0. .AND. PCF(JI)>0. .AND. ZHLC_RCMAX(JI)>ZRCRAUTC(JI) - END DO + !$mnh_end_do() !$acc end kernels !IF(HSUBG_PR_PDF=='HLCRECTPDF') THEN IF (IHSUBG_PR_PDF==1) THEN @@ -341,8 +337,7 @@ END SELECT !ELSE IF(HSUBG_PR_PDF=='HLCQUADRAPDF') THEN ELSE IF (IHSUBG_PR_PDF==3) THEN !$acc kernels present( GWORK ) -!$acc loop independent - DO CONCURRENT( JI = 1 : ISIZE ) + !$mnh_do_concurrent( JI = 1 : ISIZE ) IF ( GWORK(JI) ) THEN #ifndef MNH_BITREP ZHLC_LRCLOCAL(JI)=(3.0 *ZRCRAUTC(JI)**3 - 8.0 *ZRCRAUTC(JI)**2 * ZHLC_RCMAX(JI) & @@ -359,13 +354,12 @@ END SELECT #endif ZHLC_HRCLOCAL(JI)=(ZHLC_RCMAX(JI) + 3.0*ZRCRAUTC(JI))/4.0 END IF - END DO + !$mnh_end_do() !$acc end kernels !ELSE IF(HSUBG_PR_PDF=='HLCISOTRIPDF') THEN ELSE IF (IHSUBG_PR_PDF==4) THEN !$acc kernels present( GWORK, GWORK2 ) -!$acc loop independent - DO CONCURRENT( JI = 1 : ISIZE ) + !$mnh_do_concurrent( JI = 1 : ISIZE ) IF ( GWORK(JI) ) THEN IF ( PRCT(JI) <= ZRCRAUTC(JI)*PCF(JI) ) THEN #ifndef MNH_BITREP @@ -395,15 +389,14 @@ END SELECT #endif END IF END IF - END DO + !$mnh_end_do() !$acc end kernels END IF !$acc kernels present( GWORK, GWORK2 ) ! Compare r_cM to r_cR to know if cloud water content is high enough to split in two parts or not -!$acc loop independent - DO CONCURRENT( JI = 1 : ISIZE ) + !$mnh_do_concurrent( JI = 1 : ISIZE ) GWORK2(JI) = PRCT(JI)>0. .AND. PCF(JI)>0. .AND. ZHLC_RCMAX(JI)<=ZRCRAUTC(JI) - END DO + !$mnh_end_do() WHERE(GWORK(:)) ! Calculate final values for LCF and HCF: PHLC_LCF(:)=PCF(:) & diff --git a/src/MNH/ice4_fast_rg.f90 b/src/MNH/ice4_fast_rg.f90 index 0e2e92debfab853e29a55eedf2dd64f94959d066..67eb2a2e324cf0beeba1ba2e6d0ba0dfe90d55b0 100644 --- a/src/MNH/ice4_fast_rg.f90 +++ b/src/MNH/ice4_fast_rg.f90 @@ -188,10 +188,7 @@ REAL, DIMENSION(:), POINTER, CONTIGUOUS :: ZZW, & ! !------------------------------------------------------------------------------- ! -!$acc data present(PCOMPUTE,PRHODREF,PLVFACT,PLSFACT,PPRES,PDV,PKA,PCJ,PCIT,PLBDAR,PLBDAS,PLBDAG, & -!$acc& PT,PRVT,PRCT,PRRT,PRIT,PRST,PRGT,PRGSI,PRGSI_MR,PWETG,PRICFRRG,PRRCFRIG,PRICFRR,PRCWETG,PRIWETG, & -!$acc& PRRWETG,PRSWETG,PRCDRYG,PRIDRYG,PRRDRYG,PRSDRYG,PRWETGH,PRWETGH_MR,PRGMLTR,PRG_TEND, & -!$acc& PA_TH,PA_RC,PA_RR,PA_RI,PA_RS,PA_RG,PA_RH,PB_RG,PB_RH) + IF (MPPDB_INITIALIZED) THEN !Check all IN arrays @@ -270,9 +267,13 @@ CALL MNH_MEM_GET( zrdryg_init, isize ) CALL MNH_MEM_GET( zrwetg_init, isize ) #endif -!$acc data create ( IGDRY ) & -!$acc& present( I1, IVEC1, IVEC2, GDRY, ZDRY, ZDRYG, ZMASK, ZVEC1, ZVEC2, ZVEC3, ZZW, ZRDRYG_INIT, ZRWETG_INIT ) & -!$acc& copyin ( XRTMIN ) +!$acc data present(PCOMPUTE,PRHODREF,PLVFACT,PLSFACT,PPRES,PDV,PKA,PCJ,PCIT,PLBDAR,PLBDAS,PLBDAG, & +!$acc & PT,PRVT,PRCT,PRRT,PRIT,PRST,PRGT,PRGSI,PRGSI_MR,PWETG,PRICFRRG,PRRCFRIG,PRICFRR,PRCWETG,PRIWETG, & +!$acc & PRRWETG,PRSWETG,PRCDRYG,PRIDRYG,PRRDRYG,PRSDRYG,PRWETGH,PRWETGH_MR,PRGMLTR,PRG_TEND, & +!$acc & PA_TH,PA_RC,PA_RR,PA_RI,PA_RS,PA_RG,PA_RH,PB_RG,PB_RH) & +!$acc & create ( IGDRY ) & +!$acc & present( I1, IVEC1, IVEC2, GDRY, ZDRY, ZDRYG, ZMASK, ZVEC1, ZVEC2, ZVEC3, ZZW, ZRDRYG_INIT, ZRWETG_INIT ) & +!$acc & copyin ( XRTMIN ) ! !* 6.1 rain contact freezing @@ -395,9 +396,9 @@ ELSE ENDIF -! !$acc end kernels +! !acc end kernels ! call mppdb_check(PRG_TEND,"ICE4_FAST_RG:PRG_TEND 02") -! !$acc kernels +! !acc kernels @@ -405,7 +406,7 @@ ENDIF IGDRY = 0 !$acc end kernels !$acc parallel loop private(idx) copy(IGDRY) independent -DO CONCURRENT( JJ = 1 : SIZE( GDRY ) ) +DO JJ = 1 , SIZE( GDRY ) ZDRY(JJ)=MAX(0., -SIGN(1., XRTMIN(5)-PRST(JJ))) * & ! WHERE(PRST(:)>XRTMIN(5)) &MAX(0., -SIGN(1., XRTMIN(6)-PRGT(JJ))) * & ! WHERE(PRGT(:)>XRTMIN(6)) &PCOMPUTE(JJ) @@ -420,7 +421,7 @@ DO CONCURRENT( JJ = 1 : SIZE( GDRY ) ) GDRY(JJ) = .FALSE. END IF END DO -! !$acc kernels +! ! acc end kernels IF(LDSOFT) THEN !$acc kernels DO JL=1, ISIZE @@ -434,7 +435,7 @@ ELSE PRG_TEND(:, IRSWETG)=0. !$acc end kernels -!$acc update self( IGDRY ) +!$acc update host( IGDRY ) IF(IGDRY>0)THEN !$acc kernels ! @@ -450,8 +451,7 @@ ELSE ! in the geometrical set of (Lbda_g,Lbda_s) couplet use to ! tabulate the SDRYG-kernel ! -!$acc loop independent - DO CONCURRENT( JJ = 1 : IGDRY ) + !$mnh_do_concurrent( JJ = 1 : IGDRY ) ZVEC1(JJ) = MAX( 1.00001, MIN( REAL( NDRYLBDAG ) - 0.00001, & #ifndef MNH_BITREP XDRYINTP1G * LOG( ZVEC1(JJ) ) + XDRYINTP2G ) ) @@ -469,7 +469,7 @@ ELSE #endif IVEC2(JJ) = INT( ZVEC2(JJ) ) ZVEC2(JJ) = ZVEC2(JJ) - REAL( IVEC2(JJ) ) - END DO + !$mnh_end_do() ! !* 6.2.5 perform the bilinear interpolation of the normalized ! SDRYG-kernel @@ -519,7 +519,7 @@ ENDIF ! IGDRY = 0 !$acc parallel loop private(idx) copy(IGDRY) independent -DO CONCURRENT( JJ = 1 : SIZE( GDRY ) ) +DO JJ = 1 , SIZE( GDRY ) ZDRY(JJ)=MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JJ))) * & ! WHERE(PRRT(:)>XRTMIN(3)) &MAX(0., -SIGN(1., XRTMIN(6)-PRGT(JJ))) * & ! WHERE(PRGT(:)>XRTMIN(6)) &PCOMPUTE(JJ) @@ -545,14 +545,14 @@ ELSE !$acc kernels PRG_TEND(:, IRRDRYG)=0. !$acc end kernels -!$acc update self( IGDRY ) +! acc update host( IGDRY ) ! -!$acc kernels IF(IGDRY>0) THEN + !$acc kernels ! !* 6.2.8 select the (PLBDAG,PLBDAR) couplet ! -!$acc loop independent + !$acc loop independent DO JJ = 1, IGDRY ZVEC1(JJ) = PLBDAG(I1(JJ)) ZVEC2(JJ) = PLBDAR(I1(JJ)) @@ -562,7 +562,7 @@ ELSE ! in the geometrical set of (Lbda_g,Lbda_r) couplet use to ! tabulate the RDRYG-kernel ! -!$acc loop independent + !$acc loop independent DO JJ = 1, IGDRY ZVEC1(JJ) = MAX( 1.00001, MIN( REAL( NDRYLBDAG ) - 0.00001, & #ifndef MNH_BITREP @@ -586,7 +586,7 @@ ELSE !* 6.2.10 perform the bilinear interpolation of the normalized ! RDRYG-kernel ! -!$acc loop independent + !$acc loop independent DO JJ=1, IGDRY ZVEC3(JJ)= ( XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ) & - XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & @@ -596,11 +596,12 @@ ELSE *(ZVEC1(JJ) - 1.0) END DO ZZW(:) = 0. -!$acc loop independent + !$acc loop independent DO JJ = 1, IGDRY ZZW(I1(JJ)) = ZVEC3(JJ) END DO ! + !$mnh_expand_where(JJ=1:IGDRY) WHERE(GDRY(:)) #ifndef MNH_BITREP PRG_TEND(:, IRRDRYG) = XFRDRYG*ZZW(:) & ! RRDRYG @@ -617,12 +618,12 @@ ELSE XLBRDRYG2/( PLBDAG(:) * PLBDAR(:) ) + & XLBRDRYG3/ BR_P2(PLBDAR(:)) ) #endif - END WHERE + END WHERE + !$mnh_end_expand_where() + !$acc end kernels ENDIF -!$acc end kernels ENDIF !$acc kernels - DO JL=1, ISIZE ZRDRYG_INIT(JL)=PRG_TEND(JL, IRCDRYG)+PRG_TEND(JL, IRIDRYG)+ & &PRG_TEND(JL, IRSDRYG)+PRG_TEND(JL, IRRDRYG) @@ -854,6 +855,5 @@ deallocate( i1 ) CALL MNH_MEM_RELEASE() #endif -!$acc end data END SUBROUTINE ICE4_FAST_RG diff --git a/src/MNH/ice4_fast_rs.f90 b/src/MNH/ice4_fast_rs.f90 index 4fb4434d67b3fd23aada400b895ea39b0fbbc745..3b7056e62eb5e8f34bc8d9f4b0b519c45cd78eb2 100644 --- a/src/MNH/ice4_fast_rs.f90 +++ b/src/MNH/ice4_fast_rs.f90 @@ -292,7 +292,7 @@ ENDDO ! IGRIM = 0 !$acc parallel loop private(idx) copy(IGRIM) independent present_cr( I1, GRIM, PCOMPUTE, PRCT, PRST, XRTMIN, ZRIM ) -DO CONCURRENT( JJ = 1 : SIZE( GRIM ) ) +DO JJ = 1 , SIZE( GRIM ) ZRIM(JJ)=MAX(0., -SIGN(1., XRTMIN(2)-PRCT(JJ))) * & !WHERE(PRCT(:)>XRTMIN(2)) &MAX(0., -SIGN(1., XRTMIN(5)-PRST(JJ))) * & !WHERE(PRST(:)>XRTMIN(5)) &PCOMPUTE(JJ) @@ -328,8 +328,7 @@ ELSE ! 5.1.1 select the PLBDAS ! !$acc kernels copyin( CSNOWRIMING ) -!$acc loop independent - DO CONCURRENT( JJ = 1 : IGRIM ) + !$mnh_do_concurrent( JJ = 1 : IGRIM ) ZVEC1(JJ) = PLBDAS(I1(JJ)) ! ! 5.1.2 find the next lower indice for the PLBDAS in the geometrical @@ -350,7 +349,7 @@ ELSE ! ZVEC1(JJ) = XGAMINC_RIM1( IVEC2(JJ)+1 )* ZVEC2(JJ) & - XGAMINC_RIM1( IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) - END DO + !$mnh_end_do() !$acc end kernels !$acc kernels ZZW(:) = 0. @@ -361,7 +360,7 @@ ELSE ! ! 5.1.4 riming of the small sized aggregates ! - DO CONCURRENT( JJ = 1 : ISIZE ) + !$mnh_do_concurrent( JJ = 1 : ISIZE ) IF ( GRIM(JJ) ) THEN PRS_TEND(JJ, IRCRIMSS) = XCRIMSS * ZZW(JJ) * PRCT(JJ) & ! RCRIMSS #ifndef MNH_BITREP @@ -372,7 +371,7 @@ ELSE * BR_POW(PRHODREF(JJ),-XCEXVT) #endif END IF - END DO + !$mnh_end_do() ! ! 5.1.5 perform the linear interpolation of the normalized ! "XBS"-moment of the incomplete gamma function (XGAMINC_RIM2) and @@ -397,8 +396,7 @@ ELSE ! 5.1.6 riming-conversion of the large sized aggregates into graupeln ! ! -!$acc loop independent - DO CONCURRENT( JJ = 1 : ISIZE ) + !$mnh_do_concurrent( JJ = 1 : ISIZE ) IF ( GRIM(JJ) ) THEN PRS_TEND(JJ, IRCRIMS)=XCRIMSG * PRCT(JJ) & ! RCRIMS #ifndef MNH_BITREP @@ -410,7 +408,7 @@ ELSE #endif ZZW6(JJ) = PRS_TEND(JJ, IRCRIMS) - PRS_TEND(JJ, IRCRIMSS) ! RCRIMSG END IF - END DO + !$mnh_end_do() IF(CSNOWRIMING=='M90 ')THEN !Murakami 1990 @@ -466,7 +464,7 @@ ENDDO ! IGACC = 0 !$acc parallel loop private(idx) copy(IGACC) independent present_cr( I1, GACC, PCOMPUTE, PRRT, PRST, XRTMIN, ZACC ) -DO CONCURRENT( JJ = 1 : SIZE( GACC ) ) +DO JJ = 1 , SIZE( GACC ) ZACC(JJ)=MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JJ))) * & !WHERE(PRRT(:)>XRTMIN(3)) &MAX(0., -SIGN(1., XRTMIN(5)-PRST(JJ))) * & !WHERE(PRST(:)>XRTMIN(5)) &PCOMPUTE(JJ) @@ -511,8 +509,7 @@ ELSE ! in the geometrical set of (Lbda_s,Lbda_r) couplet use to ! tabulate the RACCSS-kernel ! -!$acc loop independent - DO CONCURRENT( JJ = 1 : IGACC ) + !$mnh_do_concurrent( JJ = 1 : IGACC ) ZVEC1(JJ) = MAX( 1.00001, MIN( REAL(NACCLBDAS)-0.00001, & #ifndef MNH_BITREP XACCINTP1S * LOG( ZVEC1(JJ) ) + XACCINTP2S ) ) @@ -530,7 +527,7 @@ ELSE #endif IVEC2(JJ) = INT( ZVEC2(JJ) ) ZVEC2(JJ) = ZVEC2(JJ) - REAL( IVEC2(JJ) ) - END DO + !$mnh_end_do() ! ! 5.2.3 perform the bilinear interpolation of the normalized ! RACCSS-kernel diff --git a/src/MNH/ice4_nucleation.f90 b/src/MNH/ice4_nucleation.f90 index 75c76b335defc087a5dd2c7c8c5830efe575fd08..e4630fa297a5ccf76547cafb09991f1b463c6aaf 100644 --- a/src/MNH/ice4_nucleation.f90 +++ b/src/MNH/ice4_nucleation.f90 @@ -151,8 +151,7 @@ IF(.NOT. ODSOFT) THEN ZSSI(:)=0. ZUSW(:)=0. ZZW(:)=0. -!$acc loop independent - DO CONCURRENT( JI = 1 : size( odcompute ) ) + !$mnh_do_concurrent( JI = 1 : size( odcompute ) ) IF ( GNEGT(ji) ) THEN #ifndef MNH_BITREP ZZW(JI)=ALOG(PT(JI)) @@ -164,9 +163,8 @@ IF(.NOT. ODSOFT) THEN ZZW(JI) = BR_EXP(XALPI - XBETAI/PT(JI) - XGAMI*ZZW(JI)) ! es_i #endif END IF - END DO -!$acc loop independent - DO CONCURRENT( JI = 1 : size( odcompute ) ) + !$mnh_end_do() + !$mnh_do_concurrent( JI = 1 : size( odcompute ) ) IF ( GNEGT(ji) ) THEN ZZW(JI)=MIN(PPABST(JI)/2., ZZW(JI)) ! safety limitation ZSSI(JI)=PRVT(JI)*(PPABST(JI)-ZZW(JI)) / (XEPSILO*ZZW(JI)) - 1.0 @@ -181,13 +179,12 @@ IF(.NOT. ODSOFT) THEN ! ZSSI(JI)=MIN(ZSSI(JI), ZUSW(JI)) ! limitation of SSi according to SSw=0 END IF - END DO + !$mnh_end_do() ZZW(:)=0. -!$acc loop independent - DO CONCURRENT( JI = 1 : size( odcompute ) ) + !$mnh_do_concurrent( JI = 1 : size( odcompute ) ) GWORK(JI) = GNEGT(JI) .AND. PT(JI)<XTT-5.0 .AND. ZSSI(JI)>0.0 GWORK2(JI) = GNEGT(JI) .AND. PT(JI)<=XTT-2.0 .AND. PT(JI)>=XTT-5.0 .AND. ZSSI(JI)>0.0 - END DO + !$mnh_end_do() #ifndef MNH_BITREP #ifndef MNH_OPENACC WHERE(GWORK(:)) @@ -227,11 +224,10 @@ IF(.NOT. ODSOFT) THEN END DO #endif #endif -!$acc loop independent - DO CONCURRENT( JI = 1 : size( odcompute ) ) + !$mnh_do_concurrent( JI = 1 : size( odcompute ) ) ZZW(JI)=ZZW(JI)-PCIT(JI) ZZW(JI)=MIN(ZZW(JI), 50.E3) ! limitation provisoire a 50 l^-1 - END DO + !$mnh_end_do() WHERE(GNEGT(:)) ! !* 3.1.2 update the r_i and r_v mixing ratios @@ -241,8 +237,7 @@ IF(.NOT. ODSOFT) THEN END WHERE !Limitation due to 0 crossing of temperature IF(LFEEDBACKT) THEN -!$acc loop independent - DO CONCURRENT( JI = 1 : size( odcompute ) ) + !$mnh_do_concurrent( JI = 1 : size( odcompute ) ) IF ( GNEGT(JI) ) THEN ZW(JI)=MIN(PRVHENI_MR(JI), & MAX(0., (XTT/PEXN(JI)-PTHT(JI))/PLSFACT(JI))) / & @@ -250,7 +245,7 @@ IF(.NOT. ODSOFT) THEN ELSE ZW(JI) = 0. END IF - END DO + !$mnh_end_do() ELSE ZW(:)=1. ENDIF diff --git a/src/MNH/ice4_rsrimcg_old.f90 b/src/MNH/ice4_rsrimcg_old.f90 index 8abfaed13e9f8cfec25b2a06a31a53af3382f637..d72de99e3e9f9942384b8af86923a561be2d9dfc 100644 --- a/src/MNH/ice4_rsrimcg_old.f90 +++ b/src/MNH/ice4_rsrimcg_old.f90 @@ -162,8 +162,7 @@ IF(.NOT. ODSOFT) THEN ! ! 5.1.1 select the PLBDAS ! - !$acc loop independent - DO CONCURRENT( JL = 1 : IGRIM ) + !$mnh_do_concurrent( JL = 1 : IGRIM ) ZVEC1(JL) = PLBDAS(IVEC1(JL)) ! ! 5.1.2 find the next lower indice for the PLBDAS in the geometrical @@ -185,21 +184,18 @@ IF(.NOT. ODSOFT) THEN ! ZVEC1(JL) = XGAMINC_RIM2( IVEC2(JL)+1 )* ZVEC2(JL) & - XGAMINC_RIM2( IVEC2(JL) )*(ZVEC2(JL) - 1.0) - END DO - !$acc loop independent - DO CONCURRENT( JL = 1 : size( prhodref ) ) + !$mnh_end_do() + !$mnh_do_concurrent( JL = 1 : size( prhodref ) ) ZZW(JL) = 0. - END DO - !$acc loop independent - DO CONCURRENT( JL = 1 : IGRIM ) + !$mnh_end_do() + !$mnh_do_concurrent( JL = 1 : IGRIM ) ZZW(IVEC1(JL)) = ZVEC1(JL) - END DO + !$mnh_end_do() ! ! 5.1.6 riming-conversion of the large sized aggregates into graupeln ! ! - !$acc loop independent - DO CONCURRENT( JL = 1 : size( prhodref ) ) + !$mnh_do_concurrent( JL = 1 : size( prhodref ) ) IF ( GRIM(JL) ) THEN #ifndef MNH_BITREP PRSRIMCG_MR(:) = XSRIMCG * PLBDAS(:)**XEXSRIMCG & ! RSRIMCG @@ -209,7 +205,7 @@ IF(.NOT. ODSOFT) THEN * (1.0 - ZZW(:) )/PRHODREF(:) PRSRIMCG_MR(:)=MIN(PRST(:), PRSRIMCG_MR(:)) END IF - END DO + !$mnh_end_do() !$acc end kernels END IF ! IGRIM ENDIF ! ODSOFT diff --git a/src/MNH/ice4_sedimentation_split.f90 b/src/MNH/ice4_sedimentation_split.f90 index 5d15c772ccb6435b44ed7495cc298a9bdd1fecfc..c8b634e3c1a69f98a2e7bd5d08d8ffcb88def348 100644 --- a/src/MNH/ice4_sedimentation_split.f90 +++ b/src/MNH/ice4_sedimentation_split.f90 @@ -173,8 +173,8 @@ REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: ZCONC3D, & ! droplet condensatio #endif !------------------------------------------------------------------------------- -!$acc data present( PDZZ, PRHODREF, PPABST, PTHT, PRHODJ, PRCS, PRCT, PRRS, PRRT, PRIS, PRIT, PRSS, PRST, PRGS, PRGT, & -!$acc& PINPRC, PINDEP, PINPRR, PINPRI, PINPRS, PINPRG, PSEA, PTOWN, PINPRH, PRHT, PRHS, PFPR ) +!$acc data present(PDZZ,PRHODREF,PPABST,PTHT,PRHODJ,PRCS,PRCT,PRRS,PRRT,PRIS,PRIT,PRSS,PRST,PRGS,PRGT, & +!$acc & PINPRC,PINDEP,PINPRR,PINPRI,PINPRS,PINPRG,PSEA,PTOWN,PINPRH,PRHT,PRHS,PFPR ) IF (MPPDB_INITIALIZED) THEN !Check all IN arrays @@ -310,8 +310,7 @@ IF (OSEDIC) THEN !$acc end kernels #else !$acc kernels present_cr( PSEA, PTOWN, ZCONC3D, ZFSEDC, ZLBC, ZRAY ) -!$acc loop independent - DO CONCURRENT( JI = 1 : KIT, JJ = 1 : KJT, JK = KKTB : KKTE ) + !$mnh_do_concurrent( JI = 1 : KIT, JJ = 1 : KJT, JK = KKTB : KKTE ) ZLBC(JI,JJ,JK) = PSEA(JI,JJ)*XLBC(2)+(1.-PSEA(JI,JJ))*XLBC(1) ZFSEDC(JI,JJ,JK) = (PSEA(JI,JJ)*XFSEDC(2)+(1.-PSEA(JI,JJ))*XFSEDC(1)) ZFSEDC(JI,JJ,JK) = MAX(MIN(XFSEDC(1),XFSEDC(2)),ZFSEDC(JI,JJ,JK)) @@ -319,7 +318,7 @@ IF (OSEDIC) THEN ZRAY(JI,JJ,JK) = 0.5*((1.-PSEA(JI,JJ))*GAMMA(XNUC+1.0/XALPHAC)/(GAMMA(XNUC)) + & PSEA(JI,JJ)*GAMMA(XNUC2+1.0/XALPHAC2)/(GAMMA(XNUC2))) - END DO + !$mnh_end_do() !$acc end kernels #endif ELSE @@ -765,14 +764,11 @@ DO WHILE (ANY(ZREMAINT>0.)) !$acc end kernels !$acc kernels DO JK = KKTB , KKTE -#ifdef MNH_COMPILER_NVHPC -!$acc loop independent collapse(2) -#endif - DO CONCURRENT( JI = 1 : KIT, JJ = 1 : KJT ) + !$mnh_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 + !$mnh_end_do() ENDDO !$acc end kernels !$acc kernels diff --git a/src/MNH/ice4_tendencies.f90 b/src/MNH/ice4_tendencies.f90 index 6593e4bc098f76b66311d0738603be3951058411..8ee10ef63f87a389a49321c9500a2ad24df7b205 100644 --- a/src/MNH/ice4_tendencies.f90 +++ b/src/MNH/ice4_tendencies.f90 @@ -480,8 +480,7 @@ PB_RS(:)=0. PB_RG(:)=0. PB_RH(:)=0. ! -!$acc loop independent -DO CONCURRENT ( JL = 1 : ISIZE ) +!$mnh_do_concurrent ( JL = 1 : ISIZE ) ZRVT(JL)=PRVT(JL) ZRCT(JL)=PRCT(JL) ZRRT(JL)=PRRT(JL) @@ -491,7 +490,7 @@ DO CONCURRENT ( JL = 1 : ISIZE ) ZTHT(JL)=PTHT(JL) ZRHT(JL)=PRHT(JL) ZT(JL)=PT(JL) -ENDDO +!$mnh_end_do() !$acc end kernels IF(ODSOFT) THEN !$acc kernels @@ -513,13 +512,12 @@ ELSE ZRVT, & PCIT, PRVHENI_MR, PB_TH, PB_RV, PB_RI) !$acc kernels -!$acc loop independent - DO CONCURRENT ( JL = 1 : ISIZE ) + !$mnh_do_concurrent ( JL = 1 : ISIZE ) ZRIT(JL)=ZRIT(JL) + PRVHENI_MR(JL) ZRVT(JL)=ZRVT(JL) - PRVHENI_MR(JL) ZTHT(JL)=ZTHT(JL) + PRVHENI_MR(JL)*PLSFACT(JL) ZT(JL) = ZTHT(JL) * PEXN(JL) - ENDDO + !$mnh_end_do() !$acc end kernels ! !* 3.3 compute the spontaneous freezing source: RRHONG @@ -530,13 +528,12 @@ ELSE &ZTHT, & &PRRHONG_MR, PB_TH, PB_RR, PB_RG) !$acc kernels -!$acc loop independent - DO CONCURRENT ( JL = 1 : ISIZE ) + !$mnh_do_concurrent ( JL = 1 : ISIZE ) ZRGT(JL) = ZRGT(JL) + PRRHONG_MR(JL) ZRRT(JL) = ZRRT(JL) - PRRHONG_MR(JL) ZTHT(JL) = ZTHT(JL) + PRRHONG_MR(JL)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(RRHONG)) ZT(JL) = ZTHT(JL) * PEXN(JL) - ENDDO + !$mnh_end_do() !$acc end kernels ! !* 7.1 cloud ice melting @@ -547,21 +544,19 @@ ELSE &ZTHT, ZRIT, & &PRIMLTC_MR, PB_TH, PB_RC, PB_RI) !$acc kernels -!$acc loop independent - DO CONCURRENT ( JL = 1 : ISIZE ) + !$mnh_do_concurrent ( JL = 1 : ISIZE ) ZRCT(JL) = ZRCT(JL) + PRIMLTC_MR(JL) ZRIT(JL) = ZRIT(JL) - PRIMLTC_MR(JL) ZTHT(JL) = ZTHT(JL) - PRIMLTC_MR(JL)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(-RIMLTC)) ZT(JL) = ZTHT(JL) * PEXN(JL) - ENDDO + !$mnh_end_do() !$acc end kernels ! ! 5.1.6 riming-conversion of the large sized aggregates into graupel (old parametrisation) ! IF(CSNOWRIMING=='OLD ') THEN !$acc kernels -!$acc loop independent - DO CONCURRENT ( JL = 1 : ISIZE ) + !$mnh_do_concurrent ( JL = 1 : ISIZE ) IF ( ZRST(JL) > 0. ) THEN #ifndef MNH_BITREP ZLBDAS(JL) = MIN(XLBDAS_MAX, XLBS*(PRHODREF(JL)*MAX(ZRST(JL), XRTMIN(5)))**XLBEXS) @@ -571,7 +566,7 @@ ELSE ELSE ZLBDAS(JL) = 0. END IF - END DO + !$mnh_end_do() !$acc end kernels CALL ICE4_RSRIMCG_OLD(ODSOFT, PCOMPUTE==1., & &PRHODREF, & @@ -579,11 +574,10 @@ ELSE &ZT, ZRCT, ZRST, & &PRSRIMCG_MR, PB_RS, PB_RG) !$acc kernels -!$acc loop independent - DO CONCURRENT ( JL = 1 : ISIZE ) + !$mnh_do_concurrent ( JL = 1 : ISIZE ) ZRST(JL) = ZRST(JL) - PRSRIMCG_MR(JL) ZRGT(JL) = ZRGT(JL) + PRSRIMCG_MR(JL) - ENDDO + !$mnh_end_do() !$acc end kernels ELSE !$acc kernels @@ -686,8 +680,7 @@ IF(ISIZE>0) THEN !* compute the slope parameters ! !$acc kernels -!$acc loop independent - DO CONCURRENT ( JL = 1 : ISIZE ) + !$mnh_do_concurrent ( JL = 1 : ISIZE ) IF ( ZRST(JL) > 0. ) THEN #ifndef MNH_BITREP ZLBDAS(JL) = MIN(XLBDAS_MAX, XLBS*(PRHODREF(JL)*MAX(ZRST(JL), XRTMIN(5)))**XLBEXS) @@ -697,9 +690,8 @@ IF(ISIZE>0) THEN ELSE ZLBDAS(JL) = 0. END IF - END DO -!$acc loop independent - DO CONCURRENT ( JL = 1 : ISIZE ) + !$mnh_end_do() + !$mnh_do_concurrent ( JL = 1 : ISIZE ) IF ( ZRGT(JL) > 0. ) THEN #ifndef MNH_BITREP ZLBDAG(JL) = XLBG*(PRHODREF(JL)*MAX(ZRGT(JL), XRTMIN(6)))**XLBEXG @@ -709,10 +701,9 @@ IF(ISIZE>0) THEN ELSE ZLBDAG(JL) = 0. END IF - END DO + !$mnh_end_do() !ZLBDAR will be used when we consider rain diluted over the grid box -!$acc loop independent - DO CONCURRENT ( JL = 1 : ISIZE ) + !$mnh_do_concurrent ( JL = 1 : ISIZE ) IF ( ZRRT(JL) > 0. ) THEN #ifndef MNH_BITREP ZLBDAR(JL) = XLBR*( PRHODREF(JL)*MAX( ZRRT(JL), XRTMIN(3)))**XLBEXR @@ -722,14 +713,13 @@ IF(ISIZE>0) THEN ELSE ZLBDAR(JL) = 0. END IF - END DO + !$mnh_end_do() !$acc end kernels !ZLBDAR_RF is used when we consider rain concentrated in its fraction IF (HSUBG_RC_RR_ACCR=='PRFR' .OR. HSUBG_RR_EVAP=='PRFR') THEN !PW: 20211012: kernels directive inside IF to prevent crash with nvhpc 21.9 !$acc kernels -!$acc loop independent - DO CONCURRENT( JL = 1 : ISIZE ) + !$mnh_do_concurrent( JL = 1 : ISIZE ) IF ( ZRRT(JL) >0. .AND. ZRF(JL) > 0. ) THEN #ifndef MNH_BITREP ZLBDAR_RF(JL) = XLBR*( PRHODREF(JL) *MAX( ZRRT(JL)/ZRF(JL) , XRTMIN(3)))**XLBEXR @@ -739,21 +729,19 @@ IF(ISIZE>0) THEN ELSE ZLBDAR_RF(JL) = 0. END IF - END DO + !$mnh_end_do() !$acc end kernels ELSE !$acc kernels ! ZLBDAR_RF(:) = ZLBDAR(:) -!$acc loop independent - DO CONCURRENT( JL = 1 : ISIZE ) + !$mnh_do_concurrent( JL = 1 : ISIZE ) ZLBDAR_RF(JL) = ZLBDAR(JL) - END DO + !$mnh_end_do() !$acc end kernels ENDIF !$acc kernels IF(KRR==7) THEN -!$acc loop independent - DO CONCURRENT ( JL = 1 : ISIZE ) + !$mnh_do_concurrent ( JL = 1 : ISIZE ) IF ( PRHT(JL) > 0. ) THEN #ifndef MNH_BITREP ZLBDAH(JL) = XLBH*(PRHODREF(JL)*MAX(PRHT(JL), XRTMIN(7)))**XLBEXH @@ -763,7 +751,7 @@ IF(ISIZE>0) THEN ELSE ZLBDAH(JL) = 0. END IF - END DO + !$mnh_end_do() ENDIF !$acc end kernels ENDIF @@ -827,12 +815,11 @@ CALL ICE4_FAST_RS(ODSOFT, PCOMPUTE, & ! ------------------------------------------------------ ! !$acc kernels -!$acc loop independent -DO CONCURRENT ( JL = 1 : ISIZE ) +!$mnh_do_concurrent ( JL = 1 : ISIZE ) ZRGSI(JL) = PRVDEPG(JL) + PRSMLTG(JL) + PRRACCSG(JL) + & & PRSACCRG(JL) + PRCRIMSG(JL) + PRSRIMCG(JL) ZRGSI_MR(JL) = PRRHONG_MR(JL) + PRSRIMCG_MR(JL) -ENDDO +!$mnh_end_do() !$acc end kernels CALL ICE4_FAST_RG(ODSOFT, PCOMPUTE, KRR, & &PRHODREF, PLVFACT, PLSFACT, PPRES, & diff --git a/src/MNH/ice4_warm.f90 b/src/MNH/ice4_warm.f90 index 4862751471f0f9b62a631c1e3ca5529e64c6ba8e..e1b74ed1940dab6d2fc172d9f82f82d9afb6a6e9 100644 --- a/src/MNH/ice4_warm.f90 +++ b/src/MNH/ice4_warm.f90 @@ -270,8 +270,7 @@ ELSEIF (HSUBG_RC_RR_ACCR=='PRFR') THEN ! if PRF<PCF (rain is entirely falling in cloud): PRF-PHLC_HCF ! if PRF>PCF (rain is falling in cloud and in clear sky): PCF-PHLC_HCF ! => min(PCF, PRF)-PHLC_HCF -!$acc loop independent - DO CONCURRENT ( JL = 1 : ISIZE ) + !$mnh_do_concurrent ( JL = 1 : ISIZE ) ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(2)-PRCT(JL))) * & ! PRCT(:)>XRTMIN(2) &MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JL))) * & ! PRRT(:)>XRTMIN(3) &PCOMPUTE(JL) @@ -344,8 +343,7 @@ IF (HSUBG_RR_EVAP=='NONE') THEN ELSE PRREVAV(:) = 0. !Evaporation only when there's no cloud (RC must be 0) -!$acc loop independent - DO CONCURRENT ( JL = 1 : ISIZE ) + !$mnh_do_concurrent ( JL = 1 : ISIZE ) IF ( ZMASK(Jl) == 1. ) THEN #ifndef MNH_BITREP PRREVAV(JL) = EXP( XALPW - XBETAW/PT(JL) - XGAMW*ALOG(PT(JL) ) ) ! es_w @@ -365,7 +363,7 @@ IF (HSUBG_RR_EVAP=='NONE') THEN ( X0EVAR*BR_POW(PLBDAR(JL),XEX0EVAR)+X1EVAR*PCJ(JL)*BR_POW(PLBDAR(JL),XEX1EVAR) ) #endif END IF - END DO + !$mnh_end_do() ENDIF !$acc end kernels @@ -391,8 +389,7 @@ IF (HSUBG_RR_EVAP=='CLFR') GHSUBG_RR_EVAP=.true. !Ces variables devraient être sorties de rain_ice_slow et on mettrait le calcul de T^u, T^s !et plusieurs versions (comme actuellement, en ciel clair, en ciel nuageux) de PKA, PDV, PCJ dans rain_ice !On utiliserait la bonne version suivant l'option NONE, CLFR... dans l'évaporation et ailleurs -!$acc loop independent - DO CONCURRENT ( JL = 1 : ISIZE ) + !$mnh_do_concurrent ( JL = 1 : ISIZE ) ZMASK(JL)=MAX(0., -SIGN(1., XRTMIN(3)-PRRT(JL))) * & ! PRRT(:)>XRTMIN(3) &MAX(0., -SIGN(1., PCF(JL)-ZZW4(JL))) * & ! ZZW4(:) > PCF(:) &PCOMPUTE(JL) @@ -403,8 +400,7 @@ IF (HSUBG_RR_EVAP=='CLFR') GHSUBG_RR_EVAP=.true. ENDDO ELSE PRREVAV(:) = 0. -!$acc loop independent - DO CONCURRENT ( JL = 1 : ISIZE ) + !$mnh_do_concurrent ( JL = 1 : ISIZE ) IF ( ZMASK(Jl) == 1. ) THEN ! outside the cloud (environment) the use of T^u (unsaturated) instead of T ! Bechtold et al. 1993 @@ -441,7 +437,7 @@ IF (HSUBG_RR_EVAP=='CLFR') GHSUBG_RR_EVAP=.true. ! PRREVAV(JL) = PRREVAV(JL)*(ZZW4(JL)-PCF(JL)) END IF - END DO + !$mnh_end_do() ENDIF !$acc end kernels diff --git a/src/MNH/mode_prandtl.f90 b/src/MNH/mode_prandtl.f90 index e8e8bb1cbafb99793e6025d2e8c44e1105982534..9b4db7e1a0fc11515cf5ff721fd2882d3b81f52e 100644 --- a/src/MNH/mode_prandtl.f90 +++ b/src/MNH/mode_prandtl.f90 @@ -133,19 +133,19 @@ IF (LTURBDIM_3DIM) THEN !* 3DIM case IF (OUSERV) THEN #ifndef MNH_BITREP - DO CONCURRENT (JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent (JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZW1(JI,JJ,JK) = 1. + 1.5* (PREDTH1(JI,JJ,JK)+PREDR1(JI,JJ,JK)) + & ( 0.5 * (PREDTH1(JI,JJ,JK)**2+PREDR1(JI,JJ,JK)**2) & + PREDTH1(JI,JJ,JK) * PREDR1(JI,JJ,JK) & ) - END DO + !$mnh_end_do() #else - DO CONCURRENT (JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent (JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZW1(JI,JJ,JK) = 1. + 1.5* (PREDTH1(JI,JJ,JK)+PREDR1(JI,JJ,JK)) + & ( 0.5 * (BR_P2(PREDTH1(JI,JJ,JK))+BR_P2(PREDR1(JI,JJ,JK))) & + PREDTH1(JI,JJ,JK) * PREDR1(JI,JJ,JK) & ) - END DO + !$mnh_end_do() #endif ZW2(:,:,:) = 0.5 * (PRED2TH3(:,:,:)-PRED2R3(:,:,:)) PPHI3(:,:,:)= 1. - & @@ -155,15 +155,15 @@ IF (LTURBDIM_3DIM) THEN ) / ZW1(:,:,:) ELSE #ifndef MNH_BITREP - DO CONCURRENT (JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent (JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZW1(JI,JJ,JK) = 1. + 1.5* PREDTH1(JI,JJ,JK) + & 0.5* PREDTH1(JI,JJ,JK)**2 - END DO + !$mnh_end_do() #else - DO CONCURRENT (JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent (JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZW1(JI,JJ,JK) = 1. + 1.5* PREDTH1(JI,JJ,JK) + & 0.5* BR_P2(PREDTH1(JI,JJ,JK)) - END DO + !$mnh_end_do() #endif ZW2(:,:,:) = 0.5* PRED2TH3(:,:,:) PPHI3(:,:,:)= 1. - & diff --git a/src/MNH/rain_ice.f90 b/src/MNH/rain_ice.f90 index 2c9d9a8347ba274c57b44559115f7f6c7a365657..4b7923188920edd81f4a3be7d1a8eff9cfca6547 100644 --- a/src/MNH/rain_ice.f90 +++ b/src/MNH/rain_ice.f90 @@ -258,6 +258,11 @@ USE MODI_ICE4_RAINFR_VERT USE MODE_MNH_ZWORK, ONLY: MNH_MEM_GET, MNH_MEM_POSITION_PIN, MNH_MEM_RELEASE #endif +#if defined(MNH_COMPILER_CCE) && defined(MNH_BITREP_OMP) +!$mnh_undef(LOOP) +!$mnh_undef(OPENACC) +#endif + IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : @@ -720,8 +725,7 @@ IF( IMICRO >= 0 ) THEN ! !$acc kernels -!$acc loop independent - DO CONCURRENT ( JL=1:IMICRO ) + !$mnh_do_concurrent ( JL=1:IMICRO ) ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL)) ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL)) ZRRT(JL) = PRRT(I1(JL),I2(JL),I3(JL)) @@ -746,7 +750,7 @@ IF( IMICRO >= 0 ) THEN ZTHLT(JL) = ZTHT(JL) - XLVTT * ZTHT(JL) / XCPD / ZZT(JL) * ZRCT(JL) ZPRES(JL) = PPABST(I1(JL),I2(JL),I3(JL)) ZEXNREF(JL) = PEXNREF(I1(JL),I2(JL),I3(JL)) - ENDDO + !$mnh_end_do() ! IF (KRR == 7 ) THEN !$acc loop independent @@ -764,26 +768,23 @@ IF( IMICRO >= 0 ) THEN END DO END IF ! - !$acc loop independent - DO CONCURRENT ( JL=1:IMICRO ) + !$mnh_do_concurrent ( JL=1:IMICRO ) ZZW(JL) = ZEXNREF(JL)*( XCPD+XCPV*ZRVT(JL)+XCL*(ZRCT(JL)+ZRRT(JL)) & +XCI*(ZRIT(JL)+ZRST(JL)+ZRGT(JL)) ) ZLSFACT(JL) = (XLSTT+(XCPV-XCI)*(ZZT(JL)-XTT))/ZZW(JL) ! L_s/(Pi_ref*C_ph) ZLVFACT(JL) = (XLVTT+(XCPV-XCL)*(ZZT(JL)-XTT))/ZZW(JL) ! L_v/(Pi_ref*C_ph) - END DO + !$mnh_end_do() #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) - !$acc loop independent - DO CONCURRENT ( JL=1:IMICRO ) + !$mnh_do_concurrent ( JL=1:IMICRO ) ZZW(JL) = EXP( XALPI - XBETAI/ZZT(JL) - XGAMI*LOG(ZZT(JL) ) ) ZSSI(JL) = ZRVT(JL)*( ZPRES(JL)-ZZW(JL) ) / ( (XMV/XMD) * ZZW(JL) ) - 1.0 - END DO + !$mnh_end_do() #else - !$acc loop independent - DO CONCURRENT ( JL=1:IMICRO ) + !$mnh_do_concurrent ( JL=1:IMICRO ) ZZW(JL) = BR_EXP( XALPI - XBETAI/ZZT(JL) - XGAMI*BR_LOG(ZZT(JL) ) ) ZSSI(JL) = ZRVT(JL)*( ZPRES(JL)-ZZW(JL) ) / ( (XMV/XMD) * ZZW(JL) ) - 1.0 - END DO + !$mnh_end_do() #endif ! Supersaturation over ice @@ -797,10 +798,9 @@ IF( IMICRO >= 0 ) THEN ! !Cloud water split between high and low content part is done here !according to autoconversion option - !$acc loop independent - DO CONCURRENT ( JL=1:IMICRO ) + !$mnh_do_concurrent ( JL=1:IMICRO ) ZRCRAUTC(JL) = XCRIAUTC/ZRHODREF(JL) ! Autoconversion rc threshold - END DO + !$mnh_end_do() !$acc end kernels #ifdef MNH_OPENACC IF (LBU_ENABLE .OR. LLES_CALL) THEN @@ -810,8 +810,7 @@ IF( IMICRO >= 0 ) THEN IF (HSUBG_AUCV == 'NONE') THEN !$acc kernels !Cloud water is entirely in low or high part -!$acc loop independent private(JL) - DO CONCURRENT ( JL=1:IMICRO ) + !$mnh_do_concurrent ( JL=1:IMICRO ) IF (ZRCT(JL) > ZRCRAUTC(JL)) THEN ZHLC_HCF(JL) = 1. ZHLC_LCF(JL) = 0.0 @@ -831,7 +830,7 @@ IF( IMICRO >= 0 ) THEN ZHLC_LRC(JL) = 0.0 ZRF(JL) = 0. END IF - END DO + !$mnh_end_do() !$acc end kernels ELSEIF (HSUBG_AUCV == 'CLFR') THEN @@ -1042,43 +1041,39 @@ IF( IMICRO >= 0 ) THEN !$acc kernels !ZLBDAR will be used when we consider rain diluted over the grid box #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) -!$acc loop independent - DO CONCURRENT ( JL=1:IMICRO ) + !$mnh_do_concurrent ( JL=1:IMICRO ) IF ( ZRRT(JL)>0.0 ) THEN ZLBDAR(JL) = XLBR * ( ZRHODREF(JL) * MAX( ZRRT(JL), XRTMIN(3) ) )**XLBEXR ELSE ZLBDAR(JL) = 0. END IF - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT #else -!$acc loop independent - DO CONCURRENT ( JL=1:IMICRO ) + !$mnh_do_concurrent ( JL=1:IMICRO ) IF ( ZRRT(JL)>0.0 ) THEN ZLBDAR(JL) = XLBR * BR_POW( ZRHODREF(JL) * MAX( ZRRT(JL), XRTMIN(3) ), XLBEXR ) ELSE ZLBDAR(JL) = 0. END IF - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT #endif !ZLBDAR_RF will be used when we consider rain concentrated in its fraction #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) -!$acc loop independent - DO CONCURRENT ( JL=1:IMICRO ) + !$mnh_do_concurrent ( JL=1:IMICRO ) IF ( ZRRT(JL)>0.0 .AND. ZRF(JL)>0.0 ) THEN ZLBDAR_RF(JL) = XLBR * ( ZRHODREF(JL) * MAX( ZRRT(JL)/ZRF(JL), XRTMIN(3) ) )**XLBEXR ELSE ZLBDAR_RF(JL) = 0. END IF - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT #else -!$acc loop independent - DO CONCURRENT ( JL=1:IMICRO ) + !$mnh_do_concurrent ( JL=1:IMICRO ) IF ( ZRRT(JL)>0.0 .AND. ZRF(JL)>0.0 ) THEN ZLBDAR_RF(JL) = XLBR * BR_POW( ZRHODREF(JL) * MAX( ZRRT(JL)/ZRF(JL), XRTMIN(3) ), XLBEXR ) ELSE ZLBDAR_RF(JL) = 0. END IF - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT #endif !Not necessary but useful for verifications ZUSW(:) = XNEGUNDEF diff --git a/src/MNH/rain_ice_fast_rg.f90 b/src/MNH/rain_ice_fast_rg.f90 index 14101b80037ee6d9d656237d2199ad2e71120d3c..499cb5096ee433ab44dc7897905fcd31ec770a41 100644 --- a/src/MNH/rain_ice_fast_rg.f90 +++ b/src/MNH/rain_ice_fast_rg.f90 @@ -205,8 +205,7 @@ CALL MNH_MEM_GET( ZZW1, SIZE(PRHODREF), 7 ) !$acc end kernels #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) !$acc parallel present_cr(ZZW1,GWORK) - !$acc loop independent - DO CONCURRENT ( JL=1:JLU ) + !$mnh_do_concurrent ( JL=1:JLU ) IF ( GWORK(JL) ) THEN ZZW1(JL,3) = MIN( PRIS(JL),XICFRR * PRIT(JL) & ! RICFRRG * PLBDAR(JL)**XEXICFRR & @@ -219,12 +218,11 @@ CALL MNH_MEM_GET( ZZW1, SIZE(PRHODREF), 7 ) PRGS(JL) = PRGS(JL) + ZZW1(JL,3)+ZZW1(JL,4) PTHS(JL) = PTHS(JL) + ZZW1(JL,4)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*RRCFRIG) END IF - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT !$acc end parallel #else !$acc parallel present_cr(ZZW1,GWORK) - !$acc loop independent - DO CONCURRENT ( JL=1:JLU ) + !$mnh_do_concurrent ( JL=1:JLU ) IF ( GWORK(JL) ) THEN ZZW1(JL,3) = MIN( PRIS(JL),XICFRR * PRIT(JL) & ! RICFRRG * BR_POW(PLBDAR(JL),XEXICFRR) & @@ -237,7 +235,7 @@ CALL MNH_MEM_GET( ZZW1, SIZE(PRHODREF), 7 ) PRGS(JL) = PRGS(JL) + ZZW1(JL,3)+ZZW1(JL,4) PTHS(JL) = PTHS(JL) + ZZW1(JL,4)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*RRCFRIG) END IF - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT !$acc end parallel #endif @@ -383,18 +381,17 @@ END IF !* 6.2.5 perform the bilinear interpolation of the normalized ! SDRYG-kernel ! - !$acc loop independent - DO CONCURRENT ( JJ = 1:IGDRY ) + !$mnh_do_concurrent ( JJ = 1:IGDRY ) ZVEC3(JJ) = ( XKER_SDRYG(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ) & - XKER_SDRYG(IVEC1(JJ)+1,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & * ZVEC1(JJ) & - ( XKER_SDRYG(IVEC1(JJ) ,IVEC2(JJ)+1)* ZVEC2(JJ) & - XKER_SDRYG(IVEC1(JJ) ,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & * (ZVEC1(JJ) - 1.0) - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT ! - !$acc loop independent , private (JL) - DO CONCURRENT (JJ=1:IGDRY) + ! acc loop independent , private (JL) + !$mnh_do_concurrent (JJ=1:IGDRY) JL = I1(JJ) #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZZW1(JL,3) = MIN( PRSS(JL),XFSDRYG*ZVEC3(JJ) & ! RSDRYG @@ -413,7 +410,7 @@ END IF + XLBSDRYG2 / ( ZVECLBDAG(JJ) * ZVECLBDAS(JJ) ) & + XLBSDRYG3 / BR_P2(ZVECLBDAS(JJ)) ) ) #endif - END DO + !$mnh_end_do() !$acc end kernels IF (MPPDB_INITIALIZED) THEN CALL MPPDB_CHECK(ZZW1,"RAIN_ICE_FAST_RG 6.2.5:ZZW1") @@ -507,17 +504,16 @@ END IF ! RDRYG-kernel ! !$acc kernels ! present_cr(ZVECLBDAG,ZVECLBDAR,ZZW1) - !$acc loop independent - DO CONCURRENT (JJ = 1:IGDRY ) + !$mnh_do_concurrent (JJ = 1:IGDRY ) ZVEC3(JJ) = ( XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ) & - XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & * ZVEC1(JJ) & - ( XKER_RDRYG(IVEC1(JJ) ,IVEC2(JJ)+1)* ZVEC2(JJ) & - XKER_RDRYG(IVEC1(JJ) ,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & * (ZVEC1(JJ) - 1.0) - END DO ! CONCURRENT - !$acc loop independent , private (JL) - DO CONCURRENT (JJ=1:IGDRY) + !$mnh_end_do() ! CONCURRENT + ! acc loop independent , private (JL) + !$mnh_do_concurrent (JJ=1:IGDRY) JL = I1(JJ) #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZZW1(JL,4) = MIN( PRRS(JL),XFRDRYG*ZVEC3(JJ) & ! RRDRYG @@ -534,7 +530,7 @@ END IF + XLBRDRYG2/( ZVECLBDAG(JJ) * ZVECLBDAR(JJ) ) & + XLBRDRYG3/ BR_P2(ZVECLBDAR(JJ)) ) ) #endif - END DO + !$mnh_end_do() !$acc end kernels IF (MPPDB_INITIALIZED) THEN CALL MPPDB_CHECK(ZZW1,"RAIN_ICE_FAST_RG 6.2.10:ZZW1") @@ -565,8 +561,7 @@ END IF !$acc end kernels #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) !$acc parallel present_cr(GWORK) - !$acc loop independent - DO CONCURRENT ( JL=1:JLU ) + !$mnh_do_concurrent ( JL=1:JLU ) IF ( GWORK(JL) ) THEN ZZW1(JL,5) = MIN( PRIS(JL), & ZZW1(JL,2) / (XCOLIG*EXP(XCOLEXIG*(PZT(JL)-XTT)) ) ) ! RIWETG @@ -587,12 +582,11 @@ END IF ( PRHODREF(JL)*(XLMTT+(XCI-XCL)*(XTT-PZT(JL))) ) ) / & ( PRHODREF(JL)*(XLMTT-XCL*(XTT-PZT(JL))) ) ) END IF - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT !$acc end parallel #else !$acc parallel present_cr(GWORK) -!$acc loop independent - DO CONCURRENT ( JL=1:JLU ) + !$mnh_do_concurrent ( JL=1:JLU ) IF ( GWORK(JL) ) THEN ZZW1(JL,5) = MIN( PRIS(JL), & ZZW1(JL,2) / (XCOLIG*BR_EXP(XCOLEXIG*(PZT(JL)-XTT)) ) ) ! RIWETG @@ -613,7 +607,7 @@ END IF ( PRHODREF(JL)*(XLMTT+(XCI-XCL)*(XTT-PZT(JL))) ) ) / & ( PRHODREF(JL)*(XLMTT-XCL*(XTT-PZT(JL))) ) ) END IF - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT !$acc end parallel #endif ! @@ -621,8 +615,7 @@ END IF ! !$acc kernels present_cr(GWORK) IF ( KRR == 7 ) THEN -!$acc loop independent -DO CONCURRENT (JL=1:JLU) +!$mnh_do_concurrent (JL=1:JLU) GWORK(JL) = PRGT(JL)>XRTMIN(6) .AND. PZT(JL)<XTT .and. PRDRYG(JL)>=PRWETG(JL) .AND. PRWETG(JL)>0.0 ! Wet case IF( GWORK(JL) )THEN ZZW(JL) = PRWETG(JL) - ZZW1(JL,5) - ZZW1(JL,6) ! RCWETG+RRWETG @@ -650,7 +643,7 @@ DO CONCURRENT (JL=1:JLU) PTHS(JL) = PTHS(JL) + ZZW1(JL,7)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(RCWETG+RRWETG)) ENDIF -ENDDO +!$mnh_end_do() ELSE IF( KRR == 6 ) THEN !$mnh_expand_where(JL=1:JLU) GWORK(:) = PRGT(:)>XRTMIN(6) .AND. PZT(:)<XTT .AND. PRDRYG(:)>=PRWETG(:) .AND. PRWETG(:)>0.0 ! Wet case @@ -747,8 +740,7 @@ END IF !$acc end kernels #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) !$acc parallel present_cr(GWORK) - !$acc loop independent - DO CONCURRENT ( JL=1:JLU ) + !$mnh_do_concurrent ( JL=1:JLU ) IF ( GWORK(JL) ) THEN ZZW(JL) = PRVT(JL)*PPRES(JL)/((XMV/XMD)+PRVT(JL)) ! Vapor pressure ZZW(JL) = PKA(JL)*(XTT-PZT(JL)) + & @@ -767,12 +759,11 @@ END IF PRGS(JL) = PRGS(JL) - ZZW(JL) PTHS(JL) = PTHS(JL) - ZZW(JL)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(-RGMLTR)) END IF - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT !$acc end parallel #else !$acc parallel present_cr(GWORK) - !$acc loop independent - DO CONCURRENT ( JL=1:JLU ) + !$mnh_do_concurrent ( JL=1:JLU ) IF ( GWORK(JL) ) THEN ZZW(JL) = PRVT(JL)*PPRES(JL)/((XMV/XMD)+PRVT(JL)) ! Vapor pressure ZZW(JL) = PKA(JL)*(XTT-PZT(JL)) + & @@ -791,7 +782,7 @@ END IF PRGS(JL) = PRGS(JL) - ZZW(JL) PTHS(JL) = PTHS(JL) - ZZW(JL)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(-RGMLTR)) END IF - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT !$acc end parallel #endif diff --git a/src/MNH/rain_ice_fast_rs.f90 b/src/MNH/rain_ice_fast_rs.f90 index 24c30713af7d7ba6280938b1fc7fbf69e0052061..20cc4e8a069f3d1f304e388bab3f605da339c920 100644 --- a/src/MNH/rain_ice_fast_rs.f90 +++ b/src/MNH/rain_ice_fast_rs.f90 @@ -249,16 +249,15 @@ CALL COUNTJV_DEVICE( GWORK(:), I1(:), IGRIM ) ! 5.1.3 perform the linear interpolation of the normalized ! "2+XDS"-moment of the incomplete gamma function ! - !$acc loop independent - DO CONCURRENT (JJ=1:IGRIM) + !$mnh_do_concurrent (JJ=1:IGRIM) ZVEC1(JJ) = XGAMINC_RIM1( IVEC2(JJ)+1 )* ZVEC2(JJ) & - XGAMINC_RIM1( IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT ! ! 5.1.4 riming of the small sized aggregates ! - !$acc loop independent , private (JL) - DO CONCURRENT ( JJ = 1:IGRIM ) + ! acc loop independent , private (JL) + !$mnh_do_concurrent ( JJ = 1:IGRIM ) JL = I1(JJ) #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZZW1(JJ) = MIN( PRCS(JL), & @@ -274,7 +273,7 @@ CALL COUNTJV_DEVICE( GWORK(:), I1(:), IGRIM ) PRCS(JL) = PRCS(JL) - ZZW1(JJ) PRSS(JL) = PRSS(JL) + ZZW1(JJ) PTHS(JL) = PTHS(JL) + ZZW1(JJ)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(RCRIMSS)) - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT ! !$acc end kernels IF (MPPDB_INITIALIZED) THEN @@ -288,17 +287,16 @@ END IF ! 5.1.5 perform the linear interpolation of the normalized ! "XBS"-moment of the incomplete gamma function ! - !$acc loop independent - DO CONCURRENT (JJ=1:IGRIM) + !$mnh_do_concurrent (JJ=1:IGRIM) ZVEC1(JJ) = XGAMINC_RIM2( IVEC2(JJ)+1 )* ZVEC2(JJ) & - XGAMINC_RIM2( IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT ! ! 5.1.6 riming-conversion of the large sized aggregates into graupeln ! ! - !$acc loop independent , private (JL) - DO CONCURRENT (JJ = 1:IGRIM ) + ! acc loop independent , private (JL) + !$mnh_do_concurrent (JJ = 1:IGRIM ) JL = I1(JJ) IF ( PRSS(JL) > 0.0 ) THEN #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) @@ -325,7 +323,7 @@ END IF PRGS(JL) = PRGS(JL) + ZZW2(JJ)+ZZW3(JJ) PTHS(JL) = PTHS(JL) + ZZW2(JJ)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(RCRIMSG)) END IF - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT !$acc end kernels IF (MPPDB_INITIALIZED) THEN @@ -449,20 +447,19 @@ END IF ! 5.2.3 perform the bilinear interpolation of the normalized ! RACCSS-kernel ! -!$acc loop independent - DO CONCURRENT ( JJ = 1:IGACC ) + !$mnh_do_concurrent ( 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) ) & * ZVEC1(JJ) & - ( XKER_RACCSS(IVEC1(JJ) ,IVEC2(JJ)+1)* ZVEC2(JJ) & - XKER_RACCSS(IVEC1(JJ) ,IVEC2(JJ) )*(ZVEC2(JJ) - 1.0) ) & * (ZVEC1(JJ) - 1.0) - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT ! ! 5.2.4 raindrop accretion on the small sized aggregates ! -!$acc loop independent , private (JL) - DO CONCURRENT ( JJ = 1:IGACC ) +! acc loop independent , private (JL) + !$mnh_do_concurrent ( JJ = 1:IGACC ) JL = I1(JJ) #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZZW2(JJ) = & !! coef of RRACCS @@ -481,7 +478,7 @@ END IF PRRS(JL) = PRRS(JL) - ZZW4(JJ) PRSS(JL) = PRSS(JL) + ZZW4(JJ) PTHS(JL) = PTHS(JL) + ZZW4(JJ)*(PLSFACT(JL)-PLVFACT(JL)) ! f(L_f*(RRACCSS)) - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT !$acc end kernels IF (MPPDB_INITIALIZED) THEN CALL MPPDB_CHECK(ZVEC1,"RAIN_ICE_FAST_RS 5.2.4:IVEC1") @@ -498,8 +495,7 @@ END IF ! 5.2.4b perform the bilinear interpolation of the normalized ! RACCS-kernel ! - !$acc loop independent - DO CONCURRENT (JJ = 1:IGACC ) + !$mnh_do_concurrent (JJ = 1:IGACC ) ZVEC3(JJ) = ( XKER_RACCS(IVEC2(JJ)+1,IVEC1(JJ)+1)* ZVEC1(JJ) & - XKER_RACCS(IVEC2(JJ)+1,IVEC1(JJ) )*(ZVEC1(JJ) - 1.0) ) & * ZVEC2(JJ) & @@ -507,26 +503,25 @@ END IF - XKER_RACCS(IVEC2(JJ) ,IVEC1(JJ) )*(ZVEC1(JJ) - 1.0) ) & * (ZVEC2(JJ) - 1.0) ZZW2(JJ) = ZZW2(JJ) * ZVEC3(JJ) - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT !! RRACCS! ! 5.2.5 perform the bilinear interpolation of the normalized ! SACCRG-kernel ! - !$acc loop independent - DO CONCURRENT (JJ = 1:IGACC ) + !$mnh_do_concurrent (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) ) & * ZVEC2(JJ) & - ( XKER_SACCRG(IVEC2(JJ) ,IVEC1(JJ)+1)* ZVEC1(JJ) & - XKER_SACCRG(IVEC2(JJ) ,IVEC1(JJ) )*(ZVEC1(JJ) - 1.0) ) & * (ZVEC2(JJ) - 1.0) - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT ! ! 5.2.6 raindrop accretion-conversion of the large sized aggregates ! into graupeln ! - !$acc loop independent , private (JL) - DO CONCURRENT ( JJ = 1:IGACC ) + ! acc loop independent , private (JL) + !$mnh_do_concurrent ( JJ = 1:IGACC ) JL = I1(JJ) IF ( PRSS(JL) > 0.0 ) THEN ZZW2(JJ) = MAX( MIN( PRRS(JL),ZZW2(JJ)-ZZW4(JJ) ),0.0 ) ! RRACCSG @@ -551,7 +546,7 @@ END IF ! f(L_f*(RRACCSG)) END IF END IF - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT !$acc end kernels !$acc end data @@ -591,8 +586,7 @@ END IF GWORK(:) = PRST(:)>XRTMIN(5) .AND. PRSS(:)>0.0 .AND. PZT(:)>XTT !$acc end kernels !$acc parallel present_cr(GWORK,zzw) - !$acc loop independent - DO CONCURRENT (JJ=1:JJU) + !$mnh_do_concurrent (JJ=1:JJU) IF ( GWORK(JJ) ) THEN ZZW(JJ) = PRVT(JJ)*PPRES(JJ)/((XMV/XMD)+PRVT(JJ)) ! Vapor pressure ZZW(JJ) = PKA(JJ)*(XTT-PZT(JJ)) + & @@ -619,7 +613,7 @@ END IF PRSS(JJ) = PRSS(JJ) - ZZW(JJ) PRGS(JJ) = PRGS(JJ) + ZZW(JJ) END IF - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT !$acc end parallel if ( lbudget_rs ) call Budget_store_add( tbudgets(NBUDGET_RS), 'CMEL', & diff --git a/src/MNH/rain_ice_nucleation.f90 b/src/MNH/rain_ice_nucleation.f90 index dbac01ac7c272af6e32df903580505fd626d2c53..f650d312dea998ed014beaaba0a7ca165e53e086 100644 --- a/src/MNH/rain_ice_nucleation.f90 +++ b/src/MNH/rain_ice_nucleation.f90 @@ -49,6 +49,11 @@ use modi_bitrep USE MODE_MNH_ZWORK, ONLY: MNH_MEM_GET, MNH_MEM_POSITION_PIN, MNH_MEM_RELEASE #endif +#if defined(MNH_COMPILER_CCE) && defined(MNH_BITREP_OMP) +!$mnh_undef(LOOP) +!$mnh_undef(OPENACC) +#endif + IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : @@ -165,12 +170,9 @@ if ( lbudget_ri ) call Budget_store_init( tbudgets(NBUDGET_RI), 'HENU', pris(:, #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) PT(:,:,:) = PTHT(:,:,:) * ( PPABST(:,:,:) / XP00 ) ** ( XRD / XCPD ) #else -#ifdef MNH_COMPILER_NVHPC -!$acc loop independent collapse(3) -#endif -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) PT(JI,JJ,JK) = PTHT(JI,JJ,JK) * BR_POW( PPABST(JI,JJ,JK) / XP00, XRD / XCPD ) -END DO +!$mnh_end_do() #endif ! !$acc end kernels @@ -211,54 +213,47 @@ IF( INEGT >= 1 ) THEN !$acc data present( zrvt, zcit, zzt, zpres, zzw, zusw, zssi ) !$acc kernels - !$acc loop independent - DO CONCURRENT ( JL=1:INEGT ) + !$mnh_do_concurrent ( JL=1:INEGT ) ZRVT(JL) = PRVT (I1(JL),I2(JL),I3(JL)) ZCIT(JL) = PCIT (I1(JL),I2(JL),I3(JL)) ZZT(JL) = PT (I1(JL),I2(JL),I3(JL)) ZPRES(JL) = PPABST(I1(JL),I2(JL),I3(JL)) - ENDDO + !$mnh_end_do() #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) - !$acc loop independent - DO CONCURRENT ( JL=1:INEGT ) + !$mnh_do_concurrent ( JL=1:INEGT ) ZZW(JL) = EXP( XALPI - XBETAI/ZZT(JL) - XGAMI*LOG(ZZT(JL) ) ) ! es_i - END DO + !$mnh_end_do() #else - !$acc loop independent - DO CONCURRENT ( JL=1:INEGT ) + !$mnh_do_concurrent ( JL=1:INEGT ) ZZW(JL) = BR_EXP( XALPI - XBETAI/ZZT(JL) - XGAMI*BR_LOG(ZZT(JL) ) ) ! es_i - END DO + !$mnh_end_do() #endif - !$acc loop independent - DO CONCURRENT ( JL=1:INEGT ) + !$mnh_do_concurrent ( JL=1:INEGT ) ZZW(JL) = MIN(ZPRES(JL)/2., ZZW(JL)) ! safety limitation ZSSI(JL) = ZRVT(JL)*( ZPRES(JL)-ZZW(JL) ) / ( (XMV/XMD) * ZZW(JL) ) - 1.0 ! Supersaturation over ice - END DO + !$mnh_end_do() #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) - !$acc loop independent - DO CONCURRENT ( JL=1:INEGT ) + !$mnh_do_concurrent ( JL=1:INEGT ) ZUSW(JL) = EXP( XALPW - XBETAW/ZZT(JL) - XGAMW*LOG(ZZT(JL) ) ) ! es_w ZUSW(JL) = MIN(ZPRES(JL)/2.,ZUSW(JL)) ! safety limitation ZUSW(JL) = ( ZUSW(JL)/ZZW(JL) )*( (ZPRES(JL)-ZZW(JL))/(ZPRES(JL)-ZUSW(JL)) ) - 1.0 ! Supersaturation of saturated water vapor over ice - END DO + !$mnh_end_do() #else - !$acc loop independent - DO CONCURRENT ( JL=1:INEGT ) + !$mnh_do_concurrent ( JL=1:INEGT ) ZUSW(JL) = BR_EXP( XALPW - XBETAW/ZZT(JL) - XGAMW*BR_LOG(ZZT(JL) ) ) ! es_w ZUSW(JL) = MIN(ZPRES(JL)/2.,ZUSW(JL)) ! safety limitation ZUSW(JL) = ( ZUSW(JL)/ZZW(JL) )*( (ZPRES(JL)-ZZW(JL))/(ZPRES(JL)-ZUSW(JL)) ) - 1.0 ! Supersaturation of saturated water vapor over ice - END DO + !$mnh_end_do() #endif ! !* 3.1 compute the heterogeneous nucleation source: RVHENI ! !* 3.1.1 compute the cloud ice concentration ! -!$acc loop independent -DO CONCURRENT ( JL=1:INEGT ) +!$mnh_do_concurrent ( JL=1:INEGT ) ZZW(JL) = 0.0 ZSSI(JL) = MIN( ZSSI(JL), ZUSW(JL) ) ! limitation of SSi according to SSw=0 IF ( (ZZT(JL)<XTT-5.0) .AND. (ZSSI(JL)>0.0) ) THEN @@ -268,29 +263,26 @@ DO CONCURRENT ( JL=1:INEGT ) ZZW(JL) = XNU20 * BR_EXP( XALPHA2*ZSSI(JL)-XBETA2 ) #endif END IF -END DO +!$mnh_end_do() #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) - !$acc loop independent - DO CONCURRENT ( JL=1:INEGT ) + !$mnh_do_concurrent ( JL=1:INEGT ) IF ( (ZZT(JL)<=XTT-2.0) .AND. (ZZT(JL)>=XTT-5.0) .AND. (ZSSI(JL)>0.0) ) THEN ZZW(JL) = MAX( XNU20 * EXP( -XBETA2 ),XNU10 * EXP( -XBETA1*(ZZT(JL)-XTT) ) * & ( ZSSI(JL)/ZUSW(JL) )**XALPHA1 ) END IF - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT #else - !$acc loop independent - DO CONCURRENT ( JL=1:INEGT ) + !$mnh_do_concurrent ( JL=1:INEGT ) IF ( (ZZT(JL)<=XTT-2.0) .AND. (ZZT(JL)>=XTT-5.0) .AND. (ZSSI(JL)>0.0) ) THEN ZZW(JL) = MAX( XNU20 * BR_EXP( -XBETA2 ),XNU10 * BR_EXP( -XBETA1*(ZZT(JL)-XTT) ) * & BR_POW( ZSSI(JL)/ZUSW(JL),XALPHA1 ) ) END IF - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT #endif ! WARNING COMPILER BUG NVHPC20.X/3 <-> if array syntaxe ZZW(1:INEGT) = ZZW(1:INEGT) - !$acc loop independent - DO CONCURRENT ( JL=1:INEGT ) + !$mnh_do_concurrent ( JL=1:INEGT ) ZZW(JL) = ZZW(JL) - ZCIT(JL) - END DO + !$mnh_end_do() #ifndef MNH_COMPILER_NVHPC ZZWMAX = MAXVAL(ZZW(1:INEGT)) !$acc end kernels @@ -310,15 +302,13 @@ END DO ! !* 3.1.2 update the r_i and r_v mixing ratios ! - !$acc loop independent - DO CONCURRENT ( JL=1:INEGT ) + !$mnh_do_concurrent ( JL=1:INEGT ) ZZW(JL) = MIN( ZZW(JL),50.E3 ) ! limitation provisoire a 50 l^-1 - END DO + !$mnh_end_do() ZW(:,:,:) = 0.0 - !$acc loop independent - DO CONCURRENT ( JL=1:INEGT ) + !$mnh_do_concurrent ( JL=1:INEGT ) ZW(I1(JL), I2(JL), I3(JL)) = ZZW( JL ) - END DO + !$mnh_end_do() ZW(:,:,:) = MAX( ZW(:,:,:) ,0.0 ) *XMNU0/(PRHODREF(:,:,:)*PTSTEP) PRIS(:,:,:) = PRIS(:,:,:) + ZW(:,:,:) PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:) @@ -332,15 +322,13 @@ END DO + XCI*(PRIT(:,:,:)+PRST(:,:,:)+PRGT(:,:,:)))*PEXNREF(:,:,:) ) END IF ! f(L_s*(RVHENI)) - !$acc loop independent - DO CONCURRENT ( JL=1:INEGT ) + !$mnh_do_concurrent ( JL=1:INEGT ) ZZW(JL) = MAX( ZZW(JL)+ZCIT(JL),ZCIT(JL) ) - END DO + !$mnh_end_do() PCIT(:,:,:) = MAX( PCIT(:,:,:), 0.0 ) - !$acc loop independent - DO CONCURRENT ( JL=1:INEGT ) + !$mnh_do_concurrent ( JL=1:INEGT ) PCIT(I1(JL), I2(JL), I3(JL)) = MAX( ZZW( JL ), PCIT(I1(JL), I2(JL), I3(JL)), 0.0 ) - END DO + !$mnh_end_do() !$acc end kernels END IF diff --git a/src/MNH/rain_ice_red.f90 b/src/MNH/rain_ice_red.f90 index c598b4c698398ba0fb4678006d8485f1133c9f23..937ac58e8888ca5c4d303cd73d42fc0fa0190580 100644 --- a/src/MNH/rain_ice_red.f90 +++ b/src/MNH/rain_ice_red.f90 @@ -686,13 +686,6 @@ REAL, DIMENSION(:,:,:), POINTER, CONTIGUOUS :: & ! LOGICAL :: GTEST ! temporary variable for OpenACC character limitation (Cray CCE) -!$acc data present( ODMICRO, PEXN, PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR, & -!$acc & PHLC_HRC, PTHT, PRVT, & -!$acc & PRCT, PHLC_HCF, PHLI_HRI, PHLI_HCF, PRRT, PRIT, PRST, PRGT, PSIGS, & -!$acc & PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, & -!$acc & PINPRC, PINDEP, PINPRR, PEVAP3D, PINPRS, PINPRG, PRAINFR, & -!$acc & PSEA, PTOWN, PRHT, PRHS, PINPRH, PFPR ) - IF (MPPDB_INITIALIZED) THEN !Check all IN arrays CALL MPPDB_CHECK(ODMICRO,"RAIN_ICE_RED beg:ODMICRO") @@ -731,6 +724,13 @@ IF (MPPDB_INITIALIZED) THEN IF (PRESENT(PRHS)) CALL MPPDB_CHECK(PRHS,"RAIN_ICE_RED beg:PRHS") END IF +!$acc data present( ODMICRO, PEXN, PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR, & +!$acc & PHLC_HRC, PTHT, PRVT, & +!$acc & PRCT, PHLC_HCF, PHLI_HRI, PHLI_HCF, PRRT, PRIT, PRST, PRGT, PSIGS, & +!$acc & PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, & +!$acc & PINPRC, PINDEP, PINPRR, PEVAP3D, PINPRS, PINPRG, PRAINFR, & +!$acc & PSEA, PTOWN, PRHT, PRHS, PINPRH, PFPR ) + !$acc kernels imicro = count(odmicro) !$acc end kernels @@ -1257,7 +1257,7 @@ ELSE ENDDO ENDDO #else -DO CONCURRENT( JI = 1 : KIT, JJ = 1 : KJT, JK = 1 : KKT ) +!$mnh_do_concurrent( JI = 1 : KIT, JJ = 1 : KJT, JK = 1 : KKT ) ZT(JI,JJ,JK) = PTHT(JI,JJ,JK) * PEXN(JI,JJ,JK) ZZ_LSFACT(JI,JJ,JK)=(XLSTT+(XCPV-XCI)*(ZT(JI,JJ,JK)-XTT)) & /( XCPD + XCPV*PRVT(JI,JJ,JK) + XCL*(PRCT(JI,JJ,JK)+PRRT(JI,JJ,JK)) & @@ -1265,7 +1265,7 @@ DO CONCURRENT( JI = 1 : KIT, JJ = 1 : KJT, JK = 1 : KKT ) ZZ_LVFACT(JI,JJ,JK)=(XLVTT+(XCPV-XCL)*(ZT(JI,JJ,JK)-XTT)) & /( XCPD + XCPV*PRVT(JI,JJ,JK) + XCL*(PRCT(JI,JJ,JK)+PRRT(JI,JJ,JK)) & + XCI*(PRIT(JI,JJ,JK)+PRST(JI,JJ,JK)+PRGT(JI,JJ,JK))) -END DO +!$mnh_end_do() #endif ENDIF !$acc end kernels @@ -1626,8 +1626,9 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies &ZHLC_HCF, ZHLC_LCF, ZHLC_HRC, ZHLC_LRC, & &ZHLI_HCF, ZHLI_LCF, ZHLI_HRI, ZHLI_LRI, PRAINFR) ! External tendencies -!$acc kernels +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! IF(GEXT_TEND) THEN +!$acc kernels !$acc loop independent DO JL=1, IMICRO ZA_TH(JL) = ZA_TH(JL) + ZEXT_TH(JL) @@ -1639,7 +1640,9 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies ZA_RG(JL) = ZA_RG(JL) + ZEXT_RG(JL) ZA_RH(JL) = ZA_RH(JL) + ZEXT_RH(JL) ENDDO - ENDIF +!$acc end kernels + ENDIF +!$acc kernels ! !*** 4.2 Integration time ! @@ -1664,6 +1667,8 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies ZW1D(JL) * MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) ENDDO ENDIF +!$acc end kernels +!$acc kernels !We need to adjust tendencies when a specy disappears !When a species is missing, only the external tendencies can be negative (and we must keep track of it) !$acc loop independent @@ -1698,7 +1703,8 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB_RG(JL)+ZRGT(JL))/MIN(ZA_RG(JL), -1.E-20)) ENDDO - +!$acc end kernels +!$acc kernels IF(KRR==7) THEN !$acc loop independent DO JL=1, IMICRO @@ -1707,7 +1713,9 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies ZMAXTIME(JL)=(1.-ZW1D(JL)) * ZMAXTIME(JL) + & &ZW1D(JL) * MIN(ZMAXTIME(JL), -(ZB_RH(JL)+ZRHT(JL))/MIN(ZA_RH(JL), -1.E-20)) ENDDO - ENDIF + ENDIF +!$acc end kernels +!$acc kernels !We stop when the end of the timestep is reached ZCOMPUTE(:)=ZCOMPUTE(:) * MAX(0., -SIGN(1., ZTIME(:)+ZMAXTIME(:)-PTSTEP)) @@ -1725,7 +1733,10 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies !We must recompute tendencies when the maximum allowed change is reached !When a specy is missing, only the external tendencies can be active and we do not want to recompute !the microphysical tendencies when external tendencies are negative (results won't change because specy was already missing) +!$acc end kernels + IF(XMRSTEP/=0.) THEN +!$acc kernels !$acc loop independent DO JL=1, IMICRO ZW1D(JL)=MAX(0., -SIGN(1., IITER(JL)-INB_ITER_MAX+0.)) * & ! WHERE(IITER(:)<INB_ITER_MAX) @@ -1806,7 +1817,8 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies &ZW1D(JL)*MIN(ZMAXTIME(JL), ZTIME_THRESHOLD(JL)) ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) ENDDO - +!$acc end kernels +!$acc kernels IF(KRR==7) THEN !$acc loop independent DO JL=1, IMICRO @@ -1824,7 +1836,8 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) ENDDO ENDIF - +!$acc end kernels +!$acc kernels !$acc loop independent DO JL=1, IMICRO ZW1D(JL)=MAX(ABS(ZB_RV(JL)), ABS(ZB_RC(JL)), ABS(ZB_RR(JL)), ABS(ZB_RI(JL)), & @@ -1834,10 +1847,12 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies ZMAXTIME(JL)=(1.-ZW1D(JL))*ZMAXTIME(JL) ZCOMPUTE(JL)=ZCOMPUTE(JL) * (1. - ZW1D(JL)) ENDDO - ENDIF +!$acc end kernels + ENDIF ! !*** 4.3 New values of variables for next iteration ! +!$acc kernels !$acc loop independent DO JL=1, IMICRO ZTHT(JL)=ZTHT(JL)+ZA_TH(JL)*ZMAXTIME(JL)+ZB_TH(JL) @@ -1850,12 +1865,12 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies ZCIT(JL)=ZCIT(JL) * MAX(0., -SIGN(1., -ZRIT(JL))) ! WHERE(ZRIT(:)==0.) ZCIT(:) = 0. ENDDO !$acc end kernels +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! IF(KRR==7) THEN !$acc kernels ZRHT(:)=ZRHT(:)+ZA_RH(:)*ZMAXTIME(:)+ZB_RH(:) !$acc end kernels END IF -! !$acc end kernels ! !*** 4.4 Mixing ratio change due to each process ! @@ -1924,7 +1939,7 @@ ENDDO !* 5. UNPACKING DIAGNOSTICS ! --------------------- ! -! !$acc kernels +! ! acc kernels IF(IMICRO>0) THEN !$acc kernels present_cr( ZHLC_HCF3D, ZHLC_LCF3D, ZHLC_HRC3D, ZHLC_LRC3D, ZHLI_HCF3D, ZHLI_LCF3D, ZHLI_HRI3D, ZHLI_LRI3D ) ZHLC_HCF3D(:,:,:)=0. @@ -2000,14 +2015,14 @@ ENDDO !$acc end kernels #else !$acc kernels present_cr( PEXNREF, PRIS, PRVS, PTHS, ZZ_LSFACT, ZZ_LVFACT, ZZ_RVHENI ) -DO CONCURRENT( JI = 1 : KIT, JJ = 1 : KJT, JK = 1 : KKT ) +!$mnh_do_concurrent( JI = 1 : KIT, JJ = 1 : KJT, JK = 1 : KKT ) ZZ_LSFACT(JI,JJ,JK)=ZZ_LSFACT(JI,JJ,JK)/PEXNREF(JI,JJ,JK) ZZ_LVFACT(JI,JJ,JK)=ZZ_LVFACT(JI,JJ,JK)/PEXNREF(JI,JJ,JK) ZZ_RVHENI(JI,JJ,JK) = MIN(PRVS(JI,JJ,JK), ZZ_RVHENI_MR(JI,JJ,JK)/PTSTEP) PRIS(JI,JJ,JK)=PRIS(JI,JJ,JK)+ZZ_RVHENI(JI,JJ,JK) PRVS(JI,JJ,JK)=PRVS(JI,JJ,JK)-ZZ_RVHENI(JI,JJ,JK) PTHS(JI,JJ,JK)=PTHS(JI,JJ,JK) + ZZ_RVHENI(JI,JJ,JK)*ZZ_LSFACT(JI,JJ,JK) -END DO +!$mnh_end_do() !$acc end kernels #endif !$acc update self(PRIS,PRVS,PTHS) @@ -2032,7 +2047,7 @@ IF(GEXT_TEND) THEN !$acc kernels !Z..T variables contain the exeternal tendency, we substract it !$acc loop independent - DO CONCURRENT ( JL = 1 : IMICRO ) + !$mnh_do_concurrent ( JL = 1 : IMICRO ) ZRVT(JL) = ZRVT(JL) - ZEXT_RV(JL) * PTSTEP ZRCT(JL) = ZRCT(JL) - ZEXT_RC(JL) * PTSTEP ZRRT(JL) = ZRRT(JL) - ZEXT_RR(JL) * PTSTEP @@ -2040,14 +2055,14 @@ IF(GEXT_TEND) THEN ZRST(JL) = ZRST(JL) - ZEXT_RS(JL) * PTSTEP ZRGT(JL) = ZRGT(JL) - ZEXT_RG(JL) * PTSTEP ZTHT(JL) = ZTHT(JL) - ZEXT_TH(JL) * PTSTEP - END DO + !$mnh_end_do() !$acc end kernels IF (KRR==7) THEN !$acc kernels !$acc loop independent - DO CONCURRENT ( JL = 1 : IMICRO ) + !$mnh_do_concurrent ( JL = 1 : IMICRO ) ZRHT(JL) = ZRHT(JL) - ZEXT_RH(JL) * PTSTEP - END DO + !$mnh_end_do() !$acc end kernels END IF END IF @@ -2109,14 +2124,14 @@ IF (KRR==7) THEN ELSE !PW: BUG: this should work... -! !$acc kernels +! ! acc kernels ! ZW_RVS(JI,JJ,JK) = 0. ! ZW_RCS(JI,JJ,JK) = 0. ! ZW_RRS(JI,JJ,JK) = 0. ! ZW_RIS(JI,JJ,JK) = 0. ! ZW_RSS(JI,JJ,JK) = 0. ! ZW_RGS(JI,JJ,JK) = 0. -! !$acc loop independent +! ! acc loop independent ! DO JL=1,IMICRO ! ZW_RVS(I1(JL), I2(JL), I3(JL)) = ( ZRVT(JL) - PRVT(I1(JL), I2(JL), I3(JL)) ) * ZINV_TSTEP ! ZW_RCS(I1(JL), I2(JL), I3(JL)) = ( ZRCT(JL) - PRCT(I1(JL), I2(JL), I3(JL)) ) * ZINV_TSTEP @@ -2125,7 +2140,7 @@ ELSE ! ZW_RSS(I1(JL), I2(JL), I3(JL)) = ( ZRST(JL) - PRST(I1(JL), I2(JL), I3(JL)) ) * ZINV_TSTEP ! ZW_RGS(I1(JL), I2(JL), I3(JL)) = ( ZRGT(JL) - PRGT(I1(JL), I2(JL), I3(JL)) ) * ZINV_TSTEP ! END DO -! !$acc end kernels +! ! acc end kernels #if 0 !$acc kernels @@ -2695,6 +2710,8 @@ ENDIF !$acc end data +!$acc end data + #ifdef MNH_OPENACC !Release all memory allocated with MNH_MEM_GET calls since last call to MNH_MEM_POSITION_PIN CALL MNH_MEM_RELEASE() @@ -2722,8 +2739,6 @@ IF (MPPDB_INITIALIZED) THEN IF (PRESENT(PFPR)) CALL MPPDB_CHECK(PFPR, "RAIN_ICE_RED end:PFPR") END IF -!$acc end data - CONTAINS ! SUBROUTINE CORRECT_NEGATIVITIES(KIT, KJT, KKT, KRR, PRV, PRC, PRR, & diff --git a/src/MNH/rain_ice_sedimentation_split.f90 b/src/MNH/rain_ice_sedimentation_split.f90 index ab5091edf2024d16b7dc9987cf2564976042bb44..91eb1eda97836cafcb41e49edeef7bc212d12a33 100644 --- a/src/MNH/rain_ice_sedimentation_split.f90 +++ b/src/MNH/rain_ice_sedimentation_split.f90 @@ -55,6 +55,11 @@ USE MODI_BITREP USE MODE_MNH_ZWORK, ONLY: MNH_MEM_GET, MNH_MEM_POSITION_PIN, MNH_MEM_RELEASE #endif +#if defined(MNH_COMPILER_CCE) && defined(MNH_BITREP_OMP) +!$mnh_undef(LOOP) +!$mnh_undef(OPENACC) +#endif + IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : @@ -307,7 +312,7 @@ if ( lbudget_rh ) call Budget_store_init( tbudgets(NBUDGET_RH), 'SE ! O. Initialization of for sedimentation ! !$acc kernels present_cr(ZOMPSEA,ZTMP1_2D,zconc_tmp,ztmp3_2d,ztmp2_2d,ztmp4_2d,ZLBC,ZFSEDC) & -!$acc present_cr(zconc3d,zray,zprrs,zprss) +!$acc & present_cr(zconc3d,zray,zprrs,zprss) ZINVTSTEP=1./PTSTEP ZTSPLITR= PTSTEP / REAL(KSPLITR) ! @@ -459,8 +464,7 @@ DO JN = 1 , KSPLITR IF ( OSEDIC ) THEN ZWSED(:,:,:) = 0. IF( JN==1 ) PRCS(:,:,:) = PRCS(:,:,:) * PTSTEP - !$acc loop independent - DO CONCURRENT (JL=1:ISEDIMC) + !$mnh_do_concurrent (JL=1:ISEDIMC) ZRSLOC = PRCS(IC1(JL),IC2(JL),IC3(JL)) ZRTLOC = PRCT(IC1(JL),IC2(JL),IC3(JL)) IF (ZRSLOC > ZRTMIN(2) .AND. ZRTLOC > XRTMIN(2)) THEN @@ -500,7 +504,7 @@ DO JN = 1 , KSPLITR * BR_POW(ZWLBDC,-XDC)*ZCC*ZFSEDC1D * ZRSLOC #endif END IF - END DO + !$mnh_end_do() DO JK = KKTB , KKTE PRCS(:,:,JK) = PRCS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK)) END DO @@ -519,8 +523,7 @@ DO JN = 1 , KSPLITR ! IF( JN==1 ) PRRS(:,:,:) = PRRS(:,:,:) * PTSTEP ZWSED(:,:,:) = 0. -!$acc loop independent - DO CONCURRENT (JL=1:ISEDIMR) + !$mnh_do_concurrent (JL=1:ISEDIMR) ZRSLOC = PRRS(IR1(JL),IR2(JL),IR3(JL)) IF( ZRSLOC > ZRTMIN(3) ) THEN ZRHODREFLOC = PRHODREF(IR1(JL),IR2(JL),IR3(JL)) @@ -533,7 +536,7 @@ DO JN = 1 , KSPLITR BR_POW(ZRHODREFLOC,XEXSEDR-XCEXVT) #endif END IF - END DO + !$mnh_end_do() DO JK = KKTB , KKTE PRRS(:,:,JK) = PRRS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK)) END DO @@ -552,8 +555,7 @@ DO JN = 1 , KSPLITR ! IF( JN==1 ) PRIS(:,:,:) = PRIS(:,:,:) * PTSTEP ZWSED(:,:,:) = 0. - !$acc loop independent - DO CONCURRENT (JL=1:ISEDIMI) + !$mnh_do_concurrent (JL=1:ISEDIMI) ZRSLOC = PRIS(II1(JL),II2(JL),II3(JL)) IF( ZRSLOC > MAX(ZRTMIN(4),1.0E-7 )) THEN ! limitation of the McF&H formula ZRHODREFLOC = PRHODREF(II1(JL),II2(JL),II3(JL)) @@ -569,7 +571,7 @@ DO JN = 1 , KSPLITR BR_LOG(ZRHODREFLOC*ZRSLOC) ), XEXCSEDI) #endif END IF - END DO + !$mnh_end_do() DO JK = KKTB , KKTE PRIS(:,:,JK) = PRIS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK)) END DO @@ -586,8 +588,7 @@ DO JN = 1 , KSPLITR ! IF( JN==1 ) PRSS(:,:,:) = PRSS(:,:,:) * PTSTEP ZWSED(:,:,:) = 0. - !$acc loop independent - DO CONCURRENT (JL=1:ISEDIMS) + !$mnh_do_concurrent (JL=1:ISEDIMS) ZRSLOC = PRSS(IS1(JL),IS2(JL),IS3(JL)) IF( ZRSLOC > ZRTMIN(5) ) THEN ZRHODREFLOC = PRHODREF(IS1(JL),IS2(JL),IS3(JL)) @@ -599,7 +600,7 @@ DO JN = 1 , KSPLITR BR_POW(ZRHODREFLOC,XEXSEDS-XCEXVT) #endif END IF - END DO + !$mnh_end_do() DO JK = KKTB , KKTE PRSS(:,:,JK) = PRSS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK)) END DO @@ -617,8 +618,7 @@ DO JN = 1 , KSPLITR ! ZWSED(:,:,:) = 0. IF( JN==1 ) PRGS(:,:,:) = PRGS(:,:,:) * PTSTEP - !$acc loop independent - DO CONCURRENT (JL=1:ISEDIMG) + !$mnh_do_concurrent (JL=1:ISEDIMG) ZRSLOC = PRGS(IG1(JL),IG2(JL),IG3(JL)) IF( ZRSLOC > ZRTMIN(6) ) THEN ZRHODREFLOC = PRHODREF(IG1(JL),IG2(JL),IG3(JL)) @@ -630,7 +630,7 @@ DO JN = 1 , KSPLITR BR_POW(ZRHODREFLOC,XEXSEDG-XCEXVT) #endif END IF - END DO + !$mnh_end_do() DO JK = KKTB , KKTE PRGS(:,:,JK) = PRGS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK)) END DO @@ -649,8 +649,7 @@ DO JN = 1 , KSPLITR IF ( KRR == 7 ) THEN IF( JN==1 ) PRHS(:,:,:) = PRHS(:,:,:) * PTSTEP ZWSED(:,:,:) = 0. - !$acc loop independent - DO CONCURRENT (JL=1:ISEDIMH) + !$mnh_do_concurrent (JL=1:ISEDIMH) ZRSLOC = PRHS(IH1(JL),IH2(JL),IH3(JL)) IF( ZRSLOC > ZRTMIN(7) ) THEN ZRHODREFLOC = PRHODREF(IH1(JL),IH2(JL),IH3(JL)) @@ -662,7 +661,7 @@ DO JN = 1 , KSPLITR BR_POW(ZRHODREFLOC,XEXSEDH-XCEXVT) #endif END IF - END DO + !$mnh_end_do() DO JK = KKTB , KKTE PRHS(:,:,JK) = PRHS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK)) END DO diff --git a/src/MNH/rain_ice_slow.f90 b/src/MNH/rain_ice_slow.f90 index 690cbda36b5fbe985e99272d99da77b7d18b737f..ff37338ccd6fe5e014242e27a8253a5c31d8859f 100644 --- a/src/MNH/rain_ice_slow.f90 +++ b/src/MNH/rain_ice_slow.f90 @@ -210,9 +210,9 @@ CALL MNH_MEM_GET( zz_diff, SIZE(PLSFACT) ) #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) PDV(:) = 0.211E-4 * (PZT(:)/XTT)**1.94 * (XP00/PPRES(:)) ! D_v #else -DO CONCURRENT ( JL=1:JLU ) +!$mnh_do_concurrent ( JL=1:JLU ) PDV(JL) = 0.211E-4 * BR_POW(PZT(JL)/XTT,1.94) * (XP00/PPRES(JL)) ! D_v -END DO +!$mnh_end_do() #endif ! !* 3.4.1 compute the thermodynamical function A_i(T,P) @@ -224,12 +224,12 @@ END DO + ( XRV*PZT(:) ) / (PDV(:)*PAI(:)) PCJ(:) = XSCFAC * PRHODREF(:)**0.3 / SQRT( 1.718E-5+0.0049E-5*(PZT(:)-XTT) ) #else -DO CONCURRENT ( JL=1:JLU ) +!$mnh_do_concurrent ( JL=1:JLU ) PAI(JL) = BR_EXP( XALPI - XBETAI/PZT(JL) - XGAMI*BR_LOG(PZT(JL) ) ) ! es_i PAI(JL) = BR_P2( XLSTT + (XCPV-XCI)*(PZT(JL)-XTT) ) / (PKA(JL)*XRV*BR_P2(PZT(JL))) & + ( XRV*PZT(JL) ) / (PDV(JL)*PAI(JL)) PCJ(JL) = XSCFAC * BR_POW(PRHODREF(JL),0.3) / BR_POW( 1.718E-5+0.0049E-5*(PZT(JL)-XTT) , 0.5) -END DO +!$mnh_end_do() #endif ! !* 3.4.2 compute the riming-conversion of r_c for r_i production: RCAUTI @@ -261,7 +261,7 @@ END DO ZZW(:) = 0.0 GWORK(:) = (PRST(:)>XRTMIN(5)) .AND. (PRSS(:)>0.0) !$acc loop independent - DO CONCURRENT ( JL=1:JLU ) + !$mnh_do_concurrent ( JL=1:JLU ) IF ( GWORK(JL) ) THEN ZZW(JL) = ( PSSI(JL)/(PRHODREF(JL)*PAI(JL)) ) * & #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) @@ -275,7 +275,7 @@ END DO PRVS(JL) = PRVS(JL) - ZZW(JL) PTHS(JL) = PTHS(JL) + ZZW(JL)*PLSFACT(JL) END IF - END DO + !$mnh_end_do() !$acc end kernels if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'DEPS', & @@ -291,7 +291,7 @@ END DO ZZW(:) = 0.0 GWORK(:) = PRIT(:)>XRTMIN(4) .AND. PRST(:)>XRTMIN(5) .AND. PRIS(:)>0.0 !$acc loop independent - DO CONCURRENT ( JL=1:JLU ) + !$mnh_do_concurrent ( JL=1:JLU ) IF ( GWORK(JL) ) THEN #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZZW(JL) = MIN( PRIS(JL),XFIAGGS * EXP( XCOLEXIS*(PZT(JL)-XTT) ) & @@ -307,7 +307,7 @@ END DO PRSS(JL) = PRSS(JL) + ZZW(JL) PRIS(JL) = PRIS(JL) - ZZW(JL) END IF - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT !$acc end kernels if ( lbudget_ri ) call Budget_store_add( tbudgets(NBUDGET_RI), 'AGGS', & @@ -321,9 +321,9 @@ END DO #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZCRIAUTI(:)=MIN(XCRIAUTI,10**(XACRIAUTI*(PZT(:)-XTT)+XBCRIAUTI)) #else -DO CONCURRENT ( JL=1:JLU ) +!$mnh_do_concurrent ( JL=1:JLU ) ZCRIAUTI(JL)=MIN(XCRIAUTI, BR_POW(10.,XACRIAUTI*(PZT(JL)-XTT)+XBCRIAUTI) ) -END DO +!$mnh_end_do() #endif ZZW(:) = 0.0 GWORK(:) = PRIT(:)>XRTMIN(4) .AND. PRIS(:)>0.0 @@ -354,7 +354,7 @@ END DO !$acc kernels GWORK(:) = PRGT(:)>0.0 !$acc loop independent - DO CONCURRENT ( JL=1:JLU ) + !$mnh_do_concurrent ( JL=1:JLU ) IF ( GWORK(JL) ) THEN #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) PLBDAG(JL) = XLBG*( PRHODREF(JL)*MAX( PRGT(JL),XRTMIN(6) ) )**XLBEXG @@ -364,11 +364,11 @@ END DO ELSE PLBDAG(JL) = 0. END IF - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT ZZW(:) = 0.0 GWORK(:) = PRGT(:)>XRTMIN(6) .AND. PRGS(:)>0.0 !$acc loop independent - DO CONCURRENT ( JL=1:JLU ) + !$mnh_do_concurrent ( JL=1:JLU ) IF ( GWORK(JL) ) THEN ZZW(JL) = ( PSSI(JL)/(PRHODREF(JL)*PAI(JL)) ) * & #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) @@ -382,7 +382,7 @@ END DO PRVS(JL) = PRVS(JL) - ZZW(JL) PTHS(JL) = PTHS(JL) + ZZW(JL)*PLSFACT(JL) END IF - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT !$acc end kernels if ( lbudget_th ) call Budget_store_add( tbudgets(NBUDGET_TH), 'DEPG', & diff --git a/src/MNH/rain_ice_warm.f90 b/src/MNH/rain_ice_warm.f90 index 48ec7a5d07dd5a376f40eccb205e846447495727..2fb7efda00ff93ec60325e894608d7e3bff2846d 100644 --- a/src/MNH/rain_ice_warm.f90 +++ b/src/MNH/rain_ice_warm.f90 @@ -44,6 +44,11 @@ use MODE_MSG USE MODI_BITREP #endif +#if defined(MNH_COMPILER_CCE) && defined(MNH_BITREP_OMP) +!$mnh_undef(LOOP) +!$mnh_undef(OPENACC) +#endif + IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : @@ -202,8 +207,7 @@ zzw(JL) = 0. !$acc kernels !CLoud water and rain are diluted over the grid box GWORK(:) = PRCT(:)>XRTMIN(2) .AND. PRRT(:)>XRTMIN(3) .AND. PRCS(:)>0.0 - !$acc loop independent - DO CONCURRENT ( JL=1:JLU ) + !$mnh_do_concurrent ( JL=1:JLU ) IF ( GWORK(JL) ) THEN ZZW(JL) = MIN( PRCS(JL), XFCACCR * PRCT(JL) & #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) @@ -216,7 +220,7 @@ zzw(JL) = 0. PRCS(JL) = PRCS(JL) - ZZW(JL) PRRS(JL) = PRRS(JL) + ZZW(JL) END IF - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT !$acc end kernels ELSEIF (CSUBG_RC_RR_ACCR=='PRFR') THEN @@ -233,8 +237,7 @@ zzw(JL) = 0. ! => min(PCF, PRF)-PHLC_HCF ZZW(:) = 0. GWORK(:) = PHLC_HRC(:)>XRTMIN(2) .AND. PRRT(:)>XRTMIN(3) .AND. PRCS(:)>0.0 .AND. PHLC_HCF(:)>0 - !$acc loop independent - DO CONCURRENT ( JL=1:JLU ) + !$mnh_do_concurrent ( JL=1:JLU ) IF ( GWORK(JL) ) THEN !Accretion due to rain falling in high cloud content ZZW(JL) = XFCACCR * ( PHLC_HRC(JL)/PHLC_HCF(JL) ) & @@ -247,10 +250,9 @@ zzw(JL) = 0. #endif * PHLC_HCF(JL) END IF - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT GWORK(:) = PHLC_LRC(:)>XRTMIN(2) .AND. PRRT(:)>XRTMIN(3) .AND. PRCS(:)>0.0 .AND. PHLC_LCF(:)>0 - !$acc loop independent - DO CONCURRENT ( JL=1:JLU ) + !$mnh_do_concurrent ( JL=1:JLU ) IF ( GWORK(JL) ) THEN !We add acrretion due to rain falling in low cloud content #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) @@ -268,7 +270,7 @@ zzw(JL) = 0. ZZW(JL)=MIN(PRCS(JL), ZZW(JL)) PRCS(JL) = PRCS(JL) - ZZW(JL) PRRS(JL) = PRRS(JL) + ZZW(JL) - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT !$acc end kernels ELSE @@ -306,8 +308,7 @@ zzw(JL) = 0. END WHERE !$mnh_end_expand_where() #else - !$acc loop independent - DO CONCURRENT ( JL=1:JLU ) + !$mnh_do_concurrent ( JL=1:JLU ) IF ( GWORK(JL) ) THEN #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZZW(JL) = EXP( XALPW - XBETAW/PZT(JL) - XGAMW*LOG(PZT(JL) ) ) ! es_w @@ -332,7 +333,7 @@ zzw(JL) = 0. PRVS(JL) = PRVS(JL) + ZZW(JL) PTHS(JL) = PTHS(JL) - ZZW(JL)*PLVFACT(JL) END IF - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT #endif !$acc end kernels ELSEIF (CSUBG_RR_EVAP=='CLFR' .OR. CSUBG_RR_EVAP=='PRFR') THEN @@ -360,8 +361,7 @@ IF (CSUBG_RR_EVAP=='CLFR') GCSUBG_RR_EVAP=.true. !Ces variables devraient être sorties de rain_ice_slow et on mettrait le calcul de T^u, T^s !et plusieurs versions (comme actuellement, en ciel clair, en ciel nuageux) de PKA, PDV, PCJ dans rain_ice !On utiliserait la bonne version suivant l'option NONE, CLFR... dans l'évaporation et ailleurs - !$acc loop independent - DO CONCURRENT ( JL=1:JLU ) + !$mnh_do_concurrent ( JL=1:JLU ) GWORK(JL) = PRRT(JL)>XRTMIN(3) .AND. ZZW4(JL)>PCF(JL) IF ( GWORK(JL) ) THEN ! outside the cloud (environment) the use of T^u (unsaturated) instead of T @@ -400,7 +400,7 @@ IF (CSUBG_RR_EVAP=='CLFR') GCSUBG_RR_EVAP=.true. PRVS(JL) = PRVS(JL) + ZZW(JL) PTHS(JL) = PTHS(JL) - ZZW(JL)*PLVFACT(JL) END IF - END DO ! CONCURRENT + !$mnh_end_do() ! CONCURRENT !$acc end kernels ELSE diff --git a/src/MNH/rotate_wind.f90 b/src/MNH/rotate_wind.f90 index c08f6ffa45b66c56d2c09bbb10720463e9adc722..f2b752afb8b53300b4df4b108b490b8d928d259f 100644 --- a/src/MNH/rotate_wind.f90 +++ b/src/MNH/rotate_wind.f90 @@ -117,6 +117,11 @@ use mode_mppdb USE MODI_BITREP #endif ! +#if defined(MNH_COMPILER_CCE) && defined(MNH_BITREP_OMP) +!$mnh_undef(LOOP) +!$mnh_undef(OPENACC) +#endif +! IMPLICIT NONE ! ! @@ -236,7 +241,7 @@ JLOC(:,:)=NINT(SIGN(1.,-PSINSLOPE(:,:))) ! interpolation in x direction ! !$acc_nv loop independent collapse(2) -DO CONCURRENT(JI=IIB:IIE,JJ=1:IJU) +!$mnh_do_concurrent(JI=IIB:IIE,JJ=1:IJU) ZCOEFF(JI,JJ) = & (0.5*PDXX(JI,JJ,IKB) + 0.5*PDZZ(JI,JJ,IKB)*PDIRCOSXW(JI,JJ) ) & * 2. / (PDXX(JI,JJ,IKB)+PDXX(JI+1,JJ,IKB)) @@ -251,12 +256,12 @@ DO CONCURRENT(JI=IIB:IIE,JJ=1:IJU) ZWINT(JI,JJ) = ZCOEFM(JI,JJ) * (PW(JI,JJ,IKB+1)+ZWGROUND(JI,JJ)) * 0.5 & + (1.-ZCOEFM(JI,JJ)) & *(PW(JI+ILOC(JI,JJ),JJ,IKB+1)+ZWGROUND(JI+ILOC(JI,JJ),JJ)) * 0.5 -END DO +!$mnh_end_do() ! ! interpolation in y direction ! !$acc_nv loop independent collapse(2) -DO CONCURRENT(JI=IIB:IIE,JJ=IJB:IJE) +!$mnh_do_concurrent(JI=IIB:IIE,JJ=IJB:IJE) ZCOEFF(JI,JJ) = & (0.5*PDYY(JI,JJ,IKB) + 0.5*PDZZ(JI,JJ,IKB)*PDIRCOSYW(JI,JJ) ) & * 2. / (PDYY(JI,JJ,IKB)+PDYY(JI+1,JJ,IKB)) @@ -269,14 +274,14 @@ DO CONCURRENT(JI=IIB:IIE,JJ=IJB:IJE) (1.-ZCOEFM(JI,JJ)) * ZUINT(JI,JJ+JLOC(JI,JJ)) ZWFIN(JI,JJ) = ZCOEFM(JI,JJ) * ZWINT(JI,JJ) + & (1.-ZCOEFM(JI,JJ)) * ZWINT(JI,JJ+JLOC(JI,JJ)) -END DO +!$mnh_end_do() ! !* 3. ROTATE THE WIND ! --------------- ! ! !$acc_nv loop independent collapse(2) -DO CONCURRENT(JI=IIB:IIE,JJ=IJB:IJE) +!$mnh_do_concurrent(JI=IIB:IIE,JJ=IJB:IJE) PUSLOPE(JI,JJ) = PCOSSLOPE(JI,JJ) * PDIRCOSZW(JI,JJ) * ZUFIN(JI,JJ) + & PSINSLOPE(JI,JJ) * PDIRCOSZW(JI,JJ) * ZVFIN(JI,JJ) + & #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) @@ -288,7 +293,7 @@ DO CONCURRENT(JI=IIB:IIE,JJ=IJB:IJE) PVSLOPE(JI,JJ) =-PSINSLOPE(JI,JJ) * ZUFIN(JI,JJ) + & PCOSSLOPE(JI,JJ) * ZVFIN(JI,JJ) ! -END DO +!$mnh_end_do() !$acc end kernels !$acc end data diff --git a/src/MNH/sources_neg_correct.f90 b/src/MNH/sources_neg_correct.f90 index f08c426fa5cbf672b38da78df30c33a1e0abb2e3..551de61db267d1c06d955d9d2f699d2fd00f2c81 100644 --- a/src/MNH/sources_neg_correct.f90 +++ b/src/MNH/sources_neg_correct.f90 @@ -304,14 +304,14 @@ CLOUD: select case ( hcloud ) end if !$acc kernels do jr = 4, jrmax - do concurrent( ji = 1 : jiu, jj = 1 : jju, jk = 1 : jku ) + !$mnh_do_concurrent( ji = 1 : jiu, jj = 1 : jju, jk = 1 : jku ) if ( prrs(ji, jj, jk, jr) < 0. ) then prrs(ji, jj, jk, 1) = prrs(ji, jj, jk, 1) + prrs(ji, jj, jk, jr) prths(ji, jj, jk) = prths(ji, jj, jk) - prrs(ji, jj, jk, jr) * zls(ji, jj, jk) / & ( zcph(ji, jj, jk) * zexn(ji, jj, jk) ) prrs(ji, jj, jk, jr) = 0. end if - end do + !$mnh_end_do() end do !$acc end kernels ! @@ -323,32 +323,32 @@ CLOUD: select case ( hcloud ) end if !$acc kernels do jr = 2, jrmax - do concurrent( ji = 1 : jiu, jj = 1 : jju, jk = 1 : jku ) + !$mnh_do_concurrent( ji = 1 : jiu, jj = 1 : jju, jk = 1 : jku ) if ( prrs(ji, jj, jk, jr) < 0. ) then prrs(ji, jj, jk, 1) = prrs(ji, jj, jk, 1) + prrs(ji, jj, jk, jr) prths(ji, jj, jk) = prths(ji, jj, jk) - prrs(ji, jj, jk, jr) * zlv(ji, jj, jk) / & ( zcph(ji, jj, jk) * zexn(ji, jj, jk) ) prrs(ji, jj, jk, jr) = 0. end if - end do + !$mnh_end_do() end do ! ! if rc or ri are positive, we can correct negative rv ! cloud - do concurrent( ji = 1 : jiu, jj = 1 : jju, jk = 1 : jku ) + !$mnh_do_concurrent( ji = 1 : jiu, jj = 1 : jju, jk = 1 : jku ) if ( prrs(ji, jj, jk, 1) < 0. .and. prrs(ji, jj, jk, 2) > 0. ) then prrs(ji, jj, jk, 1) = prrs(ji, jj, jk, 1) + prrs(ji, jj, jk, 2) prths(ji, jj, jk) = prths(ji, jj, jk) - prrs(ji, jj, jk, 2) * zlv(ji, jj, jk) / & ( zcph(ji, jj, jk) * zexn(ji, jj, jk) ) prrs(ji, jj, jk, 2) = 0. end if - end do + !$mnh_end_do() ! ice if ( krr > 3 ) then #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - do concurrent( ji = 1 : jiu, jj = 1 : jju, jk = 1 : jku ) + !$mnh_do_concurrent( ji = 1 : jiu, jj = 1 : jju, jk = 1 : jku ) if ( prrs(ji, jj, jk, 1) < 0. .and. prrs(ji, jj, jk, 4) > 0. ) then zcor(ji, jj, jk) = Min( -prrs(ji, jj, jk, 1), prrs(ji, jj, jk, 4) ) prrs(ji, jj, jk, 1) = prrs(ji, jj, jk, 1) + zcor(ji, jj, jk) @@ -356,7 +356,7 @@ CLOUD: select case ( hcloud ) ( zcph(ji, jj, jk) * zexn(ji, jj, jk) ) prrs(ji, jj, jk, 4) = prrs(ji, jj, jk, 4) - zcor(ji, jj, jk) end if - end do + !$mnh_end_do() end if !$acc end kernels ! diff --git a/src/MNH/tke_eps_sources.f90 b/src/MNH/tke_eps_sources.f90 index 0636775b90ea108da8c655e84deaa8faa1166e6f..68b912f64e5665f0e682bbca810536095f719bb3 100644 --- a/src/MNH/tke_eps_sources.f90 +++ b/src/MNH/tke_eps_sources.f90 @@ -207,6 +207,11 @@ USE MODI_SHUMAN_DEVICE #endif USE MODI_TRIDIAG_TKE ! +#if defined(MNH_COMPILER_CCE) && defined(MNH_BITREP_OMP) +!$mnh_undef(LOOP) +!$mnh_undef(OPENACC) +#endif +! IMPLICIT NONE ! ! @@ -350,9 +355,9 @@ ZKEFF(:,:,:) = PLM(:,:,:) * SQRT(PTKEM(:,:,:)) #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZKEFF(JI,JJ,JK) = PLM(JI,JJ,JK) * BR_POW(PTKEM(JI,JJ,JK),0.5) -END DO +!$mnh_end_do() #endif ! !$acc end kernels @@ -391,18 +396,18 @@ ZFLX(:,:,:) = XCED * SQRT(PTKEM(:,:,:)) / PLEPS(:,:,:) #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZFLX(JI,JJ,JK) = XCED * BR_POW(PTKEM(JI,JJ,JK),0.5) / PLEPS(JI,JJ,JK) -END DO +!$mnh_end_do() #endif #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZSOURCE(JI,JJ,JK) = ( PRTKES(JI,JJ,JK) + PRTKESM(JI,JJ,JK) ) / PRHODJ(JI,JJ,JK) & - PTKEM(JI,JJ,JK) / PTSTEP & + PDP(JI,JJ,JK) + PTP(JI,JJ,JK) + PTR(JI,JJ,JK) - PEXPL * ZFLX(JI,JJ,JK) * PTKEM(JI,JJ,JK) -END DO !CONCURRENT +!$mnh_end_do() !CONCURRENT !$acc end kernels ! !* 2.2 implicit vertical TKE transport @@ -428,9 +433,9 @@ ZA(:,:,:) = - PTSTEP * XCET * ZTMP1_DEVICE(:,:,:) * ZTMP2_DEVICE(:,:,:) / PD !$mnh_end_expand_array() #else !$acc_nv loop independent collapse(3) -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZA(JI,JJ,JK) = - PTSTEP * XCET * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK) / BR_P2(PDZZ(JI,JJ,JK)) -END DO !CONCURRENT +!$mnh_end_do() !CONCURRENT #endif !$acc end kernels #endif @@ -446,9 +451,9 @@ CALL GET_HALO(ZRES) #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP3_DEVICE(JI,JJ,JK) = PTSTEP*ZFLX(JI,JJ,JK) -END DO !CONCURRENT +!$mnh_end_do() !CONCURRENT !$acc end kernels CALL TRIDIAG_TKE(KKA,KKU,KKL,PTKEM,ZA,PTSTEP,PEXPL,PIMPL,PRHODJ,& & ZSOURCE,ZTMP3_DEVICE,ZRES) @@ -556,9 +561,9 @@ if (lbudget_tke) then end if !$acc kernels -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) PRTKES(JI,JJ,JK) = ZRES(JI,JJ,JK) * PRHODJ(JI,JJ,JK) / PTSTEP - PRTKESM(JI,JJ,JK) -ENDDO +!$mnh_end_do() !$acc end kernels ! ! stores the whole turbulent transport @@ -576,10 +581,10 @@ if (lbudget_tke) call Budget_store_end( tbudgets(NBUDGET_TKE), 'TR', prtkes(:, : PRTHLS(:,:,:) = PRTHLS(:,:,:) + XCED * SQRT(PTKEM(:,:,:)) / PLEPS(:,:,:) * & (PEXPL*PTKEM(:,:,:) + PIMPL*ZRES(:,:,:)) * PRHODJ(:,:,:) * PCOEF_DISS(:,:,:) #else -DO CONCURRENT (JI=1:JIU, JJ=1:JJU ,JK=1:JKU) +!$mnh_do_concurrent (JI=1:JIU, JJ=1:JJU ,JK=1:JKU) PRTHLS(JI,JJ,JK) = PRTHLS(JI,JJ,JK) + XCED * BR_POW(PTKEM(JI,JJ,JK),0.5) / PLEPS(JI,JJ,JK) * & (PEXPL*PTKEM(JI,JJ,JK) + PIMPL*ZRES(JI,JJ,JK)) * PRHODJ(JI,JJ,JK) * PCOEF_DISS(JI,JJ,JK) -ENDDO +!$mnh_end_do() #endif !$acc end kernels @@ -594,9 +599,9 @@ if (lbudget_th) call Budget_store_end( tbudgets(NBUDGET_TH), 'DISSH', prthls(:, #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) PDISS(:,:,:) = -XCED * (PTKEM(:,:,:)**1.5) / PLEPS(:,:,:) #else -DO CONCURRENT (JI=1:JIU, JJ=1:JJU, JK=1:JKU) +!$mnh_do_concurrent (JI=1:JIU, JJ=1:JJU, JK=1:JKU) PDISS(JI,JJ,JK) = -XCED * BR_POW(PTKEM(JI,JJ,JK),1.5) / PLEPS(JI,JJ,JK) -ENDDO +!$mnh_end_do() #endif !$acc end kernels ! diff --git a/src/MNH/tridiag_thermo.f90 b/src/MNH/tridiag_thermo.f90 index 871581a0642cda548e118707ec8fdf0c861fb994..2855dae8e11ec1888a51fe8493fd6eca941d921b 100644 --- a/src/MNH/tridiag_thermo.f90 +++ b/src/MNH/tridiag_thermo.f90 @@ -263,9 +263,9 @@ CALL MZM_DEVICE(PRHODJ,ZMZM_RHODJ) ZRHODJ_DFDDTDZ_O_DZ2(:,:,:) = ZMZM_RHODJ(:,:,:)*PDFDDTDZ(:,:,:)/PDZZ(:,:,:)**2 #else !$acc_nv loop independent collapse(3) -DO CONCURRENT (JK=1:JKU,JJ=1:JJU,JI=1:JIU) +!$mnh_do_concurrent (JK=1:JKU,JJ=1:JJU,JI=1:JIU) ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,JK) = ZMZM_RHODJ(JI,JJ,JK)*PDFDDTDZ(JI,JJ,JK)/BR_P2(PDZZ(JI,JJ,JK)) -END DO !CONCURRENT +!$mnh_end_do() !CONCURRENT #endif !$acc end kernels ! @@ -282,23 +282,17 @@ ZY=0. ! --------------------------- ! !$acc kernels ! async -#ifdef MNH_COMPILER_NVHPC -!$acc loop independent collapse(2) -#endif -DO CONCURRENT (JJ=1:JJU,JI=1:JIU) +!$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU) ZY(JI,JJ,IKB) = PRHODJ(JI,JJ,IKB)*PVARM(JI,JJ,IKB)/PTSTEP & - ZMZM_RHODJ(JI,JJ,IKB+KKL) * PF(JI,JJ,IKB+KKL)/PDZZ(JI,JJ,IKB+KKL) & + ZMZM_RHODJ(JI,JJ,IKB ) * PF(JI,JJ,IKB )/PDZZ(JI,JJ,IKB ) & + ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,IKB+KKL) * PIMPL * PVARM(JI,JJ,IKB+KKL) & - ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,IKB+KKL) * PIMPL * PVARM(JI,JJ,IKB ) -END DO !CONCURRENT +!$mnh_end_do() !CONCURRENT !$acc end kernels ! !$acc kernels ! async -#ifdef MNH_COMPILER_NVHPC -!$acc loop independent collapse(3) -#endif -DO CONCURRENT (JK=IKTB+1:IKTE-1,JJ=1:JJU,JI=1:JIU) +!$mnh_do_concurrent (JK=IKTB+1:IKTE-1,JJ=1:JJU,JI=1:JIU) ZY(JI,JJ,JK) = PRHODJ(JI,JJ,JK)*PVARM(JI,JJ,JK)/PTSTEP & - ZMZM_RHODJ(JI,JJ,JK+KKL) * PF(JI,JJ,JK+KKL)/PDZZ(JI,JJ,JK+KKL) & + ZMZM_RHODJ(JI,JJ,JK ) * PF(JI,JJ,JK )/PDZZ(JI,JJ,JK ) & @@ -306,20 +300,17 @@ DO CONCURRENT (JK=IKTB+1:IKTE-1,JJ=1:JJU,JI=1:JIU) - ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,JK+KKL) * PIMPL * PVARM(JI,JJ,JK ) & - ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,JK ) * PIMPL * PVARM(JI,JJ,JK ) & + ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,JK ) * PIMPL * PVARM(JI,JJ,JK-KKL) -END DO !CONCURRENT +!$mnh_end_do() !CONCURRENT !$acc end kernels ! !$acc kernels ! async -#ifdef MNH_COMPILER_NVHPC -!$acc loop independent collapse(2) -#endif -DO CONCURRENT (JJ=1:JJU,JI=1:JIU) +!$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU) ZY(JI,JJ,IKE) = PRHODJ(JI,JJ,IKE)*PVARM(JI,JJ,IKE)/PTSTEP & - ZMZM_RHODJ(JI,JJ,IKE+KKL) * PF(JI,JJ,IKE+KKL)/PDZZ(JI,JJ,IKE+KKL) & + ZMZM_RHODJ(JI,JJ,IKE ) * PF(JI,JJ,IKE )/PDZZ(JI,JJ,IKE ) & - ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,IKE ) * PIMPL * PVARM(JI,JJ,IKE ) & + ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,IKE ) * PIMPL * PVARM(JI,JJ,IKE-KKL) -END DO !CONCURRENT +!$mnh_end_do() !CONCURRENT !$acc end kernels ! ! acc wait @@ -333,46 +324,34 @@ IF ( PIMPL > 1.E-10 ) THEN ! -------------- ! !$acc kernels ! async -#ifdef MNH_COMPILER_NVHPC -!$acc loop independent collapse(2) -#endif -DO CONCURRENT (JJ=1:JJU,JI=1:JIU) +!$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU) ZB(JI,JJ,IKB) = PRHODJ(JI,JJ,IKB)/PTSTEP & - ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,IKB+KKL) * PIMPL -END DO !CONCURRENT +!$mnh_end_do() !CONCURRENT !$acc end kernels ! !$acc kernels ! async -#ifdef MNH_COMPILER_NVHPC -!$acc loop independent collapse(2) -#endif -DO CONCURRENT (JJ=1:JJU,JI=1:JIU) +!$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU) ZC(JI,JJ,IKB) = ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,IKB+KKL) * PIMPL -END DO !CONCURRENT +!$mnh_end_do() !CONCURRENT !$acc end kernels ! !$acc kernels ! async -#ifdef MNH_COMPILER_NVHPC -!$acc loop independent collapse(3) -#endif -DO CONCURRENT (JK=IKTB+1:IKTE-1,JJ=1:JJU,JI=1:JIU) +!$mnh_do_concurrent (JK=IKTB+1:IKTE-1,JJ=1:JJU,JI=1:JIU) ZA(JI,JJ,JK) = ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,JK) * PIMPL ZB(JI,JJ,JK) = PRHODJ(JI,JJ,JK)/PTSTEP & - ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,JK+KKL) * PIMPL & - ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,JK) * PIMPL ZC(JI,JJ,JK) = ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,JK+KKL) * PIMPL -END DO !CONCURRENT +!$mnh_end_do() !CONCURRENT !$acc end kernels ! !$acc kernels ! async -#ifdef MNH_COMPILER_NVHPC -!$acc loop independent collapse(2) -#endif -DO CONCURRENT (JJ=1:JJU,JI=1:JIU) +!$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU) ZA(JI,JJ,IKE) = ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,IKE ) * PIMPL ZB(JI,JJ,IKE) = PRHODJ(JI,JJ,IKE)/PTSTEP & - ZRHODJ_DFDDTDZ_O_DZ2(JI,JJ,IKE ) * PIMPL -END DO !CONCURRENT +!$mnh_end_do() !CONCURRENT !$acc end kernels ! ! acc wait @@ -382,13 +361,10 @@ END DO !CONCURRENT ! -------- ! !$acc kernels -#ifdef MNH_COMPILER_NVHPC -!$acc loop independent collapse(2) -#endif -DO CONCURRENT (JJ=1:JJU,JI=1:JIU) +!$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU) ZBET(JI,JJ) = ZB(JI,JJ,IKB) ! bet = b(ikb) PVARP(JI,JJ,IKB) = ZY(JI,JJ,IKB) / ZBET(JI,JJ) -END DO !CONCURRENT +!$mnh_end_do() !CONCURRENT !$acc end kernels ! !$acc parallel @@ -397,32 +373,27 @@ DO JK = IKB+KKL,IKE-KKL,KKL #ifdef MNH_COMPILER_NVHPC ! gang+vector needed or parallisation vector only !$acc loop independent gang, vector collapse(2) -#else - !$acc loop independent #endif - DO CONCURRENT (JJ=1:JJU,JI=1:JIU) + !$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU) ZGAM(JI,JJ,JK) = ZC(JI,JJ,JK-KKL) / ZBET(JI,JJ) ! gam(k) = c(k-1) / bet ZBET(JI,JJ) = ZB(JI,JJ,JK) - ZA(JI,JJ,JK) * ZGAM(JI,JJ,JK) ! bet = b(k) - a(k)* gam(k) PVARP(JI,JJ,JK)= ( ZY(JI,JJ,JK) - ZA(JI,JJ,JK) * PVARP(JI,JJ,JK-KKL) ) / ZBET(JI,JJ) ! res(k) = (y(k) -a(k)*res(k-1))/ bet - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT END DO !$acc end parallel !$acc kernels ! special treatment for the last level -#ifdef MNH_COMPILER_NVHPC -!$acc loop independent collapse(2) -#endif -DO CONCURRENT (JJ=1:JJU,JI=1:JIU) +!$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU) ZGAM(JI,JJ,IKE) = ZC(JI,JJ,IKE-KKL) / ZBET(JI,JJ) ! gam(k) = c(k-1) / bet ZBET(JI,JJ) = ZB(JI,JJ,IKE) - ZA(JI,JJ,IKE) * ZGAM(JI,JJ,IKE) ! bet = b(k) - a(k)* gam(k) PVARP(JI,JJ,IKE)= ( ZY(JI,JJ,IKE) - ZA(JI,JJ,IKE) * PVARP(JI,JJ,IKE-KKL) ) / ZBET(JI,JJ) ! res(k) = (y(k) -a(k)*res(k-1))/ bet -END DO !CONCURRENT +!$mnh_end_do() !CONCURRENT !$acc end kernels ! !* 3.3 going down @@ -434,24 +405,19 @@ DO JK = IKE-KKL,IKB,-1*KKL #ifdef MNH_COMPILER_NVHPC ! gang+vector needed or parallisation vector only !$acc loop independent gang, vector collapse(2) -#else - !$acc loop independent #endif - DO CONCURRENT (JJ=1:JJU,JI=1:JIU) + !$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU) PVARP(JI,JJ,JK) = PVARP(JI,JJ,JK) - ZGAM(JI,JJ,JK+KKL) * PVARP(JI,JJ,JK+KKL) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT END DO !$acc end parallel ! ELSE ! !$acc kernels -#ifdef MNH_COMPILER_NVHPC -!$acc loop independent collapse(3) -#endif -DO CONCURRENT (JK=IKTB:IKTE,JJ=1:JJU,JI=1:JIU) +!$mnh_do_concurrent (JK=IKTB:IKTE,JJ=1:JJU,JI=1:JIU) PVARP(JI,JJ,JK) = ZY(JI,JJ,JK) * PTSTEP / PRHODJ(JI,JJ,JK) -END DO !CONCURRENT +!$mnh_end_do() !CONCURRENT !$acc end kernels ! END IF @@ -461,13 +427,10 @@ END IF ! ---------------------------------------- ! !$acc kernels -#ifdef MNH_COMPILER_NVHPC -!$acc loop independent collapse(2) -#endif -DO CONCURRENT (JJ=1:JJU,JI=1:JIU) +!$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU) PVARP(JI,JJ,KKA)=PVARP(JI,JJ,IKB) PVARP(JI,JJ,KKU)=PVARP(JI,JJ,IKE) -END DO !CONCURRENT +!$mnh_end_do() !CONCURRENT !$acc end kernels if ( mppdb_initialized ) then diff --git a/src/MNH/tridiag_tke.f90 b/src/MNH/tridiag_tke.f90 index 89840fb59c15629d93b8d70dc27acb5ed3473947..ba836e09c7b7f6dfe1fcbbc3139565974ddc196e 100644 --- a/src/MNH/tridiag_tke.f90 +++ b/src/MNH/tridiag_tke.f90 @@ -221,42 +221,31 @@ IKE=KKU-JPVEXT_TURB*KKL !$acc kernels ! ! -#ifdef MNH_COMPILER_NVHPC -!$acc loop independent collapse(2) -#endif -DO CONCURRENT (JJ=1:JJU,JI=1:JIU) +!$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU) ZY(JI,JJ,IKB) = PVARM(JI,JJ,IKB) + PTSTEP*PSOURCE(JI,JJ,IKB) - & PEXPL / PRHODJ(JI,JJ,IKB) * PA(JI,JJ,IKB+KKL) * (PVARM(JI,JJ,IKB+KKL) - PVARM(JI,JJ,IKB)) -END DO !CONCURRENT +!$mnh_end_do() !CONCURRENT !$acc end kernels ! !$acc parallel !$acc loop seq DO JK=IKTB+1,IKTE-1 -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(2) -#else - !$acc loop independent -#endif - DO CONCURRENT (JJ=1:JJU,JI=1:JIU) + !$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU) ZY(JI,JJ,JK)= PVARM(JI,JJ,JK) + PTSTEP*PSOURCE(JI,JJ,JK) - & PEXPL / PRHODJ(JI,JJ,JK) * & ( PVARM(JI,JJ,JK-KKL)*PA(JI,JJ,JK) & -PVARM(JI,JJ,JK)*(PA(JI,JJ,JK)+PA(JI,JJ,JK+KKL)) & +PVARM(JI,JJ,JK+KKL)*PA(JI,JJ,JK+KKL) & ) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT END DO !$acc end parallel ! !$acc kernels -#ifdef MNH_COMPILER_NVHPC -!$acc loop independent collapse(2) -#endif -DO CONCURRENT (JJ=1:JJU,JI=1:JIU) +!$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU) ZY(JI,JJ,IKE)= PVARM(JI,JJ,IKE) + PTSTEP*PSOURCE(JI,JJ,IKE) + & PEXPL / PRHODJ(JI,JJ,IKE) * PA(JI,JJ,IKE) * (PVARM(JI,JJ,IKE)-PVARM(JI,JJ,IKE-KKL)) -END DO !CONCURRENT +!$mnh_end_do() !CONCURRENT !$acc end kernels ! ! @@ -268,14 +257,11 @@ IF ( PIMPL > 1.E-10 ) THEN ! ! going up ! -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(2) -#endif - DO CONCURRENT (JJ=1:JJU,JI=1:JIU) + !$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU) ZBET(JI,JJ) = 1. + PIMPL * (PDIAG(JI,JJ,IKB)-PA(JI,JJ,IKB+KKL) / PRHODJ(JI,JJ,IKB)) ! bet = b(ikb) PVARP(JI,JJ,IKB) = ZY(JI,JJ,IKB) / ZBET(JI,JJ) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT ! !$acc end kernels !$acc parallel @@ -283,10 +269,8 @@ IF ( PIMPL > 1.E-10 ) THEN DO JK = IKB+KKL,IKE-KKL,KKL #ifdef MNH_COMPILER_NVHPC !$acc loop gang, vector collapse(2) independent -#else - !$acc loop independent #endif - DO CONCURRENT (JJ=1:JJU,JI=1:JIU) + !$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU) ZGAM(JI,JJ,JK) = PIMPL * PA(JI,JJ,JK) / PRHODJ(JI,JJ,JK-KKL) / ZBET(JI,JJ) ! gam(k) = c(k-1) / bet ZBET(JI,JJ) = 1. + PIMPL * ( PDIAG(JI,JJ,JK) - & @@ -298,15 +282,12 @@ IF ( PIMPL > 1.E-10 ) THEN * PVARP(JI,JJ,JK-KKL) & ) / ZBET(JI,JJ) ! res(k) = (y(k) -a(k)*res(k-1))/ bet - END DO + !$mnh_end_do() END DO !$acc end parallel !$acc kernels ! special treatment for the last level -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(2) -#endif - DO CONCURRENT (JJ=1:JJU,JI=1:JIU) + !$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU) ZGAM(JI,JJ,IKE) = PIMPL * PA(JI,JJ,IKE) / PRHODJ(JI,JJ,IKE-KKL) / ZBET(JI,JJ) ! gam(k) = c(k-1) / bet ZBET(JI,JJ) = 1. + PIMPL * ( PDIAG(JI,JJ,IKE) - & @@ -317,7 +298,7 @@ IF ( PIMPL > 1.E-10 ) THEN * PVARP(JI,JJ,IKE-KKL) & ) / ZBET(JI,JJ) ! res(k) = (y(k) -a(k)*res(k-1))/ bet - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels ! ! going down @@ -325,26 +306,18 @@ IF ( PIMPL > 1.E-10 ) THEN !$acc parallel !$acc loop seq DO JK = IKE-KKL,IKB,-1*KKL -#ifdef MNH_COMPILER_NVHPC - !$acc loop gang, vector collapse(2) -#else - !$acc loop independent -#endif - DO CONCURRENT (JJ=1:JJU,JI=1:JIU) + !$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU) PVARP(JI,JJ,JK) = PVARP(JI,JJ,JK) - ZGAM(JI,JJ,JK+KKL) * PVARP(JI,JJ,JK+KKL) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT END DO !$acc end parallel ! ELSE ! !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(2) -#endif - DO CONCURRENT (JJ=1:JJU,JI=1:JIU) + !$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU) PVARP(JI,JJ,IKTB:IKTE) = ZY(JI,JJ,IKTB:IKTE) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT ! !$acc end kernels END IF @@ -354,13 +327,10 @@ END IF ! ---------------------------------------- ! !$acc kernels -#ifdef MNH_COMPILER_NVHPC -!$acc loop independent collapse(2) -#endif -DO CONCURRENT (JJ=1:JJU,JI=1:JIU) +!$mnh_do_concurrent (JJ=1:JJU,JI=1:JIU) PVARP(JI,JJ,KKA)=PVARP(JI,JJ,IKB) PVARP(JI,JJ,KKU)=PVARP(JI,JJ,IKE) -END DO !CONCURRENT +!$mnh_end_do() !CONCURRENT !$acc end kernels if ( mppdb_initialized ) then diff --git a/src/MNH/turb.f90 b/src/MNH/turb.f90 index abfde1c07e497aa2ca8f533e93754fe493cf832f..9b44aed1ece0d63f0f4f6e11afcc01dcdbb063c0 100644 --- a/src/MNH/turb.f90 +++ b/src/MNH/turb.f90 @@ -761,9 +761,9 @@ ELSE #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZEXN(:,:,:) = (PPABST(:,:,:)/XP00) ** (XRD/XCPD) #else -DO CONCURRENT(JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent(JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZEXN(JI,JJ,JK) = BR_POW(PPABST(JI,JJ,JK)/XP00,XRD/XCPD) -END DO +!$mnh_end_do() #endif END IF ! @@ -812,11 +812,11 @@ IF (KRRL >=1) THEN ZLSOCPEXNM,ZAMOIST_ICE,ZATHETA_ICE) ! !$acc kernels present_cr( zamoist, zatheta, zlocpexnm, zlvocpexnm, zlsocpexnm, zamoist_ice, zatheta_ice ) - DO CONCURRENT(JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent(JI=1:JIU,JJ=1:JJU,JK=1:JKU) IF (PRT(JI,JJ,JK,2)+PRT(JI,JJ,JK,4)>0.0) THEN ZFRAC_ICE(JI,JJ,JK) = PRT(JI,JJ,JK,4) / ( PRT(JI,JJ,JK,2)+PRT(JI,JJ,JK,4) ) END IF - END DO + !$mnh_end_do() ! ZLOCPEXNM(:,:,:) = (1.0-ZFRAC_ICE(:,:,:))*ZLVOCPEXNM(:,:,:) & +ZFRAC_ICE(:,:,:) *ZLSOCPEXNM(:,:,:) @@ -878,7 +878,7 @@ END IF ! loop end on KRRL >= 1 IF ( KRRL >= 1 ) THEN !$acc kernels present_cr( zlocpexnm ) IF ( KRRI >= 1 ) THEN - DO CONCURRENT (JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent (JI=1:JIU,JJ=1:JJU,JK=1:JKU) ! Rnp at t PRT(JI,JJ,JK,1) = PRT(JI,JJ,JK,1) + PRT(JI,JJ,JK,2) + PRT(JI,JJ,JK,4) PRRS(JI,JJ,JK,1) = PRRS(JI,JJ,JK,1) + PRRS(JI,JJ,JK,2) + PRRS(JI,JJ,JK,4) @@ -887,16 +887,16 @@ IF ( KRRL >= 1 ) THEN - ZLSOCPEXNM(JI,JJ,JK) * PRT(JI,JJ,JK,4) PRTHLS(JI,JJ,JK) = PRTHLS(JI,JJ,JK) - ZLVOCPEXNM(JI,JJ,JK) * PRRS(JI,JJ,JK,2) & - ZLSOCPEXNM(JI,JJ,JK) * PRRS(JI,JJ,JK,4) - ENDDO + !$mnh_end_do() ELSE - DO CONCURRENT (JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent (JI=1:JIU,JJ=1:JJU,JK=1:JKU) ! Rnp at t PRT(JI,JJ,JK,1) = PRT(JI,JJ,JK,1) + PRT(JI,JJ,JK,2) PRRS(JI,JJ,JK,1) = PRRS(JI,JJ,JK,1) + PRRS(JI,JJ,JK,2) ! Theta_l at t PTHLT(JI,JJ,JK) = PTHLT(JI,JJ,JK) - ZLOCPEXNM(JI,JJ,JK) * PRT(JI,JJ,JK,2) PRTHLS(JI,JJ,JK) = PRTHLS(JI,JJ,JK) - ZLOCPEXNM(JI,JJ,JK) * PRRS(JI,JJ,JK,2) - ENDDO + !$mnh_end_do() END IF !$acc end kernels END IF @@ -1085,10 +1085,10 @@ ENDIF (XMNH_TINY + ZUSLOPE(:,:)**2 + ZVSLOPE(:,:)**2 ) ) #else !$acc_nv loop independent collapse(2) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU ) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU ) ZCDUEFF(JI,JJ) =-SQRT ( (BR_P2(PSFU(JI,JJ)) + BR_P2(PSFV(JI,JJ))) / & (XMNH_TINY + BR_P2(ZUSLOPE(JI,JJ)) + BR_P2(ZVSLOPE(JI,JJ)) ) ) - END DO + !$mnh_end_do() #endif !$acc end kernels ! @@ -1870,9 +1870,9 @@ CALL MNH_MEM_GET( zdrvsatdt, size( pexn, 1 ), size( pexn, 2 ), size( pexn, 3 ) ) #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZRVSAT(:,:,:) = EXP( PALP - PBETA/PT(:,:,:) - PGAM*ALOG( PT(:,:,:) ) ) #else - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZRVSAT(JI,JJ,JK) = BR_EXP( PALP - PBETA/PT(JI,JJ,JK) - PGAM*BR_LOG( PT(JI,JJ,JK) ) ) - END DO + !$mnh_end_do() #endif !$acc end kernels !$acc kernels present_cr(ZRVSAT,ZDRVSATDT) @@ -1909,7 +1909,7 @@ CALL MNH_MEM_GET( zdrvsatdt, size( pexn, 1 ), size( pexn, 2 ), size( pexn, 3 ) ) #else !$acc kernels !$acc_nv loop independent collapse(3) -DO CONCURRENT(JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent(JI=1:JIU,JJ=1:JJU,JK=1:JKU) PATHETA(JI,JJ,JK)= PAMOIST(JI,JJ,JK) * PEXN(JI,JJ,JK) * & ( ( ZRVSAT(JI,JJ,JK) - PRT(JI,JJ,JK,1) ) * PLOCPEXN(JI,JJ,JK) / & ( 1. + ZDRVSATDT(JI,JJ,JK) * PLOCPEXN(JI,JJ,JK) ) * & @@ -1921,7 +1921,7 @@ DO CONCURRENT(JI=1:JIU,JJ=1:JJU,JK=1:JKU) ) & - ZDRVSATDT(JI,JJ,JK) & ) -ENDDO +!$mnh_end_do() !$acc end kernels #endif !* 1.7 Lv/Cph/Exner at t-1 @@ -1929,9 +1929,9 @@ ENDDO !!$acc kernels present(PLOCPEXN) !$acc kernels !$acc_nv loop independent collapse(3) -DO CONCURRENT(JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent(JI=1:JIU,JJ=1:JJU,JK=1:JKU) PLOCPEXN(JI,JJ,JK) = PLOCPEXN(JI,JJ,JK) / PEXN(JI,JJ,JK) -END DO +!$mnh_end_do() !$acc end kernels if ( mppdb_initialized ) then @@ -2211,6 +2211,7 @@ REAL :: ZD ! distance to the surface real, dimension(:,:,:), pointer , contiguous :: ztmp1_device, ztmp2_device #endif ! +LOGICAL :: GZD !------------------------------------------------------------------------------- JIU=SIZE(pdxx,1) JJU=SIZE(pdxx,2) @@ -2271,9 +2272,9 @@ IF (ODZ) THEN !$acc end kernels #else !$acc kernels -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) PLM(JI,JJ,JK) = BR_POW( PLM(JI,JJ,JK) * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK), 1./3. ) -ENDDO +!$mnh_end_do() !$acc end kernels #endif #endif @@ -2305,9 +2306,9 @@ ELSE #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) PLM(:,:,:) = ( ZTMP1_DEVICE * ZTMP2_DEVICE ) ** (1./2.) #else - DO CONCURRENT( JI=1:JIU, JJ=1:JJU, JK=1:JKU ) + !$mnh_do_concurrent( JI=1:JIU, JJ=1:JJU, JK=1:JKU ) PLM(JI,JJ,JK) = BR_POW( ZTMP1_DEVICE(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK), 1. / 2. ) - END DO + !$mnh_end_do() #endif !$acc end kernels #endif @@ -2329,24 +2330,23 @@ IF (.NOT. ORMC01) THEN !$acc kernels DO JJ=1,JJU DO JI=1,JIU + GZD = .TRUE. IF (GOCEAN) THEN !$acc loop seq DO JK=KKTE,KKTB,-1 ZD=ZALPHA*(PZZ(JI,JJ,KKTE+1)-PZZ(JI,JJ,JK)) - IF ( PLM(JI,JJ,JK)>ZD) THEN + IF ( (PLM(JI,JJ,JK)>ZD) .AND. GZD ) THEN PLM(JI,JJ,JK)=ZD - ELSE - EXIT + GZD = .FALSE. ENDIF END DO ELSE !$acc loop seq DO JK=KKTB,KKTE ZD = ZALPHA * ( 0.5 * ( PZZ(JI, JJ, JK) + PZZ(JI, JJ, JK+KKL) ) - PZZ(JI, JJ, KKB) ) * PDIRCOSZW(JI, JJ) - IF ( PLM(JI,JJ,JK) > ZD ) THEN + IF ( ( PLM(JI,JJ,JK) > ZD ) .AND. GZD ) THEN PLM(JI,JJ,JK) = ZD - ELSE - EXIT + GZD = .FALSE. ENDIF END DO ENDIF @@ -2356,12 +2356,12 @@ IF (.NOT. ORMC01) THEN END IF ! !$acc kernels -DO CONCURRENT(JI=1:JIU , JJ=1:JJU ) +!$mnh_do_concurrent(JI=1:JIU , JJ=1:JJU ) PLM(JI,JJ,KKA) = PLM(JI,JJ,KKB ) -END DO -DO CONCURRENT(JI=1:JIU , JJ=1:JJU ) +!$mnh_end_do() +!$mnh_do_concurrent(JI=1:JIU , JJ=1:JJU ) PLM(JI,JJ,KKU ) = PLM(JI,JJ,KKE) -END DO +!$mnh_end_do() !$acc end kernels !$acc end data @@ -2469,6 +2469,7 @@ REAL, DIMENSION(:,:,:), POINTER , CONTIGUOUS :: ZTMP1_DEVICE,ZTMP2_DEVICE #endif INTEGER :: JIU,JJU,JKU LOGICAL :: GOCEAN !Intermediate variable used to work around a Cray compiler bug (CCE 13.0.0) +LOGiCAL :: GZD !---------------------------------------------------------------------------- !$acc data present( PDXX, PDYY, PDZZ, PZZ, PDIRCOSZW, PTHLT, PTHVREF, PTKET, PSRCT, PRT, PLOCPEXNM, PATHETA, PAMOIST, PLM ) @@ -2576,9 +2577,9 @@ IF ( HTURBDIM /= '1DIM' ) THEN ! 3D turbulence scheme call Mppdb_check( plm, "Dear mid1:plm" ) end if !$acc kernels -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) PLM(JI,JJ,JK) = BR_POW( PLM(JI,JJ,JK)*ZTMP1_DEVICE(JI,JJ,JK) *ZTMP2_DEVICE(JI,JJ,JK) , 1./3. ) -ENDDO +!$mnh_end_do() !$acc end kernels if ( mppdb_initialized ) then call Mppdb_check( plm, "Dear mid2:plm" ) @@ -2600,7 +2601,7 @@ CALL EMOIST(KRR,KRRI,PTHLT,PRT,PLOCPEXNM,PAMOIST,PSRCT,ZEMOIST) !$acc kernels present(ZWORK2D,PLM) IF (KRR>0) THEN !$acc_nv loop independent collapse(3) private(ZVAR) - DO CONCURRENT( JI=1:JIU, JJ=1:JJU, JK = KKTB+1:KKTE-1) + !$mnh_do_concurrent( JI=1:JIU, JJ=1:JJU, JK = KKTB+1:KKTE-1) ZDTHLDZ(JI,JJ,JK)= 0.5*((PTHLT(JI,JJ,JK+KKL)-PTHLT(JI,JJ,JK ))/PDZZ(JI,JJ,JK+KKL)+ & (PTHLT(JI,JJ,JK )-PTHLT(JI,JJ,JK-KKL))/PDZZ(JI,JJ,JK )) ZDRTDZ(JI,JJ,JK) = 0.5*((PRT(JI,JJ,JK+KKL,1)-PRT(JI,JJ,JK ,1))/PDZZ(JI,JJ,JK+KKL)+ & @@ -2616,10 +2617,10 @@ IF (KRR>0) THEN PLM(JI,JJ,JK)=MAX(XMNH_EPSILON,MIN(PLM(JI,JJ,JK), & 0.76* SQRT(PTKET(JI,JJ,JK)/ZVAR))) END IF - END DO + !$mnh_end_do() ELSE! For dry atmos or unsalted ocean runs !$acc_nv loop independent collapse(3) private(ZVAR) - DO CONCURRENT( JI=1:JIU, JJ=1:JJU, JK = KKTB+1:KKTE-1) + !$mnh_do_concurrent( JI=1:JIU, JJ=1:JJU, JK = KKTB+1:KKTE-1) ZDTHLDZ(JI,JJ,JK)= 0.5*((PTHLT(JI,JJ,JK+KKL)-PTHLT(JI,JJ,JK ))/PDZZ(JI,JJ,JK+KKL)+ & (PTHLT(JI,JJ,JK )-PTHLT(JI,JJ,JK-KKL))/PDZZ(JI,JJ,JK )) IF (GOCEAN) THEN @@ -2632,7 +2633,7 @@ ELSE! For dry atmos or unsalted ocean runs PLM(JI,JJ,JK)=MAX(XMNH_EPSILON,MIN(PLM(JI,JJ,JK), & 0.76* SQRT(PTKET(JI,JJ,JK)/ZVAR))) END IF - END DO + !$mnh_end_do() END IF ! special case near the surface ZDTHLDZ(:,:,KKB)=(PTHLT(:,:,KKB+KKL)-PTHLT(:,:,KKB))/PDZZ(:,:,KKB+KKL) @@ -2652,9 +2653,9 @@ IF (GOCEAN) THEN #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(2) #endif - DO CONCURRENT( JI = 1 : JIU, JJ = 1 : JJU ) + !$mnh_do_concurrent( JI = 1 : JIU, JJ = 1 : JJU ) ZWORK2D(JI,JJ)=XG*(XALPHAOC*ZDTHLDZ(JI,JJ,KKB)-XBETAOC*ZDRTDZ(JI,JJ,KKB)) - END DO + !$mnh_end_do() #endif ELSE #if 0 @@ -2666,18 +2667,18 @@ ELSE #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(2) #endif - DO CONCURRENT( JI = 1 : JIU, JJ = 1 : JJU ) + !$mnh_do_concurrent( JI = 1 : JIU, JJ = 1 : JJU ) ZWORK2D(JI,JJ)=XG/PTHVREF(JI,JJ,KKB)* & (ZETHETA(JI,JJ,KKB)*ZDTHLDZ(JI,JJ,KKB)+ZEMOIST(JI,JJ,KKB)*ZDRTDZ(JI,JJ,KKB)) - END DO + !$mnh_end_do() #endif END IF -DO CONCURRENT(JI=1:JIU,JJ=1:JJU) +!$mnh_do_concurrent(JI=1:JIU,JJ=1:JJU) IF (ZWORK2D(JI,JJ)>0.) THEN PLM(JI,JJ,KKB)=MAX(XMNH_EPSILON,MIN( PLM(JI,JJ,KKB), & 0.76* SQRT(PTKET(JI,JJ,KKB)/ZWORK2D(JI,JJ)))) END IF -END DO +!$mnh_end_do() ! ! mixing length limited by the distance normal to the surface (with the same factor as for BL89) ! @@ -2686,14 +2687,14 @@ IF (.NOT. ORMC01) THEN ! DO JJ=1,SIZE(PLM,2) DO JI=1,SIZE(PLM,1) + GZD = .TRUE. IF (GOCEAN) THEN !$acc loop seq DO JK=KKTE,KKTB,-1 ZD=ZALPHA*(PZZ(JI,JJ,KKTE+1)-PZZ(JI,JJ,JK)) - IF ( PLM(JI,JJ,JK)>ZD) THEN + IF ( (PLM(JI,JJ,JK)>ZD) .AND. GZD ) THEN PLM(JI,JJ,JK)=ZD - ELSE - EXIT + GZD = .FALSE. ENDIF END DO ELSE @@ -2701,10 +2702,9 @@ IF (.NOT. ORMC01) THEN DO JK=KKTB,KKTE ZD=ZALPHA*(0.5*(PZZ(JI,JJ,JK)+PZZ(JI,JJ,JK+KKL))-PZZ(JI,JJ,KKB)) & *PDIRCOSZW(JI,JJ) - IF ( PLM(JI,JJ,JK)>ZD) THEN + IF ( (PLM(JI,JJ,JK)>ZD) .AND. GZD ) THEN PLM(JI,JJ,JK)=ZD - ELSE - EXIT + GZD = .FALSE. ENDIF END DO ENDIF diff --git a/src/MNH/turb_hor_thermo_flux.f90 b/src/MNH/turb_hor_thermo_flux.f90 index e1fc823fd6ab8fada0b6a76e5ed174d9b379b91c..7fbb589855a8f6601d549dd20ba2c7642633845b 100644 --- a/src/MNH/turb_hor_thermo_flux.f90 +++ b/src/MNH/turb_hor_thermo_flux.f90 @@ -333,9 +333,9 @@ CALL MXM_DEVICE( PK, ZTMP1_DEVICE ) CALL GX_M_U_DEVICE(1,IKU,1,PTHLM,PDXX,PDZZ,PDZX,ZTMP2_DEVICE) !$acc kernels present_cr(ZFLX) !$acc_nv loop independent collapse(3) -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZFLX(JI,JJ,JK) = -XCSHF * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK) -END DO +!$mnh_end_do() ZFLX(:,:,IKE+1) = ZFLX(:,:,IKE) !$acc end kernels #endif @@ -374,9 +374,9 @@ ZFLX(:,:,IKB-1:IKB-1) = 2. * MXM( SPREAD( PSFTHM(:,:)* PDIRCOSXW(:,:), 3,1) ) - ZFLX(:,:,IKB:IKB) #else ! acc kernels present_cr(ZTMP1_DEVICE) -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU ) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU ) ZTMP1_DEVICE(JI,JJ,1) = PSFTHM(JI,JJ)* PDIRCOSXW(JI,JJ) -END DO +!$mnh_end_do() !$acc end kernels CALL MXM_DEVICE( ZTMP1_DEVICE(:,:,1:1), ZTMP2_DEVICE(:,:,1:1) ) !$acc kernels present_cr(ZFLX) @@ -399,30 +399,30 @@ IF (.NOT. LFLAT) THEN CALL MXM_DEVICE(PRHODJ, ZTMP1_DEVICE) !$acc kernels present_cr(ZTMP2_DEVICE) !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * ZFLX(JI,JJ,JK) * PINV_PDXX(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL DXF_DEVICE(ZTMP2_DEVICE, ZTMP3_DEVICE) !$acc kernels present_cr(ZTMP2_DEVICE) !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK) * PINV_PDXX(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL MZM_DEVICE(ZTMP2_DEVICE,ZTMP4_DEVICE) !$acc kernels present_cr(ZTMP2_DEVICE) !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = PDZX(JI,JJ,JK)*ZTMP4_DEVICE(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL MXF_DEVICE(ZTMP2_DEVICE, ZTMP4_DEVICE) !$acc kernels present_cr(ZTMP2_DEVICE) !$acc_nv loop independent collapse(3) -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = PMZM_PRHODJ(JI,JJ,JK) * ZTMP4_DEVICE(JI,JJ,JK) * PINV_PDZZ(JI,JJ,JK) -END DO +!$mnh_end_do() !$acc end kernels CALL DZF_DEVICE( ZTMP2_DEVICE, ZTMP4_DEVICE ) !$acc kernels present_cr(PRTHLS) @@ -766,9 +766,9 @@ END IF CALL GX_M_U_DEVICE(1,IKU,1,PRM(:,:,:,1),PDXX,PDZZ,PDZX,ZTMP2_DEVICE) !$acc kernels present_cr(ZFLX) !$acc_nv loop independent collapse(3) -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZFLX(JI,JJ,JK) = -XCHF * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK) -END DO +!$mnh_end_do() ZFLX(:,:,IKE+1) = ZFLX(:,:,IKE) !$acc end kernels ! @@ -805,37 +805,37 @@ END DO CALL MXM_DEVICE(PRHODJ,ZTMP1_DEVICE) !$acc kernels present_cr(ZTMP2_DEVICE) !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * ZFLX(JI,JJ,JK) * PINV_PDXX(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL DXF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE ) !$acc kernels present_cr(ZTMP2_DEVICE) !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK) * PINV_PDXX(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL MZM_DEVICE(ZTMP2_DEVICE,ZTMP4_DEVICE) !$acc kernels present_cr(ZTMP2_DEVICE) !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = PDZX(JI,JJ,JK)*ZTMP4_DEVICE(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL MXF_DEVICE(ZTMP2_DEVICE,ZTMP4_DEVICE) !$acc kernels present_cr(ZTMP2_DEVICE) !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = PMZM_PRHODJ(JI,JJ,JK) * ZTMP4_DEVICE(JI,JJ,JK) * PINV_PDZZ(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL DZF_DEVICE(ZTMP2_DEVICE,ZTMP4_DEVICE) !$acc kernels !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) PRRS(JI,JJ,JK,1) = PRRS(JI,JJ,JK,1) - ZTMP3_DEVICE(JI,JJ,JK) + ZTMP4_DEVICE(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels ELSE CALL MXM_DEVICE(PRHODJ,ZTMP1_DEVICE) @@ -1141,9 +1141,9 @@ END IF CALL GY_M_V_DEVICE(1,IKU,1,PTHLM,PDYY,PDZZ,PDZY,ZTMP2_DEVICE) !$acc kernels present_cr(ZFLX) !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZFLX(JI,JJ,JK) = -XCSHF * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK) - END DO + !$mnh_end_do() ZFLX(:,:,IKE+1) = ZFLX(:,:,IKE) !$acc end kernels ELSE @@ -1188,37 +1188,37 @@ IF (.NOT. L2D) THEN CALL MYM_DEVICE(PRHODJ, ZTMP1_DEVICE) !$acc kernels present_cr(ZTMP2_DEVICE) !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * ZFLX(JI,JJ,JK) * PINV_PDYY(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL DYF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE ) !$acc kernels present_cr(ZTMP1_DEVICE) !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP1_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK) * PINV_PDYY(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL MZM_DEVICE(ZTMP1_DEVICE, ZTMP2_DEVICE) !$acc kernels present_cr(ZTMP1_DEVICE) !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP1_DEVICE(JI,JJ,JK) = PDZY(JI,JJ,JK)*ZTMP2_DEVICE(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL MYF_DEVICE(ZTMP1_DEVICE, ZTMP2_DEVICE) !$acc kernels present_cr(ZTMP1_DEVICE) !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP1_DEVICE(JI,JJ,JK) = PMZM_PRHODJ(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK) * PINV_PDZZ(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL DZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) !$acc kernels !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) PRTHLS(JI,JJ,JK) = PRTHLS(JI,JJ,JK) - ZTMP3_DEVICE(JI,JJ,JK) + ZTMP2_DEVICE(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels ELSE CALL MYM_DEVICE(PRHODJ, ZTMP1_DEVICE) @@ -1508,9 +1508,9 @@ IF (KRR/=0) THEN CALL GY_M_V_DEVICE(1,IKU,1,PRM(:,:,:,1),PDYY,PDZZ,PDZY, ZTMP2_DEVICE) !$acc kernels present_cr(ZFLX) !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZFLX(JI,JJ,JK) = -XCHF * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT ZFLX(:,:,IKE+1) = ZFLX(:,:,IKE) !$acc end kernels ELSE @@ -1554,39 +1554,39 @@ IF (KRR/=0) THEN CALL MYM_DEVICE(PRHODJ, ZTMP1_DEVICE) !$acc kernels present_cr(ZTMP2_DEVICE) !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * ZFLX(JI,JJ,JK) * PINV_PDYY(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL DYF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE ) ! !$acc kernels present_cr(ZTMP1_DEVICE) !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP1_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK) * PINV_PDYY(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL MZM_DEVICE(ZTMP1_DEVICE,ZTMP2_DEVICE) !$acc kernels present_cr(ZTMP1_DEVICE) !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP1_DEVICE(JI,JJ,JK) = PDZY(JI,JJ,JK)*ZTMP2_DEVICE(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL MYF_DEVICE(ZTMP1_DEVICE,ZTMP2_DEVICE) !$acc kernels present_cr(ZTMP1_DEVICE) !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP1_DEVICE(JI,JJ,JK) = PMZM_PRHODJ(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK) * PINV_PDZZ(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL DZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) ! !$acc kernels !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) PRRS(JI,JJ,JK,1) = PRRS(JI,JJ,JK,1) - ZTMP3_DEVICE(JI,JJ,JK) + ZTMP2_DEVICE(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels ELSE CALL MYM_DEVICE(PRHODJ, ZTMP1_DEVICE) diff --git a/src/MNH/turb_hor_tke.f90 b/src/MNH/turb_hor_tke.f90 index d538b366d11f7b93289477380254d9fa1742dedd..2e97d39d2cc7a653b928503c4792c64ba9b4be32 100644 --- a/src/MNH/turb_hor_tke.f90 +++ b/src/MNH/turb_hor_tke.f90 @@ -227,9 +227,9 @@ CALL GX_M_U_DEVICE(1,IKU,1,PTKEM,PDXX,PDZZ,PDZX,ZTMP2_DEVICE) #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZFLX(JI,JJ,JK) = -XCET * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK) ! < u'e > -END DO !CONCURRENT +!$mnh_end_do() !CONCURRENT #endif ! ! special case near the ground ( uncentred gradient ) @@ -237,11 +237,11 @@ END DO !CONCURRENT #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(2) #endif -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU ) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU ) ZFLX(JI,JJ,IKB) = ZCOEFF(JI,JJ,IKB+2)*PTKEM(JI,JJ,IKB+2) & + ZCOEFF(JI,JJ,IKB+1)*PTKEM(JI,JJ,IKB+1) & + ZCOEFF(JI,JJ,IKB )*PTKEM(JI,JJ,IKB ) -END DO +!$mnh_end_do() !$acc end kernels ! #ifndef MNH_OPENACC @@ -298,45 +298,45 @@ IF (.NOT. LFLAT) THEN #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * ZFLX(JI,JJ,JK) * PINV_PDXX(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL DXF_DEVICE(ZTMP2_DEVICE,ZTMP1_DEVICE) !$acc kernels #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK)*PINV_PDXX(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL MZM_DEVICE(ZTMP2_DEVICE,ZTMP3_DEVICE) !$acc kernels #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = PDZX(JI,JJ,JK) * ZTMP3_DEVICE(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL MXF_DEVICE( ZTMP2_DEVICE,ZTMP3_DEVICE) !$acc kernels #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = PMZM_PRHODJ(JI,JJ,JK) * ZTMP3_DEVICE(JI,JJ,JK) * PINV_PDZZ(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL DZF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE ) !$acc kernels #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) PTRH(JI,JJ,JK) =-( ZTMP1_DEVICE(JI,JJ,JK) - ZTMP3_DEVICE(JI,JJ,JK) ) /PRHODJ(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels ELSE CALL MXM_DEVICE(PRHODJ,ZTMP1_DEVICE) @@ -380,9 +380,9 @@ IF (.NOT. L2D) THEN #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZFLX(JI,JJ,JK) =-XCET * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK) ! < v'e > - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels #endif ! @@ -454,46 +454,46 @@ IF (.NOT. L2D) THEN #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * ZFLX(JI,JJ,JK) * PINV_PDYY(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL DYF_DEVICE(ZTMP2_DEVICE,ZTMP1_DEVICE) !$acc kernels #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK)*PINV_PDYY(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL MZM_DEVICE(ZTMP2_DEVICE,ZTMP3_DEVICE) !$acc kernels #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = PDZY(JI,JJ,JK) * ZTMP3_DEVICE(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL MYF_DEVICE(ZTMP2_DEVICE,ZTMP3_DEVICE) !$acc kernels #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = PMZM_PRHODJ(JI,JJ,JK) * ZTMP3_DEVICE(JI,JJ,JK) * PINV_PDZZ(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL DZF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE ) !$acc kernels #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) PTRH(JI,JJ,JK) = PTRH(JI,JJ,JK) - ( ZTMP1_DEVICE(JI,JJ,JK) - ZTMP3_DEVICE(JI,JJ,JK) ) & /PRHODJ(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels ELSE CALL MYM_DEVICE(PRHODJ,ZTMP1_DEVICE) diff --git a/src/MNH/turb_hor_uw.f90 b/src/MNH/turb_hor_uw.f90 index 186fb9de8477f20f67b5b993b3d8e2c2e244fa4e..0c003af6201d667e86a29db9fa4f7b0f328a6e59 100644 --- a/src/MNH/turb_hor_uw.f90 +++ b/src/MNH/turb_hor_uw.f90 @@ -289,9 +289,9 @@ CALL MXM_DEVICE(ZTMP1_DEVICE,ZTMP2_DEVICE) #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZFLX(JI,JJ,JK) = - XCMFS * ZTMP2_DEVICE(JI,JJ,JK) * GX_W_UW_PWM(JI,JJ,JK) -END DO !CONCURRENT +!$mnh_end_do() !CONCURRENT #endif !! & to be tested !! - (2./3.) * XCMFB * MZM( ZVPTU * MXM( PLM / SQRT(PTKEM) * XG / PTHVREF ) ) @@ -332,18 +332,18 @@ CALL MXM_DEVICE( PDZZ, ZTMP2_DEVICE ) #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP3_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK)* ZTMP1_DEVICE(JI,JJ,JK) / ZTMP2_DEVICE(JI,JJ,JK) -END DO !CONCURRENT +!$mnh_end_do() !CONCURRENT !$acc end kernels CALL DZF_DEVICE( ZTMP3_DEVICE, ZTMP1_DEVICE ) !$acc kernels #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) PRUS(JI,JJ,JK) = PRUS(JI,JJ,JK) - ZTMP1_DEVICE(JI,JJ,JK) -END DO !CONCURRENT +!$mnh_end_do() !CONCURRENT !$acc end kernels #endif ! @@ -362,18 +362,18 @@ END IF #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * PINV_PDXX(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL MZM_DEVICE(ZTMP2_DEVICE, ZTMP1_DEVICE) !$acc kernels #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * ZFLX(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL DXF_DEVICE( ZTMP2_DEVICE,ZTMP1_DEVICE) IF (.NOT. LFLAT) THEN @@ -381,18 +381,18 @@ IF (.NOT. LFLAT) THEN #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK)*PDZX(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL MZF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE ) !$acc kernels #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZTMP3_DEVICE(JI,JJ,JK)*PINV_PDXX(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL MXF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE ) CALL MZF_DEVICE( PDZZ, ZTMP2_DEVICE ) @@ -400,20 +400,20 @@ IF (.NOT. LFLAT) THEN #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP4_DEVICE(JI,JJ,JK) = PRHODJ(JI,JJ,JK) * ZTMP3_DEVICE(JI,JJ,JK) / ZTMP2_DEVICE(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL DZM_DEVICE( ZTMP4_DEVICE, ZTMP2_DEVICE ) !$acc kernels #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) PRWS(JI,JJ,JK) = PRWS(JI,JJ,JK) & - ZTMP1_DEVICE(JI,JJ,JK) & + ZTMP2_DEVICE(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels ELSE !$acc kernels @@ -435,9 +435,9 @@ IF (KSPLT==1) THEN #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK) *( ZTMP1_DEVICE(JI,JJ,JK) + GX_W_UW_PWM(JI,JJ,JK) ) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL MXF_DEVICE( ZTMP2_DEVICE,ZTMP1_DEVICE ) CALL MZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) @@ -445,9 +445,9 @@ IF (KSPLT==1) THEN #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZWORK(JI,JJ,JK) = -ZTMP2_DEVICE(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels #endif ! diff --git a/src/MNH/turb_hor_vw.f90 b/src/MNH/turb_hor_vw.f90 index 0237734124cc629ac97d07adb3ed742a9b1dcce3..7f67565d38ce446300103ee0b2aa63b1f5b164b9 100644 --- a/src/MNH/turb_hor_vw.f90 +++ b/src/MNH/turb_hor_vw.f90 @@ -289,9 +289,9 @@ IF (.NOT. L2D) THEN #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZFLX(JI,JJ,JK) = - XCMFS * ZTMP2_DEVICE(JI,JJ,JK) * GY_W_VW_PWM(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels #endif ELSE @@ -339,18 +339,18 @@ IF (.NOT. L2D) THEN #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP3_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK)* ZTMP1_DEVICE(JI,JJ,JK) / ZTMP2_DEVICE(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL DZF_DEVICE( ZTMP3_DEVICE, ZTMP1_DEVICE ) !$acc kernels #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) PRVS(JI,JJ,JK) = PRVS(JI,JJ,JK) - ZTMP1_DEVICE(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels ENDIF #endif @@ -374,36 +374,36 @@ IF (.NOT. L2D) THEN #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * PINV_PDYY(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL MZM_DEVICE(ZTMP2_DEVICE, ZTMP1_DEVICE) !$acc kernels #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * ZFLX(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL DYF_DEVICE( ZTMP2_DEVICE, ZTMP1_DEVICE ) !$acc kernels #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK) *PDZY(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL MZF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE ) !$acc kernels #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZTMP3_DEVICE(JI,JJ,JK) * PINV_PDYY(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL MYF_DEVICE(ZTMP2_DEVICE,ZTMP3_DEVICE) CALL MZF_DEVICE( PDZZ, ZTMP2_DEVICE ) @@ -411,20 +411,20 @@ IF (.NOT. L2D) THEN #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP4_DEVICE(JI,JJ,JK) = PRHODJ(JI,JJ,JK) * ZTMP3_DEVICE(JI,JJ,JK) / ZTMP2_DEVICE(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL DZM_DEVICE( ZTMP4_DEVICE, ZTMP2_DEVICE ) !$acc kernels #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) PRWS(JI,JJ,JK) = PRWS(JI,JJ,JK) & - ZTMP1_DEVICE(JI,JJ,JK) & + ZTMP2_DEVICE(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels ELSE CALL MYM_DEVICE(PRHODJ, ZTMP1_DEVICE) @@ -456,9 +456,9 @@ IF (KSPLT==1) THEN #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZFLX(JI,JJ,JK) *( ZTMP1_DEVICE(JI,JJ,JK) + GY_W_VW_PWM(JI,JJ,JK) ) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels CALL MYF_DEVICE(ZTMP2_DEVICE,ZTMP1_DEVICE) CALL MZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) @@ -466,9 +466,9 @@ IF (KSPLT==1) THEN #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZWORK(JI,JJ,JK) = -ZTMP2_DEVICE(JI,JJ,JK) - END DO !CONCURRENT + !$mnh_end_do() !CONCURRENT !$acc end kernels #endif ! diff --git a/src/MNH/turb_ver.f90 b/src/MNH/turb_ver.f90 index 21851b90b55999a8d88dca1c9ee8b92559cb71f4..4963175b2c5d78abe0d80eddade1d7162816ef41 100644 --- a/src/MNH/turb_ver.f90 +++ b/src/MNH/turb_ver.f90 @@ -679,9 +679,9 @@ ENDIF #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZD(JI,JJ,JK) = (1.+ZREDTH1(JI,JJ,JK)+ZREDR1(JI,JJ,JK)) * (1.+0.5*(ZREDTH1(JI,JJ,JK)+ZREDR1(JI,JJ,JK))) -END DO +!$mnh_end_do() !$acc end kernels ! ! Phi3 and Psi3 Prandtl numbers diff --git a/src/MNH/turb_ver_dyn_flux.f90 b/src/MNH/turb_ver_dyn_flux.f90 index f608c5be745833416c0c2e2a8ac742480444da69..6046b2f549a7bc4cc38c696ba6cb6789542ffd5b 100644 --- a/src/MNH/turb_ver_dyn_flux.f90 +++ b/src/MNH/turb_ver_dyn_flux.f90 @@ -532,9 +532,9 @@ ZSOURCE(:,:,:) = 0. ZDIRSINZW(:,:) = SQRT(1.-PDIRCOSZW(:,:)**2) #else !$acc_nv loop independent collapse(2) -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU ) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU ) ZDIRSINZW(JI,JJ) = SQRT(1.-BR_P2(PDIRCOSZW(JI,JJ))) -END DO +!$mnh_end_do() #endif !$acc end kernels @@ -584,9 +584,9 @@ CALL MXM_DEVICE( PDZZ, ZTMP4_DEVICE ) ZA(:,:,:) = -PTSTEP * XCMFS * ZTMP1_DEVICE(:,:,:) * ZTMP3_DEVICE(:,:,:) / ZTMP4_DEVICE(:,:,:)**2 #else !$acc_nv loop independent collapse(3) -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZA(JI,JJ,JK) = -PTSTEP * XCMFS * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP3_DEVICE(JI,JJ,JK) / BR_P2(ZTMP4_DEVICE(JI,JJ,JK)) -END DO +!$mnh_end_do() #endif !$acc end kernels #endif @@ -602,28 +602,28 @@ ZCOEFFLXU(:,:,1) = PCDUEFF(:,:) * (PDIRCOSZW(:,:)**2 - ZDIRSINZW(:,:)**2) & * PCOSSLOPE(:,:) #else !$acc_nv loop independent collapse(2) -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU ) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU ) ZCOEFFLXU(JI,JJ,1) = PCDUEFF(JI,JJ) * (BR_P2(PDIRCOSZW(JI,JJ)) - BR_P2(ZDIRSINZW(JI,JJ))) & * PCOSSLOPE(JI,JJ) -END DO +!$mnh_end_do() #endif !$acc_nv loop independent collapse(2) -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU ) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU ) ZCOEFFLXV(JI,JJ,1) = PCDUEFF(JI,JJ) * PDIRCOSZW(JI,JJ) * PSINSLOPE(JI,JJ) ! prepare the implicit scheme coefficients for the surface flux ZCOEFS(JI,JJ,1)= ZCOEFFLXU(JI,JJ,1) * PCOSSLOPE(JI,JJ) * PDIRCOSZW(JI,JJ) & +ZCOEFFLXV(JI,JJ,1) * PSINSLOPE(JI,JJ) -END DO +!$mnh_end_do() ! ! average this flux to be located at the U,W vorticity point #ifndef MNH_OPENACC ZCOEFS(:,:,1:1)=MXM(ZCOEFS(:,:,1:1) / PDZZ(:,:,IKB:IKB) ) #else !$acc_nv loop independent collapse(2) -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU ) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU ) ZTMP1_DEVICE(JI,JJ,1) = ZCOEFS(JI,JJ,1) / PDZZ(JI,JJ,IKB) -END DO +!$mnh_end_do() !$acc end kernels CALL MXM_DEVICE(ZTMP1_DEVICE(:,:,1:1),ZCOEFS(:,:,1:1)) #endif @@ -729,18 +729,18 @@ ZFLXZ(:,:,:) = -XCMFS * MXM(ZKEFF) * & #else !$acc kernels !$acc_nv loop independent collapse(3) -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = PIMPL*ZRES(JI,JJ,JK) + PEXPL*PUM(JI,JJ,JK) -END DO +!$mnh_end_do() !$acc end kernels CALL MXM_DEVICE(ZKEFF,ZTMP1_DEVICE) CALL DZM_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE ) CALL MXM_DEVICE(PDZZ,ZTMP4_DEVICE) !$acc kernels !$acc_nv loop independent collapse(3) -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZFLXZ(JI,JJ,JK) = -XCMFS * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP3_DEVICE(JI,JJ,JK) / ZTMP4_DEVICE(JI,JJ,JK) -END DO +!$mnh_end_do() !$acc end kernels #endif ! @@ -802,9 +802,9 @@ PDP(:,:,:) = - MZF( MXF ( ZFLXZ * GZ_U_UW(PUM,PDZZ) ) ) CALL GZ_U_UW_DEVICE(PUM,PDZZ,ZTMP1_DEVICE) !$acc kernels !$acc_nv loop independent collapse(3) -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU ) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU ) ZTMP2_DEVICE(JI,JJ,JK) = ZFLXZ(JI,JJ,JK) * ZTMP1_DEVICE(JI,JJ,JK) -END DO +!$mnh_end_do() !$acc end kernels CALL MXF_DEVICE( ZTMP2_DEVICE,ZTMP3_DEVICE ) CALL MZF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE ) @@ -904,39 +904,39 @@ IF(HTURBDIM=='3DIM') THEN CALL MXM_DEVICE(PRHODJ,ZTMP1_DEVICE) !$acc kernels !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) /PDXX(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL MZM_DEVICE(ZTMP2_DEVICE,ZTMP3_DEVICE ) !$acc kernels !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZTMP3_DEVICE(JI,JJ,JK) * ZFLXZ(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL DXF_DEVICE( ZTMP2_DEVICE,ZTMP1_DEVICE ) IF (.NOT. LFLAT) THEN CALL MZF_DEVICE( PDZZ, ZTMP2_DEVICE ) !$acc kernels !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP3_DEVICE(JI,JJ,JK) = ZFLXZ(JI,JJ,JK)*PDZX(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL MZF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE ) !$acc kernels !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP3_DEVICE(JI,JJ,JK) = ZTMP4_DEVICE(JI,JJ,JK) / PDXX(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL MXF_DEVICE( ZTMP3_DEVICE,ZTMP4_DEVICE ) !$acc kernels !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP3_DEVICE(JI,JJ,JK) = PRHODJ(JI,JJ,JK) / ZTMP2_DEVICE(JI,JJ,JK) * ZTMP4_DEVICE(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL DZM_DEVICE( ZTMP3_DEVICE, ZTMP2_DEVICE ) !$acc kernels present_cr(PRWS) @@ -957,17 +957,17 @@ IF(HTURBDIM=='3DIM') THEN CALL GX_W_UW_DEVICE( PWM,PDXX,PDZZ,PDZX,ZTMP1_DEVICE) !$acc kernels !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZFLXZ(JI,JJ,JK) * ZTMP1_DEVICE(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL MXF_DEVICE(ZTMP2_DEVICE,ZTMP1_DEVICE) CALL MZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) !$acc kernels !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZA(JI,JJ,JK)=-ZTMP2_DEVICE(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels #endif ! @@ -1116,9 +1116,9 @@ CALL MYM_DEVICE(ZTMP3_DEVICE,ZTMP4_DEVICE) ZA(:,:,:) = - PTSTEP * XCMFS * ZTMP1_DEVICE(:,:,:) * ZTMP4_DEVICE(:,:,:) / ZTMP2_DEVICE(:,:,:)**2 #else !$acc_nv loop independent collapse(3) -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZA(JI,JJ,JK) = - PTSTEP * XCMFS * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP4_DEVICE(JI,JJ,JK) / BR_P2(ZTMP2_DEVICE(JI,JJ,JK)) -END DO +!$mnh_end_do() #endif #endif ! @@ -1132,28 +1132,28 @@ ZCOEFFLXU(:,:,1) = PCDUEFF(:,:) * (PDIRCOSZW(:,:)**2 - ZDIRSINZW(:,:)**2) & * PSINSLOPE(:,:) #else !$acc_nv loop independent collapse(2) -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU ) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU ) ZCOEFFLXU(JI,JJ,1) = PCDUEFF(JI,JJ) * (BR_P2(PDIRCOSZW(JI,JJ)) - BR_P2(ZDIRSINZW(JI,JJ))) & * PSINSLOPE(JI,JJ) -END DO +!$mnh_end_do() #endif ZCOEFFLXV(:,:,1) = PCDUEFF(:,:) * PDIRCOSZW(:,:) * PCOSSLOPE(:,:) ! prepare the implicit scheme coefficients for the surface flux !$acc_nv loop independent collapse(2) -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU ) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU ) ZCOEFS(JI,JJ,1)= ZCOEFFLXU(JI,JJ,1) * PSINSLOPE(JI,JJ) * PDIRCOSZW(JI,JJ) & +ZCOEFFLXV(JI,JJ,1) * PCOSSLOPE(JI,JJ) -END DO +!$mnh_end_do() ! ! average this flux to be located at the V,W vorticity point #ifndef MNH_OPENACC ZCOEFS(:,:,1:1)=MYM(ZCOEFS(:,:,1:1) / PDZZ(:,:,IKB:IKB) ) #else !$acc_nv loop independent collapse(2) -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU ) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU ) ZTMP1_DEVICE(JI,JJ,1) = ZCOEFS(JI,JJ,1) / PDZZ(JI,JJ,IKB) -END DO +!$mnh_end_do() !$acc end kernels CALL MYM_DEVICE(ZTMP1_DEVICE(:,:,1:1),ZCOEFS(:,:,1:1) ) #endif @@ -1257,18 +1257,18 @@ ZFLXZ(:,:,IKB:IKB) = MYM(PDZZ(:,:,IKB:IKB)) * & #else !$acc kernels !$acc_nv loop independent collapse(3) -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP1_DEVICE(JI,JJ,JK) = PIMPL*ZRES(JI,JJ,JK) + PEXPL*PVM(JI,JJ,JK) -END DO +!$mnh_end_do() !$acc end kernels CALL DZM_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) CALL MYM_DEVICE(PDZZ,ZTMP3_DEVICE) CALL MYM_DEVICE(ZKEFF,ZTMP1_DEVICE) !$acc kernels !$acc_nv loop independent collapse(3) -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZFLXZ(JI,JJ,JK) = -XCMFS * ZTMP1_DEVICE(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK) / ZTMP3_DEVICE(JI,JJ,JK) -END DO +!$mnh_end_do() !$acc end kernels ! CALL MYM_DEVICE(PDZZ(:,:,IKB:IKB),ZTMP1_DEVICE(:,:,1:1)) @@ -1322,17 +1322,17 @@ ZA(:,:,:) = - MZF( MYF ( ZFLXZ * GZ_V_VW(PVM,PDZZ) ) ) CALL GZ_V_VW_DEVICE(PVM,PDZZ,ZTMP1_DEVICE) !$acc kernels !$acc_nv loop independent collapse(3) -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZFLXZ(JI,JJ,JK) * ZTMP1_DEVICE(JI,JJ,JK) -END DO +!$mnh_end_do() !$acc end kernels CALL MYF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE ) CALL MZF_DEVICE( ZTMP3_DEVICE, ZTMP1_DEVICE ) !$acc kernels !$acc_nv loop independent collapse(3) -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZA(JI,JJ,JK) = - ZTMP1_DEVICE(JI,JJ,JK) -END DO +!$mnh_end_do() !$acc end kernels #endif ! @@ -1427,39 +1427,39 @@ IF(HTURBDIM=='3DIM') THEN CALL MYM_DEVICE(PRHODJ,ZTMP1_DEVICE) !$acc kernels !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) /PDYY(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL MZM_DEVICE(ZTMP2_DEVICE,ZTMP1_DEVICE) !$acc kernels !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * ZFLXZ(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL DYF_DEVICE( ZTMP2_DEVICE,ZTMP1_DEVICE ) IF (.NOT. LFLAT) THEN CALL MZF_DEVICE( PDZZ, ZTMP2_DEVICE ) !$acc kernels !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP3_DEVICE(JI,JJ,JK) = ZFLXZ(JI,JJ,JK)*PDZY(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL MZF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE ) !$acc kernels !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP3_DEVICE(JI,JJ,JK) = ZTMP4_DEVICE(JI,JJ,JK) / PDYY(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL MYF_DEVICE(ZTMP3_DEVICE,ZTMP4_DEVICE) !$acc kernels !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP3_DEVICE(JI,JJ,JK) = PRHODJ(JI,JJ,JK) / ZTMP2_DEVICE(JI,JJ,JK) * ZTMP4_DEVICE(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL DZM_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE ) !$acc kernels present_cr(PRWS) @@ -1481,17 +1481,17 @@ IF(HTURBDIM=='3DIM') THEN CALL GY_W_VW_DEVICE( PWM,PDYY,PDZZ,PDZY,ZTMP1_DEVICE) !$acc kernels !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZFLXZ(JI,JJ,JK) * ZTMP1_DEVICE(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL MYF_DEVICE(ZTMP2_DEVICE,ZTMP1_DEVICE) CALL MZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) !$acc kernels !$acc_nv loop independent collapse(3) - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZA(JI,JJ,JK) = - ZTMP2_DEVICE(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels #endif ! diff --git a/src/MNH/turb_ver_thermo_corr.f90 b/src/MNH/turb_ver_thermo_corr.f90 index c4a2059561ba99795e8e59b96ab5619ff0305c8d..c78119ca5343428cd8626950aef26ec9b56ced7d 100644 --- a/src/MNH/turb_ver_thermo_corr.f90 +++ b/src/MNH/turb_ver_thermo_corr.f90 @@ -569,9 +569,9 @@ END IF #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP1_DEVICE(JI,JJ,JK) = PPHI3(JI,JJ,JK)*BR_P2(PDTH_DZ(JI,JJ,JK)) - END DO + !$mnh_end_do() #endif !$acc end kernels CALL MZF_DEVICE( ZTMP1_DEVICE(:,:,:), ZTMP2_DEVICE(:,:,:) ) @@ -579,9 +579,9 @@ END IF #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZF (JI,JJ,JK) = XCTV*PLM(JI,JJ,JK)*PLEPS(JI,JJ,JK)*ZTMP2_DEVICE(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels !$acc kernels present_cr(ZDFDDTDZ) ZDFDDTDZ(:,:,:) = 0. ! this term, because of discretization, is treated separately @@ -725,9 +725,9 @@ END IF #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP3_DEVICE(JI,JJ,JK) = ZTMP2_DEVICE(JI,JJ,JK) / PDZZ(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL MZF_DEVICE( ZTMP3_DEVICE(:,:,:), ZTMP4_DEVICE(:,:,:) ) #ifdef MNH_COMPILER_CCE @@ -739,10 +739,10 @@ END IF #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZFLXZ(JI,JJ,JK) = ZF(JI,JJ,JK) & + PIMPL * ZDFDDTDZ(JI,JJ,JK) * ZTMP4_DEVICE(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels #endif ! @@ -766,7 +766,7 @@ END IF #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(2) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU ) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU ) ZFLXZ(JI,JJ,IKB) = XCTV * PPHI3(JI,JJ,IKB+KKL) * PLM(JI,JJ,IKB) & * PLEPS(JI,JJ,IKB) & *( PEXPL * & @@ -778,7 +778,7 @@ END IF +ZCOEFF(JI,JJ,IKB+KKL )*PTHLP(JI,JJ,IKB+KKL ) & +ZCOEFF(JI,JJ,IKB )*PTHLP(JI,JJ,IKB ) ) & ) - END DO + !$mnh_end_do() !$acc end kernels #endif @@ -872,9 +872,9 @@ END IF #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZF (JI,JJ,JK) = XCTV*PLM(JI,JJ,JK)*PLEPS(JI,JJ,JK)*ZTMP2_DEVICE(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels #endif !$acc kernels present_cr(ZDFDDTDZ,ZDFDDRDZ) @@ -1063,10 +1063,10 @@ END IF #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP1_DEVICE(JI,JJ,JK) = ZTMP3_DEVICE(JI,JJ,JK) / PDZZ(JI,JJ,JK) ZTMP2_DEVICE(JI,JJ,JK) = ZTMP4_DEVICE(JI,JJ,JK) / PDZZ(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL D_PHI3DTDZ_O_DDTDZ(PPHI3(:,:,:),PREDTH1(:,:,:),PREDR1(:,:,:),PRED2TH3(:,:,:),PRED2THR3(:,:,:), & @@ -1088,12 +1088,12 @@ END IF #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP7_DEVICE(JI,JJ,JK) = ( ZTMP3_DEVICE(JI,JJ,JK) + ZTMP4_DEVICE(JI,JJ,JK)) * PDR_DZ(JI,JJ,JK) & * ZTMP2_DEVICE(JI,JJ,JK) / PDZZ(JI,JJ,JK) & + ( ZTMP5_DEVICE(JI,JJ,JK) + ZTMP6_DEVICE(JI,JJ,JK)) * PDTH_DZ(JI,JJ,JK) & * ZTMP1_DEVICE(JI,JJ,JK) / PDZZ(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels !!! !$acc kernels present_cr(ZTMP1_DEVICE,ZTMP2_DEVICE) @@ -1106,10 +1106,10 @@ END IF #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP1_DEVICE(JI,JJ,JK) = ZTMP3_DEVICE(JI,JJ,JK) / PDZZ(JI,JJ,JK) ZTMP2_DEVICE(JI,JJ,JK) = ZTMP4_DEVICE(JI,JJ,JK) /PDZZ(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels !!! CALL MZF_DEVICE( ZTMP7_DEVICE(:,:,:), ZTMP3_DEVICE(:,:,:) ) @@ -1119,19 +1119,19 @@ END IF #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZFLXZ(JI,JJ,JK) = ZF(JI,JJ,JK) & + PIMPL * XCTV*PLM(JI,JJ,JK)*PLEPS(JI,JJ,JK)*0.5 * ZTMP3_DEVICE(JI,JJ,JK) & + PIMPL * ZDFDDTDZ(JI,JJ,JK) * ZTMP4_DEVICE(JI,JJ,JK) & + PIMPL * ZDFDDRDZ(JI,JJ,JK) * ZTMP5_DEVICE(JI,JJ,JK) - END DO + !$mnh_end_do() #endif ! ! special case near the ground ( uncentred gradient ) #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(2) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU ) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU ) ZFLXZ(JI,JJ,IKB) = & (XCHT1 * PPHI3(JI,JJ,IKB+KKL) + XCHT2 * PPSI3(JI,JJ,IKB+KKL)) & *( PEXPL * & @@ -1149,7 +1149,7 @@ END IF +ZCOEFF(JI,JJ,IKB+KKL )*PRP(JI,JJ,IKB+KKL ) & +ZCOEFF(JI,JJ,IKB )*PRP(JI,JJ,IKB )) & ) - END DO + !$mnh_end_do() !$acc end kernels !$acc kernels present_cr(ZFLXZ,PSIGS) ZFLXZ(:,:,KKA) = ZFLXZ(:,:,IKB) @@ -1249,9 +1249,9 @@ END IF #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP1_DEVICE(JI,JJ,JK) = PPSI3(JI,JJ,JK)*BR_P2(PDR_DZ(JI,JJ,JK)) - END DO + !$mnh_end_do() #endif !$acc end kernels CALL MZF_DEVICE( ZTMP1_DEVICE(:,:,:), ZTMP2_DEVICE(:,:,:) ) @@ -1259,9 +1259,9 @@ END IF #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZF (JI,JJ,JK) = XCTV*PLM(JI,JJ,JK)*PLEPS(JI,JJ,JK)*ZTMP2_DEVICE(JI,JJ,JK) - END DO + !$mnh_end_do() #endif ZDFDDRDZ(:,:,:) = 0. ! this term, because of discretization, is treated separately !$acc end kernels @@ -1407,18 +1407,18 @@ END IF #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * ZTMP3_DEVICE(JI,JJ,JK) / PDZZ(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL MZF_DEVICE( ZTMP2_DEVICE(:,:,:), ZTMP1_DEVICE(:,:,:) ) !$acc kernels #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZTMP3_DEVICE(JI,JJ,JK) / PDZZ(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL MZF_DEVICE( ZTMP2_DEVICE(:,:,:), ZTMP3_DEVICE(:,:,:) ) #ifdef MNH_COMPILER_CCE @@ -1429,11 +1429,11 @@ END IF #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZFLXZ(JI,JJ,JK) = ZF(JI,JJ,JK) & + PIMPL * XCTV*PLM(JI,JJ,JK)*PLEPS(JI,JJ,JK) * ZTMP1_DEVICE(JI,JJ,JK) & + PIMPL * ZDFDDRDZ(JI,JJ,JK) * ZTMP3_DEVICE(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels #endif ! @@ -1457,7 +1457,7 @@ END IF #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(2) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU ) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU ) ZFLXZ(JI,JJ,IKB) = XCHV * PPSI3(JI,JJ,IKB+KKL) * PLM(JI,JJ,IKB) & * PLEPS(JI,JJ,IKB) & *( PEXPL * & @@ -1469,7 +1469,7 @@ END IF +ZCOEFF(JI,JJ,IKB+KKL )*PRP(JI,JJ,IKB+KKL ) & +ZCOEFF(JI,JJ,IKB )*PRP(JI,JJ,IKB )) & ) - END DO + !$mnh_end_do() !$acc end kernels #endif ! diff --git a/src/MNH/turb_ver_thermo_flux.f90 b/src/MNH/turb_ver_thermo_flux.f90 index bf4f25c3eebe12f619637c6f5343249d176d59e2..4dae26c8d57bb9c1e6af8b5bf45ef9e15323ddda 100644 --- a/src/MNH/turb_ver_thermo_flux.f90 +++ b/src/MNH/turb_ver_thermo_flux.f90 @@ -748,9 +748,9 @@ CALL DZM_DEVICE(PTHLM, ZTMP1_DEVICE ) #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZF (JI,JJ,JK) = -XCSHF*PPHI3(JI,JJ,JK)*ZKEFF(JI,JJ,JK)*ZTMP1_DEVICE(JI,JJ,JK)/PDZZ(JI,JJ,JK) -END DO +!$mnh_end_do() !$acc end kernels ! CALL D_PHI3DTDZ_O_DDTDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,GUSERV,ZTMP2_DEVICE) @@ -758,9 +758,9 @@ CALL D_PHI3DTDZ_O_DDTDZ(PPHI3,PREDTH1,PREDR1,PRED2TH3,PRED2THR3,HTURBDIM,GUSERV, #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZDFDDTDZ(JI,JJ,JK) = -XCSHF*ZKEFF(JI,JJ,JK)*ZTMP2_DEVICE(JI,JJ,JK) -END DO +!$mnh_end_do() !$acc end kernels #endif ! @@ -981,9 +981,9 @@ CALL DZM_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZFLXZ(JI,JJ,JK) = ZF(JI,JJ,JK) + PIMPL * ZDFDDTDZ(JI,JJ,JK) * ZTMP2_DEVICE(JI,JJ,JK) / PDZZ(JI,JJ,JK) -END DO +!$mnh_end_do() !$acc end kernels #endif ! replace the flux by the Leonard terms @@ -1058,9 +1058,9 @@ ELSE #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * ZFLXZ(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL MZF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE ) !$acc kernels @@ -1211,11 +1211,11 @@ IF (LLES_CALL) THEN !* diagnostic of mixing coefficient for heat CALL DZM_DEVICE( PTHLP, ZA ) !$acc kernels - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) IF (ZA(JI,JJ,JK)==0.) THEN ZA(JI,JJ,JK)=1.E-6 END IF - END DO + !$mnh_end_do() ZA(:,:,:) = - ZFLXZ(:,:,:) / ZA(:,:,:) * PDZZ(:,:,:) ZA(:,:,IKB) = XCSHF*PPHI3(:,:,IKB)*ZKEFF(:,:,IKB) !Copy ZA into ZTMP1_DEVICE to prevent aliasing in the following call to MZF_DEVICE @@ -1259,9 +1259,9 @@ IF (KRR /= 0) THEN #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZF (JI,JJ,JK) = -XCSHF*PPSI3(JI,JJ,JK)*ZKEFF(JI,JJ,JK)*ZTMP1_DEVICE(JI,JJ,JK)/PDZZ(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL D_PSI3DRDZ_O_DDRDZ(PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,GUSERV,ZTMP1_DEVICE) !CALL D_PHI3DRDZ_O_DDRDZ_DEVICE(PPSI3,PREDR1,PREDTH1,PRED2R3,PRED2THR3,HTURBDIM,GUSERV,ZTMP1_DEVICE) @@ -1269,9 +1269,9 @@ IF (KRR /= 0) THEN #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZDFDDRDZ(JI,JJ,JK) = -XCSHF*ZKEFF(JI,JJ,JK)*ZTMP1_DEVICE(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels #endif ! @@ -1495,9 +1495,9 @@ IF (KRR /= 0) THEN #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif -DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) +!$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZFLXZ(JI,JJ,JK) = ZF(JI,JJ,JK) + PIMPL * ZDFDDRDZ(JI,JJ,JK) *ZTMP2_DEVICE(JI,JJ,JK) / PDZZ(JI,JJ,JK) -END DO +!$mnh_end_do() !$acc end kernels #endif ! @@ -1558,18 +1558,18 @@ END DO #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZTMP2_DEVICE(JI,JJ,JK) = ZTMP1_DEVICE(JI,JJ,JK) * ZFLXZ(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels CALL MZF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE ) !$acc kernels #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZA(JI,JJ,JK) = PBETA(JI,JJ,JK) * ZTMP3_DEVICE(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels #ifdef MNH_COMPILER_CCE !$acc kernels present(ZA) @@ -1590,9 +1590,9 @@ END DO #else CALL MZM_DEVICE(PEMOIST,ZTMP1_DEVICE) !$acc kernels - DO CONCURRENT ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) + !$mnh_do_concurrent ( JI=1:JIU,JJ=1:JJU,JK=1:JKU) PWTHV(JI,JJ,JK) = PWTHV(JI,JJ,JK) + ZTMP1_DEVICE(JI,JJ,JK) * ZFLXZ(JI,JJ,JK) - END DO + !$mnh_end_do() !$acc end kernels #endif !$acc kernels