Loading...
Searching...
No Matches

## dlarrb()

subroutine dlarrb | ( | integer | n,
|  | double precision, dimension( * ) | d,
|  | double precision, dimension( * ) | lld,
|  | integer | ifirst,
|  | integer | ilast,
|  | double precision | rtol1,
|  | double precision | rtol2,
|  | integer | offset,
|  | double precision, dimension( * ) | w,
|  | double precision, dimension( * ) | wgap,
|  | double precision, dimension( * ) | werr,
|  | double precision, dimension( * ) | work,
|  | integer, dimension( * ) | iwork,
|  | double precision | pivmin,
|  | double precision | spdiam,
|  | integer | twist,
|  | integer | info )

DLARRB provides limited bisection to locate eigenvalues for more accuracy.

Download DLARRB + dependencies [TGZ] [ZIP] [TXT]

Purpose:

      !>
      !> Given the relatively robust representation(RRR) L D L^T, DLARRB
      !> does  bisection to refine the eigenvalues of L D L^T,
      !> W( IFIRST-OFFSET ) through W( ILAST-OFFSET ), to more accuracy. Initial
      !> guesses for these eigenvalues are input in W, the corresponding estimate
      !> of the error in these guesses and their gaps are input in WERR
      !> and WGAP, respectively. During bisection, intervals
      !> [left, right] are maintained by storing their mid-points and
      !> semi-widths in the arrays W and WERR respectively.
      !>

Parameters

  [in]

  N

      !>          N is INTEGER
      !>          The order of the matrix.
      !>

  [in]

  D

      !>          D is DOUBLE PRECISION array, dimension (N)
      !>          The N diagonal elements of the diagonal matrix D.
      !>

  [in]

  LLD

      !>          LLD is DOUBLE PRECISION array, dimension (N-1)
      !>          The (N-1) elements L(i)*L(i)*D(i).
      !>

  [in]

  IFIRST

      !>          IFIRST is INTEGER
      !>          The index of the first eigenvalue to be computed.
      !>

  [in]

  ILAST

      !>          ILAST is INTEGER
      !>          The index of the last eigenvalue to be computed.
      !>

  [in]

  RTOL1

      !>          RTOL1 is DOUBLE PRECISION
      !>

  [in]

  RTOL2

      !>          RTOL2 is DOUBLE PRECISION
      !>          Tolerance for the convergence of the bisection intervals.
      !>          An interval [LEFT,RIGHT] has converged if
      !>          RIGHT-LEFT < MAX( RTOL1*GAP, RTOL2*MAX(|LEFT|,|RIGHT|) )
      !>          where GAP is the (estimated) distance to the nearest
      !>          eigenvalue.
      !>

  [in]

  OFFSET

      !>          OFFSET is INTEGER
      !>          Offset for the arrays W, WGAP and WERR, i.e., the IFIRST-OFFSET
      !>          through ILAST-OFFSET elements of these arrays are to be used.
      !>

  [in,out]

  W

      !>          W is DOUBLE PRECISION array, dimension (N)
      !>          On input, W( IFIRST-OFFSET ) through W( ILAST-OFFSET ) are
      !>          estimates of the eigenvalues of L D L^T indexed IFIRST through
      !>          ILAST.
      !>          On output, these estimates are refined.
      !>

  [in,out]

  WGAP

      !>          WGAP is DOUBLE PRECISION array, dimension (N-1)
      !>          On input, the (estimated) gaps between consecutive
      !>          eigenvalues of L D L^T, i.e., WGAP(I-OFFSET) is the gap between
      !>          eigenvalues I and I+1. Note that if IFIRST = ILAST
      !>          then WGAP(IFIRST-OFFSET) must be set to ZERO.
      !>          On output, these gaps are refined.
      !>

  [in,out]

  WERR

      !>          WERR is DOUBLE PRECISION array, dimension (N)
      !>          On input, WERR( IFIRST-OFFSET ) through WERR( ILAST-OFFSET ) are
      !>          the errors in the estimates of the corresponding elements in W.
      !>          On output, these errors are refined.
      !>

  [out]

  WORK

      !>          WORK is DOUBLE PRECISION array, dimension (2*N)
      !>          Workspace.
      !>

  [out]

  IWORK

      !>          IWORK is INTEGER array, dimension (2*N)
      !>          Workspace.
      !>

  [in]

  PIVMIN

      !>          PIVMIN is DOUBLE PRECISION
      !>          The minimum pivot in the Sturm sequence.
      !>

  [in]

  SPDIAM

      !>          SPDIAM is DOUBLE PRECISION
      !>          The spectral diameter of the matrix.
      !>

  [in]

  TWIST

      !>          TWIST is INTEGER
      !>          The twist index for the twisted factorization that is used
      !>          for the negcount.
      !>          TWIST = N: Compute negcount from L D L^T - LAMBDA I = L+ D+ L+^T
      !>          TWIST = 1: Compute negcount from L D L^T - LAMBDA I = U- D- U-^T
      !>          TWIST = R: Compute negcount from L D L^T - LAMBDA I = N(r) D(r) N(r)
      !>

  [out]

  INFO

      !>          INFO is INTEGER
      !>          Error flag.
      !>

Author
  Univ. of Tennessee
  Univ. of California Berkeley
  Univ. of Colorado Denver
  NAG Ltd.

Contributors:
  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