WIFA is an open-source multi-fidelity wind farm simulation framework that provides a unified interface to multiple flow modeling tools.
- Multi-fidelity support: Engineering wake models (PyWake, foxes), atmospheric perturbation model (wayve), and CFD (code_saturne)
- Unified interface: Same input format works with all tools via WindIO schema
- CLI and Python API: Run simulations from command line or integrate into workflows
- Flexible inputs: Time series, Weibull wind roses, turbine-specific conditions
- Comprehensive outputs: Turbine power, AEP, flow fields in NetCDF format
| Tool | Type | Speed | Use Case |
|---|---|---|---|
| PyWake | Engineering wake model | Fast | AEP estimation, layout optimization |
| foxes | Engineering wake model | Fast | Large farms, long time series |
| wayve | Atmospheric perturbation model | Medium | Gravity waves, farm blockage |
| code_saturne | CFD (RANS) | Slow (HPC) | Detailed flow analysis |
We recommend using uv for fast, reliable Python environment management:
# Install uv (if not already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Create environment and install WIFA
uv venv --python 3.11
source .venv/bin/activate
uv pip install wifaOr with pip:
pip install wifa# Using CLI
wifa examples/cases/windio_4turbines/wind_energy_system/system.yaml
# Tool-specific
wifa_foxes system.yaml
wifa_pywake system.yamlfrom wifa.main_api import run_api
# Run simulation (tool selected from YAML)
run_api("path/to/system.yaml")
# Or use tool-specific API
from wifa.foxes_api import run_foxes
results = run_foxes("system.yaml", engine="process", n_procs=4)WIFA uses WindIO-formatted YAML files:
# system.yaml
name: My Wind Farm Study
site: !include ../site/site.yaml
wind_farm: !include ../farm/farm.yaml
attributes:
flow_model:
name: foxes # or pywake, wayve, codesaturne
analysis: !include analysis.yaml
model_outputs_specification:
output_folder: "results"
turbine_outputs:
turbine_nc_filename: 'turbine_data.nc'See the documentation for complete schema details.
The examples/cases/ directory contains ready-to-run cases:
windio_4turbines- Basic 4-turbine examplesimple_wind_rose- Weibull wind rose inputheterogeneous_wind_rose_at_turbines- Per-turbine wind conditionstimeseries_with_operating_flag- Turbine availability modelingwindio_4turbines_ABL- Atmospheric boundary layer case- And more...
Full documentation: https://euflow.github.io/WIFA/
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Set up development environment:
uv venv --python 3.11 source .venv/bin/activate uv pip install -e ".[dev,test]"
- Make your changes
- Run tests:
pytest tests/ - Submit a pull request
If you use WIFA in your research, please cite:
@software{wifa2024,
title = {WIFA: Wind Farm API},
author = {EU-FLOW Consortium},
year = {2024},
url = {https://github.com/EUFLOW/WIFA}
}MIT License - see LICENSE for details.
WIFA is developed within the EU-FLOW project. The embedded tools are developed by:
- PyWake: DTU Wind Energy
- foxes: Fraunhofer IWES
- wayve: KU Leuven
- code_saturne: EDF
