计算化学公社

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

[CP2K] 基于Arch的Linux发行版下CP2K编译

[复制链接 Copy URL]

33

帖子

0

威望

1598

eV
积分
1631

Level 5 (御坂)

跳转到指定楼层 Go to specific reply
楼主
本人平常工作和生活都是使用Linux系统的,使用Linux桌面系统自然会选用Arch或Arch-based发行版,主要也是为了软件追新。
之前在服务器上编译过CP2K,还没在比较新的编译器等工具上编译过,当然,Arch的AUR里面有大佬构建好的CP2K的PKGBUILD,可以直接用那个,好处是期间安装的软件都由系统的包管理接管,坏处就是软件的位置可能不是你想要的。以下是在Arch-based的Linux发行版中手动编译过程中遇到的一些小问题,主要还是参考sob老师的那个帖子,以下只记录遇到的问题,自己做个记录。

当前使用操作系统基本信息如下:

操作系统:CachyOS
内核版本:Linux 6.17.7-3-cachyos
gcc版本:15.2.1 20250813
gfortran版本:15.2.1 20250813
Shell:Fish shell 4.1.2

需要注意的问题:
1. 网络问题自行解决。
2. cmake这个就不要用系统的了,Arch上cmake最新版本是4.1.2, 在编译过程中会有问题,提示要小于3.5版本,因此就让install_cp2k_toolchain.sh自己下载相应的版本就好了,但是因此在/usr下的lib, lib32, share下产生的那些乱七八糟的文件,系统的包管理器就没法管理了,这是一个很讨厌的事情。
3. 因为编译器为gcc15,比较严格,COSTA 的头文件 mpi_type_wrapper.hpp 没有包含 <cstdint>,而代码用到了 uint32_t,这个时候会报错,因此需要改一下源代码,很简单,修改tools/toolchain/build/COSTA-2.2.2/src/costa/grid2grid/mpi_type_wrapper.hpp这个头文件,前面加一个`#include <cstdint>`,就行了。
但是你会发现,重新运行install_cp2k_toolchain.sh xxxxxxxxx还是会出问题,是因为脚本里面又重新把下载的压缩包给解压并覆盖了你修改的文件,因此还需要改一下tools/toolchain/scripts/stage4/install_cosma.sh这个文件,把下面两行注释掉:

[ -d COSTA-${costa_ver} ] && rm -rf COSTA-${costa_ver}
tar -xzf COSTA-v${costa_ver}.tar.gz

然后再运行就行了。
上面3个都没问题后,install_cp2k_toolchain.sh这个步骤就没什么问题了,后续就是tools/toolchain/install/arch/下所有文件拷到arch文件夹下面了。
4. 然后到`make -j 4 ARCH=local VERSION="ssmp psmp"`这一步了,这步也会出现小问题,编译过程中会出现CP2K 主体在编译 Fortran 源时找不到 dftd4.mod的问题(当然这个是因为我在前述步骤中加了这个DFTD4),使用命令:
  1. echo $(dirname "$(find tools/toolchain/install -name dftd4.mod | head -n1)")
复制代码
找到这个mod的位置,然后在arch下的local.ssmp和local.psmp文件中的FCFLAGS参数最后加上
  1. -I'xxx'
复制代码
xxx就是上面找到的路径。然后再编译就好了。
但是还是有个问题,psmp对应的cp2k可以编译,但是ssmp对应的还是会报错,那我就不管了,因为也不想用ssmp。所以干脆就直接`make -j 4 ARCH=local VERSION="psmp"`得了,不用管那个了。

之后加入环境变量什么的,都如sob老师博文中所言即可。
最后可以用`cp2k.psmp --version`看一下编译的参数。







评分 Rate

参与人数
Participants 2
eV +12 收起 理由
Reason
Meikooo + 5 赞!
sobereva + 7

查看全部评分 View all ratings

69

帖子

0

威望

191

eV
积分
260

Level 3 能力者

2#
发表于 Post on 2026-2-2 11:03:51 | 只看该作者 Only view this author
楼主,install_cp2k_toolchain.sh有没有卸载的选项呀?
AUR和arch4edu仓库里面的都是上古版本了,直接用pacman安装也安装不上。好像没有大佬把整条工具链都构建好的版本。
如果我直接用这个install_cp2k_toolchain了,安装的库就不归pacman接管了,万一库出现冲突就不好办了
我担心后续安装会出问题,所以想预留一个卸载的选项。

33

帖子

0

威望

1598

eV
积分
1631

Level 5 (御坂)

3#
 楼主 Author| 发表于 Post on 2026-2-3 09:03:45 | 只看该作者 Only view this author
sgwzq 发表于 2026-2-2 11:03
楼主,install_cp2k_toolchain.sh有没有卸载的选项呀?
AUR和arch4edu仓库里面的都是上古版本了,直接用pa ...

AUR上那个编译版本确实老了,那个bin版的倒是更新了,不过我们并不想要那个。
它这个脚本编译安装的软件全在自己的那个文件夹下,不需要的时候直接删了就行了,感觉没有什么依赖问题。我也到时候观察一下,如果有问题,我也在这个帖子下更新一下。

69

帖子

0

威望

191

eV
积分
260

Level 3 能力者

4#
发表于 Post on 2026-2-3 11:30:28 | 只看该作者 Only view this author
quanta 发表于 2026-2-3 09:03
AUR上那个编译版本确实老了,那个bin版的倒是更新了,不过我们并不想要那个。
它这个脚本编译安装的软件 ...

bin那个也是stale的。我甚至在想能不能自己写一份PKGBUILD,aur和arch4edu的那两个都是作者自己自用的,别人用不了。
cp2k好像编译、安装都放在cp2k自己的文件夹下了,没涉及/usr/lib的事(要不然就需要root权限了)。
我发现,编译的时候库的位置都被写死了。也就是说,如果把cp2k这个文件夹整体移动一下,就用不了了,提示原来的那个位置找不到库。

33

帖子

0

威望

1598

eV
积分
1631

Level 5 (御坂)

5#
 楼主 Author| 发表于 Post on 2026-2-3 11:43:47 | 只看该作者 Only view this author
sgwzq 发表于 2026-2-3 11:30
bin那个也是stale的。我甚至在想能不能自己写一份PKGBUILD,aur和arch4edu的那两个都是作者自己自用的 ...

可以自己打个包,不过这个很麻烦,我只自己打过简单的包,让大模型帮着试试。不过做计算是正经事儿,不要浪费太多时间在这上面,哈哈。

69

帖子

0

威望

191

eV
积分
260

Level 3 能力者

6#
发表于 Post on 2026-2-5 01:24:55 | 只看该作者 Only view this author
本帖最后由 sgwzq 于 2026-2-5 12:21 编辑

补充楼主的安装问题,我目前遇到的有这些:

操作系统:Arch Linux

Shell:Bash
perl/python3/wget/gcc-g++/gcc-fortran/zlib/git/xz等均使用Arch的官方版本
上述所有均更新至最新(2026.2.5)。
如果你打算在Fresh的Arch Linux安装CP2K,这些包必不可少。
此外还应该有Python的FYPP包,用于Python与Fortran的黏合。此包可用pip安装(虚拟环境或安装在系统目录均可)


1. OpenMPI 经测试,可以(而且建议)用pacman安装的openmpi
  1. # pacman -S openmpi
复制代码

这样其它程序就不会再试图从别处调用openmpi了。经测试不会出现问题。



2. 关于gcc 15编译严格的问题,我是这样操作的。
CP2K 2026.1的库源里面,我目前按照社长的编译选项编译toolchain.sh

  1. $ cd path/to/cp2k/
  2. $ cd tools/toolchain
  3. $ ./install_cp2k_toolchain.sh --with-openmpi=system --with-plumed=install --with-tblite=install --with-dftd4=install
复制代码



编译过程中有两个问题,均为GCC 15要求严格,而其中的tools没有#include <cstdint>所致。
其中一个是COSMA-2.2.2库中的COSTA子库下的mpi_type_wrapper.hpp
另一个是SIRIUS-7.7.1库中的memory.hpp
具体过程是,install_cp2k_toolchain.sh这个脚本会自动调用wget下载COSTA-v2.2.2.tar.gz
和  SIRIUS-7.7.1.tar.gz 。下载好会自动进行解压,解压后是这两个库的源代码文件。其中有上述问题的是以下两个头文件:

两文件的位置如下
  1. /path/to/cp2k/tools/toolchain/build/COSTA-2.2.2/src/costa/grid2grid/mpi_type_wrapper.hpp
  2. /path/to/cp2k/tools/toolchain/build/SIRIUS-7.7.1/src/core/memory.hpp
复制代码
你可以在安装的时候,这两个tar.gz下载好了之后,按Ctrl-C取消安装脚本(要不然也会因为编译报错而自动停下),然后进行以下操作:
  1. ~ $ cd /path/to/cp2k/tools/toolchain/build/
  2. build $ rm -rf COSTA-2.2.2 # 这步把解压完,编译到一半的夹生饭文件都删掉
  3. build $ tar -xf COSTA-v2.2.2.tar.gz # 重新解压一份源代码文件,里面不含有夹生的文件
  4. build $ vim COSTA-2.2.2/src/costa/grid2grid/mpi_type_wrapper.hpp # 在里面加入 "# include <cstdint>" (既然用上Arch了,没人不会用Vim吧?)
  5. build $ rm COSTA-v2.2.2.tar.gz # 删掉原来的压缩包文件
  6. build $ tar -czf COSTA-v2.2.2.tar.gz COSTA-2.2.2/ # 重新打包一份原代码
  7. # 脚本会相信这个压缩包,遇到中断到一半的编译,重新执行脚本会重新解压,而不会相信上次解压后的东西
复制代码

重新执行
  1. build $ cd ..
  2. toolchain $ ./install_cp2k_toolchain.sh --with-openmpi=system --with-plumed=install --with-tblite=install --with-dftd4=install
复制代码
继续安装。


同理,也对SIRIUS-7.7.1进行相同操作。

  1. build $ rm -rf SIRIUS-7.7.1 # 这步把解压完,编译到一半的夹生饭文件都删掉
  2. build $ tar -xf SIRIUS-v7.7.1.tar.gz # 重新解压一份源代码文件,里面不含有夹生的文件
  3. build $ vim SIRIUS-7.7.1/src/core/memory.hpp # 在里面加入 "# include <cstdint>" (既然用上Arch了,没人不会用Vim吧?)
  4. build $ rm SIRIUS-v7.7.1.tar.gz # 删掉原来的压缩包文件
  5. build $ tar -czf SIRIUS-v7.7.1.tar.gz SIRIUS-7.7.1/ # 重新打包一份原代码
  6. # 脚本会相信这个压缩包,遇到中断到一半的编译,重新执行脚本会重新解压,而不会相信上次解压后的东西
复制代码


再重新执行
  1. toolchain $ ./install_cp2k_toolchain.sh --with-openmpi=system --with-plumed=install --with-tblite=install --with-dftd4=install
复制代码
工具链即可编译成功。

然后用社长的编译选项编译选项编译CP2K即可。
  1. cd /path/to/cp2k
  2. mkdir build && cd build
  3. cmake -S .. -DCP2K_USE_EVERYTHING=ON -DCP2K_USE_DLAF=OFF -DCP2K_USE_PEXSI=OFF -DCP2K_USE_LIBSMEAGOL=OFF -DCP2K_USE_DEEPMD=OFF -DCP2K_USE_ACE=OFF -DCP2K_USE_TREXIO=OFF -DCP2K_USE_GREENX=OFF -DCP2K_USE_LIBTORCH=OFF -DCP2K_USE_MIMIC=OFF -DCMAKE_INSTALL_PREFIX=../install -DCP2K_DATA_DIR=../data
复制代码
亲测过程中会遇见两个Fortran的Warning,但能顺利编译。



69

帖子

0

威望

191

eV
积分
260

Level 3 能力者

7#
发表于 Post on 2026-2-5 01:35:55 | 只看该作者 Only view this author
本帖最后由 sgwzq 于 2026-2-5 14:18 编辑

但安装之后的实际计算中有两个问题
1. 在install/bin下的cp2k.psmp执行任意一个计算任务,甚至查看版本信息,都会提示找不到libcp2k.2026.1.so
  1. /path/to/cp2k/install/bin/cp2k.psmp
  2. 或有人的 -DCMAKE_INSTALL_PREFIX=../exe,此时是
  3. /path/to/cp2k/exe/bin/cp2k.psmp
复制代码


会报错,而只有build/bin下的cp2k.psmp可以正常使用,位置是
  1. /path/to/cp2k/build/bin/cp2k.psmp
复制代码


我觉得这是个Bug,而且不仅Arch,其他的Linux distro编译版也会有这个问题

2026.1.5更新:这个其实不是bug,而是/path/to/cp2k/install里面的二进制文件会从`$LD_LIBRARY_PATH`中找libcp2k.2026.1.so
所以如果想要使用install文件夹下的二进制文件,请将install/lib加入到环境变量。

69

帖子

0

威望

191

eV
积分
260

Level 3 能力者

8#
发表于 Post on 2026-2-5 01:51:16 | 只看该作者 Only view this author
本帖最后由 sgwzq 于 2026-2-5 12:28 编辑

2. 不知道楼主安装好cp2k后进行测试没。cp2k会随源代码附带一些测试文件。测试文件在
  1. /path/to/cp2k/tests
复制代码

我安装好之后不放心,怕软件有些地方出问题,于是把官方提供的测试都测试了一遍,测试流程是
  1. # 在任意一个文件夹,比如在~目录建立一个叫作temp的空文件夹,即~/temp
  2. ~ $ cd temp
  3. # 把编译好的二进制文件拷贝到这个文件夹(其实应该拷贝install里面的,但是这些有问题1中的bug,用不了)
  4. temp $ cp /path/to/cp2k/build/bin/* ./
  5. temp $ /path/to/cp2k/tests/do_regtest.py ./ psmp # 第一个参数是cp2k.psmp的位置(即./),第二个参数是cp2k的版本(即psmp)
复制代码
结果运行一次测试,有好多文件测试出了问题。输出的结果:
------------------------------- Summary --------------------------------
Number of FAILED  tests 14
Number of WRONG   tests 49
Number of CORRECT tests 683
Total number of   tests 746

Summary: correct: 683 / 746; wrong: 49; failed: 14; 44min
Status: FAILED

*************************** Testing ended ******************************

其中FAILED有不收敛的,WRONG有和标准答案相差过多的,下面摘一段
  1. ./regtesting/TEST-xxxx-xx-xx_xx-xx-xx/error_summary
复制代码


中的信息:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
/home/sgwzq/chem/cp2k/cp2ktest/regtesting/TEST-2026-02-04_22-36-06/QS/regtest-tddfpt-sf/h2o_pbe0_col.inp.out
Spec: {'matcher': 'TDDFPT_excit_ener', 'tol': 0.001, 'ref': 11.73433}
Difference too large: 6.53e+00 > 0.001, value: 88.38658.

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
/home/sgwzq/chem/cp2k/cp2ktest/regtesting/TEST-2026-02-04_22-36-06/QS/regtest-tddfpt-sf/h2o_pbe0_admm_pbex.inp.out
Spec: {'matcher': 'TDDFPT_excit_ener', 'tol': 0.001, 'ref': 9.59331}
Difference too large: 1.17e+00 > 0.001, value: 20.84348.

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
/home/sgwzq/chem/cp2k/cp2ktest/regtesting/TEST-2026-02-04_22-36-06/QS/regtest-tddfpt-sf/h2o_pbe0_admm_none.inp.out
Spec: {'matcher': 'TDDFPT_excit_ener', 'tol': 0.001, 'ref': 9.7416}
Difference too large: 1.16e+00 > 0.001, value: 21.02079.

总之,在一些测试用例中,我安装的软件和标准答案差一大截。这样的软件我根本不敢用呀,万一我的模拟就是这些WRONG中的一个呢?



本版积分规则 Credits rule

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

GMT+8, 2026-2-16 21:45 , Processed in 0.180909 second(s), 21 queries , Gzip On.

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