Exemple #1
0
def test_cube():
    points, cells = meshzoo.cube()
    assert len(points) == 1331
    assert len(cells) == 5000

    points, cells = meshzoo.cube(nx=3, ny=3, nz=3)
    assert len(points) == 27
    assert all(numpy.sum(points, axis=0) == [13.5, 13.5, 13.5])
    assert len(cells) == 40
Exemple #2
0
def test_cube():
    points, cells = meshzoo.cube()
    assert len(points) == 1331
    assert len(cells) == 5000

    points, cells = meshzoo.cube(nx=3, ny=3, nz=3)
    assert len(points) == 27
    assert all(numpy.sum(points, axis=0) == [13.5, 13.5, 13.5])
    assert len(cells) == 40
    return
Exemple #3
0
def write(filename, f):
    import meshio
    import meshzoo
    points, cells = meshzoo.cube(-1, +1, -1, +1, -1, +1, 50, 50, 50)
    vals = f(points)
    meshio.write(filename, points, {'tetra': cells}, point_data={'f': vals})
    return
Exemple #4
0
def test():
    class Gamma0(Subdomain):
        def is_inside(self, x):
            return x[1] < 0.5

        is_boundary_only = True

    class Gamma1(Subdomain):
        def is_inside(self, x):
            return x[1] >= 0.5

        is_boundary_only = True

    class Poisson(object):
        def apply(self, u):
            return integrate(lambda x: -n_dot_grad(u(x)), dS) - integrate(
                lambda x: 50 * sin(2 * pi * x[0]), dV)

        def dirichlet(self, u):
            return [(lambda x: u(x) - 0.0, Gamma0()),
                    (lambda x: u(x) - 1.0, Gamma1())]

    # # Read the mesh from file
    # mesh, _, _ = pyfvm.reader.read('circle.vtu')

    # Create mesh using meshzoo
    import meshzoo

    vertices, cells = meshzoo.cube(0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 30, 30, 30)
    mesh = meshplex.MeshTetra(vertices, cells)
    # vertices, cells = meshzoo.rectangle(0.0, 2.0, 0.0, 1.0, 401, 201)
    # mesh = meshplex.MeshTri(vertices, cells)
    print(len(vertices))

    # import mshr
    # import dolfin
    # # h = 2.5e-3
    # h = 1.e-1
    # # cell_size = 2 * pi / num_boundary_points
    # c = mshr.Circle(dolfin.Point(0., 0., 0.), 1, int(2*pi / h))
    # # cell_size = 2 * bounding_box_radius / res
    # m = mshr.generate_mesh(c, 2.0 / h)
    # coords = m.coordinates()
    # coords = numpy.c_[coords, numpy.zeros(len(coords))]
    # cells = m.cells().copy()
    # mesh = meshplex.MeshTri(coords, cells)
    # # mesh = meshplex.lloyd_smoothing(mesh, 1.0e-4)

    matrix, rhs = pyfvm.discretize_linear(Poisson(), mesh)

    # ml = pyamg.smoothed_aggregation_solver(matrix)
    ml = pyamg.ruge_stuben_solver(matrix)
    u = ml.solve(rhs, tol=1e-10)
    # from scipy.sparse import linalg
    # u = linalg.spsolve(matrix, rhs)

    mesh.write("out.vtk", point_data={"u": u})
    return
def test():
    class Gamma0(Subdomain):
        def is_inside(self, x):
            return x[1] < 0.5

        is_boundary_only = True

    class Gamma1(Subdomain):
        def is_inside(self, x):
            return x[1] >= 0.5

        is_boundary_only = True

    class Poisson(object):
        def apply(self, u):
            return integrate(lambda x: -n_dot_grad(u(x)), dS) - integrate(
                lambda x: 50 * sin(2 * pi * x[0]), dV
            )

        def dirichlet(self, u):
            return [(lambda x: u(x) - 0.0, Gamma0()), (lambda x: u(x) - 1.0, Gamma1())]

    # # Read the mesh from file
    # mesh, _, _ = pyfvm.reader.read('circle.vtu')

    # Create mesh using meshzoo
    import meshzoo

    vertices, cells = meshzoo.cube(0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 30, 30, 30)
    mesh = meshplex.MeshTetra(vertices, cells)
    # vertices, cells = meshzoo.rectangle(0.0, 2.0, 0.0, 1.0, 401, 201)
    # mesh = meshplex.MeshTri(vertices, cells)
    print(len(vertices))

    # import mshr
    # import dolfin
    # # h = 2.5e-3
    # h = 1.e-1
    # # cell_size = 2 * pi / num_boundary_points
    # c = mshr.Circle(dolfin.Point(0., 0., 0.), 1, int(2*pi / h))
    # # cell_size = 2 * bounding_box_radius / res
    # m = mshr.generate_mesh(c, 2.0 / h)
    # coords = m.coordinates()
    # coords = numpy.c_[coords, numpy.zeros(len(coords))]
    # cells = m.cells().copy()
    # mesh = meshplex.MeshTri(coords, cells)
    # # mesh = meshplex.lloyd_smoothing(mesh, 1.0e-4)

    matrix, rhs = pyfvm.discretize_linear(Poisson(), mesh)

    # ml = pyamg.smoothed_aggregation_solver(matrix)
    ml = pyamg.ruge_stuben_solver(matrix)
    u = ml.solve(rhs, tol=1e-10)
    # from scipy.sparse import linalg
    # u = linalg.spsolve(matrix, rhs)

    mesh.write("out.vtk", point_data={"u": u})
    return
Exemple #6
0
def show_srgb_gamut(colorspace, filename, n=50, cut_000=False):
    import meshio
    import meshzoo
    points, cells = meshzoo.cube(nx=n, ny=n, nz=n)

    if cut_000:
        # cut off [0, 0, 0] to avoid division by 0 in the xyz conversion
        points = points[1:]
        cells = cells[~numpy.any(cells == 0, axis=1)]
        cells -= 1

    srgb_linear = SrgbLinear()
    pts = colorspace.from_xyz100(srgb_linear.to_xyz100(points.T)).T
    rgb = srgb_linear.to_srgb1(points)
    meshio.write(filename, pts, {'tetra': cells}, point_data={'srgb': rgb})
    return
Exemple #7
0
    def save_hdr_gamut(self, filename, n=50, cut_000=False):
        import meshio
        import meshzoo

        points, cells = meshzoo.cube(nx=n, ny=n, nz=n)

        if cut_000:
            # cut off [0, 0, 0] to avoid division by 0 in the xyz conversion
            points = points[1:]
            cells = cells[~numpy.any(cells == 0, axis=1)]
            cells -= 1

        hdr = HdrLinear()
        pts = self.from_xyz100(hdr.to_xyz100(points.T)).T
        rgb = hdr.to_hdr1(points)
        meshio.write_points_cells(
            filename, pts, {"tetra": cells}, point_data={"hdr-rgb": rgb}
        )
Exemple #8
0
    def save_srgb_gamut(self, filename, n=50, cut_000=False):
        import meshio
        import meshzoo

        points, cells = meshzoo.cube(nx=n, ny=n, nz=n)

        if cut_000:
            # cut off [0, 0, 0] to avoid division by 0 in the xyz conversion
            points = points[1:]
            cells = cells[~numpy.any(cells == 0, axis=1)]
            cells -= 1

        srgb_linear = SrgbLinear()
        pts = self.from_xyz100(srgb_linear.to_xyz100(points.T)).T
        assert pts.shape[1] == 3
        rgb = srgb_linear.to_srgb1(points)
        meshio.write_points_cells(
            filename, pts, {"tetra": cells}, point_data={"srgb": rgb}
        )
Exemple #9
0
def write_tree_3d(filename, n, *args, res=20, alpha=2.0, **kwargs):
    import meshio
    import meshzoo

    points, cells = meshzoo.cube(-alpha, alpha, -alpha, alpha, -alpha, alpha,
                                 res, res, res)

    evaluator = EvalWithDegrees(points.T, *args, **kwargs)
    meshes = []

    corners = numpy.array(
        [[numpy.cos(k * 2 * numpy.pi / 3),
          numpy.sin(k * 2 * numpy.pi / 3)] for k in range(3)])

    for L, (values, degrees) in enumerate(itertools.islice(evaluator, n)):
        for vals, degs in zip(values, degrees):
            offset = sum([corner * d for corner, d in zip(corners, degs)])
            pts = points.copy()
            pts[:, 0] += alpha * 2.0 * offset[0]
            pts[:, 1] += alpha * 2.0 * offset[1]
            pts[:, 2] -= alpha * 3.0 * L
            meshes.append(
                meshio.Mesh(pts, {"tetra": cells}, point_data={"f": vals}))

    # merge meshes
    points = numpy.concatenate([mesh.points for mesh in meshes])
    f_vals = numpy.concatenate([mesh.point_data["f"] for mesh in meshes])
    #
    cells = []
    k = 0
    for mesh in meshes:
        cells.append(mesh.cells[0].data + k)
        k += mesh.points.shape[0]
    cells = numpy.concatenate(cells)

    meshio.write_points_cells(filename,
                              points, {"tetra": cells},
                              point_data={"f": f_vals})
Exemple #10
0
 def get_mesh(self, k):
     n = 2**(k + 1)
     vertices, cells = meshzoo.cube(0.0, 1.0, 0.0, 1.0, 0.0, 1.0, n + 1,
                                    n + 1, n + 1)
     return meshplex.MeshTetra(vertices, cells)
Exemple #11
0
 def get_mesh(self, k):
     n = 2 ** (k + 1)
     vertices, cells = meshzoo.cube(
         0.0, 1.0, 0.0, 1.0, 0.0, 1.0, n + 1, n + 1, n + 1
     )
     return meshplex.MeshTetra(vertices, cells)
Exemple #12
0
            if pp is None:
                plt.show()
            else:
                plt.savefig(pp, format='pdf')
                plt.close()


def testInterpolation2D():
    delta = .1

    n_start = 12
    layers = list(range(3))
    N = [n_start * 2**(l) for l in layers]
    N_fine = N[-1] * 2

    print("Interpolating Linear Function")
    ufunc = lambda x: 3 * x[0] + 4 * x[1]
    mesh_exact = RegMesh2D(delta, N_fine, ufunc)
    pp = PdfPages("testplot.pdf")
    for n in N:
        mesh = RegMesh2D(delta, n, ufunc)
        mesh.plot_ud(pp)
        mesh = RegMesh2D(delta, N_fine, coarseMesh=mesh)
        print("L2 Error: ", l2dist(mesh_exact.ud, mesh.ud))
    pp.close()


if __name__ == "__main__":
    n = 12
    M = meshzoo.cube(-0.1, 1.1, -.1, 1.1, nx=n + 1, ny=n + 1, nz=n + 1)
    print(M)