117 SUBROUTINE sstev( JOBZ, N, D, E, Z, LDZ, WORK, INFO )
129 REAL d( * ), e( * ), work( * ), z( ldz, * )
136 parameter( zero = 0.0e0, one = 1.0e0 )
141 REAL bignum, eps, rmax, rmin, safmin, sigma, smlnum,
159 wantz =
lsame( jobz,
'V' )
162 IF( .NOT.( wantz .OR.
lsame( jobz,
'N' ) ) )
THEN
164 ELSE IF( n.LT.0 )
THEN
166 ELSE IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN
171 CALL
xerbla(
'SSTEV ', -info )
188 safmin =
slamch(
'Safe minimum' )
189 eps =
slamch(
'Precision' )
190 smlnum = safmin / eps
191 bignum = one / smlnum
192 rmin = sqrt( smlnum )
193 rmax = sqrt( bignum )
198 tnrm =
slanst(
'M', n, d, e )
199 IF( tnrm.GT.zero .AND. tnrm.LT.rmin )
THEN
202 ELSE IF( tnrm.GT.rmax )
THEN
206 IF( iscale.EQ.1 )
THEN
207 CALL
sscal( n, sigma, d, 1 )
208 CALL
sscal( n-1, sigma, e( 1 ), 1 )
214 IF( .NOT.wantz )
THEN
215 CALL
ssterf( n, d, e, info )
217 CALL
ssteqr(
'I', n, d, e, z, ldz, work, info )
222 IF( iscale.EQ.1 )
THEN
228 CALL
sscal( imax, one / sigma, d, 1 )
subroutine xerbla(SRNAME, INFO)
XERBLA
logical function lsame(CA, CB)
LSAME
real function slanst(NORM, N, D, E)
SLANST returns the value of the 1-norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a real symmetric tridiagonal matrix.
real function slamch(CMACH)
SLAMCH
subroutine ssterf(N, D, E, INFO)
SSTERF
subroutine ssteqr(COMPZ, N, D, E, Z, LDZ, WORK, INFO)
SSTEQR
subroutine sstev(JOBZ, N, D, E, Z, LDZ, WORK, INFO)
SSTEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrice...
subroutine sscal(N, SA, SX, INCX)
SSCAL