mirror of
https://github.com/cosmo-sims/monofonIC.git
synced 2024-09-18 15:53:45 +02:00
output plugins use cosmology::parameters instead of config file to set dependent quantities
This commit is contained in:
parent
25ddeffc76
commit
f7a59c6634
10 changed files with 57 additions and 50 deletions
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 ));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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; }
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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";
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue