/** Returns nullptr if settings incorrect. */ std::unique_ptr<Configurator> FractureConfiguratorFactory::configurator(const Settings& s) const { std::unique_ptr<Configurator> pConf(nullptr); const string c = s.json["configuration"].get<string>(); if (c == string("uniform")) { const double am = s.json["mechanical aperture"].get<double>(); if (s.json["hydraulic aperture"].size() == 9) // tensor pConf.reset(new UniformFractureConfigurator(tensor("hydraulic aperture", s), tensor("permeability", s), tensor("conductivity", s), am)); else // scalar pConf.reset(new UniformFractureConfigurator(s.json["hydraulic aperture"].get<double>(), am)); } else if (c == string("regional uniform")) { const auto ams = s.json["mechanical aperture"].get<vector<double>>(); const auto frnames = s.json["fracture regions"].get<vector<string>>(); if (s.json.count("permeability")) { // tensor vector<string> props = { "hydraulic aperture" , "permeability", "conductivity" }; vector<vector<TensorVariable<3>>> vals(props.size(), vector<TensorVariable<3>>(ams.size(), TensorVariable<3>())); for (size_t i(0); i < props.size(); ++i) { auto jvals = s.json[props[i].c_str()].get<vector<vector<double>>>(); for (size_t j(0); j < ams.size(); ++j) vals[i][j] = tensor(jvals.at(j)); } pConf.reset(new RegionalUniformFractureConfigurator(vals.at(0), vals.at(1), vals.at(2), ams, frnames)); } else { // scalar const auto ahs = s.json["hydraulic aperture"].get<vector<double>>(); pConf.reset(new RegionalUniformFractureConfigurator(ahs, ams, frnames)); } } return pConf; }
bool CSysSet::Load(std::string& strConfPath) { Poco::AutoPtr<Poco::Util::IniFileConfiguration> pConf(new Poco::Util::IniFileConfiguration(strConfPath)); m_sLocalIP = pConf->getString("Net.LocalIP", "127.0.0.1"); m_nCmdPort = pConf->getInt("Net.CmdPort", 19981); m_strFileDir = pConf->getString("Sys.VersionFileDir"); return true; }