DAGMC简介
DAGMC是Direct Accelerated Geometry Monte Carlo的缩写,如其名字所示,DAGMC设计了一套方便高效的几何手段,用于蒙特卡罗方法的计算。DAGMC已经有了与MCNP5, MCNP6, Geant4, FLUKA, Tripoli4和Shift结合的相应工具。即使用DAGMC的几何处理部分,配合其他工具的物理计算部分代码,实现蒙特卡罗计算。
DAGMC依赖软件安装
DAGMC可以用来和PyNE配合来进行停机剂量计算工作。PyNE的安装可以参考PyNE的开发版本安装。DAGMC的安装可以参考官方安装指导。DAGMC依赖于MOAB。
安装HDF5
电脑中可能已经安装了HDF5了,我们可以通过下面的命令来检查它的版本:
1 | dpkg -s libhdf5-dev |
如果没有安装的话,通过下面的命令安装:
1 | sudo apt-get install hdf5-dev |
Install MOAB as described here.
安装MPI
电脑如果还没有安装MPI的话,推荐安装mpich:
1 | sudo apt install mpich libmpich-dev |
NOTE:在服务器及台式机上测试发现,OpenMPI 4.0.2, 3.1.4, 2.1.1和当前版本的并行DAGMC不兼容,可以编译成功,但运行时会出现Segmentation fault。因此,在推荐使用MPICH (3.2.1)。
安装DAGMC
完成HDF5和MOAB的安装后,我们可以安装DAGMC了。
假设我们要把DAGMC安装在$HOME/opt/DAGMC文件夹下,可以按照下面的步骤进行。
获取DAGMC源代码
1 | cd $HOME/opt |
安装DAGMC
这个步骤需要相应的物理计算部分的源代码。请参考官方文档选择相应版本执行后续安装步骤。
下面以安装DAG-MCNP v1.xx为例说明安装过程
patch
1 | cd mcnp/mcnp5 |
配置
1 | cd $HOME/opt/DAGMC/DAGMC |
添加路径到~/.bashrc
1 | export PATH=$PATH:$HOME/opt/DAGMC/bin |
编译带用于R2S的源子程序的DAGMC
上面的步骤是编译DAGMC的通用流程。但是当我们需要配合PyNE进行R2S计算的DAGMC时,需要修改源子程序,修改及其编译说明可以参考官方文档。
如果是第一次安装DAGMC,想直接安装配合PyNE的DAGMC,那么需要上述安装步骤的patch之后配置之前加入如下步骤:
- Navigate to the folder MCNP5/Source/src.
- Soft-link the following files into this folder:
- pyne/src/source_sampling.cpp
- pyne/src/source_sampling.h
- pyne/src/measure.cpp
- pyne/src/measure.h
- Remove the pre-existing empty source.F90 file.
- Soft-link pyne/share/source.F90.
- Open the file MCNP/Source/src/FILE.list.
- Edit file, add CXX_SRC under C_SRC to include the additional source files. It should look like “CXX_SRC := measure.cpp source_sampling.cpp”.
然后接着配置之后的步骤进行即可。
如果是已经安装过DAGMC,则可以省去patch及patch之前的步骤,直接使用上面的修改,然后进行配置编译即可。
备注: 进行上述修改步骤时,必须注意两点:
- 确保系统路径中的MOAB版本>=5.1, 注意$MOAB_DIR
- 确保pyne的branch是你需要的branch
- 安装完后请务必用小例子进行测试。请注意mpirun的版本,如果电脑上同时有mpich和openmpi,当使用mpich编译程序,但用openmpi的mpirun运行,会出现同时有多个线程独立运行而不是并行计算的情况。
服务器配置DAGMC可能出现的错误
GNU版本问题
经过实践发现,GNU 7.2.0版本的会导致DAG-MCNP6编译失败,错误表现为编译Source/regl/regl_setup_mod.F90时, WRITE语句出现Syntax Error.
而GNU 7.3.1, 7.4.0和9.1.0经过测试能够编译成功。因此编译DAG-MCNP时应该使用GNU >= 7.3.1。
PS: 使用高版本GNU时,可能会出现系统上或anaconda3/lib中的libstdc++.so版本低,导致出现”GLIBCXX_3.4.2*“找不到的问题,需要把libstdc++.so更新一下。使用conda update conda或者 conda install -c anaconda libstdcxx-ng可以解决这个问题。
PS1: conda update conda或者conda install -c anaconda libstdcxx-ng是出现“InvalidVersionSpecError: Invalid version spec: =2.7”这样的问题的话,可以把~/.condarc中包含”conda-forge”的channel删掉重试即可,可以参考这里.
HDF5兼容性问题
MOAB/DAGMC/PyNE/OpenMC这些软件是我经常要配置在服务器的。其中MOAB/PyNE/OpenMC使用Python3环境。但由于服务器不能像台式机那样sudo apt install/pip install将软件装在系统目录,使用anaconda创建环境是我目前使用的方案。
这样就出现一个问题,MOAB/DAGMC/PyNE/OpenMC本身依赖HDF5,而conda环境中的一些软件包也使用HDF5环境。如果两个地方使用的版本不一致,则会导致程序可以编译,但执行时HDF5文件无法正常打开调研,导致运行失败。
由于conda环境中的一些软件包不能便捷的使用外部HDF5,因此,为了统一HDF5,则使用conda中的HDF5来编译MOAB/DAGMC/PyNE/OpenMC,这时需要将anaconda3/lib加入到LD_LIBRARY_PATH以便这些程序运行时可以找到HDF5的动态链接库。