EasyMesh - A Two-Dimensional Quality Mesh Generator
Abstract. EasyMesh is developed by Bojan Niceno, it is a two-dimensional quality mesh generator. EasyMesh can generate two dimensional, unstructured, Delaunay and constrained Delaunay triangulations in general domains. It can handle holes in the domain. The paper focus on the usage of EasyMesh.
Key Words. EasyMesh, Delaunay Triangualtion, Triangulation, Mesh
1.Introduction
目前,工程技术领域中各类物理系统的数值分析计算方法主要包括以下步骤:第一步,建立物理系统的控制方程。第二步,离散化物理系统的定义域。在工程技术领域人们通常将离散化的几何定义域的一个子域单元称为网格(mesh),将将离散化过程称为网格划分或者网格生成(mesh generation)。第三步,离散化连续PDE模型(Partial Differential Equation, PDE偏微分方程)。第四步,求解线性代数方程组。第五步,计算可视化。
网格划分技术是偏微分方程数值解法中比较关键的一步,关于网格划分的库也有很多,如Triangle,netgen, gmsh, tegen等等。网格划分技术不仅用于有限元计算,也可以用于模型的可视化。本文主要介绍这个轻量化的网格划分库EasyMesh。
2.EasyMesh Features
EasyMesh能够对于由折线围成的多空洞、多介质区域生成指定局部加密的Delaunay三角剖分。使用了很简单的文本文件作为数据的输入,生成了不同的结果文件,方便查看结果。其实将输入和输出部分稍加修改,就可以将EasyMesh内嵌到自己的程序中,而不用单独执行EasyMesh。
Figure 1. EasyMesh website (http://web.mit.edu/easymesh_v1.4/www/easymesh.html)
EasyMesh也可以从上述网站中进行下载,下载后可以直接在Visual Studio中编译。
3.Using EasyMesh
用C写的EasyMesh虽然有点历史了,但是编译起来也是很顺利的,只有几个warnings。编译好生成一个EasyMesh.exe,然后像其他的控制台程序一样,通过传参数来使用。直接运行就会看到程序的完整使用说明:
Figure 2. EasyMesh Help Info
可以在EasyMesh.exe的文件夹中做一个批处理文件,如EasyMesh.bat,其中内容如下:
EasyMesh
pause
这样就可以看到这个帮助信息了。使用如下命令则会生成一个例子文件:
EasyMesh +example
pause
然后再对生成的example.d进行剖分:
EasyMesh example.d +dxf
pause
将上面的三句话分别保存成一个批处理文件,运行批处理就可以得到相应的结果了。运行上面这个批处理得到对example.d的剖分结果文件example.dxf,用AutoCAD打开这个DXF文件查看结果:
Figure 3. Mesh Result
Figure 4. Delaunay Triangulation
Figure 5. Voronoi Result
输入文件中比较重要的一点是边界线的方向是逆时针的,孔的线是顺时针方向的。下面将自带的几全例子文件全部生成网格:
Figure 6. EasyMesh example2.d +dxf
Figure 7. EasyMesh example3.d +dxf
Figure 8. EasyMesh example4.d +dxf
Figure 9. EasyMesh example5.d +dxf
Figure 10. EasyMesh example6.d +dxf
Figure 11. EasyMesh example7.d +dxf
通过设备下图中的spacing可以设置网格的密度:
Figure 12. Spacing of a point
4.Conclusion
网格划分技术广泛用于三维模型可视化,有限元计算中。借助这些开源库的力量,可以让自己快速实现一些功能。本文主要介绍了EasyMesh的用法及生成结果,如果对网格划分技术感兴趣的同学可以自己下载源码学习。
因为EasyMesh源码精巧,且包含了输入和输出部分的源码,可以将EasyMesh输入输出部分稍加修改就可以直接在自己的程序中使用,而不用单独编译成一个可执行程序。
5.References
1. EasyMesh website. http://web.mit.edu/easymesh_v1.4/www/easymesh.html
2. EasyMesh Source: http://www-dinma.univ.trieste.it/nirftc/research/easymesh/
3. 王成恩. 面向科学计算的网格划分与可视化技术. 科学出版社. 2011
4. Triangle. http://www.cs.cmu.edu/~quake/triangle.html
5. Triangle eryar. http://www.cppblog.com/eryar/archive/2014/03/29/206394.aspx
PDF Version: EasyMesh