|
FhSim
3.1.0
Marine systems simulation
|
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.
A year of changes moved many results. This study asks, for each case: did the result move, and was that on purpose?
| 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.
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):
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.
"Frozen" means a reference test in this library (see below). Differences are the worst point of the sweep.
| 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) |
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 |
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)).
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).
Cable/LumpedMass normal and tangential drag, and the drag of a hanging cable in a current, agree to six digits.Cable/LinearSpring returned a stale force between integrator stages. It is gone in the new version.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.Cable and RbCable at Re below 1e3 were not swept.examples/input/NetStructure.xml (a trawl with zero node forces). It has no steady load to compare.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 |
# header with the old tags, the old input file, the reduce and the date.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.python3 harness/run.py --skip-run in studies/old-vs-new/ (workspace).