基于HYPERMESH的六面体网格局部加密插件开发
2018-09-10郑燕娟李庚袁
郑燕娟 李庚袁
【摘 要】为了解决HYPERMESH前处理软件无法实现六面体网格局部加密的问题,利用Tcl/tk语言开发了六面体网格局部加密插件,在HYPERMESH中实现了六面体网格的局部加密功能,扩充了HYPERMESH的六面体网格划分功能。实例结果表明,该插件可自动对选择的六面体网格进行加密,极大地提高了HYPERMESH软件六面体网格的划分效率和质量。
【关键词】局部加密;HYPERMESH;Tcl/tk;六面体网格
【中图分类号】TP391.72 【文献标识码】A 【文章编号】1674-0688(2018)03-0083-04
0 引言
在有限元分析中,同一个模型以同样大小的单元尺寸划分,六面体网格数要比四面体网格数少得多,加上六面体网格在计算精度、划分网格数量及抗畸变程度等方面比四面体网格具有明显的优势[1-2],因此六面体网格是有限元分析的首选网格。
在点接触、裂纹等有限元分析中,需要分析的区域往往占整个模型的很小一部分,而为了得到较准确的结果,常常需要在应力集中的地方划分较小的网格尺寸,但如果全部模型都用较小的网格尺寸,特别是在整体模型较大的情况下,会使模型单元总数很多,需要较多的计算资源,甚至超过计算机所能承受的范围。通常的做法是在应力集中的区域使用较小的网格,其他区域使用较大网格,在它们之间用过渡单元来连接,保证网格之间的连续性。国内外许多学者致力于六面体网格过渡算法的研究[4-6],并开发了相应软件实现六面体网格的划分及自动过渡加密,但由于是独立的软件,开发工作量巨大,所以普通个人或单位难以完成。
HYPERMESH是一款划分六面体网格分功能十分出色的商用软件[3],能够满足大多数网格的划分,但尚不能在网格尺寸相差较大的六面体网格之间自动划分六面体过渡网格。Ito等人提出的六面体网格加密算法,单元质量高,过渡单元少。本文以Ito等人提出的加密算法为基础,在HYPERMESH环境中通过Tcl/tk语言实现六面体网格的自动过渡加密,充分利用HYPERMESH软件划分六面体网格的优势,同时降低开发难度。
1 过渡网格加密算法
在网格划分中,很多情况下都是要对一段连续的区域进行细化,如模拟圆球压平板的接触分析中,应力集中的区域占整个模型的很小一部分,常常要在接触点附近区域细化网格,以保证整体有限元模型不会太大,并得到较准确的模拟结果(如图1所示)。
上述有限元模型中,与细化区域网格相邻的网格单元有共点、共边、共面3种情况(如图2所示)。
此时只需要用到Ito等人提出的加密算法模板中的边加密、面加密,加上对加密单元进行全加密即可,共点情况不需要处理,加密模板如图3所示,A、B、C、D、E、F、G、H是原网格单元的8个顶点,字母加黑表示加密点。根据每个网格含有的黑点个数来判断该网格应使用哪种对应的加密方式(见表1)。
2 程序设计
2.1 HYPERMESH二次开发介绍
HYPERMESH的前处理功能十分强大,提供了功能丰富的二次开发接口[7]。按开发程度可分为宏命令、Tcl/tk脚本、process manager流程3个等级。鉴于本文仅开发六面体网格过渡加密功能,使用特定模板即可对六面体网格进行加密,只需要用到逻辑判断和条件控制,故利用Tcl/tk脚本及HYPERMESH软件自带的函数来完成开发,即通过HYPERMESH的API函数及Hm命令可以实现所需的功能。关于API函数及Hm命令的功能和用法,读者可以在HYPERMESH的帮助文档中找到详细的说明[8-9]。本开发程序中主要用到的API函数或Hm命令见表2。
2.2 程序流程
首先,根据用户需求,用户单击命令按钮后,程序弹出选择网格单元的面板,提示用户选择需要加密网格单元。其次,用户选择需要加密的网格单元后,程序提取加密网格单元及其节点编号,检测过渡层和加密网格单元中含有加密节点的个数N,考虑到网格加密模板只能对六面体网格进行加密,对所检查的网格网格类型进行判断,若是六面体网格,则根据单元所含有的加密节点个数N使用表1对应的加密模板进行加密,若不是六面体网格,则返回提示用户重新选择六面体网格进行加密(如图4所示)。
2.3 实现功能步骤
(1)创建六面体网格加密命令按钮。在HYPERMESH软件中,专门预留了用户自定义的按钮面板文件userpage.mac,位于软件启动目录或者安装目录路径下,在该文件中添加*createbutton函数便可创建一个快捷按钮,实现与HYPERMESH无缝结合。图5为HexRemesh27命令按钮。创建代码如下:
*createbutton(5,”HexRemesh27”,6,1,20,YELLOW,”Remesh the elements”,”EvalTcl”,”HexRemesh27.tcl”)
该代码目的为在第5页面第6行第1列创建一个宽度为20、名称叫HexRemesh27的按钮,用户点击该按钮后执行HexRemesh27.tcl程序。
(2)为用户提供选择加密网格单元的面板。通过*createmarkpanel函数实现用户点击加密命令后提供选择加密单元的面板。实现代码如下:
*createmarkpanel elems 1 “Select elements:”
(3)提取加密网格单元中的节点号。HYPERMESH会把用户选择的网格单元放在名字为mark的集合1中,通过利用hm_getmark命令可提取出单元号,再结合foreach函数和hm_nodelist命令可以方便地循环提取各个单元的节点号[10]。
(4)检测各网格单元中所包含的加密节点数。一般情况下,要加密的网格单元只占总模型的一小部分,如果程序对模型中所有的网格单元都逐一检测,程序的运行时间会很长。考虑到过渡处的网格最多需要加密单元外的一层,故可以只检测需要加密的网格单元及其外一层的网格单元即可,特别是总模型很大的时候,这样可以减少程序的运行时间,提高程序的运行效率。同样,利用foreach函数和hm_nodelist命令进行循环检测各个网格单元的加密點数。
(5)加密六面体网格单元。根据六面体网格单元中所含的加密节点数,使用对应的六面体网格加密模板加密网格单元。从图3中可看出,加密模板有以下特点:全加密模板就是把一个六面体网格分为27个一样大小的六面体网格单元,边加密模板和面加密模板以这27个小六面体网格单元的节点为基础节点连接生产过渡网格单元。这27个小六面体网格单元的顶点是以原六面体网格加密单元的8个节点为基础生成的,故要先确定加密网格单元的8个节点与模板中的8个节点相对应,才能进行加密,这也是程序的关键步骤。
通过HYPERMESH的API函数或Hm命令是可以获取单元节点的坐标的,但在不知道加密单元空间位置和六面体单元形状不理想的时候,要确定待加密六面体网格的8个节点与加密模板六面体网格的8个节点对应起来则是困难的。
首先,我们可以通过*findfaces命令生成六面体单元的6个面单元来辅助判断,以边加密模板为例说明。?譹?訛确定节点AB。AB两点是容易确定的,观察模板可以发现,A和B位置是可以调换的,只需找出加密单元的加密点,一点标记为A,另一点标记为B即可。?譺?訛确定节点CDEF。确定AB节点后,EF和DC的位置也是可以调换的。找出含有AB 2个节点的2个面单元(命名为1、2号面单元),先对1号面单元分析,AB节点知道了,另外2点以MN字母表示,通过hm_getangle命令获取∠BAM和∠BAN的角度来判断,大者是∠BAD,小者是∠BAC,CD节点即可找到。对于另一个含AB的面单元,同样判断即可找到EF节点。?譻?訛确定节点GH。在包含BCF节点的面单元的第4个节点就是G,剩下一个就是H点。
至此,待加密六面体网格单元的8个节点与加密模板六面体网格的8个节点一一对应,通过*createnodesbetweennodes命令在A、B、C、D、E、F、G、H 8个节点之间创建所需节点,再通过*createelement命令连接相应节点即可创建出边加密的过渡单元。
其次,再来看面加密模板确认的步骤:生成待加密六面体网格单元的6个面单元;找出含有4个加密点的面单元;在确认有4个加密点的面单元中找出边长最短的边,作为AB;接下来,按照边加密的步骤即可找出C、D、E、F、G、H点;生成面模板所需节点和单元。
最后,看全加密模板的确认步骤:生成待加密六面体单元的6个面单元;选出其中一个面单元,再以面加密模板步骤分析即可找出待加密六面体的8个节点A、B、C、D、E、F、G、H。生成全加密模板所需节点和单元。
通过上述步骤,可以确定待加密六面体网格的8个节点与3种加密模板的8个节点一一对应,并生成对应的加密网格单元,即细化加密后的六面体网格单元。
3 应用实例
3.1 圆球压平板网格模型细化
圆球压平板属于点面接触的有限元分析,接触面积相对于整体模型的尺寸来说是很小的一部分,为了获得较准确的接触应力及变形量,需要在接触区域划分尺寸较小的六面体网格单元,同时为减少计算资源,在接触区域外划分尺寸较大的六面体网格单元(如图7所示)。
3.2 圆柱体外层网格细化
圆柱体是有限元分析中典型的零件特征,与其他零件相互作用的区域是其外表面,在划分有限元网格的时候总希望其表层的网格细,圆柱内部网格大一些,以减小网格模型的数量,但由于圆柱的形状是内小外大,所以普通处理很难划出理想的网格。若用本文开发的程序,则可以很方便地实现:首先对圆柱体划分等大的六面体网格单元,然后选择圆柱体外圈的一层六面体网格进行加密,加密前后的四分之一有限元模型(如图8所示)。
3.3 回转支承网格划分
有限元法是研究回转支承的一种重要方法,足够小的网格单元尺寸是获得足够精确结果的保证。图9所示是010.20.200系列回转支承二十四分之一普通六面体网格划分模型。通过2次使用本文开发的六面体网格加密插件进行加密划分,使整体模型的网格数较少,同时在接触区域使用局部加密,保证了有限元模型的准确性。
4 结论
本文利用Ito等人提出的六面体网格过渡加密模板,利用Tcl/tk语言在HYPERMESH环境中开发了六面体网格单元自动过渡加密的插件,实现了自动加密的功能。加密插件充分利用了HYPERMESH软件划分六面体网格的优势,同时加密插件也增强了HYPERMESH软件划分六面体网格的能力。该插件可以大幅减少有限元模型的单元和节点,特别是在需要局部细化加密的六面体网格有限元模型中,节约了大量计算资源,为有限元分析得到准确的结果提供保障。本文开发的六面体网格加密方法,难度系数低,其他类型的六面体网格加密模板也可以通过这种方法实现,如Schneiders的27分法模板和8分法模板[6]、黄丽丽的8分法模板[6],同时也可以在其他六面体网格划分软件如ICEM中进行开发,以满足不同的加密需求。
参 考 文 献
[1]BenzleyS E,Perry E,Merkley K,et al.Acomparison of all hexahedral and all tetrahedral finite element meshes for elasticandelasto plasticanalysis[C].Proceedings of the 4th International Meshing Roundtable,Albuquerque,1995:179-191.
[2]关振群,宋超,顾元宪,等.有限元网格生成方法研究的新进展[J].计算机辅助设计与图形学学报,2003,15(1):1-14.
[3]贺李平,龙凯,肖介平.ANSYS 13.0与HYPERMESH 11.0联合仿真有限元分析[M].北京:机械工业出版社,2012.
[4]Zhang Y J,Bajaj C.Adaptive and quality quadrilateral hexahedral meshing from volumetric data[J].Computer Methodsin AppliedMechanicsandEngineer-ing,2006,195(9/12):942-960.
[5]Ito Y,Shih A M,Soni B K.Octree basedreasonable quality hexahedral mesh generation using a new set of refinement templates[J].International Journalfor Numerical Methods in Engineering,2008,77(13):1809-1833.
[6]黃丽丽,赵国群,王忠雷.栅格法三维六面体网格局部加密算法[J].计算机辅助设计与图形学学报,2010(6).
[7]王钰栋,金磊,洪清泉.HYPERMESH&HyperView应用技巧与高级实例[M].北京:机械工业出版社,2012.
[8]Altair Engineering,Inc.HYPERMESH 10.0 Users Guide[Z].2009.
[9]Altair Engineering,Inc.HYPERMESH 10.0 Reference Guide[Z].2009.
[10]Brent B Welch.Tcl/Tk组合教程[M].北京:电子工业出版社,2011.
[责任编辑:钟声贤]