DTREVC(l)		LAPACK routine (version	1.1)		    DTREVC(l)

NAME
  DTREVC - compute all or some right and/or left eigenvectors of a real	upper
  quasi-triangular matrix T

SYNOPSIS

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

      CHARACTER	     HOWMNY, JOB

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

      LOGICAL	     SELECT( * )

      DOUBLE	     PRECISION T( LDT, * ), VL(	LDVL, *	), VR( LDVR, * ),
		     WORK( * )

PURPOSE
  DTREVC computes all or some right and/or left	eigenvectors of	a real upper
  quasi-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
  orthogonal matrix. If	T was obtained from the	real Schur factorization of
  an original matrix A = Q*T*Q**T, then	Q*X and/or Q*Y are the matrices	of
  right	or left	eigenvectors of	A.

  T must be in Schur canonical form (as	returned by DHSEQR), that is, block
  upper	triangular with	1-by-1 and 2-by-2 diagonal blocks; each	2-by-2 diago-
  nal block has	its diagonal elements equal and	its off-diagonal elements of
  opposite sign.

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 orthogonal) matrix; =	'S':  compute
	  some right and/or left eigenvectors, specified by the	logical	array
	  SELECT.

  SELECT  (input/output) LOGICAL array,	dimension (N)
	  If HOWMNY = 'S', SELECT specifies the	eigenvectors to	be computed.
	  To select the	real eigenvector corresponding to a real eigenvalue
	  w(j),	SELECT(j) must be set to .TRUE.. To select the complex eigen-
	  vector corresponding to a complex conjugate pair w(j)	and w(j+1),
	  either SELECT(j) or SELECT(j+1) must be set to .TRUE.; then on exit
	  SELECT(j) is If HOWMNY = 'A' or 'O', SELECT is not referenced.

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

  T	  (input) DOUBLE PRECISION array, dimension (LDT,N)
	  The upper quasi-triangular matrix T in Schur canonical form.

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

  VL	  (input/output) DOUBLE	PRECISION 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 orthogonal matrix Q of Schur vectors
	  returned by DHSEQR).	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.	A complex eigenvector
	  corresponding	to a complex eigenvalue	is stored in two consecutive
	  columns, the first holding the real part, and	the second the ima-
	  ginary part.	If JOB = 'R', VL is not	referenced.

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

  VR	  (input/output) DOUBLE	PRECISION 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 orthogonal matrix Q of Schur vectors
	  returned by DHSEQR).	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.	A complex eigenvector
	  corresponding	to a complex eigenvalue	is stored in two consecutive
	  columns, the first holding the real part and the second the ima-
	  ginary part.	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; each selected real eigenvector occupies one
	  column and each selected complex eigenvector occupies	two columns.
	  If HOWMNY = 'A' or 'O', M is set to N.

  WORK	  (workspace) DOUBLE PRECISION array, dimension	(3*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