293 SUBROUTINE ssbgvx( JOBZ, RANGE, UPLO, N, KA, KB, AB, LDAB, BB,
294 $ LDBB, Q, LDQ, VL, VU, IL, IU, ABSTOL, M, W, Z,
295 $ LDZ, WORK, IWORK, IFAIL, INFO )
303 CHARACTER JOBZ, RANGE, UPLO
304 INTEGER IL, INFO, IU, KA, KB, LDAB, LDBB, LDQ, LDZ, M,
309 INTEGER IFAIL( * ), IWORK( * )
310 REAL AB( ldab, * ), BB( ldbb, * ), Q( ldq, * ),
311 $ w( * ), work( * ), z( ldz, * )
318 parameter( zero = 0.0e+0, one = 1.0e+0 )
321 LOGICAL ALLEIG, INDEIG, TEST, UPPER, VALEIG, WANTZ
322 CHARACTER ORDER, VECT
323 INTEGER I, IINFO, INDD, INDE, INDEE, INDIBL, INDISP,
324 $ indiwo, indwrk, itmp1, j, jj, nsplit
342 wantz = lsame( jobz,
'V' )
343 upper = lsame( uplo,
'U' )
344 alleig = lsame( range,
'A' )
345 valeig = lsame( range,
'V' )
346 indeig = lsame( range,
'I' )
349 IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN 351 ELSE IF( .NOT.( alleig .OR. valeig .OR. indeig ) )
THEN 353 ELSE IF( .NOT.( upper .OR. lsame( uplo,
'L' ) ) )
THEN 355 ELSE IF( n.LT.0 )
THEN 357 ELSE IF( ka.LT.0 )
THEN 359 ELSE IF( kb.LT.0 .OR. kb.GT.ka )
THEN 361 ELSE IF( ldab.LT.ka+1 )
THEN 363 ELSE IF( ldbb.LT.kb+1 )
THEN 365 ELSE IF( ldq.LT.1 .OR. ( wantz .AND. ldq.LT.n ) )
THEN 369 IF( n.GT.0 .AND. vu.LE.vl )
371 ELSE IF( indeig )
THEN 372 IF( il.LT.1 .OR. il.GT.max( 1, n ) )
THEN 374 ELSE IF ( iu.LT.min( n, il ) .OR. iu.GT.n )
THEN 380 IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN 386 CALL xerbla(
'SSBGVX', -info )
398 CALL spbstf( uplo, n, kb, bb, ldbb, info )
406 CALL ssbgst( jobz, uplo, n, ka, kb, ab, ldab, bb, ldbb, q, ldq,
419 CALL ssbtrd( vect, uplo, n, ka, ab, ldab, work( indd ),
420 $ work( inde ), q, ldq, work( indwrk ), iinfo )
428 IF( il.EQ.1 .AND. iu.EQ.n )
THEN 432 IF( ( alleig .OR. test ) .AND. ( abstol.LE.zero ) )
THEN 433 CALL scopy( n, work( indd ), 1, w, 1 )
435 CALL scopy( n-1, work( inde ), 1, work( indee ), 1 )
436 IF( .NOT.wantz )
THEN 437 CALL ssterf( n, w, work( indee ), info )
439 CALL slacpy(
'A', n, n, q, ldq, z, ldz )
440 CALL ssteqr( jobz, n, w, work( indee ), z, ldz,
441 $ work( indwrk ), info )
466 CALL sstebz( range, order, n, vl, vu, il, iu, abstol,
467 $ work( indd ), work( inde ), m, nsplit, w,
468 $ iwork( indibl ), iwork( indisp ), work( indwrk ),
469 $ iwork( indiwo ), info )
472 CALL sstein( n, work( indd ), work( inde ), m, w,
473 $ iwork( indibl ), iwork( indisp ), z, ldz,
474 $ work( indwrk ), iwork( indiwo ), ifail, info )
480 CALL scopy( n, z( 1, j ), 1, work( 1 ), 1 )
481 CALL sgemv(
'N', n, n, one, q, ldq, work, 1, zero,
496 IF( w( jj ).LT.tmp1 )
THEN 503 itmp1 = iwork( indibl+i-1 )
505 iwork( indibl+i-1 ) = iwork( indibl+j-1 )
507 iwork( indibl+j-1 ) = itmp1
508 CALL sswap( n, z( 1, i ), 1, z( 1, j ), 1 )
511 ifail( i ) = ifail( j )
subroutine spbstf(UPLO, N, KD, AB, LDAB, INFO)
SPBSTF
subroutine sstebz(RANGE, ORDER, N, VL, VU, IL, IU, ABSTOL, D, E, M, NSPLIT, W, IBLOCK, ISPLIT, WORK, IWORK, INFO)
SSTEBZ
subroutine ssteqr(COMPZ, N, D, E, Z, LDZ, WORK, INFO)
SSTEQR
subroutine sgemv(TRANS, M, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
SGEMV
subroutine ssbtrd(VECT, UPLO, N, KD, AB, LDAB, D, E, Q, LDQ, WORK, INFO)
SSBTRD
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine ssbgvx(JOBZ, RANGE, UPLO, N, KA, KB, AB, LDAB, BB, LDBB, Q, LDQ, VL, VU, IL, IU, ABSTOL, M, W, Z, LDZ, WORK, IWORK, IFAIL, INFO)
SSBGVX
subroutine sstein(N, D, E, M, W, IBLOCK, ISPLIT, Z, LDZ, WORK, IWORK, IFAIL, INFO)
SSTEIN
subroutine ssbgst(VECT, UPLO, N, KA, KB, AB, LDAB, BB, LDBB, X, LDX, WORK, INFO)
SSBGST
subroutine sswap(N, SX, INCX, SY, INCY)
SSWAP
subroutine slacpy(UPLO, M, N, A, LDA, B, LDB)
SLACPY copies all or part of one two-dimensional array to another.
subroutine ssterf(N, D, E, INFO)
SSTERF
subroutine scopy(N, SX, INCX, SY, INCY)
SCOPY