291 SUBROUTINE ssbgvx( JOBZ, RANGE, UPLO, N, KA, KB, AB, LDAB, BB,
292 $ LDBB, Q, LDQ, VL, VU, IL, IU, ABSTOL, M, W, Z,
293 $ LDZ, WORK, IWORK, IFAIL, INFO )
300 CHARACTER JOBZ, RANGE, UPLO
301 INTEGER IL, INFO, IU, KA, KB, LDAB, LDBB, LDQ, LDZ, M,
306 INTEGER IFAIL( * ), IWORK( * )
307 REAL AB( ldab, * ), BB( ldbb, * ), Q( ldq, * ),
308 $ w( * ), work( * ), z( ldz, * )
315 parameter( zero = 0.0e+0, one = 1.0e+0 )
318 LOGICAL ALLEIG, INDEIG, TEST, UPPER, VALEIG, WANTZ
319 CHARACTER ORDER, VECT
320 INTEGER I, IINFO, INDD, INDE, INDEE, INDIBL, INDISP,
321 $ indiwo, indwrk, itmp1, j, jj, nsplit
339 wantz = lsame( jobz,
'V' )
340 upper = lsame( uplo,
'U' )
341 alleig = lsame( range,
'A' )
342 valeig = lsame( range,
'V' )
343 indeig = lsame( range,
'I' )
346 IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN 348 ELSE IF( .NOT.( alleig .OR. valeig .OR. indeig ) )
THEN 350 ELSE IF( .NOT.( upper .OR. lsame( uplo,
'L' ) ) )
THEN 352 ELSE IF( n.LT.0 )
THEN 354 ELSE IF( ka.LT.0 )
THEN 356 ELSE IF( kb.LT.0 .OR. kb.GT.ka )
THEN 358 ELSE IF( ldab.LT.ka+1 )
THEN 360 ELSE IF( ldbb.LT.kb+1 )
THEN 362 ELSE IF( ldq.LT.1 .OR. ( wantz .AND. ldq.LT.n ) )
THEN 366 IF( n.GT.0 .AND. vu.LE.vl )
368 ELSE IF( indeig )
THEN 369 IF( il.LT.1 .OR. il.GT.max( 1, n ) )
THEN 371 ELSE IF ( iu.LT.min( n, il ) .OR. iu.GT.n )
THEN 377 IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN 383 CALL xerbla(
'SSBGVX', -info )
395 CALL spbstf( uplo, n, kb, bb, ldbb, info )
403 CALL ssbgst( jobz, uplo, n, ka, kb, ab, ldab, bb, ldbb, q, ldq,
416 CALL ssbtrd( vect, uplo, n, ka, ab, ldab, work( indd ),
417 $ work( inde ), q, ldq, work( indwrk ), iinfo )
425 IF( il.EQ.1 .AND. iu.EQ.n )
THEN 429 IF( ( alleig .OR. test ) .AND. ( abstol.LE.zero ) )
THEN 430 CALL scopy( n, work( indd ), 1, w, 1 )
432 CALL scopy( n-1, work( inde ), 1, work( indee ), 1 )
433 IF( .NOT.wantz )
THEN 434 CALL ssterf( n, w, work( indee ), info )
436 CALL slacpy(
'A', n, n, q, ldq, z, ldz )
437 CALL ssteqr( jobz, n, w, work( indee ), z, ldz,
438 $ work( indwrk ), info )
463 CALL sstebz( range, order, n, vl, vu, il, iu, abstol,
464 $ work( indd ), work( inde ), m, nsplit, w,
465 $ iwork( indibl ), iwork( indisp ), work( indwrk ),
466 $ iwork( indiwo ), info )
469 CALL sstein( n, work( indd ), work( inde ), m, w,
470 $ iwork( indibl ), iwork( indisp ), z, ldz,
471 $ work( indwrk ), iwork( indiwo ), ifail, info )
477 CALL scopy( n, z( 1, j ), 1, work( 1 ), 1 )
478 CALL sgemv(
'N', n, n, one, q, ldq, work, 1, zero,
493 IF( w( jj ).LT.tmp1 )
THEN 500 itmp1 = iwork( indibl+i-1 )
502 iwork( indibl+i-1 ) = iwork( indibl+j-1 )
504 iwork( indibl+j-1 ) = itmp1
505 CALL sswap( n, z( 1, i ), 1, z( 1, j ), 1 )
508 ifail( i ) = ifail( j )
subroutine ssteqr(COMPZ, N, D, E, Z, LDZ, WORK, INFO)
SSTEQR
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine sstebz(RANGE, ORDER, N, VL, VU, IL, IU, ABSTOL, D, E, M, NSPLIT, W, IBLOCK, ISPLIT, WORK, IWORK, INFO)
SSTEBZ
subroutine spbstf(UPLO, N, KD, AB, LDAB, INFO)
SPBSTF
subroutine sswap(N, SX, INCX, SY, INCY)
SSWAP
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 ssbtrd(VECT, UPLO, N, KD, AB, LDAB, D, E, Q, LDQ, WORK, INFO)
SSBTRD
subroutine sstein(N, D, E, M, W, IBLOCK, ISPLIT, Z, LDZ, WORK, IWORK, IFAIL, INFO)
SSTEIN
subroutine scopy(N, SX, INCX, SY, INCY)
SCOPY
subroutine ssterf(N, D, E, INFO)
SSTERF
subroutine ssbgst(VECT, UPLO, N, KA, KB, AB, LDAB, BB, LDBB, X, LDX, WORK, INFO)
SSBGST
subroutine sgemv(TRANS, M, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
SGEMV
subroutine slacpy(UPLO, M, N, A, LDA, B, LDB)
SLACPY copies all or part of one two-dimensional array to another.