21 retval =
new int [(nh-nl+1)];
23 throw error (
"allocation failure in ivector()");
35 retval =
new double [(nh-nl+1)];
37 throw error (
"allocation failure in dvector()");
44imatrix (
long nrl,
long nrh,
long ncl,
long nch)
49 retval =
new int * [(nrh-nrl+1)];
51 throw error (
"allocation failure (1) in imatrix()");
54 retval[0] =
new int [(nrh-nrl+1)*(nch-ncl+1)];
56 throw error (
"allocation failure (2) in imatrix()");
63 long width = (nch-ncl+1);
64 for(
long i = nrl+1 ; i <= nrh ; i++)
65 retval[i] = retval[i-1] + width;
66 assert(retval[nrh]-retval[nrl] == (nrh-nrl)*width);
73dmatrix (
long nrl,
long nrh,
long ncl,
long nch)
78 retval =
new double * [(nrh-nrl+1)];
80 throw error (
"allocation failure (1) in dmatrix()");
83 retval[0] =
new double [(nrh-nrl+1)*(nch-ncl+1)];
85 throw error (
"allocation failure (2) in dmatrix()");
92 long width = (nch-ncl+1);
93 for(
long i = nrl+1 ; i <= nrh ; i++)
94 retval[i] = retval[i-1] + width;
95 assert(retval[nrh]-retval[nrl] == (nrh-nrl)*width);
102d3tensor (
long nrl,
long nrh,
long ncl,
long nch,
long ndl,
long ndh)
108 retval =
new double ** [(nrh-nrl+1)];
110 throw error (
"allocation failure (1) in d3tensor()");
112 retval[0] =
new double * [(nrh-nrl+1)*(nch-ncl+1)];
113 if(retval[0] == NULL)
114 throw error (
"allocation failure (2) in d3tensor()");
117 retval[0][0] =
new double [(nrh-nrl+1)*(nch-ncl+1)*(ndh-ndl+1)];
118 if(retval[0][0] == NULL)
119 throw error (
"allocation failure (3) in d3tensor()");
127 long width = (nch-ncl+1);
128 long depth = (ndh-ndl+1);
129 for(
long j = ncl+1 ; j <= nch ; j++) {
130 retval[nrl][j] = retval[nrl][j-1] + depth;
132 assert(retval[nrl][nch]-retval[nrl][ncl] == (nch-ncl)*depth);
133 for(
long i = nrl+1 ; i <= nrh ; i++) {
134 retval[i] = retval[i-1] + width;
135 retval[i][ncl] = retval[i-1][ncl] + width*depth;
136 for(
long j = ncl+1 ; j <= nch ; j++) {
137 retval[i][j] = retval[i][j-1] + depth;
139 assert(retval[i][nch]-retval[i][ncl] == (nch-ncl)*depth);
141 assert(retval[nrh]-retval[nrl] == (nrh-nrl)*width);
142 assert(&retval[nrh][nch][ndh]-&retval[nrl][ncl][ndl] == (nrh-nrl+1)*(nch-ncl+1)*(ndh-ndl+1)-1);
187 free(t[nrl][ncl]+ndl);
242 for (i = 1; i <= exponent; i++)
254 double fac, sum, Pion, *c;
262 for (j = 0; j < n; j++)
265 for (k = 0; k < n; k++)
266 sum += u[k] * cos (Pion * j * (k + 0.5));
267 c[j] = fac * sum * isignum;
273 for (j = 0; j < n; j++)
277 for (k = 0; k < n; k++)
279 sum += u[k] * cos (Pion * (j + 0.5) * k) * isignum;
285 for (j = 0; j < n; j++)
287 if (fabs(c[j]) < 5.e-16)
301 int k, j, isignum, N = n - 1;
302 double fac, sum, PioN, *c;
310 for (j = 0; j < n; j++)
312 sum = 0.5 * (u[0] + u[N] * isignum);
313 for (k = 1; k < N; k++)
314 sum += u[k] * cos (PioN * j * k);
315 c[j] = fac * sum * isignum;
322 for (j = 0; j < n; j++)
326 for (k = 0; k < n; k++)
328 sum += u[k] * cos (PioN * j * k) * isignum;
334 for (j = 0; j < n; j++)
342chder (
double *c,
double *cder,
int n)
348 for (j = n - 2; j >= 0; j--)
349 cder[j] = cder[j + 2] + 2 * (j + 1) * c[j + 1];
354chebev (
double a,
double b,
double c[],
int m,
double x)
358 double djp2, djp1, dj;
362 y = 2*(x - 0.5*(b+a))/(b-a);
365 for(j = m-1 ; j >= 1; j--)
370 dj = 2*y*djp1 - djp2 + c[j];
373 return y*dj - djp1 + 0.5*c[0];
382 double x, x1, fac, Pi_fac, *a, *b;
391 for (l = 0; l <= M; l++)
397 for (k = 0; k < N; k++)
400 a[l] += fac * u[k] * cos (x);
402 b[l] += fac * u[k] * sin (x);
407 for (l = 1; l < M; l++)
417 for (l = 1; l < M; l++)
423 for (k = 0; k < N; k++)
425 u[k] = 0.5 * (a[0] + a[M] * iy);
427 for (l = 1; l < M; l++)
430 u[k] += a[l] * cos (x) + b[l] * sin (x);
448 for (l = 1; l < M; l++)
464 for (l = 1; l <= M; l++)
470 d2u[lpM] = -u[lpM] * l2;
481 result = 0.5 * (u[0] + u[M] * cos (x * M));
482 for (l = 1; l < M; l++)
485 result += u[l] * cos (xl) + u[M + l] * sin (xl);
497 for (i = 0; i < n; i++)
498 if (fabs (v[i]) > result)
499 result = fabs (v[i]);
511 for (i = 0; i < n; i++)
512 result += v[i] * v[i];
514 return sqrt (result);
524 for (i = 0; i < n; i++)
525 result += v[i] * w[i];
Another nice thing: The TwoPunctures Error, borrowed from Pizza.
int minimum3(int i, int j, int k)
void fourft(double *u, int N, int inv)
double norm2(double *v, int n)
double chebev(double a, double b, double c[], int m, double x)
int maximum3(int i, int j, int k)
int maximum2(int i, int j)
double * dvector(long nl, long nh)
void chebft_Extremes(double u[], int n, int inv)
void free_dvector(double *v, long nl, long nh)
double norm1(double *v, int n)
double scalarproduct(double *v, double *w, int n)
void free_ivector(int *v, long nl, long nh)
void chebft_Zeros(double u[], int n, int inv)
void fourder2(double u[], double d2u[], int N)
int minimum2(int i, int j)
void chder(double *c, double *cder, int n)
double *** d3tensor(long nrl, long nrh, long ncl, long nch, long ndl, long ndh)
int * ivector(long nl, long nh)
void fourder(double u[], double du[], int N)
double fourev(double *u, int N, double x)
double ** dmatrix(long nrl, long nrh, long ncl, long nch)
void free_d3tensor(double ***t, long nrl, long nrh, long ncl, long nch, long ndl, long ndh)
void free_dmatrix(double **m, long nrl, long nrh, long ncl, long nch)
int pow_int(int mantisse, int exponent)
void free_imatrix(int **m, long nrl, long nrh, long ncl, long nch)
int ** imatrix(long nrl, long nrh, long ncl, long nch)
This file contains aliases for making access to the long state vector Q as used eg.