From 06eb9864a77ea8c52e05a6a6ac68ccf0a23997c8 Mon Sep 17 00:00:00 2001 From: Jukka Aho Date: Sat, 9 May 2026 18:32:40 +0300 Subject: [PATCH] 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. --- src/materials/continuum_kinematics.jl | 31 +++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/materials/continuum_kinematics.jl diff --git a/src/materials/continuum_kinematics.jl b/src/materials/continuum_kinematics.jl new file mode 100644 index 0000000..0e10eaa --- /dev/null +++ b/src/materials/continuum_kinematics.jl @@ -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 Green–Lagrange strain from `F` (`GreenLagrangeKinematics`). Hyperelastic models already +use the Green–Lagrange path via [`StatelessStrainDependent`](@ref). + +Finite-strain **multiplicative** elastoplasticity is not implemented here; StVK–J₂ uses +the Green–Lagrange measure with a St. Venant–Kirchhoff 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()