6 short leaf, prolongation;
10#define NEWPID() ((NewPid *)&val(newpid,0,0,0))
20 const unsigned short sent = 1 <<
user, next = 1 << (
user + 1);
41 for (
int _c = 0;
_c < 4;
_c++)
42 if (
NEWPID()->prolongation)
56 if (
cell.flags & next)
72 char *
_i = (
char *) (
t)->p;
87 else if (!
cell.neighbors)
99 const unsigned short sent = 1 <<
user;
104 for (
int _c = 0;
_c < 4;
_c++)
109 for (
int _n = 0;
_n < ;
_n++)
120 for (
int _n = 0;
_n < 1;
_n++)
122 for (
int _c = 0;
_c < 4;
_c++)
163 fprintf (
fp,
"%g %g %g %d %d %d %d %d %d recv\n",
184 for (
int _n = 0;
_n < ;
_n++)
262 bool next =
false,
prev =
false;
267 if (pid == pid() + 1)
269 else if (pid == pid() - 1)
288 sprintf (name,
"colls-before-%d", pid());
293 sprintf (name,
"pid-before-%d", pid());
318 if (pid() <
npe() - 1)
322 if (pid() <
npe() - 1)
331 if (pid() <
npe() - 1)
344 fprintf (
fp,
"%g %g %g %d %d %d %d %d new\n",
363 fprintf (
fp,
"%g %g %g %d %d freechildren\n",
375 for (
int _c = 0;
_c < 4;
_c++)
399 for (
int _s = 0;
_s < 1;
_s++)
void array_free(Array *a)
void * array_append(Array *a, void *elem, size_t size)
static void send_tree(Array *a, int to, MPI_Request *r)
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)
Array * neighborhood(scalar newpid, int nextpid, FILE *fp)
macro2 foreach_tree(Array *t, size_t size, scalar *list, scalar newpid=newpid)
static void check_flags()
static void receive_tree(int from, scalar newpid, FILE *fp)
if TRASH define is_newpid()(!isnan(val(newpid
static void wait_tree(Array *a, MPI_Request *r)
void mpi_boundary_update(scalar *list)
#define boundary_iterate(type,...)
define double double char flags
void output_cells(FILE *fp=stdout, coord c={0}, double size=0.)
define VT _attribute[s.i] v y scalar * list
static number clamp(number x, number a, number b)
FILE * lfopen(const char *name, const char *mode)
macro2 foreach_cell_all()
macro2 foreach_cell_post_all(bool condition)
macro2 foreach_cell_post(bool condition)
trace double z_indexing(scalar index, bool leaves)
define is_active() cell(true) @define is_leaf(cell)(point.level
static void set_dirty_stencil(scalar s)
void coarsen_cell_recursive(Point point, scalar *list)
int refine_cell(Point point, scalar *list, int flag, Cache *refined)
trace void mpi_boundary_update_buffers()
static void mpi_recv_check(void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status, const char *name)
static void flag_border_cells()
static int balanced_pid(long index, long nt, int nproc)
def is_refined_check()((!is_leaf(cell) &&cell .neighbors &&cell .pid >=0) &&point.i > 0 &&point.i<(1<< level)+2 *2 - 1 &&point.j > 0 &&point.j<(1<< level)+2 *2 - 1) @ macro2 for(int _i=0
define n n define coarse(a, k, p, n)((double *)(PARENT(k
def allocated(k, l, n)(mem_allocated(((Tree *) grid) -> L[point.level]->m, point.i+k, point.j+l)) @ @def NEIGHBOR(k, l, n)(((((Tree *) grid) ->L[point.level]->m) ->b[point.i+k][point.j+l])) @ @def PARENT(k, l, n)(((((Tree *) grid) ->L[point.level-1]->m) ->b[(point.i+2)/2+k][(point.j+2)/2+l])) @ @def allocated_child(k, l, n)(level< depth() &&mem_allocated(((Tree *) grid) ->L[point.level+1]->m, 2 *point.i- 2+k, 2 *point.j- 2+l)) @ @def CHILD(k, l, n)(((((Tree *) grid) ->L[point.level+1]->m) ->b[2 *point.i- 2+k][2 *point.j- 2+l])) @ @define CELL(m)(*((Cell *)(m))) @define depth()(grid->depth) @define aparent(k, l, n) CELL(PARENT(k, l, n)) @define child(k, l, n) CELL(CHILD(k, l, n)) @define cell CELL(NEIGHBOR(0, 0, 0)) @define neighbor(k, l, n) CELL(NEIGHBOR(k, l, n)) @def neighborp(l, m, n)(Point)
#define is_prolongation(cell)
static void free_children(Point point)
static void alloc_children(Point point)