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

A 3DOF vessel.

+ Collaboration diagram for Norrbin Tanker:
Author
Karl Gunnar Aarsæther

Reference model

The manoeuvring model of Van Berlekom and Goddard (1972), "Maneuvering of large tankers", SNAME Transactions 80, with its data for nine tankers. The bernica data set is the Esso Bernicia 190,000 dwt tanker (L = 304.8 m) of its Appendix A, which Fossen's MSS toolbox implements in CRAFT/SHIP/models/tanker.m (github.com/cybergalactic/MSS). The hull and shallow-water terms, the rudder and propeller forces and every bernica coefficient were checked against that file on 2026-09-24. In particular, Xvr and Yur hold its combined coefficients d11 = 1 + Xvr = 2.02 and d22 = Yur - 1 = -0.752, and tanker.m's Yuvz term, Yuvz (1 - 0.8/z) u v z, is zero below z = 0.8. tanker.m's states are body-frame (u, v, r); this class's are NED velocities, so it adds the frame's rotation. The differences:

Model notes

Wake

With an Environment the tanker reads its hull inflow, the current without the waves (owner ruling O6a), through an environment::wake::BodyFlowInteraction: the current with every other object's wake and jet, never its own (D3). The other objects' wakes are held for the step at the hull with the default ExternalWakeUpdate Step and composed live with Evaluation. Without an Environment there is no current, no wake and deep water, as before; CastWake is then a parameter error.

With CastWake the tanker is a self-propelled body (environment::wake::PropelledObject, feature propeller-jet, owner rulings O12a, O13a and "Balance") and casts two fields, both on the common wake parameters (Wake*, fhsim_environment's doc/user/wake-parameters.md):

In steady self-propulsion the two balance: at the bernica service point (16 kn, 80 rpm) T_eff and the bare-hull resistance R differ by 0.2 %, and the far field carries about no net momentum (test NorrbinTanker_steadyFarFieldIsNearlyMomentumless). Measured there in 5 km deep still water: the jet's excess on its axis is 1.78 m/s (the efflux) at 1 D_p behind the propeller, 1.21 at 5, 0.83 at 10 and 0.55 m/s at 20 D_p; the hull deficit on its axis, TT/2 deep, is 0.031 (0.26 m/s) Lpp/2 behind the stern, 0.016 at 1 Lpp and 0.004 at 5 Lpp. The tanker's own motion is unchanged by CastWake; other objects feel the fields.

Example configuration excerpt

<Lib
LibName = "fhsim_base"
SimObject = "Vessels/Tanker"
Name = "A"
ModelType = "lb-series"
DataSet = "20000dwt"
RudderType = "small"
/>
...
<Connection
A.Force = "0,0,0"
A.Torque = "0,0,0"
A.Engine = "0"
A.Rudder = "0"
/>
...
<InitialCondition
A.Position = "0,0,-500"
A.Velocity = "0,0,0"
A.Rotation = "1,0,0"
A.Omega = "0,0,0"
A.EngineRPM = "0"
A.RudderAngle = "0"
/>

Input Ports

Name Width Description
Force 3 External force on the vessel, NED components. Only the north and east components enter the dynamics.
Torque 3 External torque on the vessel. Only the third (yaw) component enters the dynamics.
Engine 1 Engine torque command, dimensionless: 1 holds the service shaft speed and 15 to 16 kn ahead (see Model notes).
Rudder 1 Commanded rudder angle [rad]. Limited to +/-60 degrees and tracked by the RudderAngle state through a first-order lag with a 60 s time constant.

Output Ports

Name Width Description
Position 3 The Position state (NED).
Velocity 3 The Velocity state (NED). The down component has zero derivative.
Rotation 3 The Rotation state. Only the third component (yaw angle psi) enters the dynamics.
Omega 3 The Omega state. Only the third component (yaw rate) has a non-zero derivative.

Configuration parameters

Name Width Description
ModelType 1 Hydrodynamic data series, case-insensitive: lb-series, geosim-series or bernica. Required; other values are reported as errors.
Rho 1 Water density [kg/m^3] (Default: 1025). The Force and Torque inputs are divided by the displaced mass DISPL * Rho (and Lpp).
DataSet 1 Vessel within the series, case-insensitive. Required for lb-series (20000dwt, 100000dwt, 200000dwt, 500000dwt) and for geosim-series (240m, 274m, 304m, 332m); other values are reported as errors. Not read for bernica.
RudderType 1 small, medium or large, case-insensitive. Required; other values are reported as errors.
Scene 1 Ogre .scene resource for the vessel. Default: none, and the hull mesh vessels/skrog01/skrog01.mesh from fhsim_base.zip is drawn, fitted to the data set's Lpp along x and B along y, with the vertical scale equal to the breadth scale, centred on the position and with its keel at the draught. Visualization builds only.
CastWake 1 Cast the hull wake and the propeller jet (see Wake); needs an Environment. The other wake parameters (Wake*, ExternalWakeUpdate) are listed in fhsim_environment's doc/user/wake-parameters.md. (Default: false)
PropellerDiameter 1 Propeller diameter D_p [m], > 0. Read only with CastWake. (Default: 0.65 TT)
PropellerPos 3 Propeller centre in the body frame (x forward, y starboard, z down from Position) [m]. Read only with CastWake. (Default: -Lpp/2, 0, 0.6 TT)
ScaleX 1 Visualization scale along x (Default: 1.0). Multiplies the fitted scale of the default hull; a Scene is scaled by it once, on its root node; the scene's own node scales are kept. Visualization builds only.
ScaleY 1 Visualization scale along y (Default: 1.0), as ScaleX. Visualization builds only.
ScaleZ 1 Visualization scale along z (Default: 1.0), as ScaleX. Visualization builds only.

Initial conditions

None of the states has a registered default\, so all six must be given in the model.

Name Width Description
Position 3 Initial NED position.
Velocity 3 Initial NED velocity.
Rotation 3 Initial rotation vector; the third component is the yaw angle psi [rad].
Omega 3 Initial angular rate; the third component is the yaw rate [rad/s].
EngineRPM 1 Initial shaft speed [rev/s, not rpm].
RudderAngle 1 Initial rudder angle [rad].

Full example file

<Contents>
<!-- The tanker starts ahead at 4 m/s with the engine on; the rudder is commanded to
+0.35 rad and reaches it through its 60 s lag (BASE-0032). -->
<OBJECTS>
<Lib
LibName="base"
SimObject="Vessels/Tanker"
Name="A"
Scale="1.0"
Mass="1.0"
Material="Simple/Red"
InertiaRadi="1,1,1"
ModelType="lb-series"
DataSet="20000dwt"
RudderType="small"
/>
</OBJECTS>
<INTERCONNECTIONS>
<Connection
A.Force="0,0,0"
A.Torque="0,0,0"
A.Engine="1"
A.Rudder="0.35"
/>
</INTERCONNECTIONS>
<INITIALIZATION>
<InitialCondition
A.Position="0,0,0"
A.Velocity="4,0,0"
A.Rotation="0,0,0"
A.Omega="0,0,0"
A.EngineRPM="1.87"
A.RudderAngle="0"
/>
</INITIALIZATION>
<SIMULATION>
<Timing TStart="0" TEnd="600.0"/>
<Integrator Method="RK45_i" NumCores="1" LogStates="1" UseRSSNorm="0">
<StepControl StepMax="0.002" StepMin="0.00000001" AbsTol="1e-3" RelTol="1e-3"/>
</Integrator>
</SIMULATION>
<OBSERVERS>
<FileOutput TOutput="0:60:600" Select="objects:all"/>
</OBSERVERS>
</Contents>

This SimObject is referred to as Vessels/Tanker