Skip to content

Commit cdfa227

Browse files
committed
Add a note on the first value
1 parent 354e080 commit cdfa227

File tree

8 files changed

+25
-11
lines changed

8 files changed

+25
-11
lines changed

Diff for: docs/src/basics/Logging.md

+5
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ sol = solve(prob; trace_level = TraceAll(), store_trace = Val(true));
4949
sol.trace
5050
```
5151

52+
!!! note
53+
54+
For `iteration == 0` only the `norm(fu, Inf)` is guaranteed to be meaningful. The other
55+
values being meaningful are solver dependent.
56+
5257
## API
5358

5459
```@docs

Diff for: src/gaussnewton.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ function SciMLBase.__init(prob::NonlinearLeastSquaresProblem{uType, iip}, alg_::
109109
abstol, reltol, tc_cache_1 = init_termination_cache(abstol, reltol, fu1, u,
110110
termination_condition)
111111
_, _, tc_cache_2 = init_termination_cache(abstol, reltol, fu1, u, termination_condition)
112-
trace = init_nonlinearsolve_trace(alg, u, fu1, J, du; kwargs...)
112+
trace = init_nonlinearsolve_trace(alg, u, fu1, ApplyArray(__zero, J), du; kwargs...)
113113

114114
return GaussNewtonCache{iip}(f, alg, u, copy(u), fu1, fu2, zero(fu1), du, p, uf,
115115
linsolve, J, JᵀJ, Jᵀf, jac_cache, false, maxiters, internalnorm, ReturnCode.Default,

Diff for: src/levenberg.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ function SciMLBase.__init(prob::Union{NonlinearProblem{uType, iip},
221221
tc_cache_2 = nothing
222222
end
223223

224-
trace = init_nonlinearsolve_trace(alg, u, fu1, J, du; kwargs...)
224+
trace = init_nonlinearsolve_trace(alg, u, fu1, ApplyArray(__zero, J), du; kwargs...)
225225

226226
if _unwrap_val(linsolve_with_JᵀJ)
227227
mat_tmp = zero(JᵀJ)

Diff for: src/pseudotransient.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ function SciMLBase.__init(prob::NonlinearProblem{uType, iip}, alg_::PseudoTransi
9595

9696
abstol, reltol, tc_cache = init_termination_cache(abstol, reltol, fu1, u,
9797
termination_condition)
98-
trace = init_nonlinearsolve_trace(alg, u, fu1, J, du; kwargs...)
98+
trace = init_nonlinearsolve_trace(alg, u, fu1, ApplyArray(__zero, J), du; kwargs...)
9999

100100
return PseudoTransientCache{iip}(f, alg, u, copy(u), fu1, fu2, du, p, alpha, res_norm,
101101
uf, linsolve, J, jac_cache, false, maxiters, internalnorm, ReturnCode.Default,

Diff for: src/raphson.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ function SciMLBase.__init(prob::NonlinearProblem{uType, iip}, alg_::NewtonRaphso
8989
termination_condition)
9090

9191
ls_cache = init_linesearch_cache(alg.linesearch, f, u, p, fu1, Val(iip))
92-
trace = init_nonlinearsolve_trace(alg, u, fu1, J, du; kwargs...)
92+
trace = init_nonlinearsolve_trace(alg, u, fu1, ApplyArray(__zero, J), du; kwargs...)
9393

9494
return NewtonRaphsonCache{iip}(f, alg, u, copy(u), fu1, fu2, du, p, uf, linsolve, J,
9595
jac_cache, false, maxiters, internalnorm, ReturnCode.Default, abstol, reltol, prob,

Diff for: src/trace.jl

+8-6
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,9 @@ __copy(x) = x
146146
trace_level::Tr
147147
end
148148

149-
reset!(trace::NonlinearSolveTrace) = resize!(trace.history, 0)
149+
function reset!(trace::NonlinearSolveTrace)
150+
(trace.history !== nothing && resize!(trace.history, 0))
151+
end
150152

151153
function Base.show(io::IO, trace::NonlinearSolveTrace)
152154
for entry in trace.history
@@ -166,7 +168,7 @@ function init_nonlinearsolve_trace(alg, ::Val{show_trace},
166168
trace_level::AbstractNonlinearSolveTraceLevel, ::Val{store_trace}, u, fu, J,
167169
δu, ::Val{uses_jac_inverse}) where {show_trace, store_trace, uses_jac_inverse}
168170
if show_trace
169-
Base.printstyled("\nAlgorithm: "; italic = true)
171+
print("\nAlgorithm: ")
170172
Base.printstyled(alg, "\n\n"; color = :green, bold = true)
171173
end
172174
J_ = uses_jac_inverse ? (trace_level isa TraceMinimal ? J : inv(J)) : J
@@ -205,8 +207,8 @@ function update_trace!(trace::NonlinearSolveTrace{ShT, StT}, iter, u, fu, J, δu
205207
return trace
206208
end
207209

208-
show_now = ShT && (iter % trace.trace_level.print_frequency == 0)
209-
store_now = StT && (iter % trace.trace_level.store_frequency == 0)
210+
show_now = ShT && (iter % trace.trace_level.print_frequency == 1)
211+
store_now = StT && (iter % trace.trace_level.store_frequency == 1)
210212
(show_now || store_now) && (entry = __trace_entry(trace.trace_level, iter, u, fu, J,
211213
δu, α))
212214
store_now && push!(trace.history, entry)
@@ -226,8 +228,8 @@ function update_trace_with_invJ!(trace::NonlinearSolveTrace{ShT, StT}, iter, u,
226228
return trace
227229
end
228230

229-
show_now = ShT && (iter % trace.trace_level.print_frequency == 0)
230-
store_now = StT && (iter % trace.trace_level.store_frequency == 0)
231+
show_now = ShT && (iter % trace.trace_level.print_frequency == 1)
232+
store_now = StT && (iter % trace.trace_level.store_frequency == 1)
231233
if show_now || store_now
232234
J_ = trace.trace_level isa TraceMinimal ? J : inv(J)
233235
entry = __trace_entry(trace.trace_level, iter, u, fu, J_, δu, α)

Diff for: src/trustRegion.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ function SciMLBase.__init(prob::NonlinearProblem{uType, iip}, alg_::TrustRegion,
340340

341341
abstol, reltol, tc_cache = init_termination_cache(abstol, reltol, fu1, u,
342342
termination_condition)
343-
trace = init_nonlinearsolve_trace(alg, u, fu1, J, du; kwargs...)
343+
trace = init_nonlinearsolve_trace(alg, u, fu1, ApplyArray(__zero, J), du; kwargs...)
344344

345345
return TrustRegionCache{iip}(f, alg, u_prev, u, fu_prev, fu1, fu2, p, uf, linsolve, J,
346346
jac_cache, false, maxiters, internalnorm, ReturnCode.Default, abstol, reltol, prob,

Diff for: src/utils.jl

+7
Original file line numberDiff line numberDiff line change
@@ -354,3 +354,10 @@ end
354354

355355
# Define special concatenation for certain Array combinations
356356
@inline _vcat(x, y) = vcat(x, y)
357+
358+
__zero(x::AbstractArray) = zero(x)
359+
__zero(x) = x
360+
LazyArrays.applied_eltype(::typeof(__zero), x) = eltype(x)
361+
LazyArrays.applied_ndims(::typeof(__zero), x) = ndims(x)
362+
LazyArrays.applied_size(::typeof(__zero), x) = size(x)
363+
LazyArrays.applied_axes(::typeof(__zero), x) = axes(x)

0 commit comments

Comments
 (0)