发明内容
为克服现有技术中的问题,本发明提出一种构型界面的等效表征方法。
本发明提供一种储层成因单元界面等效表征方法,其特征在于,其具体步骤如下:基于三井点数据约束的三维地质模型砂体成因单元界面追踪步骤:通过采用低通滤波算法,结合井点解释数据对三维地质模型中的沉积微相数据进行光滑,在此基础上追踪成因单元,也即各个微相界面的空间位置,形成构型界面的三维空间离散数据。
在基于三井点数据约束的三维地质模型砂体成因单元界面追踪步骤基础上,进行基于井点数据约束的构型单元界面重建的步骤:通过采用基于井点约束的空间离散点曲面拟合方法,对构型界面进行曲面重构,建立描述各微相三维空间几何形态的包络面。
构型界面等效表征步骤:应用等效粗化方法,将重建的微相单元包络面与粗化网格进行空间几何交切计算,得到网格模型中的空间位置,并将空间位置信息以网格界面传导率乘数的格式输出给油藏数值模拟模拟器,实现小尺度地质成因单元界面在任意网格尺度油藏模型中的定量表征。
构型界面传导效果定量评价步骤:结合油藏数值模拟历史拟合,定量评价低渗构型界面的传导效果,从而得出构型界面合适的传导率,传导率的大小等效表征构型界面对渗流效果的影响。
此外,本发明还包括基于空间离散数据简化存储的算法步骤,包括:从地质模型数据中读入模型数据,每个网格建立vertCube对象,对象仅存储8个实际的空间坐标;根据每个vertCube建立对应的topoCube对象,存储的坐标为8个整型的数组,并且全部初始化为-1;依次按照Z方向、Y方向和X方向,遍历每个vertCube对象,并根据对象的8个坐标逐一对对应的topoCube对象建立拓扑结构。
此外,基于井点属性约束的网格重建算法步骤包括:
步骤1:建立空间索引;
步骤2:按照Z方向对井点数据排序;
步骤3:遍历每个井点;
步骤4:判断井点是否已包含在已修改的地质网格数据中,如果没有,则进行步骤5;
被重建后的地质网格,有可能包含当前井点,在此情况下,遍历下一个井点;
步骤5:利用空间索引,根据井点找到与该井点相邻的地质网格;
步骤6:遍历每个网格包络面,判断是否有包含当前井点的网格,如果有则返回到步骤3,否则进行步骤7;
步骤7:遍历每个网格包络面,并找到距离与井点最近的网格面;
步骤8:移动被找到的网格面,使网格包含该井点;
步骤9:将被修改的网格增加到被修改网格数组中。
另外,本发明三维空间任意包络面的网格锯齿化算法步骤包括:
对地质模型数据和包络面分别构建空间索引;
遍历每个包络面;
根据当前包络面得到所有与其相交的地质网格;
遍历每个相交的地质网格;
根据当前网格得到所有与其相交的包络面网格;
将当前网格与每个查询到到包络面求交,并保存交点以及被包含的包络面的点;
判断网格的锯齿面是否为连通的,如果不是,则执行下一步;
根据保存的点构建多面体;
根据体积大小或者点数决定锯齿面。
本发明提供的等效表征方法,是利用储层成因单元间网格传导率等效表征低渗构型界面对渗流效果的影响,通过调整储层成因单元间网格传导率,从而达到在油藏数值模拟中设置低渗构型界面的目的,传导率的大小等效表征了构型界面对渗流效果的影响,对于油田高效开发和剩余油预测而言效果明显。
具体实施方式
储层成因单元界面等效表征方法的核心是精细网格模型井点数据约束的小尺度构型界面的三维重建及大尺度粗网格构型单元等效表征技术。应用这个方法可以解决精细地质模型中小尺度地质体以及储层内部成因单元界面在油藏数值模拟模型中表征这一难题,使得粗化后油藏模型能够保留地质模型细节特征从而提高油藏数值模拟成果质量,提高剩余油预测精度。等效表征方法具体实施方式是:
1、应用常规建模软件,建立储层三维地质模型,得到沉积微相、孔隙度、渗透率等参数模型。通过设计油藏数值模拟网格***,粗化地质模型各项参数,建立油藏数值模拟模型。
2、依据等效表征思路和方法编写等效表征软件
3、应用软件加载井数据、地质模型数据、油藏模型数据、以及精细地质研究得到的各类反映储层结构的砂体成因单元数据。
4、在地质模型上进行成因单元(沉积微相)界面重建,重建界面包括(1)数据简化;(2)数据平滑;(3)界面追踪;(4)井点数据约束下界面的曲面拟合。
5、应用重构的界面数据在粗化网格模型(数值模拟模型)中进行成因单元界面定位包括(1)界面曲面与网格***求交运算;(2)成因单元界面锯齿化(用网格界面等效表征成因单元界面);
6、根据注采井组的注采动态确定与之相匹配的网格界面传导率乘数,输出与数值模拟器兼容的传导率乘数数据卡。
所述第1步中储层地质模型的建立业内已经有较为详细的方法与流程,应用常规建模软件建立油藏数值模拟模型;
所述第2步中等效表征软件的编写主要分七个功能子***:主框架管理子***、图层界面子***、数据解析读取、地质模型层管理子***、几何处理子***、算法处理子***以及三维图形绘制子***。软件具体模块划分如下:
表1***模块划分列表
其中算法处理子***是本***的核心部分,其输出的最终结果为锯齿化后的包络面。算法处理子***的原始输入数据来自于用户指定的基于特定属性和属性值的地质网格数据。但由于地质网格数据有可能存在噪音网格或者网格空间范围并未反映井轨迹的位置,因此算法处理子***本身还包括了数据平滑和基于井轨迹约束的网格重建算法。
此外,算法处理子***中的各种算法都是基于空间关系分析,涉及到大量的相邻关系的判断。如果直接使用空间坐标进行相邻关系的计算,会由于浮点数的精度问题造成算法的不稳定,而且基于浮点数的数值计算效率较低。另外一个潜在的问题在于,在得到最终结果前,地质网格数据会经过几种算法的处理,每个算法都可能造成空间坐标的改变。但由于地质网格中大量存在共点的情况,这样造成当公共点坐标被修改时,需要同时修改拥有该点的网格的对应坐标,以保证数据的一致性。如果为每个网格直接存储空间坐标,无疑会增加算法的复杂度。因此,本子***将利用拓扑结构存储网格坐标。
算法处理子***逻辑结构如图1,算法处理子***主要包含了以下几部分:
1)构建拓扑关系,空间离散数据简化存储;
2)空间离散数据平滑处理;
3)基于井点属性约束的网格重建;
4)属性数据体空间包络面生成;
5)空间任意包络面网格锯齿化处理。
下面就各个部分的实现进行详细说明:
1)构建拓扑关系,空间离散数据简化存储
地质网格数据以及后续算法的特点决定了采用直接存储空间坐标的方式表达地质网格,不仅内存消耗大而且影响算法的稳定和精确度。而拓扑结构是解决以上问题较好的方法。
用拓扑结构表达地质网格的基本原理为唯一的空间坐标只存储一次,且都存放在一维线性数组中,拥有该点的地质网格仅仅存储该点在数组中的位置索引。当需要空间坐标进行渲染或者参与数据处理时,利用位置编号即能很快的得到对应坐标。当需要对某个点进行空间坐标修改时,也同样利用位置偏移找到该点在一维数组中的坐标,并进行修改。因为拥有该点的其他地质网格仅仅保留点在数组中的位置,而非实际的空间坐标,因此修改一维数组的空间坐标,不会对点在数组的位置产生影响,但会对拥有该点的地质网格的空间位置产生相应的影响,进而能很方便的维护了数据的一致性。图2是本算法思想的说明:
在图2中,两个地质网格A和B相邻,网格A的坐标为{a1,b1,c1,d1,e1,f1,g1,h1},网格B的坐标为{b1,b2,c2,c1,f1,f2,g2,g1}。其中c1,b1,f1,g1是四个共点。图3为拓扑结构的存储示意图以及网格对应的拓扑坐标。
基于空间离散数据简化存储的算法思路,本算法的步骤如下:
1.从地质模型数据中读入模型数据,每个网格建立vertCube对象,但该对象仅存储8个实际的空间坐标。
2.根据每个vertCube建立对应的topoCube对象,存储的坐标为8个整型的数组,并且全部初始化为-1。
3.依次按照Z方向、Y方向和X方向,遍历每个vertCube对象,并根据对象的8个坐标逐一对对应的topoCube对象建立拓扑结构。
步骤3是建立拓扑结构的关键一步,流程图如图4。
本算法实现的一个关键在于在遍历vertCube的坐标点时,能快速找到相邻地质网格内与其对应的点。每个点最多可能和其它7个网格的点共点,每个点的相邻地址网格的对应点都是有特定方位关系的,这种方位关系预先通过静态变量定义。
每个静态变量对应于某个点7个相邻点的位置关系。假设某地质网格的网格位置为(10,20,30),变量A_topo定义了地质网格顶面的点A,共有7个相邻点,相邻点所在的地质网格位置是由每个二维数组前三个数字决定,表示相对该点网格位置的偏移。二维数组的最后一个数表示相邻点在地质网格里的位置。例如,{-1,0,0,B_INDEX},表示第一个相邻点的地质网格的网格位置为(9,20,30),对应于该网格的B点。
本算法的核心实现伪代码为:
2)三维空间离散属性模型的数据平滑算法
地质网格数据来自于其他算法的处理结果或者基于实际探测后对实际地质分布的模拟逼近,由于算法误差或者机械误差等因素,必然会产生不符合实际情况或者符合实际情况,但对算法本身而言意义不大的网格,即噪音网格或者高频网格。因此,在执行其他算法前有必要消除这些噪音网格。
本***拟采用低通滤波器,消除噪音网格。低通滤波器的概念起源于电子信号,通常用以减弱或者消除高频信号,而容许低频信号通过。与之对应的是高频滤波器。低通滤波器概念在不同的专业有许多不同的形式,尤其在图像处理、金融、机器视觉等有着广泛的应用。
本算法的基本原理为,定义一个N*N*N的窗口以及一个域值,N通常小于9且为奇数。该窗口从需要进行平滑处理的数据集的空间范围的左上角开始,依次按照X方向、Y方向、Z方向逐格移动。每次移动完毕后,以窗口的中心为平滑对象,并统计窗口内网格的某项指定属性值。如果目标网格所属的属性值集合与全窗口的属性值的数值和的比例超过指定的域值,则保留该网格,否则该目标网格被视为噪音网格,将被标记,在全部遍历后,统一清除所有的噪音网格。图5为遍历的示意图。
空间离散数据平滑算法的步骤如下:
1.确定窗口大小;
2.依次按照Z方向、Y方向和X方向移动窗口;
3.在窗口内,计算具有相同属性值的网格个数;
4.网格个数除以窗口内网格的总数
5.如果比值大于输入的域值,则保留,否则:
6.标识该窗口的中心网格为噪音网格。
算法流程如图6。
平滑算法实现的两个关键步骤为窗口大小的确定以及噪音网格的确定,其算法如下所示:
确定窗口的边界:
噪音网格的确定:
3)基于井点属性约束的网格重建算法
地质网格数据有可能来自于其他算法的处理结果,但其空间范围并未包含井轨迹的位置,因此需要通过修改网格的空间范围以包含井点,以能真实反映地质的实际情况。
本算法的基本思路为,遍历每个井轨迹数据,对于每个井点的空间坐标,判断是否有地质网格包含该井点,如果有,则说明网格已正确反映井点位置,否则需要找到离该井点最近的地质网格,并选择距离该点最近的面,通过移动该面,使该网格能包含井点。本算法需要注意的是,在寻找最近面时,距离不能成为唯一的依据,否则会产生对面倒置的情况。
图7为倒置的示意图,在该图中,A和B面是个两个对面,如果以面的中心点与井点a的连线距离作为点到面的距离,则在上图中井点与A面的距离较近,因此需要平移A面。但平移后,A面已经在B面的上面,显然不符合要求。在实际的处理时,网格的形态远比示意图中的复杂,A或者B很有可能并非平面,因此在处理时需要特别处理。
本算法步骤如下:
1.建立空间索引;
空间索引是本算法的基础,可以大幅度提高算法的速度。利用空间索引,可以从大量的地质网格中快速找到与井点接近的网格。
2.按照Z方向对井点数据排序;
对于重建地质网格,一个基本的原则是尽量对较少数量的网格进行修改。基于以上原则,对于每口井的井点,按照Z值方向依次排列,如果有井点未包含在地质网格内,则首先修改最高点或最低点的井点所找到的网格包络面,形成的新包络面在绝大多数情况下会包含井点附近的井点,因而尽可能的减少重建地质网格。
3.遍历每个井点;
4.判断井点是否已包含在已修改的地质网格数据中,如果没有,则步骤5;
被重建后的地质网格,有可能包含当前井点,在此情况下,遍历下一个井点。
5.利用空间索引,根据井点找到与该井点相邻的地质网格;
井点是空间点,进行空间查询时,是以0.5个单位为增长半径,井点为中心,构建立方体,直到首次找到与该立方体相交的地质网格。
6.遍历每个网格包络面,判断是否有包含当前井点的网格,如果有则返回到步骤3,否则进行步骤7;
地质网格对象并非规则的6面体,每个面有可能并非同一平面。空间索引是利用最小外接立方体相交来查找网格,因此满足要求的网格并不一定是包含井点,需要进一步利用多面体包含井点的算法精确判断包含关系。
7.遍历每个网格包络面,并找到距离与井点最近的网格面;
本步骤仅仅对网格包络面重建。井点与网格面的距离是井点与网格面中心的连线距离,而非井点到网格面的垂直距离。该步骤需要考虑对面倒置的情况,判断是否倒置的方法为:a)计算井点在被移动包络面的投影点,并得到从投影点到井点的矢量;b)根据矢量,计算包络面中心点移动后的点的位置;c)判断新中心点与旧中心点是否在对面的同一方向,如果不是,则说明移动包络面会造成对面倒置,因此该包络面将不会被作为候选。
8.移动被找到的网格面,使网格包含该井点;
计算井点在被移动包络面的投影点,并得到从投影点到井点的矢量,根据该矢量,对每个包络面的四个点做空间平移操作。
9.将被修改的网格增加到被修改网格数组中。
算法流程如图8。
本算法的实现关键在于判断是否对面倒置以及包络面重建。
对面倒置算法的核心实现如下:
包络面重建核心代码如下:
4)三维空间离散网格数据的空间包络面生成算法
包络面生成算法是在指定的层,将具有相同属性以及相同属性值的网格找出,并判断那些是完全包含在内部的网格,那些是最表面的网格。而表面的网格就是该层的包络面。
该算法对网格数据的遍历顺序与平滑算法类似,但区别在于,按照某一方向遍历时,一旦发现包络面,需要中断遍历,并回退到上一步,开始从另外一个方向开始遍历。对于本算法,拟采用递归算法。
本算法的一个前提在于,对于网格位置相邻的两个网格,如何定义这两个网格也是空间相邻的。
在本算法中,对该问题的定义为,当且经当两个面的四个点完全相同时,这两个面才是相邻的。
算法步骤如下:
1.按照X方向遍历,确定相邻网格是否左右相接,如果不是,说明对应相应网格面为包络面,并标识;
2.按照Y方向遍历,确定相邻网格是否前后相接,如果不是,说明对应相应网格面为包络面,并标识;
3.按照Z方向遍历,确定相邻网格是否上下相接,如果不是,说明对应相应网格面为包络面,并标识;
4.依次按照Z、Y和X方向遍历包络面网格;
5.对于当前包络面网格,生成新的包络面群编号,并作为当前群号;
6.对于当前包络面,按照上/下、左/右和前/后六个方向查询相邻地质网格;
7.如果相邻网格同样是包络面,则将该网格赋予当前群号,并作为当前包络面执行步骤6,否则;
8.回退到上一网格,从另外一个方向开始判断。
具体算法流程如图9。
包络面生成算法的关键在于包络面的确定以及包络面集的标识。
以下为有关左右关系和前后包络面确定的实现代码:
包络面集标识实现代码如下:
5)三维空间任意包络面的网格锯齿化算法
三维空间任意包络面的网格锯齿化算法是将已经得到的包络面与新的网格数据相切,与包络面相切的面构建成新的包络面。
本算法的思路比较明确,但一个需要考虑的问题在于,但被切的网格,其与包络面相交的面将不能构成连通,此时需要根据切割后形成的面与两个对面分别形成的体求体积,参与构建体积较小的体的对面将成为锯齿面。
在图10中,A和B是两个对面,C是包络面。假设包络面和网格除了A和B外,与其他四个面都相交,此时需要让A或者B成为锯齿面。在这个示意图中,由于A和C构成的新的体的体积小于C和B构成的体的体积,因此A将成为锯齿面。
本算法有以下3个关键问题:
1.如何根据某个包络面找到与其相交的地质网格。
描述:地址模型数据量很大,如何通过包络面快速找到与其相交的网格,直接决定了本算法的效率。
本发明的设计思路是,对地质网格数据建立空间索引,通过包络面的最小外接矩形查询与外接矩形相交的网格。经过粗查后,再通过包络面与网格对象进行精确的相交测试,最终决定网格是否与该包络面相交。
2.如何根据网格找到所有与其相交的包络面。
网格有可能与多个包络面相交,而这些包络面与网格相交的共同结果决定了网格的锯齿面。但与问题1类似,如何在大数据量情况下,快速找到所有与网格相交的包络面。
本发明中,对包络面建立空间索引,并由网格的最小外接矩形粗查与其相交的包络面,再根据该网格体与得到的包络面进行准确的相交测试,最终得到所有符合相交条件的包络面。
3.当出现锯齿面不连通的情况时,如何计算相交产生的多面体的体积,进而确认锯齿面。
每个网格可能和多个包络面相交,最终形成的体可能会非常复杂,而且不能保证体是简单多面体,这给多面体的构建带来了很大困难,也使多面体体积的计算很复杂。
思路1:保留所有与构建多面体相关的点,这些点来自于:a)网格待定对面的四个顶点;b)网格面与包络面相交的交点;c)网格完全包含包络面的点。根据这些点,构建面片,最终形成多面体。但这种方式很复杂,而且由于多面体形态的不确定性,会造成计算的不稳定性。
思路2:以两个对面为底,用过网格正中间的点,且垂直于对面中点连线的平面,将网格近似平分成两个多面体。根据构建多面体的点被包含这2个多面体内的个数的多少决定锯齿面。该思路较上一思路更为直接、简单,算法稳定也高。见图11。
图11中,红色的点和绿色的点是参与构建多面体的点,其中绿色的点是对面A的四个顶点,不参与统计。蓝色虚框表示的透明4边形是将网格一分为二的分割平面。因为红色点大多数落入分割平面与A面构建的体内,因此A面被判定为锯齿面。
本算法的步骤为:
1.对地质模型数据和包络面分别构建空间索引;
2.遍历每个包络面;
3.根据当前包络面得到所有与其相交的地质网格;
4.遍历每个相交的地质网格;
5.根据当前网格得到所有与其相交的包络面网格;
6.将当前网格与每个查询到到包络面求交,并保存交点以及被包含的包络面的点;
7.判断网格的锯齿面是否为连通的,如果不是,则执行下一步;
8.根据保存的点构建多面体;
9.根据体积大小或者点数决定锯齿面。
具体的算法流程如图12。其中,根据体积法确定连通面的算法流程如图13根据点数法确定连通面的算法流程如图14
以下为判断是否为连通锯齿的实现:
构建多面体的算法实现:
所述第3步,即为应用步骤2编写的软件加载井数据、地质模型数据、油藏模型数据、以及精细地质研究得到的各类反映储层结构的砂体成因单元数据。
所述第4、5步,即为应用步骤2编写的软件中的算法处理子***来进行处理,得到表征成因砂体界面的锯齿化后的包络面。
所述第6步,根据前期注采井组的注采动态研究,确定与之相匹配的网格界面传导率乘数,输出与数值模拟器兼容的传导率乘数数据卡,实现部小尺度成因单元界面定量化表征。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。