Skip to content

Commit 1cde449

Browse files
authored
Use sparsity in B for Triangular * B and Triangular \ B (#38)
* Use sparsity in B for Triangular * B and Triangular \ B * Update Project.toml
1 parent 2773655 commit 1cde449

File tree

3 files changed

+10
-7
lines changed

3 files changed

+10
-7
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "ArrayLayouts"
22
uuid = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"
33
authors = ["Sheehan Olver <[email protected]>"]
4-
version = "0.4.4"
4+
version = "0.4.5"
55

66
[deps]
77
FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b"

src/mul.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,3 +252,4 @@ dot(a, b) = materialize(Dot(a, b))
252252
# We go to generic fallback as layout-arrays are structured
253253
dot(x, A, y) = dot(x, mul(A, y))
254254
LinearAlgebra.dot(x::AbstractVector, A::LayoutMatrix, y::AbstractVector) = dot(x, A, y)
255+
LinearAlgebra.dot(x::AbstractVector, A::Symmetric{<:Real,<:LayoutMatrix}, y::AbstractVector) = dot(x, A, y)

src/triangular.jl

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,11 @@ function materialize!(M::Lmul{<:TriangularLayout{'U','N'}})
2929
throw(DimensionMismatch("right hand side B needs first dimension of size $(size(A,1)), has size $m"))
3030
end
3131
Adata = triangulardata(A)
32-
for j = 1:n
33-
for i = 1:m
32+
for j = rowsupport(B)
33+
cs = colsupport(B,j)
34+
for i = cs
3435
Bij = Adata[i,i]*B[i,j]
35-
for k = (i + 1:m) rowsupport(Adata,i)
36+
for k = (i + 1:m) cs rowsupport(Adata,i)
3637
Bij += Adata[i,k]*B[k,j]
3738
end
3839
B[i,j] = Bij
@@ -48,10 +49,11 @@ function materialize!(M::Lmul{<:TriangularLayout{'U','U'}})
4849
throw(DimensionMismatch("right hand side B needs first dimension of size $(size(A,1)), has size $m"))
4950
end
5051
Adata = triangulardata(A)
51-
for j = 1:n
52-
for i = 1:m
52+
for j = rowsupport(B)
53+
cs = colsupport(B,j)
54+
for i = cs
5355
Bij = B[i,j]
54-
for k = (i + 1:m) rowsupport(Adata,i)
56+
for k = (i + 1:m) cs rowsupport(Adata,i)
5557
Bij += Adata[i,k]*B[k,j]
5658
end
5759
B[i,j] = Bij

0 commit comments

Comments
 (0)