Manipulation of 2D aerodynamics coefficients and OLAF parameters

Dear all,

I am using OpenFAST to calculate the aeroelastic response of a rigid sail that looks like a rectangular (36m span and 9m chord) wing with a composite glass/carbon fiber structure.

First, I needed to validate the use of the OLAF module. To adapt this tool to my case, I modeled 1 blade without rotation. I have access to the CFD results of the 2D aerodynamic coefficient that I used in the input file of the wing data. Then I ran several 3D aerodynamic force measurements by iterating over the PropagationDir parameter of Steady InflowWind (10 m/s). I compared these results to 3D wind tunnel tests.

Our goal was to match 3D results of OLAF to our Wind-Tunnel results. But our wing profile is not classic, it is composed of two elements (a main body and a flap).

To make them match as well as possible I modified the 2D polar (I shifted the stall point) and I wondered if this tweak could have an impact on unsteady aerodynamics results of the Beddoes-Leishman Model.

before :

and after :

Here is my OLAF configuration (default one proposed by OLAF guidelines)

5       IntMethod          Integration method {5: Forward Euler 1st order, default: 5} (switch)
0.1     DTfvw              Time interval for wake propagation. {default: dtaero} (s)
99999   FreeWakeStart      Time when wake is free. (-) value = always free. {default: 0.0} (s)
0.0     FullCircStart      Time at which full circulation is reached. {default: 0.0} (s)
--------------------------- CIRCULATION SPECIFICATIONS ----------------------------------------
1       CircSolvingMethod  Circulation solving method {1: Cl-Based, 2: No-Flow Through, 3: Prescribed, default: 1 }(switch)
default CircSolvConvCrit   Convergence criteria {default: 0.001} [only if CircSolvingMethod=1] (-)
default CircSolvRelaxation Relaxation factor {default: 0.1} [only if CircSolvingMethod=1] (-)
default CircSolvMaxIter    Maximum number of iterations for circulation solving {default: 30} (-)
unused  PrescribedCircFile File containing prescribed circulation [only if CircSolvingMethod=3] (quoted string)
--------------------------- WAKE OPTIONS ------------------------------------------------------
------------------- WAKE EXTENT AND DISCRETIZATION --------------------------------------------
420     nNWPanel           Number of near-wake panels [integer] (-)
120     FarWakeLength         Total wake distance [integer] (number of time steps)
60      FreeFarWakeLength     Wake length that is free [integer] (number of time steps) {default: WakeLength}
False   FWShedVorticity    Include shed vorticity in the far wake {default: false}
------------------- WAKE REGULARIZATIONS AND DIFFUSION -----------------------------------------
0       DiffusionMethod     Diffusion method to account for viscous effects {0: None, 1: Core Spreading, "default": 0}    
3       RegDeterMethod      Method to determine the regularization parameters {0:  Manual, 1: Optimized, 2: Chord, 3: Span, default: 0 } 
3       RegFunction         Viscous diffusion function {0: None, 1: Rankine, 2: LambOseen, 3: Vatistas, 4: Denominator, "default": 3} (switch)
3       WakeRegMethod       Wake regularization method {1: Constant, 2: Stretching, 3: Age, default: 1} (switch)
0.6     WakeRegFactor       Wake regularization factor (m)
0.6     WingRegFactor       Wing regularization factor (m)
1000    CoreSpreadEddyVisc  Eddy viscosity in core spreading methods, typical values 1-1000 

I tried to make some tweaks to the wake parameters but these seem to be the most stable.

I was wondering what you thought of my OLAF setup and my method of matching the 3D polar to the wind tunnel results.

Thank you very much,

Best regards,


Dear Theo,

The fact that your wing has multiple elements, and has a fairly low aspect ratio can indeed be challenging for a lifting line method, I’m guessing that can explain some of the differences you observe. There could be other sources, either something in the measurements (like wall effects, turbulence, Reynolds number effects), or something off in the OLAF modeling.

Modifying the 2D polar data is probably what will have the greatest impact on the 3D lift curve. Of course, the best would be to be able to use the 2D polar from the measurements. If your modifications are limited to changing the stall point, it seems reasonable since there could be quite some uncertainty on the stall behavior of an airfoil.

Your inputs for the OLAF simulation appears reasonable.

  • You could get rid of the FarWake (FarWakeLength=FreeFarWakeLength=0) and increase the near wake length, since the FarWake introduces some approximations. The near wake length will be a function of your mean wind speed, the extent of the wake downstream and your time step. I don’t have guidelines for a fixed wing, but I would guess an extent of 10 wing span downstream would be plenty. (I would still experiment with different distances to see the impact and convergence. )
  • You need a simulation time that corresponds at least to 2 nNWPanel x dt , to ensure that the wake is in equilibrium. You can check that the loads are converged at the end of the simulation.
  • The spanwise discretization (number of points along the span), might affect your results. I’m not sure how many you are using. You can try different spanwise discretizations 25 50 75 100 and see how your results are affected and if you somehow reach a convergence.
  • Once you decide on a number of spanwise point, you can try a parametric study on the Wing/WakeRegParameters, varying them from 0.2 to 2.0.
    All this will have smaller impact on the lift curve as the change in polar that you did, but would be a good exercise to do on the original set of polars to understand what affects the performances of the model, and in which propotion.

Regarding the unsteady aerodynamic model, changing the stall point will indeed affect the unsteady airfoil parameters that are used by the Beddoes-Leishman model (most likely the parameter alpha1). In general these parameters are hard to determine and can affect the unsteady performance significantly. In your case, if the wind tunnel had limited turbulence intensity levels, you could run without dynamic stall at first, and since you are studying steady state performances at the moment, the results should in theory not be different with and without the dynamic stall model. In practice, they might be different, in particular if your “Cn slope” does not fit the Cn curve in the linear region. (I personally use my tool pyDatView to open a polar file from OpenFAST, and look at how well the curve “Cn pot” match the “Cn”, and where the points 0,1,2 are. The 1 and 2 points need to be close to stall or close to points where the linear and nonlinear Cn curves start to grow apart).

I hope some of this can be useful. Let us know how things go,


Hello Emmanuel,

First of all, thank you very much for your quick and precise answer.
I took my time to answer to be sure to have explored all the tracks that you proposed. Here are some of my results for information:
Convergence in nNWPanel : 100 Near Wake Panel at 10m/s is sufficient
Spanwise discretization convergence is achieved at around 40 nodes but at 70 nodes the simulation doesn’t manage to converge even at low angle of attack.

The modification of the WingRegFactor has mainly modified the post-stall results

Then I tested the influence of various unsteady aerodynamic models. I chose to look at the 4th one more in depth (Beddoes-Leishman 4-states model) because it was incompressible and had documentation. I could indeed see the effect of the Cl_Alpha parameter.
I was wondering if you had a recommendation or a method to choose a UA model.

Finally, I saw that I had left the FreeWakeStart parameter at 99999 when I imagine it should be set to 0. It still gives me interesting results (I need to shift the stall point less) but the simulation diverges all the time for large angles of attack and post stall angles of attack. Do you have any suggestions on how to stabilize this kind of simulations, like which parameters to adjust ? I have tried a lot of them without seeing any noticeable changes.

Best regards,

Hi Theo,

Thank you for trying all this, it’s great work. Having this stepwise approach is definitely the best to gain confidence on the model parameters and find the most suitable ones.

It is a bit unfortunate that you did this with FreeWakeStart=9999, which effectively removes the wake rollup and might result in a different induction profile. You might need to redo the convergence on the number of near wake panels. 100 panels appears slightly low, but it depends on your time step and problem.

I’m not sure what you mean when you say that the simulation diverges for large angles of attack. When wake rollup is active, the wake may become quite chaotic depending on the regularization parameter of the wake. There are several things to do to avoid that:

  • Increase the value of the WakeRegParameter
  • Use WakeRegMethod=3, and increase the value of the parameter CoreSpreadEddyViscosity, this way the wake regularization parameter will increase from WakeRegParameter near the blade, to higher values in the far wake
  • Reduce the length of your Free Far Wake (but keeping the length of your total far wake the same). The far wake corresponds to the root and tip vortices generated after the near wake. After the free far wake, you’ll have a frozen far wake, which will convect with an average velocity and will not distort as much as the free vorticity.

Usually a visual inspection helps. You can use WrVTk=1 or 2 (to look at the end of the simulation only), with a fairly large VTK_fps (to avoid too much IO) and open the files “AllSegment” VTK files in Paraview. If the wake at the end of the simulation is too distorted, likely the wake regularization/CoreSpreadEddyViscosity are too small, if your wake is too smooth, they might be too large. If you want you can share a screen shot of one of your wake, I can give you some kind of opinion.

I hope that helps,


Hi Emmanuel,

Thank you for your answer. I’ve managed to get rid of the divergences. As you proposed, I have run several parametric simulation on wake regularization parameters. I wanted to share with you what I observed.

The nNWPanel and the WakeRegFactor does not have a lot of influence on integral values of static simulations (only the WingRegFactor has). I only notice that increasing the WakeRegFactor improve the stabilization of the result :
This is the temporal representation of FyAero for 4 different values of WakeRegFactor (0.1 to 4) :

And it also “smooth” the wake as you said but even at WakeRegFactor=2, the wake is pretty much distorted :

These simulations were launched with this configuration :

  • Total run time = 15 sec
  • DTfvw = 0.1
  • nNWPanel = 150
  • WingRegFactor = 2
  • WakeRegMethod = 3
  • CoreSpreadEddyVisc = 1000
  • Angle of attack = 20°
  1. WakeRegFactor = 0.6

  2. WakeRegFactor = 2

  3. WakeRegFactor = 4

Then, I’ve begun the aeroelastic study of my system. I’ve firstly studied the difference between the different Unsteady Aerodynamic Models. I have activated the BeamDyn Module. Then I choose a uniform wind type with an oscillating direction of 8s period, 4° amplitude around 28° (with the stall angle around 29.5°) as shown below :

Here is my results for the lift coefficient :

and the forces in the beam in the flap direction :

The choice of the UAMod seems to be very significant on the results.

My goal is to use Openfast to highlight a possible stall flutter phenomenon and to set conditions on structural parameters or angles of attack to avoid it.

Do you have recommendations on how I should proceed to choose an unsteady aerodynamic model and how I should set the parameters ?

Thanks in advance,


Hi @Emmanuel.Branlard

I tried to adjust the UA parameters to make the results of the different UA models match. But I could not do better than the results I have presented in my last message. I also tried different load case (like echelon or dirac of wind incidence) and the results are highly dependent on the chosen UA model.

The differences I noticed between them are :

  • The UAMod 5 is very similar to the steady case, it only change the stall angle and no extra lift is modeled during stall.
  • The UAMod 2&3 are similar to each other, they both have the same extra lift during stall.
  • The UAMod 4 models an extra lift but it lasts a much shorter time.

How can I chose between these UA models ?

Best regards,



Thank you again for your tests.

For the wake regularization, I think to stabilize the wake, I would increase the variable CoreSpreadEddyVisc (with WakeRegMethod=3), multiply it by 2 or more until your wake is more stable, for a value of WakeRegFactor of 2 for instance. Using a value of 4 appears a bit too high, my recommended values for the WakeRegFactor are between 0.25 and 2 (times Delta r).

Regarding the UA model, this is it’s own can of worms as well, and I’m afraid I don’t have much recommendation at the moment… We’ve highlighted in Figure 8 of the following reference (WES - A multipurpose lifting-line flow solver for arbitrary wind energy concepts) that indeed, depending on the dynamic stall model, you can get all kind of results. The best would be to have experimental data or more advanced numerical data to compared these results against, with which you could further tune these models.

I personally like UAMod=6 (one you didn’t try :)) because it’s simple, it only has one tuning parameter (k), and it’s effect on the lift coefficient is fairly intuitive.

UAMod=4,6 depend on the lift coefficient only, and their accuracy will depend on how well the polar data can be approximated by the linear lift slope (and how well this lift slope is computed internally and the separation function is computed internally).

I agree that UAMod=2,3 should return similar results.

UAMod=4,5 have similar theories, but one is about the Cl, the other about the Cn.

UMod=5 should be close to UAMod=2,3 because it’s a state space version of the Beddoes-Leishman model. I’m actually surprised about the results you got with UAMod 5, something might be off in the input parameters or the code.

Keep us in touch,


1 Like