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
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 dlacpy(uplo, m, n, a, lda, b, ldb)
DLACPY copies all or part of one two-dimensional array to another.
subroutine dstedc(compz, n, d, e, z, ldz, work, lwork, iwork, liwork, info)
DSTEDC
subroutine dsbgst(vect, uplo, n, ka, kb, ab, ldab, bb, ldbb, x, ldx, work, info)
DSBGST
subroutine dsbtrd(vect, uplo, n, kd, ab, ldab, d, e, q, ldq, work, info)
DSBTRD
subroutine dsbgvd(jobz, uplo, n, ka, kb, ab, ldab, bb, ldbb, w, z, ldz, work, lwork, iwork, liwork, info)
DSBGVD
subroutine dgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
DGEMM