diff --git a/Sofa/Component/SolidMechanics/Spring/src/sofa/component/solidmechanics/spring/SpringForceField.inl b/Sofa/Component/SolidMechanics/Spring/src/sofa/component/solidmechanics/spring/SpringForceField.inl index 6c926549d4e..f2d9619bd04 100644 --- a/Sofa/Component/SolidMechanics/Spring/src/sofa/component/solidmechanics/spring/SpringForceField.inl +++ b/Sofa/Component/SolidMechanics/Spring/src/sofa/component/solidmechanics/spring/SpringForceField.inl @@ -542,11 +542,22 @@ auto SpringForceField::computeSpringForce( // dF = k_s.U.U^T.dX + f/l.(I-U.U^T).dX = ((k_s-f/l).U.U^T + f/l.I).dX auto& m = springForce->dForce_dX; Real tgt = forceIntensity * inverseLength; + Real tol = 1e-8; + Real regParam = 1e-4; + bool isSingular = std::abs(elongation) < tol && std::abs(elongationVelocity) < tol; + if (isSingular) + msg_warning(this) << "Degenerated spring configuration detected: a regularization term added making the matrix invertible"; for(sofa::Index j=0; j