FE-Project
Loading...
Searching...
No Matches
scale_element_operation_gpu_driver.F90
Go to the documentation of this file.
1
2!-------------------------------------------------------------------------------
3! Warning: This file was generated from element/scale_element_operation_gpu_driver.F90.erb.
4! Do not edit this file.
5!-------------------------------------------------------------------------------
6!-------------------------------------------------------------------------------
7!> module FElib / Element / Driver for operation with 3D tensor product elements using GPU
8!!
9!! @par Description
10!! 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.
11!!
12!! @author Yuta Kawai, Xuanzhengbo Ren, and Team SCALE
13!!
14!<
15#include "scaleFElib.h"
17
18 !-----------------------------------------------------------------------------
19 !
20 !++ used modules
21 !
22 use scale_precision
23 use scale_io
24
29
30 !-----------------------------------------------------------------------------
31 implicit none
32 private
33
34 !-----------------------------------------------------------------------------
35 !
36 !++ Public type & procedure
37 !
38 !> Driver for element operation with 3D tensor product elements using GPU
40 type(elementoperationtensorprod3d_p1), pointer :: elem_optr_tensorprod3d_p1
41 type(elementoperationtensorprod3d_p2), pointer :: elem_optr_tensorprod3d_p2
42 type(elementoperationtensorprod3d_p3), pointer :: elem_optr_tensorprod3d_p3
43 type(elementoperationtensorprod3d_p4), pointer :: elem_optr_tensorprod3d_p4
44 type(elementoperationtensorprod3d_p5), pointer :: elem_optr_tensorprod3d_p5
45 type(elementoperationtensorprod3d_p6), pointer :: elem_optr_tensorprod3d_p6
46 type(elementoperationtensorprod3d_p7), pointer :: elem_optr_tensorprod3d_p7
47 type(elementoperationtensorprod3d_p8), pointer :: elem_optr_tensorprod3d_p8
48 type(elementoperationtensorprod3d_p9), pointer :: elem_optr_tensorprod3d_p9
49 type(elementoperationtensorprod3d_p10), pointer :: elem_optr_tensorprod3d_p10
50 type(elementoperationtensorprod3d_p11), pointer :: elem_optr_tensorprod3d_p11
51 type(elementoperationtensorprod3d_p12), pointer :: elem_optr_tensorprod3d_p12
52 type(elementoperationtensorprod3d_p13), pointer :: elem_optr_tensorprod3d_p13
53 type(elementoperationtensorprod3d_p14), pointer :: elem_optr_tensorprod3d_p14
54 type(elementoperationtensorprod3d_p15), pointer :: elem_optr_tensorprod3d_p15
55 integer :: nnode_h1d
56 integer :: nnode_v
57 integer :: nfptot
58 contains
59 procedure :: init => elementoperationgpu_init
60 procedure :: final => elementoperationgpu_final
62
70
71contains
72 !> Initialize an object of ElementOperationGPUDriver
73 !!
74 !! The pointer to the given ElementOperationBase3D object are attached and necessary data is transferred to GPU.
75 subroutine elementoperationgpu_init( this, elem_optr_base3D )
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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
246 end subroutine elementoperationgpu_init
247
248 !> Finalize an object of ElementOperationGPUDriver
249 subroutine elementoperationgpu_final( this )
250 implicit none
251 class(elementoperationgpudriver), intent(inout) :: this
252 !----------------------------------------------------------
253 !$acc exit data delete(this)
254 return
255 end subroutine elementoperationgpu_final
256
257 subroutine elementoperationgpu_vfilterpm1( this, vec_in, Ne_in, Ne_out, vec_out )
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
300 end subroutine elementoperationgpu_vfilterpm1
301
302 subroutine elementoperationgpu_div_kplane( this, Flux2D_kplane, E11, E22, k, div_xy )
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
377 end subroutine elementoperationgpu_div_kplane
378
379 subroutine elementoperationgpu_divvar5_kplane( this, Flux2D_kplane, E11, E22, k, div_xy )
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
455
456 subroutine elementoperationgpu_divvar5_kplane2( this, Flux2D_kplane_x, Flux2D_kplane_y, E11, E22, k, div_xy )
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
533
534 subroutine elementoperationgpu_divvar5_z_lift( this, FluxZ, ebnd_flux, E33, Gsqrt, div3D )
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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
610
611 subroutine elementoperationgpu_divvar5( this, Flux_x, Flux_y, Flux_z, ebnd_flux, E11, E22, E33, Gsqrt, Ne, div3D )
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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
719 end subroutine elementoperationgpu_divvar5
720
721
722!> Apply a modal filter for five variables
723!!
724 subroutine elementoperationgpu_modalfilter_var5( this, vec_in, vec_work, Ne, &
725 vec_out )
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
817
module FElib / Element / Base
module FElib / Element / Operation / Base
module FElib / Element / Driver for operation with 3D tensor product elements using GPU
subroutine elementoperationgpu_init(this, elem_optr_base3d)
Initialize an object of ElementOperationGPUDriver.
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_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_modalfilter_var5(this, vec_in, vec_work, ne, vec_out)
Apply a modal filter for five variables.
subroutine, public elementoperationgpu_vfilterpm1(this, vec_in, ne_in, ne_out, vec_out)
subroutine, public elementoperationgpu_divvar5_kplane2(this, flux2d_kplane_x, flux2d_kplane_y, e11, e22, k, div_xy)
module FElib / Element / Operation with 3D tensor product elements for GPU
subroutine, public element_operation_kernel_matvec_divlike_dirz_lift_var5_p1(mat_tr, lift, vec_in_z, ebnd_flux, e33, gsqrt, div3d)
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_divlike_var5_p7_v2(mat, mat_tr, lift, vec_in_x, vec_in_y, vec_in_z, ebnd_flux, e11, e22, e33, gsqrt, ne, div3d)
subroutine, public element_operation_kernel_matvec_divlike_dirxy_p14(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
subroutine, public element_operation_kernel_matvec_divlike_dirz_lift_var5_p7(mat_tr, lift, vec_in_z, ebnd_flux, e33, gsqrt, div3d)
subroutine, public element_operation_kernel_matvec_divlike_dirxy_var5_p2(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
subroutine, public element_operation_kernel_matvec_divlike_var5_p2_v2(mat, mat_tr, lift, vec_in_x, vec_in_y, vec_in_z, ebnd_flux, e11, e22, e33, gsqrt, ne, div3d)
subroutine, public element_operation_kernel_matvec_divlike_dirxy_var5_p7(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
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_divlike_dirz_lift_var5_p12(mat_tr, lift, vec_in_z, ebnd_flux, e33, gsqrt, div3d)
subroutine, public element_operation_kernel_matvec_divlike_dirxy_p13(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
subroutine, public element_operation_kernel_matvec_divlike_dirxy_var5_p14(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
subroutine, public element_operation_kernel_matvec_divlike_dirz_lift_var5_p9(mat_tr, lift, vec_in_z, ebnd_flux, e33, gsqrt, div3d)
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_divlike_dirxy_var5_p13(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
subroutine, public element_operation_kernel_matvec_divlike_dirxy_var5_p8(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
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_divlike_dirz_lift_var5_p6(mat_tr, lift, vec_in_z, ebnd_flux, e33, gsqrt, div3d)
subroutine, public element_operation_kernel_matvec_divlike_var5_p3_v2(mat, mat_tr, lift, vec_in_x, vec_in_y, vec_in_z, ebnd_flux, e11, e22, e33, gsqrt, ne, div3d)
subroutine, public element_operation_kernel_matvec_dirz_p5(mat_z_tr, vec_in, ne_in, ne_out, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_divlike_dirxy_var5_p5(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
subroutine, public element_operation_kernel_matvec_divlike_dirxy_p11(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
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_divlike_var5_p9_v2(mat, mat_tr, lift, vec_in_x, vec_in_y, vec_in_z, ebnd_flux, e11, e22, e33, gsqrt, ne, div3d)
subroutine, public element_operation_kernel_matvec_divlike_dirz_lift_var5_p11(mat_tr, lift, vec_in_z, ebnd_flux, e33, gsqrt, div3d)
subroutine, public element_operation_kernel_matvec_divlike_dirxy_var5_p3(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
subroutine, public element_operation_kernel_matvec_divlike_dirz_lift_var5_p2(mat_tr, lift, vec_in_z, ebnd_flux, e33, gsqrt, div3d)
subroutine, public element_operation_kernel_matvec_dirz_p9(mat_z_tr, vec_in, ne_in, ne_out, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_divlike_dirxy_var5_p11(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
subroutine, public element_operation_kernel_matvec_divlike_dirxy_p10(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
subroutine, public element_operation_kernel_matvec_dirz_p12(mat_z_tr, vec_in, ne_in, ne_out, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_divlike_var5_p10_v2(mat, mat_tr, lift, vec_in_x, vec_in_y, vec_in_z, ebnd_flux, e11, e22, e33, gsqrt, ne, div3d)
subroutine, public element_operation_kernel_matvec_divlike_dirxy_var5_p15(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
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_divlike_dirz_lift_var5_p14(mat_tr, lift, vec_in_z, ebnd_flux, e33, gsqrt, div3d)
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_divlike_var5_p12_v2(mat, mat_tr, lift, vec_in_x, vec_in_y, vec_in_z, ebnd_flux, e11, e22, e33, gsqrt, ne, div3d)
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_divlike_dirxy_p3(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
subroutine, public element_operation_kernel_matvec_divlike_dirxy_p6(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
subroutine, public element_operation_kernel_matvec_divlike_dirz_lift_var5_p5(mat_tr, lift, vec_in_z, ebnd_flux, e33, gsqrt, div3d)
subroutine, public element_operation_kernel_matvec_divlike_var5_p5_v2(mat, mat_tr, lift, vec_in_x, vec_in_y, vec_in_z, ebnd_flux, e11, e22, e33, gsqrt, ne, div3d)
subroutine, public element_operation_kernel_matvec_divlike_dirz_lift_var5_p4(mat_tr, lift, vec_in_z, ebnd_flux, e33, gsqrt, div3d)
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_divlike_dirxy_p5(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
subroutine, public element_operation_kernel_matvec_divlike_var5_p1_v2(mat, mat_tr, lift, vec_in_x, vec_in_y, vec_in_z, ebnd_flux, e11, e22, e33, gsqrt, ne, div3d)
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_divlike_var5_p11_v2(mat, mat_tr, lift, vec_in_x, vec_in_y, vec_in_z, ebnd_flux, e11, e22, e33, gsqrt, ne, div3d)
subroutine, public element_operation_kernel_matvec_divlike_dirxy_p2(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
subroutine, public element_operation_kernel_matvec_divlike_dirz_lift_var5_p15(mat_tr, lift, vec_in_z, ebnd_flux, e33, gsqrt, div3d)
subroutine, public element_operation_kernel_matvec_divlike_var5_p13_v2(mat, mat_tr, lift, vec_in_x, vec_in_y, vec_in_z, ebnd_flux, e11, e22, e33, gsqrt, ne, div3d)
subroutine, public element_operation_kernel_matvec_divlike_dirxy_var5_p10(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
subroutine, public element_operation_kernel_matvec_dirz_p8(mat_z_tr, vec_in, ne_in, ne_out, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_divlike_var5_p14_v2(mat, mat_tr, lift, vec_in_x, vec_in_y, vec_in_z, ebnd_flux, e11, e22, e33, gsqrt, ne, div3d)
subroutine, public element_operation_kernel_matvec_divlike_dirxy_var5_p6(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
subroutine, public element_operation_kernel_matvec_divlike_dirz_lift_var5_p3(mat_tr, lift, vec_in_z, ebnd_flux, e33, gsqrt, div3d)
subroutine, public element_operation_kernel_matvec_divlike_var5_p15_v2(mat, mat_tr, lift, vec_in_x, vec_in_y, vec_in_z, ebnd_flux, e11, e22, e33, gsqrt, ne, div3d)
subroutine, public element_operation_kernel_matvec_divlike_dirxy_var5_p4(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
subroutine, public element_operation_kernel_matvec_divlike_dirxy_p12(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
subroutine, public element_operation_kernel_matvec_divlike_var5_p4_v2(mat, mat_tr, lift, vec_in_x, vec_in_y, vec_in_z, ebnd_flux, e11, e22, e33, gsqrt, ne, div3d)
subroutine, public element_operation_kernel_matvec_divlike_dirz_lift_var5_p13(mat_tr, lift, vec_in_z, ebnd_flux, e33, gsqrt, div3d)
subroutine, public element_operation_kernel_matvec_divlike_var5_p8_v2(mat, mat_tr, lift, vec_in_x, vec_in_y, vec_in_z, ebnd_flux, e11, e22, e33, gsqrt, ne, div3d)
subroutine, public element_operation_kernel_matvec_divlike_dirxy_p1(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
subroutine, public element_operation_kernel_matvec_dirz_p15(mat_z_tr, vec_in, ne_in, ne_out, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_dirz_p10(mat_z_tr, vec_in, ne_in, ne_out, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_dirz_p7(mat_z_tr, vec_in, ne_in, ne_out, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_dirz_p1(mat_z_tr, vec_in, ne_in, ne_out, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_dirz_p11(mat_z_tr, vec_in, ne_in, ne_out, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_dirz_p6(mat_z_tr, vec_in, ne_in, ne_out, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_divlike_dirz_lift_var5_p8(mat_tr, lift, vec_in_z, ebnd_flux, e33, gsqrt, div3d)
subroutine, public element_operation_kernel_matvec_divlike_dirxy_p8(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
subroutine, public element_operation_kernel_matvec_divlike_dirz_lift_var5_p10(mat_tr, lift, vec_in_z, ebnd_flux, e33, gsqrt, div3d)
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_divlike_dirxy_var5_p1(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
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_divlike_dirxy_var5_p12(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
subroutine, public element_operation_kernel_matvec_dirz_p4(mat_z_tr, vec_in, ne_in, ne_out, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_divlike_dirxy_p9(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
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.
subroutine, public element_operation_kernel_matvec_divlike_dirxy_p7(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
subroutine, public element_operation_kernel_matvec_dirz_p2(mat_z_tr, vec_in, ne_in, ne_out, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_divlike_dirxy_var5_p9(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
subroutine, public element_operation_kernel_matvec_divlike_var5_p6_v2(mat, mat_tr, lift, vec_in_x, vec_in_y, vec_in_z, ebnd_flux, e11, e22, e33, gsqrt, ne, div3d)
subroutine, public element_operation_kernel_matvec_dirz_p3(mat_z_tr, vec_in, ne_in, ne_out, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_divlike_dirxy_p15(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
subroutine, public element_operation_kernel_matvec_divlike_dirxy_p4(mat, mat_tr, vec_in_x, vec_in_y, e11, e22, div_out_xy)
subroutine, public element_operation_kernel_matvec_dirz_p14(mat_z_tr, vec_in, ne_in, ne_out, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_dirz_p13(mat_z_tr, vec_in, ne_in, ne_out, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
module FElib / Element / Operation with 3D tensor product elements for GPU
Derived type representing a 3D reference element.
Driver for element operation with 3D tensor product elements using GPU.
Derived type for elementwise operations with 3D tensor product elements with polynomial order p=10.
Derived type for elementwise operations with 3D tensor product elements with polynomial order p=11.
Derived type for elementwise operations with 3D tensor product elements with polynomial order p=12.
Derived type for elementwise operations with 3D tensor product elements with polynomial order p=13.
Derived type for elementwise operations with 3D tensor product elements with polynomial order p=14.
Derived type for elementwise operations with 3D tensor product elements with polynomial order p=15.
Derived type for elementwise operations with 3D tensor product elements with polynomial order p=1.
Derived type for elementwise operations with 3D tensor product elements with polynomial order p=2.
Derived type for elementwise operations with 3D tensor product elements with polynomial order p=3.
Derived type for elementwise operations with 3D tensor product elements with polynomial order p=4.
Derived type for elementwise operations with 3D tensor product elements with polynomial order p=5.
Derived type for elementwise operations with 3D tensor product elements with polynomial order p=6.
Derived type for elementwise operations with 3D tensor product elements with polynomial order p=7.
Derived type for elementwise operations with 3D tensor product elements with polynomial order p=8.
Derived type for elementwise operations with 3D tensor product elements with polynomial order p=9.