13#define GRIDNAME "Linear quadtree"
18#define _I (quad_x(point.i))
19#define _J (quad_y(point.i))
26#define data(k,l) point.d[quad_neighbor(point.i, k, l)]
33 return ((1 << (2*(
l + 1))) - 1)/3;
40 while (
p > 0) {
p /= 4;
l++; }
57 for (
int i = 0;
i < 2*
quad_r - 1;
i += 2,
m *= 4,
b *= 2)
58 a += ((
m &
n) != 0)*
b;
65 for (
int i = 1;
i < 2*
quad_r;
i += 2,
m *= 4,
b *= 2)
66 a += ((
m &
n) != 0)*
b;
80#define quad(n, d) ((((n|quad_bottom)+(d&quad_left))&quad_left)|(((n|quad_left)+(d&quad_bottom))&quad_bottom))
140 { _s++; stack[_s].i = c; stack[_s].stage = d; }
142 { c = stack[_s].i; d = stack[_s].stage; _s--; }
144#define foreach(grid) \
146 struct { int i, stage; } stack[STACKSIZE]; int _s = -1; \
149 point.depth = quad_r; \
153 _pop (point.i, stage); \
155 point.level = level (point.i); \
156 if (point.level < point.depth) { \
157 _push (point.i, 1); \
158 _push (4*point.i + 1, 0); \
164#define end_foreach() \
169 _push (point.i, stage + 1); \
170 _push (4*point.i + stage + 1, 0); \
190 void *
q =
quadtree (r,
sizeof (
double));
193 printf (
"%d %d %d ( %d , %d ) | ( %d , %d ) ",
vector q[]
The primitive variables are the momentum , pressure , density , (face) specific volume ,...
int main(int argc, char *argv[])
define m((k)==0 &&(l)==0 &&(m)==0) macro2 foreach_point(double _x=0.
define neighbor(o, p, q)((Point)
*cs[i, 0, 0] a *[i -1, 0, 0] j
int quad_neighbor(int p, int i, int j)
int quad_neighbor_finest(int p, int i, int j)
void * quadtree(int r, size_t s)