Skip to content
Merged
5 changes: 5 additions & 0 deletions docs/src/finite_strains.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
10 changes: 5 additions & 5 deletions src/Elastic.jl
Original file line number Diff line number Diff line change
Expand Up @@ -20,20 +20,20 @@ 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})

"""
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 \\\\
Expand Down
3 changes: 2 additions & 1 deletion src/MechanicalMaterialModels.jl
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
21 changes: 21 additions & 0 deletions src/hyper_elasticity/SaintVenant.jl
Original file line number Diff line number Diff line change
@@ -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)
2 changes: 1 addition & 1 deletion test/test_hyperelastic.jl
Original file line number Diff line number Diff line change
@@ -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)
Expand Down
Loading