Skip to main content

ForceModel

Trait ForceModel 

Source
pub trait ForceModel:
    Send
    + Sync
    + Display {
    // Required methods
    fn estimation_index(&self) -> Option<usize>;
    fn eom(
        &self,
        ctx: &Spacecraft,
        almanac: Arc<Almanac>,
    ) -> Result<Vector3<f64>, DynamicsError>;
    fn gradient(
        &self,
        osc_ctx: &Spacecraft,
        almanac: Arc<Almanac>,
    ) -> Result<(Vector3<f64>, Matrix4x3<f64>), DynamicsError>;
}
Expand description

The ForceModel trait handles immutable dynamics which return a force. Those will be divided by the mass of the spacecraft to compute the acceleration (F = ma).

Examples include Solar Radiation Pressure, drag, etc., i.e. forces which do not need to save the current state, only act on it.

Required Methods§

Source

fn estimation_index(&self) -> Option<usize>

If a parameter of this force model is stored in the spacecraft state, then this function should return the index where this parameter is being affected

Source

fn eom( &self, ctx: &Spacecraft, almanac: Arc<Almanac>, ) -> Result<Vector3<f64>, DynamicsError>

Defines the equations of motion for this force model from the provided osculating state.

Source

fn gradient( &self, osc_ctx: &Spacecraft, almanac: Arc<Almanac>, ) -> Result<(Vector3<f64>, Matrix4x3<f64>), DynamicsError>

Force models must implement their partials, although those will only be called if the propagation requires the computation of the STM. The osc_ctx is the osculating context, i.e. it changes for each sub-step of the integrator. The last row corresponds to the partials of the parameter of this force model wrt the position, i.e. this only applies to conservative forces.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§