diff --git a/examples/SedovBlast/sedov.yml b/examples/SedovBlast/sedov.yml index b5ad8d855535e70133464fa6a117db37a2c9fb8b..330ea51f4b3d38fd2a3c427e8c4cd7f2781d0766 100644 --- a/examples/SedovBlast/sedov.yml +++ b/examples/SedovBlast/sedov.yml @@ -32,6 +32,9 @@ Snapshots: UnitCurrent_in_cgs: 1 # Amperes UnitTemp_in_cgs: 1 # Kelvin +Statistics: + delta_time: 1e-3 + # Parameters for the hydrodynamics scheme SPH: resolution_eta: 1.2348 # Target smoothing length in units of the mean inter-particle separation (1.2348 == 48Ngbs with the cubic spline kernel). diff --git a/examples/SodShock/sodShock.yml b/examples/SodShock/sodShock.yml index 7bb1895c15c80c6a4e54248d1d2bf85dea278ce1..8818d4b8265c371cf0b513ae906cecb0f9cad069 100644 --- a/examples/SodShock/sodShock.yml +++ b/examples/SodShock/sodShock.yml @@ -32,6 +32,9 @@ Snapshots: UnitCurrent_in_cgs: 1 # Amperes UnitTemp_in_cgs: 1 # Kelvin +Statistics: + delta_time: 1e-2 # Time between statistics output + # Parameters for the hydrodynamics scheme SPH: resolution_eta: 1.2348 # Target smoothing length in units of the mean inter-particle separation (1.2348 == 48Ngbs with the cubic spline kernel). diff --git a/src/engine.c b/src/engine.c index d8121f0a9373b9d7e55986f562f0221809051ba0..cd3ddf4b211eec992086dae04ef653c56504fb75 100644 --- a/src/engine.c +++ b/src/engine.c @@ -1919,7 +1919,7 @@ void engine_collect_drift(struct cell *c) { engine_collect_drift(cp); /* And update */ - mass += cp->mass; + mass += cp->mass; e_kin += cp->e_kin; e_int += cp->e_int; e_pot += cp->e_pot; @@ -2008,11 +2008,14 @@ void engine_print_stats(struct engine *e) { const double e_tot = e_kin + e_int + e_pot; /* Print info */ - fprintf(e->file_stats, - " %6d %14e %14e %14e %14e %14e %14e %14e %14e %14e %14e %14e %14e\n", - e->step, e->time, mass, e_tot, e_kin, e_int, e_pot, mom[0], mom[1], mom[2], - ang_mom[0], ang_mom[1], ang_mom[2]); - fflush(e->file_stats); + if (e->nodeID == 0) { + fprintf( + e->file_stats, + " %6d %14e %14e %14e %14e %14e %14e %14e %14e %14e %14e %14e %14e\n", + e->step, e->time, mass, e_tot, e_kin, e_int, e_pot, mom[0], mom[1], + mom[2], ang_mom[0], ang_mom[1], ang_mom[2]); + fflush(e->file_stats); + } } /** @@ -2193,7 +2196,10 @@ void engine_step(struct engine *e) { } /* Save some statistics */ - engine_print_stats(e); + if (e->time - e->timeLastStatistics >= e->deltaTimeStatistics) { + engine_print_stats(e); + e->timeLastStatistics += e->deltaTimeStatistics; + } /* Re-distribute the particles amongst the nodes? */ if (e->forcerepart != REPART_NONE) engine_repartition(e); @@ -2564,6 +2570,9 @@ void engine_init(struct engine *e, struct space *s, e->dt_min = parser_get_param_double(params, "TimeIntegration:dt_min"); e->dt_max = parser_get_param_double(params, "TimeIntegration:dt_max"); e->file_stats = NULL; + e->deltaTimeStatistics = + parser_get_param_double(params, "Statistics:delta_time"); + e->timeLastStatistics = e->timeBegin - e->deltaTimeStatistics; e->verbose = verbose; e->count_step = 0; e->wallclock_time = 0.f; @@ -2666,10 +2675,11 @@ void engine_init(struct engine *e, struct space *s, /* Open some files */ if (e->nodeID == 0) { e->file_stats = fopen("energy.txt", "w"); - fprintf(e->file_stats, - "# %6s %14s %14s %14s %14s %14s %14s %14s %14s %14s %14s %14s %14s\n", - "Step", "Time", "Mass", "E_tot", "E_kin", "E_int", "E_pot", "p_x", "p_y", "p_z", - "ang_x", "ang_y", "ang_z"); + fprintf( + e->file_stats, + "# %6s %14s %14s %14s %14s %14s %14s %14s %14s %14s %14s %14s %14s\n", + "Step", "Time", "Mass", "E_tot", "E_kin", "E_int", "E_pot", "p_x", + "p_y", "p_z", "ang_x", "ang_y", "ang_z"); fflush(e->file_stats); } diff --git a/src/engine.h b/src/engine.h index 92c7527e3c704f762e89bd65f59fe43286ba6239..8e8f120176a8254f194bf72ace00478dd24e7e86 100644 --- a/src/engine.h +++ b/src/engine.h @@ -147,8 +147,10 @@ struct engine { char snapshotBaseName[200]; struct UnitSystem *snapshotUnits; - /* File for statistics */ + /* Statistics information */ FILE *file_stats; + double timeLastStatistics; + double deltaTimeStatistics; /* The current step number. */ int step;