@@ -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 (R8 Ki) , 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), R8 Ki))
518+ Fg_e(7 :12 ) = matmul (RRg2b, real (pLst% Fg(7 :12 ,iiNode,JJ), R8 Ki))
519+ else
520+ Fg_e = real (pLst% Fg(:,iiNode,JJ), R8 Ki) ! 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