Volumetric Locking Correction
Volumetric locking is the over stiffening of elements when the material is close to being incompressible (Poisson's ratio nearing 0.5). This stiffening happens when a fully integrated element (such as Hex8 elements with 8 quadrature points or Quad4 elements with 4 quadrature points) is used. This is a numerical artifact introduced because shape functions used in finite element analysis cannot properly approximate the incompressibility condition throughout the element. To avoid this locking of elements, B-bar correction Hughes (1987) is implemented in MOOSE.
In this method, both the strain () and the virtual strain () in an element are separated into volumetric and deviatoric components. The volumetric component is then replaced with an element averaged volumetric strain. This ensures that the volumetric strain remains constant throughout the element.
For example, in the case of small strain linear elasticity, the equation of motion is: (1) The element averaged volumetric strain (assuming small strain formulation) is: (2) where is the volume of the element and tr(.) is the trace of the matrix.
The strain in each element is replaced by the approximation: (3) where is the identity matrix. Similarly, the virtual strain is also approximated by: (4) The modified equation of motion is: (5) More details about this method can be found in Section 8.6 of Bower (2009).
When finite strain formulation is used, the volumetric component of the strain is separated using the determinant of the deformation matrix.
Volumetric locking correction is set to false by default in tensor mechanics. When dealing with problems involving plasticity or incompressible materials, it can be turned on by setting
volumetric_locking_correction=true in both the stress divergence kernel and the strain calculator or in the Tensor Mechanics master action.
When volumetric locking correction is turned on, using a SMP preconditioner with coupled displacement variables may help with convergence. For a 3-D problem with only displacement as unknown variables, the following pre-conditioner block may be used:
[Preconditioning] [./SMP] type = SMP full = true [../]