From 15538deb097682a70c8860a93d2d138e553db7d8 Mon Sep 17 00:00:00 2001
From: Pedro Gonnet <gonnet@google.com>
Date: Tue, 18 Apr 2017 23:50:34 +0200
Subject: [PATCH] only activate drifts on local cells.

---
 src/engine.c | 34 +++++++++++++++++-----------------
 1 file changed, 17 insertions(+), 17 deletions(-)

diff --git a/src/engine.c b/src/engine.c
index 07f9ce870d..af1d52c1f7 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -2072,7 +2072,7 @@ void engine_make_extra_hydroloop_tasks(struct engine *e) {
     struct task *t = &sched->tasks[ind];
 
     /* Sort tasks depend on the drift of the cell. */
-    if (t->type == task_type_sort) {
+    if (t->type == task_type_sort && t->ci->nodeID == engine_rank) {
       scheduler_addunlock(sched, t->ci->drift, t);
     }
 
@@ -2115,8 +2115,10 @@ void engine_make_extra_hydroloop_tasks(struct engine *e) {
     else if (t->type == task_type_pair && t->subtype == task_subtype_density) {
 
       /* Make all density tasks depend on the drift. */
-      scheduler_addunlock(sched, t->ci->drift, t);
-      scheduler_addunlock(sched, t->cj->drift, t);
+      if (t->ci->nodeID == engine_rank)
+        scheduler_addunlock(sched, t->ci->drift, t);
+      if (t->cj->nodeID == engine_rank)
+        scheduler_addunlock(sched, t->cj->drift, t);
 
 #ifdef EXTRA_HYDRO_LOOP
       /* Start by constructing the task for the second and third hydro loop */
@@ -2495,7 +2497,8 @@ void engine_marktasks_mapper(void *map_data, int num_elements,
             error("bad flags in sort task.");
 #endif
           scheduler_activate(s, ci->sorts);
-          scheduler_activate(s, ci->drift);
+          if (ci->nodeID == engine_rank)
+            scheduler_activate(s, ci->drift);
         }
         if (!(cj->sorted & (1 << t->flags))) {
 #ifdef SWIFT_DEBUG_CHECKS
@@ -2503,7 +2506,8 @@ void engine_marktasks_mapper(void *map_data, int num_elements,
             error("bad flags in sort task.");
 #endif
           scheduler_activate(s, cj->sorts);
-          scheduler_activate(s, cj->drift);
+          if (cj->nodeID == engine_rank)
+            scheduler_activate(s, cj->drift);
         }
       }
 
@@ -2526,12 +2530,10 @@ void engine_marktasks_mapper(void *map_data, int num_elements,
         if (l == NULL) error("Missing link to send_xv task.");
         scheduler_activate(s, l->t);
 
-        if (t->type == task_type_pair) {
-          if (cj->drift)
-            scheduler_activate(s, cj->drift);
-          else
-            error("Drift task missing !");
-        }
+        if (l->t->ci->drift)
+          scheduler_activate(s, l->t->ci->drift);
+        else
+          error("Drift task missing !");
 
         if (cell_is_active(cj, e)) {
           for (l = cj->send_rho; l != NULL && l->t->cj->nodeID != ci->nodeID;
@@ -2564,12 +2566,10 @@ void engine_marktasks_mapper(void *map_data, int num_elements,
         if (l == NULL) error("Missing link to send_xv task.");
         scheduler_activate(s, l->t);
 
-        if (t->type == task_type_pair) {
-          if (ci->drift)
-            scheduler_activate(s, ci->drift);
-          else
-            error("Drift task missing !");
-        }
+        if (l->t->ci->drift)
+          scheduler_activate(s, l->t->ci->drift);
+        else
+          error("Drift task missing !");
 
         if (cell_is_active(ci, e)) {
           for (l = ci->send_rho; l != NULL && l->t->cj->nodeID != cj->nodeID;
-- 
GitLab