Overview: Wind Power Workflows

Overview: Wind Power Workflows#

This example demonstrates how to use each of the three wind power workflows provided by RESKit.

Workflow:

  1. Import required packages

  2. Simulates wind turbine locations onshore and offshore using ECMWF’s ERA5 database [1], with an optional correction loop to ensure that generated capacity factors for historic wind fleets meet reported generation/capacity based on Renewables Market Report [2] by the International Energy Agency (IEA).

  3. Simulates onshore wind generation in Europe using NASA’s MERRA2 database

  4. Simulates offshore wind generation using NASA’s MERRA2 database

import reskit as rk
import pandas as pd
### placement includes predefined capacity, hub height, rotor diameter and location (lon, lat) for different wind turbines
xds = rk.wind.wind_era5_PenaSanchezDunkelWinklerEtAl2025(
    placements=pd.read_csv(rk.TEST_DATA["turbine_placements.csv"]),
    era5_path=rk.TEST_DATA["era5-like"],
    gwa_100m_path=rk.TEST_DATA["gwa100-like.tif"],
    height_scaling_data={
        50: rk.TEST_DATA["gwa50-like.tif"],
        200: rk.TEST_DATA["gwa200-like.tif"],
    },
)

# Mean value and standard deviation of the capacity factor across all placements
xds["capacity_factor"].values.mean(), xds["capacity_factor"].values.std()
2026-05-06 09:38:54.070349 Now extracting correction factors for a total of 560 placements from /home/docs/checkouts/readthedocs.org/user_builds/ethos-reskit/checkouts/latest/reskit/wind/core/data/cf_correction_factors_PSDW2025.tif:
2026-05-06 09:38:54.137047 Based on max_batch_size=560, the total of 560 placements were split into 1 sub batches. Proceeding with batch 1/1 (id=0) with 560 placements.
2026-05-06 09:38:54.140299 Maximum rel. deviation after initial simulation is 0.2742, Number/share of placements with deviation > tolerance (0.01): 560/560. More iterations required.
2026-05-06 09:38:54.144193 Maximum rel. deviation after 1 additional iteration(s) is 0.0803, Number/share of placements with deviation > tolerance (0.01): 560/560. More iterations required.
2026-05-06 09:38:54.147126 Maximum rel. deviation after 2 additional iteration(s) is 0.0236, Number/share of placements with deviation > tolerance (0.01): 536/560. More iterations required.
2026-05-06 09:38:54.150053 Required tolerance of 0.01 reached after 3 additional iteration(s). Maximum remaining rel. deviation: 0.0099.
(0.248575775, 0.26940074975331707)
xds = rk.wind.onshore_wind_merra_ryberg2019_europe(
    placements=pd.read_csv(rk.TEST_DATA["turbine_placements.csv"]),
    merra_path=rk.TEST_DATA["merra-like"],
    gwa_50m_path=rk.TEST_DATA["gwa50-like.tif"],
    clc2012_path=rk.TEST_DATA["clc-aachen_clipped.tif"],
)

xds["capacity_factor"].values.mean(), xds["capacity_factor"].values.std()
2026-05-06 09:38:55.074608 Based on max_batch_size=560, the total of 560 placements were split into 1 sub batches. Proceeding with batch 1/1 (id=0) with 560 placements.
2026-05-06 09:38:55.077957 Required tolerance of 0.01 reached after 0 additional iteration(s). Maximum remaining rel. deviation: 0.0.
(0.40453476151581985, 0.33833291495805234)
xds = rk.wind.offshore_wind_merra_caglayan2019(
    placements=pd.read_csv(rk.TEST_DATA["turbine_placements.csv"]),
    merra_path=rk.TEST_DATA["merra-like"],
)

xds["capacity_factor"].values.mean(), xds["capacity_factor"].values.std()
2026-05-06 09:38:55.850191 Based on max_batch_size=560, the total of 560 placements were split into 1 sub batches. Proceeding with batch 1/1 (id=0) with 560 placements.
2026-05-06 09:38:55.853035 Required tolerance of 0.01 reached after 0 additional iteration(s). Maximum remaining rel. deviation: 0.0.
(0.5903571299452285, 0.33158702401102186)