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 xerbla(SRNAME, INFO)
XERBLA
subroutine dtpsv(UPLO, TRANS, DIAG, N, AP, X, INCX)
DTPSV
subroutine dtpmv(UPLO, TRANS, DIAG, N, AP, X, INCX)
DTPMV
subroutine dpptrf(UPLO, N, AP, INFO)
DPPTRF
subroutine dspgst(ITYPE, UPLO, N, AP, BP, INFO)
DSPGST
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 matrice...
subroutine dspgvd(ITYPE, JOBZ, UPLO, N, AP, BP, W, Z, LDZ, WORK, LWORK, IWORK, LIWORK, INFO)
DSPGVD