38{
39 double* d1p;
40 double* e1p;
41 double* d2p;
42 double wilkshift;
44 int ij_cand;
45 double dist_cand;
46 double pshift_cand;
47
48 d1p = buff_d + (m_d-2)*inc_d;
49 e1p = buff_e + (m_d-2)*inc_e;
50 d2p = buff_d + (m_d-1)*inc_d;
51
52 if ( *buff_ls == -1 )
53 {
54 *ij_shift = -1;
55 return FLA_FAILURE;
56 }
57
59 *e1p,
60 *d2p,
61 &wilkshift );
62
63
64
65
66
67
68
69
70
71
72
73
74 ij_cand = -1;
75
76
77 for (
i = 0;
i < m_l; ++
i )
78 {
79 int* status = buff_ls + (
i )*inc_ls;
80
81 if ( *status == 0 )
82 {
83 double* lambda1 = buff_l + (
i )*inc_l;
85 pshift_cand = *lambda1;
86 dist_cand = fabs( wilkshift - pshift_cand );
87 }
88 }
89
90 if ( ij_cand == -1 )
91 {
92 *ij_shift = -1;
93 *buff_ls = -1;
94 return FLA_FAILURE;
95 }
96
97
98
99 for (
i = 0;
i < m_l; ++
i )
100 {
101 double* lambda1 = buff_l + (
i )*inc_l;
102 int* status = buff_ls + (
i )*inc_ls;
103 double dist = fabs( wilkshift - *lambda1 );
104
105 if ( *status == 1 ) continue;
106
107 if ( dist < dist_cand )
108 {
110 pshift_cand = *lambda1;
111 dist_cand = dist;
112 }
113 }
114
115 *ij_shift = ij_cand;
116
117 return FLA_SUCCESS;
118}
FLA_Error FLA_Wilkshift_tridiag_opd(double delta1, double epsilon, double delta2, double *kappa)
Definition FLA_Wilkshift_tridiag.c:155
int i
Definition bl1_axmyv2.c:145