Loading...
Searching...
No Matches

## slarra()

subroutine slarra | ( | integer | n,
|  | real, dimension( * ) | d,
|  | real, dimension( * ) | e,
|  | real, dimension( * ) | e2,
|  | real | spltol,
|  | real | tnrm,
|  | integer | nsplit,
|  | integer, dimension( * ) | isplit,
|  | integer | info )

SLARRA computes the splitting points with the specified threshold.

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

Purpose:

      !>
      !> Compute the splitting points with threshold SPLTOL.
      !> SLARRA sets any  off-diagonal elements to zero.
      !>

Parameters

  [in]

  N

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

  [in]

  D

      !>          D is REAL array, dimension (N)
      !>          On entry, the N diagonal elements of the tridiagonal
      !>          matrix T.
      !>

  [in,out]

  E

      !>          E is REAL array, dimension (N)
      !>          On entry, the first (N-1) entries contain the subdiagonal
      !>          elements of the tridiagonal matrix T; E(N) need not be set.
      !>          On exit, the entries E( ISPLIT( I ) ), 1 <= I <= NSPLIT,
      !>          are set to zero, the other entries of E are untouched.
      !>

  [in,out]

  E2

      !>          E2 is REAL array, dimension (N)
      !>          On entry, the first (N-1) entries contain the SQUARES of the
      !>          subdiagonal elements of the tridiagonal matrix T;
      !>          E2(N) need not be set.
      !>          On exit, the entries E2( ISPLIT( I ) ),
      !>          1 <= I <= NSPLIT, have been set to zero
      !>

  [in]

  SPLTOL

      !>          SPLTOL is REAL
      !>          The threshold for splitting. Two criteria can be used:
      !>          SPLTOL<0 : criterion based on absolute off-diagonal value
      !>          SPLTOL>0 : criterion that preserves relative accuracy
      !>

  [in]

  TNRM

      !>          TNRM is REAL
      !>          The norm of the matrix.
      !>

  [out]

  NSPLIT

      !>          NSPLIT is INTEGER
      !>          The number of blocks T splits into. 1 <= NSPLIT <= N.
      !>

  [out]

  ISPLIT

      !>          ISPLIT is INTEGER array, dimension (N)
      !>          The splitting points, at which T breaks up into blocks.
      !>          The first block consists of rows/columns 1 to ISPLIT(1),
      !>          the second of rows/columns ISPLIT(1)+1 through ISPLIT(2),
      !>          etc., and the NSPLIT-th consists of rows/columns
      !>          ISPLIT(NSPLIT-1)+1 through ISPLIT(NSPLIT)=N.
      !>

  [out]

  INFO

      !>          INFO is INTEGER
      !>          = 0:  successful exit
      !>

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