168 SUBROUTINE sspevd( JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, LWORK,
169 $ IWORK, LIWORK, INFO )
177 INTEGER INFO, LDZ, LIWORK, LWORK, N
181 REAL AP( * ), W( * ), WORK( * ), Z( LDZ, * )
188 parameter( zero = 0.0e+0, one = 1.0e+0 )
191 LOGICAL LQUERY, WANTZ
192 INTEGER IINFO, INDE, INDTAU, INDWRK, ISCALE, LIWMIN,
194 REAL ANRM, BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA,
199 REAL SLAMCH, SLANSP, SROUNDUP_LWORK
200 EXTERNAL lsame, slamch, slansp,
214 wantz = lsame( jobz,
'V' )
215 lquery = ( lwork.EQ.-1 .OR. liwork.EQ.-1 )
218 IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN
220 ELSE IF( .NOT.( lsame( uplo,
'U' ) .OR.
221 $ lsame( uplo,
'L' ) ) )
224 ELSE IF( n.LT.0 )
THEN
226 ELSE IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN
237 lwmin = 1 + 6*n + n**2
244 work( 1 ) = sroundup_lwork(lwmin)
246 IF( lwork.LT.lwmin .AND. .NOT.lquery )
THEN
248 ELSE IF( liwork.LT.liwmin .AND. .NOT.lquery )
THEN
254 CALL xerbla(
'SSPEVD', -info )
256 ELSE IF( lquery )
THEN
274 safmin = slamch(
'Safe minimum' )
275 eps = slamch(
'Precision' )
276 smlnum = safmin / eps
277 bignum = one / smlnum
278 rmin = sqrt( smlnum )
279 rmax = sqrt( bignum )
283 anrm = slansp(
'M', uplo, n, ap, work )
285 IF( anrm.GT.zero .AND. anrm.LT.rmin )
THEN
288 ELSE IF( anrm.GT.rmax )
THEN
292 IF( iscale.EQ.1 )
THEN
293 CALL sscal( ( n*( n+1 ) ) / 2, sigma, ap, 1 )
300 CALL ssptrd( uplo, n, ap, w, work( inde ), work( indtau ),
308 IF( .NOT.wantz )
THEN
309 CALL ssterf( n, w, work( inde ), info )
312 llwork = lwork - indwrk + 1
313 CALL sstedc(
'I', n, w, work( inde ), z, ldz,
315 $ llwork, iwork, liwork, info )
316 CALL sopmtr(
'L', uplo,
'N', n, n, ap, work( indtau ), z,
318 $ work( indwrk ), iinfo )
324 $
CALL sscal( n, one / sigma, w, 1 )
326 work( 1 ) = sroundup_lwork(lwmin)
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 matrice...
subroutine sstedc(compz, n, d, e, z, ldz, work, lwork, iwork, liwork, info)
SSTEDC
subroutine sopmtr(side, uplo, trans, m, n, ap, tau, c, ldc, work, info)
SOPMTR