New Material System for the Lagrangian Kernels
Purpose and Implementations
The material system for the new Lagrangian kernels consists of:
The strain calculator for the new system,
ComputeLagrangianStrain
A stress calculator, implemented as a derived class based on either
ComputeLagrangianStressCauchy
orComputeLagrangianStressPK1
Optionally, additional material objects part of the homogenization system.
The objective of these objects is to provide the stress update needed by both the TotalLagrangianStressDivergence
and the UpdatedLagrangianStressDivergence
kernels. The user only needs to define the "main" stress measure and an associated derivative, listed in Table 2 below. The base class code then takes care of translating that stress and associated derivative into the "missing" stress and derivative. Similarly, subclasses that derive from either ComputeLagrangianStressCauchy
or ComputeLagrangianStressPK1
can provide an interface for defining the constitutive model in terms of some other stress measure and associated derivative.
To summarize: to implement a new material model make a class that inherits from ComputeLagrangianStressCauchy
or ComputeLagrangianStressPK1
(or an associated subclass) and implement the required stress update and associated algorithmic tangent. The resulting model can be used with either kernel formulation.
Using existing MOOSE materials
The kernels are compatible with "current" MOOSE materials derived from StressUpdateBase through use of the ComputeLagrangianWrappedStress wrapper. The user can just define their material using the existing MOOSE material system and also supply the wrapper material object in the input file. There are some limitations to this wrapper, discussed in more detailed in the wrapper documentation.
New materials could be derived from one of several base classes provided by the new material system, described here, to remove these limitations.
Strain Calculator
It does not matter what kinematic quantities you use to define the stress update, so long as in the end the material model returns the required stress and associated algorithmic tangent derivative. The Lagrangian kernel strain calculation, ComputeLagrangianStrain
, provides a common set of kinematic quantities that the material model can use, listed in Table 1. Some of the material subclasses providing interfaces for alternative stress measures provide additional, common kinematic quantities, described in Table 2.
Stabilization
As described in the description of the stabilization system and in the strain calculator, these standard kinematic quantities and all other kinematic measures derived from them are altered by the stabilize_strain
option to stabilize problems with incompressible and near-incompressible deformation using linear quad or hex elements.
Eigenstrains
The strain calculator takes the sum of any eigenstrains, , for example from ComputeThermalExpansionEigenstrain, and subtracts them from the incremental total strain. As such, material models can use the incremental mechanical strain to define constitutive models that include the effects of thermal strains and other eigenstrains.
The eigenstrains do not affect the deformation gradient, the inverse deformation gradient, the inverse incremental deformation gradient, and any kinematic measures derived from these quantities.
Homogenization system
The strain calculator adds any extra homogenization gradient supplied by ComputeHomogenizedLagrangianStrain to the deformation gradient defined directly from the displacement gradients before forming any of the derived kinematic measures. As such, the homogenization system affects constitutive models defined in terms of any kinematic tensor (unlike the eigenstrain modification).
Standard Kinematic Quantities
The strain calculator uses the spatial velocity gradient, defined as: for large deformations and for small deformations, to define the incremental strains. Table 1 provides the definition of the other standard kinematic variables.
Quantity name | Definition, large_kinematics=true | Definition, large_kinematics=false |
---|---|---|
Deformation gradient | ||
Inverse deformation gradient | ||
Inverse incremental deformation gradient | ||
Volume change | ||
Total strain increment | Same | |
Mechanical strain increment | Same | |
Total strain | Same | |
Mechanical strain | Same |
Except for the deformation gradient itself, all the large deformation quantities used to map configurations are set to the identity for large_kinematics = false
, leaving only the strain tensors defined.
The strains are defined incrementally in terms of the inverse incremental deformation gradient (or the increment in the gradient for small displacement kinematics). The calculator stabilizes the deformation gradient adds any homogenization gradient from the homogenization system before calculating the incremental and accumulated strains, and so these modifications propagate through all the available kinematic measures. However, the eigenstrains are currently defined incrementally and so they will not affect the deformation gradient, the inverse deformation gradient, and the incremental deformation gradient.
The large_kinematics
Option
The ComputeLagrangianStrain
class uses the large_kinematics
option to switch between large strain kinematics and small strain kinematics. This option must be set consistently between the strain calculator and the kernels. The SolidMechanics/QuasiStatic can be used to automatically setup the kernels and strain calculator with consistent options by using the strain=SMALL
or strain=FINITE
options.
Material models do not need to use the large_kinematics
option and there is no requirement it be set consistently with the strain calculator and the kernel. However, material models can use this option to provide variations of the model, often a linearized version using the for large_kinematics = false
and a nonlinear version for large_kinematics = true
. Oftentimes it makes sense to keep the large_kinematics
option consistent between the stress calculator, strain calculator, and kernels. The SolidMechanics/QuasiStatic cannot set the option for the stress calculator automatically, so it is up to the user to specify it in the input file.
Base Class Options
Table 2 lists the base classes available for implementing constitutive models and provides a link to more detailed documentation providing the relevant conversion formula. The table also describes any extra kinematic measures provided by the base class, and the stress and algorithmic tangent (Jacobian) tensors the user needs to implement to define the model.
Base class name | Extra kinematic measures | Stress measure | Required Jacobian |
---|---|---|---|
ComputeLagrangianStressCauchy | None | Cauchy stress, | |
ComputeLagrangianStressPK1 | None | 1st Piola-Kirchhoff stress, | |
ComputeLagrangianStressPK2 | Green-Lagrange strain, | 2nd Piola-Kirchhoff stress, | |
ComputeLagrangianObjectiveStress | None | Small stress, |