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