968 double *resid =
new double[n];
970 int ncv =
MIN(
MAX(2 * nev, 20), n - 1);
972 double *V =
new double[ncv * n];
977 int *iparam =
new int[11];
985 int *ipntr =
new int[11];
987 double *workd =
new double[3 * n];
989 int lworkl = ncv * (ncv + 8);
990 double *workl =
new double[lworkl];
997 F77_NAME(
dsaupd)(&ido, &bmat, &n, &which[0], &nev, &tol, &resid[0], &ncv,
998 &V[0], &ldv, &iparam[0], &ipntr[0], &workd[0], &workl[0],
1002 double *load = &workd[ipntr[0] - 1];
1003 for (
int i = 0; i < n; i++) {
1004 result[i] = load[i];
1010 double *store = &workd[ipntr[1] - 1];
1011 for (
int i = 0; i < n; i++) {
1014 }
else if (ido == 99) {
1030 int *select =
new int[ncv];
1032 double *d =
new double[nev];
1036 F77_NAME(
dseupd)(&rvec, &howmny, select, &d[0], &V[0], &ldv, &sigmar, &bmat,
1037 &n, &which[0], &nev, &tol, &resid[0], &ncv, &V[0], &ldv,
1038 &iparam[0], &ipntr[0], &workd[0], &workl[0], &lworkl, &info);
1045 for (
int i = 0; i < nev; i++) {
1052 for (
int i = 0; i < nev; i++) {
1053 double eval = d_inds[i].Key;
1054 int ind = d_inds[i].Dat;
1057 for (
int j = ind * n; j < ind * n + n; j++) {
void F77_NAME() dsaupd(int *ido, char *bmat, int *n, char *which, int *nev, double *tol, double *resid, int *ncv, double *V, int *ldv, int *iparam, int *ipntr, double *workd, double *workl, int *lworkl, int *info)
static void Throw(const TStr &MsgStr)
void Multiply(const TFltVV &B, int ColId, TFltV &Result) const
void F77_NAME() dseupd(int *rvec, char *HowMny, int *select, double *d, double *Z, int *ldz, double *sigma, char *bmat, int *n, char *which, int *nev, double *tol, double *resid, int *ncv, double *V, int *ldv, int *iparam, int *ipntr, double *workd, double *workl, int *lworkl, int *info)
TSizeTy Add()
Adds a new element at the end of the vector, after its current last element.