Repository navigation
Diagnose ellipsoid ode45 nonlinear force timing - #666
Merged
Merged
Conversation
cmccomb
marked this pull request as ready for review
October 24, 2026 21:18
This was referenced Oct 24, 2026
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 Python-repository investigation tests the pinned
Nonlinear_Hydro/ode45Regular and RegularCIC cases in MATLAB R2025b. The runners copy the published WEC-Sim Applications input and model into disposable directories; neither upstream MATLAB repository is edited. The original 150 s published-input physical gate,qualified_motionstatus, and badge counts remain unchanged.Findings
The full force-timing run reproduces both unchanged published baselines. Its copied-model interventions change nonlinear subsystem sample periods while keeping the original 0.05 s source/output clocks, solver MaxStep, wave, PTO, and 100 ns added-mass delay:
The restoring log changes from the preceding output state to the current state within
6e-9N. Saved-sample excitation and wave elevation also reconstruct from the current source state within3.5e-7N and1.1e-13m. Saved-sample agreement does not establish force evaluation at ode45 minor steps. Both edited 0.05 s arms still fail every inherited pointwise physical limit and the 0.1% signed-work limit.The MaxStep screen keeps the 0.05 s physical/output/nonlinear/CIC clocks and continuously evaluated nonlinear blocks. Its predeclared 0.0125 s source-stability screen fails for both waves. A later 0.00625/0.003125 s diagnostic shows roughly halving successive source changes. At 0.003125 s, the source signed-work changes are 0.063%/0.071%, and independent Python differs by 0.220/0.406 mm heave and 0.059%/0.070% signed work; all inherited pointwise physical limits pass. This is a derived copied-model result, not a promotion of the published input.
The matched no-active-delay 0.05 s control moves exactly heave added mass into rigid inertia while retaining the continuous nonlinear blocks and the Simulink delay block. Actual delayed heave force is below
6e-22N, but Python heave/work gaps worsen to 7.978 mm/2.108% and 8.056 mm/2.169%. In the finer no-delay screen, these gaps contract to 0.956/1.122 mm and 0.269%/0.262% at 0.00625 s; signed work still misses the inherited limit. The mass shift changes inactive inertial masses and solver representation, so it rules out active delay removal alone as a fix without uniquely identifying the remaining numerical mechanism.In-repo verification
The source scripts and pinned GitHub Actions workflows regenerate all arms. Compact fixtures, provenance, repackers with HDF5 value checks, and portable Python tests cover all 3,001 samples, source settings, wave, force/PTO laws, independent trajectories, signed work, and the historical failed screen. Locally, the four portable modules pass for both waves (
8 passed). PARITY.md records the measured outcome and leaves both original cases qualified.Decision
These results do not support replacing the core delay as a fix for the published 50 ms ellipsoid gap. The source numerical clocks remain sensitive, and the unchanged published inputs still fail the retained original-input physical gate. The unresolved original-input pair stays tracked in #624; this PR closes the bounded #599 investigation without changing parity status.