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()");
44 imatrix (
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);
73 dmatrix (
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);
102 d3tensor (
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++)
348 for (
j = n - 2;
j >= 0;
j--)
349 cder[
j] = cder[
j + 2] + 2 * (
j + 1) *
c[
j + 1];
354 chebev (
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.