ABACUS NVE分子动力学实操
Al32完整结构速度、实际GPU短轨迹、时间步与高精度能量重建。
阅读本篇目录
下载13个条件的完整输入、原生轨迹、续算状态与绘图脚本,解压进入附件根目录。先用已有数据生成图表:
bash analyze.sh
结果在reference/analysis、图片在reference/figures、ASE轨迹在reference/export。从头执行整套流程:
sbatch submit.slurm
脚本在新的work中依次运行13个条件,已有work时请新解压,避免覆盖已完成结果。想先跑一个条件,可在计算资源环境中加载下述模块、运行setup.py后用run_case.py指定目录名;普通用户不要在登录节点运行DFT。提交模板申请1张P100、1个MPI进程、1个线程,套餐用户按实际权限用yskit生成脚本。
本例ABACUS3.10.1模块为abacus/3.10.1-p100,GNU13.3、HPC-X2.50/OpenMPI5.0.10rc2、CUDA12.8环境,实际为P100双精度;后处理为ase/3.29.0。模型采用32原子fcc铝、3价电子LDA赝势Al.pz-vbc.UPF及PZ泛函,40Ry、Γ点、64条带,共96个价电子。不能用同名11价电子赝势替换后仍保留这些带数与精度设置。
这批轨迹只有40fs,用来指导输入、读取和续算,不用于扩散系数、熔点、平衡密度或收敛热力学性质。
1 准备结构、质量和初始速度#
先选结构和赝势,再核对真实原子质量、价电子数、带数、截断能与k点。此处初始晶胞约8.1Å,32个Al,每个26.9815385amu。所有方法使用相同坐标和相同初始速度,便于观察积分与温控差异。
完整初始STRU和KPT如下。STRU中的v使用原子单位,来自同一份实际初始速度;全部方法均先重标到300K。MD_dump中的速度输出单位则是Å/fs。
ATOMIC_SPECIES
Al 26.9815385 Al.pz-vbc.UPF upf201
LATTICE_CONSTANT
1.8897261246
LATTICE_VECTORS
8.1000000000 0.0000000000 0.0000000000
0.0000000000 8.1000000000 0.0000000000
0.0000000000 0.0000000000 8.1000000000
ATOMIC_POSITIONS
Cartesian
Al #label
0.0000 #magnetism
32 #number of atoms
0.0000000000 0.0000000000 0.0000000000 m 1 1 1 v -0.0002022714 -0.0000585777 -0.0000914589
0.0000000000 2.0250000000 2.0250000000 m 1 1 1 v -0.0000956932 -0.0001370987 -0.0001819375
2.0250000000 0.0000000000 2.0250000000 m 1 1 1 v -0.0001151940 -0.0001869389 -0.0001021715
2.0250000000 2.0250000000 0.0000000000 m 1 1 1 v -0.0001227666 -0.0000570496 -0.0000313293
0.0000000000 0.0000000000 4.0500000000 m 1 1 1 v 0.0000307482 -0.0001441434 0.0002935599
0.0000000000 2.0250000000 6.0750000000 m 1 1 1 v 0.0000264024 -0.0000025115 0.0001114159
2.0250000000 0.0000000000 6.0750000000 m 1 1 1 v -0.0000511200 -0.0000322891 -0.0000427355
2.0250000000 2.0250000000 4.0500000000 m 1 1 1 v -0.0000135003 0.0000410062 0.0001121096
0.0000000000 4.0500000000 0.0000000000 m 1 1 1 v -0.0000787156 0.0001773177 -0.0002519039
0.0000000000 6.0750000000 2.0250000000 m 1 1 1 v 0.0000573577 -0.0000235713 -0.0000197023
2.0250000000 4.0500000000 2.0250000000 m 1 1 1 v 0.0001123629 -0.0002119677 -0.0000311089
2.0250000000 6.0750000000 0.0000000000 m 1 1 1 v 0.0000456218 0.0000606568 0.0002058033
0.0000000000 4.0500000000 4.0500000000 m 1 1 1 v -0.0001055793 0.0000665224 -0.0001619965
0.0000000000 6.0750000000 6.0750000000 m 1 1 1 v 0.0000161835 -0.0000665501 -0.0001712472
2.0250000000 4.0500000000 6.0750000000 m 1 1 1 v -0.0000301301 -0.0000699648 0.0000757547
2.0250000000 6.0750000000 4.0500000000 m 1 1 1 v 0.0001816910 0.0000285406 -0.0001865111
4.0500000000 0.0000000000 0.0000000000 m 1 1 1 v 0.0002124039 0.0002270334 -0.0000108941
4.0500000000 2.0250000000 2.0250000000 m 1 1 1 v -0.0002552073 -0.0001984731 -0.0000300682
6.0750000000 0.0000000000 2.0250000000 m 1 1 1 v 0.0001711845 -0.0001905222 -0.0002271788
6.0750000000 2.0250000000 0.0000000000 m 1 1 1 v 0.0000741727 0.0002223712 -0.0002744201
4.0500000000 0.0000000000 4.0500000000 m 1 1 1 v 0.0000666058 0.0002422748 0.0000229642
4.0500000000 2.0250000000 6.0750000000 m 1 1 1 v 0.0000487248 -0.0000689361 0.0000452164
6.0750000000 0.0000000000 6.0750000000 m 1 1 1 v 0.0000018886 0.0000150742 0.0000248711
6.0750000000 2.0250000000 4.0500000000 m 1 1 1 v 0.0001763869 0.0000349735 -0.0000659053
4.0500000000 4.0500000000 0.0000000000 m 1 1 1 v 0.0000417091 -0.0000227283 0.0002475081
4.0500000000 6.0750000000 2.0250000000 m 1 1 1 v -0.0000809799 0.0002203553 0.0002087150
6.0750000000 4.0500000000 2.0250000000 m 1 1 1 v -0.0001143448 0.0001634769 -0.0001522490
6.0750000000 6.0750000000 0.0000000000 m 1 1 1 v -0.0000883195 0.0000998355 0.0002005142
4.0500000000 4.0500000000 4.0500000000 m 1 1 1 v 0.0000471590 0.0000922732 0.0001684490
4.0500000000 6.0750000000 6.0750000000 m 1 1 1 v -0.0001950416 0.0000631123 0.0002919929
6.0750000000 4.0500000000 6.0750000000 m 1 1 1 v 0.0000527252 -0.0002006172 0.0000401940
6.0750000000 6.0750000000 4.0500000000 m 1 1 1 v 0.0001855357 -0.0000828843 -0.0000162499
K_POINTS
0
Gamma
1 1 1 0 0 0
2 先从NVE短跑检查#
al-nve/INPUT完整内容:
INPUT_PARAMETERS
suffix tutorial
pseudo_dir ../../PP_ORB
ntype 1
basis_type pw
calculation md
ecutwfc 40
nbands 64
ks_solver cg
symmetry 0
device gpu
precision double
scf_thr 1e-7
scf_nmax 100
smearing_method gaussian
smearing_sigma 0.01
cal_force 1
cal_stress 1
out_chg 0
md_type nve
md_nstep 80
md_dt 0.5
md_tfirst 300
md_seed 12345
md_dumpfreq 1
md_restartfreq 40
dft_functional pz
init_vel 1
md_tlast 300
dump_force 1
dump_vel 1
dump_virial 1
md_type nve不耦合恒温器;md_dt 0.5单位fs,md_nstep 80对应40fs。初始温度300K不是每一步都强制300K。scf_thr 1e-7控制每一步电子收敛;电子未收敛时,应先解决SCF,再讨论轨迹稳定性。
smearing_sigma 0.01是电子高斯展宽,单位Ry,不是离子温度。输出势能使用该电子占据模型的DFT能量;不能把展宽直接换成离子热浴温度。
3 看能量转移,不只看温度#
本例起点是完整fcc位置并赋予热速度,早期动能会转入晶格振动势能。NVE末温约70.79K,不代表程序把温度“设错了”;更应看势能与离子动能之和。

原生MD热力学表的总能量只打印8位有效数字,直接放大很小漂移会呈现台阶。附件用每一步最后的高精度E_KohnSham(eV)加原生动能列(Ry换eV)重建总能量,同时保留原始低精度总能列。两者没有通过平滑或平移来降低误差。
| 步长 / fs | 步数 | 总时长 / fs | 重建总能峰峰值 / meV·atom⁻¹ |
|---|---|---|---|
| 0.5 | 80 | 40.0 | 0.00604082 |
| 1.0 | 40 | 40.0 | 0.00680184 |
两种步长在这段短轨迹上都很小;不能仅凭这两个接近的数值就断言已证明积分器误差阶数。电子自洽阈值、初态和输出精度也影响观测值。
读取实际表:
python - <<'PY'
import csv
with open('reference/analysis/conditions.csv') as f:
for r in csv.DictReader(f):
if r['name'] in ['al-nve','al-nve-dt1']:
print(r['name'],r['dt_fs'],r['energy_reconstructed_range_meV_per_atom'])
PY
自己从两个原生能量分量重算最后一帧:
python - <<'PY'
import csv
with open('reference/analysis/al-nve-thermo.csv') as f:
r=list(csv.DictReader(f))[-1]
print('SCF potential/eV',r['PE_SCF_eV'])
print('ionic kinetic/eV',r['KE_eV'])
print('sum/eV',float(r['PE_SCF_eV'])+float(r['KE_eV']))
print('native rounded total/eV',r['E_eV'])
PY
4 再决定是否进入更长轨迹#
先加密截断能/k点并检查相同物性,再选时间步和SCF阈值;结构和温度平衡后才采集生产轨迹。NVT/NPT的物理能量可与热浴或压浴交换,不能照搬NVE的物理能量守恒判据。下一步见恒温器实操与恒压实操。