4949
5050# --- Underlying neo-Hookean model in terms of viscous distortional invariants ---
5151
52- function Ψv (obj:: ViscousPolyconvex , C, Cv )
52+ function Ψv (obj:: ViscousPolyconvex , C, invCv )
5353 μ = obj. μ
5454 IIIc = det (C)
55- 0.5 μ * (C ⊙ inv (Cv) - 3 * IIIc^ (1 / 3 ))
55+ 0.5 μ * (C ⊙ invCv - 3 * IIIc^ (1 / 3 ))
5656end
5757
58- function Sv (obj:: ViscousPolyconvex , C, Cv )
58+ function Sv (obj:: ViscousPolyconvex , C, invCv )
5959 μ = obj. μ
6060 IIIc = det (C)
61- μ * (inv (Cv) - IIIc^ (1 / 3 ) * inv (C))
61+ μ * (invCv - IIIc^ (1 / 3 ) * inv (C))
6262end
6363
64- function ∂Sv∂C_Cᵥfix (obj:: ViscousPolyconvex , C, Cv )
64+ function ∂Sv∂C_Cᵥfix (obj:: ViscousPolyconvex , C, invCv )
6565 μ = obj. μ
6666 IIIc = det (C)
6767 G = cof (C)
7272
7373function energy (obj:: ViscousPolyconvex , F, Fn, Cvn)
7474 C, Cn = Cauchy .((F, Fn))
75- Cv = return_mapping (obj, C, Cn, Cvn)
76- Ψv (obj, C, Cv )
75+ invCv = Cv⁻¹ (obj, C, Cn, Cvn)
76+ Ψv (obj, C, invCv )
7777end
7878
7979function first_piola (obj:: ViscousPolyconvex , F, Fn, Cvn)
8080 C, Cn = Cauchy .((F, Fn))
81- Cv = return_mapping (obj, C, Cn, Cvn)
82- F * Sv (obj, C, Cv )
81+ invCv = Cv⁻¹ (obj, C, Cn, Cvn)
82+ F * Sv (obj, C, invCv )
8383end
8484
8585function tangent (obj:: ViscousPolyconvex , F, Fn, Cvn)
8686 C, Cn = Cauchy .((F, Fn))
87- Cv = return_mapping (obj, C, Cn, Cvn)
88- H1 = obj. μ * ∂invCv ∂C (obj, C, Cn, Cvn)
89- H2 = ∂Sv∂C_Cᵥfix (obj, C, Cv )
90- H3 = I3 ⊗ ₁₃²⁴ Sv (obj, C, Cv )
87+ invCv = Cv⁻¹ (obj, C, Cn, Cvn)
88+ H1 = obj. μ * ∂Cv⁻¹ ∂C (obj, C, Cn, Cvn)
89+ H2 = ∂Sv∂C_Cᵥfix (obj, C, invCv )
90+ H3 = I3 ⊗ ₁₃²⁴ Sv (obj, C, invCv )
9191 DCDF = F' ⊗ ₁₃²⁴ I3 + I3 ⊗ ₁₄²³ F'
9292 0.5 * DCDF' · (H1 + H2) · DCDF + H3
9393end
@@ -96,34 +96,32 @@ function dissipation(obj::ViscousPolyconvex, F, Fn, Cvn)
9696 γ = obj. μ / obj. τ
9797 Τ = obj. τ / obj. Δt[]
9898 C, Cn = Cauchy .((F, Fn))
99- Cv = return_mapping (obj, C, Cn, Cvn)
100- invC = inv (C )
99+ invCv = Cv⁻¹ (obj, C, Cn, Cvn)
100+ Cv = inv (Cv )
101101 λ_algo = 1 / (det (invC + Τ* inv (Cvn))^ (1 / 3 ) - Τ) # λ = 3 / (Cv ⊙ invC)
102- - 0.5 γ * (C - λ_algo* Cv) ⊙ (invC - (1 / λ_algo)* inv (Cv) )
102+ - 0.5 γ * (C - λ_algo* Cv) ⊙ (invC - (1 / λ_algo)* invCv )
103103end
104104
105105# --- Return mapping and derivatives for the underlying neo-Hookean ---
106106
107- function return_mapping (obj:: ViscousPolyconvex , C, Cn, Cvn)
107+ function Cv⁻¹ (obj:: ViscousPolyconvex , C, Cn, Cvn)
108108 Τ = obj. Δt[] / obj. τ
109109 B = Τ * inv (C) + inv (Cvn)
110- invCv = det (B)^ (- 1 / 3 ) * B
111- inv (invCv)
112- # Cv = det(B)^(1/3) * inv(B)
110+ det (B)^ (- 1 / 3 ) * B
113111end
114112
115- function ∂invCv ∂C (obj:: ViscousPolyconvex , C, Cn, Cvn)
113+ function ∂Cv⁻¹ ∂C (obj:: ViscousPolyconvex , C, Cn, Cvn)
116114 Τ = obj. Δt[] / obj. τ
117- B = Τ * inv (C) + inv (Cvn )
118- G = cof (C )
119- IIIb = det (B)
120- IIIc = det (C )
121- Τ * IIIb ^ ( - 1 / 3 ) * IIIc ^ ( - 1 ) * ( IIsym (I3) - 1 / 3 * B ⊗ inv (B)) * ( - IIIc ^ ( - 1 ) * G ⊗ G + × ᵢ⁴ (C))
122- # invC = inv(C)
123- # B = Τ * invC + inv(Cvn)
124- # ∂invCv∂B = det(B)^(-1/3) * (IIsym(I3) - (1/3) * (B ⊗ inv(B)) )
125- # ∂B∂C = -Τ * IIsym(invC )
126- # ∂ invCv∂B · ∂B∂C
115+ invC = inv (C)
116+ B = Τ * invC + inv (Cvn )
117+ ∂invCv∂B = det (B) ^ ( - 1 / 3 ) * ( IIsym (I3) - ( 1 / 3 ) * (B ⊗ inv (B)) )
118+ ∂B∂C = - Τ * IIsym (invC )
119+ ∂invCv∂B · ∂B∂C
120+ end
121+
122+ function return_mapping (obj :: ViscousPolyconvex , C, Cn, Cvn )
123+ invCv = Cv⁻¹ (obj, C, Cn, Cvn )
124+ inv ( invCv)
127125end
128126
129127function return_mapping (obj:: ViscousPolyconvex )
0 commit comments