sidereon_core/astro/propagator/
dynamics.rs1use 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}