35 use,
intrinsic :: iso_c_binding, only: c_ptr, c_int
44 S_d, S_lag1_d, S_lag2_d, S_lag3_d, &
45 bdf1, bdf2, bdf3, bdf4, dt, n) &
46 bind(c, name =
'hip_entropy_visc_compute_residual')
47 use,
intrinsic :: iso_c_binding
49 type(c_ptr),
value :: entropy_residual_d
50 type(c_ptr),
value :: S_d, S_lag1_d, S_lag2_d, S_lag3_d
51 real(c_rp) :: bdf1, bdf2, bdf3, bdf4, dt
58 entropy_residual_d, h_d, c_avisc_entropy, n_S, n) &
59 bind(c, name =
'hip_entropy_visc_compute_viscosity')
60 use,
intrinsic :: iso_c_binding
62 type(c_ptr),
value :: reg_coeff_d, entropy_residual_d, h_d
63 real(c_rp) :: c_avisc_entropy, n_S
70 bind(c, name =
'hip_entropy_visc_apply_element_max')
71 use,
intrinsic :: iso_c_binding
72 type(c_ptr),
value :: reg_coeff_d
73 integer(c_int) :: lx, nelv
79 h_d, max_wave_speed_d, c_avisc_low, n) &
80 bind(c, name =
'hip_entropy_visc_clamp_to_low_order')
81 use,
intrinsic :: iso_c_binding
83 type(c_ptr),
value :: reg_coeff_d, h_d, max_wave_speed_d
84 real(c_rp) :: c_avisc_low
91 temp_field_d, mult_field_d, n) &
92 bind(c, name =
'hip_entropy_visc_smooth_divide')
93 use,
intrinsic :: iso_c_binding
94 type(c_ptr),
value :: reg_coeff_d, temp_field_d, mult_field_d
102 S_d, S_lag1_d, S_lag2_d, S_lag3_d, &
103 bdf1, bdf2, bdf3, bdf4, dt, n) &
104 bind(c, name =
'cuda_entropy_visc_compute_residual')
105 use,
intrinsic :: iso_c_binding
107 type(c_ptr),
value :: entropy_residual_d
108 type(c_ptr),
value :: S_d, S_lag1_d, S_lag2_d, S_lag3_d
109 real(c_rp) :: bdf1, bdf2, bdf3, bdf4, dt
116 entropy_residual_d, h_d, c_avisc_entropy, n_S, n) &
117 bind(c, name =
'cuda_entropy_visc_compute_viscosity')
118 use,
intrinsic :: iso_c_binding
120 type(c_ptr),
value :: reg_coeff_d, entropy_residual_d, h_d
121 real(c_rp) :: c_avisc_entropy, n_S
128 bind(c, name =
'cuda_entropy_visc_apply_element_max')
129 use,
intrinsic :: iso_c_binding
130 type(c_ptr),
value :: reg_coeff_d
131 integer(c_int) :: lx, nelv
137 h_d, max_wave_speed_d, c_avisc_low, n) &
138 bind(c, name =
'cuda_entropy_visc_clamp_to_low_order')
139 use,
intrinsic :: iso_c_binding
141 type(c_ptr),
value :: reg_coeff_d, h_d, max_wave_speed_d
142 real(c_rp) :: c_avisc_low
149 temp_field_d, mult_field_d, n) &
150 bind(c, name =
'cuda_entropy_visc_smooth_divide')
151 use,
intrinsic :: iso_c_binding
152 type(c_ptr),
value :: reg_coeff_d, temp_field_d, mult_field_d
160 S_d, S_lag1_d, S_lag2_d, S_lag3_d, &
161 bdf1, bdf2, bdf3, bdf4, dt, n) &
162 bind(c, name =
'opencl_entropy_visc_compute_residual')
163 use,
intrinsic :: iso_c_binding
165 type(c_ptr),
value :: entropy_residual_d
166 type(c_ptr),
value :: S_d, S_lag1_d, S_lag2_d, S_lag3_d
167 real(c_rp),
value :: bdf1, bdf2, bdf3, bdf4, dt
168 integer(c_int),
value :: n
174 entropy_residual_d, h_d, c_avisc_entropy, n_S, n) &
175 bind(c, name =
'opencl_entropy_visc_compute_viscosity')
176 use,
intrinsic :: iso_c_binding
178 type(c_ptr),
value :: reg_coeff_d, entropy_residual_d, h_d
179 real(c_rp),
value :: c_avisc_entropy, n_S
180 integer(c_int),
value :: n
186 bind(c, name =
'opencl_entropy_visc_apply_element_max')
187 use,
intrinsic :: iso_c_binding
188 type(c_ptr),
value :: reg_coeff_d
189 integer(c_int),
value :: lx, nelv
195 h_d, max_wave_speed_d, c_avisc_low, n) &
196 bind(c, name =
'opencl_entropy_visc_clamp_to_low_order')
197 use,
intrinsic :: iso_c_binding
199 type(c_ptr),
value :: reg_coeff_d, h_d, max_wave_speed_d
200 real(c_rp),
value :: c_avisc_low
201 integer(c_int),
value :: n
207 temp_field_d, mult_field_d, n) &
208 bind(c, name =
'opencl_entropy_visc_smooth_divide')
209 use,
intrinsic :: iso_c_binding
210 type(c_ptr),
value :: reg_coeff_d, temp_field_d, mult_field_d
211 integer(c_int),
value :: n
226 S_d, S_lag1_d, S_lag2_d, S_lag3_d, bdf_coeffs, dt, n)
227 type(c_ptr),
intent(in) :: entropy_residual_d
228 type(c_ptr),
intent(in) :: s_d, s_lag1_d, s_lag2_d, s_lag3_d
229 real(kind=
rp),
intent(in) :: bdf_coeffs(4)
230 real(kind=
rp),
intent(in) :: dt
231 integer,
intent(in) :: n
235 s_d, s_lag1_d, s_lag2_d, s_lag3_d, &
236 bdf_coeffs(1), bdf_coeffs(2), bdf_coeffs(3), bdf_coeffs(4), dt, n)
239 s_d, s_lag1_d, s_lag2_d, s_lag3_d, &
240 bdf_coeffs(1), bdf_coeffs(2), bdf_coeffs(3), bdf_coeffs(4), dt, n)
243 s_d, s_lag1_d, s_lag2_d, s_lag3_d, &
244 bdf_coeffs(1), bdf_coeffs(2), bdf_coeffs(3), bdf_coeffs(4), dt, n)
246 call neko_error(
'No device backend configured')
252 entropy_residual_d, h_d, c_avisc_entropy, n_S, n)
253 type(c_ptr),
intent(in) :: reg_coeff_d, entropy_residual_d, h_d
254 real(kind=
rp),
intent(in) :: c_avisc_entropy, n_s
255 integer,
intent(in) :: n
259 entropy_residual_d, h_d, c_avisc_entropy, n_s, n)
262 entropy_residual_d, h_d, c_avisc_entropy, n_s, n)
265 entropy_residual_d, h_d, c_avisc_entropy, n_s, n)
267 call neko_error(
'No device backend configured')
273 type(c_ptr),
intent(in) :: reg_coeff_d
274 integer,
intent(in) :: lx, nelv
283 call neko_error(
'No device backend configured')
289 h_d, max_wave_speed_d, c_avisc_low, n)
290 type(c_ptr),
intent(in) :: reg_coeff_d, h_d, max_wave_speed_d
291 real(kind=
rp),
intent(in) :: c_avisc_low
292 integer,
intent(in) :: n
296 h_d, max_wave_speed_d, c_avisc_low, n)
299 h_d, max_wave_speed_d, c_avisc_low, n)
302 h_d, max_wave_speed_d, c_avisc_low, n)
304 call neko_error(
'No device backend configured')
310 temp_field_d, mult_field_d, n)
311 type(c_ptr),
intent(in) :: reg_coeff_d, temp_field_d, mult_field_d
312 integer,
intent(in) :: n
316 temp_field_d, mult_field_d, n)
319 temp_field_d, mult_field_d, n)
322 temp_field_d, mult_field_d, n)
324 call neko_error(
'No device backend configured')
void opencl_entropy_visc_compute_viscosity(void *reg_coeff, void *entropy_residual, void *h, real c_avisc_entropy, real n_S, int n)
void opencl_entropy_visc_compute_residual(void *entropy_residual, void *S, void *S_lag1, void *S_lag2, void *S_lag3, real bdf1, real bdf2, real bdf3, real bdf4, real dt, int n)
void opencl_entropy_visc_smooth_divide(void *reg_coeff, void *temp_field, void *mult_field, int n)
void opencl_entropy_visc_clamp_to_low_order(void *reg_coeff, void *h, void *max_wave_speed, real c_avisc_low, int n)
void opencl_entropy_visc_apply_element_max(void *reg_coeff, int lx, int nelv)
void cuda_entropy_visc_apply_element_max(void *reg_coeff, int *lx, int *nelv)
void cuda_entropy_visc_smooth_divide(void *reg_coeff, void *temp_field, void *mult_field, int *n)
void cuda_entropy_visc_compute_residual(void *entropy_residual, void *S, void *S_lag1, void *S_lag2, void *S_lag3, real *bdf1, real *bdf2, real *bdf3, real *bdf4, real *dt, int *n)
void cuda_entropy_visc_clamp_to_low_order(void *reg_coeff, void *h, void *max_wave_speed, real *c_avisc_low, int *n)
void cuda_entropy_visc_compute_viscosity(void *reg_coeff, void *entropy_residual, void *h, real *c_avisc_entropy, real *n_S, int *n)
Device backend for entropy viscosity regularization.
subroutine, public entropy_viscosity_smooth_divide_device(reg_coeff_d, temp_field_d, mult_field_d, n)
Divide by multiplicity for smoothing on device.
subroutine, public entropy_viscosity_clamp_to_low_order_device(reg_coeff_d, h_d, max_wave_speed_d, c_avisc_low, n)
Clamp regularization coefficient to low-order viscosity on device.
subroutine, public entropy_viscosity_apply_element_max_device(reg_coeff_d, lx, nelv)
Apply element-wise maximum on device.
subroutine, public entropy_viscosity_compute_residual_device(entropy_residual_d, s_d, s_lag1_d, s_lag2_d, s_lag3_d, bdf_coeffs, dt, n)
Compute entropy residual on device.
subroutine, public entropy_viscosity_compute_viscosity_device(reg_coeff_d, entropy_residual_d, h_d, c_avisc_entropy, n_s, n)
Compute viscosity from entropy residual on device.
integer, parameter, public c_rp
integer, parameter, public rp
Global precision used in computations.