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