Custom Constitutive Models
Overview
A constitutive model supplies a stress measure and its algorithmic tangent to the stress-divergence kernels. To add a new model, derive from one of the Lagrangian stress base classes and implement the stress update and its tangent in whichever stress and strain measure is most convenient – the base class converts your output into the measures each kernel needs, so the same model works with both the total and updated Lagrangian formulations.
Base Classes
Choose the base class whose stress and strain measures match your constitutive law:
| Base class | Stress to implement | Tangent to implement |
|---|---|---|
ComputeLagrangianStressCauchy | Cauchy stress | |
ComputeLagrangianStressPK1 | 1st Piola-Kirchhoff stress | |
ComputeLagrangianStressPK2 | 2nd Piola-Kirchhoff stress (Green-Lagrange strain supplied) | |
ComputeLagrangianObjectiveStress | small (engineering) stress |
The first three are the natural choice for models written directly in a finite-strain measure (hyperelasticity, finite-strain plasticity). The last, ComputeLagrangianObjectiveStress, lets a small-deformation, rate-form model run in large deformation by integrating an objective stress rate.
Reference Implementations
The module ships several constitutive models built on these base classes; they serve as worked examples to model a new implementation after:
Porting Legacy Models
Some existing, legacy constitutive models in the solid mechanics module (StressUpdateBase descendant) can be used through ComputeLagrangianWrappedStress, which maps its output into the format the kernels expect. See that page for the limitations of the wrapper.
For a large library of ready-made constitutive models, see the NEML2 constitutive model library.