libflame  revision_anchor
Functions
FLA_LU_piv.h File Reference

(r)

Go to the source code of this file.

Functions

FLA_Error FLA_LU_piv_internal (FLA_Obj A, FLA_Obj p, fla_lu_t *cntl)
 
FLA_Error FLA_LU_piv_solve (FLA_Obj A, FLA_Obj p, FLA_Obj B, FLA_Obj X)
 
FLA_Error FLASH_LU_piv_solve (FLA_Obj A, FLA_Obj p, FLA_Obj B, FLA_Obj X)
 

Function Documentation

◆ FLA_LU_piv_internal()

FLA_Error FLA_LU_piv_internal ( FLA_Obj  A,
FLA_Obj  p,
fla_lu_t cntl 
)
16 {
17  FLA_Error r_val = FLA_SUCCESS;
18 
19  if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
20  {
21  FLA_Error e_val = FLA_Check_null_pointer( ( void* ) cntl );
22  FLA_Check_error_code( e_val );
23  }
24 
25  if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
26  FLA_Cntl_variant( cntl ) == FLA_SUBPROBLEM &&
28  {
29  // Enqueue
30  ENQUEUE_FLASH_LU_piv_macro( A, *FLASH_OBJ_PTR_AT( p ), cntl );
31  }
32  else
33  {
34 /*
35  if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER &&
36  FLA_Obj_elemtype( A ) == FLA_SCALAR &&
37  !FLASH_Queue_get_enabled( ) )
38  {
39  // Execute leaf
40  cntl = fla_lu_piv_cntl_leaf;
41  }
42 */
43  // Choose implementation.
44  if ( FLA_Cntl_variant( cntl ) == FLA_BLOCKED_EXTERN ||
45  FLA_Cntl_variant( cntl ) == FLA_SUBPROBLEM )
46  {
47  if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER )
48  {
49  // When performing an unblocked operation on a hierarhical
50  // object, we assume it's because we need to perform the
51  // the operation on a macro block.
52  r_val = FLA_LU_piv_macro_task( A, *FLASH_OBJ_PTR_AT( p ), cntl );
53  }
54  else
55  {
56  r_val = FLA_LU_piv_blk_ext( A, p );
57  }
58  }
59  else if ( FLA_Cntl_variant( cntl ) == FLA_UNBLOCKED_EXTERN )
60  {
61  if ( FLA_Cntl_matrix_type( cntl ) == FLA_HIER )
62  {
63  // When performing an unblocked operation on a hierarhical
64  // object, we assume it's because we need to perform the
65  // the operation on a macro block.
66  r_val = FLA_LU_piv_macro_task( A, *FLASH_OBJ_PTR_AT( p ), cntl );
67  }
68  else
69  {
70  r_val = FLA_LU_piv_unb_ext( A, p );
71  }
72  }
73 #ifdef FLA_ENABLE_NON_CRITICAL_CODE
74  else if ( FLA_Cntl_variant( cntl ) == FLA_UNBLOCKED_VARIANT3 )
75  {
76  r_val = FLA_LU_piv_unb_var3( A, p );
77  }
78  else if ( FLA_Cntl_variant( cntl ) == FLA_UNBLOCKED_VARIANT4 )
79  {
80  r_val = FLA_LU_piv_unb_var4( A, p );
81  }
82 #endif
83  else if ( FLA_Cntl_variant( cntl ) == FLA_UNBLOCKED_VARIANT5 )
84  {
85  r_val = FLA_LU_piv_unb_var5( A, p );
86  }
87 #ifdef FLA_ENABLE_NON_CRITICAL_CODE
88  else if ( FLA_Cntl_variant( cntl ) == FLA_UNB_OPT_VARIANT3 )
89  {
90  r_val = FLA_LU_piv_opt_var3( A, p );
91  }
92  else if ( FLA_Cntl_variant( cntl ) == FLA_UNB_OPT_VARIANT4 )
93  {
94  r_val = FLA_LU_piv_opt_var4( A, p );
95  }
96 #endif
97  else if ( FLA_Cntl_variant( cntl ) == FLA_UNB_OPT_VARIANT5 )
98  {
99  r_val = FLA_LU_piv_opt_var5( A, p );
100  }
101 #ifdef FLA_ENABLE_NON_CRITICAL_CODE
102  else if ( FLA_Cntl_variant( cntl ) == FLA_BLOCKED_VARIANT3 )
103  {
104  r_val = FLA_LU_piv_blk_var3( A, p, cntl );
105  }
106  else if ( FLA_Cntl_variant( cntl ) == FLA_BLOCKED_VARIANT4 )
107  {
108  r_val = FLA_LU_piv_blk_var4( A, p, cntl );
109  }
110 #endif
111  else if ( FLA_Cntl_variant( cntl ) == FLA_BLOCKED_VARIANT5 )
112  {
113  r_val = FLA_LU_piv_blk_var5( A, p, cntl );
114  }
115  else
116  {
117  FLA_Check_error_code( FLA_NOT_YET_IMPLEMENTED );
118  }
119  }
120 
121  return r_val;
122 }
FLA_Bool FLASH_Queue_get_enabled(void)
Definition: FLASH_Queue.c:171
FLA_Error FLA_LU_piv_blk_var3(FLA_Obj A, FLA_Obj p, fla_lu_t *cntl)
Definition: FLA_LU_piv_blk_var3.c:15
FLA_Error FLA_LU_piv_blk_var4(FLA_Obj A, FLA_Obj p, fla_lu_t *cntl)
Definition: FLA_LU_piv_blk_var4.c:15
FLA_Error FLA_LU_piv_blk_var5(FLA_Obj A, FLA_Obj p, fla_lu_t *cntl)
Definition: FLA_LU_piv_blk_var5.c:13
FLA_Error FLA_LU_piv_opt_var3(FLA_Obj A, FLA_Obj p)
Definition: FLA_LU_piv_opt_var3.c:15
FLA_Error FLA_LU_piv_opt_var4(FLA_Obj A, FLA_Obj p)
Definition: FLA_LU_piv_opt_var4.c:15
FLA_Error FLA_LU_piv_opt_var5(FLA_Obj A, FLA_Obj p)
Definition: FLA_LU_piv_opt_var5.c:13
FLA_Error FLA_LU_piv_unb_var3(FLA_Obj A, FLA_Obj p)
Definition: FLA_LU_piv_unb_var3.c:15
FLA_Error FLA_LU_piv_unb_var4(FLA_Obj A, FLA_Obj p)
Definition: FLA_LU_piv_unb_var4.c:15
FLA_Error FLA_LU_piv_unb_var5(FLA_Obj A, FLA_Obj p)
Definition: FLA_LU_piv_unb_var5.c:15
FLA_Error FLA_LU_piv_unb_ext(FLA_Obj A, FLA_Obj p)
Definition: FLA_LU_piv_unb_external.c:106
FLA_Error FLA_LU_piv_blk_ext(FLA_Obj A, FLA_Obj p)
Definition: FLA_LU_piv_blk_external.c:106
FLA_Error FLA_LU_piv_macro_task(FLA_Obj A, FLA_Obj p, fla_lu_t *cntl)
Definition: FLA_LU_piv_macro_task.c:13
FLA_Error FLA_Check_null_pointer(void *ptr)
Definition: FLA_Check.c:518
unsigned int FLA_Check_error_level(void)
Definition: FLA_Check.c:18
int FLA_Error
Definition: FLA_type_defs.h:47

References FLA_Check_error_level(), FLA_Check_null_pointer(), FLA_LU_piv_blk_ext(), FLA_LU_piv_blk_var3(), FLA_LU_piv_blk_var4(), FLA_LU_piv_blk_var5(), FLA_LU_piv_macro_task(), FLA_LU_piv_opt_var3(), FLA_LU_piv_opt_var4(), FLA_LU_piv_opt_var5(), FLA_LU_piv_unb_ext(), FLA_LU_piv_unb_var3(), FLA_LU_piv_unb_var4(), FLA_LU_piv_unb_var5(), and FLASH_Queue_get_enabled().

Referenced by FLA_LU_piv(), FLA_LU_piv_blk_var3(), FLA_LU_piv_blk_var4(), FLA_LU_piv_blk_var5(), FLA_LU_piv_task(), and FLASH_LU_piv().

◆ FLA_LU_piv_solve()

FLA_Error FLA_LU_piv_solve ( FLA_Obj  A,
FLA_Obj  p,
FLA_Obj  B,
FLA_Obj  X 
)
14 {
15  // Check parameters.
16  if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
17  FLA_LU_piv_solve_check( A, p, B, X );
18 
19  if ( FLA_Obj_is_identical( B, X ) == FALSE )
20  FLA_Copy_external( B, X );
21 
22  FLA_Apply_pivots( FLA_LEFT, FLA_NO_TRANSPOSE, p, X );
23 
24  FLA_Trsm_external( FLA_LEFT, FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE,
25  FLA_UNIT_DIAG, FLA_ONE, A, X );
26  FLA_Trsm_external( FLA_LEFT, FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE,
27  FLA_NONUNIT_DIAG, FLA_ONE, A, X );
28 
29  return FLA_SUCCESS;
30 }
FLA_Error FLA_LU_piv_solve_check(FLA_Obj A, FLA_Obj p, FLA_Obj B, FLA_Obj X)
Definition: FLA_LU_piv_solve_check.c:13
FLA_Error FLA_Copy_external(FLA_Obj A, FLA_Obj B)
Definition: FLA_Copy_external.c:13
FLA_Error FLA_Trsm_external(FLA_Side side, FLA_Uplo uplo, FLA_Trans trans, FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B)
Definition: FLA_Trsm_external.c:13
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
FLA_Error FLA_Apply_pivots(FLA_Side side, FLA_Trans trans, FLA_Obj p, FLA_Obj A)
Definition: FLA_Apply_pivots.c:15
FLA_Bool FLA_Obj_is_identical(FLA_Obj A, FLA_Obj B)
Definition: FLA_Query.c:470

References FLA_Apply_pivots(), FLA_Check_error_level(), FLA_Copy_external(), FLA_LU_piv_solve_check(), FLA_Obj_is_identical(), FLA_ONE, and FLA_Trsm_external().

◆ FLASH_LU_piv_solve()

FLA_Error FLASH_LU_piv_solve ( FLA_Obj  A,
FLA_Obj  p,
FLA_Obj  B,
FLA_Obj  X 
)
14 {
15  // Check parameters.
16  if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
17  FLA_LU_piv_solve_check( A, p, B, X );
18 
19  FLASH_Copy( B, X );
20 
21  FLASH_Apply_pivots( FLA_LEFT, FLA_NO_TRANSPOSE, p, X );
22 
23  FLASH_Trsm( FLA_LEFT, FLA_LOWER_TRIANGULAR, FLA_NO_TRANSPOSE,
24  FLA_UNIT_DIAG, FLA_ONE, A, X );
25  FLASH_Trsm( FLA_LEFT, FLA_UPPER_TRIANGULAR, FLA_NO_TRANSPOSE,
26  FLA_NONUNIT_DIAG, FLA_ONE, A, X );
27 
28  return FLA_SUCCESS;
29 }
FLA_Error FLASH_Copy(FLA_Obj A, FLA_Obj B)
Definition: FLASH_Copy.c:15
FLA_Error FLASH_Trsm(FLA_Side side, FLA_Uplo uplo, FLA_Trans trans, FLA_Diag diag, FLA_Obj alpha, FLA_Obj A, FLA_Obj B)
Definition: FLASH_Trsm.c:15
FLA_Error FLASH_Apply_pivots(FLA_Side side, FLA_Trans trans, FLA_Obj p, FLA_Obj A)
Definition: FLASH_Apply_pivots.c:15