@@ -18,7 +18,7 @@ function upper_mul_tri_triview!(UX::Tridiagonal, U::BandedMatrix, X::Tridiagonal
1818 l,u = bandwidths (U)
1919
2020 @assert size (U) == (n,n)
21- @assert l == 0 && u ≥ 2
21+ @assert l ≥ 0
2222 # Tridiagonal bands can be resized
2323 @assert length (Xdl)+ 1 == length (Xd) == length (Xdu)+ 1 == length (UXdl)+ 1 == length (UXd) == length (UXdu)+ 1 == n
2424
@@ -42,7 +42,7 @@ function initiate_upper_mul_tri_triview!(UX, U::BandedMatrix, X)
4242
4343 k = 1
4444 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]
4646 UXd[1 ] = Uₖₖ* aₖ + Uₖₖ₊₁* cₖ # UX[k,k] = U[k,k]*X[k,k] + U[k,k+1]*X[k+1,k]
4747 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]
4848 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,
7171 l,u = bandwidths (U)
7272
7373 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]
7575 UXdl[k- 1 ] = Uₖₖ* cₖ₋₁ # UX[k,k-1] = U[k,k]*X[k,k-1]
7676 UXd[k] = Uₖₖ* aₖ + Uₖₖ₊₁* cₖ # UX[k,k] = U[k,k]*X[k,k] + U[k,k+1]*X[k+1,k]
7777 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
118118 l,u = bandwidths (R)
119119
120120 @assert size (R) == (n,n)
121- @assert l == 0 && u ≥ 2
121+ @assert l ≥ 0 && u ≥ 1
122122 # Tridiagonal bands can be resized
123123 @assert length (Xdl)+ 1 == length (Xd) == length (Xdu)+ 1 == length (Ydl)+ 1 == length (Yd) == length (Ydu)+ 1 == n
124124
@@ -177,12 +177,12 @@ function main_tri_mul_invupper_triview!(Y::Tridiagonal, X::Tridiagonal, R::Bande
177177 Rdat = R. data
178178 l,u = bandwidths (R)
179179
180- @inbounds for k = kr
180+ for k = kr
181181 cₖ₋₁,aₖ,bₖ = Xdl[k- 1 ], Xd[k], Xdu[k]
182182 Ydl[k- 1 ] = cₖ₋₁/ Rₖₖ
183183 Yd[k] = aₖ- cₖ₋₁* Rₖₖ₊₁/ Rₖₖ
184184 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 ]
186186 Yd[k] /= Rₖₖ
187187 Ydu[k- 1 ] /= Rₖₖ
188188 Ydu[k] *= Rₖ₋₁ₖ* Rₖₖ₊₁/ Rₖₖ - Rₖ₋₁ₖ₊₁
0 commit comments