use crate::{algebra::Scalar, particle_system::ParticleSystem}; use super::{PhaseSpace, Solver}; impl Solver for ParticleSystem { fn step(&mut self, dt: Scalar) { let mut state = self.collect_phase_space(); // Shift to the midpoint self.scatter_phase_space(&PhaseSpace { 0: state.0.clone() + self.compute_derivative().0 * dt / 2.0, }); state.0 += self.compute_derivative().0 * dt; self.scatter_phase_space(&state); self.t += dt; } }