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

在2023年6月28日星期三 UTC+2 14:46:08<David Marten> 写道:

> 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
>

-- 
You received this message because you are subscribed to the Google Groups 
"ProjectChrono" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/projectchrono/2dc774af-999a-42fc-a405-999b352e751dn%40googlegroups.com.

Reply via email to