编译 VASP
很多文献都提到了 VASP 这个计算工具,我当然需要自己去尝试着用一用。因为提供的只有源代码,所以我们需要自己来进行编译。
Intel 编译器
VASP 推荐我们使用 Intel 的编译器。参考 文档,利用 Intel 编译器需要的配置比较少。
- 安装 Intel 编译器
- 配置环境变量,在
/etc/profile
文件末尾添加以下命令
source /opt/intel/bin/compilervars.sh intel64
- 复制编译配置文件
cp arch/makefile.include.linux_intel ./makefile.include
- 编译
make all
编译过程中我遇到报错找不到 libfftw3xf_intel.a
这时候需要我们自己去文件夹中编译
sudo su -
cd /opt/intel/mkl/interfaces/fftw3xf
make libintel64
之后再重新编译 VASP 就好。
GNU 编译器
除了推荐的 Intel 编译器以外,VASP 也支持用 GNU 编译器来编译。不过据介绍,速度会慢一写,不过我本来就只是用来学习,所以对性能的需求并不高。
VASP 文档提供了一个 教程,所以我就按照这个来编译。
- 首先安装编译所需的各种依赖
sudo apt-get install make build-essential g++ gfortran
- 安装所需的各种库
sudo apt-get install libblas-dev liblapack-dev libopenmpi-dev libscalapack-mpi-dev libfftw3-dev
- 解压 VASP 源代码,这里用的版本是
5.4.1.05Feb16
tar -xzvf vasp.5.4.1.05Feb16.tar.gz
cd vasp.5.4.1
- 创建一个
makefile.include
文件,内容如下
# Precompiler options
CPP_OPTIONS= -DHOST=\"LinuxGNU\" \
-DMPI -DMPI_BLOCK=8000 -Duse_collective \
-DscaLAPACK -DCACHE_SIZE=4000 \
-Davoidalloc -Duse_bse_te \
-Dtbdyn -Duse_shmem
CPP = gcc -E -P -C -w $*$(FUFFIX) >$*$(SUFFIX) $(CPP_OPTIONS)
FC = mpif90
FCL = mpif90
FREE = -ffree-form -ffree-line-length-none
FFLAGS = -w
OFLAG = -O2 -mtune=native -m64
OFLAG_IN = $(OFLAG)
DEBUG = -O0
LIBDIR = /usr/lib/x86_64-linux-gnu
BLAS = -L$(LIBDIR) -lblas
LAPACK = -L$(LIBDIR) -llapack
BLACS =
SCALAPACK = -L/usr/lib -lscalapack-openmpi $(BLACS)
LLIBS = $(SCALAPACK) $(LAPACK) $(BLAS)
LLIBS += -lfftw3
INCS = -I/usr/include
OBJECTS = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o
OBJECTS_O1 += fftw3d.o fftmpi.o fftmpiw.o
OBJECTS_O2 += fft3dlib.o
# For what used to be vasp.5.lib
CPP_LIB = $(CPP)
FC_LIB = $(FC)
CC_LIB = gcc
CFLAGS_LIB = -O
FFLAGS_LIB = -O1
FREE_LIB = $(FREE)
OBJECTS_LIB= linpack_double.o getshmem.o
# For the parser library
# CXX_PARS = g++
# LIBS += parser
# LLIBS += -Lparser -lparser -lstdc++
# Normally no need to change this
SRCDIR = ../../src
BINDIR = ../../bin
- 编译
make std gam ncl