diff --git a/src/engine.c b/src/engine.c index 8ef958827f76ced9fc8b65e04e356b3b123be40e..d60367aa8f948646f9387373a1db337fc557a8d6 100644 --- a/src/engine.c +++ b/src/engine.c @@ -3962,6 +3962,7 @@ void engine_rebuild(struct engine *e, int clean_smoothing_length_values) { /* Clear the forcerebuild flag, whatever it was. */ e->forcerebuild = 0; + e->restarting = 0; /* Re-build the space. */ space_rebuild(e->s, e->verbose); @@ -4038,7 +4039,7 @@ void engine_prepare(struct engine *e) { const ticks tic = getticks(); /* Unskip active tasks and check for rebuild */ - if (!e->forcerepart) engine_unskip(e); + if (!e->forcerepart && !e->restarting) engine_unskip(e); #ifdef WITH_MPI MPI_Allreduce(MPI_IN_PLACE, &e->forcerebuild, 1, MPI_INT, MPI_MAX, @@ -4052,7 +4053,7 @@ void engine_prepare(struct engine *e) { if (e->forcerebuild) { /* Let's start by drifting everybody to the current time */ - engine_drift_all(e); + if (!e->restarting) engine_drift_all(e); /* And rebuild */ engine_rebuild(e, 0); @@ -5825,6 +5826,7 @@ void engine_config(int restart, struct engine *e, struct swift_params *params, e->nr_proxies = 0; e->forcerebuild = 1; e->forcerepart = 0; + e->restarting = restart; e->step_props = engine_step_prop_none; e->links = NULL; e->nr_links = 0; diff --git a/src/engine.h b/src/engine.h index d5de93c8c1950321581b0961db7039f158083859..ae430d9f796d6cf9bd4a1973f15b3a4e986b9997 100644 --- a/src/engine.h +++ b/src/engine.h @@ -264,6 +264,9 @@ struct engine { /* Wallclock time of the last time-step */ float wallclock_time; + /* Are we in the process of restaring a simulation? */ + int restarting; + /* Force the engine to rebuild? */ int forcerebuild;