计算化学公社

标题: CP2K结构优化监控小脚本 [打印本页]

作者
Author:
ma455173220    时间: 2022-4-9 06:14
标题: CP2K结构优化监控小脚本
本帖最后由 ma455173220 于 2025-3-3 10:34 编辑

去年由Multiwfn入门CP2K,目前还是个菜鸟一枚。被CP2K的速度和超多功能所惊艳,但是发现GEO_OPT和CELL_OPT不太容易监控,所以参考VASP的grad脚本,自写了个Python脚本,欢迎大家使用。PS:本人也是个Python菜鸟,脚本肯定会有很多不足之处,大佬们可自行优化使用。
脚本使用方法: python3 cp2k-output-analyse.py cp2k.out (注意这里不一定非是cp2k.out,也可以是你的自命名,只要是*.out结尾即可)。脚本输出结果:在当前目录下生成cp2k__data.csv文件。
输出文件说明:第一列为当前结构优化步数(若该行前方有"xx"字样,则表示该结构优化能量上升而非下降,如图一),第二列为结构能量,第三列为结构优化所用SCF步数(若该列前方有"!"符号,则表示该结构优化已达所设最大SCF步数但是SCF并没有达到收敛标准,如图二),第四到第七列为结构优化收敛参数(若为四个"YES",则表示结构优化达到收敛标准),最后一列为结构优化用时。
脚本附加功能:也可画出能量vs.步数图,便于监控能量收敛情况,如图三(Again:Python菜鸟一枚,大家自行优化)。
=================================================================
28/07/2023小小更新一下,可以获取GEOMETRY OPTIMIZATION COMPLETED的最终能量,虽说和最后一步结构优化的能量相差不多,但是还是用这个最好了
(, 下载次数 Times of downloads: 87)

(, 下载次数 Times of downloads: 72)

(, 下载次数 Times of downloads: 80)

=================================================================
12/04/2024:小小更新一下,加了一列Delta E能量差的数据,并改了一下输出格式,现在输出格式大概是这个样子(注:STEP 3前面的"x"是我手动改的cp2k.out仅仅为了展示下功能,正常来讲带"x"是说明这一步的能量升高了而非降低了):
(, 下载次数 Times of downloads: 58)
=================================================================
25/11/2024:经提示,发现最新版的cp2k输出格式和之前变化较大,导致脚本无法正常运行,因此借这个机会全面重写了一下脚本,目前应该适配最新版cp2k了。这次并没有统计每步结构优化(离子步)中所消耗的SCF步数,因为不同的SCF算法以及不同的结构优化算法导致SCF的输出格式多种多样,统计起来蛮麻烦而且也没特别大的必要。所以这次只是用YES和NO来分别代表当前离子步中SCF是否收敛,若为『!NO』,则表示SCF达到了最大步数MAX_SCF而并未收敛到EPS_SCF。若连续多次出现未收敛情况则需要引起注意,因为优化的结构可能是错的。精力有限,只对BFGS和L-BFGS做了测试,CG我用的不多,所以并未测试,如果有发现脚本运行出错的情况可以连带着输出文件发给我,我有时间可以对脚本进一步优化。新版输出文件样式如下:
(, 下载次数 Times of downloads: 25)
=================================================================
03/03/2025:小小更新了一下,cp2k v2025.1又改输出格式了...不过是小改,但是我没做全面测试,如果使用时有问题在帖子里留言即可。




作者
Author:
红米饭1234    时间: 2022-4-9 09:59
写一个高斯的把
作者
Author:
冰释之川    时间: 2022-4-9 10:46
这脚本不错,nice
作者
Author:
冰释之川    时间: 2022-4-9 10:51
红米饭1234 发表于 2022-4-9 09:59
写一个高斯的把

tsmonitor  (《Gaussian优化过渡态的监控/诊断小脚本-tsmonitor》http://bbs.keinsci.com/thread-14081-1-1.html
作者
Author:
红米饭1234    时间: 2022-4-9 11:27
冰释之川 发表于 2022-4-9 10:51
tsmonitor  (《Gaussian优化过渡态的监控/诊断小脚本-tsmonitor》http://bbs.keinsci.com/thread-14081- ...

好哒
作者
Author:
yjb    时间: 2022-5-4 14:33
您好,在运行.py文件后出现如下错误,
***************************************
*** The format of the script: ***
cp2k-output-analyse.py OUTPUT_FILE.out
***************************************

=======================================
In process...
...
Traceback (most recent call last):
  File "cp2k_out_analyse.py", line 150, in <module>
    + "\n" + contents)
NameError: name 'MAX_D' is not defined
作者
Author:
ma455173220    时间: 2022-5-11 08:25
yjb 发表于 2022-5-4 14:33
您好,在运行.py文件后出现如下错误,
***************************************
*** The format of the  ...

发一下你用的output文件呗,我试下
作者
Author:
youyno    时间: 2022-5-11 15:11
可以弄个python2的吗?
作者
Author:
gog    时间: 2022-5-12 09:30
点赞点赞再点赞
作者
Author:
gog    时间: 2022-5-12 09:30
youyno 发表于 2022-5-11 15:11
可以弄个python2的吗?

升级系统,直接用python3不香?
作者
Author:
乐平    时间: 2022-5-12 10:20
yjb 发表于 2022-5-4 08:33
您好,在运行.py文件后出现如下错误,
***************************************
*** The format of the  ...

可能你的任务不是几何优化(GEO_OPT)或者晶胞优化 (CELL_OPT)。

我用 CP2K 自带的 benchmark/QS/ 目录下的 H2O-256.inp 文件的运行结果(MD 任务)测试了这个脚本,没有检测出不是优化的任务,报错和你的一样。
作者
Author:
乐平    时间: 2022-5-12 10:25
ma455173220 发表于 2022-5-11 02:25
发一下你用的output文件呗,我试下

这个脚本没有检测出不是几何优化或者晶胞优化的任务。

比如,我用 CP2K 自带的 benchmark/QS/ 目录下的 H2O-256.inp 文件的运行结果(MD 任务)测试了这个脚本。但是,此脚本并没有没有检测出任务不是优化的任务,虽然我看到脚本中有检测任务类型的代码段。

  1.                 if RUN_TYPE == "GEO_OPT":
  2.                     line_added = 25
  3.                 elif RUN_TYPE == "CELL_OPT":
  4.                     line_added = 32
  5.                 else:
  6.                     print("\033[31mERROR:\033[0m This script can only be used for Geometry Optimization results!")
  7.                     sys.exit()
复制代码


所以,运行之后会显示 NameError: name 'MAX_D' is not defined 。这个报错和 6 楼的一样。
作者
Author:
乐平    时间: 2022-5-12 10:26
挺有趣的项目,我有空了也写一个试试。
作者
Author:
yjb    时间: 2022-5-12 10:52
乐平 发表于 2022-5-12 10:25
这个脚本没有检测出不是几何优化或者晶胞优化的任务。

比如,我用 CP2K 自带的 benchmark/QS/ 目录下 ...

谢谢老师,我做的是QM/MM MD
作者
Author:
ma455173220    时间: 2022-5-12 15:07
乐平 发表于 2022-5-12 10:25
这个脚本没有检测出不是几何优化或者晶胞优化的任务。

比如,我用 CP2K 自带的 benchmark/QS/ 目录下 ...

那可能是CP2K版本不同,不同版本有可能输出文件格式不太一样。的确只能用来GEO_OPT和CELL_OPT。话说MD也用不着监控吧...它有自带输出的文件啊
作者
Author:
ma455173220    时间: 2022-5-12 15:07
youyno 发表于 2022-5-11 15:11
可以弄个python2的吗?

抱歉我没用过Python2啊,就自学了点python3,菜鸟一个。。。可能把print改一下应该就差不多吧
作者
Author:
乐平    时间: 2022-5-12 22:36
本帖最后由 乐平 于 2022-5-12 16:38 编辑
ma455173220 发表于 2022-5-12 09:07
那可能是CP2K版本不同,不同版本有可能输出文件格式不太一样。的确只能用来GEO_OPT和CELL_OPT。话说MD也 ...

那么,请问你用的是哪个版本的 CP2K 呢?
另外,不是说 MD 不用监控,而是这个脚本没有检测出除了结构优化、晶胞优化以外的任务类型,不能起到区分任务的作用。

作者
Author:
ma455173220    时间: 2022-5-13 08:06
乐平 发表于 2022-5-12 22:36
那么,请问你用的是哪个版本的 CP2K 呢?
另外,不是说 MD 不用监控,而是这个脚本没有检测出除了结构优 ...

我是从8.1开始用的CP2K,用过8.1,8.2,和9.1。其他的版本我就没有用过了。
作者
Author:
乐平    时间: 2022-5-13 11:10
ma455173220 发表于 2022-5-13 02:06
我是从8.1开始用的CP2K,用过8.1,8.2,和9.1。其他的版本我就没有用过了。

我测试的是 8.1, 9.1 两个版本
作者
Author:
ma455173220    时间: 2022-5-13 13:31
本帖最后由 ma455173220 于 2022-5-13 13:47 编辑
乐平 发表于 2022-5-13 11:10
我测试的是 8.1, 9.1 两个版本

好吧...这我倒是没注意  小改了一下,这回应该没问题了
作者
Author:
乐平    时间: 2022-5-14 20:20
本帖最后由 乐平 于 2022-5-14 14:30 编辑

本来想用正则表达式来重写一个脚本,结果发现 CP2K 的作者为了图省事,居然对不同参数在不收敛时的用了一样的表达式
  1. --------  Informations at step =     1 ------------
  2.   Optimization Method        =                 BFGS
  3.   Total Energy               =       -38.1902526812
  4.   Internal Pressure [bar]    =    130282.9515280122
  5.   Real energy change         =        -0.0038006776
  6.   Predicted change in energy =        -0.0021074907
  7.   Scaling factor             =         0.0000000000
  8.   Step size                  =         0.0374832738
  9.   Trust radius               =         0.3779452266
  10.   Decrease in energy         =                  YES
  11.   Used time                  =                2.985

  12.   Convergence check :
  13.   Max. step size             =         0.0374832738
  14.   Conv. limit for step size  =         0.0030000000
  15.   Convergence in step size   =                   NO
  16.   RMS step size              =         0.0118532434
  17.   Conv. limit for RMS step   =         0.0015000000
  18.   Convergence in RMS step    =                   NO
  19.   Max. gradient              =         0.0301687411
  20.   Conv. limit for gradients  =         0.0004500000
  21.   Conv. for gradients        =                   NO   <---------
  22.   RMS gradient               =         0.0095401865
  23.   Conv. limit for RMS grad.  =         0.0003000000
  24.   Conv. for gradients        =                   NO  <---------
  25.   Pressure Deviation [bar]   =    130281.9382780122
  26.   Pressure Tolerance [bar]   =       100.0000000000
  27.   Conv. for  PRESSURE        =                   NO
  28. ---------------------------------------------------
复制代码


例如上面箭头所指的最大受力(Max. gradient)和均方根受力(RMS gradient)的判断收敛结果都用同样的 Conv. for gradients = NO 来表示不收敛


而当上述两个量都收敛后,才用不同的文字标注


  1. --------  Informations at step =     4 ------------
  2.   Optimization Method        =                 BFGS
  3.   Total Energy               =       -38.1977587610
  4.   Internal Pressure [bar]    =         7.6735903854
  5.   Real energy change         =        -0.0000004195
  6.   Predicted change in energy =        -0.0000003919
  7.   Scaling factor             =         0.0000000000
  8.   Step size                  =         0.0012617425
  9.   Trust radius               =         0.3779452266
  10.   Decrease in energy         =                  YES
  11.   Used time                  =                3.140

  12.   Convergence check :
  13.   Max. step size             =         0.0012617425
  14.   Conv. limit for step size  =         0.0030000000
  15.   Convergence in step size   =                  YES
  16.   RMS step size              =         0.0003989840
  17.   Conv. limit for RMS step   =         0.0015000000
  18.   Convergence in RMS step    =                  YES
  19.   Max. gradient              =         0.0000016300
  20.   Conv. limit for gradients  =         0.0004500000
  21.   Conv. in gradients         =                  YES    <---------------
  22.   RMS gradient               =         0.0000005138
  23.   Conv. limit for RMS grad.  =         0.0003000000
  24.   Conv. in RMS gradients     =                  YES  <---------------
  25.   Pressure Deviation [bar]   =         6.6603403854
  26.   Pressure Tolerance [bar]   =       100.0000000000
  27.   Conv. for  PRESSURE        =                  YES
  28. ---------------------------------------------------
复制代码


这样就没法用正则表达式来正确匹配了,总会在一开始漏掉均方根受力的收敛情况……
得想更好的办法来做。有意思。


作者
Author:
PoorChaos    时间: 2022-6-3 22:42
脚本要怎么运行阿大佬们
作者
Author:
ma455173220    时间: 2022-6-10 10:54
PoorChaos 发表于 2022-6-3 22:42
脚本要怎么运行阿大佬们

在终端直接运行“python3 cp2k-output-analyse.py cp2k.out”就可以
作者
Author:
PoorChaos    时间: 2022-6-10 16:48
ma455173220 发表于 2022-6-10 10:54
在终端直接运行“python3 cp2k-output-analyse.py cp2k.out”就可以

解决了,谢谢啦
作者
Author:
thor    时间: 2022-9-25 22:29
同6楼报错
作者
Author:
预想    时间: 2023-6-23 09:55
您好,请问出现这种报错是什么原因呢?之前一直很好用

作者
Author:
乐平    时间: 2023-6-23 10:09
预想 发表于 2023-6-23 09:55
您好,请问出现这种报错是什么原因呢?之前一直很好用

报错信息(倒数第四行)写得很清楚啊,没有找到 Qt 平台的 xcb 插件
作者
Author:
预想    时间: 2023-6-26 20:42
乐平 发表于 2023-6-23 10:09
报错信息(倒数第四行)写得很清楚啊,没有找到 Qt 平台的 xcb 插件

谢谢~

作者
Author:
thor    时间: 2024-5-6 11:00
我用这个脚本也是报错UnboundLocalError: local variable 'MAX_D' referenced before assignment,cp2k版本为2024.1,楼主可以测试下吗?

作者
Author:
ma455173220    时间: 2024-5-6 13:56
thor 发表于 2024-5-6 11:00
我用这个脚本也是报错UnboundLocalError: local variable 'MAX_D' referenced before assignment,cp2k版本 ...

我跑了一下你的输入文件,运行脚本没有问题(见附件)。话说这个脚本是用来处理输出文件的cp2k.out,而不是输入文件cp2k.inp。你是不是选错了
作者
Author:
thor    时间: 2024-5-6 16:06
ma455173220 发表于 2024-5-6 13:56
我跑了一下你的输入文件,运行脚本没有问题(见附件)。话说这个脚本是用来处理输出文件的cp2k.out,而不 ...

有点奇怪,没有选错,我输出的csv文件只有Done,没有前面的内容,我再看看
作者
Author:
ma455173220    时间: 2024-5-14 08:10
小小更新了一下,感觉之前的lines.index(line)好像应该是个BUG,虽然我不清楚为啥没出错,但是以防万一加了一个定位行数的变量line_number,之前如果运行出过错的朋友可以试下新的
作者
Author:
fuzanhui    时间: 2024-5-15 09:43
ma455173220 发表于 2024-5-14 08:10
小小更新了一下,感觉之前的lines.index(line)好像应该是个BUG,虽然我不清楚为啥没出错,但是以防万一加了 ...

(, 下载次数 Times of downloads: 1)
上面为.out文件,不知道为什么不能上传,所以改了一下后缀
运行报错
In process...
...
Traceback (most recent call last):
  File "cp2k-output-analyse.py", line 244, in <module>
    main()
  File "cp2k-output-analyse.py", line 228, in main
    process_output_file(output_file)
  File "cp2k-output-analyse.py", line 182, in process_output_file
    + "\n" + contents)
UnboundLocalError: local variable 'MAX_D' referenced before assignment

能否请老师帮忙看一下是什么问题?谢谢

作者
Author:
ma455173220    时间: 2024-5-16 16:39
fuzanhui 发表于 2024-5-15 09:43
上面为.out文件,不知道为什么不能上传,所以改了一下后缀
运行报错
In process...

错误的原因是你的这个out文件还没有完成一步结构优化的收敛,MAX_D这个变量是在CP2K完成了一步结构优化收敛后在Information那部分由『Conv. limit for step size』定义的。所以当你的output的SCF还没有收敛成功,结构优化还没有开始运行前,是无法获取MAX_D这个变量,我在cp2k.out前面找了找没找到相应的参数,所以只能在这里才定义了。不过我更新了一下脚本,在脚本遍历文件前先给MAX_D定义了一个默认参数,这样不至于报错了。你可以下载下新脚本试试。
(, 下载次数 Times of downloads: 44)

作者
Author:
fuzanhui    时间: 2024-5-19 10:08
ma455173220 发表于 2024-5-16 16:39
错误的原因是你的这个out文件还没有完成一步结构优化的收敛,MAX_D这个变量是在CP2K完成了一步结构优化收 ...

可以了,非常感谢老师指导!感谢
作者
Author:
LittlePupil    时间: 2024-5-21 23:09
本帖最后由 LittlePupil 于 2024-5-21 23:28 编辑
ma455173220 发表于 2024-5-14 08:10
小小更新了一下,感觉之前的lines.index(line)好像应该是个BUG,虽然我不清楚为啥没出错,但是以防万一加了 ...

不算bug, 但这么写逻辑确实有问题,如果中断后重跑的输出重定向到了和中断前相同的文件中,则由于index方法会返回第一个找到的索引,最后读到的还是中断前的“step x”的结果,现在改过后就不会有这个问题了。
作者
Author:
936039846    时间: 2024-6-4 10:30
有没有vasp的
作者
Author:
ma455173220    时间: 2024-6-8 19:05
936039846 发表于 2024-6-4 10:30
有没有vasp的

VASP有个grad脚本吧,我当初就是参照那个的,但是找不到了...
作者
Author:
936039846    时间: 2024-6-11 15:01
ma455173220 发表于 2024-6-8 19:05
VASP有个grad脚本吧,我当初就是参照那个的,但是找不到了...

我也没找到,如果大侠找到啦可不可以发我一份
作者
Author:
ma455173220    时间: 2024-6-11 16:59
936039846 发表于 2024-6-11 15:01
我也没找到,如果大侠找到啦可不可以发我一份

分享你一个我自己改写过的吧

作者
Author:
936039846    时间: 2024-6-17 09:47
ma455173220 发表于 2024-6-11 16:59
分享你一个我自己改写过的吧

好滴好滴,谢谢大侠

作者
Author:
heyapeng    时间: 2024-6-18 13:35
支持,点赞
作者
Author:
CohenTang    时间: 2024-11-9 16:59
大佬您好,我使用了这个脚本,但是输出的csv文件没有具体的收敛步数信息,是怎么回事?我用的OT,开启了outer scf,目前Optimization step 为25.
# Job Starting Date: 2024-11-09 13:51:50.798
# Total used time: 0:00:00
# Directory: /root/CP2K calculation/Meiyuanlin/RuCu-cluster
# RUN_TYPE: GEO_OPT
# EPS_SCF: 2.00E-05
# MAX_SCF: 50
# SCF_OPTIMIZER: OT
# OUTER_SCF: TRUE
# GEO_OPTIMIZER: BFGS
# STEP | SCF |    E [a.u.]    |  Delta E  | M_D(0.003) | R_D(0.0015) | M_F(0.00045) | R_F(0.0003) | TIME [s]
# Done!
作者
Author:
阿宁    时间: 2024-11-17 11:09
老师您好,感谢分享!我对结构优化完成后输出的cp2k.out使用脚本时出现以下报错,求教该如何解决。
[qxn@Master 1.5]$ python3.9 cp2k-output-analyse.py cp2k.out
=======================================
In process...
...
=======================================
Do you want to plot cycle vs. energy?
(y/n)
y
Traceback (most recent call last):
  File "/home/qxn/cp001/interval/1.5/cp2k-output-analyse.py", line 248, in <module>
    main()
  File "/home/qxn/cp001/interval/1.5/cp2k-output-analyse.py", line 241, in main
    plot_cycle_vs_energy(output_file.split('.out')[0] + "__data.csv")
  File "/home/qxn/cp001/interval/1.5/cp2k-output-analyse.py", line 207, in plot_cycle_vs_energy
    x.append(x[-1] + 1)
IndexError: list index out of range

作者
Author:
ma455173220    时间: 2024-11-18 06:46
阿宁 发表于 2024-11-17 11:09
老师您好,感谢分享!我对结构优化完成后输出的cp2k.out使用脚本时出现以下报错,求教该如何解决。
[qxn@M ...

看着好像是最新版的CP2K的输出格式改了?我还没有用过2024.3,有时间我修改一下。之前的版本都是通过'Informations at step'来定位每步的优化信息的,我看了一下你的输出文件格式完全不一样了,我有时间优化一下。如果你自己会python的话,建议你可以自己优化一下82-117行的内容。
作者
Author:
ma455173220    时间: 2024-11-25 11:28
阿宁 发表于 2024-11-17 11:09
老师您好,感谢分享!我对结构优化完成后输出的cp2k.out使用脚本时出现以下报错,求教该如何解决。
[qxn@M ...

我更新了下脚本,现在应该可以正常使用了




欢迎光临 计算化学公社 (http://ccc.keinsci.com/) Powered by Discuz! X3.3