diff --git a/ext/SciMLOperatorsSparseArraysExt.jl b/ext/SciMLOperatorsSparseArraysExt.jl index a7cafb13..6248f312 100644 --- a/ext/SciMLOperatorsSparseArraysExt.jl +++ b/ext/SciMLOperatorsSparseArraysExt.jl @@ -14,5 +14,12 @@ SparseArrays.sparse(L::SciMLOperators.IdentityOperator) = sparse(LinearAlgebra.I function SparseArrays.sparse(L::SciMLOperators.TensorProductOperator) return LinearAlgebra.kron(sparse.(L.ops)...) end +function SparseArrays.sparse(L::SciMLOperators.BlockDiagonalOperator) + return SparseArrays.blockdiag(sparse.(L.ops)...) +end +function SparseArrays.sparse(L::SciMLOperators.NullOperator) + return SparseArrays.spzeros(eltype(L), size(L)) +end +SparseArrays.sparse(L::SciMLOperators.TensorSumOperator) = sum(sparse, L.products) end diff --git a/test/matrix.jl b/test/matrix.jl index 6da23fd2..eaa36076 100644 --- a/test/matrix.jl +++ b/test/matrix.jl @@ -806,4 +806,15 @@ end opB_sparse = sparse(opB) @test opB_sparse ≈ B @test issparse(opB_sparse) + + L = BlockDiagonalOperator(opA, opB, NullOperator(2, 3)) + sL = sparse(L) + @test issparse(sL) + @test sL ≈ Matrix(L) + + # TensorSumOperator + Lkronsum = kronsum(opB, opB) + sLkronsum = sparse(Lkronsum) + @test issparse(sLkronsum) + @test sLkronsum ≈ Matrix(Lkronsum) end