Skip to content

Validation: src/proteus/orbit/satellite.py

This page tracks the @pytest.mark.reference_pinned tests that anchor the behaviour of proteus.orbit.satellite against a published source.

Test id Reference Source page Scope
tests/orbit/test_satellite.py::test_update_satellite_angular_momentum_matches_korenaga_2023_eq60 Korenaga (2023) Icarus 400, 115564, Eq. 60 (orbital component cross-checked against Touma and Wisdom 1994) n/a Pins the spin-plus-orbital decomposition on the present-day Earth-Moon configuration. Asserts sign and the 1e34-1e35 kg m^2 / s order of magnitude expected from Korenaga's Eq. 60.

Re-derivation note

The orchestrator populates plan_sat_am from

L_total = I_planet * omega_planet + M_satellite * sqrt(G (M_planet + M_sat) a_sat)

with I_planet = (2/5) M_planet R_planet^2 for a solid sphere. This is the Korenaga (2023) Eq. 60 form, equivalent to the textbook reduced-mass orbital angular momentum L_orb = mu * sqrt(G (M_pl + M_sat) a) in the M_sat << M_planet limit (where mu = M_pl M_sat / (M_pl + M_sat) -> M_sat). For the Earth-Moon system the substitution carries a 1.2% relative error.

For Earth parameters, the two components evaluate to

Component Value (kg m^2 / s)
Spin term I_planet * omega_planet (24-hr rotation, 1 M_earth, R_earth) ~7.05e33
Orbital term M_sat * sqrt(G (M_pl + M_sat) a) (Earth-Moon distance, lunar mass) ~2.89e34
Total L_planet+sat ~3.60e34

The orbital component agrees with Touma and Wisdom (1994), who report the present-day Earth-Moon orbital angular momentum as ~2.85e34 kg m^2 / s. The total system angular momentum (spin + orbital) is ~3.6e34 kg m^2 / s, which is what plan_sat_am carries through the simulation. The reference-pinned test brackets the total in [1e34, 1e35] kg m^2 / s; a regression that swaps M_sat for M_planet in the orbital prefactor would land at ~2.4e36 kg m^2 / s, well outside the bracket.

Correctness of the orbital prefactor

The orbital prefactor in Eq. 60 is the satellite mass M_M, not the planet mass M_E. The two forms differ by a factor of M_planet / M_satellite, which is ~81 for the Earth-Moon system and ~larger for any configuration with a relatively lighter satellite. The reference-pinned test discriminates between the two forms via the 1e34 < L < 1e35 bracket and the pytest.approx pin on the Eq. 60 value.