专栏/Abaqus二维多晶体的四边形网格处理脚本

Abaqus二维多晶体的四边形网格处理脚本

2020年12月11日 14:37--浏览 · --点赞 · --评论
粉丝:4554文章:52

    hello,大家晚上好。今天是2020-12-11,马上就到了双十二了,又是一天剁手节。大家都买了什么好东西啊。反正我跟我家的傻狍子一起已经剁手了,坐等凌晨付款了。等我的货到了,我跟你们说我买了什么,哈哈。

    下面就说一下今天的内容吧。今天主要是把昨天没讲完的东西讲完,昨晚搞到凌晨,太困了,就睡了。我们就昨天的内容继续往下说。

    以二维多晶体模型为例。就是我们之前写过的脚本。大家如果做分析画网格的时候,一般都是画出下面这种样子的:

    这种网格也还可以的,好歹还是四边形的。但是对于三维的情况,三维的模型只能画四面体网格。按正常的画网格的方法是很难很难画成六面体网格的。不信大家自己可以试试看。所以就要换一种思路,先把网格画好了,然后再分区域,分别给材料。这种方法是个好办法。特别好的办法。

    我还是展示一下三位的是个什么效果吧:

    下面我们就来说说具体怎么做。做法上,算法上二维和三维的脚本都是一模一样的,只有写法上会有区别,比如二维的faces,在三维模型里就是cells。

1 生成多晶粒的模型

    生成多晶粒的模型的脚本我给大家都写过了,二维和三维的都有,可以看之前的内容。生成好了之后,这个模型是用来参照的。然后在生成一个跟基体大小一模一样的Part,用来画高质量的网格。

    这个脚本,只需要在之前咱们写的那个二维脚本里多加两句话:

2 生成网格

    生成的网格的函数也很简单,定义种子大小,然后直接生成就行,两句代码搞定:

3 遍历单元,做判断

    网格画好之后,现在只需要对每个单元做个判断就行,做什么判断,根据Part1画好的多晶体模型,去判断Part2里的单元所属的是哪个晶粒。大家没懵吧,缕一缕逻辑啊。我们把是属于同一晶粒的单元放在一起,建立一个set。在对set赋予材料。整个脚本就写完了。随机赋予材料的脚本我也讲过,前面的文章里有。这里我就不写了。

    先是初始化一个列表,放属于同一晶粒的单元编号,注意这里是单元编号(label)。为什么不直接存单元呢,是因为后面的建立set的时候,需要用到单元编号。

    初始化之后,遍历Part2的所有单元。判断每个单元的中心点坐标位置,利用findAt函数去查找,这个中心点坐标对应的晶粒是哪个(二维faces,三维cells)。findAt是个特别好用的函数,参数是坐标,返回值是一个对象(edges,faces,cells对象等),可以找到Part的边、面以及体。然后把这个单元的编号,放在初始化的数组里。对每个单元都操作一次,就可以按照Part1的晶粒划分方式区分开了。

    区分完成后,所有的信息都储存再列表里,还需要在abaqus里实现,这就需要建立set。

    运行一下脚本,按set划分之后的结果如下。

    对于三维的情况也一样,大家可以根据我的脚本思考一下,想想应该怎么改。今天的源代码,老规矩,评论区置顶。

    好啦,今天的内容稍微简单一点。但是还是有几点新东西值得学习的,比如findAt函数。有时间你们可以自己尝试尝试,咱们明天见。88啦(明天写子程序,VDLOAD,explicit的子程序)

百无禁忌

投诉或建议