|
@ -26,6 +26,7 @@ namespace ssim { |
|
|
#endif |
|
|
#endif |
|
|
gui_ctrl_.is_initialized = true; |
|
|
gui_ctrl_.is_initialized = true; |
|
|
gui_ctrl_.is_loaded_json = true; |
|
|
gui_ctrl_.is_loaded_json = true; |
|
|
|
|
|
gui_ctrl_.has_load_cmp_file= false; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (gui_ctrl_.is_loaded_json) { |
|
|
if (gui_ctrl_.is_loaded_json) { |
|
@ -236,32 +237,42 @@ namespace ssim { |
|
|
|
|
|
|
|
|
}; |
|
|
}; |
|
|
auto compare_menu = [&]() { |
|
|
auto compare_menu = [&]() { |
|
|
|
|
|
static const double EMPTY = -1; |
|
|
|
|
|
static std::vector<double> v_error(SimTargetOption::Target::ENUM_SIZE, EMPTY); |
|
|
|
|
|
|
|
|
double cpt_compliance = sp_StaticSim_->EvaluateTarget(ssim::SimTargetOption::COMPLIANCE)(0, 0); |
|
|
|
|
|
Eigen::VectorXd cpt_UNorm = sp_StaticSim_->EvaluateTarget(ssim::SimTargetOption::U_NORM); |
|
|
|
|
|
Eigen::VectorXd cpt_SVonMise = sp_StaticSim_->EvaluateTarget(ssim::SimTargetOption::S_VON_Mises); |
|
|
|
|
|
|
|
|
|
|
|
static double error_compliance; |
|
|
|
|
|
static double error_UNorm; |
|
|
|
|
|
static double error_SVonMise; |
|
|
|
|
|
|
|
|
|
|
|
static bool has_load_cmp_file = false; |
|
|
|
|
|
if (ImGui::Button("导入Ansys文件", ImVec2(-1, 0))) { |
|
|
if (ImGui::Button("导入Ansys文件", ImVec2(-1, 0))) { |
|
|
std::string input_dir = ssim::directory_dialog_save(); |
|
|
std::string input_dir = ssim::directory_dialog_save(); |
|
|
spdlog::info("input from: {}", input_dir); |
|
|
spdlog::info("input from: {}", input_dir); |
|
|
double ref_compliance = cpt_compliance * 1.1;// TODO:fixme:read the file
|
|
|
|
|
|
Eigen::VectorXd ref_UNorm = cpt_UNorm * 1.1;// TODO:fixme
|
|
|
for (int i = 0; i < ssim::SimTargetOption::Target::ENUM_SIZE; ++i) { |
|
|
Eigen::VectorXd ref_SVonMise = cpt_SVonMise * 1.1;// TODO:fixme
|
|
|
std::string target_name = SimTargetOption::GetTargetName(i); |
|
|
error_compliance = std::abs(cpt_compliance - ref_compliance) / ref_compliance; |
|
|
std::ifstream iif(input_dir + "/" + target_name + ".txt"); |
|
|
error_UNorm = (cpt_UNorm - ref_UNorm).norm() / ref_UNorm.norm(); |
|
|
Eigen::VectorXd cpt_cur_target = sp_StaticSim_->EvaluateTarget( |
|
|
error_SVonMise = (cpt_SVonMise - ref_SVonMise).norm() / ref_SVonMise.norm(); |
|
|
static_cast<ssim::SimTargetOption::Target>(i)); |
|
|
has_load_cmp_file = true; |
|
|
Eigen::VectorXd ref_cur_target = cpt_cur_target; |
|
|
|
|
|
int cnt = 0; |
|
|
|
|
|
if (!iif.is_open()) { |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
|
|
|
double t; |
|
|
|
|
|
while (iif >> t) { |
|
|
|
|
|
ref_cur_target[cnt++] = t; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
double cur_error = (cpt_cur_target - ref_cur_target).norm() / ref_cur_target.norm(); |
|
|
|
|
|
v_error[i] = cur_error; |
|
|
|
|
|
} |
|
|
|
|
|
gui_ctrl_.has_load_cmp_file = true; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (has_load_cmp_file) { |
|
|
if (gui_ctrl_.has_load_cmp_file) { |
|
|
ImGui::TextWrapped("柔顺度误差: %.2f %%", error_compliance * 100); |
|
|
for (int i = 0; i < SimTargetOption::Target::ENUM_SIZE; ++i) { |
|
|
ImGui::TextWrapped("位移范数误差: %.2f %%", error_UNorm * 100); |
|
|
if (v_error[i] != EMPTY) { |
|
|
ImGui::TextWrapped("冯氏应力误差: %.2f %%", error_SVonMise * 100); |
|
|
ImGui::TextWrapped((SimTargetOption::GetTargetName(i) + std::string("误差: %.5f %%")).c_str(), |
|
|
|
|
|
v_error[i]); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|