From c2ae9e7fdaa41bf96a3d5f071231d13e3f04a0d0 Mon Sep 17 00:00:00 2001 From: Juan ESCOBAR <juan.escobar@aero.obs-mip.fr> Date: Fri, 4 Nov 2022 19:01:16 +0100 Subject: [PATCH] Juan 04/11/2022:MNH/turb*.f90 , CCE > 14.X Optimization, add acc present_cr --- src/MNH/turb_hor_dyn_corr.f90 | 2 +- src/MNH/turb_hor_sv_flux.f90 | 56 ++++++++++++++-------------- src/MNH/turb_hor_thermo_corr.f90 | 64 ++++++++++++++++---------------- src/MNH/turb_hor_thermo_flux.f90 | 6 +-- 4 files changed, 64 insertions(+), 64 deletions(-) diff --git a/src/MNH/turb_hor_dyn_corr.f90 b/src/MNH/turb_hor_dyn_corr.f90 index 59b5e3631..d504591e9 100644 --- a/src/MNH/turb_hor_dyn_corr.f90 +++ b/src/MNH/turb_hor_dyn_corr.f90 @@ -175,7 +175,7 @@ USE MODE_MPPDB #if defined(MNH_BITREP) || defined(MNH_BITREP_OMP) USE MODI_BITREP #endif -#ifdef MNH_BITREP_OMP +#ifdef MNH_COMPILER_CCE !$mnh_undef(LOOP) !$mnh_undef(OPENACC) #endif diff --git a/src/MNH/turb_hor_sv_flux.f90 b/src/MNH/turb_hor_sv_flux.f90 index bd352dcef..9cf51e163 100644 --- a/src/MNH/turb_hor_sv_flux.f90 +++ b/src/MNH/turb_hor_sv_flux.f90 @@ -310,7 +310,7 @@ DO JSV=1,ISV #else CALL MXM_DEVICE(PK,ZTMP1_DEVICE) CALL GX_M_U_DEVICE(1,IKU,1,PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX,ZTMP2_DEVICE) -!$acc kernels +!$acc kernels present_cr(ZFLXX) ZFLXX(:,:,:) = -ZCSV * ZTMP1_DEVICE * ZTMP2_DEVICE #endif ZFLXX(:,:,IKE+1) = ZFLXX(:,:,IKE) @@ -330,13 +330,13 @@ DO JSV=1,ISV #else CALL MXM_DEVICE( PK(:,:,IKB:IKB),ZTMP1_DEVICE(:,:,1:1) ) CALL DXM_DEVICE(PSVM(:,:,IKB:IKB,JSV),ZTMP2_DEVICE(:,:,1:1)) -!$acc kernels +!$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE(:,:,1) = ZCOEFF(:,:,IKB+2)*PSVM(:,:,IKB+2,JSV) & +ZCOEFF(:,:,IKB+1)*PSVM(:,:,IKB+1,JSV) & +ZCOEFF(:,:,IKB)*PSVM(:,:,IKB,JSV) !$acc end kernels CALL MXM_DEVICE( ZTMP3_DEVICE(:,:,1:1), ZTMP4_DEVICE(:,:,1:1) ) -!$acc kernels +!$acc kernels present_cr(ZFLXX) ZFLXX(:,:,IKB) = -ZCSV * ZTMP1_DEVICE(:,:,1) * & ( ZTMP2_DEVICE(:,:,1) * PINV_PDXX(:,:,IKB) & - ZTMP4_DEVICE(:,:,1) * 0.5 * ( PDZX(:,:,IKB+1)+PDZX(:,:,IKB) ) & @@ -346,14 +346,14 @@ DO JSV=1,ISV #endif ! extrapolates the flux under the ground so that the vertical average with ! the IKB flux gives the ground value -!$acc kernels +!$acc kernels present_cr(ZWORK2D) ZWORK2D(:,:,1)=PSFSVM(:,:,JSV) * PDIRCOSXW(:,:) !$acc end kernels #ifndef MNH_OPENACC ZFLXX(:,:,IKB-1:IKB-1) = 2. * MXM( ZWORK2D(:,:,1:1) ) - ZFLXX(:,:,IKB:IKB) #else CALL MXM_DEVICE( ZWORK2D(:,:,1:1),ZTMP1_DEVICE(:,:,1:1) ) -!$acc kernels +!$acc kernels present_cr(ZFLXX) ZFLXX(:,:,IKB-1) = 2. * ZTMP1_DEVICE(:,:,1) - ZFLXX(:,:,IKB) !$acc end kernels #endif @@ -391,7 +391,7 @@ DO JSV=1,ISV ! CALL GX_W_UW_DEVICE(PWM,PDXX,PDZZ,PDZX,ZTMP1_DEVICE) CALL MZM_DEVICE(ZFLXX,ZTMP2_DEVICE) - !$acc kernels + !$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE = ZTMP1_DEVICE*ZTMP2_DEVICE !$acc end kernels CALL MXF_DEVICE(ZTMP3_DEVICE,ZTMP1_DEVICE) @@ -400,7 +400,7 @@ DO JSV=1,ISV ! CALL GX_M_M_DEVICE(PSVM(:,:,:,JSV),PDXX,PDZZ,PDZX,ZTMP1_DEVICE) CALL MXF_DEVICE(ZFLXX,ZTMP2_DEVICE) - !$acc kernels + !$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE = ZTMP1_DEVICE*ZTMP2_DEVICE !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP3_DEVICE, X_LES_RES_ddxa_Sv_SBG_UaSv(:,:,:,JSV), .TRUE. ) @@ -422,7 +422,7 @@ DO JSV=1,ISV #else CALL MYM_DEVICE(PK,ZTMP1_DEVICE) CALL GY_M_V_DEVICE(1,IKU,1,PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY,ZTMP2_DEVICE) - !$acc kernels + !$acc kernels present_cr(ZFLXY) ZFLXY(:,:,:)=-ZCSV * ZTMP1_DEVICE * ZTMP2_DEVICE #endif ZFLXY(:,:,IKE+1) = ZFLXY(:,:,IKE) @@ -443,13 +443,13 @@ DO JSV=1,ISV #else CALL MYM_DEVICE( PK(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1) ) CALL DYM_DEVICE( PSVM(:,:,IKB:IKB,JSV), ZTMP2_DEVICE(:,:,1:1) ) - !$acc kernels + !$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE(:,:,1) = ZCOEFF(:,:,IKB+2)*PSVM(:,:,IKB+2,JSV) & +ZCOEFF(:,:,IKB+1)*PSVM(:,:,IKB+1,JSV) & +ZCOEFF(:,:,IKB)*PSVM(:,:,IKB,JSV) !$acc end kernels CALL MYM_DEVICE( ZTMP3_DEVICE(:,:,1:1), ZTMP4_DEVICE(:,:,1:1) ) - !$acc kernels + !$acc kernels present_cr(ZFLXY) ZFLXY(:,:,IKB) = -ZCSV * ZTMP1_DEVICE(:,:,1) * & ( ZTMP2_DEVICE(:,:,1) * PINV_PDYY(:,:,IKB) & - ZTMP4_DEVICE(:,:,1) * 0.5 * ( PDZY(:,:,IKB+1)+PDZY(:,:,IKB) ) & @@ -459,14 +459,14 @@ DO JSV=1,ISV #endif ! extrapolates the flux under the ground so that the vertical average with ! the IKB flux gives the ground value -!$acc kernels +!$acc kernels present_cr(ZWORK2D) ZWORK2D(:,:,1)=PSFSVM(:,:,JSV) * PDIRCOSYW(:,:) !$acc end kernels #ifndef MNH_OPENACC ZFLXY(:,:,IKB-1:IKB-1) = 2. * MYM( ZWORK2D(:,:,1:1) ) - ZFLXY(:,:,IKB:IKB) #else CALL MYM_DEVICE( ZWORK2D(:,:,1:1), ZTMP1_DEVICE(:,:,1:1) ) - !$acc kernels + !$acc kernels present_cr(ZFLXY) ZFLXY(:,:,IKB-1) = 2. * ZTMP1_DEVICE(:,:,1) - ZFLXY(:,:,IKB) !$acc end kernels #endif @@ -510,7 +510,7 @@ DO JSV=1,ISV ! CALL GY_W_VW_DEVICE(PWM,PDYY,PDZZ,PDZY,ZTMP1_DEVICE) CALL MZM_DEVICE(ZFLXY,ZTMP2_DEVICE) - !$acc kernels + !$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE = ZTMP1_DEVICE*ZTMP2_DEVICE !$acc end kernels CALL MYF_DEVICE(ZTMP3_DEVICE,ZTMP1_DEVICE) @@ -519,7 +519,7 @@ DO JSV=1,ISV ! CALL GY_M_M_DEVICE(PSVM(:,:,:,JSV),PDYY,PDZZ,PDZY,ZTMP1_DEVICE) CALL MYF_DEVICE(ZFLXY,ZTMP2_DEVICE) - !$acc kernels + !$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE = ZTMP1_DEVICE*ZTMP2_DEVICE !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP3_DEVICE, X_LES_RES_ddxa_Sv_SBG_UaSv(:,:,:,JSV) , .TRUE. ) @@ -562,64 +562,64 @@ DO JSV=1,ISV END IF #else CALL MXM_DEVICE(PRHODJ,ZTMP1_DEVICE) - !$acc kernels + !$acc kernels present_cr(ZTMP2_DEVICE) ZTMP2_DEVICE = ZTMP1_DEVICE * ZFLXX * PINV_PDXX !$acc end kernels CALL DXF_DEVICE( ZTMP2_DEVICE, ZTMP1_DEVICE ) IF (.NOT. L2D) THEN CALL MYM_DEVICE(PRHODJ,ZTMP3_DEVICE) - !$acc kernels + !$acc kernels present_cr(ZTMP4_DEVICE) ZTMP4_DEVICE = ZTMP1_DEVICE * ZFLXY * PINV_PDYY !$acc end kernels CALL DYF_DEVICE( ZTMP4_DEVICE, ZTMP2_DEVICE ) IF (.NOT. LFLAT) THEN - !$acc kernels + !$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE = ZFLXX * PINV_PDXX !$acc end kernels CALL MZM_DEVICE(ZTMP3_DEVICE,ZTMP4_DEVICE) - !$acc kernels + !$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE = ZTMP4_DEVICE * PDZX !$acc end kernels CALL MXF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE = ZFLXY * PINV_PDYY !$acc end kernels CALL MZM_DEVICE(ZTMP3_DEVICE,ZTMP5_DEVICE) - !$acc kernels + !$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE = ZTMP5_DEVICE * PDZY !$acc end kernels CALL MYF_DEVICE( ZTMP3_DEVICE,ZTMP5_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE = PMZM_PRHODJ * PINV_PDZZ * ( ZTMP4_DEVICE + ZTMP5_DEVICE ) !$acc end kernels CALL DZF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE ) - !$acc kernels + !$acc kernels present_cr(PRSVS) PRSVS(:,:,:,JSV) = PRSVS(:,:,:,JSV) - ZTMP1_DEVICE - ZTMP2_DEVICE + ZTMP4_DEVICE !$acc end kernels ELSE - !$acc kernels + !$acc kernels present_cr(PRSVS) PRSVS(:,:,:,JSV) = PRSVS(:,:,:,JSV) - ZTMP1_DEVICE - ZTMP2_DEVICE !$acc end kernels END IF ELSE IF (.NOT. LFLAT) THEN - !$acc kernels + !$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE = ZFLXX * PINV_PDXX !$acc end kernels CALL MZM_DEVICE(ZTMP3_DEVICE,ZTMP4_DEVICE) - !$acc kernels + !$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE = ZTMP4_DEVICE * PDZX !$acc end kernels CALL MXF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZTMP3_DEVICE) ZTMP3_DEVICE = PMZM_PRHODJ * PINV_PDZZ * ZTMP4_DEVICE !$acc end kernels CALL DZF_DEVICE( ZTMP3_DEVICE, ZTMP2_DEVICE) - !$acc kernels + !$acc kernels present_cr(PRSVS) PRSVS(:,:,:,JSV) = PRSVS(:,:,:,JSV) - ZTMP1_DEVICE + ZTMP2_DEVICE !$acc end kernels ELSE - !$acc kernels + !$acc kernels present_cr(PRSVS) PRSVS(:,:,:,JSV) = PRSVS(:,:,:,JSV) - ZTMP1_DEVICE !$acc end kernels END IF diff --git a/src/MNH/turb_hor_thermo_corr.f90 b/src/MNH/turb_hor_thermo_corr.f90 index 93378881d..260054485 100644 --- a/src/MNH/turb_hor_thermo_corr.f90 +++ b/src/MNH/turb_hor_thermo_corr.f90 @@ -301,7 +301,7 @@ IKU = NKMAX + 2 * JPVEXT ! ! compute the coefficients for the uncentred gradient computation near the ! ground -!$acc kernels +!$acc kernels present_cr(ZCOEFF) ZCOEFF(:,:,IKB+2)= - PDZZ(:,:,IKB+1) / & ( (PDZZ(:,:,IKB+2)+PDZZ(:,:,IKB+1)) * PDZZ(:,:,IKB+2) ) ZCOEFF(:,:,IKB+1)= (PDZZ(:,:,IKB+2)+PDZZ(:,:,IKB+1)) / & @@ -343,7 +343,7 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. tpfile%lopened ) & IF (.NOT. L2D) THEN CALL GX_M_M_DEVICE(PTHLM,PDXX,PDZZ,PDZX,ZTMP1_DEVICE) CALL GY_M_M_DEVICE(PTHLM,PDYY,PDZZ,PDZY,ZTMP2_DEVICE) -!$acc kernels +!$acc kernels present_cr(ZFLX) #ifndef MNH_BITREP ZFLX(:,:,:) = XCTV * PLM(:,:,:) * PLEPS(:,:,:) * ( ZTMP1_DEVICE(:,:,:)**2 + ZTMP2_DEVICE(:,:,:)**2 ) #else @@ -354,7 +354,7 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. tpfile%lopened ) & !$acc end kernels ELSE CALL GX_M_M_DEVICE(PTHLM,PDXX,PDZZ,PDZX,ZTMP1_DEVICE) -!$acc kernels +!$acc kernels present_cr(ZFLX) #ifndef MNH_BITREP ZFLX(:,:,:) = XCTV * PLM(:,:,:) * PLEPS(:,:,:) * ZTMP1_DEVICE(:,:,:)**2 #else @@ -388,20 +388,20 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. tpfile%lopened ) & ) ** 2 ) #else CALL DXM_DEVICE(PTHLM(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1)) -!$acc kernels +!$acc kernels present_cr(ZTMP2_DEVICE) ZTMP2_DEVICE(:,:,1) = ZTMP1_DEVICE(:,:,1) * PINV_PDXX(:,:,IKB) !$acc end kernels CALL MXF_DEVICE(ZTMP2_DEVICE(:,:,1:1), ZTMP3_DEVICE(:,:,1:1)) CALL MXF_DEVICE(PDXX(:,:,IKB:IKB), ZTMP4_DEVICE(:,:,1:1)) ! CALL DYM_DEVICE(PTHLM(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1)) -!$acc kernels +!$acc kernels present_cr(ZTMP2_DEVICE) ZTMP2_DEVICE(:,:,1) = ZTMP1_DEVICE(:,:,1) * PINV_PDYY(:,:,IKB) !$acc end kernels CALL MYF_DEVICE(ZTMP2_DEVICE(:,:,1:1), ZTMP1_DEVICE(:,:,1:1)) CALL MYF_DEVICE(PDYY(:,:,IKB:IKB), ZTMP2_DEVICE(:,:,1:1)) ! -!$acc kernels +!$acc kernels present_cr(ZFLX) !$mnh_expand_array(JI=1:JIU,JJ=1:JJU) ZFLX(:,:,IKB) = XCTV * PLM(:,:,IKB) & * PLEPS(:,:,IKB) * ( & @@ -465,23 +465,23 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. tpfile%lopened ) & CALL LES_MEAN_SUBGRID( ZFLX, X_LES_SUBGRID_Thl2, .TRUE. ) ! CALL MZF_DEVICE( PWM, ZTMP1_DEVICE) -!$acc kernels +!$acc kernels present_cr(ZTMP2_DEVICE) ZTMP2_DEVICE(:,:,:) = ZTMP1_DEVICE(:,:,:)*ZFLX(:,:,:) !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP2_DEVICE, X_LES_RES_W_SBG_Thl2, .TRUE. ) ! -!$acc kernels +!$acc kernels present_cr(ZTMP1_DEVICE) ZTMP1_DEVICE(:,:,:) = -2.*XCTD*SQRT(PTKEM(:,:,:))*ZFLX(:,:,:)/PLEPS(:,:,:) !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE ,X_LES_SUBGRID_DISS_Thl2, .TRUE. ) ! CALL ETHETA(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PATHETA,PSRCM, ZA(:,:,:)) -!$acc kernels +!$acc kernels present_cr(ZTMP1_DEVICE) ZTMP1_DEVICE(:,:,:) = ZA(:,:,:)*ZFLX(:,:,:) !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE, X_LES_SUBGRID_ThlThv, .TRUE. ) ! -!$acc kernels +!$acc kernels present_cr(ZTMP1_DEVICE) ZTMP1_DEVICE(:,:,:) = -XG/PTHVREF(:,:,:)/3.*ZA(:,:,:)*ZFLX(:,:,:) !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE, X_LES_SUBGRID_ThlPz, .TRUE. ) @@ -526,7 +526,7 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. tpfile%lopened ) & ELSE CALL GX_M_M_DEVICE(PTHLM ,PDXX,PDZZ,PDZX,ZTMP1_DEVICE) CALL GX_M_M_DEVICE(PRM(:,:,:,1),PDXX,PDZZ,PDZX,ZTMP2_DEVICE) -!$acc kernels +!$acc kernels present_cr(ZFLX) ZFLX(:,:,:)=PLM(:,:,:) * PLEPS(:,:,:) * (ZTMP1_DEVICE(:,:,:)*ZTMP2_DEVICE(:,:,:)) * (XCHT1+XCHT2) !$acc end kernels END IF @@ -567,32 +567,32 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. tpfile%lopened ) & ) ) #else CALL DXM_DEVICE(PTHLM(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1)) -!$acc kernels +!$acc kernels present_cr(ZTMP2_DEVICE) ZTMP2_DEVICE(:,:,1) = ZTMP1_DEVICE(:,:,1)* PINV_PDXX(:,:,IKB) !$acc end kernels CALL MXF_DEVICE( ZTMP2_DEVICE(:,:,1:1), ZTMP3_DEVICE(:,:,1:1) ) CALL MXF_DEVICE(PDXX(:,:,IKB:IKB),ZTMP4_DEVICE(:,:,1:1)) ! CALL DXM_DEVICE(PRM(:,:,IKB:IKB,1), ZTMP1_DEVICE(:,:,1:1)) -!$acc kernels +!$acc kernels present_cr(ZTMP2_DEVICE) ZTMP2_DEVICE(:,:,1) = ZTMP1_DEVICE(:,:,1)* PINV_PDXX(:,:,IKB) !$acc end kernels CALL MXF_DEVICE( ZTMP2_DEVICE(:,:,1:1), ZTMP5_DEVICE(:,:,1:1) ) ! CALL DYM_DEVICE(PTHLM(:,:,IKB:IKB), ZTMP1_DEVICE(:,:,1:1)) -!$acc kernels +!$acc kernels present_cr(ZTMP2_DEVICE) ZTMP2_DEVICE(:,:,1) = ZTMP1_DEVICE(:,:,1)* PINV_PDYY(:,:,IKB) !$acc end kernels CALL MYF_DEVICE( ZTMP2_DEVICE(:,:,1:1), ZTMP6_DEVICE(:,:,1:1) ) CALL MYF_DEVICE(PDYY(:,:,IKB:IKB),ZTMP7_DEVICE(:,:,1:1)) ! CALL DYM_DEVICE(PRM(:,:,IKB:IKB,1), ZTMP1_DEVICE(:,:,1:1)) -!$acc kernels +!$acc kernels present_cr(ZTMP2_DEVICE) ZTMP2_DEVICE(:,:,1) = ZTMP1_DEVICE(:,:,1)* PINV_PDYY(:,:,IKB) !$acc end kernels CALL MYF_DEVICE( ZTMP2_DEVICE(:,:,1:1), ZTMP8_DEVICE(:,:,1:1) ) ! -!$acc kernels +!$acc kernels present_cr(ZFLX) ZFLX(:,:,IKB) = (XCHT1+XCHT2) * PLM(:,:,IKB) & * PLEPS(:,:,IKB) * ( & ( ZTMP3_DEVICE(:,:,1) & @@ -670,33 +670,33 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. tpfile%lopened ) & CALL LES_MEAN_SUBGRID( ZFLX, X_LES_SUBGRID_ThlRt, .TRUE. ) ! CALL MZF_DEVICE( PWM, ZTMP1_DEVICE ) -!$acc kernels +!$acc kernels present_cr(ZTMP2_DEVICE) ZTMP2_DEVICE(:,:,:) = ZTMP1_DEVICE(:,:,:)*ZFLX(:,:,:) !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP2_DEVICE, X_LES_RES_W_SBG_ThlRt, .TRUE. ) ! -!$acc kernels +!$acc kernels present_cr(ZTMP1_DEVICE) ZTMP1_DEVICE(:,:,:) = -XCTD*SQRT(PTKEM(:,:,:))*ZFLX(:,:,:)/PLEPS(:,:,:) !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE ,X_LES_SUBGRID_DISS_ThlRt, .TRUE. ) ! -!$acc kernels +!$acc kernels present_cr(ZTMP1_DEVICE) ZTMP1_DEVICE(:,:,:) = ZA(:,:,:)*ZFLX(:,:,:) !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE, X_LES_SUBGRID_RtThv, .TRUE. ) ! -!$acc kernels +!$acc kernels present_cr(ZTMP1_DEVICE) ZTMP1_DEVICE(:,:,:) = -XG/PTHVREF(:,:,:)/3.*ZA(:,:,:)*ZFLX(:,:,:) !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE, X_LES_SUBGRID_RtPz,.TRUE.) ! CALL EMOIST(KRR,KRRI,PTHLM,PRM,PLOCPEXNM,PAMOIST,PSRCM,ZA(:,:,:)) -!$acc kernels +!$acc kernels present_cr(ZTMP1_DEVICE) ZTMP1_DEVICE(:,:,:) = ZA(:,:,:)*ZFLX(:,:,:) !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE, X_LES_SUBGRID_ThlThv, .TRUE. ) ! -!$acc kernels +!$acc kernels present_cr(ZTMP1_DEVICE) ZTMP1_DEVICE(:,:,:) = -XG/PTHVREF(:,:,:)/3.*ZA(:,:,:)*ZFLX(:,:,:) !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE, X_LES_SUBGRID_ThlPz,.TRUE.) @@ -732,7 +732,7 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. tpfile%lopened ) & IF (.NOT. L2D) THEN CALL GX_M_M_DEVICE(PRM(:,:,:,1),PDXX,PDZZ,PDZX,ZTMP1_DEVICE) CALL GY_M_M_DEVICE(PRM(:,:,:,1),PDYY,PDZZ,PDZY,ZTMP2_DEVICE) -!$acc kernels +!$acc kernels present_cr(ZFLX) #ifndef MNH_BITREP ZFLX(:,:,:) = XCHV * PLM(:,:,:) * PLEPS(:,:,:) * ( ZTMP1_DEVICE(:,:,:)**2 + ZTMP2_DEVICE(:,:,:)**2 ) #else @@ -743,7 +743,7 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. tpfile%lopened ) & !$acc end kernels ELSE CALL GX_M_M_DEVICE(PRM(:,:,:,1),PDXX,PDZZ,PDZX,ZTMP1_DEVICE) -!$acc kernels +!$acc kernels present_cr(ZFLX) #ifndef MNH_BITREP ZFLX(:,:,:) = XCHV * PLM(:,:,:) * PLEPS(:,:,:) * ZTMP1_DEVICE(:,:,:)**2 #else @@ -776,20 +776,20 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. tpfile%lopened ) & ) ** 2 ) #else CALL DXM_DEVICE(PRM(:,:,IKB:IKB,1), ZTMP1_DEVICE(:,:,1:1)) -!$acc kernels +!$acc kernels present_cr(ZTMP2_DEVICE) ZTMP2_DEVICE(:,:,1) = ZTMP1_DEVICE(:,:,1)* PINV_PDXX(:,:,IKB) !$acc end kernels CALL MXF_DEVICE( ZTMP2_DEVICE(:,:,1:1), ZTMP3_DEVICE(:,:,1:1) ) CALL MXF_DEVICE(PDXX(:,:,IKB:IKB),ZTMP4_DEVICE(:,:,1:1)) ! CALL DYM_DEVICE(PRM(:,:,IKB:IKB,1), ZTMP1_DEVICE(:,:,1:1)) -!$acc kernels +!$acc kernels present_cr(ZTMP2_DEVICE) ZTMP2_DEVICE(:,:,1) = ZTMP1_DEVICE(:,:,1)* PINV_PDYY(:,:,IKB) !$acc end kernels CALL MYF_DEVICE( ZTMP2_DEVICE(:,:,1:1), ZTMP5_DEVICE(:,:,1:1) ) CALL MYF_DEVICE(PDYY(:,:,IKB:IKB),ZTMP6_DEVICE(:,:,1:1)) ! -!$acc kernels +!$acc kernels present_cr(ZFLX) !$mnh_expand_array(JI=1:JIU,JJ=1:JJU,JK=1:JKU) ZFLX(:,:,IKB) = XCHV * PLM(:,:,IKB) & * PLEPS(:,:,IKB) * ( & @@ -851,22 +851,22 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. tpfile%lopened ) & CALL LES_MEAN_SUBGRID( ZFLX, X_LES_SUBGRID_Rt2, .TRUE. ) ! CALL MZF_DEVICE( PWM, ZTMP1_DEVICE ) -!$acc kernels +!$acc kernels present_cr(ZTMP2_DEVICE) ZTMP2_DEVICE(:,:,:) = ZTMP1_DEVICE(:,:,:)*ZFLX(:,:,:) !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP2_DEVICE, X_LES_RES_W_SBG_Rt2, .TRUE. ) ! -!$acc kernels +!$acc kernels present_cr(ZTMP1_DEVICE) ZTMP1_DEVICE(:,:,:) = ZA(:,:,:)*ZFLX(:,:,:) !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE, X_LES_SUBGRID_RtThv, .TRUE. ) ! -!$acc kernels +!$acc kernels present_cr(ZTMP1_DEVICE) ZTMP1_DEVICE(:,:,:) = -XG/PTHVREF(:,:,:)/3.*ZA(:,:,:)*ZFLX(:,:,:) !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE, X_LES_SUBGRID_RtPz,.TRUE.) ! -!$acc kernels +!$acc kernels present_cr(ZTMP1_DEVICE) ZTMP1_DEVICE(:,:,:) = -2.*XCTD*SQRT(PTKEM(:,:,:))*ZFLX(:,:,:)/PLEPS(:,:,:) !$acc end kernels CALL LES_MEAN_SUBGRID( ZTMP1_DEVICE, X_LES_SUBGRID_DISS_Rt2, .TRUE. ) @@ -883,7 +883,7 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. tpfile%lopened ) & ! IF ( KRRL > 0 ) THEN ! - !$acc kernels + !$acc kernels present_cr(PSIGS) PSIGS(:,:,:)=PSIGS(:,:,:)*PSIGS(:,:,:) + ZWORK(:,:,:) ! Extrapolate PSIGS at the ground and at the top PSIGS(:,:,IKB-1) = PSIGS(:,:,IKB) diff --git a/src/MNH/turb_hor_thermo_flux.f90 b/src/MNH/turb_hor_thermo_flux.f90 index 18f237e55..e1fc823fd 100644 --- a/src/MNH/turb_hor_thermo_flux.f90 +++ b/src/MNH/turb_hor_thermo_flux.f90 @@ -373,7 +373,7 @@ ZFLX(:,:,IKB) = -XCSHF * ZTMP1_DEVICE(:,:,1) * & ZFLX(:,:,IKB-1:IKB-1) = 2. * MXM( SPREAD( PSFTHM(:,:)* PDIRCOSXW(:,:), 3,1) ) & - ZFLX(:,:,IKB:IKB) #else -! acc kernels present(ZTMP1_DEVICE) +! acc kernels present_cr(ZTMP1_DEVICE) DO CONCURRENT ( JI=1:JIU,JJ=1:JJU ) ZTMP1_DEVICE(JI,JJ,1) = PSFTHM(JI,JJ)* PDIRCOSXW(JI,JJ) END DO @@ -553,7 +553,7 @@ IF ( KRRL >= 1 ) THEN ZTMP3_DEVICE(:,:,:) = ZTMP2_DEVICE(:,:,:)*ZFLX(:,:,:) !$acc end kernels CALL MXF_DEVICE( ZTMP3_DEVICE, ZTMP4_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZFLXC) ZFLXC(:,:,:) = 2.*ZTMP4_DEVICE(:,:,:) !$acc end kernels IF ( KRRI >= 1 ) THEN @@ -1296,7 +1296,7 @@ IF ( KRRL >= 1 .AND. .NOT. L2D) THEN ZTMP1_DEVICE(:,:,:) = ZTMP2_DEVICE(:,:,:)*ZFLX(:,:,:) !$acc end kernels CALL MYF_DEVICE( ZTMP1_DEVICE, ZTMP3_DEVICE ) - !$acc kernels + !$acc kernels present_cr(ZFLXC) ZFLXC(:,:,:) = 2.*ZTMP3_DEVICE(:,:,:) !$acc end kernels ! -- GitLab