225 $ WORK, LWORK, INFO )
235 INTEGER INFO, ITYPE, LDA, LDB, LWORK, N
238 REAL A( LDA, * ), B( LDB, * ), W( * ), WORK( * )
245 parameter( one = 1.0e+0 )
248 LOGICAL LQUERY, UPPER, WANTZ
250 INTEGER NEIG, LWMIN, LHTRD, LWTRD, KD, IB
256 EXTERNAL lsame, ilaenv2stage, sroundup_lwork
269 wantz = lsame( jobz,
'V' )
270 upper = lsame( uplo,
'U' )
271 lquery = ( lwork.EQ.-1 )
274 IF( itype.LT.1 .OR. itype.GT.3 )
THEN
276 ELSE IF( .NOT.( lsame( jobz,
'N' ) ) )
THEN
278 ELSE IF( .NOT.( upper .OR. lsame( uplo,
'L' ) ) )
THEN
280 ELSE IF( n.LT.0 )
THEN
282 ELSE IF( lda.LT.max( 1, n ) )
THEN
284 ELSE IF( ldb.LT.max( 1, n ) )
THEN
289 kd = ilaenv2stage( 1,
'SSYTRD_2STAGE', jobz, n, -1, -1, -1 )
290 ib = ilaenv2stage( 2,
'SSYTRD_2STAGE', jobz, n, kd, -1, -1 )
291 lhtrd = ilaenv2stage( 3,
'SSYTRD_2STAGE', jobz, n, kd, ib, -1 )
292 lwtrd = ilaenv2stage( 4,
'SSYTRD_2STAGE', jobz, n, kd, ib, -1 )
293 lwmin = 2*n + lhtrd + lwtrd
296 IF( lwork.LT.lwmin .AND. .NOT.lquery )
THEN
302 CALL xerbla(
'SSYGV_2STAGE ', -info )
304 ELSE IF( lquery )
THEN
315 CALL spotrf( uplo, n, b, ldb, info )
323 CALL ssygst( itype, uplo, n, a, lda, b, ldb, info )
324 CALL ssyev_2stage( jobz, uplo, n, a, lda, w, work, lwork, info )
333 IF( itype.EQ.1 .OR. itype.EQ.2 )
THEN
344 CALL strsm(
'Left', uplo, trans,
'Non-unit', n, neig, one,
347 ELSE IF( itype.EQ.3 )
THEN
358 CALL strmm(
'Left', uplo, trans,
'Non-unit', n, neig, one,
363 work( 1 ) = sroundup_lwork(lwmin)
subroutine xerbla(srname, info)
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 matr...
subroutine ssygst(itype, uplo, n, a, lda, b, ldb, info)
SSYGST
subroutine ssygv_2stage(itype, jobz, uplo, n, a, lda, b, ldb, w, work, lwork, info)
SSYGV_2STAGE
subroutine spotrf(uplo, n, a, lda, info)
SPOTRF
subroutine strmm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
STRMM
subroutine strsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
STRSM