Error in FAST, working in ADAMS

Hello,

I am currently having another problem with FAST. I have modeled a 3MW scale turbine. I can use FAST to build the ADAMS model and simulate it in ADAMS without problems, but when I try to simulate it in FAST, i get the following error right at the beginning:

WARNING: Small angle assumption violated in SUBROUTINE SmllRotTrans() due to a large tower deflection. The solution may be inaccurate. Simulation continuing, but future warnings will be suppressed. [...] Error: FF wind array was exhausted at 3.00000E-02 seconds (trying to access data at NaN seconds). Error getting velocity in AeroDyn/AD_WindVelocityWithDisturbance() Aborting FAST.

Sometimes, the error also refers to large blade deflection instead of tower. If I reduce the timestep to 0.001, I even get some text lines in the output, I have attached the file. As you can see, all the force and moment values are exceedingly large (+/-1E18).

Any Ideas?
results.txt (11.2 KB)

Hi, Luiz.daRocha

Recently I have met similar problem to yours. My FAST model parameters were given by customer(translated from Flex5), it contains all the Mass/length and stiffness data. The ADAMS model runs fine but FAST gives every result NaN. Finally I found that the mode shapes in FAST input file are wrong. After I correct it, the FAST model runs fine. So I suggest you to run Modes/BModes to re-calculate the blade/tower mode coefficients and compare them with your current model.

Dear Luiz,

The errors you seeing are typically caused—not by a problem with the wind input file—but by a numerical instability in the FAST or AeroDyn calculations. Warnings regarding a “small angle approximation violation,” warnings regarding “supersonic blades,” a simulation crash, or very large deflections that occur in the time series near the start of a simulation are good signs of a numerical instability.

The coupled FAST with AeroDyn code uses two time steps. The time step in FAST, DT, controls the integration of the structural equations of motion. The time step in AeroDyn, DTAero, controls the integration of the aerodynamic equations. A good rule of thumb for choosing the AeroDyn time step is to have at least 200 time steps per revolution; for variable-speed turbines, I’d use the fastest likely rotor speed for this calculation. When choosing the FAST time step, a good rule of thumb is that DT should be set less than or equal to one over ten times the highest full system natural frequency. That is, in equation form: DT <= 1 / ( 10 * ). The full system natural frequencies can be found by running a FAST linearization analysis (AnalMode = 2) about the initial conditions. See the Linearization chapter of the FAST User’s Guide for more information.

Best regards,

Dear Jason,

I´ve read all the forum topics about the “small angle assumption”-warning and the supersonic blades. I am simulating the Onshore5MW reference wind turbine including Pitch control in simulink (FAST V7/Simulink interface). The model works properly for wind speeds of 2 m/s, 2.4 m/s, 2 m/s, 3 m/s, 4 m/s, 5.9 m/s, 7.7 m/s, 9.6 m/s, 14.7 m/s, 17.9 m/s, 21.2 m/s, 24.0 m/s and 25 m/s. I get very similar results to my calculations with the FAST Executive. The only wind speed the model is not working properly for, is ts a wind speed of 11.4 m/s. The wind data are all calculated the same way via TurbSim. Using FAST Executive there is not problem with a wind speed of 11.4 m/s.

This is the warning message:

  Small angle assumption violated in SUBROUTINE SmllRotTrans() due to a large blade
  deflection. The solution may be inaccurate. Simulation continuing, but future warnings will be
  suppressed.

This is a part of my primary.fst settings:

This is a diagramm of TTDspFA (including drop), BladePitch, GenSpeed, RotSpeed:

Wind_V114.PNG

I tried reducing the Time-Step DT, adapting the initial blade pitch, initial rotorspeed, final plade bitch and so on. Is there any other option to solve the problem?

Thank you very much in advance!

Dear David,

If my understanding is correct, you are you comparing the results for the NREL 5-MW baseline turbine from the:
a) FAST v7 executable with the baseline controller DLL and
b) FAST v7 coupled to Simulink with a Simulink implementation of the baseline controller,
and the results from (a) and (b) match for turbulent winds at all but rated wind speed. Is my understanding correct? If so, I don’t know anything about your Simulink implementation of the baseline controller, but I would expect that there are implementation differences in the transition region between below (region 2) and above rated (region 3) operation.

Best regards,

Hello Jason,

thanks for your quick response! yes, your understanding of my question is correct. The model I am using was developed by Dr.Namik from Auckland University. I know, you are not familiar with this model, that´s why here are a three screenshots of the Pitch Controller:

Gain Schedules PI.PNG


Embedded MATLAB function.PNG

I am getting what you are trying to say, but I am not quite sure where in the model I can change that… Now that u have the screenshots, would it be possible for you to specify your answer?

Thank you very much!

David

Dear David,

I don’t have the time to examine your model in great detail, but I some differences are immediately obvious:

  • I don’t see that the integral term in the Simulink model is saturated.
  • The baseline controller has the pitch limit saturation before the pitch-rate limit saturation; the Simulink model has the opposite.

I can’t comment on the torque controller, as that has not been shown.

I suggest that you carefully compare the controller logic in the baseline DISCON.dll to your Simulink implementation to identify/address the differences.

Best regards,

Hello Jason,

To see which controller logic are implemented in the DISCON.dll I need to check the source files, right? (BladedDLLInterface.f90, UserSubs_forBladedDLL.f90 and UserVSCont_KP_forBladedDLL.f90). Cause the DISCON.dll itself is obviously not readable. If so, I will try doing that.

I know you dont have the time to examine my model in detail. Nevertheless, I added two screenshots of the torque controller (just in case you have a spare minute! As your understanding of the controller logic is way better than mine, maybe some differences to the controller logic in the baseline DISCON.dd are immediately obvious to you, as it was the case with the pitch controller).


Thank your very much for your help and patience with me!

Best regards!

David

Dear David,

The source code of the DISCON.dll is provided, along with the DISCON.dll in the FAST v8 archive. It is also available in Appendix C of the NREL 5-MW specifications report. The source file BladedDLLInterface.f90 is just an interface between FAST and the DISCON.dll, not including control logic.

Again, I only looked briefly at your model, but did notice a couple oddities:

  • The transitional generator speed between Regions 2.5 and 3 is 1161.963 rpm, not 1173.7 rpm, the latter of which is the rated speed. The transitional generator speed between Regions 2 and Regions 2.5 is lower.
  • The baseline controller has the torque limit saturation before the torque-rate limit saturation; the Simulink model has the opposite.

I hope that helps.

Best regards,

Hello Jason,

thank you very much. With your help I was able to make the program run properly for the rated wind speed. Nevertheless the results of the two simulations (Simulink and fast executive) are not exactly the same yet. For the saturation of the Integral I found this description in the documention about the reference wind turbine:

“We set the blade-pitch rate limit to 8°/s in absolute value. This is speculated to be the bladepitch
rate limit of conventional 5-MW machines based on General Electric (GE) Wind’s longblade
test program. We also set the minimum and maximum blade-pitch settings to 0° and 90°,
respectively. The lower limit is the set blade pitch for maximizing power in Region 2, as
described in Section 7.2. The upper limit is very close to the fully feathered blade pitch for
neutral torque. We saturated the integral term in the PI controller between these limits to ensure
a fast response in the transitions between Regions 2 and 3”

If my understanding of this is correct, the upper limit of the integral is 90° (pi/2) and the lower limit of the integral is 0! Then it looks like this:

Is this correct? Or do I need to enter 90° istead of pi/2. Usually this is a very trivial question, because the Simulink block left of the integral converts deg to rad. So I should enter pi/2 as upper limit. But I get better results if I enter 90° instead of pi/2…

And a short second question:

You said:

“The transitional generator speed between Regions 2.5 and 3 is 1161.963 rpm, not 1173.7 rpm, the latter of which is the rated speed. The
transitional generator speed between Regions 2 and Regions 2.5 is lower.”

But if I see this correctly, the settings in the photo I posted matching your description, don’t they?

Thanks,

David

Dear David,

If the pitch angle is in rad, you should use pi/2 and 0 in place of 90 and 0. However, the lower and upper bounds of the saturation implemented in the baseline controller also consider scaling with the inverse of the instantaneous (gain-scheduled) integral gain. See the controller source code for the details.

Your source code applies Region 2.5 above 1161.963 rpm and Region 3 above 1173.7 rpm, which is not correct. Region 3 should be applied above 1161.963 rpm and Region 2.5 should be applied above a lower speed. Again, see the controller source code for the details.

Best regards,

Hello Jason,

I´ve had a look in the DLL and the documentation about the ref-wind turbine again and found the following:

text.PNG

GenTrq.PNG

I dont find any other values that the ones mentioned before for region 2.5.

The equation for region 2.5 “GenTrq = VS_Slope25*( GenSpeedF - VS_SySp )”. VS_Slope25 and VS_SySp I can calculate by using the values defined earlier in the DLL. The filtered Genspeed I get from the model. But with this equation I dont calculate the generator speed I need for specifying the regions…

Thank you very much and best regards,

David

Dear David,

I haven’t calculated the transition speed between Regions 2 and 2.5, which is why I haven’t reported them. Region 2.5 is calculated in the “ELSE” branch in the DISCON.f90 source file, which is why that transition speed is not needed. But with a bit of math, you could calculate the speed if you wanted it.

Best regards,

Dear Jason,

I will be able to calculate it myself I think. I understand what you mean when your say

“The transitional generator speed between Regions 2.5 and 3 is 1161.963 rpm, not 1173.7 rpm, the latter of which is the rated speed. The transitional
generator speed between Regions 2 and Regions 2.5 is lower.”

But when I look into the 5MW reference wind turbine documentation I find this table:

table.PNG

In my understanding the table says: Between 2.5 and 3 the transitional generator speed is 1161.963rpm. But you say that´s the value for region 3 and the value for region 2.5 - 3 is lower. Sorry to aks this again, but I really need to make sure I understand you correctly? How is it correct then? Am I maybe misunderstanding you or the documentation?

Thanks a lot and sorry again,

David

Dear David,

To be clear: There are 5 torque-control Regions implemented in the baseline controller for the NREL 5-MW turbine

  1. Region 1
  2. Region 1.5
  3. Region 2
  4. Region 2.5
  5. Region 3

The table you posted identifies the speeds where the transition happens between Regions 1 and 1.5, between Regions 1.5 and 2, and between Regions 2.5 and 3. The table does not identify the speed where the transition happens between Regions 2 and 2.5.

I hope that is clear.

Best regards,

Hello Jason,

I think I finally got your point. I calculated the speed where the transition happens between Regions 2 and 2.5 using the follwing equations from FAST_IO.f90 in combination with Discon.dll:

    VS_TrGnSp = ( VS_Slope - SQRT( VS_Slope*( VS_Slope - 4.0*VS_Rgn2K*VS_SySp ) ) )/( 2.0*VS_Rgn2K ) = 119.112
VS_TrGnSp = (3895.673  - SQRT( 3895.673*(3895.673  - 4.0*2.332287*110.6186) ) )/( 2.0*2.332287 ) = 119.112 rad/s
VS_TrGnSp = (Nm/(rad/s)- SQRT(Nm/(rad/s)*(Nm/(rad/s)-4.0*Nm/(rad/s)^2*(rad/s))))/(Nm/(rad/s)^2  = rad/s 
VS_TrGnSP = 119.112 (rad/s)* 60(s/m) /(2*pi) = [b]1137.44 rpm[/b]

VS_Slope  = VS_RtTq  /( VS_RtGnSp - VS_SySp ) = 3895.673 N-m/(rad/s)
VS_RtTq   = 43.09355 kNm = 43093.55
VS_RtGnSp = 121.6805 rad/s
VS_SySp   = VS_RtGnSp/( 1.0 +  0.01*VS_SlPc ) = 110.6186 rad/s
VS_SlPc   = 10.0 %
VS_Rgn2K  = 2.332287 N-m/(rad/s)^2

I think that´s exactly what you mean, isn´t it? Just to make sure I implemented the upper and lower limits for the regions in the torque controller correctly, here is another screenshot:

Torque.PNG

Is this right?

Thanks again for your patience and help! Best regards,

David

Dear David,

Yes, that looks correct.

Best regards,