From 797a64ead43ae9bf60fffe451a90469b7b211b81 Mon Sep 17 00:00:00 2001 From: Juan ESCOBAR <juan.escobar@aero.obs-mip.fr> Date: Fri, 15 Apr 2022 19:01:35 +0200 Subject: [PATCH] Juan 15/04/2022:MNH/ZSOLVER/turb_hor_thermo_flux.f90, Cray GPU Opt/Bug bypass, add present_cr + acc_nv , where needeed --- src/MNH/turb_hor_thermo_flux.f90 | 191 +++++--------- src/ZSOLVER/turb_hor_thermo_flux.f90 | 374 ++++++--------------------- 2 files changed, 155 insertions(+), 410 deletions(-) diff --git a/src/MNH/turb_hor_thermo_flux.f90 b/src/MNH/turb_hor_thermo_flux.f90 index 4e0bd16f6..52cff5188 100644 --- a/src/MNH/turb_hor_thermo_flux.f90 +++ b/src/MNH/turb_hor_thermo_flux.f90 @@ -332,9 +332,7 @@ ZFLX(:,:,IKE+1) = ZFLX(:,:,IKE) CALL MXM_DEVICE( PK, ZTMP1_DEVICE ) CALL GX_M_U_DEVICE(1,IKU,1,PTHLM,PDXX,PDZZ,PDZX,ZTMP2_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC -!$acc loop independent collapse(3) -#endif +!$acc_nv loop independent collapse(3) 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 @@ -355,18 +353,18 @@ ZFLX(:,:,IKB:IKB) = -XCSHF * MXM( PK(:,:,IKB:IKB) ) * & #else CALL MXM_DEVICE( PK(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1) ) CALL DXM_DEVICE( PTHLM(:,:,IKB:IKB), ZTMP2_DEVICE(:,:,1:1) ) -!$acc kernels +!$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE(:,:,1) = ZCOEFF(:,:,IKB+2)*PTHLM(:,:,IKB+2) & +ZCOEFF(:,:,IKB+1)*PTHLM(:,:,IKB+1) & +ZCOEFF(:,:,IKB )*PTHLM(:,:,IKB ) !$acc end kernels CALL MXM_DEVICE( ZTMP3_DEVICE(:,:,1:1), ZTMP4_DEVICE(:,:,1:1)) -!$acc kernels +!$acc kernels present_cr(ZFLX,ZTMP1_DEVICE) ZFLX(:,:,IKB) = -XCSHF * ZTMP1_DEVICE(:,:,1) * & ( ZTMP2_DEVICE(:,:,1) * PINV_PDXX(:,:,IKB) - ZTMP4_DEVICE(:,:,1) & *0.5* ( PDZX(:,:,IKB+1)+PDZX(:,:,IKB)) & * PINV_PDXX(:,:,IKB) ) -!$acc end kernels +! acc end kernels #endif ! extrapolates the flux under the ground so that the vertical average with ! the IKB flux gives the ground value ( warning the tangential surface @@ -375,17 +373,13 @@ ZFLX(:,:,IKB) = -XCSHF * ZTMP1_DEVICE(:,:,1) * & ZFLX(:,:,IKB-1:IKB-1) = 2. * MXM( SPREAD( PSFTHM(:,:)* PDIRCOSXW(:,:), 3,1) ) & - ZFLX(:,:,IKB:IKB) #else -!$acc kernels -!PW: BUG: commented 'acc loop independent collapse(2)' to workaround compiler bug (NVHPC 21.1) -#ifdef MNH_COMPILER_NVHPC -!acc loop independent collapse(2) -#endif +! acc kernels DO CONCURRENT ( JI=1:JIU,JJ=1:JJU ) ZTMP1_DEVICE(JI,JJ,1) = PSFTHM(JI,JJ)* PDIRCOSXW(JI,JJ) END DO !$acc end kernels CALL MXM_DEVICE( ZTMP1_DEVICE(:,:,1:1), ZTMP2_DEVICE(:,:,1:1) ) -!$acc kernels +!$acc kernels present_cr(ZFLX) ZFLX(:,:,IKB-1) = 2. * ZTMP2_DEVICE(:,:,1) - ZFLX(:,:,IKB) !$acc end kernels #endif @@ -404,36 +398,28 @@ END IF IF (.NOT. LFLAT) THEN CALL MXM_DEVICE(PRHODJ, ZTMP1_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels CALL DXF_DEVICE(ZTMP2_DEVICE, ZTMP3_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels CALL MZM_DEVICE(ZTMP2_DEVICE,ZTMP4_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels CALL MXF_DEVICE(ZTMP2_DEVICE, ZTMP4_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC -!$acc loop independent collapse(3) -#endif +!$acc_nv loop independent collapse(3) 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 @@ -505,23 +491,23 @@ IF ( KRRL >= 1 ) THEN !$acc end kernels CALL MZM_DEVICE( ZTMP1_DEVICE, ZTMP4_DEVICE ) CALL MXM_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZTMP1_DEVICE) ZTMP1_DEVICE(:,:,:) = ZTMP2_DEVICE(:,:,:) *ZFLX(:,:,:) !$acc end kernels CALL MXF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE) - !$acc kernels + !$acc kernels present_cr(ZTMP1_DEVICE) ZTMP1_DEVICE(:,:,:) = ZFLX(:,:,:)*PINV_PDXX(:,:,:) !$acc end kernels CALL MZM_DEVICE( ZTMP1_DEVICE, ZTMP5_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZTMP6_DEVICE) ZTMP6_DEVICE(:,:,:) = PDZX(:,:,:)*ZTMP5_DEVICE(:,:,:) !$acc end kernels CALL MXF_DEVICE( ZTMP6_DEVICE, ZTMP5_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZTMP6_DEVICE) ZTMP6_DEVICE(:,:,:) = ZTMP4_DEVICE(:,:,:)*ZTMP5_DEVICE(:,:,:) !$acc end kernels CALL MZF_DEVICE( ZTMP6_DEVICE, ZTMP7_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZFLXC) ZFLXC(:,:,:) = 2.*( ZTMP2_DEVICE(:,:,:) +ZTMP7_DEVICE(:,:,:) ) !$acc end kernels IF ( KRRI >= 1 ) THEN @@ -529,11 +515,11 @@ IF ( KRRL >= 1 ) THEN ZTMP1_DEVICE(:,:,:) = PRHODJ(:,:,:)*PATHETA(:,:,:)*PSRCM(:,:,:) !$acc end kernels CALL MXM_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZTMP6_DEVICE) ZTMP6_DEVICE(:,:,:) = ZTMP2_DEVICE(:,:,:)*ZFLX(:,:,:)*PINV_PDXX(:,:,:) !$acc end kernels CALL DXF_DEVICE( ZTMP6_DEVICE, ZTMP2_DEVICE) - !$acc kernels + !$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE(:,:,:) = ZTMP4_DEVICE(:,:,:)*ZTMP5_DEVICE(:,:,:)*PINV_PDZZ(:,:,:) !$acc end kernels CALL DZF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE ) @@ -636,7 +622,7 @@ IF (KSPLT==1 .AND. LLES_CALL) THEN ZTMP3_DEVICE(:,:,:) = ZTMP1_DEVICE(:,:,:)*ZTMP2_DEVICE(:,:,:) !$acc end kernels CALL MXF_DEVICE(ZTMP3_DEVICE,ZTMP1_DEVICE) - CALL MZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) + CALL MZF_DEVICE(ZTMP1_DEVICE,ZTMP2_DEVICE) CALL LES_MEAN_SUBGRID( ZTMP2_DEVICE,X_LES_RES_ddxa_W_SBG_UaThl , .TRUE. ) ! CALL GX_M_M_DEVICE(PTHLM,PDXX,PDZZ,PDZX,ZTMP1_DEVICE) @@ -779,9 +765,7 @@ END IF CALL MXM_DEVICE( PK, ZTMP1_DEVICE ) CALL GX_M_U_DEVICE(1,IKU,1,PRM(:,:,:,1),PDXX,PDZZ,PDZX,ZTMP2_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC -!$acc loop independent collapse(3) -#endif +!$acc_nv loop independent collapse(3) 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 @@ -792,13 +776,13 @@ END DO ! gradient CALL MXM_DEVICE( PK(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1) ) CALL DXM_DEVICE(PRM(:,:,IKB:IKB,1), ZTMP2_DEVICE(:,:,1:1)) -!$acc kernels +!$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE(:,:,1) = ZCOEFF(:,:,IKB+2)*PRM(:,:,IKB+2,1) & +ZCOEFF(:,:,IKB+1)*PRM(:,:,IKB+1,1) & +ZCOEFF(:,:,IKB )*PRM(:,:,IKB ,1) !$acc end kernels CALL MXM_DEVICE(ZTMP3_DEVICE(:,:,1:1),ZTMP4_DEVICE(:,:,1:1)) -!$acc kernels +!$acc kernels present_cr(ZFLX) ZFLX(:,:,IKB) = -XCHF * ZTMP1_DEVICE(:,:,1) * & ( ZTMP2_DEVICE(:,:,1) * PINV_PDXX(:,:,IKB) & -ZTMP4_DEVICE(:,:,1) & @@ -810,7 +794,7 @@ END DO ZTMP1_DEVICE(:,:,1) = PSFRM(:,:)* PDIRCOSXW(:,:) !$acc end kernels CALL MXM_DEVICE(ZTMP1_DEVICE(:,:,1:1),ZTMP2_DEVICE(:,:,1:1)) - !$acc kernels + !$acc kernels present_cr(ZFLX) ZFLX(:,:,IKB-1) = 2. * ZTMP2_DEVICE(:,:,1) - ZFLX(:,:,IKB) !$acc end kernels @@ -820,45 +804,35 @@ END DO IF (.NOT. LFLAT) THEN CALL MXM_DEVICE(PRHODJ,ZTMP1_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels CALL DXF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE ) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels CALL MZM_DEVICE(ZTMP2_DEVICE,ZTMP4_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels CALL MXF_DEVICE(ZTMP2_DEVICE,ZTMP4_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels - CALL DZF_DEVICE( ZTMP2_DEVICE, ZTMP4_DEVICE ) + CALL DZF_DEVICE(ZTMP2_DEVICE,ZTMP4_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 @@ -877,36 +851,33 @@ END DO ! Compute the equivalent tendancy for Rc and Ri ! IF ( KRRL >= 1 ) THEN - !$acc kernels + !$acc kernels present_cr(ZTMP2_DEVICE) ZTMP1_DEVICE(:,:,:) = PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) ZTMP2_DEVICE(:,:,:) = ZFLX(:,:,:)*PINV_PDXX(:,:,:) !$acc end kernels CALL MXM_DEVICE( ZTMP1_DEVICE, ZTMP8_DEVICE ) IF (.NOT. LFLAT) THEN - !$acc kernels + !$acc kernels present_cr(ZTMP4_DEVICE) ZTMP4_DEVICE(:,:,:) = ZTMP8_DEVICE(:,:,:) * ZFLX(:,:,:) !$acc end kernels CALL MXF_DEVICE( ZTMP4_DEVICE, ZTMP3_DEVICE ) CALL MZM_DEVICE( ZTMP1_DEVICE, ZTMP4_DEVICE ) CALL MZM_DEVICE( ZTMP2_DEVICE, ZTMP5_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZTMP6_DEVICE) ZTMP6_DEVICE(:,:,:) = PDZX(:,:,:)*ZTMP5_DEVICE(:,:,:) !$acc end kernels CALL MXF_DEVICE( ZTMP6_DEVICE, ZTMP5_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZTMP6_DEVICE) ZTMP6_DEVICE(:,:,:) = ZTMP4_DEVICE(:,:,:)*ZTMP5_DEVICE(:,:,:) !$acc end kernels CALL MZF_DEVICE( ZTMP6_DEVICE, ZTMP7_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZFLXC,ZTMP6_DEVICE) ZFLXC(:,:,:) = ZFLXC(:,:,:) + 2.*( ZTMP3_DEVICE(:,:,:) + ZTMP7_DEVICE(:,:,:) ) - !$acc end kernels - ! ! - !$acc kernels ZTMP6_DEVICE(:,:,:) = ZTMP4_DEVICE(:,:,:)*ZTMP5_DEVICE(:,:,:)*PINV_PDZZ(:,:,:) !$acc end kernels CALL DZF_DEVICE( ZTMP6_DEVICE, ZTMP3_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZTMP4_DEVICE) ZTMP4_DEVICE(:,:,:) = ZTMP8_DEVICE(:,:,:) * ZFLX(:,:,:)*PINV_PDXX(:,:,:) !$acc end kernels CALL DXF_DEVICE(ZTMP4_DEVICE, ZTMP5_DEVICE) @@ -1169,9 +1140,7 @@ END IF CALL MYM_DEVICE( PK, ZTMP1_DEVICE ) CALL GY_M_V_DEVICE(1,IKU,1,PTHLM,PDYY,PDZZ,PDZY,ZTMP2_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 @@ -1188,13 +1157,13 @@ END IF ! gradient CALL MYM_DEVICE( PK(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1) ) CALL DYM_DEVICE(PTHLM(:,:,IKB:IKB), ZTMP2_DEVICE(:,:,1:1) ) -!$acc kernels +!$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE(:,:,1) = ZCOEFF(:,:,IKB+2)*PTHLM(:,:,IKB+2) & +ZCOEFF(:,:,IKB+1)*PTHLM(:,:,IKB+1) & +ZCOEFF(:,:,IKB )*PTHLM(:,:,IKB ) !$acc end kernels CALL MYM_DEVICE( ZTMP3_DEVICE(:,:,1:1), ZTMP4_DEVICE(:,:,1:1) ) -!$acc kernels +!$acc kernels present_cr(ZFLX) ZFLX(:,:,IKB) = -XCSHF * ZTMP1_DEVICE(:,:,1) * & ( ZTMP2_DEVICE(:,:,1) * PINV_PDYY(:,:,IKB) & - ZTMP4_DEVICE(:,:,1) & @@ -1208,7 +1177,7 @@ ZFLX(:,:,IKB) = -XCSHF * ZTMP1_DEVICE(:,:,1) * & ZTMP1_DEVICE(:,:,1) = PSFTHM(:,:)* PDIRCOSYW(:,:) !$acc end kernels CALL MYM_DEVICE( ZTMP1_DEVICE(:,:,1:1), ZTMP2_DEVICE(:,:,1:1) ) -!$acc kernels +!$acc kernels present_cr(ZFLX) ZFLX(:,:,IKB-1) = 2. * ZTMP2_DEVICE(:,:,1) - ZFLX(:,:,IKB) !$acc end kernels ! @@ -1218,45 +1187,35 @@ IF (.NOT. L2D) THEN IF (.NOT. LFLAT) THEN CALL MYM_DEVICE(PRHODJ, ZTMP1_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels CALL DYF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE ) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels CALL MZM_DEVICE(ZTMP1_DEVICE, ZTMP2_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels CALL MYF_DEVICE(ZTMP1_DEVICE, ZTMP2_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels CALL DZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 @@ -1282,32 +1241,32 @@ IF ( KRRL >= 1 .AND. .NOT. L2D) THEN ZTMP1_DEVICE(:,:,:) = PRHODJ(:,:,:)*PATHETA(:,:,:)*PSRCM(:,:,:) !$acc end kernels CALL MYM_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZTMP4_DEVICE) ZTMP4_DEVICE(:,:,:) = ZTMP2_DEVICE(:,:,:)*ZFLX(:,:,:) !$acc end kernels CALL MYF_DEVICE( ZTMP4_DEVICE, ZTMP3_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZTMP4_DEVICE) ZTMP4_DEVICE(:,:,:) = ZFLX(:,:,:)*PINV_PDYY(:,:,:) !$acc end kernels CALL MZM_DEVICE( ZTMP4_DEVICE, ZTMP5_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZTMP4_DEVICE) ZTMP4_DEVICE(:,:,:) = PDZY(:,:,:)*ZTMP5_DEVICE(:,:,:) !$acc end kernels CALL MYF_DEVICE( ZTMP4_DEVICE, ZTMP5_DEVICE) CALL MZM_DEVICE( ZTMP1_DEVICE, ZTMP4_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZTMP6_DEVICE) ZTMP6_DEVICE(:,:,:) = ZTMP4_DEVICE(:,:,:)*ZTMP5_DEVICE(:,:,:) !$acc end kernels CALL MZF_DEVICE( ZTMP6_DEVICE, ZTMP4_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZFLXC) ZFLXC(:,:,:) = 2.*( ZTMP3_DEVICE(:,:,:) + ZTMP4_DEVICE(:,:,:) ) !$acc end kernels IF ( KRRI >= 1 ) THEN - !$acc kernels + !$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE(:,:,:) = ZTMP2_DEVICE(:,:,:)*ZFLX(:,:,:)*PINV_PDYY(:,:,:) !$acc end kernels CALL DYF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE(:,:,:) = ZTMP6_DEVICE(:,:,:)*PINV_PDZZ(:,:,:) !$acc end kernels CALL DZF_DEVICE( ZTMP3_DEVICE, ZTMP5_DEVICE ) @@ -1441,7 +1400,7 @@ IF (KRR/=0) THEN +ZCOEFF(:,:,IKB :IKB )*PRM(:,:,IKB :IKB ,1) ) & *0.5* ( PDZY(:,:,IKB+1:IKB+1)+PDZY(:,:,IKB:IKB)) & * PINV_PDYY(:,:,IKB:IKB) ) -! extrapolates the flux under the ground so that the vertical average with +! extrapolates the flux under the ground so that the vertical average with ! the IKB flux gives the ground value ( warning the tangential surface ! flux has been set to 0 for the moment !! to be improved ) ZFLX(:,:,IKB-1:IKB-1) = 2. * MYM( SPREAD( PSFRM(:,:)* PDIRCOSYW(:,:), 3,1) ) & @@ -1548,9 +1507,7 @@ IF (KRR/=0) THEN CALL MYM_DEVICE( PK, ZTMP1_DEVICE ) CALL GY_M_V_DEVICE(1,IKU,1,PRM(:,:,:,1),PDYY,PDZZ,PDZY, ZTMP2_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 @@ -1566,39 +1523,37 @@ IF (KRR/=0) THEN ! gradient CALL MYM_DEVICE( PK(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1) ) CALL DYM_DEVICE(PRM(:,:,IKB:IKB,1), ZTMP2_DEVICE(:,:,1:1)) - !$acc kernels + !$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE(:,:,1) = ZCOEFF(:,:,IKB+2)*PRM(:,:,IKB+2,1) & +ZCOEFF(:,:,IKB+1)*PRM(:,:,IKB+1,1) & +ZCOEFF(:,:,IKB )*PRM(:,:,IKB ,1) !$acc end kernels CALL MYM_DEVICE( ZTMP3_DEVICE(:,:,1:1), ZTMP4_DEVICE(:,:,1:1) ) - !$acc kernels + !$acc kernels present_cr(ZFLX) ZFLX(:,:,IKB) = -XCHF * ZTMP1_DEVICE(:,:,1) * & ( ZTMP2_DEVICE(:,:,1) * PINV_PDYY(:,:,IKB) & - ZTMP4_DEVICE(:,:,1) & *0.5* ( PDZY(:,:,IKB+1)+PDZY(:,:,IKB)) & * PINV_PDYY(:,:,IKB) ) !$acc end kernels -! extrapolates the flux under the ground so that the vertical average with +! extrapolates the flux under the ground so that the vertical average with ! the IKB flux gives the ground value ( warning the tangential surface ! flux has been set to 0 for the moment !! to be improved ) !$acc kernels ZTMP1_DEVICE(:,:,1) = PSFRM(:,:)* PDIRCOSYW(:,:) !$acc end kernels CALL MYM_DEVICE( ZTMP1_DEVICE(:,:,1:1), ZTMP2_DEVICE(:,:,1:1) ) - !$acc kernels + !$acc kernels present_cr(ZFLX) ZFLX(:,:,IKB-1) = 2. * ZTMP2_DEVICE(:,:,1) - ZFLX(:,:,IKB) !$acc end kernels -! + ! ! Add this source to the conservative mixing ratio sources ! IF (.NOT. L2D) THEN IF (.NOT. LFLAT) THEN CALL MYM_DEVICE(PRHODJ, ZTMP1_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 @@ -1606,27 +1561,21 @@ IF (KRR/=0) THEN CALL DYF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE ) ! !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels CALL MZM_DEVICE(ZTMP1_DEVICE,ZTMP2_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels CALL MYF_DEVICE(ZTMP1_DEVICE,ZTMP2_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 @@ -1634,9 +1583,7 @@ IF (KRR/=0) THEN CALL DZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) ! !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 @@ -1661,32 +1608,32 @@ IF (KRR/=0) THEN ZTMP1_DEVICE(:,:,:) = PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) !$acc end kernels CALL MYM_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE(:,:,:) = ZTMP2_DEVICE(:,:,:)*ZFLX(:,:,:) !$acc end kernels CALL MXF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE ) CALL MZM_DEVICE( ZTMP1_DEVICE, ZTMP5_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZTMP1_DEVICE) ZTMP1_DEVICE(:,:,:) = ZFLX(:,:,:)*PINV_PDYY(:,:,:) !$acc end kernels CALL MZM_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZTMP1_DEVICE) ZTMP1_DEVICE(:,:,:) = PDZY(:,:,:)*ZTMP2_DEVICE(:,:,:) !$acc end kernels CALL MYF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZTMP1_DEVICE) ZTMP1_DEVICE(:,:,:) = ZTMP5_DEVICE(:,:,:)*ZTMP2_DEVICE(:,:,:) !$acc end kernels CALL MZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZFLXC) ZFLXC(:,:,:) = ZFLXC(:,:,:) + 2.*( ZTMP4_DEVICE(:,:,:) + ZTMP2_DEVICE(:,:,:) ) !$acc end kernels IF ( KRRI >= 1 ) THEN - !$acc kernels + !$acc kernels present_cr(ZTMP2_DEVICE) ZTMP2_DEVICE(:,:,:) = ZTMP3_DEVICE(:,:,:) * PINV_PDYY(:,:,:) !$acc end kernels CALL DYF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZTMP2_DEVICE) ZTMP2_DEVICE(:,:,:) = ZTMP1_DEVICE(:,:,:)* PINV_PDZZ(:,:,:) !$acc end kernels CALL DZF_DEVICE( ZTMP2_DEVICE, ZTMP4_DEVICE ) diff --git a/src/ZSOLVER/turb_hor_thermo_flux.f90 b/src/ZSOLVER/turb_hor_thermo_flux.f90 index a767a3163..52cff5188 100644 --- a/src/ZSOLVER/turb_hor_thermo_flux.f90 +++ b/src/ZSOLVER/turb_hor_thermo_flux.f90 @@ -332,9 +332,7 @@ ZFLX(:,:,IKE+1) = ZFLX(:,:,IKE) CALL MXM_DEVICE( PK, ZTMP1_DEVICE ) CALL GX_M_U_DEVICE(1,IKU,1,PTHLM,PDXX,PDZZ,PDZX,ZTMP2_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC -!$acc loop independent collapse(3) -#endif +!$acc_nv loop independent collapse(3) 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 @@ -355,21 +353,13 @@ ZFLX(:,:,IKB:IKB) = -XCSHF * MXM( PK(:,:,IKB:IKB) ) * & #else CALL MXM_DEVICE( PK(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1) ) CALL DXM_DEVICE( PTHLM(:,:,IKB:IKB), ZTMP2_DEVICE(:,:,1:1) ) -#ifdef MNH_COMPILER_CCE -!$acc kernels present(ZTMP3_DEVICE) -#else -!$acc kernels -#endif +!$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE(:,:,1) = ZCOEFF(:,:,IKB+2)*PTHLM(:,:,IKB+2) & +ZCOEFF(:,:,IKB+1)*PTHLM(:,:,IKB+1) & +ZCOEFF(:,:,IKB )*PTHLM(:,:,IKB ) !$acc end kernels CALL MXM_DEVICE( ZTMP3_DEVICE(:,:,1:1), ZTMP4_DEVICE(:,:,1:1)) -#ifdef MNH_COMPILER_CCE -!$acc kernels present(ZFLX) -#else -!$acc kernels -#endif +!$acc kernels present_cr(ZFLX,ZTMP1_DEVICE) ZFLX(:,:,IKB) = -XCSHF * ZTMP1_DEVICE(:,:,1) * & ( ZTMP2_DEVICE(:,:,1) * PINV_PDXX(:,:,IKB) - ZTMP4_DEVICE(:,:,1) & *0.5* ( PDZX(:,:,IKB+1)+PDZX(:,:,IKB)) & @@ -389,11 +379,7 @@ DO CONCURRENT ( JI=1:JIU,JJ=1:JJU ) END DO !$acc end kernels CALL MXM_DEVICE( ZTMP1_DEVICE(:,:,1:1), ZTMP2_DEVICE(:,:,1:1) ) -#ifdef MNH_COMPILER_CCE -!$acc kernels present(ZFLX) -#else -!$acc kernels -#endif +!$acc kernels present_cr(ZFLX) ZFLX(:,:,IKB-1) = 2. * ZTMP2_DEVICE(:,:,1) - ZFLX(:,:,IKB) !$acc end kernels #endif @@ -412,36 +398,28 @@ END IF IF (.NOT. LFLAT) THEN CALL MXM_DEVICE(PRHODJ, ZTMP1_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels CALL DXF_DEVICE(ZTMP2_DEVICE, ZTMP3_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels CALL MZM_DEVICE(ZTMP2_DEVICE,ZTMP4_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels CALL MXF_DEVICE(ZTMP2_DEVICE, ZTMP4_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC -!$acc loop independent collapse(3) -#endif +!$acc_nv loop independent collapse(3) 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 @@ -513,43 +491,23 @@ IF ( KRRL >= 1 ) THEN !$acc end kernels CALL MZM_DEVICE( ZTMP1_DEVICE, ZTMP4_DEVICE ) CALL MXM_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZTMP1_DEVICE) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZTMP1_DEVICE) ZTMP1_DEVICE(:,:,:) = ZTMP2_DEVICE(:,:,:) *ZFLX(:,:,:) !$acc end kernels CALL MXF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZTMP1_DEVICE) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZTMP1_DEVICE) ZTMP1_DEVICE(:,:,:) = ZFLX(:,:,:)*PINV_PDXX(:,:,:) !$acc end kernels CALL MZM_DEVICE( ZTMP1_DEVICE, ZTMP5_DEVICE ) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZTMP6_DEVICE) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZTMP6_DEVICE) ZTMP6_DEVICE(:,:,:) = PDZX(:,:,:)*ZTMP5_DEVICE(:,:,:) !$acc end kernels CALL MXF_DEVICE( ZTMP6_DEVICE, ZTMP5_DEVICE ) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZTMP6_DEVICE) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZTMP6_DEVICE) ZTMP6_DEVICE(:,:,:) = ZTMP4_DEVICE(:,:,:)*ZTMP5_DEVICE(:,:,:) !$acc end kernels CALL MZF_DEVICE( ZTMP6_DEVICE, ZTMP7_DEVICE ) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZFLXC) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZFLXC) ZFLXC(:,:,:) = 2.*( ZTMP2_DEVICE(:,:,:) +ZTMP7_DEVICE(:,:,:) ) !$acc end kernels IF ( KRRI >= 1 ) THEN @@ -557,19 +515,11 @@ IF ( KRRL >= 1 ) THEN ZTMP1_DEVICE(:,:,:) = PRHODJ(:,:,:)*PATHETA(:,:,:)*PSRCM(:,:,:) !$acc end kernels CALL MXM_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZTMP6_DEVICE) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZTMP6_DEVICE) ZTMP6_DEVICE(:,:,:) = ZTMP2_DEVICE(:,:,:)*ZFLX(:,:,:)*PINV_PDXX(:,:,:) !$acc end kernels CALL DXF_DEVICE( ZTMP6_DEVICE, ZTMP2_DEVICE) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZTMP3_DEVICE) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE(:,:,:) = ZTMP4_DEVICE(:,:,:)*ZTMP5_DEVICE(:,:,:)*PINV_PDZZ(:,:,:) !$acc end kernels CALL DZF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE ) @@ -672,7 +622,7 @@ IF (KSPLT==1 .AND. LLES_CALL) THEN ZTMP3_DEVICE(:,:,:) = ZTMP1_DEVICE(:,:,:)*ZTMP2_DEVICE(:,:,:) !$acc end kernels CALL MXF_DEVICE(ZTMP3_DEVICE,ZTMP1_DEVICE) - CALL MZF_DEVICE( ZTMP1_DEVICE,ZTMP2_DEVICE) + CALL MZF_DEVICE(ZTMP1_DEVICE,ZTMP2_DEVICE) CALL LES_MEAN_SUBGRID( ZTMP2_DEVICE,X_LES_RES_ddxa_W_SBG_UaThl , .TRUE. ) ! CALL GX_M_M_DEVICE(PTHLM,PDXX,PDZZ,PDZX,ZTMP1_DEVICE) @@ -815,9 +765,7 @@ END IF CALL MXM_DEVICE( PK, ZTMP1_DEVICE ) CALL GX_M_U_DEVICE(1,IKU,1,PRM(:,:,:,1),PDXX,PDZZ,PDZX,ZTMP2_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC -!$acc loop independent collapse(3) -#endif +!$acc_nv loop independent collapse(3) 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 @@ -828,21 +776,13 @@ END DO ! gradient CALL MXM_DEVICE( PK(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1) ) CALL DXM_DEVICE(PRM(:,:,IKB:IKB,1), ZTMP2_DEVICE(:,:,1:1)) -#ifdef MNH_COMPILER_CCE -!$acc kernels present(ZTMP3_DEVICE) -#else -!$acc kernels -#endif +!$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE(:,:,1) = ZCOEFF(:,:,IKB+2)*PRM(:,:,IKB+2,1) & +ZCOEFF(:,:,IKB+1)*PRM(:,:,IKB+1,1) & +ZCOEFF(:,:,IKB )*PRM(:,:,IKB ,1) !$acc end kernels CALL MXM_DEVICE(ZTMP3_DEVICE(:,:,1:1),ZTMP4_DEVICE(:,:,1:1)) -#ifdef MNH_COMPILER_CCE -!$acc kernels present(ZFLX) -#else -!$acc kernels -#endif +!$acc kernels present_cr(ZFLX) ZFLX(:,:,IKB) = -XCHF * ZTMP1_DEVICE(:,:,1) * & ( ZTMP2_DEVICE(:,:,1) * PINV_PDXX(:,:,IKB) & -ZTMP4_DEVICE(:,:,1) & @@ -854,11 +794,7 @@ END DO ZTMP1_DEVICE(:,:,1) = PSFRM(:,:)* PDIRCOSXW(:,:) !$acc end kernels CALL MXM_DEVICE(ZTMP1_DEVICE(:,:,1:1),ZTMP2_DEVICE(:,:,1:1)) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZFLX) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZFLX) ZFLX(:,:,IKB-1) = 2. * ZTMP2_DEVICE(:,:,1) - ZFLX(:,:,IKB) !$acc end kernels @@ -868,45 +804,35 @@ END DO IF (.NOT. LFLAT) THEN CALL MXM_DEVICE(PRHODJ,ZTMP1_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels CALL DXF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE ) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels CALL MZM_DEVICE(ZTMP2_DEVICE,ZTMP4_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels CALL MXF_DEVICE(ZTMP2_DEVICE,ZTMP4_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels - CALL DZF_DEVICE( ZTMP2_DEVICE, ZTMP4_DEVICE) + CALL DZF_DEVICE(ZTMP2_DEVICE,ZTMP4_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 @@ -925,57 +851,33 @@ END DO ! Compute the equivalent tendancy for Rc and Ri ! IF ( KRRL >= 1 ) THEN -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZTMP2_DEVICE) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZTMP2_DEVICE) ZTMP1_DEVICE(:,:,:) = PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) ZTMP2_DEVICE(:,:,:) = ZFLX(:,:,:)*PINV_PDXX(:,:,:) !$acc end kernels CALL MXM_DEVICE( ZTMP1_DEVICE, ZTMP8_DEVICE ) IF (.NOT. LFLAT) THEN -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZTMP4_DEVICE) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZTMP4_DEVICE) ZTMP4_DEVICE(:,:,:) = ZTMP8_DEVICE(:,:,:) * ZFLX(:,:,:) !$acc end kernels CALL MXF_DEVICE( ZTMP4_DEVICE, ZTMP3_DEVICE ) CALL MZM_DEVICE( ZTMP1_DEVICE, ZTMP4_DEVICE ) CALL MZM_DEVICE( ZTMP2_DEVICE, ZTMP5_DEVICE ) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZTMP6_DEVICE) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZTMP6_DEVICE) ZTMP6_DEVICE(:,:,:) = PDZX(:,:,:)*ZTMP5_DEVICE(:,:,:) !$acc end kernels CALL MXF_DEVICE( ZTMP6_DEVICE, ZTMP5_DEVICE ) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZTMP6_DEVICE) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZTMP6_DEVICE) ZTMP6_DEVICE(:,:,:) = ZTMP4_DEVICE(:,:,:)*ZTMP5_DEVICE(:,:,:) !$acc end kernels CALL MZF_DEVICE( ZTMP6_DEVICE, ZTMP7_DEVICE ) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZFLXC,ZTMP6_DEVICE) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZFLXC,ZTMP6_DEVICE) ZFLXC(:,:,:) = ZFLXC(:,:,:) + 2.*( ZTMP3_DEVICE(:,:,:) + ZTMP7_DEVICE(:,:,:) ) ! ZTMP6_DEVICE(:,:,:) = ZTMP4_DEVICE(:,:,:)*ZTMP5_DEVICE(:,:,:)*PINV_PDZZ(:,:,:) !$acc end kernels CALL DZF_DEVICE( ZTMP6_DEVICE, ZTMP3_DEVICE ) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZTMP4_DEVICE) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZTMP4_DEVICE) ZTMP4_DEVICE(:,:,:) = ZTMP8_DEVICE(:,:,:) * ZFLX(:,:,:)*PINV_PDXX(:,:,:) !$acc end kernels CALL DXF_DEVICE(ZTMP4_DEVICE, ZTMP5_DEVICE) @@ -1238,9 +1140,7 @@ END IF CALL MYM_DEVICE( PK, ZTMP1_DEVICE ) CALL GY_M_V_DEVICE(1,IKU,1,PTHLM,PDYY,PDZZ,PDZY,ZTMP2_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 @@ -1257,21 +1157,13 @@ END IF ! gradient CALL MYM_DEVICE( PK(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1) ) CALL DYM_DEVICE(PTHLM(:,:,IKB:IKB), ZTMP2_DEVICE(:,:,1:1) ) -#ifdef MNH_COMPILER_CCE -!$acc kernels present(ZTMP3_DEVICE) -#else -!$acc kernels -#endif +!$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE(:,:,1) = ZCOEFF(:,:,IKB+2)*PTHLM(:,:,IKB+2) & +ZCOEFF(:,:,IKB+1)*PTHLM(:,:,IKB+1) & +ZCOEFF(:,:,IKB )*PTHLM(:,:,IKB ) !$acc end kernels CALL MYM_DEVICE( ZTMP3_DEVICE(:,:,1:1), ZTMP4_DEVICE(:,:,1:1) ) -#ifdef MNH_COMPILER_CCE -!$acc kernels present(ZFLX) -#else -!$acc kernels -#endif +!$acc kernels present_cr(ZFLX) ZFLX(:,:,IKB) = -XCSHF * ZTMP1_DEVICE(:,:,1) * & ( ZTMP2_DEVICE(:,:,1) * PINV_PDYY(:,:,IKB) & - ZTMP4_DEVICE(:,:,1) & @@ -1285,11 +1177,7 @@ ZFLX(:,:,IKB) = -XCSHF * ZTMP1_DEVICE(:,:,1) * & ZTMP1_DEVICE(:,:,1) = PSFTHM(:,:)* PDIRCOSYW(:,:) !$acc end kernels CALL MYM_DEVICE( ZTMP1_DEVICE(:,:,1:1), ZTMP2_DEVICE(:,:,1:1) ) -#ifdef MNH_COMPILER_CCE -!$acc kernels present(ZFLX) -#else -!$acc kernels -#endif +!$acc kernels present_cr(ZFLX) ZFLX(:,:,IKB-1) = 2. * ZTMP2_DEVICE(:,:,1) - ZFLX(:,:,IKB) !$acc end kernels ! @@ -1299,45 +1187,35 @@ IF (.NOT. L2D) THEN IF (.NOT. LFLAT) THEN CALL MYM_DEVICE(PRHODJ, ZTMP1_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels CALL DYF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE ) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels CALL MZM_DEVICE(ZTMP1_DEVICE, ZTMP2_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels CALL MYF_DEVICE(ZTMP1_DEVICE, ZTMP2_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels CALL DZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 @@ -1363,60 +1241,32 @@ IF ( KRRL >= 1 .AND. .NOT. L2D) THEN ZTMP1_DEVICE(:,:,:) = PRHODJ(:,:,:)*PATHETA(:,:,:)*PSRCM(:,:,:) !$acc end kernels CALL MYM_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZTMP4_DEVICE) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZTMP4_DEVICE) ZTMP4_DEVICE(:,:,:) = ZTMP2_DEVICE(:,:,:)*ZFLX(:,:,:) !$acc end kernels CALL MYF_DEVICE( ZTMP4_DEVICE, ZTMP3_DEVICE ) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZTMP4_DEVICE) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZTMP4_DEVICE) ZTMP4_DEVICE(:,:,:) = ZFLX(:,:,:)*PINV_PDYY(:,:,:) !$acc end kernels CALL MZM_DEVICE( ZTMP4_DEVICE, ZTMP5_DEVICE ) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZTMP4_DEVICE) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZTMP4_DEVICE) ZTMP4_DEVICE(:,:,:) = PDZY(:,:,:)*ZTMP5_DEVICE(:,:,:) !$acc end kernels CALL MYF_DEVICE( ZTMP4_DEVICE, ZTMP5_DEVICE) CALL MZM_DEVICE( ZTMP1_DEVICE, ZTMP4_DEVICE ) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZTMP6_DEVICE) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZTMP6_DEVICE) ZTMP6_DEVICE(:,:,:) = ZTMP4_DEVICE(:,:,:)*ZTMP5_DEVICE(:,:,:) !$acc end kernels CALL MZF_DEVICE( ZTMP6_DEVICE, ZTMP4_DEVICE ) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZFLXC) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZFLXC) ZFLXC(:,:,:) = 2.*( ZTMP3_DEVICE(:,:,:) + ZTMP4_DEVICE(:,:,:) ) !$acc end kernels IF ( KRRI >= 1 ) THEN -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZTMP3_DEVICE) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE(:,:,:) = ZTMP2_DEVICE(:,:,:)*ZFLX(:,:,:)*PINV_PDYY(:,:,:) !$acc end kernels CALL DYF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE ) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZTMP3_DEVICE) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE(:,:,:) = ZTMP6_DEVICE(:,:,:)*PINV_PDZZ(:,:,:) !$acc end kernels CALL DZF_DEVICE( ZTMP3_DEVICE, ZTMP5_DEVICE ) @@ -1573,42 +1423,42 @@ IF (KRR/=0) THEN ! IF ( KRRL >= 1 .AND. .NOT. L2D) THEN ! Sub-grid condensation IF (.NOT. LFLAT) THEN - ZFLXC(:,:,:) = ZFLXC(:,:,:) & - + 2.*( MXF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:) ) & - + MZF( MZM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*MYF( & - PDZY(:,:,:)*(MZM( ZFLX(:,:,:)*PINV_PDYY(:,:,:) )) ) )& + ZFLXC(:,:,:) = ZFLXC(:,:,:) & + + 2.*( MXF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:) ) & + + MZF( MZM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*MYF( & + PDZY(:,:,:)*(MZM( ZFLX(:,:,:)*PINV_PDYY(:,:,:) )) ) ) & ) IF ( KRRI >= 1 ) THEN - PRRS(:,:,:,2) = PRRS(:,:,:,2) + 2. * & - (- DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)/PDYY ) & - + DZF( MZM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*MYF( PDZY(:,:,:)* & - (MZM( ZFLX(:,:,:)*PINV_PDYY(:,:,:) )) )& - * PINV_PDZZ(:,:,:) ) & + PRRS(:,:,:,2) = PRRS(:,:,:,2) + 2. * & + (- DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)*PINV_PDYY ) & + + DZF( MZM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*MYF( PDZY(:,:,:)* & + (MZM( ZFLX(:,:,:)*PINV_PDYY(:,:,:) )) ) & + * PINV_PDZZ(:,:,:) ) & )*(1.0-PFRAC_ICE(:,:,:)) - PRRS(:,:,:,4) = PRRS(:,:,:,4) + 2. * & - (- DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)/PDYY ) & - + DZF( MZM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*MYF( PDZY(:,:,:)* & - (MZM( ZFLX(:,:,:)*PINV_PDYY(:,:,:) )) )& - * PINV_PDZZ(:,:,:) ) & + PRRS(:,:,:,4) = PRRS(:,:,:,4) + 2. * & + (- DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)*PINV_PDYY ) & + + DZF( MZM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*MYF( PDZY(:,:,:)* & + (MZM( ZFLX(:,:,:)*PINV_PDYY(:,:,:) )) ) & + * PINV_PDZZ(:,:,:) ) & )*PFRAC_ICE(:,:,:) ELSE - PRRS(:,:,:,2) = PRRS(:,:,:,2) + 2. * & - (- DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)/PDYY ) & - + DZF( MZM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*MYF( PDZY(:,:,:)* & - (MZM( ZFLX(:,:,:)*PINV_PDYY(:,:,:) )) )& - * PINV_PDZZ(:,:,:) ) & + PRRS(:,:,:,2) = PRRS(:,:,:,2) + 2. * & + (- DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)*PINV_PDYY ) & + + DZF( MZM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*MYF( PDZY(:,:,:)* & + (MZM( ZFLX(:,:,:)*PINV_PDYY(:,:,:) )) ) & + * PINV_PDZZ(:,:,:) ) & ) END IF ELSE ZFLXC(:,:,:) = ZFLXC(:,:,:) + 2.*MXF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX ) IF ( KRRI >= 1 ) THEN PRRS(:,:,:,2) = PRRS(:,:,:,2) - 2. * & - DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)/PDYY )*(1.0-PFRAC_ICE(:,:,:)) + DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)*PINV_PDYY )*(1.0-PFRAC_ICE(:,:,:)) PRRS(:,:,:,4) = PRRS(:,:,:,4) - 2. * & - DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)/PDYY )*PFRAC_ICE(:,:,:) + DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)*PINV_PDYY )*PFRAC_ICE(:,:,:) ELSE PRRS(:,:,:,2) = PRRS(:,:,:,2) - 2. * & - DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)/PDYY ) + DYF( MYM( PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) )*ZFLX(:,:,:)*PINV_PDYY ) END IF END IF END IF @@ -1657,9 +1507,7 @@ IF (KRR/=0) THEN CALL MYM_DEVICE( PK, ZTMP1_DEVICE ) CALL GY_M_V_DEVICE(1,IKU,1,PRM(:,:,:,1),PDYY,PDZZ,PDZY, ZTMP2_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 @@ -1675,21 +1523,13 @@ IF (KRR/=0) THEN ! gradient CALL MYM_DEVICE( PK(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1) ) CALL DYM_DEVICE(PRM(:,:,IKB:IKB,1), ZTMP2_DEVICE(:,:,1:1)) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZTMP3_DEVICE) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE(:,:,1) = ZCOEFF(:,:,IKB+2)*PRM(:,:,IKB+2,1) & +ZCOEFF(:,:,IKB+1)*PRM(:,:,IKB+1,1) & +ZCOEFF(:,:,IKB )*PRM(:,:,IKB ,1) !$acc end kernels CALL MYM_DEVICE( ZTMP3_DEVICE(:,:,1:1), ZTMP4_DEVICE(:,:,1:1) ) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZFLX) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZFLX) ZFLX(:,:,IKB) = -XCHF * ZTMP1_DEVICE(:,:,1) * & ( ZTMP2_DEVICE(:,:,1) * PINV_PDYY(:,:,IKB) & - ZTMP4_DEVICE(:,:,1) & @@ -1703,11 +1543,7 @@ IF (KRR/=0) THEN ZTMP1_DEVICE(:,:,1) = PSFRM(:,:)* PDIRCOSYW(:,:) !$acc end kernels CALL MYM_DEVICE( ZTMP1_DEVICE(:,:,1:1), ZTMP2_DEVICE(:,:,1:1) ) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZFLX) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZFLX) ZFLX(:,:,IKB-1) = 2. * ZTMP2_DEVICE(:,:,1) - ZFLX(:,:,IKB) !$acc end kernels ! @@ -1717,9 +1553,7 @@ IF (KRR/=0) THEN IF (.NOT. LFLAT) THEN CALL MYM_DEVICE(PRHODJ, ZTMP1_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 @@ -1727,27 +1561,21 @@ IF (KRR/=0) THEN CALL DYF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE ) ! !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels CALL MZM_DEVICE(ZTMP1_DEVICE,ZTMP2_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 !$acc end kernels CALL MYF_DEVICE(ZTMP1_DEVICE,ZTMP2_DEVICE) !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 @@ -1755,9 +1583,7 @@ IF (KRR/=0) THEN CALL DZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) ! !$acc kernels -#ifdef MNH_COMPILER_NVHPC - !$acc loop independent collapse(3) -#endif + !$acc_nv loop independent collapse(3) 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 @@ -1782,60 +1608,32 @@ IF (KRR/=0) THEN ZTMP1_DEVICE(:,:,:) = PRHODJ(:,:,:)*PAMOIST(:,:,:)*PSRCM(:,:,:) !$acc end kernels CALL MYM_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZTMP3_DEVICE) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE(:,:,:) = ZTMP2_DEVICE(:,:,:)*ZFLX(:,:,:) !$acc end kernels CALL MXF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE ) CALL MZM_DEVICE( ZTMP1_DEVICE, ZTMP5_DEVICE ) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZTMP1_DEVICE) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZTMP1_DEVICE) ZTMP1_DEVICE(:,:,:) = ZFLX(:,:,:)*PINV_PDYY(:,:,:) !$acc end kernels CALL MZM_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZTMP1_DEVICE) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZTMP1_DEVICE) ZTMP1_DEVICE(:,:,:) = PDZY(:,:,:)*ZTMP2_DEVICE(:,:,:) !$acc end kernels CALL MYF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZTMP1_DEVICE) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZTMP1_DEVICE) ZTMP1_DEVICE(:,:,:) = ZTMP5_DEVICE(:,:,:)*ZTMP2_DEVICE(:,:,:) !$acc end kernels CALL MZF_DEVICE( ZTMP1_DEVICE, ZTMP2_DEVICE ) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZFLXC) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZFLXC) ZFLXC(:,:,:) = ZFLXC(:,:,:) + 2.*( ZTMP4_DEVICE(:,:,:) + ZTMP2_DEVICE(:,:,:) ) !$acc end kernels IF ( KRRI >= 1 ) THEN -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZTMP2_DEVICE) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZTMP2_DEVICE) ZTMP2_DEVICE(:,:,:) = ZTMP3_DEVICE(:,:,:) * PINV_PDYY(:,:,:) !$acc end kernels CALL DYF_DEVICE( ZTMP2_DEVICE, ZTMP3_DEVICE ) -#ifdef MNH_COMPILER_CCE - !$acc kernels present(ZTMP2_DEVICE) -#else - !$acc kernels -#endif + !$acc kernels present_cr(ZTMP2_DEVICE) ZTMP2_DEVICE(:,:,:) = ZTMP1_DEVICE(:,:,:)* PINV_PDZZ(:,:,:) !$acc end kernels CALL DZF_DEVICE( ZTMP2_DEVICE, ZTMP4_DEVICE ) -- GitLab