168 SUBROUTINE dspevd( JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, LWORK,
169 $ IWORK, LIWORK, INFO )
177 INTEGER INFO, LDZ, LIWORK, LWORK, N
181 DOUBLE PRECISION AP( * ), W( * ), WORK( * ), Z( LDZ, * )
187 DOUBLE PRECISION ZERO, ONE
188 parameter( zero = 0.0d+0, one = 1.0d+0 )
191 LOGICAL LQUERY, WANTZ
192 INTEGER IINFO, INDE, INDTAU, INDWRK, ISCALE, LIWMIN,
194 DOUBLE PRECISION ANRM, BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA,
199 DOUBLE PRECISION DLAMCH, DLANSP
200 EXTERNAL lsame, dlamch, dlansp
213 wantz = lsame( jobz,
'V' )
214 lquery = ( lwork.EQ.-1 .OR. liwork.EQ.-1 )
217 IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN
219 ELSE IF( .NOT.( lsame( uplo,
'U' ) .OR.
220 $ lsame( uplo,
'L' ) ) )
223 ELSE IF( n.LT.0 )
THEN
225 ELSE IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN
236 lwmin = 1 + 6*n + n**2
245 IF( lwork.LT.lwmin .AND. .NOT.lquery )
THEN
247 ELSE IF( liwork.LT.liwmin .AND. .NOT.lquery )
THEN
253 CALL xerbla(
'DSPEVD', -info )
255 ELSE IF( lquery )
THEN
273 safmin = dlamch(
'Safe minimum' )
274 eps = dlamch(
'Precision' )
275 smlnum = safmin / eps
276 bignum = one / smlnum
277 rmin = sqrt( smlnum )
278 rmax = sqrt( bignum )
282 anrm = dlansp(
'M', uplo, n, ap, work )
284 IF( anrm.GT.zero .AND. anrm.LT.rmin )
THEN
287 ELSE IF( anrm.GT.rmax )
THEN
291 IF( iscale.EQ.1 )
THEN
292 CALL dscal( ( n*( n+1 ) ) / 2, sigma, ap, 1 )
299 CALL dsptrd( uplo, n, ap, w, work( inde ), work( indtau ),
307 IF( .NOT.wantz )
THEN
308 CALL dsterf( n, w, work( inde ), info )
311 llwork = lwork - indwrk + 1
312 CALL dstedc(
'I', n, w, work( inde ), z, ldz,
314 $ llwork, iwork, liwork, info )
315 CALL dopmtr(
'L', uplo,
'N', n, n, ap, work( indtau ), z,
317 $ work( indwrk ), iinfo )
323 $
CALL dscal( n, one / sigma, w, 1 )
subroutine dspevd(jobz, uplo, n, ap, w, z, ldz, work, lwork, iwork, liwork, info)
DSPEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrice...
subroutine dstedc(compz, n, d, e, z, ldz, work, lwork, iwork, liwork, info)
DSTEDC
subroutine dopmtr(side, uplo, trans, m, n, ap, tau, c, ldc, work, info)
DOPMTR