slarrj.f.html
来自「famous linear algebra library (LAPACK) p」· HTML 代码 · 共 303 行 · 第 1/2 页
HTML
303 行
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>slarrj.f</title>
<meta name="generator" content="emacs 21.3.1; htmlfontify 0.20">
<style type="text/css"><!--
body { background: rgb(255, 255, 255); color: rgb(0, 0, 0); font-style: normal; font-weight: 500; font-stretch: normal; font-family: adobe-courier; font-size: 11pt; text-decoration: none; }
span.default { background: rgb(255, 255, 255); color: rgb(0, 0, 0); font-style: normal; font-weight: 500; font-stretch: normal; font-family: adobe-courier; font-size: 11pt; text-decoration: none; }
span.default a { background: rgb(255, 255, 255); color: rgb(0, 0, 0); font-style: normal; font-weight: 500; font-stretch: normal; font-family: adobe-courier; font-size: 11pt; text-decoration: underline; }
span.comment { color: rgb(178, 34, 34); background: rgb(255, 255, 255); font-style: normal; font-weight: 500; font-stretch: normal; font-family: adobe-courier; font-size: 11pt; text-decoration: none; }
span.comment a { color: rgb(178, 34, 34); background: rgb(255, 255, 255); font-style: normal; font-weight: 500; font-stretch: normal; font-family: adobe-courier; font-size: 11pt; text-decoration: underline; }
--></style>
</head>
<body>
<pre>
SUBROUTINE <a name="SLARRJ.1"></a><a href="slarrj.f.html#SLARRJ.1">SLARRJ</a>( N, D, E2, IFIRST, ILAST,
$ RTOL, OFFSET, W, WERR, WORK, IWORK,
$ PIVMIN, SPDIAM, INFO )
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> -- LAPACK auxiliary routine (version 3.1) --
</span><span class="comment">*</span><span class="comment"> Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
</span><span class="comment">*</span><span class="comment"> November 2006
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> .. Scalar Arguments ..
</span> INTEGER IFIRST, ILAST, INFO, N, OFFSET
REAL PIVMIN, RTOL, SPDIAM
<span class="comment">*</span><span class="comment"> ..
</span><span class="comment">*</span><span class="comment"> .. Array Arguments ..
</span> INTEGER IWORK( * )
REAL D( * ), E2( * ), W( * ),
$ WERR( * ), WORK( * )
<span class="comment">*</span><span class="comment"> ..
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> Purpose
</span><span class="comment">*</span><span class="comment"> =======
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> Given the initial eigenvalue approximations of T, <a name="SLARRJ.22"></a><a href="slarrj.f.html#SLARRJ.1">SLARRJ</a>
</span><span class="comment">*</span><span class="comment"> does bisection to refine the eigenvalues of T,
</span><span class="comment">*</span><span class="comment"> W( IFIRST-OFFSET ) through W( ILAST-OFFSET ), to more accuracy. Initial
</span><span class="comment">*</span><span class="comment"> guesses for these eigenvalues are input in W, the corresponding estimate
</span><span class="comment">*</span><span class="comment"> of the error in these guesses in WERR. During bisection, intervals
</span><span class="comment">*</span><span class="comment"> [left, right] are maintained by storing their mid-points and
</span><span class="comment">*</span><span class="comment"> semi-widths in the arrays W and WERR respectively.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> Arguments
</span><span class="comment">*</span><span class="comment"> =========
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> N (input) INTEGER
</span><span class="comment">*</span><span class="comment"> The order of the matrix.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> D (input) REAL array, dimension (N)
</span><span class="comment">*</span><span class="comment"> The N diagonal elements of T.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> E2 (input) REAL array, dimension (N-1)
</span><span class="comment">*</span><span class="comment"> The Squares of the (N-1) subdiagonal elements of T.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> IFIRST (input) INTEGER
</span><span class="comment">*</span><span class="comment"> The index of the first eigenvalue to be computed.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ILAST (input) INTEGER
</span><span class="comment">*</span><span class="comment"> The index of the last eigenvalue to be computed.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> RTOL (input) REAL
</span><span class="comment">*</span><span class="comment"> Tolerance for the convergence of the bisection intervals.
</span><span class="comment">*</span><span class="comment"> An interval [LEFT,RIGHT] has converged if
</span><span class="comment">*</span><span class="comment"> RIGHT-LEFT.LT.RTOL*MAX(|LEFT|,|RIGHT|).
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> OFFSET (input) INTEGER
</span><span class="comment">*</span><span class="comment"> Offset for the arrays W and WERR, i.e., the IFIRST-OFFSET
</span><span class="comment">*</span><span class="comment"> through ILAST-OFFSET elements of these arrays are to be used.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> W (input/output) REAL array, dimension (N)
</span><span class="comment">*</span><span class="comment"> On input, W( IFIRST-OFFSET ) through W( ILAST-OFFSET ) are
</span><span class="comment">*</span><span class="comment"> estimates of the eigenvalues of L D L^T indexed IFIRST through
</span><span class="comment">*</span><span class="comment"> ILAST.
</span><span class="comment">*</span><span class="comment"> On output, these estimates are refined.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> WERR (input/output) REAL array, dimension (N)
</span><span class="comment">*</span><span class="comment"> On input, WERR( IFIRST-OFFSET ) through WERR( ILAST-OFFSET ) are
</span><span class="comment">*</span><span class="comment"> the errors in the estimates of the corresponding elements in W.
</span><span class="comment">*</span><span class="comment"> On output, these errors are refined.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> WORK (workspace) REAL array, dimension (2*N)
</span><span class="comment">*</span><span class="comment"> Workspace.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> IWORK (workspace) INTEGER array, dimension (2*N)
</span><span class="comment">*</span><span class="comment"> Workspace.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> PIVMIN (input) DOUBLE PRECISION
</span><span class="comment">*</span><span class="comment"> The minimum pivot in the Sturm sequence for T.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> SPDIAM (input) DOUBLE PRECISION
</span><span class="comment">*</span><span class="comment"> The spectral diameter of T.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> INFO (output) INTEGER
</span><span class="comment">*</span><span class="comment"> Error flag.
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> Further Details
</span><span class="comment">*</span><span class="comment"> ===============
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> Based on contributions by
</span><span class="comment">*</span><span class="comment"> Beresford Parlett, University of California, Berkeley, USA
</span><span class="comment">*</span><span class="comment"> Jim Demmel, University of California, Berkeley, USA
</span><span class="comment">*</span><span class="comment"> Inderjit Dhillon, University of Texas, Austin, USA
</span><span class="comment">*</span><span class="comment"> Osni Marques, LBNL/NERSC, USA
</span><span class="comment">*</span><span class="comment"> Christof Voemel, University of California, Berkeley, USA
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> =====================================================================
</span><span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> .. Parameters ..
</span> REAL ZERO, ONE, TWO, HALF
PARAMETER ( ZERO = 0.0E0, ONE = 1.0E0, TWO = 2.0E0,
$ HALF = 0.5E0 )
INTEGER MAXITR
<span class="comment">*</span><span class="comment"> ..
</span><span class="comment">*</span><span class="comment"> .. Local Scalars ..
</span> INTEGER CNT, I, I1, I2, II, ITER, J, K, NEXT, NINT,
$ OLNINT, P, PREV, SAVI1
REAL DPLUS, FAC, LEFT, MID, RIGHT, S, TMP, WIDTH
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> ..
</span><span class="comment">*</span><span class="comment"> .. Intrinsic Functions ..
</span> INTRINSIC ABS, MAX
<span class="comment">*</span><span class="comment"> ..
</span><span class="comment">*</span><span class="comment"> .. Executable Statements ..
</span><span class="comment">*</span><span class="comment">
</span> INFO = 0
<span class="comment">*</span><span class="comment">
</span> MAXITR = INT( ( LOG( SPDIAM+PIVMIN )-LOG( PIVMIN ) ) /
$ LOG( TWO ) ) + 2
<span class="comment">*</span><span class="comment">
</span><span class="comment">*</span><span class="comment"> Initialize unconverged intervals in [ WORK(2*I-1), WORK(2*I) ].
</span><span class="comment">*</span><span class="comment"> The Sturm Count, Count( WORK(2*I-1) ) is arranged to be I-1, while
</span><span class="comment">*</span><span class="comment"> Count( WORK(2*I) ) is stored in IWORK( 2*I ). The integer IWORK( 2*I-1 )
</span><span class="comment">*</span><span class="comment"> for an unconverged interval is set to the index of the next unconverged
</span><span class="comment">*</span><span class="comment"> interval, and is -1 or 0 for a converged interval. Thus a linked
</span><span class="comment">*</span><span class="comment"> list of unconverged intervals is set up.
</span><span class="comment">*</span><span class="comment">
</span>
I1 = IFIRST
I2 = ILAST
<span class="comment">*</span><span class="comment"> The number of unconverged intervals
</span> NINT = 0
<span class="comment">*</span><span class="comment"> The last unconverged interval found
</span> PREV = 0
DO 75 I = I1, I2
K = 2*I
II = I - OFFSET
LEFT = W( II ) - WERR( II )
MID = W(II)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?