用 fealpy 对求解域进行剖分, 我写下魏华祎老师已经实现的基本的网格信息点的函数,以四边形网格为例
from fealpy.mesh.quadrangle_mesh import QuadrangleMesh
xBox = [0, 1] # x in [0,1]
yBox = [0, 1] # y in [0,1]
MFBox = xBox + yBox
mesh = QuadrangleMesh.from_box(MFBox, nx=2, ny=2)
这样建立了如下的四边形网格
NE = mesh.number_of_edges() # 剖分的边数量
NC = mesh.number_of_cell() # 剖分数量
edge2cell = mesh.ds.edge_to_cell() # 某条边所在剖分编号
cell2edge = mesh.ds.cell_to_edge() # 剖分边的全局编号
cell2cell = mesh.ds.cell_to_cell() # 剖分的相邻剖分编号
我们来详细说下后三个, 并以详细介绍每个例子的第一行含义
mesh.ds.cell_to_edge()
array([[ 1, 5, 3, 0],
[ 3, 7, 4, 2],
[ 6, 10, 8, 5],
[ 8, 11, 9, 7]])
↑ 这就是第0个剖分的边所在的全局编号(边的信息是按逆时针排布给的)
mesh.ds.cell_to_cell()
array([[0, 2, 1, 0],
[0, 3, 1, 1],
[2, 2, 3, 0],
[2, 3, 3, 1]])
这就是编号为0的剖分, 紧邻着的剖分编号, 对于第0个剖分, 挨着它的就是 2 1 0 以逆时针排列
mesh.ds.edge_to_cell()
array([[0, 0, 3, 3],
[0, 0, 0, 0],
[1, 1, 3, 3],
[0, 1, 2, 0],
[1, 1, 2, 2],
[0, 2, 1, 3],
[2, 2, 0, 0],
[1, 3, 1, 3],
[2, 3, 2, 0],
[3, 3, 2, 2],
[2, 2, 1, 1],
[3, 3, 1, 1]])
这就是编号为 0 的边, 所在的第一个剖分和第二个剖分的编号, 这条边在第一个剖分边的编号, 这条边在第二个剖分边的编号
还有两个常用的数据结构
isOutEdge = mesh.ds.boundary_edge_flag()
isInEdge = (edge2cell[:, 0] != edge2cell[:, 1])
这两组数据结构用来判断剖分的编辑是内部边界还是外部边界,