astrodynamics 0.1.0

Numerical astrodynamics engine for orbit propagation, force models, and flight-dynamics primitives
Documentation
use crate::state::{CartesianState, StateDerivative};
use crate::propagator::api::PropagationContext;
use crate::error::PropagationError;
use crate::integrators::DynamicsModel;
use crate::forces::r#trait::ForceModel;

pub struct OrbitalDynamics<'a> {
    pub force_model: &'a dyn ForceModel,
}

impl<'a> DynamicsModel for OrbitalDynamics<'a> {
    fn derivative(
        &self,
        state: &CartesianState,
        ctx: &PropagationContext,
    ) -> Result<StateDerivative, PropagationError> {
        let accel = self.force_model.acceleration(state, ctx)?;
        Ok(StateDerivative {
            dpos_km_s: state.velocity_km_s,
            dvel_km_s2: accel,
        })
    }
}