Skip to content

Commit be7b44e

Browse files
committed
Account for linesearch parameter
1 parent 8134a83 commit be7b44e

File tree

2 files changed

+19
-13
lines changed

2 files changed

+19
-13
lines changed

src/raphson.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ function perform_step!(cache::NewtonRaphsonCache{true})
110110
_axpy!(-α, du, u)
111111
f(cache.fu1, u, p)
112112

113-
update_trace!(cache.trace, cache.stats.nsteps + 1, u, cache.fu1, J, du)
113+
update_trace!(cache.trace, cache.stats.nsteps + 1, u, cache.fu1, J, du, α)
114114

115115
check_and_update!(cache, cache.fu1, cache.u, cache.u_prev)
116116

@@ -141,7 +141,7 @@ function perform_step!(cache::NewtonRaphsonCache{false})
141141
cache.fu1 = f(cache.u, p)
142142

143143
update_trace!(cache.trace, cache.stats.nsteps + 1, cache.u, cache.fu1, cache.J,
144-
cache.du)
144+
cache.du, α)
145145

146146
check_and_update!(cache, cache.fu1, cache.u, cache.u_prev)
147147

src/trace.jl

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ function NonlinearSolveTraceEntry(iteration, fu, δu)
3535
end
3636

3737
function NonlinearSolveTraceEntry(iteration, fu, δu, J)
38-
return NonlinearSolveTraceEntry(iteration, norm(fu, Inf), norm(δu, 2), __cond(J), nothing,
38+
return NonlinearSolveTraceEntry(iteration, norm(fu, Inf), norm(δu, 2), __cond(J),
39+
nothing,
3940
nothing, nothing, nothing)
4041
end
4142

@@ -79,34 +80,39 @@ function __init_trace_history(::Val{show_trace}, ::Val{trace_level}, ::Val{store
7980
return nothing
8081
end
8182

82-
__trace_entry(::Val{1}, iter, u, fu, J, δu) = NonlinearSolveTraceEntry(iter, fu, δu)
83-
__trace_entry(::Val{2}, iter, u, fu, J, δu) = NonlinearSolveTraceEntry(iter, fu, δu, J)
84-
__trace_entry(::Val{3}, iter, u, fu, J, δu) = NonlinearSolveTraceEntry(iter, fu, δu, J, u)
85-
function __trace_entry(::Val{T}, iter, u, fu, J, δu) where {T}
83+
function __trace_entry(::Val{1}, iter, u, fu, J, δu, α = 1)
84+
NonlinearSolveTraceEntry(iter, fu, δu .* α)
85+
end
86+
function __trace_entry(::Val{2}, iter, u, fu, J, δu, α = 1)
87+
NonlinearSolveTraceEntry(iter, fu, δu .* α, J)
88+
end
89+
function __trace_entry(::Val{3}, iter, u, fu, J, δu, α = 1)
90+
NonlinearSolveTraceEntry(iter, fu, δu .* α, J, u)
91+
end
92+
function __trace_entry(::Val{T}, iter, u, fu, J, δu, α = 1) where {T}
8693
throw(ArgumentError("::Val{trace_level} == ::Val{$(T)} is not supported. \
8794
Possible values are `Val{1}()`/`Val{2}()`/`Val{3}()`."))
8895
end
8996

9097
function update_trace!(trace::NonlinearSolveTrace{ShT, TrL, StT}, iter, u, fu, J,
91-
δu) where {ShT, TrL, StT}
98+
δu, α) where {ShT, TrL, StT}
9299
!StT && !ShT && return nothing
93-
entry = __trace_entry(Val{TrL}(), iter, u, fu, J, δu)
100+
entry = __trace_entry(Val{TrL}(), iter, u, fu, J, δu, α)
94101
StT && push!(trace.history, entry)
95102
ShT && show(entry)
96103
return trace
97104
end
98105

99106
# Needed for Algorithms which directly use `inv(J)` instead of `J`
100107
function update_trace_with_invJ!(trace::NonlinearSolveTrace{ShT, TrL, StT}, iter, u, fu, J,
101-
δu) where {ShT, TrL, StT}
108+
δu, α) where {ShT, TrL, StT}
102109
!StT && !ShT && return nothing
103110
if TrL == 1
104-
entry = __trace_entry(Val{1}(), iter, u, fu, J, δu)
111+
entry = __trace_entry(Val{1}(), iter, u, fu, J, δu, α)
105112
else
106-
entry = __trace_entry(Val{TrL}(), iter, u, fu, inv(J), δu)
113+
entry = __trace_entry(Val{TrL}(), iter, u, fu, inv(J), δu, α)
107114
end
108115
StT && push!(trace.history, entry)
109116
ShT && show(entry)
110117
return trace
111118
end
112-

0 commit comments

Comments
 (0)