numeric_algs/symplectic/
traits.rs

1use 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}