29 s.prolongation = prolongation;
47 for (
int _c = 0;
_c < 4;
_c++)
57 for (
int _c = 0;
_c < 4;
_c++)
90 for (
int i = 0;
i <= 1;
i++) {
96 for (
int j = 0;
j <= 1;
j++)
105 for (
int _c = 0;
_c < 4;
_c++)
115 for (
int _c = 0;
_c < 4;
_c++)
118 for (
int _c = 0;
_c < 4;
_c++) {
128 for (
int _l = 0;
_l < 0;
_l++)
135 for (
int _l = 0;
_l < 0;
_l++)
141 for (
int _c = 0;
_c < 4;
_c++)
168 for (
int _c = 0;
_c < 4;
_c++)
175 return (30.*
a + 5.*
b - 3.*
c)/32.;
202 return (6.*
s[] + 3.*
s[-1] -
s[1])/8.;
204 return (36.*
s[] + 18.*(
s[-1] +
s[0,-1]) - 6.*(
s[1] +
s[0,1]) +
205 9.*
s[-1,-1] - 3.*(
s[1,-1] +
s[-1,1]) +
s[1,1])/64.;
214 for (
int _c = 0;
_c < 4;
_c++)
224 g.
x =
s.gradient (
s[-1],
s[],
s[1]);
227 g.
x = (
s[1] -
s[-1])/2.;
230 for (
int _c = 0;
_c < 4;
_c++) {
247 for (
int _c = 0;
_c < 4;
_c++)
255 for (
int _c = 0;
_c < 4;
_c++)
313 char name[80] =
"coarse";
315 sprintf (name,
"coarse-%d", pid());
319 for (
int k = 0;
k <= 1;
k++)
320 for (
int _v = 0;
_v < 1;
_v++)
325 fprintf (
stderr,
", '%s' u 1+2*v:(0):2+2*v w labels tc lt 3 t ''", name);
326 fprintf (
plot,
", '%s' u 1+2*v:(0):2+2*v w labels tc lt 3 t ''", name);
329 for (
int k = 0;
k <= 1;
k++)
330 for (
int l = 0;
l <= 1;
l++) {
331 for (
int _v = 0;
_v < 1;
_v++)
338 fprintf (
stderr,
", '%s' u 1+3*v:2+3*v:3+3*v w labels tc lt 3 t ''", name);
339 fprintf (
plot,
", '%s' u 1+3*v:2+3*v:3+3*v w labels tc lt 3 t ''", name);
343 for (
int k = 0;
k <= 1;
k++)
344 for (
int l = 0;
l <= 1;
l++)
345 for (
int m = 0;
m <= 1;
m++) {
346 for (
int _v = 0;
_v < 1;
_v++)
354 fprintf (
stderr,
", '%s' u 1+4*v:2+4*v:3+4*v:4+4*v w labels tc lt 3 t ''",
356 fprintf (
plot,
", '%s' u 1+4*v:2+4*v:3+4*v:4+4*v w labels tc lt 3 t ''",
363 char name[80] =
"fine";
365 sprintf (name,
"fine-%d", pid());
369 for (
int k = -2;
k <= 3;
k++)
370 for (
int _v = 0;
_v < 1;
_v++) {
378 fprintf (
stderr,
", '%s' u 1+2*v:(0):2+2*v w labels tc lt 2 t ''", name);
379 fprintf (
plot,
", '%s' u 1+2*v:(0):2+2*v w labels tc lt 2 t ''", name);
382 for (
int k = -2;
k <= 3;
k++)
383 for (
int l = -2;
l <= 3;
l++) {
384 for (
int _v = 0;
_v < 1;
_v++) {
395 fprintf (
stderr,
", '%s' u 1+3*v:2+3*v:3+3*v w labels tc lt 2 t ''", name);
396 fprintf (
plot,
", '%s' u 1+3*v:2+3*v:3+3*v w labels tc lt 2 t ''", name);
399 for (
int k = -2;
k <= 3;
k++)
400 for (
int l = -2;
l <= 3;
l++)
401 for (
int m = -2;
m <= 3;
m++) {
402 for (
int _v = 0;
_v < 1;
_v++) {
414 fprintf (
stderr,
", '%s' u 1+4*v:2+4*v:3+4*v:4+4*v w labels tc lt 2 t ''",
416 fprintf (
plot,
", '%s' u 1+4*v:2+4*v:3+4*v:4+4*v w labels tc lt 2 t ''",
429 for (
int _s = 0;
_s < 1;
_s++)
446 for (
int l =
depth() - 1;
l >= 0;
l--) {
448 for (
int _s = 0;
_s < 1;
_s++)
450 for (
int _s = 0;
_s < 1;
_s++)
457 for (
int _s = 0;
_s < 1;
_s++)
495 for (
int l =
depth() - 1;
l >= 0;
l--) {
496 for (
int _l = 0;
_l <
l;
_l++) {
498 for (
int _c = 0;
_c < 4;
_c++)
vector g[]
We store the combined pressure gradient and acceleration field in g*.
if TRASH define &&NewPid *& val(newpid, 0, 0, 0)) -> pid > 0) @else @ define is_newpid()(((NewPid *)&val(newpid, 0, 0, 0)) ->pid > 0) @endif Array *linear_tree(size_t size, scalar newpid)
#define boundary_iterate(type,...)
void cartesian_debug(Point point)
scalar cartesian_init_vertex_scalar(scalar s, const char *name)
tensor cartesian_init_tensor(tensor t, const char *name)
define double double char flags
vector cartesian_init_vector(vector v, const char *name)
void(* boundary_level)(scalar *, int l)
scalar cartesian_init_scalar(scalar s, const char *name)
vector cartesian_init_face_vector(vector v, const char *name)
define double double char Reduce reductions
define m((k)==0 &&(l)==0 &&(m)==0) macro2 foreach_point(double _x=0.
define VT _attribute[s.i] v y scalar * list
vector(* init_vector)(vector, const char *)
scalar(* init_vertex_scalar)(scalar, const char *)
scalar * list_add(scalar *list, scalar s)
tensor(* init_tensor)(tensor, const char *)
vector(* init_face_vector)(vector, const char *)
scalar(* init_scalar)(scalar, const char *)
*cs[i, 0, 0] a *[i -1, 0, 0] j
#define quadratic(x, a1, a2, a3)
static void restriction_volume_average(Point point, scalar s)
static double biquadratic(Point point, scalar s)
static scalar multigrid_init_scalar(scalar s, const char *name)
static trace void multigrid_restriction(scalar *list)
static vector multigrid_init_vector(vector v, const char *name)
static void face_average(Point point, vector v)
static scalar multigrid_init_vertex_scalar(scalar s, const char *name)
void inverse_wavelet(scalar s, scalar w)
void wavelet(scalar s, scalar w)
void(* restriction)(Point, scalar)
static void restriction_face(Point point, scalar s)
static void refine_reset(Point point, scalar v)
static void refine_bilinear(Point point, scalar s)
static void restriction_average(Point point, scalar s)
static void refine_injection(Point point, scalar v)
static void refine_linear(Point point, scalar s)
static void refine_biquadratic(Point point, scalar s)
void set_prolongation(scalar s, void(*prolongation)(Point, scalar))
static tensor multigrid_init_tensor(tensor t, const char *name)
void set_restriction(scalar s, void(*restriction)(Point, scalar))
static void restriction_vertex(Point point, scalar s)
void multigrid_debug(Point point)
static void multigrid_setup_vector(vector v)
static vector multigrid_init_face_vector(vector v, const char *name)
static void no_restriction(Point point, scalar s)
static void refine_linear_single(Point point, scalar s)
static double biquadratic_vertex(Point point, scalar s)
static void no_data(Point point, scalar s)
static double bilinear(Point point, scalar s)
void subtree_size(scalar size, bool leaves)
static void set_dirty_stencil(scalar s)
define n n define coarse(a, k, p, n)((double *)(PARENT(k