@@ -35,7 +35,8 @@ function NonlinearSolveTraceEntry(iteration, fu, δu)
35
35
end
36
36
37
37
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 ,
39
40
nothing , nothing , nothing )
40
41
end
41
42
@@ -79,34 +80,39 @@ function __init_trace_history(::Val{show_trace}, ::Val{trace_level}, ::Val{store
79
80
return nothing
80
81
end
81
82
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}
86
93
throw (ArgumentError (" ::Val{trace_level} == ::Val{$(T) } is not supported. \
87
94
Possible values are `Val{1}()`/`Val{2}()`/`Val{3}()`." ))
88
95
end
89
96
90
97
function update_trace! (trace:: NonlinearSolveTrace{ShT, TrL, StT} , iter, u, fu, J,
91
- δu) where {ShT, TrL, StT}
98
+ δu, α ) where {ShT, TrL, StT}
92
99
! 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, α )
94
101
StT && push! (trace. history, entry)
95
102
ShT && show (entry)
96
103
return trace
97
104
end
98
105
99
106
# Needed for Algorithms which directly use `inv(J)` instead of `J`
100
107
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}
102
109
! StT && ! ShT && return nothing
103
110
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, α )
105
112
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, α )
107
114
end
108
115
StT && push! (trace. history, entry)
109
116
ShT && show (entry)
110
117
return trace
111
118
end
112
-
0 commit comments