DiffWake: differentiable wind farms

A differentiable wind farm solver in JAX for layout optimization and calibration.

A wind turbine slows the air behind it, and that slower, more turbulent wake reduces the power of any turbine downstream. Predicting and managing these wake losses is central to how wind farms are laid out and operated. Engineers have good physical wake models for this, but they were not written to be differentiated, which shuts them out of gradient-based optimization and calibration.

DiffWake rebuilds this machinery so that gradients flow through it. It is a general differentiable wind farm solver in JAX, and it includes the first differentiable implementation of the cumulative-curl wake model (Bånkestad et al., 2025). Once the simulation is differentiable, two hard problems turn into gradient descent.

The first is layout optimization: where to place turbines to maximize power. With gradients, L-BFGS converges on a layout about fifty times faster than a FLORIS and SciPy baseline. The second is calibration: the models have parameters, such as turbulence intensity, that must be inferred from operational data. DiffWake makes it possible to calibrate these directly against real SCADA measurements by following the gradient.

Wake velocity field behind three turbines. Because the solver is differentiable, gradients flow through this simulation for optimization and calibration.

Publications

2025

  1. EurIPS-W
    diffwake_overview.png
    DiffWake: A General Differentiable Wind Farm Solver in JAX
    Maria Bånkestad, Leon Sütfeld, Aleksis Pirinen, and 1 more author
    In Workshop on Differentiable Systems and Scientific Machine Learning (EurIPS) , 2025