5252
5353function do_factorization (alg:: LUFactorization , A, b, u)
5454 A = convert (AbstractMatrix, A)
55- if A isa SparseMatrixCSC
56- return lu (A )
55+ if A isa AbstractSparseMatrixCSC
56+ return lu (SparseMatrixCSC ( size (A) ... , getcolptr (A), rowvals (A), nonzeros (A)) )
5757 else
5858 fact = lu! (A, alg. pivot)
5959 end
@@ -277,7 +277,8 @@ function init_cacheval(alg::UMFPACKFactorization, A, b, u, Pl, Pr, maxiters::Int
277277 copy (nonzeros (A)), 0 )
278278 finalizer (SuiteSparse. UMFPACK. umfpack_free_symbolic, res)
279279 else
280- return SuiteSparse. UMFPACK. UmfpackLU (A)
280+ return SuiteSparse. UMFPACK. UmfpackLU (SparseMatrixCSC (size (A)... , getcolptr (A),
281+ rowvals (A), nonzeros (A)))
281282 end
282283end
283284
@@ -290,12 +291,15 @@ function SciMLBase.solve(cache::LinearCache, alg::UMFPACKFactorization; kwargs..
290291 if alg. check_pattern && ! (SuiteSparse. decrement (SparseArrays. getcolptr (A)) ==
291292 cache. cacheval. colptr &&
292293 SuiteSparse. decrement (SparseArrays. getrowval (A)) == cache. cacheval. rowval)
293- fact = lu (A)
294+ fact = lu (SparseMatrixCSC (size (A)... , getcolptr (A), rowvals (A),
295+ nonzeros (A)))
294296 else
295- fact = lu! (cache. cacheval, A)
297+ fact = lu! (cache. cacheval,
298+ SparseMatrixCSC (size (A)... , getcolptr (A), rowvals (A),
299+ nonzeros (A)))
296300 end
297301 else
298- fact = lu (A )
302+ fact = lu (SparseMatrixCSC ( size (A) ... , getcolptr (A), rowvals (A), nonzeros (A)) )
299303 end
300304 cache = set_cacheval (cache, fact)
301305 end
312316function init_cacheval (alg:: KLUFactorization , A, b, u, Pl, Pr, maxiters:: Int , abstol,
313317 reltol,
314318 verbose:: Bool , assumptions:: OperatorAssumptions )
315- return KLU. KLUFactorization (convert (AbstractMatrix, A)) # this takes care of the copy internally.
319+ A = convert (AbstractMatrix, A)
320+ return KLU. KLUFactorization (SparseMatrixCSC (size (A)... , getcolptr (A), rowvals (A),
321+ nonzeros (A)))
316322end
317323
318324function SciMLBase. solve (cache:: LinearCache , alg:: KLUFactorization ; kwargs... )
@@ -323,21 +329,25 @@ function SciMLBase.solve(cache::LinearCache, alg::KLUFactorization; kwargs...)
323329 if alg. check_pattern && ! (SuiteSparse. decrement (SparseArrays. getcolptr (A)) ==
324330 cache. cacheval. colptr &&
325331 SuiteSparse. decrement (SparseArrays. getrowval (A)) == cache. cacheval. rowval)
326- fact = KLU. klu (A)
332+ fact = KLU. klu (SparseMatrixCSC (size (A)... , getcolptr (A), rowvals (A),
333+ nonzeros (A)))
327334 else
328335 # If we have a cacheval already, run umfpack_symbolic to ensure the symbolic factorization exists
329336 # This won't recompute if it does.
330337 KLU. klu_analyze! (cache. cacheval)
331- copyto! (cache. cacheval. nzval, A . nzval )
338+ copyto! (cache. cacheval. nzval, nonzeros (A) )
332339 if cache. cacheval. _numeric === C_NULL # We MUST have a numeric factorization for reuse, unlike UMFPACK.
333340 KLU. klu_factor! (cache. cacheval)
334341 end
335- fact = KLU. klu! (cache. cacheval, A)
342+ fact = KLU. klu! (cache. cacheval,
343+ SparseMatrixCSC (size (A)... , getcolptr (A), rowvals (A),
344+ nonzeros (A)))
336345 end
337346 else
338347 # New fact each time since the sparsity pattern can change
339348 # and thus it needs to reallocate
340- fact = KLU. klu (A)
349+ fact = KLU. klu (SparseMatrixCSC (size (A)... , getcolptr (A), rowvals (A),
350+ nonzeros (A)))
341351 end
342352 cache = set_cacheval (cache, fact)
343353 end
@@ -511,17 +521,20 @@ function init_cacheval(::SparspakFactorization, A, b, u, Pl, Pr, maxiters::Int,
511521 reltol,
512522 verbose:: Bool , assumptions:: OperatorAssumptions )
513523 A = convert (AbstractMatrix, A)
514- return sparspaklu (A, factorize = false )
524+ return sparspaklu (SparseMatrixCSC (size (A)... , getcolptr (A), rowvals (A), nonzeros (A)),
525+ factorize = false )
515526end
516527
517528function SciMLBase. solve (cache:: LinearCache , alg:: SparspakFactorization ; kwargs... )
518529 A = cache. A
519- A = convert (AbstractMatrix, A)
520530 if cache. isfresh
521531 if cache. cacheval != = nothing && alg. reuse_symbolic
522- fact = sparspaklu! (cache. cacheval, A)
532+ fact = sparspaklu! (cache. cacheval,
533+ SparseMatrixCSC (size (A)... , getcolptr (A), rowvals (A),
534+ nonzeros (A)))
523535 else
524- fact = sparspaklu (A)
536+ fact = sparspaklu (SparseMatrixCSC (size (A)... , getcolptr (A), rowvals (A),
537+ nonzeros (A)))
525538 end
526539 cache = set_cacheval (cache, fact)
527540 end
0 commit comments