Kinematics

Overview

The Solid Mechanics module describes a mechanics problem with three cooperating pieces:

  1. a kinematics (strain) calculator, ComputeLagrangianStrain, which turns the displacement field into deformation measures;

  2. a constitutive (stress) calculator, a model deriving from ComputeLagrangianStressCauchy or ComputeLagrangianStressPK1, which maps those deformation measures to stress; and

  3. a stress-divergence kernel, TotalLagrangianStressDivergence or UpdatedLagrangianStressDivergence, which enforces the balance of linear momentum Hu and Messner (2025).

This page covers the first piece, the kinematics. Splitting the problem this way means a single strain calculator supplies a common set of deformation measures that any constitutive model can consume, and the same model works with either the total or updated Lagrangian kernel.

Each of the three objects writes material properties that the others read by name. When more than one mechanics model runs on the same block, prefix the properties with the base_name parameter so the strain calculator, stress calculator, and kernel that belong together share a name and stay decoupled from any other set.

Reference and Current Configurations

The kinematics relate two descriptions of the body: the reference configuration with coordinates , and the current (deformed) configuration with coordinates . Following the usual convention, upper-case indices denote quantities in the reference configuration and lower-case indices quantities in the current configuration. A gradient with respect to the current coordinates is written and a gradient with respect to the reference coordinates The map between the configurations is characterized by the deformation gradient with the displacement field and the Kronecker delta.

The strain calculator supports both small and large deformation kinematics, selected with the large_kinematics option. Under small deformation theory the displacement gradients are assumed small enough that the reference and current configurations coincide, the squared displacement-gradient terms are dropped, and only the strain tensors remain meaningful (see Kinematic Measures). Under large deformation theory the full nonlinear map is retained.

The gradients above are formed for three coordinate systems: 3D Cartesian, 2D axisymmetric cylindrical, and 1D centrosymmetric spherical. The implementation section lists the strain calculator for each.

Kinematic Measures

From the deformation gradient the strain calculator derives the incremental and accumulated measures listed in Table 1. Throughout, a superscript denotes a quantity from the previous step; a quantity written without a step superscript is evaluated at the current step. The increments are built from the inverse incremental deformation gradient which relates the previous configuration, , to the current configuration, . The calculator converts into the increment in the spatial velocity gradient, , and splits it into the symmetric strain increment and the skew vorticity increment .

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 of the large-deformation quantities used to map between configurations degenerate to the identity when large_kinematics = false, leaving only the strain tensors defined. Constitutive models are free to use whichever of these measures is most convenient; some stress base classes provide additional measures (for example the Green-Lagrange strain supplied by the second Piola-Kirchhoff base class).

Kinematic Approximations

For large deformations the conversion of into is not unique: it is a closed-form approximation of . The kinematic_approximation parameter selects among a linear default and three higher-accuracy options; the same choice also sets the vorticity increment consumed by the objective stress rates. See Kinematic Approximations for the formulas and guidance.

commentnote:Incremental finite-strain accuracy

Because the finite-strain measures are integrated incrementally, they carry a small path-dependence error: over a closed deformation cycle the integrated rate of deformation does not return exactly to zero, leaving a spurious residual stress Belytschko et al. (2003). The error grows with the strain per step and is negligible for typical increments; at very large strains a hyperelastic model (which defines stress directly from the deformation gradient) avoids it entirely. The higher-accuracy kinematic approximations reduce the incremental error where it matters.

Eigenstrains

An eigenstrain is a strain that does not arise directly from mechanical loading, such as thermal expansion. The strain calculator sums the eigenstrain increments contributed by eigenstrain materials (for example ComputeThermalExpansionEigenstrain) and subtracts them from the total strain increment to form the mechanical strain increment, so a constitutive model written against the mechanical strain automatically accounts for thermal and other stress-free strains. Add eigenstrains through the eigenstrain_names parameter of the strain calculator or the SolidMechanics/QuasiStatic action.

commentnote

Eigenstrains are applied incrementally to the strain measures only. They do not modify the deformation gradient, its inverse, or the inverse incremental deformation gradient, nor any measure derived from those tensors.

Stabilization

Setting stabilize_strain = true applies an modification that averages the volumetric part of the deformation gradient over each element, preventing volumetric locking of linear quad and hex elements in incompressible or nearly-incompressible problems. Because the modification is applied to the deformation gradient before the derived measures are formed, it propagates through every kinematic quantity in Table 1. The F_bar_mode parameter selects whether the volumetric average is taken of the total (default) or incremental deformation gradient. See the stabilization system documentation for the theory and for guidance on when to enable it.

Homogenization

When the homogenization system is active, the strain calculator adds the extra macroscopic gradient supplied by ComputeHomogenizedLagrangianStrain to the displacement-based deformation gradient before forming any of the derived measures. Unlike the eigenstrain modification, the homogenization gradient therefore affects constitutive models written against any kinematic tensor.

The large_kinematics Option

The large_kinematics flag selects between large deformation theory (true) and small deformation theory (false). The strain calculator is the single source of truth for this choice: the stress calculators and the kernels derive their kinematic theory from the strain calculator automatically, so the flag only needs to be set in one place.

The recommended way to set it is through the SolidMechanics/QuasiStatic action, which configures the strain calculator and kernels together from a single strain = SMALL or strain = FINITE option.

commentnote

Setting large_kinematics directly on a stress calculator or kernel is deprecated: the value is derived from the strain calculator, and an inconsistent explicit setting is reported as an error rather than silently producing wrong results.

Implementation

The kinematics are computed by ComputeLagrangianStrain for Cartesian coordinates, with variants for the other supported coordinate systems and for weak plane stress:

ObjectUse
ComputeLagrangianStrain3D and 2D Cartesian problems
ComputeLagrangianStrainAxisymmetricCylindrical2D axisymmetric cylindrical problems
ComputeLagrangianStrainCentrosymmetricSpherical1D centrosymmetric spherical problems
ComputeLagrangianWPSStrainweak plane stress problems

In most cases the strain calculator is added automatically by the SolidMechanics/QuasiStatic action. It can also be added directly; the following shows the strain calculator (and the rest of the material setup) for a large-deformation problem:

[Materials<<<{"href": "../../syntax/Materials/index.html"}>>>]
  [elastic_tensor]
    type = ComputeIsotropicElasticityTensor<<<{"description": "Compute a constant isotropic elasticity tensor.", "href": "../../source/materials/ComputeIsotropicElasticityTensor.html"}>>>
    youngs_modulus<<<{"description": "Young's modulus of the material."}>>> = 1000.0
    poissons_ratio<<<{"description": "Poisson's ratio for the material."}>>> = 0.25
  []
  [compute_stress]
    type = ComputeLagrangianLinearElasticStress<<<{"description": "Stress update based on the small (engineering) stress", "href": "../../source/materials/lagrangian/ComputeLagrangianLinearElasticStress.html"}>>>
  []
  [compute_strain]
    type = ComputeLagrangianStrain<<<{"description": "Compute strain in Cartesian coordinates.", "href": "../../source/materials/lagrangian/ComputeLagrangianStrain.html"}>>>
    displacements<<<{"description": "Displacement variables"}>>> = 'disp_x disp_y disp_z'
    large_kinematics<<<{"description": "Use large displacement kinematics in the kernel."}>>> = true
  []
[]
(modules/solid_mechanics/test/tests/lagrangian/cartesian/updated/patch/large_patch.i)

References

  1. Ted Belytschko, Wing Kam Liu, and Brian Moran. Nonlinear Finite Elements for Continua and Structures. John Wiley & Sons, West Sussex, England, 2003.[Export]
  2. Tianchen Hu and Mark C. Messner. A simple, scalable large deformation solid mechanics implementation in the moose framework. ACM Trans. Math. Softw., April 2025. URL: https://doi.org/10.1145/3716308, doi:10.1145/3716308.[Export]