ABACUS 专题

ABACUS NVE分子动力学实操

Al32完整结构速度、实际GPU短轨迹、时间步与高精度能量重建。

更新于 2026-10-29约 9 分钟阅读按任务与环境选择适用配置
阅读本篇目录

下载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,不代表程序把温度“设错了”;更应看势能与离子动能之和。

真实Al32结构、能量转移与两种步长

原生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的物理能量守恒判据。下一步见恒温器实操与恒压实操。

参阅3.10.1原生MD输出与单位。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗