mesh - 使用 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
我究竟做错了什么?我怎样才能获得想要的结果?谢谢你。
解决方案
这里有几个问题:
Sphere
command,已经创建了一个体积,而不是您期望的表面。- 由于上述几点,
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 可视化生成的网格与剪切:
推荐阅读
- r - 代码 | 在 R 中发送 Outlook 电子邮件,循环多个电子邮件地址,电子邮件正文中的 html 表
- reactjs - 为什么调用这个变量会错过它包含的数组?
- c# - 滚动时在 MainLayout.razor 上呈现页面的 Blazor 元素
- mysql - 将大型 MySQL 表加载到 JSON 中的问题
- django - 输出
使用模板标签的标签
- reactjs - 图像不会出现在 Nextjs 和 Strapi 项目中
- graph - Neo4j,如何返回两个节点之间的路径多于一个的节点和关系
- java - 在 Camel 中开发并在 Camel k 中运行
- reactjs - 在 styledComponent 上添加单个或多个 className 不显示服务器上的样式
- linux - 如何在linux中使用for循环为多个具有不同名称的文件运行命令?