本文编译方案通过创建Conda环境,安装gcc/gfortran/openmpi/openblas/scalapack/hdf5,编写makefile.include,设置编译器与链接标记最终完成VASP的编译。
环境创建与依赖安装
# 创建并激活环境(Python 3.10 为推荐版本)
conda create -n vasp_env python=3.10 -y
conda activate vasp_env
# 安装编译工具链、MPI、数学库、HDF5、FFTW 等
conda install -c conda-forge \
gcc=13 gxx=13 gfortran=13 \
openmpi=4.1 \
hdf5=1.14 \
openblas scalapack \
fftw \
cmake make -y
设置环境变量(编译前执行)
export CC=$CONDA_PREFIX/bin/gcc
export CXX=$CONDA_PREFIX/bin/g++
export FC=$CONDA_PREFIX/bin/gfortran
export OMPI_CC=$CC
export OMPI_CXX=$CXX
export OMPI_FC=$FC
export MPICC=$CONDA_PREFIX/bin/mpicc
export MPICXX=$CONDA_PREFIX/bin/mpicxx
export MPIFC=$CONDA_PREFIX/bin/mpif90
export HDF5_HOME=$CONDA_PREFIX
export PATH=$CONDA_PREFIX/bin:$PATH
export LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$LD_LIBRARY_PATH
makefile.include
# 预处理器选项
CPP_OPTIONS = -DHOST=\"LinuxGNU\" \
-DMPI -DMPI_BLOCK=8000 -Duse_collective \
-DscaLAPACK \
-DCACHE_SIZE=4000 \
-Davoidalloc \
-Dvasp6 \
-Dtbdyn \
-Dfock_dblbuf \
-DVASP_HDF5
# 预处理规则
FUFFIX = .F
SUFFIX = .f90
CPP = $(FC) -E -P -cpp -o $*$(SUFFIX) $*$(FUFFIX) $(CPP_OPTIONS)
# 编译器
FC = mpifort
FCL = mpifort -no-pie
# Fortran 选项(-std=legacy 兼容旧语法,-fallow-argument-mismatch 解决参数不匹配)
FREE = -ffree-form -ffree-line-length-none
FFLAGS = -w -fbacktrace -fallow-argument-mismatch -std=legacy
OFLAG = -O2 -march=native -mtune=native
OFLAG_IN = $(OFLAG)
DEBUG = -O0 -g
# vasp.lib 部分
CPP_LIB = $(CPP)
FC_LIB = $(FC)
CC_LIB = mpicc
CFLAGS_LIB = -O
FFLAGS_LIB = -O1
FREE_LIB = $(FREE)
OBJECTS_LIB = linpack_double.o
# parser 库
CXX_PARS = mpic++
LLIBS = -lstdc++
# 数学库(OpenBLAS + ScaLAPACK)
LLIBS += -L$(CONDA_PREFIX)/lib -lscalapack -lopenblas -lpthread -lm -ldl
INCS = -I$(CONDA_PREFIX)/include
# FFTW 库(VASP 需要)
LLIBS += -L$(CONDA_PREFIX)/lib -lfftw3 -lfftw3f
INCS += -I$(CONDA_PREFIX)/include
# HDF5 库
LLIBS += -L$(CONDA_PREFIX)/lib -lhdf5_fortran -lhdf5 -lz
INCS += -I$(CONDA_PREFIX)/include
# Wannier90 接口(若不需要可注释这两行)
# CPP_OPTIONS += -DVASP2WANNIER90v2
# LLIBS += /path/to/your/libwannier.a
# TRIQS 接口
# TRIQS_INC = -I$(CONDA_PREFIX)/include/triqs
# TRIQS_LIB = -L$(CONDA_PREFIX)/lib -ltriqs
# FFLAGS += $(TRIQS_INC)
# LDFLAGS += $(TRIQS_LIB)
# FCL += $(LDFLAGS)
# 子库构建
#LIB = lib parser pyamff_fortran
最后完成编译
make std ncl