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 
)

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().

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 
131  rs_A = FLA_Obj_row_stride( A );
132  cs_A = FLA_Obj_col_stride( A );
133 
134  inc_d = FLA_Obj_vector_inc( d );
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  {
165  scomplex* buff_A = FLA_COMPLEX_PTR( A );
166  scomplex* buff_d = FLA_COMPLEX_PTR( d );
167  scomplex* buff_1 = FLA_COMPLEX_PTR( FLA_ONE );
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;
178  scomplex absv;
179  scomplex conj_delta1;
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 );
187  bl1_ccopys( BLIS1_CONJUGATE, a10t_r, delta1 );
188  bl1_cabsval2( a10t_r, &absv );
189  bl1_cinvscals( &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  {
196  bl1_ccopyconj( delta1, &conj_delta1 );
197  bl1_cscals( &conj_delta1, a21_t );
198  }
199  }
200 
201  break;
202  }
203 
204  case FLA_DOUBLE_COMPLEX:
205  {
206  dcomplex* buff_A = FLA_DOUBLE_COMPLEX_PTR( A );
207  dcomplex* buff_d = FLA_DOUBLE_COMPLEX_PTR( d );
208  dcomplex* buff_1 = FLA_DOUBLE_COMPLEX_PTR( FLA_ONE );
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;
219  dcomplex absv;
220  dcomplex conj_delta1;
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 );
228  bl1_zcopys( BLIS1_CONJUGATE, a10t_r, delta1 );
229  bl1_zabsval2( a10t_r, &absv );
230  bl1_zinvscals( &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  {
237  bl1_zcopyconj( delta1, &conj_delta1 );
238  bl1_zscals( &conj_delta1, a21_t );
239  }
240  }
241 
242  break;
243  }
244  }
245 
246  return FLA_SUCCESS;
247 }
void bl1_csetv(int m, scomplex *sigma, scomplex *x, int incx)
Definition: bl1_setv.c:52
void bl1_zsetv(int m, dcomplex *sigma, dcomplex *x, int incx)
Definition: bl1_setv.c:66
dim_t FLA_Obj_row_stride(FLA_Obj obj)
Definition: FLA_Query.c:167
Definition: blis_type_defs.h:82
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
void bl1_dsetv(int m, double *sigma, double *x, int incx)
Definition: bl1_setv.c:39
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
void bl1_ssetv(int m, float *sigma, float *x, int incx)
Definition: bl1_setv.c:26
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
bl1_zscals(beta, rho_yz)

◆ FLA_Tridiag_UT_l_realify_unb()

FLA_Error FLA_Tridiag_UT_l_realify_unb ( FLA_Obj  A,
FLA_Obj  d 
)

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(), and FLA_Set().

38 {
39  FLA_Obj ATL, ATR, A00, a01, A02,
40  ABL, ABR, a10t, alpha11, a12t,
41  A20, a21, A22;
42 
43  FLA_Obj dT, d0,
44  dB, delta1,
45  d2;
46 
47  FLA_Obj a10t_l, a10t_r;
48 
49  FLA_Obj a21_t,
50  a21_b;
51 
52  FLA_Obj absv;
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 
74  FLA_Repart_2x1_to_3x1( dT, &d0,
75  /* ** */ /* ****** */
76  &delta1,
77  dB, &d2, 1, FLA_BOTTOM );
78 
79  /*------------------------------------------------------------*/
80 
81  FLA_Part_1x2( a10t, &a10t_l, &a10t_r, 1, FLA_RIGHT );
82 
83  FLA_Part_2x1( a21, &a21_t,
84  &a21_b, 1, FLA_TOP );
85 
86  // delta1 = conj(a10t_r) / abs(a10t_r);
87  FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, a10t_r, delta1 );
88  FLA_Copyt( FLA_NO_TRANSPOSE, a10t_r, absv );
89  FLA_Absolute_value( absv );
90  FLA_Inv_scal( absv, delta1 );
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);
97  FLA_Copyt( FLA_NO_TRANSPOSE, absv, a10t_r );
98  FLA_Scalc( FLA_CONJUGATE, delta1, a21_t );
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 
108  FLA_Cont_with_3x1_to_2x1( &dT, d0,
109  delta1,
110  /* ** */ /* ****** */
111  &dB, d2, FLA_TOP );
112  }
113 
114  FLA_Obj_free( &absv );
115 
116  return FLA_SUCCESS;
117 }
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_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_free(FLA_Obj *obj)
Definition: FLA_Obj.c:588
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
FLA_Error FLA_Copyt(FLA_Trans trans, FLA_Obj A, FLA_Obj B)
Definition: FLA_Copyt.c:15
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_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_Obj FLA_ONE
Definition: FLA_Init.c:18
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
Definition: FLA_type_defs.h:158
FLA_Error FLA_Set(FLA_Obj alpha, FLA_Obj A)
Definition: FLA_Set.c:13
FLA_Error FLA_Inv_scal(FLA_Obj alpha, FLA_Obj A)
Definition: FLA_Inv_scal.c:13
FLA_Error FLA_Absolute_value(FLA_Obj alpha)
Definition: FLA_Absolute_value.c:13
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_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_Scalc(FLA_Conj conjalpha, FLA_Obj alpha, FLA_Obj A)
Definition: FLA_Scalc.c:13
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
dim_t FLA_Obj_min_dim(FLA_Obj obj)
Definition: FLA_Query.c:153

◆ FLA_Tridiag_UT_realify()

FLA_Error FLA_Tridiag_UT_realify ( FLA_Uplo  uplo,
FLA_Obj  A,
FLA_Obj  d 
)

References FLA_Check_error_level(), FLA_Obj_is_real(), FLA_ONE, FLA_Set(), FLA_Tridiag_UT_l_realify_opt(), FLA_Tridiag_UT_realify_check(), and FLA_Tridiag_UT_u_realify_opt().

Referenced by FLA_Hevd_lv_unb_var1(), and FLA_Hevd_lv_unb_var2().

14 {
15  FLA_Error r_val = FLA_SUCCESS;
16 
17  if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
18  FLA_Tridiag_UT_realify_check( uplo, A, d );
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 );
28  r_val = FLA_Tridiag_UT_l_realify_opt( A, d );
29  else
30  //r_val = FLA_Tridiag_UT_u_realify_unb( A, d );
31  r_val = FLA_Tridiag_UT_u_realify_opt( A, d );
32 
33  return r_val;
34 }
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_Obj FLA_ONE
Definition: FLA_Init.c:18
int FLA_Error
Definition: FLA_type_defs.h:47
FLA_Error FLA_Tridiag_UT_l_realify_opt(FLA_Obj A, FLA_Obj d)
Definition: FLA_Tridiag_UT_realify.c:119
FLA_Error FLA_Set(FLA_Obj alpha, FLA_Obj A)
Definition: FLA_Set.c:13
FLA_Error FLA_Tridiag_UT_u_realify_opt(FLA_Obj A, FLA_Obj d)
Definition: FLA_Tridiag_UT_realify.c:335
unsigned int FLA_Check_error_level(void)
Definition: FLA_Check.c:18
FLA_Bool FLA_Obj_is_real(FLA_Obj A)
Definition: FLA_Query.c:307

◆ FLA_Tridiag_UT_u_realify_opt()

FLA_Error FLA_Tridiag_UT_u_realify_opt ( FLA_Obj  A,
FLA_Obj  d 
)

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().

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 
347  rs_A = FLA_Obj_row_stride( A );
348  cs_A = FLA_Obj_col_stride( A );
349 
350  inc_d = FLA_Obj_vector_inc( d );
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  {
381  scomplex* buff_A = FLA_COMPLEX_PTR( A );
382  scomplex* buff_d = FLA_COMPLEX_PTR( d );
383  scomplex* buff_1 = FLA_COMPLEX_PTR( FLA_ONE );
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;
394  scomplex absv;
395  scomplex conj_delta1;
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 );
403  bl1_ccopys( BLIS1_CONJUGATE, a01_b, delta1 );
404  bl1_cabsval2( a01_b, &absv );
405  bl1_cinvscals( &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  {
412  bl1_ccopyconj( delta1, &conj_delta1 );
413  bl1_cscals( &conj_delta1, a12t_l );
414  }
415  }
416 
417  break;
418  }
419 
420  case FLA_DOUBLE_COMPLEX:
421  {
422  dcomplex* buff_A = FLA_DOUBLE_COMPLEX_PTR( A );
423  dcomplex* buff_d = FLA_DOUBLE_COMPLEX_PTR( d );
424  dcomplex* buff_1 = FLA_DOUBLE_COMPLEX_PTR( FLA_ONE );
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;
435  dcomplex absv;
436  dcomplex conj_delta1;
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 );
444  bl1_zcopys( BLIS1_CONJUGATE, a01_b, delta1 );
445  bl1_zabsval2( a01_b, &absv );
446  bl1_zinvscals( &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  {
453  bl1_zcopyconj( delta1, &conj_delta1 );
454  bl1_zscals( &conj_delta1, a12t_l );
455  }
456  }
457 
458  break;
459  }
460  }
461 
462  return FLA_SUCCESS;
463 }
void bl1_csetv(int m, scomplex *sigma, scomplex *x, int incx)
Definition: bl1_setv.c:52
void bl1_zsetv(int m, dcomplex *sigma, dcomplex *x, int incx)
Definition: bl1_setv.c:66
dim_t FLA_Obj_row_stride(FLA_Obj obj)
Definition: FLA_Query.c:167
Definition: blis_type_defs.h:82
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
void bl1_dsetv(int m, double *sigma, double *x, int incx)
Definition: bl1_setv.c:39
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
void bl1_ssetv(int m, float *sigma, float *x, int incx)
Definition: bl1_setv.c:26
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
bl1_zscals(beta, rho_yz)

◆ FLA_Tridiag_UT_u_realify_unb()

FLA_Error FLA_Tridiag_UT_u_realify_unb ( FLA_Obj  A,
FLA_Obj  d 
)

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(), and FLA_Set().

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 
262  FLA_Obj a01_t,
263  a01_b;
264 
265  FLA_Obj a12t_l, a12t_r;
266 
267 
268  FLA_Obj absv;
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 
290  FLA_Repart_2x1_to_3x1( dT, &d0,
291  /* ** */ /* ****** */
292  &delta1,
293  dB, &d2, 1, FLA_BOTTOM );
294 
295  /*------------------------------------------------------------*/
296 
297  FLA_Part_2x1( a01, &a01_t,
298  &a01_b, 1, FLA_BOTTOM );
299 
300  FLA_Part_1x2( a12t, &a12t_l, &a12t_r, 1, FLA_LEFT );
301 
302  // delta1 = conj(a01_b) / abs(a01_b);
303  FLA_Copyt( FLA_CONJ_NO_TRANSPOSE, a01_b, delta1 );
304  FLA_Copyt( FLA_NO_TRANSPOSE, a01_b, absv );
305  FLA_Absolute_value( absv );
306  FLA_Inv_scal( absv, delta1 );
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);
313  FLA_Copyt( FLA_NO_TRANSPOSE, absv, a01_b );
314  FLA_Scalc( FLA_CONJUGATE, delta1, a12t_l );
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 
324  FLA_Cont_with_3x1_to_2x1( &dT, d0,
325  delta1,
326  /* ** */ /* ****** */
327  &dB, d2, FLA_TOP );
328  }
329 
330  FLA_Obj_free( &absv );
331 
332  return FLA_SUCCESS;
333 }
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_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_free(FLA_Obj *obj)
Definition: FLA_Obj.c:588
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
FLA_Error FLA_Copyt(FLA_Trans trans, FLA_Obj A, FLA_Obj B)
Definition: FLA_Copyt.c:15
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_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_Obj FLA_ONE
Definition: FLA_Init.c:18
FLA_Datatype FLA_Obj_datatype(FLA_Obj obj)
Definition: FLA_Query.c:13
Definition: FLA_type_defs.h:158
FLA_Error FLA_Set(FLA_Obj alpha, FLA_Obj A)
Definition: FLA_Set.c:13
FLA_Error FLA_Inv_scal(FLA_Obj alpha, FLA_Obj A)
Definition: FLA_Inv_scal.c:13
FLA_Error FLA_Absolute_value(FLA_Obj alpha)
Definition: FLA_Absolute_value.c:13
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_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_Scalc(FLA_Conj conjalpha, FLA_Obj alpha, FLA_Obj A)
Definition: FLA_Scalc.c:13
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
dim_t FLA_Obj_min_dim(FLA_Obj obj)
Definition: FLA_Query.c:153