LAMMPS 时间步长与能量漂移
时间步长与能量漂移,包含可提交输入、实际终端命令、数据和配图。
阅读本篇目录
本文使用鸢算科技集群 LAMMPS 30 Sep 2026 的真实计算。下载输入、参考轨迹、分析脚本与数据图(约 72.5 MB),解压后进入 lammps-examples。cases 保存参考结果,inputs 保存干净输入,使用 new-case.py 创建自己的计算副本。
要完成什么#
NVE 段的总能量随时间变化,是检查时间步长与数值稳定性的直接入口。图中是同一 LJ 模型的两次独立平衡和 NVE 演示,步长分别 0.002 和 0.008,各采样 12000 步,因此物理时长也不同;不要用它们作严格同起点精度基准。
正式选择步长时,应从同一保存构型和速度出发,比较相同物理时长,依次减小步长,再核对能量漂移、温度与结构。约束键、高频振动、强碰撞和激烈形变会改变允许步长。控温器会掩盖部分能量误差,因此不能只看 NVT 温度是否稳定。
1 准备并提交#
python new-case.py lj-nve-0.002
cd work/lj-nve-0.002
sbatch run.sh
run.sh 是本算例匹配的核时 P100 或 V10016G 模板。套餐用户按自己的权限使用 yskit 生成提交脚本,保留下面的计算命令。完整模拟在计算节点执行。其他例子回到资料包根目录,替换目录名后分别提交。
| 目录 | 内容 |
|---|---|
lj-nve-0.002 |
独立输入、参考输出和可重跑命令 |
lj-nve-0.008 |
独立输入、参考输出和可重跑命令 |
2 实际计算命令与输入#
lj-nve-0.002#
mpirun -np 1 lmp -sf gpu -pk gpu 1 -in in.lammps > stdout.log 2>&1
lj-nve-0.008#
mpirun -np 1 lmp -sf gpu -pk gpu 1 -in in.lammps > stdout.log 2>&1
下面是 lj-nve-0.002/in.lammps 的完整输入;其他目录的完整输入也在资料包中。
units lj
atom_style atomic
boundary p p p
lattice fcc 0.8
region box block 0 8 0 8 0 8
create_box 1 box
create_atoms 1 box
mass 1 1
pair_style lj/cut 2.5
pair_coeff * * 1 1 2.5
pair_modify shift yes
neighbor 0.3 bin
neigh_modify every 1 delay 0 check yes
thermo 100
thermo_style custom step time atoms temp pe ke etotal press vol density
thermo_modify norm no format float %.12g
timestep 0.002
velocity all create 1.0 927451 mom yes rot yes dist gaussian
fix eq all nvt temp 1.0 1.0 0.5
run 4000
unfix eq
reset_timestep 0
dump tr all custom 200 trajectory.lammpstrj id type x y z vx vy vz
dump_modify tr sort id
fix int all nve
compute rdf all rdf 100
fix rdfout all ave/time 10 100 1000 c_rdf[*] file rdf.dat mode vector
compute msd all msd com yes
compute vac all vacf
fix transport all ave/time 10 1 10 c_msd[4] c_vac[4] file transport.dat
compute peatom all pe/atom
compute cn all coord/atom cutoff 1.4
compute centrosym all centro/atom fcc
run 12000
write_data final.data
write_restart final.restart
write_dump all custom final.dump id type x y z c_peatom c_cn c_centrosym modify sort id
3 查看输出与实际数据#
tail -n 30 stdout.log
ls -lh
stdout.log 是计算输出;轨迹保存在 trajectory.lammpstrj(适用的算例),结构保存在 final.data。静态扫描和 run 0 对照不一定生成动力学轨迹。以下动态均值取最后一个热力学输出块的后半段;静态结果取对应输出,单位随输入确定。
| 算例 | 原子数 | 平均温度 | 平均密度 | 最后势能 |
|---|---|---|---|---|
lj-nve-0.002 |
2048 | 0.971622 | 0.8 | -9676.27039 |
lj-nve-0.008 |
2048 | 1.01325 | 0.8 | -9568.97935 |
LJ/珠簧例子使用约化单位;metal 为 K、g/cm³、eV;水的 real 单位为 K、g/cm³、kcal/mol。势能列是整个体系的总量,跨不同原子数不可直接相比。
| 例子 | 本次最大每原子总能量变化(LJ) |
|---|---|
| lj-nve-0.002 | 3.88016e-05 |
| lj-nve-0.008 | 0.000507333 |

4 提取数据与重画#
回到附件根目录,使用已经安装的 ASE Python 环境执行真实数据分析脚本:
module load ase/3.29.0
python analyze.py --root .
ls analysis
ls figures
脚本使用 NumPy/Matplotlib,读取参考日志、轨迹和相关函数,生成 CSV 与 PNG。查看 analyze.py 中本篇对应目录的处理段,可以把路径换成你的新结果。完整脚本按本专题的全部参考目录组织,单个新算例不需要假造其他目录来运行;提取对应段即可。