From b27c40b1d0df306e20c99c7cec78523ee1002fe7 Mon Sep 17 00:00:00 2001 From: Matthieu Schaller <matthieu.schaller@durham.ac.uk> Date: Fri, 28 Oct 2016 14:38:29 +0100 Subject: [PATCH] Fixed a bug (reported by Stefan) that was leading to the creation of external gravity pair tasks in scheduler_splittasks() --- src/engine.c | 5 +++-- src/runner.c | 14 +++++--------- src/scheduler.c | 23 +++++++++++++---------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/engine.c b/src/engine.c index 84ad45d284..1733369c6e 100644 --- a/src/engine.c +++ b/src/engine.c @@ -1379,6 +1379,9 @@ void engine_count_and_link_tasks(struct engine *e) { engine_addlink(e, &ci->grav, t); engine_addlink(e, &cj->grav, t); } + if (t->subtype == task_subtype_external_grav) { + error("Found a pair/external-gravity task..."); + } /* Link sub-self tasks to cells. */ } else if (t->type == task_type_sub_self) { @@ -1407,8 +1410,6 @@ void engine_count_and_link_tasks(struct engine *e) { } if (t->subtype == task_subtype_external_grav) { error("Found a sub-pair/external-gravity task..."); - engine_addlink(e, &ci->grav, t); - engine_addlink(e, &cj->grav, t); } } } diff --git a/src/runner.c b/src/runner.c index c74dc3bf40..3d9055183c 100644 --- a/src/runner.c +++ b/src/runner.c @@ -1279,7 +1279,7 @@ void *runner_main(void *data) { else if (t->subtype == task_subtype_external_grav) runner_do_grav_external(r, ci, 1); else - error("Unknown task subtype."); + error("Unknown/invalid task subtype (%d).", t->subtype); break; case task_type_pair: @@ -1293,10 +1293,8 @@ void *runner_main(void *data) { runner_dopair2_force(r, ci, cj); else if (t->subtype == task_subtype_grav) runner_dopair_grav(r, ci, cj, 1); - else if (t->subtype == task_subtype_external_grav) - error("Found a pair/external-gravity task..."); else - error("Unknown task subtype."); + error("Unknown/invalid task subtype (%d).", t->subtype); break; case task_type_sub_self: @@ -1313,7 +1311,7 @@ void *runner_main(void *data) { else if (t->subtype == task_subtype_external_grav) runner_do_grav_external(r, ci, 1); else - error("Unknown task subtype."); + error("Unknown/invalid task subtype (%d).", t->subtype); break; case task_type_sub_pair: @@ -1327,10 +1325,8 @@ void *runner_main(void *data) { runner_dosub_pair2_force(r, ci, cj, t->flags, 1); else if (t->subtype == task_subtype_grav) runner_dosub_grav(r, ci, cj, 1); - else if (t->subtype == task_subtype_external_grav) - error("Found a sub-pair/external-gravity task..."); else - error("Unknown task subtype."); + error("Unknown/invalid task subtype (%d).", t->subtype); break; case task_type_sort: @@ -1386,7 +1382,7 @@ void *runner_main(void *data) { runner_do_sourceterms(r, t->ci, 1); break; default: - error("Unknown task type."); + error("Unknown/invalid task type (%d).", t->type); } /* We're done with this task, see if we get a next one. */ diff --git a/src/scheduler.c b/src/scheduler.c index c656470cb5..67882b3f82 100644 --- a/src/scheduler.c +++ b/src/scheduler.c @@ -183,16 +183,19 @@ static void scheduler_splittask(struct task *t, struct scheduler *s) { ci->progeny[k], NULL, 0), s); - /* Make a task for each pair of progeny. */ - for (int j = 0; j < 8; j++) - if (ci->progeny[j] != NULL) - for (int k = j + 1; k < 8; k++) - if (ci->progeny[k] != NULL) - scheduler_splittask( - scheduler_addtask(s, task_type_pair, t->subtype, - pts[j][k], 0, ci->progeny[j], - ci->progeny[k], 0), - s); + /* Make a task for each pair of progeny unless it's ext. gravity. */ + if (t->subtype != task_subtype_external_grav) { + + for (int j = 0; j < 8; j++) + if (ci->progeny[j] != NULL) + for (int k = j + 1; k < 8; k++) + if (ci->progeny[k] != NULL) + scheduler_splittask( + scheduler_addtask(s, task_type_pair, t->subtype, + pts[j][k], 0, ci->progeny[j], + ci->progeny[k], 0), + s); + } } } -- GitLab