210 SUBROUTINE dspgvd( ITYPE, JOBZ, UPLO, N, AP, BP, W, Z, LDZ, WORK,
211 $ lwork, iwork, liwork, info )
220 INTEGER INFO, ITYPE, LDZ, LIWORK, LWORK, N
224 DOUBLE PRECISION AP( * ), BP( * ), W( * ), WORK( * ),
231 LOGICAL LQUERY, UPPER, WANTZ
233 INTEGER J, LIWMIN, LWMIN, NEIG
249 wantz = lsame( jobz,
'V' )
250 upper = lsame( uplo,
'U' )
251 lquery = ( lwork.EQ.-1 .OR. liwork.EQ.-1 )
254 IF( itype.LT.1 .OR. itype.GT.3 )
THEN
256 ELSE IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN
258 ELSE IF( .NOT.( upper .OR. lsame( uplo,
'L' ) ) )
THEN
260 ELSE IF( n.LT.0 )
THEN
262 ELSE IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN
273 lwmin = 1 + 6*n + 2*n**2
281 IF( lwork.LT.lwmin .AND. .NOT.lquery )
THEN
283 ELSE IF( liwork.LT.liwmin .AND. .NOT.lquery )
THEN
289 CALL xerbla(
'DSPGVD', -info )
291 ELSE IF( lquery )
THEN
302 CALL dpptrf( uplo, n, bp, info )
310 CALL dspgst( itype, uplo, n, ap, bp, info )
311 CALL dspevd( jobz, uplo, n, ap, w, z, ldz, work, lwork, iwork,
313 lwmin = max( dble( lwmin ), dble( work( 1 ) ) )
314 liwmin = max( dble( liwmin ), dble( iwork( 1 ) ) )
323 IF( itype.EQ.1 .OR. itype.EQ.2 )
THEN
335 CALL dtpsv( uplo, trans,
'Non-unit', n, bp, z( 1, j ),
339 ELSE IF( itype.EQ.3 )
THEN
351 CALL dtpmv( uplo, trans,
'Non-unit', n, bp, z( 1, j ),
subroutine dspgvd(ITYPE, JOBZ, UPLO, N, AP, BP, W, Z, LDZ, WORK, LWORK, IWORK, LIWORK, INFO)
DSPGVD
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 xerbla(SRNAME, INFO)
XERBLA
subroutine dpptrf(UPLO, N, AP, INFO)
DPPTRF
subroutine dtpsv(UPLO, TRANS, DIAG, N, AP, X, INCX)
DTPSV
subroutine dtpmv(UPLO, TRANS, DIAG, N, AP, X, INCX)
DTPMV