Annotation of rpl/lapack/lapack/zstegr.f, revision 1.8
1.8 ! bertrand 1: *> \brief \b ZSTEGR
! 2: *
! 3: * =========== DOCUMENTATION ===========
! 4: *
! 5: * Online html documentation available at
! 6: * http://www.netlib.org/lapack/explore-html/
! 7: *
! 8: *> \htmlonly
! 9: *> Download ZSTEGR + dependencies
! 10: *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zstegr.f">
! 11: *> [TGZ]</a>
! 12: *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zstegr.f">
! 13: *> [ZIP]</a>
! 14: *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zstegr.f">
! 15: *> [TXT]</a>
! 16: *> \endhtmlonly
! 17: *
! 18: * Definition:
! 19: * ===========
! 20: *
! 21: * SUBROUTINE ZSTEGR( JOBZ, RANGE, N, D, E, VL, VU, IL, IU,
! 22: * ABSTOL, M, W, Z, LDZ, ISUPPZ, WORK, LWORK, IWORK,
! 23: * LIWORK, INFO )
! 24: *
! 25: * .. Scalar Arguments ..
! 26: * CHARACTER JOBZ, RANGE
! 27: * INTEGER IL, INFO, IU, LDZ, LIWORK, LWORK, M, N
! 28: * DOUBLE PRECISION ABSTOL, VL, VU
! 29: * ..
! 30: * .. Array Arguments ..
! 31: * INTEGER ISUPPZ( * ), IWORK( * )
! 32: * DOUBLE PRECISION D( * ), E( * ), W( * ), WORK( * )
! 33: * COMPLEX*16 Z( LDZ, * )
! 34: * ..
! 35: *
! 36: *
! 37: *> \par Purpose:
! 38: * =============
! 39: *>
! 40: *> \verbatim
! 41: *>
! 42: *> ZSTEGR computes selected eigenvalues and, optionally, eigenvectors
! 43: *> of a real symmetric tridiagonal matrix T. Any such unreduced matrix has
! 44: *> a well defined set of pairwise different real eigenvalues, the corresponding
! 45: *> real eigenvectors are pairwise orthogonal.
! 46: *>
! 47: *> The spectrum may be computed either completely or partially by specifying
! 48: *> either an interval (VL,VU] or a range of indices IL:IU for the desired
! 49: *> eigenvalues.
! 50: *>
! 51: *> ZSTEGR is a compatability wrapper around the improved ZSTEMR routine.
! 52: *> See DSTEMR for further details.
! 53: *>
! 54: *> One important change is that the ABSTOL parameter no longer provides any
! 55: *> benefit and hence is no longer used.
! 56: *>
! 57: *> Note : ZSTEGR and ZSTEMR work only on machines which follow
! 58: *> IEEE-754 floating-point standard in their handling of infinities and
! 59: *> NaNs. Normal execution may create these exceptiona values and hence
! 60: *> may abort due to a floating point exception in environments which
! 61: *> do not conform to the IEEE-754 standard.
! 62: *> \endverbatim
! 63: *
! 64: * Arguments:
! 65: * ==========
! 66: *
! 67: *> \param[in] JOBZ
! 68: *> \verbatim
! 69: *> JOBZ is CHARACTER*1
! 70: *> = 'N': Compute eigenvalues only;
! 71: *> = 'V': Compute eigenvalues and eigenvectors.
! 72: *> \endverbatim
! 73: *>
! 74: *> \param[in] RANGE
! 75: *> \verbatim
! 76: *> RANGE is CHARACTER*1
! 77: *> = 'A': all eigenvalues will be found.
! 78: *> = 'V': all eigenvalues in the half-open interval (VL,VU]
! 79: *> will be found.
! 80: *> = 'I': the IL-th through IU-th eigenvalues will be found.
! 81: *> \endverbatim
! 82: *>
! 83: *> \param[in] N
! 84: *> \verbatim
! 85: *> N is INTEGER
! 86: *> The order of the matrix. N >= 0.
! 87: *> \endverbatim
! 88: *>
! 89: *> \param[in,out] D
! 90: *> \verbatim
! 91: *> D is DOUBLE PRECISION array, dimension (N)
! 92: *> On entry, the N diagonal elements of the tridiagonal matrix
! 93: *> T. On exit, D is overwritten.
! 94: *> \endverbatim
! 95: *>
! 96: *> \param[in,out] E
! 97: *> \verbatim
! 98: *> E is DOUBLE PRECISION array, dimension (N)
! 99: *> On entry, the (N-1) subdiagonal elements of the tridiagonal
! 100: *> matrix T in elements 1 to N-1 of E. E(N) need not be set on
! 101: *> input, but is used internally as workspace.
! 102: *> On exit, E is overwritten.
! 103: *> \endverbatim
! 104: *>
! 105: *> \param[in] VL
! 106: *> \verbatim
! 107: *> VL is DOUBLE PRECISION
! 108: *> \endverbatim
! 109: *>
! 110: *> \param[in] VU
! 111: *> \verbatim
! 112: *> VU is DOUBLE PRECISION
! 113: *>
! 114: *> If RANGE='V', the lower and upper bounds of the interval to
! 115: *> be searched for eigenvalues. VL < VU.
! 116: *> Not referenced if RANGE = 'A' or 'I'.
! 117: *> \endverbatim
! 118: *>
! 119: *> \param[in] IL
! 120: *> \verbatim
! 121: *> IL is INTEGER
! 122: *> \endverbatim
! 123: *>
! 124: *> \param[in] IU
! 125: *> \verbatim
! 126: *> IU is INTEGER
! 127: *>
! 128: *> If RANGE='I', the indices (in ascending order) of the
! 129: *> smallest and largest eigenvalues to be returned.
! 130: *> 1 <= IL <= IU <= N, if N > 0.
! 131: *> Not referenced if RANGE = 'A' or 'V'.
! 132: *> \endverbatim
! 133: *>
! 134: *> \param[in] ABSTOL
! 135: *> \verbatim
! 136: *> ABSTOL is DOUBLE PRECISION
! 137: *> Unused. Was the absolute error tolerance for the
! 138: *> eigenvalues/eigenvectors in previous versions.
! 139: *> \endverbatim
! 140: *>
! 141: *> \param[out] M
! 142: *> \verbatim
! 143: *> M is INTEGER
! 144: *> The total number of eigenvalues found. 0 <= M <= N.
! 145: *> If RANGE = 'A', M = N, and if RANGE = 'I', M = IU-IL+1.
! 146: *> \endverbatim
! 147: *>
! 148: *> \param[out] W
! 149: *> \verbatim
! 150: *> W is DOUBLE PRECISION array, dimension (N)
! 151: *> The first M elements contain the selected eigenvalues in
! 152: *> ascending order.
! 153: *> \endverbatim
! 154: *>
! 155: *> \param[out] Z
! 156: *> \verbatim
! 157: *> Z is COMPLEX*16 array, dimension (LDZ, max(1,M) )
! 158: *> If JOBZ = 'V', and if INFO = 0, then the first M columns of Z
! 159: *> contain the orthonormal eigenvectors of the matrix T
! 160: *> corresponding to the selected eigenvalues, with the i-th
! 161: *> column of Z holding the eigenvector associated with W(i).
! 162: *> If JOBZ = 'N', then Z is not referenced.
! 163: *> Note: the user must ensure that at least max(1,M) columns are
! 164: *> supplied in the array Z; if RANGE = 'V', the exact value of M
! 165: *> is not known in advance and an upper bound must be used.
! 166: *> Supplying N columns is always safe.
! 167: *> \endverbatim
! 168: *>
! 169: *> \param[in] LDZ
! 170: *> \verbatim
! 171: *> LDZ is INTEGER
! 172: *> The leading dimension of the array Z. LDZ >= 1, and if
! 173: *> JOBZ = 'V', then LDZ >= max(1,N).
! 174: *> \endverbatim
! 175: *>
! 176: *> \param[out] ISUPPZ
! 177: *> \verbatim
! 178: *> ISUPPZ is INTEGER ARRAY, dimension ( 2*max(1,M) )
! 179: *> The support of the eigenvectors in Z, i.e., the indices
! 180: *> indicating the nonzero elements in Z. The i-th computed eigenvector
! 181: *> is nonzero only in elements ISUPPZ( 2*i-1 ) through
! 182: *> ISUPPZ( 2*i ). This is relevant in the case when the matrix
! 183: *> is split. ISUPPZ is only accessed when JOBZ is 'V' and N > 0.
! 184: *> \endverbatim
! 185: *>
! 186: *> \param[out] WORK
! 187: *> \verbatim
! 188: *> WORK is DOUBLE PRECISION array, dimension (LWORK)
! 189: *> On exit, if INFO = 0, WORK(1) returns the optimal
! 190: *> (and minimal) LWORK.
! 191: *> \endverbatim
! 192: *>
! 193: *> \param[in] LWORK
! 194: *> \verbatim
! 195: *> LWORK is INTEGER
! 196: *> The dimension of the array WORK. LWORK >= max(1,18*N)
! 197: *> if JOBZ = 'V', and LWORK >= max(1,12*N) if JOBZ = 'N'.
! 198: *> If LWORK = -1, then a workspace query is assumed; the routine
! 199: *> only calculates the optimal size of the WORK array, returns
! 200: *> this value as the first entry of the WORK array, and no error
! 201: *> message related to LWORK is issued by XERBLA.
! 202: *> \endverbatim
! 203: *>
! 204: *> \param[out] IWORK
! 205: *> \verbatim
! 206: *> IWORK is INTEGER array, dimension (LIWORK)
! 207: *> On exit, if INFO = 0, IWORK(1) returns the optimal LIWORK.
! 208: *> \endverbatim
! 209: *>
! 210: *> \param[in] LIWORK
! 211: *> \verbatim
! 212: *> LIWORK is INTEGER
! 213: *> The dimension of the array IWORK. LIWORK >= max(1,10*N)
! 214: *> if the eigenvectors are desired, and LIWORK >= max(1,8*N)
! 215: *> if only the eigenvalues are to be computed.
! 216: *> If LIWORK = -1, then a workspace query is assumed; the
! 217: *> routine only calculates the optimal size of the IWORK array,
! 218: *> returns this value as the first entry of the IWORK array, and
! 219: *> no error message related to LIWORK is issued by XERBLA.
! 220: *> \endverbatim
! 221: *>
! 222: *> \param[out] INFO
! 223: *> \verbatim
! 224: *> INFO is INTEGER
! 225: *> On exit, INFO
! 226: *> = 0: successful exit
! 227: *> < 0: if INFO = -i, the i-th argument had an illegal value
! 228: *> > 0: if INFO = 1X, internal error in DLARRE,
! 229: *> if INFO = 2X, internal error in ZLARRV.
! 230: *> Here, the digit X = ABS( IINFO ) < 10, where IINFO is
! 231: *> the nonzero error code returned by DLARRE or
! 232: *> ZLARRV, respectively.
! 233: *> \endverbatim
! 234: *
! 235: * Authors:
! 236: * ========
! 237: *
! 238: *> \author Univ. of Tennessee
! 239: *> \author Univ. of California Berkeley
! 240: *> \author Univ. of Colorado Denver
! 241: *> \author NAG Ltd.
! 242: *
! 243: *> \date November 2011
! 244: *
! 245: *> \ingroup complex16OTHERcomputational
! 246: *
! 247: *> \par Contributors:
! 248: * ==================
! 249: *>
! 250: *> Inderjit Dhillon, IBM Almaden, USA \n
! 251: *> Osni Marques, LBNL/NERSC, USA \n
! 252: *> Christof Voemel, LBNL/NERSC, USA \n
! 253: *
! 254: * =====================================================================
1.1 bertrand 255: SUBROUTINE ZSTEGR( JOBZ, RANGE, N, D, E, VL, VU, IL, IU,
256: $ ABSTOL, M, W, Z, LDZ, ISUPPZ, WORK, LWORK, IWORK,
257: $ LIWORK, INFO )
258: *
1.8 ! bertrand 259: * -- LAPACK computational routine (version 3.4.0) --
1.1 bertrand 260: * -- LAPACK is a software package provided by Univ. of Tennessee, --
261: * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
1.8 ! bertrand 262: * November 2011
1.1 bertrand 263: *
264: * .. Scalar Arguments ..
265: CHARACTER JOBZ, RANGE
266: INTEGER IL, INFO, IU, LDZ, LIWORK, LWORK, M, N
267: DOUBLE PRECISION ABSTOL, VL, VU
268: * ..
269: * .. Array Arguments ..
270: INTEGER ISUPPZ( * ), IWORK( * )
271: DOUBLE PRECISION D( * ), E( * ), W( * ), WORK( * )
272: COMPLEX*16 Z( LDZ, * )
273: * ..
274: *
275: * =====================================================================
276: *
277: * .. Local Scalars ..
278: LOGICAL TRYRAC
279: * ..
280: * .. External Subroutines ..
281: EXTERNAL ZSTEMR
282: * ..
283: * .. Executable Statements ..
284: INFO = 0
285: TRYRAC = .FALSE.
286:
287: CALL ZSTEMR( JOBZ, RANGE, N, D, E, VL, VU, IL, IU,
288: $ M, W, Z, LDZ, N, ISUPPZ, TRYRAC, WORK, LWORK,
289: $ IWORK, LIWORK, INFO )
290: *
291: * End of ZSTEGR
292: *
293: END
CVSweb interface <joel.bertrand@systella.fr>