diff --git a/ext/LinearSolveSparseArraysExt.jl b/ext/LinearSolveSparseArraysExt.jl index 57e135164..6b9662764 100644 --- a/ext/LinearSolveSparseArraysExt.jl +++ b/ext/LinearSolveSparseArraysExt.jl @@ -259,6 +259,13 @@ function SciMLBase.solve!(cache::LinearSolve.LinearCache, alg::KLUFactorization; SparseMatrixCSC(size(A)..., getcolptr(A), rowvals(A), nonzeros(A)), check = false) + elseif cacheval === nothing || cacheval === PREALLOCATED_KLU || + length(nonzeros(A)) != length(cacheval.nzval) + # Create new factorization if cacheval is uninitialized or size mismatch + fact = KLU.klu( + SparseMatrixCSC(size(A)..., getcolptr(A), rowvals(A), + nonzeros(A)), + check = false) else fact = KLU.klu!(cacheval, nonzeros(A), check = false) end