Output files and channels
This page is the reference for every result file CableDyn writes, the exact layout of each, and
the complete vocabulary of the deck OUTPUTS section. It covers the standalone driver
(CableDyn_driver <deck.dat> <out_root>, see Command-line reference) and the coupled module of OpenFAST,
maintained by NLR (National Laboratory of the Rockies, formerly NREL) (CompMooring = 5, see
OpenFAST with CompMooring = 5). Deck syntax is in Deck format reference (.dat); the input
files a deck can reference are in Auxiliary input files.
Every file is replaced on each run (STATUS='REPLACE'); CableDyn never appends to a
previous result. All physical quantities are SI: metres, seconds, newtons, radians only where
stated (angles in the output files are always degrees).
Standalone driver files
The driver names every file from the <out_root> argument. Which files appear depends on the
route the deck selects, which is decided by the deck content:
Deck |
|
|
|
|
|
|---|---|---|---|---|---|
Static only (no |
one row, |
yes |
– |
static tables |
– |
Dynamic, all lines |
time series |
no |
– |
time series |
rod decks only |
Dynamic multibody march (bodies, rods or |
time series |
no |
– |
time series |
yes |
Dynamic bodies and rods without lines |
time series |
no |
– |
– |
– |
Dynamic, all lines finite-EI, every End B on a |
time series |
yes (the converged initial state) |
yes |
time series |
– |
Dynamic, all lines finite-EI, some End B not |
time series |
no |
– |
time series |
– |
Mixed |
|
yes |
– |
rejected (fail-closed) |
– |
The EI = 0 dynamic routes never write <out_root>.static.out: use a separate static-only
run of the same deck (remove dtM and TMax) when the static range table is needed. A
line or rod file is written only when the corresponding Outputs flag is set. The range graph
<out_root>.Line<L>.range.out of the Outputs flag r is written on every route of the
table that has lines, the mixed route included.
Common layout
All standalone files are plain ASCII tables:
fields are separated by a single TAB character; numeric fields are also right-justified inside a fixed width, so the files align in a terminal and parse with any whitespace splitter;
the time column is Fortran
ES25.16E3(25 characters, 17 significant digits, a three-digit exponent, e.g. `` 1.2500000000000000E+001``) so that time stamps survive long runs with smalldtMwithout rounding;every other real value is Fortran
ES15.7E3(15 characters, 8 significant digits, e.g. `` 5.0988032E+005``, three-digit exponent). The one exception is the channel columns of the mixedEI = 0+ finite-EI route’s.out, written asES15.7(the same 8 significant digits with a two-digit exponent, e.g. `` 5.0988032E+05``);integer key columns (
LineID,Node,Element,Segment) are written without padding (I0);a non-finite channel value is never written: a dynamic row that would contain
NaNorInfstops the run with a named error and exit code 2.
<out_root>.out — the main table
Written by every route. Layout:
Line |
Content |
|---|---|
1 |
title line beginning with |
2 |
header row: |
3 … |
one data row per output time |
There is no units row: units are fixed by the channel vocabulary below (the Python reader
cabledyn.read_output() attaches them automatically). A deck without an OUTPUTS
section produces a valid file containing only the Time(s) column.
The title line identifies the route that produced the file:
Route |
Title line |
|---|---|
static |
|
|
|
Connect/Free-point dynamics |
|
Rigid6 bodies |
|
rods |
|
finite-EI (cubic-Hermite) |
|
finite-EI, two moving ends |
|
mixed |
|
multibody march |
|
bodies and rods without lines |
|
Rows: a static run writes one row at t = 0. A dynamic run writes the initial state at
t = 0 and then one row after every committed step, at t = k·dtM for
k = 1 … NINT(TMax/dtM). The deck keyword dtOut is accepted for MoorDyn compatibility
but has no effect: the output cadence is always dtM.
If a dynamic step does not converge, the march stops, the file keeps only the rows of committed steps, and the driver exits with code 2. Such a file is a diagnostic record, not an accepted response history.
Example (static route):
# CableDyn driver output (static IC; converged=T)
Time(s) FairTen1 AnchTen1 FairIncl1 AnchIncl1
0.0000000000000000E+000 5.0988032E+005 1.9241379E+005 6.7242193E+001 -6.8947041E-001
<out_root>.static.out — static range table
The along-arc static configuration, one row per node of every line (a range graph of the static
state). It is independent of the OUTPUTS selection. On a dynamic cubic-Hermite or mixed
run it records the converged initial state that the march starts from.
Layout: title line, header row, units row, then data. The title reads
CableDyn static configuration profile (deformed arc; public node order EndA -> EndB)
(static route), CableDyn standalone static configuration (deformed arc; public node order
End A -> End B) (cubic-Hermite route) or CableDyn coupled static configuration (deformed
arc; public node order End A -> End B) (mixed route and OpenFAST). The columns are identical
on every route:
Column |
Unit |
Meaning |
|---|---|---|
|
|
deck |
|
|
node number, 1 = End A … N = End B |
|
|
cumulative deformed chord length from End A |
|
|
node position in the global frame (Z up, |
|
|
nodal effective tension, the segment tension (same definition as |
|
|
nodal curvature (same definition as |
|
|
bend moment (same definition as |
|
|
axial-tangent angle from +Z (0 = up, 90 = horizontal, 180 = down) |
|
|
signed inclination below horizontal, |
|
|
axial-tangent azimuth from +X toward +Y, in [0, 360) |
Plot Curvature or Tension against ArcLength for a fatigue or strength check.
Note
Node tensions are segment tensions; .elements.out holds pointwise field values. On a
finite-EI line the Tension column and Ten<L>N<J> report, at an interior node, the
length-weighted average of the element-mean axial forces of the two neighbouring elements
(the tension that enters equilibrium, as the segment tension of an EI = 0 line). The
MinimumAxialResultant and MaximumAxialResultant columns of .elements.out are
extrema of the pointwise field \(EA\,(|\mathbf r'| - 1)\). With a stiff EA that
field oscillates about the element mean wherever an element cannot follow the line – at a
nodal seabed-contact kink near touchdown and at a section junction – and can dip below
zero there while the line is tensile. Curvature and bend moment are pointwise in both files.
<out_root>.elements.out — Hermite element extrema
Written by the cubic-Hermite route together with .static.out. For every element of every
finite-EI line it records the extrema of the continuous element fields at the converged
initial state — located by searching the whole cubic field, not only nodes or quadrature points
— so peak curvature between nodes is not missed. Element 1 is at End A; the local coordinate
xi runs from 0 at the End-A side of the element to 1 at its End-B side.
Layout: title line CableDyn continuous Hermite-element extrema (public order End A -> End
B), header row, units row, data (12 columns):
Column |
Unit |
Meaning |
|---|---|---|
|
|
deck |
|
|
element number, 1 = End A |
|
|
unstretched arc length from End A to the element’s End-A side |
|
|
unstretched arc length from End A to the element’s End-B side |
|
|
local coordinate of the curvature maximum |
|
|
unstretched arc length of the curvature maximum |
|
|
maximum curvature over the element |
|
|
|
|
|
minimum axial force resultant over the element (negative = compression) |
|
|
local coordinate of that minimum |
|
|
maximum axial force resultant over the element |
|
|
local coordinate of that maximum |
Per-line files (LINES Outputs flag)
Set the Outputs column of a LINES row to any combination of the letters below
(case-insensitive, e.g. ptr); - or an empty field requests nothing. Any other letter is a
parse error. Mixed EI = 0 + finite-EI decks reject the p and t flags (use main-file
channels instead) and accept r.
Flag |
File |
Contents |
|---|---|---|
|
|
node positions, End A → End B |
|
|
segment (element) tensions, End A → End B |
|
|
range graph: minimum, maximum and mean over the run of the node tension, curvature, bend moment, declination and seabed clearance (and torque and twist on a line with torsion), one row per node (see below) |
<L> is the deck line id. Each file starts with a # comment line (e.g.
# CableDyn static line node positions; public node order EndA -> EndB) and a header row;
there is no units row — units are in the column names.
File |
Static run (one row per node / segment) |
Dynamic run (one row per output time) |
|---|---|---|
|
|
|
|
|
|
Dynamic per-line rows are written at the same times as .out.
<out_root>.Line<L>.range.out — range graphs
The OrcaFlex range graph of line L, accumulated by the solver during the run: at every node,
the minimum, maximum and mean over the output times of the range window. The window holds every
.out row with t ≥ RangeStart (OPTION RangeStart, default 0, see OPTIONS reference and defaults), so a
start-up transient can be excluded; a static run has one sample, t = 0. The values are the
node channels of the same run, Ten<L>N<J>, Curv<L>N<J>, BendMom<L>N<J> and
L<L>N<J>Dec (and Torq<L>N<J> and Twist<L>N<J> on a line with torsion), evaluated at
every node: the minimum and maximum equal those of the channel time
histories exactly, and the mean is their arithmetic mean. The file is written when the run
completes; a run that stops early leaves none.
Layout: title line, header row, units row, then one row per node, End A first. The title reads
CableDyn range graph (line <L>; <n> samples from t = <t0> s to t = <t1> s; public node order
End A -> End B).
Column |
Unit |
Meaning |
|---|---|---|
|
|
node number, 1 = End A … N = End B |
|
|
cumulative deformed chord length from End A at the first sample ( |
|
|
effective tension, as |
|
|
curvature, as |
|
|
bend moment, as |
|
|
declination of the axial tangent, as |
|
|
seabed clearance: node |
|
|
torque, as |
|
|
twist of the cable from End A to the node, as |
The accumulation keeps three numbers per node and quantity and makes no heap allocation per step.
Sampling a line evaluates its node channels once per output row; on the 1024-element cubic-Hermite
lazy-wave example this adds about 3 % to the step time. A coupled OpenFAST run does not write range
files and rejects the r flag; use the TDP<L> and node channels there.
<out_root>.modes.out — natural frequencies and mode shapes
Written when the deck sets nModes (see OPTIONS reference and defaults), before any dynamic march. The file
holds two tab-separated tables, each introduced by a # comment line, a header row and a units
row:
# Natural frequencies:LineID Mode Frequency Period Omega(Hz, s, rad/s), thenModeslowest modes of every line in ascending order;# Mode shapes:LineID Mode Node X Y Z dX dY dZ, one row per mode and node.X Y Zis the static node position anddX dY dZthe nodal translation of the mode, scaled so that the largest nodal displacement of the mode is 1. Nodes are numbered End A first, as in the other line files; the held end nodes have zero displacement.
Per-rod files (RODS Outputs flag)
For a dynamic rod deck, set a rod’s Outputs field to p to write
<out_root>.Rod<R>.p.out (<R> = deck rod id). p is the only rod flag; any other
letter is a parse error. Layout: # comment line, header row
Time(s) EndAX(m) EndAY(m) EndAZ(m) EndBX(m) EndBY(m) EndBZ(m), then one row per
output time.
OUTPUTS channel vocabulary
Channel names are listed in the deck OUTPUTS section. Each row may hold one or several
names separated by whitespace, commas or tabs, optionally quoted with " or ' (the
OpenFAST OutList style). Maintained decks use one double-quoted name per row:
---------------------- OUTPUTS -----------------------------------------
"FairTen1"
"AnchTen1"
"Ten1N10"
"L1N10pz"
-------------------------------------------------------------------------
Matching is case-insensitive (fairten1 = FairTen1), but the header row repeats the
token as written. A name may be at most 64 characters. Each channel may be requested once:
the deck is rejected (exit code 1, naming the channel, the earlier spelling and the deck
line) when two names select the same quantity – the same name in any case or across rows, a
numeric id written with leading zeros (Ten1N02 = Ten1N2), or an alias spelling
(Con<P>p{x,y,z} = Point<P>p{x,y,z}, FairAngle<L> = FairDecl<L>,
AnchAngle<L> = AnchDecl<L>). <L> and <P> are deck
LINES and POINTS ids (not array positions); <J> is a node number on line <L>,
1 = End A to N = End B, where N = 1 + the total NumSegs of the line’s sections.
Line-end channels
Channel |
Meaning |
Unit |
|---|---|---|
|
line-end tension at End A (fairlead) of line |
N |
|
line-end tension at End B (anchor) of line |
N |
|
signed inclination of the End-A / End-B tangent below horizontal
( |
deg |
|
declination of the End-A / End-B tangent from +Z (0 = up, 90 = horizontal, 180 = down) |
deg |
|
aliases of |
deg |
A grounded anchor segment reads AnchIncl ≈ 0; the small non-zero value reports the actual
orientation of the last element, which CableDyn does not force to horizontal.
Line-node channels
Channel |
Meaning |
Unit |
|---|---|---|
|
effective tension at node |
N |
|
curvature at node |
1/m |
|
bend moment |
N·m |
|
node position component |
m |
|
node velocity component (0 on a static run) |
m/s |
|
node acceleration component (0 on a static run) |
m/s² |
|
declination of the node’s axial tangent from +Z (0 = up, 90 = horizontal, 180 = down) |
deg |
|
azimuth of the node’s axial tangent from +X toward +Y, in [0, 360) |
deg |
|
torque (twisting moment) at node |
N·m |
|
material twist of the cable itself from End A to node |
deg |
|
total twist of the line, \(\Phi - \Theta = M C\), including the windup of torsional end springs: the imposed twist \(\Phi\) less the geometric twist \(\Theta\) the line takes up by writhing out of its plane |
deg |
Touchdown channels
For a line that rests on the seabed at one end, the touchdown point (TDP) at every output time.
A node is grounded when its centreline is at most 1e-6 m (the height at which the seabed contact
law engages) above the seabed; the grounded end is the end grounded in the initial state. Walking
from that end, the TDP lies between the last grounded node and the next one, where the centreline
crosses that height (linear interpolation of the clearance). The definitions are those of
cabledyn.touchdown_history() with tolerance = 1e-6.
Channel |
Meaning |
Unit |
|---|---|---|
|
arc length of the TDP from End A (deformed chord length along the nodes) |
m |
|
TDP position |
m |
|
layback: horizontal distance from the TDP to the suspended end |
m |
|
TDP excursion: horizontal displacement of the TDP from its initial ( |
m |
The channels are available on every route, OpenFAST included, when the deck has a seabed
(WtrDpth or bathymetryFile). A line whose initial state is grounded at both ends or at
neither stops the run with exit code 1 naming the line. When the grounded end later lifts off,
the channels report that end node; when the whole line rests on the seabed, the suspended end
node.
Point channels
Channel |
Meaning |
Unit |
|---|---|---|
|
position component of point |
m |
|
MoorDyn v1 spelling, identical to |
m |
|
resultant of the forces of the lines and finite-EI cables attached to point |
N |
Body and rod channels
The MoorDyn-F names, for Rigid6 bodies and for rods (free, fixed, pinned, prescribed, fixed or
pinned to a body), on every route that carries them, the OpenFAST CompMooring = 5 route
included. Loads are evaluated at the committed state of the output time.
Channel |
Meaning |
Unit |
|---|---|---|
|
reference-point position |
m |
|
attitude, x-y’-z’’ Euler angles of the deck convention |
deg |
|
reference-point velocity; angular velocity |
m/s, deg/s |
|
reference-point acceleration; angular acceleration |
m/s², deg/s² |
|
net external force and moment on the body about its reference point (global axes): weight, buoyancy and hydrostatic restoring, Morison and external loads, seabed contact, the loads of its fixed rods, the attached line and cable end forces, and the pin forces of the rods pinned to it. Zero for a free body at rest in equilibrium |
N, N·m |
|
End A position, velocity and acceleration |
m, m/s, m/s² |
|
MoorDyn’s roll and pitch of the rod axis: its tilt φ from the vertical times
|
deg |
|
angular velocity and acceleration |
deg/s, deg/s² |
|
net external force on the rod and its moment about End A: weight, buoyancy, Morison and
seabed loads and the line and cable end forces (not the pin reaction of a pinned rod,
whose |
N, N·m |
|
magnitude of the summed line and cable end force at End A / End B |
N |
|
submerged fraction of the rod length, below the local waterline (still water: z = 0) |
– |
|
position of rod node |
m |
A zero-length rod (NumSegs 0) is modelled as a point; its Rod<N> channels are rejected
by name, and its motion is reported by the Point<P> channels of that point.
The axial tangent of every orientation channel points from End A toward End B (OrcaFlex’s node
Ez axis). Curvature, declination and azimuth are evaluated from the solved geometry on
every route (static, EI = 0 dynamic, finite-EI dynamic, rod and Rigid6 decks).
Validation of channel names
Every name is checked while the deck is parsed, before any solve, and a bad name stops the run with exit code 1. A name is rejected when:
it matches none of the forms above, or carries trailing text (
Point2px_raw,Point2pzz,FairTen1x);it references an unknown line or point id, or a node number larger than the line’s node count, or is a
TDP<L>name with a suffix other thans,x,y,z,LayorExc;it is a
Torq<L>N<J>,Twist<L>N<J>orTwist<L>channel of a line that is not restrained in torsion at both ends (... carries no torque);on a mixed
EI = 0+ finite-EI deck (and in OpenFAST), it is aPoint<P>channel of aCoupled/Vesselpoint attached only to finite-EI lines — that point is not part of theEI = 0point system that serves point channels. Use the cable’sL<L>N<J>p{x,y,z}channel instead.Fixedpoints remain valid because they never move;in an OpenFAST
CompMooring = 5run, it is longer than OpenFAST’s 20-character channel header (ChanLen). The coupled initialisation stops with an error naming the channel rather than writing a truncated, possibly duplicate header.
Console output
The standalone driver writes a short initialisation report after the static solve. On the
EI = 0, finite-EI and static routes it goes to stderr (after the identity banner):
Parsing CableDyn input file: examples/chain_catenary_r3_100m.dat
Created CableDyn model: 1 line object(s), 2 point(s), 1 section(s) [EI=0: 1, 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: 5.09880E+005 N
force [Fx, Fy, Fz]: [ 1.91549E+005, 0.00000E+000, -4.72532E+005] N, inclination= 67.934 deg
line tangent: inclination= 67.242 deg, declination= 157.242 deg, azimuth= 0.000 deg
CableDyn initialization completed.
force is the force on the End-A node directed toward End B, with its inclination below the
horizontal. line tangent gives the direction of the line itself at End A. The two angles
differ slightly: the end force also carries the end node’s share of the distributed load (weight,
drag, seabed reaction) and, on a finite-EI line, the end shear. On a finite-EI deck whose End B
is not Fixed the line is labelled axial force component instead: that route reports the
axial part of the end resultant only.
On a mixed EI = 0 + finite-EI deck the report is shorter and goes to stdout:
CableDyn mixed standalone aggregate: <n> line(s) [<n0> EI=0, <n1> finite-EI].
Parsed <np> point(s) and <ns> section row(s).
Static equilibrium fairlead results:
Line <L>: FairTen=<T> N, tangent inclination=<deg> deg, force=(<Fx> <Fy> <Fz> ) N
Dynamic runs then print progress to stdout at 5 % intervals of the march, with the ETA estimated from the average wall time per committed step:
Dynamic simulation: 2000 step(s), simulated duration 200.000 s, dtM = 1.00000E-01 s.
Progress: 5.0% | t = 10.000 s | elapsed 000:00:02 | ETA 000:00:38
Two further stdout records may follow a completed march: Recovery audit: … when the
integrator subdivided nominal steps (with the number of subdivided intervals and the maximum
sub-step count used), and, on cubic-Hermite decks with the tensile monitor in warning mode,
Tensile monitor: line <L> … summarising compression events (tensile_safety warn in
OPTIONS, see OPTIONS reference and defaults). The final stdout line of a
successful run is described in Command-line reference.
In OpenFAST
Under CompMooring = 5 the selected channels flow through OpenFAST’s normal output system
(WriteOutput), and CableDyn additionally writes its own files, named from the OpenFAST
output root:
File |
Contents |
|---|---|
|
the static range table of the converged initialisation (same columns as
|
|
time history of the deck |
|
the same two files for a FAST.Farm run, named from the FAST.Farm output root |
|
temporary copies of the CableDyn deck, written in the |
<RootName>.CD.out layout — note that it differs from the standalone .out:
no title line;
header row
Timefollowed by the channel tokens;a units row:
(s)followed by each channel’s unit —(N)tensions and forces,(deg)angles,(m)positions,(m/s)velocities,(m/s2)accelerations,(deg/s)/(deg/s2)body and rod angular rates,(1/m)curvature,(N.m)bend moment and body/rod moments,(-)Rod<N>Sub;data rows: time as
ES25.16E3(full double precision), values asES15.6E2, TAB-separated.
The first data row is the static initialisation at t = 0; every further row is written after
each committed CableDyn step, at every dtM boundary. It is independent of OpenFAST’s DT_Out
and never repeats held values between
CableDyn steps. If OpenFAST corrects a step (predictor–corrector iterations), the provisional row
is replaced rather than duplicated; the file is flushed after every row, so it is readable during
a run and intact after a crash.
Select CableDyn channels in the OUTPUTS section of the CableDyn MooringFile; they are not
members of the top-level .fst OutList. The TDP<L> channels are evaluated from the
coupled state against the touchdown reference of the converged initialisation; the range files of
the LINES flag r are a standalone output, and a coupled deck with that flag is rejected. For
a single-turbine run the module also prints
every selected channel’s static value to the screen after initialisation. A deck with no
OUTPUTS section is valid but publishes no channels.
Reading and post-processing
cabledyn.read_output() reads every file on this page strictly and attaches the units
defined above, returning time-history or static-profile objects that plot FairTen1 against
time, Curvature or Tension against ArcLength, or the static centreline.
cabledyn.read_range_graphs() returns the envelopes of a .range.out file as
cabledyn.RangeGraph objects. Dynamic
Line<L>.p.out and Line<L>.t.out files additionally expose interpolated snapshots and
per-segment envelopes. See Python package and Python API reference.
For time-history channels, cabledyn.TimeHistory.fatigue() provides weighted rainflow
cycles and an uncorrected damage-equivalent range (the Wöhler exponent and reference cycle
count or frequency are mandatory inputs); cabledyn.TimeHistory.spectrum() a one-sided
Welch power spectral density with spectral moments; and cabledyn.TimeHistory.coherence()
the magnitude-squared coherence of two channels. These are derived Python results; they never
modify the native files.
Some pyDatView versions do not recognise the multi-line .static.out table directly. Export
one line to a normalised table with units embedded in the header:
cabledyn-post export case.static.out line4_static.csv --line 4
The conversion preserves values and row order, does not add a time column, and refuses to
overwrite an existing file unless --overwrite is given.