173 SUBROUTINE dsygv( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK,
182 INTEGER INFO, ITYPE, LDA, LDB, LWORK, N
185 DOUBLE PRECISION A( lda, * ), B( ldb, * ), W( * ), WORK( * )
192 parameter( one = 1.0d+0 )
195 LOGICAL LQUERY, UPPER, WANTZ
197 INTEGER LWKMIN, LWKOPT, NB, NEIG
202 EXTERNAL lsame, ilaenv
214 wantz = lsame( jobz,
'V' )
215 upper = lsame( uplo,
'U' )
216 lquery = ( lwork.EQ.-1 )
219 IF( itype.LT.1 .OR. itype.GT.3 )
THEN 221 ELSE IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN 223 ELSE IF( .NOT.( upper .OR. lsame( uplo,
'L' ) ) )
THEN 225 ELSE IF( n.LT.0 )
THEN 227 ELSE IF( lda.LT.max( 1, n ) )
THEN 229 ELSE IF( ldb.LT.max( 1, n ) )
THEN 234 lwkmin = max( 1, 3*n - 1 )
235 nb = ilaenv( 1,
'DSYTRD', uplo, n, -1, -1, -1 )
236 lwkopt = max( lwkmin, ( nb + 2 )*n )
239 IF( lwork.LT.lwkmin .AND. .NOT.lquery )
THEN 245 CALL xerbla(
'DSYGV ', -info )
247 ELSE IF( lquery )
THEN 258 CALL dpotrf( uplo, n, b, ldb, info )
266 CALL dsygst( itype, uplo, n, a, lda, b, ldb, info )
267 CALL dsyev( jobz, uplo, n, a, lda, w, work, lwork, info )
276 IF( itype.EQ.1 .OR. itype.EQ.2 )
THEN 287 CALL dtrsm(
'Left', uplo, trans,
'Non-unit', n, neig, one,
290 ELSE IF( itype.EQ.3 )
THEN 301 CALL dtrmm(
'Left', uplo, trans,
'Non-unit', n, neig, one,
subroutine dsygst(ITYPE, UPLO, N, A, LDA, B, LDB, INFO)
DSYGST
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine dpotrf(UPLO, N, A, LDA, INFO)
DPOTRF
subroutine dsygv(ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, LWORK, INFO)
DSYGV
subroutine dtrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
DTRSM
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 dtrmm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
DTRMM