Elements flipped even though Newton solver converged #16682
-
Hello everyone, I have been using MOOSE to compute some mechanics problems. I implemented a Neo-Hookean material model by defining a new strain function which sets the deformation gradient as the total strain, and a stress function which computes the 1st Piola Kirchhoff stress for a Neo-Hookean solid. The stiffness is derived using Automatic Differentiation. The files can be found here. Now, for small deformations, this yields good results and I can also observe a quadratic convergence of the Newton solver. But I noticed for a specific problem, that sometimes the Newton solver would converge, but the end result would contain flipped elements I also used another FE solver and compared it with the MOOSE results. For "easy" simulations, both results are exactly the same, the residuals in each Newton iteration are exactly the same, but for more complicated case, MOOSE converges a lot slower... When I take a very small timestep in MOOSE dt=0.01 (element does not flip over), the same result is obtained as my other solver, which only needs a single time step dt=1. I also tried to not use Automatic Differentiation and directly code the consistent stiffness, however, it also lead to the same suboptimal convergence. One difference in both solvers that I noticed is that MOOSE seems to use some line search algorithm that prevents the residual from increasing. In my other solver, that is not the case and always a full Jacobian step is used. Is there any way to deactivate the line search in MOOSE? Can anyone help me with this? I am really confused and honestly frustrated that MOOSE sometimes flips over my elements without any indicator or warnings... Thanks. |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 3 replies
-
A few things you could try:
|
Beta Was this translation helpful? Give feedback.
-
Also, in response to your complaint
There is actually a very useful Userobject to do exactly that: https://mooseframework.inl.gov/source/userobject/ElementQualityChecker.html |
Beta Was this translation helpful? Give feedback.
A few things you could try:
line_search = none
in your executioner block.automatic_scaling = true
preset = false
in yourFunctionDirichletBC
s can improve convergence and avoid spurious results.