229 SUBROUTINE zhpgvd( ITYPE, JOBZ, UPLO, N, AP, BP, W, Z, LDZ, WORK,
230 $ LWORK, RWORK, LRWORK, IWORK, LIWORK, INFO )
238 INTEGER INFO, ITYPE, LDZ, LIWORK, LRWORK, LWORK, N
242 DOUBLE PRECISION RWORK( * ), W( * )
243 COMPLEX*16 AP( * ), BP( * ), WORK( * ), Z( LDZ, * )
249 LOGICAL LQUERY, UPPER, WANTZ
251 INTEGER J, LIWMIN, LRWMIN, LWMIN, NEIG
267 wantz = lsame( jobz,
'V' )
268 upper = lsame( uplo,
'U' )
269 lquery = ( lwork.EQ.-1 .OR. lrwork.EQ.-1 .OR. liwork.EQ.-1 )
272 IF( itype.LT.1 .OR. itype.GT.3 )
THEN
274 ELSE IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN
276 ELSE IF( .NOT.( upper .OR. lsame( uplo,
'L' ) ) )
THEN
278 ELSE IF( n.LT.0 )
THEN
280 ELSE IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN
292 lrwmin = 1 + 5*n + 2*n**2
304 IF( lwork.LT.lwmin .AND. .NOT.lquery )
THEN
306 ELSE IF( lrwork.LT.lrwmin .AND. .NOT.lquery )
THEN
308 ELSE IF( liwork.LT.liwmin .AND. .NOT.lquery )
THEN
314 CALL xerbla(
'ZHPGVD', -info )
316 ELSE IF( lquery )
THEN
327 CALL zpptrf( uplo, n, bp, info )
335 CALL zhpgst( itype, uplo, n, ap, bp, info )
336 CALL zhpevd( jobz, uplo, n, ap, w, z, ldz, work, lwork, rwork,
337 $ lrwork, iwork, liwork, info )
338 lwmin =
max( dble( lwmin ), dble( work( 1 ) ) )
339 lrwmin =
max( dble( lrwmin ), dble( rwork( 1 ) ) )
340 liwmin =
max( dble( liwmin ), dble( iwork( 1 ) ) )
349 IF( itype.EQ.1 .OR. itype.EQ.2 )
THEN
361 CALL ztpsv( uplo, trans,
'Non-unit', n, bp, z( 1, j ),
365 ELSE IF( itype.EQ.3 )
THEN
377 CALL ztpmv( uplo, trans,
'Non-unit', n, bp, z( 1, j ),
subroutine zhpgvd(itype, jobz, uplo, n, ap, bp, w, z, ldz, work, lwork, rwork, lrwork, iwork, liwork, info)
ZHPGVD
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 ztpsv(uplo, trans, diag, n, ap, x, incx)
ZTPSV
subroutine ztpmv(uplo, trans, diag, n, ap, x, incx)
ZTPMV