FAST Linearization

Hello everyone,

I am not totally sure if this is the right place to post this question, but I couldn’t think of any better places.

I have been using the FAST model for some control designs, hence had to linearize the model. The FAST linearzation process consists of two steps, look for the Trim solutions (Operation points) and numerical linearization of the model. So is there a way of doing the second step, linearization of the model, with operating points the user chooses rather than those calculated by FAST?

I don’t know if I have made myself clear enough here. :slight_smile:
Hope to hear replies from you soon.

Thank you.


This is a very appropriate place to pose such a question. I’d like to help you but I don’t know the answer. Jason Jonkman is the man to answer your question, but he will be away from the office until Monday. Maybe he will have time to help you then.


Hi Vicki,

When input parameter CalcStdy is set to “False” in the FAST linearization input file, the FAST model will be linearized about the initial conditions that are specified in the primary, furling, and platform input files. This allows you to bypass the trim solution built within FAST.

The only problem with the solution mentioned above is that the input files only allow you to specify initial conditions for the DOF displacements; the initial conditions for the DOF rates and accelerations are assumed to be zero by the model (the RotSpeed initial condition is the one and only exception to this rule). If you desire to user-specify nonzero operating point rates and/or accelerations (apart from RotSpeed), this will require a minor modification to the source code (and the use of a Fortran compiler).

The source code that defines the linearization operating point for each DOF at each azimuth step is given below and is contained in PROGRAM FAST(), which is available in source file FAST_Prog.f90:

IF ( CalcStdy ) THEN ! Find the periodic / steady-state solution and interpolate to find the operating point values of the DOFs:

CALL CalcSteady

ELSE ! Set the operating point values of the DOFs to initial conditions (except for the generator azimuth DOF, which increment at a constant rate):

DO L = 1,NAzimStep ! Loop through all equally-spaced azimuth steps

  Qop  (:,L) = Q  (:,IC(1))  ! Initialize the operating
  QDop (:,L) = QD (:,IC(1))  ! point values to the
  QD2op(:,L) = QD2(:,IC(1))  ! initial conditions
  Qop (DOF_GeAz,L) = QAzimInit + ( TwoPi/NAzimStep )*( L - 1 )               ! Make the op generator
  IF ( Qop(DOF_GeAz,L) >= TwoPi )  Qop(DOF_GeAz,L) = Qop(DOF_GeAz,L) - TwoPi ! azimuth DOF periodic

ENDDO ! L - Equally-spaced azimuth steps


Here, Qop(I,J) is the operating point displacement of DOF I at azimuth step L at which the model will be linearized about. Similarly, QDop(I,J) and QD2op(I,J) define the operating point rates and accelerations. The DOF indices are defined in MODULE DOFs(), which is available in source file FAST_Mods.f90. For example, if you want to linearize about an operating point where the nacelle yaw rate is 1 rad/s at each azimuth step, you could add the following line of code within the DO…ENDDO loop in the code above:

  QDop(DOF_Yaw,L) = 1.0  

Make sure to be careful with the units. The internal units for displacements, rates, and accelerations contain combinations of meters for length, seconds for time, and radians for angles.

I hope that works for you!

Best regards,

Thanks very much for your replies, they are quite helpful. :slight_smile:

Oops, that was me, just forgot to log in. :blush:

Had we realized you were Horde, we wouldn’t have helped you. We are Alliance here!


For those of you who have no idea what I’m talking about, I’m referring to Vicki’s signature in which there are references to an on-line computer game called World of Warcraft.

Dun Morogh
Eastern Kingdoms

Brrr…looks cold there - I thought you were from Florida?

Dear Jason

i have question, there is trim command in FASTv8 ? if answer is yes how i can use it?
if no how i can find equilibrium operating point ?

my regards

Dear Rana,

As described in the FAST v8 ReadMe file:, the convergence check and optional trim calculation from FAST v7 are not yet available in FAST v8. You can find an equilibrium point manually by using steady inputs (wind, control) and running long enough to ensure that all transient behavior dies out (i.e. look at the time series to verify that the solution is equilibrium at the linearization time(s)).

Best regards,

Dear Mr. Jonkman,

I’ve been working on my masters project which is about wind turbine control in region 2 and region 3. I’ve been following the process mentioned in “Advaanced Control Design for Wind Turbines: Part I” In pag 27 is mentioned how to design a baseline pitch control design for region 3. Pointing out that this report uses FAST7 and i’m working with FAST8 v16, i have several questions:

  • What is the correct process of linearization in FAST8 to get the expression as equation 3.5?
  • How can i obtain the graph shown in page 34?

This questions came up since i’ve been doing some tests and i’m not sure if i’m on the right way.Additionally, i haven’t find information about how to design controls using FAST8.

Best regards

Dear Hernan,

Equation 3.5 is a first-order linear state space model with one state (rotor speed), one control input (collective blade-pitch angle) and one wind disturbance (mean hub-height wind speed). You can get this model directly through a linearization analysis in FAST v8 with a model where only the generator DOF is enabled in ElastoDyn and LinInputs = 1 in the FAST primary input file. In the resulting “A” and “B” matrices, you’ll have to eliminate the azimuth angle as a state, as described in my post dated May 13, 2016 in the following forum topic: In the resulting “B” matrix, you can ignore all inputs except HWindSpeed and BlPitchComC.

Figure 3.10 on page 34 is a graph of the steady-state rotor torque as a function of mean wind speed and blade-pitch angle for a fixed rotor speed. To get this graph, you could run FAST with the torque and pitch controllers disabled (with the generator DOF disabled), and run a series of simulations at different fixed wind speeds and pitch angles at a fixed rotor speed (rated), recording the steady-state solution for rotor torque for each simulation.

I hope that helps.

Dear Jonkman,

Absolutely that helpe me, thanks a lot for your response. On the other hand, by now i’m looking for how to find a correct operating point to perform linearization on. I’m running tests where i have all DOF’s disabled, fix rotor speed of 20.5 rpm meanwhile changing pitch angle and wind velocity, in order to find the combination that yields a generator power closer as possible to rated power. Is this the correct approach?
In the figure shown below you can see the result of one of this test. IN x axis is plotted blade pitch angle and in y axis GenPwr; color lines represents different fixed rotor velocities. The point marked is an operating point. Below, is shown a torque-pitch graph, locating an operating point close to the rated torque.

All this values were obtained in steady-state.

Best regards,

Dear Hernan,

I’m not sure I understand enough about what you want to do to be able to tell you if your approach is correct.

Please note that I would normally not look at ServoDyn outputs GenPwr and GenTq for simulations involving a disabled generator DOF (because the control system and/or generator model may not function properly when the generator speed is fixed). If you are interested in rotor torque, I would look at ElastoDyn output RotTorq.

Best regards,

Dear Jonkman,

I’m sorry if i were not enough clear. In summarize:

-What is the correct approach in order to get a proper operating point for system linearization in region 3?

The graphs shown in last post illustrate the tests i ran playing with pitch, wind velocity and rotor velocity variables, in order to get rated power in steady state. Hope this to be more clear and thanks in advance for your help.

Best regars,

Dear Hernan,

In Region 3 (above rated), normally the generator speed is regulated by the blade-pitch controller and the generator torque is either held constant or set inversely proportional to generator speed so as to maintain constant power. You can find the operating point by finding the blade-pitch angle that gives the correct rotor torque (equals the generator torque at rated speed) at a specific wind speed.

Best regards,

Dear Jonkman,

That information helped me a lot!, thanks a lot for your patience and guidance.

Best regards,

Dear All members,

To get the result of FAST based on the steady state flow condition, I specified wind speed 7.5m/s constant and rotational speed 230 rpm, as well as pitch angles 0 deg and 2 deg for a 2-bladed wind turbine ( pitch angles are fixed during running) CalcStdy is True and AnalMode is 1 but when I’ve considered extracted power vs time I found that the Power-time oscillates like here in attached
I have a question:
what is the source of oscillation and though operating condition is steady why the curve still shows fluctuation? which part of FAST should be modified to cancel this fluctuation and unstable output?
Thank you for your consideration.


Dear Saeedeh,

It’s hard for me to know without knowing more about your simulation set-up, but perhaps you have structural degrees of freedom enabled that are leading to an oscillation in the response?

By the way: the solution is not unstable as the oscillations decay away over time. I’m not really sure what result you are seeking, but if you are interested in steady-state power, you can get that by calculating the mean of the response.

Best regards,

Dear Jason

Thank you so much for your reply. Actually I wanna simulate the small wind turbine in steady state condition and just change the pitch angle. But even for 0 angle for both blades I got oscillating results as I shown you before. I was wondering to know what is the source of this oscillation? I went to check the DOF of the system and with changing the DOF of the system I still got the same result. In spite that the result is going to be smooth after a while, the initial oscillation source is my current question. My Primary.fst file is here in attached. I would be thankful if you let me know about what you think about it. If you have more note to make it clear please let me know.