很多文献都提到了 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

标签: VASP, 编译