astro.AtmosphericDrag#

Caution

This class has a singularity at colatitudes \(\phi\) of \(\pm \pi/2\) due to needing to divide by \(\cos\phi\) to compute the altitude above an ellipsoidal Earth.

class hohmannpy.astro.AtmosphericDrag(solar_activity='moderate', solver_tol=1e-08)#

Perturbation caused by drag due to Earth’s atmosphere.

Atmospheric density is found using interpolation of the 2012 Committee on Space Research (COSPAR) International Reference Atmosphere (CIRA-12) model. Three different density tables are provided, each representing a varying level of solar and geomagnetic activity, selected between using the solar_activity parameter.

Parameters:
  • solar_activity (str) – Which CIRA-12 reference atmosphere model to use for the density. Can select between “low”, “medium”, and “high”. See the CIRA-12 offical report [1] for more details on how to select between these.

  • solver_tol (float) – Tolerance to use when solving for the geodetic latitude via fixed-point iteration.

Notes

The following assumptions are made for this implementation:

  1. Density changes due to solar and geomagnetic activity are ignored apart from determining the mean density distribution.

  2. Cubic spline interpolation of an atmospheric density table is a sufficient representation of the true density wrt. time.

  3. The GMST of the Earth is initially accurately computed wrt. the Vernal equinox (ignoring nutation) and is then said to linearly rotate at the Earth’s mean rotation rate without precession.

  4. The drag experienced by a satellite is attitude-independent and simply a function of its ballistic coefficient.

  5. When computing the geodetic altitude the Earth is assumed to have a uniform ellipsoidal shape. This is less accurate than the true altitude found using a series expansion (similar to the non-spherical Earth’s geopotential) but the accuracy loss is small.

  6. The velocity of a satellite wrt. the atmosphere is simply its velocity minus the rotation rate of the Earth cross the satellite’s position.

Additionally, the altitude above an ellipsoid Earth is found using Algorithm 12 in Vallado [2].

evaluate(time, state, satellite)#

Computes the perturbing acceleration using a model for the drag caused by the Earth’s atmosphere.

Parameters:
  • time (float) – Current time in seconds since propagation began.

  • state (np.ndarray) – Current translational state in ECI coordinates given as (position, velocity).

  • satellite (Satellite) – Satellite object. Passed so that its ballistic_coefficient may be accessed.

Returns:

acceleration (np.ndarray) – Current translational acceleration in ECI coordinates.