Skip to content

Diagnose ellipsoid ode45 nonlinear force timing - #666

Merged
cmccomb merged 16 commits into
masterfrom
codex/ellipsoid-force-timing-599
Oct 24, 2026
Merged

cmccomb merged 16 commits into
masterfrom
codex/ellipsoid-force-timing-599

Conversation

@cmccomb

@cmccomb cmccomb commented Oct 24, 2026 •

Copy link
Copy Markdown
Member

Scope

This Python-repository investigation tests the pinned Nonlinear_Hydro/ode45 Regular 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_motion status, 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:

Source arm Regular heave / signed-work gap to independent Python RegularCIC heave / signed-work gap
Unchanged copied baseline 18.940 mm / 5.819% 19.930 mm / 6.194%
Continuous restoring 5.156 mm / 1.433% 6.390 mm / 1.772%
All three nonlinear blocks continuous 3.421 mm / 0.880% 4.307 mm / 1.114%

The restoring log changes from the preceding output state to the current state within 6e-9 N. Saved-sample excitation and wave elevation also reconstruct from the current source state within 3.5e-7 N and 1.1e-13 m. 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-22 N, 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.

@cmccomb
cmccomb marked this pull request as ready for review October 24, 2026 21:18
@cmccomb
cmccomb merged commit 6842b44 into master Oct 24, 2026
29 of 30 checks passed
@cmccomb
cmccomb deleted the codex/ellipsoid-force-timing-599 branch October 24, 2026 21:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant