225 SUBROUTINE dsbgvd( JOBZ, UPLO, N, KA, KB, AB, LDAB, BB, LDBB, W,
226 $ Z, LDZ, WORK, LWORK, IWORK, LIWORK, INFO )
234 INTEGER INFO, KA, KB, LDAB, LDBB, LDZ, LIWORK, LWORK, N
238 DOUBLE PRECISION AB( ldab, * ), BB( ldbb, * ), W( * ),
239 $ work( * ), z( ldz, * )
245 DOUBLE PRECISION ONE, ZERO
246 parameter( one = 1.0d+0, zero = 0.0d+0 )
249 LOGICAL LQUERY, UPPER, WANTZ
251 INTEGER IINFO, INDE, INDWK2, INDWRK, LIWMIN, LLWRK2,
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 + 5*n + 2*n**2
282 IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN 284 ELSE IF( .NOT.( upper .OR. lsame( uplo,
'L' ) ) )
THEN 286 ELSE IF( n.LT.0 )
THEN 288 ELSE IF( ka.LT.0 )
THEN 290 ELSE IF( kb.LT.0 .OR. kb.GT.ka )
THEN 292 ELSE IF( ldab.LT.ka+1 )
THEN 294 ELSE IF( ldbb.LT.kb+1 )
THEN 296 ELSE IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN 304 IF( lwork.LT.lwmin .AND. .NOT.lquery )
THEN 306 ELSE IF( liwork.LT.liwmin .AND. .NOT.lquery )
THEN 312 CALL xerbla(
'DSBGVD', -info )
314 ELSE IF( lquery )
THEN 325 CALL dpbstf( uplo, n, kb, bb, ldbb, info )
335 indwk2 = indwrk + n*n
336 llwrk2 = lwork - indwk2 + 1
337 CALL dsbgst( jobz, uplo, n, ka, kb, ab, ldab, bb, ldbb, z, ldz,
347 CALL dsbtrd( vect, uplo, n, ka, ab, ldab, w, work( inde ), z, ldz,
348 $ work( indwrk ), iinfo )
352 IF( .NOT.wantz )
THEN 353 CALL dsterf( n, w, work( inde ), info )
355 CALL dstedc(
'I', n, w, work( inde ), work( indwrk ), n,
356 $ work( indwk2 ), llwrk2, iwork, liwork, info )
357 CALL dgemm(
'N',
'N', n, n, n, one, z, ldz, work( indwrk ), n,
358 $ zero, work( indwk2 ), n )
359 CALL dlacpy(
'A', n, n, work( indwk2 ), n, z, ldz )
subroutine dsbgvd(JOBZ, UPLO, N, KA, KB, AB, LDAB, BB, LDBB, W, Z, LDZ, WORK, LWORK, IWORK, LIWORK, INFO)
DSBGVD
subroutine dsbtrd(VECT, UPLO, N, KD, AB, LDAB, D, E, Q, LDQ, WORK, INFO)
DSBTRD
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine dlacpy(UPLO, M, N, A, LDA, B, LDB)
DLACPY copies all or part of one two-dimensional array to another.
subroutine dgemm(TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
DGEMM
subroutine dpbstf(UPLO, N, KD, AB, LDAB, INFO)
DPBSTF
subroutine dsterf(N, D, E, INFO)
DSTERF
subroutine dsbgst(VECT, UPLO, N, KA, KB, AB, LDAB, BB, LDBB, X, LDX, WORK, INFO)
DSBGST
subroutine dstedc(COMPZ, N, D, E, Z, LDZ, WORK, LWORK, IWORK, LIWORK, INFO)
DSTEDC