mesh = TriangleMesh(node, cell) NN = mesh.number_of_nodes() NE = mesh.number_of_edges() NC = mesh.number_of_cells() node = mesh.entity('node') edge = mesh.entity('edge') cell = mesh.entity('cell') ebc = mesh.entity_barycenter('edge') cbc = mesh.entity_barycenter('cell') area = mesh.entity_measure('cell') eh = mesh.entity_measure('edge') cell2node = mesh.ds.cell_to_node() # cell cell2edge = mesh.ds.cell_to_edge() # (NC, 3) cell2cell = mesh.ds.cell_to_cell() # (NC, 3) edge2cell = mesh.ds.edge_to_cell() # (NE, 4) edge2node = mesh.ds.edge_to_node() # edge edge2edge = mesh.ds.edge_to_edge() # sparse, (NE, NE) node2cell = mesh.ds.node_to_cell() # sparse, (NN, NC) node2edge = mesh.ds.node_to_edge() # sparse, (NN, NE) node2node = mesh.ds.node_to_node() # sparse, (NN, NN) isBdNode = mesh.ds.boundary_node_flag() # (NN, ), bool
from fealpy.mesh import TriangleMesh from fealpy.mesh.simple_mesh_generator import distmesh2d from fealpy.mesh.level_set_function import drectangle import triangle as tri from scipy.spatial import Delaunay box = [0, 1, 0, 1] pfix = np.array([[0.0, 0.0], [1.0, 0.0], [1.0, 1.0], [0.0, 1.0]], dtype=np.float) fd = lambda p: drectangle(p, box) bbox = [-0.1, 1.1, -0.1, 1.1] pmesh = distmesh2d(fd, 0.01, box, pfix, meshtype='polygon') fig = plt.figure() axes = fig.gca() pmesh.add_plot(axes) node = pmesh.entity('node') t = Delaunay(node) tmesh = TriangleMesh(node, t.simplices.copy()) area = tmesh.entity_measure('cell') tmesh.delete_cell(area < 1e-8) area = tmesh.entity_measure('cell') fig = plt.figure() axes = fig.gca() tmesh.add_plot(axes) plt.show()
bc = mesh.cell_barycenter() NC = mesh.number_of_cells() cellstart = mesh.ds.cellstart isMarkedCell = np.zeros(NC + cellstart, dtype=np.bool_) isMarkedCell[cellstart:] = abs(bc[:, 1] - 0.) < tt mesh.refine_triangle_rg(isMarkedCell) # if k < 2: # mesh.uniform_refine(1) # bc = mesh.cell_barycenter() # NC = mesh.number_of_cells() # cellstart = mesh.ds.cellstart # isMarkedCell = np.zeros(NC + cellstart, dtype=np.bool_) # isMarkedCell[cellstart:] = (abs(bc[:, 1] - 0.) < tt) & (abs(bc[:, 0] - 0.5) < tt/4) # mesh.refine_triangle_rg(isMarkedCell) fig = plt.figure() axes = fig.gca() mesh.add_plot(axes) # mesh.find_cell(axes, showindex=True) plt.show() plt.close() k += 1 print('|--- k = %d ---|' % k) cm = np.sqrt(np.min(mesh.entity_measure('cell'))) if tt > 0.025: tt = tt / 2. print('end of the file')