From 4f1c8450907803dd9e53b853513f3444af953fcf Mon Sep 17 00:00:00 2001 From: Roger Bergua Date: Wed, 3 Jun 2026 12:50:23 -0600 Subject: [PATCH 1/3] Update beams self-weight (only sensor outputs) --- modules/subdyn/src/SubDyn_Output.f90 | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/modules/subdyn/src/SubDyn_Output.f90 b/modules/subdyn/src/SubDyn_Output.f90 index 970b6de36..a5d1602ad 100644 --- a/modules/subdyn/src/SubDyn_Output.f90 +++ b/modules/subdyn/src/SubDyn_Output.f90 @@ -247,10 +247,9 @@ SUBROUTINE ConfigOutputNode_MKF_ID(pLst, iElem, iiNode, iStore, NodeID2) CALL ElemM(p%ElemProps(iElem), pLst%Me(:,:,iiNode,iStore)) CALL ElemK(p%ElemProps(iElem), pLst%Ke(:,:,iiNode,iStore)) CALL ElemF(p%ElemProps(iElem), Init%g, pLst%Fg(:,iiNode,iStore), FCe) - ! NOTE: Removing this force contribution for now - ! The output of subdyn will just be the "Kx" part for now - !pLst%Fg(:,iiNode,iStore) = pLst%Fg(:,iiNode,iStore) + FCe(1:12) ! Adding cable element force - pLst%Fg(:,iiNode,iStore) = FCe(1:12) ! Adding cable element force + ! Apply superposition correction: include both the element gravity force vector + ! and the cable pretension nodal force when evaluating internal member loads. + pLst%Fg(:,iiNode,iStore) = pLst%Fg(:,iiNode,iStore) + FCe(1:12) ! gravity force + cable element force END SUBROUTINE ConfigOutputNode_MKF_ID From 65d51f86992cc05cc27a6efc980dbd7cf20e87de Mon Sep 17 00:00:00 2001 From: Roger Bergua Date: Thu, 4 Jun 2026 08:40:21 -0600 Subject: [PATCH 2/3] Fix (SubDyn): remove incorrect comment about Fg --- modules/subdyn/src/SubDyn_Output.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/subdyn/src/SubDyn_Output.f90 b/modules/subdyn/src/SubDyn_Output.f90 index a5d1602ad..f66e1f95f 100644 --- a/modules/subdyn/src/SubDyn_Output.f90 +++ b/modules/subdyn/src/SubDyn_Output.f90 @@ -532,7 +532,7 @@ SUBROUTINE CALC_NODE_FORCES(DIRCOS,Me,Ke,Udotdot,Y2 ,Fg, FirstOrSecond, FM_nod, FM_glb = matmul(Me,Udotdot) ! GLOBAL REFERENCE FF_glb = matmul(Ke,Y2) ! GLOBAL REFERENCE - FF_glb = FF_glb - Fg ! GLOBAL REFERENCE ! NOTE: Fg is now 0, only the "Kx" part in Fk + FF_glb = FF_glb - Fg ! GLOBAL REFERENCE DO L=1,4 ! Transforming coordinates 3 at a time FM_elm((L-1)*3+1:L*3) = matmul(DIRCOS, FM_glb( (L-1)*3+1:L*3 ) ) FF_elm((L-1)*3+1:L*3) = matmul(DIRCOS, FF_glb( (L-1)*3+1:L*3 ) ) From 65cbd8aa77cac966f90af855a0f0f7bb29ca85df Mon Sep 17 00:00:00 2001 From: Roger Bergua Date: Thu, 4 Jun 2026 09:15:48 -0600 Subject: [PATCH 3/3] SubDyn: update CALC_NODE_FORCES description and comments --- modules/subdyn/src/SubDyn_Output.f90 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/subdyn/src/SubDyn_Output.f90 b/modules/subdyn/src/SubDyn_Output.f90 index f66e1f95f..61e80cea9 100644 --- a/modules/subdyn/src/SubDyn_Output.f90 +++ b/modules/subdyn/src/SubDyn_Output.f90 @@ -515,15 +515,15 @@ subroutine ElementForce(pLst, iiNode, JJ, FM_elm, FK_elm, sgn, DIRCOS, bUseInput end subroutine ElementForce !==================================================================================================== - !> Calculates static and dynamic forces for a given element, using K and M of the element, and - !output quantities Udotdot and Y2 containing the - !and K2 indicating wheter the 1st (1) or 2nd (2) node is to be picked + !> Calculates static and dynamic nodal forces for a given element using its stiffness and mass matrices. + ! Udotdot contains nodal accelerations and Y2 contains nodal displacements. + ! FirstOrSecond selects whether the node of interest is the first (1) or second (2) node of the element. !---------------------------------------------------------------------------------------------------- SUBROUTINE CALC_NODE_FORCES(DIRCOS,Me,Ke,Udotdot,Y2 ,Fg, FirstOrSecond, FM_nod, FK_nod) Real(FEKi), DIMENSION (3,3), INTENT(IN) :: DIRCOS !direction cosice matrix (global to local) (3x3) Real(FEKi), DIMENSION (12,12), INTENT(IN) :: Me,Ke !element M and K matrices (12x12) in GLOBAL REFERENCE (DIRCOS^T K DIRCOS) - Real(ReKi), DIMENSION (12), INTENT(IN) :: Udotdot, Y2 !acceleration and velocities, gravity forces - Real(FEKi), DIMENSION (12), INTENT(IN) :: Fg !acceleration and velocities, gravity forces + Real(ReKi), DIMENSION (12), INTENT(IN) :: Udotdot, Y2 ! nodal accelerations and nodal displacements + Real(FEKi), DIMENSION (12), INTENT(IN) :: Fg ! constant element load vector (gravity + cable) Integer(IntKi), INTENT(IN) :: FirstOrSecond !1 or 2 depending on node of interest REAL(ReKi), DIMENSION (6), INTENT(OUT) :: FM_nod, FK_nod !output static and dynamic forces and moments !Locals @@ -546,7 +546,7 @@ END SUBROUTINE SDOut_MapOutputs !==================================================================================================== SUBROUTINE SDOut_CloseSum( UnSum, ErrStat, ErrMsg ) - INTEGER, INTENT( IN ) :: UnSum ! the unit number for the SubDyn summary file + INTEGER, INTENT( IN ) :: UnSum ! the unit number for the SubDyn summary file INTEGER, INTENT( OUT ) :: ErrStat ! returns a non-zero value when an error occurs CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None ! Local variables