sidereon_core/astro/integrators/
mod.rs1pub mod dp54;
2pub mod rk4;
3pub mod tableau;
4
5pub use dp54::DP54;
6pub use rk4::RK4;
7
8use crate::astro::error::PropagationError;
9use crate::astro::propagator::api::{IntegratorOptions, PropagationContext};
10use crate::astro::propagator::result::PropagationResult;
11use crate::astro::state::{CartesianState, StateDerivative};
12
13pub trait DynamicsModel: Send + Sync {
14 fn derivative(
15 &self,
16 state: &CartesianState,
17 ctx: &PropagationContext,
18 ) -> Result<StateDerivative, PropagationError>;
19}
20
21pub trait Integrator: Send + Sync {
22 fn propagate(
23 &self,
24 initial: CartesianState,
25 t_end_seconds: f64,
26 rhs: &dyn DynamicsModel,
27 ctx: &PropagationContext,
28 opts: &IntegratorOptions,
29 ) -> Result<PropagationResult, PropagationError>;
30}