@@ -500,3 +500,33 @@ function SciMLBase.solve(cache::LinearCache, alg::FastQRFactorization{P};
500500 y = ldiv! (cache. u, cache. cacheval. factors, cache. b)
501501 SciMLBase. build_linear_solution (alg, y, nothing , cache)
502502end
503+
504+ # # SparspakFactorization is here since it's MIT licensed, not GPL
505+
506+ struct SparspakFactorization <: AbstractFactorization end
507+
508+ function init_cacheval (:: SparspakFactorization , A, b, u, Pl, Pr, maxiters:: Int , abstol,
509+ reltol,
510+ verbose:: Bool , assumptions:: OperatorAssumptions )
511+ A = convert (AbstractMatrix, A)
512+ p = Sparspak. Problem. Problem (size (A)... )
513+ Sparspak. Problem. insparse! (p, A)
514+ Sparspak. Problem. infullrhs! (p, b)
515+ s = Sparspak. SparseSolver. SparseSolver (p)
516+ return s
517+ end
518+
519+ function SciMLBase. solve (cache:: LinearCache , alg:: SparspakFactorization ; kwargs... )
520+ A = cache. A
521+ A = convert (AbstractMatrix, A)
522+ if cache. isfresh
523+ p = Sparspak. Problem. Problem (size (A)... )
524+ Sparspak. Problem. insparse! (p, A)
525+ Sparspak. Problem. infullrhs! (p, cache. b)
526+ s = Sparspak. SparseSolver. SparseSolver (p)
527+ cache = set_cacheval (cache, s)
528+ end
529+ Sparspak. SparseSolver. solve! (cache. cacheval)
530+ copyto! (cache. u, cache. cacheval. p. x)
531+ SciMLBase. build_linear_solution (alg, cache. u, nothing , cache)
532+ end
0 commit comments