176 SUBROUTINE sspevd( JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, LWORK,
177 $ IWORK, LIWORK, INFO )
185 INTEGER INFO, LDZ, LIWORK, LWORK, N
189 REAL AP( * ), W( * ), WORK( * ), Z( ldz, * )
196 parameter( zero = 0.0e+0, one = 1.0e+0 )
199 LOGICAL LQUERY, WANTZ
200 INTEGER IINFO, INDE, INDTAU, INDWRK, ISCALE, LIWMIN,
202 REAL ANRM, BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA,
208 EXTERNAL lsame, slamch, slansp
220 wantz = lsame( jobz,
'V' )
221 lquery = ( lwork.EQ.-1 .OR. liwork.EQ.-1 )
224 IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN 226 ELSE IF( .NOT.( lsame( uplo,
'U' ) .OR. lsame( uplo,
'L' ) ) )
229 ELSE IF( n.LT.0 )
THEN 231 ELSE IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN 242 lwmin = 1 + 6*n + n**2
251 IF( lwork.LT.lwmin .AND. .NOT.lquery )
THEN 253 ELSE IF( liwork.LT.liwmin .AND. .NOT.lquery )
THEN 259 CALL xerbla(
'SSPEVD', -info )
261 ELSE IF( lquery )
THEN 279 safmin = slamch(
'Safe minimum' )
280 eps = slamch(
'Precision' )
281 smlnum = safmin / eps
282 bignum = one / smlnum
283 rmin = sqrt( smlnum )
284 rmax = sqrt( bignum )
288 anrm = slansp(
'M', uplo, n, ap, work )
290 IF( anrm.GT.zero .AND. anrm.LT.rmin )
THEN 293 ELSE IF( anrm.GT.rmax )
THEN 297 IF( iscale.EQ.1 )
THEN 298 CALL sscal( ( n*( n+1 ) ) / 2, sigma, ap, 1 )
305 CALL ssptrd( uplo, n, ap, w, work( inde ), work( indtau ), iinfo )
312 IF( .NOT.wantz )
THEN 313 CALL ssterf( n, w, work( inde ), info )
316 llwork = lwork - indwrk + 1
317 CALL sstedc(
'I', n, w, work( inde ), z, ldz, work( indwrk ),
318 $ llwork, iwork, liwork, info )
319 CALL sopmtr(
'L', uplo,
'N', n, n, ap, work( indtau ), z, ldz,
320 $ work( indwrk ), iinfo )
326 $
CALL sscal( n, one / sigma, w, 1 )
subroutine ssptrd(UPLO, N, AP, D, E, TAU, INFO)
SSPTRD
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine sstedc(COMPZ, N, D, E, Z, LDZ, WORK, LWORK, IWORK, LIWORK, INFO)
SSTEDC
subroutine sspevd(JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, LWORK, IWORK, LIWORK, INFO)
SSPEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matric...
subroutine ssterf(N, D, E, INFO)
SSTERF
subroutine sscal(N, SA, SX, INCX)
SSCAL
subroutine sopmtr(SIDE, UPLO, TRANS, M, N, AP, TAU, C, LDC, WORK, INFO)
SOPMTR