返回朋友圈

新版 oneapi 安装 CP2K

原创栀初 · 朋友圈 · 2026 年 8 月 10 日

安装 CP2K 前保证服务器已经安装好 oneapi


1.上传 CP2K安装包到服务器上

  • 这里我安装的是 2024.3 版本

image


2.解压 cp2k-2024.3.tar.bz2 压缩包

  • 使用该指令进行解压:tar -jxvf cp2k-2024.3.tar.bz2
  • 解压完成会生成一个 cp2k-2024.3 文件夹

image


3.编译配置和依赖更换

  • 进入 cp2k-2024.3 文件夹下

image

  • 随后进入该文件夹下的 tools/toolchain/ 文件夹下,利用 CP2K 自带的依赖安装程序安装依赖

image

  • 由于 oneapi 利用的是最新版本,这个 CP2K 版本是 2024 版的,因此要更改一些文件中的 oneapi 的编译器名字
  • 输入:vi ./scripts/stage0/install_intel.sh
  • 将 install_intel.sh 中的 ICC 全部改成 ICX:%s/icc/icx/g

image
注意这个时候由于已经使用 vi 编译器进行文件内容编辑了,先在编译器上输入英文 ' : ' ,再输入上面的指令,然后回车,会自动把该文件中的所有 ICC 换成 ICX
同样,下面将再使用以下指令进行更改:

  • %s/icpc/icpx/g
  • %s/ifort/ifx/g

更改之后保存这个文件
更改第二个文件:vi ./scripts/stage1/install_intelmpi.sh
更改:

  • %s/mpiicc/mpiicx/g
  • %s/mpiicpc/mpiicpx/g
  • %s/mpiifort/mpiifx/g
  • %s/icc/icx/g
  • %s/icpc/icpx/g
  • %s/ifort/ifx/g

4.修改编译运行库
由于 CP2K 2024.3 使用的 Libxc 6.2.2 配置脚本比较旧,不能正确解析 oneAPI 2026.1 中 ifx 的输出,因此需要 4.1 和 4.2 的设置
4.1 找到 Intel Fortran 运行库

  • 执行:ifx -print-file-name=libifcoremt_pic.a

应该返回完整路径,例如:/opt/intel/oneapi/compiler/2026.1/lib/libifcoremt_pic.a

  • 保存目录:IFX_LIBDIR="$(dirname "$(ifx -print-file-name=libifcoremt_pic.a)")"

检查:

plaintext
echo "$IFX_LIBDIR" test -f "$IFX_LIBDIR/libifcoremt_pic.a" \  && echo "Intel Fortran运行库正常" \  || echo "错误:没有找到Intel Fortran运行库"

必须看到:Intel Fortran运行库正常
4.2 设置 Libxc 编译兼容变量
一次性复制执行:

plaintext
export ac_cv_fc_libs="-L${IFX_LIBDIR} \-lifport -lifcoremt_pic -limf -lsvml -lm \-lipgo -liomp5 -lirc -lpthread -ldl -lirc_s" export ac_cv_f77_libs="$ac_cv_fc_libs"
  • 检查变量:echo "$ac_cv_fc_libs"
  • 检查是否误含 -loopopt=1:
plaintext
case "$ac_cv_fc_libs" in  *-loopopt=1*) echo "错误:仍然包含 -loopopt=1" ;;  *) echo "检查通过:不含 -loopopt=1" ;;esac

必须显示:检查通过:不含 -loopopt=1
这些变量只用于编译 Libxc,CP2K 编译完成后不再需要。


5.生成编译配置文件

  • ./install_cp2k_toolchain.sh --with-cmake=system --with-mkl --with-sirius=no --with-intel --target-cpu=generic

image
对于 AMD 编译器需要加上 --target-cpu=generic,intel 就不用,可以删除这和参数

  • 之后会进入编译过程,这个过程很漫长,请耐心等待

image

  • 显示以下内容表示编译文件生成成功

image


6.补全 Libint Fortran 接口

  • 在编译文件成功生成之后进入 cp2k-2024.3 文件夹下:cd /root/software/cp2k-2024.3
  • 设置路径:
plaintext
LIBINT_BUILD="/root/software/cp2k-2024.3/tools/toolchain/build/libint-v2.6.0-cp2k-lmax-5"LIBINT_ROOT="/root/software/cp2k-2024.3/tools/toolchain/install/libint-v2.6.0-cp2k-lmax-5"
  • 检查关键文件:
plaintext
ls -l "$LIBINT_BUILD/fortran/libint_f.mod"ls -l "$LIBINT_BUILD/fortran/libint_f.o"

image
两个文件都存在才能继续。

  • 复制 Fortran模块:
plaintext
cp "$LIBINT_BUILD/fortran/libint_f.mod" \   "$LIBINT_ROOT/include/"
  • 创建静态库:
plaintext
ar rcs "$LIBINT_ROOT/lib/libint_f.a" \  "$LIBINT_BUILD/fortran/libint_f.o"
  • 检查结果:
plaintext
ls -l "$LIBINT_ROOT/include/libint_f.mod"ls -l "$LIBINT_ROOT/lib/libint_f.a"ar t "$LIBINT_ROOT/lib/libint_f.a"

image
最后一条应显示:libint_f.o


7.复制工具链架构文件

  • cd /root/software/cp2k-2024.3 并 cp tools/toolchain/install/arch/* arch/
  • 检查四个配置:
plaintext
ls -l \  arch/local.ssmp \  arch/local.sdbg \  arch/local.psmp \  arch/local.pdbg

image


8.给四个版本加入 Libint Fortran 库

  • 执行:
plaintext
for ARCH_FILE in \  arch/local.ssmp \  arch/local.sdbg \  arch/local.psmp \  arch/local.pdbgdo  if [ -f "$ARCH_FILE" ] && ! grep -q -- '-lint_f' "$ARCH_FILE"; then    sed -i 's/-lint2/-lint_f -lint2/g' "$ARCH_FILE"  fidone
  • 检查:
plaintext
grep -n -- '-lint_f' \  arch/local.ssmp \  arch/local.sdbg \  arch/local.psmp \  arch/local.pdbg

image
四个文件都应该显示:-lint_f -lint2
注意顺序必须是:-lint_f -lint2


9.加载工具链环境

  • 执行:source /root/software/cp2k-2024.3/tools/toolchain/install/setup
  • 检查:
plaintext
command -v ifxcommand -v mpiifxecho "$MKLROOT"

image


10.编译四个版本

  • 进入 CP2K 根目录:cd /root/software/cp2k-2024.3
  • 新解压的源码一般不需要清理,但执行一次也可以:make ARCH=local VERSION="ssmp sdbg psmp pdbg" clean
  • 开始编译:make -j 2 ARCH=local VERSION="ssmp sdbg psmp pdbg"
  • 如果服务器内存充足,之后可以增加到:make -j 8 ARCH=local VERSION="ssmp sdbg psmp pdbg"

-j 后面跟的是 CPU 核数,自己服务器是多少核就填多少

  • 显示以下内容表示编译成功:

image


11.检查四个主程序

  • cd /root/software/cp2k-2024.3/exe/local
  • 检查:
plaintext
ls -lh \  cp2k.ssmp \  cp2k.sdbg \  cp2k.psmp \  cp2k.pdbg

image
四个文件都必须存在。

  • 检查版本:
plaintext
for VERSION in ssmp sdbg psmp pdbgdo  echo "===== $VERSION ====="  "./cp2k.$VERSION" --versiondone

12.检查动态库

  • 执行下面代码
plaintext
for VERSION in ssmp sdbg psmp pdbgdo  echo "===== $VERSION ====="  ldd "./cp2k.$VERSION" | grep 'not found'done

正常情况下每个标题后面都没有输出,即没有动态库缺失。

  • 检查 MKL:ldd ./cp2k.psmp | grep -i mkl
  • 检查 MPI:ldd ./cp2k.psmp | grep -i mpi

13.配置环境变量

  • 将编译出来的 /root/software/cp2k-2024.3/exe/local 文件夹配置到环境变量中

image

  • source ~/.bashrc

14.利用 Multiwfn 生成 CP2K 输入文件
Multiwfn 产生 CP2K 输入文件的流程是:

  • 启动 Multiwfn,载入一个 Multiwfn 可以识别的至少含有结构信息的文件
  • 进入主功能100的子功能2,选择产生CP2K输入文件(即选项25)。也可以直接在 Multiwfn 主菜单里输入 cp2k 进入此功能
  • 输入要产生的 CP2K 输入文件的路径
  • 通过各种选项设置如何进行计算
  • 选择0,得到CP2K输入文件
  • 常用的 Multiwfn 坐标文件:.cif 文件、POSCAR 文件

注:要作为POSCAR载入,文件名可以是POSCAR_miku或miku.POSCAR
具体产生输入文件步骤:

  1. 终端输入 Multiwfn 调出 Multiwfn 程序
  2. 输入 XXX.cif 文件路径,如果当前就在计算任务文件夹下,且 .cif 文件也存在,直接输入 XXX.cif 回车即可
  3. 输入 cp2k
  4. 设置 cp2k 的输入文件的保存文件路径,如果在计算任务文件夹下,直接回车即可
  5. 设置参数
查看点赞与评论