diff --git a/src/debug.c b/src/debug.c index 601f63d6e11bbbf95f62eaef1ec6ec7ec06d3ad9..cc310e89ccb082555bf99d71dce2fc4a7b3d4931 100644 --- a/src/debug.c +++ b/src/debug.c @@ -31,6 +31,7 @@ #include "debug.h" /* Local includes. */ +#include "active.h" #include "cell.h" #include "engine.h" #include "hydro.h" @@ -268,6 +269,56 @@ int checkCellhdxmax(const struct cell *c, int *depth) { return result; } +/** + * @brief map function for dumping cells. In MPI mode local cells only. + */ +static void dumpCells_map(struct cell *c, void *data) { + uintptr_t *ldata = (uintptr_t *)data; + FILE *file = (FILE *)ldata[0]; + struct engine *e = (struct engine *)ldata[1]; + if (e->nodeID == c->nodeID) + fprintf(file, " %6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %6d %6d %6d %6d %6d " + "%20lld %6d %6d %6d %6d\n", c->loc[0], c->loc[1], c->loc[2], + c->width[0], c->width[1], c->width[2], c->count, c->gcount, + c->scount, c->depth, c->nr_tasks, c->ti_end_min, + get_time_bin(c->ti_end_min), (c->super == c), + cell_is_active(c, e), c->nodeID); +} + + +/** + * @brief Dump the location, depth, task counts and timebins and active state, + * for all cells to a simple text file. + * + * @param prefix base output filename + * @param s the space holding the cells to dump. + */ +void dumpCells(const char *prefix, struct space *s) { + + FILE *file = NULL; + + /* Name of output file. */ + static int nseq = 0; + char fname[200]; + sprintf(fname, "%s_%03d.dat", prefix, nseq); + atomic_inc(&nseq); + + file = fopen(fname, "w"); + + /* Header. */ + fprintf(file, "# %6s %6s %6s %6s %6s %6s %6s %6s %6s %6s %6s " + "%20s %6s %6s %6s %6s\n", "x", "y", "z", "xw", "yw", "zw", "count", + "gcount", "scount", "depth", "tasks", "ti_end_min", "timebin", + "issuper", "active", "rank"); + + uintptr_t data[2]; + data[0] = (size_t) file; + data[1] = (size_t) s->e; + space_map_cells_pre(s, 1, dumpCells_map, &data); + fclose(file); +} + + #ifdef HAVE_METIS /** diff --git a/src/debug.h b/src/debug.h index 7422a6f7f9815490966f08415e0312876ce0123f..e07c73c7a68b0ef244b4a30cf3aecebc6ff38f3d 100644 --- a/src/debug.h +++ b/src/debug.h @@ -33,6 +33,7 @@ void printgParticle_single(struct gpart *gp); int checkSpacehmax(struct space *s); int checkCellhdxmax(const struct cell *c, int *depth); +void dumpCells(const char *prefix, struct space *s); #ifdef HAVE_METIS #include "metis.h"