Internal Damping of ChElementCableANCF (possible bug?)

60 views
Skip to first unread message

David Marten

unread,
Jun 28, 2023, 8:46:08 AM6/28/23
to ProjectChrono
Hi all!

recently I have started looking at the damping of cable elements ( ChElementCableANCF ).
I have noticed that the rayleigh damping coefficient specified in  ChBeamSectionCable is not having an effect (and is effectively not accessed by  ChElementCableANCF ).

However, using ChElementCableANCF::SetAlphaDamp(double a), it is possible to assign a "internal damping coefficient" to the cable element. My question is: how can this damping factor be interpreted? Is it similar to the rayleigh beta (K-proprtional) damping?

Furthermore, I think I have found a bug in: ChElementCableANCF::ComputeInternalJacobians(double Kfactor, double Rfactor). When setting a damping factor using ChElementCableANCF::SetAlphaDamp() my test system could not be solved. Looking at the source code of  ChElementCableANCF::ComputeInternalJacobians, I found the following section:

// Add part of the Jacobian stemming from elastic forces
for (int inode = 0; inode < 2; ++inode) {
   pos[inode].x() += diff;
   ComputeInternalForces_Impl(pos[0], D[0], pos[1], D[1], pos_dt[0], D_dt[0], pos_dt[1], D_dt[1], F1);
   m_JacobianMatrix.col(0 + inode * 6) = (F0 - F1) * (1.0 / diff) * Kfactor;
   pos[inode].x() -= diff;
   ...
   ...
   ...
 }
// Add part of the Jacobian stemming from internal damping forces, if selected by user.
if (m_use_damping) {
   for (int inode = 0; inode < 2; ++inode) {
      pos_dt[inode].x() += diff;
      ComputeInternalForces_Impl(pos[0], D[0], pos[1], D[1], pos_dt[0], D_dt[0], pos_dt[1], D_dt[1], F1);
      m_JacobianMatrix.col(0 + inode * 6) = (F0 - F1) * (1.0 / diff) * Rfactor;
      pos_dt[inode].x() -= diff;
      ...
      ...
      ...
    }
}

I think that in the 2nd loop (m_use_damping), the damping contribution should be added to the jacobian matrix, by changing:

      m_JacobianMatrix.col(0 + inode * 6) = (F0 - F1) * (1.0 / diff) * Rfactor;

to

      m_JacobianMatrix.col(0 + inode * 6) += (F0 - F1) * (1.0 / diff) * Rfactor;

After changing this the damping of the cable element seems to work.

Thanks a lot for your help!

Best regards,

David

chao peng

unread,
Jul 19, 2023, 5:36:59 AM7/19/23
to ProjectChrono
Hi Dr. Marten,

hank you for reporting this bug and investigating the solution.

I have just pushed your proposed changes to GitHub.

See commit: c911f6c on 19th July.
Fixed bug in ChElementCableANCF: when the damping is used, the stiffness terms are overwritten by the damping, leading to incorrect results. Now the stiffness and damping terms are accumulated.

Best regards,
Chao PENG

Reply all
Reply to author
Forward
0 new messages