15 using namespace Utilities;
17 #define FAC sin(al)*sin(be)*sin(al)*sin(be)*sin(al)*sin(be)
21 static inline double min (
double const x,
double const y)
30 int i1 = i, j1 =
j, k1 = k;
35 i1 = 2 * n1 - (i1 + 1);
40 j1 = 2 * n2 - (j1 + 1);
47 return ivar + nvar * (i1 + n1 * (j1 + n2 * k1));
88 int i,
j, k, ivar, N, *indx;
89 double *
p, *dp, *d2p, *q, *dq, *r, *
dr;
101 for (ivar = 0; ivar < nvar; ivar++)
103 for (k = 0; k < n3; k++)
105 for (
j = 0;
j < n2;
j++)
107 for (i = 0; i < n1; i++)
109 indx[i] = Index (ivar, i,
j, k, nvar, n1, n2, n3);
110 p[i] =
v.d0[indx[i]];
117 for (i = 0; i < n1; i++)
119 v.d1[indx[i]] = dp[i];
120 v.d11[indx[i]] = d2p[i];
124 for (k = 0; k < n3; k++)
126 for (i = 0; i < n1; i++)
128 for (
j = 0;
j < n2;
j++)
130 indx[
j] = Index (ivar, i,
j, k, nvar, n1, n2, n3);
131 p[
j] =
v.d0[indx[
j]];
132 q[
j] =
v.d1[indx[
j]];
142 for (
j = 0;
j < n2;
j++)
144 v.d2[indx[
j]] = dp[
j];
145 v.d22[indx[
j]] = d2p[
j];
146 v.d12[indx[
j]] = dq[
j];
150 for (i = 0; i < n1; i++)
152 for (
j = 0;
j < n2;
j++)
154 for (k = 0; k < n3; k++)
156 indx[k] = Index (ivar, i,
j, k, nvar, n1, n2, n3);
157 p[k] =
v.d0[indx[k]];
158 q[k] =
v.d1[indx[k]];
159 r[k] =
v.d2[indx[k]];
172 for (k = 0; k < n3; k++)
174 v.d3[indx[k]] = dp[k];
175 v.d33[indx[k]] = d2p[k];
176 v.d13[indx[k]] = dq[k];
177 v.d23[indx[k]] =
dr[k];
202 int i,
j, k, ivar, indx;
203 double al, be, A, B,
X, R,
x, r, phi,
y, z, Am1, *values;
207 values =
dvector (0, nvar - 1);
208 allocate_derivs (&U, nvar);
210 sources=
new double[n1*n2*n3]();
213 double *s_x, *s_y, *s_z;
215 s_x =
new double[n1*n2*n3]();
216 s_y =
new double[n1*n2*n3]();
217 s_z =
new double[n1*n2*n3]();
218 for (i = 0; i < n1; i++)
219 for (
j = 0;
j < n2;
j++)
220 for (k = 0; k < n3; k++)
222 i3D = Index(0,i,
j,k,1,n1,n2,n3);
224 al = Pih * (2 * i + 1) / n1;
226 be = Pih * (2 *
j + 1) / n2;
228 phi = 2. * Pi * k / n3;
231 for (ivar = 0; ivar < nvar; ivar++)
233 indx = Index (ivar, i,
j, k, nvar, n1, n2, n3);
234 U.
d0[ivar] = Am1 *
v.d0[indx];
235 U.
d1[ivar] =
v.d0[indx] + Am1 *
v.d1[indx];
236 U.
d2[ivar] = Am1 *
v.d2[indx];
237 U.
d3[ivar] = Am1 *
v.d3[indx];
238 U.
d11[ivar] = 2 *
v.d1[indx] + Am1 *
v.d11[indx];
239 U.
d12[ivar] =
v.d2[indx] + Am1 *
v.d12[indx];
240 U.
d13[ivar] =
v.d3[indx] + Am1 *
v.d13[indx];
241 U.
d22[ivar] = Am1 *
v.d22[indx];
242 U.
d23[ivar] = Am1 *
v.d23[indx];
243 U.
d33[ivar] = Am1 *
v.d33[indx];
247 AB_To_XR (nvar, A, B, &
X, &R, U);
250 C_To_c (nvar,
X, R, &(s_x[i3D]), &r, U);
253 rx3_To_xyz (nvar, s_x[i3D], r, phi, &(s_y[i3D]), &(s_z[i3D]), U);
262 for (i = 0; i < n1; i++)
263 for (
j = 0;
j < n2;
j++)
264 for (k = 0; k < n3; k++)
265 sources[Index(0,i,
j,k,1,n1,n2,n3)]=0.0;
267 Derivatives_AB3 (nvar, n1, n2, n3,
v);
268 double psi, psi2, psi4, psi7, r_plus, r_minus;
269 FILE *debugfile = NULL;
270 if (do_residuum_debug_output &&
TP_MyProc() == 0)
272 debugfile = fopen(
"res.dat",
"w");
275 for (i = 0; i < n1; i++)
277 for (
j = 0;
j < n2;
j++)
279 for (k = 0; k < n3; k++)
282 al = Pih * (2 * i + 1) / n1;
284 be = Pih * (2 *
j + 1) / n2;
286 phi = 2. * Pi * k / n3;
289 for (ivar = 0; ivar < nvar; ivar++)
291 indx = Index (ivar, i,
j, k, nvar, n1, n2, n3);
292 U.
d0[ivar] = Am1 *
v.d0[indx];
293 U.
d1[ivar] =
v.d0[indx] + Am1 *
v.d1[indx];
294 U.
d2[ivar] = Am1 *
v.d2[indx];
295 U.
d3[ivar] = Am1 *
v.d3[indx];
296 U.
d11[ivar] = 2 *
v.d1[indx] + Am1 *
v.d11[indx];
297 U.
d12[ivar] =
v.d2[indx] + Am1 *
v.d12[indx];
298 U.
d13[ivar] =
v.d3[indx] + Am1 *
v.d13[indx];
299 U.
d22[ivar] = Am1 *
v.d22[indx];
300 U.
d23[ivar] = Am1 *
v.d23[indx];
301 U.
d33[ivar] = Am1 *
v.d33[indx];
305 AB_To_XR (nvar, A, B, &
X, &R, U);
308 C_To_c (nvar,
X, R, &
x, &r, U);
311 rx3_To_xyz (nvar,
x, r, phi, &
y, &z, U);
312 NonLinEquations (sources[Index(0,i,
j,k,1,n1,n2,n3)],
313 A, B,
X, R,
x, r, phi,
y, z, U, values);
314 for (ivar = 0; ivar < nvar; ivar++)
316 indx = Index (ivar, i,
j, k, nvar, n1, n2, n3);
317 F[indx] = values[ivar] * FAC;
320 u.d0[indx] = U.
d0[ivar];
321 u.d1[indx] = U.
d1[ivar];
322 u.d2[indx] = U.
d2[ivar];
323 u.d3[indx] = U.
d3[ivar];
324 u.d11[indx] = U.
d11[ivar];
325 u.d12[indx] = U.
d12[ivar];
326 u.d13[indx] = U.
d13[ivar];
327 u.d22[indx] = U.
d22[ivar];
328 u.d23[indx] = U.
d23[ivar];
329 u.d33[indx] = U.
d33[ivar];
331 if (debugfile && (k==0))
333 r_plus = sqrt ((
x - par_b) * (
x - par_b) +
y *
y + z * z);
334 r_minus = sqrt ((
x + par_b) * (
x + par_b) +
y *
y + z * z);
336 0.5 * par_m_plus / r_plus +
337 0.5 * par_m_minus / r_minus +
341 psi7 = psi * psi2 * psi4;
343 "%.16g %.16g %.16g %.16g %.16g %.16g %.16g %.16g\n",
344 (
double)
x, (
double)
y, (
double)A, (
double)B,
349 (2.0 * Pi / psi2/psi * sources[indx]) * FAC),
353 (
double)(-(2.0 * Pi / psi2/psi * sources[indx]) * FAC),
354 (
double)sources[indx]
367 free_derivs (&U, nvar);
379 int i,
j, k, ivar, indx;
380 double al, be, A, B,
X, R,
x, r, phi,
y, z, Am1, *values;
383 Derivatives_AB3 (nvar, n1, n2, n3, dv);
386 for (i = 0; i < n1; i++)
388 values =
dvector (0, nvar - 1);
389 allocate_derivs (&dU, nvar);
390 allocate_derivs (&U, nvar);
391 for (
j = 0;
j < n2;
j++)
393 for (k = 0; k < n3; k++)
396 al = Pih * (2 * i + 1) / n1;
398 be = Pih * (2 *
j + 1) / n2;
400 phi = 2. * Pi * k / n3;
403 for (ivar = 0; ivar < nvar; ivar++)
405 indx = Index (ivar, i,
j, k, nvar, n1, n2, n3);
406 dU.
d0[ivar] = Am1 * dv.
d0[indx];
407 dU.
d1[ivar] = dv.
d0[indx] + Am1 * dv.
d1[indx];
408 dU.
d2[ivar] = Am1 * dv.
d2[indx];
409 dU.
d3[ivar] = Am1 * dv.
d3[indx];
410 dU.
d11[ivar] = 2 * dv.
d1[indx] + Am1 * dv.
d11[indx];
411 dU.
d12[ivar] = dv.
d2[indx] + Am1 * dv.
d12[indx];
412 dU.
d13[ivar] = dv.
d3[indx] + Am1 * dv.
d13[indx];
413 dU.
d22[ivar] = Am1 * dv.
d22[indx];
414 dU.
d23[ivar] = Am1 * dv.
d23[indx];
415 dU.
d33[ivar] = Am1 * dv.
d33[indx];
416 U.
d0[ivar] =
u.d0[indx];
417 U.
d1[ivar] =
u.d1[indx];
418 U.
d2[ivar] =
u.d2[indx];
419 U.
d3[ivar] =
u.d3[indx];
420 U.
d11[ivar] =
u.d11[indx];
421 U.
d12[ivar] =
u.d12[indx];
422 U.
d13[ivar] =
u.d13[indx];
423 U.
d22[ivar] =
u.d22[indx];
424 U.
d23[ivar] =
u.d23[indx];
425 U.
d33[ivar] =
u.d33[indx];
429 AB_To_XR (nvar, A, B, &
X, &R, dU);
432 C_To_c (nvar,
X, R, &
x, &r, dU);
435 rx3_To_xyz (nvar,
x, r, phi, &
y, &z, dU);
436 LinEquations (A, B,
X, R,
x, r, phi,
y, z, dU, U, values);
437 for (ivar = 0; ivar < nvar; ivar++)
439 indx = Index (ivar, i,
j, k, nvar, n1, n2, n3);
440 Jdv[indx] = values[ivar] * FAC;
445 free_derivs (&dU, nvar);
446 free_derivs (&U, nvar);
460 double al, be, A, B,
X, R,
x, r, phi,
y, z, Am1;
461 double sin_al, sin_al_i1, sin_al_i2, sin_al_i3, cos_al;
462 double sin_be, sin_be_i1, sin_be_i2, sin_be_i3, cos_be;
463 double dV0, dV1, dV2, dV3, dV11, dV12, dV13, dV22, dV23, dV33,
464 ha, ga, ga2, hb, gb, gb2, hp, gp, gp2, gagb, gagp, gbgp;
467 allocate_derivs (&dU, nvar);
468 allocate_derivs (&U, nvar);
498 sin_al_i1 = 1 / sin_al;
499 sin_be_i1 = 1 / sin_be;
500 sin_al_i2 = sin_al_i1 * sin_al_i1;
501 sin_be_i2 = sin_be_i1 * sin_be_i1;
502 sin_al_i3 = sin_al_i1 * sin_al_i2;
503 sin_be_i3 = sin_be_i1 * sin_be_i2;
508 for (ivar = 0; ivar < nvar; ivar++)
510 int iccc = Index (ivar, i,
j, k, nvar, n1, n2, n3),
511 ipcc = Index (ivar, i + 1,
j, k, nvar, n1, n2, n3),
512 imcc = Index (ivar, i - 1,
j, k, nvar, n1, n2, n3),
513 icpc = Index (ivar, i,
j + 1, k, nvar, n1, n2, n3),
514 icmc = Index (ivar, i,
j - 1, k, nvar, n1, n2, n3),
515 iccp = Index (ivar, i,
j, k + 1, nvar, n1, n2, n3),
516 iccm = Index (ivar, i,
j, k - 1, nvar, n1, n2, n3),
517 icpp = Index (ivar, i,
j + 1, k + 1, nvar, n1, n2, n3),
518 icmp = Index (ivar, i,
j - 1, k + 1, nvar, n1, n2, n3),
519 icpm = Index (ivar, i,
j + 1, k - 1, nvar, n1, n2, n3),
520 icmm = Index (ivar, i,
j - 1, k - 1, nvar, n1, n2, n3),
521 ipcp = Index (ivar, i + 1,
j, k + 1, nvar, n1, n2, n3),
522 imcp = Index (ivar, i - 1,
j, k + 1, nvar, n1, n2, n3),
523 ipcm = Index (ivar, i + 1,
j, k - 1, nvar, n1, n2, n3),
524 imcm = Index (ivar, i - 1,
j, k - 1, nvar, n1, n2, n3),
525 ippc = Index (ivar, i + 1,
j + 1, k, nvar, n1, n2, n3),
526 impc = Index (ivar, i - 1,
j + 1, k, nvar, n1, n2, n3),
527 ipmc = Index (ivar, i + 1,
j - 1, k, nvar, n1, n2, n3),
528 immc = Index (ivar, i - 1,
j - 1, k, nvar, n1, n2, n3);
531 dV1 = 0.5 * ga * (dv.
d0[ipcc] - dv.
d0[imcc]);
532 dV2 = 0.5 * gb * (dv.
d0[icpc] - dv.
d0[icmc]);
533 dV3 = 0.5 * gp * (dv.
d0[iccp] - dv.
d0[iccm]);
534 dV11 = ga2 * (dv.
d0[ipcc] + dv.
d0[imcc] - 2 * dv.
d0[iccc]);
535 dV22 = gb2 * (dv.
d0[icpc] + dv.
d0[icmc] - 2 * dv.
d0[iccc]);
536 dV33 = gp2 * (dv.
d0[iccp] + dv.
d0[iccm] - 2 * dv.
d0[iccc]);
538 0.25 * gagb * (dv.
d0[ippc] - dv.
d0[ipmc] + dv.
d0[immc] - dv.
d0[impc]);
540 0.25 * gagp * (dv.
d0[ipcp] - dv.
d0[imcp] + dv.
d0[imcm] - dv.
d0[ipcm]);
542 0.25 * gbgp * (dv.
d0[icpp] - dv.
d0[icpm] + dv.
d0[icmm] - dv.
d0[icmp]);
544 dV11 = sin_al_i3 * (sin_al * dV11 - cos_al * dV1);
545 dV12 = sin_al_i1 * sin_be_i1 * dV12;
546 dV13 = sin_al_i1 * dV13;
547 dV22 = sin_be_i3 * (sin_be * dV22 - cos_be * dV2);
548 dV23 = sin_be_i1 * dV23;
549 dV1 = sin_al_i1 * dV1;
550 dV2 = sin_be_i1 * dV2;
552 dU.
d0[ivar] = Am1 * dV0;
553 dU.
d1[ivar] = dV0 + Am1 * dV1;
554 dU.
d2[ivar] = Am1 * dV2;
555 dU.
d3[ivar] = Am1 * dV3;
556 dU.
d11[ivar] = 2 * dV1 + Am1 * dV11;
557 dU.
d12[ivar] = dV2 + Am1 * dV12;
558 dU.
d13[ivar] = dV3 + Am1 * dV13;
559 dU.
d22[ivar] = Am1 * dV22;
560 dU.
d23[ivar] = Am1 * dV23;
561 dU.
d33[ivar] = Am1 * dV33;
563 indx = Index (ivar, i,
j, k, nvar, n1, n2, n3);
564 U.
d0[ivar] =
u.d0[indx];
565 U.
d1[ivar] =
u.d1[indx];
566 U.
d2[ivar] =
u.d2[indx];
567 U.
d3[ivar] =
u.d3[indx];
568 U.
d11[ivar] =
u.d11[indx];
569 U.
d12[ivar] =
u.d12[indx];
570 U.
d13[ivar] =
u.d13[indx];
571 U.
d22[ivar] =
u.d22[indx];
572 U.
d23[ivar] =
u.d23[indx];
573 U.
d33[ivar] =
u.d33[indx];
577 AB_To_XR (nvar, A, B, &
X, &R, dU);
580 C_To_c (nvar,
X, R, &
x, &r, dU);
583 rx3_To_xyz (nvar,
x, r, phi, &
y, &z, dU);
584 LinEquations (A, B,
X, R,
x, r, phi,
y, z, dU, U, values);
585 for (ivar = 0; ivar < nvar; ivar++)
588 free_derivs (&dU, nvar);
589 free_derivs (&U, nvar);
595 int *ncols,
int **cols,
double **Matrix)
598 int column, row, mcol;
599 int i, i1, i_0, i_1,
j, j1, j_0, j_1, k, k1, k_0, k_1, N1, N2, N3,
600 ivar, ivar1, ntotal = nvar * n1 * n2 * n3;
604 values =
dvector (0, nvar - 1);
605 allocate_derivs (&dv, ntotal);
611 for (i = 0; i < n1; i++)
613 for (
j = 0;
j < n2;
j++)
615 for (k = 0; k < n3; k++)
617 for (ivar = 0; ivar < nvar; ivar++)
619 row = Index (ivar, i,
j, k, nvar, n1, n2, n3);
626 for (i = 0; i < n1; i++)
628 for (
j = 0;
j < n2;
j++)
630 for (k = 0; k < n3; k++)
632 for (ivar = 0; ivar < nvar; ivar++)
634 column = Index (ivar, i,
j, k, nvar, n1, n2, n3);
650 for (i1 = i_0; i1 <= i_1; i1++)
652 for (j1 = j_0; j1 <= j_1; j1++)
654 for (k1 = k_0; k1 <= k_1; k1++)
656 JFD_times_dv (i1, j1, k1, nvar, n1, n2, n3,
658 for (ivar1 = 0; ivar1 < nvar; ivar1++)
660 if (values[ivar1] != 0)
662 row = Index (ivar1, i1, j1, k1, nvar, n1, n2, n3);
664 cols[row][mcol] = column;
665 Matrix[row][mcol] = values[ivar1];
678 free_derivs (&dv, ntotal);
686 int nvar,
int n1,
int n2,
int n3)
689 double *
p, *values1, **values2, result;
694 values2 =
dmatrix (0, N, 0, N);
696 for (k = 0; k < n3; k++)
698 for (
j = 0;
j < n2;
j++)
700 for (i = 0; i < n1; i++)
701 p[i] =
v[ivar + nvar * (i + n1 * (
j + n2 * k))];
703 values2[
j][k] =
chebev (-1, 1,
p, n1, A);
707 for (k = 0; k < n3; k++)
709 for (
j = 0;
j < n2;
j++)
710 p[
j] = values2[
j][k];
712 values1[k] =
chebev (-1, 1,
p, n2, B);
716 result =
fourev (values1, n3, phi);
730 double al = Pih * (2 * i + 1) / n1, be = Pih * (2 *
j + 1) / n2,
731 sin_al = sin (al), sin2_al = sin_al * sin_al, cos_al = cos (al),
732 sin_be = sin (be), sin2_be = sin_be * sin_be, cos_be = cos (be);
734 vv.
d0[0] =
v.d0[Index (ivar, i,
j, k, nvar, n1, n2, n3)];
735 vv.
d1[0] =
v.d1[Index (ivar, i,
j, k, nvar, n1, n2, n3)] * sin_al;
736 vv.
d2[0] =
v.d2[Index (ivar, i,
j, k, nvar, n1, n2, n3)] * sin_be;
737 vv.
d3[0] =
v.d3[Index (ivar, i,
j, k, nvar, n1, n2, n3)];
738 vv.
d11[0] =
v.d11[Index (ivar, i,
j, k, nvar, n1, n2, n3)] * sin2_al
739 +
v.d1[Index (ivar, i,
j, k, nvar, n1, n2, n3)] * cos_al;
741 v.d12[Index (ivar, i,
j, k, nvar, n1, n2, n3)] * sin_al * sin_be;
742 vv.
d13[0] =
v.d13[Index (ivar, i,
j, k, nvar, n1, n2, n3)] * sin_al;
743 vv.
d22[0] =
v.d22[Index (ivar, i,
j, k, nvar, n1, n2, n3)] * sin2_be
744 +
v.d2[Index (ivar, i,
j, k, nvar, n1, n2, n3)] * cos_be;
745 vv.
d23[0] =
v.d23[Index (ivar, i,
j, k, nvar, n1, n2, n3)] * sin_be;
746 vv.
d33[0] =
v.d33[Index (ivar, i,
j, k, nvar, n1, n2, n3)];
754 + a *
v.d1[0] +
b *
v.d2[0] +
c *
v.d3[0]
755 + 0.5 * a * a *
v.d11[0] + a *
b *
v.d12[0] + a *
c *
v.d13[0]
756 + 0.5 *
b *
b *
v.d22[0] +
b *
c *
v.d23[0] + 0.5 *
c *
c *
v.d33[0];
763 int n2,
int n3,
derivs v,
double x,
double y,
767 double xs, ys,
zs, rs2, phi,
X, R, A, B, al, be, aux1, aux2, a,
b,
c,
771 allocate_derivs (&vv, 1);
776 rs2 = ys * ys +
zs *
zs;
781 aux1 = 0.5 * (xs * xs + rs2 - 1);
782 aux2 = sqrt (aux1 * aux1 + rs2);
783 X = asinh (sqrt (aux1 + aux2));
784 R = asin (
min(1.0, sqrt (-aux1 + aux2)));
788 A = 2 * tanh (0.5 *
X) - 1;
789 B = tan (0.5 * R - Piq);
793 i = rint (al * n1 / Pi - 0.5);
794 j = rint (be * n2 / Pi - 0.5);
795 k = rint (0.5 * phi * n3 / Pi);
797 a = al - Pi * (i + 0.5) / n1;
798 b = be - Pi * (
j + 0.5) / n2;
799 c = phi - 2 * Pi * k / n3;
801 calculate_derivs (i,
j, k, ivar, nvar, n1, n2, n3,
v, vv);
802 result = interpol (a,
b,
c, vv);
803 free_derivs (&vv, 1);
805 Ui = (A - 1) * result;
814 const int n2,
const int n3,
derivs v,
double x,
double y,
818 double xs, ys,
zs, rs2, phi,
X, R, A, B, aux1, aux2, result, Ui;
823 rs2 = ys * ys +
zs *
zs;
828 aux1 = 0.5 * (xs * xs + rs2 - 1);
829 aux2 = sqrt (aux1 * aux1 + rs2);
830 X = asinh (sqrt (aux1 + aux2));
831 R = asin (
min(1.0, sqrt (-aux1 + aux2)));
835 A = 2 * tanh (0.5 *
X) - 1;
836 B = tan (0.5 * R - Piq);
838 result = PunctEvalAtArbitPosition (
v.d0, ivar, A, B, phi, nvar, n1, n2, n3);
840 Ui = (A - 1) * result;
856 double *
p, *values1, **values2, result;
863 values2 =
dmatrix (0, N, 0, N);
865 for (k = 0; k < n3; k++)
867 for (
j = 0;
j < n2;
j++)
869 for (i = 0; i < n1; i++)
p[i] =
v[ivar + nvar * (i + n1 * (
j + n2 * k))];
871 values2[
j][k] =
chebev (-1, 1,
p, n1, A);
875 for (k = 0; k < n3; k++)
877 for (
j = 0;
j < n2;
j++)
p[
j] = values2[
j][k];
879 values1[k] =
chebev (-1, 1,
p, n2, B);
883 result =
fourev (values1, n3, phi);
900 for (
int i=2;i<m;i++)
902 recvec[i] = 2*
x*recvec[i-1] - recvec[i-2];
908 double result = -0.5*coeff[0];
910 #pragma omp simd reduction(+:result)
911 for (
int i=0;i<m;i++)
913 result += recvec[i]*coeff[i];
924 double values1[npoints_phi];
925 double values2[npoints_B][npoints_phi];
926 double _recvec[npoints_A];
933 for (
int j = 0;
j < npoints_B;
j++)
934 for (
int k = 0; k < npoints_phi; k++) values2[
j][k] = -0.5* _d0contig[myglob++];
938 for (
int i = 0; i < npoints_A; i++)
939 for (
int j = 0;
j < npoints_B;
j++)
940 #pragma omp simd safelen(4)
941 for (
int k = 0; k < npoints_phi; k++)
943 const int index = k +
j*npoints_phi + i*npoints_phi*npoints_B;
944 values2[
j][k] += _recvec[i]*_d0contig[index];
951 for (
int k = 0; k < npoints_phi; k++)
953 for (
int j = 0;
j < npoints_B;
j++)
p[
j] = values2[
j][k];
957 double result =
fourev (values1, npoints_phi, phi);
974 double p[npoints_B_low];
975 double values1[npoints_phi_low];
976 double values2[npoints_B_low][npoints_phi_low];
977 double _recvec[npoints_A_low];
984 for (
int j = 0;
j < npoints_B_low;
j++)
985 for (
int k = 0; k < npoints_phi_low; k++) values2[
j][k] = -0.5* _d0contig_low[myglob++];
989 for (
int i = 0; i < npoints_A_low; i++)
990 for (
int j = 0;
j < npoints_B_low;
j++)
991 #pragma omp simd safelen(4)
992 for (
int k = 0; k < npoints_phi_low; k++)
995 const int index = k +
j*n3 + i*n3*n2;
997 values2[
j][k] += _recvec[i]*_d0contig[index];
1005 for (
int k = 0; k < npoints_phi_low; k++)
1007 for (
int j = 0;
j < npoints_B_low;
j++)
p[
j] = values2[
j][k];
1011 double result =
fourev (values1, npoints_phi_low, phi);
1030 double xs, ys,
zs, rs2, phi,
X, R, A, B, aux1, aux2, result, Ui;
1036 rs2 = ys * ys +
zs *
zs;
1041 aux1 = 0.5 * (xs * xs + rs2 - 1);
1042 aux2 = sqrt (aux1 * aux1 + rs2);
1043 X = asinh (sqrt (aux1 + aux2));
1044 R = asin (
min(1.0, sqrt (-aux1 + aux2)));
1048 A = 2 * tanh (0.5 *
X) - 1;
1049 B = tan (0.5 * R - Piq);
1051 if (low_res) result = PunctEvalAtArbitPositionFasterLowRes(A, B, phi);
1052 else result = PunctEvalAtArbitPositionFaster (A, B, phi);
1054 Ui = (A - 1) * result;
1066 int i,
j, k, N, n, l, m;
1067 double *
p, ***values3, ***values4;
1080 for(i=0;i<n1;i++)
p[i]=
v[ivar + (i + n1 * (
j + n2 * k))];
1083 for (n=0;n<n1;n++) {
1084 values3[n][
j][k] =
p[n];
1091 for (n = 0; n < n1; n++){
1093 for(
j=0;
j<n2;
j++)
p[
j]=values3[n][
j][k];
1095 for (l = 0; l < n2; l++){
1096 values4[n][l][k] =
p[l];
1102 for (i = 0; i < n1; i++){
1103 for (
j = 0;
j < n2;
j++){
1104 for(k=0;k<n3;k++)
p[k]=values4[i][
j][k];
1106 for (k = 0; k<n3; k++){
1107 cf[ivar + (i + n1 * (
j + n2 * k))] =
p[k];
void free_derivs(derivs *v, int n)
void Derivatives_AB3(int nvar, int n1, int n2, int n3, derivs v)
void JFD_times_dv(int i, int j, int k, int nvar, int n1, int n2, int n3, derivs dv, derivs u, double *values)
void SpecCoef(int n1, int n2, int n3, int ivar, double *v, double *cf)
double PunctEvalAtArbitPositionFasterLowRes(double A, double B, double phi)
void F_of_v(int nvar, int n1, int n2, int n3, derivs v, double *F, derivs u)
double PunctEvalAtArbitPositionFast(double *v, int ivar, double A, double B, double phi, int nvar, int n1, int n2, int n3)
Fast Spectral Interpolation Routine Stuff.
void calculate_derivs(int i, int j, int k, int ivar, int nvar, int n1, int n2, int n3, derivs v, derivs vv)
double PunctTaylorExpandAtArbitPosition(int ivar, int nvar, int n1, int n2, int n3, derivs v, double x, double y, double z)
double PunctEvalAtArbitPositionFaster(double A, double B, double phi)
void J_times_dv(int nvar, int n1, int n2, int n3, derivs dv, double *Jdv, derivs u)
double PunctIntPolAtArbitPosition(int ivar, int nvar, int n1, int n2, int n3, derivs v, double x, double y, double z)
void SetMatrix_JFD(int nvar, int n1, int n2, int n3, derivs u, int *ncols, int **cols, double **Matrix)
double interpol(double a, double b, double c, derivs v)
void allocate_derivs(derivs *v, int n)
double PunctEvalAtArbitPosition(double *v, int ivar, double A, double B, double phi, int nvar, int n1, int n2, int n3)
int Index(int ivar, int i, int j, int k, int nvar, int n1, int n2, int n3)
double PunctIntPolAtArbitPositionFast(derivs v, double x, double y, double z, bool low_res=false)
void fourft(double *u, int N, int inv)
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 free_dvector(double *v, long nl, long nh)
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)
This file contains aliases for making access to the long state vector Q as used eg.
double chebev_wrec(double recvec[], double coeff[], int m)
static double min(double const x, double const y)
void recurrence(double x, int m, double *recvec)