Wind Turbines

Wind Turbine Generator

Wind Turbine Generators (WTGs)

A .wtg file can be read using the windkit.read_wtg() function.

import windkit as wk
wtg = wk.read_wtg("Bonus_1_MW.wtg")
print(wtg)
<xarray.Dataset>
Dimensions:                        (mode: 1, wind_speed: 22)
Coordinates:
* wind_speed                     (wind_speed) float64 4.0 5.0 ... 24.0 25.0
* mode                           (mode) int64 0
Data variables:
    power_output                   (mode, wind_speed) float64 2.41e+04 ... 1e+06
    thrust_coefficient             (mode, wind_speed) float64 0.915 ... 0.161
    air_density                    (mode) float64 1.225
    stationary_thrust_coefficient  (mode) float64 0.161
    wind_speed_cutin               (mode) float64 4.0
    wind_speed_cutout              (mode) float64 25.0
    rated_power                    (mode) float64 1e+06
    name                           <U10 'Bonus 1 MW'
    rotor_diameter                 float64 54.2
    hub_height                     float64 50.0
    regulation_type                int64 2
Attributes:
    Conventions:      CF-1.8
    Package name:     windkit
    Package version:  0.6.4.dev32+g349fa3c
    Creation date:    2023-10-31T09:04:58
    author:           Bjarke Tobias Olsen
    author_email:     btol@dtu.dk
    institution:      DTU Wind Energy

The wtg xarray.Dataset format contains a number of variables and attributes. The most important variables are:

  • power_output: The power output of the wind turbine generator in W.

  • thrust_coefficient: The thrust coefficient of the wind turbine generator.

  • air_density: The air density in kg/m3.

  • stationary_thrust_coefficient: The stationary thrust coefficient of the wind turbine generator.

  • wind_speed_cutin: The cut-in wind speed of the wind turbine generator in m/s.

  • wind_speed_cutout: The cut-out wind speed of the wind turbine generator in m/s.

  • rated_power: The rated power of the wind turbine generator in W.

The power output and the thrust coefficient are functions of the wind speed and the mode of the WTG. The mode is used to distinguish between different operating conditions of the WTG. Each mode is associated with a set of operating conditions, such as varying air density, cut-in and cut-out wind speeds, and rated power etc. In the WTG object above there is only one mode available.

To manually create a wind turbine generator, a xarray.Dataset following format desribed above can be created:

import numpy as np
import xarray as xr

# Create a wind turbine generator
power_output = np.random.rand(1, 22) * 1e6
thrust_coefficient = np.random.rand(1, 22)
air_density = np.array([1.225])
stationary_thrust_coefficient = np.array([0.161])
wind_speed_cutin = np.array([4.0])
wind_speed_cutout = np.array([25.0])
rated_power = np.array([1e6])
name = "Bonus 1 MW"
rotor_diameter = 54.2
hub_height = 50.0
regulation_type = 2  # 1=stall, 2=pitch

wind_speed = np.linspace(4.0, 25.0, 22)
mode = np.array([0])

wtg = xr.Dataset(
    data_vars=dict(
        power_output=(["mode", "wind_speed"], power_output),
        thrust_coefficient=(["mode", "wind_speed"], thrust_coefficient),
        air_density=(["mode"], air_density),
        stationary_thrust_coefficient=(["mode"], stationary_thrust_coefficient),
        wind_speed_cutin=(["mode"], wind_speed_cutin),
        wind_speed_cutout=(["mode"], wind_speed_cutout),
        rated_power=(["mode"], rated_power),
        name=name,
        rotor_diameter=rotor_diameter,
        hub_height=hub_height,
        regulation_type=regulation_type,
    ),
    coords=dict(
        wind_speed=wind_speed,
        mode=mode,
    ),
)

The resulting WTG is very similar to the one read from file above (apart from the randomly generated data).

Wind Turbines object

Groups of wind turbines can be created in windkit by creating a a xr.Dataset object containing information about the positions, hub height, turbine id’s, turbine group id’s, and wtg keys for each turbine. The wtg keys are used to map from each turbine to a WTG xr.Dataset via a dictionary object. The turbines xr.Dataset can be created via the functions windkit.create_wind_turbines_from_arrays(), windkit.create_wind_turbines_from_dataframe(), or windkit.wind_turbines_to_geodataframe(). Here is a simple example of how to create the turbines xr.Dataset:

import windkit as wk

turbines = wk.create_wind_turbines_from_arrays(
    x=[0, 0, 0, 0, 0],
    y=[0, 1, 2, 3, 4],
    height=[50, 50, 50, 50, 50],
    crs="epsg:32632",
    turbine_ids=[1, 2, 3, 4, 5],
    group_ids=[0, 0, 1, 1, 1],
    wtg_keys=["wtg1", "wtg1", "wtg2", "wtg2", "wtg2"],
)

In this example, we have defined five turbines in two groups, with each group using a different WTG. The wtg keys (“wtg1” and “wtg2”), should exist in a dictionary that maps to the WTG xr.Dataset’s: {"wtg1": wtg1, "wtg2": wtg2}.