libflame  revision_anchor
Functions
FLA_Bidiag_UT_realify_diagonals.c File Reference

(r)

Functions

FLA_Error FLA_Bidiag_UT_realify_diagonals (FLA_Uplo uplo, FLA_Obj a, FLA_Obj b, FLA_Obj d, FLA_Obj e)
 
FLA_Error FLA_Bidiag_UT_realify_diagonals_opt (FLA_Obj a, FLA_Obj b, FLA_Obj d, FLA_Obj e)
 

Function Documentation

◆ FLA_Bidiag_UT_realify_diagonals()

FLA_Error FLA_Bidiag_UT_realify_diagonals ( FLA_Uplo  uplo,
FLA_Obj  a,
FLA_Obj  b,
FLA_Obj  d,
FLA_Obj  e 
)

References FLA_Bidiag_UT_realify_diagonals_check(), FLA_Bidiag_UT_realify_diagonals_opt(), and FLA_Check_error_level().

14 {
15  FLA_Error r_val = FLA_SUCCESS;
16 
17  if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
18  FLA_Bidiag_UT_realify_diagonals_check( uplo, a, b, d, e );
19 
20  if ( uplo == FLA_LOWER_TRIANGULAR )
21  r_val = FLA_Bidiag_UT_realify_diagonals_opt( a, b, d, e );
22  else
23  r_val = FLA_Bidiag_UT_realify_diagonals_opt( a, b, e, d );
24 
25  return r_val;
26 }
FLA_Error FLA_Bidiag_UT_realify_diagonals_opt(FLA_Obj a, FLA_Obj b, FLA_Obj d, FLA_Obj e)
Definition: FLA_Bidiag_UT_realify_diagonals.c:28
int FLA_Error
Definition: FLA_type_defs.h:47
FLA_Error FLA_Bidiag_UT_realify_diagonals_check(FLA_Uplo uplo, FLA_Obj a, FLA_Obj b, FLA_Obj d, FLA_Obj e)
Definition: FLA_Bidiag_UT_realify_diagonals_check.c:13
unsigned int FLA_Check_error_level(void)
Definition: FLA_Check.c:18

◆ FLA_Bidiag_UT_realify_diagonals_opt()

FLA_Error FLA_Bidiag_UT_realify_diagonals_opt ( FLA_Obj  a,
FLA_Obj  b,
FLA_Obj  d,
FLA_Obj  e 
)

References alpha1, bl1_dsetv(), bl1_ssetv(), bl1_zscals(), BLIS1_CONJUGATE, FLA_Obj_datatype(), FLA_Obj_vector_dim(), FLA_Obj_vector_inc(), FLA_ONE, FLA_ZERO, i, scomplex::imag, and dcomplex::imag.

Referenced by FLA_Bidiag_UT_realify_diagonals().

29 {
30  FLA_Datatype datatype;
31  int i, m, inc_a, inc_b, inc_d, inc_e;
32 
33  datatype = FLA_Obj_datatype( a );
34 
35  m = FLA_Obj_vector_dim( a );
36 
37  inc_a = FLA_Obj_vector_inc( a );
38  inc_b = ( m > 1 ? FLA_Obj_vector_inc( b ) : 0 );
39 
40  inc_d = FLA_Obj_vector_inc( d );
41  inc_e = FLA_Obj_vector_inc( e );
42 
43  switch ( datatype )
44  {
45  case FLA_FLOAT:
46  {
47  float* buff_d = FLA_FLOAT_PTR( d );
48  float* buff_e = FLA_FLOAT_PTR( e );
49  float* buff_1 = FLA_FLOAT_PTR( FLA_ONE );
50 
51  bl1_ssetv( m,
52  buff_1,
53  buff_d, inc_d );
54 
55  bl1_ssetv( m,
56  buff_1,
57  buff_e, inc_e );
58 
59  break;
60  }
61  case FLA_DOUBLE:
62  {
63  double* buff_d = FLA_DOUBLE_PTR( d );
64  double* buff_e = FLA_DOUBLE_PTR( e );
65  double* buff_1 = FLA_DOUBLE_PTR( FLA_ONE );
66 
67  bl1_dsetv( m,
68  buff_1,
69  buff_d, inc_d );
70 
71  bl1_dsetv( m,
72  buff_1,
73  buff_e, inc_e );
74 
75  break;
76  }
77  case FLA_COMPLEX:
78  {
79  scomplex* buff_a = FLA_COMPLEX_PTR( a );
80  scomplex* buff_b = ( m > 1 ? FLA_COMPLEX_PTR( b ) : NULL );
81  scomplex* buff_d = FLA_COMPLEX_PTR( d );
82  scomplex* buff_e = FLA_COMPLEX_PTR( e );
83  scomplex* buff_1 = FLA_COMPLEX_PTR( FLA_ONE );
84  float* buff_0 = FLA_FLOAT_PTR( FLA_ZERO );
85 
86  for ( i = 0; i < m; ++i )
87  {
88  scomplex* alpha1 = buff_a + (i )*inc_a;
89  scomplex* delta1 = buff_d + (i )*inc_d;
90  scomplex* epsilon1 = buff_e + (i )*inc_e;
91 
92  scomplex absv;
93 
94  if ( i == 0 )
95  {
96  *delta1 = *buff_1;
97  }
98  else
99  {
100  scomplex* beta1 = buff_b + (i-1)*inc_b;
101  if ( beta1->imag == 0.0F )
102  *delta1 = *buff_1;
103  else
104  {
105  bl1_ccopys( BLIS1_CONJUGATE, beta1, delta1 );
106  bl1_cabsval2( beta1, &absv );
107  bl1_cinvscals( &absv, delta1 );
108 
109  bl1_cscals( delta1, beta1 );
110  beta1->imag = *buff_0;
111 
112  bl1_cscals( delta1, alpha1 );
113  }
114  }
115 
116  if ( alpha1->imag == 0.0F )
117  *epsilon1 = *buff_1;
118  else
119  {
120  bl1_ccopys( BLIS1_CONJUGATE, alpha1, epsilon1 );
121  bl1_cabsval2( alpha1, &absv );
122  bl1_cinvscals( &absv, epsilon1 );
123 
124  bl1_cscals( epsilon1, alpha1 );
125  alpha1->imag = *buff_0;
126  }
127 
128  if ( i < ( m - 1 ) )
129  {
130  scomplex* beta2 = buff_b + (i )*inc_b;
131  bl1_cscals( epsilon1, beta2 );
132  }
133  }
134  break;
135  }
136  case FLA_DOUBLE_COMPLEX:
137  {
138  dcomplex* buff_a = FLA_DOUBLE_COMPLEX_PTR( a );
139  dcomplex* buff_b = ( m > 1 ? FLA_DOUBLE_COMPLEX_PTR( b ) : NULL );
140  dcomplex* buff_d = FLA_DOUBLE_COMPLEX_PTR( d );
141  dcomplex* buff_e = FLA_DOUBLE_COMPLEX_PTR( e );
142  dcomplex* buff_1 = FLA_DOUBLE_COMPLEX_PTR( FLA_ONE );
143  double* buff_0 = FLA_DOUBLE_PTR( FLA_ZERO );
144 
145  for ( i = 0; i < m; ++i )
146  {
147  dcomplex* alpha1 = buff_a + (i )*inc_a;
148  dcomplex* delta1 = buff_d + (i )*inc_d;
149  dcomplex* epsilon1 = buff_e + (i )*inc_e;
150 
151  dcomplex absv;
152 
153  if ( i == 0 )
154  {
155  *delta1 = *buff_1;
156  }
157  else
158  {
159  dcomplex* beta1 = buff_b + (i-1)*inc_b;
160  bl1_zcopys( BLIS1_CONJUGATE, beta1, delta1 );
161  bl1_zabsval2( beta1, &absv );
162  bl1_zinvscals( &absv, delta1 );
163 
164  bl1_zscals( delta1, beta1 );
165  beta1->imag = *buff_0;
166 
167  bl1_zscals( delta1, alpha1 );
168  }
169 
170  bl1_zcopys( BLIS1_CONJUGATE, alpha1, epsilon1 );
171  bl1_zabsval2( alpha1, &absv );
172  bl1_zinvscals( &absv, epsilon1 );
173 
174  bl1_zscals( epsilon1, alpha1 );
175  alpha1->imag = *buff_0;
176 
177  if ( i < ( m - 1 ) )
178  {
179  dcomplex* beta2 = buff_b + (i )*inc_b;
180  bl1_zscals( epsilon1, beta2 );
181  }
182  }
183  break;
184  }
185  }
186  return FLA_SUCCESS;
187 }
double imag
Definition: blis_type_defs.h:139
double *restrict alpha1
Definition: bl1_axpyv2bdotaxpy.c:198
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
dim_t FLA_Obj_vector_dim(FLA_Obj obj)
Definition: FLA_Query.c:137
int FLA_Datatype
Definition: FLA_type_defs.h:49
int i
Definition: bl1_axmyv2.c:145
dim_t FLA_Obj_vector_inc(FLA_Obj obj)
Definition: FLA_Query.c:145
float imag
Definition: blis_type_defs.h:134
FLA_Obj FLA_ZERO
Definition: FLA_Init.c:20
Definition: blis_type_defs.h:137
bl1_zscals(beta, rho_yz)