FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches

A vessel hull in the horizontal plane, with heave, roll and pitch driven by the wave elevation sampled under it.

+ Collaboration diagram for Wave hull:

A time-domain model for small vessels (fishing vessels, workboats, USVs) that needs no frequency-domain data. It carries its own kinematics: surge, sway and yaw in the horizontal plane, and heave, roll and pitch from the free-surface elevation of the environment's wave field (regular or irregular waves, several wave trains) sampled at the hull's position, so the encounter frequency follows from the vessel's own motion. It is the base of specialized vessel models, which add loads, e.g. Vessel/WavePropulsionHull (propeller and rudder). On its own the hull drifts with its initial velocity until the damping stops it.

Horizontal plane

States Pose = (N, E, psi): north and east of the CG [m], heading [rad] from north towards east; Velocity nu = (u, v, r): surge and sway [m/s] and yaw rate [rad/s] in the body frame.

N' = u cos psi - v sin psi,   E' = u sin psi + v cos psi,   psi' = r

(Mass + A11) u' - (Mass + A22) v r            = -X(u) + tau_1
(Mass + A22) v' + (Mass + A11) u r            = -Y(v) + tau_2
(YawInertia + A66) r' + (A22 - A11) u v       = -N(r) + tau_6

The Coriolis and centripetal terms are those of the rigid body and of the added mass, with the destabilizing Munk moment (A22 - A11) u v. The damping is linear plus quadratic per mode, e.g. X(u) = SurgeLinearDamping u + SurgeQuadraticDamping |u| u. The waves exert no horizontal loads (no first-order wave forces, no mean drift). tau are the loads a derived model adds.

Heave, roll and pitch

States q = (z, phi, theta): heave [m], positive down (NED); roll [rad], positive starboard down; pitch [rad], positive bow up. With the generalized wave load F (filtered, below):

(M + A) q'' + B q' + D(q') + C q = F + tau

Added-mass defaults

With the draught T = Mass / (Rho WaterplaneArea) of a box-shaped hull:

Coefficient Default From
A11 0.05 Mass rule of thumb
A22 Rho pi T^2 Length / 2 a flat plate of depth T per unit length
A66 A22 Length^2 / 12 A22 spread evenly over the length
A33 Rho pi Breadth^2 Length / 8 half-circle sections
A44 0.25 RollInertia rule of thumb
A55 A33 Length^2 / 12 A33 spread evenly over the length

The sway and yaw quadratic damping default to cross-flow drag with drag coefficient 1: Rho T Length / 2 and Rho T Length^4 / 64.

Wave excitation

N sample points with equal weights w = WaterplaneArea / N represent the waterplane, a Length x Breadth rectangle centred on the centre of flotation (Lcf forward of the CG). Each point i, at body coordinates (x_i, y_i) from the CG, samples the elevation eta_i (positive up). Only the heading rotates the points; roll and pitch are taken as small. The raw loads are the hydrostatic buoyancy of the elevation field:

Fz     = -Rho g sum(w eta_i)       (down)
Mphi   = -Rho g sum(w eta_i y_i)
Mtheta =  Rho g sum(w eta_i x_i)

They pass a first-order filter, tau F' + F = F_raw, which smooths high-frequency excitation. The filter state starts at zero, so the first few FilterTimeConstant show a start-up transient.

The points are placed so that their mean and second moments are exactly those of the rectangle (sum w x^2 = WaterplaneArea Length^2 / 12 about the centre of flotation, likewise across): SampleLevel 2, 3 and 4 are n x n grids, n = 3, 5, 7, with spacing d = span / sqrt(n^2 - 1); level 1 is the centre and four arms at d = sqrt(5/24) span.

Short waves

The averaging over the points attenuates waves down to about twice the spacing d. Shorter waves are not resolved: at a wavelength of d, all points along that axis are in phase and the vessel feels the full buoyancy of the wave (aliasing). Along the length:

SampleLevel Points d / Length Shortest resolved (2 d) Aliased at (d)
1 5 0.456 0.91 L 0.46 L
2 9 0.354 0.71 L 0.35 L
3 25 0.204 0.41 L 0.20 L
4 49 0.144 0.29 L 0.14 L

For a 20 m vessel at level 2 waves below 14 m (deep-water period 3.0 s) are not resolved and 7 m waves (2.1 s) alias. This is a known model limitation; there is no wavelength filter. Choose the level so the sea holds little energy below 2 d, or use a wave field without components that short.

Review issues:
0354 — WaveHull aliases waves shorter than twice the sample spacing

Model notes

Derived models

A derived model overrides ExtraLoads, the loads tau on all six modes, and ExtraLoadsVelocityJacobian, their derivatives with respect to (u, v, r). The loads may depend on the velocity and on the derived model's inputs; the Jacobian holds the inputs fixed.

Visualization

The hull is drawn as a prism over the Length x Breadth waterplane (centred on the centre of flotation) with a pointed bow over the forward quarter, from the draught below the waterline to the same height above it. It follows the Position and Rotation outputs. The drawing is indicative only; the model sees the rectangle.

Example configuration excerpt

<Lib
LibName = "marine_elements"
SimObject = "Vessel/WaveHull"
Name = "Boat"
Length = "20"
Breadth = "6"
WaterplaneArea = "96"
Mass = "150000"
RollInertia = "6.0e5"
PitchInertia = "4.5e6"
YawInertia = "4.5e6"
GMT = "0.8"
GML = "25"
RollQuadraticDamping = "2.0e5"
SurgeQuadraticDamping = "1.5e3"
/>
<Lib
LibName = "environment"
SimObject = "Environment"
Name = "Env"
Waves.Spectrum = "JONSWAP"
Waves.Theory = "Airy"
Waves.Hs = "1"
Waves.NumWaves = "30"
/>
...
<InitialCondition
Boat.Pose = "0,0,0.5"
Boat.Velocity = "3,0,0"
/>

Output Ports

Name Width Description
Motion 3 The Motion state: heave [m, down], roll [rad, starboard down], pitch [rad, bow up].
MotionRate 3 The MotionRate state.
Excitation 3 The filtered wave loads: heave force [N, down], roll and pitch moments [N m].
Velocity 3 The Velocity state: surge, sway [m/s] and yaw rate [rad/s] in the body frame.
Position 3 NED position of the CG: north and east of the Pose state, down = heave [m].
Rotation 3 Euler angles (roll, pitch, heading) [rad].

Configuration parameters

The model needs the shared Environment (an environment Environment object); without waves it stays in calm water.

Name Width Description
Length 1 Waterplane length [m]. Required.
Breadth 1 Waterplane breadth [m]. Required.
WaterplaneArea 1 Waterplane area [m^2] (Default: Length * Breadth).
Lcf 1 Longitudinal position of the centre of flotation forward of the CG [m] (Default: 0).
Mass 1 Displacement [kg]. Required.
RollInertia 1 Roll moment of inertia about the CG [kg m^2]. Required.
PitchInertia 1 Pitch moment of inertia about the CG [kg m^2]. Required.
YawInertia 1 Yaw moment of inertia about the CG [kg m^2]. Required.
A11 1 Surge added mass [kg] (Default: see Added-mass defaults).
A22 1 Sway added mass [kg] (Default: see Added-mass defaults).
A66 1 Yaw added moment of inertia [kg m^2] (Default: see Added-mass defaults).
A33 1 Heave added mass [kg] (Default: see Added-mass defaults).
A44 1 Roll added moment of inertia [kg m^2] (Default: see Added-mass defaults).
A55 1 Pitch added moment of inertia [kg m^2] (Default: see Added-mass defaults).
A35 1 Heave-pitch added-mass coupling [kg m] (Default: 0).
B35 1 Heave-pitch damping coupling [N s] (Default: 0).
GMT 1 Transverse metacentric height [m]. Give exactly one of GMT and RollPeriod.
RollPeriod 1 Undamped roll natural period [s], sets the roll stiffness instead of GMT.
GML 1 Longitudinal metacentric height [m]. Give exactly one of GML and PitchPeriod.
PitchPeriod 1 Uncoupled undamped pitch natural period [s], sets the pitch stiffness instead of GML.
SurgeLinearDamping 1 Linear surge damping [N s/m] (Default: 0).
SurgeQuadraticDamping 1 Quadratic surge damping (the hull resistance R = d u^2) [N s^2/m^2]. Required.
SwayLinearDamping 1 Linear sway damping [N s/m] (Default: 0).
SwayQuadraticDamping 1 Quadratic sway damping [N s^2/m^2] (Default: Rho T Length / 2).
YawLinearDamping 1 Linear yaw damping [N m s] (Default: 0).
YawQuadraticDamping 1 Quadratic yaw damping [N m s^2] (Default: Rho T Length^4 / 64).
HeaveDampingRatio 1 Linear heave damping ratio (Default: 0.3).
RollDampingRatio 1 Linear roll damping ratio (Default: 0.45).
PitchDampingRatio 1 Linear pitch damping ratio (Default: 0.3).
RollQuadraticDamping 1 Quadratic roll damping d in d |phi'| phi' [N m s^2]. Required; 0 switches it off.
SampleLevel 1 Sample points: 1 = 5, 2 = 9, 3 = 25, 4 = 49 (Default: 2). See Short waves.
FilterTimeConstant 1 Time constant tau of the excitation filter [s] (Default: 0.1). Must be positive.
Rho 1 Water density [kg/m^3] (Default: 1025).

Initial conditions

Name Width Description
Pose 3 North, east [m] and heading [rad] (Default: 0,0,0).
Velocity 3 Surge, sway [m/s] and yaw rate [rad/s] (Default: 0,0,0).
Motion 3 Heave, roll, pitch (Default: 0,0,0).
MotionRate 3 Their rates (Default: 0,0,0).

Full example file

Three propelled hulls of 12, 20 and 40 m in head, beam and bow-quartering irregular seas, drawn in the ocean of the environment.

<Contents>
<!--
Three WavePropulsionHull hulls of 12, 20 and 40 m in a 1.5 m irregular sea, drawn in the ocean
of the environment.
The sea is a JONSWAP spectrum, mean period 6 s, travelling south (MainDirectionDeg 180). Each
hull steams in a turning circle, so it stays in view and meets the waves from every direction:
the 12 and 40 m hulls to starboard, the 20 m hull to port.
The 12 and 40 m hulls are the 20 m workboat Froude-scaled by 0.6 and 2: lengths, GM and the
propeller diameter scale by s, areas and the resistance by s^2, mass by s^3, inertias and
RollQuadraticDamping by s^5, and the propeller speed by s^-1/2. Each starts at about its
straight-course speed. Added mass and the sway and yaw damping take their defaults.
SampleLevel grows with the length so the sample spacing stays below the shortest waves with
energy (about 6 m; see "Short waves" in the WaveHull documentation).
The live view needs a visualization build and the <Visualization> observer below;
simulationSpeed="1" runs it in real time. The camera starts at NED (-30, 0, 0) looking north
towards the hulls.
-->
<OBJECTS>
<Lib
LibName = "marine_elements"
SimObject = "Vessel/WavePropulsionHull"
Name = "Small"
Length = "12"
Breadth = "3.6"
Mass = "32400"
RollInertia = "46656"
PitchInertia = "349920"
YawInertia = "349920"
GMT = "0.48"
GML = "15"
RollQuadraticDamping = "15552"
SurgeQuadraticDamping = "540"
PropellerDiameter = "0.84"
KT0 = "0.45"
KT1 = "-0.35"
KT2 = "-0.1"
WakeFraction = "0.2"
ThrustDeduction = "0.15"
RudderArea = "0.54"
RudderAspectRatio = "1.5"
HullInteraction = "0.2"
SampleLevel = "2"
/>
<Lib
LibName = "marine_elements"
SimObject = "Vessel/WavePropulsionHull"
Name = "Medium"
Length = "20"
Breadth = "6"
Mass = "150000"
RollInertia = "6.0e5"
PitchInertia = "4.5e6"
YawInertia = "4.5e6"
GMT = "0.8"
GML = "25"
RollQuadraticDamping = "2.0e5"
SurgeQuadraticDamping = "1.5e3"
PropellerDiameter = "1.4"
KT0 = "0.45"
KT1 = "-0.35"
KT2 = "-0.1"
WakeFraction = "0.2"
ThrustDeduction = "0.15"
RudderArea = "1.5"
RudderAspectRatio = "1.5"
HullInteraction = "0.2"
SampleLevel = "3"
/>
<Lib
LibName = "marine_elements"
SimObject = "Vessel/WavePropulsionHull"
Name = "Large"
Length = "40"
Breadth = "12"
Mass = "1.2e6"
RollInertia = "1.92e7"
PitchInertia = "1.44e8"
YawInertia = "1.44e8"
GMT = "1.6"
GML = "50"
RollQuadraticDamping = "6.4e6"
SurgeQuadraticDamping = "6.0e3"
PropellerDiameter = "2.8"
KT0 = "0.45"
KT1 = "-0.35"
KT2 = "-0.1"
WakeFraction = "0.2"
ThrustDeduction = "0.15"
RudderArea = "6.0"
RudderAspectRatio = "1.5"
HullInteraction = "0.2"
SampleLevel = "4"
/>
<Lib
LibName = "environment"
SimObject = "Environment"
Name = "Environment"
Waves.Spectrum = "JONSWAP"
Waves.Theory = "Airy"
Waves.Hs = "1.5"
Waves.MeanPeriod = "6"
Waves.MainDirectionDeg = "180"
Waves.DirectionCosinePower = "10"
Waves.NumWaves = "40"
Bathymetry.Depth = "1000"
Visual.WorldRadius = "500"
/>
</OBJECTS>
<INTERCONNECTIONS>
<Connection
Small.PropellerSpeed = "5.16"
Small.RudderAngle = "0.35"
Medium.PropellerSpeed = "4"
Medium.RudderAngle = "-0.35"
Large.PropellerSpeed = "2.83"
Large.RudderAngle = "0.35"
/>
</INTERCONNECTIONS>
<INITIALIZATION>
<InitialCondition
Small.Pose = "40,-70,0"
Small.Velocity = "2.42,0,0"
Medium.Pose = "40,40,0"
Medium.Velocity = "3.13,0,0"
Large.Pose = "40,85,0"
Large.Velocity = "4.42,0,0"
/>
</INITIALIZATION>
<SIMULATION simulationSpeed="1">
<Timing TStart="0" TEnd="600"/>
<Integrator Method="RK45_i">
<StepControl StepMax="0.05" StepMin="1e-10" AbsTol="1e-3" RelTol="1e-3"/>
</Integrator>
</SIMULATION>
<OBSERVERS>
<FileOutput TOutput="0, 0:0.5:600, 600" Select="objects:all"/>
<Visualization frameRate="25"/>
</OBSERVERS>
</Contents>

This SimObject is referred to as Vessel/WaveHull