本文编译方案通过创建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