Differences between Onshore and Offshore Tower base loads

Dear Jason,
I built my model for an onshore turbine, checking my results with FAST’s OutData. Now I’m moving on to the offshore case, and I’m starting to analyze the aerodynamic differences compared to the onshore case.
Observing the simulations carried out with FAST, I noticed two things that I cannot explain:

  • ‘RotThrust’, which in the onshore case was equal to ‘TwrBsFxt’, in the offshore case it is greater than ‘RotThrust’. I can’t understand what other contribution is involved in the offshore case (below is the input file where I set the simulation, starting from test 24)

AeroDyn:

------- AERODYN v15.03.* INPUT FILE ------------------------------------------------
NREL 5.0 MW offshore baseline aerodynamic input properties.
======  General Options  ============================================================================
False         Echo               - Echo the input to "<rootname>.AD.ech"?  (flag)
"default"     DTAero             - Time interval for aerodynamic calculations {or "default"} (s)
          1   WakeMod            - Type of wake/induction model (switch) {0=none, 1=BEMT}
          1   AFAeroMod          - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model}
          0   TwrPotent          - Type tower influence on wind based on potential flow around the tower (switch) {0=none, 1=baseline potential flow, 2=potential flow with Bak correction}
False         TwrShadow          – Calculate tower influence on wind based on downstream tower shadow? (flag)
False          TwrAero            - Calculate tower aerodynamic loads? (flag)
False         FrozenWake         - Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing]
======  Environmental Conditions  ===================================================================
        1.2   AirDens            - Air density (kg/m^3)
  1.464E-05   KinVisc            - Kinematic air viscosity (m^2/s)
        335   SpdSound           - Speed of sound (m/s)
======  Blade-Element/Momentum Theory Options  ====================================================== [used only when WakeMod=1]
          2   SkewMod            - Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [used only when WakeMod=1]
True          TipLoss            - Use the Prandtl tip-loss model? (flag) [used only when WakeMod=1]
True          HubLoss            - Use the Prandtl hub-loss model? (flag) [used only when WakeMod=1]
False          TanInd             - Include tangential induction in BEMT calculations? (flag) [used only when WakeMod=1]
False         AIDrag             - Include the drag term in the axial-induction calculation? (flag) [used only when WakeMod=1]
False         TIDrag             - Include the drag term in the tangential-induction calculation? (flag) [used only when WakeMod=1 and TanInd=TRUE]
"Default"     IndToler           - Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [used only when WakeMod=1]
        100   MaxIter            - Maximum number of iteration steps (-) [used only when WakeMod=1]
======  Beddoes-Leishman Unsteady Airfoil Aerodynamics Options  ===================================== [used only when AFAeroMod=2]
          3   UAMod              - Unsteady Aero Model Switch (switch) {1=Baseline model (Original), 2=Gonzalez’s variant (changes in Cn,Cc,Cm), 3=Minemma/Pierce variant (changes in Cc and Cm)} [used only when AFAeroMod=2]
True          FLookup            - Flag to indicate whether a lookup for f' will be calculated (TRUE) or whether best-fit exponential equations will be used (FALSE); if FALSE S1-S4 must be provided in airfoil input files (flag) [used only when AFAeroMod=2]
======  Airfoil Information =========================================================================
          1   InCol_Alfa         - The column in the airfoil tables that contains the angle of attack (-)
          2   InCol_Cl           - The column in the airfoil tables that contains the lift coefficient (-)
          3   InCol_Cd           - The column in the airfoil tables that contains the drag coefficient (-)
          4   InCol_Cm           - The column in the airfoil tables that contains the pitching-moment coefficient; use zero if there is no Cm column (-)
          0   InCol_Cpmin        - The column in the airfoil tables that contains the Cpmin coefficient; use zero if there is no Cpmin column (-)
          8   NumAFfiles         - Number of airfoil files used (-)
"Airfoils/Cylinder1.dat"    AFNames            - Airfoil file names (NumAFfiles lines) (quoted strings)
"Airfoils/Cylinder2.dat"
"Airfoils/DU40_A17.dat"
"Airfoils/DU35_A17.dat"
"Airfoils/DU30_A17.dat"
"Airfoils/DU25_A17.dat"
"Airfoils/DU21_A17.dat"
"Airfoils/NACA64_A17.dat"
======  Rotor/Blade Properties  =====================================================================
True          UseBlCm            - Include aerodynamic pitching moment in calculations?  (flag)
"NRELOffshrBsline5MW_AeroDyn_blade.dat"    ADBlFile(1)        - Name of file containing distributed aerodynamic properties for Blade #1 (-)
"NRELOffshrBsline5MW_AeroDyn_blade.dat"    ADBlFile(2)        - Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2]
"NRELOffshrBsline5MW_AeroDyn_blade.dat"    ADBlFile(3)        - Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3]
======  Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True]
         11   NumTwrNds         - Number of tower nodes used in the analysis  (-) [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True]
TwrElev        TwrDiam        TwrCd
(m)              (m)           (-)
1.0000000E+01  6.5000000E+00  1.0000000E+00  
1.7760000E+01  6.2400000E+00  1.0000000E+00  
2.5520000E+01  5.9700000E+00  1.0000000E+00  
3.3280000E+01  5.7100000E+00  1.0000000E+00  
4.1040000E+01  5.4500000E+00  1.0000000E+00  
4.8800000E+01  5.1800000E+00  1.0000000E+00  
5.6560000E+01  4.9200000E+00  1.0000000E+00  
6.4320000E+01  4.6600000E+00  1.0000000E+00  
7.2080000E+01  4.4000000E+00  1.0000000E+00  
7.9840000E+01  4.1300000E+00  1.0000000E+00  
8.7600000E+01  3.8700000E+00  1.0000000E+00  

ElastoDyn:

------- ELASTODYN v1.03.* INPUT FILE -------------------------------------------
NREL 5.0 MW Baseline Wind Turbine for Use in Offshore Analysis. Properties from Dutch Offshore Wind Energy Converter (DOWEC) 6MW Pre-Design (10046_009.pdf) and REpower 5M 5MW (5m_uk.pdf)
---------------------- SIMULATION CONTROL --------------------------------------
False         Echo        - Echo input data to "<RootName>.ech" (flag)
          3   Method      - Integration method: {1: RK4, 2: AB4, or 3: ABM4} (-)
"default"     DT          - Integration time step (s)
---------------------- ENVIRONMENTAL CONDITION ---------------------------------
    9.80665   Gravity     - Gravitational acceleration (m/s^2)
---------------------- DEGREES OF FREEDOM --------------------------------------
False          FlapDOF1    - First flapwise blade mode DOF (flag)
False          FlapDOF2    - Second flapwise blade mode DOF (flag)
False          EdgeDOF     - First edgewise blade mode DOF (flag)
False         TeetDOF     - Rotor-teeter DOF (flag) [unused for 3 blades]
True          DrTrDOF     - Drivetrain rotational-flexibility DOF (flag)
True          GenDOF      - Generator DOF (flag)
False          YawDOF      - Yaw DOF (flag)
False          TwFADOF1    - First fore-aft tower bending-mode DOF (flag)
False          TwFADOF2    - Second fore-aft tower bending-mode DOF (flag)
False          TwSSDOF1    - First side-to-side tower bending-mode DOF (flag)
False          TwSSDOF2    - Second side-to-side tower bending-mode DOF (flag)
True          PtfmSgDOF   - Platform horizontal surge translation DOF (flag)
True          PtfmSwDOF   - Platform horizontal sway translation DOF (flag)
True          PtfmHvDOF   - Platform vertical heave translation DOF (flag)
True          PtfmRDOF    - Platform roll tilt rotation DOF (flag)
True          PtfmPDOF    - Platform pitch tilt rotation DOF (flag)
True          PtfmYDOF    - Platform yaw rotation DOF (flag)
---------------------- INITIAL CONDITIONS --------------------------------------
          0   OoPDefl     - Initial out-of-plane blade-tip displacement (meters)
          0   IPDefl      - Initial in-plane blade-tip deflection (meters)
          0   BlPitch(1)  - Blade 1 initial pitch (degrees)
          0   BlPitch(2)  - Blade 2 initial pitch (degrees)
          0   BlPitch(3)  - Blade 3 initial pitch (degrees) [unused for 2 blades]
          0   TeetDefl    - Initial or fixed teeter angle (degrees) [unused for 3 blades]
          0   Azimuth     - Initial azimuth angle for blade 1 (degrees)
     8.1344   RotSpeed    - Initial or fixed rotor speed (rpm)
          0   NacYaw      - Initial or fixed nacelle-yaw angle (degrees)
          0   TTDspFA     - Initial fore-aft tower-top displacement (meters)
          0   TTDspSS     - Initial side-to-side tower-top displacement (meters)
          0   PtfmSurge   - Initial or fixed horizontal surge translational displacement of platform (meters)
          0   PtfmSway    - Initial or fixed horizontal sway translational displacement of platform (meters)
          0   PtfmHeave   - Initial or fixed vertical heave translational displacement of platform (meters)
          0   PtfmRoll    - Initial or fixed roll tilt rotational displacement of platform (degrees)
          0   PtfmPitch   - Initial or fixed pitch tilt rotational displacement of platform (degrees)
          0   PtfmYaw     - Initial or fixed yaw rotational displacement of platform (degrees)
---------------------- TURBINE CONFIGURATION -----------------------------------
          3   NumBl       - Number of blades (-)
         63   TipRad      - The distance from the rotor apex to the blade tip (meters)
        1.5   HubRad      - The distance from the rotor apex to the blade root (meters)
          0   PreCone(1)  - Blade 1 cone angle (degrees)
          0   PreCone(2)  - Blade 2 cone angle (degrees)
          0   PreCone(3)  - Blade 3 cone angle (degrees) [unused for 2 blades]
          0   HubCM       - Distance from rotor apex to hub mass [positive downwind] (meters)
          0   UndSling    - Undersling length [distance from teeter pin to the rotor apex] (meters) [unused for 3 blades]
          0   Delta3      - Delta-3 angle for teetering rotors (degrees) [unused for 3 blades]
          0   AzimB1Up    - Azimuth value to use for I/O when blade 1 points up (degrees)
          0   OverHang    - Distance from yaw axis to rotor apex [3 blades] or teeter pin [2 blades] (meters)
          0   ShftGagL    - Distance from rotor apex [3 blades] or teeter pin [2 blades] to shaft strain gages [positive for upwind rotors] (meters)
          0   ShftTilt    - Rotor shaft tilt angle (degrees)
          0   NacCMxn     - Downwind distance from the tower-top to the nacelle CM (meters)
          0   NacCMyn     - Lateral  distance from the tower-top to the nacelle CM (meters)
       1.75   NacCMzn     - Vertical distance from the tower-top to the nacelle CM (meters)
          0   NcIMUxn     - Downwind distance from the tower-top to the nacelle IMU (meters)
          0   NcIMUyn     - Lateral  distance from the tower-top to the nacelle IMU (meters)
    2.23336   NcIMUzn     - Vertical distance from the tower-top to the nacelle IMU (meters)
          2   Twr2Shft    - Vertical distance from the tower-top to the rotor shaft (meters)
       87.6   TowerHt     - Height of tower above ground level [onshore] or MSL [offshore] (meters)
         10   TowerBsHt   - Height of tower base above ground level [onshore] or MSL [offshore] (meters)
          0   PtfmCMxt    - Downwind distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters)
          0   PtfmCMyt    - Lateral distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters)
   -89.9155   PtfmCMzt    - Vertical distance from the ground level [onshore] or MSL [offshore] to the platform CM (meters)
         -0   PtfmRefzt   - Vertical distance from the ground level [onshore] or MSL [offshore] to the platform reference point (meters)
---------------------- MASS AND INERTIA ----------------------------------------
          0   TipMass(1)  - Tip-brake mass, blade 1 (kg)
          0   TipMass(2)  - Tip-brake mass, blade 2 (kg)
          0   TipMass(3)  - Tip-brake mass, blade 3 (kg) [unused for 2 blades]
      56780   HubMass     - Hub mass (kg)
     115926   HubIner     - Hub inertia about rotor axis [3 blades] or teeter axis [2 blades] (kg m^2)
    534.116   GenIner     - Generator inertia about HSS (kg m^2)
     240000   NacMass     - Nacelle mass (kg)
2.60789E+06   NacYIner    - Nacelle inertia about yaw axis (kg m^2)
          0   YawBrMass   - Yaw bearing mass (kg)
7.46633E+06   PtfmMass    - Platform mass (kg)
4.22923E+09   PtfmRIner   - Platform inertia for roll tilt rotation about the platform CM (kg m^2)
4.22923E+09   PtfmPIner   - Platform inertia for pitch tilt rotation about the platform CM (kg m^2)
 1.6423E+08   PtfmYIner   - Platform inertia for yaw rotation about the platform CM (kg m^2)
---------------------- BLADE ---------------------------------------------------
         17   BldNodes    - Number of blade nodes (per blade) used for analysis (-)
"NRELOffshrBsline5MW_Blade.dat"    BldFile(1)  - Name of file containing properties for blade 1 (quoted string)
"NRELOffshrBsline5MW_Blade.dat"    BldFile(2)  - Name of file containing properties for blade 2 (quoted string)
"NRELOffshrBsline5MW_Blade.dat"    BldFile(3)  - Name of file containing properties for blade 3 (quoted string) [unused for 2 blades]
---------------------- ROTOR-TEETER --------------------------------------------
          0   TeetMod     - Rotor-teeter spring/damper model {0: none, 1: standard, 2: user-defined from routine UserTeet} (switch) [unused for 3 blades]
          0   TeetDmpP    - Rotor-teeter damper position (degrees) [used only for 2 blades and when TeetMod=1]
          0   TeetDmp     - Rotor-teeter damping constant (N-m/(rad/s)) [used only for 2 blades and when TeetMod=1]
          0   TeetCDmp    - Rotor-teeter rate-independent Coulomb-damping moment (N-m) [used only for 2 blades and when TeetMod=1]
          0   TeetSStP    - Rotor-teeter soft-stop position (degrees) [used only for 2 blades and when TeetMod=1]
          0   TeetHStP    - Rotor-teeter hard-stop position (degrees) [used only for 2 blades and when TeetMod=1]
          0   TeetSSSp    - Rotor-teeter soft-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1]
          0   TeetHSSp    - Rotor-teeter hard-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1]
---------------------- DRIVETRAIN ----------------------------------------------
        100   GBoxEff     - Gearbox efficiency (%)
         97   GBRatio     - Gearbox ratio (-)
8.67637E+08   DTTorSpr    - Drivetrain torsional spring (N-m/rad)
  6.215E+06   DTTorDmp    - Drivetrain torsional damper (N-m/(rad/s))
---------------------- FURLING -------------------------------------------------
False         Furling     - Read in additional model properties for furling turbine (flag) [must currently be FALSE)
"unused"      FurlFile    - Name of file containing furling properties (quoted string) [unused when Furling=False]
---------------------- TOWER ---------------------------------------------------
         20   TwrNodes    - Number of tower nodes used for analysis (-)
"NRELOffshrBsline5MW_OC3Hywind_ElastoDyn_Tower.dat"    TwrFile     - Name of file containing tower properties (quoted string)
  • Since the wind has a spatial and temporal arrangement, I used Turbsim to create a wind file for use in my model. Turbsim creates a 2D wind grid in y and z direction, however from some tests I have noticed that ‘RotThrust’ also depends on x, and therefore somehow FAST takes into account how the wind changes as x changes (despite the Turbsim grid is only in the y and z direction). How can I also take into account the variation of the wind even in position x?
    [I noticed the difference because setting Surge = False in ElastoDyn changes the ‘RotThrust’ trend].

Thanks for your help, best regards.

Riccardo.

Dear Riccardo,

Regarding RotThrust versus TwrBsFxt, both of these ElastoDyn outputs including weight/inertial related terms. For the onshore case, the tower deflection is likely small and I see you don’t have shaft tilt, so, both the shaft and tower-base coordinate systems in the x-direction are likely aligned and horizontal. For the floating offshore case, the platform likely pitches a bit, so while the shaft and tower-base coordinate systems are still likely aligned in the x-direction, they are no longer horizontal, so, the weight/inertia of the nacelle and tower will impact TwrBsFxt, but not RotThrust.

Regarding TurbSim, you are right that TurbSim creates a 2D (Y/Z) plus time wind field. The InflowWind module of OpenFAST interprets this as a 3D (X/Y/Z) plus time wind field by propagating the 2D wind field along the X-axis based on the mean wind speed (i.e., the so-called “frozen turbulence” assumption). So, in OpenFAST, the wind field really changes along X, but this change in X is equivalent to a time shift.

I hope that helps.

Best regards,

Dear Jason,
I tried to implement the x shift in the wind file as you indicated, but this does not solve my problem: as you can see in the figure, the ‘RotThr’ coming out of FAST is always bigger than the one obtained by me. The modification you suggest allows you to have a more compressed or dilated trend (in relation to the x position) but does not involve a greater overall trend of the Thrust.
I remind you that by putting Surge = False the Thrust I got is the same as FAST.
What else could it be?
Best regards,
Riccardo.

Dear Riccardo,

When disabling platform surge, are you also disabling platform pitch (PitchPDOF = False) in ElastoDyn? I would guess floating-platform induced pitching has a greater impact on RotThrust than floating-platform induced surge motion does.

You may also want to compare a different OpenFAST output. AeroDyn v15 output RtAeroFxh is the aerodynamic applied thrust force (directed along the shaft), whereas as ElastoDyn output RotThrust includes weight and inertial terms from the rotor mass.

That said, I’m not really sure I understand the question you are asking.

Best regards,

Dear Jason,
Following the advice of this topic I tried to compare, in the onshore case, the forces at the rotor (RtAeroFxh, RtAeroFyh, RtAeroFzh) with those at the base (TwrBsFxt, TwrBsFyt, TwrBsFzt), in a simulation that considers rigid bodies. I would expect the forces at the base in the 3 directions to coincide with those at the rotor.
While RtAeroFxh = TwrBsFxt, I noticed marked differences between RtAeroFyh and TwrBsFyt, and also in the trend (net of the offset due to the weight of the structure) of RtAeroFzh compared to TwrBsFzt. The figure shows the comparison between RtAeroFyh and TwrBsFyt.
What is the reason for this difference?
Thanks for the reply,
Lorenzo.

Dear Lorenzo,

The hub coordinate system used to output the aerodynamic loads from AeroDyn is tilted with the shaft, but also rotates with rotor (with the azimuth angle), so, you’ll need to account for these coordinate transformations when comparing the applied aerodynamic loads from AeroDyn to the tower-base loads from ElastoDyn.

Best regards,

Dear Jason,
The forces and moments in the rotating reference system of the rotor that I get with my model correspond to those coming out of FAST (‘RtAeroFxh’,‘RtAeroFyh’,‘RtAeroFzh’,‘RtAeroMxh’,‘RtAeroMyh’,‘RtAeroMzh’).
However, I find it difficult to switch from such loads to TowerBase loads: while Fx, Fy, Fz and Mz have satisfactory trends, Mx and My give me problems. To verify that the trends were correct I used the mass matrix M in 0,0,0 (variable in relation of platform positions) and the accelerations coming out of FAST, and through M * a = F I obtained the resulting forces and moments in the 6 DOFs; I then subtracted all the other contributions (hydro, moorings, restoring, non linear …) obtaining the trend that the forces at the base must have in the inertial system.
To derive the forces and moments at the nacelle (in the fixed reference system) I used the following equations (where 1, 2, 3 refer to the number of the blade):
Fx = trapz (zNods, pN1) + trapz (zNods, pN2) + trapz (zNods, pN3);
Fy = Ft1 * sin (Azimuth (1)) + Ft2 * sin (Azimuth (2)) + Ft3 * sin (Azimuth (3));
Fz = Ft1 * cos (Azimuth (1)) + Ft2 * cos (Azimuth (2)) + Ft3 * cos (Azimuth (3));
with
Ft1 = trapz (zNods, pT1);
Ft2 = trapz (zNods, pT2);
Ft3 = trapz (zNods, pT3);

Mx = trapz (zNods, pT1. * ZNods) + trapz (zNods, pT2. * ZNods) + trapz (zNods, pT3. * ZNods);
My = -trapz (zNods, pN1. * (ZNods * sin (Azimuth (1) -pi / 2))) - trapz (zNods, pN2. * (ZNods * sin (Azimuth (2) -pi / 2))) - trapz (zNods, pN3. * (zNods * sin (Azimuth (3) -pi / 2)));
Mz = -trapz (zNods, pN1. * (ZNods * cos (Azimuth (1)))) - trapz (zNods, pN2. * (ZNods * cos (Azimuth (2)))) - trapz (zNods, pN3. * (zNods * cos (Azimuth (3))));

I then carried out the necessary transformations (transport moments and passage from the fixed reference system to the inertial reference system structure through the 3D rotation matrix in Figure 2) through the simulink scheme in the Figure 1 (where HRot = 87.6 m is the height of the rotor, GTower = 43.4 m is the height of the tower’s center of mass).
Looking in order from top to bottom the 4 matrix multiply blocks in Figure 1, I obtained, starting from Fx, Fy, Fz, Mx, My, Mz (loads at the nacelle in the structure-fixed reference frame):

  1. The 6 loads at the nacelle in a inertial reference frame. In this way the Fz is directed vertically, so I was able to add the contribution due to the weight of the nacelle, rotor, blades. I also specify that I have used the simplifying hypothesis of Overhang = 0 assuming, in the case of onshore, that all the loads are in axis with the z axis.
  2. I changed the rotor coordinates from the structure reference system (0,0,87.6) to the inertial reference system, where the rotations will lead to different coordinates. Multiplying the forces obtained from point 1 with these arms, I obtained the transport moments to pass from the inertial system of the nacelle to that of the base.
  3. I did the same thing as point 2 but for the coordinate of the center of mass of the tower, in order to have the transport moment related to the weight of the tower. I then, of course, added the weight of the tower to the Fz component acting on the base.
  4. In the same way as point 1, I brought the moments from the fixed reference system of the nacelle to the inertial one. To the moments thus obtained I added the transport moments to obtain the moments acting at the base of the tower in the inertial reference system.

I repeat that with these formulas and transformations I get correct Fx, Fy, Fz and Mz trends, while I have problems with Mx and My.
Do you notice any obvious errors in my formulas?

Thanks for your invaluable help,
Lorenzo.


Dear Lorenzo,

I’m sorry, but I’m not really following your math, and so, cannot really comment.

Best regards,