Lately, I got several emails with questions about nonlinear analysis convergence. There are a lot of reasons why your analysis could not converge. One of them is a wrong loads/increment strategy which I call “steering”. Take a look at what are the possible options and what are the positive/negative aspects of each approach.

**Steering have many names**

Let’s start with the basics. I’m used to the term “steering” but I also saw people using “solution strategy” or “analysis approach” instead. When something has several names in use, it is usually a good idea to define the thing to avoid confusion!

As you know in nonlinear analysis solver divides the load into small “pieces” called increments. Solver then applies the load increment after increment (sometimes in a way you described, sometimes it automatically adjust increment size along the way).

Steering consist of 2 parts:

- Load “type” (as active forces or deformations)
- Increment strategy (how solver chooses size of the next increment)

Load “type” is relatively easy to explain. You can either apply active forces to the model or enforced deformations. This is a separate topic I will discuss next week, but in general, you will have one or the other.

This means, that each increment will either increase load (for models loaded with active forces), or displacement (for enforced deformations). Both approaches have positive and negative sides. In general, those can be summarized as follows:

Loading a model with displacementsusually helps with convergence. Sometimes it can also solve problems with rigid body motion. Usually this approach is considered to be “better”

Loading with active forcesallows to better describe a lot of load patterns. It is true that convergence will be a bigger problem here. However you can’t model certain problems with enforced deformations within reasonable time. If you don’t believe me try modeling a 1×1 square plate loaded with uniform pressure of 1 on entire area with equivalent enforced deformations! It is doable if you know the outcome… but it really is not worth it!

With incremental strategies I will divide them only into 2 groups so we avoid technical details:

“Normal” increments:This is an approach where solver will increase load or displacement (depending on what type of load you have in the model). You can do it in a number of ways. For instance you can specify the increment value (and it stays constant), or there could be an algorithm that chooses the best increment size each analysis step. Whatever is the case the thing is:Either displacements or loads are increased

Arc-lenght methods:Again there are plenty of those. Modified Riks method is the most popular one (with Crisfield method close behind). Usually they work in a similar way, to the point where some solvers simply call it “arc-length” without specifying which one is it. The trick here is that neither load nor displacement is increased (regardless of load type) but a “fictional” parameter. There will be more about it below.

**So where is the convergence in that?**

I’m pretty certain you have seen animations of FEA models that were loaded beyond capacity. Those tend to look nice for sure:

Such outcomes aren’t obtainable with all the possible approaches. To discuss this further, let’s solve a simple problem of shell buckling.

Such analysis leads to a stability path I show you below. If you don’t know what it is, subscribe below to get a free introductory course:

Now let’s analyze outcomes that are obtainable with each approach. To do that I actually calculated a shell using active load (case A), enforced displacement (case B) and arc length method (case C). All the stability paths I obtained are shown below:

**Case A – Active Force:**What I asked solver to do is to gradually increase load and based on that search for the deformations that will lead to equilibrium. You can easily see above, that when the load reaches around 31kN… it cannot be increased. This is the shell capacity. This means that solver tried and tried to increase the load, but couldn’t find displacements that would make the thing stable. After a struggle, it gave up and threw up a “no convergence” message. This happened in point A on the chart.

**Case B – Enforced Displacement:**This is a bit wiser approach. Solver tried to increase enforced deformations. Since after failure deformations still increase, theoretically this should work. It took the solver substantial amount of time to converge at point A (to move to point B on the chart). This is because solver was “flying blind”. It didn’t see that at certain point deformations decreases… so it had to “randomly” find the point B. Finding it is not always possible (several times I got “no convergence” at point A before I found an incremental approach that made convergence possible). Still, after all the trouble I was able to find more or less a correct approach.

**Case C – Arc Length:**This is something just different. What solver does is it increases the “arc length” parameter and tries to find both forces and displacements that will converge. This allows the solution to trace through entire stability path, including the region where both forces and displacements decrease. A very nifty trick if you would ask me 🙂

**It can be even worse!**

The classical nightmare for the nonlinear analysis is the deformation of a shallow arch plate loaded with a concentrated force. You can see how the deformations look like along the stability path:

I simply love this case – it never stops to amaze me how complicated simple thins are! The stability plot for this example is given below:

This is what would happen in our 3 scenarios:

**Force steering**(when using active force in increments): Analysis would throw a “no convergence” message in point A. After that, it would desperately try to follow red line to point C which is more or less impossible.

**Deformation steering**(each increment increases deformation): Analysis would safely pass point A. Then in point B it would throw out a “no convergence” message. If we would be patient enough with analysis setup (and computing time!) it is theoretically possible to go from point B to point D along the red line… I never tried to do it in this case.

**Arc length method:**This is how I was able to get this stability path in the first place. I use force as input load in arc length method most of the time (simply because usually models I calculate are loaded this way). It is also possible to use enforced deformation, even through some solvers (line NX Nastran SOL 106 instead of SOL 601) do not allow that.

**What to do if you have convergence issues**

Based on what I have shown you today I would draw such conclusions:

Convergence problems with steering try-to list:

- If you use active forces as loads then convergence problems at a certain stage of analysis may (but don’t have to!) mean that you have reached models capacity. Try to estimate if this is possible. If so, change load to enforce deformations (if it is possible to find a correct pattern of deformations), or use arc-length methods.
- If you use enforced deformations and have convergence problems try to use arc-length method. This is a more rare occurrence, but still happens from time to time.
- Convergence problems in arc length happen as well. Treat them “normally”. If you have them decrease the increment (note that solvers have settings showing if they can increase the arc length or not). You can also split the analysis into several “steps” to have big increments when nothing happens and small increments when it is needed.
- Arc length method have a funny “bug”. It can sometimes happen that in bifurcation points (“sharp” turns on stability paths as point A in the first example) it will get “lost”. The symptoms are that the load starts to decrease to 0 and then proceeds in a different direction (so beams in compression are in higher and higher tension etc.). This is simply because solver found a point on a branch of stability path that was already followed. After the first point method will naturally follow the same path backward! To counter this try to minimize the increments in the bifurcation region, or change something slightly in the model.

I hope you will find this useful. Let me know what you think about it in the comments. Also if you want to help out – share this article with your friends 🙂

**Free FEA course!**

I have a **free nonlinear FEA course** just for you! Subscribe below to get it!

If you enjoyed the post you can share it with friends – that would be a great help! If you have a spare 15 seconds write a comment with your thoughts on the matter or any questions you might have. I have a good history of replying to each and every comment 🙂

BartMay 16, 2017 at 2:20 pmGood stuff Lukasz. It is described in simple way. I spend days with LUSAS manual to figure out what parameter does what for nonlinear analysis of twin girder bridge and did not get entire stability path. I think I will come back to that model and try it again now.

Łukasz SkotnyMay 16, 2017 at 3:21 pmHey Bart!

I’m really glad you like it 🙂 Hope the analysis will go well this time 🙂

Good luck

Ł

Richard Y ZhangMay 18, 2017 at 1:17 amGood stuff – talking a complex subject in a simple way!

Attack nonlinear converge needs:

1. Good knowledge of mechanics,

2. Training,

3. Experience and

4. Good solution strategy implemented in the FEA software.

Łukasz SkotnyMay 18, 2017 at 6:57 amHey Richard!

It’s great that you like it!

I agree that mechanics knowledge is needed. When it comes to experience I think it is just a nice word saying “you need to fail a lot of time to be able to foresee that you are about to fail again and do things differently :)”

Have a great day!

Ł

GiorgosMay 20, 2017 at 9:42 amHello Lukasz! Thanks a lot for the nice tips.

What do you mean in the last bullet by “change something slightly in the model” ?

Thanks again! 🙂

Łukasz SkotnyMay 20, 2017 at 1:10 pmHey Giorgos!

Since arc-length “going back” is not an exact science there is no exact answer. Sometimes I remesh something slightly, or change the load a slight bit… you know things like that. When Arc lenght turn back on you it’s frustrating – just try few things, usually you will find a solution in 2-3 tries 😉

Good luck!

Ł

MicheleJuly 11, 2020 at 6:46 pmHi Lukasz,

I have a question about analysis convergence: if your analysis doesn’t converge, what is the first thing you do? Refine the mesh? Reduce the load increment? Change the tolerance to a bigger value?

It would be nice to understand step by step what to do to solve convergence issue.

Another question: if I generate an enourmous number of very small increment, the analysis must converge or sometimes it is It the right thing to do?

Thank you in advance, I’m trying to learn the world of the nonlinear analysis, but without a teacher is pretty hard. I learning a lot in your blog, so thank you very much!

Łukasz SkotnyJuly 12, 2020 at 7:18 pmHey Michele!

My heart sinks, as I know this is not the answer that you are searching for…

Well, it depends (everything depends on something right?)! At this point me, or someone on my team spent some serious time on the model. So we know a lot about it already. If I was doing the work thank I would… think. If someone else was doing the model, I would talk to them. There are a few things you could beck (boundary conditions, solver settings If the mesh is “connected”), but this would mostly depend on what type of error I get and when. Did the first step not converge, or some other step? If it was the first one, then I would look at how many iterations were done, and how it looked like on the chart of convergence per iteration. If contacts are present I would definitely check a look there in such a case.

If the non-convergence happened at a later stage, I would look at the outcomes so far, and decide on my actions based on those…

I’m working on a nonlinear course right now (https://enterfea.com/nonlinear-fea-project/) and how solver iterates solutions and why you may have non-convergence is like… entire module (!) and I still need to include several lessons here and there to make this “complete”. In other words… there are no short answers here I’m afraid 🙁

But I’m glad that you’re finding at least some of the answers on my blog 🙂

And to answer your smaller “embedded” questions:

1. I don’t refine mesh if I encounter convergence problems unless there is a flag (error message) that would suggest that (like “too distorted mesh” etc.) but this almost never happens. Mesh refinement to solve convergence would mean, that I’m desperate and lost all hope…

2. Reducing load increments may help, especially if this is first increment and you are “fighting” with contact, or there is something seriously nonlinear along the way (shell buckling etc.) so yes, this may help, but it depends on the outcomes before and how they look like…

3. Never change tolerance. A wise man once told me, if you don’t hold a Ph.D. in mathematics, don’t touch those numbers… and to this day, I don’t have a Ph.D. in math 😛

4. Yea, there is not a single “step by step” guide, as a lot depends on the case, but I’m working on the course/book that would contain different examples 🙂

5. Nah, a ton of super small increments won’t guarantee convergence… if your model is wrongly supported you’re done anyway (among others).

I know that you would prefer a 5 step guide to force your model to converge… sadly, I’m not sure if such a thing is doable. On the good side – this is a tricky thing – if you will master this, you will be irreplaceable 🙂

All the best!

Ł

MicheleJuly 12, 2020 at 8:01 pmThis is a super answer, thank you very much. I’ll keep trying, FEA is difficult but I think it’s too fun!

However, I have problem with shell buckling: I’m doing GNA and after the first linear part of the equilibrium path I can’t converge the solution in the snap back part of the path.

I obtained very good result with the example of the silos that you described in another article: after some trial, the solution converged reducing the load increment.

Now I’m trying to solve the convergence for a telecommunication pole (I work in that industry). I reduced the load increment a lot, but still it doesn’t converge. Have you got advice for this kind of problem where the nonlinearity is so big?

I’m using Inventor Nastran.

Thank you very much, can’t wait for the course.

Łukasz SkotnyJuly 19, 2020 at 10:12 amHey Michele!

Indeed, FEA is super fun, but I completely understand how frustrating it can be at the same time.

Let’s look into the problem:

I understand, that in the silo example you managed to obtain failure right? Is this what you mean by “reducing the load increment”? What I’m trying to scope out here is, did the load increase at first, and then after failure, the total value of applied load decreased, and you could see how the shell is failing? I hope this is the case – because this would mean, that you can use Arc-Length (Riks, Crisfield) and it works 🙂

If that is not the case, let me know – for now, I assume that the above is right 🙂

In such a case, you have a defined task, you increase the load to a certain point (almost linear in many shell problems BTW), and then when you expect the stability failure, you get a non-convergence error. I hope that I understand the problem correctly.

Normally I would say, that you should run the “arc length” method in the analysis, as that would be the most common problem. But considering what I wrote above, I assume that you are already doing this.

What you can do:

1. Increase the number of allowable iterations per increment (I haven’t seen the model, but maybe up to something like 50?)

2. Reducing the number of load increments will mean, that you will wait for the outcomes till eternity… but you can try to have 2 subcases in the analysis – the first with big load increments, and then super-small ones near the failure load. Check here for a guide in Femap, this is also Nastran so it should be similar in your case: https://enterfea.com/subcase-your-best-friend-in-speeding-up-analysis/

3. Play with allowable bi-sections, line search etc. But I would have to know more, to give any decent pointers…

All the best!

Ł

Michele MarchiolJuly 21, 2020 at 6:43 pmHi Lukasz, thank you again for your answer!

I’ll try to explain better my problem (sorry, I’ve to work on my english :D)

Problem 1 – silos

I obtained the correct result in that model using arc length method (I think it’s correct because I obtain the same stability path that you show in your article).

In the first try, the analysis failed at the step where the load reached the point of bifurcation.

In the second try, I defined a bigger number of load step: this means that I reduce the load increment, at least in the first step of the analysis, which means that I reduce the size of the arc in the analysis (I keep the arc length constant in the analysis).

Problem 2 – polygonal telecommunication pole

In this kind of problem, I can’t make the analysis converge in the postcritical part of the stability path. I tried to reduce a lot the arc length, but still I can’t obtain the right result (I even tried to divide the analysis using subcases, without good results.. to be honest, sometimes (not always) the second subcases has problem to converge at his first step, I don’t know why..).

So, my question is: what to do when your analysis does not converge in this kind of analysis (GNA of shell) where you have big nonlinearity? However, I think you just answered in your last message, I’ll try to do what you said there 😉

Thank you again, you are really THE BEST! 🙂

Łukasz SkotnyJuly 24, 2020 at 7:37 amHey Michele!

Sorry, it took me a while to reply.

Apart from the answers, I wrote previously… not much I can add here. I mean, without “knowing” the model etc. there is no way for me to give any more advice that would make sense I think. So… I really hope that implementing previous advice will help. And if not, let me know – we will think on this more 🙂

All the best!

Ł

LivAugust 20, 2020 at 10:40 amHi there, great practical explanation! I just wanted to comment on something:

What you call an “stability path” is actually an “equilibrium path” or “equilibrium response”. Sure, you’ll get stable and unstable regions on them depending on a few things (Kt eigenvalues etc), but they mark equilibrium points nonetheless.

Łukasz SkotnyAugust 20, 2020 at 1:34 pmHey Liv!

Thank you for the insight! I always thought about them as “stability path” but equilibrium has a nice “sound to it” 🙂

I really appreciate your input 🙂

Ł

LivAugust 21, 2020 at 10:35 amHi Łukasz,

Thanks for the reply!

The reason for this is that each point on the curve we normally plot (load vs displacement) is solved for equilibrium only (the balance of internal and external force , or equilibrium equation). I appreciate that some types of instabilities can be inferred from the graph, and with the help from the stiffness matrix one can define the stable and unstable portions of it, but calling it a stability path sounds misleading to me from a theoretical nonlinear FEA perspective.

Łukasz SkotnyAugust 21, 2020 at 6:55 pmYea… this is “me” translating stuff from Polish to English in my head as I go. I will start using equilibrium path from now on, but fixing all I did will be a huge undertaking… I need to think on how to approach it, and if I will even do that.

I do admit, however, that you “hit” me in perfect time… as I already wrote this part of the nonlinear online course/book I’m working on… so I will have to check at least there 🙂

And, of course this is a solid argument, as indeed parts of the equilibrium path may be unstable… I was thinking more of “the tool to assess stability”… aka “stability path”.

But it’s a solid argument, although, luckily I don’t think I’ve misled anyone with the name (but it’s not an excuse to be “sloppy” by any means!

Once more, thank you for pointing this out, I really appreciate this 🙂

Ł

JoshJanuary 18, 2021 at 6:19 pmŁukasz,

Again, another awesome post!

I do have a question: How do you set the (minimum) load increments when using the arc-length method?

Thanks,

Josh

JoshJanuary 18, 2021 at 6:22 pmPlease ignore my post!! I watched your video and figured it out! Thanks, bruh!

-Josh

Łukasz SkotnyJanuary 19, 2021 at 3:03 pmNo worries Mate!

I’m glad that you figured it out 🙂