From 44ba335610f9f708f7a3b24858bf1dbad3b9704f Mon Sep 17 00:00:00 2001
From: Matthieu Schaller <matthieu.schaller@durham.ac.uk>
Date: Mon, 4 Dec 2017 23:30:46 +0000
Subject: [PATCH] Made the ghost_in and ghost_out a separate task type to stop
 the confusion of the ghost being sometimes implicit.

---
 src/cell.c   |  2 ++
 src/engine.c | 11 +++++++----
 src/task.c   |  2 +-
 src/task.h   |  2 ++
 4 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/src/cell.c b/src/cell.c
index d7b2381f03..12e4b299c0 100644
--- a/src/cell.c
+++ b/src/cell.c
@@ -2159,6 +2159,8 @@ int cell_unskip_tasks(struct cell *c, struct scheduler *s) {
     if (c->ghost_out != NULL) scheduler_activate(s, c->ghost_out);
     if (c->ghost != NULL) scheduler_activate(s, c->ghost);
     if (c->init_grav != NULL) scheduler_activate(s, c->init_grav);
+    if (c->grav_ghost_in != NULL) scheduler_activate(s, c->grav_ghost_in);
+    if (c->grav_ghost_out != NULL) scheduler_activate(s, c->grav_ghost_out);
     if (c->kick1 != NULL) scheduler_activate(s, c->kick1);
     if (c->kick2 != NULL) scheduler_activate(s, c->kick2);
     if (c->timestep != NULL) scheduler_activate(s, c->timestep);
diff --git a/src/engine.c b/src/engine.c
index eb395e0a2d..ee38e6005a 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -244,10 +244,10 @@ void engine_make_hierarchical_tasks(struct engine *e, struct cell *c) {
 
         /* Generate the ghost tasks. */
         c->ghost_in =
-            scheduler_addtask(s, task_type_ghost, task_subtype_none, 0,
+            scheduler_addtask(s, task_type_ghost_in, task_subtype_none, 0,
                               /* implicit = */ 1, c, NULL);
         c->ghost_out =
-            scheduler_addtask(s, task_type_ghost, task_subtype_none, 0,
+            scheduler_addtask(s, task_type_ghost_out, task_subtype_none, 0,
                               /* implicit = */ 1, c, NULL);
         engine_add_ghosts(e, c, c->ghost_in, c->ghost_out);
 
@@ -3274,7 +3274,8 @@ void engine_marktasks_mapper(void *map_data, int num_elements,
     }
 
     /* Hydro ghost tasks ? */
-    else if (t->type == task_type_ghost || t->type == task_type_extra_ghost) {
+    else if (t->type == task_type_ghost || t->type == task_type_extra_ghost ||
+	     t->type == task_type_ghost_in || t->type == task_type_ghost_out) {
       if (cell_is_active(t->ci, e)) scheduler_activate(s, t);
     }
 
@@ -3285,7 +3286,9 @@ void engine_marktasks_mapper(void *map_data, int num_elements,
     }
 
     /* Periodic gravity stuff (Note this is not linked to a cell) ? */
-    else if (t->type == task_type_grav_top_level) {
+    else if (t->type == task_type_grav_top_level ||
+	     t->type == task_type_grav_ghost_in || 
+	     t->type == task_type_grav_ghost_out) {
       scheduler_activate(s, t);
     }
 
diff --git a/src/task.c b/src/task.c
index a00693467c..e7acb7a4d4 100644
--- a/src/task.c
+++ b/src/task.c
@@ -50,7 +50,7 @@
 const char *taskID_names[task_type_count] = {
     "none",       "sort",           "self",
     "pair",       "sub_self",       "sub_pair",
-    "init_grav",  "ghost",          "extra_ghost",
+    "init_grav",  "ghost_in", "ghost", "ghost_out",          "extra_ghost",
     "drift_part", "drift_gpart",    "kick1",
     "kick2",      "timestep",       "send",
     "recv",       "grav_top_level", "grav_long_range",
diff --git a/src/task.h b/src/task.h
index 644ccdd74f..1b42058f52 100644
--- a/src/task.h
+++ b/src/task.h
@@ -46,7 +46,9 @@ enum task_types {
   task_type_sub_self,
   task_type_sub_pair,
   task_type_init_grav,
+  task_type_ghost_in,
   task_type_ghost,
+  task_type_ghost_out,
   task_type_extra_ghost,
   task_type_drift_part,
   task_type_drift_gpart,
-- 
GitLab