@@ -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
9596end
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
109108end
110109
111110
112111function 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)))
115114end
0 commit comments