diff --git a/docs/src/finite_strains.md b/docs/src/finite_strains.md index 9a4755d..4454512 100644 --- a/docs/src/finite_strains.md +++ b/docs/src/finite_strains.md @@ -6,6 +6,11 @@ Implementations of mechanical (stress-strain) material models following the `MaterialModelsBase.jl` interface. +### Saint-Venant Elasticity +```@docs +SaintVenant +``` + ## Hyperelasticity ### Neo-Hookean Materials ```@docs diff --git a/src/Elastic.jl b/src/Elastic.jl index 108564d..7d8141b 100644 --- a/src/Elastic.jl +++ b/src/Elastic.jl @@ -20,8 +20,8 @@ LinearElastic(::Val{:isotropic}) LinearElastic{:general}(C::SymmetricTensor{4,3}) Create a general `LinearElastic` material with the 4th order elastic stiffness tensor -``\\boldsymbol{C}``, such that -``\\boldsymbol{\\sigma} = \\boldsymbol{C}:\\boldsymbol{\\epsilon}``. +``\\mathsf{\\boldsymbol{C}}``, such that +``\\boldsymbol{\\sigma} = \\mathsf{\\boldsymbol{C}}:\\boldsymbol{\\epsilon}``. """ LinearElastic(::Val{:general}) @@ -29,11 +29,11 @@ LinearElastic(::Val{:general}) LinearElastic{:cubicsymmetry}(; C1111::T, C1122::T, C1212::T) where {T} Create a `LinearElastic` material where the stiffness tensor, -``\\boldsymbol{C}``, possesses cubic symmetry along the coordinate axes. -Using the 9-component Voigt notation, ``\\boldsymbol{C}`` can be expressed as +``\\mathsf{\\boldsymbol{C}}``, possesses cubic symmetry along the coordinate axes. +Using the 9-component Voigt notation, ``\\mathsf{\\boldsymbol{C}}`` can be expressed as ```math -\\boldsymbol{C} = +\\mathsf{\\boldsymbol{C}} = \\begin{bmatrix} C_{1111} & C_{1122} & C_{1122} & 0 & 0 & 0 & 0 & 0 & 0 \\\\ C_{1122} & C_{1111} & C_{1122} & 0 & 0 & 0 & 0 & 0 & 0 \\\\ diff --git a/src/MechanicalMaterialModels.jl b/src/MechanicalMaterialModels.jl index 6c1e5c6..8a6ccff 100644 --- a/src/MechanicalMaterialModels.jl +++ b/src/MechanicalMaterialModels.jl @@ -51,7 +51,8 @@ export CrystalPlasticity include("hyper_elasticity/HyperElastic.jl") include("hyper_elasticity/NeoHooke.jl") -export NeoHooke, CompressibleNeoHooke +include("hyper_elasticity/SaintVenant.jl") +export NeoHooke, CompressibleNeoHooke, SaintVenant include("FiniteStrainPlastic.jl") export FiniteStrainPlastic diff --git a/src/hyper_elasticity/SaintVenant.jl b/src/hyper_elasticity/SaintVenant.jl new file mode 100644 index 0000000..9376fac --- /dev/null +++ b/src/hyper_elasticity/SaintVenant.jl @@ -0,0 +1,21 @@ + +""" + SaintVenant(elastic::LinearElastic) + +The Saint-Venant formulation defined by the potential +```math +\\varPsi(\\boldsymbol{E}) = \\frac{1}{2}\\boldsymbol{E}:\\mathsf{\\boldsymbol{C}}:\\boldsymbol{E} +``` +where ``\\boldsymbol{E}`` is the Green-Lagrange strain tensor and ``\\mathsf{\\boldsymbol{C}}`` is the +elastic stiffness tensor defined in `elastic`. +""" +struct SaintVenant{E} <: AbstractHyperElastic + elastic::E +end + +function compute_potential(m::SaintVenant, C::SymmetricTensor) + E = (C - one(C)) / 2 + return (E ⊡ m.elastic.C ⊡ E) / 2 +end + +MMB.get_vector_eltype(m::SaintVenant) = MMB.get_vector_eltype(m.elastic) diff --git a/test/test_hyperelastic.jl b/test/test_hyperelastic.jl index 09c7967..cb1549f 100644 --- a/test/test_hyperelastic.jl +++ b/test/test_hyperelastic.jl @@ -1,5 +1,5 @@ @testset "HyperElastic" begin - models = (NeoHooke(;G=rand()), CompressibleNeoHooke(;G=rand(), K=rand())) + models = (NeoHooke(;G=rand()), CompressibleNeoHooke(;G=rand(), K=rand()), SaintVenant(LinearElastic(E=rand(), ν=rand()/2))) F = rand(Tensor{2,3}) for model in models state = initial_material_state(model)