[#99] Tier 3: cover SIM_4 RUN_JEOD1x_compatible (time SIM_4 2/2)#623
Merged
Conversation
…lse)
Closes the second of two RUNs in environment/time SIM_4_common_usage.
RUN_JEOD2x (already covered) uses the default true_utc/true_ut1 convention
where UTC/UT1 track the leap-second and EOP tables, so UTC TJT jumps by 1 s
at the 1999-01-01 boundary. RUN_JEOD1x_compatible sets true_utc=False and
true_ut1=False, which per time_converter_tai_{utc,ut1}.cc freezes the TAI-UTC
and UT1-TAI offsets at their initialization values — the legacy JEOD 1.x
convention where UTC/UT1 are smooth constant offsets from TAI with no leap jump.
Our SimulationTime reproduces this with no new capability: the constructor
already freezes the TAI-UTC offset, and set_ut1_tai_offset freezes UT1-TAI
(JEOD override_data_table=true mode). Both offsets are computed once at the
epoch from our own LeapSecondTable / EopTable, then held constant for the run.
- generate_references.sh: add RUN_JEOD1x_compatible to the SIM_4 group
- new fixture time_v4_jeod1x_time_v4.csv (1442 rows, 60 s cadence, regen via
cargo xtask regenerate-tier3)
- tier3_time_v4_jeod1x: validates TAI/UTC/UT1 TJT + TAI seconds against JEOD
(observed max ~8e-7 s calendar-rounding noise; tolerances 1e-6 s / 1e-9 s)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Adds Tier 3 coverage for JEOD SIM_4 RUN_JEOD1x_compatible, validating the legacy “frozen offset” UTC/UT1 convention (JEOD 1.x behavior) across the 1999-01-01 leap-second boundary, closing the remaining SIM_4_common_usage gap from issue #99.
Changes:
- Extend the SIM_4 reference-generation group to include
RUN_JEOD1x_compatible. - Add a new Tier 3 Rust test (
tier3_time_v4_jeod1x) that validates frozen UTC (TAI−UTC held constant) and frozen UT1 (UT1−TAI held constant). - Add the regenerated reference CSV fixture for the new RUN.
Reviewed changes
Copilot reviewed 2 out of 3 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
| trick/generate_references.sh | Adds RUN_JEOD1x_compatible to the SIM_4 group and documents the two UTC/UT1 conventions. |
| crates/astrodyn_verif_jeod/tests/tier3_sim_time_docker.rs | Adds tier3_time_v4_jeod1x to cross-validate the frozen-offset convention against JEOD output. |
| crates/astrodyn_verif_jeod/test_data/time_v4_jeod1x_time_v4.csv | New JEOD reference CSV for RUN_JEOD1x_compatible. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Address three wording nits from the PR review: - Note that SimulationTime keeps tracking the leap-second table on every advance; the JEOD 1.x frozen convention is reproduced by applying the frozen offset to mgr.tai_tjt in the loop, not by reading mgr's UTC. - Label the t=0 sanity check as UT1−TAI (UT1 TJT − TAI TJT in seconds), not "UT1−TJT". - Fix the generate_references.sh comment to say TAI−UTC and UT1−TAI (was "TAI-UT1"). 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_4_common_usage item of issue #99 Bucket B: the
environment/timeSIM_4 verification sim has two RUNs and onlyRUN_JEOD2xwas covered. This addsRUN_JEOD1x_compatible(1/2 → 2/2).Both RUNs share the same epoch (1998-12-31 00:00 UTC), 60 s cadence, and
span (t = 86460 s, crossing the 1999-01-01 leap second). They differ only
in the UTC/UT1 convention set in
input.py:true_utc/true_ut1. UTC andUT1 track the leap-second / EOP tables, so UTC TJT jumps by 1 s at the
boundary.
time_utc.true_utc = False,time_ut1.true_ut1 = False. Per JEODtime_converter_tai_utc.cc/time_converter_tai_ut1.cc, thetrue_*flags gate the table updatesinside
convert_a_to_b; with the flagfalse, the TAI−UTC and UT1−TAIoffsets are frozen at their initialization values and never updated —
the legacy JEOD 1.x convention. UTC/UT1 stay smooth constant offsets from
TAI with no leap jump.
Reproduction (no new capability)
Our
SimulationTimealready supports the frozen-offset convention:SimulationTime::newfreezes the TAI−UTC offset, andset_ut1_tai_offsetfreezes UT1−TAI (JEOD's
override_data_table = truemode). The test computesboth offsets once at the epoch from our own
LeapSecondTable(
tai_utc_at_tai_tjt→ 31 s) andEopTable(ut1_minus_tai_seconds), thenholds them constant for the run (no live EOP table installed). The CSV's t=0
UT1 offset is used only as a one-time epoch sanity check, never fed back as a
per-step override — computational independence preserved.
Validated time scales (
tier3_time_v4_jeod1x)All logged JEOD columns over 1442 points:
Residuals are JEOD calendar→TJT rounding noise at the epoch (sub-μs),
consistent with the existing
RUN_JEOD2xbounds.Changes
trick/generate_references.sh: addRUN_JEOD1x_compatibleto the SIM_4 group.time_v4_jeod1x_time_v4.csv(regenerated viacargo xtask regenerate-tier3).tier3_time_v4_jeod1xintier3_sim_time_docker.rs(the established home forthe time-scale sims; not a
Simulation::step()trajectory).Verification
cargo nextest run -p astrodyn_verif_jeod -E 'binary(tier3_sim_time_docker)'— 7/7 passcargo fmt --check— cleancargo clippy -p astrodyn_verif_jeod --tests -- -D warnings— clean🤖 Generated with Claude Code