High-Precision Orbit Propagator
- satkit.propagate(pos: numpy.typing.ArrayLike[float], vel: numpy.typing.ArrayLike[float], start: time, **kwargs)
High-precision orbit propagator
Propagate orbits with high-precision force modeling via adaptive Runga-Kutta methods (default is order 9/8).
- Parameters:
pos (npt.ArrayLike[float]) – 3-element numpy array representing satellite GCRF position in meters
vel (npt.ArrayLike[float]) – 3-element numpy array representing satellite GCRF velocity in m/s
tm (satkit.time) – satkit.time object representing instant at which satellite is at “pos” & “vel”
stoptime (satkit.time, optional keyword) – satkit.time object representing instant at which new position and velocity will be computed
duration_secs (float, optional keyword) – duration in seconds from “tm” for at which new position and velocity will be computed.
duration_days (float, optional keyword) – duration in days from “tm” at which new position and velocity will be computed.
duration (satkit.duration, optional keyword) – duration from “tm” at which new position & 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.
output_dense (bool, optional keyword) – Indicate whether or not dense output should be recorded. Default is false.
- 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 (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 “output_dense” is set to True in the propagate function, 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(output_phi: bool = False)
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
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
GCRF position of satellite, meters
- property state
6-element 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 stats
Statistics of propagation
- Returns:
Object containing statistics of propagation
- Return type:
- property time
Time at which state is valid
- Returns:
Time at which state is valid
- Return type:
- property vel
GCRF velocity of satellite, meters/second
- Returns:
3-element numpy array representing GCRF velocity of satellite in meters/second
- Return type:
npt.ArrayLike[float]
- class satkit.propstats
Statistics of a satellite propagation
- property num_accept
Number of accepted steps in adaptive RK integrator
- property num_eval
Number of function evaluations
- property num_reject
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
- property abs_error
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 gravity_order
Earth gravity order to use in ODE integration
- Returns:
Earth gravity order to use in ODE integration, default is 4
- Return type:
int
- property rel_error
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_jplephem
Use high-precision but computationally expensive JPL ephemerides for sun and mun when computing their gravitational force
- property use_spaceweather
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