2. 油藏数值模拟方程的求解#
2.1. 求解流动方程#
上面得到的流动方程描述了整个系统——油藏模型——中的全部状态。任何一个点中的流动都可以用上述的方程来求解。但是在实际解决问题的时候,我们不可能对整个油藏中所有的点都求解。求解上述方程的技术已经在各行业都有应用了,这里我们不再介绍全部的研究过程,读者如果有兴趣可以参考相关文献资料。
2.1.1. 建立离散化网格系统#
既然我们不是要求解所有的点,那么就可以引入离散化网格系统。把连续的真实物体近似为一系列离散的网格所组成的网格系统。一维问题可以选择线状排列的网格系统,二维问题可以选择以问题所在面排列的网格系统,三维问题可以选择问题所在空间的中排列的三维网格系统。那么前面提出的岩芯模型分别考虑为一维、二维、三维问题下所建立的离散化网格系统,如下图所示:

上图中是把原来的岩芯按照不同的方向“切”成了小块,每一小块就是一个网格。由于岩芯是圆柱体,所以“切”出的小块有曲面组成。在理论推导中,如果网格的形状有曲线或者弧面的表示会增加问题求解的难度,因此在处理网格时,都会选择直线和平面的网格形状,离散化网格会选择六面体网格或者四面体网格,这些网格的表面都是平面。如下图所示的六面体网格离散的岩芯模型:

在这里有人可能会提出疑问,这样离散成的网格系统跟原来的岩芯大不相同,原来是圆柱,现在就是一个个小矩形块组成的大矩形块而已。提出这样的问题很正常,这个问题也是我们在做数值模拟中一定要弄清楚而且熟记于心的问题,就是数值模拟中,研究目的决定了手段和结果。
首先,对于岩芯模拟这个问题,我们研究的目的是得到不同时刻岩芯中的流量、饱和度、压力的变化,这些才是最重要的。而需要计算出这些变化动态,只要能把岩芯的物理性质、横截面积、体积、流体物性等等特征模拟出来参与计算就可以了。至于数学模型内部用的岩芯是不是圆柱、有没有弧形边界都是不重要,对分析的结果影响可以忽略。其次,以目前的技术手段而言,使用曲面的网格在数学上不便于表达,会增加额外的负担,研究人员需要输入更多的参数,增加了使用的负担;计算机要处理更多的渲染计算,增加了处理计算的负担。就像三维游戏一样,一开始的物体也是由少数的多多面体构成的,看起来很粗糙。在几十年间计算机性能提高了以后,才逐步的出现了各种仿真系统,模拟复杂的表面、皮肤效果、天气效果等等。因此随着技术的发展,这些都可以能会应用到油藏数值模拟中,但是目前还有一定困难。因此在模拟计算时我们会选择简化的模型,而在使用简化模型计算出结果以后,可以选择开发出专门的三维显示软件来展示结果。此时的三维软件可以渲染得非常好,现有仿真显示技术已经可以做到以假乱真了。后面会涉及到油藏数值模拟软件的体系结构。这样的展示软件我们称为油藏数值模拟的“后处理”软件。
在离散化出网格系统后,每一个网格就是研究问题中的一个小单元,这个小单元跟之前推导公式过程中所指的控制体积有些类似。每一个网格我们会赋予一定的属性,这些属性包括以下几类:
(1)网格物理属性。就是把原来的真实物体的物理属性按照一定的算法分布到这些网格上。这样的属性包括孔隙度、渗透率这些属性参数,同样不要忘记网格本身的形状参数,网格内部的总孔隙体积要用总体积作为参考来计算。如果对于热采模型,还需要给出热容、导热系数等参数。
(2)流体的属性。这些属性包括流体的分布、饱和度、压力等等参数。由于是求解流体流动方程,所以流体的属性最为重要。
(3)源汇点的属性。如果是对于油藏的模型,有些网格会包括井的模型,有注入井(源点)和生产井(汇点)。这样网格就会含有井的属性,如井的形状参数、井内半径、表皮因子等等。有时网格中还可能包括额外的水体模型,水体模型可能是源点也可能是汇点。这样网格的属性就会有水体的压力、压缩系统等属性参数。
当真实模型的离散化网格系统建立好以后,对于每一个网格都对应一组流动方程。
2.1.2. 代数方程组的建立#
这样我们可以使用有限差分法来对流动方程进行处理。有限差分法的思路,就是找到有限个离散点,在这些离散点处求得原方程的近似表达式。然后我们用在这些离散点处的近似的表达式代替原来的微分方程,这些方程称为有限差分方程。经过有限差分法处理后的微分问题变成了代数问题,我们就可以用数值方法求解代数方程组来得到结果。我们用一维网格来说明这个过程。

如上图所示,网格
采用两点有限差分形式,对于任意一网格
其中:
,与网格i相邻并接触的任意网格; ,与网格i相邻并接触的网格个数; ,从网格j流入网格i的流量; ,与网格i与与网格j之间的网格传导率; ,与网格i与与网格j之间的水相压力差,即 。
水相流动方程中的累积项需要进行时间差分,考虑到从时间
其中:
-
为了保持推导过程简要,源汇项任然保持流量的表达形式,只是考虑多个源汇点存在将源汇项做如下处理:
其中:
,是网格 中源汇项的个数; ,是网格 中任意一个源汇项 的流量;
于是我们得到了水相流动方程的有限差分表达形式:
实际上述方程在有限差分过程中会包含余项,也叫局部离散误差。为了简化本处省略该项。与水相类似,我们可以得到油相与气相的流动方程的有限差分表达形式为:
其中:
同理可得气相的流动方程的有限差分表达形式为:
其中:
对于三相黑油模型来说,对于每个网格i,上述方程的未知数有三个:
其中:
,此上标表示当前时间步的值,是未知数,前一个时间步的变量都用 上标标注,是已知的; ,在不同条件下可以是 、 中的任意一个。取决于油气两相之间的相平衡状态。
假如我们建立了N个网格的离散化网格系统,每个网格有油气水三个流动方程,最终我们得到了3N个方程所组成的非线性方程组。这个方程组有3N个未知数。为了便于后面介绍该非线性方程组的解法,我们把方程组可以用如下符号表示:
这里我们不再赘述这个方程组的误差以及是否有解的条件。有兴趣的读者可以参考相关资料。
2.1.3. 非线性方程组求解#
对于前面得到的有限差分方程组,有不同的方法可以求解。例如全隐式方法(简称FULLIMP方法)、隐压显饱方法(简称IMPES方法)、自适应显隐方法(简称AIM方法)来求解。FULLIMP方法就是求解式时所有未知数在当前时间步同时求解,这个也是黑油模型油藏数值模拟的默认解法,适合求解相对复杂的实际问题。而IMPES就是先把压力作为未知数,此时假设由饱和度引起的值在求解压力时不发生变化,因此和当前时间步的饱和度相关的值比如毛管力保持不变。这样先求出压力值以后,再重新显示计算出饱和度和其他与饱和度相关值。我们以油水两相的方程组来说明一下IMPES方法的过程。两相的方程组按照上一小节末的介绍可以表示如下:
采用IMPES方法时,第一步假设饱和度相关的参数不变化。含水饱和度
注意此时方程未知数减少了,所以计算量相应减少了。求解上述的简化后的非线性方程组,得到压力未知数
FULLIMP方法的优点是稳定性好,但是缺点是计算量大,速度比IMPES方法慢。而IMPES方法的优点是求解线性方程组要小,计算比FULLIMP方法要快很多,而缺点是因为饱和度未知数是显示计算,稳定性差,
这里我们重点介绍一下FULLIMP方法的求解细节。现代油藏数值模拟中FULLIMP方法主要求解思路是使用牛顿迭代法。牛顿迭代法又叫做牛顿下山法,这种叫法是一种很形象的比喻。我们先看一个一元函数方程使用牛顿迭代法的求解过程。令:
下面开始求解的迭代流程。
(1)过初值点
(2)求出该切线与X轴的交点的
(3)如
迭代收敛条件有不同的计算方式,可以直接计算
如果

假设
可以认为通过上述迭代公式,可以利用函数及其导数可以从任意当前值
我们把上述牛顿迭代法应用于求解前面的油水两相模型所得到的流动方程的方程组。该方程组的未知数的迭代表达式为:
其中:
,是当前迭代步 的未知数的初值; ,是 的雅各比矩阵;是方程组对每一个变量求偏导数的矩阵; ,是雅各比矩阵的逆矩阵; ,是求解出的新未知数值,如果此时满足收敛条件,就是当前方程组的解;如果此时不满足收敛条件,就是下迭代步的初值。
因此未知数的增量
实际上求矩阵的逆非常困难,因此上式可以转化为如下形式:
上述表达式是一个线性方程组,形如

而
2.1.4. 收敛条件#
由于
其中:
、 、 代入方程组 后得到的水、油、气方程所得到的残差残差; ,是方程的流量项; ,是方程的累积项; ,是方程源汇项。
整个方程组的残差表示如下:
如果上述的残差项
其中:
,被物质平衡误差; ,网格个数; ,平均体积系数; ,每个网格的孔隙体积; ,每个网格的残差值。
由于残差项是流量项,是体积速率,残差项乘以时间
实际的数值计算结果已经告诉我们,大多数情况下,所求得的物质平衡误差往往都比较小,即物质平衡误差很容易达到要求。有一部分原因是因为在上述公式求和的时候,有的残差可能数值的绝对值较大,但是这些数值之间,正负相加后被互相抵消,因此最后的结果数值比较小。因此为了保证数值结果的精度,往往还需要考察残差的绝对值,即增加一个额外的收敛条件。如下述公式所示:
上式中