From bc82a60228861c31af8a9e752fbb8d818b77c3c5 Mon Sep 17 00:00:00 2001 From: Jukka Aho Date: Sat, 9 May 2026 17:36:07 +0300 Subject: [PATCH] feat(materials): extend compositional state-variable registry Add typed slots for damage equivalent strain, eigenstrain, creep strain, and indexed Chaboche backstress components so advanced models can declare IP state without ad hoc symbols. - Define `DamageEquivalentStrain`, `Eigenstrain`, `CreepStrain`, and `ChabocheAlpha{N}` with `state_variable_type` / `default_symbol` hooks. --- src/materials/state_variables.jl | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/materials/state_variables.jl b/src/materials/state_variables.jl index 5525b31..8d073ba 100644 --- a/src/materials/state_variables.jl +++ b/src/materials/state_variables.jl @@ -62,6 +62,26 @@ Default symbol: `:d` """ struct DamageVariable <: AbstractStateVariable end +""" +Equivalent-strain history for scalar damage (`κ_d`). +""" +struct DamageEquivalentStrain <: AbstractStateVariable end + +""" +Prescribed eigenstrain tensor `ε_e` (e.g. drying shrinkage updated in a staggered solve). +""" +struct Eigenstrain <: AbstractStateVariable end + +""" +Accumulated creep strain tensor `ε_c` (Norton–Bailey-type laws). +""" +struct CreepStrain <: AbstractStateVariable end + +""" +`N`-th Armstrong–Frederick backstress slot (`α₁`, `α₂`, …). +""" +struct ChabocheAlpha{N} <: AbstractStateVariable end + # ============================================================================ # STATE VARIABLE TRAITS # ============================================================================ @@ -77,6 +97,10 @@ state_variable_type(::Type{PlasticStrain}) = SymmetricTensor{2,3,Float64,6} state_variable_type(::Type{Backstress}) = SymmetricTensor{2,3,Float64,6} state_variable_type(::Type{EquivalentPlasticStrain}) = Float64 state_variable_type(::Type{DamageVariable}) = Float64 +state_variable_type(::Type{DamageEquivalentStrain}) = Float64 +state_variable_type(::Type{Eigenstrain}) = SymmetricTensor{2,3,Float64,6} +state_variable_type(::Type{CreepStrain}) = SymmetricTensor{2,3,Float64,6} +state_variable_type(::Type{ChabocheAlpha{N}}) where N = SymmetricTensor{2,3,Float64,6} """ default_symbol(::Type{<:AbstractStateVariable}) @@ -89,3 +113,7 @@ default_symbol(::Type{PlasticStrain}) = :ε_p default_symbol(::Type{Backstress}) = :α default_symbol(::Type{EquivalentPlasticStrain}) = :κ default_symbol(::Type{DamageVariable}) = :d +default_symbol(::Type{DamageEquivalentStrain}) = :κ_d +default_symbol(::Type{Eigenstrain}) = :ε_e +default_symbol(::Type{CreepStrain}) = :ε_c +default_symbol(::Type{ChabocheAlpha{N}}) where N = Symbol("α", N)