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, 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 )
462 CALL sstebz( range, order, n, vl, vu, il, iu, abstol,
463 $ work( indd ), work( inde ), m, nsplit, w,
464 $ iwork( 1 ), iwork( indisp ), work( indwrk ),
465 $ iwork( indiwo ), info )
468 CALL sstein( n, work( indd ), work( inde ), m, w,
469 $ iwork( 1 ), iwork( indisp ), z, ldz,
470 $ work( indwrk ), iwork( indiwo ), ifail, info )
476 CALL scopy( n, z( 1, j ), 1, work( 1 ), 1 )
477 CALL sgemv(
'N', n, n, one, q, ldq, work, 1, zero,
492 IF( w( jj ).LT.tmp1 )
THEN
499 itmp1 = iwork( 1 + i-1 )
501 iwork( 1 + i-1 ) = iwork( 1 + j-1 )
503 iwork( 1 + j-1 ) = itmp1
504 CALL sswap( n, z( 1, i ), 1, z( 1, j ), 1 )
507 ifail( i ) = ifail( j )
subroutine xerbla(srname, info)
subroutine scopy(n, sx, incx, sy, incy)
SCOPY
subroutine sgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy)
SGEMV
subroutine ssbgst(vect, uplo, n, ka, kb, ab, ldab, bb, ldbb, x, ldx, work, info)
SSBGST
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 slacpy(uplo, m, n, a, lda, b, ldb)
SLACPY copies all or part of one two-dimensional array to another.
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 sstein(n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifail, info)
SSTEIN
subroutine ssteqr(compz, n, d, e, z, ldz, work, info)
SSTEQR
subroutine ssterf(n, d, e, info)
SSTERF
subroutine sswap(n, sx, incx, sy, incy)
SSWAP