Gmsh创建含内部颗粒的非重叠3D网格结构遇阻求助
问题分析与修正方案
你的代码核心问题在于布尔运算时错误删除了球体实体,同时存在冗余的Volume定义,导致无法正确保留两个不重叠的实体:
BooleanDifference中对球体使用Delete选项,会直接移除原始球体Volume(2),后续无法将其指定为物理体积Volume(5) = {3};属于冗余操作,布尔差运算已经生成了Volume(3)
以下是修正后的代码:
SetFactory("OpenCASCADE"); // 创建原始立方体和球体,保留球体实体 Box(1) = {0, 0, 0, 1, 1, 1}; Sphere(2) = {0.5, 0.5, 0.5, 0.2, -Pi, Pi, 2*Pi}; // 从立方体中减去球体,仅删除原立方体(保留原球体) BooleanDifference(3) = { Volume{1}; Delete; }{ Volume{2}; }; // 分别定义物理体积:减去球体后的立方体为Matrix,原始球体为Particle Physical Volume("Matrix") = {3}; Physical Volume("Particle") = {2};
关键说明
- 布尔差运算时,仅在第一个集合(被减体:立方体)后加
Delete,第二个集合(减体:球体)不加Delete,这样球体实体将被保留 - 物理体积需分别指向差运算后的立方体(Volume3)和原始球体(Volume2)
- 若要生成更规整的网格,可添加网格尺寸控制,比如在代码末尾加入:
Mesh.CharacteristicLengthMin = 0.05; Mesh.CharacteristicLengthMax = 0.1;
GUI验证步骤
- 运行修正后的代码,进入Gmsh GUI
- 点击左侧
Geometry面板,展开Volumes,确认同时存在Volume2(球体)和Volume3(挖去球体的立方体) - 切换到
Mesh面板,点击3D生成网格,检查两个实体的网格是否无重叠
内容的提问来源于stack exchange,提问作者Shishir Barai
相关产品推荐
相关产品推荐

