|
FhSim
3.1.0
Marine systems simulation
|
The XML parameters of every SimObject that casts or receives wakes through environment::wake::BodyWake (contract C3), in one place. A SimObject's own documentation lists CastWake and refers here. They are read once, by ReadBodyWakeSettings(creator, kind) (include/fhsim_environment/BodyWake.h), which calls ReadWakeSettings (WakeSchedule.h), for a source set ReadSourceSetWakeSettings (WakeCaster.h), and ReadExternalWakeUpdate (ExternalWakes.h). What the schedule and the casters do with them is in Wakes.
| Parameters | A body (BodyWakeKind::Single: TestWakeBody, a sphere or disc with a shape caster, fhsim_marine_elements' Net/Disk, Net/Sphere, fhsim_base's Adaptive/CablePendulum (the ball), fhsim_fishery's Trawl/CenterWeight) | A source set (BodyWakeKind::SourceSet: a net, TestWakeCluster) |
|---|---|---|
CastWake and the common Wake* parameters (below) | yes | yes |
WakeEvaluation, WakeLength, WakeGrid, WakeXStartFactor | no | yes |
ExternalWakeUpdate | yes | yes |
Every parameter is read whether or not CastWake is set, and the checks run only with CastWake. Without it, each one given in the input is logged once as "ignored: CastWake is not
true" (ENV-0070, fhsim_marine_elements MARE-0335), since a receiver with, say, WakeUpdate="Periodic" would otherwise run without a word. ExternalWakeUpdate acts on every receiver, casting or not. The object's fluid density is not a wake parameter: it is the SimObject's own (Rho in the test models), handed to the BodyWake at construction.
Defaults by lead ruling R27 (choices, not fitted values); WakeIterations by owner ruling R130.
| Parameter | Default | Meaning | Setup error when |
|---|---|---|---|
CastWake | false | Register and build the wake. | – |
WakeUpdate | Freeze | Off: one build at WakeBuildTime, never rebuilt (once more after a failed current lookup dropped the wake, ENV-0082). Freeze: a build at WakeBuildTime and up to WakeIterations more until converged, then frozen; re-armed when the source velocity or the ambient current at the source drifts, or the object moves away from its frozen wake. Periodic: a build every WakePeriod. | not Off, Freeze or Periodic |
WakeBuildTime | 0 s | Time of the first build (lead decision R51: keep 0). | not finite |
WakeIterations | 4 | Freeze: rebuilds after the first (owner ruling R130; 2 before). An N-row farm of casting structures needs N or more (owner ruling R121). | negative |
WakeIterInterval | 5 s | Freeze: time between those rebuilds. | ≤ 0 or not finite |
WakeTolerance | 0.01 | Freeze converges when the caster's change measure is below it: |ΔM|/M for a body or a source set without a private field; for one with a private field (a net) the larger of max|ΔR| at the sources and the |ΔM|/M of its lumped source (R121). | ≤ 0 or not finite |
WakePeriod | 10 s | Periodic: time between rebuilds. | ≤ 0 or not finite |
WakeRelaxation | 1 | Periodic: α in (0, 1], M = αM_new + (1 − α)M_old. | outside (0, 1] |
WakeBlendTime | 2 s | Smoothstep cross-fade of each rebuild; with 0, casters that rebuild in the same step see each other in PreOdeFcn order. | negative, or above WakePeriod (Periodic) or WakeIterInterval (Freeze) (lead ruling R22) |
WakeRearmTolerance | 0.1 | Freeze: drift of the filtered source velocity, or of the filtered ambient current at the source, relative to the relative flow speed at the freeze (at least 1 mm/s), that re-arms Freeze; a source velocity below it at the freeze is snapped to 0 (R50). | ≤ 0 or not finite |
WakeRearmDistance | 0.1 | Freeze: distance between the object's reference point and its frozen wake frame, as a fraction of √(frontal area), that re-arms Freeze (R50). | ≤ 0 or not finite |
WakeFilterTime | 5 s | Low-pass time constant of the source velocity and of the ambient current the re-arm watches; 0 does not filter. | negative or not finite |
WakeExpansion | 0.05 | Kernel expansion rate k (marenv contract C4). | ≤ 0 or not finite |
WakeCutoff | 1e-3 | (1) A source set's private grid: the deficit below which a footprint is truncated; not given, the grid's cutoff is sized from the number of sources (R48). (2) With CastWake: the receiver's cutoff tier of the other objects' wakes (owner decision R47); without CastWake that tier is 1e-4 and this parameter is ignored (and logged so). | outside (0, 1) |
Read by ReadSourceSetWakeSettings for BodyWakeKind::SourceSet only; they act on the object's private field (the shading of its own sources), not on the lumped wake the others see.
| Parameter | Default | Meaning | Setup error when |
|---|---|---|---|
WakeEvaluation | Grid | Grid: the private field superposed once into a grid in the wake frame; Direct: the direct sum over the sources, the reference; None: no private field, the sources do not shade each other (ENV-0098). | not Grid, Direct or None |
WakeLength | 0 m | Grid reach beyond the object's rear source; 0 is the largest source diameter. | negative |
WakeGrid | 0, 0, 0 | Grid cells along the flow, across it and vertically; 0, 0, 0 sizes the grid from the sources at each rebuild (R48). | a zero or negative count unless all three are 0 |
WakeXStartFactor | 0.5 | x_start = max(WakeXStartFactor·D, x_start,min) of each private source: no deficit closer downstream. A body's lumped wake always starts at its rear face (QF7) and does not read it. | negative |
| Parameter | Default | Meaning | Setup error when |
|---|---|---|---|
ExternalWakeUpdate | Step | Step: the other objects' wakes and the own private field are composed once per integrator step at the sample points, in PreOdeFcn, and held for the step (owner decision R46, R135, R136); Evaluation: composed live in every evaluation, the reference. See The wakes, once per step: ExternalWakeUpdate. | not Step or Evaluation |