|
FhSim
3.1.0
Marine systems simulation
|
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).
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.
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).DiskMesh) and F5 (CastWake, off here, byte-identical when off) do not change the states.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 position of the four nodes (dashed: old baseline, solid: new)
Mean z velocity (NED, + down) (dashed: old baseline, solid: new)
Top edge width y(N2) − y(N1) (dashed: old baseline, solid: new)
Tilt x(N3) − x(N1) (bottom behind top) (dashed: old baseline, solid: new)
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.
Disk x velocity (along the 1 m/s current) (dashed: old baseline, solid: new; outputs at 0, 1 and 4 s only)
Disk z position (NED, + down) (dashed: old baseline, solid: new; outputs at 0, 1 and 4 s only)
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).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.