当前位置:文档之家› 基于FLAC3D的地下硐室通道锚网喷支护分析 _技术邻工程项目协作平台

基于FLAC3D的地下硐室通道锚网喷支护分析 _技术邻工程项目协作平台

乔成|高校教师

关注

0 前言

岩土工程中常用的数值计算方法主要有有限元法、有限差分法和离散元法等,今天我们要用到

的FLAC3D 软件采用的就是有限差分法。有限差分法历史悠久,其最初的使用甚至可以追溯的第

一台电子计算机出现之前。有限差分法并不是为了电脑编程而出现的,而是计算机使用者后来发

现有限差分法易于编程实现,使得有限差分法在数值计算领域得到不断推广和进一步发展。

越是弥足珍贵的软件,外表看上去,往往越是平常无奇,仿真模拟给全身心带来的幸福,从来

也是如此。 --指尖上的仿真

FLAC3D 软件主要用于解决岩土工程问题,由美国的ITASCA 公司开发。ITASCA 是1981年由美

国明尼苏达大学5位教师联合创办的岩石力学技术机构,这些创始人当初在北美首创了岩石力学学

科,并组织创立了国际岩石力学学会,因此,在业界ITASCA 被认为是世界岩石力学学科发源地之

一。

接下来介绍一下我们要解决的问题,就是地下硐室或通道结构的锚网喷支护问题。地下硐室

或者通道开挖后引起地层内应力的重新分布,面临稳定性风险,因此需要及时支护,而锚网喷就

是常用的方法之一。锚网喷支护方法自上世纪60年代以来,已被广泛采用。锚杆和喷射混凝土与

围岩共同形成一个承载结构,可有效地限制围岩变形的自由发展,调整围岩的应力分布,防止岩

体松散坠落。它既可以用作施工过程中的临时支护,也可以在围岩稳定性较好情况下,代替永久

支护或衬砌。该方法在煤矿巷道、地下硐室和公路隧道中都有广泛应用。锚网喷支护的实景照片

和某设计图如图1、2所示。

由于支护结构数量多,支护构件间存在复杂的相互作用,对支护有效性的分析多借助数值仿

真方法进行。目前绝大多数数值计算软件并没有直接的相应内置单元来模拟锚杆,而FLAC3D 内

置了cable 单元用于模拟锚杆或锚索支护结构,同时其强大的Fish 语言允许用户通过编程实现大量

锚杆的自动创建、连接的建立、属性参数的设置等工作,代码一旦编写完成只需少量修改即可反

复使用,可以分析不同支护参数下的支护效果以便进行参数优化。

本文作者之前在国内两家著名仿真论坛公布了锚网喷支护的部分代码,获得了大量的点击和

关注,当时公布的代码已经进行了简化,并未公开其中锚杆与喷层混凝土间连接的相关操作。在

本文中,将较详细的介绍该结构单元节点上的连接的自动删除和新建方法,并公开相应的核心计

算代码,该部分内容对于在模拟中获得真实的支护效果非常重要。

本文在接下来的第1节将介绍FLAC3D 中结构单元的部分基础知识,尤其是单元间连接建立的

一般方法,然后介绍在需要建立大量连接时,如何利用内置函数实现连接的建立。在第二节将介

绍一个实例,在实例中具体演示连接的自动建立。第三节将给出该实例对应的完整代码。有了前

面各节的铺垫,读者将更容易理解和掌握第三节的代码。

1 FLAC3D 中连接的建立

1.1 基础介绍

2016-01-09 12:43:31 3070

基于FLAC3D的地下硐室通道锚网喷支护分析

相关帖子换一批苗苗_2016hypermesh ansys Nastran OptiStr…HyperMesh入门实例大家好久不见,最近给大家分享一个简单的例子,希望对初学...技术邻公告技术邻学院每日优惠券大放送技术邻学院最新上线,海量精品CAE学习视频任你购买,现推...技术邻Athena 讨论/如何看待知识变现现象?阅读一个真实案例A进行毕设的时候遇到了疑问,在qq群询...君莫CEL UMA T cohesive 光滑粒子流体…Abaqus 二维hashin失效模…模型inp文件。智创仿真HyperWorks hypermesh html5模…《HyperMesh&HyperVie…废话不多,直接上货。首页协作动态学院社区注册 登录

请输入要搜索的内容搜索

FLAC3D 中的结构单元主要包括:锚杆(锚索)单元(cable)、梁单元(beam)、壳体单

元(shell)、衬砌单元(liner)和土工格栅(geogrid)。这些结构单元一般在普通实体单元(zone)表面

(图3)或内部建立(图4),结构单元在创建时单元节点(node)会自动与邻近的实体单元建立连

接(link )以实现与周围实体单元的相互作用。结构单元的单元与单元之间也通过节点(node)上的li

nk 实现共同作用。因此,link 有两种类型,即:节点-实体单元(node-zone)(图4)、节点-节点(n

ode-node )。默认情况下不同类型结构单元各自由度的link 的类型,如表1所示:

其中,free 和rigid 分别表示该自由度上可以自由位移和刚性的,SY 代表剪切屈服弹簧,NY 代

表法向屈服弹簧,PY 代表桩屈服,PYDP 代表依赖弹簧的桩屈服。

当有新的结构单元被创建时,会有新的节点出现在实体单元表面或内部,新的节点与实体单

元间会按照表1中的默认属性自动建立node-zone 连接,进而实现结构单元与实体单元间的相互作

用。也就是说,结构单元与实体单元间的相互作用是通过node-zone 连接实现的。

1.2 cable 与liner 的连接

在后面的建模中会利用cable 单元模拟锚杆,用liner 单元模拟含钢筋网片的混凝土喷层,因

此,在此以cable 和liner 的连接,演示结构单元间node-node 连接的建立方法。

如图6所示的cable 和liner 单元,图中紫色圆圈代表结构单元的node ,圆圈内数字表示节点编

号,这些编号是结构单元被创建时自动分配的。图中节点57和节点69被拉开了距离,主要是方便

观察节点编号,实际建模时两个node 是重合的。需要注意的是:结构单元在被创建时,其节点会

自动与邻近的zone 按表1的属性建立连接,两个结构单元的节点即使重合也不会自动建立连接。

因此,节点69和节点57都与liner 后的实体单元(zone )自动建立了连接。在人为建立节点69

和节点57间的连接前需要人为的删除节点与zone 自动建立的连接。但连接的删除需要知道link 的

ID 。命令清单提供了连接删除和建立的方法。

首页协作动态学院社区注册 登录请输入要搜索的内容搜索

从上述代码可以看出两个node间的连接就需要多行代码才能完成,涉及两个link的删除,1个新link的建立以及属性的设置多个过程,尤其是当创建的连接很多时无法每个节点都通过print来人为的观察确定link的ID,这个过程过于繁琐。所以当需要删除和创建的link数量多时,必须利用FLA C3D内置的Fish语言,通过内置函数来完成相关操作。

一个成功的分析师,并不只依赖好的软件,更仰仗厚重的经验。

--指尖上的仿真

一个好的模拟分析,不是所有的操作都依靠鼠标,而更依赖于键盘。很多工作,写好代码就让它自己去算吧……

1.3 通过Fish删除指定坐标处liner节点的link

采用如下代码完成与cable外端节点重合的节点的定位、link的确定以及link的删除。

代码片段2中,nd_near(_x0, _y0, _z0)获得指向位置(_x0, _y0, _z0)处的节点的指针(图7中指针1), nd_link(_ndLPTR)则是根据节点指针获得指向该节点的link的指针(图7中指针2),此处的link是liner与邻近的zone间自动建立的连接。lk_id(_lkPTR)则根据指针2获得link的ID。命令:sel delete link range id _linkID 根据link的ID删除该link。nd_id(_ndLPTR)根据指向位置(_x0, _y0, _z0)处的节点的指针1获得该节点的ID。

1.4 删除靠近liner的锚杆节点的link

删除锚杆最外侧靠近liner的节点上的link,Fish代码如下:

在上述代码中,由s_near(_x1, _y1, _z1)获得指向指定坐标位置处的结构单元的指针,即获得指向cable单元的指针,再由该指针获得该结构单元的cid,然后按照FLAC3D生成cable单元的编号特征,获得靠近liner的一个节段的cable单元的cid号,再由该cid号通过s_find函数获得指向靠近lin er处的cable单元的指针,由该指针通过s_node函数获得单元的第一个节点的指针,由该指针通过nd_id函数获得节点的ID。整个过程相对比较复杂,可以参考图8进行理解。从图8中围岩内最内侧的锚杆节点坐标(_x1, _y1, _z1)开始,沿着箭头的方向利用适当的fish函数,最终可以获得锚杆最外侧节点的id。之后删除这个节点创建时自动建立的link(对应命令:sel delete link range id _lin kID)。

上面的代码看得头晕,有木有?这个可以有。慢慢理解吧,话说我在写这个代码时也是牺牲了很多脑细胞的。为什么这么绕呢?是因为liner的node与cable的node在锚杆的最外侧节点(_x0, _ y0, _z0)处重合了。通过nd_near(_x0, _y0, _z0)函数只能获得重合位置处一个节点的指针,无法同时获得另外一个节点的指针。nd_near()函数在重合的2个node处是返回哪个node的指针,主要根据node的创建顺序,同一位置处的多个node,哪个先创建的,nd_near()返回指向它的指针。在本文的分析中,liner始终先于cable创建,所以可以利用nd_near()获得处liner的节点的指针。而同一位置处cable节点的指针则需要如图8中那样,通过最内侧的锚杆结构单元利用fish函数向外找到最外侧的节点。

1.5 建立cable节点与liner节点间的link

建立cable节点与liner节点间的link并设置link属性,代码如下:

到此,我们就完成了锚杆与衬砌结构单元间在重叠的节点处删除各自原有连接、新建node-no de连接并设置相应属性这一最困难的工作。

2 应用实例

接下来将以一个煤矿巷道锚网喷支护的实例来演示上述结构单元link相应操作的实现。某煤矿巷道,其断面形式为直墙半圆拱型,混凝土喷层和锚杆的布置方式与图9中接近。锚杆加固的作用是提供局部抵抗岩块滑动及裂缝开展的刚度。锚杆借助于水泥浆或树脂药卷沿其长度方向提供了抗剪能力。锚杆及锚索采用cable单元进行模拟。

计算模型的边界条件主要采用位移边界条件:在模型底边施加竖向位移约束,在模型左右竖向边界面施加水平位移约束,在模型的前后竖向边界面施加前后的水平位移约束。在FLAC3D中,位移边界的实现是通过约束指定范围内网格节点(gridpoint)的速度实现的。

地应力主要包括自重应力和构造应力在岩体上产生的初始应力状态。结合淮南地区深部地应力的特点,取竖向应力和水平应力相等,数值按岩体自重应力换算而来。初始应力如图10所示。

模拟考虑了具体的施工过程,即先进行围岩的开挖,接下来进行混凝土喷层及网片的施工,再进行锚杆的安装施工。分节段先前推进,每个节段的进深为2.4m。在FLAC3D中模拟施工开挖比

2016/10/26基于FLAC3D 的地下硐室通道锚网喷支护分析 _技术邻工程项目协作平台再进行锚杆的安装施工。分节段先前推进,每个节段的进深为2.4m 。在FLAC 3D 中模拟施工开挖比

较方便,只需要赋予应该开挖部分的围岩null 模型,该部分围岩的刚度等材料属性就被设置为极小的数值,相当于从模型中被挖去。本次模拟出于演示的目的,共有5个开挖步,每步开挖2.4m ,

直至开挖贯通整个模型的纵向。

开挖完每一段巷道岩体后,围岩的应力发生释放,围岩产生变形。之后马上进行锚网喷施

工。混凝土喷层厚25mm ,锚杆间排距800mm ,锚杆长度2.5m 。混凝土喷层采用liner 单元模拟,

锚杆采用cable 单元模拟。一个开挖完毕节段内安装的喷层和锚杆情况如下图所示。

图11 第一节段开挖结束后锚杆和喷层布置图

支护结构安装完毕后,继续进行下一个节段的开挖。开挖后进行喷层和锚杆的支护施工。以

此类推。图12为开挖完成三个节段后的喷层和锚杆布置图。

图12 第三个节段喷层和锚杆布置图

重复以上过程直至整个巷道纵深都开挖完毕。每一次开挖都回引起新的不平衡力,再不断的

迭代计算过程中,不平衡力逐渐减小直至比率达到1×10-5,计算基本达到平衡。

在代码中一个截面的锚杆的施工被集成到一个函数中,该函数通过循环语句实现了多个单根

锚杆的安装,而每一根锚杆的安装都包括原有连接的删除、新连接的建立、连接属性的设置等一

些列的操作。因此代码是高度集成和简化的。在后面的每一节段的开挖支护施工中,只需要指定

开挖截面的位置,然后调用开挖函数、锚杆支护函数就可以完成相应的任务。

首页协作动态学院社区注册 登录请输入要搜索的内容搜索

开挖和支护全部完成后的锚杆和喷层支护情况如图13所示:

请输入要搜索的内容搜索

首页协作动态学院社区注册 登录

从图14中可以看出,在锚杆与喷层间具有节点连接的部位,存在明显的相互作用,由于锚杆

拉力的存在,对喷层所受的法向压力起到了抵消作用。只有建立混凝土喷层与锚杆间的连接,模

拟的支护效果才与真实的现场情况接近,分析才更具实践意义。混凝土喷层所受法向应力情况如

图15所示。

仿真分析的目的是通过数值计算掌握围岩位移分布特征,判断支护参数的有效性,为支护的

优化提供依据。在计算中,在围岩内部关键位置布置位移和应力监测点,监测整个计算过程中关

键位置处位移和应力随开挖和支护的发展情况。

首页协作动态学院社区注册 登录

请输入要搜索的内容搜索

变化锚杆的长度以及锚杆布置的间排距,可以获得不同的支护效果,分别分析不同支护参数

小的支护效果,主要是比较围岩位移(图16)、表面最大收敛位移和锚杆最大轴力(图17)。在确保围岩发生的位移变形在允许范围内,锚杆轴力不超过锚杆抗拉强度条件下,可以确定合理的

锚杆长度和间排距。

上述问题由于存在围岩与结构的相互作用,支护结构多且复杂,同时还需考虑施工顺序的影

响,因此还没有接近的理论分析方法可以应用。现场监测受现场条件和经费等影响只能提供某几

个断面的监测结果,同时监测结果可能受到施工过程中各种人为因素的影响。而数值仿真分析能

够为复杂工程提供满足精度要求的、纯理论分析和物理实验无法实现的详细的分析结果,易于快

速实现不同参数的分析,为优化设计提供可靠依据,能够降低工程成本,合理指导工程实践。

目前数值仿真方法已成为工程实践中各种创新的重要支撑。

3 实例完整代码

与上面介绍的工程实例对应的完整演示代码在下面的代码列表中,该代码可以完成包括几何模

型建立,在指定位置自动进行围岩开挖、混凝土喷层施工、锚杆的安装、连接的自动删除和建立

以及结构单元属性的设置等相关工作。真正做到一劳永逸,实现无人值守式自动计算和保存。如

果计算时间很长,可以去掉代码最后一行的注释,则软件会在计算结束后自动关机。

首页协作动态学院社区注册 登录请输入要搜索的内容搜索

4 其他应用

上面介绍到的锚网喷支护技术可以应用到更加复杂的模型中,如在某大型地下硐室结构支护中的应用(图18-图21)。在其他复合支护结构中,如基坑开挖施工中的地下连续墙、挡土墙等工程模拟分析中都可能涉及两种不同结构单元的连接,这些情况下都可以利用本文介绍的通过fish函数在不同结构单元节点处连接的自动删除和新建的方法来完成相关模拟分析工作。

5 结语

真实的世界使我感兴趣,因为它是可塑的。——法国作家纪德

仿真世界是另一个有趣的世界,因为你能发挥自己的想象力和创造力把一些东西从无到有的在那个虚拟世界中创造出来,再赋予它们以属性,建立它们间的关联,观察它们的发展…… 那不是很有趣吗?

一去技术路,天涯若比邻。希望每一位CAE爱好者,都能从仿真中获得乐趣!

最后祝CAE联盟十周年生日快乐!祝CAE联盟越办越好!

251531分享到

附件为演示实例对应的完整代码:

rockboltmeshsupports.txt

技术点: CAE联盟十周年原创案例大赛

31

支持

该回复已经被删除

感谢大神。

试用代码时,出现了target node and source node are same ,求助,找了好久原因没找到,先建的line

r 后建的cable sel liner id=1 range cyl end1 50.9990 0 -21.1074 end2 50.9990 1 -21.1074 rad 7.1074

z -17.5537 -14 sel liner id=1 range cyl end1 51.4990 0 -20.8187 end2 51.4990 1 -20.8187 rad 6.53

z -22.7896 -17.5537 sel liner id=1 range cyl end1 50.4990 0 -20.8187 end2 50.4990 1 -20.8187 rad

6.53 z -22.7896 -1

7.4537?-17.5537 sel liner id=1 range cyl end1 55.0870 0 -21.9546 end2 55.0870

1 -21.9546 rad 2.7665 z -24.5821 -22.7896 sel liner id=1 range cyl end1 46.9110 0 -21.9546 end

2 4

6.9110 1 -21.9546 rad 2.7665 z -24.5821 -22.7896 sel liner id=1 range cyl end1 50.9990 0 -

7.5657

end2 50.9990 1 -7.5657 rad 17.7228 z -25.2885 -24.5821 sel liner id=1 prop iso=(25e9,0.15) thick=

0.3 density=2500 sel liner id=1 prop cs_nk=8e9 cs_sk=8e9 cs_scoh=1e10 建完liner SEL CABLE ID 1

0 begin 53.3598 0.5 -14.4035 end 54.6884 0.5 -10.6306 NSEG 5 def _boltLink _ndLPTR=nd_near(5

3.3598,0.5,-1

4.4035) _ndLinerID = nd_id(_ndLPTR) _lkPTR = nd_link(_ndLPTR) if _lkPTR # null the

n _linkID = lk_id(_lkPTR) command sel delete link range id @_linkID ? delete the default link on liner

end_command endif ?------------------------------------------------- ?--- delete the link on cable's begin nod

e --- _cablePTR=s_near(54.6884,0.5,-10.6306) ?<-----from end to begin _cableSELEndCID = s_cid(_

cablePTR) _cableSELBegCID = _cableSELEndCID - 4 _cabBegPTR = s_find(_cableSELBegCID) _c

ableBegNodePTR = s_node(_cabBegPTR, 1) _cableBegNodeID = nd_id(_cableBegNodePTR) ?---rigi

dly link a cable node to a liner node _lkPTR = nd_link(_cableBegNodePTR) if _lkPTR # null then _lin

kID = lk_id(_lkPTR) command sel delete link range id @_linkID ? delete the default bolt link end_com

mand endif command sel link @_cableBegNodeID target node tgt_num @_ndLinerID ? create a ne

w link end_command _newLinkPTR = nd_link(_cableBegNodePTR) _newLinkID = lk_id(_newLinkPT

R) ?------------ set link props ---------------- command sel link attach xdir rigid range id @_newLinkID s

el link attach ydir rigid range id @_newLinkID sel link attach zdir rigid range id @_newLinkID sel link

attach xrdir free range id @_newLinkID sel link attach yrdir free range id @_newLinkID sel link attac

h zrdir free range id @_newLinkID end_command end @_boltLink 结果就提示那个错误

说点什么吧...

不想吃鱼的猫8月11日

回复赞0

淘气的猪7月31日

回复赞0

李强强7月15日

回复赞0

交大乐子4月1日

回复赞0

羽天 回复@羽天3月16日

图14、15的图怎么看啊。。一直在学习研究,最近运行了一次程序,发现位移情况都超过了8m 。。是不是我运行错了。。

膜拜

不错

大神膜拜~~~~

感谢关注

共25条上一页 123下一页 尾页

回复赞0羽天

3月16日 回复赞0

零星记忆

1月29日 回复赞0

蒋星星

1月19日 回复赞0

匿名用户

1月14日 回复赞0

乔成 回复@尤美

1月12日 回复赞0

公司简介 服务条款 诚聘英才 联系我们?2015 技术邻 | 浙ICP 备15010698号-1 |浙公网安备 33010802005309号首页协作动态学院社区注册 登录请输入要搜索的内容搜索

相关主题
文本预览
相关文档 最新文档