将网格导入 Fipy 后如何从 python 访问 gmsh 代码?

How to access gmsh code from python after importing mesh into Fipy?

我生成了一个 gmsh 网格,我通过 Gmsh2D 将其导入到 FiPy 中。我想给曲面设置边界条件,但我不知道如何。

在我在文档中找到的 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() 

IdentifiedSurfaceCells

尽管如此,我仍在寻找有关如何从外部访问 gmsh 代码的答案,但也许这对其他人有帮助:)

"Outer"不是物理面孔,是一组物理细胞。要访问 "Outer" 的边界面,您可以添加

Physical Line("Outer Boundary") = {1, 2, 3, 4, 5, 6, 7, 8};

到您的 Gmsh 脚本,然后使用

应用约束
var.constrain(value, where=squaredCircle.physicalFaces["Outer Boundary"])

如您所见,您始终可以访问 mesh.exteriorFaces 以获取定义 整个 网格边界的面(即只有一个单元格的面一边)。用 Physical Surface 定义的 Gmsh 域不一定受 mesh.exteriorFaces.

的约束