首页/文章/ 详情

免费部分够用-边坡开挖卸荷后与材料劣化

3月前浏览5876

本文摘要(由AI生成):

这篇文章主要介绍了二手交易平台上一个关于边坡稳定性计算的题目解析,文章针对题目中存在的疑问提出了六个假定,并提供了详细的计算思路和代码。解析过程中先定义了岩石的力学参数和初始条件,然后进行了五个部分的开挖。在每个开挖部分,将开挖区域分配为空模型,计算应力卸载和参数降低。获得每个区域在开挖前后的最小应力值,计算 lambda 值。最后,求解开挖后的模型,根据 lambda 值调整每个区域的杨氏模量、内聚力和摩擦角。


1.问题来源

问题来源自某二手交易平台,价格500元,令人不禁感叹新手的钱真好赚。

图1-1 问题来源

代码思路如下所示:

图1-2 计算思路

2.疑问&假定

这个题目实现起来很简单,但单就这一张图我还是有以下六个疑问:

(1)应力卸荷量lambda是否应该取绝对值?

(2)应力卸荷量lambda应该取哪个应力分量来进行计算?

(3)多次开挖计算时,初始应力值是自重下的应力分类还是上一开挖步的应力分量?

(4)开挖卸荷影响区划分标准是否有统一准则?

(5)材料参数降低百分比在什么时候取界限值?

(6)应对哪些材料参数进行折减?

由于我对边坡知之甚少,故上述六个问题留待相关研究方向的读者解决。针对以上六个疑问,本文采取以下六个假定以演示思路:

(1)对应力卸荷量lambda取绝对值;

(2)选取最大压应力进行计算;

(3)初始应力值取自重条件下的最大压应力值;

(4)开挖卸荷影响区依照图中标准进行划分;

(5)材料参数折减值取中位数;

(6)对弹性模量、粘聚力、内摩擦角进行折减。

3.代码

建立长×宽×高=30m×1m×15m的模型,分组为rock和cut,模型如下所示。

图3-1 计算模型

计算思路为:对cut分组进行5次开挖,每次开挖后计算其相对于未开挖前的应力卸荷量,判定卸荷程度并进行相应参数折减,而后开挖下一步。逐步开挖代码如下:

    model newmodel largestrain off;mechnical parameters of rock[dens = 1800.0] ;density[E = 4e6] ;young[v = 0.33] ; poisson[f = 30.0] ;friction[c = 20e3] ;cohesion;Classification criteria[C1 = 0.8];strong unloading area[C3 = 0.3];slight unloading area;reduction coefficient[coe_1 = 0.7][coe_2 = 0.3][coe_3 = 0.05];modellingzone create brick size 30 1 15 group 'rock'zone group 'cut' range position-x 10 20 position-z 10 15;cmodel & parameterszone cmodel assign mohr-coulombzone property young [E] poisson [v] cohesion [c] friction [f] density [dens];boundary conditionszone face skinzone face apply velocity-normal 0 range group 'west' or 'east'zone face apply velocity-normal 0 range group 'south' or 'north'zone face apply velocity-normal 0 range group 'bottom';settingsmodel gravity 9.81zone initialize-stresses;solvemodel solve;clear all displacement & velocityzone gridpoint initialize displacement-x 0zone gridpoint initialize displacement-y 0zone gridpoint initialize displacement-z 0zone gridpoint initialize velocity-x 0zone gridpoint initialize velocity-y 0zone gridpoint initialize velocity-z 0model save '1-ini';get initial maximum compressive stressmodel restore '1-ini.sav'fish def _getPrin0    count = 0    loop foreach z zone.list        count += 1        table.x(1,count) = zone.id(z)        table.y(1,count) = zone.stress.min(z)    endloopend@_getPrin0;excavation 1st sectionzone cmodel assign null range group 'cut' position-z 14 15model solvemodel save 'cut-1';get lambda & reduction mechanical parametersfish def _getLambda    count = 0    loop foreach z zone.list        count += 1        if table.x(1,count) = zone.id(z)            ;lambda = (table.y(1,count) - zone.stress.min(z))/table.y(1,count)            lambda = math.abs((table.y(1,count) - zone.stress.min(z))/table.y(1,count))            if zone.model(z) # 'null'                if lambda > C1                    zone.prop(z,'young') = E*(1-coe_1)                    zone.prop(z,'cohesion') = c*(1-coe_1)                    zone.prop(z,'friction') = f*(1-coe_1)                else if lambda < C3                    zone.prop(z,'young') = E*(1-coe_3)                    zone.prop(z,'cohesion') = c*(1-coe_3)                    zone.prop(z,'friction') = f*(1-coe_3)                else                    zone.prop(z,'young') = E*(1-coe_2)                    zone.prop(z,'cohesion') = c*(1-coe_2)                    zone.prop(z,'friction') = f*(1-coe_2)                endif                zone.extra(z,1) = lambda            endif        endif    endloopend@_getLambda;excavation 2nd sectionzone cmodel assign null range group 'cut' position-z 13 14model solvemodel save 'cut-2';get lambda & reduction mechanical parametersfish def _getLambda    count = 0    loop foreach z zone.list        count += 1        if table.x(1,count) = zone.id(z)            ;lambda = (table.y(1,count) - zone.stress.min(z))/table.y(1,count)            lambda = math.abs((table.y(1,count) - zone.stress.min(z))/table.y(1,count))            if zone.model(z) # 'null'                if lambda > C1                    zone.prop(z,'young') = E*(1-coe_1)                    zone.prop(z,'cohesion') = c*(1-coe_1)                    zone.prop(z,'friction') = f*(1-coe_1)                else if lambda < C3                    zone.prop(z,'young') = E*(1-coe_3)                    zone.prop(z,'cohesion') = c*(1-coe_3)                    zone.prop(z,'friction') = f*(1-coe_3)                else                    zone.prop(z,'young') = E*(1-coe_2)                    zone.prop(z,'cohesion') = c*(1-coe_2)                    zone.prop(z,'friction') = f*(1-coe_2)                endif                zone.extra(z,1) = lambda            endif        endif    endloopend@_getLambda;excavation 3rd sectionzone cmodel assign null range group 'cut' position-z 12 13model solvemodel save 'cut-3';get lambda & reduction mechanical parametersfish def _getLambda    count = 0    loop foreach z zone.list        count += 1        if table.x(1,count) = zone.id(z)            ;lambda = (table.y(1,count) - zone.stress.min(z))/table.y(1,count)            lambda = math.abs((table.y(1,count) - zone.stress.min(z))/table.y(1,count))            if zone.model(z) # 'null'                if lambda > C1                    zone.prop(z,'young') = E*(1-coe_1)                    zone.prop(z,'cohesion') = c*(1-coe_1)                    zone.prop(z,'friction') = f*(1-coe_1)                else if lambda < C3                    zone.prop(z,'young') = E*(1-coe_3)                    zone.prop(z,'cohesion') = c*(1-coe_3)                    zone.prop(z,'friction') = f*(1-coe_3)                else                    zone.prop(z,'young') = E*(1-coe_2)                    zone.prop(z,'cohesion') = c*(1-coe_2)                    zone.prop(z,'friction') = f*(1-coe_2)                endif                zone.extra(z,1) = lambda            endif        endif    endloopend@_getLambda;excavation 4th sectionzone cmodel assign null range group 'cut' position-z 11 12model solvemodel save 'cut-4';get lambda & reduction mechanical parametersfish def _getLambda    count = 0    loop foreach z zone.list        count += 1        if table.x(1,count) = zone.id(z)            ;lambda = (table.y(1,count) - zone.stress.min(z))/table.y(1,count)            lambda = math.abs((table.y(1,count) - zone.stress.min(z))/table.y(1,count))            if zone.model(z) # 'null'                if lambda > C1                    zone.prop(z,'young') = E*(1-coe_1)                    zone.prop(z,'cohesion') = c*(1-coe_1)                    zone.prop(z,'friction') = f*(1-coe_1)                else if lambda < C3                    zone.prop(z,'young') = E*(1-coe_3)                    zone.prop(z,'cohesion') = c*(1-coe_3)                    zone.prop(z,'friction') = f*(1-coe_3)                else                    zone.prop(z,'young') = E*(1-coe_2)                    zone.prop(z,'cohesion') = c*(1-coe_2)                    zone.prop(z,'friction') = f*(1-coe_2)                endif                zone.extra(z,1) = lambda            endif        endif    endloopend@_getLambda;excavation 5th sectionzone cmodel assign null range group 'cut' position-z 10 11model solvemodel save 'cut-5'

    计算结果如下:

    图3-2 应力卸荷量(绝对值)

    图3-3 内摩擦角云图(折减一次)

    上述过程也可在fish函数中用loop循环实现自动卸荷计算并折减参数后开挖,从而节省代码量。运行结果如下:

    图3-4 应力卸荷量(绝对值,自动折减开挖)

    图3-5 内摩擦角云图(折减一次,自动折减开挖)

    图3-4~图3-5与图3-2~图3-3完全一致。验证了以下自动折减开挖代码的正确性:

    来源:FLAC3D小技巧
    MechanicalUM材料
    著作权归作者所有,欢迎分享,未经许可,不得转载
    首次发布时间:2024-03-17
    最近编辑:3月前
    FLAC3D小技巧
    硕士 专注FLAC3D中的小技巧分享...
    获赞 27粉丝 141文章 40课程 0
    点赞
    收藏
    未登录
    还没有评论
    课程
    培训
    服务
    行家
    VIP会员 学习 福利任务 兑换礼品
    下载APP
    联系我们
    帮助与反馈