CMG软件组分模型操作手册.docx
《CMG软件组分模型操作手册.docx》由会员分享,可在线阅读,更多相关《CMG软件组分模型操作手册.docx(206页珍藏版)》请在冰豆网上搜索。
CMG软件组分模型操作手册
组分模型用户指南和相态平衡计算
组分模型GEM使用指南
前言
GEM是CMG的高级通用状态方程组分模拟器,它包括诸如状态方程、双孔、CO2、混相气、挥发油、凝析气、水平井、井的管理、复杂相态等等选择。
GEM用来模拟一次和二、三次采油过程的油藏流体组分效果。
该用户手册介绍了注气机理、方程和求解技术。
该手册面向油藏工程师,帮助设计二、三次采油的注气过程,它需要油藏工程的一些基本知识,也需要对数值模拟有一些了解。
GEM概述
在提高采收率项目,包括注气或注溶解剂中,其过程可以混相或者非混相,它取决于入流体和油藏油的组成,还取决于油藏压力和温度。
例如,富气驱、高压气驱、CO2驱和凝析气藏的循环注气。
其模拟需要热力学和流体流动的特殊处理。
GEM是一有效的多维状态方程组分模拟器,它可模拟全部混相注气的重要机理,即油的蒸发和膨胀、气凝析、粘度和界面张力降低,通过多次接触形成混相溶解剂段塞。
自适应隐式公式
GEM可以显式、全隐式和自适应隐式三种方式运行。
在大多数情形下,只有很少量的网格需要全隐式求解。
大多数网格可以显式求解。
自适应隐式方法在计算中动态选择网格的隐式度,它对于井筒附近的锥进,或非常薄层的层状油藏非常有用。
使用自适应隐式方式,可以比全隐式节约三分之一到一半计算时间,而时间步可以和全隐式方法一样长。
用户选择全隐式格块,GEM然后进一步动态选择隐式格块。
双孔隙度/双渗透率
双孔模型将裂缝油藏的孔隙空间分为两部分:
主孔隙和次孔隙。
主孔隙(基岩)表示岩块基质中小的粒间孔隙,次孔隙(裂缝)由裂缝、结点、孔洞组成。
双孔模型以一个油藏体积由两种介质表示为特征。
具有较大存贮性的裂缝,是流体流动的主要通道,而基质则为存贮空间。
在GEM中,可指定简单的双孔模型。
每个单元都分一基质和裂缝形状因子。
在这种情况下,基质和裂缝之间的交换项处于半稳态流动。
除双孔模型以外,还可指定双渗模型,该模型假定相邻基岩块之间存在流体流动。
在基质、基质之间质量交换不能忽略的情况下有用,例如气油重力驱占主要地位的情况。
状态方程
GEM使用Peng-Robinson或Soave-Redlich-Kwong状态方程预测油相和气相的相平衡组成和密度,应用Jossi,Stiel和Thodos方程预测油和气的粘度。
闪蒸计算
拟牛顿逐次替换法QNSS用于求解闪蒸计算的非线性方程,以Gibbs能量分析为基础的稳定性测试监测单相状态。
复杂油藏
油藏定义关键字用来描述油藏,网格可以是可变厚度—可变深度型,也可以是角点类型,断层也是可以定义的。
可支持笛卡尔坐标和径向网格。
拟组分选择
拟组分(流动组分)可有效模拟一次接触混相过程和其它单相流体系统。
全隐式井
井可以完善的方式求解,井底流压和完井段的格块变量以全隐式方式求解。
如果完井段不止一个层,其井底流压以完全对耦的方法求解,即考虑所有完井段。
这个可以解决典型层状油藏中多完井段井的收敛问题。
而且在GEM中,复杂的井控制性能是千变万化的。
可输入各种约束条件(最大井底或井口压力、最小井底和井口压力、最大产量、最小产量、最大气油比、最小气油比等)。
当违反其中一条约束条件时,用户可指定另一新的约束条件。
气循环选择允许对组分进行剥离,可附加补充气到循环气流中。
矩阵求解方法
GEM使用AIMSOL,它是一优秀的线性求解程序,基于不完全高斯消去法。
AIMSOL尤其针对自适应隐式雅可比矩阵而开发。
油藏初始比
初始油藏条件可给定气油和油水界面深度。
流体组成可随深度而改变,油藏温度也可随深度呈线性变化。
水区模型
水层可以另增加仅有水的边界单元,或使用Carter—Tracy水层模型模拟。
前者用于水体大小和位置已知,而附加的水体网格又相对小的情况。
后者一般用于水体较大或未知,
希望近似计算水侵量,而附加水体网格不可行的情况。
单位:
SI或矿场单位
模拟结果文件
GEM产生SRF格式,第二代模拟结果文件*IRF和*MRF文件。
结果文件可用于二维和三维可视化软件,也可用于动态曲线图输出。
GEM入门
概述
+---------+
||------->.OUT(输出)
||
||------->.IRF(索引)
数据文件--->|GEM|
||------->.MRF(主)
||
||------->.RRF(可回绕)
+---------+(可选择)
如果希望重启,需要其它几个存在的文件,同时产生另外三个文件,如下:
+---------+
数据文件--->||------->.OUT(输出)
||
INPUT.IRF-->||------->.IRF(索引)
|GEM|
INPUT.MRF-->||------->.MRF(主)
||
INPUT.RRF-->||------->.RRF(可回绕)
(可选择)+---------+(可选择)
关键字输入部分数据组
a)七个不同组
b)数据组应遵循确定的顺序
I/O控制
油藏描述
组分特性
岩石—流体数据
初始条件
数值方法控制
井数据和循环数据
怎样建立数据文件注释
a)*TITLE1
b)*TITLE2
c)*TITLE3
d)*CASEID
这四个关键字都必须在输入/输出控制部分。
这四个关键字是可选的,并可以去掉。
但是,它们对于辨别不同数据文件很有用。
至少应使用一行标题。
全部标题和标识必须包含在单引号之内。
*TITLE1和*CASEID均在模拟结果文件中使用,该文件用来产生模拟的图形。
*TITLE1可以有40个字符,*TITLE2和*TITLE3每个可有80个字符。
*CASEID最多8个字符。
也可使用两个关键字标识符即‘**’插入注释,注释可以出现在数据文件任何地方。
例:
*TITLE1
‘SimulationRun#1—1989—01—23’
*TITLE2
‘DualporosityproblemusingtheMINCoption’
*TITLE3
‘Thisisa12×12×10Cartesiangridsystem’
*CASEID‘Run1’
**注释部分
怎样重启
什么是重启文件?
重启文件是一个二进制文件,初始数据和主要变量按用户指明频率写入,写重启文件是可选择的。
为什么需要重启?
有以下几点理由:
a)做敏感性分析或历史模拟
b)修改井定义
c)在运行一大的长作业之前,做一短的模拟运行,看结果是否满意。
d)在随后的运行中节约运行时间。
例如,当完成一模拟运行而且初步结果看起来不错,则需做预测运行。
因为已经由前次运行创建一重启文件,则可以选取一中间时间步重启运行。
模拟器不需从初始日期启动运行,可以在选择的时间步继续运行。
怎样做一重启?
重启记录是可选的。
如果需要做重启运行,则要在前次运行时产生。
使用*WRST或*RESTART创建重启文件,它们必须位于输入/输出控制部分。
然而,当井工作制度改变时*WRST可出现在井数据部分,*WRST指示写重启记录的频率。
*RESTART表示当前模拟运行是一重启运行。
如希望在最后一个时间步开始,则*RESTART后留空,这是缺省值,否则,输入时间步数。
例:
*RESTART30
*WRST10
当做重启时:
a)不改变原始油藏数据,但在输入/输出控制部分加一*RESTART关键字。
b)增加最大时间步数,如果必要,删除*MAXSTEPS。
c)需要附加输入文件:
输入重启文件和输入模拟结果文件。
这些文件在前次运行期间产生。
d)需要新的一组输出文件名。
控制输出打印文件内容
控制输出打印文件内容,使用:
a)*WPRN
b)*OUTPRN
这些关键字可以出现在输入/输出控制部分,其参数也可在随后井数据部分修改。
*WPRN表示写网格块数据、井数据和数值方法控制数据的频率。
如果不希望输出网格或井数据,则频率置零。
例如:
*WPRN*WELL0
*WPRN*GRID0
如果将这两个关键字删除,其缺省选择为每一次井变化时打印。
这种打印控制会产生一个非常大的输出打印文件,会很快占满计算机的可用空间。
*OUTPRN限制打印什么样的油藏信息和井信息。
详细的网格信息和流体性质数据可使用*OUTPRN*RES产生。
控制模拟结果文件内容
模拟结果文件(SRF)是模拟运行期间产生的数据文件。
SRF文件由图形和控制系统读入,产生绘图输出。
为控制SRF的内容,使用:
a)*WSRF
b)*OUTSRF
这两个关键字一般首次出现在输入/输出控制部分。
*WSRF表示写网格数据和井数据的频率。
如果不希望网格数据或井数据输出,则输出频率置零。
网格系统描述
描述网格系统,使用:
a)*GRID
b)*KDIR
描述网格长度,使用
c)*DI
d)*DJ
e)*DK
描述油藏深度和倾角,使用
f)*DEPTH
g)*DIP
或
h)*DTOP
在以上关键字中,只有*KDIR和*DIP完全可选,并可以从数据集中删除。
上述列出的关键字必须在油藏描述部分。
*GRID必须是这一部分的第一个关键字。
*GRID表示网格系统类型,有四种选择:
直角坐标、变深度/变厚度、径向井筒和角点网格。
其中每个均要求I,J,K方向网格块数目:
例如:
*GRID*CART10106
*GRID*VARI10106
*GRID*RADIAL10115
*GRID*CORNER10106
第一个为标准直角坐标10×10×6,第二个为变深度/变厚度网格10×10×6,第三个为径向网格,最后一个为角点网格。
*KDIR定义Z轴的方向,缺省值为*UP,第一层为最底层。
死结点
定义死结点有两种方法
a)*NULL
b)*POR
两种关键字都必须出现在油藏描述部分。
在数据集中必须有*POR,但*NULL可选。
当用*NULL关键字表示无效网格时,0表示无效网格,1表示有效网格,例如:
*NULL*IJK
1∶101∶101∶31
1∶41∶31∶30
第二行覆盖第一行。
*NULL是可选的,如果不出现,则假定全部网格均为有效网格。
*NULL关键字覆盖*POR关键字。
即使给一网格赋予非零孔隙度,而在*NULL关键字中赋给零值,则该网格在流动计算中也不予考虑。
上述例子也可以下列形式表示:
例如:
*POR*IJK
1∶101∶101∶30.3
1∶41∶31∶30.0
双孔隙度/双渗透率
调用双孔/双渗选择,可以使用(只能选一个):
a)*DUALPOR
b)*DUALPERM
除裂缝介质标准网格信息外,还需输入:
c)*DIFRAC
d)*DJFRAC
e)*DKFRAC
f)*TRANSFER
在组分性质部分,还可以指定:
g)*DIFFUSION
孔隙度值需要对基质和裂缝输入
例:
*POR*MATRIX*IJK
1∶101∶101∶310.3
1∶41∶31∶30.0
*POR*FRACTURE*IJK
1∶101∶101∶30.0
87∶91∶20.4
*MOD
87∶81=0.45
水层选择
水层模型如下:
a)*AQUIFER
b)*AQPROP
c)*AQFUNC
步长过小或运行时间过长问题
收敛失败可能由于:
a)内迭代收敛失败;
b)牛顿收敛失败导致时间步截短;
c)物质平衡误差。
如果在输出文件中发现“迭代不收敛”频繁出现,那么可以:
1减小时间步长。
将*DTMAX改小,或用*NORM*PRESS和*NORM*SATUR减小每个时间步的改变量。
2用关键字*ITERMAX增加迭代次数。
3使用*SDEGREE增加因子分解度。
注意:
这个方法增加了存贮需求。
如果问题原因是最大改变量,则若出现不频繁,问题不大。
如果时间步大量重复出现,那么,应采取以下措施:
4检查岩石和PVT曲线是否出现非线性,该曲线应当平滑。
5检查网格和其他性质。
6检查井的限制。
一个有效的办法是对每一注入井总是指定一最大井底压力,对每一生产井总是指定一最小井底压力。
7如果不收敛由于超过最大牛顿迭代次数引起,使用关键字*NEWTONCYC,增加牛顿循环次数。
如果由于最大改变量振荡引起,达到最大迭代次数,那么,使非线性段平滑,或减小时间步长是最好的解决办法。
8油藏是否在迭代之间出现在单相油和单相气之间浮动。
如果出现浮动,设置适当的*PHASEID或*REFDEN。
9置油藏的某些区域或整个油藏为全隐式。
缺省开关符,*AIM*STAB检查网格的显式隐式开关,仅当该网格是一隐式格块的相邻格块。
如果某些油藏区域变量发生剧烈变化,并且不是井的毗邻区域,或流体前沿运动太快,而在一个时间步扫过两个格块,那么置这些区域为隐式。
例如如下情况:
a)当不使用垂向平衡初始化时。
在某些情况下,这可能引起初始压力和饱和度发生大的改变,即使全部井关井。
当该情况发生时使用全隐式。
b)当出现气顶时。
如果出现较强的指进,置气顶的底层为隐式,至少在指进出现的区域。
c)在具有极端高渗透率的格块,压力的微小改变可能引起饱和度很大变化。
在这些区域,置格块为全隐式。
物质平衡误差可能由收敛容许误差超过设定的改变量而引起。
在大多数情况下,*NORM和*Converge的缺省值足够。
然而,当模拟裂缝油藏或使用裂缝代表水平井时,推荐使用较小的值。
对锥进问题,推荐使用小值。
模拟一单相油藏
有两种主要方法模拟气水两相的干气,单相气藏或一次接触混相溶解剂注入。
A)使用饱和压力
使用关键字*PSAT置饱和压力为一很小的值,
例如,-1。
在这种情况下,所有油藏流体是欠饱和的,并跳过每个格块的闪蒸计算。
所有流体性质仍然使用状态方程计算。
*PSAT不影响井流动计算。
B)使用拟组分选择
1使用*PSEUDO。
一般来说,置油藏油为一拟组分,每个注入流体作为不同的单个拟组分。
2用*PHASEID将单相标为‘油’或‘气’。
一般建议用‘油’,从而流体相对渗透率依据油水相对渗透率曲线计算。
该方法也不做网格闪蒸计算。
另外,GEM还将单个组分流动方程分组为较小数目的拟组分流动方程。
这个可以大大减少每个网格方程的数目。
水平井
水平井可作为一线源(注入井)或汇(生产井)。
GEM使用Aziz等流动图计算液体滞留量,同时也计算井筒摩擦压力降。
注意,当前方法并不能解决回流问题。
垂向平衡计算
*VERTICAL控制垂向平衡计算。
处理垂向平衡计算时,使用下列几种方法:
A)*VERTICAL*ON
同时使用下列关键字
*DWOC,
*REFDEPTH,
*REFPRES,
*ZGLOBALand
*SWOC
B)*VERTICAL*GASCAP及
*DWOC
*DGOC
*REFDEPTH
*REFPRES
*ZOIL
*ZGAS
*SWOC
C)*VERTICAL*COMP及
*DWOC
*REFDEPTH
*REFPRES
*SWOC
*CDEPTH
*ZDEPTH
这些关键字必须位于初始条件部分。
*VERTICAL*ON主要用于欠饱和油藏,而*VERTICAL*GASCAP可用于饱和油藏,也可用于欠饱和油藏。
对于*VERTICAL*ON,用重力—毛管压力平衡计算全部格块压力和水饱和度。
当网格包含油相和气相时,不做特殊处理。
因此,在第一个时间步可能出现剧烈的流体变化。
*VERTICAL*GASCAP是更一般的选择。
假定气顶与油区处于平衡状态,用重力—毛管压力平衡计算全部网格压力和油、气、水饱和度。
闪蒸计算用于确定油相和气相组成。
油相和气相依饱和度混合,然后计算网格总的组成。
因此,油藏中总的组成可能随深度变化。
*VERTICAL*COMP与用户指定的随深度变化的组成一起,用于欠饱和油藏或者饱和油藏的重力初始化。
这时,要指定水油界面深度及参考深度下的参考压力。
用户必须输入总的组成与深度表。
用户还必须输入临界深度。
在临界深度以下,单烃相网格为油网格,而在临界深度以上,单烃相网格为气相网格。
如果不做垂向平衡计算,输入
*VERTICAL*OFF及
*PRES
*SW
*ZGLOBAL
下述第一个例子表示对一饱和油藏做垂向平衡计算的初始条件数据:
*INITIAL
*VERTICAL*GASCAP
*REFDEPTH900.0
*REFPRES3000.0
*DWOC1250.0
*DGOC788.0
*ZOIL0.300.100.200.300.120.08
*ZGAS0.780.190.030.00.00.0
*SWOC1.0
第二个例子表示不使用垂向平衡计算的数据:
*INITIAL
*VERTICAL*OFF
*PRES*CON3400.0
*SW*CON0.2
*GLOBAL*CON
0.300.100.200.300.120.08
井的定义
*井使用以下关键字定义,注意严格按照关键字排序
*WELL井号‘井名’
井类型定义
*Producer井号
或者
*INJECTOR井号
或者
*CYCLPROD井号
在井类型以下,输入:
*PWELLBORE(如果需要计算井筒压力,需要井筒数据)
或*IWELLBORE
*INCOMP(如果定义了注入井时需要,紧接着*INJECTOR)
*OPERATE(至少定义一个工作限制)
*MONITOR(监视限制任选)
定义井的位置和射孔,使用:
*GEOMETRY(可选的,在完井卡之前)
*PERF(必需)
这些关键字必须位于井数据部分。
怎样关井?
怎样重新打开井?
在关井之前:
(1)该井必须用以下方式完全定义:
(a)工作约束和任意监视约束
(b)完井关键字
在完全定义一口井以后,该井可以在使用TIME或DATE关键字的任一时间关闭。
在关井之后任一时间可打开一口关闭的井。
*WELL1′waterinjector′
*WELL2′producer′
*WELL3′Solventinjector′
**全部井具有相同的几何因子
**
**
**radgeofacwfracskin
*GEOMETRY*K0.250.341.00.0
两口注入井初始关井,只有生产井开井。
这种工作制度持续两年。
*INJECTOR1
*INCOMP*WATER
*OPERATE*MAX*STW12000.0
*OPERATE*MAX*BHP10000.0
*PERF*GEO1
**ifjfkfff
1131.0
**关1号井
*SHUTIN1
*PRODUCER2
*OPERATE*MAX*STO12000.0
*OPERATE*MIN*BHP1000.0
*MONITOR*GOR10000.0*STOP
*MONITOR*WCUT0.8330002*STOP
*PERF*GEO2
**ifjfkfff
7711.0
*INJECTOR3
*INCOMP*SOLVENT
0.780.190.030.00.00.0
*OPERATE*MAX*STG1.2E7
*OPERATE*MAX*BHP10000.0
*PERF*GEO3
**ifjfkfff
1131.0
**3号井和1号井在相同网格射孔
**关3号井
*SHUTIN3
*TIME730.000
*OPEN1**打开注水井
*TIME1095.0
**在这个方案中,注水和注溶解剂井在同一网格定义;在打开第二个以前,关闭第一个。
*SHUTIN1**关注水井
*OPEN3**开注溶解剂井
*TIME14600
*SHUTIN3**关注溶解剂井
*OPEN1**打开注水井
*TIME18250
*SHUTIN1**关注水井
*OPEN3**开注溶解剂井
井筒模型
说明井筒模型时,需要:
*PWELLBORE用于生产井,*IWELLBORE用于注入井,位于井类型卡之后。
当要求井口压力时需要使用井筒模型,用于:
a)仅是一种信息;
b)当井口压力作为一个约束条件时。
例如:
对2号注入井建立井筒模型
*INJECTOR2
*IWELLBORE
**wdepthlengthroughwhtempbhtempwr
1100.1100..1365200.3490.0.33
工作和监视约束
*OPERATE和*MONITOR说明一给定井的约束条件。
至少要求一个工作约束,监视约束是可选的。
每一口井引入一新的未知变量Pbh(井底流压),要求一约束方程确定该变量。
在工作和监视约束表中第一个工作约束条件为主工作约束。
模拟器首先在主工作约束下运行,同时监视其它约束条件。
当监视约束之一违反,而且使用CONT关键字,则该约束变为工作约束。
如果不止一个工作约束违反,那么使用第一个工作约束:
生产井
对一生产井,应当:
a)在产量约束下生产(主工作约束)
b)在最小井底流压约束下生产。
如果生产井为产油井,则选一油产量约束。
如果生产井为产气井,则选一气产量约束。
对一生产井使用的约束可以是一最小产量。
例如:
*PRODUCER1
*OPERATE*MAX*STO12000.0*CONT
*OPERATE*MIN*BHP1500.0*CONT
这个例子表明:
a)使用油产量作为油井的主约束
b)使用井底流压作为从约束
如果