High-Precision Orbit Propagator
- satkit.propagate(state: numpy.typing.NDArray[numpy.float64], begin: time, end: 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
begin (satkit.time, optional) – satkit.time object representing instant at which satellite is at “pos” & “vel”
end (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 “begin” at which new position & velocity will be computed.
duration_secs (float, optional keyword) – duration in seconds from “begin” for at which new position and velocity will be computed.
duration_days (float, optional keyword) – duration in days from “begin” at which new position and velocity will be computed.
output_phi (bool, optional keyword) – Output 6x6 state transition matrix between “begintime” and “endtime” (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:
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)
End 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 begin and end 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_begin: numpy.typing.NDArray[numpy.float64]
6-element state (pos + vel) of satellite in meters & meters/second at begin of propagation :returns: 6-element numpy array representing state of satellite in meters & meters/second at begin of propagation :rtype: npt.NDArray[np.float64]
- 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 stats: propstats
Statistics of propagation
- Returns:
Object containing statistics of propagation
- Return type:
- property time: time
Time at which state is valid
- Returns:
Time at which state is valid
- Return type:
- property time_begin: time
Time at which state_begin is valid
- Returns:
Time at which state_begin is valid
- Return type:
- 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:
- 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 propagator 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 begin and end 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
Maximum 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 begin and end 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(begin: time, end: time, step: duration | None = None)
Precompute terms for fast interpolation of state between begin and end 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:
begin (satkit.time) – Begin time of propagation
end (satkit.time) – End 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