version 1.6, 2010/08/13 21:04:10
|
version 1.13, 2012/12/14 14:22:51
|
Line 1
|
Line 1
|
|
*> \brief \b ZLAR1V computes the (scaled) r-th column of the inverse of the submatrix in rows b1 through bn of the tridiagonal matrix LDLT - λI. |
|
* |
|
* =========== 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 September 2012 |
|
* |
|
*> \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.2) -- |
* -- LAPACK auxiliary routine (version 3.4.2) -- |
* -- 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..-- |
* November 2006 |
* September 2012 |
* |
* |
* .. 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 .. |