黑油模型解剖.docx

上传人:鲁** 文档编号:543455554 上传时间:2022-11-02 格式:DOCX 页数:15 大小:618.45KB
返回 下载 相关 举报
黑油模型解剖.docx_第1页
第1页 / 共15页
黑油模型解剖.docx_第2页
第2页 / 共15页
黑油模型解剖.docx_第3页
第3页 / 共15页
黑油模型解剖.docx_第4页
第4页 / 共15页
黑油模型解剖.docx_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《黑油模型解剖.docx》由会员分享,可在线阅读,更多相关《黑油模型解剖.docx(15页珍藏版)》请在金锄头文库上搜索。

1、1 黑油模型理论基础1.1 基本假设(1)油藏中渗流是等温渗流;(2)油藏中有油、气、水三相,各相流体的渗流均符合达西定律;(3)模型考虑油组分、气组分、水组分三组分;(4)气组分在油气相、水气相之间发生质量交换;(5)相平衡瞬间完成;(6)水组分只存在于水相中,与油气相之间没有质量交换;(7)油藏岩石微可压缩,各向异性;(8)油藏流体可压缩,且考虑渗流过程中重力、毛管力的影响。1.2 数学模型 (1)辅助方程: (2)初始条件: (3)边界条件: (4)2 黑油模型程序整体结构图3 组员及分工姓名负责程序张敏主程序,CGIN, MF1, INTERP, INTPVT高博主程序,TRAN1,

2、SOLMAT, MATBAL, PRTPS郝延征主程序,TABLE, UINIT1, CODES, NODES徐杨主程序,GRID1, PARM1, QRATE4 主程序4.1 主程序主要功能(1)定义运算所需数组;(2)需要调用和生成的文件的打开和关闭;(3)通过调用子程序给模型赋基础数据和初始数据;(4)通过调用子程序给模型的运行确定各种控制;(5)在运行过程中反复读入井点数据(包括产量和注入量、井底流压、流动指数等)以及打印输出控制码;(6)分层计算油气水地质储量;(7)进行井点产量项处理和形成压力矩阵;(8)通过调用子程序求解压力方程;(9)显式计算饱和度;(10)进行过泡点处理;(1

3、1)根据压力和饱和度增量控制,自动调节计算时间步长;(12)未饱和网格块饱和度计算;(13)变泡点处理;(14)在每一运算时间步末进行物质平衡检验;(15)打印油井、水井、气井的分层报告和分井报告;(16)通过调用子程序进行计算结果打印输出和形成文件;(17)重启动运行方式的选择和重启动文件的生成和调用;(18)运算终止的控制及错误信息的提示。4.2 主程序流程图5 子程序CGIN5.1 功能介绍用不完全LU分解预处理共轭梯度法求解压力方程隐式差分得到的大型稀疏线性方程组。5.2 理论基础实践表明,预处理共轭梯度型方法无论是适应性还是计算速度,都远远超过了前面的方法。这类算法的优点是迭代收敛速

4、度不依赖于迭代因子的选取,收敛速度极快,应用范围极广,包括化学驱、混相驱、热力驱等复杂模型和各种难以求解的系数矩阵。例如,可以解决传统的共轭梯度法解决不了的非对称矩阵问题及一般算法难以求解的病态系数矩阵。因此,目前这种类型的算法已成为油藏数值模拟中最先进的求解大型线性方程组的方法。这里,黑油模型的子程序CGIN中运用的是将系数矩阵的不完全LU分解和ORTHOMIN加速法结合的预处理共轭梯度法。5.2.1 迭代求解的基本原理设有方程组: (5)并设为非奇异矩阵,则可以构造迭代公式: (6)或写成: (7)式中, ,表示两次迭代之间的增量。式就是通常所用的迭代公式。如果迭代是收敛的,则当足够大时,

5、式就成为。构造迭代方法的关键问题之一是如何选取矩阵,使之能以最少的迭代次数得到满足要求的解。显然,矩阵越接近于系数矩阵,则达到收敛标准所需要的迭代次数越少,但相应的,求解方程所需要的时间就要增加。在前面所讲的简单迭代法中,为对角矩阵,其元素为矩阵主对角线上的相应元素,这是构造矩阵的最简单的方法。高斯-赛德尔迭代法中,矩阵为矩阵的下三角部分。在直接解法中,矩阵为矩阵本身,这时式完全等价于,只要一次迭代就可以求得式的解。在黑油模型的子程序CGIN运用的预处理共轭梯度法中,矩阵为矩阵进行不完全LU分解后得到的近似矩阵。5.2.2 矩阵的不完全LU分解把大型矩阵直接分解成与的乘积而进行求解所需要的计算

6、工作量大,而且由于在油藏数值模拟中求解的大多是含有大量零元素的稀疏矩阵,这种分解常使矩阵中大量本来为零的元素在中变为非零元素,增加了内存占用量。即使是带状矩阵,如果矩阵的阶数很大,在带状区域内,这种由零变为非零元素的数量也仍然很大。因此,在油藏数值模拟中,当线性方程组的阶数很大时,实际上一般不采用高斯消元法或相应的LU分解方法。矩阵的不完全LU分解就是为了解决这一问题而提出的。这种方法可以尽量保持矩阵原有的稀疏性质,从而节约了内存,减少了计算工作量。充填级次越大,分解后的矩阵就越接近于原矩阵,对于足够大的充填级次,这种不完全LU分解实际上可以等价于矩阵的完全LU分解。而矩阵的零级不完全LU分解

7、的非零元素全部位于原矩阵中非零元素所在的位置上。这里,黑油模型的子程序CGIN中运用的就是系数矩阵的零级不完全LU分解。5.2.3 ORTHOMIN加速法有了矩阵的不完全LU分解之后,令 (8)式中,和是矩阵的严格下三角矩阵和严格上三角矩阵。是待求解的对角阵。则迭代公式可写成: (9)式中,因此,式的求解过程变为: (10) (11) (12) (13)因为分别为下三角矩阵、对角阵、上三角矩阵,所以上述公式的求解是非常容易的。但是如果没有特殊的加速收敛措施,上述迭代过程的收敛速度非常慢。如果系数矩阵是对称的,则共轭梯度法是一种很有效的加速方法。但是,对于非对称矩阵,常规的共轭梯度法就不能使用了

8、,而在这种方法的基础上发展起来的ORTHOMIN方法却能非常有效的解决非对称矩阵的问题。ORTHOMIN方法所采用的加速措施有两个:一是正交化,二是极小化。所谓正交化是指如果把看成N维空间的一个向量,则它在N维空间中就确定了一个方向,在大多数迭代方法中,对的修正都是沿着该方向进行的。而ORTHOMIN方法不是采用的方向作为修正方向,而是以与本次迭代以前的各次迭代修正量构造一个新的向量,使与以前各次迭代的正交,并以的方向为本次迭代对的修正方向。而极小化是指在确定了对的修正方向后,其修正值要再乘上一个而成为,其中成为极小化因子,它的选取使新的余量为最小,以保证新的余量不大于(一般是小于)以前的所有

9、余量而加速收敛。整个ORTHOMIN方法的迭代过程为: (14) (15) (16) (17)其中: (18) (19)式中,为正交化系数,其目的是让所有的都正交。实际应用上述方法时,并不需要使与以前所有迭代的都正交。根据式,当迭代次数增加时,每次迭代所需计算的求和项增加,不但增加了工作量,而且增加了计算中的舍入误差。实践表明,只要使与其前面的有限个(成为NORTH个)正交就可以了。这样,式可以重新写为: (20)其中,NORTH值的选取随研究问题的规模、难易程度及所需要的分解方法而异。例如对于黑油模型,NORTH值以510为宜,而对热采问题,在1015左右为宜。还有一种处理方法不是每次迭代都

10、做NORTH次正交化,而是采取所谓重启动的方式,即在进行了NORTH+1次迭代后,再重新从头开始正交化。这样,在进行了NORTH次迭代后,每次迭代所进行的正交化次数平均只有 次,从而减少了工作量。实际计算表明,前述两种正交化处理方法在收敛速度上并无明显差异,因此目前大多采用后一种方法。为了将这两种方法加以区别,一般称前一种方法为非重新启动型ORTHOMIN方法,而称后一种处理方法为重新启动型ORTHOMIN方法。最后,将前面介绍的不完全LU分解与ORTHOMIN加速法相结合,就是黑油模型的子程序CGIN中运用的预处理共轭梯度法。这种方法可用于求解常规迭代法难以求解的各种复杂的系数矩阵方程,甚至

11、是病态的系数矩阵方程等。另外,这种方法具有适应性强、计算速度快、收敛速度快等优点,已成为目前油藏数值模拟中求解大型线性方程组的最有效的方法,在许多数值模拟软件中都被广泛应用。5.3 主要变量说明A:压力方程七对角系数矩阵;PVEC:网格块压力;QVEC:压力方程右端向量;UL1:系数矩阵下三角最右边的一条对角线,与主对角线紧邻,是与(I,J,K-1)网格块压力有关的系数;UL2:系数矩阵下三角中间的一条对角线,是与(I,J-1,K)网格块压力有关的系数;UL3:系数矩阵下三角最左边的一条对角线,是与(I-1,J,K)网格块压力有关的系数;U1:系数矩阵上三角最左边的一条对角线,与主对角线紧邻,

12、是与(I,J,K+1)网格块压力有关的系数;U2:系数矩阵上三角中间的一条对角线,是与(I,J+1,K)网格块压力有关的系数;U3:系数矩阵上三角最右边的一条对角线,是与(I+1,J,K)网格块压力有关的系数;DE:主对角线;DEE:系数矩阵不完全LU分解中D-1对角元;KNK:共轭梯度法中正交化次数的限定;NMAX:总网格数;NN1:Y方向和Z方向网格数的乘积;NZ:Z方向网格数;EFC:误差限。5.4 不完全LU分解预处理共轭梯度法黑油模型的子程序CGIN中运用的不完全LU分解预处理共轭梯度法的迭代过程如下: (21) (22) (23) (24)其中, (25) (26)5.5 程序流程

13、图6 子程序MF16.1 功能介绍利用系数矩阵的不完全LU分解,求出两次迭代之间的增量。6.2 主要变量说明X:两次迭代之间的增量;Y:上一次迭代的残余量;N:总网格数;NN1:Y方向和Z方向网格数的乘积;NZ:Z方向的网格数;DEE:系数矩阵不完全LU分解中D-1对角元。6.3 算法说明系数矩阵A的不完全LU分解,目的是求,即,可分如下几步:(1),是下三角矩阵;(2),是对角矩阵;(3),是上三角矩阵;6.4 程序流程图7 子程序INTERP7.1 功能介绍与泡点压力无关的参数插值。7.2 主要变量说明INTERP(X,Y,N,XO,YO)X:PVT列表中的压力值;Y:已知的与泡点压力无关

14、的参数;N:PVT列表中压力值的数目;XO:各网格块的压力;YO:待求参数。7.3 程序流程图8 子程序INTPVT8.1 功能介绍与泡点压力有关的参数插值。8.2 主要变量说明INTPVT(BPT,RM,X,Y,N,XO,YO)BPT:泡点压力;RM:斜率;X:PVT列表中的压力值;Y:已知的与泡点压力有关的参数;N:PVT列表中参数值数目;XO:各网格块的压力;YO:待求参数。8.3 程序流程图9 总结通过解剖黑油模型,加深了对黑油模型程序执行的总流程的认识。尤其,通过对CGIN和MF1子程序的解剖,透彻理解了“目前求解大型稀疏线性方程组的不完全LU分解预处理共轭梯度法”,收获颇丰。也锻炼了团结合作的能力。感谢李淑霞老师的指导!

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号