37 #ifndef TEMPLATE_LAPACK_STEBZ_HEADER 38 #define TEMPLATE_LAPACK_STEBZ_HEADER 43 *vl,
const Treal *vu,
const integer *il,
const integer *iu,
const Treal *abstol,
218 Treal d__1, d__2, d__3, d__4, d__5;
220 integer iend, ioff, iout, itmp1, j, jdisc;
226 Treal wkill, rtoli, tnorm;
286 }
else if (iorder <= 0) {
290 }
else if (irange == 2) {
294 }
else if (irange == 3 && (*il < 1 || *il >
maxMACRO(1,*n))) {
296 }
else if (irange == 3 && (*iu <
minMACRO(*n,*il) || *iu > *n)) {
321 if (irange == 3 && *il == 1 && *iu == *n) {
343 if (irange == 2 && (*vl >= d__[1] || *vu < d__[1])) {
361 for (j = 2; j <= i__1; ++j) {
367 if ((d__1 = d__[j] * d__[j - 1],
absMACRO(d__1)) * (d__2 * d__2) + safemn
369 isplit[*nsplit] = j - 1;
378 isplit[*nsplit] = *n;
396 for (j = 1; j <= i__1; ++j) {
399 d__1 =
gu, d__2 = d__[j] + tmp1 + tmp2;
402 d__1 = gl, d__2 = d__[j] - tmp1 - tmp2;
409 d__1 =
gu, d__2 = d__[*n] + tmp1;
412 d__1 = gl, d__2 = d__[*n] - tmp1;
417 gl = gl - tnorm * 2. * ulp * *n - pivmin * 4.;
418 gu =
gu + tnorm * 2. * ulp * *n + pivmin * 2.;
443 &d__[1], &e[1], &work[1], &iwork[5], &work[*n + 1], &work[*n
444 + 5], &iout, &iwork[1], &w[1], &iblock[1], &iinfo);
446 if (iwork[6] == *iu) {
462 if (nwl < 0 || nwl >= *n || nwu < 1 || nwu > *n) {
476 for (j = 2; j <= i__1; ++j) {
478 d__4 = tnorm, d__5 = (d__1 = d__[j],
absMACRO(d__1)) + (d__2 = e[j - 1]
510 for (jb = 1; jb <= i__1; ++jb) {
520 if (irange == 1 || wl >= d__[ibegin] - pivmin) {
523 if (irange == 1 || wu >= d__[ibegin] - pivmin) {
526 if (irange == 1 || ( wl < d__[ibegin] - pivmin && wu >= d__[ibegin]
544 for (j = ibegin; j <= i__2; ++j) {
545 tmp2 = (d__1 = e[j],
absMACRO(d__1));
547 d__1 =
gu, d__2 = d__[j] + tmp1 + tmp2;
550 d__1 = gl, d__2 = d__[j] - tmp1 - tmp2;
557 d__1 =
gu, d__2 = d__[iend] + tmp1;
560 d__1 = gl, d__2 = d__[iend] - tmp1;
565 gl = gl - bnorm * 2. * ulp * in - pivmin * 2.;
566 gu =
gu + bnorm * 2. * ulp * in + pivmin * 2.;
594 work[*n + in + 1] =
gu;
596 pivmin, &d__[ibegin], &e[ibegin], &work[ibegin], idumma, &
597 work[*n + 1], &work[*n + (in << 1) + 1], &im, &iwork[1], &
598 w[*m + 1], &iblock[*m + 1], &iinfo);
601 nwu += iwork[in + 1];
602 iwoff = *m - iwork[1];
609 pivmin, &d__[ibegin], &e[ibegin], &work[ibegin], idumma, &
610 work[*n + 1], &work[*n + (in << 1) + 1], &iout, &iwork[1],
611 &w[*m + 1], &iblock[*m + 1], &iinfo);
617 for (j = 1; j <= i__2; ++j) {
618 tmp1 = (work[j + *n] + work[j + in + *n]) * .5;
622 if (j > iout - iinfo) {
628 i__3 = iwork[j + in] + iwoff;
629 for (je = iwork[j] + 1 + iwoff; je <= i__3; ++je) {
648 idiscl = *il - 1 - nwl;
651 if (idiscl > 0 || idiscu > 0) {
653 for (je = 1; je <= i__1; ++je) {
654 if (w[je] <= wlu && idiscl > 0) {
656 }
else if (w[je] >= wul && idiscu > 0) {
661 iblock[im] = iblock[je];
667 if (idiscl > 0 || idiscu > 0) {
682 for (jdisc = 1; jdisc <= i__1; ++jdisc) {
685 for (je = 1; je <= i__2; ++je) {
686 if (iblock[je] != 0 && (w[je] < wkill || iw == 0)) {
700 for (jdisc = 1; jdisc <= i__1; ++jdisc) {
703 for (je = 1; je <= i__2; ++je) {
704 if (iblock[je] != 0 && (w[je] > wkill || iw == 0)) {
716 for (je = 1; je <= i__1; ++je) {
717 if (iblock[je] != 0) {
720 iblock[im] = iblock[je];
726 if (idiscl < 0 || idiscu < 0) {
735 if (iorder == 1 && *nsplit > 1) {
737 for (je = 1; je <= i__1; ++je) {
741 for (j = je + 1; j <= i__2; ++j) {
752 iblock[ie] = iblock[je];
static const real gu
Definition: fun-pz81.c:68
#define absMACRO(x)
Definition: template_blas_common.h:47
int template_lapack_laebz(const integer *ijob, const integer *nitmax, const integer *n, const integer *mmax, const integer *minp, const integer *nbmin, const Treal *abstol, const Treal *reltol, const Treal *pivmin, const Treal *d__, const Treal *e, const Treal *e2, integer *nval, Treal *ab, Treal *c__, integer *mout, integer *nab, Treal *work, integer *iwork, integer *info)
Definition: template_lapack_laebz.h:42
int integer
Definition: template_blas_common.h:40
integer template_lapack_ilaenv(const integer *ispec, const char *name__, const char *opts, const integer *n1, const integer *n2, const integer *n3, const integer *n4, ftnlen name_len, ftnlen opts_len)
Definition: template_lapack_common.cc:281
#define maxMACRO(a, b)
Definition: template_blas_common.h:45
#define minMACRO(a, b)
Definition: template_blas_common.h:46
int template_lapack_stebz(const char *range, const char *order, const integer *n, const Treal *vl, const Treal *vu, const integer *il, const integer *iu, const Treal *abstol, const Treal *d__, const Treal *e, integer *m, integer *nsplit, Treal *w, integer *iblock, integer *isplit, Treal *work, integer *iwork, integer *info)
Definition: template_lapack_stebz.h:42
Treal template_blas_log(Treal x)
int template_blas_erbla(const char *srname, integer *info)
Definition: template_blas_common.cc:146
Treal template_lapack_lamch(const char *cmach, Treal dummyReal)
Definition: template_lapack_lamch.h:202
bool logical
Definition: template_blas_common.h:41
#define TRUE_
Definition: template_lapack_common.h:42
#define FALSE_
Definition: template_lapack_common.h:43
int ftnlen
Definition: template_blas_common.h:42
Treal template_blas_sqrt(Treal x)
logical template_blas_lsame(const char *ca, const char *cb)
Definition: template_blas_common.cc:46