From d76b4aa1c336148360b857adabae2ceecc18b927 Mon Sep 17 00:00:00 2001
From: "Peter W. Draper" <p.w.draper@durham.ac.uk>
Date: Mon, 13 Mar 2017 13:08:57 +0000
Subject: [PATCH] Stop repartitioning in the step after a repartition, that
 makes no sense and is unlikely to give interesting CPU times. Also remove
 some development output from timestep file

---
 src/engine.c | 27 +++++++++++++++------------
 src/engine.h |  2 --
 2 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/src/engine.c b/src/engine.c
index 9b5f771f80..7f987db400 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -3054,10 +3054,9 @@ void engine_step(struct engine *e) {
     fflush(stdout);
 
     fprintf(e->file_timesteps,
-            "  %6d %14e %14e %10zu %10zu %10zu %21.3f %3d %3d\n", e->step,
+            "  %6d %14e %14e %10zu %10zu %10zu %21.3f\n", e->step,
             e->time, e->timeStep, e->updates, e->g_updates, e->s_updates,
-            e->wallclock_time, (e->lastrebuild > 0),
-            (e->lastrepart != REPART_NONE));
+            e->wallclock_time);
     fflush(e->file_timesteps);
   }
 
@@ -3071,17 +3070,24 @@ void engine_step(struct engine *e) {
   e->timeStep = (e->ti_current - e->ti_old) * e->timeBase;
 
   /* Prepare the tasks to be launched, rebuild or repartition if needed. */
+#ifdef WITH_MPI
+  int justrepart = (e->forcerepart != REPART_NONE);
+#endif
   engine_prepare(e);
 
 /* Repartition the space amongst the nodes? */
 #ifdef WITH_MPI
 
-  /* Old style if trigger is >1 or this is the second step. */
-  if (e->reparttype->trigger > 1 || e->step == 2) {
-    if (e->reparttype->trigger > 1) {
-      if (e->step % (int)e->reparttype->trigger == 2) e->forcerepart = 1;
-    } else {
-      e->forcerepart = 1;
+  /* Old style if trigger is >1 or this is the second step, but we never
+   * repartition immediately after a repartition, those timings will not be
+   * representative. */
+  if (e->reparttype->trigger > 1 || e->step == 2 || justrepart) {
+    if (! justrepart) {
+      if (e->reparttype->trigger > 1) {
+        if (e->step % (int)e->reparttype->trigger == 2) e->forcerepart = 1;
+      } else {
+        e->forcerepart = 1;
+      }
     }
 
 #ifdef SWIFT_DEBUG_TASKS
@@ -3160,7 +3166,6 @@ void engine_step(struct engine *e) {
 
   /* All nodes do this together. */
   MPI_Bcast(&e->forcerepart, 1, MPI_INT, 0, MPI_COMM_WORLD);
-  e->lastrepart = e->forcerepart;
 #endif
 
   /* Are we drifting everything (a la Gadget/GIZMO) ? */
@@ -3668,9 +3673,7 @@ void engine_init(struct engine *e, struct space *s,
   e->proxy_ind = NULL;
   e->nr_proxies = 0;
   e->forcerebuild = 1;
-  e->lastrebuild = 1;
   e->forcerepart = 0;
-  e->lastrepart = 0;
   e->reparttype = reparttype;
   e->dump_snapshot = 0;
   e->save_stats = 0;
diff --git a/src/engine.h b/src/engine.h
index 47940bb7cc..dba72cc97c 100644
--- a/src/engine.h
+++ b/src/engine.h
@@ -203,11 +203,9 @@ struct engine {
 
   /* Force the engine to rebuild? */
   int forcerebuild;
-  int lastrebuild;
 
   /* Force the engine to repartition ? */
   int forcerepart;
-  int lastrepart;
   struct repartition *reparttype;
 
   /* Need to dump some statistics ? */
-- 
GitLab