From f3cffb3af469c0209160f85e2d3d59a1682ea250 Mon Sep 17 00:00:00 2001 From: Matthieu Schaller <matthieu.schaller@durham.ac.uk> Date: Fri, 26 Aug 2016 08:22:58 +0100 Subject: [PATCH] Avoid recursion in the tasks if no particle is active. --- src/runner.c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/runner.c b/src/runner.c index 96027b4588..636d332dfc 100644 --- a/src/runner.c +++ b/src/runner.c @@ -113,8 +113,12 @@ void runner_do_grav_external(struct runner *r, struct cell *c, int timer) { const struct external_potential *potential = r->e->external_potential; const struct phys_const *constants = r->e->physical_constants; const double time = r->e->time; + TIMER_TIC; + /* Anything to do here? */ + if (c->ti_end_min > ti_current) return; + /* Recurse? */ if (c->split) { for (int k = 0; k < 8; k++) @@ -391,6 +395,9 @@ void runner_do_init(struct runner *r, struct cell *c, int timer) { TIMER_TIC; + /* Anything to do here? */ + if (c->ti_end_min > ti_current) return; + /* Recurse? */ if (c->split) { for (int k = 0; k < 8; k++) @@ -443,6 +450,9 @@ void runner_do_extra_ghost(struct runner *r, struct cell *c) { const int count = c->count; const int ti_current = r->e->ti_current; + /* Anything to do here? */ + if (c->ti_end_min > ti_current) return; + /* Recurse? */ if (c->split) { for (int k = 0; k < 8; k++) @@ -493,6 +503,9 @@ void runner_do_ghost(struct runner *r, struct cell *c) { TIMER_TIC; + /* Anything to do here? */ + if (c->ti_end_min > ti_current) return; + /* Recurse? */ if (c->split) { for (int k = 0; k < 8; k++) @@ -928,15 +941,22 @@ void runner_do_kick(struct runner *r, struct cell *c, int timer) { struct gpart *restrict gparts = c->gparts; const double const_G = r->e->physical_constants->const_newton_G; - int updated = 0, g_updated = 0; - int ti_end_min = max_nr_timesteps, ti_end_max = 0; + TIMER_TIC; - TIMER_TIC + /* Anything to do here? */ + if (c->ti_end_min > ti_current) { + c->updated = 0; + c->g_updated = 0; + return; + } #ifdef TASK_VERBOSE OUT; #endif + int updated = 0, g_updated = 0; + int ti_end_min = max_nr_timesteps, ti_end_max = 0; + /* No children? */ if (!c->split) { -- GitLab