Computes Keplerian orbital elements from the terminal state.
Functions¶
orbit_diagnostics¶
Calculate orbital elements at engine cutoff.
def orbit_diagnostics(
*,
y: Array,
earth: EarthParams
) -> tuple[float, float, float, float, float, float]:
Returns:
1. eps - Specific orbital energy [J/kg]
2. h_ang - Specific angular momentum [m²/s]
3. a - Semi-major axis [m]
4. e - Eccentricity
5. r_apo - Apoapsis radius [m]
6. r_peri - Periapsis radius [m]
Equations¶
Eq. 18 - Specific energy: $$ \varepsilon = \frac{v^2}{2} - \frac{\mu}{r} $$
Eq. 19 - Specific angular momentum: $$ h = r \cdot v \cdot \cos\gamma $$
Eq. 20 - Eccentricity: $$ e = \sqrt{1 + \frac{2\varepsilon h^2}{\mu^2}} $$
Eq. 21 - Semi-major axis: $$ a = -\frac{\mu}{2\varepsilon} $$
Implementation¶
def orbit_diagnostics(*, y: Array, earth: EarthParams):
r = y[_R]
v = y[_V]
gamma = y[_GAMMA]
mu = earth.mu
# [Eq. 18]
eps = 0.5 * v * v - mu / r
# [Eq. 19]
h_ang = r * v * jnp.cos(gamma)
# [Eq. 20]
e = jnp.sqrt(jnp.maximum(0.0, 1.0 + (2.0 * eps * h_ang * h_ang) / (mu * mu)))
# [Eq. 21]
a = -mu / (2.0 * eps)
r_apo = a * (1.0 + e)
r_peri = a * (1.0 - e)
return eps, h_ang, a, e, r_apo, r_peri