# Morison formula for OC3-Hywind OFWT

Hello everyone,

I construct a spar type floated wind turbine model with multibody formula. I am comparing the response of my model with response in openfast to make sure the numerical model is correct. I have some questions.

1. Body reference point offset

The origin of the coordinates system (CS) is 78.01m underwater, so I make some changes in the fast as below:

-78.01 PtfmRefzt - Vertical distance from the ground level [onshore] (in ElastoDyn.dat file);

78.01 PtfmRefzt - The zt offset of the body reference point(s) from (0,0,0) (meters) ( in HydroDyn.dat file);

I use moordyn to calculate mooring force in my model. I check the moordyn document(Input Files — MoorDyn 2.1.0 documentation) and found the information as below:

X, Y, Z – Coordinates of the point (relative to inertial reference frame if “fixed/point/free”, or relative to platform/body reference frame if “vessel” or “body#”).

I change the paraments as below:

---------------------- CONNECTION PROPERTIES --------------------------------
Node Type X Y Z M V FX FY FZ CdA CA
(-) (-) (m) (m) (m) (kg) (m^3) (kN) (kN) (kN) (m^2) (-)
1 fixed 853.87 0.0 -241.99 0 0 0 0 0 0 0
2 fixed -426.94 739.47 -241.99 0 0 0 0 0 0 0
3 fixed -426.94 -739.47 -241.99 0 0 0 0 0 0 0
4 vessel 5.2 0.0 8.01 0 0 0 0 0 0 0
5 vessel -2.6 4.5 8.01 0 0 0 0 0 0 0
6 vessel -2.6 -4.5 8.01 0 0 0 0 0 0 0

But it doesn’t help, so the question is that how should I deal with the moordyn system?

1. Morison formula

I calculate the hydrodynamic loads with Morison formula, so I reset some parameters of HydroDyn.dat in openfast as below:

0 PotMod
1 ExctnMod
1 RdtnMod -
60 RdtnTMax
0.02 RdtnDT
1 NBody
1 NBodyMod
“…/5MW_Baseline/HydroData/Spar” PotFile
1 WAMITULEN
0.0 PtfmRefxt
0.0 PtfmRefyt
78.01 PtfmRefzt
0.0 PtfmRefztRot
8029.21 PtfmVol0
0.0 PtfmCOBxt
0.0 PtfmCOByt

I couldn’t make sure the changes are correct, and the other question is that when PotMod is set to be 0, the PLATFORM ADDITIONAL STIFFNESS AND DAMPING are not used. I don’t use the PLATFORM ADDITIONAL STIFFNESS AND DAMPING either in my model, however the response of yaw become very large, do you have some suggestions on how to deal with the stiffness for yaw degree of the platform?

Best regards

Dear @Xing.Tan,

I’m not sure I really understand your questions. Just a few comments:

• `PtfmRefzt` should have the same sign convention in both ElastoDyn and HydroDyn.
• The mooring lines of the OC3-Hywind spar should attach at 70-m below the still water level, not at 8.01-m above.
• The water depth of the OC3-Hywind spar is 320 m, not 241.99 m
• The OC3-Hywind spar specifications document specifies adding a yaw spring of 98,340,000 Nm/rad. You can use HydroDyn’s additional platform stiffness and damping without using the potential-flow solution by setting `PotMod` = 1, with `ExctnMod` = `RdtnMod` = 0.

Best regards,

Dear @Jason.Jonkman

I’m sorry I didn’t make myself clear. The question are as below:

1. The origin of the coordinates of openfast is at the still water level, while the origin of my model is at 78m under the still water level, and I use MoorDyn for the mooring force calculation in my model. Should I change the water depth and fairlead position of MoorDyn in my model?

2. I expect openfast calculate hydrodynamic force with Morison formulation however I couldn’t find a flag for that. So I wonder whether the openfast will calculate the hydrodynamic with Morison formulation if I set PotMod = 1 with ExctnMod = RdtnMod = 0. If it’s not, what should I do?

3. What confuses me is that I can’t set the PtfmRefzt to be same in HydroDyn and ElastoDyn. If I set PtfmRefzt = 78.01 in both HydroDyn and ElastoDyn, there will be a mistake:

FAST_InitializeAll:ED_Init:ED_ValidateInput:ValidatePrimaryData:PtfmRefzt must not be greater

than TowerBsHt.

If I set PtfmRefzt = -78.01 in both HydroDyn and ElastoDyn, there will be a mistake:

FAST_Solution:CalcOutputs_And_SolveForInputs:SolveOption1:ED_HD_InputOutputSolve:HydroDyn_CalcOutput: Angles in GetSmllRotAngs() are larger than 0.4 radians.

HydroDyn_CalcOutput: Angles in GetSmllRotAngs() are larger than 0.4 radians.

HydroDyn_CalcOutput:HDOut_MapOutputs: Angles in GetSmllRotAngs() are larger than 0.4 radians.

ED_HD_InputOutputSolve:HydroDyn_CalcOutput: Angles in GetSmllRotAngs() are larger than 0.4 radians.

HydroDyn_CalcOutput: Angles in GetSmllRotAngs() are larger than 0.4 radians.

HydroDyn_CalcOutput:HDOut_MapOutputs: Angles in GetSmllRotAngs() are larger than 0.4 radians.

interval 2227 Update_state: MAP_FATAL[59] : Approached a geometric limitation that the MSQS model is unable to solve. LMax = 902.080121 [m].

MAP_FATAL[59] : Approached a geometric limitation that the MSQS model is unable to solve. Line segment 1.

MAP_FATAL[88] : Line failed.

limitation that the MSQS model is unable to solve. LMax = 902.080121 [m].

MAP_FATAL[59] : Approached a geometric limitation that the MSQS model is unable to solve. Line

segment 1.

MAP_FATAL[88] : Line failed.

The other parameters are CompInflow = 0, CompAero = 0, WaveMod = 0，PtfmYaw = 5.7 degrees, and PotMod = 1 with ExctnMod = RdtnMod = 0.

Best regards

Dear @Xing.Tan,

Here are my responses:

1. I’m not sure I understand what you are trying to do to answer.
2. The HydroDyn module of OpenFAST will apply Morison’s equation (extended with other terms such as buoyancy and joint effects at member ends) whenever there are strip-theory members defined within HydroDyn. It sounds like you want to use a hybrid formulation, applying both potential flow and strip-theory. To do that, set `PropPot` = True for each strip-theory member that is also represented in the potential-flow solution, which will zero out all terms from the strip-theory formulation except for viscous drag, so as not to double count terms.
3. Setting` PtfmRefzt` positive does not sound correct because then the reference point will be above the water. It sounds like you want to set PtfmRefzt = -78.01 m in HydroDyn, which I presume means that your potential-flow data (from WAMIT?) is calculated relative to -78.01 m; is that correct? If you are modeling the spar as a rigid body in ElastoDyn, it should not really matter where you place `PtfmRefzt` in ElastoDyn (such as at zero or at -78.01 m) because OpenFAST will account for any offset of the reference points between ElastoDyn and HydroDyn in its internal mesh-mapping, including support for rigid-body kinematics and moment arms based on the offset.

Best regards,

Dear @Jason.Jonkman ,

I realized I have made a mistake about the parameter PtfmRefzt in HydroDyn with your correction. The PtfmRefzt in HydroDyn should match the potential-flow data, and the PtfmRefzt in HydroDyn is the offset of the point of application of wave forces in the potential flow data, not the offset about the model from SWL to reference point, is it right? I have set PtfmRefzt = -78.01 m in HydroDyn and PotMod = 0. It’s wrong because the PtfmRefzt was not used in OpenFAST when PotMod was set to be 0.

I want to use the Morison formulation only including hydrodynamic drag loads, hydrodynamic inertia loads and hydrodynamic add mass loads, so I set PotMod = 0 and PropPot = False. I learned from some documents that when I set PotMod = 1 and ExctnMod = RdtnMod = 1, OpenFAST would apply Morison Equation to calculate hydrodynamic drag loads and apply Potential flow theory to obtain radiation loads and diffraction loads, is it correct? Then what happened when I set PotMod = 1 and ExctnMod = RdtnMod = 0.

Best regards

Dear @Xing.Tan,

I agree with your commentary regarding `PtfmRefzt` in HydroDyn.

I also agree with your description of `PotMod` = 1 with `ExctnMod` = `RdtnMod` = 1.

When `PotMod` = 1 and `ExctnMod` = `RdtnMod` = 0, the potential-flow solution will still be applied except that the first-order wave-excitation loads and wave-radiation loads (added mass and damping) will be zeroed. What’s remaining from the potential-flow solution in this case are the hydrostatic loads and second-order loads (if enabled), as well as loads from the platform additional stiffness and damping.

Best regards,

Dear Dr. Jonkman,

Thank you for your response, and I have a better understanding of OpenFAST.

I find the codes in Morison.f90 shown below, and I believe that when PotMod = 0 and PropPot = False OpenFAST will apply the Morison formulation to calculate the hydrodynamic drag loads, hydrodynamic inertia loads and hydrodynamic add mass loads.

if ( .not. mem%PropPot ) then
Am = mem%Ca(i)p%WtrDenspi*mem%RMG(i)mem%RMG(i)mem%Ak + 2.0mem%AxCa(i)p%WtrDenspimem%RMG(i)*mem%RMG(i)dRdl_pmem%kkt
f_hydro = -matmul( Am, u%Mesh%TranslationAcc(:,mem%NodeIndx(i)) )
!call LumpDistrHydroLoads( f_hydro, mem%k, deltal, h_c, m%F_A(:, mem%NodeIndx(i)) )
y%Mesh%Force (:,mem%NodeIndx(i)) = y%Mesh%Force (:,mem%NodeIndx(i)) + m%memberLoads(im)%F_A(1:3, i)
y%Mesh%Moment(:,mem%NodeIndx(i)) = y%Mesh%Moment(:,mem%NodeIndx(i)) + m%memberLoads(im)%F_A(4:6, i)

``````           ! ------------------- **hydrodynamic inertia loads: sides: Section 7.1.4** ------------------------
f_hydro=(mem%Ca(i)+mem%Cp(i))*p%WtrDens*pi*mem%RMG(i)*mem%RMG(i)       * matmul( mem%Ak,  m%FA(:,mem%NodeIndx(i)) ) + &
2.0*mem%AxCa(i)*p%WtrDens*pi*mem%RMG(i)*mem%RMG(i)*dRdl_p * matmul( mem%kkt, m%FA(:,mem%NodeIndx(i)) ) + &
2.0*m%FDynP(mem%NodeIndx(i))*mem%AxCp(i)*pi*mem%RMG(i)*dRdl_pp*mem%k
!call LumpDistrHydroLoads( f_hydro, mem%k, deltal, h_c, m%F_I(:, mem%NodeIndx(i)) )
That is correct. HydroDyn will apply all terms of the strip-theory solution to each member when `PotMod` = 0 and/or `PropPot` = FALSE. These terms include the Morison equation terms of fluid inertia, viscous drag (relative form), and added mass. Additionally, these terms include hydrostatics and member-end effects at joints.