237 SUBROUTINE chpevx( JOBZ, RANGE, UPLO, N, AP, VL, VU, IL, IU,
238 $ ABSTOL, M, W, Z, LDZ, WORK, RWORK, IWORK,
246 CHARACTER JOBZ, RANGE, UPLO
247 INTEGER IL, INFO, IU, LDZ, , N
251 INTEGER IFAIL( * ), IWORK( * )
252 REAL RWORK( * ), W( * )
253 COMPLEX AP( * ), WORK( * ), Z( LDZ, * )
260 PARAMETER ( ZERO = 0.0e0, one = 1.0e0 )
262 parameter( cone = ( 1.0e0, 0.0e0 ) )
265 LOGICAL , INDEIG, TEST, VALEIG, WANTZ
267 INTEGER I, IINFO, IMAX, INDD, INDE, INDEE, INDIBL,
268 $ indisp, indiwk, indrwk, indtau, indwrk, iscale,
269 $ itmp1, j, jj, nsplit
270 REAL ABSTLL, ANRM, BIGNUM, EPS, RMAX, RMIN, SAFMIN,
271 $ SIGMA, SMLNUM, TMP1, VLL, VUU
276 EXTERNAL lsame, clanhp, slamch
283 INTRINSIC max,
min, real, sqrt
289 wantz = lsame( jobz,
'V' )
290 alleig = lsame( range,
'A' )
291 valeig = lsame( range,
'V' )
292 indeig = lsame( range,
'I' )
295 IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN
297 ELSE IF( .NOT.( alleig .OR. valeig .OR. indeig ) )
THEN
299 ELSE IF( .NOT.( lsame( uplo, 'l.OR.
' ) LSAME( UPLO, 'u
' ) ) )
302.LT.
ELSE IF( N0 ) THEN
306.GT..AND..LE.
IF( N0 VUVL )
308 ELSE IF( INDEIG ) THEN
309.LT..OR..GT.
IF( IL1 ILMAX( 1, N ) ) THEN
311.LT..OR..GT.
ELSE IF( IUMIN( N, IL ) IUN ) THEN
317.LT..OR..AND..LT.
IF( LDZ1 ( WANTZ LDZN ) )
322 CALL XERBLA( 'chpevx', -INFO )
333.OR.
IF( ALLEIG INDEIG ) THEN
335 W( 1 ) = REAL( AP( 1 ) )
337.LT..AND..GE.
IF( VLREAL( AP( 1 ) ) VUREAL( AP( 1 ) ) ) THEN
339 W( 1 ) = REAL( AP( 1 ) )
349 SAFMIN = SLAMCH( 'safe minimum
' )
350 EPS = SLAMCH( 'precision
' )
351 SMLNUM = SAFMIN / EPS
352 BIGNUM = ONE / SMLNUM
353 RMIN = SQRT( SMLNUM )
354 RMAX = MIN( SQRT( BIGNUM ), ONE / SQRT( SQRT( SAFMIN ) ) )
367 ANRM = CLANHP( 'm
', UPLO, N, AP, RWORK )
368.GT..AND..LT.
IF( ANRMZERO ANRMRMIN ) THEN
371.GT.
ELSE IF( ANRMRMAX ) THEN
375.EQ.
IF( ISCALE1 ) THEN
376 CALL CSSCAL( ( N*( N+1 ) ) / 2, SIGMA, AP, 1 )
378 $ ABSTLL = ABSTOL*SIGMA
392 CALL CHPTRD( UPLO, N, AP, RWORK( INDD ), RWORK( INDE ),
393 $ WORK( INDTAU ), IINFO )
401.EQ..AND..EQ.
IF (IL1 IUN) THEN
405.OR..AND..LE.
IF ((ALLEIG TEST) (ABSTOLZERO)) THEN
406 CALL SCOPY( N, RWORK( INDD ), 1, W, 1 )
408.NOT.
IF( WANTZ ) THEN
409 CALL SCOPY( N-1, RWORK( INDE ), 1, RWORK( INDEE ), 1 )
410 CALL SSTERF( N, W, RWORK( INDEE ), INFO )
412 CALL CUPGTR( UPLO, N, AP, WORK( INDTAU ), Z, LDZ,
413 $ WORK( INDWRK ), IINFO )
414 CALL SCOPY( N-1, RWORK( INDE ), 1, RWORK( INDEE ), 1 )
415 CALL CSTEQR( JOBZ, N, W, RWORK( INDEE ), Z, LDZ,
416 $ RWORK( INDRWK ), INFO )
440 CALL SSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL,
441 $ RWORK( INDD ), RWORK( INDE ), M, NSPLIT, W,
442 $ IWORK( INDIBL ), IWORK( INDISP ), RWORK( INDRWK ),
443 $ IWORK( INDIWK ), INFO )
446 CALL CSTEIN( N, RWORK( INDD ), RWORK( INDE ), M, W,
447 $ IWORK( INDIBL ), IWORK( INDISP ), Z, LDZ,
448 $ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, INFO )
454 CALL CUPMTR( 'l
', UPLO, 'n
', N, M, AP, WORK( INDTAU ), Z, LDZ,
455 $ WORK( INDWRK ), IINFO )
461.EQ.
IF( ISCALE1 ) THEN
467 CALL SSCAL( IMAX, ONE / SIGMA, W, 1 )
478.LT.
IF( W( JJ )TMP1 ) THEN
485 ITMP1 = IWORK( INDIBL+I-1 )
487 IWORK( INDIBL+I-1 ) = IWORK( INDIBL+J-1 )
489 IWORK( INDIBL+J-1 ) = ITMP1
490 CALL CSWAP( N, Z( 1, I ), 1, Z( 1, J ), 1 )
493 IFAIL( I ) = IFAIL( J )
subroutine sstebz(range, order, n, vl, vu, il, iu, abstol, d, e, m, nsplit, w, iblock, isplit, work, iwork, info)
SSTEBZ
subroutine ssterf(n, d, e, info)
SSTERF
subroutine xerbla(srname, info)
XERBLA
subroutine cstein(n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifail, info)
CSTEIN
subroutine cupgtr(uplo, n, ap, tau, q, ldq, work, info)
CUPGTR
subroutine cupmtr(side, uplo, trans, m, n, ap, tau, c, ldc, work, info)
CUPMTR
subroutine chptrd(uplo, n, ap, d, e, tau, info)
CHPTRD
subroutine csteqr(compz, n, d, e, z, ldz, work, info)
CSTEQR
subroutine chpevx(jobz, range, uplo, n, ap, vl, vu, il, iu, abstol, m, w, z, ldz, work, rwork, iwork, ifail, info)
CHPEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrice...
subroutine cswap(n, cx, incx, cy, incy)
CSWAP
subroutine csscal(n, sa, cx, incx)
CSSCAL
subroutine sscal(n, sa, sx, incx)
SSCAL
subroutine scopy(n, sx, incx, sy, incy)
SCOPY