FEM: ccx unit tests, fix create result method

This commit is contained in:
Bernd Hahnebach
2020-03-14 21:27:58 +01:00
parent 0701d10c72
commit fddeb8f670

View File

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