117 SUBROUTINE dstev( JOBZ, N, D, E, Z, LDZ, WORK, INFO )
129 DOUBLE PRECISION d( * ), e( * ), work( * ), z( ldz, * )
135 DOUBLE PRECISION zero, one
136 parameter( zero = 0.0d0, one = 1.0d0 )
141 DOUBLE PRECISION 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(
'DSTEV ', -info )
188 safmin =
dlamch(
'Safe minimum' )
189 eps =
dlamch(
'Precision' )
190 smlnum = safmin / eps
191 bignum = one / smlnum
192 rmin = sqrt( smlnum )
193 rmax = sqrt( bignum )
198 tnrm =
dlanst(
'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
dscal( n, sigma, d, 1 )
208 CALL
dscal( n-1, sigma, e( 1 ), 1 )
214 IF( .NOT.wantz )
THEN
215 CALL
dsterf( n, d, e, info )
217 CALL
dsteqr(
'I', n, d, e, z, ldz, work, info )
222 IF( iscale.EQ.1 )
THEN
228 CALL
dscal( imax, one / sigma, d, 1 )