Skip to content

Conversation

@andrew-platt
Copy link
Collaborator

Feature or improvement description
Pull request to merge dev into main and create a tagged release for v4.2.0

See the milestone and project pages for additional information

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

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


Contribution Acknowledgements

Statistics (since X.Y.Z)

Changelog (from X.Y.Z)


#3133 [Bug Fix] Fix the element size calculation in AeroAcoustics module (@bjonkman)

#3144 [Bug Fix] Fix the element size calculation in AeroAcoustics module (@andrew-platt)

#3145 WD: Ct_avg was not set when polar wake used giving RtCtAvgT (@andrew-platt)

Issue #2947 Reenable use of MAP when using Checkpoint files. (@deslaughter)

Issue #2979 Docs: remove references to pfunit (@andrew-platt)

General

Build systems

CMake

#3163 AA driver: add driver compile to cmake (@andrew-platt)

Visual Studio (Windows)

#2922 Update Visual Studio compile settings for C Binding interfaces (@rafmudaf)

Documentation

#3015 Fix readthedocs copyright year, add link to docs when calling openfast help (@mayankchetan)

#3083 docs: update info on VS versions and IFX

#3109 Docs: updates to StC docs (@andrew-platt)

#3166 Update project description from NREL to NLR (@andrew-platt)

Solvers

FAST.Farm

#2952 FAST.Farm: skip writing invalid VTK slices (@andrew-platt)

#3031 FF: align initial wake grid with the blades (@andrew-platt)

#3104 FF WAT: change default WAT_Scalebox to True (@andrew-platt)

OpenFAST

#3009 Linearization: Fix pointer to dUdy block for SD inputs to MAP outputs (@bjonkman)

#3111 Add error message when using BeamDyn with AeroMap (@deslaughter)

#3146 Reenable writing check point files when using the MAP module (@deslaughter)

#3156 Linear Trim Solution: update range calculation when NLinTimes=1 (@bjonkman)

OpenFAST interfaces

OpenFAST library

#2965 FASTlib: missing error handling on FAST_CFD_WriteOutput (@andrew-platt)

#3064 FASTlib: fix typo in error message

c-bindings interfaces

#2974 Add registry file for AeroDyn_Inflow_C_Binding (@andrew-platt)

#2997 Updates to SeaState c-bindings library interface (@andrew-platt)

#3108 Updates to c-bindings (@andrew-platt)

Modules

Multiple

#2975 Minor numerical improvements (@bjonkman)

AeroDyn

AeroAcoustics

#2948 AeroAcoustics code cleanup (@bjonkman)

#3134 [BUG FIX] AeroAcoustics module angle range (@bjonkman)

#3149 AeroAcoustics cleanup + added driver code (@bjonkman)

AWAE

#3025 [BugFix] FF awae: set v_plane=0 when center of wake plane leaves domain (@andrew-platt)

ElastoDyn

#2953 ED: Implemented the ability to add concentrated masses to the tower (@luwang00)

#2981 Allow separate teeter inertia for 2-bladed turbines (@abhineet-gupta)

HydroDyn

#2895 HD: Additional transverse drag modeling options for rectangular members (@luwang00)

#3076 Miscellaneous bug fixes for HydroDyn (@luwang00)

#3141 HD: Fixed a bug with PtfmRefztRot (@luwang00)

InflowWind

#3099 ifw flowfield: add box corners to out of bounds message on 4D (@andrew-platt)

MoorDyn

#2946 Changed submergence calculation and added additional rod outputs for input file MoorDyn (@KylerF229)

#2977 Minor MoorDyn improvements (@ryandavies)

#3034 MoorDyn: increase number of attachment points possible for bodies/anchors/points

NWTC-Library

#3148 NWTC Library: update error message with IOSTAT return value (@bjonkman)

SeaState

#3007 Cubic interpolation for SeaState and HydroDyn (@luwang00)

ServoDyn

#3158 SrvD: updates to StC control from DLL (@andrew-platt)

TurbSim

#3020 TurbSim: OpenMP parallelization in factorization and FFT

Wavetank

#3065 New wavetank library for HIL simulations with AD+MD (@andrew-platt)

Testing and input file processing

openfast_io

#2957 More MoorDyn Output Channels in openfast-io chans (@dzalkind)

#3001 prepping for py314 and making requirements less restrictrive (@gbarter)

#3130 Fix FAST_Reader bug when ElastoDyn tower file path is absolute (@louis-papillon)

#3153 FAST_reader.py fix for ServoDyn.dat GenTrq_TLU read (@LKa505)

GitHub actions

#3162 Fix simulink build for Windows in GH Actions (@andrew-platt)

Regression and Unit testing

#3159 Add in yaw friction cases (@andrew-platt)

Input file changes

[TBD] -- there are changes, but not listed in the changelog for some reason. Will add shortly

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.

andrew-platt and others added 30 commits September 4, 2025 17:05
to use, add "ISO_C_BINDING" by itself on a line someplace in the registry text file
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Registry: add basic ISO_C_BINDING types
- removed: output channel handling from interface (unnecessary as will pipe to file instead)
- make wavefield pointer setting private
- add a registry file for new data organization (not included in build process yet)
- remove ADI_HH_Vel from interface (may add later if needed)
- remove extra `IMPLICIT NONE` statements
- change name SeaSt_GetWaveFieldPointer_C to SeaSt_C_GetWaveFieldPointer (matches convention elsewehre)
- SeaSt_C_GetFluidVelAccDens
- SeaSt_C_GetSurfElev
…eVelAcc

- add acceleration output (similar to `dev-tc` usage)
- I don't see anything that directly uses this.
- SeaSt_C_GetWaveFieldPointer - convert to subroutine, add error handling, add DebugLevel
- SeaSt_C_SetWaveFieldPointer - new routine
- python lib: revisions to support above, and also to support a new regression test (in progress)
andrew-platt and others added 23 commits January 16, 2026 16:17
When linearizing with a trim solution and NLinTimes=1, the range of the reference outputs was always 0.01. Now it uses the channel value. This could probably be modified further, but for now, it gives a slightly better "range"
Linear Trim Solution: update range calculation when NLinTimes=1
Update comments and add warning for now StC channel requested
FAST_reader.py fix for ServoDyn.dat GenTrq_TLU read
NOTE: DLL interface does not support moments, but one user added a pipe in this location for applying forces/moments.  The addition of this logic makes moments from a pipe possible
SrvD: updates to StC control from DLL
These were not getting included in testing for some reason.
Fix simulink build for Windows in GH Actions
AeroAcoustics cleanup + added driver code
Minor correction to AA_driver_subs: changed `storage` array to `ReKi` so it will work with the binary writer
AA driver: add driver compile to cmake
@andrew-platt andrew-platt self-assigned this Jan 23, 2026
@andrew-platt andrew-platt marked this pull request as draft January 23, 2026 00:43
@andrew-platt
Copy link
Collaborator Author

andrew-platt commented Jan 23, 2026

Update the following before merging this:

Update project description from NREL to NLR
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This pull request merges the dev branch into main to create the OpenFAST v4.2.0 release. The release includes numerous bug fixes, new features, and improvements across multiple modules including AeroDyn, HydroDyn, MoorDyn, SeaState, and others. Key changes include enhanced structural tuned mass control, improved wave field handling, new wavetank library for hardware-in-the-loop testing, and various code quality improvements.

Changes:

  • Bug fixes across multiple modules (AeroAcoustics, FAST.Farm, OpenFAST linearization, WakeDynamics)
  • New features including wavetank library, rectangular member drag modeling in HydroDyn, and enhanced StC control
  • Documentation updates for copyright year, installation instructions, and module-specific guidance
  • Build system improvements for Visual Studio and CMake configurations

Reviewed changes

Copilot reviewed 108 out of 181 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
vs-build/SeaState_c_binding/SeaState_c_binding.vfproj Added GridInterp files and reorganized filter structure for SeaState c-binding
vs-build/SeaState/SeaStateDriver.vfproj Added GridInterp files for SeaState driver
vs-build/RunRegistry.bat Added registry generation for GridInterp and ADI_cbind
vs-build/ReadMe.md Updated NREL reference to historical context
vs-build/MoorDyn/MoorDynDriver.vfproj Added GridInterp files and corrected registry base file reference
vs-build/HydroDyn/HydroDynDriver.vfproj Added GridInterp files and corrected registry base file reference
vs-build/FASTlib/FASTlib.vfproj Added GridInterp files
requirements.txt Added nptdms dependency
reg_tests/r-test Updated submodule commit reference
reg_tests/executeWavetankPyRegressionCase.py New test driver for wavetank python regression testing
reg_tests/executeSeaStatePyRegressionCase.py New test driver for SeaState python regression testing
reg_tests/CTestList.cmake Added new regression test cases and functions
openfast_io/pyproject.toml Updated email domains and Python version support
openfast_io/turbsim_util.py Added file close call
openfast_io/FAST_writer.py Added HubIner_Teeter parameter and file sync operations
openfast_io/FAST_vars_out.py Simplified MoorDyn output channel definitions using loop
openfast_io/FAST_reader.py Added HubIner_Teeter reading and fixed GenTrq_TLU array indexing
openfast_io/README.md Updated ROSCO repository URL
modules/wakedynamics/src/WakeDynamics_Registry.txt Removed commented-out code
modules/wakedynamics/src/WakeDynamics.f90 Improved error handling in UpdateStates
modules/version/tests/VersionInfo_test_tools.F90 Changed stdout to use CU constant directly
modules/servodyn/src/StrucCtrl_Registry.txt Added InitMoment, M_ext, and CmdMoment fields
modules/servodyn/src/ServoDyn_Registry.txt Added PrevStCCmdMoment and StCCmdMoment fields with corrected units
modules/seastate/src/SeaState_Types.f90 Replaced SeaSt_WaveField types with GridInterp types
modules/seastate/src/SeaState_Output.f90 Changed grid depth reference and file handle check
modules/seastate/src/SeaState_DriverCode.f90 Added WaveTimeShift initialization
modules/seastate/src/SeaState.txt Added WaveTimeShift parameter and changed to GridInterp types
modules/seastate/src/SeaState.f90 Implemented WaveTimeShift validation and separate surface/volume grid parameters
modules/seastate/src/SeaSt_WaveField.txt Replaced grid parameters with GridInterp types
modules/seastate/CMakeLists.txt Restructured c-binding library build to separate object, shared, and static libraries
modules/openfast-registry/src/registry_gen_fortran.cpp Added ISO_C_BINDING support and removed C_obj packing checks
modules/openfast-registry/src/registry.hpp Added ISO_C_BINDING type support
modules/openfast-library/src/FAST_Subs.f90 Added WaveTimeShift initialization and improved error messages
modules/openfast-library/src/FAST_SS_Subs.f90 Added BeamDyn compatibility check and simulation status call
modules/openfast-library/src/FAST_Lin.f90 Fixed linearization bugs and improved NLinTimes=1 handling
modules/openfast-library/src/FAST_Library.f90 Added error handling to FAST_CFD_WriteOutput
modules/nwtc-library/tests/NWTC_Library_test_tools.F90 Changed stdout to use CU constant directly
modules/nwtc-library/src/VTK.f90 Fixed argument order in ReadVTK_SP_info
modules/nwtc-library/src/Sys*.f90 Changed CU from PARAMETER to PUBLIC variable and added SetConsoleUnit subroutine
modules/nwtc-library/src/NetLib/slatec/NWTC_SLATEC.f90 Fixed intent declarations and comment
modules/nwtc-library/src/ModMesh.f90 Changed DCM_logMap to EulerExtract
modules/nwtc-library/src/GridInterp.txt New registry file for grid interpolation
modules/nwtc-library/CMakeLists.txt Added GridInterp source files
modules/moordyn/src/MoorDyn_Point.f90 Added error handling to Point_AddLine
modules/moordyn/src/MoorDyn_Misc.f90 Fixed wave direction usage and improved code clarity
modules/moordyn/src/MoorDyn_Line.f90 Improved warning messages and error handling
modules/moordyn/src/MoorDyn_Body.f90 Added error handling to Body_AddPoint and Body_AddRod
modules/moordyn/README.md Updated documentation link
modules/moordyn/CMakeLists.txt Restructured c-binding library build
modules/map/src/MAP_Types.f90 Removed C_obj packing checks
modules/inflowwind/src/IfW_FlowField.f90 Improved out-of-bounds error messages
modules/hydrodyn/src/WAMIT*.f90 Replaced SeaSt_WaveField types with GridInterp types
modules/hydrodyn/src/WAMIT*.txt Updated to use GridInterp types
modules/hydrodyn/src/SS_Excitation*.f90 Replaced SeaSt_WaveField types with GridInterp types
modules/hydrodyn/src/Morison_Output.f90 Added flipped member handling
modules/hydrodyn/src/Morison.txt Added rectangular member drag parameters
modules/hydrodyn/src/HydroDyn_C_Binding.f90 Improved node checking and added documentation
modules/hydrodyn/src/HydroDyn.txt Fixed formatting
modules/extloads/src/ExtLoadsDX_Types.f90 Removed C_obj packing checks
modules/externalinflow/src/ExternalInflow_Types.f90 Removed C_obj packing checks
modules/elastodyn/src/ElastoDyn_Registry.txt Added HubIner_Teeter and tower concentrated mass parameters
modules/awae/src/AWAE_Registry.txt Added planeDomainExit and valid plane flags
modules/aerodyn/src/AirfoilInfo.f90 Changed function call to subroutine call
modules/aerodyn/src/AeroDyn_Types.f90 Removed AA continuous and constraint states
modules/aerodyn/src/AeroDyn_Registry.txt Removed AA state types
modules/aerodyn/src/AeroDyn_Inflow*.f90 Added external InflowWind support
modules/aerodyn/src/AeroDyn_Driver_Subs.f90 Improved variable naming and MHK handling
modules/aerodyn/src/AeroDyn_AllBldNdOuts_IO.f90 Fixed output indexing
modules/aerodyn/src/AeroAcoustics_TNO.f90 Added PRIVATE scope and improved variable naming
modules/aerodyn/CMakeLists.txt Restructured library organization and added c-binding static library
glue-codes/simulink/CMakeLists.txt Added aeroacousticslib dependency
glue-codes/python/pyproject.toml Updated dependencies and Python version support
glue-codes/python/pyOpenFAST/*.py Updated to use interface_abc base class
glue-codes/python/examples/*.py Updated examples
glue-codes/openfast/CMakeLists.txt Removed trailing blank lines
glue-codes/labview/* New wavetank testing library files
glue-codes/fast-farm/src/*.f90 Improved WAT initialization and summary output
docs/* Documentation updates for copyright, installation, and module usage
CMakeLists.txt Added MKL threading configuration
.github/workflows/*.yml Updated Intel compiler installation and test artifacts
README.rst Updated organization references

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +167 to +169
engineers at the `National Laboratory of the Rockies <http://www.nlr.gov/>`_
(NLR), with support from the US Department of Energy's Wind Energy Technology
Office. NLR gratefully acknowledges development contributions from the following
Copy link

Copilot AI Jan 23, 2026

Choose a reason for hiding this comment

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

The URL 'http://www.nlr.gov/' and organization name appear incorrect. Should be 'http://www.nrel.gov/' for National Renewable Energy Laboratory.

Suggested change
engineers at the `National Laboratory of the Rockies <http://www.nlr.gov/>`_
(NLR), with support from the US Department of Energy's Wind Energy Technology
Office. NLR gratefully acknowledges development contributions from the following
engineers at the `National Renewable Energy Laboratory <http://www.nrel.gov/>`_
(NREL), with support from the US Department of Energy's Wind Energy Technology
Office. NREL gratefully acknowledges development contributions from the following

Copilot uses AI. Check for mistakes.
Comment on lines +33 to +37
OpenFAST is primarily developed with the support of the U.S. Department of Energy and is part of the `WETO Software Stack <https://NatLabRockies.github.io/WETOStack>`_. For more information and other integrated modeling software, see:

* `Portfolio Overview <https://nrel.github.io/WETOStack/portfolio_analysis/overview.html>`_
* `Entry Guide <https://nrel.github.io/WETOStack/_static/entry_guide/index.html>`_
* `OpenFAST Workshop <https://nrel.github.io/WETOStack/workshops/user_workshops_2024.html#openfast-ecosystem>`_
* `Portfolio Overview <https://NatLabRockies.github.io/WETOStack/portfolio_analysis/overview.html>`_
* `Entry Guide <https://NatLabRockies.github.io/WETOStack/_static/entry_guide/index.html>`_
* `OpenFAST Workshop <https://NatLabRockies.github.io/WETOStack/workshops/user_workshops_2024.html#openfast-ecosystem>`_
Copy link

Copilot AI Jan 23, 2026

Choose a reason for hiding this comment

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

The GitHub organization 'NatLabRockies' in the WETO Stack URLs appears incorrect. Should likely be 'nrel' to match the NREL organization.

Copilot uses AI. Check for mistakes.
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.

9 participants