phigrape/config.h

76 lines
2.6 KiB
C++

#pragma once
#include <string>
#include <unordered_map>
#include <vector>
class Config {
public:
Config(std::string file_name);
double eps;
double t_end;
double dt_disk;
double dt_contr;
double dt_bh;
double eta;
std::string input_file_name;
int devices_per_node;
int dt_max_power;
int dt_min_power;
double eta_s_corr;
double eta_bh_corr;
bool output_hdf5;
bool output_hdf5_double_precision;
int output_ascii_precision;
int output_extra_mode;
bool dt_min_warning;
int live_smbh_count;
double live_smbh_custom_eps;
bool live_smbh_output;
bool live_smbh_neighbor_output;
int live_smbh_neighbor_number;
bool binary_smbh_pn;
bool binary_smbh_influence_sphere_output;
double binary_smbh_influence_radius_factor;
std::vector<int> pn_usage;
double pn_c;
std::vector<double> smbh1_spin;
std::vector<double> smbh2_spin;
bool ext_units_physical;
double unit_mass;
double unit_length;
double ext_m_bulge;
double ext_b_bulge;
double ext_m_disk;
double ext_a_disk;
double ext_b_disk;
double ext_m_halo_plummer;
double ext_b_halo_plummer;
double ext_log_halo_r;
double ext_log_halo_v;
double ext_dehnen_m;
double ext_dehnen_r;
double ext_dehnen_gamma;
#ifdef ETICS
double dt_scf;
std::string grapite_mask_file_name;
bool etics_dump_coeffs;
bool grapite_active_search;
double grapite_smbh_star_eps;
int grapite_dev_exec_threshold;
#endif
private:
using Dictionary = std::unordered_map<std::string,std::string>;
Dictionary read_config_file(const std::string file_name);
std::string strip(const std::string str);
template<typename T> T string_cast(const std::string str);
template<typename T> T get_parameter(Dictionary dictionary, std::string name);
template<typename T> T get_parameter(Dictionary dictionary, std::string name, T default_value);
void error_checking();
};