4. Module Documentation

The main methodology is contained in CCBlade. Airfoil data is provided by any object that implements AirfoilInterface. The helper class CCAirfoil is provided as a useful default implementation for AirfoilInterface. If CCAirfoil is not used, the user must provide an implementation that produces \(C^1\) continuous output (or else accept non-smooth aerodynamic calculations from CCBlade). Some of the underlying implementation for CCBlade is written in Fortran for computational efficiency.

4.1. Airfoil Interface

The airfoil objects used in CCBlade need only implement the following evaluate() method. Although using CCAirfoil for the implementation is recommended, any custom class can be used.

Class Summary:

4.2. CCAirfoil Class

CCAirfoil is a helper class used to evaluate airfoil data with a continuously differentiable bivariate spline across the angle of attack and Reynolds number. The degree of the spline polynomials across the Reynolds number is summarized in the following table (the same applies to the angle of attack although generally, the number of points for the angle of attack is much larger).

len(Re) degree of spline
1 constant
2 linear
3 quadratic
4+ cubic

Class Summary:

class ccblade.CCAirfoil(alpha, Re, cl, cd, cm=[])[source]

Setup CCAirfoil from raw airfoil data on a grid. Parameters ———- alpha : array_like (deg)

angles of attack where airfoil data are defined (should be defined from -180 to +180 degrees)
Re : array_like
Reynolds numbers where airfoil data are defined (can be empty or of length one if not Reynolds number dependent)
cl : array_like
lift coefficient 2-D array with shape (alpha.size, Re.size) cl[i, j] is the lift coefficient at alpha[i] and Re[j]
cd : array_like
drag coefficient 2-D array with shape (alpha.size, Re.size) cd[i, j] is the drag coefficient at alpha[i] and Re[j]

Methods

initFromAerodynFile convenience method for initializing with AeroDyn formatted files Parameters ———- aerodynFile : str location of AeroDyn style airfoiil file Returns ——- af : CCAirfoil a constructed CCAirfoil object
evaluate Get lift/drag coefficient at the specified angle of attack and Reynolds number.

4.3. CCBlade Class

This class provides aerodynamic analysis of wind turbine rotor blades using BEM theory. It can compute distributed aerodynamic loads and integrated quantities such as power, thrust, and torque. An emphasis is placed on convergence robustness and differentiable output so that it can be used with gradient-based optimization.

Class Summary:

class ccblade.CCBlade(r, chord, theta, af, Rhub, Rtip, B=3, rho=1.225, mu=1.81206e-05, precone=0.0, tilt=0.0, yaw=0.0, shearExp=0.2, hubHt=80.0, nSector=8, precurve=None, precurveTip=0.0, presweep=None, presweepTip=0.0, tiploss=True, hubloss=True, wakerotation=True, usecd=True, iterRe=1, derivatives=False)[source]

Constructor for aerodynamic rotor analysis Parameters ———- r : array_like (m)

locations defining the blade along z-axis of blade coordinate system (values should be increasing).
chord : array_like (m)
corresponding chord length at each section
theta : array_like (deg)
corresponding twist angle at each section— positive twist decreases angle of attack.
Rhub : float (m)
location of hub
Rtip : float (m)
location of tip
B : int, optional
number of blades
rho : float, optional (kg/m^3)
freestream fluid density
mu : float, optional (kg/m/s)
dynamic viscosity of fluid
precone : float, optional (deg)
hub precone angle
tilt : float, optional (deg)
nacelle tilt angle
yaw : float, optional (deg)
nacelle yaw angle
shearExp : float, optional
shear exponent for a power-law wind profile across hub
hubHt : float, optional
hub height used for power-law wind profile. U = Uref*(z/hubHt)**shearExp
nSector : int, optional
number of azimuthal sectors to descretize aerodynamic calculation. automatically set to 1 if tilt, yaw, and shearExp are all 0.0. Otherwise set to a minimum of 4.
precurve : array_like, optional (m)
location of blade pitch axis in x-direction of blade coordinate system
precurveTip : float, optional (m)
location of blade pitch axis in x-direction at the tip (analogous to Rtip)
presweep : array_like, optional (m)
location of blade pitch axis in y-direction of blade coordinate system
presweepTip : float, optional (m)
location of blade pitch axis in y-direction at the tip (analogous to Rtip)
tiploss : boolean, optional
if True, include Prandtl tip loss model
hubloss : boolean, optional
if True, include Prandtl hub loss model
wakerotation : boolean, optional
if True, include effect of wake rotation (i.e., tangential induction factor is nonzero)
usecd : boolean, optional
If True, use drag coefficient in computing induction factors (always used in evaluating distributed loads from the induction factors). Note that the default implementation may fail at certain points if drag is not included (see Section 4.2 in [1]). This can be worked around, but has not been implemented.
iterRe : int, optional
The number of iterations to use to converge Reynolds number. Generally iterRe=1 is sufficient, but for high accuracy in Reynolds number effects, iterRe=2 iterations can be used. More than that should not be necessary. Gradients have only been implemented for the case iterRe=1.
derivatives : boolean, optional
if True, derivatives along with function values will be returned for the various methods

Methods

distributedAeroLoads Compute distributed aerodynamic loads along blade.
evaluate Run the aerodynamic analysis at the specified conditions.