首页/文章/ 详情

所建有限元模型,某些参数是随机的,如何实现?

8月前浏览9363

有多名读者给我发邮件,问过类似的问题:有限元建模过程中,某些参数是变化的、随机的(例如,混凝土结构中不同级配的骨料、地下开采过程中大小、形状不同的砾石等),该如何建模?  

当遇到随机分布的变量时,则通常需要用到 Python 标准库中的 random 模块,该模块中包含多个函数,可以生成随机的浮点数、整数、字符串类型的数据、或随机选择列表序列中的一个元素、打乱一组数据等。  

下面简单介绍 random 模块中的常用函数:  

1. random()函数  

该函数是 random 模块中最常用的方法,将随机生成一个0.0~1.0之间的浮点数。例如:  

--------------------------------

>>> import random

>>> print random.random()

0.809221478124

--------------------------------

提示:循环调用 random 模块中的 random 函数,可以生成读者需要的所有浮点数,下同。  

2. uniform()函数  

该函数的原型为:random.uniform(a, b),用于生成一个指定范围内的随机符点数,两个参数 a b 分别表示上下限。如果a > b,则生成的随机数n a < = n < = b。如果 a < b b < = n < = a。例如:  

--------------------------------

>>> import random

>>> print random.uniform(10,20)

13.2960134544

>>> printrandom.uniform(20,10)

15.9038751838

--------------------------------

3. randint()函数  

该函数的原型为 random.randint(a, b),用于生成一个指定范围内的整数。其中参数a 是下限,参数 b 是上限,生成的随机数 n: a < = n < = b。例如:  

---------------------------------------------

>>> import random

>>> print random.randint(10, 100)

73

>>> printrandom.randint(100,10) # 下限必须小于上限,否则抛出 ValueError 异常  

Traceback (most recent calllast):

File"<stdin>", line 1, in <module>

File"d:\SIMULIA\CAE\2019\win_b64\tools\SMApy\python2.7\lib\random.py",line241,in randint

return self.randrange(a, b+1)

File"d:\SIMULIA\CAE\2019\win_b64\tools\SMApy\python2.7\lib\random.py",line217,

in randrange

raise ValueError, "empty range forrandrange() (%d,%d, %d)" % (istart, istop, width)

ValueError: empty range forrandrange() (100,11, -89)

---------------------------------------------

4. choice()函数  

该函数的原型为 random.choice(sequence),其参数为一个序列(sequence)该函数可以从任何序列(例如列表)中选取一个随机的元素返回。例如:  

---------------------------------------------

>>>print random.choice('abcdefg')

c

>>> printrandom.choice ( ['apple', 'pear', 'peach', 'orange', 'lemon'] )

pear

-------------------------------------------

5. shuffle()函数  

该函数的原型为 random.shuffle(x[, random]),用于将一个列表中的元素顺序打乱。例如:  

---------------------------------------------

>>> p =["Python", "is", "powerful", "simple","and so on..."]

>>> random.shuffle(p)

>>> print p

p = ["Python","is", "powerful", "simple", "and soon..."]

---------------------------------------------

提示:本节中调用的函数都是随机函数,因为输出结果是随机的,读者运行后的输出结果可能与书中不同,这是正常现象。  

6. randrange函数  

该函数的原型为 random.randrange([start], stop[, step]),功能是从指定范围按指定基数递增的集 合中获取一个随机数。例如,random.randrange(20, 50, 4),结果相当于从序列 [20, 24, 28, 32, ... 44, 48] 中获取一个随机数。其执行结果与 random.choice(range(20, 50, 4) 执行结果等效。例如:  

---------------------------------------------

>>>import random

>>>random.randrange(20,50,4)

36

---------------------------------------------

7. sample(seq, n)函数  

该函数的功能是从序列 seq 中随机截取指定长度 n 的序列,原序列中的元素顺序不变。  

---------------------------------------------

>>> import random

>>>list=[1,2,3,4,5,6,7,8,9,10]

>>> a=random.sample(list,5) #list中随机获取5个元素,作为一个新序列返回  

>>> print a

[1, 6, 10, 8, 3]

>>> printlist #原有序列并没有改变  

[1, 2, 3, 4, 5, 6, 7, 8, 9,10]

---------------------------------------------

掌握了上述随机函数的使用方法,读者就可以根据需要构造随机生成的元素序列,并根据需要构造所需的随机模型。  

笔者编写的随机生成10个不同半径的圆形部件的源代码如下:  

---------------------------------------------

1#!/user/bin/python

2.# -* - coding:UTF-8 -*-

3# 导入所有相关模块  

4from abaqus import *

5from abaqusConstants import *

6import random

7from caeModules import *

8from driverUtils import executeOnCaeStartup

9# 下列代码直接复制abaqus.rpy文件中的内容  

10session.Viewport(name='Viewport: 1', origin=(0.0, 0.0),width=157.919921875,

11    height=80.3541717529297)

12session.viewports['Viewport: 1'].makeCurrent()

13executeOnCaeStartup()

14session.viewports['Viewport: 1'].partDisplay.geometryOptions.setValues(

15    referenceRepresentation=ON)

16s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__',sheetSize=200.0)

17g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints

18s.setPrimaryObject(option=STANDALONE)

19#构造列表data[],用于存储10个由随机函数生成的圆形部件的半径  

20data=[]

21#调用append方法追加数据  

22for i in range(0,10):

23 data.append(random.uniform(10,20))

24print data

25#循环十次,生成10个圆形部件  

26j=0

27for i in range(0,10):

28 s.CircleByCenterPerimeter(center=(0.0,0.0), point1=(data[j], 0.0))

29 p =mdb.models['Model-1'].Part(name='Part-'+str(j),

30 dimensionality=TWO_D_PLANAR,type=DEFORMABLE_BODY)

31 p =mdb.models['Model-1'].parts['Part-'+str(j)]

32 j=j+1

---------------------------------------------

l20行代码构造了空的列表 data[ ],用来存储随机函数构造的半径值。这种方法在代码开发过程中非常好用,在实际开发过程中注意灵活运用。  

l24行代码输出列表 data[],用来查看半径值。  

l为了让创建的零部件自动命名,第26行代码构造了循环指针 j,自动读取 data[ ]列表中的数据。编写代码过程中,读者应该根据需要设置一些与研究目的不直接相关,却会对功能实现非常重要的列表、字符串等。  

l脚本中已经给出了尽可能多的注释行,此处不再赘述。  

Abaqus/CAE File 菜单下,单击 Run Script …子菜单或使用命令:Abaqus cae script = random_radius.py来运行脚本,执行完毕单击部件管理器图标  查看生成的部件,如图1所示:

1  自动生成的部件


来源:力学与Abaqus仿真
AbaqusDeformpythonOrigin
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-03-03
最近编辑:8月前
力学与Abaqus仿真
博士 | 副教授 达成所愿 索见未来 助力科技 实现...
获赞 414粉丝 3748文章 107课程 5
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈