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