From f7a59c6634350fb9a31857114d6a6cd2092f5bcf Mon Sep 17 00:00:00 2001 From: Oliver Hahn Date: Thu, 10 Sep 2020 04:12:32 +0200 Subject: [PATCH] output plugins use cosmology::parameters instead of config file to set dependent quantities --- include/output_plugin.hh | 16 ++++++++++------ src/ic_generator.cc | 2 +- src/output_plugin.cc | 7 +++---- src/plugins/output_arepo.cc | 18 +++++++++--------- src/plugins/output_gadget2.cc | 10 +++++----- src/plugins/output_gadget_hdf5.cc | 10 +++++----- src/plugins/output_generic.cc | 10 +++++----- src/plugins/output_genericio.cc | 6 +++--- src/plugins/output_grafic2.cc | 16 ++++++++++------ src/plugins/output_swift.cc | 12 ++++++------ 10 files changed, 57 insertions(+), 50 deletions(-) diff --git a/include/output_plugin.hh b/include/output_plugin.hh index 5838150..4964247 100644 --- a/include/output_plugin.hh +++ b/include/output_plugin.hh @@ -25,6 +25,7 @@ #include #include #include +#include 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 &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& pcc, std::string interface_name ) + : cf_(cf), pcc_(pcc), interface_name_(interface_name) { fname_ = cf_.get_value("output", "filename"); } @@ -88,7 +92,7 @@ public: struct output_plugin_creator { //! create an instance of a plug-in - virtual std::unique_ptr create(config_file &cf) const = 0; + virtual std::unique_ptr create(config_file &cf, std::unique_ptr& 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 create(config_file &cf) const + std::unique_ptr create(config_file &cf, std::unique_ptr& pcc) const { - return std::make_unique(cf); // Derived( cf ); + return std::make_unique(cf,pcc); // Derived( cf ); } }; //! failsafe version to select the output plug-in -std::unique_ptr select_output_plugin(config_file &cf); +std::unique_ptr select_output_plugin(config_file &cf, std::unique_ptr& pcc); diff --git a/src/ic_generator.cc b/src/ic_generator.cc index fc3771e..7e0dc31 100644 --- a/src/ic_generator.cc +++ b/src/ic_generator.cc @@ -43,8 +43,8 @@ std::unique_ptr 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(the_config); + the_output_plugin = std::move(select_output_plugin(the_config, the_cosmo_calc)); return 0; } diff --git a/src/output_plugin.cc b/src/output_plugin.cc index 5d6890e..76dfbbe 100644 --- a/src/output_plugin.cc +++ b/src/output_plugin.cc @@ -40,12 +40,11 @@ void print_output_plugins() music::ilog << std::endl; } -std::unique_ptr select_output_plugin( config_file& cf ) +std::unique_ptr select_output_plugin( config_file& cf, std::unique_ptr& pcc ) { std::string formatname = cf.get_value( "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 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 )); } diff --git a/src/plugins/output_arepo.cc b/src/plugins/output_arepo.cc index 5999761..b8bd6c8 100644 --- a/src/plugins/output_arepo.cc +++ b/src/plugins/output_arepo.cc @@ -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& 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("cosmology", "Omega_m"); - header_.OmegaLambda = cf_.get_value("cosmology", "Omega_L"); - header_.OmegaBaryon = cf_.get_value("cosmology", "Omega_b"); - header_.HubbleParam = cf_.get_value("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("cosmology", "Omega_b"); + double Tcmb0 = pcc->cosmo_param_["Tcmb"]; + double Omegab = pcc->cosmo_param_["Omega_b"]; double h = cf_.get_value("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(softening_)); HDFWriteGroupAttribute(this_fname_, "Header", "suggested_gas_Tinit", from_value(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; } diff --git a/src/plugins/output_gadget2.cc b/src/plugins/output_gadget2.cc index accbe7b..673b89f 100644 --- a/src/plugins/output_gadget2.cc +++ b/src/plugins/output_gadget2.cc @@ -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 &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("setup", "BoxLength"); - this_header_.Omega0 = cf_.get_value("cosmology", "Omega_m"); - this_header_.OmegaLambda = cf_.get_value("cosmology", "Omega_L"); - this_header_.HubbleParam = cf_.get_value("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; diff --git a/src/plugins/output_gadget_hdf5.cc b/src/plugins/output_gadget_hdf5.cc index 61cf854..32c7fd2 100644 --- a/src/plugins/output_gadget_hdf5.cc +++ b/src/plugins/output_gadget_hdf5.cc @@ -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 &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("cosmology", "Omega_m"); - header_.OmegaLambda = cf_.get_value("cosmology", "Omega_L"); - header_.HubbleParam = cf_.get_value("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; diff --git a/src/plugins/output_generic.cc b/src/plugins/output_generic.cc index 2639440..72bf7fb 100644 --- a/src/plugins/output_generic.cc +++ b/src/plugins/output_generic.cc @@ -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 &pcc ) + : output_plugin(cf, pcc, "Generic HDF5") { real_t astart = 1.0/(1.0+cf_.get_value("setup", "zstart")); real_t boxsize = cf_.get_value("setup", "BoxLength"); - real_t omegab = cf_.get_value("cosmology", "Omega_b"); - real_t omegam = cf_.get_value("cosmology", "Omega_m"); - real_t omegal = cf_.get_value("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("output", "generic_out_eulerian",false); diff --git a/src/plugins/output_genericio.cc b/src/plugins/output_genericio.cc index de0a450..b5ba88e 100644 --- a/src/plugins/output_genericio.cc +++ b/src/plugins/output_genericio.cc @@ -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("setup", "zstart")); lunit_ = cf_.get_value("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("cosmology", "Omega_b") * rhoc; + rho_value_ = cc_.cosmo_param_["Omega_b"] * rhoc; munit_ = rhoc * std::pow(cf_.get_value("setup", "BoxLength"), 3); } diff --git a/src/plugins/output_grafic2.cc b/src/plugins/output_grafic2.cc index d08eb19..de0a603 100644 --- a/src/plugins/output_grafic2.cc +++ b/src/plugins/output_grafic2.cc @@ -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 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 &pcc) + : output_plugin(cf, pcc, "GRAFIC2/RAMSES") { lunit_ = 1.0; vunit_ = 1.0; double boxlength = cf_.get_value("setup", "BoxLength"), - H0 = cf_.get_value("cosmology", "H0"), zstart = cf_.get_value("setup", "zstart"), astart = 1.0 / (1.0 + zstart), - omegam = cf_.get_value("cosmology", "Omega_m"), - omegaL = cf_.get_value("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("setup", "GridRes"); bUseSPT_ = cf_.get_value_safe("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"; diff --git a/src/plugins/output_swift.cc b/src/plugins/output_swift.cc index 2a70995..e66ee2c 100644 --- a/src/plugins/output_swift.cc +++ b/src/plugins/output_swift.cc @@ -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 &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("setup", "zstart")); const double rhoc = 27.7519737; // in h^2 1e10 M_sol / Mpc^3 - hubble_param_ = cf_.get_value("cosmology", "H0") / 100.; + hubble_param_ = pcc->cosmo_param_["h"]; astart_ = 1.0/(1.0+cf_.get_value("setup","zstart")); boxsize_ = cf_.get_value("setup", "BoxLength"); @@ -133,10 +133,10 @@ public: if( bdobaryons_ ) { const double gamma = cf_.get_value_safe("cosmology", "gamma", 5.0 / 3.0); - const double YHe = cf_.get_value_safe("cosmology", "YHe", 0.248); + const double YHe = pcc_->cosmo_param_["YHe"]; //const double Omega0 = cf_.get_value("cosmology", "Omega_m"); - const double omegab = cf_.get_value("cosmology", "Omega_b"); - const double Tcmb0 = cf_.get_value_safe("cosmology", "Tcmb", 2.7255); + const double omegab = pcc_->cosmo_param_["Omega_b"]; + const double Tcmb0 = pcc_->cosmo_param_["Tcmb"]; // compute gas internal energy