PFC3D程序解析.docx
《PFC3D程序解析.docx》由会员分享,可在线阅读,更多相关《PFC3D程序解析.docx(36页珍藏版)》请在冰豆网上搜索。
PFC3D程序解析
PFC3D程序解析
PFC3D是基于命令驱动模式(COMMAND-DRIVENFORMAT)的软件,各种命令控制着程序的运行,这部分内容将介绍PFC3D软件的内嵌命令。
本说明文件译自PFC3D软件2.0版使用手册中的COMMANDREFERENCE部分,并补充了一些手册中没有的命令(如设置粘性阻尼、生成圆柱、螺旋壁面等,这些命令在更高版本的手册中有说明)。
命令说明的顺序没有采用原手册中按字母排序的方式,而是根据创建PFC3D
模型解决实际物理问题的一般过程,对相关命令加以说明。
PFC3D手册中COMMON
COMMANDREFERENCE只对每个命令的格式和基本功能做了简单介绍,本说明文件对每个命令做了更详细的解释,为保持文件的可读性,对命令的详细解释都以附录形式给出。
本文件介绍了PFC3D的基本功能,对初学者有较大帮助,但要进行高级应用,还需清楚了解DEM和PFC3D相关功能的基本原理以及软件的结构等。
由于只关注使用PFC3D解决颗
粒流的问题,涉及颗粒流的命令介绍的比较详细,而用于岩土工程等其他领域的命令,由于关注很少且专业知识缺乏,只是不求甚解。
0.关于命令格式的说明:
PFC3D中每个命令基本包含3部分:
命令名、必需关键词和可选关键词。
本说明文件中,命令名和必需关键词写在第一行,尖括号vKeyword…>表示该命令具有可选关键词,罗列于命令名的下一行次级列;带参数的关键词,参数紧随关键词之后用加粗斜体表示。
名字较长的“命令”和“关键词”,PFC3D允许不写出全部字母,只需简写前面的一些字母,最短可简写名(即PFC3D能识别的最短简写“命令”和“关键词”名)用加粗字体表示。
说明:
命令名为BALL的命令,具有必需关键词rad(参数r)和hertz、id、x、y、z等可选关键词。
其中hertz不带参数,最短可简写为hert;id、x、y、z的参数分别为id、x、y、z。
另外,PFC3D默认对内嵌命令以及FISH函数中的命令名、关键词、参数等的字母大小写不敏感,也可设置为大小写敏感(使用SETcase_sensitivityon命令),建议使用对字母大小写不敏感模式,可减少错误的产生。
1.模型属性命令(MODEL-PROPERTYCOMMANDS)
模型属性命令支持数值模型的创建与修改,主要包括表1所示的命令,这些命令可分为模型创建(或删除)和模型修改两大类
表1模型属性命令
BALL
CLUMP
DELETE
GENERATE
JSET
WALL
FIX—FREE
MODEL
PROPERTY&CHANGE&INITIALIZE
1.1模型创建命令:
WALL
keyword…
WALL命令有两个功能,生成一个新的壁面,或按指定的ID号修改已有壁面的属性参数。
WALL不能使用RANGE逻辑,即不能给一个壁面的不同部分赋不同的属性参数。
壁面只与球有相互作用,壁面之间没有相互作用,因此壁面可以相互重叠。
壁面有两侧,有效侧(activeside)与非有效侧(inactiveside),只有与有效侧接触的球,才与壁面有相互作用。
关于有效侧的定义,见附录
每个壁面都可以设置平移速度与转动速度。
使用TheoryandBackground中的1.28公式,可更新构成壁面的每个顶点的位置,从而得到壁面的运动情况。
应当注意
的是,转动速度的设定还与壁面转动中心有关,默认情况下,转动中心在坐标原
点(0.0,0.0,0.0。
两类壁面可以定义:
(1)无限大壁面:
由关键词origin和normal定义的一个无限大平面;(2^1壁面:
圆柱形或由一组凸面多边形组成,使用关键词face定义。
C.螺旋壁面(spiral):
使用关键词typespiral可以生产螺旋壁面。
typespiralkeyword…
end1
x1,y1,z1
螺旋面的第一个端点;
end2
x2,y2,z2
螺旋面的第二个端点;
radin
rin
rin:
螺旋面的内径;
radout
rout
rout:
螺旋面的外径;
pitch
pt
pt:
螺距。
end1,end2之间的距离除以pitch得到的整数决定。
如
说明:
螺纹的个数由
ed1-end2=10,pitch=3则螺纹数等于3个。
例如:
Walltypespiralend1000,end21000,radius0.5,1.0,pitch=1,id=1,kn=1e6,ks=1e6,fric=0.2;生产10个螺纹的螺旋面;
D.凸面多边形壁面(convexpolygons):
使用关键词face可以构造由若干有限平面(face)组成的有限壁面(wall),每个平面(face)必须是由一组按顺序连接的顶点(vertices)组成的多边形(polygon);有限壁面的有效侧按右手法则确定,详见附录1。
face
x1,y1,z1x2,y2,z2…xn,yn,zn
x1,y1,z1x2,y2,z2…xn,yn,zn为平面多边形的顶点坐标,它们的位置顺序代表着顶点的连接顺序,决定了有效侧的位置。
使用具有相同ID号的WALL命令,可以在已有壁面上增加若干多边形平面,如下列命令定义了一系列有限壁面:
wallid=1face(1,1,1)(1,0,1)(6,0,1)(6,1,1)wallid=2face(6,0,1)(6,0,6)(6,1,6)(6,1,1)wallid=3face(1,0,6)(1,1,6)(6,1,6)(6,0,6)wallid=4face(1,1,1)(1,1,6)(1,0,6)(1,0,1)wallid=5face(2,1,2)(5,1,2)(5,0,2)(2,0,2)wallid=5face(5,0,2)(5,1,2)(5,1,5)(5,0,5)wallid=5face(2,0,5)(5,0,5)(5,1,5)(2,1,5)wallid=5face(2,1,2)(2,0,2)(2,0,5)(2,1,5)wallid=9normal0,1,0origin3.5,0.0,3.5
通过使用多个具有相同ID号(id=5)的WALL命令,定义了一个由4个平面构成的凸面多边形壁面。
警告
警告:
PFC3D软件现阶段只能生成有效的凸壁面,即有效侧夹角大于180°的两个连接面(如图1中的id=5壁面);对于凹形几何结构,不能定义成一个壁面,必须通过连接不同的壁面得到。
E.WALL命令的其他关键词:
以下关键词用于设置壁面的属性,如刚度系数、摩擦系数、平移速度、旋转速度等。
关键词的可以在命令中的任意位置出现。
x
设定转动中心(x坐标);
y
设定转动中心(y坐标);
z
设定转动中心(z坐标);
xspin
xs
设定绕转动中心的转动速度(
x分量)
[单位:
弧度/秒];
yspin
ys
设定绕转动中心的转动速度(
y分量)
[单位:
弧度/秒];
zspin
zs
设定绕转动中心的转动速度(
z分量)
[单位:
弧度/秒];
xvelocity
xv
BALL
设定平移速度(x分量);
yvelocityyv
设定平移速度(y分量);
zvelocityzv
设定平移速度(z分量);
radrvkeyword…>
生成半径为r的单个颗粒,可选择的关键词有:
hertz
启用Hertz接触模型,若不是用该可选关键词,则模型默认使用线性接触模型
id
id
设置颗粒的ID号。
每个颗粒的ID号应为独一的正整数,如果模型内有相同的ID号,则软件会报错。
如果用户不设置颗粒ID号,软件将自动指定比当前模型内最大ID号大1的号码。
x
球心的x坐标
y
球心的y坐标
z
球心的z坐标
GENERATE
vkeyword…>xxlxuyylyuzzlzuradiusrlruidiliuvannulusxcyczcr1r2>以下关键词可用于修改该命令的功能:
no_shadow
禁止在非阴影区内生成颗粒(见附录二);默认情况下,颗粒会在壁面的有效侧与非有效侧生成。
tries
tmax
PFC3D默认尝试20,000次,以将指定数量的待生成颗粒置于指定空间。
该命令将尝试的次数设为tmax次,需注意的是,这个值只对当前Generate命令有效,并不是将模型内所有
Generate命令的尝试次数都设为tmax。
filter
gauss
fname
使用用户自定义的颗粒生成过滤器(user-definedgenerationfilter)。
在生成每个球的每一次尝试中,名为fname的FISH函数被调用,详见说明9和附录4。
颗粒半径服从高斯概率分布,而不是默认的均匀概率分布。
此
hertz
local
min
时,平均半径为(rl+ru)/2,标准偏差为(ru-rl)/2;其中rl,ru为关键词radius定义的参数。
新生颗粒使用Hertz接触模型。
若无该关键词,则使用默认的线性接触模型。
该关键词只在并行计算过程起作用,用于强制性地只在本地处理器上生成颗粒,而不在处理器之间共享信息。
rmin
该关键词只在使用了gauss关键词的情况下起作用,用于将高斯概率分布中的最小球半径设为rmin。
默认情况下,高斯概率分布中的最小球半径为rl/10。
说明:
BALL和GENERATE
BALL是在用户指定的一个特定位置,
1.
a)
是用于生成新球的两个命令,他们之间有很大区别:
生成一个新球;新球的生成不受已有球的影响,
允许与其他球有任意大的重叠;由于球之间允许重叠,当循环计算开始时,球之间会突然产生大小相应于重叠量的作用力;
b)
c)
GENERATE是在用户指定的一个空间区域内,生成指定数量的新球;新球的生成受已有球的影响,因为球与球之间不允许有重叠;因此用GENERATE命令能否在指定
空间生成指定数量的球,还取决于空间是否足够大,或生成球过程中的尝试次数(tries)是否足够多等;
BALL命般用于生成规则排列球组(Regularparticleassembly),GENERATE用于生成
非规贝U排列球组(Irregularparticleassemble);
2.
3.
Generate命令必须指定球的生成空间范围、半径大小分布形式和ID号范围(确定球的数
量1。
球的位置与半径随机选择,因此最终生成的颗粒组的状态(位置和大小)受随机数发生器(Randomnumbergenerator,的影响。
SETrandom1命令用于设置随机数发生器的状态,详见脚注1;
关键词xxlxuyylyuzzlzu用于定义指定空间,新生球的质心x,y,z坐标值分别处于区间[xl,xu],[yl,yu]和[zl,zu]之内。
若使用可选关键词annulus,则颗粒的生成空间为一球环形
1SETrandom
该命令用于设置随机数发生器的随机种子iseed
我们知道,计算机只能生成相对随机数(伪随机数),伪随机数的计算取决于随机算法和随机种子的选取,当算法和种子确定后,产生的随机数就确定了;种子和算法相同时,产生的随机数也相同。
PFC3D软件中随机算法是不变的,因此随机数的生成完全取决于用户设定的随机种子的大小,即iseed的值。
iseed的默认值等于10000,用户可以自定义随机种子,其大小应和默认值在同一量级;
三点必须明确:
如果用户没有使用SETrandom命令,则随机种子由软件自动选取,一般取自计算的系统时钟,即来自计算机主板上的定时/计数器在内存中的记数值。
这种情况下,同一个模型每次运行时的随机数都不同,Generate生成的球组初始状态(球的大小和
位置)每次也不同;
如果用户使用了SETrandom命令自定义随机种子的大小,那么随机数的产生取决于用户选取的iseed值的大小,相同的
随机种子意味着对于同一个模型而言,无论运行多少次,由Generate命令生成的初始球组的状态是一样的;
随机种子的设置只与有无SETrandom命令以及iseed的大小有关,NEW命令不会改变随机种子的设置。
4.
5.
6.
7.
8.
空间,其球心为(xc,yc,z©,内外球径分别为r1,r2;此时定义方形空间的x,y,z关键词可以省略,否则,指定的空间为annulus定义的球环形空间与x,y,z定义的方形空间的交集;X,y,z与annulus等关键词只能定义简单的方形与球环形空间,而实际问题大多数涉及较复杂的空间。
此时最有效的方法是使用用户自定义FISH函数进一步限制球的生成空间,见关键词
filter的说明;
球径大小由关键词radius定义,默认情况下,球径大小在区间[rl,ru]之内,且服从均匀概率分布2(uniformdistribution),也可使用关键词gauss指定球径大小服从高斯概率分布;关键词idiliu指定了需要生成多少数量的球。
生成球的总数量为iu-il+1,其中iu,il为球ID
号的最大值与最小值;
Generate生成球时,新球与已有球之间不允许相互重叠,因此,当没有足够的空间(或尝试的次数不足,见关键词tries)生成所有指定数量的球时,将生成少于所需数量的球。
软件默认这种情况为发生错误,不过也可以使用SETgen_error命令将这种情况当作警告处
理(软件提示警告信息,但是指令处理过程继续进行);颗粒生成以后,紧随其后应使用PROPERTY命令设置球的属性参数,包括法向刚度、切向刚度、局部阻尼、密度、摩擦系数,Hertz模型下的弹性模量、泊松比等。
triestmax的说明:
Generate命令生成的球与球之间不允许重叠,用Generat命令生成新球的
过程是不断尝试的过程;每次尝试先按指定的分布形式确定球径大小,并随机(伪随机)确定一个球心位置,再检测该位置周围是否有足够空间生成该球;若空间足够,新球生成,否则进行下一次尝试。
软件默认尝试20,000次,当所需新生球数量较多时,必须使用triestmax命令,设置更大的尝试次数,否则即使有足够的空间,也不能生成所需数量的球。
filterfname:
该关键词的作用是引用用户自定义颗粒生成过滤器(generationfilter),fname是用户自定义FISH函数名,生成每个试产球(trialball)时都将被调用。
在函数fname里,试产球的半径通过fc_arg(0)传递,位置坐标的x,y,z分量分别通过fc_arg
(1),fc_arg
(2),fc_arg(3)传递。
要使试产球被接受(即其符合过滤条件),函数中fname的值设为0,否则fname的值设为1。
关于filterfname的更详细说,见附录4。
DELETE
keyword…
删除球(balls)、块(clumps)、历史(histories)或壁面(walls)等,命令的形式取决于
要删除的对象。
相关关键词及其参数如下:
2均匀概率分布的数学概念:
设连续型随机变量X的分布函数为
F(x)=(x-a)/(b-a),aVx
则称随机变量X服从[a,b]上的均匀概率分布,记为X〜U[a,b].若[x1,x2]是[a,b]的任一子区间,则P{x1在实际问题中,当我们无法区分在区间[a,b]内取值的随机变量X取不同值的可能性有何不同时,我们就可以假定X服从[a,b]上的均匀概率分布.
balls
vrange…>
删除球。
如果指定id号,仅删除对应的1个球;如果指定一个范围(range),则处于该范围内的球(即质心处于该范围之内的球)都将被删除;如果既不指定id号,也不指定范围,则模型中的所有球都将被删除。
利用FISH函数,我们能更灵活地按照所希望的方式删除一些对象,比如删除一些超出指定范围的球。
User'Guide中的例3.21
介绍了每经100个循环,删除位置低于某一高度的球。
关于FISH
语言,将在另一部分给予介绍。
Exampie3.21FISHfunctiontodeleteescapingparticles
;fname:
zapballs.DAT
defremove_balls
while_stepping
y_del_count=y_del_count+1
ify_del_count>100
y_del_count=0
bp=ball_head
loopwhilebp#null
next=b_next(bp)
ifb_y(bp)ii=b_delete(bp)
end_if
bp=next
end_loop
end_if
end
clump
histories
walls
id
删除ID为id的块,不可指定范围(range参数。
删除块只是解散组成块体的球,并不删除这些球。
删除所有历史记录(historytraces)。
另外,也可以用HISTORYreset命令擦除所有历史记录的内容。
id
删除ID号为id的壁面,不可指定范围(range)参数。
CLUMP
keywords…
创建ID号为id的新块,若指定的id已经存在,则其功能为修改ID为id的块体的属性。
FIX
FREE
xspinyspinzspin例如,下列命令行将把ID为5的球的x方向线速度固定为1.5m/s。
JSET
1.2模型修改命令:
keyword…vrange…>
固定某一范围(range)内球的指定速度自由度,若不指定范围(range),该命令将应用于模型中的所有球。
应当注意的是,固定的是“速度”而不是位移。
当速度的某一分量被固定时,其速度将保持当前值不变,即每个循环中运动方程不会更新速度分量。
速度值可使用PROPERTY命令设置。
以下关键词可使用:
固定x方向线速度;固定y方向线速度;固定z方向线速度;固定x方向角速度;固定y方向角速度;固定z方向角速度;
fixxrangeid=5;
propertyxvel=1.5rangeid=5;
keyword…vrange…>
FREE是与FIX相反的命令,其功能是移除对某一范围(range)内的球在速度自由度上的固化,若不指定范围,该命令将应用于模型中的所有球。
当某速度分量自由化(befree)后,其大小变化将由每个循环过程的运动方程决定。
默认情况下,所有球的所有分量都是自由变化的。
以下关键可用于该命令:
释放x方向线速度(freesx-velocity);
释放y方向线速度;
释放z方向线速度;
xspinyspinzspin释放x方向角速度;释放y方向角速度;释放z方向角速度;
PROPERTYkeywordvvgradientgxgygz>vrange…>
设置某范围(optionalrange)内已有球(balls)、接点(joints)、粘结(bonds)以及接触
(contacts的属性,包括球的物性、外加力和速度;修改连接到某个接点的球的属性;修改接触粘结和平行粘结的属性。
对于接触,PROPERTY只能修改用
户自定义接触模型的接触属性。
若没有指定范围,则模型中所有有效对象的属性都将被修改。
命令CHANGE和INITIALIZE是PROPERTY的同义命令,具有相同的功能。
以下关键词可用于修改PROPERTY命令的功能:
add
v
修改处于指定范围内的所有对象的参数值,使其在当前值的基础上加上设定值V得到新的值。
例如,给所有球的半径加0.1的命令是:
PROPERTYradiusadd0.1。
gradient
gx,gy,gz
该关键词的作用是有梯度地设定参数值,
即将对象的的参数值设为:
HF%&+
&。
这里关键词
gradient应紧随v值之后设定,(x,y,z)为对象的位置坐标。
如果还使用了关
键词multiply,则由gradient设定梯度(gx,gy,gz)也将用于乘数值的设定。
v
将指定范围内的对象的参数值乘以V得到新的参数值,注意是乘
以V而不是将参数值设定为V。
例如命令:
PROPERTYradius
multiply1.5的作用是将所有球的半径扩大1.5倍,若此时某球的半径等于2.0m,则应用该命令后其半径为3.0m。
PROPERTY命令的关键词可分为以下三类:
修改球属性、修改接触粘结属性
(contact-bondproperties)和修改平行粘结属性(parallel-bondproperties)。
在必要之处,属性参数的单位在方括号内给予了说明。
multiply
球属性:
radius
densitycolor
球的半径
密度[质量/体积]
设置颜色标号(index)。
球的颜色标号必须是一个非零整数,标
号等于0对应于plot命令给球设定的一系列颜色中的第一个
颜色。
例如命令:
PLOTaddballredblueorangeblack设置
kn
ksdamping
friction
poissshearxforceyforcezforce
xdisplacementydisplacementzdisplacementxvelocityyvelocityzvelocityxspinyspinzspinxmoment
ymoment
zmoment
了4种颜色的球,其中颜色编号0对应red(红色),编号1对应blue,依此类推。
此时命令PROPERTYcolor2的作用就是把所有球的颜色设为orange(橙色)。
法向刚度系数(线性接触模型)[力/位移];切向刚度系数(线性接触模型)[力/位移];局部阻尼系数。
PFC3D软件默认对于每个新生成的球使用局部阻尼,默认的局部阻尼系数等于0.7,用户可以通过关键词
damping修改局部阻尼系数。