【PFC6.0】三维真实边坡落石轨迹追踪
浏览:3215 评论: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
        




















