一种二维网格图形的三角化确定方法与流程

文档序号:17668043发布日期:2019-05-15 22:51阅读:306来源:国知局

本发明涉及地球系统科学领域,二维网格区域网格管理应用方面,尤其涉及一种二维网格图形的三角化确定方法。



背景技术:

耦合器是地球系统模式的关键模块之一,通过实现不同分量模式间、不同进程间、甚至同一分量模式间的耦合来构建耦合模式。其间的数据传递和数据插值是耦合器的最基本功能,其中数据插值实现了耦合变量在不同模式网格间的有效转换。现有绝大部分耦合器都具备了不同水平网格间的插值功能。由于模式的水平网格往往在积分过程中保持不变,耦合器中水平插值的实现往往分为两个阶段,即生成插值权重和在积分过程中反复使用插值权重进行插值计算,其中插值权重可以在模式运行前通过其他插值软件进行离线生成,现存的大部分耦合器支持插值系数的离线读入,而部分耦合器也具备在线生成插值权重的功能。

通用性是耦合器的一个重要特点,现有的大部分耦合器已被应用到了不同耦合模式中,实现了不同分量模式间的耦合。在过去,最常用的水平网格就是经纬网格,但随着模式的快速发展,出现了很多新型水平网格,例如高斯归约网格、三极网格、球面立方网格、正二十面体网格、阴阳网格、自适应网格等,其中有些网格甚至无网格结构。新型水平网格的不断出现给耦合器的通用性,尤其是任意两个水平网格间插值的通用性,带来了严峻挑战。为了克服这个问题,通常有两种可选方案。第一种方案是增量式地支持新网格,即当耦合器或插值软件不支持新型水平网格时,就相应修改耦合器或插值软件的源代码。第二种方案是采用通用方式来表示任意网格,并以此为基础实现插值权重的计算,这使得耦合器或插值软件的源代码可在模式网格的发展中基本保持不变。第一种方案会使得耦合器或插值软件的源代码变得越来越复杂,如果能找到网格的通用表示方式,那么第二种实现方案将更好。

因此,亟需一种可提高耦合器插值通用性的二维网格图形的确定方法。



技术实现要素:

本发明解决的技术问题是:现有的耦合器不具备用通用方式来表示任意水平网格的功能,限制了耦合器的可应用及可处理网格的范围。

为解决上述技术问题,本发明提供了一种二维网格图形的三角化确定方法,包括:

坐标获取步骤,获取待处理的二维网格区域内所有格点的坐标;

二维网格区域前处理步骤,根据所述二维网格区域的边界和/或格点位置调整该二维网格区域内格点的数量及坐标,得到前处理后二维网格区域;

核心子网格区域剖分步骤,将所述前处理后二维网格区域剖分为多个互不重叠的核心子网格区域;

核心子网格区域三角化步骤,使用二维三角化算法分别对每个核心子网格区域进行三角化,得到每个核心子网格区域的三角化结果;

三角化结果合并步骤,利用耦合器将所有所述核心子网格区域的三角化结果合并,得到所述二维网格图形。

优选的是,在所述坐标获取步骤后,还包括计算资源管理步骤,包括:

根据所述二维网格区域内格点的数量,确定多个进程以及每个进程中由参与计算的线程构成的有效计算资源单元组。

优选的是,所述进程中有效计算资源单元组中包括的线程数量等于未参与计算的线程的数量。

优选的是,所述二维网格区域前处理步骤通过多个有效计算资源单元组中的线程并行实现,且进程之间无数据交互,所述二维网格区域前处理步骤包括:

当所述二维网格区域具有纬度方向边界时,判断所述二维网格区域是否覆盖南极点和/或北极点;

若覆盖,则在所述二维网格区域的南极点和/或北极点处没有格点时,在所述二维网格区域的南极点和/或北极点处插入伪格点,以构成前处理后球形二维网格区域,并在所述二维网格区域的南极点和/或北极点处有多个格点时,将这些格点的位置朝着赤道的方向调整,并在所述二维网格区域的南极点和/或北极点处插入伪格点,以构成前处理后球形二维网格区域;

若未覆盖,则在所述二维网格区域具有经度方向边界时,在所述二维网格区域的经度边界上等距离插入多个伪格点,以构成前处理后边界不规则网格二维网格区域;

当所述二维网格区域在同一坐标下有多个格点时,取其中一点作为该坐标的格点参与所述核心子网格区域剖分步骤。

优选的是,所述核心子网格区域剖分步骤,通过多个有效计算资源单元组中的线程并行实现,且进程之间无数据交互,包括:

对于所述前处理后球形二维网格区域,执行以下步骤:

将以南极和/或北极为中心的圆形区域剖分为一个所述核心子网格区域,该核心子网格区域位于所述前处理后球形二维网格区域内南纬45度以南和/或北纬45度以北;

对于所述前处理后球形二维网格区域的剩余部分和非所述前处理后球形二维网格区域,分别执行以下步骤:

二维网格区域拆分步骤:将所述二维网格区域对应的进程拆分为进程数量相近的两个进程小组;根据所述两个进程小组间的计算容量对比,将该二维网格区域剖分为两个互不重叠的第一区域,并使每个区域对应一个进程小组;

利用所述二维网格区域拆分步骤对每个所述第一区域进行逐层拆分,直到拆分后的区域只对应一个进程时为止,并将最终拆分后的区域作为子网格区域;

子网格区域拆分步骤:将该所述子网格区域对应的有效计算资源单元组拆分为线程数量相近的两个线程小组;根据所述两个线程小组间的计算容量对比,将该子网格区域剖分为两个互不重叠的第二区域,并使每个第二区域对应一个线程小组;

利用所述子网格区域拆分步骤对每个所述第二区域进行逐层拆分,直到拆分后的区域只对应一个线程时为止,并将最终拆分后的区域作为核心子网格区域。

优选的是,所述核心子网格区域为长宽比大致为1的区域;

所述核心子网格区域内的格点数不少于所述二维网格区域内格点总数和所述有效计算资源单元总数的比。

优选的是,上述二维网格图形的三角化确定方法还包括:在所述核心子网格区域三角化步骤之前的核心子网格区域扩展步骤以及在所述核心子网格区域三角化步骤之后的三角化结果并行一致性检查步骤,

所述核心子网格区域扩展步骤通过所有计算进程和各个所述计算进程内有效计算资源单元组中的线程同时并行实现,其中,根据预设的扩展系数分别将每个核心子网格区域扩展成为扩展子网格区域,

所述核心子网格区域三角化步骤通过所有计算进程和各个所述计算进程内有效计算资源单元组中的线程同时并行实现,其中,使用二维三角化算法分别对每个扩展子网格区域进行三角化,并将得到每个扩展子网格区域的多个三角化结果经三角化唯一解限定条件筛选,得到唯一扩展子网格区域三角化结果,

所述三角化结果并行一致性检查步骤通过所有计算进程和各个所述计算进程内有效计算资源单元组中的线程同时并行实现,其中,针对所述二维网格区域内每个重叠部分,在该重叠部分的每个扩展子网格区域三角化结果相同时,确定该重叠部分通过一致性检查,若所述二维网格区域内所有重叠部分都通过一致性检查,则确定所述扩展子网格区域三角化结果通过所述三角化结果并行一致性检查,否则扩大所述扩展系数并重新进行三角化结果并行一致性检查。

优选的是,所述核心子网格区域扩展步骤,包括:

以所述核心子网格区域的中心点为基准,根据预设的扩展系数将所述核心子网格区域扩展成为扩展子网格区域,以使相邻的扩展子网格区域间有重叠的区域。

优选的是,所述三角化结果并行一致性检查步骤还包括:在所有重叠部分中筛选出待检查重叠部分,所述待检查重叠部分与相邻的所述核心子网格区域间的公共边界有交叉;

在该三角化结果并行一致性检查步骤中,针对每个待检查重叠部分,在该待检查重叠部分的每个扩展子网格区域三角化结果相同时,确定该待检查重叠部分通过一致性检查,若所有待检查重叠部分都通过一致性检查,则确定所述扩展子网格区域三角化结果通过所述三角化结果并行一致性检查,否则扩大所述扩展系数并重新进行三角化结果并行一致性检查。

优选的是,在所述三角化结果合并步骤中,通过所有所述计算进程内有效计算资源单元组中的线程同时并行,进程之间有数据交互,将所有所述扩展子网格区域三角化结果合并,得到所述二维网格区域的三角化结果;

将该二维网格区域的三角化结果中的所述伪格点及与其相连的三角化连接线删除,以得到所述二维网格图形。

与现有技术相比,上述方案中的一个或多个实施例可以具有如下优点或有益效果:

本发明所提出的技术方案中,通过将二维网格区域按形状和边界类型分类进行三角化,使耦合器在针对各种二维网格区域进行处理时具备通用性。另外,通过将二维网格区域分配给多个进程及其线程并行进行三角化,以及各进程线程三角化结果间一致性检查,满足了确定二维网格图形的并行高效性以及一致性的技术要求,达到了显著提高确定二维网格图形的效率的技术效果。

附图说明

通过结合附图阅读下文示例性实施例的详细描述可更好地理解本公开的范围。其中所包括的附图是:

图1示出了根据本发明实施例的二维网格图形的三角化确定方法的流程示意图;

图2示出了边界不规则网格二维网格区域三角化过程及结果;

图3示出了核心子区域扩展成为扩展子区域示意图;以及

图4示出了三角化结果唯一解筛选结果对比。

具体实施方式

从下文提供的详细描述中,将显而易见本公开的其他应用领域。但是,应当理解,示例性实施例的详细描述仅用于说明性目的,因此,并非旨在必须限制本公开的范围。

耦合器是地球系统模式的关键模块之一,通过实现不同分量模式间、不同进程间、甚至同一分量模式间的耦合来构建耦合模式。其间的数据传递和数据插值是耦合器的最基本功能,其中数据插值实现了耦合变量在不同模式网格间的有效转换。现有绝大部分耦合器都具备了不同水平网格间的插值功能。由于模式的水平网格往往在积分过程中保持不变,耦合器中水平插值的实现往往分为两个阶段,即生成插值权重和在积分过程中反复使用插值权重进行插值计算,其中插值权重可以在模式运行前通过其他插值软件进行离线生成,现存的大部分耦合器支持插值系数的离线读入,例如scrip,esmf,yac和cor等,而部分耦合器也具备在线生成插值权重的功能。

通用性是耦合器的一个重要特点,大部分耦合器如oasis、cpl、mct和c-coupler等已被应用到了不同耦合模式中,实现了不同分量模式间的耦合。在过去,最常用的水平网格就是经纬网格,但随着模式的快速发展,出现了很多新型水平网格,例如高斯归约网格、三极网格、球面立方网格、正二十面体网格、阴阳网格、自适应网格等,其中有些网格甚至无网格结构。新型水平网格的不断出现给耦合器的通用性,尤其是任意两个水平网格间插值的通用性,带来了严峻挑战。为了克服这个问题,通常有两种可选方案。第一种方案是增量式地支持新网格,即当耦合器或插值软件不支持新型水平网格时,就相应修改耦合器或插值软件的源代码。第二种方案是采用通用方式来表示任意网格,并以此为基础实现插值权重的计算,这使得耦合器或插值软件的源代码可在模式网格的发展中基本保持不变。第一种方案会使得耦合器或插值软件的源代码变得越来越复杂,如果能找到网格的通用表示方式,那么第二种实现方案将更好。

一种通用网格表示方式可以通过如下方法达成:先将网格看成若干个散点(即只关注各网格点的水平坐标,不关注网格点间的位置关系(例如邻居关系等)),而进一步采用统一的网格化方法来建立格点间的位置关系。三角化,根据图中散点的位置把图划分为若干不重叠的三角形,是最为常用的网格化方法。因此,三角化的使用将有望提高耦合器插值的通用性。

尽管现有三角化算法的时间复杂度较低,例如delaunay三角化算法,该算法是最常用的三角化算法,目前业内较快的实现计算复杂度为o(nlogn),其中n表示网格点的个数,但三角化的开销也不可忽略,尤其是随着模式水平分辨率的不断提高,网格点逐渐增多,三角化的开销也会越来越大。计算节点、处理器核越来越多的现代高性能计算机给很多应用程序的加速运行带来了机会,当然这也包括三角化,程序需要编程为高效的并行版本以在高性能计算机上取得加速效果。mpi(消息传递接口)是一种被广泛使用的并行编程库,其既可以在不同计算节点之间,也可以在同一节点之间实现并行计算。openmp是一种被广泛使用的并行编程指令,其可以在同一节点内实现并行计算。包括地球系统模式在内的很多应用都从mpi和openmp混合并行模式中得到了更高的并行效率,其中mpi负责节点之间的并行,openmp负责同一节点之内的并行。现存的一些耦合器例如mct,oasis3-mct_3.0以及c-coupler2等都是作为共享库来运行耦合模式,其通常和分量模式共享计算机的处理器核心。假设并行三角化模块已经集成入这样的耦合器,如果分量模式采用mpi和openmp混合并行方法,而并行三角化模块只使用mpi并行,那么后者必然会浪费掉由openmp带来的并行加速效果。

像mct,cpl6/cpl7,oasis3-mct_3.0以及c-coupler2这样的当代耦合器都可以保证并行运行结果的一致性(二进制一致),即可以在不同并行设置下都保证输出的结果一致。并行一致性对于调试并行程序来说至关重要。若达不到并行一致性,我们会很难将合理误差和并行引入的错误区分开来。然而三角化的并行正有可能破坏这种稳定性。要实现三角化的并行化,需要先对网格区域进行分块,再独立对各个分块进行三角化,最后再将所有分块的三角化结果拼接合并。若不保证拼接处三角化结果的一致性,则在不同并行设置下,并行三角化算法可能产生不一致的结果,最终导致使用这种并行三角化算法的耦合器也无法保证不同并行设置下的结果一致。

因此,就三角化算法在耦合器中的应用来说,其至少需要同时具备三种特性,即通用性(能处理各种水平网格)、并行高效性(即具有高并行效率,应能同时支持进程级(mpi)和线程级(openmp)并行)和稳定性(特别是不同并行设置下三角化结果的完全一致性)。

基于此,本发明实施例提出了一种二维网格图形的三角化确定方法,旨在使地球系统模式耦合器在处理二维网格区域时可以同时具备通用性、并行高效性和稳定性。下面将对本发明的实施例进行详细阐述。

图1示出了根据本发明实施例的二维网格图形的三角化确定方法的流程示意图。如图1所示,本实施例的二维网格图形的三角化确定方法主要包括步骤s101至步骤s108。

在步骤s101的坐标获取步骤中,获取待处理的二维网格区域内所有格点的坐标。

在步骤s102的计算资源管理步骤中,根据二维网格区域内格点的数量,确定多个进程,以及每个进程中参与计算的线程。如果两个参与计算的线程是同一进程中的不同线程,则可以直接通过二者共享的内存空间进行通信,否则二者之间将通过进程调用来进行通信。

每个进程中参与计算的线程数量与未参与计算的线程数量相等。这些参与计算的线程构成其所在进程的有效计算资源单元组。共有进程数量的有效计算资源单元组参与二维网格区域的三角化计算。

在步骤s103的二维网格区域前处理步骤中,根据所述二维网格区域的边界和/或格点位置调整该二维网格区域内格点的数量及坐标,得到前处理后二维网格区域。该步骤通过多个有效计算资源单元组中的线程并行实现,且进程之间无数据交互。具体地:

当二维网格区域具有纬度方向边界时,判断该二维网格区域是否覆盖南极点和/或北极点。

若覆盖,且在所述二维网格区域的南极点和/或北极点处没有格点时,在所述二维网格区域的南极点和/或北极点处插入伪格点,以构成前处理后球形二维网格区域。

若覆盖,且在所述二维网格区域的南极点和/或北极点处有多个格点时,将这些格点的位置朝着赤道的方向调整,并在所述二维网格区域的南极点和/或北极点处插入伪格点,以构成前处理后球形二维网格区域。

若未覆盖,则在所述二维网格区域具有经度方向边界时,在所述二维网格区域的经度边界上等距离插入多个伪格点,以构成前处理后边界不规则网格二维网格区域。具体地,如图2所示,图2的a部分为一边界不规则网格二维网格区域,图2的b部分示出了采用现有技术对该边界不规则网格二维网格区域进行三角化后的结果。该三角化结果中的黑色粗线部分的三角形为伪三角化结果,然而这种伪三角化结果难以在现有技术的三角化结果中被删除。图2的c部分示出了应用本发明所提出的方法进行前处理后的边界不规则网格二维网格区域的三角化结果。该图中的空心圆点为在边界不规则网格二维网格区域的经度边界上等距离插入的多个伪格点,虚线为这些伪格点的三角化连线。这些伪格点及其三角化连线可以在最终的三角化结果中被删除,以得到如图2的d部分所示的保持原有不规则边界形状的不规则网格二维网格区域的三角化结果。

当所述二维网格区域在同一坐标下有多个格点时,标记这些格点,并取其中一点作为该坐标的格点参与核心子网格区域剖分步骤。

在步骤s104的核心子网格区域剖分步骤中,针对不同形状的所述前处理后二维网格区域,以不同的核心子网格区域剖分方法将所述二维网格区域剖分为多个互不重叠的核心子网格区域。该步骤通过多个有效计算资源单元组中的线程并行实现,且进程之间无数据交互。具体地:

对于所述前处理后球形二维网格区域,将以南极和/或北极为中心的圆形区域剖分为一个所述核心子网格区域。该核心子网格区域位于所述前处理后球形二维网格区域内南纬45度以南和/或北纬45度以北。

对于该前处理后球形二维网格区域的剩余部分和非前处理后球形二维网格区域,采用递归方式进行剖分。具体地,

对二维网格区域进行递归拆分。将待剖分二维网格区域对应的进程拆分为进程数量相近的两个进程小组;根据所述两个进程小组间的计算容量对比,将该二维网格区域剖分为两个互不重叠的第一区域,并使每个区域对应一个进程小组。

利用上述二维网格区域递归拆分方法对每个所述第一区域进行逐层拆分,直到拆分后的区域只对应一个进程时为止,并将最终拆分后的区域作为子网格区域。

对子网格区域进行递归拆分。将待剖分子网格区域对应的有效计算资源单元组拆分为线程数量相近的两个线程小组;根据所述两个线程小组间的计算容量对比,将该子网格区域剖分为两个互不重叠的第二区域,并使每个第二区域对应一个线程小组。

利用上述子网格区域递归拆分方法对每个所述第二区域进行逐层拆分,直到拆分后的区域只对应一个线程时为止,并将最终拆分后的区域作为核心子网格区域,由此建立有效计算资源单元间基于核心子网格区域的邻居关系。该核心子网格区域为长宽比大致为1的区域。

所有核心子网格区域所包括的二维区域网格的格点数不少于所述二维网格区域内格点总数和所述有效计算资源单元总数的比。

在步骤s105的核心子网格区域扩展步骤中,通过所有计算进程和各个所述计算进程内有效计算资源单元组中的线程同时并行,根据预设的扩展系数分别将每个核心子网格区域扩展成为扩展子网格区域。具体地,如图3所示,图3的a部分示出了由所述二维网格区域剖分得到的互不重叠的核心子网格区域,图中的实线为相邻的核心子网格区域间的公共边界。将各个核心子网格区域以其中心点为基准,根据预设的扩展系数将所述核心子网格区域扩展成为如图3的b部分所示的扩展子网格区域,以使相邻的扩展子网格区域间有重叠的区域。图3的b部分中的虚线为扩展子网格区域间边界。从图中可以看出,经过扩展后,相邻的扩展子网格区域间存在重叠的区域。

在步骤s106的核心子网格区域三角化步骤中,通过所有计算进程和各个所述计算进程内有效计算资源单元组中的线程同时并行,使用二维三角化算法分别对每个扩展子网格区域进行三角化。具体地,对于球面网格,先要对所述前处理后球形二维网格区域内的网格点进行投影,然后用投影后的二维坐标进行三角化。之后使用二维三角化算法,利用网格点的二维坐标进行二维网格区域三角化,得到每个扩展子网格区域的三角化结果。

当三角化结果存在多点共圆的情况时,二维三角化算法无法给出唯一合法解。因此,需通过设定三角化唯一解限定条件筛选出符合条件的三角化算法唯一解,作为扩展子网格区域三角化结果。如图4所示,图4的a部分和b部分为一组三角化结果,c部分和d部分为一组三角化结果。将三角化唯一解的限定条件设定为:对于共圆的四个点组成的两个三角形,要求最左点或最左下点(同时存在两个最左点的情况下)不能为这两个三角形的共享顶点。故图4的a部分和c部分不符合三角化唯一解限定条件,b部分和d部分符合三角化唯一解限定条件,b部分和d部分可以作为其所在扩展子网格区域的三角化结果输出。

在步骤s107的三角化结果并行一致性检查步骤中,通过所有进程和每个进程内的所有线程同时并行实现对所述二维网格区域三角化结果的并行一致性检查。具体地:

在所有重叠部分中筛选出待检查重叠部分,所述待检查重叠部分与相邻的所述核心子网格区域间的公共边界有交叉。针对每个待检查重叠部分,在该待检查重叠部分的每个扩展子网格区域三角化结果相同时,确定该待检查重叠部分通过一致性检查;若所有待检查重叠部分都通过一致性检查,则确定所述扩展子网格区域三角化结果通过所述三角化结果并行一致性检查,否则返回步骤s105,扩大所述扩展系数并重新进行三角化结果并行一致性检查。

在步骤s108的三角化结果合并步骤中,利用耦合器将所述二维网格区域内所有扩展子网格区域的三角化结果合并,得到所述二维网格三角化图形。具体地,在所述三角化结果合并步骤中,通过所有所述计算进程内有效计算资源单元组中的线程同时并行,进程之间有数据交互,将所有所述扩展子网格区域三角化结果合并,得到所述二维网格区域的三角化结果,并将该结果中的伪格点及与其相连的三角化连接线删除,以得到所述二维网格区域的二维网格图形。该二维网格图形可被写入文件,也可以在后续被直接使用。

本发明所提出的技术方案中,通过将二维网格区域按形状和边界类型分类进行三角化,使耦合器在针对各种二维网格区域进行处理时具备通用性。并通过将二维网格区域分配给多个进程及其线程,使其并行进行三角化,以及各进程线程三角化结果间一致性检查,满足了确定二维网格图形的并行高效性以及一致性的技术要求,达到了显著提高确定二维网格图形的效率的技术效果。

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

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