VASP 编译与使用
原子尺度材料模拟的计算机程序包 (Vienna Ab initio Simulation Package)简称VASP。本节将介绍如何在SonmiHPC集群中使用Intel的OneAPI编译器来编译VASP。
上传并解压源码包
使用SFTP工具或者rz命令上传VASP源码包,并进行解压。
shell
tar xvf vasp.6.4.3.tgz
tar xvf vasp.6.4.3.tgz
修改 makefile.include 文件
进去解压出来的文件夹中,从 arch 文件夹复制 makefile.include.intel 到当前文件夹中:
shell
cd vasp.6.4.3
cp -r arch/makefile.include.intel makefile.include
cd vasp.6.4.3
cp -r arch/makefile.include.intel makefile.include
使用 vim 编辑复制的 makefile.include 文件:
vim makefile.include
// 修改项目的几项
... ...
FC = mpiifx
FCL = mpiifx
... ...
CC_LIB = icx
... ...
CXX_PARS = icpx
... ...
MKLROOT ?=
... ...
vim makefile.include
// 修改项目的几项
... ...
FC = mpiifx
FCL = mpiifx
... ...
CC_LIB = icx
... ...
CXX_PARS = icpx
... ...
MKLROOT ?=
... ...
使用 oneAPI 进行编译
使用下面的命令激活 oneAPI 套件编译环境,并进行编译:
shell
source /opt/intel/oneapi/setvars.sh
make std
source /opt/intel/oneapi/setvars.sh
make std
等待编译完成即可。
创建一个文件夹用于放置编译好的二进制可执行文件:
shell
mkdir -p /share/apps/vasp/6.4.3/bin
cp -r bin/* /share/apps/vasp/6.4.3/bin/
mkdir -p /share/apps/vasp/6.4.3/bin
cp -r bin/* /share/apps/vasp/6.4.3/bin/
为方便集群内其他用户使用,修改该路径权限:
shell
chmod -R 755 /share/apps/vasp
chmod -R 755 /share/apps/vasp
Modulefile 编写
编译好的程序可以通过 Module 模块的方式提供给集群上其他用户使用,可以编写如下的 Modulefile 文件:
shell
mkdir -p /share/apps/modulefiles/vasp
mkdir -p /share/apps/modulefiles/vasp
在该路径下新建一个文件:
shell
cd /share/apps/modulefiles/vasp && vim 6.4.3
cd /share/apps/modulefiles/vasp && vim 6.4.3
新建文件内容如下:
#%Module###########################################
set modulefilename "VASP"
set modulefilever "6.4.3"
set min_tcl_ver 8.4
if { $tcl_version < $min_tcl_ver } {
puts stderr " "
puts stderr "ERROR: This modulefile requires tcl $min_tcl_ver or greater."
puts stderr "Your system reports that tclsh version $tcl_version is installed."
exit 1
}
if { [ module-info mode load ] } {
puts stderr "Loading $modulefilename version $modulefilever"
}
if { [ module-info mode ] == "unload" || [ module-info mode ] == "remove" } {
puts stderr "Removing $modulefilename version $modulefilever"
puts stderr "Use to view any remaining dependent modules."
}
prepend-path PATH /share/apps/vasp/6.4.3/bin
#%Module###########################################
set modulefilename "VASP"
set modulefilever "6.4.3"
set min_tcl_ver 8.4
if { $tcl_version < $min_tcl_ver } {
puts stderr " "
puts stderr "ERROR: This modulefile requires tcl $min_tcl_ver or greater."
puts stderr "Your system reports that tclsh version $tcl_version is installed."
exit 1
}
if { [ module-info mode load ] } {
puts stderr "Loading $modulefilename version $modulefilever"
}
if { [ module-info mode ] == "unload" || [ module-info mode ] == "remove" } {
puts stderr "Removing $modulefilename version $modulefilever"
puts stderr "Use to view any remaining dependent modules."
}
prepend-path PATH /share/apps/vasp/6.4.3/bin
保存文件后,设置一下权限:
shell
chmod -R 755 /share/apps/modulefiles
chmod -R 755 /share/apps/modulefiles
集群上面用户可以通过下面的命令来查看该模块:
[sonmi@sonmi ~]$ module avail
------------------- /share/apps/modulefiles -------------------
vasp/6.4.3
[sonmi@sonmi ~]$ module avail
------------------- /share/apps/modulefiles -------------------
vasp/6.4.3
用户可以通过下面的命令来加载该模块:
shell
module load vasp/6.4.3
module load vasp/6.4.3
使用示例
在用户目录下创建一个 vasp-example,从 VASP 官网下载官方的 TiO2 吸附 H2O 的输入文件。
shell
mkdir ~/vasp-example && cd ~/vasp-example
wget https://www.vasp.at/wiki/images/1/19/H2o_on_tio2.tgz
tar xvf H2o_on_tio2.tgz
cp -r h2o_on_tio2/KPOINTS .
cp -r h2o_on_tio2/POSCAR .
cp -r h2o_on_tio2/POTCAR .
cp -r h2o_on_tio2/constrMD_canonical/INCAR .
mkdir ~/vasp-example && cd ~/vasp-example
wget https://www.vasp.at/wiki/images/1/19/H2o_on_tio2.tgz
tar xvf H2o_on_tio2.tgz
cp -r h2o_on_tio2/KPOINTS .
cp -r h2o_on_tio2/POSCAR .
cp -r h2o_on_tio2/POTCAR .
cp -r h2o_on_tio2/constrMD_canonical/INCAR .
并创建一个提交脚本:
shell
vim submit.sh
vim submit.sh
脚本内容如下:
#!/bin/bash
#SBATCH --job-name=vasp
#SBATCH --partition=sonmi
#SBATCH --output=%j.out
#SBATCH --error=%j.err
#SBATCH --nodelist=compute-0-[0-1]
#SBATCH --exclusive
#SBATCH --time=02:00:00
ulimit -s unlimited
ulimit -l unlimited
module load vasp/6.4.3
source /opt/intel/oneapi/setvars.sh
cd $SLURM_SUBMIT_DIR
mpirun -np 16 vasp_std
#!/bin/bash
#SBATCH --job-name=vasp
#SBATCH --partition=sonmi
#SBATCH --output=%j.out
#SBATCH --error=%j.err
#SBATCH --nodelist=compute-0-[0-1]
#SBATCH --exclusive
#SBATCH --time=02:00:00
ulimit -s unlimited
ulimit -l unlimited
module load vasp/6.4.3
source /opt/intel/oneapi/setvars.sh
cd $SLURM_SUBMIT_DIR
mpirun -np 16 vasp_std
使用下面命令提交即可:
shell
sbatch submit.sh
sbatch submit.sh