嗨,大家晚上好!
豆豆又有许久没看公 众号,今日打开看见人数还在蹭蹭蹭的增加,感谢大家的支持。
这次继续分享hypermesh二次开发案例。
CAE工作中,前处理最为消耗时间,网格划分、模型检查,载荷施加。网格模型正确,是正确求解的基础。
模型检查包括,重复单元,不符合质量标准单元,是否正确创建属性,材料等。
hypermesh提供了一个模型检查工具,在nastran下,选择下拉菜单Tools-Model Checker-Nastran,check这个功能,能够检测出如图所示的错误类型。
当然,检查过程中少不了的一步是,模型自由边检查。
为什么需要检查模型自由边,如果在模型关注位置,存在非正常自由边,节点不连续,将会导致计算结果与实际存在偏差。
说了这么多,今天的主体部分来了。
关于模型自由边的检查脚本。
视频中用到四个过程,
Translate
Translate_Test
CheckEdge
CheckEdge_Auto
视频内容为:
1、使用Translate_Test 生成了8个测试Comps,
2、使用CheckEdge演示了手动检查自由边的脚本用法,当前Comps没问题点击Esc,进入下一Comps检测,如有问题,点击Comps自动将模型放到名为FreeEdge的Assembly中。
3、使用Translate生产了50个Comps,
4、使用CheckEdge_Auto自动检测模型自由边。
手动检查自由边的方法,模型少没问题,检查起来没问题,但如果模型数量扩大到白车身层级,检查起来眼花缭乱,看同一事物太长时间,容易疲倦,对于事物的判断能力下降。
之前某一天灵光一现,故写了一个自动检测模型非正常自由边的方法,效果参见视频。目前还存在BUG会将正常孔的边缘查找出来,但是是个例,如视频所示,仅有一个Comps产生错误识别。
豆豆还想着把公 众号做大做强,继续分享,奈何脑容量只有那么大,知识只有那么多,故hypermesh二次开发系列的下一篇文章,再分享自动检测模型自由边脚本。
手动检测自由边,以及平移模型脚本如下:
1proc CheckEdge { } {
2 *createmarkpanel comps 1 "select Comps"
3 set CompsIDS [hm_getmark comps 1]
4 catch {*createentity assems name=FreeEdge}
5 set AssemblyID [hm_getvalue assems name=FreeEdge dataname=id]
6 foreach CompsID $CompsIDS {
7 *createmark comps 1 $CompsID
8 *createstringarray 2 "elements_on" "geometry_on"
9 *isolateentitybymark 1 1 2
10 *findedges1 components 1 0 0 0 30
11 *view "iso1"
12 *createmarkpanel comps 1 "Check"
13 if {[hm_getmark comps 1] != ""} {
14 *createmark comps 1 $CompsID
15 *assemblyaddmark $AssemblyID components 1
16 }
17 *deleteedges
18
19 }
20}
21#########################################
22
23proc Translate {} {
24 hm_createmark element 1 "advanced" "displayed"
25 set elementID [hm_getmark element 1]
26 for {set i 0} {$i < 50} {incr i} {
27 hm_createmark element 1 $elementID
28 catch {*createentity comps name=Comps_$i}
29 *duplicatemark elements 1 1
30 hm_createmark element 1 $elementID
31 *createvector 1 0 0 1
32 *translatemark elements 1 1 5
33 }
34}
手动检测自由边的脚本还有优化的空间:
1、比如判断当前模型是否存在名为FreeEdge的Assembly,再考虑是否创建Assembly
2、由于当前网格都是真实着色状态,自由边的的红色Plot单元并不是很明显,可以增加控制模型显示的代码,以突出显示自由边。