libflame  revision_anchor
Functions | Variables
FLASH_Apply_Q_UT.c File Reference

(r)

Functions

FLA_Error FLASH_Apply_Q_UT (FLA_Side side, FLA_Trans trans, FLA_Direct direct, FLA_Store storev, FLA_Obj A, FLA_Obj T, FLA_Obj W, FLA_Obj B)
 

Variables

fla_apqut_tflash_apqut_cntl_blas
 
fla_apqut_tfla_apqut_cntl_leaf
 

Function Documentation

◆ FLASH_Apply_Q_UT()

FLA_Error FLASH_Apply_Q_UT ( FLA_Side  side,
FLA_Trans  trans,
FLA_Direct  direct,
FLA_Store  storev,
FLA_Obj  A,
FLA_Obj  T,
FLA_Obj  W,
FLA_Obj  B 
)

References FLA_Abort(), FLA_Apply_Q_UT_check(), FLA_Apply_Q_UT_internal(), FLA_Blocksize_set(), FLA_Check_error_level(), FLA_Print_message(), FLASH_Obj_scalar_length_tl(), FLASH_Obj_scalar_width_tl(), FLASH_Queue_begin(), and FLASH_Queue_end().

Referenced by FLASH_LQ_UT_solve(), and FLASH_QR_UT_solve().

17 {
18  FLA_Error r_val;
19  dim_t b_alg;
20 
21  // Check parameters.
22  if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
23  FLA_Apply_Q_UT_check( side, trans, direct, storev, A, T, W, B );
24 
25  // Inspect the length of TTL to get the blocksize used by the QR/LQ
26  // factorization, which will be our inner blocksize for Apply_Q_UT.
27  b_alg = FLASH_Obj_scalar_length_tl( T );
28 
29  // The traditional (non-incremental) Apply_Q_UT algorithm-by-blocks
30  // requires that the algorithmic blocksize be equal to the storage
31  // blocksize.
32  if ( b_alg != FLASH_Obj_scalar_width_tl( T ) )
33  {
34  FLA_Print_message( "FLASH_Apply_Q_UT() requires that b_alg == b_store",
35  __FILE__, __LINE__ );
36  FLA_Abort();
37  }
38 
39  // Adjust the blocksize of the control tree node for the flat subproblem.
40  if ( FLA_Cntl_blocksize( fla_apqut_cntl_leaf ) != NULL )
41  FLA_Blocksize_set( FLA_Cntl_blocksize( fla_apqut_cntl_leaf ),
42  b_alg, b_alg, b_alg, b_alg );
43 
44  // Begin a parallel region.
46 
47  // Invoke FLA_Apply_Q_UT_internal() with the standard control tree.
48  r_val = FLA_Apply_Q_UT_internal( side, trans, direct, storev, A, T, W, B,
50 
51  // End the parallel region.
53 
54  return r_val;
55 }
void FLASH_Queue_end(void)
Definition: FLASH_Queue.c:81
fla_apqut_t * flash_apqut_cntl_blas
Definition: FLASH_Apply_Q_UT_cntl_init.c:23
fla_apqut_t * fla_apqut_cntl_leaf
Definition: FLA_Apply_Q_UT_cntl_init.c:19
unsigned long dim_t
Definition: FLA_type_defs.h:71
int FLA_Error
Definition: FLA_type_defs.h:47
FLA_Error FLA_Apply_Q_UT_internal(FLA_Side side, FLA_Trans trans, FLA_Direct direct, FLA_Store storev, FLA_Obj A, FLA_Obj T, FLA_Obj W, FLA_Obj B, fla_apqut_t *cntl)
Definition: FLA_Apply_Q_UT_internal.c:17
void FLASH_Queue_begin(void)
Definition: FLASH_Queue.c:59
dim_t FLASH_Obj_scalar_width_tl(FLA_Obj H)
Definition: FLASH_View.c:737
void FLA_Abort(void)
Definition: FLA_Error.c:248
void FLA_Print_message(char *str, char *file, int line)
Definition: FLA_Error.c:234
unsigned int FLA_Check_error_level(void)
Definition: FLA_Check.c:18
void FLA_Blocksize_set(fla_blocksize_t *bp, dim_t b_s, dim_t b_d, dim_t b_c, dim_t b_z)
Definition: FLA_Blocksize.c:54
FLA_Error FLA_Apply_Q_UT_check(FLA_Side side, FLA_Trans trans, FLA_Direct direct, FLA_Store storev, FLA_Obj A, FLA_Obj T, FLA_Obj W, FLA_Obj B)
Definition: FLA_Apply_Q_UT_check.c:13
dim_t FLASH_Obj_scalar_length_tl(FLA_Obj H)
Definition: FLASH_View.c:723

Variable Documentation

◆ fla_apqut_cntl_leaf

fla_apqut_t* fla_apqut_cntl_leaf

◆ flash_apqut_cntl_blas

fla_apqut_t* flash_apqut_cntl_blas