267 SUBROUTINE zhpgvx( ITYPE, JOBZ, RANGE, UPLO, N, AP, BP, VL, VU,
268 $ il, iu, abstol, m, w, z, ldz, work, rwork,
269 $ iwork, ifail, info )
277 CHARACTER jobz, range, uplo
278 INTEGER il, info, itype, iu, ldz, m, n
279 DOUBLE PRECISION abstol, vl, vu
282 INTEGER ifail( * ), iwork( * )
283 DOUBLE PRECISION rwork( * ), w( * )
284 COMPLEX*16 ap( * ), bp( * ), work( * ), z( ldz, * )
290 LOGICAL alleig, indeig, upper, valeig, wantz
308 wantz =
lsame( jobz,
'V' )
309 upper =
lsame( uplo,
'U' )
310 alleig =
lsame( range,
'A' )
311 valeig =
lsame( range,
'V' )
312 indeig =
lsame( range,
'I' )
315 IF( itype.LT.1 .OR. itype.GT.3 )
THEN
317 ELSE IF( .NOT.( wantz .OR.
lsame( jobz,
'N' ) ) )
THEN
319 ELSE IF( .NOT.( alleig .OR. valeig .OR. indeig ) )
THEN
321 ELSE IF( .NOT.( upper .OR.
lsame( uplo,
'L' ) ) )
THEN
323 ELSE IF( n.LT.0 )
THEN
327 IF( n.GT.0 .AND. vu.LE.vl )
THEN
330 ELSE IF( indeig )
THEN
333 ELSE IF( iu.LT.min( n, il ) .OR. iu.GT.n )
THEN
339 IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN
345 CALL
xerbla(
'ZHPGVX', -info )
356 CALL
zpptrf( uplo, n, bp, info )
364 CALL
zhpgst( itype, uplo, n, ap, bp, info )
365 CALL
zhpevx( jobz, range, uplo, n, ap, vl, vu, il, iu, abstol, m,
366 $ w, z, ldz, work, rwork, iwork, ifail, info )
374 IF( itype.EQ.1 .OR. itype.EQ.2 )
THEN
386 CALL
ztpsv( uplo, trans,
'Non-unit', n, bp, z( 1, j ),
390 ELSE IF( itype.EQ.3 )
THEN
402 CALL
ztpmv( uplo, trans,
'Non-unit', n, bp, z( 1, j ),