我已经生成了一个gmsh网格,并通过Gmsh2D导入了FiPy。我想在“ Faces”表面上设置边界条件,但我不知道该怎么做。
在我在文档中发现的FiPy示例中,建议对某些行进行命名,以备后用。将网格导入fipy后,该怎么做?
// note: if you do not use any labels, all Cells will be included.
Physical Surface("Outer") = {1};
Physical Surface("Middle") = {2};
Physical Surface("Inner") = {3};
// label the "north-west" part of the exterior boundary
// note: you only need to label the Face elements
// (Physical Line in 2D and Physical Surface in 3D) that correspond
// to boundaries you are interested in. FiPy does not need them to
// construct the Mesh.
Physical Line("NW") = {5};
-----------------
编辑:
对于简单的表面,这将起作用:我忽略了mesh.exteriorFaces
。对于一个简单的圆圈,这将导致一个简单的解决方案:
xfc, yfc = mesh.faceCenters() # returns x faceCenters coordinate, ...
xcc, ycc = mesh.cellCenters()
plot(xfc[where(mesh.exteriorFaces == False)],yfc[where(mesh.exteriorFaces == False)],'ro', label='inside')
plot(xfc[where(mesh.exteriorFaces == True)],yfc[where(mesh.exteriorFaces == True)],'ko', label='surface')
legend()
尽管如此,我仍在寻找有关如何从外部访问gmsh代码的答案,但这也许对其他人有帮助:)
“外部”不是物理面孔,它是一组物理单元格。要访问“外部”的边界面,可以添加
Physical Line("Outer Boundary") = {1, 2, 3, 4, 5, 6, 7, 8};
到您的Gmsh脚本,然后使用]施加约束>
网格边界的面(即,仅在一侧具有单元格的面)。用var.constrain(value, where=squaredCircle.physicalFaces["Outer Boundary"])
正如您所发现的,您始终可以访问
mesh.exteriorFaces
以获取定义entire
Physical Surface
定义的Gmsh域不一定受mesh.exteriorFaces
限制。