FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
Review issues — fhsim_marine_elements

Findings from code review that await an owner decision or an implementation. Each issue is one file in issues/details/, which holds the evidence, the effect, the possible fix, the test that would prove it and the risk. Resolved issues are kept in issues/resolved/ so that their numbers are never reused. Issues that concern a SimObject are also shown on that model's documentation page. Audit notes that are not issues are in issues/notes.md.

How to work an item

  1. Reproduce the Evidence at the file:line given in the detail file, at HEAD.
  2. For a blocked item, get the owner's answer to "Decision needed" first, then set Status to ready.
  3. Write the proving test, apply the fix, check the Risk paragraph.
  4. git mv the file to issues/resolved/, add a **Resolved:** <commit>, <date> paragraph after the table, delete the matching \xrefitem reviewissue "Review issues" "Review issues" \ref fhsim_marine_elements_issue_<ID> lines from the headers, rerun the script and commit it all together.

New issue: --new <slug> "<title>", or add issues/details/<slug>.md with the metadata table but no ID row; the script assigns the next free number, writes the heading and renames the file to <TAG>-<ID>-<slug>.md.

Legend

  • Class
    • BUG code does something other than its documentation or sibling code says
    • KNOWN-LIMITATION behaviour gap by design or omission, document rather than fix silently
    • ARCHITECTURE structure, dependencies, build layout, dead code and stale artefacts
    • DOCUMENTATION missing or wrong documentation or example
    • TEST test coverage or infrastructure
    • API public name (port, state, parameter, registration string) whose change breaks input files
    • SECURITY credentials and supply chain
  • Severity
    • 3 wrong numbers, a crash or a secret exposure reaches a user
    • 2 a documented interface does not work as documented
    • 1 tidiness, readers and tools only
  • Status
    • blocked needs the owner decision named in the file
    • ready fully specified

Open issues (3)

ID Class Severity Status
MARE-0429 BUG 2 ready
MARE-0428 TEST 1 ready
MARE-0430 ARCHITECTURE 1 ready
  • MARE-0429 — Cable/RigidBarCable ports return the buffers of the last OdeFcn, not the values at the state they are read at. Models: Cable/RigidBarCable
  • MARE-0428 — The library builds with 211 warnings under -Wall -Wextra
  • MARE-0430 — Remaining stdout diagnostics of the net force kernel and the net spec

Resolved issues (323)

  • MARE-0001 (BUG) — RbCable/Collision is registered only in a commented-out line. Resolved: feature/fix_issues, 2026-10-21. File: resolved/MARE-0001-rbcable-collision-registration-commented-out.md
  • MARE-0002 (API) — RbCable/Cable maps to class CCableRM, which kept its C prefix. Resolved: 9f8db23, 2026-09-16. File: resolved/MARE-0002-rbcable-cable-class-ccablerm-prefix.md
  • MARE-0003 (BUG) — TrawlCable's Heun_i branch is commented out while RundDorg's is live. Resolved: 5ad9efe and 19b1b0c, 2026-10-13 (feature mare-owner-rulings). Owner ruling 2026-10-13: the intended step is 0.001 s, the full integrator step, for TrawlCable and for RundDorg (as RundDorg already did); enable TrawlCable's Heun_i branch consistently, with a regression baseline. Both objects now use one rule, trawl_mooring::TakesSymplecticStep (src/trawl_mooring_interaction/SymplecticStep.h): under Euler_i and Heun_i the constraint solver's symplectic step is the integrator step, under any other integrator it keeps the solver's default 0. RundDorg is unchanged in behaviour; TrawlCable changes under Heun_i only (it took no symplectic step there). Tests: TrawlMooring.SymplecticStepUnderEulerAndHeun and the new baseline SimObject.TrawlCable_HeunRegression (the TrawlCable fixture under Heun_i, 1 ms, one solver thread, 1 s; with the former rule it fails, BottomBridleEndForce_0 RMS 2.0e2 N against 1e-8). Justification of the baseline: the ruling changes exactly these results and no test ran TrawlCable under Heun_i; it is not a physical reference. No existing baseline moved. NetStructureTest (Windows only) keeps its half step: the ruling does not cover it.. File: resolved/MARE-0003-trawlcable-heun-branch-commented-out.md
  • MARE-0004 (KNOWN-LIMITATION) — The panel block of the NetStructure Jacobian is itself a forward difference. Resolved: 2ae2738, 2026-09-22. File: resolved/MARE-0004-netstructure-panel-jacobian-forward-difference.md
  • MARE-0005 (DOCUMENTATION) — Three registered classes have no documentation page. Resolved: a1e7260, c77dfe5, 2026-09-25. File: resolved/MARE-0005-three-classes-without-documentation-page.md
  • MARE-0006 (BUG) — Cable/LumpedMass reads NumElements, but the documentation and an example say numElements. Resolved: d374a00, 2026-09-15. File: resolved/MARE-0006-cable-lumpedmass-reads-numelements.md
  • MARE-0007 (DOCUMENTATION) — Cable/LumpedMass documents an input port velWater that does not exist. Resolved: d374a00, 2026-09-15. File: resolved/MARE-0007-cable-lumpedmass-documents-an-input-port.md
  • MARE-0008 (ARCHITECTURE) — src/cable/Cable.h carries two complete, divergent documentation blocks. Resolved: d374a00, 2026-09-15. File: resolved/MARE-0008-src-cable-cable-h-carries-two.md
  • MARE-0009 (DOCUMENTATION) — Net/Disk documents an output port ForceB where the code registers Velocity. Resolved: 4a78912, 2026-09-15. File: resolved/MARE-0009-net-disk-documents-an-output-port.md
  • MARE-0010 (KNOWN-LIMITATION) — RbCable/RBCable has no force output for end A, and the RbCable group's force-port case is unsettled. Resolved: 78fa902, 2026-09-30. File: resolved/MARE-0010-rbcable-force-ports-end-a-and-case.md
  • MARE-0011 (DOCUMENTATION) — Initial-condition state indices are documented as 1…N but generated 0-based. Resolved: 6cf95d6, 2026-09-15. File: resolved/MARE-0011-initial-condition-state-indices-are-documented.md
  • MARE-0012 (BUG) — Cable/Branched registers its Length<i> output port with width 3 over a scalar. Resolved: 3c30a67, 2026-09-15. File: resolved/MARE-0012-cable-branched-registers-its-length.md
  • MARE-0013 (DOCUMENTATION) — Several Cable/Branched documented names and widths do not match the code. Resolved: 3c30a67, 2026-09-15. File: resolved/MARE-0013-several-cable-branched-documented-names.md
  • MARE-0014 (BUG) — Cable/RigidBarCable binds both ForceB\<i\>a and ForceB\<i\>b to the same slot, and reads neither. Resolved: db0563a, 2026-09-30. File: resolved/MARE-0014-rigidbarcable-forceb-ports-same-slot.md
  • MARE-0015 (DOCUMENTATION) — Cable/RigidBarCable documents PosR/VelR as 1-based and misspells its own parameter. Resolved: e14a2bb, 2026-09-15. File: resolved/MARE-0015-cable-rigidbarcable-documents-posr-velr.md
  • MARE-0016 (BUG) — RbCable/Ring computes a modulus by NumConnectors before checking it is non-zero. Resolved: a7f8874, 2026-09-15. File: resolved/MARE-0016-rbcable-ring-computes-a-modulus.md
  • MARE-0017 (ARCHITECTURE) — RbCable/Ring reads NumInputsPerConnector and Cm_IsAddedMassHack without using or documenting them. Resolved: a2c7d11, 2026-09-30. File: resolved/MARE-0017-ring-unused-parameters.md
  • MARE-0018 (ARCHITECTURE) — The OpenCL sources are never compiled. Resolved: 8a40f10, 2026-09-27. File: resolved/MARE-0018-opencl-sources-never-compiled.md
  • MARE-0019 (ARCHITECTURE) — src/net/Test/NetSolidityMeshSpec.cpp and its header are in no source list. Resolved: 2ecd78b, 2026-09-30. File: resolved/MARE-0019-netsoliditymeshspec-in-no-source-list.md
  • MARE-0020 (DOCUMENTATION) — The trawl/mooring SimObjects and Net/NetStructureWithConstraints have no port or parameter documentation. Resolved: cb81dc7, 5340c40, 2026-09-25. File: resolved/MARE-0020-trawl-mooring-simobjects-undocumented-ports.md
  • MARE-0021 (ARCHITECTURE) — Three dead if (false /* v3: IntegratorEngine check removed */) blocks. Resolved: 9f8db23, 2026-09-16. File: resolved/MARE-0021-dead-integratorengine-if-false-blocks.md
  • MARE-0022 (DOCUMENTATION) — The NetStructure family documentation tables are ??? placeholders. Resolved: 24f9aa9, aad9c4f, 2026-09-25. File: resolved/MARE-0022-netstructure-documentation-tables-placeholders.md
  • MARE-0023 (API) — BouyancyFactor is misspelled, and the misspelling is load-bearing. Resolved: 9f8db23, 2026-09-16. File: resolved/MARE-0023-bouyancyfactor-misspelling-load-bearing.md
  • MARE-0024 (ARCHITECTURE) — Dead sources and dead references in the tree. Resolved: 9f8db23, 2026-09-16. File: resolved/MARE-0024-dead-sources-and-references.md
  • MARE-0025 (BUG) — RbCable/Cable documents the RBCABLE_CLASSIC_INTERFACE branch, but no build defines that macro. Resolved: bf7cce6, 2026-09-30. File: resolved/MARE-0025-rbcable-cable-classic-interface-macro-undefined.md
  • MARE-0026 (ARCHITECTURE) — NetElement3N force path is hard-typed on double, blocking algorithmic differentiation of the panel Jacobian. Resolved: 2ae2738, 2026-09-22. File: resolved/MARE-0026-netelement3n-force-path-not-scalar-templated.md
  • MARE-0027 (ARCHITECTURE) — Three follow-ups left by the scalar-templated panel force core. Resolved: branch feature/wake-docs (removal of NetStructureWakeEffect), 2026-10-12. (b), the last open item, is done: NetElement3NWakeEffect and its copy of the force arithmetic are deleted (owner ruling 2026-10-12, MARE-0117). File: resolved/MARE-0027-panel-force-core-followups.md
  • MARE-0028 (TEST) — The whole RbCable family (RMCable, RBCable, Cable6Dof, CableRM, Ring) has zero automated test coverage. Resolved: bf7cce6, 2026-09-30. File: resolved/MARE-0028-rbcable-family-zero-test-coverage.md
  • MARE-0029 (TEST) — MooringCable, TrawlCable, RundDorg and RigidBarCable have zero automated test coverage despite example scenarios. Resolved: dd57457, 2026-09-25. File: resolved/MARE-0029-trawl-mooring-rigidbarcable-zero-test-coverage.md
  • MARE-0030 (TEST) — NetStructureArray, NetStructureWakeEffect and NetStructureWithConstraints inherit none of NetStructure's Jacobian work and have no tests. Resolved: 875b0a7, 2026-09-25. File: resolved/MARE-0030-netstructure-siblings-no-jacobian-no-test.md
  • MARE-0031 (TEST) — The Windows-only NetStructureTest family (NetStructureTest, NetStructureABAQUS, NetStructureConstrained) has no test coverage. Resolved: feature/fix_issues, 2026-10-21. File: resolved/MARE-0031-win32-netstructuretest-family-untested.md
  • MARE-0032 (TEST) — NetStructure has no behavioural regression test. Resolved: 4d707ed, 2026-09-25. File: resolved/MARE-0032-netstructure-port-jacobian-and-behaviour-untested.md
  • MARE-0033 (TEST) — Cable/Branched has Jacobian tests only, no behavioural baseline. Resolved: 397b6f0, 2026-09-30. File: resolved/MARE-0033-jacobian-only-tests-lack-behaviour-coverage.md
  • MARE-0034 (DOCUMENTATION) — The Cable and Disk Jacobian tests' relTol comments overstate what each analytic Jacobian omits. Resolved: 295183c, 2026-09-24. File: resolved/MARE-0034-stale-jacobian-test-tolerance-comments.md
  • MARE-0035 (DOCUMENTATION) — Root JACOBIAN_ANALYSIS.md describes a Disk Jacobian bug that current Disk.cpp has already fixed. Resolved: refuted, 2026-09-24. File: resolved/MARE-0035-jacobian-analysis-md-stale-disk-doc.md
  • MARE-0036 (BUG) — The InternalCable structural-damping Jacobian ignores the compression-speed clamp, so it is wrong wherever that clamp is active. Resolved: 66ded69, 2026-09-30. File: resolved/MARE-0036-cable-jacobian-omits-compression-speed-clamp.md
  • MARE-0037 (TEST) — Until an output port runs CalcOutput, a CableBranched element keeps its default relaxed length, so the fixture's IC and shifted-offset Jacobian checks see a slack cable. Resolved: a4a308f, 2026-09-30. File: resolved/MARE-0037-cablebranched-fixture-checks-a-slack-cable.md
  • MARE-0038 (BUG) — NetStructure::InputPortJacobian indexes its local buffer with the global state offset. Resolved: fdea835, 2026-09-24. File: resolved/MARE-0038-netstructure-inputportjacobian-global-row.md
  • MARE-0039 (BUG) — RbCable/Ring's destructor frees an uninitialised visualisation pointer when visualisation was never initialised. Resolved: af4a3d4, 2026-09-24. File: resolved/MARE-0039-ring-destructor-frees-uninitialised-pointer.md
  • MARE-0040 (BUG) — Cable/RigidBarCable's destructor deletes an uninitialised visualisation pointer when visualisation was never initialised. Resolved: af4a3d4, 2026-09-24. File: resolved/MARE-0040-rigidbarcable-destructor-deletes-uninitialised-pointer.md
  • MARE-0041 (DOCUMENTATION) — Net/NetStructureArray and Net/NetStructureWakeEffect document output ports they do not register. Resolved: cf73623, 2026-09-24. File: resolved/MARE-0041-netstructure-array-wake-document-unregistered-ports.md
  • MARE-0042 (BUG) — TrawlCable, MooringCable and RundDorg delete visualisation pointers that only RenderInit assigns. Resolved: dd57457, 2026-09-25. File: resolved/MARE-0042-trawl-mooring-destructors-delete-uninitialised-vis-pointers.md
  • MARE-0043 (BUG) — MooringCable segfaults with NumElements="10". Resolved: b8ac4d8, 2026-09-30. File: resolved/MARE-0043-mooringcable-ten-elements-segfaults.md
  • MARE-0044 (BUG) — RundDorg leaves its weight type unassigned for an unrecognised WeightType. Resolved: a64d381, 2026-09-25. File: resolved/MARE-0044-runddorg-unknown-weighttype-left-unassigned.md
  • MARE-0045 (BUG) — TrawlCable's NumCpuCore default always gives the full hardware thread pool, and RundDorg has no thread setting. Resolved: 1e6148b, 2026-09-25. File: resolved/MARE-0045-trawlcable-numcpucore-default-inverted.md
  • MARE-0046 (BUG) — TrawlCable crashes when ClumpWeightMass is left at its default 0. Resolved: b3a9549, 2026-09-25. File: resolved/MARE-0046-trawlcable-zero-clump-weight-mass-crashes.md
  • MARE-0047 (BUG) — RMCable leaves the end point's acceleration term out of its constraint acceleration, so the last link drifts. Resolved: 1b7d06a, 2026-09-25. File: resolved/MARE-0047-rmcable-constraint-acceleration-drops-rdotdot.md
  • MARE-0048 (BUG) — TrawlCable's bottom bridle and RundDorg's Line2 take stiffness inputs from the top bridle and Line1. Resolved: a2e6378, 2026-09-25. File: resolved/MARE-0048-trawlcable-runddorg-second-bridle-uses-first-bridle-values.md
  • MARE-0049 (BUG) — MooringCable's bottom chain uses the mid-rope diameter as its contact radius. Resolved: 773f715, 2026-09-25. File: resolved/MARE-0049-mooringcable-bottom-chain-contact-radius-mid-rope.md
  • MARE-0050 (BUG) — MooringCable's buoy attachment: offset index, undefined behaviour outside the mid rope, fixed properties and a unit error in its inertia. Resolved: b1baf09, 2026-09-25. File: resolved/MARE-0050-mooringcable-buoy-connection-index-and-inertia.md
  • MARE-0051 (BUG) — MooringCable's top and bottom chains default to different second-moment formulas. Resolved: 0510a5e, 2026-09-25. File: resolved/MARE-0051-mooringcable-top-chain-second-moment-inconsistent.md
  • MARE-0052 (API) — RundDorg's force output ports are width 1 and give only the magnitude of the force. Resolved: 0273425, 2026-09-25. File: resolved/MARE-0052-runddorg-force-ports-expose-norm-only.md
  • MARE-0053 (DOCUMENTATION) — The MooringCable fixture and the trawl_mooring_interaction example set parameters that are never read. Resolved: 1d1fac5, 2026-09-25. File: resolved/MARE-0053-trawl-mooring-inputs-set-unread-parameters.md
  • MARE-0054 (BUG) — TrawlBeam projects the trawl force with the wrong rotation, so its east component has the wrong sign. Resolved: af9b01b, 2026-09-25. File: resolved/MARE-0054-trawlbeam-trawl-force-projection-sign.md
  • MARE-0055 (BUG) — TrawlBeam's StartTravel also seeds the controller states, and SaturationForce limits only from above. Resolved: 5f935b3, 2026-09-25. File: resolved/MARE-0055-trawlbeam-starttravel-and-saturation-limits.md
  • MARE-0056 (BUG) — NetStructureWithConstraints does not validate its inputs: default constraint parameters give NaN, and its node and panel lists are indexed unchecked. Resolved: cbcf2da, 2026-09-25. File: resolved/MARE-0056-nswc-inputs-unvalidated.md
  • MARE-0057 (BUG) — NetStructure and NetStructureWithConstraints add the net panels' wet mass in kg as a vertical force in N. Resolved: d927d41, 2026-09-25. File: resolved/MARE-0057-net-panel-weight-missing-gravity.md
  • MARE-0058 (BUG) — Net cable elements put sphere and disk mass, weight and drag on the opposite end from where they are drawn. Resolved: bafe44c, 2026-09-25. File: resolved/MARE-0058-net-cable-appendage-end-weighting.md
  • MARE-0059 (BUG) — NetStructureWithConstraints::AddCableForces runs an OpenMP loop with shared temporaries and unsynchronised force sums. Resolved: e5d993d, 2026-09-25. File: resolved/MARE-0059-nswc-addcableforces-openmp-race.md
  • MARE-0060 (BUG) — NetStructureWithConstraints uses πd⁴/4 for the coupling second area moment, and hard-codes the solver frequency at 100. Resolved: 47c3541, 2026-09-25. File: resolved/MARE-0060-nswc-coupling-second-moment-and-solver-frequency.md
  • MARE-0061 (BUG) — TrawlCable computes the clump weight's rotational inertia from the trawl-door dimensions. Resolved: 3c46ef7, 2026-09-25. File: resolved/MARE-0061-trawlcable-clump-weight-inertia-from-door.md
  • MARE-0062 (BUG) — TrawlCable's collision manager never tests trawl bodies added to the solver after the last MooringCable. Resolved: 2ef9cbf, 2026-09-25. File: resolved/MARE-0062-trawl-collision-skips-gear-after-mooring.md
  • MARE-0063 (BUG) — The trawl/mooring environment forces apply gravity and buoyancy only when the element moves relative to the water. Resolved: e125f14, 2026-09-25. File: resolved/MARE-0063-trawl-environment-gravity-only-when-moving.md
  • MARE-0064 (BUG) — The BottomContact output of the NetStructure family is always zero. Resolved: dd55ffe, 2026-09-30. File: resolved/MARE-0064-net-bottomcontact-port-always-zero.md
  • MARE-0065 (DOCUMENTATION) — Net definition files set General attributes that the Net/NetStructure reader never reads. Resolved: eddfba2, 2026-09-25. File: resolved/MARE-0065-net-files-set-unread-general-attributes.md
  • MARE-0066 (BUG) — MaxAcceleration limits the acceleration magnitude in NetStructure but each component in its siblings, and NetStructure's limit is not reached. Resolved: 8d89e6f, 2026-09-25. File: resolved/MARE-0066-net-maxacceleration-limit-inconsistent.md
  • MARE-0067 (BUG) — Net force and count output ports return overlapping slices or uninitialised memory. Resolved: 36799dd, 2026-09-25. File: resolved/MARE-0067-net-output-ports-overlapping-or-uninitialised.md
  • MARE-0068 (BUG) — NetStructureWakeEffect ignores its external force inputs and the seafloor, yet requires a SeafloorForces resource. Resolved: 2dab64f, 2026-09-25. File: resolved/MARE-0068-net-wakeeffect-ignores-external-and-bottom-forces.md
  • MARE-0069 (BUG) — NetStructureABAQUS opens the input directory instead of the file and indexes the parsed tokens and parts unchecked (Windows only). Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0069-netstructureabaqus-input-reading-defects.md
  • MARE-0070 (BUG) — NetStructureArray sets every node's initial position and velocity to zero. Resolved: 2b47125, 2026-09-25. File: resolved/MARE-0070-netstructurearray-initial-conditions-zeroed.md
  • MARE-0071 (BUG) — NetStructureTest uses a negative hydrodynamic diameter, a fixed current and a one-ended sphere force (Windows only). Resolved: 5b4e2be, 2026-09-25. File: resolved/MARE-0071-netstructuretest-drag-current-and-sphere-defects.md
  • MARE-0072 (BUG) — NetStructureWakeEffect hard-codes UseTagForExternalNodes to true. Resolved: 7252bd5, 2026-09-25. File: resolved/MARE-0072-netstructurewakeeffect-usetagforexternalnodes-hard-coded.md
  • MARE-0073 (BUG) — Net cable elements compute the disk drag coefficients with integer divisions, so disk drag is always zero. Resolved: 7c52a04, 2026-09-25. File: resolved/MARE-0073-net-cable-disk-drag-zeroed-by-integer-division.md
  • MARE-0074 (DOCUMENTATION) — The net cable disk drag model uses a friction coefficient on the edge area and an unusual cable correction. Resolved: 5ae9e52, 2026-09-25. File: resolved/MARE-0074-net-cable-disk-drag-model-unclear.md
  • MARE-0075 (KNOWN-LIMITATION) — TrawlCable, MooringCable and RundDorg results are not reproducible between runs (constraint-solver thread pool). Resolved: a93fe9c, 2026-09-25. File: resolved/MARE-0075-trawl-mooring-results-not-reproducible.md
  • MARE-0076 (BUG) — TrawlCableJointConstraint reads its thread-manager pointer and group ID uninitialised. Resolved: 1a98cfb, 2026-09-25. File: resolved/MARE-0076-trawlcablejointconstraint-thread-manager-uninitialised.md
  • MARE-0077 (BUG) — NetStructure keeps its analytical InputPortJacobian when MassFactor or MaxAcceleration turns its state Jacobian off, and that port Jacobian leaves both out. Resolved: fd0f1f1, 2026-09-25. File: resolved/MARE-0077-netstructure-port-jacobian-ignores-adaptations.md
  • MARE-0078 (BUG) — NetStructure reports analytical port Jacobians but has no OutputPortJacobian for its state-dependent output ports. Resolved: pending, 2026-09-30. File: resolved/MARE-0078-netstructure-output-port-jacobian-missing.md
  • MARE-0079 (BUG) — MooringCable takes 18 s to set up a straight line, because the catenary solve converges very slowly. Resolved: fc55b16, 2026-09-25. File: resolved/MARE-0079-mooringcable-straight-line-catenary-setup-slow.md
  • MARE-0080 (BUG) — NetStructureArray gives its cable elements no inertia, so a node on cables only has zero mass. Resolved: 1d91424, 2026-09-30. File: resolved/MARE-0080-netstructurearray-cable-elements-no-inertia.md
  • MARE-0081 (BUG) — NetCableElementTest still puts sphere and disk mass and weight on the wrong end and splits disk drag as −pos and 1 − pos (Windows only). Resolved: b0fe446, 2026-10-13 (feature mare-owner-rulings). Owner ruling 2026-10-13: approved; apply the result-changing fix. NetCableElementTest::CalcMassAndWeight now gives end A 1 − pos and end B pos of each sphere's and disk's mass and weight in water, and the disk drag is split (1 − pos) on A and pos on B, as NetCableElement since MARE-0058. Not compiled or run: src/net/Test/ builds only under WIN32, so the change was checked by careful reading only on this Linux host (pos is measured from end A, RenderUpdate; m_massInWater[i] and m_weightInWater[i] load m_conn[i], NetStructureTest.cpp:264). It changes Net/NetStructureTest and Net/NetStructureABAQUS results with spheres or disks. The MARE-0074 disk areas and coefficient are not applied (kept minimal). The Windows test proposed above is part of MARE-0031.. File: resolved/MARE-0081-netcableelementtest-appendage-end-weighting.md
  • MARE-0082 (BUG) — Cable/LumpedMass gives each end node of an element the element's whole weight in water, so the cable weighs twice its weight. Resolved: 823625f, 2026-09-25. File: resolved/MARE-0082-cable-element-weight-doubled.md
  • MARE-0083 (BUG) — The net panel drag scales the current by the solidity factor instead of the flow relative to the net, so a free panel outruns the current. Resolved: a715efa, 2026-09-25. File: resolved/MARE-0083-net-solidity-factor-scales-current-not-relative-flow.md
  • MARE-0084 (BUG) — Net/Sphere reads the water velocity but takes its drag on its own velocity, so it ignores the current. Resolved: b3a864a, 2026-09-25. File: resolved/MARE-0084-sphere-drag-ignores-current.md
  • MARE-0085 (BUG) — The net panel twine Reynolds number uses |snFactor · U_rel|, while the wake-effect screen model uses U_rel / (1 − S_n). Resolved: 991f820, 2026-09-25. File: resolved/MARE-0085-net-panel-reynolds-number-differs-from-screen-model.md
  • MARE-0086 (KNOWN-LIMITATION) — Net/Sphere has no added mass or Froude–Krylov force. Resolved: f36683d, 2026-09-25. File: resolved/MARE-0086-sphere-no-added-mass-or-froude-krylov.md
  • MARE-0087 (DOCUMENTATION) — README names the conf tools.build:skip_tests, which Conan rejects; the recipe reads tools.build:skip_test. Resolved: see commit "Name the Conan test switch tools.build:skip_test in the README", 2026-09-26. File: resolved/MARE-0087-readme-skip-tests-conf-name.md
  • MARE-0088 (TEST) — Net hydrodynamics: measurement data files and CSV reader for the validation tests. Resolved: 378a4aa, 2026-09-26. File: resolved/MARE-0088-net-hydro-measurement-data.md
  • MARE-0089 (KNOWN-LIMITATION) — Net hydrodynamics: LocalThroughFlow (default) and ScreenKF2012 panel load laws. Resolved: 9671c2b, 2026-09-26. File: resolved/MARE-0089-net-hydro-local-through-flow-law.md
  • MARE-0090 (API) — Net hydrodynamics: ScreenMF2022 panel load law. Resolved: 972e04a, 2026-09-26. File: resolved/MARE-0090-net-hydro-screen-mf2022-law.md
  • MARE-0091 (ARCHITECTURE) — Net hydrodynamics: extract the twine cross-flow law into TwineCrossFlow. Resolved: aa2d0a7, 2026-09-26. File: resolved/MARE-0091-net-hydro-twine-cross-flow-extraction.md
  • MARE-0092 (API) — Net hydrodynamics: PanelLoadLaw variant, dispatch and ReadPanelLoadLaw parser. Resolved: e89b5b2, 2026-09-26. File: resolved/MARE-0092-net-hydro-panel-load-law-variant.md
  • MARE-0093 (TEST) — Net hydrodynamics: load-law tests L1-L9 against MF2022, Zhan 2006, Rudi/Loland. Resolved: d8c000c, 2026-09-26. File: resolved/MARE-0093-net-hydro-load-law-validation-tests.md
  • MARE-0094 (ARCHITECTURE) — Net hydrodynamics: split the panel core, caller-owned solidity, wire NetStructure to the load laws. Resolved: 8e64e88, 2026-09-26. File: resolved/MARE-0094-net-hydro-core-split-and-netstructure-wiring.md
  • MARE-0095 (ARCHITECTURE) — Net hydrodynamics: port NetStructureWithConstraints to the shared panel core. Resolved: ab7f71f, 2026-09-27. File: resolved/MARE-0095-net-hydro-withconstraints-port.md
  • MARE-0096 (ARCHITECTURE) — Net hydrodynamics: port NetStructureArray / FNetElement to the shared panel core. Resolved: a0feeff, 2026-09-27. File: resolved/MARE-0096-net-hydro-array-port.md
  • MARE-0097 (ARCHITECTURE) — Net hydrodynamics: delete NetStructureWakeEffect, ScreenElement3N and the OpenCL panel copies. Resolved: 8a40f10, 2026-09-27. File: resolved/MARE-0097-net-hydro-delete-legacy-panel-copies.md
  • MARE-0098 (BUG) — Net/Disk drag uses an element-wise product instead of the normal projection of the relative velocity. Resolved: b8a045f, 2026-09-27. File: resolved/MARE-0098-disk-odefcn-normal-tangential-projection.md
  • MARE-0099 (TEST) — Net hydrodynamics: towed-panel validation S1 and one regeneration of the regression baselines. Resolved: 3daf95a, 2026-09-28. File: resolved/MARE-0099-net-hydro-baselines-and-towed-panel-validation.md
  • MARE-0100 (KNOWN-LIMITATION) — Net hydrodynamics: NetStructure casts its wake into the environment (NetWakeCaster). Resolved: 3ada983, 2026-09-27. File: resolved/MARE-0100-net-hydro-netstructure-wake-casting.md
  • MARE-0101 (TEST) — Net hydrodynamics: SimObject validation S2-S4, S6 and the S7 trawl harness. Resolved: c568134, 2026-09-27. File: resolved/MARE-0101-net-hydro-cage-validation.md
  • MARE-0102 (TEST) — Net hydrodynamics: benchmark of load laws and wake evaluation; propose the default WakeGrid. Resolved: 6c643bf, 2026-09-27. File: resolved/MARE-0102-net-hydro-wake-benchmark.md
  • MARE-0103 (DOCUMENTATION) — Net hydrodynamics: CONTEXT.md and ADRs 0001-0005 (vocabulary for all lanes). Resolved: 868d62f (merge of wp/E0-vocabulary; marenv 8493854, fhsim_environment 4ce3979), 2026-09-26. File: resolved/MARE-0103-net-hydro-vocabulary-and-adrs.md
  • MARE-0104 (DOCUMENTATION) — Net hydrodynamics: methods manual doc/user/net_hydrodynamics_methods.md. Resolved: 220e4a7, 2026-09-26. File: resolved/MARE-0104-net-hydro-methods-manual.md
  • MARE-0105 (DOCUMENTATION) — Net hydrodynamics: implementation guide, user guide, parameter tables and XML examples. Resolved: 8f274c3, 3465f2e, 2026-09-27. File: resolved/MARE-0105-net-hydro-guides-and-examples.md
  • MARE-0106 (DOCUMENTATION) — Net hydrodynamics: generated validation report doc/user/validation/. Resolved: 663e2fb, 2026-09-27. File: resolved/MARE-0106-net-hydro-validation-report.md
  • MARE-0107 (DOCUMENTATION) — Net hydrodynamics: documentation review against the finished code. Resolved: 025dae5, 2026-09-27. File: resolved/MARE-0107-net-hydro-documentation-review.md
  • MARE-0108 (BUG) — TwineCrossFlow evaluates asin(Re/lamLimit), NaN for Re > lamLimit = 2e5, and lamLimit (2e5) < turbLimit (3.4e5). Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0108-twine-cross-flow-laminar-limit-asin-nan.md
  • MARE-0109 (KNOWN-LIMITATION) — Default law induction factor exceeds 1 below Sₙ ≈ 0.082. Resolved: 4714b56, 2026-09-27. File: resolved/MARE-0109-induction-factor-exceeds-one-low-solidity.md
  • MARE-0110 (KNOWN-LIMITATION) — Default load law misses lift at high solidity and the angle dependence of Rudi, Løland and Zhan (A6 disabled tests). Resolved: feature mare-0110-solidity-lift, 2026-10-13 (fhsim_environment 3.1.1, fhsim_marine_elements 3.0.4). Owner ruling 2026-10-13: the default law gets a solidity-dependent lift coefficient from MF2022 Eq. 10. LocalThroughFlow now takes c_l = c_d κ(Sₙ), κ = CL(45°)/CD(0°) = (1.693 Sₙ² − 0.217 Sₙ + 0.022)/(1.782 Sₙ² + 1.057 Sₙ − 0.053), Sₙ held in the fit range 0.18–0.36 (panel_formulas::Mf2022LiftToDragRatio); c_d is the law's own, so the lift keeps its Re dependence and f². No new parameter (contract C3), drag and angle form unchanged. The lift changes by −10 % (Sₙ ≤ 0.18) to +33 % (0.36) against the old Schubauer c_l. Tests: PanelLoadLaw_MF2022.L1_Eq10LiftAtRn2000_LocalThroughFlow enabled (−7.6 to +6.8 % against Eq. 10; was −25.8/−30.3/−25.3 % for N33a/N36a/N33b). The other ten stay DISABLED_ with their reasons (fhsim_environment doc/user/hydrodynamics.md Section 11.4): L2 lift fails now on N19a (83.5 N against 102 N, MF2022's text value above its own Eq. 10 trend; N33a passes, 247 N against 271 N), L6 lift 22 of 80 rows (was 31; Løland's lift is 27–46 % above MF2022's), and L4, L5, L6 drag, L8 and L9, which measure drag, ratios or normal incidence and do not move; the 60–80° angle form stays open as MARE-0131. Here: SimObject.NetStructure_Regression regenerated (the panel at Sₙ 0.160 gets 10 % less lift and sinks less: v_z 0.0443 against 0.0483 m/s at 15 s, z up to 0.062 m); the S1 twin DISABLED_S1_L2_TextLiftAt1p75 stays disabled the same way (N19a 81.2 N); the Lader cage S3 drag improves (Sn 0.43: 2 rows outside ±20 % instead of 4) but stays disabled. fhsim_fishery and fhsim_base baselines do not move.. File: resolved/MARE-0110-default-load-law-lift-and-angle-dependence.md
  • MARE-0111 (KNOWN-LIMITATION) — Screen load laws give no in-plane load, so panels in grazing flow have no drag along the panel. Resolved: 16cc208, 2026-09-27. File: resolved/MARE-0111-net-hydro-screen-laws-no-in-plane-load.md
  • MARE-0112 (BUG) — NetStructureArray: buoyant twine (BarRho < Rho) gives a NaN damping coefficient and NaN node forces. Resolved: f639931 (fix), 32b6d65 (tests), 2026-09-27. File: resolved/MARE-0112-net-structure-array-buoyant-twine-nan-damping.md
  • MARE-0113 (KNOWN-LIMITATION) — MeshOpening solidity uses the unstretched bar length while loads use the deformed area. Resolved: wontfix by owner decision (Q15, lead ruling R28), 2026-09-27. File: resolved/MARE-0113-mesh-opening-solidity-unstretched-bar-length.md
  • MARE-0114 (KNOWN-LIMITATION) — NetStructureWithConstraints does not cast a wake. Resolved: c17bbf5, 2026-09-27. File: resolved/MARE-0114-withconstraints-no-wake-casting.md
  • MARE-0115 (ARCHITECTURE) — Port NetStructure setup onto NetPanelSetup.h. Resolved: 83ed259, 2026-09-27. File: resolved/MARE-0115-netstructure-onto-netpanelsetup.md
  • MARE-0116 (KNOWN-LIMITATION) — Self-shadowing possible under manoeuvres between wake rebuilds. Resolved: pending, 2026-09-30. File: resolved/MARE-0116-wake-self-shadowing-under-manoeuvres.md
  • MARE-0117 (ARCHITECTURE) — Deprecate NetStructureWakeEffect and NetElement3NWakeEffect (kept for 4.x). Resolved: 6c7c72b, 2026-09-27; kept and deprecated by owner decision (Q3, lead ruling R37). Removed on branch feature/wake-docs, 2026-10-12 (owner ruling 2026-10-12; see Removal). File: resolved/MARE-0117-deprecate-netstructure-wake-effect.md
  • MARE-0118 (ARCHITECTURE) — Port NetStructureArray setup onto NetPanelSetup.h. Resolved: 8ce0244, 2026-09-27. File: resolved/MARE-0118-netstructurearray-onto-netpanelsetup.md
  • MARE-0119 (KNOWN-LIMITATION) — NetStructureWithConstraints runs are slow for their size, dominated by system time. Resolved: pending, 2026-09-30. File: resolved/MARE-0119-withconstraints-slow-system-time.md
  • MARE-0120 (BUG) — Net files are looked up in the working directory, not next to the input file. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0120-net-file-lookup-working-directory.md
  • MARE-0121 (TEST) — SimObject.NetStructureWithConstraints_SolverFrequency may be flaky. Resolved: ede966b, 2026-10-20. Not reproduced again, and the suspected cause is gone: the three #pragma omp parallel for of NetStructureWithConstraints::TakeNodeForces were removed by the MARE-0380 fix (ede966b), so no node loop of the class runs on a team any more (NumThreads 1, the default, has no other parallel region). Evidence on the feature channel (fhsim_environment 3.2.11), default thread setting, 32 cores: SimObject.NetStructureWithConstraints_SolverFrequency 200 of 200 runs passed (--gtest_repeat=200), 200 of 200 with every *NetStructureWithConstraints* test shuffled together (--gtest_repeat=200 --gtest_shuffle, 32 tests per iteration), and 100 of 100 with OMP_NUM_THREADS=8. The original failure was seen once and never reproduced, so this is absence of a failure, not proof; the test needs no change.. File: resolved/MARE-0121-withconstraints-solverfrequency-flaky.md
  • MARE-0122 (KNOWN-LIMITATION) — Sundials BDF with the default linear solver collapses the step in any transient (wake blend, load ramp). Resolved: feature mare-0110-solidity-lift, 2026-10-13, with fhsim 3.3.6 (FHSIM-0028, owner ruling 2026-10-13 option A: without a <LinearSolver>, a model that resolves to DenseLU gets SUNDIALS DENSE with a dense Jacobian when DenseJacobianFits(n), else SPGMR and a warning). NetValidation_ZhanCylinder_VALIDATION.S6_SundialsBdfDefaultLinearSolverStepsDoNotCollapseAtARebuild is enabled (the DISABLED_ prefix removed): green with fhsim 3.3.6, the minimum step after each rebuild (t = 1.10 s and 6.20 s) equals the 0.1 s before it (ratio 1.00), 282 steps in 1.1 s wall, the same as the named-DENSE variant; red with 3.3.4 (2.0e-4 s and 3.5e-5 s, 761 steps, 11.9 s). Not cured, as FHSIM-0028 notes: the stiffer diagnostic variant (k = 1e2 N/m) and the step dip of a 0.1 s wake blend (below), neither covered by S6. The recipe still accepts fhsim [^3.3.1]; with an fhsim older than 3.3.6 this VALIDATION test fails again.. File: resolved/MARE-0122-sundials-bdf-default-linear-solver-step-collapse.md
  • MARE-0123 (BUG) — Owner answers to Q19 (R32): cable Rho, Disk DiskMesh, area-weighted wake frame. Resolved: ccff439 (a), 2309157 (b), c7701fc and da441fd (d); shared-file edits a3cfd61, 2026-09-27. File: resolved/MARE-0123-owner-q19-cable-rho-diskmesh-wake-frame.md
  • MARE-0124 (BUG) — Sphere reads SphereMesh but never uses it. Resolved: 0f1f58c, 2026-09-27. File: resolved/MARE-0124-sphere-spheremesh-unused.md
  • MARE-0125 (TEST) — Net hydrodynamics: B6 re-benchmark after lumped external wakes (Q12). Resolved: 11887b6, 2026-09-27. File: resolved/MARE-0125-phase-f-b6-rebenchmark.md
  • MARE-0126 (DOCUMENTATION) — Net hydrodynamics phase F: contract text C3/C4/C5 and ADRs for lumped external wakes. Resolved: 289a12d, 2026-09-27. File: resolved/MARE-0126-phase-f-contracts-and-adrs.md
  • MARE-0127 (API) — Disk and Sphere cast wakes through WakeCastingObject. Resolved: 9ab77f5, 2026-09-27. File: resolved/MARE-0127-phase-f-disk-sphere-cast-wakes.md
  • MARE-0128 (DOCUMENTATION) — Net hydrodynamics phase F: wake manual, methods manual, CHANGELOG, OpenWiki, validation pages. Resolved: a523515, 2026-09-27. File: resolved/MARE-0128-phase-f-documentation.md
  • MARE-0129 (API) — Net wake casting: private per-panel field for self-shading, one registered lumped source per net. Resolved: 2d95765, 2026-09-27. File: resolved/MARE-0129-phase-f-net-lumped-wake.md
  • MARE-0130 (KNOWN-LIMITATION) — ScreenMF2022 below the fit range: negative Eq. 10 drag, clamped where C_D(θ) ≥ 0 (Q5, QG1). Resolved: 31e51a7, 2026-09-27; floor raised (QG1) on wp/G5-mf2022-floor, 2026-09-27. File: resolved/MARE-0130-screen-mf2022-solidity-below-eq10-roots.md
  • MARE-0131 (KNOWN-LIMITATION) — Default law: replace the two-harmonic angle form with three harmonics, refitted to MF2022, Rudi, Løland and Zhan. Resolved: 69cd149, 2026-10-20. Resolved by fhsim_environment commits 0a5851e (the HydroA5 parameter and the three-harmonic drag form, opt-in, default lift b4 = 0.036), 5c84229 (its baselines) and 6c898d3 (version 3.2.11), and by the baselines of this repository in 69cd149. The owner revised R1 on 2026-10-20: the three-harmonic drag refit (a3 = -0.009, a5 = 0.028) fixed no A6 test and broke MF2022 L1, L3 and L4 at 45 deg, so the drag stays a3 = 0.07 with HydroA5 (default 0) as an opt-in, and the lift is b4 = 0.036 (was 0.10), fitted to the Rudi and Loland lift data. In this repository only the lift moved: the net pins of NetCore_Pin_Test.cpp, the four NetStructure*_Regression* references, the C1 pin OldVsNew_VALIDATION.NetPanel_LiftK1 (own tolerance 11 %) and the NetStructure_Regression baseline page; HydroB4 = 0.10 gives the old values bit for bit. The three disabled S1 twins in NetValidation_TowedPanel_Test.cpp still fail, for the drag reasons their comments name (the 60 to 80 deg angle dependence of the drag stays open as a known limitation of the two-harmonic default: ENV-0120 in fhsim_environment).. File: resolved/MARE-0131-default-law-three-harmonic-angle-form.md
  • MARE-0132 (TEST) — W9 cannot read a net's internal flow since the per-panel field is private (phase F). Resolved: 079c3ec, 2026-09-27. File: resolved/MARE-0132-w9-private-field-not-observable.md
  • MARE-0133 (KNOWN-LIMITATION) — MaxAcceleration breaks the balance of action and reaction: a net whose nodes reach the limit drives itself. Resolved: c8d9e6d, 2026-09-28. File: resolved/MARE-0133-net-acceleration-limit-drives-the-net.md
  • MARE-0134 (BUG) — Net/NetStructure and Net/Disk offer an analytical Jacobian that omits seafloor contact. Resolved: 1de224f, 2026-09-28. File: resolved/MARE-0134-jacobian-omits-bottom-contact.md
  • MARE-0135 (BUG) — Under Sundials BDF a net that touches the seabed gets an unfilled Newton Jacobian until FhSim 3.3.1 is consumed. Resolved: 6dcd350, 2026-09-28. File: resolved/MARE-0135-sundials-jacobian-unfilled-after-touchdown.md
  • MARE-0136 (BUG) — Freeze re-arms the net wakes when the ambient current at the structure changes. Resolved: 53286c4, 2026-09-28. File: resolved/MARE-0136-freeze-rearms-on-ambient-current.md
  • MARE-0137 (BUG) — HydroA3 above 0.25 or |HydroB4| above 0.5 accepted silently: negative drag at grazing angles, reversed lift. Resolved: d10d5da, 2026-09-28. File: resolved/MARE-0137-harmonics-outside-sign-bounds-accepted.md
  • MARE-0138 (TEST) — Every default ctest, conan build and conan create runs the slow VALIDATION entry. Resolved: 9f86cbf (docs cc158ae), 2026-09-28. File: resolved/MARE-0138-validation-tests-run-by-default.md
  • MARE-0139 (BUG) — A panel with collinear mesh coordinates (meshDet = 0) is accepted for every law but TwineCrossFlow and gives NaN twine tension. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0139-collinear-mesh-panel-nan-tension.md
  • MARE-0140 (BUG) — KnotFactor and Solidity are not validated, and the load laws' clamp flags are discarded, so run-time clamps leave no trace. Resolved: b184053, 2026-09-30. File: resolved/MARE-0140-solidity-inputs-unvalidated-clamp-flags-discarded.md
  • MARE-0141 (KNOWN-LIMITATION) — The cable and float share of a casting net's drag is left out of the lumped wake and never reported, although QF9 asked for it. Resolved: ff4a1bb, 2026-09-30. File: resolved/MARE-0141-cable-share-of-cast-wake-not-reported.md
  • MARE-0142 (TEST) — Test gaps in the regimes the net-hydrodynamics branch targets: per-law structure Jacobian, KF2012 Re upper clamp and Sn floor, QF6 widening, zero relative flow, relaxed M. Resolved: 315b3ab, 2026-09-30. File: resolved/MARE-0142-net-hydrodynamics-test-gaps.md
  • MARE-0143 (BUG) — In Grid mode, std::invalid_argument escapes PreOdeFcn on a fully degenerate net. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0143-grid-wake-throws-on-degenerate-net.md
  • MARE-0144 (BUG) — NetWakeCaster::RelaxLumped passes a non-finite frontal area to MakeLumpedSource, which throws out of PreOdeFcn. Resolved: 40c4b1a, 2026-09-30. File: resolved/MARE-0144-relax-lumped-non-finite-area-throws.md
  • MARE-0145 (BUG) — A NaN solidity gives a NaN force with flags 0 under LocalThroughFlow and ScreenMF2022, but a clamped finite force under TwineCrossFlow. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0145-nan-solidity-handled-differently-by-laws.md
  • MARE-0146 (DOCUMENTATION) — "Screen-law friction equals TwineCrossFlow{} − TwineCrossFlow{ct=0} for any state" is false for ScreenMF2022 below Sn = 0.1005. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0146-friction-identity-doc-ignores-mf2022-floor.md
  • MARE-0147 (DOCUMENTATION) — The ScreenMF2022 fit-range warning says "extrapolated" for Sn > 0.5, where Evaluate clamps to 0.5. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0147-mf2022-warning-says-extrapolated-above-clamp.md
  • MARE-0148 (DOCUMENTATION) — TwineCrossFlow.h and KF2012Common.h cite net_element_forces::CalcHydroDynamicForces, CalcVelocities and CalcSolidity as present code. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0148-law-doxygen-cites-removed-panel-functions.md
  • MARE-0149 (DOCUMENTATION) — Remaining stale status text: CHANGELOG and the migration page list MENV-0008 as open, and the WakeCutoff option still says "owner question Q12". Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0149-stale-q12-and-menv-0008-status-text.md
  • MARE-0150 (DOCUMENTATION) — WakeCutoff is documented as the kernel cutoff deficit for Disk and Sphere, but has no effect there. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0150-wakecutoff-no-effect-on-disk-and-sphere.md
  • MARE-0151 (DOCUMENTATION) — The wake example inputs describe the wake as it was before the lumped-wake rework (phase F). Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0151-wake-example-comments-predate-lumped-wakes.md
  • MARE-0152 (DOCUMENTATION) — The lumped wake starts as a step at the rear face, so an object crossing a cage's rear-face plane sees a jump in inflow; not documented for cage users. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0152-lumped-wake-step-at-rear-face-undocumented.md
  • MARE-0153 (ARCHITECTURE) — AnyNodeInBottomContact repeats the bathymetry lookup for every node on every OdeFcn. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0153-bottom-contact-flag-repeats-depth-lookup.md
  • MARE-0154 (ARCHITECTURE) — Dead code left after the panel refactors, and an audit note that quotes the removed maxAcceleration guard as current code. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0154-dead-code-after-panel-refactors.md
  • MARE-0155 (ARCHITECTURE) — The KF2012 cylinder polynomial and the induction factor r = min(1.08 − 0.97 Sn, 1) are implemented several times. Resolved: d387de1, 2026-09-30. File: resolved/MARE-0155-load-law-formulas-duplicated.md
  • MARE-0156 (BUG) — The NetStructureWakeEffect deprecation warning always names Net/NetStructureWakeEffect, also for a derived Netcage or NetCageWakeEffect. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0156-deprecation-warning-names-base-class.md
  • MARE-0157 (BUG) — NetStructureWakeEffect queries the waked current in FinalSetup, so its wake polynomials depend on FinalSetup order. Resolved: 2ecd78b, 2026-09-30. File: resolved/MARE-0157-wakeeffect-finalsetup-samples-waked-current.md
  • MARE-0158 (BUG) — NetStructureArray gives its panels the waked flow with waves at the centroid, but its cables the current without waves at end node A. Resolved: 1d91424, 2026-09-30. File: resolved/MARE-0158-netstructurearray-panel-and-cable-water-velocity-differ.md
  • MARE-0159 (ARCHITECTURE) — Wake logic is duplicated across marenv, fhsim_environment and NetWakeCaster (composition, relaxation, rear-face kernel, kMinRelativeFlow). Resolved: 16e601b, 2026-10-01 (characterisation test e30faf2; NetWakeCaster: Composition is gone, the panels compose with marenv's WakeAccumulator (R95); LumpedFieldKernel and the kMinRelativeFlow copy are gone (marenv LumpedKernel, kMinRelativeFlow); the other wakes are selected by pointer through SelectReachingWakeFields(region of the centroids, own lumped field) at the exact tier; the Direct march mirrors with MirrorImages and ImageMap::QueryDepth, as the published field; Rebuild is split into CollectPanels, MakeFrame, MarchPrivateSources, PublishPrivate, PublishLumped and LogRebuild; BodyFlowInteraction excludes the body's field with LumpedWakeCaster::OwnQuery(); the test DirectMarchSeesThePublishedPrivateField pins march = published (3e-16; 1.1e-4 with the march's images dropped); bit-identical: the M3 hexfloat probe is identical, 350 SimObject result files unchanged, 383/383 suite tests pass. Left: RelaxLumped repeats fhsim_environment's private LumpedWakeCaster::Relax, which has no shared helper to call). File: resolved/MARE-0159-wake-logic-duplicated-across-layers.md
  • MARE-0160 (DOCUMENTATION) — ADR 0001 still says every consumer sees a net's wake and that NetStructureWakeEffect is deleted, contradicted by ADR 0006 and R6/R37. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0160-adr-0001-not-marked-partly-superseded.md
  • MARE-0161 (ARCHITECTURE) — Installed headers include fhsim_environment, marenv and fhsim_coribo headers, but those requirements are not transitive_headers. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0161-installed-headers-need-transitive-environment-and-coribo.md
  • MARE-0162 (ARCHITECTURE) — fhsim_marine_elements uses the marenv API directly but declares no marenv requirement. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0162-marenv-used-directly-without-requirement.md
  • MARE-0163 (DOCUMENTATION) — fhsim_aquaculture cannot build on fhsim_marine_elements 4 without a port, and the migration guide does not list what the port must change. Resolved: e28c9ce, 2026-10-13 (feature mare-owner-rulings). Owner ruling 2026-10-13: aquaculture's MaxAcceleration inputs must warn when given (they are ignored). A net file read through NetStructureSpec already warns (MARE-0165); SimObject.NetStructure_MaxAccelerationRemoved now also checks that warning. The migration guide has a new section, doc/user/migration_3_0.md Porting fhsim_aquaculture, listing (a)–(e), the const-override hazard and the warning rule for any file or SimObject parameter a port reads itself (removed_attributes::WarnIfPresent). The port itself remains a separate work package (fhsim_aquaculture is not in the workspace).. File: resolved/MARE-0163-fhsim-aquaculture-port-hazards.md
  • MARE-0164 (DOCUMENTATION) — AddedDragPerMPS is applied in OdeFcn but not in EvaluatePanel, so a casting net's lumped M leaves it out. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0164-added-drag-left-out-of-lumped-wake.md
  • MARE-0165 (KNOWN-LIMITATION) — Removed input attributes such as MaxAcceleration are dropped without a warning (File= attributes) or with only an Info line. Resolved: 9dd4572, 2026-09-30. File: resolved/MARE-0165-removed-parameters-dropped-without-warning.md
  • MARE-0166 (BUG) — Cable/Branched reads the General-level FluidRho but never uses it; per-element FluidRho defaults to 1025. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0166-cablebranched-general-fluidrho-unused.md
  • MARE-0200 (KNOWN-LIMITATION) — TwineCrossFlow normal drag steps by −35 % where the Reynolds number drops below 32 and by +5 % above 10^4. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0200-twinecrossflow-cn-steps-at-re-32-and-1e4.md
  • MARE-0201 (TEST) — The finiteness of the screen laws' Jacobian at zero relative velocity rests on an fhlib convention no test pinned. Resolved: bdc360d, 2026-09-28. File: resolved/MARE-0201-screen-law-jacobian-at-rest-not-pinned.md
  • MARE-0202 (DOCUMENTATION) — knotDiameterRatio was documented as a TwineCrossFlow parameter, but it sets the in-plane friction of every law. Resolved: bdc360d, 2026-09-28. File: resolved/MARE-0202-knot-diameter-ratio-documented-as-twinecrossflow-only.md
  • MARE-0203 (KNOWN-LIMITATION) — NetStructureArray fixes the knot diameter at 2 BarD, so a non-default knotDiameterRatio gives it different friction and knot drag from NetStructure. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0203-netstructurearray-knot-diameter-ratio-fixed.md
  • MARE-0204 (ARCHITECTURE) — NormalForceCalc is compiled and installed but never used, and its destructor leaks m_numForcesAdded. Resolved: see Resolution, 2026-09-30. File: resolved/MARE-0204-normalforcecalc-dead-and-leaks.md
  • MARE-0205 (ARCHITECTURE) — The AD panel Jacobian carries eighteen gradient slots where twelve give the same Jacobian, and costs about 40 times the force. Resolved: 7002356 (merge of da1f170), 2026-09-28. File: resolved/MARE-0205-panel-jacobian-eighteen-slots-where-twelve-suffice.md
  • MARE-0206 (ARCHITECTURE) — Every panel evaluation computes load diagnostics (drag, lift, theta, Re, localCd, friction projections) that the force path never reads. Resolved: won't fix, 2026-09-30. File: resolved/MARE-0206-panel-load-diagnostics-computed-every-call.md
  • MARE-0207 (KNOWN-LIMITATION) — Under induction the lift is Schubauer(f² c_d), not f² Schubauer(c_d): the two differ by 2-3 % above Sn = 0.36. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0207-lift-under-induction-placement-of-f-squared.md
  • MARE-0208 (BUG) — HydroA3 has no lower bound, and a NaN HydroA3 or HydroB4 passes the harmonic bounds. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0208-hydroa3-lower-bound-and-nan-accepted.md
  • MARE-0209 (ARCHITECTURE) — NetStructure declares a dense Jacobian, so implicit runs pay a dense LU and every finite-difference Jacobian costs one RHS per state. Resolved: 7a9aa4e, 2026-09-30. File: resolved/MARE-0209-netstructure-declares-dense-jacobian.md
  • MARE-0210 (KNOWN-LIMITATION) — In waves the particle velocity is evaluated once per panel and cable at every RHS and costs 3.4 times the whole panel force. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0210-wave-kinematics-per-panel-dominate-rhs.md
  • MARE-0211 (ARCHITECTURE) — The net file reader is quadratic in the number of panels: every attribute read resolves its path from the root. Resolved: feature mare-0110-solidity-lift, 2026-10-13, upstream by FhSim FHSIM-0043 (fhsim 3.3.6: InputReader::GetElement resolves each path component through a per-parent index of first children, bit-identical; owner ruling 2026-10-13). Nothing changes in this library. Confirmed bit-identical: the default ME ctest with fhsim 3.3.6 passes every regression baseline (NetStructure_Regression differs only by the MARE-0110 lift, by the same RMS under 3.3.4 and 3.3.6), and the states of a generated 2 048-panel net over 0.01 s (6 534 states, 11 rows) are byte-identical under 3.3.4 and 3.3.6. Timing of the net setup, Net/NetStructure with a generated net file (101 × 101 nodes, 20 000 panels; 33 × 33 nodes, 2 048 panels), RK45_i, one 1 ms step, wall time to the end of NetStructureSpec::ReadInputFile (two runs each, Release): p20k 31.5–32.4 s with fhsim 3.3.4, 0.29–0.31 s with 3.3.6 (whole run 34.2–35.9 s against 3.1–3.2 s); p2k 0.30–0.42 s against 0.04–0.07 s. p20k no longer fails in model assembly either.. File: resolved/MARE-0211-net-file-parser-quadratic-in-panels.md
  • MARE-0212 (ARCHITECTURE) — A net's panel and cable loops run on one thread, so one large cage cannot use more than one core. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0212-net-panel-and-cable-loops-single-threaded.md
  • MARE-0213 (BUG) — Net cable elements blend the air/water density twice, and an element with node 1 exactly at z = 0 gets air density. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0213-net-cable-density-blended-twice.md
  • MARE-0214 (KNOWN-LIMITATION) — Surface-piercing buoyancy of net cables and their floats uses the mean surface and the element's end nodes, not the body's shape or the wave surface. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0214-surface-piercing-buoyancy-from-end-nodes.md
  • MARE-0215 (KNOWN-LIMITATION) — No marine-elements model uses the water particle acceleration: no Froude-Krylov or added-mass excitation in waves. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0215-no-froude-krylov-or-added-mass-excitation.md
  • MARE-0216 (BUG) — RbCable/Cable took an element as wet when z > eta, the wrong sign of the wave elevation. Resolved: c6b0db8, 2026-09-28. File: resolved/MARE-0216-cablerm-wet-test-wrong-wave-sign.md
  • MARE-0217 (BUG) — RbCable/Cable applies the normal drag coefficient along the axis (Ct = Cd), and the axial drag steps 7-fold near 1.7° where Re passes 10^6. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0217-cablerm-tangential-drag-equals-normal.md
  • MARE-0218 (BUG) — RbCable/6DofCable subtracted its buoyancy as a mass, and projected the tangential velocity on an axis of length L/2. Resolved: c6b0db8, 2026-09-28. File: resolved/MARE-0218-6dofcable-buoyancy-without-g-and-scaled-axis.md
  • MARE-0219 (BUG) — Net/Disk on the seabed replaces its weight by a mass in kg: weightless on a flat seafloor, pushed up on soil with a density. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0219-disk-on-seabed-loses-weight.md
  • MARE-0220 (KNOWN-LIMITATION) — A float or disk on a net cable carries the full displaced mass as added mass (Ca = 1), where Net/Sphere uses 0.5 and Net/Disk none. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0220-net-appendage-added-mass-ca-one.md
  • MARE-0221 (BUG) — RbCable/Cable kelp drag was NaN for relative flow along the element axis. Resolved: c6b0db8, 2026-09-28. File: resolved/MARE-0221-cablerm-kelp-drag-nan-for-axial-flow.md
  • MARE-0222 (ARCHITECTURE) — RbCable/Cable allocates in every OdeFcn and repeats the depth lookup in its seabed branch. Resolved: pending, 2026-09-30. File: resolved/MARE-0222-cablerm-allocates-in-odefcn.md
  • MARE-0223 (ARCHITECTURE) — Cable/* makes one flow query per element per RHS, each sampling every registered lumped wake. Resolved: e2cf01c, 155cf58 (fhsim_marine_elements), fhsim_environment 9456bd5, 55abb65 (WakeReceiver), fhsim_base 2171413; 2026-10-12, feature wake-hardening. Owner ruling R-c (2026-10-12): the held composition at the cutoff tier; results may change.. File: resolved/MARE-0223-cable-flow-query-per-element-scales-with-fields.md
  • MARE-0224 (BUG) — Net cable elements update cached state inside the const OdeFcn, so with AdaptationPeriod set the force depends on the previous RHS call. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0224-net-cable-element-mutates-in-const-odefcn.md
  • MARE-0225 (KNOWN-LIMITATION) — Cable/LumpedMass and Cable/Branched sample the current and wakes but not the wave particle velocity. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0225-cable-objects-see-no-wave-velocity.md
  • MARE-0226 (KNOWN-LIMITATION) — TrawlCable and MooringCable treat elements above the sea surface as submerged: the air branch is commented out. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0226-trawlcable-above-surface-treated-as-submerged.md
  • MARE-0227 (KNOWN-LIMITATION) — RbCable/6DofCable sees no current or wake, uses a component-wise quadratic drag and takes its centre depth as the depth of its lowest point. Resolved: dea65d2, 2026-09-30. File: resolved/MARE-0227-6dofcable-no-current-and-submergence-datum.md
  • MARE-0228 (TEST) — BDF step recovery after touchdown hangs on rounding: a 1e-14 relative change of the panel Jacobian keeps the steps collapsed on the seabed. Resolved: 0b30a62, 2026-09-28 (the test; the model behaviour it exposed is MARE-0229). File: resolved/MARE-0228-bdf-touchdown-step-recovery-fragile.md
  • MARE-0229 (KNOWN-LIMITATION) — BDF of order 3 to 5 sustains the undamped seabed-contact oscillation of a net at rest: the step can stay near 1 % of StepMax. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0229-bdf-high-order-sustains-seabed-contact-oscillation.md
  • MARE-0301 (ARCHITECTURE) — Nets and bodies re-compose the other objects' wakes at every RK stage and Jacobian evaluation. Resolved: f74c7b2, 2026-09-28. File: resolved/MARE-0301-external-wakes-per-step.md
  • MARE-0302 (KNOWN-LIMITATION) — The default private wake grid and cutoff are inaccurate at 10⁴ panels. Resolved: fc1ecfe, 2026-09-28. File: resolved/MARE-0302-private-grid-defaults-at-1e4-panels.md
  • MARE-0303 (ARCHITECTURE) — Legacy NetStructureWakeEffect makes 4 environment lookups per panel where 2 give the same numbers. Resolved: c6b8142, 2026-09-28. File: resolved/MARE-0303-wakeeffect-duplicate-flow-lookups.md
  • MARE-0304 (BUG) — Under Freeze a moored cage's frozen wakes drift at the transient's residual velocity. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0304-frozen-net-wake-drifts.md
  • MARE-0305 (KNOWN-LIMITATION) — The lumped M is normalised by the square of the mean flow, not the mean dynamic pressure. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0305-lumped-momentum-from-mean-flow-square.md
  • MARE-0306 (API) — The net wakes need their seabed image plane from the caster. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0306-seabed-and-surface-images.md
  • MARE-0307 (KNOWN-LIMITATION) — A net's private wake field mirrors at the seabed; the owner keeps only the surface image there (R82). Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0307-private-wake-without-seabed-image.md
  • MARE-0308 (KNOWN-LIMITATION) — The panel wake sources hand the law's Sₙ (with the knot factor, without the bar overlap) to the MF2022 Eq. 11 near wake. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0308-near-wake-solidity-snc.md
  • MARE-0309 (API) — Net wake casting follows marenv's ambient normalisation (R87) and linear superposition (R88). Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0309-lumped-wake-ambient-normalisation-and-linear-superposition.md
  • MARE-0310 (ARCHITECTURE) — Net/NetStructureWithConstraints and Net/NetStructureArray keep serial panel and cable loops. Resolved: pending, 2026-09-30. File: resolved/MARE-0310-parallel-loops-in-withconstraints-and-array.md
  • MARE-0311 (KNOWN-LIMITATION) — Receivers took the other objects' wakes by the exact tier only; R47 accepts the cutoff tier. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0311-receivers-take-external-wakes-by-the-cutoff-tier.md
  • MARE-0312 (API) — Net wake casting follows marenv's momentum-flux-conserving composition (R95). Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0312-wake-composition-momentum-flux-rule.md
  • MARE-0313 (KNOWN-LIMITATION) — The wave surface (R66) and the wave excitation (R67) do not reach every model. Resolved: see Resolution, 2026-09-28. File: resolved/MARE-0313-surface-and-wave-excitation-not-everywhere.md
  • MARE-0314 (KNOWN-LIMITATION) — RbCable/Cable carries no added mass, so its wave excitation is Froude–Krylov only. Resolved: a78638e, 2026-10-13 (feature mare-owner-rulings). Owner ruling 2026-10-13: yes: RbCable/Cable's rigid elements carry the normal added mass Ca rho A L (Ca = 1, DNV-RP-C205 (2021) Table A-1) of the wet part in their inertia, and the wave excitation is (1 + Ca) rho f V a_n, consistent with fhsim_base Cable (R93). Done in src/RMCable/Cable.cpp: each element's translational inverse inertia MiT = N N^T / m + (I − N N^T) / (m + m_a), m_a = Ca rho V f (TranslationalInverseMass, Cable.h), replaces 1/m in the Schur complement JMiJt, the constraint right-hand side and the accelerations; AddAboveSeabedLoad returns f, takes the Morison inertia force and the Coriolis force −Ȧ (v − u) of the turning added mass on the relative velocity (MARE-0323 rule). Not included, as in TrawlCable: an added moment of inertia, df/dt, added mass below the seabed. Tests, red before and green after: SimObject.CableRM_AddedMassIsInTheInertiaNormalToTheElements (two cables of 3 and 8 kg/m pushed sideways by a starting current: velocity ratio 2.523 before, 1.947 after, expected 1.998 ± 3 %), CableWaves.CableRMElementTakesTheMorisonInertiaForce, CableWaves.CableRMTurningAddedMassActsOnTheRelativeVelocity; CableWaves.CableRMTranslationalInverseMass. No baseline moved (ME default suite green; fishery and base have no RbCable/Cable fixture). RbCable/6DofCable and RbCable/Ring still carry no added mass: MARE-0374.. File: resolved/MARE-0314-no-added-mass-froude-krylov-only.md
  • MARE-0315 (KNOWN-LIMITATION) — RbCable/6DofCable and RbCable/Ring are not connected to the Environment, so R104's wave surface and excitation cannot reach them. Resolved: dea65d2, 2026-09-30. File: resolved/MARE-0315-6dofcable-ring-no-environment.md
  • MARE-0316 (BUG) — Net cable elements took the rope's wave excitation along the full water acceleration, axis included (R108). Resolved: see Resolution, 2026-09-29. File: resolved/MARE-0316-net-cable-excitation-isotropic.md
  • MARE-0317 (ARCHITECTURE) — NetStructureWithConstraints builds its constraint solver on a hardware_concurrency-sized thread pool, which costs small runs seconds of system time. Resolved: 65577aa, 2026-09-30. File: resolved/MARE-0317-withconstraints-solver-thread-pool.md
  • MARE-0318 (BUG) — NetElement3N destructor deletes uninitialised pointers when the element is never rendered. Resolved: 7f702f3, 2026-09-30. File: resolved/MARE-0318-netelement3n-uninitialised-line-pointer.md
  • MARE-0319 (BUG) — NetStructure's cable drag Jacobian uses the water density, not the element's air/water blend. Resolved: 8c21bea, 2026-10-13 (feature mare-ready-batch). NetStructure::OdeJacobian passes each cable element's air/water blend f rhoWater + (1 - f) rhoAir at the Jacobian's state (CableElBasics::BlendedFluidDensity, sharing WetFractionAt with CalcFoundation, bit for bit) to both drag blocks; the slope of the wet fraction stays out, as documented in NetStructure.h. Tests SimObject.NetStructure_JacobianAboveSurface (full check, net 5 m in air) and SimObject.NetStructure_JacobianAcrossSurface (every mismatch must lie in a vertical-position column, the documented slope): red with the water density (velocity blocks off by up to about 850 times in air), green with the blend.. File: resolved/MARE-0319-cable-drag-jacobian-unblended-rho.md
  • MARE-0321 (TEST) — NetStructureWithConstraints_CablesThreadIndependent no longer runs anything in parallel. Resolved: 3020afb, 2026-10-13 (feature mare-ready-batch, as planned: delete). The test is deleted; the threaded path is covered by NetStructureWithConstraints_Threads4 (NumThreads 4 against serial). Giving the fixture NumThreads with a rounding tolerance would only duplicate that test. The fixture stays (used by MaxAccelerationRemoved).. File: resolved/MARE-0321-cables-thread-independent-test-vacuous.md
  • MARE-0322 (BUG) — The low-Reynolds cable drag correlation has 0.01646 in RbCable/Cable and 0.1646 in TrawlCable. Resolved: 60f1896, 2026-10-01. Both families call cable_hydrodynamics::NormalDragCoefficient (cable/subroutines/CableHydrodynamics.h) with the offset 0.01646. Test: tests/CableHydrodynamics_Test.cpp, TrawlAndRbCableTakeTheSameDragAtLowReynoldsNumber (fails with the old trawl copy), and the fit against the cylinder-drag curve.. File: resolved/MARE-0322-cable-drag-correlation-constant-mismatch.md
  • MARE-0323 (KNOWN-LIMITATION) — The added-mass Coriolis term uses the element velocity, not the velocity relative to the water. Resolved: 8bb9abd, 2026-10-13 (feature mare-ready-batch; owner ruling 2026-10-13: use the velocity relative to the water in the added-mass Coriolis term, Fossen (2011) Sec. 10.3). trawl_cable_water::InWaterForce adds +Ȧ u = ω × (A u) - A (ω × u), A = Ca rho V f (I - N N^T), u the water velocity it samples for the drag (AddedMassRelativeVelocityCorrection), so the term is -Ȧ (v - u). Test CableWaves.ElementDriftingWithTheCurrentTakesNoForceFromItsTurningAddedMass: red without the correction, green with it. No baseline moved: fhsim_marine_elements has no regression baseline of TrawlCable, MooringCable or RundDorg in current or waves, and fhsim_fishery's 258 tests pass unchanged against 3.0.3.. File: resolved/MARE-0323-added-mass-coriolis-absolute-velocity.md
  • MARE-0324 (TEST) — No test of the MooringCable buoy element in waves. Resolved: 4140dde, 2026-10-13 (feature mare-ready-batch). Test SimObject.MooringCable_BuoyFollowsTheWaveAcceleration (fixture MooringCable_BuoyInWaves: a buoy about 15 m deep on a line that hangs slack sideways, a 2.5 s regular wave across the mooring plane): the wave-frequency amplitude of the buoy's sideways motion over the particle's is 1.72, against (1 + Ca) rho V / (m + Ca rho V) = 1.8, accepted within a factor 1.5; with 9b8b91d reverted it is 31.4 and the test fails (checked).. File: resolved/MARE-0324-mooring-buoy-waves-untested.md
  • MARE-0325 (BUG) — Cable/* node inertia lags the wet fraction by one evaluation. Resolved: ed373b1, 2026-10-07 (owner: fix now). The node inertia is that of the evaluated state: InternalCable::CalcDerivatives and AddEndForcesAndInertia read the element masses that AddElementForce (CalcFoundation) has just computed at that state, through NodeInertia, instead of the copy UpdateInertia made in UpdateCable, from the previous evaluation; m_inertiaA/m_inertiaB and UpdateInertia are gone. With NumCores > 1 a port read at another state, out of the water, changed the next OdeFcn. Test CableBranched.OdeFcnDoesNotDependOnAPrecedingPortReadAtAnotherState_MARE0325, red before (junction node accelerations 456.25 against 429.61 m/s²), green after. The analytical Jacobians still take the masses of the last evaluated state (MARE-0356). The stiffness factor's lagged density and the per-call stopwatch went with MARE-0357.. File: resolved/MARE-0325-cable-node-inertia-lags-wet-fraction.md
  • MARE-0326 (KNOWN-LIMITATION) — TrawlCable, MooringCable and RundDorg fix the water density at 1025 kg/m³. Resolved: 0c3bd96, 2026-10-13 (feature mare-ready-batch; owner ruling 2026-10-13, option (a)). trawl_cable_water::kRhoWater is marenv::seawaterDensity, the density the Environment reports (marenv::Environment::GetDensity returns that constant; the Environment has no run-time density), and MooringCable's wet weights and buoy volume use it (m_buoyVolume / (kRhoWater / 1000), bit for bit 1.025). No result change: the full default suite passes unchanged. A configurable density in the Environment would need the read at FinalSetup the issue describes.. File: resolved/MARE-0326-trawl-cable-fixed-water-density.md
  • MARE-0327 (KNOWN-LIMITATION) — HasJacobians of NetStructure and Disk depends on the contact state of the last OdeFcn call. Resolved: 49d6fbc, 2026-10-13 (feature mare-ready-batch; owner ruling 2026-10-13: document the limitation). The Doxygen of NetStructure::HasJacobians and Disk::HasJacobians says it is const and stateless, sees the contact of the last OdeFcn, and that FhSim reads it at model assembly (before any OdeFcn) and at each Jacobian assembly. Pinned by NetStructureBottomContact.HasJacobiansFollowsTheLastOdeFcnNotTheStateBeforeIt and SimObject.Disk_HasJacobiansFollowsTheLastOdeFcnNotTheStateBeforeIt: on the seabed at T = 0, true before the first OdeFcn, false after it.. File: resolved/MARE-0327-hasjacobians-last-contact-state.md
  • MARE-0328 (BUG) — NetStructure and NetStructureWithConstraints leak their elements and constraint solver at teardown. Resolved: 19286be, 2026-10-13 (feature mare-ready-batch). Both nets own their panel and cable elements by std::unique_ptr, NetStructureWithConstraints owns its ConstraintSolver by std::unique_ptr (the solver deletes its rigid elements, constraint sets including m_jointConstr, and its pool) and frees the arrays it allocated, NetStructureSpec deletes the specifications it owns (now non-copyable), and the unused m_aaiCableConn is gone. Test SimObject.NetStructureWithConstraints_TeardownLeavesNoThread (NumCpuCore 2 plus a NetStructure): thread count 44 against 36 before, unchanged after. Under LeakSanitizer (ASan build of library and tests) the same test reported 239 leaked allocations (34736 bytes) before and none after; the 209 net tests are clean under ASan.. File: resolved/MARE-0328-net-structure-teardown-leaks.md
  • MARE-0329 (TEST) — The BottomContact port test does not exercise the M_y and M_z moment terms. Resolved: 08db5fc, 2026-10-13 (feature mare-ready-batch). Test NetStructureBottomContact.PortCarriesEveryMomentComponent: one node off x = 0 and a horizontal stub friction, so every r x F term is non-zero; swapping the two M_y terms in AddBottomForces makes it fail (checked).. File: resolved/MARE-0329-bottom-contact-test-moment-axes.md
  • MARE-0330 (BUG) — The mean-tension filter advances on a retried step at the same time. Resolved: ed373b1, 2026-10-07, with MARE-0357. Net/NetStructure, Net/NetStructureWithConstraints and Net/NetStructureWakeEffect advance the mean tension in PreOdeFcn only at a time later than the last (T <= m_meanTensionTime skips it), as Cable/LumpedMass and Cable/Branched now do (InternalCable::AdvanceMeanTension). FhSim's integrators call PreOdeFcn once per accepted step with increasing time, so this changes no run; a retry from an earlier time still does not roll the filter back. Test NetStructure.PreOdeFcnAdvancesTheMeanTensionOncePerTime_MARE0330, red before (a second call at T = 0.1 changed the node acceleration from 1505.808 to 1505.761 m/s²), green after.. File: resolved/MARE-0330-mean-tension-filter-retried-step.md
  • MARE-0331 (BUG) — The cable normal-drag correlation is discontinuous at Re = 14. Resolved: fhsim_environment 3a2ca11 (fix, tests, doc) and 104da2a (ENV-0106, CHANGELOG), 2026-10-04 (owner delegation 2026-10-04, feature fluid-body-interaction): cylinder_hydro::NormalDragCoefficient takes White's circular-cylinder correlation 1 + 10 Re^(−2/3) (F. M. White, Viscous Fluid Flow, 3rd ed., 2006, eq. (3-225), 1 ≤ Re ≤ 2·10⁵; cited from memory, not checked against the book) below kLowReynolds = 20.582841580981793, the exact crossing with the middle branch, so Cd is continuous there; Re is clamped to 1 below 1 (Cd = 11, slope 0). The 2515 edge stays (0.8811 against 0.8778, 0.38 %). fhsim_environment CylinderHydro_Test red on 5 tests before the change, all 492 pass after. No baseline moved here: full ctest (2 entries) and the 20 VALIDATION cases pass unchanged; fhsim_base full ctest (191) passes unchanged. Corrected 2026-10-04 by fhsim_environment 2f4335f (fix, tests, doc) and e2c49fd (ENV-0106, CHANGELOG): the clamp at Re = 1 (Cd = 11) underestimated Stokes-range drag about 3× against the digitised White/Wiley curve (33.3 at Re = 0.2, 16.4 at 0.5). White's correlation now applies below Re = 1 too (30.2 at 0.2, 16.9 at 0.5, 11 at 1), down to the floor kMinimumReynolds = 1e-6 (Cd = 1 + 1e5, slope 0), which only keeps Cd finite in axial flow; the normal drag ∝ |v_n|^(4/3) tends to 0 regardless, and force and Jacobian stay finite for v_n = 0 and 1e-20 m/s. CylinderHydro_Test red on 3 tests before, all pass after. fhsim_base e0aa58f: CableAddedMass.NeutralRopeFollowsTheWaterAcceleration made drag negligible with a 1e-9 m hydrodynamic diameter, where Cd is now about 1800, and went red (7.9e-6 against 2.6e-6 m/s²); it takes 1e-15 m (below the floor). No baseline moved: here full ctest (2 entries) and the 20 VALIDATION cases, fhsim_base (191) and fhsim_fishery (1 entry) pass, all rebuilt against the corrected header.. File: resolved/MARE-0331-cable-drag-correlation-discontinuous-at-re-14.md
  • MARE-0332 (API) — NetWakeCaster and the wake tests use the deprecated marenv wake API, and a Grid rebuild deep-copies the private grid to snap the velocity. Resolved: 8c92f48, 2026-10-01 (WakeBuilder(frame, grid, params) and Finish(published): a snapped Grid rebuild no longer copies its grid; the private Direct and the lumped field are BlendedSourceSetWake(params) publishing SourceSets with Publish(sources, velocity, t0, blendTime, seabedDepth); the tests place their discs the same way; no deprecation warning from ME; bit-identical: the M3 hexfloat probe of NetWakeCaster is identical, 350 SimObject result files unchanged, 383/383 suite tests pass). File: resolved/MARE-0332-net-wake-caster-deprecated-marenv-wake-api.md
  • MARE-0333 (ARCHITECTURE) — The wake and flow wiring is copied between NetStructure and NetStructureWithConstraints. Resolved: 218990c, 2026-10-01 (src/net/NetFlowInteraction.{h,cpp}, the net counterpart of BodyFlowInteraction: it reads the wake parameters, registers the NetWakeCaster with CastWake, rebuilds and takes the other wakes at the panel centroids and cable midpoints in PreOdeFcn (R46, R47) and answers the waked current plus the node-averaged waves at a point (R62); WakePanelSource gains NumCables/CableNodes (defaults: none); both nets keep only their node accessor and node wave velocities; bit-identical: the M3 hexfloat probe is identical, 339 SimObject result files unchanged (11 cable outputs that differ run to run without any net excluded), 383/383 suite tests pass). File: resolved/MARE-0333-net-flow-wiring-duplicated.md
  • MARE-0334 (ARCHITECTURE) — Dead net_panel_setup::WaterVelocity helpers teach GetWakedFlow for the panel inflow. Resolved: 595f1b2, 2026-10-01 (both net_panel_setup::WaterVelocity overloads and the header sentence that said the setup samples the waked flow are gone; the header names NetFlowInteraction; build and 383/383 suite tests pass, the M3 probe is identical). File: resolved/MARE-0334-dead-net-panel-water-velocity-helpers.md
  • MARE-0335 (API) — The net-only wake attributes are ignored silently without CastWake, and WakeCutoff is read twice. Resolved: a952e98, 2026-10-01 (net_wake::ReadWakeSettings takes the grid cutoff from WakeSettings::cutoffGiven (WakeCutoff is read once) and, without CastWake, logs WakeEvaluation, WakeLength, WakeGrid and WakeXStartFactor as ignored when given (LogParameterInfo, one line each, as ENV-0070); test ReadWakeSettingsLogsIgnoredNetAttributesAndReadsWakeCutoffOnce red before (no line, 2 WakeCutoff queries), green after; 384/384 suite tests pass, the M3 probe is identical). File: resolved/MARE-0335-net-wake-attributes-ignored-silently.md
  • MARE-0336 (BUG) — A net's wake caster builds silently from a zero current where the current lookup fails, and treats a clamped current as failed. Resolved: 3a76af8, 2026-10-01 (NetWakeCaster accepts a usable (marenv::IsUsable) current at the source and the panels; where a current field fails at a panel it keeps the partial sum for the private field, publishes an empty lumped field, both at once without a blend, does not count the build (so Freeze cannot converge or freeze on it), logs once per episode and once at the recovery, and while failing only re-checks the lookups; decision (A) above; tests ClampedCurrentIsUsable_R122, FailedCurrentLookupCastsNoLumpedWakeUntilItRecovers_R122 and FailedCurrentLookupDuringAFreezeRoundWaitsForTheBlend_R122 red before (the clamped current zeroed: no lumped source; the failed build counted, cast and unlogged), green after; PanelInflowKeepsThePartialCurrentSum_R122 pins R122 (i) through NetFlowInteraction (green before and after, via fhsim_environment ENV-0064); the post-freeze case is MARE-0339; 388/388 suite tests pass, the M3 probe is identical). File: resolved/MARE-0336-net-wake-caster-failed-current-lookup.md
  • MARE-0337 (BUG) — Under Freeze a net converges on its private field only, so rows 3 and later of a farm freeze on stale upstream wakes. Resolved: 0df0e25, 2026-10-01 (the net's Freeze change is max(max|dR|, |dM|/M) of the lumped source (the schedule's label names both; the rebuild line gives both parts; NetWakeCaster::LastChange replaces LastRatioChange); the lumped source is built before Conclude (bit-identical for Off and Periodic: the M3 probe differs only in the Freeze cases); test FarmRowsFreezeOnTheConvergedUpstreamWakes_R121 (rows A-D of screens, Sn 0.4, 6 m apart, WakeIterations 4, against one Off build per row in flow order) red before: rows C and D froze after 2 builds at M 0.623 and 0.595 m^2 against 1.013 and 0.961 (-38.5 %, -38.1 %); green after: every row equal (row k freezes after k + 2 builds), and with WakeIterations 2 rows C and D log 'without converging'; the two single-net SimObject Freeze tests follow in 'Tests for R121', fa0b3e9). File: resolved/MARE-0337-net-freeze-ignores-lumped-change.md
  • MARE-0338 (DOCUMENTATION) — The net wake docs contradict the code: WakeCutoff roles, GetWakedFlow for the panel inflow, farm guidance, stand-in recipe. Resolved: c8b854a, 2026-10-01 (main_marine_elements.md: both WakeCutoff roles (the 'Disk or Sphere applies none' sentence is gone), the R121 WakeTolerance and WakeIterations rows, the ignored-without-CastWake sentence, the farm rule in Schedule (WakeIterations >= N rows) and the stand-in recipe (M, area, rear centre from the rebuild line, WakeXStartFactor 0); NetStructure.h and NetStructureWithConstraints.h: GetWakedCurrent with the net's query plus the node-averaged waves (R62, now also on the WithConstraints page), the WakeCutoff, WakeTolerance and WakeIterations options, the R121 Freeze measure and the R122 failed-lookup behaviour; NetHydroCageFarm.xml: the farm rule and the stand-in recipe in its comment; migration_3_0.md and net_hydrodynamics_methods.md name GetWakedCurrent plus the node-averaged waves; docs only, 389/389 suite tests pass). File: resolved/MARE-0338-net-wake-docs-contradict-code.md
  • MARE-0339 (KNOWN-LIMITATION) — A current lookup that fails after a net's wake froze (or after its Off build) is not seen, and nothing rebuilds when it recovers. Resolved: 159c2b2, 2026-10-01 (widened by the E3/M3 review, docs/review/wake-audit/REVIEW-env-E3-me-M3.md P1-1, P2-1 to P2-3, to the semantics of fhsim_environment's LumpedWakeCaster, ENV-0082: NetWakeCaster::Update checks the current lookups at the source and the panel centroids before WakeSchedule::Due on every step, also frozen, after the Off build and between Periodic rebuilds, and skips Due for the episode; HoldForFailedLookup logs once per episode and makes the MARE-0336 build without a lumped wake once, when no blend runs (WakeSchedule::Blending) and a build is or was due; that build resets m_lastLumpedSource and m_previousMomentum; EndFailedLookup calls WakeSchedule::RebuildDueAt in every mode when the episode emptied a published lumped wake. CollectPanels no longer reports the failure (P2-8), MakeFrame no longer sets m_lastFrame. Tests FailedLookupAfterAFreezeDropsTheLumpedWakeAndRebuildsAtTheRecovery_MARE0339, FailedLookupAfterTheOffBuildDropsTheLumpedWakeAfterItsBlendAndRebuildsAtTheRecovery_MARE0339, FailedLookupBetweenPeriodicRebuildsDropsTheLumpedWakeAndRebuildsAtTheRecovery_MARE0339 and FailedCurrentLookupDuringAFreezeRoundWaitsForTheBlend_R122 (updated: new round at the recovery) red before, green after; RepeatedFailedLookupsMidRoundRestartTheFreezeRoundEachTime_MARE0339 (three episodes under Freeze mid-round) added; a hexfloat probe of Off, Periodic (relaxed) and Freeze, Grid and Direct, with a moving net, is identical before and after; 393/393 suite tests and the validation suite (20 passed, 1 skipped) pass). File: resolved/MARE-0339-net-wake-failed-lookup-after-freeze.md
  • MARE-0340 (ARCHITECTURE) — NetWakeCaster copies the lumped relaxation and |dM|/M, and three loops compute the panel centroids. Resolved: 48508f2, 2026-10-02 (the casters' formulas move upstream: marenv RelaxLumpedSource (MENV-0061, pinned bit for bit there against a verbatim copy of RelaxLumped, speed guard kept) and fhsim_environment MomentumChange (ENV-0083, unit-tested there); PanelCentroid replaces the three centroid loops with the same expression (c0 + c1 + c2) / 3.0; a hexfloat dump of NetWakeCaster (two screens, Grid and Direct, Periodic and Freeze, WakeRelaxation 1 and 0.4, a moving net with a varying solidity: every lumped source, the schedule's change, the private and lumped field at 3,500 points each fifth step, the rebuild lines without the timing; 68,808 lines) is byte-identical before and after (/tmp/nethydro-build/c1b/probe-me-{before,after}.txt); the type is renamed to marenv's SourceSetWake (MENV-0060) in the same commit; the default ctest and the VALIDATION suite pass with the same counts as before). File: resolved/MARE-0340-net-wake-caster-copies-lumped-math-and-centroids.md
  • MARE-0341 (ARCHITECTURE) — NetWakeCaster keeps its own copy of the failed-lookup episode and two copies of M_prev. Resolved: d51e878, 2026-10-02 (fhsim_environment ENV-0084; the five failed-lookup tests (FailedCurrentLookupCastsNoLumpedWakeUntilItRecovers_R122, FailedCurrentLookupDuringAFreezeRoundWaitsForTheBlend_R122, FailedLookupAfterAFreezeDropsTheLumpedWakeAndRebuildsAtTheRecovery_MARE0339, FailedLookupBetweenPeriodicRebuildsDropsTheLumpedWakeAndRebuildsAtTheRecovery_MARE0339, RepeatedFailedLookupsMidRoundRestartTheFreezeRoundEachTime_MARE0339), updated to the one wording, red against the old caster, green after; a hexfloat dump of NetWakeCaster with failed lookups (Grid and Direct, Off, Freeze and Periodic, WakeRelaxation 1 and 0.4, WakeBuildTime 0 and 0.75 s, five failure episodes including one before the first build and one during a blend; every lumped source, change, rebuild count, Freeze state and both fields at 612 points each every third step, 382,776 lines) is byte-identical before and after with the log lines left out, which map one to one onto the new wording (/tmp/nethydro-build/f1/probe-me-{before,after}.txt); 393/393 tests pass outside *_VALIDATION). File: resolved/MARE-0341-net-wake-failed-lookup-episode-copied.md
  • MARE-0342 (ARCHITECTURE) — A net with CastWake off and no other wake field computes its sample points and takes an empty composition at every step. Resolved: 9b08480, 2026-10-02 (NetFlowInteraction::TakeExternalWakes computes the sample points only when fhsim_environment's ExternalWakes::NeedsTake (ENV-0088) says a registered field other than the net's own exists; test NetFlowInteraction.PreOdeFcnReadsNoNodeWithoutAnyWakeField_MARE0342 red before (8 node position reads, expected 0), green after, and PreOdeFcnTakesTheWakesOfAnotherObject_MARE0342 guards the other side; characterisation dumps C1 to C9 identical before and after). File: resolved/MARE-0342-net-take-without-other-field.md
  • MARE-0343 (ARCHITECTURE) — A net without waves still queries the wave field at every node and cable end in every right-hand side. Resolved: 4387243, 2026-10-02 (cable_surface::WavesWithElevation gives a null wave field when MaxWaveElevation() is not above 0, marenv MENV-0064; UpdateNodeWaveVelocities and AddCableForceRange of Net/NetStructure and Net/NetStructureWithConstraints use it, so the node wave velocities are zero-filled and the cable wave acceleration is not queried; test NetStructureWaves.NoWavesAreNotQueriedInOdeFcn_MARE0343 red before (3 velocity queries for the panel net, 4 queries for the cable net, expected 0), green after, with XDot equal bit for bit to that of a field with an unknown bound; characterisation dumps C1 to C9 identical before and after; the OdeJacobian's own wave excitation term is unchanged). File: resolved/MARE-0343-net-wave-kinematics-without-waves.md
  • MARE-0344 (ARCHITECTURE) — The receiver cutoff, the body submergence with its gated surface queries and the sphere drag are written here, though they need only fhsim_environment. Resolved: 78aac71, 2026-10-02 (batch B2: ExternalWakeCutoff.h, hydrodynamics/BodySubmergence.h and the gated half of cable/subroutines/CableSurface.h forward to fhsim_environment (ENV-0089, ENV-0090); SphereBase::DragForce and kAddedMassCoefficient forward to environment::sphere_hydro (ENV-0091); NetFlowInteraction and BodyFlowInteraction call environment::wake::ReceiverCutoff; the 7 BodySubmergence tests moved to fhsim_environment; tests EnvironmentForwarders.*_MARE0344 red before (the old names were separate functions: 3 of 4 failed), green after; characterisation dumps C1 to C9 identical before and after). File: resolved/MARE-0344-receiver-cutoff-body-submergence-sphere-drag-below-me.md
  • MARE-0345 (DOCUMENTATION) — The nets' docs and tests describe the own private field as sampled live in every evaluation; with R135 it is held per step. Resolved: 6217c0a, 2026-10-02 (batch B3, owner ruling R135, with fhsim_environment ENV-0092: the C3 parameter ExternalWakeUpdate documented in NetStructure.h, NetStructureWithConstraints.h, doc/user/main_marine_elements.md, doc/user/net_hydrodynamics_methods.md and NetFlowInteraction; test SimObject.NetStructure_WakeOwnFieldHeldPerStepDiffersLittleFromLive_R135 red before (with the B2 set Step and Evaluation give the same states, difference 0, expected > 1e-10; B3-me-red.log), green after with ENV-0092 (1.6e-5); NetStructure_WakeOwnFieldHeldPerStepIsLiveForEuler_R135 guards Euler_i bit for bit). File: resolved/MARE-0345-net-own-private-field-held-per-step.md
  • MARE-0346 (ARCHITECTURE) — NetWakeCaster holds a copy of the marching wake build that fhsim_environment now owns. Resolved: 3c7f08b, 2026-10-02 (batch B4, design R5: NetWakeCaster wraps fhsim_environment's WakeCaster (ENV-0093) over a panel adapter; net_wake::WakeSettings, WakeEvaluation, ReadWakeSettings are the environment's; the Norm/Require/Format copies are gone (fhsim_environment WakeCommon.h, now installed). Test EnvironmentForwarders.TheNetWakeSettingsAreTheEnvironmentOnes_MARE0346 failed before (B4-me-red.log, 2 of 3 checks), passes after; NetWakeCaster_Test (43) unchanged and passing; characterisation dumps C1 to C9 identical to the post-R135 reference /tmp/char/B4-base). File: resolved/MARE-0346-net-wake-caster-wraps-environment-wake-caster.md
  • MARE-0347 (ARCHITECTURE) — NetFlowInteraction and BodyFlowInteraction each wire the wake caster, the take and the cutoff by hand. Resolved: 76b694a, 2026-10-02 (batch B6, design R3 §3.4: both are fhsim_environment's BodyWake (ENV-0095) plus their wave parts; net_wake::PanelSourceSet is public in NetWakeCaster.h with the sample points of the panels, then the cables. Test NetFlowInteraction.PanelSourceSetSamplesThePanelsThenTheCables_MARE0347 did not compile before (no PanelSourceSet, B6-me-red-build.log), passes after; BodyFlowInteraction_Test, BodyWake_Test, NetFlowInteraction_Test (2) and NetWakeCaster_Test unchanged and passing; characterisation dumps C1 to C9 identical to /tmp/char/B6-base). File: resolved/MARE-0347-flow-interactions-wire-wakes-by-hand.md
  • MARE-0348 (DOCUMENTATION) — The net docs describe the wake wiring of before BodyWake, and NetWakeCaster's status and WakeEvaluation None are undocumented. Resolved: c65a30d, 2026-10-02 (batch B7, B6 review P2 and design §2.1 C3 (b): the net headers, NetWakeCaster.h, the methods manual and the user guide name NetFlowInteraction, BodyWake::Update and BodyWake::Query(); NetWakeCaster is documented as kept for its tests and outside code and removed in 5.0; WakeEvaluation None is documented for both nets; the bench comment names fhsim_environment's WakeCaster. Test NetWakeCaster.WithoutAPrivateFieldTheNetCastsItsUnshadedForce_MARE0348 pins the documented None behaviour of a net; it passes with fhsim_environment from ENV-0094 on, so it has no red run). File: resolved/MARE-0348-net-docs-describe-pre-bodywake-wiring.md
  • MARE-0349 (DOCUMENTATION) — The nets' and bodies' docs describe the held wakes without the live blend weight of R136, and MARE-0122 does not record what R135 and R136 did to its collapse. Resolved: 677389d, 2026-10-02 (batch B8, owner ruling R136, with fhsim_environment ENV-0099 and marenv MENV-0066: the C3 parameter ExternalWakeUpdate in NetStructure.h (class comment and @addoption), NetStructureWithConstraints.h, Disk.h, Sphere.h, doc/user/main_marine_elements.md and doc/user/net_hydrodynamics_methods.md says the held samples take the blend weight of each evaluation's time; MARE-0122 gains a note with the S6 numbers of B2, B3 and B8; CHANGELOG. No code change in this library; its suite and *_VALIDATION pass with the B8 environment; the moved numbers are in "Baselines for R136"). File: resolved/MARE-0349-held-wakes-live-blend-weight-docs.md
  • MARE-0350 (ARCHITECTURE) — NetFlowInteraction::FlowAt asks the panel adapter for a point's nodes through two virtual calls at every evaluation. Resolved: 63591fb, 2026-10-03 (batch C-perf: NetFlowInteraction::FinalSetup holds each sample point's nodes, from PanelSourceSet::SamplePointCarriers, and FlowAt reads them; the net's topology is fixed before FinalSetup. Test NetFlowInteraction.FlowAtAveragesTheWavesOverThePointsNodesWithoutReadingTheTopology_MARE0350 red before (FlowAt read the topology twice, /tmp/nethydro-build/Cperf-me-red.log), green after; PreOdeFcnTakesTheWakesOfAnotherObject_MARE0342 now expects each of the 4 nodes read once (fhsim_environment ENV-0100) instead of 8 reads; characterisation C1 to C7 identical to /tmp/char/B9-base). File: resolved/MARE-0350-net-flow-reads-topology-per-evaluation.md
  • MARE-0351 (ARCHITECTURE) — The library keeps copies and forwarders of the laws and the casting path fhsim_environment now owns. Resolved: 417126a, 992af6a, 7194757 (both reverted by 1d82b7b), c310ee3, 7a74300, 2026-10-04 (feature fluid-body-interaction batch B3). 417126a: the library includes fhsim_environment's laws and casting path; the copies, forwarders and duplicated tests are deleted (src/hydrodynamics/, net/NetSolidity.h, net/DiskDrag.h, the drag of DiskBase.h and the forwards of SphereBase.h, cable/subroutines/CableSurface.h and CableHydrodynamics.h, net/ExternalWakeCutoff.h, net/BodyFlowInteraction.*, net/NetWakeCaster.*); Net/Sphere/Net/Disk hold SphereCaster/DiskCaster and BodyFlowInteraction; NetWakePanels<Net> replaces the two adapters, with a shared Environment lookup naming the class; the net cables' edge-on disc drag is disk_hydro::DragForceTangential (the face-on annulus of MARE-0074 stays inline: disk_hydro::DragForceNormal has the face area π/4 D (D − d/π), owner question whether fhsim_environment should gain the annulus); RbCable/Cable takes NormalDragCoefficientWithLift. Bit for bit except the rounding of the Net/Sphere Jacobian (owner: bit identity dropped); no baseline moved. Tests 422 (22 disabled) → 263 (11 disabled), 0 failures; the 20 VALIDATION cases pass. 992af6a (owner ruling 2026-10-04, since withdrawn): CableSegmentWaterForce.h, CableRMWaterLoad.h (water branch) and ElementWaterLoad.h took Cd |v_n| v; 7194757 moved the SimObject.RundDorg_Smoke baseline for it. Both are reverted by 1d82b7b (owner ruling 2026-10-04, superseding: the independence principle); no result change remains from them. c310ee3: tests CableModelsHydrodynamics.{TrawlCable,RbCable,RbCableElement}DragFollowsTheIndependencePrinciple_MARE0351 replace the tests of the withdrawn law: red with 992af6a's assembly (3 failed), green on the restored one. SimObject.RundDorg_Smoke is checked at 30 s, settled, instead of 1 s in the clump's initial fall (owner-accepted recommendation; line-end direction asserts restored, the mirror symmetry kept, the settled end forces pinned: Line1ForceVector (200.667, −37.4005, 53.6619) N, Line2 its mirror, MainForceVector x −654.697 N, z 4945.58 N; 7a74300). Full ctest 266 (11 disabled), 0 failures; VALIDATION 20 passed. Left open: MARE-0353 (the law validation pages). MARE-0352 (CableElBasics and the CableRM air branch under the withdrawn ruling): won't fix.. File: resolved/MARE-0351-b3-consume-environment-laws.md
  • MARE-0352 (KNOWN-LIMITATION) — The net cables, cable/Cable and CableBranched apply the normal drag to v_n only, unlike the 2026-10-04 cable drag ruling. Resolved: won't fix, 2026-10-04. The ruling it would have extended (the normal cable drag Cd·|v_n| on the full relative velocity v) was withdrawn the same day; the superseding owner ruling is the independence principle, normal drag Cd·|v_n|·v_n plus a separate axial skin friction Ct·|v_t|·v_t (DNV-RP-C205, Morison, OrcaFlex), and the three assemblies that had taken the withdrawn law are reverted to it (MARE-0351). Both models named below already follow it: CableElBasics applies the normal drag to each end's v_n and the skin friction |v_t| v_t to the element mean (src/cable/subroutines/CableElBasics.cpp:451-470), the air branch of RbCable/Cable takes Cd |V_n| V_n + Ct |V_t| V_t (src/RMCable/CableRMWaterLoad.h:117). Nothing to change; the local branch wip/cableelbasics-drag-on-v, which held only tests for the withdrawn ruling, is deleted.. File: resolved/MARE-0352-net-cable-drag-on-normal-velocity.md
  • MARE-0353 (DOCUMENTATION) — The load-law validation pages are generated from tests that moved to fhsim_environment. Resolved: feature mare-0110-solidity-lift, 2026-10-13. The load-law pages (mf2022.md, rudi_loland.md, l9_fit.md and the L8 part of zhan2006.md) and their part of tests/plot_validation.py moved to fhsim_environment (its doc/user/validation/, anchors fhsim_environment_validation_*, generated by its tests/plot_validation.py from its PanelLoadLaw_* tests, regenerated with the MARE-0110 law), with the guide "How to add a new load law" (its DEVELOPING.md). The SimObject-level pages stay here (zhan2006.md S2/W9/S6, lader2009.md, towed_panel_s1.md, trawl.md; anchor fhsim_marine_elements_validation kept), regenerated by this tests/plot_validation.py, which no longer reads any PanelLoadLaw_* suite. Both reports point to each other (environment doc/user/hydrodynamics.md Section 11.4 and its validation README; here the README, testing_report.md, main_marine_elements.md and DEVELOPING.md).. File: resolved/MARE-0353-law-validation-pages-without-tests.md
  • MARE-0354 (KNOWN-LIMITATION) — WaveHull aliases waves shorter than twice the sample spacing. Resolved: 4e3173b, 2026-10-13 (feature mare-ready-batch; owner ruling 2026-10-05: document as a model limitation). Pinned by WaveHull.WaveOfTheSampleSpacingAliasesToFullBuoyancy_MARE0354: a regular wave of length d = L / sqrt(8) at SampleLevel 2 gives heave transfer 1 (the exact rectangle 0.06); the model's Short waves section names the test.. File: resolved/MARE-0354-wave-hull-short-wave-aliasing.md
  • MARE-0355 (BUG) — NetStructure BottomContact filter advances on every port read. Resolved: 2026-10-06 (owner ruling: a first-order filter with a time constant in seconds, default 0.01 s). Net/NetStructure filters BottomContact in AcceptedStep with the new parameter BottomContactTimeConstant (0 is no filter); the port only returns the filtered value. Net/NetStructureWithConstraints and the deprecated Net/NetStructureWakeEffect never compute a contact (their port is always zero), so their per-read filter is left as is. Tests NetStructureBottomContact.ReadingThePortDoesNotChangeIt, FilterHasTheGivenTimeConstant, NegativeTimeConstantIsRejected.. File: resolved/MARE-0355-net-bottomcontact-filter-per-read.md
  • MARE-0356 (BUG) — Cable/Branched OdeJacobian reads its input ports with the local state slice. Resolved: ddf9ed7, 2026-10-07 (owner instruction 2026-10-07: investigate and choose; no FhSim core change needed). Option 1: Cable/LumpedMass, Cable/Branched and Net/Disk read their input ports in OdeJacobian with the model's state vector, rebuilt from the slice with their first state index (as NetStructure); Cable/LumpedMass no longer runs its common calculation there (MARE-0359 evaluates the elements directly), and Trawl/TrawlBeam no longer runs it, as its Jacobian uses none of it. Valid wherever FhSim calls OdeJacobian: JacobianAssembler and SimObjectJacobianBlock pass state + offset of the model vector, and the checker's state-offset samples rebuild the model with the padding object first, so the object's first state index includes the padding and the vector is the padded one (all Jacobian tests pass with the shift). The trace above was wrong: the source's initial state had a sign error (G x = (0, 5.106, −10.426), which is what the probe printed); with x = (−0.4255, 0.8511, 2.5532) a BDF run (dense, SUNDIALS) of the wired input saw the right end at all 46 OdeJacobian calls at fec163f (max relative deviation 7e-15), and CheckJacobiansFromXml passes it before and after the fix: FhSim evaluates the model at the Jacobian's state first (the checker primes the ports; the assembler calls OdeFcn when it differences any column; CVODE calls f before lsetup), so the ports are cached and no result changed. Tests Cable.OdeJacobianReadsItsPortsWithTheModelState_MARE0356, CableBranched.OdeJacobianReadsItsPortsWithTheModelState_MARE0356, Disk.OdeJacobianReadsItsPortWithTheModelState_MARE0356 (the port read with the slice, red before), TrawlBeam.OdeJacobianLeavesTheCommonCalculationOfItsPorts_MARE0356 (ShipForce 201.1 instead of 0.7 after OdeJacobian, red before), and SimObject.CableBranched_JacobianWithAWiredEnd_MARE0356 (the wired input through the checker; green before and after).. File: resolved/MARE-0356-cable-jacobian-reads-ports-with-local-state.md
  • MARE-0357 (BUG) — Cable/* advance the dynamic-stiffness mean tension at every evaluation. Resolved: ed373b1, 2026-10-07 (owner ruling: the net's pattern, R64 and MARE-0224). Cable/LumpedMass and Cable/Branched advance the mean tension in PreOdeFcn (new InternalCable::AdvanceMeanTension), once per new time, from the step's start state after applying the Length inputs at it; OdeFcn and the port calculations only read it. CableElDynStiff::UpdateLength no longer advances it and the per-call stopwatch is gone. The stiffness factor takes the unblended water density (m_rhoWaterFull), so it depends on the element length alone. Cable/LumpedMass's OdeFcn applies its Length input at its own (T, X), as Cable/Branched does since MARE-0037. Tests Cable.OdeFcnDoesNotDependOnPortReadsWithinTheStep_MARE0357 and Cable.PreOdeFcnAdvancesTheMeanTensionOncePerStep_MARE0357, red before (the derivatives after three port reads at other times and states differed from those without; a second step did not change the mean tension, as PreOdeFcn did nothing), green after.. File: resolved/MARE-0357-cable-mean-tension-per-evaluation.md
  • MARE-0358 (BUG) — The dynamic-stiffness mean tension moves away from the real tension. Resolved: 7b317e4, 2026-10-07 (owner ruling 2026-10-07: alternative B, replacing option A of 316d8bd). The mean tension is a first-order filter towards the element's own tension, T = eps · eFactor · EA + (1 − eFactor) · m (bounded to [0, MaxTension]; the difference bounded at a tenth of MaxTension, as before), with the time constant AdaptationPeriod, m += (1 − exp(−Δt/AdaptationPeriod)) · (T − m), exact for a tension constant over the step, starting at MeanTension; a step of zero leaves it. The PID controller is gone. Under a constant load the mean tension reaches the load with the time constant AdaptationPeriod and the strain becomes load / EA. Option A (target strain · EA, 316d8bd) has the same end state but under a load the time constant eFactor · AdaptationPeriod (1.8 ms for FhSim_trawlwriter's bridles) and overshoots: the middle bridle of Alfredo5_2 peaked at 100 kN, the MaxTension/10 bound. Tests CableElDynStiff.MeanTensionStartsAtItsSetting_MARE0358 (red before both: 0 instead of 5000) and CableElDynStiff.MeanTensionReachesAConstantLoadWithTheAdaptationPeriod_MARE0358 (end B a massless node in equilibrium with 1000 N, AdaptationPeriod 2 s, steps of 0.01 s: 632.1 N after one period, the load after ten; red with option A: 1000 N after one period). No baseline of this library, fhsim_fishery or FhSim_trawlwriter compares a result with AdaptationPeriod ≠ 0; the effect on the trawlwriter systems (bridles with 0.1 s) is in the workspace's FEATURE.md.. File: resolved/MARE-0358-mean-tension-filter-diverges.md
  • MARE-0359 (BUG) — InternalCable's Jacobian takes the masses of the last evaluation and leaves out the mean tension. Resolved: 6887a93, 2026-10-07. Cable::OdeJacobian and CableBranched::OdeJacobian evaluate the elements at their own state first (InternalCable::EvaluateElementsAt; Cable/Branched also applies its Length inputs and PrepareSections there and sums its junction inertias from InternalCable::EndInertia); the Jacobian's tension is eps · eFactor · EA + (1 − eFactor) · meanTension, signed, as in AddStructuralForces, with no derivative of the mean tension (held through the step). The four tests below are green; the Jacobian checks of Cable/LumpedMass, Cable/Branched, Net/Disk and Trawl/TrawlBeam pass at their tolerances, and a BDF run of the wired Cable/Branched input ends normally and agrees with a tight RK45 run at 0.05 s to 5e-5 relative in the positions and 0.2 % in the velocities.. File: resolved/MARE-0359-internalcable-jacobian-masses-and-mean-tension.md
  • MARE-0360 (BUG) — An absolute BinaryFile is joined to the input file's directory. Resolved: 240424e, 2026-10-07. Both readers open the path net_input::NetFilePath gives: an absolute BinaryFile as it is, a relative one in the input file's directory. The two tests below are green (the absolute one red at the issue's HEAD).. File: resolved/MARE-0360-net-binaryfile-absolute-path.md
  • MARE-0361 (BUG) — A panel whose aft and front edges are both under 20 meshes meshes into two-node elements. Resolved: c03d0e0, 2026-10-08. Fix 1 (owner ruling 2026-10-08, option A): ReadNetSpec refuses a panel of only one section, codend included, whose end edges are both under m_dMinNodeSeparation = 20 meshes (T1 and T2 times MeshCountFactor), naming the file and line of the section. That is exactly the case of two-node elements: a belly element loses its front side node only on the panel's front section and its back side node only on section 0 (CTrawlNetAssembler.cpp:1209-1227), splitter and wing elements always keep at least three. A splitter with no wing section in front, which read past the wing nodes (PanelNodes_PRTWING[0] of an empty vector) and crashed, is refused too (MARE-0362). Tests TrawlNetSpecReader.OneSectionPanel_BothEndEdgesUnder20Meshes_IsRefused_MARE0361 and ..._EdgesUnder20MeshesAfterMeshCountFactor_IsRefused_MARE0361 (red at 09bc894, green), ..._OneEndEdgeOf20Meshes_MeshesIntoTriangles_MARE0361 and TrawlNetSpecReader.TwoSectionPanel_NarrowEndEdges_MeshesIntoTriangles_MARE0361 (accepted, elements of three nodes). No accepted net changes.. File: resolved/MARE-0361-trawlspec-narrow-end-edges-degenerate.md
  • MARE-0362 (BUG) — A splitter with no wing section in front of it crashes the mesher. Resolved: c03d0e0, 2026-10-08. ReadNetSpec (TrawlNetSpecReader.cpp, CheckMeshable) refuses a splitter as the panel's front section, naming the file and line of the section. Test TrawlNetSpecReader.SplitterWithoutWingSections_IsRefused (crashed at 09bc894, green).. File: resolved/MARE-0362-trawlspec-splitter-without-wings.md
  • MARE-0363 (BUG) — A splitter as a panel's aft section with an aft edge under 20 meshes gives elements with one node twice. Resolved: a50950d, 2026-10-08. Fix 1 (owner ruling 2026-10-08): ReadNetSpec (CheckMeshable) refuses a panel whose section 0 is the splitter with T2 (times MeshCountFactor) under m_dMinNodeSeparation = 20 meshes, naming the file and line of the section. That is exactly the case of a repeated node: HasTriangularAft joins the first side nodes to the centre node (CTrawlNetAssembler.cpp:195-198), and only the splitter elements (:1238-1290) take the aft side nodes without a check; a belly section 0 drops them (bIsAftTriangle), and wing sections are never section 0. Tests TrawlNetSpecReader.AftSplitterWithNarrowAftEdge_IsRefused_MARE0363 (red at f232ad2, green) and TrawlNetSpecReader.AftSplitterWithAftEdgeOf20Meshes_MeshesWithoutARepeatedNode_MARE0363 (accepted, no element with a repeated node).. File: resolved/MARE-0363-trawlspec-aft-splitter-narrow-edge.md
  • MARE-0364 (KNOWN-LIMITATION) — A net's attached spheres and disks see only the net's lumped wake, not its private field. Resolved: 9d7abb0, 2026-10-13 (feature mare-ready-batch; owner ruling 2026-10-11: document, no implementation). Documented on the Sphere, Disk and NetStructure pages and in ADR 0006; pinned by the existing NetWake.BodyInsideTheNetSeesNoWakeOfItsFrontPanels_MARE0364. Wake groups remain the route to lift it.. File: resolved/MARE-0364-attached-bodies-see-only-lumped-net-wake.md
  • MARE-0365 (KNOWN-LIMITATION) — Trawl doors and clump weights take full buoyancy and drag whatever their submergence (no wet fraction). Resolved: 863c97e, 2026-10-13 (feature mare-ready-batch; owner ruling 2026-10-13: document only, closed as a documented limitation). The TrawlCable and RundDorg pages list it under Known limitations; the law comments said so already.. File: resolved/MARE-0365-door-clump-no-wet-fraction.md
  • MARE-0366 (KNOWN-LIMITATION) — Trawl doors and clump weights take no wave inertia (Froude-Krylov, added mass). Resolved: 863c97e, 2026-10-13 (feature mare-ready-batch; owner ruling 2026-10-13: document only, closed as a documented limitation). The TrawlCable and RundDorg pages list it under Known limitations.. File: resolved/MARE-0366-door-clump-no-wave-inertia.md
  • MARE-0367 (BUG) — The damping moment of trawl doors and clump weights has the dimension of a force (Area*Area*0.7). Resolved: 863c97e, 2026-10-13 (feature mare-ready-batch; owner ruling 2026-10-13: option 2, keep the term and document it as a numerical damper). The TrawlCable and RundDorg pages and the DoorHydrodynamicForce / ClumpWeightHydrodynamicForce comments give the term, -c rho A² |ω| (1.28 ω_xy + 0.1 ω_z) with c = 0.35 (plate) and 0.0875 (clump weight), its dimension (a force) and that the cable elements' spin damping is a numerical damper too. No code change.. File: resolved/MARE-0367-door-clump-damping-moment-dimension.md
  • MARE-0368 (KNOWN-LIMITATION) — TrawlCable and RundDorg cable elements, doors and clump weights hard-code g = 9.81. Resolved: 0c3bd96, 2026-10-13 (feature mare-ready-batch; owner ruling 2026-10-13, with MARE-0326). The new trawl_cable_water::kGravity is marenv::gravity, used in the cable, door and clump laws, the sediment branch and the door weight (TrawlCableConstraintSets.cpp). Bit for bit; the full default suite passes unchanged.. File: resolved/MARE-0368-trawl-cable-fixed-gravity.md
  • MARE-0369 (BUG) — The clump weight's drag and damping use its lateral surface, π times the projected area. Resolved: cead6fd, 2026-10-12. File: resolved/MARE-0369-clump-drag-area-lateral-surface.md
  • MARE-0370 (BUG) — The example trawl_mooring_interaction diverges in its first seconds. Resolved: this commit, 2026-10-13 (feature mare-owner-rulings). Owner rulings 2026-10-13: (1) option (b): drop the 8 sliver panels of the last codend section and leave the codend open; (2) bridles: at most 5 elements per segment and at least 10 m per element, n = clamp(floor(L / 10 m), 1, 5). Applied the prepared repair (archive/features/mare-ready-batch/docs/MARE-0370-proposed-repair.patch: constant mooring end points, the net's initial shape as Net.Pos_k, the removed state file, Euler_i at 1 ms, the cut-down fixture and smoke test) without its drawstring: the eight 0.1 m seam cables (El121–El128) are removed, so vonin2016_pelagic.xml (example and fixture copy) has no sliver panels and an open codend. The bridles of the example, its CastWake variant and the fixture have 5 elements each (220 m and 250 m: floor(L/10) ≥ 5); the ruling was read as applying to the bridles, the open point; the warps (1950 m in 2000 elements, 800 m in 40) and the mooring line keep their resolution. Verified (Release, Linux, FhSim CLI, Euler_i 1 ms): the full example is finite to 60 s (about 6.5 s wall per simulated second; at 60 s winch forces about 10 kN per side), the full-scale CastWake variant finite to 30 s, and SimObject.TrawlMooringInteraction_Smoke (100 warp elements, 30 s) passes in about 38 s wall.. File: resolved/MARE-0370-trawl-mooring-example-diverges.md
  • MARE-0371 (KNOWN-LIMITATION) — Vessel/WavePropulsionHull reads no current or wake. Resolved: 4e40aff, 2026-10-13 (feature mare-owner-rulings). Owner ruling 2026-10-13: go: the vessel receives the current and the other objects' wakes through fhsim_environment's BodyFlowInteraction with WaterVelocityTerms::NoWaves (the hull model carries the wave loads), and casts a hull wake and a propeller jet as a PropelledObject, only with CastWake. Done as option 1 and 2 above: the hull damping, the propeller inflow and the rudder take nu_r = nu − nu_c; the rigid body's and added mass's equation is that of nu_r, nu' = nu_r' + (r v_c, −r u_c, 0) (Fossen 2011 Sec. 10.3); WaveHull has the hook (still water by default: Vessel/WaveHull unchanged); the Jacobian holds the water velocity of the step and covers its turn with the heading. With CastWake: hull wake from the damping at the free stream (frontal area Breadth × draught), jet <Name>/jet of (1 − ThrustDeduction) T at PropellerX/PropellerZ, advance speed the surge through the water. No fhsim_environment change. Tests (red before, green after): WavePropulsionHull.DriftsWithAUniformCurrent_MARE0371, AtRestTheCurrentDragsItAlong_MARE0371, InAHeadCurrentKeepsItsSpeedThroughTheWater_MARE0371, CastsAHullWakeAndAPropellerJet_MARE0371, and JacobianMatchesFiniteDifferencesInACurrent_MARE0371. Not tested here: the far field of the steady self-propelled vessel (the issue's momentumless check, as NorrbinTanker_steadyFarFieldIsNearlyMomentumless). No baseline moved.. File: resolved/MARE-0371-wave-propulsion-hull-no-current.md
  • MARE-0372 (BUG) — CableBranched deletes its InternalCableWithBottomContact sections through InternalCable*, which has no virtual destructor. Resolved: 1b2b285, 2026-10-13 (feature mare-owner-rulings; owner ruling 2026-10-13: confirm, fix test-first). Confirmed at 1bea1b7: InternalCable::~InternalCable() was not virtual (src/cable/subroutines/InternalCable.h:197) while CableBranched deletes its InternalCableWithBottomContact sections through InternalCable* (CableBranched.cpp:112). The destructor is now virtual. Test CableBranched.SectionsAreDeletedThroughAVirtualDestructor (std::has_virtual_destructor_v<InternalCable>) failed before and passes; an AddressSanitizer build of this repository's tests (only fhsim_marine_elements instrumented) runs SimObject.CableBranched_* without new-delete-type-mismatch. No result changes.. File: resolved/MARE-0372-internal-cable-delete-without-virtual-destructor.md
  • MARE-0373 (BUG) — RBCEngine frees its new[] arrays with delete. Resolved: 1f6bb76, 2026-10-13 (feature mare-owner-rulings; owner ruling 2026-10-13: confirm, fix test-first). Confirmed at 1bea1b7 (src/cable/subroutines/RBCEngine.cpp, every new double[...] freed with delete). Every such free is now delete[]. Red/green with an AddressSanitizer build of this repository's tests (only fhsim_marine_elements instrumented; the reports are in RBCEngine's own double arrays, which no other library allocates or frees, so the Eigen alignment caveat of a partly instrumented run does not apply to them): SimObject.RigidBarCable_Smoke gave 5728 alloc-dealloc-mismatch reports before (StateUpdate, CalcAcc, CalcLambda, MatrixCalc*, CalcEndForces, constructor, destructor) and none after. No result changes.. File: resolved/MARE-0373-rbcengine-delete-of-arrays.md
  • MARE-0374 (KNOWN-LIMITATION) — RbCable/6DofCable and RbCable/Ring carry no added mass, so their wave excitation is Froude-Krylov only. Resolved: a24eaed, 2026-10-20. Owner ruling R2 and D5. The elements of RbCable/6DofCable and RbCable/Ring carry the normal added mass Ca rho A L f (Ca = 1) as RbCable/Cable (a78638e): per-element MiT, the Morison inertia force and the Coriolis force of the turning added mass through wet_cylinder_water::FixedDragLoadOnElement (new Ca and angular velocity); Cm_IsAddedMassHack is deleted. Tests: SimObject.Cable6Dof_AddedMassIsInTheInertiaNormalToTheElements and SimObject.Ring_AddedMassIsInTheInertiaNormalToTheElements (velocity ratio of two objects of 3 and 8 kg/m: 2.03 before, 1.16 and 1.154 after, expected 1.162 within 3 %), ElementWaterLoad.ElementWithAddedMassTakesTheMorisonInertiaForce_MARE0374, ElementWaterLoad.TurningAddedMassActsOnTheRelativeVelocity_MARE0374. Only Cable6Dof and Ring results move; no file of another model and no old-vs-new pin.. File: resolved/MARE-0374-cable6dof-ring-no-added-mass.md
  • MARE-0375 (BUG) — RbCable/Cable reports a failed matrix inversion through a null print resource. Resolved: this commit, 2026-10-13 (feature mare-cablerm-null-print; fix test-first under the standing rule). CableRM::ReportError reports through m_print when it is set and throws std::runtime_error otherwise; the pointless loop of ten calls (the first, [[noreturn]], never returns) is gone. Test SimObject.CableRM_FailedMatrixInversionIsReportedWithoutThePrintResource_MARE0375 (fixture CableRM_SingularMatrix, E-modulus 1e300): before, the test binary died with SIGSEGV in PrintDuringExec::WriteLog called from CableRM::calculations; after, the run ends with matrix inversion failed. No result changes.. File: resolved/MARE-0375-cablerm-null-print-on-failed-inversion.md
  • MARE-0376 (KNOWN-LIMITATION) — RbCable/Cable and the trawl cables damp an element's spin about its axis with two different formulas. Resolved: torsion commit on feature/cable-flow, 2026-10-13 (fhsim_marine_elements 3.0.7, fhsim_environment 3.2.1 cylinder_hydro::TorsionDragMoment). Ruled by agent on owner delegation 2026-10-13: "Both current formulas lack r² dimensionally (ρ r² L ω² is kg/s², not a moment). Derivation: wall shear τ = ½ ρ C_f (ω r)² on area 2π r L at arm r gives M = π ρ C_f r⁴ L ω|ω|. cylinder_hydro's Ct is defined on the projected area D L, so C_f = Ct/π and M = −ρ Ct r⁴ L f |ω_a| ω_a, with ω_a the element's axial angular rate relative to the (non-rotating) water and Ct = TangentialDragCoefficient(Re), Re = |ω_a| r D / ν." Both RbCable::AddAboveSeabedLoad and trawl_cable_water::InWaterForce call it; it now acts whenever the element is wet, whether or not it moves through the water (the old terms only with a relative speed). ElementDragCoefficients lost its torsional coefficient. Baseline moved: TrawlCable_HeunRegression only (bridle end forces by at most 2e-3 N of 3e4-1e5 N). RbCable examples bit for bit unchanged; the trawl-mooring examples stay stable, at the same speed, and within their run-to-run scatter.. File: resolved/MARE-0376-two-cable-torsion-drag-formulas.md
  • MARE-0377 (BUG) — NetStructureWithConstraints: the MeshOpening solidity warning reads the frozen own states of driven nodes. Resolved: e699eaa, 2026-10-14: the warning is computed by NetCore::FinalSetup through the node view, which reads a driven node at its rigid element (log-only; no test added, ruling 6.3).. File: resolved/MARE-0377-nswc-solidity-warning-reads-frozen-driven-nodes.md
  • MARE-0378 (ARCHITECTURE) — NetStructureWithConstraints: NodePos and NodeVel read frozen own states and are not registered as ports. Resolved: 70244dd, 2026-10-14: the unregistered port functions are deleted (NodeForce stays: OdeFcn uses it).. File: resolved/MARE-0378-nswc-nodepos-nodevel-dead-frozen-states.md
  • MARE-0379 (BUG) — NetStructureWithConstraints: chain 2's rigid coupling is given chain 1's angular velocity. Resolved: e1f8998, 2026-10-14. File: resolved/MARE-0379-nswc-chain2-gets-chain1-angular-velocity.md
  • MARE-0380 (KNOWN-LIMITATION) — NetStructureWithConstraints: NumThreads 2 is about 150 times slower per step than serial. Resolved: ede966b, 2026-10-20. The cause was the three #pragma omp parallel for of NetStructureWithConstraints::TakeNodeForces, not SumForcesInChunks: per Evaluate call (1200 calls, 0.2 s), TakeNodeForces took 5.8 ms and the two-thread loops 0.6 ms with them, 3 µs and 4 µs without. Removing them: NetStructureWithConstraints_RegressionThreads 7.7 s to 0.016 s (a quiet 32-core machine; 25 s when loaded), the serial NetStructureWithConstraints_Regression 0.77 s to 0.09 s. OMP_NUM_THREADS=2 also gave 0.03 s: the cause is the team size of the parallel for (the default, 32) changing against the two-thread team on every call. Results are byte-identical. Guard: the time budget of _RegressionThreads is 1 s (was 60 s); it fails with the old code.. File: resolved/MARE-0380-nswc-two-threads-slow.md
  • MARE-0381 (BUG) — Net wake-rebuild log: the cable drag uses the wave velocities of the last OdeFcn. Resolved: 4670fcf, 2026-10-20. NetCore::CableHydrodynamicForce now calls UpdateNodeWaveVelocities(T, View(X), ...) first. Test NetStructureWaves.CableHydrodynamicForceTakesTheWaveVelocitiesOfItsOwnState_MARE0381: red before (the force at another (T, X) was that of the last OdeFcn), green after; results are unchanged.. File: resolved/MARE-0381-net-cable-drag-log-stale-wave-velocity.md
  • MARE-0382 (BUG) — NSWC net cables ignore the spec's NormalDragCoeff and TangentialFrictionCoeff. Resolved: 8d38436, 2026-10-14. File: resolved/MARE-0382-nswc-cable-drag-ignores-spec.md
  • MARE-0383 (BUG) — MooringCable dereferences a null solver owner when its TrawlCable names no TrawlCable. Resolved: 16c9439, 2026-10-14 (feature trawl-rig, plan task C3). The one owner/joined lookup, trawl_mooring::JoinedRig (TrawlRig.cpp), reports TrawlCable "<name>" names no TrawlCable that owns a constraint solver ...; MooringCable and a joined TrawlCable both use it. Tests: SimObject.MooringCable_UnknownTrawlCable (red: the test binary crashed, exit 139; green with the fix) and SimObject.TrawlCable_UnknownTrawlCable (red: the old message "no CoRiBoDynamics registered!"; green). No baseline moved.. File: resolved/MARE-0383-mooringcable-unknown-trawlcable-crashes.md
  • MARE-0384 (API) — AddedDragPerMPS input option is overwritten by the net file's adaptations and has no effect. Resolved: 8b2aa0e, 2026-10-14. Owner ruling 2026-10-14: delete the input option; SetAddedDragPerMPS stays.. File: resolved/MARE-0384-added-drag-option-overwritten.md
  • MARE-0385 (BUG) — The NetStructure cable Jacobian ignores the compression-speed clamp, so it is wrong wherever that clamp is active. Resolved: 1c9ea33, 2026-10-15. File: resolved/MARE-0385-net-cable-jacobian-omits-compression-speed-clamp.md
  • MARE-0386 (BUG) — The cable Jacobians ignore the element length bound, so they are wrong for an element shorter than 1e-3 m. Resolved: f823109, 2026-10-15. File: resolved/MARE-0386-cable-jacobians-ignore-length-bound.md
  • MARE-0387 (BUG) — The cable Jacobians drop the turning of the tension where it is at MaxTension. Resolved: d8610fd, 2026-10-15. File: resolved/MARE-0387-cable-jacobians-drop-turning-at-max-tension.md
  • MARE-0388 (BUG) — WavePropulsionHull's propeller jet takes the PropellerSpeed of the previous step. Resolved: bf666ab, 2026-10-15. The caster reads PropellerSpeed at the (T, X) it is given (E2 task 5c). Test WavePropulsionHull.TheJetTakesThePropellerSpeedOfTheStepStart_MARE0388: red before (6024.59 N, of n = 2), green after (54221.30 N, of n = 6). No baseline moved.. File: resolved/MARE-0388-jet-thrust-lags-propeller-speed.md
  • MARE-0389 (BUG) — A Net/Disk in a WakeGroup can be rebuilt with the axis of the previous step. Resolved: bca0042, 2026-10-15. The disc gives its caster the Force input; fhsim_environment DiskCaster reads the axis at the (T, X) of the load (E2 task 5d). Test SimObject.Disk_GroupBuildsWithEveryDiscsAxisOfTheStepStart_MARE0389: red before (probe deficit differed by up to 5e-5 between the orders of group and discs), green after (bit for bit equal). No baseline moved.. File: resolved/MARE-0389-disk-axis-lags-in-wake-group.md
  • MARE-0390 (BUG) — Cats mode: Net/NetStructure starts a refined cable's inner new nodes at the wrong place. Resolved: feature/fix_issues, 2026-10-21. File: resolved/MARE-0390-cats-mode-new-node-initial-position.md
  • MARE-0391 (BUG) — Cable/LumpedMass offers an analytical Jacobian that omits the seabed contact. Resolved: e619f47 (test d43d61e), 2026-10-17 (feature seabed-contact, plan D1 phase 2, task M1). Cable::HasJacobians is !m_internalCable->HasForceOutsideJacobian() and OdeJacobian writes nothing while it is false, as Cable/Branched. Test SeabedContactPin.Cable_HasNoJacobianInBottomContact_MARE0391: red before (HasJacobians true in contact, the Jacobian written), green after, and true again once the cable is clear. Cable_BedRegression keeps TestJacobianMode::No, but for the drag, which is not in the analytical Jacobian in water (as Cable_Regression); its baseline moved with the soil law family (README of the baselines).. File: resolved/MARE-0391-cable-jacobian-omits-bottom-contact.md
  • MARE-0392 (BUG) — RbCable/Cable sinks through a FlatSeafloor: no buoyancy or drag below the seabed. Resolved: 904d415 (water load always, 1a-c: 5d8048a), 5557768 (CoRiBo elements), 2026-10-17 (feature seabed-contact, plan D1 phase 2, task M2). The ruling of 2026-10-16 (nonzero FlatSeafloor soil) is met by marenv 2.1.5 (FlatSeafloor returns SoilState{}); in ME the water load of RbCable/Cable and of the CoRiBo cable elements now applies below the seabed too and the soil adds its load, a RigidCylinder of the shared SeafloorForces. Tests SeabedContactPin.CableRMKeepsItsWaterLoadBelowTheSeabed_MARE0392, CableRMPassesEachElementAsARigidCylinderAndAddsTheLoad_MARE0392 and SimObject.CableRM_SoilElementsRiseToTheSeabed_MARE0395; baselines CableRM_SeabedRegression, TrawlCable_BedRegression regenerated.. File: resolved/MARE-0392-cablerm-seabed-flatseafloor-sinks.md
  • MARE-0393 (BUG) — Net/Disk soil friction multiplies the disk's own velocity by its speed relative to the water. Resolved: d20a6cb (test 3df6132), 2026-10-17 (feature seabed-contact, plan D1 phase 2, task M2). Net/Disk passes a RigidCylinder D by T along its axis with its own velocity (the soil is at rest) to the shared SeafloorForces and adds the returned load to its weight and buoyancy; no friction on the water-relative speed, and the load grows with the penetration, so the disk neither chatters nor sinks through. Test Disk.OnTheSeabedPassesItsOwnMotionAndAddsTheSeafloorLoadToItsWeight; Disk_SeabedRegression regenerated (starts 2 mm deep).. File: resolved/MARE-0393-disk-seabed-friction-own-velocity.md
  • MARE-0394 (BUG) — RbCable/Cable rejects a user initial condition on a slack cable: DistributeCatenary writes every state. Resolved: in the commit that moves this file here, 2026-10-16 (feature seabed-pins). DistributeCatenary takes currentIC and writes a state only where the user has not set it, as the other branches do. Test SimObject.CableRM_UserInitialConditionOnASlackCableStandsAndTheRestIsTheCatenary_MARE0394: red before (FhSim stops with "The SimObject <C> tried to change an initial condition that was already set during the 'InitialConditionSetup' phase"), green after. No baseline moved.. File: resolved/MARE-0394-rbcable-catenary-overwrites-user-initial-conditions.md
  • MARE-0395 (BUG) — RbCable/Cable joints relax over about 1000 s: the Baumgarte beta is a time where a rate is needed. Resolved: 1b18dbd (the rate; with 08ece12 and ffd2659 the joint moments), 2026-10-17 (feature seabed-contact, plan D1 phase 2, tasks M0 and A1). The joint moments of M0 plus the axial rate as updateFreq [1/s] of A1: the cable no longer keeps its initial shape, and a moving chain keeps its joint gaps closed at the stock updateFreq (decided by the A1 worker within the plan, the owner to confirm: the axial rate is a rate, the input name is kept). Tests CableRM_ChainLiftedByTheSoilKeepsItsJointsClosed_MARE0395, CableRM_ChainPushedAlongTheSeabedKeepsItsJointsClosed_MARE0395, CableRM_FreeSwingingChainKeepsItsJointsClosed_MARE0395. Not what the notes below recommended: the regime is not epsilon << a with 10 to 100 1/s; with the soil's impulses the gap drifts per step in proportion to h * da / beta and a cable on the seabed ends in NaN below about 30 1/s at the 1 ms step, so the stock 1000 (up to 1/dt) is kept. The initial condition's joint gaps are MARE-0398.. File: resolved/MARE-0395-rbcable-joint-relaxation-uses-time-as-rate.md
  • MARE-0396 (KNOWN-LIMITATION) — Rigid cable elements get no cross-flow damping moment when they rotate about a normal axis. Resolved: d2b26b4, bbf7c6d, e9881e3, 7d5a2be (env 016d7ff), 2026-10-22. File: resolved/MARE-0396-cable-elements-no-crossflow-damping-moment.md
  • MARE-0397 (KNOWN-LIMITATION) — CoRiBo cable elements in the soil keep swinging under the explicit 1 ms step. Resolved: 4c74114, 2026-10-17. The cause was in fhsim_environment's soil law, not the CoRiBo solver, and the stiffness K_e and the damping ratio were not it (a factor 0.01 on K_e and ζ = 1 change nothing in the chatter). (1) The R79 contact damping 2 ζ sqrt(k_sec m_eq) = 2 ζ k sqrt(s/g) falls with the penetration: 0.2 ms of k_sec at the 1e-5 m a cable element rests at, and explicit Euler needs c_n >= k_sec h (a lumped mass on the law under Euler at 1 ms: dropped, 700 reversals of the force). Fix: a floor k_sec τ s/(s + s_τ), τ = 2 ms (env SoilModel::dampingTime). (2) A fully buried body is pushed out by the normal force and held by the uplift U u(v), slope U/v_reg at 1 cm/s (10^5 N s/m on a bridle element): it chattered with swings of U every step (NOUPLIFT removed the swing). Fix: speed scale max(v_reg, U/(c' ℓ)), c' = 100 N s/m² (env SoilModel::upliftDampingLimit). Result: the bottom bridle end force changes by at most 1.4 kN between 10 ms rows (35 kN before). The fixture starts the whole cable inside the sediment (the slack warp's catenary hangs up to 23 m below the seabed), so what remains after 0.6 s is the expulsion from it; a fixture that starts on the bed is a follow-up.. File: resolved/MARE-0397-trawlcable-bridle-soil-oscillation.md
  • MARE-0398 (BUG) — RbCable/Cable initial condition places the joints up to 7 mm apart; the rate kicks the cable at t = 0. Resolved: feature/fix_issues, 2026-10-21. File: resolved/MARE-0398-rbcable-initial-condition-joint-gaps.md
  • MARE-0399 (TEST) — NetStructureWithConstraints_Regression and _RegressionAppendices exceed their 30 s wall-time budget on CI (Linux, no visualisation). Resolved: feature/fix_issues, 2026-10-21. The cause is MARE-0380 (ede966b, 2026-10-20): the three #pragma omp parallel for of NetStructureWithConstraints::TakeNodeForces ran with the default team size even for NumThreads 1. On a CI runner that shows many cores but limits the CPUs of the job, the OpenMP team (one thread per visible core) is far larger than the CPU quota, and every call waits for threads that are not scheduled. That is why only the serial runs were slow and the two-thread run, which sets its own team size, was not; and why the issue could not be reproduced on an unlimited local machine. The v3.0.8 and v3.0.9 tags do not contain the fix (ede966b is not an ancestor of either).. File: resolved/MARE-0399-netstructurewithconstraints-regression-slow-on-ci.md
  • MARE-0400 (TEST) — Six regression baselines and one pin differ on MSVC (seabed and TrawlCable runs); skipped on Windows. Resolved: 323e92c (feature/fix_issues), 2026-10-22. File: resolved/MARE-0400-msvc-results-differ-bed-and-trawlcable-baselines.md
  • MARE-0401 (BUG) — RbCable end forces turn NaN on MSVC Release (RBCable_EndForcesCarryTheWeight); test skipped on Windows. Resolved: feature/fix_issues, 2026-10-21. File: resolved/MARE-0401-rbcable-nan-on-msvc-release.md
  • MARE-0402 (ARCHITECTURE) — NetStructure: move cable drag Jacobians next to the drag law, inline ComputePanelJacobianAD, add a scatter helper. Resolved: feature/fix_issues, 2026-10-21. File: resolved/MARE-0402-net-structure-jacobian-move-and-scatter-helper.md
  • MARE-0403 (TEST) — Fixtures with NumCpuCore 2 give different results run to run, so they cannot be byte-compared. Resolved: feature/fix_issues, 2026-10-21. File: resolved/MARE-0403-two-thread-solver-fixtures-not-reproducible.md
  • MARE-0404 (DOCUMENTATION) — Net/Sphere drag coefficient 0.3 is hard-coded and differs from the env default 0.5; DNV references unchecked. Resolved: feature/fix_issues, 2026-10-21. File: resolved/MARE-0404-net-sphere-cd-hard-coded.md
  • MARE-0405 (TEST) — TrawlCable_BedRegression fixture starts inside the sediment. Resolved: feature/fix_issues, 2026-10-21. File: resolved/MARE-0405-trawlcable-bedregression-starts-in-sediment.md
  • MARE-0406 (BUG) — NetStructureConstrained does not follow NetStructureTest on the same net and loads. Resolved: feature/fix_issues, 2026-10-21. File: resolved/MARE-0406-net-constrained-diverges-from-net-structure-test.md
  • MARE-0407 (BUG) — NetStructureConstrained has no drag or weight, so it rings where NetStructureTest settles. Resolved: feature/fix_issues, 2026-10-21. File: resolved/MARE-0407-net-constrained-has-no-hydrodynamic-loads.md
  • MARE-0408 (BUG) — NetStructureTest outputs NaN for projectedArea when the current is zero. Resolved: feature/fix_issues, 2026-10-21. File: resolved/MARE-0408-net-structure-test-projected-area-nan-zero-current.md
  • MARE-0409 (TEST) — FHSIM_TEST_REFERENCE_MODE is ignored; the test binary always runs CreateIfMissing. Resolved: feature/fix_issues, 2026-10-21. File: resolved/MARE-0409-test-reference-mode-env-ignored.md
  • MARE-0410 (TEST) — TrawlCable_BedRegression fails its MSVC statistic check after the FHSIM-0066 baselines. Resolved: 0a8076b, 2026-10-23 (option 1, owner ruling 2026-10-23: re-measure). All statistic and pin checks on MSVC 194, Release and Debug, reported with the new MARE_STATISTICS_REPORT (8262c78): 434 comparisons in Release, 374 in Debug. Only this check was over its limit. The force means differ by up to 5.0 N beyond 2 % of the reference, so kMsvcForceMean is 2 % + 15 N (2.5 times that). The other limits stay: force spreads use at most 71 % of theirs, door positions differ by up to 1.7 mm (of 30 mm), CableBranched forces by 0.094 N (of 0.25 N) and positions by 0.025 mm (of 0.1 mm), the door pin by 2.1 mm (of 20 mm).. File: resolved/MARE-0410-trawlcable-bedregression-msvc-mean-past-tolerance-after-fhsim-0066.md
  • MARE-0411 (TEST) — CI compared no baselines, the test package could not fail, and no validation case ran in CI. Resolved: a142cd9, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0411-ci-tells-the-truth.md
  • MARE-0412 (BUG) — RbCable/Cable with both ends on one vertical starts with NaN states. Resolved: e1adcde, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0412-rbcable-vertical-slack-nan.md
  • MARE-0413 (BUG) — RbCable/Cable retraction: a negative length was retracted by its absolute value and two ends could leave no free element. Resolved: 49645a9, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0413-rbcable-retraction-clamp.md
  • MARE-0414 (BUG) — Cable classes accepted element counts and sizes they divide by or allocate from. Resolved: 86f0b82, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0414-rbcable-family-geometry-validation.md
  • MARE-0415 (BUG) — Cable/Branched wrote past its arrays or deleted garbage when NumCables differed from the El tags. Resolved: 796489a, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0415-cable-branched-numcables-mismatch.md
  • MARE-0416 (BUG) — A net file with a negative node number or a wrong Conn count corrupted memory. Resolved: 1971911, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0416-net-conn-node-numbers.md
  • MARE-0417 (BUG) — NetElementDef::Check threw a pointer, so fhExe ended with no message. Resolved: 25baa85, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0417-net-element-def-throws-pointer.md
  • MARE-0418 (BUG) — A damaged binary net file read as an empty net. Resolved: de04157, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0418-net-binary-parse-result-ignored.md
  • MARE-0419 (BUG) — TrawlCable and RundDorg accepted element counts of zero or below. Resolved: 0102723, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0419-trawl-rund-dorg-element-counts.md
  • MARE-0420 (BUG) — PortOrStarboard gave starboard for any value but "Port". Resolved: 0bea8b3, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0420-trawl-port-or-starboard-strict.md
  • MARE-0421 (BUG) — Cable/RigidBarCable end force A used the x component of the end control in all three components. Resolved: a87d424, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0421-rigid-bar-cable-force-a-components.md
  • MARE-0422 (BUG) — An exception in a threaded net loop ended the process with no message. Resolved: 4eed031, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0422-net-threads-exception-terminates.md
  • MARE-0423 (BUG) — Cable/RigidBarCable ForceB and the port buffers were uninitialised. Resolved: 7611c22, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0423-rigid-bar-cable-uninitialised-ports.md
  • MARE-0424 (BUG) — CableSegment gave a zero quaternion for a line straight up. Resolved: 1d39b15, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0424-cable-segment-straight-up-quaternion.md
  • MARE-0425 (BUG) — A failed constraint solve in RbCable/Ring and RbCable/6DofCable was only printed. Resolved: 89c3a15, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0425-ring-6dof-failed-ldlt.md
  • MARE-0426 (ARCHITECTURE) — Set-up diagnostics of cables and nets went to stdout. Resolved: cf3f7f6, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0426-model-diagnostics-to-stdout.md
  • MARE-0427 (BUG) — Cable/LumpedMass never deleted its InternalCableWithBottomContact. Resolved: 1f256e1, 2026-10-24 (feature me-fail-loudly).. File: resolved/MARE-0427-cable-lumped-mass-internal-cable-leak.md
  • MARE-0431 (BUG) — TrawlNetSpecReader has no upper bounds: absurd N, T, L or refinement exhaust memory or give nan/inf. Resolved: this feature's fix commit (me-reader-bounds), 2026-10-25.. File: resolved/MARE-0431-trawlspec-reader-unbounded.md