60 auto edges = get_edges();
62 edges.S.check_sizes(edges.part_counts.indexes);
63 edges.s_j.check_sizes(edges.part_counts.indexes);
64 edges.ds_j_dt.check_sizes(edges.part_counts.indexes);
66 auto rhodust_eps = edges.rhodust_eps.value;
69 [nbins = this->nbins](
u64 ,
u32 count) ->
u32 {
73 auto epsilon = sycl::sqrt(rhodust_eps);
74 auto dt_hydro = edges.dt_hydro.value;
77 shamsys::instance::get_compute_scheduler_ptr(),
81 [rhodust_eps, epsilon, dt_hydro, nbins = this->nbins](
83 const Tscal *__restrict S,
84 const Tscal *__restrict s_j,
85 Tscal *__restrict ds_j_dt) {
88 Tscal ds_j_dt_val = S[id] / (2 * (sham::abs(sj) + epsilon));
90 if (sham::abs(dt_hydro * ds_j_dt_val) > 1e-2 * sham::abs(sj) || dt_hydro == 0) {
92 Tscal s_next = sycl::sqrt(sj * sj + S[
id] * dt_hydro);
93 ds_j_dt_val = (dt_hydro > 0) ? (s_next - sj) / dt_hydro : 0;
96 ds_j_dt[id] += ds_j_dt_val;