FE-Project
Loading...
Searching...
No Matches
scale_element_operation_tensorprod3D.F90
Go to the documentation of this file.
1
2!-------------------------------------------------------------------------------
3! Warning: This file was generated from element/scale_element_operation_tensorprod3D.F90.erb.
4! Do not edit this file.
5!-------------------------------------------------------------------------------
6!-------------------------------------------------------------------------------
15#include "scaleFElib.h"
17
18 !-----------------------------------------------------------------------------
19 !
20 !++ used modules
21 !
22 use scale_precision
23 use scale_io
24
25 use scale_element_base, only: &
28
31
32 !-----------------------------------------------------------------------------
33 implicit none
34 private
35
36 !-----------------------------------------------------------------------------
37 !
38 !++ Public type & procedure
39 !
40
41 type, public, abstract, extends(elementoperationbase3d) :: elementoperationtensorprod3d
42 contains
43 procedure(elementoperationtensorprod3d_init), deferred, public :: init
44 procedure(elementoperationtensorprod3d_final), deferred, public :: final
46
47 interface
48 subroutine elementoperationtensorprod3d_init( this, elem3D )
50 import elementbase3d
51 class(elementoperationtensorprod3d), intent(inout) :: this
52 class(elementbase3d), intent(in), target :: elem3D
54
55 subroutine elementoperationtensorprod3d_final( this )
57 class(elementoperationtensorprod3d), intent(inout) :: this
58 end subroutine elementoperationtensorprod3d_final
59 end interface
60
62
64 real(rp) :: d1d(2,2)
65 real(rp) :: d1d_tr(2,2)
66 real(rp) :: lift_mat(2,2,2,6)
67 real(rp) :: intrpmat_vpordm1_tr(2,2)
68
69 real(rp) :: mfilter_h1d(2,2)
70 real(rp) :: mfilter_h1d_tr(2,2)
71 real(rp) :: mfilter_v1d_tr(2,2)
72
73 real(rp) :: mfilter_tracer_h1d(2,2)
74 real(rp) :: mfilter_tracer_h1d_tr(2,2)
75 real(rp) :: mfilter_tracer_v1d_tr(2,2)
76 contains
77 procedure, public :: init => element_operation_tensorprod3d_init_p1
78 procedure, public :: final => element_operation_tensorprod3d_final_p1
79 procedure, public :: dx => element_operation_tensorprod3d_dx_p1
80 procedure, public :: dy => element_operation_tensorprod3d_dy_p1
81 procedure, public :: dz => element_operation_tensorprod3d_dz_p1
82 procedure, public :: lift => element_operation_tensorprod3d_lift_p1
83 procedure, public :: dxdydzlift => element_operation_tensorprod3d_dxdydzlift_p1
84 procedure, public :: div => element_operation_tensorprod3d_div_p1
85 procedure, public :: div_var5 => element_operation_tensorprod3d_div_var5_p1
86 procedure, public :: vfilterpm1 => element_operation_tensorprod3d_vfilterpm1_p1
87 !-
88 procedure, public :: setup_modalfilter => element_operation_tensorprod3d_setup_modalfilter_p1
89 procedure, public :: setup_modalfilter_tracer => element_operation_tensorprod3d_setup_modalfilter_tracer_p1
90 procedure, public :: modalfilter_tracer => element_operation_tensorprod3d_modalfilter_tracer_p1
91 procedure, public :: modalfilter_var5 => element_operation_tensorprod3d_modalfilter_var5_p1
94 real(rp) :: d1d(3,3)
95 real(rp) :: d1d_tr(3,3)
96 real(rp) :: lift_mat(3,3,3,6)
97 real(rp) :: intrpmat_vpordm1_tr(3,3)
98
99 real(rp) :: mfilter_h1d(3,3)
100 real(rp) :: mfilter_h1d_tr(3,3)
101 real(rp) :: mfilter_v1d_tr(3,3)
102
103 real(rp) :: mfilter_tracer_h1d(3,3)
104 real(rp) :: mfilter_tracer_h1d_tr(3,3)
105 real(rp) :: mfilter_tracer_v1d_tr(3,3)
106 contains
107 procedure, public :: init => element_operation_tensorprod3d_init_p2
108 procedure, public :: final => element_operation_tensorprod3d_final_p2
109 procedure, public :: dx => element_operation_tensorprod3d_dx_p2
110 procedure, public :: dy => element_operation_tensorprod3d_dy_p2
111 procedure, public :: dz => element_operation_tensorprod3d_dz_p2
112 procedure, public :: lift => element_operation_tensorprod3d_lift_p2
113 procedure, public :: dxdydzlift => element_operation_tensorprod3d_dxdydzlift_p2
114 procedure, public :: div => element_operation_tensorprod3d_div_p2
115 procedure, public :: div_var5 => element_operation_tensorprod3d_div_var5_p2
116 procedure, public :: vfilterpm1 => element_operation_tensorprod3d_vfilterpm1_p2
117 !-
118 procedure, public :: setup_modalfilter => element_operation_tensorprod3d_setup_modalfilter_p2
119 procedure, public :: setup_modalfilter_tracer => element_operation_tensorprod3d_setup_modalfilter_tracer_p2
120 procedure, public :: modalfilter_tracer => element_operation_tensorprod3d_modalfilter_tracer_p2
121 procedure, public :: modalfilter_var5 => element_operation_tensorprod3d_modalfilter_var5_p2
124 real(rp) :: d1d(4,4)
125 real(rp) :: d1d_tr(4,4)
126 real(rp) :: lift_mat(4,4,4,6)
127 real(rp) :: intrpmat_vpordm1_tr(4,4)
128
129 real(rp) :: mfilter_h1d(4,4)
130 real(rp) :: mfilter_h1d_tr(4,4)
131 real(rp) :: mfilter_v1d_tr(4,4)
132
133 real(rp) :: mfilter_tracer_h1d(4,4)
134 real(rp) :: mfilter_tracer_h1d_tr(4,4)
135 real(rp) :: mfilter_tracer_v1d_tr(4,4)
136 contains
137 procedure, public :: init => element_operation_tensorprod3d_init_p3
138 procedure, public :: final => element_operation_tensorprod3d_final_p3
139 procedure, public :: dx => element_operation_tensorprod3d_dx_p3
140 procedure, public :: dy => element_operation_tensorprod3d_dy_p3
141 procedure, public :: dz => element_operation_tensorprod3d_dz_p3
142 procedure, public :: lift => element_operation_tensorprod3d_lift_p3
143 procedure, public :: dxdydzlift => element_operation_tensorprod3d_dxdydzlift_p3
144 procedure, public :: div => element_operation_tensorprod3d_div_p3
145 procedure, public :: div_var5 => element_operation_tensorprod3d_div_var5_p3
146 procedure, public :: vfilterpm1 => element_operation_tensorprod3d_vfilterpm1_p3
147 !-
148 procedure, public :: setup_modalfilter => element_operation_tensorprod3d_setup_modalfilter_p3
149 procedure, public :: setup_modalfilter_tracer => element_operation_tensorprod3d_setup_modalfilter_tracer_p3
150 procedure, public :: modalfilter_tracer => element_operation_tensorprod3d_modalfilter_tracer_p3
151 procedure, public :: modalfilter_var5 => element_operation_tensorprod3d_modalfilter_var5_p3
154 real(rp) :: d1d(5,5)
155 real(rp) :: d1d_tr(5,5)
156 real(rp) :: lift_mat(5,5,5,6)
157 real(rp) :: intrpmat_vpordm1_tr(5,5)
158
159 real(rp) :: mfilter_h1d(5,5)
160 real(rp) :: mfilter_h1d_tr(5,5)
161 real(rp) :: mfilter_v1d_tr(5,5)
162
163 real(rp) :: mfilter_tracer_h1d(5,5)
164 real(rp) :: mfilter_tracer_h1d_tr(5,5)
165 real(rp) :: mfilter_tracer_v1d_tr(5,5)
166 contains
167 procedure, public :: init => element_operation_tensorprod3d_init_p4
168 procedure, public :: final => element_operation_tensorprod3d_final_p4
169 procedure, public :: dx => element_operation_tensorprod3d_dx_p4
170 procedure, public :: dy => element_operation_tensorprod3d_dy_p4
171 procedure, public :: dz => element_operation_tensorprod3d_dz_p4
172 procedure, public :: lift => element_operation_tensorprod3d_lift_p4
173 procedure, public :: dxdydzlift => element_operation_tensorprod3d_dxdydzlift_p4
174 procedure, public :: div => element_operation_tensorprod3d_div_p4
175 procedure, public :: div_var5 => element_operation_tensorprod3d_div_var5_p4
176 procedure, public :: vfilterpm1 => element_operation_tensorprod3d_vfilterpm1_p4
177 !-
178 procedure, public :: setup_modalfilter => element_operation_tensorprod3d_setup_modalfilter_p4
179 procedure, public :: setup_modalfilter_tracer => element_operation_tensorprod3d_setup_modalfilter_tracer_p4
180 procedure, public :: modalfilter_tracer => element_operation_tensorprod3d_modalfilter_tracer_p4
181 procedure, public :: modalfilter_var5 => element_operation_tensorprod3d_modalfilter_var5_p4
184 real(rp) :: d1d(6,6)
185 real(rp) :: d1d_tr(6,6)
186 real(rp) :: lift_mat(6,6,6,6)
187 real(rp) :: intrpmat_vpordm1_tr(6,6)
188
189 real(rp) :: mfilter_h1d(6,6)
190 real(rp) :: mfilter_h1d_tr(6,6)
191 real(rp) :: mfilter_v1d_tr(6,6)
192
193 real(rp) :: mfilter_tracer_h1d(6,6)
194 real(rp) :: mfilter_tracer_h1d_tr(6,6)
195 real(rp) :: mfilter_tracer_v1d_tr(6,6)
196 contains
197 procedure, public :: init => element_operation_tensorprod3d_init_p5
198 procedure, public :: final => element_operation_tensorprod3d_final_p5
199 procedure, public :: dx => element_operation_tensorprod3d_dx_p5
200 procedure, public :: dy => element_operation_tensorprod3d_dy_p5
201 procedure, public :: dz => element_operation_tensorprod3d_dz_p5
202 procedure, public :: lift => element_operation_tensorprod3d_lift_p5
203 procedure, public :: dxdydzlift => element_operation_tensorprod3d_dxdydzlift_p5
204 procedure, public :: div => element_operation_tensorprod3d_div_p5
205 procedure, public :: div_var5 => element_operation_tensorprod3d_div_var5_p5
206 procedure, public :: vfilterpm1 => element_operation_tensorprod3d_vfilterpm1_p5
207 !-
208 procedure, public :: setup_modalfilter => element_operation_tensorprod3d_setup_modalfilter_p5
209 procedure, public :: setup_modalfilter_tracer => element_operation_tensorprod3d_setup_modalfilter_tracer_p5
210 procedure, public :: modalfilter_tracer => element_operation_tensorprod3d_modalfilter_tracer_p5
211 procedure, public :: modalfilter_var5 => element_operation_tensorprod3d_modalfilter_var5_p5
214 real(rp) :: d1d(7,7)
215 real(rp) :: d1d_tr(7,7)
216 real(rp) :: lift_mat(7,7,7,6)
217 real(rp) :: intrpmat_vpordm1_tr(7,7)
218
219 real(rp) :: mfilter_h1d(7,7)
220 real(rp) :: mfilter_h1d_tr(7,7)
221 real(rp) :: mfilter_v1d_tr(7,7)
222
223 real(rp) :: mfilter_tracer_h1d(7,7)
224 real(rp) :: mfilter_tracer_h1d_tr(7,7)
225 real(rp) :: mfilter_tracer_v1d_tr(7,7)
226 contains
227 procedure, public :: init => element_operation_tensorprod3d_init_p6
228 procedure, public :: final => element_operation_tensorprod3d_final_p6
229 procedure, public :: dx => element_operation_tensorprod3d_dx_p6
230 procedure, public :: dy => element_operation_tensorprod3d_dy_p6
231 procedure, public :: dz => element_operation_tensorprod3d_dz_p6
232 procedure, public :: lift => element_operation_tensorprod3d_lift_p6
233 procedure, public :: dxdydzlift => element_operation_tensorprod3d_dxdydzlift_p6
234 procedure, public :: div => element_operation_tensorprod3d_div_p6
235 procedure, public :: div_var5 => element_operation_tensorprod3d_div_var5_p6
236 procedure, public :: vfilterpm1 => element_operation_tensorprod3d_vfilterpm1_p6
237 !-
238 procedure, public :: setup_modalfilter => element_operation_tensorprod3d_setup_modalfilter_p6
239 procedure, public :: setup_modalfilter_tracer => element_operation_tensorprod3d_setup_modalfilter_tracer_p6
240 procedure, public :: modalfilter_tracer => element_operation_tensorprod3d_modalfilter_tracer_p6
241 procedure, public :: modalfilter_var5 => element_operation_tensorprod3d_modalfilter_var5_p6
244 real(rp) :: d1d(8,8)
245 real(rp) :: d1d_tr(8,8)
246 real(rp) :: lift_mat(8,8,8,6)
247 real(rp) :: intrpmat_vpordm1_tr(8,8)
248
249 real(rp) :: mfilter_h1d(8,8)
250 real(rp) :: mfilter_h1d_tr(8,8)
251 real(rp) :: mfilter_v1d_tr(8,8)
252
253 real(rp) :: mfilter_tracer_h1d(8,8)
254 real(rp) :: mfilter_tracer_h1d_tr(8,8)
255 real(rp) :: mfilter_tracer_v1d_tr(8,8)
256 contains
257 procedure, public :: init => element_operation_tensorprod3d_init_p7
258 procedure, public :: final => element_operation_tensorprod3d_final_p7
259 procedure, public :: dx => element_operation_tensorprod3d_dx_p7
260 procedure, public :: dy => element_operation_tensorprod3d_dy_p7
261 procedure, public :: dz => element_operation_tensorprod3d_dz_p7
262 procedure, public :: lift => element_operation_tensorprod3d_lift_p7
263 procedure, public :: dxdydzlift => element_operation_tensorprod3d_dxdydzlift_p7
264 procedure, public :: div => element_operation_tensorprod3d_div_p7
265 procedure, public :: div_var5 => element_operation_tensorprod3d_div_var5_p7
266 procedure, public :: vfilterpm1 => element_operation_tensorprod3d_vfilterpm1_p7
267 !-
268 procedure, public :: setup_modalfilter => element_operation_tensorprod3d_setup_modalfilter_p7
269 procedure, public :: setup_modalfilter_tracer => element_operation_tensorprod3d_setup_modalfilter_tracer_p7
270 procedure, public :: modalfilter_tracer => element_operation_tensorprod3d_modalfilter_tracer_p7
271 procedure, public :: modalfilter_var5 => element_operation_tensorprod3d_modalfilter_var5_p7
274 real(rp) :: d1d(9,9)
275 real(rp) :: d1d_tr(9,9)
276 real(rp) :: lift_mat(9,9,9,6)
277 real(rp) :: intrpmat_vpordm1_tr(9,9)
278
279 real(rp) :: mfilter_h1d(9,9)
280 real(rp) :: mfilter_h1d_tr(9,9)
281 real(rp) :: mfilter_v1d_tr(9,9)
282
283 real(rp) :: mfilter_tracer_h1d(9,9)
284 real(rp) :: mfilter_tracer_h1d_tr(9,9)
285 real(rp) :: mfilter_tracer_v1d_tr(9,9)
286 contains
287 procedure, public :: init => element_operation_tensorprod3d_init_p8
288 procedure, public :: final => element_operation_tensorprod3d_final_p8
289 procedure, public :: dx => element_operation_tensorprod3d_dx_p8
290 procedure, public :: dy => element_operation_tensorprod3d_dy_p8
291 procedure, public :: dz => element_operation_tensorprod3d_dz_p8
292 procedure, public :: lift => element_operation_tensorprod3d_lift_p8
293 procedure, public :: dxdydzlift => element_operation_tensorprod3d_dxdydzlift_p8
294 procedure, public :: div => element_operation_tensorprod3d_div_p8
295 procedure, public :: div_var5 => element_operation_tensorprod3d_div_var5_p8
296 procedure, public :: vfilterpm1 => element_operation_tensorprod3d_vfilterpm1_p8
297 !-
298 procedure, public :: setup_modalfilter => element_operation_tensorprod3d_setup_modalfilter_p8
299 procedure, public :: setup_modalfilter_tracer => element_operation_tensorprod3d_setup_modalfilter_tracer_p8
300 procedure, public :: modalfilter_tracer => element_operation_tensorprod3d_modalfilter_tracer_p8
301 procedure, public :: modalfilter_var5 => element_operation_tensorprod3d_modalfilter_var5_p8
304 real(rp) :: d1d(10,10)
305 real(rp) :: d1d_tr(10,10)
306 real(rp) :: lift_mat(10,10,10,6)
307 real(rp) :: intrpmat_vpordm1_tr(10,10)
308
309 real(rp) :: mfilter_h1d(10,10)
310 real(rp) :: mfilter_h1d_tr(10,10)
311 real(rp) :: mfilter_v1d_tr(10,10)
312
313 real(rp) :: mfilter_tracer_h1d(10,10)
314 real(rp) :: mfilter_tracer_h1d_tr(10,10)
315 real(rp) :: mfilter_tracer_v1d_tr(10,10)
316 contains
317 procedure, public :: init => element_operation_tensorprod3d_init_p9
318 procedure, public :: final => element_operation_tensorprod3d_final_p9
319 procedure, public :: dx => element_operation_tensorprod3d_dx_p9
320 procedure, public :: dy => element_operation_tensorprod3d_dy_p9
321 procedure, public :: dz => element_operation_tensorprod3d_dz_p9
322 procedure, public :: lift => element_operation_tensorprod3d_lift_p9
323 procedure, public :: dxdydzlift => element_operation_tensorprod3d_dxdydzlift_p9
324 procedure, public :: div => element_operation_tensorprod3d_div_p9
325 procedure, public :: div_var5 => element_operation_tensorprod3d_div_var5_p9
326 procedure, public :: vfilterpm1 => element_operation_tensorprod3d_vfilterpm1_p9
327 !-
328 procedure, public :: setup_modalfilter => element_operation_tensorprod3d_setup_modalfilter_p9
329 procedure, public :: setup_modalfilter_tracer => element_operation_tensorprod3d_setup_modalfilter_tracer_p9
330 procedure, public :: modalfilter_tracer => element_operation_tensorprod3d_modalfilter_tracer_p9
331 procedure, public :: modalfilter_var5 => element_operation_tensorprod3d_modalfilter_var5_p9
334 real(rp) :: d1d(11,11)
335 real(rp) :: d1d_tr(11,11)
336 real(rp) :: lift_mat(11,11,11,6)
337 real(rp) :: intrpmat_vpordm1_tr(11,11)
338
339 real(rp) :: mfilter_h1d(11,11)
340 real(rp) :: mfilter_h1d_tr(11,11)
341 real(rp) :: mfilter_v1d_tr(11,11)
342
343 real(rp) :: mfilter_tracer_h1d(11,11)
344 real(rp) :: mfilter_tracer_h1d_tr(11,11)
345 real(rp) :: mfilter_tracer_v1d_tr(11,11)
346 contains
347 procedure, public :: init => element_operation_tensorprod3d_init_p10
348 procedure, public :: final => element_operation_tensorprod3d_final_p10
349 procedure, public :: dx => element_operation_tensorprod3d_dx_p10
350 procedure, public :: dy => element_operation_tensorprod3d_dy_p10
351 procedure, public :: dz => element_operation_tensorprod3d_dz_p10
352 procedure, public :: lift => element_operation_tensorprod3d_lift_p10
353 procedure, public :: dxdydzlift => element_operation_tensorprod3d_dxdydzlift_p10
354 procedure, public :: div => element_operation_tensorprod3d_div_p10
355 procedure, public :: div_var5 => element_operation_tensorprod3d_div_var5_p10
356 procedure, public :: vfilterpm1 => element_operation_tensorprod3d_vfilterpm1_p10
357 !-
358 procedure, public :: setup_modalfilter => element_operation_tensorprod3d_setup_modalfilter_p10
359 procedure, public :: setup_modalfilter_tracer => element_operation_tensorprod3d_setup_modalfilter_tracer_p10
360 procedure, public :: modalfilter_tracer => element_operation_tensorprod3d_modalfilter_tracer_p10
361 procedure, public :: modalfilter_var5 => element_operation_tensorprod3d_modalfilter_var5_p10
364 real(rp) :: d1d(12,12)
365 real(rp) :: d1d_tr(12,12)
366 real(rp) :: lift_mat(12,12,12,6)
367 real(rp) :: intrpmat_vpordm1_tr(12,12)
368
369 real(rp) :: mfilter_h1d(12,12)
370 real(rp) :: mfilter_h1d_tr(12,12)
371 real(rp) :: mfilter_v1d_tr(12,12)
372
373 real(rp) :: mfilter_tracer_h1d(12,12)
374 real(rp) :: mfilter_tracer_h1d_tr(12,12)
375 real(rp) :: mfilter_tracer_v1d_tr(12,12)
376 contains
377 procedure, public :: init => element_operation_tensorprod3d_init_p11
378 procedure, public :: final => element_operation_tensorprod3d_final_p11
379 procedure, public :: dx => element_operation_tensorprod3d_dx_p11
380 procedure, public :: dy => element_operation_tensorprod3d_dy_p11
381 procedure, public :: dz => element_operation_tensorprod3d_dz_p11
382 procedure, public :: lift => element_operation_tensorprod3d_lift_p11
383 procedure, public :: dxdydzlift => element_operation_tensorprod3d_dxdydzlift_p11
384 procedure, public :: div => element_operation_tensorprod3d_div_p11
385 procedure, public :: div_var5 => element_operation_tensorprod3d_div_var5_p11
386 procedure, public :: vfilterpm1 => element_operation_tensorprod3d_vfilterpm1_p11
387 !-
388 procedure, public :: setup_modalfilter => element_operation_tensorprod3d_setup_modalfilter_p11
389 procedure, public :: setup_modalfilter_tracer => element_operation_tensorprod3d_setup_modalfilter_tracer_p11
390 procedure, public :: modalfilter_tracer => element_operation_tensorprod3d_modalfilter_tracer_p11
391 procedure, public :: modalfilter_var5 => element_operation_tensorprod3d_modalfilter_var5_p11
394 real(rp) :: d1d(13,13)
395 real(rp) :: d1d_tr(13,13)
396 real(rp) :: lift_mat(13,13,13,6)
397 real(rp) :: intrpmat_vpordm1_tr(13,13)
398
399 real(rp) :: mfilter_h1d(13,13)
400 real(rp) :: mfilter_h1d_tr(13,13)
401 real(rp) :: mfilter_v1d_tr(13,13)
402
403 real(rp) :: mfilter_tracer_h1d(13,13)
404 real(rp) :: mfilter_tracer_h1d_tr(13,13)
405 real(rp) :: mfilter_tracer_v1d_tr(13,13)
406 contains
407 procedure, public :: init => element_operation_tensorprod3d_init_p12
408 procedure, public :: final => element_operation_tensorprod3d_final_p12
409 procedure, public :: dx => element_operation_tensorprod3d_dx_p12
410 procedure, public :: dy => element_operation_tensorprod3d_dy_p12
411 procedure, public :: dz => element_operation_tensorprod3d_dz_p12
412 procedure, public :: lift => element_operation_tensorprod3d_lift_p12
413 procedure, public :: dxdydzlift => element_operation_tensorprod3d_dxdydzlift_p12
414 procedure, public :: div => element_operation_tensorprod3d_div_p12
415 procedure, public :: div_var5 => element_operation_tensorprod3d_div_var5_p12
416 procedure, public :: vfilterpm1 => element_operation_tensorprod3d_vfilterpm1_p12
417 !-
418 procedure, public :: setup_modalfilter => element_operation_tensorprod3d_setup_modalfilter_p12
419 procedure, public :: setup_modalfilter_tracer => element_operation_tensorprod3d_setup_modalfilter_tracer_p12
420 procedure, public :: modalfilter_tracer => element_operation_tensorprod3d_modalfilter_tracer_p12
421 procedure, public :: modalfilter_var5 => element_operation_tensorprod3d_modalfilter_var5_p12
424 real(rp) :: d1d(14,14)
425 real(rp) :: d1d_tr(14,14)
426 real(rp) :: lift_mat(14,14,14,6)
427 real(rp) :: intrpmat_vpordm1_tr(14,14)
428
429 real(rp) :: mfilter_h1d(14,14)
430 real(rp) :: mfilter_h1d_tr(14,14)
431 real(rp) :: mfilter_v1d_tr(14,14)
432
433 real(rp) :: mfilter_tracer_h1d(14,14)
434 real(rp) :: mfilter_tracer_h1d_tr(14,14)
435 real(rp) :: mfilter_tracer_v1d_tr(14,14)
436 contains
437 procedure, public :: init => element_operation_tensorprod3d_init_p13
438 procedure, public :: final => element_operation_tensorprod3d_final_p13
439 procedure, public :: dx => element_operation_tensorprod3d_dx_p13
440 procedure, public :: dy => element_operation_tensorprod3d_dy_p13
441 procedure, public :: dz => element_operation_tensorprod3d_dz_p13
442 procedure, public :: lift => element_operation_tensorprod3d_lift_p13
443 procedure, public :: dxdydzlift => element_operation_tensorprod3d_dxdydzlift_p13
444 procedure, public :: div => element_operation_tensorprod3d_div_p13
445 procedure, public :: div_var5 => element_operation_tensorprod3d_div_var5_p13
446 procedure, public :: vfilterpm1 => element_operation_tensorprod3d_vfilterpm1_p13
447 !-
448 procedure, public :: setup_modalfilter => element_operation_tensorprod3d_setup_modalfilter_p13
449 procedure, public :: setup_modalfilter_tracer => element_operation_tensorprod3d_setup_modalfilter_tracer_p13
450 procedure, public :: modalfilter_tracer => element_operation_tensorprod3d_modalfilter_tracer_p13
451 procedure, public :: modalfilter_var5 => element_operation_tensorprod3d_modalfilter_var5_p13
454 real(rp) :: d1d(15,15)
455 real(rp) :: d1d_tr(15,15)
456 real(rp) :: lift_mat(15,15,15,6)
457 real(rp) :: intrpmat_vpordm1_tr(15,15)
458
459 real(rp) :: mfilter_h1d(15,15)
460 real(rp) :: mfilter_h1d_tr(15,15)
461 real(rp) :: mfilter_v1d_tr(15,15)
462
463 real(rp) :: mfilter_tracer_h1d(15,15)
464 real(rp) :: mfilter_tracer_h1d_tr(15,15)
465 real(rp) :: mfilter_tracer_v1d_tr(15,15)
466 contains
467 procedure, public :: init => element_operation_tensorprod3d_init_p14
468 procedure, public :: final => element_operation_tensorprod3d_final_p14
469 procedure, public :: dx => element_operation_tensorprod3d_dx_p14
470 procedure, public :: dy => element_operation_tensorprod3d_dy_p14
471 procedure, public :: dz => element_operation_tensorprod3d_dz_p14
472 procedure, public :: lift => element_operation_tensorprod3d_lift_p14
473 procedure, public :: dxdydzlift => element_operation_tensorprod3d_dxdydzlift_p14
474 procedure, public :: div => element_operation_tensorprod3d_div_p14
475 procedure, public :: div_var5 => element_operation_tensorprod3d_div_var5_p14
476 procedure, public :: vfilterpm1 => element_operation_tensorprod3d_vfilterpm1_p14
477 !-
478 procedure, public :: setup_modalfilter => element_operation_tensorprod3d_setup_modalfilter_p14
479 procedure, public :: setup_modalfilter_tracer => element_operation_tensorprod3d_setup_modalfilter_tracer_p14
480 procedure, public :: modalfilter_tracer => element_operation_tensorprod3d_modalfilter_tracer_p14
481 procedure, public :: modalfilter_var5 => element_operation_tensorprod3d_modalfilter_var5_p14
484 real(rp) :: d1d(16,16)
485 real(rp) :: d1d_tr(16,16)
486 real(rp) :: lift_mat(16,16,16,6)
487 real(rp) :: intrpmat_vpordm1_tr(16,16)
488
489 real(rp) :: mfilter_h1d(16,16)
490 real(rp) :: mfilter_h1d_tr(16,16)
491 real(rp) :: mfilter_v1d_tr(16,16)
492
493 real(rp) :: mfilter_tracer_h1d(16,16)
494 real(rp) :: mfilter_tracer_h1d_tr(16,16)
495 real(rp) :: mfilter_tracer_v1d_tr(16,16)
496 contains
497 procedure, public :: init => element_operation_tensorprod3d_init_p15
498 procedure, public :: final => element_operation_tensorprod3d_final_p15
499 procedure, public :: dx => element_operation_tensorprod3d_dx_p15
500 procedure, public :: dy => element_operation_tensorprod3d_dy_p15
501 procedure, public :: dz => element_operation_tensorprod3d_dz_p15
502 procedure, public :: lift => element_operation_tensorprod3d_lift_p15
503 procedure, public :: dxdydzlift => element_operation_tensorprod3d_dxdydzlift_p15
504 procedure, public :: div => element_operation_tensorprod3d_div_p15
505 procedure, public :: div_var5 => element_operation_tensorprod3d_div_var5_p15
506 procedure, public :: vfilterpm1 => element_operation_tensorprod3d_vfilterpm1_p15
507 !-
508 procedure, public :: setup_modalfilter => element_operation_tensorprod3d_setup_modalfilter_p15
509 procedure, public :: setup_modalfilter_tracer => element_operation_tensorprod3d_setup_modalfilter_tracer_p15
510 procedure, public :: modalfilter_tracer => element_operation_tensorprod3d_modalfilter_tracer_p15
511 procedure, public :: modalfilter_var5 => element_operation_tensorprod3d_modalfilter_var5_p15
513
514contains
515!OCL SERIAL
516 subroutine elementoperationtensorprod3d_create( elem3D, obj )
517 use scale_prc, only: prc_abort
518 implicit none
519 class(elementbase3d), intent(in) :: elem3d
520 class(elementoperationtensorprod3d), intent(out), allocatable :: obj
521 !-----------------------------------------------------
522
523 if ( elem3d%PolyOrder_h /= elem3d%PolyOrder_v ) then
524 log_info('ElemenetOperationTensorprod3D_create',*) 'PolyOrder_h and PolyOrder_v should be same in this module. ElemenetOperationGeneral should be used!'
525 call prc_abort
526 end if
527
528 select case( elem3d%PolyOrder_h )
529 case(1)
530 allocate( elementoperationtensorprod3d_p1 :: obj )
531 case(2)
532 allocate( elementoperationtensorprod3d_p2 :: obj )
533 case(3)
534 allocate( elementoperationtensorprod3d_p3 :: obj )
535 case(4)
536 allocate( elementoperationtensorprod3d_p4 :: obj )
537 case(5)
538 allocate( elementoperationtensorprod3d_p5 :: obj )
539 case(6)
540 allocate( elementoperationtensorprod3d_p6 :: obj )
541 case(7)
542 allocate( elementoperationtensorprod3d_p7 :: obj )
543 case(8)
544 allocate( elementoperationtensorprod3d_p8 :: obj )
545 case(9)
546 allocate( elementoperationtensorprod3d_p9 :: obj )
547 case(10)
548 allocate( elementoperationtensorprod3d_p10 :: obj )
549 case(11)
550 allocate( elementoperationtensorprod3d_p11 :: obj )
551 case(12)
552 allocate( elementoperationtensorprod3d_p12 :: obj )
553 case(13)
554 allocate( elementoperationtensorprod3d_p13 :: obj )
555 case(14)
556 allocate( elementoperationtensorprod3d_p14 :: obj )
557 case(15)
558 allocate( elementoperationtensorprod3d_p15 :: obj )
559 case default
560 log_info('ElemenetOperationTensorprod3D_create',*) 'The specified polynomial order execceds 15 and is not supported in this module. ElemenetOperationGeneral should be used!'
561 call prc_abort
562 end select
563 call obj%Init( elem3d )
564
565 return
567
568
569!--- For p=1 ------------------------------------
570
573!OCL SERIAL
574 subroutine element_operation_tensorprod3d_init_p1( this, elem3D )
575 implicit none
576 class(elementoperationtensorprod3d_p1), intent(inout) :: this
577 class(elementbase3d), intent(in), target :: elem3d
578 !----------------------------------------------------------
579
580 this%elem3D => elem3d
581
582 call setup_elem_operator( this%D1D, this%D1D_tr, this%Lift_mat, this%IntrpMat_VPOrdM1_tr, &
583 2, elem3d )
584 return
585 end subroutine element_operation_tensorprod3d_init_p1
586
589!OCL SERIAL
590 subroutine element_operation_tensorprod3d_setup_modalfilter_p1( this, &
591 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
592 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
595 implicit none
596 class(elementoperationtensorprod3d_p1), intent(inout) :: this
597 real(rp), intent(in) :: mf_etac_h
598 real(rp), intent(in) :: mf_alpha_h
599 integer, intent(in) :: mf_order_h
600 real(rp), intent(in) :: mf_etac_v
601 real(rp), intent(in) :: mf_alpha_v
602 integer, intent(in) :: mf_order_v
603 !--------------------------------------------------------
604
605 call setup_modalfilter( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, &
606 mf_etac_h, mf_alpha_h, mf_order_h, &
607 mf_etac_v, mf_alpha_v, mf_order_v, &
608 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
609
610 return
611 end subroutine element_operation_tensorprod3d_setup_modalfilter_p1
612
615!OCL SERIAL
616 subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p1( this, &
617 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
618 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
621 implicit none
622 class(elementoperationtensorprod3d_p1), intent(inout) :: this
623 real(rp), intent(in) :: mf_etac_h
624 real(rp), intent(in) :: mf_alpha_h
625 integer, intent(in) :: mf_order_h
626 real(rp), intent(in) :: mf_etac_v
627 real(rp), intent(in) :: mf_alpha_v
628 integer, intent(in) :: mf_order_v
629 !--------------------------------------------------------
630
631 call setup_modalfilter( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, &
632 mf_etac_h, mf_alpha_h, mf_order_h, &
633 mf_etac_v, mf_alpha_v, mf_order_v, &
634 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
635
636 return
637 end subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p1
638
641!OCL SERIAL
642 subroutine element_operation_tensorprod3d_final_p1( this )
643 implicit none
644 class(elementoperationtensorprod3d_p1), intent(inout) :: this
645 !----------------------------------------------------------
646 nullify( this%elem3D )
647 return
648 end subroutine element_operation_tensorprod3d_final_p1
649
652!OCL SERIAL
653 subroutine element_operation_tensorprod3d_dx_p1( this, vec_in, vec_out )
655 implicit none
656 class(elementoperationtensorprod3d_p1), intent(in) :: this
657 real(rp), intent(in) :: vec_in(this%elem3d%np)
658 real(rp), intent(out) :: vec_out(this%elem3d%np)
659 !----------------------------------------------------------
660 call element_operation_kernel_matvec_dirx_p1( this%D1D, vec_in, vec_out )
661 return
662 end subroutine element_operation_tensorprod3d_dx_p1
663
666!OCL SERIAL
667 subroutine element_operation_tensorprod3d_dy_p1( this, vec_in, vec_out )
669 implicit none
670 class(elementoperationtensorprod3d_p1), intent(in) :: this
671 real(rp), intent(in) :: vec_in(this%elem3d%np)
672 real(rp), intent(out) :: vec_out(this%elem3d%np)
673 !----------------------------------------------------------
674 call element_operation_kernel_matvec_diry_p1( this%D1D_tr, vec_in, vec_out )
675 return
676 end subroutine element_operation_tensorprod3d_dy_p1
677
680!OCL SERIAL
681 subroutine element_operation_tensorprod3d_dz_p1( this, vec_in, vec_out )
683 implicit none
684 class(elementoperationtensorprod3d_p1), intent(in) :: this
685 real(rp), intent(in) :: vec_in(this%elem3d%np)
686 real(rp), intent(out) :: vec_out(this%elem3d%np)
687 !----------------------------------------------------------
688 call element_operation_kernel_matvec_dirz_p1( this%D1D_tr, vec_in, vec_out )
689 return
690 end subroutine element_operation_tensorprod3d_dz_p1
691
694!OCL SERIAL
695 subroutine element_operation_tensorprod3d_lift_p1( this, vec_in, vec_out )
697 implicit none
698 class(elementoperationtensorprod3d_p1), intent(in) :: this
699 real(rp), intent(in) :: vec_in(this%elem3d%nfptot)
700 real(rp), intent(out) :: vec_out(this%elem3d%np)
701 !----------------------------------------------------------
702 call element_operation_kernel_matvec_lift_hexahedral_p1( this%Lift_mat, vec_in, vec_out )
703 return
704 end subroutine element_operation_tensorprod3d_lift_p1
705
708!OCL SERIAL
709 subroutine element_operation_tensorprod3d_dxdydzlift_p1( this, vec_in, vec_in_lift, vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
713 implicit none
714 class(elementoperationtensorprod3d_p1), intent(in) :: this
715 real(rp), intent(in) :: vec_in(this%elem3d%np)
716 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
717 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
718 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
719 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
720 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
721 !----------------------------------------------------------
722 call element_operation_kernel_matvec_gradlike_dirxyz_p1( this%D1D, this%D1D_tr, vec_in, vec_in, &
723 vec_out_dx, vec_out_dy, vec_out_dz )
724 call element_operation_kernel_matvec_lift_hexahedral_p1( this%Lift_mat, vec_in_lift, &
725 vec_out_lift )
726
727 return
728 end subroutine element_operation_tensorprod3d_dxdydzlift_p1
729
732!OCL SERIAL
733 subroutine element_operation_tensorprod3d_div_p1( this, vec_in_x, vec_in_y, vec_in_z, vec_in_lift, &
734 vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
738 implicit none
739 class(elementoperationtensorprod3d_p1), intent(in) :: this
740 real(rp), intent(in) :: vec_in_x(this%elem3d%np)
741 real(rp), intent(in) :: vec_in_y(this%elem3d%np)
742 real(rp), intent(in) :: vec_in_z(this%elem3d%np)
743 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
744 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
745 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
746 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
747 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
748 !----------------------------------------------------------
749
750 call element_operation_kernel_matvec_lift_hexahedral_p1( this%Lift_mat, vec_in_lift, &
751 vec_out_lift )
752
753 call element_operation_kernel_matvec_divlike_dirxyz_p1( this%D1D, this%D1D_tr, vec_in_x, vec_in_y, vec_in_z, &
754 vec_out_dx, vec_out_dy, vec_out_dz )
755 return
756 end subroutine element_operation_tensorprod3d_div_p1
757
760!OCL SERIAL
761 subroutine element_operation_tensorprod3d_div_var5_p1( this, vec_in, vec_in_lift, &
762 vec_out_d )
766 implicit none
767 class(elementoperationtensorprod3d_p1), intent(in) :: this
768 real(rp), intent(in) :: vec_in(this%elem3d%np,3,5)
769 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot,5)
770 real(rp), intent(out) :: vec_out_d(this%elem3d%np,4,5)
771
772 integer :: iv
773 !----------------------------------------------------------
774
775 do iv=1, 5
776 call element_operation_kernel_matvec_lift_hexahedral_p1( this%Lift_mat, vec_in_lift(:,iv), &
777 vec_out_d(:,4,iv) )
778 end do
779 do iv=1, 5
780 call element_operation_kernel_matvec_divlike_dirxyz_p1( this%D1D, this%D1D_tr, vec_in(:,1,iv), vec_in(:,2,iv), vec_in(:,3,iv), &
781 vec_out_d(:,1,iv), vec_out_d(:,2,iv), vec_out_d(:,3,iv) )
782 end do
783 return
784 end subroutine element_operation_tensorprod3d_div_var5_p1
785
786!OCL SERIAL
787 subroutine element_operation_tensorprod3d_vfilterpm1_p1( this, vec_in, vec_out )
789 implicit none
790 class(elementoperationtensorprod3d_p1), intent(in) :: this
791 real(rp), intent(in) :: vec_in(this%elem3d%np)
792 real(rp), intent(out) :: vec_out(this%elem3d%np)
793 !---------------------------------------------------------------
794
795 call element_operation_kernel_matvec_dirz_p1( this%IntrpMat_VPOrdM1_tr, vec_in, &
796 vec_out )
797 return
798 end subroutine element_operation_tensorprod3d_vfilterpm1_p1
799
800 !OCL SERIAL
801 subroutine element_operation_tensorprod3d_modalfilter_tracer_p1( this, vec_in, vec_work, vec_out )
804
805 implicit none
806 class(elementoperationtensorprod3d_p1), intent(in) :: this
807 real(rp), intent(in) :: vec_in(this%elem3d%np)
808 real(rp), intent(out) :: vec_work(this%elem3d%np)
809 real(rp), intent(out) :: vec_out(this%elem3d%np)
810 !---------------------------------------------
811
812 call element_operation_kernel_matvec_modalfilter_p1( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, vec_in(:), vec_work, &
813 vec_out(:) )
814
815 return
816 end subroutine element_operation_tensorprod3d_modalfilter_tracer_p1
817
818!OCL SERIAL
819 subroutine element_operation_tensorprod3d_modalfilter_var5_p1( this, vec_in, vec_work, vec_out )
822
823 implicit none
824 class(elementoperationtensorprod3d_p1), intent(in) :: this
825 real(rp), intent(in) :: vec_in(this%elem3d%np,5)
826 real(rp), intent(out) :: vec_work(this%elem3d%np)
827 real(rp), intent(out) :: vec_out(this%elem3d%np,5)
828 integer :: iv
829 !---------------------------------------------
830
831 do iv=1, 5
832 call element_operation_kernel_matvec_modalfilter_p1( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, vec_in(:,iv), vec_work, &
833 vec_out(:,iv) )
834 end do
835
836 return
837 end subroutine element_operation_tensorprod3d_modalfilter_var5_p1
838
839
840!--- For p=2 ------------------------------------
841
844!OCL SERIAL
845 subroutine element_operation_tensorprod3d_init_p2( this, elem3D )
846 implicit none
847 class(elementoperationtensorprod3d_p2), intent(inout) :: this
848 class(elementbase3d), intent(in), target :: elem3d
849 !----------------------------------------------------------
850
851 this%elem3D => elem3d
852
853 call setup_elem_operator( this%D1D, this%D1D_tr, this%Lift_mat, this%IntrpMat_VPOrdM1_tr, &
854 3, elem3d )
855 return
856 end subroutine element_operation_tensorprod3d_init_p2
857
860!OCL SERIAL
861 subroutine element_operation_tensorprod3d_setup_modalfilter_p2( this, &
862 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
863 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
866 implicit none
867 class(elementoperationtensorprod3d_p2), intent(inout) :: this
868 real(rp), intent(in) :: mf_etac_h
869 real(rp), intent(in) :: mf_alpha_h
870 integer, intent(in) :: mf_order_h
871 real(rp), intent(in) :: mf_etac_v
872 real(rp), intent(in) :: mf_alpha_v
873 integer, intent(in) :: mf_order_v
874 !--------------------------------------------------------
875
876 call setup_modalfilter( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, &
877 mf_etac_h, mf_alpha_h, mf_order_h, &
878 mf_etac_v, mf_alpha_v, mf_order_v, &
879 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
880
881 return
882 end subroutine element_operation_tensorprod3d_setup_modalfilter_p2
883
886!OCL SERIAL
887 subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p2( this, &
888 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
889 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
892 implicit none
893 class(elementoperationtensorprod3d_p2), intent(inout) :: this
894 real(rp), intent(in) :: mf_etac_h
895 real(rp), intent(in) :: mf_alpha_h
896 integer, intent(in) :: mf_order_h
897 real(rp), intent(in) :: mf_etac_v
898 real(rp), intent(in) :: mf_alpha_v
899 integer, intent(in) :: mf_order_v
900 !--------------------------------------------------------
901
902 call setup_modalfilter( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, &
903 mf_etac_h, mf_alpha_h, mf_order_h, &
904 mf_etac_v, mf_alpha_v, mf_order_v, &
905 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
906
907 return
908 end subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p2
909
912!OCL SERIAL
913 subroutine element_operation_tensorprod3d_final_p2( this )
914 implicit none
915 class(elementoperationtensorprod3d_p2), intent(inout) :: this
916 !----------------------------------------------------------
917 nullify( this%elem3D )
918 return
919 end subroutine element_operation_tensorprod3d_final_p2
920
923!OCL SERIAL
924 subroutine element_operation_tensorprod3d_dx_p2( this, vec_in, vec_out )
926 implicit none
927 class(elementoperationtensorprod3d_p2), intent(in) :: this
928 real(rp), intent(in) :: vec_in(this%elem3d%np)
929 real(rp), intent(out) :: vec_out(this%elem3d%np)
930 !----------------------------------------------------------
931 call element_operation_kernel_matvec_dirx_p2( this%D1D, vec_in, vec_out )
932 return
933 end subroutine element_operation_tensorprod3d_dx_p2
934
937!OCL SERIAL
938 subroutine element_operation_tensorprod3d_dy_p2( this, vec_in, vec_out )
940 implicit none
941 class(elementoperationtensorprod3d_p2), intent(in) :: this
942 real(rp), intent(in) :: vec_in(this%elem3d%np)
943 real(rp), intent(out) :: vec_out(this%elem3d%np)
944 !----------------------------------------------------------
945 call element_operation_kernel_matvec_diry_p2( this%D1D_tr, vec_in, vec_out )
946 return
947 end subroutine element_operation_tensorprod3d_dy_p2
948
951!OCL SERIAL
952 subroutine element_operation_tensorprod3d_dz_p2( this, vec_in, vec_out )
954 implicit none
955 class(elementoperationtensorprod3d_p2), intent(in) :: this
956 real(rp), intent(in) :: vec_in(this%elem3d%np)
957 real(rp), intent(out) :: vec_out(this%elem3d%np)
958 !----------------------------------------------------------
959 call element_operation_kernel_matvec_dirz_p2( this%D1D_tr, vec_in, vec_out )
960 return
961 end subroutine element_operation_tensorprod3d_dz_p2
962
965!OCL SERIAL
966 subroutine element_operation_tensorprod3d_lift_p2( this, vec_in, vec_out )
968 implicit none
969 class(elementoperationtensorprod3d_p2), intent(in) :: this
970 real(rp), intent(in) :: vec_in(this%elem3d%nfptot)
971 real(rp), intent(out) :: vec_out(this%elem3d%np)
972 !----------------------------------------------------------
973 call element_operation_kernel_matvec_lift_hexahedral_p2( this%Lift_mat, vec_in, vec_out )
974 return
975 end subroutine element_operation_tensorprod3d_lift_p2
976
979!OCL SERIAL
980 subroutine element_operation_tensorprod3d_dxdydzlift_p2( this, vec_in, vec_in_lift, vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
984 implicit none
985 class(elementoperationtensorprod3d_p2), intent(in) :: this
986 real(rp), intent(in) :: vec_in(this%elem3d%np)
987 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
988 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
989 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
990 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
991 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
992 !----------------------------------------------------------
993 call element_operation_kernel_matvec_gradlike_dirxyz_p2( this%D1D, this%D1D_tr, vec_in, vec_in, &
994 vec_out_dx, vec_out_dy, vec_out_dz )
995 call element_operation_kernel_matvec_lift_hexahedral_p2( this%Lift_mat, vec_in_lift, &
996 vec_out_lift )
997
998 return
999 end subroutine element_operation_tensorprod3d_dxdydzlift_p2
1000
1003!OCL SERIAL
1004 subroutine element_operation_tensorprod3d_div_p2( this, vec_in_x, vec_in_y, vec_in_z, vec_in_lift, &
1005 vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
1009 implicit none
1010 class(elementoperationtensorprod3d_p2), intent(in) :: this
1011 real(rp), intent(in) :: vec_in_x(this%elem3d%np)
1012 real(rp), intent(in) :: vec_in_y(this%elem3d%np)
1013 real(rp), intent(in) :: vec_in_z(this%elem3d%np)
1014 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
1015 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
1016 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
1017 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
1018 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
1019 !----------------------------------------------------------
1020
1021 call element_operation_kernel_matvec_lift_hexahedral_p2( this%Lift_mat, vec_in_lift, &
1022 vec_out_lift )
1023
1024 call element_operation_kernel_matvec_divlike_dirxyz_p2( this%D1D, this%D1D_tr, vec_in_x, vec_in_y, vec_in_z, &
1025 vec_out_dx, vec_out_dy, vec_out_dz )
1026 return
1027 end subroutine element_operation_tensorprod3d_div_p2
1028
1031!OCL SERIAL
1032 subroutine element_operation_tensorprod3d_div_var5_p2( this, vec_in, vec_in_lift, &
1033 vec_out_d )
1037 implicit none
1038 class(elementoperationtensorprod3d_p2), intent(in) :: this
1039 real(rp), intent(in) :: vec_in(this%elem3d%np,3,5)
1040 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot,5)
1041 real(rp), intent(out) :: vec_out_d(this%elem3d%np,4,5)
1042
1043 integer :: iv
1044 !----------------------------------------------------------
1045
1046 do iv=1, 5
1047 call element_operation_kernel_matvec_lift_hexahedral_p2( this%Lift_mat, vec_in_lift(:,iv), &
1048 vec_out_d(:,4,iv) )
1049 end do
1050 do iv=1, 5
1051 call element_operation_kernel_matvec_divlike_dirxyz_p2( this%D1D, this%D1D_tr, vec_in(:,1,iv), vec_in(:,2,iv), vec_in(:,3,iv), &
1052 vec_out_d(:,1,iv), vec_out_d(:,2,iv), vec_out_d(:,3,iv) )
1053 end do
1054 return
1055 end subroutine element_operation_tensorprod3d_div_var5_p2
1056
1057!OCL SERIAL
1058 subroutine element_operation_tensorprod3d_vfilterpm1_p2( this, vec_in, vec_out )
1060 implicit none
1061 class(elementoperationtensorprod3d_p2), intent(in) :: this
1062 real(rp), intent(in) :: vec_in(this%elem3d%np)
1063 real(rp), intent(out) :: vec_out(this%elem3d%np)
1064 !---------------------------------------------------------------
1065
1066 call element_operation_kernel_matvec_dirz_p2( this%IntrpMat_VPOrdM1_tr, vec_in, &
1067 vec_out )
1068 return
1069 end subroutine element_operation_tensorprod3d_vfilterpm1_p2
1070
1071 !OCL SERIAL
1072 subroutine element_operation_tensorprod3d_modalfilter_tracer_p2( this, vec_in, vec_work, vec_out )
1075
1076 implicit none
1077 class(elementoperationtensorprod3d_p2), intent(in) :: this
1078 real(rp), intent(in) :: vec_in(this%elem3d%np)
1079 real(rp), intent(out) :: vec_work(this%elem3d%np)
1080 real(rp), intent(out) :: vec_out(this%elem3d%np)
1081 !---------------------------------------------
1082
1083 call element_operation_kernel_matvec_modalfilter_p2( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, vec_in(:), vec_work, &
1084 vec_out(:) )
1085
1086 return
1087 end subroutine element_operation_tensorprod3d_modalfilter_tracer_p2
1088
1089!OCL SERIAL
1090 subroutine element_operation_tensorprod3d_modalfilter_var5_p2( this, vec_in, vec_work, vec_out )
1093
1094 implicit none
1095 class(elementoperationtensorprod3d_p2), intent(in) :: this
1096 real(rp), intent(in) :: vec_in(this%elem3d%np,5)
1097 real(rp), intent(out) :: vec_work(this%elem3d%np)
1098 real(rp), intent(out) :: vec_out(this%elem3d%np,5)
1099 integer :: iv
1100 !---------------------------------------------
1101
1102 do iv=1, 5
1103 call element_operation_kernel_matvec_modalfilter_p2( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, vec_in(:,iv), vec_work, &
1104 vec_out(:,iv) )
1105 end do
1106
1107 return
1108 end subroutine element_operation_tensorprod3d_modalfilter_var5_p2
1109
1110
1111!--- For p=3 ------------------------------------
1112
1115!OCL SERIAL
1116 subroutine element_operation_tensorprod3d_init_p3( this, elem3D )
1117 implicit none
1118 class(elementoperationtensorprod3d_p3), intent(inout) :: this
1119 class(elementbase3d), intent(in), target :: elem3d
1120 !----------------------------------------------------------
1121
1122 this%elem3D => elem3d
1123
1124 call setup_elem_operator( this%D1D, this%D1D_tr, this%Lift_mat, this%IntrpMat_VPOrdM1_tr, &
1125 4, elem3d )
1126 return
1127 end subroutine element_operation_tensorprod3d_init_p3
1128
1131!OCL SERIAL
1132 subroutine element_operation_tensorprod3d_setup_modalfilter_p3( this, &
1133 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
1134 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
1137 implicit none
1138 class(elementoperationtensorprod3d_p3), intent(inout) :: this
1139 real(rp), intent(in) :: mf_etac_h
1140 real(rp), intent(in) :: mf_alpha_h
1141 integer, intent(in) :: mf_order_h
1142 real(rp), intent(in) :: mf_etac_v
1143 real(rp), intent(in) :: mf_alpha_v
1144 integer, intent(in) :: mf_order_v
1145 !--------------------------------------------------------
1146
1147 call setup_modalfilter( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, &
1148 mf_etac_h, mf_alpha_h, mf_order_h, &
1149 mf_etac_v, mf_alpha_v, mf_order_v, &
1150 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
1151
1152 return
1153 end subroutine element_operation_tensorprod3d_setup_modalfilter_p3
1154
1157!OCL SERIAL
1158 subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p3( this, &
1159 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
1160 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
1163 implicit none
1164 class(elementoperationtensorprod3d_p3), intent(inout) :: this
1165 real(rp), intent(in) :: mf_etac_h
1166 real(rp), intent(in) :: mf_alpha_h
1167 integer, intent(in) :: mf_order_h
1168 real(rp), intent(in) :: mf_etac_v
1169 real(rp), intent(in) :: mf_alpha_v
1170 integer, intent(in) :: mf_order_v
1171 !--------------------------------------------------------
1172
1173 call setup_modalfilter( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, &
1174 mf_etac_h, mf_alpha_h, mf_order_h, &
1175 mf_etac_v, mf_alpha_v, mf_order_v, &
1176 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
1177
1178 return
1179 end subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p3
1180
1183!OCL SERIAL
1184 subroutine element_operation_tensorprod3d_final_p3( this )
1185 implicit none
1186 class(elementoperationtensorprod3d_p3), intent(inout) :: this
1187 !----------------------------------------------------------
1188 nullify( this%elem3D )
1189 return
1190 end subroutine element_operation_tensorprod3d_final_p3
1191
1194!OCL SERIAL
1195 subroutine element_operation_tensorprod3d_dx_p3( this, vec_in, vec_out )
1197 implicit none
1198 class(elementoperationtensorprod3d_p3), intent(in) :: this
1199 real(rp), intent(in) :: vec_in(this%elem3d%np)
1200 real(rp), intent(out) :: vec_out(this%elem3d%np)
1201 !----------------------------------------------------------
1202 call element_operation_kernel_matvec_dirx_p3( this%D1D, vec_in, vec_out )
1203 return
1204 end subroutine element_operation_tensorprod3d_dx_p3
1205
1208!OCL SERIAL
1209 subroutine element_operation_tensorprod3d_dy_p3( this, vec_in, vec_out )
1211 implicit none
1212 class(elementoperationtensorprod3d_p3), intent(in) :: this
1213 real(rp), intent(in) :: vec_in(this%elem3d%np)
1214 real(rp), intent(out) :: vec_out(this%elem3d%np)
1215 !----------------------------------------------------------
1216 call element_operation_kernel_matvec_diry_p3( this%D1D_tr, vec_in, vec_out )
1217 return
1218 end subroutine element_operation_tensorprod3d_dy_p3
1219
1222!OCL SERIAL
1223 subroutine element_operation_tensorprod3d_dz_p3( this, vec_in, vec_out )
1225 implicit none
1226 class(elementoperationtensorprod3d_p3), intent(in) :: this
1227 real(rp), intent(in) :: vec_in(this%elem3d%np)
1228 real(rp), intent(out) :: vec_out(this%elem3d%np)
1229 !----------------------------------------------------------
1230 call element_operation_kernel_matvec_dirz_p3( this%D1D_tr, vec_in, vec_out )
1231 return
1232 end subroutine element_operation_tensorprod3d_dz_p3
1233
1236!OCL SERIAL
1237 subroutine element_operation_tensorprod3d_lift_p3( this, vec_in, vec_out )
1239 implicit none
1240 class(elementoperationtensorprod3d_p3), intent(in) :: this
1241 real(rp), intent(in) :: vec_in(this%elem3d%nfptot)
1242 real(rp), intent(out) :: vec_out(this%elem3d%np)
1243 !----------------------------------------------------------
1244 call element_operation_kernel_matvec_lift_hexahedral_p3( this%Lift_mat, vec_in, vec_out )
1245 return
1246 end subroutine element_operation_tensorprod3d_lift_p3
1247
1250!OCL SERIAL
1251 subroutine element_operation_tensorprod3d_dxdydzlift_p3( this, vec_in, vec_in_lift, vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
1255 implicit none
1256 class(elementoperationtensorprod3d_p3), intent(in) :: this
1257 real(rp), intent(in) :: vec_in(this%elem3d%np)
1258 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
1259 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
1260 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
1261 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
1262 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
1263 !----------------------------------------------------------
1264 call element_operation_kernel_matvec_gradlike_dirxyz_p3( this%D1D, this%D1D_tr, vec_in, vec_in, &
1265 vec_out_dx, vec_out_dy, vec_out_dz )
1266 call element_operation_kernel_matvec_lift_hexahedral_p3( this%Lift_mat, vec_in_lift, &
1267 vec_out_lift )
1268
1269 return
1270 end subroutine element_operation_tensorprod3d_dxdydzlift_p3
1271
1274!OCL SERIAL
1275 subroutine element_operation_tensorprod3d_div_p3( this, vec_in_x, vec_in_y, vec_in_z, vec_in_lift, &
1276 vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
1280 implicit none
1281 class(elementoperationtensorprod3d_p3), intent(in) :: this
1282 real(rp), intent(in) :: vec_in_x(this%elem3d%np)
1283 real(rp), intent(in) :: vec_in_y(this%elem3d%np)
1284 real(rp), intent(in) :: vec_in_z(this%elem3d%np)
1285 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
1286 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
1287 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
1288 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
1289 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
1290 !----------------------------------------------------------
1291
1292 call element_operation_kernel_matvec_lift_hexahedral_p3( this%Lift_mat, vec_in_lift, &
1293 vec_out_lift )
1294
1295 call element_operation_kernel_matvec_divlike_dirxyz_p3( this%D1D, this%D1D_tr, vec_in_x, vec_in_y, vec_in_z, &
1296 vec_out_dx, vec_out_dy, vec_out_dz )
1297 return
1298 end subroutine element_operation_tensorprod3d_div_p3
1299
1302!OCL SERIAL
1303 subroutine element_operation_tensorprod3d_div_var5_p3( this, vec_in, vec_in_lift, &
1304 vec_out_d )
1308 implicit none
1309 class(elementoperationtensorprod3d_p3), intent(in) :: this
1310 real(rp), intent(in) :: vec_in(this%elem3d%np,3,5)
1311 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot,5)
1312 real(rp), intent(out) :: vec_out_d(this%elem3d%np,4,5)
1313
1314 integer :: iv
1315 !----------------------------------------------------------
1316
1317 do iv=1, 5
1318 call element_operation_kernel_matvec_lift_hexahedral_p3( this%Lift_mat, vec_in_lift(:,iv), &
1319 vec_out_d(:,4,iv) )
1320 end do
1321 do iv=1, 5
1322 call element_operation_kernel_matvec_divlike_dirxyz_p3( this%D1D, this%D1D_tr, vec_in(:,1,iv), vec_in(:,2,iv), vec_in(:,3,iv), &
1323 vec_out_d(:,1,iv), vec_out_d(:,2,iv), vec_out_d(:,3,iv) )
1324 end do
1325 return
1326 end subroutine element_operation_tensorprod3d_div_var5_p3
1327
1328!OCL SERIAL
1329 subroutine element_operation_tensorprod3d_vfilterpm1_p3( this, vec_in, vec_out )
1331 implicit none
1332 class(elementoperationtensorprod3d_p3), intent(in) :: this
1333 real(rp), intent(in) :: vec_in(this%elem3d%np)
1334 real(rp), intent(out) :: vec_out(this%elem3d%np)
1335 !---------------------------------------------------------------
1336
1337 call element_operation_kernel_matvec_dirz_p3( this%IntrpMat_VPOrdM1_tr, vec_in, &
1338 vec_out )
1339 return
1340 end subroutine element_operation_tensorprod3d_vfilterpm1_p3
1341
1342 !OCL SERIAL
1343 subroutine element_operation_tensorprod3d_modalfilter_tracer_p3( this, vec_in, vec_work, vec_out )
1346
1347 implicit none
1348 class(elementoperationtensorprod3d_p3), intent(in) :: this
1349 real(rp), intent(in) :: vec_in(this%elem3d%np)
1350 real(rp), intent(out) :: vec_work(this%elem3d%np)
1351 real(rp), intent(out) :: vec_out(this%elem3d%np)
1352 !---------------------------------------------
1353
1354 call element_operation_kernel_matvec_modalfilter_p3( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, vec_in(:), vec_work, &
1355 vec_out(:) )
1356
1357 return
1358 end subroutine element_operation_tensorprod3d_modalfilter_tracer_p3
1359
1360!OCL SERIAL
1361 subroutine element_operation_tensorprod3d_modalfilter_var5_p3( this, vec_in, vec_work, vec_out )
1364
1365 implicit none
1366 class(elementoperationtensorprod3d_p3), intent(in) :: this
1367 real(rp), intent(in) :: vec_in(this%elem3d%np,5)
1368 real(rp), intent(out) :: vec_work(this%elem3d%np)
1369 real(rp), intent(out) :: vec_out(this%elem3d%np,5)
1370 integer :: iv
1371 !---------------------------------------------
1372
1373 do iv=1, 5
1374 call element_operation_kernel_matvec_modalfilter_p3( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, vec_in(:,iv), vec_work, &
1375 vec_out(:,iv) )
1376 end do
1377
1378 return
1379 end subroutine element_operation_tensorprod3d_modalfilter_var5_p3
1380
1381
1382!--- For p=4 ------------------------------------
1383
1386!OCL SERIAL
1387 subroutine element_operation_tensorprod3d_init_p4( this, elem3D )
1388 implicit none
1389 class(elementoperationtensorprod3d_p4), intent(inout) :: this
1390 class(elementbase3d), intent(in), target :: elem3d
1391 !----------------------------------------------------------
1392
1393 this%elem3D => elem3d
1394
1395 call setup_elem_operator( this%D1D, this%D1D_tr, this%Lift_mat, this%IntrpMat_VPOrdM1_tr, &
1396 5, elem3d )
1397 return
1398 end subroutine element_operation_tensorprod3d_init_p4
1399
1402!OCL SERIAL
1403 subroutine element_operation_tensorprod3d_setup_modalfilter_p4( this, &
1404 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
1405 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
1408 implicit none
1409 class(elementoperationtensorprod3d_p4), intent(inout) :: this
1410 real(rp), intent(in) :: mf_etac_h
1411 real(rp), intent(in) :: mf_alpha_h
1412 integer, intent(in) :: mf_order_h
1413 real(rp), intent(in) :: mf_etac_v
1414 real(rp), intent(in) :: mf_alpha_v
1415 integer, intent(in) :: mf_order_v
1416 !--------------------------------------------------------
1417
1418 call setup_modalfilter( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, &
1419 mf_etac_h, mf_alpha_h, mf_order_h, &
1420 mf_etac_v, mf_alpha_v, mf_order_v, &
1421 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
1422
1423 return
1424 end subroutine element_operation_tensorprod3d_setup_modalfilter_p4
1425
1428!OCL SERIAL
1429 subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p4( this, &
1430 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
1431 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
1434 implicit none
1435 class(elementoperationtensorprod3d_p4), intent(inout) :: this
1436 real(rp), intent(in) :: mf_etac_h
1437 real(rp), intent(in) :: mf_alpha_h
1438 integer, intent(in) :: mf_order_h
1439 real(rp), intent(in) :: mf_etac_v
1440 real(rp), intent(in) :: mf_alpha_v
1441 integer, intent(in) :: mf_order_v
1442 !--------------------------------------------------------
1443
1444 call setup_modalfilter( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, &
1445 mf_etac_h, mf_alpha_h, mf_order_h, &
1446 mf_etac_v, mf_alpha_v, mf_order_v, &
1447 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
1448
1449 return
1450 end subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p4
1451
1454!OCL SERIAL
1455 subroutine element_operation_tensorprod3d_final_p4( this )
1456 implicit none
1457 class(elementoperationtensorprod3d_p4), intent(inout) :: this
1458 !----------------------------------------------------------
1459 nullify( this%elem3D )
1460 return
1461 end subroutine element_operation_tensorprod3d_final_p4
1462
1465!OCL SERIAL
1466 subroutine element_operation_tensorprod3d_dx_p4( this, vec_in, vec_out )
1468 implicit none
1469 class(elementoperationtensorprod3d_p4), intent(in) :: this
1470 real(rp), intent(in) :: vec_in(this%elem3d%np)
1471 real(rp), intent(out) :: vec_out(this%elem3d%np)
1472 !----------------------------------------------------------
1473 call element_operation_kernel_matvec_dirx_p4( this%D1D, vec_in, vec_out )
1474 return
1475 end subroutine element_operation_tensorprod3d_dx_p4
1476
1479!OCL SERIAL
1480 subroutine element_operation_tensorprod3d_dy_p4( this, vec_in, vec_out )
1482 implicit none
1483 class(elementoperationtensorprod3d_p4), intent(in) :: this
1484 real(rp), intent(in) :: vec_in(this%elem3d%np)
1485 real(rp), intent(out) :: vec_out(this%elem3d%np)
1486 !----------------------------------------------------------
1487 call element_operation_kernel_matvec_diry_p4( this%D1D_tr, vec_in, vec_out )
1488 return
1489 end subroutine element_operation_tensorprod3d_dy_p4
1490
1493!OCL SERIAL
1494 subroutine element_operation_tensorprod3d_dz_p4( this, vec_in, vec_out )
1496 implicit none
1497 class(elementoperationtensorprod3d_p4), intent(in) :: this
1498 real(rp), intent(in) :: vec_in(this%elem3d%np)
1499 real(rp), intent(out) :: vec_out(this%elem3d%np)
1500 !----------------------------------------------------------
1501 call element_operation_kernel_matvec_dirz_p4( this%D1D_tr, vec_in, vec_out )
1502 return
1503 end subroutine element_operation_tensorprod3d_dz_p4
1504
1507!OCL SERIAL
1508 subroutine element_operation_tensorprod3d_lift_p4( this, vec_in, vec_out )
1510 implicit none
1511 class(elementoperationtensorprod3d_p4), intent(in) :: this
1512 real(rp), intent(in) :: vec_in(this%elem3d%nfptot)
1513 real(rp), intent(out) :: vec_out(this%elem3d%np)
1514 !----------------------------------------------------------
1515 call element_operation_kernel_matvec_lift_hexahedral_p4( this%Lift_mat, vec_in, vec_out )
1516 return
1517 end subroutine element_operation_tensorprod3d_lift_p4
1518
1521!OCL SERIAL
1522 subroutine element_operation_tensorprod3d_dxdydzlift_p4( this, vec_in, vec_in_lift, vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
1526 implicit none
1527 class(elementoperationtensorprod3d_p4), intent(in) :: this
1528 real(rp), intent(in) :: vec_in(this%elem3d%np)
1529 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
1530 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
1531 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
1532 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
1533 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
1534 !----------------------------------------------------------
1535 call element_operation_kernel_matvec_gradlike_dirxyz_p4( this%D1D, this%D1D_tr, vec_in, vec_in, &
1536 vec_out_dx, vec_out_dy, vec_out_dz )
1537 call element_operation_kernel_matvec_lift_hexahedral_p4( this%Lift_mat, vec_in_lift, &
1538 vec_out_lift )
1539
1540 return
1541 end subroutine element_operation_tensorprod3d_dxdydzlift_p4
1542
1545!OCL SERIAL
1546 subroutine element_operation_tensorprod3d_div_p4( this, vec_in_x, vec_in_y, vec_in_z, vec_in_lift, &
1547 vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
1551 implicit none
1552 class(elementoperationtensorprod3d_p4), intent(in) :: this
1553 real(rp), intent(in) :: vec_in_x(this%elem3d%np)
1554 real(rp), intent(in) :: vec_in_y(this%elem3d%np)
1555 real(rp), intent(in) :: vec_in_z(this%elem3d%np)
1556 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
1557 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
1558 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
1559 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
1560 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
1561 !----------------------------------------------------------
1562
1563 call element_operation_kernel_matvec_lift_hexahedral_p4( this%Lift_mat, vec_in_lift, &
1564 vec_out_lift )
1565
1566 call element_operation_kernel_matvec_divlike_dirxyz_p4( this%D1D, this%D1D_tr, vec_in_x, vec_in_y, vec_in_z, &
1567 vec_out_dx, vec_out_dy, vec_out_dz )
1568 return
1569 end subroutine element_operation_tensorprod3d_div_p4
1570
1573!OCL SERIAL
1574 subroutine element_operation_tensorprod3d_div_var5_p4( this, vec_in, vec_in_lift, &
1575 vec_out_d )
1579 implicit none
1580 class(elementoperationtensorprod3d_p4), intent(in) :: this
1581 real(rp), intent(in) :: vec_in(this%elem3d%np,3,5)
1582 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot,5)
1583 real(rp), intent(out) :: vec_out_d(this%elem3d%np,4,5)
1584
1585 integer :: iv
1586 !----------------------------------------------------------
1587
1588 do iv=1, 5
1589 call element_operation_kernel_matvec_lift_hexahedral_p4( this%Lift_mat, vec_in_lift(:,iv), &
1590 vec_out_d(:,4,iv) )
1591 end do
1592 do iv=1, 5
1593 call element_operation_kernel_matvec_divlike_dirxyz_p4( this%D1D, this%D1D_tr, vec_in(:,1,iv), vec_in(:,2,iv), vec_in(:,3,iv), &
1594 vec_out_d(:,1,iv), vec_out_d(:,2,iv), vec_out_d(:,3,iv) )
1595 end do
1596 return
1597 end subroutine element_operation_tensorprod3d_div_var5_p4
1598
1599!OCL SERIAL
1600 subroutine element_operation_tensorprod3d_vfilterpm1_p4( this, vec_in, vec_out )
1602 implicit none
1603 class(elementoperationtensorprod3d_p4), intent(in) :: this
1604 real(rp), intent(in) :: vec_in(this%elem3d%np)
1605 real(rp), intent(out) :: vec_out(this%elem3d%np)
1606 !---------------------------------------------------------------
1607
1608 call element_operation_kernel_matvec_dirz_p4( this%IntrpMat_VPOrdM1_tr, vec_in, &
1609 vec_out )
1610 return
1611 end subroutine element_operation_tensorprod3d_vfilterpm1_p4
1612
1613 !OCL SERIAL
1614 subroutine element_operation_tensorprod3d_modalfilter_tracer_p4( this, vec_in, vec_work, vec_out )
1617
1618 implicit none
1619 class(elementoperationtensorprod3d_p4), intent(in) :: this
1620 real(rp), intent(in) :: vec_in(this%elem3d%np)
1621 real(rp), intent(out) :: vec_work(this%elem3d%np)
1622 real(rp), intent(out) :: vec_out(this%elem3d%np)
1623 !---------------------------------------------
1624
1625 call element_operation_kernel_matvec_modalfilter_p4( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, vec_in(:), vec_work, &
1626 vec_out(:) )
1627
1628 return
1629 end subroutine element_operation_tensorprod3d_modalfilter_tracer_p4
1630
1631!OCL SERIAL
1632 subroutine element_operation_tensorprod3d_modalfilter_var5_p4( this, vec_in, vec_work, vec_out )
1635
1636 implicit none
1637 class(elementoperationtensorprod3d_p4), intent(in) :: this
1638 real(rp), intent(in) :: vec_in(this%elem3d%np,5)
1639 real(rp), intent(out) :: vec_work(this%elem3d%np)
1640 real(rp), intent(out) :: vec_out(this%elem3d%np,5)
1641 integer :: iv
1642 !---------------------------------------------
1643
1644 do iv=1, 5
1645 call element_operation_kernel_matvec_modalfilter_p4( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, vec_in(:,iv), vec_work, &
1646 vec_out(:,iv) )
1647 end do
1648
1649 return
1650 end subroutine element_operation_tensorprod3d_modalfilter_var5_p4
1651
1652
1653!--- For p=5 ------------------------------------
1654
1657!OCL SERIAL
1658 subroutine element_operation_tensorprod3d_init_p5( this, elem3D )
1659 implicit none
1660 class(elementoperationtensorprod3d_p5), intent(inout) :: this
1661 class(elementbase3d), intent(in), target :: elem3d
1662 !----------------------------------------------------------
1663
1664 this%elem3D => elem3d
1665
1666 call setup_elem_operator( this%D1D, this%D1D_tr, this%Lift_mat, this%IntrpMat_VPOrdM1_tr, &
1667 6, elem3d )
1668 return
1669 end subroutine element_operation_tensorprod3d_init_p5
1670
1673!OCL SERIAL
1674 subroutine element_operation_tensorprod3d_setup_modalfilter_p5( this, &
1675 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
1676 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
1679 implicit none
1680 class(elementoperationtensorprod3d_p5), intent(inout) :: this
1681 real(rp), intent(in) :: mf_etac_h
1682 real(rp), intent(in) :: mf_alpha_h
1683 integer, intent(in) :: mf_order_h
1684 real(rp), intent(in) :: mf_etac_v
1685 real(rp), intent(in) :: mf_alpha_v
1686 integer, intent(in) :: mf_order_v
1687 !--------------------------------------------------------
1688
1689 call setup_modalfilter( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, &
1690 mf_etac_h, mf_alpha_h, mf_order_h, &
1691 mf_etac_v, mf_alpha_v, mf_order_v, &
1692 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
1693
1694 return
1695 end subroutine element_operation_tensorprod3d_setup_modalfilter_p5
1696
1699!OCL SERIAL
1700 subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p5( this, &
1701 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
1702 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
1705 implicit none
1706 class(elementoperationtensorprod3d_p5), intent(inout) :: this
1707 real(rp), intent(in) :: mf_etac_h
1708 real(rp), intent(in) :: mf_alpha_h
1709 integer, intent(in) :: mf_order_h
1710 real(rp), intent(in) :: mf_etac_v
1711 real(rp), intent(in) :: mf_alpha_v
1712 integer, intent(in) :: mf_order_v
1713 !--------------------------------------------------------
1714
1715 call setup_modalfilter( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, &
1716 mf_etac_h, mf_alpha_h, mf_order_h, &
1717 mf_etac_v, mf_alpha_v, mf_order_v, &
1718 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
1719
1720 return
1721 end subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p5
1722
1725!OCL SERIAL
1726 subroutine element_operation_tensorprod3d_final_p5( this )
1727 implicit none
1728 class(elementoperationtensorprod3d_p5), intent(inout) :: this
1729 !----------------------------------------------------------
1730 nullify( this%elem3D )
1731 return
1732 end subroutine element_operation_tensorprod3d_final_p5
1733
1736!OCL SERIAL
1737 subroutine element_operation_tensorprod3d_dx_p5( this, vec_in, vec_out )
1739 implicit none
1740 class(elementoperationtensorprod3d_p5), intent(in) :: this
1741 real(rp), intent(in) :: vec_in(this%elem3d%np)
1742 real(rp), intent(out) :: vec_out(this%elem3d%np)
1743 !----------------------------------------------------------
1744 call element_operation_kernel_matvec_dirx_p5( this%D1D, vec_in, vec_out )
1745 return
1746 end subroutine element_operation_tensorprod3d_dx_p5
1747
1750!OCL SERIAL
1751 subroutine element_operation_tensorprod3d_dy_p5( this, vec_in, vec_out )
1753 implicit none
1754 class(elementoperationtensorprod3d_p5), intent(in) :: this
1755 real(rp), intent(in) :: vec_in(this%elem3d%np)
1756 real(rp), intent(out) :: vec_out(this%elem3d%np)
1757 !----------------------------------------------------------
1758 call element_operation_kernel_matvec_diry_p5( this%D1D_tr, vec_in, vec_out )
1759 return
1760 end subroutine element_operation_tensorprod3d_dy_p5
1761
1764!OCL SERIAL
1765 subroutine element_operation_tensorprod3d_dz_p5( this, vec_in, vec_out )
1767 implicit none
1768 class(elementoperationtensorprod3d_p5), intent(in) :: this
1769 real(rp), intent(in) :: vec_in(this%elem3d%np)
1770 real(rp), intent(out) :: vec_out(this%elem3d%np)
1771 !----------------------------------------------------------
1772 call element_operation_kernel_matvec_dirz_p5( this%D1D_tr, vec_in, vec_out )
1773 return
1774 end subroutine element_operation_tensorprod3d_dz_p5
1775
1778!OCL SERIAL
1779 subroutine element_operation_tensorprod3d_lift_p5( this, vec_in, vec_out )
1781 implicit none
1782 class(elementoperationtensorprod3d_p5), intent(in) :: this
1783 real(rp), intent(in) :: vec_in(this%elem3d%nfptot)
1784 real(rp), intent(out) :: vec_out(this%elem3d%np)
1785 !----------------------------------------------------------
1786 call element_operation_kernel_matvec_lift_hexahedral_p5( this%Lift_mat, vec_in, vec_out )
1787 return
1788 end subroutine element_operation_tensorprod3d_lift_p5
1789
1792!OCL SERIAL
1793 subroutine element_operation_tensorprod3d_dxdydzlift_p5( this, vec_in, vec_in_lift, vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
1797 implicit none
1798 class(elementoperationtensorprod3d_p5), intent(in) :: this
1799 real(rp), intent(in) :: vec_in(this%elem3d%np)
1800 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
1801 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
1802 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
1803 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
1804 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
1805 !----------------------------------------------------------
1806 call element_operation_kernel_matvec_gradlike_dirxyz_p5( this%D1D, this%D1D_tr, vec_in, vec_in, &
1807 vec_out_dx, vec_out_dy, vec_out_dz )
1808 call element_operation_kernel_matvec_lift_hexahedral_p5( this%Lift_mat, vec_in_lift, &
1809 vec_out_lift )
1810
1811 return
1812 end subroutine element_operation_tensorprod3d_dxdydzlift_p5
1813
1816!OCL SERIAL
1817 subroutine element_operation_tensorprod3d_div_p5( this, vec_in_x, vec_in_y, vec_in_z, vec_in_lift, &
1818 vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
1822 implicit none
1823 class(elementoperationtensorprod3d_p5), intent(in) :: this
1824 real(rp), intent(in) :: vec_in_x(this%elem3d%np)
1825 real(rp), intent(in) :: vec_in_y(this%elem3d%np)
1826 real(rp), intent(in) :: vec_in_z(this%elem3d%np)
1827 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
1828 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
1829 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
1830 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
1831 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
1832 !----------------------------------------------------------
1833
1834 call element_operation_kernel_matvec_lift_hexahedral_p5( this%Lift_mat, vec_in_lift, &
1835 vec_out_lift )
1836
1837 call element_operation_kernel_matvec_divlike_dirxyz_p5( this%D1D, this%D1D_tr, vec_in_x, vec_in_y, vec_in_z, &
1838 vec_out_dx, vec_out_dy, vec_out_dz )
1839 return
1840 end subroutine element_operation_tensorprod3d_div_p5
1841
1844!OCL SERIAL
1845 subroutine element_operation_tensorprod3d_div_var5_p5( this, vec_in, vec_in_lift, &
1846 vec_out_d )
1850 implicit none
1851 class(elementoperationtensorprod3d_p5), intent(in) :: this
1852 real(rp), intent(in) :: vec_in(this%elem3d%np,3,5)
1853 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot,5)
1854 real(rp), intent(out) :: vec_out_d(this%elem3d%np,4,5)
1855
1856 integer :: iv
1857 !----------------------------------------------------------
1858
1859 do iv=1, 5
1860 call element_operation_kernel_matvec_lift_hexahedral_p5( this%Lift_mat, vec_in_lift(:,iv), &
1861 vec_out_d(:,4,iv) )
1862 end do
1863 do iv=1, 5
1864 call element_operation_kernel_matvec_divlike_dirxyz_p5( this%D1D, this%D1D_tr, vec_in(:,1,iv), vec_in(:,2,iv), vec_in(:,3,iv), &
1865 vec_out_d(:,1,iv), vec_out_d(:,2,iv), vec_out_d(:,3,iv) )
1866 end do
1867 return
1868 end subroutine element_operation_tensorprod3d_div_var5_p5
1869
1870!OCL SERIAL
1871 subroutine element_operation_tensorprod3d_vfilterpm1_p5( this, vec_in, vec_out )
1873 implicit none
1874 class(elementoperationtensorprod3d_p5), intent(in) :: this
1875 real(rp), intent(in) :: vec_in(this%elem3d%np)
1876 real(rp), intent(out) :: vec_out(this%elem3d%np)
1877 !---------------------------------------------------------------
1878
1879 call element_operation_kernel_matvec_dirz_p5( this%IntrpMat_VPOrdM1_tr, vec_in, &
1880 vec_out )
1881 return
1882 end subroutine element_operation_tensorprod3d_vfilterpm1_p5
1883
1884 !OCL SERIAL
1885 subroutine element_operation_tensorprod3d_modalfilter_tracer_p5( this, vec_in, vec_work, vec_out )
1888
1889 implicit none
1890 class(elementoperationtensorprod3d_p5), intent(in) :: this
1891 real(rp), intent(in) :: vec_in(this%elem3d%np)
1892 real(rp), intent(out) :: vec_work(this%elem3d%np)
1893 real(rp), intent(out) :: vec_out(this%elem3d%np)
1894 !---------------------------------------------
1895
1896 call element_operation_kernel_matvec_modalfilter_p5( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, vec_in(:), vec_work, &
1897 vec_out(:) )
1898
1899 return
1900 end subroutine element_operation_tensorprod3d_modalfilter_tracer_p5
1901
1902!OCL SERIAL
1903 subroutine element_operation_tensorprod3d_modalfilter_var5_p5( this, vec_in, vec_work, vec_out )
1906
1907 implicit none
1908 class(elementoperationtensorprod3d_p5), intent(in) :: this
1909 real(rp), intent(in) :: vec_in(this%elem3d%np,5)
1910 real(rp), intent(out) :: vec_work(this%elem3d%np)
1911 real(rp), intent(out) :: vec_out(this%elem3d%np,5)
1912 integer :: iv
1913 !---------------------------------------------
1914
1915 do iv=1, 5
1916 call element_operation_kernel_matvec_modalfilter_p5( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, vec_in(:,iv), vec_work, &
1917 vec_out(:,iv) )
1918 end do
1919
1920 return
1921 end subroutine element_operation_tensorprod3d_modalfilter_var5_p5
1922
1923
1924!--- For p=6 ------------------------------------
1925
1928!OCL SERIAL
1929 subroutine element_operation_tensorprod3d_init_p6( this, elem3D )
1930 implicit none
1931 class(elementoperationtensorprod3d_p6), intent(inout) :: this
1932 class(elementbase3d), intent(in), target :: elem3d
1933 !----------------------------------------------------------
1934
1935 this%elem3D => elem3d
1936
1937 call setup_elem_operator( this%D1D, this%D1D_tr, this%Lift_mat, this%IntrpMat_VPOrdM1_tr, &
1938 7, elem3d )
1939 return
1940 end subroutine element_operation_tensorprod3d_init_p6
1941
1944!OCL SERIAL
1945 subroutine element_operation_tensorprod3d_setup_modalfilter_p6( this, &
1946 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
1947 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
1950 implicit none
1951 class(elementoperationtensorprod3d_p6), intent(inout) :: this
1952 real(rp), intent(in) :: mf_etac_h
1953 real(rp), intent(in) :: mf_alpha_h
1954 integer, intent(in) :: mf_order_h
1955 real(rp), intent(in) :: mf_etac_v
1956 real(rp), intent(in) :: mf_alpha_v
1957 integer, intent(in) :: mf_order_v
1958 !--------------------------------------------------------
1959
1960 call setup_modalfilter( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, &
1961 mf_etac_h, mf_alpha_h, mf_order_h, &
1962 mf_etac_v, mf_alpha_v, mf_order_v, &
1963 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
1964
1965 return
1966 end subroutine element_operation_tensorprod3d_setup_modalfilter_p6
1967
1970!OCL SERIAL
1971 subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p6( this, &
1972 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
1973 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
1976 implicit none
1977 class(elementoperationtensorprod3d_p6), intent(inout) :: this
1978 real(rp), intent(in) :: mf_etac_h
1979 real(rp), intent(in) :: mf_alpha_h
1980 integer, intent(in) :: mf_order_h
1981 real(rp), intent(in) :: mf_etac_v
1982 real(rp), intent(in) :: mf_alpha_v
1983 integer, intent(in) :: mf_order_v
1984 !--------------------------------------------------------
1985
1986 call setup_modalfilter( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, &
1987 mf_etac_h, mf_alpha_h, mf_order_h, &
1988 mf_etac_v, mf_alpha_v, mf_order_v, &
1989 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
1990
1991 return
1992 end subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p6
1993
1996!OCL SERIAL
1997 subroutine element_operation_tensorprod3d_final_p6( this )
1998 implicit none
1999 class(elementoperationtensorprod3d_p6), intent(inout) :: this
2000 !----------------------------------------------------------
2001 nullify( this%elem3D )
2002 return
2003 end subroutine element_operation_tensorprod3d_final_p6
2004
2007!OCL SERIAL
2008 subroutine element_operation_tensorprod3d_dx_p6( this, vec_in, vec_out )
2010 implicit none
2011 class(elementoperationtensorprod3d_p6), intent(in) :: this
2012 real(rp), intent(in) :: vec_in(this%elem3d%np)
2013 real(rp), intent(out) :: vec_out(this%elem3d%np)
2014 !----------------------------------------------------------
2015 call element_operation_kernel_matvec_dirx_p6( this%D1D, vec_in, vec_out )
2016 return
2017 end subroutine element_operation_tensorprod3d_dx_p6
2018
2021!OCL SERIAL
2022 subroutine element_operation_tensorprod3d_dy_p6( this, vec_in, vec_out )
2024 implicit none
2025 class(elementoperationtensorprod3d_p6), intent(in) :: this
2026 real(rp), intent(in) :: vec_in(this%elem3d%np)
2027 real(rp), intent(out) :: vec_out(this%elem3d%np)
2028 !----------------------------------------------------------
2029 call element_operation_kernel_matvec_diry_p6( this%D1D_tr, vec_in, vec_out )
2030 return
2031 end subroutine element_operation_tensorprod3d_dy_p6
2032
2035!OCL SERIAL
2036 subroutine element_operation_tensorprod3d_dz_p6( this, vec_in, vec_out )
2038 implicit none
2039 class(elementoperationtensorprod3d_p6), intent(in) :: this
2040 real(rp), intent(in) :: vec_in(this%elem3d%np)
2041 real(rp), intent(out) :: vec_out(this%elem3d%np)
2042 !----------------------------------------------------------
2043 call element_operation_kernel_matvec_dirz_p6( this%D1D_tr, vec_in, vec_out )
2044 return
2045 end subroutine element_operation_tensorprod3d_dz_p6
2046
2049!OCL SERIAL
2050 subroutine element_operation_tensorprod3d_lift_p6( this, vec_in, vec_out )
2052 implicit none
2053 class(elementoperationtensorprod3d_p6), intent(in) :: this
2054 real(rp), intent(in) :: vec_in(this%elem3d%nfptot)
2055 real(rp), intent(out) :: vec_out(this%elem3d%np)
2056 !----------------------------------------------------------
2057 call element_operation_kernel_matvec_lift_hexahedral_p6( this%Lift_mat, vec_in, vec_out )
2058 return
2059 end subroutine element_operation_tensorprod3d_lift_p6
2060
2063!OCL SERIAL
2064 subroutine element_operation_tensorprod3d_dxdydzlift_p6( this, vec_in, vec_in_lift, vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
2068 implicit none
2069 class(elementoperationtensorprod3d_p6), intent(in) :: this
2070 real(rp), intent(in) :: vec_in(this%elem3d%np)
2071 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
2072 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
2073 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
2074 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
2075 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
2076 !----------------------------------------------------------
2077 call element_operation_kernel_matvec_gradlike_dirxyz_p6( this%D1D, this%D1D_tr, vec_in, vec_in, &
2078 vec_out_dx, vec_out_dy, vec_out_dz )
2079 call element_operation_kernel_matvec_lift_hexahedral_p6( this%Lift_mat, vec_in_lift, &
2080 vec_out_lift )
2081
2082 return
2083 end subroutine element_operation_tensorprod3d_dxdydzlift_p6
2084
2087!OCL SERIAL
2088 subroutine element_operation_tensorprod3d_div_p6( this, vec_in_x, vec_in_y, vec_in_z, vec_in_lift, &
2089 vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
2093 implicit none
2094 class(elementoperationtensorprod3d_p6), intent(in) :: this
2095 real(rp), intent(in) :: vec_in_x(this%elem3d%np)
2096 real(rp), intent(in) :: vec_in_y(this%elem3d%np)
2097 real(rp), intent(in) :: vec_in_z(this%elem3d%np)
2098 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
2099 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
2100 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
2101 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
2102 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
2103 !----------------------------------------------------------
2104
2105 call element_operation_kernel_matvec_lift_hexahedral_p6( this%Lift_mat, vec_in_lift, &
2106 vec_out_lift )
2107
2108 call element_operation_kernel_matvec_divlike_dirxyz_p6( this%D1D, this%D1D_tr, vec_in_x, vec_in_y, vec_in_z, &
2109 vec_out_dx, vec_out_dy, vec_out_dz )
2110 return
2111 end subroutine element_operation_tensorprod3d_div_p6
2112
2115!OCL SERIAL
2116 subroutine element_operation_tensorprod3d_div_var5_p6( this, vec_in, vec_in_lift, &
2117 vec_out_d )
2121 implicit none
2122 class(elementoperationtensorprod3d_p6), intent(in) :: this
2123 real(rp), intent(in) :: vec_in(this%elem3d%np,3,5)
2124 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot,5)
2125 real(rp), intent(out) :: vec_out_d(this%elem3d%np,4,5)
2126
2127 integer :: iv
2128 !----------------------------------------------------------
2129
2130 do iv=1, 5
2131 call element_operation_kernel_matvec_lift_hexahedral_p6( this%Lift_mat, vec_in_lift(:,iv), &
2132 vec_out_d(:,4,iv) )
2133 end do
2134 do iv=1, 5
2135 call element_operation_kernel_matvec_divlike_dirxyz_p6( this%D1D, this%D1D_tr, vec_in(:,1,iv), vec_in(:,2,iv), vec_in(:,3,iv), &
2136 vec_out_d(:,1,iv), vec_out_d(:,2,iv), vec_out_d(:,3,iv) )
2137 end do
2138 return
2139 end subroutine element_operation_tensorprod3d_div_var5_p6
2140
2141!OCL SERIAL
2142 subroutine element_operation_tensorprod3d_vfilterpm1_p6( this, vec_in, vec_out )
2144 implicit none
2145 class(elementoperationtensorprod3d_p6), intent(in) :: this
2146 real(rp), intent(in) :: vec_in(this%elem3d%np)
2147 real(rp), intent(out) :: vec_out(this%elem3d%np)
2148 !---------------------------------------------------------------
2149
2150 call element_operation_kernel_matvec_dirz_p6( this%IntrpMat_VPOrdM1_tr, vec_in, &
2151 vec_out )
2152 return
2153 end subroutine element_operation_tensorprod3d_vfilterpm1_p6
2154
2155 !OCL SERIAL
2156 subroutine element_operation_tensorprod3d_modalfilter_tracer_p6( this, vec_in, vec_work, vec_out )
2159
2160 implicit none
2161 class(elementoperationtensorprod3d_p6), intent(in) :: this
2162 real(rp), intent(in) :: vec_in(this%elem3d%np)
2163 real(rp), intent(out) :: vec_work(this%elem3d%np)
2164 real(rp), intent(out) :: vec_out(this%elem3d%np)
2165 !---------------------------------------------
2166
2167 call element_operation_kernel_matvec_modalfilter_p6( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, vec_in(:), vec_work, &
2168 vec_out(:) )
2169
2170 return
2171 end subroutine element_operation_tensorprod3d_modalfilter_tracer_p6
2172
2173!OCL SERIAL
2174 subroutine element_operation_tensorprod3d_modalfilter_var5_p6( this, vec_in, vec_work, vec_out )
2177
2178 implicit none
2179 class(elementoperationtensorprod3d_p6), intent(in) :: this
2180 real(rp), intent(in) :: vec_in(this%elem3d%np,5)
2181 real(rp), intent(out) :: vec_work(this%elem3d%np)
2182 real(rp), intent(out) :: vec_out(this%elem3d%np,5)
2183 integer :: iv
2184 !---------------------------------------------
2185
2186 do iv=1, 5
2187 call element_operation_kernel_matvec_modalfilter_p6( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, vec_in(:,iv), vec_work, &
2188 vec_out(:,iv) )
2189 end do
2190
2191 return
2192 end subroutine element_operation_tensorprod3d_modalfilter_var5_p6
2193
2194
2195!--- For p=7 ------------------------------------
2196
2199!OCL SERIAL
2200 subroutine element_operation_tensorprod3d_init_p7( this, elem3D )
2201 implicit none
2202 class(elementoperationtensorprod3d_p7), intent(inout) :: this
2203 class(elementbase3d), intent(in), target :: elem3d
2204 !----------------------------------------------------------
2205
2206 this%elem3D => elem3d
2207
2208 call setup_elem_operator( this%D1D, this%D1D_tr, this%Lift_mat, this%IntrpMat_VPOrdM1_tr, &
2209 8, elem3d )
2210 return
2211 end subroutine element_operation_tensorprod3d_init_p7
2212
2215!OCL SERIAL
2216 subroutine element_operation_tensorprod3d_setup_modalfilter_p7( this, &
2217 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
2218 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
2221 implicit none
2222 class(elementoperationtensorprod3d_p7), intent(inout) :: this
2223 real(rp), intent(in) :: mf_etac_h
2224 real(rp), intent(in) :: mf_alpha_h
2225 integer, intent(in) :: mf_order_h
2226 real(rp), intent(in) :: mf_etac_v
2227 real(rp), intent(in) :: mf_alpha_v
2228 integer, intent(in) :: mf_order_v
2229 !--------------------------------------------------------
2230
2231 call setup_modalfilter( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, &
2232 mf_etac_h, mf_alpha_h, mf_order_h, &
2233 mf_etac_v, mf_alpha_v, mf_order_v, &
2234 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
2235
2236 return
2237 end subroutine element_operation_tensorprod3d_setup_modalfilter_p7
2238
2241!OCL SERIAL
2242 subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p7( this, &
2243 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
2244 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
2247 implicit none
2248 class(elementoperationtensorprod3d_p7), intent(inout) :: this
2249 real(rp), intent(in) :: mf_etac_h
2250 real(rp), intent(in) :: mf_alpha_h
2251 integer, intent(in) :: mf_order_h
2252 real(rp), intent(in) :: mf_etac_v
2253 real(rp), intent(in) :: mf_alpha_v
2254 integer, intent(in) :: mf_order_v
2255 !--------------------------------------------------------
2256
2257 call setup_modalfilter( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, &
2258 mf_etac_h, mf_alpha_h, mf_order_h, &
2259 mf_etac_v, mf_alpha_v, mf_order_v, &
2260 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
2261
2262 return
2263 end subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p7
2264
2267!OCL SERIAL
2268 subroutine element_operation_tensorprod3d_final_p7( this )
2269 implicit none
2270 class(elementoperationtensorprod3d_p7), intent(inout) :: this
2271 !----------------------------------------------------------
2272 nullify( this%elem3D )
2273 return
2274 end subroutine element_operation_tensorprod3d_final_p7
2275
2278!OCL SERIAL
2279 subroutine element_operation_tensorprod3d_dx_p7( this, vec_in, vec_out )
2281 implicit none
2282 class(elementoperationtensorprod3d_p7), intent(in) :: this
2283 real(rp), intent(in) :: vec_in(this%elem3d%np)
2284 real(rp), intent(out) :: vec_out(this%elem3d%np)
2285 !----------------------------------------------------------
2286 call element_operation_kernel_matvec_dirx_p7( this%D1D, vec_in, vec_out )
2287 return
2288 end subroutine element_operation_tensorprod3d_dx_p7
2289
2292!OCL SERIAL
2293 subroutine element_operation_tensorprod3d_dy_p7( this, vec_in, vec_out )
2295 implicit none
2296 class(elementoperationtensorprod3d_p7), intent(in) :: this
2297 real(rp), intent(in) :: vec_in(this%elem3d%np)
2298 real(rp), intent(out) :: vec_out(this%elem3d%np)
2299 !----------------------------------------------------------
2300 call element_operation_kernel_matvec_diry_p7( this%D1D_tr, vec_in, vec_out )
2301 return
2302 end subroutine element_operation_tensorprod3d_dy_p7
2303
2306!OCL SERIAL
2307 subroutine element_operation_tensorprod3d_dz_p7( this, vec_in, vec_out )
2309 implicit none
2310 class(elementoperationtensorprod3d_p7), intent(in) :: this
2311 real(rp), intent(in) :: vec_in(this%elem3d%np)
2312 real(rp), intent(out) :: vec_out(this%elem3d%np)
2313 !----------------------------------------------------------
2314 call element_operation_kernel_matvec_dirz_p7( this%D1D_tr, vec_in, vec_out )
2315 return
2316 end subroutine element_operation_tensorprod3d_dz_p7
2317
2320!OCL SERIAL
2321 subroutine element_operation_tensorprod3d_lift_p7( this, vec_in, vec_out )
2323 implicit none
2324 class(elementoperationtensorprod3d_p7), intent(in) :: this
2325 real(rp), intent(in) :: vec_in(this%elem3d%nfptot)
2326 real(rp), intent(out) :: vec_out(this%elem3d%np)
2327 !----------------------------------------------------------
2328 call element_operation_kernel_matvec_lift_hexahedral_p7( this%Lift_mat, vec_in, vec_out )
2329 return
2330 end subroutine element_operation_tensorprod3d_lift_p7
2331
2334!OCL SERIAL
2335 subroutine element_operation_tensorprod3d_dxdydzlift_p7( this, vec_in, vec_in_lift, vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
2339 implicit none
2340 class(elementoperationtensorprod3d_p7), intent(in) :: this
2341 real(rp), intent(in) :: vec_in(this%elem3d%np)
2342 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
2343 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
2344 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
2345 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
2346 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
2347 !----------------------------------------------------------
2348 call element_operation_kernel_matvec_gradlike_dirxyz_p7( this%D1D, this%D1D_tr, vec_in, vec_in, &
2349 vec_out_dx, vec_out_dy, vec_out_dz )
2350 call element_operation_kernel_matvec_lift_hexahedral_p7( this%Lift_mat, vec_in_lift, &
2351 vec_out_lift )
2352
2353 return
2354 end subroutine element_operation_tensorprod3d_dxdydzlift_p7
2355
2358!OCL SERIAL
2359 subroutine element_operation_tensorprod3d_div_p7( this, vec_in_x, vec_in_y, vec_in_z, vec_in_lift, &
2360 vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
2364 implicit none
2365 class(elementoperationtensorprod3d_p7), intent(in) :: this
2366 real(rp), intent(in) :: vec_in_x(this%elem3d%np)
2367 real(rp), intent(in) :: vec_in_y(this%elem3d%np)
2368 real(rp), intent(in) :: vec_in_z(this%elem3d%np)
2369 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
2370 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
2371 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
2372 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
2373 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
2374 !----------------------------------------------------------
2375
2376 call element_operation_kernel_matvec_lift_hexahedral_p7( this%Lift_mat, vec_in_lift, &
2377 vec_out_lift )
2378
2379 call element_operation_kernel_matvec_divlike_dirxyz_p7( this%D1D, this%D1D_tr, vec_in_x, vec_in_y, vec_in_z, &
2380 vec_out_dx, vec_out_dy, vec_out_dz )
2381 return
2382 end subroutine element_operation_tensorprod3d_div_p7
2383
2386!OCL SERIAL
2387 subroutine element_operation_tensorprod3d_div_var5_p7( this, vec_in, vec_in_lift, &
2388 vec_out_d )
2392 implicit none
2393 class(elementoperationtensorprod3d_p7), intent(in) :: this
2394 real(rp), intent(in) :: vec_in(this%elem3d%np,3,5)
2395 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot,5)
2396 real(rp), intent(out) :: vec_out_d(this%elem3d%np,4,5)
2397
2398 integer :: iv
2399 !----------------------------------------------------------
2400
2401 do iv=1, 5
2402 call element_operation_kernel_matvec_lift_hexahedral_p7( this%Lift_mat, vec_in_lift(:,iv), &
2403 vec_out_d(:,4,iv) )
2404 end do
2405 do iv=1, 5
2406 call element_operation_kernel_matvec_divlike_dirxyz_p7( this%D1D, this%D1D_tr, vec_in(:,1,iv), vec_in(:,2,iv), vec_in(:,3,iv), &
2407 vec_out_d(:,1,iv), vec_out_d(:,2,iv), vec_out_d(:,3,iv) )
2408 end do
2409 return
2410 end subroutine element_operation_tensorprod3d_div_var5_p7
2411
2412!OCL SERIAL
2413 subroutine element_operation_tensorprod3d_vfilterpm1_p7( this, vec_in, vec_out )
2415 implicit none
2416 class(elementoperationtensorprod3d_p7), intent(in) :: this
2417 real(rp), intent(in) :: vec_in(this%elem3d%np)
2418 real(rp), intent(out) :: vec_out(this%elem3d%np)
2419 !---------------------------------------------------------------
2420
2421 call element_operation_kernel_matvec_dirz_p7( this%IntrpMat_VPOrdM1_tr, vec_in, &
2422 vec_out )
2423 return
2424 end subroutine element_operation_tensorprod3d_vfilterpm1_p7
2425
2426 !OCL SERIAL
2427 subroutine element_operation_tensorprod3d_modalfilter_tracer_p7( this, vec_in, vec_work, vec_out )
2430
2431 implicit none
2432 class(elementoperationtensorprod3d_p7), intent(in) :: this
2433 real(rp), intent(in) :: vec_in(this%elem3d%np)
2434 real(rp), intent(out) :: vec_work(this%elem3d%np)
2435 real(rp), intent(out) :: vec_out(this%elem3d%np)
2436 !---------------------------------------------
2437
2438 call element_operation_kernel_matvec_modalfilter_p7( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, vec_in(:), vec_work, &
2439 vec_out(:) )
2440
2441 return
2442 end subroutine element_operation_tensorprod3d_modalfilter_tracer_p7
2443
2444!OCL SERIAL
2445 subroutine element_operation_tensorprod3d_modalfilter_var5_p7( this, vec_in, vec_work, vec_out )
2448
2449 implicit none
2450 class(elementoperationtensorprod3d_p7), intent(in) :: this
2451 real(rp), intent(in) :: vec_in(this%elem3d%np,5)
2452 real(rp), intent(out) :: vec_work(this%elem3d%np)
2453 real(rp), intent(out) :: vec_out(this%elem3d%np,5)
2454 integer :: iv
2455 !---------------------------------------------
2456
2457 do iv=1, 5
2458 call element_operation_kernel_matvec_modalfilter_p7( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, vec_in(:,iv), vec_work, &
2459 vec_out(:,iv) )
2460 end do
2461
2462 return
2463 end subroutine element_operation_tensorprod3d_modalfilter_var5_p7
2464
2465
2466!--- For p=8 ------------------------------------
2467
2470!OCL SERIAL
2471 subroutine element_operation_tensorprod3d_init_p8( this, elem3D )
2472 implicit none
2473 class(elementoperationtensorprod3d_p8), intent(inout) :: this
2474 class(elementbase3d), intent(in), target :: elem3d
2475 !----------------------------------------------------------
2476
2477 this%elem3D => elem3d
2478
2479 call setup_elem_operator( this%D1D, this%D1D_tr, this%Lift_mat, this%IntrpMat_VPOrdM1_tr, &
2480 9, elem3d )
2481 return
2482 end subroutine element_operation_tensorprod3d_init_p8
2483
2486!OCL SERIAL
2487 subroutine element_operation_tensorprod3d_setup_modalfilter_p8( this, &
2488 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
2489 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
2492 implicit none
2493 class(elementoperationtensorprod3d_p8), intent(inout) :: this
2494 real(rp), intent(in) :: mf_etac_h
2495 real(rp), intent(in) :: mf_alpha_h
2496 integer, intent(in) :: mf_order_h
2497 real(rp), intent(in) :: mf_etac_v
2498 real(rp), intent(in) :: mf_alpha_v
2499 integer, intent(in) :: mf_order_v
2500 !--------------------------------------------------------
2501
2502 call setup_modalfilter( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, &
2503 mf_etac_h, mf_alpha_h, mf_order_h, &
2504 mf_etac_v, mf_alpha_v, mf_order_v, &
2505 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
2506
2507 return
2508 end subroutine element_operation_tensorprod3d_setup_modalfilter_p8
2509
2512!OCL SERIAL
2513 subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p8( this, &
2514 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
2515 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
2518 implicit none
2519 class(elementoperationtensorprod3d_p8), intent(inout) :: this
2520 real(rp), intent(in) :: mf_etac_h
2521 real(rp), intent(in) :: mf_alpha_h
2522 integer, intent(in) :: mf_order_h
2523 real(rp), intent(in) :: mf_etac_v
2524 real(rp), intent(in) :: mf_alpha_v
2525 integer, intent(in) :: mf_order_v
2526 !--------------------------------------------------------
2527
2528 call setup_modalfilter( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, &
2529 mf_etac_h, mf_alpha_h, mf_order_h, &
2530 mf_etac_v, mf_alpha_v, mf_order_v, &
2531 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
2532
2533 return
2534 end subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p8
2535
2538!OCL SERIAL
2539 subroutine element_operation_tensorprod3d_final_p8( this )
2540 implicit none
2541 class(elementoperationtensorprod3d_p8), intent(inout) :: this
2542 !----------------------------------------------------------
2543 nullify( this%elem3D )
2544 return
2545 end subroutine element_operation_tensorprod3d_final_p8
2546
2549!OCL SERIAL
2550 subroutine element_operation_tensorprod3d_dx_p8( this, vec_in, vec_out )
2552 implicit none
2553 class(elementoperationtensorprod3d_p8), intent(in) :: this
2554 real(rp), intent(in) :: vec_in(this%elem3d%np)
2555 real(rp), intent(out) :: vec_out(this%elem3d%np)
2556 !----------------------------------------------------------
2557 call element_operation_kernel_matvec_dirx_p8( this%D1D, vec_in, vec_out )
2558 return
2559 end subroutine element_operation_tensorprod3d_dx_p8
2560
2563!OCL SERIAL
2564 subroutine element_operation_tensorprod3d_dy_p8( this, vec_in, vec_out )
2566 implicit none
2567 class(elementoperationtensorprod3d_p8), intent(in) :: this
2568 real(rp), intent(in) :: vec_in(this%elem3d%np)
2569 real(rp), intent(out) :: vec_out(this%elem3d%np)
2570 !----------------------------------------------------------
2571 call element_operation_kernel_matvec_diry_p8( this%D1D_tr, vec_in, vec_out )
2572 return
2573 end subroutine element_operation_tensorprod3d_dy_p8
2574
2577!OCL SERIAL
2578 subroutine element_operation_tensorprod3d_dz_p8( this, vec_in, vec_out )
2580 implicit none
2581 class(elementoperationtensorprod3d_p8), intent(in) :: this
2582 real(rp), intent(in) :: vec_in(this%elem3d%np)
2583 real(rp), intent(out) :: vec_out(this%elem3d%np)
2584 !----------------------------------------------------------
2585 call element_operation_kernel_matvec_dirz_p8( this%D1D_tr, vec_in, vec_out )
2586 return
2587 end subroutine element_operation_tensorprod3d_dz_p8
2588
2591!OCL SERIAL
2592 subroutine element_operation_tensorprod3d_lift_p8( this, vec_in, vec_out )
2594 implicit none
2595 class(elementoperationtensorprod3d_p8), intent(in) :: this
2596 real(rp), intent(in) :: vec_in(this%elem3d%nfptot)
2597 real(rp), intent(out) :: vec_out(this%elem3d%np)
2598 !----------------------------------------------------------
2599 call element_operation_kernel_matvec_lift_hexahedral_p8( this%Lift_mat, vec_in, vec_out )
2600 return
2601 end subroutine element_operation_tensorprod3d_lift_p8
2602
2605!OCL SERIAL
2606 subroutine element_operation_tensorprod3d_dxdydzlift_p8( this, vec_in, vec_in_lift, vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
2610 implicit none
2611 class(elementoperationtensorprod3d_p8), intent(in) :: this
2612 real(rp), intent(in) :: vec_in(this%elem3d%np)
2613 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
2614 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
2615 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
2616 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
2617 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
2618 !----------------------------------------------------------
2619 call element_operation_kernel_matvec_gradlike_dirxyz_p8( this%D1D, this%D1D_tr, vec_in, vec_in, &
2620 vec_out_dx, vec_out_dy, vec_out_dz )
2621 call element_operation_kernel_matvec_lift_hexahedral_p8( this%Lift_mat, vec_in_lift, &
2622 vec_out_lift )
2623
2624 return
2625 end subroutine element_operation_tensorprod3d_dxdydzlift_p8
2626
2629!OCL SERIAL
2630 subroutine element_operation_tensorprod3d_div_p8( this, vec_in_x, vec_in_y, vec_in_z, vec_in_lift, &
2631 vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
2635 implicit none
2636 class(elementoperationtensorprod3d_p8), intent(in) :: this
2637 real(rp), intent(in) :: vec_in_x(this%elem3d%np)
2638 real(rp), intent(in) :: vec_in_y(this%elem3d%np)
2639 real(rp), intent(in) :: vec_in_z(this%elem3d%np)
2640 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
2641 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
2642 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
2643 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
2644 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
2645 !----------------------------------------------------------
2646
2647 call element_operation_kernel_matvec_lift_hexahedral_p8( this%Lift_mat, vec_in_lift, &
2648 vec_out_lift )
2649
2650 call element_operation_kernel_matvec_divlike_dirxyz_p8( this%D1D, this%D1D_tr, vec_in_x, vec_in_y, vec_in_z, &
2651 vec_out_dx, vec_out_dy, vec_out_dz )
2652 return
2653 end subroutine element_operation_tensorprod3d_div_p8
2654
2657!OCL SERIAL
2658 subroutine element_operation_tensorprod3d_div_var5_p8( this, vec_in, vec_in_lift, &
2659 vec_out_d )
2663 implicit none
2664 class(elementoperationtensorprod3d_p8), intent(in) :: this
2665 real(rp), intent(in) :: vec_in(this%elem3d%np,3,5)
2666 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot,5)
2667 real(rp), intent(out) :: vec_out_d(this%elem3d%np,4,5)
2668
2669 integer :: iv
2670 !----------------------------------------------------------
2671
2672 do iv=1, 5
2673 call element_operation_kernel_matvec_lift_hexahedral_p8( this%Lift_mat, vec_in_lift(:,iv), &
2674 vec_out_d(:,4,iv) )
2675 end do
2676 do iv=1, 5
2677 call element_operation_kernel_matvec_divlike_dirxyz_p8( this%D1D, this%D1D_tr, vec_in(:,1,iv), vec_in(:,2,iv), vec_in(:,3,iv), &
2678 vec_out_d(:,1,iv), vec_out_d(:,2,iv), vec_out_d(:,3,iv) )
2679 end do
2680 return
2681 end subroutine element_operation_tensorprod3d_div_var5_p8
2682
2683!OCL SERIAL
2684 subroutine element_operation_tensorprod3d_vfilterpm1_p8( this, vec_in, vec_out )
2686 implicit none
2687 class(elementoperationtensorprod3d_p8), intent(in) :: this
2688 real(rp), intent(in) :: vec_in(this%elem3d%np)
2689 real(rp), intent(out) :: vec_out(this%elem3d%np)
2690 !---------------------------------------------------------------
2691
2692 call element_operation_kernel_matvec_dirz_p8( this%IntrpMat_VPOrdM1_tr, vec_in, &
2693 vec_out )
2694 return
2695 end subroutine element_operation_tensorprod3d_vfilterpm1_p8
2696
2697 !OCL SERIAL
2698 subroutine element_operation_tensorprod3d_modalfilter_tracer_p8( this, vec_in, vec_work, vec_out )
2701
2702 implicit none
2703 class(elementoperationtensorprod3d_p8), intent(in) :: this
2704 real(rp), intent(in) :: vec_in(this%elem3d%np)
2705 real(rp), intent(out) :: vec_work(this%elem3d%np)
2706 real(rp), intent(out) :: vec_out(this%elem3d%np)
2707 !---------------------------------------------
2708
2709 call element_operation_kernel_matvec_modalfilter_p8( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, vec_in(:), vec_work, &
2710 vec_out(:) )
2711
2712 return
2713 end subroutine element_operation_tensorprod3d_modalfilter_tracer_p8
2714
2715!OCL SERIAL
2716 subroutine element_operation_tensorprod3d_modalfilter_var5_p8( this, vec_in, vec_work, vec_out )
2719
2720 implicit none
2721 class(elementoperationtensorprod3d_p8), intent(in) :: this
2722 real(rp), intent(in) :: vec_in(this%elem3d%np,5)
2723 real(rp), intent(out) :: vec_work(this%elem3d%np)
2724 real(rp), intent(out) :: vec_out(this%elem3d%np,5)
2725 integer :: iv
2726 !---------------------------------------------
2727
2728 do iv=1, 5
2729 call element_operation_kernel_matvec_modalfilter_p8( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, vec_in(:,iv), vec_work, &
2730 vec_out(:,iv) )
2731 end do
2732
2733 return
2734 end subroutine element_operation_tensorprod3d_modalfilter_var5_p8
2735
2736
2737!--- For p=9 ------------------------------------
2738
2741!OCL SERIAL
2742 subroutine element_operation_tensorprod3d_init_p9( this, elem3D )
2743 implicit none
2744 class(elementoperationtensorprod3d_p9), intent(inout) :: this
2745 class(elementbase3d), intent(in), target :: elem3d
2746 !----------------------------------------------------------
2747
2748 this%elem3D => elem3d
2749
2750 call setup_elem_operator( this%D1D, this%D1D_tr, this%Lift_mat, this%IntrpMat_VPOrdM1_tr, &
2751 10, elem3d )
2752 return
2753 end subroutine element_operation_tensorprod3d_init_p9
2754
2757!OCL SERIAL
2758 subroutine element_operation_tensorprod3d_setup_modalfilter_p9( this, &
2759 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
2760 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
2763 implicit none
2764 class(elementoperationtensorprod3d_p9), intent(inout) :: this
2765 real(rp), intent(in) :: mf_etac_h
2766 real(rp), intent(in) :: mf_alpha_h
2767 integer, intent(in) :: mf_order_h
2768 real(rp), intent(in) :: mf_etac_v
2769 real(rp), intent(in) :: mf_alpha_v
2770 integer, intent(in) :: mf_order_v
2771 !--------------------------------------------------------
2772
2773 call setup_modalfilter( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, &
2774 mf_etac_h, mf_alpha_h, mf_order_h, &
2775 mf_etac_v, mf_alpha_v, mf_order_v, &
2776 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
2777
2778 return
2779 end subroutine element_operation_tensorprod3d_setup_modalfilter_p9
2780
2783!OCL SERIAL
2784 subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p9( this, &
2785 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
2786 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
2789 implicit none
2790 class(elementoperationtensorprod3d_p9), intent(inout) :: this
2791 real(rp), intent(in) :: mf_etac_h
2792 real(rp), intent(in) :: mf_alpha_h
2793 integer, intent(in) :: mf_order_h
2794 real(rp), intent(in) :: mf_etac_v
2795 real(rp), intent(in) :: mf_alpha_v
2796 integer, intent(in) :: mf_order_v
2797 !--------------------------------------------------------
2798
2799 call setup_modalfilter( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, &
2800 mf_etac_h, mf_alpha_h, mf_order_h, &
2801 mf_etac_v, mf_alpha_v, mf_order_v, &
2802 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
2803
2804 return
2805 end subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p9
2806
2809!OCL SERIAL
2810 subroutine element_operation_tensorprod3d_final_p9( this )
2811 implicit none
2812 class(elementoperationtensorprod3d_p9), intent(inout) :: this
2813 !----------------------------------------------------------
2814 nullify( this%elem3D )
2815 return
2816 end subroutine element_operation_tensorprod3d_final_p9
2817
2820!OCL SERIAL
2821 subroutine element_operation_tensorprod3d_dx_p9( this, vec_in, vec_out )
2823 implicit none
2824 class(elementoperationtensorprod3d_p9), intent(in) :: this
2825 real(rp), intent(in) :: vec_in(this%elem3d%np)
2826 real(rp), intent(out) :: vec_out(this%elem3d%np)
2827 !----------------------------------------------------------
2828 call element_operation_kernel_matvec_dirx_p9( this%D1D, vec_in, vec_out )
2829 return
2830 end subroutine element_operation_tensorprod3d_dx_p9
2831
2834!OCL SERIAL
2835 subroutine element_operation_tensorprod3d_dy_p9( this, vec_in, vec_out )
2837 implicit none
2838 class(elementoperationtensorprod3d_p9), intent(in) :: this
2839 real(rp), intent(in) :: vec_in(this%elem3d%np)
2840 real(rp), intent(out) :: vec_out(this%elem3d%np)
2841 !----------------------------------------------------------
2842 call element_operation_kernel_matvec_diry_p9( this%D1D_tr, vec_in, vec_out )
2843 return
2844 end subroutine element_operation_tensorprod3d_dy_p9
2845
2848!OCL SERIAL
2849 subroutine element_operation_tensorprod3d_dz_p9( this, vec_in, vec_out )
2851 implicit none
2852 class(elementoperationtensorprod3d_p9), intent(in) :: this
2853 real(rp), intent(in) :: vec_in(this%elem3d%np)
2854 real(rp), intent(out) :: vec_out(this%elem3d%np)
2855 !----------------------------------------------------------
2856 call element_operation_kernel_matvec_dirz_p9( this%D1D_tr, vec_in, vec_out )
2857 return
2858 end subroutine element_operation_tensorprod3d_dz_p9
2859
2862!OCL SERIAL
2863 subroutine element_operation_tensorprod3d_lift_p9( this, vec_in, vec_out )
2865 implicit none
2866 class(elementoperationtensorprod3d_p9), intent(in) :: this
2867 real(rp), intent(in) :: vec_in(this%elem3d%nfptot)
2868 real(rp), intent(out) :: vec_out(this%elem3d%np)
2869 !----------------------------------------------------------
2870 call element_operation_kernel_matvec_lift_hexahedral_p9( this%Lift_mat, vec_in, vec_out )
2871 return
2872 end subroutine element_operation_tensorprod3d_lift_p9
2873
2876!OCL SERIAL
2877 subroutine element_operation_tensorprod3d_dxdydzlift_p9( this, vec_in, vec_in_lift, vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
2881 implicit none
2882 class(elementoperationtensorprod3d_p9), intent(in) :: this
2883 real(rp), intent(in) :: vec_in(this%elem3d%np)
2884 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
2885 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
2886 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
2887 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
2888 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
2889 !----------------------------------------------------------
2890 call element_operation_kernel_matvec_gradlike_dirxyz_p9( this%D1D, this%D1D_tr, vec_in, vec_in, &
2891 vec_out_dx, vec_out_dy, vec_out_dz )
2892 call element_operation_kernel_matvec_lift_hexahedral_p9( this%Lift_mat, vec_in_lift, &
2893 vec_out_lift )
2894
2895 return
2896 end subroutine element_operation_tensorprod3d_dxdydzlift_p9
2897
2900!OCL SERIAL
2901 subroutine element_operation_tensorprod3d_div_p9( this, vec_in_x, vec_in_y, vec_in_z, vec_in_lift, &
2902 vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
2906 implicit none
2907 class(elementoperationtensorprod3d_p9), intent(in) :: this
2908 real(rp), intent(in) :: vec_in_x(this%elem3d%np)
2909 real(rp), intent(in) :: vec_in_y(this%elem3d%np)
2910 real(rp), intent(in) :: vec_in_z(this%elem3d%np)
2911 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
2912 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
2913 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
2914 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
2915 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
2916 !----------------------------------------------------------
2917
2918 call element_operation_kernel_matvec_lift_hexahedral_p9( this%Lift_mat, vec_in_lift, &
2919 vec_out_lift )
2920
2921 call element_operation_kernel_matvec_divlike_dirxyz_p9( this%D1D, this%D1D_tr, vec_in_x, vec_in_y, vec_in_z, &
2922 vec_out_dx, vec_out_dy, vec_out_dz )
2923 return
2924 end subroutine element_operation_tensorprod3d_div_p9
2925
2928!OCL SERIAL
2929 subroutine element_operation_tensorprod3d_div_var5_p9( this, vec_in, vec_in_lift, &
2930 vec_out_d )
2934 implicit none
2935 class(elementoperationtensorprod3d_p9), intent(in) :: this
2936 real(rp), intent(in) :: vec_in(this%elem3d%np,3,5)
2937 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot,5)
2938 real(rp), intent(out) :: vec_out_d(this%elem3d%np,4,5)
2939
2940 integer :: iv
2941 !----------------------------------------------------------
2942
2943 do iv=1, 5
2944 call element_operation_kernel_matvec_lift_hexahedral_p9( this%Lift_mat, vec_in_lift(:,iv), &
2945 vec_out_d(:,4,iv) )
2946 end do
2947 do iv=1, 5
2948 call element_operation_kernel_matvec_divlike_dirxyz_p9( this%D1D, this%D1D_tr, vec_in(:,1,iv), vec_in(:,2,iv), vec_in(:,3,iv), &
2949 vec_out_d(:,1,iv), vec_out_d(:,2,iv), vec_out_d(:,3,iv) )
2950 end do
2951 return
2952 end subroutine element_operation_tensorprod3d_div_var5_p9
2953
2954!OCL SERIAL
2955 subroutine element_operation_tensorprod3d_vfilterpm1_p9( this, vec_in, vec_out )
2957 implicit none
2958 class(elementoperationtensorprod3d_p9), intent(in) :: this
2959 real(rp), intent(in) :: vec_in(this%elem3d%np)
2960 real(rp), intent(out) :: vec_out(this%elem3d%np)
2961 !---------------------------------------------------------------
2962
2963 call element_operation_kernel_matvec_dirz_p9( this%IntrpMat_VPOrdM1_tr, vec_in, &
2964 vec_out )
2965 return
2966 end subroutine element_operation_tensorprod3d_vfilterpm1_p9
2967
2968 !OCL SERIAL
2969 subroutine element_operation_tensorprod3d_modalfilter_tracer_p9( this, vec_in, vec_work, vec_out )
2972
2973 implicit none
2974 class(elementoperationtensorprod3d_p9), intent(in) :: this
2975 real(rp), intent(in) :: vec_in(this%elem3d%np)
2976 real(rp), intent(out) :: vec_work(this%elem3d%np)
2977 real(rp), intent(out) :: vec_out(this%elem3d%np)
2978 !---------------------------------------------
2979
2980 call element_operation_kernel_matvec_modalfilter_p9( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, vec_in(:), vec_work, &
2981 vec_out(:) )
2982
2983 return
2984 end subroutine element_operation_tensorprod3d_modalfilter_tracer_p9
2985
2986!OCL SERIAL
2987 subroutine element_operation_tensorprod3d_modalfilter_var5_p9( this, vec_in, vec_work, vec_out )
2990
2991 implicit none
2992 class(elementoperationtensorprod3d_p9), intent(in) :: this
2993 real(rp), intent(in) :: vec_in(this%elem3d%np,5)
2994 real(rp), intent(out) :: vec_work(this%elem3d%np)
2995 real(rp), intent(out) :: vec_out(this%elem3d%np,5)
2996 integer :: iv
2997 !---------------------------------------------
2998
2999 do iv=1, 5
3000 call element_operation_kernel_matvec_modalfilter_p9( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, vec_in(:,iv), vec_work, &
3001 vec_out(:,iv) )
3002 end do
3003
3004 return
3005 end subroutine element_operation_tensorprod3d_modalfilter_var5_p9
3006
3007
3008!--- For p=10 ------------------------------------
3009
3012!OCL SERIAL
3013 subroutine element_operation_tensorprod3d_init_p10( this, elem3D )
3014 implicit none
3015 class(elementoperationtensorprod3d_p10), intent(inout) :: this
3016 class(elementbase3d), intent(in), target :: elem3d
3017 !----------------------------------------------------------
3018
3019 this%elem3D => elem3d
3020
3021 call setup_elem_operator( this%D1D, this%D1D_tr, this%Lift_mat, this%IntrpMat_VPOrdM1_tr, &
3022 11, elem3d )
3023 return
3024 end subroutine element_operation_tensorprod3d_init_p10
3025
3028!OCL SERIAL
3029 subroutine element_operation_tensorprod3d_setup_modalfilter_p10( this, &
3030 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
3031 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
3034 implicit none
3035 class(elementoperationtensorprod3d_p10), intent(inout) :: this
3036 real(rp), intent(in) :: mf_etac_h
3037 real(rp), intent(in) :: mf_alpha_h
3038 integer, intent(in) :: mf_order_h
3039 real(rp), intent(in) :: mf_etac_v
3040 real(rp), intent(in) :: mf_alpha_v
3041 integer, intent(in) :: mf_order_v
3042 !--------------------------------------------------------
3043
3044 call setup_modalfilter( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, &
3045 mf_etac_h, mf_alpha_h, mf_order_h, &
3046 mf_etac_v, mf_alpha_v, mf_order_v, &
3047 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
3048
3049 return
3050 end subroutine element_operation_tensorprod3d_setup_modalfilter_p10
3051
3054!OCL SERIAL
3055 subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p10( this, &
3056 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
3057 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
3060 implicit none
3061 class(elementoperationtensorprod3d_p10), intent(inout) :: this
3062 real(rp), intent(in) :: mf_etac_h
3063 real(rp), intent(in) :: mf_alpha_h
3064 integer, intent(in) :: mf_order_h
3065 real(rp), intent(in) :: mf_etac_v
3066 real(rp), intent(in) :: mf_alpha_v
3067 integer, intent(in) :: mf_order_v
3068 !--------------------------------------------------------
3069
3070 call setup_modalfilter( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, &
3071 mf_etac_h, mf_alpha_h, mf_order_h, &
3072 mf_etac_v, mf_alpha_v, mf_order_v, &
3073 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
3074
3075 return
3076 end subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p10
3077
3080!OCL SERIAL
3081 subroutine element_operation_tensorprod3d_final_p10( this )
3082 implicit none
3083 class(elementoperationtensorprod3d_p10), intent(inout) :: this
3084 !----------------------------------------------------------
3085 nullify( this%elem3D )
3086 return
3087 end subroutine element_operation_tensorprod3d_final_p10
3088
3091!OCL SERIAL
3092 subroutine element_operation_tensorprod3d_dx_p10( this, vec_in, vec_out )
3094 implicit none
3095 class(elementoperationtensorprod3d_p10), intent(in) :: this
3096 real(rp), intent(in) :: vec_in(this%elem3d%np)
3097 real(rp), intent(out) :: vec_out(this%elem3d%np)
3098 !----------------------------------------------------------
3099 call element_operation_kernel_matvec_dirx_p10( this%D1D, vec_in, vec_out )
3100 return
3101 end subroutine element_operation_tensorprod3d_dx_p10
3102
3105!OCL SERIAL
3106 subroutine element_operation_tensorprod3d_dy_p10( this, vec_in, vec_out )
3108 implicit none
3109 class(elementoperationtensorprod3d_p10), intent(in) :: this
3110 real(rp), intent(in) :: vec_in(this%elem3d%np)
3111 real(rp), intent(out) :: vec_out(this%elem3d%np)
3112 !----------------------------------------------------------
3113 call element_operation_kernel_matvec_diry_p10( this%D1D_tr, vec_in, vec_out )
3114 return
3115 end subroutine element_operation_tensorprod3d_dy_p10
3116
3119!OCL SERIAL
3120 subroutine element_operation_tensorprod3d_dz_p10( this, vec_in, vec_out )
3122 implicit none
3123 class(elementoperationtensorprod3d_p10), intent(in) :: this
3124 real(rp), intent(in) :: vec_in(this%elem3d%np)
3125 real(rp), intent(out) :: vec_out(this%elem3d%np)
3126 !----------------------------------------------------------
3127 call element_operation_kernel_matvec_dirz_p10( this%D1D_tr, vec_in, vec_out )
3128 return
3129 end subroutine element_operation_tensorprod3d_dz_p10
3130
3133!OCL SERIAL
3134 subroutine element_operation_tensorprod3d_lift_p10( this, vec_in, vec_out )
3136 implicit none
3137 class(elementoperationtensorprod3d_p10), intent(in) :: this
3138 real(rp), intent(in) :: vec_in(this%elem3d%nfptot)
3139 real(rp), intent(out) :: vec_out(this%elem3d%np)
3140 !----------------------------------------------------------
3141 call element_operation_kernel_matvec_lift_hexahedral_p10( this%Lift_mat, vec_in, vec_out )
3142 return
3143 end subroutine element_operation_tensorprod3d_lift_p10
3144
3147!OCL SERIAL
3148 subroutine element_operation_tensorprod3d_dxdydzlift_p10( this, vec_in, vec_in_lift, vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
3152 implicit none
3153 class(elementoperationtensorprod3d_p10), intent(in) :: this
3154 real(rp), intent(in) :: vec_in(this%elem3d%np)
3155 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
3156 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
3157 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
3158 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
3159 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
3160 !----------------------------------------------------------
3161 call element_operation_kernel_matvec_gradlike_dirxyz_p10( this%D1D, this%D1D_tr, vec_in, vec_in, &
3162 vec_out_dx, vec_out_dy, vec_out_dz )
3163 call element_operation_kernel_matvec_lift_hexahedral_p10( this%Lift_mat, vec_in_lift, &
3164 vec_out_lift )
3165
3166 return
3167 end subroutine element_operation_tensorprod3d_dxdydzlift_p10
3168
3171!OCL SERIAL
3172 subroutine element_operation_tensorprod3d_div_p10( this, vec_in_x, vec_in_y, vec_in_z, vec_in_lift, &
3173 vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
3177 implicit none
3178 class(elementoperationtensorprod3d_p10), intent(in) :: this
3179 real(rp), intent(in) :: vec_in_x(this%elem3d%np)
3180 real(rp), intent(in) :: vec_in_y(this%elem3d%np)
3181 real(rp), intent(in) :: vec_in_z(this%elem3d%np)
3182 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
3183 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
3184 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
3185 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
3186 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
3187 !----------------------------------------------------------
3188
3189 call element_operation_kernel_matvec_lift_hexahedral_p10( this%Lift_mat, vec_in_lift, &
3190 vec_out_lift )
3191
3192 call element_operation_kernel_matvec_divlike_dirxyz_p10( this%D1D, this%D1D_tr, vec_in_x, vec_in_y, vec_in_z, &
3193 vec_out_dx, vec_out_dy, vec_out_dz )
3194 return
3195 end subroutine element_operation_tensorprod3d_div_p10
3196
3199!OCL SERIAL
3200 subroutine element_operation_tensorprod3d_div_var5_p10( this, vec_in, vec_in_lift, &
3201 vec_out_d )
3205 implicit none
3206 class(elementoperationtensorprod3d_p10), intent(in) :: this
3207 real(rp), intent(in) :: vec_in(this%elem3d%np,3,5)
3208 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot,5)
3209 real(rp), intent(out) :: vec_out_d(this%elem3d%np,4,5)
3210
3211 integer :: iv
3212 !----------------------------------------------------------
3213
3214 do iv=1, 5
3215 call element_operation_kernel_matvec_lift_hexahedral_p10( this%Lift_mat, vec_in_lift(:,iv), &
3216 vec_out_d(:,4,iv) )
3217 end do
3218 do iv=1, 5
3219 call element_operation_kernel_matvec_divlike_dirxyz_p10( this%D1D, this%D1D_tr, vec_in(:,1,iv), vec_in(:,2,iv), vec_in(:,3,iv), &
3220 vec_out_d(:,1,iv), vec_out_d(:,2,iv), vec_out_d(:,3,iv) )
3221 end do
3222 return
3223 end subroutine element_operation_tensorprod3d_div_var5_p10
3224
3225!OCL SERIAL
3226 subroutine element_operation_tensorprod3d_vfilterpm1_p10( this, vec_in, vec_out )
3228 implicit none
3229 class(elementoperationtensorprod3d_p10), intent(in) :: this
3230 real(rp), intent(in) :: vec_in(this%elem3d%np)
3231 real(rp), intent(out) :: vec_out(this%elem3d%np)
3232 !---------------------------------------------------------------
3233
3234 call element_operation_kernel_matvec_dirz_p10( this%IntrpMat_VPOrdM1_tr, vec_in, &
3235 vec_out )
3236 return
3237 end subroutine element_operation_tensorprod3d_vfilterpm1_p10
3238
3239 !OCL SERIAL
3240 subroutine element_operation_tensorprod3d_modalfilter_tracer_p10( this, vec_in, vec_work, vec_out )
3243
3244 implicit none
3245 class(elementoperationtensorprod3d_p10), intent(in) :: this
3246 real(rp), intent(in) :: vec_in(this%elem3d%np)
3247 real(rp), intent(out) :: vec_work(this%elem3d%np)
3248 real(rp), intent(out) :: vec_out(this%elem3d%np)
3249 !---------------------------------------------
3250
3251 call element_operation_kernel_matvec_modalfilter_p10( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, vec_in(:), vec_work, &
3252 vec_out(:) )
3253
3254 return
3255 end subroutine element_operation_tensorprod3d_modalfilter_tracer_p10
3256
3257!OCL SERIAL
3258 subroutine element_operation_tensorprod3d_modalfilter_var5_p10( this, vec_in, vec_work, vec_out )
3261
3262 implicit none
3263 class(elementoperationtensorprod3d_p10), intent(in) :: this
3264 real(rp), intent(in) :: vec_in(this%elem3d%np,5)
3265 real(rp), intent(out) :: vec_work(this%elem3d%np)
3266 real(rp), intent(out) :: vec_out(this%elem3d%np,5)
3267 integer :: iv
3268 !---------------------------------------------
3269
3270 do iv=1, 5
3271 call element_operation_kernel_matvec_modalfilter_p10( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, vec_in(:,iv), vec_work, &
3272 vec_out(:,iv) )
3273 end do
3274
3275 return
3276 end subroutine element_operation_tensorprod3d_modalfilter_var5_p10
3277
3278
3279!--- For p=11 ------------------------------------
3280
3283!OCL SERIAL
3284 subroutine element_operation_tensorprod3d_init_p11( this, elem3D )
3285 implicit none
3286 class(elementoperationtensorprod3d_p11), intent(inout) :: this
3287 class(elementbase3d), intent(in), target :: elem3d
3288 !----------------------------------------------------------
3289
3290 this%elem3D => elem3d
3291
3292 call setup_elem_operator( this%D1D, this%D1D_tr, this%Lift_mat, this%IntrpMat_VPOrdM1_tr, &
3293 12, elem3d )
3294 return
3295 end subroutine element_operation_tensorprod3d_init_p11
3296
3299!OCL SERIAL
3300 subroutine element_operation_tensorprod3d_setup_modalfilter_p11( this, &
3301 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
3302 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
3305 implicit none
3306 class(elementoperationtensorprod3d_p11), intent(inout) :: this
3307 real(rp), intent(in) :: mf_etac_h
3308 real(rp), intent(in) :: mf_alpha_h
3309 integer, intent(in) :: mf_order_h
3310 real(rp), intent(in) :: mf_etac_v
3311 real(rp), intent(in) :: mf_alpha_v
3312 integer, intent(in) :: mf_order_v
3313 !--------------------------------------------------------
3314
3315 call setup_modalfilter( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, &
3316 mf_etac_h, mf_alpha_h, mf_order_h, &
3317 mf_etac_v, mf_alpha_v, mf_order_v, &
3318 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
3319
3320 return
3321 end subroutine element_operation_tensorprod3d_setup_modalfilter_p11
3322
3325!OCL SERIAL
3326 subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p11( this, &
3327 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
3328 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
3331 implicit none
3332 class(elementoperationtensorprod3d_p11), intent(inout) :: this
3333 real(rp), intent(in) :: mf_etac_h
3334 real(rp), intent(in) :: mf_alpha_h
3335 integer, intent(in) :: mf_order_h
3336 real(rp), intent(in) :: mf_etac_v
3337 real(rp), intent(in) :: mf_alpha_v
3338 integer, intent(in) :: mf_order_v
3339 !--------------------------------------------------------
3340
3341 call setup_modalfilter( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, &
3342 mf_etac_h, mf_alpha_h, mf_order_h, &
3343 mf_etac_v, mf_alpha_v, mf_order_v, &
3344 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
3345
3346 return
3347 end subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p11
3348
3351!OCL SERIAL
3352 subroutine element_operation_tensorprod3d_final_p11( this )
3353 implicit none
3354 class(elementoperationtensorprod3d_p11), intent(inout) :: this
3355 !----------------------------------------------------------
3356 nullify( this%elem3D )
3357 return
3358 end subroutine element_operation_tensorprod3d_final_p11
3359
3362!OCL SERIAL
3363 subroutine element_operation_tensorprod3d_dx_p11( this, vec_in, vec_out )
3365 implicit none
3366 class(elementoperationtensorprod3d_p11), intent(in) :: this
3367 real(rp), intent(in) :: vec_in(this%elem3d%np)
3368 real(rp), intent(out) :: vec_out(this%elem3d%np)
3369 !----------------------------------------------------------
3370 call element_operation_kernel_matvec_dirx_p11( this%D1D, vec_in, vec_out )
3371 return
3372 end subroutine element_operation_tensorprod3d_dx_p11
3373
3376!OCL SERIAL
3377 subroutine element_operation_tensorprod3d_dy_p11( this, vec_in, vec_out )
3379 implicit none
3380 class(elementoperationtensorprod3d_p11), intent(in) :: this
3381 real(rp), intent(in) :: vec_in(this%elem3d%np)
3382 real(rp), intent(out) :: vec_out(this%elem3d%np)
3383 !----------------------------------------------------------
3384 call element_operation_kernel_matvec_diry_p11( this%D1D_tr, vec_in, vec_out )
3385 return
3386 end subroutine element_operation_tensorprod3d_dy_p11
3387
3390!OCL SERIAL
3391 subroutine element_operation_tensorprod3d_dz_p11( this, vec_in, vec_out )
3393 implicit none
3394 class(elementoperationtensorprod3d_p11), intent(in) :: this
3395 real(rp), intent(in) :: vec_in(this%elem3d%np)
3396 real(rp), intent(out) :: vec_out(this%elem3d%np)
3397 !----------------------------------------------------------
3398 call element_operation_kernel_matvec_dirz_p11( this%D1D_tr, vec_in, vec_out )
3399 return
3400 end subroutine element_operation_tensorprod3d_dz_p11
3401
3404!OCL SERIAL
3405 subroutine element_operation_tensorprod3d_lift_p11( this, vec_in, vec_out )
3407 implicit none
3408 class(elementoperationtensorprod3d_p11), intent(in) :: this
3409 real(rp), intent(in) :: vec_in(this%elem3d%nfptot)
3410 real(rp), intent(out) :: vec_out(this%elem3d%np)
3411 !----------------------------------------------------------
3412 call element_operation_kernel_matvec_lift_hexahedral_p11( this%Lift_mat, vec_in, vec_out )
3413 return
3414 end subroutine element_operation_tensorprod3d_lift_p11
3415
3418!OCL SERIAL
3419 subroutine element_operation_tensorprod3d_dxdydzlift_p11( this, vec_in, vec_in_lift, vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
3423 implicit none
3424 class(elementoperationtensorprod3d_p11), intent(in) :: this
3425 real(rp), intent(in) :: vec_in(this%elem3d%np)
3426 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
3427 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
3428 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
3429 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
3430 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
3431 !----------------------------------------------------------
3432 call element_operation_kernel_matvec_gradlike_dirxyz_p11( this%D1D, this%D1D_tr, vec_in, vec_in, &
3433 vec_out_dx, vec_out_dy, vec_out_dz )
3434 call element_operation_kernel_matvec_lift_hexahedral_p11( this%Lift_mat, vec_in_lift, &
3435 vec_out_lift )
3436
3437 return
3438 end subroutine element_operation_tensorprod3d_dxdydzlift_p11
3439
3442!OCL SERIAL
3443 subroutine element_operation_tensorprod3d_div_p11( this, vec_in_x, vec_in_y, vec_in_z, vec_in_lift, &
3444 vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
3448 implicit none
3449 class(elementoperationtensorprod3d_p11), intent(in) :: this
3450 real(rp), intent(in) :: vec_in_x(this%elem3d%np)
3451 real(rp), intent(in) :: vec_in_y(this%elem3d%np)
3452 real(rp), intent(in) :: vec_in_z(this%elem3d%np)
3453 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
3454 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
3455 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
3456 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
3457 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
3458 !----------------------------------------------------------
3459
3460 call element_operation_kernel_matvec_lift_hexahedral_p11( this%Lift_mat, vec_in_lift, &
3461 vec_out_lift )
3462
3463 call element_operation_kernel_matvec_divlike_dirxyz_p11( this%D1D, this%D1D_tr, vec_in_x, vec_in_y, vec_in_z, &
3464 vec_out_dx, vec_out_dy, vec_out_dz )
3465 return
3466 end subroutine element_operation_tensorprod3d_div_p11
3467
3470!OCL SERIAL
3471 subroutine element_operation_tensorprod3d_div_var5_p11( this, vec_in, vec_in_lift, &
3472 vec_out_d )
3476 implicit none
3477 class(elementoperationtensorprod3d_p11), intent(in) :: this
3478 real(rp), intent(in) :: vec_in(this%elem3d%np,3,5)
3479 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot,5)
3480 real(rp), intent(out) :: vec_out_d(this%elem3d%np,4,5)
3481
3482 integer :: iv
3483 !----------------------------------------------------------
3484
3485 do iv=1, 5
3486 call element_operation_kernel_matvec_lift_hexahedral_p11( this%Lift_mat, vec_in_lift(:,iv), &
3487 vec_out_d(:,4,iv) )
3488 end do
3489 do iv=1, 5
3490 call element_operation_kernel_matvec_divlike_dirxyz_p11( this%D1D, this%D1D_tr, vec_in(:,1,iv), vec_in(:,2,iv), vec_in(:,3,iv), &
3491 vec_out_d(:,1,iv), vec_out_d(:,2,iv), vec_out_d(:,3,iv) )
3492 end do
3493 return
3494 end subroutine element_operation_tensorprod3d_div_var5_p11
3495
3496!OCL SERIAL
3497 subroutine element_operation_tensorprod3d_vfilterpm1_p11( this, vec_in, vec_out )
3499 implicit none
3500 class(elementoperationtensorprod3d_p11), intent(in) :: this
3501 real(rp), intent(in) :: vec_in(this%elem3d%np)
3502 real(rp), intent(out) :: vec_out(this%elem3d%np)
3503 !---------------------------------------------------------------
3504
3505 call element_operation_kernel_matvec_dirz_p11( this%IntrpMat_VPOrdM1_tr, vec_in, &
3506 vec_out )
3507 return
3508 end subroutine element_operation_tensorprod3d_vfilterpm1_p11
3509
3510 !OCL SERIAL
3511 subroutine element_operation_tensorprod3d_modalfilter_tracer_p11( this, vec_in, vec_work, vec_out )
3514
3515 implicit none
3516 class(elementoperationtensorprod3d_p11), intent(in) :: this
3517 real(rp), intent(in) :: vec_in(this%elem3d%np)
3518 real(rp), intent(out) :: vec_work(this%elem3d%np)
3519 real(rp), intent(out) :: vec_out(this%elem3d%np)
3520 !---------------------------------------------
3521
3522 call element_operation_kernel_matvec_modalfilter_p11( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, vec_in(:), vec_work, &
3523 vec_out(:) )
3524
3525 return
3526 end subroutine element_operation_tensorprod3d_modalfilter_tracer_p11
3527
3528!OCL SERIAL
3529 subroutine element_operation_tensorprod3d_modalfilter_var5_p11( this, vec_in, vec_work, vec_out )
3532
3533 implicit none
3534 class(elementoperationtensorprod3d_p11), intent(in) :: this
3535 real(rp), intent(in) :: vec_in(this%elem3d%np,5)
3536 real(rp), intent(out) :: vec_work(this%elem3d%np)
3537 real(rp), intent(out) :: vec_out(this%elem3d%np,5)
3538 integer :: iv
3539 !---------------------------------------------
3540
3541 do iv=1, 5
3542 call element_operation_kernel_matvec_modalfilter_p11( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, vec_in(:,iv), vec_work, &
3543 vec_out(:,iv) )
3544 end do
3545
3546 return
3547 end subroutine element_operation_tensorprod3d_modalfilter_var5_p11
3548
3549
3550!--- For p=12 ------------------------------------
3551
3554!OCL SERIAL
3555 subroutine element_operation_tensorprod3d_init_p12( this, elem3D )
3556 implicit none
3557 class(elementoperationtensorprod3d_p12), intent(inout) :: this
3558 class(elementbase3d), intent(in), target :: elem3d
3559 !----------------------------------------------------------
3560
3561 this%elem3D => elem3d
3562
3563 call setup_elem_operator( this%D1D, this%D1D_tr, this%Lift_mat, this%IntrpMat_VPOrdM1_tr, &
3564 13, elem3d )
3565 return
3566 end subroutine element_operation_tensorprod3d_init_p12
3567
3570!OCL SERIAL
3571 subroutine element_operation_tensorprod3d_setup_modalfilter_p12( this, &
3572 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
3573 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
3576 implicit none
3577 class(elementoperationtensorprod3d_p12), intent(inout) :: this
3578 real(rp), intent(in) :: mf_etac_h
3579 real(rp), intent(in) :: mf_alpha_h
3580 integer, intent(in) :: mf_order_h
3581 real(rp), intent(in) :: mf_etac_v
3582 real(rp), intent(in) :: mf_alpha_v
3583 integer, intent(in) :: mf_order_v
3584 !--------------------------------------------------------
3585
3586 call setup_modalfilter( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, &
3587 mf_etac_h, mf_alpha_h, mf_order_h, &
3588 mf_etac_v, mf_alpha_v, mf_order_v, &
3589 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
3590
3591 return
3592 end subroutine element_operation_tensorprod3d_setup_modalfilter_p12
3593
3596!OCL SERIAL
3597 subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p12( this, &
3598 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
3599 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
3602 implicit none
3603 class(elementoperationtensorprod3d_p12), intent(inout) :: this
3604 real(rp), intent(in) :: mf_etac_h
3605 real(rp), intent(in) :: mf_alpha_h
3606 integer, intent(in) :: mf_order_h
3607 real(rp), intent(in) :: mf_etac_v
3608 real(rp), intent(in) :: mf_alpha_v
3609 integer, intent(in) :: mf_order_v
3610 !--------------------------------------------------------
3611
3612 call setup_modalfilter( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, &
3613 mf_etac_h, mf_alpha_h, mf_order_h, &
3614 mf_etac_v, mf_alpha_v, mf_order_v, &
3615 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
3616
3617 return
3618 end subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p12
3619
3622!OCL SERIAL
3623 subroutine element_operation_tensorprod3d_final_p12( this )
3624 implicit none
3625 class(elementoperationtensorprod3d_p12), intent(inout) :: this
3626 !----------------------------------------------------------
3627 nullify( this%elem3D )
3628 return
3629 end subroutine element_operation_tensorprod3d_final_p12
3630
3633!OCL SERIAL
3634 subroutine element_operation_tensorprod3d_dx_p12( this, vec_in, vec_out )
3636 implicit none
3637 class(elementoperationtensorprod3d_p12), intent(in) :: this
3638 real(rp), intent(in) :: vec_in(this%elem3d%np)
3639 real(rp), intent(out) :: vec_out(this%elem3d%np)
3640 !----------------------------------------------------------
3641 call element_operation_kernel_matvec_dirx_p12( this%D1D, vec_in, vec_out )
3642 return
3643 end subroutine element_operation_tensorprod3d_dx_p12
3644
3647!OCL SERIAL
3648 subroutine element_operation_tensorprod3d_dy_p12( this, vec_in, vec_out )
3650 implicit none
3651 class(elementoperationtensorprod3d_p12), intent(in) :: this
3652 real(rp), intent(in) :: vec_in(this%elem3d%np)
3653 real(rp), intent(out) :: vec_out(this%elem3d%np)
3654 !----------------------------------------------------------
3655 call element_operation_kernel_matvec_diry_p12( this%D1D_tr, vec_in, vec_out )
3656 return
3657 end subroutine element_operation_tensorprod3d_dy_p12
3658
3661!OCL SERIAL
3662 subroutine element_operation_tensorprod3d_dz_p12( this, vec_in, vec_out )
3664 implicit none
3665 class(elementoperationtensorprod3d_p12), intent(in) :: this
3666 real(rp), intent(in) :: vec_in(this%elem3d%np)
3667 real(rp), intent(out) :: vec_out(this%elem3d%np)
3668 !----------------------------------------------------------
3669 call element_operation_kernel_matvec_dirz_p12( this%D1D_tr, vec_in, vec_out )
3670 return
3671 end subroutine element_operation_tensorprod3d_dz_p12
3672
3675!OCL SERIAL
3676 subroutine element_operation_tensorprod3d_lift_p12( this, vec_in, vec_out )
3678 implicit none
3679 class(elementoperationtensorprod3d_p12), intent(in) :: this
3680 real(rp), intent(in) :: vec_in(this%elem3d%nfptot)
3681 real(rp), intent(out) :: vec_out(this%elem3d%np)
3682 !----------------------------------------------------------
3683 call element_operation_kernel_matvec_lift_hexahedral_p12( this%Lift_mat, vec_in, vec_out )
3684 return
3685 end subroutine element_operation_tensorprod3d_lift_p12
3686
3689!OCL SERIAL
3690 subroutine element_operation_tensorprod3d_dxdydzlift_p12( this, vec_in, vec_in_lift, vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
3694 implicit none
3695 class(elementoperationtensorprod3d_p12), intent(in) :: this
3696 real(rp), intent(in) :: vec_in(this%elem3d%np)
3697 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
3698 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
3699 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
3700 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
3701 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
3702 !----------------------------------------------------------
3703 call element_operation_kernel_matvec_gradlike_dirxyz_p12( this%D1D, this%D1D_tr, vec_in, vec_in, &
3704 vec_out_dx, vec_out_dy, vec_out_dz )
3705 call element_operation_kernel_matvec_lift_hexahedral_p12( this%Lift_mat, vec_in_lift, &
3706 vec_out_lift )
3707
3708 return
3709 end subroutine element_operation_tensorprod3d_dxdydzlift_p12
3710
3713!OCL SERIAL
3714 subroutine element_operation_tensorprod3d_div_p12( this, vec_in_x, vec_in_y, vec_in_z, vec_in_lift, &
3715 vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
3719 implicit none
3720 class(elementoperationtensorprod3d_p12), intent(in) :: this
3721 real(rp), intent(in) :: vec_in_x(this%elem3d%np)
3722 real(rp), intent(in) :: vec_in_y(this%elem3d%np)
3723 real(rp), intent(in) :: vec_in_z(this%elem3d%np)
3724 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
3725 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
3726 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
3727 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
3728 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
3729 !----------------------------------------------------------
3730
3731 call element_operation_kernel_matvec_lift_hexahedral_p12( this%Lift_mat, vec_in_lift, &
3732 vec_out_lift )
3733
3734 call element_operation_kernel_matvec_divlike_dirxyz_p12( this%D1D, this%D1D_tr, vec_in_x, vec_in_y, vec_in_z, &
3735 vec_out_dx, vec_out_dy, vec_out_dz )
3736 return
3737 end subroutine element_operation_tensorprod3d_div_p12
3738
3741!OCL SERIAL
3742 subroutine element_operation_tensorprod3d_div_var5_p12( this, vec_in, vec_in_lift, &
3743 vec_out_d )
3747 implicit none
3748 class(elementoperationtensorprod3d_p12), intent(in) :: this
3749 real(rp), intent(in) :: vec_in(this%elem3d%np,3,5)
3750 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot,5)
3751 real(rp), intent(out) :: vec_out_d(this%elem3d%np,4,5)
3752
3753 integer :: iv
3754 !----------------------------------------------------------
3755
3756 do iv=1, 5
3757 call element_operation_kernel_matvec_lift_hexahedral_p12( this%Lift_mat, vec_in_lift(:,iv), &
3758 vec_out_d(:,4,iv) )
3759 end do
3760 do iv=1, 5
3761 call element_operation_kernel_matvec_divlike_dirxyz_p12( this%D1D, this%D1D_tr, vec_in(:,1,iv), vec_in(:,2,iv), vec_in(:,3,iv), &
3762 vec_out_d(:,1,iv), vec_out_d(:,2,iv), vec_out_d(:,3,iv) )
3763 end do
3764 return
3765 end subroutine element_operation_tensorprod3d_div_var5_p12
3766
3767!OCL SERIAL
3768 subroutine element_operation_tensorprod3d_vfilterpm1_p12( this, vec_in, vec_out )
3770 implicit none
3771 class(elementoperationtensorprod3d_p12), intent(in) :: this
3772 real(rp), intent(in) :: vec_in(this%elem3d%np)
3773 real(rp), intent(out) :: vec_out(this%elem3d%np)
3774 !---------------------------------------------------------------
3775
3776 call element_operation_kernel_matvec_dirz_p12( this%IntrpMat_VPOrdM1_tr, vec_in, &
3777 vec_out )
3778 return
3779 end subroutine element_operation_tensorprod3d_vfilterpm1_p12
3780
3781 !OCL SERIAL
3782 subroutine element_operation_tensorprod3d_modalfilter_tracer_p12( this, vec_in, vec_work, vec_out )
3785
3786 implicit none
3787 class(elementoperationtensorprod3d_p12), intent(in) :: this
3788 real(rp), intent(in) :: vec_in(this%elem3d%np)
3789 real(rp), intent(out) :: vec_work(this%elem3d%np)
3790 real(rp), intent(out) :: vec_out(this%elem3d%np)
3791 !---------------------------------------------
3792
3793 call element_operation_kernel_matvec_modalfilter_p12( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, vec_in(:), vec_work, &
3794 vec_out(:) )
3795
3796 return
3797 end subroutine element_operation_tensorprod3d_modalfilter_tracer_p12
3798
3799!OCL SERIAL
3800 subroutine element_operation_tensorprod3d_modalfilter_var5_p12( this, vec_in, vec_work, vec_out )
3803
3804 implicit none
3805 class(elementoperationtensorprod3d_p12), intent(in) :: this
3806 real(rp), intent(in) :: vec_in(this%elem3d%np,5)
3807 real(rp), intent(out) :: vec_work(this%elem3d%np)
3808 real(rp), intent(out) :: vec_out(this%elem3d%np,5)
3809 integer :: iv
3810 !---------------------------------------------
3811
3812 do iv=1, 5
3813 call element_operation_kernel_matvec_modalfilter_p12( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, vec_in(:,iv), vec_work, &
3814 vec_out(:,iv) )
3815 end do
3816
3817 return
3818 end subroutine element_operation_tensorprod3d_modalfilter_var5_p12
3819
3820
3821!--- For p=13 ------------------------------------
3822
3825!OCL SERIAL
3826 subroutine element_operation_tensorprod3d_init_p13( this, elem3D )
3827 implicit none
3828 class(elementoperationtensorprod3d_p13), intent(inout) :: this
3829 class(elementbase3d), intent(in), target :: elem3d
3830 !----------------------------------------------------------
3831
3832 this%elem3D => elem3d
3833
3834 call setup_elem_operator( this%D1D, this%D1D_tr, this%Lift_mat, this%IntrpMat_VPOrdM1_tr, &
3835 14, elem3d )
3836 return
3837 end subroutine element_operation_tensorprod3d_init_p13
3838
3841!OCL SERIAL
3842 subroutine element_operation_tensorprod3d_setup_modalfilter_p13( this, &
3843 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
3844 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
3847 implicit none
3848 class(elementoperationtensorprod3d_p13), intent(inout) :: this
3849 real(rp), intent(in) :: mf_etac_h
3850 real(rp), intent(in) :: mf_alpha_h
3851 integer, intent(in) :: mf_order_h
3852 real(rp), intent(in) :: mf_etac_v
3853 real(rp), intent(in) :: mf_alpha_v
3854 integer, intent(in) :: mf_order_v
3855 !--------------------------------------------------------
3856
3857 call setup_modalfilter( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, &
3858 mf_etac_h, mf_alpha_h, mf_order_h, &
3859 mf_etac_v, mf_alpha_v, mf_order_v, &
3860 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
3861
3862 return
3863 end subroutine element_operation_tensorprod3d_setup_modalfilter_p13
3864
3867!OCL SERIAL
3868 subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p13( this, &
3869 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
3870 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
3873 implicit none
3874 class(elementoperationtensorprod3d_p13), intent(inout) :: this
3875 real(rp), intent(in) :: mf_etac_h
3876 real(rp), intent(in) :: mf_alpha_h
3877 integer, intent(in) :: mf_order_h
3878 real(rp), intent(in) :: mf_etac_v
3879 real(rp), intent(in) :: mf_alpha_v
3880 integer, intent(in) :: mf_order_v
3881 !--------------------------------------------------------
3882
3883 call setup_modalfilter( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, &
3884 mf_etac_h, mf_alpha_h, mf_order_h, &
3885 mf_etac_v, mf_alpha_v, mf_order_v, &
3886 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
3887
3888 return
3889 end subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p13
3890
3893!OCL SERIAL
3894 subroutine element_operation_tensorprod3d_final_p13( this )
3895 implicit none
3896 class(elementoperationtensorprod3d_p13), intent(inout) :: this
3897 !----------------------------------------------------------
3898 nullify( this%elem3D )
3899 return
3900 end subroutine element_operation_tensorprod3d_final_p13
3901
3904!OCL SERIAL
3905 subroutine element_operation_tensorprod3d_dx_p13( this, vec_in, vec_out )
3907 implicit none
3908 class(elementoperationtensorprod3d_p13), intent(in) :: this
3909 real(rp), intent(in) :: vec_in(this%elem3d%np)
3910 real(rp), intent(out) :: vec_out(this%elem3d%np)
3911 !----------------------------------------------------------
3912 call element_operation_kernel_matvec_dirx_p13( this%D1D, vec_in, vec_out )
3913 return
3914 end subroutine element_operation_tensorprod3d_dx_p13
3915
3918!OCL SERIAL
3919 subroutine element_operation_tensorprod3d_dy_p13( this, vec_in, vec_out )
3921 implicit none
3922 class(elementoperationtensorprod3d_p13), intent(in) :: this
3923 real(rp), intent(in) :: vec_in(this%elem3d%np)
3924 real(rp), intent(out) :: vec_out(this%elem3d%np)
3925 !----------------------------------------------------------
3926 call element_operation_kernel_matvec_diry_p13( this%D1D_tr, vec_in, vec_out )
3927 return
3928 end subroutine element_operation_tensorprod3d_dy_p13
3929
3932!OCL SERIAL
3933 subroutine element_operation_tensorprod3d_dz_p13( this, vec_in, vec_out )
3935 implicit none
3936 class(elementoperationtensorprod3d_p13), intent(in) :: this
3937 real(rp), intent(in) :: vec_in(this%elem3d%np)
3938 real(rp), intent(out) :: vec_out(this%elem3d%np)
3939 !----------------------------------------------------------
3940 call element_operation_kernel_matvec_dirz_p13( this%D1D_tr, vec_in, vec_out )
3941 return
3942 end subroutine element_operation_tensorprod3d_dz_p13
3943
3946!OCL SERIAL
3947 subroutine element_operation_tensorprod3d_lift_p13( this, vec_in, vec_out )
3949 implicit none
3950 class(elementoperationtensorprod3d_p13), intent(in) :: this
3951 real(rp), intent(in) :: vec_in(this%elem3d%nfptot)
3952 real(rp), intent(out) :: vec_out(this%elem3d%np)
3953 !----------------------------------------------------------
3954 call element_operation_kernel_matvec_lift_hexahedral_p13( this%Lift_mat, vec_in, vec_out )
3955 return
3956 end subroutine element_operation_tensorprod3d_lift_p13
3957
3960!OCL SERIAL
3961 subroutine element_operation_tensorprod3d_dxdydzlift_p13( this, vec_in, vec_in_lift, vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
3965 implicit none
3966 class(elementoperationtensorprod3d_p13), intent(in) :: this
3967 real(rp), intent(in) :: vec_in(this%elem3d%np)
3968 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
3969 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
3970 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
3971 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
3972 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
3973 !----------------------------------------------------------
3974 call element_operation_kernel_matvec_gradlike_dirxyz_p13( this%D1D, this%D1D_tr, vec_in, vec_in, &
3975 vec_out_dx, vec_out_dy, vec_out_dz )
3976 call element_operation_kernel_matvec_lift_hexahedral_p13( this%Lift_mat, vec_in_lift, &
3977 vec_out_lift )
3978
3979 return
3980 end subroutine element_operation_tensorprod3d_dxdydzlift_p13
3981
3984!OCL SERIAL
3985 subroutine element_operation_tensorprod3d_div_p13( this, vec_in_x, vec_in_y, vec_in_z, vec_in_lift, &
3986 vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
3990 implicit none
3991 class(elementoperationtensorprod3d_p13), intent(in) :: this
3992 real(rp), intent(in) :: vec_in_x(this%elem3d%np)
3993 real(rp), intent(in) :: vec_in_y(this%elem3d%np)
3994 real(rp), intent(in) :: vec_in_z(this%elem3d%np)
3995 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
3996 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
3997 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
3998 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
3999 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
4000 !----------------------------------------------------------
4001
4002 call element_operation_kernel_matvec_lift_hexahedral_p13( this%Lift_mat, vec_in_lift, &
4003 vec_out_lift )
4004
4005 call element_operation_kernel_matvec_divlike_dirxyz_p13( this%D1D, this%D1D_tr, vec_in_x, vec_in_y, vec_in_z, &
4006 vec_out_dx, vec_out_dy, vec_out_dz )
4007 return
4008 end subroutine element_operation_tensorprod3d_div_p13
4009
4012!OCL SERIAL
4013 subroutine element_operation_tensorprod3d_div_var5_p13( this, vec_in, vec_in_lift, &
4014 vec_out_d )
4018 implicit none
4019 class(elementoperationtensorprod3d_p13), intent(in) :: this
4020 real(rp), intent(in) :: vec_in(this%elem3d%np,3,5)
4021 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot,5)
4022 real(rp), intent(out) :: vec_out_d(this%elem3d%np,4,5)
4023
4024 integer :: iv
4025 !----------------------------------------------------------
4026
4027 do iv=1, 5
4028 call element_operation_kernel_matvec_lift_hexahedral_p13( this%Lift_mat, vec_in_lift(:,iv), &
4029 vec_out_d(:,4,iv) )
4030 end do
4031 do iv=1, 5
4032 call element_operation_kernel_matvec_divlike_dirxyz_p13( this%D1D, this%D1D_tr, vec_in(:,1,iv), vec_in(:,2,iv), vec_in(:,3,iv), &
4033 vec_out_d(:,1,iv), vec_out_d(:,2,iv), vec_out_d(:,3,iv) )
4034 end do
4035 return
4036 end subroutine element_operation_tensorprod3d_div_var5_p13
4037
4038!OCL SERIAL
4039 subroutine element_operation_tensorprod3d_vfilterpm1_p13( this, vec_in, vec_out )
4041 implicit none
4042 class(elementoperationtensorprod3d_p13), intent(in) :: this
4043 real(rp), intent(in) :: vec_in(this%elem3d%np)
4044 real(rp), intent(out) :: vec_out(this%elem3d%np)
4045 !---------------------------------------------------------------
4046
4047 call element_operation_kernel_matvec_dirz_p13( this%IntrpMat_VPOrdM1_tr, vec_in, &
4048 vec_out )
4049 return
4050 end subroutine element_operation_tensorprod3d_vfilterpm1_p13
4051
4052 !OCL SERIAL
4053 subroutine element_operation_tensorprod3d_modalfilter_tracer_p13( this, vec_in, vec_work, vec_out )
4056
4057 implicit none
4058 class(elementoperationtensorprod3d_p13), intent(in) :: this
4059 real(rp), intent(in) :: vec_in(this%elem3d%np)
4060 real(rp), intent(out) :: vec_work(this%elem3d%np)
4061 real(rp), intent(out) :: vec_out(this%elem3d%np)
4062 !---------------------------------------------
4063
4064 call element_operation_kernel_matvec_modalfilter_p13( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, vec_in(:), vec_work, &
4065 vec_out(:) )
4066
4067 return
4068 end subroutine element_operation_tensorprod3d_modalfilter_tracer_p13
4069
4070!OCL SERIAL
4071 subroutine element_operation_tensorprod3d_modalfilter_var5_p13( this, vec_in, vec_work, vec_out )
4074
4075 implicit none
4076 class(elementoperationtensorprod3d_p13), intent(in) :: this
4077 real(rp), intent(in) :: vec_in(this%elem3d%np,5)
4078 real(rp), intent(out) :: vec_work(this%elem3d%np)
4079 real(rp), intent(out) :: vec_out(this%elem3d%np,5)
4080 integer :: iv
4081 !---------------------------------------------
4082
4083 do iv=1, 5
4084 call element_operation_kernel_matvec_modalfilter_p13( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, vec_in(:,iv), vec_work, &
4085 vec_out(:,iv) )
4086 end do
4087
4088 return
4089 end subroutine element_operation_tensorprod3d_modalfilter_var5_p13
4090
4091
4092!--- For p=14 ------------------------------------
4093
4096!OCL SERIAL
4097 subroutine element_operation_tensorprod3d_init_p14( this, elem3D )
4098 implicit none
4099 class(elementoperationtensorprod3d_p14), intent(inout) :: this
4100 class(elementbase3d), intent(in), target :: elem3d
4101 !----------------------------------------------------------
4102
4103 this%elem3D => elem3d
4104
4105 call setup_elem_operator( this%D1D, this%D1D_tr, this%Lift_mat, this%IntrpMat_VPOrdM1_tr, &
4106 15, elem3d )
4107 return
4108 end subroutine element_operation_tensorprod3d_init_p14
4109
4112!OCL SERIAL
4113 subroutine element_operation_tensorprod3d_setup_modalfilter_p14( this, &
4114 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
4115 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
4118 implicit none
4119 class(elementoperationtensorprod3d_p14), intent(inout) :: this
4120 real(rp), intent(in) :: mf_etac_h
4121 real(rp), intent(in) :: mf_alpha_h
4122 integer, intent(in) :: mf_order_h
4123 real(rp), intent(in) :: mf_etac_v
4124 real(rp), intent(in) :: mf_alpha_v
4125 integer, intent(in) :: mf_order_v
4126 !--------------------------------------------------------
4127
4128 call setup_modalfilter( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, &
4129 mf_etac_h, mf_alpha_h, mf_order_h, &
4130 mf_etac_v, mf_alpha_v, mf_order_v, &
4131 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
4132
4133 return
4134 end subroutine element_operation_tensorprod3d_setup_modalfilter_p14
4135
4138!OCL SERIAL
4139 subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p14( this, &
4140 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
4141 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
4144 implicit none
4145 class(elementoperationtensorprod3d_p14), intent(inout) :: this
4146 real(rp), intent(in) :: mf_etac_h
4147 real(rp), intent(in) :: mf_alpha_h
4148 integer, intent(in) :: mf_order_h
4149 real(rp), intent(in) :: mf_etac_v
4150 real(rp), intent(in) :: mf_alpha_v
4151 integer, intent(in) :: mf_order_v
4152 !--------------------------------------------------------
4153
4154 call setup_modalfilter( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, &
4155 mf_etac_h, mf_alpha_h, mf_order_h, &
4156 mf_etac_v, mf_alpha_v, mf_order_v, &
4157 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
4158
4159 return
4160 end subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p14
4161
4164!OCL SERIAL
4165 subroutine element_operation_tensorprod3d_final_p14( this )
4166 implicit none
4167 class(elementoperationtensorprod3d_p14), intent(inout) :: this
4168 !----------------------------------------------------------
4169 nullify( this%elem3D )
4170 return
4171 end subroutine element_operation_tensorprod3d_final_p14
4172
4175!OCL SERIAL
4176 subroutine element_operation_tensorprod3d_dx_p14( this, vec_in, vec_out )
4178 implicit none
4179 class(elementoperationtensorprod3d_p14), intent(in) :: this
4180 real(rp), intent(in) :: vec_in(this%elem3d%np)
4181 real(rp), intent(out) :: vec_out(this%elem3d%np)
4182 !----------------------------------------------------------
4183 call element_operation_kernel_matvec_dirx_p14( this%D1D, vec_in, vec_out )
4184 return
4185 end subroutine element_operation_tensorprod3d_dx_p14
4186
4189!OCL SERIAL
4190 subroutine element_operation_tensorprod3d_dy_p14( this, vec_in, vec_out )
4192 implicit none
4193 class(elementoperationtensorprod3d_p14), intent(in) :: this
4194 real(rp), intent(in) :: vec_in(this%elem3d%np)
4195 real(rp), intent(out) :: vec_out(this%elem3d%np)
4196 !----------------------------------------------------------
4197 call element_operation_kernel_matvec_diry_p14( this%D1D_tr, vec_in, vec_out )
4198 return
4199 end subroutine element_operation_tensorprod3d_dy_p14
4200
4203!OCL SERIAL
4204 subroutine element_operation_tensorprod3d_dz_p14( this, vec_in, vec_out )
4206 implicit none
4207 class(elementoperationtensorprod3d_p14), intent(in) :: this
4208 real(rp), intent(in) :: vec_in(this%elem3d%np)
4209 real(rp), intent(out) :: vec_out(this%elem3d%np)
4210 !----------------------------------------------------------
4211 call element_operation_kernel_matvec_dirz_p14( this%D1D_tr, vec_in, vec_out )
4212 return
4213 end subroutine element_operation_tensorprod3d_dz_p14
4214
4217!OCL SERIAL
4218 subroutine element_operation_tensorprod3d_lift_p14( this, vec_in, vec_out )
4220 implicit none
4221 class(elementoperationtensorprod3d_p14), intent(in) :: this
4222 real(rp), intent(in) :: vec_in(this%elem3d%nfptot)
4223 real(rp), intent(out) :: vec_out(this%elem3d%np)
4224 !----------------------------------------------------------
4225 call element_operation_kernel_matvec_lift_hexahedral_p14( this%Lift_mat, vec_in, vec_out )
4226 return
4227 end subroutine element_operation_tensorprod3d_lift_p14
4228
4231!OCL SERIAL
4232 subroutine element_operation_tensorprod3d_dxdydzlift_p14( this, vec_in, vec_in_lift, vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
4236 implicit none
4237 class(elementoperationtensorprod3d_p14), intent(in) :: this
4238 real(rp), intent(in) :: vec_in(this%elem3d%np)
4239 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
4240 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
4241 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
4242 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
4243 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
4244 !----------------------------------------------------------
4245 call element_operation_kernel_matvec_gradlike_dirxyz_p14( this%D1D, this%D1D_tr, vec_in, vec_in, &
4246 vec_out_dx, vec_out_dy, vec_out_dz )
4247 call element_operation_kernel_matvec_lift_hexahedral_p14( this%Lift_mat, vec_in_lift, &
4248 vec_out_lift )
4249
4250 return
4251 end subroutine element_operation_tensorprod3d_dxdydzlift_p14
4252
4255!OCL SERIAL
4256 subroutine element_operation_tensorprod3d_div_p14( this, vec_in_x, vec_in_y, vec_in_z, vec_in_lift, &
4257 vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
4261 implicit none
4262 class(elementoperationtensorprod3d_p14), intent(in) :: this
4263 real(rp), intent(in) :: vec_in_x(this%elem3d%np)
4264 real(rp), intent(in) :: vec_in_y(this%elem3d%np)
4265 real(rp), intent(in) :: vec_in_z(this%elem3d%np)
4266 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
4267 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
4268 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
4269 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
4270 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
4271 !----------------------------------------------------------
4272
4273 call element_operation_kernel_matvec_lift_hexahedral_p14( this%Lift_mat, vec_in_lift, &
4274 vec_out_lift )
4275
4276 call element_operation_kernel_matvec_divlike_dirxyz_p14( this%D1D, this%D1D_tr, vec_in_x, vec_in_y, vec_in_z, &
4277 vec_out_dx, vec_out_dy, vec_out_dz )
4278 return
4279 end subroutine element_operation_tensorprod3d_div_p14
4280
4283!OCL SERIAL
4284 subroutine element_operation_tensorprod3d_div_var5_p14( this, vec_in, vec_in_lift, &
4285 vec_out_d )
4289 implicit none
4290 class(elementoperationtensorprod3d_p14), intent(in) :: this
4291 real(rp), intent(in) :: vec_in(this%elem3d%np,3,5)
4292 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot,5)
4293 real(rp), intent(out) :: vec_out_d(this%elem3d%np,4,5)
4294
4295 integer :: iv
4296 !----------------------------------------------------------
4297
4298 do iv=1, 5
4299 call element_operation_kernel_matvec_lift_hexahedral_p14( this%Lift_mat, vec_in_lift(:,iv), &
4300 vec_out_d(:,4,iv) )
4301 end do
4302 do iv=1, 5
4303 call element_operation_kernel_matvec_divlike_dirxyz_p14( this%D1D, this%D1D_tr, vec_in(:,1,iv), vec_in(:,2,iv), vec_in(:,3,iv), &
4304 vec_out_d(:,1,iv), vec_out_d(:,2,iv), vec_out_d(:,3,iv) )
4305 end do
4306 return
4307 end subroutine element_operation_tensorprod3d_div_var5_p14
4308
4309!OCL SERIAL
4310 subroutine element_operation_tensorprod3d_vfilterpm1_p14( this, vec_in, vec_out )
4312 implicit none
4313 class(elementoperationtensorprod3d_p14), intent(in) :: this
4314 real(rp), intent(in) :: vec_in(this%elem3d%np)
4315 real(rp), intent(out) :: vec_out(this%elem3d%np)
4316 !---------------------------------------------------------------
4317
4318 call element_operation_kernel_matvec_dirz_p14( this%IntrpMat_VPOrdM1_tr, vec_in, &
4319 vec_out )
4320 return
4321 end subroutine element_operation_tensorprod3d_vfilterpm1_p14
4322
4323 !OCL SERIAL
4324 subroutine element_operation_tensorprod3d_modalfilter_tracer_p14( this, vec_in, vec_work, vec_out )
4327
4328 implicit none
4329 class(elementoperationtensorprod3d_p14), intent(in) :: this
4330 real(rp), intent(in) :: vec_in(this%elem3d%np)
4331 real(rp), intent(out) :: vec_work(this%elem3d%np)
4332 real(rp), intent(out) :: vec_out(this%elem3d%np)
4333 !---------------------------------------------
4334
4335 call element_operation_kernel_matvec_modalfilter_p14( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, vec_in(:), vec_work, &
4336 vec_out(:) )
4337
4338 return
4339 end subroutine element_operation_tensorprod3d_modalfilter_tracer_p14
4340
4341!OCL SERIAL
4342 subroutine element_operation_tensorprod3d_modalfilter_var5_p14( this, vec_in, vec_work, vec_out )
4345
4346 implicit none
4347 class(elementoperationtensorprod3d_p14), intent(in) :: this
4348 real(rp), intent(in) :: vec_in(this%elem3d%np,5)
4349 real(rp), intent(out) :: vec_work(this%elem3d%np)
4350 real(rp), intent(out) :: vec_out(this%elem3d%np,5)
4351 integer :: iv
4352 !---------------------------------------------
4353
4354 do iv=1, 5
4355 call element_operation_kernel_matvec_modalfilter_p14( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, vec_in(:,iv), vec_work, &
4356 vec_out(:,iv) )
4357 end do
4358
4359 return
4360 end subroutine element_operation_tensorprod3d_modalfilter_var5_p14
4361
4362
4363!--- For p=15 ------------------------------------
4364
4367!OCL SERIAL
4368 subroutine element_operation_tensorprod3d_init_p15( this, elem3D )
4369 implicit none
4370 class(elementoperationtensorprod3d_p15), intent(inout) :: this
4371 class(elementbase3d), intent(in), target :: elem3d
4372 !----------------------------------------------------------
4373
4374 this%elem3D => elem3d
4375
4376 call setup_elem_operator( this%D1D, this%D1D_tr, this%Lift_mat, this%IntrpMat_VPOrdM1_tr, &
4377 16, elem3d )
4378 return
4379 end subroutine element_operation_tensorprod3d_init_p15
4380
4383!OCL SERIAL
4384 subroutine element_operation_tensorprod3d_setup_modalfilter_p15( this, &
4385 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
4386 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
4389 implicit none
4390 class(elementoperationtensorprod3d_p15), intent(inout) :: this
4391 real(rp), intent(in) :: mf_etac_h
4392 real(rp), intent(in) :: mf_alpha_h
4393 integer, intent(in) :: mf_order_h
4394 real(rp), intent(in) :: mf_etac_v
4395 real(rp), intent(in) :: mf_alpha_v
4396 integer, intent(in) :: mf_order_v
4397 !--------------------------------------------------------
4398
4399 call setup_modalfilter( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, &
4400 mf_etac_h, mf_alpha_h, mf_order_h, &
4401 mf_etac_v, mf_alpha_v, mf_order_v, &
4402 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
4403
4404 return
4405 end subroutine element_operation_tensorprod3d_setup_modalfilter_p15
4406
4409!OCL SERIAL
4410 subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p15( this, &
4411 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
4412 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v )
4415 implicit none
4416 class(elementoperationtensorprod3d_p15), intent(inout) :: this
4417 real(rp), intent(in) :: mf_etac_h
4418 real(rp), intent(in) :: mf_alpha_h
4419 integer, intent(in) :: mf_order_h
4420 real(rp), intent(in) :: mf_etac_v
4421 real(rp), intent(in) :: mf_alpha_v
4422 integer, intent(in) :: mf_order_v
4423 !--------------------------------------------------------
4424
4425 call setup_modalfilter( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, &
4426 mf_etac_h, mf_alpha_h, mf_order_h, &
4427 mf_etac_v, mf_alpha_v, mf_order_v, &
4428 this%elem3D%PolyOrder_h, this%elem3D%PolyOrder_v )
4429
4430 return
4431 end subroutine element_operation_tensorprod3d_setup_modalfilter_tracer_p15
4432
4435!OCL SERIAL
4436 subroutine element_operation_tensorprod3d_final_p15( this )
4437 implicit none
4438 class(elementoperationtensorprod3d_p15), intent(inout) :: this
4439 !----------------------------------------------------------
4440 nullify( this%elem3D )
4441 return
4442 end subroutine element_operation_tensorprod3d_final_p15
4443
4446!OCL SERIAL
4447 subroutine element_operation_tensorprod3d_dx_p15( this, vec_in, vec_out )
4449 implicit none
4450 class(elementoperationtensorprod3d_p15), intent(in) :: this
4451 real(rp), intent(in) :: vec_in(this%elem3d%np)
4452 real(rp), intent(out) :: vec_out(this%elem3d%np)
4453 !----------------------------------------------------------
4454 call element_operation_kernel_matvec_dirx_p15( this%D1D, vec_in, vec_out )
4455 return
4456 end subroutine element_operation_tensorprod3d_dx_p15
4457
4460!OCL SERIAL
4461 subroutine element_operation_tensorprod3d_dy_p15( this, vec_in, vec_out )
4463 implicit none
4464 class(elementoperationtensorprod3d_p15), intent(in) :: this
4465 real(rp), intent(in) :: vec_in(this%elem3d%np)
4466 real(rp), intent(out) :: vec_out(this%elem3d%np)
4467 !----------------------------------------------------------
4468 call element_operation_kernel_matvec_diry_p15( this%D1D_tr, vec_in, vec_out )
4469 return
4470 end subroutine element_operation_tensorprod3d_dy_p15
4471
4474!OCL SERIAL
4475 subroutine element_operation_tensorprod3d_dz_p15( this, vec_in, vec_out )
4477 implicit none
4478 class(elementoperationtensorprod3d_p15), intent(in) :: this
4479 real(rp), intent(in) :: vec_in(this%elem3d%np)
4480 real(rp), intent(out) :: vec_out(this%elem3d%np)
4481 !----------------------------------------------------------
4482 call element_operation_kernel_matvec_dirz_p15( this%D1D_tr, vec_in, vec_out )
4483 return
4484 end subroutine element_operation_tensorprod3d_dz_p15
4485
4488!OCL SERIAL
4489 subroutine element_operation_tensorprod3d_lift_p15( this, vec_in, vec_out )
4491 implicit none
4492 class(elementoperationtensorprod3d_p15), intent(in) :: this
4493 real(rp), intent(in) :: vec_in(this%elem3d%nfptot)
4494 real(rp), intent(out) :: vec_out(this%elem3d%np)
4495 !----------------------------------------------------------
4496 call element_operation_kernel_matvec_lift_hexahedral_p15( this%Lift_mat, vec_in, vec_out )
4497 return
4498 end subroutine element_operation_tensorprod3d_lift_p15
4499
4502!OCL SERIAL
4503 subroutine element_operation_tensorprod3d_dxdydzlift_p15( this, vec_in, vec_in_lift, vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
4507 implicit none
4508 class(elementoperationtensorprod3d_p15), intent(in) :: this
4509 real(rp), intent(in) :: vec_in(this%elem3d%np)
4510 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
4511 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
4512 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
4513 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
4514 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
4515 !----------------------------------------------------------
4516 call element_operation_kernel_matvec_gradlike_dirxyz_p15( this%D1D, this%D1D_tr, vec_in, vec_in, &
4517 vec_out_dx, vec_out_dy, vec_out_dz )
4518 call element_operation_kernel_matvec_lift_hexahedral_p15( this%Lift_mat, vec_in_lift, &
4519 vec_out_lift )
4520
4521 return
4522 end subroutine element_operation_tensorprod3d_dxdydzlift_p15
4523
4526!OCL SERIAL
4527 subroutine element_operation_tensorprod3d_div_p15( this, vec_in_x, vec_in_y, vec_in_z, vec_in_lift, &
4528 vec_out_dx, vec_out_dy, vec_out_dz, vec_out_lift )
4532 implicit none
4533 class(elementoperationtensorprod3d_p15), intent(in) :: this
4534 real(rp), intent(in) :: vec_in_x(this%elem3d%np)
4535 real(rp), intent(in) :: vec_in_y(this%elem3d%np)
4536 real(rp), intent(in) :: vec_in_z(this%elem3d%np)
4537 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot)
4538 real(rp), intent(out) :: vec_out_dx(this%elem3d%np)
4539 real(rp), intent(out) :: vec_out_dy(this%elem3d%np)
4540 real(rp), intent(out) :: vec_out_dz(this%elem3d%np)
4541 real(rp), intent(out) :: vec_out_lift(this%elem3d%np)
4542 !----------------------------------------------------------
4543
4544 call element_operation_kernel_matvec_lift_hexahedral_p15( this%Lift_mat, vec_in_lift, &
4545 vec_out_lift )
4546
4547 call element_operation_kernel_matvec_divlike_dirxyz_p15( this%D1D, this%D1D_tr, vec_in_x, vec_in_y, vec_in_z, &
4548 vec_out_dx, vec_out_dy, vec_out_dz )
4549 return
4550 end subroutine element_operation_tensorprod3d_div_p15
4551
4554!OCL SERIAL
4555 subroutine element_operation_tensorprod3d_div_var5_p15( this, vec_in, vec_in_lift, &
4556 vec_out_d )
4560 implicit none
4561 class(elementoperationtensorprod3d_p15), intent(in) :: this
4562 real(rp), intent(in) :: vec_in(this%elem3d%np,3,5)
4563 real(rp), intent(in) :: vec_in_lift(this%elem3d%nfptot,5)
4564 real(rp), intent(out) :: vec_out_d(this%elem3d%np,4,5)
4565
4566 integer :: iv
4567 !----------------------------------------------------------
4568
4569 do iv=1, 5
4570 call element_operation_kernel_matvec_lift_hexahedral_p15( this%Lift_mat, vec_in_lift(:,iv), &
4571 vec_out_d(:,4,iv) )
4572 end do
4573 do iv=1, 5
4574 call element_operation_kernel_matvec_divlike_dirxyz_p15( this%D1D, this%D1D_tr, vec_in(:,1,iv), vec_in(:,2,iv), vec_in(:,3,iv), &
4575 vec_out_d(:,1,iv), vec_out_d(:,2,iv), vec_out_d(:,3,iv) )
4576 end do
4577 return
4578 end subroutine element_operation_tensorprod3d_div_var5_p15
4579
4580!OCL SERIAL
4581 subroutine element_operation_tensorprod3d_vfilterpm1_p15( this, vec_in, vec_out )
4583 implicit none
4584 class(elementoperationtensorprod3d_p15), intent(in) :: this
4585 real(rp), intent(in) :: vec_in(this%elem3d%np)
4586 real(rp), intent(out) :: vec_out(this%elem3d%np)
4587 !---------------------------------------------------------------
4588
4589 call element_operation_kernel_matvec_dirz_p15( this%IntrpMat_VPOrdM1_tr, vec_in, &
4590 vec_out )
4591 return
4592 end subroutine element_operation_tensorprod3d_vfilterpm1_p15
4593
4594 !OCL SERIAL
4595 subroutine element_operation_tensorprod3d_modalfilter_tracer_p15( this, vec_in, vec_work, vec_out )
4598
4599 implicit none
4600 class(elementoperationtensorprod3d_p15), intent(in) :: this
4601 real(rp), intent(in) :: vec_in(this%elem3d%np)
4602 real(rp), intent(out) :: vec_work(this%elem3d%np)
4603 real(rp), intent(out) :: vec_out(this%elem3d%np)
4604 !---------------------------------------------
4605
4606 call element_operation_kernel_matvec_modalfilter_p15( this%MFilter_tracer_h1D, this%MFilter_tracer_h1D_tr, this%MFilter_tracer_v1D_tr, vec_in(:), vec_work, &
4607 vec_out(:) )
4608
4609 return
4610 end subroutine element_operation_tensorprod3d_modalfilter_tracer_p15
4611
4612!OCL SERIAL
4613 subroutine element_operation_tensorprod3d_modalfilter_var5_p15( this, vec_in, vec_work, vec_out )
4616
4617 implicit none
4618 class(elementoperationtensorprod3d_p15), intent(in) :: this
4619 real(rp), intent(in) :: vec_in(this%elem3d%np,5)
4620 real(rp), intent(out) :: vec_work(this%elem3d%np)
4621 real(rp), intent(out) :: vec_out(this%elem3d%np,5)
4622 integer :: iv
4623 !---------------------------------------------
4624
4625 do iv=1, 5
4626 call element_operation_kernel_matvec_modalfilter_p15( this%MFilter_h1D, this%MFilter_h1D_tr, this%MFilter_v1D_tr, vec_in(:,iv), vec_work, &
4627 vec_out(:,iv) )
4628 end do
4629
4630 return
4631 end subroutine element_operation_tensorprod3d_modalfilter_var5_p15
4632
4633
4634!- private -
4635
4636!OCL SERIAL
4637 subroutine setup_modalfilter( MFilter_h1D, MFilter_h1D_tr, MFilter_v1D_tr, &
4638 MF_ETAC_h, MF_ALPHA_h, MF_ORDER_h, &
4639 MF_ETAC_v, MF_ALPHA_v, MF_ORDER_v, &
4640 PolyOrder_h, PolyOrder_v )
4641
4643 implicit none
4644
4645 real(rp), intent(inout) :: mfilter_h1d(:,:)
4646 real(rp), intent(inout) :: mfilter_h1d_tr(:,:)
4647 real(rp), intent(inout) :: mfilter_v1d_tr(:,:)
4648 real(rp), intent(in) :: mf_etac_h
4649 real(rp), intent(in) :: mf_alpha_h
4650 integer, intent(in) :: mf_order_h
4651 real(rp), intent(in) :: mf_etac_v
4652 real(rp), intent(in) :: mf_alpha_v
4653 integer, intent(in) :: mf_order_v
4654 integer, intent(in) :: polyorder_h
4655 integer, intent(in) :: polyorder_v
4656
4657 type(lineelement) :: elem1d
4658 type(modalfilter) :: mfilter1d
4659 !--------------------------------------------------------
4660
4661 call elem1d%Init( polyorder_h, .false. )
4662
4663 call mfilter1d%Init( elem1d, &
4664 mf_etac_h, mf_alpha_h, mf_order_h )
4665 mfilter_h1d(:,:) = mfilter1d%FilterMat(:,:)
4666 mfilter_h1d_tr(:,:) = transpose(mfilter_h1d(:,:))
4667
4668 call mfilter1d%Final()
4669 call elem1d%Final()
4670
4671 !-
4672 call elem1d%Init( polyorder_v, .false. )
4673
4674 call mfilter1d%Init( elem1d, &
4675 mf_etac_v, mf_alpha_v, mf_order_v )
4676 mfilter_v1d_tr(:,:) = transpose(mfilter1d%FilterMat(:,:))
4677
4678 call mfilter1d%Final()
4679 call elem1d%Final()
4680
4681 return
4682 end subroutine setup_modalfilter
4683
4684!OCL SERIAL
4685 subroutine setup_elem_operator( D1D, D1D_tr, Lift_mat, IntrpMat_VPOrdM1_tr, &
4686 np, elem3D )
4688 use scale_sparsemat, only: sparsemat
4689 implicit none
4690 integer, intent(in) :: np
4691 class(elementbase3d), intent(in) :: elem3d
4692 real(rp), intent(out) :: d1d(np,np)
4693 real(rp), intent(out) :: d1d_tr(np,np)
4694 real(rp), intent(out) :: lift_mat(np,np,np,6)
4695 real(rp), intent(out) :: intrpmat_vpordm1_tr(np,np)
4696
4697 integer :: p
4698
4699 integer :: p1, p2, p_
4700 real(rp) :: invv_vpordm1(np,np)
4701 real(rp) :: intrpmat_vpordm1(np,np)
4702
4703 type(lineelement) :: elem1d
4704 type(sparsemat) :: lift_sm
4705 integer :: i, j, k
4706 !----------------------------------------------------------
4707
4708 call elem1d%Init( np-1, .false. )
4709 d1d(:,:) = elem1d%Dx1(:,:)
4710 d1d_tr(:,:) = transpose(d1d)
4711
4712 call lift_sm%Init( elem3d%Lift, storage_format='ELL' )
4713 do k=1, np
4714 do j=1, np
4715 do i=1, np
4716 p1 = i + (j-1)*np + (k-1)*np**2
4717 lift_mat(i,j,k,1:6) = &
4718 (/ elem3d%Lift(p1,i+(k-1)*np), &
4719 elem3d%Lift(p1,j+(k-1)*np+(2-1)*np**2), &
4720 elem3d%Lift(p1,i+(k-1)*np+(3-1)*np**2), &
4721 elem3d%Lift(p1,j+(k-1)*np+(4-1)*np**2), &
4722 elem3d%Lift(p1,i+(j-1)*np+(5-1)*np**2), &
4723 elem3d%Lift(p1,i+(j-1)*np+(6-1)*np**2) /)
4724 end do
4725 end do
4726 end do
4727 call lift_sm%Final()
4728
4729 !--
4730
4731 invv_vpordm1(:,:) = elem1d%invV(:,:)
4732 invv_vpordm1(np,:) = 0.0_rp
4733 intrpmat_vpordm1(:,:) = matmul(elem1d%V, invv_vpordm1)
4734 intrpmat_vpordm1_tr(:,:) = transpose(intrpmat_vpordm1)
4735
4736 !-
4737 call elem1d%Final()
4738
4739 return
4740 end subroutine setup_elem_operator
4741
4742end module scale_element_operation_tensorprod3D
module FElib / Element / Base
subroutine, public elementbase3d_init(elem, lumpedmat_flag)
subroutine, public elementbase3d_final(elem)
module FElib / Element / hexahedron
module FElib / Element / line
module FElib / element/ ModalFilter
module FElib / Element / Operation / Base
module FElib / Element / Operation with 3D tensor product elements
subroutine, public element_operation_kernel_matvec_gradlike_dirxyz_p14(mat, mat_tr, vec_in, vec_in_, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_modalfilter_p15(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=15.
subroutine, public element_operation_kernel_matvec_dirz_p15(mat_z_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_dirz_p3(mat_z_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_gradlike_dirxyz_p1(mat, mat_tr, vec_in, vec_in_, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_modalfilter_p13(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=13.
subroutine, public element_operation_kernel_matvec_modalfilter_p8(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=8.
subroutine, public element_operation_kernel_matvec_dirx_p4(mat_x, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the x direction (...
subroutine, public element_operation_kernel_matvec_lift_hexahedral_p3(lift, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with Lift operations with hexahedral element of p...
subroutine, public element_operation_kernel_matvec_dirx_p3(mat_x, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the x direction (...
subroutine, public element_operation_kernel_matvec_divlike_dirxyz_p5(mat, mat_tr, vec_in_x, vec_in_y, vec_in_z, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_gradlike_dirxyz_p6(mat, mat_tr, vec_in, vec_in_, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_divlike_dirxyz_p6(mat, mat_tr, vec_in_x, vec_in_y, vec_in_z, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_diry_p12(mat_y_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the y direction (...
subroutine, public element_operation_kernel_matvec_dirx_p12(mat_x, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the x direction (...
subroutine, public element_operation_kernel_matvec_modalfilter_p14(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=14.
subroutine, public element_operation_kernel_matvec_dirz_p6(mat_z_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_modalfilter_p4(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=4.
subroutine, public element_operation_kernel_matvec_dirz_p8(mat_z_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_diry_p5(mat_y_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the y direction (...
subroutine, public element_operation_kernel_matvec_divlike_dirxyz_p13(mat, mat_tr, vec_in_x, vec_in_y, vec_in_z, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_divlike_dirxyz_p14(mat, mat_tr, vec_in_x, vec_in_y, vec_in_z, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_modalfilter_p6(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=6.
subroutine, public element_operation_kernel_matvec_gradlike_dirxyz_p12(mat, mat_tr, vec_in, vec_in_, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_modalfilter_p10(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=10.
subroutine, public element_operation_kernel_matvec_dirz_p12(mat_z_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_diry_p15(mat_y_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the y direction (...
subroutine, public element_operation_kernel_matvec_dirz_p4(mat_z_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_diry_p3(mat_y_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the y direction (...
subroutine, public element_operation_kernel_matvec_diry_p14(mat_y_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the y direction (...
subroutine, public element_operation_kernel_matvec_modalfilter_p2(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=2.
subroutine, public element_operation_kernel_matvec_diry_p10(mat_y_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the y direction (...
subroutine, public element_operation_kernel_matvec_divlike_dirxyz_p2(mat, mat_tr, vec_in_x, vec_in_y, vec_in_z, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_diry_p9(mat_y_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the y direction (...
subroutine, public element_operation_kernel_matvec_gradlike_dirxyz_p4(mat, mat_tr, vec_in, vec_in_, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_modalfilter_p7(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=7.
subroutine, public element_operation_kernel_matvec_modalfilter_p9(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=9.
subroutine, public element_operation_kernel_matvec_diry_p6(mat_y_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the y direction (...
subroutine, public element_operation_kernel_matvec_gradlike_dirxyz_p5(mat, mat_tr, vec_in, vec_in_, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_lift_hexahedral_p12(lift, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with Lift operations with hexahedral element of p...
subroutine, public element_operation_kernel_matvec_diry_p1(mat_y_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the y direction (...
subroutine, public element_operation_kernel_matvec_modalfilter_p11(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=11.
subroutine, public element_operation_kernel_matvec_dirx_p9(mat_x, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the x direction (...
subroutine, public element_operation_kernel_matvec_lift_hexahedral_p14(lift, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with Lift operations with hexahedral element of p...
subroutine, public element_operation_kernel_matvec_dirx_p10(mat_x, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the x direction (...
subroutine, public element_operation_kernel_matvec_gradlike_dirxyz_p15(mat, mat_tr, vec_in, vec_in_, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_lift_hexahedral_p10(lift, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with Lift operations with hexahedral element of p...
subroutine, public element_operation_kernel_matvec_modalfilter_p12(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=12.
subroutine, public element_operation_kernel_matvec_gradlike_dirxyz_p2(mat, mat_tr, vec_in, vec_in_, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_dirx_p14(mat_x, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the x direction (...
subroutine, public element_operation_kernel_matvec_lift_hexahedral_p2(lift, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with Lift operations with hexahedral element of p...
subroutine, public element_operation_kernel_matvec_diry_p7(mat_y_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the y direction (...
subroutine, public element_operation_kernel_matvec_dirx_p1(mat_x, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the x direction (...
subroutine, public element_operation_kernel_matvec_gradlike_dirxyz_p7(mat, mat_tr, vec_in, vec_in_, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_diry_p2(mat_y_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the y direction (...
subroutine, public element_operation_kernel_matvec_divlike_dirxyz_p8(mat, mat_tr, vec_in_x, vec_in_y, vec_in_z, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_gradlike_dirxyz_p3(mat, mat_tr, vec_in, vec_in_, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_dirx_p7(mat_x, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the x direction (...
subroutine, public element_operation_kernel_matvec_lift_hexahedral_p15(lift, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with Lift operations with hexahedral element of p...
subroutine, public element_operation_kernel_matvec_divlike_dirxyz_p10(mat, mat_tr, vec_in_x, vec_in_y, vec_in_z, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_modalfilter_p1(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=1.
subroutine, public element_operation_kernel_matvec_gradlike_dirxyz_p13(mat, mat_tr, vec_in, vec_in_, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_dirx_p15(mat_x, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the x direction (...
subroutine, public element_operation_kernel_matvec_dirz_p1(mat_z_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_divlike_dirxyz_p7(mat, mat_tr, vec_in_x, vec_in_y, vec_in_z, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_lift_hexahedral_p1(lift, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with Lift operations with hexahedral element of p...
subroutine, public element_operation_kernel_matvec_dirx_p5(mat_x, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the x direction (...
subroutine, public element_operation_kernel_matvec_dirx_p8(mat_x, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the x direction (...
subroutine, public element_operation_kernel_matvec_diry_p11(mat_y_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the y direction (...
subroutine, public element_operation_kernel_matvec_divlike_dirxyz_p9(mat, mat_tr, vec_in_x, vec_in_y, vec_in_z, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_diry_p4(mat_y_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the y direction (...
subroutine, public element_operation_kernel_matvec_modalfilter_p3(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=3.
subroutine, public element_operation_kernel_matvec_lift_hexahedral_p11(lift, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with Lift operations with hexahedral element of p...
subroutine, public element_operation_kernel_matvec_dirz_p7(mat_z_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_divlike_dirxyz_p3(mat, mat_tr, vec_in_x, vec_in_y, vec_in_z, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_dirx_p13(mat_x, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the x direction (...
subroutine, public element_operation_kernel_matvec_lift_hexahedral_p8(lift, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with Lift operations with hexahedral element of p...
subroutine, public element_operation_kernel_matvec_divlike_dirxyz_p1(mat, mat_tr, vec_in_x, vec_in_y, vec_in_z, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_gradlike_dirxyz_p10(mat, mat_tr, vec_in, vec_in_, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_lift_hexahedral_p13(lift, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with Lift operations with hexahedral element of p...
subroutine, public element_operation_kernel_matvec_diry_p8(mat_y_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the y direction (...
subroutine, public element_operation_kernel_matvec_lift_hexahedral_p9(lift, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with Lift operations with hexahedral element of p...
subroutine, public element_operation_kernel_matvec_modalfilter_p5(mat_h1d, mat_h1d_tr, mat_v1d_tr, vec_in, vec_work, vec_out)
Calculate a matrix-vector multiplication associated with 3D modal filtering with p=5.
subroutine, public element_operation_kernel_matvec_gradlike_dirxyz_p8(mat, mat_tr, vec_in, vec_in_, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_lift_hexahedral_p7(lift, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with Lift operations with hexahedral element of p...
subroutine, public element_operation_kernel_matvec_divlike_dirxyz_p4(mat, mat_tr, vec_in_x, vec_in_y, vec_in_z, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_dirz_p10(mat_z_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_dirz_p5(mat_z_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_lift_hexahedral_p4(lift, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with Lift operations with hexahedral element of p...
subroutine, public element_operation_kernel_matvec_dirx_p11(mat_x, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the x direction (...
subroutine, public element_operation_kernel_matvec_dirz_p9(mat_z_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_dirx_p2(mat_x, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the x direction (...
subroutine, public element_operation_kernel_matvec_dirx_p6(mat_x, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the x direction (...
subroutine, public element_operation_kernel_matvec_dirz_p11(mat_z_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_divlike_dirxyz_p15(mat, mat_tr, vec_in_x, vec_in_y, vec_in_z, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_lift_hexahedral_p5(lift, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with Lift operations with hexahedral element of p...
subroutine, public element_operation_kernel_matvec_diry_p13(mat_y_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the y direction (...
subroutine, public element_operation_kernel_matvec_divlike_dirxyz_p11(mat, mat_tr, vec_in_x, vec_in_y, vec_in_z, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_divlike_dirxyz_p12(mat, mat_tr, vec_in_x, vec_in_y, vec_in_z, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_dirz_p14(mat_z_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_gradlike_dirxyz_p9(mat, mat_tr, vec_in, vec_in_, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
subroutine, public element_operation_kernel_matvec_dirz_p13(mat_z_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_lift_hexahedral_p6(lift, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with Lift operations with hexahedral element of p...
subroutine, public element_operation_kernel_matvec_dirz_p2(mat_z_tr, vec_in, vec_out)
Calculate a matrix-vector multiplication associated with mathematical operations in the z direction (...
subroutine, public element_operation_kernel_matvec_gradlike_dirxyz_p11(mat, mat_tr, vec_in, vec_in_, vec_out_x, vec_out_y, vec_out_z)
Calculate a matrix-vector multiplication associated with mathematical operations in the x,...
module FElib / Element / Operation with 3D tensor product elements
subroutine, public elementoperationtensorprod3d_create(elem3d, obj)
module common / sparsemat