Browse Source

add error compare module

master
cflin 2 years ago
parent
commit
fd5a0544be
  1. 2
      CMakeLists.txt
  2. 3
      README.md
  3. 75530
      sim-test/rigid-test/rearAxle-mod/ref_res/位移-X.txt
  4. 75530
      sim-test/rigid-test/rearAxle-mod/ref_res/位移-Y.txt
  5. 75530
      sim-test/rigid-test/rearAxle-mod/ref_res/位移-Z.txt
  6. 75530
      sim-test/rigid-test/rearAxle-mod/ref_res/位移范数.txt
  7. 75530
      sim-test/rigid-test/rearAxle-mod/ref_res/冯氏应力.txt
  8. 75530
      sim-test/rigid-test/rearAxle-mod/ref_res/应力-X.txt
  9. 75530
      sim-test/rigid-test/rearAxle-mod/ref_res/应力-Y.txt
  10. 75530
      sim-test/rigid-test/rearAxle-mod/ref_res/应力-Z.txt
  11. 75530
      sim-test/rigid-test/rearAxle-mod/ref_res/应力范数.txt
  12. 7
      src/static_sim/SimTargetOption.h
  13. 2
      src/static_sim/StaticSim.h
  14. 1
      src/viewer/StaticSimGUI.h
  15. 53
      src/viewer/StaticSimGUIMenu.cpp

2
CMakeLists.txt

@ -46,4 +46,4 @@ add_subdirectory(${CMAKE_SOURCE_DIR}/sim-test/rigid-test)
target_link_libraries(${PROJECT_NAME} PUBLIC StaticSim)
target_compile_definitions(${PROJECT_NAME} PUBLIC CMAKE_SOURCE_DIR="${CMAKE_SOURCE_DIR}")
add_compile_definitions(DEBUG_SSIM) # for auto load json
#add_compile_definitions(DEBUG_SSIM) # for auto load json

3
README.md

@ -21,6 +21,3 @@ To run the program, simply execute the binary:
## Usage
The load files are in `sim-test/rigid-test/*/json`, generated by `sim-test/rigid-test/*/*.json.in`.

75530
sim-test/rigid-test/rearAxle-mod/ref_res/位移-X.txt

File diff suppressed because it is too large

75530
sim-test/rigid-test/rearAxle-mod/ref_res/位移-Y.txt

File diff suppressed because it is too large

75530
sim-test/rigid-test/rearAxle-mod/ref_res/位移-Z.txt

File diff suppressed because it is too large

75530
sim-test/rigid-test/rearAxle-mod/ref_res/位移范数.txt

File diff suppressed because it is too large

75530
sim-test/rigid-test/rearAxle-mod/ref_res/冯氏应力.txt

File diff suppressed because it is too large

75530
sim-test/rigid-test/rearAxle-mod/ref_res/应力-X.txt

File diff suppressed because it is too large

75530
sim-test/rigid-test/rearAxle-mod/ref_res/应力-Y.txt

File diff suppressed because it is too large

75530
sim-test/rigid-test/rearAxle-mod/ref_res/应力-Z.txt

File diff suppressed because it is too large

75530
sim-test/rigid-test/rearAxle-mod/ref_res/应力范数.txt

File diff suppressed because it is too large

7
src/static_sim/SimTargetOption.h

@ -4,6 +4,8 @@
#ifndef RIGIDIPC_SIMTARGETOPTION_H
#define RIGIDIPC_SIMTARGETOPTION_H
#include <vector>
#include <string>
#include <climits>
namespace ssim {
@ -12,6 +14,11 @@ namespace ssim {
enum Target {
U_NORM = 0, UX, UY, UZ, S_NORM, S_VON_Mises,/*primary stress*/SX, SY, SZ, COMPLIANCE, ENUM_SIZE
};
static std::string GetTargetName(int i){
static const std::vector<std::string> v_options_name={"位移范数","位移-X","位移-Y","位移-Z","应力范数","冯氏应力","应力-X","应力-Y","应力-Z","柔顺度"};
return v_options_name[i];
}
static const std::string TARGET_NAME[ENUM_SIZE];
static const std::string TARGET_UNIT[ENUM_SIZE];

2
src/static_sim/StaticSim.h

@ -102,7 +102,7 @@ namespace ssim {
for(int i=0;i<v_is_extract.size();++i){
assert(i<SimTargetOption::Target::ENUM_SIZE);
if(v_is_extract[i]){
Utils::writeMatrix(save_dir + "/" + std::to_string(i) + ".txt", map_target_to_evaluated_[i]);
Utils::writeMatrix(save_dir + "/" + SimTargetOption::GetTargetName(i) + ".txt",EvaluateTarget(static_cast<ssim::SimTargetOption::Target>(i)) /*map_target_to_evaluated_[i]*/);
spdlog::info("extract target {}",i);
}
}

1
src/viewer/StaticSimGUI.h

@ -31,6 +31,7 @@ namespace ssim {
bool is_visible_BC = false;
bool is_visible_mesh = true;
bool is_single_color = true;
bool has_load_cmp_file=false;
struct ColorbarBoundary{
float xmin;
float xmax;

53
src/viewer/StaticSimGUIMenu.cpp

@ -26,6 +26,7 @@ namespace ssim {
#endif
gui_ctrl_.is_initialized = true;
gui_ctrl_.is_loaded_json = true;
gui_ctrl_.has_load_cmp_file= false;
}
if (gui_ctrl_.is_loaded_json) {
@ -236,32 +237,42 @@ namespace ssim {
};
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))) {
std::string input_dir = ssim::directory_dialog_save();
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
Eigen::VectorXd ref_SVonMise = cpt_SVonMise * 1.1;// TODO:fixme
error_compliance = std::abs(cpt_compliance - ref_compliance) / ref_compliance;
error_UNorm = (cpt_UNorm - ref_UNorm).norm() / ref_UNorm.norm();
error_SVonMise = (cpt_SVonMise - ref_SVonMise).norm() / ref_SVonMise.norm();
has_load_cmp_file = true;
}
if (has_load_cmp_file) {
ImGui::TextWrapped("柔顺度误差: %.2f %%", error_compliance * 100);
ImGui::TextWrapped("位移范数误差: %.2f %%", error_UNorm * 100);
ImGui::TextWrapped("冯氏应力误差: %.2f %%", error_SVonMise * 100);
for (int i = 0; i < ssim::SimTargetOption::Target::ENUM_SIZE; ++i) {
std::string target_name = SimTargetOption::GetTargetName(i);
std::ifstream iif(input_dir + "/" + target_name + ".txt");
Eigen::VectorXd cpt_cur_target = sp_StaticSim_->EvaluateTarget(
static_cast<ssim::SimTargetOption::Target>(i));
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 (gui_ctrl_.has_load_cmp_file) {
for (int i = 0; i < SimTargetOption::Target::ENUM_SIZE; ++i) {
if (v_error[i] != EMPTY) {
ImGui::TextWrapped((SimTargetOption::GetTargetName(i) + std::string("误差: %.5f %%")).c_str(),
v_error[i]);
}
}
}

Loading…
Cancel
Save