Setting Appropriate Convergence Criteria

It is important to set appropriate convergence criteria. If the tolerances are too tight, models will never converge. If the tolerances are too weak, models will yield incorrect answers.

Global Nonlinear Convergence Criteria

Regardless of whether plasticity or only elasticity is used, MOOSE needs to know what you mean by "converged". You must place a tolerance on the nonlinear residual. In SolidMechanics this comes from integrating σ\nabla \sigma over an element, and for an element of side length LL the integral cannot be less than R>10PLd2σR > 10^{-P}L^{d-2}\sigma where PP is the precision of MOOSE (15 for double precision), dd is the dimensionality of the problem (SolidMechanics currently only works for d=3d=3), and σ\sigma is the rough size of stress.

For example, for J2 plasticity, σ\sigma will be roughly the yield strength of the material, say 10610^6. For a element of size 0.1, this yields R1015×0.1×106=1010R \sim 10^{-15}\times 0.1 \times 10^{6} = 10^{-10}.

However, you should set your nonlinear residual tolerance substantially larger than this estimate. This is because error is likely to be spread over the entire mesh, not just one element, so RR should be multiplied by the number of elements, and also that setting RR this small is risky because it relies on maintaining full precision throughout all computations. Instead, identify the crucial region of interest. Denote its volume by VV. Usually this will be less than the entire mesh. Then identify the error in σ\nabla\sigma that you are willing to accept. Denote this by EσE_{\nabla\sigma}. It will depend on the typical size of σ\sigma, and the length scale in the problem. Then set R=VEσR = VE_{\nabla\sigma}.

Convergence Criteria for UserObject Based Plasticity

There are three types of convergence criteria that need to be set when using plasticity:

  1. tolerance(s) on the yield function(s)

  2. tolerance on the plastic strain

  3. tolerance(s) on the internal parameter(s)

These are somewhat interconnected.

Tolerance(s) on the yield function(s)

Firstly, let us explore lower bounds on the tolerance for the yield function(s). Consider the stress tensor, σ\sigma. I want to calculate EσE_{\sigma}: any changes of σ\sigma smaller than EσE_{\sigma} will be unnoticeable due to precision loss.

Imagine that σ\sigma has PP digits of precision. For standard MOOSE with double precision, P=15P=15. In models containing plasticity, the stress will often reside on the yield surface(s). This gives an estimate of the magnitude of σ\sigma. For instance, with Mohr-Coulomb plasticity, stresses will be of order Ccot(ϕ)C\cot(\phi), where CC is the cohesion, and ϕ\phi is the friction angle, so Ccot(ϕ)C\cot(\phi) is at the apex of the hexagonal pyramid. Denote this magnitude of σ\sigma by ff. For complicated multi-surface plasticity models, ff may be hard to estimate, but only order-of-magnitude calculations are appropriate here. Therefore, Eσ=10PfE_{\sigma} = 10^{-P}f For example, with P=15P=15, and Mohr-Coulomb plasticity with C=106C=10^{6} and friction angle 30deg, Eσ=109E_{\sigma} = 10^{-9}. Changes of σ\sigma smaller than this value will be unnoticeable due to precision loss.

There is also another lower bound. This comes from evaluating the trial stress and returned stress using the strain: σCϵ\sigma \sim C\epsilon, where CC is the elasticity tensor, and ϵ\epsilon is the strain. This means that Eσ=10PCϵE_{\sigma} = 10^{-P}C\epsilon For example, suppose strains of order 10110^{-1} are applied, and the elasticity tensor is order 101010^{10}. This means trial stresses will be of order 10910^{9}, so with P=15P=15, we get Eσ=106E_{\sigma} = 10^{-6}.

In conclusion, changes of σ\sigma smaller than EσE_{\sigma} will be unnoticeable due to precision loss, where EσE_{\sigma} is Eσ=10Pmax(f,Cϵ)E_{\sigma} = 10^{-P}\max(f, C\epsilon)

Knowing this allows straightforward estimation of the lowest possible tolerance on the yield functions. However, it is unwise to use this tolerance! This is because roundoff errors can accrue within the internal workings of the plasticity algorithms. For instance, calculating eigenvalues of σ\sigma might effectively reduce PP by 1.

More commonly, the tolerance on stress is estimated by the user by considering what is physically reasonable. Eg, a stress change of 100Pa might be rather inconsequential, and this might translate into a tolerance on ff of 100Pa. Provided this 100Pa is not close to EσE_{\sigma}, the plasticity algorithms should converge.

comment

Choose the tolerance on ff to be 10510^5 smaller than the yield stress, cohesion, tensile strength, etc.

Tolerances on the plastic strain and internal constraints

Similar arguments can be made for the plastic strain and internal constraints.

comment

Choose the tolerance to be 105ϵ10^{-5}\epsilon to 103ϵ10^{-3}\epsilon, where ϵ\epsilon are the typical strains encountered in the model