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
def test_show_vertex(): filename = download_mesh("pacman-optimized.vtk", "5036d9ce5307caa0d9de80cba7ba1c4c") mesh = meshplex.read(filename) # mesh.plot_vertex(125) mesh.show_vertex(125) return
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
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
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
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
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
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
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
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
def test_pacman(self): filename = download_mesh( 'pacman.msh', '2da8ff96537f844a95a83abb48471b6a' ) mesh, _, _, _ = voropy.read(filename) self._run_test(mesh) return
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
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))
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
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
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
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
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)
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
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
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
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
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
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)
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
def pacman(): filename = download_mesh( "pacman.vtk", "19a0c0466a4714b057b88e339ab5bd57020a04cdf1d564c86dc4add6") mesh = meshio.read(filename) return mesh.points[:, :2], mesh.cells["triangle"]
def test_info(): input_file = download_mesh( "pacman.vtk", "19a0c0466a4714b057b88e339ab5bd57020a04cdf1d564c86dc4add6") optimesh.cli.info([input_file]) return