# Stress Divergence

A material varies from its rest shape due to stress. This departure from the rest shape is called deformation or displacement, and the proportion of deformation to original size is called strain. To determine the deformed shape and the stress, a governing equation is solved to determine the displacement vector .

## Mathematical Introduction

The strong form of the governing equation on the domain and boundary can be stated as follows: (1) where is the Cauchy stress tensor, is an additional source of stress (such as pore pressure), is the displacement vector, is the body force, is the unit normal to the boundary, is the prescribed displacement on the boundary and is the prescribed traction on the boundary. The weak form of the residual equation is expressed as: (2) where and represent volume and boundary integrals, respectively. The solution of the residual equation with Newton's method requires the Jacobian of the residual equation, which can be expressed as (ignoring boundary terms) (3) assuming is independent of the strain.

The material stress response is described by the constitutive model, where the stress is determined as a function of the strain, i.e. , where is the strain and is a stress free strain. For example, in linear elasticity (only valid for small strains), the material response is linear, i.e. .

## Consistency Between Stress and Strain

Within the tensor mechanics module, we have three separate ways to consistently calculate the strain and stress as shown in Table 1. Attention to the correspondence among the stress and strain formulations is necessary to ensure the stress and strain calculations are performed on the correct material configuration.

Theoretical Formulation | Tensor Mechanics Classes |
---|---|

Linearized elasticity total small strain problems | ComputeLinearElasticStress and ComputeSmallStrain (in the TensorMechanics/MasterAction use the argument `strain = SMALL` ) |

Linearized elasticity incremental small strain | ComputeFiniteStrainElasticStress and ComputeIncrementalSmallStrain (in the TensorMechanics/MasterAction `strain = SMALL` and `incremental = true` ) |

Large deformation problems, including elasticity and/or plasticity | ComputeFiniteStrainElasticStress, or other inelastic stress material class, and ComputeFiniteStrain (in the TensorMechanics/MasterAction use `strain = FINITE` ) |

### Linearized Elasticity Problems

The linearized elasticity problems are calculated on the reference mesh. In the linearized elasticity total small strain formulation, ComputeSmallStrain a rotation increment is not used; in ComputeIncrementalSmallStrain the rotation increment is defined as the identity tensor. Both the total small strain and the incremental small strain classes pass to the stress divergence kernel a stress calculated on the reference mesh, .

### Large Deformation Problems

In the third set of the plug-and-play tensor mechanics classes, the large deformation formulation calculates the strain and stress on the deformed (current) mesh. As an example, at the end of the ComputeFiniteStrain class the strains are rotated to the deformed mesh, and in the ComputeFiniteStrainElasticStress class the stress is rotated to the deformed mesh. Newer material models, such as crystal plasticity models and creep models, also rotate the strain and stress to the deformed mesh. In these large deformation classes, the stress passed to the stress divergence kernel is calculated with respect to the deformed mesh, .

As users and developers, we must take care to ensure consistency in the mesh used to calculate the strain and the mesh used to calculate the residual from the stress divergence equation.

In the StressDivergenceTensors kernel, or the various stress divergence actions, the parameter `use_displaced_mesh`

is used to determine if the deformed or the reference mesh should be used as detailed in Table 2.

Simulation Formulation | Governing Equation | Correct Kernel Parameter | Mesh Configuration |
---|---|---|---|

Linearized Elasticity | `use_displaced_mesh = false` | Reference mesh (undeformed) | |

Large Deformation (both Elasticity and Inelasticity) | `use_displaced_mesh = true` | Deformed mesh (current) |

In the stress divergence kernel, is given by the gradients of the test functions, and the mesh, which the gradients are taken with respect to, is determined by the `use_displaced_mesh`

parameter setting. A source of confusion can be that the `use_displaced_mesh`

parameter is not used in the materials, which compute strain and stress, but this parameter does play a large role in the calculations of the stress divergence kernel.

## MasterAction in Tensor Mechanics

The `use_displaced_mesh`

parameter must be set correcting to ensure consistency in the equilibrium equation: if the stress is calculated with respect to the deformed mesh, the test function gradients must also be calculated with respect to the deformed mesh. The TensorMechanics/MasterAction is designed to automatically determine and set the flag for the `use_displaced_mesh`

parameter correctly for the selected strain formulation.

We recommend that users employ the **TensorMechanics/MasterAction** whenever possible to ensure consistency between the test function gradients and the strain formulation selected.

### Linearized Elasticity Problems

Small strain linearized elasticity problems should be run with the parameter ```
use_displaced_mesh =
false
```

in the kernel to ensure all calculations across all three classes (strain, stress, and kernel) are computed with respect to the reference mesh. These settings are automatically handled with the TensorMechanics/MasterAction use.

```
[Modules/TensorMechanics/Master]
[./block1]
strain = SMALL #Small linearized strain, automatically set to XY coordinates
add_variables = true #Add the variables from the displacement string in GlobalParams
[../]
[]
```

(moose/modules/tensor_mechanics/tutorials/basics/part_1.1.i)### Large Deformation Problems

Large deformation problems should be run with the parameter setting `use_displaced_mesh = true`

in the kernel so that the kernel and the materials all compute variables with respect to the deformed mesh; however, the setting of `use_displaced_mesh`

should not be changed from the default in the materials. The TensorMechanics/MasterAction automatically creates the appropriate settings for all classes. The input file syntax to set the Stress Divergence kernel for finite strain problems is:

```
[Modules]
[./TensorMechanics]
[./Master]
[./all]
strain = FINITE
add_variables = true
[../]
[../]
[../]
[]
```

(moose/modules/tensor_mechanics/test/tests/finite_strain_elastic/finite_strain_elastic_new_test.i)