Nonlinearity Ramping for Improving Convergence of Nonlinear Problems
Walter Frei December 3, 2013
As we saw in “Load Ramping of Nonlinear Problems“, we can use the continuation method to ramp the loads on a problem up from an unloaded case where we know the solution. This algorithm was also useful for understanding what happens near a failure load. However, load ramping will not work in all cases, or may be inefficient. In this posting, we introduce the idea of ramping the nonlinearities in the problem to improve convergence.
Nonlinearity Ramping Example
Consider again the system shown below, of a force applied to a spring with nonlinear stiffness.
We’ve seen that we can solve this problem using the Newton method with damping or by using the continuation method and ramping the load to give the Newton method good starting points. Now we’ll examine how to ramp the nonlinearity. First let’s take another look at the function describing the force balance on our single node:
We can re-write this more generally as: f(u)=p-k(u)u where k(u) is the nonlinear spring stiffness. Now we can solve a different problem that uses a stiffness defined as:
In other words, we divide our spring stiffness function into two parts — a linear term, k(u_0), and a nonlinear term, \left[ k(u) - k(u_0) \right] — and then introduce an additional parameter, \beta, that interpolates between the linear and nonlinear case. We then use the same Newton method as before on a series of problems with the parameter \beta, getting ramped from zero to one. That is, we use the continuation method to ramp from a (simple to solve) linear problem to a (more difficult) nonlinear problem.
Next we will look at solving the above example by using this technique. Our original spring stiffness, k(u)=\exp(u), gets re-written as:
We start by solving for \beta=0 and get a linear spring stiffness of k(u)=\exp(u_0), so now all we need to do is choose a linearization point, u_0. For this example, if we choose u_0=0, we see that f(u,\beta=0)=2-\exp(0)u = 2-u. Recall our discussion about solving linear static finite element problems, where we learned that you will always find the solution to a linear problem in a single Newton iteration. Now, ramp up the parameter \beta, as shown:
Clearly, only a few Newton iterations, starting from the solution to the \beta=0 case, are needed to solve \beta=0.25. So we can repeat with \beta=1 and thereby ramp from the fully linear to the fully nonlinear case.
This method is attractive because you can always find a solution to a linear problem, so you can always solve for \beta=0. You only need to consider which point u_0 to linearize about initially and what kind of nonlinearity ramping to use.
We can also use the concept of nonlinearity ramping to address the case where the nonlinear terms are not continuously differentiable. Recall the case from the blog post on Solving Nonlinear Static Finite Element Problems, the system with the piecewise constant spring stiffness, k=0.5 for u\le1.8, k=1 for 1.8<u<2.2, and k=1.5 for u\ge2.2, would result in a force balance function:
As we saw earlier, this problem cannot be solved by the Newton method, unless you happen to start within the (very small) radius of convergence of the solution. But now consider replacing the original spring stiffness with a smoothed stiffness that can be ramped up as shown in the figure below:
Clearly, this problem is solvable, and we can use this technique to get an approximate solution to the original problem. Using this method just requires that we find an appropriate smoothing function and nonlinearity ramping path.
Whenever you have a problem which has the kind of stepped behavior shown above, it is also worth trying out the Double Dogleg nonlinear solver instead of the Newton method. The Double-Dogleg is a Trust Region solver that works well when solving problems where the Newton method may oscillate between two different regions. A good physical example of this is a structural contact problem, where there is a sudden transfer of load as two objects come into physical contact.
Concluding Thoughts on Improving Convergence of Nonlinear Problems
We have now seen two methods for improving the convergence of nonlinear problems: load ramping and nonlinearity ramping. In practice, either or both methods can be used, and, through the careful design of your material properties and loads, it is possible to blend the two approaches. It can be difficult to say ahead of time which method will perform better, and each model you work on will require some experimentation in terms of the load ramping path, the nonlinearity ramping, and the choice of initial condition for linearization. Also, if you expect that the solution may oscillate between different cases, the Double-Dogleg solver can perform better than the Newton method. With experience, you will build up your engineering intuition about how best to solve the classes of problems that you are working on.
The techniques introduced here often work well for nonlinear static finite element problems where it may be difficult to find good initial conditions, or problems which have strong nonlinearities and discontinuities in the material properties. In practice, a very wide class of problems can be addressed using these approaches. However, you must also be aware that there are different meshing requirements when solving nonlinear problems. That is the next topic we will address, so stay tuned.