--- 
:name: strevc
:md5sum: 0d2d5d1a609c10f4ee3c5f0b43c8a755
:category: :subroutine
:arguments: 
- side: 
    :type: char
    :intent: input
- howmny: 
    :type: char
    :intent: input
- select: 
    :type: logical
    :intent: input/output
    :dims: 
    - n
- n: 
    :type: integer
    :intent: input
- t: 
    :type: real
    :intent: input
    :dims: 
    - ldt
    - n
- ldt: 
    :type: integer
    :intent: input
- vl: 
    :type: real
    :intent: input/output
    :dims: 
    - ldvl
    - mm
- ldvl: 
    :type: integer
    :intent: input
- vr: 
    :type: real
    :intent: input/output
    :dims: 
    - ldvr
    - mm
- ldvr: 
    :type: integer
    :intent: input
- mm: 
    :type: integer
    :intent: input
- m: 
    :type: integer
    :intent: output
- work: 
    :type: real
    :intent: workspace
    :dims: 
    - 3*n
- info: 
    :type: integer
    :intent: output
:substitutions: {}

:fortran_help: "      SUBROUTINE STREVC( SIDE, HOWMNY, SELECT, N, T, LDT, VL, LDVL, VR, LDVR, MM, M, WORK, INFO )\n\n\
  *  Purpose\n\
  *  =======\n\
  *\n\
  *  STREVC computes some or all of the right and/or left eigenvectors of\n\
  *  a real upper quasi-triangular matrix T.\n\
  *  Matrices of this type are produced by the Schur factorization of\n\
  *  a real general matrix:  A = Q*T*Q**T, as computed by SHSEQR.\n\
  *  \n\
  *  The right eigenvector x and the left eigenvector y of T corresponding\n\
  *  to an eigenvalue w are defined by:\n\
  *  \n\
  *     T*x = w*x,     (y**H)*T = w*(y**H)\n\
  *  \n\
  *  where y**H denotes the conjugate transpose of y.\n\
  *  The eigenvalues are not input to this routine, but are read directly\n\
  *  from the diagonal blocks of T.\n\
  *  \n\
  *  This routine returns the matrices X and/or Y of right and left\n\
  *  eigenvectors of T, or the products Q*X and/or Q*Y, where Q is an\n\
  *  input matrix.  If Q is the orthogonal factor that reduces a matrix\n\
  *  A to Schur form T, then Q*X and Q*Y are the matrices of right and\n\
  *  left eigenvectors of A.\n\
  *\n\n\
  *  Arguments\n\
  *  =========\n\
  *\n\
  *  SIDE    (input) CHARACTER*1\n\
  *          = 'R':  compute right eigenvectors only;\n\
  *          = 'L':  compute left eigenvectors only;\n\
  *          = 'B':  compute both right and left eigenvectors.\n\
  *\n\
  *  HOWMNY  (input) CHARACTER*1\n\
  *          = 'A':  compute all right and/or left eigenvectors;\n\
  *          = 'B':  compute all right and/or left eigenvectors,\n\
  *                  backtransformed by the matrices in VR and/or VL;\n\
  *          = 'S':  compute selected right and/or left eigenvectors,\n\
  *                  as indicated by the logical array SELECT.\n\
  *\n\
  *  SELECT  (input/output) LOGICAL array, dimension (N)\n\
  *          If HOWMNY = 'S', SELECT specifies the eigenvectors to be\n\
  *          computed.\n\
  *          If w(j) is a real eigenvalue, the corresponding real\n\
  *          eigenvector is computed if SELECT(j) is .TRUE..\n\
  *          If w(j) and w(j+1) are the real and imaginary parts of a\n\
  *          complex eigenvalue, the corresponding complex eigenvector is\n\
  *          computed if either SELECT(j) or SELECT(j+1) is .TRUE., and\n\
  *          on exit SELECT(j) is set to .TRUE. and SELECT(j+1) is set to\n\
  *          .FALSE..\n\
  *          Not referenced if HOWMNY = 'A' or 'B'.\n\
  *\n\
  *  N       (input) INTEGER\n\
  *          The order of the matrix T. N >= 0.\n\
  *\n\
  *  T       (input) REAL array, dimension (LDT,N)\n\
  *          The upper quasi-triangular matrix T in Schur canonical form.\n\
  *\n\
  *  LDT     (input) INTEGER\n\
  *          The leading dimension of the array T. LDT >= max(1,N).\n\
  *\n\
  *  VL      (input/output) REAL array, dimension (LDVL,MM)\n\
  *          On entry, if SIDE = 'L' or 'B' and HOWMNY = 'B', VL must\n\
  *          contain an N-by-N matrix Q (usually the orthogonal matrix Q\n\
  *          of Schur vectors returned by SHSEQR).\n\
  *          On exit, if SIDE = 'L' or 'B', VL contains:\n\
  *          if HOWMNY = 'A', the matrix Y of left eigenvectors of T;\n\
  *          if HOWMNY = 'B', the matrix Q*Y;\n\
  *          if HOWMNY = 'S', the left eigenvectors of T specified by\n\
  *                           SELECT, stored consecutively in the columns\n\
  *                           of VL, in the same order as their\n\
  *                           eigenvalues.\n\
  *          A complex eigenvector corresponding to a complex eigenvalue\n\
  *          is stored in two consecutive columns, the first holding the\n\
  *          real part, and the second the imaginary part.\n\
  *          Not referenced if SIDE = 'R'.\n\
  *\n\
  *  LDVL    (input) INTEGER\n\
  *          The leading dimension of the array VL.  LDVL >= 1, and if\n\
  *          SIDE = 'L' or 'B', LDVL >= N.\n\
  *\n\
  *  VR      (input/output) REAL array, dimension (LDVR,MM)\n\
  *          On entry, if SIDE = 'R' or 'B' and HOWMNY = 'B', VR must\n\
  *          contain an N-by-N matrix Q (usually the orthogonal matrix Q\n\
  *          of Schur vectors returned by SHSEQR).\n\
  *          On exit, if SIDE = 'R' or 'B', VR contains:\n\
  *          if HOWMNY = 'A', the matrix X of right eigenvectors of T;\n\
  *          if HOWMNY = 'B', the matrix Q*X;\n\
  *          if HOWMNY = 'S', the right eigenvectors of T specified by\n\
  *                           SELECT, stored consecutively in the columns\n\
  *                           of VR, in the same order as their\n\
  *                           eigenvalues.\n\
  *          A complex eigenvector corresponding to a complex eigenvalue\n\
  *          is stored in two consecutive columns, the first holding the\n\
  *          real part and the second the imaginary part.\n\
  *          Not referenced if SIDE = 'L'.\n\
  *\n\
  *  LDVR    (input) INTEGER\n\
  *          The leading dimension of the array VR.  LDVR >= 1, and if\n\
  *          SIDE = 'R' or 'B', LDVR >= N.\n\
  *\n\
  *  MM      (input) INTEGER\n\
  *          The number of columns in the arrays VL and/or VR. MM >= M.\n\
  *\n\
  *  M       (output) INTEGER\n\
  *          The number of columns in the arrays VL and/or VR actually\n\
  *          used to store the eigenvectors.\n\
  *          If HOWMNY = 'A' or 'B', M is set to N.\n\
  *          Each selected real eigenvector occupies one column and each\n\
  *          selected complex eigenvector occupies two columns.\n\
  *\n\
  *  WORK    (workspace) REAL array, dimension (3*N)\n\
  *\n\
  *  INFO    (output) INTEGER\n\
  *          = 0:  successful exit\n\
  *          < 0:  if INFO = -i, the i-th argument had an illegal value\n\
  *\n\n\
  *  Further Details\n\
  *  ===============\n\
  *\n\
  *  The algorithm used in this program is basically backward (forward)\n\
  *  substitution, with scaling to make the the code robust against\n\
  *  possible overflow.\n\
  *\n\
  *  Each eigenvector is normalized so that the element of largest\n\
  *  magnitude has magnitude 1; here the magnitude of a complex number\n\
  *  (x,y) is taken to be |x| + |y|.\n\
  *\n\
  *  =====================================================================\n\
  *\n"
