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 , UPPER, WANTZ
251 INTEGER IINFO, INDE, , INDWRK, LIWMIN, LLWRK2,
266 wantz = lsame( jobz,
'V' )
267 upper = lsame( uplo, 'u
' )
268.EQ..OR..EQ.
LQUERY = ( LWORK-1 LIWORK-1 )
274 ELSE IF( WANTZ ) THEN
276 LWMIN = 1 + 5*N + 2*N**2
282.NOT..OR.
IF( ( WANTZ LSAME( JOBZ, 'n
' ) ) ) THEN
284.NOT..OR.
ELSE IF( ( UPPER LSAME( UPLO, 'l
' ) ) ) THEN
286.LT.
ELSE IF( N0 ) THEN
288.LT.
ELSE IF( KA0 ) THEN
290.LT..OR..GT.
ELSE IF( KB0 KBKA ) THEN
292.LT.
ELSE IF( LDABKA+1 ) THEN
294.LT.
ELSE IF( LDBBKB+1 ) THEN
296.LT..OR..AND..LT.
ELSE IF( LDZ1 ( WANTZ LDZN ) ) THEN
304.LT..AND..NOT.
IF( LWORKLWMIN LQUERY ) THEN
306.LT..AND..NOT.
ELSE IF( LIWORKLIWMIN 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.NOT.
IF( 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 dsterf(n, d, e, info)
DSTERF
subroutine dstedc(compz, n, d, e, z, ldz, work, lwork, iwork, liwork, info)
DSTEDC
subroutine xerbla(srname, info)
XERBLA
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 dpbstf(uplo, n, kd, ab, ldab, info)
DPBSTF
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