在科研和工程实际问题中,经常会涉及到随机几何元素,例如:混凝土骨料、随机纤维复合材料、多孔介质材料的传热和渗流问题、生物材料的细观特征等等。这些材料中包含大量随机尺寸、随机位置分布的几何特征,在有限元建模中可以使用自编二次开发程序的方法来实现复杂的几何模型构造。
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个孔,则几乎无法 正常实现。这是为什么呢?
这是由于我们没有对孔的重合进行检验,造成圆与圆之间相互重叠交叉,无法完成拉伸动作。