蒙特卡罗方法具有方法简单直观、受几何条件限制小、收敛速度与维度无关等优点,所以很早就被用于中子输运、反应堆数值计算等方面。几十年来,随着计算机性能的不断提高,其在反应堆数值模拟方面的应用也越来越广泛[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之间存在支持性问题,对于不同版本辅助程序与蒙特卡罗程序存在的支持性问题,国内尚无对此的文献发表,所以对此进行研究对蒙特卡罗程序的正确编译具有启发意义,并对其他蒙特卡罗程序与不同版本辅助程序的兼容性提供了思考。
|
图 1 OpenMC的相关辅助程序 Figure 1 OpenMC related auxiliary program. |
为了能够编译正常使用的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可应用于固定源与keff问题的计算;可以描述一阶、二阶曲面构成的几何体,可以描述重复栅格并可以对栅元进行旋转和移动,使输入卡的书写更为简便。
使用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的不同版本发生自检错误的自检例题均相同,同时不同版本间对应的相同自检错误例题产生的keff错误结果也相同,都包含三种发生自检错误的自检类型:mpi-omp-normal、mpi-omp-debug、mpi-omp-optimize。每种发生自检错误的自检类型均含有自检错误例题:
1) test_void.py
2) test_reflective_cylinder.py
3) test_confidence_intervals.py
| 表 1 不同版本OpenMPI的编译自检结果 Table 1 Different versions of the OpenMPI compiler and self checking results. |
| 表 2 自检错误项及结果 Table 2 Error items and results. |
对不同版本的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的编译环境。
| 表 3 使用OpenMPI-1.8.4编译不同版本HDF5的OpenMC自检结果 Table 3 Self checking results of OpenMC using OpenMPI-1.8.4 to compile different versions of 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以及裸堆和溶液堆。基准题的例题组包括三种主要的裂变同位素:233U、235U、239Pu。此外,根据燃料中的235U富集度,将235U基准题类分成三类:高富集度铀(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]中的结果进行对比,并使用实验值作为参考。所有基准题的计算结果和keff的实验值及不确定度见图 2(使用ICSBEP例题的首字母来简化例题名称,例如,例题名HEU-MET-FAST-001简化为hmf1)。结果表明,OpenMC计算值与实验值及其他程序计算值吻合较好,验证了OpenMC临界安全问题计算的可行性和正确性。
|
图 2 233U (a)、HEU (b)、IEU (c)、LEU (d)、Pu (e)基准题结果 Figure 2 Results of OpenMC applied to the233U (a), HEU (b), IEU (c), LEU (d) and Pu (e) benchmarks. |
本文在Linux系统下对OpenMPI、Mpich及HDF5各版本程序对0.6.2版本OpenMC源代码的支持情况进行研究,对编译并能通过自检的OpenMC执行码给出了直接参考。选择ICSBEP中的96道代表性例题对OpenMC进行临界基准校验,将OpenMC与通用蒙特卡罗程序的计算结果进行了对比验证并以实验值作为参考,结果表明OpenMC计算值与实验值及其他程序计算值吻合较好,验证了OpenMC临界计算的可行性和正确性,上述结论将为程序以后的实际应用及完善奠定基础。
| [1] |
汪晖, 宋婧, 孙光耀, 等. 基于钠冷快堆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 |
| [2] |
梁金刚. 反应堆蒙卡程序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. |
| [3] |
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.
|
| [4] |
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
|
| [5] |
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.
|
| [6] |
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 |
| [7] |
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 |
| [8] |
Extensible Markup Language (XML) 1.0.2 edition[EB/OL].[2016-10-20].http://www.w3.orgTRREC-xml
|
| [9] |
Jaakko Leppänen. Serpent progress report 2010[R]. VTT-R-01362-11, 2010.
|
| [10] |
肖建, 林海波. Python编程基础[M]. 北京: 清华大学出版社, 2003. XIAO Jian, LIN Haibo. Based on Python programming[M]. Beijing: Tsinghua University Press, 2003. |
| [11] |
张治宏. 基于MPI的并行计算研究[D]. 北京: 中国地质大学(北京), 2006. ZHANG Zhihong. The study of parallel computing based on MPI[D]. Beijing:China University of Geosciences (Beijing), 2006. |
| [12] |
The HDF Group. HDF5 file format specification[EB/OL].[2016-10-6].http://www.hdfgroup.org/HDF5
|
| [13] |
宋婧, 孙光耀, 陈珍平, 等. 蒙特卡罗有效增殖因子计算方法研究[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 |
| [14] |
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 |
| [15] |
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 |

