Diff for /rpl/lapack/lapack/dlasq6.f between versions 1.7 and 1.18

version 1.7, 2010/12/21 13:53:33 version 1.18, 2023/08/07 08:38:59
Line 1 Line 1
       SUBROUTINE DLASQ6( I0, N0, Z, PP, DMIN, DMIN1, DMIN2, DN,  *> \brief \b DLASQ6 computes one dqd transform in ping-pong form. Used by sbdsqr and sstegr.
      $                   DNM1, DNM2 )  *
   *  =========== DOCUMENTATION ===========
 *  *
 *  -- LAPACK routine (version 3.2)                                    --  * Online html documentation available at
   *            http://www.netlib.org/lapack/explore-html/
 *  *
 *  -- Contributed by Osni Marques of the Lawrence Berkeley National   --  *> \htmlonly
 *  -- Laboratory and Beresford Parlett of the Univ. of California at  --  *> Download DLASQ6 + dependencies
 *  -- Berkeley                                                        --  *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasq6.f">
 *  -- November 2008                                                   --  *> [TGZ]</a>
   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasq6.f">
   *> [ZIP]</a>
   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasq6.f">
   *> [TXT]</a>
   *> \endhtmlonly
   *
   *  Definition:
   *  ===========
   *
   *       SUBROUTINE DLASQ6( I0, N0, Z, PP, DMIN, DMIN1, DMIN2, DN,
   *                          DNM1, DNM2 )
   *
   *       .. Scalar Arguments ..
   *       INTEGER            I0, N0, PP
   *       DOUBLE PRECISION   DMIN, DMIN1, DMIN2, DN, DNM1, DNM2
   *       ..
   *       .. Array Arguments ..
   *       DOUBLE PRECISION   Z( * )
   *       ..
   *
   *
   *> \par Purpose:
   *  =============
   *>
   *> \verbatim
   *>
   *> DLASQ6 computes one dqd (shift equal to zero) transform in
   *> ping-pong form, with protection against underflow and overflow.
   *> \endverbatim
   *
   *  Arguments:
   *  ==========
   *
   *> \param[in] I0
   *> \verbatim
   *>          I0 is INTEGER
   *>        First index.
   *> \endverbatim
   *>
   *> \param[in] 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. EMIN is stored in Z(4*N0) to avoid
   *>        an extra argument.
   *> \endverbatim
   *>
   *> \param[in] PP
   *> \verbatim
   *>          PP is INTEGER
   *>        PP=0 for ping, PP=1 for pong.
   *> \endverbatim
   *>
   *> \param[out] DMIN
   *> \verbatim
   *>          DMIN is DOUBLE PRECISION
   *>        Minimum value of d.
   *> \endverbatim
   *>
   *> \param[out] DMIN1
   *> \verbatim
   *>          DMIN1 is DOUBLE PRECISION
   *>        Minimum value of d, excluding D( N0 ).
   *> \endverbatim
   *>
   *> \param[out] DMIN2
   *> \verbatim
   *>          DMIN2 is DOUBLE PRECISION
   *>        Minimum value of d, excluding D( N0 ) and D( N0-1 ).
   *> \endverbatim
   *>
   *> \param[out] DN
   *> \verbatim
   *>          DN is DOUBLE PRECISION
   *>        d(N0), the last value of d.
   *> \endverbatim
   *>
   *> \param[out] DNM1
   *> \verbatim
   *>          DNM1 is DOUBLE PRECISION
   *>        d(N0-1).
   *> \endverbatim
   *>
   *> \param[out] DNM2
   *> \verbatim
   *>          DNM2 is DOUBLE PRECISION
   *>        d(N0-2).
   *> \endverbatim
   *
   *  Authors:
   *  ========
   *
   *> \author Univ. of Tennessee
   *> \author Univ. of California Berkeley
   *> \author Univ. of Colorado Denver
   *> \author NAG Ltd.
 *  *
   *> \ingroup auxOTHERcomputational
   *
   *  =====================================================================
         SUBROUTINE DLASQ6( I0, N0, Z, PP, DMIN, DMIN1, DMIN2, DN,
        $                   DNM1, DNM2 )
   *
   *  -- LAPACK computational routine --
 *  -- 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..--
 *  *
Line 19 Line 129
       DOUBLE PRECISION   Z( * )        DOUBLE PRECISION   Z( * )
 *     ..  *     ..
 *  *
 *  Purpose  
 *  =======  
 *  
 *  DLASQ6 computes one dqd (shift equal to zero) transform in  
 *  ping-pong form, with protection against underflow and overflow.  
 *  
 *  Arguments  
 *  =========  
 *  
 *  I0    (input) INTEGER  
 *        First index.  
 *  
 *  N0    (input) INTEGER  
 *        Last index.  
 *  
 *  Z     (input) DOUBLE PRECISION array, dimension ( 4*N )  
 *        Z holds the qd array. EMIN is stored in Z(4*N0) to avoid  
 *        an extra argument.  
 *  
 *  PP    (input) INTEGER  
 *        PP=0 for ping, PP=1 for pong.  
 *  
 *  DMIN  (output) DOUBLE PRECISION  
 *        Minimum value of d.  
 *  
 *  DMIN1 (output) DOUBLE PRECISION  
 *        Minimum value of d, excluding D( N0 ).  
 *  
 *  DMIN2 (output) DOUBLE PRECISION  
 *        Minimum value of d, excluding D( N0 ) and D( N0-1 ).  
 *  
 *  DN    (output) DOUBLE PRECISION  
 *        d(N0), the last value of d.  
 *  
 *  DNM1  (output) DOUBLE PRECISION  
 *        d(N0-1).  
 *  
 *  DNM2  (output) DOUBLE PRECISION  
 *        d(N0-2).  
 *  
 *  =====================================================================  *  =====================================================================
 *  *
 *     .. Parameter ..  *     .. Parameter ..
Line 83 Line 153
 *  *
       SAFMIN = DLAMCH( 'Safe minimum' )        SAFMIN = DLAMCH( 'Safe minimum' )
       J4 = 4*I0 + PP - 3        J4 = 4*I0 + PP - 3
       EMIN = Z( J4+4 )         EMIN = Z( J4+4 )
       D = Z( J4 )        D = Z( J4 )
       DMIN = D        DMIN = D
 *  *
       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 )
             IF( Z( J4-2 ).EQ.ZERO ) THEN              IF( Z( J4-2 ).EQ.ZERO ) THEN
                Z( J4 ) = ZERO                 Z( J4 ) = ZERO
                D = Z( J4+1 )                 D = Z( J4+1 )
Line 100 Line 170
                TEMP = Z( J4+1 ) / Z( J4-2 )                 TEMP = Z( J4+1 ) / Z( J4-2 )
                Z( J4 ) = Z( J4-1 )*TEMP                 Z( J4 ) = Z( J4-1 )*TEMP
                D = D*TEMP                 D = D*TEMP
             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 ) )                 D = Z( J4+1 )*( D / Z( J4-2 ) )
             END IF              END IF
Line 109 Line 179
    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 )
             IF( Z( J4-3 ).EQ.ZERO ) THEN              IF( Z( J4-3 ).EQ.ZERO ) THEN
                Z( J4-1 ) = ZERO                 Z( J4-1 ) = ZERO
                D = Z( J4+2 )                 D = Z( J4+2 )
Line 120 Line 190
                TEMP = Z( J4+2 ) / Z( J4-3 )                 TEMP = Z( J4+2 ) / Z( J4-3 )
                Z( J4-1 ) = Z( J4 )*TEMP                 Z( J4-1 ) = Z( J4 )*TEMP
                D = D*TEMP                 D = D*TEMP
             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 ) )                 D = Z( J4+2 )*( D / Z( J4-3 ) )
             END IF              END IF
Line 129 Line 199
    20    CONTINUE     20    CONTINUE
       END IF        END IF
 *  *
 *     Unroll last two steps.   *     Unroll last two steps.
 *  *
       DNM2 = D        DNM2 = D
       DMIN2 = DMIN        DMIN2 = DMIN

Removed from v.1.7  
changed lines
  Added in v.1.18


CVSweb interface <joel.bertrand@systella.fr>