From 8b0365339ba2a6a1fc16e764abc95f07e59d1d37 Mon Sep 17 00:00:00 2001 From: Matthieu Schaller <matthieu.schaller@durham.ac.uk> Date: Sun, 27 Mar 2016 15:08:37 +0100 Subject: [PATCH] Always initialise the gparts to a sensible state --- src/cell.c | 20 ++++++++++++++++++++ src/cell.h | 1 + src/engine.c | 10 +++++++++- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/cell.c b/src/cell.c index b0e299999e..8184f65560 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 05b870b144..f0e99e8b45 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 0b4a819e9d..a358165cbd 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); -- GitLab