Repository navigation
Audit held-yaw step instability and gate continuous rebaseline - #635
Merged
Merged
Conversation
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.
Scope
This is an evidence and rebaseline increment toward #620. It does not close the published one-degree held-heading gap or change its qualified status.
Measured seed-2 result
The local published-step MATLAB rerun reproduces the archived seed-2 trajectory to numerical precision. At 0.01/0.005/0.0025 s, MATLAB self-selected heading updates are 52/51/39 and PTO work is 1990.936/2045.774/1521.927 J. The half-to-quarter source change is 0.125657 rad yaw, 0.024061 rad/s speed, 2887.33 N m torque, and -25.606% work, with identical waves at common samples.
At 0.0025 s, independent Python selects 57 events and absorbs 2681.039 J, 76.161% above the MATLAB quarter-step work. A further independent Python refinement to 0.00125 s absorbs 1746.504 J (-34.857%), so its held-heading path also lacks demonstrated step convergence. The archived seed-1 and seed-3 source refinements likewise fail the predeclared limits. PARITY.md records all three quarter-step physical comparisons and keeps the case qualified.
Verification
Local R2025b seed-2 source runs at all three steps; published-step yaw agrees with the archived reference within 4.1e-15 rad.
Local public physical runs for seeds 1, 2, and 3 at 0.0025 s, plus seed 2 at 0.00125 s.
tools/oswec_held_yaw_step_audit.pyreproduced the archived seed-1 and seed-3 source refinements and evaluated the new seed-2 run.The three-seed held-heading CI audit completed and uploaded all source and physical traces. Every source step pair fails its predeclared stability gate; the audit jobs succeed because this workflow records evidence rather than promoting parity. The separate corrected continuous-heading CI gate now passes for all three seeds at the PR head.
Independently advanced local 0.005 s physical runs for all three corrected seas finished from the pinned HDF5 and generated phases. Compared at common samples with the archived 0.01 s continuous-source traces, their largest yaw, speed, torque, wave, and work gaps are
1.26e-5rad,2.88e-6rad/s,0.345N m,8.98e-14m, and0.00352%. These cross-step numbers are provisional; the CI gate will compare against matched 0.005 s source trajectories.The first corrected-source CI run produced complete MATLAB 0.01/0.005 s traces for all three seeds. Every uploaded artifact passes the exact repaired source audit with
--enforce, and the full-duration public physical pytest passes against each matched 0.005 s trace. That CI run reported failure because a NumPy boolean JSON serialization error prevented its audit summaries from being written. Commitfd5a8f32fixes the error; the fresh three-seed CI run passed all source-stability and matched-source physical gates at the PR head.An independent local R2025b seed-2 run at 0.005 s reproduces the CI source result to numerical precision. The three-seed source self-change and independently advanced Python versus matched source gaps are:
2.07e-5rad /0.572N m /+0.00129%8.19e-6rad /0.227N m /-0.000671%1.83e-5rad /0.439N m /-0.00654%8.27e-6rad /0.199N m /+0.00302%1.07e-5rad /0.215N m /+0.0000107%4.14e-6rad /0.0815N m /-0.00000428%Maximum source speed self-change is
4.77e-6rad/s; maximum physical speed gap is1.89e-6rad/s. Every source pair sees the same wave at common samples, and the maximum physical wave gap is below1e-13m.The same two-line continuous-heading change is now maintained as a patch in
wec-sim-pythonand is being rerun against the unchanged pinned Applications input in PR #640. The published one-degree case remains qualified.The corrected continuous-heading case now has a stable source and passes the independently advanced public physical path for all three full-duration seeds in durable CI. It has no discrete held-heading events: the source and Python both update coefficients continuously. The original one-degree held-heading case remains an auditable numerical regression and the OSWEC parity badge remains qualified while the upstream correction is under review.