libflame revision_anchor
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
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
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
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
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().