Skip to content

Commit

Permalink
Merge pull request #12774 from sveerara/vol_lock_warning
Browse files Browse the repository at this point in the history
Generate warning when volumetric locking is used with second order el…
  • Loading branch information
bwspenc committed Feb 13, 2019
2 parents 4fc2550 + 964b7a1 commit 680534a
Show file tree
Hide file tree
Showing 56 changed files with 183 additions and 106 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@
hertz_cyl_half_1deg_frictionless_aug_check_cont_press_0035.csv
hertz_cyl_half_1deg_frictionless_aug_check_x_disp_0035.csv
hertz_cyl_half_1deg_frictionless_aug_check_y_disp_0035.csv'
cli_args = 'Problem/type=AugmentedLagrangianContactProblem Problem/maximum_lagrangian_update_iterations=200
cli_args = 'Problem/type=AugmentedLagrangianContactProblem Problem/maximum_lagrangian_update_iterations=200
Contact/interface/model=frictionless Contact/interface/formulation=augmented_lagrange
Contact/interface/al_penetration_tolerance=1e-12
Outputs/file_base=hertz_cyl_half_1deg_frictionless_aug_out Outputs/chkfile/file_base=hertz_cyl_half_1deg_frictionless_aug_check
Expand Down Expand Up @@ -133,7 +133,7 @@
type = 'CSVDiff'
input = 'hertz_cyl_half_1deg_template1.i'
csvdiff = 'hertz_cyl_half_1deg_mu_0_2_aug_check2.csv hertz_cyl_half_1deg_mu_0_2_aug_check_cont_press_0030.csv hertz_cyl_half_1deg_mu_0_2_aug_check_x_disp_0030.csv hertz_cyl_half_1deg_mu_0_2_aug_check_y_disp_0030.csv'
cli_args = 'Problem/type=AugmentedLagrangianContactProblem Problem/maximum_lagrangian_update_iterations=200
cli_args = 'Problem/type=AugmentedLagrangianContactProblem Problem/maximum_lagrangian_update_iterations=200
Contact/interface/formulation=augmented_lagrange Contact/interface/al_penetration_tolerance=1e-12
Executioner/end_time=3.0 Contact/interface/friction_coefficient=0.2
Outputs/file_base=hertz_cyl_half_1deg_mu_0_2_aug_out Outputs/chkfile/file_base=hertz_cyl_half_1deg_mu_0_2_aug_check
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
[GlobalParams]
order = SECOND
volumetric_locking_correction = true
displacements = 'disp_x disp_y disp_z'
[]

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
[GlobalParams]
order = SECOND
volumetric_locking_correction = true
displacements = 'disp_x disp_y disp_z'
[]

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
[GlobalParams]
order = SECOND
volumetric_locking_correction = true
displacements = 'disp_x disp_y disp_z'
[]

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
[GlobalParams]
order = SECOND
volumetric_locking_correction = true
displacements = 'disp_x disp_y disp_z'
[]

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
[GlobalParams]
order = SECOND
volumetric_locking_correction = true
displacements = 'disp_x disp_y disp_z'
[]

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
[GlobalParams]
order = SECOND
volumetric_locking_correction = true
displacements = 'disp_x disp_y disp_z'
[]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@
input = 'brick4_mu_0_2_pen.i'
csvdiff = 'brick4_mu_0_2_pen_check.csv brick4_mu_0_2_pen_check_cont_press_0001.csv brick4_mu_0_2_pen_check_x_disp_0001.csv'
rel_err = 1e-5
abs_zero = 1e-8
abs_zero = 2e-8
max_parallel = 1
superlu = true
prereq = 'mu_0_2_pen_sm'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
[GlobalParams]
order = SECOND
volumetric_locking_correction = true
displacements = 'disp_x disp_y'
[]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

[GlobalParams]
order = SECOND
volumetric_locking_correction = true
displacements = 'disp_x disp_y'
[]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

[GlobalParams]
order = SECOND
volumetric_locking_correction = true
displacements = 'disp_x disp_y'
[]

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
[GlobalParams]
order = SECOND
volumetric_locking_correction = true
displacements = 'disp_x disp_y'
[]

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
[GlobalParams]
order = SECOND
volumetric_locking_correction = true
displacements = 'disp_x disp_y'
[]

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
[GlobalParams]
order = SECOND
volumetric_locking_correction = true
displacements = 'disp_x disp_y'
[]

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
[GlobalParams]
order = SECOND
volumetric_locking_correction = true
displacements = 'disp_x disp_y'
[]

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
[GlobalParams]
order = SECOND
volumetric_locking_correction = true
displacements = 'disp_x disp_y'
[]

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
[GlobalParams]
order = SECOND
volumetric_locking_correction = true
displacements = 'disp_x disp_y'
[]

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
[GlobalParams]
order = SECOND
volumetric_locking_correction = true
displacements = 'disp_x disp_y'
[]

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
[GlobalParams]
order = SECOND
volumetric_locking_correction = true
displacements = 'disp_x disp_y'
[]

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
[GlobalParams]
order = SECOND
volumetric_locking_correction = true
displacements = 'disp_x disp_y'
[]

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
[GlobalParams]
order = SECOND
volumetric_locking_correction = true
displacements = 'disp_x disp_y'
[]

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
[GlobalParams]
order = SECOND
volumetric_locking_correction = true
displacements = 'disp_x disp_y'
[]

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
[GlobalParams]
order = SECOND
volumetric_locking_correction = true
displacements = 'disp_x disp_y'
[]

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
[GlobalParams]
order = SECOND
volumetric_locking_correction = true
displacements = 'disp_x disp_y'
[]

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
[GlobalParams]
order = SECOND
volumetric_locking_correction = true
displacements = 'disp_x disp_y'
[]

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
[GlobalParams]
order = SECOND
volumetric_locking_correction = true
displacements = 'disp_x disp_y'
[]

Expand Down Expand Up @@ -279,7 +278,7 @@
line_search = 'none'

nl_abs_tol = 1e-10
nl_rel_tol = 1e-9
nl_rel_tol = 1e-8
l_max_its = 50
nl_max_its = 100
dt = 1.0
Expand Down
Binary file modified modules/combined/test/tests/gravity/gold/gravity_hex20_out.e
Binary file not shown.
Binary file modified modules/combined/test/tests/gravity/gold/gravity_qp_select_out.e
Binary file not shown.
Binary file modified modules/combined/test/tests/gravity/gold/gravity_rz_quad8_out.e
Binary file not shown.
1 change: 0 additions & 1 deletion modules/combined/test/tests/gravity/gravity_hex20.i
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@
[]

[Modules/TensorMechanics/Master/All]
volumetric_locking_correction = true
strain = FINITE
add_variables = true
generate_output = 'stress_xx'
Expand Down
1 change: 1 addition & 0 deletions modules/combined/test/tests/gravity/gravity_hex20_sm.i
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@

[GlobalParams]
displacements = 'disp_x disp_y disp_z'
volumetric_locking_correction = false
[]

[Mesh]
Expand Down
1 change: 0 additions & 1 deletion modules/combined/test/tests/gravity/gravity_qp_select.i
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,6 @@
[]

[Modules/TensorMechanics/Master/All]
volumetric_locking_correction = true
strain = FINITE
#incremental = true
add_variables = true
Expand Down
1 change: 1 addition & 0 deletions modules/combined/test/tests/gravity/gravity_qp_select_sm.i
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@

[GlobalParams]
displacements = 'disp_x disp_y'
volumetric_locking_correction = false
[]

[Mesh]
Expand Down
1 change: 0 additions & 1 deletion modules/combined/test/tests/gravity/gravity_rz_quad8.i
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@
[]

[Modules/TensorMechanics/Master/All]
volumetric_locking_correction = true
strain = FINITE
add_variables = true
generate_output = 'stress_xx stress_yy stress_xy'
Expand Down
1 change: 1 addition & 0 deletions modules/combined/test/tests/gravity/gravity_rz_quad8_sm.i
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@

[GlobalParams]
displacements = 'disp_x disp_y'
volumetric_locking_correction = false
[]

[Problem]
Expand Down
1 change: 0 additions & 1 deletion modules/combined/test/tests/internal_volume/hex20.i
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@

[Modules/TensorMechanics/Master]
[./all]
volumetric_locking_correction = true
incremental = true
strain = FINITE
[../]
Expand Down
1 change: 0 additions & 1 deletion modules/combined/test/tests/internal_volume/rz_quad8.i
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@

[Modules/TensorMechanics/Master]
[./all]
volumetric_locking_correction = true
incremental = true
strain = FINITE
[../]
Expand Down
Binary file not shown.
1 change: 0 additions & 1 deletion modules/combined/test/tests/nodal_area/nodal_area_Hex20.i
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@

[Modules/TensorMechanics/Master]
[./all]
volumetric_locking_correction = true
incremental = true
save_in = 'react_x react_y react_z'
add_variables = true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@

[Modules/TensorMechanics/Master]
[./all]
volumetric_locking_correction = true
incremental = true
save_in = 'react_x react_y react_z'
add_variables = true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
[GlobalParams]
order = SECOND
displacements = 'displ_x displ_y displ_z'
volumetric_locking_correction = false
[]

[Functions]
Expand Down
1 change: 0 additions & 1 deletion modules/combined/test/tests/nodal_area/nodal_area_Hex27.i
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@

[Modules/TensorMechanics/Master]
[./all]
volumetric_locking_correction = true
incremental = true
save_in = 'react_x react_y react_z'
add_variables = true
Expand Down
9 changes: 9 additions & 0 deletions modules/tensor_mechanics/doc/content/bib/tensor_mechanics.bib
Original file line number Diff line number Diff line change
Expand Up @@ -332,3 +332,12 @@ @article{Levitas2011
Pages = {284},
Year = {2011}
}

@article{nakshatrala2008fem,
Author = {Nakshatrala, K. B. and Masud, A. and Hjelmstad, K. D.},
Journal = {Computational Mechanics},
Title = {On finite element formulations for nearly incompressible linear elasticity},
Volume = {41},
Pages = {547-561},
Year = {2008}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -66,4 +66,24 @@ the following pre-conditioner block may be used:
start=Preconditioning
end=Executioner

## Verification of locking correction on Cook's membrane

A 2D trapezoidal membrane [fig_cook] with Poisson's ratio of 0.4999 is fixed at the left edge and sheared at the right edge. Locking behavior of the membrane is observed with the use of first order (Quad4) elements with no volumetric locking correction. This locking results in much lower vertical displacement at Point A than that observed in other scenarios [fig_cook_results]. Locking can be avoided with the use of Quad4 elements along with volumetric locking correction or with the use of second order elements (Quad8) with or without volumetric locking correction. These results match with that presented in Fig. 6 of [cite!nakshatrala2008fem].

!row!

!media media/tensor_mechanics/cook_problem.png
style=width:35%;margin-left:2%;
id=fig_cook
caption=2D problem to demonstrate volumetric locking.

!media media/tensor_mechanics/cook_results.png
style=width:35%;margin-left:2%;
id=fig_cook_results
caption= Vertical displacement at Point A for different element types and mesh density. Locking behavior is observed when Quad4 elements with no volumetric locking correction are used.

!row-end!

Note that at least 20 nodes per edge are required to converge to the correct solution even when volumetric locking correction is used for this problem. Also, second order elements do not display locking behavior, so volumetric locking correction is not required for second order elements. Using volumetric locking correction with second order elements causes a different convergence pattern for the displacements [fig_cook_results] and it is also shown to result in noisy zigzag pattern in stress or strain profiles.

!bibtex bibliography
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,12 @@ StressDivergenceTensors::StressDivergenceTensors(const InputParameters & paramet
// Error if volumetric locking correction is turned on for 1D problems
if (_ndisp == 1 && _volumetric_locking_correction)
mooseError("Volumetric locking correction should be set to false for 1-D problems.");

// Generate warning when volumetric locking correction is used with second order elements
if (_mesh.hasSecondOrderElements() && _volumetric_locking_correction)
mooseWarning("Volumteric locking correction is not required for second order elements. Using "
"volumetric locking with second order elements could cause zigzag patterns in "
"stresses and strains.");
}

void
Expand Down
6 changes: 6 additions & 0 deletions modules/tensor_mechanics/src/materials/ComputeStrainBase.C
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,12 @@ ComputeStrainBase::ComputeStrainBase(const InputParameters & parameters)

if (getParam<bool>("use_displaced_mesh"))
paramError("use_displaced_mesh", "The strain calculator needs to run on the undisplaced mesh.");

// Generate warning when volumetric locking correction is used with second order elements
if (_mesh.hasSecondOrderElements() && _volumetric_locking_correction)
mooseWarning("Volumteric locking correction is not required for second order elements. Using "
"volumetric locking with second order elements could cause zigzag patterns in "
"stresses and strains.");
}

void
Expand Down
Loading

0 comments on commit 680534a

Please sign in to comment.