GRSS Propagator Module (grss.prop)#
The propagator within GRSS is based on the IAS15 algorithm [1], which is a 15th-order integrator based on Gauss-Radau quadrature. The algorithm is adaptive, meaning that the step size is adjusted to ensure that the error is below a certain threshold. However, the integrator can also be run in fixed-step mode, where a user-defined fixed time step is used until the end of the integration.
The force model includes the following effects:
Newtonian point-mass gravity
Einstein-Infeld-Hoffmann (EIH) formulation of point-mass relativistic gravity [2] [3]
J2 zonal harmonic effects from the Sun and the Earth
A1, A2, A3 nongravitational acceleration model [4]
In addition to any integrated bodies defined by the user, the default force model includes effects from the Sun, the planets, the Moon, Pluto, and the Big 16 main-belt asteroids. The states of these bodies are read in from either the JPL DE431 or DE441 ephemerides, based on the user’s choice. The propagator can also interpolate any of the integrated bodies’ states to any time within the integration (or within a margin around the integration time bounds). This interpolation is done via interpolation polynomials based on the Newton divided difference method.
The propagator module also has the ability to calculate apparent states of any integrated body. This is done through two methods. The first is the simpler of the two, and uses a simple approximation of the light-time between an observer and the integrated body. The second method is more accurate, and uses an iterative method to calculate the light-time between an observer and the integrated body. The second method is slightly more computationally expensive since it requires a few extra interpolations.
This ability to calculate apparent states is used to calculate optical observables (Right Ascension and Declination). Furthermore, the propagator suite can also calculate range observables (delay and doppler). The delay measurement is trivially returned from the light-time calculation. The doppler measurable, however, is calculated using a dedicated doppler measurement model. This entire codebase is written in C++ and a Python binding is using pybind11.
References