Skip to content

Commit 40d5de2

Browse files
authored
Fix and test reuse_symbolic=false for UMFPACK lu!() (#712)
The `reuse_symbolic=false` option for UMFPACK's `lu!()` is broken, due to undefined `Tv` and `Ti`. This PR fixes that bug, and adds a test that uses `reuse_symbolic=false`.
1 parent 405a8d5 commit 40d5de2

2 files changed

Lines changed: 13 additions & 6 deletions

File tree

src/solvers/umfpack.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,8 @@ function lu!(F::UmfpackLU{Tv, Ti}, S::AbstractSparseMatrixCSC;
471471
return lu!(F; reuse_symbolic, check, q)
472472
end
473473

474-
function lu!(F::UmfpackLU; check::Bool=true, reuse_symbolic::Bool=true, q=nothing)
474+
function lu!(F::UmfpackLU{Tv, Ti}; check::Bool=true, reuse_symbolic::Bool=true,
475+
q=nothing) where {Tv, Ti}
475476
if !reuse_symbolic && _isnotnull(F.symbolic)
476477
F.symbolic = Symbolic{Tv, Ti}(C_NULL)
477478
end

test/umfpack.jl

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,7 @@ end
408408
umfpack_report(x.b)
409409
end
410410

411-
@testset "Reuse symbolic LU factorization" begin
411+
@testset "Do/do not reuse symbolic LU factorization" for reuse (true, false)
412412
A1 = sparse(increment!([0,4,1,1,2,2,0,1,2,3,4,4]),
413413
increment!([0,4,0,2,1,2,1,4,3,2,1,2]),
414414
[2.,1.,3.,4.,-1.,-3.,3.,9.,2.,1.,4.,2.], 5, 5)
@@ -420,7 +420,7 @@ end
420420
b = Tv[8., 45., -3., 3., 19.]
421421
F = lu(A)
422422
umfpack_report(F)
423-
lu!(F, B)
423+
lu!(F, B; reuse_symbolic=reuse)
424424
umfpack_report(F)
425425
@test F\b B\b Matrix(B)\b
426426

@@ -429,14 +429,20 @@ end
429429
C[4, 3] = Tv(0)
430430
F = lu(A)
431431
umfpack_report(F)
432-
@test_throws SingularException lu!(F, C)
432+
@test_throws SingularException lu!(F, C; reuse_symbolic=reuse)
433433
# change of nonzero pattern
434434
D = copy(B)
435435
D[5, 1] = Tv(1.0)
436436
F = lu(A)
437437
umfpack_report(F)
438-
@test_throws ArgumentError lu!(F, D)
439-
umfpack_report(F)
438+
if reuse
439+
@test_throws ArgumentError lu!(F, D; reuse_symbolic=reuse)
440+
umfpack_report(F)
441+
else
442+
lu!(F, D; reuse_symbolic=reuse)
443+
umfpack_report(F)
444+
@test F\b D\b Matrix(D)\b
445+
end
440446
end
441447
end
442448
end

0 commit comments

Comments
 (0)