48 use,
intrinsic :: iso_c_binding
60 dx_d, dy_d, dz_d, jacinv_d, nel, lx) &
61 bind(c, name =
'hip_dudxyz')
62 use,
intrinsic :: iso_c_binding
63 type(c_ptr),
value :: du_d, u_d, dr_d, ds_d, dt_d
64 type(c_ptr),
value :: dx_d, dy_d, dz_d, jacinv_d
65 integer(c_int) :: nel, lx
70 subroutine hip_cdtp(dtx_d, x_d, dr_d, ds_d, dt_d, &
71 dxt_d, dyt_d, dzt_d, w3_d, nel, lx) &
72 bind(c, name =
'hip_cdtp')
73 use,
intrinsic :: iso_c_binding
74 type(c_ptr),
value :: dtx_d, x_d, dr_d, ds_d, dt_d
75 type(c_ptr),
value :: dxt_d, dyt_d, dzt_d, w3_d
76 integer(c_int) :: nel, lx
82 dx_d, dy_d, dz_d, drdx_d, dsdx_d, dtdx_d, &
83 drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d, &
84 jacinv_d, nel, gdim, lx) &
85 bind(c, name =
'hip_conv1')
86 use,
intrinsic :: iso_c_binding
87 type(c_ptr),
value :: du_d, u_d, vx_d, vy_d, vz_d
88 type(c_ptr),
value :: dx_d, dy_d, dz_d, drdx_d, dsdx_d, dtdx_d
89 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d
90 type(c_ptr),
value :: jacinv_d
91 integer(c_int) :: nel, gdim, lx
97 dx_d, dy_d, dz_d, nel, lx) bind(c, name = 'hip_convect_scalar')
98 use,
intrinsic :: iso_c_binding
99 type(c_ptr),
value :: du_d, u_d
100 type(c_ptr),
value :: cr_d, cs_d, ct_d
101 type(c_ptr),
value :: dx_d, dy_d, dz_d
102 integer(c_int) :: nel, lx
109 drdx_d, dsdx_d, dtdx_d, &
110 drdy_d, dsdy_d, dtdy_d, &
111 drdz_d, dsdz_d, dtdz_d, w3_d, nel, lx) &
112 bind(c, name =
'hip_opgrad')
113 use,
intrinsic :: iso_c_binding
114 type(c_ptr),
value :: ux_d, uy_d, uz_d, u_d
115 type(c_ptr),
value :: dx_d, dy_d, dz_d
116 type(c_ptr),
value :: drdx_d, dsdx_d, dtdx_d
117 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d
118 type(c_ptr),
value :: drdz_d, dsdz_d, dtdz_d
119 type(c_ptr),
value :: w3_d
120 integer(c_int) :: nel, lx
127 drdx_d, dsdx_d, dtdx_d, &
128 drdy_d, dsdy_d, dtdy_d, &
129 drdz_d, dsdz_d, dtdz_d, jacinv_d, nel, lx) &
130 bind(c, name =
'hip_lambda2')
131 use,
intrinsic :: iso_c_binding
132 type(c_ptr),
value :: lambda2_d, u_d, v_d, w_d
133 type(c_ptr),
value :: dx_d, dy_d, dz_d
134 type(c_ptr),
value :: drdx_d, dsdx_d, dtdx_d
135 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d
136 type(c_ptr),
value :: drdz_d, dsdz_d, dtdz_d
137 type(c_ptr),
value :: jacinv_d
138 integer(c_int) :: nel, lx
144 drdx_d, dsdx_d, dtdx_d, drdy_d, dsdy_d, dtdy_d, &
145 drdz_d, dsdz_d, dtdz_d, dr_inv_d, ds_inv_d, dt_inv_d, &
147 bind(c, name =
'hip_cfl')
148 use,
intrinsic :: iso_c_binding
150 type(c_ptr),
value :: u_d, v_d, w_d, drdx_d, dsdx_d, dtdx_d
151 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d
152 type(c_ptr),
value :: dr_inv_d, ds_inv_d, dt_inv_d, jacinv_d
154 integer(c_int) :: nel, lx
161 cyc_msk_d, R11_d, R12_d, ncyc, idir) &
162 bind(c, name =
'hip_rotate_cyc')
163 use,
intrinsic :: iso_c_binding
164 type(c_ptr),
value :: vx_d, vy_d, vz_d
165 type(c_ptr),
value :: x_d, y_d, z_d
166 type(c_ptr),
value :: cyc_msk_d, R11_d, R12_d
167 integer(c_int) :: ncyc, idir
173 drdx_d, dsdx_d, dtdx_d, drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, &
174 dtdz_d, w3_d, nel, lx) bind(c, name = 'hip_set_convect_rst')
175 use,
intrinsic :: iso_c_binding
176 type(c_ptr),
value :: cr_d, cs_d, ct_d
177 type(c_ptr),
value :: cx_d, cy_d, cz_d
178 type(c_ptr),
value :: drdx_d, dsdx_d, dtdx_d
179 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d
180 type(c_ptr),
value :: drdz_d, dsdz_d, dtdz_d
181 type(c_ptr),
value :: w3_d
182 integer(c_int) :: nel, lx
188 subroutine cuda_dudxyz(du_d, u_d, dr_d, ds_d, dt_d, &
189 dx_d, dy_d, dz_d, jacinv_d, nel, lx) &
190 bind(c, name =
'cuda_dudxyz')
191 use,
intrinsic :: iso_c_binding
192 type(c_ptr),
value :: du_d, u_d, dr_d, ds_d, dt_d
193 type(c_ptr),
value :: dx_d, dy_d, dz_d, jacinv_d
194 integer(c_int) :: nel, lx
199 subroutine cuda_cdtp(dtx_d, x_d, dr_d, ds_d, dt_d, &
200 dxt_d, dyt_d, dzt_d, w3_d, nel, lx) &
201 bind(c, name =
'cuda_cdtp')
202 use,
intrinsic :: iso_c_binding
203 type(c_ptr),
value :: dtx_d, x_d, dr_d, ds_d, dt_d
204 type(c_ptr),
value :: dxt_d, dyt_d, dzt_d, w3_d
205 integer(c_int) :: nel, lx
210 subroutine cuda_conv1(du_d, u_d, vx_d, vy_d, vz_d, &
211 dx_d, dy_d, dz_d, drdx_d, dsdx_d, dtdx_d, &
212 drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d, &
213 jacinv_d, nel, gdim, lx) &
214 bind(c, name =
'cuda_conv1')
215 use,
intrinsic :: iso_c_binding
216 type(c_ptr),
value :: du_d, u_d, vx_d, vy_d, vz_d
217 type(c_ptr),
value :: dx_d, dy_d, dz_d, drdx_d, dsdx_d, dtdx_d
218 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d
219 type(c_ptr),
value :: jacinv_d
220 integer(c_int) :: nel, gdim, lx
226 dx_d, dy_d, dz_d, nel, lx) bind(c, name = 'cuda_convect_scalar')
227 use,
intrinsic :: iso_c_binding
228 type(c_ptr),
value :: du_d, u_d
229 type(c_ptr),
value :: cr_d, cs_d, ct_d
230 type(c_ptr),
value :: dx_d, dy_d, dz_d
231 integer(c_int) :: nel, lx
238 drdx_d, dsdx_d, dtdx_d, &
239 drdy_d, dsdy_d, dtdy_d, &
240 drdz_d, dsdz_d, dtdz_d, w3_d, nel, lx) &
241 bind(c, name =
'cuda_opgrad')
242 use,
intrinsic :: iso_c_binding
243 type(c_ptr),
value :: ux_d, uy_d, uz_d, u_d
244 type(c_ptr),
value :: dx_d, dy_d, dz_d
245 type(c_ptr),
value :: drdx_d, dsdx_d, dtdx_d
246 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d
247 type(c_ptr),
value :: drdz_d, dsdz_d, dtdz_d
248 type(c_ptr),
value :: w3_d
249 integer(c_int) :: nel, lx
256 drdx_d, dsdx_d, dtdx_d, &
257 drdy_d, dsdy_d, dtdy_d, &
258 drdz_d, dsdz_d, dtdz_d, jacinv_d, nel, lx) &
259 bind(c, name =
'cuda_lambda2')
260 use,
intrinsic :: iso_c_binding
261 type(c_ptr),
value :: lambda2_d, u_d, v_d, w_d
262 type(c_ptr),
value :: dx_d, dy_d, dz_d
263 type(c_ptr),
value :: drdx_d, dsdx_d, dtdx_d
264 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d
265 type(c_ptr),
value :: drdz_d, dsdz_d, dtdz_d
266 type(c_ptr),
value :: jacinv_d
267 integer(c_int) :: nel, lx
272 real(c_rp) function cuda_cfl(dt, u_d, v_d, w_d, &
273 drdx_d, dsdx_d, dtdx_d, drdy_d, dsdy_d, dtdy_d, &
274 drdz_d, dsdz_d, dtdz_d, dr_inv_d, ds_inv_d, dt_inv_d, &
276 bind(c, name =
'cuda_cfl')
277 use,
intrinsic :: iso_c_binding
279 type(c_ptr),
value :: u_d, v_d, w_d, drdx_d, dsdx_d, dtdx_d
280 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d
281 type(c_ptr),
value :: dr_inv_d, ds_inv_d, dt_inv_d, jacinv_d
283 integer(c_int) :: nel, lx
290 cyc_msk_d, R11_d, R12_d, ncyc, idir) &
291 bind(c, name =
'cuda_rotate_cyc')
292 use,
intrinsic :: iso_c_binding
293 type(c_ptr),
value :: vx_d, vy_d, vz_d
294 type(c_ptr),
value :: x_d, y_d, z_d
295 type(c_ptr),
value :: cyc_msk_d, R11_d, R12_d
296 integer(c_int) :: ncyc, idir
302 drdx_d, dsdx_d, dtdx_d, drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, &
303 dtdz_d, w3_d, nel, lx) bind(c, name = 'cuda_set_convect_rst')
304 use,
intrinsic :: iso_c_binding
305 type(c_ptr),
value :: cr_d, cs_d, ct_d
306 type(c_ptr),
value :: cx_d, cy_d, cz_d
307 type(c_ptr),
value :: drdx_d, dsdx_d, dtdx_d
308 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d
309 type(c_ptr),
value :: drdz_d, dsdz_d, dtdz_d
310 type(c_ptr),
value :: w3_d
311 integer(c_int) :: nel, lx
318 dx_d, dy_d, dz_d, jacinv_d, nel, lx) &
319 bind(c, name =
'opencl_dudxyz')
320 use,
intrinsic :: iso_c_binding
321 type(c_ptr),
value :: du_d, u_d, dr_d, ds_d, dt_d
322 type(c_ptr),
value :: dx_d, dy_d, dz_d, jacinv_d
323 integer(c_int) :: nel, lx
328 subroutine opencl_cdtp(dtx_d, x_d, dr_d, ds_d, dt_d, &
329 dxt_d, dyt_d, dzt_d, w3_d, nel, lx) &
330 bind(c, name =
'opencl_cdtp')
331 use,
intrinsic :: iso_c_binding
332 type(c_ptr),
value :: dtx_d, x_d, dr_d, ds_d, dt_d
333 type(c_ptr),
value :: dxt_d, dyt_d, dzt_d, w3_d
334 integer(c_int) :: nel, lx
340 dx_d, dy_d, dz_d, drdx_d, dsdx_d, dtdx_d, &
341 drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d, &
342 jacinv_d, nel, gdim, lx) &
343 bind(c, name =
'opencl_conv1')
344 use,
intrinsic :: iso_c_binding
345 type(c_ptr),
value :: du_d, u_d, vx_d, vy_d, vz_d
346 type(c_ptr),
value :: dx_d, dy_d, dz_d, drdx_d, dsdx_d, dtdx_d
347 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d
348 type(c_ptr),
value :: jacinv_d
349 integer(c_int) :: nel, gdim, lx
355 dx_d, dy_d, dz_d, nel, lx) bind(c, name = 'opencl_convect_scalar')
356 use,
intrinsic :: iso_c_binding
357 type(c_ptr),
value :: du_d, u_d
358 type(c_ptr),
value :: cr_d, cs_d, ct_d
359 type(c_ptr),
value :: dx_d, dy_d, dz_d
360 integer(c_int) :: nel, lx
367 drdx_d, dsdx_d, dtdx_d, &
368 drdy_d, dsdy_d, dtdy_d, &
369 drdz_d, dsdz_d, dtdz_d, w3_d, nel, lx) &
370 bind(c, name =
'opencl_opgrad')
371 use,
intrinsic :: iso_c_binding
372 type(c_ptr),
value :: ux_d, uy_d, uz_d, u_d
373 type(c_ptr),
value :: dx_d, dy_d, dz_d
374 type(c_ptr),
value :: drdx_d, dsdx_d, dtdx_d
375 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d
376 type(c_ptr),
value :: drdz_d, dsdz_d, dtdz_d
377 type(c_ptr),
value :: w3_d
378 integer(c_int) :: nel, lx
383 real(c_rp) function opencl_cfl(dt, u_d, v_d, w_d, &
384 drdx_d, dsdx_d, dtdx_d, drdy_d, dsdy_d, dtdy_d, &
385 drdz_d, dsdz_d, dtdz_d, dr_inv_d, ds_inv_d, dt_inv_d, &
387 bind(c, name =
'opencl_cfl')
388 use,
intrinsic :: iso_c_binding
390 type(c_ptr),
value :: u_d, v_d, w_d, drdx_d, dsdx_d, dtdx_d
391 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d
392 type(c_ptr),
value :: dr_inv_d, ds_inv_d, dt_inv_d, jacinv_d
394 integer(c_int) :: nel, lx
401 drdx_d, dsdx_d, dtdx_d, &
402 drdy_d, dsdy_d, dtdy_d, &
403 drdz_d, dsdz_d, dtdz_d, jacinv_d, nel, lx) &
404 bind(c, name =
'opencl_lambda2')
405 use,
intrinsic :: iso_c_binding
406 type(c_ptr),
value :: lambda2_d, u_d, v_d, w_d
407 type(c_ptr),
value :: dx_d, dy_d, dz_d
408 type(c_ptr),
value :: drdx_d, dsdx_d, dtdx_d
409 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d
410 type(c_ptr),
value :: drdz_d, dsdz_d, dtdz_d
411 type(c_ptr),
value :: jacinv_d
412 integer(c_int) :: nel, lx
419 cyc_msk_d, R11_d, R12_d, ncyc, idir) &
420 bind(c, name =
'opencl_rotate_cyc')
421 use,
intrinsic :: iso_c_binding
422 type(c_ptr),
value :: vx_d, vy_d, vz_d
423 type(c_ptr),
value :: x_d, y_d, z_d
424 type(c_ptr),
value :: cyc_msk_d, R11_d, R12_d
425 integer(c_int) :: ncyc, idir
431 drdx_d, dsdx_d, dtdx_d, drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, &
432 dtdz_d, w3_d, nel, lx) bind(c, name = 'opencl_set_convect_rst')
433 use,
intrinsic :: iso_c_binding
434 type(c_ptr),
value :: cr_d, cs_d, ct_d
435 type(c_ptr),
value :: cx_d, cy_d, cz_d
436 type(c_ptr),
value :: drdx_d, dsdx_d, dtdx_d
437 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d
438 type(c_ptr),
value :: drdz_d, dsdz_d, dtdz_d
439 type(c_ptr),
value :: w3_d
440 integer(c_int) :: nel, lx
446 subroutine metal_dudxyz(du_d, u_d, dr_d, ds_d, dt_d, &
447 dx_d, dy_d, dz_d, jacinv_d, nel, lx) &
448 bind(c, name =
'metal_dudxyz')
449 use,
intrinsic :: iso_c_binding
450 type(c_ptr),
value :: du_d, u_d, dr_d, ds_d, dt_d
451 type(c_ptr),
value :: dx_d, dy_d, dz_d, jacinv_d
452 integer(c_int) :: nel, lx
453 end subroutine metal_dudxyz
457 subroutine metal_cdtp(dtx_d, x_d, dr_d, ds_d, dt_d, &
458 dxt_d, dyt_d, dzt_d, w3_d, nel, lx) &
459 bind(c, name =
'metal_cdtp')
460 use,
intrinsic :: iso_c_binding
461 type(c_ptr),
value :: dtx_d, x_d, dr_d, ds_d, dt_d
462 type(c_ptr),
value :: dxt_d, dyt_d, dzt_d, w3_d
463 integer(c_int) :: nel, lx
464 end subroutine metal_cdtp
468 subroutine metal_conv1(du_d, u_d, vx_d, vy_d, vz_d, &
469 dx_d, dy_d, dz_d, drdx_d, dsdx_d, dtdx_d, &
470 drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d, &
471 jacinv_d, nel, gdim, lx) &
472 bind(c, name =
'metal_conv1')
473 use,
intrinsic :: iso_c_binding
474 type(c_ptr),
value :: du_d, u_d, vx_d, vy_d, vz_d
475 type(c_ptr),
value :: dx_d, dy_d, dz_d, drdx_d, dsdx_d, dtdx_d
476 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d
477 type(c_ptr),
value :: jacinv_d
478 integer(c_int) :: nel, gdim, lx
479 end subroutine metal_conv1
483 subroutine metal_convect_scalar(du_d, u_d, cr_d, cs_d, ct_d, &
484 dx_d, dy_d, dz_d, nel, lx) bind(c, name = 'metal_convect_scalar')
485 use,
intrinsic :: iso_c_binding
486 type(c_ptr),
value :: du_d, u_d
487 type(c_ptr),
value :: cr_d, cs_d, ct_d
488 type(c_ptr),
value :: dx_d, dy_d, dz_d
489 integer(c_int) :: nel, lx
490 end subroutine metal_convect_scalar
494 subroutine metal_opgrad(ux_d, uy_d, uz_d, u_d, &
496 drdx_d, dsdx_d, dtdx_d, &
497 drdy_d, dsdy_d, dtdy_d, &
498 drdz_d, dsdz_d, dtdz_d, w3_d, nel, lx) &
499 bind(c, name =
'metal_opgrad')
500 use,
intrinsic :: iso_c_binding
501 type(c_ptr),
value :: ux_d, uy_d, uz_d, u_d
502 type(c_ptr),
value :: dx_d, dy_d, dz_d
503 type(c_ptr),
value :: drdx_d, dsdx_d, dtdx_d
504 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d
505 type(c_ptr),
value :: drdz_d, dsdz_d, dtdz_d
506 type(c_ptr),
value :: w3_d
507 integer(c_int) :: nel, lx
508 end subroutine metal_opgrad
512 real(c_rp) function metal_cfl(dt, u_d, v_d, w_d, &
513 drdx_d, dsdx_d, dtdx_d, drdy_d, dsdy_d, dtdy_d, &
514 drdz_d, dsdz_d, dtdz_d, dr_inv_d, ds_inv_d, dt_inv_d, &
516 bind(c, name =
'metal_cfl')
517 use,
intrinsic :: iso_c_binding
519 type(c_ptr),
value :: u_d, v_d, w_d, drdx_d, dsdx_d, dtdx_d
520 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d
521 type(c_ptr),
value :: dr_inv_d, ds_inv_d, dt_inv_d, jacinv_d
523 integer(c_int) :: nel, lx
524 end function metal_cfl
528 subroutine metal_lambda2(lambda2_d, u_d, v_d, w_d, &
530 drdx_d, dsdx_d, dtdx_d, &
531 drdy_d, dsdy_d, dtdy_d, &
532 drdz_d, dsdz_d, dtdz_d, jacinv_d, nel, lx) &
533 bind(c, name =
'metal_lambda2')
534 use,
intrinsic :: iso_c_binding
535 type(c_ptr),
value :: lambda2_d, u_d, v_d, w_d
536 type(c_ptr),
value :: dx_d, dy_d, dz_d
537 type(c_ptr),
value :: drdx_d, dsdx_d, dtdx_d
538 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d
539 type(c_ptr),
value :: drdz_d, dsdz_d, dtdz_d
540 type(c_ptr),
value :: jacinv_d
541 integer(c_int) :: nel, lx
542 end subroutine metal_lambda2
546 subroutine metal_rotate_cyc(vx_d, vy_d, vz_d, &
548 cyc_msk_d, R11_d, R12_d, ncyc, idir) &
549 bind(c, name =
'metal_rotate_cyc')
550 use,
intrinsic :: iso_c_binding
551 type(c_ptr),
value :: vx_d, vy_d, vz_d
552 type(c_ptr),
value :: x_d, y_d, z_d
553 type(c_ptr),
value :: cyc_msk_d, R11_d, R12_d
554 integer(c_int) :: ncyc, idir
555 end subroutine metal_rotate_cyc
559 subroutine metal_set_convect_rst(cr_d, cs_d, ct_d, cx_d, cy_d, cz_d, &
560 drdx_d, dsdx_d, dtdx_d, drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, &
561 dtdz_d, w3_d, nel, lx) bind(c, name = 'metal_set_convect_rst')
562 use,
intrinsic :: iso_c_binding
563 type(c_ptr),
value :: cr_d, cs_d, ct_d
564 type(c_ptr),
value :: cx_d, cy_d, cz_d
565 type(c_ptr),
value :: drdx_d, dsdx_d, dtdx_d
566 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d
567 type(c_ptr),
value :: drdz_d, dsdz_d, dtdz_d
568 type(c_ptr),
value :: w3_d
569 integer(c_int) :: nel, lx
570 end subroutine metal_set_convect_rst
578 type(
coef_t),
intent(in),
target :: coef
579 type(c_ptr),
intent(inout) :: du_d
580 type(c_ptr),
intent(in) :: u_d, dr_d, ds_d, dt_d
582 associate(xh => coef%Xh, msh => coef%msh, dof => coef%dof)
584 call hip_dudxyz(du_d, u_d, dr_d, ds_d, dt_d, &
585 xh%dx_d, xh%dy_d, xh%dz_d, coef%jacinv_d, &
589 xh%dx_d, xh%dy_d, xh%dz_d, coef%jacinv_d, &
593 xh%dx_d, xh%dy_d, xh%dz_d, coef%jacinv_d, &
596 call metal_dudxyz(du_d, u_d, dr_d, ds_d, dt_d, &
597 xh%dx_d, xh%dy_d, xh%dz_d, coef%jacinv_d, &
600 call neko_error(
'No device backend configured')
607 type(
coef_t),
intent(in),
target :: coef
608 type(c_ptr),
intent(inout) :: ux_d, uy_d, uz_d
609 type(c_ptr),
intent(in) :: u_d
611 associate(xh => coef%Xh, msh => coef%msh)
614 xh%dx_d, xh%dy_d, xh%dz_d, &
615 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
616 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
617 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
618 xh%w3_d, msh%nelv, xh%lx)
621 xh%dx_d, xh%dy_d, xh%dz_d, &
622 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
623 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
624 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
625 xh%w3_d, msh%nelv, xh%lx)
628 xh%dx_d, xh%dy_d, xh%dz_d, &
629 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
630 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
631 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
632 xh%w3_d, msh%nelv, xh%lx)
634 call metal_opgrad(ux_d, uy_d, uz_d, u_d, &
635 xh%dx_d, xh%dy_d, xh%dz_d, &
636 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
637 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
638 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
639 xh%w3_d, msh%nelv, xh%lx)
641 call neko_error(
'No device backend configured')
653 integer,
intent(in) :: n
654 integer(kind=i8),
intent(in) :: glb_n_points
655 type(c_ptr),
intent(inout) :: x_d
664 type(
coef_t),
intent(in) :: coef
665 type(c_ptr),
intent(inout) :: lambda2_d
666 type(c_ptr),
intent(in) :: u_d, v_d, w_d
669 coef%Xh%dx_d, coef%Xh%dy_d, coef%Xh%dz_d, &
670 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
671 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
672 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
673 coef%jacinv_d, coef%msh%nelv, coef%Xh%lx)
676 coef%Xh%dx_d, coef%Xh%dy_d, coef%Xh%dz_d, &
677 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
678 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
679 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
680 coef%jacinv_d, coef%msh%nelv, coef%Xh%lx)
683 coef%Xh%dx_d, coef%Xh%dy_d, coef%Xh%dz_d, &
684 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
685 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
686 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
687 coef%jacinv_d, coef%msh%nelv, coef%Xh%lx)
689 call metal_lambda2(lambda2_d, u_d, v_d, w_d, &
690 coef%Xh%dx_d, coef%Xh%dy_d, coef%Xh%dz_d, &
691 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
692 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
693 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
694 coef%jacinv_d, coef%msh%nelv, coef%Xh%lx)
696 call neko_error(
'No device backend configured')
701 type(
coef_t),
intent(in),
target :: coef
702 type(c_ptr),
intent(inout) :: dtx_d, x_d
703 type(c_ptr),
intent(in) :: dr_d, ds_d, dt_d
705 associate(xh => coef%Xh, msh => coef%msh, dof => coef%dof)
707 call hip_cdtp(dtx_d, x_d, dr_d, ds_d, dt_d, &
708 xh%dxt_d, xh%dyt_d, xh%dzt_d, xh%w3_d, &
711 call cuda_cdtp(dtx_d, x_d, dr_d, ds_d, dt_d, &
712 xh%dxt_d, xh%dyt_d, xh%dzt_d, xh%w3_d, &
716 xh%dxt_d, xh%dyt_d, xh%dzt_d, xh%w3_d, &
719 call metal_cdtp(dtx_d, x_d, dr_d, ds_d, dt_d, &
720 xh%dxt_d, xh%dyt_d, xh%dzt_d, xh%w3_d, &
723 call neko_error(
'No device backend configured')
730 type(
space_t),
intent(in) :: xh
731 type(
coef_t),
intent(in),
target :: coef
732 integer,
intent(in) :: nelv, gdim
733 type(c_ptr),
intent(inout) :: du_d
734 type(c_ptr),
intent(in) :: u_d, vx_d, vy_d, vz_d
736 associate(msh => coef%msh, dof => coef%dof)
738 call hip_conv1(du_d, u_d, vx_d, vy_d, vz_d, &
739 xh%dx_d, xh%dy_d, xh%dz_d, &
740 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
741 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
742 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
743 coef%jacinv_d, msh%nelv, msh%gdim, xh%lx)
745 call cuda_conv1(du_d, u_d, vx_d, vy_d, vz_d, &
746 xh%dx_d, xh%dy_d, xh%dz_d, &
747 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
748 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
749 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
750 coef%jacinv_d, msh%nelv, msh%gdim, xh%lx)
753 xh%dx_d, xh%dy_d, xh%dz_d, &
754 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
755 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
756 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
757 coef%jacinv_d, msh%nelv, msh%gdim, xh%lx)
759 call metal_conv1(du_d, u_d, vx_d, vy_d, vz_d, &
760 xh%dx_d, xh%dy_d, xh%dz_d, &
761 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
762 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
763 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
764 coef%jacinv_d, msh%nelv, msh%gdim, xh%lx)
766 call neko_error(
'No device backend configured')
773 Xh_GLL, Xh_GL, coef_GLL, coef_GL, GLL_to_GL)
774 type(
space_t),
intent(in) :: xh_gl
775 type(
space_t),
intent(in) :: xh_gll
776 type(
coef_t),
intent(in) :: coef_gll
777 type(
coef_t),
intent(in) :: coef_gl
779 real(kind=
rp),
intent(inout) :: &
780 du(xh_gll%lx, xh_gll%ly, xh_gll%lz, coef_gl%msh%nelv)
781 type(c_ptr) :: cr_d, cs_d, ct_d, u_d
784 integer :: temp_index
785 integer :: n_gl, n_gll
787 n_gl = coef_gl%msh%nelv * xh_gl%lxyz
788 n_gll = coef_gl%msh%nelv * xh_gll%lxyz
794 associate(xh => xh_gl, nelv => coef_gl%msh%nelv, lx => xh_gl%lx, &
798 xh%dx_d, xh%dy_d, xh%dz_d, nelv, lx)
801 xh%dx_d, xh%dy_d, xh%dz_d, nelv, lx)
804 xh%dx_d, xh%dy_d, xh%dz_d, nelv, lx)
806 call metal_convect_scalar(ud_d, u_d, cr_d, cs_d, ct_d, &
807 xh%dx_d, xh%dy_d, xh%dz_d, nelv, lx)
809 call neko_error(
'No device backend configured')
812 call gll_to_gl%map(du, ud%x, nelv, xh_gll)
813 call coef_gll%gs_h%op(du, n_gll, gs_op_add)
823 type(field_t),
intent(inout) :: w1
824 type(field_t),
intent(inout) :: w2
825 type(field_t),
intent(inout) :: w3
826 type(field_t),
intent(in) :: u1
827 type(field_t),
intent(in) :: u2
828 type(field_t),
intent(in) :: u3
829 type(field_t),
intent(inout) :: work1
830 type(field_t),
intent(inout) :: work2
831 type(coef_t),
intent(in) :: c_xh
832 type(c_ptr),
optional,
intent(inout) :: event
833 integer :: gdim, n, nelv
840#if defined(HAVE_HIP) || defined(HAVE_CUDA) || defined(HAVE_OPENCL) || defined(HAVE_METAL)
843 c_xh%drdy_d, c_xh%dsdy_d, c_xh%dtdy_d,&
844 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
845 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
848 c_xh%drdy_d, c_xh%dsdy_d, c_xh%dtdy_d,&
849 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
850 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
853 c_xh%drdy_d, c_xh%dsdy_d, c_xh%dtdy_d,&
854 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
855 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
857 call metal_dudxyz(work1%x_d, u3%x_d, &
858 c_xh%drdy_d, c_xh%dsdy_d, c_xh%dtdy_d,&
859 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
860 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
862 if (gdim .eq. 3)
then
865 c_xh%drdz_d, c_xh%dsdz_d, c_xh%dtdz_d,&
866 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
867 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
870 c_xh%drdz_d, c_xh%dsdz_d, c_xh%dtdz_d,&
871 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
872 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
875 c_xh%drdz_d, c_xh%dsdz_d, c_xh%dtdz_d,&
876 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
877 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
879 call metal_dudxyz(work2%x_d, u2%x_d, &
880 c_xh%drdz_d, c_xh%dsdz_d, c_xh%dtdz_d,&
881 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
882 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
884 call device_sub3(w1%x_d, work1%x_d, work2%x_d, n)
886 call device_copy(w1%x_d, work1%x_d, n)
889 if (gdim .eq. 3)
then
892 c_xh%drdz_d, c_xh%dsdz_d, c_xh%dtdz_d,&
893 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
894 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
896 c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
897 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
898 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
901 c_xh%drdz_d, c_xh%dsdz_d, c_xh%dtdz_d,&
902 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
903 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
905 c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
906 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
907 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
910 c_xh%drdz_d, c_xh%dsdz_d, c_xh%dtdz_d,&
911 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
912 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
914 c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
915 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
916 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
918 call metal_dudxyz(work1%x_d, u1%x_d, &
919 c_xh%drdz_d, c_xh%dsdz_d, c_xh%dtdz_d,&
920 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
921 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
922 call metal_dudxyz(work2%x_d, u3%x_d, &
923 c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
924 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
925 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
927 call device_sub3(w2%x_d, work1%x_d, work2%x_d, n)
929 call device_rzero (work1%x_d, n)
932 c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
933 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
934 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
937 c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
938 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
939 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
942 c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
943 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
944 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
946 call metal_dudxyz(work2%x_d, u3%x_d, &
947 c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
948 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
949 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
951 call device_sub3(w2%x_d, work1%x_d, work2%x_d, n)
956 c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
957 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
958 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
960 c_xh%drdy_d, c_xh%dsdy_d, c_xh%dtdy_d,&
961 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
962 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
965 c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
966 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
967 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
969 c_xh%drdy_d, c_xh%dsdy_d, c_xh%dtdy_d,&
970 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
971 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
974 c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
975 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
976 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
978 c_xh%drdy_d, c_xh%dsdy_d, c_xh%dtdy_d,&
979 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
980 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
982 call metal_dudxyz(work1%x_d, u2%x_d, &
983 c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
984 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
985 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
986 call metal_dudxyz(work2%x_d, u1%x_d, &
987 c_xh%drdy_d, c_xh%dsdy_d, c_xh%dtdy_d,&
988 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
989 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
991 call device_sub3(w3%x_d, work1%x_d, work2%x_d, n)
994 call device_opcolv(w1%x_d, w2%x_d, w3%x_d, c_xh%B_d, gdim, n)
997 if (
present(event))
then
998 call c_xh%gs_h%op(w1%x, w2%x, w3%x, n, gs_op_add, event)
999 call device_event_sync(event)
1001 call c_xh%gs_h%op(w1%x, w2%x, w3%x, n, gs_op_add)
1005 call device_opcolv(w1%x_d, w2%x_d, w3%x_d, c_xh%Binv_d, gdim, n)
1008 call neko_error(
'No device backend configured')
1015 type(coef_t) :: coef
1016 integer :: nelv, gdim
1018 type(c_ptr),
intent(in) :: u_d, v_d, w_d
1019 real(kind=rp) :: cfl
1022 cfl =
hip_cfl(dt, u_d, v_d, w_d, &
1023 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
1024 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
1025 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
1026 xh%dr_inv_d, xh%ds_inv_d, xh%dt_inv_d, &
1027 coef%jacinv_d, nelv, xh%lx)
1029 cfl =
cuda_cfl(dt, u_d, v_d, w_d, &
1030 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
1031 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
1032 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
1033 xh%dr_inv_d, xh%ds_inv_d, xh%dt_inv_d, &
1034 coef%jacinv_d, nelv, xh%lx)
1037 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
1038 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
1039 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
1040 xh%dr_inv_d, xh%ds_inv_d, xh%dt_inv_d, &
1041 coef%jacinv_d, nelv, xh%lx)
1043 cfl = metal_cfl(dt, u_d, v_d, w_d, &
1044 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
1045 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
1046 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
1047 xh%dr_inv_d, xh%ds_inv_d, xh%dt_inv_d, &
1048 coef%jacinv_d, nelv, xh%lx)
1051 call neko_error(
'No device backend configured')
1056 type(c_ptr),
intent(inout) :: vx_d, vy_d, vz_d
1057 integer,
intent(in) :: idir
1058 type(coef_t),
intent(in) :: coef
1061 ncyc = coef%cyc_msk(0) - 1
1063 if (ncyc .le. 0)
return
1067 coef%dof%x_d, coef%dof%y_d, coef%dof%z_d, &
1068 coef%cyc_msk_d, coef%R11_d, coef%R12_d, &
1072 coef%dof%x_d, coef%dof%y_d, coef%dof%z_d, &
1073 coef%cyc_msk_d, coef%R11_d, coef%R12_d, &
1077 coef%dof%x_d, coef%dof%y_d, coef%dof%z_d, &
1078 coef%cyc_msk_d, coef%R11_d, coef%R12_d, &
1081 call metal_rotate_cyc(vx_d, vy_d, vz_d, &
1082 coef%dof%x_d, coef%dof%y_d, coef%dof%z_d, &
1083 coef%cyc_msk_d, coef%R11_d, coef%R12_d, &
1086 call neko_error(
'No device backend configured for rotate_cyc')
1092 type(space_t),
intent(inout) :: xh
1093 type(coef_t),
intent(inout) :: coef
1094 type(c_ptr),
intent(inout) :: cr_d, cs_d, ct_d, cx_d, cy_d, cz_d
1098 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
1099 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
1100 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
1101 xh%w3_d, coef%msh%nelv, xh%lx)
1104 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
1105 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
1106 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
1107 xh%w3_d, coef%msh%nelv, xh%lx)
1110 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
1111 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
1112 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
1113 xh%w3_d, coef%msh%nelv, xh%lx)
1115 call metal_set_convect_rst(cr_d, cs_d, ct_d, cx_d, cy_d, cz_d, &
1116 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
1117 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
1118 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
1119 xh%w3_d, coef%msh%nelv, xh%lx)
1121 call neko_error(
'No device backend configured')
Return the device pointer for an associated Fortran array.
subroutine, public device_sub3(a_d, b_d, c_d, n, strm)
Vector subtraction .
real(kind=rp) function, public device_glsum(a_d, n, strm)
Sum a vector of length n.
subroutine, public device_rzero(a_d, n, strm)
Zero a real vector.
subroutine, public device_copy(a_d, b_d, n, strm)
Copy a vector .
subroutine, public device_col2(a_d, b_d, n, strm)
Vector multiplication .
subroutine, public device_opcolv(a1_d, a2_d, a3_d, c_d, gdim, n)
Device abstraction, common interface for various accelerators.
subroutine, public device_event_sync(event)
Synchronize an event.
Routines to interpolate between different spaces.
integer, parameter, public i8
integer, parameter, public c_rp
integer, parameter, public rp
Global precision used in computations.
Operators accelerator backends.
subroutine, public opr_device_convect_scalar(du, u_d, cr_d, cs_d, ct_d, xh_gll, xh_gl, coef_gll, coef_gl, gll_to_gl)
subroutine, public opr_device_cdtp(dtx_d, x_d, dr_d, ds_d, dt_d, coef)
subroutine, public opr_device_dudxyz(du_d, u_d, dr_d, ds_d, dt_d, coef)
real(kind=rp) function, public opr_device_cfl(dt, u_d, v_d, w_d, xh, coef, nelv, gdim)
subroutine, public opr_device_conv1(du_d, u_d, vx_d, vy_d, vz_d, xh, coef, nelv, gdim)
subroutine, public device_ortho(x_d, glb_n_points, n)
Othogonalize with regard to vector (1,1,1,1,1,1...,1)^T.
subroutine, public opr_device_curl(w1, w2, w3, u1, u2, u3, work1, work2, c_xh, event)
subroutine, public opr_device_set_convect_rst(cr_d, cs_d, ct_d, cx_d, cy_d, cz_d, xh, coef)
subroutine, public opr_device_lambda2(lambda2_d, u_d, v_d, w_d, coef)
subroutine, public opr_device_rotate_cyc(vx_d, vy_d, vz_d, idir, coef)
subroutine, public opr_device_opgrad(ux_d, uy_d, uz_d, u_d, coef)
Defines a registry for storing and requesting temporary objects This can be used when you have a func...
type(scratch_registry_t), target, public neko_scratch_registry
Global scratch registry.
Defines a function space.
void opencl_cdtp(void *dtx, void *x, void *dr, void *ds, void *dt, void *dxt, void *dyt, void *dzt, void *w3, int *nel, int *lx)
void cuda_cdtp(void *dtx, void *x, void *dr, void *ds, void *dt, void *dxt, void *dyt, void *dzt, void *w3, int *nel, int *lx)
real opencl_cfl(real *dt, void *u, void *v, void *w, void *drdx, void *dsdx, void *dtdx, void *drdy, void *dsdy, void *dtdy, void *drdz, void *dsdz, void *dtdz, void *dr_inv, void *ds_inv, void *dt_inv, void *jacinv, int *nel, int *lx)
real cuda_cfl(real *dt, void *u, void *v, void *w, void *drdx, void *dsdx, void *dtdx, void *drdy, void *dsdy, void *dtdy, void *drdz, void *dsdz, void *dtdz, void *dr_inv, void *ds_inv, void *dt_inv, void *jacinv, int *nel, int *lx)
void opencl_conv1(void *du, void *u, void *vx, void *vy, void *vz, void *dx, void *dy, void *dz, void *drdx, void *dsdx, void *dtdx, void *drdy, void *dsdy, void *dtdy, void *drdz, void *dsdz, void *dtdz, void *jacinv, int *nel, int *gdim, int *lx)
void cuda_conv1(void *du, void *u, void *vx, void *vy, void *vz, void *dx, void *dy, void *dz, void *drdx, void *dsdx, void *dtdx, void *drdy, void *dsdy, void *dtdy, void *drdz, void *dsdz, void *dtdz, void *jacinv, int *nel, int *gdim, int *lx)
void opencl_convect_scalar(void *du, void *u, void *cr, void *cs, void *ct, void *dx, void *dy, void *dz, int *nel, int *lx)
void cuda_convect_scalar(void *du, void *u, void *cr, void *cs, void *ct, void *dx, void *dy, void *dz, int *nel, int *lx)
void opencl_dudxyz(void *du, void *u, void *dr, void *ds, void *dt, void *dx, void *dy, void *dz, void *jacinv, int *nel, int *lx)
void cuda_dudxyz(void *du, void *u, void *dr, void *ds, void *dt, void *dx, void *dy, void *dz, void *jacinv, int *nel, int *lx)
void opencl_lambda2(void *lambda2, void *u, void *v, void *w, void *dx, void *dy, void *dz, void *drdx, void *dsdx, void *dtdx, void *drdy, void *dsdy, void *dtdy, void *drdz, void *dsdz, void *dtdz, void *jacinv, int *nel, int *lx)
void cuda_lambda2(void *lambda2, void *u, void *v, void *w, void *dx, void *dy, void *dz, void *drdx, void *dsdx, void *dtdx, void *drdy, void *dsdy, void *dtdy, void *drdz, void *dsdz, void *dtdz, void *jacinv, int *nel, int *lx)
void opencl_opgrad(void *ux, void *uy, void *uz, void *u, void *dx, void *dy, void *dz, void *drdx, void *dsdx, void *dtdx, void *drdy, void *dsdy, void *dtdy, void *drdz, void *dsdz, void *dtdz, void *w3, int *nel, int *lx)
void cuda_opgrad(void *ux, void *uy, void *uz, void *u, void *dx, void *dy, void *dz, void *drdx, void *dsdx, void *dtdx, void *drdy, void *dsdy, void *dtdy, void *drdz, void *dsdz, void *dtdz, void *w3, int *nel, int *lx)
void opencl_rotate_cyc(void *vx, void *vy, void *vz, void *x, void *y, void *z, void *cyc_msk, void *R11, void *R12, int *ncyc, int *idir)
void cuda_rotate_cyc(void *vx, void *vy, void *vz, void *x, void *y, void *z, void *cyc_msk, void *R11, void *R12, int *ncyc, int *idir)
void opencl_set_convect_rst(void *cr, void *cs, void *ct, void *cx, void *cy, void *cz, void *drdx, void *dsdx, void *dtdx, void *drdy, void *dsdy, void *dtdy, void *drdz, void *dsdz, void *dtdz, void *w3, int *nel, int *lx)
void cuda_set_convect_rst(void *cr, void *cs, void *ct, void *cx, void *cy, void *cz, void *drdx, void *dsdx, void *dtdx, void *drdy, void *dsdy, void *dtdy, void *drdz, void *dsdz, void *dtdz, void *w3, int *nel, int *lx)
Coefficients defined on a given (mesh, ) tuple. Arrays use indices (i,j,k,e): element e,...
Interpolation between two space::space_t.
The function space for the SEM solution fields.