use crate::particle_system::{ParticleSystem, Scalar}; 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; } }