292 SUBROUTINE ssygvx( ITYPE, JOBZ, RANGE, UPLO, N, A, LDA, B, LDB,
293 $ VL, VU, IL, IU, ABSTOL, M, W, Z, LDZ, WORK,
294 $ LWORK, IWORK, IFAIL, INFO )
301 CHARACTER JOBZ, RANGE, UPLO
302 INTEGER IL, INFO, ITYPE, IU, LDA, LDB, LDZ, LWORK, M, N
306 INTEGER IFAIL( * ), IWORK( * )
307 REAL A( LDA, * ), B( LDB, * ), W( * ), WORK( * ),
315 PARAMETER ( ONE = 1.0e+0 )
318 LOGICAL ALLEIG, INDEIG, LQUERY, UPPER, VALEIG, WANTZ
320 INTEGER LWKMIN, LWKOPT, NB
326 EXTERNAL ilaenv, lsame, sroundup_lwork
339 upper = lsame( uplo,
'U' )
340 wantz = lsame( jobz,
'V' )
341 alleig = lsame( range,
'A' )
342 valeig = lsame( range,
'V' )
343 indeig = lsame( range,
'I' )
344 lquery = ( lwork.EQ.-1 )
347 IF( itype.LT.1 .OR. itype.GT.3 )
THEN
349 ELSE 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( lda.LT.max( 1, n ) )
THEN
359 ELSE IF( ldb.LT.max( 1, n ) )
THEN
363 IF( n.GT.0 .AND. vu.LE.vl )
365 ELSE IF( indeig )
THEN
366 IF( il.LT.1 .OR. il.GT.max( 1, n ) )
THEN
368 ELSE IF( iu.LT.min( n, il ) .OR. iu.GT.n )
THEN
374 IF (ldz.LT.1 .OR. (wantz .AND. ldz.LT.n))
THEN
380 lwkmin = max( 1, 8*n )
381 nb = ilaenv( 1,
'SSYTRD', uplo, n, -1, -1, -1 )
382 lwkopt = max( lwkmin, ( nb + 3 )*n )
383 work( 1 ) = sroundup_lwork(lwkopt)
385 IF( lwork.LT.lwkmin .AND. .NOT.lquery )
THEN
391 CALL xerbla(
'SSYGVX', -info )
393 ELSE IF( lquery )
THEN
406 CALL spotrf( uplo, n, b, ldb, info )
414 CALL ssygst( itype, uplo, n, a, lda, b, ldb, info )
415 CALL ssyevx( jobz, range, uplo, n, a, lda, vl, vu, il, iu,
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,
440 ELSE IF( itype.EQ.3 )
THEN
451 CALL strmm(
'Left', uplo, trans,
'Non-unit', n, m, one,
459 work( 1 ) = sroundup_lwork(lwkopt)
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 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 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