示例#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
示例#3
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))
示例#4
0
        flag = (np.sum(cell == 0, axis=1) == 1) & isLeafCell
        idx, = np.where(flag)
        return idx

    def coarsen_marker(self, qtmesh):
        pass


node = np.array([(0, 0.5), (0.865, 0), (1.73, 0.5), (0.865, 1)],
                dtype=np.float)
cell = np.array([(1, 2, 3), (3, 0, 1)], dtype=np.int)

tmesh = TriangleMesh(node, cell)
tmesh.uniform_refine(0)

node = tmesh.entity('node')
cell = tmesh.entity('cell')
tritree = Tritree(node, cell, irule=1)
marker = AdaptiveMarker()

for i in range(1):
    tritree.refine(marker)

a = np.array([2, 4], dtype=np.int)
fig = plt.figure()
axes = fig.gca()
tritree.add_plot(axes)
#tritree.find_node(axes, showindex=True)
tritree.find_cell(axes, index=a)
#tritree.find_edge(axes, showindex=True)
plt.show()
示例#5
0
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)
plt.show()
示例#6
0
import sys

import numpy as np

import matplotlib.pyplot as plt

from fealpy.mesh.TriangleMesh import TriangleMesh, TriangleMeshDataStructure

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)

tmesh = TriangleMesh(node, cell)
tmesh.uniform_refine(1)
node = tmesh.node
cell = tmesh.entity('cell')
print(tmesh.ds.node_to_cell())
N = node.shape[0]
tmeshstrcture = TriangleMeshDataStructure(N, cell)
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)
plt.show()