High-Precision Orbit Propagator

satkit.propagate(state: numpy.typing.NDArray[numpy.float64], start: time, stop: time, **kwargs) propresult

High-precision orbit propagator

Propagate orbits with high-precision force modeling via adaptive Runga-Kutta methods (default is order 9/8).

Parameters:
  • state (npt.ArrayLike[float], optional) – 6-element numpy array representing satellite GCRF position and velocity in meters and meters/second

  • start (satkit.time, optional) – satkit.time object representing instant at which satellite is at “pos” & “vel”

  • stop (satkit.time, optional keyword) – satkit.time object representing instant at which new position and velocity will be computed

  • duration (satkit.duration, optional keyword) – duration from “start” at which new position & velocity will be computed.

  • duration_secs (float, optional keyword) – duration in seconds from “start” for at which new position and velocity will be computed.

  • duration_days (float, optional keyword) – duration in days from “start” at which new position and velocity will be computed.

  • output_phi (bool, optional keyword) – Output 6x6 state transition matrix between “starttime” and “stoptime” (and at intervals, if specified)

  • propsettings (propsettings, optional keyword) – “propsettings” object with input settings for the propagation. if left out, default will be used.

  • satproperties (satproperties_static, optional keyword) – “sat_properties_static” object with drag and radiation pressure succeptibility of satellite.

Returns:

Propagation result object holding state outputs, statistics, and dense output if requested

Return type:

(propresult)

Notes:

  • Propagates statellite ephemeris (position, velocity in gcrs & time) to new time and output new position and velocity via Runge-Kutta integration.

  • Inputs and outputs are all in the Geocentric Celestial Reference Frame (GCRF)

  • Propagator uses advanced Runga-Kutta integrators and includes the following forces:
    • Earth gravity with higher-order zonal terms

    • Sun, Moon gravity

    • Radiation pressured

    • Atmospheric drag: NRL-MISE 2000 density model, with option to include space weather effects (which can be large)

  • Stop time must be set by keyword argument, either explicitely or by duration

  • Solid Earth tides are not (yet) included in the model

class satkit.propresult

Results of a satellite propagation

This class lets the user access results of the satellite propagation

Notes:

  • If “enable_interp” is set to True in the propagation settings, the propresult object can be used to interpolate solutions at any time between the start and stop times of the propagation via the “interp” method

interp(time: propresult.interp.time, output_phi: bool = False) numpy.typing.NDArray[numpy.float64] | tuple[numpy.typing.NDArray[numpy.float64], numpy.typing.NDArray[numpy.float64]]

Interpolate state at given time

Parameters:
  • time (satkit.time) – Time at which to interpolate state

  • output_phi (bool, optional) – Output 6x6 state transition matrix at the interpolated time Default is False

Returns:

6-element vector representing state at given time. if output_phi, also output 6x6 state transition matrix at given time

Return type:

npt.ArrayLike[np.float64] | tuple[npt.ArrayLike[np.float64], npt.ArrayLike[np.float64]]

property phi: numpy.typing.NDArray[numpy.float64] | None

State transition matrix

Returns:

6x6 numpy array representing state transition matrix or None if not computed

Return type:

npt.ArrayLike[np.float64] | None

property pos: numpy.typing.NDArray[numpy.float64]

GCRF position of satellite, meters

Returns:

3-element numpy array representing GCRF position (meters) at end of propagation

Return type:

npt.ArrayLike[float]

property state: numpy.typing.NDArray[numpy.float64]

6-element end state (pos + vel) of satellite in meters & meters/second

Returns:

6-element numpy array representing state of satellite in meters & meters/second

Return type:

npt.ArrayLike[float]

property state_end: numpy.typing.NDArray[numpy.float64]

6-element state (pos + vel) of satellite in meters & meters/second at end of propagation

Notes: * This is the same as the “state” property

Returns:

6-element numpy array representing state of satellite in meters & meters/second

Return type:

npt.ArrayLike[float]

property state_start: numpy.typing.NDArray[numpy.float64]

6-element state (pos + vel) of satellite in meters & meters/second at start of propagation :returns: 6-element numpy array representing state of satellite in meters & meters/second at start of propagation :rtype: npt.NDArray[np.float64]

property stats: propstats

Statistics of propagation

Returns:

Object containing statistics of propagation

Return type:

propstats

property time: time

Time at which state is valid

Returns:

Time at which state is valid

Return type:

satkit.time

property time_end: time

Time at which state is valid

Notes: * This is identical to “time” property

Returns:

Time at which state is valid

Return type:

satkit.time

property time_start: time

Time at which state_start is valid

Returns:

Time at which state_start is valid

Return type:

satkit.time

property vel: numpy.typing.NDArray[numpy.float64]

GCRF velocity of satellite, meters/second

Returns:

3-element numpy array representing GCRF velocity in meters/second at end of propagation

Return type:

npt.ArrayLike[float]

class satkit.propstats

Statistics of a satellite propagation

property num_accept: int

Number of accepted steps in adaptive RK integrator

property num_eval: int

Number of function evaluations

property num_reject: int

Number of rejected steps in adaptive RK integrator

class satkit.propsettings

This class contains settings used in the high-precision orbit propgator part of the “satkit” python toolbox

Notes:

  • Default settings:
    • abs_error: 1e-8

    • rel_error: 1e-8

    • gravity_order: 4

    • use_spaceweather: True

    • use_jplephem: True

    • enable_interp: True

  • enable_interp enables high-preciion interpolation of state between start and stop times via the returned function, it is enabled by default. There is a small increase in computational efficiency if set to false

property abs_error: float

Maxmum absolute value of error for any element in propagated state following ODE integration

Returns:

Maximum absolute value of error for any element in propagated state following ODE integration, default is 1e-8

Return type:

float

property enable_interp: bool

Store intermediate data that allows for fast high-precision interpolation of state between start and stop times If not needed, there is a small computational advantage if set to False

property gravity_order: int

Earth gravity order to use in ODE integration

Returns:

Earth gravity order to use in ODE integration, default is 4

Return type:

int

precompute_terms(start: time, stop: time, step: duration | None = None)

Precompute terms for fast interpolation of state between start and stop times

This can be used, for example, to compute sun and moon positions only once if propagating many satellites over the same time period

Parameters:
  • start (satkit.time) – Start time of propagation

  • stop (satkit.time) – Stop time of propagation

  • step (satkit.duration, optional) – Step size for interpolation. Default = 60 seconds

property rel_error: float

Maximum relative error of any element in propagated state following ODE integration

Returns:

Maximum relative error of any element in propagated state following ODE integration, default is 1e-8

Return type:

float

property use_spaceweather: bool

Use space weather data when computing atmospheric density for drag forces

Notes:

  • Space weather data can have a large effect on the density of the atmosphere

  • This can be important for accurate drag force calculations

  • Space weather data is updated every 3 hours. Most-recent data can be downloaded with satkit.utils.update_datafiles()

  • Default value is True

Returns:

Indicate whether or not space weather data should be used when computing atmospheric density for drag forces

Return type:

bool