@@ -24,7 +24,7 @@ function BlockSparseArrays.blockrange(bs::Vector{<:CartesianProduct})
24
24
end
25
25
26
26
using BlockArrays: AbstractBlockedUnitRange
27
- using BlockSparseArrays: Block, GetUnstoredBlock , eachblockaxis, mortar_axis
27
+ using BlockSparseArrays: Block, ZeroBlocks , eachblockaxis, mortar_axis
28
28
using DerivableInterfaces: zero!
29
29
using FillArrays: Eye
30
30
using KroneckerArrays:
@@ -56,45 +56,41 @@ function block_axes(ax::NTuple{N,AbstractUnitRange{<:Integer}}, I::Block{N}) whe
56
56
return block_axes (ax, Tuple (I)... )
57
57
end
58
58
59
- function (f :: GetUnstoredBlock ) (
60
- :: Type{<:AbstractMatrix{ KroneckerMatrix{T,A,B} }} , I:: Vararg{Int,2}
59
+ function Base . getindex (
60
+ a :: ZeroBlocks{2, KroneckerMatrix{T,A,B}} , I:: Vararg{Int,2}
61
61
) where {T,A<: AbstractMatrix{T} ,B<: AbstractMatrix{T} }
62
- ax_a = arg1 .(f. axes)
63
- f_a = GetUnstoredBlock (ax_a)
64
- a = f_a (AbstractMatrix{A}, I... )
62
+ ax_a1 = arg1 .(a. parentaxes)
63
+ a1 = ZeroBlocks {2,A} (ax_a1)[I... ]
65
64
66
- ax_b = arg2 .(f. axes)
67
- f_b = GetUnstoredBlock (ax_b)
68
- b = f_b (AbstractMatrix{B}, I... )
65
+ ax_a2 = arg2 .(a. parentaxes)
66
+ a2 = ZeroBlocks {2,B} (ax_a2)[I... ]
69
67
70
- return a ⊗ b
68
+ return a1 ⊗ a2
71
69
end
72
- function (f :: GetUnstoredBlock ) (
73
- :: Type{<:AbstractMatrix{ EyeKronecker{T,A,B} }} , I:: Vararg{Int,2}
70
+ function Base . getindex (
71
+ a :: ZeroBlocks{2, EyeKronecker{T,A,B}} , I:: Vararg{Int,2}
74
72
) where {T,A<: Eye{T} ,B<: AbstractMatrix{T} }
75
- block_ax_a = arg1 .(block_axes (f . axes , Block (I)))
76
- a = _similar (A, block_ax_a )
73
+ block_ax_a1 = arg1 .(block_axes (a . parentaxes , Block (I)))
74
+ a1 = _similar (A, block_ax_a1 )
77
75
78
- ax_b = arg2 .(f. axes)
79
- f_b = GetUnstoredBlock (ax_b)
80
- b = f_b (AbstractMatrix{B}, I... )
76
+ ax_a2 = arg2 .(a. parentaxes)
77
+ a2 = ZeroBlocks {2,B} (ax_a2)[I... ]
81
78
82
- return a ⊗ b
79
+ return a1 ⊗ a2
83
80
end
84
- function (f :: GetUnstoredBlock ) (
85
- :: Type{<:AbstractMatrix{ KroneckerEye{T,A,B} }} , I:: Vararg{Int,2}
81
+ function Base . getindex (
82
+ a :: ZeroBlocks{2, KroneckerEye{T,A,B}} , I:: Vararg{Int,2}
86
83
) where {T,A<: AbstractMatrix{T} ,B<: Eye{T} }
87
- ax_a = arg1 .(f. axes)
88
- f_a = GetUnstoredBlock (ax_a)
89
- a = f_a (AbstractMatrix{A}, I... )
84
+ ax_a1 = arg1 .(a. parentaxes)
85
+ a1 = ZeroBlocks {2,A} (ax_a1)[I... ]
90
86
91
- block_ax_b = arg2 .(block_axes (f . axes , Block (I)))
92
- b = _similar (B, block_ax_b )
87
+ block_ax_a2 = arg2 .(block_axes (a . parentaxes , Block (I)))
88
+ a2 = _similar (B, block_ax_a2 )
93
89
94
- return a ⊗ b
90
+ return a1 ⊗ a2
95
91
end
96
- function (f :: GetUnstoredBlock ) (
97
- :: Type{<:AbstractMatrix{ EyeEye{T,A,B} }} , I:: Vararg{Int,2}
92
+ function Base . getindex (
93
+ a :: ZeroBlocks{2, EyeEye{T,A,B}} , I:: Vararg{Int,2}
98
94
) where {T,A<: Eye{T} ,B<: Eye{T} }
99
95
return error (" Not implemented." )
100
96
end
0 commit comments