Skip to main content

sidereon_core/astro/integrators/
mod.rs

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