一种结构网格的分区方法转让专利

申请号 : CN202011555519.8

文献号 : CN112560366B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈勇李玉栋姚向红袁强吴运刚谢伟明胥頔殷可为刘嘉玮叶家伟

申请人 : 中国空气动力研究与发展中心设备设计及测试技术研究所

摘要 :

本发明适用于CFD仿真技术领域,提供了一种结构网格的分区方法,该方法包括如下步骤:计算每个进程承担的平均网格量;将网格量最大的网格块作为母块,对母块进行分区,形成第一子块和第二子块;对母块中的物理边界进行投影;对母块中的内边界进行投影,并更新关联块的内边界与母块的对应关系;重复上述步骤,当分区后的所有的第一子块和第二子块的网格数量均不大于每个进程承担的平均网格量时,实现结构网格的自动分区。依据本发明提供的结构网格的分区方法,可使每个网格块的网格量均不大于每个进程承担的平均网格量,据此开展CFD的并行数值仿真时,能够使每个进程承担的任务量近似一致,使并行效率最大化。

权利要求 :

1.一种结构网格的分区方法,其特征在于,包括如下步骤:步骤S100:计算每个进程承担的平均网格量,其中,所述每个进程承担的平均网格量=结构网格总量/进程数;

步骤S200:在结构网格的网格块中,搜索大于所述每个进程承担的平均网格量的网格块,将网格量最大的网格块作为母块,对母块进行分区,形成第一子块和第二子块,将第一子块和第二子块之间的边界作为新增内边界,将新增内边界中的其中一个非分区方向上的网格节点编号取负,其中,将母块的网格数最多的方向作为分区方向;记结构网格的网格块的总数为n0,被分区的母块的编号为n,则将第一子块的编号同样记为n,而将第二子块的编号记为n0+1;

步骤S300:对母块中的物理边界进行投影;

步骤S400:对母块中的内边界进行投影,并更新关联块的内边界与母块的对应关系;所述内边界包括第一内边界和第二内边界,其中,第一内边界为母块中的位于分区方向的面上的内边界,第二内边界为母块中的位于非分区方向的内边界;其中步骤S400包括如下步骤:步骤S410:投影第一内边界,步骤S420:投影第二内边界;

步骤S500:重复步骤S100‑步骤S400,当分区后的所有的第一子块和第二子块的网格数量均不大于每个进程承担的平均网格量时,实现结构网格的自动分区。

2.如权利要求1所述的一种结构网格的分区方法,其特征在于,所述物理边界包括第一物理边界和第二物理边界,其中,第一物理边界为母块中的位于分区方向的面上的物理边界,第二物理边界为母块中的位于非分区方向的面上的物理边界,所述步骤S300包括如下步骤:

步骤S310:投影第一物理边界,其中,将位于第一子块上的第一物理边界投影到第一子块上,将位于第二子块上的第一物理边界投影到第二子块上;

步骤S320:投影第二物理边界,其中,当第二物理边界位于第一子块上时,将第二物理边界投影到第一子块上,当第二物理边界位于第二子块上时,将第二物理边界投影到第二子块上,当第二物理边界同时位于第一子块上和第二子块上时,将位于第一子块上的第二物理边界投影到第一子块上,将位于第二子块上的第二物理边界投影到第二子块上。

3.如权利要求1所述的一种结构网格的分区方法,其特征在于,所述步骤S410包括如下步骤:

步骤S411:当关联块和母块的编号不同、且第一内边界位于第一子块上时,将第一内边界投影到第一子块上,并将关联块的内边界与母块的对应关系,变更为第一子块与关联块的内边界的对应关系;

步骤S412:当关联块和母块的编号不同、且第一内边界位于第二子块上时,将第一内边界投影到第二子块上,并将关联块的内边界与母块的对应关系,变更为第二子块与关联块的内边界的对应关系;

步骤S413:当关联块和母块的编号相同时,将第一内边界投影到第一子块上,将关联块的内边界投影到第二子块上,并将关联块的内边界与母块的对应关系,变更为第一子块与第二子块的内边界的对应关系。

4.如权利要求1所述的一种结构网格的分区方法,其特征在于,所述步骤S420包括如下步骤:

步骤S421:当第二内边界位于第一子块上时,将第二内边界投影到第一子块上;

步骤S422:当第二内边界位于第二子块上时,将第二内边界投影到第二子块上;

步骤S423:当第二内边界同时位于第一子块和第二子块上时,第二内边界包括位于第一子块上的第二内边界第一段和位于第二子块上的第二内边界第二段,关联块的内边界包括位于第一子块侧的第一关联内边界和位于第二子块侧的第二关联内边界;将位于第二内边界第一段投影到第一子块上,将位于第二内边界第二段投影到第二子块上。

5.如权利要求4所述的一种结构网格的分区方法,其特征在于,所述步骤S421中:当关联块和母块的编号不同时,将关联块的内边界与母块的对应关系,变更为第一子块与关联块的内边界的对应关系;当关联块和母块的编号相同时,将关联块的内边界与母块的对应关系,变更为第一子块的两个内边界的对应关系。

6.如权利要求4所述的一种结构网格的分区方法,其特征在于,所述步骤S422中:当关联块和母块的编号不同时,将关联块的内边界与母块的对应关系,变更为第二子块与关联块的内边界的对应关系;当关联块和母块的编号相同时,将关联块的内边界与母块的对应关系,变更为第二子块的两个内边界的对应关系。

7.如权利要求4所述的一种结构网格的分区方法,其特征在于,所述步骤S423中:当关联块和母块的编号不同时,将第一关联内边界与母块的对应关系,变更为第一子块与第一关联内边界的对应关系,将第二关联内边界与母块的对应关系,变更为第二子块与第二关联内边界的对应关系。

8.如权利要求4所述的一种结构网格的分区方法,其特征在于,所述步骤S423中:当关联块和母块的编号相同时,将第一关联内边界与母块的对应关系,变更为第一子块的两个内边界的对应关系,将第二关联内边界与母块的对应关系,变更为第二子块的两个内边界的对应关系。

说明书 :

一种结构网格的分区方法

技术领域

[0001] 本发明属于CFD仿真技术领域,尤其涉及一种结构网格的分区方法。

背景技术

[0002] CFD是除风洞试验、飞行试验之外,研究飞机、导弹等空气动力学问题的三大手段之一,并随着CFD软件与计算机硬件等能力的显著提升,有逐渐取代或者部分取代风洞试
验、飞行试验的趋势。由于计算机单核处理器的能力是有限的,难于用于开展上千万网格的
CFD大型数值仿真,因此,CFD并行数值仿真成为必然的选择。CFD并行数值仿真把仿真任务
分配到多个进程上,由各个进程协同完成CFD数值仿真工作。理论上,随着进程数的增加,网
格量可以无限制地增加,因此,并行仿真用于开展上亿甚至上百亿网格的CFD数值仿真都不
是问题,并据此可以为复杂外形飞行器提供更为精细的流场结果。
[0003] CFD并行数值仿真需要在事前进行任务分配,而且需要均衡分配任务,即每个进程承担的任务量近似一致,以最大化并行效率。对于结构网格而言,任务分配的前提是把网格
分成多个网格块,网格块的总数需要大于总的进程数,然后再把这些网格块均衡分配到各
个进程上。
[0004] 现有技术中,可以采用商业软件对结构网格进行分区,同时输出相应的边界信息文件,或者采用编程方法实现网格块的生成、边界信息文件的产生,在网格块数不多的情况
下,相比而言,采用商业软件进行结构网格分区的难度不大,效率也较高。但是,当所需的结
构网格块数较多,比如采用上万甚至上十万的进程数开展CFD并行仿真时,由于网格块数必
须超过进程数,采用上述的商业软件来对结构网格分区就非常困难,甚至无法实现。
[0005] 因此,急需提出一种结构网格的分区方法,以实现网格块数过多时的自动分区。

发明内容

[0006] 本发明的目的在于提供一种结构网格的分区方法,旨在最大化并行效率。
[0007] 本发明提供了一种结构网格的分区方法,其包括如下步骤:
[0008] 步骤S100:计算每个进程承担的平均网格量,其中,所述每个进程承担的平均网格量=结构网格总量/进程数;
[0009] 步骤S200:在结构网格的网格块中,搜索大于所述每个进程承担的平均网格量的网格块,将网格量最大的网格块作为母块,对母块进行分区,形成第一子块和第二子块,将
第一子块和第二子块之间的边界作为新增内边界,其中,将母块的网格数最多的方向作为
分区方向;记结构网格的网格块的总数为n0,被分区的母块的编号为n,则将第一子块的编
号同样记为n,而将第二子块的编号记为n0+1;
[0010] 步骤S300:对母块中的物理边界进行投影;
[0011] 步骤S400:对母块中的内边界进行投影,并更新关联块的内边界与母块的对应关系;
[0012] 步骤S500:重复步骤S100‑步骤S400,当分区后的所有的第一子块和第二子块的网格数量均不大于每个进程承担的平均网格量时,实现结构网格的自动分区。
[0013] 进一步地,所述物理边界包括第一物理边界和第二物理边界,其中,第一物理边界为母块中的位于分区方向的面上的物理边界,第二物理边界为母块中的位于非分区方向的
面上的物理边界,所述步骤S300包括如下步骤:
[0014] 步骤S310:投影第一物理边界,其中,将位于第一子块上的第一物理边界投影到第一子块上,将位于第二子块上的第一物理边界投影到第二子块上;
[0015] 步骤S320:投影第二物理边界,其中,当第二物理边界位于第一子块上时,将第二物理边界投影到第一子块上,当第二物理边界位于第二子块上时,将第二物理边界投影到
第二子块上,当第二物理边界同时位于第一子块上和第二子块上时,将位于第一子块上的
第二物理边界投影到第一子块上,将位于第二子块上的第二物理边界投影到第二子块上。
[0016] 进一步地,所述内边界包括第一内边界和第二内边界,其中,第一内边界为母块中的位于分区方向的面上的内边界,第二内边界为母块中的位于非分区方向的内边界,所述
步骤S400包括如下步骤:
[0017] 步骤S410:投影第一内边界;
[0018] 步骤S420:投影第二内边界。
[0019] 进一步地,所述步骤S410包括如下步骤:
[0020] 步骤S411:当关联块和母块的编号不同、且第一内边界位于第一子块上时,将第一内边界投影到第一子块上,并将关联块的内边界与母块的对应关系,变更为第一子块与关
联块的内边界的对应关系;
[0021] 步骤S412:当关联块和母块的编号不同、且第一内边界位于第二子块上时,将第一内边界投影到第二子块上,并将关联块的内边界与母块的对应关系,变更为第二子块与关
联块的内边界的对应关系;
[0022] 步骤S413:当关联块和母块的编号相同时,将第一内边界投影到第一子块上,将关联块的内边界投影到第二子块上,并将关联块的内边界与母块的对应关系,变更为第一子
块与第二子块的内边界的对应关系。
[0023] 进一步地,所述步骤S420包括如下步骤:
[0024] 步骤S421:当第二内边界位于第一子块上时,将第二内边界投影到第一子块上;
[0025] 步骤S422:当第二内边界位于第二子块上时,将第二内边界投影到第二子块上;
[0026] 步骤S423:当第二内边界同时位于第一子块和第二子块上时,第二内边界包括位于第一子块上的第二内边界第一段和位于第二子块上的第二内边界第二段,关联块的内边
界包括位于第一子块侧的第一关联内边界和位于第二子块侧的第二关联内边界;将位于第
二内边界第一段投影到第一子块上,将位于第二内边界第二段投影到第二子块上。
[0027] 进一步地,所述步骤S421中:当关联块和母块的编号不同时,将关联块的内边界与母块的对应关系,变更为第一子块与关联块的内边界的对应关系;当关联块和母块的编号
相同时,将关联块的内边界与母块的对应关系,变更为第一子块的两个内边界的对应关系。
[0028] 进一步地,所述步骤S422中:当关联块和母块的编号不同时,将关联块的内边界与母块的对应关系,变更为第二子块与关联块的内边界的对应关系;当关联块和母块的编号
相同时,将关联块的内边界与母块的对应关系,变更为第二子块的两个内边界的对应关系。
[0029] 进一步地,所述步骤S423中:当关联块和母块的编号不同时,将第一关联内边界与母块的对应关系,变更为第一子块与第一关联内边界的对应关系,将第二关联内边界与母
块的对应关系,变更为第二子块与第二关联内边界的对应关系。
[0030] 进一步地,所述步骤S423中:当关联块和母块的编号相同时,将第一关联内边界与母块的对应关系,变更为第一子块的两个内边界的对应关系,将第二关联内边界与母块的
对应关系,变更为第二子块的两个内边界的对应关系。
[0031] 进一步地,将新增内边界中的其中一个非分区方向上的网格节点编号取负。
[0032] 本发明相对于现有技术的技术效果是:
[0033] 1.本发明中,每一次分区对网格量最大的网格块进行处理,而且还对母块中的物理边界、母块中的内边界进行了处理,并更新关联块的内边界与母块的对应关系,得到最终
的结构网格以及每个网格块相应的物理边界与内边界信息;当把最终的结构网格分配到各
个进程上,每个网格块的网格量均不大于每个进程承担的平均网格量,据此开展CFD的并行
数值仿真时,能够使每个进程承担的任务量近似一致,使并行效率最大化。
[0034] 2.本发明中还具体给出了物理边界和内边界的处理方法,在实现分区的同时,还能根据网格块的自身特性,自动地对物理边界和内边界进行处理。

附图说明

[0035] 为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的
一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这
些附图获得其他的附图。
[0036] 图1是本发明实施例提供的一种结构网格的分区方法的示意图;
[0037] 图2是本发明实施例中的分区前的母块的示意图;
[0038] 图3是本发明实施例中的分区后的母块的示意图;
[0039] 图4是本发明实施例中的母块与关联块的示意图一;
[0040] 图5是本发明实施例中的母块与关联块的示意图二;
[0041] 图6是本发明实施例中的母块与关联块的示意图三;
[0042] 图7是本发明实施例中的母块与关联块的示意图四;
[0043] 图8是本发明实施例中的不同进程下的迭代残差随迭代步数的衰减情况示意图;
[0044] 图9是本发明实施例中的进程数IP=1时的网格分区和流场马赫数分布情况;
[0045] 图10是本发明实施例中的进程数IP=5时的网格分区和流场马赫数分布情况;
[0046] 图11是本发明实施例中的进程数IP=10时的网格分区和流场马赫数分布情况;
[0047] 图12是本发明实施例中的进程数IP=20时的网格分区和流场马赫数分布情况。

具体实施方式

[0048] 在下文中将参考附图对本发明的各方面进行更充分的描述。然而,本发明可以具体化成许多不同形式且不应解释为局限于贯穿本发明所呈现的任何特定结构或功能。相反
地,提供这些方面将使得本发明周全且完整,并且本发明将给本领域技术人员充分地传达
本发明的范围。基于本文所教导的内容,本领域的技术人员应意识到,无论是单独还是结合
本发明的任何其它方面实现本文所公开的任何方面,本发明的范围旨在涵盖本文中所公开
的任何方面。例如,可以使用本文所提出任意数量的装置或者执行方法来实现。另外,除了
本文所提出本发明的多个方面之外,本发明的范围更旨在涵盖使用其它结构、功能或结构
和功能来实现的装置或方法。应可理解,其可通过权利要求的一或多个元件具体化本文所
公开的任何方面。
[0049] 在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在
或添加一个或多个其他特征、步骤、操作或部件。
[0050] 在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的
含义,而不应以理想化或过于刻板的方式来解释。
[0051] 对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
[0052] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。
[0053] 如图1所示为本发明实施例提供的一种结构网格的分区方法的示意图,本发明实施例的一种结构网格的分区方法包括如下步骤:
[0054] 步骤S100:计算每个进程承担的平均网格量,其中,所述每个进程承担的平均网格量=结构网格总量/进程数;
[0055] 例如,当结构网格总量为35865个时,如果进程数为5,那么每个进程承担的平均网格量=35865/5=7173。
[0056] 步骤S200:在结构网格的网格块中,搜索大于所述每个进程承担的平均网格量的网格块,将网格量最大的网格块作为母块,对母块进行分区,形成第一子块和第二子块,将
第一子块和第二子块之间的边界作为新增内边界,其中,将母块的网格数最多的方向作为
分区方向;记结构网格的网格块的总数为n0,被分区的母块的编号为n,则将第一子块的编
号同样记为n,而将第二子块的编号记为n0+1;
[0057] 同样以上述例子举例,当计算出每个进程承担的平均网格量为7173后,搜索所有的网格量大于7173的网格块,假如最大网格块的网格量为8142,此时则将最大网格块进行
分区,形成第一子块和第二子块,以使第一子块和第二子块的网格量均小于平均网格量
7173,以使每个进程承担的任务量近似一致,以最大化并行效率;
[0058] 为了进一步说明分区的含义,以图2进行示例说明,结构网格的网格块的总数为n0,网格块ABCDEFGH作为母块,其编号为n,该母块在i方向上的分布为is→ie,在j方向上的
分布为js→ie,在k方向上的分布为ks→ke,为了表述方便,将网格块ABCDEFGH表述为(is…
ie,js…je,ks…ke),此时,如果要对网格块ABCDEFGH进行分区,则首先判断哪个方向上的
网格数最多,以图2中为例,(ie‑is)>(je‑js),(ie‑is)>(ke‑ks),因此,网格块ABCDEFGH在i
方向上的网格数最多,在i方向上对网格块ABCDEFGH进行分区;
[0059] 为进一步使每个进程承担的任务量近似一致,在分区时可以采用均分的思想,如图3所示,利用分界面OPRQ将网格块ABCDEFGH均分,分界面OPRQ即为在i=ic所在的网格面,
其中,ic=(is+ie)/2,在i方向上对网格块ABCDEFGH进行均分分区后,形成网格块AOQDEPRH
和网格块OBCQPFGR,其中,网格块AOQDEPRH为第一子块,网格块OBCQPFGR为第一子块,此时,
第一子块和第二子块的网格量约为网格块ABCDEFGH的网格量的一半;另外,还需要为网格
块AOQDEPRH和网格块OBCQPFGR赋予编号,此处网格块AOQDEPRH将继承网格块ABCDEFGH的编
号n,而网格块OBCQPFGR的编号为n0+1。
[0060] 步骤S300:对母块中的物理边界进行投影;
[0061] 物理边界包括固壁、对称、远场、入流/出流、奇性轴、外插等边界,物理边界与母块的临近网格块的边界之间不存在任何关系。
[0062] 步骤S400:对母块中的内边界进行投影,并更新关联块的内边界与母块的对应关系;
[0063] 内边界是网格块与网格块之间的边界,这种内边界不仅需要把母块的内边界依据情况投影到第一子块和/或第二子块上,而且与之关联的关联块的内边界也要进行相应处
理。
[0064] 步骤S500:重复步骤S100‑步骤S400,当分区后的所有的第一子块和第二子块的网格数量均不大于每个进程承担的平均网格量时,得到最终的结构网格。
[0065] 本发明实施例中的结构网格的分区方法,在商业软件生成的结构网格与边界信息文件基础上,每一次分区对网格量最大的网格块进行处理,而且还对母块中的物理边界、母
块中的内边界进行了处理,并更新关联块的内边界与母块的对应关系,得到最终的结构网
格以及每个网格块相应的物理边界与内边界信息;当把最终的结构网格分配到各个进程
上,每个网格块的网格量均不大于每个进程承担的平均网格量,据此开展CFD的并行数值仿
真时,能够使每个进程承担的任务量近似一致,使并行效率最大化。
[0066] 进一步地,所述物理边界包括第一物理边界和第二物理边界,其中,第一物理边界为母块中的位于分区方向的面上的物理边界,第二物理边界为母块中的位于非分区方向的
面上的物理边界;
[0067] 以图3所示为例,物理边界包括i=is、i=ie、j=js、j=je、k=ks、k=ke六个面上的物理边界,由于图3中的分区方向为i方向,因此,将i=is、i=ie面上的物理边界定义为
第一物理边界,将j=js、j=je、k=ks、k=ke四个面上的物理边界定义为第二物理边界;
[0068] 所述步骤S300包括如下步骤:
[0069] 步骤S310:投影第一物理边界,其中,将位于第一子块上的第一物理边界投影到第一子块上,将位于第二子块上的第一物理边界投影到第二子块上;
[0070] 同样以图3进行说明:
[0071] i=is面上的物理边界位于网格块AOQDEPRH(即第一子块)的网格面AEHD上,因此,将i=is面上的物理边界投影到网格块AOQDEPRH(即第一子块)上,假如i=is面上的某一物
理边界表示为(is…is,jn1…jn2,kn1…kn2),则投影后的物理边界仍然为(is…is,jn1…
jn2,kn1…kn2);
[0072] i=ie面上的物理边界位于网格块OBCQPFGR(即第二子块)的网格面BFGC上,因此,将i=ie面上的物理边界投影到网格块网格块OBCQPFGR(即第二子块)上,假如i=ie面上的
某一物理边界表示为(ie…ie,jn1…jn2,kn1…kn2),则投影后的物理边界仍然为(ie…ie,
jn1…jn2,kn1…kn2);
[0073] 步骤S320:投影第二物理边界,其中,当第二物理边界位于第一子块上时,将第二物理边界投影到第一子块上,当第二物理边界位于第二子块上时,将第二物理边界投影到
第二子块上,当第二物理边界同时位于第一子块上和第二子块上时,将位于第一子块上的
第二物理边界投影到第一子块上,将位于第二子块上的第二物理边界投影到第二子块上。
[0074] 同样以图3进行说明:
[0075] j=js面上的物理边界可能仅位于网格块AOQDEPRH(即第一子块)的网格面DHRQ上,也可能仅位于网格块OBCQPFGR(即第二子块)的网格面CGRQ上,还可能同时位于网格块
AOQDEPRH(即第一子块)的网格面DHRQ上和网格块OBCQPFGR(即第二子块)的网格面CGRQ上,
因此,需要分情况对j=js面上的物理边界进行投影;
[0076] 关于j=je、k=ks、k=ke面上的物理边界的投影,与j=js面上的物理边界具有类似情况;
[0077] 关于如何判断j=js、j=je、k=ks、k=ke面上的物理边界到底是仅位于第一子块和/或第二子块上,以下以某一第二物理边界(in1…in2,jn1…jn2,kn1…kn2)进行示例性
说明:
[0078] 当max(in1,in2)≤ic时,说明第二物理边界位于第一子块上,此时,第二物理边界(in1…in2,jn1…jn2,kn1…kn2)仅投影到第一子块上,仍然为(in1…in2,jn1…jn2,kn1…
kn2);
[0079] 当max(in1,in2)>ic时,说明第二物理边界位于第二子块上,此时,第二物理边界(in1…in2,jn1…jn2,kn1…kn2)仅投影到第二子块上,仍然为(in1…in2,jn1…jn2,kn1…
kn2);
[0080] 当min(in1,in2)块上,第二物理边界中的(ic…max(in1,in2),jn1…jn2,kn1…kn2)位于第二子块上,因此,
将(min(in1,in2)…ic,jn1…jn2,kn1…kn2)投影到第一子块上,仍然为(min(in1,in2)…
ic,jn1…jn2,kn1…kn2),将(ic…max(in1,in2),jn1…jn2,kn1…kn2)投影到第二子块上,
仍然为(ic…max(in1,in2),jn1…jn2,kn1…kn2)。
[0081] 进一步地,所述内边界包括第一内边界和第二内边界,其中,第一内边界为母块中的位于分区方向的面上的内边界,第二内边界为母块中的位于非分区方向的内边界,所述
步骤S400包括如下步骤:
[0082] 步骤S410:投影第一内边界;
[0083] 步骤S420:投影第二内边界。
[0084] 以图3进行说明:
[0085] 以图3所示为例,内边界可能存在与i=is、i=ie、j=js、j=je、k=ks、k=ke六个面上,由于图3中的分区方向为i方向,因此,将i=is、i=ie面上的内边界定义为第一内边
界,将j=js、j=je、k=ks、k=ke四个面上的内边界定义为第二内边界;
[0086] 进一步地,所述步骤S410包括如下步骤:
[0087] 步骤S411:当关联块和母块的编号不同、且第一内边界位于第一子块上时,将第一内边界投影到第一子块上,并将关联块的内边界与母块的对应关系,变更为第一子块与关
联块的内边界的对应关系;
[0088] 以图4进行说明:
[0089] 图4中,网格块UADVZWXY为网格块ABCDEFGH的关联块,假设网格块UADVZWXY的编号为m,网格块ABCDEFGH的编号为n,此时m≠n,网格块ABCDEFGH与网格块UADVZWXY之间的内边
界(也即i=is面上的内边界)位于网格块AOQDEPRH(即第一子块)的网格面AEHD上,因此,将
i=is面上的内边界投影到网格块AOQDEPRH(即第一子块)上,假如i=is面上的某一内边界
表示为(is…is,jn1…jn2,kn1…kn2),则投影后的内边界仍然为(is…is,jn1…jn2,kn1…
kn2);而且此时还需将关联块的内边界的对应关系进行更新,具体地,假如对应关联块(即
网格块UADVZWXY)的对应内边界表示为(im1…im2,jm1…jm2,km1…km2),在分区之前,关联
块(即网格块UADVZWXY)的内边界与母块的对应,分区之后,变更为第一子块(即网格块
AOQDEPRH)与关联块的内边界的对应;
[0090] 步骤S412:当关联块和母块的编号不同、且第一内边界位于第二子块上时,将第一内边界投影到第二子块上,并将关联块的内边界与母块的对应关系,变更为第二子块与关
联块的内边界的对应关系;
[0091] 以图5进行说明:
[0092] 图5中,网格块BU′V′CW′Z′X′Y′为网格块ABCDEFGH的关联块,假设网格块BU′V′CW′Z′X′Y′的编号为m,网格块ABCDEFGH的编号为n,此时m≠n,网格块ABCDEFGH与网格块BU′V′
CW′Z′X′Y′之间的内边界(也即i=ie面上的内边界)位于网格块OBCQPFGR(即第二子块)的
网格面BFGC上,因此,将i=ie面上的内边界投影到网格块OBCQPFGR(即第二子块)上,假如i
=ie面上的某一内边界表示为(ie…ie,jn1…jn2,kn1…kn2),则投影后的内边界仍然为
(ie…ie,jn1…jn2,kn1…kn2);而且此时还需将关联块的内边界的对应关系进行更新,具
体地,假如对应关联块(即网格块BU′V′CW′Z′X′Y′)的对应内边界表示为(im1…im2,jm1…
jm2,km1…km2),在分区之前,关联块(即网格块BU′V′CW′Z′X′Y′)的内边界与母块的对应,
分区之后,变更为第二子块(即网格块OBCQPFGR)与关联块的内边界的对应;
[0093] 步骤S413:当关联块和母块的编号相同时,将第一内边界投影到第一子块上,将关联块的内边界投影到第二子块上,并将关联块的内边界与母块的对应关系,变更为第一子
块与第二子块的内边界的对应关系。
[0094] 当关联块和母块的编号相同时,说明关联块和母块为同一个网格块,其在结构形式上呈现为首尾相连的封闭网格块,以图6和图7所示:
[0095] 图6中,母块为圆形网格块,因此,图6中的圆形网格块既可以表示母块,又可以表示母块的关联块,其中,假设该圆形网格块的起始边界和终止边界相交于OA,且i方向为逆
时针方向,那么,OA朝向i方向的一侧则为该圆形网格块的起始边界i=is,OA背向i方向的
一侧则为该圆形网格块的终止边界i=ie,如果分区面为i=ic,那么,起始边界i=is上的
内边界则为该母块的第一内边界,终止边界i=ie上的内边界则为该关联块的内边界,根据
前述的分区方法,此时,沿着i方向看,is到ic之间的网格即为第一子块,ic到ie之间的网格
即为第二子块,因此,需要将起始边界i=is上的内边界投影到第一子块上,将终止边界i=
ie上的内边界投影到第二子块上,并将关联块的内边界与母块的对应关系,变更为第一子
块与第二子块的内边界的对应关系;
[0096] 假如i=is面上的某一内边界表示为(is…is,jn1…jn2,kn1…kn2),投影到第一子块上之后,内边界仍然为(is…is,jn1…jn2,kn1…kn2);
[0097] 假如关联块的某一内边界表示为(im1…im2,jm1…jm2,km1…km2),由于关联块的内边界即为终止边界i=ie上的内边界,因此,im1=im2=ie,投影到第二子块上之后,内边
界为(ie…ie,jn1…jn2,kn1…kn2);
[0098] 此时还需要将关联块的内边界与母块的对应关系,变更为第一子块与第二子块的内边界的对应关系。
[0099] 图7中,母块整体呈方形,中间具有中空部,但其在结构形式上仍然呈现为首尾相连的封闭网格块,因此,图7中的圆形网格块既可以表示母块,又可以表示母块的关联块,其
关于内边界的处理方式和图6中的处理方式类似,此处不再赘述。
[0100] 进一步地,所述步骤S420包括如下步骤:
[0101] 步骤S421:当第二内边界位于第一子块上时,将第二内边界投影到第一子块上;
[0102] 步骤S422:当第二内边界位于第二子块上时,将第二内边界投影到第二子块上;
[0103] 步骤S423:当第二内边界同时位于第一子块和第二子块上时,第二内边界包括位于第一子块上的第二内边界第一段和位于第二子块上的第二内边界第二段,关联块的内边
界包括位于第一子块侧的第一关联内边界和位于第二子块侧的第二关联内边界;将位于第
二内边界第一段投影到第一子块上,将位于第二内边界第二段投影到第二子块上。
[0104] 关于如何判断第二内边界到底是仅位于第一子块和/或第二子块上,以下以母块的某一第二内边界(in1…in2,jn1…jn2,kn1…kn2),母块的关联块的某一内边界(im1…
im2,jm1…jm2,km1…km2)进行示例性说明,将分区方向记为t方向,分区面记为t=tc,其
中,t=i或者j或者k,比如t=i时,分区方向为i方向,分区面为i=ic,in1…in2也可表示为
tn1…tn2;
[0105] 在确定第二内边界的位置之前,需要首先确定母块的关联块的某一内边界(im1…im2,jm1…jm2,km1…km2)与母块的某一第二内边界(in1…in2,jn1…jn2,kn1…kn2)之间
的位置关系,也就是需要首先确定(in1…in2,jn1…jn2,kn1…kn2)中的哪一个方向和
(im1…im2,jm1…jm2,km1…km2)中的哪一个方向对应,比如,可能为jm1…jm2与in1…in2
对应,此处将关联块的内边界与母块的分区方向对应的方向记为p方向,其中,p=i或者j或
者k,比如p=i时,表明(im1…im2,jm1…jm2,km1…km2)中的im1…im2与tn1…tn2对应,如
果此时t=i,im1…im2具体地与in1…in2对应;再比如,p=j时,表明(im1…im2,jm1…jm2,
km1…km2)中的jm1…jm2与tn1…tn2对应,如果此时t=i,jm1…jm2具体地与in1…in2对
应;
[0106] 以上处理主要是为了在处理内边界时,能够自动识别母块的关联块的某一内边界(im1…im2,jm1…jm2,km1…km2)与母块的某一第二内边界(in1…in2,jn1…jn2,kn1…
kn2)之间的位置关系;
[0107] 以下将具体介绍如何判断第二内边界到底是仅位于第一子块和/或第二子块上:
[0108] 首先需要设定参数tn1o=iabs(tn1),tn2o=iabs(tn2),其中,iabs表示取整数的绝对值,比如iabs(‑1)=1。
[0109] 由于将关联块的内边界与母块的分区方向对应的方向记为p方向,那么,
[0110] iabs(tn2‑tn1)=iabs(pm2‑pm1);
[0111] 具体而言:
[0112] 当max(tn1o,tn2o)≤tc,则说明第二内边界位于第一子块上,此时,第二内边界(in1…in2,jn1…jn2,kn1…kn2)仅投影到第一子块上,仍然为(in1…in2,jn1…jn2,kn1…
kn2);
[0113] 当min(tn1o,tn2o)>tc,则说明第二内边界位于第二子块上,此时,第二内边界(in1…in2,jn1…jn2,kn1…kn2)仅投影到第二子块上,仍然为(in1…in2,jn1…jn2,kn1…
kn2);
[0114] 当min(tn1o,tn2o)
[0115] 定义参数:
[0116] tn1s=isign(1,tn1)*min(tn1o,tc),
[0117] tn2e=isign(1,tn2)*min(tn2o,tc),
[0118] isigno=isign(1,(tn2‑tn1)*(pm2‑pm1)),
[0119] pm1s=pm1+isigno*(tn1s‑tn1),
[0120] pm2e=pm1+isigno*(tn2e‑tn1)
[0121] 其中,isign表示整数的符号,比如isign(1,‑1)=‑1,isign(1,‑2)=‑1,isign(1,2)=1;
[0122] 因此,当t=i时,第二内边界(in1…in2,jn1…jn2,kn1…kn2)中的(in1s…in2e,jn1…jn2,kn1…kn2)位于第一子块上,(in1s…in2e,jn1…jn2,kn1…kn2)即构成第二内边
界第一段;
[0123] 当t=j时,第二内边界(in1…in2,jn1…jn2,kn1…kn2)中的(in1…in2,jn1s…jn2e,kn1…kn2)位于第一子块上,(in1…in2,jn1s…jn2e,kn1…kn2)即构成第二内边界第
一段;
[0124] 当t=k时,第二内边界(in1…in2,jn1…jn2,kn1…kn2)中的(in1…in2,jn1…jn2,kn1s…kn2e)位于第一子块上,(in1…in2,jn1…jn2,kn1s…kn2e)即构成第二内边界
第一段;
[0125] 当p=i时,关联块的内边界(im1…im2,jm1…jm2,km1…km2)中的(im1s…im2e,jm1…jm2,km1…km2)位于第一子块侧,(im1s…im2e,jm1…jm2,km1…km2)即构成第一关联
内边界;
[0126] 当p=j时,关联块的内边界(im1…im2,jm1…jm2,km1…km2)中的(im1…im2,jm1s…jm2e,km1…km2)位于第一子块侧,(im1…im2,jm1s…jm2e,km1…km2)即构成第一关
联内边界;
[0127] 当p=k时,关联块的内边界(im1…im2,jm1…jm2,km1…km2)中的(im1…im2,jm1…jm2,km1s…km2e)位于第一子块侧,(im1…im2,jm1…jm2,km1s…km2e)即构成第一关
联内边界;
[0128] 继续定义参数:
[0129] tn1u=isign(1,tn1)*max(tn1o,tc),
[0130] tn2v=isign(1,tn2)*max(tn2o,tc),
[0131] isigno=isign(1,(tn2‑tn1)*(pm2‑pm1)),
[0132] pm1u=pm1+isigno*(tn1u‑tn1),
[0133] pm2v=pm1+isigno*(tn2v‑tn1)
[0134] 因此,当t=i时,第二内边界(in1…in2,jn1…jn2,kn1…kn2)中的(in1u…in2v,jn1…jn2,kn1…kn2)位于第二子块上,(in1u…in2v,jn1…jn2,kn1…kn2)即构成第二内边
界第二段;
[0135] 当t=j时,第二内边界(in1…in2,jn1…jn2,kn1…kn2)中的(in1…in2,jn1u…jn2v,kn1…kn2)位于第二子块上,(in1…in2,jn1u…jn2v,kn1…kn2)即构成第二内边界第
二段;
[0136] 当t=k时,第二内边界(in1…in2,jn1…jn2,kn1…kn2)中的(in1…in2,jn1…jn2,kn1u…kn2v)位于第二子块上,(in1…in2,jn1…jn2,kn1u…kn2v)即构成第二内边界
第二段;
[0137] 当p=i时,关联块的内边界(im1…im2,jm1…jm2,km1…km2)中的(im1u…im2v,jm1…jm2,km1…km2)位于第二子块侧,(im1u…im2v,jm1…jm2,km1…km2)即构成第二关联
内边界;
[0138] 当p=j时,关联块的内边界(im1…im2,jm1…jm2,km1…km2)中的(im1…im2,jm1u…jm2v,km1…km2)位于第二子块侧,(im1…im2,jm1u…jm2v,km1…km2)即构成第二关
联内边界;
[0139] 当p=k时,关联块的内边界(im1…im2,jm1…jm2,km1…km2)中的(im1…im2,jm1…jm2,km1u…km2v)位于第二子块侧,(im1…im2,jm1…jm2,km1u…km2v)即构成第二关
联内边界。
[0140] 进一步地,所述步骤S421中:当关联块和母块的编号不同时,将关联块的内边界与母块的对应关系,变更为第一子块与关联块的内边界的对应关系;当关联块和母块的编号
相同时,将关联块的内边界与母块的对应关系,变更为第一子块的两个内边界的对应关系;
[0141] 具体地,当max(tn1o,tn2o)≤tc,则说明第二内边界位于第一子块上,此时,第二内边界(in1…in2,jn1…jn2,kn1…kn2)仅投影到第一子块上,仍然为(in1…in2,jn1…
jn2,kn1…kn2);
[0142] 此时,如果关联块和母块的编号不同,母块的关联块的某一内边界(im1…im2,jm1…jm2,km1…km2)与母块的对应关系,变更为第一子块与母块的关联块的某一内边界
(im1…im2,jm1…jm2,km1…km2)的对应关系;如果关联块和母块的编号相同,母块的关联
块的某一内边界(im1…im2,jm1…jm2,km1…km2)与母块的对应关系,变更为第一子块的两
个内边界的对应关系。
[0143] 进一步地,所述步骤S422中:当关联块和母块的编号不同时,将关联块的内边界与母块的对应关系,变更为第二子块与关联块的内边界的对应关系;当关联块和母块的编号
相同时,将关联块的内边界与母块的对应关系,变更为第二子块的两个内边界的对应关系。
[0144] 具体地,当min(tn1o,tn2o)>tc,则说明第二内边界位于第二子块上,此时,第二内边界(in1…in2,jn1…jn2,kn1…kn2)仅投影到第二子块上,仍然为(in1…in2,jn1…jn2,
kn1…kn2);
[0145] 此时,如果关联块和母块的编号不同,母块的关联块的某一内边界(im1…im2,jm1…jm2,km1…km2)与母块的对应关系,变更为第二子块与母块的关联块的某一内边界
(im1…im2,jm1…jm2,km1…km2)的对应关系;如果关联块和母块的编号相同,母块的关联
块的某一内边界(im1…im2,jm1…jm2,km1…km2)与母块的对应关系,变更为第二子块的两
个内边界的对应关系。
[0146] 进一步地,所述步骤S423中:当关联块和母块的编号不同时,将第一关联内边界与母块的对应关系,变更为第一子块与第一关联内边界的对应关系,将第二关联内边界与母
块的对应关系,变更为第二子块与第二关联内边界的对应关系;
[0147] 具体地,当min(tn1o,tn2o)
[0148] 如果关联块和母块的编号不同,以p=j为例,关联块的内边界(im1…im2,jm1…jm2,km1…km2)中的(im1…im2,jm1s…jm2e,km1…km2)构成第一关联内边界,(im1…im2,
jm1u…jm2v,km1…km2)即构成第二关联内边界,此时,需要将(im1…im2,jm1s…jm2e,
km1…km2)与母块的对应关系,变更为第一子块与(im1…im2,jm1s…jm2e,km1…km2)的对
应关系,将(im1…im2,jm1u…jm2v,km1…km2)与母块的对应关系,变更为第二子块与
(im1…im2,jm1u…jm2v,km1…km2)的对应关系。
[0149] 进一步地,所述步骤S423中:当关联块和母块的编号相同时,将第一关联内边界与母块的对应关系,变更为第一子块的两个内边界的对应关系,将第二关联内边界与母块的
对应关系,变更为第二子块的两个内边界的对应关系;
[0150] 具体地,如果关联块和母块的编号相同,则必然存在关系t=p,也就是说,第二内边界(in1…in2,jn1…jn2,kn1…kn2)中的in1…in2与关联块的内边界(im1…im2,jm1…
jm2,km1…km2)中的im1…im2对应,jn1…jn2与jm1…jm2对应,kn1…kn2与km1…km2对应;
[0151] 以t=p=i为例,(im1s…im2e,jm1…jm2,km1…km2)即构成第一关联内边界,(im1u…im2v,jm1…jm2,km1…km2)即构成第二关联内边界,此时,将(im1s…im2e,jm1…
jm2,km1…km2)与母块的对应关系,变更为第一子块的两个内边界的对应关系,将(im1u…
im2v,jm1…jm2,km1…km2)与母块的对应关系,变更为第二子块的两个内边界的对应关系。
[0152] 进一步地,在对母块进行分区后,在第一子块和第二子块之间必然新增内边界,以如图3中所示,利用分界面OPRQ将网格块ABCDEFGH均分,分界面OPRQ即为在i=ic所在的网
格面,第一子块和第二子块的新增内边界均可以表示为(ic…ic,js…je,ks…ke)。
[0153] 为了识别内边界之间的网格走向对应关系,将新增内边界中的其中一个非分区方向上的网格节点编号取负。
[0154] 继续以图3为例,为了识别内边界之间的网格走向对应关系,可将新增内边界(ic…ic,js…je,ks…ke)中的其中一个非分区方向上的网格节点编号取负,也就是(ic…
ic,‑js…‑je,ks…ke)或者(ic…ic,js…je,‑ks…‑ke)。
[0155] 为了证明本发明中的分区方法的可靠性、并行效率,进行了以下测试进行验证。
[0156] 如图8所示为不同进程下的迭代残差随迭代步数的衰减情况,其中,图中:横坐标是迭代步数,取对数值,纵坐标是所有网格单元残差的空间平均值,图中给出了进程IP=1、
5、10和20情况下的残差变化曲线,非定常总迭代步数2000步,从图8可以看出,在进程数IP
=1、5、10、20情况下,平均残差随迭代步数变化,其收敛曲线近似一致。该结果证明在对结
构网格自动分区后,采用不同进程数开展数值仿真,并不影响数值仿真的收敛特性。
[0157] 在图9至图12中,分别给出了在进程数IP=1、5、10、20下,网格分区和流场马赫数分布情况。随着进程数增加,网格分区数增加,由串行的13分区增加为14、18、30分区。在串
行以及不同进程数的并行情况下,流场马赫数分布几乎没有明显差异,证明本发明的结构
网格的分区方法是可靠的,它不会影响流场结果的准确性。值得说明的是,此处的分区和网
格块为同一含义,只是表述方式不同而已;IP=1即为串行。
[0158] 表1给出了在不同进程数下的结构网格分区数、最大块网格量、进程平均网格量、进程最大网格量、任务均衡偏差率、与串行的速率比。
[0159] 表1
[0160]
[0161] 可以看出,通过本发明中的分区方法,形成的最终的网格量最大的网格块均小于每个进程承担的平均网格量,满足了结构网格的分区方法的终止定义。任务分配均衡偏差
率达到26.3%;在不考虑信息通讯传递时间情况下,单个进程的速率不低于串行速率的
79.0%左右。
[0162] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。