发明内容
为解决上述技术问题,本发明提供一种基于网格自适应加密与粗化技术的数值模拟方法和装置,本发明在保证了数值计算精度的同时,提高了数值计算的效率。
本发明提供技术方案如下:
一种基于网格自适应加密与粗化技术的数值模拟方法,包括如下步骤:
S100:加载原始网格模型,所述原始网格模型包括网格孔隙度数据、网格深度数据、网格体积数据和网格间传导率数据;
S200:构建多级嵌套网格系统,所述多级嵌套网格系统包括顺序设置的原始网格模型和将所述原始网格模型进行集合划分,依次生成的若干级嵌套的粗化网格模型,其中后一级网格模型是对前一级网格模型的粗化;
S300:基于所述多级嵌套网格系统的第一级网格模型启动数值模拟运算;
S400:在数值模拟运算过程中,当前时间步状态更新完毕之后,将相邻网格单元的状态信息差值与基准参数进行比较,根据比较结果将该网格单元加密为前一级网格模型的网格单元,粗化为后一级网格模型的网格单元或不变,得到新的多级嵌套网格系统;
S500:计算新的多级嵌套网格系统的网格孔隙度数据、网格深度数据、网格体积数据和网格间传导率数据;
S600:在下一时间步,对新的多级嵌套网格系统执行S300~S500,直至数值模拟运算结束。
进一步的,所述S400包括:
S410:获取当前时间步所有网格单元的状态信息,所述状态信息包括饱和度、压力和/或组分浓度;
S420:计算每个网格单元状态信息与其所有相邻网格单元的差值,选取绝对值最大的差值作为状态信息差值;
S430:将所述状态信息差值与基准参数进行比较,若所有状态信息差值均大于基准参数,则将该网格单元加密为前一级网格模型的网格单元,若所有状态信息差值均小于基准参数,则将该网格单元粗化为后一级网格模型的网格单元。
进一步的,所述S430包括:
S431:将所述状态信息差值与基准参数进行比较,若所有状态信息差值均大于基准参数,则将该网格单元标记为加密,若所有状态信息差值均小于基准参数,则将该网格单元标记为粗化;
S432:若网格单元被标记为加密,且该网格单元不处在第一级网格模型,则将该网格单元加密为前一级网格模型的网格单元;若网格单元被标记为粗化,且该网格单元不处在最后一级网格模型,且其对应的后一级网格单元包含的所有网格单元均标记为粗化,则将该网格单元粗化为后一级网格模型的网格单元。
进一步的,所述S420中,相邻的网格单元通过传导率联通表信息查找;所述状态信息包括饱和度和压力,所述状态信息差值包括饱和度差ΔSi和压力差ΔPi,其中:
Si和Pi分别为网格单元i的饱和度和压力,Sj和Pj分别为与网格单元i所有相邻网格单元j的饱和度和压力,tij为传导率,tij≠0代表网格单元i和网格单元j相邻;
所述基准参数包括ΔSmin、ΔSmax、ΔPmin和ΔPmax,其中:若ΔSi>ΔSmax且ΔPi>ΔPmax,则将网格单元i标记为加密;若ΔSi<ΔSmin且ΔPi<ΔPmin,则将网格单元i标记为粗化,其他情况,则网格单元i不做标记。
进一步的,所述S300进一步为:调用数值模拟器,基于所述多级嵌套网格系统的第一级网格模型启动数值模拟运算;
网格模型还包括PVT属性数据、相渗数据、初始化数据和生产控制数据;
所述S500进一步为:运用基于流动的网格粗化方法,计算新的多级嵌套网格系统的网格孔隙度数据、网格深度数据、网格体积数据、网格间传导率数据和网格单元的状态信息。
一种基于网格自适应加密与粗化技术的数值模拟装置,包括如下模块:
原始网格模型加载模块,用于加载原始网格模型,所述原始网格模型包括网格孔隙度数据、网格深度数据、网格体积数据和网格间传导率数据;
多级嵌套网格系统构建模块,用于构建多级嵌套网格系统,所述多级嵌套网格系统包括顺序设置的原始网格模型和将所述原始网格模型进行集合划分,依次生成的若干级嵌套的粗化网格模型,其中后一级网格模型是对前一级网格模型的粗化;
模拟运算模块,用于基于所述多级嵌套网格系统的第一级网格模型启动数值模拟运算;
多级嵌套网格系统更新模块,用于在数值模拟运算过程中,当前时间步状态更新完毕之后,将相邻网格单元的状态信息差值与基准参数进行比较,根据比较结果将该网格单元加密为前一级网格模型的网格单元,粗化为后一级网格模型的网格单元或不变,得到新的多级嵌套网格系统;
参数计算模块,用于计算新的多级嵌套网格系统的网格孔隙度数据、网格深度数据、网格体积数据和网格间传导率数据;
迭代模块,用于在下一时间步,对新的多级嵌套网格系统执行模拟运算模块、多级嵌套网格系统更新模块和参数计算模块,直至数值模拟运算结束。
进一步的,所述多级嵌套网格系统更新模块包括:
状态信息获取单元,用于获取当前时间步所有网格单元的状态信息,所述状态信息包括饱和度、压力和/或组分浓度;
差值计算单元,用于计算每个网格单元状态信息与其所有相邻网格单元的差值,选取绝对值最大的差值作为状态信息差值;
比较和更新单元,用于将所述状态信息差值与基准参数进行比较,若所有状态信息差值均大于基准参数,则将该网格单元加密为前一级网格模型的网格单元,若所有状态信息差值均小于基准参数,则将该网格单元粗化为后一级网格模型的网格单元。
进一步的,所述比较和更新单元包括:
标记单元,用于将所述状态信息差值与基准参数进行比较,若所有状态信息差值均大于基准参数,则将该网格单元标记为加密,若所有状态信息差值均小于基准参数,则将该网格单元标记为粗化;
更新单元,用于若网格单元被标记为加密,且该网格单元不处在第一级网格模型,则将该网格单元加密为前一级网格模型的网格单元;若网格单元被标记为粗化,且该网格单元不处在最后一级网格模型,且其对应的后一级网格单元包含的所有网格单元均标记为粗化,则将该网格单元粗化为后一级网格模型的网格单元。
进一步的,所述差值计算单元中,相邻的网格单元通过传导率联通表信息查找;所述状态信息包括饱和度和压力,所述状态信息差值包括饱和度差ΔSi和压力差ΔPi,其中:
Si和Pi分别为网格单元i的饱和度和压力,Sj和Pj分别为与网格单元i所有相邻网格单元j的饱和度和压力,tij为传导率,tij≠0代表网格单元i和网格单元j相邻;
所述基准参数包括ΔSmin、ΔSmax、ΔPmin和ΔPmax,其中:若ΔSi>ΔSmax且ΔPi>ΔPmax,则将网格单元i标记为加密;若ΔSi<ΔSmin且ΔPi<ΔPmin,则将网格单元i标记为粗化,其他情况,则网格单元i不做标记。
进一步的,所述模拟运算模块进一步用于:调用数值模拟器,基于所述多级嵌套网格系统的第一级网格模型启动数值模拟运算;
网格模型还包括PVT属性数据、相渗数据、初始化数据和生产控制数据;
所述参数计算模块进一步用于:运用基于流动的网格粗化方法,计算新的多级嵌套网格系统的网格孔隙度数据、网格深度数据、网格体积数据、网格间传导率数据和网格单元的状态信息。
本发明具有以下有益效果:
本发明中,利用网格自适应加密与粗化调整技术,根据全油藏不同区域的动态特征,按需采用不同分辨率网格进行表征。在数值模拟过程的大部分时间步中,油藏大部分区域均采用分辨率较低的网格进行表征,可大大减少数值模拟过程中的网格数,即减少数值计算过程中的节点数,因此可缩短数值模拟的时间。在状态信息剧烈的前沿和近井地带用高分辨率的网格进行精细表征,因而可以捕捉到油藏流动的关键动态特征,以保证数值模拟的精度。
综上所述,本发明根据全油藏不同区域的动态特征,按需采用不同分辨率网格进行表征,动态调整网格的疏密程度,使得每一个时间点模型的计算节点都是最优的,克服了现有技术的网格粗化技术统一降低网格分辨率的方式带来的精度损失,在保证了数值计算精度的同时,提高了数值计算的效率。
具体实施方式
为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
一方面,本发明提供一种基于网格自适应加密与粗化技术的数值模拟方法,如图1所示,包括如下步骤:
S100:加载原始网格模型(网格模型也称为数值模拟网格模型),原始网格模型包括网格孔隙度数据、网格深度数据、网格体积数据和网格间传导率数据。原始网格模型的一个示意图如图4所示,图示为原始网格的孔隙度属性,共有340×300×20=2004000个网格。
不同于地质网格模型,数值模拟运算过程中,并不需要获得网格的精确几何信息。一般而言,一个完整的数值模拟网格模型只需要包含网格孔隙度数据、网格深度数据、网格体积数据和网格间传导率数据即可。
以基于传导率联通表的数值模拟软件(本发明发的方法不限于该软件)的项目文件格式为例,所需要加载的网格模型包括:
1)网格孔隙度数据,格式为:
其中,n为总网格数,v为网格孔隙度数值。
2)网格深度数据,格式为:
其中,n为总网格数,v为网格深度数值。
3)网格体积数据,格式为;
其中,n为总网格数,v为网格体积数值。
4)网格传导率数据,格式为:
传导率以联通表的形式存储,其中,N为传导率对数,g1代表每组传导率第一个网格的编号,g2代表每组传导率第二个网格的编号,t代表每组传导率的数值。
需要说明的是,有些数值模拟器的输入文件虽然要求提供完整的网格数据(如Eclipse、CMG等数值模拟器),但是在开始数值计算前一般也将网格转化为上述4类数据,因此该方法并不局限于数值模拟软件是否支持传导率联通表表示的网格。
S200:构建多级嵌套网格系统,多级嵌套网格系统包括顺序设置的原始网格模型和将原始网格模型进行集合划分,依次生成的若干级嵌套的粗化网格模型,其中后一级网格模型是对前一级网格模型的粗化。
对于一套具有S100介绍的4类数据的原始网格模型(记为集合G1),其对应的粗化网格模型G2为G1的一个划分:
G2={S1,S2,S3,…,SN}
其中,粗化网格模型G2的每个元素SI为一个粗网格,且有:
本发明的网格系统更具有一般性,其可以是一套真实的地质角点网格,也可以仅仅是一套基于原始网格模型上划分的“逻辑网格”。如图2所示,左图为原始网格模型G1,右图为基于原始网格模型G1的粗化网格模型G2,同一个灰度代表从细网格到粗网格的对应关系,每一个粗网格单元都是由1个或若干个基础网格单元构成的。
在原始网格模型G1的基础上,可以构建1级粗化网格模型G2。类似的,以G2为基础,可以构建2粗化网格模型G3。依此类推,可以构建多级嵌套的粗化网格模型。为了方便阐述,不失一般性的,这里假设总共构建两级粗化网格模型,连同原始网格模型,形成3级嵌套网格系统,其中网格单元的状态L分别记为1、2和3,如图3所示。
3级嵌套网格系统的一个示意图如图5所示,图中同一个灰度代表从细网格到粗网格的对应关系。
本发明中,用下标表示网格模型,如G1、G2、G3,用上标表示粗化网格。
S300:基于多级嵌套网格系统的第一级网格模型(此时为原始网格模型)启动数值模拟运算。图6为启动原始数值模拟模型运算至第一个时间步结束的示意图。
原始模型运算时,所有网格状态L均为1,即:Gn=G1。
S400:在数值模拟运算过程中,当前时间步状态更新完毕之后,将相邻网格单元的状态信息差值与基准参数进行比较,根据比较结果将该网格单元加密为前一级网格模型的网格单元,粗化为后一级网格模型的网格单元或不变,得到新的多级嵌套网格系统。
在数值模拟运算过程中,当某个时间步Tn运算收敛、状态更新完毕之后,数值模拟器会输出一个包含当前网格状态的数据文件,如Eclipse油藏数值模拟器输出的[case_name].X000n(二进制)或[case_name].F000n(ASCII)文件,又如Cloud油藏数值模拟器输出的[case_name]_STPX_n.stp文件。文件中包括各个网格单元的状态信息。根据这些信息,可以更新网格下一时间步T(n+1)所处的网格状态,即为新的多级嵌套网格系统。
具体操作流程为:
将相邻网格单元的状态信息差值与基准参数进行比较,基准参数是根据选取的状态信息设定的,状态信息可以是一个也可以是多个。
根据比较结果将该网格单元加密为前一级网格模型的网格单元,粗化为后一级网格模型的网格单元或不变。如果比较结果满足预设的加密条件,则该网格单元代表油藏剧烈变化的复杂流动区域,如前沿或近井地带,将该区域加密,使用高分辨率的网格进行精细表征,以保证数据模拟的精度。如果比较结果满足预设的粗化条件,则该网格单元代表油藏近井地带之外的大部分地带,将该区域粗化,使用较低分辨率的网格进行表征,以以减少数据模拟的时间。
经过上述操作,得到下一时间步T(n+1)计算时,所有网格所处的状态。上述流程中,本发明的方法只允许网格单元在相邻级别状态上进行调整,这一约束可以使得网格单元的变化更为平滑。
S500:计算新的多级嵌套网格系统的网格孔隙度数据、网格深度数据、网格体积数据和网格间传导率数据。
在T(n+1)时间步所有网格状态更新之后,实际上得到了基于原始网格系统G1的一个新的集合划分,即得到了一个新的多级嵌套网格系统G(n+1)。
于是,可以计算得到下一时间步时网格系统G(n+1)的网格孔隙度、网格深度、网格体积以及网格间传导率数据。
S600:在下一时间步,对新的多级嵌套网格系统执行S300~S500,直至数值模拟运算结束。图7为S400-S600,根据网格信息更新网格状态,以及更新后的多级嵌套网格系统,并继续下一时间步的模拟运算的示意图。
与前述的类似,在得到新的多级嵌套网格系统的基础上,启动对G(n+1)网格系统的数值模拟运算。并进行S300~S500的更新迭代,直至数值模拟运行结束。
图8为原始模型计算结果,图9为本发明的计算结果,通过图8和图9的比较,可见本发明具有较好的精度。图10为原始模型计算时间与本发明的计算时间的比较,可从为7069秒降低至204秒,加速比约为35。图11为数值模拟网格数对比,应用本方法,数值模拟运行过程中网格数一直处理动态变化过程,网格数量平均为7.8万,平均网格数的比值(原始模型:新方法)约为26:1,网格数最少时可降至5.2万左右,最大网格数的比值达到39:1。
本发明中,利用网格自适应加密与粗化调整技术,根据全油藏不同区域的动态特征,按需采用不同分辨率网格进行表征。在数值模拟过程的大部分时间步中,油藏大部分区域均采用分辨率较低的网格进行表征,可大大减少数值模拟过程中的网格数,即减少数值计算过程中的节点数,因此可缩短数值模拟的时间。在状态信息剧烈的前沿和近井地带用高分辨率的网格进行精细表征,因而可以捕捉到油藏流动的关键动态特征,以保证数值模拟的精度。
综上所述,本发明根据全油藏不同区域的动态特征,按需采用不同分辨率网格进行表征,动态调整网格的疏密程度,使得每一个时间点模型的计算节点都是最优的,克服了现有技术的网格粗化技术统一降低网格分辨率的方式带来的精度损失,在保证了数值计算精度的同时,提高了数值计算的效率。
作为本发明的一种改进,S400包括:
S410:从油藏数值模拟器输出文件中获取当前时间步所有网格单元的状态信息,状态信息可以包括饱和度、压力和/或组分浓度。
S420:计算当前状态下,每个网格单元状态信息与其所有相邻网格单元的差值,选取绝对值最大的差值作为状态信息差值。
S430:将状态信息差值与基准参数进行比较,若所有状态信息差值均大于基准参数,则将该网格单元加密为前一级网格模型的网格单元,若所有状态信息差值均小于基准参数,则将该网格单元粗化为后一级网格模型的网格单元。
进一步的,S430包括:
S431:将状态信息差值与基准参数进行比较,若所有状态信息差值均大于基准参数,则将该网格单元标记为加密,若所有状态信息差值均小于基准参数,则将该网格单元标记为粗化。
S432:若网格单元被标记为加密,且该网格单元不处在第一级网格模型,则将该网格单元加密为前一级网格模型的网格单元;若网格单元被标记为粗化,且该网格单元不处在最后一级网格模型,且其对应的后一级网格单元包含的所有网格单元均标记为粗化,则将该网格单元粗化为后一级网格模型的网格单元。
此处给出一个具体实施例:
S420中,相邻的网格单元通过传导率联通表信息查找得到;状态信息包括饱和度和压力,状态信息差值包括饱和度差ΔSi和压力差ΔPi,其中:
Si和Pi分别为网格单元i的饱和度和压力,Sj和Pj分别为与网格单元i所有相邻网格单元j的饱和度和压力,tij为传导率,tij≠0代表网格单元i和网格单元j相邻;
基准参数包括ΔSmin、ΔSmax、ΔPmin和ΔPmax,可以根据需要设定。其中:若ΔSi>ΔSmax且ΔPi>ΔPmax,则将网格单元i标记为加密;若ΔSi<ΔSmin且ΔPi<ΔPmin,则将网格单元i标记为粗化,其他情况,则网格单元i不做标记。
整理所有网格的标记,如果:
网格单元i标记为加密,且网格单元i当前所处状态Li>1(即网格单元不是第一级)则在下一个时间步将网格i中所有网格状态设为Li-1,即加密。
网格单元i当前所处状态Li<Lmax,且其对应的更粗一级(即后一级,状态为Li+1)网格单元I包含的所有网格i均被标记为粗化,则在下一个时间步将网格i中所有网格状态设为Li-1,即粗化。
其余网格单元状态不做调整。
本实施例在饱和度和压力变化剧烈的复杂流动区域(如水驱前沿和近井地带)用高分辨率的网格进行精细表征,因而可以捕捉到油藏流动的关键动态特征,以保证数值模拟的精度。
应当提出的是,本实施例所提出的网格状态更新准则系基于饱和度梯度场(即饱和度差值)和压力梯度场(即压力差值),实际随着模型变化,可采用的调整准则还可包括组分浓度等网格状态。
本发明中S300通过调用数值模拟器,基于多级嵌套网格系统的第一级网格模型启动数值模拟运算。
如Eclipse油藏数值模拟器,其调用方式为:
1)黑油模型
2)组分模型
又如Cloud油藏数值模拟器,其调用方式为:
本发明中,网格模型还可以包括PVT属性数据、相渗数据、初始化数据和生产控制数据。其数据格式根据具体数值模拟器格式要求而定,无需在S100进行加载。
S500进一步为:运用基于流动的网格粗化方法,计算新的多级嵌套网格系统的网格孔隙度数据、网格深度数据、网格体积数据、网格间传导率数据和网格单元的状态信息。
这里还需要额外进行饱和度、压力等网格属性的更新,更新的方法与粗化网格孔隙度一样,采用体积加权平均即可,即:
上式中,V代表网格体积,p代表待更新属性,下标i和I分别代表当前时间步的网格编号和下一时间步的网格编号。
另一方面,本发明提供一种基于网格自适应加密与粗化技术的数值模拟装置,如图12所示,包括如下模块:
原始网格模型加载模块100,用于加载原始网格模型,原始网格模型包括网格孔隙度数据、网格深度数据、网格体积数据和网格间传导率数据。
多级嵌套网格系统构建模块200,用于构建多级嵌套网格系统,多级嵌套网格系统包括顺序设置的原始网格模型和将原始网格模型进行集合划分,依次生成的若干级嵌套的粗化网格模型,其中后一级网格模型是对前一级网格模型的粗化。
模拟运算模块300,用于基于多级嵌套网格系统的第一级网格模型启动数值模拟运算。
多级嵌套网格系统更新模块400,用于在数值模拟运算过程中,当前时间步状态更新完毕之后,将相邻网格单元的状态信息差值与基准参数进行比较,根据比较结果将该网格单元加密为前一级网格模型的网格单元,粗化为后一级网格模型的网格单元或不变,得到新的多级嵌套网格系统。
参数计算模块500,用于计算新的多级嵌套网格系统的网格孔隙度数据、网格深度数据、网格体积数据和网格间传导率数据。
迭代模块600,用于在下一时间步,对新的多级嵌套网格系统执行模拟运算模块、多级嵌套网格系统更新模块和参数计算模块,直至数值模拟运算结束。
本发明中,利用网格自适应加密与粗化调整技术,根据全油藏不同区域的动态特征,按需采用不同分辨率网格进行表征。在数值模拟过程的大部分时间步中,油藏大部分区域均采用分辨率较低的网格进行表征,可大大减少数值模拟过程中的网格数,即减少数值计算过程中的节点数,因此可缩短数值模拟的时间。在状态信息剧烈的前沿和近井地带用高分辨率的网格进行精细表征,因而可以捕捉到油藏流动的关键动态特征,以保证数值模拟的精度。
综上所述,本发明根据全油藏不同区域的动态特征,按需采用不同分辨率网格进行表征,动态调整网格的疏密程度,使得每一个时间点模型的计算节点都是最优的,克服了现有技术的网格粗化技术统一降低网格分辨率的方式带来的精度损失,在保证了数值计算精度的同时,提高了数值计算的效率。
作为本发明的一种改进,多级嵌套网格系统更新模块包括:
状态信息获取单元,用于获取当前时间步所有网格单元的状态信息,状态信息包括饱和度、压力和/或组分浓度。
差值计算单元,用于计算每个网格单元状态信息与其所有相邻网格单元的差值,选取绝对值最大的差值作为状态信息差值。
比较和更新单元,用于将状态信息差值与基准参数进行比较,若所有状态信息差值均大于基准参数,则将该网格单元加密为前一级网格模型的网格单元,若所有状态信息差值均小于基准参数,则将该网格单元粗化为后一级网格模型的网格单元。
进一步的,比较和更新单元包括:
标记单元,用于将状态信息差值与基准参数进行比较,若所有状态信息差值均大于基准参数,则将该网格单元标记为加密,若所有状态信息差值均小于基准参数,则将该网格单元标记为粗化。
更新单元,用于若网格单元被标记为加密,且该网格单元不处在第一级网格模型,则将该网格单元加密为前一级网格模型的网格单元;若网格单元被标记为粗化,且该网格单元不处在最后一级网格模型,且其对应的后一级网格单元包含的所有网格单元均标记为粗化,则将该网格单元粗化为后一级网格模型的网格单元。
此处给出一个具体实施例:
差值计算单元中,相邻的网格单元通过传导率联通表信息查找;状态信息包括饱和度和压力,状态信息差值包括饱和度差ΔSi和压力差ΔPi,其中:
Si和Pi分别为网格单元i的饱和度和压力,Sj和Pj分别为与网格单元i所有相邻网格单元j的饱和度和压力,tij为传导率,tij≠0代表网格单元i和网格单元j相邻。
基准参数包括ΔSmin、ΔSmax、ΔPmin和ΔPmax,其中:若ΔSi>ΔSmax且ΔPi>ΔPmax,则将网格单元i标记为加密;若ΔSi<ΔSmin且ΔPi<ΔPmin,则将网格单元i标记为粗化,其他情况,则网格单元i不做标记。
本实施例在饱和度和压力变化剧烈的复杂流动区域(如水驱前沿和近井地带)用高分辨率的网格进行精细表征,因而可以捕捉到油藏流动的关键动态特征,以保证数值模拟的精度。
本发明中,模拟运算模块进一步用于:调用数值模拟器,基于多级嵌套网格系统的第一级网格模型启动数值模拟运算。
网格模型还可以包括PVT属性数据、相渗数据、初始化数据和生产控制数据。
参数计算模块进一步用于:运用基于流动的网格粗化方法,计算新的多级嵌套网格系统的网格孔隙度数据、网格深度数据、网格体积数据、网格间传导率数据和网格单元的状态信息。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。