第三章 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安装编译的完整流程,你可以对照着检查自己走到哪一步了。
这张图把整个流程串起来了。你从源码开始,经过编译器安装、Makefile配置、编译(串行或并行),最后验证。每一步都有坑,但按部就班走下来,基本不会出大问题。
最后说一句:VASP编译这事,第一次装可能花半天,第二次就半小时。关键是理解每个步骤在干什么,而不是死记命令。我到现在还保留着第一次成功编译时的makefile.include,每次换机器都拿它当模板改一改。
好了,VASP安装编译就这些内容。记住:源码到手、编译器配好、Makefile改对、make敲下去。如果报错,先看环境变量,再看MKL路径,最后检查编译器版本。这三板斧能解决90%的问题。
公众号:蓝海资料掘金营,微信deep3321