收藏 分销(赏)

黑油模型解剖.docx

上传人:pc****0 文档编号:5898382 上传时间:2024-11-22 格式:DOCX 页数:15 大小:618.44KB 下载积分:10 金币
下载 相关 举报
黑油模型解剖.docx_第1页
第1页 / 共15页
黑油模型解剖.docx_第2页
第2页 / 共15页


点击查看更多>>
资源描述
1 黑油模型理论基础 1.1 基本假设 (1)油藏中渗流是等温渗流; (2)油藏中有油、气、水三相,各相流体的渗流均符合达西定律; (3)模型考虑油组分、气组分、水组分三组分; (4)气组分在油气相、水气相之间发生质量交换; (5)相平衡瞬间完成; (6)水组分只存在于水相中,与油气相之间没有质量交换; (7)油藏岩石微可压缩,各向异性; (8)油藏流体可压缩,且考虑渗流过程中重力、毛管力的影响。 1.2 数学模型 (1) 辅助方程: (2) 初始条件: (3) 边界条件: (4) 2 黑油模型程序整体结构图 3 组员及分工 姓名 负责程序 张敏 主程序,CGIN, MF1, INTERP, INTPVT 高博 主程序,TRAN1, SOLMAT, MATBAL, PRTPS 郝延征 主程序,TABLE, UINIT1, CODES, NODES 徐杨 主程序,GRID1, PARM1, QRATE 4 主程序 4.1 主程序主要功能 (1)定义运算所需数组; (2)需要调用和生成的文件的打开和关闭; (3)通过调用子程序给模型赋基础数据和初始数据; (4)通过调用子程序给模型的运行确定各种控制; (5)在运行过程中反复读入井点数据(包括产量和注入量、井底流压、流动指数等)以及打印输出控制码; (6)分层计算油气水地质储量; (7)进行井点产量项处理和形成压力矩阵; (8)通过调用子程序求解压力方程; (9)显式计算饱和度; (10)进行过泡点处理; (11)根据压力和饱和度增量控制,自动调节计算时间步长; (12)未饱和网格块饱和度计算; (13)变泡点处理; (14)在每一运算时间步末进行物质平衡检验; (15)打印油井、水井、气井的分层报告和分井报告; (16)通过调用子程序进行计算结果打印输出和形成文件; (17)重启动运行方式的选择和重启动文件的生成和调用; (18)运算终止的控制及错误信息的提示。 4.2 主程序流程图 5 子程序CGIN 5.1 功能介绍 用不完全LU分解预处理共轭梯度法求解压力方程隐式差分得到的大型稀疏线性方程组。 5.2 理论基础 实践表明,预处理共轭梯度型方法无论是适应性还是计算速度,都远远超过了前面的方法。这类算法的优点是迭代收敛速度不依赖于迭代因子的选取,收敛速度极快,应用范围极广,包括化学驱、混相驱、热力驱等复杂模型和各种难以求解的系数矩阵。例如,可以解决传统的共轭梯度法解决不了的非对称矩阵问题及一般算法难以求解的病态系数矩阵。因此,目前这种类型的算法已成为油藏数值模拟中最先进的求解大型线性方程组的方法。这里,黑油模型的子程序CGIN中运用的是将系数矩阵的不完全LU分解和ORTHOMIN加速法结合的预处理共轭梯度法。 5.2.1 迭代求解的基本原理 设有方程组: (5) 并设为非奇异矩阵,则可以构造迭代公式: (6) 或写成: (7) 式中, ,表示两次迭代之间的增量。 式就是通常所用的迭代公式。如果迭代是收敛的,则当足够大时,,式就成为。构造迭代方法的关键问题之一是如何选取矩阵,使之能以最少的迭代次数得到满足要求的解。显然,矩阵越接近于系数矩阵,则达到收敛标准所需要的迭代次数越少,但相应的,求解方程所需要的时间就要增加。在前面所讲的简单迭代法中,为对角矩阵,其元素为矩阵主对角线上的相应元素,这是构造矩阵的最简单的方法。高斯-赛德尔迭代法中,矩阵为矩阵的下三角部分。在直接解法中,矩阵为矩阵本身,这时式完全等价于,只要一次迭代就可以求得式的解。在黑油模型的子程序CGIN运用的预处理共轭梯度法中,矩阵为矩阵进行不完全LU分解后得到的近似矩阵。 5.2.2 矩阵的不完全LU分解 把大型矩阵直接分解成与的乘积而进行求解所需要的计算工作量大,而且由于在油藏数值模拟中求解的大多是含有大量零元素的稀疏矩阵,这种分解常使矩阵中大量本来为零的元素在中变为非零元素,增加了内存占用量。即使是带状矩阵,如果矩阵的阶数很大,在带状区域内,这种由零变为非零元素的数量也仍然很大。因此,在油藏数值模拟中,当线性方程组的阶数很大时,实际上一般不采用高斯消元法或相应的LU分解方法。矩阵的不完全LU分解就是为了解决这一问题而提出的。这种方法可以尽量保持矩阵原有的稀疏性质,从而节约了内存,减少了计算工作量。 充填级次越大,分解后的矩阵就越接近于原矩阵,对于足够大的充填级次,这种不完全LU分解实际上可以等价于矩阵的完全LU分解。而矩阵的零级不完全LU分解的非零元素全部位于原矩阵中非零元素所在的位置上。这里,黑油模型的子程序CGIN中运用的就是系数矩阵的零级不完全LU分解。 5.2.3 ORTHOMIN加速法 有了矩阵的不完全LU分解之后,令 (8) 式中,和是矩阵的严格下三角矩阵和严格上三角矩阵。是待求解的对角阵。 则迭代公式可写成: (9) 式中,,因此,式的求解过程变为: (10) (11) (12) (13) 因为分别为下三角矩阵、对角阵、上三角矩阵,所以上述公式的求解是非常容易的。 但是如果没有特殊的加速收敛措施,上述迭代过程的收敛速度非常慢。如果系数矩阵是对称的,则共轭梯度法是一种很有效的加速方法。但是,对于非对称矩阵,常规的共轭梯度法就不能使用了,而在这种方法的基础上发展起来的ORTHOMIN方法却能非常有效的解决非对称矩阵的问题。ORTHOMIN方法所采用的加速措施有两个:一是正交化,二是极小化。所谓正交化是指如果把看成N维空间的一个向量,则它在N维空间中就确定了一个方向,在大多数迭代方法中,对的修正都是沿着该方向进行的。而ORTHOMIN方法不是采用的方向作为修正方向,而是以与本次迭代以前的各次迭代修正量构造一个新的向量,使与以前各次迭代的正交,并以的方向为本次迭代对的修正方向。而极小化是指在确定了对的修正方向后,其修正值要再乘上一个而成为,其中成为极小化因子,它的选取使新的余量为最小,以保证新的余量不大于(一般是小于)以前的所有余量而加速收敛。 整个ORTHOMIN方法的迭代过程为: (14) (15) (16) (17) 其中: (18) (19) 式中,为正交化系数,其目的是让所有的都正交。 实际应用上述方法时,并不需要使与以前所有迭代的都正交。根据式,当迭代次数增加时,每次迭代所需计算的求和项增加,不但增加了工作量,而且增加了计算中的舍入误差。实践表明,只要使与其前面的有限个(成为NORTH个)正交就可以了。这样,式可以重新写为: (20) 其中,NORTH值的选取随研究问题的规模、难易程度及所需要的分解方法而异。例如对于黑油模型,NORTH值以5~10为宜,而对热采问题,在10~15左右为宜。还有一种处理方法不是每次迭代都做NORTH次正交化,而是采取所谓重启动的方式,即在进行了NORTH+1次迭代后,再重新从头开始正交化。这样,在进行了NORTH次迭代后,每次迭代所进行的正交化次数平均只有 次,从而减少了工作量。实际计算表明,前述两种正交化处理方法在收敛速度上并无明显差异,因此目前大多采用后一种方法。为了将这两种方法加以区别,一般称前一种方法为非重新启动型ORTHOMIN方法,而称后一种处理方法为重新启动型ORTHOMIN方法。 最后,将前面介绍的不完全LU分解与ORTHOMIN加速法相结合,就是黑油模型的子程序CGIN中运用的预处理共轭梯度法。这种方法可用于求解常规迭代法难以求解的各种复杂的系数矩阵方程,甚至是病态的系数矩阵方程等。另外,这种方法具有适应性强、计算速度快、收敛速度快等优点,已成为目前油藏数值模拟中求解大型线性方程组的最有效的方法,在许多数值模拟软件中都被广泛应用。 5.3 主要变量说明 A:压力方程七对角系数矩阵; PVEC:网格块压力; QVEC:压力方程右端向量; UL1:系数矩阵下三角最右边的一条对角线,与主对角线紧邻,是与(I,J,K-1)网格块压力有关的系数; UL2:系数矩阵下三角中间的一条对角线,是与(I,J-1,K)网格块压力有关的系数; UL3:系数矩阵下三角最左边的一条对角线,是与(I-1,J,K)网格块压力有关的系数; U1:系数矩阵上三角最左边的一条对角线,与主对角线紧邻,是与(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 程序流程图 6 子程序MF1 6.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 子程序INTERP 7.1 功能介绍 与泡点压力无关的参数插值。 7.2 主要变量说明 INTERP(X,Y,N,XO,YO) X:PVT列表中的压力值; Y:已知的与泡点压力无关的参数; N:PVT列表中压力值的数目; XO:各网格块的压力; YO:待求参数。 7.3 程序流程图 8 子程序INTPVT 8.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分解预处理共轭梯度法”,收获颇丰。也锻炼了团结合作的能力。感谢李淑霞老师的指导!
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 行业资料 > 医学/心理学

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服