首页/文章/ 详情

PFC中处理悬浮颗粒的两种方法

6月前浏览9787

本文摘要(由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模型中直接删除悬浮颗粒发容易在模型内部生成孔洞,降低模型的致密程度。第二种方法保证了介质的致密性但可能会因增大颗粒半径而引起个别颗粒的接触力过大。因此在实际应用计算时还需要具体判断用哪种方法合理。


岩土离散元PFC仿真体系
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2020-07-19
最近编辑:6月前
千度
博士 | 签名征集中
获赞 69粉丝 744文章 14课程 0
点赞
收藏
未登录
5条评论
溪风
签名征集中
4年前
赞赞赞
回复
挑战
签名征集中
4年前
怎么联系
回复
挑战
签名征集中
4年前
怎么评论
回复
ZYT
签名征集中
4年前
好的,谢谢你的解答,很有帮助。我设置了阻尼,没有设置摩擦系数,看了你的松砂、密砂案例,是不是可以不设置摩擦系数啊?
回复 2条回复
ZYT
签名征集中
4年前
博士你好,请问是在哪一步使用呢?比如我生成试样的时候,用solve求解,不平衡力在一个值上下跳动。是不是应该cycle一定步数,用一下这个函数,再solve。希望你能指点一下
回复 1条回复
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈