summaryrefslogtreecommitdiff
path: root/src/solver/midpoint.rs
diff options
context:
space:
mode:
authoreug-vs <eugene@eug-vs.xyz>2024-12-11 02:12:22 +0100
committereug-vs <eugene@eug-vs.xyz>2024-12-11 02:20:41 +0100
commitecdafb45dd9c416cb0810d6687a20ac97e480ac9 (patch)
tree5f4b7de4f9994236ab21d1caba370fcee0f6f805 /src/solver/midpoint.rs
parentfe464a9fe49e4319be9baa8321ac6cf0a7a7945c (diff)
downloadparticle-physics-ecdafb45dd9c416cb0810d6687a20ac97e480ac9.tar.gz
refactor: allow for other solver implementations
Diffstat (limited to 'src/solver/midpoint.rs')
-rw-r--r--src/solver/midpoint.rs18
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;
+ }
+}