type
status
date
slug
summary
tags
category
icon
password

CP2K批量计算

本节介绍几个常用于 CP2K 批量计算的脚本:CIF.shlink.shbatchruncp2k.pbscheck.shfind.sh,并结合示例讲述如何使用脚本 cp2k2dp.pydp2xyz.py 构建 .xyz 格式的势函数训练集。

生成结构

准备训练集之前,首先要明确做一个怎样的势函数?通用势函数需要采样非常丰富的结构;而专注于研究某种性质的势函数,采样覆盖目标问题相关的势能面区域即可。常规的势函数训练集包括对应温度区间的 AIMD 采样结构,结合一定的原子坐标微扰结构(微扰操作见下文)即可。
AIMD 的精度不用要求太高,例如可以使用 TZVP 基组、100 Ry 截断、单 Gamma 点加速采样。使用 CP2K 进行 AIMD 模拟时,要注意开启 MOTION/PRINT/CELL 和MOTION/PRINT/FORCES,如下所示:
否则无法使用 cp2k2xyz.py 脚本提取 NEP 训练所需的 .xyz 格式的结构文件。cp2k2xyz.py 脚本如下:
时间步长设置为 2 fs,间隔 0.1 ps 对轨迹抽样即可。更小时间间隔内的结构之间具有强关联性,对增加训练集多样性无益,徒增训练集大小。
采样和微扰过后,需要重新进行高精度的单点能计算以获得高精度的原子受力。值得注意的是,CP2K 单点计算得到的位力信息不是很准,所有有时引入位力信息对势函数训练反而有害无益。

对平衡晶胞施加微扰

对平衡的晶胞施加微扰,一般包括 ±3% 的随机形变和每个原子 0.05、0.10、0.20 Å 的随机位移(如果模拟对象包含非晶相或液相,随机位移可以逐渐增大到1.0 Å)。 推荐使用更小的平衡晶胞(不超过64原子)来施加微扰,既不妨碍实现各种形变,又有效地控制了训练集中总的原子数目,是加速训练集构建行之有效的策略。 微扰后的结构可以使用 screen_forces.py 或类似脚本剔除不合理的结构(例如高嫩结构和原子受力特别大的结构)。
模拟对象无序度较高时,可以使用 RAG(Randomized Atomic-system Generator)或类似的方法迅速采样中高能区域势能面,但是这种方法可能引入非物理结构导致势能面失真,需要谨慎处理。 RAG 方法的具体细节参考 Efficient Training of Machine Learning Potentials by a Randomized Atomic-System Generator 一文。

CP2K 批量计算

假如手里已经有了筛选后的结构文件,例如 iter0.xyz,使用 Ovito 将其输出为一帧一帧的 .cif 结构文件存放在文件夹 iter0/ 下。使用 ./CIF.sh iter0/iter0/ 下的每一帧 .cif 结构文件转为对应的子文件夹及子文件夹中的 input.cif 文件。
CIF.sh 脚本如下:
拷贝 link.shbatchruncp2k.pbscheck.shfind.shiter0/ 下,并在 iter0/ 下准备批量计算用到的输入文件 cp2k.inp
这里给出一个单点计算的 cp2k.inp 示例:
使用 ./link.sh cp2k.inp 将输入文件链接到每一个子文件下。此时修改任何一个 cp2k.inp,所有的 cp2k.inp 都会改变。link.sh 脚本如下:
如果结构文件的元素种类不同一,那么单点计算不能使用同样的 cp2k.inp。建议根据晶胞原子数将相同原子数的结构放到同一个文件夹下使用相同的 cp2k.inp 进行单点计算。
输入文件齐全后,可以使用 qsub batchruncp2k.pbs 提交作业。batchruncp2k.pbs 脚本如下:
计算过程中,每一个子任务完成都会在 ./tmp 文件中输出对应信息。计算完成后,使用 ./check.sh 检查收敛情况。check.sh 脚本如下:
考虑到每个人的磁盘空间是有限的,计算完成后删除所在目录下的 .wfn 文件(如果有设置输出的话)是很有必要的。使用 ./find.sh *.wfn 删除不需要的文件。find.sh 脚本如下:

单点数据收集

为了收集单点计算的数据,可以使用 cp2k2dp.py 脚本从 cp2k.out 文件中提取 DeePMD 训练所需的结构文件。然后,使用 dp2xyz.py 脚本将 DeePMD 格式的结构文件批量转化成 NEP 训练所需的 .xyz 文件。cp2k2dp.py 脚本如下:
注意指定路径和 type_map
 
dp2xyz.py 脚本如下:
Colab入门使用Multiwfn创建CP2K输入文件
Loading...