|
FhSim
3.1.0
Marine systems simulation
|
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.
file:line given in the detail file, at HEAD.blocked item, get the owner's answer to "Decision needed" first, then set Status to ready.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.
BUG code does something other than its documentation or sibling code saysKNOWN-LIMITATION behaviour gap by design or omission, document rather than fix silentlyARCHITECTURE structure, dependencies, build layout, dead code and stale artefactsDOCUMENTATION missing or wrong documentation or exampleTEST test coverage or infrastructureAPI public name (port, state, parameter, registration string) whose change breaks input filesSECURITY credentials and supply chain3 wrong numbers, a crash or a secret exposure reaches a user2 a documented interface does not work as documented1 tidiness, readers and tools onlyblocked needs the owner decision named in the fileready fully specified| ID | Class | Severity | Status |
|---|---|---|---|
| MARE-0001 | BUG | 2 | blocked |
| MARE-0003 | BUG | 2 | blocked |
| MARE-0081 | BUG | 2 | blocked |
| MARE-0110 | KNOWN-LIMITATION | 2 | ready |
| MARE-0122 | KNOWN-LIMITATION | 2 | blocked |
| MARE-0131 | KNOWN-LIMITATION | 2 | blocked |
| MARE-0163 | DOCUMENTATION | 2 | blocked |
| MARE-0211 | ARCHITECTURE | 2 | ready |
| MARE-0314 | KNOWN-LIMITATION | 2 | blocked |
| MARE-0319 | BUG | 2 | ready |
| MARE-0354 | KNOWN-LIMITATION | 2 | ready |
| MARE-0027 | ARCHITECTURE | 1 | blocked |
| MARE-0031 | TEST | 1 | ready |
| MARE-0121 | TEST | 1 | blocked |
| MARE-0223 | ARCHITECTURE | 1 | ready |
| MARE-0321 | TEST | 1 | ready |
| MARE-0323 | KNOWN-LIMITATION | 1 | ready |
| MARE-0324 | TEST | 1 | ready |
| MARE-0326 | KNOWN-LIMITATION | 1 | ready |
| MARE-0327 | KNOWN-LIMITATION | 1 | ready |
| MARE-0328 | BUG | 1 | ready |
| MARE-0329 | TEST | 1 | ready |
| MARE-0353 | DOCUMENTATION | 1 | ready |
RbCable/Collision is registered only in a commented-out line. Models: RbCable/Collision (class Collision; it has no documentation page because its \@group line is commented out too)TrawlCable's Heun_i branch is commented out while RundDorg's is live. Models: TrawlCablehydrodynamics::LocalThroughFlow (default law); hydrodynamics::ScreenMF2022 (L2 lift only); both selectable by HydroModel on Net/NetStructure and Net/NetStructureWithConstraints since WP-A7 to A9<Integrator Method="BDF"> with no <LinearSolver>hydrodynamics::LocalThroughFlow (default law), hydrodynamics::ScreenKF2012 (same angle form); both selectable by HydroModel on Net/NetStructure and Net/NetStructureWithConstraintsRbCable/Cable maps to class CCableRM, which kept its C prefix. Resolved: 9f8db23, 2026-09-16. File: resolved/MARE-0002-rbcable-cable-class-ccablerm-prefix.md2ae2738, 2026-09-22. File: resolved/MARE-0004-netstructure-panel-jacobian-forward-difference.mda1e7260, c77dfe5, 2026-09-25. File: resolved/MARE-0005-three-classes-without-documentation-page.mdCable/LumpedMass reads NumElements, but the documentation and an example say numElements. Resolved: d374a00, 2026-09-15. File: resolved/MARE-0006-cable-lumpedmass-reads-numelements.mdCable/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.mdsrc/cable/Cable.h carries two complete, divergent documentation blocks. Resolved: d374a00, 2026-09-15. File: resolved/MARE-0008-src-cable-cable-h-carries-two.mdNet/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.mdRbCable/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.md6cf95d6, 2026-09-15. File: resolved/MARE-0011-initial-condition-state-indices-are-documented.mdCable/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.mdCable/Branched documented names and widths do not match the code. Resolved: 3c30a67, 2026-09-15. File: resolved/MARE-0013-several-cable-branched-documented-names.mdCable/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.mdCable/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.mdRbCable/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.mdRbCable/Ring reads NumInputsPerConnector and Cm_IsAddedMassHack without using or documenting them. Resolved: a2c7d11, 2026-09-30. File: resolved/MARE-0017-ring-unused-parameters.md8a40f10, 2026-09-27. File: resolved/MARE-0018-opencl-sources-never-compiled.mdsrc/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.mdNet/NetStructureWithConstraints have no port or parameter documentation. Resolved: cb81dc7, 5340c40, 2026-09-25. File: resolved/MARE-0020-trawl-mooring-simobjects-undocumented-ports.mdif (false /* v3: IntegratorEngine check removed */) blocks. Resolved: 9f8db23, 2026-09-16. File: resolved/MARE-0021-dead-integratorengine-if-false-blocks.mdNetStructure family documentation tables are ??? placeholders. Resolved: 24f9aa9, aad9c4f, 2026-09-25. File: resolved/MARE-0022-netstructure-documentation-tables-placeholders.mdBouyancyFactor is misspelled, and the misspelling is load-bearing. Resolved: 9f8db23, 2026-09-16. File: resolved/MARE-0023-bouyancyfactor-misspelling-load-bearing.md9f8db23, 2026-09-16. File: resolved/MARE-0024-dead-sources-and-references.mdRbCable/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.md2ae2738, 2026-09-22. File: resolved/MARE-0026-netelement3n-force-path-not-scalar-templated.mdbf7cce6, 2026-09-30. File: resolved/MARE-0028-rbcable-family-zero-test-coverage.mddd57457, 2026-09-25. File: resolved/MARE-0029-trawl-mooring-rigidbarcable-zero-test-coverage.md875b0a7, 2026-09-25. File: resolved/MARE-0030-netstructure-siblings-no-jacobian-no-test.md4d707ed, 2026-09-25. File: resolved/MARE-0032-netstructure-port-jacobian-and-behaviour-untested.md397b6f0, 2026-09-30. File: resolved/MARE-0033-jacobian-only-tests-lack-behaviour-coverage.md295183c, 2026-09-24. File: resolved/MARE-0034-stale-jacobian-test-tolerance-comments.mdresolved/MARE-0035-jacobian-analysis-md-stale-disk-doc.md66ded69, 2026-09-30. File: resolved/MARE-0036-cable-jacobian-omits-compression-speed-clamp.mda4a308f, 2026-09-30. File: resolved/MARE-0037-cablebranched-fixture-checks-a-slack-cable.mdfdea835, 2026-09-24. File: resolved/MARE-0038-netstructure-inputportjacobian-global-row.mdaf4a3d4, 2026-09-24. File: resolved/MARE-0039-ring-destructor-frees-uninitialised-pointer.mdaf4a3d4, 2026-09-24. File: resolved/MARE-0040-rigidbarcable-destructor-deletes-uninitialised-pointer.mdcf73623, 2026-09-24. File: resolved/MARE-0041-netstructure-array-wake-document-unregistered-ports.mddd57457, 2026-09-25. File: resolved/MARE-0042-trawl-mooring-destructors-delete-uninitialised-vis-pointers.mdb8ac4d8, 2026-09-30. File: resolved/MARE-0043-mooringcable-ten-elements-segfaults.mda64d381, 2026-09-25. File: resolved/MARE-0044-runddorg-unknown-weighttype-left-unassigned.md1e6148b, 2026-09-25. File: resolved/MARE-0045-trawlcable-numcpucore-default-inverted.mdb3a9549, 2026-09-25. File: resolved/MARE-0046-trawlcable-zero-clump-weight-mass-crashes.md1b7d06a, 2026-09-25. File: resolved/MARE-0047-rmcable-constraint-acceleration-drops-rdotdot.mda2e6378, 2026-09-25. File: resolved/MARE-0048-trawlcable-runddorg-second-bridle-uses-first-bridle-values.md773f715, 2026-09-25. File: resolved/MARE-0049-mooringcable-bottom-chain-contact-radius-mid-rope.mdb1baf09, 2026-09-25. File: resolved/MARE-0050-mooringcable-buoy-connection-index-and-inertia.md0510a5e, 2026-09-25. File: resolved/MARE-0051-mooringcable-top-chain-second-moment-inconsistent.md0273425, 2026-09-25. File: resolved/MARE-0052-runddorg-force-ports-expose-norm-only.md1d1fac5, 2026-09-25. File: resolved/MARE-0053-trawl-mooring-inputs-set-unread-parameters.mdaf9b01b, 2026-09-25. File: resolved/MARE-0054-trawlbeam-trawl-force-projection-sign.md5f935b3, 2026-09-25. File: resolved/MARE-0055-trawlbeam-starttravel-and-saturation-limits.mdcbcf2da, 2026-09-25. File: resolved/MARE-0056-nswc-inputs-unvalidated.mdd927d41, 2026-09-25. File: resolved/MARE-0057-net-panel-weight-missing-gravity.mdbafe44c, 2026-09-25. File: resolved/MARE-0058-net-cable-appendage-end-weighting.mde5d993d, 2026-09-25. File: resolved/MARE-0059-nswc-addcableforces-openmp-race.md47c3541, 2026-09-25. File: resolved/MARE-0060-nswc-coupling-second-moment-and-solver-frequency.md3c46ef7, 2026-09-25. File: resolved/MARE-0061-trawlcable-clump-weight-inertia-from-door.md2ef9cbf, 2026-09-25. File: resolved/MARE-0062-trawl-collision-skips-gear-after-mooring.mde125f14, 2026-09-25. File: resolved/MARE-0063-trawl-environment-gravity-only-when-moving.mddd55ffe, 2026-09-30. File: resolved/MARE-0064-net-bottomcontact-port-always-zero.mdeddfba2, 2026-09-25. File: resolved/MARE-0065-net-files-set-unread-general-attributes.md8d89e6f, 2026-09-25. File: resolved/MARE-0066-net-maxacceleration-limit-inconsistent.md36799dd, 2026-09-25. File: resolved/MARE-0067-net-output-ports-overlapping-or-uninitialised.md2dab64f, 2026-09-25. File: resolved/MARE-0068-net-wakeeffect-ignores-external-and-bottom-forces.mdresolved/MARE-0069-netstructureabaqus-input-reading-defects.md2b47125, 2026-09-25. File: resolved/MARE-0070-netstructurearray-initial-conditions-zeroed.md5b4e2be, 2026-09-25. File: resolved/MARE-0071-netstructuretest-drag-current-and-sphere-defects.md7252bd5, 2026-09-25. File: resolved/MARE-0072-netstructurewakeeffect-usetagforexternalnodes-hard-coded.md7c52a04, 2026-09-25. File: resolved/MARE-0073-net-cable-disk-drag-zeroed-by-integer-division.md5ae9e52, 2026-09-25. File: resolved/MARE-0074-net-cable-disk-drag-model-unclear.mda93fe9c, 2026-09-25. File: resolved/MARE-0075-trawl-mooring-results-not-reproducible.md1a98cfb, 2026-09-25. File: resolved/MARE-0076-trawlcablejointconstraint-thread-manager-uninitialised.mdfd0f1f1, 2026-09-25. File: resolved/MARE-0077-netstructure-port-jacobian-ignores-adaptations.mdresolved/MARE-0078-netstructure-output-port-jacobian-missing.mdfc55b16, 2026-09-25. File: resolved/MARE-0079-mooringcable-straight-line-catenary-setup-slow.md1d91424, 2026-09-30. File: resolved/MARE-0080-netstructurearray-cable-elements-no-inertia.md823625f, 2026-09-25. File: resolved/MARE-0082-cable-element-weight-doubled.mda715efa, 2026-09-25. File: resolved/MARE-0083-net-solidity-factor-scales-current-not-relative-flow.mdb3a864a, 2026-09-25. File: resolved/MARE-0084-sphere-drag-ignores-current.md991f820, 2026-09-25. File: resolved/MARE-0085-net-panel-reynolds-number-differs-from-screen-model.mdf36683d, 2026-09-25. File: resolved/MARE-0086-sphere-no-added-mass-or-froude-krylov.mdresolved/MARE-0087-readme-skip-tests-conf-name.md378a4aa, 2026-09-26. File: resolved/MARE-0088-net-hydro-measurement-data.md9671c2b, 2026-09-26. File: resolved/MARE-0089-net-hydro-local-through-flow-law.md972e04a, 2026-09-26. File: resolved/MARE-0090-net-hydro-screen-mf2022-law.mdaa2d0a7, 2026-09-26. File: resolved/MARE-0091-net-hydro-twine-cross-flow-extraction.mde89b5b2, 2026-09-26. File: resolved/MARE-0092-net-hydro-panel-load-law-variant.mdd8c000c, 2026-09-26. File: resolved/MARE-0093-net-hydro-load-law-validation-tests.md8e64e88, 2026-09-26. File: resolved/MARE-0094-net-hydro-core-split-and-netstructure-wiring.mdab7f71f, 2026-09-27. File: resolved/MARE-0095-net-hydro-withconstraints-port.mda0feeff, 2026-09-27. File: resolved/MARE-0096-net-hydro-array-port.md8a40f10, 2026-09-27. File: resolved/MARE-0097-net-hydro-delete-legacy-panel-copies.mdb8a045f, 2026-09-27. File: resolved/MARE-0098-disk-odefcn-normal-tangential-projection.md3daf95a, 2026-09-28. File: resolved/MARE-0099-net-hydro-baselines-and-towed-panel-validation.md3ada983, 2026-09-27. File: resolved/MARE-0100-net-hydro-netstructure-wake-casting.mdc568134, 2026-09-27. File: resolved/MARE-0101-net-hydro-cage-validation.md6c643bf, 2026-09-27. File: resolved/MARE-0102-net-hydro-wake-benchmark.md868d62f (merge of wp/E0-vocabulary; marenv 8493854, fhsim_environment 4ce3979), 2026-09-26. File: resolved/MARE-0103-net-hydro-vocabulary-and-adrs.md220e4a7, 2026-09-26. File: resolved/MARE-0104-net-hydro-methods-manual.md8f274c3, 3465f2e, 2026-09-27. File: resolved/MARE-0105-net-hydro-guides-and-examples.md663e2fb, 2026-09-27. File: resolved/MARE-0106-net-hydro-validation-report.md025dae5, 2026-09-27. File: resolved/MARE-0107-net-hydro-documentation-review.mdresolved/MARE-0108-twine-cross-flow-laminar-limit-asin-nan.md4714b56, 2026-09-27. File: resolved/MARE-0109-induction-factor-exceeds-one-low-solidity.md16cc208, 2026-09-27. File: resolved/MARE-0111-net-hydro-screen-laws-no-in-plane-load.mdf639931 (fix), 32b6d65 (tests), 2026-09-27. File: resolved/MARE-0112-net-structure-array-buoyant-twine-nan-damping.mdresolved/MARE-0113-mesh-opening-solidity-unstretched-bar-length.mdc17bbf5, 2026-09-27. File: resolved/MARE-0114-withconstraints-no-wake-casting.md83ed259, 2026-09-27. File: resolved/MARE-0115-netstructure-onto-netpanelsetup.mdresolved/MARE-0116-wake-self-shadowing-under-manoeuvres.md6c7c72b, 2026-09-27; kept and deprecated by owner decision (Q3, lead ruling R37). File: resolved/MARE-0117-deprecate-netstructure-wake-effect.md8ce0244, 2026-09-27. File: resolved/MARE-0118-netstructurearray-onto-netpanelsetup.mdresolved/MARE-0119-withconstraints-slow-system-time.mdresolved/MARE-0120-net-file-lookup-working-directory.mdccff439 (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.md0f1f58c, 2026-09-27. File: resolved/MARE-0124-sphere-spheremesh-unused.md11887b6, 2026-09-27. File: resolved/MARE-0125-phase-f-b6-rebenchmark.md289a12d, 2026-09-27. File: resolved/MARE-0126-phase-f-contracts-and-adrs.md9ab77f5, 2026-09-27. File: resolved/MARE-0127-phase-f-disk-sphere-cast-wakes.mda523515, 2026-09-27. File: resolved/MARE-0128-phase-f-documentation.md2d95765, 2026-09-27. File: resolved/MARE-0129-phase-f-net-lumped-wake.md31e51a7, 2026-09-27; floor raised (QG1) on wp/G5-mf2022-floor, 2026-09-27. File: resolved/MARE-0130-screen-mf2022-solidity-below-eq10-roots.md079c3ec, 2026-09-27. File: resolved/MARE-0132-w9-private-field-not-observable.mdc8d9e6d, 2026-09-28. File: resolved/MARE-0133-net-acceleration-limit-drives-the-net.md1de224f, 2026-09-28. File: resolved/MARE-0134-jacobian-omits-bottom-contact.md6dcd350, 2026-09-28. File: resolved/MARE-0135-sundials-jacobian-unfilled-after-touchdown.md53286c4, 2026-09-28. File: resolved/MARE-0136-freeze-rearms-on-ambient-current.mdd10d5da, 2026-09-28. File: resolved/MARE-0137-harmonics-outside-sign-bounds-accepted.mdresolved/MARE-0138-validation-tests-run-by-default.mdresolved/MARE-0139-collinear-mesh-panel-nan-tension.mdb184053, 2026-09-30. File: resolved/MARE-0140-solidity-inputs-unvalidated-clamp-flags-discarded.mdff4a1bb, 2026-09-30. File: resolved/MARE-0141-cable-share-of-cast-wake-not-reported.md315b3ab, 2026-09-30. File: resolved/MARE-0142-net-hydrodynamics-test-gaps.mdresolved/MARE-0143-grid-wake-throws-on-degenerate-net.md40c4b1a, 2026-09-30. File: resolved/MARE-0144-relax-lumped-non-finite-area-throws.mdresolved/MARE-0145-nan-solidity-handled-differently-by-laws.mdresolved/MARE-0146-friction-identity-doc-ignores-mf2022-floor.mdresolved/MARE-0147-mf2022-warning-says-extrapolated-above-clamp.mdresolved/MARE-0148-law-doxygen-cites-removed-panel-functions.mdresolved/MARE-0149-stale-q12-and-menv-0008-status-text.mdresolved/MARE-0150-wakecutoff-no-effect-on-disk-and-sphere.mdresolved/MARE-0151-wake-example-comments-predate-lumped-wakes.mdresolved/MARE-0152-lumped-wake-step-at-rear-face-undocumented.mdresolved/MARE-0153-bottom-contact-flag-repeats-depth-lookup.mdresolved/MARE-0154-dead-code-after-panel-refactors.mdd387de1, 2026-09-30. File: resolved/MARE-0155-load-law-formulas-duplicated.mdresolved/MARE-0156-deprecation-warning-names-base-class.md2ecd78b, 2026-09-30. File: resolved/MARE-0157-wakeeffect-finalsetup-samples-waked-current.md1d91424, 2026-09-30. File: resolved/MARE-0158-netstructurearray-panel-and-cable-water-velocity-differ.md16e601b, 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.mdresolved/MARE-0160-adr-0001-not-marked-partly-superseded.mdresolved/MARE-0161-installed-headers-need-transitive-environment-and-coribo.mdresolved/MARE-0162-marenv-used-directly-without-requirement.mdresolved/MARE-0164-added-drag-left-out-of-lumped-wake.md9dd4572, 2026-09-30. File: resolved/MARE-0165-removed-parameters-dropped-without-warning.mdresolved/MARE-0166-cablebranched-general-fluidrho-unused.mdresolved/MARE-0200-twinecrossflow-cn-steps-at-re-32-and-1e4.mdbdc360d, 2026-09-28. File: resolved/MARE-0201-screen-law-jacobian-at-rest-not-pinned.mdbdc360d, 2026-09-28. File: resolved/MARE-0202-knot-diameter-ratio-documented-as-twinecrossflow-only.mdresolved/MARE-0203-netstructurearray-knot-diameter-ratio-fixed.mdresolved/MARE-0204-normalforcecalc-dead-and-leaks.md7002356 (merge of da1f170), 2026-09-28. File: resolved/MARE-0205-panel-jacobian-eighteen-slots-where-twelve-suffice.mdresolved/MARE-0206-panel-load-diagnostics-computed-every-call.mdresolved/MARE-0207-lift-under-induction-placement-of-f-squared.mdresolved/MARE-0208-hydroa3-lower-bound-and-nan-accepted.md7a9aa4e, 2026-09-30. File: resolved/MARE-0209-netstructure-declares-dense-jacobian.mdresolved/MARE-0210-wave-kinematics-per-panel-dominate-rhs.mdresolved/MARE-0212-net-panel-and-cable-loops-single-threaded.mdresolved/MARE-0213-net-cable-density-blended-twice.mdresolved/MARE-0214-surface-piercing-buoyancy-from-end-nodes.mdresolved/MARE-0215-no-froude-krylov-or-added-mass-excitation.mdc6b0db8, 2026-09-28. File: resolved/MARE-0216-cablerm-wet-test-wrong-wave-sign.mdresolved/MARE-0217-cablerm-tangential-drag-equals-normal.mdc6b0db8, 2026-09-28. File: resolved/MARE-0218-6dofcable-buoyancy-without-g-and-scaled-axis.mdresolved/MARE-0219-disk-on-seabed-loses-weight.mdresolved/MARE-0220-net-appendage-added-mass-ca-one.mdc6b0db8, 2026-09-28. File: resolved/MARE-0221-cablerm-kelp-drag-nan-for-axial-flow.mdresolved/MARE-0222-cablerm-allocates-in-odefcn.mdresolved/MARE-0224-net-cable-element-mutates-in-const-odefcn.mdresolved/MARE-0225-cable-objects-see-no-wave-velocity.mdresolved/MARE-0226-trawlcable-above-surface-treated-as-submerged.mddea65d2, 2026-09-30. File: resolved/MARE-0227-6dofcable-no-current-and-submergence-datum.md0b30a62, 2026-09-28 (the test; the model behaviour it exposed is MARE-0229). File: resolved/MARE-0228-bdf-touchdown-step-recovery-fragile.mdresolved/MARE-0229-bdf-high-order-sustains-seabed-contact-oscillation.mdf74c7b2, 2026-09-28. File: resolved/MARE-0301-external-wakes-per-step.mdfc1ecfe, 2026-09-28. File: resolved/MARE-0302-private-grid-defaults-at-1e4-panels.mdc6b8142, 2026-09-28. File: resolved/MARE-0303-wakeeffect-duplicate-flow-lookups.mdresolved/MARE-0304-frozen-net-wake-drifts.mdresolved/MARE-0305-lumped-momentum-from-mean-flow-square.mdresolved/MARE-0306-seabed-and-surface-images.mdresolved/MARE-0307-private-wake-without-seabed-image.mdresolved/MARE-0308-near-wake-solidity-snc.mdresolved/MARE-0309-lumped-wake-ambient-normalisation-and-linear-superposition.mdresolved/MARE-0310-parallel-loops-in-withconstraints-and-array.mdresolved/MARE-0311-receivers-take-external-wakes-by-the-cutoff-tier.mdresolved/MARE-0312-wake-composition-momentum-flux-rule.mdresolved/MARE-0313-surface-and-wave-excitation-not-everywhere.mddea65d2, 2026-09-30. File: resolved/MARE-0315-6dofcable-ring-no-environment.mdresolved/MARE-0316-net-cable-excitation-isotropic.md65577aa, 2026-09-30. File: resolved/MARE-0317-withconstraints-solver-thread-pool.md7f702f3, 2026-09-30. File: resolved/MARE-0318-netelement3n-uninitialised-line-pointer.md60f1896, 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.mdInternalCable::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.mdNet/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.md3a2ca11 (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.md8c92f48, 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.md218990c, 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.mdnet_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.mda952e98, 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.md3a76af8, 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.md0df0e25, 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.mdc8b854a, 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.md159c2b2, 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.md48508f2, 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.mdd51e878, 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.md9b08480, 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.md4387243, 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.md78aac71, 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.md6217c0a, 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.md3c7f08b, 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.md76b694a, 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.mdc65a30d, 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.md677389d, 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.md63591fb, 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.md417126a, 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.mdCableElBasics 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.mdNet/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.mdCable/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.mdCable/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.mdT = 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.mdCable::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.mdnet_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.mdReadNetSpec 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.mdReadNetSpec (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.mdReadNetSpec (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