62 auto edges = get_edges();
64 Tscal pmass = edges.gpart_mass.data;
65 Tscal hfactd = edges.hfactd.data;
66 Tscal clamp_frac = edges.clamp_frac.data;
69 shamsys::instance::get_compute_scheduler_ptr(),
72 edges.part_counts.indexes,
73 [pmass, hfactd, clamp_frac, ndust = this->ndust](
74 u32 id_a,
const Tscal *__restrict hpart, Tscal *__restrict s_j) {
75 u32 id_a_d = id_a * ndust;
77 Tscal h_a = hpart[id_a];
78 Tscal rho_a = shamrock::sph::rho_h(pmass, h_a, hfactd);
79 Tscal eps_max = clamp_frac;
83 for (
u32 j = 0; j < ndust; j++) {
84 Tscal sj = s_j[id_a_d + j];
85 Tscal eps_j = sj * sj / rho_a;
86 if (eps_j > eps_max) {
88 s_j[id_a_d + j] = sycl::sqrt(eps_j * rho_a);
95 if (eps_sum > eps_max && eps_sum > 0) {
96 Tscal scale = eps_max / eps_sum;
97 for (
u32 j = 0; j < ndust; j++) {
98 Tscal sj = s_j[id_a_d + j];
99 Tscal eps_j = sj * sj / rho_a;
100 Tscal eps_j_sc = eps_j * scale;
101 s_j[id_a_d + j] = sycl::sqrt(eps_j_sc * rho_a);