46 use,
intrinsic :: iso_c_binding
56 dx_d, dy_d, dz_d, jacinv_d, nel, lx) &
57 bind(c, name=
'hip_dudxyz')
58 use,
intrinsic :: iso_c_binding
59 type(c_ptr),
value :: du_d, u_d, dr_d, ds_d, dt_d
60 type(c_ptr),
value :: dx_d, dy_d, dz_d, jacinv_d
61 integer(c_int) :: nel, lx
66 subroutine hip_cdtp(dtx_d, x_d, dr_d, ds_d, dt_d, &
67 dxt_d, dyt_d, dzt_d, B_d, jac_d, nel, lx) &
68 bind(c, name=
'hip_cdtp')
69 use,
intrinsic :: iso_c_binding
70 type(c_ptr),
value :: dtx_d, x_d, dr_d, ds_d, dt_d
71 type(c_ptr),
value :: dxt_d, dyt_d, dzt_d, B_d, jac_d
72 integer(c_int) :: nel, lx
78 dx_d, dy_d, dz_d, drdx_d, dsdx_d, dtdx_d, &
79 drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d, &
80 jacinv_d, nel, gdim, lx) &
81 bind(c, name=
'hip_conv1')
82 use,
intrinsic :: iso_c_binding
83 type(c_ptr),
value :: du_d, u_d, vx_d, vy_d, vz_d
84 type(c_ptr),
value :: dx_d, dy_d, dz_d, drdx_d, dsdx_d, dtdx_d
85 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d
86 type(c_ptr),
value :: jacinv_d
87 integer(c_int) :: nel, gdim, lx
94 drdx_d, dsdx_d, dtdx_d, &
95 drdy_d, dsdy_d, dtdy_d, &
96 drdz_d, dsdz_d, dtdz_d, w3_d, nel, lx) &
97 bind(c, name=
'hip_opgrad')
98 use,
intrinsic :: iso_c_binding
99 type(c_ptr),
value :: ux_d, uy_d, uz_d, u_d
100 type(c_ptr),
value :: dx_d, dy_d, dz_d
101 type(c_ptr),
value :: drdx_d, dsdx_d, dtdx_d
102 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d
103 type(c_ptr),
value :: drdz_d, dsdz_d, dtdz_d
104 type(c_ptr),
value :: w3_d
105 integer(c_int) :: nel, lx
112 drdx_d, dsdx_d, dtdx_d, &
113 drdy_d, dsdy_d, dtdy_d, &
114 drdz_d, dsdz_d, dtdz_d, jacinv_d, nel, lx) &
115 bind(c, name=
'hip_lambda2')
116 use,
intrinsic :: iso_c_binding
117 type(c_ptr),
value :: lambda2_d, u_d, v_d, w_d
118 type(c_ptr),
value :: dx_d, dy_d, dz_d
119 type(c_ptr),
value :: drdx_d, dsdx_d, dtdx_d
120 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d
121 type(c_ptr),
value :: drdz_d, dsdz_d, dtdz_d
122 type(c_ptr),
value :: jacinv_d
123 integer(c_int) :: nel, lx
129 drdx_d, dsdx_d, dtdx_d, drdy_d, dsdy_d, dtdy_d, &
130 drdz_d, dsdz_d, dtdz_d, dr_inv_d, ds_inv_d, dt_inv_d, &
132 bind(c, name=
'hip_cfl')
133 use,
intrinsic :: iso_c_binding
135 type(c_ptr),
value :: u_d, v_d, w_d, drdx_d, dsdx_d, dtdx_d
136 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d
137 type(c_ptr),
value :: dr_inv_d, ds_inv_d, dt_inv_d, jacinv_d
139 integer(c_int) :: nel, lx
144 subroutine cuda_dudxyz(du_d, u_d, dr_d, ds_d, dt_d, &
145 dx_d, dy_d, dz_d, jacinv_d, nel, lx) &
146 bind(c, name=
'cuda_dudxyz')
147 use,
intrinsic :: iso_c_binding
148 type(c_ptr),
value :: du_d, u_d, dr_d, ds_d, dt_d
149 type(c_ptr),
value :: dx_d, dy_d, dz_d, jacinv_d
150 integer(c_int) :: nel, lx
155 subroutine cuda_cdtp(dtx_d, x_d, dr_d, ds_d, dt_d, &
156 dxt_d, dyt_d, dzt_d, B_d, jac_d, nel, lx) &
157 bind(c, name=
'cuda_cdtp')
158 use,
intrinsic :: iso_c_binding
159 type(c_ptr),
value :: dtx_d, x_d, dr_d, ds_d, dt_d
160 type(c_ptr),
value :: dxt_d, dyt_d, dzt_d, b_d, jac_d
161 integer(c_int) :: nel, lx
166 subroutine cuda_conv1(du_d, u_d, vx_d, vy_d, vz_d, &
167 dx_d, dy_d, dz_d, drdx_d, dsdx_d, dtdx_d, &
168 drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d, &
169 jacinv_d, nel, gdim, lx) &
170 bind(c, name=
'cuda_conv1')
171 use,
intrinsic :: iso_c_binding
172 type(c_ptr),
value :: du_d, u_d, vx_d, vy_d, vz_d
173 type(c_ptr),
value :: dx_d, dy_d, dz_d, drdx_d, dsdx_d, dtdx_d
174 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d
175 type(c_ptr),
value :: jacinv_d
176 integer(c_int) :: nel, gdim, lx
183 drdx_d, dsdx_d, dtdx_d, &
184 drdy_d, dsdy_d, dtdy_d, &
185 drdz_d, dsdz_d, dtdz_d, w3_d, nel, lx) &
186 bind(c, name=
'cuda_opgrad')
187 use,
intrinsic :: iso_c_binding
188 type(c_ptr),
value :: ux_d, uy_d, uz_d, u_d
189 type(c_ptr),
value :: dx_d, dy_d, dz_d
190 type(c_ptr),
value :: drdx_d, dsdx_d, dtdx_d
191 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d
192 type(c_ptr),
value :: drdz_d, dsdz_d, dtdz_d
193 type(c_ptr),
value :: w3_d
194 integer(c_int) :: nel, lx
201 drdx_d, dsdx_d, dtdx_d, &
202 drdy_d, dsdy_d, dtdy_d, &
203 drdz_d, dsdz_d, dtdz_d, jacinv_d, nel, lx) &
204 bind(c, name=
'cuda_lambda2')
205 use,
intrinsic :: iso_c_binding
206 type(c_ptr),
value :: lambda2_d, u_d, v_d, w_d
207 type(c_ptr),
value :: dx_d, dy_d, dz_d
208 type(c_ptr),
value :: drdx_d, dsdx_d, dtdx_d
209 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d
210 type(c_ptr),
value :: drdz_d, dsdz_d, dtdz_d
211 type(c_ptr),
value :: jacinv_d
212 integer(c_int) :: nel, lx
218 real(c_rp) function
cuda_cfl(dt, u_d, v_d, w_d, &
219 drdx_d, dsdx_d, dtdx_d, drdy_d, dsdy_d, dtdy_d, &
220 drdz_d, dsdz_d, dtdz_d, dr_inv_d, ds_inv_d, dt_inv_d, &
222 bind(c, name=
'cuda_cfl')
223 use,
intrinsic :: iso_c_binding
225 type(c_ptr),
value :: u_d, v_d, w_d, drdx_d, dsdx_d, dtdx_d
226 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d
227 type(c_ptr),
value :: dr_inv_d, ds_inv_d, dt_inv_d, jacinv_d
229 integer(c_int) :: nel, lx
235 dx_d, dy_d, dz_d, jacinv_d, nel, lx) &
236 bind(c, name=
'opencl_dudxyz')
237 use,
intrinsic :: iso_c_binding
238 type(c_ptr),
value :: du_d, u_d, dr_d, ds_d, dt_d
239 type(c_ptr),
value :: dx_d, dy_d, dz_d, jacinv_d
240 integer(c_int) :: nel, lx
245 subroutine opencl_cdtp(dtx_d, x_d, dr_d, ds_d, dt_d, &
246 dxt_d, dyt_d, dzt_d, B_d, jac_d, nel, lx) &
247 bind(c, name=
'opencl_cdtp')
248 use,
intrinsic :: iso_c_binding
249 type(c_ptr),
value :: dtx_d, x_d, dr_d, ds_d, dt_d
250 type(c_ptr),
value :: dxt_d, dyt_d, dzt_d, b_d, jac_d
251 integer(c_int) :: nel, lx
257 dx_d, dy_d, dz_d, drdx_d, dsdx_d, dtdx_d, &
258 drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d, &
259 jacinv_d, nel, gdim, lx) &
260 bind(c, name=
'opencl_conv1')
261 use,
intrinsic :: iso_c_binding
262 type(c_ptr),
value :: du_d, u_d, vx_d, vy_d, vz_d
263 type(c_ptr),
value :: dx_d, dy_d, dz_d, drdx_d, dsdx_d, dtdx_d
264 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d
265 type(c_ptr),
value :: jacinv_d
266 integer(c_int) :: nel, gdim, lx
273 drdx_d, dsdx_d, dtdx_d, &
274 drdy_d, dsdy_d, dtdy_d, &
275 drdz_d, dsdz_d, dtdz_d, w3_d, nel, lx) &
276 bind(c, name=
'opencl_opgrad')
277 use,
intrinsic :: iso_c_binding
278 type(c_ptr),
value :: ux_d, uy_d, uz_d, u_d
279 type(c_ptr),
value :: dx_d, dy_d, dz_d
280 type(c_ptr),
value :: drdx_d, dsdx_d, dtdx_d
281 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d
282 type(c_ptr),
value :: drdz_d, dsdz_d, dtdz_d
283 type(c_ptr),
value :: w3_d
284 integer(c_int) :: nel, lx
289 real(c_rp) function
opencl_cfl(dt, u_d, v_d, w_d, &
290 drdx_d, dsdx_d, dtdx_d, drdy_d, dsdy_d, dtdy_d, &
291 drdz_d, dsdz_d, dtdz_d, dr_inv_d, ds_inv_d, dt_inv_d, &
293 bind(c, name=
'opencl_cfl')
294 use,
intrinsic :: iso_c_binding
296 type(c_ptr),
value :: u_d, v_d, w_d, drdx_d, dsdx_d, dtdx_d
297 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d, drdz_d, dsdz_d, dtdz_d
298 type(c_ptr),
value :: dr_inv_d, ds_inv_d, dt_inv_d, jacinv_d
300 integer(c_int) :: nel, lx
307 drdx_d, dsdx_d, dtdx_d, &
308 drdy_d, dsdy_d, dtdy_d, &
309 drdz_d, dsdz_d, dtdz_d, jacinv_d, nel, lx) &
310 bind(c, name=
'opencl_lambda2')
311 use,
intrinsic :: iso_c_binding
312 type(c_ptr),
value :: lambda2_d, u_d, v_d, w_d
313 type(c_ptr),
value :: dx_d, dy_d, dz_d
314 type(c_ptr),
value :: drdx_d, dsdx_d, dtdx_d
315 type(c_ptr),
value :: drdy_d, dsdy_d, dtdy_d
316 type(c_ptr),
value :: drdz_d, dsdz_d, dtdz_d
317 type(c_ptr),
value :: jacinv_d
318 integer(c_int) :: nel, lx
326 type(coef_t),
intent(in),
target :: coef
327 real(kind=rp),
dimension(coef%Xh%lx,coef%Xh%ly, &
coef%Xh%lz,coef%msh%nelv),
intent(inout) :: du
328 real(kind=rp),
dimension(coef%Xh%lx,coef%Xh%ly, &
coef%Xh%lz,coef%msh%nelv),
intent(in) :: u, dr, ds, dt
329 type(c_ptr) :: du_d, u_d, dr_d, ds_d, dt_d
331 du_d = device_get_ptr(du)
332 u_d = device_get_ptr(u)
334 dr_d = device_get_ptr(dr)
335 ds_d = device_get_ptr(ds)
336 dt_d = device_get_ptr(dt)
338 associate(xh => coef%Xh, msh => coef%msh, dof => coef%dof)
340 call hip_dudxyz(du_d, u_d, dr_d, ds_d, dt_d, &
341 xh%dx_d, xh%dy_d, xh%dz_d, coef%jacinv_d, &
345 xh%dx_d, xh%dy_d, xh%dz_d, coef%jacinv_d, &
349 xh%dx_d, xh%dy_d, xh%dz_d, coef%jacinv_d, &
352 call neko_error(
'No device backend configured')
359 type(coef_t),
intent(in) :: coef
360 real(kind=rp),
dimension(coef%Xh%lxyz,coef%msh%nelv),
intent(inout) :: ux
361 real(kind=rp),
dimension(coef%Xh%lxyz,coef%msh%nelv),
intent(inout) :: uy
362 real(kind=rp),
dimension(coef%Xh%lxyz,coef%msh%nelv),
intent(inout) :: uz
363 real(kind=rp),
dimension(coef%Xh%lxyz,coef%msh%nelv),
intent(in) :: u
364 type(c_ptr) :: ux_d, uy_d, uz_d, u_d
366 ux_d = device_get_ptr(ux)
367 uy_d = device_get_ptr(uy)
368 uz_d = device_get_ptr(uz)
370 u_d = device_get_ptr(u)
372 associate(xh => coef%Xh, msh => coef%msh)
375 xh%dx_d, xh%dy_d, xh%dz_d, &
376 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
377 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
378 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
379 xh%w3_d, msh%nelv, xh%lx)
382 xh%dx_d, xh%dy_d, xh%dz_d, &
383 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
384 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
385 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
386 xh%w3_d, msh%nelv, xh%lx)
389 xh%dx_d, xh%dy_d, xh%dz_d, &
390 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
391 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
392 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
393 xh%w3_d, msh%nelv, xh%lx)
395 call neko_error(
'No device backend configured')
401 type(coef_t),
intent(in) :: coef
403 type(field_t),
intent(in) :: u, v, w
406 coef%Xh%dx_d, coef%Xh%dy_d, coef%Xh%dz_d, &
407 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
408 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
409 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
410 coef%jacinv_d, coef%msh%nelv, coef%Xh%lx)
413 coef%Xh%dx_d, coef%Xh%dy_d, coef%Xh%dz_d, &
414 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
415 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
416 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
417 coef%jacinv_d, coef%msh%nelv, coef%Xh%lx)
420 coef%Xh%dx_d, coef%Xh%dy_d, coef%Xh%dz_d, &
421 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
422 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
423 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
424 coef%jacinv_d, coef%msh%nelv, coef%Xh%lx)
426 call neko_error(
'No device backend configured')
431 type(coef_t),
intent(in) :: coef
432 real(kind=rp),
dimension(coef%Xh%lxyz,coef%msh%nelv),
intent(inout) :: dtx
433 real(kind=rp),
dimension(coef%Xh%lxyz,coef%msh%nelv),
intent(inout) :: x
434 real(kind=rp),
dimension(coef%Xh%lxyz,coef%msh%nelv),
intent(in) :: dr
435 real(kind=rp),
dimension(coef%Xh%lxyz,coef%msh%nelv),
intent(in) :: ds
436 real(kind=rp),
dimension(coef%Xh%lxyz,coef%msh%nelv),
intent(in) :: dt
437 type(c_ptr) :: dtx_d, x_d, dr_d, ds_d, dt_d
439 dtx_d = device_get_ptr(dtx)
440 x_d = device_get_ptr(x)
442 dr_d = device_get_ptr(dr)
443 ds_d = device_get_ptr(ds)
444 dt_d = device_get_ptr(dt)
446 associate(xh => coef%Xh, msh => coef%msh, dof => coef%dof)
448 call hip_cdtp(dtx_d, x_d, dr_d, ds_d, dt_d, &
449 xh%dxt_d, xh%dyt_d, xh%dzt_d, coef%B_d, &
450 coef%jac_d, msh%nelv, xh%lx)
452 call cuda_cdtp(dtx_d, x_d, dr_d, ds_d, dt_d, &
453 xh%dxt_d, xh%dyt_d, xh%dzt_d, coef%B_d, &
454 coef%jac_d, msh%nelv, xh%lx)
457 xh%dxt_d, xh%dyt_d, xh%dzt_d, coef%B_d, &
458 coef%jac_d, msh%nelv, xh%lx)
460 call neko_error(
'No device backend configured')
467 type(space_t),
intent(in) :: xh
468 type(coef_t),
intent(in) :: coef
469 integer,
intent(in) :: nelv, gdim
470 real(kind=rp),
intent(inout) :: du(xh%lxyz,nelv)
471 real(kind=rp),
intent(inout),
dimension(Xh%lx,Xh%ly,Xh%lz,nelv) :: u
472 real(kind=rp),
intent(inout),
dimension(Xh%lx,Xh%ly,Xh%lz,nelv) :: vx
473 real(kind=rp),
intent(inout),
dimension(Xh%lx,Xh%ly,Xh%lz,nelv) :: vy
474 real(kind=rp),
intent(inout),
dimension(Xh%lx,Xh%ly,Xh%lz,nelv) :: vz
475 type(c_ptr) :: du_d, u_d, vx_d, vy_d, vz_d
477 du_d = device_get_ptr(du)
478 u_d = device_get_ptr(u)
480 vx_d = device_get_ptr(vx)
481 vy_d = device_get_ptr(vy)
482 vz_d = device_get_ptr(vz)
484 associate(xh => coef%Xh, msh => coef%msh, dof => coef%dof)
486 call hip_conv1(du_d, u_d, vx_d, vy_d, vz_d, &
487 xh%dx_d, xh%dy_d, xh%dz_d, &
488 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
489 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
490 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
491 coef%jacinv_d, msh%nelv, msh%gdim, xh%lx)
493 call cuda_conv1(du_d, u_d, vx_d, vy_d, vz_d, &
494 xh%dx_d, xh%dy_d, xh%dz_d, &
495 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
496 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
497 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
498 coef%jacinv_d, msh%nelv, msh%gdim, xh%lx)
501 xh%dx_d, xh%dy_d, xh%dz_d, &
502 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
503 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
504 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
505 coef%jacinv_d, msh%nelv, msh%gdim, xh%lx)
507 call neko_error(
'No device backend configured')
514 type(field_t),
intent(inout) :: w1
515 type(field_t),
intent(inout) :: w2
516 type(field_t),
intent(inout) :: w3
517 type(field_t),
intent(inout) :: u1
518 type(field_t),
intent(inout) :: u2
519 type(field_t),
intent(inout) :: u3
520 type(field_t),
intent(inout) :: work1
521 type(field_t),
intent(inout) :: work2
522 type(coef_t),
intent(in) :: c_xh
523 integer :: gdim, n, nelv
530 #if defined(HAVE_HIP) || defined(HAVE_CUDA) || defined(HAVE_OPENCL)
533 c_xh%drdy_d, c_xh%dsdy_d, c_xh%dtdy_d,&
534 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
535 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
538 c_xh%drdy_d, c_xh%dsdy_d, c_xh%dtdy_d,&
539 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
540 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
543 c_xh%drdy_d, c_xh%dsdy_d, c_xh%dtdy_d,&
544 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
545 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
547 if (gdim .eq. 3)
then
550 c_xh%drdz_d, c_xh%dsdz_d, c_xh%dtdz_d,&
551 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
552 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
555 c_xh%drdz_d, c_xh%dsdz_d, c_xh%dtdz_d,&
556 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
557 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
560 c_xh%drdz_d, c_xh%dsdz_d, c_xh%dtdz_d,&
561 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
562 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
564 call device_sub3(w1%x_d, work1%x_d, work2%x_d, n)
566 call device_copy(w1%x_d, work1%x_d, n)
569 if (gdim .eq. 3)
then
572 c_xh%drdz_d, c_xh%dsdz_d, c_xh%dtdz_d,&
573 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
574 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
576 c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
577 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
578 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
581 c_xh%drdz_d, c_xh%dsdz_d, c_xh%dtdz_d,&
582 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
583 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
585 c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
586 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
587 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
590 c_xh%drdz_d, c_xh%dsdz_d, c_xh%dtdz_d,&
591 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
592 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
594 c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
595 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
596 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
598 call device_sub3(w2%x_d, work1%x_d, work2%x_d, n)
600 call device_rzero (work1%x_d, n)
603 c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
604 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
605 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
608 c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
609 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
610 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
613 c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
614 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
615 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
617 call device_sub3(w2%x_d, work1%x_d, work2%x_d, n)
622 c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
623 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
624 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
626 c_xh%drdy_d, c_xh%dsdy_d, c_xh%dtdy_d,&
627 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
628 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
631 c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
632 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
633 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
635 c_xh%drdy_d, c_xh%dsdy_d, c_xh%dtdy_d,&
636 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
637 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
640 c_xh%drdx_d, c_xh%dsdx_d, c_xh%dtdx_d,&
641 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
642 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
644 c_xh%drdy_d, c_xh%dsdy_d, c_xh%dtdy_d,&
645 c_xh%Xh%dx_d, c_xh%Xh%dy_d, c_xh%Xh%dz_d, &
646 c_xh%jacinv_d, nelv, c_xh%Xh%lx)
648 call device_sub3(w3%x_d, work1%x_d, work2%x_d, n)
651 call device_opcolv(w1%x_d, w2%x_d, w3%x_d, c_xh%B_d, gdim, n)
652 call c_xh%gs_h%op(w1, gs_op_add)
653 call c_xh%gs_h%op(w2, gs_op_add)
654 call c_xh%gs_h%op(w3, gs_op_add)
655 call device_opcolv(w1%x_d, w2%x_d, w3%x_d, c_xh%Binv_d, gdim, n)
658 call neko_error(
'No device backend configured')
663 function opr_device_cfl(dt, u, v, w, Xh, coef, nelv, gdim)
result(cfl)
666 integer :: nelv, gdim
668 real(kind=rp),
dimension(Xh%lx,Xh%ly,Xh%lz,nelv) :: u, v, w
670 type(c_ptr) :: u_d, v_d, w_d
672 u_d = device_get_ptr(u)
673 v_d = device_get_ptr(v)
674 w_d = device_get_ptr(w)
677 cfl =
hip_cfl(dt, u_d, v_d, w_d, &
678 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
679 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
680 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
681 xh%dr_inv_d, xh%ds_inv_d, xh%dt_inv_d, &
682 coef%jacinv_d, nelv, xh%lx)
685 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
686 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
687 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
688 xh%dr_inv_d, xh%ds_inv_d, xh%dt_inv_d, &
689 coef%jacinv_d, nelv, xh%lx)
692 coef%drdx_d, coef%dsdx_d, coef%dtdx_d, &
693 coef%drdy_d, coef%dsdy_d, coef%dtdy_d, &
694 coef%drdz_d, coef%dsdz_d, coef%dtdz_d, &
695 xh%dr_inv_d, xh%ds_inv_d, xh%dt_inv_d, &
696 coef%jacinv_d, nelv, xh%lx)
699 call neko_error(
'No device backend configured')
704 Return the device pointer for an associated Fortran array.
Device abstraction, common interface for various accelerators.
A simulation component that computes lambda2 The values are stored in the field registry under the na...
integer, parameter, public c_rp
integer, parameter, public rp
Global precision used in computations.
Operators accelerator backends.
real(kind=rp) function, public opr_device_cfl(dt, u, v, w, Xh, coef, nelv, gdim)
subroutine, public opr_device_cdtp(dtx, x, dr, ds, dt, coef)
subroutine, public opr_device_conv1(du, u, vx, vy, vz, Xh, coef, nelv, gdim)
subroutine, public opr_device_dudxyz(du, u, dr, ds, dt, coef)
subroutine, public opr_device_curl(w1, w2, w3, u1, u2, u3, work1, work2, c_Xh)
subroutine, public opr_device_opgrad(ux, uy, uz, u, coef)
subroutine, public opr_device_lambda2(lambda2, u, v, w, coef)
Defines a function space.
void opencl_cdtp(void *dtx, void *x, void *dr, void *ds, void *dt, void *dxt, void *dyt, void *dzt, void *B, void *jac, int *nel, int *lx)
void cuda_cdtp(void *dtx, void *x, void *dr, void *ds, void *dt, void *dxt, void *dyt, void *dzt, void *B, void *jac, 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_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)
Coefficients defined on a given (mesh, ) tuple. Arrays use indices (i,j,k,e): element e,...
The function space for the SEM solution fields.