# FreeBSD Manual Pages

```complex16OTHEReigen(3)		    LAPACK		complex16OTHEReigen(3)

NAME
complex16OTHEReigen - complex16 Other Eigenvalue	routines

SYNOPSIS
Functions
subroutine zggglm (N, M,	P, A, LDA, B, LDB, D, X, Y, WORK, LWORK, INFO)
ZGGGLM
subroutine zhbev	(JOBZ, UPLO, N,	KD, AB,	LDAB, W, Z, LDZ, WORK, RWORK,
INFO)
ZHBEV computes the eigenvalues and,	optionally, the	left and/or
right eigenvectors for OTHER	matrices
subroutine zhbev_2stage (JOBZ, UPLO, N, KD, AB, LDAB, W,	Z, LDZ,	WORK,
LWORK, RWORK, INFO)
ZHBEV_2STAGE computes the eigenvalues and, optionally, the left
and/or right	eigenvectors for OTHER matrices
subroutine zhbevd (JOBZ,	UPLO, N, KD, AB, LDAB, W, Z, LDZ, WORK,	LWORK,
RWORK, LRWORK, IWORK, LIWORK, INFO)
ZHBEVD computes the	eigenvalues and, optionally, the left and/or
right eigenvectors for OTHER	matrices
subroutine zhbevd_2stage	(JOBZ, UPLO, N,	KD, AB,	LDAB, W, Z, LDZ, WORK,
LWORK, RWORK, LRWORK, IWORK,	LIWORK,	INFO)
ZHBEVD_2STAGE computes the eigenvalues and,	optionally, the	left
and/or right	eigenvectors for OTHER matrices
subroutine zhbevx (JOBZ,	RANGE, UPLO, N,	KD, AB,	LDAB, Q, LDQ, VL, VU,
IL, IU, ABSTOL, M, W, Z, LDZ, WORK, RWORK, IWORK, IFAIL, INFO)
ZHBEVX computes the	eigenvalues and, optionally, the left and/or
right eigenvectors for OTHER	matrices
subroutine zhbevx_2stage	(JOBZ, RANGE, UPLO, N, KD, AB, LDAB, Q,	LDQ,
VL, VU, IL, IU, ABSTOL, M, W, Z, LDZ, WORK, LWORK, RWORK, IWORK,
IFAIL, INFO)
ZHBEVX_2STAGE computes the eigenvalues and,	optionally, the	left
and/or right	eigenvectors for OTHER matrices
subroutine zhbgv	(JOBZ, UPLO, N,	KA, KB,	AB, LDAB, BB, LDBB, W, Z, LDZ,
WORK, RWORK,	INFO)
ZHBGV
subroutine zhbgvd (JOBZ,	UPLO, N, KA, KB, AB, LDAB, BB, LDBB, W,	Z,
LDZ,	WORK, LWORK, RWORK, LRWORK, IWORK, LIWORK, INFO)
ZHBGVD
subroutine zhbgvx (JOBZ,	RANGE, UPLO, N,	KA, KB,	AB, LDAB, BB, LDBB, Q,
LDQ,	VL, VU,	IL, IU,	ABSTOL,	M, W, Z, LDZ, WORK, RWORK, IWORK,
IFAIL, INFO)
ZHBGVX
subroutine zhpev	(JOBZ, UPLO, N,	AP, W, Z, LDZ, WORK, RWORK, INFO)
ZHPEV computes the eigenvalues and,	optionally, the	left and/or
right eigenvectors for OTHER	matrices
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	matrices
subroutine zhpevx (JOBZ,	RANGE, UPLO, N,	AP, VL,	VU, IL,	IU, ABSTOL, M,
W, Z, LDZ, WORK, RWORK, IWORK, IFAIL, INFO)
ZHPEVX computes the	eigenvalues and, optionally, the left and/or
right eigenvectors for OTHER	matrices
subroutine zhpgv	(ITYPE,	JOBZ, UPLO, N, AP, BP, W, Z, LDZ, WORK,	RWORK,
INFO)
ZHPGV
subroutine zhpgvd (ITYPE, JOBZ, UPLO, N,	AP, BP,	W, Z, LDZ, WORK,
LWORK, RWORK, LRWORK, IWORK,	LIWORK,	INFO)
ZHPGVD
subroutine zhpgvx (ITYPE, JOBZ, RANGE, UPLO, N, AP, BP, VL, VU, IL, IU,
ABSTOL, M, W, Z, LDZ, WORK, RWORK, IWORK, IFAIL, INFO)
ZHPGVX

Detailed Description
This is the group of complex16 Other Eigenvalue routines

Function Documentation
subroutine zggglm (integer N, integer M, integer P, complex*16, dimension(
lda, * )	A, integer LDA,	complex*16, dimension( ldb, * )	B, integer
LDB, complex*16,	dimension( * ) D, complex*16, dimension( * ) X,
complex*16, dimension( *	) Y, complex*16, dimension( * )	WORK, integer
LWORK, integer INFO)
ZGGGLM

Purpose:

ZGGGLM solves a general Gauss-Markov linear	model (GLM) problem:

minimize ||	y ||_2	 subject to   d	= A*x +	B*y
x

where A is an N-by-M matrix, B is an N-by-P	matrix,	and d is a
given N-vector. It is assumed that M <= N <= M+P, and

rank(A) = M    and    rank( A B ) = N.

Under these	assumptions, the constrained equation is always
consistent,	and there is a unique solution x and a minimal 2-norm
solution y,	which is obtained using	a generalized QR factorization
of the matrices (A,	B) given by

A = Q*(R),   B =	Q*T*Z.
(0)

In particular, if matrix B is square nonsingular, then the problem
GLM	is equivalent to the following weighted	linear least squares
problem

minimize || inv(B)*(d-A*x) ||_2
x

where inv(B) denotes the inverse of	B.

Parameters
N

N is INTEGER
The number	of rows	of the matrices	A and B.  N >= 0.

M

M is INTEGER
The number	of columns of the matrix A.  0 <= M <= N.

P

P is INTEGER
The number	of columns of the matrix B.  P >= N-M.

A

A is COMPLEX*16 array, dimension (LDA,M)
On	entry, the N-by-M matrix A.
On	exit, the upper	triangular part	of the array A contains
the M-by-M	upper triangular matrix	R.

LDA

LDA is INTEGER
The leading dimension of the array	A. LDA >= max(1,N).

B

B is COMPLEX*16 array, dimension (LDB,P)
On	entry, the N-by-P matrix B.
On	exit, if N <= P, the upper triangle of the subarray
B(1:N,P-N+1:P) contains the N-by-N	upper triangular matrix	T;
if	N > P, the elements on and above the (N-P)th subdiagonal
contain the N-by-P	upper trapezoidal matrix T.

LDB

LDB is INTEGER
The leading dimension of the array	B. LDB >= max(1,N).

D

D is COMPLEX*16 array, dimension (N)
On	entry, D is the	left hand side of the GLM equation.
On	exit, D	is destroyed.

X

X is COMPLEX*16 array, dimension (M)

Y

Y is COMPLEX*16 array, dimension (P)

On	exit, X	and Y are the solutions	of the GLM problem.

WORK

WORK is COMPLEX*16	array, dimension (MAX(1,LWORK))
On	exit, if INFO =	0, WORK(1) returns the optimal LWORK.

LWORK

LWORK is INTEGER
The dimension of the array	WORK. LWORK >= max(1,N+M+P).
For optimum performance, LWORK >= M+min(N,P)+max(N,P)*NB,
where NB is an upper bound	for the	optimal	blocksizes for
ZGEQRF, ZGERQF, ZUNMQR and	ZUNMRQ.

If	LWORK =	-1, then a workspace query is assumed; the routine
only calculates the optimal size of the WORK array, returns
this value	as the first entry of the WORK array, and no error
message related to	LWORK is issued	by XERBLA.

INFO

INFO is INTEGER
= 0:  successful exit.
< 0:  if INFO = -i, the i-th argument had an illegal value.
= 1:  the upper triangular	factor R associated with A in the
generalized QR factorization	of the pair (A,	B) is
singular, so	that rank(A) < M; the least squares
solution could not be computed.
= 2:  the bottom (N-M) by (N-M) part of the upper trapezoidal
factor T associated with B in the generalized QR
factorization of the	pair (A, B) is singular, so that
rank( A B ) < N; the	least squares solution could not
be computed.

Author
Univ. of Tennessee

Univ. of California Berkeley

NAG Ltd.

Definition at line 183 of file zggglm.f.

subroutine zhbev (character JOBZ, character UPLO, integer N,	integer	KD,
complex*16, dimension( ldab, * )	AB, integer LDAB, double precision,
dimension( * ) W, complex*16, dimension(	ldz, * ) Z, integer LDZ,
complex*16, dimension( *	) WORK,	double precision, dimension( * )
RWORK, integer INFO)
ZHBEV computes the eigenvalues and, optionally,	the left and/or	right
eigenvectors for	OTHER matrices

Purpose:

ZHBEV computes all the eigenvalues and, optionally,	eigenvectors of
a complex Hermitian	band matrix A.

Parameters
JOBZ

JOBZ is CHARACTER*1
= 'N':  Compute eigenvalues only;
= 'V':  Compute eigenvalues and eigenvectors.

UPLO

UPLO is CHARACTER*1
= 'U':  Upper triangle of A is stored;
= 'L':  Lower triangle of A is stored.

N

N is INTEGER
The order of the matrix A.	 N >= 0.

KD

KD	is INTEGER
The number	of superdiagonals of the matrix	A if UPLO = 'U',
or	the number of subdiagonals if UPLO = 'L'.  KD >= 0.

AB

AB	is COMPLEX*16 array, dimension (LDAB, N)
On	entry, the upper or lower triangle of the Hermitian band
matrix A, stored in the first KD+1	rows of	the array.  The
j-th column of A is stored	in the j-th column of the array	AB
as	follows:
if	UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for	max(1,j-kd)<=i<=j;
if	UPLO = 'L', AB(1+i-j,j)	   = A(i,j) for	j<=i<=min(n,j+kd).

On	exit, AB is overwritten	by values generated during the
reduction to tridiagonal form.  If	UPLO = 'U', the	first
superdiagonal and the diagonal of the tridiagonal matrix T
are returned in rows KD and KD+1 of AB, and if UPLO = 'L',
the diagonal and first subdiagonal	of T are returned in the
first two rows of AB.

LDAB

LDAB is INTEGER
The leading dimension of the array	AB.  LDAB >= KD	+ 1.

W

W is DOUBLE PRECISION array, dimension (N)
If	INFO = 0, the eigenvalues in ascending order.

Z

Z is COMPLEX*16 array, dimension (LDZ, N)
If	JOBZ = 'V', then if INFO = 0, Z	contains the orthonormal
eigenvectors of the matrix	A, with	the i-th column	of Z
holding the eigenvector associated	with W(i).
If	JOBZ = 'N', then Z is not referenced.

LDZ

LDZ is INTEGER
The leading dimension of the array	Z.  LDZ	>= 1, and if
JOBZ = 'V', LDZ >=	max(1,N).

WORK

WORK is COMPLEX*16	array, dimension (N)

RWORK

RWORK is DOUBLE PRECISION array, dimension	(max(1,3*N-2))

INFO

INFO is INTEGER
= 0:  successful exit.
< 0:  if INFO = -i, the i-th argument had an illegal value.
> 0:  if INFO = i,	the algorithm failed to	converge; i
off-diagonal	elements of an intermediate tridiagonal
form	did not	converge to zero.

Author
Univ. of Tennessee

Univ. of California Berkeley

NAG Ltd.

Definition at line 150 of file zhbev.f.

subroutine zhbev_2stage (character JOBZ, character UPLO, integer N, integer
KD, complex*16, dimension( ldab,	* ) AB,	integer	LDAB, double
precision, dimension( * ) W, complex*16,	dimension( ldz,	* ) Z, integer
LDZ, complex*16,	dimension( * ) WORK, integer LWORK, double precision,
dimension( * ) RWORK, integer INFO)
ZHBEV_2STAGE computes the eigenvalues and, optionally, the left	and/or
right eigenvectors for OTHER matrices

Purpose:

ZHBEV_2STAGE computes all the eigenvalues and, optionally, eigenvectors of
a complex Hermitian	band matrix A using the	2stage technique for
the	reduction to tridiagonal.

Parameters
JOBZ

JOBZ is CHARACTER*1
= 'N':  Compute eigenvalues only;
= 'V':  Compute eigenvalues and eigenvectors.
Not available in this release.

UPLO

UPLO is CHARACTER*1
= 'U':  Upper triangle of A is stored;
= 'L':  Lower triangle of A is stored.

N

N is INTEGER
The order of the matrix A.	 N >= 0.

KD

KD	is INTEGER
The number	of superdiagonals of the matrix	A if UPLO = 'U',
or	the number of subdiagonals if UPLO = 'L'.  KD >= 0.

AB

AB	is COMPLEX*16 array, dimension (LDAB, N)
On	entry, the upper or lower triangle of the Hermitian band
matrix A, stored in the first KD+1	rows of	the array.  The
j-th column of A is stored	in the j-th column of the array	AB
as	follows:
if	UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for	max(1,j-kd)<=i<=j;
if	UPLO = 'L', AB(1+i-j,j)	   = A(i,j) for	j<=i<=min(n,j+kd).

On	exit, AB is overwritten	by values generated during the
reduction to tridiagonal form.  If	UPLO = 'U', the	first
superdiagonal and the diagonal of the tridiagonal matrix T
are returned in rows KD and KD+1 of AB, and if UPLO = 'L',
the diagonal and first subdiagonal	of T are returned in the
first two rows of AB.

LDAB

LDAB is INTEGER
The leading dimension of the array	AB.  LDAB >= KD	+ 1.

W

W is DOUBLE PRECISION array, dimension (N)
If	INFO = 0, the eigenvalues in ascending order.

Z

Z is COMPLEX*16 array, dimension (LDZ, N)
If	JOBZ = 'V', then if INFO = 0, Z	contains the orthonormal
eigenvectors of the matrix	A, with	the i-th column	of Z
holding the eigenvector associated	with W(i).
If	JOBZ = 'N', then Z is not referenced.

LDZ

LDZ is INTEGER
The leading dimension of the array	Z.  LDZ	>= 1, and if
JOBZ = 'V', LDZ >=	max(1,N).

WORK

WORK is COMPLEX*16	array, dimension LWORK
On	exit, if INFO =	0, WORK(1) returns the optimal LWORK.

LWORK

LWORK is INTEGER
The length	of the array WORK. LWORK >= 1, when N <= 1;
otherwise
If	JOBZ = 'N' and N > 1, LWORK must be queried.
LWORK = MAX(1, dimension)	where
where KD is the size of the band.
openMP compilation is enabled, otherwise =1.
If	JOBZ = 'V' and N > 1, LWORK must be queried. Not yet available.

If	LWORK =	-1, then a workspace query is assumed; the routine
only calculates the optimal sizes of the WORK, RWORK and
IWORK arrays, returns these values	as the first entries of
the WORK, RWORK and IWORK arrays, and no error message
related to	LWORK or LRWORK	or LIWORK is issued by XERBLA.

RWORK

RWORK is DOUBLE PRECISION array, dimension	(max(1,3*N-2))

INFO

INFO is INTEGER
= 0:  successful exit.
< 0:  if INFO = -i, the i-th argument had an illegal value.
> 0:  if INFO = i,	the algorithm failed to	converge; i
off-diagonal	elements of an intermediate tridiagonal
form	did not	converge to zero.

Author
Univ. of Tennessee

Univ. of California Berkeley

NAG Ltd.

Further Details:

All details about the 2stage techniques are available in:

Azzam Haidar, Hatem Ltaief, and Jack Dongarra.
Parallel reduction	to condensed forms for symmetric eigenvalue problems
using aggregated fine-grained and memory-aware kernels. In	Proceedings
of	2011 International Conference for High Performance Computing,
Networking, Storage and Analysis (SC '11),	New York, NY, USA,
Article 8 , 11 pages.
http://doi.acm.org/10.1145/2063384.2063394

A.	Haidar,	J. Kurzak, P. Luszczek,	2013.
An	improved parallel singular value algorithm and its implementation
for multicore hardware, In	Proceedings of 2013 International Conference
for High Performance Computing, Networking, Storage and Analysis (SC '13).
Article 90, 12 pages.
http://doi.acm.org/10.1145/2503210.2503292

A.	Haidar,	R. Solca, S. Tomov, T. Schulthess and J. Dongarra.
A novel hybrid CPU-GPU generalized	eigensolver for	electronic structure
calculations based	on fine-grained	memory aware tasks.
International Journal of High Performance Computing Applications.
Volume 28 Issue 2,	Pages 196-209, May 2014.
http://hpc.sagepub.com/content/28/2/196

Definition at line 209 of file zhbev_2stage.f.

subroutine zhbevd (character	JOBZ, character	UPLO, integer N, integer KD,
complex*16, dimension( ldab, * )	AB, integer LDAB, double precision,
dimension( * ) W, complex*16, dimension(	ldz, * ) Z, integer LDZ,
complex*16, dimension( *	) WORK,	integer	LWORK, double precision,
dimension( * ) RWORK, integer LRWORK, integer, dimension( * ) IWORK,
integer LIWORK, integer INFO)
ZHBEVD computes	the eigenvalues	and, optionally, the left and/or right
eigenvectors for	OTHER matrices

Purpose:

ZHBEVD computes all	the eigenvalues	and, optionally, eigenvectors of
a complex Hermitian	band matrix A.	If eigenvectors	are desired, it
uses a divide and conquer algorithm.

The	divide and conquer algorithm makes very	mild assumptions about
floating point arithmetic. It will work on machines	with a guard
digit in add/subtract, or on those binary machines without guard
digits which subtract like the Cray	X-MP, Cray Y-MP, Cray C-90, or
Cray-2. It could conceivably fail on hexadecimal or	decimal	machines
without guard digits, but we know of none.

Parameters
JOBZ

JOBZ is CHARACTER*1
= 'N':  Compute eigenvalues only;
= 'V':  Compute eigenvalues and eigenvectors.

UPLO

UPLO is CHARACTER*1
= 'U':  Upper triangle of A is stored;
= 'L':  Lower triangle of A is stored.

N

N is INTEGER
The order of the matrix A.	 N >= 0.

KD

KD	is INTEGER
The number	of superdiagonals of the matrix	A if UPLO = 'U',
or	the number of subdiagonals if UPLO = 'L'.  KD >= 0.

AB

AB	is COMPLEX*16 array, dimension (LDAB, N)
On	entry, the upper or lower triangle of the Hermitian band
matrix A, stored in the first KD+1	rows of	the array.  The
j-th column of A is stored	in the j-th column of the array	AB
as	follows:
if	UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for	max(1,j-kd)<=i<=j;
if	UPLO = 'L', AB(1+i-j,j)	   = A(i,j) for	j<=i<=min(n,j+kd).

On	exit, AB is overwritten	by values generated during the
reduction to tridiagonal form.  If	UPLO = 'U', the	first
superdiagonal and the diagonal of the tridiagonal matrix T
are returned in rows KD and KD+1 of AB, and if UPLO = 'L',
the diagonal and first subdiagonal	of T are returned in the
first two rows of AB.

LDAB

LDAB is INTEGER
The leading dimension of the array	AB.  LDAB >= KD	+ 1.

W

W is DOUBLE PRECISION array, dimension (N)
If	INFO = 0, the eigenvalues in ascending order.

Z

Z is COMPLEX*16 array, dimension (LDZ, N)
If	JOBZ = 'V', then if INFO = 0, Z	contains the orthonormal
eigenvectors of the matrix	A, with	the i-th column	of Z
holding the eigenvector associated	with W(i).
If	JOBZ = 'N', then Z is not referenced.

LDZ

LDZ is INTEGER
The leading dimension of the array	Z.  LDZ	>= 1, and if
JOBZ = 'V', LDZ >=	max(1,N).

WORK

WORK is COMPLEX*16	array, dimension (MAX(1,LWORK))
On	exit, if INFO =	0, WORK(1) returns the optimal LWORK.

LWORK

LWORK is INTEGER
The dimension of the array	WORK.
If	N <= 1,		      LWORK must be at least 1.
If	JOBZ = 'N' and N > 1, LWORK must be at least N.
If	JOBZ = 'V' and N > 1, LWORK must be at least 2*N**2.

If	LWORK =	-1, then a workspace query is assumed; the routine
only calculates the optimal sizes of the WORK, RWORK and
IWORK arrays, returns these values	as the first entries of
the WORK, RWORK and IWORK arrays, and no error message
related to	LWORK or LRWORK	or LIWORK is issued by XERBLA.

RWORK

RWORK is DOUBLE PRECISION array,
dimension (LRWORK)
On	exit, if INFO =	0, RWORK(1) returns the	optimal	LRWORK.

LRWORK

LRWORK is INTEGER
The dimension of array RWORK.
If	N <= 1,		      LRWORK must be at	least 1.
If	JOBZ = 'N' and N > 1, LRWORK must be at	least N.
If	JOBZ = 'V' and N > 1, LRWORK must be at	least
1 + 5*N + 2*N**2.

If	LRWORK = -1, then a workspace query is assumed;	the
routine only calculates the optimal sizes of the WORK, RWORK
and IWORK arrays, returns these values as the first entries
of	the WORK, RWORK	and IWORK arrays, and no error message
related to	LWORK or LRWORK	or LIWORK is issued by XERBLA.

IWORK

IWORK is INTEGER array, dimension (MAX(1,LIWORK))
On	exit, if INFO =	0, IWORK(1) returns the	optimal	LIWORK.

LIWORK

LIWORK is INTEGER
The dimension of array IWORK.
If	JOBZ = 'N' or N	<= 1, LIWORK must be at	least 1.
If	JOBZ = 'V' and N > 1, LIWORK must be at	least 3	+ 5*N .

If	LIWORK = -1, then a workspace query is assumed;	the
routine only calculates the optimal sizes of the WORK, RWORK
and IWORK arrays, returns these values as the first entries
of	the WORK, RWORK	and IWORK arrays, and no error message
related to	LWORK or LRWORK	or LIWORK is issued by XERBLA.

INFO

INFO is INTEGER
= 0:  successful exit.
< 0:  if INFO = -i, the i-th argument had an illegal value.
> 0:  if INFO = i,	the algorithm failed to	converge; i
off-diagonal	elements of an intermediate tridiagonal
form	did not	converge to zero.

Author
Univ. of Tennessee

Univ. of California Berkeley

NAG Ltd.

Definition at line 213 of file zhbevd.f.

subroutine zhbevd_2stage (character JOBZ, character UPLO, integer N,
integer KD, complex*16, dimension( ldab,	* ) AB,	integer	LDAB, double
precision, dimension( * ) W, complex*16,	dimension( ldz,	* ) Z, integer
LDZ, complex*16,	dimension( * ) WORK, integer LWORK, double precision,
dimension( * ) RWORK, integer LRWORK, integer, dimension( * ) IWORK,
integer LIWORK, integer INFO)
ZHBEVD_2STAGE computes the eigenvalues and, optionally,	the left
and/or right eigenvectors for OTHER matrices

Purpose:

ZHBEVD_2STAGE computes all the eigenvalues and, optionally,	eigenvectors of
a complex Hermitian	band matrix A using the	2stage technique for
the	reduction to tridiagonal.  If eigenvectors are desired,	it
uses a divide and conquer algorithm.

The	divide and conquer algorithm makes very	mild assumptions about
floating point arithmetic. It will work on machines	with a guard
digit in add/subtract, or on those binary machines without guard
digits which subtract like the Cray	X-MP, Cray Y-MP, Cray C-90, or
Cray-2. It could conceivably fail on hexadecimal or	decimal	machines
without guard digits, but we know of none.

Parameters
JOBZ

JOBZ is CHARACTER*1
= 'N':  Compute eigenvalues only;
= 'V':  Compute eigenvalues and eigenvectors.
Not available in this release.

UPLO

UPLO is CHARACTER*1
= 'U':  Upper triangle of A is stored;
= 'L':  Lower triangle of A is stored.

N

N is INTEGER
The order of the matrix A.	 N >= 0.

KD

KD	is INTEGER
The number	of superdiagonals of the matrix	A if UPLO = 'U',
or	the number of subdiagonals if UPLO = 'L'.  KD >= 0.

AB

AB	is COMPLEX*16 array, dimension (LDAB, N)
On	entry, the upper or lower triangle of the Hermitian band
matrix A, stored in the first KD+1	rows of	the array.  The
j-th column of A is stored	in the j-th column of the array	AB
as	follows:
if	UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for	max(1,j-kd)<=i<=j;
if	UPLO = 'L', AB(1+i-j,j)	   = A(i,j) for	j<=i<=min(n,j+kd).

On	exit, AB is overwritten	by values generated during the
reduction to tridiagonal form.  If	UPLO = 'U', the	first
superdiagonal and the diagonal of the tridiagonal matrix T
are returned in rows KD and KD+1 of AB, and if UPLO = 'L',
the diagonal and first subdiagonal	of T are returned in the
first two rows of AB.

LDAB

LDAB is INTEGER
The leading dimension of the array	AB.  LDAB >= KD	+ 1.

W

W is DOUBLE PRECISION array, dimension (N)
If	INFO = 0, the eigenvalues in ascending order.

Z

Z is COMPLEX*16 array, dimension (LDZ, N)
If	JOBZ = 'V', then if INFO = 0, Z	contains the orthonormal
eigenvectors of the matrix	A, with	the i-th column	of Z
holding the eigenvector associated	with W(i).
If	JOBZ = 'N', then Z is not referenced.

LDZ

LDZ is INTEGER
The leading dimension of the array	Z.  LDZ	>= 1, and if
JOBZ = 'V', LDZ >=	max(1,N).

WORK

WORK is COMPLEX*16	array, dimension (MAX(1,LWORK))
On	exit, if INFO =	0, WORK(1) returns the optimal LWORK.

LWORK

LWORK is INTEGER
The length	of the array WORK. LWORK >= 1, when N <= 1;
otherwise
If	JOBZ = 'N' and N > 1, LWORK must be queried.
LWORK = MAX(1, dimension)	where
where KD is the size of the band.
openMP compilation is enabled, otherwise =1.
If	JOBZ = 'V' and N > 1, LWORK must be queried. Not yet available.

If	LWORK =	-1, then a workspace query is assumed; the routine
only calculates the optimal sizes of the WORK, RWORK and
IWORK arrays, returns these values	as the first entries of
the WORK, RWORK and IWORK arrays, and no error message
related to	LWORK or LRWORK	or LIWORK is issued by XERBLA.

RWORK

RWORK is DOUBLE PRECISION array,
dimension (LRWORK)
On	exit, if INFO =	0, RWORK(1) returns the	optimal	LRWORK.

LRWORK

LRWORK is INTEGER
The dimension of array RWORK.
If	N <= 1,		      LRWORK must be at	least 1.
If	JOBZ = 'N' and N > 1, LRWORK must be at	least N.
If	JOBZ = 'V' and N > 1, LRWORK must be at	least
1 + 5*N + 2*N**2.

If	LRWORK = -1, then a workspace query is assumed;	the
routine only calculates the optimal sizes of the WORK, RWORK
and IWORK arrays, returns these values as the first entries
of	the WORK, RWORK	and IWORK arrays, and no error message
related to	LWORK or LRWORK	or LIWORK is issued by XERBLA.

IWORK

IWORK is INTEGER array, dimension (MAX(1,LIWORK))
On	exit, if INFO =	0, IWORK(1) returns the	optimal	LIWORK.

LIWORK

LIWORK is INTEGER
The dimension of array IWORK.
If	JOBZ = 'N' or N	<= 1, LIWORK must be at	least 1.
If	JOBZ = 'V' and N > 1, LIWORK must be at	least 3	+ 5*N .

If	LIWORK = -1, then a workspace query is assumed;	the
routine only calculates the optimal sizes of the WORK, RWORK
and IWORK arrays, returns these values as the first entries
of	the WORK, RWORK	and IWORK arrays, and no error message
related to	LWORK or LRWORK	or LIWORK is issued by XERBLA.

INFO

INFO is INTEGER
= 0:  successful exit.
< 0:  if INFO = -i, the i-th argument had an illegal value.
> 0:  if INFO = i,	the algorithm failed to	converge; i
off-diagonal	elements of an intermediate tridiagonal
form	did not	converge to zero.

Author
Univ. of Tennessee

Univ. of California Berkeley

NAG Ltd.

Further Details:

All details about the 2stage techniques are available in:

Azzam Haidar, Hatem Ltaief, and Jack Dongarra.
Parallel reduction	to condensed forms for symmetric eigenvalue problems
using aggregated fine-grained and memory-aware kernels. In	Proceedings
of	2011 International Conference for High Performance Computing,
Networking, Storage and Analysis (SC '11),	New York, NY, USA,
Article 8 , 11 pages.
http://doi.acm.org/10.1145/2063384.2063394

A.	Haidar,	J. Kurzak, P. Luszczek,	2013.
An	improved parallel singular value algorithm and its implementation
for multicore hardware, In	Proceedings of 2013 International Conference
for High Performance Computing, Networking, Storage and Analysis (SC '13).
Article 90, 12 pages.
http://doi.acm.org/10.1145/2503210.2503292

A.	Haidar,	R. Solca, S. Tomov, T. Schulthess and J. Dongarra.
A novel hybrid CPU-GPU generalized	eigensolver for	electronic structure
calculations based	on fine-grained	memory aware tasks.
International Journal of High Performance Computing Applications.
Volume 28 Issue 2,	Pages 196-209, May 2014.
http://hpc.sagepub.com/content/28/2/196

Definition at line 257 of file zhbevd_2stage.f.

subroutine zhbevx (character	JOBZ, character	RANGE, character UPLO, integer
N, integer KD, complex*16, dimension( ldab, * ) AB, integer LDAB,
complex*16, dimension( ldq, * ) Q, integer LDQ, double precision	VL,
double precision	VU, integer IL,	integer	IU, double precision ABSTOL,
integer M, double precision, dimension( * ) W, complex*16, dimension(
ldz, * )	Z, integer LDZ,	complex*16, dimension( * ) WORK, double
precision, dimension( * ) RWORK,	integer, dimension( * )	IWORK,
integer,	dimension( * ) IFAIL, integer INFO)
ZHBEVX computes	the eigenvalues	and, optionally, the left and/or right
eigenvectors for	OTHER matrices

Purpose:

ZHBEVX computes selected eigenvalues and, optionally, eigenvectors
of a complex Hermitian band	matrix A.  Eigenvalues and eigenvectors
can	be selected by specifying either a range of values or a	range of
indices for	the desired eigenvalues.

Parameters
JOBZ

JOBZ is CHARACTER*1
= 'N':  Compute eigenvalues only;
= 'V':  Compute eigenvalues and eigenvectors.

RANGE

RANGE is CHARACTER*1
= 'A': all	eigenvalues will be found;
= 'V': all	eigenvalues in the half-open interval (VL,VU]
will be found;
= 'I': the	IL-th through IU-th eigenvalues	will be	found.

UPLO

UPLO is CHARACTER*1
= 'U':  Upper triangle of A is stored;
= 'L':  Lower triangle of A is stored.

N

N is INTEGER
The order of the matrix A.	 N >= 0.

KD

KD	is INTEGER
The number	of superdiagonals of the matrix	A if UPLO = 'U',
or	the number of subdiagonals if UPLO = 'L'.  KD >= 0.

AB

AB	is COMPLEX*16 array, dimension (LDAB, N)
On	entry, the upper or lower triangle of the Hermitian band
matrix A, stored in the first KD+1	rows of	the array.  The
j-th column of A is stored	in the j-th column of the array	AB
as	follows:
if	UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for	max(1,j-kd)<=i<=j;
if	UPLO = 'L', AB(1+i-j,j)	   = A(i,j) for	j<=i<=min(n,j+kd).

On	exit, AB is overwritten	by values generated during the
reduction to tridiagonal form.

LDAB

LDAB is INTEGER
The leading dimension of the array	AB.  LDAB >= KD	+ 1.

Q

Q is COMPLEX*16 array, dimension (LDQ, N)
If	JOBZ = 'V', the	N-by-N unitary matrix used in the
reduction to tridiagonal form.
If	JOBZ = 'N', the	array Q	is not referenced.

LDQ

LDQ is INTEGER
The leading dimension of the array	Q.  If JOBZ = 'V', then
LDQ >= max(1,N).

VL

VL	is DOUBLE PRECISION
If	RANGE='V', the lower bound of the interval to
be	searched for eigenvalues. VL < VU.
Not referenced if RANGE = 'A' or 'I'.

VU

VU	is DOUBLE PRECISION
If	RANGE='V', the upper bound of the interval to
be	searched for eigenvalues. VL < VU.
Not referenced if RANGE = 'A' or 'I'.

IL

IL	is INTEGER
If	RANGE='I', the index of	the
smallest eigenvalue to be returned.
1 <= IL <=	IU <= N, if N >	0; IL =	1 and IU = 0 if	N = 0.
Not referenced if RANGE = 'A' or 'V'.

IU

IU	is INTEGER
If	RANGE='I', the index of	the
largest eigenvalue	to be returned.
1 <= IL <=	IU <= N, if N >	0; IL =	1 and IU = 0 if	N = 0.
Not referenced if RANGE = 'A' or 'V'.

ABSTOL

ABSTOL is DOUBLE PRECISION
The absolute error	tolerance for the eigenvalues.
An	approximate eigenvalue is accepted as converged
when it is	determined to lie in an	interval [a,b]
of	width less than	or equal to

ABSTOL + EPS *   max( |a|,|b| ) ,

where EPS is the machine precision.  If ABSTOL is less than
or	equal to zero, then  EPS*|T|  will be used in its place,
where |T| is the 1-norm of	the tridiagonal	matrix obtained
by	reducing AB to tridiagonal form.

Eigenvalues will be computed most accurately when ABSTOL is
set to twice the underflow	threshold 2*DLAMCH('S'), not zero.
If	this routine returns with INFO>0, indicating that some
eigenvectors did not converge, try	setting	ABSTOL to
2*DLAMCH('S').

See "Computing Small Singular Values of Bidiagonal	Matrices
with Guaranteed High Relative Accuracy," by Demmel	and
Kahan, LAPACK Working Note	#3.

M

M is INTEGER
The total number of eigenvalues found.  0 <= M <= N.
If	RANGE =	'A', M = N, and	if RANGE = 'I',	M = IU-IL+1.

W

W is DOUBLE PRECISION array, dimension (N)
The first M elements contain the selected eigenvalues in
ascending order.

Z

Z is COMPLEX*16 array, dimension (LDZ, max(1,M))
If	JOBZ = 'V', then if INFO = 0, the first	M columns of Z
contain the orthonormal eigenvectors of the matrix	A
corresponding to the selected eigenvalues,	with the i-th
column of Z holding the eigenvector associated with W(i).
If	an eigenvector fails to	converge, then that column of Z
contains the latest approximation to the eigenvector, and the
index of the eigenvector is returned in IFAIL.
If	JOBZ = 'N', then Z is not referenced.
Note: the user must ensure	that at	least max(1,M) columns are
supplied in the array Z; if RANGE = 'V', the exact	value of M
is	not known in advance and an upper bound	must be	used.

LDZ

LDZ is INTEGER
The leading dimension of the array	Z.  LDZ	>= 1, and if
JOBZ = 'V', LDZ >=	max(1,N).

WORK

WORK is COMPLEX*16	array, dimension (N)

RWORK

RWORK is DOUBLE PRECISION array, dimension	(7*N)

IWORK

IWORK is INTEGER array, dimension (5*N)

IFAIL

IFAIL is INTEGER array, dimension (N)
If	JOBZ = 'V', then if INFO = 0, the first	M elements of
IFAIL are zero.  If INFO >	0, then	IFAIL contains the
indices of	the eigenvectors that failed to	converge.
If	JOBZ = 'N', then IFAIL is not referenced.

INFO

INFO is INTEGER
= 0:  successful exit
< 0:  if INFO = -i, the i-th argument had an illegal value
> 0:  if INFO = i,	then i eigenvectors failed to converge.
Their indices are stored in array IFAIL.

Author
Univ. of Tennessee

Univ. of California Berkeley

NAG Ltd.

Definition at line 264 of file zhbevx.f.

subroutine zhbevx_2stage (character JOBZ, character RANGE, character	UPLO,
integer N, integer KD, complex*16, dimension( ldab, * ) AB, integer
LDAB, complex*16, dimension( ldq, * ) Q,	integer	LDQ, double precision
VL, double precision VU,	integer	IL, integer IU,	double precision
ABSTOL, integer M, double precision, dimension( * ) W, complex*16,
dimension( ldz, * ) Z, integer LDZ, complex*16, dimension( * ) WORK,
integer LWORK, double precision,	dimension( * ) RWORK, integer,
dimension( * ) IWORK, integer, dimension( * ) IFAIL, integer INFO)
ZHBEVX_2STAGE computes the eigenvalues and, optionally,	the left
and/or right eigenvectors for OTHER matrices

Purpose:

ZHBEVX_2STAGE computes selected eigenvalues	and, optionally, eigenvectors
of a complex Hermitian band	matrix A using the 2stage technique for
the	reduction to tridiagonal.  Eigenvalues and eigenvectors
can	be selected by specifying either a range of values or a	range of
indices for	the desired eigenvalues.

Parameters
JOBZ

JOBZ is CHARACTER*1
= 'N':  Compute eigenvalues only;
= 'V':  Compute eigenvalues and eigenvectors.
Not available in this release.

RANGE

RANGE is CHARACTER*1
= 'A': all	eigenvalues will be found;
= 'V': all	eigenvalues in the half-open interval (VL,VU]
will be found;
= 'I': the	IL-th through IU-th eigenvalues	will be	found.

UPLO

UPLO is CHARACTER*1
= 'U':  Upper triangle of A is stored;
= 'L':  Lower triangle of A is stored.

N

N is INTEGER
The order of the matrix A.	 N >= 0.

KD

KD	is INTEGER
The number	of superdiagonals of the matrix	A if UPLO = 'U',
or	the number of subdiagonals if UPLO = 'L'.  KD >= 0.

AB

AB	is COMPLEX*16 array, dimension (LDAB, N)
On	entry, the upper or lower triangle of the Hermitian band
matrix A, stored in the first KD+1	rows of	the array.  The
j-th column of A is stored	in the j-th column of the array	AB
as	follows:
if	UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for	max(1,j-kd)<=i<=j;
if	UPLO = 'L', AB(1+i-j,j)	   = A(i,j) for	j<=i<=min(n,j+kd).

On	exit, AB is overwritten	by values generated during the
reduction to tridiagonal form.

LDAB

LDAB is INTEGER
The leading dimension of the array	AB.  LDAB >= KD	+ 1.

Q

Q is COMPLEX*16 array, dimension (LDQ, N)
If	JOBZ = 'V', the	N-by-N unitary matrix used in the
reduction to tridiagonal form.
If	JOBZ = 'N', the	array Q	is not referenced.

LDQ

LDQ is INTEGER
The leading dimension of the array	Q.  If JOBZ = 'V', then
LDQ >= max(1,N).

VL

VL	is DOUBLE PRECISION
If	RANGE='V', the lower bound of the interval to
be	searched for eigenvalues. VL < VU.
Not referenced if RANGE = 'A' or 'I'.

VU

VU	is DOUBLE PRECISION
If	RANGE='V', the upper bound of the interval to
be	searched for eigenvalues. VL < VU.
Not referenced if RANGE = 'A' or 'I'.

IL

IL	is INTEGER
If	RANGE='I', the index of	the
smallest eigenvalue to be returned.
1 <= IL <=	IU <= N, if N >	0; IL =	1 and IU = 0 if	N = 0.
Not referenced if RANGE = 'A' or 'V'.

IU

IU	is INTEGER
If	RANGE='I', the index of	the
largest eigenvalue	to be returned.
1 <= IL <=	IU <= N, if N >	0; IL =	1 and IU = 0 if	N = 0.
Not referenced if RANGE = 'A' or 'V'.

ABSTOL

ABSTOL is DOUBLE PRECISION
The absolute error	tolerance for the eigenvalues.
An	approximate eigenvalue is accepted as converged
when it is	determined to lie in an	interval [a,b]
of	width less than	or equal to

ABSTOL + EPS *   max( |a|,|b| ) ,

where EPS is the machine precision.  If ABSTOL is less than
or	equal to zero, then  EPS*|T|  will be used in its place,
where |T| is the 1-norm of	the tridiagonal	matrix obtained
by	reducing AB to tridiagonal form.

Eigenvalues will be computed most accurately when ABSTOL is
set to twice the underflow	threshold 2*DLAMCH('S'), not zero.
If	this routine returns with INFO>0, indicating that some
eigenvectors did not converge, try	setting	ABSTOL to
2*DLAMCH('S').

See "Computing Small Singular Values of Bidiagonal	Matrices
with Guaranteed High Relative Accuracy," by Demmel	and
Kahan, LAPACK Working Note	#3.

M

M is INTEGER
The total number of eigenvalues found.  0 <= M <= N.
If	RANGE =	'A', M = N, and	if RANGE = 'I',	M = IU-IL+1.

W

W is DOUBLE PRECISION array, dimension (N)
The first M elements contain the selected eigenvalues in
ascending order.

Z

Z is COMPLEX*16 array, dimension (LDZ, max(1,M))
If	JOBZ = 'V', then if INFO = 0, the first	M columns of Z
contain the orthonormal eigenvectors of the matrix	A
corresponding to the selected eigenvalues,	with the i-th
column of Z holding the eigenvector associated with W(i).
If	an eigenvector fails to	converge, then that column of Z
contains the latest approximation to the eigenvector, and the
index of the eigenvector is returned in IFAIL.
If	JOBZ = 'N', then Z is not referenced.
Note: the user must ensure	that at	least max(1,M) columns are
supplied in the array Z; if RANGE = 'V', the exact	value of M
is	not known in advance and an upper bound	must be	used.

LDZ

LDZ is INTEGER
The leading dimension of the array	Z.  LDZ	>= 1, and if
JOBZ = 'V', LDZ >=	max(1,N).

WORK

WORK is COMPLEX*16	array, dimension (LWORK)

LWORK

LWORK is INTEGER
The length	of the array WORK. LWORK >= 1, when N <= 1;
otherwise
If	JOBZ = 'N' and N > 1, LWORK must be queried.
LWORK = MAX(1, dimension)	where
where KD is the size of the band.
openMP compilation is enabled, otherwise =1.
If	JOBZ = 'V' and N > 1, LWORK must be queried. Not yet available.

If	LWORK =	-1, then a workspace query is assumed; the routine
only calculates the optimal sizes of the WORK, RWORK and
IWORK arrays, returns these values	as the first entries of
the WORK, RWORK and IWORK arrays, and no error message
related to	LWORK or LRWORK	or LIWORK is issued by XERBLA.

RWORK

RWORK is DOUBLE PRECISION array, dimension	(7*N)

IWORK

IWORK is INTEGER array, dimension (5*N)

IFAIL

IFAIL is INTEGER array, dimension (N)
If	JOBZ = 'V', then if INFO = 0, the first	M elements of
IFAIL are zero.  If INFO >	0, then	IFAIL contains the
indices of	the eigenvectors that failed to	converge.
If	JOBZ = 'N', then IFAIL is not referenced.

INFO

INFO is INTEGER
= 0:  successful exit
< 0:  if INFO = -i, the i-th argument had an illegal value
> 0:  if INFO = i,	then i eigenvectors failed to converge.
Their indices are stored in array IFAIL.

Author
Univ. of Tennessee

Univ. of California Berkeley

NAG Ltd.

Further Details:

All details about the 2stage techniques are available in:

Azzam Haidar, Hatem Ltaief, and Jack Dongarra.
Parallel reduction	to condensed forms for symmetric eigenvalue problems
using aggregated fine-grained and memory-aware kernels. In	Proceedings
of	2011 International Conference for High Performance Computing,
Networking, Storage and Analysis (SC '11),	New York, NY, USA,
Article 8 , 11 pages.
http://doi.acm.org/10.1145/2063384.2063394

A.	Haidar,	J. Kurzak, P. Luszczek,	2013.
An	improved parallel singular value algorithm and its implementation
for multicore hardware, In	Proceedings of 2013 International Conference
for High Performance Computing, Networking, Storage and Analysis (SC '13).
Article 90, 12 pages.
http://doi.acm.org/10.1145/2503210.2503292

A.	Haidar,	R. Solca, S. Tomov, T. Schulthess and J. Dongarra.
A novel hybrid CPU-GPU generalized	eigensolver for	electronic structure
calculations based	on fine-grained	memory aware tasks.
International Journal of High Performance Computing Applications.
Volume 28 Issue 2,	Pages 196-209, May 2014.
http://hpc.sagepub.com/content/28/2/196

Definition at line 323 of file zhbevx_2stage.f.

subroutine zhbgv (character JOBZ, character UPLO, integer N,	integer	KA,
integer KB, complex*16, dimension( ldab,	* ) AB,	integer	LDAB,
complex*16, dimension( ldbb, * )	BB, integer LDBB, double precision,
dimension( * ) W, complex*16, dimension(	ldz, * ) Z, integer LDZ,
complex*16, dimension( *	) WORK,	double precision, dimension( * )
RWORK, integer INFO)
ZHBGV

Purpose:

ZHBGV computes all the eigenvalues,	and optionally,	the eigenvectors
of a complex generalized Hermitian-definite	banded eigenproblem, of
the	form A*x=(lambda)*B*x. Here A and B are	assumed	to be Hermitian
and	banded,	and B is also positive definite.

Parameters
JOBZ

JOBZ is CHARACTER*1
= 'N':  Compute eigenvalues only;
= 'V':  Compute eigenvalues and eigenvectors.

UPLO

UPLO is CHARACTER*1
= 'U':  Upper triangles of	A and B	are stored;
= 'L':  Lower triangles of	A and B	are stored.

N

N is INTEGER
The order of the matrices A and B.	 N >= 0.

KA

KA	is INTEGER
The number	of superdiagonals of the matrix	A if UPLO = 'U',
or	the number of subdiagonals if UPLO = 'L'. KA >=	0.

KB

KB	is INTEGER
The number	of superdiagonals of the matrix	B if UPLO = 'U',
or	the number of subdiagonals if UPLO = 'L'. KB >=	0.

AB

AB	is COMPLEX*16 array, dimension (LDAB, N)
On	entry, the upper or lower triangle of the Hermitian band
matrix A, stored in the first ka+1	rows of	the array.  The
j-th column of A is stored	in the j-th column of the array	AB
as	follows:
if	UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for	max(1,j-ka)<=i<=j;
if	UPLO = 'L', AB(1+i-j,j)	   = A(i,j) for	j<=i<=min(n,j+ka).

On	exit, the contents of AB are destroyed.

LDAB

LDAB is INTEGER
The leading dimension of the array	AB.  LDAB >= KA+1.

BB

BB	is COMPLEX*16 array, dimension (LDBB, N)
On	entry, the upper or lower triangle of the Hermitian band
matrix B, stored in the first kb+1	rows of	the array.  The
j-th column of B is stored	in the j-th column of the array	BB
as	follows:
if	UPLO = 'U', BB(kb+1+i-j,j) = B(i,j) for	max(1,j-kb)<=i<=j;
if	UPLO = 'L', BB(1+i-j,j)	   = B(i,j) for	j<=i<=min(n,j+kb).

On	exit, the factor S from	the split Cholesky factorization
B = S**H*S, as returned by	ZPBSTF.

LDBB

LDBB is INTEGER
The leading dimension of the array	BB.  LDBB >= KB+1.

W

W is DOUBLE PRECISION array, dimension (N)
If	INFO = 0, the eigenvalues in ascending order.

Z

Z is COMPLEX*16 array, dimension (LDZ, N)
If	JOBZ = 'V', then if INFO = 0, Z	contains the matrix Z of
eigenvectors, with	the i-th column	of Z holding the
eigenvector associated with W(i). The eigenvectors	are
normalized	so that	Z**H*B*Z = I.
If	JOBZ = 'N', then Z is not referenced.

LDZ

LDZ is INTEGER
The leading dimension of the array	Z.  LDZ	>= 1, and if
JOBZ = 'V', LDZ >=	N.

WORK

WORK is COMPLEX*16	array, dimension (N)

RWORK

RWORK is DOUBLE PRECISION array, dimension	(3*N)

INFO

INFO is INTEGER
= 0:  successful exit
< 0:  if INFO = -i, the i-th argument had an illegal value
> 0:  if INFO = i,	and i is:
<= N:  the algorithm failed to converge:
i off-diagonal elements of an intermediate
tridiagonal form	did not	converge to zero;
> N:   if INFO = N + i,	for 1 <= i <= N, then ZPBSTF
returned	INFO = i: B is not positive definite.
The factorization of B could not	be completed and
no eigenvalues or eigenvectors were computed.

Author
Univ. of Tennessee

Univ. of California Berkeley

NAG Ltd.

Definition at line 181 of file zhbgv.f.

subroutine zhbgvd (character	JOBZ, character	UPLO, integer N, integer KA,
integer KB, complex*16, dimension( ldab,	* ) AB,	integer	LDAB,
complex*16, dimension( ldbb, * )	BB, integer LDBB, double precision,
dimension( * ) W, complex*16, dimension(	ldz, * ) Z, integer LDZ,
complex*16, dimension( *	) WORK,	integer	LWORK, double precision,
dimension( * ) RWORK, integer LRWORK, integer, dimension( * ) IWORK,
integer LIWORK, integer INFO)
ZHBGVD

Purpose:

ZHBGVD computes all	the eigenvalues, and optionally, the eigenvectors
of a complex generalized Hermitian-definite	banded eigenproblem, of
the	form A*x=(lambda)*B*x. Here A and B are	assumed	to be Hermitian
and	banded,	and B is also positive definite.  If eigenvectors are
desired, it	uses a divide and conquer algorithm.

The	divide and conquer algorithm makes very	mild assumptions about
floating point arithmetic. It will work on machines	with a guard
digit in add/subtract, or on those binary machines without guard
digits which subtract like the Cray	X-MP, Cray Y-MP, Cray C-90, or
Cray-2. It could conceivably fail on hexadecimal or	decimal	machines
without guard digits, but we know of none.

Parameters
JOBZ

JOBZ is CHARACTER*1
= 'N':  Compute eigenvalues only;
= 'V':  Compute eigenvalues and eigenvectors.

UPLO

UPLO is CHARACTER*1
= 'U':  Upper triangles of	A and B	are stored;
= 'L':  Lower triangles of	A and B	are stored.

N

N is INTEGER
The order of the matrices A and B.	 N >= 0.

KA

KA	is INTEGER
The number	of superdiagonals of the matrix	A if UPLO = 'U',
or	the number of subdiagonals if UPLO = 'L'. KA >=	0.

KB

KB	is INTEGER
The number	of superdiagonals of the matrix	B if UPLO = 'U',
or	the number of subdiagonals if UPLO = 'L'. KB >=	0.

AB

AB	is COMPLEX*16 array, dimension (LDAB, N)
On	entry, the upper or lower triangle of the Hermitian band
matrix A, stored in the first ka+1	rows of	the array.  The
j-th column of A is stored	in the j-th column of the array	AB
as	follows:
if	UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for	max(1,j-ka)<=i<=j;
if	UPLO = 'L', AB(1+i-j,j)	   = A(i,j) for	j<=i<=min(n,j+ka).

On	exit, the contents of AB are destroyed.

LDAB

LDAB is INTEGER
The leading dimension of the array	AB.  LDAB >= KA+1.

BB

BB	is COMPLEX*16 array, dimension (LDBB, N)
On	entry, the upper or lower triangle of the Hermitian band
matrix B, stored in the first kb+1	rows of	the array.  The
j-th column of B is stored	in the j-th column of the array	BB
as	follows:
if	UPLO = 'U', BB(kb+1+i-j,j) = B(i,j) for	max(1,j-kb)<=i<=j;
if	UPLO = 'L', BB(1+i-j,j)	   = B(i,j) for	j<=i<=min(n,j+kb).

On	exit, the factor S from	the split Cholesky factorization
B = S**H*S, as returned by	ZPBSTF.

LDBB

LDBB is INTEGER
The leading dimension of the array	BB.  LDBB >= KB+1.

W

W is DOUBLE PRECISION array, dimension (N)
If	INFO = 0, the eigenvalues in ascending order.

Z

Z is COMPLEX*16 array, dimension (LDZ, N)
If	JOBZ = 'V', then if INFO = 0, Z	contains the matrix Z of
eigenvectors, with	the i-th column	of Z holding the
eigenvector associated with W(i). The eigenvectors	are
normalized	so that	Z**H*B*Z = I.
If	JOBZ = 'N', then Z is not referenced.

LDZ

LDZ is INTEGER
The leading dimension of the array	Z.  LDZ	>= 1, and if
JOBZ = 'V', LDZ >=	N.

WORK

WORK is COMPLEX*16	array, dimension (MAX(1,LWORK))
On	exit, if INFO=0, WORK(1) returns the optimal LWORK.

LWORK

LWORK is INTEGER
The dimension of the array	WORK.
If	N <= 1,		      LWORK >= 1.
If	JOBZ = 'N' and N > 1, LWORK >= N.
If	JOBZ = 'V' and N > 1, LWORK >= 2*N**2.

If	LWORK =	-1, then a workspace query is assumed; the routine
only calculates the optimal sizes of the WORK, RWORK and
IWORK arrays, returns these values	as the first entries of
the WORK, RWORK and IWORK arrays, and no error message
related to	LWORK or LRWORK	or LIWORK is issued by XERBLA.

RWORK

RWORK is DOUBLE PRECISION array, dimension	(MAX(1,LRWORK))
On	exit, if INFO=0, RWORK(1) returns the optimal LRWORK.

LRWORK

LRWORK is INTEGER
The dimension of array RWORK.
If	N <= 1,		      LRWORK >=	1.
If	JOBZ = 'N' and N > 1, LRWORK >=	N.
If	JOBZ = 'V' and N > 1, LRWORK >=	1 + 5*N	+ 2*N**2.

If	LRWORK = -1, then a workspace query is assumed;	the
routine only calculates the optimal sizes of the WORK, RWORK
and IWORK arrays, returns these values as the first entries
of	the WORK, RWORK	and IWORK arrays, and no error message
related to	LWORK or LRWORK	or LIWORK is issued by XERBLA.

IWORK

IWORK is INTEGER array, dimension (MAX(1,LIWORK))
On	exit, if INFO=0, IWORK(1) returns the optimal LIWORK.

LIWORK

LIWORK is INTEGER
The dimension of array IWORK.
If	JOBZ = 'N' or N	<= 1, LIWORK >=	1.
If	JOBZ = 'V' and N > 1, LIWORK >=	3 + 5*N.

If	LIWORK = -1, then a workspace query is assumed;	the
routine only calculates the optimal sizes of the WORK, RWORK
and IWORK arrays, returns these values as the first entries
of	the WORK, RWORK	and IWORK arrays, and no error message
related to	LWORK or LRWORK	or LIWORK is issued by XERBLA.

INFO

INFO is INTEGER
= 0:  successful exit
< 0:  if INFO = -i, the i-th argument had an illegal value
> 0:  if INFO = i,	and i is:
<= N:  the algorithm failed to converge:
i off-diagonal elements of an intermediate
tridiagonal form	did not	converge to zero;
> N:   if INFO = N + i,	for 1 <= i <= N, then ZPBSTF
returned	INFO = i: B is not positive definite.
The factorization of B could not	be completed and
no eigenvalues or eigenvectors were computed.

Author
Univ. of Tennessee

Univ. of California Berkeley

NAG Ltd.

Contributors:
Mark	Fahey, Department of Mathematics, Univ.	of Kentucky, USA

Definition at line 249 of file zhbgvd.f.

subroutine zhbgvx (character	JOBZ, character	RANGE, character UPLO, integer
N, integer KA, integer KB, complex*16, dimension( ldab, * ) AB, integer
LDAB, complex*16, dimension( ldbb, * ) BB, integer LDBB,	complex*16,
dimension( ldq, * ) Q, integer LDQ, double precision VL,	double
precision VU, integer IL, integer IU, double precision ABSTOL, integer
M, double precision, dimension( * ) W, complex*16, dimension( ldz, * )
Z, integer LDZ, complex*16, dimension( *	) WORK,	double precision,
dimension( * ) RWORK, integer, dimension( * ) IWORK, integer,
dimension( * ) IFAIL, integer INFO)
ZHBGVX

Purpose:

ZHBGVX computes all	the eigenvalues, and optionally, the eigenvectors
of a complex generalized Hermitian-definite	banded eigenproblem, of
the	form A*x=(lambda)*B*x. Here A and B are	assumed	to be Hermitian
and	banded,	and B is also positive definite.  Eigenvalues and
eigenvectors can be	selected by specifying either all eigenvalues,
a range of values or a range of indices for	the desired eigenvalues.

Parameters
JOBZ

JOBZ is CHARACTER*1
= 'N':  Compute eigenvalues only;
= 'V':  Compute eigenvalues and eigenvectors.

RANGE

RANGE is CHARACTER*1
= 'A': all	eigenvalues will be found;
= 'V': all	eigenvalues in the half-open interval (VL,VU]
will be found;
= 'I': the	IL-th through IU-th eigenvalues	will be	found.

UPLO

UPLO is CHARACTER*1
= 'U':  Upper triangles of	A and B	are stored;
= 'L':  Lower triangles of	A and B	are stored.

N

N is INTEGER
The order of the matrices A and B.	 N >= 0.

KA

KA	is INTEGER
The number	of superdiagonals of the matrix	A if UPLO = 'U',
or	the number of subdiagonals if UPLO = 'L'. KA >=	0.

KB

KB	is INTEGER
The number	of superdiagonals of the matrix	B if UPLO = 'U',
or	the number of subdiagonals if UPLO = 'L'. KB >=	0.

AB

AB	is COMPLEX*16 array, dimension (LDAB, N)
On	entry, the upper or lower triangle of the Hermitian band
matrix A, stored in the first ka+1	rows of	the array.  The
j-th column of A is stored	in the j-th column of the array	AB
as	follows:
if	UPLO = 'U', AB(ka+1+i-j,j) = A(i,j) for	max(1,j-ka)<=i<=j;
if	UPLO = 'L', AB(1+i-j,j)	   = A(i,j) for	j<=i<=min(n,j+ka).

On	exit, the contents of AB are destroyed.

LDAB

LDAB is INTEGER
The leading dimension of the array	AB.  LDAB >= KA+1.

BB

BB	is COMPLEX*16 array, dimension (LDBB, N)
On	entry, the upper or lower triangle of the Hermitian band
matrix B, stored in the first kb+1	rows of	the array.  The
j-th column of B is stored	in the j-th column of the array	BB
as	follows:
if	UPLO = 'U', BB(kb+1+i-j,j) = B(i,j) for	max(1,j-kb)<=i<=j;
if	UPLO = 'L', BB(1+i-j,j)	   = B(i,j) for	j<=i<=min(n,j+kb).

On	exit, the factor S from	the split Cholesky factorization
B = S**H*S, as returned by	ZPBSTF.

LDBB

LDBB is INTEGER
The leading dimension of the array	BB.  LDBB >= KB+1.

Q

Q is COMPLEX*16 array, dimension (LDQ, N)
If	JOBZ = 'V', the	n-by-n matrix used in the reduction of
A*x = (lambda)*B*x	to standard form, i.e. C*x = (lambda)*x,
and consequently C	to tridiagonal form.
If	JOBZ = 'N', the	array Q	is not referenced.

LDQ

LDQ is INTEGER
The leading dimension of the array	Q.  If JOBZ = 'N',
LDQ >= 1. If JOBZ = 'V', LDQ >= max(1,N).

VL

VL	is DOUBLE PRECISION

If	RANGE='V', the lower bound of the interval to
be	searched for eigenvalues. VL < VU.
Not referenced if RANGE = 'A' or 'I'.

VU

VU	is DOUBLE PRECISION

If	RANGE='V', the upper bound of the interval to
be	searched for eigenvalues. VL < VU.
Not referenced if RANGE = 'A' or 'I'.

IL

IL	is INTEGER

If	RANGE='I', the index of	the
smallest eigenvalue to be returned.
1 <= IL <=	IU <= N, if N >	0; IL =	1 and IU = 0 if	N = 0.
Not referenced if RANGE = 'A' or 'V'.

IU

IU	is INTEGER

If	RANGE='I', the index of	the
largest eigenvalue	to be returned.
1 <= IL <=	IU <= N, if N >	0; IL =	1 and IU = 0 if	N = 0.
Not referenced if RANGE = 'A' or 'V'.

ABSTOL

ABSTOL is DOUBLE PRECISION
The absolute error	tolerance for the eigenvalues.
An	approximate eigenvalue is accepted as converged
when it is	determined to lie in an	interval [a,b]
of	width less than	or equal to

ABSTOL + EPS *   max( |a|,|b| ) ,

where EPS is the machine precision.  If ABSTOL is less than
or	equal to zero, then  EPS*|T|  will be used in its place,
where |T| is the 1-norm of	the tridiagonal	matrix obtained
by	reducing AP to tridiagonal form.

Eigenvalues will be computed most accurately when ABSTOL is
set to twice the underflow	threshold 2*DLAMCH('S'), not zero.
If	this routine returns with INFO>0, indicating that some
eigenvectors did not converge, try	setting	ABSTOL to
2*DLAMCH('S').

M

M is INTEGER
The total number of eigenvalues found.  0 <= M <= N.
If	RANGE =	'A', M = N, and	if RANGE = 'I',	M = IU-IL+1.

W

W is DOUBLE PRECISION array, dimension (N)
If	INFO = 0, the eigenvalues in ascending order.

Z

Z is COMPLEX*16 array, dimension (LDZ, N)
If	JOBZ = 'V', then if INFO = 0, Z	contains the matrix Z of
eigenvectors, with	the i-th column	of Z holding the
eigenvector associated with W(i). The eigenvectors	are
normalized	so that	Z**H*B*Z = I.
If	JOBZ = 'N', then Z is not referenced.

LDZ

LDZ is INTEGER
The leading dimension of the array	Z.  LDZ	>= 1, and if
JOBZ = 'V', LDZ >=	N.

WORK

WORK is COMPLEX*16	array, dimension (N)

RWORK

RWORK is DOUBLE PRECISION array, dimension	(7*N)

IWORK

IWORK is INTEGER array, dimension (5*N)

IFAIL

IFAIL is INTEGER array, dimension (N)
If	JOBZ = 'V', then if INFO = 0, the first	M elements of
IFAIL are zero.  If INFO >	0, then	IFAIL contains the
indices of	the eigenvectors that failed to	converge.
If	JOBZ = 'N', then IFAIL is not referenced.

INFO

INFO is INTEGER
= 0:  successful exit
< 0:  if INFO = -i, the i-th argument had an illegal value
> 0:  if INFO = i,	and i is:
<= N:  then i eigenvectors failed to converge.	Their
indices are stored in array IFAIL.
> N:   if INFO = N + i,	for 1 <= i <= N, then ZPBSTF
returned	INFO = i: B is not positive definite.
The factorization of B could not	be completed and
no eigenvalues or eigenvectors were computed.

Author
Univ. of Tennessee

Univ. of California Berkeley

NAG Ltd.

Contributors:
Mark	Fahey, Department of Mathematics, Univ.	of Kentucky, USA

Definition at line 297 of file zhbgvx.f.

subroutine zhpev (character JOBZ, character UPLO, integer N,	complex*16,
dimension( * ) AP, double precision, dimension( * ) W, complex*16,
dimension( ldz, * ) Z, integer LDZ, complex*16, dimension( * ) WORK,
double precision, dimension( * )	RWORK, integer INFO)
ZHPEV computes the eigenvalues and, optionally,	the left and/or	right
eigenvectors for	OTHER matrices

Purpose:

ZHPEV computes all the eigenvalues and, optionally,	eigenvectors of	a
complex Hermitian matrix in	packed storage.

Parameters
JOBZ

JOBZ is CHARACTER*1
= 'N':  Compute eigenvalues only;
= 'V':  Compute eigenvalues and eigenvectors.

UPLO

UPLO is CHARACTER*1
= 'U':  Upper triangle of A is stored;
= 'L':  Lower triangle of A is stored.

N

N is INTEGER
The order of the matrix A.	 N >= 0.

AP

AP	is COMPLEX*16 array, dimension (N*(N+1)/2)
On	entry, the upper or lower triangle of the Hermitian matrix
A,	packed columnwise in a linear array.  The j-th column of A
is	stored in the array AP as follows:
if	UPLO = 'U', AP(i + (j-1)*j/2) =	A(i,j) for 1<=i<=j;
if	UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n.

On	exit, AP is overwritten	by values generated during the
reduction to tridiagonal form.  If	UPLO = 'U', the	diagonal
and first superdiagonal of	the tridiagonal	matrix T overwrite
the corresponding elements	of A, and if UPLO = 'L', the
diagonal and first	subdiagonal of T overwrite the
corresponding elements of A.

W

W is DOUBLE PRECISION array, dimension (N)
If	INFO = 0, the eigenvalues in ascending order.

Z

Z is COMPLEX*16 array, dimension (LDZ, N)
If	JOBZ = 'V', then if INFO = 0, Z	contains the orthonormal
eigenvectors of the matrix	A, with	the i-th column	of Z
holding the eigenvector associated	with W(i).
If	JOBZ = 'N', then Z is not referenced.

LDZ

LDZ is INTEGER
The leading dimension of the array	Z.  LDZ	>= 1, and if
JOBZ = 'V', LDZ >=	max(1,N).

WORK

WORK is COMPLEX*16	array, dimension (max(1, 2*N-1))

RWORK

RWORK is DOUBLE PRECISION array, dimension	(max(1,	3*N-2))

INFO

INFO is INTEGER
= 0:  successful exit.
< 0:  if INFO = -i, the i-th argument had an illegal value.
> 0:  if INFO = i,	the algorithm failed to	converge; i
off-diagonal	elements of an intermediate tridiagonal
form	did not	converge to zero.

Author
Univ. of Tennessee

Univ. of California Berkeley

NAG Ltd.

Definition at line 136 of file zhpev.f.

subroutine zhpevd (character	JOBZ, character	UPLO, integer N, complex*16,
dimension( * ) AP, double precision, dimension( * ) W, complex*16,
dimension( ldz, * ) Z, integer LDZ, complex*16, dimension( * ) WORK,
integer LWORK, double precision,	dimension( * ) RWORK, integer LRWORK,
integer,	dimension( * ) IWORK, integer LIWORK, integer INFO)
ZHPEVD computes	the eigenvalues	and, optionally, the left and/or right
eigenvectors for	OTHER matrices

Purpose:

ZHPEVD computes all	the eigenvalues	and, optionally, eigenvectors of
a complex Hermitian	matrix A in packed storage.  If	eigenvectors are
desired, it	uses a divide and conquer algorithm.

The	divide and conquer algorithm makes very	mild assumptions about
floating point arithmetic. It will work on machines	with a guard
digit in add/subtract, or on those binary machines without guard
digits which subtract like the Cray	X-MP, Cray Y-MP, Cray C-90, or
Cray-2. It could conceivably fail on hexadecimal or	decimal	machines
without guard digits, but we know of none.

Parameters
JOBZ

JOBZ is CHARACTER*1
= 'N':  Compute eigenvalues only;
= 'V':  Compute eigenvalues and eigenvectors.

UPLO

UPLO is CHARACTER*1
= 'U':  Upper triangle of A is stored;
= 'L':  Lower triangle of A is stored.

N

N is INTEGER
The order of the matrix A.	 N >= 0.

AP

AP	is COMPLEX*16 array, dimension (N*(N+1)/2)
On	entry, the upper or lower triangle of the Hermitian matrix
A,	packed columnwise in a linear array.  The j-th column of A
is	stored in the array AP as follows:
if	UPLO = 'U', AP(i + (j-1)*j/2) =	A(i,j) for 1<=i<=j;
if	UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n.

On	exit, AP is overwritten	by values generated during the
reduction to tridiagonal form.  If	UPLO = 'U', the	diagonal
and first superdiagonal of	the tridiagonal	matrix T overwrite
the corresponding elements	of A, and if UPLO = 'L', the
diagonal and first	subdiagonal of T overwrite the
corresponding elements of A.

W

W is DOUBLE PRECISION array, dimension (N)
If	INFO = 0, the eigenvalues in ascending order.

Z

Z is COMPLEX*16 array, dimension (LDZ, N)
If	JOBZ = 'V', then if INFO = 0, Z	contains the orthonormal
eigenvectors of the matrix	A, with	the i-th column	of Z
holding the eigenvector associated	with W(i).
If	JOBZ = 'N', then Z is not referenced.

LDZ

LDZ is INTEGER
The leading dimension of the array	Z.  LDZ	>= 1, and if
JOBZ = 'V', LDZ >=	max(1,N).

WORK

WORK is COMPLEX*16	array, dimension (MAX(1,LWORK))
On	exit, if INFO =	0, WORK(1) returns the required	LWORK.

LWORK

LWORK is INTEGER
The dimension of array WORK.
If	N <= 1,		      LWORK must be at least 1.
If	JOBZ = 'N' and N > 1, LWORK must be at least N.
If	JOBZ = 'V' and N > 1, LWORK must be at least 2*N.

If	LWORK =	-1, then a workspace query is assumed; the routine
only calculates the required sizes	of the WORK, RWORK and
IWORK arrays, returns these values	as the first entries of
the WORK, RWORK and IWORK arrays, and no error message
related to	LWORK or LRWORK	or LIWORK is issued by XERBLA.

RWORK

RWORK is DOUBLE PRECISION array, dimension	(MAX(1,LRWORK))
On	exit, if INFO =	0, RWORK(1) returns the	required LRWORK.

LRWORK

LRWORK is INTEGER
The dimension of array RWORK.
If	N <= 1,		      LRWORK must be at	least 1.
If	JOBZ = 'N' and N > 1, LRWORK must be at	least N.
If	JOBZ = 'V' and N > 1, LRWORK must be at	least
1 + 5*N + 2*N**2.

If	LRWORK = -1, then a workspace query is assumed;	the
routine only calculates the required sizes	of the WORK, RWORK
and IWORK arrays, returns these values as the first entries
of	the WORK, RWORK	and IWORK arrays, and no error message
related to	LWORK or LRWORK	or LIWORK is issued by XERBLA.

IWORK

IWORK is INTEGER array, dimension (MAX(1,LIWORK))
On	exit, if INFO =	0, IWORK(1) returns the	required LIWORK.

LIWORK

LIWORK is INTEGER
The dimension of array IWORK.
If	JOBZ  =	'N' or N <= 1, LIWORK must be at least 1.
If	JOBZ  =	'V' and	N > 1, LIWORK must be at least 3 + 5*N.

If	LIWORK = -1, then a workspace query is assumed;	the
routine only calculates the required sizes	of the WORK, RWORK
and IWORK arrays, returns these values as the first entries
of	the WORK, RWORK	and IWORK arrays, and no error message
related to	LWORK or LRWORK	or LIWORK is issued by XERBLA.

INFO

INFO is INTEGER
= 0:  successful exit
< 0:  if INFO = -i, the i-th argument had an illegal value.
> 0:  if INFO = i,	the algorithm failed to	converge; i
off-diagonal	elements of an intermediate tridiagonal
form	did not	converge to zero.

Author
Univ. of Tennessee

Univ. of California Berkeley

NAG Ltd.

Definition at line 198 of file zhpevd.f.

subroutine zhpevx (character	JOBZ, character	RANGE, character UPLO, integer
N, complex*16, dimension( * ) AP, double	precision VL, double precision
VU, integer IL, integer IU, double precision ABSTOL, integer M, double
precision, dimension( * ) W, complex*16,	dimension( ldz,	* ) Z, integer
LDZ, complex*16,	dimension( * ) WORK, double precision, dimension( * )
RWORK, integer, dimension( * ) IWORK, integer, dimension( * ) IFAIL,
integer INFO)
ZHPEVX computes	the eigenvalues	and, optionally, the left and/or right
eigenvectors for	OTHER matrices

Purpose:

ZHPEVX computes selected eigenvalues and, optionally, eigenvectors
of a complex Hermitian matrix A in packed storage.
Eigenvalues/vectors	can be selected	by specifying either a range of
values or a	range of indices for the desired eigenvalues.

Parameters
JOBZ

JOBZ is CHARACTER*1
= 'N':  Compute eigenvalues only;
= 'V':  Compute eigenvalues and eigenvectors.

RANGE

RANGE is CHARACTER*1
= 'A': all	eigenvalues will be found;
= 'V': all	eigenvalues in the half-open interval (VL,VU]
will be found;
= 'I': the	IL-th through IU-th eigenvalues	will be	found.

UPLO

UPLO is CHARACTER*1
= 'U':  Upper triangle of A is stored;
= 'L':  Lower triangle of A is stored.

N

N is INTEGER
The order of the matrix A.	 N >= 0.

AP

AP	is COMPLEX*16 array, dimension (N*(N+1)/2)
On	entry, the upper or lower triangle of the Hermitian matrix
A,	packed columnwise in a linear array.  The j-th column of A
is	stored in the array AP as follows:
if	UPLO = 'U', AP(i + (j-1)*j/2) =	A(i,j) for 1<=i<=j;
if	UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n.

On	exit, AP is overwritten	by values generated during the
reduction to tridiagonal form.  If	UPLO = 'U', the	diagonal
and first superdiagonal of	the tridiagonal	matrix T overwrite
the corresponding elements	of A, and if UPLO = 'L', the
diagonal and first	subdiagonal of T overwrite the
corresponding elements of A.

VL

VL	is DOUBLE PRECISION
If	RANGE='V', the lower bound of the interval to
be	searched for eigenvalues. VL < VU.
Not referenced if RANGE = 'A' or 'I'.

VU

VU	is DOUBLE PRECISION
If	RANGE='V', the upper bound of the interval to
be	searched for eigenvalues. VL < VU.
Not referenced if RANGE = 'A' or 'I'.

IL

IL	is INTEGER
If	RANGE='I', the index of	the
smallest eigenvalue to be returned.
1 <= IL <=	IU <= N, if N >	0; IL =	1 and IU = 0 if	N = 0.
Not referenced if RANGE = 'A' or 'V'.

IU

IU	is INTEGER
If	RANGE='I', the index of	the
largest eigenvalue	to be returned.
1 <= IL <=	IU <= N, if N >	0; IL =	1 and IU = 0 if	N = 0.
Not referenced if RANGE = 'A' or 'V'.

ABSTOL

ABSTOL is DOUBLE PRECISION
The absolute error	tolerance for the eigenvalues.
An	approximate eigenvalue is accepted as converged
when it is	determined to lie in an	interval [a,b]
of	width less than	or equal to

ABSTOL + EPS *   max( |a|,|b| ) ,

where EPS is the machine precision.  If ABSTOL is less than
or	equal to zero, then  EPS*|T|  will be used in its place,
where |T| is the 1-norm of	the tridiagonal	matrix obtained
by	reducing AP to tridiagonal form.

Eigenvalues will be computed most accurately when ABSTOL is
set to twice the underflow	threshold 2*DLAMCH('S'), not zero.
If	this routine returns with INFO>0, indicating that some
eigenvectors did not converge, try	setting	ABSTOL to
2*DLAMCH('S').

See "Computing Small Singular Values of Bidiagonal	Matrices
with Guaranteed High Relative Accuracy," by Demmel	and
Kahan, LAPACK Working Note	#3.

M

M is INTEGER
The total number of eigenvalues found.  0 <= M <= N.
If	RANGE =	'A', M = N, and	if RANGE = 'I',	M = IU-IL+1.

W

W is DOUBLE PRECISION array, dimension (N)
If	INFO = 0, the selected eigenvalues in ascending	order.

Z

Z is COMPLEX*16 array, dimension (LDZ, max(1,M))
If	JOBZ = 'V', then if INFO = 0, the first	M columns of Z
contain the orthonormal eigenvectors of the matrix	A
corresponding to the selected eigenvalues,	with the i-th
column of Z holding the eigenvector associated with W(i).
If	an eigenvector fails to	converge, then that column of Z
contains the latest approximation to the eigenvector, and
the index of the eigenvector is returned in IFAIL.
If	JOBZ = 'N', then Z is not referenced.
Note: the user must ensure	that at	least max(1,M) columns are
supplied in the array Z; if RANGE = 'V', the exact	value of M
is	not known in advance and an upper bound	must be	used.

LDZ

LDZ is INTEGER
The leading dimension of the array	Z.  LDZ	>= 1, and if
JOBZ = 'V', LDZ >=	max(1,N).

WORK

WORK is COMPLEX*16	array, dimension (2*N)

RWORK

RWORK is DOUBLE PRECISION array, dimension	(7*N)

IWORK

IWORK is INTEGER array, dimension (5*N)

IFAIL

IFAIL is INTEGER array, dimension (N)
If	JOBZ = 'V', then if INFO = 0, the first	M elements of
IFAIL are zero.  If INFO >	0, then	IFAIL contains the
indices of	the eigenvectors that failed to	converge.
If	JOBZ = 'N', then IFAIL is not referenced.

INFO

INFO is INTEGER
= 0:  successful exit
< 0:  if INFO = -i, the i-th argument had an illegal value
> 0:  if INFO = i,	then i eigenvectors failed to converge.
Their indices are stored in array IFAIL.

Author
Univ. of Tennessee

Univ. of California Berkeley

NAG Ltd.

Definition at line 237 of file zhpevx.f.

subroutine zhpgv (integer ITYPE, character JOBZ, character UPLO, integer N,
complex*16, dimension( *	) AP, complex*16, dimension( * ) BP, double
precision, dimension( * ) W, complex*16,	dimension( ldz,	* ) Z, integer
LDZ, complex*16,	dimension( * ) WORK, double precision, dimension( * )
RWORK, integer INFO)
ZHPGV

Purpose:

ZHPGV computes all the eigenvalues and, optionally,	the eigenvectors
of a complex generalized Hermitian-definite	eigenproblem, of the form
A*x=(lambda)*B*x,  A*Bx=(lambda)*x,	 or B*A*x=(lambda)*x.
Here A and B are assumed to	be Hermitian, stored in	packed format,
and	B is also positive definite.

Parameters
ITYPE

ITYPE is INTEGER
Specifies the problem type	to be solved:
= 1:  A*x = (lambda)*B*x
= 2:  A*B*x = (lambda)*x
= 3:  B*A*x = (lambda)*x

JOBZ

JOBZ is CHARACTER*1
= 'N':  Compute eigenvalues only;
= 'V':  Compute eigenvalues and eigenvectors.

UPLO

UPLO is CHARACTER*1
= 'U':  Upper triangles of	A and B	are stored;
= 'L':  Lower triangles of	A and B	are stored.

N

N is INTEGER
The order of the matrices A and B.	 N >= 0.

AP

AP	is COMPLEX*16 array, dimension (N*(N+1)/2)
On	entry, the upper or lower triangle of the Hermitian matrix
A,	packed columnwise in a linear array.  The j-th column of A
is	stored in the array AP as follows:
if	UPLO = 'U', AP(i + (j-1)*j/2) =	A(i,j) for 1<=i<=j;
if	UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n.

On	exit, the contents of AP are destroyed.

BP

BP	is COMPLEX*16 array, dimension (N*(N+1)/2)
On	entry, the upper or lower triangle of the Hermitian matrix
B,	packed columnwise in a linear array.  The j-th column of B
is	stored in the array BP as follows:
if	UPLO = 'U', BP(i + (j-1)*j/2) =	B(i,j) for 1<=i<=j;
if	UPLO = 'L', BP(i + (j-1)*(2*n-j)/2) = B(i,j) for j<=i<=n.

On	exit, the triangular factor U or L from	the Cholesky
factorization B = U**H*U or B = L*L**H, in	the same storage
format as B.

W

W is DOUBLE PRECISION array, dimension (N)
If	INFO = 0, the eigenvalues in ascending order.

Z

Z is COMPLEX*16 array, dimension (LDZ, N)
If	JOBZ = 'V', then if INFO = 0, Z	contains the matrix Z of
eigenvectors.  The	eigenvectors are normalized as follows:
if	ITYPE =	1 or 2,	Z**H*B*Z = I;
if	ITYPE =	3, Z**H*inv(B)*Z = I.
If	JOBZ = 'N', then Z is not referenced.

LDZ

LDZ is INTEGER
The leading dimension of the array	Z.  LDZ	>= 1, and if
JOBZ = 'V', LDZ >=	max(1,N).

WORK

WORK is COMPLEX*16	array, dimension (max(1, 2*N-1))

RWORK

RWORK is DOUBLE PRECISION array, dimension	(max(1,	3*N-2))

INFO

INFO is INTEGER
= 0:  successful exit
< 0:  if INFO = -i, the i-th argument had an illegal value
> 0:  ZPPTRF or ZHPEV returned an error code:
<= N:  if INFO = i, ZHPEV failed to converge;
i off-diagonal elements of an intermediate
tridiagonal form	did not	convergeto zero;
> N:   if INFO = N + i,	for 1 <= i <= n, then the leading
minor of	order i	of B is	not positive definite.
The factorization of B could not	be completed and
no eigenvalues or eigenvectors were computed.

Author
Univ. of Tennessee

Univ. of California Berkeley

NAG Ltd.

Definition at line 163 of file zhpgv.f.

subroutine zhpgvd (integer ITYPE, character JOBZ, character UPLO, integer
N, complex*16, dimension( * ) AP, complex*16, dimension(	* ) BP,	double
precision, dimension( * ) W, complex*16,	dimension( ldz,	* ) Z, integer
LDZ, complex*16,	dimension( * ) WORK, integer LWORK, double precision,
dimension( * ) RWORK, integer LRWORK, integer, dimension( * ) IWORK,
integer LIWORK, integer INFO)
ZHPGVD

Purpose:

ZHPGVD computes all	the eigenvalues	and, optionally, the eigenvectors
of a complex generalized Hermitian-definite	eigenproblem, of the form
A*x=(lambda)*B*x,  A*Bx=(lambda)*x,	 or B*A*x=(lambda)*x.  Here A and
B are assumed to be	Hermitian, stored in packed format, and	B is also
positive definite.
If eigenvectors are	desired, it uses a divide and conquer algorithm.

The	divide and conquer algorithm makes very	mild assumptions about
floating point arithmetic. It will work on machines	with a guard
digit in add/subtract, or on those binary machines without guard
digits which subtract like the Cray	X-MP, Cray Y-MP, Cray C-90, or
Cray-2. It could conceivably fail on hexadecimal or	decimal	machines
without guard digits, but we know of none.

Parameters
ITYPE

ITYPE is INTEGER
Specifies the problem type	to be solved:
= 1:  A*x = (lambda)*B*x
= 2:  A*B*x = (lambda)*x
= 3:  B*A*x = (lambda)*x

JOBZ

JOBZ is CHARACTER*1
= 'N':  Compute eigenvalues only;
= 'V':  Compute eigenvalues and eigenvectors.

UPLO

UPLO is CHARACTER*1
= 'U':  Upper triangles of	A and B	are stored;
= 'L':  Lower triangles of	A and B	are stored.

N

N is INTEGER
The order of the matrices A and B.	 N >= 0.

AP

AP	is COMPLEX*16 array, dimension (N*(N+1)/2)
On	entry, the upper or lower triangle of the Hermitian matrix
A,	packed columnwise in a linear array.  The j-th column of A
is	stored in the array AP as follows:
if	UPLO = 'U', AP(i + (j-1)*j/2) =	A(i,j) for 1<=i<=j;
if	UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n.

On	exit, the contents of AP are destroyed.

BP

BP	is COMPLEX*16 array, dimension (N*(N+1)/2)
On	entry, the upper or lower triangle of the Hermitian matrix
B,	packed columnwise in a linear array.  The j-th column of B
is	stored in the array BP as follows:
if	UPLO = 'U', BP(i + (j-1)*j/2) =	B(i,j) for 1<=i<=j;
if	UPLO = 'L', BP(i + (j-1)*(2*n-j)/2) = B(i,j) for j<=i<=n.

On	exit, the triangular factor U or L from	the Cholesky
factorization B = U**H*U or B = L*L**H, in	the same storage
format as B.

W

W is DOUBLE PRECISION array, dimension (N)
If	INFO = 0, the eigenvalues in ascending order.

Z

Z is COMPLEX*16 array, dimension (LDZ, N)
If	JOBZ = 'V', then if INFO = 0, Z	contains the matrix Z of
eigenvectors.  The	eigenvectors are normalized as follows:
if	ITYPE =	1 or 2,	Z**H*B*Z = I;
if	ITYPE =	3, Z**H*inv(B)*Z = I.
If	JOBZ = 'N', then Z is not referenced.

LDZ

LDZ is INTEGER
The leading dimension of the array	Z.  LDZ	>= 1, and if
JOBZ = 'V', LDZ >=	max(1,N).

WORK

WORK is COMPLEX*16	array, dimension (MAX(1,LWORK))
On	exit, if INFO =	0, WORK(1) returns the required	LWORK.

LWORK

LWORK is INTEGER
The dimension of the array	WORK.
If	N <= 1,		      LWORK >= 1.
If	JOBZ = 'N' and N > 1, LWORK >= N.
If	JOBZ = 'V' and N > 1, LWORK >= 2*N.

If	LWORK =	-1, then a workspace query is assumed; the routine
only calculates the required sizes	of the WORK, RWORK and
IWORK arrays, returns these values	as the first entries of
the WORK, RWORK and IWORK arrays, and no error message
related to	LWORK or LRWORK	or LIWORK is issued by XERBLA.

RWORK

RWORK is DOUBLE PRECISION array, dimension	(MAX(1,LRWORK))
On	exit, if INFO =	0, RWORK(1) returns the	required LRWORK.

LRWORK

LRWORK is INTEGER
The dimension of array RWORK.
If	N <= 1,		      LRWORK >=	1.
If	JOBZ = 'N' and N > 1, LRWORK >=	N.
If	JOBZ = 'V' and N > 1, LRWORK >=	1 + 5*N	+ 2*N**2.

If	LRWORK = -1, then a workspace query is assumed;	the
routine only calculates the required sizes	of the WORK, RWORK
and IWORK arrays, returns these values as the first entries
of	the WORK, RWORK	and IWORK arrays, and no error message
related to	LWORK or LRWORK	or LIWORK is issued by XERBLA.

IWORK

IWORK is INTEGER array, dimension (MAX(1,LIWORK))
On	exit, if INFO =	0, IWORK(1) returns the	required LIWORK.

LIWORK

LIWORK is INTEGER
The dimension of array IWORK.
If	JOBZ  =	'N' or N <= 1, LIWORK >= 1.
If	JOBZ  =	'V' and	N > 1, LIWORK >= 3 + 5*N.

If	LIWORK = -1, then a workspace query is assumed;	the
routine only calculates the required sizes	of the WORK, RWORK
and IWORK arrays, returns these values as the first entries
of	the WORK, RWORK	and IWORK arrays, and no error message
related to	LWORK or LRWORK	or LIWORK is issued by XERBLA.

INFO

INFO is INTEGER
= 0:  successful exit
< 0:  if INFO = -i, the i-th argument had an illegal value
> 0:  ZPPTRF or ZHPEVD returned an	error code:
<= N:  if INFO = i, ZHPEVD failed to converge;
i off-diagonal elements of an intermediate
tridiagonal form	did not	convergeto zero;
> N:   if INFO = N + i,	for 1 <= i <= n, then the leading
minor of	order i	of B is	not positive definite.
The factorization of B could not	be completed and
no eigenvalues or eigenvectors were computed.

Author
Univ. of Tennessee

Univ. of California Berkeley

NAG Ltd.

Contributors:
Mark	Fahey, Department of Mathematics, Univ.	of Kentucky, USA

Definition at line 229 of file zhpgvd.f.

subroutine zhpgvx (integer ITYPE, character JOBZ, character RANGE,
character UPLO, integer N, complex*16, dimension( * ) AP, complex*16,
dimension( * ) BP, double precision VL, double precision	VU, integer
IL, integer IU, double precision	ABSTOL,	integer	M, double precision,
dimension( * ) W, complex*16, dimension(	ldz, * ) Z, integer LDZ,
complex*16, dimension( *	) WORK,	double precision, dimension( * )
RWORK, integer, dimension( * ) IWORK, integer, dimension( * ) IFAIL,
integer INFO)
ZHPGVX

Purpose:

ZHPGVX computes selected eigenvalues and, optionally, eigenvectors
of a complex generalized Hermitian-definite	eigenproblem, of the form
A*x=(lambda)*B*x,  A*Bx=(lambda)*x,	 or B*A*x=(lambda)*x.  Here A and
B are assumed to be	Hermitian, stored in packed format, and	B is also
positive definite.	Eigenvalues and	eigenvectors can be selected by
specifying either a	range of values	or a range of indices for the
desired eigenvalues.

Parameters
ITYPE

ITYPE is INTEGER
Specifies the problem type	to be solved:
= 1:  A*x = (lambda)*B*x
= 2:  A*B*x = (lambda)*x
= 3:  B*A*x = (lambda)*x

JOBZ

JOBZ is CHARACTER*1
= 'N':  Compute eigenvalues only;
= 'V':  Compute eigenvalues and eigenvectors.

RANGE

RANGE is CHARACTER*1
= 'A': all	eigenvalues will be found;
= 'V': all	eigenvalues in the half-open interval (VL,VU]
will be found;
= 'I': the	IL-th through IU-th eigenvalues	will be	found.

UPLO

UPLO is CHARACTER*1
= 'U':  Upper triangles of	A and B	are stored;
= 'L':  Lower triangles of	A and B	are stored.

N

N is INTEGER
The order of the matrices A and B.	 N >= 0.

AP

AP	is COMPLEX*16 array, dimension (N*(N+1)/2)
On	entry, the upper or lower triangle of the Hermitian matrix
A,	packed columnwise in a linear array.  The j-th column of A
is	stored in the array AP as follows:
if	UPLO = 'U', AP(i + (j-1)*j/2) =	A(i,j) for 1<=i<=j;
if	UPLO = 'L', AP(i + (j-1)*(2*n-j)/2) = A(i,j) for j<=i<=n.

On	exit, the contents of AP are destroyed.

BP

BP	is COMPLEX*16 array, dimension (N*(N+1)/2)
On	entry, the upper or lower triangle of the Hermitian matrix
B,	packed columnwise in a linear array.  The j-th column of B
is	stored in the array BP as follows:
if	UPLO = 'U', BP(i + (j-1)*j/2) =	B(i,j) for 1<=i<=j;
if	UPLO = 'L', BP(i + (j-1)*(2*n-j)/2) = B(i,j) for j<=i<=n.

On	exit, the triangular factor U or L from	the Cholesky
factorization B = U**H*U or B = L*L**H, in	the same storage
format as B.

VL

VL	is DOUBLE PRECISION

If	RANGE='V', the lower bound of the interval to
be	searched for eigenvalues. VL < VU.
Not referenced if RANGE = 'A' or 'I'.

VU

VU	is DOUBLE PRECISION

If	RANGE='V', the upper bound of the interval to
be	searched for eigenvalues. VL < VU.
Not referenced if RANGE = 'A' or 'I'.

IL

IL	is INTEGER

If	RANGE='I', the index of	the
smallest eigenvalue to be returned.
1 <= IL <=	IU <= N, if N >	0; IL =	1 and IU = 0 if	N = 0.
Not referenced if RANGE = 'A' or 'V'.

IU

IU	is INTEGER

If	RANGE='I', the index of	the
largest eigenvalue	to be returned.
1 <= IL <=	IU <= N, if N >	0; IL =	1 and IU = 0 if	N = 0.
Not referenced if RANGE = 'A' or 'V'.

ABSTOL

ABSTOL is DOUBLE PRECISION
The absolute error	tolerance for the eigenvalues.
An	approximate eigenvalue is accepted as converged
when it is	determined to lie in an	interval [a,b]
of	width less than	or equal to

ABSTOL + EPS *   max( |a|,|b| ) ,

where EPS is the machine precision.  If ABSTOL is less than
or	equal to zero, then  EPS*|T|  will be used in its place,
where |T| is the 1-norm of	the tridiagonal	matrix obtained
by	reducing AP to tridiagonal form.

Eigenvalues will be computed most accurately when ABSTOL is
set to twice the underflow	threshold 2*DLAMCH('S'), not zero.
If	this routine returns with INFO>0, indicating that some
eigenvectors did not converge, try	setting	ABSTOL to
2*DLAMCH('S').

M

M is INTEGER
The total number of eigenvalues found.  0 <= M <= N.
If	RANGE =	'A', M = N, and	if RANGE = 'I',	M = IU-IL+1.

W

W is DOUBLE PRECISION array, dimension (N)
On	normal exit, the first M elements contain the selected
eigenvalues in ascending order.

Z

Z is COMPLEX*16 array, dimension (LDZ, N)
If	JOBZ = 'N', then Z is not referenced.
If	JOBZ = 'V', then if INFO = 0, the first	M columns of Z
contain the orthonormal eigenvectors of the matrix	A
corresponding to the selected eigenvalues,	with the i-th
column of Z holding the eigenvector associated with W(i).
The eigenvectors are normalized as	follows:
if	ITYPE =	1 or 2,	Z**H*B*Z = I;
if	ITYPE =	3, Z**H*inv(B)*Z = I.

If	an eigenvector fails to	converge, then that column of Z
contains the latest approximation to the eigenvector, and the
index of the eigenvector is returned in IFAIL.
Note: the user must ensure	that at	least max(1,M) columns are
supplied in the array Z; if RANGE = 'V', the exact	value of M
is	not known in advance and an upper bound	must be	used.

LDZ

LDZ is INTEGER
The leading dimension of the array	Z.  LDZ	>= 1, and if
JOBZ = 'V', LDZ >=	max(1,N).

WORK

WORK is COMPLEX*16	array, dimension (2*N)

RWORK

RWORK is DOUBLE PRECISION array, dimension	(7*N)

IWORK

IWORK is INTEGER array, dimension (5*N)

IFAIL

IFAIL is INTEGER array, dimension (N)
If	JOBZ = 'V', then if INFO = 0, the first	M elements of
IFAIL are zero.  If INFO >	0, then	IFAIL contains the
indices of	the eigenvectors that failed to	converge.
If	JOBZ = 'N', then IFAIL is not referenced.

INFO

INFO is INTEGER
= 0:  successful exit
< 0:  if INFO = -i, the i-th argument had an illegal value
> 0:  ZPPTRF or ZHPEVX returned an	error code:
<= N:  if INFO = i, ZHPEVX failed to converge;
i eigenvectors failed to	converge.  Their indices
are stored in array IFAIL.
> N:   if INFO = N + i,	for 1 <= i <= n, then the leading
minor of	order i	of B is	not positive definite.
The factorization of B could not	be completed and
no eigenvalues or eigenvectors were computed.

Author
Univ. of Tennessee

Univ. of California Berkeley

NAG Ltd.

Contributors:
Mark	Fahey, Department of Mathematics, Univ.	of Kentucky, USA

Definition at line 274 of file zhpgvx.f.

Author
Generated automatically by Doxygen for LAPACK from the source code.

Version	3.10.0			Mon Jun	28 2021		complex16OTHEReigen(3)
```

NAME | SYNOPSIS | Detailed Description | Function Documentation | Author

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=complex16OTHEReigen&sektion=3&manpath=FreeBSD+13.0-RELEASE+and+Ports>