Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_ball():
s = pygalmesh.Ball([0.0, 0.0, 0.0], 1.0)
mesh = pygalmesh.generate_mesh(s, cell_size=0.2, verbose=False)
assert abs(max(mesh.points[:, 0]) - 1.0) < 0.02
assert abs(min(mesh.points[:, 0]) + 1.0) < 0.02
assert abs(max(mesh.points[:, 1]) - 1.0) < 0.02
assert abs(min(mesh.points[:, 1]) + 1.0) < 0.02
assert abs(max(mesh.points[:, 2]) - 1.0) < 0.02
assert abs(min(mesh.points[:, 2]) + 1.0) < 0.02
vol = sum(helpers.compute_volumes(mesh.points, mesh.cells["tetra"]))
assert abs(vol - 4.0 / 3.0 * numpy.pi) < 0.15
return
def generate_mesh():
"""Generates a fairly large mesh.
"""
# import meshzoo
# points, cells = meshzoo.rectangle(nx=300, ny=300)
# return meshio.Mesh(points, {"triangle": cells})
if os.path.isfile("cache.xdmf"):
mesh = meshio.read("cache.xdmf")
else:
s = pygalmesh.Ball([0, 0, 0], 1.0)
mesh = pygalmesh.generate_mesh(s, cell_size=2.0e-2, verbose=True)
# mesh = pygalmesh.generate_mesh(s, cell_size=1.0e-1, verbose=True)
mesh.cells = {"tetra": mesh.cells["tetra"]}
mesh.point_data = []
mesh.cell_data = {"tetra": {}}
mesh.write("cache.xdmf")
print(mesh)
return mesh
def test_balls_union():
radius = 1.0
displacement = 0.5
s0 = pygalmesh.Ball([displacement, 0, 0], radius)
s1 = pygalmesh.Ball([-displacement, 0, 0], radius)
u = pygalmesh.Union([s0, s1])
a = numpy.sqrt(radius ** 2 - displacement ** 2)
edge_size = 0.1
n = int(2 * numpy.pi * a / edge_size)
circ = [
[0.0, a * numpy.cos(i * 2 * numpy.pi / n), a * numpy.sin(i * 2 * numpy.pi / n)]
for i in range(n)
]
circ.append(circ[0])
mesh = pygalmesh.generate_mesh(
u, feature_edges=[circ], cell_size=0.15, edge_size=edge_size, verbose=False
)
import os
import meshio
import matplotlib.pyplot as plt
import numpy
import pygalmesh
s = pygalmesh.Ball([0, 0, 0], 1.0)
mesh = pygalmesh.generate_mesh(s, cell_size=3.0e-2, verbose=True)
mesh.cells = {"tetra": mesh.cells["tetra"]}
mesh.point_data = {}
mesh.cell_data = {}
print("num points: {}".format(mesh.points.shape[0]))
formats = {
"VTU (binary)": (lambda f, m: meshio.vtu.write(f, m, binary=True), ["out.vtu"]),
"VTU (ASCII)": (lambda f, m: meshio.vtu.write(f, m, binary=False), ["out.vtu"]),
"VTK (binary)": (lambda f, m: meshio.vtk.write(f, m, binary=True), ["out.vtk"]),
"VTK (ASCII)": (lambda f, m: meshio.vtk.write(f, m, binary=False), ["out.vtk"]),
"Gmsh 4.1 (binary)": (
lambda f, m: meshio.gmsh.write(f, m, binary=True),
["out.msh"],
),
def test_sphere():
radius = 1.0
s = pygalmesh.Ball([0.0, 0.0, 0.0], radius)
mesh = pygalmesh.generate_surface_mesh(
s, angle_bound=30, radius_bound=0.1, distance_bound=0.1, verbose=False
)
tol = 1.0e-2
assert abs(max(mesh.points[:, 0]) - radius) < tol
assert abs(min(mesh.points[:, 0]) + radius) < tol
assert abs(max(mesh.points[:, 1]) - radius) < tol
assert abs(min(mesh.points[:, 1]) + radius) < tol
assert abs(max(mesh.points[:, 2]) - radius) < tol
assert abs(min(mesh.points[:, 2]) + radius) < tol
areas = helpers.compute_triangle_areas(mesh.points, mesh.cells["triangle"])
surface_area = sum(areas)
assert abs(surface_area - 4 * numpy.pi * radius ** 2) < 0.1
return
def test_balls_intersection():
radius = 1.0
displacement = 0.5
s0 = pygalmesh.Ball([displacement, 0, 0], radius)
s1 = pygalmesh.Ball([-displacement, 0, 0], radius)
u = pygalmesh.Intersection([s0, s1])
a = numpy.sqrt(radius ** 2 - displacement ** 2)
edge_size = 0.1
n = int(2 * numpy.pi * a / edge_size)
circ = [
[0.0, a * numpy.cos(i * 2 * numpy.pi / n), a * numpy.sin(i * 2 * numpy.pi / n)]
for i in range(n)
]
circ.append(circ[0])
mesh = pygalmesh.generate_mesh(
u, feature_edges=[circ], cell_size=0.15, edge_size=edge_size, verbose=False
)
assert abs(max(mesh.points[:, 0]) - (radius - displacement)) < 0.02
def test_balls_intersection():
radius = 1.0
displacement = 0.5
s0 = pygalmesh.Ball([displacement, 0, 0], radius)
s1 = pygalmesh.Ball([-displacement, 0, 0], radius)
u = pygalmesh.Intersection([s0, s1])
a = numpy.sqrt(radius ** 2 - displacement ** 2)
edge_size = 0.1
n = int(2 * numpy.pi * a / edge_size)
circ = [
[0.0, a * numpy.cos(i * 2 * numpy.pi / n), a * numpy.sin(i * 2 * numpy.pi / n)]
for i in range(n)
]
circ.append(circ[0])
mesh = pygalmesh.generate_mesh(
u, feature_edges=[circ], cell_size=0.15, edge_size=edge_size, verbose=False
)