feat(materials): add continuum kinematics trait tags

Introduce `SmallStrainKinematics` vs `GreenLagrangeKinematics` hooks so
`update_material_cache!` can pick the strain measure per material.

- Define `AbstractContinuumKinematics`, concrete tags, and default
  `continuum_kinematics(::AbstractMaterial)` dispatch.
This commit is contained in:
Jukka Aho
2026-05-09 18:32:40 +03:00
parent ec8efd52dd
commit 06eb9864a7
+31
View File
@@ -0,0 +1,31 @@
# SPDX-FileCopyrightText: 2015-2026 Jukka Aho
# SPDX-License-Identifier: MIT
"""
Continuum kinematics tag for stateful solid materials.
[`update_material_cache!`](@ref) uses [`continuum_kinematics`](@ref) to decide whether
integration-point strain is the symmetric displacement gradient (`SmallStrainKinematics`)
or GreenLagrange strain from `F` (`GreenLagrangeKinematics`). Hyperelastic models already
use the GreenLagrange path via [`StatelessStrainDependent`](@ref).
Finite-strain **multiplicative** elastoplasticity is not implemented here; StVKJ₂ uses
the GreenLagrange measure with a St. VenantKirchhoff elastic predictor (see
[`StVenantKirchhoffJ2Plasticity`](@ref)).
"""
abstract type AbstractContinuumKinematics end
"""Symmetric gradient `ε = sym(∇u)` (small-strain assembly)."""
struct SmallStrainKinematics <: AbstractContinuumKinematics end
"""`E = ½(FᵀF I)` with `F = I + ∇u ⊗ …` (total Lagrangian assembly)."""
struct GreenLagrangeKinematics <: AbstractContinuumKinematics end
"""
continuum_kinematics(material::AbstractMaterial)
Return [`SmallStrainKinematics`](@ref) by default; materials such as
[`StVenantKirchhoffJ2Plasticity`](@ref) override with [`GreenLagrangeKinematics`](@ref).
"""
continuum_kinematics(::AbstractMaterial) = SmallStrainKinematics()