计算化学公社

 找回密码 Forget password
 注册 Register
Views: 405|回复 Reply: 0
打印 Print 上一主题 Last thread 下一主题 Next thread

[VASP] Rocky9.4编译vasp6.4.2笔记(使用GCC编译器结合intel_oneAPI_MKL编译)

[复制链接 Copy URL]

12

帖子

0

威望

598

eV
积分
610

Level 4 (黑子)

跳转到指定楼层 Go to specific reply
楼主
本帖最后由 825728139 于 2025-4-25 20:33 编辑

最近在VM虚拟机上重新编译vasp,在vasp官网发现有多种编译方法,目前网上大多数教程都是采用的intel编译器,作为一名娱乐玩家想尝试使用GCC编译器编译vasp。现编译完成,在这里做个笔记
发帖前注意到论坛上两个使用GCC编译器的教程:vasp 5.4.4在linux下使用gnu编译器编译Ubuntu 安装 VASP

vasp.6.4.2安装包来源:http://bbs.keinsci.com/thread-41742-1-1.html
vasp官网中推荐的编译环境:https://www.vasp.at/wiki/index.php/Toolchains

vasp官网 Installing VASP.6.X.X 中指出,要编译 VASP,需要(网页翻译结果):
Fortran 编译器(至少符合 F2008)、C 和 C++。例如,以下编译器套件之一:
- GCC
- intel-oneapi-base-kit+intel-oneapi-hpc-kit
- NVIDIA HPC 开发工具包
- AOCC (适用于 AMD CPU)
介意:对于 VASP 的 OpenACC GPU 端口(要在 GPU 上运行),必须使用 NVIDIA HPC-SDK (>=21.2) 中的编译器。
数值库:FFTW、BLAS、LAPACK 和 ScaLAPACK。例如,以下之一:
- intel-oneapi-mkl
- FFTW + OpenBLAS + ScaLAPACK
- NVIDIA HPC-SDK(附带 OpenBLAS 和 ScaLAPACK)+ FFTW
- AOCL (适用于 AMD CPU)
消息传递接口 (MPI) 的实现。例如,以下之一:
- 英特尔-oneapi-mpi
- OpenMPI
- NVIDIA HPC-SDK(附带 OpenMPI)
要查找有效的编译器和库的组合,请查看我们的经过验证的工具链列表(https://www.vasp.at/wiki/index.php/Toolchains

这里选择GCC+FFTW + OpenBLAS + ScaLAPACK+OpenMPI的组合
1. 配置环境
安装必要的包,如果有报错可以在 pkgs.org 搜索查看完整的安装命令(后续提示缺少什么库文件也可以在这里搜索,不一定非得搜索包名,可以直接搜缺少的文件,如:搜libblas.a便会帮你找到lapack-static包
  1. dnf install gcc gcc-c++ gcc-gfortran openmpi openmpi-devel fftw fftw-devel fftw-static blas blas-static lapack lapack-static
复制代码
ScaLAPACK不能直接dnf,去官网源码编译:https://www.netlib.org/scalapack/#_scalapack_version_2_1_0
创建并进入scalapack文件夹
  1. wget http://www.netlib.org/scalapack/scalapack-2.1.0.tgz
  2. tar -xf scalapack-2.1.0.tgz
  3. mkdir build
  4. cd build
  5. # 添加$PATH:(可以'find / -name mpicc' 'find / -name libblas.a' 'find / -name liblapack.a' 确认要添加到$PATH的内容)
  6. PATH=/usr/lib64:/usr/lib64/openmpi/bin:$PATH
  7. cmake -DCMAKE_Fortran_FLAGS="-fallow-argument-mismatch" ../scalapack-2.1.0
  8. # 这里 -DCMAKE_Fortran_FLAGS="-fallow-argument-mismatch" 是为了解决gcc10和gcc11编译过程中的兼容性报错:https://github.com/Reference-ScaLAPACK/scalapack/issues/73
  9. make all
  10. ls lib/scalapack.a  # 检查编译结果
复制代码
查看可选择的makefile.include文件:https://www.vasp.at/wiki/index.php/Makefile.include
这里我选择了makefile.include.gnu_ompi_mkl_omp: Parallelized using OpenMPI + OpenMP, combined with MKL. 环境中还需要intel_oneAPI_MKL
安装intel_oneAPI_MKL:https://www.intel.com/content/www/us/en/docs/oneapi/installation-guide-linux/2025-1/online-offline-installer-004.html#BASE-ONLINE-OFFLINE
或者从这里下载intel_oneAPI_MKL:https://www.intel.com/content/www/us/en/developer/tools/oneapi/onemkl-download.html?operatingsystem=linux&linux-install=offline
"intel_oneAPI_MKL的安装非常简单,运行.sh文件后只需要选择一下用户协议、是否发送诊断数据后就可以自动安装了"
  1. wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/dc93af13-2b3f-40c3-a41b-2bc05a707a80/intel-onemkl-2025.1.0.803_offline.sh
  2. sudo sh ./intel-onemkl-2025.1.0.803_offline.sh
  3. export CPLUS_INCLUDE_PATH=/opt/intel/oneapi/mkl/2025.1/include:$CPLUS_INCLUDE_PATH # 设置环境变量(使用'find / -name mkl.h'确认路径)
复制代码
2.开始编译vasp6.4.2
准备makefile.include文件:
  1. tar -xf vasp.6.4.2.tar
  2. cd vasp.6.4.2
  3. cp arch/makefile.include.gnu_ompi_mkl_omp makefile.include  # 可根据https://www.vasp.at/wiki/index.php/Makefile.include 去除HDF5、fftlib等的注释
复制代码
修改makefile.include文件中的指定路径(这里使用的路径均为对应包的默认安装路径,若不确定是否和本文一致可通过find确认:'find / -name mkl.h' 'find / -name scalapack.a' 'find / -name hdf5.mod')
  1. # 修改前:
  2. MKLROOT   ?= /path/to/your/mkl/installation
  3. SCALAPACK_ROOT ?= /path/to/your/scalapack/installation
  4. HDF5_ROOT  ?= /path/to/your/hdf5/installation
  5. # 修改后:
  6. MKLROOT   ?= /opt/intel/oneapi/mkl/2025.1
  7. SCALAPACK_ROOT ?= /apps/lib/scalapack/build
  8. HDF5_ROOT  ?= /apps/miniconda3/pkgs/hdf5-1.14.3-nompi_h4f84152_100
复制代码
注意makefile.include文件中后续对该变量的引用,确认修改后的路径下有对应的下级目录

HDF5的作用在 'VASP 6 搭配 HDF5 时,需启用 fortran 选项编译 HDF5' 有讨论
'''
dnf install rocky-release-hpc
dnf install hdf5-devel
dnf install hdf5-mpich-devel
dnf install hdf5-openmpi-devel
export GFORTRAN_MODULE_DIR=/usr/lib64/gfortran/modules/openmpi:$GFORTRAN_MODULE_DIR

'''
dnf安装的hdf5不能用,跟vasp/arch中提供的makefile.include的目录结构不对应。通过find发现之前装的miniconda里面有这个包,于是把makefile.include中的/path/to/your/hdf5/installation改为了miniconda中的路径。
  1. PATH=/usr/lib64:/usr/lib64/openmpi/bin:$PATH
  2. export CPLUS_INCLUDE_PATH=/opt/intel/oneapi/mkl/2025.1/include:$CPLUS_INCLUDE_PATH
  3. make all
复制代码
make all全程大概用了1个小时
3. 测试
测试文件:http://bbs.keinsci.com/thread-11812-1-1.html
  1. cd vasp.Hg
  2. cp IN-short INCAR
  3. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/intel/oneapi/mkl/2025.1/lib
  4. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/apps/miniconda3/pkgs/hdf5-1.14.3-nompi_h4f84152_100/lib
  5. export PATH=$PATH:/apps/vasp.6.4.2/bin
  6. vasp_std
复制代码

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2025-8-15 20:25 , Processed in 0.150126 second(s), 20 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list