1 /*
2
3 Copyright (C) 2014, The University of Texas at Austin
4
5 This file is part of libflame and is available under the 3-Clause
6 BSD license, which can be found in the LICENSE file at the top-level
7 directory, or at http://opensource.org/licenses/BSD-3-Clause
8
9 */
10
11 #include "FLAME.h"
12
FLA_LQ_UT_unb_var1(FLA_Obj A,FLA_Obj t)13 FLA_Error FLA_LQ_UT_unb_var1( FLA_Obj A, FLA_Obj t )
14 {
15 FLA_Obj ATL, ATR, A00, a01, A02,
16 ABL, ABR, a10t, alpha11, a12t,
17 A20, a21, A22;
18
19 FLA_Obj tLt, tRt, t0t, tau1, t2t;
20
21 FLA_Part_2x2( A, &ATL, &ATR,
22 &ABL, &ABR, 0, 0, FLA_TL );
23
24 FLA_Part_1x2( t, &tLt, &tRt, 0, FLA_LEFT );
25
26 while ( FLA_Obj_min_dim( ABR ) > 0 ){
27
28 FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, /**/ &a01, &A02,
29 /* ************* */ /* ************************** */
30 &a10t, /**/ &alpha11, &a12t,
31 ABL, /**/ ABR, &A20, /**/ &a21, &A22,
32 1, 1, FLA_BR );
33
34 FLA_Repart_1x2_to_1x3( tLt, /**/ tRt, &t0t, /**/ &tau1, &t2t,
35 1, FLA_RIGHT );
36
37 /*------------------------------------------------------------*/
38
39 // Compute tau11 and u12t from alpha11 and a12t such that tau11 and u12t
40 // determine a Householder transform H such that applying H from the
41 // right to the row vector consisting of alpha11 and a12t annihilates
42 // the entries in a12t (and updates alpha11).
43 FLA_Househ2_UT( FLA_RIGHT, alpha11, a12t,
44 tau1 );
45
46 // ( a21 A22 ) = ( a21 A22 ) H
47 //
48 // where H is formed from tau11 and u12t.
49 FLA_Apply_H2_UT( FLA_RIGHT, tau1, a12t, a21, A22 );
50
51 /*------------------------------------------------------------*/
52
53 FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, a01, /**/ A02,
54 a10t, alpha11, /**/ a12t,
55 /* ************** */ /* ************************ */
56 &ABL, /**/ &ABR, A20, a21, /**/ A22,
57 FLA_TL );
58
59 FLA_Cont_with_1x3_to_1x2( &tLt, /**/ &tRt, t0t, tau1, /**/ t2t,
60 FLA_LEFT );
61 }
62
63 return FLA_SUCCESS;
64 }
65
66