def init_mesh(self, n=0, p=None): t = self.CircleCurve.radius c = np.sqrt(3.0) / 2.0 node = np.array( [[0.0, 0.0], [t, 0.0], [t / 2.0, c * t], [-t / 2.0, c * t], [-t, 0.0], [-t / 2.0, -c * t], [t / 2.0, -c * t]], dtype=np.float64) cell = np.array( [[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 6], [0, 6, 1]], dtype=np.int_) mesh = TriangleMesh(node, cell) for i in range(n): NN = mesh.number_of_nodes() mesh.uniform_refine() node = mesh.entity('node') self.CircleCurve.project(node[NN:]) node = mesh.entity('node') cell = mesh.entity('cell') mesh = LagrangeTriangleMesh(node, cell, p=p) isBdNode = mesh.ds.boundary_node_flag() node = mesh.entity('node') bdnode = node[isBdNode] self.CircleCurve.project(bdnode) node[isBdNode] = bdnode return mesh
def customized_mesh(self): # box = self.box # mesh = MF.boxmesh2d(box, nx=10, ny=20, meshtype='tri') # mesh = HalfEdgeMesh2d.from_mesh(mesh, NV=3) # 三角形网格的单边数据结构 cell = np.array( [[0, 1, 3], [4, 3, 1], [4, 1, 5], [2, 5, 1], [6, 3, 7], [4, 7, 3], [4, 5, 7], [8, 7, 5], [6, 7, 9], [10, 9, 7], [10, 7, 11], [8, 11, 7], [12, 9, 13], [10, 13, 9], [10, 11, 13], [14, 13, 11]], dtype=np.int) node = np.array([[0, -1], [0.5, -1], [1, -1], [0, -0.5], [0.5, -0.5], [1, -0.5], [0, 0], [0.5, 0], [1, 0], [0, 0.5], [0.5, 0.5], [1, 0.5], [0, 1], [0.5, 1], [1, 1]], dtype=np.float) mesh = TriangleMesh(node, cell) mesh = HalfEdgeMesh2d.from_mesh(mesh, NV=3) mesh.uniform_refine(2) cm = 1. tt = 0.2 while cm > 0.01 / 2: 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) cm = np.sqrt(np.min(mesh.entity_measure('cell'))) if tt > 0.025: tt = tt / 2. # |--- 下面做一下网格结构的转换, 因为目前 HalfEdgeMesh2d 对 p>1 时有 bug mesh = TriangleMesh(mesh.node, mesh.entity('cell')) return mesh
def space_mesh(self, n=4): point = np.array([(0, 0), (2, 0), (4, 0), (0, 2), (2, 2), (4, 2)], dtype=np.float) cell = np.array([(3, 0, 4), (1, 4, 0), (2, 5, 1), (4, 1, 5)], dtype=np.int) mesh = TriangleMesh(point, cell) mesh.uniform_refine(n) return mesh
def lshape_mesh(r=1): point = np.array([(-1, -1), (0, -1), (-1, 0), (0, 0), (1, 0), (-1, 1), (0, 1), (1, 1)], dtype=np.float) cell = np.array([(0, 1, 3, 2), (2, 3, 6, 5), (3, 4, 7, 6)], dtype=np.int) tmesh = TriangleMesh(point, cell) if r > 0: tmesh.uniform_refine(r) return tmesh
def init_mesh(self, n=4, meshtype='tri'): node = np.array([(-1, -1), (0, -1), (1, -1), (-1, 0), (0, 0), (1, 0), (-1, 1), (0, 1), (1, 1)], dtype=np.float) if meshtype is 'tri': cell = np.array([(1, 4, 0), (3, 0, 4), (4, 1, 5), (2, 5, 1), (4, 7, 3), (6, 3, 7), (7, 4, 8), (5, 8, 4)], dtype=np.int) mesh = TriangleMesh(node, cell) mesh.uniform_refine(n) elif meshtype is 'quadtree': cell = np.array([(0, 1, 4, 3), (1, 2, 5, 4), (3, 4, 7, 6), (4, 5, 8, 7)], dtype=np.int) mesh = Quadtree(node, cell) mesh.uniform_refine(n) else: raise ValueError("".format) return mesh
def init_mesh(self, n=4, meshtype='tri'): node = np.array([(-1, -1), (0, -1), (-1, 0), (0, 0), (1, 0), (-1, 1), (0, 1), (1, 1)], dtype=np.float64) if meshtype == 'tri': cell = np.array([(1, 3, 0), (2, 0, 3), (3, 6, 2), (5, 2, 6), (4, 7, 3), (6, 3, 7)], dtype=np.int_) mesh = TriangleMesh(node, cell) mesh.uniform_refine(n) return mesh elif meshtype == 'quadtree': cell = np.array([(0, 1, 3, 2), (2, 3, 6, 5), (3, 4, 7, 6)], dtype=np.int_) mesh = Quadtree(node, cell) mesh.uniform_refine(n) return mesh elif meshtype == 'tritree': cell = np.array([(1, 3, 0), (2, 0, 3), (3, 6, 2), (5, 2, 6), (4, 7, 3), (6, 3, 7)], dtype=np.int_) mesh = TriangleMesh(node, cell) mesh.uniform_refine(n) node = mesh.entity('node') cell = mesh.entity('cell') mesh = Tritree(node, cell) return mesh else: raise ValueError("I don't know the meshtype %s".format(meshtype))
def init_mesh(self, n=1, meshtype='tri'): node = np.array([(0, 0), (1, 0), (1, 1), (0, 1)], dtype=np.float) if meshtype is 'tri': cell = np.array([(1, 2, 0), (3, 0, 2)], dtype=np.int) mesh = TriangleMesh(node, cell) mesh.uniform_refine(n) return mesh elif meshtype is 'quadtree': cell = np.array([(0, 1, 2, 3)], dtype=np.int) mesh = Quadtree(node, cell) mesh.uniform_refine(n) return mesh elif meshtype is 'tritree': cell = np.array([(1, 2, 0), (3, 0, 2)], dtype=np.int) mesh = Tritree(node, cell) mesh.uniform_refine(n) return mesh else: raise ValueError("I don't know the meshtype %s".format(meshtype))
def init_mesh(self, n=4, meshtype='tri'): if meshtype == 'tri': node = np.array([(0, -1), (-1, 0), (0, 0), (1, 0), (1, 0), (0, 1)], dtype=np.float64) cell = np.array([(2, 1, 0), (2, 0, 3), (2, 5, 1), (2, 4, 5)], dtype=np.int_) mesh = TriangleMesh(node, cell) mesh.uniform_refine(n) return mesh elif meshtype == 'quadtree': r = 1 - 2**(1 / 2) / 2 a = 1 / 2 - 2**(1 / 2) / 2 rr = 1 / 2 node = np.array([(0, -1), (-rr, -rr), (rr, -rr), (-r, -r), (0, -r), (r, -r), (-1, 0), (-r, 0), (0, 0), (r, 0), (1, 0), (r, 0), (-r, r), (0, r), (r, r), (-rr, rr), (rr, rr), (0, 1)], dtype=np.float64) cell = np.array([(0, 4, 3, 1), (2, 5, 4, 0), (1, 3, 7, 6), (3, 4, 8, 7), (4, 5, 9, 8), (5, 2, 10, 9), (6, 7, 12, 15), (7, 8, 13, 12), (8, 11, 14, 13), (11, 10, 16, 14), (12, 13, 17, 15), (13, 14, 16, 17)], dtype=np.int_) mesh = Quadtree(node, cell) mesh.uniform_refine(n) return mesh elif meshtype == 'tritree': node = np.array([(0, -1), (-1, 0), (0, 0), (1, 0), (1, 0), (0, 1)], dtype=np.float64) cell = np.array([(2, 1, 0), (2, 0, 3), (2, 5, 1), (2, 4, 5)], dtype=np.int_) mesh = Tritree(node, cell) mesh.uniform_refine(n) return mesh else: raise ValueError("I don't know the meshtype %s".format(meshtype))
verts3 = np.array([ [0.004, 0.025], [0.004, 0.035] ]) segs3 = np.array([[0, 1]], dtype=np.int32) m3= np.array([[4]]) verts = np.concatenate([verts0, verts1, verts2, verts3], axis=0) segs = np.concatenate([segs0, segs1+4, segs2+8, segs3+12], axis=0) marker = np.concatenate([m0, m1, m2, m3], axis=0) plsg = {'segments':segs, 'vertices':verts, 'segment_markers':marker} t = triangle.triangulate(plsg, 'pq30a0.000004') tmesh = TriangleMesh(t['vertices'], t['triangles']) tmesh.uniform_refine() data = { 'node':tmesh.point, 'elem':tmesh.ds.cell + 1, 'node_marker': t['vertex_markers'] } sio.matlab.savemat('trimesh', data) #plot.plot(plt.axes(), **t) #plt.show() fig = plt.figure() axes = fig.gca() tmesh.add_plot(axes) plt.show()
from fealpy.mesh.TriangleMesh import TriangleMesh from fealpy.mesh.Tritree import Tritree 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(1) node = mesh.entity('node') cell = mesh.entity('cell') tmesh = Tritree(node, cell) isLeafCell = tmesh.is_leaf_cell() flag = (np.sum(cell == 0, axis=1) == 5) & isLeafCell idx, = np.where(flag) for i in range(2): tmesh.refine(idx) tmesh.coarsen(idx) fig = plt.figure() axes = fig.gca() tmesh.add_plot(axes) #tmesh.find_node(axes, showindex=True) #tmesh.find_edge(axes, showindex=True) #tmesh.find_cell(axes, showindex=True)
def f2(m): x = m[..., 0] y = m[..., 1] val = np.zeros(m.shape, dtype=np.float) val[..., 0] = 3 * np.exp(x**2 + y**2) val[..., 1] = 3 * np.exp(x**2 + y**2) return val 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) p = 0 mesh = TriangleMesh(node, cell) mesh.uniform_refine() node = mesh.entity('node') cell = mesh.entity('cell') NC = mesh.number_of_cells() bc = mesh.entity_barycenter('cell') if p == 0: integrator = mesh.integrator(1) else: integrator = mesh.integrator(p + 2) cellmeasure = mesh.entity_measure('cell') V = VectorLagrangeFiniteElementSpace(mesh, p, spacetype='D') b = V.source_vector(f2, integrator, cellmeasure) c = V.scalarspace.source_vector(f1, integrator, cellmeasure)
from fealpy.mesh.mesh_tools import find_entity import matplotlib.pyplot as plt # init settings n = 1 # refine times p = 2 # polynomial order of FEM space # q = p + 1 # integration order q = 2 + 1 # integration order node = np.array([(0, 0), (1, 0), (1, 1), (0, 1)], dtype=np.float) # ---- tri mesh ---- cell = np.array([(1, 2, 0), (3, 0, 2)], dtype=np.int) # tri mesh mesh = TriangleMesh(node, cell) mesh.uniform_refine(n) # ------------------ # # ---- quad mesh ---- # cell = np.array([(0, 1, 2, 3)], dtype=np.int) # quad mesh # # mesh = Quadtree(node, cell) # mesh = QuadrangleMesh(node, cell) # mesh.uniform_refine(n) # # ------------------- fig = plt.figure() axes = fig.gca() mesh.add_plot(axes, cellcolor='w') find_entity(axes, mesh, entity='cell',
import numpy as np import matplotlib.pyplot as plt from fealpy.mesh.TriangleMesh import TriangleMesh from fealpy.mesh.Tritree import Tritree 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(0) node = mesh.entity('node') cell = mesh.entity('cell') fig = plt.figure() axes = fig.gca() mesh.add_plot(axes) #mesh.find_node(axes, showindex=True) #mesh.find_edge(axes, showindex=True) #mesh.find_cell(axes, showindex=True) tmesh = Tritree(node, cell) ismarkedcell = np.array([True, False]) tmesh.refine(ismarkedcell) fig = plt.figure() axes = fig.gca() tmesh.add_plot(axes) pmesh = tmesh.to_conformmesh() fig = plt.figure() axes = fig.gca()