Abaqus支持使用Python语言进行二次开发建模,用户可以利用Python代码达成特殊的建模要求。在批量随机几何建模问题中,有两个关键词:一是批量、二是随机。
1、批量建模
批量建模主要用到的技巧是循环。在此我们介绍两种常用的Python语言循环控制代码格式。
首先是while循环,也就是“当循环”。我们直接看一个例子:
i=1
注意:while下面的执行语句要空四个格!
第二种方式是for循环,也就是“历遍循环”。还是直接看例子:
a=[1,2,3,4,5]
同样需要注意,for下面的执行语句也要空四个格!
2、随机建模
随机建模主要用到的技巧是产生随机数字。这就要用到Python的随机模块random了。我们首先输入import random引入随机数模块,然后就可以使用这个模块下面的方法来产生随机数了。这里,我们介绍三个常用的函数:
3、应用举例
下面我们用一个实例来说明建模的具体过程。这里我们希望建立一个100*50*10的方板,然后在上面随机位置打10个孔,孔的直径在2-10之间随机变化。我们首先打开Abaqus cae软件,创建带一个孔的方板来提取对应代码。
点击工具栏左上角的“create part”按钮创建部件。
然后在对话框中保持默认,单击“continue”进入二维草图。
在草图界面绘制一个长宽为100*50的矩形,在中间创建一个直径为10的圆。
单击“done”后,在对话框输入拉伸深度为10,单击OK。
如此,我们就获得了带一个圆孔的方板。
下面,我们在Abaqus的工作目录下面找到后缀名为rpy的文件,里面记录了刚才所有操作的Python代码。将它以文本格式打开后,提取建模过程的有效代码如下:
from abaqus import *
from abaqusConstants import *
s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__',
sheetSize=200.0)
g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints
s.setPrimaryObject(option=STANDALONE)
s.rectangle(point1=(0.0, 0.0), point2=(100.0, 50.0))
s.CircleByCenterPerimeter(center=(50.0, 25.0), point1=(50.0, 30.0))
p = mdb.models['Model-1'].Part(name='Part-1', dimensionality=THREE_D,
type=DEFORMABLE_BODY)
p = mdb.models['Model-1'].parts['Part-1']
p.BaseSolidExtrude(sketch=s, depth=10.0)
s.unsetPrimaryObject()
p = mdb.models['Model-1'].parts['Part-1']
session.viewports['Viewport: 1'].setValues(displayedObject=p)
del mdb.models['Model-1'].sketches['__profile__']
可以发现,其中标红的两句为创建矩形和圆形的命令。圆形给出了圆心坐标和圆上一点的坐标。我们可以对这行代码稍加修改,完成批量随机几何建模。讲圆创建的代码改为:
i=0
while i < 10:
zhijing=random.uniform(2,10)
x_center=random.uniform(zhijing,100-zhijing/2)
y_center=random.uniform(zhijing,50-zhijing/2)
s.CircleByCenterPerimeter(center=(x_center, y_center), point1=(x_center, y_center+zhijing/2))
i=i+1
这样就实现了圆心位置随机,直径在2-10之间随机的10个圆的绘制。这里用到了random模块,所以不要忘了在整个程序前面加上import random。
我们重启Abaque后,单击菜单栏中的“file”,然后点击Abaqus PDE进入python开发环境。新建一个文件后,复 制以上改好的代码,注意空格的格式,确认无误后保存。
将运行位置选项卡“run in”后面点选为“kernal”。最后单击右箭头“play”按钮测试运行效果。
这时,我们发现,有时程序可以正常运行,而有时确无法运行。当我们把循环次数增加时,例如打50个孔,则几乎无法 正常实现。这是为什么呢?
这是由于我们没有对孔的重合进行检验,造成圆与圆之间相互重叠交叉,无法完成拉伸动作。那么如何避免这种情况的发生呢?