Skip to content
Merged
4 changes: 4 additions & 0 deletions docs/src/finite_strains.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ the `MaterialModelsBase.jl` interface.
NeoHooke
CompressibleNeoHooke
```
### Saint-Venant Elasticity
```@docs
SaintVenant
```
Comment thread
GunnarssonJ marked this conversation as resolved.
Outdated

## [Plasticity](@id finite_strain_plasticity)
```@docs
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
20 changes: 20 additions & 0 deletions src/hyper_elasticity/SaintVenant.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@

"""
SaintVenant(; elastic)
Comment thread
GunnarssonJ marked this conversation as resolved.
Outdated

The Saint-Venant formulation defined by the potential
```math
\\varPsi(\\boldsymbol{E}) = \\frac{1}{2}\\boldsymbol{E}:\\boldsymbol{C}:\\boldsymbol{E}
Comment thread
GunnarssonJ marked this conversation as resolved.
Outdated
```
where ``\\boldsymbol{E}`` is the Green-Lagrange strain tensor and ``\\boldsymbol{C}`` is the elastic stiffness tensor.
Comment thread
GunnarssonJ marked this conversation as resolved.
Outdated
"""
@kwdef struct SaintVenant{E} <: AbstractHyperElastic
Comment thread
GunnarssonJ marked this conversation as resolved.
Outdated
elastic::E
end

function compute_potential(m::SaintVenant, C::SymmetricTensor)
E = 0.5 * (C - one(C))
return 1/2 * E ⊡ m.elastic.C ⊡ E
Comment thread
GunnarssonJ marked this conversation as resolved.
Outdated
end

MMB.get_vector_eltype(::SaintVenant{T}) where {T} = T
Comment thread
GunnarssonJ marked this conversation as resolved.
Outdated
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())))
Comment thread
GunnarssonJ marked this conversation as resolved.
Outdated
F = rand(Tensor{2,3})
for model in models
state = initial_material_state(model)
Expand Down