diff --git a/examples/plot_tasks.py b/examples/plot_tasks.py index c96d063e0bf1adf614a447f0dd524302a070e9dd..dadc3b1977e755267bb98d51aace46841ed22c9a 100755 --- a/examples/plot_tasks.py +++ b/examples/plot_tasks.py @@ -59,8 +59,8 @@ pl.rcParams.update(PLOT_PARAMS) # Tasks and subtypes. Indexed as in tasks.h. TASKTYPES = ["none", "sort", "self", "pair", "sub", "init", "ghost", "drift", - "kick", "send", "recv", "grav_pp", "grav_mm", "grav_up", - "grav_down", "grav_external", "part_sort", "gpart_sort", + "kick", "kick_fixdt", "send", "recv", "grav_pp", "grav_mm", + "grav_up", "grav_down", "grav_external", "part_sort", "gpart_sort", "split_cell", "rewait", "count"] TASKCOLOURS = {"none": "black", @@ -72,6 +72,7 @@ TASKCOLOURS = {"none": "black", "ghost": "cyan", "drift": "maroon", "kick": "green", + "kick_fixdt": "green", "send": "yellow", "recv": "magenta", "grav_pp": "mediumorchid", diff --git a/examples/plot_tasks_MPI.py b/examples/plot_tasks_MPI.py index ae84b0177bfa01d4bb4c2c9c3e44c088b8ae7776..99b2f3db9a7564f082949f0ad102abcdb6df31f4 100755 --- a/examples/plot_tasks_MPI.py +++ b/examples/plot_tasks_MPI.py @@ -65,8 +65,8 @@ pl.rcParams.update(PLOT_PARAMS) # Tasks and subtypes. Indexed as in tasks.h. TASKTYPES = ["none", "sort", "self", "pair", "sub", "init", "ghost", "drift", - "kick", "send", "recv", "grav_pp", "grav_mm", "grav_up", - "grav_down", "grav_external", "part_sort", "gpart_sort", + "kick", "kick_fixdt", "send", "recv", "grav_pp", "grav_mm", + "grav_up", "grav_down", "grav_external", "part_sort", "gpart_sort", "split_cell", "rewait", "count"] TASKCOLOURS = {"none": "black", @@ -78,6 +78,7 @@ TASKCOLOURS = {"none": "black", "ghost": "cyan", "drift": "maroon", "kick": "green", + "kick_fixdt": "green", "send": "yellow", "recv": "magenta", "grav_pp": "mediumorchid", diff --git a/src/engine.c b/src/engine.c index 76243b1e481191c095d223a6db973aaa82c227a0..799b5d40247b6f38482aa72bebe0f11f120a4469 100644 --- a/src/engine.c +++ b/src/engine.c @@ -112,6 +112,7 @@ void engine_make_hierarchical_tasks(struct engine *e, struct cell *c, const int is_with_external_gravity = (e->policy & engine_policy_external_gravity) == engine_policy_external_gravity; + const int is_fixdt = (e->policy & engine_policy_fixdt) == engine_policy_fixdt; /* Am I the super-cell? */ if (super == NULL && (c->count > 0 || c->gcount > 0)) { @@ -130,9 +131,14 @@ void engine_make_hierarchical_tasks(struct engine *e, struct cell *c, c->drift = scheduler_addtask(s, task_type_drift, task_subtype_none, 0, 0, c, NULL, 0); - /* Add the kick task. */ - c->kick = scheduler_addtask(s, task_type_kick, task_subtype_none, 0, 0, c, - NULL, 0); + /* Add the kick task that matches the policy. */ + if (is_fixdt) { + c->kick = scheduler_addtask(s, task_type_kick_fixdt, task_subtype_none, + 0, 0, c, NULL, 0); + } else { + c->kick = scheduler_addtask(s, task_type_kick, task_subtype_none, 0, 0, + c, NULL, 0); + } if (c->count > 0) { @@ -2102,11 +2108,17 @@ void engine_step(struct engine *e) { /* Build the masks corresponding to the policy */ unsigned int mask = 0, submask = 0; - /* We always have sort tasks and kick tasks */ + /* We always have sort tasks and init tasks */ mask |= 1 << task_type_sort; - mask |= 1 << task_type_kick; mask |= 1 << task_type_init; + /* Add the correct kick task */ + if (e->policy & engine_policy_fixdt) { + mask |= 1 << task_type_kick_fixdt; + } else { + mask |= 1 << task_type_kick; + } + /* Add the tasks corresponding to hydro operations to the masks */ if (e->policy & engine_policy_hydro) { diff --git a/src/runner.c b/src/runner.c index 3349fa35138c717d0994d6cbcce16657641a5a27..7b9872bad3e4fcb9df67983164edb95e808523aa 100644 --- a/src/runner.c +++ b/src/runner.c @@ -1371,6 +1371,9 @@ void *runner_main(void *data) { case task_type_kick: runner_do_kick(r, ci, 1); break; + case task_type_kick_fixdt: + runner_do_kick(r, ci, 1); + break; case task_type_send: break; case task_type_recv: diff --git a/src/task.c b/src/task.c index 31c2bfcb3462b9f91547ebd631f645e190c07143..31e33ebcaccb0f1420033c416c4b7d3d43094403 100644 --- a/src/task.c +++ b/src/task.c @@ -47,10 +47,11 @@ /* Task type names. */ const char *taskID_names[task_type_count] = { - "none", "sort", "self", "pair", "sub", - "init", "ghost", "drift", "kick", "send", - "recv", "grav_pp", "grav_mm", "grav_up", "grav_down", - "grav_external", "part_sort", "gpart_sort", "split_cell", "rewait"}; + "none", "sort", "self", "pair", "sub", + "init", "ghost", "drift", "kick", "kick_fixdt", + "send", "recv", "grav_pp", "grav_mm", "grav_up", + "grav_down", "grav_external", "part_sort", "gpart_sort", "split_cell", + "rewait"}; const char *subtaskID_names[task_type_count] = {"none", "density", "force", "grav"}; diff --git a/src/task.h b/src/task.h index 25cc886f4b38456a0431fb6c7d0b7b1864053dd9..c4632b48087c99bf6958960ed11d36718ac744d1 100644 --- a/src/task.h +++ b/src/task.h @@ -42,6 +42,7 @@ enum task_types { task_type_ghost, task_type_drift, task_type_kick, + task_type_kick_fixdt, task_type_send, task_type_recv, task_type_grav_pp,