PLASMA
2.8.0
PLASMA - Parallel Linear Algebra for Scalable Multi-core Architectures
|
int CORE_zlarfx2ce | ( | PLASMA_enum | uplo, |
PLASMA_Complex64_t * | V, | ||
PLASMA_Complex64_t * | TAU, | ||
PLASMA_Complex64_t * | C1, | ||
PLASMA_Complex64_t * | C2, | ||
PLASMA_Complex64_t * | C3 | ||
) |
CORE_zlarfx2c applies a complex elementary reflector H to a diagonal corner C=[C1, C2, C3], from both the left and the right side. C = H * C * H. It is used in the case of general matrices, where it create a nnz at the NEW_NNZ position, then it eliminate it and update the reflector V and TAU. If PlasmaLower, a left apply is followed by a right apply. If PlasmaUpper, a right apply is followed by a left apply. H is represented in the form
This routine is a special code for a corner C diagonal block C1 NEW_NNZ C2 C3
H = I - tau * v * v'
where tau is a complex scalar and v is a complex vector.
If tau = 0, then H is taken to be the unit matrix
This version uses inline code if H has order < 11.
[in] | uplo | = PlasmaUpper: Upper triangle of A is stored; = PlasmaLower: Lower triangle of A is stored. |
[in,out] | V | On entry, the double complex V in the representation of H. On exit, the double complex V in the representation of H, updated by the elimination of the NEW_NNZ created by the left apply in case of PlasmaLower or the right apply in case of PlasmaUpper. |
[in,out] | TAU | On entry, the value tau in the representation of H. On exit, the value tau in the representation of H, updated by the elimination of the NEW_NNZ created by the left apply in case of PlasmaLower or the right apply in case of PlasmaUpper. |
[in,out] | C1 | On entry, the element C1. On exit, C1 is overwritten by the result H * C * H. |
[in,out] | C2 | On entry, the element C2. On exit, C2 is overwritten by the result H * C * H. |
[in,out] | C3 | On entry, the element C3. On exit, C3 is overwritten by the result H * C * H. |
PLASMA_SUCCESS | successful exit |
<0 | if -i, the i-th argument had an illegal value |