第三章 VASP软件安装与编译:从源码到可执行文件

说实话,VASP的安装是很多新手的第一道坎。我记得自己第一次装VASP时,光看Makefile就懵了半天。但别怕,这东西说白了就是一套流程——源码拿到手,编译器配好,Makefile改对,然后敲个make就完事。今天我就带你走一遍完整的安装之路。

3.1 VASP源码获取:你得先有料

VASP不是开源软件,你得有许可证。我个人习惯是直接从VASP官网(vasp.at)下载。拿到的是一个tar.gz压缩包,比如vasp.6.4.1.tgz。

核心要点:源码包解压后,你会看到src/、build/、bin/等目录。src/里是Fortran源码,build/里是Makefile模板。别急着编译,先检查你有没有Intel编译器。

# 解压源码
tar -xzf vasp.6.4.1.tgz
cd vasp.6.4.1

嗯,这里要注意:VASP的版本号很重要。不同版本对编译器版本有要求。我曾在项目中遇到过6.3.0版本和Intel 2021编译器不兼容的问题,后来换到6.4.0才解决。

3.2 Intel编译器与MKL库安装:性能的基石

VASP用Intel编译器跑,性能最好。为什么?因为MKL库对VASP的线性代数运算做了深度优化。你想想看,VASP里大量调用BLAS、LAPACK,用MKL能快30%以上。

安装Intel oneAPI工具包,我建议用离线安装包。在线安装有时会断,很烦人。

# 下载Intel oneAPI Base Toolkit和HPC Toolkit
# 以2023.2.0版本为例
wget https://registrationcenter-download.intel.com/akdlm/irc_nas/19079/l_BaseKit_p_2023.2.0.49397_offline.sh
wget https://registrationcenter-download.intel.com/akdlm/irc_nas/19080/l_HPCKit_p_2023.2.0.49398_offline.sh

# 安装Base Toolkit(包含MKL)
sh l_BaseKit_p_2023.2.0.49397_offline.sh

# 安装HPC Toolkit(包含Intel Fortran编译器)
sh l_HPCKit_p_2023.2.0.49398_offline.sh

我的小技巧:安装时选择自定义安装,只勾选Intel Fortran Compiler和Intel MKL。其他组件用不上,省空间。安装路径我习惯放在/opt/intel/oneapi/下。

安装完成后,设置环境变量:

# 在~/.bashrc中添加
source /opt/intel/oneapi/setvars.sh

# 验证安装
ifort --version
mkl_link_tool

我曾经犯过一个低级错误:忘记source环境变量,结果编译时找不到ifort编译器,报了一堆莫名其妙的错。嗯,这种坑踩过一次就记住了。

3.3 Makefile配置:核心中的核心

VASP的Makefile在arch/目录下。你需要根据机器配置选择一个模板,然后复制到根目录。我个人习惯用makefile.include.linux_intel这个模板。

# 复制模板
cp arch/makefile.include.linux_intel makefile.include

打开makefile.include,你需要修改几个关键参数:

参数 说明 我的推荐值
FC Fortran编译器 ifort
FCL 链接器 ifort
MKLROOT MKL库路径 /opt/intel/oneapi/mkl/latest
OFLAG 优化级别 -O2(稳定)或 -O3(更快)
FFLAGS Fortran编译选项 -assume byterecl -w

警告:OFLAG不要轻易用-O3。我曾在项目中用-O3编译,结果某个体系的计算结果出现微小偏差。后来换成-O2就正常了。稳定第一,速度第二。

下面是一个典型的makefile.include片段:

# 编译器设置
FC = ifort
FCL = ifort

# MKL路径
MKLROOT = /opt/intel/oneapi/mkl/latest

# 优化选项
OFLAG = -O2
FFLAGS = -assume byterecl -w

# 链接MKL库
MKL_LIBS = -L$(MKLROOT)/lib/intel64 \
           -lmkl_intel_lp64 -lmkl_intel_thread \
           -lmkl_core -liomp5 -lpthread -lm -ldl

嗯,这里要注意:不同版本的MKL库名可能略有不同。我建议用mkl_link_tool工具自动生成链接参数,省得自己拼写。

3.4 串行与并行编译:单核还是多核?

VASP支持串行和并行两种编译方式。串行版适合小体系测试,并行版才是干活用的。

3.4.1 串行编译

串行编译最简单,直接make就行。但说实话,现在谁还用串行VASP?除非你只是跑个几原子的测试。

# 串行编译
make std

编译完成后,可执行文件在bin/目录下,叫vasp_std。

3.4.2 并行编译(MPI)

并行编译需要MPI库。我推荐用Intel MPI,和Intel编译器配合最好。安装Intel HPC Toolkit时已经包含了Intel MPI。

# 设置MPI环境
source /opt/intel/oneapi/mpi/latest/env/vars.sh

# 修改makefile.include,添加MPI支持
FC = mpiifort
FCL = mpiifort

# 并行编译
make std gam ncl

这里解释一下三个目标:

  • std:标准版,支持Gamma点计算
  • gam:仅Gamma点版,速度更快
  • ncl:非共线版,用于自旋轨道耦合计算

我一般三个都编译,省得后面切换计算类型时重新编译。

避坑指南:我曾经在并行编译时忘记设置MPI环境变量,结果编译出来的还是串行版。跑大体系时发现CPU利用率只有100%(应该接近100%×核心数),排查了半天才发现问题。所以编译前一定要确认mpirun命令能正常使用。

3.5 编译验证:跑个测试看看

编译完成后,别急着用。先跑VASP自带的测试集验证一下。

# 进入测试目录
cd testsuite

# 运行测试
./runtest.pl -j 4

测试通过后,你会看到类似这样的输出:

Test Summary:
  Total: 120
  Passed: 118
  Failed: 2

如果失败数太多,说明编译有问题。我遇到过MKL库版本不匹配导致部分测试失败的情况,换回推荐版本就解决了。

3.6 知识体系总览

下面这张图总结了VASP安装编译的完整流程,你可以对照着检查自己走到哪一步了。

VASP安装编译知识体系 1. 源码获取 VASP官网下载tar.gz包 2. 编译器安装 Intel oneAPI + MKL 3. Makefile配置 修改makefile.include 4. 编译 make std / gam / ncl 串行编译 单核运行,适合测试 并行编译(MPI) 多核运行,生产环境 5. 编译验证 运行测试集,检查通过率 关键点:编译器版本匹配、MKL路径正确、MPI环境变量设置

这张图把整个流程串起来了。你从源码开始,经过编译器安装、Makefile配置、编译(串行或并行),最后验证。每一步都有坑,但按部就班走下来,基本不会出大问题。

最后说一句:VASP编译这事,第一次装可能花半天,第二次就半小时。关键是理解每个步骤在干什么,而不是死记命令。我到现在还保留着第一次成功编译时的makefile.include,每次换机器都拿它当模板改一改。

好了,VASP安装编译就这些内容。记住:源码到手、编译器配好、Makefile改对、make敲下去。如果报错,先看环境变量,再看MKL路径,最后检查编译器版本。这三板斧能解决90%的问题。


公众号:蓝海资料掘金营,微信deep3321