35 use,
intrinsic :: iso_c_binding, only: c_ptr, c_int
45 gamma, p_d, rho_d, n) &
46 bind(c, name =
'hip_compute_max_wave_speed')
47 use,
intrinsic :: iso_c_binding
49 type(c_ptr),
value :: max_wave_speed_d, u_d, v_d, w_d, p_d, rho_d
57 bind(c, name =
'hip_compute_entropy')
58 use,
intrinsic :: iso_c_binding
60 type(c_ptr),
value :: S_d, p_d, rho_d
68 m_y_d, m_z_d, rho_d, n) &
69 bind(c, name =
'hip_update_uvw')
70 use,
intrinsic :: iso_c_binding
72 type(c_ptr),
value :: u_d, v_d, w_d, m_x_d, m_y_d, m_z_d, rho_d
79 p_d, ruvw_d, u_d, v_d, w_d, E_d, rho_d, gamma, n) &
80 bind(c, name =
'hip_update_mxyz_p_ruvw')
81 use,
intrinsic :: iso_c_binding
83 type(c_ptr),
value :: u_d, v_d, w_d, m_x_d, m_y_d, m_z_d, rho_d
84 type(c_ptr),
value :: p_d, ruvw_d, E_d
92 bind(c, name =
'hip_update_e')
93 use,
intrinsic :: iso_c_binding
95 type(c_ptr),
value :: p_d, E_d, ruvw_d
104 gamma, p_d, rho_d, n) &
105 bind(c, name =
'cuda_compute_max_wave_speed')
106 use,
intrinsic :: iso_c_binding
108 type(c_ptr),
value :: max_wave_speed_d, u_d, v_d, w_d, p_d, rho_d
116 bind(c, name =
'cuda_compute_entropy')
117 use,
intrinsic :: iso_c_binding
119 type(c_ptr),
value :: S_d, p_d, rho_d
127 m_y_d, m_z_d, rho_d, n) &
128 bind(c, name =
'cuda_update_uvw')
129 use,
intrinsic :: iso_c_binding
131 type(c_ptr),
value :: u_d, v_d, w_d, m_x_d, m_y_d, m_z_d, rho_d
138 p_d, ruvw_d, u_d, v_d, w_d, E_d, rho_d, gamma, n) &
139 bind(c, name =
'cuda_update_mxyz_p_ruvw')
140 use,
intrinsic :: iso_c_binding
142 type(c_ptr),
value :: u_d, v_d, w_d, m_x_d, m_y_d, m_z_d, rho_d
143 type(c_ptr),
value :: p_d, ruvw_d, E_d
151 bind(c, name =
'cuda_update_e')
152 use,
intrinsic :: iso_c_binding
154 type(c_ptr),
value :: p_d, E_d, ruvw_d
163 gamma, p_d, rho_d, n) &
164 bind(c, name =
'opencl_compute_max_wave_speed')
165 use,
intrinsic :: iso_c_binding
167 type(c_ptr),
value :: max_wave_speed_d, u_d, v_d, w_d, p_d, rho_d
168 real(c_rp),
value :: gamma
169 integer(c_int),
value :: n
175 bind(c, name =
'opencl_compute_entropy')
176 use,
intrinsic :: iso_c_binding
178 type(c_ptr),
value :: S_d, p_d, rho_d
179 real(c_rp),
value :: gamma
180 integer(c_int),
value :: n
186 m_y_d, m_z_d, rho_d, n) &
187 bind(c, name =
'opencl_update_uvw')
188 use,
intrinsic :: iso_c_binding
190 type(c_ptr),
value :: u_d, v_d, w_d, m_x_d, m_y_d, m_z_d, rho_d
191 integer(c_int),
value :: n
197 p_d, ruvw_d, u_d, v_d, w_d, E_d, rho_d, gamma, n) &
198 bind(c, name =
'opencl_update_mxyz_p_ruvw')
199 use,
intrinsic :: iso_c_binding
201 type(c_ptr),
value :: u_d, v_d, w_d, m_x_d, m_y_d, m_z_d, rho_d
202 type(c_ptr),
value :: p_d, ruvw_d, E_d
203 real(c_rp),
value :: gamma
204 integer(c_int),
value :: n
210 bind(c, name =
'opencl_update_e')
211 use,
intrinsic :: iso_c_binding
213 type(c_ptr),
value :: p_d, E_d, ruvw_d
214 real(c_rp),
value :: gamma
215 integer(c_int),
value :: n
220 subroutine metal_compute_max_wave_speed(max_wave_speed_d, u_d, v_d, w_d, &
221 gamma, p_d, rho_d, n) &
222 bind(c, name =
'metal_compute_max_wave_speed')
223 use,
intrinsic :: iso_c_binding
225 type(c_ptr),
value :: max_wave_speed_d, u_d, v_d, w_d, p_d, rho_d
226 real(c_rp),
value :: gamma
227 integer(c_int),
value :: n
228 end subroutine metal_compute_max_wave_speed
232 subroutine metal_compute_entropy(S_d, p_d, rho_d, gamma, n) &
233 bind(c, name =
'metal_compute_entropy')
234 use,
intrinsic :: iso_c_binding
236 type(c_ptr),
value :: S_d, p_d, rho_d
237 real(c_rp),
value :: gamma
238 integer(c_int),
value :: n
239 end subroutine metal_compute_entropy
243 subroutine metal_update_uvw(u_d, v_d, w_d, m_x_d, &
244 m_y_d, m_z_d, rho_d, n) &
245 bind(c, name =
'metal_update_uvw')
246 use,
intrinsic :: iso_c_binding
248 type(c_ptr),
value :: u_d, v_d, w_d, m_x_d, m_y_d, m_z_d, rho_d
249 integer(c_int),
value :: n
250 end subroutine metal_update_uvw
254 subroutine metal_update_mxyz_p_ruvw(m_x_d, m_y_d, m_z_d, &
255 p_d, ruvw_d, u_d, v_d, w_d, E_d, rho_d, gamma, n) &
256 bind(c, name =
'metal_update_mxyz_p_ruvw')
257 use,
intrinsic :: iso_c_binding
259 type(c_ptr),
value :: u_d, v_d, w_d, m_x_d, m_y_d, m_z_d, rho_d
260 type(c_ptr),
value :: p_d, ruvw_d, E_d
261 real(c_rp),
value :: gamma
262 integer(c_int),
value :: n
263 end subroutine metal_update_mxyz_p_ruvw
267 subroutine metal_update_e(E_d, p_d, ruvw_d, gamma, n) &
268 bind(c, name =
'metal_update_e')
269 use,
intrinsic :: iso_c_binding
271 type(c_ptr),
value :: p_d, E_d, ruvw_d
272 real(c_rp),
value :: gamma
273 integer(c_int),
value :: n
274 end subroutine metal_update_e
288 integer,
intent(in) :: n
289 real(kind=
rp),
intent(in) :: gamma
290 type(
field_t),
intent(inout) :: max_wave_speed
291 type(
field_t),
intent(in) :: u, v, w, p, rho
300 call metal_compute_max_wave_speed(max_wave_speed%x_d, u%x_d, v%x_d, w%x_d, gamma, p%x_d, rho%x_d, n)
302 call neko_error(
'No device backend configured')
308 integer,
intent(in) :: n
309 real(kind=
rp),
intent(in) :: gamma
310 type(
field_t),
intent(inout) :: s
311 type(
field_t),
intent(in) :: p, rho
320 call metal_compute_entropy(s%x_d, p%x_d, rho%x_d, gamma, n)
322 call neko_error(
'No device backend configured')
328 m_x_d, m_y_d, m_z_d, rho_d, n)
329 type(c_ptr),
intent(inout) :: u_d, v_d, w_d
330 type(c_ptr),
intent(in) :: m_x_d, m_y_d, m_z_d, rho_d
331 integer,
intent(in) :: n
341 call metal_update_uvw(u_d, v_d, w_d, m_x_d, m_y_d, m_z_d, rho_d, n)
343 call neko_error(
'No device backend configured')
350 p_d, ruvw_d, u_d, v_d, w_d, E_d, rho_d, gamma, n)
351 integer,
intent(in) :: n
352 type(c_ptr),
intent(inout) :: m_x_d, m_y_d, m_z_d, p_d, ruvw_d
353 type(c_ptr),
intent(in) :: u_d, v_d, w_d, e_d, rho_d
354 real(kind=
rp),
intent(in) :: gamma
359 p_d, ruvw_d, u_d, v_d, w_d, e_d, rho_d, gamma, n)
362 p_d, ruvw_d, u_d, v_d, w_d, e_d, rho_d, gamma, n)
365 p_d, ruvw_d, u_d, v_d, w_d, e_d, rho_d, gamma, n)
367 call metal_update_mxyz_p_ruvw(m_x_d, m_y_d, m_z_d, &
368 p_d, ruvw_d, u_d, v_d, w_d, e_d, rho_d, gamma, n)
370 call neko_error(
'No device backend configured')
377 integer,
intent(in) :: n
378 type(c_ptr),
intent(inout) :: e_d, p_d
380 type(c_ptr),
intent(in) :: ruvw_d
381 real(kind=
rp),
intent(in) :: gamma
390 call metal_update_e(e_d, p_d, ruvw_d, gamma, n)
392 call neko_error(
'No device backend configured')
void opencl_compute_entropy(void *S_d, void *p_d, void *rho_d, real gamma, int n)
void cuda_compute_entropy(void *S_d, void *p_d, void *rho_d, real *gamma, int *n)
void opencl_compute_max_wave_speed(void *max_wave_speed, void *u, void *v, void *w, real gamma, void *p, void *rho, int n)
void cuda_compute_max_wave_speed(void *max_wave_speed_d, void *u_d, void *v_d, void *w_d, real *gamma, void *p_d, void *rho_d, int *n)
void opencl_update_uvw(void *u, void *v, void *w, void *m_x, void *m_y, void *m_z, void *rho, int n)
void opencl_update_e(void *E, void *p, void *ruvw, real gamma, int n)
void opencl_update_mxyz_p_ruvw(void *m_x, void *m_y, void *m_z, void *p, void *ruvw, void *u, void *v, void *w, void *E, void *rho, real gamma, int n)
void cuda_update_uvw(void *u, void *v, void *w, void *m_x, void *m_y, void *m_z, void *rho, int *n)
void cuda_update_mxyz_p_ruvw(void *m_x, void *m_y, void *m_z, void *p, void *ruvw, void *u, void *v, void *w, void *E, void *rho, real *gamma, int *n)
void cuda_update_e(void *E, void *p, void *ruvw, real *gamma, int *n)
Device implementation of compressible flow operations.
subroutine, public compressible_ops_device_compute_entropy(s, p, rho, gamma, n)
Compute entropy field S = 1/(gamma-1) * rho * (log(p) - gamma * log(rho)) on device.
subroutine, public compressible_ops_device_update_uvw(u_d, v_d, w_d, m_x_d, m_y_d, m_z_d, rho_d, n)
Update u,v,w fields.
subroutine, public compressible_ops_device_update_mxyz_p_ruvw(m_x_d, m_y_d, m_z_d, p_d, ruvw_d, u_d, v_d, w_d, e_d, rho_d, gamma, n)
Update m_x, m_y, m_z, p, ruvw, fields.
subroutine, public compressible_ops_device_compute_max_wave_speed(max_wave_speed, u, v, w, gamma, p, rho, n)
Compute maximum wave speed for compressible flows on device.
subroutine, public compressible_ops_device_update_e(e_d, p_d, ruvw_d, gamma, n)
Update E field.
integer, parameter, public c_rp
integer, parameter, public rp
Global precision used in computations.