208 SUBROUTINE dspgvd( ITYPE, JOBZ, UPLO, N, AP, BP, W, Z, LDZ, WORK,
209 $ LWORK, IWORK, LIWORK, INFO )
217 INTEGER INFO, ITYPE, LDZ, LIWORK, LWORK, N
221 DOUBLE PRECISION AP( * ), BP( * ), W( * ), WORK( * ),
228 LOGICAL LQUERY, UPPER, WANTZ
230 INTEGER J, LIWMIN, LWMIN, NEIG
246 wantz = lsame( jobz,
'V' )
247 upper = lsame( uplo,
'U' )
248 lquery = ( lwork.EQ.-1 .OR. liwork.EQ.-1 )
251 IF( itype.LT.1 .OR. itype.GT.3 )
THEN 253 ELSE IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN 255 ELSE IF( .NOT.( upper .OR. lsame( uplo,
'L' ) ) )
THEN 257 ELSE IF( n.LT.0 )
THEN 259 ELSE IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN 270 lwmin = 1 + 6*n + 2*n**2
278 IF( lwork.LT.lwmin .AND. .NOT.lquery )
THEN 280 ELSE IF( liwork.LT.liwmin .AND. .NOT.lquery )
THEN 286 CALL xerbla(
'DSPGVD', -info )
288 ELSE IF( lquery )
THEN 299 CALL dpptrf( uplo, n, bp, info )
307 CALL dspgst( itype, uplo, n, ap, bp, info )
308 CALL dspevd( jobz, uplo, n, ap, w, z, ldz, work, lwork, iwork,
310 lwmin = int( max( dble( lwmin ), dble( work( 1 ) ) ) )
311 liwmin = int( max( dble( liwmin ), dble( iwork( 1 ) ) ) )
320 IF( itype.EQ.1 .OR. itype.EQ.2 )
THEN 332 CALL dtpsv( uplo, trans,
'Non-unit', n, bp, z( 1, j ),
336 ELSE IF( itype.EQ.3 )
THEN 348 CALL dtpmv( uplo, trans,
'Non-unit', n, bp, z( 1, j ),
subroutine dtpsv(UPLO, TRANS, DIAG, N, AP, X, INCX)
DTPSV
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine dspevd(JOBZ, UPLO, N, AP, W, Z, LDZ, WORK, LWORK, IWORK, LIWORK, INFO)
DSPEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matric...
subroutine dspgst(ITYPE, UPLO, N, AP, BP, INFO)
DSPGST
subroutine dspgvd(ITYPE, JOBZ, UPLO, N, AP, BP, W, Z, LDZ, WORK, LWORK, IWORK, LIWORK, INFO)
DSPGVD
subroutine dtpmv(UPLO, TRANS, DIAG, N, AP, X, INCX)
DTPMV
subroutine dpptrf(UPLO, N, AP, INFO)
DPPTRF