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,