libflame  revision_anchor
Functions
FLA_Triangularize.c File Reference

(r)

Functions

FLA_Error FLA_Triangularize (FLA_Uplo uplo, FLA_Diag diag, FLA_Obj A)
 

Function Documentation

◆ FLA_Triangularize()

FLA_Error FLA_Triangularize ( FLA_Uplo  uplo,
FLA_Diag  diag,
FLA_Obj  A 
)
14 {
15  FLA_Datatype datatype;
16  int m_A, n_A;
17  int rs_A, cs_A;
18  uplo1_t blis_uplo;
19 
20  if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
21  FLA_Triangularize_check( uplo, diag, A );
22 
23  datatype = FLA_Obj_datatype( A );
24 
25  m_A = FLA_Obj_length( A );
26  n_A = FLA_Obj_width( A );
27  rs_A = FLA_Obj_row_stride( A );
28  cs_A = FLA_Obj_col_stride( A );
29 
30  // We have to toggle the uplo parameter because we will use it to specify
31  // which triangle to zero out.
32  if ( uplo == FLA_LOWER_TRIANGULAR ) uplo = FLA_UPPER_TRIANGULAR;
33  else uplo = FLA_LOWER_TRIANGULAR;
34 
35  FLA_Param_map_flame_to_blis_uplo( uplo, &blis_uplo );
36 
37  switch ( datatype ){
38 
39  case FLA_FLOAT:
40  {
41  float *buff_A = ( float * ) FLA_FLOAT_PTR( A );
42  float *buff_0 = ( float * ) FLA_FLOAT_PTR( FLA_ZERO );
43  float *buff_1 = ( float * ) FLA_FLOAT_PTR( FLA_ONE );
44 
45  bl1_ssetmr( blis_uplo,
46  m_A,
47  n_A,
48  buff_0,
49  buff_A, rs_A, cs_A );
50 
51  if ( diag == FLA_UNIT_DIAG )
52  bl1_ssetdiag( 0,
53  m_A,
54  n_A,
55  buff_1,
56  buff_A, rs_A, cs_A );
57  else if ( diag == FLA_ZERO_DIAG )
58  bl1_ssetdiag( 0,
59  m_A,
60  n_A,
61  buff_0,
62  buff_A, rs_A, cs_A );
63 
64  break;
65  }
66 
67  case FLA_DOUBLE:
68  {
69  double *buff_A = ( double * ) FLA_DOUBLE_PTR( A );
70  double *buff_0 = ( double * ) FLA_DOUBLE_PTR( FLA_ZERO );
71  double *buff_1 = ( double * ) FLA_DOUBLE_PTR( FLA_ONE );
72 
73  bl1_dsetmr( blis_uplo,
74  m_A,
75  n_A,
76  buff_0,
77  buff_A, rs_A, cs_A );
78 
79  if ( diag == FLA_UNIT_DIAG )
80  bl1_dsetdiag( 0,
81  m_A,
82  n_A,
83  buff_1,
84  buff_A, rs_A, cs_A );
85  else if ( diag == FLA_ZERO_DIAG )
86  bl1_dsetdiag( 0,
87  m_A,
88  n_A,
89  buff_0,
90  buff_A, rs_A, cs_A );
91 
92  break;
93  }
94 
95  case FLA_COMPLEX:
96  {
97  scomplex *buff_A = ( scomplex * ) FLA_COMPLEX_PTR( A );
98  scomplex *buff_0 = ( scomplex * ) FLA_COMPLEX_PTR( FLA_ZERO );
99  scomplex *buff_1 = ( scomplex * ) FLA_COMPLEX_PTR( FLA_ONE );
100 
101  bl1_csetmr( blis_uplo,
102  m_A,
103  n_A,
104  buff_0,
105  buff_A, rs_A, cs_A );
106 
107  if ( diag == FLA_UNIT_DIAG )
108  bl1_csetdiag( 0,
109  m_A,
110  n_A,
111  buff_1,
112  buff_A, rs_A, cs_A );
113  else if ( diag == FLA_ZERO_DIAG )
114  bl1_csetdiag( 0,
115  m_A,
116  n_A,
117  buff_0,
118  buff_A, rs_A, cs_A );
119 
120  break;
121  }
122 
123  case FLA_DOUBLE_COMPLEX:
124  {
125  dcomplex *buff_A = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( A );
126  dcomplex *buff_0 = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( FLA_ZERO );
127  dcomplex *buff_1 = ( dcomplex * ) FLA_DOUBLE_COMPLEX_PTR( FLA_ONE );
128 
129  bl1_zsetmr( blis_uplo,
130  m_A,
131  n_A,
132  buff_0,
133  buff_A, rs_A, cs_A );
134 
135  if ( diag == FLA_UNIT_DIAG )
136  bl1_zsetdiag( 0,
137  m_A,
138  n_A,
139  buff_1,
140  buff_A, rs_A, cs_A );
141  else if ( diag == FLA_ZERO_DIAG )
142  bl1_zsetdiag( 0,
143  m_A,
144  n_A,
145  buff_0,
146  buff_A, rs_A, cs_A );
147 
148  break;
149  }
150 
151  }
152 
153  return FLA_SUCCESS;
154 }
FLA_Error FLA_Triangularize_check(FLA_Uplo uplo, FLA_Diag diag, FLA_Obj A)
Definition: FLA_Triangularize_check.c:13
FLA_Obj FLA_ZERO
Definition: FLA_Init.c:20
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
dim_t FLA_Obj_width(FLA_Obj obj)
Definition: FLA_Query.c:123
dim_t FLA_Obj_row_stride(FLA_Obj obj)
Definition: FLA_Query.c:167
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116
dim_t FLA_Obj_col_stride(FLA_Obj obj)
Definition: FLA_Query.c:174
unsigned int FLA_Check_error_level(void)
Definition: FLA_Check.c:18
void FLA_Param_map_flame_to_blis_uplo(FLA_Uplo uplo, uplo1_t *blis_uplo)
Definition: FLA_Param.c:285
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
int FLA_Datatype
Definition: FLA_type_defs.h:49
void bl1_zsetdiag(int offset, int m, int n, dcomplex *sigma, dcomplex *a, int a_rs, int a_cs)
Definition: bl1_setdiag.c:98
void bl1_csetmr(uplo1_t uplo, int m, int n, scomplex *sigma, scomplex *a, int a_rs, int a_cs)
Definition: bl1_setmr.c:119
void bl1_csetdiag(int offset, int m, int n, scomplex *sigma, scomplex *a, int a_rs, int a_cs)
Definition: bl1_setdiag.c:76
void bl1_dsetdiag(int offset, int m, int n, double *sigma, double *a, int a_rs, int a_cs)
Definition: bl1_setdiag.c:55
void bl1_ssetdiag(int offset, int m, int n, float *sigma, float *a, int a_rs, int a_cs)
Definition: bl1_setdiag.c:34
void bl1_dsetmr(uplo1_t uplo, int m, int n, double *sigma, double *a, int a_rs, int a_cs)
Definition: bl1_setmr.c:66
void bl1_zsetmr(uplo1_t uplo, int m, int n, dcomplex *sigma, dcomplex *a, int a_rs, int a_cs)
Definition: bl1_setmr.c:172
void bl1_ssetmr(uplo1_t uplo, int m, int n, float *sigma, float *a, int a_rs, int a_cs)
Definition: bl1_setmr.c:13
uplo1_t
Definition: blis_type_defs.h:61
Definition: blis_type_defs.h:138
Definition: blis_type_defs.h:133

References bl1_csetdiag(), bl1_csetmr(), bl1_dsetdiag(), bl1_dsetmr(), bl1_ssetdiag(), bl1_ssetmr(), bl1_zsetdiag(), bl1_zsetmr(), FLA_Check_error_level(), FLA_Obj_col_stride(), FLA_Obj_datatype(), FLA_Obj_length(), FLA_Obj_row_stride(), FLA_Obj_width(), FLA_ONE, FLA_Param_map_flame_to_blis_uplo(), FLA_Triangularize_check(), and FLA_ZERO.

Referenced by FLA_Bidiag_UT_u_blf_var4(), FLA_Bidiag_UT_u_blk_var4(), FLA_Bidiag_UT_u_blk_var5(), 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_SA_LU_unb(), FLA_Tridiag_UT_l_blf_var3(), FLA_Tridiag_UT_l_blk_var3(), and FLASH_Triangularize().