diff --git a/lib/NonlinearSolveBase/ext/NonlinearSolveBaseLinearSolveExt.jl b/lib/NonlinearSolveBase/ext/NonlinearSolveBaseLinearSolveExt.jl index c6e88e3ab..820048de9 100644 --- a/lib/NonlinearSolveBase/ext/NonlinearSolveBaseLinearSolveExt.jl +++ b/lib/NonlinearSolveBase/ext/NonlinearSolveBaseLinearSolveExt.jl @@ -17,15 +17,11 @@ function (cache::LinearSolveJLCache)(; cache.stats.nsolve += 1 update_A!(cache, A, reuse_A_if_factorization) - b !== nothing && setproperty!(cache.lincache, :b, b) + b !== nothing && (cache.lincache.b = b) linu !== nothing && NonlinearSolveBase.set_lincache_u!(cache, linu) linres = solve!(cache.lincache) - if linres.retcode === ReturnCode.Failure - return LinearSolveResult(; linres.u, success = false) - else - return LinearSolveResult(; linres.u) - end + LinearSolveResult(linres.u, linres.retcode != ReturnCode.Failure) end function NonlinearSolveBase.needs_square_A(linsolve::SciMLLinearSolveAlgorithm, ::Any) diff --git a/lib/NonlinearSolveBase/src/linear_solve.jl b/lib/NonlinearSolveBase/src/linear_solve.jl index 592524ec3..05dcc8e54 100644 --- a/lib/NonlinearSolveBase/src/linear_solve.jl +++ b/lib/NonlinearSolveBase/src/linear_solve.jl @@ -1,6 +1,6 @@ -@kwdef @concrete struct LinearSolveResult +@concrete struct LinearSolveResult u - success::Bool = true + success::Bool end @concrete mutable struct LinearSolveJLCache <: AbstractLinearSolverCache @@ -93,7 +93,7 @@ function (cache::NativeJLLinearSolveCache)(; else res = cache.A \ cache.b end - return LinearSolveResult(; u = res) + return LinearSolveResult(res, true) end fix_incompatible_linsolve_arguments(A, b, u) = u @@ -106,7 +106,7 @@ function fix_incompatible_linsolve_arguments(A, b, u::SArray) return MArray(u) end -set_lincache_u!(cache, u) = setproperty!(cache.lincache, :u, u) +set_lincache_u!(cache, u) = cache.lincache.u = u function set_lincache_u!(cache, u::SArray) cache.lincache.u isa MArray && return set_lincache_u!(cache, MArray(u)) cache.lincache.u = u