diff --git a/src/multipole.h b/src/multipole.h index 07bb844782d0a010acc81be112f0c56cd91f1a91..c7524f6dc4361cd4e305985e7d188822bfb3c815 100644 --- a/src/multipole.h +++ b/src/multipole.h @@ -385,6 +385,7 @@ INLINE static void gravity_L2P(const struct gravity_tensors *l, struct gpart *gp) { #ifdef SWIFT_DEBUG_CHECKS + if (l->mass_interacted == 0.f) error("Interacting with empty field tensor"); gp->mass_interacted += l->mass_interacted; #endif diff --git a/src/runner.c b/src/runner.c index 0eb47c8216a0c28ecacf6befd25e47dccf5d11c9..ff59ba407a9ad22bf283ffe80e0c60cef922c5b6 100644 --- a/src/runner.c +++ b/src/runner.c @@ -1829,7 +1829,7 @@ void *runner_main(void *data) { // runner_do_grav_mm(r, t->ci, 1); break; case task_type_grav_down: - runner_do_grav_down(r, t->ci); + runner_do_grav_down(r, t->ci, 1); break; case task_type_grav_top_level: // runner_do_grav_top_level(r); diff --git a/src/runner_doiact_grav.h b/src/runner_doiact_grav.h index c1788b3b18278fe659a15f4398a02fc2798c4ccb..d03fdaea71bff848682605ec8aaf14c80a412c5f 100644 --- a/src/runner_doiact_grav.h +++ b/src/runner_doiact_grav.h @@ -25,7 +25,9 @@ #include "gravity.h" #include "part.h" -void runner_do_grav_down(struct runner *r, struct cell *c) { +void runner_do_grav_down(struct runner *r, struct cell *c, int timer) { + + TIMER_TIC; if (c->split) { @@ -38,6 +40,8 @@ void runner_do_grav_down(struct runner *r, struct cell *c) { 1); gravity_field_tensors_add(cp->multipole, &temp); + + runner_do_grav_down(r, cp, 0); } } @@ -53,6 +57,8 @@ void runner_do_grav_down(struct runner *r, struct cell *c) { if (gpart_is_active(gp, e)) gravity_L2P(c->multipole, gp); } } + + if (timer) TIMER_TOC(timer_dograv_down); } /** @@ -554,6 +560,8 @@ void runner_do_grav_long_range(struct runner *r, struct cell *ci, int timer) { } #endif + TIMER_TIC; + /* Recover the list of top-level cells */ const struct engine *e = r->e; struct cell *cells = e->s->cells_top; @@ -583,6 +591,8 @@ void runner_do_grav_long_range(struct runner *r, struct cell *ci, int timer) { if (!cell_are_neighbours(ci, cj)) runner_dopair_grav_mm(r, ci, cj); } + + if (timer) TIMER_TOC(timer_dograv_long_range); } #endif /* SWIFT_RUNNER_DOIACT_GRAV_H */ diff --git a/src/timers.h b/src/timers.h index 4cb4d7e0ba60003ba4caefffe257c929c59a8d9e..39bcf30fba0ec36d9209ddcbf3c71035a5851dbb 100644 --- a/src/timers.h +++ b/src/timers.h @@ -49,6 +49,8 @@ enum { timer_dopair_grav_mm, timer_dopair_grav_pp, timer_dograv_external, + timer_dograv_down, + timer_dograv_long_range, timer_dosource, timer_dosub_self_density, timer_dosub_self_gradient,