天然气水合物降压开采数值模拟调试实战与收敛优化
2026/9/10 7:00:34 网站建设 项目流程

上周熬到两点,终于把水合物开采模型给跑通了。说实话,这一周我整个人都快被这个模型磨没脾气了,光是“不收敛”三个字我就看了不下几十遍。不过现在回看,这一周踩的坑、掉的头发,全都变成了经验值。趁着记忆还热乎,赶紧把整个调试过程和思路整理出来,给同样在水合物数值模拟里挣扎的朋友们一个参考。

先说清楚这个模型是干嘛的。我搭的是天然气水合物储层降压开采的数值模型,核心就是模拟在降压条件下,水合物分解、气水两相流动、热量传递以及储层变形这几者之间的耦合过程。说白了,就是要在计算机里还原“从水合物层里把天然气采出来”的整个过程。这个模型跑通了,就能用来预测产气速率、分析水合物分解前缘的推进规律、评估二次水合物生成的堵孔风险,甚至还能为现场试采方案提供参数依据。适合谁看?如果你正在搞油藏数值模拟、水合物开采方案设计,或者对多相流耦合模拟感兴趣,这篇内容应该能帮你省下不少试错的时间。

1. 水合物开采模型到底在模拟什么

1.1 模型要解决的核心物理过程

搞模型之前,我先把物理过程理了一遍。水合物开采和常规油气开采最大的不同在于:常规油气采的是已经在孔隙里自由流动的流体,而水合物是固态的,要先让它“化掉”变成气体和水,然后才能流动采出来。这个“化掉”的过程,也就是水合物分解,是整个模型的灵魂。

水合物分解需要吸热,热量来源主要有两个:一个是储层自身的显热,一个是外部流体的热对流。热量不够,分解就会变慢甚至停止。所以模型里能量守恒方程是少不了的,而且必须和流体流动方程强耦合。再者,水合物分解会产生水,水的饱和度升高之后会改变气相渗透率,影响气体流动路径。更麻烦的是,产气过程中压降会进一步降低温度,导致已经分解出来的水蒸气和水重新生成水合物,这就是“二次水合物生成”,它在实际开采里是个大麻烦,容易堵塞孔喉,模型里必须体现。

除了热-流-化耦合,还有一个容易被忽略的维度是力学。水合物分解后,储层骨架失去胶结支撑,强度下降,会有沉降甚至出砂风险。我这个版本暂时先把力学简化成孔隙度-渗透率随水合物饱和度变化的经验关系,没有引入完整的地质力学求解,不然计算量直接爆炸。但这已经能反映分解诱导的渗透率改善效应。

1.2 三种开采方式在模型里的差异化处理

水合物开采目前主流有三条技术路线:降压法、热激法、抑制剂注入法。模型里它们的初始条件和边界条件差别很大,必须分开处理。

降压法的核心是降低井底压力,让储层压力低于水合物相平衡压力,从而触发分解。模型上就是人为设定井点处的压力约束,然后看压降漏斗怎么向外扩展,分解前缘怎么移动。热激法需要注入热水或蒸汽,模型里需要加上注入井的质量和能量源项,同时伴随强烈的热对流,数值上更难稳定。抑制剂注入法则要引入甲醇或盐类对相平衡曲线的移动作用,这需要修改相平衡计算模块,我第一版没有做,因为化学添加剂在网格里的迁移计算会引入额外的对流-扩散方程,调参复杂度进一步提高。

我最终选择的是降压法,原因很简单:它在工程上最可行、成本最低,而且模型里只需要修改井底压力边界,物理过程相对干净,方便我先把“分解-流动-传热”这条主线打通。等你把降压法搞明白了,再往热激、抑制剂方向扩展,逻辑会顺畅得多。

2. 建模工具与核心参数处理

2.1 用哪个工具最合适

水合物开采模型最经典的代码是TOUGH+HYDRATE,这是劳伦斯伯克利国家实验室开发的专用模拟器,专门解决水合物储层多相多组分流动传热问题。这个代码的优势在于它把水合物相平衡、四相(气、水、水合物、冰)流动、热量传输都内置了,你只需要准备好网格文件和初始条件就行。我用的是它。

另外,有人用CMG STARS做水合物开采模拟,它的化学反应模块可以自定义水合物分解反应,前后处理也更友好。但说实话,STARS毕竟不是专门做水合物出身的,在水合物相平衡的精细度上不如TOUGH+HYDRATE。也有人用COMSOL自己做控制方程,灵活性极高,但需要自己把多相流动和相平衡全部写成PDE,工作量非常感人,不适合赶进度的人。这里给一个我的工具选择对比:

工具适用场景上手难度水合物内置支持我的建议
TOUGH+HYDRATE水合物储层专用模拟中高完整首选,跑通主流程
CMG STARS常规油藏、反应输运需自定义有CMG基础的人可考虑
COMSOL自定义耦合、机理研究无,全自建适合做学术深度研究
自编代码彻底搞懂每个方程极高时间充裕再考虑

如果你也是刚开始接触这块,我建议直接上TOUGH+HYDRATE。别一上来就想着自编代码,那个坑太深,等模型跑通了之后再研究源码内部逻辑,效率会高很多。

2.2 储层参数怎么给才合理

模型参数取值直接决定了计算结果靠不靠谱。我参考了大量公开文献中水合物试采区域的现场数据,最终整理出一组能跑通、且不会有明显数值病态的参数。核心参数如下(用常见实践参考值):

  • 初始水合物饱和度:0.4,上下浮动区间0.2~0.6,不同层位单独赋值;
  • 初始含水饱和度:0.5,确保孔隙中存在连续水相,压力传导不会断;
  • 初始压力:按静水压力梯度设定,储层中部压力约13 MPa;
  • 初始温度:约285.15 K(12℃左右),必须和相平衡边界保持一个合理的距离;
  • 孔隙度:0.35,绝对渗透率(绝对渗透率,即岩石本身允许流体通过的能力):100 mD;
  • 水合物分解动力学常数:参考Kim-Bishnoi模型的常用范围,分解活化能取值在80 kJ/mol左右。

这里必须强调一个关键点:初始温度和初始压力必须满足热力学相容性。如果你给的初始温压点刚好落在水合物稳定区内,那么模型一跑起来就开始大量分解,引起剧烈的数值震荡;如果落在稳定区外太远,又会立刻全部分解完,整个模拟失去意义。我一开始就是没仔细核对相平衡曲线,导致初始状态就在相边界附近抖动,计算直接爆掉。建议第一步先算出你设定温压下水合物的相平衡条件,再决定初值偏移方向。

3. 网格划分与初始条件处理

3.1 单井径向网格怎么布

水合物开采模型的大部分工程场景是单井开采,网格系统我用的径向圆柱坐标,这样既符合井筒周围的几何特征,又能大幅减少网格数量。径向网格的分布不是均匀的,而是从井壁向外逐渐变稀疏。为什么要这么做?因为井筒附近压降最剧烈,水合物分解前缘推进速度最快,这里的网格必须足够密才能捕捉到饱和度突变和压力梯度;而距离井筒较远的区域,参数变化平缓,用粗网格就能满足精度,同时大幅节省计算资源。

我采用的径向网格划分方案是:井筒最内层网格半径0.1 m,向外按1.2倍等比递增,一共设置80个网格,最外层半径延伸到500 m。垂向上分了5层,用来区分不同水合物饱和度的储层段。这样总网格数量才400个,计算速度可以接受,精度也能保证。真实储层的非均质性需要更多层,但第一版模型不用搞太复杂,等基本流程跑通之后再细化完全来得及。

注意:径向网格相邻两层的体积不能相差过大,建议增长系数控制在1.1~1.3之间。超过1.5就容易出现数值弥散,表现为饱和度剖面出现锯齿状振荡。

3.2 初始平衡场的建立方法

水合物模型的初始条件设置比常规油藏模型要麻烦得多。常规油藏只需要给出初始压力、初始饱和度分布,然后让模型计算一个重力平衡状态即可。但水合物模型还要考虑温度和相平衡条件,初始状态不对,计算开始后马上就会涌现大量非物理的相变。

我的做法是分两步走:第一步,先关掉水合物分解反应,只做纯流动的稳态初始化,让压力场、温度场、饱和度场达到一个自洽的重力-毛管力平衡状态。这个步骤相当于给模型一个“安静”的起点。第二步,在确认压力场、温度场平稳之后,再打开水合物分解反应,接入井的降压边界,正式开始开采模拟。

这个“先平衡、后开采”的策略非常关键。如果你一上来就同时打开分解反应和井底降压,那么初始的非物理扰动会被放大,轻则增加迭代次数,重则直接让计算发散。磨刀不误砍柴工,初始化多花的那点时间,在后续调试里都能补回来。

3.3 边界与源汇项怎么设置

边界条件方面,模型外边界我设为封闭边界(无流动),这个设定符合实际大规模开采时远场压力几乎不变的特征。但要注意,纯封闭边界会导致整个储层平均压力在开采中不断下降,与实际情况有偏差。更合理的做法是在外边界设置一个定压补给边界,模拟外围水体或未分解区域的压力支撑。但我第一版为了简化,先用封闭边界跑通流程,后续会在外边界加一个Make-up函数来维持边界压力。

井筒的处理采用定井底流压模式,把井底压力设定为4 MPa,低于水合物相平衡压力,从而诱导分解。为什么要选4 MPa?因为水合物在这个压力下对应的平衡温度约为4℃~5℃,而储层原始温度在12℃左右,存在足够大的过余温度,分解驱动力足够又不会过于剧烈。如果你把井底压力降得太低,比如1 MPa,分解会极其猛烈,局部温度骤降,计算会出现严重的数值困难。

4. 调试过程中踩过的坑与解决实录

4.1 非线性迭代不收敛的典型表现

说实话,第一次运行这个模型,我只撑了不到200个时间步就挂了。最典型的表现是:输出日志里Newton迭代次数不断增加,从正常的3~5次一路涨到20次以上,然后残差曲线完全平掉,该怎么降都降不下来。再往后就是时间步长被自动截断到1e-6天这个量级,计算几乎等于原地踏步。

这个问题根源很复杂,但最主要的原因是:水合物分解反应使得网格内的物性参数发生剧烈变化,特别是气相饱和度和渗透率的突变,导致Jacobian矩阵的条件数恶化,非线性迭代难以收敛

我调试的第一步是看初始压力场和温度场是否真的平衡了。我把初始输出的网格压力与理论静水压力对比,发现最大误差在5%左右。这个误差看起来不大,但它会直接引发初始阶段的流体再平衡流动,叠加降压引发的分解效应,就会形成数值震荡。解决办法是延长纯流动初始化模拟时间,从原来的10天延长到50天,让压力场充分平衡,初始扰动基本消除。

第二步是检查时间步长控制参数。TOUGH+HYDRATE默认的时间步长增长策略比较激进,收敛正常时步长快速增大,一遇到非线性格子就瞬间崩溃。我手动把最大时间步长限制在2天以内,同时把时间步长的增长系数从默认的1.5降到1.2。虽然整体计算时间变长了,但稳定性得到大幅提升,模型能够持续稳定地推进到开采中后期。

4.2 水合物饱和度“跳崖”式突变

我在检查结果时发现一个非常诡异的现象:水合物分解前缘的饱和度分布完全没有渐变过程,直接从初始值0.4跳变到0。理论上这对应一个非常尖锐的分解锋面,但饱和度剖面如果出现这种阶梯状突变,往往意味着是数值效应而不是真实的物理过程。

经过排查,我确认这是网格分辨率不足的问题。径向网格在远离井筒的位置太稀疏,相邻网格之间的体积差异太大,导致分解前缘推进时,前一个网格刚分解完,下一个网格还完全没动静,中间缺少过渡网格。解决办法是加密分解锋面可能到达的区域,同时增加分解动力学的时间尺度控制,让分解速率不要那么“刚硬”。我把中等半径区域的径向网格加密了15个,同时调整了分解反应的频率因子,让它从“瞬间完成”变成“渐进分解”,饱和度剖面就变成了合理的S形过渡,物理上更容易解释。

4.3 局部温度“跌破”相平衡线导致计算崩塌

降压开采过程中,水合物分解会强烈吸热,局部温度会大幅下降。如果这个温度下降得过于猛烈,会突破水合物相平衡曲线,导致已经分解的区域重新满足水合物的稳定条件。理论上这对应二次水合物生成,但数值上,这种局部区域的相态反复切换会带来严重的收敛问题。

我的处理方案是在能量方程中加入了一个热量补偿源项,用来近似模拟地层从上下围岩中获取的热补给。这个热补给在物理上确实存在,因为储层并不是绝热的,上下层岩石中的热流会源源不断地向分解区传递。加入这个源项之后,局部温度降幅明显减小,分解前缘的推进速度也变缓了,更重要的是模型再也没有因为温度跌破相平衡线而崩溃。

注意:加入热补给源项时,热流大小要控制在合理范围内,不能太大,否则会人为地过度促进分解。我的取值参考了储层地温梯度和岩石热导率,大约在0.05 W/m²的量级。

4.4 井筒附近网格的“伪振荡”

当模拟进行到后期,井筒附近压力下降到一个很低的水平,这时候我发现产出气体中水蒸气的含量出现周期性振荡,振荡周期大约对应几个时间步。这个振荡不是真实的水蒸气波动,而是数值噪声,原因是井筒附近的气相饱和度非常高,气体流速很快,导致对流项占绝对主导,而数值格式在这种条件下容易产生迎风振荡。

这个问题的常规解法是加密井筒附近网格同时减小时间步长,但我实测下来效率极低。后来我换了一个思路:在能量方程中增大数值扩散项,也就是人为增加一点点网格Peclet数的控制。做法是在流体属性的数值处理上增加一个小的导热系数余量,这个余量不会对整体温度场产生本质影响,但能有效压制对流主导时的数值振荡。用这个操作之后,水蒸气的振荡幅度迅速衰减到可忽略水平。

5. 收敛性分析与加速收敛的调参策略

5.1 关键数值参数调节建议

跑通模型之后,我又花了不少精力去调优收敛性能。这里总结几个最关键的数值参数和控制策略,直接关系到你的模型是两小时跑完还是两天跑不完。

  • 时间步长控制:初始步长设1e-4天,最大不超过2天,增长系数设置在1.2~1.3之间;
  • Newton迭代次数:每个时间步的Newton最大迭代设为15次,超过10次就要警惕,说明模型可能正在逼近困难区域;
  • 线性求解器:使用不完全LU分解预条件GMRES,重启动参数设为80,收敛容差设为1e-6;
  • 非线性格点的处理:当残差下降率低于0.5时,主动截断时间步长并重新开始迭代,不要硬熬,硬熬的结果往往是残差打转。

调参有一条核心原则:宁可多走几步,不要一步跨太大然后摔跤。数值模拟最忌贪心,一个大的时间步长让你感觉计算飞快,但一旦发散,回退重算的代价远大于用小步长稳扎稳打的成本。

5.2 我实测有效的三步收敛优化法

第一步,关闭水合物分解,做一个纯流动初始化,让压力场和饱和度场充分平衡。这一步是整个计算的基础,基础不稳,后面全白搭。第二步,先使用较低的分解速率常数,在不考虑热量补给的情况下跑出一个初步的产气曲线,确认模型在“温和”条件下没有系统性bug。第三步,逐步提高分解速率常数到文献推荐值,并加入热量补给效应,观察模型是否还能保持稳定。三步下来,我的模型从原来的跑几百步就崩溃,变成能一口气跑完模拟周期的完整输出。

这里还要提一个实用技巧:输出控制参数中的打印频率不要设得太高,否则日志文件会迅速膨胀,磁盘空间被占满之后计算会不明原因中止。我当时就吃了这个亏,跑了两天发现日志文件把磁盘写满了,前功尽弃。建议打印频率控制在每10个时间步输出一次,既能监视模型状态,又不会把磁盘撑爆。

5.3 计算效率的实用优化技巧

模型跑通之后,如何让它跑得更快就成了新的诉求。我做了两方面的优化:一是并行化,TOUGH+HYDRATE支持OpenMP并行,我的机器是8核CPU,设置线程数为6之后,计算速度提升了接近4倍。这里有个经验:线程数不要超过物理核心数,否则线程切换开销会吃光并行收益。二是调整线性求解器的预条件参数,我对比了一下,ILU分解的填充级别从0提升到1之后,线性求解的迭代次数减少了约30%,整体计算时间缩短了15%左右。

此外,细心观察不同物理过程的时间尺度差异也很有帮助。水合物分解和压力传导的时间尺度差别很大,如果在每个时间步都强制精确求解压力场,计算量会非常大。把这个维度考虑到时间步长的自适应控制策略里,在压力变化缓慢的阶段适当放宽收敛容差,在快速变化阶段收紧容差,可以显著提升整体效率。

6. 常见问题与排查技巧实录

6.1 典型报错信息与解决方法速查表

调试的这一周里,我遇到的所有典型问题几乎都可以归纳成下面这张表,希望你用不上,但真遇到了可以直接对照排查:

现象可能原因解决方案
前几步就发散,残差爆炸初始温压不合理,不在相平衡稳定区重新核对初始条件与相平衡曲线
计算正常但水合物饱和度出现锯齿状波动径向网格体积变化过大加密网格,增长系数降到1.2以下
运行几十步后时间步长骤降到1e-7天分解过快导致非线性格点检查分解速率常数,降低频率因子
温度场出现局部异常低温热量补给不足,二次水合物生成被放大加入热补给源项或增大热传导系数
气水产量曲线出现高频振荡对流主导条件下的数值振荡增加数值扩散,减小时间步长
日志文件异常庞大输出频率过高降低打印频率,清理磁盘空间
并行计算后速度反而变慢线程数超过物理核心数线程数设为物理核心数的75%左右

6.2 隐藏较深的三个工程坑

第一个坑是单位系统不一致。TOUGH+HYDRATE本身要求使用SI单位制,但我参考的文献有些用的是现场单位,比如压力的单位是psi而不是Pa,流速单位是m³/day而不是m³/s。这个单位不统一的问题,你运气不好会潜伏很久,表现为某些网格参数异常但又不至于崩盘。我的建议是建立一个单位转换表,把所有输入参数的数值和单位列成清单逐一核对,不要只凭记忆来输入。

第二个坑是孔渗比(孔隙度和渗透率比值)异常导致的地下水静压计算偏差。水合物储层中孔隙度升高后,声波时差和密度测井计算渗透率会明显偏离实验室测量值,如果你直接用经验公式算渗透率而不做岩电校正,渗透率可能偏差一个数量级。这直接影响压力传导速度和水合物分解推进速率。我的处理办法是参考同区域试井解释成果进行校准,尽量让模型输入渗透率和试井结果一致。

第三个坑是“人为的产气量虚高”。如果你的边界条件是定压补给,而且补给强度设置过大,模型会在计算后期出现产气量持续攀升、平台期过高的现象——这不是水合物分解贡献的,而是外部水体中的溶解气被不断抽出来。要判断是不是这个原因,可以单独输出来自水合物分解的产气速率贡献项,如果占总产气的比例持续偏低,就要怀疑你是不是实际上模拟了一个“溶解气驱”而不是“水合物分解驱”。

6.3 我的调试心态和习惯

最后说点调试之外但很有用的东西。模型跑不通的时候,人是很容易烦躁的,但越是烦躁越容易乱改参数,结果越改越糟。我这一周养成了一个习惯:每次只改一个关键参数,改完跑一轮,记录结果,再改下一个。这套流程看起来慢,实际上是最快的方式。因为你每改一个参数,你就确切知道它对模型的影响是什么;你在一次改五个参数,出了问题你根本不知道是谁的锅。

还有一个好习惯是保留每次调试的输入文件和输出结果,按日期编号归档。这个过程一开始会觉得麻烦,但当你需要回退到某个之前还能跑的版本时,这个习惯就是救命稻草。我的目录里现在躺着二十几个版本,每个版本的改动说明都在一个notes文本里,随时能查。

另外,计算过程中的监视很重要。不要设一个任务跑上两天就不管了,每天都要抽出时间看残差曲线和饱和度分布的变化趋势。数值模拟经常会遇到“温水煮青蛙”式的失效——模型看似在正常推进,但某些单元的参数已经悄悄偏离物理合理区间。尽早发现这种漂移,比等到最终崩溃再回头排查要省力得多。

7. 初版模型跑通之后的扩展方向

初版模型跑通只是第一步,距离真正用于工程预测还有很长的路要补。我自己接下来的计划,按照优先级排序大概是这样的。

首先,加上地质力学耦合。水合物分解之后储层强度会降低,出砂风险上升,这是实际开采必须考虑的问题。我打算引入简化的弹性应变模型,让孔隙度和渗透率不仅依赖水合物饱和度,还能随有效应力变化更新,这样就能初步评估开采过程中地层的沉降量。

其次,细化相平衡模型。目前使用的相平衡计算是内嵌的简化关系,它假设水合物是纯甲烷水合物。实际储层中可能含有少量其他气体组分(比如CO₂、H₂S),这些杂质会显著改变相平衡边界。如果要模拟真实储层,这一步不能跳过。

最后是历史拟合和不确定性分析。有了模型之后,需要用实际试采数据来校准模型参数,并用敏感性分析找出影响产气量的关键参数,为现场施工提供决策支持。这一块工作量大,但价值也最大。

跑通模型给人的感觉就像打仗拿下一个据点,后面还有更多仗要打。希望这篇长文能帮你少走一些弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询