1 模型
我们今天的模型是,建立一个2D的随机圆形骨料模型,假设圆形骨料的大小有三种,直径分别为10mm,4mm,1mm。模型的大小自定。
2 算法实现
2.1 abaqus cae里骨料建模
懂得都懂,我们在写脚本的时候是不知道脚本函数是什么的,所以,首先要在cae里建模,然后查rpy文件的内容,最后改写,从而实现。
既然如此,那我们第一步当然是在cae里建模啦。建part,然后2D,shell。画一个矩形框,然后,把骨料的形状切割出来,就有我们想要的结果了。
切割后的效果如下:
2.2 rpy文件解析
当我们在cae里做完我们想要的操作之后,在工作目录下的rpy文件就已经把所有的脚本保存了下来。
打开rpy之后,又是日常的乱七八糟的东西,我在cae里一下子做多了,看的有点乱。大家自己在做的时候,最好是做一步然后看一下rpy,步子不要迈大了,不然的话,就会出现我上面显示的眼花缭乱的代码。大家自己做的时候,千万不要像我这样啊,要一个一个慢慢做。
3 rpy改写与算法实现
下面我来给大家一个个解释这些代码分别表示什么意思。
3.1 生成基体脚本的改写
这段代码是我们做的第一步,建立一个2D的矩形Shell。看起来有点乱,我们改写一下。注意一下,但凡是session开头的,都是显示的函数,对我们都是没什么用的,可以直接忽略。把它整理一下,然后一些参数以变量的形式表示。整理如下:
大家可以看出,我们把函数和变量整理一下之后,代码会变得简洁明了。这一步主要是用脚本生成基体的函数,我们在abaqus里运行一下。测试一下,发现没有问题,生成了一个长200,宽100的矩形。
3.2 骨料的生成脚本改写
我们在abaqus cae里画了很多圆去切割它,它的原脚本从abaqus rpy文件里复制出来如下:
看的也是挺复杂的,同样的道理,我们把变量重命名,去掉session,改写一下函数如下:
改写完了之后就剩下4句话。。。。我核实了好多遍,确实其他很多代码都是重复的,没什么用处。改写完之后,运行一下,检查一下脚本有没有问题。可以看出,脚本成功运行。
3.3 随机骨料的算法实现
目前我们改写之后的整个脚本如下:
是不是很简单,看的眼不花了。改写脚本的原则是取对你有用的代码,能简则简。能少些一行就少些一行,能不重复就不重复(abaqus原生的rpy文件里有很多重复的代码)。
下面我们要做的就是怎么实现随机的骨料算法了。由于是圆形骨料,所以只需要随机圆心点即可,因为半径是已知的,本次的模型是用的3种半径的骨料。
我们先做个简单的,生成100个半径为5mm的骨料,圆心随机的算法:只需要加个循环,每次循环随机一个圆心。代码如下:
运行一下脚本,大家可以看到,这里出现了一个问题。圆重叠了。所以在此基础上,还需要加一个接触判断。为随机的圆心位置加限制条件。
我们对每个新生成的随机圆心点做接触判断,如果与旧的点之间的间距大于半径,就符合条件,把它加到center的列表里,然后经过1000次循环之后,把所有的圆画出来。注意,这里的1000次指的的生成随机点1000个,但是只取符合条件的。再次运行一下脚本,观察现象:
现在,我们的骨料已经规规矩矩的互不干涉了,证明我们的算法没什么问题,虽然写法上可能有点不太雅观,但是总之是把它弄出来了。
3.4 不同骨料大小的配合
当我们实现上述脚本之后,上面只有5mm的骨料,还差1mm,和2mm的骨料。怎么做呢,其实很简单啦,主体部分已经写完了。只需要对其他两种规格稍作改动即可。由于经常做接触判断,我们把接触判断封装成函数。这就是新的5mm半径骨料。
由于2mm骨料不仅要和自身做判断,还要和5mm骨料的做判断。因此有两个判断变量,sign1和sign2,只有这两个变量同时为True的情况,即既不和大骨料相交也不和小骨料相交的情况,随机点才符合条件。
再运行一下脚本,可以看到,我们把2mm的骨料也成功导入啦。
最后就是1mm的骨料了,同样的道理,只是这次需要做3次判断,不能和5mm、2mm和自身相交,才是符合的圆心点。脚本如下:
运行一下脚本,成功运行,如此我们遍把这个脚本写完了。
所有的代码如下:
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删