37 #ifndef TEMPLATE_LAPACK_LARRF_HEADER
38 #define TEMPLATE_LAPACK_LARRF_HEADER
44 Treal *wgap, Treal *werr, Treal *spdiam, Treal *
45 clgapl, Treal *clgapr, Treal *pivmin, Treal *sigma,
46 Treal *dplus, Treal *lplus, Treal *work,
integer *info)
50 Treal d__1, d__2, d__3;
54 Treal s, bestshift, smlgrowth, eps, tmp, max1, max2, rrr1, rrr2,
55 znm2, growthbound, fail, fact, oldp;
59 Treal fail2, avgap, ldmax, rdmax;
64 Treal mingap, lsigma, rdelta;
67 logical sawnan1, sawnan2, tryrrr1;
208 clwdth = (d__1 = w[*clend] - w[*clstrt],
absMACRO(d__1)) + werr[*clend] + werr[
210 avgap = clwdth / (Treal) (*clend - *clstrt);
214 d__1 = w[*clstrt], d__2 = w[*clend];
215 lsigma =
minMACRO(d__1,d__2) - werr[*clstrt];
217 d__1 = w[*clstrt], d__2 = w[*clend];
218 rsigma =
maxMACRO(d__1,d__2) + werr[*clend];
220 lsigma -=
absMACRO(lsigma) * 4. * eps;
221 rsigma +=
absMACRO(rsigma) * 4. * eps;
223 ldmax = mingap * .25 + *pivmin * 2.;
224 rdmax = mingap * .25 + *pivmin * 2.;
226 d__1 = avgap, d__2 = wgap[*clstrt];
227 ldelta =
maxMACRO(d__1,d__2) / fact;
229 d__1 = avgap, d__2 = wgap[*clend - 1];
230 rdelta =
maxMACRO(d__1,d__2) / fact;
236 fail = (Treal) (*n - 1) * mingap / (*spdiam * eps);
242 growthbound = *spdiam * 8.;
253 dplus[1] = d__[1] + s;
255 dplus[1] = -(*pivmin);
262 for (i__ = 1; i__ <= i__1; ++i__) {
263 lplus[i__] = ld[i__] / dplus[i__];
264 s = s * lplus[i__] * l[i__] - lsigma;
265 dplus[i__ + 1] = d__[i__ + 1] + s;
266 if ((d__1 = dplus[i__ + 1],
absMACRO(d__1)) < *pivmin) {
267 dplus[i__ + 1] = -(*pivmin);
273 d__2 = max1, d__3 = (d__1 = dplus[i__ + 1],
absMACRO(d__1));
278 if (forcer || ( max1 <= growthbound && ! sawnan1 ) ) {
285 work[1] = d__[1] + s;
287 work[1] = -(*pivmin);
294 for (i__ = 1; i__ <= i__1; ++i__) {
295 work[*n + i__] = ld[i__] / work[i__];
296 s = s * work[*n + i__] * l[i__] - rsigma;
297 work[i__ + 1] = d__[i__ + 1] + s;
298 if ((d__1 = work[i__ + 1],
absMACRO(d__1)) < *pivmin) {
299 work[i__ + 1] = -(*pivmin);
305 d__2 = max2, d__3 = (d__1 = work[i__ + 1],
absMACRO(d__1));
310 if (forcer || ( max2 <= growthbound && ! sawnan2 ) ) {
317 if (sawnan1 && sawnan2) {
323 if (max1 <= smlgrowth) {
329 if (sawnan1 || max2 <= max1) {
332 if (max2 <= smlgrowth) {
343 if (clwdth < mingap / 128. &&
minMACRO(max1,max2) < fail2 && ! sawnan1 && !
350 if (tryrrr1 && dorrr1) {
352 tmp = (d__1 = dplus[*n],
absMACRO(d__1));
356 for (i__ = *n - 1; i__ >= 1; --i__) {
358 prod = dplus[i__ + 1] * work[*n + i__ + 1] / (dplus[i__] *
359 work[*n + i__]) * oldp;
361 prod *= (d__1 = work[*n + i__],
absMACRO(d__1));
368 d__2 = tmp, d__3 = (d__1 = dplus[i__] * prod,
absMACRO(d__1));
378 }
else if (indx == 2) {
379 tmp = (d__1 = work[*n],
absMACRO(d__1));
383 for (i__ = *n - 1; i__ >= 1; --i__) {
385 prod = work[i__ + 1] * lplus[i__ + 1] / (work[i__] *
388 prod *= (d__1 = lplus[i__],
absMACRO(d__1));
395 d__2 = tmp, d__3 = (d__1 = work[i__] * prod,
absMACRO(d__1));
412 d__1 = lsigma - ldelta, d__2 = lsigma - ldmax;
415 d__1 = rsigma + rdelta, d__2 = rsigma + rdmax;
424 if (smlgrowth < fail || nofail) {
436 }
else if (shift == 2) {