Commit 7c2c2cc0 authored by Matthieu Schaller's avatar Matthieu Schaller
Browse files

Drift task now scheduled correctly

parent 456d9fad
...@@ -879,14 +879,8 @@ int cell_unskip_tasks(struct cell *c, struct scheduler *s) { ...@@ -879,14 +879,8 @@ int cell_unskip_tasks(struct cell *c, struct scheduler *s) {
} }
/* Activate the drift on both sides */ /* Activate the drift on both sides */
if (t->type == task_type_pair || t->type == task_type_sub_pair) { if (ci == c && cj != NULL) scheduler_activate(s, cj->drift);
if (ci->drift != NULL) scheduler_activate(s, ci->drift); if (cj == c && ci != NULL) scheduler_activate(s, ci->drift);
if (cj->drift != NULL) scheduler_activate(s, cj->drift);
}
if (t->type == task_type_self || t->type == task_type_sub_self) {
if (ci->drift != NULL) scheduler_activate(s, ci->drift);
}
/* Check whether there was too much particle motion */ /* Check whether there was too much particle motion */
if (t->type == task_type_pair || t->type == task_type_sub_pair) { if (t->type == task_type_pair || t->type == task_type_sub_pair) {
......
...@@ -139,9 +139,6 @@ void engine_make_hierarchical_tasks(struct engine *e, struct cell *c) { ...@@ -139,9 +139,6 @@ void engine_make_hierarchical_tasks(struct engine *e, struct cell *c) {
c->init = scheduler_addtask(s, task_type_init, task_subtype_none, 0, 0, c, c->init = scheduler_addtask(s, task_type_init, task_subtype_none, 0, 0, c,
NULL, 0); NULL, 0);
/* c->drift = scheduler_addtask(s, task_type_drift, task_subtype_none, 0, 0, */
/* c, NULL, 0); */
c->kick = scheduler_addtask(s, task_type_kick, task_subtype_none, 0, 0, c, c->kick = scheduler_addtask(s, task_type_kick, task_subtype_none, 0, 0, c,
NULL, 0); NULL, 0);
...@@ -1993,7 +1990,7 @@ void engine_marktasks_mapper(void *map_data, int num_elements, ...@@ -1993,7 +1990,7 @@ void engine_marktasks_mapper(void *map_data, int num_elements,
const struct cell *ci = t->ci; const struct cell *ci = t->ci;
/* Activate the drift */ /* Activate the drift */
if(ci->drift) scheduler_activate(s, ci->drift); if (ci->drift) scheduler_activate(s, ci->drift);
} }
/* Pair? */ /* Pair? */
...@@ -2004,8 +2001,8 @@ void engine_marktasks_mapper(void *map_data, int num_elements, ...@@ -2004,8 +2001,8 @@ void engine_marktasks_mapper(void *map_data, int num_elements,
const struct cell *cj = t->cj; const struct cell *cj = t->cj;
/* Activate the drift on both sides */ /* Activate the drift on both sides */
if(ci->drift) scheduler_activate(s, ci->drift); if (ci->drift) scheduler_activate(s, ci->drift);
if(cj->drift) scheduler_activate(s, cj->drift); if (cj->drift) scheduler_activate(s, cj->drift);
/* Too much particle movement? */ /* Too much particle movement? */
if (t->tight && if (t->tight &&
......
...@@ -1127,7 +1127,8 @@ void *runner_main(void *data) { ...@@ -1127,7 +1127,8 @@ void *runner_main(void *data) {
/* Check that we haven't scheduled an inactive task */ /* Check that we haven't scheduled an inactive task */
#ifdef SWIFT_DEBUG_CHECKS #ifdef SWIFT_DEBUG_CHECKS
if (cj == NULL) { /* self */ if (cj == NULL) { /* self */
if (!cell_is_active(ci, e) && t->type != task_type_sort && t->type != task_type_drift) if (!cell_is_active(ci, e) && t->type != task_type_sort &&
t->type != task_type_drift)
error( error(
"Task (type='%s/%s') should have been skipped ti_current=%d " "Task (type='%s/%s') should have been skipped ti_current=%d "
"c->ti_end_min=%d", "c->ti_end_min=%d",
...@@ -1144,8 +1145,9 @@ void *runner_main(void *data) { ...@@ -1144,8 +1145,9 @@ void *runner_main(void *data) {
ci->ti_end_min, t->flags); ci->ti_end_min, t->flags);
/* Special treatement for drifts */ /* Special treatement for drifts */
if (!cell_is_active(ci, e) && t->type == task_type_drift) if (!cell_is_active(ci, e) && t->type == task_type_drift) {
{;} ;
}
} else { /* pair */ } else { /* pair */
if (!cell_is_active(ci, e) && !cell_is_active(cj, e)) if (!cell_is_active(ci, e) && !cell_is_active(cj, e))
...@@ -1237,7 +1239,7 @@ void *runner_main(void *data) { ...@@ -1237,7 +1239,7 @@ void *runner_main(void *data) {
break; break;
#endif #endif
case task_type_drift: case task_type_drift:
// runner_do_drift(r, ci, 1); runner_do_drift(r, ci, 1);
break; break;
case task_type_kick: case task_type_kick:
runner_do_kick(r, ci, 1); runner_do_kick(r, ci, 1);
......
...@@ -625,8 +625,6 @@ static void scheduler_splittask(struct task *t, struct scheduler *s) { ...@@ -625,8 +625,6 @@ static void scheduler_splittask(struct task *t, struct scheduler *s) {
} }
lock_unlock_blind(&ci->lock); lock_unlock_blind(&ci->lock);
/* Create the sort for cj. */ /* Create the sort for cj. */
lock_lock(&cj->lock); lock_lock(&cj->lock);
if (cj->sorts == NULL) if (cj->sorts == NULL)
...@@ -803,7 +801,8 @@ void scheduler_set_unlocks(struct scheduler *s) { ...@@ -803,7 +801,8 @@ void scheduler_set_unlocks(struct scheduler *s) {
if (t->unlock_tasks[i] == t->unlock_tasks[j]) if (t->unlock_tasks[i] == t->unlock_tasks[j])
error("duplicate unlock! t->type=%s/%s unlocking type=%s/%s", error("duplicate unlock! t->type=%s/%s unlocking type=%s/%s",
taskID_names[t->type], subtaskID_names[t->subtype], taskID_names[t->type], subtaskID_names[t->subtype],
taskID_names[t->unlock_tasks[i]->type], subtaskID_names[t->unlock_tasks[i]->subtype]); taskID_names[t->unlock_tasks[i]->type],
subtaskID_names[t->unlock_tasks[i]->subtype]);
} }
} }
} }
...@@ -1104,8 +1103,9 @@ void scheduler_start(struct scheduler *s) { ...@@ -1104,8 +1103,9 @@ void scheduler_start(struct scheduler *s) {
/* Special treatement for drifts */ /* Special treatement for drifts */
if (ci->ti_end_min == ti_current && t->skip && if (ci->ti_end_min == ti_current && t->skip &&
t->type == task_type_drift) t->type == task_type_drift) {
{;} ;
}
} else { /* pair */ } else { /* pair */
......
...@@ -409,6 +409,7 @@ void space_regrid(struct space *s, int verbose) { ...@@ -409,6 +409,7 @@ void space_regrid(struct space *s, int verbose) {
s->cells_top[k].extra_ghost = NULL; s->cells_top[k].extra_ghost = NULL;
s->cells_top[k].ghost = NULL; s->cells_top[k].ghost = NULL;
s->cells_top[k].kick = NULL; s->cells_top[k].kick = NULL;
s->cells_top[k].drift = NULL;
s->cells_top[k].cooling = NULL; s->cells_top[k].cooling = NULL;
s->cells_top[k].sourceterms = NULL; s->cells_top[k].sourceterms = NULL;
s->cells_top[k].super = &s->cells_top[k]; s->cells_top[k].super = &s->cells_top[k];
......
...@@ -49,9 +49,9 @@ ...@@ -49,9 +49,9 @@
/* Task type names. */ /* Task type names. */
const char *taskID_names[task_type_count] = { const char *taskID_names[task_type_count] = {
"none", "sort", "self", "pair", "sub_self", "none", "sort", "self", "pair", "sub_self",
"sub_pair", "init", "ghost", "extra_ghost", "drift", "kick", "sub_pair", "init", "ghost", "extra_ghost", "drift",
"send", "recv", "grav_gather_m", "grav_fft", "grav_mm", "kick", "send", "recv", "grav_gather_m", "grav_fft",
"grav_up", "cooling", "sourceterms"}; "grav_mm", "grav_up", "cooling", "sourceterms"};
const char *subtaskID_names[task_subtype_count] = { const char *subtaskID_names[task_subtype_count] = {
"none", "density", "gradient", "force", "grav", "external_grav", "tend"}; "none", "density", "gradient", "force", "grav", "external_grav", "tend"};
......
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