【PFC6.0】三維真實邊坡落石軌跡追蹤
瀏覽:3781 評論:3 收藏:10
0 引言
目前離散元的三維應用主要聚焦于單元實驗,因為受限制于顆粒數目和模型尺寸。所以離散元理論上的優勢很難在工程應用中得到體現,這個情況也必將持續五年以上。
本案例以一個比較實際的工況來進行模擬,可以反映離散元在運動學意義上的優勢。
1 邊坡導入
本部分使用了MicrosStation軟件進行了邊坡的生成。首先是找到了一個邊坡的等高線圖。這個是dwg格式的,很多地形數據都會以這種格式保存下來。
參照進來后是這個樣子的:里面有等高線和高程點數據。
Mircostation只能識別自身的元素,所以需要把這些線點合并到主文件中。然后隱藏掉等高線以外的元素。:
之后使用Microstation中網格--從等高線創建網格。
創建好后如圖,將其保存為“dixing.stl”即可。
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-errorsmodel save "dixing"
geo-tools的代碼如下:
def get_min_max(id)global x_min=1e100global x_max=-1e100global y_min=1e100global y_max=-1e100global z_min=1e100global z_max=-1e100local 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)endifif y_min > comp.y(pos)y_min = comp.y(pos)endifif z_min > comp.z(pos)z_min = comp.z(pos)endifif x_max < comp.x(pos)x_max = comp.x(pos)endifif y_max < comp.y(pos)y_max = comp.y(pos)endifif z_max < comp.z(pos)z_max = comp.z(pos)endifendloopenddef MoveToOrigin(id)get_min_max(id)x_center=(x_max+x_min)*0.5y_center=(y_max+y_min)*0.5z_center=(z_max+z_min)*0.5local gs = geom.set.find(id)loop foreach local gn geom.node.list(gs)=-x_center+geom.node.pos.x(gn)=-y_center+geom.node.pos.y(gn)=-z_center+geom.node.pos.z(gn)endloopget_min_max(id)enddef MoveZ(id,z_add)local gs = geom.set.find(id)loop foreach local gn geom.node.list(gs)=z_add+geom.node.pos.z(gn)endloopend
導入成功的地形為三角面片的wall,如圖:
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.5rblock attribute density 3e3 damp 0.2model gravity 9.8[baocunpinlv=1][time_record=mech.time.total-100][count=0]def savefileif mech.time.total-time_record >= baocunpinlv thenfilename=string.build("jieguo%1",count)commandmodel save @filenameendcommandtime_record=mech.time.totalcount +=1endifendfish callback add @savefile -1.0model mechanical timestep fix 1e-4rblock trace id 1model solve time 70
rbock的形狀如圖:
這里計算結束后,顯示rblock的軌跡如圖:
邊坡正面:
側面:
這里也給出落石的動圖:
正面:
側面:
文章中的地形數據和塊石數據可以自行替換。
轉發朋友圈收集30贊發公眾號后臺,可得本文包括地形和塊石形狀在內的整個項目包。
技術鄰APP
工程師必備
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP
10
3
10




















