Turbines#

Analytical turbine performance models and per-position assignments.

oowl.Turbine()

Wind turbine with power and thrust-coefficient curves.

oowl.turbines.Idealized(rated_power, ...[, ...])

Idealized turbine with a constant below-rated C_P.

oowl.turbines.Controlled(rated_power, ...[, ...])

Variable-speed turbine whose thrust and power follow one axial induction.

oowl.turbines.Tabulated(rotor_diameter, ...)

Turbine defined by tabulated power and thrust-coefficient curves.

Wind turbine performance models.

class oowl.turbines.Idealized(rated_power, rotor_diameter, hub_height, cp_max, *, ct_rated=0.8, air_density=1.225, generator_efficiency=1.0, cutin_wind_speed=4.0, cutout_wind_speed=25.0, ct_idle=None, ct_parked=None, name=None)[source]#

Idealized turbine with a constant below-rated C_P.

Follows the generalized turbine relations of Sørensen (2023, https://doi.org/10.5194/wes-8-1017-2023), including the idealized cut-in discontinuity. The rated wind speed is derived, not supplied.

Parameters:
  • rated_power (float) – Electrical rated power in watts.

  • rotor_diameter (float) – Rotor size and height in meters.

  • hub_height (float) – Rotor size and height in meters.

  • cp_max (float) – Power coefficient below rated, at most the Betz limit 16/27.

  • ct_rated (float) – Thrust coefficient below rated.

  • air_density (float) – Air density in kg/m³.

  • generator_efficiency (float) – Share of the rotor power delivered as electrical power.

  • cutin_wind_speed (float) – Operating band in m/s.

  • cutout_wind_speed (float) – Operating band in m/s.

  • ct_idle (float | None) – Thrust below cut-in, default 0, and above cut-out, default the operating value at cut-out.

  • ct_parked (float | None) – Thrust below cut-in, default 0, and above cut-out, default the operating value at cut-out.

  • name (str | None) – Label used in plots and windIO documents.

cp(wind_speed: float) → float[source]#
cp(wind_speed: ArrayLike) → ndarray

Return the power coefficient at wind_speed in m/s.

Scalar in, scalar out. Zero outside the cut-in to cut-out band.

Parameters:

wind_speed (ArrayLike)

Return type:

float | np.ndarray

ct(wind_speed: float) → float[source]#
ct(wind_speed: ArrayLike) → ndarray

Return the thrust coefficient in [0, 1] at wind_speed in m/s.

ct_rated below rated. Above it, the thrust follows the momentum induction of the falling C_P. Below cut-in it is ct_idle (default 0), above cut-out ct_parked, which defaults to the operating value at cut-out.

Parameters:

wind_speed (ArrayLike)

Return type:

float | np.ndarray

metadata()[source]#

Return the turbine configuration as a JSON-compatible dict.

Return type:

dict

power(wind_speed: float) → float[source]#
power(wind_speed: ArrayLike) → ndarray

Return the electrical power in watts at wind_speed in m/s.

Parameters:

wind_speed (ArrayLike)

Return type:

float | np.ndarray

property rated_wind_speed: float#

Wind speed in m/s at which rated power is reached.

Derived from rated_power, rotor_diameter, cp_max, generator_efficiency and air_density.

property rotor_area: float#

Rotor swept area in square meters.

class oowl.turbines.Controlled(rated_power, rotor_diameter, hub_height, cp_max, optimal_tip_speed_ratio, minimum_rotor_speed, maximum_tip_speed, *, ct_optimal=0.8, induction_exponent=0.35, ct_peak_shaving=None, thrust_slope=0.0, turbulence_smoothing=0.0, air_density=1.225, generator_efficiency=0.96, cutin_wind_speed=3.0, cutout_wind_speed=25.0, ct_idle=None, ct_parked=None, name=None)[source]#

Variable-speed turbine whose thrust and power follow one axial induction.

The rotor tracks optimal_tip_speed_ratio, held between minimum_rotor_speed and maximum_tip_speed. The induction follows the realized tip-speed ratio as a = a_opt (λ / λ_opt) ** induction_exponent, where a_opt gives ct_optimal. Thrust is the momentum value 4 a (1 - a), with Buhl’s correction above a = 0.4. Power follows the same induction, and its power coefficient never exceeds cp_max unless turbulence_smoothing averages it. Above rated the blades pitch to hold rated power, and the induction falls with the power coefficient.

At the minimum rotor speed, near cut-in, the rotor over-induces and the thrust rises above ct_optimal. At the tip-speed limit it falls before rated. induction_exponent=0 gives a flat thrust below rated.

Rotor speed, tip-speed ratio and induction are diagnostics only and are not exported to windIO.

Parameters:
  • rated_power (float) – Electrical rated power in watts.

  • rotor_diameter (float) – Rotor size and height in meters.

  • hub_height (float) – Rotor size and height in meters.

  • cp_max (float) – Power coefficient at the optimal tip-speed ratio.

  • optimal_tip_speed_ratio (float) – Tip-speed ratio the controller tracks.

  • minimum_rotor_speed (float) – Lowest rotor speed in rpm.

  • maximum_tip_speed (float) – Highest blade tip speed in m/s.

  • ct_optimal (float) – Thrust coefficient at the optimal tip-speed ratio.

  • induction_exponent (float) – How strongly the induction follows the tip-speed ratio.

  • ct_peak_shaving (float | None) – Thrust cap, or None. The lower induction also lowers the power.

  • thrust_slope (float) – Change of the design thrust per m/s about 8 m/s below rated, as in fine-pitch schedules. Above rated the blades pitch instead.

  • turbulence_smoothing (float) – Turbulence intensity, at most 0.1, over which power and thrust are averaged. It rounds the knee at rated as in measured curves and keeps cut-in and cut-out sharp. As in measured curves, the apparent C_P then exceeds cp_max, by about 3% at 0.1 and up to about 13% just above cut-in, where the average sees no idling speeds.

  • ct_idle (float | None) – Thrust below cut-in, default 0, and above cut-out, default the operating value at cut-out.

  • ct_parked (float | None) – Thrust below cut-in, default 0, and above cut-out, default the operating value at cut-out.

  • air_density (float) – Air density in kg/m³.

  • generator_efficiency (float) – Share of the rotor power delivered as electrical power.

  • cutin_wind_speed (float) – Operating band in m/s.

  • cutout_wind_speed (float) – Operating band in m/s.

  • name (str | None) – Label used in plots and windIO documents.

axial_induction(wind_speed: float) → float[source]#
axial_induction(wind_speed: ArrayLike) → ndarray

Return the rotor-averaged axial induction, before turbulence smoothing.

Parameters:

wind_speed (ArrayLike)

Return type:

float | np.ndarray

cp(wind_speed: float) → float[source]#
cp(wind_speed: ArrayLike) → ndarray

Return the power coefficient implied by power().

Scalar in, scalar out. Zero outside the cut-in to cut-out band.

Parameters:

wind_speed (ArrayLike)

Return type:

float | np.ndarray

ct(wind_speed: float) → float[source]#
ct(wind_speed: ArrayLike) → ndarray

Return the thrust coefficient at wind_speed in m/s.

Below cut-in it is ct_idle (default 0). Above cut-out it is ct_parked, which defaults to the operating value at cut-out.

Parameters:

wind_speed (ArrayLike)

Return type:

float | np.ndarray

metadata()[source]#

Return the turbine configuration as a JSON-compatible dict.

Return type:

dict

power(wind_speed: float) → float[source]#
power(wind_speed: ArrayLike) → ndarray

Return the electrical power in watts at wind_speed in m/s.

Parameters:

wind_speed (ArrayLike)

Return type:

float | np.ndarray

property rated_wind_speed: float#

Wind speed in m/s at which rated power is first reached.

nan when rated power is never reached, which the constructor rejects.

property rotor_area: float#

Rotor swept area in square meters.

property rotor_radius: float#

Rotor radius in meters.

rotor_speed(wind_speed: float) → float[source]#
rotor_speed(wind_speed: ArrayLike) → ndarray

Return the rotor speed in rpm, zero outside the operating band.

Parameters:

wind_speed (ArrayLike)

Return type:

float | np.ndarray

tip_speed_ratio(wind_speed: float) → float[source]#
tip_speed_ratio(wind_speed: ArrayLike) → ndarray

Return the realized tip-speed ratio, zero outside the operating band.

Parameters:

wind_speed (ArrayLike)

Return type:

float | np.ndarray

class oowl.turbines.Tabulated(rotor_diameter, hub_height, wind_speeds, power_values, ct_values, *, name=None, rated_power=None)[source]#

Turbine defined by tabulated power and thrust-coefficient curves.

Curves are linearly interpolated inside the tabulated range and are zero outside it, so the first and last speeds act as cut-in and cut-out.

Parameters:
  • rotor_diameter (float) – Rotor size and height in meters.

  • hub_height (float) – Rotor size and height in meters.

  • wind_speeds (numpy.ndarray) – Strictly increasing, non-negative wind speeds in m/s.

  • power_values (numpy.ndarray) – Electrical power in watts at each speed.

  • ct_values (numpy.ndarray) – Thrust coefficient in [0, 1] at each speed.

  • name (str | None) – Label used in plots and windIO documents.

  • rated_power (float | None) – Rated power in watts. Defaults to the largest tabulated power.

ct(wind_speed: float) → float[source]#
ct(wind_speed: ArrayLike) → ndarray

Return the thrust coefficient in [0, 1] at wind_speed in m/s.

Parameters:

wind_speed (ArrayLike)

Return type:

float | np.ndarray

property cutin_wind_speed: float#

Lowest tabulated wind speed in m/s.

property cutout_wind_speed: float#

Highest tabulated wind speed in m/s.

metadata()[source]#

Return the turbine configuration as a JSON-compatible dict.

rated_wind_speed is None when rated power is never reached.

Return type:

dict

power(wind_speed: float) → float[source]#
power(wind_speed: ArrayLike) → ndarray

Return the electrical power in watts at wind_speed in m/s.

Parameters:

wind_speed (ArrayLike)

Return type:

float | np.ndarray

property rated_wind_speed: float#

Wind speed where the first upward segment reaches rated_power.

Solved linearly on the tabulation. nan if never reached.

class oowl.Turbine[source]#

Wind turbine with power and thrust-coefficient curves.

The base of every OOWL turbine model. Wind speeds are in m/s, power in watts and heights and diameters in meters.

abstractmethod ct(wind_speed: float) → float[source]#
abstractmethod ct(wind_speed: ArrayLike) → ndarray

Thrust coefficient at one or more wind speeds.

Parameters:

wind_speed (ArrayLike)

Return type:

float | np.ndarray

abstractmethod power(wind_speed: float) → float[source]#
abstractmethod power(wind_speed: ArrayLike) → ndarray

Power in watts at one or more wind speeds.

Parameters:

wind_speed (ArrayLike)

Return type:

float | np.ndarray

abstract property rated_wind_speed: float#

Wind speed at which rated power is reached, nan if never.

save(path, **kwargs)[source]#

Write this turbine to path as a windIO turbine document.

Wraps oowl.save() and returns the written path. name defaults to the turbine’s name.

Parameters:
Return type:

Path