FEM: ccx unit tests, fix create result method
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user