在结构仿真中,模型前处理占据大部分时间,大型模型往往有几百上千个组,当经过多次模型更改后或者换了CAE工程师处理模型,想要检查所有组是否赋予了材料和属性,以及壳单元厚度是否符合要求,一个个检查费时费力,还容易出错。
用TCL语言对HyperMesh进行二次开发,可以实现用以下代码对所有包含壳单元的组件进行检查,判断是否已分配材料和属性,以及检查板厚是否大于0。对于未分配材料和属性或板厚为0的组件,将其ID号输出到一个TXT文档中。
程序主要部分如下:
# 打开TXT文件准备写入数据
set fileId [open "output.txt" w]
# 获取所有存在壳单元的组件
set components [hm_entitylist comps "by config" ""]
# 循环遍历每个组件
foreach comp $components {
# 获取组件的ID
set compID [hm_getentityvalue comps $comp id]
# 检查组件是否有材料和属性
set material [hm_getvalue comps id=$compID dataname=material]
set property [hm_getvalue comps id=$compID dataname=property]
# 检查板厚是否大于0
set thickness [hm_getvalue comps id=$compID dataname=thickness]
# 如果未分配材料或属性,或者板厚为0,则将组件ID写入TXT文件
if { $material == "" || $property == "" || $thickness <= 0 } {
puts $fileId "Component ID: $compID"
}
}
# 关闭TXT文件
close $fileId
这段程序的大致思路是
1.遍历所有component,是否存在壳单元,对存在壳单元的组进行下一步。
2.获取所有存在壳单元的组的ID号,便于后面输出。
3.判断每个组是否有材料和属性,板厚是否大于0。对不符合条件的组输出ID号至TXT文档。
至于板厚和数模是否相符,还需要更多的设置,首先需要在所有壳单元组名称加上板厚,如_3mm,表示板厚3mm,在程序中增加判断语句,提取名称中的此字符串和属性中的厚度判断,相同跳过,不同输出属性ID号,输出到TXT-prop。