1
0
Fork 0
mirror of https://github.com/cosmo-sims/monofonIC.git synced 2024-09-19 17:03:45 +02:00

output plugins use cosmology::parameters instead of config file to set dependent quantities

This commit is contained in:
Oliver Hahn 2020-09-10 04:12:32 +02:00
parent 25ddeffc76
commit f7a59c6634
10 changed files with 57 additions and 50 deletions

View file

@ -25,6 +25,7 @@
#include <general.hh>
#include <grid_fft.hh>
#include <config_file.hh>
#include <cosmology_calculator.hh>
enum class output_type {particles,field_lagrangian,field_eulerian};
@ -35,6 +36,9 @@ protected:
//! reference to the config_file object that holds all configuration options
config_file &cf_;
//! reference to the cosmology calculator object that does all things cosmological
std::unique_ptr<cosmology::calculator> &pcc_;
//! output file or directory name
std::string fname_;
@ -42,8 +46,8 @@ protected:
std::string interface_name_;
public:
//! constructor
output_plugin(config_file &cf, std::string interface_name )
: cf_(cf), interface_name_(interface_name)
output_plugin(config_file &cf, std::unique_ptr<cosmology::calculator>& pcc, std::string interface_name )
: cf_(cf), pcc_(pcc), interface_name_(interface_name)
{
fname_ = cf_.get_value<std::string>("output", "filename");
}
@ -88,7 +92,7 @@ public:
struct output_plugin_creator
{
//! create an instance of a plug-in
virtual std::unique_ptr<output_plugin> create(config_file &cf) const = 0;
virtual std::unique_ptr<output_plugin> create(config_file &cf, std::unique_ptr<cosmology::calculator>& pcc) const = 0;
//! destroy an instance of a plug-in
virtual ~output_plugin_creator() {}
@ -113,12 +117,12 @@ struct output_plugin_creator_concrete : public output_plugin_creator
}
//! create an instance of the plug-in
std::unique_ptr<output_plugin> create(config_file &cf) const
std::unique_ptr<output_plugin> create(config_file &cf, std::unique_ptr<cosmology::calculator>& pcc) const
{
return std::make_unique<Derived>(cf); // Derived( cf );
return std::make_unique<Derived>(cf,pcc); // Derived( cf );
}
};
//! failsafe version to select the output plug-in
std::unique_ptr<output_plugin> select_output_plugin(config_file &cf);
std::unique_ptr<output_plugin> select_output_plugin(config_file &cf, std::unique_ptr<cosmology::calculator>& pcc);

View file

@ -43,8 +43,8 @@ std::unique_ptr<cosmology::calculator> the_cosmo_calc;
int initialise( config_file& the_config )
{
the_random_number_generator = std::move(select_RNG_plugin(the_config));
the_output_plugin = std::move(select_output_plugin(the_config));
the_cosmo_calc = std::make_unique<cosmology::calculator>(the_config);
the_output_plugin = std::move(select_output_plugin(the_config, the_cosmo_calc));
return 0;
}

View file

@ -40,12 +40,11 @@ void print_output_plugins()
music::ilog << std::endl;
}
std::unique_ptr<output_plugin> select_output_plugin( config_file& cf )
std::unique_ptr<output_plugin> select_output_plugin( config_file& cf, std::unique_ptr<cosmology::calculator>& pcc )
{
std::string formatname = cf.get_value<std::string>( "output", "format" );
output_plugin_creator *the_output_plugin_creator
= get_output_plugin_map()[ formatname ];
output_plugin_creator *the_output_plugin_creator = get_output_plugin_map()[ formatname ];
if( !the_output_plugin_creator )
{
@ -58,7 +57,7 @@ std::unique_ptr<output_plugin> select_output_plugin( config_file& cf )
music::ilog << std::setw(32) << std::left << "Output plugin" << " : " << formatname << std::endl;
}
return std::move(the_output_plugin_creator->create( cf ));
return std::move(the_output_plugin_creator->create( cf, pcc ));
}

View file

@ -73,8 +73,8 @@ protected:
public:
//! constructor
explicit gadget_hdf5_output_plugin(config_file &cf)
: output_plugin(cf, "GADGET-HDF5")
explicit gadget_hdf5_output_plugin(config_file &cf, std::unique_ptr<cosmology::calculator>& pcc)
: output_plugin(cf, pcc, "AREPO-HDF5")
{
num_files_ = 1;
#ifdef USE_MPI
@ -106,18 +106,18 @@ public:
header_.flag_cooling = 0;
header_.num_files = num_files_;
header_.BoxSize = lunit_;
header_.Omega0 = cf_.get_value<double>("cosmology", "Omega_m");
header_.OmegaLambda = cf_.get_value<double>("cosmology", "Omega_L");
header_.OmegaBaryon = cf_.get_value<double>("cosmology", "Omega_b");
header_.HubbleParam = cf_.get_value<double>("cosmology", "H0") / 100.0;
header_.Omega0 = pcc->cosmo_param_["Omega_m"];
header_.OmegaLambda = pcc->cosmo_param_["Omega_DE"];
header_.OmegaBaryon = pcc->cosmo_param_["Omega_b"];
header_.HubbleParam = pcc->cosmo_param_["h"];
header_.flag_stellarage = 0;
header_.flag_metals = 0;
header_.flag_entropy_instead_u = 0;
header_.flag_doubleprecision = (typeid(write_real_t) == typeid(double)) ? true : false;
// initial gas temperature
double Tcmb0 = 2.726;
double Omegab = cf_.get_value<double>("cosmology", "Omega_b");
double Tcmb0 = pcc->cosmo_param_["Tcmb"];
double Omegab = pcc->cosmo_param_["Omega_b"];
double h = cf_.get_value<double>("cosmology", "H0") / 100.0, h2 = h*h;
double adec = 1.0 / (160.0 * pow(Omegab * h2 / 0.022, 2.0 / 5.0));
Tini_ = astart < adec ? Tcmb0 / astart : Tcmb0 / astart / astart * adec;
@ -179,7 +179,7 @@ public:
HDFWriteGroupAttribute(this_fname_, "Header", "suggested_highressoft", from_value<double>(softening_));
HDFWriteGroupAttribute(this_fname_, "Header", "suggested_gas_Tinit", from_value<double>(Tini_));
music::ilog << "Wrote" << std::endl;
music::ilog << this->interface_name_ << " output plugin wrote to \'" << this_fname_ << "\'" << std::endl;
}
output_type write_species_as(const cosmo_species &) const { return output_type::particles; }

View file

@ -54,8 +54,8 @@ protected:
public:
//! constructor
explicit gadget2_output_plugin(config_file &cf)
: output_plugin(cf, "GADGET-2")
explicit gadget2_output_plugin(config_file &cf, std::unique_ptr<cosmology::calculator> &pcc)
: output_plugin(cf, pcc, "GADGET-2")
{
num_files_ = 1;
#ifdef USE_MPI
@ -121,9 +121,9 @@ public:
//...
this_header_.num_files = num_files_; //1;
this_header_.BoxSize = cf_.get_value<double>("setup", "BoxLength");
this_header_.Omega0 = cf_.get_value<double>("cosmology", "Omega_m");
this_header_.OmegaLambda = cf_.get_value<double>("cosmology", "Omega_L");
this_header_.HubbleParam = cf_.get_value<double>("cosmology", "H0") / 100.0;
this_header_.Omega0 = pcc_->cosmo_param_["Omega_m"];
this_header_.OmegaLambda = pcc_->cosmo_param_["Omega_DE"];
this_header_.HubbleParam = pcc_->cosmo_param_["h"];
this_header_.flag_stellarage = 0;
this_header_.flag_metals = 0;

View file

@ -66,8 +66,8 @@ protected:
public:
//! constructor
explicit gadget_hdf5_output_plugin(config_file &cf)
: output_plugin(cf, "GADGET-HDF5")
explicit gadget_hdf5_output_plugin(config_file &cf, std::unique_ptr<cosmology::calculator> &pcc)
: output_plugin(cf, pcc, "GADGET-HDF5")
{
num_files_ = 1;
#ifdef USE_MPI
@ -99,9 +99,9 @@ public:
header_.flag_cooling = 0;
header_.num_files = num_files_;
header_.BoxSize = lunit_;
header_.Omega0 = cf_.get_value<double>("cosmology", "Omega_m");
header_.OmegaLambda = cf_.get_value<double>("cosmology", "Omega_L");
header_.HubbleParam = cf_.get_value<double>("cosmology", "H0") / 100.0;
header_.Omega0 = pcc->cosmo_param_["Omega_m"];
header_.OmegaLambda = pcc->cosmo_param_["Omega_DE"];
header_.HubbleParam = pcc->cosmo_param_["h"];
header_.flag_stellarage = 0;
header_.flag_metals = 0;
header_.flag_entropy_instead_u = 0;

View file

@ -30,14 +30,14 @@ protected:
bool out_eulerian_;
public:
//! constructor
explicit generic_output_plugin(config_file &cf )
: output_plugin(cf, "Generic HDF5")
explicit generic_output_plugin(config_file &cf, std::unique_ptr<cosmology::calculator> &pcc )
: output_plugin(cf, pcc, "Generic HDF5")
{
real_t astart = 1.0/(1.0+cf_.get_value<double>("setup", "zstart"));
real_t boxsize = cf_.get_value<double>("setup", "BoxLength");
real_t omegab = cf_.get_value<double>("cosmology", "Omega_b");
real_t omegam = cf_.get_value<double>("cosmology", "Omega_m");
real_t omegal = cf_.get_value<double>("cosmology", "Omega_L");
real_t omegab = pcc->cosmo_param_["Omega_b"];
real_t omegam = pcc->cosmo_param_["Omega_m"];
real_t omegal = pcc->cosmo_param_["Omega_L"];
out_eulerian_ = cf_.get_value_safe<bool>("output", "generic_out_eulerian",false);

View file

@ -20,8 +20,8 @@ protected:
public:
//! constructor
explicit genericio_output_plugin(config_file &cf)
: output_plugin(cf, "GenericIO")
explicit genericio_output_plugin(config_file &cf, cosmology::calculator &cc)
: output_plugin(cf, cc, "GenericIO")
{
real_t astart = 1.0 / (1.0 + cf_.get_value<double>("setup", "zstart"));
lunit_ = cf_.get_value<double>("setup", "BoxLength");
@ -34,7 +34,7 @@ public:
mu_value_ = 4.0 / (1.0 + 3.0*primordial_x);
double rhoc = 27.7519737 * 1e10; // in h^2 M_sol / Mpc^3
rho_value_ = cf_.get_value<double>("cosmology", "Omega_b") * rhoc;
rho_value_ = cc_.cosmo_param_["Omega_b"] * rhoc;
munit_ = rhoc * std::pow(cf_.get_value<double>("setup", "BoxLength"), 3);
}

View file

@ -48,7 +48,7 @@ private:
protected:
header header_;
real_t lunit_, vunit_, munit_;
real_t lunit_, vunit_, munit_, omegab_;
uint32_t levelmin_;
bool bhavebaryons_;
std::vector<float> data_buf_;
@ -57,19 +57,22 @@ protected:
public:
//! constructor
explicit grafic2_output_plugin(config_file &cf)
: output_plugin(cf, "GRAFIC2/RAMSES")
explicit grafic2_output_plugin(config_file &cf, std::unique_ptr<cosmology::calculator> &pcc)
: output_plugin(cf, pcc, "GRAFIC2/RAMSES")
{
lunit_ = 1.0;
vunit_ = 1.0;
double
boxlength = cf_.get_value<double>("setup", "BoxLength"),
H0 = cf_.get_value<double>("cosmology", "H0"),
zstart = cf_.get_value<double>("setup", "zstart"),
astart = 1.0 / (1.0 + zstart),
omegam = cf_.get_value<double>("cosmology", "Omega_m"),
omegaL = cf_.get_value<double>("cosmology", "Omega_L");
H0 = pcc->cosmo_param_["H0"],
omegam = pcc->cosmo_param_["Omega_m"],
omegaL = pcc->cosmo_param_["Omega_DE"];
omegab_ = pcc->cosmo_param_["Omega_b"];
uint32_t ngrid = cf_.get_value<int>("setup", "GridRes");
bUseSPT_ = cf_.get_value_safe<bool>("output", "grafic_use_SPT", false);
@ -286,6 +289,7 @@ void grafic2_output_plugin::write_ramses_namelist(void) const
ofst
<< "&INIT_PARAMS\n"
<< "filetype=\'grafic\'\n"
<< "omega_b=" << omegab_ << "\n"
<< "initfile(1)=\'" << dirname_ << "\'\n"
<< "/\n\n";

View file

@ -51,8 +51,8 @@ protected:
public:
//! constructor
explicit swift_output_plugin(config_file &cf)
: output_plugin(cf, "SWIFT")
explicit swift_output_plugin(config_file &cf, std::unique_ptr<cosmology::calculator> &pcc)
: output_plugin(cf, pcc, "SWIFT")
{
num_files_ = 1;
#ifdef USE_MPI
@ -62,7 +62,7 @@ public:
real_t astart = 1.0 / (1.0 + cf_.get_value<double>("setup", "zstart"));
const double rhoc = 27.7519737; // in h^2 1e10 M_sol / Mpc^3
hubble_param_ = cf_.get_value<double>("cosmology", "H0") / 100.;
hubble_param_ = pcc->cosmo_param_["h"];
astart_ = 1.0/(1.0+cf_.get_value<double>("setup","zstart"));
boxsize_ = cf_.get_value<double>("setup", "BoxLength");
@ -133,10 +133,10 @@ public:
if( bdobaryons_ )
{
const double gamma = cf_.get_value_safe<double>("cosmology", "gamma", 5.0 / 3.0);
const double YHe = cf_.get_value_safe<double>("cosmology", "YHe", 0.248);
const double YHe = pcc_->cosmo_param_["YHe"];
//const double Omega0 = cf_.get_value<double>("cosmology", "Omega_m");
const double omegab = cf_.get_value<double>("cosmology", "Omega_b");
const double Tcmb0 = cf_.get_value_safe<double>("cosmology", "Tcmb", 2.7255);
const double omegab = pcc_->cosmo_param_["Omega_b"];
const double Tcmb0 = pcc_->cosmo_param_["Tcmb"];
// compute gas internal energy