PFC_lobby_漏斗案例
目录
漏斗案例
重点在于参数化建模!!!
异形墙体生成
在生成墙体时,需要把底部封上。
直接坐标画图。
new
domain extent -10 10
wall generate box -8 8 -5 0 onewall
;生成了一个整体的墙,共享一个墙的id号
wall delete range id 3
;wall delete 是删除facet
;wall delete box 是删除墙命令
;生成底部容器
wall create vertices -3 8 -3 2 ... ;
-3 2 -1 0 ...
-1 0 1 0 ...
1 0 3 2 ...
3 2 3 8
;生成上方漏斗
;根据节点来生成墙体,(-3,8)表示的是坐标,然后点和点之间形成连线(对于2d)
参数化建模
在建模开始定义一些参数,以便于之后调用。
在command命令流中没办法直接用fish变量,要么然@fish函数,对fish函数里的具体项目进行调用,但该种方法无法对其内部进行计算;要么然用[]括起变量,该种方法能够对fish内变量进行计算
new
;定义参数
def par
box_width=14
box_height=10
loudou_width_down=2
loudou_gaodu_down=4
loudou_width_up=6
loudou_gaodu_up=6
end
@par
;利用参数计算
domain extent [-box_width*2] [box_width*2] ;domain将尺寸放大
wall generate box [-box_width*0.5] [box_width*0.5] ...
[-box_height] 0 onewall
wall delete range id 3
wall create vertices [-loudou_width_up*0.5] [loudou_gaodu_up+loudou_gaodu_down] ...
[-loudou_width_up*0.5] [loudou_gaodu_down] ...
...
[-loudou_width_up*0.5] [loudou_gaodu_down] ...
[-loudou_width_down*0.5] 0 ...
...
[-loudou_width_down*0.5] 0 ...
[loudou_width_down*0.5] 0 ...
...
[loudou_width_down*0.5] 0 ...
[loudou_width_up*0.5] [loudou_gaodu_down] ...
...
[loudou_width_up*0.5] [loudou_gaodu_down] ...
[loudou_width_up*0.5] [loudou_gaodu_up+loudou_gaodu_down]
;以上代码表示的结果和之前的不规则墙体建模的数值一样,只是采用了参数化建模的方法
save wall_moxing
属性继承
在solve之前需要用cycle 1打破一下平衡
property会发生属性的继承
restore wall_moxing
def ball_par
ball_rdmin=0.1
ball_rdmax=0.2
num=200
ball_kn=1e9
ball_ks=1e9
ball_fric=0.5
wall_kn=1e10
wall_ks=1e10
wall_fric=0
end
@ball_par
;定义了ball的最小、最大半径,数目,球的法向切向刚度以及摩擦系数
;墙的法向切向刚度以及摩擦系数
ball generate radius @ball_rdmin @ball_rdmax ...
number @num ...
box [-loudou_width_up*0.5] [loudou_width_up*0.5] ...
[loudou_gaodu_down] [loudou_gaodu_down+loudou_gaodu_up]
ball attribute density 2e3 damp 0.2
cmat default model linear property kn 1e8 ks 1e8
;赋值ball的密度和阻尼,cmat采用default
ball property kn @ball_kn ks @ball_ks fric @ball_fric
wall property kn @wall_kn ks @wall_ks fric @wall_fric
;利用fish赋值属性
set gravity 9.8
cycle 1
solve
save sample
分层染色
删掉底部的墙体,点击墙体处/接触处看底部wall的墙体id号。
将颗粒分层染色,进行可视化处理,形成带状分布。可以右键run selection只运行选中部分的代码。
将顶部球体删除之后,需要用cycle 1 和solve重新平衡一下。
restore sample
ball delete range y ...
@loudou_gaodu_down [loudou_gaodu_down+loudou_gaodu_up]
cycle 1
solve
;把多出来的顶部球体删除,即删除loudou_gaodu_down到
;[loudou_gaodu_down+loudou_gaodu_up]的球体
save temp
;每次平衡完后都保存一个文件,就不用再三调试了
ball group ceng_1 range y 0 [loudou_gaodu_down*0.25]
ball group ceng_2 range y [loudou_gaodu_down*0.25] ...
[loudou_gaodu_down*0.5]
ball group ceng_3 range y [loudou_gaodu_down*0.5] ...
[loudou_gaodu_down*0.75]
ball group ceng_4 range y [loudou_gaodu_down*0.75] ...
[loudou_gaodu_down*1.0]
;将ball按照未下落时候的y的高度进行分层。
wall delete range id 7
cycle 1
solve
;cycle 1打破初始平衡状态
save result