189 SUBROUTINE cheev_2stage( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK,
201 INTEGER INFO, LDA, LWORK, N
204 REAL RWORK( * ), W( * )
205 COMPLEX A( lda, * ), WORK( * )
212 parameter( zero = 0.0e0, one = 1.0e0 )
214 parameter( cone = ( 1.0e0, 0.0e0 ) )
217 LOGICAL LOWER, LQUERY, WANTZ
218 INTEGER IINFO, IMAX, INDE, INDTAU, INDWRK, ISCALE,
219 $ llwork, lwmin, lhtrd, lwtrd, kd, ib, indhous
220 REAL ANRM, BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA,
227 EXTERNAL lsame, ilaenv, slamch, clanhe
234 INTRINSIC REAL, MAX, SQRT
240 wantz = lsame( jobz,
'V' )
241 lower = lsame( uplo,
'L' )
242 lquery = ( lwork.EQ.-1 )
245 IF( .NOT.( lsame( jobz,
'N' ) ) )
THEN 247 ELSE IF( .NOT.( lower .OR. lsame( uplo,
'U' ) ) )
THEN 249 ELSE IF( n.LT.0 )
THEN 251 ELSE IF( lda.LT.max( 1, n ) )
THEN 256 kd = ilaenv( 17,
'CHETRD_2STAGE', jobz, n, -1, -1, -1 )
257 ib = ilaenv( 18,
'CHETRD_2STAGE', jobz, n, kd, -1, -1 )
258 lhtrd = ilaenv( 19,
'CHETRD_2STAGE', jobz, n, kd, ib, -1 )
259 lwtrd = ilaenv( 20,
'CHETRD_2STAGE', jobz, n, kd, ib, -1 )
260 lwmin = n + lhtrd + lwtrd
263 IF( lwork.LT.lwmin .AND. .NOT.lquery )
268 CALL xerbla(
'CHEEV_2STAGE ', -info )
270 ELSE IF( lquery )
THEN 281 w( 1 ) =
REAL( A( 1, 1 ) )
290 safmin = slamch(
'Safe minimum' )
291 eps = slamch(
'Precision' )
292 smlnum = safmin / eps
293 bignum = one / smlnum
294 rmin = sqrt( smlnum )
295 rmax = sqrt( bignum )
299 anrm = clanhe(
'M', uplo, n, a, lda, rwork )
301 IF( anrm.GT.zero .AND. anrm.LT.rmin )
THEN 304 ELSE IF( anrm.GT.rmax )
THEN 309 $
CALL clascl( uplo, 0, 0, one, sigma, n, n, a, lda, info )
316 indwrk = indhous + lhtrd
317 llwork = lwork - indwrk + 1
320 $ work( indtau ), work( indhous ), lhtrd,
321 $ work( indwrk ), llwork, iinfo )
326 IF( .NOT.wantz )
THEN 327 CALL ssterf( n, w, rwork( inde ), info )
329 CALL cungtr( uplo, n, a, lda, work( indtau ), work( indwrk ),
332 CALL csteqr( jobz, n, w, rwork( inde ), a, lda,
333 $ rwork( indwrk ), info )
338 IF( iscale.EQ.1 )
THEN 344 CALL sscal( imax, one / sigma, w, 1 )
subroutine cungtr(UPLO, N, A, LDA, TAU, WORK, LWORK, INFO)
CUNGTR
subroutine csteqr(COMPZ, N, D, E, Z, LDZ, WORK, INFO)
CSTEQR
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 xerbla(SRNAME, INFO)
XERBLA
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 mat...
subroutine sscal(N, SA, SX, INCX)
SSCAL
subroutine chetrd_2stage(VECT, UPLO, N, A, LDA, D, E, TAU, HOUS2, LHOUS2, WORK, LWORK, INFO)
CHETRD_2STAGE
subroutine ssterf(N, D, E, INFO)
SSTERF