libflame revision_anchor
Functions
FLA_Tridiag_UT_realify.c File Reference

(r)

Functions

FLA_Error FLA_Tridiag_UT_realify (FLA_Uplo uplo, FLA_Obj A, FLA_Obj d)
 
FLA_Error FLA_Tridiag_UT_l_realify_unb (FLA_Obj A, FLA_Obj d)
 
FLA_Error FLA_Tridiag_UT_l_realify_opt (FLA_Obj A, FLA_Obj d)
 
FLA_Error FLA_Tridiag_UT_u_realify_unb (FLA_Obj A, FLA_Obj d)
 
FLA_Error FLA_Tridiag_UT_u_realify_opt (FLA_Obj A, FLA_Obj d)
 

Function Documentation

◆ FLA_Tridiag_UT_l_realify_opt()

FLA_Error FLA_Tridiag_UT_l_realify_opt ( FLA_Obj  A,
FLA_Obj  d 
)
120{
121 FLA_Datatype datatype;
122 int m_A;
123 int rs_A, cs_A;
124 int inc_d;
125 int i;
126
127 datatype = FLA_Obj_datatype( A );
128
129 m_A = FLA_Obj_length( A );
130
133
135
136
137 switch ( datatype )
138 {
139 case FLA_FLOAT:
140 {
141 float* buff_d = FLA_FLOAT_PTR( d );
142 float* buff_1 = FLA_FLOAT_PTR( FLA_ONE );
143
144 bl1_ssetv( m_A,
145 buff_1,
146 buff_d, inc_d );
147
148 break;
149 }
150
151 case FLA_DOUBLE:
152 {
153 double* buff_d = FLA_DOUBLE_PTR( d );
154 double* buff_1 = FLA_DOUBLE_PTR( FLA_ONE );
155
156 bl1_dsetv( m_A,
157 buff_1,
158 buff_d, inc_d );
159
160 break;
161 }
162
163 case FLA_COMPLEX:
164 {
168
169 bl1_csetv( 1,
170 buff_1,
171 buff_d, inc_d );
172
173 for ( i = 1; i < m_A; ++i )
174 {
175 scomplex* a10t_r = buff_A + (i-1)*cs_A + (i )*rs_A;
176 scomplex* a21_t = buff_A + (i )*cs_A + (i+1)*rs_A;
177 scomplex* delta1 = buff_d + (i )*inc_d;
180
181 int m_ahead = m_A - i - 1;
182
183 // FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, a10t_r, delta1 );
184 // FLA_Copyt( FLA_NO_TRANSPOSE, a10t_r, absv );
185 // FLA_Absolute_value( absv );
186 // FLA_Inv_scal( absv, delta1 );
190
191 // FLA_Copyt( FLA_NO_TRANSPOSE, absv, a10t_r );
192 // FLA_Scalc( FLA_CONJUGATE, delta1, a21_t );
193 *a10t_r = absv;
194 if ( m_ahead > 0 )
195 {
198 }
199 }
200
201 break;
202 }
203
205 {
209
210 bl1_zsetv( 1,
211 buff_1,
212 buff_d, inc_d );
213
214 for ( i = 1; i < m_A; ++i )
215 {
216 dcomplex* a10t_r = buff_A + (i-1)*cs_A + (i )*rs_A;
217 dcomplex* a21_t = buff_A + (i )*cs_A + (i+1)*rs_A;
218 dcomplex* delta1 = buff_d + (i )*inc_d;
221
222 int m_ahead = m_A - i - 1;
223
224 // FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, a10t_r, delta1 );
225 // FLA_Copyt( FLA_NO_TRANSPOSE, a10t_r, absv );
226 // FLA_Absolute_value( absv );
227 // FLA_Inv_scal( absv, delta1 );
231
232 // FLA_Copyt( FLA_NO_TRANSPOSE, absv, a10t_r );
233 // FLA_Scalc( FLA_CONJUGATE, delta1, a21_t );
234 *a10t_r = absv;
235 if ( m_ahead > 0 )
236 {
239 }
240 }
241
242 break;
243 }
244 }
245
246 return FLA_SUCCESS;
247}
FLA_Obj FLA_ONE
Definition FLA_Init.c:18
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
dim_t FLA_Obj_vector_inc(FLA_Obj obj)
Definition FLA_Query.c:145
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition FLA_Query.c:13
int FLA_Datatype
Definition FLA_type_defs.h:49
int i
Definition bl1_axmyv2.c:145
bl1_zscals(beta, rho_yz)
void bl1_dsetv(int m, double *sigma, double *x, int incx)
Definition bl1_setv.c:39
void bl1_zsetv(int m, dcomplex *sigma, dcomplex *x, int incx)
Definition bl1_setv.c:66
void bl1_csetv(int m, scomplex *sigma, scomplex *x, int incx)
Definition bl1_setv.c:52
void bl1_ssetv(int m, float *sigma, float *x, int incx)
Definition bl1_setv.c:26
@ BLIS1_CONJUGATE
Definition blis_type_defs.h:82
Definition blis_type_defs.h:138
Definition blis_type_defs.h:133

References bl1_csetv(), bl1_dsetv(), bl1_ssetv(), bl1_zscals(), bl1_zsetv(), BLIS1_CONJUGATE, FLA_Obj_col_stride(), FLA_Obj_datatype(), FLA_Obj_length(), FLA_Obj_row_stride(), FLA_Obj_vector_inc(), FLA_ONE, and i.

Referenced by FLA_Tridiag_UT_realify().

◆ FLA_Tridiag_UT_l_realify_unb()

FLA_Error FLA_Tridiag_UT_l_realify_unb ( FLA_Obj  A,
FLA_Obj  d 
)
38{
39 FLA_Obj ATL, ATR, A00, a01, A02,
41 A20, a21, A22;
42
43 FLA_Obj dT, d0,
44 dB, delta1,
45 d2;
46
48
50 a21_b;
51
53
54
55 FLA_Obj_create( FLA_Obj_datatype( A ), 1, 1, 0, 0, &absv );
56
57 FLA_Part_2x2( A, &ATL, &ATR,
58 &ABL, &ABR, 1, 1, FLA_TL );
59
60 FLA_Part_2x1( d, &dT,
61 &dB, 1, FLA_TOP );
62
63 // Set first element of vector d to one.
64 FLA_Set( FLA_ONE, dT );
65
66 while ( FLA_Obj_min_dim( ABR ) > 0 )
67 {
68 FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, /**/ &a01, &A02,
69 /* ************* */ /* ************************** */
70 &a10t, /**/ &alpha11, &a12t,
71 ABL, /**/ ABR, &A20, /**/ &a21, &A22,
72 1, 1, FLA_BR );
73
75 /* ** */ /* ****** */
76 &delta1,
77 dB, &d2, 1, FLA_BOTTOM );
78
79 /*------------------------------------------------------------*/
80
82
84 &a21_b, 1, FLA_TOP );
85
86 // delta1 = conj(a10t_r) / abs(a10t_r);
91
92 // a10t_r = delta1 * a10t_r;
93 // = abs(a10t_r);
94 // alpha11 = delta1 * alpha11 * conj(delta1);
95 // = alpha11;
96 // a21_t = a21_t * conj(delta1);
99
100 /*------------------------------------------------------------*/
101
102 FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, a01, /**/ A02,
103 a10t, alpha11, /**/ a12t,
104 /* ************** */ /* ************************ */
105 &ABL, /**/ &ABR, A20, a21, /**/ A22,
106 FLA_TL );
107
109 delta1,
110 /* ** */ /* ****** */
111 &dB, d2, FLA_TOP );
112 }
113
114 FLA_Obj_free( &absv );
115
116 return FLA_SUCCESS;
117}
FLA_Error FLA_Scalc(FLA_Conj conjalpha, FLA_Obj alpha, FLA_Obj A)
Definition FLA_Scalc.c:13
FLA_Error FLA_Inv_scal(FLA_Obj alpha, FLA_Obj A)
Definition FLA_Inv_scal.c:13
FLA_Error FLA_Copyt(FLA_Trans trans, FLA_Obj A, FLA_Obj B)
Definition FLA_Copyt.c:15
FLA_Error FLA_Cont_with_3x3_to_2x2(FLA_Obj *ATL, FLA_Obj *ATR, FLA_Obj A00, FLA_Obj A01, FLA_Obj A02, FLA_Obj A10, FLA_Obj A11, FLA_Obj A12, FLA_Obj *ABL, FLA_Obj *ABR, FLA_Obj A20, FLA_Obj A21, FLA_Obj A22, FLA_Quadrant quadrant)
Definition FLA_View.c:304
FLA_Error FLA_Part_2x2(FLA_Obj A, FLA_Obj *A11, FLA_Obj *A12, FLA_Obj *A21, FLA_Obj *A22, dim_t mb, dim_t nb, FLA_Quadrant quadrant)
Definition FLA_View.c:17
FLA_Error FLA_Cont_with_3x1_to_2x1(FLA_Obj *AT, FLA_Obj A0, FLA_Obj A1, FLA_Obj *AB, FLA_Obj A2, FLA_Side side)
Definition FLA_View.c:428
FLA_Error FLA_Repart_2x1_to_3x1(FLA_Obj AT, FLA_Obj *A0, FLA_Obj *A1, FLA_Obj AB, FLA_Obj *A2, dim_t mb, FLA_Side side)
Definition FLA_View.c:226
FLA_Error FLA_Obj_create(FLA_Datatype datatype, dim_t m, dim_t n, dim_t rs, dim_t cs, FLA_Obj *obj)
Definition FLA_Obj.c:55
FLA_Error FLA_Part_1x2(FLA_Obj A, FLA_Obj *A1, FLA_Obj *A2, dim_t nb, FLA_Side side)
Definition FLA_View.c:110
FLA_Error FLA_Part_2x1(FLA_Obj A, FLA_Obj *A1, FLA_Obj *A2, dim_t mb, FLA_Side side)
Definition FLA_View.c:76
FLA_Error FLA_Repart_2x2_to_3x3(FLA_Obj ATL, FLA_Obj ATR, FLA_Obj *A00, FLA_Obj *A01, FLA_Obj *A02, FLA_Obj *A10, FLA_Obj *A11, FLA_Obj *A12, FLA_Obj ABL, FLA_Obj ABR, FLA_Obj *A20, FLA_Obj *A21, FLA_Obj *A22, dim_t mb, dim_t nb, FLA_Quadrant quadrant)
Definition FLA_View.c:142
dim_t FLA_Obj_min_dim(FLA_Obj obj)
Definition FLA_Query.c:153
FLA_Error FLA_Obj_free(FLA_Obj *obj)
Definition FLA_Obj.c:588
FLA_Error FLA_Absolute_value(FLA_Obj alpha)
Definition FLA_Absolute_value.c:13
FLA_Error FLA_Set(FLA_Obj alpha, FLA_Obj A)
Definition FLA_Set.c:13
Definition FLA_type_defs.h:159

References FLA_Absolute_value(), FLA_Cont_with_3x1_to_2x1(), FLA_Cont_with_3x3_to_2x2(), FLA_Copyt(), FLA_Inv_scal(), FLA_Obj_create(), FLA_Obj_datatype(), FLA_Obj_free(), FLA_Obj_min_dim(), FLA_ONE, FLA_Part_1x2(), FLA_Part_2x1(), FLA_Part_2x2(), FLA_Repart_2x1_to_3x1(), FLA_Repart_2x2_to_3x3(), FLA_Scalc(), FLA_Set(), and i.

◆ FLA_Tridiag_UT_realify()

FLA_Error FLA_Tridiag_UT_realify ( FLA_Uplo  uplo,
FLA_Obj  A,
FLA_Obj  d 
)
14{
16
19
20 if ( FLA_Obj_is_real( A ) )
21 {
22 FLA_Set( FLA_ONE, d );
23 return FLA_SUCCESS;
24 }
25
26 if ( uplo == FLA_LOWER_TRIANGULAR )
27 //r_val = FLA_Tridiag_UT_l_realify_unb( A, d );
29 else
30 //r_val = FLA_Tridiag_UT_u_realify_unb( A, d );
32
33 return r_val;
34}
FLA_Error FLA_Tridiag_UT_l_realify_opt(FLA_Obj A, FLA_Obj d)
Definition FLA_Tridiag_UT_realify.c:119
FLA_Error FLA_Tridiag_UT_u_realify_opt(FLA_Obj A, FLA_Obj d)
Definition FLA_Tridiag_UT_realify.c:335
FLA_Error FLA_Tridiag_UT_realify_check(FLA_Uplo uplo, FLA_Obj A, FLA_Obj d)
Definition FLA_Tridiag_UT_realify_check.c:13
FLA_Bool FLA_Obj_is_real(FLA_Obj A)
Definition FLA_Query.c:307
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_Obj_is_real(), FLA_ONE, FLA_Set(), FLA_Tridiag_UT_l_realify_opt(), FLA_Tridiag_UT_realify_check(), FLA_Tridiag_UT_u_realify_opt(), and i.

Referenced by FLA_Hevd_lv_unb_var1(), and FLA_Hevd_lv_unb_var2().

◆ FLA_Tridiag_UT_u_realify_opt()

FLA_Error FLA_Tridiag_UT_u_realify_opt ( FLA_Obj  A,
FLA_Obj  d 
)
336{
337 FLA_Datatype datatype;
338 int m_A;
339 int rs_A, cs_A;
340 int inc_d;
341 int i;
342
343 datatype = FLA_Obj_datatype( A );
344
345 m_A = FLA_Obj_length( A );
346
349
351
352
353 switch ( datatype )
354 {
355 case FLA_FLOAT:
356 {
357 float* buff_d = FLA_FLOAT_PTR( d );
358 float* buff_1 = FLA_FLOAT_PTR( FLA_ONE );
359
360 bl1_ssetv( m_A,
361 buff_1,
362 buff_d, inc_d );
363
364 break;
365 }
366
367 case FLA_DOUBLE:
368 {
369 double* buff_d = FLA_DOUBLE_PTR( d );
370 double* buff_1 = FLA_DOUBLE_PTR( FLA_ONE );
371
372 bl1_dsetv( m_A,
373 buff_1,
374 buff_d, inc_d );
375
376 break;
377 }
378
379 case FLA_COMPLEX:
380 {
384
385 bl1_csetv( 1,
386 buff_1,
387 buff_d, inc_d );
388
389 for ( i = 1; i < m_A; ++i )
390 {
391 scomplex* a01_b = buff_A + (i )*cs_A + (i-1)*rs_A;
392 scomplex* a12t_l = buff_A + (i+1)*cs_A + (i )*rs_A;
393 scomplex* delta1 = buff_d + (i )*inc_d;
396
397 int m_ahead = m_A - i - 1;
398
399 // FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, a01_b, delta1 );
400 // FLA_Copyt( FLA_NO_TRANSPOSE, a01_b, absv );
401 // FLA_Absolute_value( absv );
402 // FLA_Inv_scal( absv, delta1 );
406
407 // FLA_Copyt( FLA_NO_TRANSPOSE, absv, a01_b );
408 // FLA_Scalc( FLA_CONJUGATE, delta1, a12t_l );
409 *a01_b = absv;
410 if ( m_ahead > 0 )
411 {
414 }
415 }
416
417 break;
418 }
419
421 {
425
426 bl1_zsetv( 1,
427 buff_1,
428 buff_d, inc_d );
429
430 for ( i = 1; i < m_A; ++i )
431 {
432 dcomplex* a01_b = buff_A + (i )*cs_A + (i-1)*rs_A;
433 dcomplex* a12t_l = buff_A + (i+1)*cs_A + (i )*rs_A;
434 dcomplex* delta1 = buff_d + (i )*inc_d;
437
438 int m_ahead = m_A - i - 1;
439
440 // FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, a01_b, delta1 );
441 // FLA_Copyt( FLA_NO_TRANSPOSE, a01_b, absv );
442 // FLA_Absolute_value( absv );
443 // FLA_Inv_scal( absv, delta1 );
447
448 // FLA_Copyt( FLA_NO_TRANSPOSE, absv, a01_b );
449 // FLA_Scalc( FLA_CONJUGATE, delta1, a12t_l );
450 *a01_b = absv;
451 if ( m_ahead > 0 )
452 {
455 }
456 }
457
458 break;
459 }
460 }
461
462 return FLA_SUCCESS;
463}

References bl1_csetv(), bl1_dsetv(), bl1_ssetv(), bl1_zscals(), bl1_zsetv(), BLIS1_CONJUGATE, FLA_Obj_col_stride(), FLA_Obj_datatype(), FLA_Obj_length(), FLA_Obj_row_stride(), FLA_Obj_vector_inc(), FLA_ONE, and i.

Referenced by FLA_Tridiag_UT_realify().

◆ FLA_Tridiag_UT_u_realify_unb()

FLA_Error FLA_Tridiag_UT_u_realify_unb ( FLA_Obj  A,
FLA_Obj  d 
)
253{
254 FLA_Obj ATL, ATR, A00, a01, A02,
255 ABL, ABR, a10t, alpha11, a12t,
256 A20, a21, A22;
257
258 FLA_Obj dT, d0,
259 dB, delta1,
260 d2;
261
263 a01_b;
264
266
267
269
270
271 FLA_Obj_create( FLA_Obj_datatype( A ), 1, 1, 0, 0, &absv );
272
273 FLA_Part_2x2( A, &ATL, &ATR,
274 &ABL, &ABR, 1, 1, FLA_TL );
275
276 FLA_Part_2x1( d, &dT,
277 &dB, 1, FLA_TOP );
278
279 // Set first element of vector d to one.
280 FLA_Set( FLA_ONE, dT );
281
282 while ( FLA_Obj_min_dim( ABR ) > 0 )
283 {
284 FLA_Repart_2x2_to_3x3( ATL, /**/ ATR, &A00, /**/ &a01, &A02,
285 /* ************* */ /* ************************** */
286 &a10t, /**/ &alpha11, &a12t,
287 ABL, /**/ ABR, &A20, /**/ &a21, &A22,
288 1, 1, FLA_BR );
289
291 /* ** */ /* ****** */
292 &delta1,
293 dB, &d2, 1, FLA_BOTTOM );
294
295 /*------------------------------------------------------------*/
296
298 &a01_b, 1, FLA_BOTTOM );
299
301
302 // delta1 = conj(a01_b) / abs(a01_b);
307
308 // a01_b = delta1 * a01_b;
309 // = abs(a01_b);
310 // alpha11 = delta1 * alpha11 * conj(delta1);
311 // = alpha11;
312 // a12t_l = a12t_l * conj(delta1);
315
316 /*------------------------------------------------------------*/
317
318 FLA_Cont_with_3x3_to_2x2( &ATL, /**/ &ATR, A00, a01, /**/ A02,
319 a10t, alpha11, /**/ a12t,
320 /* ************** */ /* ************************ */
321 &ABL, /**/ &ABR, A20, a21, /**/ A22,
322 FLA_TL );
323
325 delta1,
326 /* ** */ /* ****** */
327 &dB, d2, FLA_TOP );
328 }
329
330 FLA_Obj_free( &absv );
331
332 return FLA_SUCCESS;
333}

References FLA_Absolute_value(), FLA_Cont_with_3x1_to_2x1(), FLA_Cont_with_3x3_to_2x2(), FLA_Copyt(), FLA_Inv_scal(), FLA_Obj_create(), FLA_Obj_datatype(), FLA_Obj_free(), FLA_Obj_min_dim(), FLA_ONE, FLA_Part_1x2(), FLA_Part_2x1(), FLA_Part_2x2(), FLA_Repart_2x1_to_3x1(), FLA_Repart_2x2_to_3x3(), FLA_Scalc(), FLA_Set(), and i.