libflame revision_anchor
Functions
FLA_Tevd_iteracc_v_opt_var1.c File Reference

(r)

Functions

FLA_Error FLA_Tevd_iteracc_v_ops_var1 (int m_A, int n_G, int ijTL, float *buff_d, int inc_d, float *buff_e, int inc_e, scomplex *buff_G, int rs_G, int cs_G, int *n_iter_perf)
 
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)
 

Function Documentation

◆ FLA_Tevd_iteracc_v_opd_var1()

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 
)
33{
35 int i, k;
36 int k_iter = 0;
37 int n_deflations = 0;
38
39 // Iterate from back to front until all that is left is a 2x2.
40 for ( i = m_A - 1; i > 1; --i )
41 {
43 int m_ATL = i + 1;
44 int k_left = n_G - k_iter;
45
46 /*------------------------------------------------------------*/
47
48 // Search for an eigenvalue of ATL submatrix until
49 // (a) deflation occurs, or
50 // (b) we perform the maximum number of additional iterations
51 // that are allowed within the current sweep
52 // (ie: n_G - k_iter).
54 k_left,
55 G1, rs_G, cs_G,
58 &k );
59
60 // Update local counters according to the results of the eigenvalue
61 // search.
62 k_iter += k;
63 n_deflations += 1;
64
65 // If the eigenvalue search did not result in any deflation, return.
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
72 return n_deflations-1;
73 }
74
75#ifdef PRINTF
76 if ( r_val == i )
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 // If the most recent eigenvalue search put us at our limit
83 // for accumulated Givens rotation sets, return.
84 if ( k_iter == n_G )
85 {
87 return n_deflations;
88 }
89
90
91 // If r_val != i, then a split occurred somewhere within submatrix
92 // ATL. Therefore, we must recurse with two subproblems.
93 if ( r_val != i )
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;
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
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
144 }
145
146 /*------------------------------------------------------------*/
147 }
148
149 // Skip 1x1 matrices (and submatrices) entirely.
150 if ( m_A > 1 )
151 {
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 // Find the eigenvalue decomposition of the remaining (or only) 2x2
164 // submatrix.
166 alpha21,
167 alpha22,
168 &lambda1,
169 &lambda2,
170 &gamma,
171 &sigma );
172
173 // Store the eigenvalues.
174 *alpha11 = lambda1;
175 *alpha22 = lambda2;
176
177 // Zero out the remaining subdiagonal element.
178 *alpha21 = 0.0;
179
180 // Store the rotation.
181 g1[0].real = gamma;
182 g1[0].imag = sigma;
183
184
185 // Update the local counters.
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
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

References FLA_Hevv_2x2_opd(), FLA_Tevd_eigval_v_opd_var1(), FLA_Tevd_iteracc_v_opd_var1(), and i.

Referenced by FLA_Tevd_iteracc_v_opd_var1(), FLA_Tevd_v_opd_var1(), FLA_Tevd_v_opd_var2(), FLA_Tevd_v_opz_var1(), and FLA_Tevd_v_opz_var2().

◆ FLA_Tevd_iteracc_v_ops_var1()

FLA_Error FLA_Tevd_iteracc_v_ops_var1 ( int  m_A,
int  n_G,
int  ijTL,
float buff_d,
int  inc_d,
float buff_e,
int  inc_e,
scomplex buff_G,
int  rs_G,
int  cs_G,
int n_iter_perf 
)
22{
23 return FLA_SUCCESS;
24}

References i.