Hello,大家晚上好。今天是2020-12-06,周日。昨天听更了一天,懒了一把,最近一直在看电影,好电影是真的精彩,大呼过瘾。昨天又把我最喜欢的一部爆裂鼓手看了一遍,在b站看的,但是跟我以前看的不一样,上b站之后中文字幕翻译的不够地道。原因是在爆裂鼓手里,演员极度炸裂的情感抒发下,是源于对语言的把控,让人感觉到非常的真实,说直白点,就是电影的炸裂的场景都是要说脏话的。但是上了这些大平台之后,你懂得,翻译的肯定不敢那么到位了,回头我把以前的资源分享给大家,那个版本翻译的好。力荐。
开场白说完了,开始今天的内容吧。上一期我们分享了关于2D多晶体建模的脚本,我本以为大家可能都用不上,但是出乎意料的事还是有粉丝需要的,因为上次那个二维的脚本没写好,本来是打算今天完善一下的,然后有粉丝给我留言说想让我出一期关于赋予晶粒随机取向的脚本,刚好我就在这里一并说了。
当然了,如果你不用上多晶粒的建模,你也可以当个例子做一下,保不齐你以后就需要了呢对不对,收藏一下以后学当然也是可以的啦。
首先说一下上次写的哪里不好,不知道大家发现没,我也就不卖关子了,直接说了。
就是这一句,我当时在布置局部种子点的时候,范围是高出基体长款的1.3倍的,为什么要这么做,我给大家解释一下。我把这句改一下,去掉1.3的倍率,让种子点的范围就在基体范围内。然后运行这个脚本看一下效果:
大家可以看到,拐角区域的晶粒是没有分割完全的。解决办法呢有两个,一个办法是扩大种子点的范围,因为分割不完全的区域只在边缘处,这就是为什么我要乘以一个1.3倍数的原因。这算是个投机取巧的办法。第二个办法就是把边缘处处理好。
我再解释为啥边缘没切好。这要从scipy里的Voronoi类说起了。
左边的图是scipy类切割的,右边的是我在abaqus脚本里重构的图。这两个图的区别在于,很明显,是左图里多了虚线,这个虚线就是我们没有在abaqus脚本里画出来,才导致最后的结果边缘处没有切割。这就是它的原因。所以今天的目的,就是在把虚线的部分,在abaqus里重构出来。
当然,这部分看似好像挺简单,但是实际上是不那么简单的,好在scipy文档里有提过无线边(虚线)怎么画。我就参照了它的代码(其实我是直接拷贝过来的,咳咳),把剩下的画出来,在python3上运行的结果如下:
我把在python3上的程序也复制过来,大家也可以自己玩玩看(公众号里有源码,公众号里有源码,可以赋值的那种):
那么,证明了我们的程序没错之后,就要把它移植到我们的脚本里去了。移植的办法也很简单,只需要把无线远的边的两点坐标找到,然后在abaqus的草图里画出来就行了,测试一下结果完美。
这样,这个二维的多晶粒建模脚本才算完美。二维多晶更新版脚本的源码附上,大家可以参考参考:
如果是以前的话,现在我肯定要跟你们说88了。今天例外,我把赋予晶体随机取向的脚本也一并说了。
首先解释一下原因,考虑到有些小伙伴没做过晶体塑性力学分析,如果说,你就直接那这个模型去做分析的话,那么你做这种切割,除了让你的网格变得难画之外(被迫用四面体网格),没有任何其他的效果的。(当然多晶体模型是可以画六面体网格的,用脚本做,以后有机会我会讲)。不知道大家懂我意思没,如果你赋予材料都一样的画,它本质上还是一个整体,你切的这么多花花绿绿的是没有任何效果的。
所以,如果你想让你的功夫不白费的话,花这么多功夫,又是学脚本,又是学晶体塑性力学的,总不能只是为了画四面体网格吧。。。。。。想让你的多晶模型起效果的办法就是采用晶粒塑性力学材料。就是用黄永刚的晶体塑性力学UMAT子程序。我只大概了解过,又想了解的可以去下载一下。怎么随机赋予取向呢。下面我就一步步说了。
我们的思路是,你得新建材料,每一个取向,就是一种材料。然后把这些材料属性分别赋予每个晶粒。捋一下脚本思路:
1 新建材料,赋予随机取向
2 建立section
3 把section赋予给一个晶粒
4 循环1-2-3,直至所有晶粒都有材料属性了
那么我们就来一步步说具体怎么做:
1 新建材料,赋予随机属性:
当然是打开我们的PythonReader了,有不知道是什么,请一定看我以前的专栏,我写的还算详细,微信公众号还没有迁移过来,抱歉,去bilibili搜无悔果,找脚本文集,里面有教程下面还有软件。然后再cae里新建材料,加属性。找脚本函数。这个太熟悉了吧,我就不多说了。
取向的定义方法,就是在UMAT的Property里给出,我记得huang.for的那个晶体塑性力学UMAT里的属性需要定义100多个,取向是3个,具体是哪个位置我记不清楚,我把方法说一下,以前3个为例。然后取向3个数之和要是1,(是吧,如果我说错了,记得指正一下),我们今天只说方法啊,大家可以自行改写一下。
这个新建的材料的脚本很简单,把脚本函数赋值到pycharm里改写一下:(我这里取向的a,b,c 3个量是给了个随机的,但是实际上他们三者还是要有关联的,我讲的是方法,算法还需要大家自己完善)
直接运行,测试一下,新建20个:
我相信,这样的脚本大家写来应该非常得心应手了。so easy了。第一步做好,就开始第二步,建立section
2 建立section
这一步也没啥难度,cae里操作一下,然后改写一下:
运行一下,测试效果:
接下来,就是最后一步,赋予材料属性了,还是老规矩,cae里操作,开发环境改写,我嘴皮子都要磨破了,你们可能都听烦了,大家应该会了吧。。。。。觉得我啰嗦的,评论区留言打个1,告诉我,下次我讲点进阶一点的东西,这些简单操作我就略过了。
其实赋予材料的函数,也就两句:
4 循环1-2-3
最后一步是循环,其实细心的小伙伴发现,我们已经把循环加上了。那么怎么和晶粒联系起来呢,大家记得我刚才所说的话,一个晶粒就是一个材料,那么我只需要遍历晶粒的数量做循环即可,晶粒的数量又是多少???当然是我们的Part里的faces数量了,有多少被分割的face,就有多少晶粒。
到这里大家应该明白我们的脚本怎么写了,只需要在之前二维建模脚本后加上一点我们刚才分析的内容就行了。
最后运行的结果如下,现在就是每个晶粒有单独的取向了,按不同的材料显示颜色也是花花绿绿的了。(如果你的属性给的对的话,加上晶体塑性力学的UMAT子程序),就能做分析了:
最后的代码其实就是把上面两部分加起来就行了,下载见评论区置顶。
好啦,我们今天的内容就到这里了,有疑问和问题的,欢迎大家跟我讨论,88了,我们下期再见。下期我出个子程序的教程吧。88,88
主孰有道?将孰有能?天地孰得?法令孰行?兵众孰强?士卒孰练?赏罚孰明?吾以此知胜负矣。