使用 gmsh 4.7.1 在球形 shell 内创建网格

Creating a mesh within spherical shell with gmsh 4.7.1

我正在尝试使用 gmsh 4.7.1 在 3D 体积内创建网格,这是一个带有同心球孔的球体(换句话说,我有一个球形 shell)。为此,我编写了以下 .geo 文件:

// Gmsh project created on Wed Feb 17 15:22:45 2021
SetFactory("OpenCASCADE");

//+
Sphere(1) = {0, 0, 0, 0.1, -Pi/2, Pi/2, 2*Pi};
//+
Sphere(2) = {0, 0, 0, 1, -Pi/2, Pi/2, 2*Pi};
//+
Surface Loop(3) = {2};
//+
Surface Loop(4) = {1};
//+
Volume(3) = {3, 4};
//+
Physical Surface(1) = {1};
//+
Physical Surface(2) = {2};
//+
Physical Volume(3) = {3};

但是,一旦我在 gmsh gui 中使用 3D 命令创建了 3D 网格,我的 内孔也被网格化了 ,而我希望孔内没有网格元素。

我做错了什么?我怎样才能得到想要的结果?谢谢。

这里有几个问题:

  • Sphere command,已经创建了体积,而不是您期望的表面。
  • 由于上述原因,假设命令 Surface Loop(3) = {2}; 从体积创建表面循环,这是 1) 不受支持的操作。 2) 将尝试使用带有标签 2 的表面。目前还不清楚,它在现实中会做什么(因为带有标签 2 的表面可能仍然存在)。
  • 因此,Volume 命令得到一些奇怪的东西作为输入
  • 这都与没有设置特征长度有关,因此网格密度比较随意。

如果你坚持使用OpenCASCADE内核,你可能想要使用boolean operations

这是我的代码,对于定义实心球体的所有点,任意选择特征长度 0.05 shell:

SetFactory("OpenCASCADE");

Sphere(1) = {0, 0, 0, 0.1, -Pi/2, Pi/2, 2*Pi};
Sphere(2) = {0, 0, 0, 1, -Pi/2, Pi/2, 2*Pi};

BooleanDifference(3) = { Volume{2}; Delete; }{ Volume{1}; Delete; };

Characteristic Length{ PointsOf{ Volume{3}; } } = 0.05;

生成的带有剪裁的网格的 Paraview 可视化: