--- rpl/lapack/lapack/dlasd3.f 2010/08/07 13:18:07 1.5
+++ rpl/lapack/lapack/dlasd3.f 2017/06/17 10:53:56 1.18
@@ -1,11 +1,234 @@
+*> \brief \b DLASD3 finds all square roots of the roots of the secular equation, as defined by the values in D and Z, and then updates the singular vectors by matrix multiplication. Used by sbdsdc.
+*
+* =========== DOCUMENTATION ===========
+*
+* Online html documentation available at
+* http://www.netlib.org/lapack/explore-html/
+*
+*> \htmlonly
+*> Download DLASD3 + dependencies
+*>
+*> [TGZ]
+*>
+*> [ZIP]
+*>
+*> [TXT]
+*> \endhtmlonly
+*
+* Definition:
+* ===========
+*
+* SUBROUTINE DLASD3( NL, NR, SQRE, K, D, Q, LDQ, DSIGMA, U, LDU, U2,
+* LDU2, VT, LDVT, VT2, LDVT2, IDXC, CTOT, Z,
+* INFO )
+*
+* .. Scalar Arguments ..
+* INTEGER INFO, K, LDQ, LDU, LDU2, LDVT, LDVT2, NL, NR,
+* $ SQRE
+* ..
+* .. Array Arguments ..
+* INTEGER CTOT( * ), IDXC( * )
+* DOUBLE PRECISION D( * ), DSIGMA( * ), Q( LDQ, * ), U( LDU, * ),
+* $ U2( LDU2, * ), VT( LDVT, * ), VT2( LDVT2, * ),
+* $ Z( * )
+* ..
+*
+*
+*> \par Purpose:
+* =============
+*>
+*> \verbatim
+*>
+*> DLASD3 finds all the square roots of the roots of the secular
+*> equation, as defined by the values in D and Z. It makes the
+*> appropriate calls to DLASD4 and then updates the singular
+*> vectors by matrix multiplication.
+*>
+*> This code makes very mild assumptions about floating point
+*> arithmetic. It will work on machines with a guard digit in
+*> add/subtract, or on those binary machines without guard digits
+*> which subtract like the Cray XMP, Cray YMP, Cray C 90, or Cray 2.
+*> It could conceivably fail on hexadecimal or decimal machines
+*> without guard digits, but we know of none.
+*>
+*> DLASD3 is called from DLASD1.
+*> \endverbatim
+*
+* Arguments:
+* ==========
+*
+*> \param[in] NL
+*> \verbatim
+*> NL is INTEGER
+*> The row dimension of the upper block. NL >= 1.
+*> \endverbatim
+*>
+*> \param[in] NR
+*> \verbatim
+*> NR is INTEGER
+*> The row dimension of the lower block. NR >= 1.
+*> \endverbatim
+*>
+*> \param[in] SQRE
+*> \verbatim
+*> SQRE is INTEGER
+*> = 0: the lower block is an NR-by-NR square matrix.
+*> = 1: the lower block is an NR-by-(NR+1) rectangular matrix.
+*>
+*> The bidiagonal matrix has N = NL + NR + 1 rows and
+*> M = N + SQRE >= N columns.
+*> \endverbatim
+*>
+*> \param[in] K
+*> \verbatim
+*> K is INTEGER
+*> The size of the secular equation, 1 =< K = < N.
+*> \endverbatim
+*>
+*> \param[out] D
+*> \verbatim
+*> D is DOUBLE PRECISION array, dimension(K)
+*> On exit the square roots of the roots of the secular equation,
+*> in ascending order.
+*> \endverbatim
+*>
+*> \param[out] Q
+*> \verbatim
+*> Q is DOUBLE PRECISION array,
+*> dimension at least (LDQ,K).
+*> \endverbatim
+*>
+*> \param[in] LDQ
+*> \verbatim
+*> LDQ is INTEGER
+*> The leading dimension of the array Q. LDQ >= K.
+*> \endverbatim
+*>
+*> \param[in] DSIGMA
+*> \verbatim
+*> DSIGMA is DOUBLE PRECISION array, dimension(K)
+*> The first K elements of this array contain the old roots
+*> of the deflated updating problem. These are the poles
+*> of the secular equation.
+*> \endverbatim
+*>
+*> \param[out] U
+*> \verbatim
+*> U is DOUBLE PRECISION array, dimension (LDU, N)
+*> The last N - K columns of this matrix contain the deflated
+*> left singular vectors.
+*> \endverbatim
+*>
+*> \param[in] LDU
+*> \verbatim
+*> LDU is INTEGER
+*> The leading dimension of the array U. LDU >= N.
+*> \endverbatim
+*>
+*> \param[in,out] U2
+*> \verbatim
+*> U2 is DOUBLE PRECISION array, dimension (LDU2, N)
+*> The first K columns of this matrix contain the non-deflated
+*> left singular vectors for the split problem.
+*> \endverbatim
+*>
+*> \param[in] LDU2
+*> \verbatim
+*> LDU2 is INTEGER
+*> The leading dimension of the array U2. LDU2 >= N.
+*> \endverbatim
+*>
+*> \param[out] VT
+*> \verbatim
+*> VT is DOUBLE PRECISION array, dimension (LDVT, M)
+*> The last M - K columns of VT**T contain the deflated
+*> right singular vectors.
+*> \endverbatim
+*>
+*> \param[in] LDVT
+*> \verbatim
+*> LDVT is INTEGER
+*> The leading dimension of the array VT. LDVT >= N.
+*> \endverbatim
+*>
+*> \param[in,out] VT2
+*> \verbatim
+*> VT2 is DOUBLE PRECISION array, dimension (LDVT2, N)
+*> The first K columns of VT2**T contain the non-deflated
+*> right singular vectors for the split problem.
+*> \endverbatim
+*>
+*> \param[in] LDVT2
+*> \verbatim
+*> LDVT2 is INTEGER
+*> The leading dimension of the array VT2. LDVT2 >= N.
+*> \endverbatim
+*>
+*> \param[in] IDXC
+*> \verbatim
+*> IDXC is INTEGER array, dimension ( N )
+*> The permutation used to arrange the columns of U (and rows of
+*> VT) into three groups: the first group contains non-zero
+*> entries only at and above (or before) NL +1; the second
+*> contains non-zero entries only at and below (or after) NL+2;
+*> and the third is dense. The first column of U and the row of
+*> VT are treated separately, however.
+*>
+*> The rows of the singular vectors found by DLASD4
+*> must be likewise permuted before the matrix multiplies can
+*> take place.
+*> \endverbatim
+*>
+*> \param[in] CTOT
+*> \verbatim
+*> CTOT is INTEGER array, dimension ( 4 )
+*> A count of the total number of the various types of columns
+*> in U (or rows in VT), as described in IDXC. The fourth column
+*> type is any column which has been deflated.
+*> \endverbatim
+*>
+*> \param[in] Z
+*> \verbatim
+*> Z is DOUBLE PRECISION array, dimension (K)
+*> The first K elements of this array contain the components
+*> of the deflation-adjusted updating row vector.
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit.
+*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> > 0: if INFO = 1, a singular value did not converge
+*> \endverbatim
+*
+* Authors:
+* ========
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date December 2016
+*
+*> \ingroup OTHERauxiliary
+*
+*> \par Contributors:
+* ==================
+*>
+*> Ming Gu and Huan Ren, Computer Science Division, University of
+*> California at Berkeley, USA
+*>
+* =====================================================================
SUBROUTINE DLASD3( NL, NR, SQRE, K, D, Q, LDQ, DSIGMA, U, LDU, U2,
$ LDU2, VT, LDVT, VT2, LDVT2, IDXC, CTOT, Z,
$ INFO )
*
-* -- LAPACK auxiliary routine (version 3.2.2) --
+* -- LAPACK auxiliary routine (version 3.7.0) --
* -- LAPACK is a software package provided by Univ. of Tennessee, --
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* June 2010
+* December 2016
*
* .. Scalar Arguments ..
INTEGER INFO, K, LDQ, LDU, LDU2, LDVT, LDVT2, NL, NR,
@@ -18,118 +241,6 @@
$ Z( * )
* ..
*
-* Purpose
-* =======
-*
-* DLASD3 finds all the square roots of the roots of the secular
-* equation, as defined by the values in D and Z. It makes the
-* appropriate calls to DLASD4 and then updates the singular
-* vectors by matrix multiplication.
-*
-* This code makes very mild assumptions about floating point
-* arithmetic. It will work on machines with a guard digit in
-* add/subtract, or on those binary machines without guard digits
-* which subtract like the Cray XMP, Cray YMP, Cray C 90, or Cray 2.
-* It could conceivably fail on hexadecimal or decimal machines
-* without guard digits, but we know of none.
-*
-* DLASD3 is called from DLASD1.
-*
-* Arguments
-* =========
-*
-* NL (input) INTEGER
-* The row dimension of the upper block. NL >= 1.
-*
-* NR (input) INTEGER
-* The row dimension of the lower block. NR >= 1.
-*
-* SQRE (input) INTEGER
-* = 0: the lower block is an NR-by-NR square matrix.
-* = 1: the lower block is an NR-by-(NR+1) rectangular matrix.
-*
-* The bidiagonal matrix has N = NL + NR + 1 rows and
-* M = N + SQRE >= N columns.
-*
-* K (input) INTEGER
-* The size of the secular equation, 1 =< K = < N.
-*
-* D (output) DOUBLE PRECISION array, dimension(K)
-* On exit the square roots of the roots of the secular equation,
-* in ascending order.
-*
-* Q (workspace) DOUBLE PRECISION array,
-* dimension at least (LDQ,K).
-*
-* LDQ (input) INTEGER
-* The leading dimension of the array Q. LDQ >= K.
-*
-* DSIGMA (input) DOUBLE PRECISION array, dimension(K)
-* The first K elements of this array contain the old roots
-* of the deflated updating problem. These are the poles
-* of the secular equation.
-*
-* U (output) DOUBLE PRECISION array, dimension (LDU, N)
-* The last N - K columns of this matrix contain the deflated
-* left singular vectors.
-*
-* LDU (input) INTEGER
-* The leading dimension of the array U. LDU >= N.
-*
-* U2 (input/output) DOUBLE PRECISION array, dimension (LDU2, N)
-* The first K columns of this matrix contain the non-deflated
-* left singular vectors for the split problem.
-*
-* LDU2 (input) INTEGER
-* The leading dimension of the array U2. LDU2 >= N.
-*
-* VT (output) DOUBLE PRECISION array, dimension (LDVT, M)
-* The last M - K columns of VT' contain the deflated
-* right singular vectors.
-*
-* LDVT (input) INTEGER
-* The leading dimension of the array VT. LDVT >= N.
-*
-* VT2 (input/output) DOUBLE PRECISION array, dimension (LDVT2, N)
-* The first K columns of VT2' contain the non-deflated
-* right singular vectors for the split problem.
-*
-* LDVT2 (input) INTEGER
-* The leading dimension of the array VT2. LDVT2 >= N.
-*
-* IDXC (input) INTEGER array, dimension ( N )
-* The permutation used to arrange the columns of U (and rows of
-* VT) into three groups: the first group contains non-zero
-* entries only at and above (or before) NL +1; the second
-* contains non-zero entries only at and below (or after) NL+2;
-* and the third is dense. The first column of U and the row of
-* VT are treated separately, however.
-*
-* The rows of the singular vectors found by DLASD4
-* must be likewise permuted before the matrix multiplies can
-* take place.
-*
-* CTOT (input) INTEGER array, dimension ( 4 )
-* A count of the total number of the various types of columns
-* in U (or rows in VT), as described in IDXC. The fourth column
-* type is any column which has been deflated.
-*
-* Z (input) DOUBLE PRECISION array, dimension (K)
-* The first K elements of this array contain the components
-* of the deflation-adjusted updating row vector.
-*
-* INFO (output) INTEGER
-* = 0: successful exit.
-* < 0: if INFO = -i, the i-th argument had an illegal value.
-* > 0: if INFO = 1, a singular value did not converge
-*
-* Further Details
-* ===============
-*
-* Based on contributions by
-* Ming Gu and Huan Ren, Computer Science Division, University of
-* California at Berkeley, USA
-*
* =====================================================================
*
* .. Parameters ..
@@ -240,7 +351,7 @@
CALL DLASD4( K, J, DSIGMA, Z, U( 1, J ), RHO, D( J ),
$ VT( 1, J ), INFO )
*
-* If the zero finder fails, the computation is terminated.
+* If the zero finder fails, report the convergence failure.
*
IF( INFO.NE.0 ) THEN
RETURN