FE-Project
Loading...
Searching...
No Matches
scale_element_operation_gpu_driver Module Reference

module FElib / Element / Driver for operation with 3D tensor product elements using GPU More...

Data Types

type  elementoperationgpudriver
 Driver for element operation with 3D tensor product elements using GPU. More...

Functions/Subroutines

subroutine elementoperationgpu_init (this, elem_optr_base3d)
 Initialize an object of ElementOperationGPUDriver.
subroutine, public elementoperationgpu_vfilterpm1 (this, vec_in, ne_in, ne_out, vec_out)
subroutine, public elementoperationgpu_div_kplane (this, flux2d_kplane, e11, e22, k, div_xy)
subroutine, public elementoperationgpu_divvar5_kplane (this, flux2d_kplane, e11, e22, k, div_xy)
subroutine, public elementoperationgpu_divvar5_kplane2 (this, flux2d_kplane_x, flux2d_kplane_y, e11, e22, k, div_xy)
subroutine, public elementoperationgpu_divvar5_z_lift (this, fluxz, ebnd_flux, e33, gsqrt, div3d)
subroutine, public elementoperationgpu_divvar5 (this, flux_x, flux_y, flux_z, ebnd_flux, e11, e22, e33, gsqrt, ne, div3d)
subroutine, public elementoperationgpu_modalfilter_var5 (this, vec_in, vec_work, ne, vec_out)
 Apply a modal filter for five variables.

Detailed Description

module FElib / Element / Driver for operation with 3D tensor product elements using GPU

Description
A driver module for providing kernels of matrix and vector operations assuming a 3D tensor product element with (p+1)^3 DOF and GPU execution.
Author
Yuta Kawai, Xuanzhengbo Ren, and Team SCALE

Function/Subroutine Documentation

◆ elementoperationgpu_init()

subroutine scale_element_operation_gpu_driver::elementoperationgpu_init ( class(elementoperationgpudriver), intent(inout) this,
class(elementoperationbase3d), intent(in), target elem_optr_base3d )

Initialize an object of ElementOperationGPUDriver.

The pointer to the given ElementOperationBase3D object are attached and necessary data is transferred to GPU.

Parameters
[in,out]thisAn object of ElementOperationGPUDriver to be initialized
[in]elem_optr_base3dAn obect of 3D element operation base tyoe

Definition at line 75 of file scale_element_operation_gpu_driver.F90.

76 use scale_prc, only: prc_abort
77 implicit none
78 class(ElementOperationGPUDriver), intent(inout) :: this !< An object of ElementOperationGPUDriver to be initialized
79 class(ElementOperationBase3D), intent(in), target :: elem_optr_base3D !< An obect of 3D element operation base tyoe
80 !----------------------------------------------------------
81
82 !$acc enter data create(this)
83
84 this%Nnode_h1D = elem_optr_base3d%elem3D%Nnode_h1D
85 this%Nnode_v = elem_optr_base3d%elem3D%Nnode_v
86 this%NfpTot = elem_optr_base3d%elem3D%NfpTot
87 !$acc update device(this%Nnode_h1D, this%Nnode_v, this%NfpTot)
88
89 select type(elem_optr_base3d)
90 type is (elementoperationtensorprod3d_p1)
91 this%elem_optr_tensorprod3D_P1 => elem_optr_base3d
92 !$acc enter data attach(this%elem_optr_tensorprod3D_P1)
93 !$acc update device(this%elem_optr_tensorprod3D_P1%IntrpMat_VPOrdM1_tr)
94 !$acc update device(this%elem_optr_tensorprod3D_P1%D1D)
95 !$acc update device(this%elem_optr_tensorprod3D_P1%D1D_tr)
96 !$acc update device(this%elem_optr_tensorprod3D_P1%Lift_mat)
97 !$acc update device(this%elem_optr_tensorprod3D_P1%MFilter_h1D)
98 !$acc update device(this%elem_optr_tensorprod3D_P1%MFilter_h1D_tr)
99 !$acc update device(this%elem_optr_tensorprod3D_P1%MFilter_v1D_tr)
100 type is (elementoperationtensorprod3d_p2)
101 this%elem_optr_tensorprod3D_P2 => elem_optr_base3d
102 !$acc enter data attach(this%elem_optr_tensorprod3D_P2)
103 !$acc update device(this%elem_optr_tensorprod3D_P2%IntrpMat_VPOrdM1_tr)
104 !$acc update device(this%elem_optr_tensorprod3D_P2%D1D)
105 !$acc update device(this%elem_optr_tensorprod3D_P2%D1D_tr)
106 !$acc update device(this%elem_optr_tensorprod3D_P2%Lift_mat)
107 !$acc update device(this%elem_optr_tensorprod3D_P2%MFilter_h1D)
108 !$acc update device(this%elem_optr_tensorprod3D_P2%MFilter_h1D_tr)
109 !$acc update device(this%elem_optr_tensorprod3D_P2%MFilter_v1D_tr)
110 type is (elementoperationtensorprod3d_p3)
111 this%elem_optr_tensorprod3D_P3 => elem_optr_base3d
112 !$acc enter data attach(this%elem_optr_tensorprod3D_P3)
113 !$acc update device(this%elem_optr_tensorprod3D_P3%IntrpMat_VPOrdM1_tr)
114 !$acc update device(this%elem_optr_tensorprod3D_P3%D1D)
115 !$acc update device(this%elem_optr_tensorprod3D_P3%D1D_tr)
116 !$acc update device(this%elem_optr_tensorprod3D_P3%Lift_mat)
117 !$acc update device(this%elem_optr_tensorprod3D_P3%MFilter_h1D)
118 !$acc update device(this%elem_optr_tensorprod3D_P3%MFilter_h1D_tr)
119 !$acc update device(this%elem_optr_tensorprod3D_P3%MFilter_v1D_tr)
120 type is (elementoperationtensorprod3d_p4)
121 this%elem_optr_tensorprod3D_P4 => elem_optr_base3d
122 !$acc enter data attach(this%elem_optr_tensorprod3D_P4)
123 !$acc update device(this%elem_optr_tensorprod3D_P4%IntrpMat_VPOrdM1_tr)
124 !$acc update device(this%elem_optr_tensorprod3D_P4%D1D)
125 !$acc update device(this%elem_optr_tensorprod3D_P4%D1D_tr)
126 !$acc update device(this%elem_optr_tensorprod3D_P4%Lift_mat)
127 !$acc update device(this%elem_optr_tensorprod3D_P4%MFilter_h1D)
128 !$acc update device(this%elem_optr_tensorprod3D_P4%MFilter_h1D_tr)
129 !$acc update device(this%elem_optr_tensorprod3D_P4%MFilter_v1D_tr)
130 type is (elementoperationtensorprod3d_p5)
131 this%elem_optr_tensorprod3D_P5 => elem_optr_base3d
132 !$acc enter data attach(this%elem_optr_tensorprod3D_P5)
133 !$acc update device(this%elem_optr_tensorprod3D_P5%IntrpMat_VPOrdM1_tr)
134 !$acc update device(this%elem_optr_tensorprod3D_P5%D1D)
135 !$acc update device(this%elem_optr_tensorprod3D_P5%D1D_tr)
136 !$acc update device(this%elem_optr_tensorprod3D_P5%Lift_mat)
137 !$acc update device(this%elem_optr_tensorprod3D_P5%MFilter_h1D)
138 !$acc update device(this%elem_optr_tensorprod3D_P5%MFilter_h1D_tr)
139 !$acc update device(this%elem_optr_tensorprod3D_P5%MFilter_v1D_tr)
140 type is (elementoperationtensorprod3d_p6)
141 this%elem_optr_tensorprod3D_P6 => elem_optr_base3d
142 !$acc enter data attach(this%elem_optr_tensorprod3D_P6)
143 !$acc update device(this%elem_optr_tensorprod3D_P6%IntrpMat_VPOrdM1_tr)
144 !$acc update device(this%elem_optr_tensorprod3D_P6%D1D)
145 !$acc update device(this%elem_optr_tensorprod3D_P6%D1D_tr)
146 !$acc update device(this%elem_optr_tensorprod3D_P6%Lift_mat)
147 !$acc update device(this%elem_optr_tensorprod3D_P6%MFilter_h1D)
148 !$acc update device(this%elem_optr_tensorprod3D_P6%MFilter_h1D_tr)
149 !$acc update device(this%elem_optr_tensorprod3D_P6%MFilter_v1D_tr)
150 type is (elementoperationtensorprod3d_p7)
151 this%elem_optr_tensorprod3D_P7 => elem_optr_base3d
152 !$acc enter data attach(this%elem_optr_tensorprod3D_P7)
153 !$acc update device(this%elem_optr_tensorprod3D_P7%IntrpMat_VPOrdM1_tr)
154 !$acc update device(this%elem_optr_tensorprod3D_P7%D1D)
155 !$acc update device(this%elem_optr_tensorprod3D_P7%D1D_tr)
156 !$acc update device(this%elem_optr_tensorprod3D_P7%Lift_mat)
157 !$acc update device(this%elem_optr_tensorprod3D_P7%MFilter_h1D)
158 !$acc update device(this%elem_optr_tensorprod3D_P7%MFilter_h1D_tr)
159 !$acc update device(this%elem_optr_tensorprod3D_P7%MFilter_v1D_tr)
160 type is (elementoperationtensorprod3d_p8)
161 this%elem_optr_tensorprod3D_P8 => elem_optr_base3d
162 !$acc enter data attach(this%elem_optr_tensorprod3D_P8)
163 !$acc update device(this%elem_optr_tensorprod3D_P8%IntrpMat_VPOrdM1_tr)
164 !$acc update device(this%elem_optr_tensorprod3D_P8%D1D)
165 !$acc update device(this%elem_optr_tensorprod3D_P8%D1D_tr)
166 !$acc update device(this%elem_optr_tensorprod3D_P8%Lift_mat)
167 !$acc update device(this%elem_optr_tensorprod3D_P8%MFilter_h1D)
168 !$acc update device(this%elem_optr_tensorprod3D_P8%MFilter_h1D_tr)
169 !$acc update device(this%elem_optr_tensorprod3D_P8%MFilter_v1D_tr)
170 type is (elementoperationtensorprod3d_p9)
171 this%elem_optr_tensorprod3D_P9 => elem_optr_base3d
172 !$acc enter data attach(this%elem_optr_tensorprod3D_P9)
173 !$acc update device(this%elem_optr_tensorprod3D_P9%IntrpMat_VPOrdM1_tr)
174 !$acc update device(this%elem_optr_tensorprod3D_P9%D1D)
175 !$acc update device(this%elem_optr_tensorprod3D_P9%D1D_tr)
176 !$acc update device(this%elem_optr_tensorprod3D_P9%Lift_mat)
177 !$acc update device(this%elem_optr_tensorprod3D_P9%MFilter_h1D)
178 !$acc update device(this%elem_optr_tensorprod3D_P9%MFilter_h1D_tr)
179 !$acc update device(this%elem_optr_tensorprod3D_P9%MFilter_v1D_tr)
180 type is (elementoperationtensorprod3d_p10)
181 this%elem_optr_tensorprod3D_P10 => elem_optr_base3d
182 !$acc enter data attach(this%elem_optr_tensorprod3D_P10)
183 !$acc update device(this%elem_optr_tensorprod3D_P10%IntrpMat_VPOrdM1_tr)
184 !$acc update device(this%elem_optr_tensorprod3D_P10%D1D)
185 !$acc update device(this%elem_optr_tensorprod3D_P10%D1D_tr)
186 !$acc update device(this%elem_optr_tensorprod3D_P10%Lift_mat)
187 !$acc update device(this%elem_optr_tensorprod3D_P10%MFilter_h1D)
188 !$acc update device(this%elem_optr_tensorprod3D_P10%MFilter_h1D_tr)
189 !$acc update device(this%elem_optr_tensorprod3D_P10%MFilter_v1D_tr)
190 type is (elementoperationtensorprod3d_p11)
191 this%elem_optr_tensorprod3D_P11 => elem_optr_base3d
192 !$acc enter data attach(this%elem_optr_tensorprod3D_P11)
193 !$acc update device(this%elem_optr_tensorprod3D_P11%IntrpMat_VPOrdM1_tr)
194 !$acc update device(this%elem_optr_tensorprod3D_P11%D1D)
195 !$acc update device(this%elem_optr_tensorprod3D_P11%D1D_tr)
196 !$acc update device(this%elem_optr_tensorprod3D_P11%Lift_mat)
197 !$acc update device(this%elem_optr_tensorprod3D_P11%MFilter_h1D)
198 !$acc update device(this%elem_optr_tensorprod3D_P11%MFilter_h1D_tr)
199 !$acc update device(this%elem_optr_tensorprod3D_P11%MFilter_v1D_tr)
200 type is (elementoperationtensorprod3d_p12)
201 this%elem_optr_tensorprod3D_P12 => elem_optr_base3d
202 !$acc enter data attach(this%elem_optr_tensorprod3D_P12)
203 !$acc update device(this%elem_optr_tensorprod3D_P12%IntrpMat_VPOrdM1_tr)
204 !$acc update device(this%elem_optr_tensorprod3D_P12%D1D)
205 !$acc update device(this%elem_optr_tensorprod3D_P12%D1D_tr)
206 !$acc update device(this%elem_optr_tensorprod3D_P12%Lift_mat)
207 !$acc update device(this%elem_optr_tensorprod3D_P12%MFilter_h1D)
208 !$acc update device(this%elem_optr_tensorprod3D_P12%MFilter_h1D_tr)
209 !$acc update device(this%elem_optr_tensorprod3D_P12%MFilter_v1D_tr)
210 type is (elementoperationtensorprod3d_p13)
211 this%elem_optr_tensorprod3D_P13 => elem_optr_base3d
212 !$acc enter data attach(this%elem_optr_tensorprod3D_P13)
213 !$acc update device(this%elem_optr_tensorprod3D_P13%IntrpMat_VPOrdM1_tr)
214 !$acc update device(this%elem_optr_tensorprod3D_P13%D1D)
215 !$acc update device(this%elem_optr_tensorprod3D_P13%D1D_tr)
216 !$acc update device(this%elem_optr_tensorprod3D_P13%Lift_mat)
217 !$acc update device(this%elem_optr_tensorprod3D_P13%MFilter_h1D)
218 !$acc update device(this%elem_optr_tensorprod3D_P13%MFilter_h1D_tr)
219 !$acc update device(this%elem_optr_tensorprod3D_P13%MFilter_v1D_tr)
220 type is (elementoperationtensorprod3d_p14)
221 this%elem_optr_tensorprod3D_P14 => elem_optr_base3d
222 !$acc enter data attach(this%elem_optr_tensorprod3D_P14)
223 !$acc update device(this%elem_optr_tensorprod3D_P14%IntrpMat_VPOrdM1_tr)
224 !$acc update device(this%elem_optr_tensorprod3D_P14%D1D)
225 !$acc update device(this%elem_optr_tensorprod3D_P14%D1D_tr)
226 !$acc update device(this%elem_optr_tensorprod3D_P14%Lift_mat)
227 !$acc update device(this%elem_optr_tensorprod3D_P14%MFilter_h1D)
228 !$acc update device(this%elem_optr_tensorprod3D_P14%MFilter_h1D_tr)
229 !$acc update device(this%elem_optr_tensorprod3D_P14%MFilter_v1D_tr)
230 type is (elementoperationtensorprod3d_p15)
231 this%elem_optr_tensorprod3D_P15 => elem_optr_base3d
232 !$acc enter data attach(this%elem_optr_tensorprod3D_P15)
233 !$acc update device(this%elem_optr_tensorprod3D_P15%IntrpMat_VPOrdM1_tr)
234 !$acc update device(this%elem_optr_tensorprod3D_P15%D1D)
235 !$acc update device(this%elem_optr_tensorprod3D_P15%D1D_tr)
236 !$acc update device(this%elem_optr_tensorprod3D_P15%Lift_mat)
237 !$acc update device(this%elem_optr_tensorprod3D_P15%MFilter_h1D)
238 !$acc update device(this%elem_optr_tensorprod3D_P15%MFilter_h1D_tr)
239 !$acc update device(this%elem_optr_tensorprod3D_P15%MFilter_v1D_tr)
240 class default
241 log_info("ElementOperationGPU_Init",*) "Unsupported type is specified for elem_optr_base3D. Check!"
242 call prc_abort
243 end select
244
245 return

◆ elementoperationgpu_vfilterpm1()

subroutine, public scale_element_operation_gpu_driver::elementoperationgpu_vfilterpm1 ( type(elementoperationgpudriver), intent(in) this,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d,this%nnode_v,ne_in), intent(in) vec_in,
integer, intent(in) ne_in,
integer, intent(in) ne_out,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d,this%nnode_v,ne_out), intent(out) vec_out )

Definition at line 257 of file scale_element_operation_gpu_driver.F90.

258 implicit none
259 type(ElementOperationGPUDriver), intent(in) :: this
260 integer, intent(in) :: Ne_in, Ne_out
261 real(RP), intent(in) :: vec_in(this%Nnode_h1D,this%Nnode_h1D,this%Nnode_v,Ne_in)
262 real(RP), intent(out) :: vec_out(this%Nnode_h1D,this%Nnode_h1D,this%Nnode_v,Ne_out)
263 !----------------------------------------------------------
264
265 !!$acc routine gang
266
267 select case (this%Nnode_h1D)
268 case (2)
269 call element_operation_kernel_matvec_dirz_p1( this%elem_optr_tensorprod3D_P1%IntrpMat_VPOrdM1_tr, vec_in, ne_in, ne_out, vec_out )
270 case (3)
271 call element_operation_kernel_matvec_dirz_p2( this%elem_optr_tensorprod3D_P2%IntrpMat_VPOrdM1_tr, vec_in, ne_in, ne_out, vec_out )
272 case (4)
273 call element_operation_kernel_matvec_dirz_p3( this%elem_optr_tensorprod3D_P3%IntrpMat_VPOrdM1_tr, vec_in, ne_in, ne_out, vec_out )
274 case (5)
275 call element_operation_kernel_matvec_dirz_p4( this%elem_optr_tensorprod3D_P4%IntrpMat_VPOrdM1_tr, vec_in, ne_in, ne_out, vec_out )
276 case (6)
277 call element_operation_kernel_matvec_dirz_p5( this%elem_optr_tensorprod3D_P5%IntrpMat_VPOrdM1_tr, vec_in, ne_in, ne_out, vec_out )
278 case (7)
279 call element_operation_kernel_matvec_dirz_p6( this%elem_optr_tensorprod3D_P6%IntrpMat_VPOrdM1_tr, vec_in, ne_in, ne_out, vec_out )
280 case (8)
281 call element_operation_kernel_matvec_dirz_p7( this%elem_optr_tensorprod3D_P7%IntrpMat_VPOrdM1_tr, vec_in, ne_in, ne_out, vec_out )
282 case (9)
283 call element_operation_kernel_matvec_dirz_p8( this%elem_optr_tensorprod3D_P8%IntrpMat_VPOrdM1_tr, vec_in, ne_in, ne_out, vec_out )
284 case (10)
285 call element_operation_kernel_matvec_dirz_p9( this%elem_optr_tensorprod3D_P9%IntrpMat_VPOrdM1_tr, vec_in, ne_in, ne_out, vec_out )
286 case (11)
287 call element_operation_kernel_matvec_dirz_p10( this%elem_optr_tensorprod3D_P10%IntrpMat_VPOrdM1_tr, vec_in, ne_in, ne_out, vec_out )
288 case (12)
289 call element_operation_kernel_matvec_dirz_p11( this%elem_optr_tensorprod3D_P11%IntrpMat_VPOrdM1_tr, vec_in, ne_in, ne_out, vec_out )
290 case (13)
291 call element_operation_kernel_matvec_dirz_p12( this%elem_optr_tensorprod3D_P12%IntrpMat_VPOrdM1_tr, vec_in, ne_in, ne_out, vec_out )
292 case (14)
293 call element_operation_kernel_matvec_dirz_p13( this%elem_optr_tensorprod3D_P13%IntrpMat_VPOrdM1_tr, vec_in, ne_in, ne_out, vec_out )
294 case (15)
295 call element_operation_kernel_matvec_dirz_p14( this%elem_optr_tensorprod3D_P14%IntrpMat_VPOrdM1_tr, vec_in, ne_in, ne_out, vec_out )
296 case (16)
297 call element_operation_kernel_matvec_dirz_p15( this%elem_optr_tensorprod3D_P15%IntrpMat_VPOrdM1_tr, vec_in, ne_in, ne_out, vec_out )
298 end select
299 return

References scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_dirz_p1(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_dirz_p10(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_dirz_p11(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_dirz_p12(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_dirz_p13(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_dirz_p14(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_dirz_p15(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_dirz_p2(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_dirz_p3(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_dirz_p4(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_dirz_p5(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_dirz_p6(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_dirz_p7(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_dirz_p8(), and scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_dirz_p9().

Referenced by scale_atm_dyn_dgm_globalnonhydro3d_rhot_heve_gpu::atm_dyn_dgm_globalnonhydro3d_rhot_heve_gpu_cal_tend_shallow_atm(), scale_atm_dyn_dgm_nonhydro3d_rhot_heve_gpu::atm_dyn_dgm_nonhydro3d_rhot_heve_cal_tend_gpu(), scale_atm_dyn_dgm_nonhydro3d_rhot_heve_gpu::atm_dyn_dgm_nonhydro3d_rhot_heve_cal_tend_gpu2(), and scale_element_operation_gpu_driver::elementoperationgpudriver::final().

◆ elementoperationgpu_div_kplane()

subroutine, public scale_element_operation_gpu_driver::elementoperationgpu_div_kplane ( type(elementoperationgpudriver), intent(in) this,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d,2), intent(in) flux2d_kplane,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d,this%nnode_v), intent(in) e11,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d,this%nnode_v), intent(in) e22,
integer, intent(in) k,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d), intent(out) div_xy )

Definition at line 302 of file scale_element_operation_gpu_driver.F90.

303 implicit none
304 type(ElementOperationGPUDriver), intent(in) :: this
305 real(RP), intent(in) :: Flux2D_kplane(this%Nnode_h1D,this%Nnode_h1D,2)
306 real(RP), intent(in) :: E11(this%Nnode_h1D,this%Nnode_h1D,this%Nnode_v)
307 real(RP), intent(in) :: E22(this%Nnode_h1D,this%Nnode_h1D,this%Nnode_v)
308 integer, intent(in) :: k
309 real(RP), intent(out) :: div_xy(this%Nnode_h1D,this%Nnode_h1D)
310 !----------------------------------------------------------
311
312 !$acc routine vector
313
314 select case (this%Nnode_h1D)
315 case (2)
316 call element_operation_kernel_matvec_divlike_dirxy_p1( this%elem_optr_tensorprod3D_P1%D1D, this%elem_optr_tensorprod3D_P1%D1D_tr, flux2d_kplane(:,:,1), flux2d_kplane(:,:,2), &
317 e11(:,:,k), e22(:,:,k), &
318 div_xy )
319 case (3)
320 call element_operation_kernel_matvec_divlike_dirxy_p2( this%elem_optr_tensorprod3D_P2%D1D, this%elem_optr_tensorprod3D_P2%D1D_tr, flux2d_kplane(:,:,1), flux2d_kplane(:,:,2), &
321 e11(:,:,k), e22(:,:,k), &
322 div_xy )
323 case (4)
324 call element_operation_kernel_matvec_divlike_dirxy_p3( this%elem_optr_tensorprod3D_P3%D1D, this%elem_optr_tensorprod3D_P3%D1D_tr, flux2d_kplane(:,:,1), flux2d_kplane(:,:,2), &
325 e11(:,:,k), e22(:,:,k), &
326 div_xy )
327 case (5)
328 call element_operation_kernel_matvec_divlike_dirxy_p4( this%elem_optr_tensorprod3D_P4%D1D, this%elem_optr_tensorprod3D_P4%D1D_tr, flux2d_kplane(:,:,1), flux2d_kplane(:,:,2), &
329 e11(:,:,k), e22(:,:,k), &
330 div_xy )
331 case (6)
332 call element_operation_kernel_matvec_divlike_dirxy_p5( this%elem_optr_tensorprod3D_P5%D1D, this%elem_optr_tensorprod3D_P5%D1D_tr, flux2d_kplane(:,:,1), flux2d_kplane(:,:,2), &
333 e11(:,:,k), e22(:,:,k), &
334 div_xy )
335 case (7)
336 call element_operation_kernel_matvec_divlike_dirxy_p6( this%elem_optr_tensorprod3D_P6%D1D, this%elem_optr_tensorprod3D_P6%D1D_tr, flux2d_kplane(:,:,1), flux2d_kplane(:,:,2), &
337 e11(:,:,k), e22(:,:,k), &
338 div_xy )
339 case (8)
340 call element_operation_kernel_matvec_divlike_dirxy_p7( this%elem_optr_tensorprod3D_P7%D1D, this%elem_optr_tensorprod3D_P7%D1D_tr, flux2d_kplane(:,:,1), flux2d_kplane(:,:,2), &
341 e11(:,:,k), e22(:,:,k), &
342 div_xy )
343 case (9)
344 call element_operation_kernel_matvec_divlike_dirxy_p8( this%elem_optr_tensorprod3D_P8%D1D, this%elem_optr_tensorprod3D_P8%D1D_tr, flux2d_kplane(:,:,1), flux2d_kplane(:,:,2), &
345 e11(:,:,k), e22(:,:,k), &
346 div_xy )
347 case (10)
348 call element_operation_kernel_matvec_divlike_dirxy_p9( this%elem_optr_tensorprod3D_P9%D1D, this%elem_optr_tensorprod3D_P9%D1D_tr, flux2d_kplane(:,:,1), flux2d_kplane(:,:,2), &
349 e11(:,:,k), e22(:,:,k), &
350 div_xy )
351 case (11)
352 call element_operation_kernel_matvec_divlike_dirxy_p10( this%elem_optr_tensorprod3D_P10%D1D, this%elem_optr_tensorprod3D_P10%D1D_tr, flux2d_kplane(:,:,1), flux2d_kplane(:,:,2), &
353 e11(:,:,k), e22(:,:,k), &
354 div_xy )
355 case (12)
356 call element_operation_kernel_matvec_divlike_dirxy_p11( this%elem_optr_tensorprod3D_P11%D1D, this%elem_optr_tensorprod3D_P11%D1D_tr, flux2d_kplane(:,:,1), flux2d_kplane(:,:,2), &
357 e11(:,:,k), e22(:,:,k), &
358 div_xy )
359 case (13)
360 call element_operation_kernel_matvec_divlike_dirxy_p12( this%elem_optr_tensorprod3D_P12%D1D, this%elem_optr_tensorprod3D_P12%D1D_tr, flux2d_kplane(:,:,1), flux2d_kplane(:,:,2), &
361 e11(:,:,k), e22(:,:,k), &
362 div_xy )
363 case (14)
364 call element_operation_kernel_matvec_divlike_dirxy_p13( this%elem_optr_tensorprod3D_P13%D1D, this%elem_optr_tensorprod3D_P13%D1D_tr, flux2d_kplane(:,:,1), flux2d_kplane(:,:,2), &
365 e11(:,:,k), e22(:,:,k), &
366 div_xy )
367 case (15)
368 call element_operation_kernel_matvec_divlike_dirxy_p14( this%elem_optr_tensorprod3D_P14%D1D, this%elem_optr_tensorprod3D_P14%D1D_tr, flux2d_kplane(:,:,1), flux2d_kplane(:,:,2), &
369 e11(:,:,k), e22(:,:,k), &
370 div_xy )
371 case (16)
372 call element_operation_kernel_matvec_divlike_dirxy_p15( this%elem_optr_tensorprod3D_P15%D1D, this%elem_optr_tensorprod3D_P15%D1D_tr, flux2d_kplane(:,:,1), flux2d_kplane(:,:,2), &
373 e11(:,:,k), e22(:,:,k), &
374 div_xy )
375 end select
376 return

References scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_p1(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_p10(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_p11(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_p12(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_p13(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_p14(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_p15(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_p2(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_p3(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_p4(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_p5(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_p6(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_p7(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_p8(), and scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_p9().

Referenced by scale_atm_dyn_dgm_globalnonhydro3d_rhot_heve_gpu::atm_dyn_dgm_globalnonhydro3d_rhot_heve_gpu_cal_tend_shallow_atm(), scale_atm_dyn_dgm_nonhydro3d_rhot_heve_gpu::atm_dyn_dgm_nonhydro3d_rhot_heve_cal_tend_gpu(), scale_atm_dyn_dgm_nonhydro3d_rhot_heve_gpu::atm_dyn_dgm_nonhydro3d_rhot_heve_cal_tend_gpu2(), and scale_element_operation_gpu_driver::elementoperationgpudriver::final().

◆ elementoperationgpu_divvar5_kplane()

subroutine, public scale_element_operation_gpu_driver::elementoperationgpu_divvar5_kplane ( type(elementoperationgpudriver), intent(in) this,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d,5,2), intent(in) flux2d_kplane,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d,this%nnode_v), intent(in) e11,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d,this%nnode_v), intent(in) e22,
integer, intent(in) k,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d,5), intent(out) div_xy )

Definition at line 379 of file scale_element_operation_gpu_driver.F90.

380 implicit none
381 type(ElementOperationGPUDriver), intent(in) :: this
382 real(RP), intent(in) :: Flux2D_kplane(this%Nnode_h1D,this%Nnode_h1D,5,2)
383 real(RP), intent(in) :: E11(this%Nnode_h1D,this%Nnode_h1D,this%Nnode_v)
384 real(RP), intent(in) :: E22(this%Nnode_h1D,this%Nnode_h1D,this%Nnode_v)
385 integer, intent(in) :: k
386 real(RP), intent(out) :: div_xy(this%Nnode_h1D,this%Nnode_h1D,5)
387 !----------------------------------------------------------
388
389 !$acc routine vector
390
391 select case (this%Nnode_h1D)
392 case (2)
393 call element_operation_kernel_matvec_divlike_dirxy_var5_p1( this%elem_optr_tensorprod3D_P1%D1D, this%elem_optr_tensorprod3D_P1%D1D_tr, flux2d_kplane(:,:,:,1), flux2d_kplane(:,:,:,2), &
394 e11(:,:,k), e22(:,:,k), &
395 div_xy )
396 case (3)
397 call element_operation_kernel_matvec_divlike_dirxy_var5_p2( this%elem_optr_tensorprod3D_P2%D1D, this%elem_optr_tensorprod3D_P2%D1D_tr, flux2d_kplane(:,:,:,1), flux2d_kplane(:,:,:,2), &
398 e11(:,:,k), e22(:,:,k), &
399 div_xy )
400 case (4)
401 call element_operation_kernel_matvec_divlike_dirxy_var5_p3( this%elem_optr_tensorprod3D_P3%D1D, this%elem_optr_tensorprod3D_P3%D1D_tr, flux2d_kplane(:,:,:,1), flux2d_kplane(:,:,:,2), &
402 e11(:,:,k), e22(:,:,k), &
403 div_xy )
404 case (5)
405 call element_operation_kernel_matvec_divlike_dirxy_var5_p4( this%elem_optr_tensorprod3D_P4%D1D, this%elem_optr_tensorprod3D_P4%D1D_tr, flux2d_kplane(:,:,:,1), flux2d_kplane(:,:,:,2), &
406 e11(:,:,k), e22(:,:,k), &
407 div_xy )
408 case (6)
409 call element_operation_kernel_matvec_divlike_dirxy_var5_p5( this%elem_optr_tensorprod3D_P5%D1D, this%elem_optr_tensorprod3D_P5%D1D_tr, flux2d_kplane(:,:,:,1), flux2d_kplane(:,:,:,2), &
410 e11(:,:,k), e22(:,:,k), &
411 div_xy )
412 case (7)
413 call element_operation_kernel_matvec_divlike_dirxy_var5_p6( this%elem_optr_tensorprod3D_P6%D1D, this%elem_optr_tensorprod3D_P6%D1D_tr, flux2d_kplane(:,:,:,1), flux2d_kplane(:,:,:,2), &
414 e11(:,:,k), e22(:,:,k), &
415 div_xy )
416 case (8)
417 call element_operation_kernel_matvec_divlike_dirxy_var5_p7( this%elem_optr_tensorprod3D_P7%D1D, this%elem_optr_tensorprod3D_P7%D1D_tr, flux2d_kplane(:,:,:,1), flux2d_kplane(:,:,:,2), &
418 e11(:,:,k), e22(:,:,k), &
419 div_xy )
420 case (9)
421 call element_operation_kernel_matvec_divlike_dirxy_var5_p8( this%elem_optr_tensorprod3D_P8%D1D, this%elem_optr_tensorprod3D_P8%D1D_tr, flux2d_kplane(:,:,:,1), flux2d_kplane(:,:,:,2), &
422 e11(:,:,k), e22(:,:,k), &
423 div_xy )
424 case (10)
425 call element_operation_kernel_matvec_divlike_dirxy_var5_p9( this%elem_optr_tensorprod3D_P9%D1D, this%elem_optr_tensorprod3D_P9%D1D_tr, flux2d_kplane(:,:,:,1), flux2d_kplane(:,:,:,2), &
426 e11(:,:,k), e22(:,:,k), &
427 div_xy )
428 case (11)
429 call element_operation_kernel_matvec_divlike_dirxy_var5_p10( this%elem_optr_tensorprod3D_P10%D1D, this%elem_optr_tensorprod3D_P10%D1D_tr, flux2d_kplane(:,:,:,1), flux2d_kplane(:,:,:,2), &
430 e11(:,:,k), e22(:,:,k), &
431 div_xy )
432 case (12)
433 call element_operation_kernel_matvec_divlike_dirxy_var5_p11( this%elem_optr_tensorprod3D_P11%D1D, this%elem_optr_tensorprod3D_P11%D1D_tr, flux2d_kplane(:,:,:,1), flux2d_kplane(:,:,:,2), &
434 e11(:,:,k), e22(:,:,k), &
435 div_xy )
436 case (13)
437 call element_operation_kernel_matvec_divlike_dirxy_var5_p12( this%elem_optr_tensorprod3D_P12%D1D, this%elem_optr_tensorprod3D_P12%D1D_tr, flux2d_kplane(:,:,:,1), flux2d_kplane(:,:,:,2), &
438 e11(:,:,k), e22(:,:,k), &
439 div_xy )
440 case (14)
441 call element_operation_kernel_matvec_divlike_dirxy_var5_p13( this%elem_optr_tensorprod3D_P13%D1D, this%elem_optr_tensorprod3D_P13%D1D_tr, flux2d_kplane(:,:,:,1), flux2d_kplane(:,:,:,2), &
442 e11(:,:,k), e22(:,:,k), &
443 div_xy )
444 case (15)
445 call element_operation_kernel_matvec_divlike_dirxy_var5_p14( this%elem_optr_tensorprod3D_P14%D1D, this%elem_optr_tensorprod3D_P14%D1D_tr, flux2d_kplane(:,:,:,1), flux2d_kplane(:,:,:,2), &
446 e11(:,:,k), e22(:,:,k), &
447 div_xy )
448 case (16)
449 call element_operation_kernel_matvec_divlike_dirxy_var5_p15( this%elem_optr_tensorprod3D_P15%D1D, this%elem_optr_tensorprod3D_P15%D1D_tr, flux2d_kplane(:,:,:,1), flux2d_kplane(:,:,:,2), &
450 e11(:,:,k), e22(:,:,k), &
451 div_xy )
452 end select
453 return

References scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p1(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p10(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p11(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p12(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p13(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p14(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p15(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p2(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p3(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p4(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p5(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p6(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p7(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p8(), and scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p9().

Referenced by scale_atm_dyn_dgm_nonhydro3d_rhot_heve_gpu::atm_dyn_dgm_nonhydro3d_rhot_heve_cal_tend_gpu(), and scale_element_operation_gpu_driver::elementoperationgpudriver::final().

◆ elementoperationgpu_divvar5_kplane2()

subroutine, public scale_element_operation_gpu_driver::elementoperationgpu_divvar5_kplane2 ( type(elementoperationgpudriver), intent(in) this,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d,5), intent(in) flux2d_kplane_x,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d,5), intent(in) flux2d_kplane_y,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d), intent(in) e11,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d), intent(in) e22,
integer, intent(in) k,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d,5), intent(out) div_xy )

Definition at line 456 of file scale_element_operation_gpu_driver.F90.

457 implicit none
458 type(ElementOperationGPUDriver), intent(in) :: this
459 real(RP), intent(in) :: Flux2D_kplane_x(this%Nnode_h1D,this%Nnode_h1D,5)
460 real(RP), intent(in) :: Flux2D_kplane_y(this%Nnode_h1D,this%Nnode_h1D,5)
461 real(RP), intent(in) :: E11(this%Nnode_h1D,this%Nnode_h1D)
462 real(RP), intent(in) :: E22(this%Nnode_h1D,this%Nnode_h1D)
463 integer, intent(in) :: k
464 real(RP), intent(out) :: div_xy(this%Nnode_h1D,this%Nnode_h1D,5)
465 !----------------------------------------------------------
466
467 !$acc routine vector
468
469 select case (this%Nnode_h1D)
470 case (2)
471 call element_operation_kernel_matvec_divlike_dirxy_var5_p1( this%elem_optr_tensorprod3D_P1%D1D, this%elem_optr_tensorprod3D_P1%D1D_tr, flux2d_kplane_x, flux2d_kplane_y, &
472 e11, e22, &
473 div_xy )
474 case (3)
475 call element_operation_kernel_matvec_divlike_dirxy_var5_p2( this%elem_optr_tensorprod3D_P2%D1D, this%elem_optr_tensorprod3D_P2%D1D_tr, flux2d_kplane_x, flux2d_kplane_y, &
476 e11, e22, &
477 div_xy )
478 case (4)
479 call element_operation_kernel_matvec_divlike_dirxy_var5_p3( this%elem_optr_tensorprod3D_P3%D1D, this%elem_optr_tensorprod3D_P3%D1D_tr, flux2d_kplane_x, flux2d_kplane_y, &
480 e11, e22, &
481 div_xy )
482 case (5)
483 call element_operation_kernel_matvec_divlike_dirxy_var5_p4( this%elem_optr_tensorprod3D_P4%D1D, this%elem_optr_tensorprod3D_P4%D1D_tr, flux2d_kplane_x, flux2d_kplane_y, &
484 e11, e22, &
485 div_xy )
486 case (6)
487 call element_operation_kernel_matvec_divlike_dirxy_var5_p5( this%elem_optr_tensorprod3D_P5%D1D, this%elem_optr_tensorprod3D_P5%D1D_tr, flux2d_kplane_x, flux2d_kplane_y, &
488 e11, e22, &
489 div_xy )
490 case (7)
491 call element_operation_kernel_matvec_divlike_dirxy_var5_p6( this%elem_optr_tensorprod3D_P6%D1D, this%elem_optr_tensorprod3D_P6%D1D_tr, flux2d_kplane_x, flux2d_kplane_y, &
492 e11, e22, &
493 div_xy )
494 case (8)
495 call element_operation_kernel_matvec_divlike_dirxy_var5_p7( this%elem_optr_tensorprod3D_P7%D1D, this%elem_optr_tensorprod3D_P7%D1D_tr, flux2d_kplane_x, flux2d_kplane_y, &
496 e11, e22, &
497 div_xy )
498 case (9)
499 call element_operation_kernel_matvec_divlike_dirxy_var5_p8( this%elem_optr_tensorprod3D_P8%D1D, this%elem_optr_tensorprod3D_P8%D1D_tr, flux2d_kplane_x, flux2d_kplane_y, &
500 e11, e22, &
501 div_xy )
502 case (10)
503 call element_operation_kernel_matvec_divlike_dirxy_var5_p9( this%elem_optr_tensorprod3D_P9%D1D, this%elem_optr_tensorprod3D_P9%D1D_tr, flux2d_kplane_x, flux2d_kplane_y, &
504 e11, e22, &
505 div_xy )
506 case (11)
507 call element_operation_kernel_matvec_divlike_dirxy_var5_p10( this%elem_optr_tensorprod3D_P10%D1D, this%elem_optr_tensorprod3D_P10%D1D_tr, flux2d_kplane_x, flux2d_kplane_y, &
508 e11, e22, &
509 div_xy )
510 case (12)
511 call element_operation_kernel_matvec_divlike_dirxy_var5_p11( this%elem_optr_tensorprod3D_P11%D1D, this%elem_optr_tensorprod3D_P11%D1D_tr, flux2d_kplane_x, flux2d_kplane_y, &
512 e11, e22, &
513 div_xy )
514 case (13)
515 call element_operation_kernel_matvec_divlike_dirxy_var5_p12( this%elem_optr_tensorprod3D_P12%D1D, this%elem_optr_tensorprod3D_P12%D1D_tr, flux2d_kplane_x, flux2d_kplane_y, &
516 e11, e22, &
517 div_xy )
518 case (14)
519 call element_operation_kernel_matvec_divlike_dirxy_var5_p13( this%elem_optr_tensorprod3D_P13%D1D, this%elem_optr_tensorprod3D_P13%D1D_tr, flux2d_kplane_x, flux2d_kplane_y, &
520 e11, e22, &
521 div_xy )
522 case (15)
523 call element_operation_kernel_matvec_divlike_dirxy_var5_p14( this%elem_optr_tensorprod3D_P14%D1D, this%elem_optr_tensorprod3D_P14%D1D_tr, flux2d_kplane_x, flux2d_kplane_y, &
524 e11, e22, &
525 div_xy )
526 case (16)
527 call element_operation_kernel_matvec_divlike_dirxy_var5_p15( this%elem_optr_tensorprod3D_P15%D1D, this%elem_optr_tensorprod3D_P15%D1D_tr, flux2d_kplane_x, flux2d_kplane_y, &
528 e11, e22, &
529 div_xy )
530 end select
531 return

References scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p1(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p10(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p11(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p12(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p13(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p14(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p15(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p2(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p3(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p4(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p5(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p6(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p7(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p8(), and scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirxy_var5_p9().

Referenced by scale_atm_dyn_dgm_globalnonhydro3d_rhot_heve_gpu::atm_dyn_dgm_globalnonhydro3d_rhot_heve_gpu_cal_tend_shallow_atm(), scale_atm_dyn_dgm_nonhydro3d_rhot_heve_gpu::atm_dyn_dgm_nonhydro3d_rhot_heve_cal_tend_gpu2(), and scale_element_operation_gpu_driver::elementoperationgpudriver::final().

◆ elementoperationgpu_divvar5_z_lift()

subroutine, public scale_element_operation_gpu_driver::elementoperationgpu_divvar5_z_lift ( type(elementoperationgpudriver), intent(in) this,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d,5,this%nnode_v), intent(in) fluxz,
real(rp), dimension(this%nfptot,5), intent(in) ebnd_flux,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d,this%nnode_v), intent(in) e33,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d,this%nnode_v), intent(in) gsqrt,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d,5,this%nnode_v), intent(inout) div3d )

Definition at line 534 of file scale_element_operation_gpu_driver.F90.

535 implicit none
536 type(ElementOperationGPUDriver), intent(in) :: this
537 real(RP), intent(in) :: FluxZ(this%Nnode_h1D,this%Nnode_h1D,5,this%Nnode_v)
538 real(RP), intent(in) :: ebnd_flux(this%NfpTot,5)
539 real(RP), intent(in) :: E33(this%Nnode_h1D,this%Nnode_h1D,this%Nnode_v)
540 real(RP), intent(in) :: Gsqrt(this%Nnode_h1D,this%Nnode_h1D,this%Nnode_v)
541 real(RP), intent(inout) :: div3D(this%Nnode_h1D,this%Nnode_h1D,5,this%Nnode_v)
542 !----------------------------------------------------------
543
544 !$acc routine vector
545
546 select case (this%Nnode_h1D)
547 case (2)
548 call element_operation_kernel_matvec_divlike_dirz_lift_var5_p1( &
549 this%elem_optr_tensorprod3D_P1%D1D_tr, this%elem_optr_tensorprod3D_P1%Lift_mat, fluxz, ebnd_flux, e33, gsqrt, &
550 div3d )
551 case (3)
552 call element_operation_kernel_matvec_divlike_dirz_lift_var5_p2( &
553 this%elem_optr_tensorprod3D_P2%D1D_tr, this%elem_optr_tensorprod3D_P2%Lift_mat, fluxz, ebnd_flux, e33, gsqrt, &
554 div3d )
555 case (4)
556 call element_operation_kernel_matvec_divlike_dirz_lift_var5_p3( &
557 this%elem_optr_tensorprod3D_P3%D1D_tr, this%elem_optr_tensorprod3D_P3%Lift_mat, fluxz, ebnd_flux, e33, gsqrt, &
558 div3d )
559 case (5)
560 call element_operation_kernel_matvec_divlike_dirz_lift_var5_p4( &
561 this%elem_optr_tensorprod3D_P4%D1D_tr, this%elem_optr_tensorprod3D_P4%Lift_mat, fluxz, ebnd_flux, e33, gsqrt, &
562 div3d )
563 case (6)
564 call element_operation_kernel_matvec_divlike_dirz_lift_var5_p5( &
565 this%elem_optr_tensorprod3D_P5%D1D_tr, this%elem_optr_tensorprod3D_P5%Lift_mat, fluxz, ebnd_flux, e33, gsqrt, &
566 div3d )
567 case (7)
568 call element_operation_kernel_matvec_divlike_dirz_lift_var5_p6( &
569 this%elem_optr_tensorprod3D_P6%D1D_tr, this%elem_optr_tensorprod3D_P6%Lift_mat, fluxz, ebnd_flux, e33, gsqrt, &
570 div3d )
571 case (8)
572 call element_operation_kernel_matvec_divlike_dirz_lift_var5_p7( &
573 this%elem_optr_tensorprod3D_P7%D1D_tr, this%elem_optr_tensorprod3D_P7%Lift_mat, fluxz, ebnd_flux, e33, gsqrt, &
574 div3d )
575 case (9)
576 call element_operation_kernel_matvec_divlike_dirz_lift_var5_p8( &
577 this%elem_optr_tensorprod3D_P8%D1D_tr, this%elem_optr_tensorprod3D_P8%Lift_mat, fluxz, ebnd_flux, e33, gsqrt, &
578 div3d )
579 case (10)
580 call element_operation_kernel_matvec_divlike_dirz_lift_var5_p9( &
581 this%elem_optr_tensorprod3D_P9%D1D_tr, this%elem_optr_tensorprod3D_P9%Lift_mat, fluxz, ebnd_flux, e33, gsqrt, &
582 div3d )
583 case (11)
584 call element_operation_kernel_matvec_divlike_dirz_lift_var5_p10( &
585 this%elem_optr_tensorprod3D_P10%D1D_tr, this%elem_optr_tensorprod3D_P10%Lift_mat, fluxz, ebnd_flux, e33, gsqrt, &
586 div3d )
587 case (12)
588 call element_operation_kernel_matvec_divlike_dirz_lift_var5_p11( &
589 this%elem_optr_tensorprod3D_P11%D1D_tr, this%elem_optr_tensorprod3D_P11%Lift_mat, fluxz, ebnd_flux, e33, gsqrt, &
590 div3d )
591 case (13)
592 call element_operation_kernel_matvec_divlike_dirz_lift_var5_p12( &
593 this%elem_optr_tensorprod3D_P12%D1D_tr, this%elem_optr_tensorprod3D_P12%Lift_mat, fluxz, ebnd_flux, e33, gsqrt, &
594 div3d )
595 case (14)
596 call element_operation_kernel_matvec_divlike_dirz_lift_var5_p13( &
597 this%elem_optr_tensorprod3D_P13%D1D_tr, this%elem_optr_tensorprod3D_P13%Lift_mat, fluxz, ebnd_flux, e33, gsqrt, &
598 div3d )
599 case (15)
600 call element_operation_kernel_matvec_divlike_dirz_lift_var5_p14( &
601 this%elem_optr_tensorprod3D_P14%D1D_tr, this%elem_optr_tensorprod3D_P14%Lift_mat, fluxz, ebnd_flux, e33, gsqrt, &
602 div3d )
603 case (16)
604 call element_operation_kernel_matvec_divlike_dirz_lift_var5_p15( &
605 this%elem_optr_tensorprod3D_P15%D1D_tr, this%elem_optr_tensorprod3D_P15%Lift_mat, fluxz, ebnd_flux, e33, gsqrt, &
606 div3d )
607 end select
608 return

References scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirz_lift_var5_p1(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirz_lift_var5_p10(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirz_lift_var5_p11(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirz_lift_var5_p12(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirz_lift_var5_p13(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirz_lift_var5_p14(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirz_lift_var5_p15(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirz_lift_var5_p2(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirz_lift_var5_p3(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirz_lift_var5_p4(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirz_lift_var5_p5(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirz_lift_var5_p6(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirz_lift_var5_p7(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirz_lift_var5_p8(), and scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_dirz_lift_var5_p9().

Referenced by scale_atm_dyn_dgm_globalnonhydro3d_rhot_heve_gpu::atm_dyn_dgm_globalnonhydro3d_rhot_heve_gpu_cal_tend_shallow_atm(), scale_atm_dyn_dgm_nonhydro3d_rhot_heve_gpu::atm_dyn_dgm_nonhydro3d_rhot_heve_cal_tend_gpu(), scale_atm_dyn_dgm_nonhydro3d_rhot_heve_gpu::atm_dyn_dgm_nonhydro3d_rhot_heve_cal_tend_gpu2(), and scale_element_operation_gpu_driver::elementoperationgpudriver::final().

◆ elementoperationgpu_divvar5()

subroutine, public scale_element_operation_gpu_driver::elementoperationgpu_divvar5 ( type(elementoperationgpudriver), intent(in) this,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d,5,this%nnode_v,ne), intent(in) flux_x,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d,5,this%nnode_v,ne), intent(in) flux_y,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d,5,this%nnode_v,ne), intent(in) flux_z,
real(rp), dimension(this%nfptot,5,ne), intent(in) ebnd_flux,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d,this%nnode_v,ne), intent(in) e11,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d,this%nnode_v,ne), intent(in) e22,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d,this%nnode_v,ne), intent(in) e33,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d,this%nnode_v,ne), intent(in) gsqrt,
integer, intent(in) ne,
real(rp), dimension(this%nnode_h1d,this%nnode_h1d,5,this%nnode_v,ne), intent(out) div3d )

Definition at line 611 of file scale_element_operation_gpu_driver.F90.

612 implicit none
613 type(ElementOperationGPUDriver), intent(in) :: this
614 integer, intent(in) :: Ne
615 real(RP), intent(in) :: Flux_x(this%Nnode_h1D,this%Nnode_h1D,5,this%Nnode_v,Ne)
616 real(RP), intent(in) :: Flux_y(this%Nnode_h1D,this%Nnode_h1D,5,this%Nnode_v,Ne)
617 real(RP), intent(in) :: Flux_z(this%Nnode_h1D,this%Nnode_h1D,5,this%Nnode_v,Ne)
618 real(RP), intent(in) :: ebnd_flux(this%NfpTot,5,Ne)
619 real(RP), intent(in) :: E11(this%Nnode_h1D,this%Nnode_h1D,this%Nnode_v,Ne)
620 real(RP), intent(in) :: E22(this%Nnode_h1D,this%Nnode_h1D,this%Nnode_v,Ne)
621 real(RP), intent(in) :: E33(this%Nnode_h1D,this%Nnode_h1D,this%Nnode_v,Ne)
622 real(RP), intent(in) :: Gsqrt(this%Nnode_h1D,this%Nnode_h1D,this%Nnode_v,Ne)
623 real(RP), intent(out) :: div3D(this%Nnode_h1D,this%Nnode_h1D,5,this%Nnode_v,Ne)
624 !----------------------------------------------------------
625
626 select case (this%Nnode_h1D)
627 case (2)
628 call element_operation_kernel_matvec_divlike_var5_p1_v2( &
629 this%elem_optr_tensorprod3D_P1%D1D, this%elem_optr_tensorprod3D_P1%D1D_tr, this%elem_optr_tensorprod3D_P1%Lift_mat, &
630 flux_x, flux_y, flux_z, ebnd_flux, &
631 e11, e22, e33, gsqrt, ne, &
632 div3d )
633 case (3)
634 call element_operation_kernel_matvec_divlike_var5_p2_v2( &
635 this%elem_optr_tensorprod3D_P2%D1D, this%elem_optr_tensorprod3D_P2%D1D_tr, this%elem_optr_tensorprod3D_P2%Lift_mat, &
636 flux_x, flux_y, flux_z, ebnd_flux, &
637 e11, e22, e33, gsqrt, ne, &
638 div3d )
639 case (4)
640 call element_operation_kernel_matvec_divlike_var5_p3_v2( &
641 this%elem_optr_tensorprod3D_P3%D1D, this%elem_optr_tensorprod3D_P3%D1D_tr, this%elem_optr_tensorprod3D_P3%Lift_mat, &
642 flux_x, flux_y, flux_z, ebnd_flux, &
643 e11, e22, e33, gsqrt, ne, &
644 div3d )
645 case (5)
646 call element_operation_kernel_matvec_divlike_var5_p4_v2( &
647 this%elem_optr_tensorprod3D_P4%D1D, this%elem_optr_tensorprod3D_P4%D1D_tr, this%elem_optr_tensorprod3D_P4%Lift_mat, &
648 flux_x, flux_y, flux_z, ebnd_flux, &
649 e11, e22, e33, gsqrt, ne, &
650 div3d )
651 case (6)
652 call element_operation_kernel_matvec_divlike_var5_p5_v2( &
653 this%elem_optr_tensorprod3D_P5%D1D, this%elem_optr_tensorprod3D_P5%D1D_tr, this%elem_optr_tensorprod3D_P5%Lift_mat, &
654 flux_x, flux_y, flux_z, ebnd_flux, &
655 e11, e22, e33, gsqrt, ne, &
656 div3d )
657 case (7)
658 call element_operation_kernel_matvec_divlike_var5_p6_v2( &
659 this%elem_optr_tensorprod3D_P6%D1D, this%elem_optr_tensorprod3D_P6%D1D_tr, this%elem_optr_tensorprod3D_P6%Lift_mat, &
660 flux_x, flux_y, flux_z, ebnd_flux, &
661 e11, e22, e33, gsqrt, ne, &
662 div3d )
663 case (8)
664 call element_operation_kernel_matvec_divlike_var5_p7_v2( &
665 this%elem_optr_tensorprod3D_P7%D1D, this%elem_optr_tensorprod3D_P7%D1D_tr, this%elem_optr_tensorprod3D_P7%Lift_mat, &
666 flux_x, flux_y, flux_z, ebnd_flux, &
667 e11, e22, e33, gsqrt, ne, &
668 div3d )
669 case (9)
670 call element_operation_kernel_matvec_divlike_var5_p8_v2( &
671 this%elem_optr_tensorprod3D_P8%D1D, this%elem_optr_tensorprod3D_P8%D1D_tr, this%elem_optr_tensorprod3D_P8%Lift_mat, &
672 flux_x, flux_y, flux_z, ebnd_flux, &
673 e11, e22, e33, gsqrt, ne, &
674 div3d )
675 case (10)
676 call element_operation_kernel_matvec_divlike_var5_p9_v2( &
677 this%elem_optr_tensorprod3D_P9%D1D, this%elem_optr_tensorprod3D_P9%D1D_tr, this%elem_optr_tensorprod3D_P9%Lift_mat, &
678 flux_x, flux_y, flux_z, ebnd_flux, &
679 e11, e22, e33, gsqrt, ne, &
680 div3d )
681 case (11)
682 call element_operation_kernel_matvec_divlike_var5_p10_v2( &
683 this%elem_optr_tensorprod3D_P10%D1D, this%elem_optr_tensorprod3D_P10%D1D_tr, this%elem_optr_tensorprod3D_P10%Lift_mat, &
684 flux_x, flux_y, flux_z, ebnd_flux, &
685 e11, e22, e33, gsqrt, ne, &
686 div3d )
687 case (12)
688 call element_operation_kernel_matvec_divlike_var5_p11_v2( &
689 this%elem_optr_tensorprod3D_P11%D1D, this%elem_optr_tensorprod3D_P11%D1D_tr, this%elem_optr_tensorprod3D_P11%Lift_mat, &
690 flux_x, flux_y, flux_z, ebnd_flux, &
691 e11, e22, e33, gsqrt, ne, &
692 div3d )
693 case (13)
694 call element_operation_kernel_matvec_divlike_var5_p12_v2( &
695 this%elem_optr_tensorprod3D_P12%D1D, this%elem_optr_tensorprod3D_P12%D1D_tr, this%elem_optr_tensorprod3D_P12%Lift_mat, &
696 flux_x, flux_y, flux_z, ebnd_flux, &
697 e11, e22, e33, gsqrt, ne, &
698 div3d )
699 case (14)
700 call element_operation_kernel_matvec_divlike_var5_p13_v2( &
701 this%elem_optr_tensorprod3D_P13%D1D, this%elem_optr_tensorprod3D_P13%D1D_tr, this%elem_optr_tensorprod3D_P13%Lift_mat, &
702 flux_x, flux_y, flux_z, ebnd_flux, &
703 e11, e22, e33, gsqrt, ne, &
704 div3d )
705 case (15)
706 call element_operation_kernel_matvec_divlike_var5_p14_v2( &
707 this%elem_optr_tensorprod3D_P14%D1D, this%elem_optr_tensorprod3D_P14%D1D_tr, this%elem_optr_tensorprod3D_P14%Lift_mat, &
708 flux_x, flux_y, flux_z, ebnd_flux, &
709 e11, e22, e33, gsqrt, ne, &
710 div3d )
711 case (16)
712 call element_operation_kernel_matvec_divlike_var5_p15_v2( &
713 this%elem_optr_tensorprod3D_P15%D1D, this%elem_optr_tensorprod3D_P15%D1D_tr, this%elem_optr_tensorprod3D_P15%Lift_mat, &
714 flux_x, flux_y, flux_z, ebnd_flux, &
715 e11, e22, e33, gsqrt, ne, &
716 div3d )
717 end select
718 return

References scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_var5_p10_v2(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_var5_p11_v2(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_var5_p12_v2(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_var5_p13_v2(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_var5_p14_v2(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_var5_p15_v2(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_var5_p1_v2(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_var5_p2_v2(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_var5_p3_v2(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_var5_p4_v2(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_var5_p5_v2(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_var5_p6_v2(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_var5_p7_v2(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_var5_p8_v2(), and scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_divlike_var5_p9_v2().

Referenced by scale_atm_dyn_dgm_globalnonhydro3d_rhot_heve_gpu::atm_dyn_dgm_globalnonhydro3d_rhot_heve_gpu_cal_tend_shallow_atm(), scale_atm_dyn_dgm_nonhydro3d_rhot_heve_gpu::atm_dyn_dgm_nonhydro3d_rhot_heve_cal_tend_gpu2(), and scale_element_operation_gpu_driver::elementoperationgpudriver::final().

◆ elementoperationgpu_modalfilter_var5()

subroutine, public scale_element_operation_gpu_driver::elementoperationgpu_modalfilter_var5 ( type(elementoperationgpudriver), intent(in) this,
real(rp), dimension(this%nnode_h1d**2*this%nnode_v,ne,5), intent(in) vec_in,
real(rp), dimension(this%nnode_h1d**2*this%nnode_v,ne), intent(out) vec_work,
integer, intent(in) ne,
real(rp), dimension(this%nnode_h1d**2*this%nnode_v,ne,5), intent(out) vec_out )

Apply a modal filter for five variables.

Definition at line 724 of file scale_element_operation_gpu_driver.F90.

728
729 implicit none
730 type(ElementOperationGPUDriver), intent(in) :: this
731 integer, intent(in) :: Ne
732 real(RP), intent(in) :: vec_in(this%Nnode_h1D**2*this%Nnode_v,Ne,5)
733 real(RP), intent(out) :: vec_work(this%Nnode_h1D**2*this%Nnode_v,Ne)
734 real(RP), intent(out) :: vec_out(this%Nnode_h1D**2*this%Nnode_v,Ne,5)
735 integer :: iv
736 !---------------------------------------------
737
738 select case (this%Nnode_h1D)
739 case (2)
740 do iv=1, 5
741 call element_operation_kernel_matvec_modalfilter_p1( this%elem_optr_tensorprod3D_P1%MFilter_h1D, this%elem_optr_tensorprod3D_P1%MFilter_h1D_tr, this%elem_optr_tensorprod3D_P1%MFilter_v1D_tr, vec_in(:,:,iv), vec_work, ne, &
742 vec_out(:,:,iv) )
743 end do
744 case (3)
745 do iv=1, 5
746 call element_operation_kernel_matvec_modalfilter_p2( this%elem_optr_tensorprod3D_P2%MFilter_h1D, this%elem_optr_tensorprod3D_P2%MFilter_h1D_tr, this%elem_optr_tensorprod3D_P2%MFilter_v1D_tr, vec_in(:,:,iv), vec_work, ne, &
747 vec_out(:,:,iv) )
748 end do
749 case (4)
750 do iv=1, 5
751 call element_operation_kernel_matvec_modalfilter_p3( this%elem_optr_tensorprod3D_P3%MFilter_h1D, this%elem_optr_tensorprod3D_P3%MFilter_h1D_tr, this%elem_optr_tensorprod3D_P3%MFilter_v1D_tr, vec_in(:,:,iv), vec_work, ne, &
752 vec_out(:,:,iv) )
753 end do
754 case (5)
755 do iv=1, 5
756 call element_operation_kernel_matvec_modalfilter_p4( this%elem_optr_tensorprod3D_P4%MFilter_h1D, this%elem_optr_tensorprod3D_P4%MFilter_h1D_tr, this%elem_optr_tensorprod3D_P4%MFilter_v1D_tr, vec_in(:,:,iv), vec_work, ne, &
757 vec_out(:,:,iv) )
758 end do
759 case (6)
760 do iv=1, 5
761 call element_operation_kernel_matvec_modalfilter_p5( this%elem_optr_tensorprod3D_P5%MFilter_h1D, this%elem_optr_tensorprod3D_P5%MFilter_h1D_tr, this%elem_optr_tensorprod3D_P5%MFilter_v1D_tr, vec_in(:,:,iv), vec_work, ne, &
762 vec_out(:,:,iv) )
763 end do
764 case (7)
765 do iv=1, 5
766 call element_operation_kernel_matvec_modalfilter_p6( this%elem_optr_tensorprod3D_P6%MFilter_h1D, this%elem_optr_tensorprod3D_P6%MFilter_h1D_tr, this%elem_optr_tensorprod3D_P6%MFilter_v1D_tr, vec_in(:,:,iv), vec_work, ne, &
767 vec_out(:,:,iv) )
768 end do
769 case (8)
770 do iv=1, 5
771 call element_operation_kernel_matvec_modalfilter_p7( this%elem_optr_tensorprod3D_P7%MFilter_h1D, this%elem_optr_tensorprod3D_P7%MFilter_h1D_tr, this%elem_optr_tensorprod3D_P7%MFilter_v1D_tr, vec_in(:,:,iv), vec_work, ne, &
772 vec_out(:,:,iv) )
773 end do
774 case (9)
775 do iv=1, 5
776 call element_operation_kernel_matvec_modalfilter_p8( this%elem_optr_tensorprod3D_P8%MFilter_h1D, this%elem_optr_tensorprod3D_P8%MFilter_h1D_tr, this%elem_optr_tensorprod3D_P8%MFilter_v1D_tr, vec_in(:,:,iv), vec_work, ne, &
777 vec_out(:,:,iv) )
778 end do
779 case (10)
780 do iv=1, 5
781 call element_operation_kernel_matvec_modalfilter_p9( this%elem_optr_tensorprod3D_P9%MFilter_h1D, this%elem_optr_tensorprod3D_P9%MFilter_h1D_tr, this%elem_optr_tensorprod3D_P9%MFilter_v1D_tr, vec_in(:,:,iv), vec_work, ne, &
782 vec_out(:,:,iv) )
783 end do
784 case (11)
785 do iv=1, 5
786 call element_operation_kernel_matvec_modalfilter_p10( this%elem_optr_tensorprod3D_P10%MFilter_h1D, this%elem_optr_tensorprod3D_P10%MFilter_h1D_tr, this%elem_optr_tensorprod3D_P10%MFilter_v1D_tr, vec_in(:,:,iv), vec_work, ne, &
787 vec_out(:,:,iv) )
788 end do
789 case (12)
790 do iv=1, 5
791 call element_operation_kernel_matvec_modalfilter_p11( this%elem_optr_tensorprod3D_P11%MFilter_h1D, this%elem_optr_tensorprod3D_P11%MFilter_h1D_tr, this%elem_optr_tensorprod3D_P11%MFilter_v1D_tr, vec_in(:,:,iv), vec_work, ne, &
792 vec_out(:,:,iv) )
793 end do
794 case (13)
795 do iv=1, 5
796 call element_operation_kernel_matvec_modalfilter_p12( this%elem_optr_tensorprod3D_P12%MFilter_h1D, this%elem_optr_tensorprod3D_P12%MFilter_h1D_tr, this%elem_optr_tensorprod3D_P12%MFilter_v1D_tr, vec_in(:,:,iv), vec_work, ne, &
797 vec_out(:,:,iv) )
798 end do
799 case (14)
800 do iv=1, 5
801 call element_operation_kernel_matvec_modalfilter_p13( this%elem_optr_tensorprod3D_P13%MFilter_h1D, this%elem_optr_tensorprod3D_P13%MFilter_h1D_tr, this%elem_optr_tensorprod3D_P13%MFilter_v1D_tr, vec_in(:,:,iv), vec_work, ne, &
802 vec_out(:,:,iv) )
803 end do
804 case (15)
805 do iv=1, 5
806 call element_operation_kernel_matvec_modalfilter_p14( this%elem_optr_tensorprod3D_P14%MFilter_h1D, this%elem_optr_tensorprod3D_P14%MFilter_h1D_tr, this%elem_optr_tensorprod3D_P14%MFilter_v1D_tr, vec_in(:,:,iv), vec_work, ne, &
807 vec_out(:,:,iv) )
808 end do
809 case (16)
810 do iv=1, 5
811 call element_operation_kernel_matvec_modalfilter_p15( this%elem_optr_tensorprod3D_P15%MFilter_h1D, this%elem_optr_tensorprod3D_P15%MFilter_h1D_tr, this%elem_optr_tensorprod3D_P15%MFilter_v1D_tr, vec_in(:,:,iv), vec_work, ne, &
812 vec_out(:,:,iv) )
813 end do
814 end select
815 return
module FElib / Element / Operation with 3D tensor product elements for GPU
subroutine, public element_operation_kernel_matvec_modalfilter_p5(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, ne, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=5.
subroutine, public element_operation_kernel_matvec_modalfilter_p11(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, ne, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=11.
subroutine, public element_operation_kernel_matvec_modalfilter_p8(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, ne, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=8.
subroutine, public element_operation_kernel_matvec_modalfilter_p10(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, ne, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=10.
subroutine, public element_operation_kernel_matvec_modalfilter_p3(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, ne, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=3.
subroutine, public element_operation_kernel_matvec_modalfilter_p13(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, ne, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=13.
subroutine, public element_operation_kernel_matvec_modalfilter_p9(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, ne, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=9.
subroutine, public element_operation_kernel_matvec_modalfilter_p2(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, ne, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=2.
subroutine, public element_operation_kernel_matvec_modalfilter_p12(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, ne, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=12.
subroutine, public element_operation_kernel_matvec_modalfilter_p14(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, ne, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=14.
subroutine, public element_operation_kernel_matvec_modalfilter_p15(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, ne, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=15.
subroutine, public element_operation_kernel_matvec_modalfilter_p6(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, ne, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=6.
subroutine, public element_operation_kernel_matvec_modalfilter_p7(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, ne, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=7.
subroutine, public element_operation_kernel_matvec_modalfilter_p1(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, ne, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=1.
subroutine, public element_operation_kernel_matvec_modalfilter_p4(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, ne, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=4.

References scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_modalfilter_p1(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_modalfilter_p10(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_modalfilter_p11(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_modalfilter_p12(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_modalfilter_p13(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_modalfilter_p14(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_modalfilter_p15(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_modalfilter_p2(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_modalfilter_p3(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_modalfilter_p4(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_modalfilter_p5(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_modalfilter_p6(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_modalfilter_p7(), scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_modalfilter_p8(), and scale_element_operation_tensorprod3d_kernel_gpu::element_operation_kernel_matvec_modalfilter_p9().

Referenced by scale_atm_dyn_dgm_modalfilter::atm_dyn_dgm_modalfilter_apply(), and scale_element_operation_gpu_driver::elementoperationgpudriver::final().