PFC中處理懸浮顆粒的兩種方法

Snipaste_2020-07-19_15-10-19.png

PFC的數(shù)值模型中,必然存在一些顆粒,與周圍的顆粒接觸少,這些模型對(duì)力學(xué)模型可以認(rèn)為不起作用。但會(huì)導(dǎo)致模型不收斂(solve arat 1e-5)維持在某一值不再下降,這些顆粒稱為“懸浮顆粒”,對(duì)力學(xué)狀態(tài)影響較小。如果模擬動(dòng)力分析時(shí),懸浮顆粒過多時(shí)會(huì)導(dǎo)致能量衰減。

可以用以下兩種方法在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’ 

方法二:將懸浮顆粒的半徑放大,直到令滿足懸浮判定的顆粒數(shù)目為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個(gè),二維則小于2個(gè)

      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) ;;設(shè)置半徑放大系數(shù),令懸浮顆粒與其他顆粒接觸

   num=1000  ;;;初值可設(shè)大一些

   loop while num  > 0

      expand_floaters_radius(xishu)  ;;對(duì)懸浮顆粒半徑放大

      command

          clean   ;;強(qiáng)制更新接觸

      endcommand

  endloop

end

@compute_floaters(1.05) 

在PFC模型中直接刪除懸浮顆粒發(fā)容易在模型內(nèi)部生成孔洞,降低模型的致密程度。第二種方法保證了介質(zhì)的致密性但可能會(huì)因增大顆粒半徑而引起個(gè)別顆粒的接觸力過大。因此在實(shí)際應(yīng)用計(jì)算時(shí)還需要具體判斷用哪種方法合理。

登錄后免費(fèi)查看全文
立即登錄
App下載
技術(shù)鄰APP
工程師必備
  • 項(xiàng)目客服
  • 培訓(xùn)客服
  • 平臺(tái)客服

TOP

20
6
12