Issues related to the Blade Element Momentum (BEM) theory

Hi everyone
I conducted a dynamic analysis of a 5MW fixed-bottom wind turbine. I applied the Blade Element Momentum Theory to calculate the aerodynamic forces of the wind turbine, with the wind speed set as a steady-state wind profile that accounts for shear variations along the height.
I perform computations for each time step using the following algorithm(No correction models were considered in the calculations.During the simulation, the rotor speed was maintained constant, and servo control systemswere disabled)) :


All parameters in the formulas are sourced from the OpenFAST input files(NRELOffshrBsline5MW_AeroDyn_blade.dat).,“The wind speed V0 was calculated via [v₀ᵢ = HWindSpeed× [(RefHt + (r_hub + r_blade) × cos(Azimuth)) / RefHt]^PLExp, i=1,2,3] and validated against the output variable VUndx.” However, there are certain discrepancies between the calculated Pn​ (normal force) and Pt​ (tangential force) and the OpenFAST output variable ABaN00bFx``ABaN00bFy" ,particularly pronounced within the initial few seconds of the simulation."
I am deeply puzzled about where I made errors in my calculations.




I would appreciate any thoughts or insights.
Thank you and best regards,

------- AERODYN v15 for OpenFAST INPUT FILE -----------------------------------------------
NREL 5.0 MW offshore baseline aerodynamic input properties.
====== General Options ============================================================================
False Echo - Echo the input to “.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, 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]
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}
0 TwrShadow - Calculate tower influence on wind based on downstream tower shadow? (switch) {0=none, 1=Powles model, 2=Eames model}
False 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 Buoyancy - Include buoyancy effects? (flag)
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]
====== Environmental Conditions ===================================================================
“default” AirDens - Air density (kg/m^3)
“default” KinVisc - Kinematic viscosity of working fluid (m^2/s)
“default” SpdSound - Speed of sound in working fluid (m/s)
“default” Patm - Atmospheric pressure ¶ [used only when CavitCheck=True]
“default” Pvap - Vapour pressure of working fluid ¶ [used only when CavitCheck=True]
====== Blade-Element/Momentum Theory Options ====================================================== [unused when WakeMod=0 or 3]
1 SkewMod - Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [unused when WakeMod=0 or 3]
“default” SkewModFactor - Constant used in Pitt/Peters skewed wake model {or “default” is 15/32*pi} (-) [used only when SkewMod=2; unused when WakeMod=0 or 3]
False TipLoss - Use the Prandtl tip-loss model? (flag) [unused when WakeMod=0 or 3]
False HubLoss - Use the Prandtl hub-loss model? (flag) [unused when WakeMod=0 or 3]
TRUE TanInd - Include tangential induction in BEMT calculations? (flag) [unused when WakeMod=0 or 3]
False AIDrag - Include the drag term in the axial-induction calculation? (flag) [unused when WakeMod=0 or 3]
False TIDrag - Include the drag term in the tangential-induction calculation? (flag) [unused when WakeMod=0,3 or TanInd=FALSE]
“Default” IndToler - Convergence tolerance for BEMT nonlinear solve residual equation {or “default”} (-) [unused when WakeMod=0 or 3]
100 MaxIter - Maximum number of iteration steps (-) [unused when WakeMod=0]
====== Dynamic Blade-Element/Momentum Theory Options ============================================== [used only when WakeMod=2]
1 DBEMT_Mod - Type of dynamic BEMT (DBEMT) model {1=constant tau1, 2=time-dependent tau1, 3=constant tau1 with continuous formulation} (-) [used only when WakeMod=2]
4 tau1_const - Time constant for DBEMT (s) [used only when WakeMod=2 and DBEMT_Mod=1 or 3]
====== OLAF – cOnvecting LAgrangian Filaments (Free Vortex Wake) Theory Options ================== [used only when WakeMod=3]
“unused” OLAFInputFileName - Input file for OLAF [used only when WakeMod=3]
====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== [used only when AFAeroMod=2]
3 UAMod - Unsteady Aero Model Switch (switch) {2=B-L Gonzalez, 3=B-L Minnema/Pierce, 4=B-L HGM 4-states, 5=B-L HGM+vortex 5 states, 6=Oye, 7=Boeing-Vertol} [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]
0 UAStartRad - Starting radius for dynamic stall (fraction of rotor radius [0.0,1.0]) [used only when AFAeroMod=2; if line is missing UAStartRad=0]
1 UAEndRad - Ending radius for dynamic stall (fraction of rotor radius [0.0,1.0]) [used only when AFAeroMod=2; if line is missing UAEndRad=1]
====== Airfoil Information =========================================================================
1 AFTabMod - Interpolation method for multiple airfoil tables {1=1D interpolation on AoA (first table only); 2=2D interpolation on AoA and Re; 3=2D interpolation on AoA and UserProp} (-)
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 (-)
“../5MW_Baseline/Airfoils/Cylinder1.dat” AFNames - Airfoil file names (NumAFfiles lines) (quoted strings)
“../5MW_Baseline/Airfoils/Cylinder2.dat”
“../5MW_Baseline/Airfoils/DU40_A17.dat”
“../5MW_Baseline/Airfoils/DU35_A17.dat”
“../5MW_Baseline/Airfoils/DU30_A17.dat”
“../5MW_Baseline/Airfoils/DU25_A17.dat”
“../5MW_Baseline/Airfoils/DU21_A17.dat”
“../5MW_Baseline/Airfoils/NACA64_A17.dat”
====== Rotor/Blade Properties =====================================================================
True UseBlCm - Include aerodynamic pitching moment in calculations? (flag)
“../5MW_Baseline/NRELOffshrBsline5MW_AeroDyn_blade.dat” ADBlFile(1) - Name of file containing distributed aerodynamic properties for Blade #1 (-)
“../5MW_Baseline/NRELOffshrBsline5MW_AeroDyn_blade.dat” ADBlFile(2) - Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2]
“../5MW_Baseline/NRELOffshrBsline5MW_AeroDyn_blade.dat” ADBlFile(3) - Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3]
====== Hub Properties ============================================================================== [used only when Buoyancy=True]
0 VolHub - Hub volume (m^3)
0 HubCenBx - Hub center of buoyancy x direction offset (m)
====== Nacelle Properties ========================================================================== [used only when Buoyancy=True]
0 VolNac - Nacelle volume (m^3)
0, 0, 0 NacCenB - Position of nacelle center of buoyancy from yaw bearing in nacelle coordinates (m)
====== Tail Fin Aerodynamics =======================================================================
False TFinAero - Calculate tail fin aerodynamics model (flag)
“unused” TFinFile - Input file for tail fin aerodynamics [used only when TFinAero=True]
====== Tower Influence and Aerodynamics ============================================================ [used only when TwrPotent/=0, TwrShadow/=0, TwrAero=True, or Buoyancy=True]
12 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow/=0, TwrAero=True, or Buoyancy=True]
TwrElev TwrDiam TwrCd TwrTI TwrCb ! TwrTI used only when TwrShadow=2; TwrCb used only when Buoyancy=True
(m) (m) (-) (-) (-)
0.0000000E+00 6.0000000E+00 1.0000000E+00 1.0000000E-01 0.0000000E+00
8.5261000E+00 5.7870000E+00 1.0000000E+00 1.0000000E-01 0.0000000E+00
1.7053000E+01 5.5740000E+00 1.0000000E+00 1.0000000E-01 0.0000000E+00
2.5579000E+01 5.3610000E+00 1.0000000E+00 1.0000000E-01 0.0000000E+00
3.4105000E+01 5.1480000E+00 1.0000000E+00 1.0000000E-01 0.0000000E+00
4.2633000E+01 4.9350000E+00 1.0000000E+00 1.0000000E-01 0.0000000E+00
5.1158000E+01 4.7220000E+00 1.0000000E+00 1.0000000E-01 0.0000000E+00
5.9685000E+01 4.5090000E+00 1.0000000E+00 1.0000000E-01 0.0000000E+00
6.8211000E+01 4.2960000E+00 1.0000000E+00 1.0000000E-01 0.0000000E+00
7.6738000E+01 4.0830000E+00 1.0000000E+00 1.0000000E-01 0.0000000E+00
8.5268000E+01 3.8700000E+00 1.0000000E+00 1.0000000E-01 0.0000000E+00
8.7600000E+01 3.8700000E+00 1.0000000E+00 1.0000000E-01 0.0000000E+00
====== Outputs ====================================================================================
True SumPrint - Generate a summary file listing input options and interpolated properties to “.AD.sum”? (flag)
0 NBlOuts - Number of blade node outputs [0 - 9] (-)
1, 9, 19 BlOutNd - Blade nodes whose values will be output (-)
0 NTwOuts - Number of tower node outputs [0 - 9] (-)
1, 2, 6 TwOutNd - Tower nodes whose values will be output (-)
OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-)
“RtArea”
“B1N3Clrnc, B2N3Clrnc, B3N3Clrnc”
“RtAeroFxh”
“RtAeroFyh”
“RtAeroFzh”
“RtAeroMxh”
“RtAeroMyh”
“RtAeroMzh”
“RtAeroFxi”
“RtAeroFyi”
“RtAeroFzi”
“RtAeroMxi”
“RtAeroMyi”
“RtAeroMzi”
END of input file (the word “END” must appear in the first 3 columns of this last OutList line)
====== Outputs for all blade stations (same ending as above for B1N1… =========================== [optional section]
3 BldNd_BladesOut - Number of blades to output all node information at. Up to number of blades on turbine. (-)
50 BldNd_BlOutNd - Future feature will allow selecting a portion of the nodes to output. Not implemented yet. (-)
OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-)
“Fx”
“Fy”
“VUndy”
“VUndx”
“VUndz”
“TnInd”
“AxInd”
“Alpha”
“Theta”
“Phi”
“Cl”
“Cd”
“Cx”
“Cy”
END (the word “END” must appear in the first 3 columns of this last OutList line in the optional nodal output section)


Dear @Yingxin.Lv,
I am Riad, wind turbine enthusiat.
I have a few comments:
1- The algorithm you implement has no guaranteed convergence. Meaning that, this algorithm can spend hours searching for the axial and tangential induction factors without giving you any solution.
I suggest you use another variant of the BEMT. This variant is proposed by Professor Ning. In a glimpse, this method searches for the inflow angle instead of searching for the axial and tangential induction factors. You can find the paper here:
https://onlinelibrary.wiley.com/doi/abs/10.1002/we.1636
You dont need to read the whole paper unless you are interested in the mathematics behind. Just simply grab the algorithm proposed at the end of the paper.

2- Does your model takes into account blade flexibility ? I mean in your model, the blades are considered rigid or flexible ? Whatever the case, you should have same considerations with OpenFAST.

3- I know that in the basic BEMT, only the rotor is modeled. This means that tower, foundation and blades degrees of freedom should be disabled. Do u agree ?

4- How to force OpenFAST to have a constant rotor speed ? I mean that in all textbooks, when implementing BEMT, constant rotor speed is considered. How did you achieve this in OpenFAST in order to have a fair comparison with your model ? What about the unsteady aerodynamics model in OpenFAST? Is it disabled ?

5- I suggest also to compare the axial and tangential induction factors between your model and OpenFAST.

Hope that helps.

Best Regards,

Riad

1 Like

Dear @ Riad.Elhamoud,
I sincerely appreciate your thoughtful reply. The solution you provided was clear and effective. Thanks again!

  1. I’ve already downloaded the paper you recommended. Thank you for pointing me towards this valuable resource!
  2. 3 .5
    I fully agree with your insights. After disabling the degrees of freedom for the tower and blades in ElastoDyn, I was pleased to find that my results closely approximated those of OpenFAST. I sincerely appreciate your help in guiding me toward this validation.
    
    May I kindly inquire about how I might modify and enhance the BEM algorithm I am using to account for tower and blade flexibility? Are you familiar with any theoretical frameworks or methodologies in this field, or could you suggest any relevant books or papers that address this integration?
    
    Additionally, in OpenFAST, I was wondering if there is an option to enable tower and blade degrees of freedom in ElastoDyn while excluding the influence of their flexibility during aerodynamic force calculations. Your expertise on this would be invaluable.
    
    Thank you again for your generous contributions to my understanding. I would greatly appreciate any further guidance you might provide.
  3. Regarding the method to set the rotational speed as a constant in OpenFAST, you can find the discussion in this link Usage question: fixed pitch & rotor speed · Issue #1035 · OpenFAST/openfast.
    Best Regards,
    yingxin
1 Like

Dear @Yingxin.Lv,

I am glad that my comments helped you !

As i know OpenFAST as a user, OpenFAST always takes into account the flexibilities of the tower and blades when computing aerodynamic forces since OpenFAST performs aero-elastic computation. Maybe @Jason.Jonkman could confirm what i am saying.

Regarding the consideration of blade deformation into BEMT, i think (but i am not quite sure) that the blade deformation is considered in the BEMT through relative wind speed. You know that when computing aerodynamic loads, one should always use the relative wind speed, so i think that through it, one can consider the aero-elastic computation. If what i am saying is right, you should pay attention to the different transformations you should perform since the degrres of freedom of the blade are defined in blade coordinate system denoted (b in FAST_v7 user manual). So, i think sevral transformations should be done since there are a lot of frames.
But i repeat, this is my opinion, i am not quite sure about it.

Thank you for the link you have provided to me. I will certainly go through it.

Hope that helps.

Best Regards,

Riad

Dear @Riad.Elhamoud and @Yingxin.Lv,

I generally agree with this discussion and don’t have much to add. I confirm that OpenFAST accounts for the structural flexiblities in the aeordynamic calculation, including taking the displaced position and relative velocity (wind minus structural velocity) into account in the aerodynamics calculations. For the latter, it is important to take into consideration the coordinate systems used for different calculations, e.g., as documented for AeroDyn here: 4.2.2. Coordinate systems — OpenFAST v4.0.4 documentation.

Best regards,