1 SUBROUTINE dsygv( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK,
11 INTEGER INFO, ITYPE, LDA, LDB, LWORK, N
14 DOUBLE PRECISION A( LDA, * ), B( LDB, * ), W( * ), WORK( * )
111 parameter( one = 1.0d+0 )
114 LOGICAL LQUERY, UPPER, WANTZ
116 INTEGER LWKOPT, NB, NEIG
121 EXTERNAL lsame, ilaenv
133 wantz = lsame( jobz,
'V' )
134 upper = lsame( uplo,
'U' )
135 lquery = ( lwork.EQ.-1 )
138 IF( itype.LT.1 .OR. itype.GT.3 )
THEN
140 ELSE IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN
142 ELSE IF( .NOT.( upper .OR. lsame( uplo,
'L' ) ) )
THEN
144 ELSE IF( n.LT.0 )
THEN
146 ELSE IF( lda.LT.max( 1, n ) )
THEN
148 ELSE IF( ldb.LT.max( 1, n ) )
THEN
150 ELSE IF( lwork.LT.max( 1, 3*n-1 ) .AND. .NOT.lquery )
THEN
155 nb = ilaenv( 1,
'DSYTRD', uplo, n, -1, -1, -1 )
161 CALL xerbla(
'DSYGV ', -info )
163 ELSE IF( lquery )
THEN
174 CALL dpotrf( uplo, n, b, ldb, info )
182 CALL dsygst( itype, uplo, n, a, lda, b, ldb, info )
183 CALL dsyev( jobz, uplo, n, a, lda, w, work, lwork, info )
192 IF( itype.EQ.1 .OR. itype.EQ.2 )
THEN
203 CALL dtrsm(
'Left', uplo, trans,
'Non-unit', n, neig, one,
206 ELSE IF( itype.EQ.3 )
THEN
217 CALL dtrmm(
'Left', uplo, trans,
'Non-unit', n, neig, one,
subroutine dpotrf(UPLO, N, A, LDA, INFO)
subroutine dsyev(JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, INFO)
subroutine dsygst(ITYPE, UPLO, N, A, LDA, B, LDB, INFO)
subroutine dsygv(ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, LWORK, INFO)
subroutine dtrmm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
subroutine dtrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
subroutine xerbla(SRNAME, INFO)