--- rpl/lapack/lapack/dlaed8.f 2010/12/21 13:53:29 1.8
+++ rpl/lapack/lapack/dlaed8.f 2011/11/21 22:19:31 1.10
@@ -1,11 +1,252 @@
+*> \brief \b DLAED8
+*
+* =========== DOCUMENTATION ===========
+*
+* Online html documentation available at
+* http://www.netlib.org/lapack/explore-html/
+*
+*> \htmlonly
+*> Download DLAED8 + dependencies
+*>
+*> [TGZ]
+*>
+*> [ZIP]
+*>
+*> [TXT]
+*> \endhtmlonly
+*
+* Definition:
+* ===========
+*
+* SUBROUTINE DLAED8( ICOMPQ, K, N, QSIZ, D, Q, LDQ, INDXQ, RHO,
+* CUTPNT, Z, DLAMDA, Q2, LDQ2, W, PERM, GIVPTR,
+* GIVCOL, GIVNUM, INDXP, INDX, INFO )
+*
+* .. Scalar Arguments ..
+* INTEGER CUTPNT, GIVPTR, ICOMPQ, INFO, K, LDQ, LDQ2, N,
+* $ QSIZ
+* DOUBLE PRECISION RHO
+* ..
+* .. Array Arguments ..
+* INTEGER GIVCOL( 2, * ), INDX( * ), INDXP( * ),
+* $ INDXQ( * ), PERM( * )
+* DOUBLE PRECISION D( * ), DLAMDA( * ), GIVNUM( 2, * ),
+* $ Q( LDQ, * ), Q2( LDQ2, * ), W( * ), Z( * )
+* ..
+*
+*
+*> \par Purpose:
+* =============
+*>
+*> \verbatim
+*>
+*> DLAED8 merges the two sets of eigenvalues together into a single
+*> sorted set. Then it tries to deflate the size of the problem.
+*> There are two ways in which deflation can occur: when two or more
+*> eigenvalues are close together or if there is a tiny element in the
+*> Z vector. For each such occurrence the order of the related secular
+*> equation problem is reduced by one.
+*> \endverbatim
+*
+* Arguments:
+* ==========
+*
+*> \param[in] ICOMPQ
+*> \verbatim
+*> ICOMPQ is INTEGER
+*> = 0: Compute eigenvalues only.
+*> = 1: Compute eigenvectors of original dense symmetric matrix
+*> also. On entry, Q contains the orthogonal matrix used
+*> to reduce the original matrix to tridiagonal form.
+*> \endverbatim
+*>
+*> \param[out] K
+*> \verbatim
+*> K is INTEGER
+*> The number of non-deflated eigenvalues, and the order of the
+*> related secular equation.
+*> \endverbatim
+*>
+*> \param[in] N
+*> \verbatim
+*> N is INTEGER
+*> The dimension of the symmetric tridiagonal matrix. N >= 0.
+*> \endverbatim
+*>
+*> \param[in] QSIZ
+*> \verbatim
+*> QSIZ is INTEGER
+*> The dimension of the orthogonal matrix used to reduce
+*> the full matrix to tridiagonal form. QSIZ >= N if ICOMPQ = 1.
+*> \endverbatim
+*>
+*> \param[in,out] D
+*> \verbatim
+*> D is DOUBLE PRECISION array, dimension (N)
+*> On entry, the eigenvalues of the two submatrices to be
+*> combined. On exit, the trailing (N-K) updated eigenvalues
+*> (those which were deflated) sorted into increasing order.
+*> \endverbatim
+*>
+*> \param[in,out] Q
+*> \verbatim
+*> Q is DOUBLE PRECISION array, dimension (LDQ,N)
+*> If ICOMPQ = 0, Q is not referenced. Otherwise,
+*> on entry, Q contains the eigenvectors of the partially solved
+*> system which has been previously updated in matrix
+*> multiplies with other partially solved eigensystems.
+*> On exit, Q contains the trailing (N-K) updated eigenvectors
+*> (those which were deflated) in its last N-K columns.
+*> \endverbatim
+*>
+*> \param[in] LDQ
+*> \verbatim
+*> LDQ is INTEGER
+*> The leading dimension of the array Q. LDQ >= max(1,N).
+*> \endverbatim
+*>
+*> \param[in] INDXQ
+*> \verbatim
+*> INDXQ is INTEGER array, dimension (N)
+*> The permutation which separately sorts the two sub-problems
+*> in D into ascending order. Note that elements in the second
+*> half of this permutation must first have CUTPNT added to
+*> their values in order to be accurate.
+*> \endverbatim
+*>
+*> \param[in,out] RHO
+*> \verbatim
+*> RHO is DOUBLE PRECISION
+*> On entry, the off-diagonal element associated with the rank-1
+*> cut which originally split the two submatrices which are now
+*> being recombined.
+*> On exit, RHO has been modified to the value required by
+*> DLAED3.
+*> \endverbatim
+*>
+*> \param[in] CUTPNT
+*> \verbatim
+*> CUTPNT is INTEGER
+*> The location of the last eigenvalue in the leading
+*> sub-matrix. min(1,N) <= CUTPNT <= N.
+*> \endverbatim
+*>
+*> \param[in] Z
+*> \verbatim
+*> Z is DOUBLE PRECISION array, dimension (N)
+*> On entry, Z contains the updating vector (the last row of
+*> the first sub-eigenvector matrix and the first row of the
+*> second sub-eigenvector matrix).
+*> On exit, the contents of Z are destroyed by the updating
+*> process.
+*> \endverbatim
+*>
+*> \param[out] DLAMDA
+*> \verbatim
+*> DLAMDA is DOUBLE PRECISION array, dimension (N)
+*> A copy of the first K eigenvalues which will be used by
+*> DLAED3 to form the secular equation.
+*> \endverbatim
+*>
+*> \param[out] Q2
+*> \verbatim
+*> Q2 is DOUBLE PRECISION array, dimension (LDQ2,N)
+*> If ICOMPQ = 0, Q2 is not referenced. Otherwise,
+*> a copy of the first K eigenvectors which will be used by
+*> DLAED7 in a matrix multiply (DGEMM) to update the new
+*> eigenvectors.
+*> \endverbatim
+*>
+*> \param[in] LDQ2
+*> \verbatim
+*> LDQ2 is INTEGER
+*> The leading dimension of the array Q2. LDQ2 >= max(1,N).
+*> \endverbatim
+*>
+*> \param[out] W
+*> \verbatim
+*> W is DOUBLE PRECISION array, dimension (N)
+*> The first k values of the final deflation-altered z-vector and
+*> will be passed to DLAED3.
+*> \endverbatim
+*>
+*> \param[out] PERM
+*> \verbatim
+*> PERM is INTEGER array, dimension (N)
+*> The permutations (from deflation and sorting) to be applied
+*> to each eigenblock.
+*> \endverbatim
+*>
+*> \param[out] GIVPTR
+*> \verbatim
+*> GIVPTR is INTEGER
+*> The number of Givens rotations which took place in this
+*> subproblem.
+*> \endverbatim
+*>
+*> \param[out] GIVCOL
+*> \verbatim
+*> GIVCOL is INTEGER array, dimension (2, N)
+*> Each pair of numbers indicates a pair of columns to take place
+*> in a Givens rotation.
+*> \endverbatim
+*>
+*> \param[out] GIVNUM
+*> \verbatim
+*> GIVNUM is DOUBLE PRECISION array, dimension (2, N)
+*> Each number indicates the S value to be used in the
+*> corresponding Givens rotation.
+*> \endverbatim
+*>
+*> \param[out] INDXP
+*> \verbatim
+*> INDXP is INTEGER array, dimension (N)
+*> The permutation used to place deflated values of D at the end
+*> of the array. INDXP(1:K) points to the nondeflated D-values
+*> and INDXP(K+1:N) points to the deflated eigenvalues.
+*> \endverbatim
+*>
+*> \param[out] INDX
+*> \verbatim
+*> INDX is INTEGER array, dimension (N)
+*> The permutation used to sort the contents of D into ascending
+*> order.
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit.
+*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
+*
+* Authors:
+* ========
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date November 2011
+*
+*> \ingroup auxOTHERcomputational
+*
+*> \par Contributors:
+* ==================
+*>
+*> Jeff Rutter, Computer Science Division, University of California
+*> at Berkeley, USA
+*
+* =====================================================================
SUBROUTINE DLAED8( ICOMPQ, K, N, QSIZ, D, Q, LDQ, INDXQ, RHO,
$ CUTPNT, Z, DLAMDA, Q2, LDQ2, W, PERM, GIVPTR,
$ GIVCOL, GIVNUM, INDXP, INDX, INFO )
*
-* -- LAPACK routine (version 3.2.2) --
+* -- LAPACK computational routine (version 3.4.0) --
* -- LAPACK is a software package provided by Univ. of Tennessee, --
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* June 2010
+* November 2011
*
* .. Scalar Arguments ..
INTEGER CUTPNT, GIVPTR, ICOMPQ, INFO, K, LDQ, LDQ2, N,
@@ -19,129 +260,6 @@
$ Q( LDQ, * ), Q2( LDQ2, * ), W( * ), Z( * )
* ..
*
-* Purpose
-* =======
-*
-* DLAED8 merges the two sets of eigenvalues together into a single
-* sorted set. Then it tries to deflate the size of the problem.
-* There are two ways in which deflation can occur: when two or more
-* eigenvalues are close together or if there is a tiny element in the
-* Z vector. For each such occurrence the order of the related secular
-* equation problem is reduced by one.
-*
-* Arguments
-* =========
-*
-* ICOMPQ (input) INTEGER
-* = 0: Compute eigenvalues only.
-* = 1: Compute eigenvectors of original dense symmetric matrix
-* also. On entry, Q contains the orthogonal matrix used
-* to reduce the original matrix to tridiagonal form.
-*
-* K (output) INTEGER
-* The number of non-deflated eigenvalues, and the order of the
-* related secular equation.
-*
-* N (input) INTEGER
-* The dimension of the symmetric tridiagonal matrix. N >= 0.
-*
-* QSIZ (input) INTEGER
-* The dimension of the orthogonal matrix used to reduce
-* the full matrix to tridiagonal form. QSIZ >= N if ICOMPQ = 1.
-*
-* D (input/output) DOUBLE PRECISION array, dimension (N)
-* On entry, the eigenvalues of the two submatrices to be
-* combined. On exit, the trailing (N-K) updated eigenvalues
-* (those which were deflated) sorted into increasing order.
-*
-* Q (input/output) DOUBLE PRECISION array, dimension (LDQ,N)
-* If ICOMPQ = 0, Q is not referenced. Otherwise,
-* on entry, Q contains the eigenvectors of the partially solved
-* system which has been previously updated in matrix
-* multiplies with other partially solved eigensystems.
-* On exit, Q contains the trailing (N-K) updated eigenvectors
-* (those which were deflated) in its last N-K columns.
-*
-* LDQ (input) INTEGER
-* The leading dimension of the array Q. LDQ >= max(1,N).
-*
-* INDXQ (input) INTEGER array, dimension (N)
-* The permutation which separately sorts the two sub-problems
-* in D into ascending order. Note that elements in the second
-* half of this permutation must first have CUTPNT added to
-* their values in order to be accurate.
-*
-* RHO (input/output) DOUBLE PRECISION
-* On entry, the off-diagonal element associated with the rank-1
-* cut which originally split the two submatrices which are now
-* being recombined.
-* On exit, RHO has been modified to the value required by
-* DLAED3.
-*
-* CUTPNT (input) INTEGER
-* The location of the last eigenvalue in the leading
-* sub-matrix. min(1,N) <= CUTPNT <= N.
-*
-* Z (input) DOUBLE PRECISION array, dimension (N)
-* On entry, Z contains the updating vector (the last row of
-* the first sub-eigenvector matrix and the first row of the
-* second sub-eigenvector matrix).
-* On exit, the contents of Z are destroyed by the updating
-* process.
-*
-* DLAMDA (output) DOUBLE PRECISION array, dimension (N)
-* A copy of the first K eigenvalues which will be used by
-* DLAED3 to form the secular equation.
-*
-* Q2 (output) DOUBLE PRECISION array, dimension (LDQ2,N)
-* If ICOMPQ = 0, Q2 is not referenced. Otherwise,
-* a copy of the first K eigenvectors which will be used by
-* DLAED7 in a matrix multiply (DGEMM) to update the new
-* eigenvectors.
-*
-* LDQ2 (input) INTEGER
-* The leading dimension of the array Q2. LDQ2 >= max(1,N).
-*
-* W (output) DOUBLE PRECISION array, dimension (N)
-* The first k values of the final deflation-altered z-vector and
-* will be passed to DLAED3.
-*
-* PERM (output) INTEGER array, dimension (N)
-* The permutations (from deflation and sorting) to be applied
-* to each eigenblock.
-*
-* GIVPTR (output) INTEGER
-* The number of Givens rotations which took place in this
-* subproblem.
-*
-* GIVCOL (output) INTEGER array, dimension (2, N)
-* Each pair of numbers indicates a pair of columns to take place
-* in a Givens rotation.
-*
-* GIVNUM (output) DOUBLE PRECISION array, dimension (2, N)
-* Each number indicates the S value to be used in the
-* corresponding Givens rotation.
-*
-* INDXP (workspace) INTEGER array, dimension (N)
-* The permutation used to place deflated values of D at the end
-* of the array. INDXP(1:K) points to the nondeflated D-values
-* and INDXP(K+1:N) points to the deflated eigenvalues.
-*
-* INDX (workspace) INTEGER array, dimension (N)
-* The permutation used to sort the contents of D into ascending
-* order.
-*
-* INFO (output) INTEGER
-* = 0: successful exit.
-* < 0: if INFO = -i, the i-th argument had an illegal value.
-*
-* Further Details
-* ===============
-*
-* Based on contributions by
-* Jeff Rutter, Computer Science Division, University of California
-* at Berkeley, USA
-*
* =====================================================================
*
* .. Parameters ..