NumericalOrbitPropagator¶
High-fidelity numerical orbit propagator with built-in force models. The NumericalOrbitPropagator integrates orbital dynamics equations using configurable integrators and force models including gravity harmonics, atmospheric drag, solar radiation pressure, and third-body perturbations.
Note
For conceptual explanations and usage examples, see Numerical Propagation in the User Guide.
NumericalOrbitPropagator ¶
NumericalOrbitPropagator(epoch: Any, state: Any, propagation_config: Any, force_config: Any, params: Any = None, initial_covariance: Any = None, additional_dynamics: Any = None, control_input: Any = None)
High-fidelity numerical orbit propagator with configurable force models.
This propagator uses numerical integration with built-in orbital force models: - Gravity (point mass or spherical harmonic) - Atmospheric drag (Harris-Priester, NRLMSISE-00, or exponential) - Solar radiation pressure with eclipse modeling - Third-body perturbations (Sun, Moon, planets) - Relativistic corrections - Solid Earth tides
Attributes:
| Name | Type | Description |
|---|---|---|
current_epoch | Epoch | Current propagation time |
initial_epoch | Epoch | Initial epoch from propagator creation |
state_dim | int | Dimension of state vector (6 for basic, 6+N for extended) |
step_size | float | Current integration step size in seconds |
trajectory | OrbitTrajectory | Accumulated trajectory states |
Example
Initialize instance.
trajectory property ¶
trajectory: OrbitTrajectory
Get accumulated trajectory.
Returns:
| Name | Type | Description |
|---|---|---|
OrbitTrajectory | OrbitTrajectory | The accumulated trajectory. |
trajectory_mode property ¶
Get current trajectory storage mode.
Returns:
| Name | Type | Description |
|---|---|---|
TrajectoryMode | TrajectoryMode | Current trajectory mode. |
add_event_detector method descriptor ¶
add_event_detector(event: Union[TimeEvent, ValueEvent, BinaryEvent, AltitudeEvent]) -> Any
Add an event detector to this propagator.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
event | TimeEvent or ValueEvent or BinaryEvent or AltitudeEvent | Event detector | required |
builder staticmethod ¶
builder(epoch: Epoch, state: ndarray, force_config: ForceModelConfig) -> NumericalOrbitPropagatorBuilder
Create a builder for constructing a numerical orbit propagator.
The builder takes the three required inputs directly; optional inputs (propagation config, params, additional dynamics, control input, initial covariance) are set through chained setter calls before calling build().
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epoch | Epoch | Initial epoch. | required |
state | ndarray | Initial state vector in ECI Cartesian [x, y, z, vx, vy, vz] (meters, m/s). Can be 6D or 6+N dimensional for extended state. | required |
force_config | ForceModelConfig | Force model configuration. | required |
Returns:
| Name | Type | Description |
|---|---|---|
NumericalOrbitPropagatorBuilder | NumericalOrbitPropagatorBuilder | New builder instance. |
Example
clear_events method descriptor ¶
clear_events() -> Any
Clear all detected events from the event log.
covariance method descriptor ¶
covariance_gcrf method descriptor ¶
covariance_rtn method descriptor ¶
current_params method descriptor ¶
disable_stm_propagation method descriptor ¶
disable_stm_propagation() -> Any
Disable STM (variational equation) propagation.
Providing an initial covariance at construction enables STM propagation automatically. When the STM is not needed, disabling it removes the cost of integrating the variational equations at every step. Covariance propagation requires the STM, so any covariance held by the propagator is cleared: stm() and current_covariance() return None afterwards. Sensitivity propagation, if enabled, is unaffected. No-op if STM propagation is not enabled.
event_log method descriptor ¶
event_log() -> list[DetectedEvent]
Get the event log (list of detected events).
Returns:
| Type | Description |
|---|---|
list[DetectedEvent] | list[DetectedEvent]: List of events detected during propagation. |
events_by_detector_index method descriptor ¶
events_by_detector_index(index: int) -> list[DetectedEvent]
Get events by detector index.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
index | int | Detector index (0-based, in order of add_event_detector calls). | required |
Returns:
| Type | Description |
|---|---|
list[DetectedEvent] | list[DetectedEvent]: Events from the specified detector. |
events_by_detector_index_in_range method descriptor ¶
events_by_detector_index_in_range(index: int, start: Epoch, end: Epoch) -> list[DetectedEvent]
Get events by detector index within a time range.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
index | int | Detector index (0-based, in order of add_event_detector calls). | required |
start | Epoch | Start of time range (inclusive). | required |
end | Epoch | End of time range (inclusive). | required |
Returns:
| Type | Description |
|---|---|
list[DetectedEvent] | list[DetectedEvent]: Events from the specified detector within the time range. |
events_by_name method descriptor ¶
events_by_name(name: str) -> list[DetectedEvent]
Get events by name.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name | str | Event name to filter by. | required |
Returns:
| Type | Description |
|---|---|
list[DetectedEvent] | list[DetectedEvent]: Events matching the given name. |
events_by_name_in_range method descriptor ¶
events_by_name_in_range(name_pattern: str, start: Epoch, end: Epoch) -> list[DetectedEvent]
Get events by name pattern within a time range.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name_pattern | str | Substring to search for in event names. | required |
start | Epoch | Start of time range (inclusive). | required |
end | Epoch | End of time range (inclusive). | required |
Returns:
| Type | Description |
|---|---|
list[DetectedEvent] | list[DetectedEvent]: Events matching the name pattern within the time range. |
events_in_range method descriptor ¶
events_in_range(start: Epoch, end: Epoch) -> list[DetectedEvent]
Get events in time range.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
start | Epoch | Start of time range. | required |
end | Epoch | End of time range. | required |
Returns:
| Type | Description |
|---|---|
list[DetectedEvent] | list[DetectedEvent]: Events within the given time range. |
from_eci builtin ¶
from_eci(epoch: Epoch, state: ndarray, params: Union[ndarray, None] = None, force_config: Union[ForceModelConfig, None] = None) -> NumericalOrbitPropagator
Create a propagator from ECI Cartesian state with simplified configuration.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epoch | Epoch | Initial epoch. | required |
state | ndarray | Initial ECI Cartesian state [x, y, z, vx, vy, vz]. | required |
params | ndarray or None | Parameter vector. | None |
force_config | ForceModelConfig or None | Force model config (default if None). | None |
Returns:
| Name | Type | Description |
|---|---|---|
NumericalOrbitPropagator | NumericalOrbitPropagator | New propagator instance. |
get_covariance_interpolation_method method descriptor ¶
Get current interpolation method for covariance queries.
Returns:
| Name | Type | Description |
|---|---|---|
CovarianceInterpolationMethod | CovarianceInterpolationMethod | Current covariance interpolation method. |
get_interpolation_method method descriptor ¶
get_interpolation_method() -> InterpolationMethod
Get current interpolation method for state trajectory queries.
Returns:
| Name | Type | Description |
|---|---|---|
InterpolationMethod | InterpolationMethod | Current interpolation method. |
latest_event method descriptor ¶
latest_event() -> Union[DetectedEvent, None]
Get latest detected event, if any.
Returns:
| Type | Description |
|---|---|
Union[DetectedEvent, None] | DetectedEvent or None: The most recently detected event. |
params method descriptor ¶
Get the parameter vector supplied at construction.
These are the force-model / consider parameters passed to the dynamics, control input, and (via the estimation filters) measurement models.
Returns:
| Type | Description |
|---|---|
Union[ndarray, None] | numpy.ndarray or None: Parameter vector, or None if no parameters were provided. |
propagate_steps method descriptor ¶
Propagate forward by specified number of steps.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
num_steps | int | Number of steps to take. | required |
Raises:
| Type | Description |
|---|---|
Exception | Propagates the original exception raised by an additional-dynamics or control-input callback, or a BraheError if propagation fails. |
propagate_to method descriptor ¶
Propagate to a specific target epoch.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
target_epoch | Epoch | The epoch to propagate to. | required |
Raises:
| Type | Description |
|---|---|
Exception | Propagates the original exception raised by an additional-dynamics or control-input callback, or a BraheError if propagation fails. |
query_events method descriptor ¶
query_events() -> EventQuery
Create an event query builder for filtering detected events.
Returns an EventQuery that allows chainable filtering of detected events. Call .collect() on the query to get the final list of events.
Returns:
| Name | Type | Description |
|---|---|---|
EventQuery | EventQuery | Query builder for filtering events |
Example
reset_termination method descriptor ¶
reset_termination() -> Any
Reset the termination flag to allow continued propagation.
After calling this, propagation can continue even if it was previously stopped by a terminal event.
sensitivity method descriptor ¶
sensitivity_at method descriptor ¶
set_covariance_interpolation_method method descriptor ¶
set_covariance_interpolation_method(method: CovarianceInterpolationMethod) -> Any
Set interpolation method for covariance queries.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
method | CovarianceInterpolationMethod | Interpolation method for covariance. | required |
set_eviction_policy_max_age method descriptor ¶
Set trajectory eviction policy based on maximum age.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
max_age | float | Maximum age in seconds to keep states in trajectory. | required |
set_eviction_policy_max_size method descriptor ¶
Set trajectory eviction policy based on maximum size.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
max_size | int | Maximum number of states to keep in trajectory. | required |
set_id method descriptor ¶
Set propagator numeric ID (mutating).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
id | int or None | New numeric ID for the propagator. | required |
set_identity method descriptor ¶
Set all identity fields at once (mutating).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name | str or None | New name. | required |
uuid_str | str or None | New UUID string. | required |
id | int or None | New numeric ID. | required |
Raises:
| Type | Description |
|---|---|
ValueError | If the UUID string is invalid. |
set_interpolation_method method descriptor ¶
set_interpolation_method(method: InterpolationMethod) -> Any
Set interpolation method for state trajectory queries.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
method | InterpolationMethod | Interpolation method to use. | required |
set_name method descriptor ¶
Set propagator name (mutating).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name | str or None | New name for the propagator. | required |
set_trajectory_mode method descriptor ¶
set_trajectory_mode(mode: TrajectoryMode) -> Any
Set trajectory storage mode.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
mode | TrajectoryMode | The new trajectory mode. | required |
set_uuid method descriptor ¶
Set propagator UUID (mutating).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
uuid_str | str or None | New UUID string for the propagator. | required |
Raises:
| Type | Description |
|---|---|
ValueError | If the UUID string is invalid. |
state method descriptor ¶
state_bcbf method descriptor ¶
Get the state at the given epoch in the central body's body-centered body-fixed (BCBF) frame (ITRF for an Earth-centered propagator, LFPA for a Moon-centered one, MCMF for Mars, the configured fixed frame for a custom body).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epoch | Epoch | Target epoch for state computation. | required |
Returns:
| Type | Description |
|---|---|
ndarray | numpy.ndarray: State vector [x, y, z, vx, vy, vz] in the central body's |
ndarray | body-fixed frame. |
Raises:
| Type | Description |
|---|---|
RuntimeError | If |
state_bci method descriptor ¶
Get the state at the given epoch in the central body's body-centered inertial (BCI) frame (GCRF for an Earth-centered propagator, LCI for a Moon-centered one, MCI for Mars, etc.).
This is the state the integrator actually propagates: no central-body offset or axis rotation is applied. state_eci always returns an Earth-centered state regardless of the propagator's central body; use this method to get the state in its native frame instead, which avoids an Earth round trip for non-Earth propagators.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epoch | Epoch | Target epoch for state computation. | required |
Returns:
| Type | Description |
|---|---|
ndarray | numpy.ndarray: State vector [x, y, z, vx, vy, vz] in the central body's |
ndarray | inertial frame. |
Raises:
| Type | Description |
|---|---|
RuntimeError | If |
state_ecef method descriptor ¶
state_eci method descriptor ¶
state_eme2000 method descriptor ¶
state_gcrf method descriptor ¶
state_gcrf(epoch) -> ndarray
Compute state at a specific epoch in GCRF coordinates.
state_in_frame method descriptor ¶
state_in_frame(frame: CelestialFrame, epoch: Epoch) -> ndarray
Compute the state at the given epoch in an arbitrary reference frame.
Converts directly from this propagator's own central body's inertial frame, avoiding an unnecessary Earth round trip for a lunar/Martian propagator.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
frame | CelestialFrame | Reference frame to express the state in. | required |
epoch | Epoch | Target epoch for state computation. | required |
Returns:
| Type | Description |
|---|---|
ndarray | numpy.ndarray: State vector [x, y, z, vx, vy, vz] in |
Raises:
| Type | Description |
|---|---|
RuntimeError | If the state cannot be computed or the frame conversion fails. |
state_itrf method descriptor ¶
state_itrf(epoch) -> ndarray
Compute state at a specific epoch in ITRF coordinates.
state_koe_mean method descriptor ¶
state_koe_mean(epoch: Epoch, angle_format: AngleFormat) -> ndarray
Compute state as mean Keplerian elements at a specific epoch.
Mean elements are orbit-averaged elements that remove short-period and long-period J2 perturbations using first-order Brouwer-Lyddane theory.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epoch | Epoch | Target epoch. | required |
angle_format | AngleFormat | Format for angular elements. | required |
Returns:
| Type | Description |
|---|---|
ndarray | numpy.ndarray: Mean Keplerian elements [a, e, i, Ω, ω, M]. |
state_koe_osc method descriptor ¶
state_koe_osc(epoch: Epoch, angle_format: AngleFormat) -> ndarray
Compute state as osculating Keplerian elements at a specific epoch.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epoch | Epoch | Target epoch. | required |
angle_format | AngleFormat | Format for angular elements. | required |
Returns:
| Type | Description |
|---|---|
ndarray | numpy.ndarray: Osculating Keplerian elements [a, e, i, Ω, ω, M]. |
states_bcbf method descriptor ¶
Compute states at multiple epochs in the propagator's central body's body-centered body-fixed (BCBF) frame.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epochs | list[Epoch] | List of epochs for state computation. | required |
Returns:
| Type | Description |
|---|---|
ndarray | list[numpy.ndarray]: List of BCBF state vectors [x, y, z, vx, vy, vz] (meters, m/s). |
states_bci method descriptor ¶
Compute states at multiple epochs in the propagator's central body's body-centered inertial (BCI) frame.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epochs | list[Epoch] | List of epochs for state computation. | required |
Returns:
| Type | Description |
|---|---|
ndarray | list[numpy.ndarray]: List of BCI state vectors [x, y, z, vx, vy, vz] (meters, m/s). |
states_ecef method descriptor ¶
states_eci method descriptor ¶
states_eme2000 method descriptor ¶
states_gcrf method descriptor ¶
states_in_frame method descriptor ¶
states_in_frame(frame: CelestialFrame, epochs: list[Epoch]) -> ndarray
Compute states at multiple epochs expressed in an arbitrary reference frame, converting from the propagator's native central-body frame.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
frame | CelestialFrame | The reference frame to express the states in. | required |
epochs | list[Epoch] | List of epochs for state computation. | required |
Returns:
| Type | Description |
|---|---|
ndarray | list[numpy.ndarray]: List of state vectors [x, y, z, vx, vy, vz] in |
states_itrf method descriptor ¶
states_koe_mean method descriptor ¶
states_koe_mean(epochs: list[Epoch], angle_format: AngleFormat) -> ndarray
Compute states as mean Keplerian elements at multiple epochs.
Mean elements are orbit-averaged elements that remove short-period and long-period J2 perturbations using first-order Brouwer-Lyddane theory.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epochs | list[Epoch] | List of target epochs. | required |
angle_format | AngleFormat | Format for angular elements. | required |
Returns:
| Type | Description |
|---|---|
ndarray | list[numpy.ndarray]: List of mean Keplerian elements [a, e, i, Ω, ω, M]. |
states_koe_osc method descriptor ¶
states_koe_osc(epochs: list[Epoch], angle_format: AngleFormat) -> ndarray
Compute states as osculating Keplerian elements at multiple epochs.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epochs | list[Epoch] | List of target epochs. | required |
angle_format | AngleFormat | Format for angular elements. | required |
Returns:
| Type | Description |
|---|---|
ndarray | list[numpy.ndarray]: List of osculating Keplerian elements [a, e, i, Ω, ω, M]. |
step method descriptor ¶
step() -> Any
Step forward by the default step size.
Raises:
| Type | Description |
|---|---|
Exception | Propagates the original exception raised by an additional-dynamics or control-input callback, or a BraheError if propagation fails. |
step_by method descriptor ¶
step_past method descriptor ¶
stm method descriptor ¶
stm_at method descriptor ¶
terminated method descriptor ¶
terminated() -> bool
Check if propagator is terminated due to a terminal event.
Returns:
| Name | Type | Description |
|---|---|---|
bool | bool | True if propagation was stopped by a terminal event. |
with_identity method descriptor ¶
with_identity(name: Union[str, None], uuid_str: Union[str, None], id: Union[int, None]) -> NumericalOrbitPropagator
Set all identity fields and return self (builder pattern).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name | str or None | New name. | required |
uuid_str | str or None | New UUID string. | required |
id | int or None | New numeric ID. | required |
Returns:
| Name | Type | Description |
|---|---|---|
NumericalOrbitPropagator | NumericalOrbitPropagator | Self for method chaining. |
Raises:
| Type | Description |
|---|---|
ValueError | If the UUID string is invalid. |
NumericalOrbitPropagatorBuilder ¶
Builder for [NumericalOrbitPropagator].
Created by NumericalOrbitPropagator.builder(), which takes the three required inputs (epoch, state, force_config). Optional inputs are provided through chained setters and default to None (NumericalPropagationConfig.default() for the propagation configuration). build() validates the configuration and constructs the propagator; the builder is single-use, and calling build() a second time raises RuntimeError.
Example
Initialize instance.
additional_dynamics method descriptor ¶
additional_dynamics(dynamics: callable) -> NumericalOrbitPropagatorBuilder
Set additional dynamics for extended state dimensions beyond the 6D orbital state.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
dynamics | callable | Function computing derivatives for extra state elements. Signature: f(t, state, params) -> derivative. Should return derivatives for extended state elements only. | required |
Returns:
| Name | Type | Description |
|---|---|---|
NumericalOrbitPropagatorBuilder | NumericalOrbitPropagatorBuilder | The builder, for method chaining. |
build method descriptor ¶
build() -> NumericalOrbitPropagator
Construct the propagator from the accumulated configuration.
This consumes the builder. The builder is single-use: calling build() a second time raises RuntimeError.
Returns:
| Name | Type | Description |
|---|---|---|
NumericalOrbitPropagator | NumericalOrbitPropagator | Initialized propagator ready for propagation. |
Raises:
| Type | Description |
|---|---|
RuntimeError | If the builder was already consumed by a prior |
Exception | Propagates the original exception raised by a dynamics or control-input callback invoked during construction (e.g. computing the initial acceleration when |
control_input method descriptor ¶
control_input(control: callable) -> NumericalOrbitPropagatorBuilder
Set a continuous control-input function that adds an acceleration perturbation.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
control | callable | Control function returning a 3D acceleration perturbation. Signature: f(t, state, params) -> acceleration. | required |
Returns:
| Name | Type | Description |
|---|---|---|
NumericalOrbitPropagatorBuilder | NumericalOrbitPropagatorBuilder | The builder, for method chaining. |
initial_covariance method descriptor ¶
initial_covariance(covariance: ndarray) -> NumericalOrbitPropagatorBuilder
Set an initial covariance matrix P0, which also enables STM propagation.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
covariance | ndarray | Initial covariance matrix. Must be square with dimension matching the state size. | required |
Returns:
| Name | Type | Description |
|---|---|---|
NumericalOrbitPropagatorBuilder | NumericalOrbitPropagatorBuilder | The builder, for method chaining. |
params method descriptor ¶
params(params: ndarray) -> NumericalOrbitPropagatorBuilder
Set the parameter vector [mass, drag_area, Cd, srp_area, Cr, ...].
Required when the force model references parameter indices for drag or SRP.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
params | ndarray | Parameter vector. | required |
Returns:
| Name | Type | Description |
|---|---|---|
NumericalOrbitPropagatorBuilder | NumericalOrbitPropagatorBuilder | The builder, for method chaining. |
propagation_config method descriptor ¶
propagation_config(config: NumericalPropagationConfig) -> NumericalOrbitPropagatorBuilder
Set the propagation configuration (integrator method, tolerances, and step sizes).
Defaults to NumericalPropagationConfig.default() if not called.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
config | NumericalPropagationConfig | Numerical propagation configuration. | required |
Returns:
| Name | Type | Description |
|---|---|---|
NumericalOrbitPropagatorBuilder | NumericalOrbitPropagatorBuilder | The builder, for method chaining. |
See Also¶
- NumericalPropagator - Generic numerical propagator for arbitrary dynamics
- ForceModelConfig - Force model configuration
- Event Detection - Event detection system
- KeplerianPropagator - Analytical two-body propagator
- Numerical Propagation Guide - User guide documentation