--- rpl/lapack/lapack/dlasq3.f 2010/01/26 15:22:46 1.1.1.1
+++ rpl/lapack/lapack/dlasq3.f 2012/12/14 12:30:26 1.13
@@ -1,16 +1,191 @@
+*> \brief \b DLASQ3 checks for deflation, computes a shift and calls dqds. Used by sbdsqr.
+*
+* =========== DOCUMENTATION ===========
+*
+* Online html documentation available at
+* http://www.netlib.org/lapack/explore-html/
+*
+*> \htmlonly
+*> Download DLASQ3 + dependencies
+*>
+*> [TGZ]
+*>
+*> [ZIP]
+*>
+*> [TXT]
+*> \endhtmlonly
+*
+* Definition:
+* ===========
+*
+* SUBROUTINE DLASQ3( I0, N0, Z, PP, DMIN, SIGMA, DESIG, QMAX, NFAIL,
+* ITER, NDIV, IEEE, TTYPE, DMIN1, DMIN2, DN, DN1,
+* DN2, G, TAU )
+*
+* .. Scalar Arguments ..
+* LOGICAL IEEE
+* INTEGER I0, ITER, N0, NDIV, NFAIL, PP
+* DOUBLE PRECISION DESIG, DMIN, DMIN1, DMIN2, DN, DN1, DN2, G,
+* $ QMAX, SIGMA, TAU
+* ..
+* .. Array Arguments ..
+* DOUBLE PRECISION Z( * )
+* ..
+*
+*
+*> \par Purpose:
+* =============
+*>
+*> \verbatim
+*>
+*> DLASQ3 checks for deflation, computes a shift (TAU) and calls dqds.
+*> In case of failure it changes shifts, and tries again until output
+*> is positive.
+*> \endverbatim
+*
+* Arguments:
+* ==========
+*
+*> \param[in] I0
+*> \verbatim
+*> I0 is INTEGER
+*> First index.
+*> \endverbatim
+*>
+*> \param[in,out] N0
+*> \verbatim
+*> N0 is INTEGER
+*> Last index.
+*> \endverbatim
+*>
+*> \param[in] Z
+*> \verbatim
+*> Z is DOUBLE PRECISION array, dimension ( 4*N )
+*> Z holds the qd array.
+*> \endverbatim
+*>
+*> \param[in,out] PP
+*> \verbatim
+*> PP is INTEGER
+*> PP=0 for ping, PP=1 for pong.
+*> PP=2 indicates that flipping was applied to the Z array
+*> and that the initial tests for deflation should not be
+*> performed.
+*> \endverbatim
+*>
+*> \param[out] DMIN
+*> \verbatim
+*> DMIN is DOUBLE PRECISION
+*> Minimum value of d.
+*> \endverbatim
+*>
+*> \param[out] SIGMA
+*> \verbatim
+*> SIGMA is DOUBLE PRECISION
+*> Sum of shifts used in current segment.
+*> \endverbatim
+*>
+*> \param[in,out] DESIG
+*> \verbatim
+*> DESIG is DOUBLE PRECISION
+*> Lower order part of SIGMA
+*> \endverbatim
+*>
+*> \param[in] QMAX
+*> \verbatim
+*> QMAX is DOUBLE PRECISION
+*> Maximum value of q.
+*> \endverbatim
+*>
+*> \param[out] NFAIL
+*> \verbatim
+*> NFAIL is INTEGER
+*> Number of times shift was too big.
+*> \endverbatim
+*>
+*> \param[out] ITER
+*> \verbatim
+*> ITER is INTEGER
+*> Number of iterations.
+*> \endverbatim
+*>
+*> \param[out] NDIV
+*> \verbatim
+*> NDIV is INTEGER
+*> Number of divisions.
+*> \endverbatim
+*>
+*> \param[in] IEEE
+*> \verbatim
+*> IEEE is LOGICAL
+*> Flag for IEEE or non IEEE arithmetic (passed to DLASQ5).
+*> \endverbatim
+*>
+*> \param[in,out] TTYPE
+*> \verbatim
+*> TTYPE is INTEGER
+*> Shift type.
+*> \endverbatim
+*>
+*> \param[in,out] DMIN1
+*> \verbatim
+*> DMIN1 is DOUBLE PRECISION
+*> \endverbatim
+*>
+*> \param[in,out] DMIN2
+*> \verbatim
+*> DMIN2 is DOUBLE PRECISION
+*> \endverbatim
+*>
+*> \param[in,out] DN
+*> \verbatim
+*> DN is DOUBLE PRECISION
+*> \endverbatim
+*>
+*> \param[in,out] DN1
+*> \verbatim
+*> DN1 is DOUBLE PRECISION
+*> \endverbatim
+*>
+*> \param[in,out] DN2
+*> \verbatim
+*> DN2 is DOUBLE PRECISION
+*> \endverbatim
+*>
+*> \param[in,out] G
+*> \verbatim
+*> G is DOUBLE PRECISION
+*> \endverbatim
+*>
+*> \param[in,out] TAU
+*> \verbatim
+*> TAU is DOUBLE PRECISION
+*>
+*> These are passed as arguments in order to save their values
+*> between calls to DLASQ3.
+*> \endverbatim
+*
+* Authors:
+* ========
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \date September 2012
+*
+*> \ingroup auxOTHERcomputational
+*
+* =====================================================================
SUBROUTINE DLASQ3( I0, N0, Z, PP, DMIN, SIGMA, DESIG, QMAX, NFAIL,
$ ITER, NDIV, IEEE, TTYPE, DMIN1, DMIN2, DN, DN1,
$ DN2, G, TAU )
*
-* -- LAPACK routine (version 3.2) --
-*
-* -- Contributed by Osni Marques of the Lawrence Berkeley National --
-* -- Laboratory and Beresford Parlett of the Univ. of California at --
-* -- Berkeley --
-* -- November 2008 --
-*
+* -- LAPACK computational routine (version 3.4.2) --
* -- LAPACK is a software package provided by Univ. of Tennessee, --
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
+* September 2012
*
* .. Scalar Arguments ..
LOGICAL IEEE
@@ -22,62 +197,6 @@
DOUBLE PRECISION Z( * )
* ..
*
-* Purpose
-* =======
-*
-* DLASQ3 checks for deflation, computes a shift (TAU) and calls dqds.
-* In case of failure it changes shifts, and tries again until output
-* is positive.
-*
-* Arguments
-* =========
-*
-* I0 (input) INTEGER
-* First index.
-*
-* N0 (input) INTEGER
-* Last index.
-*
-* Z (input) DOUBLE PRECISION array, dimension ( 4*N )
-* Z holds the qd array.
-*
-* PP (input/output) INTEGER
-* PP=0 for ping, PP=1 for pong.
-* PP=2 indicates that flipping was applied to the Z array
-* and that the initial tests for deflation should not be
-* performed.
-*
-* DMIN (output) DOUBLE PRECISION
-* Minimum value of d.
-*
-* SIGMA (output) DOUBLE PRECISION
-* Sum of shifts used in current segment.
-*
-* DESIG (input/output) DOUBLE PRECISION
-* Lower order part of SIGMA
-*
-* QMAX (input) DOUBLE PRECISION
-* Maximum value of q.
-*
-* NFAIL (output) INTEGER
-* Number of times shift was too big.
-*
-* ITER (output) INTEGER
-* Number of iterations.
-*
-* NDIV (output) INTEGER
-* Number of divisions.
-*
-* IEEE (input) LOGICAL
-* Flag for IEEE or non IEEE arithmetic (passed to DLASQ5).
-*
-* TTYPE (input/output) INTEGER
-* Shift type.
-*
-* DMIN1, DMIN2, DN, DN1, DN2, G, TAU (input/output) DOUBLE PRECISION
-* These are passed as arguments in order to save their values
-* between calls to DLASQ3.
-*
* =====================================================================
*
* .. Parameters ..
@@ -148,8 +267,8 @@
Z( NN-3 ) = Z( NN-7 )
Z( NN-7 ) = S
END IF
- IF( Z( NN-5 ).GT.Z( NN-3 )*TOL2 ) THEN
- T = HALF*( ( Z( NN-7 )-Z( NN-3 ) )+Z( NN-5 ) )
+ T = HALF*( ( Z( NN-7 )-Z( NN-3 ) )+Z( NN-5 ) )
+ IF( Z( NN-5 ).GT.Z( NN-3 )*TOL2.AND.T.NE.ZERO ) THEN
S = Z( NN-3 )*( Z( NN-5 ) / T )
IF( S.LE.T ) THEN
S = Z( NN-3 )*( Z( NN-5 ) /
@@ -212,15 +331,15 @@
*
70 CONTINUE
*
- CALL DLASQ5( I0, N0, Z, PP, TAU, DMIN, DMIN1, DMIN2, DN,
- $ DN1, DN2, IEEE )
+ CALL DLASQ5( I0, N0, Z, PP, TAU, SIGMA, DMIN, DMIN1, DMIN2, DN,
+ $ DN1, DN2, IEEE, EPS )
*
NDIV = NDIV + ( N0-I0+2 )
ITER = ITER + 1
*
* Check status.
*
- IF( DMIN.GE.ZERO .AND. DMIN1.GT.ZERO ) THEN
+ IF( DMIN.GE.ZERO .AND. DMIN1.GE.ZERO ) THEN
*
* Success.
*