35 #ifndef TEMPLATE_LAPACK_LASQ2_HEADER
36 #define TEMPLATE_LAPACK_LASQ2_HEADER
53 Treal dn1, dn2, dee, eps, tau, tol;
58 Treal dmin__, emin, emax;
60 Treal qmin, temp, qmax, zmax;
64 Treal desig,
trace, sigma;
180 }
else if (*n == 0) {
182 }
else if (*n == 1) {
191 }
else if (*n == 2) {
195 if (z__[2] < 0. || z__[3] < 0.) {
199 }
else if (z__[3] > z__[1]) {
204 z__[5] = z__[1] + z__[2] + z__[3];
205 if (z__[2] > z__[3] * tol2) {
206 t = (z__[1] - z__[3] + z__[2]) * .5;
207 s = z__[3] * (z__[2] / t);
213 t = z__[1] + (s + z__[2]);
214 z__[3] *= z__[1] / t;
218 z__[6] = z__[2] + z__[1];
231 i__1 = ( *n - 1 ) << 1;
232 for (k = 1; k <= i__1; k += 2) {
237 }
else if (z__[k + 1] < 0.) {
245 d__1 = qmax, d__2 = z__[k];
248 d__1 = emin, d__2 = z__[k + 1];
251 d__1 =
maxMACRO(qmax,zmax), d__2 = z__[k + 1];
255 if (z__[(*n << 1) - 1] < 0.) {
256 *info = -((*n << 1) + 199);
260 d__ += z__[(*n << 1) - 1];
262 d__1 = qmax, d__2 = z__[(*n << 1) - 1];
270 for (k = 2; k <= i__1; ++k) {
271 z__[k] = z__[(k << 1) - 1];
275 z__[(*n << 1) - 1] = d__;
284 z__[(*n << 1) - 1] = 0.;
290 ieee =
template_lapack_ilaenv(&c__10,
"DLASQ2",
"N", &c__1, &c__2, &c__3, &c__4, (
ftnlen)6, (
ftnlen)1) == 1 &&
template_lapack_ilaenv(&c__11,
"DLASQ2",
"N", &c__1, &c__2,
295 for (k = *n << 1; k >= 2; k += -2) {
297 z__[(k << 1) - 1] = z__[k];
298 z__[(k << 1) - 2] = 0.;
299 z__[(k << 1) - 3] = z__[k - 1];
308 if (z__[(i0 << 2) - 3] * 1.5 < z__[(n0 << 2) - 3]) {
309 ipn4 = ( i0 + n0 ) << 2;
310 i__1 = ( i0 + n0 - 1 ) << 1;
311 for (i4 = i0 << 2; i4 <= i__1; i4 += 4) {
313 z__[i4 - 3] = z__[ipn4 - i4 - 3];
314 z__[ipn4 - i4 - 3] = temp;
316 z__[i4 - 1] = z__[ipn4 - i4 - 5];
317 z__[ipn4 - i4 - 5] = temp;
326 for (k = 1; k <= 2; ++k) {
328 d__ = z__[(n0 << 2) + pp - 3];
329 i__1 = (i0 << 2) + pp;
330 for (i4 = ( ( n0 - 1 ) << 2) + pp; i4 >= i__1; i4 += -4) {
331 if (z__[i4 - 1] <= tol2 * d__) {
335 d__ = z__[i4 - 3] * (d__ / (d__ + z__[i4 - 1]));
342 emin = z__[(i0 << 2) + pp + 1];
343 d__ = z__[(i0 << 2) + pp - 3];
344 i__1 = ( ( n0 - 1 ) << 2) + pp;
345 for (i4 = (i0 << 2) + pp; i4 <= i__1; i4 += 4) {
346 z__[i4 - (pp << 1) - 2] = d__ + z__[i4 - 1];
347 if (z__[i4 - 1] <= tol2 * d__) {
349 z__[i4 - (pp << 1) - 2] = d__;
350 z__[i4 - (pp << 1)] = 0.;
352 }
else if (safmin * z__[i4 + 1] < z__[i4 - (pp << 1) - 2] &&
353 safmin * z__[i4 - (pp << 1) - 2] < z__[i4 + 1]) {
354 temp = z__[i4 + 1] / z__[i4 - (pp << 1) - 2];
355 z__[i4 - (pp << 1)] = z__[i4 - 1] * temp;
358 z__[i4 - (pp << 1)] = z__[i4 + 1] * (z__[i4 - 1] / z__[i4 - (
360 d__ = z__[i4 + 1] * (d__ / z__[i4 - (pp << 1) - 2]);
363 d__1 = emin, d__2 = z__[i4 - (pp << 1)];
367 z__[(n0 << 2) - pp - 2] = d__;
371 qmax = z__[(i0 << 2) - pp - 2];
372 i__1 = (n0 << 2) - pp - 2;
373 for (i4 = (i0 << 2) - pp + 2; i4 <= i__1; i4 += 4) {
375 d__1 = qmax, d__2 = z__[i4];
399 ndiv = ( n0 - i0 ) << 1;
402 for (iwhila = 1; iwhila <= i__1; ++iwhila) {
416 sigma = -z__[(n0 << 2) - 1];
428 emin = (d__1 = z__[(n0 << 2) - 5],
absMACRO(d__1));
432 qmin = z__[(n0 << 2) - 3];
434 for (i4 = n0 << 2; i4 >= 8; i4 += -4) {
435 if (z__[i4 - 5] <= 0.) {
438 if (qmin >= emax * 4.) {
440 d__1 = qmin, d__2 = z__[i4 - 3];
443 d__1 = emax, d__2 = z__[i4 - 5];
447 d__1 = qmax, d__2 = z__[i4 - 7] + z__[i4 - 5];
450 d__1 = emin, d__2 = z__[i4 - 5];
461 dee = z__[(i0 << 2) - 3];
464 i__2 = (n0 << 2) - 3;
465 for (i4 = (i0 << 2) + 1; i4 <= i__2; i4 += 4) {
466 dee = z__[i4] * (dee / (dee + z__[i4 - 2]));
473 if ( ( kmin - i0 ) << 1 < n0 - kmin && deemin <= z__[(n0 << 2) - 3] *
475 ipn4 = ( i0 + n0 ) << 2;
477 i__2 = ( i0 + n0 - 1 ) << 1;
478 for (i4 = i0 << 2; i4 <= i__2; i4 += 4) {
480 z__[i4 - 3] = z__[ipn4 - i4 - 3];
481 z__[ipn4 - i4 - 3] = temp;
483 z__[i4 - 2] = z__[ipn4 - i4 - 2];
484 z__[ipn4 - i4 - 2] = temp;
486 z__[i4 - 1] = z__[ipn4 - i4 - 5];
487 z__[ipn4 - i4 - 5] = temp;
489 z__[i4] = z__[ipn4 - i4 - 4];
490 z__[ipn4 - i4 - 4] = temp;
508 nbig = (n0 - i0 + 1) * 30;
510 for (iwhilb = 1; iwhilb <= i__2; ++iwhilb) {
518 nfail, &iter, &ndiv, &ieee, &ttype, &dmin1, &dmin2, &dn, &
519 dn1, &dn2, &g, &tau);
525 if (pp == 0 && n0 - i0 >= 3) {
526 if (z__[n0 * 4] <= tol2 * qmax || z__[(n0 << 2) - 1] <= tol2 *
529 qmax = z__[(i0 << 2) - 3];
530 emin = z__[(i0 << 2) - 1];
531 oldemn = z__[i0 * 4];
532 i__3 = ( n0 - 3 ) << 2;
533 for (i4 = i0 << 2; i4 <= i__3; i4 += 4) {
534 if (z__[i4] <= tol2 * z__[i4 - 3] || z__[i4 - 1] <=
536 z__[i4 - 1] = -sigma;
540 oldemn = z__[i4 + 4];
543 d__1 = qmax, d__2 = z__[i4 + 1];
546 d__1 = emin, d__2 = z__[i4 - 1];
549 d__1 = oldemn, d__2 = z__[i4];
554 z__[(n0 << 2) - 1] = emin;
555 z__[n0 * 4] = oldemn;
584 for (k = 2; k <= i__1; ++k) {
585 z__[k] = z__[(k << 2) - 3];
594 for (k = *n; k >= 1; --k) {
601 z__[(*n << 1) + 1] = trace;
602 z__[(*n << 1) + 2] = e;
603 z__[(*n << 1) + 3] = (Treal) iter;
606 z__[(*n << 1) + 4] = (Treal) ndiv / (Treal) (i__1 * i__1);
607 z__[(*n << 1) + 5] = nfail * 100. / (Treal) iter;