Sidereon.Propagator (Sidereon v0.20.0)

Copy Markdown View Source

High-precision numerical orbit propagation.

Supports high-order adaptive numerical integration (DP54) of orbital states using various force models via Rust NIF.

Summary

Functions

Adaptive step propagation using Dormand-Prince 5(4) via Rust NIF. Returns the state at exactly t_end.

Propagate a Cartesian state and its 6x6 covariance to requested TDB epochs.

Types

covariance_node()

@type covariance_node() :: %{
  state: %{
    epoch_tdb_seconds: float(),
    position_km: vec3(),
    velocity_km_s: vec3()
  },
  covariance: [[float()]],
  frame: String.t()
}

state()

@type state() :: {r :: vec3(), v :: vec3()}

vec3()

@type vec3() :: {float(), float(), float()}

Functions

propagate(arg, dt, opts \\ [])

@spec propagate(state(), float(), keyword()) :: {:ok, state()} | {:error, any()}

Adaptive step propagation using Dormand-Prince 5(4) via Rust NIF. Returns the state at exactly t_end.

Options

  • :tolerance - Integration tolerance (default: 1.0e-12)
  • :forces - List of active force models: [:twobody, :j2], [:composite, :j2_j6, :third_body, {:srp, cr, area_to_mass_m2_kg}, :relativity], [:composite, {:geopotential, degree, order}], [:composite, :solid_earth_tide, :solid_earth_pole_tide], or [:earth_phase_a] (default: [:twobody])
  • :drag - optional %Sidereon.Drag.Parameters{} drag model
  • :space_weather_table - optional %Sidereon.SpaceWeather{} used with :drag
  • :epoch_tdb_seconds - initial epoch for table-backed drag (default: 0.0)

propagate_covariance(arg, covariance, epochs_tdb_seconds, opts \\ [])

@spec propagate_covariance(state(), [[number()]], [number()], keyword()) ::
  {:ok, [covariance_node()]} | {:error, term()}

Propagate a Cartesian state and its 6x6 covariance to requested TDB epochs.

initial_state is {position_km, velocity_km_s}. epochs_tdb_seconds are absolute TDB seconds in the same scale as :epoch_tdb_seconds.