226 SUBROUTINE ssygv_2stage( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W,
227 $ work, lwork, info )
238 INTEGER INFO, ITYPE, LDA, LDB, LWORK, N
241 REAL A( lda, * ), B( ldb, * ), W( * ), WORK( * )
248 parameter ( one = 1.0e+0 )
251 LOGICAL LQUERY, UPPER, WANTZ
254 $ llwork, lwmin, lhtrd, lwtrd, kd, ib, indhous
259 EXTERNAL lsame, ilaenv
272 wantz = lsame( jobz,
'V' )
273 upper = lsame( uplo,
'U' )
274 lquery = ( lwork.EQ.-1 )
277 IF( itype.LT.1 .OR. itype.GT.3 )
THEN
279 ELSE IF( .NOT.( lsame( jobz,
'N' ) ) )
THEN
281 ELSE IF( .NOT.( upper .OR. lsame( uplo,
'L' ) ) )
THEN
283 ELSE IF( n.LT.0 )
THEN
285 ELSE IF( lda.LT.max( 1, n ) )
THEN
287 ELSE IF( ldb.LT.max( 1, n ) )
THEN
292 kd = ilaenv( 17,
'SSYTRD_2STAGE', jobz, n, -1, -1, -1 )
293 ib = ilaenv( 18,
'SSYTRD_2STAGE', jobz, n, kd, -1, -1 )
294 lhtrd = ilaenv( 19,
'SSYTRD_2STAGE', jobz, n, kd, ib, -1 )
295 lwtrd = ilaenv( 20,
'SSYTRD_2STAGE', jobz, n, kd, ib, -1 )
296 lwmin = 2*n + lhtrd + lwtrd
299 IF( lwork.LT.lwmin .AND. .NOT.lquery )
THEN
305 CALL xerbla(
'SSYGV_2STAGE ', -info )
307 ELSE IF( lquery )
THEN
318 CALL spotrf( uplo, n, b, ldb, info )
326 CALL ssygst( itype, uplo, n, a, lda, b, ldb, info )
327 CALL ssyev_2stage( jobz, uplo, n, a, lda, w, work, lwork, info )
336 IF( itype.EQ.1 .OR. itype.EQ.2 )
THEN
347 CALL strsm(
'Left', uplo, trans,
'Non-unit', n, neig, one,
350 ELSE IF( itype.EQ.3 )
THEN
361 CALL strmm(
'Left', uplo, trans,
'Non-unit', n, neig, one,
subroutine ssyev_2stage(JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, INFO)
SSYEV_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY mat...
subroutine strsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
STRSM
subroutine spotrf(UPLO, N, A, LDA, INFO)
SPOTRF
subroutine strmm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
STRMM
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine ssygv_2stage(ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, LWORK, INFO)
SSYGV_2STAGE
subroutine ssygst(ITYPE, UPLO, N, A, LDA, B, LDB, INFO)
SSYGST