Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tight-Coupling Algorithm for OpenFAST 5.0 #2439

Open
wants to merge 334 commits into
base: dev-tc
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
334 commits
Select commit Hold shift + click to select a range
3d477df
Remove indexing for linearization, handle it inline
deslaughter Mar 5, 2024
f96090a
Merge remote-tracking branch 'andy/f/AD15_IfW_Linearization' into f/t…
deslaughter Mar 5, 2024
df1bc2a
Change FAST_ModLin to FAST_ModGlue in Simulink CMakeLists.txt
deslaughter Mar 5, 2024
878ee64
Update r-test pointer
deslaughter Mar 5, 2024
98801a4
Update r-test pointer for reg_test changes
deslaughter Mar 6, 2024
e7dc2a7
Started re-adding AeroMap
deslaughter May 17, 2024
e299b6a
Merge remote-tracking branch 'upstream/dev' into f/tight-coupling
deslaughter May 17, 2024
31f68dd
Switch to dev r-test branch
deslaughter May 17, 2024
a5dd7b3
Add FAST_Idx.f90 to simulink/CMakeLists.txt
deslaughter May 17, 2024
da4e4d8
Disable 5MW_Land_AeroMap test temporarily
deslaughter May 17, 2024
8cf4a36
Switch to quaternions from WM params in ModVar
deslaughter May 21, 2024
bc3da89
Attempt to get linearization test cases to work again
deslaughter May 21, 2024
f906d9b
Add missing flag on SubDyn WriteOutput variable
deslaughter May 23, 2024
d20489e
Added SeaState to module system
deslaughter May 23, 2024
ecc8605
Revised quaternion handling in BeamDyn
deslaughter May 23, 2024
c232ec4
Fix bug where SeaState variables weren't being initialized
deslaughter May 23, 2024
48d7df1
Variable Perturb was wrong type in SeaState
deslaughter May 23, 2024
c32d196
Attempt to remove uninitialized variables from FAST_Mapping and FAST_…
deslaughter May 23, 2024
76a0bba
Fix extending WaveElev0 input/output name in SeaState
deslaughter May 24, 2024
ab1ad26
Fix indexing in dXdu in HydroDyn for new extended inputs
deslaughter May 24, 2024
b8f2c6b
Reduce memory usage in fast_linearization_file.py when reading matrices
deslaughter May 24, 2024
f9d9241
Add Glue_Registry.txt to store new glue code structures, change FAST …
deslaughter May 28, 2024
a0c46c7
Add ModGlue_CalcSteady
deslaughter May 31, 2024
c603aef
Add MV_ExtrapInterp function to ModVar
deslaughter Jun 3, 2024
1e4bc9a
Rename ModVar variables fields to better differentiate from Flags. Ad…
deslaughter Jun 3, 2024
1621b8a
Add proper angle interpolation on [0,2PI] to MV_ExtrapInterp
deslaughter Jun 3, 2024
25a7742
Add FEAM and Orca to Module System
deslaughter Jun 3, 2024
5c1d034
Update r-test pointer
deslaughter Jun 3, 2024
e347f85
Add OrcaFlex, ExtInfw, ExtLd to module system. Fix spelling in InitVa…
deslaughter Jun 3, 2024
b5fe903
Update r-test pointer
deslaughter Jun 3, 2024
0cb0072
Remove unused linearization routines in MAP, BeamDyn, SubDyn
deslaughter Jun 3, 2024
7ac2d84
Merge remote-tracking branch 'upstream/dev' into f/tight-coupling
deslaughter Jun 3, 2024
9917249
Update r-test pointer
deslaughter Jun 6, 2024
b543b77
Making progress on AeroMap, update indexing
deslaughter Jun 15, 2024
7182ff8
Change FAST_Idx.f90 to FAST_ModData.90 in simulink CMakeLists.txt
deslaughter Jun 15, 2024
c465160
AeroMap working for ElastoDyn
deslaughter Jun 18, 2024
ffa7098
Get AeroMap reset working, re-enable AeroMap test for ED
deslaughter Jun 18, 2024
d0d19f4
Minor cleanup in AeroMap
deslaughter Jun 20, 2024
98b0e9a
Add parsing of J matrix to FASTLinearizationFile
deslaughter Jun 20, 2024
f2996f7
Partially working revision of module vars
deslaughter Jul 8, 2024
49fec4e
Refactoring module variables again
deslaughter Jul 22, 2024
ceda2b5
Merge remote-tracking branch 'upstream/dev' into f/tight-coupling
deslaughter Jul 22, 2024
35c64b2
Fix merge issues
deslaughter Jul 22, 2024
8dc5ebb
Linearization changes
deslaughter Jul 24, 2024
a59fa0a
Majority of linearization regression tests working
deslaughter Jul 25, 2024
6c3eabc
Merge remote-tracking branch 'upstream/dev' into f/tight-coupling
deslaughter Jul 25, 2024
14cf9e6
Remove Glue_ModData from simulink CMakeLists.txt
deslaughter Jul 26, 2024
f0b3a77
Regenerate Types files
deslaughter Jul 26, 2024
653b976
fix typo in fast_linearization_file.py
deslaughter Jul 26, 2024
7ab1028
Change dxdt_jac to dxdt_lin
deslaughter Jul 26, 2024
5f0d9a0
Reenable AeroMap
deslaughter Jul 26, 2024
72017b5
Restore iSrcMaps and iDstMaps zero allocation
deslaughter Jul 27, 2024
2695d5f
Fix 5MW_OC4Semi_MD_Linear test case, generate field name functions
deslaughter Jul 29, 2024
fe88291
Tight coupling appears to be working for at least some regression tes…
deslaughter Aug 9, 2024
0111789
Don't clear load mesh if mapping isn't ready
deslaughter Aug 9, 2024
819d504
BeamDyn, ModMesh, NWTC_Num performance improvements
deslaughter Aug 16, 2024
b57c17e
Tight coupling appears to be working for the IEA15
deslaughter Aug 16, 2024
0f67063
Fix bug in BeamDyn performance commit
deslaughter Aug 19, 2024
d18c96d
Set SrvD hub wind speed from IfW hub speed
deslaughter Aug 19, 2024
f664cc5
Add commented option for performance profiling in OpenfastFortranOpti…
deslaughter Aug 19, 2024
dd7e4f4
Use small rotation angles in ModVar
deslaughter Aug 20, 2024
56d830b
Make SolverTC work with no states
deslaughter Aug 20, 2024
427af96
Add error in SrvD to exit if HSSBrMode is not 0. The brake doesn't cu…
deslaughter Aug 20, 2024
e36a35c
Change errorPlotting.py and pass_fail.py to ignore TC channels (ConvE…
deslaughter Aug 20, 2024
12b0d8d
Set mapping from SeaSt_y_WaveElev0 to HydroDyn_u_WaveElev0 to only be…
deslaughter Aug 20, 2024
e460460
Remove duplicate array allocation in AeroMap
deslaughter Aug 20, 2024
625ba1e
Change Vars used in Option 1 in SolverTC
deslaughter Aug 20, 2024
0b4894f
Fix beamdyn_utest incorrect size of m%qp%upp
deslaughter Aug 20, 2024
37b6f34
Fix more bugs in BeamDyn performance improvements
deslaughter Aug 22, 2024
4c93cf7
Update executePythonRegressionCase.py for TC outputs
deslaughter Aug 22, 2024
699bcb0
Reworked TC Solver initialization method
deslaughter Aug 22, 2024
07ae8bb
FAST_Func: Add SeaSt CalcOutput, fix MAP_UpdateStates
deslaughter Aug 22, 2024
04f488a
Specify name in Glue_CombineModules
deslaughter Aug 22, 2024
3e171d4
Rename some vars in Glue_Registry.txt
deslaughter Aug 22, 2024
ab1ce23
Merge remote-tracking branch 'upstream/dev' into f/tight-coupling
deslaughter Aug 22, 2024
b34e327
Fix simulink CMakeLists.txt
deslaughter Aug 22, 2024
0f5a5a9
Point to r-test-5 in submodule
deslaughter Aug 23, 2024
f9f31c2
Update r-test pointer
deslaughter Aug 23, 2024
9fc8246
Allow reg_tests to use .out or .outb files
deslaughter Aug 26, 2024
f8a952f
Fix step0 system initialization in FAST_SolverTC
deslaughter Aug 26, 2024
d1d3f61
Disable use of small rotation angles in ModVar
deslaughter Aug 26, 2024
33ca6dc
Align SolverTC with FAST_Subs
deslaughter Aug 26, 2024
cd6b4fc
Fix bug in Calculate_C_alpha (AirfoilInfo.f90)
deslaughter Aug 27, 2024
d4e7c7c
Rename functions in FAST_SolverTC
deslaughter Aug 27, 2024
f49fc9a
Allow .out and .outb files in regression test scripts
deslaughter Aug 27, 2024
4b703bc
Update r-test pointer
deslaughter Aug 27, 2024
c06f0bb
Remove GetOP from IfW and ExtPtfm
deslaughter Aug 27, 2024
724593f
Reduce linearization size by keeping only necessary variables
deslaughter Aug 27, 2024
5912006
Add name argument to Glue_CombineModules
deslaughter Aug 27, 2024
c624cb4
Update r-test pointer, disable 5MW_OC4Jckt_DLL_WTurb_WavesIrr_MGrowth
deslaughter Aug 27, 2024
1a128c4
Read solver parameters from input file
deslaughter Aug 27, 2024
fe73405
Update FAST_Types.f90
deslaughter Aug 28, 2024
b67fb62
Update r-test pointer
deslaughter Aug 28, 2024
2f7b2f8
Update r-test pointer
deslaughter Aug 28, 2024
467bb85
Update r-test pointer
deslaughter Aug 28, 2024
4040fba
Update r-test pointer
deslaughter Aug 28, 2024
435d084
Add checks in linearization for when dUdu and dUdy aren't allocated
deslaughter Aug 28, 2024
25a5dcd
Update r-test pointer
deslaughter Aug 29, 2024
4c139fd
Rework initialization again
deslaughter Aug 29, 2024
1cf4f63
Rework initialization, attempt 3
deslaughter Aug 29, 2024
4013962
Update r-test pointer
deslaughter Aug 29, 2024
45be70a
Skip Solver_Step0 convergence if no inputs
deslaughter Aug 29, 2024
ff50e97
Update r-test pointer
deslaughter Aug 29, 2024
ef0e277
Move NacelleDrag and BuoyantLoads calc into RotCalcOutput to be inclu…
deslaughter Aug 29, 2024
78c1282
Update r-test pointer
deslaughter Aug 29, 2024
75f46da
Add MHK_RM1_Floating_Linear regression test
deslaughter Aug 29, 2024
a644cad
Disable MHK_RM1_Floating_Linear, reset flag in ModGlue
deslaughter Aug 29, 2024
0c05514
Get AeroMap working again
deslaughter Aug 29, 2024
17818c2
Integrate ExtLoads
deslaughter Aug 31, 2024
8f512df
Fix blade structural control in FAST_Mapping
deslaughter Aug 31, 2024
639b0a5
Update r-test pointer
deslaughter Aug 31, 2024
410d516
Fix FAST_Mapping again
deslaughter Aug 31, 2024
36c73bc
Update remap flat reset function to use mesh pointers
deslaughter Sep 4, 2024
bc551ce
improve flag usage in elastodyn
deslaughter Sep 4, 2024
1bef93f
Improve method for select vars used in TC solve
deslaughter Sep 4, 2024
8669b9a
Update r-test pointer
deslaughter Sep 4, 2024
3023d8e
Update r-test pointer
deslaughter Sep 4, 2024
711df68
Change field strings in ModVar.f90
deslaughter Sep 7, 2024
ffc4cdb
Fix SD->HD mapping with Y2Mesh in FAST_Mapping
deslaughter Sep 7, 2024
373a523
Cleanup in FAST_Mapping
deslaughter Sep 7, 2024
2634482
Add solve debug output in FAST_SolverTC
deslaughter Sep 7, 2024
0b59134
Perf improvements to Conv_Radiation and SeaSt_WaveField
deslaughter Sep 9, 2024
7bff0dc
Mark several NWTC Lib functions as PURE
deslaughter Sep 10, 2024
cf89895
Minor performance improvements in SeaState (reorganize indexing to mi…
deslaughter Sep 10, 2024
208db9d
Small performance improvements in Morison.f90
deslaughter Sep 10, 2024
640acba
Minor performance improvements in SubDyn
deslaughter Sep 10, 2024
74f77e6
Use LAPACK_GEMV in SubDyn
deslaughter Sep 10, 2024
2ebd615
Fully initialize Mesh%ElemTable in MeshCreate
deslaughter Sep 11, 2024
89238f4
SubDyn: fix single precision compile
deslaughter Sep 11, 2024
41649b2
SeaSt_WaveField: remove unused WaveElev functions
deslaughter Sep 11, 2024
ea17262
Fix crashes with Intel compiler
deslaughter Sep 11, 2024
deaff44
Merge remote-tracking branch 'upstream/dev' into f/tight-coupling
deslaughter Sep 11, 2024
622b60b
Everything builds after merge
deslaughter Sep 11, 2024
e611250
FAST_Subs: Fix duplicate array allocation
deslaughter Sep 12, 2024
bc3ebe5
Add IceDyn and IceFloe to modules system
deslaughter Sep 12, 2024
5a17a69
Integrate SED and AeroDisk into new glue code
deslaughter Sep 12, 2024
10fecd5
Get SED working, missing mappings
deslaughter Sep 13, 2024
6156ee1
Copy .outb file when doing linear regression test
deslaughter Sep 13, 2024
345db2e
Update r-test pointer
deslaughter Sep 13, 2024
8205fce
SubDyn: fix single precision build
deslaughter Sep 13, 2024
7257fd4
FAST_SolverTC: Disable AD in Option 1
deslaughter Sep 13, 2024
99390be
Update r-test pointer
deslaughter Sep 13, 2024
f68f85f
FAST_SolverTC: disable Jacobian debug output
deslaughter Sep 13, 2024
6d50fd4
Add MHK floating test case
deslaughter Sep 13, 2024
4460bef
FAST_Subs: fix bug in InputAryLB calc
deslaughter Sep 13, 2024
796423c
Update r-test pointer
deslaughter Sep 13, 2024
7f85499
HydroDyn: fix output of WAMIT%Conv_Rdtn%RdtnKrnl
deslaughter Sep 13, 2024
b5394f4
FAST_SolverTC: Enable switching of AeroDyn between Opt1 and Opt2 if M…
deslaughter Sep 13, 2024
94c6bcf
AeroDyn: disable first tower node depth check in RotCalcBuoyantLoads …
deslaughter Sep 13, 2024
d977fb7
CTestList: Add highpass filter for MHK_RM1_Floating_Linear case
deslaughter Sep 13, 2024
c55c291
Print more failed errors for linearization regression tests
deslaughter Sep 13, 2024
348921d
CTestList: Disable MHK_RM1_Floating_Linear and update r-test pointer
deslaughter Sep 13, 2024
500f0d8
Merge remote-tracking branch 'upstream/dev' into f/tight-coupling
deslaughter Sep 13, 2024
1d5b0d1
ExtLoads: update to match dev behavior
deslaughter Sep 14, 2024
83bed31
Update r-test pointer
deslaughter Sep 14, 2024
58f5aad
FAST_Subs: fix bad merge
deslaughter Sep 14, 2024
e9d007d
openfast_io: update reader & writer for tight-coupling inputs
deslaughter Sep 14, 2024
c68d693
Update r-test pointer
deslaughter Sep 14, 2024
7c5633f
Allow NLinTimes=1 when using CalcSteady
deslaughter Sep 17, 2024
ae12bdc
Allow DBEMT_Mod=-1 (frozen wake) for linearization
deslaughter Sep 17, 2024
e1a28e1
FAST_ModGlue: better way to prevent CalcSteady from converging premat…
deslaughter Sep 17, 2024
2723c20
FAST_Mapping: remove ExtLd -> SrvD
deslaughter Sep 18, 2024
0845870
Use at least 2 azimuth positions for CalcSteady
deslaughter Sep 18, 2024
09cc223
Merge remote-tracking branch 'upstream/dev' into f/tight-coupling
deslaughter Sep 18, 2024
efc9d5a
FAST_Mapping: reimplement tower and blade damping for CalcSteady
deslaughter Sep 19, 2024
b3541f5
ExtLoads: fix bad merge from dev
deslaughter Sep 20, 2024
fdffbe4
Update r-test pointer
deslaughter Sep 20, 2024
3f0e899
Fix MV_ExtrapInterp and its use in FAST_ModGlue
deslaughter Sep 26, 2024
0bd39f9
Update convergence failure message
deslaughter Oct 22, 2024
5ee4ac1
Merge %Input_Saved into %Input for modules
deslaughter Nov 5, 2024
eb179da
Remove unused LinStateSave
deslaughter Nov 5, 2024
bdf9b8b
Remove unnecessary u input in FAST_Types
deslaughter Nov 5, 2024
c45661f
Remove unused members of module data structures
deslaughter Nov 5, 2024
a96dbbe
Add Visual Studio Solution which uses IFX
deslaughter Nov 14, 2024
74d6f66
Remvoe Visual Studio temporary files from repo
deslaughter Nov 15, 2024
6b3c85e
Adding missing features and modules to vs-build-ifx
deslaughter Nov 15, 2024
4adeb57
Updating VS projects
deslaughter Nov 18, 2024
7ae7a45
Update all the projects
deslaughter Nov 19, 2024
c6fc177
Moved driver projects, fixed SuperController
deslaughter Nov 19, 2024
f4ef8ab
Fix build in VS2019
deslaughter Nov 20, 2024
1217146
Resolve stack overflow in using ifx
deslaughter Nov 25, 2024
ff98846
More work on Visual Studio projects
deslaughter Nov 25, 2024
429b01a
Merge 'dev' into f/tight-coupling
deslaughter Dec 10, 2024
a866b34
Fix single precision compile
deslaughter Dec 10, 2024
8e79b8f
Fix duplicated allocation in BeamDyn
deslaughter Dec 10, 2024
aa3fa50
Allow multiple ElastoDyn instances
deslaughter Dec 30, 2024
05c3e4d
Fix FAST.Farm, revert BD changes
deslaughter Dec 30, 2024
9d002e5
Merge remote-tracking branch 'upstream/dev' into f/tight-coupling
deslaughter Dec 31, 2024
41d408c
Fix incorrect indexing for RdtnKrnl in HydroDyn
deslaughter Dec 31, 2024
4c15dbd
Add check for OutData_ED being allocated in FAST_Subs
deslaughter Dec 31, 2024
3802b16
Update r-test pointer
deslaughter Dec 31, 2024
20aae9a
Disable AWT_WSt_StartUp_HighSpShutDown in test_of_io_pytest.py
deslaughter Jan 2, 2025
47264e3
Update r-test pointer
deslaughter Jan 2, 2025
8712da3
Fix some segfaults when using a controller shared library.
deslaughter Jan 7, 2025
8c36748
Get FAST.Farm MD_Shared regression test working
deslaughter Feb 3, 2025
289512a
Merge remote-tracking branch 'upstream/dev' into f/tight-coupling
deslaughter Feb 3, 2025
d33fb27
Update r-test pointer
deslaughter Feb 3, 2025
0f4fb1f
Use PI controller form CalcSteady Trim
deslaughter Feb 4, 2025
694d782
Fix missing allocation for AD FrozenWake when doing linearization.
deslaughter Feb 6, 2025
0c261b4
Merge remote-tracking branch 'origin/f/tight-coupling' into f/tc-calc…
deslaughter Feb 6, 2025
b3c13d2
MD: RK4 in MoorDyn. Tested by hardcoding default to RK4 and running r…
RyanDavies19 Feb 11, 2025
147f636
Revert "Update r-test pointer to v4.0.2"
deslaughter Feb 11, 2025
8173d59
Fix CalcOutputs_SolveForInputs in FAST_SolverTC.f90 and use in FAST_S…
deslaughter Feb 12, 2025
dac11fa
adding LICENSE to openfast_io folder for conda builds
mayankchetan Feb 12, 2025
1f5936a
MD: cleaned up spacing, commented out timestep function, added dynami…
RyanDavies19 Feb 13, 2025
96fd04a
MD: removed forgotten print statement
RyanDavies19 Feb 13, 2025
6f3f416
Merge remote-tracking branch 'upstream/dev' into f/tight-coupling
deslaughter Feb 17, 2025
323e3e4
Update r-test pointer
deslaughter Feb 17, 2025
af47e72
[BugFix] Calc_RR0mEta_rho routine argument consistency
andrew-platt Feb 18, 2025
44d8ff8
typo in af47e72
andrew-platt Feb 18, 2025
2a3f53e
BD: pass mEta into Calc_RR0mEta_rho
andrew-platt Feb 18, 2025
84d20cc
handing python 0-indexing and OpenFAST 1-indexing correctly
mayankchetan Feb 19, 2025
1cd64ad
removing LICENSE file from openfast_io
mayankchetan Feb 19, 2025
4b3ef0e
point to correct LICENSE files
mayankchetan Feb 19, 2025
341fef8
Merge pull request #2644 from mayankchetan/of_io_update
andrew-platt Feb 19, 2025
7252a5b
Add CalcSteady error to output file
deslaughter Feb 20, 2025
656afdb
Merge pull request #2642 from andrew-platt/b/BD_Calc_RR0mEta_rho
andrew-platt Feb 20, 2025
2eed69d
Merge branch 'f/tight-coupling', remote-tracking branch 'origin' into…
deslaughter Feb 20, 2025
3201d74
MD: VIV attempt 1, broken
RyanDavies19 Feb 24, 2025
fd0b36b
MD: VIV working, verified against MD-C
RyanDavies19 Feb 24, 2025
fdd47fc
MD: VIV for internal nodes only, removing print statements
RyanDavies19 Feb 25, 2025
20bbb03
MD: update OpenfAST_io for VIV
RyanDavies19 Feb 25, 2025
1c883b5
MD: Code clean up
RyanDavies19 Feb 25, 2025
83c7add
Reduced size of Jacobian in TC Solver
deslaughter Feb 26, 2025
77ee4d3
Fixed some bugs in ordering of SolverTC variables
deslaughter Feb 27, 2025
df78329
Merge remote-tracking branch 'upstream/dev' into MD_RK4
RyanDavies19 Feb 27, 2025
1f3e89a
MD: Error check to prevent viv or visco with linearized MD
RyanDavies19 Feb 27, 2025
df31d9e
Update r-test pointer
deslaughter Feb 27, 2025
02f07ec
MD: initialize unused VIV things to zero
RyanDavies19 Feb 27, 2025
2d6af1e
Reduce fields in solver jacobian
deslaughter Feb 28, 2025
7883476
Update r-test pointer
deslaughter Feb 28, 2025
9223652
Update r-test pointer
deslaughter Feb 28, 2025
38b2c6f
IO: Updated OpenFAST_io for MoorDyn input files
RyanDavies19 Feb 26, 2025
f98c8fd
IO: clean up openfast_io for MD after testing, fix *** error in MD ou…
RyanDavies19 Feb 26, 2025
5671964
MD: update version
RyanDavies19 Feb 27, 2025
39783ec
MD: IO output format fix
RyanDavies19 Feb 28, 2025
80cfcbc
Merge pull request #2650 from RyanDavies19/MD_RK4
andrew-platt Feb 28, 2025
25706a9
Merge remote-tracking branch 'upstream/dev' into MD_IO_fix
RyanDavies19 Feb 28, 2025
608c924
IO: Fix MoorDyn outlist handling, remove MoorDyn echo file reading
RyanDavies19 Mar 3, 2025
84eff56
Merge pull request #2658 from RyanDavies19/MD_IO_fix
andrew-platt Mar 7, 2025
263c263
Merge remote-tracking branch 'upstream/dev' into f/tc-calcsteady-trim
deslaughter Mar 10, 2025
0a52d60
Fix ExtInfw module
deslaughter Mar 11, 2025
1f7bdbe
Update r-test pointer
deslaughter Mar 11, 2025
d37ed33
Remove constraint states from ModVar system
deslaughter Mar 11, 2025
1738062
Address review comments
deslaughter Mar 11, 2025
78ebb7b
Remove unused variables and add mappings to sum file
deslaughter Mar 11, 2025
3cb9260
Remove MeshMapType and FAST_LinType as they're no longer used
deslaughter Mar 12, 2025
7b61706
Remove debugging code
deslaughter Mar 13, 2025
058c603
Fix bug in WM parameter linearization variable description output
deslaughter Mar 19, 2025
5fbd380
Remove RotStates Jacobian modification from BD
deslaughter Mar 21, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add OrcaFlex, ExtInfw, ExtLd to module system. Fix spelling in InitVa…
…rs functions
deslaughter committed Jun 3, 2024
commit e347f854267241143bc0e640ba8551877da3ef2b
2 changes: 1 addition & 1 deletion modules/aerodyn/src/AeroDyn.f90
Original file line number Diff line number Diff line change
@@ -5592,7 +5592,7 @@ subroutine AD_InitVars(RotNum, u, p, x, z, OtherState, y, m, InitOut, InputFileD
return
end if

! Add pointers to vars to inititialization output
! Add pointers to vars to initialization output
InitOut%Vars => p%Vars

! Create rotor label
2 changes: 1 addition & 1 deletion modules/beamdyn/src/BeamDyn.f90
Original file line number Diff line number Diff line change
@@ -5834,7 +5834,7 @@ subroutine BD_InitVars(u, p, x, y, m, InitOut, Linearize, ErrStat, ErrMsg)
return
end if

! Add pointers to vars to inititialization output
! Add pointers to vars to initialization output
InitOut%Vars => p%Vars

!----------------------------------------------------------------------------
65 changes: 64 additions & 1 deletion modules/externalinflow/src/ExternalInflow.f90
Original file line number Diff line number Diff line change
@@ -268,13 +268,20 @@ SUBROUTINE Init_ExtInfw( InitInp, p_FAST, AirDens, u_AD, initOut_AD, y_AD, ExtIn
!............................................................................................
CALL AllocAry( InitOut%WriteOutputHdr, 3, 'WriteOutputHdr', ErrStat2, ErrMsg2 ); if (Failed()) return;
CALL AllocAry( InitOut%WriteOutputUnt, 3, 'WriteOutputUnt', ErrStat2, ErrMsg2 ); if (Failed()) return;
CALL AllocAry( ExtInfw%y%WriteOutput, 3, 'WriteOutput', ErrStat2, ErrMsg2 ); if (Failed()) return;
CALL AllocAry( ExtInfw%y%WriteOutput, 3, 'WriteOutput', ErrStat2, ErrMsg2 ); if (Failed()) return;

InitOut%WriteOutputHdr(1) = 'Wind1VelX'; InitOut%WriteOutputUnt(1) = '(m/s)'
InitOut%WriteOutputHdr(2) = 'Wind1VelY'; InitOut%WriteOutputUnt(2) = '(m/s)'
InitOut%WriteOutputHdr(3) = 'Wind1VelZ'; InitOut%WriteOutputUnt(3) = '(m/s)'
ExtInfw%y%WriteOutput = 0.0_ReKi

!............................................................................................
! Module Variables
!............................................................................................

call ExtInfw_InitVars(ExtInfw%u, ExtInfw%p, ExtInfw%y, ExtInfw%m, InitOut, .false., ErrStat2, ErrMsg2)
if (Failed()) return

InitOut%Ver = ExtInfw_Ver

RETURN
@@ -292,6 +299,62 @@ logical function Failed2()
endif
end function Failed2
END SUBROUTINE Init_ExtInfw

!----------------------------------------------------------------------------------------------------------------------------------

subroutine ExtInfw_InitVars(u, p, y, m, InitOut, Linearize, ErrStat, ErrMsg)
type(ExtInfw_InputType), intent(inout) :: u !< An initial guess for the input; input mesh must be defined
type(ExtInfw_ParameterType), intent(inout) :: p !< Parameters
type(ExtInfw_OutputType), intent(inout) :: y !< Initial system outputs (outputs are not calculated;
type(ExtInfw_MiscVarType), intent(inout) :: m !< Misc variables for optimization (not copied in glue code)
type(ExtInfw_InitOutputType), intent(inout) :: InitOut !< Output for initialization routine
logical, intent(in ) :: Linearize !< Flag to initialize linearization variables
integer(IntKi), intent( out) :: ErrStat !< Error status of the operation
character(*), intent( out) :: ErrMsg !< Error message if ErrStat /= ErrID_None

character(*), parameter :: RoutineName = 'ExtInfw_InitVars'
INTEGER(IntKi) :: ErrStat2
CHARACTER(ErrMsgLen) :: ErrMsg2

ErrStat = ErrID_None
ErrMsg = ""

! Allocate space for variables (deallocate if already allocated)
if (associated(p%Vars)) deallocate(p%Vars)
allocate(p%Vars, stat=ErrStat2)
if (ErrStat2 /= 0) then
call SetErrStat(ErrID_Fatal, "Error allocating p%Vars", ErrStat, ErrMsg, RoutineName)
return
end if

! Add pointers to vars to initialization output
InitOut%Vars => p%Vars

!----------------------------------------------------------------------------
! Continuous State Variables
!----------------------------------------------------------------------------

!----------------------------------------------------------------------------
! Input variables
!----------------------------------------------------------------------------

!----------------------------------------------------------------------------
! Output variables
!----------------------------------------------------------------------------

!----------------------------------------------------------------------------
! Initialize Variables and Values
!----------------------------------------------------------------------------

CALL MV_InitVarsJac(p%Vars, m%Jac, Linearize, ErrStat2, ErrMsg2); if (Failed()) return

contains
logical function Failed()
call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName)
Failed = ErrStat >= AbortErrLev
end function Failed
end subroutine

!----------------------------------------------------------------------------------------------------------------------------------
SUBROUTINE ExtInfw_UpdateFlowField(p_FAST, ExtInfw, ErrStat, ErrMsg)
TYPE(FAST_ParameterType), INTENT(IN ) :: p_FAST ! Parameters for the glue code
3 changes: 3 additions & 0 deletions modules/externalinflow/src/ExternalInflow_Registry.txt
Original file line number Diff line number Diff line change
@@ -29,8 +29,10 @@ typedef ExternalInflow/ExtInfw InitOutputType CHARACTER(ChanLen) WriteOu
typedef ^ InitOutputType CHARACTER(ChanLen) WriteOutputUnt {:} - - "Units of the output-to-file channels" -
typedef ^ InitOutputType ProgDesc Ver - - - "This module's name, version, and date" -
typedef ^ InitOutputType FlowFieldType *FlowField - - - "Pointer of flow field data type" -
typedef ^ InitOutputType ModVarsType *Vars - - - "Module Variables"

# ..... MiscVars ................................................................................................................
typedef ExternalInflow/ExtInfw ExtInfw_MiscVarType ModJacType Jac - - - "Jacobian matrices and arrays corresponding to module variables"
typedef ExternalInflow/ExtInfw ExtInfw_MiscVarType MeshType ActForceMotionsPoints {:} - - "point mesh for transferring AeroDyn motions to ExternalInflow (includes hub+blades+nacelle+tower+tailfin)" -
typedef ExternalInflow/ExtInfw ExtInfw_MiscVarType MeshType ActForceLoadsPoints {:} - - "point mesh for transferring AeroDyn distributed loads to ExternalInflow (includes hub+blades+nacelle+tower+tailfin)" -
typedef ExternalInflow/ExtInfw ExtInfw_MiscVarType MeshMapType Line2_to_Point_Loads {:} - - "mapping data structure to convert line2 loads to point loads" -
@@ -39,6 +41,7 @@ typedef ExternalInflow/ExtInfw ExtInfw_MiscVarType FlowFieldType &FlowFi


# ..... Parameters ................................................................................................................
typedef ExternalInflow/ExtInfw ParameterType ModVarsType &Vars - - - "Module Variables"
typedef ExternalInflow/ExtInfw ParameterType ReKi AirDens - - - "Air density for normalization of loads sent to ExternalInflow" kg/m^3
typedef ExternalInflow/ExtInfw ParameterType IntKi NumBl - - - "Number of blades" -
typedef ExternalInflow/ExtInfw ParameterType IntKi NMappings - - - "Number of mappings" -
83 changes: 83 additions & 0 deletions modules/externalinflow/src/ExternalInflow_Types.f90
Original file line number Diff line number Diff line change
@@ -74,6 +74,7 @@ MODULE ExternalInflow_Types
CHARACTER(ChanLen) , DIMENSION(:), ALLOCATABLE :: WriteOutputUnt !< Units of the output-to-file channels [-]
TYPE(ProgDesc) :: Ver !< This module's name, version, and date [-]
TYPE(FlowFieldType) , POINTER :: FlowField => NULL() !< Pointer of flow field data type [-]
TYPE(ModVarsType) , POINTER :: Vars => NULL() !< Module Variables [-]
END TYPE ExtInfw_InitOutputType
! =======================
! ========= ExtInfw_MiscVarType_C =======
@@ -82,6 +83,7 @@ MODULE ExternalInflow_Types
END TYPE ExtInfw_MiscVarType_C
TYPE, PUBLIC :: ExtInfw_MiscVarType
TYPE( ExtInfw_MiscVarType_C ) :: C_obj
TYPE(ModJacType) :: Jac !< Jacobian matrices and arrays corresponding to module variables [-]
TYPE(MeshType) , DIMENSION(:), ALLOCATABLE :: ActForceMotionsPoints !< point mesh for transferring AeroDyn motions to ExternalInflow (includes hub+blades+nacelle+tower+tailfin) [-]
TYPE(MeshType) , DIMENSION(:), ALLOCATABLE :: ActForceLoadsPoints !< point mesh for transferring AeroDyn distributed loads to ExternalInflow (includes hub+blades+nacelle+tower+tailfin) [-]
TYPE(MeshMapType) , DIMENSION(:), ALLOCATABLE :: Line2_to_Point_Loads !< mapping data structure to convert line2 loads to point loads [-]
@@ -110,6 +112,7 @@ MODULE ExternalInflow_Types
END TYPE ExtInfw_ParameterType_C
TYPE, PUBLIC :: ExtInfw_ParameterType
TYPE( ExtInfw_ParameterType_C ) :: C_obj
TYPE(ModVarsType) , POINTER :: Vars => NULL() !< Module Variables [-]
REAL(ReKi) :: AirDens = 0.0_ReKi !< Air density for normalization of loads sent to ExternalInflow [kg/m^3]
INTEGER(IntKi) :: NumBl = 0_IntKi !< Number of blades [-]
INTEGER(IntKi) :: NMappings = 0_IntKi !< Number of mappings [-]
@@ -457,6 +460,7 @@ subroutine ExtInfw_CopyInitOutput(SrcInitOutputData, DstInitOutputData, CtrlCode
call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName)
if (ErrStat >= AbortErrLev) return
DstInitOutputData%FlowField => SrcInitOutputData%FlowField
DstInitOutputData%Vars => SrcInitOutputData%Vars
end subroutine

subroutine ExtInfw_DestroyInitOutput(InitOutputData, ErrStat, ErrMsg)
@@ -477,6 +481,7 @@ subroutine ExtInfw_DestroyInitOutput(InitOutputData, ErrStat, ErrMsg)
call NWTC_Library_DestroyProgDesc(InitOutputData%Ver, ErrStat2, ErrMsg2)
call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName)
nullify(InitOutputData%FlowField)
nullify(InitOutputData%Vars)
end subroutine

subroutine ExtInfw_PackInitOutput(RF, Indata)
@@ -499,6 +504,13 @@ subroutine ExtInfw_PackInitOutput(RF, Indata)
call IfW_FlowField_PackFlowFieldType(RF, InData%FlowField)
end if
end if
call RegPack(RF, associated(InData%Vars))
if (associated(InData%Vars)) then
call RegPackPointer(RF, c_loc(InData%Vars), PtrInIndex)
if (.not. PtrInIndex) then
call NWTC_Library_PackModVarsType(RF, InData%Vars)
end if
end if
if (RegCheckErr(RF, RoutineName)) return
end subroutine

@@ -533,6 +545,24 @@ subroutine ExtInfw_UnPackInitOutput(RF, OutData)
else
OutData%FlowField => null()
end if
if (associated(OutData%Vars)) deallocate(OutData%Vars)
call RegUnpack(RF, IsAllocAssoc); if (RegCheckErr(RF, RoutineName)) return
if (IsAllocAssoc) then
call RegUnpackPointer(RF, Ptr, PtrIdx); if (RegCheckErr(RF, RoutineName)) return
if (c_associated(Ptr)) then
call c_f_pointer(Ptr, OutData%Vars)
else
allocate(OutData%Vars,stat=stat)
if (stat /= 0) then
call SetErrStat(ErrID_Fatal, 'Error allocating OutData%Vars.', RF%ErrStat, RF%ErrMsg, RoutineName)
return
end if
RF%Pointers(PtrIdx) = c_loc(OutData%Vars)
call NWTC_Library_UnpackModVarsType(RF, OutData%Vars) ! Vars
end if
else
OutData%Vars => null()
end if
end subroutine

SUBROUTINE ExtInfw_C2Fary_CopyInitOutput(InitOutputData, ErrStat, ErrMsg, SkipPointers)
@@ -582,6 +612,9 @@ subroutine ExtInfw_CopyMisc(SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMsg)
character(*), parameter :: RoutineName = 'ExtInfw_CopyMisc'
ErrStat = ErrID_None
ErrMsg = ''
call NWTC_Library_CopyModJacType(SrcMiscData%Jac, DstMiscData%Jac, CtrlCode, ErrStat2, ErrMsg2)
call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName)
if (ErrStat >= AbortErrLev) return
if (allocated(SrcMiscData%ActForceMotionsPoints)) then
LB(1:1) = lbound(SrcMiscData%ActForceMotionsPoints, kind=B8Ki)
UB(1:1) = ubound(SrcMiscData%ActForceMotionsPoints, kind=B8Ki)
@@ -671,6 +704,8 @@ subroutine ExtInfw_DestroyMisc(MiscData, ErrStat, ErrMsg)
character(*), parameter :: RoutineName = 'ExtInfw_DestroyMisc'
ErrStat = ErrID_None
ErrMsg = ''
call NWTC_Library_DestroyModJacType(MiscData%Jac, ErrStat2, ErrMsg2)
call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName)
if (allocated(MiscData%ActForceMotionsPoints)) then
LB(1:1) = lbound(MiscData%ActForceMotionsPoints, kind=B8Ki)
UB(1:1) = ubound(MiscData%ActForceMotionsPoints, kind=B8Ki)
@@ -727,6 +762,7 @@ subroutine ExtInfw_PackMisc(RF, Indata)
call SetErrStat(ErrID_Severe,'C_obj%object cannot be packed.', RF%ErrStat, RF%ErrMsg, RoutineName)
return
end if
call NWTC_Library_PackModJacType(RF, InData%Jac)
call RegPack(RF, allocated(InData%ActForceMotionsPoints))
if (allocated(InData%ActForceMotionsPoints)) then
call RegPackBounds(RF, 1, lbound(InData%ActForceMotionsPoints, kind=B8Ki), ubound(InData%ActForceMotionsPoints, kind=B8Ki))
@@ -784,6 +820,7 @@ subroutine ExtInfw_UnPackMisc(RF, OutData)
integer(B8Ki) :: PtrIdx
type(c_ptr) :: Ptr
if (RF%ErrStat /= ErrID_None) return
call NWTC_Library_UnpackModJacType(RF, OutData%Jac) ! Jac
if (allocated(OutData%ActForceMotionsPoints)) deallocate(OutData%ActForceMotionsPoints)
call RegUnpack(RF, IsAllocAssoc); if (RegCheckErr(RF, RoutineName)) return
if (IsAllocAssoc) then
@@ -898,9 +935,22 @@ subroutine ExtInfw_CopyParam(SrcParamData, DstParamData, CtrlCode, ErrStat, ErrM
character(*), intent( out) :: ErrMsg
integer(B8Ki) :: LB(1), UB(1)
integer(IntKi) :: ErrStat2
character(ErrMsgLen) :: ErrMsg2
character(*), parameter :: RoutineName = 'ExtInfw_CopyParam'
ErrStat = ErrID_None
ErrMsg = ''
if (associated(SrcParamData%Vars)) then
if (.not. associated(DstParamData%Vars)) then
allocate(DstParamData%Vars, stat=ErrStat2)
if (ErrStat2 /= 0) then
call SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%Vars.', ErrStat, ErrMsg, RoutineName)
return
end if
end if
call NWTC_Library_CopyModVarsType(SrcParamData%Vars, DstParamData%Vars, CtrlCode, ErrStat2, ErrMsg2)
call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName)
if (ErrStat >= AbortErrLev) return
end if
DstParamData%AirDens = SrcParamData%AirDens
DstParamData%C_obj%AirDens = SrcParamData%C_obj%AirDens
DstParamData%NumBl = SrcParamData%NumBl
@@ -959,9 +1009,17 @@ subroutine ExtInfw_DestroyParam(ParamData, ErrStat, ErrMsg)
type(ExtInfw_ParameterType), intent(inout) :: ParamData
integer(IntKi), intent( out) :: ErrStat
character(*), intent( out) :: ErrMsg
integer(IntKi) :: ErrStat2
character(ErrMsgLen) :: ErrMsg2
character(*), parameter :: RoutineName = 'ExtInfw_DestroyParam'
ErrStat = ErrID_None
ErrMsg = ''
if (associated(ParamData%Vars)) then
call NWTC_Library_DestroyModVarsType(ParamData%Vars, ErrStat2, ErrMsg2)
call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName)
deallocate(ParamData%Vars)
ParamData%Vars => null()
end if
if (associated(ParamData%forceBldRnodes)) then
deallocate(ParamData%forceBldRnodes)
ParamData%forceBldRnodes => null()
@@ -986,6 +1044,13 @@ subroutine ExtInfw_PackParam(RF, Indata)
call SetErrStat(ErrID_Severe,'C_obj%object cannot be packed.', RF%ErrStat, RF%ErrMsg, RoutineName)
return
end if
call RegPack(RF, associated(InData%Vars))
if (associated(InData%Vars)) then
call RegPackPointer(RF, c_loc(InData%Vars), PtrInIndex)
if (.not. PtrInIndex) then
call NWTC_Library_PackModVarsType(RF, InData%Vars)
end if
end if
call RegPack(RF, InData%AirDens)
call RegPack(RF, InData%NumBl)
call RegPack(RF, InData%NMappings)
@@ -1012,6 +1077,24 @@ subroutine ExtInfw_UnPackParam(RF, OutData)
integer(B8Ki) :: PtrIdx
type(c_ptr) :: Ptr
if (RF%ErrStat /= ErrID_None) return
if (associated(OutData%Vars)) deallocate(OutData%Vars)
call RegUnpack(RF, IsAllocAssoc); if (RegCheckErr(RF, RoutineName)) return
if (IsAllocAssoc) then
call RegUnpackPointer(RF, Ptr, PtrIdx); if (RegCheckErr(RF, RoutineName)) return
if (c_associated(Ptr)) then
call c_f_pointer(Ptr, OutData%Vars)
else
allocate(OutData%Vars,stat=stat)
if (stat /= 0) then
call SetErrStat(ErrID_Fatal, 'Error allocating OutData%Vars.', RF%ErrStat, RF%ErrMsg, RoutineName)
return
end if
RF%Pointers(PtrIdx) = c_loc(OutData%Vars)
call NWTC_Library_UnpackModVarsType(RF, OutData%Vars) ! Vars
end if
else
OutData%Vars => null()
end if
call RegUnpack(RF, OutData%AirDens); if (RegCheckErr(RF, RoutineName)) return
OutData%C_obj%AirDens = OutData%AirDens
call RegUnpack(RF, OutData%NumBl); if (RegCheckErr(RF, RoutineName)) return
Loading