diff --git a/src/ZSOLVER/p_abs.f90 b/src/ZSOLVER/p_abs.f90 index 3ea1219e40ef239168cdb6e2a901fc637f64e7e9..fff6eca846c399cef803583c2bc0b0a9430ec03b 100644 --- a/src/ZSOLVER/p_abs.f90 +++ b/src/ZSOLVER/p_abs.f90 @@ -123,6 +123,10 @@ USE MODE_REPRO_SUM #if defined(MNH_BITREP) || defined(MNH_BITREP_OMP) USE MODI_BITREP #endif +#ifdef MNH_BITREP_OMP +!$mnh_undef(LOOP) +!$mnh_undef(OPENACC) +#endif #ifdef MNH_OPENACC USE MODE_MNH_ZWORK, ONLY: MNH_MEM_GET, MNH_MEM_POSITION_PIN, MNH_MEM_RELEASE #endif @@ -289,8 +293,7 @@ IF ( CEQNSYS=='DUR' .OR. CEQNSYS=='MAE' ) THEN ! !$acc loop seq DO JK = IKB,IKE - !$acc_nv loop independent collapse(2) - DO CONCURRENT (JI = IIB:IIE , JJ = IJB:IJE ) + !$mnh_do_concurrent(JI = IIB:IIE , JJ = IJB:IJE ) ZMASSGUESS_2D(JI,JJ) = ZMASSGUESS_2D(JI,JJ) + & #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) (PEXNREF(JI,JJ,JK)+PPHIT(JI,JJ,JK))**ZCVD_O_RD & @@ -301,7 +304,7 @@ IF ( CEQNSYS=='DUR' .OR. CEQNSYS=='MAE' ) THEN ZMASS_O_PI_2D(JI,JJ) = ZMASS_O_PI_2D(JI,JJ) + ZWORK(JI,JJ,JK) / PTHETAV(JI,JJ,JK) ZWATERMASST_2D(JI,JJ) = ZWATERMASST_2D(JI,JJ) + & ZRTOT(JI,JJ,JK) * ZWORK(JI,JJ,JK) * PRHODREF(JI,JJ,JK) - END DO + !$mnh_end_do() END DO !$acc end kernels ! @@ -348,8 +351,7 @@ IF ( CEQNSYS=='DUR' .OR. CEQNSYS=='MAE' ) THEN !$acc kernels !$acc loop seq DO JK = IKB,IKE - !$acc_nv loop independent collapse(2) - DO CONCURRENT (JI = IIB:IIE , JJ = IJB:IJE ) + !$mnh_do_concurrent(JI = IIB:IIE , JJ = IJB:IJE ) ZMASSGUESS_2D(JI,JJ) = ZMASSGUESS_2D(JI,JJ) + & #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) (PEXNREF(JI,JJ,JK)+PPHIT(JI,JJ,JK))**ZCVD_O_RD & @@ -357,7 +359,7 @@ IF ( CEQNSYS=='DUR' .OR. CEQNSYS=='MAE' ) THEN BR_POW((PEXNREF(JI,JJ,JK)+PPHIT(JI,JJ,JK)),ZCVD_O_RD) & #endif * ZWORK(JI,JJ,JK) / PTHETAV(JI,JJ,JK) - END DO + !$mnh_end_do() END DO !$acc end kernels ELSE diff --git a/src/ZSOLVER/turb.f90 b/src/ZSOLVER/turb.f90 index b4a4fff2c118bea73d1f0c2b74556ab5007ce139..c6b85c5d1cf444a2d29b81aabc888993f78280f3 100644 --- a/src/ZSOLVER/turb.f90 +++ b/src/ZSOLVER/turb.f90 @@ -14,6 +14,10 @@ module mode_turb #if defined(MNH_BITREP) || defined(MNH_BITREP_OMP) use modi_bitrep #endif +#ifdef MNH_BITREP_OMP +!$mnh_undef(LOOP) +!$mnh_undef(OPENACC) +#endif implicit none @@ -710,7 +714,7 @@ GTURBLEN_BL89_TURBLEN_RM17_TURBLEN_ADAP_ORMC01 = & HTURBLEN=='BL89' .OR. HTURBLEN=='RM17' .OR. HTURBLEN == 'ADAP' .OR. ORMC01 ! !$acc update device(PTHLT,PRT) -!$acc kernels present_cr(ZCOEF_DISS,ZTHLM,ZRM) +!$acc kernels present_cr(ZCOEF_DISS,ZTHLM,ZRM,zcp) !Copy data into ZTHLM and ZRM only if needed IF (GTURBLEN_BL89_TURBLEN_RM17_TURBLEN_ADAP_ORMC01) THEN DO CONCURRENT(JI=1:JIU,JJ=1:JJU,JK=1:JKU) @@ -1009,11 +1013,13 @@ IF (ORMC01) THEN #ifdef MNH_OPENACC call Print_msg( NVERB_FATAL, 'GEN', 'TURB', 'OpenACC: ORMC01 not yet implemented' ) #endif +!$mnh_expand_array(JI=1:JIU,JJ=1:JJU) #if !defined(MNH_BITREP) && !defined(MNH_BITREP_OMP) ZUSTAR(:,:) = (PSFU(:,:)**2+PSFV(:,:)**2)**(0.25) #else ZUSTAR(:,:) = BR_POW( BR_P2( PSFU(:,:) ) + BR_P2( PSFV(:,:) ), 0.25 ) #endif +!$mnh_end_expand_array() IF (KRR>0) THEN ZLMO(:,:) = LMO( ZUSTAR(:,:), ZTHLM(:,:,IKB), ZRM(:,:,IKB,1), PSFTH(:,:), PSFRV(:,:) ) ELSE @@ -2323,6 +2329,7 @@ IF (.NOT. ORMC01) THEN DO JJ=1,JJU DO JI=1,JIU 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 @@ -2332,6 +2339,7 @@ IF (.NOT. ORMC01) THEN 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 @@ -2678,6 +2686,7 @@ IF (.NOT. ORMC01) THEN DO JJ=1,SIZE(PLM,2) DO JI=1,SIZE(PLM,1) 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 @@ -2687,6 +2696,7 @@ IF (.NOT. ORMC01) THEN 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)