57 auto edges = get_edges();
59 edges.spans_positions.check_sizes(edges.sizes.indexes);
60 edges.spans_accel_ext.ensure_sizes(edges.sizes.indexes);
62 Tscal G = edges.constant_G.data;
63 Tscal c = edges.constant_c.data;
64 Tscal cmass = edges.central_mass.data;
65 Tvec cpos = edges.central_pos.data;
66 Tscal a_spin = edges.a_spin.data;
67 Tvec dir_spin = edges.dir_spin.data;
70 Tvec S = a_spin * GM * GM * dir_spin / (c * c * c);
73 shamsys::instance::get_compute_scheduler_ptr(),
75 edges.spans_positions.get_spans(), edges.spans_velocities.get_spans()},
78 [cpos, S](
u32 gid,
const Tvec *xyz,
const Tvec *vxyz, Tvec *axyz_ext) {
81 Tscal abs_ra = sycl::length(r_a);
82 Tscal abs_ra_2 = abs_ra * abs_ra;
83 Tscal abs_ra_3 = abs_ra_2 * abs_ra;
84 Tscal abs_ra_5 = abs_ra_2 * abs_ra_2 * abs_ra;
86 Tvec omega_a = (S * (2 / abs_ra_3)) - (6 * sham::dot(S, r_a) * r_a) / abs_ra_5;
87 Tvec acc_lt = sycl::cross(v_a, omega_a);
88 axyz_ext[gid] += acc_lt;