Skip to content
Snippets Groups Projects
Commit 13444dab 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 66da9d09
Branches
Tags
2 merge requests!304Star particle infrastructure,!303MPI send/recv fixes for inactive cells
...@@ -1091,3 +1091,26 @@ void cell_drift(struct cell *c, const struct engine *e) { ...@@ -1091,3 +1091,26 @@ void cell_drift(struct cell *c, const struct engine *e) {
/* Update the time of the last drift */ /* Update the time of the last drift */
c->ti_old = ti_current; 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
}
...@@ -306,5 +306,6 @@ int cell_is_drift_needed(struct cell *c, const struct engine *e); ...@@ -306,5 +306,6 @@ int cell_is_drift_needed(struct cell *c, const struct engine *e);
int cell_unskip_tasks(struct cell *c, struct scheduler *s); int cell_unskip_tasks(struct cell *c, struct scheduler *s);
void cell_set_super(struct cell *c, struct cell *super); void cell_set_super(struct cell *c, struct cell *super);
void cell_drift(struct cell *c, const struct engine *e); void cell_drift(struct cell *c, const struct engine *e);
void cell_check_timesteps(struct cell *c);
#endif /* SWIFT_CELL_H */ #endif /* SWIFT_CELL_H */
...@@ -2665,6 +2665,10 @@ void engine_init_particles(struct engine *e, int flag_entropy_ICs) { ...@@ -2665,6 +2665,10 @@ void engine_init_particles(struct engine *e, int flag_entropy_ICs) {
clocks_gettime(&time2); clocks_gettime(&time2);
#ifdef SWIFT_DEBUG_CHECKS
space_check_timesteps(e->s);
#endif
/* Ready to go */ /* Ready to go */
e->step = 0; e->step = 0;
e->forcerebuild = 1; e->forcerebuild = 1;
... ...
......
...@@ -2007,6 +2007,19 @@ void space_check_drift_point(struct space *s, integertime_t ti_current) { ...@@ -2007,6 +2007,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); 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 * @brief Frees up the memory allocated for this #space
*/ */
... ...
......
...@@ -186,6 +186,8 @@ void space_init_parts(struct space *s); ...@@ -186,6 +186,8 @@ void space_init_parts(struct space *s);
void space_init_gparts(struct space *s); void space_init_gparts(struct space *s);
void space_link_cleanup(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_drift_point(struct space *s, integertime_t ti_current);
void space_check_timesteps(struct space *s);
void space_clean(struct space *s); void space_clean(struct space *s);
#endif /* SWIFT_SPACE_H */ #endif /* SWIFT_SPACE_H */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment