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. |
tests/integration/test_slow_orbit_evection_ctl.py::test_resonance_capture_occurs_within_expected_time_window |
Rufu and Canup (2020) Figure 3 evection-resonance capture case, as reproduced in src/proteus/orbit/evection_notebook.ipynb / plot_evection.png (capture at t~2.4e4 yr) |
n/a | Drives the real evolve_orbit_satellite(model='ps1d_evec') under a Mignard constant-time-lag tidal spectrum from the paper's Figure-3-calibrated initial conditions; asserts eccentricity crosses 0.1 within t between 2e4 and 4e4 yr. Compared against a real run reaching t=2.58e4 yr, e=0.111. |
tests/integration/test_slow_orbit_evection_ctl.py::test_peak_eccentricity_matches_reference_location |
Same source as above (peak e~0.72-0.724 at a'~11.89 R_earth, t~5.2e4 yr) | n/a | Same driver; asserts the eccentricity peak reaches >= 0.6 at a' between 10 and 13 R_earth. Compared against a real run's observed peak of e=0.755 at a'=11.88 R_earth, t=5.12e4 yr -- the peak a' matches the reference to <0.1%. The post-peak contraction phase (a' declining to ~10.2 R_earth by t=1e5 yr in the reference) was not reached in that run and is not asserted here. |
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.
Eq. 58-59: rotation and semi-major-axis rate equations¶
Korenaga (2023) Eq. 58 gives the planet's spin-down rate,
dOmega/dt = -E_tide_dot / (I*Omega + G*M_pl*M_sat*I / (a*(L - I*Omega)))
where E_tide_dot is the tidal power dissipated in the planet (positive,
W) and L is the conserved total angular momentum from Eq. 60. The minus
sign ensures the spin slows whenever tidal energy is dissipated, matching
the expectation that dissipation transfers angular momentum from the
planet's spin to the satellite's orbit. Eq. 59 for the semi-major axis,
da/dt = -2*I*a / (L - I*Omega) * dOmega/dt
follows directly from differentiating the Eq. 60 closure at constant L
and solving for da/dt: whenever the planet's spin slows, the orbit
expands, provided L > I*Omega (the prograde-satellite regime PROTEUS
targets).
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.