FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
Regression baselines: review of the 2026-09-27 regeneration (MARE-0099, WP-A12)

Status: approved by the owner on 2026-09-28 and merged into feature/net-hydrodynamics (8d6e628; MARE-0099 resolved). The owner's answer to Q16 (2026-09-27): regenerate after phases F and G merge, on a branch for review (review/A12-baselines).

What was regenerated

Every regression test of the library (RunAndCompareRegressionXmlTiming, tests/TestUtils.h) was run on the integration head 9aca09d (after F8) against its committed reference. Four pass unchanged and were not touched; two differ and were regenerated:

Test Fixture Before (integration head) Regenerated Differs because of
SimObject.Sphere_Regression tests/in/Sphere passes no –
SimObject.Cable_Regression tests/in/Cable passes no –
SimObject.CableConnector_Regression tests/in/CableConnector passes no –
SimObject.TrawlBeam_Regression tests/in/TrawlBeam passes no –
SimObject.NetStructure_Regression tests/in/NetStructure DISABLED_ since A7 (R23); fails: RMS up to 0.87 m on the positions, 0.19 m/s on the velocities (limit 1e-8) yes A7 (default law LocalThroughFlow, MeshOpening solidity, waked flow), G1 (twine friction in the panel plane)
SimObject.Disk tests/in/Disk DISABLED_ since A11; fails (limit 1e-10) yes A11 (Disk drag projections, owner answer Q2, lead ruling R24)

The .ref limits are unchanged (output_rms_max 1e-8 for NetStructure, 1e-10 for Disk; wall_max 30 s). Both tests are re-enabled (DISABLED_ removed). Regeneration followed the baselines README: delete <ID>.ref and <ID>_ref.csv, run the test (ReferenceMode::CreateIfMissing), restore the limit. Determinism: a second process run of each test passed against the new reference, and the new _ref.csv files are byte-identical to the outputs of the same tests in the F8 worktree (a separate build). Red: the old references fail the current code (table above), so each test detects a change of this size.

After WP-J1 (MaxAcceleration removed, MARE-0133, lead ruling R40). The branch was rebased onto the integration head 2a7a436, which removes the acceleration limit from the nets and cables. No regression fixture set a nonzero limit (LowStrainPanelNet.xml, the NetStructure_Regression net, had MaxAcceleration="0", now deleted; the Sphere, Cable, CableConnector, TrawlBeam and Disk fixtures did not set it), and both fixtures use the explicit RK45_i, so the Jacobian gate that J1 also removed does not act. All six regression tests pass against the references above without regeneration (ctest 3/3, main 261 tests, 14 disabled; VALIDATION 30, 9 disabled). Nothing was regenerated for J1.

Which WPs changed the numbers

  • NetStructure_Regression. The fixture has no cables, no wake (CastWake off) and no current profile, so D1/F4 (wakes), R32 (a) (cable Rho), H1 (NetStructureArray damping) and F5 (bodies) do not reach it. Recorded measurements on this fixture: A7 moved the steady drift relative to the current from 0.1399 m/s to 0.1377 m/s (CHANGELOG, "Size of the change"), G1 to 0.1376 m/s (STATUS, E6 rerun); G2's clamp r ≤ 1 does not act (Sₙ = 0.160, r = 0.925), G3–G5 concern ScreenMF2022 only. A7 is therefore the change; G1 adds the twine friction in the panel plane, visible in the transient (below).
  • Disk. Only A11 (MARE-0098) changed the disk's force: v_n = (n·v)n, v_t = v − v_n, each drag term paired with its own speed. R32 (b) (DiskMesh) and F5 (CastWake, off here, byte-identical when off) do not change the states.

Net/NetStructure: <tt>NetStructure_Regression</tt>

A 1 m × 1 m panel of two triangles (LowStrainPanelNet.xml, t = 4 mm, L₀ = 50 mm, 20 meshes a side) across a 0.5 m/s current, held open by 0.5 N floats and sinkers and 0.2 N edge pulls, pulled 0.5 N upstream at each corner; 15 s, outputs every 0.1 s. The regenerated page with every node trace is NetStructure_Regression (doc/user/baselines/).

Drag. The fixture has no force output; the drag is fixed by the steady drift, where it balances the 2 N pull and the panel's 0.37 N weight in water (2.034 N). The new steady relative flow is 0.1376 m/s against 0.1399 m/s, so the default law gives the same drag at a 1.6 % lower relative speed: its drag coefficient is 3.4 % higher than the 3.x twine model's here. Hand check of the new baseline (LocalThroughFlow, Sₙ 0.160, r 0.925, Re_t 530, cd 0.2202, θ = 10.7°, A = 0.983 m²): ½ρA cd((1 − a3)cos θ + a3 cos 3θ)U² = 2.045 N against 2.034 N (+0.5 %).

Tensions. The fixture has no cables and NetStructure writes no twine tension; the external node forces are constant (0.5 N, 0.2 N, 0.5 N per node), so the tension state shows only through the shape: the edge width y(N2) − y(N1) and the height z(N3) − z(N1).

Key quantities, old (approved 2026-09-25) against new (means over the four nodes; NED, z down):

t = 1 s

Quantity old (approved 2026-09-25) new change
mean x position [m] 0.3457 0.1866 -46.0 %
mean y position [m] 0.5131 0.5058 -1.4 %
mean z position [m] 5.5361 5.5835 +0.9 %
mean x velocity [m/s] 0.3004 0.1622 -46.0 %
drift relative to the current, 0.5 − v_x [m/s] 0.1996 0.3378 +69.3 %
mean z velocity [m/s] 0.0301 0.0926 +207.9 %
top edge width, y(N2) − y(N1) [m] 0.3709 -0.1269 -134.2 %
height, z(N3) − z(N1) [m] 0.6086 0.1784 -70.7 %
tilt, x(N3) − x(N1) [m] 0.1718 0.1674 -2.6 %

t = 2 s

Quantity old (approved 2026-09-25) new change
mean x position [m] 0.6572 0.3088 -53.0 %
mean y position [m] 0.5242 0.4917 -6.2 %
mean z position [m] 5.5724 5.6667 +1.7 %
mean x velocity [m/s] 0.3499 0.0358 -89.8 %
drift relative to the current, 0.5 − v_x [m/s] 0.1501 0.4642 +209.2 %
mean z velocity [m/s] 0.0470 0.0784 +66.9 %
top edge width, y(N2) − y(N1) [m] 0.6325 0.0249 -96.1 %
height, z(N3) − z(N1) [m] 0.9509 0.7107 -25.3 %
tilt, x(N3) − x(N1) [m] 0.2662 0.3530 +32.6 %

t = 5 s

Quantity old (approved 2026-09-25) new change
mean x position [m] 1.7347 0.7611 -56.1 %
mean y position [m] 0.5802 0.4542 -21.7 %
mean z position [m] 5.7296 5.8903 +2.8 %
mean x velocity [m/s] 0.3631 0.3461 -4.7 %
drift relative to the current, 0.5 − v_x [m/s] 0.1369 0.1539 +12.4 %
mean z velocity [m/s] 0.0538 0.0489 -9.1 %
top edge width, y(N2) − y(N1) [m] 0.9498 0.9119 -4.0 %
height, z(N3) − z(N1) [m] 0.9757 0.9451 -3.1 %
tilt, x(N3) − x(N1) [m] 0.1886 0.3017 +60.0 %

t = 10 s

Quantity old (approved 2026-09-25) new change
mean x position [m] 3.5400 2.5818 -27.1 %
mean y position [m] 0.6686 0.4547 -32.0 %
mean z position [m] 5.9883 6.1329 +2.4 %
mean x velocity [m/s] 0.3603 0.3628 +0.7 %
drift relative to the current, 0.5 − v_x [m/s] 0.1397 0.1372 -1.9 %
mean z velocity [m/s] 0.0498 0.0489 -1.9 %
top edge width, y(N2) − y(N1) [m] 0.9782 0.9825 +0.4 %
height, z(N3) − z(N1) [m] 0.9836 0.9802 -0.3 %
tilt, x(N3) − x(N1) [m] 0.1708 0.1906 +11.6 %

t = 15 s

Quantity old (approved 2026-09-25) new change
mean x position [m] 5.3407 4.3946 -17.7 %
mean y position [m] 0.7427 0.4700 -36.7 %
mean z position [m] 6.2316 6.3773 +2.3 %
mean x velocity [m/s] 0.3601 0.3624 +0.6 %
drift relative to the current, 0.5 − v_x [m/s] 0.1399 0.1376 -1.6 %
mean z velocity [m/s] 0.0478 0.0489 +2.4 %
top edge width, y(N2) − y(N1) [m] 0.9848 0.9844 -0.0 %
height, z(N3) − z(N1) [m] 0.9832 0.9817 -0.2 %
tilt, x(N3) − x(N1) [m] 0.1747 0.1848 +5.8 %

Node positions at 15 s [m]

Node old (x, y, z) new (x, y, z) Δ (x, y, z)
N1 5.2999, 0.2339, 5.6844 4.3351, -0.0377, 5.8469 -0.9647, -0.2716, +0.1625
N2 5.4255, 1.2187, 5.8047 4.4886, 0.9467, 5.9333 -0.9369, -0.2720, +0.1286
N3 5.4746, 0.2868, 6.6677 4.5200, 0.0076, 6.8287 -0.9546, -0.2791, +0.1610
N4 5.1628, 1.2315, 6.7695 4.2345, 0.9633, 6.9003 -0.9283, -0.2681, +0.1309

Steady-drift drag coefficient ratio, new/old at the same drag (the 2 N pull): (u_old/u_new)² = (0.1399/0.1376)² = 1.0337 (+3.4 %).

Reading the numbers. The steady state (10–15 s) agrees within 2 % in drift and shape; the positions differ by about 0.95 m in x and 0.27 m in y at 15 s because of the first 5 s. There the default law folds the panel much further: at 1 s the top edge has crossed over (width −0.127 m against +0.371 m) and the height is 0.18 m against 0.61 m, the panel drifts at 0.16 m/s against 0.30 m/s, and it reopens by 5 s. This is the screen laws' small in-plane load (twine friction only, MARE-0111, owner answer QG3 "friction only until the MARE-0131 refit"): while the panel is folded, most of it is along the flow and carries little load. The lower early drift explains the lag in x; the y offset stays from the asymmetric fold.

Diagnostic, not a baseline: the same fixture with HydroModel="TwineCrossFlow" KnotFactor="1.1" (the setting that reproduces the 3.x force at normal incidence, CHANGELOG) run with the same binary stays close to the old baseline also in the transient (top edge 0.315 m against 0.371 m at 1 s, mean x −1.1 % at 15 s). At 15 s, old against TwineCrossFlow K 1.1:

Quantity old (approved 2026-09-25) new change
mean x position [m] 5.3407 5.2837 -1.1 %
mean y position [m] 0.7427 0.8183 +10.2 %
mean z position [m] 6.2316 6.3736 +2.3 %
mean x velocity [m/s] 0.3601 0.3574 -0.8 %
drift relative to the current, 0.5 − v_x [m/s] 0.1399 0.1426 +1.9 %
mean z velocity [m/s] 0.0478 0.0582 +21.8 %
top edge width, y(N2) − y(N1) [m] 0.9848 0.9878 +0.3 %
height, z(N3) − z(N1) [m] 0.9832 0.9865 +0.3 %
tilt, x(N3) − x(N1) [m] 0.1747 0.1521 -12.9 %

Steady-drift drag coefficient ratio, new/old at the same drag (the 2 N pull): (u_old/u_new)² = (0.1399/0.1426)² = 0.9624 (-3.8 %).

So the transient difference is the default law, not the panel core, the solidity or the flow lookup.

Mean x velocity of the four nodes (dashed: old baseline, solid: new)

Mean x velocity of the four nodes -0.295 -0.143 0.00907 0.161 0.313 0.465 0 3 6 9 12 15 time [s] m/s old new

Mean x position of the four nodes (dashed: old baseline, solid: new)

Mean x position of the four nodes -0.267 0.908 2.08 3.26 4.43 5.61 0 3 6 9 12 15 time [s] m old new

Mean z velocity (NED, + down) (dashed: old baseline, solid: new)

Mean z velocity (NED, + down) -0.0063 0.0214 0.0492 0.0769 0.105 0.132 0 3 6 9 12 15 time [s] m/s old new

Top edge width y(N2) − y(N1) (dashed: old baseline, solid: new)

Top edge width y(N2) − y(N1) -0.214 0.0448 0.303 0.562 0.82 1.08 0 3 6 9 12 15 time [s] m old new

Tilt x(N3) − x(N1) (bottom behind top) (dashed: old baseline, solid: new)

Tilt x(N3) − x(N1) (bottom behind top) -0.0189 0.0641 0.147 0.23 0.313 0.396 0 3 6 9 12 15 time [s] m old new

Net/Disk: <tt>SimObject.Disk</tt>

A 1 m × 0.1 m disk of 10 kg (cable diameter 0.01 m, ρ 1025) in a 1 m/s current along x, released at the surface level z = 0 with no external force, so its axis is z (edge-on to the current). Outputs at 0, 1 and 4 s only (the fixture's TOutput).

t [s] Output old new change
0 Position_0 0 0 –
0 Position_1 0 0 –
0 Position_2 0 0 –
0 Velocity_0 0 0 –
0 Velocity_1 0 0 –
0 Velocity_2 0 0 –
1 Position_0 -0.00479125 0.0125013 +360.9 %
1 Position_1 0 0 –
1 Position_2 -0.303812 -0.385203 -26.8 %
1 Velocity_0 -0.00773711 0.0247397 +419.8 %
1 Velocity_1 0 0 –
1 Velocity_2 -0.120622 0.007487 +106.2 %
4 Position_0 -0.0324413 0.190211 +686.3 %
4 Position_1 0 0 –
4 Position_2 -0.375331 -0.375977 -0.2 %
4 Velocity_0 -0.00956742 0.0921254 +1062.9 %
4 Velocity_1 0 0 –
4 Velocity_2 -0.000306971 0.0125524 +4189.1 %

Hand checks of the new baseline.

  • Along the current (x). Only the tangential drag acts: m dv/dt = k(1 − v)² with k = ½ρ C_t (D − d)T = ½·1025·0.005·0.099 = 0.2537 kg/m, so v(t) = 1 − 1/(1 + k t/m): 0.0247 m/s at 1 s and 0.0921 m/s at 4 s; the baseline has 0.02474 and 0.09213. The old baseline moved the disk upstream (−0.0077 m/s at 1 s): the old code paired the tangential drag with |v_n| and formed n_i v_i element-wise (MARE-0098), so the drag in x depended on the vertical speed and had the wrong sign here.
  • Vertical (z). The disk floats: the net vertical force 9.81(m − L + L s) with the displaced mass L = ρπD²T/4 = 80.5 kg and the submerged share s = (D/2 − z)/D vanishes at z = D/2 − (1 − m/L)D = −0.3758 m; the baseline has −0.3760 m at 4 s (old −0.3753 m). The new normal drag ½ρ C_n A_n |v_n| v_n (R24) damps the heave less than the old term, which used the current-driven |v_t| ≈ 1 m/s, so the disk overshoots to −0.385 m at 1 s (old −0.304 m, still rising at −0.12 m/s) and still heaves at 0.0126 m/s at 4 s.

Disk x velocity (along the 1 m/s current) (dashed: old baseline, solid: new; outputs at 0, 1 and 4 s only)

Disk x velocity (along the 1 m/s current) -0.0147 0.00772 0.0301 0.0525 0.0748 0.0972 0 0.8 1.6 2.4 3.2 4 time [s] m/s old new

Disk z position (NED, + down) (dashed: old baseline, solid: new; outputs at 0, 1 and 4 s only)

Disk z position (NED, + down) -0.404 -0.32 -0.235 -0.15 -0.0655 0.0193 0 0.8 1.6 2.4 3.2 4 time [s] m old new

What the owner is asked to approve

  1. NetStructure_Regression: the new baseline, including the deeper fold in the first 5 s under the default law (a known consequence of MARE-0111 / QG3, not a new defect).
  2. SimObject.Disk: the new baseline (the disk now drifts downstream and heaves about its floating level).

Approved by the owner on 2026-09-28 (both items). The branch was merged into feature/net-hydrodynamics after WP-J1 and MARE-0099 is resolved.