网格模型数据的生成方法与流程

文档序号:18993947发布日期:2019-10-29 21:04阅读:432来源:国知局
网格模型数据的生成方法与流程

本发明涉及物探技术领域,具体的说,涉及一种网格模型数据的生成方法。



背景技术:

在物探领域中,正演模拟过程中需要创建地震模型,并对其进行网格模型数据的计算。

目前,网格模型数据计算步骤是:1、在一个假设的封闭四边形内,用几何折线绘制地质体。2、利用三角剖分算法,找出地质体几何上的封闭多边形,并给这些地质体的多边形赋上属性值。3、把假设的封闭四边形,划分成在水平方向(x方向)步长为dx,垂直方向(z方向)步长为dz的小四边形网格,并需要判断每个网格点所在的位置(x方向和z方向上的坐标值)落在哪一个地质体中,然后将这个网格点所在的地质体的属性值赋予该网格点。以此类推,计算出所有的网格点属性值,也就完成了模型数据的网格化,得到了网格模型数据。

在传统的地震勘探中,模型数据网格化采用串行方式完成以上三个步骤,但是随着目前勘探的高密度、宽方位采集成为新趋势,模型的规模也越来越大,仍然采用串行方式势必会造成网格模型数据的生成花费过长的时间,执行效率低下等问题。

因此,亟需一种能够节约模型数据网格化的时间,提高效率的网格模型数据生成方法。



技术实现要素:

本发明的目的在于提供一种网格模型数据的生成方法,以解决现有的网格模型数据的生成花费过长的时间,执行效率低下的技术问题。

本发明的实施例提供一种网格模型数据的生成方法,该方法包括:

根据计算节点的物理资源确定其最大计算线程数目;

将所述网格模型在所述最大计算线程数目内划分为多个区块;

为每个所述区块分配计算线程;

所述计算线程在相应区块内对所述网格模型中的网格点进行赋值计算,生成所述网格模型数据。

在将所述网格模型划分为多个区块的步骤中包括:

根据所述网格模型中的网格点之间的无关性将所述网格模型划分为多个区块,所述区块内的网格点之间的内存地址连续,若所述网格模型中的两个网格点之间在进行赋值计算时没有依赖关系,则所述两个网格点之间具有无关性。

在将所述网格模型划分为多个区块的步骤中包括:

若所述网格模型中的相邻两行网格点之间具有无关性且行内网格点内存地址连续,则将所述网格模型内的网格点以行为单位平均划分为多个区块;

若所述网格模型中的相邻两列网格点之间具有无关性且列内网格点内存地址连续,则将所述网格模型内的网格点以列为单位平均划分为多个区块。

在将所述网格模型内的网格点以行为单位平均划分为多个区块的步骤中包括:

计算所述网格模型中网格点的行数与所述区块数目M的商a和余数b,所述区块的编号由上至下分别为0至M-1;

若b为0,则每个区块内的网格点行数为a;

若b不为0,则编号为0至b-1的区块内的网格点行数为a+1,编号为b至M-1的区块内的网格点行数为a。

在将所述网格模型内的网格点以列为单位平均划分为多个区块的步骤中包括:

计算所述网格模型中网格点的列数与所述区块数目M的商a和余数b,所述区块的编号由上至下分别为0至N-1;

若b为0,则每个区块内的网格点列数为a;

若b不为0,则编号为0至b-1的区块内的网格点列数为a+1,编号为b至N-1的区块内的网格点列数为a。

所述区块的数目为最大计算线程数目。

在确定最大计算线程数目的步骤中包括:

通过应用程序编程接口获取所述计算节点的处理器核数,从而确定所述计算节点的最大计算线程数目。

在对所述网格模型中的网格点进行赋值计算的步骤中包括:

若所述网格模型内的网格点以行为单位划分为多个区块,则所述计算线程在相应区块内按照从左到右、从上到下的顺序依次对网格点进行赋值计算。

在对所述网格模型中的网格点进行赋值计算的步骤中包括:

若所述网格模型内的网格点以列为单位划分为多个区块,则所述计算线程在相应区块内按照从上到下、从左到右的顺序依次对网格点进行赋值计算。

所述网格模型为划分成多个网格的封闭四边形,其中包括多个利用三角剖分算法绘制的地质体,在对所述网格模型中的网格点进行赋值计算的步骤中包括:

步骤1,获取目标网格点的坐标;

步骤2,判断是否已有其他网格点的坐标所在的地质体及地质体中的三角形被记录;如果否,则进行步骤4;

如果是,则判断所述目标网格点的坐标是否位于已被记录的地质体中的三角形中;如果是,则进行步骤5;

如果否,则判断所述目标网格点的坐标是否位于已被记录的地质体中的其他三角形中;如果是,则进行步骤5;

如果否,则进行步骤3;

步骤3,在其他地质体中搜索所述目标网格点的坐标所在的地质体及地质体中的三角形,并进行步骤5;

步骤4,在所有地质体中搜索所述目标网格点的坐标所在的地质体及地质体中的三角形,并进行步骤5;

步骤5,记录所述目标网格点的坐标所在的地质体及地质体中的三角形,并将所述目标网格点的网格属性值赋值为其所在的地质体的属性值。

本发明实施例提供的网格模型数据的生成方法通过采用多线程的并行方式对网格模型中的网格点进行赋值计算,相比于串行方式节省了大量时间,同时在对网格点定位和赋值时,有效解决了无效的三角形查找次数,显著提高了网格模型数据的生成效率。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分的从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。

附图说明

为了更清楚的说明本发明实施例中的技术方案,下面将对实施例描述中所需要的附图做简单的介绍:

图1是本发明实施例提供的网格模型数据的生成方法的流程示意图;

图2是本发明实施例提供的网格模型示意图;

图3是本发明实施例提供的网格点进行赋值计算的流程示意图。

具体实施方式

以下将结合附图及实施例来详细说明本发明的实施方式,借此对本发明如何应用技术手段来解决技术问题,并达成技术效果的实现过程能充分理解并据以实施。需要说明的是,只要不构成冲突,本发明中的各个实施例以及各实施例中的各个特征可以相互结合,所形成的技术方案均在本发明的保护范围之内。

本发明实施例提供一种网格模型数据的生成方法,如图1所示,该方法包括:

在步骤101中,根据计算节点的物理资源确定其最大计算线程数目。首先由主控线程获取计算节点的物理资源,计算节点可以为服务器或者PC等。然后依据计算节点的物理资源给定将要开启的计算线程数目。

为了使得网格模型数据的生成方法可以跨平台的使用,本发明实施例提供了跨平台的获取计算节点当前系统可用核数的方法,即通过应用程序编程接口API获取计算节点的处理器核数,从而确定计算节点的最大计算线程数目。具体来说,首先对当前计算节点的操作系统做预判断,如果是windows系统,则使用GetsystemInfo()这个API返回当前计算节点的处理器核数;如果是Linux系统,则使用get_nprocs()这个API返回当前计算节点真正可用的处理器核数。

可选的,在本发明实施例中,使用一个处理器内核进行一个线程的数据计算,也就是说当前计算节点真正可用的处理器核数即为其最大计算线程数目。

在步骤102中,根据网格模型中的网格点之间的无关性将网格模型在最大计算线程数目内划分为多个区块,区块内的网格点之间的内存地址连续,若网格模型中的两个网格点之间在进行赋值计算时没有依赖关系,则两个网格点之间具有无关性。

具体来说,首先分析计算任务的并发性需求,如图2所示,网格模型为划分成多个网格的封闭四边形,其中包括多个利用三角剖分算法绘制的地质体,在网格模型数据的生成过程中,耗时较多的部分为对网格模型中的网格点进行赋值的计算,即将网格模型中的每个网格点赋上其所在地质体的属性值,地质体的属性值包括纵波速度、横波速度、密度中的一个或多个。逐个对网格点进行赋值会耗费大量的时间,而通过多线程操作同时对多个网格点进行赋值将会大大提高效率。因此,将网格模型数据的生成这个总任务分解成多个子任务,通过对各子任务的分析,开拓并发性,确定多个计算线程并行的子任务为网格点落入地质体位置的判断及属性赋值操作。

然后,在保证每个区块内的网格点之间的内存地址连续的情况下,根据网格点之间的无关性将网格模型划分为多个区块,用以分配多个线程进行多线程的赋值计算。区块之间具有无关性是区块独立进行赋值计算的前提,保证区块内的网格点之间的内存地址连续,可以避免内存地址空间寻址时的频繁跳转。

进一步的,若网格模型中的相邻两行网格点之间具有无关性且行内网格点内存地址连续,则将网格模型内的网格点以行为单位平均划分为多个区块。也就是说每个区块包含多个相邻的由网格点组成的行,由于每行内的网格点内存地址连续,所以区块内的所有网格点内存地址连续。且网格模型中任意两个相邻的由网格点组成的行之间具有无关性,所以区块之间具有无关性。

具体来说,计算网格模型中网格点的总行数与区块数目M的商a和余数b,区块的编号由上至下分别为0至M-1;

若b为0,即总行数与区块数整除,则每个区块内的网格点行数为a;

若b不为0,即总行数与区块数不能整除,则编号为0至b-1的区块内的网格点行数为a+1,编号为b至M-1的区块内的网格点行数为a。至此,将网格数据内的所有网格点都分配到了相应的区块内。

与上述将网格模型从上至下以行为单位分成区块大致相同,若网格模型中的相邻两列网格点之间具有无关性且列内网格点内存地址连续,则将网格模型内的网格点以列为单位平均划分为多个区块。

具体来说,计算网格模型中网格点的列数与区块数目M的商a和余数b,区块的编号由上至下分别为0至N-1;

若b为0,即总行数与区块数整除,则每个区块内的网格点列数为a;

若b不为0,即总行数与区块数不能整除,则编号为0至b-1的区块内的网格点列数为a+1,编号为b至N-1的区块内的网格点列数为a。

在步骤103中,为每个区块分配计算线程。可选的,在本发明实施例中,使用一个处理器内核进行一个线程的数据计算,即分配给每个区块一个计算线程。同样的,也可以根据实际需求使用一个处理器内核进行多个线程的数据计算,或者使用多个处理器内核进行一个线程的数据计算,在此不做限制。

在步骤104中,计算线程在相应区块内对网格模型中的网格点进行赋值计算,生成网格模型数据。其中,若网格模型内的网格点以行为单位划分为多个区块,则计算线程在相应区块内按照从左到右、从上到下的顺序依次对网格点进行赋值计算。由于行内网格点内存地址连续,相邻两行头尾网格点内存地址连续,因此在区块内从左到右进行完一行的操作后,从上到下轮到下一行,在下一行中再从左到右进行操作,这样就使得在对区块内网格点进行赋值计算时,保持内存地址的寻址空间一直连续,避免了内存地址空间寻址时的频繁跳转。

同样的,若网格模型内的网格点以列为单位划分为多个区块,则计算线程在相应区块内按照从上到下、从左到右的顺序依次对网格点进行赋值计算。

最后,在所有计算线程执行结束后,释放相关资源。

下面以图2所示的网格模型为例,对本发明实施例提供的网格模型数据的生成方法中的步骤101至步骤103进行具体描述。

该网格模型为划分成多个网格的封闭四边形,其中包括多个利用三角剖分算法绘制的呈多边形的地质体,其中,在水平方向(x方向)上的网格点的数量为Nx,在深度方向(z方向)上的网格点的数量为Nz。在水平方向上的网格点内存地址寻址空间连续。

首先获取到计算节点的处理器核数为NCORES,依据处理器核数,启动计算线程的个数NTHREADS=NCORES。一个数据区块分配给一个计算线程。

然后根据模型数据的数据无关性,确定在网格模型中,主控线程依据从上到下的顺序进行多线程并行化时的数据区块的划分。

数据区块的划分方式采用尽量平均分配的原则。在网格模型中,Z方向的规模为NZ,则Z方向用于划分数据区块的行数为NZ个,其编号分别为0至NZ-1。在数据区块划分时先得到每个计算线程分配到的一个基础行数目BASE=NZ/NTHREADS,而增量INCREMENT=NZ%NTHREADS(/表示求商,%表示求余数)。当INCREMENT为0时表明NZ/NTHREADS整除,所有的计算线程得到的行数目都为BASE,即编号为0的计算线程分配到的网格点行编号为0至BASE-1,以此类推,编号为NTHREADS-1的计算线程得到的网格点行编号为BASE*(NTHREADS-1)至NZ-1。当INCREMENT不为0时表明NZ/NTHREADS不整除,编号为0至INCREMENT-1的计算线程得到的网格点行数目为BASE+1,其余的计算线程得到的网格点行数目为BASE,即编号为0的计算线程分配到的网格点行编号为0至BASE,以此类推,编号为NTHREADS-1的计算线程得到的网格点行编号为NZ-BASE至NZ-1。

本发明实施例提供的网格模型数据的生成方法通过采用多线程的并行方式对网格模型中的网格点进行赋值计算,极大的提高了网格模型数据的生成速度,是一种高效的网格模型数据生成方法。使用本方法对于18000×15000的模型,在开启2个线程时线性加速比达到1.8,在开启4个计算线程时线性加速比达到3.2。

进一步的,在本发明实施例中,如图3所示,对网格模型中的网格点进行赋值计算的步骤具体包括:

S1:获取目标网格点的坐标。

在网格模型中,按照从左到右、从上到下的顺序,获取网格点的坐标值。此外,还可以先判断所获取的坐标值是否在该网格模型中,如果不在则结束进程;如果在则进行步骤S2。

S2:判断是否已有其他网格点的坐标所在的地质体及地质体中的三角形被记录。

如果没有,则进行步骤S4;如果有,则判断目标网格点的坐标是否位于已被记录的地质体中的三角形中,通常可以先判断前一个网格点的坐标所在的地质体(可称为最近地质体)中的三角形。

如果是,则进行步骤S5;如果否,则判断目标网格点的坐标是否位于已被记录的地质体中的其他三角形中,即则判断目标网格点的坐标是否位于最近地质体中的其他三角形中。

如果是,则进行步骤S5;如果否,则进行步骤S3。

S3:在其他地质体中搜索目标网格点的坐标所在的地质体及地质体中的三角形,并进行步骤S5。

具体的,当目标网格点的坐标不在最近地质体中时,则在最近地质体以外的其他地质体中搜索目标网格点的坐标所在的地质体及地质体中的三角形。如果除最近地质体以外,还有其他地质体已被记录,则优先搜索已被记录的地质体,再搜索还未被记录的地质体,因为目标网格点的坐标位于已被记录的地质体的可能性相对更大一些。

如果搜索到了目标网格点的坐标所在的地质体及地质体中的三角形,则进行步骤S5,否则仍然循环搜索每个地质体,直至搜索完所有的地质体。当然,搜索完所有的地质体时,必定能搜索到目标网格点的坐标所在的地质体及地质体中的三角形。

S4:在所有地质体中搜索目标网格点的坐标所在的地质体及地质体中的三角形,并进行步骤S5。

如果还没有其他网格点的坐标所在的地质体及地质体中的三角形被记录,则在所有地质体中搜索目标网格点的坐标所在的地质体及地质体中的三角形。

如果搜索到了目标网格点的坐标所在的地质体及地质体中的三角形,则进行步骤S5,否则仍然循环搜索每个地质体,直至搜索完所有的地质体。当然,搜索完所有的地质体时,必定能搜索到目标网格点的坐标所在的地质体及地质体中的三角形。

S5:记录目标网格点的坐标所在的地质体及地质体中的三角形,并将目标网格点的网格属性值赋值为其所在的地质体的属性值。

本实施例中,地质体的属性值可以包括纵波速度、横波速度、密度中的一个或多个。目标网格点赋值完成后,继续返回步骤S1,依次对后面的每个网格点进行赋值,即可生成网格模型数据。

以下为本发明实施例提供的对网格模型中的网格点进行赋值计算的C++语言伪代码。当然,在其他实施方式中,也可以通过各种其他语言来定义伪代码。

其中,nx表示模型数据网格化时x方向上的网格点的数目,nz表示模型数据网格化时z方向上的网格点的数目;m表示当前循环搜索时的z方向的网格点的位置;n表示当前循环搜索时的x方向的网格点的位置;isPrev表示是否有上一个网格点的坐标所在的地质体及地质体中的三角形被记住的标志位,isPrev=1表示有坐标值被记住,isPrev=0表示没有坐标值被记住;i表示当前循环搜索时的地质体位置;j表示当前循环搜索时的三角形位置;prevTriPos表示当前地质体中的三角形位置;nPrevTriangles表示当前地质体中的三角形总数目;prevRegionPos表示当前地质体的位置;nRegion表示所有地质体的总数目。

本发明实施例提供的网格模型数据的生成方法中,在获取一个目标网格点的坐标后,首先判断是否已有其他网格点的坐标所在的地质体及地质体中的三角形被记录。如果有,则优先判断目标网格点的坐标是否位于已被记录的地质体中的三角形中,并将目标网格点的网格属性值赋值为其所在的地质体的属性值。

本实施例中,当目标网格点在地质体的边界线处时(目标网格点与前一个网格点位于不同的地质体中),最坏算法复杂度是O(nx1×nz1×(R1+…+Rm)),其中nx1为地质体的边界线处的x方向上的网格点数,nz1为地质体的边界线处的z方向上的网格点数,[R1,…,Rk]为第1个至第k个地质体中的三角形数目。而当目标网格点在非地质体的边界线处时(目标网格点与前一个网格点位于同一个地质体中),其平均算法复杂度是O(nx2×nz2),其中nx2为非地质体的边界线处的x方向上的网格点数,nz2为非地质体的边界线处的z方向上的网格点数。

因为目标网格点是在网格模型中顺次获取的,所以当前获取的目标网格点与前一次获取的目标网格点,在多数情况下是位于同一个地质体的,即所有地质体的边界线处在x方向和z方向上的网格点数占总点数的极少部分。如果当前获取的目标网格点与前一次获取的目标网格点位于同一个地质体,就可以快速的将该地质体的属性值赋予当前获取的目标网格点,而不需要对每个地质体的每个三角形进行循环判断,从而能够使算法的复杂度降低,显著提高了网格模型数据的生成效率。

本发明实施例提供的网格模型数据的生成方法通过采用多线程的并行方式对网格模型中的网格点进行赋值计算,相比于串行方式节省了大量时间,同时在对网格点定位和赋值时,有效解决了无效的三角形查找次数,显著提高了网格模型数据的生成效率。

虽然本发明所公开的实施方式如上,但所述的内容只是为了便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属技术领域内的技术人员,在不脱离本发明所公开的精神和范围的前提下,可以在实施的形式上及细节上作任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1