# 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.

Table 1: Consistent Strain and Stress Formulations

Theoretical FormulationTensor Mechanics Classes
Linearized elasticity total small strain problemsComputeLinearElasticStress and ComputeSmallStrain (in the TensorMechanics/MasterAction use the argument strain = SMALL)
Linearized elasticity incremental small strainComputeFiniteStrainElasticStress and ComputeIncrementalSmallStrain (in the TensorMechanics/MasterAction strain = SMALL and incremental = true )
Large deformation problems, including elasticity and/or plasticityComputeFiniteStrainElasticStress, 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, .

warning:Ensure Consistency in Stress and Strain Formulations

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.

Table 2: Stress Divergence Governing Equation and Mesh Configuration Correspondence

Simulation FormulationGoverning EquationCorrect Kernel ParameterMesh Configuration
Linearized Elasticityuse_displaced_mesh = falseReference mesh (undeformed)
Large Deformation (both Elasticity and Inelasticity)use_displaced_mesh = trueDeformed 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.

note:Use of the Tensor Mechanics MasterAction Recommended

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
[]