Step 4a - Volumetric locking
Keep the postprocessing modifications from the previous question, set the "poissons_ratio" of the cantilevers to
0.49
. Then add and modify the following parameters
"uniform_refine" in the
[Mesh]
block"volumetric_locking_correction" in the solid mechanics quasi-static physics block
"elem_type" in the
GeneratedMeshGenerator
blocksFor convenience all those parameters may be listed under
[GlobalParams]
instead. Compare first order QUAD4 elements to second order QUAD8 elements, compare the cantilever deflection with and without volumetric locking correction (with QUAD4 elements), and compare the result for different levels of uniform refinement (1, 2, 3, 4).
#
# We study the effects of volumetric locking
# https://mooseframework.inl.gov/modules/solid_mechanics/tutorials/introduction/answer04b.html
#
[GlobalParams]
displacements = 'disp_x disp_y'
# elem_type applies to the GeneratedMeshGenerator blocks
elem_type = QUAD4
# volumetric_locking_correction applies to the SolidMechanics QuasiStatic Physics
volumetric_locking_correction = false
# uniform_refine applies to the final mesh
uniform_refine = 0
[]
[Mesh]
[generated1]
type = GeneratedMeshGenerator
dim = 2
nx = 5
ny = 15
xmin = -0.6
xmax = -0.1
ymax = 5
bias_y = 0.9
boundary_name_prefix = pillar1
[]
[generated2]
type = GeneratedMeshGenerator
dim = 2
nx = 4
ny = 15
xmin = 0.1
xmax = 0.6
ymax = 5
bias_y = 0.9
boundary_name_prefix = pillar2
boundary_id_offset = 4
[]
[collect_meshes]
type = MeshCollectionGenerator
inputs = 'generated1 generated2'
[]
[]
[Physics/SolidMechanics/QuasiStatic]
[all]
add_variables = true
strain = FINITE
[]
[]
[BCs]
[bottom_x]
type = DirichletBC
variable = disp_x
boundary = 'pillar1_bottom pillar2_bottom'
value = 0
[]
[bottom_y]
type = DirichletBC
variable = disp_y
boundary = 'pillar1_bottom pillar2_bottom'
value = 0
[]
[Pressure]
[sides]
boundary = 'pillar1_left pillar2_right'
function = 1e4*t
[]
[]
[]
[Materials]
[elasticity]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1e9
# near incopmpressible material
poissons_ratio = 0.49
[]
[stress]
type = ComputeFiniteStrainElasticStress
[]
[]
[Postprocessors]
[x_deflection]
type = NodalExtremeValue
value_type = max
variable = disp_x
[]
[]
[Executioner]
type = Transient
solve_type = NEWTON
line_search = none
petsc_options_iname = '-pc_type'
petsc_options_value = 'lu'
end_time = 5
dt = 0.5
[Predictor]
type = SimplePredictor
scale = 1
[]
[]
[Outputs]
exodus = true
csv = true
[]
(moose/modules/solid_mechanics/tutorials/introduction/mech_step04a.i)We can run the various combinations of first/second order elements, active/deactivated volumetric locking correction, and levels of refinement and plot the resulting data.
Note that you can override input file parameters from the command line! That means you can run all the cases plotted below using these commands:
../../solid_mechanics-opt -i mech_step04a.i GlobalParams/elem_type=QUAD4
../../solid_mechanics-opt -i mech_step04a.i GlobalParams/elem_type=QUAD4 GlobalParams/volumetric_locking_correction=true
mpirun -n 4 ../../solid_mechanics-opt -i mech_step04a.i GlobalParams/elem_type=QUAD4 GlobalParams/volumetric_locking_correction=true GlobalParams/uniform_refine=1
mpirun -n 4 ../../solid_mechanics-opt -i mech_step04a.i GlobalParams/elem_type=QUAD8
mpirun -n 8 ../../solid_mechanics-opt -i mech_step04a.i GlobalParams/elem_type=QUAD4 GlobalParams/volumetric_locking_correction=true GlobalParams/uniform_refine=4
mpirun -n 8 ../../solid_mechanics-opt -i mech_step04a.i GlobalParams/elem_type=QUAD8 GlobalParams/uniform_refine=2
The point here is to make you aware that volumetric locking can occur in first order elements with certain material properties. It can be alleviated through
Refinement
Use of higher order elements (QUAD8)
Use of volumetric locking correction
Users are encouraged to carefully check their results through convergence studies.