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. 49
      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_link_libraries(${PROJECT_NAME} PUBLIC StaticSim)
target_compile_definitions(${PROJECT_NAME} PUBLIC CMAKE_SOURCE_DIR="${CMAKE_SOURCE_DIR}") 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 ## Usage
The load files are in `sim-test/rigid-test/*/json`, generated by `sim-test/rigid-test/*/*.json.in`. 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 #ifndef RIGIDIPC_SIMTARGETOPTION_H
#define RIGIDIPC_SIMTARGETOPTION_H #define RIGIDIPC_SIMTARGETOPTION_H
#include <vector>
#include <string>
#include <climits> #include <climits>
namespace ssim { namespace ssim {
@ -12,6 +14,11 @@ namespace ssim {
enum Target { enum Target {
U_NORM = 0, UX, UY, UZ, S_NORM, S_VON_Mises,/*primary stress*/SX, SY, SZ, COMPLIANCE, ENUM_SIZE 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_NAME[ENUM_SIZE];
static const std::string TARGET_UNIT[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){ for(int i=0;i<v_is_extract.size();++i){
assert(i<SimTargetOption::Target::ENUM_SIZE); assert(i<SimTargetOption::Target::ENUM_SIZE);
if(v_is_extract[i]){ 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); spdlog::info("extract target {}",i);
} }
} }

1
src/viewer/StaticSimGUI.h

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

49
src/viewer/StaticSimGUIMenu.cpp

@ -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]);
}
}
} }

Loading…
Cancel
Save