From fddeb8f670c617810a3c5ec8f0b0655ece0c3d94 Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Sat, 14 Mar 2020 21:27:58 +0100 Subject: [PATCH] FEM: ccx unit tests, fix create result method --- src/Mod/Fem/femtest/app/test_ccxtools.py | 125 ++++++++++++----------- 1 file changed, 67 insertions(+), 58 deletions(-) diff --git a/src/Mod/Fem/femtest/app/test_ccxtools.py b/src/Mod/Fem/femtest/app/test_ccxtools.py index f693b5111a..5909295797 100644 --- a/src/Mod/Fem/femtest/app/test_ccxtools.py +++ b/src/Mod/Fem/femtest/app/test_ccxtools.py @@ -498,48 +498,42 @@ def create_test_results(): import os import shutil - import sys + import unittest import FemGui - import Test - import femresult.resulttools as resulttools + from femresult import resulttools from femtools import ccxtools + temp_dir = testtools.get_fem_test_tmp_dir() + test_class = "femtest.app.test_ccxtools.TestCcxTools" # unit test class stat_types = [ - "U1", "U2", "U3", "Uabs", - "Sabs", + "U1", "U2", "U3", "Uabs", "Sabs", "MaxPrin", "MidPrin", "MinPrin", "MaxShear", "Peeq", "Temp", "MFlow", "NPress" ] - temp_dir = testtools.get_fem_test_tmp_dir() - static_analysis_dir = temp_dir + "FEM_ccx_static/" - frequency_analysis_dir = temp_dir + "FEM_ccx_frequency/" - thermomech_analysis_dir = temp_dir + "FEM_ccx_thermomech/" - Flow1D_thermomech_analysis_dir = temp_dir + "FEM_ccx_Flow1D_thermomech/" - - # run all unit tests from this module - current_module = sys.modules[__name__] - Test.runTestsFromModule(current_module) + # **************************************************************************** # static cube - FreeCAD.open(static_analysis_dir + "cube_static.FCStd") - FemGui.setActiveAnalysis(FreeCAD.ActiveDocument.Analysis) + print("create static result files") + unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromName( + test_class + ".test_static_analysis") + ) + static_analysis_dir = join(temp_dir, "FEM_ccx_static") + doc_static_cube = FreeCAD.open(join(static_analysis_dir, "cube_static.FCStd")) + FemGui.setActiveAnalysis(doc_static_cube.Analysis) fea = ccxtools.FemToolsCcx() fea.update_objects() - print("create static result files") fea.reset_all() fea.run() fea.load_results() stats_static = [] + res_obj_static = doc_static_cube.getObject("CCX_Results") for s in stat_types: - statval = resulttools.get_stats( - FreeCAD.ActiveDocument.getObject("CalculiX_static_results"), - s - ) + statval = resulttools.get_stats(res_obj_static, s) stats_static.append( - "{0}: ({1:.14g}, {2:.14g}, {3:.14g})\n" - .format(s, statval[0], statval[1], statval[2]) + "{0}: ({1:.14g}, {2:.14g}, )\n" + .format(s, statval[0], statval[1]) ) static_expected_values_file = join( static_analysis_dir, @@ -551,31 +545,36 @@ def create_test_results(): f.close() frd_result_file = os.path.splitext(fea.inp_file_name)[0] + ".frd" dat_result_file = os.path.splitext(fea.inp_file_name)[0] + ".dat" - frd_static_test_result_file = static_analysis_dir + "cube_static.frd" - dat_static_test_result_file = static_analysis_dir + "cube_static.dat" + frd_static_test_result_file = join(static_analysis_dir, "cube_static.frd") + dat_static_test_result_file = join(static_analysis_dir, "cube_static.dat") shutil.copyfile(frd_result_file, frd_static_test_result_file) shutil.copyfile(dat_result_file, dat_static_test_result_file) + print("Results copied to the appropriate FEM test dirs in: " + temp_dir) + # **************************************************************************** # frequency cube - FreeCAD.open(frequency_analysis_dir + "cube_frequency.FCStd") - FemGui.setActiveAnalysis(FreeCAD.ActiveDocument.Analysis) + print("create frequency result files") + unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromName( + test_class + ".test_freq_analysis") + ) + frequency_analysis_dir = join(temp_dir, "FEM_ccx_frequency") + doc_frequency_cube = FreeCAD.open(join(frequency_analysis_dir, "cube_frequency.FCStd")) + FemGui.setActiveAnalysis(doc_frequency_cube.Analysis) fea = ccxtools.FemToolsCcx() fea.update_objects() - - print("create frequency result files") fea.reset_all() - fea.solver.EigenmodesCount = 1 # we should only have one result object + # we should only have one result object 1 to 6 will be less than 0.01 and ignored + fea.solver.EigenmodesCount = 7 + doc_frequency_cube.recompute() fea.run() fea.load_results() stats_frequency = [] + res_obj_freq = doc_frequency_cube.getObject("CCX_Mode7_Results") for s in stat_types: - statval = resulttools.get_stats( - FreeCAD.ActiveDocument.getObject("CalculiX_frequency_mode_1_results"), - s - ) + statval = resulttools.get_stats(res_obj_freq, s) stats_frequency.append( - "{0}: ({1:.14g}, {2:.14g}, {3:.14g})\n" - .format(s, statval[0], statval[1], statval[2]) + "{0}: ({1:.14g}, {2:.14g})\n" + .format(s, statval[0], statval[1]) ) frequency_expected_values_file = join( frequency_analysis_dir, @@ -585,28 +584,34 @@ def create_test_results(): for s in stats_frequency: f.write(s) f.close() - frd_frequency_test_result_file = frequency_analysis_dir + "cube_frequency.frd" - dat_frequency_test_result_file = frequency_analysis_dir + "cube_frequency.dat" + frd_result_file = os.path.splitext(fea.inp_file_name)[0] + ".frd" + dat_result_file = os.path.splitext(fea.inp_file_name)[0] + ".dat" + frd_frequency_test_result_file = join(frequency_analysis_dir, "cube_frequency.frd") + dat_frequency_test_result_file = join(frequency_analysis_dir, "cube_frequency.dat") shutil.copyfile(frd_result_file, frd_frequency_test_result_file) shutil.copyfile(dat_result_file, dat_frequency_test_result_file) + print("Results copied to the appropriate FEM test dirs in: " + temp_dir) + # **************************************************************************** # thermomech print("create thermomech result files") - FreeCAD.open(thermomech_analysis_dir + "spine_thermomech.FCStd") - FemGui.setActiveAnalysis(FreeCAD.ActiveDocument.Analysis) + unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromName( + test_class + ".test_thermomech_spine_analysis") + ) + thermomech_analysis_dir = join(temp_dir, "FEM_ccx_thermomech") + doc_thermomech = FreeCAD.open(join(thermomech_analysis_dir, "spine_thermomech.FCStd")) + FemGui.setActiveAnalysis(doc_thermomech.Analysis) fea = ccxtools.FemToolsCcx() fea.reset_all() fea.run() fea.load_results() stats_thermomech = [] + res_obj_thermo = doc_thermomech.getObject("CCX_Results001") # two time step results after run for s in stat_types: - statval = resulttools.get_stats( - FreeCAD.ActiveDocument.getObject("CalculiX_thermomech_results"), - s - ) + statval = resulttools.get_stats(res_obj_thermo, s) stats_thermomech.append( - "{0}: ({1:.14g}, {2:.14g}, {3:.14g})\n" - .format(s, statval[0], statval[1], statval[2]) + "{0}: ({1:.14g}, {2:.14g})\n" + .format(s, statval[0], statval[1]) ) thermomech_expected_values_file = join( thermomech_analysis_dir, @@ -618,29 +623,32 @@ def create_test_results(): f.close() frd_result_file = os.path.splitext(fea.inp_file_name)[0] + ".frd" dat_result_file = os.path.splitext(fea.inp_file_name)[0] + ".dat" - frd_thermomech_test_result_file = thermomech_analysis_dir + "spine_thermomech.frd" - dat_thermomech_test_result_file = thermomech_analysis_dir + "spine_thermomech.dat" + frd_thermomech_test_result_file = join(thermomech_analysis_dir, "spine_thermomech.frd") + dat_thermomech_test_result_file = join(thermomech_analysis_dir, "spine_thermomech.dat") shutil.copyfile(frd_result_file, frd_thermomech_test_result_file) shutil.copyfile(dat_result_file, dat_thermomech_test_result_file) print("Results copied to the appropriate FEM test dirs in: " + temp_dir) + # **************************************************************************** # Flow1D print("create Flow1D result files") - FreeCAD.open(Flow1D_thermomech_analysis_dir + "Flow1D_thermomech.FCStd") - FemGui.setActiveAnalysis(FreeCAD.ActiveDocument.Analysis) + unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromName( + test_class + ".test_thermomech_flow1D_analysis") + ) + Flow1D_thermomech_analysis_dir = join(temp_dir, "FEM_ccx_Flow1D_thermomech") + doc_flow1d = FreeCAD.open(join(Flow1D_thermomech_analysis_dir, "Flow1D_thermomech.FCStd")) + FemGui.setActiveAnalysis(doc_flow1d.Analysis) fea = ccxtools.FemToolsCcx() fea.reset_all() fea.run() fea.load_results() stats_flow1D = [] + res_obj_flow1d = doc_flow1d.getObject("CCX_Time1_0_Results001") for s in stat_types: - statval = resulttools.get_stats( - FreeCAD.ActiveDocument.getObject("CalculiX_thermomech_time_1_0_results"), - s - ) + statval = resulttools.get_stats(res_obj_flow1d, s) stats_flow1D.append( - "{0}: ({1:.14g}, {2:.14g}, {3:.14g})\n" - .format(s, statval[0], statval[1], statval[2]) + "{0}: ({1:.14g}, {2:.14g})\n" + .format(s, statval[0], statval[1]) ) Flow1D_thermomech_expected_values_file = join( Flow1D_thermomech_analysis_dir, @@ -668,10 +676,11 @@ def create_test_results(): """ update the results of FEM ccxtools unit tests: -from femtest.testccxtools import create_test_results +from femtest.app.test_ccxtools import create_test_results create_test_results() -copy result files from your_temp_directory/FEM_unittests/ test directories into the src directory +copy result files +from unit_test_temp_directory/FEM_unittests/specific_test into the src directory compare the results with git difftool run make start FreeCAD and run FEM unit test