☰
VASP 6.3.2 安装教程续:2024 Intel OneAPI 编译配置与运行测试
2026/9/26 3:19:32 网站建设 项目流程

1. 为什么 2024 年重装 VASP 6.3.2 会卡在编译这一步

如果你在 2023 年跟着老教程装过 VASP 6.3.2,2024 年再照做大概率会在make all阶段翻车。原因不复杂:Intel 在 2024 版 OneAPI 里把编译器前端从icc/icpc换成了icx/icpx,ifort虽然还在但默认行为有调整,MKL 里fftw3xf的接口目录也挪了位置。老makefile.include里写死的CC_LIB = icc会直接报 command not found,或者链接阶段找不到libmkl_blacs_intelmpi_ilp64.so.2。

这篇是续篇,假设你已经装好了 Ubuntu(物理机或 WSL2 都行)、装好了 2024 版 Intel OneAPI 的 Base Toolkit 和 HPC Toolkit、也拿到了vasp.6.3.2.tgz。我要交付的是三样东西:一份能直接复制的makefile.include骨架、一组环境变量配置、以及一次完整的运行测试验证动作。目标很明确——让你确认编译出来的vasp_std真的能跑,而不是编译完就扔那儿。

适合谁看:已经装完基础环境、卡在编译或运行测试环节的科研用户。如果你连 OneAPI 都还没装,先去把 Base Toolkit 和 HPC Toolkit 装完再回来,那部分不是本篇重点。

先说结论:2024 版 OneAPI 下 VASP 6.3.2 能编过,但需要改三处——编译器变量、FFTW 接口路径、以及运行时的动态库路径。下面按顺序来。

2. 编译前的环境确认与 TaoToken 前置说明

在动makefile.include之前,先确认 OneAPI 环境变量能正常加载。这一步很多人跳过,结果后面报错找不到icx,又回头查半天。

source /opt/intel/oneapi/setvars.sh which icx which icpx which ifort which mpirun echo $MKLROOT

四条which都要返回具体路径,MKLROOT要指向/opt/intel/oneapi/mkl/2024.x。如果mpirun没返回,说明 HPC Toolkit 的 MPI 没进 PATH,后面单独处理。

这里插一句关于 TaoToken 的位置。VASP 编译本身是纯本地计算,不依赖任何在线服务。但编译过程中如果遇到报错想快速查资料、或者想把 INCAR 参数、KPOINTS 设置拿去和模型对话确认,可以用 TaoToken 的模型对话入口做辅助排查。它的 API 地址是 https://taotoken.net/api ,模型对话 deep link 是 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=model_chat 。注意这是辅助查资料用的,不是编译依赖,别搞混。

如果你后面要长期跑 VASP 任务、写脚本做批量提交,或者用 Agent 类工具管理计算流程,可以看 Coding Plan: https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=coding_plan 。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=doc ,API Keys 管理在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=api_keys 。这些是给后续工作流用的,编译阶段用不上。

回到编译。确认环境没问题后,先编译 MKL 的 FFTW 接口,这是 2024 版最容易踩的坑。

3. 可复制的 makefile.include 骨架与 FFTW 接口编译

3.1 先编 libintel64

2024 版 OneAPI 的fftw3xf目录变了,老教程里的路径找不到。实际位置在:

/opt/intel/oneapi/mkl/2024.0/share/mkl/interfaces/fftw3xf

如果你的 OneAPI 装在 home 目录下,就是~/intel/oneapi/mkl/2024.0/share/mkl/interfaces/fftw3xf。cd 进去之后:

cd /opt/intel/oneapi/mkl/2024.0/share/mkl/interfaces/fftw3xf source /opt/intel/oneapi/setvars.sh make libintel64

成功后当前目录会出现libfftw3xf_intel.a。这个文件后面链接要用,记下路径。

3.2 解压与复制模板

tar -zxvf vasp.6.3.2.tgz cd vasp.6.3.2 cp arch/makefile.include.intel makefile.include

3.3 修改 makefile.include

用 vim 打开makefile.include,重点改这几处。2024 版必须把icc/icpc换成icx/icpx:

# 预编译头与编译器 CPP_OPTIONS = -DHOST=\"LinuxIFC\" -DMPI -DMPI_BLOCK=8000 -Duse_collective \ -DscaLAPACK -Duse_shmem -DNGZhalf -DCACHE_SIZE=4000 \ -Davoidalloc -Duse_bse_te -Dtbdyn -Dfock_dblbuf CPP = icpx -E -P -C -w FC = mpif90 -m64 -I/opt/intel/oneapi/mkl/2024.0/include/fftw FCL = mpif90 -m64 -I/opt/intel/oneapi/mkl/2024.0/include/fftw # 关键:2024 版用 icx/icpx CC_LIB = icx CXX_PARS = icpx # 链接库 MKL_PATH = /opt/intel/oneapi/mkl/2024.0/lib/intel64 BLAS = -L$(MKL_PATH) -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core LAPACK = -L$(MKL_PATH) -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core BLACS = -L$(MKL_PATH) -lmkl_blacs_intelmpi_lp64 SCALAPACK = -L$(MKL_PATH) -lmkl_scalapack_lp64 # FFTW 接口指向刚编出来的 .a FFTW = /opt/intel/oneapi/mkl/2024.0/share/mkl/interfaces/fftw3xf/libfftw3xf_intel.a # 链接选项 LIB = -L$(MKL_PATH) -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core \ -lmkl_blacs_intelmpi_lp64 -lmkl_scalapack_lp64 -lpthread -lm

注意FFTW那一行,直接指向你刚编出来的.a文件绝对路径,比用-lfftw3xf_intel更稳,避免链接器找不到。

3.4 编译

source /opt/intel/oneapi/setvars.sh make all

正常耗时 20 到 40 分钟,取决于机器。如果两分钟就结束,基本可以判定编译失败或跳过了大部分目标,去bin/目录看有没有vasp_std。

编译完成后:

ls bin/ # 应该看到 vasp_std vasp_gam vasp_ncl

4. 运行测试:用 benchmark 验证 vasp_std 可用

编译产物存在不等于能跑。必须做一次真实计算验证。

4.1 准备测试目录

mkdir -p ~/vasp_workfile cd ~/vasp_workfile # 把 benchmark 测试包放进来,解压 tar -zxvf vasp_workfile.tar.gz cd benchmark.Hg

目录里会有IN-short和IN-long,分别是短任务和长任务的 INCAR。先用短的:

mv IN-short INCAR

4.2 配置运行环境

在~/.bashrc末尾追加,解决mpirun和动态库找不到的问题:

export PATH=$PATH:/opt/intel/oneapi/mpi/2021.11/bin export PATH=$PATH:/opt/intel/oneapi/mkl/2024.0/lib export PATH=$PATH:$HOME/vasp.6.3.2/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/intel/oneapi/mkl/2024.0/lib/intel64

然后:

source ~/.bashrc

4.3 执行测试

mpirun -np 2 vasp_std

用 2 个核心跑。跑完后检查OUTCAR:

grep "General timing" OUTCAR grep "reached required accuracy" OUTCAR tail -20 OUTCAR

如果看到General timing and accounting informations for this run且没有Error字样,说明编译产物可用。OSZICAR里应该有能量收敛的迭代记录。

4.4 成功标志对照

检查项正常表现异常表现
OUTCAR 末尾有 timing 信息中途中断无 timing
OSZICAR有电子步迭代空文件或报错
进程退出码0非 0
运行时长数分钟秒退

5. 本篇常见错误排查

5.1 mpirun not found

普通用户调用mpirun报找不到,原因是 MPI 的 bin 目录没进 PATH。确认路径:

ls /opt/intel/oneapi/mpi/2021.11/bin/mpirun

然后在~/.bashrc加:

export PATH=$PATH:/opt/intel/oneapi/mpi/2021.11/bin source ~/.bashrc

5.2 libmkl_blacs_intelmpi_ilp64.so.2 未找到

运行时报这个,说明动态库路径没配。该文件在/opt/intel/oneapi/mkl/2024.0/lib/intel64。在~/.bashrc加:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/intel/oneapi/mkl/2024.0/lib/intel64

注意是LD_LIBRARY_PATH不是PATH,这两个别写混。

5.3 vasp_std not found

编译产物在vasp.6.3.2/bin/下,但该目录没进 PATH。加:

export PATH=$PATH:$HOME/vasp.6.3.2/bin

如果你把 VASP 装在别的位置,换成实际路径。

5.4 编译报 icc command not found

说明makefile.include里还留着CC_LIB = icc。2024 版 OneAPI 已移除 icc,改成icx。同理CXX_PARS改成icpx。

5.5 链接阶段报 fftw3xf 相关 undefined reference

FFTW变量没指向正确的.a文件。回到 3.1 确认libfftw3xf_intel.a生成位置,把绝对路径写进makefile.include。

5.6 运行测试秒退

先看OUTCAR最后几行,通常是 POTCAR 路径不对或 INCAR 参数不兼容。benchmark 包里的 INCAR 是配好 POTCAR 的,确认POTCAR文件存在且元素顺序和POSCAR一致。

6. 后续工作流与接入入口

编译和测试跑通之后,日常用 VASP 更多是批量提交、参数扫描、结果整理。这部分如果想让模型辅助生成提交脚本、解析 OUTCAR、或者做 INCAR 参数对比,可以用 TaoToken 的模型对话: https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=model_chat 。API 接入地址是 https://taotoken.net/api ,接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=doc 。

如果你要长期做计算流程自动化、写 Agent 管理任务队列,Coding Plan 更适合: https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=coding_plan 。API Keys 在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=api_keys 管理。

最后提醒一个实测经验:WSL2 下跑 VASP,mpirun -np的核心数不要超过 WSL 分配的逻辑核数,否则会卡在 MPI 初始化。物理机同理,-np超过物理核数性能反而下降。跑 benchmark 用 2 核验证功能就够,正式计算再按机器配置调。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询