From e5de04885338d032a9a8941d31d8794b03b03698 Mon Sep 17 00:00:00 2001
From: "Peter W. Draper" <p.w.draper@durham.ac.uk>
Date: Fri, 11 Aug 2017 14:09:15 +0100
Subject: [PATCH] Fix up GIZMO SPH

Also note that we don't adjust this value for MPI, in tests the number is just too unpredictable
---
 src/engine.c | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/src/engine.c b/src/engine.c
index 63cdde149d..5080d88a84 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -2918,11 +2918,15 @@ int engine_estimate_nr_tasks(struct engine *e) {
     if (e->policy & engine_policy_hydro) {
       n1 += 36;
       n2 += 2;
-#ifdef EXTRA_HYDRO_LOOP
-      n1 += 1; /* Apparently a lot more to see... */
+#ifdef WITH_MPI
+      n1 += 6;
 #endif
+
+#ifdef EXTRA_HYDRO_LOOP
+      n1 += 15;
 #ifdef WITH_MPI
-      n1 += 6; /* XXX check this */
+      n1 += 2;
+#endif
 #endif
     }
     if (e->policy & engine_policy_self_gravity) {
@@ -2949,7 +2953,14 @@ int engine_estimate_nr_tasks(struct engine *e) {
     }
     message("n1 = %d, n2 = %d (%d/%d)", n1, n2, e->s->tot_cells, e->s->nr_cells);
     double ntasks = n1 * e->s->nr_cells + n2 * (e->s->tot_cells - e->s->nr_cells);
+
+    /* In principle we need fewer tasks per rank when using MPI, but we could
+     * have imbalances, so we don't allow for it. */
+    //if (e->nr_nodes > 1)
+    //  ntasks /= (e->nr_nodes  - 1);
+
     tasks_per_cell = ceil(ntasks / e->s->tot_cells);
+    if (tasks_per_cell < 1.0) tasks_per_cell = 1.0;
     if (e->verbose)
       message("tasks per cell estimated as: %d, maximum tasks: %d",
               tasks_per_cell, e->s->tot_cells * tasks_per_cell);
-- 
GitLab