Hydro-elastic coupling OpenFAST - SeaFEM

Dear All,

I am working in the integration of SeaFEM within the OpenFAST framework. Given that my question is not trivial, I will try to set the stage before as precise as I can. Please let me know if additional information is needed.

This hydro-elastic coupling will be carried out by means of an input-output solve between SeaFEM, which provides sea forces and moments applied on the platform in exchange of ElastoDyn’s platform motions, for each degree of freedom and time step. In this way, the full multi-physic problem regarding offshore wind turbines can be simulated computing the hydrodynamic forces using SeaFEM.

To do so, it has been taken advantage of HydroDyn’s module by using it as intermediary, in this way some defined types or subroutines can be used. Then, an additional module has been created similarly to WAMIT or Morison called SeaFEM, containing its own .f90, .txt and auto-generated files. Two subroutines have been declared within this new module:
- An initialization subroutine with the aim of generating the output meshes, a source one u%PRPMesh to store motions and a destination mesh copy y%PRPMesh for the forces and moments.
- A CalcOutput subroutine, which receives the motions stored in u%PRPMesh (translational displacements and rotations). Besides it contains an imported exchange data function from SeaFEM which brings its forces and sends OpenFAST motions, these forces are later stored in y%PRPMesh.
Both subroutines are called from HydroDyn’s module by using a conditional which disables other hydrodynamic solutions. Again forces and moments are stored in HydroDyn’s y%PRPMesh in order to be accessed from the glue code.

Till here information is well received or stored for its exchange at the ED_HD_InputOutputSolve subroutine located within the glue code. Even so, coherence is not found in the plotted results, thus the relevant code flow has been analyzed. It has been detected that PlatformPtMesh forces and moments were not obtained at the ED_HD subroutine. Going further, this is detected to be caused at the U_ED_HD_Residual subroutine, where two conditionals are found for Morison and WAMIT. Similar conditionals have been found among the rest of the code, differing from previous FASTV8 version.

I have tried to replicate those conditionals creating new ones for SeaFEM, including its own new mesh type definitions (u_HD_S_Mesh, HD_S_P_2_ED_P…) but the small-angle approximation breaks and following error appears: “FAST_Solution: CalcOutputs_And_SolveForInputs: SolveOption1: ED_HD_InputOutputSolve: HydroDyn_CalcOutput: HydroDyn_CalcOutput: Angles in GetSmllRotAngs() are larger than 0.4 radians”.

So, before following this error path and solving the errors that will probably later appear, entailing much more debugging time. I wanted to know why a distinction is made regarding the hydrodynamic solution at the time of computing the residuals and perturbations. In other words, why those are not calculated by using general HydroDyn’s meshes, as for instance y_HD2%AllHdroOrigin in FASTV8 version. This is why, I also wanted to make sure that I’m storing the exchanged forces and motions in the right meshes and if I’m going in the right direction by adding the new conditionals for SeaFEM. Or otherwise, if it would be more appropriate to create a destination mesh y%AllHdroOrigin and replicate its involved subroutines from previous V8 version. I don’t want to mislead myself by doing a lot of modifications in different areas of OpenFAST, given that it’s a big code and is easy to lose control.

I would appreciate to have any orientation in this regard. Thank you in advance,


Dear Irene,

I’m not sure I fully understand what you are asking. Please find a few comments and clarifying questions:

  • Presumably you are using the newest version OpenFAST (the main branch is currently OpenFAST v3.0; the hydro-elastic capability of OpenFAST for floating offshore wind turbines was introduced in OpenFAST v2.6.) In these versions of OpenFAST, HydroDyn has two output meshes: (1) Morison%DistribMesh, which stores the hydrodynamic forces and moments lumped at each hydrodynamic analysis node from the strip-theory (Morison) solution, and (2) WAMITMesh, which stores the hydrodynamic forces and moments lumped at each potential-flow (WAMIT) body from the potential-flow solution. There is no PRPMesh output (y) mesh, so, I’m not sure what you are referring too.
  • HydroDyn does have a PRPMesh input (u), but this not used by HydroDyn’s strip theory or potential-flow solutions; instead, the PRPMesh input is used for calculating some of HydroDyn’s WriteOutputs, e.g., the total integrated hydrodynamic load across the entire substructure, but these outputs are not coupled to ElastoDyn or SubDyn because, when hydro-elastic coupling is being solved, it is important to distribute the hydrodynamic load across the substructure.
  • You mention hydro-elastic coupling, but only mention ElastoDyn. The platform in ElastoDyn is a 6-DOF rigid body. To model hydro-elastic effects in OpenFAST, we use SubDyn to model the substructure structural dynamics, and when SubDyn is enabled, HydroDyn is coupled to SubDyn instead of ElastoDyn (and SubDyn is coupled to ElastoDyn). Do you intend to replace HydroDyn in this regard or does SeaFEM also include structural dynamics such that a SeaFEM will also replace SubDyn?

I hope that helps.

Best regards,

Dear Jason,

Thank you for your quick reply.

• Sorry I forgot to mention that I copyed the output PRPMesh from input PRPMesh in order to store the SeaFEM forces/moments in HydroDyn’s module. You are right, this output mesh was not initially found in OpenFAST code.
• That’s probably the main problem, I was storing SeaFEM data in PRPMesh which is not coupled to ElastoDyn’s, hence there was not taken into account during the computation.
• This coupled tool will be applied for the simulation of floating platforms, with no seabed landed substructures (jackets, monopiles…). SubDyn module will be disabled in this case and exchange information will be carried out directly between HydroDyn and ElastoDyn modules.

Apparently the answer of my questions is related to second point and finding a coupled mesh to ElastoDyn, in which I can store the forces/moments received from SeaFEM.

Best regards,


Dear Irene,

OK, it sounds like you have a path forward.

Please be aware though, that ElastoDyn treats the floater as a 6-DOF rigid body. If you want to model the floating substructure as a flexible body (to support hydro-elastic coupling, as the forum topic says rather than rigid wave-body interaction), you should couple SeaFEM with SubDyn rather than ElastoDyn.

Best regards,