129SUBROUTINE sspev( JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, INFO )
140 REAL AP( * ), W( * ), WORK( * ), Z( LDZ, * )
147 parameter( zero = 0.0e0, one = 1.0e0 )
151 INTEGER IINFO, IMAX, INDE, INDTAU, INDWRK,
152 REAL ANRM, BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA,
170 wantz = lsame( jobz,
'V' )
173 IF( .NOT.( wantz .OR.
'N' ) ) )
THEN
175 ELSE IF( .NOT.( lsame( uplo,
'U' ) .OR. lsame( uplo,
'L' ) ) )
178 ELSE IF( n.LT.0 )
THEN
180 ELSE IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN
185 CALL xerbla(
'SSPEV ', -info )
203 safmin = slamch(
'Safe minimum' )
204 eps = slamch(
'Precision' )
205 smlnum = safmin / eps
206 bignum = one / smlnum
207 rmin = sqrt( smlnum )
208 rmax = sqrt( bignum )
212 anrm =
slansp(
'M', uplo, n, ap, work )
214 IF( anrm.GT.zero .AND. anrm.LT.rmin )
THEN
217 ELSE IF( anrm.GT.rmax )
THEN
221 IF( iscale.EQ.1 )
THEN
222 CALL sscal( ( n*( n+1 ) ) / 2, sigma, ap, 1 )
229 CALL ssptrd( uplo, n, ap, w, work( inde ), work( indtau ), iinfo )
234 IF( .NOT.wantz )
THEN
235 CALL ssterf( n, w, work( inde ), info )
238 CALL sopgtr( uplo, n, ap, work( indtau ), z, ldz
239 $ work( indwrk ), iinfo )
240 CALL ssteqr( jobz, n, w, work( inde ), z, ldz, work( indtau ),
246 IF( iscale.EQ.1 )
THEN
252 CALL sscal( imax, one / sigma, w, 1 )
subroutine ssteqr(compz, n, d, e, z, ldz, work, info)
SSTEQR
real function slansp(norm, uplo, n, ap, work)
SLANSP returns the value of the 1-norm, or the Frobenius norm, or the infinity norm,...
subroutine sopgtr(uplo, n, ap, tau, q, ldq, work, info)
SOPGTR
subroutine ssptrd(uplo, n, ap, d, e, tau, info)
SSPTRD
subroutine sspev(jobz, uplo, n, ap, w, z, ldz, work, info)
SSPEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrices