一种快速分割CFD计算网格的方法与流程

文档序号:12472299阅读:447来源:国知局
一种快速分割CFD计算网格的方法与流程

本发明属于计算流体力学技术领域,具体为一种快速分割CFD计算网格的方法,能够实现快速分割流场网格、高效提取流场指定区域流动信息的目的。



背景技术:

在计算流体力学(CFD)中,网格是进行流场数值模拟的基础,是将流动的计算区域离散成一系列空间分布点或者微元的集合。网格的空间拓扑结构可以分为结构网格和非结构网格两类,其中非结构网格因其具有更大的几何灵活性,对复杂外形良好的适应性等一系列有点,而受到了计算流体力学界的广泛重视,并且得到了迅速的发展和应用。二维非结构网格由三角形网格单元、四边形网格单元,以及有这两种基本元素构成的广义多边形网格单元构成;三维非结构网格由四面体单元、金字塔单元、三棱柱单元、四棱柱单元以及由这些基本元素组合构成的广义多面体网格单元中的一种或多种按照一定次序排列所构成。

近年来,随着计算流体力学的发展,需要解决越来越复杂的物理问题,网格规模随之越来越大,涉及的数据处理和存储量呈现巨额增加。CFD计算最终是需要计算程序来执行的,程序的并行化是提高计算机计算速度和处理能力、解决大型而复杂的计算问题的一种有效手段。在众多的并行机制中,基于MPI消息传递模式的并行计算因其可扩展性好、并行效率高等优点受到广泛青睐,但在CFD并行计算的前处理中就会涉及到棘手的网格分块问题,如何实现计算网格的快速分割,如何确保分块网格的所有单元空间上相对集中、能够形成一个单连通域,是提高并行计算效率、甚至是保证计算正确性的关键因素之一。

海量的计算网格对CFD后处理也提出了更高的要求,需要更强的计算资源以满足全部流动参数的分析处理,需要更大计算内存来适应全部计算域的流动显示。然而,在一般情况下,CFD后处理过程更注重近场的流动情况而忽略远场流动信息。针对CFD后处理中的这一特点,如何快速分割并提取所关注区域流场就成为了有效降低CFD后处理中降低计算量的有效技术手段之一。

目前,网格分割有手动分割和程序自动分割两种方式。其中手动分割存在工作量大,分割区域固化,难以实现自适应网络分割的目的;现有的程序自动分割方法主要是针对CFD前处理的需要,以满足提高并行计算效率、降低数据交换量为原则,但现有的程序自动分割方法不能实现在CFD后处理中按照需求提取所关注的流场网格目的。



技术实现要素:

为了实现CFD计算的网格快速分割、有效降低CFD流场后处理中的计算量,并能够根据需要提取任意指定区域网格信息的目的,本发明提出了一种快速分割CFD计算网格的方法。该方法不仅能够快速分割计算网格、降低计算流体力学中流场后处理计算量,还能够实现快速提取任意单块、多块指定区域的网格信息和流场信息。

本发明的技术方案为:

所述一种快速分割CFD计算网格的方法,其特征在于:包括以下步骤:

步骤1:根据需要分割出的网格区域,按照网格节点数据存储的顺序遍历整个网格区域中的所有网格节点,根据网格节点坐标判断其是否处于需要分割出的网格区域中,同时计算所有网格节点的步进量:

对于处于需要分割出的网格区域中的网格节点,其步进量为:i-n,其中i表示该网格节点为第i个被找到的处于需要分割出的网格区域中的网格节点,n表示该网格节点在整个网格区域的网格节点数据存储顺序编号;

对于不处于需要分割出的网格区域中的网络节点,其步进量为:N-(j+n-1),其中j表示该网格节点为第j个被找到的不处于需要分割出的网格区域中的网格节点,n表示该网格节点在整个网格区域的网格节点数据存储顺序编号,N表示整个网格区域中的网格节点总数;

步骤2:将整个网格区域中的所有网格节点按照步骤1得到的步进量移位,得到新的网格节点数据存储顺序;

步骤3:根据需要分割出的网格区域,按照网格单元数据存储的顺序遍历整个网格区域中的所有网格单元,根据以下规则判断网格单元是否处于需要分割出的网格区域中:网格单元中所有网格节点的步进量均不大于0,则该网格单元处于需要分割出的网格区域中,否则该网格单元不处于需要分割出的网格区域中;

同时计算所有网格单元的步进量:

对于处于需要分割出的网格区域中的网格单元,其步进量为:I-M,其中I表示该网格单元为第I个被找到的处于需要分割出的网格区域中的网格单元,M表示该网格单元在整个网格区域的网格单元数据存储顺序编号;

对于不处于需要分割出的网格区域中的网络单元,其步进量为:P-(J+M-1),其中J表示该网格单元为第J个被找到的不处于需要分割出的网格区域中的网格单元,M表示该网格单元在整个网格区域的网格单元数据存储顺序编号,P表示整个网格区域中的网格单元总数;

步骤4:将整个网格区域中的所有网格单元按照步骤3得到的步进量移位,得到新的网格单元数据存储顺序;

步骤5:从步骤2和步骤4得到的新的网格节点及网格单元数据存储中提取出处于需要分割出的网格区域中的网格节点及网格单元,组成新的CFD计算网格。

进一步的优选方案,所述一种快速分割CFD计算网格的方法,其特征在于:步骤5中,根据步骤1得到的处于需要分割出的网格区域中的网格节点个数,以及步骤3中得到的处于需要分割出的网格区域中的网格单元个数,从新的网格节点及网格单元数据存储中提取处于需要分割出的网格区域中的网格节点及网格单元。

所述一种快速分割CFD计算网格的方法,其特征在于:当存在多个需要分割出的网格区域时,通过以下步骤实现多个网格区域分割:

步骤1:根据需要分割出的多个网格区域,按照网格节点数据存储的顺序遍历整个网格区域中的所有网格节点,根据网格节点坐标判断其是否处于某个需要分割出的网格区域中,同时分别计算所有网格节点的步进量:

每个网格节点存在R个步进量,R为需要分割出的网格区域个数:

对于某一网格节点对应某个需要分割出的网格区域,其步进量计算为:

若该网格节点处于该需要分割出的网格区域中,则其步进量为:i-n,其中i表示该网格节点为第i个被找到的处于该需要分割出的网格区域中的网格节点,n表示该网格节点在整个网格区域的网格节点数据存储顺序编号;

若该网格节点不处于该需要分割出的网格区域中,则其步进量为:N-(j+n-1),其中j表示该网格节点为第j个被找到的不处于该需要分割出的网格区域中的网格节点,n表示该网格节点在整个网格区域的网格节点数据存储顺序编号,N表示整个网格区域中的网格节点总数;

步骤2:将整个网格区域中的所有网格节点按照步骤1得到的步进量分别移位,得到R个新的网格节点数据存储顺序;

步骤3:根据需要分割出的多个网格区域,按照网格单元数据存储的顺序遍历整个网格区域中的所有网格单元,根据以下规则判断某个网格单元是否处于某个需要分割出的网格区域中:该网格单元中所有网格节点对应该需要分割出的网格区域的步进量均不大于0,则该网格单元处于该需要分割出的网格区域中,否则该网格单元不处于该需要分割出的网格区域中;

每个网格单元存在R个步进量,对于某一网格单元对应某个需要分割出的网格区域,其步进量计算为:

若该网格单元处于该需要分割出的网格区域中,则步进量为:I-M,其中I表示该网格单元为第I个被找到的处于该需要分割出的网格区域中的网格单元,M表示该网格单元在整个网格区域的网格单元数据存储顺序编号;

若该网格单元不处于需要分割出的网格区域中,则其步进量为:P-(J+M-1),其中J表示该网格单元为第J个被找到的不处于该需要分割出的网格区域中的网格单元,M表示该网格单元在整个网格区域的网格单元数据存储顺序编号,P表示整个网格区域中的网格单元总数;

步骤4:将整个网格区域中的所有网格单元按照步骤3得到的步进量分别移位,得到R个新的网格单元数据存储顺序;

步骤5:从步骤2和步骤4得到的R个新的网格节点及网格单元数据存储中,分R次提取出同时处于某个需要分割出的网格区域中的网格节点及网格单元,组成共计R个新的CFD计算网格。

有益效果

本发明的有益效果是:根据网格节点的空间连接关系和数据结构的特点,采用重排序的方法,仅用一次数据遍历就可以实现空间网格的单个/多个指定区域的分割,快速提取流动参数,并保证所分割区块网格节点连接关系与原网格一致,所采用的计算方法计算量小,实用性强。

本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。

附图说明

本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:

图1是面网格单元元素示意图;其中,a为三角形网格单元,b为四边形网格单元。

图2是体网格单元元素示意图;其中,a为四面体网格单元,b为金字塔网格单元,c为三棱柱网格单元,d为四棱柱网格单元。

图3是曲面网格和体网格示意图。

图4是实现单块网格分割的原理示意图。

图5是实现多块网格同时分割的原理示意图。

图中:A表示网格节点,括号中数字代表该节点编号;C表示由节点组成的网格单元,括号中的数值表示该网格单元的编号。

具体实施方式

下面详细描述本发明的实施例,所述实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。

本发明的目的是实现CFD计算的网格快速分割、有效降低CFD流场后处理中的计算量,并能够根据需要提取任意指定区域网格信息。

为此,在本发明中,首先针对CFD非结构网格的数据格式和空间拓扑结构特点,根据网格节点与分块区域的空间位置关系,采用分类排序的方法,对每个网格节点的编号进行调整,将所需的节点向序列的前部移动并可做标记,不需要的节点向后移动,与此同时记录步进量和归类的网格节点个数,进而根据各节点编号的步进量,修改所有网格单元的节点编号,以确保网格空间拓扑结构在节点编号调整之后保持不变。然后根据网格单元内所有节点的步进量来判断该网格单元是否位于分块区域内,依照同样的分类排序的方法调整该网格单元编号,将所需单元向单元序列的前部移动,不需要的单元向后移动。在节点编号和网格单元编号调整、排序结束后分别提取新序列的网格节点和网格单元,从而达到分割网格的目的。

在分类排序的过程中,为了提高计算效率、降低内存开销,方法在判断当前节点或单元与指定区域空间位置关系之后,将位于指定区域内的网格节点或单元按照被搜索到的顺序从前向后排列并记录个数,将位于指定区域之外的网格节点或单元按照被搜索到的顺序从后向前排列,这样仅用一次数据遍历就可实现网格的分割提取,从而达到高效网格分割的目的。在判断网格节点或网格单元与指定区域空间位置关系的过程中,将当前网格节点或网格单元的空间位置与多个指定的空间区域逐个进行比较,形成多个新的节点序列和网格单元序列,提取各序列的前部数据,从而实现了多块指定区域网格信息的同时提取。

依据上述原理性说明,本发明的具体步骤为:

对于从整个网格区域分割一个网格区域时,采用以下步骤:

步骤1:根据需要分割出的网格区域,按照网格节点数据存储的顺序遍历整个网格区域中的所有网格节点,根据网格节点坐标判断其是否处于需要分割出的网格区域中,同时计算所有网格节点的步进量:

对于处于需要分割出的网格区域中的网格节点,其步进量为:i-n,其中i表示该网格节点为第i个被找到的处于需要分割出的网格区域中的网格节点,n表示该网格节点在整个网格区域的网格节点数据存储顺序编号;

对于不处于需要分割出的网格区域中的网络节点,其步进量为:N-(j+n-1),其中j表示该网格节点为第j个被找到的不处于需要分割出的网格区域中的网格节点,n表示该网格节点在整个网格区域的网格节点数据存储顺序编号,N表示整个网格区域中的网格节点总数;

步骤2:将整个网格区域中的所有网格节点按照步骤1得到的步进量移位,得到新的网格节点数据存储顺序;

步骤3:根据需要分割出的网格区域,按照网格单元数据存储的顺序遍历整个网格区域中的所有网格单元,根据以下规则判断网格单元是否处于需要分割出的网格区域中:网格单元中所有网格节点的步进量均不大于0,则该网格单元处于需要分割出的网格区域中,否则该网格单元不处于需要分割出的网格区域中;

同时计算所有网格单元的步进量:

对于处于需要分割出的网格区域中的网格单元,其步进量为:I-M,其中I表示该网格单元为第I个被找到的处于需要分割出的网格区域中的网格单元,M表示该网格单元在整个网格区域的网格单元数据存储顺序编号;

对于不处于需要分割出的网格区域中的网络单元,其步进量为:P-(J+M-1),其中J表示该网格单元为第J个被找到的不处于需要分割出的网格区域中的网格单元,M表示该网格单元在整个网格区域的网格单元数据存储顺序编号,P表示整个网格区域中的网格单元总数;

步骤4:将整个网格区域中的所有网格单元按照步骤3得到的步进量移位,得到新的网格单元数据存储顺序;

步骤5:从步骤2和步骤4得到的新的网格节点及网格单元数据存储中提取出处于需要分割出的网格区域中的网格节点及网格单元,组成新的CFD计算网格。

当整个网格区域中存在多个需要分割出的网格区域时,通过以下步骤实现多个网格区域分割:

步骤1:根据需要分割出的多个网格区域,按照网格节点数据存储的顺序遍历整个网格区域中的所有网格节点,根据网格节点坐标判断其是否处于某个需要分割出的网格区域中,同时分别计算所有网格节点的步进量:

每个网格节点存在R个步进量,R为需要分割出的网格区域个数:

对于某一网格节点对应某个需要分割出的网格区域,其步进量计算为:

若该网格节点处于该需要分割出的网格区域中,则其步进量为:i-n,其中i表示该网格节点为第i个被找到的处于该需要分割出的网格区域中的网格节点,n表示该网格节点在整个网格区域的网格节点数据存储顺序编号;

若该网格节点不处于该需要分割出的网格区域中,则其步进量为:N-(j+n-1),其中j表示该网格节点为第j个被找到的不处于该需要分割出的网格区域中的网格节点,n表示该网格节点在整个网格区域的网格节点数据存储顺序编号,N表示整个网格区域中的网格节点总数;

步骤2:将整个网格区域中的所有网格节点按照步骤1得到的步进量分别移位,得到R个新的网格节点数据存储顺序;

步骤3:根据需要分割出的多个网格区域,按照网格单元数据存储的顺序遍历整个网格区域中的所有网格单元,根据以下规则判断某个网格单元是否处于某个需要分割出的网格区域中:该网格单元中所有网格节点对应该需要分割出的网格区域的步进量均不大于0,则该网格单元处于该需要分割出的网格区域中,否则该网格单元不处于该需要分割出的网格区域中;

每个网格单元存在R个步进量,对于某一网格单元对应某个需要分割出的网格区域,其步进量计算为:

若该网格单元处于该需要分割出的网格区域中,则步进量为:I-M,其中I表示该网格单元为第I个被找到的处于该需要分割出的网格区域中的网格单元,M表示该网格单元在整个网格区域的网格单元数据存储顺序编号;

若该网格单元不处于需要分割出的网格区域中,则其步进量为:P-(J+M-1),其中J表示该网格单元为第J个被找到的不处于该需要分割出的网格区域中的网格单元,M表示该网格单元在整个网格区域的网格单元数据存储顺序编号,P表示整个网格区域中的网格单元总数;

步骤4:将整个网格区域中的所有网格单元按照步骤3得到的步进量分别移位,得到R个新的网格单元数据存储顺序;

步骤5:从步骤2和步骤4得到的R个新的网格节点及网格单元数据存储中,分R次提取出同时处于某个需要分割出的网格区域中的网格节点及网格单元,组成共计R个新的CFD计算网格。

根据上述步骤,下面结合附图做进一步描述:

在图1中,网格节点A(1)、A(2)和A(3)串联组成三角形面网格单元C(1);网格节点A(1)、A(2)、A(3)与A(4)串联组成四边形面网格单元C(2)。网格节点的链接关系由统一的规则指定,一般为顺时针或者逆时针逐次首位相连接。

在图2中,网格节点A(1)、A(2)、A(3)、A(4)相连组成四面体的体网格单元C(1);网格节点A(1)、A(2)、A(3)、A(4)、A(5)相连组成金字塔形体网格单元C(2);网格节点A(1)、A(2)、A(3)、A(4)、A(5)、A(6)相连组成三棱柱形体网格单元C(3);网格节点A(1)、A(2)、A(3)、A(4)、A(5)、A(6)、A(7)、A(8)相连组成四棱柱形体网格单元C(4)。网格节点的连接关系由统一的规则指定,以确定将节点首尾相连组成对应的体网格单元。

在图3中,曲面网格域由面网格基本元素三角形单元、四边形单元以及由基本元素组合构成的广义多边形面网格单元中的一种或多种种按照一定次序排列所构成;体网格域由体网格基本元素四面体、金字塔、三棱柱、四棱柱单元以及由这些基本元素组合构成的广义多面体网格单元中的一种或多种种按照一定次序排列所构成。网格域由两部分构成,首先是多个空间分布的点以及位于该点处的流动参数,其次是规定空间点之间相互连接关系的网格单元信息。

图4为单块网格分割原理示意图。首先,对网格节点进行重新排序并提取符合条件的节点,如图a).所示,遍历所有网格节点,利用节点坐标逐个判断当前节点与指定区域的相对位置关系,若该节点位于所指定的区域内则标记该点(如图中染色),否则不做标记,并记录符合条件点的个数N1,与此同时根据标记信息将节点重新排序,把被标记的点放在最前端,把未作标记的点放在最末位,并记录每个点相对于原位置的步进量(图中A(1)点将被放在最末端,则其步进量为:N-1;A(2)点将被置于首位,则其步进量为-1),如此逐次进行下去,待所有节点被一遍顺序搜索完成之后,节点的重排序即已完成,前N1个节点便是位于指定区域内所有的点。其次,在保留原网格节点之间的相互连接关系的前提下,调整网格单元信息及其排列顺序,如图b).所示,遍历所有网格单元,根据之前各节点排序的步进量逐个修改当前网格单元中每个节点编号(将每个节点编号加上它对应的步进量),然后判断该网格单元与指定区域的相对位置关系,若当前网格单元内所有节点均被标记(在节点排序中的标记)则该网格单元位于所指定的区域内,并标记该网格单元、记录符合条件的网格单元个数M1,否则不做标记,与此同时根据标记信息将网格单元重新排序,把被标记的点放在最前端,把未作标记的点放在最末位,这样逐个进行下去,待所有网格单元被一遍顺序搜索完成之后,网格单元的重排序即已完成,前M1个网格单元便是位于指定区域内所有的网格单元。若在调整网格单元的同时记录每个网格单元的步进量,则可参照同样的思路实现对网格单元的邻居进行同样的排序,进而可以在保留网格相邻关系的前提下提取分块网格单元的邻居信息。

图5为多块网格同时进行分割原理示意图(图中仅展示了两块网格的分割)。首先,对网格节点重新排序分别提取位于指定区域内的网格节点,如图a).所示,遍历所有网格节点,根据当前网格节点坐标与每个分块区域的边界Ω1,Ω2,Ω3,…的空间位置关系,来对该节点分别进行标记相对位置、记录符合条件节点的个数(N1,N2,N3,…)和对应节点的步进量,并分别重新排序,标记、记录及排序的思路与方法与单块网格分割相同,待所有节点被一遍顺序搜索完成之后,符合各分割区域约束的节点的排序即已完成,各序列对应的前N1、N2、N3…个节点便是位于该指定区域内所有的点。其次,调整网格单元信息及其排列顺序,如图b).所示,遍历所有网格单元,根据各节点步进量进行逐个修改,然后判断该网格单元与各指定区域的相对位置关系,若当前网格单元位于某指定的区域(Ωi)内,则对该网格单元做相应的标记、分别记录符合条件的网格单元个数Mi,否则不做标记,与此同时根据标记信息将网格单元重新排序,待所有网格单元被一遍顺序搜索完成之后,网格单元的重排序即已完成,每个序列的前Mi个网格单元便是位于指定区域(Ωi)内所有的网格单元。

尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在不脱离本发明的原理和宗旨的情况下在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。

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