diff --git a/src/MNH/condensation.f90 b/src/MNH/condensation.f90 index a92e8dc74e71b26338cd3b7d2baee72750022920..a11aa885844b8275acc19f7ada5fa0da08fa305d 100644 --- a/src/MNH/condensation.f90 +++ b/src/MNH/condensation.f90 @@ -399,7 +399,7 @@ IKTB=1+JPVEXT IKTE=KKU-JPVEXT ! ! -!$acc kernels +!$acc kernels present_cr(zrt) PCLDFR(:,:,:) = 0. ! Initialize values PSIGRC(:,:,:) = 0. ! Initialize values ! @@ -412,13 +412,13 @@ PSIGRC(:,:,:) = 0. ! Initialize values ! latent heat of vaporisation/sublimation IF(GPRESENT_PLV .AND. GPRESENT_PLS) THEN !$acc data present( PLV, PLS ) -!$acc kernels +!$acc kernels present_cr(zlv,zls) ZLV(:,:,:)=PLV(:,:,:) ZLS(:,:,:)=PLS(:,:,:) !$acc end kernels !$acc end data ELSE -!$acc kernels +!$acc kernels present_cr(zlv,zls) ! latent heat of vaporisation/sublimation ZLV(KIB:KIE,KJB:KJE,IKTB:IKTE) = XLVTT + ( XCPV - XCL ) * ( PT(KIB:KIE,KJB:KJE,IKTB:IKTE) - XTT ) ZLS(KIB:KIE,KJB:KJE,IKTB:IKTE) = XLSTT + ( XCPV - XCI ) * ( PT(KIB:KIE,KJB:KJE,IKTB:IKTE) - XTT ) @@ -426,12 +426,12 @@ ELSE ENDIF IF(GPRESENT_PCPH) THEN !$acc data present( PCPH ) -!$acc kernels +!$acc kernels present_cr(zcpd) ZCPD(:,:,:)=PCPH(:,:,:) !$acc end kernels !$acc end data ELSE -!$acc kernels +!$acc kernels present_cr(zcpd) ZCPD(KIB:KIE,KJB:KJE,IKTB:IKTE) = XCPD + XCPV*PRV(KIB:KIE,KJB:KJE,IKTB:IKTE) & + XCL*PRC(KIB:KIE,KJB:KJE,IKTB:IKTE) + XCI*PRI(KIB:KIE,KJB:KJE,IKTB:IKTE) & + XCI*(PRS(KIB:KIE,KJB:KJE,IKTB:IKTE) + PRG(KIB:KIE,KJB:KJE,IKTB:IKTE) ) @@ -441,7 +441,7 @@ ENDIF !acc kernels ! Preliminary calculations needed for computing the "turbulent part" of Sigma_s IF ( .NOT. OSIGMAS ) THEN -!$acc kernels +!$acc kernels present_cr(ztmin,zzzp) ! store temperature at saturation ZTLK(KIB:KIE,KJB:KJE,IKTB:IKTE) = PT(KIB:KIE,KJB:KJE,IKTB:IKTE) & - ZLV(KIB:KIE,KJB:KJE,IKTB:IKTE)*PRC(KIB:KIE,KJB:KJE,IKTB:IKTE)/ZCPD(KIB:KIE,KJB:KJE,IKTB:IKTE) & diff --git a/src/MNH/sources_neg_correct.f90 b/src/MNH/sources_neg_correct.f90 index d27079dd00da2092e883ce0ba6d696d80beec495..f08c426fa5cbf672b38da78df30c33a1e0abb2e3 100644 --- a/src/MNH/sources_neg_correct.f90 +++ b/src/MNH/sources_neg_correct.f90 @@ -276,7 +276,7 @@ CLOUD: select case ( hcloud ) jrmax = Size( prrs, 4 ) do jr = 2, jrmax !PW: kernels directive inside do loop on jr because compiler bug... (NVHPC 21.7) -!$acc kernels +!$acc kernels present_cr(zexn,zcph,zlv) where ( prrs(:, :, :, jr) < 0. ) prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, jr) prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, jr) * zlv(:, :, :) / & @@ -286,7 +286,7 @@ CLOUD: select case ( hcloud ) !$acc end kernels end do -!$acc kernels +!$acc kernels present_cr(zexn,zcph,zlv) where ( prrs(:, :, :, 1) < 0. .and. prrs(:, :, :, 2) > 0. ) prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, 2) prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, 2) * zlv(:, :, :) / & @@ -368,7 +368,7 @@ CLOUD: select case ( hcloud ) end where !$acc end kernels do jsv = 2, 3 -!$acc kernels +!$acc kernels present_cr(zexn,zcph,zlv) !PW: kernels directive inside do loop on jr because compiler bug... (NVHPC 21.7) where ( prrs(:, :, :, jsv) < 0. .or. prsvs(:, :, :, nsv_c2r2beg - 1 + jsv) < 0. ) prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, jsv) @@ -379,7 +379,7 @@ CLOUD: select case ( hcloud ) end where !$acc end kernels end do -!$acc kernels +!$acc kernels present_cr(zexn,zcph,zlv) where ( prrs(:, :, :, 1) < 0. .and. prrs(:, :, :, 2) > 0. ) prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, 2) prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, 2) * zlv(:, :, :) / & @@ -391,7 +391,7 @@ CLOUD: select case ( hcloud ) ! ! case( 'LIMA' ) -!$acc kernels +!$acc kernels present_cr(zexn,zcph,zlv) ! Correction where rc<0 or Nc<0 if ( lwarm_lima ) then where ( prrs(:, :, :, 2) < xrtmin_lima(2) / ptstep .or. prsvs(:, :, :, nsv_lima_nc) < xctmin_lima(2) / ptstep ) @@ -422,7 +422,7 @@ CLOUD: select case ( hcloud ) !$acc end kernels ! Correction where ri<0 or Ni<0 if ( lcold_lima ) then -!$acc kernels +!$acc kernels present_cr(zexn,zcph,zls) where ( prrs(:, :, :, 4) < xrtmin_lima(4) / ptstep .or. prsvs(:, :, :, nsv_lima_ni) < xctmin_lima(4) / ptstep ) prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, 4) prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, 4) * zls(:, :, :) / & @@ -434,7 +434,7 @@ CLOUD: select case ( hcloud ) if ( hbudname /= 'NETUR' ) then do jr = 5, Size( prrs, 4 ) !PW: kernels directive inside do loop on jr because compiler bug... (NVHPC 21.7) -!$acc kernels +!$acc kernels present_cr(zexn,zcph,zls) where ( prrs(:, :, :, jr) < 0. ) prrs(:, :, :, 1) = prrs(:, :, :, 1) + prrs(:, :, :, jr) prths(:, :, :) = prths(:, :, :) - prrs(:, :, :, jr) * zls(:, :, :) / & @@ -445,7 +445,7 @@ CLOUD: select case ( hcloud ) end do end if if(krr > 3) then -!$acc kernels +!$acc kernels present_cr(zcor,zexn,zcph,zls) where ( prrs(:, :, :, 1) < 0. .and. prrs(:, :, :, 4) > 0. ) zcor(:, :, :) = Min( -prrs(:, :, :, 1), prrs(:, :, :, 4) ) prrs(:, :, :, 1) = prrs(:, :, :, 1) + zcor(:, :, :) diff --git a/src/MNH/turb.f90 b/src/MNH/turb.f90 index 7ff9e29c6ac83295cab74bcf501e001167e185f5..f26a7b23ea08818f6338911fdc7c8e3ab197eb0d 100644 --- a/src/MNH/turb.f90 +++ b/src/MNH/turb.f90 @@ -712,7 +712,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 (HTURBLEN=='BL89' .OR. HTURBLEN=='RM17' .OR. HTURBLEN=='ADAP' .OR. ORMC01) THEN DO CONCURRENT(JI=1:JIU,JJ=1:JJU,JK=1:JKU) diff --git a/src/MNH/turb_ver_thermo_corr.f90 b/src/MNH/turb_ver_thermo_corr.f90 index a97503d7cbd8d6eb37bdc193b8c8dad8318d1742..993a048fc250e3829cf477033ed45232b54e4f2e 100644 --- a/src/MNH/turb_ver_thermo_corr.f90 +++ b/src/MNH/turb_ver_thermo_corr.f90 @@ -715,7 +715,7 @@ END IF ! *DZM(PTHLP(:,:,:) - PTHLM(:,:,:)) / PDZZ(:,:,:) ) & + PIMPL * ZDFDDTDZ(:,:,:) * MZF(DZM(PTHLP(:,:,:) - PTHLM(:,:,:)) / PDZZ(:,:,:) ) #else - !$acc kernels + !$acc kernels present_cr(ztmp1_device) ZTMP1_DEVICE(:,:,:) = PTHLP(:,:,:) - PTHLM(:,:,:) !$acc end kernels CALL DZM_DEVICE( ZTMP1_DEVICE(:,:,:), ZTMP2_DEVICE(:,:,:) ) @@ -820,22 +820,22 @@ END IF CALL LES_MEAN_SUBGRID( ZFLXZ(:,:,:), X_LES_SUBGRID_Thl2 ) ! CALL MZF_DEVICE( PWM(:,:,:), ZTMP1_DEVICE(:,:,:) ) - !$acc kernels + !$acc kernels present_cr(ztmp2_device) ZTMP2_DEVICE(:,:,:) = ZTMP1_DEVICE(:,:,:)*ZFLXZ(:,:,:) !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP2_DEVICE(:,:,:), X_LES_RES_W_SBG_Thl2 ) ! - !$acc kernels + !$acc kernels present_cr(ztmp1_device) ZTMP1_DEVICE(:,:,:) = -2.*XCTD*PSQRT_TKE(:,:,:)*ZFLXZ(:,:,:)/PLEPS(:,:,:) !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE(:,:,:), X_LES_SUBGRID_DISS_Thl2 ) ! - !$acc kernels + !$acc kernels present_cr(ztmp1_device) ZTMP1_DEVICE(:,:,:) = PETHETA(:,:,:)*ZFLXZ(:,:,:) !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE(:,:,:), X_LES_SUBGRID_ThlThv ) ! - !$acc kernels + !$acc kernels present_cr(ztmp1_device) ZTMP1_DEVICE(:,:,:) = -XA3*PBETA(:,:,:)*PETHETA(:,:,:)*ZFLXZ(:,:,:) !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE(:,:,:), X_LES_SUBGRID_ThlPz, .TRUE. ) @@ -1045,7 +1045,7 @@ END IF + PIMPL * ZDFDDTDZ(:,:,:) * MZF(DZM(PTHLP(:,:,:) - PTHLM(:,:,:)) / PDZZ(:,:,:) ) & + PIMPL * ZDFDDRDZ(:,:,:) * MZF(DZM(PRP(:,:,:) - PRM(:,:,:,1)) / PDZZ(:,:,:) ) #else - !$acc kernels + !$acc kernels present_cr(ztmp1_device,ztmp2_device) ZTMP1_DEVICE(:,:,:) = PTHLP(:,:,:) - PTHLM(:,:,:) ZTMP2_DEVICE(:,:,:) = PRP(:,:,:) - PRM(:,:,:,1) !$acc end kernels @@ -1069,7 +1069,7 @@ END IF HTURBDIM,GUSERV,ZTMP5_DEVICE(:,:,:)) ! d(phi3*drdz )/ddrdz term CALL D_PSI3DRDZ_O_DDRDZ(PPSI3(:,:,:),PREDR1(:,:,:),PREDTH1(:,:,:),PRED2R3(:,:,:),PRED2THR3(:,:,:), & HTURBDIM,GUSERV,ZTMP6_DEVICE(:,:,:)) ! d(psi3*drdz )/ddrdz term - !$acc kernels + !$acc kernels present_cr(ztmp1_device,ztmp8_device) ZTMP1_DEVICE(:,:,:) = PTHLP(:,:,:) - PTHLM(:,:,:) ZTMP8_DEVICE(:,:,:) = PRP(:,:,:) - PRM(:,:,:,1) !$acc end kernels @@ -1088,7 +1088,7 @@ END IF END DO !$acc end kernels !!! - !$acc kernels + !$acc kernels present_cr(ztmp1_device,ztmp2_device) ZTMP1_DEVICE(:,:,:) = PTHLP(:,:,:) - PTHLM(:,:,:) ZTMP2_DEVICE(:,:,:) = PRP(:,:,:) - PRM(:,:,:,1) !$acc end kernels @@ -1107,7 +1107,7 @@ END IF CALL MZF_DEVICE( ZTMP7_DEVICE(:,:,:), ZTMP3_DEVICE(:,:,:) ) CALL MZF_DEVICE( ZTMP1_DEVICE(:,:,:), ZTMP4_DEVICE(:,:,:) ) CALL MZF_DEVICE( ZTMP2_DEVICE(:,:,:), ZTMP5_DEVICE(:,:,:) ) - !$acc kernels + !$acc kernels present_cr(zflxz) #ifdef MNH_COMPILER_NVHPC !$acc loop independent collapse(3) #endif @@ -1185,32 +1185,32 @@ END IF CALL LES_MEAN_SUBGRID( ZFLXZ(:,:,:), X_LES_SUBGRID_THlRt ) ! CALL MZF_DEVICE( PWM(:,:,:), ZTMP1_DEVICE(:,:,:) ) - !$acc kernels + !$acc kernels present_cr(ztmp2_device) ZTMP2_DEVICE(:,:,:) = ZTMP1_DEVICE(:,:,:)*ZFLXZ(:,:,:) !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP2_DEVICE(:,:,:), X_LES_RES_W_SBG_ThlRt ) ! - !$acc kernels + !$acc kernels present_cr(ztmp1_device) ZTMP1_DEVICE(:,:,:) = -2.*XCTD*PSQRT_TKE(:,:,:)*ZFLXZ(:,:,:)/PLEPS(:,:,:) !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE(:,:,:), X_LES_SUBGRID_DISS_ThlRt ) ! - !$acc kernels + !$acc kernels present_cr(ztmp1_device) ZTMP1_DEVICE(:,:,:) = PETHETA(:,:,:)*ZFLXZ(:,:,:) !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE(:,:,:), X_LES_SUBGRID_RtThv ) ! - !$acc kernels + !$acc kernels present_cr(ztmp1_device) ZTMP1_DEVICE(:,:,:) = -XA3*PBETA(:,:,:)*PETHETA(:,:,:)*ZFLXZ(:,:,:) !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE(:,:,:), X_LES_SUBGRID_RtPz, .TRUE. ) ! - !$acc kernels + !$acc kernels present_cr(ztmp1_device) ZTMP1_DEVICE(:,:,:) = PEMOIST(:,:,:)*ZFLXZ(:,:,:) !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE(:,:,:), X_LES_SUBGRID_ThlThv , .TRUE. ) ! - !$acc kernels + !$acc kernels present_cr(ztmp1_device) ZTMP1_DEVICE(:,:,:) = -XA3*PBETA(:,:,:)*PEMOIST(:,:,:)*ZFLXZ(:,:,:) !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE(:,:,:), X_LES_SUBGRID_ThlPz, .TRUE. ) @@ -1391,7 +1391,7 @@ END IF #else CALL D_PSI3DRDZ2_O_DDRDZ(PPSI3(:,:,:),PREDR1(:,:,:),PREDTH1(:,:,:),PRED2R3(:,:,:),PRED2THR3(:,:,:),PDR_DZ(:,:,:), & HTURBDIM,GUSERV,ZTMP1_DEVICE(:,:,:)) - !$acc kernels + !$acc kernels present_cr(ztmp2_device) ZTMP2_DEVICE(:,:,:) = PRP(:,:,:) - PRM(:,:,:,1) !$acc end kernels CALL DZM_DEVICE( ZTMP2_DEVICE(:,:,:), ZTMP3_DEVICE(:,:,:) ) diff --git a/src/MNH/turb_ver_thermo_flux.f90 b/src/MNH/turb_ver_thermo_flux.f90 index 62bff9543488fe3c66f1293995e814969a17bead..bf4f25c3eebe12f619637c6f5343249d176d59e2 100644 --- a/src/MNH/turb_ver_thermo_flux.f90 +++ b/src/MNH/turb_ver_thermo_flux.f90 @@ -703,7 +703,7 @@ IF(LHGRAD) THEN #ifdef MNH_OPENACC call Print_msg( NVERB_FATAL, 'GEN', 'TURB_VER_THERMO_FLUX', 'OpenACC: LHGRAD=T not yet implemented' ) #endif -!$acc kernels +!$acc kernels present_cr(zcld_thold) IF ( KRRL >= 1 ) THEN IF ( KRRI >= 1 ) THEN ZCLD_THOLD(:,:,:) = PRM(:,:,:,2) + PRM(:,:,:,4) @@ -929,7 +929,7 @@ ELSE ! No coupling O and A cases END IF ! IF (GOCEAN) THEN -!$acc kernels +!$acc kernels present_cr(zf) ZF(:,:,IKE) = XSSTFL(:,:) *0.5*(1. + PRHODJ(:,:,KKU) / PRHODJ(:,:,IKE)) !$acc end kernels ELSE !end ocean case (in nocoupled case) @@ -1427,13 +1427,13 @@ IF (KRR /= 0) THEN ! is taken into account in the vertical part ! IF (HTURBDIM=='3DIM') THEN -!$acc kernels present_cr(ZF) +!$acc kernels present_cr(zf) ZF(:,:,IKB) = ( PIMPL*PSFRP(:,:) + PEXPL*PSFRM(:,:) ) & * PDIRCOSZW(:,:) & * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB)) !$acc end kernels ELSE -!$acc kernels +!$acc kernels present_cr(zf) ZF(:,:,IKB) = ( PIMPL*PSFRP(:,:) + PEXPL*PSFRM(:,:) ) & / PDIRCOSZW(:,:) & * 0.5 * (1. + PRHODJ(:,:,KKA) / PRHODJ(:,:,IKB)) @@ -1503,7 +1503,7 @@ END DO ! ! replace the flux by the Leonard terms above ZALT and ZCLD_THOLD IF (LHGRAD) THEN -!$acc kernels +!$acc kernels present_cr(zf_new,zflxz) WHERE ( (ZCLD_THOLD(:,:,:) >= ZCLDTHOLD ) .AND. ( ZALT(:,:,:) >= ZALTHGRAD ) ) ZFLXZ(:,:,:) = ZF_NEW(:,:,:) END WHERE @@ -1736,7 +1736,7 @@ IF ( ((OTURB_FLX .AND. tpfile%lopened) .OR. LLES_CALL) .AND. (KRRL > 0) ) THEN ZA(:,:,:) = DZM(PIMPL * PTHLP(:,:,:) + PEXPL * PTHLM(:,:,:)) / PDZZ(:,:,:) * & (-PPHI3(:,:,:)*MZM(PLM(:,:,:)*PSQRT_TKE(:,:,:))) * XCSHF #else -!$acc kernels +!$acc kernels present_cr(ztmp1_device) ZTMP1_DEVICE(:,:,:) = PIMPL * PTHLP(:,:,:) + PEXPL * PTHLM(:,:,:) !$acc end kernels CALL DZM_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE )