--- rpl/lapack/lapack/dlaed6.f 2011/11/21 20:42:54 1.9
+++ rpl/lapack/lapack/dlaed6.f 2023/08/07 08:38:53 1.21
@@ -1,25 +1,25 @@
-*> \brief \b DLAED6
+*> \brief \b DLAED6 used by DSTEDC. Computes one Newton step in solution of the secular equation.
*
* =========== DOCUMENTATION ===========
*
-* Online html documentation available at
-* http://www.netlib.org/lapack/explore-html/
+* Online html documentation available at
+* http://www.netlib.org/lapack/explore-html/
*
*> \htmlonly
-*> Download DLAED6 + dependencies
-*>
-*> [TGZ]
-*>
-*> [ZIP]
-*>
+*> Download DLAED6 + dependencies
+*>
+*> [TGZ]
+*>
+*> [ZIP]
+*>
*> [TXT]
-*> \endhtmlonly
+*> \endhtmlonly
*
* Definition:
* ===========
*
* SUBROUTINE DLAED6( KNITER, ORGATI, RHO, D, Z, FINIT, TAU, INFO )
-*
+*
* .. Scalar Arguments ..
* LOGICAL ORGATI
* INTEGER INFO, KNITER
@@ -28,7 +28,7 @@
* .. Array Arguments ..
* DOUBLE PRECISION D( 3 ), Z( 3 )
* ..
-*
+*
*
*> \par Purpose:
* =============
@@ -110,12 +110,10 @@
* Authors:
* ========
*
-*> \author Univ. of Tennessee
-*> \author Univ. of California Berkeley
-*> \author Univ. of Colorado Denver
-*> \author NAG Ltd.
-*
-*> \date November 2011
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
*
*> \ingroup auxOTHERcomputational
*
@@ -140,10 +138,9 @@
* =====================================================================
SUBROUTINE DLAED6( KNITER, ORGATI, RHO, D, Z, FINIT, TAU, INFO )
*
-* -- LAPACK computational routine (version 3.4.0) --
+* -- LAPACK computational routine --
* -- LAPACK is a software package provided by Univ. of Tennessee, --
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2011
*
* .. Scalar Arguments ..
LOGICAL ORGATI
@@ -175,7 +172,7 @@
INTEGER I, ITER, NITER
DOUBLE PRECISION A, B, BASE, C, DDF, DF, EPS, ERRETM, ETA, F,
$ FC, SCLFAC, SCLINV, SMALL1, SMALL2, SMINV1,
- $ SMINV2, TEMP, TEMP1, TEMP2, TEMP3, TEMP4,
+ $ SMINV2, TEMP, TEMP1, TEMP2, TEMP3, TEMP4,
$ LBD, UBD
* ..
* .. Intrinsic Functions ..
@@ -195,7 +192,7 @@
IF( FINIT .LT. ZERO )THEN
LBD = ZERO
ELSE
- UBD = ZERO
+ UBD = ZERO
END IF
*
NITER = 1
@@ -363,27 +360,32 @@
*
TAU = TAU + ETA
IF( TAU .LT. LBD .OR. TAU .GT. UBD )
- $ TAU = ( LBD + UBD )/TWO
+ $ TAU = ( LBD + UBD )/TWO
*
FC = ZERO
ERRETM = ZERO
DF = ZERO
DDF = ZERO
DO 40 I = 1, 3
- TEMP = ONE / ( DSCALE( I )-TAU )
- TEMP1 = ZSCALE( I )*TEMP
- TEMP2 = TEMP1*TEMP
- TEMP3 = TEMP2*TEMP
- TEMP4 = TEMP1 / DSCALE( I )
- FC = FC + TEMP4
- ERRETM = ERRETM + ABS( TEMP4 )
- DF = DF + TEMP2
- DDF = DDF + TEMP3
+ IF ( ( DSCALE( I )-TAU ).NE.ZERO ) THEN
+ TEMP = ONE / ( DSCALE( I )-TAU )
+ TEMP1 = ZSCALE( I )*TEMP
+ TEMP2 = TEMP1*TEMP
+ TEMP3 = TEMP2*TEMP
+ TEMP4 = TEMP1 / DSCALE( I )
+ FC = FC + TEMP4
+ ERRETM = ERRETM + ABS( TEMP4 )
+ DF = DF + TEMP2
+ DDF = DDF + TEMP3
+ ELSE
+ GO TO 60
+ END IF
40 CONTINUE
F = FINIT + TAU*FC
ERRETM = EIGHT*( ABS( FINIT )+ABS( TAU )*ERRETM ) +
$ ABS( TAU )*DF
- IF( ABS( F ).LE.EPS*ERRETM )
+ IF( ( ABS( F ).LE.FOUR*EPS*ERRETM ) .OR.
+ $ ( (UBD-LBD).LE.FOUR*EPS*ABS(TAU) ) )
$ GO TO 60
IF( F .LE. ZERO )THEN
LBD = TAU