Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
ffff5b5
HD: Start implementing generalized DOF for potential-flow bodies
luwang00 Jan 13, 2026
7866ec2
HD: Continue implementing generalized DOF for potential-flow bodies
luwang00 Jan 15, 2026
3559f78
HD: Update radiation impulse response function output for generalized…
luwang00 Jan 15, 2026
3dbf31e
HD: Summary file format update
luwang00 Jan 15, 2026
d67af16
HD: Add new output channels for the generalized DOF
luwang00 Jan 16, 2026
474d2ee
HD: Fix wave excitation interpolation for the generalized DOF
luwang00 Jan 16, 2026
38a3f7c
HD: Add some input check for generalized DOF
luwang00 Jan 16, 2026
39f66e9
Update HD driver to allow input of generalizsed DOF time series throu…
luwang00 Jan 16, 2026
ab08555
ExtPtfm: Change the Jacobian subroutines to use the standard numerica…
luwang00 Jan 17, 2026
cb59a51
HD: Fix index
luwang00 Jan 20, 2026
3964a27
Start implementing coupling between HydroDyn and ExtPtfm
luwang00 Jan 21, 2026
1b804ec
HD: Prevent segfault when NAddDOF=0
luwang00 Jan 21, 2026
5a890ac
Add code to handle variable mapping in solve
deslaughter Jan 21, 2026
b9b183d
Move ExtPtfm to tight coupling and fix HD-ExtPtfm mesh mapping
luwang00 Jan 22, 2026
5331725
ExtPtfm: Add perturb to MV_AddVar calls for the states
luwang00 Jan 22, 2026
e6f1426
ExtPtfm: Add coordinate transformation to and from rigid-body frame o…
luwang00 Jan 23, 2026
739af19
ExtPtfm: clean up
luwang00 Jan 23, 2026
00a1851
ExtPtfm: Implement connections and coupling to mooring modules
luwang00 Jan 24, 2026
97a587c
ExtPtfm: Reorganized/reformatted input files and added separate handl…
luwang00 Jan 27, 2026
046fb70
ExtPtfm: Added the option to include fictitious forces and exact self…
luwang00 Jan 27, 2026
d5a9925
ExtPtfm: Fixed bug with WriteOutput variables
luwang00 Feb 3, 2026
99d10f9
ExtPtfm: Change failed input checks to return ErrID_Warn instead of E…
luwang00 Feb 3, 2026
6144825
ExtPtfm: Fixed modal outputs
luwang00 Feb 4, 2026
ee39f64
ExtPtfm: Add the ability to prescribe loads at connection points in a…
luwang00 Feb 7, 2026
ac20e4b
Enable linearization with the ExtPtfm module
luwang00 Feb 18, 2026
40a8c53
Merge branch 'dev' into f/superelement_dev_merge
luwang00 Feb 18, 2026
5acd907
ExtPtfm: Fix input file paths
luwang00 Feb 19, 2026
ef24eeb
Update r-test pointer
luwang00 Feb 19, 2026
59d9b40
ExtPtfm: Fix bug with summary file when no connections are specified
luwang00 Feb 19, 2026
e07fe79
Update openfast_io with new inputs in HydroDyn and ExtPtfm
luwang00 Feb 19, 2026
a4df30a
Update r-test pointer
luwang00 Feb 19, 2026
2418539
HD: Prevent segfault if the WAMIT files have more modes than expected
luwang00 Feb 20, 2026
1ddd0f6
More fixes to ExtPtfm outputs
luwang00 Feb 20, 2026
7072d1e
ExtPtfm: several small changes to match SubDyn behavior
luwang00 Feb 21, 2026
fdacec9
Fixed a WAMIT input file check and updated r-test pointer
luwang00 Feb 23, 2026
1c24524
Update openfast_io to support the changes to ExtPtfm input files
luwang00 Feb 24, 2026
c90f844
Updates to HydroDyn and ExtPtfm user docs for the new superelement wo…
luwang00 Mar 12, 2026
7532bd8
More updates to HydroDyn user docs
luwang00 Mar 12, 2026
45064ca
Addressed some code review comments
luwang00 Mar 12, 2026
eb5b99a
docs: fix redundant epsuperelementinputfile label
andrew-platt Mar 12, 2026
712bc91
Merge remote-tracking branch 'upstream/dev' into f/superelement
deslaughter Mar 12, 2026
4120c68
Undo HydrDyn var change requested in PR. Active flag doesn't work if …
deslaughter Mar 12, 2026
ef3bc30
Update r-test pointer
deslaughter Mar 12, 2026
2c9d826
remove additional dir copying in executeOpenfastRegressionCase.py tha…
deslaughter Mar 12, 2026
980dd63
Add VF_Solve flags to relevant superelement and generalized mode vari…
luwang00 Mar 12, 2026
0669c5f
Merge branch 'f/superelement' of https://github.com/luwang00/openfast…
luwang00 Mar 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
360 changes: 206 additions & 154 deletions docs/source/user/extptfm/input_files.rst

Large diffs are not rendered by default.

29 changes: 27 additions & 2 deletions docs/source/user/extptfm/usage.rst
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,32 @@ satisfying the following criteria: :math:`\Delta t=\frac{1}{10 f_\text{max}}`, w
for an increasing number of Craig-Bampton modes to get an idea of how many modes are needed to reach convergence
and see which modes contributes the most to the sytem response.



OpenFAST 5.0
~~~~~~~~~~~~

With the release of OpenFAST 5.0, significant changes were made to the input files of ExtPtfm and its internal formulation.
Couplings between ExtPtfm and HydroDyn and between ExtPtfm and the mooring modules have been enabled to more conveniently
simulate a flexible floating structure. Finally, linearization with ExtPtfm is now possible.

When simulating a floating structure in ExtPtfm, HydroDyn can be enabled in the glue-code to compute and provide
potential-flow wave excitation and radiation loads and hydrostatic loads for both rigid-body modes and additional
generalized degrees of freedom through the `NAddDOF` option (see HydroDyn documentation). With this setup, we need
the number of active modes in ExtPtfm to be equal to :math:`6+NAddDOF` in HydroDyn, with the first 6 modes being
rigid-body modes, followed by a number of elastic modes.

Note that if HydroDyn also contains strip-theory members, the resulting strip-theory loads will all be mapped to
the ExtPtfm rigid-body modes only, not the elastic modes. Therefore, users are discouraged from using strip-theory-only
members in HydroDyn. The same applies to marine growth and ballast/flooding in HydroDyn. However, hybrid members
with drag only can still be used in many cases to help obtain more relastic floater motions. The drag force tends
to be small and does not have a strong direct impact on the structural loading. In this case, mapping the drag force
to the rigid-body modes only can be an acceptable simplification. The same consideration also applies to the
second-order potential-flow options in HydroDyn that do no support generalized degrees of freedom, yet.

When coupling to mooring, a set of connection points must be defined in the ExtPtfm module. These connections points
are coupled to the fairleads in the mooring models. Generally, the connection points in ExtPtfm should be the same
set of points used as fairleads in the mooring model; however, they need not be exactly the same as OpenFAST automatically
introduces nearest-neighbor mapping between the two assuming rigid connections.

Note that the above workflow with ExtPtfm coupling to HydroDyn and mooring is still a work-in-progress.


79 changes: 74 additions & 5 deletions docs/source/user/hydrodyn/input_files.rst
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,18 @@ rotation first, followed by pitch rotation, and roll last. Furthermore,
HydroDyn now expects the first and second time derivatives of the
Tait-Bryan roll, pitch, and yaw angles in place of angular velocity and
acceleration. The standalone HydroDyn driver will convert these inputs
to angular velocity and acceleration internally.
to angular velocity and acceleration internally.

**NAddDOF** indicates the number of additional degrees of freedom included
with a potential-flow body. These additional modes can be used to describe
a flexible or articulated body. **NAddDOF** > 0 is only allowed with a single
potential-flow body, and the value of **NAddDOF** in the driver input file
must match that in the HydroDyn primary input file. If more than one
potential-flow bodies are included, **NAddDOF** should be a single zero in
the driver input file. This is different from the HydroDyn primary input file,
where **NAddDOF** should contain **NBody** zeros. See details below on
the HydroDyn primary input file. Note that the generalized modes with
**NAddDOF** > 0 are still an experimental feature.

Setting **PRPInputsMod** = 0 forces all platform reference point (PRP)
input motions to zero for all time. If you set **PRPInputsMod** = 1,
Expand Down Expand Up @@ -115,7 +126,7 @@ to specify different motions for the PRP, which controls the motion of
all strip-theory members based on rigid-body kinematics, and for each
potential-flow bodies separately. With this option, the user only specifies
the translational and rotational displacements. HydroDyn will compute the
velocity and acceleration by numerically differentiating the displacement
velocity and acceleration by numerically differentiating the displacements
with respect to time.

.. _hd-prp_input_table_2:
Expand All @@ -136,6 +147,26 @@ with respect to time.
... ... ...
============= =================================================================================== ========================

Finally, when a single potential-flow body with additional generalized degrees
of freedom is modeled, motions of the generalized modes can be prescribed by
setting **PRPInputsMod** = -1 (only one body allowed). HydroDyn will compute the
velocity and acceleration of the generalized modes by numerically differentiating
the displacements with respect to time.

.. _hd-prp_input_table_3:

.. table:: PRP Inputs Time-Series Data File Contents (**PRPInputsMod** = -1 with **NAddDOF** > 0)
:widths: auto

============= =================================================================================== ========================
Column Number Input Units
============= =================================================================================== ========================
1 Time step value .. math:: s
2-4 Translational displacements of the PRP along *X*, *Y*, and *Z* .. math:: m
5-7 Tait-Bryan roll, pitch, and yaw angles of the PRP .. math:: \text{radians}
8-(NAddDOF+7) Displacements of the **NAddDOF** generalized modes .. math:: -
============= =================================================================================== ========================

.. _hd-primary-input:

HydroDyn Primary Input File
Expand Down Expand Up @@ -389,6 +420,36 @@ to the value computed by WAMIT as output in the WAMIT ``.out`` file.
center of buoyancy of each body from the origin/PRP, NOT from
**PtfmRefxt** and **PtfmRefyt**.

*Experimental feature*

**NAddDOF** is an array of **NBody** numbers indicating the number of
additional generalized degrees of freedom of each potential-flow body. These
additional modes can be used to describe flexible or articulated bodies and
must match the modes in the 1st-order WAMIT-style input files, i.e., the .1,
.3, and .hst files. The convention for the WAMIT-style input files requires
the first 6 modes to be rigid-body modes always, and the additional generalized
modes are numbered from 7 onward. The total number of modes in the 1st-order
WAMIT-style input files should be **6+NAddDOF** for each body. Currently, only
one potential-flow body is allowed when additional degrees of freedom are used,
requiring **NBody = 1**. In this case, the choice of **NBodyMod** does not
matter. If more than one potential-flow bodies are present, **NAddDOF** should
be populated with **NBody** zeros. This because, internally, HydroDyn supports
additional degrees of freedom for an arbitrary number of bodies with any of the
**NBodyMod** options. The limitation of one potential-flow body only is due
to constraints with coupling to ExtPtfm, the only module that can make use of the
additional modes so far and input file limitations. Generalized modes have not
been implemented for 2nd-order loads; therefore, the 2nd-order WAMIT-style input
files, if included, should always contain **6NBody** modes irrespective of
**NAddDOF**. Finally, when **NAddDOF > 0**, **WAMITULEN** must be 1.

Currently, the HydroDyn loads for the additional degrees of freedom can only be
used by the ExtPtfm module of OpenFAST with externally generated structural
mass (M), stiffness (K), and damping (C) matrices. This workflow is intended for
floating structures only with 6DOF rigid-body motions and a user-defined number
of additional elastic modes. The number of modes in HydroDyn and ExtPtfm must match.
More specifically, the number of modes active in ExtPtfm must be equal to
**6+NAddDOF** with the first 6 modes also being rigid-body modes.

.. _hd-2nd_order_floating_platform_forces_input:

2\ :sup:`nd`-Order Floating Platform Forces
Expand Down Expand Up @@ -486,20 +547,26 @@ where :math:`\overrightarrow{F}_{0}` corresponds to the **AddF0** static load (p
:math:`\overrightarrow{q}` corresponds to the displacement vector of the potential-flow bodies
(translation and rotation), where the overdot refers to the first time-derivative.

In the absence of additional degrees of freedom, i.e., **NAddDOF** is all zeros,
**AddF0** is either a column vector with 6\ **NBody** entries
if **NBodyMod** = 1 or **NBody** column vectors with six entries each
if **NBodyMod** = 2 or 3. In the former case, **AddF0** will span
6\ **NBody** lines with each line containing a single number in the
input file. In the latter case, **AddF0** will span six lines with each line
containing **NBody** numbers in the input file.
containing **NBody** numbers in the input file. When additional degrees of
freedom are included, only one potential-flow body is allowed, and **AddF0**
should be a column vector spanning 6 + **NAddDOF** rows.

In the absence of additional degrees of freedom,
**AddCLin**, **AddBLin**, and **AddBQuad** are either a single
6\ **NBody**\ -by-6\ **NBody** matrix if **NBodyMod** = 1 or
six 6-by-6 matrices if **NBodyMod** = 2 or 3. In the former case,
each matrix spans 6\ **NBody** lines in the input file with each line
containing 6\ **NBody** numbers. In the latter case, each matrix
spans six lines in the input file, with each line containing 6\ **NBody**
numbers.
numbers. When additional degrees of freedom are included, only one
potential-flow body is allowed, and each of these matrices should span
6 + **NAddDOF** rows, with each row containing 6 + **NAddDOF** numbers.

These terms can be used, e.g., to model a linearized mooring system, to
augment strip-theory members with a linear hydrostatic restoring matrix
Expand All @@ -508,7 +575,9 @@ HydroDyn to match damping to experimental results, such as free-decay tests.
While likely most useful for floating systems, these matrices can also be
used for fixed-bottom systems; in both cases, the resulting load is applied
at the reference point of each potential-flow body given by **PtfmRefxt**,
**PtfmRefyt**, and **PtfmRefzt**.
**PtfmRefyt**, and **PtfmRefzt**. When additional generalized degrees of
freedom are included with a potential-flow body, **AddF0** can be used to
apply constant hydrostatic/buoyancy loads to the generalized modes.

Strip theory options
--------------------
Expand Down
Loading
Loading