60 auto edges = get_edges();
62 Tscal G = edges.G.data;
63 Tscal C_force = edges.C_force.data;
64 Tscal eta_phi = edges.eta_phi.data;
66 const std::vector<Tvec> &pos = edges.positions.data;
67 const std::vector<Tscal> &mass = edges.masses.data;
68 const std::vector<Tvec> &acc_ext = edges.acc_ext.data;
70 Tscal sink_sink_cfl = shambase::get_infty<Tscal>();
72 for (
u32 i = 0; i < pos.size(); i++) {
73 Tscal sink_sink_cfl_i = shambase::get_infty<Tscal>();
75 Tvec f_i = acc_ext[i];
77 Tscal grad_phi_i_sq = sham::dot(f_i, f_i);
79 if (grad_phi_i_sq == 0) {
83 for (
u32 j = 0; j < pos.size(); j++) {
88 Tvec rij = pos[i] - pos[j];
89 Tscal rij_scal = sycl::length(rij);
91 Tscal phi_ij = G * mass[j] / rij_scal;
92 Tscal term_ij = sham::abs(phi_ij) / grad_phi_i_sq;
93 Tscal dt_ij = C_force * eta_phi * sycl::sqrt(term_ij);
95 sink_sink_cfl_i = sham::min(sink_sink_cfl_i, dt_ij);
98 sink_sink_cfl = sham::min(sink_sink_cfl, sink_sink_cfl_i);
101 edges.cfl_dt.data = sink_sink_cfl;