diff options
author | eug-vs <eugene@eug-vs.xyz> | 2024-12-11 02:12:22 +0100 |
---|---|---|
committer | eug-vs <eugene@eug-vs.xyz> | 2024-12-11 02:20:41 +0100 |
commit | ecdafb45dd9c416cb0810d6687a20ac97e480ac9 (patch) | |
tree | 5f4b7de4f9994236ab21d1caba370fcee0f6f805 /src/solver/midpoint.rs | |
parent | fe464a9fe49e4319be9baa8321ac6cf0a7a7945c (diff) | |
download | particle-physics-ecdafb45dd9c416cb0810d6687a20ac97e480ac9.tar.gz |
refactor: allow for other solver implementations
Diffstat (limited to 'src/solver/midpoint.rs')
-rw-r--r-- | src/solver/midpoint.rs | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/solver/midpoint.rs b/src/solver/midpoint.rs new file mode 100644 index 0000000..c5a01c4 --- /dev/null +++ b/src/solver/midpoint.rs @@ -0,0 +1,18 @@ +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; + } +} |