Skip to main content

sidereon_core/astro/propagator/
dynamics.rs

1use crate::astro::error::PropagationError;
2use crate::astro::forces::r#trait::ForceModel;
3use crate::astro::integrators::DynamicsModel;
4use crate::astro::propagator::api::PropagationContext;
5use crate::astro::state::{CartesianState, StateDerivative};
6
7pub struct OrbitalDynamics<'a> {
8    pub force_model: &'a dyn ForceModel,
9}
10
11impl<'a> DynamicsModel for OrbitalDynamics<'a> {
12    fn derivative(
13        &self,
14        state: &CartesianState,
15        ctx: &PropagationContext,
16    ) -> Result<StateDerivative, PropagationError> {
17        let accel = self.force_model.acceleration(state, ctx)?;
18        Ok(StateDerivative {
19            dpos_km_s: state.velocity_km_s,
20            dvel_km_s2: accel,
21        })
22    }
23}