37 #ifndef TEMPLATE_LAPACK_LASQ3_HEADER
38 #define TEMPLATE_LAPACK_LASQ3_HEADER
48 integer *pp, Treal *dmin__, Treal *sigma, Treal *desig,
51 Treal *dn, Treal *dn1, Treal *dn2, Treal *g,
173 nn = (*n0 << 2) + *pp;
174 if (*n0 == *i0 + 1) {
180 if (z__[nn - 5] > tol2 * (*sigma + z__[nn - 3]) && z__[nn - (*pp << 1) -
181 4] > tol2 * z__[nn - 7]) {
187 z__[(*n0 << 2) - 3] = z__[(*n0 << 2) + *pp - 3] + *sigma;
195 if (z__[nn - 9] > tol2 * *sigma && z__[nn - (*pp << 1) - 8] > tol2 * z__[
202 if (z__[nn - 3] > z__[nn - 7]) {
204 z__[nn - 3] = z__[nn - 7];
207 if (z__[nn - 5] > z__[nn - 3] * tol2) {
208 t = (z__[nn - 7] - z__[nn - 3] + z__[nn - 5]) * .5;
209 s = z__[nn - 3] * (z__[nn - 5] / t);
215 t = z__[nn - 7] + (s + z__[nn - 5]);
216 z__[nn - 3] *= z__[nn - 7] / t;
219 z__[(*n0 << 2) - 7] = z__[nn - 7] + *sigma;
220 z__[(*n0 << 2) - 3] = z__[nn - 3] + *sigma;
231 if (*dmin__ <= 0. || *n0 < n0in) {
232 if (z__[(*i0 << 2) + *pp - 3] * 1.5 < z__[(*n0 << 2) + *pp - 3]) {
233 ipn4 = ( *i0 + *n0 ) << 2;
234 i__1 = ( *i0 + *n0 - 1 ) << 1;
235 for (j4 = *i0 << 2; j4 <= i__1; j4 += 4) {
237 z__[j4 - 3] = z__[ipn4 - j4 - 3];
238 z__[ipn4 - j4 - 3] = temp;
240 z__[j4 - 2] = z__[ipn4 - j4 - 2];
241 z__[ipn4 - j4 - 2] = temp;
243 z__[j4 - 1] = z__[ipn4 - j4 - 5];
244 z__[ipn4 - j4 - 5] = temp;
246 z__[j4] = z__[ipn4 - j4 - 4];
247 z__[ipn4 - j4 - 4] = temp;
250 if (*n0 - *i0 <= 4) {
251 z__[(*n0 << 2) + *pp - 1] = z__[(*i0 << 2) + *pp - 1];
252 z__[(*n0 << 2) - *pp] = z__[(*i0 << 2) - *pp];
255 d__1 = *dmin2, d__2 = z__[(*n0 << 2) + *pp - 1];
258 d__1 = z__[(*n0 << 2) + *pp - 1], d__2 = z__[(*i0 << 2) + *pp - 1]
259 , d__1 =
minMACRO(d__1,d__2), d__2 = z__[(*i0 << 2) + *pp + 3];
260 z__[(*n0 << 2) + *pp - 1] =
minMACRO(d__1,d__2);
262 d__1 = z__[(*n0 << 2) - *pp], d__2 = z__[(*i0 << 2) - *pp], d__1 =
263 minMACRO(d__1,d__2), d__2 = z__[(*i0 << 2) - *pp + 4];
264 z__[(*n0 << 2) - *pp] =
minMACRO(d__1,d__2);
266 d__1 = *qmax, d__2 = z__[(*i0 << 2) + *pp - 3], d__1 =
maxMACRO(d__1,
267 d__2), d__2 = z__[(*i0 << 2) + *pp + 1];
275 template_lapack_lasq4(i0, n0, &z__[1], pp, &n0in, dmin__, dmin1, dmin2, dn, dn1, dn2,
282 template_lapack_lasq5(i0, n0, &z__[1], pp, tau, dmin__, dmin1, dmin2, dn, dn1, dn2,
285 *ndiv += *n0 - *i0 + 2;
290 if (*dmin__ >= 0. && *dmin1 > 0.) {
296 }
else if (*dmin__ < 0. && *dmin1 > 0. && z__[( ( *n0 - 1 ) << 2) - *pp] < tol
297 * (*sigma + *dn1) &&
absMACRO(*dn) < tol * *sigma) {
301 z__[( ( *n0 - 1 ) << 2) - *pp + 2] = 0.;
304 }
else if (*dmin__ < 0.) {
314 }
else if (*dmin1 > 0.) {
318 *tau = (*tau + *dmin__) * (1. - eps * 2.);
349 *ndiv += *n0 - *i0 + 2;
357 *desig -= t - *sigma;
360 *desig = *sigma - (t - *tau) + *desig;