Conversation
…number in BD output file names.
…Vel(:, 1) to x%dqdt(4:6, 1) looks fine on manual test checks, but requires rebaselining.
Update Visual Studio projects in dev-tc
…OpenMP_Release for VS
Merge dev branch into dev-tc branch
…the call tries to read unallocated size. My mistake
…t results in race condition and failed tests in the CI
…ables in HydroDyn and ExtPtfm
…into f/superelement
Hydroelastic super-element capability for OpenFAST
release notes for v5.0.0
deslaughter
left a comment
There was a problem hiding this comment.
Absolutely amazing work from everyone involved. It's quite the achievement!
jjonkman
left a comment
There was a problem hiding this comment.
Years of work and the day has finally arrived! Excited that this is finally being released! Great work everyone!
hkross
left a comment
There was a problem hiding this comment.
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.
|
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. |
|
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. |
Feature or improvement description
Pull request to merge
devintomainfor release version 5.0.0See the milestone and project pages for additional information
Test results, if applicable
See GitHub Actions
Release checklist:
openfast_iopackage)pyOpenFASTpackage for testing)AeroDisk_Driver_x64.exeAeroDyn_Driver_x64.exeAeroDyn_Driver_x64_OpenMP.exeAeroDyn_Inflow_c_binding_x64.dllAeroDyn_Inflow_c_binding_x64_OpenMP.dllBeamDyn_Driver_x64.exeDISCON.dll (x64)DISCON_ITIBarge.dll (x64)DISCON_OC3Hywind.dll (x64)FAST.Farm_x64.exeFAST.Farm_x64_OMP.exeFAST_SFunc.mexw64HydroDynDriver_x64.exeHydroDyn_C_Binding_x64.dllIinflowWind_c_binding_x64.dllInflowWind_Driver_x64.exeInflowWind_Driver_x64_OpenMP.exeMoorDyn_Driver_x64.exeMoorDyn_c_binding_x64.dllOpenFAST-Simulink_x64.dllopenfast_x64.exeSeaStateDriver_x64.exeSeaState_c_binding_x64.dllSimpleElastoDyn_x64.exeSubDyn_x64.exeTurbsim_x64.exeUnsteadyAero_x64.exeRelease 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)
Changelog
General
Build systems
There were several updates to the
CMakeand 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.cppfrom 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
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
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
#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
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
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
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
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
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
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
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
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_ioembeded 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_WavesIrrregression 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:
InitNodePositionsinput to HydroDyn_c-binding library interface does not currently work with any non-zeroxorycoordinates (non-zerozis ok)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
_OpenMPor_OMPin 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.