numeric_algs/symplectic/
traits.rs1use crate::StateDerivative;
2
3pub trait State: Clone {
4 type PositionDerivative: StateDerivative;
5 type MomentumDerivative: StateDerivative;
6
7 fn shift_position(&self, dir: &Self::PositionDerivative, amount: f64) -> Self {
8 let mut result = self.clone();
9 result.shift_position_in_place(dir, amount);
10 result
11 }
12
13 fn shift_position_in_place(&mut self, dir: &Self::PositionDerivative, amount: f64);
14
15 fn shift_momentum(&self, dir: &Self::MomentumDerivative, amount: f64) -> Self {
16 let mut result = self.clone();
17 result.shift_momentum_in_place(dir, amount);
18 result
19 }
20
21 fn shift_momentum_in_place(&mut self, dir: &Self::MomentumDerivative, amount: f64);
22}