整理阅读的论文(七)
“科研做得好的同事,大家其实都在坚持看文章。”
----和辰妈的对话
全四边形网格生成算法分为两大类,一类是直接法,主要是使用Paving方法(缺点是non robust)和四叉树法(缺点是在边界处网格的质量很差),另一类是间接法(先生成三角形网格,然后通过合成三角形网格形成四边形网格),介绍了两种方法,一种是合成法,一种是分解法,前者只能生成以四边形为主的网格(例子中800多个四边形网格,200个左右的三角形网格),并不能保证生成全四边形网格,后者要求先对网格的尺寸进行扩大,接着按合并法的方式进行合并,最后对生成的三角形和四边形进行分解(即mesh refinement过程,将一个三角形分成三个四边形,一个四边形分成四个四边形),但是存在网格尺寸的缩放以及插入点在原始曲面上的位置计算等问题。文中采用了Blossom算法(一个图算法),将三角形合并成四边形,算法生成全四边形网格,网格质量优良,运行速度快。
算法的基本思想:每个三角形设置成图的顶点,三角形的边设置成图的边,该边的权值反映了合并该边关联的两个三角形后得到的四边形的质量,这就构成了一个无向加权图 G(V,E,c),其中V是顶点,E是边,c是权。由于一个三角形最多只能和其临近的一个三角形进行合并,从图的角度来看,即边的选择要满足一定的条件,它恰好满足图论中 Alternating tree 数据结构的形式,因此可以调用Blossom算法进行求解。
为了尽量生成全四边形网格,不仅要求曲面的每条边的边界条数必须为偶数(由此曲面的边界总条数必然为偶数,它是生成全四边形网格的必要条件。注,要求每条边的边界条数为偶数过于严格,只要保证曲面的边界总条数为偶数就可以了),另外引进extra-edges(将两个具有公共节点的不相邻的边界三角形连接起来作为一条边,它的权值设置得很大),它是为了将问题尽可能地转化为Cubic graphs的形式(该形式要求图中每个节点v都有三条边与之关联,它能够保证一定存在perfect matchings。换到问题的语境,就是说利用Blossom算法,通过合并三角形网格,能够保证最终生成全四边形网格)。
后处理给出两种操作,一种是合并两个节点,一种是消除节点,目的都是为了形成更好的四边形网格(参见[1]中的Fig.10 和Fig.11)。
关键的 Blossom 算法,作者并没有进行过多的介绍,这也难怪,作者是做优化问题方面研究的,这个算法对他来说就像李寻欢的小李飞刀一样;如果考虑过渡网格,相应的尺寸由用户直接进行指定,它不是文章的主要关注点。另外,生成四边形网格的必要性,为了避免不必要的讨论,作者只用一句话带过(we assume that quadrilateral meshes are indeed useful)。其实,数值结果中给出的海岸的例子可以看出,相同尺寸下的四边形网格的计算模拟速度是三角形网格计算模拟运行速度的1/4(四边形网格数量也大概是三角形网格数量的1/4)。
后记:
1. 计划的三个月读论文系列由于主观原因已经停摆一个月,从这个月开始继续。
2. 今天犯了一个错误,心情低落。顺笔一记。
参考文献:
[1] Blossom-Quad: a non-uniform quadrilateral mesh generator using aminimum cost perfect matching algorithm, J.F. Remacle, et al. InternationalJournal for Numerical Methods in Engineering,2012,00:1-23
下载链接:
http://www.geuz.org/gmsh/doc/preprints/gmsh_quad_preprint.pdf