1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
mod neri; use super::State; #[derive(Clone, Copy, Debug, PartialEq)] pub enum StepSize { UseDefault, Step(f64), } pub trait Integrator<S: State> { fn propagate_in_place<D1, D2>( &mut self, start: &mut S, pos_diff_eq: D1, momentum_diff_eq: D2, step: StepSize, ) where D1: Fn(&S) -> S::PositionDerivative, D2: Fn(&S) -> S::MomentumDerivative; fn propagate<D1, D2>( &mut self, start: &S, pos_diff_eq: D1, momentum_diff_eq: D2, step: StepSize, ) -> S where D1: Fn(&S) -> S::PositionDerivative, D2: Fn(&S) -> S::MomentumDerivative, { let mut result = start.clone(); self.propagate_in_place(&mut result, pos_diff_eq, momentum_diff_eq, step); result } } pub use neri::*;