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()
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,