示例#1
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
示例#2
0
 def customized_mesh(self):
     # node = np.load('WaveMeshNode1.npy')
     # cell = np.load('WaveMeshCell1.npy')
     print('\n')
     print(
         '# --------------------- in CapillaryWaveData code --------------------- #'
     )
     nodename = 'WaveMeshNode1.npy'
     cellname = 'WaveMeshCell1.npy'
     # nodename = 'WaveMeshNode_mat2.npy'
     # cellname = 'WaveMeshCell_mat2.npy'
     node = np.load('./CapillaryWaveMesh/' +
                    nodename)  # WaveMeshNode_mat1 是新构造的网格
     cell = np.load('./CapillaryWaveMesh/' + cellname)
     mesh = TriangleMesh(node, cell)
     print('Mesh-cell-name = %s,  ||  Number-of-mesh-cells = %d' %
           (cellname, mesh.number_of_cells()))
     print(
         '# --------------------------------------------------------------------- #'
     )
     return mesh
示例#3
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)
# # fig = plt.figure()
# # axes = fig.gca()
# # mesh.add_plot(axes)
# # # mesh.find_cell(axes, showindex=True)
# # plt.show()
# # plt.close()

toRefineDomain = [0.03, 0.03]
Nrefine = len(toRefineDomain)
for k in range(Nrefine):
    bc = mesh.cell_barycenter()
    NC = mesh.number_of_cells()
    cellstart = mesh.ds.cellstart
    isMarkedCell = np.zeros(NC + cellstart, dtype=np.bool_)
    cellmeasure = mesh.entity_measure('cell')
    if k == 0:
        current_cell = find_special_refined_cell(mesh, 1. / 24, 0.03)
        isMarkedCell[current_cell + 1] = True
        mesh.refine_triangle_nvb(isMarkedCell)
        node = np.array(mesh.node)
        cell = mesh.ds.cell_to_node()
        mesh = TriangleMesh(node, cell)
        mesh = HalfEdgeMesh2d.from_mesh(mesh, NV=3)
    else:
        isMarkedCell[cellstart:] = abs(bc[:, 1] - 0.) <= toRefineDomain[k]
        mesh.refine_triangle_rg(isMarkedCell)
示例#4
0
    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)

print(b)
print(c)
print(V.number_of_global_dofs())