183 SUBROUTINE zhbgv( JOBZ, UPLO, N, KA, KB, AB, LDAB, BB, LDBB, W, Z,
184 $ LDZ, WORK, RWORK, INFO )
193 INTEGER INFO, KA, KB, LDAB, LDBB, LDZ, N
196 DOUBLE PRECISION RWORK( * ), W( * )
197 COMPLEX*16 AB( LDAB, * ), BB( LDBB, * ), WORK( * ),
206 INTEGER IINFO, INDE, INDWRK
219 wantz = lsame( jobz,
'V' )
220 upper = lsame( uplo,
'U' )
223 IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN
225 ELSE IF( .NOT.( upper .OR. lsame( uplo,
'L' ) ) )
THEN
227 ELSE IF( n.LT.0 )
THEN
229 ELSE IF( ka.LT.0 )
THEN
231 ELSE IF( kb.LT.0 .OR. kb.GT.ka )
THEN
233 ELSE IF( ldab.LT.ka+1 )
THEN
235 ELSE IF( ldbb.LT.kb+1 )
THEN
237 ELSE IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN
241 CALL xerbla(
'ZHBGV ', -info )
252 CALL zpbstf( uplo, n, kb, bb, ldbb, info )
262 CALL zhbgst( jobz, uplo, n, ka, kb, ab, ldab, bb, ldbb, z, ldz,
263 $ work, rwork( indwrk ), iinfo )
272 CALL zhbtrd( vect, uplo, n, ka, ab, ldab, w, rwork( inde ), z,
277 IF( .NOT.wantz )
THEN
278 CALL dsterf( n, w, rwork( inde ), info )
280 CALL zsteqr( jobz, n, w, rwork( inde ), z, ldz,
281 $ rwork( indwrk ), info )