PFC_第二章13到16讲

目录

FISH入门

设置重力

跳跃结构

保存模型状态

测量圆的使用


FISH入门


设置重力

new
domain extent -10 10

ball generate radius 0.1 0.3 number 50 box -5 5
wall generate box -5 5
ball attribute density 2e3 damp 0.7
;分配密度和阻尼,damp阻尼系数耗散能量
cmat default model linear property kn 1e6

set gravity 9.8
;一般默认竖向往下
;set gravity 0 -9.8 矢量
cycle 200000

跳跃结构

        每秒生成颗粒,共生成了8个颗粒。(重点理解

new
domain extent -10 10
cmat default model linear property kn 1e6
wall generate box -5 5
set gravity 9.8

[freq=1.0]
[time_next=0]
def jianduan
    if mech.age>=time_next then
        add_ball
        time_next=time_next+freq
    endif
end

def add_ball
    rad=0.5
    x_pos=math.random.uniform*8.0-4
    ;在-4到4之间出现
    pos=vector(x_pos,4.0)
    bp=ball.create(rad,pos)
    ball.density(bp)=2e3
    ball.damp(bp)=0.7
end
set fish callback -1.0 @jianduan
;调用jianduan函数之后,会自动也调用add_ball函数

set timestep fix 1e-3
solve time 8.0
;求解8000步,用time时间8s,实际耗时clock为10s参考)

保存模型状态

new
domain extent -10 10
cmat default model linear property kn 1e6
wall generate box -5 5
ball distribute radius 0.1 0.3 porosity 0.08 box -5 5
ball attribute density 2e3 damp 0.7
cycle 2000 calm 5
;消除初始重叠的影响

solve aratio 1e-5
;设置最大不平衡力

save poro_08

测量圆的使用

        在右侧变量区域可以看到要测量的值的结果。

restore poro_08

measure create position 0 0 radius 4.9
;生成了一个半径为9的测量圆

def get_bianliang
    mp=measure.find(1)
    ,measure指的是测量圆的id号
    poro=measure.porosity(mp)
    ;测量测量圆范围内的孔隙率,默认会考虑重叠,因此会和attribute生成的孔隙率有所差别
    ;误差来源:分布不均匀以及有重叠
    stress_xx=measure.stress.xx(mp)
    stress_yy=measure.stress.yy(mp)
end
@get_bianliang