libflame  revision_anchor
Functions
FLA_QR_UT_piv.h File Reference

(r)

Go to the source code of this file.

Functions

FLA_Error FLA_QR_UT_piv (FLA_Obj A, FLA_Obj T, FLA_Obj w, FLA_Obj p)
 
FLA_Error FLA_QR_UT_piv_internal (FLA_Obj A, FLA_Obj T, FLA_Obj w, FLA_Obj p, fla_qrut_t *cntl)
 
FLA_Error FLA_QR_UT_piv_colnorm (FLA_Obj alpha, FLA_Obj A, FLA_Obj b)
 
FLA_Error FLA_QR_UT_piv_check (FLA_Obj A, FLA_Obj T, FLA_Obj w, FLA_Obj p)
 
FLA_Error FLA_QR_UT_piv_internal_check (FLA_Obj A, FLA_Obj T, FLA_Obj w, FLA_Obj p, fla_qrut_t *cntl)
 
FLA_Error FLA_QR_UT_piv_colnorm_check (FLA_Obj alpha, FLA_Obj A, FLA_Obj b)
 

Function Documentation

◆ FLA_QR_UT_piv()

FLA_Error FLA_QR_UT_piv ( FLA_Obj  A,
FLA_Obj  T,
FLA_Obj  w,
FLA_Obj  p 
)
16 {
17  FLA_Error r_val;
18 
19  // Check parameters.
20  if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
21  FLA_QR_UT_piv_check( A, T, w, p );
22 
23  FLA_Set( FLA_ZERO, w );
25 
26  r_val = FLA_QR_UT_piv_internal( A, T, w, p, fla_qrut_piv_cntl_leaf );
27 
28  return r_val;
29 }
fla_qrut_t * fla_qrut_piv_cntl_leaf
Definition: FLA_QR_UT_cntl_init.c:19
FLA_Error FLA_QR_UT_piv_internal(FLA_Obj A, FLA_Obj T, FLA_Obj w, FLA_Obj p, fla_qrut_t *cntl)
Definition: FLA_QR_UT_piv_internal.c:13
FLA_Error FLA_QR_UT_piv_colnorm(FLA_Obj alpha, FLA_Obj A, FLA_Obj b)
Definition: FLA_QR_UT_piv_colnorm.c:13
FLA_Error FLA_QR_UT_piv_check(FLA_Obj A, FLA_Obj T, FLA_Obj w, FLA_Obj p)
Definition: FLA_QR_UT_piv_check.c:13
FLA_Obj FLA_ZERO
Definition: FLA_Init.c:20
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
unsigned int FLA_Check_error_level(void)
Definition: FLA_Check.c:18
int FLA_Error
Definition: FLA_type_defs.h:47
FLA_Error FLA_Set(FLA_Obj alpha, FLA_Obj A)
Definition: FLA_Set.c:13

◆ FLA_QR_UT_piv_check()

FLA_Error FLA_QR_UT_piv_check ( FLA_Obj  A,
FLA_Obj  T,
FLA_Obj  w,
FLA_Obj  p 
)
14 {
15  FLA_Error e_val;
16 
17  e_val = FLA_Check_floating_object( A );
18  FLA_Check_error_code( e_val );
19 
20  e_val = FLA_Check_nonconstant_object( A );
21  FLA_Check_error_code( e_val );
22 
24  FLA_Check_error_code( e_val );
25 
27  FLA_Check_error_code( e_val );
28 
30  FLA_Check_error_code( e_val );
31 
33  FLA_Check_error_code( e_val );
34 
35  e_val = FLA_Check_int_object( p );
36  FLA_Check_error_code( e_val );
37 
39  FLA_Check_error_code( e_val );
40 
41  return FLA_SUCCESS;
42 }
FLA_Error FLA_Check_object_width_equals(FLA_Obj A, dim_t n)
Definition: FLA_Check.c:1049
dim_t FLA_Obj_width(FLA_Obj obj)
Definition: FLA_Query.c:123
FLA_Error FLA_Check_identical_object_precision(FLA_Obj A, FLA_Obj B)
Definition: FLA_Check.c:298
FLA_Error FLA_Check_object_length_equals(FLA_Obj A, dim_t m)
Definition: FLA_Check.c:1039
FLA_Error FLA_Check_nonconstant_object(FLA_Obj A)
Definition: FLA_Check.c:954
FLA_Error FLA_Check_identical_object_datatype(FLA_Obj A, FLA_Obj B)
Definition: FLA_Check.c:967
FLA_Error FLA_Check_int_object(FLA_Obj A)
Definition: FLA_Check.c:245
FLA_Error FLA_Check_floating_object(FLA_Obj A)
Definition: FLA_Check.c:232

References FLA_Check_floating_object(), FLA_Check_identical_object_datatype(), FLA_Check_identical_object_precision(), FLA_Check_int_object(), FLA_Check_nonconstant_object(), FLA_Check_object_length_equals(), FLA_Check_object_width_equals(), and FLA_Obj_width().

Referenced by FLA_QR_UT_piv().

◆ FLA_QR_UT_piv_colnorm()

FLA_Error FLA_QR_UT_piv_colnorm ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  b 
)
14 {
15  FLA_Obj AL, AR, A0, a1, A2;
16  FLA_Obj bT, b0,
17  bB, beta1,
18  b2;
19 
20  FLA_Obj val2_a1, val2_a1_real;
21 
22  // A and b has matching dimensions.
23  if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
24  FLA_QR_UT_piv_colnorm_check( alpha, A, b );
25 
26  FLA_Obj_create( FLA_Obj_datatype( A ), 1, 1, 0, 0, &val2_a1 );
27  FLA_Obj_create( FLA_Obj_datatype( b ), 1, 1, 0, 0, &val2_a1_real );
28 
29  FLA_Part_1x2( A, &AL, &AR, 0, FLA_LEFT );
30 
31  FLA_Part_2x1( b, &bT,
32  &bB, 0, FLA_TOP );
33 
34  while ( FLA_Obj_width( AL ) < FLA_Obj_width( A ) ){
35 
36  FLA_Repart_1x2_to_1x3( AL, /**/ AR, &A0, /**/ &a1, &A2,
37  1, FLA_RIGHT );
38 
39  FLA_Repart_2x1_to_3x1( bT, &b0,
40  /* ** */ /* ** */
41  &beta1,
42  bB, &b2, 1, FLA_BOTTOM );
43 
44  /*------------------------------------------------------------*/
45  // Using dot product is a bit dangerous when a1 is close to
46  // under/over flow limits.
47  // The matrix should be properly scaled before using QR_UT_piv.
48  FLA_Dot( a1, a1, val2_a1 );
49  FLA_Obj_extract_real_part( val2_a1, val2_a1_real );
50  FLA_Axpy( alpha, val2_a1_real, beta1 );
51  /*------------------------------------------------------------*/
52  FLA_Cont_with_1x3_to_1x2( &AL, /**/ &AR, A0, a1, /**/ A2,
53  FLA_LEFT );
54 
55  FLA_Cont_with_3x1_to_2x1( &bT, b0,
56  beta1,
57  /* ** */ /* ** */
58  &bB, b2, FLA_TOP );
59  }
60 
61  FLA_Obj_free( &val2_a1 );
62  FLA_Obj_free( &val2_a1_real );
63 
64  return FLA_SUCCESS;
65 }
FLA_Error FLA_QR_UT_piv_colnorm_check(FLA_Obj alpha, FLA_Obj A, FLA_Obj b)
Definition: FLA_QR_UT_piv_colnorm_check.c:13
FLA_Error FLA_Dot(FLA_Obj x, FLA_Obj y, FLA_Obj rho)
Definition: FLA_Dot.c:13
FLA_Error FLA_Axpy(FLA_Obj alpha, FLA_Obj A, FLA_Obj B)
Definition: FLA_Axpy.c:15
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
void FLA_Obj_extract_real_part(FLA_Obj alpha, FLA_Obj beta)
Definition: FLA_Misc.c:65
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
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
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
FLA_Error FLA_Obj_free(FLA_Obj *obj)
Definition: FLA_Obj.c:588
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
Definition: FLA_type_defs.h:159

References FLA_Axpy(), FLA_Check_error_level(), FLA_Cont_with_1x3_to_1x2(), FLA_Cont_with_3x1_to_2x1(), FLA_Dot(), FLA_Obj_create(), FLA_Obj_datatype(), FLA_Obj_extract_real_part(), FLA_Obj_free(), FLA_Obj_width(), FLA_Part_1x2(), FLA_Part_2x1(), FLA_QR_UT_piv_colnorm_check(), FLA_Repart_1x2_to_1x3(), and FLA_Repart_2x1_to_3x1().

Referenced by FLA_QR_UT_piv(), FLA_QR_UT_piv_unb_var1(), and FLA_QR_UT_piv_unb_var2().

◆ FLA_QR_UT_piv_colnorm_check()

FLA_Error FLA_QR_UT_piv_colnorm_check ( FLA_Obj  alpha,
FLA_Obj  A,
FLA_Obj  b 
)
14 {
15  FLA_Error e_val;
16 
17  e_val = FLA_Check_if_scalar( alpha );
18  FLA_Check_error_code( e_val );
19 
20  e_val = FLA_Check_floating_object( A );
21  FLA_Check_error_code( e_val );
22 
23  e_val = FLA_Check_nonconstant_object( A );
24  FLA_Check_error_code( e_val );
25 
27  FLA_Check_error_code( e_val );
28 
30  FLA_Check_error_code( e_val );
31 
32  return FLA_SUCCESS;
33 }
FLA_Error FLA_Check_if_scalar(FLA_Obj A)
Definition: FLA_Check.c:373

References FLA_Check_floating_object(), FLA_Check_identical_object_precision(), FLA_Check_if_scalar(), FLA_Check_nonconstant_object(), FLA_Check_object_length_equals(), and FLA_Obj_width().

Referenced by FLA_QR_UT_piv_colnorm().

◆ FLA_QR_UT_piv_internal()

FLA_Error FLA_QR_UT_piv_internal ( FLA_Obj  A,
FLA_Obj  T,
FLA_Obj  w,
FLA_Obj  p,
fla_qrut_t cntl 
)
14 {
15  FLA_Error r_val = FLA_SUCCESS;
16 
17  if ( FLA_Check_error_level() == FLA_FULL_ERROR_CHECKING )
18  FLA_QR_UT_piv_internal_check( A, T, w, p, cntl );
19 
20  // Blocked blas2 oriented version
21  // ------------ Variant 1 set -------------
22  if ( FLA_Cntl_variant( cntl ) == FLA_UNBLOCKED_VARIANT1 )
23  {
24  r_val = FLA_QR_UT_piv_unb_var1( A, T, w, p );
25  }
26  else if ( FLA_Cntl_variant( cntl ) == FLA_UNB_OPT_VARIANT1 )
27  {
28  //r_val = FLA_QR_UT_piv_opt_var1( A, T );
29  FLA_Check_error_code( FLA_NOT_YET_IMPLEMENTED );
30  }
31  else if ( FLA_Cntl_variant( cntl ) == FLA_BLOCKED_VARIANT1 )
32  {
33  r_val = FLA_QR_UT_piv_blk_var1( A, T, w, p, cntl );
34  }
35  // ----------------------------------------
36  // ------------ Variant 2 set -------------
37  else if ( FLA_Cntl_variant( cntl ) == FLA_UNBLOCKED_VARIANT2 )
38  {
39  r_val = FLA_QR_UT_piv_unb_var2( A, T, w, p );
40  }
41 
42  else if ( FLA_Cntl_variant( cntl ) == FLA_UNB_OPT_VARIANT2 )
43  {
44  //r_val = FLA_QR_UT_opt_var2( A, T );
45  FLA_Check_error_code( FLA_NOT_YET_IMPLEMENTED );
46  }
47  else if ( FLA_Cntl_variant( cntl ) == FLA_BLOCKED_VARIANT2 )
48  {
49  r_val = FLA_QR_UT_piv_blk_var2( A, T, w, p, cntl );
50  }
51  // ----------------------------------------
52  else
53  {
54  FLA_Check_error_code( FLA_NOT_YET_IMPLEMENTED );
55  }
56 
57  return r_val;
58 }
FLA_Error FLA_QR_UT_piv_blk_var1(FLA_Obj A, FLA_Obj T, FLA_Obj w, FLA_Obj p, fla_qrut_t *cntl)
Definition: FLA_QR_UT_piv_blk_var1.c:13
FLA_Error FLA_QR_UT_piv_blk_var2(FLA_Obj A, FLA_Obj T, FLA_Obj w, FLA_Obj p, fla_qrut_t *cntl)
Definition: FLA_QR_UT_piv_blk_var2.c:13
FLA_Error FLA_QR_UT_piv_internal_check(FLA_Obj A, FLA_Obj T, FLA_Obj w, FLA_Obj p, fla_qrut_t *cntl)
Definition: FLA_QR_UT_piv_internal_check.c:13
FLA_Error FLA_QR_UT_piv_unb_var1(FLA_Obj A, FLA_Obj T, FLA_Obj w, FLA_Obj p)
Definition: FLA_QR_UT_piv_unb_var1.c:14
FLA_Error FLA_QR_UT_piv_unb_var2(FLA_Obj A, FLA_Obj T, FLA_Obj w, FLA_Obj p)
Definition: FLA_QR_UT_piv_unb_var2.c:13

References FLA_Check_error_level(), FLA_QR_UT_piv_blk_var1(), FLA_QR_UT_piv_blk_var2(), FLA_QR_UT_piv_internal_check(), FLA_QR_UT_piv_unb_var1(), and FLA_QR_UT_piv_unb_var2().

Referenced by FLA_QR_UT_piv(), FLA_QR_UT_piv_blk_var1(), and FLA_QR_UT_piv_blk_var2().

◆ FLA_QR_UT_piv_internal_check()

FLA_Error FLA_QR_UT_piv_internal_check ( FLA_Obj  A,
FLA_Obj  T,
FLA_Obj  w,
FLA_Obj  p,
fla_qrut_t cntl 
)
14 {
15  FLA_Error e_val;
16 
17  // Abort if the control structure is NULL.
18  e_val = FLA_Check_null_pointer( ( void* ) cntl );
19  FLA_Check_error_code( e_val );
20 
21  // Verify that the object element types are identical.
23  FLA_Check_error_code( e_val );
24 
25  return FLA_SUCCESS;
26 }
FLA_Error FLA_Check_null_pointer(void *ptr)
Definition: FLA_Check.c:518
FLA_Error FLA_Check_identical_object_elemtype(FLA_Obj A, FLA_Obj B)
Definition: FLA_Check.c:987

References FLA_Check_identical_object_elemtype(), and FLA_Check_null_pointer().

Referenced by FLA_QR_UT_piv_internal().