Tutorial 7 — Buoys, bodies, and rods
Goal: moor a free-floating rigid body and a rigid rod, let them find their dynamic equilibrium under current, and learn the time-step rule for coupled bodies.
Decks: examples/rigid6_buoy.dat, examples/rod_moored_spar.dat, and for reference
examples/clump_weight_free_point.dat, examples/connect_weighted_point.dat ·
Route: EI = 0 point-system dynamics · Run time: a few seconds
Which object to use
Object |
Declared in |
Degrees of freedom and loads |
|---|---|---|
|
|
3 translations; a clump weight, a small float, or a node where several lines meet |
|
|
3 translations; a buoy or clump carrying one line |
|
|
6 DOF; lines attach at body-frame offsets, so line loads create moments; buoyancy,
hydrostatic stiffness |
rigid rod |
|
a rigid cylinder between two ends with distributed buoyancy, drag, and added mass;
|
All of them need a dynamic deck (dtM and TMax). Connect/Free points, free
bodies, and free rods start from their static force balance (every attached line re-solved for
the moving ends); deck bodyIC keeps the deck pose instead, for example for a free-decay
test.
Bodies, rods, points and lines may share one deck; mixed topologies run on one multibody march.
The column-by-column grammar is in Deck format reference (.dat).
A moored Rigid6 buoy
rigid6_buoy.dat holds a submerged, net-buoyant buoy (20 t, 40 m³ displaced) 20 m below the
surface in 100 m of water with three taut polyester legs:
--------------------- BODIES -------------------------------------------
ID Type X Y Z Roll Pitch Yaw Mass Vol C33 C44 C55 CdA Ca Ixx Iyy Izz
1 Rigid6 0.0 0.0 -20.0 0.0 0.0 0.0 2.0e4 40.0 0.0 0.0 0.0 8.0 0.5 3.5e4 3.5e4 3.5e4
--------------------- POINTS -------------------------------------------
ID Type X Y Z Mass Vol CdA Ca
1 Body1 1.5 0.0 -2.0 0 0 0 0
2 Body1 -0.75 1.299 -2.0 0 0 0 0
3 Body1 -0.75 -1.299 -2.0 0 0 0 0
4 Fixed 40.0 0.0 -100.0 0 0 0 0
5 Fixed -20.0 34.641 -100.0 0 0 0 0
6 Fixed -20.0 -34.641 -100.0 0 0 0 0
The
BODIESrow places the body reference point at(0, 0, -20)and gives mass, displaced volume, hydrostatic stiffness (zero here: the buoy is fully submerged, so there is no waterplane), drag area, added-mass coefficient, and diagonal inertia.Body1points are attachment offsets in the body frame: three padeyes 1.5 m off-axis and 2 m below the reference point. They move rigidly with the body.Net buoyancy is
(1025·40 − 20 000)·g = 206 kNupward, carried by three 86.85 m legs (EA = 5e7 N) to anchors on a 40 m radius.uniform 0.6 0.0 0.0 currentpushes it in+X;dtM = 0.01,TMax = 60.
New-Item -ItemType Directory -Force results | Out-Null # already there after the quickstart
.\CableDyn_driver.exe .\examples\rigid6_buoy.dat .\results\buoy
Initial conditions: body/rod static equilibrium (1 object(s), largest move 4.235E-02 m) completed.
...
Created CableDyn model: 3 line object(s), 6 point(s), 3 section(s) [EI=0: 3, finite-EI: 0].
Initial conditions: Newton static equilibrium with load continuation completed.
Fairlead convention: force is on End A toward End B; inclinations are signed below horizontal.
Line 1 fairlead effective tension: 6.98240E+004 N
force [Fx, Fy, Fz]: [ 3.11000E+004, 1.06826E-016, -6.25154E+004] N, inclination= 63.551 deg
line tangent: inclination= 63.562 deg, declination= 153.562 deg, azimuth= 0.000 deg
...
CableDyn initialization completed.
Dynamic simulation: 6000 step(s), simulated duration 60.000 s, dtM = 1.00000E-02 s.
...
CableDyn_driver: converged run written to .\results\buoy.out
The static solve first moves the body to its equilibrium under net buoyancy and current drag
(the largest move is 4.2 cm), so the buoy starts the march at rest and the channels keep their
t = 0 values. Mean values over the last 20 s:
Channel |
|
mean, 40–60 s |
|---|---|---|
|
69.82 kN |
69.82 kN |
|
79.44 kN |
79.44 kN |
|
1.586 m |
1.586 m |
|
−21.975 / −22.026 m |
−21.975 / −22.026 m |
The current moves the buoy about 4 cm downstream, toward line 1’s anchor, and pitches it about
1.3°, so padeye 1 moves about 9 cm. That leg (line 1,
anchored at +X) unloads while the two upstream legs load up, and the unequal padeye depths
show the body pitching slightly under the unbalanced leg moments — a response a 3-DOF point
buoy cannot represent.
Time step for bodies
Bodies and rods are advanced monolithically with their lines (bodyScheme monolithic,
the default): one implicit step, with a Newton iteration on the body accelerations around
the implicit line steps (see Theory). The scheme adds no numerical damping, and by
default a step too coarse for the stiffest body-mooring mode is sub-divided automatically.
dtM must still resolve the physics of interest: the wave period and the body-line motion.
For this buoy the settled position is the same from dtM = 0.005 to 0.1 s. Always halve dtM
once on a new body model and compare.
A rigid rod on four legs
rod_moored_spar.dat stands a 10 m, 1 m-diameter buoyant rod upright between
z = -30 and -20 m in 50 m of water:
--------------------- ROD TYPES ----------------------------------------
Name Diam Mass Cd Ca CdEnd CaEnd CdAx CaAx
spar 1.0 300.0 0.8 1.0 0.0 0.0 0.2 0.0
--------------------- RODS ---------------------------------------------
ID RodType Type XA YA ZA XB YB ZB NumSegs Outputs
1 spar Free 0.0 0.0 -30.0 0.0 0.0 -20.0 1 p
--------------------- POINTS -------------------------------------------
1 Rod1A 0.0 0.0 -30.0 0 0 0 0
2 Rod1B 0.0 0.0 -20.0 0 0 0 0
3 Fixed 25.0 0.0 -50.0 0 0 0 0
...
ROD TYPES columns 6–7 are MoorDyn’s end coefficients CdEnd/CaEnd; the optional
columns 8–9 add the CableDyn axial side drag and added mass CdAx/CaAx (here an axial
drag of 0.2 and no end effects).
Rod1A/Rod1B points attach lines to the rod’s End A and End B; their coordinates are
taken from the RODS row. With staggered bodyScheme each rod end must carry at least one
line; the default monolithic scheme has no such restriction. Two legs run from
the bottom to anchors 25 m up- and downstream, two from the top to anchors 30 m to either side.
Outputs = p writes the rod’s end positions to <root>.Rod1.p.out.
.\CableDyn_driver.exe .\examples\rod_moored_spar.dat .\results\spar
Over 15–30 s the top of the rod (Point2px) sits 0.70 m downstream of the bottom (0.002 m):
the 0.5 m/s current tilts the rod about 4° about its bottom bridle. The rod starts at this static
equilibrium (bodyIC), so the positions hold steady through the 30 s run.
A cable clamped to the buoy
buoy_clamped_cable.dat hangs a finite-EI cable from the keel of a floating Rigid6 buoy
and clamps it there at 60° below horizontal:
--------------------- END CONNECTIONS ------------------------------
LineID End Stiffness EzX EzY EzZ
4 A Rigid -0.5 0.0 -0.86603
The direction is given in the body frame and turns with the buoy. The clamp moment,
BendMom4N1, acts on the body in the static solve and in the dynamics, and is part of
Body1M*. At rest the clamp carries 9.53 kN·m (a pinned cable would leave at 82°) and
Body1My is zero; the moment tilts the buoy to a static pitch of 0.15° instead of 0.30°
pinned. In 1 m, 14 s swell the clamp moment ranges from 8.6 to 10.8 kN·m and the buoy pitches
between −1.35° and +1.07°. With Pinned the end moment stays below 0.5 N·m. The first 10 m of
cable use 0.25 m elements to resolve the bending near the clamp; halving them changes the moment
by 0.8 %. A finite Stiffness in N·m/rad models a compliant hang-off.
A spar with pinned rods
spar_pinned_rods.dat builds a spar from a free Rigid6 body (1300 t of ballast with its
centre of gravity 50 m below the reference point, Volume 0) and a Body1 hull rod, 6 m in
diameter, from 60 m draft to 10 m freeboard, which provides the buoyancy and the waterplane
restoring. Two Body1Pinned outrigger rods are pinned at the keel: each has its own three
rotations, loads the spar only through its pin force, and carries a polyester tether from its tip
(R2B, R3B). Three chain catenaries hold the spar.
The static solve balances everything in the 0.4 m/s current: the spar rises 1.35 m and drifts
1.78 m, and the outriggers settle 148.5° from the upward vertical with 410 kN tethers. In the
4 m, 8 s Airy wave the spar pitches ±3.4°, its mean surge grows to 4.3 m, and the tether tension
cycles between 360 and 502 kN. Halving dtM to 0.01 s changes these values only in the fourth
digit. A run takes about 2 s.
The multibody march
mixed_body_rods_points.dat puts every object type on one march: a free Rigid6 buoy on
three taut nylon legs, a Body1 can, a Body1Pinned arm with a tether, a chain through two
Free points (a 100 kg float and a 400 kg clump), and a finite-EI cable whose pinned End A
loads the buoy. deck bodyIC starts the buoy 3 m off its equilibrium, so the run is a free
decay: the surge swings to −2.20 m at 10 s and back to +1.61 m at 21 s (a period of about 21 s),
the arm leans up to 3.9°, the leg tension moves between 70 and 149 kN, and the cable top tension
stays within 7.8–8.1 kN. Halving dtM to 0.0025 s reproduces the surge and the tensions to
about five significant figures. A run takes about 3 s.
A broken mooring line
A FAILURE row detaches line ends from a point during the run, at a set time or when the end
tension first reaches a threshold. als_volturnus_line_break_time.dat models the IEA-15MW
VolturnUS-S as one free Rigid6 body on its three chains in a JONSWAP sea with a steady
thrust, and breaks line 1 at its fairlead at t = 300 s:
--------------------- FAILURE ------------------------------------------
FailID Point Line(s) FailTime FailTen
(-) (-) (-) (s) (N)
1 P1 1 300.0 0
The detached end falls freely and the platform settles on lines 2 and 3, 62 m from its origin
against 23 m before the break; the windward line peaks at 12.73 MN (12.53 MN before the break).
A deck with FAILURE runs its bodies on the staggered scheme. The examples README.md
tabulates the transient and its dtM convergence.
Exercises
Stronger current. Set the buoy’s current to 1.5 m/s. How much further does line 1 unload? Check
FairTen1for zero values: dynamic lines are tension-only.Point buoy. Replace the Rigid6 body by a
Point3body with one leg and compare the motion. What is lost?Waves on a body. Add
airy 2.0 10.0 0.0 wavesto the buoy deck. Bodies receive lumped translational wave loads throughCdA/Ca; lines receive distributed loads.Clump weights and connections. Run
clump_weight_free_point.datandconnect_weighted_point.datto seeFreeandConnectpoints with mass and volume.