GPUMD NVE 与时间步检查
Cu和Ar六组20ps实算,完整输入、总能量提取、漂移与温度解释。
阅读本篇目录
NVE不施加恒温器或恒压器,适合先检查时间步、势函数和积分过程的能量行为。本篇在同一材料准备起点上,对Cu使用0.5、1、2fs,对Ar使用1、2、4fs,各运行20ps。

1. 先完成准备,再选择时间步#
在已有计算资源中:
bash prepare.sh
bash run.sh cu-nve-dt0p5
bash run.sh cu-nve-dt1p0
bash run.sh cu-nve-dt2p0
prepare.sh 建立共同Cu/Ar状态,只执行一次。下例保持相同的20ps生产长度:
cu-nve-dt1p0 / run.in
potential potential.txt
time_step 1
ensemble nve
dump_thermo 100
dump_xyz 1000 trajectory.xyz precision double mass velocity force potential virial unwrapped_position
dump_restart 20000
run 20000
0.5fs对应40000步,2fs对应10000步。比较时间步时应比较相同的物理时长,而不是简单给各任务相同的run步数。
展开其余五组完整NVE输入
cu-nve-dt0p5 / run.in
potential potential.txt
time_step 0.5
ensemble nve
dump_thermo 100
dump_xyz 1000 trajectory.xyz precision double mass velocity force potential virial unwrapped_position
dump_restart 40000
run 40000
cu-nve-dt2p0 / run.in
potential potential.txt
time_step 2
ensemble nve
dump_thermo 100
dump_xyz 1000 trajectory.xyz precision double mass velocity force potential virial unwrapped_position
dump_restart 10000
run 10000
ar-nve-dt1p0 / run.in
potential potential.txt
time_step 1
ensemble nve
dump_thermo 100
dump_xyz 1000 trajectory.xyz precision double mass velocity force potential virial unwrapped_position
dump_restart 20000
run 20000
ar-nve-dt2p0 / run.in
potential potential.txt
time_step 2
ensemble nve
dump_thermo 100
dump_xyz 1000 trajectory.xyz precision double mass velocity force potential virial unwrapped_position
dump_restart 10000
run 10000
ar-nve-dt4p0 / run.in
potential potential.txt
time_step 4
ensemble nve
dump_thermo 100
dump_xyz 1000 trajectory.xyz precision double mass velocity force potential virial unwrapped_position
dump_restart 5000
run 5000
2. 从原生输出计算总能量#
thermo.out 中第2列是动能,第3列是势能,单位eV;NVE总能量使用两者之和。
module load ase/3.29.0
python - <<'PYENERGY'
import numpy as np
a=np.loadtxt('work/cu-nve-dt1p0/thermo.out')
t=np.arange(1,len(a)+1)*100*1.0/1000
E=a[:,1]+a[:,2]
print('first/last eV:',E[0],E[-1])
print('span meV/atom:',np.ptp(E)/256*1000)
print('slope eV/atom/ps:',np.polyfit(t,E,1)[0]/256)
PYENERGY
先加载ASE模块取得配套Python与NumPy,再执行上面的命令;完整数值和绘图由资料包的分析入口处理。这里第一条热力学数据是在100步后保存,不是初始0时刻;图上明确使用“相对第一条已保存能量”。
3. 本次实际数据#
| 材料 | 时间步/fs | 能量线性斜率/eV·原子⁻¹·ps⁻¹ | 能量全跨度/meV·原子⁻¹ |
|---|---|---|---|
| CU | 0.5 | 3.643e-07 | 0.060294 |
| CU | 1.0 | 5.372e-07 | 0.060353 |
| CU | 2.0 | 7.417e-07 | 0.059481 |
| AR | 1.0 | 5.001e-08 | 0.036090 |
| AR | 2.0 | -9.981e-08 | 0.035858 |
| AR | 4.0 | -2.182e-07 | 0.030681 |
斜率是整段短轨迹的线性拟合,全跨度是最高与最低能量的差,两者表达不同。正负斜率都可能出现,不要只看末值相对初值的符号。
Cu这组数据中更小步长的线性漂移较小;这不是对所有材料、势和采样长度的通用排序。Ar使用未平滑截断LJ,原子对穿过截断会带来能量跳变,减小时间步也不能消除势定义本身的不连续,具体见LJ截断实例。
4. 温度为什么没有一直等于初始目标#
NVE没有控温器,动能与势能不断交换,瞬时温度会起伏;短准备后的NVE均值也不保证正好等于准备时设定的温度。不要为了让温度曲线变平,给NVE任务悄悄加上重标度或重新初始化速度。
5. 换客户体系时检查什么#
从合适的优化和准备状态开始,选择至少两个时间步,比较相同长度的NVE轨迹。检查能量的振荡与漂移、温度、结构是否合理、最短原子间距和势截断处理。含轻元素、高频振动或极端温压的体系不能照抄Cu和Ar步长。20ps的本例不用于证明长时热输运或任何体系的普遍稳定性。
资料包与完整运行#
下载完整输入、真实参考数据、末态重算与绘图脚本,解压后进入目录。先重画随包结果:
bash analyze.sh
输出为 reference/analysis/ 下的CSV、数值摘要和 reference/figures/ 中的图片。原生末态重算结果已经随包,分析会先核对其输入,再处理数据。
新解压目录提交准备加一个Cu NVT-BDP实例:
sbatch run.slurm
提交完整46条件、两个材料准备流程和依赖分析:
bash submit.sh
只生成脚本检查,用 bash submit.sh --dry-run。整套完成后:
bash analyze.sh work common
这一步对每个重启末态做零步静态导出,再独立分析和画图,应在已分配的计算资源内执行;生成的分析作业已包含这些命令。只运行单例时,先直接查看其 thermo.out、trajectory.xyz、restart.xyz,统一分析需要46条件齐全。
run.slurm 默认一张P100、一个CPU核、gpu-8p100-hs;套餐用户按权限改为例如 gpu-8p100-tc。整套提交还需修改 submit.py 中的partition。bash prepare.sh 和 bash run.sh 条件名 是已有任务资源内的入口,不在登录或管理节点直接运行。prepare.sh 只在新目录建立 common/cu、common/ar,已有common/work/jobs保留;重跑整套请重新解压。单进程启动,不使用mpirun。
固定环境:GPUMD5.9.1、GCC13.3、CUDA12.9,模块 gpumd/5.9.1-p100;该构建含PLUMED2.10.1和NetCDF-C4.10.1,本批没有施加偏置。分析使用ASE3.29.0环境中的NumPy/Matplotlib。20ps结果用于操作与数值关系参考,正式材料研究仍需检查准备时长、模型、尺寸、时间步和采样;不据此给出收敛热力学量、相界或性能排名。