Пример #1
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()
Пример #2
0
cell = np.array(
    [
        [1, 2, 0],  # 0
        [3, 0, 2],  # 1
    ],
    dtype=np.int_)

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

node = mesh.entity('node')
cell = mesh.entity('cell')

# 从 cell 出发,构造 edge、edge2cel、cell2edge
NC = mesh.number_of_cells()  #
NEC = 3  # 每个单元有 3 条边
localEdge = np.array(
    [
        [1, 2],  # 局部 0 号边
        [2, 0],  # 局部 1 号边
        [0, 1],  # 局部 2 号边
    ],
    dtype=np.int_)  # (3, 2)
# (NC, 3)---> (NC, 3, 2) --> (3*NC, 2)
totalEdge = cell[:, localEdge].reshape(-1, 2)
stotalEdge = np.sort(totalEdge, axis=-1)

sedge, i0, j = np.unique(stotalEdge,
                         axis=0,
                         return_index=True,