【PFC6.0】三維真實邊坡落石軌跡追蹤

0 引言

    目前離散元的三維應用主要聚焦于單元實驗,因為受限制于顆粒數目和模型尺寸。所以離散元理論上的優勢很難在工程應用中得到體現,這個情況也必將持續五年以上。

    本案例以一個比較實際的工況來進行模擬,可以反映離散元在運動學意義上的優勢。

1 邊坡導入

    本部分使用了MicrosStation軟件進行了邊坡的生成。首先是找到了一個邊坡的等高線圖。這個是dwg格式的,很多地形數據都會以這種格式保存下來。

【PFC6.0】三維真實邊坡落石軌跡追蹤的圖1


    參照進來后是這個樣子的:里面有等高線和高程點數據。


【PFC6.0】三維真實邊坡落石軌跡追蹤的圖2



    Mircostation只能識別自身的元素,所以需要把這些線點合并到主文件中。然后隱藏掉等高線以外的元素。:


【PFC6.0】三維真實邊坡落石軌跡追蹤的圖3


    之后使用Microstation中網格--從等高線創建網格。


【PFC6.0】三維真實邊坡落石軌跡追蹤的圖4


創建好后如圖,將其保存為“dixing.stl”即可。

【PFC6.0】三維真實邊坡落石軌跡追蹤的圖5



2 導入地形


    

    導入地形的命令比較簡單,這里用到了geo_tools來進行圖形的一些處理,主要是把圖形移動到原點位置。然后網格劃分比較細的話,可能會導致有一些小面片有問題,用skip-errors跳過即可。



model newmodel domain extent -600 600 -600 600 -200 200geometry import "dixing.stl"program call "geo_tools"@MoveToOrigin("dixing")wall import from-geometry "dixing" skip-errors

model save "dixing"


geo-tools的代碼如下:


def get_min_max(id)    global x_min=1e100    global x_max=-1e100        global y_min=1e100    global y_max=-1e100    global z_min=1e100    global z_max=-1e100    local gs = geom.set.find(id)    loop foreach local gn geom.node.list(gs)        local pos = geom.node.pos(gn)        if x_min > comp.x(pos)            x_min = comp.x(pos)        endif        if y_min > comp.y(pos)            y_min = comp.y(pos)        endif         if z_min > comp.z(pos)            z_min = comp.z(pos)        endif           if x_max < comp.x(pos)            x_max = comp.x(pos)        endif        if y_max < comp.y(pos)            y_max = comp.y(pos)        endif         if z_max < comp.z(pos)            z_max = comp.z(pos)        endif    endloopend

def MoveToOrigin(id) get_min_max(id) x_center=(x_max+x_min)*0.5 y_center=(y_max+y_min)*0.5 z_center=(z_max+z_min)*0.5 local gs = geom.set.find(id) loop foreach local gn geom.node.list(gs) geom.node.pos.x(gn)=-x_center+geom.node.pos.x(gn) geom.node.pos.y(gn)=-y_center+geom.node.pos.y(gn) geom.node.pos.z(gn)=-z_center+geom.node.pos.z(gn) endloop get_min_max(id)end

def MoveZ(id,z_add) local gs = geom.set.find(id) loop foreach local gn geom.node.list(gs) geom.node.pos.z(gn)=z_add+geom.node.pos.z(gn) endloopend


導入成功的地形為三角面片的wall,如圖:



【PFC6.0】三維真實邊坡落石軌跡追蹤的圖6



3 生成落石


    這里落石考慮到形狀,用了一個rblock來生成:



model restore "dixing"geometry import "kuaishi.stl"

rblock template create "kuaishi" from-geometry "kuaishi"

rblock replicate "kuaishi" position -121 331 80contact cmat default model linear method deform emod 10e7 kratio 1.5 property fric 0.5

rblock attribute density 3e3 damp 0.2model gravity 9.8



[baocunpinlv=1][time_record=mech.time.total-100][count=0]def savefile if mech.time.total-time_record >= baocunpinlv then filename=string.build("jieguo%1",count) command model save @filename endcommand time_record=mech.time.total count +=1 endif endfish callback add @savefile -1.0

model mechanical timestep fix 1e-4rblock trace id 1 model solve time 70



rbock的形狀如圖:


【PFC6.0】三維真實邊坡落石軌跡追蹤的圖7



這里計算結束后,顯示rblock的軌跡如圖:


邊坡正面:

【PFC6.0】三維真實邊坡落石軌跡追蹤的圖8



側面:

【PFC6.0】三維真實邊坡落石軌跡追蹤的圖9





這里也給出落石的動圖:

正面:


【PFC6.0】三維真實邊坡落石軌跡追蹤的圖10



側面:


【PFC6.0】三維真實邊坡落石軌跡追蹤的圖11



文章中的地形數據和塊石數據可以自行替換。


轉發朋友圈收集30贊發公眾號后臺,可得本文包括地形和塊石形狀在內的整個項目包。















登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

10
3
10