diff --git a/src/engine.c b/src/engine.c index 2e70d45a1ae50252077fe4e411000bdebf89ba7a..bba101aea8b2202a2f32f4ee524a9e73e42a8c07 100644 --- a/src/engine.c +++ b/src/engine.c @@ -1331,121 +1331,123 @@ int engine_marktasks(struct engine *e) { struct scheduler *s = &e->sched; int k, nr_tasks = s->nr_tasks, *ind = s->tasks_ind; struct task *t, *tasks = s->tasks; - // float t_end = e->time; + float t_end = e->time; struct cell *ci, *cj; // ticks tic = getticks(); - /* /\* Much less to do here if we're on a fixed time-step. *\/ */ - /* if (!(e->policy & engine_policy_multistep)) { */ + /* Much less to do here if we're on a fixed time-step. */ + if (e->policy & engine_policy_fixdt) { - /* /\* Run through the tasks and mark as skip or not. *\/ */ - /* for (k = 0; k < nr_tasks; k++) { */ + /* Run through the tasks and mark as skip or not. */ + for (k = 0; k < nr_tasks; k++) { - /* /\* Get a handle on the kth task. *\/ */ - /* t = &tasks[ind[k]]; */ + /* Get a handle on the kth task. */ + t = &tasks[ind[k]]; - /* /\* Pair? *\/ */ - /* if (t->type == task_type_pair || */ - /* (t->type == task_type_sub && t->cj != NULL)) { */ + /* Pair? */ + if (t->type == task_type_pair || + (t->type == task_type_sub && t->cj != NULL)) { - /* /\* Local pointers. *\/ */ - /* ci = t->ci; */ - /* cj = t->cj; */ + /* Local pointers. */ + ci = t->ci; + cj = t->cj; - /* /\* Too much particle movement? *\/ */ - /* if (t->tight && */ - /* (fmaxf(ci->h_max, cj->h_max) + ci->dx_max + cj->dx_max > cj->dmin - * || */ - /* ci->dx_max > space_maxreldx * ci->h_max || */ - /* cj->dx_max > space_maxreldx * cj->h_max)) */ - /* return 1; */ + /* Too much particle movement? */ + if (t->tight && + (fmaxf(ci->h_max, cj->h_max) + ci->dx_max + cj->dx_max > cj->dmin || + ci->dx_max > space_maxreldx * ci->h_max || + cj->dx_max > space_maxreldx * cj->h_max)) + return 1; - /* } */ - - /* /\* Sort? *\/ */ - /* else if (t->type == task_type_sort) { */ + } - /* /\* If all the sorts have been done, make this task implicit. *\/ */ - /* if (!(t->flags & (t->flags ^ t->ci->sorted))) t->implicit = 1; */ - /* } */ - /* } */ + /* Sort? */ + else if (t->type == task_type_sort) { - /* } else { */ + /* If all the sorts have been done, make this task implicit. */ + if (!(t->flags & (t->flags ^ t->ci->sorted))) t->implicit = 1; + } + } - /* Run through the tasks and mark as skip or not. */ - for (k = 0; k < nr_tasks; k++) { + /* Multiple-timestep case */ + } else { - /* Get a handle on the kth task. */ - t = &tasks[ind[k]]; + /* Run through the tasks and mark as skip or not. */ + for (k = 0; k < nr_tasks; k++) { - /* Sort-task? Note that due to the task ranking, the sorts - will all come before the pairs. */ - if (t->type == task_type_sort) { + /* Get a handle on the kth task. */ + t = &tasks[ind[k]]; - /* Re-set the flags. */ - t->flags = 0; - t->skip = 1; + /* Sort-task? Note that due to the task ranking, the sorts + will all come before the pairs. */ + if (t->type == task_type_sort) { - } + /* Re-set the flags. */ + t->flags = 0; + t->skip = 1; - /* Single-cell task? */ - else if (t->type == task_type_self || t->type == task_type_ghost || - (t->type == task_type_sub && t->cj == NULL)) { + } - /* Set this task's skip. */ - // t->skip = (t->ci->t_end_min >= t_end); + /* Single-cell task? */ + else if (t->type == task_type_self || t->type == task_type_ghost || + (t->type == task_type_sub && t->cj == NULL)) { - } + /* Set this task's skip. */ + t->skip = (t->ci->t_end_min > t_end); + } - /* Pair? */ - else if (t->type == task_type_pair || - (t->type == task_type_sub && t->cj != NULL)) { - - /* Local pointers. */ - ci = t->ci; - cj = t->cj; - - /* Set this task's skip. */ - // t->skip = (ci->t_end_min >= t_end && cj->t_end_min >= t_end); - - /* Too much particle movement? */ - if (t->tight && - (fmaxf(ci->h_max, cj->h_max) + ci->dx_max + cj->dx_max > cj->dmin || - ci->dx_max > space_maxreldx * ci->h_max || - cj->dx_max > space_maxreldx * cj->h_max)) - return 1; - - /* Set the sort flags. */ - if (!t->skip && t->type == task_type_pair) { - if (!(ci->sorted & (1 << t->flags))) { - ci->sorts->flags |= (1 << t->flags); - ci->sorts->skip = 0; - } - if (!(cj->sorted & (1 << t->flags))) { - cj->sorts->flags |= (1 << t->flags); - cj->sorts->skip = 0; + /* Pair? */ + else if (t->type == task_type_pair || + (t->type == task_type_sub && t->cj != NULL)) { + + /* Local pointers. */ + ci = t->ci; + cj = t->cj; + + /* Set this task's skip. */ + t->skip = (ci->t_end_min > t_end && cj->t_end_min > t_end); + + /* Too much particle movement? */ + if (t->tight && + (fmaxf(ci->h_max, cj->h_max) + ci->dx_max + cj->dx_max > cj->dmin || + ci->dx_max > space_maxreldx * ci->h_max || + cj->dx_max > space_maxreldx * cj->h_max)) + return 1; + + /* Set the sort flags. */ + if (!t->skip && t->type == task_type_pair) { + if (!(ci->sorted & (1 << t->flags))) { + ci->sorts->flags |= (1 << t->flags); + ci->sorts->skip = 0; + } + if (!(cj->sorted & (1 << t->flags))) { + cj->sorts->flags |= (1 << t->flags); + cj->sorts->skip = 0; + } } - } - } + } - /* Kick? */ - else if (t->type == task_type_kick) - t->skip = 0; + /* Kick? */ + else if (t->type == task_type_kick) { + t->skip = (t->ci->t_end_min > t_end); + } - /* Drift? */ - else if (t->type == task_type_drift) - t->skip = 0; + /* Drift? */ + else if (t->type == task_type_drift) + t->skip = 0; - /* Init? */ - else if (t->type == task_type_init) - t->skip = 0; + /* Init? */ + else if (t->type == task_type_init) { + /* Set this task's skip. */ + t->skip = (t->ci->t_end_min > t_end); + } - /* None? */ - else if (t->type == task_type_none) - t->skip = 1; + /* None? */ + else if (t->type == task_type_none) + t->skip = 1; + } } - //} // message( "took %.3f ms." , (double)(getticks() - tic)/CPU_TPS*1000 ); @@ -1666,9 +1668,6 @@ void engine_collect_kick(struct cell *c) { c->ang[2] = ang[2]; } - - - /** * @brief Launch the runners. * @@ -2125,7 +2124,7 @@ void engine_init(struct engine *e, struct space *s, float dt, int nr_threads, } } #endif - + /* Store the values. */ e->s = s; e->nr_threads = nr_threads; @@ -2167,7 +2166,7 @@ void engine_init(struct engine *e, struct space *s, float dt, int nr_threads, /* Print policy */ engine_policy(e); - /* Construct types for MPI communications */ +/* Construct types for MPI communications */ #ifdef WITH_MPI part_create_mpi_type(&e->part_mpi_type); xpart_create_mpi_type(&e->xpart_mpi_type);