首页/文章/ 详情

堆载体在预定滑动面的滑动

2年前浏览1885

使用颗粒模拟整个边坡,可以在不知道滑动面的情况下预知比较真实的滑动体的形态。但这个方法对于颗粒数的要求是比较高的,如果已经知道滑动面了,比如结构面、软弱层、基岩面都可以作为预知的滑动面,就可以直接使用wall来模拟滑动面,而使用ball来模拟即将滑动的土体便可。


    整个模拟步骤分为两步:形成堆载体、滑动


一、形成堆载体


    这一步其实包括两个内容,一是需要使用ball模拟堆载体,二是需要使用wall模拟滑动面。这里使用外部导入的轮廓模拟滑动面,还有两个wall来约束边界。这里可以使用之前讲过的geometry的处理方法(使用fish操作导入的geometry)来调整导入形状的大小和位置。
























































newdomain extent -100 100geometry import bianpo.dxf set 1 def get_min_max(id)    global x_min=1e100    global x_max=-1e100        global y_min=1e100    global y_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 x_max < comp.x(pos)            x_max = comp.x(pos)        endif        if y_max < comp.y(pos)            y_max = comp.y(pos)        endif    endloopenddef moveToOrigin(id)    get_min_max(id)    local gs = geom.set.find(id)    loop foreach local gn geom.node.list(gs)        geom.node.pos.x(gn)=geom.node.pos.x(gn)-x_min        geom.node.pos.y(gn)=geom.node.pos.y(gn)-y_min    endloopenddef sacle(id,n)    local gs = geom.set.find(id)    loop foreach local gn geom.node.list(gs)        geom.node.pos.x(gn)=geom.node.pos.x(gn)*n        geom.node.pos.y(gn)=geom.node.pos.y(gn)*n    endloopend@moveToOrigin(1)@sacle(1,0.1)

wall import geometry 1wall generate plane position 0 0 dip 0 wall generate plane position 60 0 dip 90ball generate radius 0.04 0.06 number 20000 box 61 78 53 80 tries 2000000set gravity 9.8cmat default model linear method deformability emod 100e6 kratio 1.5 property fric 0.5ball attribute density 3e3 damp 0.7solvesave sample


平衡后的模型如图所示:


image.png


二、滑动


    这一步只需要删除挡土结构就可以了,这里使用了trace来监测颗粒的运动,使用trace_rep设置间隔可以提高计算速度。同时使用了按时间保存文件的命令来保存sav文件方便后处理。
































restore sampleset trace_rep  50trace add id 1 ball id 555trace add id 2 ball id 1000trace add id 3 ball id 5000trace add id 4 ball id 10000trace add id 5 ball id 15000trace add id 6 ball id 16285ball attribute damp 0.2ball attribute displacement multiply 0wall delete walls range id 3set mech age 0[time_record=mech.age-100][baocunpinlv=5]def savefile        if mech.age-time_record > baocunpinlv then        filename=string.build("jieguo_damp2_%1",count)        command            save @filename                    endcommand        time_record=mech.age        count =1    endif    endset fish callback -1.0 @savefilesolve time 250



    滑动后的状态如图:




    当然也可以做成动图(这个可能图片比较多,颜色比较丰富,底色变了,读者可以使用别的做gif的软件绘制):



image.png

    定义的五个颗粒的迹图如下:



image.png

    做成动图效果更好,可以明显的发现堆载体中上缘的颗粒滑动的比前沿颗粒要远。前沿颗粒虽然先滑动,但是之后成为底部的垫层了。



640.gif

    我们也可以显示颗粒的接触图,可以发现最后边坡颗粒的稳定情况。


image.png


    放大前缘的颗粒接触图,可以明显的发现接触的方向,表面的颗粒偏向于右上方的方向。


image.png


    这里给出了预定滑动面滑坡的二维情况,模拟结果还是值得参考的,对于堆载体的滑动形态趋势都有很大的参考价值。离散元是基于牛顿第二定律的,对于时间也有很好的模拟效果,以上的模拟在250s内完成,也就是说上部堆载体在4分钟左右滑下来并趋于稳定状态。

代码&命令科普离散元结构基础
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2022-07-18
最近编辑:2年前
lobby
硕士 |擅长颗粒流PFC
获赞 880粉丝 4970文章 83课程 22
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈