Skip to content

Commit eb1da3d

Browse files
committed
Add support for almost banded matrix
1 parent a455e27 commit eb1da3d

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

Project.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "LinearSolve"
22
uuid = "7ed4a6bd-45f5-4d41-b270-4a48e9bafcae"
33
authors = ["SciML"]
4-
version = "2.19.0"
4+
version = "2.20.0"
55

66
[deps]
77
ArrayInterface = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9"
@@ -34,6 +34,7 @@ BandedMatrices = "aae01518-5342-5314-be14-df237901396f"
3434
BlockDiagonals = "0a1fb500-61f7-11e9-3c65-f5ef3456f9f0"
3535
CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"
3636
Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9"
37+
FastAlmostBandedMatrices = "9d29842c-ecb8-4973-b1e9-a27b1157504e"
3738
HYPRE = "b5ffcf37-a2bd-41ab-a3da-4bd9bc8ad771"
3839
IterativeSolvers = "42fd0dbc-a981-5370-80f2-aaf504508153"
3940
KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c"
@@ -54,6 +55,7 @@ LinearSolveKrylovKitExt = "KrylovKit"
5455
LinearSolveMetalExt = "Metal"
5556
LinearSolvePardisoExt = "Pardiso"
5657
LinearSolveRecursiveArrayToolsExt = "RecursiveArrayTools"
58+
LinearSolveFastAlmostBandedMatricesExt = ["FastAlmostBandedMatrices"]
5759

5860
[compat]
5961
ArrayInterface = "7.4.11"
@@ -92,6 +94,7 @@ julia = "1.9"
9294
BandedMatrices = "aae01518-5342-5314-be14-df237901396f"
9395
BlockDiagonals = "0a1fb500-61f7-11e9-3c65-f5ef3456f9f0"
9496
Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9"
97+
FastAlmostBandedMatrices = "9d29842c-ecb8-4973-b1e9-a27b1157504e"
9598
FiniteDiff = "6a86dc24-6348-571c-b903-95158fe2bd41"
9699
ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
97100
HYPRE = "b5ffcf37-a2bd-41ab-a3da-4bd9bc8ad771"
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
module LinearSolveFastAlmostBandedMatricesExt
2+
3+
using FastAlmostBandedMatrices, LinearAlgebra, LinearSolve
4+
import LinearSolve: defaultalg,
5+
do_factorization, init_cacheval, DefaultLinearSolver, DefaultAlgorithmChoice
6+
7+
function defaultalg(A::AlmostBandedMatrix, b, oa::OperatorAssumptions)
8+
if oa.issq
9+
return DefaultLinearSolver(DefaultAlgorithmChoice.DirectLdiv!)
10+
else
11+
return DefaultLinearSolver(DefaultAlgorithmChoice.QRFactorization)
12+
end
13+
end
14+
15+
# For BandedMatrix
16+
for alg in (:SVDFactorization, :MKLLUFactorization, :DiagonalFactorization,
17+
:SparspakFactorization, :KLUFactorization, :UMFPACKFactorization,
18+
:GenericLUFactorization, :RFLUFactorization, :BunchKaufmanFactorization,
19+
:CHOLMODFactorization, :NormalCholeskyFactorization, :LDLtFactorization,
20+
:AppleAccelerateLUFactorization, :CholeskyFactorization, :LUFactorization)
21+
@eval begin
22+
function init_cacheval(::$(alg), ::AlmostBandedMatrix, b, u, Pl, Pr, maxiters::Int,
23+
abstol, reltol, verbose::Bool, assumptions::OperatorAssumptions)
24+
return nothing
25+
end
26+
end
27+
end
28+
29+
function do_factorization(alg::QRFactorization, A::AlmostBandedMatrix, b, u)
30+
return alg.inplace ? qr!(A) : qr(A)
31+
end
32+
33+
end

0 commit comments

Comments
 (0)