Skip to content
Snippets Groups Projects
Commit 1f1cbe9c authored by WAUTELET Philippe's avatar WAUTELET Philippe
Browse files

Philippe 18/10/2016: OpenACC: continued work for turb.f90 + removed an unused dummy argument

parent 6d2dd29e
Branches
Tags
No related merge requests found
......@@ -1326,7 +1326,7 @@ END IF
XTSTEP,HFMFILE,CLUOUT, &
XDXX,XDYY,XDZZ,XDZX,XDZY,XZZ, &
XDIRCOSXW,XDIRCOSYW,XDIRCOSZW,XCOSSLOPE,XSINSLOPE, &
XRHODJ,XTHVREF,XRHODREF, &
XRHODJ,XTHVREF, &
ZSFTH,ZSFRV,ZSFSV,ZSFU,ZSFV, &
XPABST,XUT,XVT,XWT,XTKET,XSVT,XSRCT,XBL_DEPTH,XSBL_DEPTH, &
XCEI,XCEI_MIN,XCEI_MAX,XCOEF_AMPL_SAT, &
......
......@@ -14,7 +14,7 @@ INTERFACE
HTURBDIM,HTURBLEN,HTOM,HTURBLEN_CL,PIMPL, &
PTSTEP,HFMFILE,HLUOUT,PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ, &
PDIRCOSXW,PDIRCOSYW,PDIRCOSZW,PCOSSLOPE,PSINSLOPE, &
PRHODJ,PTHVREF,PRHODREF, &
PRHODJ,PTHVREF, &
PSFTH,PSFRV,PSFSV,PSFU,PSFV, &
PPABST,PUT,PVT,PWT,PTKET,PSVT,PSRCT, &
PBL_DEPTH, PSBL_DEPTH, &
......@@ -69,8 +69,6 @@ REAL, DIMENSION(:,:), INTENT(IN) :: PSINSLOPE ! sinus of the angle
REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! dry density * Grid size
REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHVREF ! Virtual Potential
! Temperature of the reference state
REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! dry density of the
! reference state
!
REAL, DIMENSION(:,:), INTENT(IN) :: PSFTH,PSFRV, &
! normal surface fluxes of theta and Rv
......@@ -136,7 +134,7 @@ END MODULE MODI_TURB
HTURBDIM,HTURBLEN,HTOM,HTURBLEN_CL,PIMPL, &
PTSTEP,HFMFILE,HLUOUT,PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ, &
PDIRCOSXW,PDIRCOSYW,PDIRCOSZW,PCOSSLOPE,PSINSLOPE, &
PRHODJ,PTHVREF,PRHODREF, &
PRHODJ,PTHVREF, &
PSFTH,PSFRV,PSFSV,PSFU,PSFV, &
PPABST,PUT,PVT,PWT,PTKET,PSVT,PSRCT, &
PBL_DEPTH,PSBL_DEPTH, &
......@@ -427,18 +425,17 @@ REAL, DIMENSION(:,:), INTENT(IN) :: PSINSLOPE ! sinus of the angle
! between i and the slope vector
!$acc declare copyin(PCOSSLOPE,PSINSLOPE)
REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODJ ! dry density * Grid size
!$acc declare present(PRHODJ)
REAL, DIMENSION(:,:,:), INTENT(IN) :: PTHVREF ! Virtual Potential
! Temperature of the reference state
!$acc declare copyin(PTHVREF)
REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! dry density of the
! reference state
!
REAL, DIMENSION(:,:), INTENT(IN) :: PSFTH,PSFRV, &
! normal surface fluxes of theta and Rv
PSFU,PSFV
! normal surface fluxes of (u,v) parallel to the orography
!$acc declare copyin(PSFU,PSFV)
REAL, DIMENSION(:,:,:), INTENT(IN) :: PSFSV
!$acc declare copyin(PSFTH,PSFRV,PSFU,PSFV,PSFSV)
! normal surface fluxes of Scalar var.
!
! prognostic variables at t- deltat
......@@ -449,11 +446,13 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PUT,PVT,PWT ! wind components
REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKET ! TKE
!$acc declare copyin(PTKET)
REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSVT ! passive scal. var.
!$acc declare copyin(PSVT)
REAL, DIMENSION(:,:,:), INTENT(IN) :: PSRCT ! Second-order flux
! s'rc'/2Sigma_s2 at time t-1 multiplied by Lambda_3
!$acc declare copyin(PSRCT)
REAL, DIMENSION(:,:), INTENT(INOUT) :: PBL_DEPTH ! BL height for TOMS
REAL, DIMENSION(:,:), INTENT(INOUT) :: PSBL_DEPTH ! SBL depth for RMC01
!$acc declare create(PBL_DEPTH,PSBL_DEPTH)
!
! variables for cloud mixing length
REAL, DIMENSION(:,:,:), INTENT(IN) :: PCEI ! Cloud Entrainment instability
......@@ -472,7 +471,7 @@ REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRT ! water var. where
! sources of momentum, conservative potential temperature, Turb. Kin. Energy,
! TKE dissipation
REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRUS,PRVS,PRWS,PRTHLS,PRTKES
!$acc declare create(PRTHLS)
!$acc declare create(PRUS,PRVS,PRWS,PRTHLS,PRTKES)
! Source terms for all water kinds, PRRS(:,:,:,1) is used for the conservative
! mixing ratio
REAL, DIMENSION(:,:,:), INTENT(IN) :: PRTKEMS
......@@ -482,8 +481,10 @@ REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS
! Source terms for all passive scalar variables
REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRSVS
! Sigma_s at time t+1 : square root of the variance of the deviation to the
! saturation
! saturation
!$acc declare create(PRSVS)
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSIGS
!$acc declare create(PSIGS)
REAL, DIMENSION(:,:,:), INTENT(IN) :: PFLXZTHVMF
! MF contribution for vert. turb. transport
! used in the buoy. prod. of TKE
......@@ -491,6 +492,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PFLXZTHVMF
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PWTH ! heat flux
REAL, DIMENSION(:,:,:), INTENT(OUT) :: PWRC ! cloud water flux
REAL, DIMENSION(:,:,:,:),INTENT(OUT) :: PWSV ! scalar flux
!$acc declare create(PWTH,PWRC,PWSV)
!
!
!-------------------------------------------------------------------------------
......@@ -525,9 +527,10 @@ REAL,DIMENSION(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3)) ::&
ZMWTH,ZMWR,ZMTH2,ZMR2,ZMTHR,& ! 3rd order moments
ZFWTH,ZFWR,ZFTH2,ZFR2,ZFTHR,& ! opposite of verticale derivate of 3rd order moments
ZTHLM ! initial potential temp.
!$acc declare create(ZCP,ZEXN,ZT,ZLOCPEXNM,ZLM,ZLEPS,ZDP,ZTP,ZTRH,ZAMOIST,ZATHETA,ZCOEF_DISS,ZFRAC_ICE, &
!$acc & ZMWTH,ZMWR,ZMTH2,ZMR2,ZMTHR, &
!$acc & ZFWTH,ZFWR,ZFTH2,ZFR2,ZFTHR, ZTHLM )
!$acc declare create(ZCP,ZEXN,ZT,ZLOCPEXNM,ZLM,ZLEPS,ZDP,ZTP,ZTRH, &
!$acc & ZAMOIST,ZATHETA,ZCOEF_DISS,ZFRAC_ICE, &
!$acc & ZMWTH,ZMWR,ZMTH2,ZMR2,ZMTHR, &
!$acc & ZFWTH,ZFWR,ZFTH2,ZFR2,ZFTHR,ZTHLM )
!
REAL, ALLOCATABLE, DIMENSION(:,:,:,:) :: &
ZRM ! initial mixing ratio
......@@ -574,8 +577,8 @@ REAL :: ZALPHA ! proportionnality constant between Dz/2 and
REAL :: ZTIME1, ZTIME2
!
#ifdef _OPENACC
REAL, DIMENSION(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3)) :: ZTMP1_DEVICE
!$acc declare create(ZTMP1_DEVICE)
REAL, DIMENSION(SIZE(PTHLT,1),SIZE(PTHLT,2),SIZE(PTHLT,3)) :: ZTMP1_DEVICE,ZTMP2_DEVICE,ZTMP3_DEVICE
!$acc declare create(ZTMP1_DEVICE,ZTMP2_DEVICE,ZTMP3_DEVICE)
#endif
!------------------------------------------------------------------------------------------
! ALLOCATE ( &
......@@ -1008,25 +1011,8 @@ ZFTHR(:,:,:IKTB) = 0.
!* 5. TURBULENT SOURCES
! -----------------
!
!$acc data present(PDXX,PDYY,PDZZ,PDZX,PDZY,PDIRCOSZW,PTHVREF) &
!$acc & present(PTHLT,PRT, &
!$acc & ZCDUEFF,ZTAU11M,ZTAU12M,ZTAU33M, &
!$acc & PUT,PVT,PWT,ZUSLOPE,ZVSLOPE, &
!$acc & PTKET,ZLM,ZLEPS, &
!$acc & ZLOCPEXNM,ZATHETA,ZAMOIST,PSRCT,ZFRAC_ICE,&
!$acc & ZFWTH,ZFWR,ZFTH2,ZFR2,ZFTHR,PRTHLS,PRRS,&
!$acc & ZDP,ZTP) &
!$acc & copyin(PZZ, &
!$acc & PCOSSLOPE,PSINSLOPE, &
!$acc & PRHODJ, &
!$acc & PSFTH,PSFRV,PSFSV,PSFTH,PSFRV,PSFSV, &
!$acc & PSVT) &
!$acc & present(ZFWTH,ZFWR,ZFTH2,ZFR2,ZFTHR,ZLMO) &
!$acc & copy(PBL_DEPTH,PSBL_DEPTH, &
!$acc & PRUS,PRVS,PRWS,PRSVS) &
!$acc & copyout(PSIGS,PWTH,PWRC,PWSV)
!$acc update device(PRHODJ)
!$acc update device(PRUS,PRVS,PRWS,PRSVS)
CALL TURB_VER(KKA,KKU,KKL,KRR, KRRL, KRRI, &
OCLOSE_OUT,OTURB_FLX, &
HTURBDIM,HTOM,PIMPL,ZEXPL, &
......@@ -1043,24 +1029,36 @@ CALL TURB_VER(KKA,KKU,KKL,KRR, KRRL, KRRI, &
PSBL_DEPTH,ZLMO, &
PRUS,PRVS,PRWS,PRTHLS,PRRS,PRSVS, &
ZDP,ZTP,PSIGS,PWTH,PWRC,PWSV )
!$acc end data
!$acc update self(PRTHLS,PRRS)
!$acc update self(PRRS)
!$acc update self(PWTH,PWRC,PWSV)
!
IF (LBUDGET_U) CALL BUDGET (PRUS,1,'VTURB_BU_RU')
IF (LBUDGET_V) CALL BUDGET (PRVS,2,'VTURB_BU_RV')
IF (LBUDGET_W) CALL BUDGET (PRWS,3,'VTURB_BU_RW')
IF (LBUDGET_U) THEN
!$acc update self(PRUS)
CALL BUDGET (PRUS,1,'VTURB_BU_RU')
END IF
IF (LBUDGET_V) THEN
!$acc update self(PRVS)
CALL BUDGET (PRVS,2,'VTURB_BU_RV')
END IF
IF (LBUDGET_W) THEN
!$acc update self(PRWS)
CALL BUDGET (PRWS,3,'VTURB_BU_RW')
END IF
IF (LBUDGET_TH) THEN
IF ( KRRI >= 1 .AND. KRRL >= 1 ) THEN
!$acc update self(PRTHLS)
IF ( KRRI >= 1 .AND. KRRL >= 1 ) THEN
!$acc update self(ZLVOCPEXNM,ZLSOCPEXNM)
CALL BUDGET (PRTHLS+ ZLVOCPEXNM * PRRS(:,:,:,2) + ZLSOCPEXNM * PRRS(:,:,:,4),4,'VTURB_BU_RTH')
ELSE IF ( KRRL >= 1 ) THEN
!$acc update self(ZLOCPEXNM)
CALL BUDGET (PRTHLS+ ZLOCPEXNM * PRRS(:,:,:,2),4,'VTURB_BU_RTH')
ELSE
CALL BUDGET (PRTHLS,4,'VTURB_BU_RTH')
END IF
END IF
IF (LBUDGET_SV) THEN
!$acc update self(PRSVS)
DO JSV = 1,NSV
CALL BUDGET (PRSVS(:,:,:,JSV),JSV+12,'VTURB_BU_RSV')
END DO
......@@ -1079,19 +1077,6 @@ IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9,'VTURB_BU_RRI')
!
!
IF (HTURBDIM=='3DIM') THEN
!$acc data present(PDIRCOSZW,PTHLT,PRT, &
!$acc & PTHVREF,PTKET,ZLM,ZLEPS, &
!$acc & ZCDUEFF,ZTAU11M,ZTAU12M,ZTAU22M,ZTAU33M, &
!$acc & PUT,PVT,PWT,ZUSLOPE,ZVSLOPE, &
!$acc & ZDP,ZTP,ZTRH,ZLOCPEXNM,ZATHETA,ZAMOIST,PSRCT,ZFRAC_ICE,PRTHLS,PRRS) &
!$acc & copyin(PDXX,PDYY,PDZZ,PDZX,PDZY,PZZ, &
!$acc & PDIRCOSXW,PDIRCOSYW, &
!$acc & PCOSSLOPE,PSINSLOPE, &
!$acc & PRHODJ, &
!$acc & PSFTH,PSFRV,PSFSV, &
!$acc & PSVT) &
!$acc & copy(PSIGS, &
!$acc & PRUS,PRVS,PRWS,PRSVS)
CALL TURB_HOR_SPLT(KSPLIT, KRR, KRRL, KRRI, PTSTEP, &
HLBCX,HLBCY,OCLOSE_OUT,OTURB_FLX,OSUBG_COND, &
HFMFILE,HLUOUT, &
......@@ -1107,21 +1092,20 @@ IF (HTURBDIM=='3DIM') THEN
ZDP,ZTP,PSIGS, &
ZTRH, &
PRUS,PRVS,PRWS,PRTHLS,PRRS,PRSVS )
!$acc end data
END IF
!$acc update self(ZTP,PRTHLS,PRRS)
!$acc update self(ZTP,PRRS)
!$acc update self(PSIGS,PRUS,PRVS,PRWS,PRSVS)
!
!
IF (LBUDGET_U) CALL BUDGET (PRUS,1,'HTURB_BU_RU')
IF (LBUDGET_V) CALL BUDGET (PRVS,2,'HTURB_BU_RV')
IF (LBUDGET_W) CALL BUDGET (PRWS,3,'HTURB_BU_RW')
IF (LBUDGET_TH) THEN
!PW: TODO: check all budget variable status (CPU and/or GPU)
!$acc update self(PRTHLS)
IF ( KRRI >= 1 .AND. KRRL >= 1 ) THEN
CALL BUDGET (PRTHLS+ZLVOCPEXNM*PRRS(:,:,:,2)+ZLSOCPEXNM*PRRS(:,:,:,4) &
,4,'HTURB_BU_RTH')
ELSE IF ( KRRL >= 1 ) THEN
!$acc update self(ZLOCPEXNM)
CALL BUDGET (PRTHLS+ ZLOCPEXNM * PRRS(:,:,:,2),4,'HTURB_BU_RTH')
ELSE
CALL BUDGET (PRTHLS,4,'HTURB_BU_RTH')
......@@ -1161,16 +1145,16 @@ IF (LBUDGET_RI) CALL BUDGET (PRRS(:,:,:,4),9,'HTURB_BU_RRI')
#endif
! 6.2 TKE evolution equation
!$acc data copy(PRTKES)
!$acc update device(PRTKES)
CALL TKE_EPS_SOURCES(KKA,KKU,KKL,KMI,PTKET,ZLM,ZLEPS,ZDP,ZTRH, &
PRHODJ,PDZZ,PDXX,PDYY,PDZX,PDZY,PZZ, &
PTSTEP,PIMPL,ZEXPL, &
HTURBLEN,HTURBDIM, &
HFMFILE,HLUOUT,OCLOSE_OUT,OTURB_DIAG, &
ZTP,PRTKES,PRTKEMS,PRTHLS,ZCOEF_DISS )
!$acc end data
!$acc update self(PRTHLS)
!$acc update self(PRTKES)
IF (LBUDGET_TH) THEN
!$acc update self(PRTHLS)
IF ( KRRI >= 1 .AND. KRRL >= 1 ) THEN
CALL BUDGET (PRTHLS+ZLVOCPEXNM*PRRS(:,:,:,2)+ZLSOCPEXNM*PRRS(:,:,:,4) &
,4,'DISSH_BU_RTH')
......@@ -1191,6 +1175,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
!
! stores the mixing length
!
!$acc update self(ZLM)
YRECFM ='LM'
YCOMMENT='X_Y_Z_LM (M)'
IGRID = 1
......@@ -1233,7 +1218,7 @@ IF ( KRRL >= 1 ) THEN
PRTHLS(:,:,:) = PRTHLS(:,:,:) + ZLVOCPEXNM(:,:,:) * PRRS(:,:,:,2) &
+ ZLSOCPEXNM(:,:,:) * PRRS(:,:,:,4)
!$acc end kernels
!$acc update self(PRT(:,:,:,1),PRRS(:,:,:,1),PTHLT,PRTHLS)
!$acc update self(PRT(:,:,:,1),PRRS(:,:,:,1))
!
DEALLOCATE(ZLVOCPEXNM)
DEALLOCATE(ZLSOCPEXNM)
......@@ -1244,9 +1229,10 @@ IF ( KRRL >= 1 ) THEN
PTHLT(:,:,:) = PTHLT(:,:,:) + ZLOCPEXNM(:,:,:) * PRT(:,:,:,2)
PRTHLS(:,:,:) = PRTHLS(:,:,:) + ZLOCPEXNM(:,:,:) * PRRS(:,:,:,2)
!$acc end kernels
!$acc update self(PRT(:,:,:,1),PRRS(:,:,:,1),PTHLT,PRTHLS)
!$acc update self(PRT(:,:,:,1),PRRS(:,:,:,1))
END IF
END IF
!$acc update self(PTHLT,PRTHLS)
!
!----------------------------------------------------------------------------
!
......@@ -1255,6 +1241,7 @@ END IF
!
IF (LLES_CALL) THEN
CALL SECOND_MNH(ZTIME1)
#ifndef _OPENACC
CALL LES_MEAN_SUBGRID(PSFTH,X_LES_Q0)
CALL LES_MEAN_SUBGRID(PSFRV,X_LES_E0)
DO JSV=1,NSV
......@@ -1263,6 +1250,21 @@ IF (LLES_CALL) THEN
CALL LES_MEAN_SUBGRID(PSFU,X_LES_UW0)
CALL LES_MEAN_SUBGRID(PSFV,X_LES_VW0)
CALL LES_MEAN_SUBGRID((PSFU*PSFU+PSFV*PSFV)**0.25,X_LES_USTAR)
#else
!$acc data copy(X_LES_Q0,X_LES_E0,X_LES_SV0,X_LES_UW0,X_LES_VW0,X_LES_USTAR)
CALL LES_MEAN_SUBGRID_DEVICE(PSFTH,X_LES_Q0)
CALL LES_MEAN_SUBGRID_DEVICE(PSFRV,X_LES_E0)
DO JSV=1,NSV
CALL LES_MEAN_SUBGRID_DEVICE(PSFSV(:,:,JSV),X_LES_SV0(:,JSV))
END DO
CALL LES_MEAN_SUBGRID_DEVICE(PSFU,X_LES_UW0)
CALL LES_MEAN_SUBGRID_DEVICE(PSFV,X_LES_VW0)
!$acc kernels
ZTMP1_DEVICE(:,:,1) = (PSFU*PSFU+PSFV*PSFV)**0.25
!$acc end kernels
CALL LES_MEAN_SUBGRID_DEVICE(ZTMP1_DEVICE(:,:,1),X_LES_USTAR)
!$acc end data
#endif
!----------------------------------------------------------------------------
!
!* 10. LES for 3rd order moments
......@@ -1295,10 +1297,11 @@ IF (LLES_CALL) THEN
!* 11. LES quantities depending on <w'2> in "1DIM" mode
! ------------------------------------------------
!
#ifndef _OPENACC
IF (HTURBDIM=="1DIM") THEN
CALL LES_MEAN_SUBGRID(2./3.*PTKET,X_LES_SUBGRID_U2)
CALL LES_MEAN_SUBGRID(2./3.*PTKET,X_LES_SUBGRID_V2)
CALL LES_MEAN_SUBGRID(2./3.*PTKET,X_LES_SUBGRID_W2)
X_LES_SUBGRID_V2 = X_LES_SUBGRID_U2
X_LES_SUBGRID_W2 = X_LES_SUBGRID_U2
CALL LES_MEAN_SUBGRID(2./3.*PTKET*MZF(KKA,KKU,KKL,&
& GZ_M_W(KKA,KKU,KKL,PTHLT,PDZZ)),X_LES_RES_ddz_Thl_SBG_W2)
IF (KRR>=1) &
......@@ -1309,12 +1312,52 @@ IF (LLES_CALL) THEN
& GZ_M_W(KKA,KKU,KKL,PSVT(:,:,:,JSV),PDZZ)),X_LES_RES_ddz_Sv_SBG_W2(:,:,:,JSV))
END DO
END IF
#else
IF (HTURBDIM=="1DIM") THEN
!$acc data copy(X_LES_SUBGRID_U2,X_LES_SUBGRID_V2,X_LES_SUBGRID_W2,X_LES_RES_ddz_Thl_SBG_W2)
!$acc kernels
ZTMP1_DEVICE = 2./3.*PTKET
!$acc end kernels
CALL LES_MEAN_SUBGRID_DEVICE(ZTMP1_DEVICE,X_LES_SUBGRID_U2)
!$acc kernels
X_LES_SUBGRID_V2 = X_LES_SUBGRID_U2
X_LES_SUBGRID_W2 = X_LES_SUBGRID_U2
!$acc end kernels
CALL GZ_M_W_DEVICE(KKA,KKU,KKL,PTHLT,PDZZ,ZTMP2_DEVICE)
CALL MZF_DEVICE(KKA,KKU,KKL,ZTMP2_DEVICE,ZTMP3_DEVICE)
!$acc kernels
ZTMP2_DEVICE = ZTMP1_DEVICE*ZTMP3_DEVICE
!$acc end kernels
CALL LES_MEAN_SUBGRID_DEVICE(ZTMP2_DEVICE,X_LES_RES_ddz_Thl_SBG_W2)
!$acc end data
IF (KRR>=1) THEN
!$acc data copy(X_LES_RES_ddz_Rt_SBG_W2)
CALL GZ_M_W_DEVICE(KKA,KKU,KKL,PRT(:,:,:,1),PDZZ,ZTMP2_DEVICE)
CALL MZF_DEVICE(KKA,KKU,KKL,ZTMP2_DEVICE,ZTMP3_DEVICE)
!$acc kernels
ZTMP2_DEVICE = ZTMP1_DEVICE*PTKET*ZTMP3_DEVICE
!$acc end kernels
CALL LES_MEAN_SUBGRID_DEVICE(ZTMP2_DEVICE,X_LES_RES_ddz_Rt_SBG_W2)
!$acc end data
END IF
!$acc data copy(X_LES_RES_ddz_Sv_SBG_W2(:,:,:,1:NSV))
DO JSV=1,NSV
CALL GZ_M_W_DEVICE(KKA,KKU,KKL,PSVT(:,:,:,JSV),PDZZ,ZTMP2_DEVICE)
CALL MZF_DEVICE(KKA,KKU,KKL,ZTMP2_DEVICE,ZTMP3_DEVICE)
!$acc kernels
ZTMP2_DEVICE = ZTMP1_DEVICE*PTKET*ZTMP3_DEVICE
!$acc end kernels
CALL LES_MEAN_SUBGRID_DEVICE(ZTMP2_DEVICE,X_LES_RES_ddz_Sv_SBG_W2(:,:,:,JSV))
END DO
!$acc end data
END IF
#endif
!----------------------------------------------------------------------------
!
!* 12. LES mixing end dissipative lengths, presso-correlations
! -------------------------------------------------------
!
#ifndef _OPENACC
CALL LES_MEAN_SUBGRID(ZLM,X_LES_SUBGRID_LMix)
CALL LES_MEAN_SUBGRID(ZLEPS,X_LES_SUBGRID_LDiss)
!
......@@ -1322,6 +1365,17 @@ IF (LLES_CALL) THEN
!
ZLM = 0.
CALL LES_MEAN_SUBGRID(ZLM,X_LES_SUBGRID_WP)
#else
CALL LES_MEAN_SUBGRID_DEVICE(ZLM,X_LES_SUBGRID_LMix)
CALL LES_MEAN_SUBGRID_DEVICE(ZLEPS,X_LES_SUBGRID_LDiss)
!
!* presso-correlations for subgrid Tke are equal to zero.
!
!$acc kernels
ZLM = 0.
!$acc end kernels
CALL LES_MEAN_SUBGRID_DEVICE(ZLM,X_LES_SUBGRID_WP)
#endif
!
CALL SECOND_MNH(ZTIME2)
XTIME_LES = XTIME_LES + ZTIME2 - ZTIME1
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment