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 + -
显示快捷键?