首页 > 解决方案 > 使用 gmsh 4.7.1 在球壳内创建网格

问题描述

我正在尝试使用gmsh 4.7.1在 3D 体积内创建网格,即具有同心球形孔的球体(换句话说,我有一个球壳)。为此,我编写了以下.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};

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

我究竟做错了什么?我怎样才能获得想要的结果?谢谢你。

标签: mesh

解决方案


这里有几个问题:

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

如果您坚持使用 OpenCASCADE 内核,您可能想要使用布尔运算

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

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 可视化生成的网格与剪切:

在此处输入图像描述


推荐阅读