|
FhSim
3.1.0
Marine systems simulation
|
A trawl net is described as a netmaker draws it: one half of each panel, as sections cut from mesh counts, from the codend forward, with the lines along the section edges. The reader and the mesher are in src/net/trawlspec/ (trawlwriter::ReadNetSpec, CTrawlNetAssembler; moved here from fhsim_trawlwriter, its ADR 0002): they turn a specification into the <Net> text of the Net/NetStructure file FhSim simulates, with port and starboard mirrored.
A net SimObject (Net/NetStructure, Net/NetStructureWithConstraints, Net/NetStructureWakeEffect) reads a specification directly, with NetSpec="net.xml" instead of File: it meshes the net in process into that text, %.4G rounding included, and reads it as it reads a net file, so the run is the one with fhsim_trawlwriter's net file as File. NodesInputForce defaults to the specification's Connect nodes and NodesOutputPosAndVel to its Connect and Output nodes; no file is written. A relative NetSpec is looked up in the directory of the main input file. An error in the specification fails the setup with one message naming the file (and the line, for an error in it).
fhsim_trawlwriter's trawlwriter writes the net file and a drawing of each panel, or a whole trawl system with doors, warps and bridles (its README). Its data/nets/ holds the examples Alfredo3, Morenot520 and the four-panel FourPanelNet1 (here tests/data/trawlwriter_FourPanelNet1.xml), each the net of a C++ design of fhsim_trawlwriter.
Upper, Lower and, for a four-panel net, Side. Each describes one half of the panel; the other half is its mirror image.AftMostSection) numbers its first section AftMostSection, so a section number means the same position along the net in every panel.T3 is a splitter: its leading edge carries the two wings, T3 meshes apart. Sections in front of the splitter are wing sections, given once and mirrored to the other wing; sections behind it are belly sections across the whole panel. A panel has at most one splitter; a panel without one is all belly.Panels).<Line>).MeshCountFactor) is meshed as a point (a codend's closing, a wing tip). A panel of only one section, codend included, with both end edges that narrow is an error: both ends would be points and the netting two-node elements without area. Give one end edge at least 20 meshes, or the panel another section; a panel of two or more sections may have both ends narrow.MeshCountFactor scales all of them (N, T1, T2, T3, not the cuts); the Alfredo designs use √2.All lengths are in metres, stiffness in Pa, density in kg/m³. Numbers are decimal, with a point (1.5, 2e-3); no hexadecimal, infinity or NaN. Lengths, diameters, stiffnesses, densities, N, Spacing, PerMeter, Refine, DrawScale and MeshCountFactor must be positive; T1, T2, T3 and Reinforcement must not be negative; counts are whole numbers.
These are errors naming the file and line: an unknown element or attribute, a bad number, a reference to something not declared (or declared further down), an Id declared twice, a panel named twice in Codend Panels, a node named twice in Connect or in Output, and a panel the mesher cannot mesh (one section with both end edges under 20 meshes, a splitter without a wing section in front, a splitter as the aft section with an aft edge under 20 meshes; see Construction rules).
| Attribute | ||
|---|---|---|
Name | required | The net's name, of letters, digits, _ and -; the net file is <Name>.xml. |
MeshCountFactor | default 1 | Multiplies every mesh count. |
MaxNumPanels | optional | Refine the net until it has this many panels. |
MaxEdgeLengthFactor | optional | Refine the net until no element's length factor exceeds this. |
Refinement. FhSim (Net/NetStructure) divides the net's elements while it has fewer panels than MaxNumPanels, or while an element's length factor exceeds MaxEdgeLengthFactor; it divides first the element whose length times its refine factor is largest. Without the two attributes the net file has MaxNumPanels="0" and the largest MaxElementLengthFactor: the net is not refined, and the Refine of sections and lines has no effect.
Children, in any order: Material, Twine, Panel, Codend, Line, Connect, Output. A Material or Twine must come before it is used, in a Codend too.
A named stiffness E and density Rho, for twines and lines.
Netting: twine diameter D, bar length L (half the mesh size) and a Material.
Which is Upper, Lower or Side. Children: Section.
ConnectedSections (default 0, at most the panel's sections) is how far forward the panel's side edges are joined to the neighbouring panel: over its first ConnectedSections sections, counted from the panel's aft end, codend sections included. Alfredo3's lower panel has 2 codend and 2 own sections and ConnectedSections="4": all of it is joined. Its upper panel has 5 sections and also 4: its front wing section hangs free.
AftMostSection (default 0; only on a Side panel) is the number, in the net's count from the aft end, of the panel's aftmost section: a side panel that starts in front of the codend has AftMostSection equal to the number of codend sections. It must be a section of the upper panel.
| Attribute | ||
|---|---|---|
Twine | required | The netting. |
N | required | Meshes from the leading to the trailing edge; at least 0.5. |
T1, T2 | required | Meshes along the leading and the trailing edge; not both 0. |
T3 | optional | Makes the section a splitter: meshes between the wings' attachments; at most T1. |
Cut | optional | Wing edge cut in netmaker notation, see below. Only on a wing section. |
Reinforcement | default 0 | Added planform area from reinforcements, as a ratio. |
Refine | default 1 | Weight of the section's elements in the refinement (see <TrawlNet>). |
Cut notation. Whole-number counts of N (points), B (bars) and T (transversals) in one repeat of the wing edge, such as 1N2B or 2T1B; a missing count is 1 (T2B), AB is all bars, and a count may be negative (1N-1B). Only the ratio of the counts matters: 2N4B is 1N2B. 2N + B must not be 0 (1T alone): such an edge runs along a mesh row, which the generated geometry cannot draw. An all-zero cut (0B) is a straight section, as without Cut. A cut skews a wing's edge, so it is an error on a section behind the wings: the codend, the sections up to and with the splitter, and every section of a panel without one.
Children: Section, from the aft end forward. They become the aftmost sections of the panels in Panels (a comma-separated list; default all panels).
A line along an edge of a section: Side is Front, Back, Outer, Inner, T3 (the splitter's edge between the wings), Upper or Lower. The edge must be one the section has: Front, Back and Outer on every section, Inner on a wing section, T3 on the splitter, and Upper and Lower (the edges joined to the upper and the lower panel) on a belly or wing section of a Side panel. L and D are its length and diameter. Refine (default 1) multiplies the line's element lengths in the refinement criterion of Net/NetStructure: larger values give the line more, shorter elements, if the net is refined (see <TrawlNet>). DrawScale (default 1) draws the line DrawScale times thicker; it only affects visualisation. VisualMaterial is the rendering material (default Trawl/Wire2). Children:
<Floats N D Rho Start End Material/>: spheres of diameter D;<Bobbins N D Thickness Rho Start End Material/>: disks.Give their number as N, or as Spacing (one per so many metres of line) or PerMeter; with the last two the count is rounded down.
Start and End place them along the line as fractions of its length, the first at Start and the last at End, evenly between (a single one is at Start); Start is not after End. Without them, the N of them divide the line into N+1 equal parts. Spacing and PerMeter only give the count; the placement is the same. A line has at most one Floats and one Bobbins. Material is the rendering material (default floater).
Per side and divided lines. Most lines are given per side: the Outer and Inner edges, every edge of a wing section, and a side panel's Upper and Lower edges of its wing sections. L, the count and the placement are those of one side's line, and the other side's line is its copy. Positions run from the edge's aft end (for Front and Back of a wing section, from the side edge towards the wing).
A line along an edge that spans both sides is divided into a port and a starboard half: Front and Back of a belly section and of the splitter, T3, and a side panel's Upper and Lower of its belly sections (its port and starboard panel). For a divided line:
L is the whole line's length, port to starboard; each half is L/2.N (or Spacing, PerMeter over the whole L) counts the whole line's items; each half has N/2 of them, and an odd one out sits at the middle, where the halves meet.Front, towards the wing; for T3, the wing; for a side panel's lines, the aft end). Start and End place a half's items on that half, from its outer end; without them the N items divide the whole line into N+1 equal parts.N counts the whole line because the C++ designs mean it so: Alfredo3's 24 bobbins of 0.2 m on its 6.3 m fishline (T3) fit only as 12 on each half, and Morenot520's single float on the T3 headline is the centre float.
Comma-separated node names: Wing1 … Wing8, HeadlineSide, HeadlineC, FishlineSide, FishlineC, Codend. Connect nodes take the bridle forces; Output nodes only report their positions and velocities. A net has a Connect; a trawlwriter bridle has a leg for each of its nodes, in the order given (shrimp has two, alfredo4legs four, the other designs three).
Each name is a node on the port side, mirrored to starboard:
| Node | Where |
|---|---|
Wing1 | The upper panel's wing tip; without wings, its front corner at the side edge. |
Wing2 | The upper panel's front corner at the side edge. |
Wing3 | The side panel's front corner at the upper panel; without a side panel, Wing2. |
Wing4 | The side panel's upper wing tip, or its front corner at the upper panel; without a side panel, Wing2. |
Wing5 | The side panel's lower wing tip, or its front corner at the lower panel; without a side panel, the lower panel's front corner at the side edge. |
Wing6 | The side panel's front corner at the lower panel; without a side panel, as Wing5. |
Wing7, Wing8 | The lower panel's wing tip (both); without wings, its front corner at the side edge. |
HeadlineSide, FishlineSide | The upper and the lower panel's wing where it joins the splitter; without wings, the panel's front corner at the side edge. |
HeadlineC, FishlineC | The centre of the upper and the lower panel's front edge. |
Codend | The centre of the aft end. |
Names may be one node: a wing that ends in a point (a front wing section with T1 0 or nearly) makes Wing1 and Wing2 one node, and on a four-panel net the side panel's corners may coincide with the lower panel's. Morenot520 and FourPanelNet1 connect Wing1 and Wing2, which are one node there: that node takes the forces of both bridle legs. NodesInputForce of the net file lists the names, and the net file's PWing1 … PCodend give their node numbers.