Пример #1
0
    def test_periodic_pairing(self):
        #
        # Periodic in x-direction
        #
        mesh = Mesh2D(resolution=(2, 2), periodic={0})
        for he in mesh.half_edges.get_children():
            if he.is_periodic():
                nbr = he.twin().cell()
                for v in [he.base(), he.head()]:
                    self.assertTrue(v.is_periodic())
                    for v_nbr in v.get_periodic_pair(nbr):
                        v1 = v_nbr.get_periodic_pair(he.cell())
                        self.assertEqual(v, v1[0])

        #
        # Periodic in x and y directions
        #
        mesh = Mesh2D(resolution=(2, 2), periodic={0, 1})
        c00 = mesh.cells.get_child(0)
        v00 = c00.get_vertex(0)
        c10 = mesh.cells.get_child(1)
        v10 = c10.get_vertex(1)
        c01 = mesh.cells.get_child(2)
        v01 = c01.get_vertex(3)
        c11 = mesh.cells.get_child(3)
        v11 = c11.get_vertex(2)

        # Check v00 has 4 periodic pairs
        self.assertEqual(len(v00.get_periodic_pair()), 4)

        # Check periodic paired vertices within each subcell
        self.assertEqual(v00.get_periodic_pair(c00)[0], v00)
        self.assertEqual(v00.get_periodic_pair(c10)[0], v10)
        self.assertEqual(v00.get_periodic_pair(c01)[0], v01)
        self.assertEqual(v00.get_periodic_pair(c11)[0], v11)
Пример #2
0
    def test_half_edge_has_cell(self):
        #
        # Check that every half-edge has a cell
        #
        mesh = Mesh2D(resolution=(2, 2), periodic={0})
        for cell in mesh.cells.get_children():
            for half_edge in cell.get_half_edges():
                self.assertIsNotNone(half_edge.cell())

        for half_edge in mesh.half_edges.get_children():
            self.assertIsNotNone(half_edge.cell())
Пример #3
0
    def test_get_boundary_segments(self):
        """
        In each case, get the boundary segments and check that
        (i)  The twins of all half_edges are None
        (ii) The halfedges are in order
        """
        mesh_folder = '/home/hans-werner/git/quadmesh/tests/test_mesh/'
        #
        # Define Meshes
        #
        mesh_1 = Mesh2D(resolution=(2, 2))
        mesh_2 = Mesh2D(resolution=(2, 2), periodic={0})
        mesh_3 = Mesh2D(resolution=(2, 2), periodic={1})
        mesh_4 = Mesh2D(resolution=(2, 2), periodic={0, 1})
        mesh_5 = Mesh2D(file_path=mesh_folder + 'quarter_circle_triangle.msh')
        mesh_6 = Mesh2D(file_path=mesh_folder + 'quarter_circle_quad.msh')

        meshes = [mesh_1, mesh_2, mesh_3, mesh_4, mesh_5, mesh_6]
        for mesh in meshes:
            # Check boundary
            bnd_segments = mesh.get_boundary_segments()
            for segment in bnd_segments:
                he_current = segment[0]
                for i in np.arange(1, len(segment)):
                    he_next = segment[i]
                    self.assertEqual(he_current.head(), he_next.base())
                    self.assertIsNone(he_current.twin())
                    self.assertIsNone(he_next.twin())
                    he_current = he_next
Пример #4
0
    def test_constructor(self):
        #
        # Rectangular Mesh
        #
        mesh = Mesh2D(resolution=(3, 3))
        self.assertTrue(mesh.is_rectangular())
        self.assertFalse(mesh.is_periodic())
        self.assertTrue(mesh.is_quadmesh())

        #
        # Periodic in x-direction
        #
        mesh = Mesh2D(resolution=(1, 1), periodic={0})
        self.assertTrue(mesh.is_periodic())
        self.assertTrue(mesh.is_periodic({0}))
        self.assertFalse(mesh.is_periodic({0, 1}))

        #
        # Periodic in both directions
        #
        mesh = Mesh2D(resolution=(1, 1), periodic={0, 1})
        self.assertTrue(mesh.is_periodic())
        self.assertTrue(mesh.is_periodic({0}))
        self.assertTrue(mesh.is_periodic({0, 1}))

        #
        # From Gmsh
        #
        mesh_folder = '/home/hans-werner/git/quadmesh/tests/test_mesh/'
        mesh = Mesh2D(file_path=mesh_folder + 'quarter_circle_triangle.msh')
        self.assertFalse(mesh.is_periodic())
        self.assertFalse(mesh.is_quadmesh())

        #
        # QuadMesh
        #
        mesh = Mesh2D(file_path=mesh_folder + 'quarter_circle_quad.msh')
        self.assertTrue(mesh.is_quadmesh())
        self.assertFalse(mesh.is_rectangular())
Пример #5
0
 def test_clear_dofs(self):
     # Define new dofhandler
     mesh = Mesh2D(resolution=(1,1))
     cell = mesh.cells.get_child(0)
     element = QuadFE(2, 'Q2')
     dofhandler = DofHandler(mesh, element)
     # Fill dofs
     dofhandler.fill_dofs(cell)
     
     # Clear dofs 
     dofhandler.clear_dofs()
     
     # Check that there are no dofs
     self.assertIsNone(dofhandler.get_cell_dofs(cell))
Пример #6
0
    def test_mark_region(self):
        """
        Test region marker
        """
        mesh = Mesh2D(resolution=(2, 2))
        flag = '1'
        tol = 1e-9

        # Left boundary
        f = lambda x, dummy: np.abs(x) < tol

        # Mark half-edges
        mesh.mark_region(flag, f, entity_type='half_edge', on_boundary=True)

        # Check:
        for segment in mesh.get_boundary_segments():
            for he in segment:
                marked = True
                for v in he.get_vertices():
                    x, y = v.coordinates()
                    if not f(x, y):
                        marked = False
                        break
                self.assertEqual(he.is_marked(flag), marked)

        # Top vertices
        flag = '2'
        g = lambda dummy, y: np.abs(y - 1) < tol

        # Mark vertices
        mesh.mark_region(flag, g, entity_type='vertex', on_boundary=True)

        for v in mesh.get_boundary_vertices():
            x, y = v.coordinates()
            if g(x, y):
                self.assertTrue(v.is_marked(flag))
Пример #7
0
 def test_locate_point(self):
     mesh_folder = '/home/hans-werner/git/quadmesh/tests/test_mesh/'
     mesh = Mesh2D(file_path=mesh_folder + 'quarter_circle_triangle.msh')
     point = (0.25, 0.25)
     cell = mesh.locate_point(point)
     self.assertTrue(cell.contains_points(point))