--- 
:name: dlaed0
:md5sum: 337ae89b96bbbde72236a7ce62eb8536
:category: :subroutine
:arguments: 
- icompq: 
    :type: integer
    :intent: input
- qsiz: 
    :type: integer
    :intent: input
- n: 
    :type: integer
    :intent: input
- d: 
    :type: doublereal
    :intent: input/output
    :dims: 
    - n
- e: 
    :type: doublereal
    :intent: input
    :dims: 
    - n-1
- q: 
    :type: doublereal
    :intent: input/output
    :dims: 
    - ldq
    - n
- ldq: 
    :type: integer
    :intent: input
- qstore: 
    :type: doublereal
    :intent: workspace
    :dims: 
    - ldqs
    - n
- ldqs: 
    :type: integer
    :intent: input
- work: 
    :type: doublereal
    :intent: workspace
    :dims: 
    - "((icompq == 0) || (icompq == 1)) ? 1 + 3*n + 2*n*LG(n) + 2*pow(n,2) : icompq == 2 ? 4*n + pow(n,2) : 0"
- iwork: 
    :type: integer
    :intent: workspace
    :dims: 
    - "((icompq == 0) || (icompq == 1)) ? 6 + 6*n + 5*n*LG(n) : icompq == 2 ? 3 + 5*n : 0"
- info: 
    :type: integer
    :intent: output
:substitutions: 
  ldqs: "icompq == 1 ? MAX(1,n) : 1"
:fortran_help: "      SUBROUTINE DLAED0( ICOMPQ, QSIZ, N, D, E, Q, LDQ, QSTORE, LDQS, WORK, IWORK, INFO )\n\n\
  *  Purpose\n\
  *  =======\n\
  *\n\
  *  DLAED0 computes all eigenvalues and corresponding eigenvectors of a\n\
  *  symmetric tridiagonal matrix using the divide and conquer method.\n\
  *\n\n\
  *  Arguments\n\
  *  =========\n\
  *\n\
  *  ICOMPQ  (input) INTEGER\n\
  *          = 0:  Compute eigenvalues only.\n\
  *          = 1:  Compute eigenvectors of original dense symmetric matrix\n\
  *                also.  On entry, Q contains the orthogonal matrix used\n\
  *                to reduce the original matrix to tridiagonal form.\n\
  *          = 2:  Compute eigenvalues and eigenvectors of tridiagonal\n\
  *                matrix.\n\
  *\n\
  *  QSIZ   (input) INTEGER\n\
  *         The dimension of the orthogonal matrix used to reduce\n\
  *         the full matrix to tridiagonal form.  QSIZ >= N if ICOMPQ = 1.\n\
  *\n\
  *  N      (input) INTEGER\n\
  *         The dimension of the symmetric tridiagonal matrix.  N >= 0.\n\
  *\n\
  *  D      (input/output) DOUBLE PRECISION array, dimension (N)\n\
  *         On entry, the main diagonal of the tridiagonal matrix.\n\
  *         On exit, its eigenvalues.\n\
  *\n\
  *  E      (input) DOUBLE PRECISION array, dimension (N-1)\n\
  *         The off-diagonal elements of the tridiagonal matrix.\n\
  *         On exit, E has been destroyed.\n\
  *\n\
  *  Q      (input/output) DOUBLE PRECISION array, dimension (LDQ, N)\n\
  *         On entry, Q must contain an N-by-N orthogonal matrix.\n\
  *         If ICOMPQ = 0    Q is not referenced.\n\
  *         If ICOMPQ = 1    On entry, Q is a subset of the columns of the\n\
  *                          orthogonal matrix used to reduce the full\n\
  *                          matrix to tridiagonal form corresponding to\n\
  *                          the subset of the full matrix which is being\n\
  *                          decomposed at this time.\n\
  *         If ICOMPQ = 2    On entry, Q will be the identity matrix.\n\
  *                          On exit, Q contains the eigenvectors of the\n\
  *                          tridiagonal matrix.\n\
  *\n\
  *  LDQ    (input) INTEGER\n\
  *         The leading dimension of the array Q.  If eigenvectors are\n\
  *         desired, then  LDQ >= max(1,N).  In any case,  LDQ >= 1.\n\
  *\n\
  *  QSTORE (workspace) DOUBLE PRECISION array, dimension (LDQS, N)\n\
  *         Referenced only when ICOMPQ = 1.  Used to store parts of\n\
  *         the eigenvector matrix when the updating matrix multiplies\n\
  *         take place.\n\
  *\n\
  *  LDQS   (input) INTEGER\n\
  *         The leading dimension of the array QSTORE.  If ICOMPQ = 1,\n\
  *         then  LDQS >= max(1,N).  In any case,  LDQS >= 1.\n\
  *\n\
  *  WORK   (workspace) DOUBLE PRECISION array,\n\
  *         If ICOMPQ = 0 or 1, the dimension of WORK must be at least\n\
  *                     1 + 3*N + 2*N*lg N + 2*N**2\n\
  *                     ( lg( N ) = smallest integer k\n\
  *                                 such that 2^k >= N )\n\
  *         If ICOMPQ = 2, the dimension of WORK must be at least\n\
  *                     4*N + N**2.\n\
  *\n\
  *  IWORK  (workspace) INTEGER array,\n\
  *         If ICOMPQ = 0 or 1, the dimension of IWORK must be at least\n\
  *                        6 + 6*N + 5*N*lg N.\n\
  *                        ( lg( N ) = smallest integer k\n\
  *                                    such that 2^k >= N )\n\
  *         If ICOMPQ = 2, the dimension of IWORK must be at least\n\
  *                        3 + 5*N.\n\
  *\n\
  *  INFO   (output) INTEGER\n\
  *          = 0:  successful exit.\n\
  *          < 0:  if INFO = -i, the i-th argument had an illegal value.\n\
  *          > 0:  The algorithm failed to compute an eigenvalue while\n\
  *                working on the submatrix lying in rows and columns\n\
  *                INFO/(N+1) through mod(INFO,N+1).\n\
  *\n\n\
  *  Further Details\n\
  *  ===============\n\
  *\n\
  *  Based on contributions by\n\
  *     Jeff Rutter, Computer Science Division, University of California\n\
  *     at Berkeley, USA\n\
  *\n\
  *  =====================================================================\n\
  *\n"
