diff --git a/src/engine.c b/src/engine.c index 8e5c963e82d0d0aee3e1a6fc6f4de823de19465c..92123121ec86e12aa010d9f03843bcee630dabbe 100644 --- a/src/engine.c +++ b/src/engine.c @@ -2243,7 +2243,8 @@ void engine_rebuild(struct engine *e) { /* Re-build the space. */ space_rebuild(e->s, e->verbose); - if (e->ti_current == 0) space_sanitize(e->s); + /* Initial cleaning up session ? */ + if (e->s->sanitized == 0) space_sanitize(e->s); /* If in parallel, exchange the cell structure. */ #ifdef WITH_MPI diff --git a/src/space.c b/src/space.c index 3b6b6e3fea10018a90cd9980b4a681bf1906a68b..1a4a9bc3053ce796de81f491d393c62d9d060af3 100644 --- a/src/space.c +++ b/src/space.c @@ -731,6 +731,8 @@ void space_split(struct space *s, struct cell *cells, int nr_cells, */ void space_sanitize(struct space *s) { + s->sanitized = 1; + for (int k = 0; k < s->nr_cells; k++) { struct cell *c = &s->cells_top[k]; @@ -1738,7 +1740,7 @@ void space_init(struct space *s, const struct swift_params *params, s->dim[0] = dim[0]; s->dim[1] = dim[1]; s->dim[2] = dim[2]; - const double dmax = max(max(dim[0], dim[1]), dim[2]); + s->sanitized = 0; s->periodic = periodic; s->gravity = gravity; s->nr_parts = Npart; @@ -1747,11 +1749,14 @@ void space_init(struct space *s, const struct swift_params *params, s->nr_gparts = Ngpart; s->size_gparts = Ngpart; s->gparts = gparts; - s->cell_min = - dmax / parser_get_opt_param_int(params, "Scheduler:max_top_level_cells", - space_max_top_level_cells_default); s->nr_queues = 1; /* Temporary value until engine construction */ + /* Decide on the minimal top-level cell size */ + const double dmax = max(max(dim[0], dim[1]), dim[2]); + s->cell_min = 0.99 * dmax / parser_get_opt_param_int( + params, "Scheduler:max_top_level_cells", + space_max_top_level_cells_default); + /* Get the constants for the scheduler */ space_maxsize = parser_get_opt_param_int(params, "Scheduler:cell_max_size", space_maxsize_default); diff --git a/src/space.h b/src/space.h index 88f712fe84349971b576b0c8393e4afb0b658e81..975786c098dfa4d37f33e353d9678ee0cd6839e1 100644 --- a/src/space.h +++ b/src/space.h @@ -123,6 +123,9 @@ struct space { /*! Number of queues in the system. */ int nr_queues; + /*! Has this space already been sanitized ? */ + int sanitized; + /*! The associated engine. */ struct engine *e;