41 use utils,
only: neko_error
42 use num_types,
only: rp, c_rp
43 use,
intrinsic :: iso_c_binding, only: c_ptr, c_int
54 bind(c, name =
'hip_sd_direction')
55 import c_rp, c_ptr, c_int
56 type(c_ptr),
value :: s_d
57 type(c_ptr),
value :: x_d
66 dec, inc, dmin, dmax, n) &
67 bind(c, name =
'hip_sd_update_move_limits')
68 import c_rp, c_ptr, c_int
69 type(c_ptr),
value :: delta_d
70 type(c_ptr),
value :: x_d
71 type(c_ptr),
value :: x1_d
72 type(c_ptr),
value :: x2_d
83 psi, smax, xmin, xmax, n) &
84 bind(c, name =
'hip_sd_update_design')
85 import c_rp, c_ptr, c_int
86 type(c_ptr),
value :: x_new_d
87 type(c_ptr),
value :: x_d
88 type(c_ptr),
value :: s_d
89 type(c_ptr),
value :: delta_d
102 bind(c, name =
'cuda_sd_direction')
103 import c_rp, c_ptr, c_int
104 type(c_ptr),
value :: s_d
105 type(c_ptr),
value :: x_d
114 dec, inc, dmin, dmax, n) &
115 bind(c, name =
'cuda_sd_update_move_limits')
116 import c_rp, c_ptr, c_int
117 type(c_ptr),
value :: delta_d
118 type(c_ptr),
value :: x_d
119 type(c_ptr),
value :: x1_d
120 type(c_ptr),
value :: x2_d
131 psi, smax, xmin, xmax, n) &
132 bind(c, name =
'cuda_sd_update_design')
133 import c_rp, c_ptr, c_int
134 type(c_ptr),
value :: x_new_d
135 type(c_ptr),
value :: x_d
136 type(c_ptr),
value :: s_d
137 type(c_ptr),
value :: delta_d
161 real(kind=rp),
intent(in) :: xmin
162 real(kind=rp),
intent(in) :: xmax
163 integer,
intent(in) :: n
169 call neko_error(
'No device backend configured')
185 dec, inc, dmin, dmax, n)
186 type(c_ptr) :: delta_d
190 real(kind=rp),
intent(in) :: dec
191 real(kind=rp),
intent(in) :: inc
192 real(kind=rp),
intent(in) :: dmin
193 real(kind=rp),
intent(in) :: dmax
194 integer,
intent(in) :: n
197 dec, inc, dmin, dmax, n)
200 dec, inc, dmin, dmax, n)
202 call neko_error(
'No device backend configured')
218 psi, smax, xmin, xmax, n)
219 type(c_ptr) :: x_new_d
222 type(c_ptr) :: delta_d
223 real(kind=rp),
intent(in) :: psi
224 real(kind=rp),
intent(in) :: smax
225 real(kind=rp),
intent(in) :: xmin
226 real(kind=rp),
intent(in) :: xmax
227 integer,
intent(in) :: n
230 psi, smax, xmin, xmax, n)
233 psi, smax, xmin, xmax, n)
235 call neko_error(
'No device backend configured')
Device backend dispatch for the steepest-descent optimizer kernels.
subroutine, public device_sd_update_move_limits(delta_d, x_d, x1_d, x2_d, dec, inc, dmin, dmax, n)
Adapt the move limits on the device (Eq. D23).
subroutine, public device_sd_update_design(x_new_d, x_d, s_d, delta_d, psi, smax, xmin, xmax, n)
Move-limited, box-constrained design update on the device (Eq. D24).
subroutine, public device_sd_direction(s_d, x_d, xmin, xmax, n)
Bound-projected steepest-descent direction on the device (Eq. D22).
void cuda_sd_direction(void *s_d, void *x_d, real *xmin, real *xmax, int *n)
void cuda_sd_update_design(void *x_new_d, void *x_d, void *s_d, void *delta_d, real *psi, real *smax, real *xmin, real *xmax, int *n)
void cuda_sd_update_move_limits(void *delta_d, void *x_d, void *x1_d, void *x2_d, real *dec, real *inc, real *dmin, real *dmax, int *n)
void hip_sd_update_move_limits(void *delta_d, void *x_d, void *x1_d, void *x2_d, real *dec, real *inc, real *dmin, real *dmax, int *n)
void hip_sd_update_design(void *x_new_d, void *x_d, void *s_d, void *delta_d, real *psi, real *smax, real *xmin, real *xmax, int *n)
void hip_sd_direction(void *s_d, void *x_d, real *xmin, real *xmax, int *n)