94 auto edges = get_edges();
96 edges.spans_positions.check_sizes(edges.sizes.indexes);
97 edges.spans_accel_ext.ensure_sizes(edges.sizes.indexes);
99 Tscal G = edges.constant_G.data;
100 Tscal c = edges.constant_c.data;
101 Tscal cmass = edges.central_mass.data;
102 Tvec cpos = edges.central_pos.data;
103 Tscal a_spin = edges.a_spin.data;
104 Tvec dir_spin = edges.dir_spin.data;
106 Tscal GM = cmass * G;
107 Tvec S = a_spin * GM * GM * dir_spin / (c * c * c);
110 shamsys::instance::get_compute_scheduler_ptr(),
112 edges.spans_positions.get_spans(), edges.spans_velocities.get_spans()},
115 [cpos, S](
u32 gid,
const Tvec *xyz,
const Tvec *vxyz, Tvec *axyz_ext) {
117 Tvec v_a = vxyz[gid];
118 Tscal abs_ra = sycl::length(r_a);
119 Tscal abs_ra_2 = abs_ra * abs_ra;
120 Tscal abs_ra_3 = abs_ra_2 * abs_ra;
121 Tscal abs_ra_5 = abs_ra_2 * abs_ra_2 * abs_ra;
123 Tvec omega_a = (S * (2 / abs_ra_3)) - (6 * sham::dot(S, r_a) * r_a) / abs_ra_5;
124 Tvec acc_lt = sycl::cross(v_a, omega_a);
125 axyz_ext[gid] += acc_lt;