Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions src/PhysicalModels/ElectroMechanicalModels.jl
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,6 @@ struct ElectroMechModel{E<:Electro,M<:Mechano} <: ElectroMechano
end
end

ViscoElectricModel = ElectroMechModel{<:Electro,<:ViscoElastic}

function update_time_step!(obj::ElectroMechModel, Δt::Float64)
update_time_step!(obj.electro, Δt)
update_time_step!(obj.mechano, Δt)
Expand All @@ -72,6 +70,11 @@ function update_state!(obj::ElectroMechModel, state, F, E, args...)
update_state!(obj.mechano, state, F, args...)
end

function Dissipation(obj::ElectroMechModel)
Dvis = Dissipation(obj.mechano)
D(F, E, X...) = Dvis(F, X...)
end


function _getCoupling(elec::Electro, mec::Mechano, Λ::Float64=0.0)
J(F) = det(F)
Expand Down
79 changes: 46 additions & 33 deletions src/PhysicalModels/ThermoElectroMechanicalModels.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@

function initialize_state(obj::TEM, points::Measure) where {TEM<:ThermoElectroMechano}
initialize_state(obj.mechano, points)
end

function update_state!(obj::TEM, state, F, E, θ, args...) where {TEM<:ThermoElectroMechano}
update_state!(obj.mechano, state, F, args...)
end

struct ThermoElectroMechModel{T<:Thermo,E<:Electro,M<:Mechano} <: ThermoElectroMechano
thermo::T
electro::E
Expand Down Expand Up @@ -115,42 +123,47 @@ struct ThermoElectroMech_Bonet{T<:Thermo,E<:Electro,M<:Mechano} <: ThermoElectro
function ThermoElectroMech_Bonet(; thermo::T, electro::E, mechano::M) where {T<:Thermo,E<:Electro,M<:Mechano}
new{T,E,M}(thermo, electro, mechano)
end
end

function (obj::ThermoElectroMech_Bonet)(Λ::Float64=1.0; kwargs...)
@unpack Cv, θr, α, κ, γv, γd = obj.thermo
em = ElectroMechModel(obj.electro, obj.mechano)
Ψem, ∂Ψem∂F, ∂Ψem∂E, ∂Ψem∂FF, ∂Ψem∂EF, ∂Ψem∂EE = em(;kwargs...)
gd(θ) = 1/(γd+1) * ((θ/θr)^(γd+1) -1)
∂gd(θ) = θ^γd / θr^(γd+1)
∂∂gd(θ) = γd*θ^(γd-1) / θr^(γd+1)
gv(θ) = 1/(γv+1) * ((θ/θr)^(γv+1) -1)
∂gv(θ) = θ^γv / θr^(γv+1)
∂∂gv(θ) = γv*θ^(γv-1) / θr^(γv+1)
g(θ,θr,γ) = 1/(γ+1) * ((θ/θr)^(γ+1) -1)
∂g(θ,θr,γ) = θ^γ / θr^(γ+1)
∂∂g(θ,θr,γ) = γ*θ^(γ-1) / θr^(γ+1)

J(F) = det(F)
H(F) = det(F) * inv(F)'
function (obj::ThermoElectroMech_Bonet)(Λ::Float64=1.0)
@unpack Cv, θr, α, κ, γv, γd = obj.thermo
em = ElectroMechModel(obj.electro, obj.mechano)
Ψem, ∂Ψem∂F, ∂Ψem∂E, ∂Ψem∂FF, ∂Ψem∂EF, ∂Ψem∂EE = em()

ηR(F) = α*(J(F) - 1.0)+Cv/γv
∂ηR∂J(F) = α
∂ηR∂F(F) = ∂ηR∂J(F)*H(F)
∂2ηR∂FF(F) = ×ᵢ⁴(∂ηR∂J(F) * F)
gd(θ) = g(θ,θr,γd)
∂gd(θ) = ∂g(θ,θr,γd)
∂∂gd(θ) = ∂∂g(θ,θr,γd)
gv(θ) = g(θ,θr,γv)
∂gv(θ) = ∂g(θ,θr,γv)
∂∂gv(θ) = ∂∂g(θ,θr,γv)

Ψ(F, E, θ, X...) = Ψem(F, E, X...)*(1.0+gd(θ)) - θr*gv(θ)*ηR(F)
J(F) = det(F)
H(F) = cof(F)

∂Ψ_∂F(F, E, θ, X...) = (1.0+gd(θ)) *∂Ψem∂F(F, E, X...) - θr*gv(θ)*∂ηR∂F(F)
∂Ψ_∂E(F, E, θ, X...) = (1.0+gd(θ)) *∂Ψem∂E(F, E, X...)
∂Ψ_∂θ(F, E, θ, X...) = ∂gd(θ) *Ψem(F, E, X...) - θr*∂gv(θ)*ηR(F)
ηR(F) = α*(J(F) - 1.0)+Cv/γv
∂ηR∂J(F) = α
∂ηR∂F(F) = ∂ηR∂J(F)*H(F)
∂2ηR∂FF(F) = ×ᵢ⁴(∂ηR∂J(F) * F)

∂2Ψ_∂2F(F, E, θ, X...) = (1.0+gd(θ)) *∂Ψem∂FF(F, E, X...) - θr*gv(θ)*∂2ηR∂FF(F)
∂2Ψ_∂2E(F, E, θ, X...) = (1.0+gd(θ)) *∂Ψem∂EE(F, E, X...)
∂2Ψ_∂2θ(F, E, θ, X...) = ∂∂gd(θ) *Ψem(F, E, X...) - θr*∂∂gv(θ)*ηR(F)
Ψ(F, E, θ, X...) = Ψem(F, E, X...)*(1.0+gd(θ)) - θr*gv(θ)*ηR(F)

∂ΨEF(F, E, θ, X...) = (1.0+gd(θ)) *∂Ψem∂EF(F, E, X...)
∂ΨFθ(F, E, θ, X...) = gd(θ) *∂Ψem∂F(F, E, X...) - θr*∂gv(θ)*∂ηR∂F(F)
∂ΨEθ(F, E, θ, X...) = ∂gd(θ) *Ψem∂E(F, E, X...)
∂Ψ∂F(F, E, θ, X...) = (1.0+gd(θ)) *∂Ψem∂F(F, E, X...) - θr*gv(θ)*∂ηR∂F(F)
∂Ψ∂E(F, E, θ, X...) = (1.0+gd(θ)) *∂Ψem∂E(F, E, X...)
∂Ψ∂θ(F, E, θ, X...) = ∂gd(θ) *Ψem(F, E, X...) - θr*∂gv(θ)*ηR(F)

return (Ψ, ∂Ψ_∂F, ∂Ψ_∂E, ∂Ψ_∂θ, ∂2Ψ_∂2F, ∂2Ψ_∂2E, ∂2Ψ_∂2θ, ∂ΨEF, ∂ΨFθ, ∂ΨEθ)
end
∂∂Ψ∂FF(F, E, θ, X...) = (1.0+gd(θ)) *∂Ψem∂FF(F, E, X...) - θr*gv(θ)*∂2ηR∂FF(F)
∂∂Ψ∂EE(F, E, θ, X...) = (1.0+gd(θ)) *∂Ψem∂EE(F, E, X...)
∂∂Ψ∂θθ(F, E, θ, X...) = ∂∂gd(θ) *Ψem(F, E, X...) - θr*∂∂gv(θ)*ηR(F)

∂∂Ψ∂EF(F, E, θ, X...) = (1.0+gd(θ)) *∂Ψem∂EF(F, E, X...)
∂∂Ψ∂Fθ(F, E, θ, X...) = ∂gd(θ) *∂Ψem∂F(F, E, X...) - θr*∂gv(θ)*∂ηR∂F(F)
∂∂Ψ∂Eθ(F, E, θ, X...) = ∂gd(θ) *∂Ψem∂E(F, E, X...)

return (Ψ, ∂Ψ∂F, ∂Ψ∂E, ∂Ψ∂θ, ∂∂Ψ∂FF, ∂∂Ψ∂EE, ∂∂Ψ∂θθ, ∂∂Ψ∂EF, ∂∂Ψ∂Fθ, ∂∂Ψ∂Eθ)
end

function update_time_step!(obj::ThermoElectroMech_Bonet, Δt::Float64)
Expand All @@ -160,11 +173,11 @@ function update_time_step!(obj::ThermoElectroMech_Bonet, Δt::Float64)
end

function Dissipation(obj::ThermoElectroMech_Bonet)
@unpack Cv,θr, α, κ, γv, γd = obj.thermo
@unpack Cv, θr, α, κ, γv, γd = obj.thermo
Dvis = Dissipation(obj.mechano)
gd(δθ) = 1/(γd+1) * (((δθ+θr)/θr)^(γd+1) -1)
∂gd(δθ) = (δθ+θr)^γd / θr^(γd+1)
D(F, E, δθ, X...) = (1 + gd(δθ)) * Dvis(F, X...)
∂D∂θ(F, E, δθ, X...) = ∂gd(δθ) * Dvis(F, X...)
gd(θ) = g(θ,θr,γd)
∂gd(θ) = ∂g(θ,θr,γd)
D(F, E, θ, X...) = (1 + gd(θ)) * Dvis(F, X...)
∂D∂θ(F, E, θ, X...) = ∂gd(θ) * Dvis(F, X...)
return(D, ∂D∂θ)
end
4 changes: 2 additions & 2 deletions src/WeakForms/ElectroMechanics.jl
Original file line number Diff line number Diff line change
Expand Up @@ -72,12 +72,12 @@ end
# Monolithic strategy
# -------------------

function residual(physicalmodel::ViscoElectricModel, kine::NTuple{2,KinematicModel}, (u, φ), (v, vφ), dΩ, Λ, un, A)
function residual(physicalmodel::ElectroMechModel{<:Electro,<:ViscoElastic}, kine::NTuple{2,KinematicModel}, (u, φ), (v, vφ), dΩ, Λ, un, A)
residual(physicalmodel, Mechano, kine, (u, φ), v, dΩ, Λ, un, A) +
residual(physicalmodel, Electro, kine, (u, φ), vφ, dΩ, Λ, un, A)
end

function jacobian(physicalmodel::ViscoElectricModel, kine::NTuple{2,KinematicModel}, (u, φ), (du, dφ), (v, vφ), dΩ, Λ, un, A)
function jacobian(physicalmodel::ElectroMechModel{<:Electro,<:ViscoElastic}, kine::NTuple{2,KinematicModel}, (u, φ), (du, dφ), (v, vφ), dΩ, Λ, un, A)
jacobian(physicalmodel, Mechano, kine,(u, φ), du, v, dΩ, Λ, un, A) +
jacobian(physicalmodel, Electro, kine,(u, φ), dφ, vφ, dΩ, Λ, un, A) +
jacobian(physicalmodel, ElectroMechano, kine,(u, φ), (du, dφ), (v, vφ), dΩ, Λ, un, A)
Expand Down
1 change: 0 additions & 1 deletion src/WeakForms/WeakForms.jl
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ module WeakForms
using Gridap
using HyperFEM.TensorAlgebra
using HyperFEM.PhysicalModels
using HyperFEM.PhysicalModels:ViscoElectricModel

export residual
export jacobian
Expand Down