首页/文章/ 详情

【仿真技术】简单的极限平衡计算的编程实现

1年前浏览4125

引言

笔者从教时间不长,只有三四年,每一次教学都能从中获取很多新的发现。正如徐芝纶老先生所言“学无止境、教亦无止境”。

极限平衡是土力学中计算边坡安全系数最常用的方法,笔者在教学过程中给学生编写了一个简单的极限平衡计算程序,程序非常简单,只有几十行。后面有时间的话会加入图形界面进行进一步完善。

计算采用最经典的瑞典条方法,具体原理公式如下:

       

   

图1 瑞典条方法计算基本原理

算例介绍

如下图所示有一个均值边坡,尺寸如下图。假定土体的重度为23.5kN,土体的黏聚力25kPa,内摩擦角30°,假定圆弧的圆心坐标为(10,40),半径为30m,试计算该滑弧对应的安全系数

   

程序实现

本程序在几何图形计算中使用了shapely库,shapely是一个python包,用于设置平面特征的理论分析和操作(通过python的 ctypes 模块)来自著名和广泛部署的地理类库的功能。本程序可以为三个部分:

1. 计算滑坡体的几何信息:采用圆心和半径绘制圆,然后将这个圆与边坡多边形相切,交集部分即为滑坡体,代码如下:

    polygon = Polygon([[0, 0], [50, 0], [50, 40], [40, 40], [10,10],[0,10], [0, 0]])circle = Point(center[0], center[1]).buffer(radius)pintersect = polygon.intersection(circle)
       

    2. 将滑坡体分条:我们提供的思路是将滑坡体x方向的最大和最小值找出来,然后绘制一系列不同x坐标的竖线,通过计算竖线与滑坡体的交点,得到每一个滑块的信息。具体代码如下:

      ''' get the x coordinates limit the pintersect '''xlimit = pintersect.bounds[0], pintersect.bounds[2]ylimit = pintersect.bounds[1], pintersect.bounds[3]'''slice the pinterset into 10 slices '''slice_num = 20xstep = (xlimit[1] - xlimit[0])/slice_num''' get the slices using intersction'''slice_points = []for i in range(slice_num+1):    line_tmp = LineString([(xlimit[0]+xstep*i, ylimit[0]), (xlimit[0]+xstep*i, ylimit[1])])    pts = pintersect.intersection(line_tmp)    slice_points.append(pts.xy)
         

      3. 计算该滑面对应的安全系数:这一块稍微麻烦,需要把每一个滑块上的物理量算出来,然后用公式(1)计算边坡的安全系数,这一块代码略长一点,有兴趣的同学可以自己看代码。

      最终实现的效果如下所示,边坡的安全系数Fos = 1.13。其实这个程序的计算代码并不长,但是把计算过程绘制出来还是毕竟麻烦的,采用了Matplotlib图形库,有心的朋友可以仔细看看代码呀。

         

      图2 程序初步运行结果

      END

      来源:数字孪生与工程计算
      python理论
      著作权归作者所有,欢迎分享,未经许可,不得转载
      首次发布时间:2023-06-30
      最近编辑:1年前
      Rockman
      博士 | 副教授 十年饮冰
      获赞 10粉丝 41文章 16课程 0
      点赞
      收藏
      未登录
      还没有评论
      课程
      培训
      服务
      行家
      VIP会员 学习 福利任务 兑换礼品
      下载APP
      联系我们
      帮助与反馈