Issues related to OpenFast output for hydrodynamic loading of OC4 semi-submersible turbines, etc

Dear @Jason.Jonkman,
I am thrilled to join the NREL forum community. Currently, I am working on modeling the 5MW OC4 semi-submersible floating wind turbine and intend to use external forces derived from OpenFast. However, I have a few questions regarding OpenFast’s output values:

  1. Hydrodynamic Loads Interpretation
    Are HydroFxi, HydroFyi, HydroFzi, HydroMxi, HydroMyi, and HydroMzi the total hydrodynamic loads? Do they include contributions from hydrostatic pressure, radiation forces, mooring forces, etc.? Additionally, what are the complete load components acting on a floating wind turbine platform?

  2. Mooring Forces on the Platform
    How can I obtain the 6-DOF mooring forces acting on the floating platform? I noticed that the MoorDyn module only outputs FairTen1-3 and AnchTen1-3 but does not explicitly provide the resultant mooring forces/moments on the platform. Could you advise on how to derive these?

  3. Wind Loads on the Platform
    I have been unable to locate the wind loads acting directly on the floating platform. Would it be appropriate to use RtAeroFxi, RtAeroFyi, RtAeroFzi, RtAeroMxi, RtAeroMyi, and RtAeroMzi as the wind loads on the platform?

Thank you for your time and expertise. I greatly appreciate any guidance you can provide.

Dear @Shifeng.Jia,

Here are my responses:

  1. HydroDyn outputs HydroFxi, etc. are the total hydrodynamic applied loads integrated across the substructure, as you describe, but they do not include mooring loads, which are not calculated within HydroDyn.
  2. You can output the X/Y/Z components of the force and moment at each fairlead in MoorDyn via the outputs available through the OutList–see the MoorDyn v2 documentation available here: https://moordyn.readthedocs.io/en/latest/inputs.html#id5. You would then have to sum these forces and moments to arrive at the total reaction forces and moments of the mooring system.
  3. AeroDyn does not currently support direct wind loading on the substructure. This is needed future work. AeroDyn outputs RtAeroFxi, etc. are the total aerodynamic applied load integrated across the rotor. AeroDyn can also calculate aerodynamic loads on the tower.

Best regards

Dear @Jason.Jonkman,
Thank you very much for your detailed and helpful response—I truly appreciate it.
I have now supplemented the OC4 model according to MoorDyn v2, but I am unsure if my modifications are correct. Specifically, I added the Bodies section to the input file, as I noticed that MoorDyn v2’s documentation suggests that only Bodies can output 6-DOF forces and moments. However, when attempting to output moments (BODY1MX, BODY1MY, BODY1MZ), the terminal displays the error:
“Invalid output specifier BODY1MX. Quantity type not recognized.”
Interestingly, the forces (BODY1FX, BODY1FY, BODY1FZ) are successfully output. Could you clarify why the moments are not recognized and how to resolve this issue?
Additionally, I would like to confirm whether the total external forces acting on the floating platform are the sum of:
Total hydrodynamic loads (HydroFxi, HydroFyi, HydroFzi, HydroMxi, HydroMyi, HydroMzi),
Wind loads (e.g., from RtAero* channels), and
Mooring loads (once properly extracted).
Are there any other external force components that should be included?
Thank you again for your time and expertise—your guidance is invaluable to my work.

Dear @Shifeng.Jia,

I’ll let one of our MoorDyn experts respond regarding your MoorDyn question.

Regarding the total loads acting on a floating platform, in OpenFAST these could include hydrodynamics from HydroDyn (HydroFxi, etc. as you describe), the mooring loads at the fairleads from MoorDyn (or a different mooring module, when enabled), the reaction loads from the turbine through the tower base from ElastoDyn (including aerodynamic loads, turbine weight, and inertia), gravity loads from the floater mass, and any loads applied from a structural controller (StC, if enabled through ServoDyn).

Best regards,

Hi @Shifeng.Jia, what version of OpenFAST are you using? I just tested the BODY1MX BODY1MY and BODY1MZ channels on 4.0.3 and they were working fine.

Are you able to share your moordyn input file, that would help troubleshoot as well.


Thank you very much for your previous guidance—it has been incredibly helpful. I truly appreciate your time and expertise.
I have attached a screenshot of my MoorDyn input file (based on OpenFAST v3.5), where I added the Bodies section by modifying the v1 template. Since setting CdA* and Ca* to zero resulted in zero FX/FY/FZ outputs, I assigned them arbitrary values as a temporary workaround. However, I would like to confirm the correct approach:
Could you advise where I might find the appropriate values for the following parameters in the Bodies section for the OC4 semi-submersible platform? I* , Volume, CdA*, Ca* .
Thank you again for your support.

Dear @Ryan.Davies,
The above is my answer, thank you very much for your patience.
Best regards,

Hi @Shifeng.Jia,

A few thoughts on your system.

You aren’t getting body moment outputs because that is not an available output in OpenFAST v3.5.0. Body moment outputs were added in OpenFAST v3.5.1: Release v3.5.1 · OpenFAST/openfast · GitHub (specifically in PR MoorDyn updates and bug fixes by RyanDavies19 · Pull Request #1727 · OpenFAST/openfast · GitHub).

You have included a bodies section in your input file but it is not doing anything other than adding mass to your system. Because you define your point attachments as Vessel they are rigidly attached to your Elastodyn setup, not the body object. To attach those points to the body their attachment would need to be Body1. I am confused about why you need the inertia and hydrodynamic coefficients for the MoorDyn body. Are you attempting the model the entire platform in MoorDyn and not use Elastodyn and/or Hydrodyn? If you are simulating the platform in other OpenFAST modules, then including coefficients on the MoorDyn body will be double-counting those properties and will cause an inaccurate simulation.

Thank you very much for your previous guidance. Following your suggestions, I’ve recently made modifications to my model and conducted some experiments. I’d greatly appreciate it if you could review whether these changes are correct.





Dear @Ryan.Davies
The above reply is the result of the mooring I did, thanks for the guidance.

Dear @Jason.Jonkman










Thank you very much for your reply—it has been extremely helpful. I have implemented my own floating platform model in Simulink, but the 6-DOF displacement outputs do not fully match those from OpenFAST, although the general trends appear similar. Below are the input loads in my simulink, with wind loads replaced by RtAeroFxi etc. The output ‘floating platform’ curves are from my model, and the ‘from workspace’ curves are from openfast. You take a look and see where I am going wrong, if I am missing some loads. When I multiply the hydrodynamic portion of the roll and pitch by a factor gain of -88, and also multiply the wind load portion and the mooring load portion of the surge and sway by -1.5 and 0.5, respectively, my curves line up perfectly with openfast.

Hi @Shifeng.Jia,

Are you intending to have each mooring line’s 6 DOF forces and moments on the platform be accounted for separately? By using 3 bodies instead of just one you are separating these forces out when writing output files. I ask this, because if your simulink only includes BODY1 forces and moments, then you are only including contributions from a single mooring line.

If you want the contributions from all the mooring lines to be included in BODY1, then your input file would need to look like the following:

----------------------------- MoorDyn Input File -------------------------------
Mooring system for OC4-DeepCwind Semi
FALSE   Echo    - echo the input file data (flag)
----------------------------- LINE TYPES ---------------------------------------
Name    Diam    MassDen  EA      BA/-zeta El  Cd  Ca  CdAx    CaAx
(-)     (m)     (kg/m)   (N)     (N-s/-)  (-) (-) (-) (-)     (-)
main    0.0766  113.35   7.536E8 -1.0     2.0 0.8 0.4 0.25
----------------------------- BODIES -------------------------------------------
ID  Attachment X0  Y0  Z0  r0  p0  y0  Mass    CG*     I*  Volume  CdA*    Ca*
(#) (word)     (m) (m) (m) (deg)(deg)(deg)(kg) (m)     (kg-m^2)(m^3) (m^2)  (-)
1   coupled    0   0   0   0   0   0   0       0       0   0       0       0
----------------------------- POINTS -------------------------------------------
ID  Attachment X       Y       Z     M     V   CdA   CA
(-) (-)        (m)     (m)     (m)   (kg)  (m^3)(m^2) (-)
1   Fixed      418.8   725.383 -200.0 0     0   0     0
2   Fixed     -837.6   0.0     -200.0 0     0   0     0
3   Fixed      418.8  -725.383 -200.0 0     0   0     0
4   Body1       20.434  35.393  -14.0 0     0   0     0
5   Body1      -40.868  0.0    -14.0  0     0   0     0
6   Body1       20.434 -35.393 -14.0  0     0   0     0
----------------------------- LINES --------------------------------------------
ID  LineType AttachA AttachB UnstrLen NumSegs Outputs
(-) (-)     (-)     (-)     (m)      (-)     (-)
1   main    1       4       835.35   20      -
2   main    2       5       835.35   20      -
3   main    3       6       835.35   20      -

Dear @Ryan.Davies,
Thank you very much for your reply. I want to calculate the forces and moments from all three mooring lines, then sum them up as the total mooring forces and moments acting on the platform. Since “Body1” in Simulink already includes Body2 and Body3, I’ve summed them up in the MATLAB workspace. Does this configuration in my MoorDyn file correctly represent the combined forces and moments from all three mooring lines?

Dear @Ryan.Davies,
Thank you for your guidance - I believe I now understand the configuration. To obtain the total mooring forces and moments, it’s unnecessary to define Body2 and Body3 separately. Simply setting all Points to reference Body1 in the configuration file is sufficient. This approach should correctly output the combined mooring loads acting on the platform.
Thank you again for your valuable support.

@Shifeng.Jia,

Correct, body 2 and 3 are unnecessary. Defining all the points as attached to Body1 will ensure that the forces and moments returned by Body1 include the total mooring forces and moments on the platform.

Dear @Shifeng.Jia,

I’m not sure I understand enough about what you are doing to comment. Are you taking the applied hydrodynamic loads (HydroFxi, etc.) and applied aerodynamic loads (RtAeroFxg, etc.), and applied mooring reaction loads (Body1Fx, etc.) from OpenFAST and applying them to 6-DOF rigid body model in Simulink?

Best regards,

Dear @Jason.Jonkman,
I sincerely apologize for any confusion caused by my previous explanations. I would like to clarify my current approach and the issues I’m encountering:
Firstly, yes, I am indeed inputting these loads from openfast into the model in simulink. I have implemented the floating platform dynamics using the Cummins equation in state-space form.
The convolution term is also represented in state-space form (using marin_semi.ss).
The external loads from OpenFAST (hydrodynamic, mooring, and wind loads) are used as inputs to this model.
The 6-DOF displacement outputs from my model differ significantly from OpenFAST’s results (as shown in my previous data).
Interestingly, when I scale the input loads by certain empirical factors, the results align much better with OpenFAST’s outputs.
So I’d like to ask if my input loads are missing or if there is some other issue that is causing this result?
Thank you very much for your time and support.
Best regards,

Dear @Shifeng.Jia,

Well, the HydroDyn outputs you are using (HydroFxi, etc.) are the total hydrodynamic loads, including those from Cummins equation, so, perhaps you are double counting terms?

Also, I see your model doesn’t match with mean responses in surge, pitch, and heave. For mean heave to be off by 12 m suggests to me that weight is not properly accounted for in your model. The mean surge should come from thrust (RtAeroFxg), which I’m also not sure why that is not showing up in your model.

Best regards,

Dear @Jason.Jonkman,
Thank you very much for your patience in guiding me, I can’t thank you enough. In my model, the mass is taken from the mass matrix in the Definition of the Semisubmersible Floating System for Phase II of OC4 file (M = diag([13473000, 13473000, 13473000, 6.8270E+09, 6.8270E+09, 1.2260E+10]):wink: The additional mass is taken from the A∞ matrix in the document. The surge comes from the thrust, which I didn’t quite understand. Is it found in OutListParameters? The figure shows my Cummins equation with the convolution term in the form of being transformed by my state space form. The final total force is the load entered by openfast.
image
Best regards,

Dear @Jason.Jonkman,
The load RtAeroFxg I added to my model. But I have to multiply it by a factor of 1.5 to correspond to the openfast output.