190 SUBROUTINE dtbsv(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
199 CHARACTER diag,trans,uplo
202 DOUBLE PRECISION a(lda,*),x(*)
208 DOUBLE PRECISION zero
209 parameter(zero=0.0d+0)
212 DOUBLE PRECISION temp
213 INTEGER i,info,ix,j,jx,kplus1,kx,l
230 IF (.NOT.
lsame(uplo,
'U') .AND. .NOT.
lsame(uplo,
'L'))
THEN
232 ELSE IF (.NOT.
lsame(trans,
'N') .AND. .NOT.
lsame(trans,
'T') .AND.
233 + .NOT.
lsame(trans,
'C'))
THEN
235 ELSE IF (.NOT.
lsame(diag,
'U') .AND. .NOT.
lsame(diag,
'N'))
THEN
237 ELSE IF (n.LT.0)
THEN
239 ELSE IF (k.LT.0)
THEN
241 ELSE IF (lda.LT. (k+1))
THEN
243 ELSE IF (incx.EQ.0)
THEN
247 CALL
xerbla(
'DTBSV ',info)
255 nounit =
lsame(diag,
'N')
262 ELSE IF (incx.NE.1)
THEN
269 IF (
lsame(trans,
'N'))
THEN
273 IF (
lsame(uplo,
'U'))
THEN
277 IF (x(j).NE.zero)
THEN
279 IF (nounit) x(j) = x(j)/a(kplus1,j)
281 DO 10 i = j - 1,max(1,j-k),-1
282 x(i) = x(i) - temp*a(l+i,j)
291 IF (x(jx).NE.zero)
THEN
294 IF (nounit) x(jx) = x(jx)/a(kplus1,j)
296 DO 30 i = j - 1,max(1,j-k),-1
297 x(ix) = x(ix) - temp*a(l+i,j)
307 IF (x(j).NE.zero)
THEN
309 IF (nounit) x(j) = x(j)/a(1,j)
311 DO 50 i = j + 1,min(n,j+k)
312 x(i) = x(i) - temp*a(l+i,j)
320 IF (x(jx).NE.zero)
THEN
323 IF (nounit) x(jx) = x(jx)/a(1,j)
325 DO 70 i = j + 1,min(n,j+k)
326 x(ix) = x(ix) - temp*a(l+i,j)
338 IF (
lsame(uplo,
'U'))
THEN
344 DO 90 i = max(1,j-k),j - 1
345 temp = temp - a(l+i,j)*x(i)
347 IF (nounit) temp = temp/a(kplus1,j)
356 DO 110 i = max(1,j-k),j - 1
357 temp = temp - a(l+i,j)*x(ix)
360 IF (nounit) temp = temp/a(kplus1,j)
363 IF (j.GT.k) kx = kx + incx
371 DO 130 i = min(n,j+k),j + 1,-1
372 temp = temp - a(l+i,j)*x(i)
374 IF (nounit) temp = temp/a(1,j)
384 DO 150 i = min(n,j+k),j + 1,-1
385 temp = temp - a(l+i,j)*x(ix)
388 IF (nounit) temp = temp/a(1,j)
391 IF ((n-j).GE.k) kx = kx - incx