VASP 编译与使用 
原子尺度材料模拟的计算机程序包 (Vienna Ab initio Simulation Package)简称VASP。本节将介绍如何在SonmiHPC集群中使用Intel的OneAPI编译器来编译VASP。
上传并解压源码包 
使用SFTP工具或者rz命令上传VASP源码包,并进行解压。
shell
tar xvf vasp.6.4.3.tgztar 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.includecd 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 stdsource /opt/intel/oneapi/setvars.sh
make std正常串行编译需要时间较长,可以使用下面的并行编译命令,来加快编译速度:
shell
source /opt/intel/oneapi/setvars.sh
make DEPS=1 -jsource /opt/intel/oneapi/setvars.sh
make DEPS=1 -j等待编译完成即可。
创建一个文件夹用于放置编译好的二进制可执行文件:
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/vaspchmod -R 755 /share/apps/vaspModulefile 编写 
编译好的程序可以通过 Module 模块的方式提供给集群上其他用户使用,可以编写如下的 Modulefile 文件:
shell
mkdir -p /share/apps/modulefiles/vaspmkdir -p /share/apps/modulefiles/vasp在该路径下新建一个文件:
shell
cd  /share/apps/modulefiles/vasp && vim 6.4.3cd  /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/modulefileschmod -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.3module 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.shvim 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.shsbatch submit.sh