在 GMSH 中为多个物体创建单个网格

Create single mesh for multiple bodies in GMSH

我目前正在尝试进行静磁 FEM 模拟,我想使​​用 GMSH 对我的几何体进行网格划分。几何图形如下所示:在

我使用 FreeCAD 创建几何体并作为 .STEP 文件导入 GMSH。在 GMSH 中,我定义了 3 个物理组,导致以下脚本:

Merge "yoke_simulation.step";
Physical Volume("iron") = {1, 7, 9, 6, 3, 2, 4};
//+
Physical Volume("current") = {5};
//+
Physical Volume("air") = {8};

创建网格时,我得到以下结果:

问题是 GMSH 似乎在为每个物体创建一个单独的网格,而没有将这些网格彼此连接起来。例如,如果看一下两个锥体之间的区域,很明显两个锥体的网格与空气的网格没有连接:

如何让 GMSH 为所有物体创建一个连接的网格?

现在看来 Air 体积 8 只是整体边界框,不需要减去 IronCurrent 的体积。因此,它为整个边界框创建了一个四面体网格,而不考虑其他物体。

我不是 FreeCAD 专家,所以我真的不知道如何在那里正确设置它。可能的话,请尝试在那里指定 Air 卷,确保它不包含您的详细信息。

另一种方法可能涉及对 GMSH 级别的轻微修改。例如,在物理化之前创建适当的 Air 卷。您想要从交易量 8 中减去交易量 1, 7, 9, 6, 3, 2, 4, 5。这可以通过

来实现
BooleanDifference(100) = { Volume{8}; Delete; }{ Volume{1,7,9,6,3,2,4,5}; };
Physical Volume("air") = {100};

注意,只有使用 GMSH 中的 OpenCASCADE 内核,前面的代码才能工作。 请参阅以下 GMSH 示例代码以供参考:

SetFactory("OpenCASCADE");

Box(1) = {0,0,0, 1,1,1};

Box(2) = {0.1,0.1,0.1, 0.2,0.2,0.2};
Box(3) = {0.5,0.5,0.5, 0.2,0.2,0.2};

BooleanDifference(100) = { Volume{1}; Delete; }{ Volume{2,3}; };
Physical Volume ("air") = {100};
Physical Volume ("iron") = {2,3};

正在删除 Coherence 命令;在合并线之后将强制 GMSH 形成一个没有重叠体积的连贯网格。

我创建了一组 free-and-open-source 工具来为 multi-material FEM 生成分区网格。 他们在这里可用 github.com/NH89/SOFA_mesh_partitioning_tools

它们基于 CGAL 几何库,并从任意相交的三角面网格生成分区四面体网格。

它们被设计用于 SOFA real-time 软物质 FEM 框架,但可用于任何分区 FEM 应用程序。