如何构建带孔的网格以用于 FEniCS?

计算科学 pde 有限元 芬尼克斯
2021-11-28 18:08:55

这是我第一次使用 FEniCS。我正在尝试在一个带有两个孔的矩形上求解一个与拉普拉斯方程非常相似的椭圆 PDE。这些洞是能量函数的水平集,所以我不能完全控制它们的几何形状。对于第一个近似值,我可以使用椭圆,但我仍想使用可扩展的技术,以便可以灵活地改变电位。本教程提到网格预处理器通常需要初始化复杂几何的问题,但我无法找到如何执行此操作的实际示例。任何人都可以建议一种构建网格的方法吗?

2个回答

看看 DOLFIN 中的 CSG(构造实体几何)演示。您应该能够生成一个带有两个孔的矩形,例如

mesh = Mesh(Rectangle(...) - Ellipse(...) - Ellipse(...), resolution)

如果您的网格取决于解决方案,您可以进行定点迭代:

  • 计算解决方案,
  • 移动网格,
  • 如果网格变形很大,请创建新的并在其上投影解决方案。

如果您在 DOLFIN 中使用 CSG,那么您可以在 DOLFIN 中处理所有三个步骤。如果使用外部网格生成器,第三步需要 DOLFIN 指示网格生成器。一种方法是:

  • float为由几个s参数化的网格生成器准备输入,
  • subprocess.call网格生成器, meshconvert,
  • 读入新网格

三角形可以在二维中生成带有孔的域的三角剖分。meshconvert句柄还分面和单元格标记产生三角形。