Skip to content

Commit 093c722

Browse files
authored
Merge pull request #157 from MultiSimOLab/aruda
Added simplified Aruda Boyce model
2 parents aedf654 + 6b4099e commit 093c722

1 file changed

Lines changed: 25 additions & 58 deletions

File tree

src/PhysicalModels/MechanicalModels.jl

Lines changed: 25 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -614,69 +614,36 @@ struct NonlinearIncompressibleMooneyRivlin2D_CV <: IsoElastic
614614
end
615615

616616

617-
struct EightChain <: IsoElastic
618-
μ::Float64
619-
N::Float64
620-
function EightChain(; μ::Float64, N::Float64)
621-
new(μ, N)
622-
end
617+
I1iso(F) = det(F)^(-2 / 3) * F F
618+
∂I1iso_∂F(F) = 2 * det(F)^(-2 / 3) * F
619+
∂I1iso_∂J(F) = -(2 / 3) * det(F)^(-5 / 3) * F F
620+
∂I1iso_∂F∂F(F) = 2 * det(F)^(-2 / 3) * I9
621+
∂I1iso_∂J∂J(F) = (10 / 9) * det(F)^(-8 / 3) * F F
622+
∂I1iso_∂F∂J(F) = -(4 / 3) * det(F)^(-5 / 3) * F
623623

624-
function (obj::EightChain)(Λ::Float64=1.0)
625-
μ, N = obj.μ, obj.N
626-
J(F) = det(F)
627-
H(F) = det(F) * inv(F)'
628-
Ψ(F) = begin
629-
C = F' * F
630-
C_iso = J(F)^(-2 / 3) * C
631-
β = sqrt(tr(C_iso) / 3 / N)
632-
L = β * (3.0 - β^2) / (1.0 - β^2)
633-
β0 = 1 / sqrt(N)
634-
L0 = β0 * (3.0 - β0^2) / (1.0 - β0^2)
635-
μ * N ** L + log(L / sinh(L)) - β0*L0 - log(L0 / sinh(L0)))
636-
end
624+
∂I1iso_∂Ftotal(F) = ∂I1iso_∂F(F) + ∂I1iso_∂J(F)*cof(F)
625+
∂I1iso_∂F∂Ftotal(F) = ∂I1iso_∂F∂F(F) + ∂I1iso_∂F∂J(F) cof(F) + cof(F) ∂I1iso_∂F∂J(F) + ∂I1iso_∂J∂J(F)*cof(F) cof(F) + ∂I1iso_∂J(F)ᵢ⁴(F)
637626

638-
∂Ψ∂F(F) = begin
639-
C = F' * F
640-
C_iso = J(F)^(-2 / 3) * C
641-
β = sqrt(tr(C_iso) / 3 / N)
642-
L = β * (3.0 - β^2) / (1.0 - β^2)
643-
∂β∂I1_ = 0.5 / sqrt(tr(C_iso) * 3 * N)
644-
∂L∂I1_ = ((3 * (1 - β^2)^2 + 2 * β * (3 * β - β^3)) / (1 - β^2)^2) * ∂β∂I1_
645-
n = (∂L∂I1_ * sinh(L) - L * cosh(L) * ∂L∂I1_)
646-
d = (L * sinh(L))
647-
∂Ψ∂I1_ = μ * N * (∂β∂I1_ * L + β * ∂L∂I1_ + n / d)
648-
∂I1_∂F = 2 * J(F)^(-2 / 3) * F
649-
∂I1_∂J = -(2 / 3) * J(F)^(-5 / 3) * tr(C)
650-
∂Ψ∂I1_ * (∂I1_∂F + ∂I1_∂J * H(F))
651-
end
652627

653-
∂Ψ∂FF(F) = begin
654-
H_ = H(F)
655-
C = F' * F
656-
C_iso = det(F)^(-2 / 3) * C
657-
β = sqrt(tr(C_iso) / 3 / N)
658-
L = β * (3.0 - β^2) / (1.0 - β^2)
659-
∂β∂I1_ = 0.5 / sqrt(tr(C_iso) * 3 * N)
660-
∂L∂I1_ = ((3 * (1 - β^2)^2 + 2 * β * (3 * β - β^3)) / (1 - β^2)^2) * ∂β∂I1_
661-
∂β∂I1I1_ = -(3 * N) / (4 * (3 * N * tr(C_iso))^(3 / 2))
662-
∂L∂I1I1_ = ((4 * β *^2 + 3)) / (1 - β^2)^3) * ∂β∂I1_^2 + ((3 * (1 - β^2)^2 + 2 * β * (3 * β - β^3)) / (1 - β^2)^2) * ∂β∂I1I1_
663-
∂I1_∂F = 2 * det(F)^(-2 / 3) * F
664-
∂I1_∂J = -(2 / 3) * det(F)^(-5 / 3) * tr(C)
665-
∂I1_∂F∂F = 2 * det(F)^(-2 / 3) * I9
666-
∂I1_∂J∂J = (10 / 9) * det(F)^(-8 / 3) * tr(C)
667-
∂I1_∂F∂J = -(4 / 3) * det(F)^(-5 / 3) * F
668-
n = (∂L∂I1_ * sinh(L) - L * cosh(L) * ∂L∂I1_)
669-
d = (L * sinh(L))
670-
∂n∂I1_ = ∂L∂I1I1_ * sinh(L) + ∂L∂I1_ * ∂L∂I1_ * cosh(L) - ∂L∂I1_^2 * cosh(L) - L * sinh(L) * ∂L∂I1_^2 - L * cosh(L) * ∂L∂I1I1_
671-
∂d∂I1_ = ∂L∂I1_ * sinh(L) + L * ∂L∂I1_ * cosh(L)
672-
∂Ψ∂I1_ = μ * N * (∂β∂I1_ * L + β * ∂L∂I1_ + n / d)
673-
∂Ψ∂I1I1_ = μ * N * (∂β∂I1I1_ * L + 2 * ∂β∂I1_ * ∂L∂I1_ + β * ∂L∂I1I1_ + (∂n∂I1_ * d - n * ∂d∂I1_) / d^2)
674-
∂Ψ∂I1I1_ * ((∂I1_∂F + ∂I1_∂J * H_) (∂I1_∂F + ∂I1_∂J * H_)) + ∂Ψ∂I1_ * (∂I1_∂F∂F + ∂I1_∂F∂J H_ + H_ ∂I1_∂F∂J + ∂I1_∂J∂J * (H_ H_) + I9 × (∂I1_∂J * F))
675-
end
676-
return (Ψ, ∂Ψ∂F, ∂Ψ∂FF)
677-
end
628+
struct EightChain <: IsoElastic
629+
μ::Float64
630+
N::Float64
631+
EightChain(; μ::Float64, N::Float64) = new(μ, N)
678632
end
679633

634+
function (obj::EightChain)(::Float64=0.0)
635+
(; μ, N) = obj
636+
α = (1/2, 1/20, 11/1050, 19/7000, 519/673750)
637+
β = 1 / N
638+
C1 = μ / 2 / sum(i*αi*(3*β)^(i-1) for (i, αi) in enumerate(α))
639+
W(I) = C1 * sum(αi*β^(i-1)*(I^i - 3^i) for (i, αi) in enumerate(α))
640+
∂W∂I(I) = C1 * sum(i*αi*β^(i-1)*I^(i-1) for (i, αi) in enumerate(α))
641+
∂∂W∂II(I) = C1 * sum(i*(i-1)*α[i]*β^(i-1)*I^(i-2) for i in 2:length(α))
642+
Ψ(F) = W(I1iso(F))
643+
∂Ψ∂F(F) = ∂W∂I(I1iso(F)) * ∂I1iso_∂Ftotal(F)
644+
∂∂Ψ∂FF(F) = ∂∂W∂II(I1iso(F)) * ∂I1iso_∂Ftotal(F) ∂I1iso_∂Ftotal(F) + ∂W∂I(I1iso(F)) * ∂I1iso_∂F∂Ftotal(F)
645+
return (Ψ, ∂Ψ∂F, ∂∂Ψ∂FF)
646+
end
680647

681648

682649
struct TransverseIsotropy3D <: AnisoElastic

0 commit comments

Comments
 (0)