39 use,
intrinsic :: iso_c_binding, only : c_int, c_ptr, c_null_ptr
47 n_periodic_dirs, periodic_dir_x1, periodic_dir_y1, periodic_dir_z1, &
48 periodic_dir_x2, periodic_dir_y2, periodic_dir_z2, periodic_dir_x3, &
49 periodic_dir_y3, periodic_dir_z3, periodic_min1, periodic_min2, &
50 periodic_min3, periodic_max1, periodic_max2, periodic_max3, &
51 periodic_shift_x1, periodic_shift_y1, periodic_shift_z1, &
52 periodic_shift_x2, periodic_shift_y2, periodic_shift_z2, &
53 periodic_shift_x3, periodic_shift_y3, periodic_shift_z3, &
54 periodic_len1, periodic_len2, periodic_len3, strm) &
55 bind(c, name =
'hip_lpt_periodic_bc_wrap_translational')
56 use,
intrinsic :: iso_c_binding
59 integer(c_int) :: n, n_periodic_dirs
60 real(c_rp) :: periodic_dir_x1, periodic_dir_y1, periodic_dir_z1
61 real(c_rp) :: periodic_dir_x2, periodic_dir_y2, periodic_dir_z2
62 real(c_rp) :: periodic_dir_x3, periodic_dir_y3, periodic_dir_z3
63 real(c_rp) :: periodic_min1, periodic_min2, periodic_min3
64 real(c_rp) :: periodic_max1, periodic_max2, periodic_max3
65 real(c_rp) :: periodic_shift_x1, periodic_shift_y1, periodic_shift_z1
66 real(c_rp) :: periodic_shift_x2, periodic_shift_y2, periodic_shift_z2
67 real(c_rp) :: periodic_shift_x3, periodic_shift_y3, periodic_shift_z3
68 real(c_rp) :: periodic_len1, periodic_len2, periodic_len3
69 type(c_ptr),
value :: x, y, z, strm
74 theta_max, theta_len, u, v, w, u_lag, v_lag, w_lag, u_laglag, &
75 v_laglag, w_laglag, acc_xlag, acc_ylag, acc_zlag, acc_xlaglag, &
76 acc_ylaglag, acc_zlaglag, strm) &
77 bind(c, name =
'hip_lpt_periodic_bc_wrap_rotational')
78 use,
intrinsic :: iso_c_binding
82 real(c_rp) :: theta_min, theta_max, theta_len
83 type(c_ptr),
value :: x, y, z, u, v, w, u_lag, v_lag, w_lag
84 type(c_ptr),
value :: u_laglag, v_laglag, w_laglag
85 type(c_ptr),
value :: acc_xlag, acc_ylag, acc_zlag
86 type(c_ptr),
value :: acc_xlaglag, acc_ylaglag, acc_zlaglag, strm
93 n_periodic_dirs, periodic_dir_x1, periodic_dir_y1, periodic_dir_z1, &
94 periodic_dir_x2, periodic_dir_y2, periodic_dir_z2, periodic_dir_x3, &
95 periodic_dir_y3, periodic_dir_z3, periodic_min1, periodic_min2, &
96 periodic_min3, periodic_max1, periodic_max2, periodic_max3, &
97 periodic_shift_x1, periodic_shift_y1, periodic_shift_z1, &
98 periodic_shift_x2, periodic_shift_y2, periodic_shift_z2, &
99 periodic_shift_x3, periodic_shift_y3, periodic_shift_z3, &
100 periodic_len1, periodic_len2, periodic_len3, strm) &
101 bind(c, name =
'cuda_lpt_periodic_bc_wrap_translational')
102 use,
intrinsic :: iso_c_binding
105 integer(c_int) :: n, n_periodic_dirs
106 real(c_rp) :: periodic_dir_x1, periodic_dir_y1, periodic_dir_z1
107 real(c_rp) :: periodic_dir_x2, periodic_dir_y2, periodic_dir_z2
108 real(c_rp) :: periodic_dir_x3, periodic_dir_y3, periodic_dir_z3
109 real(c_rp) :: periodic_min1, periodic_min2, periodic_min3
110 real(c_rp) :: periodic_max1, periodic_max2, periodic_max3
111 real(c_rp) :: periodic_shift_x1, periodic_shift_y1, periodic_shift_z1
112 real(c_rp) :: periodic_shift_x2, periodic_shift_y2, periodic_shift_z2
113 real(c_rp) :: periodic_shift_x3, periodic_shift_y3, periodic_shift_z3
114 real(c_rp) :: periodic_len1, periodic_len2, periodic_len3
115 type(c_ptr),
value :: x, y, z, strm
120 theta_max, theta_len, u, v, w, u_lag, v_lag, w_lag, u_laglag, &
121 v_laglag, w_laglag, acc_xlag, acc_ylag, acc_zlag, acc_xlaglag, &
122 acc_ylaglag, acc_zlaglag, strm) &
123 bind(c, name =
'cuda_lpt_periodic_bc_wrap_rotational')
124 use,
intrinsic :: iso_c_binding
128 real(c_rp) :: theta_min, theta_max, theta_len
129 type(c_ptr),
value :: x, y, z, u, v, w, u_lag, v_lag, w_lag
130 type(c_ptr),
value :: u_laglag, v_laglag, w_laglag
131 type(c_ptr),
value :: acc_xlag, acc_ylag, acc_zlag
132 type(c_ptr),
value :: acc_xlaglag, acc_ylaglag, acc_zlaglag, strm
149 n_periodic_dirs, periodic_dir_x1, periodic_dir_y1, periodic_dir_z1, &
150 periodic_dir_x2, periodic_dir_y2, periodic_dir_z2, periodic_dir_x3, &
151 periodic_dir_y3, periodic_dir_z3, periodic_min1, periodic_min2, &
152 periodic_min3, periodic_max1, periodic_max2, periodic_max3, &
153 periodic_shift_x1, periodic_shift_y1, periodic_shift_z1, &
154 periodic_shift_x2, periodic_shift_y2, periodic_shift_z2, &
155 periodic_shift_x3, periodic_shift_y3, periodic_shift_z3, &
156 periodic_len1, periodic_len2, periodic_len3, strm)
157 type(
vector_t),
intent(inout) :: x, y, z
158 integer,
intent(in) :: n
159 integer,
intent(in) :: n_periodic_dirs
160 real(kind=rp),
intent(in) :: periodic_dir_x1, periodic_dir_y1
161 real(kind=rp),
intent(in) :: periodic_dir_z1, periodic_dir_x2
162 real(kind=rp),
intent(in) :: periodic_dir_y2, periodic_dir_z2
163 real(kind=rp),
intent(in) :: periodic_dir_x3, periodic_dir_y3
164 real(kind=rp),
intent(in) :: periodic_dir_z3
165 real(kind=rp),
intent(in) :: periodic_min1, periodic_min2, periodic_min3
166 real(kind=rp),
intent(in) :: periodic_max1, periodic_max2, periodic_max3
167 real(kind=rp),
intent(in) :: periodic_shift_x1, periodic_shift_y1
168 real(kind=rp),
intent(in) :: periodic_shift_z1, periodic_shift_x2
169 real(kind=rp),
intent(in) :: periodic_shift_y2, periodic_shift_z2
170 real(kind=rp),
intent(in) :: periodic_shift_x3, periodic_shift_y3
171 real(kind=rp),
intent(in) :: periodic_shift_z3
172 real(kind=rp),
intent(in) :: periodic_len1, periodic_len2, periodic_len3
173 type(c_ptr),
optional :: strm
176 if (n .lt. 1 .or. n_periodic_dirs .lt. 1)
return
178 if (
present(strm)) strm_ = strm
182 n_periodic_dirs, periodic_dir_x1, periodic_dir_y1, periodic_dir_z1, &
183 periodic_dir_x2, periodic_dir_y2, periodic_dir_z2, periodic_dir_x3, &
184 periodic_dir_y3, periodic_dir_z3, periodic_min1, periodic_min2, &
185 periodic_min3, periodic_max1, periodic_max2, periodic_max3, &
186 periodic_shift_x1, periodic_shift_y1, periodic_shift_z1, &
187 periodic_shift_x2, periodic_shift_y2, periodic_shift_z2, &
188 periodic_shift_x3, periodic_shift_y3, periodic_shift_z3, &
189 periodic_len1, periodic_len2, periodic_len3, strm_)
192 n_periodic_dirs, periodic_dir_x1, periodic_dir_y1, periodic_dir_z1, &
193 periodic_dir_x2, periodic_dir_y2, periodic_dir_z2, periodic_dir_x3, &
194 periodic_dir_y3, periodic_dir_z3, periodic_min1, periodic_min2, &
195 periodic_min3, periodic_max1, periodic_max2, periodic_max3, &
196 periodic_shift_x1, periodic_shift_y1, periodic_shift_z1, &
197 periodic_shift_x2, periodic_shift_y2, periodic_shift_z2, &
198 periodic_shift_x3, periodic_shift_y3, periodic_shift_z3, &
199 periodic_len1, periodic_len2, periodic_len3, strm_)
201 call neko_error(
'LPT periodic BC device wrapping requires CUDA or HIP')
214 theta_max, theta_len, u, v, w, u_lag, v_lag, w_lag, u_laglag, &
215 v_laglag, w_laglag, acc_xlag, acc_ylag, acc_zlag, acc_xlaglag, &
216 acc_ylaglag, acc_zlaglag, strm)
217 type(
vector_t),
intent(inout) :: x, y, z
218 integer,
intent(in) :: n
219 real(kind=rp),
intent(in) :: theta_min
220 real(kind=rp),
intent(in) :: theta_max
221 real(kind=rp),
intent(in) :: theta_len
222 type(
vector_t),
intent(inout),
optional :: u, v, w
223 type(
vector_t),
intent(inout),
optional :: u_lag, v_lag, w_lag
224 type(
vector_t),
intent(inout),
optional :: u_laglag, v_laglag, w_laglag
225 type(
vector_t),
intent(inout),
optional :: acc_xlag, acc_ylag, acc_zlag
226 type(
vector_t),
intent(inout),
optional :: acc_xlaglag
227 type(
vector_t),
intent(inout),
optional :: acc_ylaglag
228 type(
vector_t),
intent(inout),
optional :: acc_zlaglag
229 type(c_ptr),
optional :: strm
231 type(c_ptr) :: u_d, v_d, w_d
232 type(c_ptr) :: u_lag_d, v_lag_d, w_lag_d
233 type(c_ptr) :: u_laglag_d, v_laglag_d, w_laglag_d
234 type(c_ptr) :: acc_xlag_d, acc_ylag_d, acc_zlag_d
235 type(c_ptr) :: acc_xlaglag_d, acc_ylaglag_d, acc_zlaglag_d
239 if (
present(strm)) strm_ = strm
247 u_laglag_d = c_null_ptr
248 v_laglag_d = c_null_ptr
249 w_laglag_d = c_null_ptr
250 acc_xlag_d = c_null_ptr
251 acc_ylag_d = c_null_ptr
252 acc_zlag_d = c_null_ptr
253 acc_xlaglag_d = c_null_ptr
254 acc_ylaglag_d = c_null_ptr
255 acc_zlaglag_d = c_null_ptr
257 if (
present(u)) u_d = u%x_d
258 if (
present(v)) v_d = v%x_d
259 if (
present(w)) w_d = w%x_d
260 if (
present(u_lag)) u_lag_d = u_lag%x_d
261 if (
present(v_lag)) v_lag_d = v_lag%x_d
262 if (
present(w_lag)) w_lag_d = w_lag%x_d
263 if (
present(u_laglag)) u_laglag_d = u_laglag%x_d
264 if (
present(v_laglag)) v_laglag_d = v_laglag%x_d
265 if (
present(w_laglag)) w_laglag_d = w_laglag%x_d
266 if (
present(acc_xlag)) acc_xlag_d = acc_xlag%x_d
267 if (
present(acc_ylag)) acc_ylag_d = acc_ylag%x_d
268 if (
present(acc_zlag)) acc_zlag_d = acc_zlag%x_d
269 if (
present(acc_xlaglag)) acc_xlaglag_d = acc_xlaglag%x_d
270 if (
present(acc_ylaglag)) acc_ylaglag_d = acc_ylaglag%x_d
271 if (
present(acc_zlaglag)) acc_zlaglag_d = acc_zlaglag%x_d
275 theta_min, theta_max, theta_len, u_d, v_d, w_d, u_lag_d, v_lag_d, &
276 w_lag_d, u_laglag_d, v_laglag_d, w_laglag_d, acc_xlag_d, &
277 acc_ylag_d, acc_zlag_d, acc_xlaglag_d, acc_ylaglag_d, &
278 acc_zlaglag_d, strm_)
281 theta_min, theta_max, theta_len, u_d, v_d, w_d, u_lag_d, v_lag_d, &
282 w_lag_d, u_laglag_d, v_laglag_d, w_laglag_d, acc_xlag_d, &
283 acc_ylag_d, acc_zlag_d, acc_xlaglag_d, acc_ylaglag_d, &
284 acc_zlaglag_d, strm_)
286 call neko_error(
'LPT periodic BC device wrapping requires CUDA or HIP')
HIP kernel entry point for rotational periodic wrapping.
HIP kernel entry point for translational periodic wrapping.
void cuda_lpt_periodic_bc_wrap_rotational(void *x, void *y, void *z, int *n, real *theta_min, real *theta_max, real *theta_len, void *u, void *v, void *w, void *u_lag, void *v_lag, void *w_lag, void *u_laglag, void *v_laglag, void *w_laglag, void *acc_xlag, void *acc_ylag, void *acc_zlag, void *acc_xlaglag, void *acc_ylaglag, void *acc_zlaglag, cudaStream_t strm)
void cuda_lpt_periodic_bc_wrap_translational(void *x, void *y, void *z, int *n, int *n_periodic_dirs, real *periodic_dir_x1, real *periodic_dir_y1, real *periodic_dir_z1, real *periodic_dir_x2, real *periodic_dir_y2, real *periodic_dir_z2, real *periodic_dir_x3, real *periodic_dir_y3, real *periodic_dir_z3, real *periodic_min1, real *periodic_min2, real *periodic_min3, real *periodic_max1, real *periodic_max2, real *periodic_max3, real *periodic_shift_x1, real *periodic_shift_y1, real *periodic_shift_z1, real *periodic_shift_x2, real *periodic_shift_y2, real *periodic_shift_z2, real *periodic_shift_x3, real *periodic_shift_y3, real *periodic_shift_z3, real *periodic_len1, real *periodic_len2, real *periodic_len3, cudaStream_t strm)
Device abstraction, common interface for various accelerators.
type(c_ptr), bind(C), public glb_cmd_queue
Global command queue.
Device dispatch for LPT periodic boundary-condition wrapping.
subroutine, public lpt_periodic_bc_wrap_rotational_device(x, y, z, n, theta_min, theta_max, theta_len, u, v, w, u_lag, v_lag, w_lag, u_laglag, v_laglag, w_laglag, acc_xlag, acc_ylag, acc_zlag, acc_xlaglag, acc_ylaglag, acc_zlaglag, strm)
Launch device kernel for rotational periodic wrapping.
subroutine, public lpt_periodic_bc_wrap_translational_device(x, y, z, n, n_periodic_dirs, periodic_dir_x1, periodic_dir_y1, periodic_dir_z1, periodic_dir_x2, periodic_dir_y2, periodic_dir_z2, periodic_dir_x3, periodic_dir_y3, periodic_dir_z3, periodic_min1, periodic_min2, periodic_min3, periodic_max1, periodic_max2, periodic_max3, periodic_shift_x1, periodic_shift_y1, periodic_shift_z1, periodic_shift_x2, periodic_shift_y2, periodic_shift_z2, periodic_shift_x3, periodic_shift_y3, periodic_shift_z3, periodic_len1, periodic_len2, periodic_len3, strm)
Launch device kernel for translational periodic wrapping.
integer, parameter, public c_rp
integer, parameter, public rp
Global precision used in computations.