
水力压裂这块圈里人常开玩笑说这是拿数据换油气的活儿。做压裂设计的人最终都要回答一个地下的问题——裂缝能不能按预设方向张起来能张多长、多宽、多高。我做压裂数值模拟这几年用得最多的工具就是COMSOL尤其是把固体力学和达西定理放在同一个模型里跑耦合的这种做法几乎每个方案都绕不过去。COMSOL在这个场景里的价值不是把方程写得漂亮而是帮你把三个过程同时算出来岩石骨架受力变形、压裂液在孔隙和裂缝里的渗流、裂缝起裂与扩展。这三个过程互相咬合——孔隙压力一变有效应力就变裂缝就张裂缝一张渗透率上升流体再往裂缝里跑。如果只靠老式的断裂力学公式或者单独看渗流场永远只能回答一半问题。这篇文章把我的建模思路、参数设置和踩过的坑写清楚给做压裂设计、做岩石力学数值模拟的人当一份参考。1. 为什么偏偏是“固体力学达西定理”1.1 水力压裂到底在算什么水力压裂的物理过程可以压缩成一句话把高压流体注进井筒井底压力超过地层破裂条件后岩石沿着应力最弱的方向张开一条缝然后缝在高排量注入下持续向前延伸。这句话拆开看牵扯到两个完全不同的物理场。一个是固体场岩石作为弹脆性材料受力变形、破裂另一个是流体场压裂液在低渗基岩和裂缝里流动、滤失、增压。这两个场都不是独立存在的。孔隙压力升高会降低有效应力有效应力降得太多岩石的抗拉强度就扛不住了裂缝起裂裂缝一旦张开又给流体提供了新的高渗透通道流体加速涌入局部压力进一步集中裂缝继续延伸。这种正反馈机制是水力压裂的全部精髓。所以你在COMSOL里必须同时算“变形”和“流动”缺一个都不行。1.2 为什么选择固体力学和达西定理作为底座先说固体力学。在COMSOL里用“固体力学”接口算的就是岩石在有效应力作用下的平衡方程。压裂模拟最常用的本构是线弹性复杂一点可以加塑性、蠕变但90%的水力压裂设计问题线弹性断裂准则就够用。这个接口提供了完整的三维应力应变框架地应力初始化、孔隙弹性耦合、边界载荷都在同一个逻辑下非常顺手。再来说达西定理。达西定理描述的是多孔介质里的低速渗流流速与压力梯度成正比。水力压裂的基质部分——页岩、致密砂岩——渗透率往往在0.01到1毫达西的量级流体在基质里的流动就是典型的达西渗流。COMSOL的“达西定律”接口只管一个变量就是孔隙压力p算出来的流速、流量、压力分布直接喂给固体力学做孔弹耦合这也是为什么达西定理能成为这套模拟底座的原因。有一点要提醒裂缝内部的流场实际上比基质中的更接近“自由流”流动速度高、惯性力不可忽略严格来说用达西定律在裂缝内部是有偏差的。但大多数工程模拟为了数值稳定和简化普遍做法是在裂缝位置引入渗透率增强系数或者用裂缝流动的立方定律做修正。把达西定理作为统一底座再对裂缝区做渗透率增强是一个非常实用的折中方案。1.3 方案路线预置裂缝与扩展裂缝在COMSOL里做水力压裂模拟常见的有两条路线。第一条是“预置裂缝”。几何里已经有一条已知裂缝模拟注采过程中流体如何在裂缝和基质之间流动、压力如何变化。这种方案不关心裂缝怎么长出来的只关注压裂完成后的生产阶段或注采动态用固体力学达西孔弹耦合就够了。第二条是“裂缝扩展模拟”这才是标题里“水力压裂”最硬核的部分。你需要一个能让裂缝自动生长的判据领域里最常用的是相场断裂法或内聚力模型。相场法的思路是用一个连续的标量场φ来描述材料损伤程度φ0是完好材料φ1是完全破裂。裂缝起裂和扩展不再需要单独追踪几何边界而是通过一个微积分方程自动演化。这样一来固体力学达西相场断裂三套方程在COMSOL里耦合求解就能把“裂缝怎么长”这个问题算出来。如果你从没做过这个方向我建议从预置裂缝的孔弹耦合模型入手先把应力场、压力场、耦合关系吃透再上相场。数据表明很多项目在预置裂缝阶段就能回答设计层面的大部分问题。2. 建模前的物理原理与参数准备2.1 有效应力把两个物理场拧在一起的关节固体力学和达西定理的耦合核心是Biot孔隙弹性理论里的有效应力概念。工程上的有效应力公式是σ σ - αp其中σ是总应力p是孔隙流体压力α是Biot系数。α衡量的是流体压力对骨架变形的贡献程度。对大多数岩石来说α在0.6到1.0之间。α等于1的时候孔隙压力升高10兆帕效果相当于岩石受到的围压降低了10兆帕。水力压裂之所以能用“憋压”的方式把地层顶开靠的就是这个机制你把p抬上去有效应力变小抗拉强度不够了岩石就裂了。在COMSOL里固体力学接口打开“孔隙弹性”子节点孔隙压力变量就自动耦合进有效应力方程。达西定律接口负责求解压力p。你不需要手动重写耦合项这是COMSOL最省事的地方。但省事不等于不做检查Biot系数的取值直接影响模拟结果尤其要注意它与孔隙度、颗粒体积模量的关系不能瞎填。2.2 相场断裂模型的关键参数特征长度与能量释放率如果做裂缝扩展相场法的两个核心参数必须理解到位。第一个是临界能量释放率Gc它决定裂缝扩展需要消耗多少能量单位是焦耳每平方米。Gc可以通过断裂韧度K_IC换算得到平面应变条件下表达式是Gc K_IC²(1 - ν²) / E其中ν是泊松比E是弹性模量。假设页岩E20GPaν0.25K_IC1.2MPa·m^0.5算下来Gc约等于67.5 J/m²。这个量级和文献里报告的页岩断裂能数据是吻合的。第二个是特征长度l₀。它决定了损伤区域的宽度本质上是一个数值正则化参数但也和材料抗拉强度直接相关。l₀越小损伤带越窄起裂应力越高l₀越大损伤带越弥散裂缝看起来越“钝”。工程上常用的做法是在裂缝路径区域让网格尺寸h与l₀满足h ≤ l₀/4才能保证结果的网格依赖性在可接受范围。这部分后面实操章节再展开。2.3 输入参数表与量纲避坑我整理了一份自己常用的参数表直接照着填基本不会出大问题。注意COMSOL默认是SI单位制从工程习惯的毫达西、毫米每分钟换算过来时最容易出错。参数符号典型取值说明弹性模量E20 GPa页岩范围约10~40 GPa泊松比ν0.25致密岩石通常0.2~0.3干骨架体积模量K_dry≈13.3 GPaE / [3(1-2ν)]颗粒体积模量K_s40 GPa矿物颗粒取值Biot系数α0.671 - K_dry / K_s基质渗透率κ1e-16 m²约0.1 mD孔隙度φ0.08低渗储层常见范围流体粘度μ1e-3 Pa·s水基压裂液断裂韧度K_IC1.2 MPa·m^0.5页岩典型范围临界能量释放率Gc≈67.5 J/m²由K_IC换算最小水平主应力σh22 MPa远场应力最大水平主应力σH28 MPa决定裂缝方向初始孔隙压力p012 MPa地层压力相场特征长度l₀0.2~0.5 m数值参数需网格配合注入面流量q00.05 m³/(min·m)单位厚度注入量这里有一个我在实际项目中踩过的坑弹性模量从GPa填到Pa或者从MPa填到Pa会造成应力场差三个数量级裂缝死活起不来。解决办法很简单模型建好后第一步先做一次“地应力平衡”稳态计算对比初始应力和初始孔隙压力下的位移量级如果位移项出现明显波动大概率是材料参数量纲出了问题。3. 实操过程从几何到求解器的完整流程3.1 几何简化与网格策略水力压裂COMSOL模拟我强烈建议先用二维平面应变模型打底不要一上来就上三维。二维模型计算速度至少快一个数量级物理规律一样能看清。几何上取50米乘50米的正方形岩体注入点放在中心初始预置一小段裂缝或一个圆孔作为起裂位置。模型尺寸与裂缝预期半长的比例要足够大一般要求裂缝最终半长不超过模型边长的三分之一否则远场应力和孔隙压力边界会对裂缝尖端产生虚假扰动。你也可以利用对称性只建模四分之一但要注意对称面上的边界条件需要单独设置好。网格是相场法最需要花心思的地方。我的做法是在预期裂缝路径区域也就是注入点沿最大主应力方向的直线带用边界层或局部细化网格网格边长取l₀的1/4到1/8远离裂缝区域的网格可以放到2到5米稀疏处理。算例里如果l₀0.2m裂缝路径区域网格边长就控制在0.03到0.05m。网格数量大概在几万到十几万之间求解速度和精度比较平衡。网格太粗的典型表现是裂缝扩展路径出现明显的锯齿状而且裂缝宽度振荡网格太细则计算量指数上升但结果改善有限。宁可先粗算几次摸清趋势再局部加密。3.2 物理场接口与耦合设置COMSOL里的模型我一般建三个物理场接口固体力学接口solid用于求解位移场和应力场启用“孔隙弹性”子节点。达西定律接口dl用于求解孔隙压力场p耦合“存储模型”中打开孔弹存储项。弱形式PDE接口weak用于求解相场变量φ的演化方程。其中相场方程的核心写法说白了是一个Ginzburg-Landau形式的控制方程Gc/l₀ × φ - Gc × l₀ × ∇²φ 2(1-φ)HH是历史场变量等于以往最大拉应变能量密度它保证裂缝只能扩展、不会愈合这一点非常重要。如果不用历史场裂缝会在卸载时自动愈合物理上完全错误。各版本的COMSOL对PDE的弱形式写法稍有差异但方程本质不变。固体力学和达西的耦合是在固体力学接口的“孔隙弹性”子节点中把孔隙压力p连到达西接口的变量上。同时达西接口的源项里加入骨架变形引起的压力变化这样就形成了双向耦合。把三个接口联立之后还需要在材料属性里做两件事。第一件事把固体力学本构里的弹性矩阵乘上退化函数g(φ)(1-φ)^2k其中k是一个非常小的正数比如1e-6作用是避免完全退化的刚性矩阵导致数值奇异。第二件事给达西定律中的渗透率乘上一个增强因子比如(11000×φ²)模拟裂缝形成后局部渗透率骤升几个数量级的效果。增强倍数根据具体地层和裂缝导流能力调整但要注意设一个上限比如1000倍或5000倍防止渗透率过高造成压力场振荡。3.3 边界条件、注入条件与求解器边界条件的核心工作是“地应力平衡”。先把最大水平主应力σH设为28MPa沿水平方向最小水平主应力σh设为22MPa沿竖直方向模型左右边界和上下边界施加对应的压力载荷。初始孔隙压力p012MPa整个域直接赋初值。注意地应力平衡这一步要单独做一次稳态求解然后把稳态解作为瞬态分析的初值直接激活应力初始条件。跳过这一步直接上瞬态裂缝区域的初始应力场重建会浪费大量计算时间甚至导致起裂前发生不应有的虚假振荡。注入条件通常用流量边界。二维模型里注入量按单位厚度折算也就是面流量q0。现场排量如果是5m³/min射孔段高度假设是50米那么单位厚度流量就是0.1m³/(min·m)。模型里如果用m³/s单位再除以60换算。注入时间设300秒左右足够看到裂缝起裂和扩展的主要阶段。求解器方面相场孔弹耦合属于强非线性问题我的经验是直接用瞬态求解器时间步进选BDF初始步长给1e-3秒最大步长给1到2秒。求解器的相对容差设在0.01到0.001之间。容差设置得越严计算越慢但相场问题收敛性本来就不如纯力学问题我倾向于先设0.01把趋势跑通再用0.001精算。非线性求解器采用牛顿法开启阻尼阻尼因子初始值设在0.5~0.9。如果中途不收敛最常见的原因是时间步太大导致相场变量跳变这时可以强制把最大时间步缩小或者把阻尼因子调小到0.3。前处理阶段我对所有物理场都点开“始终使用恒定牛顿阻尼”选项实测下来对稳定收敛帮助很大。4. 常见问题与排查技巧实录4.1 求解器早期不收敛怎么办我刚做相场压裂那阵子最崩溃的就是模型一运行求解器在初始的0.001秒就撑不住了直接报“未能找到求解器的解”。这种问题十有八九不是物理设置不对而是初值、边界、量纲这三处有漏洞。排查顺序按我的习惯来第一看量纲确认固体力学里应力单位是Pa达西定律中压力单位是Pa粘度是Pa·s不要混用MPa和Pa第二看初值地应力平衡解是否成功初始位移是否“基本为零”如果初始位移量级大得离谱说明平衡步骤有问题第三看阻尼把初始阻尼因子调到0.7以上并限制最大时间步长在10^-3秒量级给求解器一个平稳起步的过程。4.2 裂缝方向不对主应力方向被边界条件干扰相场法的好处是不需要你预先指定裂缝方向它自己会沿着能量释放率最大、也就是垂直于最小主应力的方向走。但如果你发现裂缝没有沿σH方向扩展而是歪着走多半是模型边界条件把主应力方向带偏了。最典型的错误是长方形模型上把σH和σh施加方向弄反了或者模型太窄远场应力区被注入压力边界干扰。检查方法很简单查看地应力平衡解后的“第一主应力方向”图如果在注入点周围的应力场已经明显旋转说明边界条件施加位置离关注区太近。解决办法是把模型尺寸放大或者把远场应力边界改为“位移约束应力的混合模式”。还有一个容易被忽视的原因相场特征长度l₀取得过大导致损伤带宽度和模型尺寸可比裂缝“钝化”严重起裂点附近应力集中被抹平扩展方向就容易受网格畸变干扰。这时候把l₀缩小让损伤带更接近真实裂缝尺度方向问题会明显改善。4.3 渗透率增强导致压力振荡这个坑特别容易出现。基质渗透率1e-16m²裂缝区增强1000倍后变成1e-13m²两个区域的渗透率差了三个数量级。达西定律接口在压力梯度很大的裂缝尖端附近很容易产生压力振荡表现为时间步长被迫缩到非常小求解效率骤降。我试过几种对策最有效的是把渗透率增强因子从突变改为平滑过渡。COMSOL里可以定义平滑的阶跃函数比如用tanh或者多项式过渡让渗透率在φ从0到1的过程中连续变化而不是直接跳变。同时把增强倍数上限控制在1000倍以内别贪大。如果还是振荡把瞬态求解器的时间步插值方式改为“严格”强制求解器在裂缝扩展区间多布点。4.4 裂缝宽度与现场诊断差太多仿真算出来的裂缝宽度和微地震监测或者井下诊断结果对不上是另一个高频问题。裂缝宽度偏大通常是因为没有考虑压裂液滤失。压裂液在高压下会不断从裂缝壁面向基质深层滤失裂缝里剩下的有效体积变少压力增长率下降缝宽自然比理想无滤失模型小。处理办法是在达西接口里加入滤失项或者更简单地把注入流量打一个折扣按实际有效排量输入。有条件的模型里可以给裂缝壁面加一个临时的“滤失边界”设置滤失系数。这个参数和储层渗透率、压裂液粘度、滤饼性质都有关系最实用的校核办法是和现场压降曲线对比反推有效滤失量然后把仿真输入的流量按比例修正。4.5 相场变量出现负值或大于1φ是数学上的辅助变量理论上必须在0到1之间。但相场方程在强非线性条件下偶尔会出现φ略小于0或大于1的情况。有些版本的COMSOL里PDE求解不保证变量的物理界限。我的处理经验是给相场变量加投影约束或者在定义退化函数时对φ做一次“夹取”比如g(φ)(1-min(max(φ,0),1))^2。这样即使求解器算出一个略越界的φ也不会导致负刚度或渗透率负增强等离谱结果。另外在相场方程的弱形式里给φ的方程加一个微小的人工扩散项数值稳定性也会明显提升。5. 结果后处理与工程落地建议5.1 关键输出量怎么提取仿真跑完最重要的一步是把结果转化成工程上能用的判断依据。我通常在后处理里画三个图第一个是裂缝相场φ的云图把φ0.5等值线标出来这就直接给出了裂缝轮廓可以量出裂缝半长和裂缝高度第二个是等效塑性应变或有效应力场云图观察裂缝尖端应力集中的演变第三个是注入点压力随时间的曲线也就是“压力施工曲线”。压力施工曲线有个特征值得注意压力先快速上升达到峰值后突然回落一小段然后进入相对平缓的扩展阶段。那个峰值对应的就是起裂压力回落说明裂缝已经张开压力释放。把这个仿真起裂压力和现场压裂施工记录里测得的破裂压力对比是模型可靠性的一个直接验证。5.2 从仿真反推压裂设计的几个判断我把这套模型用于设计阶段时最常用的操作是参数扫描。COMSOL里很方便扫码一个变量比如注入排量从0.02到0.1m³/(min·m)看裂缝半长怎么变。排量越大裂缝越长、缝宽越大但增长幅度不一定线性这时候模型能帮你算出“边际效益”知道提高排量值不值。也可以扫流体的粘度。粘度增大滤失变慢缝内压力维持更好但过高的粘度可能导致裂缝过宽而长度受限。通过仿真对比不同粘度方案下的裂缝形态比现场试错便宜太多。还有一个工程判断如果最大和最小水平主应力差很小比如只有2到3MPa相场模拟往往会算出裂缝转向甚至多条裂缝分叉。这意味着地层更容易形成复杂缝网对页岩储层反而是好事但对于需要主缝导流的施工设计就需要考虑加密或者改变射孔策略。这种判断不做数值模拟根本拿不准。5.3 局限性与后续扩展方向这套“固体力学达西相场”的框架虽然好用但也有已知的局限。三维模型计算量巨大目前更多停留在研究层面真实地层包含天然裂缝、层理界面单纯相场模型会把它们都当成宏观连续介质无法精细刻画界面滑移压裂液携砂问题需要加上颗粒输运方程酸化压裂还需要反应流耦合。后续扩展我会建议两条路。一条是把达西定律升级为“自由流动多孔介质流动”的耦合接口让缝内流动更接近真实另一条是加温度场做热流固耦合这套东西放到干热岩EGS开发里也依然成立。技术路线一旦打通往后换区块、换地层改的无非是参数表和几何模型。我个人做水力压裂模拟这几年最深的一个体会是数值仿真不是用来取代经验的它是用来把经验里那些“大概、可能、差不多”变成可以量化讨论的东西。COMSOL的好处在于不用写一整套耦合求解器把精力留在理解物理过程和分析结果上这对工程师来说是最舒服的干活方式。如果你正在做类似项目建议先用这套流程跑通一个简单模型再逐步往复杂条件上走别一上来就贪大求全。