DeePMD压力差分步长怎么选
用真实微应变数据观察压力差分的步长依赖,保留粗步长偏差,理解固定结构与有限温度压力的区别。
阅读本篇目录
用能量对体积求导,可以检查模型的构型压力。步长过大带来截断误差,过小则可能放大能量的数值噪声。本篇使用DeePMD与LAMMPS完整包中的同一组64原子硅结构,展示实际步长对照。
1 读取步长表格#
在解压目录执行:
bash analyze.sh
head -n 14 tables/pressure-steps.csv
表格包含模型与结构名、微应变 strain、差分压力 pressure_bar 和相对原生压力的绝对差 error_bar,单位均按列名标注。reference/pressure/ 保留每个条件的 source-base.dump、完整输入及实际±应变能量和体积;原10⁻⁵微应变结果留在 reference/original/。
2 结构怎样缩放#
三个方向同时乘1+ε或1−ε,所有坐标随晶胞仿射缩放,保持分数坐标;其它设置和权重固定。分别获得E₊、V₊和E₋、V₋,使用:
P_difference = -(E_plus - E_minus) / (V_plus - V_minus)
P_bar = P_difference × 1602176.5
这里是固定结构能量的导数,没有在每个体积下重新优化原子。若每个点都松弛,便是另一条能量曲线,不能与同一固定结构的原生virial直接混合。
查看默认新算例输入:
cat input-example.lmp
本包默认用ε=10⁻⁶。输入的第二次缩放因子为 (1−ε)/(1+ε),从已经放大的盒子转到缩小的盒子;它不是简单地在放大后再乘1−ε。参考步长扫描则在每次±应变前用 read_dump 重新读入同一实际基准坐标,避免连续缩放累积。
3 实际步长变化带来多大差异#

本组参考数据的最大绝对差如下:
| ε | 压力差最大值/bar |
|---|---|
| 3×10⁻⁵ | 0.651302 |
| 10⁻⁵ | 0.072368 |
| 3×10⁻⁶ | 0.006509 |
| 10⁻⁶ | 0.000706 |
| 3×10⁻⁷ | 0.000388 |
原10⁻⁵条件中有30个结果超过0.01 bar的参考容差,原值保留。小步长对照前固定选择10⁻⁶与3×10⁻⁷两档;这两档各自的误差与相互压力差均低于同一0.01 bar标准,因此默认脚本采用10⁻⁶。没有把粗步长偏差通过改容差变成一致。
图的横轴为对数坐标,纵轴使用靠近零为线性的symlog,零误差仍在零点,不插入人工下限。接近浮点噪声时继续缩小步长不一定改善,因此不能把“越小越好”作为通用规则。换模型、构型、精度或后端时应重新做自己的步长对照。
4 这个结果说明什么#
它表明在这组固定结构上,小步长能量导数与原生构型压力数值一致;没有据此证明教学模型的材料精度。部分模型仍有较大残余压力,见模型接入教程中的实际压力图。
生产使用时,先核对原子类型和单位,检查同模型接口能量/力/virial,再比较两个相邻小步长;随后使用自己的独立参考数据检查模型。有限温度EOS、热膨胀、相变或长时间MD还需要相应的采样和统计。
重新绘制参考图:
bash plot.sh
LAMMPS压力包含哪些项见官方压力定义;同模型张量顺序与符号见能量、力及virial对照。