131 SUBROUTINE dspev( JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, INFO )
143 DOUBLE PRECISION AP( * ), W( * ), WORK( * ), Z( ldz, * )
149 DOUBLE PRECISION ZERO, ONE
150 parameter ( zero = 0.0d0, one = 1.0d0 )
154 INTEGER IINFO, IMAX, INDE, INDTAU, INDWRK, ISCALE
155 DOUBLE PRECISION ANRM, BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA,
160 DOUBLE PRECISION DLAMCH, DLANSP
161 EXTERNAL lsame, dlamch, dlansp
173 wantz = lsame( jobz,
'V' )
176 IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN
178 ELSE IF( .NOT.( lsame( uplo,
'U' ) .OR. lsame( uplo,
'L' ) ) )
181 ELSE IF( n.LT.0 )
THEN
183 ELSE IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN
188 CALL xerbla(
'DSPEV ', -info )
206 safmin = dlamch(
'Safe minimum' )
207 eps = dlamch(
'Precision' )
208 smlnum = safmin / eps
209 bignum = one / smlnum
210 rmin = sqrt( smlnum )
211 rmax = sqrt( bignum )
215 anrm = dlansp(
'M', uplo, n, ap, work )
217 IF( anrm.GT.zero .AND. anrm.LT.rmin )
THEN
220 ELSE IF( anrm.GT.rmax )
THEN
224 IF( iscale.EQ.1 )
THEN
225 CALL dscal( ( n*( n+1 ) ) / 2, sigma, ap, 1 )
232 CALL dsptrd( uplo, n, ap, w, work( inde ), work( indtau ), iinfo )
237 IF( .NOT.wantz )
THEN
238 CALL dsterf( n, w, work( inde ), info )
241 CALL dopgtr( uplo, n, ap, work( indtau ), z, ldz,
242 $ work( indwrk ), iinfo )
243 CALL dsteqr( jobz, n, w, work( inde ), z, ldz, work( indtau ),
249 IF( iscale.EQ.1 )
THEN
255 CALL dscal( imax, one / sigma, w, 1 )
subroutine dsteqr(COMPZ, N, D, E, Z, LDZ, WORK, INFO)
DSTEQR
subroutine dsterf(N, D, E, INFO)
DSTERF
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine dsptrd(UPLO, N, AP, D, E, TAU, INFO)
DSPTRD
subroutine dscal(N, DA, DX, INCX)
DSCAL
subroutine dspev(JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, INFO)
DSPEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrice...
subroutine dopgtr(UPLO, N, AP, TAU, Q, LDQ, WORK, INFO)
DOPGTR