187 SUBROUTINE dtbmv(UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX)
196 CHARACTER diag,trans,uplo
199 DOUBLE PRECISION a(lda,*),x(*)
205 DOUBLE PRECISION zero
206 parameter(zero=0.0d+0)
209 DOUBLE PRECISION temp
210 INTEGER i,info,ix,j,jx,kplus1,kx,l
227 IF (.NOT.
lsame(uplo,
'U') .AND. .NOT.
lsame(uplo,
'L'))
THEN
229 ELSE IF (.NOT.
lsame(trans,
'N') .AND. .NOT.
lsame(trans,
'T') .AND.
230 + .NOT.
lsame(trans,
'C'))
THEN
232 ELSE IF (.NOT.
lsame(diag,
'U') .AND. .NOT.
lsame(diag,
'N'))
THEN
234 ELSE IF (n.LT.0)
THEN
236 ELSE IF (k.LT.0)
THEN
238 ELSE IF (lda.LT. (k+1))
THEN
240 ELSE IF (incx.EQ.0)
THEN
244 CALL
xerbla(
'DTBMV ',info)
252 nounit =
lsame(diag,
'N')
259 ELSE IF (incx.NE.1)
THEN
266 IF (
lsame(trans,
'N'))
THEN
270 IF (
lsame(uplo,
'U'))
THEN
274 IF (x(j).NE.zero)
THEN
277 DO 10 i = max(1,j-k),j - 1
278 x(i) = x(i) + temp*a(l+i,j)
280 IF (nounit) x(j) = x(j)*a(kplus1,j)
286 IF (x(jx).NE.zero)
THEN
290 DO 30 i = max(1,j-k),j - 1
291 x(ix) = x(ix) + temp*a(l+i,j)
294 IF (nounit) x(jx) = x(jx)*a(kplus1,j)
297 IF (j.GT.k) kx = kx + incx
303 IF (x(j).NE.zero)
THEN
306 DO 50 i = min(n,j+k),j + 1,-1
307 x(i) = x(i) + temp*a(l+i,j)
309 IF (nounit) x(j) = x(j)*a(1,j)
316 IF (x(jx).NE.zero)
THEN
320 DO 70 i = min(n,j+k),j + 1,-1
321 x(ix) = x(ix) + temp*a(l+i,j)
324 IF (nounit) x(jx) = x(jx)*a(1,j)
327 IF ((n-j).GE.k) kx = kx - incx
335 IF (
lsame(uplo,
'U'))
THEN
341 IF (nounit) temp = temp*a(kplus1,j)
342 DO 90 i = j - 1,max(1,j-k),-1
343 temp = temp + a(l+i,j)*x(i)
355 IF (nounit) temp = temp*a(kplus1,j)
356 DO 110 i = j - 1,max(1,j-k),-1
357 temp = temp + a(l+i,j)*x(ix)
369 IF (nounit) temp = temp*a(1,j)
370 DO 130 i = j + 1,min(n,j+k)
371 temp = temp + a(l+i,j)*x(i)
382 IF (nounit) temp = temp*a(1,j)
383 DO 150 i = j + 1,min(n,j+k)
384 temp = temp + a(l+i,j)*x(ix)