FEM: unit test, ccx tools, use methods for all the rest tests

This commit is contained in:
Bernd Hahnebach
2020-01-18 06:43:11 +01:00
parent 6b81d39b14
commit 1ad0d00ab3

View File

@@ -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