libflame  revision_anchor
Functions
FLA_Hess_UT.h File Reference

(r)

Go to the source code of this file.

Functions

FLA_Error FLA_Hess_UT (FLA_Obj A, FLA_Obj T)
 
FLA_Error FLA_Hess_UT_internal (FLA_Obj A, FLA_Obj T, fla_hessut_t *cntl)
 
FLA_Error FLA_Hess_UT_create_T (FLA_Obj A, FLA_Obj *T)
 
FLA_Error FLA_Hess_UT_recover_tau (FLA_Obj T, FLA_Obj t)
 

Function Documentation

◆ FLA_Hess_UT()

FLA_Error FLA_Hess_UT ( FLA_Obj  A,
FLA_Obj  T 
)
16 {
17  FLA_Error r_val;
18 
19  // Check parameters.
20  if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
21  FLA_Hess_UT_check( A, T );
22 
23  // Invoke FLA_Hess_UT_internal() with the standard control tree.
25 
26  return r_val;
27 }
fla_hessut_t * fla_hessut_cntl_leaf
Definition: FLA_Hess_UT_cntl_init.c:13
FLA_Error FLA_Hess_UT_internal(FLA_Obj A, FLA_Obj T, fla_hessut_t *cntl)
Definition: FLA_Hess_UT_internal.c:13
FLA_Error FLA_Hess_UT_check(FLA_Obj A, FLA_Obj T)
Definition: FLA_Hess_UT_check.c:13
unsigned int FLA_Check_error_level(void)
Definition: FLA_Check.c:18
int FLA_Error
Definition: FLA_type_defs.h:47

◆ FLA_Hess_UT_create_T()

FLA_Error FLA_Hess_UT_create_T ( FLA_Obj  A,
FLA_Obj T 
)
14 {
15  FLA_Datatype datatype;
16  dim_t b_alg, k;
17  dim_t rs_T, cs_T;
18 
19  // Query the datatype of A.
20  datatype = FLA_Obj_datatype( A );
21 
22  // Query the blocksize from the library.
23  b_alg = FLA_Query_blocksize( datatype, FLA_DIMENSION_MIN );
24 
25  // Scale the blocksize by a pre-set global constant.
26  b_alg = ( dim_t )( ( ( double ) b_alg ) * FLA_HESS_INNER_TO_OUTER_B_RATIO );
27 
28  // Query the minimum dimension of A.
29  k = FLA_Obj_min_dim( A );
30 
31  // Figure out whether T should be row-major or column-major.
32  if ( FLA_Obj_row_stride( A ) == 1 )
33  {
34  rs_T = 1;
35  cs_T = b_alg;
36  }
37  else // if ( FLA_Obj_col_stride( A ) == 1 )
38  {
39  rs_T = k;
40  cs_T = 1;
41  }
42 
43  // Create a b_alg x k matrix to hold the block Householder transforms that
44  // will be accumulated within the Hessenberg reduction algorithm.
45  FLA_Obj_create( datatype, b_alg, k, rs_T, cs_T, T );
46 
47  return FLA_SUCCESS;
48 }
FLA_Error FLA_Obj_create(FLA_Datatype datatype, dim_t m, dim_t n, dim_t rs, dim_t cs, FLA_Obj *obj)
Definition: FLA_Obj.c:55
dim_t FLA_Obj_row_stride(FLA_Obj obj)
Definition: FLA_Query.c:167
dim_t FLA_Query_blocksize(FLA_Datatype dt, FLA_Dimension dim)
Definition: FLA_Blocksize.c:161
dim_t FLA_Obj_min_dim(FLA_Obj obj)
Definition: FLA_Query.c:153
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
int FLA_Datatype
Definition: FLA_type_defs.h:49
unsigned long dim_t
Definition: FLA_type_defs.h:71

References FLA_Obj_create(), FLA_Obj_datatype(), FLA_Obj_min_dim(), FLA_Obj_row_stride(), and FLA_Query_blocksize().

◆ FLA_Hess_UT_internal()

FLA_Error FLA_Hess_UT_internal ( FLA_Obj  A,
FLA_Obj  T,
fla_hessut_t cntl 
)
14 {
15  FLA_Error r_val = FLA_SUCCESS;
16 
17  if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING )
18  FLA_Hess_UT_internal_check( A, T, cntl );
19 
20  {
21  if ( FLA_Cntl_variant( cntl ) == FLA_UNBLOCKED_VARIANT1 )
22  {
23  r_val = FLA_Hess_UT_unb_var1( A, T );
24  }
25  else if ( FLA_Cntl_variant( cntl ) == FLA_UNBLOCKED_VARIANT2 )
26  {
27  r_val = FLA_Hess_UT_unb_var2( A, T );
28  }
29  else if ( FLA_Cntl_variant( cntl ) == FLA_UNBLOCKED_VARIANT3 )
30  {
31  r_val = FLA_Hess_UT_unb_var3( A, T );
32  }
33  else if ( FLA_Cntl_variant( cntl ) == FLA_UNBLOCKED_VARIANT4 )
34  {
35  r_val = FLA_Hess_UT_unb_var4( A, T );
36  }
37  else if ( FLA_Cntl_variant( cntl ) == FLA_UNBLOCKED_VARIANT5 )
38  {
39  r_val = FLA_Hess_UT_unb_var5( A, T );
40  }
41  else if ( FLA_Cntl_variant( cntl ) == FLA_UNB_OPT_VARIANT1 )
42  {
43  r_val = FLA_Hess_UT_opt_var1( A, T );
44  }
45  else if ( FLA_Cntl_variant( cntl ) == FLA_UNB_OPT_VARIANT2 )
46  {
47  r_val = FLA_Hess_UT_opt_var2( A, T );
48  }
49  else if ( FLA_Cntl_variant( cntl ) == FLA_UNB_OPT_VARIANT3 )
50  {
51  r_val = FLA_Hess_UT_opt_var3( A, T );
52  }
53  else if ( FLA_Cntl_variant( cntl ) == FLA_UNB_OPT_VARIANT4 )
54  {
55  r_val = FLA_Hess_UT_opt_var4( A, T );
56  }
57  else if ( FLA_Cntl_variant( cntl ) == FLA_UNB_OPT_VARIANT5 )
58  {
59  r_val = FLA_Hess_UT_opt_var5( A, T );
60  }
61  else if ( FLA_Cntl_variant( cntl ) == FLA_BLOCKED_VARIANT1 )
62  {
63  r_val = FLA_Hess_UT_blk_var1( A, T );
64  }
65  else if ( FLA_Cntl_variant( cntl ) == FLA_BLOCKED_VARIANT2 )
66  {
67  r_val = FLA_Hess_UT_blk_var2( A, T );
68  }
69  else if ( FLA_Cntl_variant( cntl ) == FLA_BLOCKED_VARIANT3 )
70  {
71  r_val = FLA_Hess_UT_blk_var3( A, T );
72  }
73  else if ( FLA_Cntl_variant( cntl ) == FLA_BLOCKED_VARIANT4 )
74  {
75  r_val = FLA_Hess_UT_blk_var4( A, T );
76  }
77  else if ( FLA_Cntl_variant( cntl ) == FLA_BLOCKED_VARIANT5 )
78  {
79  r_val = FLA_Hess_UT_blk_var5( A, T );
80  }
81  else if ( FLA_Cntl_variant( cntl ) == FLA_BLK_FUS_VARIANT2 )
82  {
83  r_val = FLA_Hess_UT_blf_var2( A, T );
84  }
85  else if ( FLA_Cntl_variant( cntl ) == FLA_BLK_FUS_VARIANT3 )
86  {
87  r_val = FLA_Hess_UT_blf_var3( A, T );
88  }
89  else if ( FLA_Cntl_variant( cntl ) == FLA_BLK_FUS_VARIANT4 )
90  {
91  r_val = FLA_Hess_UT_blf_var4( A, T );
92  }
93  else
94  {
95  FLA_Check_error_code( FLA_NOT_YET_IMPLEMENTED );
96  }
97  }
98 
99  return r_val;
100 }
FLA_Error FLA_Hess_UT_blf_var2(FLA_Obj A, FLA_Obj T)
Definition: FLA_Hess_UT_blf_var2.c:13
FLA_Error FLA_Hess_UT_blf_var3(FLA_Obj A, FLA_Obj T)
Definition: FLA_Hess_UT_blf_var3.c:13
FLA_Error FLA_Hess_UT_blf_var4(FLA_Obj A, FLA_Obj T)
Definition: FLA_Hess_UT_blf_var4.c:13
FLA_Error FLA_Hess_UT_blk_var1(FLA_Obj A, FLA_Obj T)
Definition: FLA_Hess_UT_blk_var1.c:13
FLA_Error FLA_Hess_UT_blk_var2(FLA_Obj A, FLA_Obj T)
Definition: FLA_Hess_UT_blk_var2.c:13
FLA_Error FLA_Hess_UT_blk_var3(FLA_Obj A, FLA_Obj T)
Definition: FLA_Hess_UT_blk_var3.c:13
FLA_Error FLA_Hess_UT_blk_var4(FLA_Obj A, FLA_Obj T)
Definition: FLA_Hess_UT_blk_var4.c:13
FLA_Error FLA_Hess_UT_blk_var5(FLA_Obj A, FLA_Obj T)
Definition: FLA_Hess_UT_blk_var5.c:13
FLA_Error FLA_Hess_UT_internal_check(FLA_Obj A, FLA_Obj T, fla_hessut_t *cntl)
Definition: FLA_Hess_UT_internal_check.c:13
FLA_Error FLA_Hess_UT_opt_var1(FLA_Obj A, FLA_Obj T)
Definition: FLA_Hess_UT_opt_var1.c:13
FLA_Error FLA_Hess_UT_opt_var2(FLA_Obj A, FLA_Obj T)
Definition: FLA_Hess_UT_opt_var2.c:13
FLA_Error FLA_Hess_UT_opt_var3(FLA_Obj A, FLA_Obj T)
Definition: FLA_Hess_UT_opt_var3.c:13
FLA_Error FLA_Hess_UT_opt_var4(FLA_Obj A, FLA_Obj T)
Definition: FLA_Hess_UT_opt_var4.c:13
FLA_Error FLA_Hess_UT_opt_var5(FLA_Obj A, FLA_Obj T)
Definition: FLA_Hess_UT_opt_var5.c:13
FLA_Error FLA_Hess_UT_unb_var1(FLA_Obj A, FLA_Obj T)
Definition: FLA_Hess_UT_unb_var1.c:13
FLA_Error FLA_Hess_UT_unb_var2(FLA_Obj A, FLA_Obj T)
Definition: FLA_Hess_UT_unb_var2.c:13
FLA_Error FLA_Hess_UT_unb_var3(FLA_Obj A, FLA_Obj T)
Definition: FLA_Hess_UT_unb_var3.c:13
FLA_Error FLA_Hess_UT_unb_var4(FLA_Obj A, FLA_Obj T)
Definition: FLA_Hess_UT_unb_var4.c:13
FLA_Error FLA_Hess_UT_unb_var5(FLA_Obj A, FLA_Obj T)
Definition: FLA_Hess_UT_unb_var5.c:13

References FLA_Check_error_level(), FLA_Hess_UT_blf_var2(), FLA_Hess_UT_blf_var3(), FLA_Hess_UT_blf_var4(), FLA_Hess_UT_blk_var1(), FLA_Hess_UT_blk_var2(), FLA_Hess_UT_blk_var3(), FLA_Hess_UT_blk_var4(), FLA_Hess_UT_blk_var5(), FLA_Hess_UT_internal_check(), FLA_Hess_UT_opt_var1(), FLA_Hess_UT_opt_var2(), FLA_Hess_UT_opt_var3(), FLA_Hess_UT_opt_var4(), FLA_Hess_UT_opt_var5(), FLA_Hess_UT_unb_var1(), FLA_Hess_UT_unb_var2(), FLA_Hess_UT_unb_var3(), FLA_Hess_UT_unb_var4(), and FLA_Hess_UT_unb_var5().

Referenced by FLA_Hess_UT().

◆ FLA_Hess_UT_recover_tau()

FLA_Error FLA_Hess_UT_recover_tau ( FLA_Obj  T,
FLA_Obj  t 
)
16 {
17  FLA_Obj TL, TR, T0, T1, T2;
18 
19  FLA_Obj tT, t0,
20  tB, t1,
21  t2;
22 
23  dim_t b_alg, b;
24 
25  if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
27 
28  b_alg = FLA_Obj_length( T );
29 
30  FLA_Part_1x2( T, &TL, &TR, 0, FLA_LEFT );
31 
32  FLA_Part_2x1( t, &tT,
33  &tB, 0, FLA_TOP );
34 
35  while ( FLA_Obj_length( tT ) < FLA_Obj_length( t ) ){
36 
37  b = min( FLA_Obj_length( tB ), b_alg );
38 
39  FLA_Repart_1x2_to_1x3( TL, /**/ TR, &T0, /**/ &T1, &T2,
40  b, FLA_RIGHT );
41 
42  FLA_Repart_2x1_to_3x1( tT, &t0,
43  /* ** */ /* ** */
44  &t1,
45  tB, &t2, b, FLA_BOTTOM );
46 
47  /*------------------------------------------------------------*/
48 
50 
51  /*------------------------------------------------------------*/
52 
53  FLA_Cont_with_1x3_to_1x2( &TL, /**/ &TR, T0, T1, /**/ T2,
54  FLA_LEFT );
55 
56  FLA_Cont_with_3x1_to_2x1( &tT, t0,
57  t1,
58  /* ** */ /* ** */
59  &tB, t2, FLA_TOP );
60  }
61 
62  return FLA_SUCCESS;
63 }
FLA_Error FLA_Hess_UT_recover_tau_submatrix(FLA_Obj T, FLA_Obj t)
Definition: FLA_Hess_UT_recover_tau.c:66
FLA_Error FLA_Hess_UT_recover_tau_check(FLA_Obj T, FLA_Obj tau)
Definition: FLA_Hess_UT_recover_tau_check.c:13
FLA_Error FLA_Cont_with_3x1_to_2x1(FLA_Obj *AT, FLA_Obj A0, FLA_Obj A1, FLA_Obj *AB, FLA_Obj A2, FLA_Side side)
Definition: FLA_View.c:428
FLA_Error FLA_Repart_2x1_to_3x1(FLA_Obj AT, FLA_Obj *A0, FLA_Obj *A1, FLA_Obj AB, FLA_Obj *A2, dim_t mb, FLA_Side side)
Definition: FLA_View.c:226
FLA_Error FLA_Cont_with_1x3_to_1x2(FLA_Obj *AL, FLA_Obj *AR, FLA_Obj A0, FLA_Obj A1, FLA_Obj A2, FLA_Side side)
Definition: FLA_View.c:475
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
FLA_Error FLA_Part_2x1(FLA_Obj A, FLA_Obj *A1, FLA_Obj *A2, dim_t mb, FLA_Side side)
Definition: FLA_View.c:76
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116
FLA_Error FLA_Repart_1x2_to_1x3(FLA_Obj AL, FLA_Obj AR, FLA_Obj *A0, FLA_Obj *A1, FLA_Obj *A2, dim_t nb, FLA_Side side)
Definition: FLA_View.c:267
Definition: FLA_type_defs.h:159

References FLA_Check_error_level(), FLA_Cont_with_1x3_to_1x2(), FLA_Cont_with_3x1_to_2x1(), FLA_Hess_UT_recover_tau_check(), FLA_Hess_UT_recover_tau_submatrix(), FLA_Obj_length(), FLA_Part_1x2(), FLA_Part_2x1(), FLA_Repart_1x2_to_1x3(), and FLA_Repart_2x1_to_3x1().