198 INTEGER INFO, LDA, LWORK, N
201 REAL RWORK( * ), W( * )
202 COMPLEX A( LDA, * ), WORK( * )
209 parameter( zero = 0.0e0, one = 1.0e0 )
211 parameter( cone = ( 1.0e0, 0.0e0 ) )
214 LOGICAL LOWER, LQUERY, WANTZ
215 INTEGER IINFO, IMAX, INDE, INDTAU, INDWRK, ISCALE,
216 $ llwork, lwmin, lhtrd, lwtrd, kd, ib, indhous
217 REAL ANRM, BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA,
224 EXTERNAL lsame, slamch, clanhe, ilaenv2stage
231 INTRINSIC real,
max, sqrt
237 wantz = lsame( jobz,
'V' )
238 lower = lsame( uplo,
'L' )
239 lquery = ( lwork.EQ.-1 )
242 IF( .NOT.( lsame( jobz,
'N' ) ) )
THEN
244 ELSE IF( .NOT.( lower .OR. lsame( uplo, 'u
' ) ) ) THEN
246.LT.
ELSE IF( N0 ) THEN
248.LT.
ELSE IF( LDAMAX( 1, N ) ) THEN
255 LHTRD = ILAENV2STAGE( 3, 'chetrd_2stage', JOBZ, N, KD, IB, -1 )
256 LWTRD = ILAENV2STAGE( 4, 'chetrd_2stage', JOBZ, N, KD, IB, -1 )
257 LWMIN = N + LHTRD + LWTRD
260.LT..AND..NOT.
IF( LWORKLWMIN LQUERY )
267 ELSE IF( LQUERY ) THEN
278 W( 1 ) = REAL( A( 1, 1 ) )
287 SAFMIN = SLAMCH( 'safe minimum
' )
288 EPS = SLAMCH( 'precision
' )
289 SMLNUM = SAFMIN / EPS
290 BIGNUM = ONE / SMLNUM
291 RMIN = SQRT( SMLNUM )
292 RMAX = SQRT( BIGNUM )
296 ANRM = CLANHE( 'm
', UPLO, N, A, LDA, RWORK )
298.GT..AND..LT.
IF( ANRMZERO ANRMRMIN ) THEN
301.GT.
ELSE IF( ANRMRMAX ) THEN
306 $ CALL CLASCL( UPLO, 0, 0, ONE, SIGMA, N, N, A, LDA, INFO )
313 INDWRK = INDHOUS + LHTRD
314 LLWORK = LWORK - INDWRK + 1
316 CALL CHETRD_2STAGE( JOBZ, UPLO, N, A, LDA, W, RWORK( INDE ),
317 $ WORK( INDTAU ), WORK( INDHOUS ), LHTRD,
318 $ WORK( INDWRK ), LLWORK, IINFO )
323.NOT.
IF( WANTZ ) THEN
324 CALL SSTERF( N, W, RWORK( INDE ), INFO )
326 CALL CUNGTR( UPLO, N, A, LDA, WORK( INDTAU ), WORK( INDWRK ),
329 CALL CSTEQR( JOBZ, N, W, RWORK( INDE ), A, LDA,
330 $ RWORK( INDWRK ), INFO )
335.EQ.
IF( ISCALE1 ) THEN
341 CALL SSCAL( IMAX, ONE / SIGMA, W, 1 )
subroutine ssterf(n, d, e, info)
SSTERF
subroutine xerbla(srname, info)
XERBLA
subroutine chetrd_2stage(vect, uplo, n, a, lda, d, e, tau, hous2, lhous2, work, lwork, info)
CHETRD_2STAGE
subroutine cheev_2stage(jobz, uplo, n, a, lda, w, work, lwork, rwork, info)
CHEEV_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for HE matr...
subroutine clascl(type, kl, ku, cfrom, cto, m, n, a, lda, info)
CLASCL multiplies a general rectangular matrix by a real scalar defined as cto/cfrom.
subroutine cungtr(uplo, n, a, lda, tau, work, lwork, info)
CUNGTR
subroutine csteqr(compz, n, d, e, z, ldz, work, info)
CSTEQR
subroutine sscal(n, sa, sx, incx)
SSCAL