# ?laeda

Used by ?stedc. Computes the Z vector determining the rank-one modification of the diagonal matrix. Used when the original matrix is dense.

## Syntax

call slaeda( n, tlvls, curlvl, curpbm, prmptr, perm, givptr, givcol, givnum, q, qptr, z, ztemp, info )

call dlaeda( n, tlvls, curlvl, curpbm, prmptr, perm, givptr, givcol, givnum, q, qptr, z, ztemp, info )

## Description

The routine ?laeda computes the Z vector corresponding to the merge step in the curlvl-th step of the merge process with tlvls steps for the curpbm-th problem.

## Input Parameters

n

  INTEGER. The dimension of the symmetric tridiagonal matrix (`n ≥ 0`).

tlvls

  INTEGER. The total number of merging levels in the overall divide and conquer tree.

curlvl

  INTEGER. The current level in the overall merge routine, `0 ≤ curlvl ≤ tlvls` .

curpbm

  INTEGER. The current problem in the current level in the overall merge routine (counting from upper left to lower right).

prmptr, perm, givptr

  INTEGER. Arrays, dimension (n lgn ) each.

  The array prmptr(*) contains a list of pointers which indicate where in perm a level's permutation is stored. `prmptr(i+1) - prmptr(i)` indicates the size of the permutation and also the size of the full, non-deflated problem.

  The array perm(*) contains the permutations (from deflation and sorting) to be applied to each eigenblock.

  The array givptr(*) contains a list of pointers which indicate where in givcol a level's Givens rotations are stored. `givptr(i+1) - givptr(i)` indicates the number of Givens rotations.

givcol

  INTEGER. Array, dimension (2, n lgn ).

  Each pair of numbers indicates a pair of columns to take place in a Givens rotation.

givnum

  REAL for slaeda

  DOUBLE PRECISION for dlaeda.

  Array, dimension (2, n lgn).

  Each number indicates the S value to be used in the corresponding Givens rotation.

q

  REAL for slaeda

  DOUBLE PRECISION for dlaeda.

  Array, dimension ( n2).

  Contains the square eigenblocks from previous levels, the starting positions for blocks are given by qptr.

qptr

  INTEGER. Array, dimension (n+2). Contains a list of pointers which indicate where in q an eigenblock is stored. `sqrt( qptr(i+1) - qptr(i)`) indicates the size of the block.

ztemp

  REAL for slaeda

  DOUBLE PRECISION for dlaeda.

  Workspace array, dimension (n).

## Output Parameters

z

  REAL for slaeda

  DOUBLE PRECISION for dlaeda.

  Array, dimension (n). Contains the updating vector (the last row of the first sub-eigenvector matrix and the first row of the second sub-eigenvector matrix).

info

  INTEGER.

  If `info = 0`, the execution is successful.

  If `info = -i`, the i-th parameter had an illegal value.

Parent topic: Auxiliary Routines