41 use,
intrinsic :: iso_c_binding, only : c_int, c_ptr
49 el_list, x_old, y_old, z_old, x, y, z, d, u, v, w, u_lag, &
50 v_lag, w_lag, u_laglag, v_laglag, w_laglag, acc_xlag, &
51 acc_ylag, acc_zlag, acc_xlaglag, acc_ylaglag, acc_zlaglag, &
52 u_old, v_old, w_old, acc_x, acc_y, acc_z, dm_x, dm_y, dm_z, &
53 nx, ny, nz, n, gdim, nelv, lx, ly, lz, lag_len, strm) &
54 bind(c, name =
'hip_lpt_handle_elastic_wall_collisions')
55 use,
intrinsic :: iso_c_binding
57 type(c_ptr),
value :: wall_facet_mask, el_list
58 type(c_ptr),
value :: x_old, y_old, z_old
59 type(c_ptr),
value :: x, y, z, d, u, v, w
60 type(c_ptr),
value :: u_lag, v_lag, w_lag
61 type(c_ptr),
value :: u_laglag, v_laglag, w_laglag
62 type(c_ptr),
value :: acc_xlag, acc_ylag, acc_zlag
63 type(c_ptr),
value :: acc_xlaglag, acc_ylaglag, acc_zlaglag
64 type(c_ptr),
value :: u_old, v_old, w_old
65 type(c_ptr),
value :: acc_x, acc_y, acc_z
66 type(c_ptr),
value :: dm_x, dm_y, dm_z
67 type(c_ptr),
value :: nx, ny, nz, strm
68 integer(c_int) :: n, gdim, nelv, lx, ly, lz, lag_len
75 el_list, x_old, y_old, z_old, x, y, z, d, u, v, w, u_lag, &
76 v_lag, w_lag, u_laglag, v_laglag, w_laglag, acc_xlag, &
77 acc_ylag, acc_zlag, acc_xlaglag, acc_ylaglag, acc_zlaglag, &
78 u_old, v_old, w_old, acc_x, acc_y, acc_z, dm_x, dm_y, dm_z, &
79 nx, ny, nz, n, gdim, nelv, lx, ly, lz, lag_len, strm) &
80 bind(c, name =
'cuda_lpt_handle_elastic_wall_collisions')
81 use,
intrinsic :: iso_c_binding
83 type(c_ptr),
value :: wall_facet_mask, el_list
84 type(c_ptr),
value :: x_old, y_old, z_old
85 type(c_ptr),
value :: x, y, z, d, u, v, w
86 type(c_ptr),
value :: u_lag, v_lag, w_lag
87 type(c_ptr),
value :: u_laglag, v_laglag, w_laglag
88 type(c_ptr),
value :: acc_xlag, acc_ylag, acc_zlag
89 type(c_ptr),
value :: acc_xlaglag, acc_ylaglag, acc_zlaglag
90 type(c_ptr),
value :: u_old, v_old, w_old
91 type(c_ptr),
value :: acc_x, acc_y, acc_z
92 type(c_ptr),
value :: dm_x, dm_y, dm_z
93 type(c_ptr),
value :: nx, ny, nz, strm
94 integer(c_int) :: n, gdim, nelv, lx, ly, lz, lag_len
101 el_list, x_old, y_old, z_old, x, y, z, d, u, v, w, u_lag, &
102 v_lag, w_lag, u_laglag, v_laglag, w_laglag, acc_xlag, &
103 acc_ylag, acc_zlag, acc_xlaglag, acc_ylaglag, acc_zlaglag, &
104 u_old, v_old, w_old, acc_x, acc_y, acc_z, dm_x, dm_y, dm_z, &
105 nx, ny, nz, n, gdim, nelv, lx, ly, lz, lag_len, strm) &
106 bind(c, name =
'opencl_lpt_handle_elastic_wall_collisions')
107 use,
intrinsic :: iso_c_binding
109 type(c_ptr),
value :: wall_facet_mask, el_list
110 type(c_ptr),
value :: x_old, y_old, z_old
111 type(c_ptr),
value :: x, y, z, d, u, v, w
112 type(c_ptr),
value :: u_lag, v_lag, w_lag
113 type(c_ptr),
value :: u_laglag, v_laglag, w_laglag
114 type(c_ptr),
value :: acc_xlag, acc_ylag, acc_zlag
115 type(c_ptr),
value :: acc_xlaglag, acc_ylaglag, acc_zlaglag
116 type(c_ptr),
value :: u_old, v_old, w_old
117 type(c_ptr),
value :: acc_x, acc_y, acc_z
118 type(c_ptr),
value :: dm_x, dm_y, dm_z
119 type(c_ptr),
value :: nx, ny, nz, strm
120 integer(c_int) :: n, gdim, nelv, lx, ly, lz, lag_len
126 subroutine metal_lpt_handle_elastic_wall_collisions(wall_facet_mask, &
127 el_list, x_old, y_old, z_old, x, y, z, d, u, v, w, u_lag, &
128 v_lag, w_lag, u_laglag, v_laglag, w_laglag, acc_xlag, &
129 acc_ylag, acc_zlag, acc_xlaglag, acc_ylaglag, acc_zlaglag, &
130 u_old, v_old, w_old, acc_x, acc_y, acc_z, dm_x, dm_y, dm_z, &
131 nx, ny, nz, n, gdim, nelv, lx, ly, lz, lag_len, strm) &
132 bind(c, name =
'metal_lpt_handle_elastic_wall_collisions')
133 use,
intrinsic :: iso_c_binding
135 type(c_ptr),
value :: wall_facet_mask, el_list
136 type(c_ptr),
value :: x_old, y_old, z_old
137 type(c_ptr),
value :: x, y, z, d, u, v, w
138 type(c_ptr),
value :: u_lag, v_lag, w_lag
139 type(c_ptr),
value :: u_laglag, v_laglag, w_laglag
140 type(c_ptr),
value :: acc_xlag, acc_ylag, acc_zlag
141 type(c_ptr),
value :: acc_xlaglag, acc_ylaglag, acc_zlaglag
142 type(c_ptr),
value :: u_old, v_old, w_old
143 type(c_ptr),
value :: acc_x, acc_y, acc_z
144 type(c_ptr),
value :: dm_x, dm_y, dm_z
145 type(c_ptr),
value :: nx, ny, nz, strm
146 integer(c_int) :: n, gdim, nelv, lx, ly, lz, lag_len
147 end subroutine metal_lpt_handle_elastic_wall_collisions
163 wall_facet_mask_d, el_list_d, x_old, y_old, z_old, x, y, z, d, &
164 u, v, w, u_lag, v_lag, w_lag, u_laglag, v_laglag, w_laglag, &
165 acc_xlag, acc_ylag, acc_zlag, acc_xlaglag, acc_ylaglag, &
166 acc_zlaglag, u_old, v_old, w_old, acc_x, acc_y, acc_z, lag_len, &
168 type(
mesh_t),
intent(in) :: msh
170 type(
coef_t),
intent(in) :: coef
171 type(c_ptr),
intent(in) :: wall_facet_mask_d
172 type(c_ptr),
intent(in) :: el_list_d
173 type(
vector_t),
intent(in) :: x_old, y_old, z_old
174 type(
vector_t),
intent(inout) :: x, y, z
176 type(
vector_t),
intent(inout) :: u, v, w
177 type(
vector_t),
intent(inout) :: u_lag, v_lag, w_lag
178 type(
vector_t),
intent(inout) :: u_laglag, v_laglag, w_laglag
179 type(
vector_t),
intent(inout) :: acc_xlag, acc_ylag, acc_zlag
180 type(
vector_t),
intent(inout) :: acc_xlaglag, acc_ylaglag
181 type(
vector_t),
intent(inout) :: acc_zlaglag
182 type(
vector_t),
intent(inout) :: u_old, v_old, w_old
183 type(
vector_t),
intent(inout) :: acc_x, acc_y, acc_z
184 integer,
intent(in) :: lag_len
185 integer,
intent(in) :: n
186 type(c_ptr),
optional :: strm
189 integer(c_int) :: gdim_
190 integer(c_int) :: nelv_
191 integer(c_int) :: lx_
192 integer(c_int) :: ly_
193 integer(c_int) :: lz_
194 integer(c_int) :: lag_len_
199 if (
present(strm)) strm_ = strm
202 gdim_ = int(msh%gdim, c_int)
203 nelv_ = int(msh%nelv, c_int)
204 lx_ = int(dm_xh%Xh%lx, c_int)
205 ly_ = int(dm_xh%Xh%ly, c_int)
206 lz_ = int(dm_xh%Xh%lz, c_int)
207 lag_len_ = int(lag_len, c_int)
211 el_list_d, x_old%x_d, y_old%x_d, z_old%x_d, x%x_d, y%x_d, z%x_d, &
212 d%x_d, u%x_d, v%x_d, w%x_d, u_lag%x_d, v_lag%x_d, w_lag%x_d, &
213 u_laglag%x_d, v_laglag%x_d, w_laglag%x_d, acc_xlag%x_d, &
214 acc_ylag%x_d, acc_zlag%x_d, acc_xlaglag%x_d, acc_ylaglag%x_d, &
215 acc_zlaglag%x_d, u_old%x_d, v_old%x_d, w_old%x_d, acc_x%x_d, &
216 acc_y%x_d, acc_z%x_d, dm_xh%x%x_d, dm_xh%y%x_d, dm_xh%z%x_d, &
217 coef%nx_d, coef%ny_d, coef%nz_d, n_, gdim_, nelv_, lx_, ly_, &
218 lz_, lag_len_, strm_)
221 el_list_d, x_old%x_d, y_old%x_d, z_old%x_d, x%x_d, y%x_d, z%x_d, &
222 d%x_d, u%x_d, v%x_d, w%x_d, u_lag%x_d, v_lag%x_d, w_lag%x_d, &
223 u_laglag%x_d, v_laglag%x_d, w_laglag%x_d, acc_xlag%x_d, &
224 acc_ylag%x_d, acc_zlag%x_d, acc_xlaglag%x_d, acc_ylaglag%x_d, &
225 acc_zlaglag%x_d, u_old%x_d, v_old%x_d, w_old%x_d, acc_x%x_d, &
226 acc_y%x_d, acc_z%x_d, dm_xh%x%x_d, dm_xh%y%x_d, dm_xh%z%x_d, &
227 coef%nx_d, coef%ny_d, coef%nz_d, n_, gdim_, nelv_, lx_, ly_, &
228 lz_, lag_len_, strm_)
231 el_list_d, x_old%x_d, y_old%x_d, z_old%x_d, x%x_d, y%x_d, z%x_d, &
232 d%x_d, u%x_d, v%x_d, w%x_d, u_lag%x_d, v_lag%x_d, w_lag%x_d, &
233 u_laglag%x_d, v_laglag%x_d, w_laglag%x_d, acc_xlag%x_d, &
234 acc_ylag%x_d, acc_zlag%x_d, acc_xlaglag%x_d, acc_ylaglag%x_d, &
235 acc_zlaglag%x_d, u_old%x_d, v_old%x_d, w_old%x_d, acc_x%x_d, &
236 acc_y%x_d, acc_z%x_d, dm_xh%x%x_d, dm_xh%y%x_d, dm_xh%z%x_d, &
237 coef%nx_d, coef%ny_d, coef%nz_d, n_, gdim_, nelv_, lx_, ly_, &
238 lz_, lag_len_, strm_)
240 call metal_lpt_handle_elastic_wall_collisions(wall_facet_mask_d, &
241 el_list_d, x_old%x_d, y_old%x_d, z_old%x_d, x%x_d, y%x_d, z%x_d, &
242 d%x_d, u%x_d, v%x_d, w%x_d, u_lag%x_d, v_lag%x_d, w_lag%x_d, &
243 u_laglag%x_d, v_laglag%x_d, w_laglag%x_d, acc_xlag%x_d, &
244 acc_ylag%x_d, acc_zlag%x_d, acc_xlaglag%x_d, acc_ylaglag%x_d, &
245 acc_zlaglag%x_d, u_old%x_d, v_old%x_d, w_old%x_d, acc_x%x_d, &
246 acc_y%x_d, acc_z%x_d, dm_xh%x%x_d, dm_xh%y%x_d, dm_xh%z%x_d, &
247 coef%nx_d, coef%ny_d, coef%nz_d, n_, gdim_, nelv_, lx_, ly_, &
248 lz_, lag_len_, strm_)
250 call neko_error(
'No device backend configured')
HIP kernel entry point for elastic wall-collision reflection.
void opencl_lpt_handle_elastic_wall_collisions(void *wall_facet_mask, void *el_list, void *x_old, void *y_old, void *z_old, void *x, void *y, void *z, void *d, 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, void *u_old, void *v_old, void *w_old, void *acc_x, void *acc_y, void *acc_z, void *dm_x, void *dm_y, void *dm_z, void *nx, void *ny, void *nz, int *n, int *gdim, int *nelv, int *lx, int *ly, int *lz, int *lag_len, void *strm)
void cuda_lpt_handle_elastic_wall_collisions(void *wall_facet_mask, void *el_list, void *x_old, void *y_old, void *z_old, void *x, void *y, void *z, void *d, 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, void *u_old, void *v_old, void *w_old, void *acc_x, void *acc_y, void *acc_z, void *dm_x, void *dm_y, void *dm_z, void *nx, void *ny, void *nz, int *n, int *gdim, int *nelv, int *lx, int *ly, int *lz, int *lag_len, cudaStream_t strm)
Device abstraction, common interface for various accelerators.
type(c_ptr), bind(C), public glb_cmd_queue
Global command queue.
Defines a mapping of the degrees of freedom.
Device dispatch for LPT elastic wall-collision handling.
subroutine, public lpt_handle_elastic_wall_collisions_device(msh, dm_xh, coef, wall_facet_mask_d, el_list_d, x_old, y_old, z_old, x, y, z, d, 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, u_old, v_old, w_old, acc_x, acc_y, acc_z, lag_len, n, strm)
Launch device kernel for elastic wall-collision reflection.
Coefficients defined on a given (mesh, ) tuple. Arrays use indices (i,j,k,e): element e,...