225 SUBROUTINE dsygvd( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK,
226 $ LWORK, IWORK, LIWORK, INFO )
234 INTEGER INFO, ITYPE, LDA, LDB, LIWORK, LWORK, N
238 DOUBLE PRECISION A( lda, * ), B( ldb, * ), W( * ), WORK( * )
245 parameter( one = 1.0d+0 )
248 LOGICAL LQUERY, UPPER, WANTZ
250 INTEGER LIOPT, LIWMIN, LOPT, LWMIN
266 wantz = lsame( jobz,
'V' )
267 upper = lsame( uplo,
'U' )
268 lquery = ( lwork.EQ.-1 .OR. liwork.EQ.-1 )
274 ELSE IF( wantz )
THEN 276 lwmin = 1 + 6*n + 2*n**2
283 IF( itype.LT.1 .OR. itype.GT.3 )
THEN 285 ELSE IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN 287 ELSE IF( .NOT.( upper .OR. lsame( uplo,
'L' ) ) )
THEN 289 ELSE IF( n.LT.0 )
THEN 291 ELSE IF( lda.LT.max( 1, n ) )
THEN 293 ELSE IF( ldb.LT.max( 1, n ) )
THEN 301 IF( lwork.LT.lwmin .AND. .NOT.lquery )
THEN 303 ELSE IF( liwork.LT.liwmin .AND. .NOT.lquery )
THEN 309 CALL xerbla(
'DSYGVD', -info )
311 ELSE IF( lquery )
THEN 322 CALL dpotrf( uplo, n, b, ldb, info )
330 CALL dsygst( itype, uplo, n, a, lda, b, ldb, info )
331 CALL dsyevd( jobz, uplo, n, a, lda, w, work, lwork, iwork, liwork,
333 lopt = int( max( dble( lopt ), dble( work( 1 ) ) ) )
334 liopt = int( max( dble( liopt ), dble( iwork( 1 ) ) ) )
336 IF( wantz .AND. info.EQ.0 )
THEN 340 IF( itype.EQ.1 .OR. itype.EQ.2 )
THEN 351 CALL dtrsm(
'Left', uplo, trans,
'Non-unit', n, n, one,
354 ELSE IF( itype.EQ.3 )
THEN 365 CALL dtrmm(
'Left', uplo, trans,
'Non-unit', n, n, 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 dsyevd(JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, IWORK, LIWORK, INFO)
DSYEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for SY matrices ...
subroutine dtrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
DTRSM
subroutine dsygvd(ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, LWORK, IWORK, LIWORK, INFO)
DSYGVD
subroutine dtrmm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
DTRMM