FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
Net hydrodynamics: methods manual

The panel load laws of the nets, their sources, velocities, parameters and limitations (formerly Sections 1 to 13 of this page) moved with the laws to fhsim_environment (its ADR 0002, MARE-0351): they are its page Hydrodynamics: shape and panel load laws, doc/user/hydrodynamics.md, which keeps the section numbers and anchors (nhm_sources to nhm_limitations), next to the shape laws of a sphere, a disc and a cylinder element and the submerged fraction. The headers are fhsim_environment/hydrodynamics/ (namespaces hydrodynamics and net_solidity). This page keeps what this library adds on top of the laws: how its nets and bodies cast their wakes (Section 14). Why the pieces sit where they do is recorded in doc/adr/ and fhsim_environment's ADR 0002; the vocabulary is fixed in CONTEXT.md.

11.4 The default law's lift and angle form against the data (MARE-0110, MARE-0131)

Since the owner ruling of 2026-10-13 (MARE-0110, resolved) the default law, LocalThroughFlow, takes its lift at 45° from the MF2022 Eq. 10 lift-to-drag ratio (fhsim_environment 3.1.1), so the 26–31 % lift deficit at high solidity is gone. Its two-harmonic angle form still misfits the angle dependence of Rudi, Løland and Zhan at 60–80° (fhsim_marine_elements_issue_0131). The numbers, the tests still disabled and their reasons are in Section 11.4 of fhsim_environment's doc/user/hydrodynamics.md, where the law lives.

14. The wake a net or a body casts

The load laws receive U∞; the wake decides how much of the upstream flow reaches a panel or body. The kernel, its composition and the gridded and direct fields are marenv's (its wake manual, doc/wake.md, and ADR 0002 there). This section states what the casters of this library hand to marenv since phase F of the net-hydrodynamics programme (ADR 0006, owner rulings R34 and R36, MARE-0129, MARE-0127). Parameters are in the user guide (Wake casting).

14.1 Two fields per casting net

With CastWake, Net/NetStructure and Net/NetStructureWithConstraints keep two fields (src/net/NetFlowInteraction.h: fhsim_environment's BodyWake over its PanelSourceSet, the net's panels through src/net/NetWakePanels.h; with WakeEvaluation None only the lumped field, and the panels do not shade each other):

Field Built from Registered in the environment Sampled by
private field: GriddedWake (WakeEvaluation Grid) or marenv SourceSetWake (Direct) one elementary source per panel, from the marching build no the net's own panels and cable elements
lumped field: SourceSetWake with one source the net's total panel force and frontal extent (Section 14.2) yes, under the SimObject name every other object
  • Self-shading. The marching build evaluates each panel's law at the ambient current, the other objects' lumped wakes (never the net's own) and the private field of the panels upstream, without waves, and adds that panel's source with M = drag/(½ρ|U|²) at its own inflow and a solidity for its near wake. Panel sources have marenv's MF2022 Eq. 11 near wake (r = 1.08 − 0.97 S up to 0.579 D behind the panel, blended to the far wake). The solidity S is the panel's geometric (cylinder) solidity S_c at its current mesh opening, without the knot factor and less the overlap of the bar families: with x = t/(L₀ sin 2φ), S_c = 2x − x², which at φ = 45° is MF2022 Eq. 2, 2t/s − (t/s)² (owner ruling R56 with the lead's definition, MARE-0308; net_solidity::CylinderSolidity). With SolidityModel Fixed the given Sₙ is used. MF2022 fitted Eq. 11 in the image-measured Snm, 2–27 % above S_c for their nets (p. 041301-3); the owner chose S_c. The law's induction (Section 8) still takes the law's Sₙ.
  • Own flow query. Panels (OdeFcn and Jacobian) and cable elements (OdeFcn, Jacobian and strain energy) read the waked current with GetWakedCurrent and the net's WakeQuery (BodyWake::Query(): exclude the own lumped field, add the private field), plus the wave particle velocity averaged over their nodes (owner ruling R62), through NetFlowInteraction, so they see the other objects' lumped wakes, the net's internal wake and the waves, and never the net's own lumped source. Without CastWake the query is empty, and the current is the facade's waked current. With ExternalWakeUpdate Step (the default) the wake composition at each centroid and midpoint, the private field included, is taken once per integrator step in PreOdeFcn, after the net's own rebuild, and held for every RK stage and Jacobian evaluation of the step (owner decision R46, owner ruling R135); during a rebuild blend the held samples take the blend weight of each evaluation's time, so the right-hand side stays C1 in time through the blend (owner ruling R136).
  • Private grid reach (WakeLength).** The private grid covers the structure and reaches WakeLength beyond the rear panel; WakeLength 0 is the largest panel diameter (fhsim_environment WakeCaster.cpp, PrivateGrid). Before phase F WakeLength was the reach of the registered grid other objects sampled, 0 meaning five times the structure's size; it no longer changes what other objects see.
  • **Objects inside the net (QF8, accepted). A separate SimObject inside a net's volume, such as a sinker tube, an internal rope or the lee side of a floater collar, sees only lumped sources, whose wake starts at the net's rear face, so it no longer sees the net's internal wake.
  • The lumped wake is a step at the rear face (QF7, accepted). The lumped wake starts at x_start = 0: the deficit is zero upstream of the rear-face plane and the full lumped deficit on it (about 0.29 at C_T 0.5). A separate SimObject that crosses the plane, such as a sinker tube, a bottom ring or a bridle node, sees a jump in its inflow, a state-dependent discontinuity in its OdeFcn. With an implicit integrator such as BDF this can show up as step-size collapse or Newton failures near the rear face (MARE-0152).
  • What you see. VisualFieldPlane, VisualWakeSources and EnvironmentProvider::GetWakeDeficit show the registered fields, i.e. the lumped wakes only, not the private field inside and just behind the net. Probes such as Test/FlowProbe inside a casting net read no internal wake either, so the W9 tests of the Zhan cylinder measure at caster level: the nets' BodyWake over the same cylinder of NetElement3N panels builds the private field, sampled at the rear-half centroids with the panels' own query (MARE-0132, owner answer QF13).

14.2 The lumped source of a net

After each marching build, at the same time and with the same blend, the net publishes one lumped source (marenv MakeLumpedSource):

  • Force. F = Σ of the panel forces of that build, i.e. at the shaded inflows, so the self-shading of the rear panels is included (design § 1.1). Lift is dropped: only F·ê_U counts. The cable elements are not included (QF9); their share of the along-flow drag is 0 in every shipped wake fixture and validation net, which have no cable elements (MARE-0129). A net that has cable elements reports their share in each rebuild's log line (MARE-0141): "Cable drag along the mean relative flow X N, panel drag Y N: cables and floats are Z % of the net's drag". X is the cables' force (floats and sinkers on them included) at the flow they see minus their force when the water follows each element, so tension, weight and wave excitation drop out. It is a diagnostic only; M is unchanged. Nor is the added drag of SetAddedDragPerMPS (both nets; reachable only through that setter, which has no input option, MARE-0384): the wake-casting panel evaluation does not include it, so M omits it in the same way (MARE-0164).
  • Relative flow. U_ref is the area-weighted mean over the panels of the free stream (ambient current with the other objects' lumped wakes, no waves) minus the panel velocity, the frame axis of the private field; ê_U = U_ref/|U_ref|. No source below 1 mm/s.
  • Momentum deficit. M = max(0, F·ê_U)/(½ρ q²_amb), ρ the net's Rho, q²_amb the area-weighted mean over the panels of |U_amb − u_p|², U_amb the current without any wake (lead ruling R87, superseding the shaded mean square of R55), so the momentum the lumped wake carries is the drag the net feels; with Periodic and WakeRelaxation α < 1, M ← αM + (1 − α)M_prev (marenv RelaxLumpedSource).
  • Superposition (R95). The lumped field composes its source's and its images' deficits by the momentum-flux rule D(1 − D) = Σ d_i(1 − d_i) (marenv MomentumFluxSum, owner ruling R95, which replaced R88's capped linear sum), and the facade composes the registered fields the same way. The private field keeps the product rule d = 1 − Π(1 − d_i) and multiplies onto the others' composition: its per-panel M is normalised by each panel's own shaded inflow, so adding linearly would count the shading twice (marenv doc/wake.md §4).
  • Frontal extent (QF5). The node positions of all panels are projected on the frame's two cross axes; the frontal area is the bounding rectangle W·H. If M/(W·H) > 0.96 the area is widened to M/0.96 so that M is kept, with a log line (QF6).
  • Position (QF7). The centre of that rectangle on the rear face, the plane of the downstream-most node; the field is published with x_start = 0, so the wake starts there.
  • Near wake (QF4). Solidity 0: the lumped source keeps the pinned momentum-theory near wake. Eq. 11 with a mean Sₙ would fit a single screen but not the two walls of a cage.

The rebuild log line ends with "lumped source M = …, area …, rear centre (…) m".

M against the old panel sum (QF14, open). The lumped M is the drag the net actually feels over the ambient ½ρq²_amb (R87; over the shaded ½ρ|U_ref|² until R55 and R87). Before phase F other objects saw the per-panel sources, and each panel's M is its drag over its own shaded inflow's ½ρ|U|² (KF2012Common.h:369), so a shaded rear panel kept about its unshaded M. For the 960-panel cage of the benchmark the lumped M is 11.75 m² against 12.99 m² for the panel sum (0.905 of it), and a second cage 20 m behind is shaded 3.7 % less: cage-2/cage-1 drag 0.760 against 0.733 with the old direct panel sum (Net hydrodynamics: benchmark of load laws and wake evaluation § 11.3). The design's definition is kept, so the far wake carries exactly the felt drag; whether it should carry the panel sum instead is owner question QF14. In S3 (Lader cages) the panel drag of the lumped source, M·½ρU_ref², is within 1 % of the model's total drag at 0.5–0.93 m/s (MARE-0129).

14.3 Bodies: Net/Disk and Net/Sphere

With CastWake, Net/Disk and Net/Sphere cast one lumped source each through fhsim_environment's BodyFlowInteraction (a BodyWake) and the shape casters disk_hydro::DiskCaster and sphere_hydro::SphereCaster (MARE-0127, QF10, MARE-0351), with the same Wake* parameters as a net except WakeEvaluation, WakeGrid, WakeLength and WakeXStartFactor, which they do not read. The field is registered in FinalSetup and rebuilt in PreOdeFcn; OdeFcn does nothing wake-related.

Net/Disk Net/Sphere
Force its drag law of lead ruling R24 (environment::disk_hydro::DragForce) at the disk velocity minus the current-only free stream its drag −K|v|v, K = ⅛ρπC_d D(D − d/π), at the sphere velocity minus the free stream
Frontal area normal to ê_U π(D² − d²)/4·|n·ê_U| + D·T·√(1 − (n·ê_U)²) (face ellipse less the cable hole plus edge rectangle; D = DiskD, T = DiskT, d the cable diameter D; ENV-0103) πD²/4
Rear-face centre, downstream of the centre (T/2)|n·ê_U| + (D/2)√(1 − (n·ê_U)²) D/2
  • The frontal area and the drag areas. The disk's face-on drag and frontal area are both the annulus π(D² − d²)/4 outside the cable (fhsim_environment disk_hydro, ENV-0103); its edge drag uses (D − d)·T and its edge silhouette D·T. The sphere's drag uses D(D − d/π)π/4 (sphere_hydro::DragFactor, K above) and its frontal area the full πD²/4. With the default cable diameter 0.01 m on a 1 m body the differences are at most 1 %; a thick cable through a small sphere or a disk seen edge on widens its lumped wake relative to its drag area.
  • The disk axis. The disk reads its Force input port in PreOdeFcn and hands its direction to its DiskCaster as the axis n (SetAxis; z when the force is zero), as OdeFcn takes it.
  • Own flow. Both bodies read their water velocity in OdeFcn and OdeJacobian with GetWakedFlow and WakeQuery{exclude = own field}, so a body never samples its own wake; without CastWake the query is empty and the result is bit for bit that of GetParticleVelocity. Their wake starts at the rear face, downstream of the centre where they read the flow.
  • Velocity in the force (owner answer QF12: kept). The shape caster's CurrentLoad computes the force with the body's own state velocity, while U_ref and the field's source velocity use the source velocity filtered over WakeFilterTime (default 5 s). For a fixed, moored or steadily moving body the two agree; during an acceleration M = F·ê_U/(½ρ|U_ref|²) is slightly inconsistent. A net has no such difference: its build evaluates every panel at the mean of its filtered node velocities, which also give u_s and U_ref (fhsim_environment src/environment/WakeCaster.h).
  • A face-on disk has M/A = C_n = 1.2 at the default C_n (test BodyWake.RegisteredSourceHasTheMomentumDeficitOfTheDrag), above 0.96, so its lumped area is widened to M/0.96 (logged).

Nothing enters the Jacobian in either case: the fields depend on time only, and the water velocity is a frozen input, as for the current (marenv wake manual, "The Jacobian approximation").