33{
36 int k_iter = 0;
37 int n_deflations = 0;
38
39
40 for (
i = m_A - 1;
i > 1; --
i )
41 {
42 dcomplex* G1 = buff_G + (k_iter)*cs_G;
44 int k_left = n_G - k_iter;
45
46
47
48
49
50
51
52
54 k_left,
55 G1, rs_G, cs_G,
56 buff_d, inc_d,
57 buff_e, inc_e,
58 &k );
59
60
61
62 k_iter += k;
63 n_deflations += 1;
64
65
66 if ( r_val == FLA_FAILURE )
67 {
68#ifdef PRINTF
69 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 );
70#endif
71 *n_iter_perf = k_iter;
72 return n_deflations-1;
73 }
74
75#ifdef PRINTF
77 printf( "FLA_Tevd_iteracc_v_opd_var1: 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 );
78 else
79 printf( "FLA_Tevd_iteracc_v_opd_var1: 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 );
80#endif
81
82
83
84 if ( k_iter == n_G )
85 {
86 *n_iter_perf = k_iter;
87 return n_deflations;
88 }
89
90
91
92
94 {
95 int m_TLr = r_val + 1;
96 int m_BRr = m_ATL - m_TLr;
97 int ijTLr = 0;
98 int ijBRr = m_TLr;
99 int n_Gr = n_G - k_iter;
100 double* dTL = buff_d + (0 )*inc_d;
101 double* eTL = buff_e + (0 )*inc_e;
102 dcomplex* GT = buff_G + (0 )*rs_G + (k_iter)*cs_G;
103 double* dBR = buff_d + (ijBRr)*inc_d;
104 double* eBR = buff_e + (ijBRr)*inc_e;
105 dcomplex* GB = buff_G + (ijBRr)*rs_G + (k_iter)*cs_G;
106
107 int n_deflationsTL;
108 int n_deflationsBR;
109 int n_iter_perfTL;
110 int n_iter_perfBR;
111
112#ifdef PRINTF
113printf( "FLA_Tevd_iteracc_v_opd_var1: Internal deflation in col %d\n", ijTL+r_val );
114printf( "FLA_Tevd_iteracc_v_opd_var1: alpha11 = %23.19e\n", buff_d[r_val*inc_d] );
115printf( "FLA_Tevd_iteracc_v_opd_var1: alpha21 alpha22 = %23.19e %23.19e\n", buff_e[r_val*inc_e], buff_d[(r_val+1)*inc_d] );
116#endif
117#ifdef PRINTF
118printf( "FLA_Tevd_iteracc_v_opd_var1: recursing: m_TLr m_BRr: %d %d\n", m_TLr, m_BRr );
119printf( "FLA_Tevd_iteracc_v_opd_var1: ijTLr ijBRr: %d %d\n", ijTLr, ijBRr );
120printf( "FLA_Tevd_iteracc_v_opd_var1: GB(0,0) i,j: %d %d\n", ijTL + m_TLr+1, k_iter );
121#endif
123 n_Gr,
124 ijTL + ijTLr,
125 dTL, inc_d,
126 eTL, inc_e,
127 GT, rs_G, cs_G,
128 &n_iter_perfTL );
130 n_Gr,
131 ijTL + ijBRr,
132 dBR, inc_d,
133 eBR, inc_e,
134 GB, rs_G, cs_G,
135 &n_iter_perfBR );
136
137 *n_iter_perf = k_iter + max( n_iter_perfTL, n_iter_perfBR );
138
139#ifdef PRINTF
140printf( "FLA_Tevd_iteracc_v_opd_var1: num deflations: %d = (prev:%d, TL:%d, BR:%d)\n", n_deflations + n_deflationsTL + n_deflationsBR, n_deflations, n_deflationsTL, n_deflationsBR );
141printf( "FLA_Tevd_iteracc_v_opd_var1: num iterations: %d = (prev:%d, TL:%d, BR:%d)\n", *n_iter_perf, k_iter, n_iter_perfTL, n_iter_perfBR );
142#endif
143 return n_deflations + n_deflationsTL + n_deflationsBR;
144 }
145
146
147 }
148
149
150 if ( m_A > 1 )
151 {
152 dcomplex* g1 = buff_G + (k_iter)*cs_G;
153
154 double* alpha11 = buff_d + (0 )*inc_d;
155 double* alpha21 = buff_e + (0 )*inc_e;
156 double* alpha22 = buff_d + (1 )*inc_d;
157 double lambda1;
158 double lambda2;
159
160 double gamma;
161 double sigma;
162
163
164
166 alpha21,
167 alpha22,
168 &lambda1,
169 &lambda2,
170 &gamma,
171 &sigma );
172
173
174 *alpha11 = lambda1;
175 *alpha22 = lambda2;
176
177
178 *alpha21 = 0.0;
179
180
183
184
185
186 k_iter += 1;
187 n_deflations += 1;
188
189#ifdef PRINTF
190printf( "FLA_Tevd_iteracc_v_opd_var1: 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 );
191printf( "FLA_Tevd_iteracc_v_opd_var1: 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 );
192#endif
193 }
194
195
196 *n_iter_perf = k_iter;
197 return n_deflations;
198}
FLA_Error FLA_Tevd_eigval_v_opd_var1(int m_A, int n_G, dcomplex *buff_G, int rs_G, int cs_G, double *buff_d, int inc_d, double *buff_e, int inc_e, int *n_iter)
Definition FLA_Tevd_eigval_v_opt_var1.c:87
FLA_Error FLA_Tevd_iteracc_v_opd_var1(int m_A, int n_G, int ijTL, double *buff_d, int inc_d, double *buff_e, int inc_e, dcomplex *buff_G, int rs_G, int cs_G, int *n_iter_perf)
Definition FLA_Tevd_iteracc_v_opt_var1.c:26
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