1. VaReCoF简介
该程序实现了可变反应坐标过渡态理论(VRCTST)和任意无势垒反应的刚体轨迹模拟。VaReCoF可通过与 MOLPRO 和 GAUSSIAN 电子结构代码的接口直接进行从头算评估,计算得到热高压复合速率常数和微正则E/J分辨的反应通量。
-
VaReCoF程序的显著特点:
①每个片段的任意枢轴点数量
②对枢点位置和距离进行方便的采样
③应用一维修正势垒 -
VaReCoF程序的主要运行代码
①TST_test
该代码提供了运行multi所需的输入文件格式的预处理测试。出于参考目的,它会生成divsur.out文件,其中列出了要分割的分割曲面。
②multi
这是主要的VRC-TST代码。它会生成flux.dat文件,其中包含每个分割曲面的E,J解析反应通量。
③convert_multi
该代码根据flux.dat文件生成VRC-TST热高压重组率预测。 -
VaReCoF程序的输入文件
①tst.inp
指定计算的详细信息,如E、J和T的网格、电位采样数、收敛级别、电位类型和分割曲面类型。
②structure.inp
指定两个片段的原子、质量和笛卡尔坐标。
③divsur.inp
通过指定每个片段的枢轴点来指定要探索的分割曲面集。
④molpro.inp
指定势能面计算的各个方面,包括用于直接从头计算和附加到直接计算值的任何分析校正势的模板的连接。
⑤*.tml
提供了一个用于从头计算的模板,用于估计两个片段之间的相互作用能。
2. 软件容器化
考虑到VaReCoF程序所依赖的环境限制以及和Molpro程序的联合使用需求,我们利用Singularity容器技术将VaReCoF和Molpro这两个软件打包成sif格式的容器,在集群上运行使用,保证计算的可靠性和可重复性。下面,将介绍VaReCoF_Molpro容器构建过程:
2.1 构建VaReCoF容器
考虑到软件依赖、环境变量的复杂性,我们将VaReCoF的定义文件分成两部分进行编写,首先在基础定义文件(VaReCoF_base_apptainer16.def)里编写VaReCoF程序必要的环境依赖,包括openmpi、gcc、make、blas、openblas等。
Bootstrap: docker
From: ubuntu:16.04
%post
# Set the environment variable for non-interactive frontend
export DEBIAN_FRONTEND=noninteractive
# Change apt source to USTC
sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
# Update package list
apt-get update -y
# Set the desired timezone
apt-get install -y tzdata
ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# Configure the tzdata package
dpkg-reconfigure --frontend noninteractive tzdata
# Install necessary dependencies
apt-get install -y openmpi-bin libopenmpi-dev make cmake gcc libblas-dev checkinstall libopenblas-dev
# Clean up apt cache to reduce image size
apt-get clean
rm -rf /var/lib/apt/lists/*
编写好基础def文件后,通过运行下述命令产生sif格式的基础容器(VaReCoF_base_apptainer16.sif)。
singularity build VaReCoF_base_apptainer16.sif VaReCoF_base_apptainer16.def
完成基础容器构建后,在其基础上编写VaReCoF定义文件(VaReCoF_apptainer16.def),其中包含conda环境、slatec和varecof程序的构建。
Bootstrap: localimage
From: VaReCoF_base_apptainer16.sif
%files
VaReCoF-master /opt/VaReCoF-master
%post
# 安装Miniconda
apt -y update
apt install wget unzip -y
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/conda
rm Miniconda3-latest-Linux-x86_64.sh
# 初始化conda
export PATH=/opt/conda/bin:$PATH
/opt/conda/bin/conda init bash
# 创建一个新的conda环境
conda create -n MESS110 python=3.8 -y
# Activate the Conda environment for subsequent commands
/bin/bash -c "source /opt/conda/bin/activate MESS110"
#source /opt/conda/bin/activate MESS110
# Install additional Conda packages
conda install -c auto-mech slatec -y
# 设置C++编译器
export CXX=g++
# 构建VaReCoF
cd /opt/VaReCoF-master
bash build.sh
/bin/bash -c "source /opt/conda/bin/deactivate MESS110"
#source /opt/conda/bin/deactivate
%environment
# 设置环境变量
export PATH=/opt/conda/envs/MESS110/bin:/opt/VaReCoF-master/bin:$PATH
export CXX=g++
然后利用下述命令产生VaReCoF容器(VaReCoF_apptainer16.sif)。
singularity build VaReCoF_apptainer16.sif VaReCoF_apptainer16.def
2.2 构建VaReCoF_Molpro容器
由于Molpro软件已经成功安装在集群服务器上,我们采用直接复制molpro安装目录的方法进行定义文件(VaReCoF_molpro_apptainer16.def)的编写,当然对于molpro应用程序的路径进行了修改,另外调整了Molpro的使用权限以及两个软件的环境变量设置。
Bootstrap: localimage
From: VaReCoF_apptainer16.sif
%files
molpro/molpro2022 /opt/molpro2022
%post
# No changes needed here unless there are additional installation steps for molpro
chown -R 777 /opt/molpro2022
chmod -R u+x /opt/molpro2022
%environment
# 设置环境变量
export PATH=/opt/conda/envs/MESS110/bin:$PATH
export PATH=/opt/molpro2022/bin:$PATH
export PATH=/opt/VaReCoF-master/build:$PATH
export CXX=g++
export LD_LIBRARY_PATH=/opt/molpro2022/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/opt/VaReCoF-master/build:$LD_LIBRARY_PATH
# Ensure Conda environment is activated when using the container
. /opt/conda/bin/activate MESS110
%runscript
# Ensure Conda environment is activated when running the container
exec /bin/bash -c "source /opt/conda/bin/activate MESS110 && \"$@\""
在完成定义文件编译后,更改复制的文件夹中molpro应用程序的路径:
cd molpro/molpro2022/bin #切换到对应的目录下
打开该目录下的molpro文件,进行更改
MOLPRO_PREFIX='/opt/molpro2022'
然后运行命令生成包含VaReCoF和Molpro程序的容器(VaReCoF_molpro_apptainer16.sif)。
singularity build VaReCoF_molpro_apptainer16.sif VaReCoF_molpro_apptainer16.def
3. 使用方法
3.1 输入文件的准备
准备各种输入文件(tst.inp、divsur.inp、structure.inp、molpro.inp、*.tml),将所有输入文件放置在工作目录下,并加载到计算任务所在的文件夹。
3.2 SBATCH脚本
#!/bin/bash
#SBATCH --partition=Nebula_Chubby
#SBATCH --nodelist=node2
#SBATCH -N 1
#SBATCH --tasks-per-node=1
#SBATCH --cpus-per-task=16
#SBATCH --output="Output_%x"
#SBATCH --error="Error_%x"
apptainer exec --cleanenv /mnt/softs/singularity_sifs/VaReCoF_molpro_apptainer16.sif \
mpirun -n 5 \
-map-by socket \
-bind-to socket \
-x OMP_PROC_BIND=True \
-x OMP_PLACES=sockets \
-x OMP_NUM_THREADS=4 \
-x OMP_STACKSIZE=512m \
-x OMP_DISPLAY_ENV=VERBOSE \
--report-bindings \
multi tst.inp
注:
- “#SBATCH –tasks-per-node=1 #SBATCH –cpus-per-task=16”,当两者数值对换时,cpu利用率很低。
- "mpirun-n 5\ -x OMP_NUM_THREADS=4 \", Molpro 占用*(5-1)4=16**核心,会产生4个node文件夹 node1-4。
- 在进行测试时发现出现了下述报错信息:
master: floating-point exception: inexact node 1: floating-point exception: inexact node 2: floating-point exception: inexact node 3: floating-point exception: inexact node 4: floating-point exception: inexact
对于此浮点问题,可能是编译器gcc版本原因导致。
- 关于mpi进程、线程的设置,将进一步测试,寻求最优参数设置。