示例#1
0
    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
示例#2
0
    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
示例#4
0
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
示例#5
0
 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
示例#6
0
 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))
示例#7
0
    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))
示例#8
0
    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))
示例#9
0
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()
示例#10
0
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)
示例#11
0
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',
示例#13
0
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()