Commit ca5ff1a3 authored by Loic Hausammann's avatar Loic Hausammann
Browse files

Correct supers

parent eefa0515
......@@ -2002,7 +2002,7 @@ void cell_activate_hydro_sorts(struct cell *c, int sid, struct scheduler *s) {
*/
void cell_activate_stars_sorts_up(struct cell *c, struct scheduler *s) {
if (c == c->super) {
if (c == c->hydro.super) {
#ifdef SWIFT_DEBUG_CHECKS
if ((c->nodeID == engine_rank && c->stars.sorts_local == NULL) ||
(c->nodeID != engine_rank && c->stars.sorts_foreign == NULL))
......@@ -2023,18 +2023,18 @@ void cell_activate_stars_sorts_up(struct cell *c, struct scheduler *s) {
parent != NULL && !parent->stars.do_sub_sort;
parent = parent->parent) {
parent->stars.do_sub_sort = 1;
if (parent == c->super) {
if (parent == c->hydro.super) {
#ifdef SWIFT_DEBUG_CHECKS
if ((c->nodeID == engine_rank && parent->stars.sorts_local == NULL) ||
(c->nodeID != engine_rank && parent->stars.sorts_foreign == NULL))
if ((parent->nodeID == engine_rank && parent->stars.sorts_local == NULL) ||
(parent->nodeID != engine_rank && parent->stars.sorts_foreign == NULL))
error("Trying to activate un-existing parents->stars.sorts");
#endif
if (c->nodeID == engine_rank) {
if (parent->nodeID == engine_rank) {
scheduler_activate(s, parent->stars.sorts_local);
cell_activate_drift_part(parent, s);
cell_activate_drift_spart(parent, s);
}
if (c->nodeID != engine_rank) {
if (parent->nodeID != engine_rank) {
scheduler_activate(s, parent->stars.sorts_foreign);
}
break;
......@@ -2776,10 +2776,8 @@ void cell_activate_subcell_stars_tasks(struct cell *ci, struct cell *cj,
/* Otherwise, activate the sorts and drifts. */
else {
const int do_ci = cell_is_active_stars(ci, e);
const int do_cj = cell_is_active_stars(cj, e);
if (do_ci) {
if (cell_is_active_stars(ci, e)) {
/* We are going to interact this pair, so store some values. */
atomic_or(&cj->hydro.requires_sorts, 1 << sid);
atomic_or(&ci->stars.requires_sorts, 1 << sid);
......@@ -2796,7 +2794,7 @@ void cell_activate_subcell_stars_tasks(struct cell *ci, struct cell *cj,
cell_activate_stars_sorts(ci, sid, s);
}
if (do_cj) {
if (cell_is_active_stars(cj, e)) {
/* We are going to interact this pair, so store some values. */
atomic_or(&cj->stars.requires_sorts, 1 << sid);
atomic_or(&ci->hydro.requires_sorts, 1 << sid);
......@@ -3345,7 +3343,7 @@ int cell_unskip_stars_tasks(struct cell *c, struct scheduler *s) {
struct engine *e = s->space->e;
const int nodeID = e->nodeID;
int rebuild = 0;
/* Un-skip the density tasks involved with this cell. */
for (struct link *l = c->stars.density; l != NULL; l = l->next) {
struct task *t = l->t;
......
......@@ -2684,7 +2684,8 @@ void engine_skip_force_and_kick(struct engine *e) {
t->type == task_type_grav_long_range || t->type == task_type_grav_mm ||
t->type == task_type_grav_down || t->type == task_type_cooling ||
t->type == task_type_star_formation ||
t->type == task_type_extra_ghost || t->subtype == task_subtype_gradient)
t->type == task_type_extra_ghost || t->subtype == task_subtype_gradient ||
t->subtype == task_subtype_stars_feedback || t->type == task_type_stars_sort_foreign)
t->skip = 1;
}
......@@ -2722,7 +2723,6 @@ void engine_skip_drift(struct engine *e) {
* @param e The #engine.
*/
void engine_launch(struct engine *e) {
const ticks tic = getticks();
#ifdef SWIFT_DEBUG_CHECKS
......
......@@ -273,7 +273,7 @@ void engine_addtasks_send_stars(struct engine *e, struct cell *ci,
scheduler_addunlock(s, t_feed, ci->super->end_force);
/* Ghost before you send */
scheduler_addunlock(s, ci->super->stars.ghost_out, t_feed);
scheduler_addunlock(s, ci->hydro.super->stars.ghost_out, t_feed);
}
if (hydro == NULL) {
......@@ -479,7 +479,7 @@ void engine_addtasks_recv_stars(struct engine *e, struct cell *c,
c->mpi.tag, 0, c, NULL);
/* Need to sort task before feedback loop */
scheduler_addunlock(s, t_feed, c->super->stars.sorts_foreign);
scheduler_addunlock(s, t_feed, c->hydro.super->stars.sorts_foreign);
}
c->mpi.hydro.recv_xv = t_xv;
......@@ -956,7 +956,7 @@ void engine_make_hierarchical_tasks_stars(struct engine *e, struct cell *c) {
struct scheduler *s = &e->sched;
/* Are we in a super-cell ? */
if (c->super == c) {
if (c->hydro.super == c) {
/* Foreign tasks only */
if (c->nodeID != e->nodeID) {
c->stars.sorts_foreign = scheduler_addtask(
......@@ -978,14 +978,8 @@ void engine_make_hierarchical_tasks_stars(struct engine *e, struct cell *c) {
engine_add_stars_ghosts(e, c, c->stars.ghost_in, c->stars.ghost_out);
/* Need to compute the gas density before moving to the feedback */
struct task *hydro_ghost = NULL;
if (c->hydro.super)
hydro_ghost = c->hydro.super->hydro.ghost_out;
if (hydro_ghost) {
scheduler_addunlock(s, hydro_ghost,
c->super->stars.ghost_out);
}
scheduler_addunlock(s, c->hydro.super->hydro.ghost_out,
c->hydro.super->stars.ghost_out);
}
} else { /* We are above the super-cell so need to go deeper */
......@@ -1576,8 +1570,8 @@ static inline void engine_make_stars_loops_dependencies(struct scheduler *sched,
struct task *feedback,
struct cell *c) {
/* density loop --> ghost --> feedback loop*/
scheduler_addunlock(sched, density, c->super->stars.ghost_in);
scheduler_addunlock(sched, c->super->stars.ghost_out, feedback);
scheduler_addunlock(sched, density, c->hydro.super->stars.ghost_in);
scheduler_addunlock(sched, c->hydro.super->stars.ghost_out, feedback);
}
/**
......@@ -2046,7 +2040,7 @@ void engine_make_extra_starsloop_tasks_mapper(void *map_data, int num_elements,
if (t->ci->nodeID == engine_rank) {
scheduler_addunlock(sched, t->ci->super->grav.drift, t);
scheduler_addunlock(sched, t->ci->super->stars.sorts_local, t);
scheduler_addunlock(sched, t->ci->hydro.super->stars.sorts_local, t);
}
if (t->ci->hydro.super != t->cj->hydro.super) {
......@@ -2055,11 +2049,13 @@ void engine_make_extra_starsloop_tasks_mapper(void *map_data, int num_elements,
scheduler_addunlock(sched, t->cj->hydro.super->hydro.sorts, t);
}
if (t->ci->super != t->cj->super) {
if (t->cj->nodeID == engine_rank) {
scheduler_addunlock(sched, t->cj->super->grav.drift, t);
scheduler_addunlock(sched, t->cj->super->stars.sorts_local, t);
if (t->cj->nodeID == engine_rank) {
if (t->ci->hydro.super != t->cj->hydro.super) {
scheduler_addunlock(sched, t->cj->hydro.super->stars.sorts_local, t);
}
if (t->ci->super != t->cj->super) {
scheduler_addunlock(sched, t->cj->super->grav.drift, t);
}
}
/* Start by constructing the task for the second stars loop */
......@@ -2069,11 +2065,11 @@ void engine_make_extra_starsloop_tasks_mapper(void *map_data, int num_elements,
/* Add sort before feedback loop */
if (t->ci->nodeID != engine_rank) {
scheduler_addunlock(sched, t->ci->super->stars.sorts_foreign, t2);
scheduler_addunlock(sched, t->ci->hydro.super->stars.sorts_foreign, t2);
}
if (t->ci->super != t->cj->super) {
if (t->ci->hydro.super != t->cj->hydro.super) {
if (t->cj->nodeID != engine_rank) {
scheduler_addunlock(sched, t->cj->super->stars.sorts_foreign, t2);
scheduler_addunlock(sched, t->cj->hydro.super->stars.sorts_foreign, t2);
}
}
......@@ -2087,8 +2083,10 @@ void engine_make_extra_starsloop_tasks_mapper(void *map_data, int num_elements,
scheduler_addunlock(sched, t2, t->ci->super->end_force);
}
if (t->cj->nodeID == nodeID) {
if (t->ci->super != t->cj->super) {
if (t->ci->hydro.super != t->cj->hydro.super) {
engine_make_stars_loops_dependencies(sched, t, t2, t->cj);
}
if (t->ci->super != t->cj->super) {
scheduler_addunlock(sched, t2, t->cj->super->end_force);
}
}
......@@ -2103,7 +2101,7 @@ void engine_make_extra_starsloop_tasks_mapper(void *map_data, int num_elements,
scheduler_addunlock(sched, t->ci->hydro.super->hydro.drift, t);
scheduler_addunlock(sched, t->ci->hydro.super->hydro.sorts, t);
scheduler_addunlock(sched, t->ci->super->grav.drift, t);
scheduler_addunlock(sched, t->ci->super->stars.sorts_local, t);
scheduler_addunlock(sched, t->ci->hydro.super->stars.sorts_local, t);
/* Start by constructing the task for the second stars loop */
struct task *t2 = scheduler_addtask(sched, task_type_sub_self,
......@@ -2132,7 +2130,7 @@ void engine_make_extra_starsloop_tasks_mapper(void *map_data, int num_elements,
if (t->cj->nodeID == engine_rank) {
scheduler_addunlock(sched, t->cj->super->grav.drift, t);
scheduler_addunlock(sched, t->cj->super->stars.sorts_local, t);
scheduler_addunlock(sched, t->cj->hydro.super->stars.sorts_local, t);
}
if (t->ci->hydro.super != t->cj->hydro.super) {
......@@ -2141,11 +2139,13 @@ void engine_make_extra_starsloop_tasks_mapper(void *map_data, int num_elements,
scheduler_addunlock(sched, t->ci->hydro.super->hydro.sorts, t);
}
if (t->ci->super != t->cj->super) {
if (t->ci->nodeID == engine_rank) {
if (t->ci->nodeID == engine_rank) {
if (t->ci->super != t->cj->super) {
scheduler_addunlock(sched, t->ci->super->grav.drift, t);
scheduler_addunlock(sched, t->ci->super->stars.sorts_local, t);
}
}
if (t->ci->hydro.super != t->cj->hydro.super) {
scheduler_addunlock(sched, t->ci->hydro.super->stars.sorts_local, t);
}
}
/* Start by constructing the task for the second stars loop */
......@@ -2155,11 +2155,11 @@ void engine_make_extra_starsloop_tasks_mapper(void *map_data, int num_elements,
/* Add the sort before feedback */
if (t->cj->nodeID != engine_rank) {
scheduler_addunlock(sched, t->cj->super->stars.sorts_foreign, t2);
scheduler_addunlock(sched, t->cj->hydro.super->stars.sorts_foreign, t2);
}
if (t->ci->super != t->cj->super) {
if (t->ci->hydro.super != t->cj->hydro.super) {
if (t->ci->nodeID != engine_rank) {
scheduler_addunlock(sched, t->ci->super->stars.sorts_foreign, t2);
scheduler_addunlock(sched, t->ci->hydro.super->stars.sorts_foreign, t2);
}
}
......@@ -2173,7 +2173,7 @@ void engine_make_extra_starsloop_tasks_mapper(void *map_data, int num_elements,
scheduler_addunlock(sched, t2, t->ci->super->end_force);
}
if (t->cj->nodeID == nodeID) {
if (t->ci->super != t->cj->super)
if (t->ci->hydro.super != t->cj->hydro.super)
engine_make_stars_loops_dependencies(sched, t, t2, t->cj);
if (t->ci->super != t->cj->super)
scheduler_addunlock(sched, t2, t->cj->super->end_force);
......
......@@ -71,17 +71,21 @@ void engine_activate_stars_mpi(struct engine *e, struct scheduler *s,
if (cj_active_stars) {
scheduler_activate(s, ci->mpi.hydro.recv_xv);
/* If the local cell is active, more stuff will be needed. */
scheduler_activate_send(s, cj->mpi.stars.send, ci_nodeID);
/* If the local cell is active, send its ti_end values. */
scheduler_activate_send(s, cj->mpi.send_ti, ci_nodeID);
}
if (ci_active_stars) {
scheduler_activate(s, ci->mpi.stars.recv);
}
/* If the foreign cell is active, we want its ti_end values. */
if (ci_active_stars) scheduler_activate(s, ci->mpi.recv_ti);
/* Is the foreign cell active and will need stuff from us? */
if (ci_active_stars) {
/* If the foreign cell is active, we want its ti_end values. */
scheduler_activate(s, ci->mpi.recv_ti);
/* Is the foreign cell active and will need stuff from us? */
struct link *l =
scheduler_activate_send(s, cj->mpi.hydro.send_xv, ci_nodeID);
......@@ -90,50 +94,37 @@ void engine_activate_stars_mpi(struct engine *e, struct scheduler *s,
itself. */
cell_activate_drift_part(l->t->ci, s);
}
/* If the local cell is active, more stuff will be needed. */
if (cj_active_stars) {
scheduler_activate_send(s, cj->mpi.stars.send, ci_nodeID);
}
/* If the local cell is active, send its ti_end values. */
if (cj_active_stars) {
scheduler_activate_send(s, cj->mpi.send_ti, ci_nodeID);
}
} else if (cj_nodeID != nodeID) {
/* If the local cell is active, receive data from the foreign cell. */
if (ci_active_stars) {
/* If the local cell is active, receive data from the foreign cell. */
scheduler_activate(s, cj->mpi.hydro.recv_xv);
/* If the local cell is active, more stuff will be needed. */
scheduler_activate_send(s, ci->mpi.stars.send, cj_nodeID);
/* If the local cell is active, send its ti_end values. */
scheduler_activate_send(s, ci->mpi.send_ti, cj_nodeID);
}
if (cj_active_stars) {
scheduler_activate(s, cj->mpi.stars.recv);
}
/* If the foreign cell is active, we want its ti_end values. */
if (cj_active_stars) scheduler_activate(s, cj->mpi.recv_ti);
/* Is the foreign cell active and will need stuff from us? */
if (cj_active_stars) {
/* If the foreign cell is active, we want its ti_end values. */
scheduler_activate(s, cj->mpi.recv_ti);
struct link *l =
scheduler_activate_send(s, ci->mpi.hydro.send_xv, cj_nodeID);
scheduler_activate_send(s, ci->mpi.hydro.send_xv, cj_nodeID);
/* Drift the cell which will be sent at the level at which it is
sent, i.e. drift the cell specified in the send task (l->t)
itself. */
cell_activate_drift_part(l->t->ci, s);
}
/* If the local cell is active, more stuff will be needed. */
if (ci_active_stars) {
scheduler_activate_send(s, ci->mpi.stars.send, cj_nodeID);
}
/* If the local cell is active, send its ti_end values. */
if (ci_active_stars) {
scheduler_activate_send(s, ci->mpi.send_ti, cj_nodeID);
}
}
}
#endif
/**
......@@ -341,15 +332,9 @@ void engine_marktasks_mapper(void *map_data, int num_elements,
}
/* Stars density and feedback */
const int stars_density =
t_subtype == task_subtype_stars_density;
const int stars_feedback =
t_subtype == task_subtype_stars_feedback;
const int active = ci_active_stars || cj_active_stars;
if ((stars_density || stars_feedback) && active) {
if ((t_subtype == task_subtype_stars_density ||
t_subtype == task_subtype_stars_feedback) &&
(ci_active_stars || cj_active_stars)) {
scheduler_activate(s, t);
......
......@@ -1385,14 +1385,34 @@ void DOSUB_PAIR1_STARS(struct runner *r, struct cell *ci, struct cell *cj,
/* Do any of the cells need to be sorted first? */
if (!(ci->stars.sorted & (1 << sid)) ||
ci->stars.dx_max_sort_old > ci->dmin * space_maxreldx) {
cell_activate_stars_sorts(ci, sid, &r->e->sched);
error("Interacting unsorted cell (sparts). %p %p %i %i %i %i %i %i %i %i %i %i", ci->stars.density, cj->stars.density, ci->stars.sorted, 1 << sid, cj->nodeID, ci->nodeID, ci->super->stars.sorts_foreign->skip,
ci->stars.count, ci->hydro.count, cj->stars.count, cj->hydro.count, ci->stars.do_sort);
message("%i %i %i %i %p %p", ci->cellID, cj->cellID,
ci->nodeID, cj->nodeID, ci->hydro.super, ci->super);
if (ci->hydro.super) {
message("%p", ci->hydro.super->stars.sorts_foreign);
if (ci->hydro.super->stars.sorts_foreign) {
for (struct cell *parent = ci->parent;
parent != NULL;
parent = parent->parent) {
message("%i", parent->stars.do_sub_sort);
if (parent == ci->hydro.super)
break;
}
message("%i", ci->hydro.super->stars.sorts_foreign->skip);
message("%i, %i", ci->hydro.super->stars.sorts_foreign->skip,
ci->hydro.super->stars.do_sub_sort);
message("%i %i", ci->stars.sorted, ci->hydro.super->stars.sorted);
message("%p", ci->stars.sort[sid]);
message("%p %p", ci->stars.density, ci->hydro.super->stars.density);
message("%p %p", ci->stars.feedback, ci->hydro.super->stars.feedback);
}
}
message("%i", sid);
error("Interacting unsorted cell (sparts).");
}
if (!(cj->hydro.sorted & (1 << sid)) ||
cj->hydro.dx_max_sort_old > cj->dmin * space_maxreldx)
error("Interacting unsorted cell (parts). %i", cj->nodeID);
error("Interacting unsorted cell (parts).");
}
if (do_cj) {
......@@ -1407,16 +1427,14 @@ void DOSUB_PAIR1_STARS(struct runner *r, struct cell *ci, struct cell *cj,
/* Do any of the cells need to be sorted first? */
if (!(ci->hydro.sorted & (1 << sid)) ||
ci->hydro.dx_max_sort_old > ci->dmin * space_maxreldx) {
message("%i %i: %g %g %g", ci->hydro.sorted, 1 << sid, ci->hydro.dx_max_sort_old, ci->dmin, space_maxreldx);
message("%p %p", ci->super, cj->super);
error("Interacting unsorted cell (parts). %i %i sorts=%i %i %i %i %i %p", ci->nodeID, cj->nodeID, ci->super->hydro.sorts->skip, ci->hydro.count, ci->stars.count, cj->hydro.count,
cj->stars.count, ci->super->stars.density);
error("Interacting unsorted cell (parts).");
}
if (!(cj->stars.sorted & (1 << sid)) ||
cj->stars.dx_max_sort_old > cj->dmin * space_maxreldx)
error("Interacting unsorted cell (sparts). %i %i %i %i %i %i %i", cj->nodeID, ci->nodeID, ci->stars.sorts_foreign->skip,
ci->stars.count, ci->hydro.count, cj->stars.count, cj->hydro.count);
cj->stars.dx_max_sort_old > cj->dmin * space_maxreldx) {
message("%i %i %p %p", cj->cellID, ci->cellID, cj->hydro.super, cj->super);
error("Interacting unsorted cell (sparts).");
}
}
if (do_ci || do_cj) DOPAIR1_BRANCH_STARS(r, ci, cj);
......
......@@ -1031,16 +1031,15 @@ static void scheduler_splittask_stars(struct task *t, struct scheduler *s) {
/* Empty task? */
/* Need defines in order to evaluate after check for t->ci == NULL */
#define pair_no_part \
t->type == task_type_pair && \
(t->ci->stars.count == 0 || t->cj->hydro.count == 0) && \
(t->cj->stars.count == 0 || t->ci->hydro.count == 0)
#define self_no_part \
t->type == task_type_self && \
(t->ci->stars.count == 0 || t->ci->hydro.count == 0)
if ((t->ci == NULL) || (t->type == task_type_pair && t->cj == NULL) ||
(self_no_part) || (pair_no_part)) {
const int self = (t->ci != NULL) && t->type == task_type_self &&
t->ci->stars.count != 0 && t->ci->hydro.count != 0;
const int pair = (t->ci != NULL) && (t->cj != NULL) &&
t->type == task_type_pair &&
((t->ci->stars.count != 0 && t->cj->hydro.count != 0) ||
(t->cj->stars.count != 0 && t->ci->hydro.count != 0));
if (!self && !pair) {
t->type = task_type_none;
t->subtype = task_subtype_none;
t->cj = NULL;
......@@ -1064,7 +1063,7 @@ static void scheduler_splittask_stars(struct task *t, struct scheduler *s) {
if (cell_can_split_self_stars_task(ci)) {
/* Make a sub? */
if (scheduler_dosub && ci->stars.count < space_subsize_self_stars) {
if (scheduler_dosub && ci->hydro.count < space_subsize_self_hydro) {
/* convert to a self-subtask. */
t->type = task_type_sub_self;
......@@ -1080,7 +1079,8 @@ static void scheduler_splittask_stars(struct task *t, struct scheduler *s) {
while (ci->progeny[first_child] == NULL) first_child++;
t->ci = ci->progeny[first_child];
for (int k = first_child + 1; k < 8; k++)
if (ci->progeny[k] != NULL && ci->progeny[k]->stars.count)
if (ci->progeny[k] != NULL && ci->progeny[k]->stars.count != 0 &&
ci->progeny[k]->hydro.count != 0)
scheduler_splittask_stars(
scheduler_addtask(s, task_type_self, t->subtype, 0, 0,
ci->progeny[k], NULL),
......@@ -1088,11 +1088,11 @@ static void scheduler_splittask_stars(struct task *t, struct scheduler *s) {
/* Make a task for each pair of progeny */
for (int j = 0; j < 8; j++)
if (ci->progeny[j] != NULL &&
(ci->progeny[j]->stars.count || ci->progeny[j]->hydro.count))
if (ci->progeny[j] != NULL)
for (int k = j + 1; k < 8; k++)
if (ci->progeny[k] != NULL && (ci->progeny[k]->stars.count ||
ci->progeny[k]->hydro.count))
if (ci->progeny[k] != NULL &&
((ci->progeny[k]->stars.count != 0 && ci->progeny[j]->hydro.count != 0) ||
(ci->progeny[j]->stars.count != 0 && ci->progeny[k]->hydro.count != 0)))
scheduler_splittask_stars(
scheduler_addtask(s, task_type_pair, t->subtype,
sub_sid_flag[j][k], 0, ci->progeny[j],
......@@ -1127,24 +1127,19 @@ static void scheduler_splittask_stars(struct task *t, struct scheduler *s) {
t->flags);
#endif
/* Compute number of interactions */
const int ci_interaction = (ci->stars.count * cj->hydro.count);
const int cj_interaction = (cj->stars.count * ci->hydro.count);
const int number_interactions = (ci_interaction + cj_interaction);
/* Should this task be split-up? */
if (cell_can_split_pair_stars_task(ci, cj) &&
cell_can_split_pair_stars_task(ci, cj)) {
cell_can_split_pair_stars_task(cj, ci)) {
/* Replace by a single sub-task? */
if (scheduler_dosub &&
number_interactions * sid_scale[sid] < space_subsize_pair_stars &&
!sort_is_corner(sid)) {
if (scheduler_dosub && /* Use division to avoid integer overflow. */
ci->hydro.count * sid_scale[sid] <
space_subsize_pair_hydro / cj->hydro.count &&
!sort_is_corner(sid)) {
/* Make this task a sub task. */
/* Make this task a sub task. */
t->type = task_type_sub_pair;
/* Otherwise, split it. */
} else {
/* Take a step back (we're going to recycle the current task)... */
......@@ -1487,7 +1482,7 @@ static void scheduler_splittask_stars(struct task *t, struct scheduler *s) {
/* Otherwise, break it up if it is too large? */
} else if (scheduler_doforcesplit && ci->split && cj->split &&
(number_interactions > space_maxsize)) {
(ci->hydro.count > space_maxsize / cj->hydro.count)) {
/* Replace the current task. */
t->type = task_type_none;
......
......@@ -67,8 +67,6 @@ int space_subsize_pair_hydro = space_subsize_pair_hydro_default;
int space_subsize_self_hydro = space_subsize_self_hydro_default;
int space_subsize_pair_grav = space_subsize_pair_grav_default;
int space_subsize_self_grav = space_subsize_self_grav_default;
int space_subsize_pair_stars = space_subsize_pair_stars_default;
int space_subsize_self_stars = space_subsize_self_stars_default;
int space_subdepth_diff_grav = space_subdepth_diff_grav_default;
int space_maxsize = space_maxsize_default;
......@@ -3811,12 +3809,6 @@ void space_init(struct space *s, struct swift_params *params,
space_subsize_self_grav =
parser_get_opt_param_int(params, "Scheduler:cell_sub_size_self_grav",
space_subsize_self_grav_default);
space_subsize_pair_stars =
parser_get_opt_param_int(params, "Scheduler:cell_sub_size_pair_stars",
space_subsize_pair_stars_default);
space_subsize_self_stars =
parser_get_opt_param_int(params, "Scheduler:cell_sub_size_self_stars",
space_subsize_self_stars_default);
space_splitsize = parser_get_opt_param_int(
params, "Scheduler:cell_split_size", space_splitsize_default);
space_subdepth_diff_grav =
......@@ -3837,8 +3829,6 @@ void space_init(struct space *s, struct swift_params *params,
space_subsize_pair_hydro, space_subsize_self_hydro);
message("sub_size_pair_grav set to %d, sub_size_self_grav set to %d",
space_subsize_pair_grav, space_subsize_self_grav);
message("sub_size_pair_stars set to %d, sub_size_self_stars set to %d",
space_subsize_pair_stars, space_subsize_self_stars);
}
/* Apply h scaling */
......
......@@ -53,8 +53,6 @@ struct cosmology;
#define space_subsize_self_hydro_default 32000
#define space_subsize_pair_grav_default 256000000
#define space_subsize_self_grav_default 32000
#define space_subsize_pair_stars_default 256000000
#define space_subsize_self_stars_default 32000
#define space_subdepth_diff_grav_default 4
#define space_max_top_level_cells_default 12
#define space_stretch 1.10f
......
......@@ -305,6 +305,9 @@ float task_overlap(const struct task *restrict ta,
if (tb->ci != NULL) size_union += tb->ci->stars.count;
if (tb->cj != NULL) size_union += tb->cj->stars.count;
if (size_union == 0)
return 0.f;
/* Compute the intersection of the cell data. */
const size_t size_intersect = task_cell_overlap_spart(ta->ci, tb->ci) +
task_cell_overlap_spart(ta->ci, tb->cj) +
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment