【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赞发公众号后台,可得本文包括地形和块石形状在内的整个项目包。















(2条)
默认 最新
6
评论 点赞
感谢分享
评论 点赞
点赞 10 评论 2 收藏 9
关注