libflame
revision_anchor
|
Functions | |
FLA_Error | FLA_Apply_H2_UT_piv_row (FLA_Obj tau, FLA_Obj a1t, FLA_Obj u1t, FLA_Obj W, FLA_Obj u2, FLA_Obj A2, FLA_Obj U2, FLA_Obj w1t, FLA_Obj vt) |
FLA_Error FLA_Apply_H2_UT_piv_row | ( | FLA_Obj | tau, |
FLA_Obj | a1t, | ||
FLA_Obj | u1t, | ||
FLA_Obj | W, | ||
FLA_Obj | u2, | ||
FLA_Obj | A2, | ||
FLA_Obj | U2, | ||
FLA_Obj | w1t, | ||
FLA_Obj | vt | ||
) |
References FLA_Axpy_external(), FLA_Copy_external(), FLA_Gemvc_external(), FLA_Inv_scalc_external(), FLA_MINUS_ONE, FLA_Obj_min_dim(), FLA_Obj_width(), FLA_ONE, FLA_Part_1x2(), and FLA_ZERO.
Referenced by FLA_QR_UT_piv_unb_var2().
{ // a1t -= u1t W = 1 a1t -1 W^T u1t; FLA_Gemvc_external( FLA_TRANSPOSE, FLA_NO_CONJUGATE, FLA_MINUS_ONE, W, u1t, FLA_ONE, a1t ); // w1t := a1t; FLA_Copy_external( a1t, w1t ); // w1t += u2' A2 = 1 w1t + 1 A2^T conj(u2); FLA_Gemvc_external( FLA_TRANSPOSE, FLA_CONJUGATE, FLA_ONE, A2, u2, FLA_ONE, w1t ); if ( FLA_Obj_min_dim( U2 ) > 0 ) { FLA_Obj vtR; // Partition the workspace (a row vector matching the width of a1t) FLA_Part_1x2( vt, &vt, &vtR, FLA_Obj_width( U2 ), FLA_LEFT ); // vt := u2'U2 = 0 vt + 1 U2^T conj(u2); FLA_Gemvc_external( FLA_TRANSPOSE, FLA_CONJUGATE, FLA_ONE, U2, u2, FLA_ZERO, vt ); // w1t -= - vt W = 1 w1t -1 W^T vt; FLA_Gemvc_external( FLA_TRANSPOSE, FLA_NO_CONJUGATE, FLA_MINUS_ONE, W, vt, FLA_ONE, w1t ); } // w1t = w1t / tau; FLA_Inv_scalc_external( FLA_NO_CONJUGATE, tau, w1t ); // a1t = a1t - w1t; FLA_Axpy_external( FLA_MINUS_ONE, w1t, a1t ); return FLA_SUCCESS; }