262 SUBROUTINE dspgvx( ITYPE, JOBZ, RANGE, UPLO, N, AP, BP, VL, VU,
263 $ il, iu, abstol, m, w, z, ldz, work, iwork,
272 CHARACTER jobz, range, uplo
273 INTEGER il, info, itype, iu, ldz, m, n
274 DOUBLE PRECISION abstol, vl, vu
277 INTEGER ifail( * ), iwork( * )
278 DOUBLE PRECISION ap( * ), bp( * ), w( * ), work( * ),
285 LOGICAL alleig, indeig, upper, valeig, wantz
303 upper =
lsame( uplo,
'U' )
304 wantz =
lsame( jobz,
'V' )
305 alleig =
lsame( range,
'A' )
306 valeig =
lsame( range,
'V' )
307 indeig =
lsame( range,
'I' )
310 IF( itype.LT.1 .OR. itype.GT.3 )
THEN
312 ELSE IF( .NOT.( wantz .OR.
lsame( jobz,
'N' ) ) )
THEN
314 ELSE IF( .NOT.( alleig .OR. valeig .OR. indeig ) )
THEN
316 ELSE IF( .NOT.( upper .OR.
lsame( uplo,
'L' ) ) )
THEN
318 ELSE IF( n.LT.0 )
THEN
322 IF( n.GT.0 .AND. vu.LE.vl )
THEN
325 ELSE IF( indeig )
THEN
328 ELSE IF( iu.LT.min( n, il ) .OR. iu.GT.n )
THEN
334 IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN
340 CALL
xerbla(
'DSPGVX', -info )
352 CALL
dpptrf( uplo, n, bp, info )
360 CALL
dspgst( itype, uplo, n, ap, bp, info )
361 CALL
dspevx( jobz, range, uplo, n, ap, vl, vu, il, iu, abstol, m,
362 $ w, z, ldz, work, iwork, ifail, info )
370 IF( itype.EQ.1 .OR. itype.EQ.2 )
THEN
382 CALL
dtpsv( uplo, trans,
'Non-unit', n, bp, z( 1, j ),
386 ELSE IF( itype.EQ.3 )
THEN
398 CALL
dtpmv( uplo, trans,
'Non-unit', n, bp, z( 1, j ),