Skip to content

Commit 9cd45c6

Browse files
Fix UMFPACK for zero init safety
1 parent 6dd7023 commit 9cd45c6

File tree

3 files changed

+28
-0
lines changed

3 files changed

+28
-0
lines changed

src/factorization.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ end
7878
function init_cacheval(alg::UMFPACKFactorization, A, b, u, Pl, Pr, maxiters, abstol, reltol,
7979
verbose)
8080
A = convert(AbstractMatrix, A)
81+
#=
8182
zerobased = SparseArrays.getcolptr(A)[1] == 0
8283
res = SuiteSparse.UMFPACK.UmfpackLU(C_NULL, C_NULL, size(A, 1), size(A, 2),
8384
zerobased ? copy(SparseArrays.getcolptr(A)) :
@@ -86,6 +87,9 @@ function init_cacheval(alg::UMFPACKFactorization, A, b, u, Pl, Pr, maxiters, abs
8687
SuiteSparse.decrement(rowvals(A)),
8788
copy(nonzeros(A)), 0)
8889
finalizer(SuiteSparse.UMFPACK.umfpack_free_symbolic, res)
90+
=#
91+
res = lu(A; check = false)
92+
@assert res isa SuiteSparse.UMFPACK.UmfpackLU
8993
res
9094
end
9195

test/runtests.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ end
2020

2121
if GROUP == "All" || GROUP == "Core"
2222
@time @safetestset "Basic Tests" begin include("basictests.jl") end
23+
@time @safetestset "Zero Initialization Tests" begin include("zeroinittests.jl") end
2324
end
2425

2526
if GROUP == "LinearSolveCUDA"

test/zeroinittests.jl

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using LinearSolve, LinearAlgebra, SparseArrays, Test
2+
3+
A = Diagonal(ones(4))
4+
b = rand(4)
5+
A = sparse(A)
6+
Anz = deepcopy(A)
7+
A.nzval .= 0
8+
cache_kwargs = (; verbose = true, abstol = 1e-8, reltol = 1e-8, maxiter = 30)
9+
10+
11+
function test_nonzero_init(alg=nothing)
12+
linprob = LinearProblem(A,b)
13+
14+
cache = init(linprob)
15+
cache = LinearSolve.set_A(cache, Anz)
16+
@show cache.A
17+
sol = solve(cache,nothing;cache_kwargs...)
18+
@test sol.u == b
19+
end
20+
21+
test_nonzero_init()
22+
test_nonzero_init(KLUFactorization())
23+
test_nonzero_init(UMFPACKFactorization())

0 commit comments

Comments
 (0)