In solving nonlinear hyperelastic solid mechanics problems, to converge to the correct solution we need to do step-by-step loading which makes the deformation at each step very small (for my particular problem $\mathcal{O}(e^{-11})$). Moreover, due to the material properties, the nonlinear weak form and consequently the linear system that should be solved at each step of the nonlinear solver have very small components. In my experience, this makes the iterative solvers very inefficient especially considering that many components are close to machine epsilon precision and the relative norm is too small and is not a good measure for the convergence. I would appreciate if you can help me to know

1) is what I am observing true or I am making a mistake somewhere?

2) what is the smart way to deal with such matrices that the weak form and consequently the resulted linear system have very small components?

What I am doing now to solve this nonlinear system is to reduce the absolute convergence norm criteria to a very small number $\mathcal{O}(e^{-13})$ when the absolute norm for 0 iteration is $\mathcal{O}(e^{-9})$. And use a relatively small relaxation value.

Thank you, everybody, for your help.

  • $\begingroup$ If you are having numerical problems because the solution is too close to machine epsilon, just change the units in your problem (e.g. meters to mm). $\endgroup$ Mar 12, 2020 at 18:02
  • 1
    $\begingroup$ "Small" by itself is not a useful statement. Like Bill already says, if you measure distances in lightyears, then everything looks small. If you measure them in atomic units, then everything looks large. But the problem is still the same, and good solvers will solve the problem in the same number of iterations regardless of the units you choose. So when you say 1e-13, then my question is 1e-13 what? 1e-13 lightyears? $\endgroup$ Mar 12, 2020 at 18:09
  • $\begingroup$ Thank you guys for your comments. For now, please just forget about physics. If I was able to fix the problem by just changing the units I would definitely do that. Just assume that we have a nonlinear weak form F(u,u') = 0 with very small components that I want to solve. What should I do? $\endgroup$ Mar 12, 2020 at 18:21
  • 1
    $\begingroup$ @user2348209 "very small components that I want to solve" small with respect to what? Are you trying to solve a dimensionless system? $\endgroup$ Mar 12, 2020 at 19:41
  • 2
    $\begingroup$ @user2348209: You totally misunderstood what I was trying to get at :-) "Machine precision" is not 1e-16. In floating point arithmetic, you can represent numbers down to 1e-308. Machine precision is always relative. If your matrix has entries that are all of size 1e-100, and your right hand side has entries of size 1e-100, then your solution will have entries of size 1 and that's alright. The problem only happens if you have entries of size 1 and of size 1e-100 in the same matrix or vector. $\endgroup$ Mar 13, 2020 at 3:42


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.