手动创建的GMSH .msh文件节点无法被GMSH Viewer读取问题排查
手动编写GMSH .msh文件的格式错误分析及六面体网格生成方案
一、你的.msh文件存在的核心格式错误
$Elements块缺少元素总数声明
GMSH的msh 4.1格式要求,$Elements块的第一行必须是元素的总数量,之后才是每个元素的详细信息。你的文件直接从元素1开始,没有先声明总元素数,这会导致GMSH Viewer无法正确解析元素结构,进而出现读取节点失败的提示。8节点六面体的节点数量不足
元素类型5对应8节点六面体,但你给出的元素行(比如第一行1 0 5 1 0 1 6 5 35 36 41 40)中,标签之后的节点编号只有7个,不符合类型5需要8个节点的要求。节点数量不匹配会直接导致网格拓扑解析错误。节点顺序可能不符合规范
GMSH对8节点六面体的节点顺序有严格要求:需遵循右手定则,通常是底面四个节点按顺时针排列,之后是顶面对应的四个节点按顺时针排列。如果你的节点顺序混乱,即使数量正确,也会导致网格无法正常显示或拓扑错误。需验证节点数量一致性
确认$Nodes块开头声明的385个节点,和实际列出的节点总数完全一致,中间省略的部分不能有节点遗漏或多余。
二、用GMSH Python生成六面体网格的可行方法
你之前尝试GMSH Python失败,大概率是没配置对网格算法或步骤遗漏。以下是生成你所需区域(-2到2,-4到4,0到100)的六面体网格的示例代码:
import gmsh gmsh.initialize() gmsh.model.add("hex_grid") # 创建长方体几何实体 box = gmsh.model.occ.addBox(-2, -4, 0, 4, 8, 100) gmsh.model.occ.synchronize() # 必须同步几何与模型 # 设置网格单元尺寸 gmsh.model.mesh.setSize(gmsh.model.getEntities(0), 10) # 指定3D网格算法为六面体主导(关键) gmsh.option.setNumber("Mesh.Algorithm3D", 5) # 5对应Hex-dominant算法 gmsh.model.mesh.generate(3) # 生成3D网格 # 保存为msh文件 gmsh.write("hex_grid.msh") gmsh.finalize()
运行这段代码就能得到符合要求的六面体网格,无需手动编写.msh文件。
内容的提问来源于stack exchange,提问作者Francesco Amatto
相关产品推荐
相关产品推荐

