libflame revision_anchor
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 )
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
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
int FLA_Error
Definition FLA_type_defs.h:47

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

◆ 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 )
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}
FLA_Obj FLA_ZERO
Definition FLA_Init.c:20
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
double *restrict alpha1
Definition bl1_axpyv2bdotaxpy.c:198
bl1_zscals(beta, rho_yz)
void bl1_dsetv(int m, double *sigma, double *x, int incx)
Definition bl1_setv.c:39
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 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, dcomplex::imag, and scomplex::imag.

Referenced by FLA_Bidiag_UT_realify_diagonals().