--- 
:name: slarrv
:md5sum: c11cfd693c654d5325e306c9460e5b65
:category: :subroutine
:arguments: 
- n: 
    :type: integer
    :intent: input
- vl: 
    :type: real
    :intent: input
- vu: 
    :type: real
    :intent: input
- d: 
    :type: real
    :intent: input/output
    :dims: 
    - n
- l: 
    :type: real
    :intent: input/output
    :dims: 
    - n
- pivmin: 
    :type: real
    :intent: input
- isplit: 
    :type: integer
    :intent: input
    :dims: 
    - n
- m: 
    :type: integer
    :intent: input
- dol: 
    :type: integer
    :intent: input
- dou: 
    :type: integer
    :intent: input
- minrgp: 
    :type: real
    :intent: input
- rtol1: 
    :type: real
    :intent: input
- rtol2: 
    :type: real
    :intent: input
- w: 
    :type: real
    :intent: input/output
    :dims: 
    - n
- werr: 
    :type: real
    :intent: input/output
    :dims: 
    - n
- wgap: 
    :type: real
    :intent: input/output
    :dims: 
    - n
- iblock: 
    :type: integer
    :intent: input
    :dims: 
    - n
- indexw: 
    :type: integer
    :intent: input
    :dims: 
    - n
- gers: 
    :type: real
    :intent: input
    :dims: 
    - 2*n
- z: 
    :type: real
    :intent: output
    :dims: 
    - ldz
    - MAX(1,m)
- ldz: 
    :type: integer
    :intent: input
- isuppz: 
    :type: integer
    :intent: output
    :dims: 
    - 2*MAX(1,m)
- work: 
    :type: real
    :intent: workspace
    :dims: 
    - 12*n
- iwork: 
    :type: integer
    :intent: workspace
    :dims: 
    - 7*n
- info: 
    :type: integer
    :intent: output
:substitutions: 
  ldz: n
:fortran_help: "      SUBROUTINE SLARRV( N, VL, VU, D, L, PIVMIN, ISPLIT, M, DOL, DOU, MINRGP, RTOL1, RTOL2, W, WERR, WGAP, IBLOCK, INDEXW, GERS, Z, LDZ, ISUPPZ, WORK, IWORK, INFO )\n\n\
  *  Purpose\n\
  *  =======\n\
  *\n\
  *  SLARRV computes the eigenvectors of the tridiagonal matrix\n\
  *  T = L D L^T given L, D and APPROXIMATIONS to the eigenvalues of L D L^T.\n\
  *  The input eigenvalues should have been computed by SLARRE.\n\
  *\n\n\
  *  Arguments\n\
  *  =========\n\
  *\n\
  *  N       (input) INTEGER\n\
  *          The order of the matrix.  N >= 0.\n\
  *\n\
  *  VL      (input) REAL            \n\
  *  VU      (input) REAL            \n\
  *          Lower and upper bounds of the interval that contains the desired\n\
  *          eigenvalues. VL < VU. Needed to compute gaps on the left or right\n\
  *          end of the extremal eigenvalues in the desired RANGE.\n\
  *\n\
  *  D       (input/output) REAL array, dimension (N)\n\
  *          On entry, the N diagonal elements of the diagonal matrix D.\n\
  *          On exit, D may be overwritten.\n\
  *\n\
  *  L       (input/output) REAL array, dimension (N)\n\
  *          On entry, the (N-1) subdiagonal elements of the unit\n\
  *          bidiagonal matrix L are in elements 1 to N-1 of L\n\
  *          (if the matrix is not split.) At the end of each block\n\
  *          is stored the corresponding shift as given by SLARRE.\n\
  *          On exit, L is overwritten.\n\
  *\n\
  *  PIVMIN  (input) REAL\n\
  *          The minimum pivot allowed in the Sturm sequence.\n\
  *\n\
  *  ISPLIT  (input) INTEGER array, dimension (N)\n\
  *          The splitting points, at which T breaks up into blocks.\n\
  *          The first block consists of rows/columns 1 to\n\
  *          ISPLIT( 1 ), the second of rows/columns ISPLIT( 1 )+1\n\
  *          through ISPLIT( 2 ), etc.\n\
  *\n\
  *  M       (input) INTEGER\n\
  *          The total number of input eigenvalues.  0 <= M <= N.\n\
  *\n\
  *  DOL     (input) INTEGER\n\
  *  DOU     (input) INTEGER\n\
  *          If the user wants to compute only selected eigenvectors from all\n\
  *          the eigenvalues supplied, he can specify an index range DOL:DOU.\n\
  *          Or else the setting DOL=1, DOU=M should be applied.\n\
  *          Note that DOL and DOU refer to the order in which the eigenvalues\n\
  *          are stored in W.\n\
  *          If the user wants to compute only selected eigenpairs, then\n\
  *          the columns DOL-1 to DOU+1 of the eigenvector space Z contain the\n\
  *          computed eigenvectors. All other columns of Z are set to zero.\n\
  *\n\
  *  MINRGP  (input) REAL            \n\
  *\n\
  *  RTOL1   (input) REAL            \n\
  *  RTOL2   (input) REAL            \n\
  *           Parameters for bisection.\n\
  *           An interval [LEFT,RIGHT] has converged if\n\
  *           RIGHT-LEFT.LT.MAX( RTOL1*GAP, RTOL2*MAX(|LEFT|,|RIGHT|) )\n\
  *\n\
  *  W       (input/output) REAL             array, dimension (N)\n\
  *          The first M elements of W contain the APPROXIMATE eigenvalues for\n\
  *          which eigenvectors are to be computed.  The eigenvalues\n\
  *          should be grouped by split-off block and ordered from\n\
  *          smallest to largest within the block ( The output array\n\
  *          W from SLARRE is expected here ). Furthermore, they are with\n\
  *          respect to the shift of the corresponding root representation\n\
  *          for their block. On exit, W holds the eigenvalues of the\n\
  *          UNshifted matrix.\n\
  *\n\
  *  WERR    (input/output) REAL array, dimension (N)\n\
  *          The first M elements contain the semiwidth of the uncertainty\n\
  *          interval of the corresponding eigenvalue in W\n\
  *\n\
  *  WGAP    (input/output) REAL array, dimension (N)\n\
  *          The separation from the right neighbor eigenvalue in W.\n\
  *\n\
  *  IBLOCK  (input) INTEGER array, dimension (N)\n\
  *          The indices of the blocks (submatrices) associated with the\n\
  *          corresponding eigenvalues in W; IBLOCK(i)=1 if eigenvalue\n\
  *          W(i) belongs to the first block from the top, =2 if W(i)\n\
  *          belongs to the second block, etc.\n\
  *\n\
  *  INDEXW  (input) INTEGER array, dimension (N)\n\
  *          The indices of the eigenvalues within each block (submatrix);\n\
  *          for example, INDEXW(i)= 10 and IBLOCK(i)=2 imply that the\n\
  *          i-th eigenvalue W(i) is the 10-th eigenvalue in the second block.\n\
  *\n\
  *  GERS    (input) REAL array, dimension (2*N)\n\
  *          The N Gerschgorin intervals (the i-th Gerschgorin interval\n\
  *          is (GERS(2*i-1), GERS(2*i)). The Gerschgorin intervals should\n\
  *          be computed from the original UNshifted matrix.\n\
  *\n\
  *  Z       (output) REAL array, dimension (LDZ, max(1,M) )\n\
  *          If INFO = 0, the first M columns of Z contain the\n\
  *          orthonormal eigenvectors of the matrix T\n\
  *          corresponding to the input eigenvalues, with the i-th\n\
  *          column of Z holding the eigenvector associated with W(i).\n\
  *          Note: the user must ensure that at least max(1,M) columns are\n\
  *          supplied in the array Z.\n\
  *\n\
  *  LDZ     (input) INTEGER\n\
  *          The leading dimension of the array Z.  LDZ >= 1, and if\n\
  *          JOBZ = 'V', LDZ >= max(1,N).\n\
  *\n\
  *  ISUPPZ  (output) INTEGER array, dimension ( 2*max(1,M) )\n\
  *          The support of the eigenvectors in Z, i.e., the indices\n\
  *          indicating the nonzero elements in Z. The I-th eigenvector\n\
  *          is nonzero only in elements ISUPPZ( 2*I-1 ) through\n\
  *          ISUPPZ( 2*I ).\n\
  *\n\
  *  WORK    (workspace) REAL array, dimension (12*N)\n\
  *\n\
  *  IWORK   (workspace) INTEGER array, dimension (7*N)\n\
  *\n\
  *  INFO    (output) INTEGER\n\
  *          = 0:  successful exit\n\
  *\n\
  *          > 0:  A problem occured in SLARRV.\n\
  *          < 0:  One of the called subroutines signaled an internal problem.\n\
  *                Needs inspection of the corresponding parameter IINFO\n\
  *                for further information.\n\
  *\n\
  *          =-1:  Problem in SLARRB when refining a child's eigenvalues.\n\
  *          =-2:  Problem in SLARRF when computing the RRR of a child.\n\
  *                When a child is inside a tight cluster, it can be difficult\n\
  *                to find an RRR. A partial remedy from the user's point of\n\
  *                view is to make the parameter MINRGP smaller and recompile.\n\
  *                However, as the orthogonality of the computed vectors is\n\
  *                proportional to 1/MINRGP, the user should be aware that\n\
  *                he might be trading in precision when he decreases MINRGP.\n\
  *          =-3:  Problem in SLARRB when refining a single eigenvalue\n\
  *                after the Rayleigh correction was rejected.\n\
  *          = 5:  The Rayleigh Quotient Iteration failed to converge to\n\
  *                full accuracy in MAXITR steps.\n\
  *\n\n\
  *  Further Details\n\
  *  ===============\n\
  *\n\
  *  Based on contributions by\n\
  *     Beresford Parlett, University of California, Berkeley, USA\n\
  *     Jim Demmel, University of California, Berkeley, USA\n\
  *     Inderjit Dhillon, University of Texas, Austin, USA\n\
  *     Osni Marques, LBNL/NERSC, USA\n\
  *     Christof Voemel, University of California, Berkeley, USA\n\
  *\n\
  *  =====================================================================\n\
  *\n"
