Large discrepancy of aerodynamic loads between OpenFAST and Simpack

Dear OpenFASTers,

I simulated 5MW onshore (fixed) wind turbine (5MW_Land_DLL_WTurb in OpenFAST example folders) using OpenFAST and Simpack and want to check these two software can reach the same results.

1. Structural property
I have checked structural property (mass, inertia, bending stiffness) is identically used between Simpack and OpenFAST.
To double check these two software simulate the same wind turbine, I conducted a free decay test (without any other environmental loads) by assigning an initial tower top displacement of 1 meter in x axis. And then I compared the displacement of tower top in x and y axis simultaneously. The tower top displacement curve can match well initially (with the same 1% critical damping for both blade and tower) :

With time going on, there is a deviation for both x and y axis. I guess it results from the torsion effect. Elastodyn has no torsion mode, while Simpack explicitly model tower as euler-bernoulli beam so that torsion effect is accounted for.
But I am inclined to come into the conclusion that I have used the same structural property between Simpack and OpenFAST as the initial free decay response is similar.

2. Aerodyn
Then I turn to apply wind.
I simplified the wind to steady and uniform wind, with inflow veloctity = 11 m/s.

          11  HWindSpeed     - Horizontal wind speed                           (m/s)
         1   RefHt          - Reference height for horizontal wind speed      (m)
          0   PLExp          - Power law exponent     

For Aerodyn15, I adopted BEMT and steady AFAeroMod. TwrPotent and TwrAero are turned on:

          1   WakeMod            - Type of wake/induction model (switch) {0=none, 1=BEMT, 2=DBEMT, 3=OLAF} [WakeMod cannot be 2 or 3 when linearizing]
          1   AFAeroMod          - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} [AFAeroMod must be 1 when linearizing]
          1   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}
          0   TwrShadow          - Calculate tower influence on wind based on downstream tower shadow (switch) {0=none, 1=Powles model, 2=Eames model}
True          TwrAero            - Calculate tower aerodynamic loads? (flag)
False         FrozenWake         - Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing]
False         CavitCheck         - Perform cavitation check? (flag) [AFAeroMod must be 1 when CavitCheck=true]
False         CompAA             - Flag to compute AeroAcoustics calculation [used only when WakeMod = 1 or 2]
"unused"      AA_InputFile       - AeroAcoustics input file [used only when CompAA=true]

I have checked that Simpack used the same airfoil files and Aerodyn15 file with OpenFAST. Although BEMT and steady AFAeroMod seem to be unsuitable for rotating rotor, I just keep the same aerodyn15 configurations between Simpack and OpenFAST to hope to get the same rotor loads.

3. Elastodyn

And intial conditions keep zeroed. That is to say, no initial rotor velocity, no initial tower top displacement, no precone (Still Simpack has the same intial conditions with OpenFAST):

          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)
          0   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)

4. Servodyn:
#1. Servodyn is turned off. So no control is adopted in OpenFAST and Simpack. That said, rotor will rotate freely.

#2 Simpack and OpenFAST use the same bladed style DLL for PCMode and VSControl compiled by Dr. Jason.
Then I Compared the rotor load (RtAeroFxg), rotor speed and calculated the tip speed ratio (TSR):

For #1 (no control):

The rotor speed and TSR of Simpack and OpenFAST can match. But I can not understand why the rotor load is so different.
#2 with control (same DLL):

Now with control, rotor load and rotor speed seem to be identical while there is still a deviation for steady value of rotor load.

Here is my question:

  1. Do you have an experience of rotor load for 5MW wind turbine without control? I can not judge which rotor load bwtween Simpack and OpenFAST is correct in #1.

  2. For #1, the rotor load begin to deviate largely after 50s when TSR exceed 9. As inflow velocity is 11, at this time tip velocity will be 99 m/s. And for #2, servodyn will control to avoid a high tip velocity.
    Considering turning on servodyn help to make the results to match well, I am guessing whether BEMT and steady AFAeroMod have a limitaion for tip speed? When tip speed become large, BEMT and steady AFAeroMod can not accurately calculate aerodynamic load. Maybe Simpack conducted an inherent correction. Could it be the reason resulting in the difference in #1? But the difference is too large, I have no confidence to favor my guess :pensive:

  3. For #2, Simpack rotor load is sort of lower than OpenFAST rotor load. I guess possible reason might be the blade torsion. As Simpack modelled blade as beam, so blade can twist. Maybe during the simulation, Simpack blade twist a few, then its pitch angle will be larger than OpenFAST’s, leading to a lower rotor force. I will try to extract blade pitch in Simpack to support my guess. Do you have a suggestion about any other possible reasons?

Ran Tu

Dear @Ran.Tu,

As you noted in (3), I’m guessing the main reason for the differences between SIMPACK and OpenFAST with aerodynamics enabled is the inclusion of blade torsion in the SIMPACK model. The OpenFAST model can also include torsion in the blade by enabling BeamDyn (the NREL 5-MW wind turbine model with BeamDyn enabled is available here: r-test/glue-codes/openfast/5MW_Land_BD_DLL_WTurb at main · OpenFAST/r-test · GitHub). Does switching from modeling the structural dynamics of the blade from ElastoDyn to BeamDyn reduce the discrepancies between SIMPACK and OpenFAST for your two cases with aerodynamics?

Best regards,

Thanks for your advice, @Jason.Jonkman .
I am trying to use Beamdyn. But when I check the input file of Beamdyn, it needs stiffness matrix and mass matrix for several cross-section, right?

I have compared the material file for Beamdyn and Table 2-1 (Distributed Blade Structural Properties) in “Definition of a 5-MW Reference Wind Turbine for Offshore System Development”

  1. For stiffness matrix, (1, 1) and (2, 2) = EAStiff / 10. As mention in this post, (1, 1) (2, 2) might possibly have few influence. So are they defined artificially?

  2. For mass stiffness, I don’t find the value of (6, 6). Table 2-1 seems not to mention this inertia.


A good news to share.

Rather than using Beamdyn in OpenFAST, I depressed the blade torsion in Simpack. Then I conducted #1 (the case without control) as mentioned above. Now these two rotor loads can match well:

Now, I think I can conclude that the discrepancy indeed results from blade twist. To further validate my guess, I will try to use Beamdyn to account for blade twist in OpenFAST.


1 Like

Dear @Ran.Tu,

Yes, the shear stiffness values in the BeamDyn model of the NREL 5-MW baseline wind turbine are defined artificially and the solution should be insensitive to these values.

The rotational inertia (6,6) should be the sum of the flapwise (5,5) and edgewise (4,4) inertias. See: Input Files — OpenFAST v3.2.0 documentation.

Best regards,