41{
44 int k_iter = 0;
45 int n_deflations = 0;
46
47
48
49
50
51 for (
i = m_A - 1;
i > 1; --
i )
52 {
53 dcomplex* G1 = buff_G + (k_iter)*cs_G;
55 int k_left = n_G - k_iter;
56
57
58
59
60
61
62
63
64
66 m_U,
67 k_left,
68
69 G1, rs_G, cs_G,
70 buff_d, inc_d,
71 buff_e, inc_e,
72 buff_l, inc_l,
73 buff_ls, inc_ls,
74 buff_pu, inc_pu,
75 &k );
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133 if ( r_val == FLA_FAILURE && k_iter == n_G )
134 {
135#ifdef PRINTF
136 printf(
"FLA_Tevd_iteracc_v_opd_var1: failed to converge (m_A11 = %d) after %2d iters k_total=%d/%d\n",
i, k, k_iter, n_G );
137#endif
138 *n_iter_perf = k_iter;
139 return n_deflations;
140 }
141
142
143
144 k_iter += k;
145 n_deflations += 1;
146
147
148#ifdef PRINTF
150 printf( "FLA_Tevd_iteracc_v_opd_var3: found eig %22.15e in col %3d (n=%d) after %2d iters k_total=%d/%d\n", buff_d[ r_val*inc_d ], ijTL+r_val, m_ATL, k, k_iter, n_G );
151 else
152 printf( "FLA_Tevd_iteracc_v_opd_var3: split occurred in col %3d (n=%d) after %2d iters k_total=%d/%d\n", ijTL+r_val, m_ATL, k, k_iter, n_G );
153#endif
154
155
156
157 if ( k_iter == n_G )
158 {
159 *n_iter_perf = k_iter;
160 return n_deflations;
161 }
162
163
164
165
167 {
168 int m_TLr = r_val + 1;
169 int m_BRr = m_ATL - m_TLr;
170 int ijTLr = 0;
171 int ijBRr = m_TLr;
172 int n_Gr = n_G - k_iter;
173 double* dTL = buff_d + (0 )*inc_d;
174 double* eTL = buff_e + (0 )*inc_e;
175 double* puTL = buff_pu+ (0 )*inc_pu;
176 dcomplex* GT = buff_G + (0 )*rs_G + (k_iter)*cs_G;
177 double* dBR = buff_d + (ijBRr)*inc_d;
178 double* eBR = buff_e + (ijBRr)*inc_e;
179 double* puBR = buff_pu+ (ijBRr)*inc_pu;
180 dcomplex* GB = buff_G + (ijBRr)*rs_G + (k_iter)*cs_G;
181
182 int n_deflationsTL;
183 int n_deflationsBR;
184 int n_iter_perfTL;
185 int n_iter_perfBR;
186
187#ifdef PRINTF
188printf( "FLA_Tevd_iteracc_v_opd_var3: Internal deflation in col %d\n", ijTL+r_val );
189printf( "FLA_Tevd_iteracc_v_opd_var3: alpha11 = %23.19e\n", buff_d[r_val*inc_d] );
190printf( "FLA_Tevd_iteracc_v_opd_var3: alpha21 alpha22 = %23.19e %23.19e\n", buff_e[r_val*inc_e], buff_d[(r_val+1)*inc_d] );
191#endif
192#ifdef PRINTF
193printf( "FLA_Tevd_iteracc_v_opd_var3: recursing: m_TLr m_BRr: %d %d\n", m_TLr, m_BRr );
194printf( "FLA_Tevd_iteracc_v_opd_var3: ijTLr ijBRr: %d %d\n", ijTLr, ijBRr );
195printf( "FLA_Tevd_iteracc_v_opd_var3: GB(0,0) i,j: %d %d\n", ijTL + m_TLr+1, k_iter );
196#endif
198 m_U,
199 n_Gr,
200 ijTL + ijTLr,
201 dTL, inc_d,
202 eTL, inc_e,
203 buff_l, inc_l,
204 buff_ls, inc_ls,
205 puTL, inc_pu,
206 GT, rs_G, cs_G,
207 &n_iter_perfTL );
209 m_U,
210 n_Gr,
211 ijTL + ijBRr,
212 dBR, inc_d,
213 eBR, inc_e,
214 buff_l, inc_l,
215 buff_ls, inc_ls,
216 puBR, inc_pu,
217 GB, rs_G, cs_G,
218 &n_iter_perfBR );
219
220 *n_iter_perf = k_iter + max( n_iter_perfTL, n_iter_perfBR );
221
222#ifdef PRINTF
223printf( "FLA_Tevd_iteracc_v_opd_var3: num deflations: %d = (prev:%d, TL:%d, BR:%d)\n", n_deflations + n_deflationsTL + n_deflationsBR, n_deflations, n_deflationsTL, n_deflationsBR );
224printf( "FLA_Tevd_iteracc_v_opd_var3: num iterations: %d = (prev:%d, TL:%d, BR:%d)\n", *n_iter_perf, k_iter, n_iter_perfTL, n_iter_perfBR );
225#endif
226 return n_deflations + n_deflationsTL + n_deflationsBR;
227 }
228
229
230 }
231
232
233 if ( m_A > 1 )
234 {
235 dcomplex* g1 = buff_G + (k_iter)*cs_G;
236
237 double* alpha11 = buff_d + (0 )*inc_d;
238 double* alpha21 = buff_e + (0 )*inc_e;
239 double* alpha22 = buff_d + (1 )*inc_d;
240 double lambda1;
241 double lambda2;
242
243 double gamma;
244 double sigma;
245
246
247
249 alpha21,
250 alpha22,
251 &lambda1,
252 &lambda2,
253 &gamma,
254 &sigma );
255
256
257 *alpha11 = lambda1;
258 *alpha22 = lambda2;
259
260
261 *alpha21 = 0.0;
262
263
266
267
268
269 k_iter += 1;
270 n_deflations += 1;
271
272#ifdef PRINTF
273printf( "FLA_Tevd_iteracc_v_opd_var3: Hevv eig %22.15e in col %3d (n=%d) after %2d iters k_total=%d/%d\n", buff_d[ 1*inc_d ], ijTL+1, 2, 1, k_iter, n_G );
274printf( "FLA_Tevd_iteracc_v_opd_var3: Hevv eig %22.15e in col %3d (n=%d) after %2d iters k_total=%d/%d\n", buff_d[ 0*inc_d ], ijTL+0, 2, 0, k_iter, n_G );
275#endif
276 }
277
278
279 *n_iter_perf = k_iter;
280 return n_deflations;
281}
FLA_Error FLA_Tevd_eigval_v_opd_var3(int m_A, int m_U, int n_G, dcomplex *buff_G, int rs_G, int cs_G, double *buff_d, int inc_d, double *buff_e, int inc_e, double *buff_l, int inc_l, int *buff_ls, int inc_ls, double *buff_pu, int inc_pu, int *n_iter)
Definition FLA_Tevd_eigval_v_opt_var3.c:30
FLA_Error FLA_Tevd_iteracc_v_opd_var3(int m_A, int m_U, int n_G, int ijTL, double *buff_d, int inc_d, double *buff_e, int inc_e, double *buff_l, int inc_l, int *buff_ls, int inc_ls, double *buff_pu, int inc_pu, dcomplex *buff_G, int rs_G, int cs_G, int *n_iter_perf)
Definition FLA_Tevd_iteracc_v_opt_var3.c:30
int FLA_Error
Definition FLA_type_defs.h:47
FLA_Error FLA_Hevv_2x2_opd(double *alpha11, double *alpha21, double *alpha22, double *lambda1, double *lambda2, double *gamma1, double *sigma1)
Definition FLA_Hevv_2x2.c:249
int i
Definition bl1_axmyv2.c:145
Definition blis_type_defs.h:138
double real
Definition blis_type_defs.h:139
double imag
Definition blis_type_defs.h:139