qNEP求解器与力的数值核对
比较Ewald与三个PPPM网格,使用实际零时间步能量差分检查力,并说明GPU浮点、输出单位与电荷约定。
阅读本篇目录
本篇接qNEP静态计算,使用同一个已训练PbTe模型。下载完整输入和原生结果,保存为qnep.zip。本集群实际运行16个单卡任务:8个参考帧分别在P10016G和V10016G计算,每个任务23次GPUMD/nep调用。程序为GPUMD5.9.1,GCC13.3/CUDA12.9;分析使用ASE3.29.0。
1. 先统一长程求解器#
kspace ewald
GPUMD默认是PPPM,默认最大网格间距1Å;NEP预测走直接Ewald。做两端数值对照时,在run.in明确写kspace ewald。这个关键字应在第一次run之前,整个文件只设一次。
要比较PPPM精度,分别放在独立目录:
kspace pppm 1.0
kspace pppm 0.5
kspace pppm 0.25
每个目录使用同一个模型和结构,其余设置保持不变。网格由程序自动选择,实际间距可能小于请求值;参数定义见官方kspace说明。更细网格增加计算量,应按自己的能量/力需求做对照。
2. 查看实际网格与差异#
unzip qnep.zip -d qnep
cd qnep
bash analysis.sh
head analysis/pppm-mesh.csv
以P100第24帧为例:
| 请求PPPM间距/Å | 实际网格 | 与Ewald的能量差/eV·atom⁻¹ | 最大力分量差/eV·Å⁻¹ |
|---|---|---|---|
| 1.0 | 20×20×20 | 6.082712e-05 | 0.00027198158 |
| 0.5 | 40×40×40 | 1.36776e-06 | 1.9789401e-05 |
| 0.25 | 80×80×80 | 1.32676e-06 | 2.0215372e-05 |

两平台的曲线大部分重合。这个例子中,从1Å细化到0.5Å明显减小差异;进一步到0.25Å不保证每个分量继续单调变小,浮点与离散误差会形成平台。不要把“网格更细”直接等同于所有体系都更准确,也不要把不同求解器的结果不加说明混在同一统计里。
3. 用能量差分检查力#
配套程序选定一个原子,分别沿x/y/z移动±h:
F_x ≈ -[E(x+h)-E(x-h)] / (2h)
所有计算使用time_step 0,不让MD演化改变位移。三个预先选定步长是0.03、0.01、0.003Å,主比较固定使用0.01Å,不逐原子分量挑最好结果。
head analysis/finite-differences.csv
cat reference-data/p100-f24/fd-0p01-0-plus/run.in
head reference-data/p100-f24/fd-0p01-0-plus/model.xyz
cat reference-data/p100-f24/fd-0p01-0-plus/thermo.out
上面文件分别给出设置、真正改变后的坐标和该点能量。0.01Å下,16组中选定原子三个力分量的最大差约 4.26×10⁻⁴eV/Å。差分步长过大有截断误差,过小又会放大GPU浮点及能量相减噪声,所以需要看一组步长,而不是无限减小h。

4. 用nep预测作另一项数值对照#
本例预测的完整nep.in:
version 4
type 2 Te Pb
cutoff 8 4
n_max 6 6
basis_size 6 6
l_max 4 2 0
neuron 30
charge_mode 2
prediction 1
要在分配到的GPU作业中执行nep,不能把gpumd和nep的输入文件混用。元素顺序、截断半径、描述符和神经元数必须与nep.txt一致。
energy_train.out的预测能量为eV/atom,GPUMD的thermo.out第三列为整胞eV,比较前先除原子数。电荷则按前篇说明统一到中性化定义,原文件全部保留。
| 16组对照指标 | 实际最大差 |
|---|---|
| Ewald GPUMD/nep能量 | 3.76×10⁻⁶eV/atom |
| 力分量 | 8.53×10⁻⁶eV/Å |
| 同一定义的电荷分量 | 1.64×10⁻⁶e |
NEP文本输出有六位有效数字的舍入,不能要求它与高精度XYZ输出逐字节相同。以上是两个运行入口与数值梯度的一致性,不是对DFT或实验准确度的独立检验。
5. 重新运行自己的工作区#
python3 prepare.py
python3 make_jobs.py
cd cases/p100-f24
sbatch job.slurm
已有cases时不要再次prepare覆盖。16组全部结束后,在根目录:
bash analysis.sh --new
ls analysis-new figures-new
不带--new时只查看自带参考;带参数时明确分析自己新跑的cases。小体系的静态数值检查不代替MD稳定性、独立测试集或目标物性验证。qNEP可用能量/力数据训练而不强制要求目标原子电荷,但若要解释电荷、BEC或介电响应,应加入相应约束或独立验证;不是加上电荷头就自然得到已拟合物性。