abaqus子程序python编写_3D


Hello,大家好。好久没更新脚本了,再这里给大家说个抱歉。最近因为被别的事耽搁了,每天回来的比较晚,洗洗就困了,所以专栏停更新了几天,非常抱歉。我会尽量每隔两天更新一篇专栏。这里不只是脚本,还有子程序等等,详情请见我的文集。

今天,更新一篇关于2D圆形骨料的生成,为什么要做2D而不是3D的呢,其实二者的原理都是一样的,我讲了2D怎么做之后,我相信大家自己都能实现3D的随机脚本。心急吃不了热豆腐,先慢慢来,把简单的脚本练习好,基础打扎实了,后面写更为复杂的脚本才会得心应手。

那我们开始今天的教程吧。

1 模型

我们今天的模型是,建立一个2D的随机圆形骨料模型,假设圆形骨料的大小有三种,直径分别为10mm,4mm,1mm。模型的大小自定。

2 算法实现

2.1 abaqus cae里骨料建模

懂得都懂,我们在写脚本的时候是不知道脚本函数是什么的,所以,首先要在cae里建模,然后查rpy文件的内容,最后改写,从而实现。

既然如此,那我们第一步当然是在cae里建模啦。建part,然后2D,shell。画一个矩形框,然后,把骨料的形状切割出来,就有我们想要的结果了。


abaqus子程序python编写_github_02


abaqus子程序python编写_ise生成msk文件的用处_03


切割后的效果如下:


abaqus子程序python编写_建模_04


2.2 rpy文件解析

当我们在cae里做完我们想要的操作之后,在工作目录下的rpy文件就已经把所有的脚本保存了下来。


abaqus子程序python编写_建模_05


打开rpy之后,又是日常的乱七八糟的东西,我在cae里一下子做多了,看的有点乱。大家自己在做的时候,最好是做一步然后看一下rpy,步子不要迈大了,不然的话,就会出现我上面显示的眼花缭乱的代码。大家自己做的时候,千万不要像我这样啊,要一个一个慢慢做。

3 rpy改写与算法实现

下面我来给大家一个个解释这些代码分别表示什么意思。

3.1 生成基体脚本的改写


abaqus子程序python编写_ise生成msk文件的用处_06


这段代码是我们做的第一步,建立一个2D的矩形Shell。看起来有点乱,我们改写一下。注意一下,但凡是session开头的,都是显示的函数,对我们都是没什么用的,可以直接忽略。把它整理一下,然后一些参数以变量的形式表示。整理如下:


abaqus子程序python编写_建模_07


大家可以看出,我们把函数和变量整理一下之后,代码会变得简洁明了。这一步主要是用脚本生成基体的函数,我们在abaqus里运行一下。测试一下,发现没有问题,生成了一个长200,宽100的矩形。


abaqus子程序python编写_ise生成msk文件的用处_08


3.2 骨料的生成脚本改写

我们在abaqus cae里画了很多圆去切割它,它的原脚本从abaqus rpy文件里复制出来如下:


abaqus子程序python编写_建模_09


看的也是挺复杂的,同样的道理,我们把变量重命名,去掉session,改写一下函数如下:


abaqus子程序python编写_3D_10


改写完了之后就剩下4句话。。。。我核实了好多遍,确实其他很多代码都是重复的,没什么用处。改写完之后,运行一下,检查一下脚本有没有问题。可以看出,脚本成功运行。


abaqus子程序python编写_建模_11


3.3 随机骨料的算法实现

目前我们改写之后的整个脚本如下:


abaqus子程序python编写_建模_12


是不是很简单,看的眼不花了。改写脚本的原则是取对你有用的代码,能简则简。能少些一行就少些一行,能不重复就不重复(abaqus原生的rpy文件里有很多重复的代码)。

下面我们要做的就是怎么实现随机的骨料算法了。由于是圆形骨料,所以只需要随机圆心点即可,因为半径是已知的,本次的模型是用的3种半径的骨料。

我们先做个简单的,生成100个半径为5mm的骨料,圆心随机的算法:只需要加个循环,每次循环随机一个圆心。代码如下:


abaqus子程序python编写_建模_13


运行一下脚本,大家可以看到,这里出现了一个问题。圆重叠了。所以在此基础上,还需要加一个接触判断。为随机的圆心位置加限制条件。


abaqus子程序python编写_建模_14


我们对每个新生成的随机圆心点做接触判断,如果与旧的点之间的间距大于半径,就符合条件,把它加到center的列表里,然后经过1000次循环之后,把所有的圆画出来。注意,这里的1000次指的的生成随机点1000个,但是只取符合条件的。再次运行一下脚本,观察现象:


abaqus子程序python编写_abaqus子程序python编写_15


现在,我们的骨料已经规规矩矩的互不干涉了,证明我们的算法没什么问题,虽然写法上可能有点不太雅观,但是总之是把它弄出来了。


abaqus子程序python编写_github_16


3.4 不同骨料大小的配合

当我们实现上述脚本之后,上面只有5mm的骨料,还差1mm,和2mm的骨料。怎么做呢,其实很简单啦,主体部分已经写完了。只需要对其他两种规格稍作改动即可。由于经常做接触判断,我们把接触判断封装成函数。这就是新的5mm半径骨料。


abaqus子程序python编写_abaqus子程序python编写_17


由于2mm骨料不仅要和自身做判断,还要和5mm骨料的做判断。因此有两个判断变量,sign1和sign2,只有这两个变量同时为True的情况,即既不和大骨料相交也不和小骨料相交的情况,随机点才符合条件。


abaqus子程序python编写_建模_18


再运行一下脚本,可以看到,我们把2mm的骨料也成功导入啦。


abaqus子程序python编写_ise生成msk文件的用处_19


最后就是1mm的骨料了,同样的道理,只是这次需要做3次判断,不能和5mm、2mm和自身相交,才是符合的圆心点。脚本如下:


abaqus子程序python编写_ise生成msk文件的用处_20


运行一下脚本,成功运行,如此我们遍把这个脚本写完了。


abaqus子程序python编写_3D_21


所有的代码如下:


abaqus子程序python编写_abaqus子程序python编写_22


abaqus子程序python编写_github_23


abaqus子程序python编写_建模_24


源码在我的github里,开源,想要源码程序的可以自行下载

https:///wuhuiguo/Abaqus


如有不足之处,大家也可指出来,不吝赐教。欢迎大家给我留言,一起讨论。

4 总结

今天的脚本就到这里啦。总结一下今天的内容:

(1)脚本流程,在cae中操作,读rpy文件,然后改写;

(2)改写rpy时,一定要注意精简,不重复,快速找到你需要的函数;如何快速找到你需要的,这需要大量的尝试,练习。脚本没有任何捷径,希望大家能懂,我也是给各位一些例子练习,还需要各位不断的尝试,大量练习,才能大成。

(3)如果大家耐着信子看我写完这2k字,或者看了代码应该有感觉,其实用到的abqus函数命令其实就10多局,大量的工作其实是在做数据处理,比如接触判断。这就是我们做二次开发人写的算法。算法的练习,是我极力推荐大家练习的,它是锻炼逻辑思维的利器。也是二次开发的核心。

(4)大家没事可以自己尝试一下,3D的骨料脚本怎么做,思想其实都一样。下期我也会在写一篇关于3D建模的脚本。