Skip to content
Snippets Groups Projects
Commit 5641fa31 authored by Matthieu Schaller's avatar Matthieu Schaller
Browse files

Merge branch 'abort_recursion' into 'master'

Avoid recursion in the tasks if no particle is active.

Does exactly what it says. We don't want to go through all the cells recursively just to find the handful that need this task to act upon. 

Big improvements when added to the `kill_drift` branch on the EAGLE_25 case. 

See merge request !230
parents 3a199fe2 f3cffb3a
No related branches found
No related tags found
1 merge request!230Avoid recursion in the tasks if no particle is active.
......@@ -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) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment