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:
-
Is my understanding correct that the current ROSCO-CCBlade rotor-performance generation does not interpolate between multiple Reynolds tables?
-
Are there plans to implement Reynolds interpolation in this workflow, so that the generated
Cp_Ct_Cq.txttable is based onCl(alpha, Re)andCd(alpha, Re)rather than a single selected Reynolds table? -
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