40{
42 double eps;
43 double safmin;
44 double* e_last;
45 double* d_last;
46 double* d_last_m1;
47 double shift;
48 int ij_shift;
49 int k;
50 int n_iter_allowed = n_G;
51
52
55
56
57
58 e_last = &buff_e[ (m_A-2)*inc_e ];
59 d_last_m1 = &buff_d[ (m_A-2)*inc_d ];
60 d_last = &buff_d[ (m_A-1)*inc_d ];
61
62
63 for ( k = 0; k < n_iter_allowed; ++k )
64 {
66
67
68
69
70
71
72
73
74
75
76
77 if ( MAC_Tevd_eigval_converged_opd( eps, safmin, *d_last_m1, *e_last, *d_last ) )
78 {
79 *e_last = 0.0;
80 *n_iter = k;
81 return m_A - 1;
82 }
83
85 m_U,
86 buff_d, inc_d,
87 buff_e, inc_e,
88 buff_l, inc_l,
89 buff_ls, inc_ls,
90 buff_pu, inc_pu,
91 &ij_shift );
92
93 if ( ij_shift == -1 )
94 {
96 *e_last,
97 *d_last,
98 &shift );
99 }
100 else
101 {
102 shift = buff_l[ ij_shift*inc_l ];
103 }
104
105
107 &shift,
108 g1, rs_G,
109 buff_d, inc_d,
110 buff_e, inc_e );
111
112 if ( ij_shift >= 0 &&
113 MAC_Tevd_eigval_converged_opd( eps, safmin, *d_last_m1, *e_last, *d_last ) )
114 {
115 buff_ls[ ij_shift * inc_ls ] = 1;
116 *e_last = 0.0;
117 *n_iter = k + 1;
118 return m_A - 1;
119 }
120
121
122 if ( r_val != FLA_SUCCESS )
123 {
124#ifdef PRINTF
125 printf( "FLA_Tevd_eigval_v_opt_var3: Internal deflation in col %d, eig %d\n", r_val, m_A - 1 );
126 printf( "FLA_Tevd_eigval_v_opt_var3: alpha11 = %23.19e\n", buff_d[r_val*inc_d] );
127 printf( "FLA_Tevd_eigval_v_opt_var3: alpha21 alpha22 = %23.19e %23.19e\n", buff_e[r_val*inc_e], buff_d[(r_val+1)*inc_d] );
128#endif
129
130
131 buff_e[ r_val*inc_e ] = 0.0;
132
133 *n_iter = k + 1;
134 return r_val;
135 }
136
137
138 }
139
140 *n_iter = n_iter_allowed;
141 return FLA_FAILURE;
142}
FLA_Error FLA_Tevd_find_perfshift_opd(int m_d, int m_l, 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 *ij_shift)
Definition FLA_Tevd_find_perfshift.c:30
FLA_Error FLA_Tevd_francis_v_opd_var1(int m_A, double *buff_shift, dcomplex *buff_g, int inc_g, double *buff_d, int inc_d, double *buff_e, int inc_e)
Definition FLA_Tevd_francis_v_opt_var1.c:81
int FLA_Error
Definition FLA_type_defs.h:47
double FLA_Mach_params_opd(FLA_Machval machval)
Definition FLA_Mach_params.c:74
FLA_Error FLA_Wilkshift_tridiag_opd(double delta1, double epsilon, double delta2, double *kappa)
Definition FLA_Wilkshift_tridiag.c:155
Definition blis_type_defs.h:138