From 5cf697e61065ebb8a0f1cec652b8ce8facdd972f Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Tue, 28 May 2019 21:50:27 +0200 Subject: [PATCH] FEM: unit tests, mesh element reader writer, simplify tests --- src/Mod/Fem/femtest/testmesh.py | 376 ++++++++++---------------------- 1 file changed, 120 insertions(+), 256 deletions(-) diff --git a/src/Mod/Fem/femtest/testmesh.py b/src/Mod/Fem/femtest/testmesh.py index cab985c9a0..c03cee1994 100644 --- a/src/Mod/Fem/femtest/testmesh.py +++ b/src/Mod/Fem/femtest/testmesh.py @@ -278,6 +278,90 @@ class TestMeshEleTetra10(unittest.TestCase): fcc_print('\n') ''' + # ******************************************************************************************** + def get_file_paths( + self, + file_extension + ): + outfile = self.base_outfile + file_extension + testfile = self.base_testfile + file_extension + # fcc_print(outfile) + # fcc_print(testfile) + return (outfile, testfile) + + # ******************************************************************************************** + def compare_mesh_files( + self, + femmesh_testfile, + femmesh_outfile, + filetyp + ): + + # ''' + fcc_print([ + femmesh_testfile.Volumes[0], + femmesh_testfile.getElementNodes(femmesh_outfile.Volumes[0]) + ]) + # ''' + + # test reading the test mesh + self.assertEqual( + femmesh_testfile.Nodes, + self.expected_nodes['nodes'], + "Test reading {} mesh to {} file failed. Nodes are different.\n".format( + self.elem, + filetyp + ) + ) + self.assertEqual( + [ + femmesh_testfile.Volumes[0], + femmesh_testfile.getElementNodes(femmesh_outfile.Volumes[0]) + ], + self.expected_elem['volumes'], + "Test reading {} mesh to {} file failed. Volumes are different.\n".format( + self.elem, + filetyp + ) + ) + # test reading the written mesh + self.assertEqual( + femmesh_outfile.Nodes, + self.expected_nodes['nodes'], + "Test reading {} mesh to {} file failed. Nodes are different.\n".format( + self.elem, + filetyp + ) + ) + self.assertEqual( + [ + femmesh_outfile.Volumes[0], + femmesh_outfile.getElementNodes(femmesh_outfile.Volumes[0]) + ], + self.expected_elem['volumes'], + "Test reading {} mesh to {} file failed. Volumes are different.\n".format( + self.elem, + filetyp + ) + ) + # test if both are equal + self.assertEqual( + femmesh_outfile.Nodes, + femmesh_testfile.Nodes, + "Test reading {} mesh to {} file failed. Nodes are different.\n".format( + self.elem, + filetyp + ) + ) + self.assertEqual( + femmesh_outfile.Volumes, + femmesh_testfile.Volumes, + "Test reading {} mesh to {} file failed. Volumes are different.\n".format( + self.elem, + filetyp + ) + ) + # ******************************************************************************************** def test_tetra10_create( self @@ -317,82 +401,18 @@ class TestMeshEleTetra10(unittest.TestCase): self ): # tetra10 element: reading from and writing to inp mesh file format - filetyp = 'inp' - outfile = self.base_outfile + filetyp - testfile = self.base_testfile + filetyp - # fcc_print(outfile) - # fcc_print(testfile) + + file_extension = 'inp' + outfile, testfile = self.get_file_paths(file_extension) + self.femmesh.writeABAQUS(outfile, 1, False) # write the mesh femmesh_outfile = Fem.read(outfile) # read the mesh from written mesh femmesh_testfile = Fem.read(testfile) # read the mesh from test mesh - # reading the test mesh - # ''' - fcc_print([ - femmesh_testfile.Volumes[0], - femmesh_testfile.getElementNodes(femmesh_outfile.Volumes[0]) - ]) - # ''' - self.assertEqual( - femmesh_testfile.Nodes, - self.expected_nodes['nodes'], - "Test reading {} mesh to {} file failed. Nodes are different.\n".format( - self.elem, - filetyp - ) - ) - self.assertEqual( - [ - femmesh_testfile.Volumes[0], - femmesh_testfile.getElementNodes(femmesh_outfile.Volumes[0]) - ], - self.expected_elem['volumes'], - "Test reading {} mesh to {} file failed. Volumes are different.\n".format( - self.elem, - filetyp - ) - ) - # reading the written mesh - self.assertEqual( - femmesh_outfile.Nodes, - self.expected_nodes['nodes'], - "Test reading {} mesh to {} file failed. Nodes are different.\n".format( - self.elem, - filetyp - ) - ) - self.assertEqual( - [ - femmesh_outfile.Volumes[0], - femmesh_outfile.getElementNodes(femmesh_outfile.Volumes[0]) - ], - self.expected_elem['volumes'], - "Test reading {} mesh to {} file failed. Volumes are different.\n".format( - self.elem, - filetyp - ) - ) - # both - self.assertEqual( - femmesh_outfile.Nodes, - femmesh_testfile.Nodes, - "Test reading {} mesh to {} file failed. Nodes are different.\n".format( - self.elem, - filetyp - ) - ) - self.assertEqual( - [ - femmesh_outfile.Volumes[0], - femmesh_outfile.getElementNodes(femmesh_outfile.Volumes[0]) - ], - [ - femmesh_testfile.Volumes[0], - femmesh_testfile.getElementNodes(femmesh_outfile.Volumes[0]) - ], - "Test reading {} mesh to {} file failed. Volumes are different.\n".format( - self.elem, - filetyp - ) + + self.compare_mesh_files( + femmesh_testfile, + femmesh_outfile, + file_extension ) # ******************************************************************************************** @@ -400,70 +420,18 @@ class TestMeshEleTetra10(unittest.TestCase): self ): # tetra10 element: reading from and writing to unv mesh file format - filetyp = 'unv' - outfile = self.base_outfile + filetyp - testfile = self.base_testfile + filetyp - # fcc_print(outfile) - # fcc_print(testfile) + + file_extension = 'unv' + outfile, testfile = self.get_file_paths(file_extension) + self.femmesh.write(outfile) # write the mesh femmesh_outfile = Fem.read(outfile) # read the mesh from written mesh femmesh_testfile = Fem.read(testfile) # read the mesh from test mesh - # reading the test mesh - self.assertEqual( - femmesh_testfile.Nodes, - self.expected_nodes['nodes'], - "Test reading {} mesh to {} file failed. Nodes are different.\n".format( - self.elem, - filetyp - ) - ) - self.assertEqual( - [ - femmesh_testfile.Volumes[0], - femmesh_testfile.getElementNodes(femmesh_outfile.Volumes[0]) - ], - self.expected_elem['volumes'], - "Test reading {} mesh to {} file failed. Volumes are different.\n".format( - self.elem, - filetyp - ) - ) - # reading the written mesh - self.assertEqual( - femmesh_outfile.Nodes, - self.expected_nodes['nodes'], - "Test reading {} mesh to {} file failed. Nodes are different.\n".format( - self.elem, - filetyp - ) - ) - self.assertEqual( - [ - femmesh_outfile.Volumes[0], - femmesh_outfile.getElementNodes(femmesh_outfile.Volumes[0]) - ], - self.expected_elem['volumes'], - "Test reading {} mesh to {} file failed. Volumes are different.\n".format( - self.elem, - filetyp - ) - ) - # both - self.assertEqual( - femmesh_outfile.Nodes, - femmesh_testfile.Nodes, - "Test reading {} mesh to {} file failed. Nodes are different.\n".format( - self.elem, - filetyp - ) - ) - self.assertEqual( - femmesh_outfile.Volumes, - femmesh_testfile.Volumes, - "Test reading {} mesh to {} file failed. Volumes are different.\n".format( - self.elem, - filetyp - ) + + self.compare_mesh_files( + femmesh_testfile, + femmesh_outfile, + file_extension ) # ******************************************************************************************** @@ -471,71 +439,19 @@ class TestMeshEleTetra10(unittest.TestCase): self ): # tetra10 element: reading from and writing to unv mesh file format - filetyp = 'vtk' - outfile = self.base_outfile + filetyp - testfile = self.base_testfile + filetyp - # fcc_print(outfile) - # fcc_print(testfile) + + file_extension = 'vtk' + outfile, testfile = self.get_file_paths(file_extension) + if "BUILD_FEM_VTK" in FreeCAD.__cmake__: self.femmesh.write(outfile) # write the mesh femmesh_outfile = Fem.read(outfile) # read the mesh from written mesh femmesh_testfile = Fem.read(testfile) # read the mesh from test mesh - # reading the test mesh - self.assertEqual( - femmesh_testfile.Nodes, - self.expected_nodes['nodes'], - "Test reading {} mesh to {} file failed. Nodes are different.\n".format( - self.elem, - filetyp - ) - ) - self.assertEqual( - [ - femmesh_testfile.Volumes[0], - femmesh_testfile.getElementNodes(femmesh_outfile.Volumes[0]) - ], - self.expected_elem['volumes'], - "Test reading {} mesh to {} file failed. Volumes are different.\n".format( - self.elem, - filetyp - ) - ) - # reading the written mesh - self.assertEqual( - femmesh_outfile.Nodes, - self.expected_nodes['nodes'], - "Test reading {} mesh to {} file failed. Nodes are different.\n".format( - self.elem, - filetyp - ) - ) - self.assertEqual( - [ - femmesh_outfile.Volumes[0], - femmesh_outfile.getElementNodes(femmesh_outfile.Volumes[0]) - ], - self.expected_elem['volumes'], - "Test reading {} mesh to {} file failed. Volumes are different.\n".format( - self.elem, - filetyp - ) - ) - # both - self.assertEqual( - femmesh_outfile.Nodes, - femmesh_testfile.Nodes, - "Test reading {} mesh to {} file failed. Nodes are different.\n".format( - self.elem, - filetyp - ) - ) - self.assertEqual( - femmesh_outfile.Volumes, - femmesh_testfile.Volumes, - "Test reading {} mesh to {} file failed. Volumes are different.\n".format( - self.elem, - filetyp - ) + + self.compare_mesh_files( + femmesh_testfile, + femmesh_outfile, + file_extension ) else: fcc_print('FEM_VTK post processing is disabled.') @@ -545,70 +461,18 @@ class TestMeshEleTetra10(unittest.TestCase): self ): # tetra10 element: reading from and writing to z88 mesh file format - filetyp = 'z88' - outfile = self.base_outfile + filetyp - testfile = self.base_testfile + filetyp - # fcc_print(outfile) - # fcc_print(testfile) + + file_extension = 'z88' + outfile, testfile = self.get_file_paths(file_extension) + self.femmesh.write(outfile) # write the mesh femmesh_testfile = Fem.read(outfile) # read the mesh from written mesh femmesh_outfile = Fem.read(testfile) # read the mesh from test mesh - # reading the test mesh - self.assertEqual( - femmesh_testfile.Nodes, - self.expected_nodes['nodes'], - "Test reading {} mesh to {} file failed. Nodes are different.\n".format( - self.elem, - filetyp - ) - ) - self.assertEqual( - [ - femmesh_testfile.Volumes[0], - femmesh_testfile.getElementNodes(femmesh_outfile.Volumes[0]) - ], - self.expected_elem['volumes'], - "Test reading {} mesh to {} file failed. Volumes are different.\n".format( - self.elem, - filetyp - ) - ) - # reading the written mesh - self.assertEqual( - femmesh_outfile.Nodes, - self.expected_nodes['nodes'], - "Test reading {} mesh to {} file failed. Nodes are different.\n".format( - self.elem, - filetyp - ) - ) - self.assertEqual( - [ - femmesh_outfile.Volumes[0], - femmesh_outfile.getElementNodes(femmesh_outfile.Volumes[0]) - ], - self.expected_elem['volumes'], - "Test reading {} mesh to {} file failed. Volumes are different.\n".format( - self.elem, - filetyp - ) - ) - # both - self.assertEqual( - femmesh_outfile.Nodes, - femmesh_testfile.Nodes, - "Test reading {} mesh to {} file failed. Nodes are different.\n".format( - self.elem, - filetyp - ) - ) - self.assertEqual( - femmesh_outfile.Volumes, - femmesh_testfile.Volumes, - "Test reading {} mesh to {} file failed. Volumes are different.\n".format( - self.elem, - filetyp - ) + + self.compare_mesh_files( + femmesh_testfile, + femmesh_outfile, + file_extension ) # ********************************************************************************************