diff --git a/src/cell.c b/src/cell.c index b0e299999e9073cc14d92b769b3e157f50d64c8f..8184f6556061a9febd372a7a8cd5150bb2f0685d 100644 --- a/src/cell.c +++ b/src/cell.c @@ -605,6 +605,26 @@ void cell_init_parts(struct cell *c, void *data) { c->ti_end_max = 0; } +/** + * @brief Initialises all g-particles to a valid state even if the ICs were + *stupid + * + * @param c Cell to act upon + * @param data Unused parameter + */ +void cell_init_gparts(struct cell *c, void *data) { + + struct gpart *gp = c->gparts; + const int gcount = c->gcount; + + for (int i = 0; i < gcount; ++i) { + gp[i].ti_begin = 0; + gp[i].ti_end = 0; + } + c->ti_end_min = 0; + c->ti_end_max = 0; +} + /** * @brief Converts hydro quantities to a valid state after the initial density *calculation diff --git a/src/cell.h b/src/cell.h index 05b870b144dd425ee9e72ee3b529122b6e721523..f0e99e8b45b0225764267f9cde5eb2d3a244136f 100644 --- a/src/cell.h +++ b/src/cell.h @@ -178,6 +178,7 @@ int cell_getsize(struct cell *c); int cell_link_parts(struct cell *c, struct part *parts); int cell_link_gparts(struct cell *c, struct gpart *gparts); void cell_init_parts(struct cell *c, void *data); +void cell_init_gparts(struct cell *c, void *data); void cell_convert_hydro(struct cell *c, void *data); void cell_clean_links(struct cell *c, void *data); diff --git a/src/engine.c b/src/engine.c index 0b4a819e9d68ba62a6ed95a6d839c188f861e804..a358165cbd486b8e500bc327df1a62e9d1581ed3 100644 --- a/src/engine.c +++ b/src/engine.c @@ -1846,7 +1846,15 @@ void engine_init_particles(struct engine *e) { /* Make sure all particles are ready to go */ /* i.e. clean-up any stupid state in the ICs */ - space_map_cells_pre(s, 1, cell_init_parts, NULL); + if ((e->policy & engine_policy_hydro) == engine_policy_hydro) { + space_map_cells_pre(s, 1, cell_init_parts, NULL); + } + if (((e->policy & engine_policy_self_gravity) == + engine_policy_self_gravity) || + ((e->policy & engine_policy_external_gravity) == + engine_policy_external_gravity)) { + space_map_cells_pre(s, 1, cell_init_gparts, NULL); + } engine_prepare(e);