146 SUBROUTINE ssbev( JOBZ, UPLO, N, KD, AB, LDAB, W, Z, LDZ, WORK,
156 INTEGER INFO, KD, LDAB, LDZ, N
159 REAL AB( ldab, * ), W( * ), WORK( * ), Z( ldz, * )
166 parameter ( zero = 0.0e0, one = 1.0e0 )
170 INTEGER IINFO, IMAX, INDE, INDWRK, ISCALE
171 REAL ANRM, BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA,
177 EXTERNAL lsame, slamch, slansb
189 wantz = lsame( jobz,
'V' )
190 lower = lsame( uplo,
'L' )
193 IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN
195 ELSE IF( .NOT.( lower .OR. lsame( uplo,
'U' ) ) )
THEN
197 ELSE IF( n.LT.0 )
THEN
199 ELSE IF( kd.LT.0 )
THEN
201 ELSE IF( ldab.LT.kd+1 )
THEN
203 ELSE IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN
208 CALL xerbla(
'SSBEV ', -info )
221 w( 1 ) = ab( kd+1, 1 )
230 safmin = slamch(
'Safe minimum' )
231 eps = slamch(
'Precision' )
232 smlnum = safmin / eps
233 bignum = one / smlnum
234 rmin = sqrt( smlnum )
235 rmax = sqrt( bignum )
239 anrm = slansb(
'M', uplo, n, kd, ab, ldab, work )
241 IF( anrm.GT.zero .AND. anrm.LT.rmin )
THEN
244 ELSE IF( anrm.GT.rmax )
THEN
248 IF( iscale.EQ.1 )
THEN
250 CALL slascl(
'B', kd, kd, one, sigma, n, n, ab, ldab, info )
252 CALL slascl(
'Q', kd, kd, one, sigma, n, n, ab, ldab, info )
260 CALL ssbtrd( jobz, uplo, n, kd, ab, ldab, w, work( inde ), z, ldz,
261 $ work( indwrk ), iinfo )
265 IF( .NOT.wantz )
THEN
266 CALL ssterf( n, w, work( inde ), info )
268 CALL ssteqr( jobz, n, w, work( inde ), z, ldz, work( indwrk ),
274 IF( iscale.EQ.1 )
THEN
280 CALL sscal( imax, one / sigma, w, 1 )
subroutine slascl(TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO)
SLASCL multiplies a general rectangular matrix by a real scalar defined as cto/cfrom.
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine ssbev(JOBZ, UPLO, N, KD, AB, LDAB, W, Z, LDZ, WORK, INFO)
SSBEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrice...
subroutine ssteqr(COMPZ, N, D, E, Z, LDZ, WORK, INFO)
SSTEQR
subroutine sscal(N, SA, SX, INCX)
SSCAL
subroutine ssbtrd(VECT, UPLO, N, KD, AB, LDAB, D, E, Q, LDQ, WORK, INFO)
SSBTRD
subroutine ssterf(N, D, E, INFO)
SSTERF