核技术
2017
,
Vol. 40
Issue (10)
: 100501
DOI: 10.11889/j.0253-3219.2017.hjs.40.100501
苏适, 谢芹, 陈珍平, 谢金森, 曾文杰, 刘紫静, 赵鹏程, 何丽华, 于涛. 基于OpenMC执行码的编译检测及临界基准验证[J]. 核技术, 2017, 40(10): 100501. DOI:
10.11889/j.0253-3219.2017.hjs.40.100501
.
[复制中文]
SU Shi, XIE Qin, CHEN Zhenping, XIE Jinsen, ZENG Wenjie, LIU Zijing, ZHAO Pengcheng, HE Lihua, YU Tao. Compiling validity and critical benchmark verification based on OpenMC execution code[J]. Nuclear Techniques, 2017, 40(10): 100501. DOI:
10.11889/j.0253-3219.2017.hjs.40.100501
.
[复制英文]
国家自然科学基金(No.11575079、No.11605085)资助
国家自然科学基金(No.11575079、No.11605085)资助
第一作者:
苏适, 男, 1991年出生, 2014年毕业于南华大学, 现为硕士研究生, 从事蒙特卡罗粒子输运程序方法及应用研究
通信作者:
于涛, E-mail:
[email protected]
开源蒙特卡罗程序OpenMC(Open Monte Carlo code)只提供源代码而没有执行码,在编译OpenMC的过程中发现不同版本的辅助程序与之存在兼容性问题。本文通过分析OpenMPI、Mpich及HDF5各版本辅助程序,对0.6.2版本OpenMC源代码的支持情况进行研究,为正确编译OpenMC执行码给出了直接参考。为进一步验证OpenMC执行码计算临界问题的正确性,选择国际临界安全基准评价实验手册(The International Criticality Safety Benchmark Evaluation Project,ICSBEP)中的96道代表性例题进行基准校验,与通用蒙特卡罗程序的计算结果进行对比并以实验值作为参考。结果表明,OpenMC计算值与实验值及其他程序计算值吻合较好,验证了OpenMC临界计算的可行性和正确性,上述结论将为程序以后的实际应用及完善奠定基础。
关键词
:
OpenMC
OpenMPI
Mpich
HDF5
国际临界安全基准评价实验手册
Compiling validity and critical benchmark verification based on OpenMC execution code
SU Shi
,
XIE Qin
,
CHEN Zhenping
,
XIE Jinsen
,
ZENG Wenjie
,
LIU Zijing
,
ZHAO Pengcheng
,
HE Lihua
,
YU Tao
School of Nuclear Science and Technology, University of South China, Hengyang 421001, China
Received date: 2017-05-18; accepted date: 2017-07-08
Supported by National Natural Science Foundation of China (No.11575079, No.11605085)
First author:
SU Shi, male, born in 1991, graduated from University of South China in 2014, master student, focusing on Monte Carlo particle transport procedures, methods and applications
Corresponding author:
YU Tao, E-mail:
[email protected]
Abstract
:
Background:
The open source Monte Carlo code (OpenMC) released by Massachusetts Institute of Technology (MIT) only provides source code rather than executable code.
Purpose:
This study aims at the compatibility issues for different versions of the auxiliary programs in the compilation of OpenMC.
Methods:
The various versions of OpenMPI, Mpich and HDF5 programs that support OpenMC were compiled and checked, and the complied OpenMC was validated using 96 representative routines recommended in the international criticality safety benchmark evaluation project (ICSBEP). The calculation results were compared with those of the ICSBEP experiments using general MC code.
Results:
The calculated values by complied OpenMC are in line with the experimental values of the ICSBEP benchmarks, as well as calculations by other programs.
Conclusion:
This study provides a reference for the correct compilation of the OpenMC with feasibility. It is useful in future applications and improvements of these programs.
Key Words
:
OpenMC
OpenMPI
Mpich
HDF5
ICSBEP
蒙特卡罗方法具有方法简单直观、受几何条件限制小、收敛速度与维度无关等优点,所以很早就被用于中子输运、反应堆数值计算等方面。几十年来,随着计算机性能的不断提高,其在反应堆数值模拟方面的应用也越来越广泛
[
1
]
。大规模全堆计算是新一代蒙特卡罗程序的目标,在临界计算问题中,首要问题是巨额的内存占用,其次是大量的时间消耗,而并行计算技术是解决蒙特卡罗的内存占用和计算时间消耗重要手段
[
2
]
。传统蒙特卡罗程序计算大规模全堆模型效率低,而新型蒙特卡罗程序MC21
[
3
]
、OpenMC
[
4
]
和RMC (Reactor Monte Carlo code)
[
5
]
等在超过一千核的计算平台上计算效率不会降低
[
6
]
,具有极大并行可扩展性,使蒙特卡罗程序可以充分利用大规模并行计算资源,大大缩短计算时间。
OpenMC程序是新型开源、针对大规模并行运算的蒙特卡罗中子输运模拟软件,由麻省理工学院的反应堆物理计算小组自2011年开始研发
[
7
]
。OpenMC程序的使用需要多种辅助程序的支持,如使用MPI (Message Passing Interface)进程并行运算、使用HDF5 (Hierarchical Data Format-5) 输出并行化数据格式文件和使用PETSc (Portable, Extensible Toolkit for Scientific Computation)来支持CMFD (Coarse Mesh Finite Difference)计算程序,OpenMC需要的辅助程序见
图 1
。由于OpenMC在网上只有源代码而没有执行码,而编译OpenMC的过程中需要一些辅助程序进行支持,但各支持程序的版本与OpenMC之间存在支持性问题,对于不同版本辅助程序与蒙特卡罗程序存在的支持性问题,国内尚无对此的文献发表,所以对此进行研究对蒙特卡罗程序的正确编译具有启发意义,并对其他蒙特卡罗程序与不同版本辅助程序的兼容性提供了思考。
为了能够编译正常使用的OpenMC,需要将OpenMPI、Mpich、HDF5对OpenMC的支持性进行研究,对这些程序在虚拟机Linux (Ubuntu-15.04) 系统下进行编译,并在OpenMC-0.6.2下自检,得出了能否成功编译与自检通过的结果,找出了自检错误项并对自检错误值和正确值进行了对比,结果对编译能自检通过的OpenMC运行环境提供了直接参考。并选择国际临界安全基准评价实验手册(The International Criticality Safety Benchmark Evaluation Project, ICSBEP)中的96道代表性例题对OpenMC进行基准校验,使用的核数据库为ENDF/B-Ⅶ.0库,将OpenMC的计算结果与SuperMC (Super Monte Carlo Simulation Program for Nuclear and Radiation Process)和MCNP (Monte Carlo Neutron Particle transport code)的结果以及实验结果进行了对比验证。
1 OpenMC与辅助程序介绍
目前,最新版本OpenMC可应用于固定源与
k
eff
问题的计算;可以描述一阶、二阶曲面构成的几何体,可以描述重复栅格并可以对栅元进行旋转和移动,使输入卡的书写更为简便。
使用XML输入文件格式
[
8
]
,包括几何卡(geometry.xml)、材料卡(materials.xml)、粒子数卡(settings.xml)、计数卡(tallies.xml)和制图卡(plots.xml)等。其中OpenMC使用碰撞估计与径迹长度估计两种计数方式,可以根据计数卡对面和体积进行网格计数;同时,OpenMC具备二维与三维的标准图片输出模块,可以根据制图卡做出体素图。OpenMC使用的截面格式为通用的ACE (A Compact ENDF)格式,可以使用MCNP或Serpent
[
9
]
中提供的截面数据库。OpenMC自带了Python脚本
[
10
]
用于提取输出文件中的有效数据并进行运用,如statepoint_3d.py、voxel.py等,其输出的Statepoint文件、Voxel文件等经过Python脚本数据提出后可进一步使用VisIt和ParaView软件进行数据可视化处理。作为一款开源、开发中的程序,OpenMC通过GitHub的代码托管并跟踪bug,有利于其他使用者进行接口的编写与扩展开发。
OpenMC主要针对于大规模计算机应用而开发,使用约40000行的Fortran 2008代码编写,基于蒙特卡罗方法本身的优点,OpenMC能有效地还原真实的物理过程;基于其开发目的,能适应于并行框架与数据结构,可以使用OpenMPI/Mpich用于支持MPI并行计算,其中MPI是信息传递应用程序接口
[
11
]
,采用基于信息传递的并行编程技术,可以将一个大型任务分解成多个进程,再把这些进程分配给多个节点进行并行处理,通过计算结果的综合得到最终结果,OpenMPI和Mpich是MPI的应用实现。同时,OpenMC可以使用HDF5分层数据格式输出,HDF5是HDF系列的最新版本,由美国国家超级计算机中心进行开发,一般用来储存不同类型的图形与数据信息,用于满足各个领域需求的高效存储与科学数据的分发
[
12
]
。
2 OpenMC在Linux下的计算模块检测
OpenMC可以在Linux、Mac OS X或Windows操作系统下编译和运行,但纵观全世界的大规模计算平台,大多使用Linux系统,因此在Linux下编译OpenMC,并分析辅助程序对OpenMC的支持性显得十分有意义,选择Linux系统对OpenMC进行计算模块检测。使用的系统为虚拟机下的Linux系统(Ubuntu-15.04),OpenMC版本为0.6.2。
对OpenMPI/Mpich的自检包括6种自检类型:mpi-normal、mpi-debug、mpi-optimize、mpi-omp-normal、mpi-omp-debug、mpi-omp-optimize。每种自检类型均要自检OpenMC自带的85道例题,每道例题均包括geometry.xml、materials.xml、settings.xml基本计算模块,这三种基本模块缺一不可。有的例题还包括tallies.xml(计数模块)、cmfd.xml(粗网格有限差分法模块)等。其中normal、debug、optimize为OpenMC的三种编译方式,normal为未优化的编译方式,debug为在编译时进行调试的编译方式,optimize为在编译时能高度优化的编译方式,对gfortran和Intel Fortran编译器使用-O3优化方式。对HDF5的自检使用全环境检测,包括33种自检类型:basic-normal、basic-debug、basic-optimize、omp-normal、omp-debug、omp-optimize、HDF5-normal、HDF5-debug、HDF5-optimize、omp-HDF5-normal、omp-HDF5-debug、omp-HDF5-optimize、mpi-normal、mpi-debug、mpi-optimize、mpi-omp-normal、mpi-omp-debug、mpi-omp-optimize、pHDF5-normal、pHDF5-debug、pHDF5-optimize、pHDF5-omp-normal、pHDF5-omp-debug、pHDF5-omp-optimize、petsc-normal、petsc-debug、petsc-optimize、pHDF5-petsc-normal、pHDF5-petsc-debug、pHDF5-petsc-optimize、omp-pHDF5-petsc-normal、omp-pHDF5-petsc-debug、omp-pHDF5-petsc-optimize,每种自检类型也均要自检OpenMC自带的85道例题。在以下的自检中针对85道例题及上述各种自检类型都进行了编译自检。
OpenMPI、Mpich、HDF5开发的版本很多,在本研究中,针对每个程序的代码均下载了超过20个版本进行检测,但对于早期的版本未对其进行测试,因考虑其在对现有软件的适用性上可能存在差异,所以对其不进行更多的测试,具体测试的程序版本见下文。
测试的是其官网上能下载到的最新20个版本,由于早期的版本不太适用于后期开发的软件,所以对早前的版本不进行测试。
2.1 基于OpenMPI的OpenMC计算模块检测
对不同版本的OpenMPI进行编译,并在OpenMC下自检,结果见
表 1
。从
表 1
结果可看出,自检通过的版本为:1.8.4、1.8.3、1.8.2、1.8.1、1.8.0、1.7.5、1.7.4。发生自检错误的例题及结果见
表 2
,其中,自检为Fail的不同版本发生自检错误的自检例题均相同,同时不同版本间对应的相同自检错误例题产生的
k
eff
错误结果也相同,都包含三种发生自检错误的自检类型:mpi-omp-normal、mpi-omp-debug、mpi-omp-optimize。每种发生自检错误的自检类型均含有自检错误例题:
1) test_void.py
2) test_reflective_cylinder.py
3) test_confidence_intervals.py
三种发生自检错误的自检类型
3 self checking types of errors
每种自检错误类型均含有以下自检错误项
Each self checking error type contains the following self checking error items
自检的
k
eff
正确值(误差)
Correct value of
k
eff
for self checking (deviation)
实际自检产生的
k
eff
错误值(误差)
k
eff
error value generated by actual self checking (error)
mpi-omp-normal
test_void.py
1.069802 (2.223092×10
-2
)
1.017732 (2.380879×10
-2
)
mpi-omp-debug
test_reflective_cylinder.py
2.276055 (3.186525×10
-3
)
2.274800 (7.381382×10
-3
)
mpi-omp-optimize
test_confidence_intervals.py
2.913599×10
-1
(6.738749×10
-3
)
2.938580×10
-1
(6.543265×10
-3
)
2.2 Mpich的编译和自检
对不同版本的Mpich进行编译,并在OpenMC下自检,结果为各版本的Mpich均不能通过自检,其中Mpich-3.2−Mpich-1.3的16个版本均为编译通过,但自检为Fail;Mpich-1.2.1−Mpich-0.9的20个版本均为不能成功编译。Mpich和OpenMPI自检为Fail的计算结果相同。
由于MIT对OpenMC的基准测试结果采用的是OpenMPI编译环境下的计算结果,只有当OpenMC计算结果与基准结果完全一样时才能通过自检。虽然Mpich可以实现并行,但由于Mpich存储时保存数位和传递过程中保存等问题,可能对计算产生一定的影响,导致计算结果与基准结果存在一定差异,最终体现自检结果为Fail,但这并不代表其结果是不正确的,而我们更倾向于使用OpenMPI的编译环境。
2.3 HDF5的编译和自检
HDF5并行版需要MPI进行编译,选择OpenMPI-1.8.4编译不同版本的HDF5并行版并使用OpenMC全环境检测,得到结果见表 4。从表 4中结果可看出,自检通过的HDF5版本为:1.10.0、1.8.17、1.8.16、1.8.15、1.8.14、1.8.13、1.8.12,其他版本均无法成功编译。
经上述分析可知,OpenMPI自检通过的版本为:1.8.4、1.8.3、1.8.2、1.8.1、1.8.0、1.7.5、1.7.4。Mpich各版本均不能通过自检。HDF5自检通过的版本为:1.10.0、1.8.17、1.8.16、1.8.15、1.8.14、1.8.13、1.8.12。使用以上自检通过的版本的辅助程序能够编译计算结果正确的OpenMC执行码,对于OpenMC的MPI并行不建议使用Mpich程序。
3 基准题验证
使用OpenMC自带的例题能够初步验证编译成执行码的OpenMC的临界计算的正确性,为了进一步验证OpenMC执行码对于临界安全计算的可行性和正确性,选择ICSBEP基准题来进行验证。
ICSBEP是由OECD-NEA (Organisation for Economic Co-operation and Development-Nuclear Energy Agency)组织编撰,目的是为校验进行具有裂变材料装置的临界计算方法和技术,以及确定临界预警的需求
[
13
]
。从该手册中选取了96道典型例题。例题组包括多种裂变材料、反射材料和能谱。物理形式的裂变材料包括金属系统(Metal Systems, MET)、化合物(Compound, COMP)、溶液(Solution, SOL)和混合系统(Miscellaneous Systems, MISC)。基准题涉及各种反射材料,如C、Be、BeO、Al、W、Ni、Fe以及裸堆和溶液堆。基准题的例题组包括三种主要的裂变同位素:
233
U、
235
U、
239
Pu。此外,根据燃料中的
235
U富集度,将
235
U基准题类分成三类:高富集度铀(Highly Enriched Uranium, HEU≥60%)、中等富集度铀(10% < Intermediate Enriched Uranium, IEU < 60%)和低富集度铀(Low Enriched Uranium, LEU≤10%)。例题组也包含各种中子能谱,包括快谱、中间谱及热谱。快谱例题包括了裸球、带重材料反射层的堆芯、轻材料反射层的堆芯。LEU类只包括热谱例题,因为系统不能在中间谱和快谱中达到临界。钚基准题在例题组中用Pu和mix表示。
选取的96道例题均有实验值作为参考,计算的粒子代数为3000代,非活跃代数为20,每代10000个粒子。使用OpenMC-0.6.2计算96道基准题,使用与文献中SuperMC和MCNP相同的ENDF/B-Ⅶ.0
[
14
]
核数据库,将计算结果与文献[
15
]中的结果进行对比,并使用实验值作为参考。所有基准题的计算结果和
k
eff
的实验值及不确定度见
图 2
(使用ICSBEP例题的首字母来简化例题名称,例如,例题名HEU-MET-FAST-001简化为hmf1)。结果表明,OpenMC计算值与实验值及其他程序计算值吻合较好,验证了OpenMC临界安全问题计算的可行性和正确性。
汪晖, 宋婧, 孙光耀, 等. 基于钠冷快堆BN-600的SuperMC基准校验分析[J]. 原子能科学技术, 2015, 49.
WANG Hui, SONG Jing, SUN Guangyao,
et al
. Benchmarking of SuperMC based on sodium cooled fast reactor BN-600[J]. Atomic Energy Science and Technology, 2015, 49.
DOI:10.7538/yzk.2015.49.S0.0016
梁金刚. 反应堆蒙卡程序RMC大规模计算数据并行方法研究[D]. 北京: 清华大学, 2015.
LIANG Jingang. Research on data parallel methods for large-scale calculations with reactor Monte Carlo code RMC[D]. Beijing:Tsinghua University, 2015.
Sutton T M, Donovan T J, Trumbull T H, et al. The MC21 Monte Carlo transport code[C]. ANS Mathematics & Computation Division Topical Meeting, 2007.
MIT Computational Reactor Physics Group. OpenMC documentation release 0.6.2[EB/OL].[2015-05-04].
https://github.com/mit-crpg/openmc/tree/v0.6.2/docs
Wang K, Li Z, She D, et al. RMC:a Monte Carlo code for reactor physics analysis[C]. Joint International Conference on Supercomputing in Nuclear Applications and Monte Carlo (SNA+MC), Paris, France:French Alternative Energies and Atomic Energy Commission, 2013.
Romano P K, Forget B. Parallel fission bank algorithms in Monte Carlo criticality calculations[J]. Nuclear Science and Engineering, 2012, 170(2): 125-135.
DOI:10.13182/NSE10-98
Romano P K, Forget B. The OpenMC Monte Carlo particle transport code[J]. Annals of Nuclear Energy, 2013, 51: 274-281.
DOI:10.1016/j.anucene.2012.06.040
Extensible Markup Language (XML) 1.0.2 edition[EB/OL].[2016-10-20].
http://www.w3.orgTRREC-xml
Jaakko Leppänen. Serpent progress report 2010[R]. VTT-R-01362-11, 2010.
肖建, 林海波. Python编程基础[M]. 北京: 清华大学出版社, 2003.
XIAO Jian, LIN Haibo. Based on Python programming[M]. Beijing: Tsinghua University Press, 2003.
张治宏. 基于MPI的并行计算研究[D]. 北京: 中国地质大学(北京), 2006.
ZHANG Zhihong. The study of parallel computing based on MPI[D]. Beijing:China University of Geosciences (Beijing), 2006.
The HDF Group. HDF5 file format specification[EB/OL].[2016-10-6].
http://www.hdfgroup.org/HDF5
宋婧, 孙光耀, 陈珍平, 等. 蒙特卡罗有效增殖因子计算方法研究[J]. 核科学与工程, 2015(2): 241-245.
SONG Jing, SUN Guangyao, CHEN Zhenping,
et al
. Study on Monte Carlo k-effective calculation method[J]. Nuclear Science and Engineering, 2015(2): 241-245.
DOI:10.3969/j.issn.0258-0918.2015.02.008
Chadwick M B, Obložinský P, Herman M,
et al
. ENDF/B-Ⅶ.0:next generation evaluated nuclear data library for nuclear science and technology[J]. Nuclear Data Sheets, 2006, 107: 2931-3060.
DOI:10.1016/j.nds.2006.11.001
Zhang B, Song J, Sun G,
et al
. Criticality validation of SuperMC with ICSBEP[J]. Annals of Nuclear Energy, 2016, 87: 494-499.
DOI:10.1016/j.anucene.2015.10.004