Commit c6af1fa8 authored by Matthieu Schaller's avatar Matthieu Schaller
Browse files

Check that all particles and cells have a time-step assigned at the end of the initialisation step.

parent 968e0a75
......@@ -1293,3 +1293,26 @@ void cell_drift(struct cell *c, const struct engine *e) {
/* Update the time of the last drift */
c->ti_old = ti_current;
}
/**
* @brief Recursively checks that all particles in a cell have a time-step
*/
void cell_check_timesteps(struct cell *c) {
#ifdef SWIFT_DEBUG_CHECKS
if(c->nodeID != engine_rank) return;
if(c->ti_end_min == 0) error("Cell without assigned time-step");
if(c->split) {
for(int k=0; k<8; ++k)
if(c->progeny[k] != NULL) cell_check_timesteps(c->progeny[k]);
} else {
for(int i=0; i<c->count; ++i)
if(c->parts[i].time_bin == 0)
error("Particle without assigned time-bin");
}
#endif
}
......@@ -330,5 +330,6 @@ int cell_is_drift_needed(struct cell *c, const struct engine *e);
int cell_unskip_tasks(struct cell *c, struct scheduler *s);
void cell_set_super(struct cell *c, struct cell *super);
void cell_drift(struct cell *c, const struct engine *e);
void cell_check_timesteps(struct cell *c);
#endif /* SWIFT_CELL_H */
......@@ -2648,6 +2648,10 @@ void engine_init_particles(struct engine *e, int flag_entropy_ICs) {
clocks_gettime(&time2);
#ifdef SWIFT_DEBUG_CHECKS
space_check_timesteps(e->s);
#endif
/* Ready to go */
e->step = -1;
e->forcerebuild = 1;
......
......@@ -2392,6 +2392,19 @@ void space_check_drift_point(struct space *s, integertime_t ti_current) {
space_map_cells_pre(s, 1, cell_check_drift_point, &ti_current);
}
/**
* @brief Checks that all particles and local cells have a non-zero time-step.
*/
void space_check_timesteps(struct space *s) {
#ifdef SWIFT_DEBUG_CHECKS
for (int i=0; i<s->nr_cells; ++i) {
cell_check_timesteps(&s->cells_top[i]);
}
#endif
}
/**
* @brief Frees up the memory allocated for this #space
*/
......
......@@ -201,6 +201,8 @@ void space_init_gparts(struct space *s);
void space_init_sparts(struct space *s);
void space_link_cleanup(struct space *s);
void space_check_drift_point(struct space *s, integertime_t ti_current);
void space_check_timesteps(struct space *s);
void space_clean(struct space *s);
#endif /* SWIFT_SPACE_H */
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