YLD2000-2D (Barlat2000) Implementation - LS-Dyna Umat
I had implemented YLD2000-2D almost 2 years ago using cutting back algorithm, which avoids the second derivatives of the yield function but had problems with convergence. Therefore, I started using the built-in model of LS-Dyna. Now, I really have to make it work as I am going to combine it with different fracture models. LS-Dyna Umat is not the same with the Abaqus one, as it can be used with explicit code as well, so I am skipping the consistent tangent modulus part. What I have done so far is:
1- Implementation according to the original paper of YLD2000-2D by Prof. Yoon and to the Elastoplasticity Theory book by Prof. Hashiguchi
2- Tested using one element simulations, namely uniaxial tensile at 3 different angles to the rolling direction (0 - 45- 90) and tensile test of a shear specimen. I have used GPa units and 1E-09 tolerance value for checking convergence. The results are exactly the same with the ones I obtain using the built-in YLD2000-2D of LS-Dyna.
3- Tested using a uniaxial tensile test with multiple elements, having 5mm element size. It works very well and the results are the same with the built-in model again.
4- Tested using spherical punch test with the same tolerance (1E-09). The results are again the same with the built-in model and no convergence problem.
5- Tested using a square punch test and convergence problems occurred. I encounter convergence problems even if I reduce the tolerance to 1E-03. I increased the maximum iteration number to 500 but no luck. With the tolerance being 1E-03, I used 8 cores to finish the simulation and there were no problems, the results were perfect as well, but when I used 4 cores, I got convergence problems again. If the tolerance is any smaller than 1E-03, it does not matter what I do. It crashes again and again.
Strangely, I tested the subroutine performing another uniaxial tensile test simulation with the same mesh and have seen that the algorithm cannot pass the elastic trial step. There is no stress at all and the elements that are pulled (of course the nodes are pulled, but I mean the elements formed by these nodes) are the only ones deformed. You can see the end state of both uniaxial tensile test simulations in the attached files.
Edit: The problem with the second uniaxial tensile test has been solved. It was due to usage of some LS-Dyna keyword in the input deck. Now the algorithm works as expected, but the convergence problem still continues.
So what can be the cause for the convergence problems?
I would really appreciate if someone can at least give a thought to my problem described above. Thank you very much in advance.
Your question is good, but hard to answer. My experience is that is can be difficult/time consuming to debug a user-material model code.
I recommend that you add multiple print statements at strategic locations in order to check that code does what you expect it to.
Dear Dr. Bergstrom,
Thank you very much for your reply. The problem with the second uniaxial tensile test has been solved. It was due to usage of some LS-Dyna keyword in the input deck. Now the algorithm works as expected, but the convergence problem still continues. I have added many print statements and am almost sure that the algorithm is correct.
I have been able to solve the convergence issue with the cutting back algorithm (explicit stress integration ) and it was related to the initial guess being used in the Newton-Raphson scheme. I have done the same thing to the implicit stress integration algorithm, but it did not effect the results. Im %90 percent sure that the convergence issue is again related to the bad initial guess for the stresses (lambda is always taken as 0 at the beginning of the NR scheme.) There are some papers suggesting that one step forward-euler or something similar should be used to obtain a better guess for the NR scheme. Is there any other way to do it?
Dear Jh0nSc0tT, I am currently working with the yld2000 material, but I have not been able to make it work in ls dyna, I would like to know what keywords are necessary to make it work, my code currently works but the first step stops and does not solve it. Best regards.