PLASMA  2.8.0
PLASMA - Parallel Linear Algebra for Scalable Multi-core Architectures
int CORE_dtsmqr_corner ( int  m1,
int  n1,
int  m2,
int  n2,
int  m3,
int  n3,
int  k,
int  ib,
int  nb,
double *  A1,
int  lda1,
double *  A2,
int  lda2,
double *  A3,
int  lda3,
const double *  V,
int  ldv,
const double *  T,
int  ldt,
double *  WORK,
int  ldwork 
)

CORE_dtsmqr_corner: see CORE_dtsmqr

This kernel applies left and right transformations as depicted below: |I -VT'V'| * | A1 A2'| * |I - VTV'| | A2 A3 | where A1 and A3 are symmetric matrices. Only the lower part is referenced. This is an adhoc implementation, can be further optimized...

Parameters
[in]m1The number of rows of the tile A1. m1 >= 0.
[in]n1The number of columns of the tile A1. n1 >= 0.
[in]m2The number of rows of the tile A2. m2 >= 0.
[in]n2The number of columns of the tile A2. n2 >= 0.
[in]m3The number of rows of the tile A3. m3 >= 0.
[in]n3The number of columns of the tile A3. n3 >= 0.
[in]kThe number of elementary reflectors whose product defines the matrix Q.
[in]ibThe inner-blocking size. IB >= 0.
[in]nbThe blocking size. NB >= 0.
[in,out]A1On entry, the M1-by-N1 tile A1. On exit, A1 is overwritten by the application of Q.
[in]lda1The leading dimension of the array A1. lda1 >= max(1,M1).
[in,out]A2On entry, the M2-by-N2 tile A2. On exit, A2 is overwritten by the application of Q.
[in]lda2The leading dimension of the tile A2. lda2 >= max(1,M2).
[in,out]A3On entry, the m3-by-n3 tile A3.
[in]lda3The leading dimension of the tile A3. lda3 >= max(1,m3).
[in]VThe i-th row must contain the vector which defines the elementary reflector H(i), for i = 1,2,...,k, as returned by CORE_DTSQRT in the first k columns of its array argument V.
[in]ldvThe leading dimension of the array V. ldv >= max(1,K).
[in]TThe IB-by-N1 triangular factor T of the block reflector. T is upper triangular by block (economic storage); The rest of the array is not referenced.
[in]ldtThe leading dimension of the array T. ldt >= IB.
[out]WORKWorkspace array of size LDWORK-by-N1 if side == PlasmaLeft LDWORK-by-IB if side == PlasmaRight
[in]ldworkThe leading dimension of the array WORK. LDWORK >= max(1,IB) if side == PlasmaLeft LDWORK >= max(1,M1) if side == PlasmaRight
Returns
Return values
PLASMA_SUCCESSsuccessful exit
<0if -i, the i-th argument had an illegal value