新版 oneapi 安装 CP2K
安装 CP2K 前保证服务器已经安装好 oneapi
1.上传 CP2K安装包到服务器上
- 这里我安装的是 2024.3 版本

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

3.编译配置和依赖更换
- 进入 cp2k-2024.3 文件夹下

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

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

注意这个时候由于已经使用 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)")"
检查:
echo "$IFX_LIBDIR" test -f "$IFX_LIBDIR/libifcoremt_pic.a" \ && echo "Intel Fortran运行库正常" \ || echo "错误:没有找到Intel Fortran运行库"必须看到:Intel Fortran运行库正常
4.2 设置 Libxc 编译兼容变量
一次性复制执行:
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:
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

对于 AMD 编译器需要加上 --target-cpu=generic,intel 就不用,可以删除这和参数
- 之后会进入编译过程,这个过程很漫长,请耐心等待

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

6.补全 Libint Fortran 接口
- 在编译文件成功生成之后进入 cp2k-2024.3 文件夹下:cd /root/software/cp2k-2024.3
- 设置路径:
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"- 检查关键文件:
ls -l "$LIBINT_BUILD/fortran/libint_f.mod"ls -l "$LIBINT_BUILD/fortran/libint_f.o"
两个文件都存在才能继续。
- 复制 Fortran模块:
cp "$LIBINT_BUILD/fortran/libint_f.mod" \ "$LIBINT_ROOT/include/"- 创建静态库:
ar rcs "$LIBINT_ROOT/lib/libint_f.a" \ "$LIBINT_BUILD/fortran/libint_f.o"- 检查结果:
ls -l "$LIBINT_ROOT/include/libint_f.mod"ls -l "$LIBINT_ROOT/lib/libint_f.a"ar t "$LIBINT_ROOT/lib/libint_f.a"
最后一条应显示:libint_f.o
7.复制工具链架构文件
- cd /root/software/cp2k-2024.3 并 cp tools/toolchain/install/arch/* arch/
- 检查四个配置:
ls -l \ arch/local.ssmp \ arch/local.sdbg \ arch/local.psmp \ arch/local.pdbg
8.给四个版本加入 Libint Fortran 库
- 执行:
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- 检查:
grep -n -- '-lint_f' \ arch/local.ssmp \ arch/local.sdbg \ arch/local.psmp \ arch/local.pdbg
四个文件都应该显示:-lint_f -lint2
注意顺序必须是:-lint_f -lint2
9.加载工具链环境
- 执行:source /root/software/cp2k-2024.3/tools/toolchain/install/setup
- 检查:
command -v ifxcommand -v mpiifxecho "$MKLROOT"
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 核数,自己服务器是多少核就填多少
- 显示以下内容表示编译成功:

11.检查四个主程序
- cd /root/software/cp2k-2024.3/exe/local
- 检查:
ls -lh \ cp2k.ssmp \ cp2k.sdbg \ cp2k.psmp \ cp2k.pdbg
四个文件都必须存在。
- 检查版本:
for VERSION in ssmp sdbg psmp pdbgdo echo "===== $VERSION =====" "./cp2k.$VERSION" --versiondone12.检查动态库
- 执行下面代码
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 文件夹配置到环境变量中

- 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
具体产生输入文件步骤:
- 终端输入 Multiwfn 调出 Multiwfn 程序
- 输入 XXX.cif 文件路径,如果当前就在计算任务文件夹下,且 .cif 文件也存在,直接输入 XXX.cif 回车即可
- 输入 cp2k
- 设置 cp2k 的输入文件的保存文件路径,如果在计算任务文件夹下,直接回车即可
- 设置参数