diff --git a/src/cell.c b/src/cell.c index 03a23ed562b387d113bc68c0033979ec8578403a..46c2be3d0554ff8ff301ecae1804c0fd5155e5c3 100644 --- a/src/cell.c +++ b/src/cell.c @@ -2069,8 +2069,8 @@ int cell_unskip_tasks(struct cell *c, struct scheduler *s) { const int cj_active = (cj != NULL) ? cell_is_active(cj, e) : 0; /* Only activate tasks that involve a local active cell. */ - if ((ci_active && ci->nodeID == engine_rank) || - (cj_active && cj->nodeID == engine_rank)) { + if ((ci_active && ci->nodeID == nodeID) || + (cj_active && cj->nodeID == nodeID)) { scheduler_activate(s, t); /* Set the drifting flags */ @@ -2088,7 +2088,7 @@ int cell_unskip_tasks(struct cell *c, struct scheduler *s) { #ifdef WITH_MPI /* Activate the send/recv tasks. */ - if (ci->nodeID != engine_rank) { + if (ci->nodeID != nodeID) { /* If the local cell is active, receive data from the foreign cell. */ if (cj_active) { @@ -2112,7 +2112,7 @@ int cell_unskip_tasks(struct cell *c, struct scheduler *s) { /* If the local cell is active, send its ti_end values. */ if (cj_active) scheduler_activate_send(s, cj->send_ti, ci->nodeID); - } else if (cj->nodeID != engine_rank) { + } else if (cj->nodeID != nodeID) { /* If the local cell is active, receive data from the foreign cell. */ if (ci_active) { @@ -2156,8 +2156,6 @@ int cell_unskip_tasks(struct cell *c, struct scheduler *s) { 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); - // if (c->grav_ghost[0] != NULL) scheduler_activate(s, c->grav_ghost[0]); - // if (c->grav_ghost[1] != NULL) scheduler_activate(s, c->grav_ghost[1]); if (c->grav_down != NULL) scheduler_activate(s, c->grav_down); if (c->grav_long_range != NULL) scheduler_activate(s, c->grav_long_range); if (c->cooling != NULL) scheduler_activate(s, c->cooling); diff --git a/src/engine.c b/src/engine.c index 46eee0c9806037657c554845bfab62831d6dd8d4..1e2bf22e8f3d8db1fb49264704afca65449b6a81 100644 --- a/src/engine.c +++ b/src/engine.c @@ -4314,12 +4314,14 @@ void engine_unskip(struct engine *e) { /* Activate all the regular tasks */ threadpool_map(&e->threadpool, runner_do_unskip_mapper, e->s->local_cells_top, e->s->nr_local_cells, sizeof(int), 1, e); - // threadpool_map(&e->threadpool, runner_do_unskip_mapper, e->s->cells_top, - // e->s->nr_cells, sizeof(int), 1, e); - /* And the top level gravity FFT one */ - if (e->s->periodic && (e->policy & engine_policy_self_gravity)) - scheduler_activate(&e->sched, e->s->grav_top_level); + /* And the top level gravity FFT one when periodicity is on.*/ + if (e->s->periodic && (e->policy & engine_policy_self_gravity)) { + + /* But only if there are other tasks (i.e. something happens on this node) */ + if(e->sched.active_count > 0) + scheduler_activate(&e->sched, e->s->grav_top_level); + } if (e->verbose) message("took %.3f %s.", clocks_from_ticks(getticks() - tic), diff --git a/src/gravity/Default/gravity.h b/src/gravity/Default/gravity.h index 34e10e8896cdc3de4a288e194dca2d75bc30a854..1eee6e678288a209b669c46f7c87fbb5c399b6c7 100644 --- a/src/gravity/Default/gravity.h +++ b/src/gravity/Default/gravity.h @@ -78,7 +78,7 @@ gravity_compute_timestep_self(const struct gpart* const gp, const float epsilon = gravity_get_softening(gp); /* Note that 0.66666667 = 2. (from Gadget) / 3. (Plummer softening) */ - float dt = sqrtf(0.66666667f * grav_props->eta * epsilon * ac_inv); + const float dt = sqrtf(0.66666667f * grav_props->eta * epsilon * ac_inv); return dt; }