ETHOS.RESKit - Renewable Energy Simulation Toolkit¶
Broad-scale renewable energy simulation for energy system models — millions of individual units in minutes.
ETHOS.RESKit aids with the broad-scale simulation of renewable energy systems, primarily for the purpose of input generation to Energy System Design Models. Simulation tools currently exist for onshore and offshore wind turbines, as well as for solar photovoltaic (PV) systems and concentrated solar power (CSP), in addition to general weather-data manipulation tools. Simulations are performed in the context of singular units, however high computational performance is nevertheless maintained. As a result, this tool allows for the simulation of millions of individual turbines and PV/CSP systems in a matter of minutes depending on the hardware.
ETHOS.RESKit is part of the Energy Transformation PatHway Optimization Suite (ETHOS) at ICE-2. It builds on ETHOS.GeoKit for its geospatial operations, and the time series it simulates are a common input to energy system models such as ETHOS.FINE.
Features¶
- High performance unit-level wind turbine, PV module and CSP simulations
- Can generate synthetic wind turbine power curves
- Access to all PV modules in the most recent databases from Sandia and the California Energy Commission (CEC)
- Configurable to make use of different climate model datasets
- Allows correction to real national capacity factor averages
- Flexible & modular function designs
Installation¶
For Users (Application Only)¶
1 a) If you do not have an existing conda/mamba environment:
1 b) If you have an existing environment, install ETHOS.RESKit into it:
2 ) Activate the environment:
3 a) Get the ETHOS.RESKit source code (including examples):
3 b) If you do not have Git and just want to check the examples, download and extract the source code with this link:
https://github.com/FZJ-IEK3-VSA/RESKit/archive/refs/heads/master.zip
For Developers¶
Please follow these steps for an editable installation:
1 ) Clone and checkout dev:
2 a) ETHOS.RESKit should be installable to a new environment with:
2 b) (Alternative) Or into an existing environment with:
3 ) Install an editable version of reskit (when in the reskit folder) via
Getting Started¶
Preparing Weather Data¶
ETHOS.RESKit workflows are driven by gridded weather data. ETHOS.RESKit ships a single
high-level helper, rk.download_and_process, that downloads exactly the variables a
given workflow needs from the relevant data provider, preprocesses them (e.g. wind
speed from u/v components, solar unit and time-shift corrections), and optionally
tiles them into the <zoom>/<x>/<y>/<year>/ directory structure expected by the
weather sources.
ERA5 reanalysis from the Copernicus Climate Data Store (CDS) is currently the supported source; additional weather data sources are planned.
import reskit as rk
result = rk.download_and_process(
workflow="wind_era5_PenaSanchezDunkelWinklerEtAl2025",
start_date="2000-01-01",
end_date="2000-12-31",
boundary_box={"north": 55, "south": 47, "west": 6, "east": 15}, # Germany
output_dir="/path/to/your/weather_data",
tiling=True,
)
print(result["era5_path"])
To prepare data for several workflows in a single call, pass a list of workflow names
as workflow; the union of their variable requirements is downloaded and processed at
once, e.g. workflow=["openfield_pv_era5", "CSP_PTR_ERA5"]. A CDS account with a
configured ~/.cdsapirc API key is required for ERA5
(see https://cds.climate.copernicus.eu/how-to-api).
Note that some workflows also rely on data whose automated download is not yet
implemented — solar/CSP workflows on Global Solar Atlas rasters and wind workflows
on Global Wind Atlas rasters. download_and_process prints a notice for these and
you must supply the rasters manually.
Reading ERA5 from Zarr¶
ETHOS.RESKit can read ERA5 directly from regular latitude/longitude Zarr stores while keeping the existing source_type="ERA5" workflow API. The current implementation is intended for stores such as the Earth Data Hub ERA5 single-level dataset:
Earth Data Hub requires authentication. Follow the credential instructions on the linked dataset page and save the generated credentials as ~/.netrc (not in a directory on PATH). On shared systems, restrict access with chmod 600 ~/.netrc. The HTTPS backend will use those credentials automatically.
wf.read(
variables=["surface_pressure", "surface_air_temperature", "elevated_wind_speed"],
source_type="ERA5",
source="https://data.earthdatahub.destine.eu/era5/reanalysis-era5-single-levels-v0.zarr",
chunks={"valid_time": 48},
time_slice=slice("2020-01-01", "2020-01-31 23:00:00"),
set_time_index=True,
)
Current limitations:
- The implementation only supports regular (time|valid_time, latitude, longitude) Zarr layouts, not flattened values-based ERA5 archives.
- If the Zarr store does not ship ETHOS.RESKit's processed ssrd_t_adj and fdir_t_adj fields, global_horizontal_irradiance and direct_horizontal_irradiance fall back to processing the raw ssrd and fdir on the fly.
Example notebooks¶
End-to-end examples live in examples/1_load_input_data/: - 1_1_3_prepare_era5_for_wind_workflow.ipynb - 1_1_4_prepare_era5_for_solar_workflow.ipynb
For full manual control over the raw ERA5/CDS download (variables, area, and timeframe), see the lower-level example notebook 1_1_1_how_to_download_era5_data.ipynb.
Citation¶
If you decide to use ETHOS.RESKit anywhere in a published work related to wind energy, please kindly cite us using the following publications.
When using the ETHOS.RESKit.Wind workflow please cite:
@article{PenaSanchezDunkelWinklerEtAl2026,
title = {Towards High Resolution, Validated and Open Global Wind Power Assessments},
author = {{Pe{\~n}a-S{\'a}nchez}, E. U. and Dunkel, P. and Winkler, C. and Heinrichs, H. and Prinz, F. and Weinand, J. M. and Maier, R. and Dickler, S. and Chen, S. and Gruber, K. and Kl{\"u}tz, T. and Lin{\ss}en, J. and Stolten, D.},
year = 2026,
month = jan,
journal = {Nature Communications},
volume = {17},
number = {1},
pages = {539},
issn = {2041-1723},
doi = {10.1038/s41467-026-68337-z},
url = {http://dx.doi.org/10.1038/s41467-026-68337-z},
}
When using anything else:
@article{RybergWind2019,
author = {Ryberg, David Severin and Caglayan, Dilara Gulcin and Schmitt, Sabrina and Lin{\ss}en, Jochen and Stolten, Detlef and Robinius, Martin},
doi = {10.1016/j.energy.2019.06.052},
issn = {03605442},
journal = {Energy},
month = {sep},
pages = {1222--1238},
title = {{The future of European onshore wind energy potential: Detailed distribution and simulation of advanced turbine designs}},
url = {https://linkinghub.elsevier.com/retrieve/pii/S0360544219311818},
volume = {182},
year = {2019}
}
Contributions and Support¶
All contributions are welcome: - If you want to report a bug, please open an Issue. We will then take care of the issue as soon as possible. - If you want to contribute with additional features or code improvements, open a Pull request.
License¶
The source code in this repository is licensed under: MIT License Copyright (c) 2019-2025 FZJ-ICE-2
The data files cf_correction_factors_PSDW2025.tif and ws_correction_factors_PSDW2025.yaml are licensed under CC-BY-4.0
You should have received a copy of the MIT License along with this program.
If not, see https://opensource.org/licenses/MIT
About Us¶
We are the Institute of Climate and Energy Systems – Jülich Systems Analysis (ICE-2) at the Forschungszentrum Jülich. Our work focuses on independent, interdisciplinary research in energy, bioeconomy, infrastructure, and sustainability. We support a just, greenhouse gas–neutral transformation through open models and policy-relevant science.
Code of Conduct¶
Please respect our code of conduct.
Acknowledgments¶
This work was initially supported by the Helmholtz Association under the Joint Initiative "Energy System 2050 A Contribution of the Research Field Energy".