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