171 SUBROUTINE dsygv( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W,
181 INTEGER INFO, ITYPE, LDA, LDB, LWORK, N
184 DOUBLE PRECISION A( LDA, * ), B( LDB, * ), W( * ), WORK( * )
191 PARAMETER ( ONE = 1.0d+0 )
194 LOGICAL LQUERY, UPPER, WANTZ
196 INTEGER LWKMIN, LWKOPT, NB, NEIG
201 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,
291 ELSE IF( itype.EQ.3 )
THEN
302 CALL dtrmm(
'Left', uplo, trans,
'Non-unit', n, neig,
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 dsygst(itype, uplo, n, a, lda, b, ldb, info)
DSYGST
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 dtrsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
DTRSM