Sun-Synchronous Inclination (space-systems/orbit-mechanics/sun-synchronous-inclination)
Use when the task is sun-synchronous orbit design: compute the mean motion, the J2 nodal regression rate, and the inclination that makes the ascending node precess with the sun, keeping the local solar time fixed.
Domain quick reference
- Units: altitude in km in, meters internally, mean motion in rad/s, inclination in RADIANS out, degrees for display.
- Semimajor axis: a = Re + altitude_km * 1000 m (altitude in km converted to m), with Re = 6371000 m and mu = 3.986004418e14 m^3/s^2.
- Mean motion: n = sqrt(mu / a^3) rad/s.
- Nodal regression: om_dot = -1.5 * n * J2 * (Re / a)^2 * cos(i) rad/s, with J2 = 1.08262668e-3.
- Sun-synchronous condition: cos(i) = -omega_dot_desired / (1.5 * n * J2 * (Re / a)^2), omega_dot_desired = 2 pi / 365.2421897 / 86400 rad/s, one revolution per tropical year.
- At 500 km altitude the solution is 97.39 deg: sun-synchronous orbits are always retrograde.
- Above roughly 6000 km no sun-synchronous inclination exists: the required cos(i) leaves [-1, 1] and the solver raises ValueError.
Workflow
- Take the circular orbit altitude in km.
- Compute the semimajor axis and mean motion with orbital_mean_motion.
- Solve the inclination with sun_synchronous_inclination (radians).
- Check the regression rate with nodal_regression_rate.
- Pack the full solution with sun_synchronous_properties.
- Gate the orbit selection on the 97-99 deg retrograde band for LEO.
Pitfalls
- Feeding degrees into radian-based functions.
- Negative altitude or an inclination outside [0, pi] raising ValueError.
- Forgetting that high altitudes have no solution: the solver raises instead of returning a nonsense angle.
- Misreading the sign: the regression rate is negative for prograde orbits, and the sun-synchronous inclination is always above 90 degrees.
Behavior contract (gate 3)
The mean motion, nodal regression, and inclination logic is exercised by the gate 3 contract test: scripts/test_sun_synchronous.py against scripts/sun_synchronous_logic.py (stdlib unittest, offline). Run: python3 scripts/test_sun_synchronous.py
Compliance
- Standards referenced, not reproduced: ECSS series text is copyright ESA; the J2 nodal regression and sun-synchronous condition are common astrodynamics, summary-only per standards-map.yaml (ecss is a free ESA download).
- compliance: STANDARDS-REF, gated: false.