Neko 1.99.6
A portable framework for high-order spectral element flow simulations
Loading...
Searching...
No Matches
device_coef.F90
Go to the documentation of this file.
1! Copyright (c) 2022-2026, The Neko Authors
2! All rights reserved.
3!
4! Redistribution and use in source and binary forms, with or without
5! modification, are permitted provided that the following conditions
6! are met:
7!
8! * Redistributions of source code must retain the above copyright
9! notice, this list of conditions and the following disclaimer.
10!
11! * Redistributions in binary form must reproduce the above
12! copyright notice, this list of conditions and the following
13! disclaimer in the documentation and/or other materials provided
14! with the distribution.
15!
16! * Neither the name of the authors nor the names of its
17! contributors may be used to endorse or promote products derived
18! from this software without specific prior written permission.
19!
20! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21! "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22! LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23! FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24! COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25! INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26! BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27! LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28! CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29! LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30! ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31! POSSIBILITY OF SUCH DAMAGE.
32!
34 use num_types, only : rp, c_rp
35 use utils, only : neko_error
36 use, intrinsic :: iso_c_binding, only : c_ptr, c_int
37 implicit none
38 private
39
45
46#ifdef HAVE_HIP
47 interface
48 subroutine hip_coef_generate_geo(G11, G12, G13, G22, G23, G33, &
49 drdx, drdy, drdz, dsdx, dsdy, dsdz, dtdx, dtdy, dtdz, &
50 jacinv, w3, nel, lx, gdim) &
51 bind(c, name = 'hip_coef_generate_geo')
52 use, intrinsic :: iso_c_binding
53 implicit none
54 type(c_ptr), value :: G11, G12, G13, G22, G23, G33
55 type(c_ptr), value :: drdx, drdy, drdz
56 type(c_ptr), value :: dsdx, dsdy, dsdz
57 type(c_ptr), value :: dtdx, dtdy, dtdz
58 type(c_ptr), value :: jacinv, w3
59 integer(c_int) :: nel, gdim, lx
60 end subroutine hip_coef_generate_geo
61 end interface
62
63 interface
64 subroutine hip_coef_generate_dxyzdrst(drdx, drdy, drdz, dsdx, dsdy, &
65 dsdz, dtdx, dtdy, dtdz, dxdr, dydr, dzdr, dxds, dyds, dzds, dxdt, &
66 dydt, dzdt, dx, dy, dz, x, y, z, jacinv, jac, lx, nel) &
67 bind(c, name = 'hip_coef_generate_dxyzdrst')
68 use, intrinsic :: iso_c_binding
69 implicit none
70 type(c_ptr), value :: drdx, drdy, drdz
71 type(c_ptr), value :: dsdx, dsdy, dsdz
72 type(c_ptr), value :: dtdx, dtdy, dtdz
73 type(c_ptr), value :: dxdr, dydr, dzdr
74 type(c_ptr), value :: dxds, dyds, dzds
75 type(c_ptr), value :: dxdt, dydt, dzdt
76 type(c_ptr), value :: dx, dy, dz, x, y, z
77 type(c_ptr), value :: jacinv, jac
78 integer(c_int) :: lx, nel
79 end subroutine hip_coef_generate_dxyzdrst
80 end interface
81
82 interface
83 subroutine hip_coef_generate_mass(B, Binv, jac, w3, lxyz, nel) &
84 bind(c, name = 'hip_coef_generate_mass')
85 use, intrinsic :: iso_c_binding
86 implicit none
87 type(c_ptr), value :: B, Binv, jac, w3
88 integer(c_int) :: lxyz, nel
89 end subroutine hip_coef_generate_mass
90 end interface
91
92 interface
93 subroutine hip_coef_generate_area_and_normal(area, nx, ny, nz, &
94 dxdr, dydr, dzdr, dxds, dyds, dzds, dxdt, dydt, dzdt, &
95 wx, wy, wz, lx, nel, eps) &
96 bind(c, name = 'hip_coef_generate_area_and_normal')
97 use, intrinsic :: iso_c_binding
98 import c_rp
99 implicit none
100 type(c_ptr), value :: area, nx, ny, nz
101 type(c_ptr), value :: dxdr, dydr, dzdr
102 type(c_ptr), value :: dxds, dyds, dzds
103 type(c_ptr), value :: dxdt, dydt, dzdt
104 type(c_ptr), value :: wx, wy, wz
105 integer(c_int) :: lx, nel
106 real(kind=c_rp), value :: eps
108 end interface
109
110 interface
111 subroutine hip_coef_get_normal(normal_x, normal_y, normal_z, nx, ny, nz, &
112 i_idx, j_idx, k_idx, e_idx, facet, lx, n) &
113 bind(c, name = 'hip_coef_get_normal')
114 use, intrinsic :: iso_c_binding
115 implicit none
116 type(c_ptr), value :: normal_x, normal_y, normal_z
117 type(c_ptr), value :: nx, ny, nz
118 type(c_ptr), value :: i_idx, j_idx, k_idx, e_idx, facet
119 integer(c_int) :: lx, n
120 end subroutine hip_coef_get_normal
121 end interface
122
123#elif HAVE_CUDA
124 interface
125 subroutine cuda_coef_generate_geo(G11, G12, G13, G22, G23, G33, &
126 drdx, drdy, drdz, dsdx, dsdy, dsdz, dtdx, dtdy, dtdz, &
127 jacinv, w3, nel, lx, gdim) &
128 bind(c, name = 'cuda_coef_generate_geo')
129 use, intrinsic :: iso_c_binding
130 implicit none
131 type(c_ptr), value :: G11, G12, G13, G22, G23, G33
132 type(c_ptr), value :: drdx, drdy, drdz
133 type(c_ptr), value :: dsdx, dsdy, dsdz
134 type(c_ptr), value :: dtdx, dtdy, dtdz
135 type(c_ptr), value :: jacinv, w3
136 integer(c_int) :: nel, gdim, lx
137 end subroutine cuda_coef_generate_geo
138 end interface
139
140 interface
141 subroutine cuda_coef_generate_dxyzdrst(drdx, drdy, drdz, dsdx, dsdy, &
142 dsdz, dtdx, dtdy, dtdz, dxdr, dydr, dzdr, dxds, dyds, dzds, dxdt, &
143 dydt, dzdt, dx, dy, dz, x, y, z, jacinv, jac, lx, nel) &
144 bind(c, name = 'cuda_coef_generate_dxyzdrst')
145 use, intrinsic :: iso_c_binding
146 implicit none
147 type(c_ptr), value :: drdx, drdy, drdz
148 type(c_ptr), value :: dsdx, dsdy, dsdz
149 type(c_ptr), value :: dtdx, dtdy, dtdz
150 type(c_ptr), value :: dxdr, dydr, dzdr
151 type(c_ptr), value :: dxds, dyds, dzds
152 type(c_ptr), value :: dxdt, dydt, dzdt
153 type(c_ptr), value :: dx, dy, dz, x, y, z
154 type(c_ptr), value :: jacinv, jac
155 integer(c_int) :: lx, nel
156 end subroutine cuda_coef_generate_dxyzdrst
157 end interface
158
159 interface
160 subroutine cuda_coef_generate_mass(B, Binv, jac, w3, lxyz, nel) &
161 bind(c, name = 'cuda_coef_generate_mass')
162 use, intrinsic :: iso_c_binding
163 implicit none
164 type(c_ptr), value :: B, Binv, jac, w3
165 integer(c_int) :: lxyz, nel
166 end subroutine cuda_coef_generate_mass
167 end interface
168
169 interface
170 subroutine cuda_coef_generate_area_and_normal(area, nx, ny, nz, &
171 dxdr, dydr, dzdr, dxds, dyds, dzds, dxdt, dydt, dzdt, &
172 wx, wy, wz, lx, nel, eps) &
173 bind(c, name = 'cuda_coef_generate_area_and_normal')
174 use, intrinsic :: iso_c_binding
175 import c_rp
176 implicit none
177 type(c_ptr), value :: area, nx, ny, nz
178 type(c_ptr), value :: dxdr, dydr, dzdr
179 type(c_ptr), value :: dxds, dyds, dzds
180 type(c_ptr), value :: dxdt, dydt, dzdt
181 type(c_ptr), value :: wx, wy, wz
182 integer(c_int) :: lx, nel
183 real(kind=c_rp), value :: eps
185 end interface
186
187 interface
188 subroutine cuda_coef_get_normal(normal_x, normal_y, normal_z, nx, ny, nz, &
189 i_idx, j_idx, k_idx, e_idx, facet, lx, n) &
190 bind(c, name = 'cuda_coef_get_normal')
191 use, intrinsic :: iso_c_binding
192 implicit none
193 type(c_ptr), value :: normal_x, normal_y, normal_z
194 type(c_ptr), value :: nx, ny, nz
195 type(c_ptr), value :: i_idx, j_idx, k_idx, e_idx, facet
196 integer(c_int) :: lx, n
197 end subroutine cuda_coef_get_normal
198 end interface
199
200#elif HAVE_OPENCL
201 interface
202 subroutine opencl_coef_generate_geo(G11, G12, G13, G22, G23, G33, &
203 drdx, drdy, drdz, dsdx, dsdy, dsdz, dtdx, dtdy, dtdz, &
204 jacinv, w3, nel, lx, gdim) &
205 bind(c, name = 'opencl_coef_generate_geo')
206 use, intrinsic :: iso_c_binding
207 implicit none
208 type(c_ptr), value :: G11, G12, G13, G22, G23, G33
209 type(c_ptr), value :: drdx, drdy, drdz
210 type(c_ptr), value :: dsdx, dsdy, dsdz
211 type(c_ptr), value :: dtdx, dtdy, dtdz
212 type(c_ptr), value :: jacinv, w3
213 integer(c_int) :: nel, gdim, lx
214 end subroutine opencl_coef_generate_geo
215 end interface
216
217 interface
218 subroutine opencl_coef_generate_dxyzdrst(drdx, drdy, drdz, dsdx, dsdy, &
219 dsdz, dtdx, dtdy, dtdz, dxdr, dydr, dzdr, dxds, dyds, dzds, dxdt, &
220 dydt, dzdt, dx, dy, dz, x, y, z, jacinv, jac, lx, nel) &
221 bind(c, name = 'opencl_coef_generate_dxyzdrst')
222 use, intrinsic :: iso_c_binding
223 implicit none
224 type(c_ptr), value :: drdx, drdy, drdz
225 type(c_ptr), value :: dsdx, dsdy, dsdz
226 type(c_ptr), value :: dtdx, dtdy, dtdz
227 type(c_ptr), value :: dxdr, dydr, dzdr
228 type(c_ptr), value :: dxds, dyds, dzds
229 type(c_ptr), value :: dxdt, dydt, dzdt
230 type(c_ptr), value :: dx, dy, dz, x, y, z
231 type(c_ptr), value :: jacinv, jac
232 integer(c_int) :: lx, nel
233 end subroutine opencl_coef_generate_dxyzdrst
234 end interface
235
236 interface
237 subroutine opencl_coef_generate_mass(B, Binv, jac, w3, lxyz, nel) &
238 bind(c, name = 'opencl_coef_generate_mass')
239 use, intrinsic :: iso_c_binding
240 implicit none
241 type(c_ptr), value :: B, Binv, jac, w3
242 integer(c_int) :: lxyz, nel
243 end subroutine opencl_coef_generate_mass
244 end interface
245
246 interface
247 subroutine opencl_coef_generate_area_and_normal(area, nx, ny, nz, &
248 dxdr, dydr, dzdr, dxds, dyds, dzds, dxdt, dydt, dzdt, &
249 wx, wy, wz, lx, nel, eps) &
250 bind(c, name = 'opencl_coef_generate_area_and_normal')
251 use, intrinsic :: iso_c_binding
252 import c_rp
253 implicit none
254 type(c_ptr), value :: area, nx, ny, nz
255 type(c_ptr), value :: dxdr, dydr, dzdr
256 type(c_ptr), value :: dxds, dyds, dzds
257 type(c_ptr), value :: dxdt, dydt, dzdt
258 type(c_ptr), value :: wx, wy, wz
259 integer(c_int) :: lx, nel
260 real(kind=c_rp), value :: eps
262 end interface
263
264 interface
265 subroutine opencl_coef_get_normal(normal_x, normal_y, normal_z, &
266 nx, ny, nz, i_idx, j_idx, k_idx, e_idx, facet, lx, n) &
267 bind(c, name = 'opencl_coef_get_normal')
268 use, intrinsic :: iso_c_binding
269 implicit none
270 type(c_ptr), value :: normal_x, normal_y, normal_z
271 type(c_ptr), value :: nx, ny, nz
272 type(c_ptr), value :: i_idx, j_idx, k_idx, e_idx, facet
273 integer(c_int) :: lx, n
274 end subroutine opencl_coef_get_normal
275 end interface
276#elif HAVE_METAL
277 interface
278 subroutine metal_coef_generate_geo(G11, G12, G13, G22, G23, G33, &
279 drdx, drdy, drdz, dsdx, dsdy, dsdz, dtdx, dtdy, dtdz, &
280 jacinv, w3, nel, lx, gdim) &
281 bind(c, name = 'metal_coef_generate_geo')
282 use, intrinsic :: iso_c_binding
283 implicit none
284 type(c_ptr), value :: G11, G12, G13, G22, G23, G33
285 type(c_ptr), value :: drdx, drdy, drdz
286 type(c_ptr), value :: dsdx, dsdy, dsdz
287 type(c_ptr), value :: dtdx, dtdy, dtdz
288 type(c_ptr), value :: jacinv, w3
289 integer(c_int) :: nel, gdim, lx
290 end subroutine metal_coef_generate_geo
291 end interface
292
293 interface
294 subroutine metal_coef_generate_dxyzdrst(drdx, drdy, drdz, dsdx, dsdy, &
295 dsdz, dtdx, dtdy, dtdz, dxdr, dydr, dzdr, dxds, dyds, dzds, dxdt, &
296 dydt, dzdt, dx, dy, dz, x, y, z, jacinv, jac, lx, nel) &
297 bind(c, name = 'metal_coef_generate_dxyzdrst')
298 use, intrinsic :: iso_c_binding
299 implicit none
300 type(c_ptr), value :: drdx, drdy, drdz
301 type(c_ptr), value :: dsdx, dsdy, dsdz
302 type(c_ptr), value :: dtdx, dtdy, dtdz
303 type(c_ptr), value :: dxdr, dydr, dzdr
304 type(c_ptr), value :: dxds, dyds, dzds
305 type(c_ptr), value :: dxdt, dydt, dzdt
306 type(c_ptr), value :: dx, dy, dz, x, y, z
307 type(c_ptr), value :: jacinv, jac
308 integer(c_int) :: lx, nel
309 end subroutine metal_coef_generate_dxyzdrst
310 end interface
311
312 interface
313 subroutine metal_coef_generate_mass(B, Binv, jac, w3, lxyz, nel) &
314 bind(c, name = 'metal_coef_generate_mass')
315 use, intrinsic :: iso_c_binding
316 implicit none
317 type(c_ptr), value :: B, Binv, jac, w3
318 integer(c_int) :: lxyz, nel
319 end subroutine metal_coef_generate_mass
320 end interface
321
322 interface
323 subroutine metal_coef_generate_area_and_normal(area, nx, ny, nz, &
324 dxdr, dydr, dzdr, dxds, dyds, dzds, dxdt, dydt, dzdt, &
325 wx, wy, wz, lx, nel, eps) &
326 bind(c, name = 'metal_coef_generate_area_and_normal')
327 use, intrinsic :: iso_c_binding
328 import c_rp
329 implicit none
330 type(c_ptr), value :: area, nx, ny, nz
331 type(c_ptr), value :: dxdr, dydr, dzdr
332 type(c_ptr), value :: dxds, dyds, dzds
333 type(c_ptr), value :: dxdt, dydt, dzdt
334 type(c_ptr), value :: wx, wy, wz
335 integer(c_int) :: lx, nel
336 real(kind=c_rp), value :: eps
337 end subroutine metal_coef_generate_area_and_normal
338 end interface
339
340#endif
341
342contains
343
344 subroutine device_coef_generate_geo(G11_d, G12_d, G13_d, G22_d, &
345 G23_d, G33_d, drdx_d, drdy_d, drdz_d, dsdx_d, dsdy_d, &
346 dsdz_d, dtdx_d, dtdy_d, dtdz_d, jacinv_d, w3_d, nel, lx, gdim)
347 type(c_ptr) :: g11_d, g12_d, g13_d, g22_d, g23_d, g33_d
348 type(c_ptr) :: drdx_d, drdy_d, drdz_d
349 type(c_ptr) :: dsdx_d, dsdy_d, dsdz_d
350 type(c_ptr) :: dtdx_d, dtdy_d, dtdz_d
351 type(c_ptr) :: jacinv_d, w3_d
352 integer :: nel, gdim, lx
353
354#ifdef HAVE_HIP
355 call hip_coef_generate_geo(g11_d, g12_d, g13_d, g22_d, g23_d, &
356 g33_d, drdx_d, drdy_d, drdz_d, dsdx_d, dsdy_d, dsdz_d, &
357 dtdx_d, dtdy_d, dtdz_d, jacinv_d, w3_d, nel, lx, gdim)
358#elif HAVE_CUDA
359 call cuda_coef_generate_geo(g11_d, g12_d, g13_d, g22_d, g23_d, &
360 g33_d, drdx_d, drdy_d, drdz_d, dsdx_d, dsdy_d, dsdz_d, &
361 dtdx_d, dtdy_d, dtdz_d, jacinv_d, w3_d, nel, lx, gdim)
362#elif HAVE_OPENCL
363 call opencl_coef_generate_geo(g11_d, g12_d, g13_d, g22_d, g23_d, &
364 g33_d, drdx_d, drdy_d, drdz_d, dsdx_d, dsdy_d, dsdz_d, &
365 dtdx_d, dtdy_d, dtdz_d, jacinv_d, w3_d, nel, lx, gdim)
366#elif HAVE_METAL
367 call metal_coef_generate_geo(g11_d, g12_d, g13_d, g22_d, g23_d, &
368 g33_d, drdx_d, drdy_d, drdz_d, dsdx_d, dsdy_d, dsdz_d, &
369 dtdx_d, dtdy_d, dtdz_d, jacinv_d, w3_d, nel, lx, gdim)
370#else
371 call neko_error('No device backend configured')
372#endif
373
374 end subroutine device_coef_generate_geo
375
376 subroutine device_coef_generate_dxydrst(drdx_d, drdy_d, drdz_d, &
377 dsdx_d, dsdy_d, dsdz_d, &
378 dtdx_d, dtdy_d, dtdz_d, &
379 dxdr_d, dydr_d, dzdr_d, &
380 dxds_d, dyds_d, dzds_d, &
381 dxdt_d, dydt_d, dzdt_d, &
382 dx_d, dy_d, dz_d, &
383 x_d, y_d, z_d, &
384 jacinv_d, jac_d, lx, nel)
385 type(c_ptr) :: drdx_d, drdy_d, drdz_d
386 type(c_ptr) :: dsdx_d, dsdy_d, dsdz_d
387 type(c_ptr) :: dtdx_d, dtdy_d, dtdz_d
388 type(c_ptr) :: dxdr_d, dydr_d, dzdr_d
389 type(c_ptr) :: dxds_d, dyds_d, dzds_d
390 type(c_ptr) :: dxdt_d, dydt_d, dzdt_d
391 type(c_ptr) :: dx_d, dy_d, dz_d, x_d, y_d, z_d
392 type(c_ptr) :: jacinv_d, jac_d
393 integer :: lx, nel
394
395#ifdef HAVE_HIP
396 call hip_coef_generate_dxyzdrst(drdx_d, drdy_d, drdz_d, dsdx_d, &
397 dsdy_d, dsdz_d, dtdx_d, dtdy_d, dtdz_d, dxdr_d, dydr_d, &
398 dzdr_d, dxds_d, dyds_d, dzds_d, dxdt_d, dydt_d, dzdt_d, &
399 dx_d, dy_d, dz_d, x_d, y_d, z_d, jacinv_d, jac_d, lx, nel)
400#elif HAVE_CUDA
401 call cuda_coef_generate_dxyzdrst(drdx_d, drdy_d, drdz_d, dsdx_d, &
402 dsdy_d, dsdz_d, dtdx_d, dtdy_d, dtdz_d, dxdr_d, dydr_d, &
403 dzdr_d, dxds_d, dyds_d, dzds_d, dxdt_d, dydt_d, dzdt_d, &
404 dx_d, dy_d, dz_d, x_d, y_d, z_d, jacinv_d, jac_d, lx, nel)
405#elif HAVE_OPENCL
406 call opencl_coef_generate_dxyzdrst(drdx_d, drdy_d, drdz_d, dsdx_d, &
407 dsdy_d, dsdz_d, dtdx_d, dtdy_d, dtdz_d, dxdr_d, dydr_d, &
408 dzdr_d, dxds_d, dyds_d, dzds_d, dxdt_d, dydt_d, dzdt_d, &
409 dx_d, dy_d, dz_d, x_d, y_d, z_d, jacinv_d, jac_d, lx, nel)
410#elif HAVE_METAL
411 call metal_coef_generate_dxyzdrst(drdx_d, drdy_d, drdz_d, dsdx_d, &
412 dsdy_d, dsdz_d, dtdx_d, dtdy_d, dtdz_d, dxdr_d, dydr_d, &
413 dzdr_d, dxds_d, dyds_d, dzds_d, dxdt_d, dydt_d, dzdt_d, &
414 dx_d, dy_d, dz_d, x_d, y_d, z_d, jacinv_d, jac_d, lx, nel)
415#else
416 call neko_error('No device backend configured')
417#endif
418 end subroutine device_coef_generate_dxydrst
419
420 subroutine device_coef_generate_mass(B, Binv, jac, w3, lxyz, nel)
421 type(c_ptr) :: b, binv, jac, w3
422 integer :: lxyz, nel
423
424#ifdef HAVE_HIP
425 call hip_coef_generate_mass(b, binv, jac, w3, lxyz, nel)
426#elif HAVE_CUDA
427 call cuda_coef_generate_mass(b, binv, jac, w3, lxyz, nel)
428#elif HAVE_OPENCL
429 call opencl_coef_generate_mass(b, binv, jac, w3, lxyz, nel)
430#elif HAVE_METAL
431 call metal_coef_generate_mass(b, binv, jac, w3, lxyz, nel)
432#else
433 call neko_error('No device backend configured')
434#endif
435 end subroutine device_coef_generate_mass
436
437 subroutine device_coef_generate_area_and_normal(area_d, nx_d, ny_d, nz_d, &
438 dxdr_d, dydr_d, dzdr_d, &
439 dxds_d, dyds_d, dzds_d, &
440 dxdt_d, dydt_d, dzdt_d, &
441 wx_d, wy_d, wz_d, &
442 lx, nel, eps)
443 type(c_ptr) :: area_d, nx_d, ny_d, nz_d
444 type(c_ptr) :: dxdr_d, dydr_d, dzdr_d
445 type(c_ptr) :: dxds_d, dyds_d, dzds_d
446 type(c_ptr) :: dxdt_d, dydt_d, dzdt_d
447 type(c_ptr) :: wx_d, wy_d, wz_d
448 integer :: lx, nel
449 real(kind=c_rp), value :: eps
450
451#ifdef HAVE_HIP
452 call hip_coef_generate_area_and_normal(area_d, nx_d, ny_d, nz_d, &
453 dxdr_d, dydr_d, dzdr_d, &
454 dxds_d, dyds_d, dzds_d, &
455 dxdt_d, dydt_d, dzdt_d, &
456 wx_d, wy_d, wz_d, &
457 lx, nel, eps)
458#elif HAVE_CUDA
459 call cuda_coef_generate_area_and_normal(area_d, nx_d, ny_d, nz_d, &
460 dxdr_d, dydr_d, dzdr_d, &
461 dxds_d, dyds_d, dzds_d, &
462 dxdt_d, dydt_d, dzdt_d, &
463 wx_d, wy_d, wz_d, &
464 lx, nel, eps)
465#elif HAVE_OPENCL
466 call opencl_coef_generate_area_and_normal(area_d, nx_d, ny_d, nz_d, &
467 dxdr_d, dydr_d, dzdr_d, &
468 dxds_d, dyds_d, dzds_d, &
469 dxdt_d, dydt_d, dzdt_d, &
470 wx_d, wy_d, wz_d, &
471 lx, nel, eps)
472#elif HAVE_METAL
473 call metal_coef_generate_area_and_normal(area_d, nx_d, ny_d, nz_d, &
474 dxdr_d, dydr_d, dzdr_d, &
475 dxds_d, dyds_d, dzds_d, &
476 dxdt_d, dydt_d, dzdt_d, &
477 wx_d, wy_d, wz_d, &
478 lx, nel, eps)
479#else
480 call neko_error('No device backend configured')
481#endif
483
484 subroutine device_coef_get_normal(normal_x_d, normal_y_d, normal_z_d, &
485 nx_d, ny_d, nz_d, i_idx_d, j_idx_d, k_idx_d, e_idx_d, facet_d, lx, n)
486 type(c_ptr) :: normal_x_d, normal_y_d, normal_z_d
487 type(c_ptr) :: nx_d, ny_d, nz_d
488 type(c_ptr) :: i_idx_d, j_idx_d, k_idx_d, e_idx_d, facet_d
489 integer :: lx, n
490
491#ifdef HAVE_HIP
492 call hip_coef_get_normal(normal_x_d, normal_y_d, normal_z_d, &
493 nx_d, ny_d, nz_d, i_idx_d, j_idx_d, k_idx_d, e_idx_d, facet_d, &
494 lx, n)
495#elif HAVE_CUDA
496 call cuda_coef_get_normal(normal_x_d, normal_y_d, normal_z_d, &
497 nx_d, ny_d, nz_d, i_idx_d, j_idx_d, k_idx_d, e_idx_d, facet_d, &
498 lx, n)
499#elif HAVE_OPENCL
500 call opencl_coef_get_normal(normal_x_d, normal_y_d, normal_z_d, &
501 nx_d, ny_d, nz_d, i_idx_d, j_idx_d, k_idx_d, e_idx_d, facet_d, &
502 lx, n)
503#else
504 call neko_error('No device backend configured')
505#endif
506 end subroutine device_coef_get_normal
507
508end module device_coef
void opencl_coef_generate_mass(void *B, void *Binv, void *jac, void *w3, int *lxyz, int *nel)
Definition coef.c:231
void opencl_coef_get_normal(void *normal_x, void *normal_y, void *normal_z, void *nx, void *ny, void *nz, void *i_idx, void *j_idx, void *k_idx, void *e_idx, void *facet, int *lx, int *n)
Definition coef.c:332
void opencl_coef_generate_geo(void *G11, void *G12, void *G13, void *G22, void *G23, void *G33, void *drdx, void *drdy, void *drdz, void *dsdx, void *dsdy, void *dsdz, void *dtdx, void *dtdy, void *dtdz, void *jacinv, void *w3, int *nel, int *lx, int *gdim)
Definition coef.c:54
void opencl_coef_generate_dxyzdrst(void *drdx, void *drdy, void *drdz, void *dsdx, void *dsdy, void *dsdz, void *dtdx, void *dtdy, void *dtdz, void *dxdr, void *dydr, void *dzdr, void *dxds, void *dyds, void *dzds, void *dxdt, void *dydt, void *dzdt, void *dx, void *dy, void *dz, void *x, void *y, void *z, void *jacinv, void *jac, int *lx, int *nel)
Definition coef.c:126
void opencl_coef_generate_area_and_normal(void *area, void *nx, void *ny, void *nz, void *dxdr, void *dydr, void *dzdr, void *dxds, void *dyds, void *dzds, void *dxdt, void *dydt, void *dzdt, void *wx, void *wy, void *wz, int *lx, int *nel, real eps)
Definition coef.c:261
void cuda_coef_get_normal(void *normal_x, void *normal_y, void *normal_z, void *nx, void *ny, void *nz, void *i_idx, void *j_idx, void *k_idx, void *e_idx, void *facet, int *lx, int *n)
Definition coef.cu:236
void cuda_coef_generate_area_and_normal(void *area, void *nx, void *ny, void *nz, void *dxdr, void *dydr, void *dzdr, void *dxds, void *dyds, void *dzds, void *dxdt, void *dydt, void *dzdt, void *wx, void *wy, void *wz, int *lx, int *nel, real eps)
Definition coef.cu:185
void cuda_coef_generate_mass(void *B, void *Binv, void *jac, void *w3, int *lxyz, int *nel)
Definition coef.cu:165
void cuda_coef_generate_dxyzdrst(void *drdx, void *drdy, void *drdz, void *dsdx, void *dsdy, void *dsdz, void *dtdx, void *dtdy, void *dtdz, void *dxdr, void *dydr, void *dzdr, void *dxds, void *dyds, void *dzds, void *dxdt, void *dydt, void *dzdt, void *dx, void *dy, void *dz, void *x, void *y, void *z, void *jacinv, void *jac, int *lx, int *nel)
Definition coef.cu:97
void cuda_coef_generate_geo(void *G11, void *G12, void *G13, void *G22, void *G23, void *G33, void *drdx, void *drdy, void *drdz, void *dsdx, void *dsdy, void *dsdz, void *dtdx, void *dtdy, void *dtdz, void *jacinv, void *w3, int *nel, int *lx, int *gdim)
Definition coef.cu:45
subroutine, public device_coef_generate_area_and_normal(area_d, nx_d, ny_d, nz_d, dxdr_d, dydr_d, dzdr_d, dxds_d, dyds_d, dzds_d, dxdt_d, dydt_d, dzdt_d, wx_d, wy_d, wz_d, lx, nel, eps)
subroutine, public device_coef_generate_dxydrst(drdx_d, drdy_d, drdz_d, dsdx_d, dsdy_d, dsdz_d, dtdx_d, dtdy_d, dtdz_d, dxdr_d, dydr_d, dzdr_d, dxds_d, dyds_d, dzds_d, dxdt_d, dydt_d, dzdt_d, dx_d, dy_d, dz_d, x_d, y_d, z_d, jacinv_d, jac_d, lx, nel)
subroutine, public device_coef_generate_mass(b, binv, jac, w3, lxyz, nel)
subroutine, public device_coef_get_normal(normal_x_d, normal_y_d, normal_z_d, nx_d, ny_d, nz_d, i_idx_d, j_idx_d, k_idx_d, e_idx_d, facet_d, lx, n)
subroutine, public device_coef_generate_geo(g11_d, g12_d, g13_d, g22_d, g23_d, g33_d, drdx_d, drdy_d, drdz_d, dsdx_d, dsdy_d, dsdz_d, dtdx_d, dtdy_d, dtdz_d, jacinv_d, w3_d, nel, lx, gdim)
integer, parameter, public c_rp
Definition num_types.f90:13
integer, parameter, public rp
Global precision used in computations.
Definition num_types.f90:12
Utilities.
Definition utils.f90:35