Skip to content

Commit f226dc8

Browse files
authored
Merge pull request #70 from MultiSimOLab/anisomagneto
Implements anisotropic magneto-mechanical coupling
2 parents 7e3bb14 + 03fdb68 commit f226dc8

File tree

2 files changed

+59
-1
lines changed

2 files changed

+59
-1
lines changed

src/PhysicalModels/MagnetoMechanicalModels.jl

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ struct MagnetoMechModel{MG<:Magneto,MC<:Mechano} <: MagnetoMechano
1515
new{MG,MC}(magneto, mechano)
1616
end
1717

18-
function (obj::MagnetoMechModel)(Λ::Float64=1.0)
18+
function (obj::MagnetoMechModel{<:Magneto,<:IsoElastic})(Λ::Float64=1.0)
1919
Ψm, ∂Ψm_u, ∂Ψm_uu = obj.mechano(Λ)
2020
Ψmm, ∂Ψmm_u, ∂Ψmm_φ, ∂Ψmm_uu, ∂Ψmm_φu, ∂Ψmm_φφ = _getCoupling(obj.magneto, obj.mechano, Λ)
2121

@@ -28,9 +28,26 @@ struct MagnetoMechModel{MG<:Magneto,MC<:Mechano} <: MagnetoMechano
2828

2929
return (Ψ, ∂Ψu, ∂Ψφ, ∂Ψuu, ∂Ψφu, ∂Ψφφ)
3030
end
31+
32+
function (obj::MagnetoMechModel{<:Magneto,<:AnisoElastic})(Λ::Float64=1.0)
33+
Ψm, ∂Ψm_u, ∂Ψm_uu = obj.mechano(Λ)
34+
Ψmm, ∂Ψmm_u, ∂Ψmm_φ, ∂Ψmm_uu, ∂Ψmm_φu, ∂Ψmm_φφ = _getCoupling(obj.magneto, obj.mechano, Λ)
35+
36+
Ψ(F, ℋ₀, N) = Ψm(F,N) + Ψmm(F, ℋ₀, N)
37+
∂Ψu(F, ℋ₀, N) = ∂Ψm_u(F,N) + ∂Ψmm_u(F, ℋ₀, N)
38+
∂Ψφ(F, ℋ₀, N) = ∂Ψmm_φ(F, ℋ₀, N)
39+
∂Ψuu(F, ℋ₀, N) = ∂Ψm_uu(F,N) + ∂Ψmm_uu(F, ℋ₀, N)
40+
∂Ψφu(F, ℋ₀, N) = ∂Ψmm_φu(F, ℋ₀, N)
41+
∂Ψφφ(F, ℋ₀, N) = ∂Ψmm_φφ(F, ℋ₀, N)
42+
43+
return (Ψ, ∂Ψu, ∂Ψφ, ∂Ψuu, ∂Ψφu, ∂Ψφφ)
44+
end
45+
46+
3147
end
3248

3349

50+
3451
function _getCoupling(mag::Union{IdealMagnetic,IdealMagnetic2D}, ::Mechano, Λ::Float64)
3552
Ψmm, ∂Ψmm_∂u, ∂Ψmm_∂φ, ∂Ψmm_∂uu, ∂Ψmm_∂φu, ∂Ψmm_∂φφ = mag(Λ)
3653

test/TestConstitutiveModels/PhysicalModelTests.jl

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -644,6 +644,47 @@ end
644644
end
645645

646646

647+
@testset "HardMagnetic_SoftMaterial3D_aniso" begin
648+
649+
∇u = TensorValue(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0) * 1e-3
650+
∇φ = VectorValue(1.0, 2.0, 3.0)
651+
N = VectorValue(0.0, 0.0, 1.0)
652+
653+
modelMRiso = MooneyRivlin3D=3.0, μ1=1.0, μ2=2.0)
654+
modelMRaniso = MooneyRivlin3D=3.0, μ1=1.0, μ2=2.0)
655+
modelMR=modelMRiso+modelMRaniso
656+
modelID = HardMagnetic(μ0=1.2566e-6, αr=40e-3, χe=0.0, χr=8.0; βmok=1.0, βcoup=1.0)
657+
modelmagneto=modelMR+modelID
658+
Ψ, ∂Ψu, ∂Ψφ, ∂Ψuu, ∂Ψφu, ∂Ψφφ = modelmagneto()
659+
K=Kinematics(Mechano,Solid)
660+
F, _, _ = get_Kinematics(K)
661+
Km=Kinematics(Magneto,Solid)
662+
H0 = get_Kinematics(Km)
663+
664+
665+
# ∂Ψu_(F) =TensorValue(ForwardDiff.gradient(x -> Ψ(x, get_array( H0(∇φ)),get_array(N) ), get_array(F)))
666+
# ∂Ψφ_(H) =VectorValue(ForwardDiff.gradient(x -> Ψ(get_array( F(∇u)), x,get_array(N) ), get_array(H)))
667+
# ∂Ψuu_(F) =TensorValue(ForwardDiff.hessian(x -> Ψ(x, get_array( H0(∇φ)),get_array(N) ), get_array(F)))
668+
# ∂Ψφu_(H) =TensorValue(ForwardDiff.jacobian(x -> ∂Ψφ(x, get_array( H0(∇φ)),get_array(N) ), get_array(F(∇u))))
669+
# ∂Ψφφ_(H) =TensorValue(ForwardDiff.jacobian(x -> ∂Ψφ(get_array( F(∇u)), x,get_array(N) ), get_array(H)))
670+
671+
# norm(∂Ψu_(F(∇u)))
672+
# norm(∂Ψφ_(H0(∇φ)))
673+
# norm(∂Ψuu_(F(∇u)))
674+
# norm(∂Ψφu_(H0(∇φ)))
675+
# norm(∂Ψφφ_(H0(∇φ)))
676+
677+
678+
@test Ψ(F(∇u), H0(∇φ), N) == 0.003187725760804994
679+
@test norm(∂Ψu(F(∇u), H0(∇φ), N)) == 0.4966662732306754
680+
@test norm(∂Ψφ(F(∇u), H0(∇φ), N)) == 4.660348298920368e-6
681+
@test norm(∂Ψuu(F(∇u), H0(∇φ), N)) ==60.735729041745294
682+
@test norm(∂Ψφu(F(∇u), H0(∇φ), N)) == 1.2369035467980284e-5
683+
@test norm(∂Ψφφ(F(∇u), H0(∇φ), N)) == 2.1878750641250348e-6
684+
end
685+
686+
687+
647688

648689
@testset "HardMagnetic_SoftMaterial3D" begin
649690

0 commit comments

Comments
 (0)