294 SUBROUTINE ssygvx( ITYPE, JOBZ, RANGE, UPLO, N, A, LDA, B, LDB,
295 $ VL, VU, IL, IU, ABSTOL, M, W, Z, LDZ, WORK,
296 $ LWORK, IWORK, IFAIL, INFO )
303 CHARACTER JOBZ, RANGE, UPLO
304 INTEGER IL, INFO, ITYPE, IU, LDA, LDB, LDZ, LWORK, M, N
308 INTEGER IFAIL( * ), IWORK( * )
309 REAL A( LDA, * ), B( LDB, * ), W( * ), WORK( * ),
317 PARAMETER ( ONE = 1.0e+0 )
320 LOGICAL ALLEIG, INDEIG, LQUERY, UPPER, VALEIG, WANTZ
322 INTEGER LWKMIN, LWKOPT, NB
328 EXTERNAL ilaenv, lsame, sroundup_lwork
340 upper = lsame( uplo,
'U' )
341 wantz = lsame( jobz,
'V' )
342 alleig = lsame( range,
'A' )
343 valeig = lsame( range,
'V' )
344 indeig = lsame( range,
'I' )
345 lquery = ( lwork.EQ.-1 )
348 IF( itype.LT.1 .OR. itype.GT.3 )
THEN
350 ELSE IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN
352 ELSE IF( .NOT.( alleig .OR. valeig .OR. indeig ) )
THEN
354 ELSE IF( .NOT.( upper .OR. lsame( uplo,
'L' ) ) )
THEN
356 ELSE IF( n.LT.0 )
THEN
358 ELSE IF( lda.LT.max( 1, n ) )
THEN
360 ELSE IF( ldb.LT.max( 1, n ) )
THEN
364 IF( n.GT.0 .AND. vu.LE.vl )
366 ELSE IF( indeig )
THEN
367 IF( il.LT.1 .OR. il.GT.max( 1, n ) )
THEN
369 ELSE IF( iu.LT.min( n, il ) .OR. iu.GT.n )
THEN
375 IF (ldz.LT.1 .OR. (wantz .AND. ldz.LT.n))
THEN
381 lwkmin = max( 1, 8*n )
382 nb = ilaenv( 1,
'SSYTRD', uplo, n, -1, -1, -1 )
383 lwkopt = max( lwkmin, ( nb + 3 )*n )
384 work( 1 ) = sroundup_lwork(lwkopt)
386 IF( lwork.LT.lwkmin .AND. .NOT.lquery )
THEN
392 CALL xerbla(
'SSYGVX', -info )
394 ELSE IF( lquery )
THEN
407 CALL spotrf( uplo, n, b, ldb, info )
415 CALL ssygst( itype, uplo, n, a, lda, b, ldb, info )
416 CALL ssyevx( jobz, range, uplo, n, a, lda, vl, vu, il, iu, abstol,
417 $ m, w, z, ldz, work, lwork, iwork, ifail, info )
425 IF( itype.EQ.1 .OR. itype.EQ.2 )
THEN
436 CALL strsm(
'Left', uplo, trans,
'Non-unit', n, m, one, b,
439 ELSE IF( itype.EQ.3 )
THEN
450 CALL strmm(
'Left', uplo, trans,
'Non-unit', n, m, one, b,
457 work( 1 ) = sroundup_lwork(lwkopt)
subroutine xerbla(srname, info)
subroutine ssyevx(jobz, range, uplo, n, a, lda, vl, vu, il, iu, abstol, m, w, z, ldz, work, lwork, iwork, ifail, info)
SSYEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matrices
subroutine ssygst(itype, uplo, n, a, lda, b, ldb, info)
SSYGST
subroutine ssygvx(itype, jobz, range, uplo, n, a, lda, b, ldb, vl, vu, il, iu, abstol, m, w, z, ldz, work, lwork, iwork, ifail, info)
SSYGVX
subroutine spotrf(uplo, n, a, lda, info)
SPOTRF
subroutine strmm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
STRMM
subroutine strsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
STRSM