Diff for /rpl/lapack/lapack/dlasq5.f between versions 1.15 and 1.16

version 1.15, 2016/08/27 15:34:32 version 1.16, 2017/06/17 10:53:57
Line 2 Line 2
 *  *
 *  =========== DOCUMENTATION ===========  *  =========== DOCUMENTATION ===========
 *  *
 * Online html documentation available at   * Online html documentation available at
 *            http://www.netlib.org/lapack/explore-html/   *            http://www.netlib.org/lapack/explore-html/
 *  *
 *> \htmlonly  *> \htmlonly
 *> Download DLASQ5 + dependencies   *> Download DLASQ5 + dependencies
 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasq5.f">   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasq5.f">
 *> [TGZ]</a>   *> [TGZ]</a>
 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasq5.f">   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasq5.f">
 *> [ZIP]</a>   *> [ZIP]</a>
 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasq5.f">   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasq5.f">
 *> [TXT]</a>  *> [TXT]</a>
 *> \endhtmlonly   *> \endhtmlonly
 *  *
 *  Definition:  *  Definition:
 *  ===========  *  ===========
 *  *
 *       SUBROUTINE DLASQ5( I0, N0, Z, PP, TAU, SIGMA, DMIN, DMIN1, DMIN2, DN,  *       SUBROUTINE DLASQ5( I0, N0, Z, PP, TAU, SIGMA, DMIN, DMIN1, DMIN2, DN,
 *                          DNM1, DNM2, IEEE, EPS )  *                          DNM1, DNM2, IEEE, EPS )
 *   *
 *       .. Scalar Arguments ..  *       .. Scalar Arguments ..
 *       LOGICAL            IEEE  *       LOGICAL            IEEE
 *       INTEGER            I0, N0, PP  *       INTEGER            I0, N0, PP
Line 29 Line 29
 *       .. Array Arguments ..  *       .. Array Arguments ..
 *       DOUBLE PRECISION   Z( * )  *       DOUBLE PRECISION   Z( * )
 *       ..  *       ..
 *    *
 *  *
 *> \par Purpose:  *> \par Purpose:
 *  =============  *  =============
Line 131 Line 131
 *  Authors:  *  Authors:
 *  ========  *  ========
 *  *
 *> \author Univ. of Tennessee   *> \author Univ. of Tennessee
 *> \author Univ. of California Berkeley   *> \author Univ. of California Berkeley
 *> \author Univ. of Colorado Denver   *> \author Univ. of Colorado Denver
 *> \author NAG Ltd.   *> \author NAG Ltd.
 *  *
 *> \date September 2012  *> \date December 2016
 *  *
 *> \ingroup auxOTHERcomputational  *> \ingroup auxOTHERcomputational
 *  *
Line 144 Line 144
       SUBROUTINE DLASQ5( I0, N0, Z, PP, TAU, SIGMA, DMIN, DMIN1, DMIN2,        SUBROUTINE DLASQ5( I0, N0, Z, PP, TAU, SIGMA, DMIN, DMIN1, DMIN2,
      $                   DN, DNM1, DNM2, IEEE, EPS )       $                   DN, DNM1, DNM2, IEEE, EPS )
 *  *
 *  -- LAPACK computational routine (version 3.4.2) --  *  -- LAPACK computational routine (version 3.7.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --  *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--  *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
 *     September 2012  *     December 2016
 *  *
 *     .. Scalar Arguments ..  *     .. Scalar Arguments ..
       LOGICAL            IEEE        LOGICAL            IEEE
Line 181 Line 181
       IF( TAU.LT.DTHRESH*HALF ) TAU = ZERO        IF( TAU.LT.DTHRESH*HALF ) TAU = ZERO
       IF( TAU.NE.ZERO ) THEN        IF( TAU.NE.ZERO ) THEN
       J4 = 4*I0 + PP - 3        J4 = 4*I0 + PP - 3
       EMIN = Z( J4+4 )         EMIN = Z( J4+4 )
       D = Z( J4 ) - TAU        D = Z( J4 ) - TAU
       DMIN = D        DMIN = D
       DMIN1 = -Z( J4 )        DMIN1 = -Z( J4 )
Line 192 Line 192
 *  *
          IF( PP.EQ.0 ) THEN           IF( PP.EQ.0 ) THEN
             DO 10 J4 = 4*I0, 4*( N0-3 ), 4              DO 10 J4 = 4*I0, 4*( N0-3 ), 4
                Z( J4-2 ) = D + Z( J4-1 )                  Z( J4-2 ) = D + Z( J4-1 )
                TEMP = Z( J4+1 ) / Z( J4-2 )                 TEMP = Z( J4+1 ) / Z( J4-2 )
                D = D*TEMP - TAU                 D = D*TEMP - TAU
                DMIN = MIN( DMIN, D )                 DMIN = MIN( DMIN, D )
Line 201 Line 201
    10       CONTINUE     10       CONTINUE
          ELSE           ELSE
             DO 20 J4 = 4*I0, 4*( N0-3 ), 4              DO 20 J4 = 4*I0, 4*( N0-3 ), 4
                Z( J4-3 ) = D + Z( J4 )                  Z( J4-3 ) = D + Z( J4 )
                TEMP = Z( J4+2 ) / Z( J4-3 )                 TEMP = Z( J4+2 ) / Z( J4-3 )
                D = D*TEMP - TAU                 D = D*TEMP - TAU
                DMIN = MIN( DMIN, D )                 DMIN = MIN( DMIN, D )
Line 210 Line 210
    20       CONTINUE     20       CONTINUE
          END IF           END IF
 *  *
 *        Unroll last two steps.   *        Unroll last two steps.
 *  *
          DNM2 = D           DNM2 = D
          DMIN2 = DMIN           DMIN2 = DMIN
Line 235 Line 235
 *  *
          IF( PP.EQ.0 ) THEN           IF( PP.EQ.0 ) THEN
             DO 30 J4 = 4*I0, 4*( N0-3 ), 4              DO 30 J4 = 4*I0, 4*( N0-3 ), 4
                Z( J4-2 ) = D + Z( J4-1 )                  Z( J4-2 ) = D + Z( J4-1 )
                IF( D.LT.ZERO ) THEN                 IF( D.LT.ZERO ) THEN
                   RETURN                    RETURN
                ELSE                  ELSE
                   Z( J4 ) = Z( J4+1 )*( Z( J4-1 ) / Z( J4-2 ) )                    Z( J4 ) = Z( J4+1 )*( Z( J4-1 ) / Z( J4-2 ) )
                   D = Z( J4+1 )*( D / Z( J4-2 ) ) - TAU                    D = Z( J4+1 )*( D / Z( J4-2 ) ) - TAU
                END IF                 END IF
Line 247 Line 247
    30       CONTINUE     30       CONTINUE
          ELSE           ELSE
             DO 40 J4 = 4*I0, 4*( N0-3 ), 4              DO 40 J4 = 4*I0, 4*( N0-3 ), 4
                Z( J4-3 ) = D + Z( J4 )                  Z( J4-3 ) = D + Z( J4 )
                IF( D.LT.ZERO ) THEN                 IF( D.LT.ZERO ) THEN
                   RETURN                    RETURN
                ELSE                  ELSE
                   Z( J4-1 ) = Z( J4+2 )*( Z( J4 ) / Z( J4-3 ) )                    Z( J4-1 ) = Z( J4+2 )*( Z( J4 ) / Z( J4-3 ) )
                   D = Z( J4+2 )*( D / Z( J4-3 ) ) - TAU                    D = Z( J4+2 )*( D / Z( J4-3 ) ) - TAU
                END IF                 END IF
Line 259 Line 259
    40       CONTINUE     40       CONTINUE
          END IF           END IF
 *  *
 *        Unroll last two steps.   *        Unroll last two steps.
 *  *
          DNM2 = D           DNM2 = D
          DMIN2 = DMIN           DMIN2 = DMIN
Line 290 Line 290
       ELSE        ELSE
 *     This is the version that sets d's to zero if they are small enough  *     This is the version that sets d's to zero if they are small enough
          J4 = 4*I0 + PP - 3           J4 = 4*I0 + PP - 3
          EMIN = Z( J4+4 )            EMIN = Z( J4+4 )
          D = Z( J4 ) - TAU           D = Z( J4 ) - TAU
          DMIN = D           DMIN = D
          DMIN1 = -Z( J4 )           DMIN1 = -Z( J4 )
          IF( IEEE ) THEN           IF( IEEE ) THEN
 *       *
 *     Code for IEEE arithmetic.  *     Code for IEEE arithmetic.
 *       *
             IF( PP.EQ.0 ) THEN              IF( PP.EQ.0 ) THEN
                DO 50 J4 = 4*I0, 4*( N0-3 ), 4                 DO 50 J4 = 4*I0, 4*( N0-3 ), 4
                   Z( J4-2 ) = D + Z( J4-1 )                     Z( J4-2 ) = D + Z( J4-1 )
                   TEMP = Z( J4+1 ) / Z( J4-2 )                    TEMP = Z( J4+1 ) / Z( J4-2 )
                   D = D*TEMP - TAU                    D = D*TEMP - TAU
                   IF( D.LT.DTHRESH ) D = ZERO                    IF( D.LT.DTHRESH ) D = ZERO
Line 310 Line 310
  50            CONTINUE   50            CONTINUE
             ELSE              ELSE
                DO 60 J4 = 4*I0, 4*( N0-3 ), 4                 DO 60 J4 = 4*I0, 4*( N0-3 ), 4
                   Z( J4-3 ) = D + Z( J4 )                     Z( J4-3 ) = D + Z( J4 )
                   TEMP = Z( J4+2 ) / Z( J4-3 )                    TEMP = Z( J4+2 ) / Z( J4-3 )
                   D = D*TEMP - TAU                    D = D*TEMP - TAU
                   IF( D.LT.DTHRESH ) D = ZERO                    IF( D.LT.DTHRESH ) D = ZERO
Line 319 Line 319
                   EMIN = MIN( Z( J4-1 ), EMIN )                    EMIN = MIN( Z( J4-1 ), EMIN )
  60            CONTINUE   60            CONTINUE
             END IF              END IF
 *       *
 *     Unroll last two steps.   *     Unroll last two steps.
 *       *
             DNM2 = D              DNM2 = D
             DMIN2 = DMIN              DMIN2 = DMIN
             J4 = 4*( N0-2 ) - PP              J4 = 4*( N0-2 ) - PP
Line 330 Line 330
             Z( J4 ) = Z( J4P2+2 )*( Z( J4P2 ) / Z( J4-2 ) )              Z( J4 ) = Z( J4P2+2 )*( Z( J4P2 ) / Z( J4-2 ) )
             DNM1 = Z( J4P2+2 )*( DNM2 / Z( J4-2 ) ) - TAU              DNM1 = Z( J4P2+2 )*( DNM2 / Z( J4-2 ) ) - TAU
             DMIN = MIN( DMIN, DNM1 )              DMIN = MIN( DMIN, DNM1 )
 *       *
             DMIN1 = DMIN              DMIN1 = DMIN
             J4 = J4 + 4              J4 = J4 + 4
             J4P2 = J4 + 2*PP - 1              J4P2 = J4 + 2*PP - 1
Line 338 Line 338
             Z( J4 ) = Z( J4P2+2 )*( Z( J4P2 ) / Z( J4-2 ) )              Z( J4 ) = Z( J4P2+2 )*( Z( J4P2 ) / Z( J4-2 ) )
             DN = Z( J4P2+2 )*( DNM1 / Z( J4-2 ) ) - TAU              DN = Z( J4P2+2 )*( DNM1 / Z( J4-2 ) ) - TAU
             DMIN = MIN( DMIN, DN )              DMIN = MIN( DMIN, DN )
 *       *
          ELSE           ELSE
 *       *
 *     Code for non IEEE arithmetic.  *     Code for non IEEE arithmetic.
 *       *
             IF( PP.EQ.0 ) THEN              IF( PP.EQ.0 ) THEN
                DO 70 J4 = 4*I0, 4*( N0-3 ), 4                 DO 70 J4 = 4*I0, 4*( N0-3 ), 4
                   Z( J4-2 ) = D + Z( J4-1 )                     Z( J4-2 ) = D + Z( J4-1 )
                   IF( D.LT.ZERO ) THEN                    IF( D.LT.ZERO ) THEN
                      RETURN                       RETURN
                   ELSE                     ELSE
                      Z( J4 ) = Z( J4+1 )*( Z( J4-1 ) / Z( J4-2 ) )                       Z( J4 ) = Z( J4+1 )*( Z( J4-1 ) / Z( J4-2 ) )
                      D = Z( J4+1 )*( D / Z( J4-2 ) ) - TAU                       D = Z( J4+1 )*( D / Z( J4-2 ) ) - TAU
                   END IF                    END IF
Line 358 Line 358
  70            CONTINUE   70            CONTINUE
             ELSE              ELSE
                DO 80 J4 = 4*I0, 4*( N0-3 ), 4                 DO 80 J4 = 4*I0, 4*( N0-3 ), 4
                   Z( J4-3 ) = D + Z( J4 )                     Z( J4-3 ) = D + Z( J4 )
                   IF( D.LT.ZERO ) THEN                    IF( D.LT.ZERO ) THEN
                      RETURN                       RETURN
                   ELSE                     ELSE
                      Z( J4-1 ) = Z( J4+2 )*( Z( J4 ) / Z( J4-3 ) )                       Z( J4-1 ) = Z( J4+2 )*( Z( J4 ) / Z( J4-3 ) )
                      D = Z( J4+2 )*( D / Z( J4-3 ) ) - TAU                       D = Z( J4+2 )*( D / Z( J4-3 ) ) - TAU
                   END IF                    END IF
Line 370 Line 370
                   EMIN = MIN( EMIN, Z( J4-1 ) )                    EMIN = MIN( EMIN, Z( J4-1 ) )
  80            CONTINUE   80            CONTINUE
             END IF              END IF
 *       *
 *     Unroll last two steps.   *     Unroll last two steps.
 *       *
             DNM2 = D              DNM2 = D
             DMIN2 = DMIN              DMIN2 = DMIN
             J4 = 4*( N0-2 ) - PP              J4 = 4*( N0-2 ) - PP
Line 385 Line 385
                DNM1 = Z( J4P2+2 )*( DNM2 / Z( J4-2 ) ) - TAU                 DNM1 = Z( J4P2+2 )*( DNM2 / Z( J4-2 ) ) - TAU
             END IF              END IF
             DMIN = MIN( DMIN, DNM1 )              DMIN = MIN( DMIN, DNM1 )
 *       *
             DMIN1 = DMIN              DMIN1 = DMIN
             J4 = J4 + 4              J4 = J4 + 4
             J4P2 = J4 + 2*PP - 1              J4P2 = J4 + 2*PP - 1
Line 397 Line 397
                DN = Z( J4P2+2 )*( DNM1 / Z( J4-2 ) ) - TAU                 DN = Z( J4P2+2 )*( DNM1 / Z( J4-2 ) ) - TAU
             END IF              END IF
             DMIN = MIN( DMIN, DN )              DMIN = MIN( DMIN, DN )
 *       *
          END IF           END IF
       END IF        END IF
 *       *
       Z( J4+2 ) = DN        Z( J4+2 ) = DN
       Z( 4*N0-PP ) = EMIN        Z( 4*N0-PP ) = EMIN
       RETURN        RETURN

Removed from v.1.15  
changed lines
  Added in v.1.16


CVSweb interface <joel.bertrand@systella.fr>