// // Created by Wei Chen on 22-9-12. // #include #include #include #include using json = nlohmann::json; #include "Config.hpp" namespace ssim { void hasObject(const json &data, const std::string &key) { if (!data.count(key)) { spdlog::error("no \"{}\" in json file", key); exit(-1); } } bool Config::loadFromJSON(const std::string &p_filePath) { filePath = p_filePath; std::ifstream f(filePath); if (!f) { return false; } json data = json::parse(f); if (data.count("material")) { // material YM = data["material"][0]; PR = data["material"][1]; density = data["material"][2]; } hasObject(data, "mshFilePath"); mshFilePath = data["mshFilePath"]; if (data.count("DBC")) { // DBC int DBCNum = data["DBC"].size(); for (int _i=0; _i < DBCNum; ++_i) { const auto &DBCI = data["DBC"][_i]; hasObject(DBCI, "min"); Eigen::Vector3d minBBox(DBCI["min"][0], DBCI["min"][1], DBCI["min"][2]); hasObject(DBCI, "max"); Eigen::Vector3d maxBBox(DBCI["max"][0], DBCI["max"][1], DBCI["max"][2]); std::array timeRange = {0.0, std::numeric_limits::infinity()}; // default value if (DBCI.count("timeRange")) { timeRange[0] = DBCI["timeRange"][0]; timeRange[1] = DBCI["timeRange"][1]; } DirichletBCs.emplace_back(DirichletBC(minBBox, maxBBox, timeRange)); } } if (data.count("NBC")) { int NBCNum = data["NBC"].size(); for (int _i=0; _i timeRange = {0.0, std::numeric_limits::infinity()}; // default value if (NBCI.count("timeRange")) { timeRange[0] = NBCI["timeRange"][0]; timeRange[1] = NBCI["timeRange"][1]; } NeumannBCs.emplace_back(NeumannBC(minBBox, maxBBox, force, timeRange)); } } return true; } void Config::backUpConfig(const std::string& p_filePath) { std::ifstream src(filePath, std::ios::binary); std::ofstream dst(p_filePath, std::ios::binary); dst << src.rdbuf(); } } // SIM