221 SUBROUTINE zhpgvd( ITYPE, JOBZ, UPLO, N, AP, BP, W, Z, LDZ,
223 $ LWORK, RWORK, LRWORK, IWORK, LIWORK, INFO )
231 INTEGER INFO, ITYPE, LDZ, LIWORK, LRWORK, LWORK, N
235 DOUBLE PRECISION RWORK( * ), W( * )
236 COMPLEX*16 AP( * ), BP( * ), WORK( * ), Z( LDZ, * )
242 LOGICAL LQUERY, UPPER, WANTZ
244 INTEGER J, LIWMIN, LRWMIN, LWMIN, NEIG
261 wantz = lsame( jobz,
'V' )
262 upper = lsame( uplo,
'U' )
263 lquery = ( lwork.EQ.-1 .OR. lrwork.EQ.-1 .OR. liwork.EQ.-1 )
266 IF( itype.LT.1 .OR. itype.GT.3 )
THEN
268 ELSE IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN
270 ELSE IF( .NOT.( upper .OR. lsame( uplo,
'L' ) ) )
THEN
272 ELSE IF( n.LT.0 )
THEN
274 ELSE IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN
286 lrwmin = 1 + 5*n + 2*n**2
296 rwork( 1 ) = real( lrwmin )
298 IF( lwork.LT.lwmin .AND. .NOT.lquery )
THEN
300 ELSE IF( lrwork.LT.lrwmin .AND. .NOT.lquery )
THEN
302 ELSE IF( liwork.LT.liwmin .AND. .NOT.lquery )
THEN
308 CALL xerbla(
'ZHPGVD', -info )
310 ELSE IF( lquery )
THEN
321 CALL zpptrf( uplo, n, bp, info )
329 CALL zhpgst( itype, uplo, n, ap, bp, info )
330 CALL zhpevd( jobz, uplo, n, ap, w, z, ldz, work, lwork, rwork,
331 $ lrwork, iwork, liwork, info )
332 lwmin = int( max( dble( lwmin ), dble( work( 1 ) ) ) )
333 lrwmin = int( max( dble( lrwmin ), dble( rwork( 1 ) ) ) )
334 liwmin = int( max( dble( liwmin ), dble( iwork( 1 ) ) ) )
343 IF( itype.EQ.1 .OR. itype.EQ.2 )
THEN
355 CALL ztpsv( uplo, trans,
'Non-unit', n, bp, z( 1, j ),
359 ELSE IF( itype.EQ.3 )
THEN
371 CALL ztpmv( uplo, trans,
'Non-unit', n, bp, z( 1, j ),
378 rwork( 1 ) = real( lrwmin )
subroutine zhpevd(jobz, uplo, n, ap, w, z, ldz, work, lwork, rwork, lrwork, iwork, liwork, info)
ZHPEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrice...
subroutine zhpgvd(itype, jobz, uplo, n, ap, bp, w, z, ldz, work, lwork, rwork, lrwork, iwork, liwork, info)
ZHPGVD