How the coupling works

GALE puts wind turbines into an ERF flow. OpenFAST computes each turbine’s aerodynamics and structural response; ERF supplies the wind and carries the wake. The loads come from OpenFAST’s blade-element solution on the turbine’s own blade and tower nodes, not from a thrust curve as in ERF’s wind farm models.

The coupling step

Sampling the flow, stepping OpenFAST, spreading the forces back.

The coupling step
Actuator disk

Rings, sampling modes and the corrected disk. Also the prescribed-Ct disk.

Actuator disk
Actuator line

Moving blade lines, the tip-travel limit and the filtered lifting-line correction.

Actuator line
Tower, nacelle and kernel widths

How to choose each kind of point’s width.

Tower, nacelle and kernel widths
Meshes and levels

Terrain, the anchor level and the force on coarser levels.

Meshes and levels
Parallel runs

Who owns a turbine, what is exchanged, and why results do not depend on the ranks.

Parallel runs
Run life cycle

Start-up audit, diagnostics, statistics, checkpoints and timing.

Run life cycle

Code layout

  • Turbines/ERF_GaleTurbineModel.cpp is the structure model gale (ERF’s structure coupling). It is compiled in as any structure model is (Turbines/ERFStructureModel.cmake, Turbines/Make.package) and selected with erf.structures.model = gale.

  • Source/MovingBodies/Core in ERF is the actuator core: sampling, spreading, wake lines, running statistics. GALE uses it unchanged.

  • Turbines/GaleCore holds what GALE adds to the core: the exchange of a body’s points with the ranks it touches (BodyExchange), a kernel’s normalisation summed on one rank, the tip-travel cell heights, the phase timers, logs for many bodies per rank (LogStreams), owner-written wake lines and statistics (OwnedWakeLines, OwnedRunningStats), and the conversion of an old checkpoint’s face forces (ActuatorRestriction).

ERF calls the model at the times it calls every structure model. It starts the bodies once the mesh exists, steps them at each step of their level, and adds their momentum source on that level. It then restricts that source onto the coarser levels, writes it to <chk>/StructureCoarseSource, and stops the run when a finer level covers the bodies.

Uniform-dz meshes

On a uniform-dz mesh ERF hands a structure model no heights or Jacobian. The model then gives the bodies the flat node heights prob_lo z + k dz and a Jacobian of 1, the values ERF holds on such a mesh. The bodies take the same code path on every mesh.