Skip to content

Verify against NASA NESC Earth Check Cases #400

@simnaut

Description

@simnaut

Goal

Add a verification track that propagates the NASA NESC Earth-orbit check cases through Simulation::step() and compares against the published reference trajectories.

Companion issue to #399 (lunar cases). The NESC GN&C check cases (NESC-RP-12-00767 / "Independent Orbit Propagation Verification") cover Earth-orbit regimes — LEO with non-spherical gravity, drag, SRP, third-body Sun/Moon perturbations, plus GEO and HEO/Molniya cases — with documented ICs, force models, integrator settings, and checkpoint state vectors. They give us an independent cross-check (vendor-neutral, not JEOD/Trick) for the same Earth-orbit regime our existing Tier 3 ISS fleet exercises.

Scope

  • Ingest the NESC Earth-case reference data (ICs + checkpoint state vectors) into the astrodyn_verif_nesc crate stood up by Verify against NASA NESC Lunar Check Cases #399, committed under crates/astrodyn_verif_nesc/test_data/earth/.
  • Extend the regen binary from Verify against NASA NESC Lunar Check Cases #399 to cover the Earth cases when $NESC_HOME / --nesc-home is supplied.
  • Add a tier3_nesc_earth_* test per check case driving astrodyn_runner::Simulation end-to-end from the NESC ICs. Match the case's force model exactly — gravity degree/order, drag model + atmosphere, SRP shadow model, third-body set, integrator, step size — per the No Half-Baked Implementations rule. Tolerances follow the standard 5%-above-observed policy.
  • Wire parity-trait siblings so the Bevy adapter inherits Earth-case coverage transitively (issue Make bevy_parity tests a superset of every runner↔JEOD Tier 3 scenario #389 infrastructure), with KNOWN_PARITY_GAPS exemptions only for cases that genuinely can't ride the recipe path.

Out of scope

  • The lunar / cislunar cases — those live in Verify against NASA NESC Lunar Check Cases #399. Keep the splits clean so a regression in one regime doesn't mask the other.
  • Any new physics. If a case requires a force model we don't yet have (e.g., a specific drag coefficient model, a third-body configuration we haven't ported), that's a separate port issue, not a tolerance adjustment.

Open questions

  • The NESC Earth suite spans several gravity-degree variants (point mass, J2-only, full harmonics). Which subset is "canonical" for an initial pass — start with point mass / J2 cases, or go straight to the full harmonics cases since we already have GGM05C wired?
  • Atmosphere: NESC cases typically specify a Jacchia or NRLMSISE model. We currently have MET. Does the case allow a model-equivalent substitution, or do we need to port the specified model first?
  • Overlap with our existing JEOD ISS Tier 3 tests: should the NESC LEO cases run alongside, or replace, any of the existing tier3 fixtures?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions