Commit 3742104d authored by Matthieu Schaller's avatar Matthieu Schaller

Make the time-step limiter tasks lock-free

parent 15106d9f
......@@ -468,7 +468,8 @@ void task_unlock(struct task *t) {
cell_unlocktree(ci);
} else if (subtype == task_subtype_do_bh_swallow) {
cell_bunlocktree(ci);
} else {
} else if (subtype == task_subtype_limiter) {
} else { /* hydro */
cell_unlocktree(ci);
}
break;
......@@ -493,7 +494,8 @@ void task_unlock(struct task *t) {
} else if (subtype == task_subtype_do_bh_swallow) {
cell_bunlocktree(ci);
cell_bunlocktree(cj);
} else {
} else if (subtype == task_subtype_limiter) {
} else { /* hydro */
cell_unlocktree(ci);
cell_unlocktree(cj);
}
......@@ -625,6 +627,8 @@ int task_lock(struct task *t) {
} else if (subtype == task_subtype_do_bh_swallow) {
if (ci->black_holes.hold) return 0;
if (cell_blocktree(ci) != 0) return 0;
} else if (subtype == task_subtype_limiter) {
return 1;
} else { /* subtype == hydro */
if (ci->hydro.hold) return 0;
if (cell_locktree(ci) != 0) return 0;
......@@ -686,6 +690,8 @@ int task_lock(struct task *t) {
cell_bunlocktree(ci);
return 0;
}
} else if (subtype == task_subtype_limiter) {
return 1;
} else { /* subtype == hydro */
/* Lock the parts in both cells */
if (ci->hydro.hold || cj->hydro.hold) return 0;
......
......@@ -88,7 +88,7 @@ __attribute__((always_inline)) INLINE static void runner_iact_nonsym_limiter(
if (pj->time_bin > pi->time_bin + time_bin_neighbour_max_delta_bin) {
/* Store the smallest time bin that woke up this particle */
pj->limiter_data.wakeup = max(pj->limiter_data.wakeup, -pi->time_bin);
atomic_max_c(&pj->limiter_data.wakeup, -pi->time_bin);
}
}
......
Markdown is supported
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