--- 
:name: zlaed8
:md5sum: da94804bd8bee4c6a24adacd2c1c9816
:category: :subroutine
:arguments: 
- k: 
    :type: integer
    :intent: output
- n: 
    :type: integer
    :intent: input
- qsiz: 
    :type: integer
    :intent: input
- q: 
    :type: doublecomplex
    :intent: input/output
    :dims: 
    - ldq
    - n
- ldq: 
    :type: integer
    :intent: input
- d: 
    :type: doublereal
    :intent: input/output
    :dims: 
    - n
- rho: 
    :type: doublereal
    :intent: input/output
- cutpnt: 
    :type: integer
    :intent: input
- z: 
    :type: doublereal
    :intent: input
    :dims: 
    - n
- dlamda: 
    :type: doublereal
    :intent: output
    :dims: 
    - n
- q2: 
    :type: doublecomplex
    :intent: output
    :dims: 
    - ldq2
    - n
- ldq2: 
    :type: integer
    :intent: input
- w: 
    :type: doublereal
    :intent: output
    :dims: 
    - n
- indxp: 
    :type: integer
    :intent: workspace
    :dims: 
    - n
- indx: 
    :type: integer
    :intent: workspace
    :dims: 
    - n
- indxq: 
    :type: integer
    :intent: input
    :dims: 
    - n
- perm: 
    :type: integer
    :intent: output
    :dims: 
    - n
- givptr: 
    :type: integer
    :intent: output
- givcol: 
    :type: integer
    :intent: output
    :dims: 
    - "2"
    - n
- givnum: 
    :type: doublereal
    :intent: output
    :dims: 
    - "2"
    - n
- info: 
    :type: integer
    :intent: output
:substitutions: 
  ldq2: MAX( 1, n )
:fortran_help: "      SUBROUTINE ZLAED8( K, N, QSIZ, Q, LDQ, D, RHO, CUTPNT, Z, DLAMDA, Q2, LDQ2, W, INDXP, INDX, INDXQ, PERM, GIVPTR, GIVCOL, GIVNUM, INFO )\n\n\
  *  Purpose\n\
  *  =======\n\
  *\n\
  *  ZLAED8 merges the two sets of eigenvalues together into a single\n\
  *  sorted set.  Then it tries to deflate the size of the problem.\n\
  *  There are two ways in which deflation can occur:  when two or more\n\
  *  eigenvalues are close together or if there is a tiny element in the\n\
  *  Z vector.  For each such occurrence the order of the related secular\n\
  *  equation problem is reduced by one.\n\
  *\n\n\
  *  Arguments\n\
  *  =========\n\
  *\n\
  *  K      (output) INTEGER\n\
  *         Contains the number of non-deflated eigenvalues.\n\
  *         This is the order of the related secular equation.\n\
  *\n\
  *  N      (input) INTEGER\n\
  *         The dimension of the symmetric tridiagonal matrix.  N >= 0.\n\
  *\n\
  *  QSIZ   (input) INTEGER\n\
  *         The dimension of the unitary matrix used to reduce\n\
  *         the dense or band matrix to tridiagonal form.\n\
  *         QSIZ >= N if ICOMPQ = 1.\n\
  *\n\
  *  Q      (input/output) COMPLEX*16 array, dimension (LDQ,N)\n\
  *         On entry, Q contains the eigenvectors of the partially solved\n\
  *         system which has been previously updated in matrix\n\
  *         multiplies with other partially solved eigensystems.\n\
  *         On exit, Q contains the trailing (N-K) updated eigenvectors\n\
  *         (those which were deflated) in its last N-K columns.\n\
  *\n\
  *  LDQ    (input) INTEGER\n\
  *         The leading dimension of the array Q.  LDQ >= max( 1, N ).\n\
  *\n\
  *  D      (input/output) DOUBLE PRECISION array, dimension (N)\n\
  *         On entry, D contains the eigenvalues of the two submatrices to\n\
  *         be combined.  On exit, D contains the trailing (N-K) updated\n\
  *         eigenvalues (those which were deflated) sorted into increasing\n\
  *         order.\n\
  *\n\
  *  RHO    (input/output) DOUBLE PRECISION\n\
  *         Contains the off diagonal element associated with the rank-1\n\
  *         cut which originally split the two submatrices which are now\n\
  *         being recombined. RHO is modified during the computation to\n\
  *         the value required by DLAED3.\n\
  *\n\
  *  CUTPNT (input) INTEGER\n\
  *         Contains the location of the last eigenvalue in the leading\n\
  *         sub-matrix.  MIN(1,N) <= CUTPNT <= N.\n\
  *\n\
  *  Z      (input) DOUBLE PRECISION array, dimension (N)\n\
  *         On input this vector contains the updating vector (the last\n\
  *         row of the first sub-eigenvector matrix and the first row of\n\
  *         the second sub-eigenvector matrix).  The contents of Z are\n\
  *         destroyed during the updating process.\n\
  *\n\
  *  DLAMDA (output) DOUBLE PRECISION array, dimension (N)\n\
  *         Contains a copy of the first K eigenvalues which will be used\n\
  *         by DLAED3 to form the secular equation.\n\
  *\n\
  *  Q2     (output) COMPLEX*16 array, dimension (LDQ2,N)\n\
  *         If ICOMPQ = 0, Q2 is not referenced.  Otherwise,\n\
  *         Contains a copy of the first K eigenvectors which will be used\n\
  *         by DLAED7 in a matrix multiply (DGEMM) to update the new\n\
  *         eigenvectors.\n\
  *\n\
  *  LDQ2   (input) INTEGER\n\
  *         The leading dimension of the array Q2.  LDQ2 >= max( 1, N ).\n\
  *\n\
  *  W      (output) DOUBLE PRECISION array, dimension (N)\n\
  *         This will hold the first k values of the final\n\
  *         deflation-altered z-vector and will be passed to DLAED3.\n\
  *\n\
  *  INDXP  (workspace) INTEGER array, dimension (N)\n\
  *         This will contain the permutation used to place deflated\n\
  *         values of D at the end of the array. On output INDXP(1:K)\n\
  *         points to the nondeflated D-values and INDXP(K+1:N)\n\
  *         points to the deflated eigenvalues.\n\
  *\n\
  *  INDX   (workspace) INTEGER array, dimension (N)\n\
  *         This will contain the permutation used to sort the contents of\n\
  *         D into ascending order.\n\
  *\n\
  *  INDXQ  (input) INTEGER array, dimension (N)\n\
  *         This contains the permutation which separately sorts the two\n\
  *         sub-problems in D into ascending order.  Note that elements in\n\
  *         the second half of this permutation must first have CUTPNT\n\
  *         added to their values in order to be accurate.\n\
  *\n\
  *  PERM   (output) INTEGER array, dimension (N)\n\
  *         Contains the permutations (from deflation and sorting) to be\n\
  *         applied to each eigenblock.\n\
  *\n\
  *  GIVPTR (output) INTEGER\n\
  *         Contains the number of Givens rotations which took place in\n\
  *         this subproblem.\n\
  *\n\
  *  GIVCOL (output) INTEGER array, dimension (2, N)\n\
  *         Each pair of numbers indicates a pair of columns to take place\n\
  *         in a Givens rotation.\n\
  *\n\
  *  GIVNUM (output) DOUBLE PRECISION array, dimension (2, N)\n\
  *         Each number indicates the S value to be used in the\n\
  *         corresponding Givens rotation.\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\
  *  =====================================================================\n\
  *\n"
