libflame  revision_anchor
Functions
FLA_Tridiag_UT_form_Q.c File Reference

(r)

Functions

FLA_Error FLA_Tridiag_UT_form_Q (FLA_Uplo uplo, FLA_Obj A, FLA_Obj T, FLA_Obj Q)
 

Function Documentation

◆ FLA_Tridiag_UT_form_Q()

FLA_Error FLA_Tridiag_UT_form_Q ( FLA_Uplo  uplo,
FLA_Obj  A,
FLA_Obj  T,
FLA_Obj  Q 
)
15 {
16  FLA_Error r_val = FLA_SUCCESS;
17  FLA_Obj ATL, ATR,
18  ABL, ABR;
19  FLA_Obj QTL, QTR,
20  QBL, QBR;
21  FLA_Obj TL, TR;
22 
23  if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
24  FLA_Tridiag_UT_form_Q_check( uplo, A, T, Q );
25 
26  // Adjust T.
27  FLA_Part_1x2( T, &TL, &TR, 1, FLA_RIGHT );
28 
29  if ( FLA_Obj_is( A, Q ) == FALSE )
30  {
31  FLA_Part_2x2( Q, &QTL, &QTR,
32  &QBL, &QBR, 1, 1, FLA_TL );
33 
34  FLA_Set( FLA_ONE, QTL );
35  FLA_Set( FLA_ZERO, QTR );
36  FLA_Set( FLA_ZERO, QBL );
37 
38  if ( uplo == FLA_LOWER_TRIANGULAR )
39  {
40  FLA_Part_2x2( A, &ATL, &ATR,
41  &ABL, &ABR, 1, 1, FLA_TR );
42  FLA_QR_UT_form_Q( ABL, TL, QBR );
43  }
44  else // ( uplo == FLA_UPPER_TRIANGULAR )
45  {
46  FLA_Check_error_code( FLA_NOT_YET_IMPLEMENTED );
47  }
48  }
49  else
50  {
51  // Shift the Householder vectors one row/column towards the diagonal.
52  FLA_Tridiag_UT_shift_U( uplo, A );
53 
54  FLA_Part_2x2( A, &ATL, &ATR,
55  &ABL, &ABR, 1, 1, FLA_TL );
56 
57  if ( uplo == FLA_LOWER_TRIANGULAR )
58  {
59  FLA_QR_UT_form_Q( ABR, TL, ABR );
60  }
61  else // ( uplo == FLA_UPPER_TRIANGULAR )
62  {
63  FLA_Check_error_code( FLA_NOT_YET_IMPLEMENTED );
64  }
65  }
66  return r_val;
67 }
FLA_Error FLA_QR_UT_form_Q(FLA_Obj A, FLA_Obj T, FLA_Obj Q)
Definition: FLA_QR_UT_form_Q.c:13
FLA_Error FLA_Tridiag_UT_shift_U(FLA_Uplo uplo, FLA_Obj A)
Definition: FLA_Tridiag_UT_shift_U.c:13
FLA_Error FLA_Tridiag_UT_form_Q_check(FLA_Uplo uplo, FLA_Obj A, FLA_Obj T, FLA_Obj Q)
Definition: FLA_Tridiag_UT_form_Q_check.c:13
FLA_Obj FLA_ZERO
Definition: FLA_Init.c:20
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
FLA_Error FLA_Part_2x2(FLA_Obj A, FLA_Obj *A11, FLA_Obj *A12, FLA_Obj *A21, FLA_Obj *A22, dim_t mb, dim_t nb, FLA_Quadrant quadrant)
Definition: FLA_View.c:17
FLA_Error FLA_Part_1x2(FLA_Obj A, FLA_Obj *A1, FLA_Obj *A2, dim_t nb, FLA_Side side)
Definition: FLA_View.c:110
unsigned int FLA_Check_error_level(void)
Definition: FLA_Check.c:18
FLA_Bool FLA_Obj_is(FLA_Obj A, FLA_Obj B)
Definition: FLA_Query.c:460
int FLA_Error
Definition: FLA_type_defs.h:47
FLA_Error FLA_Set(FLA_Obj alpha, FLA_Obj A)
Definition: FLA_Set.c:13
Definition: FLA_type_defs.h:159

References FLA_Check_error_level(), FLA_Obj_is(), FLA_ONE, FLA_Part_1x2(), FLA_Part_2x2(), FLA_QR_UT_form_Q(), FLA_Set(), FLA_Tridiag_UT_form_Q_check(), FLA_Tridiag_UT_shift_U(), and FLA_ZERO.

Referenced by FLA_Hevd_lv_unb_var1(), and FLA_Hevd_lv_unb_var2().