Пример #1
0
    def init_mesh(self, n=0, meshtype='tri'):
        """ generate the initial mesh
        """
        node = np.array([(0, 0), (1, 0), (1, 1), (0, 1)], dtype=np.float)
        cell = np.array([(1, 2, 0), (3, 0, 2)], dtype=np.int)

        mesh = TriangleMesh(node, cell)
        mesh.uniform_refine(2)

        NN = mesh.number_of_nodes()
        node = np.zeros((NN + 3, 2), dtype=np.float64)
        node[:NN] = mesh.entity('node')
        node[NN:] = node[[5], :]
        cell = mesh.entity('cell')

        cell[13][cell[13] == 5] = NN
        cell[18][cell[18] == 5] = NN

        cell[19][cell[19] == 5] = NN + 1
        cell[12][cell[12] == 5] = NN + 1

        cell[6][cell[6] == 5] = NN + 2
        mesh = TriangleMesh(node, cell)
        mesh.uniform_refine(n)
        return mesh
Пример #2
0
    def init_mesh(self, n=2):
        from ..mesh import TriangleMesh
        node = np.array([(0, 0), (1, 0), (1, 1), (0, 1)], dtype=np.float)
        cell = np.array([(1, 2, 0), (3, 0, 2)], dtype=np.int)

        mesh = TriangleMesh(node, cell)
        mesh.uniform_refine(n)

        NN = mesh.number_of_nodes()
        node = np.zeros((NN + 3, 2), dtype=np.float64)
        node[:NN] = mesh.entity('node')
        node[NN:] = node[[5], :]
        cell = mesh.entity('cell')

        cell[13][cell[13] == 5] = NN
        cell[18][cell[18] == 5] = NN

        cell[19][cell[19] == 5] = NN + 1
        cell[12][cell[12] == 5] = NN + 1

        cell[6][cell[6] == 5] = NN + 2

        return TriangleMesh(node, cell)
Пример #3
0
    def refine_triangle_rbTest(self, l, plot=True, rb=True):
        cell = np.array([[0, 1, 2], [0, 2, 3], [1, 4, 5], [2, 1, 5]],
                        dtype=np.int)
        node = np.array([[0, 0], [1, 0], [1, 1], [0, 1], [2, 0], [2, 1]],
                        dtype=np.float)
        mesh = TriangleMesh(node, cell)
        #mesh.uniform_refine()
        mesh = HalfEdgeMesh.from_mesh(mesh)
        mesh.ds.cell2hedge = np.array([0, 3, 2, 11, 10])
        c = np.array([0.2, 0.2])
        r = 1.2
        h = 1e-2
        k = 0
        NB = 0
        start = time.time()
        while k < l:
            halfedge = mesh.ds.halfedge
            halfedge1 = halfedge[:, 3]
            node = mesh.node
            flag = node - c
            flag = flag[:, 0]**2 + flag[:, 1]**2
            flag = flag <= r**2
            flag1 = flag[halfedge[:, 0]].astype(int)
            flag2 = flag[halfedge[halfedge1, 0]].astype(int)
            markedge = flag1 + flag2 == 1
            markedcell = halfedge[markedge, 1]
            markedcell = np.unique(markedcell)
            cell = np.unique(halfedge[:, 1])
            nc = cell.shape[0]
            markedcell1 = np.zeros(nc)
            markedcell1[markedcell] = 1
            if rb:
                mesh.refine_triangle_rb(markedcell1)
            else:
                mesh.refine_triangle_rbg(markedcell1)
            k += 1
            print('循环', k, '次***************************')
            #print('node', node)
            #print('cell',cell)
        end = time.time()
        print(end - start)
        if plot:
            fig = plt.figure()
            axes = fig.gca()
            nindex = mesh.nodedata['level']
            mesh.add_plot(axes)
            #mesh.add_halfedge_plot(axes, showindex=True)
            #mesh.find_node(axes, showindex=True, multiindex=nindex)
            plt.show()
        if 0:
            fig = plt.figure()
            axes = fig.gca()
            mesh.add_plot(axes)
            mesh.find_node(axes, showindex=True)
            mesh.find_cell(axes, showindex=True)

            cindex = np.arange(mesh.number_of_cells() - 1) + 1
            fig = plt.figure()
            axes = fig.gca()
            mesh.add_plot(axes)
            mesh.find_node(axes, showindex=True)
            mesh.find_cell(axes, showindex=True, multiindex=cindex)

            NN = mesh.number_of_nodes()
            nindex = np.zeros(NN, dtype=np.int)
            halfedge = mesh.ds.halfedge
            nindex = mesh.nodedata['level']
            cindex = mesh.get_data('cell', 'level')
            fig = plt.figure()
            axes = fig.gca()
            mesh.add_plot(axes)
            mesh.find_node(axes, showindex=True, multiindex=nindex)
            mesh.find_cell(axes, showindex=True, multiindex=cindex)
            plt.show()
Пример #4
0
from fealpy.mesh import TriangleMesh
domain = MeshInfo()
domain.set_points([(0,0),(1,0),(1,1),(0,1)])
domain.set_facets([(0,1),(1,2),(2,3),(3,0)], facet_markers=[1, 2, 3, 4])
mesh = build(domain, max_volume = 0.1**2, attributes=True)
node = np.array(mesh.points, dtype = np.float)
cell = np.array(mesh.elements, dtype = np.int)
tmesh = TriangleMesh(node, cell)

fig = plt.figure()
axes =  fig.gca()
tmesh.add_plot(axes)

cell = tmesh.entity('cell')
node = tmesh.entity('node')
NN = tmesh.number_of_nodes()
isBdNode = tmesh.ds.boundary_node_flag()

newNode = np.zeros((NN, 2), dtype=np.float)
degree = np.zeros(NN, dtype=np.int)
np.add.at(degree, cell, 1)
for i in range(10):
    #bc = tmesh.entity_barycenter('cell')
    bc, R = tmesh.circumcenter()
    np.add.at(newNode, (cell, np.s_[:]), bc[:, np.newaxis, :])
    newNode /= degree[:, np.newaxis]
    node[~isBdNode] = newNode[~isBdNode]
    newNode[:] = 0

fig = plt.figure()
axes = fig.gca()