#pragma once #include #include #include 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; bool dt_min_warning; bool output_hdf5; bool output_hdf5_double_precision; int output_ascii_precision; int output_extra_mode; 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 pn_usage; double pn_c; std::vector smbh1_spin; std::vector 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; #endif private: using Dictionary = std::unordered_map; Dictionary read_config_file(const std::string file_name); std::string strip(const std::string str); template T string_cast(const std::string str); template T get_parameter(Dictionary dictionary, std::string name); template T get_parameter(Dictionary dictionary, std::string name, T default_value); void error_checking(); };