这是一个vasp.5.4.4的编译教程(以广州超算为例)
准备好vasp.5.4.4安装包
自行下载,或者邮件给我留言 点击发送电子邮件至liaojinbo1999@163.com ,vasp为商业软件,请确保有授权!
好了,准备好压缩包vasp.5.4.4.tar.gz
,解压,进入解压后的目录。
tar -zxvf vasp.5.4.4.tar.gz
cd vasp.5.4.4/
ls
发现有以下文件和目录
$ ls
arch bin build makefile README src
arch/:该目录通常包含特定于硬件架构的配置文件,例如针对不同操作系统和硬件架构的Makefile模板。你可以在这里选择或创建适合你系统的配置文件。
bin/:该目录通常为空,或者包含最终编译的VASP可执行文件。在编译完成后,VASP的可执行文件会放在这个目录下。
build/:此目录通常包含用于编译过程的临时文件。编译时会生成对象文件和中间文件,最终会被链接到 bin/ 目录中的可执行文件(std、gam、ncl)。
makefile:这个文件是VASP的主Makefile,包含编译VASP所需的各种参数设置和规则。你需要根据你系统的环境编辑这个文件以适应你的编译器和库。
README:该文件通常包含VASP的安装说明、编译和运行的基本指导。在安装之前,建议阅读该文件。
src/:这个目录包含VASP的源代码。编译时,所有源代码文件将被编译成目标文件,然后链接成最终的VASP可执行文件。
配置环境
查看HPC已有的编译器
命令行输入module av
$ module av
--------------------------------------------------- /APP/u22/x86/modulepath/Compilers ---------------------------------------------------
gcc/9.5.0 mpi/mpich/4.1.2-gcc-11.4.0-ch4 mpi/mpich/4.1.2-icx-oneapi2024.2-ch4-dbg
intel/oneapi2023.2_impi mpi/mpich/4.1.2-gcc-11.4.0-ch4-dbg mpi/mpich/4.3.2-icc-oneapi2023.2-ch4
intel/oneapi2023.2_noimpi mpi/mpich/4.1.2-icc-oneapi2023.2-ch3-shared mpi/openmpi/4.1.1-icc-oneapi2023.2-ch4
intel/oneapi2024.2_impi mpi/mpich/4.1.2-icc-oneapi2023.2-ch4 mpi/openmpi/4.1.6-icc-oneapi2023.2-ch4
intel/oneapi2024.2_noimpi mpi/mpich/4.1.2-icc-oneapi2023.2-ch4-dbg mpi/openmpi/5.0.0-gcc-9.5.0-ch4
mpi/mpich/3.4.3-gcc-9.5.0-ch4 mpi/mpich/4.1.2-icx-oneapi2023.2-ch4 mpi/openmpi/5.0.0-gcc-11.4.0-ch4
mpi/mpich/4.1.2-gcc-9.5.0-ch4 mpi/mpich/4.1.2-icx-oneapi2023.2-ch4-dbg mpi/openmpi/5.0.0-icc-oneapi2023.2-ch4
mpi/mpich/4.1.2-gcc-9.5.0-ch4_openfoam mpi/mpich/4.1.2-icx-oneapi2023.2-ch4_openfoam mpi/openmpi/5.0.0-icx-oneapi2023.2-ch4
mpi/mpich/4.1.2-gcc-11.4.0-ch3 mpi/mpich/4.1.2-icx-oneapi2024.2-ch4
我需要使用Intel编译器和MPI编译环境,所以我选择加载这两个
module purge
module load intel/oneapi2023.2_impi
module load mpi/mpich/4.1.2-gcc-11.4.0-ch4
module list
为了确保不与其它模块冲突,所以使用module purge
最开始先卸载所有模块,为了确认是否成功加载模块,使用了module list
命令 检查已加载的模块。
进入arch目录下,选择所需的makefile文件
$cd arch/
$ ls
makefile.include.linux_gnu makefile.include.linux_intel makefile.include.linux_intel_serial makefile.include.linux_pgi
因为我使用intel的编译器,所以我将makefile.include.linux_intel
复制到上一级目录,命名为makefile.include
$ cp makefile.include.linux_intel ../makefile.include
打开上一级目录中自己刚复制过来的makefile.include
发现其内容如下:
# Precompiler options
CPP_OPTIONS= -DHOST=\"LinuxIFC\"\
-DMPI -DMPI_BLOCK=8000 \
-Duse_collective \
-DscaLAPACK \
-DCACHE_SIZE=4000 \
-Davoidalloc \
-Duse_bse_te \
-Dtbdyn \
-Duse_shmem
CPP = fpp -f_com=no -free -w0 $*$(FUFFIX) $*$(SUFFIX) $(CPP_OPTIONS)
FC = mpiifort
FCL = mpiifort -mkl=sequential -lstdc++
FREE = -free -names lowercase
FFLAGS = -assume byterecl -w
OFLAG = -O2
OFLAG_IN = $(OFLAG)
DEBUG = -O0
MKL_PATH = $(MKLROOT)/lib/intel64
BLAS =
LAPACK =
BLACS = -lmkl_blacs_intelmpi_lp64
SCALAPACK = $(MKL_PATH)/libmkl_scalapack_lp64.a $(BLACS)
OBJECTS = fftmpiw.o fftmpi_map.o fft3dlib.o fftw3d.o
INCS =-I$(MKLROOT)/include/fftw
................
这个文件是编译所需的环境,确保环境正常
确保编译环境已加载(也就是前面提到的)
module purge
module load intel/oneapi2023.2_impi
module load mpi/mpich/4.1.2-gcc-11.4.0-ch4
module list
不放心可以再次执行下,或者module list
查看下
开始编译
回到vasp主目录下,开始编译
因为我需要std、gam、和ncl,所以我直接输入make all
,如果没有问题那就会开始编译,等待即可(需要几十分钟)。
编译完成进入./bin
目录下,发现多了这三个执行文件,那么表示以及成功了。
$ cd bin/;ls
vasp_gam vasp_ncl vasp_std
设置环境变量
两种方法
- 将
vasp_gam vasp_ncl vasp_std
所在路径添加到~/.bashrc
(推荐使用)
vi ~/.bashrc
export PATH=/your path/vasp.5.4.4/bin/:$PATH
source ~/.bashrc
- 将其写入脚本
后续会讲到
测试
编译完后测试下是否能正常运行,准备好测试文件
我这里准备了5个文件,分别为INCAR、POSCAR、POTCAR、KPOINTS、vasp-sbatch.sh
脚本编写
在测试前,可能很多人并不知道如何编写一个合适的任务提交脚本,这里我简单介绍下脚本的编写规则
查看官方手册
最简单的就是查看官方的手册,以广州超算来说,打开HPC1系统用户手册
可以找到脚本的编写规则
目前 HPC1 系统部署的资源管理系统包括多种作业提交方式,包括
批处理作业提交方式 yhbatch 和交互作业提交方式 yhrun
。作业终止方式为 yhcancel 命令,需要获取作业的 jobid,可以通过 yhq 命令查看获得。
如果没有交互需求,请使用 yhbatch 提交任务。yhbatch 提交的作业终端关闭 时不会受到影响,登陆结点 down 机时也不会受到影响,强烈推荐使用 yhbatch 提 交任务。
yhbatch 运行的主要格式如下:
yhbatch [options] program
yhbatch 包括多个选项,用户最常使用的选项如下:
-n, --ntasks=ntasks
指定要运行的进程数。请求 yhrun 分配/加载 ntasks 个进程。省缺的情况是每
个 CPU 核运行一个进程,但是-c 参数将改变此省缺值。
-N, --nodes=minnodes[-maxnodes]
请求为此作业至少分配 minnodes 个结点。调度器可能决定在多于 minnodes
个结点上启动作业。可以通过指定 maxnodes 限制最多分配的结点数(如“–
nodes=2-4”)。最少和最多结点数可以相同以便指定确切的结点数(如“–
nodes=2-2”将请求两个并且仅仅两个结点)。如果没有指定-N,省缺的行为是分
配足够的结点以满足-n 选项的要求。
-p, --partition=partition
从分区 partition 请求资源。如未指定,则省缺为默认分区。
-t, --time=minutes
设置作业的运行时间限制为 minutes 分钟。省缺值为分区的时间限制值。当到
达时间限制时,作业的进程将被发送 SIGTERM 以及 SIGKILL 信号终止执行。完
整格式为–time=days-hours:minutes:seconds,建议包机时用户使用该选项。
-D, --chdir=path
加载的作业进程在执行前将工作目录改变到 path 。省缺情况下作业 yhrun 进
程的当前工作目录。
-l, --label
在标准输出/标准错误的每行之前添加任务号。通常,远程任务的标准输出和
标准错误通过行缓冲直接传递到 yhrun 的标准输出和标准错误。–label 选项将在
每行输出前面添加远程任务的 ID。
-J, --job-name=jobname
指定作业的名字。省缺值是可执行程序的名字 program 。
-W, --wait=seconds
指定在第一个任务退出后,到终止所有剩余任务之前的等待时间。0 表示无限
等待(60 秒后将发出一个警告)。省缺值可由系统配置文件中的参数设置。此选
项用于确保作业在一个或多个任务提前退出时能够及时终止。
-w, --nodelist=nodelist|filename
请求指定列表中的结点。分配给作业的将至少包含这些结点。nodelist 可以是
逗号分割的结点列表或范围表达式(如 cn[1-5,7,12])。如果包含“/”字符,则
nodelist 将会被当作是一个文件名,其中包含了所请求的结点列表。
具体不多赘述了,有需要的可以向我要官方文档[ 点击发送电子邮件 ]
编写脚本
以手册为例:
sub.sh 如下:
#!/bin/bash
VASP_BIN=/your path/vasp.5.4.4/bin/vasp_std
yhrun -n 28 -p TH_HPC1 $VASP_BIN
前面提到yhrun
是交互提交作业,虽然可以提交任务,但是要保证窗口一直挂着,且不能断链,这显然是很不方便的,所以还需要yhbatch
提交脚本。
将脚本命名为run.sh
:
#!/bin/bash
module purge
module load intel/oneapi2023.2_impi
module load mpi/mpich/4.1.2-gcc-11.4.0-ch4
module list
export PATH=/your path/vasp.5.4.4/bin/:$PATH
yhbatch -n 28 -p TH_HPC1 -J example1 ./sub.sh
自己写sbatch任务脚本
虽然以上脚本可以满足要求了,但是我还是觉得很麻烦,为什么我需要写两个脚本,我直接写一个多好,所以这是另一个方法,使用的是sbatch
具体用法参照官方手册slurm官方手册
这是我自己的脚本:
#!/bin/bash
#SBATCH -J ljb ## Job Name
#SBATCH -o out.%j ## standard output
#SBATCH -e err.%j ## standard error
#SBATCH -p mars ## Partition
#SBATCH -N 1 ## Number of nodes
#SBATCH --ntasks-per-node=64 ## Each node has n tasks
#SBATCH -t 07-23:57:25 ## time for your job: 2 d,23 h ,57 min and 23 s
module purge
module load intel/oneapi2023.2
module load mpi/mpich/4.1.2-gcc-11.4.0-ch4
export PATH=/your path/vasp.5.4.4/bin/vasp_ncl:$PATH
module list
ulimit -s unlimited
VASP_BIN=/your path/vasp.5.4.4/bin/vasp_std
yhrun $VASP_BIN
运行测试
准备好vasp所需文件:
ls
INCAR KPOINTS POSCAR POTCAR vasp-sbatch.sh
sbatch vasp-sbatch.sh
Submitted batch job 133974
squeue
查看节点状态,显示R
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
133974 mars ljb caep_lts R 1:28 1 cnode5131
显示已提交成功。
检查OUTCAR
或者out.133974
(根据实际名字查看)文件是否正常运行
$ tail out.133974
POSCAR found type information on POSCAR Pb I C N H
POSCAR found : 5 types and 92 ions
scaLAPACK will be used
LDA part: xc-table for Pade appr. of Perdew
POSCAR, INCAR and KPOINTS ok, starting setup
FFT: planning ...
WAVECAR not read
entering main loop
N E dE d eps ncg rms rms(c)
DAV: 1 0.129655355373E+04 0.12966E+04 -0.13885E+05 17024 0.108E+03
顺利运行且无报错,完毕。