Rosco CCBlade Coefficients

Dear OpenFAST team,

I am working with ROSCO v2.10.3 and generating rotor performance tables using the ccblade script.

I have airfoil files with multiple Reynolds number tables, for example Re = 2M, 3M, 5M, and 8M. I noticed that, when ROSCO generates the Cp_Ct_Cq.txt file through CCBlade, the code does not appear to interpolate between the available Reynolds tables.

Instead, in rosco/toolbox/turbine.py, when NumTabs > 1, it uses reynolds_ref to select the closest table:

Res_in_table = np.array([sec['Re'] for sec in section])
ref_tab = np.abs(Res_in_table - reynolds_ref).argmin()

and if no reynolds_ref is provided in the .yaml, it uses the center table:

ref_tab = int(np.floor(section[0]['NumTabs']/2))

The comment in the code also says:

# find closest table to reynolds_ref, interpolate someday, approximate is probably okay

If understand correct, CCBlade itself can evaluate airfoil data as a function of both angle of attack and Reynolds number if it receives the airfoil data as Cl(alpha, Re) and Cd(alpha, Re). However, in the current workflow, ROSCO reduces each multi-table airfoil file to one selected Reynolds table before creating the CCAirfoil object. I can confirm this as I’ve tested it with different models, different Reynolds numbers, and different Reynolds_Ref values.

In OpenFAST´s AeroDyn module, using AFTabMod = 2, the simulation does use Reynolds-dependent airfoil tables, and I can see local Reynolds numbers varying during the simulation.

Therefore, there is a mismatch: the ROSCO controller and Cp_Ct_Cq.txt file may be based on a single fixed Reynolds table, while the OpenFAST plant model may be using Reynolds-varying aerodynamics.

So my questions are the next ones:

  1. Is my understanding correct that the current ROSCO-CCBlade rotor-performance generation does not interpolate between multiple Reynolds tables?

  2. Are there plans to implement Reynolds interpolation in this workflow, so that the generated Cp_Ct_Cq.txt table is based on Cl(alpha, Re) and Cd(alpha, Re) rather than a single selected Reynolds table?

  3. If not, is there a recommended workflow for generating rotor performance tables that are consistent with AeroDyn using AFTabMod = 2? Is there a better approach for controller tuning when the plant model uses Reynolds-dependent airfoils?

Thanks in advance for your time.

Kind regards,

Kepa

1 Like

Hi Kepa,

Yes.

No. It’s well known that there is a mismatch between the ROSCO Cp tables and “real” performance. Blade flexibility, particularly twist, creates the biggest mismatch. We have no plans to assess the impact of imperfect Cp surfaces on the ROSCO tuning.

I would first assess what issues this creates (if any) in your current controller tuning. Then, I would assess what the actual impact the Cp surface has on the ROSCO tuning. The Cp surface is just one of the inputs that impacts the pitch gain schedule, wind speed estimator, and minimum pitch schedule for peak shaving. Other parameters could be used to adapt those same control modules, while using a static set of airfoils. Finally, I would ask if there’s any turbine performance benefit that can be achieved using these higher fidelity Cp surfaces. Only then would I follow the template in OpenFAST and use a Cp surface that depends upon the Re number.

I hope this helps.

Best, Dan

1 Like