You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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验证步骤

  1. 运行修正后的代码,进入Gmsh GUI
  2. 点击左侧Geometry面板,展开Volumes,确认同时存在Volume2(球体)和Volume3(挖去球体的立方体)
  3. 切换到Mesh面板,点击3D生成网格,检查两个实体的网格是否无重叠

内容的提问来源于stack exchange,提问作者Shishir Barai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 04:44:52