CTREVC(l)		LAPACK routine (version	1.1)		    CTREVC(l)

NAME
  CTREVC - compute all or some right and/or left eigenvectors of a complex
  upper	triangular matrix T

SYNOPSIS

  SUBROUTINE CTREVC( JOB, HOWMNY, SELECT, N, T,	LDT, VL, LDVL, VR, LDVR, MM,
		     M,	WORK, RWORK, INFO )

      CHARACTER	     HOWMNY, JOB

      INTEGER	     INFO, LDT,	LDVL, LDVR, M, MM, N

      LOGICAL	     SELECT( * )

      REAL	     RWORK( * )

      COMPLEX	     T(	LDT, * ), VL( LDVL, * ), VR( LDVR, * ),	WORK( *	)

PURPOSE
  CTREVC computes all or some right and/or left	eigenvectors of	a complex
  upper	triangular matrix T.

  The right eigenvector	x and the left eigenvector y of	T corresponding	to an
  eigenvalue w are defined by:

	       T*x = w*x,     y**H*T = w*y**H.

  The routine may either return	the matrices X and/or Y	of right or left
  eigenvectors of T, or	the products Q*X and/or	Q*Y, where Q is	an input uni-
  tary matrix. If T was	obtained from the Schur	factorization of an original
  matrix A = Q*T*Q**H, then Q*X	and/or Q*Y are the matrices of right or	left
  eigenvectors of A.

ARGUMENTS

  JOB	  (input) CHARACTER*1
	  = 'R':  compute right	eigenvectors only;
	  = 'L':  compute left eigenvectors only;
	  = 'B':  compute both right and left eigenvectors.

  HOWMNY  (input) CHARACTER*1
	  = 'A':  compute all right and/or left	eigenvectors;
	  = 'O':  compute all right and/or left	eigenvectors, multiplied on
	  the left by an input (generally unitary) matrix; = 'S':  compute
	  some right and/or left eigenvectors, specified by the	logical	array
	  SELECT.

  SELECT  (input) LOGICAL array, dimension (N)
	  If HOWMNY = 'S', SELECT specifies the	eigenvectors to	be computed.
	  To select the	eigenvector corresponding to the j-th eigenvalue,
	  SELECT(j) must be set	to .TRUE..  If HOWMNY =	'A' or 'O', SELECT is
	  not referenced.

  N	  (input) INTEGER
	  The order of the matrix T. N >= 0.

  T	  (input/output) COMPLEX array,	dimension (LDT,N)
	  The upper triangular matrix T.  T is modified, but restored on
	  exit.

  LDT	  (input) INTEGER
	  The leading dimension	of the array T.	LDT >= max(1,N).

  VL	  (input/output) COMPLEX array,	dimension (LDVL,MM)
	  On entry, if JOB = 'L' or 'B'	and HOWMNY = 'O', VL must contain an
	  N-by-N matrix	Q (usually the unitary matrix Q	of Schur vectors
	  returned by CHSEQR).	On exit, if JOB	= 'L' or 'B', VL contains: if
	  HOWMNY = 'A',	the matrix Y of	left eigenvectors of T;	if HOWMNY =
	  'O', the matrix Q*Y; if HOWMNY = 'S',	the left eigenvectors of T
	  specified by SELECT, stored consecutively in the columns of VL, in
	  the same order as their eigenvalues.	If JOB = 'R', VL is not
	  referenced.

  LDVL	  (input) INTEGER
	  The leading dimension	of the array VL.  LDVL >= max(1,N).

  VR	  (input/output) COMPLEX array,	dimension (LDVR,MM)
	  On entry, if JOB = 'R' or 'B'	and HOWMNY = 'O', VR must contain an
	  N-by-N matrix	Q (usually the unitary matrix Q	of Schur vectors
	  returned by CHSEQR).	On exit, if JOB	= 'R' or 'B', VR contains: if
	  HOWMNY = 'A',	the matrix X of	right eigenvectors of T; if HOWMNY =
	  'O', the matrix Q*X; if HOWMNY = 'S',	the right eigenvectors of T
	  specified by SELECT, stored consecutively in the columns of VR, in
	  the same order as their eigenvalues.	If JOB = 'L', VR is not
	  referenced.

  LDVR	  (input) INTEGER
	  The leading dimension	of the array VR.  LDVR >= max(1,N).

  MM	  (input) INTEGER
	  The number of	columns	in the arrays VL and/or	VR. MM >= M.

  M	  (output) INTEGER
	  The number of	columns	in the arrays VL and/or	VR required to store
	  the eigenvectors. If HOWMNY =	'A' or 'O', M is set to	N.

  WORK	  (workspace) COMPLEX array, dimension (2*N)

  RWORK	  (workspace) REAL array, dimension (N)

  INFO	  (output) INTEGER
	  = 0:	successful exit
	  < 0:	if INFO	= -i, the i-th argument	had an illegal value

FURTHER	DETAILS
  The algorithm	used in	this program is	basically backward (forward) substi-
  tution, with scaling to make the the code robust against possible overflow.

  Each eigenvector is normalized so that the element of	largest	magnitude has
  magnitude 1; here the	magnitude of a complex number (x,y) is taken to	be
  |x| +	|y|.


Back to the listing of computational routines for eigenvalue problems