FEM: solver frame work unit tests, improvements
This commit is contained in:
@@ -52,8 +52,10 @@ class TestSolverFrameWork(unittest.TestCase):
|
||||
|
||||
# more inits
|
||||
self.mesh_name = "Mesh"
|
||||
self.temp_dir = testtools.get_fem_test_tmp_dir()
|
||||
self.test_file_dir = join(testtools.get_fem_test_home_dir(), "ccx")
|
||||
self.temp_dir = testtools.get_unit_test_tmp_dir(
|
||||
testtools.get_fem_test_tmp_dir(),
|
||||
"FEM_solverframework"
|
||||
)
|
||||
|
||||
def test_00print(
|
||||
self
|
||||
@@ -70,27 +72,25 @@ class TestSolverFrameWork(unittest.TestCase):
|
||||
):
|
||||
fcc_print("\n--------------- Start of FEM tests solver framework solver CalculiX ------")
|
||||
|
||||
# set up the static analysis example
|
||||
# set up the CalculiX static analysis example
|
||||
from femexamples import boxanalysis as box
|
||||
box.setup_static(self.active_doc, "calculix")
|
||||
|
||||
analysis = self.active_doc.Analysis
|
||||
solver_ccx_object = self.active_doc.SolverCalculiX
|
||||
material_object = self.active_doc.MechanicalMaterial
|
||||
mesh_object = self.active_doc.Mesh
|
||||
solver_obj = self.active_doc.SolverCalculiX
|
||||
|
||||
static_base_name = "cube_static"
|
||||
solverframework_analysis_dir = testtools.get_unit_test_tmp_dir(
|
||||
testtools.get_fem_test_tmp_dir(),
|
||||
"FEM_solverframework"
|
||||
)
|
||||
base_name = "cube_static"
|
||||
analysis_dir = testtools.get_unit_test_tmp_dir(self.temp_dir, solver_obj.Name)
|
||||
|
||||
# save the file
|
||||
save_fc_file = join(analysis_dir, solver_obj.Name + "_" + base_name + ".FCStd")
|
||||
fcc_print("Save FreeCAD file to {}...".format(save_fc_file))
|
||||
self.active_doc.saveAs(save_fc_file)
|
||||
|
||||
# write input file
|
||||
fcc_print("Checking FEM ccx solver for solver frame work......")
|
||||
fcc_print("machine_ccx")
|
||||
machine_ccx = solver_ccx_object.Proxy.createMachine(
|
||||
solver_ccx_object,
|
||||
solverframework_analysis_dir
|
||||
fcc_print("Checking FEM input file writing for CalculiX solver framework solver ...")
|
||||
machine_ccx = solver_obj.Proxy.createMachine(
|
||||
solver_obj,
|
||||
analysis_dir
|
||||
)
|
||||
machine_ccx.target = femsolver.run.PREPARE
|
||||
machine_ccx.start()
|
||||
@@ -99,64 +99,63 @@ class TestSolverFrameWork(unittest.TestCase):
|
||||
infile_given = join(
|
||||
testtools.get_fem_test_home_dir(),
|
||||
"ccx",
|
||||
(static_base_name + ".inp")
|
||||
(base_name + ".inp")
|
||||
)
|
||||
inpfile_totest = join(solverframework_analysis_dir, (self.mesh_name + ".inp"))
|
||||
inpfile_totest = join(analysis_dir, (self.mesh_name + ".inp"))
|
||||
fcc_print("Comparing {} to {}".format(infile_given, inpfile_totest))
|
||||
ret = testtools.compare_inp_files(infile_given, inpfile_totest)
|
||||
self.assertFalse(ret, "ccxtools write_inp_file test failed.\n{}".format(ret))
|
||||
|
||||
save_fc_file = solverframework_analysis_dir + static_base_name + ".FCStd"
|
||||
fcc_print("Save FreeCAD file for static2 analysis to {}...".format(save_fc_file))
|
||||
self.active_doc.saveAs(save_fc_file)
|
||||
|
||||
fcc_print("\n--------------- End of FEM tests solver framework solver CalculiX --------")
|
||||
fcc_print("--------------- End of FEM tests solver framework solver CalculiX --------")
|
||||
|
||||
# ********************************************************************************************
|
||||
def test_solver_elmer(
|
||||
self
|
||||
):
|
||||
fcc_print("\n--------------- Start of FEM tests solver framework solver Elmer ------")
|
||||
fcc_print("\n--------------- Start of FEM tests solver framework solver Elmer ---------")
|
||||
|
||||
# TODO set up example
|
||||
# set up the Elmer static analysis example
|
||||
from femexamples import boxanalysis as box
|
||||
box.setup_static(self.active_doc, "elmer")
|
||||
|
||||
'''
|
||||
# use solver frame work elmer solver
|
||||
# elmer solver object
|
||||
solver_elmer_object = ObjectsFem.makeSolverElmer(
|
||||
self.active_doc,
|
||||
"SolverElmer"
|
||||
)
|
||||
self.assertTrue(solver_elmer_object, "FemTest of elmer solver failed")
|
||||
analysis.addObject(solver_elmer_object)
|
||||
solver_elmer_eqobj = ObjectsFem.makeEquationElasticity(
|
||||
self.active_doc,
|
||||
solver_elmer_object
|
||||
)
|
||||
self.assertTrue(solver_elmer_eqobj, "FemTest of elmer elasticity equation failed")
|
||||
analysis_obj = self.active_doc.Analysis
|
||||
solver_obj = self.active_doc.SolverElmer
|
||||
material_obj = self.active_doc.MechanicalMaterial
|
||||
mesh_obj = self.active_doc.Mesh
|
||||
box_object = self.active_doc.Box
|
||||
|
||||
base_name = "cube_static"
|
||||
analysis_dir = testtools.get_unit_test_tmp_dir(self.temp_dir, solver_obj.Name)
|
||||
|
||||
# TODO move to elmer solver of femexample code
|
||||
ObjectsFem.makeEquationElasticity(self.active_doc, solver_obj)
|
||||
|
||||
# set ThermalExpansionCoefficient
|
||||
# current elmer seems to need it even on simple elasticity analysis
|
||||
mat = material_object.Material
|
||||
# FIXME elmer elasticity needs the dictionary key, otherwise it fails
|
||||
# FIXME elmer elasticity needs the dictionary key "ThermalExpansionCoefficient"
|
||||
# even on simple elasticity analysis, otherwise it fails
|
||||
mat = material_obj.Material
|
||||
mat["ThermalExpansionCoefficient"] = "0 um/m/K"
|
||||
material_object.Material = mat
|
||||
material_obj.Material = mat
|
||||
|
||||
mesh_gmsh = ObjectsFem.makeMeshGmsh(self.active_doc)
|
||||
mesh_gmsh.CharacteristicLengthMin = "9 mm"
|
||||
# elmer needs a GMHS mesh object
|
||||
# FIXME error message on Python solver run
|
||||
mesh_gmsh.FemMesh = mesh_object.FemMesh
|
||||
mesh_gmsh.Part = box
|
||||
analysis.addObject(mesh_gmsh)
|
||||
self.active_doc.removeObject(mesh_object.Name)
|
||||
mesh_gmsh = ObjectsFem.makeMeshGmsh(self.active_doc)
|
||||
mesh_gmsh.CharacteristicLengthMin = "9 mm"
|
||||
mesh_gmsh.FemMesh = mesh_obj.FemMesh
|
||||
mesh_gmsh.Part = box_object
|
||||
analysis_obj.addObject(mesh_gmsh)
|
||||
self.active_doc.removeObject(mesh_obj.Name) # remove original mesh object
|
||||
|
||||
# save the file
|
||||
save_fc_file = join(analysis_dir, solver_obj.Name + "_" + base_name + ".FCStd")
|
||||
fcc_print("Save FreeCAD file to {}...".format(save_fc_file))
|
||||
self.active_doc.saveAs(save_fc_file)
|
||||
|
||||
# solver frame work Elmer solver
|
||||
# write input files
|
||||
fcc_print("\nChecking FEM Elmer solver for solver frame work...")
|
||||
machine_elmer = solver_elmer_object.Proxy.createMachine(
|
||||
solver_elmer_object,
|
||||
solverframework_analysis_dir,
|
||||
fcc_print("Checking FEM input file writing for Elmer solver framework solver ...")
|
||||
machine_elmer = solver_obj.Proxy.createMachine(
|
||||
solver_obj,
|
||||
analysis_dir,
|
||||
True
|
||||
)
|
||||
machine_elmer.target = femsolver.run.PREPARE
|
||||
@@ -165,30 +164,30 @@ class TestSolverFrameWork(unittest.TestCase):
|
||||
|
||||
# compare startinfo, case and gmsh input files
|
||||
test_file_dir_elmer = join(testtools.get_fem_test_home_dir(), "elmer")
|
||||
fcc_print(test_file_dir_elmer)
|
||||
|
||||
fcc_print("Test writing STARTINFO file")
|
||||
startinfo_given = join(test_file_dir_elmer, "ELMERSOLVER_STARTINFO")
|
||||
startinfo_totest = join(solverframework_analysis_dir, "ELMERSOLVER_STARTINFO")
|
||||
startinfo_totest = join(analysis_dir, "ELMERSOLVER_STARTINFO")
|
||||
fcc_print("Comparing {} to {}".format(startinfo_given, startinfo_totest))
|
||||
ret = testtools.compare_files(startinfo_given, startinfo_totest)
|
||||
self.assertFalse(ret, "STARTINFO write file test failed.\n{}".format(ret))
|
||||
|
||||
fcc_print("Test writing case file")
|
||||
casefile_given = join(test_file_dir_elmer, "case.sif")
|
||||
casefile_totest = join(solverframework_analysis_dir, "case.sif")
|
||||
casefile_totest = join(analysis_dir, "case.sif")
|
||||
fcc_print("Comparing {} to {}".format(casefile_given, casefile_totest))
|
||||
ret = testtools.compare_files(casefile_given, casefile_totest)
|
||||
self.assertFalse(ret, "case write file test failed.\n{}".format(ret))
|
||||
|
||||
fcc_print("Test writing GMSH geo file")
|
||||
gmshgeofile_given = join(test_file_dir_elmer, "group_mesh.geo")
|
||||
gmshgeofile_totest = join(solverframework_analysis_dir, "group_mesh.geo")
|
||||
gmshgeofile_totest = join(analysis_dir, "group_mesh.geo")
|
||||
fcc_print("Comparing {} to {}".format(gmshgeofile_given, gmshgeofile_totest))
|
||||
ret = testtools.compare_files(gmshgeofile_given, gmshgeofile_totest)
|
||||
self.assertFalse(ret, "GMSH geo write file test failed.\n{}".format(ret))
|
||||
'''
|
||||
|
||||
fcc_print("\n--------------- End of FEM tests solver framework solver Elmer --------")
|
||||
fcc_print("--------------- End of FEM tests solver framework solver Elmer -----------")
|
||||
|
||||
# ********************************************************************************************
|
||||
def tearDown(
|
||||
|
||||
Reference in New Issue
Block a user