Add SIM_tide_verif RUN_02 (spherical + perturbing-only split) (#99)#625
Merged
Conversation
Closes the SIM_tide_verif per-RUN gap (1/2 → 2/2). RUN_02 runs the same solid-body-tide ISS scenario as RUN_01 but splits Earth gravity into a spherical (point-mass) control plus a perturbing-only spherical-harmonics control (JEOD `earth_spherical_grav_ctrl` + `earth_grav_ctrl.perturbing_only = True`). The split is mathematically equivalent to RUN_01's combined SH evaluation; validating against JEOD's distinct tide_run02 log confirms the spherical + perturbing-only decomposition reproduces the full field. - Refactored build_tide_run01 into a shared build_tide(split_gravity) that branches the Earth controls; run01 = false, run02 = true. GravityControl already exposes `perturbing_only`, so no physics port was needed. - tier3 test validates trajectory (pos ~cm, vel ~1e-5 m/s over 8 h) + per- step ΔC20 (1.1e-15) against JEOD; tolerances 1.05× observed. - bevy parity wrapper asserts runner≡bevy bit-identity. Genuine Tier-3 (full Simulation::step pipeline with per-step ephemeris pre_step). CSV tide_run02_tide.csv was already committed (no regen). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Adds the missing SIM_tide_verif RUN_02 Tier-3 cross-validation and parity coverage by reusing the existing tide scenario and toggling an Earth-gravity “spherical + perturbing-only SH” split that should be mathematically equivalent to the prior combined SH evaluation.
Changes:
- Refactors the RUN_01 builder into a shared
build_tide(init, split_gravity)and introducesrun02()using the split-gravity control configuration. - Adds a new Tier-3 JEOD cross-validation test for
tier3_simulation_tide_run02. - Adds a new Bevy↔runner parity test for
bevy_parity_tide_verif_run02.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| crates/astrodyn_verif_parity/tests/bevy_parity_tide_verif.rs | Adds Bevy↔runner parity coverage for the new RUN_02 verification case. |
| crates/astrodyn_verif_jeod/tests/tier3_sim_tide_verif.rs | Adds Tier-3 JEOD oracle test for RUN_02. |
| crates/astrodyn_verif_jeod/src/run_verification/sim_tide_verif.rs | Refactors scenario construction and introduces the RUN_02 verification case using split Earth gravity controls. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
cargo fmt wants new_nonspherical broken across lines; apply it. Also reword "central term" doc comments to "point-mass (n=0,1) terms" to match the codebase's perturbing_only terminology (Copilot review). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
simnaut
pushed a commit
that referenced
this pull request
May 25, 2026
…apture 2 new tests The previous freeze failed the fast-bucket baseline-invariance gate: - tier3_earth_moon_rosetta was added as a baseline entry but the fast CI bucket excludes the earth_moon suite, so it reported as missing. Add it to .github/tier3-allow-missing.txt alongside tier3_earth_moon_clem. - sim_drag_ver_const (#621) and simulation_tide_run02 (#625) landed on main after the freeze and were unguarded; refreeze captures both. - Rename tier3_sim_dyncomp_run_attach_to_ref_frame extras *_max_quat_angle/*_max_ang_vel -> *_..._err to match the schema used by every other tier3 report (Copilot review). Values byte-identical. Verified: baseline_diff OK (99 matched; 0 allowed-missing; 0 new); widening check 0 error(s), 0 removed; fmt + clippy clean. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
simnaut
added a commit
that referenced
this pull request
May 25, 2026
… LSODE) (#627) * chore(tier3): refreeze baselines snapshot (track 19 untracked tests + LSODE) The frozen `baselines.json` regression snapshot is a manual `tier3_report --freeze-baselines` artifact, not refreshed by CI. The `tier3_baseline_diff` gate only fails on regressions of entries already present, reporting brand-new tier3 tests as informational "new" — so every tier3 test added since the last freeze accumulated unguarded. This refreezes the full snapshot (78 -> 97 entries) from a clean `cargo nextest run --workspace -E 'test(tier3_)'` (all 233 tier3 tests pass): - Adds regression coverage for 19 tracked-but-unfrozen tests (RNP, LSODE, relative-state, mars/phobos, NESC NRHO, dyncomp attach-to-ref-frame, kinematic-propagation, child-derivative, complex attach/detach, and the run2/6c/6d/9b/10b simulation RUNs). - Tightens `tier3_simulation_lsode_default` by ~7 orders of magnitude: position 9.5 km -> 9.2e-4 m, velocity 11 m/s -> 1.0e-6 m/s. The old ceiling was frozen when LSODE was a stub; #616/#617 implemented the stiff BDF integrator, so the meaningful error is now sub-mm. The loose ceiling let a 7-orders accuracy regression pass unnoticed. All deltas are tightenings (informational) or new entries; the `check_baseline_widening` lane reports 0 errors / 0 warnings, and `tier3_baseline_diff` is OK (97 matched, 0 new). `attach_mass` is unchanged from #624. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(tier3): allow-list earth_moon_rosetta, rename dyncomp err keys, capture 2 new tests The previous freeze failed the fast-bucket baseline-invariance gate: - tier3_earth_moon_rosetta was added as a baseline entry but the fast CI bucket excludes the earth_moon suite, so it reported as missing. Add it to .github/tier3-allow-missing.txt alongside tier3_earth_moon_clem. - sim_drag_ver_const (#621) and simulation_tide_run02 (#625) landed on main after the freeze and were unguarded; refreeze captures both. - Rename tier3_sim_dyncomp_run_attach_to_ref_frame extras *_max_quat_angle/*_max_ang_vel -> *_..._err to match the schema used by every other tier3 report (Copilot review). Values byte-identical. Verified: baseline_diff OK (99 matched; 0 allowed-missing; 0 new); widening check 0 error(s), 0 removed; fmt + clippy clean. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Test User <test@test.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes the SIM_tide_verif per-RUN gap (1/2 → 2/2).
RUN_02runs the same solid-body-tide ISS scenario as RUN_01 but splits Earth gravity into a spherical (point-mass) control plus a perturbing-only spherical-harmonics control — JEOD'searth_spherical_grav_ctrl+earth_grav_ctrl.perturbing_only = True. The split is mathematically equivalent to RUN_01's combined SH evaluation; validating against JEOD's distincttide_run02log confirms the spherical + perturbing-only decomposition reproduces the full field (trajectory + per-step ΔC20).build_tide_run01into a sharedbuild_tide(split_gravity)that branches the Earth controls (run01= false,run02= true).GravityControlalready exposesperturbing_only, so no physics port was needed.Simulation::step()pipeline with the per-step Sun/Moon DE421pre_step. Validates pos (~cm over 8 h), vel (~1e-5 m/s), and per-step ΔC20 (1.1e-15) against JEOD; tolerances 1.05× observed.tide_run02_tide.csvwas already committed — no regen.Verification
tier3_simulation_tide_run01/02pass;bevy_parity_tide_verif_run01/02pass;cargo fmt --check+cargo clippy --tests -- -D warningsclean.Part of #99 Bucket B.
🤖 Generated with Claude Code