@@ -25,23 +25,23 @@ const BlockDiagonal{T,VT<:Matrix{T}} = BlockMatrix{T,<:Diagonal{VT}}
25
25
26
26
BlockDiagonal (A) = mortar (Diagonal (A))
27
27
28
- function sizes_from_blocks (A:: Diagonal , _)
28
+ function sizes_from_blocks (A:: Diagonal , _)
29
29
# for k = 1:length(A.du)
30
30
# size(A.du[k],1) == sz[1][k] || throw(ArgumentError("block sizes of upper diagonal inconsisent with diagonal"))
31
31
# size(A.du[k],2) == sz[2][k+1] || throw(ArgumentError("block sizes of upper diagonal inconsisent with diagonal"))
32
32
# size(A.dl[k],1) == sz[1][k+1] || throw(ArgumentError("block sizes of lower diagonal inconsisent with diagonal"))
33
33
# size(A.dl[k],2) == sz[2][k] || throw(ArgumentError("block sizes of lower diagonal inconsisent with diagonal"))
34
34
# end
35
- BlockSizes (size .(A. diag, 1 ), size .(A. diag,2 ))
36
- end
35
+ (size .(A. diag, 1 ), size .(A. diag,2 ))
36
+ end
37
37
38
38
39
39
# Block Tridiagonal
40
40
const BlockTridiagonal{T,VT<: Matrix{T} } = BlockMatrix{T,<: Tridiagonal{VT} }
41
41
42
42
BlockTridiagonal (A,B,C) = mortar (Tridiagonal (A,B,C))
43
43
44
- function sizes_from_blocks (A:: Tridiagonal , _)
44
+ function sizes_from_blocks (A:: Tridiagonal , _)
45
45
# for k = 1:length(A.du)
46
46
# size(A.du[k],1) == sz[1][k] || throw(ArgumentError("block sizes of upper diagonal inconsisent with diagonal"))
47
47
# size(A.du[k],2) == sz[2][k+1] || throw(ArgumentError("block sizes of upper diagonal inconsisent with diagonal"))
@@ -64,11 +64,20 @@ checksquareblocks(A) = blockisequal(axes(A)...) || throw(DimensionMismatch("bloc
64
64
65
65
for op in (:- , :+ )
66
66
@eval begin
67
- function $op (A:: BlockTridiagonal , λ:: UniformScaling )
67
+ function $op (A:: BlockDiagonal , λ:: UniformScaling )
68
+ checksquareblocks (A)
69
+ mortar (Diagonal (broadcast ($ op, A. blocks. diag, Ref (λ))))
70
+ end
71
+ function $op (λ:: UniformScaling , A:: BlockDiagonal )
72
+ checksquareblocks (A)
73
+ mortar (Diagonal (broadcast ($ op, Ref (λ), A. blocks. diag)))
74
+ end
75
+
76
+ function $op (A:: BlockTridiagonal , λ:: UniformScaling )
68
77
checksquareblocks (A)
69
78
mortar (Tridiagonal (A. blocks. dl, broadcast ($ op, A. blocks. d, Ref (λ)), A. blocks. du))
70
79
end
71
- function $op (λ:: UniformScaling , A:: BlockTridiagonal )
80
+ function $op (λ:: UniformScaling , A:: BlockTridiagonal )
72
81
checksquareblocks (A)
73
82
mortar (Tridiagonal (A. blocks. dl, broadcast ($ op, Ref (λ), A. blocks. d), A. blocks. du))
74
83
end
@@ -87,4 +96,4 @@ function replace_in_print_matrix(A::BlockTridiagonal, i::Integer, j::Integer, s:
87
96
I,J = block .(bi)
88
97
i,j = blockindex .(bi)
89
98
- 1 ≤ Int (J- I) ≤ 1 ? s : Base. replace_with_centered_mark (s)
90
- end
99
+ end
0 commit comments