Skip to content

Release 5.0.0#3260

Merged
andrew-platt merged 1287 commits intomainfrom
dev
Mar 12, 2026
Merged

Release 5.0.0#3260
andrew-platt merged 1287 commits intomainfrom
dev

Conversation

@andrew-platt
Copy link
Collaborator

@andrew-platt andrew-platt commented Mar 12, 2026

Feature or improvement description
Pull request to merge dev into main for release version 5.0.0

See the milestone and project pages for additional information

https://github.com/OpenFAST/openfast/milestone/6

Test results, if applicable
See GitHub Actions

Release checklist:

  • Update the documentation version in docs/conf.py
  • Update the versions in docs/source/user/api_change.rst
  • Update version info in openfast_io/pyproject.toml (openfast_io package)
  • Update version info in glue-codes/python/pyproject.toml (pyOpenFAST package for testing)
  • Verify readthedocs builds correctly
  • Create an annotated tag in OpenFAST during merge (mark as most recent if necessary)
  • Create a merge commit in r-test and add a corresponding annotated tag
  • Upload Docker image
  • Compile executables for Windows builds
    • AeroDisk_Driver_x64.exe
    • AeroDyn_Driver_x64.exe
    • AeroDyn_Driver_x64_OpenMP.exe
    • AeroDyn_Inflow_c_binding_x64.dll
    • AeroDyn_Inflow_c_binding_x64_OpenMP.dll
    • BeamDyn_Driver_x64.exe
    • DISCON.dll (x64)
    • DISCON_ITIBarge.dll (x64)
    • DISCON_OC3Hywind.dll (x64)
    • FAST.Farm_x64.exe
    • FAST.Farm_x64_OMP.exe
    • FAST_SFunc.mexw64
    • HydroDynDriver_x64.exe
    • HydroDyn_C_Binding_x64.dll
    • IinflowWind_c_binding_x64.dll
    • InflowWind_Driver_x64.exe
    • InflowWind_Driver_x64_OpenMP.exe
    • MoorDyn_Driver_x64.exe
    • MoorDyn_c_binding_x64.dll
    • OpenFAST-Simulink_x64.dll
    • openfast_x64.exe
    • SeaStateDriver_x64.exe
    • SeaState_c_binding_x64.dll
    • SimpleElastoDyn_x64.exe
    • SubDyn_x64.exe
    • Turbsim_x64.exe
    • UnsteadyAero_x64.exe

Release Overview


OpenFAST 5.0 delivers a major update to the glue code and introduces an implicit tight‑coupling solver for improved speed and stability. The revised glue code streamlines development by automating module interactions and supporting multiple solve methods, including the legacy loose‑coupling algorithm and a generalized‑alpha based tight‑coupling approach that solves structural modules together. With additional enhancements to the SubDyn, HydroDyn, and ExtPtfm modules, OpenFAST now supports modeling multiple rotors attached to a single support structure. Additional new features include hydroelastic super-elements, blade-pitch actuator dynamics, and a new SoilDyn module for soil-structure interaction. For MHK turbines, new features include wave-current superposition, added mass effects, and fluid-inertia loads.

FAST.Farm adds substantial performance improvements: a k‑d tree algorithm to accelerate wake interaction calculations; dynamic wake‑plane management improving propagation and visualization; dynamic partitioning of the low-resolution domain to neglect partitions without wakes; and wind file reader improvements including a significantly faster VTK inflow reader and a native AMReX wind file reader. These improvements lead to substantially reduced compuational time for very large wind farms.

Contribution Acknowledgements

Thanks to @deslaughter, @jjonkman, @bjonkman, @luwang00, @RBergua, and @mattEhall for numerous code reviews and suggestions and testing.

Many thanks to @jjonkman and others for theory development and guidance to developers.

Special thanks to @deslaughter for developing the new glue code framework during his ~4 year tenure at NREL/NLR. You will be greatly missed by all who had the privelage of working with you during this time.

Statistics (since 4.0.0)

  • Total PR's unique to 5.0.0: 59
  • Total unique commits: 1276
  • Total individual code contributors: 9
  • OpenFAST code/docs: 505 files changed, 137,399 insertions(+), 107,358 deletions(-)
  • regression tests: 1214 files changed, 970336 insertions(+), 74612 deletions(-)

Changelog


General

Build systems

There were several updates to the CMake and Visual Studio build systems to support code revisions and improve support for compilers such as Flang.

CMake

Minor updates to the CMake were included in various pull requests, but no major changes to the system setup itself.

Visual Studio (Windows)

The VS build system was completely overhauled to split modules out as separate projects.

#2814 Update VS Build dependencies for SeaState Changes (@deslaughter)

#2964 Update VS solution/project files (@deslaughter)

#3169 Update Visual Studio projects in dev-tc (@deslaughter)

#3258 Remove amrex_utils.cpp from AWAE-C.vcxproj (@deslaughter)

Documentation

There were multiple improvements to documentation, notably with the new tight coupling algorithm, ElastoDyn, and InflowWind.

#2929 Update SubDyn user documentation for the new multirotor capabilities (@luwang00)

#3043 Documentation of WHOC and ROSCO for super controller in FAST.Farm (@abhineet-gupta)

#3132 Update ED user manual with information on the new blade pitch DoF (@luwang00)

#3168 Docs: Fix typos in OutListParameters.xlsx (@RBergua)

#3225 Add User-defined wind documentation for InflowWind (@deslaughter)

#3244 Tight-coupling code documentation (@deslaughter)

#3255 Docs: add link to CSF tool and change NREL --> NLR in docs. (@andrew-platt)

Solvers

FAST.Farm

Input file changes

FAST.Farm delivers a significant performance upgrade with dynamic partitioning of the low resolution domain, compuationally efficient wake interaction with a k‑d tree approach across turbine and farm grids, and dynamic wake‑plane management ensuring wake planes propagate for an expected distance with a buffer region so the wakes do not end abruptly causing adverse loading of downstream turbines. The reading of wind data is also greatly improved with a new C++ VTK reader that cuts OpenMP overhead by 60–80%, and a native AMReX file reader to directly use AMReX-format wind precursors thereby simplifying AMR-Wind based workflows. Overall these modifications greatly improve the scalability and speed of calculation for large wind farm calculations.

OpenFAST

Major input file changes

OpenFAST 5.0 introduces a significantly revised glue code and solver which aims to streamline the development experience by automating and managing the module interactions and using a generalized-alpha based solver for structural modules. Each module now defines which input, output, and state variables are visible to the glue-code, along with their attributes and locations in the data structures, and the glue code decides what data to use for the time-domain solve and linearization. Users can define mesh mapping between modules in one location and the glue-code handles all the connections and transfers automatically. Even adding new modules is relatively straightforward and the user will generally receive error messages instead of segmentation faults when issues arise. The goal is to improve the developer experience through automation and the user experience through faster and more stable solutions. A journal paper will be published soon that explains the algorithmic details and the impact on OpenFAST's solution and performance.

With this restructuring, the glue-code now supports multiple solve methods including the loose-coupling algorithm used in earlier version of OpenFAST, as well as an implicit tight-coupling solve where all structural modules are solved together. With these changes and with changes to the SubDyn module, modeling of multiple rotors attached to a single structure is now possible.

Additional improvements to ExtPtfm and HydroDyn now support hydroelastic super-elements and linearization with platforms defined in the ExtPtfm module. Other improvements include

#2439 Tight-Coupling Algorithm for OpenFAST 5.0 (@deslaughter)

#2817 Incorrect mesh mapping between BeamDyn and ServoDyn for Blade Structural Controller (@deslaughter)

#2838 Multi-Rotor input file and glue-code changes (@deslaughter)

#2965 Missing BD Blade VTK Output in dev-tc (@deslaughter)

#2990 Updates to dev-tc: linearization visualization, bug fixes, sync with dev branch (@deslaughter)

#3115 Updated SD NPropSets to NPropSetsCyl and NPropSetsRec and fixed typos in the HD input file (@deslaughter)

#3125 Performance improvements in dev-tc (@deslaughter)

#3213 Include ServoDyn in Option 1 solve if structural controllers are enabled (@deslaughter)

#3261 Reduce module variables included in Option 1 solve with ServoDyn (@deslaughter)

Modules

Multiple modules

#3252 Remove unused registry entries (leftover from old lin method) (@andrew-platt)

AeroDyn

Driver input file changes
Input file changes
Blade input file changes

#2861 Add MHK loads to OLAF blade loads (@hkross)

#2945 [OLAF] Implementation of a source panel method (@ebranlard)

#3239 Fixed SeaState initialization in AeroDyn driver (@luwang00)

#3240 UA: adding quasi steady outputs to UA driver outputs (@ebranlard)

AWAE

As part of the overhaul of wind data handling in FAST.Farm, the AWAE module received a major overhaul with the inclusion of a k-d tree algorithm for wake interaction and wind domain calculations.

#3066 Use k-d tree to speed up wake application to high-res grid in AWAE (@deslaughter)

#3071 Various changes to the handling of wake planes (@luwang00)

#3074 Use C++ to read VTK inflow in AWAE (@deslaughter)

#3112 Move FAST.Farm K-d tree logic into AWAE_UpdateStates (@deslaughter)

#3238 Add AMReX-based inflow reader to AWAE for FAST.Farm (@deslaughter)

BeamDyn

Blade input file changes

BeamDyn now includes a modal damping option in the blade file.

#3105 Remove blade pitch actuator from BeamDyn and blade PitchAxis from ElastoDyn (@luwang00)

#3147 Modal damping (@JustinPorter88)

ElastoDyn

Input file changes
Blade input file changes

ElastoDyn updates include tower offset and a new blade pitch actuator model.

#2830 Add PtfmRefxt and PtfmRefyt in ElastoDyn to allow the tower to be offset from (0,0) (@luwang00)

#3039 Blade pitch dynamics and actuation (@luwang) [also changed ServoDyn]

#3114 ED blade input check, bug fix, and docs update (@luwang00)

#3253 ED: update blade file parser to allow arbitrary column locations (@andrew-platt)

ExtPtfm

Input file changes

ExtPtfm has been overhauled to handle large rigid-body motion, define structural connection points for mooring coupling, and accept prescribed force time series at those points (forces only; no moments), with redesigned input files.

#3210 Hydroelastic super-element capability for OpenFAST (@luwang00)

HydroDyn

Input file changes

HydroDyn now supports potential-flow bodies with extra generalized DOFs beyond 6 rigid-body modes for integration with improvements to ExtPtfm.

#3219 Added flexibility for strip-theory hydrostatic load calculation (@luwang00)

MoorDyn

#2972 Add in missing passing of SS pointer to MD during FAST init (@RyanDavies19)

NWTC-Library

Many NWTC-Library modifications were made as part of the development of tight coupling (included in those PRs).

#3233 NWTC Library: Adjust subroutines for converting between DCM and small angles (@bjonkman)

Registry

Registry modifications were made as part of the development of tight coupling (included in those PRs).

SeaState

Input file changes

SeaState module updates include wave-current superposition, turbulent currents modeled through InflowWind (MHK only), and a few other small improvements.

#2213 MHK wave-current superposition, added mass, inertia (@hkross)

#2906 SeaState: Allow WaveStMod=1 with WaveMod=0 (@luwang00)

#2978 Improved wave-current modeling in SeaState (@luwang00)

#3202 SeaState: Small change in WavePkShp logic (@RBergua)

#3231 SeaState: Small change in WaveTp logic (@RBergua)

ServoDyn

Input file changes

ServoDyn updates include a new 3 DOF TMD option, and minor improvements.

#2960 Add connection from ElastoDyn platform motion mesh to ServoDyn (@dzalkind)

#2970 Allow up to MaxStC outputs (@mayankchetan)

#3221 Enhancements to the structural control submodule of ServoDyn (@luwang00)

SoilDyn

New input file

The SoilDyn module primarily exists as a way to use the RedWin DLL from NGI for modeling soil interaction. This module also offers the option of a 6x6 stiffness and damping matrix connection to model soil interaction - however this capability is also available through SubDyn and may be more stable when used there.

#3126 Add SoilDyn to dev-tc (@deslaughter, @andrew-platt)

SubDyn

Input file changes

SubDyn now supports multiple transition pieces to enable multirotor wind and MHK turbine simulations. It also has the ability to solve the 6-DoF rigid-body motion of the floater internally with a user-selected reference joint. The latter is required for multirotor models but is optional for single-rotor models. However, when including the tower in SubDyn instead of ElastoDyn, enabling the SubDyn internal rigid-body solution can improve accuracy and stability even for single-rotor systems by allowing the user to select a rigid-body reference point near the floater center instead of at the tower-top interface joint. This minimizes the elastic deflection at the floater due to tower flexibility, thus improving the hydrodynamic and hydrostatic load calculations.
With the added support for multiple transition pieces, SubDyn output channels have been expanded to cover the loads and motion at up to nine transition pieces with backward-compatible channel name defaults if only one transition piece is used. Note that the actual number of transition pieces in the simulation is not limited.

A previous bug in SubDyn causing incomplete external load calculations for interface DOFs when the interface joint is part of a rigid assembly is now fixed by including loads on all nodes in the assembly. The inputs NPropSets have been changed to NPropSetsCyl and NPropSetsRec to remove non-unique fields and align with HydroDyn. Lastly, rectangular members can now be visualized using the viz3Danim tool.

#2782 SubDyn upgrade to support multiple transition pieces (@luwang00)

#2905 SD: Fix a bug where interface DoF loads are incomplete if the interface joint is part of a rigid assembly (@RBergua)

#3117 Updated SD NPropSets to NPropSetsCyl and NPropSetsRec and fixed typos in the HD input file (@luwang00)

#3195 SubDyn: add rectangular beam properties to JSON output (@RBergua)

#3205 Don't write to SubDyn output file if no outputs requested. (@deslaughter)

Testing and input file processing

There were several updates and improvements to the testing system and GitHub actions.

openfast_io

There were numerous incremental improvements to the openfast_io embeded in other PRs.

GitHub actions

There were numerous incremental improvements to the GH actions embeded in other PRs.

Regression and Unit testing

#3041 Add RM1 MHK Multi-Rotor examples to regression test suite (@deslaughter)

#3079 Add missing files for 5MW_MRSemi_DLL_WSt_WavesIrr regression test (@deslaughter)

#3113 Add IceDyn and IceFloe Regression Tests (@deslaughter)

#3173 Add aerodyn driver test for MHK turbine with IfW based inflow (@deslaughter)

#3215 Add a new r-test with blade pitch dynamics enabled (@luwang00)

Input file changes

This release brings a large number of input file changes and rearrangements with multiple new modules. A partial list of changes can be found here: https://openfast.readthedocs.io/en/main/source/user/api_change.html. However, we recommend that if you start by comparing to the complete set of input files found in the regression tests: https://github.com/OpenFAST/r-test/tree/v5.0.0 (example input files from the regression testing)

Known issues

There are several issues that have not been addressed in this release due to time constraints, but will be addressed in future releases. These include:

  • No visualization of rectangular members from HydroDyn or SubDyn through the VTK output options
  • Missing and broken features from several c-binding library interfaces:
    • the AeroDyn_Inflow_c-binding library interface does not allow for coupling to the tower. This will require an interface update.
    • the HydroDyn_c-binding library interface does not currently support vizualization. This will require an interface update.
    • the InitNodePositions input to HydroDyn_c-binding library interface does not currently work with any non-zero x or y coordinates (non-zero z is ok)
    • the MoorDyn_c-binding library interface does not currently support vizualization. This will require an interface update.
  • Documentation on the new pyOpenFAST module is incomplete. Partial documentation exists on how to use it in regression testing, but no documentation or examples exist on using it to call c-bindings modules from Python.
  • Documentation is incomplete for HydroDyn, SubDyn, and a few other modules.

Unknown issues

There are likely a few bugs in the code. If you find one, please report it along with a full description so that we can reproduce and fix it, or post a solution we can implement.

Precompiled Windows Binaries

The binary files in this release were built with the Visual Studio solution files distributed with OpenFAST (not using cmake), using

  • Intel Fortran Essentials 2025.3.0.333
  • Microsoft Visual Studio 2022 Version 17.14.23.
  • MATLAB 2025.2.999 (R2025b)
  • Executables with _OpenMP or _OMP in the name are built with OpenMP libraries and linked with dynamic libraries.

The other OpenFAST executables DO NOT require these redistributable libraries to be installed. Instead, they were built with static libraries.

JustinPorter88 and others added 30 commits January 28, 2026 12:07
…Vel(:, 1) to x%dqdt(4:6, 1) looks fine on manual test checks, but requires rebaselining.
Update Visual Studio projects in dev-tc
Merge dev branch into dev-tc branch
@andrew-platt andrew-platt self-assigned this Mar 12, 2026
@andrew-platt andrew-platt marked this pull request as ready for review March 12, 2026 21:11
Copy link
Collaborator

@deslaughter deslaughter left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Absolutely amazing work from everyone involved. It's quite the achievement!

Copy link
Collaborator

@jjonkman jjonkman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Years of work and the day has finally arrived! Excited that this is finally being released! Great work everyone!

Copy link
Contributor

@hkross hkross left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor detail, but with Lu's recent changes, we now have wave-current coupling rather than just wave-current superposition. This language could be changed in a couple spots in the PR description.

@andrew-platt
Copy link
Collaborator Author

andrew-platt commented Mar 12, 2026

Good catch! I'll update that while I wait for GH actions to actually work properly.

Updated it in the markdown file with 70694f1, but not above as I don't want to trigger GH actions again (its temperamental right now). The change will appear on the notes for the release itself.

@andrew-platt andrew-platt merged commit 2895884 into main Mar 12, 2026
48 of 53 checks passed
@andrew-platt
Copy link
Collaborator Author

Simulink was failing, but it is failing to start on the GH side. We saw something similar 6 months ago. We are confident no code changed since the last successful run with PR #3210, so we'll proceed with the release now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.