New Material System for the Lagrangian Kernels

Purpose and Implementations

The material system for the new Lagrangian kernels consists of:

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.

commentnote

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.

Table 1: Standard kinematic quantities provided by ComputeLagrangianStrain

Quantity nameDefinition, large_kinematics=trueDefinition, large_kinematics=false
Deformation gradient
Inverse deformation gradient
Inverse incremental deformation gradient
Volume change
Total strain incrementSame
Mechanical strain incrementSame
Total strainSame
Mechanical strainSame

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.

Table 2: Base classes available for defining constitutive models

Base class nameExtra kinematic measuresStress measureRequired Jacobian
ComputeLagrangianStressCauchyNoneCauchy stress,
ComputeLagrangianStressPK1None1st Piola-Kirchhoff stress,
ComputeLagrangianStressPK2Green-Lagrange strain, 2nd Piola-Kirchhoff stress,
ComputeLagrangianObjectiveStressNoneSmall stress,