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

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

【技术实现步骤摘要】
一种适用于数值反应堆的大规模并行网格生成方法和系统


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

技术介绍

[0002]核反应堆工程是一个涉及材料学、热学、力学等多学科的复杂工程。反应堆堆芯组件在髙温、辐照、压力等因素的联合作用下产生的弯曲变形和燃料棒的流致振动问题会导致堆芯组件包壳磨损、装卸料困难、组件破损以及疲劳损伤。因此研究反应堆堆芯组件变形以及流致振动问题的分析对于保障反应堆的安全运行具有十分重要的意义。在实际工作中一般采用数值方法分析堆芯组件的弯曲变形问题。数值反应堆是基于多物理耦合计算、大规模并行计算,应用先进的热工水力、燃料、结构力学、材料等计算机软件,对反应堆进行全方位、精细化的数值模拟,以完成反应堆现实的或超越现实的研究平台。
[0003]目前高性能数值模拟软件的并行能力远远落后于硬件能提供的并行能力,亟待优化。大多数情况下制约数值模拟软件并行能力的并非求解器,而是占据更多计算时间的网格生成阶段。因此,提高网格生成并行效率,缩短网格生成时间是提高数值模拟软件并行计算能力的关键所在。动辄数亿甚至数十亿的网格给网格生成器带来了巨大挑战。传统的串行网格生成方法在时间和内存上都无法胜任这一量级的网格生成任务,因此并行网格生成方法逐步成为研究热点。
[0004]目前大多数并行网格生成算法对共享内存结构利用不充分、不能够利用超级计算机多层体系结构优势。并且大多数并行网格生成算法仅能够扩展到16线程左右,运行在更多线程下时线程间相互阻塞等待时长不断增加,效率降低。Marot等人提出了一种并行网格生成算法(hextreme,下文简称HXT算法),并将其集成至开源网格生成器Gmsh。HXT算法设计了精巧的数据结构,相比其他的开源网格生成器效率更高。该方法生成相同规模网格仅需其他生成器三分之一的时间。
[0005]但是HXT算法还存在以下问题:1)扩展至约64线程时,存在多线程阻塞问题,各个线程相互等待;2)HXT算法与网格生成器Gmsh之间的转换接口设计不够合理,串行转换,耗时长;3)网格生成器与求解器没有结合,存在磁盘I/O开销。

技术实现思路

[0006]本专利技术的目的是针对现有技术的不足,提出一种适用于数值反应堆的大规模并行网格生成方法,有效缩短了大规模网格生成计算时间长,解决了将数值反应堆712根全堆芯组件模型生成百亿网格的问题。
[0007]本专利技术提出基于OpenMP框架实现HXT算法与网格生成器Gmsh转换接口并行化,并将网格生成器与求解器相结合,实现求解器对并行网格划分结果的正确利用,避免了额外的磁盘I/O开销,大大降低用户使用成本。同时,本专利技术提出将712根全堆芯组件模型均衡负载至37个计算节点,最终实现了对反应堆堆芯组件的百亿网格生成。
[0008]具体地,为解决上述技术问题,本专利技术提供如下技术方案:
[0009]一种适用于数值反应堆的大规模并行网格生成方法,其特征在于该方法包括:
[0010]步骤1:数值反应堆组件模型由若干堆芯组件组成,将其均分为n组堆芯组件;
[0011]步骤2:利用三维有限元网格生成器Gmsh对每组堆芯组件生成二维网格,通过Gmsh2Hxt预处理函数对二维网格转换格式;
[0012]步骤3:转换格式后的二维网格构建三维初始网格;
[0013]此处的构建为本领域常规技术操作,故不详解;
[0014]步骤4:基于无锁原子操作,采用多线程对三维初始网格进行并行网格细化操作:
[0015]每一个线程进行如下操作:
[0016]a)获取网格编号num。
[0017]b)判断num是否为空,若是则执行步骤c),若否则执行步骤d);
[0018]c)将当前最大网格编号加一后设为最新网格编号;
[0019]d)判断num是否大于当前最大网格编号,若是将num设置为最新网格编号,若否将当前最大网格编号加一后设为最新网格编号。
[0020]每一个线程同时执行步骤a、步骤b,若两个或两个以上线程均需执行步骤c或步骤d,则一个线程需要等待另一个线程执行完成,若两个线程分别执行步骤c、步骤d则同时进行;
[0021]现有HXT算法使用临界区包裹步骤a~d,当且仅当一个线程执行完a~d的所有步骤,其他线程才能从a步骤开始执行。即现有方法在网格构造过程中未实现真正意义上的并行。本专利技术提出的方法,可以使多个线程同时构造网格。a、b步骤可多线程同步执行,c、d步骤内部使用无锁原子操作保证线程安全。
[0022]下面以两个线程同时构造网格为例,假设执行每个步骤需要时间T。
[0023]原方法:线程1逐步执行步骤a至步骤d,耗时3T(步骤c、d仅执行其一)。线程1执行完成后,线程2开始执行,同样耗时3T。两个线程共耗时6T。
[0024]本专利技术方法:线程1开始执行步骤a、步骤b,同时线程2也执行步骤a、步骤b,耗时2T。如果两个线程都需要执行步骤c,则一个线程需要等待另一个线程执行完成,需耗时2T。如果两个线程一个执行步骤c,一个执行步骤d,则可同步执行,耗时1T。综上,本专利技术的方法共计耗时3~4T。
[0025]可见,同样使用两个线程情况,本专利技术方法相比现有方法在构造网格时可节省约33%~50时间。
[0026]步骤4:判断细化后的网格是否满足要求。如果满足网格大小要求则执行步骤5,否则执行步骤3。
[0027]步骤5:执行Hxt2Gmsh函数将细化后的网格转换为Gmsh网格。
[0028]5.1将N个步骤(4)细化后的网格均分到M个线程,每个线程分得N/M个网格单元。
[0029]5.2M个线程内部各自采用Hxt2Gmsh函数进行转换操作,并将转换得到的Gmsh网格单元压入到各个线程的私有容器中。
[0030]5.3转换完成后,将各私有容器合并入全局容器,得到所需Gmsh网格。
[0031]使用多线程并行提高转换速率是业界常见方法,但是多线程转换的结果直接压入全局容器会产生线程安全问题。一种常见的解决方案是对全局容器加锁,但是这会造成转
换效率下降。本专利技术提出使用线程私有容器存储转换结果,最后将线程私有容器合并至全局容器。该方法可以在确保线程安全的情况下,提高转换效率。
[0032]本专利技术的另一个目的是提供一种适用于数值反应堆的大规模并行网格生成系统,包括数据获取模块、网格生成模块、求解器模块、后处理展示模块。
[0033]所述数据获取模块用于数值反应堆组件模型数据获取,将其均分为n组堆芯组件;然后传送至网格生成模块;
[0034]所述的网格生成模块用于实现网格生成,并保存至内存;网格生成模块采用上述网格生成方法。
[0035]所述的求解器模块为在原有求解器输入端嵌入网格生成器类;用于直接从内存中读取上述生成的网格数据。
[0036]所述的网格生成器类内部实现填本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种适用于数值反应堆的大规模并行网格生成方法,其特征在于该方法包括:步骤1:数值反应堆组件模型由若干堆芯组件组成,将其均分为n组堆芯组件;步骤2:利用三维有限元网格生成器Gmsh对每组堆芯组件生成二维网格,通过Gmsh2Hxt预处理函数对二维网格转换格式;步骤3:转换格式后的二维网格构建三维初始网格;步骤4:基于无锁原子操作,采用多线程对三维初始网格进行并行网格细化操作;步骤4:判断细化后的网格是否满足要求;如果满足网格大小要求则执行步骤5,否则执行步骤3;步骤5:执行Hxt2Gmsh函数将细化后的网格转换为Gmsh网格。2.如权利要求1所述的一种适用于数值反应堆的大规模并行网格生成方法,其特征在于步骤4每一个线程进行如下操作:a)获取网格编号num;b)判断num是否为空,若是则执行步骤c),若否则执行步骤d);c)将当前最大网格编号加一后设为最新网格编号;d)判断num是否大于当前最大网格编号,若是将num设置为最新网格编号,若否将当前最大网格编号加一后设为最新网格编号。3.如权利要求2所述的一种适用于数值反应堆的大规模并行网格生成方法,其特征在于每一个线程同时执行步骤a、步骤b,若两个或两个以上线程均需执行步骤c或步骤d,则一个线程需要等待另一个线程执行完成,若两个线程分别执行步骤c、步骤d则同时进行。4.如权利要求1所述的一种适用于数值反应堆的大规模并行网格生...

【专利技术属性】
技术研发人员:张纪林丁佳明王珏冯仰德聂宁明赵乃良张鋆宸
申请(专利权)人:中国科学院计算机网络信息中心
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1