FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
Steady tow of the morenot520 trawl

The morenot520 bottom trawl of data/trawl/movies/trawl/morenot520/ towed at 4 kn until it settles, under fhsim_marine_elements 4.0 (both net load laws) and 3.2.1. The figures are information, not pass/fail: there are no measurements of this trawl. The test SteadyTow_VALIDATION checks that the tow is statistically stationary below the warps' MaxTension (§ 1.2): a trawl can run in a genuine cycle, so "settled" means that the mean and the range of each quantity have stopped changing, not that the quantity is constant. Issues: FISH-0079 and FISH-0080 (both resolved, issues/resolved/FISH-0079-steady-tow-trawl-scenario.md, issues/resolved/FISH-0080-morenot520-net-acceleration-limit.md). Run on 2026-09-27. § 6 repeats the tow at 3.0, 3.5, 4.0 and 4.5 kn under both 4.0 laws and 3.2.1 (speed sweep, owner ruling R40).

1. Result

Mean over 350–450 s. The run starts at rest, ramps the vessel to 2.058 m/s over 120 s and is settled from about 250 s: every mean below changes by less than 0.3 % between 250–350 s and 350–450 s. The loads carry a fast oscillation; "sd" is its standard deviation in the 1 s samples (from a scratch run of the same input).

Quantity 4.0, LocalThroughFlow (default) 4.0, TwineCrossFlow 3.2.1
Net drag (x-sum of the six bridle forces on the wing nodes) 90.3 kN (sd 5.6) 114.0 kN (sd 11.3) 130.8 kN (sd 9.5)
Sum of both warp tensions at the vessel 184.0 kN (sd 6.8) 203.2 kN (sd 16.7) 216.7 kN (sd 12.5)
Largest warp end tension over the whole run (MaxTension 1000 kN) 110 kN 122 kN 121 kN
Door spread (warp attachment points) 104.4 m 83.2 m 74.3 m
Wing spread (upper wing ends PWing1–SWing1) 32.8 m 26.4 m 23.2 m
Headline height (fishline centre below headline centre) 6.79 m 8.79 m 9.48 m
Door depth (seabed at 190 m) 188.5 m 188.4 m 188.3 m

Against 3.2.1 the default law gives 31 % less net drag and TwineCrossFlow 13 % less. The doors and the net lie on the seabed (fishline centre at 190.2 m, codend at 188.4 m), so the net drag includes the seabed contact force of the groundgear, as a load cell ahead of the wing ends would measure it at sea.

The 4.0 columns are the two SteadyTow_VALIDATION runs of the committed inputs (fishery wp/I1-steady-tow, fhsim_marine_elements integration branch e841c70, whose src/ equals bdca9d8). The 3.2.1 column is the same input run in a scratch copy on fishery main ff17183 with fhsim_marine_elements 3.2.1 from the Conan cache (the build of WP-D3).

Rerun after FISH-0080 and MARE-0133, which also removed the warps' and bridles' 1000 m/s² per-component limit (fishery wp/J1-remove-max-acceleration on fhsim_marine_elements wp/J1-remove-max-acceleration, 2026-09-28): net drag 90.25 kN (default law) and 114.05 kN (TwineCrossFlow), largest warp end tension 109.5 kN and 121.7 kN, door spread 104.46 m and 83.18 m; every figure of the table within 0.1 % of the I1 run (not isolated from other fhsim_marine_elements changes since that run).

Rerun after owner ruling R70 (FISH-0090, FISH-0091: door inertia from Mass plus plate added mass, damping on the relative velocity; fishery fix/deep-review, 2026-09-28), default law, against the same build without R70: net drag 90.63 kN (was 90.25), warp tension sum 182.2 kN (184.0), door spread 100.95 m (104.44), wing spread 32.01 m (32.80), headline height 7.01 m (6.79), door depth 188.50 m (188.46), largest warp end tension 108.3 kN (109.5). The damping change has no effect in this still-water rig and the inertia does not enter a steady state, yet the tow settles about 3 % narrower (door spread still changing 1.1 % between the last two 100 s windows, flattening at about 100.9 m). A likely cause, not isolated: the doors and groundgear rest on the seabed, whose friction admits a range of equilibria, so the settled state depends on the transient. (The R86 diagnosis falsified this: the seabed friction is viscous, and the change was a switch between door cycles, § 1.2.)

Rerun after owner ruling R75 (FISH-0091: the door's linear damping is a numerical stabiliser on the absolute velocity again; R70's inertia kept) and R66 (FISH-0092: door buoyancy from its wetted plate area), same build otherwise: every figure equals the R70 run to the printed digits (net drag 90.63 kN, warp tension sum 182.17 kN, door spread 101.03 m, wing spread 32.03 m, headline height 7.01 m, door depth 188.50 m, largest warp end tension 108.3 kN). In still water the absolute and the relative velocity are the same, and the doors are far below the surface, so the 3 % narrower settling is R70's inertia.

Net drag against time, means over 10 s of the 1 s output

1.1 Magnitude

Published net drags at the wing ends of bottom trawls are about 10–20 kN (Fiorentini et al. 2004: 9.8 kN in the flume and 12.8–13.7 kN at sea for Italian bottom trawls at 3.5 kn, 19.6 kN for a high-bosom design). The settled morenot520 figures, 90–131 kN, are 5–10 times that. The morenot520 is a much larger trawl, a two-panel bottom trawl with 155 mm meshes, 3–8 mm twine and about 49 m of headline ropes, rigged with 8 m², 4400 kg doors on 499 m warps from a 72 m vessel and towed at 4 kn instead of 3.5 kn (a factor 1.3 on the speed alone). That places it at the order of magnitude of a large trawl, not beyond it. This is a magnitude check only: nothing published was found for the Mørenot 520 itself.

1.2 Steady means stationary, not constant (R101-R103)

A trawl can be genuinely unsteady even when the simulation is correct (owner ruling R101). A door can go in and out of stall and pump; warps, bridles and net then carry the cycle. The R86 diagnosis (FISH-0094) found exactly that here: with the gear on the seabed both doors run a self-sustained cycle of about 2 s (angle of attack swinging by up to ±15-20°, the warp point bobbing 0.5 m next to the seabed, the net drag ±15 kN), and before R100 the same inputs ended on one of several such cycles depending on the start. The door's cycle in seabed contact is considered real (R102): the contact model is kept, and the cycle is reported rather than damped away. The seabed friction stays viscous (R103): ToTrawlDoor::AddBottomForces and SeafloorForces::CalcBottomForceSphere have no Coulomb (static) friction, so there is no stick zone and no continuum of equilibria; a future Coulomb friction would make the towing history part of the case, as it is at sea.

So SteadyTow_VALIDATION asks for statistical stationarity:

  • the output is logged every 0.1 s (some 20 samples per door cycle), and each quantity's statistics are taken over the last two 100 s windows (some 50 cycles each): mean, min, max, 5th and 95th percentile and the dominant period (largest peak of the periodogram, periods of at most half the window; 0 when the quantity does not move);
  • a quantity is stationary when its mean and both edges of its 5-95 % band change by less than 2 % of its mean between the two windows. 2 % was the settling tolerance before; the band edges are location statistics of the same quantity and get the same tolerance, so the reported mean and range are each reproducible to 2 % from one window to the next, below the few-per-cent uncertainty of door spread, headline height and warp tension measured at sea. A growing or decaying oscillation, a drift or a switch to another cycle moves a band edge even when the mean stays;
  • asserted for net drag, the warp tension sum and each warp's tension, door spread, wing spread, headline height and both doors' angle of attack; the door depth is reported only (its mean is the seabed depth, so a tolerance relative to it says nothing about the door);
  • <ID>_report.txt gives, per quantity, the last window's mean, min, max, percentiles and period, the previous window's mean and band, the two changes and the verdict (stat lines), then the 10 s means as before;
  • uniqueness is reported, not required: SteadyTow_VALIDATION.SecondStartIsReported runs the default-law case with the doors starting 50 m apart instead of 80 m (SteadyTow_SecondStart_in.xml), checks its own stationarity, and, when both starts ran in the same ctest invocation, writes tests/out/SteadyTow/SteadyTow_uniqueness.txt: the two means and bands per quantity, their relative difference and "start-independent" when it is below 0.2 % (below the 0.26 % door-spread difference between the two end states the diagnosis found before R100). It adds one more ~25 min run, in parallel with the others under ctest -j; each run keeps the 3600 s in-test budget (FISH-0089).
  • Comparisons with measurements use means with ranges (§ 5): measured door spread, warp tension and headline height at sea are time averages over the door's motion too, so the model's figure to compare is its cycle mean, with its min-max and 5-95 % band next to it.

After R100 (2026-09-28)

With the rigid-body ω terms in the door (owner ruling R100, FISH-0093) and the R70 inertia, both laws are stationary at 450 s and the default law ends on the same state from both starts. Means over 350-450 s, with min-max and the dominant period (fishery fix/deep-review, three SteadyTow_VALIDATION runs side by side, 19-20 min each):

Quantity 4.0, LocalThroughFlow, doors start 80 m apart same, 50 m apart 4.0, TwineCrossFlow
Net drag 89.6 kN (82.4-96.7) 89.7 kN (82.4-96.7) 114.2 kN (101.3-127.1)
Warp tension sum at the vessel 183.1 kN (178.4-186.9) 183.1 kN (178.4-186.9) 204.0 kN (196.4-209.5)
Port / starboard warp tension 91.5 / 91.6 kN 91.6 / 91.6 kN 102.0 / 102.0 kN
Door spread 109.76 m (109.74-109.78) 109.76 m (109.74-109.78) 90.89 m (90.86-90.92)
Wing spread 33.92 m (33.90-33.93) 33.92 m (33.90-33.93) 28.27 m (28.25-28.29)
Headline height 6.46 m (6.44-6.48) 6.46 m (6.44-6.48) 8.33 m (8.30-8.36)
Door angle of attack, port / starboard 35.4° / 35.4° (31.3-39.8) 35.4° / 35.4° (31.3-39.8) 33.8° / 33.7° (26.0-42.2)
Door depth (seabed at 190 m) 188.42 m (188.35-188.50) 188.42 m (188.35-188.50) 188.38 m (188.23-188.54)
Dominant period 1.75 s 1.75 s 1.79 s
Largest warp end tension over the run 93.7 kN 93.5 kN 104.7 kN
  • The door cycle is still there, smaller: the angle of attack swings over about ±4° (default law; ±8° TwineCrossFlow) at 1.75 s instead of 18.5-46.5° before R100, the warp point bobs 0.16 m (0.31 m), and the loads carry it (net drag ±8 %). The mean and band of every quantity change by at most 0.16 % (default law) and 0.61 % (TwineCrossFlow, door spread band) between the last two windows.
  • Uniqueness: the two starts agree to 0.06 % or better in every mean (door spread 109.761 m both, net drag 89.62 / 89.66 kN), and their bands coincide (SteadyTow_uniqueness.txt). Before R100 they ended 0.26 % apart in door spread on two different cycles (FISH-0094). The R86 diagnosis's debug-switch runs with the terms reached the same 109.87 m from both starts.
  • Against the R70 run above: door spread 101.0 → 109.8 m (+8.7 %), wing spread 32.0 → 33.9 m, headline height 7.01 → 6.46 m, net drag 90.6 → 89.6 kN, warp tension sum 182.2 → 183.1 kN. The § 1 table predates R100.

2. Why the D3 run sat at the 1 MN clamp

The net-hydrodynamics downstream check (WP-D3, fhsim_marine_elements doc/user/validation/downstream_fishery.md) ran Trawl.xml as a cold start and reported net drags of 1.0–1.9 MN with the warps at their 1 MN MaxTension. Those figures were an artefact. They were neither net drag nor an effect of the 4.0 load laws.

  • Cause: the net's acceleration limit. Morenot520.xml set MaxAcceleration = "10". NetStructure then scaled down any node acceleration above 10 m/s² (fhsim_marine_elements 4.0 before MARE-0133, src/net/NetStructure.cpp:591-594, LimitAccelerationMagnitude). The node moved less than its force demanded, while the elements pulled on its neighbours in full, so action and reaction no longer balanced. The net then drives itself. Left free in still water (no doors, no bridles, laid out at 50 m depth), it builds node speeds of 3–8 m/s within 20 s, and its codend travels about 30 m and drifts sideways. Integrator tolerances of 10⁻⁶ with a 1 ms step change nothing. The same happens with ME 3.2.1 and under both 4.0 laws. Without the limit, the free net contracts smoothly at 1–2 m/s as its meshes open towards the unloaded 45° (knot stiffness). fhsim_marine_elements has since removed the limit (MARE-0133, owner ruling R40), and the net, warp and bridle files under data/trawl/ no longer set it (FISH-0080).
  • The limit alone decides it. With only MaxAcceleration switched off, the unchanged D3 cold start (gear collapsed at the origin, vessel at full speed from t = 0) settles too, at 90.3 kN net drag, 183.5 kN warp tension and 105.2 m door spread, the plateau of § 1. With the limit on, the scenario reaches the clamp in every variant tried:
    • a 300 s speed ramp from the D3 start (clamped from about 215 s, at 1.5 m/s);
    • the laid-out start of § 3 with a 60 s or 120 s ramp (clamped by about 115 s);
    • ME 3.2.1 and 4.0 with either law. The D3 cold start also clamps under ME 3.2.0, whose limit was weaker (it divided by √(a/a_max), so it never reached a_max; MARE-0066 made it exact in 3.2.1).
  • It could not have been drag. The netting holds about 60–100 m² of twine (bars × bar length × diameter from the panel mesh coordinates). At 2.058 m/s, even if all of it stood normal to the flow with C_D = 1.2, the drag would be at most about 150–260 kN.
  • So the D3 comparison (Q17) is void. The "LocalThroughFlow +83 %" came from a clamped, self-excited run. Settled, the default law gives 31 % less net drag than 3.2.1.

Other findings on the way, none of them the cause:

  • Trawl.xml starts the whole net at one point (every node at the origin, the NetStructure default when no initial condition is given). It also starts the warps straight and taut at 100 kN and the vessel at full speed. This start is violent, but it settles once the limit is off.
  • The committed workflow's settled start (TrawlPrepare.xml reading TrawlPrepareStates0.txt) cannot be rebuilt: the states file is in no commit (FISH-0078).
  • The integrator is not the cause (tolerances above). The BDF recommendation of R31 / FHSIM-0028 (<LinearSolver Type="DENSE"/>) does not help here: the model has 3107 states, no SimObject reports a Jacobian sparsity and 34 port couplings have no port Jacobian, so the dense Jacobian is built by finite differences. A BDF run produced no output sample (0.06 s) in its first 5 minutes. RK45_i with the input's StepMax = 0.03 is used; a 450 s run takes about 20 min.

3. The scenario

Inputs: tests/in/SteadyTow/SteadyTow_in.xml (default law) and SteadyTow_TwineCrossFlow_in.xml, both written by tests/in/SteadyTow/make_steady_tow.py. The rig is that of Trawl.xml (vessel, doors, Warp.xml, Bridle.xml, Morenot520.xml). No load law, coefficient, mass, stiffness or damping was changed. These are the differences:

  1. The FISH-0019 Environment block replaces the 2.x Environment/Basic (190 m depth, no current, no waves, RandomSeed = 1).
  2. A laid-out start in place of the collapsed one:
    • all 429 net nodes start flat at the surface behind the doors, at a mesh half-angle of 20° from the panels' mesh coordinates. The 383 nodes that the refinement adds are the midpoints of their parents; the script replays NetStructureSpec::RefineMesh and checks the counts against NetStructure's 429 nodes, 800 panels and 108 cable elements;
    • the doors start 80 m apart, 90 m ahead of the wings, with the bridles' free nodes on the line to the wings;
    • the warps start 1 m short of straight. The start only shortens the transient: the cold start of § 2 reaches the same plateau.
  3. A speed ramp: Src/Ramp feeds Vessel.Vel from 0 to 2.058 m/s over 120 s.
  4. No cameras. One FileOutput logs the ports the test reads, every 0.1 s since R101 (1 s before), including both doors' AngleOfAttack.
  5. SteadyTow_SecondStart_in.xml is the default-law input with the doors starting 50 m apart (R101's uniqueness report, § 1.2).

SteadyTow_Morenot520.xml, SteadyTow_Warp.xml and SteadyTow_Bridle.xml are byte copies of the rig files, checked by SteadyTow.RigFilesAreCopiesOfTheOriginals. Until FISH-0080 the net copy differed in one attribute, MaxAcceleration = "0" (no limit) in place of "10" (§ 2).

NumericalDamping = "1" of the warps and bridles is kept. It damps the absolute velocity of every cable node (fhsim_marine_elements src/cable/CableBranched.cpp:194), so at 4 kn it acts as an extra drag on the cables. A run with it at 0 gives the same net drag (90.1 kN) and a warp tension sum of 170.5 kN instead of 184 kN: the damping adds about 13 kN (7 %) to the warp tension. The fast load oscillation (§ 1) was not investigated.

4. Tests and reproduction

Test ctest entry What it checks
SteadyTow.RigFilesAreCopiesOfTheOriginals fhsim_fishery the copied rig files
SteadyTow_VALIDATION.SettlesBelowMaxTension (default law), ...SettlesBelowMaxTensionTwineCrossFlow one each, label VALIDATION the run reaches TEnd = 450 s; no warp end tension reaches 99 % of MaxTension; every asserted quantity is stationary between the 100 s windows before TEnd: mean and 5-95 % band edges within 2 % of the mean (§ 1.2)
SteadyTow_VALIDATION.SecondStartIsReported one, label VALIDATION the same for the default law started with the doors 50 m apart; writes the uniqueness report, not asserted (§ 1.2)
SteadyTow_VALIDATION.ComparesWithMeasurements one, label VALIDATION skipped until tests/data/steady_tow_measurements.csv exists (§ 5)

Red and green: with the net's limit back at 10 m/s² the default-law test fails (a warp at its clamp, the loads unsettled); with the committed input it passes. Each run writes tests/out/SteadyTow/<ID>_report.txt (the cycle statistics of the last window, their change from the window before, the largest warp tension, and 10 s means). The figure comes from those reports:

The VALIDATION entries exist only in a tree configured with FH_WITH_VALIDATION=ON (Conan: -c user.fhsim:validation=True); a default ctest, conan build or conan create leaves them out.

conan install . -c user.fhsim:validation=True <options> && cmake --preset conan-release # or -DFH_WITH_VALIDATION=ON
cmake --build --preset conan-release
cd build/no_vis/Release && ctest -L VALIDATION -j 4 --output-on-failure # about 25 min, three runs side by side
ctest -LE VALIDATION # the rest
python3 tests/plot_steady_tow.py doc/images/steady_tow_net_drag.svg \
"4.0 LocalThroughFlow=tests/out/SteadyTow/SteadyTow_report.txt" \
"4.0 TwineCrossFlow=tests/out/SteadyTow/SteadyTow_TwineCrossFlow_report.txt" \
"3.2.1=<report of a 3.2.1 run>"

5. Measurements hook

SteadyTow_VALIDATION.ComparesWithMeasurements is ready for data of the Fiorentini et al. (2004) kind (the programme's TRAWL_MEASUREMENTS.md surveys the candidates). It needs a file tests/data/steady_tow_measurements.csv with:

  • header lines # source:, # kind:, # uncertainty:, # notes:;
  • # input: <test ID>, the steady-tow input under tests/in/SteadyTow that models the measured trawl. The morenot520 is not the trawl of any published data set, so a comparison first needs a net file of the measured trawl;
  • the header row speed_m_s,net_drag_N,door_spread_m,wing_spread_m,headline_height_m,warp_tension_N, then one row per measurement, with nan where a quantity was not measured.

The test runs the input, checks that it is stationary, and writes, for the rows at the input's tow speed, the model's cycle mean with its min, max and 5-95 % band, the measurement, their ratio and whether the measurement lies within the model's min-max range to tests/out/SteadyTow/<ID>_measurements.txt (R101: means with ranges). It asserts no tolerance until the scale effects of the data are understood.

6. Speed sweep

The steady tow at 3.0, 3.5, 4.0 and 4.5 kn (1.543, 1.801, 2.058 and 2.315 m/s) under both 4.0 load laws and under 3.2.1 (owner ruling R40), as information, not pass/fail. The inputs are those of § 3 written by make_steady_tow.py with only TOW_SPEED changed (the 120 s ramp, the start and the rig are the same at every speed); the 4.0 kn inputs are byte-identical to the committed ones. Where a run had not settled at 450 s, it was repeated with TEnd 900 s and nothing else changed. Run on 2026-09-27/28.

Settled here means: every quantity of the table changes by less than 0.5 % between the mean over the last 100 s and the mean over the 100 s before. The table gives the mean over the last 100 s.

Model Speed (kn) Net drag (kN) Warp tension sum (kN) Door spread (m) Wing spread (m) Headline height (m) Largest change TEnd (s)
4.0 LocalThroughFlow 3.0 50.0 (cycle mean 53.2) 117.6 (122.1) 105.6 (108.2) 35.3 (35.1) 6.83 (6.86) 9.7 %, not settled 900
4.0 LocalThroughFlow 3.5 70.3 153.1 115.7 35.4 6.40 0.01 % 450
4.0 LocalThroughFlow 4.0 90.3 184.0 104.4 32.8 6.79 0.12 % 450
4.0 LocalThroughFlow 4.5 112.1 215.8 97.6 31.1 7.01 0.18 % 450
4.0 TwineCrossFlow 3.0 66.5 134.2 105.4 32.1 7.59 0.00 % 900
4.0 TwineCrossFlow 3.5 89.7 169.6 100.0 30.5 7.85 0.17 % 450
4.0 TwineCrossFlow 4.0 114.1 203.2 83.2 26.4 8.79 0.21 % 450
4.0 TwineCrossFlow 4.5 138.9 237.7 89.6 27.5 8.55 0.19 % 450
3.2.1 3.0 77.9 145.6 97.7 29.4 8.47 0.00 % 900
3.2.1 3.5 103.7 182.9 88.0 27.0 8.87 0.40 % 450
3.2.1 4.0 130.7 216.5 74.3 23.2 9.48 0.13 % 450
3.2.1 4.5 152.3 249.8 83.4 25.1 9.31 0.00 % 900

The largest warp end tension of any run is 126 kN (3.2.1, 4.5 kn), far below MaxTension (1000 kN). The 4.0 kn rows reproduce § 1.

Drag exponent. A least-squares fit of log(net drag) = log(c) + n log(U) over the settled runs:

Model n c (kN at 1 m/s) Runs fitted n over 3.5–4.5 kn only Local n (3.0→3.5, 3.5→4.0, 4.0→4.5)
4.0 LocalThroughFlow 1.86 23.6 3.5, 4.0, 4.5 kn 1.86 (1.80 with the cycle mean), 1.88, 1.84
4.0 TwineCrossFlow 1.82 30.5 all four 1.74 1.93, 1.80, 1.67
3.2.1 1.67 38.3 all four 1.54 1.85, 1.74, 1.30

With the 3.0 kn LocalThroughFlow cycle mean (53.2 kN) included, n = 1.84. All three exponents are below 2: the net and the rig change shape with speed (headline height, spreads), so the drag does not scale with U² at a fixed geometry. The door and wing spreads are not monotonic in speed: under TwineCrossFlow and 3.2.1 the 4.0 kn point has the narrowest spread, and the local 3.2.1 exponent between 4.0 and 4.5 kn (1.30) comes with the spread widening again (74 → 83 m). This was not investigated further.

Net drag against tow speed (log-log), with the fitted power laws; the hollow point is the unsettled run (mean over its last 100 s)

6.1 Settling

  • 4.0 LocalThroughFlow at 3.0 kn does not settle; it runs in a limit cycle. Every 229 s (door-spread minima at 425, 654 and 883 s) the warp attachment points of the doors sink from about 189.1 m to the seabed depth, 190.0 m, one door first; the door spread collapses from 116 m to 90 m, the net drag drops to 44 kN and overshoots to 59 kN, and the rig recovers. Over 450–900 s: net drag 44.3–58.7 kN, warp tension sum 108–127 kN, door spread 90–116 m, wing spread 32.0–36.6 m, headline height 6.5–7.6 m. The table's bracketed figures are the mean over one full cycle (425–654 s); a longer run would not change them. At 3.5 kn and faster the doors stay above the seabed (attachment points at 188.1–188.7 m), and under TwineCrossFlow at 3.0 kn at 189.0 m. The cycle is reported, not investigated (it involves the doors' seabed contact).
  • 4.0 TwineCrossFlow and 3.2.1 at 3.0 kn were still converging at 450 s (net drag 1.24 % and 0.61 % between the last two windows); at 900 s every quantity is constant to 0.00 %, at the value the 450 s run was approaching (66.52 and 77.87 kN).
  • 3.2.1 at 4.5 kn changes shape late, at 275–300 s (door spread 100 → 83 m, net drag 125 → 152 kN), so at 450 s its wing spread still differed by 3.2 % from the window before; the 900 s run is constant from 375 s to 900 s.
  • The other seven runs settled by 450 s (largest change 0.40 %).

6.2 Runs and reproduction

  • 4.0: fishery integration build of 5905c95 with fhsim_marine_elements integration 9aca09d (libraries copied to a scratch playpen), the § 3 rig files of 5905c95. The inputs are byte-identical to those this branch's generator writes (checked with cmp). A check run after the MaxAcceleration removal (fishery 3a22c36, fhsim_marine_elements 8d6e628, the rig files of 3a22c36) at 4.0 kn, LocalThroughFlow, gives net drag 90.25 kN, warp tension 183.98 kN, door spread 104.46 m, wing spread 32.81 m, headline height 6.79 m: within 0.1 % of the table.
  • 3.2.1: fishery main ff17183 built with fhsim_marine_elements 3.2.1 from the Conan cache, the same inputs (HydroModel is not set in the default-law input; 3.2.1 has one law), and the rig files of 5905c95 (net MaxAcceleration = "0", warps and bridles 1000 m/s², which 3.2.1 still reads), as § 1.
  • Twelve runs in parallel on 32 cores (0.3 GB each): 25–29 min for a 4.0 run to 450 s, 43–58 min for a 3.2.1 run.

Commands, from this repository's root (<pp40> and <pp321> are copies of the playpen bin folders of the two builds, with the SimObject library symlinks dereferenced):

python3 tests/steady_tow_sweep.py inputs <scratch>/gen # 8 inputs, TEnd 450 s
python3 tests/steady_tow_sweep.py inputs <scratch>/gen900 900 # the same with TEnd 900 s
# one run: <playpen> <input> <run folder>; the 3.2.1 runs take the rig files of 5905c95 instead
run() { mkdir -p "$3" && cd "$3" && ln -sfn "$1/SimObjectLibraries" SimObjectLibraries &&
cp "$(dirname "$2")"/SteadyTow_{Morenot520,Warp,Bridle}.xml . && cp "$2" in.xml &&
"$1/FhSim" -i in.xml -o out.csv -l fhsim.log -c 1 -f 2; cd - > /dev/null; }
for kn in 35 40 45; do
run <pp40> <scratch>/gen/SteadyTow_${kn}kn_in.xml <scratch>/runs/LTF_$kn &
run <pp40> <scratch>/gen/SteadyTow_TwineCrossFlow_${kn}kn_in.xml <scratch>/runs/TCF_$kn &
done
for kn in 35 40; do run <pp321> <scratch>/gen/SteadyTow_${kn}kn_in.xml <scratch>/runs/321_$kn & done
run <pp40> <scratch>/gen900/SteadyTow_30kn_in.xml <scratch>/runs/LTF_30 &
run <pp40> <scratch>/gen900/SteadyTow_TwineCrossFlow_30kn_in.xml <scratch>/runs/TCF_30 &
run <pp321> <scratch>/gen900/SteadyTow_30kn_in.xml <scratch>/runs/321_30 &
run <pp321> <scratch>/gen900/SteadyTow_45kn_in.xml <scratch>/runs/321_45 &
wait
python3 tests/steady_tow_sweep.py report doc/images/steady_tow_speed_sweep.svg \
"4.0 LocalThroughFlow=<scratch>/runs/LTF_{kn}/out.csv" \
"4.0 TwineCrossFlow=<scratch>/runs/TCF_{kn}/out.csv" \
"3.2.1=<scratch>/runs/321_{kn}/out.csv"

The 450 s runs at 3.0 kn (all three models) and of 3.2.1 at 4.5 kn were made first and are superseded by the 900 s runs above; their first 450 s are identical (checked for 148 s of the LocalThroughFlow run). report prints the table rows, the change between the last two 100 s windows (flagged NOT SETTLED at 0.5 % or more) and the fit over the settled runs, and writes the figure; the quantities are those of SteadyTow_Test.cpp (ReadHistory).