Skip to content

Commit 05f2be6

Browse files
authored
Merge pull request #72 from MultiSimOLab/cleanallocs
Improves memory allocation and performance
2 parents c8a48f3 + 231ae8e commit 05f2be6

File tree

5 files changed

+213
-175
lines changed

5 files changed

+213
-175
lines changed

src/PhysicalModels/MagnetoMechanicalModels.jl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ function _getCoupling(mag::Union{IdealMagnetic,IdealMagnetic2D}, ::Mechano, Λ::
6262
end
6363

6464

65-
function _getCoupling(mag::HardMagnetic, mec::Mechano, Λ::Float64)
65+
function _getCoupling(mag::HardMagnetic, ::Mechano, Λ::Float64=1.0)
6666

6767
# Miguel Angel Moreno-Mateos, Mokarram Hossain, Paul Steinmann, Daniel Garcia-Gonzalez,
6868
# Hard magnetics in ultra-soft magnetorheological elastomers enhance fracture toughness and
@@ -72,7 +72,8 @@ function _getCoupling(mag::HardMagnetic, mec::Mechano, Λ::Float64)
7272
μ, αr, χe, χr, βcoup, βmok = mag.μ, mag.αr, mag.χe, mag.χr, mag.βcoup, mag.βmok
7373
J(F) = det(F)
7474
H(F) = det(F) * inv(F)'
75-
αr *= Λ
75+
76+
7677
#-------------------------------------------------------------------------------------
7778
# FIRST TERM
7879
#-------------------------------------------------------------------------------------
@@ -84,7 +85,7 @@ function _getCoupling(mag::HardMagnetic, mec::Mechano, Λ::Float64)
8485
Hℋ₀(F, ℋ₀) = H(F) * ℋ₀
8586
Hℋ₀Hℋ₀(F, ℋ₀) = Hℋ₀(F, ℋ₀) Hℋ₀(F, ℋ₀)
8687

87-
ℋᵣ(N) = αr * N
88+
ℋᵣ(N) = αr * Λ* N
8889
Fℋᵣ(F, N) = F * ℋᵣ(N)
8990
Ψcoup(F, N) =* J(F)) * (Fℋᵣ(F, N) Fℋᵣ(F, N) - ℋᵣ(N) ℋᵣ(N))
9091
∂Ψcoup_∂F(F, N) = 2 ** J(F)) * (Fℋᵣ(F, N) ℋᵣ(N))
@@ -143,7 +144,7 @@ function _getCoupling(mag::HardMagnetic, mec::Mechano, Λ::Float64)
143144
end
144145

145146

146-
function _getCoupling(mag::HardMagnetic2D, mec::Mechano, Λ::Float64)
147+
function _getCoupling(mag::HardMagnetic2D, ::Mechano, Λ::Float64=1.0)
147148

148149
# Miguel Angel Moreno-Mateos, Mokarram Hossain, Paul Steinmann, Daniel Garcia-Gonzalez,
149150
# Hard magnetics in ultra-soft magnetorheological elastomers enhance fracture toughness and
@@ -152,8 +153,7 @@ function _getCoupling(mag::HardMagnetic2D, mec::Mechano, Λ::Float64)
152153
μ, αr, χe, χr, βcoup, βmok = mag.μ, mag.αr, mag.χe, mag.χr, mag.βcoup, mag.βmok
153154
J(F) = det(F)
154155
H(F) = det(F) * inv(F)'
155-
αr *= Λ
156-
156+
157157
# #-------------------------------------------------------------------------------------
158158
# # FIRST TERM
159159
# #-------------------------------------------------------------------------------------
@@ -164,7 +164,7 @@ function _getCoupling(mag::HardMagnetic2D, mec::Mechano, Λ::Float64)
164164
#-------------------------------------------------------------------------------------
165165
Hℋ₀(F, ℋ₀) = H(F) * ℋ₀
166166
Hℋ₀Hℋ₀(F, ℋ₀) = Hℋ₀(F, ℋ₀) Hℋ₀(F, ℋ₀)
167-
ℋᵣ(N) = αr * N
167+
ℋᵣ(N) = αr * Λ* N
168168
Fℋᵣ(F, N) = F * ℋᵣ(N)
169169
Ψcoup(F, N) =* J(F)) * (Fℋᵣ(F, N) Fℋᵣ(F, N) - ℋᵣ(N) ℋᵣ(N))
170170
∂Ψcoup_∂F(F, N) = 2 ** J(F)) * (Fℋᵣ(F, N) ℋᵣ(N))

src/PhysicalModels/MechanicalModels.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ struct HessianRegularization <: Mechano
1919
δ = obj.δ
2020

2121
∂2Ψ(F) = begin
22-
vecval = eigen(get_array(∂2Ψs(F)))
22+
vecval = eigen(Symmetric(get_array(∂2Ψs(F))))
2323
vec = real(vecval.vectors)
2424
val = real(vecval.values)
2525
TensorValue(vec * diagm(max.(δ, val)) * vec')
@@ -53,7 +53,7 @@ struct Hessian∇JRegularization <: Mechano
5353
∂2Ψ_(F, Jh) = ∂2Ψs(F) + κ * (H(F) H(F)) + κ * (J(F) - Jh) * _∂H∂F_2D()
5454

5555
∂2Ψ(F, Jh) = begin
56-
vecval = eigen(get_array(∂2Ψ_(F, Jh)))
56+
vecval = eigen(Symmetric(get_array(∂2Ψ_(F, Jh))))
5757
vec = real(vecval.vectors)
5858
val = real(vecval.values)
5959
TensorValue(vec * diagm(max.(δ, val)) * vec')

src/PhysicalModels/ThermoElectroMechanicalModels.jl

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -119,17 +119,17 @@ struct ThermoElectroMech_Bonet{T<:Thermo,E<:Electro,M<:Mechano} <: ThermoElectro
119119
function (obj::ThermoElectroMech_Bonet)(Λ::Float64=1.0)
120120
@unpack Cv,θr, α, κ, γv, γd = obj.thermo
121121
Ψem, ∂Ψem∂F, ∂Ψem∂E, ∂Ψem∂FF, ∂Ψem∂EF, ∂Ψem∂EE = _getCoupling(obj.electro, obj.mechano, Λ)
122-
gd(δθ) = 1/(γd+1) * (((δθ+θr)/θr)^(γd+1) -1)
123-
∂gd(δθ) = (δθ+θr)^γd / θr^(γd+1)
124-
∂∂gd(δθ) = γd*(δθ+θr)^(γd-1) / θr^(γd+1)
125-
gv(δθ) = 1/(γv+1) * (((δθ+θr)/θr)^(γv+1) -1)
126-
∂gv(δθ) = (δθ+θr)^γv / θr^(γv+1)
127-
∂∂gv(δθ) = γv*(δθ+θr)^(γv-1) / θr^(γv+1)
122+
gd(δθ)=1/(γd+1) * (((δθ+θr)/θr)^(γd+1) -1)
123+
∂gd(δθ)=(δθ+θr)^γd / θr^(γd+1)
124+
∂∂gd(δθ)= γd*(δθ+θr)^(γd-1) / θr^(γd+1)
125+
gv(δθ)=1/(γv+1) * (((δθ+θr)/θr)^(γv+1) -1)
126+
∂gv(δθ)=(δθ+θr)^γv / θr^(γv+1)
127+
∂∂gv(δθ)=γv*(δθ+θr)^(γv-1) / θr^(γv+1)
128128

129129
J(F) = det(F)
130130
H(F) = det(F) * inv(F)'
131131

132-
η(F)=α*(J(F) - 1.0)+Cv/γv
132+
η(F) =α*(J(F) - 1.0)+Cv/γv
133133
∂η∂J(F)=α
134134
∂η∂F(F)=∂η∂J(F)*H(F)
135135
∂2η∂FF(F)=×ᵢ⁴(∂η∂J(F) * F)
@@ -148,9 +148,9 @@ struct ThermoElectroMech_Bonet{T<:Thermo,E<:Electro,M<:Mechano} <: ThermoElectro
148148
∂ΨFδθ(F, E, δθ) = ∂gd(δθ) *∂Ψem∂F(F, E) + ∂gv(δθ)*∂η∂F(F)
149149
∂ΨEδθ(F, E, δθ) = ∂gd(δθ) *∂Ψem∂E(F, E)
150150

151-
η(F, E, δθ) = -∂Ψ_∂δθ(F, E, δθ)
151+
entropy(F, E, δθ) = -∂Ψ_∂δθ(F, E, δθ)
152152

153-
return (Ψ, ∂Ψ_∂F, ∂Ψ_∂E, ∂Ψ_∂δθ, ∂2Ψ_∂2F, ∂2Ψ_∂2E, ∂2Ψ_∂2δθ, ∂ΨEF, ∂ΨFδθ, ∂ΨEδθ, η)
153+
return (Ψ, ∂Ψ_∂F, ∂Ψ_∂E, ∂Ψ_∂δθ, ∂2Ψ_∂2F, ∂2Ψ_∂2E, ∂2Ψ_∂2δθ, ∂ΨEF, ∂ΨFδθ, ∂ΨEδθ, entropy)
154154
end
155155
end
156156

test/TestConstitutiveModels/ElectroMechanicalTests.jl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ end
4545

4646

4747
@testset "ElectroMechano" begin
48+
# Memory estimate: 0 bytes, allocs estimate: 0.
4849
modelMR = MooneyRivlin3D=3.0, μ1=1.0, μ2=2.0)
4950
modelID = IdealDielectric=4.0)
5051
modelelectro =modelMR+modelID
@@ -64,7 +65,7 @@ end
6465

6566

6667
@testset "FlexoElectroMechanics" begin
67-
68+
# Memory estimate: 0 bytes, allocs estimate: 0.
6869
# Constitutive models
6970
∇umacro = TensorValue(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0) * 1e-2
7071
∇u1 = 1e-1 * TensorValue(1, 2, 3, 4, 5, 6, 7, 8, 9)
@@ -100,6 +101,8 @@ end
100101

101102

102103
@testset "ViscoElectricModel" begin
104+
# 157 μs Histogram: log(frequency) by time 391 μs <
105+
# Memory estimate: 240.03 KiB, allocs estimate: 3069.
103106
hyper_elastic = NeoHookean3D=1000., μ=10.)
104107
short_term = IncompressibleNeoHookean3D=5., λ=0.)
105108
viscous_branch1 = ViscousIncompressible(short_term, τ=6.)

0 commit comments

Comments
 (0)