198 SUBROUTINE chpevd( JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, LWORK,
199 $ RWORK, LRWORK, IWORK, LIWORK, INFO )
207 INTEGER INFO, LDZ, LIWORK, LRWORK, LWORK, N
211 REAL RWORK( * ), W( * )
212 COMPLEX AP( * ), WORK( * ), Z( ldz, * )
219 parameter( zero = 0.0e+0, one = 1.0e+0 )
221 parameter( cone = ( 1.0e+0, 0.0e+0 ) )
224 LOGICAL LQUERY, WANTZ
225 INTEGER IINFO, IMAX, INDE, INDRWK, INDTAU, INDWRK,
226 $ iscale, liwmin, llrwk, llwrk, lrwmin, lwmin
227 REAL ANRM, BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA,
233 EXTERNAL lsame, clanhp, slamch
246 wantz = lsame( jobz,
'V' )
247 lquery = ( lwork.EQ.-1 .OR. lrwork.EQ.-1 .OR. liwork.EQ.-1 )
250 IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN 252 ELSE IF( .NOT.( lsame( uplo,
'L' ) .OR. lsame( uplo,
'U' ) ) )
255 ELSE IF( n.LT.0 )
THEN 257 ELSE IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN 269 lrwmin = 1 + 5*n + 2*n**2
281 IF( lwork.LT.lwmin .AND. .NOT.lquery )
THEN 283 ELSE IF( lrwork.LT.lrwmin .AND. .NOT.lquery )
THEN 285 ELSE IF( liwork.LT.liwmin .AND. .NOT.lquery )
THEN 291 CALL xerbla(
'CHPEVD', -info )
293 ELSE IF( lquery )
THEN 303 w( 1 ) =
REAL( AP( 1 ) )
311 safmin = slamch(
'Safe minimum' )
312 eps = slamch(
'Precision' )
313 smlnum = safmin / eps
314 bignum = one / smlnum
315 rmin = sqrt( smlnum )
316 rmax = sqrt( bignum )
320 anrm = clanhp(
'M', uplo, n, ap, rwork )
322 IF( anrm.GT.zero .AND. anrm.LT.rmin )
THEN 325 ELSE IF( anrm.GT.rmax )
THEN 329 IF( iscale.EQ.1 )
THEN 330 CALL csscal( ( n*( n+1 ) ) / 2, sigma, ap, 1 )
339 llwrk = lwork - indwrk + 1
340 llrwk = lrwork - indrwk + 1
341 CALL chptrd( uplo, n, ap, w, rwork( inde ), work( indtau ),
347 IF( .NOT.wantz )
THEN 348 CALL ssterf( n, w, rwork( inde ), info )
350 CALL cstedc(
'I', n, w, rwork( inde ), z, ldz, work( indwrk ),
351 $ llwrk, rwork( indrwk ), llrwk, iwork, liwork,
353 CALL cupmtr(
'L', uplo,
'N', n, n, ap, work( indtau ), z, ldz,
354 $ work( indwrk ), iinfo )
359 IF( iscale.EQ.1 )
THEN 365 CALL sscal( imax, one / sigma, w, 1 )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine csscal(N, SA, CX, INCX)
CSSCAL
subroutine chptrd(UPLO, N, AP, D, E, TAU, INFO)
CHPTRD
subroutine ssterf(N, D, E, INFO)
SSTERF
subroutine sscal(N, SA, SX, INCX)
SSCAL
subroutine cupmtr(SIDE, UPLO, TRANS, M, N, AP, TAU, C, LDC, WORK, INFO)
CUPMTR
subroutine chpevd(JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, LWORK, RWORK, LRWORK, IWORK, LIWORK, INFO)
CHPEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matric...
subroutine cstedc(COMPZ, N, D, E, Z, LDZ, WORK, LWORK, RWORK, LRWORK, IWORK, LIWORK, INFO)
CSTEDC