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

Added treatment of timers in the gravity interaction functions.

parent 50468e07
No related branches found
No related tags found
2 merge requests!212Gravity infrastructure,!172[WIP] Self gravity (Barnes-Hut version)
......@@ -60,7 +60,7 @@
/* Orientation of the cell pairs */
const double runner_shift[13][3] = {
{5.773502691896258e-01, 5.773502691896258e-01, 5.773502691896258e-01},
{7.071067811865475e-01, 7.071067811865475e-01, 0.0},
{7.01067811865475e-01, 7.071067811865475e-01, 0.0},
{5.773502691896258e-01, 5.773502691896258e-01, -5.773502691896258e-01},
{7.071067811865475e-01, 0.0, 7.071067811865475e-01},
{1.0, 0.0, 0.0},
......@@ -1063,7 +1063,7 @@ void *runner_main(void *data) {
else if (t->subtype == task_subtype_force)
runner_doself2_force(r, ci);
else if (t->subtype == task_subtype_grav)
runner_doself_grav(r, ci);
runner_doself_grav(r, ci, 1);
else
error("Unknown task subtype.");
break;
......@@ -1073,7 +1073,7 @@ void *runner_main(void *data) {
else if (t->subtype == task_subtype_force)
runner_dopair2_force(r, ci, cj);
else if (t->subtype == task_subtype_grav)
runner_dopair_grav(r, ci, cj);
runner_dopair_grav(r, ci, cj, 1);
else
error("Unknown task subtype.");
break;
......
......@@ -117,7 +117,7 @@ __attribute__((always_inline)) INLINE static void runner_dopair_grav_pm(
runner_iact_grav_pm(rlr_inv, r2, dx, gp, &multi);
}
TIMER_TOC(TIMER_DOPAIR); // MATTHIEU
TIMER_TOC(timer_dopair_grav_pm);
}
/**
......@@ -215,7 +215,7 @@ __attribute__((always_inline)) INLINE static void runner_dopair_grav_pp(
}
}
TIMER_TOC(TIMER_DOPAIR); // MATTHIEU
TIMER_TOC(timer_dopair_grav_pp);
}
/**
......@@ -298,7 +298,7 @@ __attribute__((always_inline)) INLINE static void runner_doself_grav_pp(
}
}
TIMER_TOC(TIMER_DOSELF); // MATTHIEU
TIMER_TOC(timer_doself_grav_pp);
}
/**
......@@ -308,11 +308,12 @@ __attribute__((always_inline)) INLINE static void runner_doself_grav_pp(
* @param r The #runner.
* @param ci The first #cell.
* @param cj The other #cell.
* @param gettimer Are we timing this ?
*
* @todo Use a local cache for the particles.
*/
static void runner_dopair_grav(struct runner *r, struct cell *ci,
struct cell *cj) {
struct cell *cj, int gettimer) {
#ifdef SWIFT_DEBUG_CHECKS
......@@ -366,6 +367,8 @@ static void runner_dopair_grav(struct runner *r, struct cell *ci,
}
#endif
TIMER_TIC;
/* Are both cells split ? */
if (ci->split && cj->split) {
......@@ -378,7 +381,7 @@ static void runner_dopair_grav(struct runner *r, struct cell *ci,
if (cell_are_neighbours(ci->progeny[j], cj->progeny[k])) {
/* Recurse */
runner_dopair_grav(r, ci->progeny[j], cj->progeny[k]);
runner_dopair_grav(r, ci->progeny[j], cj->progeny[k], 0);
} else {
......@@ -395,9 +398,20 @@ static void runner_dopair_grav(struct runner *r, struct cell *ci,
/* Compute the interactions at this level directly. */
runner_dopair_grav_pp(r, ci, cj);
}
if (gettimer) TIMER_TOC(timer_dosub_pair_grav);
}
static void runner_doself_grav(struct runner *r, struct cell *c) {
/**
* @brief Computes the interaction of all the particles in a cell
*
* @param r The #runner.
* @param c The first #cell.
* @param gettimer Are we timing this ?
*
* @todo Use a local cache for the particles.
*/
static void runner_doself_grav(struct runner *r, struct cell *c, int gettimer) {
#ifdef SWIFT_DEBUG_CHECKS
......@@ -405,6 +419,8 @@ static void runner_doself_grav(struct runner *r, struct cell *c) {
if (c->gcount == 0) error("Empty cell !");
#endif
TIMER_TIC;
/* If the cell is split, interact each progeny with itself, and with
each of its siblings. */
if (c->split) {
......@@ -412,12 +428,12 @@ static void runner_doself_grav(struct runner *r, struct cell *c) {
for (int j = 0; j < 8; j++) {
if (c->progeny[j] != NULL) {
runner_doself_grav(r, c->progeny[j]);
runner_doself_grav(r, c->progeny[j], 0);
for (int k = j + 1; k < 8; k++) {
if (c->progeny[k] != NULL) {
runner_dopair_grav(r, c->progeny[j], c->progeny[k]);
runner_dopair_grav(r, c->progeny[j], c->progeny[k], 0);
}
}
}
......@@ -429,6 +445,8 @@ static void runner_doself_grav(struct runner *r, struct cell *c) {
runner_doself_grav_pp(r, c);
}
if (gettimer) TIMER_TOC(timer_dosub_self_grav);
}
static void runner_dosub_grav(struct runner *r, struct cell *ci,
......@@ -437,7 +455,7 @@ static void runner_dosub_grav(struct runner *r, struct cell *ci,
/* Is this a single cell? */
if (cj == NULL) {
runner_doself_grav(r, ci);
runner_doself_grav(r, ci, 1);
} else {
......@@ -446,7 +464,7 @@ static void runner_dosub_grav(struct runner *r, struct cell *ci,
error("Non-neighbouring cells in pair task !");
#endif
runner_dopair_grav(r, ci, cj);
runner_dopair_grav(r, ci, cj, 1);
}
}
......
......@@ -37,10 +37,11 @@ enum {
timer_dosort,
timer_doself_density,
timer_doself_force,
timer_doself_grav,
timer_doself_grav_pp,
timer_dopair_density,
timer_dopair_force,
timer_dopair_grav,
timer_dopair_grav_pm,
timer_dopair_grav_pp,
timer_dograv_external,
timer_dosub_self_density,
timer_dosub_self_force,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment