def project_test(self, u, p=2, mtype=0, plot=True):
        from fealpy.mesh.simple_mesh_generator import triangle
        if mtype == 0:
            node = np.array([(-1, -1), (1, -1), (1, 1), (-1, 1)],
                            dtype=np.float)
            cell = np.array([0, 1, 2, 3], dtype=np.int)
            cellLocation = np.array([0, 4], dtype=np.int)
            mesh = PolygonMesh(node, cell, cellLocation)
        elif mtype == 1:
            node = np.array([(-1, -1), (1, -1), (1, 1), (-1, 1)],
                            dtype=np.float)
            cell = np.array([0, 1, 2, 3, 0, 2], dtype=np.int)
            cellLocation = np.array([0, 3, 6], dtype=np.int)
            mesh = PolygonMesh(node, cell, cellLocation)
        elif mtype == 2:
            h = 0.025
            mesh = triangle([-1, 1, -1, 1], h, meshtype='polygon')
        elif mtype == 3:
            node = np.array([(-1, -1), (1, -1), (1, 1), (-1, 1)],
                            dtype=np.float)
            cell = np.array([[0, 1, 2, 3]], dtype=np.int)
            mesh = QuadrangleMesh(node, cell)
            mesh.uniform_refine()
            mesh = PolygonMesh.from_mesh(mesh)
        elif mtype == 4:
            node = np.array([(-1, -1), (1, -1), (1, 0), (1, 1), (-1, 1),
                             (-1, 0)],
                            dtype=np.float)
            cell = np.array([0, 1, 2, 5, 2, 3, 4, 5], dtype=np.int)
            cellLocation = np.array([0, 4, 8], dtype=np.int)
            mesh = PolygonMesh(node, cell, cellLocation)

        if True:
            cell, cellLocation = mesh.entity('cell')
            edge = mesh.entity('edge')
            cell2edge = mesh.ds.cell_to_edge()
            bc = mesh.entity_barycenter('edge')
            uspace = ReducedDivFreeNonConformingVirtualElementSpace2d(mesh, p)
            up = uspace.project(u)
            up = uspace.project_to_smspace(up)
            print(up)

            integralalg = uspace.integralalg
            error = integralalg.L2_error(u, up)
            print(error)

            A = uspace.matrix_A()
            P = uspace.matrix_P()

            sio.savemat('A.mat', {"A": A.toarray(), "P": P.toarray()})

        if plot:
            mesh.print()
            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)
            plt.show()
コード例 #2
0
    def cell_to_node(self):
        node = np.array([(0.0, 0.0), (0.0, 1.0), (0.0, 2.0), (1.0, 0.0),
                         (1.0, 1.0), (1.0, 2.0), (2.0, 0.0), (2.0, 1.0),
                         (2.0, 2.0)],
                        dtype=np.float)
        cell = np.array([0, 3, 4, 4, 1, 0, 1, 4, 5, 2, 3, 6, 7, 4, 4, 7, 8, 5],
                        dtype=np.int)
        cellLocation = np.array([0, 3, 6, 10, 14, 18], dtype=np.int)

        print('node:', node)
        print('cell:', cell)
        print('cellLocation:', cellLocation)
        mesh = PolygonMesh(node, cell, cellLocation)

        fig = plt.figure()
        axes = fig.gca()
        mesh.add_plot(axes)
        mesh.find_node(axes, showindex=True)
        mesh.find_cell(axes, showindex=True)

        mesh = HalfEdgeMesh2d.from_mesh(mesh)
        mesh.print()
        cell, cellLocation = mesh.entity('cell')
        print('cell:', cell)
        print('cellLocation:', cellLocation)
        plt.show()
コード例 #3
0
    def edge_to_cell_test(self, plot=True):
        node = np.array([(0.0, 0.0), (0.0, 1.0), (0.0, 2.0), (1.0, 0.0),
                         (1.0, 1.0), (1.0, 2.0), (2.0, 0.0), (2.0, 1.0),
                         (2.0, 2.0)],
                        dtype=np.float)
        cell = np.array([0, 3, 4, 4, 1, 0, 1, 4, 5, 2, 3, 6, 7, 4, 4, 7, 8, 5],
                        dtype=np.int)
        cellLocation = np.array([0, 3, 6, 10, 14, 18], dtype=np.int)

        mesh = PolygonMesh(node, cell, cellLocation)
        mesh = HalfEdgePolygonMesh.from_polygonmesh(mesh)

        NE = mesh.number_of_edges()
        edge = mesh.entity('edge')
        edge2cell = mesh.ds.edge_to_cell()
        print('edge:')
        for i in range(NE):
            print(i, ":", edge[i], edge2cell[i])

        NC = mesh.number_of_cells()
        cell, cellLocation = mesh.entity('cell')
        cell2edge = mesh.ds.cell_to_edge()
        for i in range(NC):
            print(i, ":", cell[cellLocation[i]:cellLocation[i + 1]])
            print(i, ":", cell2edge[cellLocation[i]:cellLocation[i + 1]])

        if plot:
            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)
            plt.show()
コード例 #4
0
    def boundary_edge_to_edge_test(self, plot=True):

        node = np.array([(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 1.0)],
                        dtype=np.float)
        cell = np.array([0, 1, 2, 3], dtype=np.int)
        cellLocation = np.array([0, 4], dtype=np.int)
        mesh = PolygonMesh(node, cell, cellLocation)
        mesh.ds.boundary_edge_to_edge()
        if plot:
            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)
            plt.show()
コード例 #5
0
    def project_test(self, u, p=2, mtype=0, plot=True):
        from fealpy.mesh.simple_mesh_generator import triangle

        if mtype == 0:
            node = np.array([(-1, -1), (1, -1), (1, 1), (-1, 1)],
                            dtype=np.float)
            cell = np.array([0, 1, 2, 3], dtype=np.int)
            cellLocation = np.array([0, 4], dtype=np.int)
            mesh = PolygonMesh(node, cell, cellLocation)
        elif mtype == 1:
            node = np.array([(-1, -1), (1, -1), (1, 1), (-1, 1)],
                            dtype=np.float)
            cell = np.array([0, 1, 2, 3, 0, 2], dtype=np.int)
            cellLocation = np.array([0, 3, 6], dtype=np.int)
            mesh = PolygonMesh(node, cell, cellLocation)
        elif mtype == 2:
            h = 0.1
            mesh = triangle([-1, 1, -1, 1], h, meshtype='polygon')
        elif mtype == 3:
            node = np.array([(-1, -1), (1, -1), (1, 1), (-1, 1)],
                            dtype=np.float)
            cell = np.array([[0, 1, 2, 3]], dtype=np.int)
            mesh = QuadrangleMesh(node, cell)
            mesh.uniform_refine()
            mesh = PolygonMesh.from_mesh(mesh)

        cell, cellLocation = mesh.entity('cell')
        edge = mesh.entity('edge')
        cell2edge = mesh.ds.cell_to_edge()
        uspace = DivFreeNonConformingVirtualElementSpace2d(mesh, p)
        up = uspace.project(u)
        print(up)
        up = uspace.project_to_smspace(up)
        print(up)

        integralalg = uspace.integralalg
        error = integralalg.L2_error(u, up)
        print(error)
        if plot:
            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)
            plt.show()
コード例 #6
0
ファイル: HalfEdgeMesh2dTest.py プロジェクト: OVGULIU/fealpy
    def convexity(self):
        node = np.array([[0, 0], [2, 0], [2, 1], [1, 1], [1, 2], [1, 3],
                         [1, 4], [2, 4], [2, 5], [0, 5], [0, 2]],
                        dtype=np.float)
        cell = np.array([0, 1, 2, 3, 4, 10, 5, 6, 7, 8, 9, 10, 4],
                        dtype=np.int_)
        cellLocation = np.array([0, 6, 13], dtype=np.int)

        mesh = PolygonMesh(node, cell, cellLocation)
        mesh = HalfEdgeMesh2d.from_mesh(mesh)

        mesh.print()
        fig = plt.figure()
        axes = fig.gca()
        mesh.add_plot(axes)
        mesh.find_node(axes, showindex=True)
        mesh.find_cell(axes, showindex=True)
        mesh.add_halfedge_plot(axes, showindex=True)
        plt.show()
コード例 #7
0
    def refine_test(self, plot=True):
        node = np.array([(0.0, 0.0), (0.0, 1.0), (0.0, 2.0), (1.0, 0.0),
                         (1.0, 1.0), (1.0, 2.0), (2.0, 0.0), (2.0, 1.0),
                         (2.0, 2.0)],
                        dtype=np.float)
        cell = np.array([0, 3, 4, 4, 1, 0, 1, 4, 5, 2, 3, 6, 7, 4, 4, 7, 8, 5],
                        dtype=np.int)
        cellLocation = np.array([0, 3, 6, 10, 14, 18], dtype=np.int)

        mesh = PolygonMesh(node, cell, cellLocation)
        mesh = HalfEdgePolygonMesh.from_polygonmesh(mesh)
        isMarkedCell = np.zeros(5, dtype=np.bool)
        isMarkedCell[-1] = True
        isMarkedCell[-2] = True
        mesh.refine(isMarkedCell)

        if True:
            NC = mesh.number_of_cells()
            isMarkedCell = np.zeros(NC, dtype=np.bool)
            isMarkedCell[2] = True
            mesh.refine(isMarkedCell)

        if True:
            NC = mesh.number_of_cells()
            isMarkedCell = np.zeros(NC, dtype=np.bool)
            isMarkedCell[1] = True
            mesh.refine(isMarkedCell)

        if True:
            NC = mesh.number_of_cells()
            isMarkedCell = np.zeros(NC, dtype=np.bool)
            isMarkedCell[13] = True
            mesh.refine(isMarkedCell)

        if plot:
            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)
            plt.show()
コード例 #8
0
    def from_polygonmesh_test(self, plot=True):
        node = np.array([(0.0, 0.0), (0.0, 1.0), (0.0, 2.0), (1.0, 0.0),
                         (1.0, 1.0), (1.0, 2.0), (2.0, 0.0), (2.0, 1.0),
                         (2.0, 2.0)],
                        dtype=np.float)
        cell = np.array([0, 3, 4, 4, 1, 0, 1, 4, 5, 2, 3, 6, 7, 4, 4, 7, 8, 5],
                        dtype=np.int)
        cellLocation = np.array([0, 3, 6, 10, 14, 18], dtype=np.int)

        mesh = PolygonMesh(node, cell, cellLocation)
        a = mesh.entity_measure('cell')

        mesh = HalfEdgePolygonMesh.from_polygonmesh(mesh)
        a = mesh.entity_measure('cell')
        mesh.print()

        if plot:
            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)
            plt.show()
コード例 #9
0
    def refine_with_flag_test(self, plot=True):
        node = np.array([(0.0, 0.0), (0.0, 1.0), (0.0, 2.0), (1.0, 0.0),
                         (1.0, 1.0), (1.0, 2.0), (2.0, 0.0), (2.0, 1.0),
                         (2.0, 2.0)],
                        dtype=np.float)
        cell = np.array([0, 3, 4, 4, 1, 0, 1, 4, 5, 2, 3, 6, 7, 4, 4, 7, 8, 5],
                        dtype=np.int)
        cellLocation = np.array([0, 3, 6, 10, 14, 18], dtype=np.int)

        mesh = PolygonMesh(node, cell, cellLocation)
        mesh = HalfEdgePolygonMesh.from_polygonmesh(mesh)

        NE = mesh.number_of_edges()
        NC = mesh.number_of_cells()

        name = 'rflag'
        val = np.zeros(2 * NE, dtype=np.int)
        mesh.set_data(name, val, 'halfedge')

        isMarkedCell = np.zeros(NC + 1, dtype=np.bool)
        isMarkedCell[2] = True
        mesh.refine_with_flag(isMarkedCell, rflag=name, dflag=False)

        NC = mesh.number_of_cells()
        isMarkedCell = np.zeros(NC + 1, dtype=np.bool)
        isMarkedCell[6] = True
        mesh.refine_with_flag(isMarkedCell, rflag=name, dflag=False)

        if True:
            NC = mesh.number_of_cells()
            isMarkedCell = np.zeros(NC + 1, dtype=np.bool)
            isMarkedCell[3] = True
            mesh.refine_with_flag(isMarkedCell, rflag=name, dflag=False)

        if True:
            NC = mesh.number_of_cells()
            isMarkedCell = np.zeros(NC + 1, dtype=np.bool)
            isMarkedCell[1] = True
            mesh.refine_with_flag(isMarkedCell, rflag=name, dflag=False)

        if True:
            NC = mesh.number_of_cells()
            isMarkedCell = np.zeros(NC + 1, dtype=np.bool)
            isMarkedCell[5] = True
            isMarkedCell[13] = True
            mesh.refine_with_flag(isMarkedCell, rflag=name, dflag=False)
        if True:
            NC = mesh.number_of_cells()
            isMarkedCell = np.zeros(NC + 1, dtype=np.bool)
            isMarkedCell[0] = True
            isMarkedCell[1] = True
            mesh.refine_with_flag(isMarkedCell, rflag=name, dflag=False)

        print("rflag:\n")
        for i, val in enumerate(mesh.halfedgedata[name]):
            print(i, ':', val, mesh.ds.halfedge[i, 0:2])

        if plot:
            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)
            plt.show()
コード例 #10
0
node = np.array([ (0, 0), (1, 0), (1, 1), (0, 1)], dtype=np.float)
cell = np.array([0, 1, 2, 3], dtype=np.int)
cellLocation = np.array([0, 4], dtype=np.int)

pmesh = PolygonMesh(node, cell, cellLocation)

space = VectorScaledMonomialSpace2d(pmesh, p)

phi = space.basis(point)
print('phi', phi)
gphi = space.grad_basis(point)
print('gphi', gphi)
dphi = space.div_basis(point)
print('dphi', dphi)
gdphi = space.grad_div_basis(point)
print('gdphi', gdphi)
sphi = space.strain_basis(point)
print('sphi', sphi)
dsphi = space.div_strain_basis(point)
print('dsphi', dsphi)


fig = plt.figure()
axes = fig.gca()
pmesh.add_plot(axes)
pmesh.find_node(axes, showindex=True)
pmesh.find_edge(axes, showindex=True)
pmesh.find_cell(axes, showindex=True)
plt.show()
コード例 #11
0
                dtype=np.float)

cell = np.array([0, 1, 2, 3], dtype=np.int)
cellLocation = np.array([0, 4], dtype=np.int)
mesh = PolygonMesh(node, cell, cellLocation)
qf = mesh.integrator(7)

space = NonConformingVirtualElementSpace2d(mesh, p=2)
print("Cell2dof:\n", space.cell_to_dof())
print("Interpolation points:\n", space.interpolation_points())
print("H:\n", space.H)
print("D:\n", space.D)
print("G:\n", space.G)
print("B:\n", space.B)

integralalg = PolygonMeshIntegralAlg(qf,
                                     mesh,
                                     barycenter=space.smspace.barycenter)
G = space.matrix_G_test(integralalg)
print("G:\n", G)

fig = plt.figure()
axes = fig.gca()
mesh.add_plot(axes)
mesh.find_node(axes, showindex=True)
mesh.find_node(axes,
               node=space.interpolation_points(),
               showindex=True,
               color='b')
plt.show()
コード例 #12
0
ファイル: HalfEdgeMeshTest.py プロジェクト: zweien/fealpy
    def adaptive_poly_test(self, plot=True):
        """"
        initial mesh
        """
        node = np.array([(0.0, 0.0), (0.0, 1.0), (0.0, 2.0), (1.0, 0.0),
                         (1.0, 1.0), (1.0, 2.0), (2.0, 0.0), (2.0, 1.0),
                         (2.0, 2.0)],
                        dtype=np.float)
        cell = np.array([0, 3, 4, 4, 1, 0, 1, 4, 5, 2, 3, 6, 7, 4, 4, 7, 8, 5],
                        dtype=np.int)
        cellLocation = np.array([0, 3, 6, 10, 14, 18], dtype=np.int)

        mesh = PolygonMesh(node, cell, cellLocation)
        mesh = HalfEdgeMesh.from_mesh(mesh)

        fig = plt.figure()
        axes = fig.gca()
        mesh.add_plot(axes)
        mesh.find_node(axes, showindex=True)
        mesh.find_cell(axes, showindex=True)

        NE = mesh.number_of_edges()
        nC = mesh.number_of_cells()
        """
        refined mesh
        """
        aopts = mesh.adaptive_options(method='numrefine',
                                      maxcoarsen=3,
                                      HB=True)
        eta = [0, 0, 1, 1, 1]

        mesh.adaptive(eta, aopts)
        print('r', aopts['HB'])

        fig = plt.figure()
        axes = fig.gca()
        mesh.add_plot(axes)
        mesh.find_node(axes, showindex=True)
        mesh.find_cell(axes, showindex=True)
        plt.show()

        mesh.from_mesh(mesh)
        """
        coarsened mesh
        """
        eta = [0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1]
        #eta = [0,0,0,0,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2]

        mesh.adaptive(eta, aopts)

        fig = plt.figure()
        axes = fig.gca()
        mesh.add_plot(axes)
        mesh.find_node(axes, showindex=True)
        mesh.find_cell(axes, showindex=True)
        plt.show()

        if plot:

            fig = plt.figure()
            axes = fig.gca()
            mesh.add_plot(axes)
            mesh.find_node(axes, showindex=True)
            mesh.find_cell(axes, showindex=True)

            NAC = mesh.number_of_all_cells()  # 包括外部区域和洞
            cindex = range(mesh.ds.cellstart, NAC)
            fig = plt.figure()
            axes = fig.gca()
            mesh.add_plot(axes)
            mesh.find_node(axes, showindex=True)
            mesh.find_cell(axes, showindex=True, multiindex=cindex)

            NN = mesh.number_of_nodes()
            nindex = np.zeros(NN, dtype=np.int)
            halfedge = mesh.ds.halfedge
            nindex[halfedge[:, 0]] = mesh.get_data('halfedge', 'level')
            cindex = mesh.get_data('cell', 'level')
            fig = plt.figure()
            axes = fig.gca()
            mesh.add_plot(axes)
            mesh.find_node(axes, showindex=True, multiindex=nindex)
            mesh.find_cell(axes, showindex=True, multiindex=cindex)
            plt.show()
        else:
            return mesh
コード例 #13
0
    def two_cell_test(self, p=2, plot=True):
        from fealpy.pde.stokes_model_2d import StokesModelData_7
        pde = StokesModelData_7()

        node = np.array([(-1, -1), (1, -1), (1, 1), (-1, 1), (3, -1), (3, 1)],
                        dtype=np.float)
        cell = np.array([0, 1, 2, 3, 1, 4, 5, 2], dtype=np.int)
        cellLocation = np.array([0, 4, 8], dtype=np.int)
        mesh = PolygonMesh(node, cell, cellLocation)

        uspace = DivFreeNonConformingVirtualElementSpace2d(mesh, p)
        cell2dof = uspace.cell_to_dof()
        pspace = ScaledMonomialSpace2d(mesh, p - 1)
        ldof = pspace.number_of_local_dofs()

        isBdDof = uspace.boundary_dof()

        udof = uspace.number_of_global_dofs()
        pdof = pspace.number_of_global_dofs()

        uh = uspace.function()
        ph = pspace.function()
        uspace.set_dirichlet_bc(uh, pde.dirichlet)

        A = uspace.matrix_A()
        P = uspace.matrix_P()
        C = uspace.CM[:, 0, :ldof].reshape(-1)
        F = uspace.source_vector(pde.source)

        AA = bmat([[A, P.T, None], [P, None, C[:, None]], [None, C, None]],
                  format='csr')
        FF = np.block([F, np.zeros(pdof + 1, dtype=uspace.ftype)])
        x = np.block([uh, ph, np.zeros((1, ), dtype=uspace.ftype)])
        isBdDof = np.r_['0', isBdDof, np.zeros(pdof + 1, dtype=np.bool)]
        gdof = udof + pdof + 1

        FF -= AA @ x
        bdIdx = np.zeros(gdof, dtype=np.int)
        bdIdx[isBdDof] = 1
        Tbd = spdiags(bdIdx, 0, gdof, gdof)
        T = spdiags(1 - bdIdx, 0, gdof, gdof)
        AA = T @ AA @ T + Tbd
        FF[isBdDof] = x[isBdDof]
        x[:] = spsolve(AA, FF)
        uh[:] = x[:udof]
        ph[:] = x[udof:-1]
        print('ph:', ph)

        print('uh:', uh)
        up = uspace.project_to_smspace(uh)
        print('up:', up)
        integralalg = uspace.integralalg
        error = integralalg.L2_error(pde.velocity, up)
        print(error)

        uv = uspace.project(pde.velocity)
        print('uproject:', uv)
        up = uspace.project_to_smspace(uv)
        print('up', up)

        error = integralalg.L2_error(pde.velocity, up)
        print(error)
        if plot:
            fig = plt.figure()
            axes = fig.gca()
            mesh.add_plot(axes)
            mesh.find_node(axes, showindex=True)
            mesh.find_edge(axes, showindex=True)
            plt.show()
コード例 #14
0
    def refine_poly(self, plot=True):
        node = np.array([(0.0, 0.0), (0.0, 1.0), (0.0, 2.0), (1.0, 0.0),
                         (1.0, 1.0), (1.0, 2.0), (2.0, 0.0), (2.0, 1.0),
                         (2.0, 2.0)],
                        dtype=np.float)
        cell = np.array([0, 3, 4, 4, 1, 0, 1, 4, 5, 2, 3, 6, 7, 4, 4, 7, 8, 5],
                        dtype=np.int)
        cellLocation = np.array([0, 3, 6, 10, 14, 18], dtype=np.int)

        mesh = PolygonMesh(node, cell, cellLocation)
        mesh = HalfEdgeMesh2d.from_mesh(mesh)
        mesh.init_level_info()

        if False:
            NC = mesh.ds.number_of_all_cells()
            isMarkedCell = np.zeros(NC, dtype=np.bool_)
            isMarkedCell[:] = True
            mesh.refine_poly(isMarkedCell)
            NC = mesh.ds.number_of_all_cells()
            isMarkedCell = np.zeros(NC, dtype=np.bool_)
            isMarkedCell[[1, 2, 3, 4, 7, 10]] = True
            i = 0
            mesh.refine_poly(isMarkedCell)
            NC = mesh.ds.number_of_all_cells()
            isMarkedCell = np.zeros(NC, dtype=np.bool_)
            isMarkedCell[[17, 19, 36, 24, 14, 21, 34]] = True
            i = 1
            mesh.refine_poly(isMarkedCell)
            NC = mesh.ds.number_of_all_cells()
            isMarkedCell = np.zeros(NC, dtype=np.bool_)
            isMarkedCell[[14, 16]] = True
            i = 1
            mesh.refine_poly(isMarkedCell)

        if True:
            c = np.array([1, 1])
            r = 0.8
            h = 1e-2
            k = 0
            NB = 0
            while k < 8:
                halfedge = mesh.ds.halfedge
                halfedge1 = halfedge[:, 3]
                node = mesh.node
                flag = node - c
                flag = flag[:, 0]**2 + flag[:, 1]**2
                flag = flag <= r**2
                flag1 = flag[halfedge[:, 0]].astype(int)
                flag2 = flag[halfedge[halfedge1, 0]].astype(int)
                markedge = flag1 + flag2 == 1
                markedcell = halfedge[markedge, 1]
                markedcell = np.unique(markedcell)
                cell = np.unique(halfedge[:, 1])
                nc = cell.shape[0]
                markedcell1 = np.zeros(nc)
                markedcell1[markedcell] = 1
                print('makee', markedcell)
                mesh.refine_poly(markedcell1.astype(np.bool_))
                k += 1
                print('循环', k, '次***************************')

        fig = plt.figure()
        axes = fig.gca()
        mesh.add_plot(axes)
        #mesh.find_cell(axes, showindex=True)
        #mesh.add_halfedge_plot(axes, showindex=True)
        plt.show()
    def stokes_equation_test(self, p=2, maxit=4, mtype=1):
        from scipy.sparse import bmat
        from fealpy.pde.Stokes_Model_2d import CosSinData, PolyY2X2Data
        from fealpy.mesh.simple_mesh_generator import triangle
        h = 0.4
        #pde = CosSinData()
        pde = PolyY2X2Data()
        error = np.zeros((maxit, ), dtype=np.float)
        for i in range(maxit):
            if mtype == 0:
                node = np.array([(-1, -1), (1, -1), (1, 1), (-1, 1)],
                                dtype=np.float)
                cell = np.array([0, 1, 2, 3], dtype=np.int)
                cellLocation = np.array([0, 4], dtype=np.int)
                mesh = PolygonMesh(node, cell, cellLocation)
            else:
                mesh = pde.init_mesh(n=i + 2, meshtype='poly')

            NE = mesh.number_of_edges()
            NC = mesh.number_of_cells()
            idof = (p - 2) * (p - 1) // 2

            if True:
                fig = plt.figure()
                axes = fig.gca()
                mesh.add_plot(axes)

            uspace = ReducedDivFreeNonConformingVirtualElementSpace2d(mesh, p)
            pspace = ScaledMonomialSpace2d(mesh, 0)

            isBdDof = uspace.boundary_dof()

            udof = uspace.number_of_global_dofs()
            pdof = pspace.number_of_global_dofs()

            uh = uspace.function()
            ph = pspace.function()
            uspace.set_dirichlet_bc(uh, pde.dirichlet)

            A = uspace.matrix_A()
            P = uspace.matrix_P()
            F = uspace.source_vector(pde.source)

            AA = bmat([[A, P.T], [P, None]], format='csr')
            FF = np.block([F, np.zeros(pdof, dtype=uspace.ftype)])
            x = np.block([uh, ph])
            isBdDof = np.block(
                [isBdDof, isBdDof,
                 np.zeros(NC * idof + pdof, dtype=np.bool)])

            gdof = udof + pdof
            FF -= AA @ x
            bdIdx = np.zeros(gdof, dtype=np.int)
            bdIdx[isBdDof] = 1
            Tbd = spdiags(bdIdx, 0, gdof, gdof)
            T = spdiags(1 - bdIdx, 0, gdof, gdof)
            AA = T @ AA @ T + Tbd
            FF[isBdDof] = x[isBdDof]
            x[:] = spsolve(AA, FF)
            uh[:] = x[:udof]
            ph[:] = x[udof:]

            up = uspace.project_to_smspace(uh)
            integralalg = uspace.integralalg
            error[i] = integralalg.L2_error(pde.velocity, up)
            h /= 2

        print(error)
        print(error[0:-1] / error[1:])
        plt.show()
コード例 #16
0
    def refine_poly(self, plot=True):
        node = np.array([(0.0, 0.0), (0.0, 1.0), (0.0, 2.0), (1.0, 0.0),
                         (1.0, 1.0), (1.0, 2.0), (2.0, 0.0), (2.0, 1.0),
                         (2.0, 2.0)],
                        dtype=np.float)
        cell = np.array([0, 3, 4, 4, 1, 0, 1, 4, 5, 2, 3, 6, 7, 4, 4, 7, 8, 5],
                        dtype=np.int)
        cellLocation = np.array([0, 3, 6, 10, 14, 18], dtype=np.int)

        mesh = PolygonMesh(node, cell, cellLocation)
        mesh = HalfEdgeMesh2d.from_mesh(mesh)
        mesh.uniform_refine(n=2)
        print(mesh.number_of_nodes())

        #fig = plt.figure()
        #axes = fig.gca()
        #mesh.add_plot(axes)
        #mesh.find_node(axes, showindex=True)
        #mesh.find_cell(axes, showindex=True)

        NE = mesh.number_of_edges()
        NC = mesh.number_of_cells()

        if True:
            isMarkedCell = mesh.mark_helper([2])
            mesh.refine_poly(isMarkedCell)

        if False:
            isMarkedCell = mesh.mark_helper([6])
            mesh.refine_poly(isMarkedCell, dflag=False)

        if False:
            isMarkedCell = mesh.mark_helper([3])
            mesh.refine_poly(isMarkedCell, dflag=False)

        if False:
            isMarkedCell = mesh.mark_helper([1, 5])
            mesh.refine_poly(isMarkedCell)

        if False:
            isMarkedCell = mesh.mark_helper([1, 12])
            mesh.refine_poly(isMarkedCell, dflag=False)

        if False:
            isMarkedCell = mesh.mark_helper([0, 21])
            mesh.refine_poly(isMarkedCell, dflag=False)

        if plot:
            fig = plt.figure()
            axes = fig.gca()
            mesh.add_plot(axes)
            mesh.find_node(axes, showindex=True)
            mesh.add_halfedge_plot(axes, showindex=True)
            mesh.find_cell(axes, showindex=True)
            plt.show()

            if 0:
                NAC = mesh.number_of_all_cells()  # 包括外部区域和洞
                cindex = range(mesh.ds.cellstart, NAC)
                fig = plt.figure()
                axes = fig.gca()
                #mesh.add_plot(axes)
                mesh.add_halfedge_plot(axes, showindex=True)
                mesh.find_node(axes, showindex=True)
                mesh.find_cell(axes, showindex=True, multiindex=cindex)

                NN = mesh.number_of_nodes()
                nindex = np.zeros(NN, dtype=np.int)
                halfedge = mesh.ds.halfedge
                nindex[halfedge[:, 0]] = mesh.get_data('halfedge', 'level')
                cindex = mesh.get_data('cell', 'level')

                fig = plt.figure()
                axes = fig.gca()
                #mesh.add_plot(axes)
                mesh.find_node(axes, showindex=True, multiindex=nindex)
                #mesh.find_cell(axes, showindex=True, multiindex=cindex)
                plt.show()
        else:
            return mesh
コード例 #17
0
ファイル: HalfEdgeMeshTest.py プロジェクト: zweien/fealpy
    def refine_poly_test(self, plot=True):
        node = np.array([(0.0, 0.0), (0.0, 1.0), (0.0, 2.0), (1.0, 0.0),
                         (1.0, 1.0), (1.0, 2.0), (2.0, 0.0), (2.0, 1.0),
                         (2.0, 2.0)],
                        dtype=np.float)
        cell = np.array([0, 3, 4, 4, 1, 0, 1, 4, 5, 2, 3, 6, 7, 4, 4, 7, 8, 5],
                        dtype=np.int)
        cellLocation = np.array([0, 3, 6, 10, 14, 18], dtype=np.int)

        mesh = PolygonMesh(node, cell, cellLocation)
        mesh = HalfEdgeMesh.from_mesh(mesh)

        fig = plt.figure()
        axes = fig.gca()
        mesh.add_plot(axes)
        mesh.find_node(axes, showindex=True)
        mesh.find_cell(axes, showindex=True)
        clevel = mesh.celldata['level']
        print(clevel)
        NE = mesh.number_of_edges()
        NC = mesh.number_of_cells()

        if True:
            isMarkedCell = mesh.mark_helper([2])
            mesh.refine_poly(isMarkedCell, dflag=False)

        if False:
            isMarkedCell = mesh.mark_helper([6])
            mesh.refine_poly(isMarkedCell, dflag=False)

        if False:
            isMarkedCell = mesh.mark_helper([3])
            mesh.refine_poly(isMarkedCell, dflag=False)

        if 1:
            isMarkedCell = mesh.mark_helper([1, 5])
            mesh.refine_poly(isMarkedCell, dflag=False)

        if False:
            isMarkedCell = mesh.mark_helper([1, 12])
            mesh.refine_poly(isMarkedCell, dflag=False)

        if False:
            isMarkedCell = mesh.mark_helper([0, 21])
            mesh.refine_poly(isMarkedCell, dflag=False)
        clevel = mesh.celldata['level']
        print(clevel)

        #print("halfedge level:\n")
        #for i, val in enumerate(mesh.halfedgedata['level']):
        #    print(i, ':', val, mesh.ds.halfedge[i, 0:2])

        #print("cell level:\n")
        #for i, val in enumerate(mesh.celldata['level']):
        #    print(i, ':', val)

        if plot:

            fig = plt.figure()
            axes = fig.gca()
            mesh.add_plot(axes)
            mesh.find_node(axes, showindex=True)
            mesh.find_cell(axes, showindex=True)

            NAC = mesh.number_of_all_cells()  # 包括外部区域和洞
            cindex = range(mesh.ds.cellstart, NAC)
            fig = plt.figure()
            axes = fig.gca()
            mesh.add_plot(axes)
            mesh.find_node(axes, showindex=True)
            mesh.add_halfedge_plot(axes, showindex=True)
            mesh.find_cell(axes, showindex=True, multiindex=cindex)

            NN = mesh.number_of_nodes()
            nindex = np.zeros(NN, dtype=np.int)
            halfedge = mesh.ds.halfedge
            nindex[halfedge[:, 0]] = mesh.get_data('halfedge', 'level')
            cindex = mesh.get_data('cell', 'level')
            fig = plt.figure()
            axes = fig.gca()
            mesh.add_plot(axes)
            mesh.find_node(axes, showindex=True, multiindex=nindex)
            mesh.find_cell(axes, showindex=True, multiindex=cindex)
            plt.show()
        else:
            return mesh
コード例 #18
0
ファイル: debug__09172020.py プロジェクト: ymjyxw/fealpy
import numpy as np
import matplotlib.pyplot as plt
from fealpy.mesh import PolygonMesh, HalfEdgeMesh2d

node3 = np.array([(0.0, 0.0), (0.0, 1.0), (0.0, 2.0), (1.0, 0.0), (1.0, 1.0),
                  (1.0, 2.0), (2.0, 0.0), (2.0, 1.0), (2.0, 2.0)],
                 dtype=np.float64)
cell3 = np.array([0, 3, 4, 4, 1, 0, 1, 4, 5, 2, 3, 6, 7, 4, 4, 7, 8, 5],
                 dtype=np.int)
cellLocation = np.array([0, 3, 6, 10, 14, 18], dtype=np.int)

mesh3 = PolygonMesh(node3, cell3, cellLocation)
mesh3 = HalfEdgeMesh2d.from_mesh(mesh3)
mesh3.uniform_refine(2)  # 这里一致加密的时候会报错
node3 = mesh3.entity("node")
edge3 = mesh3.entity("edge")
cell3, cellLocation = mesh3.entity("cell")
halfedge = mesh3.entity("halfedge")

fig3 = plt.figure()
axes3 = fig3.gca()
mesh3.add_plot(axes3)
mesh3.find_node(axes3, showindex=True)
mesh3.find_edge(axes3)
plt.show()