Diff for /rpl/lapack/lapack/zlar1v.f between versions 1.8 and 1.9

version 1.8, 2011/07/22 07:38:17 version 1.9, 2011/11/21 20:43:16
Line 1 Line 1
   *> \brief \b ZLAR1V
   *
   *  =========== DOCUMENTATION ===========
   *
   * Online html documentation available at 
   *            http://www.netlib.org/lapack/explore-html/ 
   *
   *> \htmlonly
   *> Download ZLAR1V + dependencies 
   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zlar1v.f"> 
   *> [TGZ]</a> 
   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zlar1v.f"> 
   *> [ZIP]</a> 
   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlar1v.f"> 
   *> [TXT]</a>
   *> \endhtmlonly 
   *
   *  Definition:
   *  ===========
   *
   *       SUBROUTINE ZLAR1V( N, B1, BN, LAMBDA, D, L, LD, LLD,
   *                  PIVMIN, GAPTOL, Z, WANTNC, NEGCNT, ZTZ, MINGMA,
   *                  R, ISUPPZ, NRMINV, RESID, RQCORR, WORK )
   * 
   *       .. Scalar Arguments ..
   *       LOGICAL            WANTNC
   *       INTEGER   B1, BN, N, NEGCNT, R
   *       DOUBLE PRECISION   GAPTOL, LAMBDA, MINGMA, NRMINV, PIVMIN, RESID,
   *      $                   RQCORR, ZTZ
   *       ..
   *       .. Array Arguments ..
   *       INTEGER            ISUPPZ( * )
   *       DOUBLE PRECISION   D( * ), L( * ), LD( * ), LLD( * ),
   *      $                  WORK( * )
   *       COMPLEX*16       Z( * )
   *       ..
   *  
   *
   *> \par Purpose:
   *  =============
   *>
   *> \verbatim
   *>
   *> ZLAR1V computes the (scaled) r-th column of the inverse of
   *> the sumbmatrix in rows B1 through BN of the tridiagonal matrix
   *> L D L**T - sigma I. When sigma is close to an eigenvalue, the
   *> computed vector is an accurate eigenvector. Usually, r corresponds
   *> to the index where the eigenvector is largest in magnitude.
   *> The following steps accomplish this computation :
   *> (a) Stationary qd transform,  L D L**T - sigma I = L(+) D(+) L(+)**T,
   *> (b) Progressive qd transform, L D L**T - sigma I = U(-) D(-) U(-)**T,
   *> (c) Computation of the diagonal elements of the inverse of
   *>     L D L**T - sigma I by combining the above transforms, and choosing
   *>     r as the index where the diagonal of the inverse is (one of the)
   *>     largest in magnitude.
   *> (d) Computation of the (scaled) r-th column of the inverse using the
   *>     twisted factorization obtained by combining the top part of the
   *>     the stationary and the bottom part of the progressive transform.
   *> \endverbatim
   *
   *  Arguments:
   *  ==========
   *
   *> \param[in] N
   *> \verbatim
   *>          N is INTEGER
   *>           The order of the matrix L D L**T.
   *> \endverbatim
   *>
   *> \param[in] B1
   *> \verbatim
   *>          B1 is INTEGER
   *>           First index of the submatrix of L D L**T.
   *> \endverbatim
   *>
   *> \param[in] BN
   *> \verbatim
   *>          BN is INTEGER
   *>           Last index of the submatrix of L D L**T.
   *> \endverbatim
   *>
   *> \param[in] LAMBDA
   *> \verbatim
   *>          LAMBDA is DOUBLE PRECISION
   *>           The shift. In order to compute an accurate eigenvector,
   *>           LAMBDA should be a good approximation to an eigenvalue
   *>           of L D L**T.
   *> \endverbatim
   *>
   *> \param[in] L
   *> \verbatim
   *>          L is DOUBLE PRECISION array, dimension (N-1)
   *>           The (n-1) subdiagonal elements of the unit bidiagonal matrix
   *>           L, in elements 1 to N-1.
   *> \endverbatim
   *>
   *> \param[in] D
   *> \verbatim
   *>          D is DOUBLE PRECISION array, dimension (N)
   *>           The n diagonal elements of the diagonal matrix D.
   *> \endverbatim
   *>
   *> \param[in] LD
   *> \verbatim
   *>          LD is DOUBLE PRECISION array, dimension (N-1)
   *>           The n-1 elements L(i)*D(i).
   *> \endverbatim
   *>
   *> \param[in] LLD
   *> \verbatim
   *>          LLD is DOUBLE PRECISION array, dimension (N-1)
   *>           The n-1 elements L(i)*L(i)*D(i).
   *> \endverbatim
   *>
   *> \param[in] PIVMIN
   *> \verbatim
   *>          PIVMIN is DOUBLE PRECISION
   *>           The minimum pivot in the Sturm sequence.
   *> \endverbatim
   *>
   *> \param[in] GAPTOL
   *> \verbatim
   *>          GAPTOL is DOUBLE PRECISION
   *>           Tolerance that indicates when eigenvector entries are negligible
   *>           w.r.t. their contribution to the residual.
   *> \endverbatim
   *>
   *> \param[in,out] Z
   *> \verbatim
   *>          Z is COMPLEX*16 array, dimension (N)
   *>           On input, all entries of Z must be set to 0.
   *>           On output, Z contains the (scaled) r-th column of the
   *>           inverse. The scaling is such that Z(R) equals 1.
   *> \endverbatim
   *>
   *> \param[in] WANTNC
   *> \verbatim
   *>          WANTNC is LOGICAL
   *>           Specifies whether NEGCNT has to be computed.
   *> \endverbatim
   *>
   *> \param[out] NEGCNT
   *> \verbatim
   *>          NEGCNT is INTEGER
   *>           If WANTNC is .TRUE. then NEGCNT = the number of pivots < pivmin
   *>           in the  matrix factorization L D L**T, and NEGCNT = -1 otherwise.
   *> \endverbatim
   *>
   *> \param[out] ZTZ
   *> \verbatim
   *>          ZTZ is DOUBLE PRECISION
   *>           The square of the 2-norm of Z.
   *> \endverbatim
   *>
   *> \param[out] MINGMA
   *> \verbatim
   *>          MINGMA is DOUBLE PRECISION
   *>           The reciprocal of the largest (in magnitude) diagonal
   *>           element of the inverse of L D L**T - sigma I.
   *> \endverbatim
   *>
   *> \param[in,out] R
   *> \verbatim
   *>          R is INTEGER
   *>           The twist index for the twisted factorization used to
   *>           compute Z.
   *>           On input, 0 <= R <= N. If R is input as 0, R is set to
   *>           the index where (L D L**T - sigma I)^{-1} is largest
   *>           in magnitude. If 1 <= R <= N, R is unchanged.
   *>           On output, R contains the twist index used to compute Z.
   *>           Ideally, R designates the position of the maximum entry in the
   *>           eigenvector.
   *> \endverbatim
   *>
   *> \param[out] ISUPPZ
   *> \verbatim
   *>          ISUPPZ is INTEGER array, dimension (2)
   *>           The support of the vector in Z, i.e., the vector Z is
   *>           nonzero only in elements ISUPPZ(1) through ISUPPZ( 2 ).
   *> \endverbatim
   *>
   *> \param[out] NRMINV
   *> \verbatim
   *>          NRMINV is DOUBLE PRECISION
   *>           NRMINV = 1/SQRT( ZTZ )
   *> \endverbatim
   *>
   *> \param[out] RESID
   *> \verbatim
   *>          RESID is DOUBLE PRECISION
   *>           The residual of the FP vector.
   *>           RESID = ABS( MINGMA )/SQRT( ZTZ )
   *> \endverbatim
   *>
   *> \param[out] RQCORR
   *> \verbatim
   *>          RQCORR is DOUBLE PRECISION
   *>           The Rayleigh Quotient correction to LAMBDA.
   *>           RQCORR = MINGMA*TMP
   *> \endverbatim
   *>
   *> \param[out] WORK
   *> \verbatim
   *>          WORK is DOUBLE PRECISION array, dimension (4*N)
   *> \endverbatim
   *
   *  Authors:
   *  ========
   *
   *> \author Univ. of Tennessee 
   *> \author Univ. of California Berkeley 
   *> \author Univ. of Colorado Denver 
   *> \author NAG Ltd. 
   *
   *> \date November 2011
   *
   *> \ingroup complex16OTHERauxiliary
   *
   *> \par Contributors:
   *  ==================
   *>
   *> Beresford Parlett, University of California, Berkeley, USA \n
   *> Jim Demmel, University of California, Berkeley, USA \n
   *> Inderjit Dhillon, University of Texas, Austin, USA \n
   *> Osni Marques, LBNL/NERSC, USA \n
   *> Christof Voemel, University of California, Berkeley, USA
   *
   *  =====================================================================
       SUBROUTINE ZLAR1V( N, B1, BN, LAMBDA, D, L, LD, LLD,        SUBROUTINE ZLAR1V( N, B1, BN, LAMBDA, D, L, LD, LLD,
      $           PIVMIN, GAPTOL, Z, WANTNC, NEGCNT, ZTZ, MINGMA,       $           PIVMIN, GAPTOL, Z, WANTNC, NEGCNT, ZTZ, MINGMA,
      $           R, ISUPPZ, NRMINV, RESID, RQCORR, WORK )       $           R, ISUPPZ, NRMINV, RESID, RQCORR, WORK )
 *  *
 *  -- LAPACK auxiliary routine (version 3.3.1) --  *  -- LAPACK auxiliary routine (version 3.4.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..--
 *  -- April 2011                                                      --  *     November 2011
 *  *
 *     .. Scalar Arguments ..  *     .. Scalar Arguments ..
       LOGICAL            WANTNC        LOGICAL            WANTNC
Line 20 Line 248
       COMPLEX*16       Z( * )        COMPLEX*16       Z( * )
 *     ..  *     ..
 *  *
 *  Purpose  
 *  =======  
 *  
 *  ZLAR1V computes the (scaled) r-th column of the inverse of  
 *  the sumbmatrix in rows B1 through BN of the tridiagonal matrix  
 *  L D L**T - sigma I. When sigma is close to an eigenvalue, the  
 *  computed vector is an accurate eigenvector. Usually, r corresponds  
 *  to the index where the eigenvector is largest in magnitude.  
 *  The following steps accomplish this computation :  
 *  (a) Stationary qd transform,  L D L**T - sigma I = L(+) D(+) L(+)**T,  
 *  (b) Progressive qd transform, L D L**T - sigma I = U(-) D(-) U(-)**T,  
 *  (c) Computation of the diagonal elements of the inverse of  
 *      L D L**T - sigma I by combining the above transforms, and choosing  
 *      r as the index where the diagonal of the inverse is (one of the)  
 *      largest in magnitude.  
 *  (d) Computation of the (scaled) r-th column of the inverse using the  
 *      twisted factorization obtained by combining the top part of the  
 *      the stationary and the bottom part of the progressive transform.  
 *  
 *  Arguments  
 *  =========  
 *  
 *  N        (input) INTEGER  
 *           The order of the matrix L D L**T.  
 *  
 *  B1       (input) INTEGER  
 *           First index of the submatrix of L D L**T.  
 *  
 *  BN       (input) INTEGER  
 *           Last index of the submatrix of L D L**T.  
 *  
 *  LAMBDA    (input) DOUBLE PRECISION  
 *           The shift. In order to compute an accurate eigenvector,  
 *           LAMBDA should be a good approximation to an eigenvalue  
 *           of L D L**T.  
 *  
 *  L        (input) DOUBLE PRECISION array, dimension (N-1)  
 *           The (n-1) subdiagonal elements of the unit bidiagonal matrix  
 *           L, in elements 1 to N-1.  
 *  
 *  D        (input) DOUBLE PRECISION array, dimension (N)  
 *           The n diagonal elements of the diagonal matrix D.  
 *  
 *  LD       (input) DOUBLE PRECISION array, dimension (N-1)  
 *           The n-1 elements L(i)*D(i).  
 *  
 *  LLD      (input) DOUBLE PRECISION array, dimension (N-1)  
 *           The n-1 elements L(i)*L(i)*D(i).  
 *  
 *  PIVMIN   (input) DOUBLE PRECISION  
 *           The minimum pivot in the Sturm sequence.  
 *  
 *  GAPTOL   (input) DOUBLE PRECISION  
 *           Tolerance that indicates when eigenvector entries are negligible  
 *           w.r.t. their contribution to the residual.  
 *  
 *  Z        (input/output) COMPLEX*16       array, dimension (N)  
 *           On input, all entries of Z must be set to 0.  
 *           On output, Z contains the (scaled) r-th column of the  
 *           inverse. The scaling is such that Z(R) equals 1.  
 *  
 *  WANTNC   (input) LOGICAL  
 *           Specifies whether NEGCNT has to be computed.  
 *  
 *  NEGCNT   (output) INTEGER  
 *           If WANTNC is .TRUE. then NEGCNT = the number of pivots < pivmin  
 *           in the  matrix factorization L D L**T, and NEGCNT = -1 otherwise.  
 *  
 *  ZTZ      (output) DOUBLE PRECISION  
 *           The square of the 2-norm of Z.  
 *  
 *  MINGMA   (output) DOUBLE PRECISION  
 *           The reciprocal of the largest (in magnitude) diagonal  
 *           element of the inverse of L D L**T - sigma I.  
 *  
 *  R        (input/output) INTEGER  
 *           The twist index for the twisted factorization used to  
 *           compute Z.  
 *           On input, 0 <= R <= N. If R is input as 0, R is set to  
 *           the index where (L D L**T - sigma I)^{-1} is largest  
 *           in magnitude. If 1 <= R <= N, R is unchanged.  
 *           On output, R contains the twist index used to compute Z.  
 *           Ideally, R designates the position of the maximum entry in the  
 *           eigenvector.  
 *  
 *  ISUPPZ   (output) INTEGER array, dimension (2)  
 *           The support of the vector in Z, i.e., the vector Z is  
 *           nonzero only in elements ISUPPZ(1) through ISUPPZ( 2 ).  
 *  
 *  NRMINV   (output) DOUBLE PRECISION  
 *           NRMINV = 1/SQRT( ZTZ )  
 *  
 *  RESID    (output) DOUBLE PRECISION  
 *           The residual of the FP vector.  
 *           RESID = ABS( MINGMA )/SQRT( ZTZ )  
 *  
 *  RQCORR   (output) DOUBLE PRECISION  
 *           The Rayleigh Quotient correction to LAMBDA.  
 *           RQCORR = MINGMA*TMP  
 *  
 *  WORK     (workspace) DOUBLE PRECISION array, dimension (4*N)  
 *  
 *  Further Details  
 *  ===============  
 *  
 *  Based on contributions by  
 *     Beresford Parlett, University of California, Berkeley, USA  
 *     Jim Demmel, University of California, Berkeley, USA  
 *     Inderjit Dhillon, University of Texas, Austin, USA  
 *     Osni Marques, LBNL/NERSC, USA  
 *     Christof Voemel, University of California, Berkeley, USA  
 *  
 *  =====================================================================  *  =====================================================================
 *  *
 *     .. Parameters ..  *     .. Parameters ..

Removed from v.1.8  
changed lines
  Added in v.1.9


CVSweb interface <joel.bertrand@systella.fr>