libflame  revision_anchor
Functions
FLA_Bidiag_UT_extract_real_diagonals.c File Reference

(r)

Functions

FLA_Error FLA_Bidiag_UT_extract_real_diagonals (FLA_Obj A, FLA_Obj d, FLA_Obj e)
 
FLA_Error FLA_Bidiag_UT_u_extract_real_diagonals (FLA_Obj A, FLA_Obj d, FLA_Obj e)
 
FLA_Error FLA_Bidiag_UT_l_extract_real_diagonals (FLA_Obj A, FLA_Obj d, FLA_Obj e)
 

Function Documentation

◆ FLA_Bidiag_UT_extract_real_diagonals()

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

References FLA_Bidiag_UT_extract_real_diagonals_check(), FLA_Bidiag_UT_l_extract_real_diagonals(), FLA_Bidiag_UT_u_extract_real_diagonals(), FLA_Check_error_level(), FLA_Obj_length(), and FLA_Obj_width().

Referenced by FLA_Svd_ext_u_unb_var1(), FLA_Svd_uv_unb_var1(), and FLA_Svd_uv_unb_var2().

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_real_diagonals( A, d, e );
22  else
23  r_val = FLA_Bidiag_UT_l_extract_real_diagonals( A, d, e );
24 
25  return r_val;
26 }
FLA_Error FLA_Bidiag_UT_u_extract_real_diagonals(FLA_Obj A, FLA_Obj d, FLA_Obj e)
Definition: FLA_Bidiag_UT_extract_real_diagonals.c:28
int FLA_Error
Definition: FLA_type_defs.h:47
dim_t FLA_Obj_width(FLA_Obj obj)
Definition: FLA_Query.c:123
unsigned int FLA_Check_error_level(void)
Definition: FLA_Check.c:18
FLA_Error FLA_Bidiag_UT_extract_real_diagonals_check(FLA_Obj A, FLA_Obj d, FLA_Obj e)
Definition: FLA_Bidiag_UT_extract_real_diagonals_check.c:13
FLA_Error FLA_Bidiag_UT_l_extract_real_diagonals(FLA_Obj A, FLA_Obj d, FLA_Obj e)
Definition: FLA_Bidiag_UT_extract_real_diagonals.c:163
dim_t FLA_Obj_length(FLA_Obj obj)
Definition: FLA_Query.c:116

◆ FLA_Bidiag_UT_l_extract_real_diagonals()

FLA_Error FLA_Bidiag_UT_l_extract_real_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(), i, scomplex::real, and dcomplex::real.

Referenced by FLA_Bidiag_UT_extract_real_diagonals(), and FLA_Tridiag_UT_extract_real_diagonals().

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

FLA_Error FLA_Bidiag_UT_u_extract_real_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(), i, scomplex::real, and dcomplex::real.

Referenced by FLA_Bidiag_UT_extract_real_diagonals(), and FLA_Tridiag_UT_extract_real_diagonals().

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