-
-
Notifications
You must be signed in to change notification settings - Fork 59
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
Describe the bug π
When default LU factorization fails, NonlinearSolve falls back to QR. However the behavior depends on the log level.
small systems (non blas)
- verbose=false -> silent switching
- verbose=true -> silent switching (used to be a warning per default)
- verbose=Detailed() -> warning about withcin
larger sytsems (blas)
- verbose=false -> silent switching
- verbose=true -> fails with blas LU singularity error
Expected behavior
Don't change auto-switching behavior when changing log-level.
Minimal Reproducible Example π
small system singular jacobian
function nonlin(du, u, p)
x, y = u
du[1] = x + y - 1 # equation 1
du[2] = 2*(x + y - 1) # redundant equation β causes singular Jacobian
end
u0 = [0.2, 0.55]
prob = NonlinearProblem(nonlin, u0)
solve(prob, verbose=false) # works
solve(prob, verbose=true) # works, used to warn
solve(prob, verbose=Detailed()) # warnsblas sized system with singular jacobian
function nonlin_blas(du, u, p)
f1 = sum(u) - 1
du[1] = f1
for i in 2:length(u)
du[i] = i * f1 # makes Jacobian rank-1 β LU fails at solve step
end
end
u0_blas = ones(17) .* 0.2 # initial state (nonsingular? doesn't matter: J is singular everywhere)
prob_blas = NonlinearProblem(nonlin_blas, u0_blas)
solve(prob_blas, verbose=false) # works
solve(prob_blas, verbose=true) # blas error
solve(prob_blas, verbose=Detailed()) # blas errorError & Stacktrace
β Error: BLAS/LAPACK dgetrf: Matrix is singular
β Details: U(3,3) is exactly zero. The factorization has been completed, but U is singular and division by U will produce infinity.
β Return code (info): 3
β matrix_size: (17, 17)
β rhs_type: Vector{Float64}
β rhs_size: (17,)
β memory_usage_MB: 0.0
β matrix_type: Matrix{Float64}
β element_type: Float64
β @ LinearSolve ~/.julia/packages/LinearSolve/ZgNCX/src/mkl.jl:267
ERROR: BLAS/LAPACK dgetrf: Matrix is singular
Details: U(3,3) is exactly zero. The factorization has been completed, but U is singular and division by U will produce infinity.
Return code (info): 3
matrix_size: (17, 17)
rhs_type: Vector{Float64}
rhs_size: (17,)
memory_usage_MB: 0.0
matrix_type: Matrix{Float64}
element_type: Float64
Stacktrace:
[1] emit_message(message::String, level::Base.CoreLogging.LogLevel, file::String, line::Int64, _module::Module)
@ SciMLLogging ~/.julia/packages/SciMLLogging/fDS7T/src/utils.jl:57
[2] macro expansion
@ ~/.julia/packages/SciMLLogging/fDS7T/src/utils.jl:123 [inlined]
[3] solve!(cache::LinearSolve.LinearCache{β¦}, alg::MKLLUFactorization; kwargs::@Kwargs{})
@ LinearSolve ~/.julia/packages/LinearSolve/ZgNCX/src/mkl.jl:267
[4] solve!
@ ~/.julia/packages/LinearSolve/ZgNCX/src/mkl.jl:239 [inlined]
[5] macro expansion
@ ~/.julia/packages/LinearSolve/ZgNCX/src/default.jl:514 [inlined]
[6] solve!(::LinearSolve.LinearCache{β¦}, ::LinearSolve.DefaultLinearSolver; assump::OperatorAssumptions{β¦}, kwargs::@Kwargs{})
@ LinearSolve ~/.julia/packages/LinearSolve/ZgNCX/src/default.jl:503
[7] solve!
@ ~/.julia/packages/LinearSolve/ZgNCX/src/default.jl:503 [inlined]
[8] #solve!#21
@ ~/.julia/packages/LinearSolve/ZgNCX/src/common.jl:441 [inlined]
[9] solve!
@ ~/.julia/packages/LinearSolve/ZgNCX/src/common.jl:440 [inlined]
[10] #_#1
@ ~/.julia/packages/NonlinearSolveBase/4j4KD/ext/NonlinearSolveBaseLinearSolveExt.jl:24 [inlined]
[11] LinearSolveJLCache
@ ~/.julia/packages/NonlinearSolveBase/4j4KD/ext/NonlinearSolveBaseLinearSolveExt.jl:14 [inlined]
[12] solve!(cache::NonlinearSolveBase.NewtonDescentCache{β¦}, J::Matrix{β¦}, fu::Vector{β¦}, u::Vector{β¦}, idx::Val{β¦}; skip_solve::Bool, new_jacobian::Bool, kwargs::@Kwargs{β¦})
@ NonlinearSolveBase ~/.julia/packages/NonlinearSolveBase/4j4KD/src/descent/newton.jl:119
[13] solve! (repeats 2 times)
@ ~/.julia/packages/NonlinearSolveBase/4j4KD/src/descent/newton.jl:94 [inlined]
[14] step!(cache::NonlinearSolveFirstOrder.GeneralizedFirstOrderAlgorithmCache{β¦}; recompute_jacobian::Nothing)
@ NonlinearSolveFirstOrder ~/.julia/packages/NonlinearSolveFirstOrder/inFag/src/solve.jl:266
[15] step!
@ ~/.julia/packages/NonlinearSolveFirstOrder/inFag/src/solve.jl:244 [inlined]
[16] #step!#180
@ ~/.julia/packages/NonlinearSolveBase/4j4KD/src/solve.jl:550 [inlined]
[17] step!
@ ~/.julia/packages/NonlinearSolveBase/4j4KD/src/solve.jl:544 [inlined]
[18] solve!(cache::NonlinearSolveFirstOrder.GeneralizedFirstOrderAlgorithmCache{β¦})
@ NonlinearSolveBase ~/.julia/packages/NonlinearSolveBase/4j4KD/src/solve.jl:278
[19] __solve(::NonlinearProblem{β¦}, ::GeneralizedFirstOrderAlgorithm{β¦}; kwargs::@Kwargs{β¦})
@ NonlinearSolveBase ~/.julia/packages/NonlinearSolveBase/4j4KD/src/solve.jl:264
[20] __solve
@ ~/.julia/packages/NonlinearSolveBase/4j4KD/src/solve.jl:261 [inlined]
[21] macro expansion
@ ~/.julia/packages/NonlinearSolveBase/4j4KD/src/solve.jl:469 [inlined]
[22] __generated_polysolve(::NonlinearProblem{β¦}, ::NonlinearSolvePolyAlgorithm{β¦}; stats::SciMLBase.NLStats, alias::SciMLBase.NonlinearAliasSpecifier, verbose::NonlinearVerbosity{β¦}, initializealg::NonlinearSolveBase.NonlinearSolveDefaultInit, kwargs::@Kwargs{β¦})
@ NonlinearSolveBase ~/.julia/packages/NonlinearSolveBase/4j4KD/src/solve.jl:414
[23] __generated_polysolve
@ ~/.julia/packages/NonlinearSolveBase/4j4KD/src/solve.jl:414 [inlined]
[24] #__solve#166
@ ~/.julia/packages/NonlinearSolveBase/4j4KD/src/solve.jl:387 [inlined]
[25] __solve
@ ~/.julia/packages/NonlinearSolveBase/4j4KD/src/solve.jl:384 [inlined]
[26] #__solve#16
@ ~/.julia/packages/NonlinearSolve/JTN4J/src/default.jl:27 [inlined]
[27] __solve
@ ~/.julia/packages/NonlinearSolve/JTN4J/src/default.jl:24 [inlined]
[28] #__solve#167
@ ~/.julia/packages/NonlinearSolveBase/4j4KD/src/solve.jl:398 [inlined]
[29] __solve
@ ~/.julia/packages/NonlinearSolveBase/4j4KD/src/solve.jl:390 [inlined]
[30] #solve_call#150
@ ~/.julia/packages/NonlinearSolveBase/4j4KD/src/solve.jl:162 [inlined]
[31] solve_call
@ ~/.julia/packages/NonlinearSolveBase/4j4KD/src/solve.jl:128 [inlined]
[32] #solve_up#149
@ ~/.julia/packages/NonlinearSolveBase/4j4KD/src/solve.jl:116 [inlined]
[33] solve_up
@ ~/.julia/packages/NonlinearSolveBase/4j4KD/src/solve.jl:109 [inlined]
[34] solve(::NonlinearProblem{β¦}; sensealg::Nothing, u0::Nothing, p::Nothing, wrap::Val{β¦}, verbose::Detailed, kwargs::@Kwargs{})
@ NonlinearSolveBase ~/.julia/packages/NonlinearSolveBase/4j4KD/src/solve.jl:87
[35] top-level scope
@ REPL[196]:1
[36] top-level scope
@ REPL:1
Some type information was truncated. Use `show(err)` to see complete types.Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working