# Solving a nonlinear problem with a very small components with finite element method

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.

• 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). – Bill Greene Mar 12 '20 at 18:02
• "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? – Wolfgang Bangerth Mar 12 '20 at 18:09
• 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? – user2348209 Mar 12 '20 at 18:21
• @user2348209 "very small components that I want to solve" small with respect to what? Are you trying to solve a dimensionless system? – Alone Programmer Mar 12 '20 at 19:41
• @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. – Wolfgang Bangerth Mar 13 '20 at 3:42