Arjen asked me recently about stress singularity. There are quite a few articles about this issue already (it is a common problem I think). But I want to bring something to the discussion as well : )
Stress singularity basics
I’m sure you have heard about it, so I will be brief. Stress singularity is basically a place where stresses are “theoretically infinite”. I think that the most famous example would be a point load. When you apply the load to a point (no area), the stress is infinite (force is divided by zero area). There are of course other examples like:
- Point load
- Boundary condition applied to a point (point support)
- Sharp “inside” corner
- Contact on a sharp corner
Note, that this is not exactly a stress concentration. A lot of geometric features “concentrate” stress around them. I don’t want to go into details here, but in general, such problems have a “finite answer”. This means that in stress concentration you will actually get a convergence of the outcome with mesh refinement. If you are interested in learning how to perform mesh refinement be sure to check my free FEA essentials course!
When it comes to stress singularity you can think about it as a “mean and ugly sister of the stress concentration”.
No matter how much you refine mesh there will be higher and higher stress all the time!
How stress singularity works
I must admit that I would have trouble explaining this on the sharp inside corner example. This is most likely one of those things I miss with my attitude toward learning the math behind FEA. If you have read a nice explanation about this one please share a link in the comments (or your thoughts on it). I would love to read about it more : )
Here I will use a point load case since this is the simplest to use (and illustrate!).
Maybe you have heard about it somewhere: FE elements does not exist! Elements more or less “describe” how nodes are connected (with equations). It’s convenient to draw elements, but in reality, solver sees nodes connected together. Picture it this way: mesh consists of nodes connected by springs!
This is important here! You see, when you apply the load to a node, you didn’t actually load a “point”. Instead, you loaded the “space” around that node. Since your model has nodes and space between them, outcomes are a bit tricky. What you see on the screen is more or less an average of values assigned to the closest nodes. Simply speaking you are loading a node and “part” of each element that shares this node.
Now the thing becomes simple. If the elements are “big” the area that is “assigned” to the node is quite big as well. You have a force divided by this “area” that give you stress you see in your post-processor. After all how often did you saw an actual “infinity” on the scale?
From there, there is only one more step to understand this! If you make the elements smaller, the area “assigned” to the loaded node will be smaller as well. Since the force is always constant and with mesh refinement “assigned” area decreases… stress is higher and higher. It will never converge! The more you refine the mesh the higher the stress will be!
Fun fact: If a woman weighting 60kg stands on one high heel (0.5×0.5cm area) the stress is… 24MPa. Enough to smash concrete surfaces (at least the medium and weaker ones)… which as we know doesn’t really happen!
This is the common issue and you will find a lot of suggestions how to deal with it. I will share them below with my thought on them:
- Ignore the singularity: The “big” one. There is some merit to it. Saint Venant’s Principle teaches that if you are “far enough” from the source of singularity you are fine. But I always had a problem with this one. After all whatever is causing the singularity is there in reality right? I agree that the load is not on “point” as in the model. It is applied to a small area instead! This means IT IS THERE! You should expect higher stresses in that region. Sure, they won’t be infinite, but this doesn’t mean you can ignore them altogether! I think this is a common mistake. People simply ignore the outcomes near the singularity, not thinking about what really happens there.
- Add an area: This is a reasonable choice but you can’t apply it all the time. If you have the load on a small area simply model it this way. All is nice, and this solves the problem. Issues are of course with modeling which may not be very “practical”. You can do the same thing for supports – but it is a bit more tricky because of boundary conditions.
- Model a fillet: I really dislike this. I think this is a blanket answer to the sharp “inside” corner problem. Usually, the answer goes like: “it’s impossible to make a perfect 90deg corner. There is always a small fillet – model it!”. I perfectly understand that this is true. However, practically speaking this is a complete utopia! If you have an element that is 10x10m and you need to analyze it as a whole, adding a 0.1mm fillet (with accurate mesh there!) isn’t all that great as a solution I would say! Sure there are cases when this is an only option, just don’t go there by default!
- Make a smaller separate model: This makes sense in some cases. If you have a big model and there is a detail you need to check… just make a small accurate model and check this detail. Be aware however that usually, it’s pretty difficult to assign proper boundary conditions to such cut-out elements. You need to be very cautious here for sure!
- Use nonlinear material: This is actually a great option. Stresses will be limited by yield, and you will simply get some plastic strain. Sure in place of a point load this strain can be very high, but in many cases still “acceptable”. It’s quite possible that this is the “cheapest” method when it comes to time, but of course, this also is something that you can’t use all the time.
Things to consider
It is easy to see that the problem is complicated – this is why there are so many approaches! Without a doubt each one of them is useful, simply otherwise they would not appear in all those articles (mine among them!).
I would say there are few special cases where you need to be extra careful. The one I want to mention the most is fatigue! If you want to solve the fatigue problem – stress singularity will make your head spin! Simply put you can’t ignore it (since it is critical to safety!), and you won’t use yield (unless you want to check against low-cycle fatigue which may not be the goal).
This usually means, that when fatigue is involved those small fillets and modeling of areas on which load is applied really does happen in complex models. Again, it is worth mentioning that in many cases creating a separate more detailed model may be a good idea. Just be cautious about boundary conditions!
I will try to recap what I have written here:
- Stress singularities are a result of simplified modeling (which is completely reasonable).
- Making more accurate model will solve the problem (but requires time that sometimes will simply be too long!).
- Making a smaller model with sufficient details may help. Care should be taken for boundary conditions in such case.
- Outcomes “far enough” from the singularity are ok thanks to the Saint Venant’s Principle.
- Ignoring outcomes in stress singularities seems a common approach. Sadly this shouldn’t be done, as usually the effects are there for real (they are simply overestimated). Ignoring the outcomes altogether in that region will be risky!
- Usually using nonlinear material means that in singularity region material yields. This solves the “infinite stress” problem. However plastic strains in those regions can be high, and should be checked as well!
There is a spoiler as well. I’m thinking about a simplified method of dealing with this. I need to discuss it with few people (that are smarter and more experienced than me!) and if it is any good I will write about it soonish : )
Do you want to learn more about FEA?
This is great! I’ve prepared a free FEA essential course! Subscribe below to get it: