-
template<typename T>
void laeda(integer *n, integer *tlvls, integer *curlvl, integer *curpbm, integer *prmptr, integer *perm, integer *givptr, integer *givcol, float *givnum, float *q, integer *qptr, float *z, float *ztemp, integer *info)# LAEDA used by sstedc. Computes the Z vector determining the rank-one
modification of the diagonal matrix. Used when the original matrix is dense.
Purpose:
LAEDA computes the Z vector corresponding to the merge step in the CURLVLth step of the merge process with TLVLS steps for the CURPBMth problem.
- Parameters:
N – [in]
N is INTEGER
The dimension of the symmetric tridiagonal matrix. N >= 0.
TLVLS – [in]
TLVLS is INTEGER
The total number of merging levels in the overall divide and conquer tree.
CURLVL – [in]
CURLVL is INTEGER
The current level in the overall merge routine, 0 <= curlvl <= tlvls.
CURPBM – [in]
CURPBM is INTEGER
The current problem in the current level in the overall merge routine (counting from upper left to lower right).
PRMPTR – [in]
PRMPTR is INTEGER array, dimension (N lg N)
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 incidentally the size of the full, non-deflated problem.
PERM – [in]
PERM is INTEGER array, dimension (N lg N)
Contains the permutations (from deflation and sorting) to be applied to each eigenblock.
GIVPTR – [in]
GIVPTR is INTEGER array, dimension (N lg N)
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 – [in]
GIVCOL is INTEGER array, dimension (2, N lg N)
Each pair of numbers indicates a pair of columns to take place in a Givens rotation.
GIVNUM – [in]
GIVNUM is REAL array, dimension (2, N lg N)
Each number indicates the S value to be used in the corresponding Givens rotation.
Q – [in]
Q is REAL array, dimension (N**2)
Contains the square eigenblocks from previous levels, the starting positions for blocks are given by QPTR.
QPTR – [in]
QPTR is 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.
Z – [out]
Z is REAL array, dimension (N)
On output this vector contains the updating vector (the last row of the first sub-eigenvector matrix and the first row of the second sub-eigenvector matrix).
ZTEMP – [out] ZTEMP is REAL array, dimension (N)
INFO – [out]
INFO is INTEGER
= 0: successful exit.
< 0: if INFO = -i, the i-th argument had an illegal value.