CP2K神经网络势:力核对与短时动力学
以真实能量差分、刚性变换和10步NVE说明如何检查NNP能量、力及轨迹,附完整终端操作。
阅读本篇目录
本例使用鸢算科技集群CP2K 2026.2的原生Behler–Parrinello NNP接口,分别执行八个单模型、八模型平均、平移与旋转对照、18个有限差分能量点及10步NVE,共30个实际运行条件。模型采用现有CP2K数据目录中的bulkH2O-jcp2020-cnnp,没有新训练,也没有调用DFT。
下载完整输入、原始结果和读取绘图工具,保存为example.zip:
python3 -m zipfile -e example.zip .
cd cp2k-nnp-committee-example
bash results.sh
bash read.sh
bash plot.sh
以上读取已经完成的结果,图片在figures/,CSV在analysis-read/。本例用一个三原子水分子降低学习成本;所用势在体相水上训练,所以这里用于演示接口、模型平均和导数关系,不证明孤立分子或其他水相的预测精度。模型的能量零点也不能直接与另一种DFT总能相比。
程序采用Intel oneAPI 2024.2/ifx、Intel MPI 2021.13和MKL构建,选择cp2k/2026.2-8173m。此原生NNP入口使用已安装的对称函数和网络权重,不需要LibTorch;NequIP、Allegro、MACE等另外的接口有各自依赖,不能据此推断它们已在同一构建中可用。
1. 先用能量导数核对力#
配套脚本将三颗原子的九个坐标分别移动±0.0001 Å,执行18个独立单点。用中心差分:
F = -[E(x+h)-E(x-h)]/(2h)
能量是Hartree,位移是Å,所得先为Hartree/Å;乘0.529177210903 Å/Bohr后,才与程序输出的Hartree/Bohr比较。忘记这一步会使看似合理的力差一个单位因子。
bash read.sh
cat analysis-read/NNP-force-finite-difference.csv
bash plot.sh

本次最大差约1.22×10⁻⁸ Hartree/Bohr。它说明本例能量导数与力接口相符,不说明这个势已达到相同数值的DFT预测精度。位移幅度要兼顾截断误差和数值消减,不是越小越好。
2. 平移和旋转也要一起看#
脚本保留了原结构、整体平移和绕z轴旋转0.6 rad的三个输入。非周期体系整体刚性平移后能量不应改变;旋转后能量不变,但力向量应跟着旋转。只比较力的模长会漏掉方向错误。
cat inputs/translated/input.inp
cat inputs/rotated/input.inp
本例还检查总力与总力矩。它们是模型导数与变换的一致性检查,不能代替不同化学环境的训练集覆盖、参考DFT或测试集误差。
3. 让相同NNP走十步短MD#
cat inputs/committee-NVE10/input.inp
在静态输入外增加的动力学部分是:
&MOTION
&MD
ENSEMBLE NVE
STEPS 10
TEMPERATURE 300
TIMESTEP 0.1
&END MD
&PRINT
&TRAJECTORY
&EACH
MD 1
&END EACH
&END TRAJECTORY
&VELOCITIES
&EACH
MD 1
&END EACH
&END VELOCITIES
&END PRINT
&END MOTION
TEMPERATURE 300用于初始化速度;NVE没有维持300 K的恒温器。TIMESTEP 0.1单位fs,共走1 fs。全部完整输入和初始结构已在下载包中,配套run.slurm会执行这段任务。
head reference-results/committee-NVE10/nnp-1.ener
cat analysis-read/NNP-NVE10.csv

本次守恒量峰峰差约3.84×10⁻⁷ Hartree。如此短的轨迹只展示文件和步骤,不能证明长时间稳定性、相平衡或扩散;小分子的瞬时温度也不应按宏观温度理解。
4. 换成自己的体系时#
先确认元素、周期边界、模型训练域和单位,再用少量结构比较参考能量与力;检查模型分歧、能量导数、时间步敏感性后,才延长MD。需要体相水时应准备合适密度和周期晶胞,不能简单复制这里的孤立分子。
sbatch run.slurm
# 完成后
bash read.sh work analysis-new
bash plot.sh analysis-new figures-new
下载有限差分力表 · 下载短MD表。所有读取脚本使用本次真实原生输出;参考图片不会因你的新任务自动更新,绘图时明确指定自己的分析目录。