Hypermesh二次开发:基于网格washer
Hypermesh二次开发:基于网格washer
在工程仿真领域,Hypermesh是一款常用的网格划分软件。本文将介绍如何通过TCL脚本在Hypermesh中实现网格washer的二次开发,这对于提高仿真精度和效率具有重要意义。
一、概述
washer一般是指在孔的周围做几层呈环状结构分布的较为规则的四边形网格。
在以下场景可能会用到这种结构的网格划分:
使用rbe2刚性单元模拟板的螺栓连接时,如果要做得比较精细一些,可以将螺栓孔周围的网格做成washer,这样的好处在于可以使孔周围的刚度更均匀一些,更接近真实。
比较关注某些孔或某些封闭环状孔结构的应力,或该位置有较大的应力梯度,需要对该位置精细处理的。可以将该处做成washer,这样能够得到更真实合理的应力分布。
当然实际应用可能并不止这两个场景,不同行业不同产品对网格处理可能都会有差异,没有固定的定律,只有结合实际情况的更合理。
二、实现方式
对于washer,其实Hypermesh面板的命令本身也可以实现。如果模型中还存在几何模型,那么可以先通过Geom>quick edit>washer split命令先将几何做成washer,再划分网格。如果没有几何了,可以通过2d>rebuild mesh命令便可生成washer,甚至2d>automesh>batchmesh/QI optimize还可以实现批量将孔做成washer。但以上命令可能在某些场景下并不够灵活,因此本文提供一种通过基于Hypermesh支持的tcl脚本命令实现手动在网格上做washer。
核心的实现方式是Hypermesh的*add_multi_washer_elements命令,命令的相关细节可在Hypermesh的help文档查询:
运行这个命令之前需要先通过*createstringarray命令创建其需要的stringarray参数,代码如下。
proc add_washer {layer_number layer_width hole_density} { ;#layer_number:wahser层数 layer_width:每一层washer的宽度 hole_density:将孔分成多少段
*createmarkpanel node 1 "select the free edeg node." ; #交互式选择需要washer的孔的节点
*createstringarray 2 "layer_number = $layer_number uniform_layers = 1 hole_density = $hole_density" "1 $layer_width" ; #创建*add_multi_washer_elements所需的stringarray参数
*add_multi_washer_elements 1 30 1 2 0 0 1 1 ; #执行washer
*clearmarkall 1 ; #清除所有mark
}
该代码定义了一个tcl函数,使用时需要先新建一个文本文档,将代码内容复制进去,并将文件后缀名更改为.tcl。然后按照以下方式运行该tcl脚本,运行完不会有效果。
打开Hypermesh tcl语言解释器
在下方的tcl语言解释器输入add_washer函数命令:命令的第一个参数是washer的层数,第二个参数是washer的宽度,第三个参数是孔整圈的分段数,都通过空格分开。
运行后出现选择节点的界面,每个需要做washer的孔只需要选择孔上的任意一个节点即可。
运行完成,运行后发现效果不是很好,可以按方向键上,重新运行该命令,调整washer层数、分段数、和宽度尝试。
重新运行该命令,当分段数调整到15时,网格整体效果还不错。
这个脚本很简单,但还是很实用,可以很方便的手动调整或增加单个或多个孔的washer。但是注意,该命令有个缺点,运行后撤回不了,建议使用该命令前先保存。