@@ -18,7 +18,7 @@ function upper_mul_tri_triview!(UX::Tridiagonal, U::BandedMatrix, X::Tridiagonal
18
18
l,u = bandwidths (U)
19
19
20
20
@assert size (U) == (n,n)
21
- @assert l == 0 && u ≥ 2
21
+ @assert l ≥ 0
22
22
# Tridiagonal bands can be resized
23
23
@assert length (Xdl)+ 1 == length (Xd) == length (Xdu)+ 1 == length (UXdl)+ 1 == length (UXd) == length (UXdu)+ 1 == n
24
24
@@ -42,7 +42,7 @@ function initiate_upper_mul_tri_triview!(UX, U::BandedMatrix, X)
42
42
43
43
k = 1
44
44
aₖ, cₖ = Xd[1 ], Xdl[1 ]
45
- Uₖₖ, Uₖₖ₊₁, Uₖₖ₊₂ = Udat[u+ 1 ,1 ], Udat[u,2 ], Udat[u- 1 ,3 ] # U[k,k], U[k,k+1], U[k,k+2]
45
+ Uₖₖ, Uₖₖ₊₁, Uₖₖ₊₂ = Udat[u+ 1 ,1 ], Udat[u,2 ], (u > 1 ? Udat[u- 1 ,3 ] : zero ( eltype (Udat))) # U[k,k], U[k,k+1], U[k,k+2]
46
46
UXd[1 ] = Uₖₖ* aₖ + Uₖₖ₊₁* cₖ # UX[k,k] = U[k,k]*X[k,k] + U[k,k+1]*X[k+1,k]
47
47
bₖ, aₖ, cₖ, cₖ₋₁ = Xdu[1 ], Xd[2 ], Xdl[2 ], cₖ # X[k,k+1], X[k+1,k+1], X[k+2,k+1], X[k+1,k]
48
48
UXdu[1 ] = Uₖₖ* bₖ + Uₖₖ₊₁* aₖ + Uₖₖ₊₂* cₖ # UX[k,k+1] = U[k,k]*X[k,k+1] + U[k,k+1]*X[k+1,k+1] + U[k,k+1]*X[k+1,k]
@@ -71,7 +71,7 @@ function main_upper_mul_tri_triview!(UX, U::BandedMatrix, X, kr, bₖ=X[kr[1]-1,
71
71
l,u = bandwidths (U)
72
72
73
73
for k = kr
74
- Uₖₖ, Uₖₖ₊₁, Uₖₖ₊₂ = Udat[u+ 1 ,k], Udat[u,k+ 1 ], Udat[u- 1 ,k+ 2 ] # U[k,k], U[k,k+1], U[k,k+2]
74
+ Uₖₖ, Uₖₖ₊₁, Uₖₖ₊₂ = Udat[u+ 1 ,k], Udat[u,k+ 1 ], (u > 1 ? Udat[u- 1 ,k+ 2 ] : zero ( eltype (Udat))) # U[k,k], U[k,k+1], U[k,k+2]
75
75
UXdl[k- 1 ] = Uₖₖ* cₖ₋₁ # UX[k,k-1] = U[k,k]*X[k,k-1]
76
76
UXd[k] = Uₖₖ* aₖ + Uₖₖ₊₁* cₖ # UX[k,k] = U[k,k]*X[k,k] + U[k,k+1]*X[k+1,k]
77
77
bₖ, aₖ, cₖ, cₖ₋₁ = Xdu[k], Xd[k+ 1 ], Xdl[k+ 1 ], cₖ # X[k,k+1], X[k+1,k+1], X[k+2,k+1], X[k+1,k]
@@ -118,7 +118,7 @@ function tri_mul_invupper_triview!(Y::Tridiagonal, X::Tridiagonal, R::BandedMatr
118
118
l,u = bandwidths (R)
119
119
120
120
@assert size (R) == (n,n)
121
- @assert l == 0 && u ≥ 2
121
+ @assert l ≥ 0 && u ≥ 1
122
122
# Tridiagonal bands can be resized
123
123
@assert length (Xdl)+ 1 == length (Xd) == length (Xdu)+ 1 == length (Ydl)+ 1 == length (Yd) == length (Ydu)+ 1 == n
124
124
@@ -177,12 +177,12 @@ function main_tri_mul_invupper_triview!(Y::Tridiagonal, X::Tridiagonal, R::Bande
177
177
Rdat = R. data
178
178
l,u = bandwidths (R)
179
179
180
- @inbounds for k = kr
180
+ for k = kr
181
181
cₖ₋₁,aₖ,bₖ = Xdl[k- 1 ], Xd[k], Xdu[k]
182
182
Ydl[k- 1 ] = cₖ₋₁/ Rₖₖ
183
183
Yd[k] = aₖ- cₖ₋₁* Rₖₖ₊₁/ Rₖₖ
184
184
Ydu[k] = cₖ₋₁/ Rₖₖ
185
- Rₖₖ,Rₖₖ₊₁,Rₖ₋₁ₖ₊₁,Rₖ₋₁ₖ = Rdat[u+ 1 ,k], Rdat[u,k+ 1 ],Rdat[u- 1 ,k+ 1 ],Rₖₖ₊₁ # R[k,k], R[k,k+1], R[k-1,k]
185
+ Rₖₖ,Rₖₖ₊₁,Rₖ₋₁ₖ₊₁,Rₖ₋₁ₖ = Rdat[u+ 1 ,k], Rdat[u,k+ 1 ],(u > 1 ? Rdat[u- 1 ,k+ 1 ] : zero ( eltype (Rdat))) ,Rₖₖ₊₁ # R[k,k], R[k,k+1], R[k-1,k+1 ]
186
186
Yd[k] /= Rₖₖ
187
187
Ydu[k- 1 ] /= Rₖₖ
188
188
Ydu[k] *= Rₖ₋₁ₖ* Rₖₖ₊₁/ Rₖₖ - Rₖ₋₁ₖ₊₁
0 commit comments