首页/文章/ 详情

仿真笔记——Abaqus的Python批量随机几何二次开发建模(附案例代码)

1年前浏览3624



在科研和工程实际问题中,经常会涉及到随机几何元素,例如:混凝土骨料、随机纤维复合材料、多孔介质材料的传热和渗流问题、生物材料的细观特征等等。这些材料中包含大量随机尺寸、随机位置分布的几何特征,在有限元建模中可以使用自编二次开发程序的方法来实现复杂的几何模型构造。  

Abaqus支持使用Python语言进行二次开发建模,用户可以利用Python代码达成特殊的建模要求。在批量随机几何建模问题中,有两个关键词:一是批量、二是随机。  

1、批量建模  

批量建模主要用到的技巧是循环。在此我们介绍两种常用的Python语言循环控制代码格式。  

首先是while循环,也就是“当循环”。我们直接看一个例子:  

i=1  while i < 6:      print i      i=i+1      我们观察以上代码,它的意思是:当i小于6的时候,执行print i的命令,直到while后面的条件不成立(即i大于等于6)为止。在循环前,我们给i幅值为1,每一次循环又让i在原来基础上加一,这样就实现了循环打印五个数字的效果。这里的i一般用于循环计数,自加的操作可以让它记录循环次数。  

注意:while下面的执行语句要空四个格!  

第二种方式是for循环,也就是“历遍循环”。还是直接看例子:  

a=[1,2,3,4,5]  for i in a:      print i      这段代码首先定义了一个列表a,它包含五个元素,分别是12345这五个整型变量。for i in a:的意思是让虚拟元素ia中逐个变化,也就是第一次循环时,i=1,第二次循环时,i=2,依次把五个元素历遍后循环终止。这段代码的实现效果与第一段代码相同。  

同样需要注意,for下面的执行语句也要空四个格!  

2、随机建模  

随机建模主要用到的技巧是产生随机数字。这就要用到Python的随机模块random了。我们首先输入import random引入随机数模块,然后就可以使用这个模块下面的方法来产生随机数了。这里,我们介绍三个常用的函数:  random.random()        #生成0-1的随机小数  random.uniform(a,b)   #生成a-b之间的随机  random.randint(a,b)    #生成a-b之间的随机整数      使用这些函数,就能产生我们需要的随机数了。  

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个孔,则几乎无法 正常实现。这是为什么呢?  

这是由于我们没有对孔的重合进行检验,造成圆与圆之间相互重叠交叉,无法完成拉伸动作。那么如何避免这种情况的发生呢?


来源:CAE仿真学社
Abaqus复合材料多孔介质二次开发建筑python材料控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-09-09
最近编辑:1年前
CAE仿真学社
硕士 | CAE仿真工程师 万物皆可仿,关注CAE仿真学社
获赞 151粉丝 288文章 296课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈