diff --git a/src/Mod/Fem/femtest/app/test_ccxtools.py b/src/Mod/Fem/femtest/app/test_ccxtools.py index e3440ce3f6..95ab456eb9 100644 --- a/src/Mod/Fem/femtest/app/test_ccxtools.py +++ b/src/Mod/Fem/femtest/app/test_ccxtools.py @@ -71,265 +71,90 @@ class TestCcxTools(unittest.TestCase): def test_1_static_analysis( self ): - fcc_print("\n--------------- Start of FEM ccxtools static analysis test ---------------") - - # set up the static analysis example + # set up from femexamples import boxanalysis as box box.setup_static(self.active_doc, "ccxtools") - analysis = self.active_doc.Analysis - solver_object = self.active_doc.CalculiXccxTools - fcc_print("Analysis {}".format(type(analysis))) - fcc_print("Analysis {}".format(analysis.TypeId)) - - static_analysis_dir = testtools.get_unit_test_tmp_dir( + test_name = "ccxtools static analysis test" + base_name = "cube_static" + res_obj_name = "CCX_Results" + analysis_dir = testtools.get_unit_test_tmp_dir( self.temp_dir, "FEM_ccx_static" ) - fea = ccxtools.FemToolsCcx(analysis, solver_object, test_mode=True) - fea.update_objects() - fcc_print("fea Analysis {}".format(type(fea.analysis))) - fcc_print("fea Analysis {}".format(fea.analysis.TypeId)) - fcc_print("Setting up working directory {}".format(static_analysis_dir)) - fea.setup_working_dir(static_analysis_dir) - self.assertTrue( - True if fea.working_dir == static_analysis_dir else False, - "Setting working directory {} failed".format(static_analysis_dir) + # test input file writing + fea = self.input_file_writing_test( + test_name=test_name, + base_name=base_name, + analysis_dir=analysis_dir, + test_end=True, ) - fcc_print("Checking FEM inp file prerequisites for static analysis...") - error = fea.check_prerequisites() - self.assertFalse( - error, - "ccxtools check_prerequisites returned error message: {}".format(error) + # test result reading + self.result_reading_test( + test_name=test_name, + base_name=base_name, + analysis_dir=analysis_dir, + fea=fea, + res_obj_name=res_obj_name, ) - static_base_name = "cube_static" - inpfile_given = join(self.test_file_dir, (static_base_name + ".inp")) - inpfile_totest = join(static_analysis_dir, (self.mesh_name + ".inp")) - fcc_print("Checking FEM inp file write...") - fcc_print("Writing {} for static analysis".format(inpfile_totest)) - error = fea.write_inp_file() - self.assertFalse( - error, - "Writing failed" - ) - - fcc_print("Comparing {} to {}".format(inpfile_given, inpfile_totest)) - ret = testtools.compare_inp_files(inpfile_given, inpfile_totest) - self.assertFalse( - ret, - "ccxtools write_inp_file test failed.\n{}".format(ret) - ) - - fcc_print( - "Setting up working directory to {} in order to read simulated calculations" - .format(self.test_file_dir) - ) - fea.setup_working_dir(self.test_file_dir) - fcc_print(fea.working_dir) - fcc_print(self.test_file_dir) - self.assertTrue( - True if fea.working_dir == self.test_file_dir else False, - "Setting working directory {} failed".format(self.test_file_dir) - ) - - fcc_print("Setting base name to read test {}.frd file...".format("cube_static")) - fea.set_base_name(static_base_name) - self.assertTrue( - True if fea.base_name == static_base_name else False, - "Setting base name to {} failed".format(static_base_name) - ) - - fcc_print("Setting inp file name to read test {}.frd file...".format("cube_static")) - fea.set_inp_file_name() - self.assertTrue( - True if fea.inp_file_name == inpfile_given else False, - "Setting inp file name to {} failed".format(inpfile_given) - ) - - fcc_print("Checking FEM frd file read from static analysis...") - fea.load_results() - self.assertTrue( - fea.results_present, - "Cannot read results from {}.frd frd file".format(fea.base_name) - ) - - fcc_print("Reading stats from result object for static analysis...") - static_expected_values = join(self.test_file_dir, "cube_static_expected_values") - ret = testtools.compare_stats( - fea, - static_expected_values, - "CCX_Results" - ) - self.assertFalse( - ret, - "Invalid results read from .frd file" - ) - - static_save_fc_file = static_analysis_dir + static_base_name + ".FCStd" - fcc_print("Save FreeCAD file for static analysis to {}...".format(static_save_fc_file)) - self.active_doc.saveAs(static_save_fc_file) - - fcc_print("--------------- End of FEM ccxtools static analysis test -------------------") - # ******************************************************************************************** def test_2_static_multiple_material( self ): - fcc_print("\n--------------- Start of FEM ccxtools multiple material test -------------") - - # set up the simple multimat example + # set up from femexamples import material_multiple_twoboxes material_multiple_twoboxes.setup(self.active_doc, "ccxtools") - analysis = self.active_doc.Analysis - solver_object = self.active_doc.CalculiXccxTools - - static_multiplemat_dir = testtools.get_unit_test_tmp_dir( + test_name = "multiple material test" + base_name = "multimat" + analysis_dir = testtools.get_unit_test_tmp_dir( self.temp_dir, - "FEM_ccx_multimat/" - ) - fea = ccxtools.FemToolsCcx(analysis, solver_object, test_mode=True) - fea.update_objects() - fea.setup_working_dir(static_multiplemat_dir) - - fcc_print("Checking FEM inp file prerequisites for ccxtools multimat analysis...") - error = fea.check_prerequisites() - self.assertFalse( - error, - "ccxtools check_prerequisites returned error message: {}".format(error) + "FEM_ccx_multimat" ) - static_base_name = "multimat" - inpfile_given = join(self.test_file_dir, (static_base_name + ".inp")) - inpfile_totest = join(static_multiplemat_dir, (self.mesh_name + ".inp")) - fcc_print("Checking FEM inp file write...") - fcc_print("Writing {} for static multiple material".format(inpfile_totest)) - error = fea.write_inp_file() - self.assertFalse( - error, - "Writing failed" + # test input file writing + self.input_file_writing_test( + test_name=test_name, + base_name=base_name, + analysis_dir=analysis_dir, ) - fcc_print("Comparing {} to {}".format(inpfile_given, inpfile_totest)) - ret = testtools.compare_inp_files(inpfile_given, inpfile_totest) - self.assertFalse( - ret, - "ccxtools write_inp_file test failed.\n{}".format(ret) - ) - - static_save_fc_file = static_multiplemat_dir + static_base_name + ".FCStd" - fcc_print("Save FreeCAD file for static analysis to {}...".format(static_save_fc_file)) - self.active_doc.saveAs(static_save_fc_file) - - fcc_print("--------------- End of FEM ccxtools multiple material test -----------------") - # ******************************************************************************************** def test_3_freq_analysis( self ): - fcc_print("\n--------------- Start of FEM ccxtools frequency analysis test ------------") - - # set up the static analysis example + # set up from femexamples import boxanalysis as box box.setup_frequency(self.active_doc, "ccxtools") - analysis = self.active_doc.Analysis - solver_object = self.active_doc.CalculiXccxTools - - frequency_analysis_dir = testtools.get_unit_test_tmp_dir( + test_name = "frequency analysis test" + base_name = "cube_frequency" + res_obj_name = "CCX_Mode1_Results" + analysis_dir = testtools.get_unit_test_tmp_dir( self.temp_dir, "FEM_ccx_frequency" ) - fea = ccxtools.FemToolsCcx(analysis, solver_object, test_mode=True) - fea.update_objects() - fcc_print("Setting up working directory {}".format(frequency_analysis_dir)) - fea.setup_working_dir(frequency_analysis_dir) - self.assertTrue( - True if fea.working_dir == frequency_analysis_dir else False, - "Setting working directory {} failed".format(frequency_analysis_dir) + # test input file writing + fea = self.input_file_writing_test( + test_name=test_name, + base_name=base_name, + analysis_dir=analysis_dir, + test_end=True, ) - fcc_print("Checking FEM inp file prerequisites for frequency analysis...") - error = fea.check_prerequisites() - self.assertFalse( - error, - "ccxtools check_prerequisites returned error message: {}".format(error) + # test result reading + self.result_reading_test( + test_name=test_name, + base_name=base_name, + analysis_dir=analysis_dir, + fea=fea, + res_obj_name=res_obj_name, ) - frequency_base_name = "cube_frequency" - inpfile_given = join(self.test_file_dir, (frequency_base_name + ".inp")) - inpfile_totest = join(frequency_analysis_dir, (self.mesh_name + ".inp")) - fcc_print("Checking FEM inp file write...") - fcc_print("Writing {} for frequency analysis".format(inpfile_totest)) - error = fea.write_inp_file() - self.assertFalse( - error, - "Writing failed" - ) - - fcc_print("Comparing {} to {}".format(inpfile_given, inpfile_totest)) - ret = testtools.compare_inp_files(inpfile_given, inpfile_totest) - self.assertFalse( - ret, - "ccxtools write_inp_file test failed.\n{}".format(ret) - ) - - fcc_print( - "Setting up working directory to {} in order to read simulated calculations". - format(self.test_file_dir) - ) - fea.setup_working_dir(self.test_file_dir) - self.assertTrue( - True if fea.working_dir == self.test_file_dir else False, - "Setting working directory {} failed".format(self.test_file_dir) - ) - - fcc_print("Setting base name to read test {}.frd file...".format(frequency_base_name)) - fea.set_base_name(frequency_base_name) - self.assertTrue( - True if fea.base_name == frequency_base_name else False, - "Setting base name to {} failed".format(frequency_base_name) - ) - - fcc_print("Setting inp file name to read test {}.frd file...".format("cube_frequency")) - fea.set_inp_file_name() - self.assertTrue( - True if fea.inp_file_name == inpfile_given else False, - "Setting inp file name to {} failed".format(inpfile_given) - ) - - fcc_print("Checking FEM frd file read from frequency analysis...") - fea.load_results() - self.assertTrue( - fea.results_present, - "Cannot read results from {}.frd frd file".format(fea.base_name) - ) - - fcc_print("Reading stats from result object for frequency analysis...") - frequency_expected_values = join(self.test_file_dir, "cube_frequency_expected_values") - ret = testtools.compare_stats( - fea, - frequency_expected_values, - "CCX_Mode1_Results" - ) - self.assertFalse( - ret, - "Invalid results read from .frd file" - ) - - frequency_save_fc_file = frequency_analysis_dir + frequency_base_name + ".FCStd" - fcc_print( - "Save FreeCAD file for frequency analysis to {}..." - .format(frequency_save_fc_file) - ) - self.active_doc.saveAs(frequency_save_fc_file) - - fcc_print("--------------- End of FEM ccxtools frequency analysis test ----------------") - # ******************************************************************************************** def test_4_thermomech_analysis( self