-
Notifications
You must be signed in to change notification settings - Fork 0
JEOD Sim Coverage
Audit anchor: this map reflects the astrodyn tree at commit
7619f2f(2026-05-10) versus JEOD v5.4. Per-RUN verdicts were re-derived by reading each JEOD SIM'sS_define,Modified_data/,SET_test/RUN_*/input.py, and comparing against the corresponding astrodyn tier3 test source — not just by checking that a test name exists. After the workspace rebrand (#387), alltier3_*tests live incrates/astrodyn_verif_jeod/tests/; Bevy parity siblings live incrates/astrodyn_verif_parity/tests/bevy_parity_*.rs.
This page is the authoritative per-SIM, per-RUN coverage view. It supersedes earlier "covered/partial/not-covered" tables that scored at the SIM level only. The companion artifact is the JEOD-Capability-Matrix, which scores at the capability level (model, algorithm, data file).
Stricter than the previous version. A SIM/RUN is:
-
fully covered — at least one tier3 test loads the same initial
conditions, exercises the same gravity/atmosphere/RNP/integrator
configuration, runs for the same duration (or longer), and asserts
position/velocity/attitude/rates against the JEOD reference CSV via
assert_position/assert_velocity/assert_quat_angle/assert_ang_vel. - partial — N of M RUNs — some RUNs of a multi-RUN SIM are fully covered; others are not. Listed explicitly which RUNs hit which bucket.
- partial — same physics, no JEOD CSV cross-validation — the physics is exercised analytically (energy / angular momentum conservation, period match, etc.) but not cross-validated against the JEOD reference output. Lower-rigor than CSV cross-val, but still useful.
-
derived — exercised transitively by tests targeting other SIMs that
include this SIM as a component (e.g. ephemeris is exercised by every
trajectory that loads DE421, even if no test targets
SIM_ephem_verifdirectly). - not covered — no implementation, no test.
-
n/a — deliberately out of scope; rationale identifies the
Rust/Bevy equivalent (e.g. JEOD's
SIM_memorycovered by Rust ownership, not by an equivalent test).
Tier 1 (math/unit) and Tier 2 (static reference vectors) tests are noted where relevant but do not count toward Tier 3 coverage on their own.
| JEOD SIM | RUNs | Verdict | Our tier3 tests / detail |
|---|---|---|---|
| SIM_orbinit | ~46 (across 4 orbit-family directories) | partial — 5/46 RUNs CSV-validated | Docker-cross-validated: tier3_orbinit_docker_run0001_iss_inertial, _run0101_sts_inertial, _run0201_iss_pfix, _run0301_sts_pfix, _run0401_sts_trans_state. Family invariants (analytical, no JEOD CSV): tier3_orbinit_circular_leo, _eccentric, _equatorial, _highly_eccentric, _hyperbolic, _near_parabolic, _polar, _retrograde, _roundtrip_* (8 round-trip tests). Conversion-correctness via tier3_simulation_orbinit_cross_consistency and tier3_bevy_orbinit_cross_consistency. Gap: 41 of 46 JEOD-source RUNs have no per-RUN trajectory cross-validation. |
| SIM_lvlh_init | 2 (rectilinear, curvilinear) | partial — same physics, different harness |
tier3_simulation_run2_lvlh_rot_init_propagation exercises BodyAction::InitLvlhRot end-to-end (computes t=0 attitude from JEOD's YPR + LVLH-rate IC, then propagates 8 h vs the run2 CSV). bevy_parity_init_lvlh_rot_lvlh_rate_frame_dispatches and bevy_parity_init_lvlh_rot_writes_rotational_state_in_body_frame add Bevy-side parity. The two JEOD lvlh_init RUNs (rectilinear/curvilinear) are not driven directly; coverage rides on the dyncomp_run2 reference. |
| SIM_ref_attach | 2 (matrix, point-to-point) | fully covered |
tier3_sim_ref_attach_matrix (RUN_ref_attach_matrix: matrix attach to Earth.pfix at t=50, propagate to t=100) and tier3_sim_ref_attach_pt2pt (RUN_ref_attach_pt2pt: BodyAttachAligned named-point attach via Simulation::attach_to_frame_aligned). Pre- and post-attach windows both cross-validated against JEOD CSVs. |
| SIM_verif_attach_mass | 21 | partial — 8/21 RUNs |
tier3_sim_attach_mass covers RUN_01, 02, 03, 04, 10, 11, 101, 102. JEOD mass.out files cross-validated for those 8. The other 13 RUNs (advanced attach geometries, reattachment patterns) are not exercised. |
| SIM_verif_frame_switch | 2 | fully covered |
tier3_apollo8_frame_switch (Earth↔Moon switch at lunar approach) and tier3_apollo8_eci_integ (companion test for ECI integration before switch). |
| JEOD SIM | RUNs | Verdict | Our tier3 tests / detail |
|---|---|---|---|
| SIM_Euler | 3 | fully covered |
tier3_simulation_euler, _euler_ecc, _euler_equ + tier3_bevy_euler* parity. Plus 6 JEOD reference test vectors at Tier 2 in astrodyn_math. |
| SIM_LVLH | 3 (equatorial, eccentric, inclined) | fully covered |
tier3_simulation_lvlh, _lvlh_ecc, _lvlh_equ + tier3_bevy_lvlh* parity + tier3_lvlh_eccentric_orbit, _periodicity, _retrograde_orbit analytical. |
| SIM_LvlhRelative | 2 | fully covered |
tier3_simulation_lvlhrel_test0/test1 + tier3_bevy_lvlhrel_* + tier3_sim_lvlh_relative_consistency. |
| SIM_NED | 3 | fully covered |
tier3_simulation_ned_polar, _ned_sph_inc, _ned_sph_polar + tier3_bevy_ned_sph_* parity. Polar-orbit longitude has documented numerical instability (atan2 sensitivity). |
| SIM_OrbElem | 1 + many singularity sub-cases | fully covered |
tier3_simulation_orbelem_t01..t55 (7 variants) + tier3_bevy_orbelem* parity + 8 tier3_orbinit_roundtrip_* analytical (circular, eccentric, equatorial, hyperbolic, molniya, polar, retrograde). |
| SIM_Planetary | 5 | fully covered |
tier3_simulation_planetary_geo, _leo_ecc, _leo_equ, _leo_inc, _leo_polar + tier3_bevy_planetary_* parity. |
| SIM_Relative | 3 | fully covered |
tier3_simulation_relative_a_rot_no_trans, _ab_rot_ab_trans, _no_rot_ab_trans + tier3_bevy_relative_* parity + 5 analytical (tier3_relative_different_inclinations, _hohmann_transfer_geometry, _round_trip_frames, _same_orbit_phase_difference, _two_coorbiting_vehicles) + tier3_sim_relative_state_consistency. |
| SIM_SolarBeta | 3 | fully covered |
tier3_simulation_solar_beta, _equ, _obliquity + tier3_bevy_solar_beta* parity + 6 analytical (tier3_solar_beta_bounded, _equatorial_at_equinox, _iss_orbit, _polar_orbit, _sun_in_orbital_plane, _sun_perpendicular_to_plane). |
| JEOD SIM | RUNs | Verdict | Our tier3 tests / detail |
|---|---|---|---|
| SIM_dyncomp | 30 | partial — 21/30 fully, 2/30 partial, 5/30 not covered, 2/30 n/a | See per-RUN table below. |
| SIM_dyncomp_structure | 1 (parametric mass-tree sweep) | partial — same physics, different config |
tier3_apollo_mass_tree, tier3_mass_attach_detach, tier3_mass_* (8 invariant tests). No direct structure-sweep RUN cross-validation. |
| SIM_force_torque | 1 | fully covered |
tier3_force_constant_acceleration, _and_torque_decoupled, _symmetric_impulse_returns_to_rest, tier3_torque_constant_angular_acceleration, tier3_sim_torque_simple_run01..06 (6 RUNs), tier3_sim_force_torque_response. |
| SIM_verif_attach_detach | 3 (RUN_simple_attach_detach, RUN_complex_attach_detach, RUN_compute_child_derivative) | fully covered | Trajectory cross-val: tier3_sim_attach_detach_trajectory_simple (RUN_simple, full pre-attach + attached + post-detach windows via Simulation::attach/detach), tier3_sim_complex_attach_detach_pre_attach_trajectory + _rerooting_topology (RUN_complex chained-attach re-rooting), tier3_sim_compute_child_derivative_pre_attach_trajectory + _rerooting_topology + _full_trajectory (RUN_compute_child_derivative force/torque scheduling on kinematic children). Plus mass-tree analytical: tier3_mass_detach_all_children, _recovers_original, _reattach_different_position (10 functions in tier3_mass_attach_detach.rs). Bevy parity: bevy_parity_attach_detach_trajectory_simple, bevy_parity_chained_attach_*, bevy_parity_kinematic_propagation_simple_chain, bevy_parity_attach_non_root_integ_source_*, bevy_parity_detach_non_root_integ_source_*, bevy_parity_mass_attach_*, bevy_parity_mass_detach_*. |
| SIM_verif_shutdown | 1 | n/a — Rust Drop | JEOD shutdown sequence; Rust ownership cleans up resources automatically. |
| SIM_removable_body_action | 1 (RUN_1, 1-second logging-only) | fully covered (via dyncomp_run2 proxy) |
bevy_parity_body_action_lifecycle mirrors JEOD's mass.py add → remove → re-add lifecycle on the Bevy adapter and propagates the resulting orbit against the dyncomp_run2_state.csv reference (numerically identical because spherical-Earth point-mass cancels vehicle mass). bevy_parity_body_action_init_mass_resets_abm4_history, bevy_parity_body_action_init_trans_resets_abm4_history, and bevy_parity_body_action_startup_message_applies_exactly_once cover specific lifecycle invariants. tier3_bevy_parity_body_action_init_lifecycle adds the runner-side parity. |
| SIM_RELKIN_VERIF | 1 (RUN_relkin_test) | partial — same physics, no JEOD CSV | Relative kinematics exercised via tier3_relative_* analytical and tier3_simulation_relative_*. No SIM_RELKIN-specific RUN cross-validation. |
| JEOD SIM | RUNs | Verdict | Our tier3 tests / detail |
|---|---|---|---|
| SIM_1_dyn_only | 1 | fully covered |
tier3_time_v1_dyn_only loads JEOD CSV, asserts DYN seconds match within 1e-12s. |
| SIM_2_dyn_plus_STD | 5 (init by value, MET, GPS sec, GPS week, UTC epoch) | partial — 1/5 RUNs |
tier3_time_v2_std covers RUN_initialize_by_value. Other initialization modes (MET, GPS variants) not tested. |
| SIM_3_dyn_plus_UDE | 4 | fully covered |
tier3_time_v3_ude covers representative RUN with millisecond-precision UDE+DYN combo. |
| SIM_4_common_usage | 2 (uGPS init, leap-second boundary) | partial — 1/2 RUNs |
tier3_time_v4_common covers leap-second crossing; uGPS init mode not tested. |
| SIM_5_all_inclusive | 3 | fully covered |
tier3_time_v5_all covers RUN_UDE_initialized + all 10+ time scales; tier3_time_forward_reverse_all_scales adds bidirectional. |
| SIM_6_extension | 1 (user-defined extension scale) | partial — standard scales covered, user extension out of scope |
tier3_time_v6_ext covers standard-scale subset. User-defined extensions are an architectural divergence (not implemented; users add scales as needed). |
| SIM_7_time_reversal | 8 | partial — 3/8 + general round-trip |
tier3_sim_time_reversal_run1, _run3a, _run8b cover 3 explicit RUNs. tier3_sim_time_reversal_round_trip and tier3_time_forward_reverse_all_scales cover general bidirectional contract. RUN_2, RUN_4–7 not explicitly tested. |
| JEOD SIM | RUNs | Verdict | Our tier3 tests / detail |
|---|---|---|---|
| SIM_grav_accel_verif | 1 (RUN_01: 4×4 + 8×8 SH static check) | fully covered (mixed-tier) | Tier 2: astrodyn_gravity::jeod_validation::spherical_harmonics_40_test_vectors validates 40 JEOD reference vectors statically. Tier 3 via SIM_dyncomp proxy: tier3_simulation_run3a_sh4x4 + _run3b_sh8x8 exercise the same gravity setup in trajectory cross-val. Note: no test directly targets SIM_grav_accel_verif's CSV; coverage is via the equivalent SIM_dyncomp RUNs. |
| SIM_csr_compare | 1 (CSR vs GGM) | not covered | CSR coefficient set not ingested. We use GGM05C/GGM02C only. Tracked in Audit-Findings B1.10. |
| SIM_mercury | 3 (RUN_newtonian, RUN_relativistic_sun, RUN_ephemeris) | fully covered |
tier3_mercury_jeod_advance_rate reads 774MB Newtonian/relativistic CSVs, detects ~6800 periapsis events, measures GR rate (40–46 arcsec/century vs 43 theoretical). tier3_mercury_perihelion_advance_rate self-validates over 200 orbits. tier3_simulation_mercury_relativistic_effect 10-orbit sanity. tier3_bevy_mercury_relativistic + tier3_bevy_relativistic_moving_source parity. |
| SIM_tide_verif | 2 (RUN_01, RUN_02) | partial — 1/2 RUNs |
tier3_simulation_tide_run01 covers RUN_01 with JEOD CSV; tier3_bevy_tidal_sh4x4 and tier3_sh4x4_rnp add Bevy parity. RUN_02 not tested. |
| SIM_ephem_verif | 2 (DE421 interpolation accuracy) | derived | Every trajectory test using ANISE exercises ephemeris. tier3_simulation_earth_moon_clem is the explicit Earth-Moon ephemeris case. No direct SIM_ephem_verif RUN cross-validation. |
| SIM_prop_planet | 10 (propagated-planet + checkpoint + integrator switching) | not covered | Propagated-planet mode (planets integrated under sim physics, not ephemeris-sourced) not implemented. We require ANISE-loaded ephemeris. |
| SIM_RNP_J2000_prop | 6 (polar motion, nutation, precession, RNP frame variants) | partial — 1/6 RUNs |
tier3_bevy_run2p_polar_motion + tier3_simulation_run2p_polar_motion + tier3_sim_polar_motion cover the polar-motion RUN. tier3_bevy_sh4x4_rnp exercises gravity-under-RNP. The other 5 RUNs (nutation isolation, precession isolation, RNP-frame switch) not separately tested. |
| SIM_mars_orientation | 2 | fully covered |
tier3_sim_mars_rotation_dispatch validates the rotation dispatch logic; tier3_simulation_mars_dawn + tier3_bevy_mars_dawn exercise Mars rotation in the DAWN orbital scenario. |
| SIM_PLANET_VERIF | 7 (Earth/Moon/Mars planet constants) | derived | Planet radii/μ/J2/flattening exercised by every gravity, geodetic, and orbit-init test transitively. No direct SIM_PLANET_VERIF cross-validation. |
| SIM_MET | 9 (multiple altitudes, seasons, density profiles) | partial — 1/9 RUNs |
tier3_simulation_met_run5a + tier3_bevy_met_run5a cover RUN_5A (mid-altitude, nominal density). 8 other altitude/season variants not tested. tier3_bevy_met_atmosphere_drag_sixdof exercises 6-DOF drag with MET. |
| SIM_wind | 2 (corotating, inertial-frame wind) | partial — same physics, no JEOD CSV |
tier3_drag_corotation_wind_effect exercises corotating-wind drag reduction analytically. No direct SIM_wind RUN CSV cross-validation. |
| SIM_LIGHT_CIR | 10 (T01–T10: sunlit, shadow, terminator, penumbra, eclipse, etc.) | fully covered |
tier3_bevy_earth_lighting_t01 through _t10 (all 10 cases mapped). tier3_sim_earth_lighting_consistency validates determinism. tier3_bevy_earth_lighting_pipeline exercises full module. |
| SIM_de4xx | 2 | derived | Every trajectory loading DE4xx via ANISE exercises ephemeris read. |
| SIM_spice | 2 | n/a — replaced by ANISE | SPICE C-binding lifecycle replaced by ANISE (Rust SPK reader). Coverage: ANISE is bit-validated against CSPICE in flight-dynamics deployments. |
| JEOD SIM | RUNs | Verdict | Our tier3 tests / detail |
|---|---|---|---|
| SIM_VER_DRAG | 11 (3 ballistic + 8 flat-plate variants) | partial — 10/11 RUNs | Ballistic: tier3_sim_drag_ver_bc, _ver_cd (2 of 3 RUNs). Flat-plate: tier3_sim_drag_ver_flatplate_calc_eps00, _eps05, _eps1, _diffuse, _mixed, _specular, _orbiter, _torque (all 8 variants). Plus tier3_sim_drag_flatplate_ver, tier3_sim_drag_analytical, 8 tier3_drag_* analytical. Gap: RUN_aero_drag_const (constant-force mode) not ported (config gap, not physics gap). |
| SIM_contact | 8 (point, point off-center, line, line-point, line-arbitrary, line-inverse, line-side-to-side) | fully covered |
tier3_contact_point_pair, _point_off_center, _line_pair, _line_point, _line_side_to_side. Tests load JEOD CSVs, integrate with RK4 dt=0.01s, cross-validate trajectory + force/torque. Note: this is an upgrade from the old doc which said "not covered, body-to-body contact forces not ported" — that was stale; contact mechanics is ported in crates/astrodyn_interactions/src/contact.rs.
|
| SIM_ground_contact | 1 (RUN_contact_ground) | fully covered |
tier3_contact_ground cross-validates against contact_ground_contact_state.csv. GroundFacet (sphere-vs-plane geometry, Phase::Initialization / Phase::SteadyState) is ported in crates/astrodyn_runner + astrodyn_interactions. The earlier #[ignore] gating is gone. |
| SIM_grav_torque_verif | 1 (RUN_01) | fully covered (via dyncomp) | Exercised in greater fidelity through SIM_dyncomp RUN_10 series: tier3_simulation_run10a_gravity_torque, _run10c_gravity_torque_elliptical, _run10d_gravity_torque_elliptical_rate, plus tier3_bevy_gravity_torque_sixdof and tier3_bevy_run10c/10d parity. |
| SIM_torque_compare_simple | 6 (RUN_01–06: scalar inertia/orbit sweep) | partial — same physics, different scenario |
tier3_sim_torque_simple_run01..06 (6 RUNs) exist but exercise simple-impulse torque scenarios; not the JEOD scalar-sweep input set. The physics is verified more comprehensively via SIM_dyncomp RUN_10 (multi-body, higher-fidelity mass tree). |
| SIM_1_BASIC (SRP) | 3 (RUN_basic, RUN_basic_cr, RUN_basic_dynbody) | fully covered |
tier3_simulation_srp_basic_default, _srp_basic_varied_cr, plus tier3_bevy_srp_basic_default, _varied_cr. tier3_srp_1st_order_trajectory adds first-order analytical. |
| SIM_2_SHADOW_CALC | 4 (cooling, annular, ten-plates, transverse) | fully covered |
tier3_bevy_flat_plate_srp_with_shadow, tier3_simulation_shadow_2a_cooling, tier3_bevy_shadow_2a_cooling, tier3_sim_shadow_2a. |
| SIM_2A_SHADOW_CALC | 4 (annular eclipse variant) | fully covered |
tier3_simulation_shadow_2a_annular, tier3_bevy_shadow_2a_annular. Plus the _cooling pair shared with SIM_2. |
| SIM_3_ORBIT (SRP+drag+SH) | 2 (baseline, radiation) | fully covered (via dyncomp run7 series) |
tier3_simulation_run7a_sh4x4_3rd_body, _run7b_sh8x8_3rd_body, _run7c_sh4x4_3rd_body_drag, _run7d_sh8x8_3rd_body_drag + tier3_bevy_run7a/7b/7c/7d. |
| SIM_3_ORBIT_1st_ORDER | 2 | fully covered |
tier3_srp_1st_order_trajectory, tier3_sim_srp_1st_order, tier3_bevy_srp_derivative_first_order. |
| SIM_4_DEFAULT | 1 (RUN_compare) | fully covered |
tier3_simulation_srp_basic_default, tier3_bevy_srp_basic_default. |
| JEOD SIM | RUNs | Verdict | Our tier3 tests / detail |
|---|---|---|---|
| SIM_integ_test | 8 (RK4, RKF45, multiple step sizes) | fully covered |
tier3_integ_rk4_vs_analytical, _rk4_convergence_order, _rk4_energy_conservation, _rkf45_vs_analytical, _rkf45_convergence_order, _rkf45_energy_conservation, _rkf45_more_accurate_than_rk4, _rk4_vs_rkf45_agreement, _rk4_vs_gj_agreement. Plus tier3_simulation_lsode_abm4, _lsode_default (note: these exercise ABM4 as the multi-step option since LSODE is not ported — see Audit-Findings B1.3). |
| SIM_GJ_test | 19 (Gauss-Jackson order×dt sweep) | fully covered |
tier3_simulation_gj_dt10, _gj_order4, _gj_order8, _gj_order12, tier3_integ_gj_order4, _order8, _order12, _gj8_vs_analytical, _gj_energy_conservation, _gj_order_comparison, tier3_bevy_gj_dt1, _order4, _order12, _point_mass, tier3_bevy_parity_gj_* (7 bootstrap+order variants). |
| SIM_orb_elem | 1 + singularity sub-cases | fully covered | See SIM_OrbElem (derived_state); same test coverage. |
| SIM_PFIXPOSN_VERIF | 1 (geodetic) | fully covered |
tier3_simulation_geodetic, tier3_bevy_geodetic_derived_state, tier3_bevy_polar_geodetic. |
| SIM_NED_VERIF | 1 (NED) | fully covered | See SIM_NED (derived_state); same test coverage. |
| SIM_LVLH_Frame | 1 (LVLH) | fully covered | See SIM_LVLH (derived_state); same test coverage. |
| SIM_REF_FRAMES | 1 (frame-tree topology) | partial — same physics, no dedicated topology test | Frame-tree operations are exercised correctly by every relative-state and derived-state test transitively. No isolated frame-graph test exists. |
| SIM_math_verif | 1 (vector/matrix/numerical) | derived | Math kernel exercised by every test; direct unit tests live at Tier 1 in astrodyn_math. |
| SIM_ARTICULATION | 1 (moving facets) | not covered | Articulated surfaces (rotating panels, opening payload bays) not implemented. Static surfaces only. Tracked in Audit-Findings B2.4. |
| SIM_SURFACE_MODEL | 1 | partial — static facets only | Flat-plate facet calculations validated via SRP/drag tests (e.g. tier3_sim_drag_ver_flatplate_orbiter covers the 6-plate orbiter geometry). Dynamic surface reconfiguration not ported. |
| SIM_container | 1 | n/a — Rust collections | JEOD checkpointable containers replaced by Vec/HashMap + Bevy reflection. |
| SIM_memory | 1 | n/a — Rust ownership | JEOD memory allocator replaced by Rust borrow checker. |
| SIM_message_handler_verif | 1 | n/a — tracing + panic! |
JEOD MessageHandler replaced by tracing crate for logs and panic! for fatal errors. |
| SIM_integ_loop | 1 | n/a — Bevy FixedUpdate |
Trick integration loop replaced by Bevy schedule + Simulation::step(). |
| SIM_simulation_interface | 1 | n/a — Bevy ECS | Trick-JEOD coupling replaced by ECS scheduler. |
| JEOD SIM | RUNs | Verdict | Our tier3 tests / detail |
|---|---|---|---|
| SIM_Apollo | 1+ (multi-body Saturn V + Apollo stack across 12 mission phases) | partial — mass tree fully, trajectory only 100s slice |
tier3_apollo_mass_tree validates the 12-phase mass tree with exact JEOD-sourced mass/inertia/CoM at each stage separation. tier3_apollo8_eci_integ covers 100s of trans-lunar coast (Dec 23, 1968 19:38 UTC, Earth+Moon+Sun spherical, RK4 dt=0.5s, ~1m final position error). tier3_apollo8_frame_switch adds Earth↔Moon switch at lunar approach. Gap: no full multi-day mission cross-validation against JEOD's full RUN reference. |
| SIM_Earth_Moon | 2 public (RUN_clem, RUN_rosetta) | partial — 1/2 RUNs | RUN_clem (Clementine 7-day lunar orbit, Moon LP150Q 60×60 SH, RK4 dt=0.03125s): tier3_simulation_earth_moon_clem + tier3_bevy_earth_moon_clem cover the full 7-day span with JEOD CSV cross-validation. RUN_rosetta (Earth swing-by hyperbolic): not covered. Tracked in Audit-Findings B1.6. |
| SIM_Mars | 3 (RUN_dawn, RUN_phobos, RUN_orb_init_phobos) | partial — 1/3 RUNs | RUN_dawn (DAWN 3-hour Mars orbit, MRO110B2 110×110, Mars IAU rotation, Sun 3rd-body): tier3_simulation_mars_dawn + tier3_bevy_mars_dawn cover full scenario with JEOD CSV cross-validation. RUN_phobos and RUN_orb_init_phobos: not covered. Tracked in Audit-Findings B1.7. |
The canonical cross-validation target. Every "covered" claim here was verified by reading both the JEOD SET_test/RUN_*/input.py + Modified_data/ configuration and the corresponding astrodyn tier3 test source.
| RUN | Physics config | Our tier3 test(s) | Verdict |
|---|---|---|---|
| RUN_1 | Point-mass Earth, gradient ON, MET atmos (min activity), constants verification | — | not covered |
| RUN_2 | Point-mass Earth, gradient OFF, circular ISS, 3-DOF and 6-DOF |
tier3_simulation_run2_3dof, tier3_simulation_run2_6dof, tier3_bevy_run2_6dof
|
fully covered |
| RUN_2P | Point-mass + RNP polar motion, 3-DOF |
tier3_simulation_run2p_polar_motion, tier3_bevy_run2p_polar_motion, tier3_sim_polar_motion
|
fully covered |
| RUN_3A | 4×4 SH gravity + RNP, 3-DOF |
tier3_simulation_run3a_sh4x4, tier3_bevy_sh4x4_rnp, tier3_sh4x4_rnp
|
fully covered |
| RUN_3B | 8×8 SH gravity + RNP, 3-DOF |
tier3_simulation_run3b_sh8x8, tier3_bevy_run3b_3rd_body_sun
|
fully covered |
| RUN_4 | Point-mass + Sun/Moon (DE421), 6-DOF |
tier3_simulation_run4_3rd_body, tier3_bevy_run4_3rd_body_sun_moon
|
fully covered |
| RUN_5A | Point-mass + MET (solar min), gradient ON, 6-DOF, no drag |
tier3_simulation_met_run5a, tier3_bevy_met_run5a
|
fully covered |
| RUN_5B | Point-mass + MET (solar mean), elliptical, no drag |
tier3_simulation_run5b_atmosphere_mean, tier3_bevy_run5b_atmosphere_mean
|
fully covered |
| RUN_5C | Point-mass + MET (solar max), elliptical, no drag |
tier3_simulation_run5c_atmosphere_max, tier3_bevy_run5c_atmosphere_max
|
fully covered |
| RUN_6A | Point-mass + constant-density drag, 6-DOF |
tier3_simulation_run6a_const_density_drag, tier3_bevy_constant_density_drag_sixdof
|
fully covered |
| RUN_6B | Point-mass + MET drag, 6-DOF |
tier3_simulation_run6b_drag, tier3_simulation_drag_run6b, tier3_simulation_drag_run6b_rotated, tier3_bevy_drag_run6b
|
fully covered |
| RUN_6C | Point-mass + applied force (plane change maneuver) | — | not covered |
| RUN_6D | Point-mass + applied force (Y-axis impulse) | — | not covered |
| RUN_7A | 4×4 SH + Sun/Moon, no drag, 3-DOF |
tier3_simulation_run7a_sh4x4_3rd_body, tier3_bevy_run7a_3rd_body_sixdof
|
fully covered |
| RUN_7B | 8×8 SH + Sun/Moon, no drag, 3-DOF |
tier3_simulation_run7b_sh8x8_3rd_body, tier3_bevy_run7b_3rd_body_sun_moon_sixdof
|
fully covered |
| RUN_7C | 4×4 SH + Sun/Moon + MET drag, 6-DOF |
tier3_simulation_run7c_sh4x4_3rd_body_drag, tier3_bevy_run7c_3rd_body_inclined
|
fully covered |
| RUN_7D | 8×8 SH + Sun/Moon + MET drag, 6-DOF |
tier3_simulation_run7d_sh8x8_3rd_body_drag, tier3_bevy_run7d_3rd_body_polar
|
fully covered |
| RUN_8A | Point-mass, zero ω, attitude propagation 6-DOF | conservation laws via tier3_dyncomp_6dof_rigid_body_invariance
|
partial — analytical, no JEOD CSV |
| RUN_8B | Point-mass, LVLH rate ω, attitude stability | intermediate-axis theorem via tier3_dyncomp_attitude_stability_major_axis
|
partial — analytical, no JEOD CSV |
| RUN_9A | External torque (body), 6-DOF, zero ω |
tier3_simulation_run9a_torque, tier3_bevy_run9a_torque
|
fully covered |
| RUN_9B | External torque (body), 6-DOF, with ω | — (JEOD CSV exists but no test) | not covered |
| RUN_9C | External force + torque, 6-DOF, zero ω |
tier3_simulation_run9c_force_torque, tier3_bevy_run9c_force_torque
|
fully covered |
| RUN_9D | External force + torque, 6-DOF, with orbit rate |
tier3_simulation_run9d_force_torque_rate, tier3_bevy_run9d_force_torque_rate
|
fully covered |
| RUN_10A | Gravity gradient torque, cylinder mass, circular, 6-DOF, 85° pitch+1° yaw |
tier3_simulation_run10a_gravity_torque, tier3_reference_run10a_libration_period
|
fully covered |
| RUN_10B | Gravity gradient torque, cylinder mass, circular, 6-DOF, 0° attitude | — (JEOD CSV exists but no test) | not covered |
| RUN_10C | Gravity gradient torque, cylinder mass, elliptical, zero ω |
tier3_simulation_run10c_gravity_torque_elliptical, tier3_bevy_run10c_gravity_torque_elliptical
|
fully covered |
| RUN_10D | Gravity gradient torque, cylinder mass, elliptical, with ω |
tier3_simulation_run10d_gravity_torque_elliptical_rate, tier3_bevy_run10d_gravity_torque_elliptical_rate
|
fully covered |
| RUN_attach_to_ref_frame | Body attached to non-inertial frame, multi-attach lifecycle (8h ISS + 8×8 SH + Sun/Moon + MET drag + GG-torque, attach/detach/maneuver schedule at t=1000/1400/1800/2000–2050/2200/2600) | tier3_sim_dyncomp_run_attach_to_ref_frame |
fully covered |
| RUN_checkpoint_create | Trick checkpoint serialization | — | n/a — Bevy reflection (covers state, not active integrator state) |
| RUN_checkpoint_restart | Trick checkpoint restore | — | n/a — same as create |
SIM_dyncomp summary: 21 fully covered, 2 partial (analytical, no CSV), 5 not covered (RUN_1, 6C, 6D, 9B, 10B), 2 n/a (checkpoints).
| Status | Count | Of which |
|---|---|---|
| fully covered | 35 | tier3 + matching IC + matching physics + JEOD CSV cross-validation |
| partial (N/M RUNs) | 15 | some RUNs covered, others not — listed explicitly |
| partial (same physics, no JEOD CSV) | 6 | code path exercised but not against JEOD reference output |
| derived | 4 | exercised transitively (math, planet constants, ephemeris) |
| not covered | 3 | real gaps |
| n/a + Rust/Bevy equivalent | 7 | infrastructure replaced by Rust/Bevy idioms |
| Total SIMs | 70 | (67 model-level + 3 integrated) |
Plus SIM_dyncomp's 30 RUNs counted at the RUN level: 21 fully + 2 partial + 5 not + 2 n/a = 30.
Real gaps (the "not covered" + "partial — same physics, no JEOD CSV" rows) are triaged in Audit-Findings. Top items to close before release:
-
SIM_dyncomp RUN_6C, 6D, 9B, 10B — JEOD reference CSVs exist but no test harness; add
tier3_simulation_run6c/run6d/run9b/run10b. (Audit-Findings B1.4, B1.5) - SIM_orbinit per-RUN — extend Docker regeneration to cover the remaining 41 RUNs, or document that the 5 covered are representative.
- SIM_verif_attach_mass per-RUN — same for the 13 uncovered mass-tree RUNs.
- SIM_Earth_Moon RUN_rosetta — Audit-Findings B1.6.
- SIM_Mars RUN_phobos / RUN_orb_init_phobos — Audit-Findings B1.7.
- SIM_csr_compare — decide on CSR coefficient support; Audit-Findings B1.10.
This page is a snapshot at commit 7619f2f. When a new tier3 test lands or
JEOD's verification suite is upgraded, re-run the four-domain investigation
(see commit history for the methodology) and update verdicts row by row.
Do not silently widen "fully covered" to absorb new RUNs that aren't
actually tested. The cost of this page is its honesty.