271 SUBROUTINE dspgvx( ITYPE, JOBZ, RANGE, UPLO, N, AP, BP, VL, VU,
272 $ IL, IU, ABSTOL, M, W, Z, LDZ, WORK, IWORK,
281 CHARACTER JOBZ, RANGE, UPLO
282 INTEGER IL, INFO, ITYPE, IU, LDZ, M, N
283 DOUBLE PRECISION ABSTOL, VL, VU
286 INTEGER IFAIL( * ), IWORK( * )
287 DOUBLE PRECISION AP( * ), BP( * ), W( * ), WORK( * ),
294 LOGICAL ALLEIG, INDEIG, UPPER, VALEIG, WANTZ
312 upper = lsame( uplo,
'U' )
313 wantz = lsame( jobz,
'V' )
314 alleig = lsame( range,
'A' )
315 valeig = lsame( range,
'V' )
316 indeig = lsame( range,
'I' )
319 IF( itype.LT.1 .OR. itype.GT.3 )
THEN
321 ELSE IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN
323 ELSE IF( .NOT.( alleig .OR. valeig .OR. indeig ) )
THEN
325 ELSE IF( .NOT.( upper .OR. lsame( uplo,
'L' ) ) )
THEN
327 ELSE IF( n.LT.0 )
THEN
331 IF( n.GT.0 .AND. vu.LE.vl )
THEN
334 ELSE IF( indeig )
THEN
337 ELSE IF( iu.LT.min( n, il ) .OR. iu.GT.n )
THEN
343 IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN
349 CALL xerbla(
'DSPGVX', -info )
361 CALL dpptrf( uplo, n, bp, info )
369 CALL dspgst( itype, uplo, n, ap, bp, info )
370 CALL dspevx( jobz, range, uplo, n, ap, vl, vu, il, iu, abstol, m,
371 $ w, z, ldz, work, iwork, ifail, info )
379 IF( itype.EQ.1 .OR. itype.EQ.2 )
THEN
391 CALL dtpsv( uplo, trans,
'Non-unit', n, bp, z( 1, j ),
395 ELSE IF( itype.EQ.3 )
THEN
407 CALL dtpmv( uplo, trans,
'Non-unit', n, bp, z( 1, j ),