Skip to content

Commit f5ff4b8

Browse files
authored
Merge pull request #2811 from andrew-platt/f/BD_ApplLoadsAtRoot
BD: output aero only loads mapped to the root
2 parents fbc084b + b13fa61 commit f5ff4b8

File tree

7 files changed

+688
-521
lines changed

7 files changed

+688
-521
lines changed
1.02 KB
Binary file not shown.

modules/beamdyn/src/BeamDyn.f90

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1746,6 +1746,27 @@ subroutine Init_MiscVars( p, u, y, m, ErrStat, ErrMsg )
17461746
CALL BD_CopyInput(u, m%u2, MESH_NEWCOPY, ErrStat2, ErrMsg2)
17471747
CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName )
17481748

1749+
! compute mapping of applied distributed loads to the root location
1750+
! NOTE: PtLoads are not handled at present. See comments in BeamDyn_IO.f90 for changes required.
1751+
if (p%CompAppliedLdAtRoot .and. p%BldMotionNodeLoc == BD_MESH_QP) then
1752+
! create point mesh at root (cousin of rootmotion)
1753+
CALL MeshCopy( SrcMesh = u%RootMotion &
1754+
, DestMesh = m%LoadsAtRoot &
1755+
, CtrlCode = MESH_COUSIN &
1756+
, IOS = COMPONENT_OUTPUT &
1757+
, Force = .TRUE. &
1758+
, Moment = .TRUE. &
1759+
, ErrStat = ErrStat2 &
1760+
, ErrMess = ErrMsg2 )
1761+
CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName )
1762+
if (ErrStat>=AbortErrLev) RETURN
1763+
1764+
! mapping of distributed loads to LoadsAtRoot
1765+
CALL MeshMapCreate( u%DistrLoad, m%LoadsAtRoot, m%Map_u_DistrLoad_to_R, ErrStat2, ErrMsg2 )
1766+
CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName )
1767+
m%LoadsAtRoot%remapFlag = .false.
1768+
1769+
endif
17491770

17501771
end subroutine Init_MiscVars
17511772
!-----------------------------------------------------------------------------------------------------------------------------------

modules/beamdyn/src/BeamDyn_IO.f90

Lines changed: 642 additions & 519 deletions
Large diffs are not rendered by default.

modules/beamdyn/src/BeamDyn_Types.f90

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,7 @@ MODULE BeamDyn_Types
237237
LOGICAL :: RotStates = .false. !< Orient states in rotating frame during linearization? (flag) [-]
238238
LOGICAL :: RelStates = .false. !< Define states relative to root motion during linearization? (flag) [-]
239239
LOGICAL :: CompAeroMaps = .FALSE. !< flag to determine if BeamDyn is computing aero maps (true) or running a normal simulation (false) [-]
240+
LOGICAL :: CompAppliedLdAtRoot = .FALSE. !< flag to determine if BeamDyn should compute the applied loads at root [-]
240241
END TYPE BD_ParameterType
241242
! =======================
242243
! ========= BD_InputType =======
@@ -295,8 +296,10 @@ MODULE BeamDyn_Types
295296
TYPE, PUBLIC :: BD_MiscVarType
296297
TYPE(MeshType) :: u_DistrLoad_at_y !< input loads at output node locations [-]
297298
TYPE(MeshType) :: y_BldMotion_at_u !< output motions at input node locations (displacements necessary for mapping loads) [-]
299+
TYPE(MeshType) :: LoadsAtRoot !< Applied loads mapped to root [-]
298300
TYPE(MeshMapType) :: Map_u_DistrLoad_to_y !< mapping of input loads to output node locations [-]
299301
TYPE(MeshMapType) :: Map_y_BldMotion_to_u !< mapping of output motions to input node locations (for load transfer) [-]
302+
TYPE(MeshMapType) :: Map_u_DistrLoad_to_R !< mapping of input loads to root location [-]
300303
INTEGER(IntKi) :: Un_Sum = 0_IntKi !< unit number of summary file [-]
301304
TYPE(EqMotionQP) :: qp !< Quadrature point calculation info [-]
302305
REAL(R8Ki) , DIMENSION(:,:), ALLOCATABLE :: lin_A !< A (dXdx) matrix used in linearization (before RotState is applied) [-]
@@ -1685,6 +1688,7 @@ subroutine BD_CopyParam(SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg)
16851688
DstParamData%RotStates = SrcParamData%RotStates
16861689
DstParamData%RelStates = SrcParamData%RelStates
16871690
DstParamData%CompAeroMaps = SrcParamData%CompAeroMaps
1691+
DstParamData%CompAppliedLdAtRoot = SrcParamData%CompAppliedLdAtRoot
16881692
end subroutine
16891693

16901694
subroutine BD_DestroyParam(ParamData, ErrStat, ErrMsg)
@@ -1899,6 +1903,7 @@ subroutine BD_PackParam(RF, Indata)
18991903
call RegPack(RF, InData%RotStates)
19001904
call RegPack(RF, InData%RelStates)
19011905
call RegPack(RF, InData%CompAeroMaps)
1906+
call RegPack(RF, InData%CompAppliedLdAtRoot)
19021907
if (RegCheckErr(RF, RoutineName)) return
19031908
end subroutine
19041909

@@ -2013,6 +2018,7 @@ subroutine BD_UnPackParam(RF, OutData)
20132018
call RegUnpack(RF, OutData%RotStates); if (RegCheckErr(RF, RoutineName)) return
20142019
call RegUnpack(RF, OutData%RelStates); if (RegCheckErr(RF, RoutineName)) return
20152020
call RegUnpack(RF, OutData%CompAeroMaps); if (RegCheckErr(RF, RoutineName)) return
2021+
call RegUnpack(RF, OutData%CompAppliedLdAtRoot); if (RegCheckErr(RF, RoutineName)) return
20162022
end subroutine
20172023

20182024
subroutine BD_CopyInput(SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg)
@@ -2747,12 +2753,18 @@ subroutine BD_CopyMisc(SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMsg)
27472753
call MeshCopy(SrcMiscData%y_BldMotion_at_u, DstMiscData%y_BldMotion_at_u, CtrlCode, ErrStat2, ErrMsg2 )
27482754
call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName)
27492755
if (ErrStat >= AbortErrLev) return
2756+
call MeshCopy(SrcMiscData%LoadsAtRoot, DstMiscData%LoadsAtRoot, CtrlCode, ErrStat2, ErrMsg2 )
2757+
call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName)
2758+
if (ErrStat >= AbortErrLev) return
27502759
call NWTC_Library_CopyMeshMapType(SrcMiscData%Map_u_DistrLoad_to_y, DstMiscData%Map_u_DistrLoad_to_y, CtrlCode, ErrStat2, ErrMsg2)
27512760
call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName)
27522761
if (ErrStat >= AbortErrLev) return
27532762
call NWTC_Library_CopyMeshMapType(SrcMiscData%Map_y_BldMotion_to_u, DstMiscData%Map_y_BldMotion_to_u, CtrlCode, ErrStat2, ErrMsg2)
27542763
call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName)
27552764
if (ErrStat >= AbortErrLev) return
2765+
call NWTC_Library_CopyMeshMapType(SrcMiscData%Map_u_DistrLoad_to_R, DstMiscData%Map_u_DistrLoad_to_R, CtrlCode, ErrStat2, ErrMsg2)
2766+
call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName)
2767+
if (ErrStat >= AbortErrLev) return
27562768
DstMiscData%Un_Sum = SrcMiscData%Un_Sum
27572769
call BD_CopyEqMotionQP(SrcMiscData%qp, DstMiscData%qp, CtrlCode, ErrStat2, ErrMsg2)
27582770
call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName)
@@ -3138,10 +3150,14 @@ subroutine BD_DestroyMisc(MiscData, ErrStat, ErrMsg)
31383150
call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName)
31393151
call MeshDestroy( MiscData%y_BldMotion_at_u, ErrStat2, ErrMsg2)
31403152
call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName)
3153+
call MeshDestroy( MiscData%LoadsAtRoot, ErrStat2, ErrMsg2)
3154+
call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName)
31413155
call NWTC_Library_DestroyMeshMapType(MiscData%Map_u_DistrLoad_to_y, ErrStat2, ErrMsg2)
31423156
call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName)
31433157
call NWTC_Library_DestroyMeshMapType(MiscData%Map_y_BldMotion_to_u, ErrStat2, ErrMsg2)
31443158
call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName)
3159+
call NWTC_Library_DestroyMeshMapType(MiscData%Map_u_DistrLoad_to_R, ErrStat2, ErrMsg2)
3160+
call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName)
31453161
call BD_DestroyEqMotionQP(MiscData%qp, ErrStat2, ErrMsg2)
31463162
call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName)
31473163
if (allocated(MiscData%lin_A)) then
@@ -3247,8 +3263,10 @@ subroutine BD_PackMisc(RF, Indata)
32473263
if (RF%ErrStat >= AbortErrLev) return
32483264
call MeshPack(RF, InData%u_DistrLoad_at_y)
32493265
call MeshPack(RF, InData%y_BldMotion_at_u)
3266+
call MeshPack(RF, InData%LoadsAtRoot)
32503267
call NWTC_Library_PackMeshMapType(RF, InData%Map_u_DistrLoad_to_y)
32513268
call NWTC_Library_PackMeshMapType(RF, InData%Map_y_BldMotion_to_u)
3269+
call NWTC_Library_PackMeshMapType(RF, InData%Map_u_DistrLoad_to_R)
32523270
call RegPack(RF, InData%Un_Sum)
32533271
call BD_PackEqMotionQP(RF, InData%qp)
32543272
call RegPackAlloc(RF, InData%lin_A)
@@ -3296,8 +3314,10 @@ subroutine BD_UnPackMisc(RF, OutData)
32963314
if (RF%ErrStat /= ErrID_None) return
32973315
call MeshUnpack(RF, OutData%u_DistrLoad_at_y) ! u_DistrLoad_at_y
32983316
call MeshUnpack(RF, OutData%y_BldMotion_at_u) ! y_BldMotion_at_u
3317+
call MeshUnpack(RF, OutData%LoadsAtRoot) ! LoadsAtRoot
32993318
call NWTC_Library_UnpackMeshMapType(RF, OutData%Map_u_DistrLoad_to_y) ! Map_u_DistrLoad_to_y
33003319
call NWTC_Library_UnpackMeshMapType(RF, OutData%Map_y_BldMotion_to_u) ! Map_y_BldMotion_to_u
3320+
call NWTC_Library_UnpackMeshMapType(RF, OutData%Map_u_DistrLoad_to_R) ! Map_u_DistrLoad_to_R
33013321
call RegUnpack(RF, OutData%Un_Sum); if (RegCheckErr(RF, RoutineName)) return
33023322
call BD_UnpackEqMotionQP(RF, OutData%qp) ! qp
33033323
call RegUnpackAlloc(RF, OutData%lin_A); if (RegCheckErr(RF, RoutineName)) return

modules/beamdyn/src/Registry_BeamDyn.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ typedef ^ ParameterType Integer Jac_nx -
250250
typedef ^ ParameterType logical RotStates - - - "Orient states in rotating frame during linearization? (flag)" -
251251
typedef ^ ParameterType Logical RelStates - - - "Define states relative to root motion during linearization? (flag)" -
252252
typedef ^ ParameterType LOGICAL CompAeroMaps - .FALSE. - "flag to determine if BeamDyn is computing aero maps (true) or running a normal simulation (false)" -
253+
typedef ^ ParameterType LOGICAL CompAppliedLdAtRoot - .FALSE. - "flag to determine if BeamDyn should compute the applied loads at root" -
253254

254255

255256
# ..... Inputs
@@ -330,8 +331,10 @@ typedef ^ EqMotionQP ^ Yd :::: - - "Dissipative
330331
# e.g. indices for searching in an array, large arrays that are local variables in any routine called multiple times, etc.
331332
typedef ^ MiscVarType MeshType u_DistrLoad_at_y - - - "input loads at output node locations" -
332333
typedef ^ MiscVarType MeshType y_BldMotion_at_u - - - "output motions at input node locations (displacements necessary for mapping loads)" -
334+
typedef ^ MiscVarType MeshType LoadsAtRoot - - - "Applied loads mapped to root" -
333335
typedef ^ MiscVarType MeshMapType Map_u_DistrLoad_to_y - - - "mapping of input loads to output node locations" -
334336
typedef ^ MiscVarType MeshMapType Map_y_BldMotion_to_u - - - "mapping of output motions to input node locations (for load transfer)" -
337+
typedef ^ MiscVarType MeshMapType Map_u_DistrLoad_to_R - - - "mapping of input loads to root location" -
335338
typedef ^ MiscVarType IntKi Un_Sum - - - "unit number of summary file" -
336339
typedef ^ MiscVarType EqMotionQP qp - - - "Quadrature point calculation info" -
337340
typedef ^ MiscVarType R8Ki lin_A {:}{:} - - "A (dXdx) matrix used in linearization (before RotState is applied)" -

modules/openfast-library/src/FAST_Registry.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -720,7 +720,7 @@ typedef ^ FAST_ModuleMapType MeshMapType TStC_P_2_ED_P_T {:} - - "Map ServoDyn/T
720720
typedef ^ FAST_ModuleMapType MeshMapType ED_L_2_BStC_P_B {:}{:} - - "Map ElastoDyn blade line2 mesh to ServoDyn/BStC point mesh"
721721
typedef ^ FAST_ModuleMapType MeshMapType BStC_P_2_ED_P_B {:}{:} - - "Map ServoDyn/BStC point mesh to ElastoDyn point load mesh on the blade"
722722
typedef ^ FAST_ModuleMapType MeshMapType BD_L_2_BStC_P_B {:}{:} - - "Map BeamDyn blade line2 mesh to ServoDyn/BStC point mesh"
723-
typedef ^ FAST_ModuleMapType MeshMapType BStC_P_2_BD_P_B {:}{:} - - "Map ServoDyn/BStC point mesh to BeamDyn point load mesh on the blade"
723+
typedef ^ FAST_ModuleMapType MeshMapType BStC_P_2_BD_P_B {:}{:} - - "Map ServoDyn/BStC point mesh to BeamDyn distributed load mesh on the blade"
724724
# ED/SD <-> SrvD/StC -- Platform TMD
725725
typedef ^ FAST_ModuleMapType MeshMapType SStC_P_P_2_SubStructure {:} - - "Map ServoDyn/SStC platform point mesh load to SubDyn/ElastoDyn point load mesh"
726726
typedef ^ FAST_ModuleMapType MeshMapType SubStructure_2_SStC_P_P {:} - - "Map SubDyn y3mesh or ED platform mesh motion to ServoDyn/SStC point mesh"

modules/openfast-library/src/FAST_Types.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -743,7 +743,7 @@ MODULE FAST_Types
743743
TYPE(MeshMapType) , DIMENSION(:,:), ALLOCATABLE :: ED_L_2_BStC_P_B !< Map ElastoDyn blade line2 mesh to ServoDyn/BStC point mesh [-]
744744
TYPE(MeshMapType) , DIMENSION(:,:), ALLOCATABLE :: BStC_P_2_ED_P_B !< Map ServoDyn/BStC point mesh to ElastoDyn point load mesh on the blade [-]
745745
TYPE(MeshMapType) , DIMENSION(:,:), ALLOCATABLE :: BD_L_2_BStC_P_B !< Map BeamDyn blade line2 mesh to ServoDyn/BStC point mesh [-]
746-
TYPE(MeshMapType) , DIMENSION(:,:), ALLOCATABLE :: BStC_P_2_BD_P_B !< Map ServoDyn/BStC point mesh to BeamDyn point load mesh on the blade [-]
746+
TYPE(MeshMapType) , DIMENSION(:,:), ALLOCATABLE :: BStC_P_2_BD_P_B !< Map ServoDyn/BStC point mesh to BeamDyn distributed load mesh on the blade [-]
747747
TYPE(MeshMapType) , DIMENSION(:), ALLOCATABLE :: SStC_P_P_2_SubStructure !< Map ServoDyn/SStC platform point mesh load to SubDyn/ElastoDyn point load mesh [-]
748748
TYPE(MeshMapType) , DIMENSION(:), ALLOCATABLE :: SubStructure_2_SStC_P_P !< Map SubDyn y3mesh or ED platform mesh motion to ServoDyn/SStC point mesh [-]
749749
TYPE(MeshMapType) :: ED_P_2_SrvD_P_P !< Map ElastoDyn/Simplified-ElastoDyn platform point mesh motion to ServoDyn point mesh -- for passing to controller [-]

0 commit comments

Comments
 (0)