Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
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
6 changes: 5 additions & 1 deletion ext/NonlinearSolveFixedPointAccelerationExt.jl
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,13 @@ using SciMLBase: SciMLBase, NonlinearProblem, ReturnCode

function SciMLBase.__solve(
prob::NonlinearProblem, alg::FixedPointAccelerationJL, args...;
abstol = nothing, maxiters = 1000, alias_u0::Bool = false,
abstol = nothing, maxiters = 1000, alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false),
show_trace::Val = Val(false), termination_condition = nothing, kwargs...
)
if haskey(kwargs, :alias_u0)
alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0])
end
alias_u0 = alias.alias_u0
NonlinearSolveBase.assert_extension_supported_termination_condition(
termination_condition, alg
)
Expand Down
6 changes: 5 additions & 1 deletion ext/NonlinearSolveNLSolversExt.jl
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,13 @@ const DI = DifferentiationInterface

function SciMLBase.__solve(
prob::NonlinearProblem, alg::NLSolversJL, args...;
abstol = nothing, reltol = nothing, maxiters = 1000, alias_u0::Bool = false,
abstol = nothing, reltol = nothing, maxiters = 1000, alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false),
termination_condition = nothing, kwargs...
)
if haskey(kwargs, :alias_u0)
alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0])
end
alias_u0 = alias.alias_u0
NonlinearSolveBase.assert_extension_supported_termination_condition(
termination_condition, alg
)
Expand Down
6 changes: 5 additions & 1 deletion ext/NonlinearSolveNLsolveExt.jl
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,14 @@ using SciMLBase: SciMLBase, NonlinearProblem, ReturnCode

function SciMLBase.__solve(
prob::NonlinearProblem, alg::NLsolveJL, args...;
abstol = nothing, maxiters = 1000, alias_u0::Bool = false,
abstol = nothing, maxiters = 1000, alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false),
termination_condition = nothing, trace_level = TraceMinimal(),
store_trace::Val = Val(false), show_trace::Val = Val(false), kwargs...
)
if haskey(kwargs, :alias_u0)
alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0])
end
alias_u0 = alias.alias_u0
NonlinearSolveBase.assert_extension_supported_termination_condition(
termination_condition, alg
)
Expand Down
6 changes: 5 additions & 1 deletion ext/NonlinearSolvePETScExt.jl
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,13 @@ using SparseArrays: AbstractSparseMatrix
function SciMLBase.__solve(
prob::NonlinearProblem, alg::PETScSNES, args...;
abstol = nothing, reltol = nothing,
maxiters = 1000, alias_u0::Bool = false, termination_condition = nothing,
maxiters = 1000, alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false), termination_condition = nothing,
show_trace::Val = Val(false), kwargs...
)
if haskey(kwargs, :alias_u0)
alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0])
end
alias_u0 = alias.alias_u0
# XXX: https://petsc.org/release/manualpages/SNES/SNESSetConvergenceTest/
NonlinearSolveBase.assert_extension_supported_termination_condition(
termination_condition, alg; abs_norm_supported = false
Expand Down
6 changes: 5 additions & 1 deletion ext/NonlinearSolveSIAMFANLEquationsExt.jl
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,13 @@ end

function SciMLBase.__solve(
prob::NonlinearProblem, alg::SIAMFANLEquationsJL, args...;
abstol = nothing, reltol = nothing, alias_u0::Bool = false, maxiters = 1000,
abstol = nothing, reltol = nothing, alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false), maxiters = 1000,
termination_condition = nothing, show_trace = Val(false), kwargs...
)
if haskey(kwargs, :alias_u0)
alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0])
end
alias_u0 = alias.alias_u0
NonlinearSolveBase.assert_extension_supported_termination_condition(
termination_condition, alg
)
Expand Down
6 changes: 5 additions & 1 deletion ext/NonlinearSolveSpeedMappingExt.jl
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,14 @@ using SciMLBase: SciMLBase, NonlinearProblem, ReturnCode

function SciMLBase.__solve(
prob::NonlinearProblem, alg::SpeedMappingJL, args...;
abstol = nothing, maxiters = 1000, alias_u0::Bool = false,
abstol = nothing, maxiters = 1000, alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false),
maxtime = nothing, store_trace::Val = Val(false),
termination_condition = nothing, kwargs...
)
if haskey(kwargs, :alias_u0)
alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0])
end
alias_u0 = alias.alias_u0
NonlinearSolveBase.assert_extension_supported_termination_condition(
termination_condition, alg
)
Expand Down
8 changes: 6 additions & 2 deletions lib/NonlinearSolveBase/src/polyalg.jl
Original file line number Diff line number Diff line change
Expand Up @@ -117,9 +117,13 @@ end
function SciMLBase.__init(
prob::AbstractNonlinearProblem, alg::NonlinearSolvePolyAlgorithm, args...;
stats = NLStats(0, 0, 0, 0, 0), maxtime = nothing, maxiters = 1000,
internalnorm::IN = L2_NORM, alias_u0 = false, verbose = true,
internalnorm::IN = L2_NORM, alias = NonlinearAliasSpecifier(alias_u0 = false), verbose = true,
initializealg = NonlinearSolveDefaultInit(), kwargs...
) where {IN}
if haskey(kwargs, :alias_u0)
alias = NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0])
end
alias_u0 = alias.alias_u0
if alias_u0 && !ArrayInterface.ismutable(prob.u0)
verbose && @warn "`alias_u0` has been set to `true`, but `u0` is \
immutable (checked using `ArrayInterface.ismutable`)."
Expand All @@ -135,7 +139,7 @@ function SciMLBase.__init(
map(alg.algs) do solver
SciMLBase.__init(
prob, solver, args...;
stats, maxtime, internalnorm, alias_u0, verbose,
stats, maxtime, internalnorm, alias, verbose,
initializealg = SciMLBase.NoInit(), kwargs...
)
end,
Expand Down
59 changes: 36 additions & 23 deletions lib/NonlinearSolveBase/src/solve.jl
Original file line number Diff line number Diff line change
Expand Up @@ -50,30 +50,24 @@ function solve(prob::AbstractNonlinearProblem, args...; sensealg = nothing,
sensealg = prob.kwargs[:sensealg]
end

if haskey(prob.kwargs, :alias_u0)
@warn "The `alias_u0` keyword argument is deprecated. Please use a NonlinearAliasSpecifier, e.g. `alias = NonlinearAliasSpecifier(alias_u0 = true)`."
alias_spec = NonlinearAliasSpecifier(alias_u0 = prob.kwargs[:alias_u0])
alias_spec = if haskey(kwargs, :alias) && kwargs[:alias] isa NonlinearAliasSpecifier
kwargs[:alias]
elseif haskey(prob.kwargs, :alias) && prob.kwargs[:alias] isa NonlinearAliasSpecifier
prob.kwargs[:alias]
elseif haskey(kwargs, :alias) && kwargs[:alias] isa Bool
NonlinearAliasSpecifier(alias = kwargs[:alias])
elseif haskey(prob.kwargs, :alias) && prob.kwargs[:alias] isa Bool
NonlinearAliasSpecifier(alias = prob.kwargs[:alias])
elseif haskey(kwargs, :alias_u0)
@warn "The `alias_u0` keyword argument is deprecated. Please use a NonlinearAliasSpecifier, e.g. `alias = NonlinearAliasSpecifier(alias_u0 = true)`."
alias_spec = NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0])
end

if haskey(prob.kwargs, :alias) && prob.kwargs[:alias] isa Bool
alias_spec = NonlinearAliasSpecifier(alias = prob.kwargs[:alias])
elseif haskey(kwargs, :alias) && kwargs[:alias] isa Bool
alias_spec = NonlinearAliasSpecifier(alias = kwargs[:alias])
end

if haskey(prob.kwargs, :alias) && prob.kwargs[:alias] isa NonlinearAliasSpecifier
alias_spec = prob.kwargs[:alias]
elseif haskey(kwargs, :alias) && kwargs[:alias] isa NonlinearAliasSpecifier
alias_spec = kwargs[:alias]
NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0])
elseif haskey(prob.kwargs, :alias_u0)
@warn "The `alias_u0` keyword argument is deprecated. Please use a NonlinearAliasSpecifier, e.g. `alias = NonlinearAliasSpecifier(alias_u0 = true)`."
NonlinearAliasSpecifier(alias_u0 = prob.kwargs[:alias_u0])
else
alias_spec = NonlinearAliasSpecifier(alias_u0 = false)
NonlinearAliasSpecifier(alias_u0 = false)
end

alias_u0 = alias_spec.alias_u0

u0 = u0 !== nothing ? u0 : prob.u0
p = p !== nothing ? p : prob.p

Expand All @@ -83,7 +77,7 @@ function solve(prob::AbstractNonlinearProblem, args...; sensealg = nothing,
u0,
p,
args...;
alias_u0 = alias_u0,
alias = alias_spec,
originator = SciMLBase.ChainRulesOriginator(),
kwargs...))
else
Expand All @@ -92,7 +86,7 @@ function solve(prob::AbstractNonlinearProblem, args...; sensealg = nothing,
u0,
p,
args...;
alias_u0 = alias_u0,
alias = alias_spec,
originator = SciMLBase.ChainRulesOriginator(),
kwargs...)
end
Expand Down Expand Up @@ -170,10 +164,28 @@ function init(
sensealg = prob.kwargs[:sensealg]
end

alias_spec = if haskey(kwargs, :alias) && kwargs[:alias] isa NonlinearAliasSpecifier
kwargs[:alias]
elseif haskey(prob.kwargs, :alias) && prob.kwargs[:alias] isa NonlinearAliasSpecifier
prob.kwargs[:alias]
elseif haskey(kwargs, :alias) && kwargs[:alias] isa Bool
NonlinearAliasSpecifier(alias = kwargs[:alias])
elseif haskey(prob.kwargs, :alias) && prob.kwargs[:alias] isa Bool
NonlinearAliasSpecifier(alias = prob.kwargs[:alias])
elseif haskey(kwargs, :alias_u0)
@warn "The `alias_u0` keyword argument is deprecated. Please use a NonlinearAliasSpecifier, e.g. `alias = NonlinearAliasSpecifier(alias_u0 = true)`."
NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0])
elseif haskey(prob.kwargs, :alias_u0)
@warn "The `alias_u0` keyword argument is deprecated. Please use a NonlinearAliasSpecifier, e.g. `alias = NonlinearAliasSpecifier(alias_u0 = true)`."
NonlinearAliasSpecifier(alias_u0 = prob.kwargs[:alias_u0])
else
NonlinearAliasSpecifier(alias_u0 = false)
end

u0 = u0 !== nothing ? u0 : prob.u0
p = p !== nothing ? p : prob.p

init_up(prob, sensealg, u0, p, args...; kwargs...)
init_up(prob, sensealg, u0, p, args...; alias = alias_spec, kwargs...)
end

function init_up(prob::AbstractNonlinearProblem,
Expand Down Expand Up @@ -375,13 +387,14 @@ end

@generated function __generated_polysolve(
prob::AbstractNonlinearProblem, alg::NonlinearSolvePolyAlgorithm{Val{N}}, args...;
stats = NLStats(0, 0, 0, 0, 0), alias_u0 = false, verbose = true,
stats = NLStats(0, 0, 0, 0, 0), alias = NonlinearAliasSpecifier(alias_u0 = false), verbose = true,
initializealg = NonlinearSolveDefaultInit(), kwargs...
) where {N}
sol_syms = [gensym("sol") for _ in 1:N]
prob_syms = [gensym("prob") for _ in 1:N]
u_result_syms = [gensym("u_result") for _ in 1:N]
calls = [quote
alias_u0 = alias.alias_u0
current = alg.start_index
if alias_u0 && !ArrayInterface.ismutable(prob.u0)
verbose && @warn "`alias_u0` has been set to `true`, but `u0` is \
Expand Down
6 changes: 5 additions & 1 deletion lib/NonlinearSolveFirstOrder/src/solve.jl
Original file line number Diff line number Diff line change
Expand Up @@ -127,11 +127,15 @@ NonlinearSolveBase.@internal_caches(GeneralizedFirstOrderAlgorithmCache,

function SciMLBase.__init(
prob::AbstractNonlinearProblem, alg::GeneralizedFirstOrderAlgorithm, args...;
stats = NLStats(0, 0, 0, 0, 0), alias_u0 = false, maxiters = 1000,
stats = NLStats(0, 0, 0, 0, 0), alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false), maxiters = 1000,
abstol = nothing, reltol = nothing, maxtime = nothing,
termination_condition = nothing, internalnorm::IN = L2_NORM,
linsolve_kwargs = (;), initializealg = NonlinearSolveBase.NonlinearSolveDefaultInit(), kwargs...
) where {IN}
if haskey(kwargs, :alias_u0)
alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0])
end
alias_u0 = alias.alias_u0
@set! alg.autodiff = NonlinearSolveBase.select_jacobian_autodiff(prob, alg.autodiff)
provided_jvp_autodiff = alg.jvp_autodiff !== nothing
@set! alg.jvp_autodiff = if !provided_jvp_autodiff && alg.autodiff !== nothing &&
Expand Down
6 changes: 5 additions & 1 deletion lib/NonlinearSolveQuasiNewton/src/solve.jl
Original file line number Diff line number Diff line change
Expand Up @@ -145,12 +145,16 @@ NonlinearSolveBase.@internal_caches(QuasiNewtonCache,

function SciMLBase.__init(
prob::AbstractNonlinearProblem, alg::QuasiNewtonAlgorithm, args...;
stats = NLStats(0, 0, 0, 0, 0), alias_u0 = false, maxtime = nothing,
stats = NLStats(0, 0, 0, 0, 0), alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false), maxtime = nothing,
maxiters = 1000, abstol = nothing, reltol = nothing,
linsolve_kwargs = (;), termination_condition = nothing,
internalnorm::F = L2_NORM, initializealg = NonlinearSolveBase.NonlinearSolveDefaultInit(),
kwargs...
) where {F}
if haskey(kwargs, :alias_u0)
alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0])
end
alias_u0 = alias.alias_u0
timer = get_timer_output()
@static_timeit timer "cache construction" begin
u = Utils.maybe_unaliased(prob.u0, alias_u0)
Expand Down
6 changes: 5 additions & 1 deletion lib/NonlinearSolveSpectralMethods/src/solve.jl
Original file line number Diff line number Diff line change
Expand Up @@ -122,10 +122,14 @@ NonlinearSolveBase.@internal_caches GeneralizedDFSaneCache :linesearch_cache

function SciMLBase.__init(
prob::AbstractNonlinearProblem, alg::GeneralizedDFSane, args...;
stats = NLStats(0, 0, 0, 0, 0), alias_u0 = false, maxiters = 1000,
stats = NLStats(0, 0, 0, 0, 0), alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false), maxiters = 1000,
abstol = nothing, reltol = nothing, termination_condition = nothing,
maxtime = nothing, initializealg = NonlinearSolveBase.NonlinearSolveDefaultInit(), kwargs...
)
if haskey(kwargs, :alias_u0)
alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0])
end
alias_u0 = alias.alias_u0
timer = get_timer_output()

@static_timeit timer "cache construction" begin
Expand Down
1 change: 0 additions & 1 deletion lib/SimpleNonlinearSolve/src/SimpleNonlinearSolve.jl
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ using NonlinearSolveBase: NonlinearSolveBase, ImmutableNonlinearProblem, L2_NORM
AbstractNonlinearSolveAlgorithm
using SciMLBase: SciMLBase, NonlinearFunction, NonlinearProblem,
NonlinearLeastSquaresProblem, ReturnCode, remake

using LinearAlgebra: LinearAlgebra, dot

using StaticArraysCore: StaticArray, SArray, SVector, MArray
Expand Down
6 changes: 5 additions & 1 deletion lib/SimpleNonlinearSolve/src/dfsane.jl
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,13 @@ end

function SciMLBase.__solve(
prob::ImmutableNonlinearProblem, alg::SimpleDFSane, args...;
abstol = nothing, reltol = nothing, maxiters = 1000, alias_u0 = false,
abstol = nothing, reltol = nothing, maxiters = 1000, alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false),
termination_condition = nothing, kwargs...
)
if haskey(kwargs, :alias_u0)
alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0])
end
alias_u0 = alias.alias_u0
x = NLBUtils.maybe_unaliased(prob.u0, alias_u0)
fx = NLBUtils.evaluate_f(prob, x)
T = promote_type(eltype(fx), eltype(x))
Expand Down
6 changes: 5 additions & 1 deletion lib/SimpleNonlinearSolve/src/halley.jl
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,12 @@ end
function SciMLBase.__solve(
prob::ImmutableNonlinearProblem, alg::SimpleHalley, args...;
abstol = nothing, reltol = nothing, maxiters = 1000,
alias_u0 = false, termination_condition = nothing, kwargs...
alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false), termination_condition = nothing, kwargs...
)
if haskey(kwargs, :alias_u0)
alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0])
end
alias_u0 = alias.alias_u0
autodiff = alg.autodiff
x = NLBUtils.maybe_unaliased(prob.u0, alias_u0)
fx = NLBUtils.evaluate_f(prob, x)
Expand Down
6 changes: 5 additions & 1 deletion lib/SimpleNonlinearSolve/src/lbroyden.jl
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,12 @@ end
@views function internal_generic_solve(
prob::ImmutableNonlinearProblem, alg::SimpleLimitedMemoryBroyden,
args...; abstol = nothing, reltol = nothing, maxiters = 1000,
alias_u0 = false, termination_condition = nothing, kwargs...
alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false), termination_condition = nothing, kwargs...
)
if haskey(kwargs, :alias_u0)
alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0])
end
alias_u0 = alias.alias_u0
x = NLBUtils.maybe_unaliased(prob.u0, alias_u0)
η = min(NLBUtils.unwrap_val(alg.threshold), maxiters)

Expand Down
6 changes: 5 additions & 1 deletion lib/SimpleNonlinearSolve/src/raphson.jl
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,12 @@ function SciMLBase.__solve(
prob::Union{ImmutableNonlinearProblem, NonlinearLeastSquaresProblem},
alg::SimpleNewtonRaphson, args...;
abstol = nothing, reltol = nothing, maxiters = 1000,
alias_u0 = false, termination_condition = nothing, kwargs...
alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false), termination_condition = nothing, kwargs...
)
if haskey(kwargs, :alias_u0)
alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0])
end
alias_u0 = alias.alias_u0
autodiff = alg.autodiff
x = NLBUtils.maybe_unaliased(prob.u0, alias_u0)
fx = NLBUtils.evaluate_f(prob, x)
Expand Down
6 changes: 5 additions & 1 deletion lib/SimpleNonlinearSolve/src/trust_region.jl
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,12 @@ function SciMLBase.__solve(
prob::Union{ImmutableNonlinearProblem, NonlinearLeastSquaresProblem},
alg::SimpleTrustRegion, args...;
abstol = nothing, reltol = nothing, maxiters = 1000,
alias_u0 = false, termination_condition = nothing, kwargs...
alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = false), termination_condition = nothing, kwargs...
)
if haskey(kwargs, :alias_u0)
alias = SciMLBase.NonlinearAliasSpecifier(alias_u0 = kwargs[:alias_u0])
end
alias_u0 = alias.alias_u0
x = NLBUtils.maybe_unaliased(prob.u0, alias_u0)
T = eltype(x)
Δₘₐₓ = T(alg.max_trust_radius)
Expand Down
Loading