/*******************************************************************************
* This file is part of SWIFT.
* Copyright (c) 2012 Pedro Gonnet (pedro.gonnet@durham.ac.uk),
* Matthieu Schaller (schaller@strw.leidenuniv.nl).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*
******************************************************************************/
/* Config parameters. */
#include
#if defined(WITH_CSDS)
/* Some standard headers. */
#include "common_io.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
/* This object's header. */
#include "csds_io.h"
/* Local includes. */
#include "version.h"
/**
* @brief Write the parameters into a yaml file.
*
* @params log The #csds.
* @params e The #engine.
*/
void csds_write_description(struct csds_writer* log, struct engine* e) {
/* Only the master writes the description */
if (e->nodeID != 0) {
return;
}
/* File name */
char fileName[FILENAME_BUFFER_SIZE];
snprintf(fileName, FILENAME_BUFFER_SIZE, "%.100s.yml", e->csds->base_name);
/* Open file */
FILE* f = NULL;
f = fopen(fileName, "w");
if (f == NULL) {
error("Failed to open file %s", fileName);
}
/* Write the header section */
fprintf(f, "Header:\n");
fprintf(f, " BoxSize: [%g, %g, %g]\n", e->s->dim[0], e->s->dim[1],
e->s->dim[2]);
fprintf(f, " Dimension: %i\n", (int)hydro_dimension);
fprintf(f, " RunName: %s\n", e->run_name);
fprintf(f, " Periodic: %i\n", e->s->periodic);
/* Here I am using the local number of particles as
* it is used to estimate the number of particles per logfile. */
fprintf(f, " NumberParts: %li\n", e->s->nr_parts);
fprintf(f, " NumberSParts: %li\n", e->s->nr_sparts);
fprintf(f, " NumberGParts: %li\n", e->s->nr_gparts);
fprintf(f, "\n");
/* Write the cosmology */
fprintf(f, "Cosmology:\n");
fprintf(f, " Omega_cdm: %g\n", e->cosmology->Omega_cdm);
fprintf(f, " Omega_lambda: %g\n", e->cosmology->Omega_lambda);
fprintf(f, " Omega_b: %g\n", e->cosmology->Omega_b);
fprintf(f, " Omega_r: %g\n", e->cosmology->Omega_r);
fprintf(f, " Omega_k: %g\n", e->cosmology->Omega_k);
fprintf(f, " Omega_nu_0: %g\n", e->cosmology->Omega_nu_0);
fprintf(f, " w_0: %g\n", e->cosmology->w_0);
fprintf(f, " w_a: %g\n", e->cosmology->w_a);
fprintf(f, " Hubble0: %g\n", e->cosmology->H0);
fprintf(f, "\n");
/* Write unit system */
const struct unit_system* us = e->internal_units;
fprintf(f, "InternalUnitSystem:\n");
fprintf(f, " UnitMass_in_cgs: %g\n", units_get_base_unit(us, UNIT_MASS));
fprintf(f, " UnitLength_in_cgs: %g\n", units_get_base_unit(us, UNIT_LENGTH));
fprintf(f, " UnitTime_in_cgs: %g\n", units_get_base_unit(us, UNIT_TIME));
fprintf(f, " UnitCurrent_in_cgs: %g\n",
units_get_base_unit(us, UNIT_CURRENT));
fprintf(f, " UnitTemp_in_cgs: %g\n",
units_get_base_unit(us, UNIT_TEMPERATURE));
fprintf(f, "\n");
/* Write the code section */
fprintf(f, "Code:\n");
fprintf(f, " Code: SWIFT\n");
fprintf(f, " CodeVersion: %s\n", package_version());
fprintf(f, " CompilerName: %s\n", compiler_name());
fprintf(f, " CompilerVersion: %s\n", compiler_version());
fprintf(f, " GitBranch: %s\n", git_branch());
fprintf(f, " GitRevision: %s\n", git_revision());
fprintf(f, " GitDate: %s\n", git_date());
fprintf(f, " ConfigurationOptions: %s\n", configuration_options());
fprintf(f, " RandomSeed: %i\n", SWIFT_RANDOM_SEED_XOR);
fprintf(f, "\n");
/* Write the policy section */
fprintf(f, "Policy:\n");
for (int i = 1; i < engine_maxpolicy; i++) {
const int value = e->policy & (1 << i) ? 1 : 0;
fprintf(f, " %s: %i\n", engine_policy_names[i + 1], value);
}
fprintf(f, "\n");
/* Close file */
fclose(f);
}
#endif /* WITH_CSDS */