From 3ef53e6fdf54f98cc446a23b0d2d032eecfa42df Mon Sep 17 00:00:00 2001
From: Matthieu Schaller <schaller@strw.leidenuniv.nl>
Date: Wed, 10 Jul 2019 13:19:00 +0200
Subject: [PATCH] Added communication tasks for the BH mergers.

---
 src/scheduler.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/src/scheduler.c b/src/scheduler.c
index 367fbe599a..34fe1d0ec3 100644
--- a/src/scheduler.c
+++ b/src/scheduler.c
@@ -1680,6 +1680,14 @@ void scheduler_enqueue(struct scheduler *s, struct task *t) {
               t->ci->hydro.count * sizeof(struct black_holes_part_data),
               MPI_BYTE, t->ci->nodeID, t->flags, subtaskMPI_comms[t->subtype],
               &t->req);
+        } else if (t->subtype == task_subtype_bpart_merger) {
+          t->buff = (struct black_holes_bpart_data *)malloc(
+              sizeof(struct black_holes_bpart_data) * t->ci->black_holes.count);
+          err = MPI_Irecv(
+              t->buff,
+              t->ci->black_holes.count * sizeof(struct black_holes_bpart_data),
+              MPI_BYTE, t->ci->nodeID, t->flags, subtaskMPI_comms[t->subtype],
+              &t->req);
         } else if (t->subtype == task_subtype_xv ||
                    t->subtype == task_subtype_rho ||
                    t->subtype == task_subtype_gradient) {
@@ -1821,6 +1829,26 @@ void scheduler_enqueue(struct scheduler *s, struct task *t) {
                 MPI_BYTE, t->cj->nodeID, t->flags, subtaskMPI_comms[t->subtype],
                 &t->req);
           }
+        } else if (t->subtype == task_subtype_bpart_merger) {
+          t->buff = (struct black_holes_bpart_data *)malloc(
+              sizeof(struct black_holes_bpart_data) * t->ci->black_holes.count);
+          cell_pack_bpart_swallow(t->ci,
+                                  (struct black_holes_bpart_data *)t->buff);
+
+          if (t->ci->black_holes.count * sizeof(struct black_holes_bpart_data) >
+              s->mpi_message_limit) {
+            err = MPI_Isend(t->buff,
+                            t->ci->black_holes.count *
+                                sizeof(struct black_holes_bpart_data),
+                            MPI_BYTE, t->cj->nodeID, t->flags,
+                            subtaskMPI_comms[t->subtype], &t->req);
+          } else {
+            err = MPI_Issend(t->buff,
+                             t->ci->black_holes.count *
+                                 sizeof(struct black_holes_bpart_data),
+                             MPI_BYTE, t->cj->nodeID, t->flags,
+                             subtaskMPI_comms[t->subtype], &t->req);
+          }
 
         } else if (t->subtype == task_subtype_xv ||
                    t->subtype == task_subtype_rho ||
-- 
GitLab