diff --git a/src/engine.c b/src/engine.c index 7ceef849e3154a7257b22fb87ae04eb38bc0ee10..8b23eebc376397b6bc7ba943da6912c78477d9b6 100644 --- a/src/engine.c +++ b/src/engine.c @@ -5353,12 +5353,10 @@ void engine_check_for_dumps(struct engine *e) { /* Do we want to perform structure finding? */ int run_stf = 0; if (with_stf && stf_time_output) { - if (e->ti_end_min > e->ti_next_stf && e->ti_next_stf > 0) - run_stf = 1; + if (e->ti_end_min > e->ti_next_stf && e->ti_next_stf > 0) run_stf = 1; } if (with_stf && !stf_time_output) { - if(e->step % e->delta_step_stf == 0) - run_stf = 1; + if (e->step % e->delta_step_stf == 0) run_stf = 1; } /* Store information before attempting extra dump-related drifts */ @@ -5377,8 +5375,12 @@ void engine_check_for_dumps(struct engine *e) { /* Let's fake that we are at the common dump time */ e->ti_current = e->ti_next_snapshot; e->max_active_bin = 0; - if (!(e->policy & engine_policy_cosmology)) - e->time = e->ti_next_snapshot * e->time_base + e->time_begin; + if ((e->policy & engine_policy_cosmology)) { + cosmology_update(e->cosmology, e->physical_constants, e->ti_current); + e->time = e->cosmology->time; + } else { + e->time = e->ti_next_stats * e->time_base + e->time_begin; + } /* Drift everyone */ engine_drift_all(e); @@ -5392,8 +5394,12 @@ void engine_check_for_dumps(struct engine *e) { /* Let's fake that we are at the stats dump time */ e->ti_current = e->ti_next_stats; e->max_active_bin = 0; - if (!(e->policy & engine_policy_cosmology)) + if ((e->policy & engine_policy_cosmology)) { + cosmology_update(e->cosmology, e->physical_constants, e->ti_current); + e->time = e->cosmology->time; + } else { e->time = e->ti_next_stats * e->time_base + e->time_begin; + } /* Drift everyone */ engine_drift_all(e); @@ -5418,8 +5424,12 @@ void engine_check_for_dumps(struct engine *e) { /* Let's fake that we are at the snapshot dump time */ e->ti_current = e->ti_next_snapshot; e->max_active_bin = 0; - if (!(e->policy & engine_policy_cosmology)) - e->time = e->ti_next_snapshot * e->time_base + e->time_begin; + if ((e->policy & engine_policy_cosmology)) { + cosmology_update(e->cosmology, e->physical_constants, e->ti_current); + e->time = e->cosmology->time; + } else { + e->time = e->ti_next_stats * e->time_base + e->time_begin; + } /* Drift everyone */ engine_drift_all(e); @@ -5449,8 +5459,12 @@ void engine_check_for_dumps(struct engine *e) { /* Let's fake that we are at the snapshot dump time */ e->ti_current = e->ti_next_snapshot; e->max_active_bin = 0; - if (!(e->policy & engine_policy_cosmology)) - e->time = e->ti_next_snapshot * e->time_base + e->time_begin; + if ((e->policy & engine_policy_cosmology)) { + cosmology_update(e->cosmology, e->physical_constants, e->ti_current); + e->time = e->cosmology->time; + } else { + e->time = e->ti_next_stats * e->time_base + e->time_begin; + } /* Drift everyone */ engine_drift_all(e); @@ -5466,8 +5480,12 @@ void engine_check_for_dumps(struct engine *e) { /* Let's fake that we are at the stats dump time */ e->ti_current = e->ti_next_stats; e->max_active_bin = 0; - if (!(e->policy & engine_policy_cosmology)) + if ((e->policy & engine_policy_cosmology)) { + cosmology_update(e->cosmology, e->physical_constants, e->ti_current); + e->time = e->cosmology->time; + } else { e->time = e->ti_next_stats * e->time_base + e->time_begin; + } /* Drift everyone */ engine_drift_all(e); @@ -5482,10 +5500,25 @@ void engine_check_for_dumps(struct engine *e) { /* Perform structure finding? */ if (run_stf) { - // MATTHIEU: Add a drift_all here. And check the order with the other i/o - // options. - #ifdef HAVE_VELOCIRAPTOR + + // MATTHIEU: Check the order with the other i/o options. + if (!dump_snapshot && !save_stats) { + + /* Let's fake that we are at the stats dump time */ + e->ti_current = e->ti_next_stf; + e->max_active_bin = 0; + if ((e->policy & engine_policy_cosmology)) { + cosmology_update(e->cosmology, e->physical_constants, e->ti_current); + e->time = e->cosmology->time; + } else { + e->time = e->ti_next_stats * e->time_base + e->time_begin; + } + + /* Drift everyone */ + engine_drift_all(e); + } + velociraptor_init(e); velociraptor_invoke(e); @@ -5517,6 +5550,8 @@ void engine_check_for_dumps(struct engine *e) { /* Restore the information we stored */ e->ti_current = ti_current; + if (e->policy & engine_policy_cosmology) + cosmology_update(e->cosmology, e->physical_constants, e->ti_current); e->max_active_bin = max_active_bin; e->time = time; }