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.
This commit is contained in:
Jukka Aho
2026-05-09 17:36:07 +03:00
parent 98d08b6bc9
commit bc82a60228
+28
View File
@@ -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` (NortonBailey-type laws).
"""
struct CreepStrain <: AbstractStateVariable end
"""
`N`-th ArmstrongFrederick 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)