在结构仿真中,通常有几十上百个component,如果手动创建每个component对应的材料卡片和属性卡片,工作量大,重复操作多,还容易出错不易察觉,检查起来特别麻烦,可以通过对hypermesh进行二次开发,在通过识别组件名称里的字符串来自动创建材料和属性,并自动赋予对应的组。
为了能自动创建材料和属性卡片,就要求在component命名时包含结构的相关信息,如材料,属性,薄板件还需要厚度。对于不同材料,首先在名称里包含相应的材料牌号,如Q235,6005A等,并通过程序提前创建好这些材料参数,便于后面自动创建材料卡片时调用参数。比方car-Q235-pshell-T5mm,表示材料为Q235,薄壁件用二维壳单元shell模拟,薄壁厚度5mm。car-Q235-psolid,表示材料为Q235,用实体单元模拟,因此不用赋予厚度。通过对关键字的判断就可以创建材料Q235,两个属性卡片pshell和psolid。
以下是一个简单的示例代码,用于根据component名称中的关键字自动生成材料和属性:
# 获取所有component的名称
set components [hm_entityinfo components]
# 循环遍历每个component
foreach comp $components {
set comp_name [hm_getentityvalue components $comp name]
# 判断component名称中包含的关键字
if {[string match "*mat*" $comp_name]} {
# 生成材料
set mat_name "Material_$comp"
*createstringmaterial $mat_name
*createmark components 1 $comp
*assignmaterial $mat_name
} elseif {[string match "*pshell*" $comp_name]} {
# 生成壳单元属性
set prop_name "Property_$comp"
*createentity comps prop_shell $prop_name
*createmark components 1 $comp
*assignproperty $prop_name
} elseif {[string match "*psolid*" $comp_name]} {
# 生成实体单元属性
set prop_name "Property_$comp"
*createentity comps prop_solid $prop_name
*createmark components 1 $comp
*assignproperty $prop_name
} elseif {[string match "*T*" $comp_name]} {
# 生成厚度属性
set thickness [lindex [split $comp_name "T"] 1]
*createentity comps prop_thickness $thickness
*createmark components 1 $comp
*assignproperty $thickness
}
}
这段程序的大致思路是:
1)规范component命名,名称里包含材料,属性(shell,solid),便于程序识别。
2)读取所有component,识别材料和属性关键字符。
3)根据识别字符创建材料和属性卡片
4)将创建的材料和属性卡片赋予对应的component。
本程序以自动化的方式创建了材料和属性,效率高,准确率高,解放了CAE工程师双手和脑力。
本程序仅提高编程思路,请根据你的实际需求和具体的Hypermesh二次开发环境进行调整和修改。