计算化学公社

标题: cp2k怎么批量提出动力学过程中每帧的结构 [打印本页]

作者
Author:
zhangs    时间: 2024-10-31 12:47
标题: cp2k怎么批量提出动力学过程中每帧的结构
各位老师,请教下,我用cp2k跑了一个AIMD,现在想计算每一步的单点能,有什么方法可以提出每一帧的轨迹文件吗?

作者
Author:
Uus/pMeC6H4-/キ    时间: 2024-10-31 13:13
本帖最后由 Uus/pMeC6H4-/キ 于 2024-11-1 11:10 编辑

CP2K的轨迹文件<proj>-pos-1.xyz就是动力学中输出的每一帧的结构写成的.xyz拼成的,那要提取只需很简单的Linux文件裁切命令就行:
  1. split ./"<filename>" "<prefix>" -l <xyz_lines> -d -a <digits> --additional-suffix="<suffix>"
复制代码

比如一个叫md-pos-1.xyz的轨迹文件,结构自始至终有128个原子(这样每一个提取出来的xyz文件都有128+2=130行内容,末尾还有一个额外的空行),打算提取出的文件名以"frame"开头,中间是代表帧号的4位数字,最后以"-cut.xyz"结尾,那切换到轨迹文件所在目录后裁切命令就写作
  1. split ./"md-pos-1.xyz" "frame" -l 130 -d -a 4 --additional-suffix="-cut.xyz"
复制代码


编辑:稍微解释一下,split指令默认用字母给输出文件命名编号排序,故加-d改成用数字。-a 4表示帧号数字一共四位,不够4位就用先导0补齐;具体要几位取决于轨迹文件记录的帧数,按CP2K输入文件&MD/STEPS和&PRINT/&TRAJECTORY/&EACH/MD字段的设置自己算,-a 4适合几千帧的情况,如有上万帧就用-a 5,等等。若-a设大了会有多余先导0,-a设小了则会裁切中途提示"split: output file suffixes exhausted"。另外,由于MD记录的第一帧是编号i=0,上面命令的写法会按默认设置从0000开始命名编号;但结构优化记录的第一帧编号是i=1,上面命令的-d建议改成--numeric-suffixes=1以从0001开始。
作者
Author:
sobereva    时间: 2024-10-31 16:24
利用&MD里的&REFTRAJ,直接就可以从xyz轨迹里读取各帧结构并计算能量/受力/属性,不需要特意提出来白走趟弯路
作者
Author:
chenzhe    时间: 2024-11-5 09:22
本帖最后由 chenzhe 于 2024-11-5 09:58 编辑
sobereva 发表于 2024-10-31 16:24
利用&MD里的&REFTRAJ,直接就可以从xyz轨迹里读取各帧结构并计算能量/受力/属性,不需要特意提出来白走趟弯 ...

老师,具体&REFTRAJ命令怎么用的?
之前老版本是这样。
    &REFTRAJ
      TRAJ_FILE_NAME xxx.xyz
      EVAL_ENERGY_FORCES .TRUE.
      EVAL_FORCES .TRUE.
      FIRST_SNAPSHOT 1
      LAST_SNAPSHOT 50
      STRIDE 1
    &END REFTRAJ

但是新版本cp2k手册上写这EVAL_ENERGY_FORCES和EVAL_FORCES已经弃用,不过我没看到新的相应案例。
作者
Author:
sobereva    时间: 2024-11-8 21:51
chenzhe 发表于 2024-11-5 09:22
老师,具体&REFTRAJ命令怎么用的?
之前老版本是这样。
    &REFTRAJ

在CP2K自带的测试文件里搜例子




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