基于HYPERMESH的六面体网格局部加密插件开发

龙源期刊网 http://www.qikan.com.cn

基于HYPERMESH的六面体网格局部加密插件开发

作者:郑燕娟 李庚袁

来源:《企业科技与发展》2018年第03期

【摘 要】为了解决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 过渡网格加密算法

龙源期刊网 http://www.qikan.com.cn

在网格划分中,很多情况下都是要对一段连续的区域进行细化,如模拟圆球压平板的接触分析中,应力集中的区域占整个模型的很小一部分,常常要在接触点附近区域细化网格,以保证整体有限元模型不会太大,并得到较准确的模拟结果(如图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命令按钮。创建代码如下:

龙源期刊网 http://www.qikan.com.cn

*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的面单元,同样判断即可找到

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4