Loading...
Searching...
No Matches

## slasq3()

subroutine slasq3 | ( | integer | i0,
|  | integer | n0,
|  | real, dimension( * ) | z,
|  | integer | pp,
|  | real | dmin,
|  | real | sigma,
|  | real | desig,
|  | real | qmax,
|  | integer | nfail,
|  | integer | iter,
|  | integer | ndiv,
|  | logical | ieee,
|  | integer | ttype,
|  | real | dmin1,
|  | real | dmin2,
|  | real | dn,
|  | real | dn1,
|  | real | dn2,
|  | real | g,
|  | real | tau )

SLASQ3 checks for deflation, computes a shift and calls dqds. Used by sbdsqr.

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

Purpose:

      !>
      !> SLASQ3 checks for deflation, computes a shift (TAU) and calls dqds.
      !> In case of failure it changes shifts, and tries again until output
      !> is positive.
      !>

Parameters

  [in]

  I0

      !>          I0 is INTEGER
      !>         First index.
      !>

  [in,out]

  N0

      !>          N0 is INTEGER
      !>         Last index.
      !>

  [in,out]

  Z

      !>          Z is REAL array, dimension ( 4*N0 )
      !>         Z holds the qd array.
      !>

  [in,out]

  PP

      !>          PP is INTEGER
      !>         PP=0 for ping, PP=1 for pong.
      !>         PP=2 indicates that flipping was applied to the Z array
      !>         and that the initial tests for deflation should not be
      !>         performed.
      !>

  [out]

  DMIN

      !>          DMIN is REAL
      !>         Minimum value of d.
      !>

  [out]

  SIGMA

      !>          SIGMA is REAL
      !>         Sum of shifts used in current segment.
      !>

  [in,out]

  DESIG

      !>          DESIG is REAL
      !>         Lower order part of SIGMA
      !>

  [in]

  QMAX

      !>          QMAX is REAL
      !>         Maximum value of q.
      !>

  [in,out]

  NFAIL

      !>          NFAIL is INTEGER
      !>         Increment NFAIL by 1 each time the shift was too big.
      !>

  [in,out]

  ITER

      !>          ITER is INTEGER
      !>         Increment ITER by 1 for each iteration.
      !>

  [in,out]

  NDIV

      !>          NDIV is INTEGER
      !>         Increment NDIV by 1 for each division.
      !>

  [in]

  IEEE

      !>          IEEE is LOGICAL
      !>         Flag for IEEE or non IEEE arithmetic (passed to SLASQ5).
      !>

  [in,out]

  TTYPE

      !>          TTYPE is INTEGER
      !>         Shift type.
      !>

  [in,out]

  DMIN1

      !>          DMIN1 is REAL
      !>

  [in,out]

  DMIN2

      !>          DMIN2 is REAL
      !>

  [in,out]

  DN

      !>          DN is REAL
      !>

  [in,out]

  DN1

      !>          DN1 is REAL
      !>

  [in,out]

  DN2

      !>          DN2 is REAL
      !>

  [in,out]

  G

      !>          G is REAL
      !>

  [in,out]

  TAU

      !>          TAU is REAL
      !>
      !>         These are passed as arguments in order to save their values
      !>         between calls to SLASQ3.
      !>

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