296 SUBROUTINE dsygvx( ITYPE, JOBZ, RANGE, UPLO, N, A, LDA, B, LDB,
297 $ VL, VU, IL, IU, ABSTOL, M, W, Z, LDZ, WORK,
298 $ LWORK, IWORK, IFAIL, INFO )
306 CHARACTER JOBZ, RANGE, UPLO
307 INTEGER IL, INFO, ITYPE, IU, LDA, LDB, LDZ, LWORK, M, N
308 DOUBLE PRECISION ABSTOL, VL, VU
311 INTEGER IFAIL( * ), IWORK( * )
312 DOUBLE PRECISION A( lda, * ), B( ldb, * ), W( * ), WORK( * ),
320 parameter( one = 1.0d+0 )
323 LOGICAL ALLEIG, INDEIG, LQUERY, UPPER, VALEIG, WANTZ
325 INTEGER LWKMIN, LWKOPT, NB
330 EXTERNAL lsame, ilaenv
342 upper = lsame( uplo,
'U' )
343 wantz = lsame( jobz,
'V' )
344 alleig = lsame( range,
'A' )
345 valeig = lsame( range,
'V' )
346 indeig = lsame( range,
'I' )
347 lquery = ( lwork.EQ.-1 )
350 IF( itype.LT.1 .OR. itype.GT.3 )
THEN 352 ELSE IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN 354 ELSE IF( .NOT.( alleig .OR. valeig .OR. indeig ) )
THEN 356 ELSE IF( .NOT.( upper .OR. lsame( uplo,
'L' ) ) )
THEN 358 ELSE IF( n.LT.0 )
THEN 360 ELSE IF( lda.LT.max( 1, n ) )
THEN 362 ELSE IF( ldb.LT.max( 1, 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 lwkmin = max( 1, 8*n )
384 nb = ilaenv( 1,
'DSYTRD', uplo, n, -1, -1, -1 )
385 lwkopt = max( lwkmin, ( nb + 3 )*n )
388 IF( lwork.LT.lwkmin .AND. .NOT.lquery )
THEN 394 CALL xerbla(
'DSYGVX', -info )
396 ELSE IF( lquery )
THEN 409 CALL dpotrf( uplo, n, b, ldb, info )
417 CALL dsygst( itype, uplo, n, a, lda, b, ldb, info )
418 CALL dsyevx( jobz, range, uplo, n, a, lda, vl, vu, il, iu, abstol,
419 $ m, w, z, ldz, work, lwork, iwork, ifail, info )
427 IF( itype.EQ.1 .OR. itype.EQ.2 )
THEN 438 CALL dtrsm(
'Left', uplo, trans,
'Non-unit', n, m, one, b,
441 ELSE IF( itype.EQ.3 )
THEN 452 CALL dtrmm(
'Left', uplo, trans,
'Non-unit', n, m, one, b,
subroutine dtrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
DTRSM
subroutine dpotrf(UPLO, N, A, LDA, INFO)
DPOTRF
subroutine dtrmm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
DTRMM
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine dsygvx(ITYPE, JOBZ, RANGE, UPLO, N, A, LDA, B, LDB, VL, VU, IL, IU, ABSTOL, M, W, Z, LDZ, WORK, LWORK, IWORK, IFAIL, INFO)
DSYGVX
subroutine dsygst(ITYPE, UPLO, N, A, LDA, B, LDB, INFO)
DSYGST
subroutine dsyevx(JOBZ, RANGE, UPLO, N, A, LDA, VL, VU, IL, IU, ABSTOL, M, W, Z, LDZ, WORK, LWORK, IWORK, IFAIL, INFO)
DSYEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matrices ...