# Stresses in Tensor Mechanics

The tensor mechanics module include multiple classes for calculating elastic stress, plastic stress, creep stress, and a combination of stress calculation methods.

## Elasticity

Elastic materials do not experience permanent deformation, and all elastic strain and elastic stress is recoverable. Elastic stress is related to elastic strain through the elasticity tensor (1) The two simplified elastic stress materials in Tensor Mechanics are:

ComputeLinearElasticStress for small total strain formulations, and

ComputeFiniteStrainElasticStress for incremental and finite strain formulations.

## Inelastic Stress Calculations

Tensor Mechanics includes two different algorithm approaches to solving for stresses due to inelastic strains:

**User Objects**, which perform the stress calculations in both MOOSE code`UserObjects`

and`Materials`

, and**StressUpdate Materials**, which calculate the stress within a specific type of MOOSE`Materials`

code.

Both approaches are discussed below with application examples.

## User Objects Plasticity Models

This approach to modeling plasticity problems uses as stress material to call several `UserObjects`

, where each user object calculates and returns a specific materials property, e.g. a crystal plasticity lip system strength. The stress material then calculates the current stress state based on the returned material properties.

### MultiSurface Plasticity

In MOOSE, multi-surface plasticity is implemented through the ComputeMultiPlasticityStress Material. This assumes that there is exactly one internal parameter per single-surface plasticity model, and that the functions for single-surface plasticity model depend only on its internal parameter: there must not be 2 or more internal parameters per single-surface plasticity model.) In this case (2) where there is no sum on .

The Newton-Raphson procedure attempts to solve three types of equation:

**Denoted by**. for all active , up to a tolerance specified by the`f`

in the code`yield_function_tolerance`

of the plastic model**Denoted by**. The value is computed as (3) up to a tolerance specified by`epp`

in the code`ep_plastic_tolerance`

. In the code there is a variable`delta_dp`

that is shorthand for , or .**Denoted by**. This value is calculated as (4) up to a tolerance specified by`ic`

in the code`internal_constraint_tolerance`

of the plastic model. There is no sum on in this expression.

In addition to these constraints, the Kuhn-Tucker and consistency conditions must also be satisfied. If the above constraints are satisfied, then these last conditions amount to: if (up to a tolerance), then ; otherwise .

### Crystal Plasticity

The `UserObject`

based crystal plasticity system is designed to facilitate the implementation of different constitutive laws in a modular way. Both phenomenological constitutive models and dislocation-based constitutive models can be implemented through this system. This system consists of one material class FiniteStrainUObasedCP and four userobject classes:

### Hyperelastic Viscoplastic

The Hyperelastic Viscoplastic model is based on the multiplicative decomposition of the total deformation () gradient into an elastic () and viscoplastic () component. The viscoplastic component of deformation is evolved in the intermediate configuration following (5) where and are the flow rate and flow directions, respectively, and, is the number of flow rates. This representation allows different flow rates and directions to be superimposed to obtain an effective viscoplastic deformation of the material.

The integration of the model is performed using a combination of Material and DiscreteElementUserObject classes. In the material class, FiniteStrainHyperElasticViscoPlastic the following residual equations are set for every flow rate. The flow rates and directions are also calculated using UserObjects. The material class declares properties associated with each of the UserObjects and calls the functions in the UserObjects to perform the update as described above. The available base classes of UserObjects are as follows:

`HEVPFlowRateUOBase`

`HEVPInternalVarRateUOBase`

`HEVPInternalVarUOBase`

`HEVPStrengthUOBase`

## StressUpdate Materials

A set of plasticity and creep material models have been developed with the `StressUpdateBase`

class, which allows for iterations within the material itself. These iterative materials are designated by `StressUpdate`

at the end of the class name. The advantage of the stress update materials is the ability to combine multiple inelastic stress calculations, such as creep and plasticity. These classes can use a variety of approaches to determine the inelastic strain increment and the inelastic stress at each step. An common approach used in the `StressUpdate`

classes is the Radial Return von Mises, or J2, algorithm: the Stress Update Radial Return Mapping Algorithm discusses the general algorithm to return the stress state to the yield surface.

The stress update materials are not called by MOOSE directly but instead only by other materials using the `computeProperties`

method. Separating the call to the stress update materials from MOOSE allows us to iteratively call the update materials as is required to achieve convergence.

For **isotropic materials** the radial return approach offers distinct advantages:

**Faster simulation run times**: The isotropic material iteration algorithm uses single variable`Reals`

to compute and converge the inelastic strain instead of inverting the full`Rank-4`

elasticity tensor required in more complicated anisotropic algorithms.**Easy to understand**: The return mapping algorithm implemented in RadialReturnStressUpdate is the classical radial return method based on the von Mises yield criterion.**Applicable to a variety of models**: The radial return method provides the flexibility to include creep, plasticity, and damage within a single simulation. The ComputeMultipleInelasticStress class calls each individual creep and plasticity model to iterate separately over the inelastic strain increment before checking for the convergence of the combined total radial return stress increment required to return the stress state to the yield surface.

The stress update materials each individually calculate, using the Newton Method, the amount of effective inelastic strain required to return the stress state to the yield surface. (6) where the change in the iterative effective inelastic strain is defined as the yield surface over the derivative of the yield surface with respect to the inelastic strain increment. In the case of isotropic linear hardening plasticity, with the hardening function r = hp, the effective plastic strain increment has the form: (7) where is the isotropic shear modulus, and is the scalar von Mises trial stress.

When more than one stress update material is included in the simulation ComputeMultipleInelasticStress will iterate over the change in the calculated stress until the return stress has reached a stable value.

## Some Identities involving the Stress Tensor

Denote the stress tensor by . Assume it is symmetric. A useful quantity, called the "mean stress", is (8) Another useful quantity is the traceless part of , which is called the deviatoric stress, denoted by : (9) In many calculations it is useful to use the invariants of , which are (10) Clearly , and often the square-root of is written as: (11) Alternative forms for are (12) All scalar functions of the stress tensor can be written in terms of its invariants. For instance, (13)