From 1960b4d16371ee1c0763b397c7f83bb9f6d80a2c Mon Sep 17 00:00:00 2001
From: "Peter W. Draper" <p.w.draper@durham.ac.uk>
Date: Wed, 26 Oct 2016 16:51:20 +0100
Subject: [PATCH] Add simple function to dump the positions and ranks of the
 top-level cells

Useful to visualize the partition
---
 src/debug.c | 46 +++++++++++++++++++++++++++++++++++++++++++++-
 src/debug.h |  5 +++++
 2 files changed, 50 insertions(+), 1 deletion(-)

diff --git a/src/debug.c b/src/debug.c
index 65991231fd..d9fbc51681 100644
--- a/src/debug.c
+++ b/src/debug.c
@@ -331,4 +331,48 @@ void dumpMETISGraph(const char *prefix, idx_t nvertices, idx_t nvertexweights,
   }
 }
 
-#endif
+#endif /* HAVE_METIS */
+
+#ifdef HAVE_MPI
+/**
+ * @brief Dump the positions and MPI ranks of the given top-level cells
+ *        to a simple text file.
+ *
+ * Can be used to visualise the partitioning of an MPI run. Note should
+ * be used immediately after repartitioning when the top-level cells
+ * have been assigned their nodes. Each time this is called a new file
+ * with the given prefix, a unique integer and type of .dat is created. 
+ *
+ * @param prefix base output filename
+ * @param cells_top the top-level cells.
+ * @param nr_cells the number of cells.
+ */
+void dumpCellRanks(const char *prefix, struct cell *cells_top,
+                   int nr_cells) {
+
+  FILE *file = NULL;
+
+  /* Name of output file. */
+  static int nseq = 0;
+  char fname[200];
+  sprintf(fname, "%s_%03d.dat", prefix, nseq);
+  nseq++;
+
+  file = fopen(fname, "w");
+
+  /* Header. */
+  fprintf(file, "# %6s %6s %6s %6s %6s %6s %6s\n",
+          "x", "y", "z", "xw", "yw", "zw", "rank");
+
+  /* Output */
+  for (int i = 0; i < nr_cells; i++) {
+    struct cell *c = &cells_top[i];
+    fprintf(file, "  %6.3f %6.3f %6.3f %6.3f %6.3f %6.3f %6d\n",
+            c->loc[0], c->loc[1], c->loc[2], c->width[0],
+            c->width[1], c->width[2], c->nodeID);
+  }
+
+  fclose(file);
+}
+
+#endif /* HAVE_MPI */
diff --git a/src/debug.h b/src/debug.h
index 2142a22eca..d42bc5b108 100644
--- a/src/debug.h
+++ b/src/debug.h
@@ -37,6 +37,11 @@ int checkSpacehmax(struct space *s);
 #include "metis.h"
 void dumpMETISGraph(const char *prefix, idx_t nvtxs, idx_t ncon, idx_t *xadj,
                     idx_t *adjncy, idx_t *vwgt, idx_t *vsize, idx_t *adjwgt);
+#endif
 
+#ifdef HAVE_MPI
+void dumpCellRanks(const char *prefix, struct cell *cells_top,
+                   int nr_cells);
 #endif
+
 #endif /* SWIFT_DEBUG_H */
-- 
GitLab