libflame  revision_anchor
Functions
FLA_Bidiag_UT_extract_diagonals.c File Reference

(r)

Functions

FLA_Error FLA_Bidiag_UT_extract_diagonals (FLA_Obj A, FLA_Obj d, FLA_Obj e)
 
FLA_Error FLA_Bidiag_UT_u_extract_diagonals (FLA_Obj A, FLA_Obj d, FLA_Obj e)
 
FLA_Error FLA_Bidiag_UT_l_extract_diagonals (FLA_Obj A, FLA_Obj d, FLA_Obj e)
 

Function Documentation

◆ FLA_Bidiag_UT_extract_diagonals()

FLA_Error FLA_Bidiag_UT_extract_diagonals ( FLA_Obj  A,
FLA_Obj  d,
FLA_Obj  e 
)

References FLA_Bidiag_UT_extract_diagonals_check(), FLA_Bidiag_UT_l_extract_diagonals(), FLA_Bidiag_UT_u_extract_diagonals(), FLA_Check_error_level(), FLA_Obj_length(), and FLA_Obj_width().

14 {
15  FLA_Error r_val = FLA_SUCCESS;
16 
17  if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
19 
20  if ( FLA_Obj_length( A ) >= FLA_Obj_width( A ) )
21  r_val = FLA_Bidiag_UT_u_extract_diagonals( A, d, e );
22  else
23  r_val = FLA_Bidiag_UT_l_extract_diagonals( A, d, e );
24 
25  return r_val;
26 }
int FLA_Error
Definition: FLA_type_defs.h:47
FLA_Error FLA_Bidiag_UT_extract_diagonals_check(FLA_Obj A, FLA_Obj d, FLA_Obj e)
Definition: FLA_Bidiag_UT_extract_diagonals_check.c:13
dim_t FLA_Obj_width(FLA_Obj obj)
Definition: FLA_Query.c:123
FLA_Error FLA_Bidiag_UT_u_extract_diagonals(FLA_Obj A, FLA_Obj d, FLA_Obj e)
Definition: FLA_Bidiag_UT_extract_diagonals.c:30
unsigned int FLA_Check_error_level(void)
Definition: FLA_Check.c:18
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116
FLA_Error FLA_Bidiag_UT_l_extract_diagonals(FLA_Obj A, FLA_Obj d, FLA_Obj e)
Definition: FLA_Bidiag_UT_extract_diagonals.c:165

◆ FLA_Bidiag_UT_l_extract_diagonals()

FLA_Error FLA_Bidiag_UT_l_extract_diagonals ( FLA_Obj  A,
FLA_Obj  d,
FLA_Obj  e 
)

References FLA_Obj_col_stride(), FLA_Obj_datatype(), FLA_Obj_length(), FLA_Obj_row_stride(), FLA_Obj_vector_inc(), and i.

Referenced by FLA_Bidiag_UT_extract_diagonals(), and FLA_Tridiag_UT_extract_diagonals().

166 {
167  FLA_Datatype datatype;
168  int m_A;
169  int rs_A, cs_A;
170  int inc_d;
171  int inc_e;
172  int i;
173 
174  datatype = FLA_Obj_datatype( A );
175 
176  m_A = FLA_Obj_length( A );
177 
178  rs_A = FLA_Obj_row_stride( A );
179  cs_A = FLA_Obj_col_stride( A );
180 
181  inc_d = FLA_Obj_vector_inc( d );
182 
183  if ( m_A != 1 )
184  inc_e = FLA_Obj_vector_inc( e );
185  else
186  inc_e = 0;
187 
188  switch ( datatype )
189  {
190  case FLA_FLOAT:
191  {
192  float* buff_A = FLA_FLOAT_PTR( A );
193  float* buff_d = FLA_FLOAT_PTR( d );
194  float* buff_e = ( m_A != 1 ? FLA_FLOAT_PTR( e ) : NULL );
195 
196  for ( i = 0; i < m_A; ++i )
197  {
198  float* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
199  float* a21_t = buff_A + (i )*cs_A + (i+1)*rs_A;
200  float* delta1 = buff_d + (i )*inc_d;
201  float* epsilon1 = buff_e + (i )*inc_e;
202 
203  int m_ahead = m_A - i - 1;
204 
205  // delta1 = alpha11;
206  *delta1 = *alpha11;
207 
208  // epsilon1 = a21_t;
209  if ( m_ahead > 0 )
210  *epsilon1 = *a21_t;
211  }
212 
213  break;
214  }
215 
216  case FLA_DOUBLE:
217  {
218  double* buff_A = FLA_DOUBLE_PTR( A );
219  double* buff_d = FLA_DOUBLE_PTR( d );
220  double* buff_e = ( m_A != 1 ? FLA_DOUBLE_PTR( e ) : NULL );
221 
222  for ( i = 0; i < m_A; ++i )
223  {
224  double* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
225  double* a21_t = buff_A + (i )*cs_A + (i+1)*rs_A;
226  double* delta1 = buff_d + (i )*inc_d;
227  double* epsilon1 = buff_e + (i )*inc_e;
228 
229  int m_ahead = m_A - i - 1;
230 
231  // delta1 = alpha11;
232  *delta1 = *alpha11;
233 
234  // epsilon1 = a21_t;
235  if ( m_ahead > 0 )
236  *epsilon1 = *a21_t;
237  }
238 
239  break;
240  }
241 
242  case FLA_COMPLEX:
243  {
244  scomplex* buff_A = FLA_COMPLEX_PTR( A );
245  scomplex* buff_d = FLA_COMPLEX_PTR( d );
246  scomplex* buff_e = ( m_A != 1 ? FLA_COMPLEX_PTR( e ) : NULL );
247 
248  for ( i = 0; i < m_A; ++i )
249  {
250  scomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
251  scomplex* a21_t = buff_A + (i )*cs_A + (i+1)*rs_A;
252  scomplex* delta1 = buff_d + (i )*inc_d;
253  scomplex* epsilon1 = buff_e + (i )*inc_e;
254 
255  int m_ahead = m_A - i - 1;
256 
257  // delta1 = alpha11;
258  *delta1 = *alpha11;
259 
260  // epsilon1 = a21_t;
261  if ( m_ahead > 0 )
262  *epsilon1 = *a21_t;
263  }
264 
265  break;
266  }
267 
268  case FLA_DOUBLE_COMPLEX:
269  {
270  dcomplex* buff_A = FLA_DOUBLE_COMPLEX_PTR( A );
271  dcomplex* buff_d = FLA_DOUBLE_COMPLEX_PTR( d );
272  dcomplex* buff_e = ( m_A != 1 ? FLA_DOUBLE_COMPLEX_PTR( e ) : NULL );
273 
274  for ( i = 0; i < m_A; ++i )
275  {
276  dcomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
277  dcomplex* a21_t = buff_A + (i )*cs_A + (i+1)*rs_A;
278  dcomplex* delta1 = buff_d + (i )*inc_d;
279  dcomplex* epsilon1 = buff_e + (i )*inc_e;
280 
281  int m_ahead = m_A - i - 1;
282 
283  // delta1 = alpha11;
284  *delta1 = *alpha11;
285 
286  // epsilon1 = a21_t;
287  if ( m_ahead > 0 )
288  *epsilon1 = *a21_t;
289  }
290 
291  break;
292  }
293  }
294 
295  return FLA_SUCCESS;
296 }
dim_t FLA_Obj_row_stride(FLA_Obj obj)
Definition: FLA_Query.c:167
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
Definition: blis_type_defs.h:132
int FLA_Datatype
Definition: FLA_type_defs.h:49
dim_t FLA_Obj_col_stride(FLA_Obj obj)
Definition: FLA_Query.c:174
int i
Definition: bl1_axmyv2.c:145
dim_t FLA_Obj_vector_inc(FLA_Obj obj)
Definition: FLA_Query.c:145
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116
Definition: blis_type_defs.h:137

◆ FLA_Bidiag_UT_u_extract_diagonals()

FLA_Error FLA_Bidiag_UT_u_extract_diagonals ( FLA_Obj  A,
FLA_Obj  d,
FLA_Obj  e 
)

References FLA_Obj_col_stride(), FLA_Obj_datatype(), FLA_Obj_row_stride(), FLA_Obj_vector_inc(), FLA_Obj_width(), and i.

Referenced by FLA_Bidiag_UT_extract_diagonals(), and FLA_Tridiag_UT_extract_diagonals().

31 {
32  FLA_Datatype datatype;
33  int n_A;
34  int rs_A, cs_A;
35  int inc_d;
36  int inc_e;
37  int i;
38 
39  datatype = FLA_Obj_datatype( A );
40 
41  n_A = FLA_Obj_width( A );
42 
43  rs_A = FLA_Obj_row_stride( A );
44  cs_A = FLA_Obj_col_stride( A );
45 
46  inc_d = FLA_Obj_vector_inc( d );
47 
48  if ( n_A != 1 )
49  inc_e = FLA_Obj_vector_inc( e );
50  else
51  inc_e = 0;
52 
53  switch ( datatype )
54  {
55  case FLA_FLOAT:
56  {
57  float* buff_A = FLA_FLOAT_PTR( A );
58  float* buff_d = FLA_FLOAT_PTR( d );
59  float* buff_e = ( n_A != 1 ? FLA_FLOAT_PTR( e ) : NULL );
60 
61  for ( i = 0; i < n_A; ++i )
62  {
63  float* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
64  float* a12t_l = buff_A + (i+1)*cs_A + (i )*rs_A;
65  float* delta1 = buff_d + (i )*inc_d;
66  float* epsilon1 = buff_e + (i )*inc_e;
67 
68  int n_ahead = n_A - i - 1;
69 
70  // delta1 = alpha11;
71  *delta1 = *alpha11;
72 
73  // epsilon1 = a12t_l;
74  if ( n_ahead > 0 )
75  *epsilon1 = *a12t_l;
76  }
77 
78  break;
79  }
80 
81  case FLA_DOUBLE:
82  {
83  double* buff_A = FLA_DOUBLE_PTR( A );
84  double* buff_d = FLA_DOUBLE_PTR( d );
85  double* buff_e = ( n_A != 1 ? FLA_DOUBLE_PTR( e ) : NULL );
86 
87  for ( i = 0; i < n_A; ++i )
88  {
89  double* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
90  double* a12t_l = buff_A + (i+1)*cs_A + (i )*rs_A;
91  double* delta1 = buff_d + (i )*inc_d;
92  double* epsilon1 = buff_e + (i )*inc_e;
93 
94  int n_ahead = n_A - i - 1;
95 
96  // delta1 = alpha11;
97  *delta1 = *alpha11;
98 
99  // epsilon1 = a12t_l;
100  if ( n_ahead > 0 )
101  *epsilon1 = *a12t_l;
102  }
103 
104  break;
105  }
106 
107  case FLA_COMPLEX:
108  {
109  scomplex* buff_A = FLA_COMPLEX_PTR( A );
110  scomplex* buff_d = FLA_COMPLEX_PTR( d );
111  scomplex* buff_e = ( n_A != 1 ? FLA_COMPLEX_PTR( e ) : NULL );
112 
113  for ( i = 0; i < n_A; ++i )
114  {
115  scomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
116  scomplex* a12t_l = buff_A + (i+1)*cs_A + (i )*rs_A;
117  scomplex* delta1 = buff_d + (i )*inc_d;
118  scomplex* epsilon1 = buff_e + (i )*inc_e;
119 
120  int n_ahead = n_A - i - 1;
121 
122  // delta1 = alpha11;
123  *delta1 = *alpha11;
124 
125  // epsilon1 = a12t_l;
126  if ( n_ahead > 0 )
127  *epsilon1 = *a12t_l;
128  }
129 
130  break;
131  }
132 
133  case FLA_DOUBLE_COMPLEX:
134  {
135  dcomplex* buff_A = FLA_DOUBLE_COMPLEX_PTR( A );
136  dcomplex* buff_d = FLA_DOUBLE_COMPLEX_PTR( d );
137  dcomplex* buff_e = ( n_A != 1 ? FLA_DOUBLE_COMPLEX_PTR( e ) : NULL );
138 
139  for ( i = 0; i < n_A; ++i )
140  {
141  dcomplex* alpha11 = buff_A + (i )*cs_A + (i )*rs_A;
142  dcomplex* a12t_l = buff_A + (i+1)*cs_A + (i )*rs_A;
143  dcomplex* delta1 = buff_d + (i )*inc_d;
144  dcomplex* epsilon1 = buff_e + (i )*inc_e;
145 
146  int n_ahead = n_A - i - 1;
147 
148  // delta1 = alpha11;
149  *delta1 = *alpha11;
150 
151  // epsilon1 = a12t_l;
152  if ( n_ahead > 0 )
153  *epsilon1 = *a12t_l;
154  }
155 
156  break;
157  }
158  }
159 
160  return FLA_SUCCESS;
161 }
dim_t FLA_Obj_row_stride(FLA_Obj obj)
Definition: FLA_Query.c:167
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
dim_t FLA_Obj_width(FLA_Obj obj)
Definition: FLA_Query.c:123
Definition: blis_type_defs.h:132
int FLA_Datatype
Definition: FLA_type_defs.h:49
dim_t FLA_Obj_col_stride(FLA_Obj obj)
Definition: FLA_Query.c:174
int i
Definition: bl1_axmyv2.c:145
dim_t FLA_Obj_vector_inc(FLA_Obj obj)
Definition: FLA_Query.c:145
Definition: blis_type_defs.h:137