Skip to content

Commit 4ec470d

Browse files
committed
SubDyn: self-weight reconstruction in floating systems
1 parent 65cbd8a commit 4ec470d

1 file changed

Lines changed: 14 additions & 3 deletions

File tree

modules/subdyn/src/SubDyn_Output.f90

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,10 @@ SUBROUTINE ConfigOutputNode_MKF_ID(pLst, iElem, iiNode, iStore, NodeID2)
248248
CALL ElemK(p%ElemProps(iElem), pLst%Ke(:,:,iiNode,iStore))
249249
CALL ElemF(p%ElemProps(iElem), Init%g, pLst%Fg(:,iiNode,iStore), FCe)
250250
! Apply superposition correction: include both the element gravity force vector
251-
! and the cable pretension nodal force when evaluating internal member loads.
251+
! and the initial cable pretension nodal force when evaluating internal member loads.
252+
! Note: pLst%Fg stores only element gravity + cable (excludes lumped masses, which are
253+
! external point forces, not internal element loads). For floating systems, these forces
254+
! are rotated in ElementForce using RRg2b to account for platform rigid body motion.
252255
pLst%Fg(:,iiNode,iStore) = pLst%Fg(:,iiNode,iStore) + FCe(1:12) ! gravity force + cable element force
253256
END SUBROUTINE ConfigOutputNode_MKF_ID
254257

@@ -498,6 +501,7 @@ subroutine ElementForce(pLst, iiNode, JJ, FM_elm, FK_elm, sgn, DIRCOS, bUseInput
498501
integer(IntKi) :: FirstOrSecond !< 1 or 2 if first node or second node
499502
integer(IntKi), dimension(2) :: ElemNodes ! Node IDs for element under consideration (may not be consecutive numbers)
500503
real(ReKi) , dimension(12) :: X_e, Xdd_e ! Displacement and acceleration for an element
504+
real(R8Ki) , dimension(12) :: Fg_e ! Gravity + initial cable pretension load vector (rotated for floating, static for fixed)
501505
integer(IntKi), dimension(2), parameter :: NodeNumber_To_Sign = (/-1, +1/)
502506

503507
iElem = pLst%ElmIDs(iiNode,JJ) ! element number
@@ -508,10 +512,17 @@ subroutine ElementForce(pLst, iiNode, JJ, FM_elm, FK_elm, sgn, DIRCOS, bUseInput
508512
X_e(7:12) = m%U_full_elast (p%NodesDOF(ElemNodes(2))%List(1:6)) ! No additional transformation required
509513
Xdd_e(1:6) = matmul(RRg2b,m%U_full_dotdot(p%NodesDOF(ElemNodes(1))%List(1:6))) ! Transform acceleration to be back in the Guyan frame
510514
Xdd_e(7:12) = matmul(RRg2b,m%U_full_dotdot(p%NodesDOF(ElemNodes(2))%List(1:6)))
515+
! For floating, gravity forces need rotation, but use only element gravity (pLst%Fg), not concentrated masses
516+
if (p%Floating) then
517+
Fg_e(1:6) = matmul(RRg2b, real(pLst%Fg(1:6,iiNode,JJ), R8Ki))
518+
Fg_e(7:12) = matmul(RRg2b, real(pLst%Fg(7:12,iiNode,JJ), R8Ki))
519+
else
520+
Fg_e = real(pLst%Fg(:,iiNode,JJ), R8Ki) ! Fixed-bottom: use static gravity + initial cable pretension (no rotation needed)
521+
endif
511522
if (.not. bUseInputDirCos) then
512523
DIRCOS=transpose(p%ElemProps(iElem)%DirCos)! global to local
513524
endif
514-
CALL CALC_NODE_FORCES( DIRCOS, pLst%Me(:,:,iiNode,JJ),pLst%Ke(:,:,iiNode,JJ), Xdd_e, X_e, pLst%Fg(:,iiNode,JJ), FirstOrSecond, FM_elm, FK_elm)
525+
CALL CALC_NODE_FORCES( DIRCOS, pLst%Me(:,:,iiNode,JJ),pLst%Ke(:,:,iiNode,JJ), Xdd_e, X_e, Fg_e, FirstOrSecond, FM_elm, FK_elm)
515526
end subroutine ElementForce
516527

517528
!====================================================================================================
@@ -523,7 +534,7 @@ SUBROUTINE CALC_NODE_FORCES(DIRCOS,Me,Ke,Udotdot,Y2 ,Fg, FirstOrSecond, FM_nod,
523534
Real(FEKi), DIMENSION (3,3), INTENT(IN) :: DIRCOS !direction cosice matrix (global to local) (3x3)
524535
Real(FEKi), DIMENSION (12,12), INTENT(IN) :: Me,Ke !element M and K matrices (12x12) in GLOBAL REFERENCE (DIRCOS^T K DIRCOS)
525536
Real(ReKi), DIMENSION (12), INTENT(IN) :: Udotdot, Y2 ! nodal accelerations and nodal displacements
526-
Real(FEKi), DIMENSION (12), INTENT(IN) :: Fg ! constant element load vector (gravity + cable)
537+
Real(FEKi), DIMENSION (12), INTENT(IN) :: Fg ! element load vector from gravity and initial cable pretension
527538
Integer(IntKi), INTENT(IN) :: FirstOrSecond !1 or 2 depending on node of interest
528539
REAL(ReKi), DIMENSION (6), INTENT(OUT) :: FM_nod, FK_nod !output static and dynamic forces and moments
529540
!Locals

0 commit comments

Comments
 (0)