本文摘要(由AI生成):
PFC数值模型中,悬浮颗粒是接触少的颗粒,对力学状态影响小,但可能导致模型不收敛和能量衰减。处理悬浮颗粒有两种方法:删除悬浮颗粒或放大其半径至满足悬浮判定条件。直接删除可能导致模型孔洞,降低致密性;放大半径则可能增大接触力。实际应用时需根据具体情况选择合适的方法。
在PFC的数值模型中,必然存在一些颗粒,与周围的颗粒接触少,这些模型对力学模型可以认为不起作用。但会导致模型不收敛(solve arat 1e-5)维持在某一值不再下降,这些颗粒称为“悬浮颗粒”,对力学状态影响较小。如果模拟动力分析时,悬浮颗粒过多时会导致能量衰减。
可以用以下两种方法在PFC中处理悬浮颗粒:
方法一:找出悬浮颗粒并删除
define identify_floaters ;该代码适用于二维情况,若是三维则修改悬浮判断条件为2
loop foreach local ball ball.list
ball.group.remove(ball,'floaters') ;;;
local contactmap = ball.contactmap(ball)
local size = map.size(contactmap)
if size <= 1 then ;悬浮颗粒判断条件
ball.group(ball) = 'floaters'
endif
endloop
end
@identify_floaters
ball delete range group ‘floaters’
方法二:将悬浮颗粒的半径放大,直到令满足悬浮判定的颗粒数目为0.
define expand_floaters_radius(xishu)
num=0
loop foreach local bp ball.list
local contactmap = ball.contactmap(bp)
local size = map.size(contactmap)
if size <= 2 then ;悬浮颗粒条件,如果是三维则小于3个,二维则小于2个
ball.radius(bp)=ball.radius(bp)*xishu ;半径放大
ball.vel(bp)=vector(0.0,0.0)
num=num+1
endif
endloop
end
def compute_floaters(xishu) ;;设置半径放大系数,令悬浮颗粒与其他颗粒接触
num=1000 ;;;初值可设大一些
loop while num > 0
expand_floaters_radius(xishu) ;;对悬浮颗粒半径放大
command
clean ;;强制更新接触
endcommand
endloop
end
@compute_floaters(1.05)
在PFC模型中直接删除悬浮颗粒发容易在模型内部生成孔洞,降低模型的致密程度。第二种方法保证了介质的致密性但可能会因增大颗粒半径而引起个别颗粒的接触力过大。因此在实际应用计算时还需要具体判断用哪种方法合理。