PFC_lobby_第二章10-12讲

目录

FISH入门

随机数和随机生成颗粒

自带随机生成颗粒命令

回调函数


FISH入门

        代码为pfc5.02d。


随机数和随机生成颗粒

new
domain extent -10 10
set random 10001
;把随机数数目设定之后,就可以得到一样的状态。
def test
    random=math.random.uniform 
    loop n(1,50)
        random_x_pos=math.random.uniform
        x_pos=random_x_pos*10-5
        ;范围在-5到5之间
        random_y_pos=math.random.uniform
        y_pos=random_y_pos*10-5
        ;范围在-5到5之间
        
        random_rad=math.random.uniform
        rad=random_rad*0.2+0.1   
        ;半径范围为0.1到0.3     
        pos=vector(x_pos,y_pos)
        bp=ball.create(rad,pos)
    endloop
end
@test
;random=math.random.uniform 生成的数值在0-1之间

        最大的数学库math.math.random.uniform为均匀分布,math.random.guess为高斯分布。


自带随机生成颗粒命令

new
domain extent -10 10

;ball generate radius 0.1 0.3 number 50 box -5 5

wall generate box -5 5
ball distribute radius 0.1 0.3 porosity 0.7 box -5 5
;指定孔隙率,有重叠量

ball attribute density 2e3
cmat default model linear property kn 1e6
;指定密度,线性模型和刚度

cycle 1000 calm 5
;calm把所有颗粒速度清零,能够尽可能减小初始重叠量对于运行的影响
;每运行1000步就把速度清零5步

        如果不进行calm,有的颗粒会跑到墙的外面。


回调函数

        call back功能。

new
domain extent -10 10

ball create position 0 -8 radius 1 

ball attribute yvel 1.0 range id 1

ball attribute density 2e7

set timestep fix 1e-3

set mech age 0
def add_x_vel
    bp=ball.find(1)
    ;bp表示指针变量
    time=mech.age
    x_vel=5.0*math.sin(2*math.pi*1*time)
    ball.vel.x(bp)=x_vel
end

history id 1 @time
history id 2 @x_vel
set fish callback -1.0 @add_x_vel
solve time 8
;用callback来回调函数,实现在每个cycle中都计算该函数 
;PFC操作会把8s分成8000步去算,每一步的时间步长为timestep fix 1e-3

        时间 age、time、clock;其中age和time都是模拟的时间,而clock则是模型实际运行的时间。age表示累计的solve time值,但是time不累计。如果要让age的时间和solve的时间等价,那么需要在求解前加上set mech time 0

        callback一般设置为-1.0。