249 SUBROUTINE zhbgvd( JOBZ, UPLO, N, KA, KB, AB, LDAB, BB, LDBB, W,
250 $ Z, LDZ, WORK, LWORK, RWORK, LRWORK, IWORK,
259 INTEGER , KA, KB, LDAB, LDBB, LDZ, LIWORK, LRWORK,
264 DOUBLE PRECISION RWORK( * ), W( * )
265 COMPLEX*16 AB( LDAB, * ), BB( LDBB, * ), WORK( * ),
272 COMPLEX*16 CONE, CZERO
273 PARAMETER ( CONE = ( 1.0d+0, 0.0d+0 ),
274 $ czero = ( 0.0d+0, 0.0d+0 ) )
277 LOGICAL LQUERY, UPPER, WANTZ
279 INTEGER IINFO, INDE, INDWK2, INDWRK, LIWMIN, LLRWK,
280 $ llwk2, lrwmin, lwmin
294 wantz = lsame( jobz,
'V' )
295 upper = lsame( uplo,
'U' )
296 lquery = ( lwork.EQ.-1 .OR. lrwork.EQ.-1 .OR. liwork.EQ.-1 )
303 ELSE IF( wantz )
THEN
305 lrwmin = 1 + 5*n + 2*n**2
312 IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN
314 ELSE IF( .NOT.( upper .OR. lsame( uplo,
'L' ) ) )
THEN
316 ELSE IF( n.LT.0 )
THEN
318 ELSE IF( ka.LT.0 )
THEN
320 ELSE IF( kb.LT.0 .OR. kb.GT.ka )
THEN
322 ELSE IF( ldab.LT.ka+1 )
THEN
324 ELSE IF( ldbb.LT.kb+1 )
THEN
326 ELSE IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN
335 IF( lwork.LT.lwmin .AND. .NOT.lquery )
THEN
337 ELSE IF( lrwork.LT.lrwmin .AND. .NOT.lquery )
THEN
339 ELSE IF( liwork.LT.liwmin .AND. .NOT.lquery )
THEN
345 CALL xerbla(
'ZHBGVD', -info )
347 ELSE IF( lquery )
THEN
358 CALL zpbstf( uplo, n, kb, bb, ldbb, info )
369 llwk2 = lwork - indwk2 + 2
370 llrwk = lrwork - indwrk + 2
371 CALL zhbgst( jobz, uplo, n, ka, kb, ab, ldab, bb, ldbb, z, ldz,
372 $ work, rwork, iinfo )
381 CALL zhbtrd( vect, uplo, n, ka, ab, ldab, w, rwork( inde ), z,
386 IF( .NOT.wantz )
THEN
389 CALL zstedc(
'I', n, w, rwork( inde ), work, n, work( indwk2 ),
390 $ llwk2, rwork( indwrk ), llrwk, iwork, liwork,
392 CALL zgemm(
'N',
'N', n, n, n, cone, z, ldz, work, n, czero,
393 $ work( indwk2 ), n )
394 CALL zlacpy(
'A', n, n, work( indwk2 ), n, z, ldz )
subroutine zhbgst(vect, uplo, n, ka, kb, ab, ldab, bb, ldbb, x, ldx, work, rwork, info)
ZHBGST
subroutine zstedc(compz, n, d, e, z, ldz, work, lwork, rwork, lrwork, iwork, liwork, info)
ZSTEDC
subroutine zhbgvd(jobz, uplo, n, ka, kb, ab, ldab, bb, ldbb, w, z, ldz, work, lwork, rwork, lrwork, iwork, liwork, info)
ZHBGVD
subroutine zgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
ZGEMM