292 SUBROUTINE dsygvx( 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
303 DOUBLE PRECISION ABSTOL, VL, VU
306 INTEGER IFAIL( * ), IWORK( * )
307 DOUBLE PRECISION A( LDA, * ), B( LDB, * ), W( * ), WORK( * ),
315 PARAMETER ( ONE = 1.0d+0 )
318 LOGICAL ALLEIG, INDEIG, LQUERY, UPPER, VALEIG, WANTZ
320 INTEGER LWKMIN, LWKOPT, NB
325 EXTERNAL lsame, ilaenv
338 upper = lsame( uplo,
'U' )
339 wantz = lsame( jobz,
'V' )
340 alleig = lsame( range,
'A' )
341 valeig = lsame( range,
'V' )
342 indeig = lsame( range,
'I' )
343 lquery = ( lwork.EQ.-1 )
346 IF( itype.LT.1 .OR. itype.GT.3 )
THEN
348 ELSE IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN
350 ELSE IF( .NOT.( alleig .OR. valeig .OR. indeig ) )
THEN
352 ELSE IF( .NOT.( upper .OR. lsame( uplo,
'L' ) ) )
THEN
354 ELSE IF( n.LT.0 )
THEN
356 ELSE IF( lda.LT.max( 1, n ) )
THEN
358 ELSE IF( ldb.LT.max( 1, n ) )
THEN
362 IF( n.GT.0 .AND. vu.LE.vl )
364 ELSE IF( indeig )
THEN
365 IF( il.LT.1 .OR. il.GT.max( 1, n ) )
THEN
367 ELSE IF( iu.LT.min( n, il ) .OR. iu.GT.n )
THEN
373 IF (ldz.LT.1 .OR. (wantz .AND. ldz.LT.n))
THEN
379 lwkmin = max( 1, 8*n )
380 nb = ilaenv( 1,
'DSYTRD', uplo, n, -1, -1, -1 )
381 lwkopt = max( lwkmin, ( nb + 3 )*n )
384 IF( lwork.LT.lwkmin .AND. .NOT.lquery )
THEN
390 CALL xerbla(
'DSYGVX', -info )
392 ELSE IF( lquery )
THEN
405 CALL dpotrf( uplo, n, b, ldb, info )
413 CALL dsygst( itype, uplo, n, a, lda, b, ldb, info )
414 CALL dsyevx( jobz, range, uplo, n, a, lda, vl, vu, il, iu,
416 $ m, w, z, ldz, work, lwork, iwork, ifail, info )
424 IF( itype.EQ.1 .OR. itype.EQ.2 )
THEN
435 CALL dtrsm(
'Left', uplo, trans,
'Non-unit', n, m, one,
439 ELSE IF( itype.EQ.3 )
THEN
450 CALL dtrmm(
'Left', uplo, trans,
'Non-unit', n, m, one,
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
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 dtrmm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
DTRMM
subroutine dtrsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
DTRSM