首页> 中国专利> 一种适用于数值反应堆的大规模并行网格生成方法和系统

一种适用于数值反应堆的大规模并行网格生成方法和系统

摘要

本发明提供一种适用于数值反应堆的大规模并行网格生成方法和系统,包括基于无锁原子操作的网格单元构造方法,用于提高多线程网格构造效率,避免线程阻塞等待;基于OpenMP框架的并行网格转换方法,用于加快网格转换过程,缩短网格转换时间;网格生成器与求解器集成方法,用于避免网格文件写入、读取的I/O时长。本发明满足了大规模并行网格生成的巨大需求,用户能够在更短的时间内获得指定规模的网格,且能够保证良好的网格质量。本发明提出的将网格生成器与求解器集成的方案,能形成整体的数值模拟框架,降低用户使用成本,并且进一步缩短网格生成时间。

著录项

说明书

技术领域

本发明涉及数值模拟领域的大规模并行网格生成方法和系统,特别是在数值反应堆场景下,通过并行化、降低锁粒度实现加速网格生成的方法和系统。

背景技术

核反应堆工程是一个涉及材料学、热学、力学等多学科的复杂工程。反应堆堆芯组件在髙温、辐照、压力等因素的联合作用下产生的弯曲变形和燃料棒的流致振动问题会导致堆芯组件包壳磨损、装卸料困难、组件破损以及疲劳损伤。因此研究反应堆堆芯组件变形以及流致振动问题的分析对于保障反应堆的安全运行具有十分重要的意义。在实际工作中一般采用数值方法分析堆芯组件的弯曲变形问题。数值反应堆是基于多物理耦合计算、大规模并行计算,应用先进的热工水力、燃料、结构力学、材料等计算机软件,对反应堆进行全方位、精细化的数值模拟,以完成反应堆现实的或超越现实的研究平台。

目前高性能数值模拟软件的并行能力远远落后于硬件能提供的并行能力,亟待优化。大多数情况下制约数值模拟软件并行能力的并非求解器,而是占据更多计算时间的网格生成阶段。因此,提高网格生成并行效率,缩短网格生成时间是提高数值模拟软件并行计算能力的关键所在。动辄数亿甚至数十亿的网格给网格生成器带来了巨大挑战。传统的串行网格生成方法在时间和内存上都无法胜任这一量级的网格生成任务,因此并行网格生成方法逐步成为研究热点。

目前大多数并行网格生成算法对共享内存结构利用不充分、不能够利用超级计算机多层体系结构优势。并且大多数并行网格生成算法仅能够扩展到16线程左右,运行在更多线程下时线程间相互阻塞等待时长不断增加,效率降低。Marot等人提出了一种并行网格生成算法(hextreme,下文简称HXT算法),并将其集成至开源网格生成器Gmsh。HXT算法设计了精巧的数据结构,相比其他的开源网格生成器效率更高。该方法生成相同规模网格仅需其他生成器三分之一的时间。

但是HXT算法还存在以下问题:1)扩展至约64线程时,存在多线程阻塞问题,各个线程相互等待;2)HXT算法与网格生成器Gmsh之间的转换接口设计不够合理,串行转换,耗时长;3)网格生成器与求解器没有结合,存在磁盘I/O开销。

发明内容

本发明的目的是针对现有技术的不足,提出一种适用于数值反应堆的大规模并行网格生成方法,有效缩短了大规模网格生成计算时间长,解决了将数值反应堆712根全堆芯组件模型生成百亿网格的问题。

本发明提出基于OpenMP框架实现HXT算法与网格生成器Gmsh转换接口并行化,并将网格生成器与求解器相结合,实现求解器对并行网格划分结果的正确利用,避免了额外的磁盘I/O开销,大大降低用户使用成本。同时,本发明提出将712根全堆芯组件模型均衡负载至37个计算节点,最终实现了对反应堆堆芯组件的百亿网格生成。

具体地,为解决上述技术问题,本发明提供如下技术方案:

一种适用于数值反应堆的大规模并行网格生成方法,其特征在于该方法包括:

步骤1:数值反应堆组件模型由若干堆芯组件组成,将其均分为n组堆芯组件;

步骤2:利用三维有限元网格生成器Gmsh对每组堆芯组件生成二维网格,通过Gmsh2Hxt预处理函数对二维网格转换格式;

步骤3:转换格式后的二维网格构建三维初始网格;

此处的构建为本领域常规技术操作,故不详解;

步骤4:基于无锁原子操作,采用多线程对三维初始网格进行并行网格细化操作:

每一个线程进行如下操作:

a)获取网格编号num。

b)判断num是否为空,若是则执行步骤c),若否则执行步骤d);

c)将当前最大网格编号加一后设为最新网格编号;

d)判断num是否大于当前最大网格编号,若是将num设置为最新网格编号,若否将当前最大网格编号加一后设为最新网格编号。

每一个线程同时执行步骤a、步骤b,若两个或两个以上线程均需执行步骤c或步骤d,则一个线程需要等待另一个线程执行完成,若两个线程分别执行步骤c、步骤d则同时进行;

现有HXT算法使用临界区包裹步骤a~d,当且仅当一个线程执行完a~d的所有步骤,其他线程才能从a步骤开始执行。即现有方法在网格构造过程中未实现真正意义上的并行。本发明提出的方法,可以使多个线程同时构造网格。a、b步骤可多线程同步执行,c、d步骤内部使用无锁原子操作保证线程安全。

下面以两个线程同时构造网格为例,假设执行每个步骤需要时间T。

原方法:线程1逐步执行步骤a至步骤d,耗时3T(步骤c、d仅执行其一)。线程1执行完成后,线程2开始执行,同样耗时3T。两个线程共耗时6T。

本发明方法:线程1开始执行步骤a、步骤b,同时线程2也执行步骤a、步骤b,耗时2T。如果两个线程都需要执行步骤c,则一个线程需要等待另一个线程执行完成,需耗时2T。如果两个线程一个执行步骤c,一个执行步骤d,则可同步执行,耗时1T。综上,本发明的方法共计耗时3~4T。

可见,同样使用两个线程情况,本发明方法相比现有方法在构造网格时可节省约33%~50时间。

步骤4:判断细化后的网格是否满足要求。如果满足网格大小要求则执行步骤5,否则执行步骤3。

步骤5:执行Hxt2Gmsh函数将细化后的网格转换为Gmsh网格。

5.1将N个步骤(4)细化后的网格均分到M个线程,每个线程分得N/M个网格单元。

5.2M个线程内部各自采用Hxt2Gmsh函数进行转换操作,并将转换得到的Gmsh网格单元压入到各个线程的私有容器中。

5.3转换完成后,将各私有容器合并入全局容器,得到所需Gmsh网格。

使用多线程并行提高转换速率是业界常见方法,但是多线程转换的结果直接压入全局容器会产生线程安全问题。一种常见的解决方案是对全局容器加锁,但是这会造成转换效率下降。本发明提出使用线程私有容器存储转换结果,最后将线程私有容器合并至全局容器。该方法可以在确保线程安全的情况下,提高转换效率。

本发明的另一个目的是提供一种适用于数值反应堆的大规模并行网格生成系统,包括数据获取模块、网格生成模块、求解器模块、后处理展示模块。

所述数据获取模块用于数值反应堆组件模型数据获取,将其均分为n组堆芯组件;然后传送至网格生成模块;

所述的网格生成模块用于实现网格生成,并保存至内存;网格生成模块采用上述网格生成方法。

所述的求解器模块为在原有求解器输入端嵌入网格生成器类;用于直接从内存中读取上述生成的网格数据。

所述的网格生成器类内部实现填充网格单元的加载方法,该填充方法采用调用包装类的方法。所述的包装类的具体实现包括:创建类,内部方法实现填充网格数据结构;创建python配置脚本,用于检查依赖库环境是否具备。

所述的后处理展示模块用于以图形化形式将求解器模块传送的网格数据进行展示,并生成后处理文件。

现有的方案网格生成器与求解器独立存在,需要先将生成的网格文件写入硬盘,求解器再从硬盘中读取,磁盘读/写时间长。本发明提出在原有求解器输入端嵌入网格生成器类,生成结果无需写入硬盘,可直接在内存读取,所需时间大大缩短。且本发明提出的方法网格数据的填充在包装类内部实现,可以解决求解器对网格生成器的强依赖问题。本发明提出的方法无需修改原有求解器代码,符合软件工程规范。

本发明的有益效果是:

(1)基于无锁原子操作来构造网格单元,以降低多线程之间的冲突,加速网格细化,解决多线程阻塞问题;

(2)使用OpenMP并行框架进行多线程网格单元转换,先将转换结果放入线程私有容器,等待转换结束再将私有容器的网格单元合并至全局容器,解决算法与网格生成器的接口效率低问题;

(3)本发明的网格生成方法可极大提高网格构造方法的并行度,减少临界区范围。并且,可在保证网格生成质量的前提下,提升网格生成速率,缩短网格生成时间。本发明具有一定的工程应用价值。

(4)本发明并行网格生成系统避免了磁盘I/O开销,并且提供了图形化界面的求解结果展示。

附图说明

图1是HXT算法流程图。

图2是现有HXT算法步骤5转换示意图。

图3是本发明改进的步骤5多线程网格转换示意图。

图4是现有HXT版本与本发明版本网格生成速率对比图。

图5是一组(19根)组件模型及其顶部、底部二维网格。

图6是全堆芯组件网格求解结果可视化示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。本说明书中公开的所有特征,或公开的所有方法或过程中的步骤,除了互相排斥的特征和/或步骤以外,均可以以任何方式组合。

本说明书(包括任何附加权利要求、摘要和附图)中公开的任一特征,除非特别叙述,均可被其他等效或具有类似目的的替代特征加以替换。除非特别叙述,每个特征只是一系列等效或类似特征中的一个例子而已。

一种适用于数值反应堆的大规模并行网格生成系统,包括数据获取模块、网格生成模块、求解器模块、后处理展示模块。

所述数据获取模块用于数值反应堆组件模型数据获取,将其均分为n组堆芯组件;然后传送至网格生成模块;

所述的网格生成模块用于实现网格生成,并保存至内存;网格生成模块采用上述网格生成方法。

参照图5所示,所述的网格数据包括三部分:组件模型的三维网格、组件模型顶部的二维网格、组件模型底部的二维网格。组件模型底部的二维网格用于固定组件底端,组件模型顶部的二维网格用于测算受热膨胀后的位移。

所述的求解器模块为在原有求解器输入端嵌入网格生成器类;用于直接从内存中读取上述生成的网格数据,添加边界条件、材料属性、温度等物理条件,对网格数据进行求解。

物理条件如下:

·材料热膨胀系数:α=1.626×10

·材料密度:7800kg/m3

·弹性模量:2.05E11 Pa

·泊松比:0.3

·初始温度:300℃

·最终温度:500℃

所述的网格生成器类内部实现填充网格单元的加载方法,该填充方法采用调用包装类的方法。所述的包装类的具体实现包括:创建类,内部方法实现填充网格数据结构;创建python配置脚本,用于检查依赖库环境是否具备。

参照图6所示,所述的后处理展示模块用于以图形化形式将求解器模块传送的网格数据进行展示,并生成后处理文件。

现有的方案网格生成器与求解器独立存在,需要先将生成的网格文件写入硬盘,求解器再从硬盘中读取,磁盘读/写时间长。本发明提出在原有求解器输入端嵌入网格生成器类,生成结果无需写入硬盘,可直接在内存读取,所需时间大大缩短。且本发明提出的方法网格数据的填充在包装类内部实现,可以解决求解器对网格生成器的强依赖问题。本发明提出的方法无需修改原有求解器代码,符合软件工程规范。

参照图1,一种适用于数值反应堆的大规模并行网格生成方法具体是:

步骤1:数值反应堆组件模型由712根堆芯组件组成,将其均分为37组,每组约19根堆芯组件;

步骤2:在37个计算节点上,分别读取GEO格式几何模型文件,利用三维有限元网格生成器Gmsh对每组堆芯组件生成二维网格,通过Gmsh2Hxt预处理函数对二维网格转换格式;

步骤3:转换格式后的二维网格构建三维初始网格;

此处的构建为本领域常规技术操作,故不详解;

步骤4:使用OpenMP并行框架,基于无锁原子操作,多线程对三维初始网格进行并行网格细化操作;多线程并行生成百亿三维网格,单节点网格量约2.8亿。

每一个线程进行如下操作:

a)获取网格编号num。

b)判断num是否为空,若是则执行步骤c),若否则执行步骤d);

c)将当前最大网格编号加一后设为最新网格编号;

d)判断num是否大于当前最大网格编号,若是将num设置为最新网格编号,若否将当前最大网格编号加一后设为最新网格编号。

每一个线程同时执行步骤a、步骤b,若两个或两个以上线程均需执行步骤c或步骤d,则一个线程需要等待另一个线程执行完成,若两个线程分别执行步骤c、步骤d则同时进行;

如图1现有HXT算法使用临界区包裹步骤a~d,当且仅当一个线程执行完a~d的所有步骤,其他线程才能从a步骤开始执行。即现有方法在网格构造过程中未实现真正意义上的并行。本发明提出的方法,可以使多个线程同时构造网格。a、b步骤可多线程同步执行,c、d步骤内部使用无锁原子操作保证线程安全。

下面以两个线程同时构造网格为例,假设执行每个步骤需要时间T。

现有HXT方法:线程1逐步执行步骤a至步骤d,耗时3T(步骤c、d仅执行其一)。线程1执行完成后,线程2开始执行,同样耗时3T。两个线程共耗时6T。

本发明方法:线程1开始执行步骤a、步骤b,同时线程2也执行步骤a、步骤b,耗时2T。如果两个线程都需要执行步骤c,则一个线程需要等待另一个线程执行完成,需耗时2T。如果两个线程一个执行步骤c,一个执行步骤d,则可同步执行,耗时1T。综上,本发明的方法共计耗时3~4T。

可见,同样使用两个线程情况,本发明方法相比现有方法在构造网格时可节省约33%~50时间。

步骤4:判断细化后的网格是否满足要求。如果满足网格大小要求则执行步骤5,否则执行步骤3。

步骤5:执行Hxt2Gmsh函数将细化后的网格转换为Gmsh网格。

5.1将N个步骤(4)细化后的网格均分到M个线程,每个线程分得N/M个网格单元。

5.2M个线程内部各自采用Hxt2Gmsh函数进行转换操作,并将转换得到的Gmsh网格单元压入到各个线程的私有容器中。

5.3转换完成后,将各私有容器合并入全局容器,得到所需Gmsh网格。

现有HXT算法的步骤5参照图2所示,采用单线程转换,计算时间长。本发明提出的多线程并行转换参照图3所示,采用OpenMP多线程转换,创新的将线程私有容器引入以解决全局容器的瓶颈。

OpenMP(Open Multi-Processing)是一套支持跨平台共享内存方式的多线程并发的编程API,使用C,C++和Fortran语言,可以在大多数的处理器体系和操作系统中运行。OpenMP支持临界区(critical)、锁(lock)、无锁原子操作(atomic)三种方式实现线程间同步。据统计,上述三种方式的耗时占比约为7:3:1。相应的,无锁原子操作的应用场景限制也更为严格。

本发明提出使用无锁原子操作替代开源版本中的临界区来更新网格编号,可将耗时缩短为原来的七分之一。且原版的临界区作用范围是整个构造方法,即同一时刻仅有一个线程能执行构造方法的代码,其他线程处于阻塞等待状态。本发明提出使用无锁原子操作可将作用范围缩小至修改网格编号的代码行,同一时刻可有多个线程执行网格构造方法代码段。

数值反应堆由712根堆芯组件组成,为了保证数值模拟的高精度要求,实际应用中需要将该模型划分生成数十亿甚至百亿网格。现有的基于共享内存架构式的方案由于单个计算节点内存大小有限,无法存放如此巨大的网格文件。本发明提出将全堆芯712根堆芯组件均分成为37组,每组约19根组件。参照图5,所示为一组19根均分后的组件。接着在37台计算节点上分别对一组堆芯组件进行网格生成。最终每组模型划分生成约2.8亿网格,全堆芯组件网格数量超百亿。由于网格生成的任务负载均衡到了37个不同的计算节点,每个计算节点所需处理的任务大大减少。

相比共享内存架构式的方案,本方案避免了使用昂贵的大内存高性能服务器,只需用到廉价的普通服务器集群即可,并且有效缩短了计算时长。多线程情况下现有HXT算法与本发明提出方法网格生成速率对比参照图4。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号