随机分布在材料微观力学分析中扮演着重要角色,例如混凝土骨料力学、新型材料纤维力学分析等内容,提及随机分布,更多的同学可能会联想到采用第三方软件如Matlab来生成,并导入ANSYS计算,其实ANSYS本身自带随机分布功能,只是功能略有限制。
ANSYS中产生随机分布的一个重要函数是 *VFILL,该函数主要的作用是对数组进行填充赋值,而在赋值的过程中,用户既可以选择自定义数据内容,也可以选择利用随机函数产生数值,ANSYS Help中*VFILL说明如下:
该函数主要输入参数为数组名称以及输入数据的函数,当选择为data时,表示用户自定义数据进行填充,当选择其他选项时,则根据函数类型进行填充。
*VFILL随机数生成支持均匀分布(Rand)、高斯分布(GDIS)、三角分布(TRIA)、贝塔分布(BETA)、伽马分布(GRMM),*VFILL用于批量生成,如果需要单独生成数据,则可以分别使用函数:
1) num=Rand(con1,con2)
2) num=Gdis(con1,con2)
3) num=Tria(con1,con2,con3)
4) num=Beta(con1,con2,con3,con4)5) num=Gram(con1,con2,con3)
上述con1~con4分别表示函数参数,例如针对均布分布,con1和con2分别表示分布的下限和上限。
下面分别以均布分布、高斯分布、伽马分布为例进行演示。
1、均布分布
APDL代码:
finish
/clear
/prep7
numA=1000
!建立随机关键点
*dim,shuzu,array,numA,2
*vfill,shuzu(1,1),rand,1,10
*vfill,shuzu(1,2),rand,1,10
*do,i,1,numA
K,i,shuzu(i,1),shuzu(i,2)
*enddo
2、高斯分布
finish
/clear
/prep7
numA=1000
*dim,shuzu,array,numA,2
*vfill,shuzu(1,1),gdis,1,10
*vfill,shuzu(1,2),gdis,1,10
*do,i,1,numA
K,i,shuzu(i,1),shuzu(i,2)
*enddo
3、伽马分布
finish
/clear
/prep7
numA=1000
*dim,shuzu,array,numA,2
*vfill,shuzu(1,1),gamm,0,1,2
*vfill,shuzu(1,2),gamm,0,1,2
*do,i,1,numA
K,i,shuzu(i,1),shuzu(i,2)
*enddo
上面只是简单的示范,实际使用时还可以结合自己项目的特殊性在各个随机元素之间施加约束条件,结合*DO和*IF循环可以达到很多想要的结果。例如混凝土随机骨料投放,假定骨料都是球形,骨料半径在10mm~50mm之间,例如下面代码可得如下效果:
APDL代码:
finish
/clear
/prep7
numA=100
!随机生成100个粒径并取整
*dim,Dima,array,numA
*vfill,Dima(1,1),rand,10,50
*do,i,1,numA
Dima(i)=nint(dima(i))
*enddo
!生成第一个球
X1=rand(50,950)
Y1=rand(50,950)
Z1=rand(50,1950)
k,1,X1,Y1,Z1
kwpave,1
sphere,dima(1)
!生成余下的球
*do,i,2,numA
*do,j,2,10000
X1=rand(50,950)
Y1=rand(50,950)
Z1=rand(50,1950)
X2=KX(5*(i-2)+1)
Y2=KY(5*(i-2)+1)
Z2=KZ(5*(i-2)+1)
DIS_X=abs(X1-X2)**2
DIS_Y=abs(Y1-Y2)**2
DIS_Z=abs(Z1-Z2)**2
DIS=(DIS_X+DIS_Y+DIS_Z)**0.5
Dis_min=dima(i)+dima(i-1)
*if,DIS,gt,Dis_min,then
*exit
*endif
*enddo
k,5*(i-1)+1,X1,Y1,Z1
kwpave,5*(i-1)+1
sphere,dima(i)
*enddo
wpcsys,-1
blc4,,,1000,1000,2000
*get,Vnum,volume,0,num,maxd
/trlcy,volu,1,Vnum
当然,实际项目中的情况远比上面演示的要复杂,同时在实现过程中也是需要经过层层条件限制,结合IF判断和DO循环来实现,其实随机问题归根到底还是算法问题。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删