From 5c18c71ad4fcc8669403eb678d2957c596fd2e12 Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Fri, 1 Dec 2017 19:43:16 +0100 Subject: [PATCH] FEM: unit test, add new solve modules ccx and z88 and add a input file write test for new ccx solver --- src/Mod/Fem/TestFem.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/Mod/Fem/TestFem.py b/src/Mod/Fem/TestFem.py index 414452c1ef..a448092ed3 100644 --- a/src/Mod/Fem/TestFem.py +++ b/src/Mod/Fem/TestFem.py @@ -29,6 +29,7 @@ import FemToolsCcx import FemResultTools import FreeCAD import ObjectsFem +import femsolver.run import tempfile import unittest import os @@ -49,6 +50,8 @@ static_analysis_dir = temp_dir + 'FEM_static/' static_save_fc_file = static_analysis_dir + static_base_name + '.fcstd' static_analysis_inp_file = test_file_dir + static_base_name + '.inp' static_expected_values = test_file_dir + "cube_static_expected_values" +static2_analysis_dir = temp_dir + 'FEM_static2/' +static2_save_fc_file = static2_analysis_dir + static_base_name + '2.fcstd' frequency_base_name = 'cube_frequency' frequency_analysis_dir = temp_dir + 'FEM_frequency/' @@ -393,6 +396,9 @@ class FemTest(unittest.TestCase): pymodules += collect_python_modules('PyObjects') if FreeCAD.GuiUp: pymodules += collect_python_modules('PyGui') + pymodules += collect_python_modules('femsolver') + pymodules += collect_python_modules('femsolver/z88') + pymodules += collect_python_modules('femsolver/calculix') # import all collected modules # fcc_print(pymodules) @@ -592,6 +598,33 @@ class FemCcxAnalysisTest(unittest.TestCase): fcc_print('Save FreeCAD file for frequency analysis to {}...'.format(frequency_save_fc_file)) self.active_doc.saveAs(frequency_save_fc_file) + # use new solver frame work solver + fcc_print('Checking FEM new solver for new solver frame work...') + solver_ccx2_object = ObjectsFem.makeSolverCalculix(self.active_doc, 'SolverCalculiX') + solver_ccx2_object.GeometricalNonlinearity = 'linear' + solver_ccx2_object.ThermoMechSteadyState = False + solver_ccx2_object.MatrixSolverType = 'default' + solver_ccx2_object.IterationsControlParameterTimeUse = False + solver_ccx2_object.EigenmodesCount = 10 + solver_ccx2_object.EigenmodeHighLimit = 1000000.0 + solver_ccx2_object.EigenmodeLowLimit = 0.0 + self.assertTrue(solver_ccx2_object, "FemTest of new solver failed") + analysis.Member = analysis.Member + [solver_ccx2_object] + + fcc_print('Checking inpfile writing for new solver frame work...') + if not os.path.exists(static2_analysis_dir): + os.makedirs(static2_analysis_dir) + machine = solver_ccx2_object.Proxy.createMachine(solver_ccx2_object, static2_analysis_dir) + machine.target = femsolver.run.PREPARE + machine.start() + machine.join() # wait for the machine to finish. + fcc_print('Comparing {} to {}/{}.inp'.format(static_analysis_inp_file, static2_analysis_dir, mesh_name)) + ret = compare_inp_files(static_analysis_inp_file, static2_analysis_dir + mesh_name + '.inp') + self.assertFalse(ret, "FemToolsCcx write_inp_file test failed.\n{}".format(ret)) + + fcc_print('Save FreeCAD file for static2 analysis to {}...'.format(static2_save_fc_file)) + self.active_doc.saveAs(static2_save_fc_file) + fcc_print('--------------- End of FEM tests static and frequency analysis ---------------') def test_thermomech_analysis(self):