175 SUBROUTINE dsygv( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK,
185 INTEGER INFO, ITYPE, LDA, LDB, LWORK, N
188 DOUBLE PRECISION A( lda, * ), B( ldb, * ), W( * ), WORK( * )
195 parameter ( one = 1.0d+0 )
198 LOGICAL LQUERY, UPPER, WANTZ
200 INTEGER LWKMIN, LWKOPT, NB, NEIG
205 EXTERNAL lsame, ilaenv
217 wantz = lsame( jobz,
'V' )
218 upper = lsame( uplo,
'U' )
219 lquery = ( lwork.EQ.-1 )
222 IF( itype.LT.1 .OR. itype.GT.3 )
THEN
224 ELSE IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN
226 ELSE IF( .NOT.( upper .OR. lsame( uplo,
'L' ) ) )
THEN
228 ELSE IF( n.LT.0 )
THEN
230 ELSE IF( lda.LT.max( 1, n ) )
THEN
232 ELSE IF( ldb.LT.max( 1, n ) )
THEN
237 lwkmin = max( 1, 3*n - 1 )
238 nb = ilaenv( 1,
'DSYTRD', uplo, n, -1, -1, -1 )
239 lwkopt = max( lwkmin, ( nb + 2 )*n )
242 IF( lwork.LT.lwkmin .AND. .NOT.lquery )
THEN
248 CALL xerbla(
'DSYGV ', -info )
250 ELSE IF( lquery )
THEN
261 CALL dpotrf( uplo, n, b, ldb, info )
269 CALL dsygst( itype, uplo, n, a, lda, b, ldb, info )
270 CALL dsyev( jobz, uplo, n, a, lda, w, work, lwork, info )
279 IF( itype.EQ.1 .OR. itype.EQ.2 )
THEN
290 CALL dtrsm(
'Left', uplo, trans,
'Non-unit', n, neig, one,
293 ELSE IF( itype.EQ.3 )
THEN
304 CALL dtrmm(
'Left', uplo, trans,
'Non-unit', n, neig, one,
subroutine dtrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
DTRSM
subroutine dpotrf(UPLO, N, A, LDA, INFO)
DPOTRF
subroutine dsyev(JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, INFO)
DSYEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matrices ...
subroutine dsygv(ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, LWORK, INFO)
DSYGV
subroutine dtrmm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
DTRMM
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine dsygst(ITYPE, UPLO, N, A, LDA, B, LDB, INFO)
DSYGST