Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions lib/NonlinearSolveBase/Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "NonlinearSolveBase"
uuid = "be0214bd-f91f-a760-ac4e-3421ce2b2da0"
authors = ["Avik Pal <avikpal@mit.edu> and contributors"]
version = "1.7.0"
version = "1.8.0"

[deps]
ADTypes = "47edcb42-4c32-4615-8424-f2b9edc5f35b"
Expand Down Expand Up @@ -68,7 +68,7 @@ MaybeInplace = "0.1.4"
Preferences = "1.4"
Printf = "1.10"
RecursiveArrayTools = "3"
SciMLBase = "2.69"
SciMLBase = "2.89"
SciMLJacobianOperators = "0.1.1"
SciMLOperators = "0.3.13, 0.4"
SparseArrays = "1.10"
Expand Down
5 changes: 4 additions & 1 deletion lib/NonlinearSolveBase/src/polyalg.jl
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,10 @@ end
InternalAPI.step!($(cache_syms[i]), args...; kwargs...)
$(cache_syms[i]).nsteps += 1
if !NonlinearSolveBase.not_terminated($(cache_syms[i]))
if SciMLBase.successful_retcode($(cache_syms[i]).retcode)
# If a NonlinearLeastSquaresProblem StalledSuccess, try the next
# solver to see if you get a lower residual
if SciMLBase.successful_retcode($(cache_syms[i]).retcode) &&
$(cache_syms[i]).retcode != ReturnCode.StalledSuccess
Comment on lines +165 to +166
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change
if SciMLBase.successful_retcode($(cache_syms[i]).retcode) &&
$(cache_syms[i]).retcode != ReturnCode.StalledSuccess
if SciMLBase.successful_retcode($(cache_syms[i]).retcode) &&
$(cache_syms[i]).retcode != ReturnCode.StalledSuccess

cache.best = $(i)
cache.force_stop = true
cache.retcode = $(cache_syms[i]).retcode
Expand Down
26 changes: 20 additions & 6 deletions lib/NonlinearSolveBase/src/termination_conditions.jl
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ const AbsNormModes = Union{
step_norm_trace
max_stalled_steps
u_diff_cache::uType
leastsq::Bool
end

get_abstol(cache::NonlinearTerminationModeCache) = cache.abstol
Expand All @@ -36,7 +37,7 @@ function update_u!!(cache::NonlinearTerminationModeCache, u)
end

function CommonSolve.init(
::AbstractNonlinearProblem, mode::AbstractNonlinearTerminationMode, du, u,
prob::AbstractNonlinearProblem, mode::AbstractNonlinearTerminationMode, du, u,
saved_value_prototype...; abstol = nothing, reltol = nothing, kwargs...
)
T = promote_type(eltype(du), eltype(u))
Expand Down Expand Up @@ -80,10 +81,12 @@ function CommonSolve.init(

length(saved_value_prototype) == 0 && (saved_value_prototype = nothing)

leastsq = typeof(prob) <: NonlinearLeastSquaresProblem

return NonlinearTerminationModeCache(
u_unaliased, ReturnCode.Default, abstol, reltol, best_value, mode,
initial_objective, objectives_trace, 0, saved_value_prototype,
u0_norm, step_norm_trace, max_stalled_steps, u_diff_cache
u0_norm, step_norm_trace, max_stalled_steps, u_diff_cache, leastsq
)
end

Expand Down Expand Up @@ -146,6 +149,7 @@ end
function (cache::NonlinearTerminationModeCache)(
mode::AbstractSafeNonlinearTerminationMode, du, u, uprev, abstol, reltol, args...
)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change

if mode isa AbsNormSafeTerminationMode || mode isa AbsNormSafeBestTerminationMode
objective = Utils.apply_norm(mode.internalnorm, du)
criteria = abstol
Expand Down Expand Up @@ -177,7 +181,7 @@ function (cache::NonlinearTerminationModeCache)(
end

# Main Termination Criteria
if objective ≤ criteria
if !cache.leastsq && objective ≤ criteria
cache.retcode = ReturnCode.Success
return true
end
Expand All @@ -195,7 +199,13 @@ function (cache::NonlinearTerminationModeCache)(
min_obj, max_obj = extrema(cache.objectives_trace)
end
if min_obj < mode.min_max_factor * max_obj
cache.retcode = ReturnCode.Stalled
if cache.leastsq
# If least squares, found a local minima thus success
cache.retcode = ReturnCode.StalledSuccess
else
# Not a success if f(x)>0 and residual too high
cache.retcode = ReturnCode.Stalled
end
return true
end
end
Expand All @@ -209,7 +219,7 @@ function (cache::NonlinearTerminationModeCache)(
end
du_norm = L2_NORM(cache.u_diff_cache)
cache.step_norm_trace[mod1(cache.nsteps, length(cache.step_norm_trace))] = du_norm
if cache.nsteps > mode.max_stalled_steps
if cache.nsteps > mode.max_stalled_steps || iszero(du_norm)
max_step_norm = maximum(cache.step_norm_trace)
if mode isa AbsNormSafeTerminationMode ||
mode isa AbsNormSafeBestTerminationMode
Expand All @@ -218,7 +228,11 @@ function (cache::NonlinearTerminationModeCache)(
stalled_step = max_step_norm ≤ reltol * (max_step_norm + cache.u0_norm)
end
if stalled_step
cache.retcode = ReturnCode.Stalled
if cache.leastsq
cache.retcode = ReturnCode.StalledSuccess
else
cache.retcode = ReturnCode.Stalled
end
return true
end
end
Expand Down
10 changes: 10 additions & 0 deletions test/core_tests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -427,3 +427,13 @@ end

@test !(solve(nlprob, NewtonRaphson()).alg.autodiff isa AutoPolyesterForwardDiff)
end

@testitem "NonlinearLeastSquares ReturnCode" tags=[:core] begin
f(u,p) = [1.0]
nlf = NonlinearFunction(f; resid_prototype=zeros(1))
Comment on lines +432 to +433
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change
f(u,p) = [1.0]
nlf = NonlinearFunction(f; resid_prototype=zeros(1))
f(u, p) = [1.0]
nlf = NonlinearFunction(f; resid_prototype = zeros(1))

prob = NonlinearLeastSquaresProblem(nlf, [1.0])
sol = solve(prob)
@test SciMLBase.successful_retcode(sol)
@test sol.retcode == ReturnCode.StalledSuccess
@test sol.stats.nf == 3
end
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[JuliaFormatter] reported by reviewdog 🐶

Suggested change
end
end

Loading