FAST: Model linearization

Hello everyone,

I try to get a linearized model of the NREL offshore baseline 5 MW wind turbine with FAST in order to evaluate the influence of the turbine on a platform.

I use the files in

I set ADAMSPrep to 1, AnalMode to 2, PCMode to 0, StallMod to STEADY, PtfmModel to 3. I use a constant wind file. In the platform input file I enable all DOFs, consider no mass, no inertia and no loading for the platform.

I use the second order linearization process about initial conditions and obtain 2222 mass, damping and stiffness matrices. I output the linearized model at different azimuth steps and then average the matrices. Finally I keep the 66 mass, damping and stiffness matrices for the DOFs of the Platform to represent the influence of the turbine on the platform.

I did this calculation for different operating pitch angles, (operating roll and yaw equal 0). I observe a strong variation of roll-pitch, pitch-roll, pitch-yaw, yaw-pitch and roll-roll stiffness with operating pitch angle.

I don’t understand this variation. Is there any explanation or maybe is there something wrong in my calculation?

Thank you in advance.

Best regards,

Ph.D Candidate
Laboratoire de Mécanique des Fluides
Ecole Centrale Nantes
Nantes, France

Dear Maxime,

You must be careful how you interpret the stiffness matrix output by FAST linear if the solution is not in static equilibrium before linearizing. In your example you describe no reaction forces between the tower and ground (“no loading for the platform”), so, clearly the model is not in static equilibrium (if you ran a time-series simulation, the turbine would simply fall due to gravity and perhaps move in other ways due to other possible [aerodynamic] loads acting).

From the FAST User’s Guide, the stiffness matrix is K = [ ( dM/dq )*qdd + df/dq ] evaluated at the linearization point (see the guide for nomenclature). When model is not in static equilibrium, the “effective stiffness” from mass and acceleration, ( dM/dq )*qdd, can be significant. Without further thought, I cannot explain why the stiffness terms you refer to are most effected by operating pitch angle, but I’m quite sure that its the “effective stiffness” that is leading to the unexpected behavior.

I hope that helps.

Best regards,

Dear Jason,

Thank you for your answer.

I understand the issue with the “effective stiffness” due to acceleration in ( dM/dq )*qdd. Without loading on the platform, the value of qdd is not correct. The result is that the stiffness matrix output by FAST is not correct.

I wonder how to get correct matrix stiffness, like in the paper you cosigned with E.N. Wayman (2006), available at
Could you explain me the process?

I think I should apply hydrostatic loads, mooring loads and wave radiation loads in Platform loads to get a correct linearization with FAST.

With best regards,

Ph.D candidate
Laboratoire de Mécanique des Fluides
Ecole Centrale Nantes
Nantes, France

Dear Maxime,

Although I don’t think this made a big difference to the results presented by Wayman et al, I should note that the turbine stiffness that Wayman et al obtained through the linearization of FAST was not correct. At the time of that project, I don’t think we understood the importance of the “effectiveness stiffness” to the extent that we do now.

To answer your question regarding how to obtain the correct linearization of FAST for an offshore floating wind turbine, it is helpful to identify the terms that contribute to the linearized stiffness matrix. For this system, the terms that contribute to the linearized stiffness for the 6 DOFs of the platform–when the effective stiffness is zero–are aerodynamics (a), turbine weight (wt) (i.e., the weight of tower, nacelle, and rotor), platform weight (wp), hydrostatics (h), and moorings (m). In equation form:

K_Total = K_a + K_wt + K_wp + K_h + K_m.

Wayman et al were trying to get the stiffness associated only with the turbine:

K_Turbine = K_a + K_wt.

As has been noted, the stiffness output from the linearization of FAST does not equal K_Turbine if the platform weight, hydrostatics, and mooring are zero, because such a system is not in static equilibrium before linearizing.

As you rightly suggested, K_Turbine can be obtained by including the platform weight, hydrostatics, and mooring loads in FAST, then linearizing the FAST model about its static equilibrium to obtain K_Total, and calculating K_Turbine as follows:

K_Turbine = K_Total - K_wp - K_h - K_m.

The problem with this is that one needs to have the platform design details available and implemented in FAST before one can linearize the FAST model to obtain the turbine’s stiffness. Also, the stiffness terms associated with the platform may not be easy to obtain either.

Perhaps an easier solution, which would also work when the the platform details are not yet available, would be to neglect the platform weight, hydrostatics, and mooring loads from FAST, but instead include in FAST a user-defined platform loading routine that returns a force (F) from a displacement (X) around the desired linearization position (Xop) (Xop would equal zero if the desired linearization point is the undisplaced position), such that

F = -K_u*(X – Xop),

where K_u is a user-defined stiffness matrix. Then if K_u is chosen to be large relative to other stiffnesses in the model, the solution should converge close to the desired Xop, and the linearization of FAST should give

K_Total = K_Turbine + K_u,

such that K_Turbine could be found by subtracting K_u from K_Total. I haven’t tried this approach myself yet, but it should work.

Please note that WAMIT intrinsically accounts for the stiffness associated with system weight (K_wt + K_wp) and hydrostatics (K_h). So, if your reason to linearize FAST is to import the solution into WAMIT as an externally supplied stiffness matrix, we’ve found that it is convenient to linearize a model with all terms to get K_Total as described above. Then set the center of mass in WAMIT to zero (zeroing-out WAMIT’s internal calculation of the stiffness from system weight) and set the externally supplied stiffness matrix in WAMIT equal to K_Total minus K_h (K_h is calculated by WAMIT and output). Then, in its calculation, WAMIT will add K_h to the externally supplied stiffness matrix, giving back K_Total as desired for use in its calculations.

We hope to add features to a future version of FAST that would make it easier to identify the terms of the stiffness matrix separately. But until those features are available, the approaches described above are required.

Best regards,

Dear Jason,

Thank you for taking time to answer, I appreciate the work you and NREL team do with this forum (and with the design codes of course!).

I decided to follow the first way and I add the contribution of radiation, hydrostatic and mooring into the platform loads. This solved the issue with the important dependency of the output stiffness with operating pitch angle. I noticed the calculated yaw-yaw stiffness is now more important.

I found your suggestion with a user defined high stiffness Ku interesting. But in this case I think the calculation of acceleration in the K_wt stiffness may be not as accurate as in the other calculation. I may also test this second solution.

With best regards,


Dear Maxime,

I’m glad the problem is solved.

There should not be any influence of system acceleration on the stiffness matrices in either method if the model is in static equilibrium before linearizing.

Please provide feedback on the results of the second method if you choose to try it.

Best regards,

Hello everyone,

I have tried what Jason suggested with implementing a user-defined platform loading F_u=-K_u(X-Xop) and would like to share my experience with this approach. I had some problems figuring out why the platform did not converge to zero, but rather diverged in surge and sway mode when I applied a full stiffness matrix. I found out that for this method to work properly, only the diagonal elements in K_u should be non-zero. Doing this, the problem dissapeared, and I suspect that the uncontrolled behavior had something to do with cross-coupling terms in the stiffness matrix.

I also chose to include the platform weight, but obviously not hydrodynamics and mooring loads into FAST. The reason was that the output linearized stiffness was used as input in WAMIT. As Jason explained the reason for, the center of gravity was set to zero in WAMIT. The stiffness output from FAST was then

K_Total = K_Turbine+K_wp + K_u

Hope this information will be useful to someone.

Best regards,

Aina Crozier


Thank you for your information Aina.

I used a different approach for the calculation of system movements in frequency domain.

Instead adding the linearized properties of the turbine in a diffraction/radiation hydrodynamic code, I add the hydrodynamic properties (added mass and wave damping) and mooring properties (stiffness matrix) in FAST and use the linearization process around steady-state position.

As a results, I obtained as FAST output a linearized representation of the system in term of inertia M_res, damping L_res and stiffness K_res:

M_res = System inertia + added mass

L_res = aerodynamic damping + radiation damping

K_res = K_a + K_wt + K_wp + K_h + K_m

K_wt and K_wp depend on the acceleration. Calculating this term by taking into account the whole loads on the system permit to have the right acceleration.

Using these matrices and excitation force F_ex (calculated with a diffraction/radiation code), we can calculate the RAOs of the system:

-w^2( M_res(w) + iw L_res(w) + K_res(w) ) X = F_ex(w)

w is the wave frequency. X is the vector of Platform DOFs.

I think this method has advantages. The linearized properties of the turbine (included in FAST output matrices) are calculated for each wave frequency. As in time domain calculation, aerodynamic properties will depend on wave frequency.

I compared this approach with a time domain approach. There is a very good agreement between time and frequency domain calculation, even for pitch motion.

This frequency domain approach also allows to calculate natural frequencies and modes of motion of the system by resolving equation for the free motions.

I hope this information may be useful. I may send more information by email if someone is interested.

With best regards

Ph.D candidate
Laboratoire de Mécanique des Fluides
Ecole Centrale Nantes
Nantes, France

Dear Maxime,

Thanks for your response.

However, I am unclear how your method works. FAST with AeroDyn and HydroDy do not currently allow you to linearize the solution with incident waves, so, how do you linearize at a given wave or platform frequency? Also, HydroDyn uses as input frequency-dependent hydrodynamic added mass and damping, however, FAST does not allow you to choose the frequency to linearize about. (During linearization, HydroDyn currently outputs the infinite-frequency limit of the added mass and neglects the radiation damping.) So, how can you obtain frequency-dependent M_res, L_res, and K_res from FAST?

The approach I originally suggested–and the approach Aina confirmed works well–is the approach I suggest you use.

Best regards,

Dear Jason,

It was maybe not clear in my last post that I didn’t use Hydrodyn for these calculation. Instead I use a user-defined platform load model.

The linearization is done for system periodic oscillating motion around steady-state position at frequency w_l .

Added mass mu( w_l ) and wave damping lambda( w_l ) are chosen at the frequency w_l of the oscillating motion. These matrices are input of the Platform load model.

Radiation loads are defined for the periodic oscillating motion:
Frad = -mu( w_l ) XDD - lambda( w_l ) XD

Added mass mu( w_l ) and wave damping lambda( w_l ) are output in M_res and L_res during linearization process.

The linearized representation of the system is obtained for periodic oscillating motion at this frequency w_l . The linearization is done for each studied frequency.

I hope this information help to understand my last post.

With best regards,

Maxime Philippe

Dear Maxime,

Thank you for clarifying. I know see you how you obtain the added mass and radiation damping at the frequency you desire.

But I am still not completely clear on your approach. Here are a few additional questions:

*How do you force the system to oscillate with periodic motion during the linearization process?
*The rotor rotation already produces periodicity, so, how do you resolve the fact that you now having two periods (rotor rotation and platform oscillation)?
*When the model is linearized, is the linear model periodic or do you only seek constant-coefficent (averaged) matrices at each frequency?

Best regards,

Dear Jason,

Thank you for your interest and questions.

Actually I don’t force the system oscillation during linearization. I think you are suggesting that I could linearize the system for the different positions of the oscillating movement of the platform.

Considering the small motion assumption, I linearize the system for the steady state position, wich is the mean position.

The linearization uses the standard FAST linearization by perturbation process. The Assumption of an oscillating motion at w_l allows to calculate radiation forces as -mu( w_l ) XDD - lambda( w_l ) XD. It implies the linear representation is valuable only at w_l.

For periodicity of rotor rotation, I output the linearized model at different azimuth steps and then I average the output matrices.

Period of rotor is smaller than wave period. It allows to consider average properties over rotor azimuth during oscillating motion.

With best regards,


Dear Maxime,

Thanks for clarifying again. I now understand that you’ve only linearized the platform at its mean (steady state) position.

I’ve summarized my understanding of what you’ve done in the steps below. Please correct me if my understanding is incorrect.

  1. In the user platform routine, UserPtfmLd, you’ve specified a 6x6 hydrodynamic (radiation) added mass matrix, a 6x6 hydrodynamic (radiation) damping matrix, a 6x6 restoring matrix that includes contributions from hydrostatics and moorings, and a 6x1 force that includes the mooring and buoyancy loads when the platform is undisplaced. The added mass and damping matrices you’ve chosen come from WAMIT at a given frequency.
  2. You use the linearization capability of FAST to trim to a steady-state condition and then linearize the model about this condition to get the 6x6 mass, damping, and stiffness matrices of the full system, including turbine and platform weight and aerodynamics.
  3. You repeat steps 1-2 for each frequency from WAMIT that you wish to linearize about.

If my understanding is correct, you are not applying a force in UserPtfmLd that will actually lead to a periodic oscillation of the system at the frequency at which you specified the WAMIT data (that is, the FAST model does not include the hydrodynamic wave excitation (diffraction) term, F_ex(w)). Instead, you’ve trimmed to a steady-state condition excited only by aerodynamic loads (that will be periodic with the period of the rotor, which you chose to average out afterwards). That is, while the specified hydrodynamic matrices depend on wave frequency, the linearized system will not be oscillating at that frequency. So, the aerodynamic loads won’t depend on the wave/oscillation frequency as I thought you said in your post on Jan 10.

Regardless, if the steady state solution you obtain through the trim solution is accurate, I suspect the linearized model should be accurate too. It would interesting to compare your approach with the approach I originally suggested. I suspect they’d produce very similar results.

Best regards,

Dear Jason,

I think we are now in agreement. I also think it would be interesting to compare the two approaches. I might try oneday.

Thank you again.

With best regards,


Dear Jason,

I intend to linearize test01.fst about an operating point. I used the following settings:

GenModel=1 or 2;
the feature flags are true except YawDOF and CompNoise;
BlPitch and BlPitchF= -1.

I found when wind speed is more than 10 m/s, the linearization doesn’t converge. I changed RotSpeed for several times, but it didn’t converge at all.
I’d like to know what the problem is and how I can obtain a linearized model considering GenDOF =True.


Dear Hamid Reza,

Which TrimCase are you using? (TrimCase is found in the linearization input file of FAST v7.)

Best regards,

Dear Jason

I had already used TrimCase=2 (find generator torque) that the convergence wasn’t met. Then, I chose TrimCase=3. In this condition, both the generator torque and blade pitch angle are changed. The convergence is met with a positive pitch angle (test01 is a downwind turbine!). I am waiting your response impatiently.

best regards

Dear Hamid Reza,

I’ve answered a similar question in the following forum topic: (particularly my post dated Jan 16, 2013).

In your case, increasing the wind speed is lowering the TSR, resulting in TrimCase 2 going unstable.

Best regards,


I am linearizing the NREL 5MW onshore wind turbine and comparing the Bode diagrams taking into account different vibration modes. In the figure shown below (generator rotational velocity as output and electromagnetical torque as input) the diagrams are the following:

  • Orange: First fore-aft tower bending-mode and drivetrain rotational-flexibility DOF ON
  • Purple: First fore-aft tower bending-mode, drivetrain rotational-flexibility and first flapwise blade mode DOF ON
  • Yellow: First fore-aft tower bending-mode, drivetrain rotational-flexibility and first edgewise blade mode DOF ON

However, the stationary value of the three dyagrams is not the same, which is pretty strange. Have I linearized wrongly or is this difference normal?

Thank you in advance.



Dear Jason,
I am modeling a new TLP substructure in FAST with the NREL 5MW wind turbine on it. For this purpose one of the changes I need to do is to change the modes of vibration of the tower. The tool I use for the calculation of the new modes of the tower is BModes. The only missing parameter I have to get the modes of vibration with BModes is the mooring stiffness matrix “mooring_K”. My idea is to take the mooring model available for the TLP from Denis Matha and suit the length of the mooring in the platform file to get the mooring_K matrix for BModes in my particular mooring design.

I want first to check if the linearization I do is correctly done, in order to perform the same calculation with same parameters for the TLP of Denis Matha, suited to my particular design. For this purpose I took the OC3 Hywind model from your server and with FASTV7 (modified for OC3 project) did the linearization. In the .fst file I set AnalMode=2, PCMode=0, YCMode=0, and other parameters as the manual of FAST prescribes for a linearization. I disable in .fst file all the DOFs. In _Aerodyne.ipt I set StallMod=STEADY and InfModel=EQUIL. In the _Linear.dat file I set CalcStdy=False and MdlOrder=2 and I let all the other original settings. I set in _Platform_OC3Hywind.dat all the platform DOFs flags as true and keep all the original description of the moorings and the platform.

With the described settings I get some of the linear restoring parameters which do not match with the provided values in the OC3 Hywind report 47535 in page 18. Examples of this mismatch are C33, C44, C55 and C66, but elements C11=C22 and C51 match perfectly. The values I get for these matrix elements are: C33=3.449E+05 (Instead of 0.1194E+05); C44=C55=1.480E+09(Instead of 0.3111E+09); C66=1.099E+08 (instead of 0.1156E+08).
By the way the values used in BModes model for the C44=C55=6.89468E+09 differ from the values of the paper 0.3111E+09, I am not sure about why but nevertheless I follow your paper for the comparisons.

Could you please tell me which inputs are wrong in my linearization in order to get the same values as you do in 47535, page 18 or how can I approach the values you provide in the paper?. I suspect it could be related to the subject of effective stiffness that I get different values than yours, maybe my system is under displacement when the linearization occurs.?
I attach my linearization file with my .fst file

Thank you in advance

Laín Nieto Gómez
PhD Student in the UPV/EHU University of the Basque Country
Escuela Técnica Superior de Ingenieros de Bilbao
Departamento de matemática aplicada

NRELOffshrBsline5MW_Linear_97.txt (2.1 KB)
Test97.txt (22.5 KB)