FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
Old against new: what changed in the results since October 2025

Plan C1, written 2026-10-19. This page compares the results of the old FhSim set with the new one. It lists which results agree, which moved and why, and which agreeing results are now frozen as tests.

Purpose

A year of changes moved many results. This study asks, for each case: did the result move, and was that on purpose?

  • Every move must be linked to an issue (a deliberate change) or ruled by the owner.
  • Where the owner rules "should still agree", the old result becomes a reference test in the new version.
  • The study changes no physics. A defect found here is filed as an issue and fixed in its own feature.
  • The old version is not a reference for seafloor forces. They were only tuned to look right. The new seafloor law is checked against sanity criteria instead.

Versions

Old (tags of 2025-10-26/27) New
fhsim v2.10.0 main of 2026-10-19 (3.3.6)
fhsim_marine_elements v1.5.0 3.0.11
fhsim_base v2.9.0 main
fhsim_environment v1.4.0 3.2.9 and later
fhsim_fishery v1.4.0 main
fhsim_coribo v2.7.0 main

The old set was built on its own Conan channel (@sintef/old_2510). The inputs of the two versions are written by hand, one pair per case. The input format changed in ME 3.0.0 (see doc/user/migration_3_0.md), so there is no converter. Each pair has a "same physics" note that says what every parameter means in the old and the new version.

Method

Steady values. Time series shift in time even when the physics agrees. So each case compares one number: the mean over the last 20 % of the run. The sphere speed and the sheet shape use the final value. Every run was steady at the end.

Tolerances (owner ruling 2026-10-19):

  • 6 % relative on forces.
  • 5 % of the case's characteristic length on shape. The shape difference is the largest distance between two corresponding nodes. The length is the cable length or the net depth.
  • The sphere speed carries 3 %, because 6 % on the force K U^2 is 3 % on the speed.

Classification of each measure:

  • agrees: inside the tolerance.
  • explained: outside, and an issue explains it.
  • unexplained: outside, and no issue explains it. The study found none.

Pairing of the net inputs. A net has a solidity Sn that sets its drag. The old code hard-codes Sn = 1.1 t / (L0 sin(phi) cos(phi)). The new code has KnotFactor K, and its default is K = 1, which gives an Sn 1/1.1 times smaller. An old input is paired with the new default K = 1 (the study's default choice, 2026-10-19; not yet reviewed by the owner). This is the "k1" variant, and it is what an unchanged old input gets. Two other new-side variants were run for information:

  • def: the default law LocalThroughFlow with K = 1.1 (same Sn as old).
  • tcf: HydroModel="TwineCrossFlow" with K = 1.1. This is the setting that the migration note gives to stay close to the old model.

Nets are held on springs. The held nodes sit on springs (k = 1e4 N/m) to fixed anchors. The load is k times the node displacement, from the logged positions. The old spring port is stale between integrator stages (old fhsim_base CLinearSpring.cpp:44), so its logged force is not used.

Study files (inputs, old results, harness, tables, plots) are in the workspace, studies/old-vs-new/. Only the frozen tests live here.

Results by case group

"Frozen" means a reference test in this library (see below). Differences are the worst point of the sweep.

Cables and bodies

Case What Old New Difference Class Frozen
ME cable normal force, 15 to 90 deg Cable/LumpedMass, 1 m, 0.5 m/s 15.375 N/m at 90 deg the same 0.00 % agrees yes
ME cable tangential force, 0 to 75 deg same 1.2076 N/m at 0 deg the same 0.00 % agrees yes
ME cable, Re 1e3 to 1e5 same, cross flow 62.12 N/m at Re 1e5 the same 0.00 % agrees yes
RbCable normal force, angle and Re sweeps RbCable/Cable, 10 m 0.9778 N/m at 15 deg 0.9349 4.4 % agrees (ENV-0104) yes
RbCable tangential force same 13.6 N/m at 15 deg 0.18 98.7 % explained: MARE-0217, ENV-0104 no
base Cable normal force fhsim_base 0.9765 N/m at 15 deg 0.9343 4.3 % agrees (ENV-0104) no (base)
base Cable tangential force same 4.58 N/m at 75 deg 0.0137 99.7 % explained: BASE-0060, BASE-0076, ENV-0104 no
Cable with clump, top tension 20 m, 1 m/s 2370 N 1422 N 40 % explained: MARE-0082 no
same, old density set so wet weights match weight-compensated pair 1422.21 N 1422.21 N 0.00 % agrees yes (top tension)
base Cable with clump 20 m, 1 m/s 1486 N 1424 N 4.2 % agrees no (base)
Sphere terminal speed pulled by F = K U^2, still water 0.25 to 2 m/s the same 0.00 % agrees yes
Sphere on a tether in current 0.25 to 2 m/s about 0 N 1.9 to 121 N - explained: MARE-0084 no
Floater on a rope, line tension buoyancy 462 N 461.9 N 461.9 to 463.0 N 0.23 % agrees yes
Floater on a rope, horizontal force same 3.8 to 61 N 5.7 to 90 N 49 % explained: MARE-0084 no
Disk face-on, in current and towed Net/Disk no drag full drag - explained: MARE-0098 no
Trawl door with warp, warp tension fhsim_fishery 101 kN 92 kN 9.0 % explained: MARE-0082, FISH-0082 no
same, old line density compensated weight-compensated pair 92.0 kN 92.0 kN 0.00 % agrees no (fishery)

Nets

All new values are for the k1 variant unless the table says otherwise. The panel is the MF2022 N19a netting (1.215 x 0.985 m, t 0.7 mm). The angle is measured from the panel normal (0 deg is face-on).

Case Old New Difference Class Frozen
L0 panel, drag at 0 deg, k1, 0.25 to 1.75 m/s 10.9 to 404 N 11.1 to 405 N 0.15 to 1.8 % agrees yes
L0 panel, lift at 15 to 75 deg, k1, 0.5 m/s 3.4 to 8.2 N 3.2 to 7.9 N 0.3 to 5.1 % agrees yes
L0 panel, drag at 0 deg, tcf, 0.25 to 1.75 m/s 10.9 to 404 N 10.9 to 402 N 0.3 to 1.0 % agrees yes
L0 panel, drag at 45 deg, k1 27.6 N at 0.5 m/s 25.5 N 8 to 10 % explained: MARE-0094, MARE-0110, MARE-0111, MARE-0131 no
L0 panel, drag at 60, 75, 90 deg, k1 21.7, 17.8, 16.4 N 16.7, 8.3, 0.35 N 23, 53, 98 % explained: same issues no
L0 panel, drag at 0 deg, def (K 1.1) 41.0 N at 0.5 m/s 46.4 N +13 % explained: MARE-0094 no
L0 panel, drag at 45 and 90 deg, tcf 27.6 and 16.4 N 24.9 and 11.9 N 10 and 27.5 % explained: MARE-0094, MARE-0085 no
L0 panel, lift, tcf 3.4 to 8.2 N - +13 to +17 % explained: MARE-0094, MARE-0085 no
L1 sheet (2 x 4 m), shape, def - - 1.5 % and 1.4 % of 4 m agrees yes
L1 sheet, shape, tcf - - 1.7 % and 3.5 % agrees no (def only)
L1 sheet, top-line drag, def 59.7 N at 0.25 m/s, 175 N at 0.5 m/s 63.1 N, 150 N +5.7 %, -14.6 % agrees at 0.25, explained at 0.5 m/s: MARE-0111, MARE-0094, MARE-0110 no
L2 cage (D 10 m, 5 m deep), mooring drag 1307 N and 3800 N 957 N and 2749 N -27 % explained: MARE-0111, MARE-0094, MARE-0131 no
L2 cage, shape - - 34 to 36 % of 5 m explained: same issues no
L2 Lader (2009) cage, drag 60.5 N and 151 N 51.4 N and 128 N -15 % explained: same issues no

Comparison with experiments

MF2022, panel N19a, drag at 0 deg (experiment scaled by 1025/998 to the density of the simulation):

Speed Experiment Old New, k1 New, def (K 1.1)
0.5 m/s 38.0 N 41.0 N 41.6 N 46.4 N
1.0 m/s 146.9 N 144.9 N 146.2 N 163.0 N
1.75 m/s 427.3 N 404.3 N 404.9 N 451.8 N

The old and the new default (K = 1) agree with each other and with the experiment to 10 % or better. With the same Sn as old (K = 1.1), the new default law is 13 % above old at 0 deg and further from the experiment than old. At 45 deg and 1.75 m/s, the experiment gives a lift of 104.8 N. Old gives 78.7 N and the new default law 88.2 N, so the lift moved toward the experiment.

Lader (2009), cage with Sn 0.19, no wake in either version:

Speed Experiment Old New, def New, tcf
0.26 m/s 36 N 60.5 N 51.4 N 52.8 N
0.50 m/s 108 N 151.1 N 127.7 N 121.9 N

Old and new both over-predict. New is closer. This pair does not include the wake and uses Sn 0.209 (K 1.1) against the experiment's 0.19. The validation test with its wake and Sn 0.19 gives 39.7 N and 99.4 N (Validation: Lader 2009 cages (S3, S4)).

Seafloor

The old version is not a reference here. The new seabed law of fhsim_environment (default soil and constants) is checked against five sanity criteria. The tests are SeabedSanity_VALIDATION in fhsim_environment (tests/SeabedContact_Sanity_Test.cpp).

Criterion Result Issue
A resting body: contact force equals the submerged weight pass -
Slow drag: friction force over normal force equals the friction coefficient mu = 0.2 fail: the ratio is 0.31 to 0.35 (adhesion and the passive face add to mu) ENV-0117
Static penetration below 1 % of the diameter fail for spheres: 4 to 6 % of the diameter. Cylinders pass (0.2 to 0.5 %) ENV-0118
Penetration nearly independent of the time step pass -
No energy gain: a dropped weight never bounces above its release height pass -
Weak dependence on the element length pass -

Both failures are known limitations. They wait for an owner ruling on the physics (is a ratio above mu intended, and is 4 to 6 % acceptable for a sphere).

Main findings

  1. No unexplained move. Every out-of-tolerance result is linked to an issue.
  2. ME cable drag is unchanged. The Cable/LumpedMass normal and tangential drag, and the drag of a hanging cable in a current, agree to six digits.
  3. In-plane net load. At 90 deg to the panel normal, the default law gives almost no load (0.35 N, 98 % below old). Old gave about 40 % of the face-on load. The new default law keeps twine friction only (MARE-0111, MARE-0131). In cages and sheets, this takes tension out of the bottom and sides. New cage bottoms sag and the mooring drag falls by about 27 %.
  4. Tangential cable drag is about 99 % lower. The old code used the normal drag coefficient along the axis. The new code uses skin friction (BASE-0060, BASE-0076 for fhsim_base, MARE-0217 for RbCable).
  5. Cable weight was doubled in old. The old ME cable gave each end node the whole element weight (MARE-0082). With the density set so that the wet weights match, old and new agree to 0.00 %.
  6. The old Sphere ignored the current (MARE-0084). A sphere on a tether or a floater now feels drag. Floater tension is unchanged, its horizontal force is 49 % higher.
  7. Disk drag at normal incidence was zero in old (the normal drag was scaled by the tangential speed, MARE-0098). It is now the full flat-disk drag.
  8. Lift moved toward the experiment (MARE-0110): +10 to +15 % in the default law.
  9. A defect in old code. The old Cable/LinearSpring returned a stale force between integrator stages. It is gone in the new version.
  10. Seafloor. The new law passes three of five criteria. Two failures are filed (ENV-0117, ENV-0118).

Gaps

  • **CHydroCylinder (fhsim_base, BASE-0063) is not covered.** No SimObject holds a rigid cylinder. It sits only inside the free 6-DOF anchors, which tumble, so no clean measure exists. The new side is covered by the RigidBodyHydro.HydroCylinder_* unit tests only.
  • Disk at 45 and 90 deg is not covered. There is no steady setup. A disk towed by a fixed force slides edge-on and runs to the surface. A disk on a tether swings and does not settle. Only the face-on disk (0 deg) is compared.
  • The fishery door case is not frozen. It is a fhsim_fishery case and its owner must freeze it there. In the study, the weight-compensated pair agrees to six digits.
  • Base Cable and RbCable at Re below 1e3 were not swept.
  • Not paired: the old example examples/input/NetStructure.xml (a trawl with zero node forces). It has no steady load to compare.

Frozen tests

Suite OldVsNew_VALIDATION in tests/OldVsNew_Validation_Test.cpp: 11 tests, 54 checks. The tests run only in the validation entry (fhsim_marine_elements_validation, labels validation;slow; run it with ctest -L validation or the test tier all). The default entry skips them. Each failure message gives the old value, the new value and the relative difference.

Test Checks Reference file (tests/data/)
Cable_MeNormalForce_AngleSweep 6 fhsim2510_cable_normal_force.csv
Cable_MeNormalForce_ReynoldsSweep 5 same
Cable_RbNormalForce_AngleSweep 6 same
Cable_RbNormalForce_ReynoldsSweep 5 same
Cable_MeTangentialForce_AngleSweep 7 fhsim2510_cable_tangential_force.csv
Clump_MeTopTension 3 fhsim2510_clump_top_tension.csv
Floater_LineTension 3 fhsim2510_floater_line_tension.csv
Sphere_TerminalSpeed 4 fhsim2510_sphere_terminal_speed.csv
NetPanel_DragFaceOn (k1 and tcf) 8 fhsim2510_net_panel_drag.csv
NetPanel_LiftK1 5 fhsim2510_net_panel_lift.csv
NetSheet_Shape 2 fhsim2510_net_sheet_shape.csv
  • The reference files follow contract C6. Each has a # header with the old tags, the old input file, the reduce and the date.
  • The inputs are in tests/in/OldVsNew/. They are the study's new-format inputs with two changes, because ME tests do not link fhsim_base. The springs on the net nodes are Test/NodeTow (same force, no damping). The clump of cab_me_clump_wcomp is a Net/Sphere of 50 kg and 1 mm diameter (weight 490.5 N, no drag) in place of Body/Mass. The steady values are the same as in the study's runs.
  • Run times were not shortened. The suite takes about one minute in Release.
  • If a test fails after a deliberate change, do not loosen the tolerance. Link the move to an issue and ask the owner to rule: new baseline or defect.
  • To rerun the study: python3 harness/run.py --skip-run in studies/old-vs-new/ (workspace).