Tower-blade tip clearance!

Dear all,

I am simulating design load case 2.3 based on IEC 61400-1 (which caters to finding loads pertaining to potentially significant Extreme Operating Gust, EOG, while turbine is producing power power and comes across a grid failure) for NREL 5 MW reference machine using FAST. I am using the control file DISCON.dll (prepared by Jason Jonkman) for the same.

From my calculation, the perpendicular distance from yaw axis to blade tip for this machine is ‘7.738 m’ (based on overhang of 5.019 m, tilt of 5°, precone of 2.5° and rotor radius of 63 m). Here, I find some results which I fail to understand:

My queries are:

  1. Why does the pitch system respond in a way its depicted here (as I see there is some kind of lag in its actuation time)?

  2. Why does tower clearance give so high values as I assumed it should be less than 7.738 m during the gust (I understand some values are so high as they are calculated from blade tip to yaw bearing when blade tip is above yaw bearing, but still…)? There was no warning of tower strike during the run!!

  3. I thought tower clearance would more or less show opposite trend than out-of-plane deflection (OoPDefl1) when blade tip is below yaw bearing. Shouldn’t it be the case??

Is there something I am missing fundamentally especially with regards to tower clearance or are my calculations erroneous? Would appreciate, if you can provide any kind of insight to this?

Thanks a lot,
Neelabh

PS: I used a time of 30 s to eliminate computational transients and at 35.2 s, generator is switched off to simulate grid loss!

Dear Neelabh,

  1. I don’t know anything about the controller to answer this question.
  2. The clearance gets large when the blade points up because it is the distance from the tip to some point (not sure exactly where - check the manual) where the blade would hit the tower when the blade points down. You should only look at the tower clearance when the blade azimuth puts it near the tower.
  3. Maybe 2) answers this?

When we run MExtremes to try to see what is the closest the blade gets to the tower, we set up some calculated channels to see if we got too close to the tower:

"Azimuth3" "(deg)" "mod(240 +FileInfo.Time(:,$Azimuth$ ),360)" "Azimuth2" "(deg)" "mod(120 +FileInfo.Time(:,$Azimuth$ ),360)" "TipClr1" "(m)" "filter_using_bounds(FileInfo.Time(:,$TipClrnc1$ ),FileInfo.Time(:,$Azimuth$ ),[175 185],NaN)-2.95-4.5" "TipClr2" "(m)" "filter_using_bounds(FileInfo.Time(:,$TipClrnc2$ ),FileInfo.Time(:,$Azimuth2$ ),[175 185],NaN)-2.95-4.5" "TipClr3" "(m)" "filter_using_bounds(FileInfo.Time(:,$TipClrnc3$ ),FileInfo.Time(:,$Azimuth3$ ),[175 185],NaN)-2.95-4.5"
It sets the clearance to NaN if the azimuth is not within 5 deg of straight down. If I remember correctly, the 2.95 is the minimum distance the standard allowed the tip to get to the tower circumference (a fraction of the undeflected distance). The tower radius at the clearance location was 4.5m. This made it so that a negative value for the minimum would flag a standards violation. You could leave out the 2.95 if you just want to know how close it gets to the tower circumference. A negative value would mean a tower strike, which would be sad…

Dear Neelabh,

To add to the answers Marshall’s already provided:

  1. The operational pitch-control system provided with the NREL 5-MW turbine has the goal of regulating generator speed to rated speed. The pitch controller only uses the generator speed error (the difference between the actual and rated generator speeds) as input; the pitch controller doesn’t know anything about the wind speed, so, there is naturally a lag relative to the gust. More information on the control system for the NREL 5-MW turbine is given in the specifications report: nrel.gov/docs/fy09osti/38060.pdf. Regardless, please note that it is not common for the operational pitch controller to remain active when the generator is taken offline; instead, the safety system will likely pitch the blades to feather to shut down the turbine.

2 and 3) I think you calculated the blade tip-to-tower clearance of the undeflected NREL 5-MW turbine incorrectly. Your overhang, shaft tilt, precone, and blade radius values are correct, but the precone and shaft tilt angles sum, such that the clearance (not including tower radius) equals: (5.019 m)*COS(5 deg) + (63 m)*SIN(5+2.5 deg) = 13.223 m. Your results show that blade 1 clearly drops below this value.

I hope that helps.

Best regards,

Dear Marshall and Jason,

Thanks a lot for your quick responses.

Marshall: Although, I was not able to run MExtremes, but with your answer I was able to filter out clearances for a specific ‘Azimuth’ after receiving the FAST output from *.out file. Meanwhile, could you please refer me to the standard that sets values for tower-tip clearance values?

Jason: You are correct, I made a mistake with my tower clearance calculation as I forgot to include the distance advantage, we have, due to shaft tilt. And that’s a lot. Now the plot seems to make more sense.
Secondly, could you please tell me if there is a provision in FAST where we can kick in Safety system after generator trips? And if not, can the loads generated (specifically, the forces/moments on rotor blades) after grid loss (generator power =0) be relied upon, based on the fact we still have pitch control ON?

Thanks again,
Neelabh

Dear Neelabh,

Keeping a clearance between the blade and tower is discussed in Section 7.6.5 of the 3rd edition of the IEC 61400-1 wind turbine design standard.

FAST is set-up so that users can implement their own logic for the turbine control, safety, and protection functions of a wind turbine. If you do not wish to implement your own logic, you can use the simple control functions to mimic basic behavior (e.g., you could use the override pitch maneuvers to mimic the safety system shutting down the turbine by pitching the blades to feather). Obviously, the output from FAST would not be reasonable if the control actions are not close to the behaviour of a real turbine.

Best regards,

Thanks Jason, I will incorporate the safety system as you mentioned.

Meanwhile, I forgot to add, for Extreme operating gust @25 m/s (hub height velocity), the tower clearance value is in range of 14 m-18 m for azimuth of 175 -185 degrees for blade 1 (can be seen in the plot above). And this is before the generator is turned off. So I have a feeling there is a tower strike for this scenario (even though I didn’t receive any warnings) ??

Best Regards,
Neelabh

Neelabh,

In Section 6.2.4.1 of Germanischer Lloyd’s “Guideline for the Certification of Wind Turbines Edition 2003 with Suppl 2004,” it states that: “If the deformation analysis is performed by dynamic and aeroelastic means, at no time may the clearance be less than the minimum of 30% for the rotor turning.” By 30%, they mean 30% of the minimum distance between the rotor tip when undeflected and the circumference of the tower.

Marshall

Dear Neelabh,

If the tower clearance is 14 - 18 m, why do you expect a tower strike? The blade will only strike the tower if the tower clearance output falls below the tower radius (the tower clearance output does not include the effect of the tower radius). Regardless, FAST will not issue a warning even if an actual tower strike occurs (this is not something that that FAST checks for – it is up to you as the user to track the tower clearance output and check for possible tower strikes).

Best regards,

Ah, okay then. I was under impression FAST issues a warning regarding this. Thanks for all the clarifications. It really helps!

Best Regards,
neelabh

Hi Marshall!
I’m running an extreme load analysis, and aiming to check the tower-blade tip clearence, I took the code that you posted here

Now I get these error messages, and I’m not sure what to do:

I think the problem is there, because earlier, without those lines, MExtremes was running just fine.

Could you aid me in what to do?

I leave the .mext file used:

-----  MExtremes v1.00.00g-mlb Input File  -------------------------------------------
Test #16 (-Names, +Chans, +CC, +WrEEvtsTxt, -WrEEvtsXLS, +Multi).
-----  Job Options  ------------------------------------------------------------
false              EchoInp           Echo input to <rootname>.echo as this file is being read.
true             StrNames          Use channel names following a "$" instead of numbers when specifying channels in this input file.
"%12.4e"          RealFmt           Format for outputting floating-point values in the plain-text files.
-----  Input-Data Layout  ------------------------------------------------------
5                 TitleLine         The row with the file title on it (zero if no title is available).
0                 NamesLine         The row with the channel names on it (zero if no names are available or are specified below).
0                 UnitsLine         The row with the channel units on it (zero if no units are available or are specified below).
9                 FirstDataLine     The first row of data.
144                NumChans         The number of channels in each input file.
ChanTitle    ChanUnits    Scale  Offset	PSFtype     NumCols rows of data follow.  Title and units strings must be 10 characters or less.
"Time"       "(sec)"       1.0    0.0	  0
"WindVxi"    "(m/sec)"     1.0    0.0     0
"WindVyi"    "(m/sec)"     1.0    0.0     0
"WindVzi"    "(m/sec)"     1.0    0.0     0
"WaveElev"   "(m)"         1.0    0.0     0
"Wave1Vxi"   "(m/sec)"     1.0    0.0     0
"Wave1Vyi"   "(m/sec)"     1.0    0.0     0
"Wave1Vzi"   "(m/sec)"     1.0    0.0     0
"Wave1Axi"   "(m/s^2)"     1.0    0.0     0
"Wave1Ayi"   "(m/s^2)"     1.0    0.0     0
"Wave1Azi"   "(m/s^2)"     1.0    0.0     0
"GenPwr"     "(kW)"        1.0    0.0     0
"GenTq"      "(kN·m)"      1.0    0.0     0
"HSSBrTq"    "(kN·m)"      1.0    0.0     0
"BldPitch1"  "(deg)"       1.0    0.0     0
"BldPitch2"  "(deg)"       1.0    0.0     0
"BldPitch3"  "(deg)"       1.0    0.0     0
"Azimuth"    "(deg)"       1.0    0.0     0
"RotSpeed"   "(rpm)"       1.0    0.0     0
"GenSpeed"   "(rpm)"       1.0    0.0     0
"NacYaw"     "(deg)"       1.0    0.0     0
"NacYawErr"  "(deg)"       1.0    0.0     0
"OoPDefl1"   "(m)"         1.0    0.0     0
"IPDefl1"    "(m)"         1.0    0.0     0
"TwstDefl1"  "(deg)"       1.0    0.0     0
"OoPDefl2"   "(m)"         1.0    0.0     0
"IPDefl2"    "(m)"         1.0    0.0     0
"TwstDefl2"  "(deg)"       1.0    0.0     0
"OoPDefl3"   "(m)"         1.0    0.0     0
"IPDefl3"    "(m)"         1.0    0.0     0
"TwstDefl3"  "(deg)"       1.0    0.0     0
"TwrClrnc1"  "(m)"         1.0    0.0     0
"TwrClrnc2"  "(m)"         1.0    0.0     0
"TwrClrnc3"  "(m)"         1.0    0.0     0
"NcIMUTAxs"  "(m/s^2)"     1.0    0.0     0
"NcIMUTAys"  "(m/s^2)"     1.0    0.0     0
"NcIMUTAzs"  "(m/s^2)"     1.0    0.0     0
"TTDspFA"    "(m)"         1.0    0.0     0
"TTDspSS"    "(m)"         1.0    0.0     0
"TTDspTwst"  "(m)"         1.0    0.0     0
"PtfmSurge"  "(m)"         1.0    0.0     0
"PtfmSway"   "(m)"         1.0    0.0     0
"PtfmHeave"  "(m)"         1.0    0.0     0
"PtfmRoll"   "(deg)"       1.0    0.0     0
"PtfmPitch"  "(deg)"       1.0    0.0     0
"PtfmYaw"    "(deg)"       1.0    0.0     0
"PtfmTAxt"   "(m/s^2)"     1.0    0.0     0
"PtfmTAyt"   "(m/s^2)"     1.0    0.0     0
"PtfmTAzt"   "(m/s^2)"     1.0    0.0     0
"RootFxc1"   "(kN)"        1.0    0.0     0
"RootFyc1"   "(kN)"        1.0    0.0     0
"RootFzc1"   "(kN)"        1.0    0.0     0
"RootMxc1"   "(kN·m)"      1.0    0.0     0
"RootMyc1"   "(kN·m)"      1.0    0.0     0
"RootMzc1"   "(kN·m)"      1.0    0.0     0
"RootFxc2"   "(kN)"        1.0    0.0     0
"RootFyc2"   "(kN)"        1.0    0.0     0
"RootFzc2"   "(kN)"        1.0    0.0     0
"RootMxc2"   "(kN·m)"      1.0    0.0     0
"RootMyc2"   "(kN·m)"      1.0    0.0     0
"RootMzc2"   "(kN·m)"      1.0    0.0     0
"RootFxc3"   "(kN)"        1.0    0.0     0
"RootFyc3"   "(kN)"        1.0    0.0     0
"RootFzc3"   "(kN)"        1.0    0.0     0
"RootMxc3"   "(kN·m)"      1.0    0.0     0
"RootMyc3"   "(kN·m)"      1.0    0.0     0
"RootMzc3"   "(kN·m)"      1.0    0.0     0
"Spn1MLxb1"  "(kN·m)"      1.0    0.0     0
"Spn1MLyb1"  "(kN·m)"      1.0    0.0     0
"Spn1MLzb1"  "(kN·m)"      1.0    0.0     0
"Spn1MLxb2"  "(kN·m)"      1.0    0.0     0
"Spn1MLyb2"  "(kN·m)"      1.0    0.0     0
"Spn1MLzb2"  "(kN·m)"      1.0    0.0     0
"Spn1MLxb3"  "(kN·m)"      1.0    0.0     0
"Spn1MLyb3"  "(kN·m)"      1.0    0.0     0
"Spn1MLzb3"  "(kN·m)"      1.0    0.0     0
"RotThrust"  "(kN)"        1.0    0.0     0
"LSSGagFya"  "(kN)"        1.0    0.0     0
"LSSGagFza"  "(kN)"        1.0    0.0     0
"RotTorq"    "(kN·m)"      1.0    0.0     0
"LSSGagMya"  "(kN·m)"      1.0    0.0     0
"LSSGagMza"  "(kN·m)"      1.0    0.0     0
"YawBrFxp"   "(kN)"        1.0    0.0     0
"YawBrFyp"   "(kN)"        1.0    0.0     0
"YawBrFzp"   "(kN)"        1.0    0.0     0
"YawBrMxp"   "(kN·m)"      1.0    0.0     0
"YawBrMyp"   "(kN·m)"      1.0    0.0     0
"YawBrMzp"   "(kN·m)"      1.0    0.0     0
"TwrBsFxt"   "(kN)"        1.0    0.0     0
"TwrBsFyt"   "(kN)"        1.0    0.0     0
"TwrBsFzt"   "(kN)"        1.0    0.0     0
"TwrBsMxt"   "(kN·m)"      1.0    0.0     0
"TwrBsMyt"   "(kN·m)"      1.0    0.0     0
"TwrBsMzt"   "(kN·m)"      1.0    0.0     0
"TwHt1MLxt"  "(kN·m)"      1.0    0.0     0
"TwHt1MLyt"  "(kN·m)"      1.0    0.0     0
"TwHt1MLzt"  "(kN·m)"      1.0    0.0     0
"Fair1Ten"   "(kN)"        1.0    0.0     0
"Fair1Ang"   "(deg)"       1.0    0.0     0
"Anch1Ten"   "(kN)"        1.0    0.0     0
"Anch1Ang"   "(deg)"       1.0    0.0     0
"Fair2Ten"   "(kN)"        1.0    0.0     0
"Fair2Ang"   "(deg)"       1.0    0.0     0
"Anch2Ten"   "(kN)"        1.0    0.0     0
"Anch2Ang"   "(deg)"       1.0    0.0     0
"Fair3Ten"   "(kN)"        1.0    0.0     0
"Fair3Ang"   "(deg)"       1.0    0.0     0
"Anch3Ten"   "(kN)"        1.0    0.0     0
"Anch3Ang"   "(deg)"       1.0    0.0     0
"Fair4Ten"   "(kN)"        1.0    0.0     0
"Fair4Ang"   "(deg)"       1.0    0.0     0
"Anch4Ten"   "(kN)"        1.0    0.0     0
"Anch4Ang"   "(deg)"       1.0    0.0     0
"Fair5Ten"   "(kN)"        1.0    0.0     0
"Fair5Ang"   "(deg)"       1.0    0.0     0
"Anch5Ten"   "(kN)"        1.0    0.0     0
"Anch5Ang"   "(deg)"       1.0    0.0     0
"Fair6Ten"   "(kN)"        1.0    0.0     0
"Fair6Ang"   "(deg)"       1.0    0.0     0
"Anch6Ten"   "(kN)"        1.0    0.0     0
"Anch6Ang"   "(deg)"       1.0    0.0     0
"Fair7Ten"   "(kN)"        1.0    0.0     0
"Fair7Ang"   "(deg)"       1.0    0.0     0
"Anch7Ten"   "(kN)"        1.0    0.0     0
"Anch7Ang"   "(deg)"       1.0    0.0     0
"Fair8Ten"   "(kN)"        1.0    0.0     0
"Fair8Ang"   "(deg)"       1.0    0.0     0
"Anch8Ten"   "(kN)"        1.0    0.0     0
"Anch8Ang"   "(deg)"       1.0    0.0     0
"TipSpdRat"  "(-)"         1.0    0.0     0
"RotCp"      "(-)"         1.0    0.0     0
"RotCt"      "(-)"         1.0    0.0     0
"RotCq"      "(-)"         1.0    0.0     0
"HorWindV"   "(m/s)"       1.0    0.0     0
"HSShftTq"   "(kN·m)"      1.0    0.0     0
"RootMxb1"   "(kN·m)"      1.0    0.0     0
"RootMyb1"   "(kN·m)"      1.0    0.0     0
"RootMzb1"   "(kN·m)"      1.0    0.0     0
"RootMxb2"   "(kN·m)"      1.0    0.0     0
"RootMyb2"   "(kN·m)"      1.0    0.0     0
"RootMzb2"   "(kN·m)"      1.0    0.0     0
"RootMxb3"   "(kN·m)"      1.0    0.0     0
"RootMyb3"   "(kN·m)"      1.0    0.0     0
"RootMzb3"   "(kN·m)"      1.0    0.0     0
-----  Calculated Channels  ----------------------------------------------------
5                 NumCChan          The number calculated channels to generate.
3454543        Seed              The integer seed for the random number generator (-2,147,483,648 to 2,147,483,647)
Col_Title   Units    Equation       Put each field in quotes.  Titles and units are limited to 10 characters.  NumCChan rows of data follow.
 "Azimuth3"  "(deg)"   "mod(240 +FileInfo.Time(:,$Azimuth$ ),360)"
 "Azimuth2"  "(deg)"   "mod(120 +FileInfo.Time(:,$Azimuth$ ),360)"
 "TipClr1"   "(m)"     "filter_using_bounds(FileInfo.Time(:,$TipClrnc1$ ),FileInfo.Time(:,$Azimuth$  ),[175 185],NaN)-2.95-4.5"
 "TipClr2"   "(m)"     "filter_using_bounds(FileInfo.Time(:,$TipClrnc2$ ),FileInfo.Time(:,$Azimuth2$ ),[175 185],NaN)-2.95-4.5"
 "TipClr3"   "(m)"     "filter_using_bounds(FileInfo.Time(:,$TipClrnc3$ ),FileInfo.Time(:,$Azimuth3$ ),[175 185],NaN)-2.95-4.5"
-----  Extreme Events  ---------------------------------------------------------
3                 NumEETables       Number of tables of extreme events.  Must be > 0.
0                 NumEECharts       Number of charts of extreme events.
true             FindPeaks         Should we use the peak finder?
1                 TimeChan          The time step channel (used for computing average extreme values, 0 for none)                 WSChan           The primary wind-speed channel (used for mean wind speed and turbulence intensity, 0 for none)
2                 WSChan            The primary wind-speed channel (used for mean wind speed and turbulence intensity, 0 for none)
3                 WSmin             Minimum wind speed value to consider when binning.  (Events associated with wind speeds less than WSmin will be ignored)
75                WSmax             Maximum  wind speed value to consider when binning. (Events associated with wind speeds greater than WSmax will be ignored)
2                 WSMaxBinSize      Maximum width of a wind-speed bin.
false              ScatterPlots      Create scatter plots for each channel that appears in an Extreme Event table.  The x-axis is the wind speed (the windspeed bin value will be used for DLCs having BinMod > 0).
1                 PlotFormat        Format for saving any of the requested ScatterPlots or Charts. [ 1 = PNG, 2 = MatLab figure ]
true              WrEEvtsTxt        Write the extreme-event tables to a plain-text file?
true              WrEEvtsXLS        Write the extreme-event tables to an Excel file?
"xlsx"            XLStype           Type of Excel file ("xls"=>2003, "xlsx"=>2007).
7                 ThemeColor        Excel color theme to use.  In Excel 2007, it is the column of the color chart (1-10).
0.0               HeadTnS           Tint and shade of the header area (-1.0 to 1.0), with -1 being darkest and 1 lightest.
0.5               DiagTnS           Tint and shade of the diagonal (-1.0 to 1.0), with -1 being darkest and 1 lightest.
TableName           #Chans    ChanList                #InfoChans     InfoChanList    (NumEETables rows of data follow)
"Root Deflections"      9 $RootMxc1$ $RootMyc1$ $RootMzc1$ $RootMxc2$ $RootMyc2$ $RootMzc2$ $RootMxc3$ $RootMyc3$ $RootMzc3$ 3 1 2 5
"Tower"                 3 $TwrBsMxt$ $TwrBsMyt$ $HSShftTq$ 3 1 2 5
"Extremes"              4 $RotSpeed$ $TipClr1$ $TipClr2$ $TipClr3$ 3 1 2 5
ChartName         YLabel                                  Type       #Chans        ChanList
-----  Input Files  ------------------------------------------------------------
2		  FileFormat        Flag determining input file format.  1 = ascii, 2 = binary
1                 NumDLCs           The number of Design Load Cases
1  1.1   1.3   1.5   1.7  0  DLC         (NumDLCfiles, PSF1, PSF2, PSF3, PSF4, BinModel, DLC_Name)
"DLC_1_2_10ms_seed1.outb"
==EOF==                             DO NOT REMOVE OR CHANGE.  MUST COME JUST AFTER LAST LINE OF VALID INPUT.

Thank you very much for your time!
Bernabé

Dear Bernabé,

Marshall has retired from NREL since posting that response. I’ve not heard of “filter_using_bounds”, but it appears to be a user-written function that allows the value of the first argument (TipClrnc*) to be replaced with the fourth argument (NaN) if the second argument (Azimuth*) is outside the range of the third argument ([175 185] degrees, i.e., when the blade is near the tower). You could create this function yourself if you wish to filter the tip clearance output the same way within MExtremes.

Best regards,

Dear Jason, thank you very much for your response.
Of course I will create the function myself.

I didn’t know Marshall has retired, this thread has some years now.
Thank you for your work!
Best regards,

Bernabé