Skip to content

Commit 2375501

Browse files
authored
Merge pull request #126 from MultiSimOLab/optinjectivity
Parameterizes injectivity scaling factor
2 parents 10635fa + 50f137b commit 2375501

1 file changed

Lines changed: 7 additions & 8 deletions

File tree

src/Solvers/LineSearches.jl

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -62,16 +62,17 @@ struct Injectivity_Preserving_LS{A} <: AbstractLineSearch
6262
αmin::Float64
6363
ρ::Float64
6464
c::Float64
65+
β::Float64
6566
caches::A
66-
function Injectivity_Preserving_LS::CellState, U, V; maxiter::Int64=50, αmin::Float64=1e-16, ρ::Float64=0.5, c::Float64=0.95)
67+
function Injectivity_Preserving_LS::CellState, U, V; maxiter::Int64=50, αmin::Float64=1e-16, ρ::Float64=0.5, c::Float64=0.95, β::Float64=0.95)
6768
caches = (U, V)
68-
new{typeof(caches)}(α, maxiter, αmin, ρ, c, caches)
69+
new{typeof(caches)}(α, maxiter, αmin, ρ, c, β, caches)
6970
end
7071

7172

7273
function (obj::Injectivity_Preserving_LS)(x::AbstractVector, dx::AbstractVector, b::AbstractVector, op::NonlinearOperator)
7374

74-
_, maxiter, αmin, ρ, c = obj.α, obj.maxiter, obj.αmin, obj.ρ, obj.c
75+
_, maxiter, αmin, ρ, c= obj.α, obj.maxiter, obj.αmin, obj.ρ, obj.c
7576
#update cell state
7677
U, V = obj.caches
7778
xh = FEFunction(U, x)
@@ -94,22 +95,20 @@ struct Injectivity_Preserving_LS{A} <: AbstractLineSearch
9495

9596
end
9697

97-
98-
99-
function InjectivityCheck(α, ∇u, ∇du)
98+
function InjectivityCheck(α, ∇u, ∇du, β)
10099
ε = 1e-6
101100
F = ∇u + one(∇u)
102101
J = det(F)
103102
H = J * inv(F)'
104103
# if det(F+∇du) < 0.2
105104
# @show det(F), det(F+∇du)
106105
# end
107-
return true, min(0.95*abs(( -J) / (det(∇du) + tr(H' * ∇du) )), 1.0)
106+
return true, min(β*abs(( -J) / (det(∇du) + tr(H' * ∇du) )), 1.0)
108107

109108
end
110109

111110

112111
function update_cellstate!(obj::Injectivity_Preserving_LS, xh, dxh)
113-
update_state!(InjectivityCheck, obj.α, (xh)', (dxh)')
112+
update_state!(InjectivityCheck, obj.α, (xh)', (dxh)', obj.β)
114113
return minimum(minimum((obj.α.values)))
115114
end

0 commit comments

Comments
 (0)