Tutorial 4 — Prescribed fairlead motion

Goal: march the lazy-wave cable of Tutorial 3 in time while its hang-off heaves, using a motion file, and read the dynamic tension and curvature histories.

Deck: examples/lozon_gomex80_power_cable_motion.dat with examples/data/lozon/gomex80_heave_3m_12s_dt005.txt · Route: cubic-Hermite finite-EI dynamics, standalone · Run time: under 1 s

What changes from Tutorial 3

Geometry and properties are identical to lozon_gomex80_power_cable.dat. The mesh is 64 section-aligned elements (28, 20 and 16 over the three sections) instead of 1024: the fairlead tension (standard deviation and peak) and the peak curvature of this run are within 0.5 % of a 1024-element solution at dtM = 0.00625 s, so the finer mesh buys only run time. tensile_safety True audits the element-mean axial force, which stays tensile on this mesh (Theory). Three options turn the static calculation into a time-domain run:

0.05     dtM          - CableDyn internal time step (s)
36.0     TMax         - Standalone simulation duration (s), including the 12 s smooth start
data/lozon/gomex80_heave_3m_12s_dt005.txt motionFile - Prescribed fairlead motion history
dynamic_solver 1.0e-4 1.0e-14 100 12 - Relative tolerance, absolute tolerance, max iterations, backtracks
  • dtM is the time step; TMax the duration. With both present the static equilibrium becomes the initial condition of an implicit generalised-α march (Theory).

  • motionFile drives every Coupled point. The path is relative to the deck’s folder, so copy the deck together with its data folder.

  • dynamic_solver sets the per-step Newton tolerances. This deck uses a setting checked for this cable; keep the defaults for your own models unless a convergence study justifies a change (OPTIONS reference and defaults).

The motion file

# Columns: time(s) point_id x(m) y(m) z(m) vx(m/s) vy(m/s) vz(m/s) ax(m/s2) ay(m/s2) az(m/s2)
0.00  1  5.0000000000e+00  0.0000000000e+00  -1.4000000000e+01  0.0 ... 0.0
0.05  1  5.0000000000e+00  0.0000000000e+00  -1.3999999...e+01  ...

Each row gives the absolute position, velocity, and acceleration of one point at one time. Rules:

  1. one row per Coupled/Vessel point at every time, starting at t = 0 and reaching TMax;

  2. a constant time spacing equal to dtM;

  3. velocity and acceleration consistent with the position (analytical derivatives, or careful differentiation) — CableDyn uses them as moving-support kinematics in the dynamic equations, not just the endpoint position;

  4. a first row equal to the deck position of the point, to avoid an artificial jump.

This file is a 3 m, 12 s harmonic heave that ramps up smoothly over the first 12 s (a C2 quintic ramp), generated by examples/data/lozon/generate_gomex80_heave.py.

Run it

New-Item -ItemType Directory -Force results | Out-Null   # already there after the quickstart
.\CableDyn_driver.exe .\examples\lozon_gomex80_power_cable_motion.dat .\results\heave80
   Created CableDyn model: 1 line object(s), 2 point(s), 3 section(s) [EI=0: 0, finite-EI: 1].
   Initial conditions: Newton static equilibrium with load continuation completed.
   ...
  CableDyn initialization completed.
  Dynamic simulation: 720 step(s), simulated duration       36.000 s, dtM =  5.00000E-02 s.
  Progress:    5.0% | t =        1.800 s | elapsed 000:00:00 | ETA 000:00:00
  Progress:   10.0% | t =        3.600 s | elapsed 000:00:00 | ETA 000:00:00
  ...
  Note: line 1: a nodal tangent turned up to   0.286 deg in one step; a smaller dtM would resolve the line's rotation (mean tension errors of about 1 % and more above 0.25 deg per step).
CableDyn_driver: converged run written to .\results\heave80.out

The progress lines report simulated time, elapsed wall time, and an estimate of the time left. The note is the time-step audit: the fastest nodal tangent turned 0.286° in one step, just above the 0.25° per step beyond which the mean tension can err by about 1 %. A smaller dtM resolves the rotation and should be part of your convergence study (Exercise 1). A step whose nonlinear solve does not converge at the full dtM is split automatically into substeps and reported in a Recovery audit: line; results remain at the dtM cadence, and a step that cannot be recovered stops the run with exit code 2.

Read the result

results\heave80.out has 721 rows (t = 0 plus one per step) of six channels of the same kinds as Tutorial 3, the sag-bend channels at node 25 of this coarser mesh. Over the last 12 s (one full-amplitude heave cycle):

Channel

Minimum

Maximum

Static value

FairTen1 (N)

5 668

13 076

9 320

AnchTen1 (N)

1 009

1 578

1 326

Curv1N25 (1/m)

0.0911

0.1034

0.0969

BendMom1N25 (N·m)

1 813

2 058

1 929

A 3 m heave swings the hang-off tension by ±40 % about its static value and changes the sag-bend curvature by about ±6 %. Plot FairTen1 against Time(s): the first 12 s show the smooth ramp, the rest a steady periodic response.

from cabledyn import read_output
h = read_output(r"results\heave80.out")
last = h.period(start=24.0)
for s in last.statistics(["FairTen1", "Curv1N25"]):
    print(s.channel, s.minimum, s.maximum, s.standard_deviation)

Curvature at the hang-off

The sag-bend curvature above (Curv1N25) is converged at dtM = 0.05 s; the curvature next to the pinned hang-off may not be. End curvature is a boundary-layer quantity: at this step it can be overstated severalfold, and it converges only with a smaller dtM and a mesh graded toward the end. Run a dtM study (Exercise 1) before using it, report it 1–2 m from the pinned end rather than at the end node (whose exact curvature is zero), and use a clamped or stiffener end model for bend-stiffener design. See Modelling workflow (step 5).

Vessel motion and a clamped hang-off

lazy_wave_vessel_motion.dat hangs the same cable from a vessel. The vesselMotion record (written by data/vessel/generate_vessel_motion.py) gives the reference point a 1.5 m surge, 2 m heave and 3° pitch at 12 s, with exact rates, and every Coupled point moves rigidly with the vessel. An END CONNECTIONS row clamps End A (Rigid) along the static tangent, 81.6° below horizontal, so the clamp turns with the vessel and BendMom1N1 reports the connection moment:

.\CableDyn_driver.exe .\examples\lazy_wave_vessel_motion.dat .\results\vessel80

At rest the hang-off tension is 9320 N and the end moment is below 1 N·m. Over the last 24 s the fairlead tension ranges from 7485 to 10969 N and the end moment peaks at 2953 N·m (a curvature of 0.148 1/m, a bend radius of about 6.7 m). With the hang-off pinned, the end tangent swings between 71.5° and 89.2°; the clamp holds it to the vessel pitch, so the cable bends near the vessel instead. The peak moment changes by less than 0.1 % at dtM = 0.025 s or with twice the top-section mesh.

lazy_wave_vessel_rao.dat drives the vessel from the displacement RAO table data/vessel/sample_rao.txt (illustrative values) in a JONSWAP sea of Hs 4 m and Tp 10 s; the same wave components move the vessel and load the cable. The hang-off moves between 4.52 and 5.48 m in x and between −14.19 and −13.80 m in z, the fairlead tension ranges from 8923 to 9654 N, and the end moment peaks at 220 N·m.

Exercises

  1. Time step. Copy the deck, set dtM = 0.025, and regenerate the motion file at the same spacing (in generate_gomex80_heave.py set DT = 0.025, write the times with {time:.3f} instead of {time:.2f}, and write to a new file name), and point the copy’s motionFile row at that file. Compare the tension range and the curvature range with the 0.05 s run.

  2. Surge instead of heave. Write a motion file with a 3 m, 12 s surge (x varies, z fixed). Which responds more, hang-off tension or sag-bend curvature?

  3. Whole-cable envelope. Set line 1’s Outputs flag to t to write every segment’s tension history to heave80.Line1.t.out, then find the minimum tension along the cable (a compression check).

Next: Tutorial 5 — Current, waves, and convergence.