0 引言
前两天发了【PFC6.0】随机多边形区域划分及颗粒填充 的文章后。介绍了在PFC高版本软件中,可以直接使用泰森多边形进行rblock的生成。
于是乎我就趁这机会也升了一下目前使用的版本。上个文章采用的是PFC6.0.13,本文章采用PFC6.0.30进行测试。
1 成样
泰森多边形的rblock主要使用rblock construct 中的from-balls关键词,所以在这之前需要生成ball的式样。需要注意的是,from-balls采取的边界是ball式样的边界,所以需要ball和facet之间的刚度大一点。
model new
model domain extent -10 10
wall generate box -5 5
ball distribute porosity 0.1 radius 0.8 1.5 box -5 5
cmat default type ball-facet model linear method deform emod 100e9 kratio 1.5
cmat default type ball-ball model linear method deform emod 100e6 kratio 1.5
ball attribute density 2e3 damp 0.7
model cycle 2000 calm 50
ball delete range pos-x -5 5 not
ball delete range pos-y -5 5 not
model solve
model save "ball_dis"
得到的模型如图:
之后直接调用rblock construct命令进行rblock的生成:
rblock construct from-balls polydisperse true
model save "rblock_dis"
如图:
后面的颗粒填充逻辑和上篇文章一样,我个人也是比较倾向于一块块的进行颗粒填充的。
model restore "rblock_dis"
ball delete
def GetGeo
geoname_count=1
loop foreach rb rblock.list
groupName=string.build("geo_%1",geoname_count)
idRblock=rblock.id(rb)
command
rblock export to-geometry @groupName range id @idRblock
endcommand
geoname_count =1
endloop
end
@GetGeo
rblock delete
def GenerateBallIn(geo_count_single)
groupName=string.build("geo_%1",geo_count_single)
command
ball distribute porosity 0.1 radius 0.03 0.06 group @groupName range geometry-space @groupName count 1
ball attribute density 2.7e3 damp 0.3
endcommand
end
def genAllBall
loop gen_cur(1,geoname_count-1)
groupName=string.build("geo_%1",gen_cur)
command
wall import from-geometry @groupName id 10000
model calm
ball fix velocity spin
endcommand
GenerateBallIn(gen_cur)
command
model cycle 2000 calm 20
ball delete range geometry-space @groupName count 1 not group @groupName
endcommand
command
model solve ratio-average 1e-5 or cycles 10000
model save @groupName
wall delete walls range id 10000
endcommand
endloop
end
@genAllBall
model save "sample"
最后效果如图: