← All comparisons
Turbine power and thrust
This comparison gives FLORIS, FOXES, and PyWake the same wind turbine power curve and thrust coefficient curve, then asks each package to evaluate the turbine over a sweep of wind speeds. It isolates the turbine model: the flow is uniform and there are no wakes, shear, or yaw, so any difference comes from how each software ingests and evaluates the curves.
One unwaked turbine in uniform, shear-free flow at 1.225 kg/m³ air density, evaluated at 303 wind speeds.
Common turbine definition
- Turbine
- IEA Wind Task 37 15MW Offshore Reference Turbine
- Rotor diameter
- 240 m
- Hub height
- 150 m
- Air density
- 1.225 kg/m³
- Tabulated range
- 3.0 to 25.0 m/s (59 points)
- Peak power
- 16056 kW
The curves are the IEA 15 MW power coefficient and thrust coefficient used by the wake cases. The power curve in kW is derived once from the power coefficient at the reference air density,P = ½ ρ A U³ Cp, so that every software receives the same power and Ct tables on the same wind speed grid.
How each software ingests the curves
The common curves are passed to each installed software's native tabular turbine input and the turbine is simulated with that software's own solver. No software result is calculated by a wcomp replacement formula.
FLORIS
power_thrust_table with the cosine-loss operation model
- Inputs
- Power in kW, thrust coefficient, and wind speed arrays in a power_thrust_table; yaw and tilt are zero so the cosine losses are inactive.
- Interpolation
- Linear (scipy interp1d) in wind speed.
- Outside range
- Power is zero outside the tabulated wind speeds. Thrust coefficient is clipped to the range [0.0001, 0.9999], so it never reaches zero.
Executed with FlorisModel.run(), get_turbine_powers(), and get_turbine_thrust_coefficients().
FOXES
PCtFromTwo turbine type
- Inputs
- Separate power (kW) and Ct tables, each with its own wind speed column.
- Interpolation
- Linear (numpy interp) in rotor effective wind speed.
- Outside range
- Power and Ct are exactly zero outside the tabulated wind speeds.
Executed with the Downwind algorithm, no wake models, and the grid16 rotor model; results read from calc_farm() P and CT.
PyWake
WindTurbine with a PowerCtTabular function
- Inputs
- Wind speed, power (kW), and Ct arrays plus the cut-in and cut-out wind speeds, which are set to the first and last tabulated speeds.
- Interpolation
- Linear (numpy interp) in wind speed.
- Outside range
- With cut-in and cut-out set, power and Ct take their idle values (zero) outside the table. Without them PyWake would hold the end values.
Executed with the NOJ wind farm model on a UniformSite; with one turbine no wake is applied. Results read from the Power and CT outputs.
Power
Each software's power at every wind speed in the sweep. The three curves coincide, so each is drawn with a different line style on top of the common input points.
Power error: each software's power minus the common curve, interpolated to the same wind speed.
Thrust coefficient
The thrust coefficient returned by each software. Inside the tabulated range all three agree with the common curve; they differ only in what they report outside it.
Ct error: each software's thrust coefficient minus the common curve, interpolated to the same wind speed.
Error against the common curve
Reference: Linear interpolation of the common power and Ct curves inside the tabulated range, and zero outside it.
How to interpret this comparison
- Power agrees to floating-point precision across the full sweep, including the zero power below cut-in and above cut-out. With linear interpolation of the same table, no disagreement is expected.
- The only disagreement is the thrust coefficient outside the tabulated range. FOXES and PyWake report zero, while FLORIS clips Ct to a floor of 0.0001.
- PyWake holds the end values of a tabular curve unless a cut-in and cut-out wind speed are given. They are set to the ends of the common curve here so that all three treat the idle turbine alike.
- This comparison uses the reference air density throughout. It does not test air density corrections, yaw or tilt losses, or rotor-averaged wind speeds in sheared or waked flow.