From 492628ba784b21c46cf4c15740dc4d031d1d1412 Mon Sep 17 00:00:00 2001 From: Sheehan Olver Date: Thu, 27 Aug 2020 17:02:19 +0100 Subject: [PATCH 1/2] Use sparsity in B for Triangular * B and Triangular \ B --- src/mul.jl | 1 + src/triangular.jl | 14 ++++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/mul.jl b/src/mul.jl index deaaec3..999dcff 100644 --- a/src/mul.jl +++ b/src/mul.jl @@ -252,3 +252,4 @@ dot(a, b) = materialize(Dot(a, b)) # We go to generic fallback as layout-arrays are structured dot(x, A, y) = dot(x, mul(A, y)) LinearAlgebra.dot(x::AbstractVector, A::LayoutMatrix, y::AbstractVector) = dot(x, A, y) +LinearAlgebra.dot(x::AbstractVector, A::Symmetric{<:Real,<:LayoutMatrix}, y::AbstractVector) = dot(x, A, y) diff --git a/src/triangular.jl b/src/triangular.jl index 7228da1..f101be5 100644 --- a/src/triangular.jl +++ b/src/triangular.jl @@ -29,10 +29,11 @@ function materialize!(M::Lmul{<:TriangularLayout{'U','N'}}) throw(DimensionMismatch("right hand side B needs first dimension of size $(size(A,1)), has size $m")) end Adata = triangulardata(A) - for j = 1:n - for i = 1:m + for j = rowsupport(B) + cs = colsupport(B,j) + for i = cs Bij = Adata[i,i]*B[i,j] - for k = (i + 1:m) ∩ rowsupport(Adata,i) + for k = (i + 1:m) ∩ cs ∩ rowsupport(Adata,i) Bij += Adata[i,k]*B[k,j] end B[i,j] = Bij @@ -48,10 +49,11 @@ function materialize!(M::Lmul{<:TriangularLayout{'U','U'}}) throw(DimensionMismatch("right hand side B needs first dimension of size $(size(A,1)), has size $m")) end Adata = triangulardata(A) - for j = 1:n - for i = 1:m + for j = rowsupport(B) + cs = colsupport(B,j) + for i = cs Bij = B[i,j] - for k = (i + 1:m) ∩ rowsupport(Adata,i) + for k = (i + 1:m) ∩ cs ∩ rowsupport(Adata,i) Bij += Adata[i,k]*B[k,j] end B[i,j] = Bij From 7fc4bf13c8b49bca98fcac2970e6c0d446e16f05 Mon Sep 17 00:00:00 2001 From: Sheehan Olver Date: Fri, 28 Aug 2020 14:19:52 +0100 Subject: [PATCH 2/2] Update Project.toml --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 06b8da2..6dd6f31 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "ArrayLayouts" uuid = "4c555306-a7a7-4459-81d9-ec55ddd5c99a" authors = ["Sheehan Olver "] -version = "0.4.4" +version = "0.4.5" [deps] FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b"