ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

FLAC3D水力压裂模拟:不同切顶角度对卸压效果的影响与代码实现

FLAC3D水力压裂模拟:不同切顶角度对卸压效果的影响与代码实现 搞矿山压力数值模拟的人对FLAC3D一定不陌生。最近我把一组不同水力切顶角度下的水力压裂数值试验完整跑通了——从模型建立、切顶带处理、水压力加载到多个角度方案的结果对比整套水力压裂代码和配套思路都在这里。做这个项目的起因其实很朴素现场沿空留巷顶板一直压得凶切顶角度在35°到75°之间反复试靠现场试错成本实在太高不如先用FLAC3D把不同角度下的裂缝响应和卸压规律摸一遍给现场设计提供参考。这篇文章会把方案思路、参数设置、代码实现和踩过的坑一次性写清楚。如果你正在用FLAC3D做切顶卸压、水力压裂方向的研究或者刚接触这类数值模拟正准备入手这篇文章可以直接当作一份操作参照。1. 项目概述与物理机制为什么水力切顶角度决定压裂效果1.1 水力切顶到底在模拟什么水力切顶简单说就是利用高压水压裂顶板岩体在预定位置形成一条裂缝带切断巷道上方顶板与采空区侧顶板的力学联系。这样做之后采空区顶板能及时垮落巷道侧顶板则变成短悬臂结构巷旁支护的受力负担大幅减小。“切顶角度”这个参数现场一般按施工钻孔与水平面的夹角来定义。比如45°切顶指的是打钻方向从水平面往上倾斜45°。数值模拟里这个角度基本等同于设计裂缝面与水平面的夹角也决定了裂缝带从起始点向岩层深处延伸的轨迹。从岩石力学机理上看水力压裂启动时的破坏形态以张拉为主。钻孔在高压水作用下起裂后裂缝的扩展方向会明显受到原岩应力场控制而钻孔角度决定了初始起裂位置的应力集中状态。角度不同起裂压力、裂缝走向、裂缝波及范围都会发生变化。这就是为什么切顶角度是水力压裂设计里最敏感的参数之一也是现场最容易调整的施工变量。1.2 角度的工程意义与关键指标角度选大了裂缝走向偏陡能较快切入上覆厚硬顶板切断效果显著但过陡也有风险比如裂缝容易突破设计层位甚至窜到上方含水层或支护影响区泵压要求也更高。角度选小了裂缝相对平缓容易顺层扩展切不断厚硬顶板顶板还是悬而不跨。判断切顶效果工程上主要看几个指标切顶高度指裂缝带沿岩层向上延伸的深度能否进入关键层是核心。切顶面上下盘位移差也就是裂缝两侧的岩体是否产生了明显的相对滑移和张开。采空区顶板垮落步距悬顶越长说明切顶效果越差。巷旁支护受力与顶板下沉量这是最终的安全性指标。数值模拟里我通常用顶板关键点位移、塑性区发育体积、裂缝带单元的张开状态和应力转移情况来综合评价。后面第4节会展开说怎么取这些数据。2. 建模思路与方案选型先想清楚再写代码2.1 两种主流模拟路径对比我在FLAC3D里模拟水力切顶试过两种路径各有适用场景。一种是用界面单元interface模拟单一宏观裂隙。把切顶位置预先做成一个接触面接触面参数按压裂后弱面取值这样能比较直观地反映裂缝面的张拉滑移适合研究裂缝开度和裂缝两侧岩体的相对运动。另一种是弱化带法。把切顶区域的一部分单元处理成低强度、低刚度材料带模拟压裂后形成的破碎带。这种方法对裂缝带宽度、裂缝转向等现象的表现更符合工程实际因为现场水力压裂产生的本来就不是一条光滑裂缝而是一组裂缝构成的损伤带。两种方法我做了个对比模拟路径实现难度计算量优点主要局限界面单元法interface较高较低能清晰反映裂缝面张开、滑移裂缝路径固定不能模拟转向弱化带法较低中等参数少、收敛好、贴合工程破碎带概念裂缝带宽度凭经验设定流固耦合损伤扩展很高很大能模拟起裂扩展全过程FLAC3D并非专用压裂软件效率低考虑到这篇文章的重点是不同角度的影响规律而不是裂缝起裂扩展的微观机理我最终采用弱化带法作为主方案界面单元作为对照验证。对于想深入研究裂尖扩展的读者建议考虑PFC、XFEM或专用压裂模拟软件FLAC3D做的是宏观力学响应不是精细裂缝扩展。2.2 模型尺寸、边界条件与初始地应力模型尺寸这块我采用的是二维平面应变处理走向长度60 m倾向方向取1 m一个单元厚度高度40 m。为什么不用三维全尺寸模型因为不同角度的参数化试验要跑大量工况三维模型动辄上百万单元一个工况算一整天效率太低。平面应变模型能抓住顶板弯曲、切顶面错动、应力转移这些主要力学行为用来做方案趋势比选是够用的。煤层埋深按500 m设定顶板岩层按现场柱状图简化成三层结构直接顶4 m、基本顶12 m、老顶及上覆岩层到模型顶面。煤层厚度3 m巷道布置在采空区一侧切顶起始点设在巷道顶板靠采空区侧的位置。边界条件这样处理模型底部固定四个侧面法向约束顶部施加等效上覆岩层载荷。垂直应力按σvγH估算γ取25 kN/m³扣除模型自身高度的影响顶部面力取11.5 MPa左右。水平应力按侧压系数k估计σhkσv我取k1.2这样水平应力略大于垂直应力更符合深部巷道附近受采动影响的应力状态。FLAC3D中压应力为负所以初始化时垂直方向取负值水平方向按侧压系数取对应负值。2.3 参数设定不要直接抄手册材料参数这块要特别注意FLAC3D的摩尔库仑模型需要的是体积模量K和剪切模量G不是弹性模量E和泊松比ν。换算关系是K E / [3(1 - 2ν)]G E / [2(1 ν)]我用的岩层参数大致如下这些数值来自某矿的岩石力学试验报告不同矿区会有差异不建议直接套用岩层体积模量GPa剪切模量GPa内聚力MPa内摩擦角°抗拉强度MPa煤层3.51.21.2280.5泥岩直接顶5.02.32.0300.8砂岩基本顶8.04.83.5351.5弱化带2.00.80.1150.02弱化带的强度参数我按照压裂损伤后的残余强度取值内聚力比原岩降低约95%抗拉强度基本给到0.02 MPa这相当于裂缝带几乎失去了抗拉能力。摩擦力保留一部分因为压裂破碎岩块之间还有摩擦咬合完全给0反而容易引起数值不稳定。3. 不同切顶角度下的水力压裂代码实现详解3.1 基础模型与材料赋值代码整个脚本我用FLAC3D 7.0的命令流来实现7.0支持Python参数化循环比老版本方便很多。先看基础建模部分model new model title roof cutting hydraulic fracturing - angle series model configure fluid ; 模型尺寸 zone create brick size (60,1,40) point 0 (0,0,0) point 1 (60,0,0) point 2 (0,1,0) point 3 (0,0,40) ; 分组煤层 z 3-6直接顶 z 6-10基本顶 z 10-22 zone group coal range position-z 3.0 6.0 zone group immediate_roof range position-z 6.0 10.0 zone group main_roof range position-z 10.0 22.0 zone group overlying range position-z 22.0 40.0 ; 本构模型与参数 zone cmodel assign mohr-coulomb zone property density 2500.0 ... zone property bulk 5.0e9 shear 2.3e9 ...材料参数按各分组分别赋值代码量比较大我就不全部贴了关键是zone property括号后面跟上对应岩层的K、G、friction、cohesion、tension逐组赋值。实际操作中我喜欢把参数全部提到文件开头用变量定义后面改参数只改一处避免在长脚本里翻来翻去找数值。边界条件和水压力的施加步骤我会放在3.3节详讲。这里先说明一点model configure fluid打开流体模式是为了后面能处理孔隙水压力和渗流如果你只做静力对比不打开也行但加上之后可扩展性更好。3.2 角度参数化的倾斜切顶带生成弱化带法的核心是把指定角度下的倾斜切顶区域找出来然后修改这些单元的材料参数。我写了一个Fish函数输入角度值程序自动计算切顶带所覆盖的单元并完成弱化。; 根据角度theta生成切顶弱化带 def weak_zone_by_angle(theta) local x0 18.0 ; 切顶起点x坐标 local z0 6.0 ; 切顶起点z坐标煤层顶板 local L 14.0 ; 切顶带斜长 local x1 x0 L * math.cos(theta * math.pi / 180.0) local z1 z0 L * math.sin(theta * math.pi / 180.0) local width 0.6 ; 切顶带宽度 local pz zone.list loop foreach pz local xc zone.pos.x(pz) local zc zone.pos.z(pz) local dx x1 - x0 local dz z1 - z0 local len2 dx*dx dz*dz local t ((xc - x0)*dx (zc - z0)*dz) / len2 if t 0.0 then t 0.0 endif if t 1.0 then t 1.0 endif local px x0 t * dx local pz0 z0 t * dz local dist math.sqrt((xc - px)*(xc - px) (zc - pz0)*(zc - pz0)) if dist width then zone.prop(pz, cohesion) 0.1e6 zone.prop(pz, tension) 0.02e6 zone.prop(pz, friction) 15.0 endif endloop end weak_zone_by_angle(45.0)这段脚本的思路是把每个单元的中心点到切顶线段的距离算出来小于带宽宽度就判定为弱化区的单元。数学上就是点到线段的最短距离计算不复杂但省去了手工框选区域的麻烦角度一变重新调用函数即可。有一点提醒zone.prop修改参数要在模型求解之前做如果在开挖或压裂之后改参数改变的是当前状态的属性容易引起应力突变和数值振荡。另外弱化带宽度不能太小小于一个网格尺寸时切顶带会出现断点裂缝带不连续也不宜太大太宽会人为扩大压裂影响范围。我这里的带宽0.6 m配合0.5 m网格效果比较稳定。3.3 水压力加载与求解控制水力压裂的加载方式我按工程阶段拆成两步。第一步是建立原岩应力场这步只施加重力和边界载荷不激活弱化带和开挖让模型达到初始平衡。第二步才在弱化带区域施加压力。这样处理更贴近实际压裂之前岩体是完整的压裂之后才产生弱面如果一开始就把弱化带建好初始应力场会被弱化带的低刚度扰动结果偏差不小。水压力的简化施加方式是在弱化带边界单元面上施加法向压力; 在切顶带附近施加压力模拟水压压力方向指向岩体 zone face apply stress -8.0e6 range group weak_band ...先说明一下如果启用渗流场推荐结合孔隙水压力来做这样效果更接近真实水力裂缝的驱动方式。FLAC3D中可以通过zone face apply pore-pressure对端面节点施加孔隙水压力配合模型中的渗透系数来模拟高压水向裂缝带的扩散。但要注意FLAC3D默认的渗流计算时间步非常小真实压裂时间几十分钟对应的时步数量极大通常需要做时间缩放或等效处理否则算到天黑都算不完。求解控制方面我一般先关闭大应变模式用model solve elastic或model solve配合convergence来控制监测点是巷道上方几个关键位置的竖向位移。水压加载时注意别一次施加太大容易让弱化带单元瞬间进入严重畸变。我习惯分5到10级递增压力每级求解一次这样能观察到裂缝逐步扩展的过程也更容易收敛。3.4 批量跑多个角度并自动导出结果做角度对比免不了要批量跑工况。我建议直接把角度设成循环变量跑完一个自动存一个结果文件。用FLAC3D 7.0的Python接口写外层循环比较方便import itasca as it it.command(call base_model.f3dat) for theta in [30, 45, 60, 75]: it.command( fish define run_case local theta %d weak_zone_by_angle(theta) model solve convergence 1e-5 end run_case % theta) it.command( zone history displacement-z position (18.0,0.5,12.0) zone history displacement-z position (20.0,0.5,12.0) ) # 导出监测数据 hist it.history.names() ...实际跑的时候我会在每个工况结束把关键历史数据和塑性区体积导出到CSV文件文件名带上角度标记后面汇总分析直接读表。千万别只靠屏幕上的图和曲线几十个工况跑完再回头翻图形文件简直灾难。还有一个小技巧模型建好后先把网格、分组、参数、初始应力这四样固定下来后续只改角度这一变量。这样一来不同角度工况之间的差异就只反映角度的影响不会混入其他变量。严谨性对数值试验来说特别重要。4. 结果对比与方案优选切顶角度怎么选才合理4.1 核心评价指标怎么选跑完一组工况最先看的是塑性区分布。弱化带区域应该呈现连续的剪拉复合破坏说明裂缝带已经被“激活”如果弱化带还是弹性状态那说明压裂加载不够或者角度方位与应力场不匹配裂缝没有真正发挥作用。第二个指标是巷道上方顶板下沉量。我通常布置两个监测点一个在巷道中心线正上方一个靠近采空区侧。两个点的位移差能反映顶板回转的角度这个值比单点位移更说明问题。第三个指标是采空区顶板的垮落形态。在弱化带切得比较理想的情况下采空区侧顶板悬顶长度会明显缩短垮落矸石对巷道侧顶板的支撑作用增强巷旁应力集中区会向深部转移。我习惯输出开挖后的最大不平衡力曲线和关键点竖向位移曲线用来判断计算是否稳定收敛。4.2 从模拟结果看不同角度的变化规律这一轮模拟我跑了30°、45°、60°、75°四组角度在相同水压和模型参数条件下得到的主要指标如下表切顶角度弱化带塑性区比例巷道顶板最大下沉mm切顶面上下盘位移差mm采空区侧悬顶长度m30°68%186428.545°92%231873.560°95%245962.575°88%228854.0这个结果规律符合一般工程认识小角度切顶带偏缓裂缝容易顺层扩展弱化带没能完全切断顶板上下盘位移差小悬顶距离大中间角度45°到60°时切顶带能较完整地穿越上覆岩层弱化带塑性区发育充分上下盘位移差明显悬顶距离短角度继续加大到75°时切顶带虽然很陡但在本模型的应力条件下裂缝更容易扩展到设计范围以外弱化带底部的塑性区反而发育不完整效果略有下降。要强调的是这组结果针对的是该矿的埋深、岩层结构和应力场不能直接搬到其他矿山。埋深、侧压系数、岩层强度都会改变最优角度区间。比如深部高应力条件下裂缝更容易转向最大主应力方向这时候小角度方案的实际效果可能比浅部好。4.3 结合工作面推采过程验证切顶效果切顶是否有效最终要看采动期间的响应。只做静态压裂模拟还不够我额外加了工作面推采的简化流程。用逐步删除采空区方向煤体的方式模拟工作面推进def advance_face global face_x 10.0 zone delete range x face_x face_x 1.0 face_x face_x 1.0 end ; 每次推进1m每隔一定时步调用一次 advance_face model solve advance_face推采速度的体现就是“隔多少步推进一个条带”。静力计算本身没有真实时间概念这里用计算步数近似表达施工速度比如每500步推进1 m对应每天进尺若干米需要根据现场施工节奏标定。这个方法的好处是能看出切顶后顶板垮落是否及时巷道变形是否在可控范围内。我对比下来发现45°和60°工况在推进过程中巷道侧顶板的下沉速率明显比30°和75°平缓而且第一个垮落周期来得早说明切顶面及时切断了顶板悬臂采空区顶板较早形成接触支撑。30°工况到后期出现了较长时间的悬顶巷道压力持续爬升整体稳定性最差。5. 常见问题与排查技巧实录FLAC3D水力压裂避坑指南5.1 模型不收敛塑性区满天飞这是最常遇到的问题。弱化带参数压得太低尤其内聚力给到0.1 MPa以下时单元很容易进入塑性流动计算器怎么迭代都不收敛。排查思路是先降低工况复杂度把水压设成0只让模型在自重和开挖条件下平衡确认基础模型能收敛然后逐步把水压加载上去每次只加一小步观察塑性区扩展是否可控。如果弱化带一出就引发大面积塑性区可以把弱化带的内摩擦角往上调5°到10°摩擦角对收敛性影响很大但又不至于完全失去切顶带的弱化本质。5.2 弱化带不沿设计角度破坏有时候你看着弱化带确实设了45°但塑性区扩展方向完全不是沿弱化带走而是顺着层理方向发展。这种“不听话”的现象本质上反映的是原岩应力场的主导作用——应力场告诉岩体该往哪里裂比你的设计角度更“权威”。遇到这种情况先别急着改代码要回到力学机理上分析。如果最大主应力方向与设计切顶面夹角太小裂缝自然倾向于沿原方向扩展。工程上的解决办法是调整施工角度或改变压裂位置让设计切顶面更接近理论破坏面模拟上的处理思路是一样的可以把切顶带角度定义成钻孔倾角而不是期望裂缝角然后观察实际裂缝扩展角再来反推最优钻孔参数。5.3 流固耦合计算慢到怀疑人生打开model configure fluid之后求解速度骤降是常态。流体时步和力学时步相差悬殊FLAC3D会自动选择较小的时步导致总时步数爆炸式增长。我踩过这个坑之后现在的处理方式是先做纯力学平衡得到稳定的应力场然后在压裂阶段打开渗流同时用zone fluid设置合适的流体模量和渗透系数。如果只是做角度对比甚至可以把渗流部分再简化直接用等效压力代替水压力不追求流体在裂缝带的真实扩散过程。等角度优选完成选出一两个最优工况再做精细的流固耦合验证这样能节省大量算力。5.4 界面单元参数怎么定才合理如果走interface路线首先要解决接触面刚度问题。接触面法向刚度kn和切向刚度ks我一般取相邻单元刚度的10倍左右具体可以按体积模量和最小网格尺寸估算公式是kn K / Δz_min。给的太大容易引起计算振荡太小则接触面两侧单元可能互相穿透位移结果失真。接触面的内聚力和抗拉强度作为压裂后的弱面应该取极小值但也不能为0否则求解时接触面会无限滑移。我常用的做法是让接触面内聚力取原岩的5%到10%摩擦角保留20°左右这样既能张开滑移数值上又能稳定计算。5.5 结果被网格牵着鼻子走网格尺寸对裂缝带扩展路径的影响要比很多初学者想象的大。切顶带附近网格如果太粗0.5 m的带宽可能只覆盖一两层单元裂缝形态完全被网格几何形状控制结果自然不可靠。我的网格划分原则是切顶带和巷道周边区域加密到0.4到0.5 m远离开挖影响区放大到1到2 m。网格过渡要平缓避免相邻单元尺寸比超过3倍。做完一套网格后最好再用加密网格复核一次关键工况如果两个网格下的位移和塑性区分布差异在10%以内说明结果对网格不再敏感可以放心用。说到这我想强调一点个人体会数值模型是用来帮方案比选的不是用来“证明”某个角度一定最优的。现场的地质条件、水压流量、钻孔布置都会让规律发生偏移模拟结果里的相对趋势比绝对值更有参考价值。我的习惯是每跑完一组角度把关键监测点数据导出来整理成对比表再拿到现场和微震监测、钻孔窥视的结果相互印证。这种模拟与实测的闭环才是数值模拟最大的价值所在。
返回列表