GMSH+METIS在STL网格划分中的测试效果

      时间马上到了六月下旬,这个学期是最为忙碌的一个学期。趁着学期的末尾的空闲,写下最近的一点小小的功能。之前有人问我Gmsh怎么划分STL模型,Gmsh在划分实体模型上的流程还是非常多的资料参考的,但是在STL模型的资料相对不多,本着学习兴趣,本人在查看文档后发下Gmsh下有个面分割(可能说法不准确)功能,能够快速提取STL的边界线及其面,基于这个功能可以快速重构网格模型到实体模型,而分割面的这个功能依赖于一个叫METIS的库。以下是我在网上资料上找到的关于METIS库的简单信息:

    METIS 是一款开源的图划分(Graph Partitioning)和矩阵重排序(Matrix Reordering)库,由美国明尼苏达大学的Karypis Lab开发。它以高效、可扩展和高精度著称,广泛应用于科学计算、数据分析和工程模拟等领域。

核心功能

详情

图划分

将大型图(Graph)划分为多个子图,满足以下目标:

  • 子图之间节点/边数量均衡。

  • 子图之间的连接边(切割边)数量最小化。

  • 支持递归划分(多级划分)和直接划分(k-way划分)。

网格划分

对有限元分析(FEM)中的计算网格进行分区,优化并行计算效率。

矩阵重排序

通过重排稀疏矩阵的行和列,减少矩阵分解或求解时的填充元(fill-in),提升计算效率(如Cholesky分解、LU分解)。

支持多种划分方式

  • 多级划分:通过粗化(Coarsening)、初始划分(Partitioning)和细化(Refinement)三步实现高效划分。

  • 并行划分:支持分布式内存系统(需搭配ParMETIS,其并行版本)。

主要作用

详情

提升并行计算效率

在分布式计算中,将任务或数据均匀分配到不同进程/节点,减少通信开销

优化存储和计算性能

通过矩阵重排序降低稀疏矩阵运算的复杂度,节省内存和计算时间。

简化复杂问题

将大规模图或网格问题分解为可管理的子问题,便于分布式处理。

应用领域

详情

科学计算与工程模拟

  • 有限元分析(FEM)、计算流体力学(CFD)中的网格划分。

  • 结构力学、气候建模等需要大规模并行计算的场景。

数据科学与机器学习

  • 大规模图数据处理(如社交网络、推荐系统)。

  • 分布式训练中的数据划分(如图神经网络)

稀疏矩阵运算

线性代数求解器(如PETSc、Trilinos)依赖METIS优化矩阵存储和计算

数据库与高性能计算

  • 分布式数据库中的数据分片(Sharding)。

  • 任务调度中的负载均衡。

VLSI与芯片设计

  • 集成电路布局中的分区问题。

特点与优势

详情

高效性

基于多级算法,处理百万级节点图仅需秒级时间。

轻量级

纯C语言实现,接口简单,易于集成。

灵活性

支持加权图、多种划分约束条件。

开源免费

遵循Apache 2.0许可证

Gmsh源码自带了METIS源码,在编译的时候勾选METIS即可。

图片

      cmake勾选:

       

图片

Gmsh软件内部操作:

图片

图片

弹出窗口的参数设置在gmsh.h中的对应接口是:

图片

  目前比较大的问题就是这个curveAngle角度设置问题,之后是将这个模型重构为几何体,核心接口如下:

gmsh::model::mesh::createGeometry();

之后是正常的划分流程。

本人做的修改:在参考METIS源码后,实现一个可以尽可能还原实际面的网格划分功能。以下是实现的效果:

STL模型在FreeCAD1.0下的显示效果图:

图片

网格划分效果图:

图片

图片

图片

图片

图片

有些面的分割还是不准确的,但是效果比Gmsh自带的有一些改进,对于想实现STL网格划分,且需要提取每个面的网格的需求,这个是一个思路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值