1 SUBROUTINE dstev( JOBZ, N, D, E, Z, LDZ, WORK, INFO )
13 DOUBLE PRECISION D( * ), E( * ), WORK( * ), Z( LDZ, * )
65 DOUBLE PRECISION ZERO, ONE
66 parameter( zero = 0.0d0, one = 1.0d0 )
71 DOUBLE PRECISION BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA, SMLNUM,
76 DOUBLE PRECISION DLAMCH, DLANST
77 EXTERNAL lsame, dlamch, dlanst
89 wantz = lsame( jobz,
'V' )
92 IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN
94 ELSE IF( n.LT.0 )
THEN
96 ELSE IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN
101 CALL xerbla(
'DSTEV ', -info )
118 safmin = dlamch(
'Safe minimum' )
119 eps = dlamch(
'Precision' )
120 smlnum = safmin / eps
121 bignum = one / smlnum
122 rmin = sqrt( smlnum )
123 rmax = sqrt( bignum )
128 tnrm = dlanst(
'M', n, d, e )
129 IF( tnrm.GT.zero .AND. tnrm.LT.rmin )
THEN
132 ELSE IF( tnrm.GT.rmax )
THEN
136 IF( iscale.EQ.1 )
THEN
137 CALL dscal( n, sigma, d, 1 )
138 CALL dscal( n-1, sigma, e( 1 ), 1 )
144 IF( .NOT.wantz )
THEN
145 CALL dsterf( n, d, e, info )
147 CALL dsteqr(
'I', n, d, e, z, ldz, work, info )
152 IF( iscale.EQ.1 )
THEN
158 CALL dscal( imax, one / sigma, d, 1 )
subroutine dscal(n, da, dx, incx)
subroutine dsteqr(COMPZ, N, D, E, Z, LDZ, WORK, INFO)
subroutine dsterf(N, D, E, INFO)
subroutine dstev(JOBZ, N, D, E, Z, LDZ, WORK, INFO)
subroutine xerbla(SRNAME, INFO)