Command-line reference
CableDyn ships one native solver executable and four Python console tools:
Command |
Purpose |
|---|---|
|
the standalone solver: reads a deck, solves the static initial condition and, when the
deck asks for it, the dynamic march, and writes the result tables. Released as
|
|
runs one deck through the native solver and validates its main output |
|
summaries, exports, plots, fatigue, spectra and coherence of result files |
|
validates, inspects, edits and generates decks |
|
runs a generated parameter study |
Coupled runs in OpenFAST, maintained by NLR (National Laboratory of the Rockies, formerly NREL),
need no separate executable: CableDyn is compiled into openfast.exe
and selected with CompMooring = 5 (see OpenFAST with CompMooring = 5). CFD and scripting hosts use the
shared library through the C API or the Python package.
CableDyn_driver — the standalone solver
Synopsis
CableDyn_driver <deck.dat> <out_root>
CableDyn_driver -v | -V | -version | -VERSION | --version
CableDyn_driver -h | -H | -help | -HELP | --help | -? | /?
Arguments
Argument |
Meaning |
|---|---|
|
the input deck (Deck format reference (.dat)). Relative paths are resolved against the current
working directory; files the deck references ( |
|
the output root: every result file is |
Exactly two positional arguments are required. Each argument may be at most 4096 characters.
Options
Option |
Effect |
|---|---|
|
print the identity banner (name, version, author, licence) to stdout and exit 0 |
|
print the banner and the usage summary to stdout and exit 0 |
A version or help option is recognised only as the first argument; everything after it is
ignored. Any other argument that begins with - — anywhere on the command line — is an
unknown option: the driver prints CableDyn_driver: unknown option "<arg>" and the usage to
stderr and exits 1. A deck or output root whose name begins with - must therefore be given
with a directory prefix (./-case.dat).
Checks before the solve
Before the deck is solved, the driver rejects, with exit code 1 and a message on stderr:
a wrong number of arguments (banner and usage are printed to stderr);
an argument that is empty, cannot be read, or is longer than 4096 characters (
CableDyn_driver: argument <i> is longer than 4096 characters);a deck path or output root that cannot be opened exactly: a reserved Windows device name (
CON,NUL,COM1, …) or a path beyond the length limit with no shorter spelling (CableDyn_driver: cannot read deck "<deck>": <reason>orcannot write output files at "<root>": <reason>; see Deck format reference (.dat), File names). Arguments are read as Unicode, and the releaseCableDyn_driver.exeruns with UTF-8 as its Windows code page (Windows 10 version 1903 or later), so accented, Hangul, emoji, and mixed-script names are accepted in the arguments and in the working folder alike. A driver built from source with the GNU toolchain opens a name outside the system ANSI code page through its 8.3 short name and refuses it on a volume without short names;an output root one of whose result files would be the deck, however spelled (
CableDyn_driver: output root "<root>" would overwrite the input deck), or a file the deck reads (… would overwrite the input file "<file>" that the deck reads). The check covers.out,.static.out,.elements.out, the per-line.Line<N>.p.out/.t.out/.range.outand per-rod.Rod<N>.p.outfiles, the probe, and the lock. The modal table.modes.out(written only whennModesis set) is not checked, so do not choose an output root whose.modes.outname is one of your input files;an output location that cannot be written — a missing directory or one without write permission (
CableDyn_driver: cannot write output files at "<root>" (check that the directory exists and is writable)). The check creates and removes a probe file<out_root>.write_check.tmp; an existing file of that name is left in place;an output root that another running
CableDyn_driveris writing (CableDyn_driver: another CableDyn run is writing output root "<root>" …). A run holds the lock file<out_root>.cabledyn.lockfrom just before its first output until it ends; the operating system releases it even when the run is killed, so a stale lock never blocks a later run.
Standard streams
Stream |
Content |
|---|---|
stderr |
the identity banner (on a solve run); the initialisation report on static, |
stdout |
the initialisation report on mixed |
The formats of the report and progress records are shown in Output files and channels. On success the final stdout line is exactly:
CableDyn_driver: converged run written to <out_root>.out
stdout is a human-readable log, not a machine-parseable stream: its records vary with the deck
and the route. Automation should rely on the exit status and read results from the output
files. To keep only the stdout records, discard stderr (2>/dev/null or 2>$null).
Exit codes
Code |
Meaning |
|---|---|
|
success: the static solve converged and, for a dynamic deck, every step of the march
converged; all output files were written. Also returned by |
|
invalid invocation or input: argument errors, unknown options, the pre-solve checks above, any deck parse or validation error (unknown keyword, bad value, unresolved id, unsupported feature combination, unreadable auxiliary file), and failure to create an output file |
|
the solve failed: a static line did not converge ( |
Every non-zero exit is accompanied by a message on stderr. See Troubleshooting for the messages and their remedies.
Examples
New-Item -ItemType Directory -Force results | Out-Null
.\CableDyn_driver.exe examples\wd0050_chain.dat results\wd0050
if ($LASTEXITCODE -ne 0) { Write-Error "CableDyn failed ($LASTEXITCODE)" }
mkdir -p out
if ./build/cabledyn examples/wd0050_chain.dat out/wd0050 2>err.log; then
echo "converged"
else
echo "failed ($?)"; cat err.log
fi
For installation of the distributable Windows executable and working-directory rules, see Standalone Windows driver.
Python command-line tools
Installing the Python package adds four console commands. They are thin wrappers around the
package API described in Python package and Python API reference; they do not replace the native
CableDyn_driver executable, which cabledyn-run and cabledyn-study launch as a
subprocess.
Command |
Entry point |
Purpose |
|---|---|---|
|
|
Run one standalone deck through the native driver and validate its main output. |
|
|
Summarise, export, plot, rainflow-count, or spectrally analyse a result table. |
|
|
Validate, inspect, edit, or generate variants of an input deck. |
|
|
Run every case of a generated |
Conventions shared by all four tools:
Options of
cabledyn-postandcabledyn-deckbelong to the subcommand and are written after it (cabledyn-deck validate deck.dat --caller-driven).-h/--helpprints help to stdout and exits with code 0. A usage error (missing argument, unknown option, invalid choice, a value that does not convert to the declared type, a missing required option) prints the usage line and the error to stderr and exits with code 2.Handled errors are printed to stderr as a single line
<prog>: <message>. Results and written file paths go to stdout.Output paths are expanded (
~) and resolved to absolute paths, and missing parent directories are created. Decks, CSV tables, and JSON records are written through a temporary file in the target directory and then renamed, so an interrupted write never leaves a partial file under the requested name. Figures are saved directly by matplotlib.An existing output file is never replaced unless
--overwriteis given.An unexpected exception outside the handled classes listed for each tool ends the process with a Python traceback and exit code 1.
Locating the native driver
cabledyn-run and cabledyn-study find the native executable as follows:
If
--executable PATHis given, that file is used and nothing else is tried.Otherwise, if the
CABLEDYN_DRIVERenvironment variable is set, the file it names is used when it exists.Otherwise
PATHis searched forCableDyn_driver.exe,CableDyn_driver, andcabledyn, in that order.
On Linux and macOS a direct path (1 or 2) must also be executable. If no candidate is found,
the command fails with could not locate CableDyn_driver using ... Tried: ..., listing every
candidate that was checked.
cabledyn-run
Runs one complete standalone deck (Deck format reference (.dat)) and checks that the solver produced a readable main output table.
cabledyn-run [-h] [--executable EXECUTABLE] [--timeout TIMEOUT] [--overwrite]
deck output_root
Argument |
Type |
Default |
Meaning |
|---|---|---|---|
|
path |
required |
The sectioned |
|
path stem |
required |
Output stem without |
|
path |
see above |
Native driver to run (see Locating the native driver). |
|
float, s |
none |
Maximum wall-clock time for the solver process; finite and positive ( |
|
flag |
off |
Allow a run whose output files already exist. The previous files are kept aside until the new run succeeds (see Files written). |
Files written. The native driver writes <root>.out and, depending on the deck,
<root>.static.out, <root>.elements.out, <root>.Line<N>.p.out,
<root>.Line<N>.t.out, <root>.Line<N>.range.out, <root>.Rod<N>.p.out and
<root>.modes.out (see Output files and channels). If any of <root>.out, <root>.static.out,
<root>.elements.out, or a .Line<N>.p.out, .Line<N>.t.out or .Rod<N>.p.out file
of that root already exists, the run is refused unless --overwrite is given. The range
graphs .Line<N>.range.out and the modal table .modes.out are not part of this check: an
existing file of that name is replaced by the new run and is not restored if it fails. With
--overwrite the previous files are moved into a temporary directory
.<stem>.previous-<random> beside them while the solver runs. They are deleted once the new
run has succeeded; if the rerun fails for any reason (non-zero exit, timeout, missing or
malformed main output, or an interruption), the partial new files are removed and the previous
results are restored unchanged.
Streams. On success, stdout receives exactly one line: the absolute path of <root>.out.
The solver’s own stdout and stderr are captured and not echoed. On failure, stderr receives
cabledyn-run: <message>; when the native process fails, the message contains its exit code
and its captured stderr (or stdout, if stderr is empty).
Exit codes.
Code |
Meaning |
|---|---|
0 |
The native driver exited with code 0 (the driver reserves 0 for a fully converged
analysis), |
1 |
Handled failure: executable not found; deck missing; invalid output stem; outputs exist
without |
2 |
Command-line usage error (argparse). |
Example:
cabledyn-run lazy_wave.dat results/lw_dlc11 --timeout 3600 --overwrite
This writes results/lw_dlc11.out (and any auxiliary files) next to lazy_wave.dat and
prints the absolute path of the main output.
cabledyn-post
Reads one CableDyn result table (Output files and channels) and summarises, exports, plots, or analyses it,
or compares two time histories. The file type is detected from its header: a table whose first
column is Time or Time(s) is a time history (a .Line<N>.p.out or .Line<N>.t.out
time history is a dynamic per-line node-position or segment-tension history); a table with
LineID, Node, and ArcLength columns is a static profile; anything else is a generic
table.
Results of other tools are read with the readers described in Post-processing with other tools’ results,
chosen from the file name: *.outb is an OpenFAST binary file, *.MD.Line<N>.out a
MoorDyn line file, *.MD.out a MoorDyn main file, and anything else (including OpenFAST text
.out and coupled *.CD.out files) the CableDyn reader. Every subcommand accepts
--format {auto,cabledyn,openfast,moordyn,moordyn-line} to override that choice.
cabledyn-post [-h] {summary,export,plot,fatigue,spectrum,coherence,compare} ...
cabledyn-post summary file [--line LINE] [--start START] [--stop STOP]
cabledyn-post export file output [--line LINE] [--overwrite]
cabledyn-post plot file channel [--line LINE] [--x X] [--plane {xy,xz,yz,3d}]
[--start START] [--stop STOP] [--time TIME] [--output OUTPUT]
[--overwrite]
cabledyn-post fatigue file channel --m M
(--reference-cycles N | --reference-frequency F)
[--start START] [--stop STOP] [--bins BINS]
[--cycles-output PATH] [--histogram-output PATH]
[--plot-output PATH] [--overwrite]
cabledyn-post spectrum file channel --segment-length N [spectral options]
[--moment ORDER]... [--min-frequency F] [--max-frequency F]
[--peaks K] [--logarithmic]
cabledyn-post coherence file channel_x channel_y --segment-length N [spectral options]
[--power-floor-ratio R]
cabledyn-post compare reference candidate [--channel NAME | --channel REF=CAND]...
[--start START] [--stop STOP] [--grid {reference,candidate}]
[--percentile P] [--no-unit-check] [--output CSV] [--overwrite]
A subcommand is required. Channel names are matched exactly (case-sensitive) against the table
header, for example FairTen1 or Tension. Period limits --start/--stop select the
closed interval [start, stop] in seconds; they must be finite, start must not exceed
stop, and the interval must contain at least one sample.
Plotting (plot, and --plot-output of fatigue, spectrum, coherence) needs
matplotlib (pip install "cabledyn[plot]"). Figures are saved with the format implied by the
file suffix (.png, .pdf, .svg, …).
summary
Argument |
Type |
Default |
Meaning |
|---|---|---|---|
|
path |
required |
Result table. |
|
int |
every line |
Static profile only: summarise one |
|
float, s |
whole record |
Time history only: statistics period. Ignored for other tables. |
Output on stdout, as key: value lines:
Static profile: per line,
line_id,node_count,deformed_length(finalArcLength),minimum_tension,maximum_tension,maximum_curvature,minimum_bend_radius(1/maximum_curvature;inffor zero curvature), andmaximum_bend_moment(largest absoluteBendMoment), in the units of the source columns. A quantity whose column is absent printsNone. Lines are separated by a blank line.Time history:
samples,time_start,time_stop, then for every non-time channel a blank line andchannel,unit,count,minimum,maximum,mean,standard_deviation(population), andrms.Generic table:
rowsand a comma-separatedchannelslist.
export
Writes a table that pyDatView reads directly: one header row of Name_[unit] labels followed
by the values with 17 significant digits. A .csv suffix produces comma-separated text; any
other suffix produces tab-separated text.
Argument |
Type |
Default |
Meaning |
|---|---|---|---|
|
path |
required |
Result table (any type). |
|
path |
required |
Export target. Must not be the source file. |
|
int |
all rows |
Export one |
|
flag |
off |
Replace an existing |
stdout receives the absolute path of the written file.
plot
Draws one figure and saves it with --output, or opens an interactive window when
--output is omitted (the command returns when the window is closed).
Argument |
Type |
Default |
Meaning |
|---|---|---|---|
|
path |
required |
Result table. |
|
string |
required |
Channel to plot, or |
|
int |
every line |
Static profile: plot one |
|
string |
|
Static profile: abscissa channel for a non-geometry plot. |
|
|
|
Projection for |
|
float, s |
whole record |
Time window for a time-history channel or a segment-tension envelope. |
|
float, s |
none |
Snapshot time for dynamic per-line files; values are linearly interpolated and the time must lie within the record. |
|
path |
show window |
Save the figure to this file instead of showing it. Must not be the source file. |
|
flag |
off |
Replace an existing |
File type |
Accepted |
|---|---|
Static profile |
|
Dynamic node positions ( |
|
Dynamic segment tensions ( |
|
Other time history |
Any channel against time over |
Generic table |
Not plottable (error). |
When saving, stdout receives the absolute path of the figure.
fatigue
Rainflow-counts one time-history channel (cycle ranges, not amplitudes) and computes the uncorrected damage-equivalent range
where \(n_i\) is the cycle weight (0.5 or 1), \(S_i\) the cycle range, and \(N_\mathrm{eq}\) the reference cycle count. No mean-stress or other correction is applied.
Argument |
Type |
Default |
Meaning |
|---|---|---|---|
|
path |
required |
Time-history table (an error for other types). |
|
string |
required |
Channel to count; must not be the time channel. |
|
float |
required |
Woehler (S-N) exponent; finite and positive. |
|
float |
one of the two is required |
\(N_\mathrm{eq}\), finite and positive. Mutually exclusive with
|
|
float, Hz |
one of the two is required |
Equivalent-cycle frequency; \(N_\mathrm{eq}\) = frequency x selected record duration. Finite and positive. |
|
float, s |
whole record |
Analysis period; at least two samples are required. |
|
int |
32 when a histogram or plot is requested |
Number of equal-width range bins spanning 0 to the largest cycle range; must be positive. |
|
path |
none |
Write every rainflow cycle as CSV: |
|
path |
none |
Write the range histogram as CSV: |
|
path |
none |
Save a histogram bar chart. |
|
flag |
off |
Replace existing output files. |
All requested output paths are checked before any calculation: each must differ from the source
file and, without --overwrite, must not exist. stdout then receives channel,
source, unit, sample_count, start_time, end_time, duration,
wohler_exponent, reference_cycles, equivalent_frequency, cycle_count, and
damage_equivalent_range, followed by the path of each file written. A record with no load
cycles yields a damage_equivalent_range of 0, still writes --cycles-output (header
only), and prints histogram: not written (the selected record contains no load cycles)
instead of writing the histogram or plot.
spectrum
Computes a one-sided Welch power spectral density of one channel. The record must be uniformly sampled (time-step deviation within a relative tolerance of 1e-6 of the median step); it is never resampled.
Spectral options shared with coherence:
Option |
Type |
Default |
Meaning |
|---|---|---|---|
|
int |
required |
Samples per Welch segment; at least 2 and no more than the selected sample count. It is never shortened automatically. |
|
float |
|
Overlap fraction in [0, 1); overlap samples = floor(overlap x segment length). |
|
int |
segment length |
FFT length (zero padding); at least the segment length. |
|
|
|
Segment window. |
|
|
|
|
|
float, s |
whole record |
Analysis period. |
|
path |
none |
Write a CSV of the result. |
|
path |
none |
Save a figure. |
|
flag |
off |
Replace existing |
Options specific to spectrum:
Option |
Type |
Default |
Meaning |
|---|---|---|---|
|
string |
required |
Channel to analyse; must not be the time channel. |
|
float, repeatable |
none |
Spectral-moment order \(k\); integrates \(f^k S(f)\) over the band. The band must contain at least two bins. |
|
float, Hz |
first bin |
Lower band limit for moments and peaks. When omitted and any requested order is negative, the first non-zero bin is used (a negative order cannot include 0 Hz). |
|
float, Hz |
last bin |
Upper band limit for moments and peaks. |
|
int |
|
Number of strongest local-maximum bins to report (at least 1). The 0 Hz bin is never reported as a peak; fewer lines are printed if fewer maxima exist. |
|
flag |
off |
Logarithmic PSD axis in |
Every requested quantity is evaluated before anything is printed, so an invalid request fails
without partial output. stdout receives channel, source, unit, density_unit,
start_time, end_time, sample_interval, sample_count, segment_length,
overlap_samples, fft_length, segment_count, window, detrend,
uniform_rtol, uniform_atol, frequency_resolution; then moment_<k> and
moment_<k>_unit per requested order; then peak_<r>_frequency and peak_<r>_density
per peak; then the paths of written files. The CSV has the columns frequency_[Hz] and
PSD_[<density unit>], where the density unit is the channel unit squared per hertz (plain
PSD when the channel has no unit).
coherence
Computes the magnitude-squared Welch coherence of two channels, using the spectral options
above. At least two complete Welch segments are required. A frequency bin is valid only where
both auto-spectra exceed --power-floor-ratio times their own maximum; invalid bins carry no
coherence value.
Option |
Type |
Default |
Meaning |
|---|---|---|---|
|
string |
required |
Two distinct non-time channels. |
|
float |
100 x machine epsilon (about 2.2e-14) |
Relative auto-spectrum floor, in [0, 1). |
stdout receives channel_x, channel_y, source, start_time, end_time,
sample_interval, sample_count, segment_length, overlap_samples,
fft_length, segment_count, window, detrend, uniform_rtol,
uniform_atol, power_floor_ratio, valid_bins, invalid_bins, then the paths of
written files. The CSV has the columns frequency_[Hz], coherence_[-] (empty for invalid
bins), and valid_[-] (1 or 0).
compare
Compares a candidate time history with a reference channel by channel on the interval both
cover, interpolating linearly onto one of the two time grids and never extrapolating
(cabledyn.compare_histories()).
Option |
Type |
Default |
Meaning |
|---|---|---|---|
|
path |
required |
Two time-history files, read with the same |
|
|
every shared name |
Channel pairs to compare; |
|
float, s |
shared interval |
Narrow the compared period. |
|
|
|
Time grid the other record is interpolated onto. |
|
float in [0, 100] |
95 |
Percentile whose change is reported. |
|
flag |
off |
Compare channels whose recorded units differ. |
|
path |
none |
Write one CSV row of metrics per channel (refused if it names either input). |
|
flag |
off |
Replace an existing |
stdout receives reference, candidate, time_start, time_stop, samples, and
percentile, then one block per channel with channel, candidate_channel, unit,
count, max_abs_difference, mean_difference, rms_difference,
normalized_rms_difference, relative_max_difference, correlation,
reference_maximum, candidate_maximum, maximum_delta, minimum_delta,
mean_delta, standard_deviation_delta, and percentile_delta
(difference = candidate - reference), then the path of the CSV when written.
Exit codes
Code |
Meaning |
|---|---|
0 |
The subcommand completed. |
1 |
Handled failure: unreadable or malformed result file; unknown channel or |
2 |
Command-line usage error (argparse), including a missing subcommand, a missing
|
Example:
cabledyn-post fatigue results/lw_dlc11.out FairTen1 --m 3 --reference-frequency 1 \
--start 600 --stop 4200 --histogram-output fairten1_hist.csv \
--plot-output fairten1_hist.png
cabledyn-deck
Validates, inspects, edits, and generates variants of a CableDyn input deck (Deck format reference (.dat)). Editing preserves every untouched row, comment, and byte of the source; an edited row is re-rendered with single spaces between its data tokens while its indentation and trailing commentary are kept. Every deck read and every result is validated against the native reader’s rules.
cabledyn-deck [-h] {validate,show,set,generate} ...
cabledyn-deck validate deck [--caller-driven]
cabledyn-deck show deck [--caller-driven]
cabledyn-deck set deck output selector value [--overwrite] [--caller-driven]
cabledyn-deck generate deck spec output_directory [--overwrite] [--caller-driven]
Argument |
Type |
Default |
Meaning |
|---|---|---|---|
|
path |
required |
Source deck (all subcommands). |
|
flag |
off |
Validate against the host-driven (OpenFAST) marching-clock contract instead of the standalone one (all subcommands). |
|
path |
required ( |
Edited deck to write. It must not be the source deck itself (also checked through
hard links and case-insensitive paths), even with |
|
string |
required ( |
Field to change; see the selector table. |
|
JSON or text |
required ( |
New value. Parsed as JSON when possible (number, string, |
|
path |
required ( |
JSON file: an object mapping each case name to an object of |
|
path |
required ( |
Directory for the generated decks and |
|
flag |
off |
|
Selectors. Selector keywords, field names, and line-type names are case-insensitive.
Selector |
Addresses |
|---|---|
|
The effective (last) row of an existing |
|
|
|
|
|
The |
|
|
Values are written as single native tokens: integers as given, floating-point numbers with 17
significant digits (0.1 is written 0.10000000000000001 and 1.0 as 1), and
Booleans as True/False. To write a number exactly as typed, pass it as a JSON string,
for example '"0.1"'. Values containing whitespace, quotes, or comment markers are rejected.
An edit that would make the deck invalid is rejected and nothing is written.
Subcommand behaviour and output.
validateprintsvalid: <absolute deck path>.showprintsdeck, then the countsline_types,points,lines,sections,end_connections,options(option rows, including repeated keywords), andoutputs(output channels).setapplies one selector and prints the absolute path ofoutput. Anoutputthat is the source deck (by path, hard link, or case-insensitive alias) is refused with exit code 1, even with--overwrite.generatebuilds and validates every case before writing any file, then writes<output_directory>/<case>.datper case and<output_directory>/cases.json, and prints each generated deck path. Case names must match[A-Za-z0-9][A-Za-z0-9_.-]*and be unique ignoring case, and the mapping must not be empty. Relative references to ancillary files (SYROPE:working-curve files and the bathymetry/seafloor, motion, and wave-kinematics file options) are rewritten so they still resolve from the output directory. Without--overwrite, the command fails if any target.datorcases.jsonexists; other files in the directory are left alone. A target that is the source deck is always refused.
cases.json (schema cabledyn-deck-cases-v1) records the absolute source path, its
SHA-256, caller_driven, and for each case its name, absolute deck path, deck SHA-256,
working directory, and the applied changes. cabledyn-study checks these digests, so a study
directory must not be moved or edited after generation.
Exit codes.
Code |
Meaning |
|---|---|
0 |
The subcommand completed. |
1 |
Handled failure: the deck is unreadable or invalid; unknown or malformed selector;
unknown record, field, or option; value that cannot be written as a native token or
that makes the deck invalid; unreadable or malformed spec (invalid JSON, duplicate
keys, wrong structure, invalid case name); output exists without |
2 |
Command-line usage error (argparse), including a missing subcommand or argument. |
Example, with spec.json:
{
"shallow": {"point.1.z": -180},
"deep": {"point.1.z": -220, "option.dtM": 0.0005}
}
cabledyn-deck generate lazy_wave.dat spec.json studies/anchor_depth
cabledyn-study
Runs every case of a cases.json written by cabledyn-deck generate through the native
driver, summarises each main output, and writes a study record. A failed case does not stop the
remaining cases.
cabledyn-study [-h] [--executable EXECUTABLE] [--output-directory OUTPUT_DIRECTORY]
[--jobs JOBS] [--timeout TIMEOUT] [--channel CHANNELS] [--start START]
[--stop STOP] [--overwrite]
manifest
Argument |
Type |
Default |
Meaning |
|---|---|---|---|
|
path |
required |
|
|
path |
see Locating the native driver |
Native driver to run. |
|
path |
|
Destination for all results; created if missing. |
|
int |
|
Number of native processes run concurrently; must be positive. |
|
float, s |
none |
Per-case wall-clock limit; finite and positive. A case that exceeds it is killed and recorded as failed. |
|
string, repeatable |
every non-time channel |
Main-output channel to summarise. Names must be non-empty and unique. |
|
float, s |
whole record |
Statistics period; finite, with |
|
flag |
off |
Allow a non-empty output directory. Existing result files of a case are replaced only
when that case succeeds; a failed case restores them (as for |
Preflight. Before any solver process starts, the command verifies the manifest schema, that
the source deck and every generated deck exist and match their recorded SHA-256, that case names
are safe and unique and deck paths distinct, that no case name collides with the output files
of another case (for example base and base.static), and the option values above. It
refuses a non-empty output directory without --overwrite, locates the driver, records its
SHA-256, and queries its --version banner (10 s limit).
Files written in the output directory:
File |
Content |
|---|---|
|
Native results for each case, with output root |
|
The complete captured native streams, written for every case, including failures. |
|
One row per case and summarised channel with the columns |
|
Schema |
Each case ends with one of three statuses: completed (native exit 0 and statistics
computed), failed (the native process exited non-zero, timed out, or could not be started),
or postprocess_failed (the solver finished but its main output was missing or invalid, the
statistics failed, for example for an unknown --channel or an empty period, or the case
otherwise completed but one of its log files could not be written).
Streams. stdout receives one line per case in manifest order, <case>: <status>
followed by : <diagnostic> for any case that recorded an error, then study_manifest: <path>
and
summary_csv: <path>. Errors that stop the study go to stderr as
cabledyn-study: <message>.
Exit codes.
Code |
Meaning |
|---|---|
0 |
Every case completed; |
1 |
The study ran and both records were written, but at least one case is |
2 |
Command-line usage error (argparse), or the study could not be started: a preflight
failure (manifest, digest, option, output-directory, or executable problem, or a failed
|
3 |
The cases ran, but |
Interrupting the command (Ctrl+C) cancels cases that have not started, waits for running cases,
and exits with a Python traceback without writing summary.csv or study.json.
Example:
cabledyn-study studies/anchor_depth/cases.json --jobs 2 --channel FairTen1 \
--channel AnchTen1 --start 600 --stop 4200 --timeout 3600