1. 煤层气注CO₂驱替的THM耦合机制解析
在煤层气开采现场,注二氧化碳驱替甲烷的过程本质上是个典型的多物理场耦合问题。就像老张在井场遇到的困境,表面上看是注气参数调节问题,深层原因其实是热力学(Thermal)、流体力学(Hydrological)和力学(Mechanical)三个物理场的相互作用。
1.1 三场耦合的闭环反馈机制
当CO₂注入煤层时,会触发三个连锁反应:
- 热力学效应:CO₂从超临界态向气态转变时吸收热量,导致局部温度骤降(通常达10-15℃)。这种温度变化会引起煤体收缩,就像冬天铁轨收缩产生缝隙一样。
- 力学响应:温度变化导致煤体产生热应力,同时注入压力使煤基质压缩。二者叠加形成的有效应力σ'可用公式表达:
code复制其中σ为总应力,α为Biot系数(煤层通常取0.7-0.9),p为孔隙压力。σ' = σ - αp - 流体运移:应力变化会改变煤的孔隙结构和渗透率,进而影响气体流动路径。这种变化又会反过来影响温度和应力分布,形成闭环反馈。
1.2 渗透率动态模型构建
煤层的渗透率不是固定值,而是随应力状态动态变化的。采用修正的Kozeny-Carman模型时,渗透率k与孔隙度φ的关系为:
python复制def kozeny_carman(phi, phi0=0.12, k0=1e-15):
return k0 * (phi/phi0)**3 * (1-phi0)/(1-phi)
其中孔隙度φ随有效应力变化:
code复制φ = φ0 * exp(-σ'/E)
E为煤的体积模量(典型值1-3GPa)。这个指数关系就像弹簧的压缩过程——初始变化明显,后期逐渐趋于稳定。
关键提示:实际建模时建议对指数项做泰勒展开截断处理,避免极端应力条件下出现数值溢出。
2. COMSOL模型搭建实战
2.1 多物理场接口配置
在COMSOL中需要依次激活以下模块:
- 固体力学:处理煤体变形
- 达西流:模拟气体渗流
- 热传递:计算温度场
- 数学PDE:自定义竞争吸附模型
特别要注意物理场间的耦合设置:
- 在"多物理场"节点下勾选"热膨胀"和"多孔弹性"
- 在达西流接口中启用"孔隙弹性"选项
- 添加"非等温流动"耦合特征
2.2 竞争吸附模型实现
气体吸附采用扩展的Langmuir模型,在PDE模块中输入:
matlab复制% 竞争吸附项定义
C_CO2 = (P_CO2*Vm1)/(1 + b1*P_CO2 + b2*P_CH4);
C_CH4 = (P_CH4*Vm2)/(1 + b1*P_CO2 + b2*P_CH4);
% 吸附热耦合项
Q_ads = -ΔH1*∂C_CO2/∂t - ΔH2*∂C_CH4/∂t;
其中b1/b2为CO₂/CH₄的吸附亲和力系数,现场实测表明:
- 高阶煤:b1≈0.6-0.8,b2≈0.3-0.5
- 低阶煤:b1≈0.4-0.6,b2≈0.2-0.3
2.3 网格划分技巧
煤层模型的网格需要特殊处理:
- 边界层网格:在注气井周围添加3-5层边界层网格,厚度按几何级数增长(比例因子1.2-1.5)
- 各向异性加密:沿最大主应力方向网格尺寸设为垂直方向的1/3-1/5
- 过渡区设置:在应力集中区使用扫掠网格,核心区域尺寸不超过井筒半径的1/10
典型的网格质量检查标准:
- 单元质量>0.3
- 纵横比<5
- 雅可比矩阵>0.6
3. 关键参数设置与求解策略
3.1 材料参数库参考值
| 参数 | 高阶煤 | 低阶煤 | 单位 |
|---|---|---|---|
| 初始渗透率 | 0.1-1 | 1-10 | mD |
| 孔隙度 | 0.08-0.15 | 0.15-0.25 | - |
| 弹性模量 | 2.5-3.5 | 1.5-2.5 | GPa |
| 吸附应变系数 | 0.02-0.04 | 0.01-0.02 | - |
3.2 求解器配置要点
-
时间步进策略:
- 初始阶段用常数步长(0.1-1天)
- 压力变化剧烈期切换为BDF方法,最大阶数设为2
- 相对容差设为1e-4,绝对容差根据变量量级调整
-
非线性收敛技巧:
matlab复制solver = model.study.create('std1'); solver.feature('time').set('tlist', 'range(0,10,1000)'); solver.feature('tol').set('rtol', 1e-4); solver.feature('damping').set('dampmax', 0.8); -
内存优化:
- 启用几何多重网格预条件器
- 对固体力学问题采用直接求解器(MUMPS)
- 设置最大内存使用量为物理内存的70%
4. 典型问题排查手册
4.1 常见报错与解决方案
| 错误类型 | 可能原因 | 解决方案 |
|---|---|---|
| 发散的解 | 初始渗透率过大 | 采用ramp函数逐步加载注气压力 |
| 温度场异常 | 吸附热设置错误 | 检查ΔH单位(应为J/mol) |
| 应力奇异点 | 网格过渡不连续 | 添加圆角或使用边界层网格 |
4.2 现场数据拟合技巧
-
温度异常诊断:
- 绘制井筒径向温度剖面
- 检查热传导系数与实测值的偏差
- 验证吸附热参数是否匹配煤阶
-
产量曲线校正:
python复制def history_matching(obs, sim): # 加权最小二乘法 weights = np.where(obs>0, 1/obs, 1) return np.sum(weights*(obs-sim)**2)重点匹配前30天的动态响应,权重系数设为后期的3-5倍
-
反演参数优先级:
- 渗透率应力敏感系数
- Langmuir体积参数
- 吸附应变系数
5. 工程优化经验集锦
5.1 注气方案设计黄金法则
-
温度-压力协同控制:
- 初期保持注气温度50-60℃(促进CO₂超临界态)
- 中后期降至30-40℃(诱发热应力裂缝)
- 压力梯度控制在0.8-1.2MPa/m
-
段塞式注入策略:
- 注气3个月后停注1个月
- 压力回落至初始值的70%时恢复注入
- 循环3-4次可提高采收率15-20%
5.2 监测数据活用技巧
-
微震事件解读:
- 高频事件(>100Hz):指示剪切裂缝
- 低频事件(<30Hz):反映孔隙坍塌
-
井口压力波动分析:
- 周期性波动:反映裂缝扩展
- 突发性下降:预示沟通天然裂缝
-
产出气组分预警:
- CO₂含量突增:可能发生气窜
- N₂含量升高:暗示套管泄漏
实际建模时可以尝试在井筒附近预设一组微裂缝(长度1-3m,间距5-8m),用离散裂缝网络(DFN)方法处理。这种方法虽然会增加10-15%的计算量,但能更准确地模拟现场常见的"蚯蚓洞"效应——就像老张那次意外发现的,注气过程中形成的曲折优先通道。