Skip to content

Commit 4350a49

Browse files
authored
Merge pull request #2909 from OpenFAST/rc-4.1.1
Release v4.1.1
2 parents 8d2470b + a1f180e commit 4350a49

File tree

22 files changed

+422
-294
lines changed

22 files changed

+422
-294
lines changed

.github/workflows/automated-dev-tests.yml

Lines changed: 176 additions & 117 deletions
Large diffs are not rendered by default.

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
*.out
2929
*.app
3030
__pycache__/*
31+
__init__.py
3132
*.pyc
3233
*.egg-info
3334

@@ -62,4 +63,4 @@ varcache
6263

6364
# Python cache files
6465
openfast_io/dist/
65-
openfast_io/openfast_io/_version.py
66+
openfast_io/openfast_io/_version.py

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ if (USE_LOCAL_STATIC_LAPACK)
142142
set(LAPACK_LIB_PATH ${CMAKE_BINARY_DIR}/dependencies/src/lapack-build/lib/${CMAKE_STATIC_LIBRARY_PREFIX}lapack${CMAKE_STATIC_LIBRARY_SUFFIX})
143143
include(ExternalProject)
144144
ExternalProject_Add(lapack
145-
URL http://www.netlib.org/lapack/lapack.tgz
145+
URL https://github.com/Reference-LAPACK/lapack/archive/refs/tags/v3.12.1.tar.gz
146146
CMAKE_ARGS
147147
-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_SOURCE_DIR}/install
148148
-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON

docs/changelogs/v4.1.1.md

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
**Feature or improvement description**
2+
Pull request to merge `rc-4.1.1` into `main` and create a tagged release for v4.1.1
3+
4+
See the milestone and project pages for additional information
5+
6+
https://github.com/OpenFAST/openfast/milestone/24
7+
8+
Test results, if applicable
9+
See GitHub Actions
10+
11+
### Release checklist:
12+
- [ ] Update the documentation version in docs/conf.py
13+
- [ ] Update the versions in docs/source/user/api\_change.rst
14+
- [ ] Update version info in openfast\_io/pyproject.toml (`openfast_io` package)
15+
- [ ] Update version info in glue-codes/python/pyproject.toml (`pyOpenFAST` package for testing)
16+
- [ ] Verify readthedocs builds correctly
17+
- [ ] Create an annotated tag in OpenFAST during merge (mark as most recent if necessary)
18+
- [ ] Create a merge commit in r-test and add a corresponding annotated tag
19+
- [ ] Upload Docker image
20+
- [ ] Compile executables for Windows builds
21+
- [ ] `AeroDisk_Driver_x64.exe`
22+
- [ ] `AeroDyn_Driver_x64.exe`
23+
- [ ] `AeroDyn_Driver_x64_OpenMP.exe`
24+
- [ ] `AeroDyn_Inflow_c_binding_x64.dll`
25+
- [ ] `AeroDyn_Inflow_c_binding_x64_OpenMP.dll`
26+
- [ ] `BeamDyn_Driver_x64.exe`
27+
- [ ] `DISCON.dll (x64)`
28+
- [ ] `DISCON_ITIBarge.dll (x64)`
29+
- [ ] `DISCON_OC3Hywind.dll (x64)`
30+
- [ ] `DISCON_SC.dll (x64)`
31+
- [ ] `FAST.Farm_x64.exe`
32+
- [ ] `FAST.Farm_x64_OMP.exe`
33+
- [ ] `FAST_SFunc.mexw64`
34+
- [ ] `HydroDynDriver_x64.exe`
35+
- [ ] `HydroDyn_C_Binding_x64.dll`
36+
- [ ] `IinflowWind_c_binding_x64.dll`
37+
- [ ] `InflowWind_Driver_x64.exe`
38+
- [ ] `InflowWind_Driver_x64_OpenMP.exe`
39+
- [ ] `MoorDyn_Driver_x64.exe`
40+
- [ ] `MoorDyn_c_binding_x64.dll`
41+
- [ ] `OpenFAST-Simulink_x64.dll`
42+
- [ ] `openfast_x64.exe`
43+
- [ ] `SeaStateDriver_x64.exe`
44+
- [ ] `SeaState_c_binding_x64.dll`
45+
- [ ] `SimpleElastoDyn_x64.exe`
46+
- [ ] `SubDyn_x64.exe`
47+
- [ ] `Turbsim_x64.exe`
48+
- [ ] `UnsteadyAero_x64.exe`
49+
50+
# Changelog (from 4.1.0)
51+
52+
## Overview
53+
54+
This release includes several bug fixes and improvements for _OpenFAST_, GitHub actions, and the C++ interface.
55+
56+
57+
## General
58+
59+
### CMake build system
60+
61+
#2910 CMake: update location of external lapack (@andrew-platt)
62+
63+
### GitHub actions
64+
65+
#2883 Gh actions debug (@deslaughter)
66+
67+
68+
### Conda deployment
69+
70+
#2891 Minor fixes for v4.1 for smoother conda deployment (@gbarter)
71+
72+
73+
## Python packages
74+
75+
### pyOpenFAST
76+
77+
#2907 pyOpenFAST: remove unnecessary files, move examples (@andrew-platt)
78+
79+
80+
## Module changes
81+
82+
### HydroDyn
83+
84+
#2880 HD bug fix: avoid division by zero with MHstLMod=2 (@luwang00)
85+
86+
### ServoDyn
87+
88+
#2908 SrvD: add numbering to StC echo files (@andrew-platt)
89+
90+
91+
## Code API changes
92+
93+
#### CPP interface
94+
95+
#2881 Fix FAST_CreateCheckpoint in c++ interface (@marchdf)
96+
97+
98+
### HydroDyn c-binding library interface
99+
100+
#2894 Fix segfault when SeaState OutSwitch=2 and no output channels (@andrew-platt)
101+
102+
103+
## Testing
104+
105+
Updated `driver_utilities.py` to allow testing to run in current build directory which might not be `build` (included in #2894 above)
106+
107+
## Input file changes
108+
109+
No input file changes since v4.1.0
110+
111+
112+
## Known issues
113+
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:
114+
115+
- No visualization of rectangular members from _HydroDyn_ or _SubDyn_ through the VTK output options
116+
- Missing and broken features from several c-binding library interfaces:
117+
- the _AeroDyn\_Inflow\_c-binding_ library interface does not allow for coupling to the tower. This will require an interface update.
118+
- the _HydroDyn\_c-binding_ library interface does not currently support vizualization. This will require an interface update.
119+
- 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)
120+
- the _MoorDyn\_c-binding_ library interface does not currently support vizualization. This will require an interface update.
121+
- error messages from c-binding library interfaces will get truncated to 1024 characters. A fix is nearly ready, but will have to wait until the next release.
122+
- A `glue-codes/labview/src/WaveTank.f90` file is included in this release, but it is incomplete and untested. This is a placeholder for internal development work that may be released in complete form at a later date.
123+
- The GitHub `deploy` action to build Windows executables does not currently catch failed builds. This might be addressed at a later date. We are manually checking these builds for now.
124+
- 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.
125+
- Documentation is incomplete for _HydroDyn_, _SubDyn_, and a few other modules.

docs/conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ def runDoxygen(sourcfile, doxyfileIn, doxyfileOut):
138138
# The short X.Y version.
139139
version = u'4.1'
140140
# The full version, including alpha/beta/rc tags.
141-
release = u'v4.1.0'
141+
release = u'v4.1.1'
142142

143143
# The language for content autogenerated by Sphinx. Refer to documentation
144144
# for a list of supported languages.

docs/source/user/api_change.rst

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@ The changes are tabulated according to the module input file, line number, and f
99
The line number corresponds to the resulting line number after all changes are implemented.
1010
Thus, be sure to implement each in order so that subsequent line numbers are correct.
1111

12+
13+
OpenFAST v4.1.0 to OpenFAST v4.1.1
14+
----------------------------------
15+
16+
No input file changes were made.
17+
18+
1219
OpenFAST v4.0.5 to OpenFAST v4.1.0
1320
----------------------------------
1421
Supercontroller module has been removed from FAST.Farm.

glue-codes/labview/src/WaveTank.f90

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,6 @@ SUBROUTINE WaveTank_Init( &
5656
!GCC$ ATTRIBUTES DLLEXPORT :: WaveTank_Init
5757
#endif
5858

59-
IMPLICIT NONE
60-
6159
CHARACTER(KIND=C_CHAR), INTENT(IN ), TARGET :: MD_InputFile_c(IntfStrLen)
6260
CHARACTER(KIND=C_CHAR), INTENT(IN ), TARGET :: SS_InputFile_c(IntfStrLen)
6361
CHARACTER(KIND=C_CHAR), INTENT(IN ), TARGET :: AD_InputFile_c(IntfStrLen)
@@ -193,8 +191,6 @@ SUBROUTINE WaveTank_CalcOutput( &
193191
!GCC$ ATTRIBUTES DLLEXPORT :: WaveTank_CalcOutput
194192
#endif
195193

196-
IMPLICIT NONE
197-
198194
! INTEGER(C_INT) :: delta_time
199195
INTEGER(C_INT) :: frame_number
200196
REAL(C_FLOAT), INTENT(IN ) :: positions_x(N_CAMERA_POINTS)

glue-codes/openfast-cpp/src/OpenFAST.cpp

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -635,14 +635,13 @@ void fast::OpenFAST::init() {
635635

636636
findRestartFile(iTurb);
637637
findOutputFile(iTurb);
638-
char tmpRstFileRoot[INTERFACE_STRING_LENGTH];
639-
strncpy(tmpRstFileRoot, turbineData[iTurb].FASTRestartFileName.c_str(), turbineData[iTurb].FASTRestartFileName.size());
640-
tmpRstFileRoot[turbineData[iTurb].FASTRestartFileName.size()] = '\0';
638+
std::string tmpRstFileRoot{turbineData[iTurb].FASTRestartFileName};
639+
tmpRstFileRoot.resize(INTERFACE_STRING_LENGTH, ' ');
641640
if (turbineData[iTurb].sType == EXTINFLOW) {
642641
/* note that this will set nt_global inside the FAST library */
643642
FAST_ExtInfw_Restart(
644643
&iTurb,
645-
tmpRstFileRoot,
644+
tmpRstFileRoot.c_str(),
646645
&AbortErrLev,
647646
&turbineData[iTurb].dt,
648647
&turbineData[iTurb].numBlades,
@@ -657,7 +656,7 @@ void fast::OpenFAST::init() {
657656
} else if(turbineData[iTurb].sType == EXTLOADS) {
658657
FAST_ExtLoads_Restart(
659658
&iTurb,
660-
tmpRstFileRoot,
659+
tmpRstFileRoot.c_str(),
661660
&AbortErrLev,
662661
&turbineData[iTurb].dt,
663662
&turbineData[iTurb].numBlades,
@@ -1291,7 +1290,9 @@ void fast::OpenFAST::advance_to_next_driver_time_step(bool writeFiles) {
12911290
int tStepRatio = time_step_ratio(dtFAST, dtDriver);
12921291
if ( (restartFreq_*tStepRatio > 0) && (((nt_global - ntStart) % (restartFreq_*tStepRatio)) == 0 ) && (nt_global != ntStart) ) {
12931292
turbineData[iTurb].FASTRestartFileName = " "; // if blank, it will use FAST convention <RootName>.nt_global
1294-
FAST_CreateCheckpoint(&iTurb, turbineData[iTurb].FASTRestartFileName.data(), &ErrStat, ErrMsg);
1293+
std::string tmpRstFileRoot{turbineData[iTurb].FASTRestartFileName};
1294+
tmpRstFileRoot.resize(INTERFACE_STRING_LENGTH, ' ');
1295+
FAST_CreateCheckpoint(&iTurb, tmpRstFileRoot.c_str(), &ErrStat, ErrMsg);
12951296
checkError(ErrStat, ErrMsg);
12961297
writeRestartFile(iTurb, nt_global);
12971298
}
@@ -1432,7 +1433,9 @@ void fast::OpenFAST::step(bool writeFiles) {
14321433
for (int iTurb=0; iTurb < nTurbinesProc; iTurb++) {
14331434
if ( (((nt_global - ntStart) % (restartFreq_ * tStepRatio)) == 0 ) && (nt_global != ntStart) ) {
14341435
turbineData[iTurb].FASTRestartFileName = " "; // if blank, it will use FAST convention <RootName>.nt_global
1435-
FAST_CreateCheckpoint(&iTurb, turbineData[iTurb].FASTRestartFileName.data(), &ErrStat, ErrMsg);
1436+
std::string tmpRstFileRoot{turbineData[iTurb].FASTRestartFileName};
1437+
tmpRstFileRoot.resize(INTERFACE_STRING_LENGTH, ' ');
1438+
FAST_CreateCheckpoint(&iTurb, tmpRstFileRoot.c_str(), &ErrStat, ErrMsg);
14361439
checkError(ErrStat, ErrMsg);
14371440
writeRestartFile(iTurb, nt_global);
14381441
}

0 commit comments

Comments
 (0)