libflame  revision_anchor
Functions
FLA_Tridiag_UT_realify_subdiagonal.c File Reference

(r)

Functions

FLA_Error FLA_Tridiag_UT_realify_subdiagonal (FLA_Obj b, FLA_Obj d)
 
FLA_Error FLA_Tridiag_UT_realify_subdiagonal_opt (FLA_Obj b, FLA_Obj d)
 

Function Documentation

◆ FLA_Tridiag_UT_realify_subdiagonal()

FLA_Error FLA_Tridiag_UT_realify_subdiagonal ( FLA_Obj  b,
FLA_Obj  d 
)
14 {
15  FLA_Error r_val = FLA_SUCCESS;
16 
17  if ( FLA_Check_error_level() >= FLA_MIN_ERROR_CHECKING )
19 
21 
22  return r_val;
23 }
FLA_Error FLA_Tridiag_UT_realify_subdiagonal_opt(FLA_Obj b, FLA_Obj d)
Definition: FLA_Tridiag_UT_realify_subdiagonal.c:25
FLA_Error FLA_Tridiag_UT_realify_subdiagonal_check(FLA_Obj b, FLA_Obj d)
Definition: FLA_Tridiag_UT_realify_subdiagonal_check.c:13
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_Tridiag_UT_realify_subdiagonal_check(), and FLA_Tridiag_UT_realify_subdiagonal_opt().

◆ FLA_Tridiag_UT_realify_subdiagonal_opt()

FLA_Error FLA_Tridiag_UT_realify_subdiagonal_opt ( FLA_Obj  b,
FLA_Obj  d 
)
26 {
27  FLA_Datatype datatype;
28  int m, inc_b, inc_d;
29  int i;
30 
31  datatype = FLA_Obj_datatype( d );
32 
33  m = FLA_Obj_vector_dim( d );
34  inc_d = FLA_Obj_vector_inc( d );
35 
36  inc_b = ( m > 1 ? FLA_Obj_vector_inc( b ) : 0 );
37 
38  switch ( datatype )
39  {
40  case FLA_FLOAT:
41  {
42  float* buff_d = FLA_FLOAT_PTR( d );
43  float* buff_1 = FLA_FLOAT_PTR( FLA_ONE );
44 
45  bl1_ssetv( m,
46  buff_1,
47  buff_d, inc_d );
48 
49  break;
50  }
51  case FLA_DOUBLE:
52  {
53  double* buff_d = FLA_DOUBLE_PTR( d );
54  double* buff_1 = FLA_DOUBLE_PTR( FLA_ONE );
55 
56  bl1_dsetv( m,
57  buff_1,
58  buff_d, inc_d );
59 
60  break;
61  }
62  case FLA_COMPLEX:
63  {
64  scomplex* buff_b = ( m > 1 ? FLA_COMPLEX_PTR( b ) : NULL );
65  scomplex* buff_d = FLA_COMPLEX_PTR( d );
66  scomplex* buff_1 = FLA_COMPLEX_PTR( FLA_ONE );
67 
68  bl1_csetv( 1,
69  buff_1,
70  buff_d, inc_d );
71 
72  for ( i = 1; i < m; ++i )
73  {
74  scomplex* beta1 = buff_b + (i-1)*inc_b;
75  scomplex* delta1 = buff_d + (i )*inc_d;
76  scomplex absv;
77  scomplex conj_delta1;
78 
79  if ( beta1->imag == 0.0F )
80  *delta1 = *buff_1;
81  else
82  {
83  bl1_ccopys( BLIS1_CONJUGATE, beta1, delta1 );
84  bl1_cabsval2( beta1, &absv );
85  bl1_cinvscals( &absv, delta1 );
86 
87  *beta1 = absv;
88  }
89  if ( i < ( m - 1 ) )
90  {
91  scomplex* beta2 = buff_b + (i )*inc_b;
92  bl1_ccopyconj( delta1, &conj_delta1 );
93  bl1_cscals( &conj_delta1, beta2 );
94  }
95  }
96  break;
97  }
98  case FLA_DOUBLE_COMPLEX:
99  {
100  dcomplex* buff_b = ( m > 1 ? FLA_DOUBLE_COMPLEX_PTR( b ) : NULL );
101  dcomplex* buff_d = FLA_DOUBLE_COMPLEX_PTR( d );
102  dcomplex* buff_1 = FLA_DOUBLE_COMPLEX_PTR( FLA_ONE );
103 
104  bl1_zsetv( 1,
105  buff_1,
106  buff_d, inc_d );
107 
108  for ( i = 1; i < m; ++i )
109  {
110  dcomplex* beta1 = buff_b + (i-1)*inc_b;
111  dcomplex* delta1 = buff_d + (i )*inc_d;
112  dcomplex absv;
113  dcomplex conj_delta1;
114 
115  if ( beta1->imag == 0.0 )
116  *delta1 = *buff_1;
117  else
118  {
119  bl1_zcopys( BLIS1_CONJUGATE, beta1, delta1 );
120  bl1_zabsval2( beta1, &absv );
121  bl1_zinvscals( &absv, delta1 );
122 
123  *beta1 = absv;
124  }
125  if ( i < ( m - 1 ) )
126  {
127  dcomplex* beta2 = buff_b + (i )*inc_b;
128  bl1_zcopyconj( delta1, &conj_delta1 );
129  bl1_zscals( &conj_delta1, beta2 );
130  }
131  }
132  break;
133  }
134  }
135 
136  return FLA_SUCCESS;
137 }
FLA_Obj FLA_ONE
Definition: FLA_Init.c:18
dim_t FLA_Obj_vector_inc(FLA_Obj obj)
Definition: FLA_Query.c:145
dim_t FLA_Obj_vector_dim(FLA_Obj obj)
Definition: FLA_Query.c:137
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
double imag
Definition: blis_type_defs.h:139
Definition: blis_type_defs.h:133
float imag
Definition: blis_type_defs.h:134

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

Referenced by FLA_Tridiag_UT_realify_subdiagonal().