numeric_algs/integration/
mod.rs

1mod dormand_prince;
2mod rk4;
3mod rk8;
4use crate::traits::State;
5
6#[derive(Clone, Copy, Debug, PartialEq)]
7pub enum StepSize {
8    UseDefault,
9    Step(f64),
10}
11
12pub trait Integrator<S: State> {
13    fn propagate_in_place<D>(&mut self, start: &mut S, diff_eq: D, step: StepSize)
14    where
15        D: Fn(&S) -> S::Derivative;
16
17    fn propagate<D>(&mut self, start: &S, diff_eq: D, step: StepSize) -> S
18    where
19        D: Fn(&S) -> S::Derivative,
20    {
21        let mut result = start.clone();
22        self.propagate_in_place(&mut result, diff_eq, step);
23        result
24    }
25}
26
27pub use self::dormand_prince::DPIntegrator;
28pub use self::rk4::RK4Integrator;
29pub use self::rk8::RK8Integrator;