Skip to content
Open
Show file tree
Hide file tree
Changes from 28 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
9450632
Implemented force extrapolation to improve SubDyn force outputs at me…
luwang00 Jun 17, 2026
f7e8d7c
SubDyn: Fixed a sign error in the member load outputs with the OutAll…
luwang00 Jun 23, 2026
db1b213
SubDyn: Removed the inertial member load output channels, e.g., M1N1F…
luwang00 Jun 23, 2026
c0da6e7
SubDyn: Fixed output file column headers with the OutAll option
luwang00 Jun 23, 2026
835a963
Update beams self-weight (only sensor outputs)
RBergua Jun 3, 2026
8b73bfb
Fix (SubDyn): remove incorrect comment about Fg
RBergua Jun 4, 2026
ee6d8df
SubDyn: update CALC_NODE_FORCES description and comments
RBergua Jun 4, 2026
2a4d223
SubDyn: self-weight reconstruction in floating systems
RBergua Jun 5, 2026
5d82014
SubDyn floating: equivalent nodal moments based on the actual directi…
RBergua Jun 6, 2026
94aaf91
SubDyn floating: refactored self-weight output calculation
RBergua Jun 6, 2026
374d19f
SubDyn_Output.f90: clean up trailing whitespace
RBergua Jun 6, 2026
a0d4677
New SD regression test self-weight CTestList
RBergua Jun 9, 2026
821cee3
Add SubDyn self-weight regression test
RBergua Jun 9, 2026
ae7eb8f
SubDyn: Fixed a new bug with load output when dealing with non-beam m…
luwang00 Jun 23, 2026
88c0628
SubDyn_Output.f90: Clarification self-weight vs cable pretension
RBergua Jun 24, 2026
6151e5e
SubDyn: Clean up load output code
luwang00 Jun 24, 2026
6857d52
SubDyn_Output.f90: separate beam self-weight (forces zeroed) and cabl…
RBergua Jun 24, 2026
01ef866
Merge RBergua/SubDyn_self-weight
luwang00 Jun 24, 2026
83b32f0
SubDyn: more clean-up
luwang00 Jun 24, 2026
f616b64
Update r-test pointer to include SubDyn self-weight test
RBergua Jun 24, 2026
f0838ab
SubDyn: Fix member load outputs at revolute joints
luwang00 Jun 25, 2026
b6941f5
Merge branch 'SubDyn_self-weight' of https://github.com/RBergua/openf…
luwang00 Jun 25, 2026
d7d87e2
Update r-test pointer to latest r-test PR #183
RBergua Jun 25, 2026
23e2114
SubDyn: Make sure SubDyn outputs rotation on the right side of a revo…
luwang00 Jun 25, 2026
7676e85
SubDyn_Output: Fix cable pretension rotation for floating systems
RBergua Jun 26, 2026
2b12af7
Update r-test pointer
luwang00 Jun 26, 2026
47067ae
Update r-test pointer
luwang00 Jun 26, 2026
b7e6d44
Update r-test pointer
luwang00 Jun 29, 2026
be076f8
Updated SubDyn user docs to remove the deprecated dynamic (inertial) …
luwang00 Jun 29, 2026
663e3da
Fix typo
RBergua Jul 8, 2026
cce0a10
Updated SubDyn user docs on how the nodal load outputs are computed. …
luwang00 Jul 8, 2026
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
500 changes: 289 additions & 211 deletions modules/subdyn/src/SubDyn_Output.f90

Large diffs are not rendered by default.

48,617 changes: 20,281 additions & 28,336 deletions modules/subdyn/src/SubDyn_Output_Params.f90

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion modules/subdyn/src/SubDyn_Registry.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ typedef ^ MeshAuxDataType INTEGER NodeCnt {:} - - "Node ordina
typedef ^ MeshAuxDataType INTEGER NodeIDs {:} - - "Node IDs associated with ordinal numbers for the output member"
typedef ^ MeshAuxDataType INTEGER ElmIDs {:}{:} - - "Element IDs connected to each NodeIDs; max 10 elements"
typedef ^ MeshAuxDataType INTEGER ElmNds {:}{:} - - "Flag to indicate 1st or 2nd node of element for each ElmIDs"
typedef ^ MeshAuxDataType R8Ki Me {:}{:}{:}{:} - - "Mass matrix connected to each joint element for outAll output"
typedef ^ MeshAuxDataType R8Ki Ke {:}{:}{:}{:} - - "Mass matrix connected to each joint element for outAll output"
typedef ^ MeshAuxDataType R8Ki Fg {:}{:}{:} - - "Gravity load vector connected to each joint element for requested member output"
typedef ^ MeshAuxDataType LOGICAL extrap {:} - - "Whether to extrapolate force; true for member end nodes if member has more than 1 element"

# CB_MatArrays: Matrices and arrays for CB summary
typedef ^ CB_MatArrays R8Ki MBB {:}{:} - - "FULL MBB ( no constraints applied)"
Expand Down
36 changes: 18 additions & 18 deletions modules/subdyn/src/SubDyn_Types.f90
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,9 @@ MODULE SubDyn_Types
INTEGER(IntKi) , DIMENSION(:), ALLOCATABLE :: NodeIDs !< Node IDs associated with ordinal numbers for the output member [-]
INTEGER(IntKi) , DIMENSION(:,:), ALLOCATABLE :: ElmIDs !< Element IDs connected to each NodeIDs; max 10 elements [-]
INTEGER(IntKi) , DIMENSION(:,:), ALLOCATABLE :: ElmNds !< Flag to indicate 1st or 2nd node of element for each ElmIDs [-]
REAL(R8Ki) , DIMENSION(:,:,:,:), ALLOCATABLE :: Me !< Mass matrix connected to each joint element for outAll output [-]
REAL(R8Ki) , DIMENSION(:,:,:,:), ALLOCATABLE :: Ke !< Mass matrix connected to each joint element for outAll output [-]
REAL(R8Ki) , DIMENSION(:,:,:), ALLOCATABLE :: Fg !< Gravity load vector connected to each joint element for requested member output [-]
LOGICAL , DIMENSION(:), ALLOCATABLE :: extrap !< Whether to extrapolate force; true for member end nodes if member has more than 1 element [-]
END TYPE MeshAuxDataType
! =======================
! ========= CB_MatArrays =======
Expand Down Expand Up @@ -546,18 +546,6 @@ subroutine SD_CopyMeshAuxDataType(SrcMeshAuxDataTypeData, DstMeshAuxDataTypeData
end if
DstMeshAuxDataTypeData%ElmNds = SrcMeshAuxDataTypeData%ElmNds
end if
if (allocated(SrcMeshAuxDataTypeData%Me)) then
LB(1:4) = lbound(SrcMeshAuxDataTypeData%Me)
UB(1:4) = ubound(SrcMeshAuxDataTypeData%Me)
if (.not. allocated(DstMeshAuxDataTypeData%Me)) then
allocate(DstMeshAuxDataTypeData%Me(LB(1):UB(1),LB(2):UB(2),LB(3):UB(3),LB(4):UB(4)), stat=ErrStat2)
if (ErrStat2 /= 0) then
call SetErrStat(ErrID_Fatal, 'Error allocating DstMeshAuxDataTypeData%Me.', ErrStat, ErrMsg, RoutineName)
return
end if
end if
DstMeshAuxDataTypeData%Me = SrcMeshAuxDataTypeData%Me
end if
if (allocated(SrcMeshAuxDataTypeData%Ke)) then
LB(1:4) = lbound(SrcMeshAuxDataTypeData%Ke)
UB(1:4) = ubound(SrcMeshAuxDataTypeData%Ke)
Expand All @@ -582,6 +570,18 @@ subroutine SD_CopyMeshAuxDataType(SrcMeshAuxDataTypeData, DstMeshAuxDataTypeData
end if
DstMeshAuxDataTypeData%Fg = SrcMeshAuxDataTypeData%Fg
end if
if (allocated(SrcMeshAuxDataTypeData%extrap)) then
LB(1:1) = lbound(SrcMeshAuxDataTypeData%extrap)
UB(1:1) = ubound(SrcMeshAuxDataTypeData%extrap)
if (.not. allocated(DstMeshAuxDataTypeData%extrap)) then
allocate(DstMeshAuxDataTypeData%extrap(LB(1):UB(1)), stat=ErrStat2)
if (ErrStat2 /= 0) then
call SetErrStat(ErrID_Fatal, 'Error allocating DstMeshAuxDataTypeData%extrap.', ErrStat, ErrMsg, RoutineName)
return
end if
end if
DstMeshAuxDataTypeData%extrap = SrcMeshAuxDataTypeData%extrap
end if
end subroutine

subroutine SD_DestroyMeshAuxDataType(MeshAuxDataTypeData, ErrStat, ErrMsg)
Expand All @@ -603,15 +603,15 @@ subroutine SD_DestroyMeshAuxDataType(MeshAuxDataTypeData, ErrStat, ErrMsg)
if (allocated(MeshAuxDataTypeData%ElmNds)) then
deallocate(MeshAuxDataTypeData%ElmNds)
end if
if (allocated(MeshAuxDataTypeData%Me)) then
deallocate(MeshAuxDataTypeData%Me)
end if
if (allocated(MeshAuxDataTypeData%Ke)) then
deallocate(MeshAuxDataTypeData%Ke)
end if
if (allocated(MeshAuxDataTypeData%Fg)) then
deallocate(MeshAuxDataTypeData%Fg)
end if
if (allocated(MeshAuxDataTypeData%extrap)) then
deallocate(MeshAuxDataTypeData%extrap)
end if
end subroutine

subroutine SD_PackMeshAuxDataType(RF, Indata)
Expand All @@ -625,9 +625,9 @@ subroutine SD_PackMeshAuxDataType(RF, Indata)
call RegPackAlloc(RF, InData%NodeIDs)
call RegPackAlloc(RF, InData%ElmIDs)
call RegPackAlloc(RF, InData%ElmNds)
call RegPackAlloc(RF, InData%Me)
call RegPackAlloc(RF, InData%Ke)
call RegPackAlloc(RF, InData%Fg)
call RegPackAlloc(RF, InData%extrap)
if (RegCheckErr(RF, RoutineName)) return
end subroutine

Expand All @@ -645,9 +645,9 @@ subroutine SD_UnPackMeshAuxDataType(RF, OutData)
call RegUnpackAlloc(RF, OutData%NodeIDs); if (RegCheckErr(RF, RoutineName)) return
call RegUnpackAlloc(RF, OutData%ElmIDs); if (RegCheckErr(RF, RoutineName)) return
call RegUnpackAlloc(RF, OutData%ElmNds); if (RegCheckErr(RF, RoutineName)) return
call RegUnpackAlloc(RF, OutData%Me); if (RegCheckErr(RF, RoutineName)) return
call RegUnpackAlloc(RF, OutData%Ke); if (RegCheckErr(RF, RoutineName)) return
call RegUnpackAlloc(RF, OutData%Fg); if (RegCheckErr(RF, RoutineName)) return
call RegUnpackAlloc(RF, OutData%extrap); if (RegCheckErr(RF, RoutineName)) return
end subroutine

subroutine SD_CopyCB_MatArrays(SrcCB_MatArraysData, DstCB_MatArraysData, CtrlCode, ErrStat, ErrMsg)
Expand Down
9 changes: 5 additions & 4 deletions reg_tests/CTestList.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,11 @@ function(regression TEST_SCRIPT EXECUTABLE SOURCE_DIRECTORY BUILD_DIRECTORY STEA
if(STEADYSTATE_FLAG STREQUAL " ")
set(STEADYSTATE_FLAG "")
endif()

if(OTHER_FLAGS STREQUAL " ")
set(OTHER_FLAGS "")
endif()

add_test(
${TESTNAME} ${Python_EXECUTABLE}
${TEST_SCRIPT}
Expand Down Expand Up @@ -111,7 +111,7 @@ function(of_fastlib_regression TESTNAME LABEL)
regression(${TEST_SCRIPT} ${OPENFAST_EXECUTABLE} ${SOURCE_DIRECTORY} ${BUILD_DIRECTORY} " " "${TESTNAME}_fastlib" "${LABEL}" " " ${TESTNAME})
endfunction(of_fastlib_regression)

# openfast aeroacoustic
# openfast aeroacoustic
function(of_regression_aeroacoustic TESTNAME LABEL)
set(TEST_SCRIPT "${CMAKE_CURRENT_LIST_DIR}/executeOpenfastAeroAcousticRegressionCase.py")
set(OPENFAST_EXECUTABLE "${CTEST_OPENFAST_EXECUTABLE}")
Expand Down Expand Up @@ -514,7 +514,7 @@ sd_regression("SD_PendulumDamp" "subdyn;offshore")
sd_regression("SD_Rigid" "subdyn;offshore")
sd_regression("SD_SparHanging" "subdyn;offshore")
sd_regression("SD_AnsysComp1_PinBeam" "subdyn;offshore") # TODO Issue #855
sd_regression("SD_AnsysComp2_Cable" "subdyn;offshore")
sd_regression("SD_AnsysComp2_Cable" "subdyn;offshore")
sd_regression("SD_AnsysComp3_PinBeamCable" "subdyn;offshore") # TODO Issue #855
sd_regression("SD_Spring_Case1" "subdyn;offshore")
sd_regression("SD_Spring_Case2" "subdyn;offshore")
Expand All @@ -523,6 +523,7 @@ sd_regression("SD_Revolute_Joint" "subdyn;offshore")
sd_regression("SD_2Beam_Spring" "subdyn;offshore")
sd_regression("SD_2Beam_Cantilever" "subdyn;offshore")
sd_regression("SD_CantileverBeam_Rectangular" "subdyn;offshore")
sd_regression("SD_SelfWeight_FloatingSystem" "subdyn;offshore")
# TODO test below are bugs, should be added when fixed
# sd_regression("SD_Force" "subdyn;offshore")
# sd_regression("SD_AnsysComp4_UniversalCableRigid" "subdyn;offshore")
Expand Down
2 changes: 1 addition & 1 deletion reg_tests/r-test
Submodule r-test updated 28 files
+ glue-codes/openfast/5MW_OC3Trpd_DLL_WSt_WavesReg/5MW_OC3Trpd_DLL_WSt_WavesReg.outb
+ glue-codes/openfast/5MW_OC4Jckt_DLL_WTurb_WavesIrr_MGrowth/5MW_OC4Jckt_DLL_WTurb_WavesIrr_MGrowth.outb
+1 −0 modules/subdyn/CaseList.md
+67 −0 modules/subdyn/SD_AnsysComp1_PinBeam/ANSYS_reference_results.txt
+22 −0 modules/subdyn/SD_AnsysComp1_PinBeam/README.md
+ modules/subdyn/SD_AnsysComp1_PinBeam/Revolute_Joint_SubDyn.png
+12 −12 modules/subdyn/SD_AnsysComp1_PinBeam/SD_AnsysComp1_PinBeam.SD.out
+67 −0 modules/subdyn/SD_AnsysComp2_Cable/ANSYS_reference_results.txt
+ modules/subdyn/SD_AnsysComp2_Cable/Cable_SubDyn.png
+28 −0 modules/subdyn/SD_AnsysComp2_Cable/README.md
+11 −11 modules/subdyn/SD_AnsysComp2_Cable/SD_AnsysComp2_Cable.SD.out
+67 −0 modules/subdyn/SD_AnsysComp3_PinBeamCable/ANSYS_reference_results.txt
+36 −0 modules/subdyn/SD_AnsysComp3_PinBeamCable/README.md
+ modules/subdyn/SD_AnsysComp3_PinBeamCable/Revolute_Joint_and_Cables_SubDyn.png
+101 −101 modules/subdyn/SD_AnsysComp3_PinBeamCable/SD_AnsysComp3_PinBeamCable.SD.out
+2,003 −2,003 modules/subdyn/SD_Cable_5Joints/SD_Cable_5Joints.SD.out
+0 −3 modules/subdyn/SD_Cable_5Joints/SD_Cable_5Joints.dat
+5,003 −5,003 modules/subdyn/SD_PendulumDamp/SD_PendulumDamp.SD.out
+3 −3 modules/subdyn/SD_PendulumDamp/SD_PendulumDamp.dat
+119 −0 modules/subdyn/SD_SelfWeight_FloatingSystem/Beams_self-weight_floating_system.m
+10,001 −0 modules/subdyn/SD_SelfWeight_FloatingSystem/Prescribed_rotation.dat
+20 −0 modules/subdyn/SD_SelfWeight_FloatingSystem/README.md
+9,009 −0 modules/subdyn/SD_SelfWeight_FloatingSystem/SD_SelfWeight_FloatingSystem.SD.out
+104 −0 modules/subdyn/SD_SelfWeight_FloatingSystem/SD_SelfWeight_FloatingSystem.dat
+28 −0 modules/subdyn/SD_SelfWeight_FloatingSystem/SD_SelfWeight_FloatingSystem.dvr
+ modules/subdyn/SD_SelfWeight_FloatingSystem/Self-weight_SubDyn.png
+5,003 −5,003 modules/subdyn/SD_SparHanging/SD_SparHanging.SD.out
+0 −2 modules/subdyn/SD_SparHanging/SD_SparHanging.dat
Loading