13 #include "tbci/lapack/f2c.h"
17 # define integer long int
18 # define doublereal double
19 # define doublecomplex __complex__ double
21 # define complex __complex__ float
176 integer ab_dim1, ab_offset, bb_dim1, bb_offset, q_dim1, q_offset, ret_val,
188 static char vect[1], jobz[1];
193 static char order[1];
197 static integer iu, iscale, indibl;
217 extern int zhbgst_(
const char *,
const char *,
integer *,
227 static cilist io___22 = { 0, 6, 0, 0, 0 };
237 ab_offset = ab_dim1 + 1;
240 bb_offset = bb_dim1 + 1;
244 q_offset = q_dim1 + 1;
273 }
else if (kb < 0 || kb > ka) {
275 }
else if (*ldab < ka + 1) {
277 }
else if (*ldbb < kb + 1) {
279 }
else if (*n <= 0) {
291 safmin =
dlamch_(
"Safe minimum", 12L);
292 eps =
dlamch_(
"Precision", 9L);
293 smlnum = safmin / eps;
294 bignum = 1. / smlnum;
298 rmax =
min(d__1,d__2);
301 abstol = safmin * 2.;
309 anrm = zlanhb_(
"M", uplo, n, &ka, &ab[ab_offset], ldab, &rwork[1], 1L, 1L)
311 if (anrm > 0. && anrm < rmin) {
314 }
else if (anrm > rmax) {
320 do_lio(&c__9, &c__1,
"Matrix in bad condition, scale matrix ...", 49L);
323 zlascl_(
"B", &ka, &ka, &c_b14, &sigma, n, n, &ab[ab_offset], ldab,
325 zlascl_(
"B", &kb, &kb, &c_b14, &sigma, n, n, &bb[bb_offset], ldbb,
328 zlascl_(
"Q", &ka, &ka, &c_b14, &sigma, n, n, &ab[ab_offset], ldab,
330 zlascl_(
"Q", &kb, &kb, &c_b14, &sigma, n, n, &bb[bb_offset], ldbb,
334 abstll = abstol *
sigma;
342 zpbstf_(uplo, n, &kb, &bb[bb_offset], ldbb, &info, 1L);
356 zhbgst_(jobz, uplo, n, &ka, &kb, &ab[ab_offset], ldab, &bb[bb_offset],
357 ldbb, &q[q_offset], ldq, &work[1], &rwork[indrwk], &info, 1L, 1L);
360 if (info != 0)
return info;
372 zhbtrd_(vect, uplo, n, &ka, &ab[ab_offset], ldab, &rwork[indd], &rwork[
373 indnd], &q[q_offset], ldq, &work[1], &info, 1L, 1L);
392 indisp = indibl + *n;
393 indiwk = indisp + *n;
394 dstebz_(
"V", order, n, &vll, &vuu, &il, &iu, &abstll, &rwork[indd], &
395 rwork[indnd], m, &nsplit, &w[1], &iwork[indibl], &iwork[indisp], &
396 rwork[indrwk], &iwork[indiwk], &info, 1L, 1L);
457 integer z_dim1, z_offset, q_dim1, q_offset, ret_val, i__1, i__2;
460 static integer indd, info, itmp1,
i, j, indnd;
468 static integer jj, indibl, indiwk, indisp, indrwk;
488 z_offset = z_dim1 + 1;
491 q_offset = q_dim1 + 1;
503 indisp = indibl + *n;
504 indiwk = indisp + *n;
506 zstein_(n, &rwork[indd], &rwork[indnd], m, &w[1], &iwork[indibl], &iwork[
507 indisp], &z[z_offset], ldz, &rwork[indrwk], &iwork[indiwk], &
514 for (j = 1; j <= i__1; ++j) {
515 zcopy_(n, &z[j * z_dim1 + 1], &c__1, &work[1], &c__1);
516 zgemv_(
"N", n, n, &c_b27, &q[q_offset], ldq, &work[1], &c__1, &c_b26,
517 &z[j * z_dim1 + 1], &c__1, 1L);
524 for (j = 1; j <= i__1; ++j) {
528 for (jj = j + 1; jj <= i__2; ++jj) {
536 itmp1 = iwork[indibl + i - 1];
538 iwork[indibl + i - 1] = iwork[indibl + j - 1];
540 iwork[indibl + j - 1] = itmp1;
541 zswap_(n, &z[i * z_dim1 + 1], &c__1, &z[j * z_dim1 + 1], &c__1);
double dlamch_(const char *)
static __complex__ double c_b26
long int own_ew_(long int *job, long int *up, long int *n, long int *m, __complex__ double *ab, long int *ldab, __complex__ double *bb, long int *ldbb, double *vl, double *vu, double *w, __complex__ double *q, long int *ldq, __complex__ double *work, double *rwork, long int *iwork)
– AHLAND driver routine (version 2.0) – Modified LAPACK-ROUTINE for the calculation of selected Eigen...
integer do_lio(integer *, integer *, char *, ftnlen)
const Vector< T > Vector< T > Vector< T > Vector< T > Vector< T > Vector< T > & sigma
< calculates function values of func at position x with params param and return chisq with given y va...
static __complex__ double c_b27
long int own_ev_(long int *n, long int *m, double *w, __complex__ double *z, long int *ldz, __complex__ double *q, long int *ldq, __complex__ double *work, double *rwork, long int *iwork, long int *ifail)
– AHLAND driver routine (version 2.0) –
const Vector< T > Vector< T > Vector< T > Vector< T > Vector< T > & z
int integer
barf [ba:rf] 2.
int xerbla_(char *, int *)