129 SUBROUTINE 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, ISCALE
152 REAL ANRM, BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA,
158 EXTERNAL lsame, slamch, slansp
170 wantz = lsame( jobz,
'V' )
173 IF( .NOT.( wantz .OR. lsame( jobz,
'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 xerbla(srname, info)
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
subroutine ssptrd(uplo, n, ap, d, e, tau, info)
SSPTRD
subroutine sscal(n, sa, sx, incx)
SSCAL
subroutine ssteqr(compz, n, d, e, z, ldz, work, info)
SSTEQR
subroutine ssterf(n, d, e, info)
SSTERF
subroutine sopgtr(uplo, n, ap, tau, q, ldq, work, info)
SOPGTR