diff --git a/ext/LinearSolveSparseArraysExt.jl b/ext/LinearSolveSparseArraysExt.jl index 300623760..70f17047d 100644 --- a/ext/LinearSolveSparseArraysExt.jl +++ b/ext/LinearSolveSparseArraysExt.jl @@ -201,7 +201,7 @@ function SciMLBase.solve!( cacheval = LinearSolve.@get_cacheval(cache, :UMFPACKFactorization) if alg.reuse_symbolic # Caches the symbolic factorization: https://github.com/JuliaLang/julia/pull/33738 - if length(cacheval.nzval) != length(A.nzval) || alg.check_pattern && pattern_changed(cacheval, A) + if length(cacheval.nzval) != length(nonzeros(A)) || alg.check_pattern && pattern_changed(cacheval, A) fact = lu( SparseMatrixCSC(size(A)..., getcolptr(A), rowvals(A), nonzeros(A)), @@ -331,7 +331,7 @@ function SciMLBase.solve!(cache::LinearSolve.LinearCache, alg::KLUFactorization; if cache.isfresh cacheval = LinearSolve.@get_cacheval(cache, :KLUFactorization) if alg.reuse_symbolic - if length(cacheval.nzval) != length(A.nzval) || alg.check_pattern && pattern_changed(cacheval, A) + if length(cacheval.nzval) != length(nonzeros(A)) || alg.check_pattern && pattern_changed(cacheval, A) fact = KLU.klu( SparseMatrixCSC(size(A)..., getcolptr(A), rowvals(A), nonzeros(A)), diff --git a/test/basictests.jl b/test/basictests.jl index 51b0ed77d..0a3dfb15c 100644 --- a/test/basictests.jl +++ b/test/basictests.jl @@ -782,6 +782,25 @@ end reinit!(cache; A = B1, b = b1) u = solve!(cache) @test norm(u - u0, Inf) < 1.0e-8 + + pr = LinearProblem(B, b) + solver = UMFPACKFactorization() + cache = init(pr, solver) + u = solve!(cache) + @test norm(u - u0, Inf) < 1.0e-8 + reinit!(cache; A = B1, b = b1) + u = solve!(cache) + @test norm(u - u0, Inf) < 1.0e-8 + + pr = LinearProblem(B, b) + solver = KLUFactorization() + cache = init(pr, solver) + u = solve!(cache) + @test norm(u - u0, Inf) < 1.0e-8 + reinit!(cache; A = B1, b = b1) + u = solve!(cache) + @test norm(u - u0, Inf) < 1.0e-8 + end @testset "ParallelSolves" begin