35 #ifndef TEMPLATE_LAPACK_LARRF_HEADER
36 #define TEMPLATE_LAPACK_LARRF_HEADER
42 Treal *wgap, Treal *werr, Treal *spdiam, Treal *
43 clgapl, Treal *clgapr, Treal *pivmin, Treal *sigma,
44 Treal *dplus, Treal *lplus, Treal *work,
integer *info)
48 Treal d__1, d__2, d__3;
52 Treal s, bestshift, smlgrowth, eps, tmp, max1, max2, rrr1, rrr2,
53 znm2, growthbound, fail, fact, oldp;
57 Treal fail2, avgap, ldmax, rdmax;
62 Treal mingap, lsigma, rdelta;
65 logical sawnan1, sawnan2, tryrrr1;
206 clwdth = (d__1 = w[*clend] - w[*clstrt],
absMACRO(d__1)) + werr[*clend] + werr[
208 avgap = clwdth / (Treal) (*clend - *clstrt);
212 d__1 = w[*clstrt], d__2 = w[*clend];
213 lsigma =
minMACRO(d__1,d__2) - werr[*clstrt];
215 d__1 = w[*clstrt], d__2 = w[*clend];
216 rsigma =
maxMACRO(d__1,d__2) + werr[*clend];
218 lsigma -=
absMACRO(lsigma) * 4. * eps;
219 rsigma +=
absMACRO(rsigma) * 4. * eps;
221 ldmax = mingap * .25 + *pivmin * 2.;
222 rdmax = mingap * .25 + *pivmin * 2.;
224 d__1 = avgap, d__2 = wgap[*clstrt];
225 ldelta =
maxMACRO(d__1,d__2) / fact;
227 d__1 = avgap, d__2 = wgap[*clend - 1];
228 rdelta =
maxMACRO(d__1,d__2) / fact;
234 fail = (Treal) (*n - 1) * mingap / (*spdiam * eps);
240 growthbound = *spdiam * 8.;
251 dplus[1] = d__[1] + s;
253 dplus[1] = -(*pivmin);
260 for (i__ = 1; i__ <= i__1; ++i__) {
261 lplus[i__] = ld[i__] / dplus[i__];
262 s = s * lplus[i__] * l[i__] - lsigma;
263 dplus[i__ + 1] = d__[i__ + 1] + s;
264 if ((d__1 = dplus[i__ + 1],
absMACRO(d__1)) < *pivmin) {
265 dplus[i__ + 1] = -(*pivmin);
271 d__2 = max1, d__3 = (d__1 = dplus[i__ + 1],
absMACRO(d__1));
276 if (forcer || ( max1 <= growthbound && ! sawnan1 ) ) {
283 work[1] = d__[1] + s;
285 work[1] = -(*pivmin);
292 for (i__ = 1; i__ <= i__1; ++i__) {
293 work[*n + i__] = ld[i__] / work[i__];
294 s = s * work[*n + i__] * l[i__] - rsigma;
295 work[i__ + 1] = d__[i__ + 1] + s;
296 if ((d__1 = work[i__ + 1],
absMACRO(d__1)) < *pivmin) {
297 work[i__ + 1] = -(*pivmin);
303 d__2 = max2, d__3 = (d__1 = work[i__ + 1],
absMACRO(d__1));
308 if (forcer || ( max2 <= growthbound && ! sawnan2 ) ) {
315 if (sawnan1 && sawnan2) {
321 if (max1 <= smlgrowth) {
327 if (sawnan1 || max2 <= max1) {
330 if (max2 <= smlgrowth) {
341 if (clwdth < mingap / 128. &&
minMACRO(max1,max2) < fail2 && ! sawnan1 && !
348 if (tryrrr1 && dorrr1) {
350 tmp = (d__1 = dplus[*n],
absMACRO(d__1));
354 for (i__ = *n - 1; i__ >= 1; --i__) {
356 prod = dplus[i__ + 1] * work[*n + i__ + 1] / (dplus[i__] *
357 work[*n + i__]) * oldp;
359 prod *= (d__1 = work[*n + i__],
absMACRO(d__1));
366 d__2 = tmp, d__3 = (d__1 = dplus[i__] * prod,
absMACRO(d__1));
376 }
else if (indx == 2) {
377 tmp = (d__1 = work[*n],
absMACRO(d__1));
381 for (i__ = *n - 1; i__ >= 1; --i__) {
383 prod = work[i__ + 1] * lplus[i__ + 1] / (work[i__] *
386 prod *= (d__1 = lplus[i__],
absMACRO(d__1));
393 d__2 = tmp, d__3 = (d__1 = work[i__] * prod,
absMACRO(d__1));
410 d__1 = lsigma - ldelta, d__2 = lsigma - ldmax;
413 d__1 = rsigma + rdelta, d__2 = rsigma + rdmax;
422 if (smlgrowth < fail || nofail) {
434 }
else if (shift == 2) {