Example #1
0
def test_toy_geometric():
    filename = download_mesh(
        'toy.msh',
        '1d125d3fa9f373823edd91ebae5f7a81'
        )
    mesh, _, _, _ = voropy.read(filename)

    mesh = voropy.mesh_tetra.MeshTetra(
        mesh.node_coords,
        mesh.cells['nodes'],
        mode='geometric'
        )

    run(
        mesh,
        volume=9.3875504672601107,
        convol_norms=[0.20175742659663737, 0.0093164692200450819],
        ce_ratio_norms=[13.497977312281323, 0.42980191511570004],
        cellvol_norms=[0.091903119589148916, 0.0019959463063558944],
        tol=1.0e-6
        )

    cc = mesh.get_cell_circumcenters()
    cc_norm_2 = fsum(cc.flat)
    cc_norm_inf = max(cc.flat)
    assert abs(cc_norm_2 - 1103.7038287583791) < 1.0e-12
    assert abs(cc_norm_inf - 3.4234008596539662) < 1.0e-12
    return
Example #2
0
def test_show_vertex():
    filename = download_mesh("pacman-optimized.vtk",
                             "5036d9ce5307caa0d9de80cba7ba1c4c")
    mesh = meshplex.read(filename)
    # mesh.plot_vertex(125)
    mesh.show_vertex(125)
    return
Example #3
0
def test_pacman_lloyd(max_steps=1000, output_filetype=None):
    filename = download_mesh('pacman.msh', '2da8ff96537f844a95a83abb48471b6a')
    X, cells, _, _, _ = meshio.read(filename)

    submesh_bools = {0: numpy.ones(len(cells['triangle']), dtype=bool)}

    X, cells = voropy.smoothing.lloyd_submesh(
        X,
        cells['triangle'],
        submesh_bools,
        1.0e-2,
        skip_inhomogenous_submeshes=False,
        max_steps=max_steps,
        fcc_type='boundary',
        flip_frequency=1,
        verbose=False,
        output_filetype=output_filetype)

    # Test if we're dealing with the mesh we expect.
    nc = X.flatten()
    norm1 = numpy.linalg.norm(nc, ord=1)
    norm2 = numpy.linalg.norm(nc, ord=2)
    normi = numpy.linalg.norm(nc, ord=numpy.inf)

    tol = 1.0e-12
    # assert abs(norm1 - 1944.49523751269) < tol
    # assert abs(norm2 - 76.097893244864181) < tol
    assert abs(norm1 - 1939.1198108068188) < tol
    assert abs(norm2 - 75.949652079323229) < tol
    assert abs(normi - 5.0) < tol

    return
Example #4
0
def test_mark_subdomain3d():
    filename = download_mesh("tetrahedron.vtk", "10f3ccd1642b634b22741894fe6e7f1f")
    mesh = meshplex.read(filename)

    class Subdomain1(object):
        is_boundary_only = True

        # pylint: disable=no-self-use
        def is_inside(self, x):
            return x[0] < 0.5

    class Subdomain2(object):
        is_boundary_only = False

        # pylint: disable=no-self-use
        def is_inside(self, x):
            return x[0] > 0.5

    sd1 = Subdomain1()
    vertex_mask = mesh.get_vertex_mask(sd1)
    assert vertex_mask.sum() == 16
    face_mask = mesh.get_face_mask(sd1)
    assert face_mask.sum() == 20
    cell_mask = mesh.get_cell_mask(sd1)
    assert cell_mask.sum() == 0

    sd2 = Subdomain2()
    vertex_mask = mesh.get_vertex_mask(sd2)
    assert vertex_mask.sum() == 10
    face_mask = mesh.get_face_mask(sd2)
    assert face_mask.sum() == 25
    cell_mask = mesh.get_cell_mask(sd2)
    assert cell_mask.sum() == 5
    return
Example #5
0
def test_mark_subdomain2d():
    filename = download_mesh("pacman.vtk", "c621cb22f8b87cecd77724c2c0601c36")
    mesh = meshplex.read(filename)

    class Subdomain1(object):
        is_boundary_only = True

        # pylint: disable=no-self-use
        def is_inside(self, x):
            return x[0] < 0.0

    class Subdomain2(object):
        is_boundary_only = False

        # pylint: disable=no-self-use
        def is_inside(self, x):
            return x[0] > 0.0

    sd1 = Subdomain1()
    vertex_mask = mesh.get_vertex_mask(sd1)
    assert vertex_mask.sum() == 27
    face_mask = mesh.get_face_mask(sd1)
    assert face_mask.sum() == 26
    cell_mask = mesh.get_cell_mask(sd1)
    assert cell_mask.sum() == 0

    sd2 = Subdomain2()
    vertex_mask = mesh.get_vertex_mask(sd2)
    assert vertex_mask.sum() == 214
    face_mask = mesh.get_face_mask(sd2)
    assert face_mask.sum() == 1137
    cell_mask = mesh.get_cell_mask(sd2)
    assert cell_mask.sum() == 371
    return
Example #6
0
def test_mark_subdomain2d():
    filename = download_mesh("pacman.msh", "2da8ff96537f844a95a83abb48471b6a")
    mesh, _, _, _ = meshplex.read(filename)

    class Subdomain1(object):
        is_boundary_only = True

        # pylint: disable=no-self-use
        def is_inside(self, x):
            return x[0] < 0.0

    class Subdomain2(object):
        is_boundary_only = False

        # pylint: disable=no-self-use
        def is_inside(self, x):
            return x[0] > 0.0

    sd1 = Subdomain1()
    vertex_mask = mesh.get_vertex_mask(sd1)
    assert vertex_mask.sum() == 27
    face_mask = mesh.get_face_mask(sd1)
    assert face_mask.sum() == 26
    cell_mask = mesh.get_cell_mask(sd1)
    assert cell_mask.sum() == 0

    sd2 = Subdomain2()
    vertex_mask = mesh.get_vertex_mask(sd2)
    assert vertex_mask.sum() == 214
    face_mask = mesh.get_face_mask(sd2)
    assert face_mask.sum() == 1137
    cell_mask = mesh.get_cell_mask(sd2)
    assert cell_mask.sum() == 371
    return
Example #7
0
def test_flip_delaunay():
    filename = download_mesh("pacman.msh", "2da8ff96537f844a95a83abb48471b6a")
    mesh = meshio.read(filename)

    numpy.random.seed(123)
    mesh.points[:, :2] += 5.0e-2 * numpy.random.rand(*mesh.points[:, :2].shape)

    mesh = meshplex.MeshTri(mesh.points, mesh.cells["triangle"])

    assert mesh.num_delaunay_violations() == 16

    mesh.flip_until_delaunay()
    assert mesh.num_delaunay_violations() == 0

    # Assert edges_cells integrity
    for cell_gid, edge_gids in enumerate(mesh.cells["edges"]):
        for edge_gid in edge_gids:
            num_adj_cells, edge_id = mesh._edge_gid_to_edge_list[edge_gid]
            assert cell_gid in mesh._edges_cells[num_adj_cells][edge_id]

    new_cells = mesh.cells["nodes"].copy()
    new_coords = mesh.node_coords.copy()

    # Assert that some key values are updated properly
    mesh2 = meshplex.MeshTri(new_coords, new_cells)
    assert numpy.all(mesh.idx_hierarchy == mesh2.idx_hierarchy)
    tol = 1.0e-15
    assert near_equal(mesh.half_edge_coords, mesh2.half_edge_coords, tol)
    assert near_equal(mesh.cell_volumes, mesh2.cell_volumes, tol)
    assert near_equal(mesh.ei_dot_ej, mesh2.ei_dot_ej, tol)

    return
Example #8
0
def test_mark_subdomain3d():
    filename = download_mesh("tetrahedron.msh",
                             "27a5d7e102e6613a1e58629c252cb293")
    mesh, _, _, _ = meshplex.read(filename)

    class Subdomain1(object):
        is_boundary_only = True

        # pylint: disable=no-self-use
        def is_inside(self, x):
            return x[0] < 0.5

    class Subdomain2(object):
        is_boundary_only = False

        # pylint: disable=no-self-use
        def is_inside(self, x):
            return x[0] > 0.5

    sd1 = Subdomain1()
    vertex_mask = mesh.get_vertex_mask(sd1)
    assert vertex_mask.sum() == 16
    face_mask = mesh.get_face_mask(sd1)
    assert face_mask.sum() == 20
    cell_mask = mesh.get_cell_mask(sd1)
    assert cell_mask.sum() == 0

    sd2 = Subdomain2()
    vertex_mask = mesh.get_vertex_mask(sd2)
    assert vertex_mask.sum() == 10
    face_mask = mesh.get_face_mask(sd2)
    assert face_mask.sum() == 25
    cell_mask = mesh.get_cell_mask(sd2)
    assert cell_mask.sum() == 5
    return
Example #9
0
def test_get_edges():
    filename = download_mesh('pacman.msh', '2da8ff96537f844a95a83abb48471b6a')
    mesh, _, _, _ = voropy.read(filename)
    mesh.create_edges()
    edge_mask = mesh.get_edge_mask()
    edge_nodes = mesh.edges['nodes'][edge_mask]
    assert len(edge_nodes) == 1276
    return
Example #10
0
def test_get_edges():
    filename = download_mesh("pacman.vtk", "c621cb22f8b87cecd77724c2c0601c36")
    mesh = meshplex.read(filename)
    mesh.create_edges()
    edge_mask = mesh.get_edge_mask()
    edge_nodes = mesh.edges["nodes"][edge_mask]
    assert len(edge_nodes) == 1276
    return
Example #11
0
 def test_pacman(self):
     filename = download_mesh(
             'pacman.msh',
             '2da8ff96537f844a95a83abb48471b6a'
             )
     mesh, _, _, _ = voropy.read(filename)
     self._run_test(mesh)
     return
Example #12
0
def test_signed_volume():
    filename = download_mesh("toy.msh", "1d125d3fa9f373823edd91ebae5f7a81")
    mesh, _, _, _ = meshplex.read(filename)

    vols = meshplex.get_signed_simplex_volumes(mesh.cells["nodes"], mesh.node_coords)

    assert numpy.all(abs(abs(vols) - mesh.cell_volumes) < 1.0e-12 * mesh.cell_volumes)
    return
Example #13
0
def test_show_mesh():
    filename = download_mesh("pacman-optimized.vtk",
                             "5036d9ce5307caa0d9de80cba7ba1c4c")
    mesh = meshplex.read(filename)
    print(mesh)  # test __repr__
    # mesh.plot(show_axes=False)
    mesh.show(show_axes=False,
              cell_quality_coloring=("viridis", 0.0, 1.0, True))
Example #14
0
def test_get_edges():
    filename = download_mesh("pacman.msh", "2da8ff96537f844a95a83abb48471b6a")
    mesh, _, _, _ = meshplex.read(filename)
    mesh.create_edges()
    edge_mask = mesh.get_edge_mask()
    edge_nodes = mesh.edges["nodes"][edge_mask]
    assert len(edge_nodes) == 1276
    return
Example #15
0
def test_cli(options):
    input_file = download_mesh(
        # "circle.vtk", "614fcabc0388e1b43723ac64f8555ef52ee4ddda1466368c450741eb"
        "pacman.vtk",
        "19a0c0466a4714b057b88e339ab5bd57020a04cdf1d564c86dc4add6",
    )
    output_file = "out.vtk"
    optimesh.cli.main([input_file, output_file, "-t", "1.0e-5", "-n", "5"] + options)
    return
Example #16
0
def test_sphere():
    filename = download_mesh('sphere.msh', '70a5dbf79c3b259ed993458ff4aa2e93')
    mesh, _, _, _ = voropy.read(filename)
    run(mesh, 12.273645818711595, [1.0177358705967492, 0.10419690304323895],
        [366.3982135866799, 1.7062353589387327],
        [0.72653362732751214, 0.05350373815413411])

    # assertEqual(mesh.num_delaunay_violations(), 60)

    return
Example #17
0
def test_sphere():
    filename = download_mesh("sphere.vtk", "06b163871cc0f23344d71c990dffe577")
    mesh = meshplex.read(filename)
    run(
        mesh,
        12.273645818711595,
        [1.0177358705967492, 0.10419690304323895],
        [366.3982135866799, 1.7062353589387327],
        [0.72653362732751214, 0.05350373815413411],
    )
def test_signed_volume():
    filename = download_mesh("toy.vtk", "f48abda972822bab224b91a74d695573")
    mesh = meshplex.read(filename)

    vols = meshplex.get_signed_simplex_volumes(mesh.cells["nodes"],
                                               mesh.node_coords)

    assert numpy.all(
        abs(abs(vols) - mesh.cell_volumes) < 1.0e-12 * mesh.cell_volumes)
    return
Example #19
0
def test_signed_area():
    filename = download_mesh("pacman.vtk", "c621cb22f8b87cecd77724c2c0601c36")
    mesh = meshio.read(filename)
    assert numpy.all(numpy.abs(mesh.points[:, 2]) < 1.0e-15)
    X = mesh.points[:, :2]

    mesh = meshplex.MeshTri(X, mesh.get_cells_type("triangle"))

    vols = mesh.signed_cell_areas
    assert numpy.all(
        abs(abs(vols) - mesh.cell_volumes) < 1.0e-12 * mesh.cell_volumes)
Example #20
0
def test_signed_area():
    filename = download_mesh("pacman.msh", "2da8ff96537f844a95a83abb48471b6a")
    mesh = meshio.read(filename)
    assert numpy.all(numpy.abs(mesh.points[:, 2]) < 1.0e-15)
    X = mesh.points[:, :2]

    mesh = meshplex.MeshTri(X, mesh.cells["triangle"])

    vols = mesh.signed_cell_areas
    assert numpy.all(abs(abs(vols) - mesh.cell_volumes) < 1.0e-12 * mesh.cell_volumes)
    return
Example #21
0
def test_pacman():
    filename = download_mesh('pacman.msh', '2da8ff96537f844a95a83abb48471b6a')
    mesh, _, _, _ = voropy.read(filename, flat_cell_correction='boundary')

    run(mesh, 73.64573933105898, [3.5908322974649631, 0.26638548094154707],
        [354.8184824409405, 0.94690319745399243],
        [2.6213234038171014, 0.13841739494523228])

    assert mesh.num_delaunay_violations() == 0

    return
Example #22
0
def test_tetrahedron():
    filename = download_mesh("tetrahedron.msh", "27a5d7e102e6613a1e58629c252cb293")
    mesh, _, _, _ = meshplex.read(filename)

    run(
        mesh,
        64.1500299099584,
        [16.308991595922095, 7.0264329635751395],
        [6.898476155562041, 0.34400453539215237],
        [11.571692332290635, 2.9699087921277054],
    )
    return
Example #23
0
def test_pacman():
    filename = download_mesh("pacman.vtk", "c621cb22f8b87cecd77724c2c0601c36")
    mesh = meshplex.read(filename)

    run(
        mesh,
        73.64573933105898,
        [3.596101914906618, 0.26638548094154696],
        [379.275476266239, 1.2976923100235962],
        [2.6213234038171014, 0.13841739494523228],
    )

    assert mesh.num_delaunay_violations() == 0
def test_tetrahedron():
    filename = download_mesh("tetrahedron.vtk",
                             "10f3ccd1642b634b22741894fe6e7f1f")
    mesh = meshplex.read(filename)

    run(
        mesh,
        64.1500299099584,
        [16.308991595922095, 7.0264329635751395],
        [6.898476155562041, 0.34400453539215237],
        [11.571692332290635, 2.9699087921277054],
    )
    return
Example #25
0
def test_pacman():
    filename = download_mesh("pacman.msh", "2da8ff96537f844a95a83abb48471b6a")
    mesh, _, _, _ = meshplex.read(filename)

    run(
        mesh,
        73.64573933105898,
        [3.596101914906618, 0.26638548094154696],
        [379.275476266239, 1.2976923100235962],
        [2.6213234038171014, 0.13841739494523228],
    )

    assert mesh.num_delaunay_violations() == 0

    return
Example #26
0
def test_update_node_coordinates():
    filename = download_mesh("pacman.vtk", "c621cb22f8b87cecd77724c2c0601c36")
    mesh = meshio.read(filename)
    assert numpy.all(numpy.abs(mesh.points[:, 2]) < 1.0e-15)

    mesh1 = meshplex.MeshTri(mesh.points, mesh.get_cells_type("triangle"))

    numpy.random.seed(123)
    X2 = mesh.points + 1.0e-2 * numpy.random.rand(*mesh.points.shape)
    mesh2 = meshplex.MeshTri(X2, mesh.get_cells_type("triangle"))

    mesh1.node_coords = X2
    mesh1.update_values()

    tol = 1.0e-12
    assert near_equal(mesh1.ei_dot_ej, mesh2.ei_dot_ej, tol)
    assert near_equal(mesh1.cell_volumes, mesh2.cell_volumes, tol)
Example #27
0
def test_update_node_coordinates():
    filename = download_mesh("pacman.msh", "2da8ff96537f844a95a83abb48471b6a")
    mesh = meshio.read(filename)
    assert numpy.all(numpy.abs(mesh.points[:, 2]) < 1.0e-15)

    mesh1 = meshplex.MeshTri(mesh.points, mesh.cells["triangle"])

    numpy.random.seed(123)
    X2 = mesh.points + 1.0e-2 * numpy.random.rand(*mesh.points.shape)
    mesh2 = meshplex.MeshTri(X2, mesh.cells["triangle"])

    mesh1.node_coords = X2
    mesh1.update_values()

    tol = 1.0e-12
    assert near_equal(mesh1.ei_dot_ej, mesh2.ei_dot_ej, tol)
    assert near_equal(mesh1.cell_volumes, mesh2.cell_volumes, tol)
    return
def test_toy_geometric():
    filename = download_mesh("toy.vtk", "f48abda972822bab224b91a74d695573")
    mesh = meshplex.read(filename)

    mesh = meshplex.MeshTetra(mesh.node_coords, mesh.cells["nodes"])

    run(
        mesh,
        volume=9.3875504672601107,
        convol_norms=[0.20175742659663737, 0.0093164692200450819],
        ce_ratio_norms=[13.497977312281323, 0.42980191511570004],
        cellvol_norms=[0.091903119589148916, 0.0019959463063558944],
        tol=1.0e-6,
    )

    cc = mesh.cell_circumcenters
    cc_norm_2 = fsum(cc.flat)
    cc_norm_inf = max(cc.flat)
    assert abs(cc_norm_2 - 1103.7038287583791) < 1.0e-12
    assert abs(cc_norm_inf - 3.4234008596539662) < 1.0e-12
    return
Example #29
0
def pacman():
    filename = download_mesh(
        "pacman.vtk",
        "19a0c0466a4714b057b88e339ab5bd57020a04cdf1d564c86dc4add6")
    mesh = meshio.read(filename)
    return mesh.points[:, :2], mesh.cells["triangle"]
Example #30
0
def test_info():
    input_file = download_mesh(
        "pacman.vtk",
        "19a0c0466a4714b057b88e339ab5bd57020a04cdf1d564c86dc4add6")
    optimesh.cli.info([input_file])
    return