abaqus python二次开发攻略_基于Python脚本在Abaqus中实现Voronoi图绘制

acb6d044f4daa7403251fe31180ef8b7.png

源:吴冠中作品

点击关注CAE仿真空间

点亮“ 在看 ”,优质内容不错过

Voronoi图也叫泰森多边形,它是由一组由连接两邻点直线的垂直平分线组成的连续多边形组成。在地理学、气象学、结晶学、航天、核物理学、机器人等领域具有广泛的应用,比如化学领域晶体结晶过程的模拟,站点选址、辖区管制边界等问题。

对于仿真问题,可以借由abaqus来实现有关单元的创建,这里我们不涉及具体领域的理论和应用过程,仅提供关于实现有关图形创建的思路和过程。

在abaqus中利用python实现Voronoi图(以二维图为例)的基本思路是生成Voronoi图的顶点,然后通过脚本在abaqus绘制草图完成。那么获取顶点坐标是关键,我们利用python的数据包scipy以及matplotlib来编写完成,scipy自带Voronoi图的api函数,所以使用起来比较方便,当然小编查了网上的资料发现MATLAB实现起来也很简单,这里对此不做介绍。

对于使用新版本比如abaqus2020的用户,软件已经内部自带python2.7.15和python3.7.3,而且附带带有scipy以及matplotlib,这简直是开发者的超级福音,需要做二次开发并且调用外部包的用户直接配置就行,非常方便。

下面我们来看看怎么实现Voronoi图的绘制。首先获得各顶点坐标,如图-1所示部分代码完成二维的Voronoi图绘制,直接调用Voronoi函数使用(如图-2所示),生成的虚线表示边界顶点存在无穷远点(这是本代码不足的地方,需要在完善,暂时仅供参考)。

 1final_points=[]
2for i in initial_points:
3    x,y=i
4    random_num=random.uniform(-1,1)
5    x = x + ((random_num * a)/2 )
6    y = y + ((random_num * a)/2 )
7    final_points.append([x, y])
8vor=Voronoi(final_points)
9voronoi_plot_2d(vor,show_points=True,show_vertices=False,line_colors='red',
10                line_width=1,line_alpha=1,point_size=0.1)
11plt.show()

图-1 部分代码

45d98222a0f4b36e4cec793698ec6194.png

图-2 生成Voronoi图结果

利用代码产生abaqus运行的python脚本,其中图-3代码用于对图-2的结果进行着色,相关代码均有开源,本文做了一些简单修正和补充,最后可以看到着色之后图-4的效果。
1for region in vor.regions:
2    if not -1 in region:
3        polygon=[vor.vertices[i] for i in region]
4        plt.fill(*zip(*polygon))
5plt.xlim([0,50]), plt.ylim([0,30])
6plt.show()

图-3 Voronoi图着色代码

5feeba0d8ddf66d9cd61eb3f27cd30ff.png

图-4 着色效果

有了生成的坐标,利用abaqus自带的api函数我们开始在abaqus的Voronoi图绘制,部分代码如下(图-5)所示,导入需要的所有包,根据以前提供的python开发思路编写脚本提交运行即可。 最终我们可以得到在abaqus中显示的Voronoi图(虚线多边形有待完善),如图-6所示我们生成了二维的Voronoi图并且进行了不同颜色的标注,同时对各个区域做了简单的自动网格划分,结果如图-7所示。 对于晶体的断裂仿真问题可以直接利用泰森多边形结合离散元的方法进行模拟,不过这属于更加专业的范畴,小编也不熟悉,不再过多阐述。 最后录制了一个运行的动图,记录整个abaqus运行脚本并生成结果的过程,如图-8所示,当然进一步做也可以完全做成一个小的插件界面,改变二维尺寸参数、多边形大小、网格密度等自动实现全过程的生成。
 1from abaqus import *
2from abaqusConstants import *
3import __main__
4
5####
6导入abaqus各模块,为了防止出错把能想到的全部导入
7####
8
9s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__',
10                                            sheetSize={sheetSize})
11g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints
12s.setPrimaryObject(option=STANDALONE)
13s.rectangle(point1=(0.0, 0.0), point2=(%%你自己定义的尺寸大小%%))
14p = mdb.models['Model-1'].Part(name='Part-1', dimensionality=TWO_D_PLANAR,
15                               type=DEFORMABLE_BODY)
16p = mdb.models['Model-1'].parts['Part-1']
17p.BaseShell(sketch=s)
18s.unsetPrimaryObject()
19p = mdb.models['Model-1'].parts['Part-1']
20session.viewports['Viewport: 1'].setValues(displayedObject=p)
21del mdb.models['Model-1'].sketches['__profile__']
22p = mdb.models['Model-1'].parts['Part-1']
23f, e, d1 = p.faces, p.edges, p.datums
24t = p.MakeSketchTransform(sketchPlane=f[0], sketchPlaneSide=SIDE1, origin=(
25    0.0, 0.0, 0.0))
26
27#####
28
29其它代码省略
30......
31......
32
33#####

图-5 abaqus中的python脚本

ab290f4a3b5920e7fdfe6bcccae3cc58.png

图-6 abaqus中显示效果

23748732d22f8aa7607a24635bf6fb41.png

图-7 自动网格生成

9e8185d34cdb34749bbc79819eebd073.gif

图-8 脚本运行过程

以上,是针对二维Voronoi图在abaqus中实现的过程进行的简单阐述,对于三维图则可以利用已有的二维面来生成,这点MATLAB似乎更简便,后续将抽时间进一步研究,欢迎大家分享交流,接下来也将和大家交流更多关于CAE方向的python编程知识,敬请期待~ 加班加点写文章整理不容易,所有源代码将象征性收费( ¥8.8元 ),后台消息窗口回复 “源代码” 并添加小编微信获取支持,也欢迎 转发 在看 文章!

致谢及参考:

1.@Akash Ravi,Cisco

2.http://wufengyun.com:888/v6.14/books/ker/default.htm

3.https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.Voronoi.html?highlight=scipy%20spatial#scipy.spatial.Voronoi

更多内容请参考

1.基于Python的ABAQUS开发介绍(一) 2.基于Python的ABAQUS开发介绍(二) 3.基于Python的ABAQUS开发介绍(三) 4.基于Python的ABAQUS开发介绍(四) 5.Simwe论坛下ABAQUS板块的简单爬虫实践 6. 这才是底层网格算法的无穷美学【附常见网格专用处理工具】 7. 推荐一款轻量编辑器在abaqus仿真和编程开发中使用 8. CAE工程师崩溃的10个瞬间 9. 瞎聊:机械工程专业的那些王牌学校和实验室 10.STL文件,一种前处理网格划分技术?? 11. CAE仿真软件中的“华山论剑五绝”解读 12. CAE仿真领域 | 数一数2019国家科学技术奖励项目有哪些?

e32d1439e5981714f0cf0b37d859fe75.gif

c71684b23fbcaacdded82ddf9749add5.png

点亮“在看”支持一下!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值