做非常规油气开发的人,基本都绕不开水力压裂这四个字。低渗透率储层不改造,井打了也白打,而压裂设计的核心就三个问题:裂缝起不起得来、朝哪个方向走、能延伸多远。要回答这些问题,数值仿真几乎是最划算的验证手段,但真上手做的时候,很多人第一个遇到的坎就是——该用什么模型、选什么模块才能把"高压流体注入地层导致岩石开裂"这个过程描述清楚。
Comsol做这件事的好处,我在实际项目中体会最深的一点是:它把固体力学和达西定理这类多物理场耦合放在同一个界面里,不需要像其他有限元工具那样自己写一大堆耦合单元,模型结构调整起来也快。这篇文章就以"固体力学+达西定理"这个耦合方案为主线,把水力压裂模拟从建模思路、控制方程、参数设置到后处理分析完整走一遍,适合正在做相关方向课题的研究生,以及想快速评估压裂参数影响的现场工程师参考。我会尽量按实际踩坑的思路来讲,不写流水账,重点放在"为什么这么建模"和"实际操作中会遇到什么问题"上。
1. 项目整体设计与建模思路拆解
1.1 水力压裂物理过程到底是什么
水力压裂的本质,是高压流体注入地层后,岩石在拉应力作用下发生断裂的流固耦合过程。压裂泵车把高压流体从井筒泵入储层,流体克服地层最小主应力后,在井壁附近形成应力集中,当局部有效拉应力超过岩石抗拉强度时岩石起裂,随后流体持续进入裂缝,高压驱动裂纹向前方和上下两个方向扩展。裂缝一旦张开,又为流体提供了高导流通道,渗流和应力两个场始终咬合在一起,谁也不能单独决定最终裂缝形态。
在数值模型里,我们需要同时体现三个机制:第一,流体在孔隙介质中的渗流,也就是达西流动,它决定压裂液滤失和孔隙压力重分布;第二,岩石骨架的应力应变响应,包括弹性形变、可能出现的塑性或损伤区;第三,裂缝自身的打开与扩展,需要用断裂力学或损伤力学来描述。只做其中一项,视角都是不完整的,这也是为什么"固体力学+达西定理"的耦合会成为这类仿真的标配。
1.2 为什么选"固体力学+达西"这条耦合路线
很多初学者一上来就想直接模拟裂缝扩展,但裂缝扩展是强非线性问题,对网格和算法要求都高。我自己的经验是,稳妥的路径是先把固体力学和达西耦合的"地基"打牢,再逐步加裂缝扩展机制,否则模型一跑就发散,根本分不清问题出在哪个物理场上。
达西定理负责描述流体在孔隙岩层中的流动,跟纳维-斯托克斯这类自由流方程相比,它忽略了惯性项,只考虑压力梯度驱动的渗流,计算量小得多,对储层尺度的问题也足够用。固体力学模块负责给出岩石的应力应变状态。两场通过有效应力原理耦合:流体压力升高,骨架上的有效应力降低,岩石更容易拉伸破坏;反过来,岩石体积变形又会改变孔隙体积和渗透率,影响流体流动。这种双向耦合正是水力压裂的典型特征。
相比完全解耦的渗流模型,这套耦合方案能捕捉到一个非常关键的现象:注入高压流体后,裂缝周围会出现明显的应力重分布,也就是常说的应力阴影,这直接关系到多段压裂时缝间距的设计。只算渗流是看不到这个效应的,而把这个效应算明白,恰恰是很多现场方案优化所依赖的核心。
1.3 三套可选的建模方案与适用场景
基于Comsol做水力压裂,根据研究目标不同,一般有三个层次的建模方案。
第一层:不考虑裂缝扩展的固定裂缝路径分析。模型里预设一条或几条裂缝路径,注入期间只考虑孔隙压力扩散和应力分布,适合研究应力阴影、诱导应力、缝间干扰这类问题。优点是稳定、快,适合先跑通模型逻辑。
第二层:损伤或者内聚力模型追踪裂缝扩展。沿预设裂缝路径定义内聚力本构或损伤本构,流体到达后,满足断裂准则的区域刚度退化,裂缝逐渐延长。适合研究裂缝扩展长度、缝宽和注入参数的关系,是工程研究里最常见的做法。
第三层:结合移动网格和断裂力学理论的动态扩展模型。裂缝尖端用应力强度因子或能量释放率判断扩展,网格随裂缝尖端更新,尽量逼近真实物理过程,但实现复杂,对网格和时间步长极度敏感,通常建议前两层走通了再考虑。
这篇文章侧重前两层,尤其是把固体力学和达西耦合这一步做扎实。大多数人做压裂仿真,问题往往不是出在裂缝扩展算法,而是出在基岩段耦合本身没设对,这是我最想提醒的一点。
2. 控制方程、力学基础与关键参数
2.1 达西定理:从渗流方程到压力扩散
达西定理是1856年通过砂柱实验总结出的经验规律,形式非常简洁:v = -(k/μ)∇p。v是达西流速矢量,k是渗透率张量,μ是流体动力黏度,∇p是压力梯度。在Comsol的达西定律接口中,求解的实际是把这个公式代入连续性方程后得到的压力扩散型方程,在饱和多孔介质、无源汇的简写形式大概是这样的:ρS ∂p/∂t + ∇·(ρv) = Qm,其中S是储水系数,ρ是流体密度,Qm表示注采源汇项。
需要注意的是,达西定理的适用前提是低速、层流状态,雷诺数通常在1以下,常规储层压裂液滤失速度基本满足这个范围。如果压裂液是高黏的幂律流体,就需要考虑黏度随剪切速率的变化,达西形式要做相应修正。另外,k如果不是标量而是跟应力状态相关的函数,比如裂缝附近渗透率因张拉开裂而升高,就不能用固定值,需要定义应力依赖渗透率的关系,这在压裂后评估阶段尤其常见。
2.2 固体力学控制方程与有效应力原理
在Comsol固体力学接口中,核心求解的是动量守恒方程。在忽略惯性项的准静态条件下,就是应力平衡方程∇·σ + F = 0,其中σ为总应力张量,F为体积力。本构关系默认用线弹性模型,σ = C:ε,C是四阶弹性张量,跟杨氏模量、泊松比对应。水力压裂模拟的很多研究场景,线弹性假设已经能满足需求,毕竟地层深度大、温度稳定,短时间注浆的流变效应通常不明显。
关键在于有效应力公式。工程上普遍采用Biot有效应力:σ_eff = σ - αpI,α是Biot系数,取值在0到1之间,p是孔隙压力,I是单位张量。α反映了孔压对骨架变形的贡献度,高孔隙度岩层α偏大,致密岩石α偏低。在Comsol多物理场中,Poroelasticity耦合节点会自动完成这个换算,不需要手写,但你必须理解它在物理上意味着什么,否则参数填错了都不自知。
2.3 起裂与扩展准则
裂缝什么时候起裂?工程上最常用的判据是最大拉应力准则:当任意方向的有效最大主应力达到岩石抗拉强度时,材料起裂。压裂过程中压力足够大时,井壁附近往往会先形成张性破坏,所以水力裂缝通常都是张性裂缝。
裂缝扩展方向有一个经验法则:裂缝总是沿垂直于最小主应力的路径扩展。因为裂纹尖端应力强度因子在垂直于最小主应力的方向上最大,裂纹最容易朝着阻力最小的方向走。这个规律在现场微地震监测数据里也有验证,裂缝形态基本都是垂直于水平最小主应力,这也是水平井分段压裂时裂缝会尽量垂直于井筒的原因。
如果要定量追踪扩展,可以用应力强度因子K_I,当K_I达到断裂韧性K_IC时裂缝拓展。在Comsol里也可以通过内聚力模型实现,沿预设裂缝路径设置牵引-分离本构,断裂能G_c是控制参数之一。内聚力模型的好处是不需要额外引入奇异单元,裂纹尖端有一个过程区,应力分布比纯断裂力学方法更平滑,实际实现也更稳定。
2.4 材料参数与边界条件整理
整理一个比较常用的参数表,单位按国际单位制,方便直接往Comsol里填。注意如果你的工程资料里给的是毫达西(mD)和兆帕(MPa),记得先换算。
| 参数 | 符号 | 典型取值 | 说明 |
|---|---|---|---|
| 杨氏模量 | E | 10-50 GPa | 致密砂岩偏高,页岩偏低 |
| 泊松比 | ν | 0.15-0.3 | 影响闭合力与裂缝形态 |
| Biot系数 | α | 0.6-0.9 | 高孔岩层取大值 |
| 渗透率 | k | 0.1-10 mD(约1e-16~1e-14 m²) | 页岩可低至1e-18 m² |
| 孔隙度 | φ | 0.05-0.15 | 渗流体积占比 |
| 流体黏度 | μ | 1-100 mPa·s | 滑溜水低、冻胶高 |
| 抗拉强度 | σt | 1-8 MPa | 需要实验室测定 |
| 原地水平最小主应力 | σh | 20-40 MPa | 由储层深度决定 |
| 原始孔隙压力 | p0 | 15-30 MPa | 可用压力梯度估算 |
| 注入压力 | p_inj | 高于σh | 实际由泵压决定 |
边界条件是这个项目里最容易出问题的地方。井筒位置建议给定注入流量或注入压力,不要直接加在所有外部边界上。远场边界用辊支承或指定位移,代表周边无限大地层;孔压边界在远场保持原始地层压力,裂缝路径上则允许流体进入孔隙空间。对称边界如果利用得好,模型尺寸能减半,计算速度大幅提升,这也是我下面实操部分会优先采用的做法。
3. Comsol模型搭建实操
3.1 几何建模与对称简化
一个常用做法是建立二维平面应变模型,取水平截面,把整个地层简化为矩形区域,长度方向取100 m到200 m,宽度方向取50 m到100 m,井筒位于区域中心,或者放在左边界,具体看你要研究单翼缝还是双翼缝。双翼缝更接近实际页岩水平井压裂形态,利用左右对称性可以只建一半模型,计算量直接减半。我第一次跑模型的时候没有做对称处理,网格数量多了一倍,求解时间翻了不止一倍,后来改了对称条件,收敛性也明显变好。
裂缝路径在几何中预置为一条很窄的矩形条带或一条线。线的话在后续网格阶段注意细化。为什么要预置?因为标准Comsol中默认不会自动产生新的几何边界,裂缝作为一种高渗透、低刚度区域嵌入模型,比强行模拟真正的裂纹尖端点更容易收敛。几何里留一条宽0.01 m左右的"裂缝条带",赋给它更高的渗透率和较低的刚度,就能模拟张开裂缝的导流能力。这个方法实际用下来很稳,尤其是做参数扫描的时候,不会因为网格变形导致中途发散。
3.2 物理场接口与耦合节点设置
在Comsol Model Wizard中,空间维度选二维,物理场选择:
- 结构力学模块下的 Solid Mechanics(固体力学)
- 流体流动模块下 Porous Media and Subsurface Flow → Darcy's Law(达西定律)
添加物理场之后,记得在多物理场节点中创建 Poroelasticity 耦合,把固体力学的应力方程和达西定律的孔压方程自动关联起来。Comsol会自动生成由Biot系数参与的应力-孔压耦合项,这一步相当于把前面第2章里的理论公式装进了软件。两个物理场的因变量分别是位移场(u,v)和压力场(p),如果做了对称简化,在对称轴上设置对称条件,即位移法向分量为零、法向流动为零。
需要特别注意:先在固体力学中设定材料本构,线性弹性模型下输入E和ν;在达西定律中设定渗透率k、孔隙度φ和流体属性;Poroelasticity节点中单独设置Biot系数α。很多人习惯在一个材料节点里把参数全填了,但不同物理场对材料的依赖路径不同,建议按物理场分别确认,避免出现"材料定义存在但没被当前接口引用"的情况。
3.3 网格剖分策略
网格是压裂模拟中收敛性最大的变量之一。裂缝条带和井筒附近一定要细化,单元尺寸建议控制在裂缝宽度的5-10倍以内,比如裂缝宽0.01 m,该区域网格边长取0.05 m左右。远离裂缝的区域可以放到2-5 m。地层尺度大、网格从密到疏的过渡用自由三角形网格即可,不要强行用结构化四边形,除非你的几何特别规整,否则会花大量时间在网格质量修复上。
一个更细化的技巧:在裂缝尖端附近布置局部加密区,因为应力奇异性就集中在尖端附近,网格加密后K_I计算结果会更稳定。网格太粗,应力集中会被抹平,裂缝扩不出来。网格太细,单元数量急剧膨胀,瞬态求解时间步变短,计算时间和内存增长得也很夸张。这个度需要调试,我一般先跑一个粗网格看趋势,确认物理行为合理后再加密做最终版本。
3.4 求解器配置与时间步长控制
瞬态求解器建议先用BDF(向后差分公式)方法,阶数自动或1-2阶为宜,过度追求高阶对于多物理场耦合问题没有意义,反倒容易振荡。线性求解器直接选PARDISO,这类多物理场矩阵一般是非对称的,带参数化扫描时PARDISO的鲁棒性很好。我试过迭代求解器,在强耦合条件下经常不收敛,换PARDISO就正常了,所以对于这类问题不要犹豫,直接上直接求解器。
时间步长是整个瞬态分析中最容易出问题的环节。注入初期压力波传播快,必须用小步长,比如0.001 s起步;进入拟稳态后可以慢慢放大到几秒甚至几十秒。Comsol的BDF求解器带有自适应步长控制,设置合理的相对容差(默认0.01通常够用,追求精度可以降到0.001)后交给求解器自行调整即可,不建议手动固定时间步长,除非你要做严格的时间收敛性验证。
3.5 参数化扫描与工况设计
参数化扫描建议重点关注四类变量:注入压力或流量、注入时间、岩石弹性模量、渗透率。通过扫描可以发现哪些因素对裂缝延伸距离的敏感性最高,这对压裂设计参数优化很有意义。
在Comsol中可以直接在全局参数节点定义扫描参数列表,研究节点里选择Parametric Sweep。扫描结束后,后处理端可以用一维绘图组观察不同参数下裂缝中心线处的孔隙压力曲线、位移曲线。如果需要批量输出多组曲线,可以考虑用Parametric Sweep配合导出数据集,把结果整理成表格直接放到报告里。这样一次性把几十组工况跑完,比手动一个一个改参数高效得多,也更容易发现参数之间的交互效应。
4. 结果分析与现象解读
4.1 孔隙压力扩散形态
模拟结果里比较直观的是孔隙压力云图。注入井周围会出现一个高压扩散区,随时间推移等压线逐渐向外推移。如果地层渗透率低,压力扩散慢,裂缝附近会形成局部的"高压包",这个高压包就是维持裂缝张开背后的流体压力来源。
对比不同渗透率条件,你会看到高渗地层里压力扩散得更快,更容易把能量散溢到远处,而低渗致密储层中压力积聚明显,迫近井筒区域的压力梯度很大,有利于维持有效裂缝宽度,但也会增加滤失控制难度。这个结果跟现场认识是一致的——页岩气压裂要用滑溜水大排量注入,就因为基质渗透率太低,必须靠高压维持缝内净压力,才能造出足够长的裂缝。
4.2 裂缝张开度与应力阴影
裂缝条带法向位移差就是张开度。观察位移场云图,裂缝条带两侧的位移会出现明显突变,差值就是裂缝宽度的数值近似。沿裂缝长度方向提取这段宽度,可以看到典型的近井端宽、尖端窄的分布特征,与现场经验相符。
应力阴影效应在结果里也很显眼。注入后裂缝两侧的水平主应力被局部抬高,尤其是垂直于裂缝面方向,最小主应力数值上发生变化,形成"阴影区"。在多段压裂设计时,如果缝间距太近,相邻裂缝会被阴影区内的应力抬高作用压制,导致扩展不对称或者被压缩变窄。这正好解释了为什么现在很多设计强调"拉链式"交替压裂,而不是一段接一段顺序压裂。我在参数扫描里把缝间距从50 m缩到20 m,后一条裂缝的缝宽明显下降,这个变化直接影响了现场射孔方案的调整。
4.3 与经典解析解(KGD/PKN)的对比验证
验证数值模型对不对,最踏实的办法就是跟经典解析模型比。上世纪五六十年代发展起来的KGD模型和PKN模型,给出了裂缝长度、宽度与注入参数之间的解析关系。两者区别在于裂缝形态假设:KGD模型假设裂缝高度不变、宽度沿缝长均匀,更适合短而宽的裂缝;PKN模型假设裂缝在水平面上呈长而窄的椭形,能量主要耗散在裂缝长度方向,更适合长裂缝。实际选取哪个做对比,取决于你研究储层的缝高约束条件。
在低渗、缝高受限的储层中,可以用KGD模型估计半缝长随注入时间的变化。数值解与解析解的曲线趋势一致,偏差在合理范围内,说明模型的物理行为是合理的。如果偏差很大,优先检查边界条件是否把远场限制得太近,或者材料参数是否正确。我在第一次验证时,裂缝长度比解析解偏短了将近30%,排查后发现是远场边界距离井筒只有30 m,应力约束太强,后来把模型区域扩大到100 m之后,偏差降到5%以内。这个教训让我记住了"远场边界要离得够远"这条准则。
4.4 参数敏感性分析
从实际扫描经验看,影响缝长的第一敏感性参数是注入流量和注入时间,其次是弹性模量和地应力差。渗透率对缝长的影响不如前几个参数那么大,但会显著改变滤失量。这些结论反过来验证了现场设计里"大排量、低砂比、长时间"策略的物理基础——流量和时间的乘积直接决定压裂液总能量,而滤失项决定了有效能量比例。做敏感性分析时,建议把结果整理成归一化对比曲线,横坐标是参数倍数,纵坐标是目标量相对基准工况的百分比,这样放到汇报材料里也一目了然。
5. 常见问题与排查经验
5.1 不收敛问题
多物理场瞬态仿真中,不收敛大概率不是求解器不行,而是模型本身有问题。最常见的几个原因:网格在应力梯度大的区域太粗;时间步长过大,压力跳跃导致应力场振荡;材料参数出现量级不合理,比如渗透率填成了毫达西而不是m²,导致整个方程病态;还有一种是边界条件互相矛盾,比如井筒处既给定压力又限定位移,双约束把方程锁死。排查时先把边界条件里的约束逐个释放测试,再检查参数量级,这是最有效的排查顺序。
5.2 网格依赖
水力压裂对网格的依赖几乎是所有仿真问题里最强的之一。裂缝宽度、扩展长度都跟网格尺寸直接相关。如果发现网格粗一倍,缝长结果差30%以上,说明你的几何和本构设置有问题,要先稳定网格无关性再谈参数研究。比较实用的做法是固定物理参数,跑三套网格尺寸:2倍粗、标准、2倍细,比较关键响应量(裂缝长度、井底压力)的变化率,误差在5%以内才算网格收敛。很多时候差得离谱是裂缝条带网格太粗导致的压力不连续,加密后问题自然消失。
5.3 负孔隙压力与振荡解
负孔隙压力很常见,尤其是在远场边界压力设得不对时,或者时间步长过大导致数值振荡。遇到这个情况先检查边界条件,确认远场是不是维持原压,再看求解器容差,把相对容差从默认的0.01调到1e-3到1e-4,重新求解。我遇到过一种特殊情况:裂缝条带渗透率设得比基岩高出几个数量级,导致局部流动速度过快,压力场出现锯齿状振荡,后来限制了裂缝渗透率倍率后,振荡消失,结果也合理了。
5.4 裂缝路径控制
预设裂缝路径的方法有一个副作用:裂缝只能沿预先画好的路径扩展,无法自动拐弯。这不完全是坏事,因为宏观水力裂缝的方向基本可由地应力方向预判,预置路径带来的误差有限。但如果想研究天然裂缝对裂缝扩展的影响,就要在路径中嵌入多个不同角度的天然裂缝段,或者采用损伤模型让裂缝可以在更宽松的空间中寻路。后者实现难度明显更大,但对复杂缝网的研究几乎是绕不开的路径。我的建议是先用直线路径把整个模拟流程跑通,再逐步加分支和角度变化,一步一步逼近真实地质条件。
结语
我做这类模拟最大的体会是:Comsol最大的优点不是某个求解器有多强,而是把物理问题压缩成"选模块、设参数、看分布"三个动作的时间成本很低,这让你可以把更多的精力放在理解物理过程上。耦合收敛问题的根源几乎都出在人对控制方程的理解上,而不是软件本身。如果你正在做水力压裂方向的课题,我的建议是先别急着追复杂的三维模型,把一个二维耦合模型做透,结果能跟解析解对上,再往裂缝扩展、三维模型、温度场耦合逐层加码,这条路会顺畅得多。另外,记得每一组参数跑完都留好模型文件和参数记录表格,不然过两个月再想复现某个工况,只能对着屏幕发呆。