GPUMD:准备电子温度与自由能标签
用真实VASP铝晶胞计算准备温度NEP数据,展示完整输入、能量定义、力差分与k点对照。
阅读本篇目录
温度依赖NEP需要的不只是给普通数据文件加一个温度数字,还需要对应电子温度下计算得到的自由能与力。本例以15个不同的4原子fcc-Al小晶胞为例,先准备真实标签,再在下一篇训练model_type 3。
1. 下载并查看实际数据#
下载电子温度、完整输入、实际标签、训练模型与绘图脚本,保存为gpumd-electronic-temperature-wave216.zip。
unzip gpumd-electronic-temperature-wave216.zip -d al-temperature
cd al-temperature
bash view.sh
ls figures
这一步读取随包真实参考结果、重新输出CSV和图片,不重新做DFT或训练。生成过analysis/figures后,请在另一个新解压目录重复操作,避免混用数据。
软件采用VASP6.5.1的NVHPC25.3 GPU构建;GPUMD5.9.1使用GCC13.3、CUDA12.9.86,P100与V10016G分别用对应模块。后处理使用ASE3.29.0。本例电子结构与模型任务均为单进程、单GPU运行,不是多卡加速性能测试。
2. 电子温度与离子温度先分清#
这里的温度Te决定电子能级的Fermi–Dirac占据,所有离子坐标固定,不是把晶体加热后截取MD轨迹。每个几何分别计算1000、2000、3000、4000、6000 K电子温度,共75次单点;另有3次5000 K、6次位移差分和3次k网格对照,总计87次真实电子结构计算。
输入采用ISMEAR=-1,并取SIGMA=kB×Te,其中kB约为8.617333262145×10⁻⁵ eV/K。例如1000 K对应0.086173332621 eV。ISMEAR=0的高斯展宽不能直接照此解释为电子温度;方法及单位见VASP ISMEAR和SIGMA。
3. 完整输入长什么样#
g00-T1000/INCAR:
SYSTEM = Al electronic temperature free energy
PREC = Accurate
ENCUT = 350
EDIFF = 1E-6
ISMEAR = -1
SIGMA = 0.086173332621
ISPIN = 1
NBANDS = 32
ALGO = Normal
NELM = 100
NELMIN = 4
ISTART = 0
ICHARG = 2
NSW = 0
IBRION = -1
ISIF = 2
ISYM = 0
LREAL = .FALSE.
LASPH = .TRUE.
ADDGRID = .TRUE.
LWAVE = .FALSE.
LCHARG = .FALSE.
NCORE = 1
KPAR = 1
EDIFF=1E-6控制电子收敛;NSW=0保持结构不动。32条能带用于容纳热占据,本例还逐算例检查最高能带占据。改变材料、温度或电子数后,应重新检查NBANDS是否足够,不能只复制同一个数。
完整POSCAR:
Al fixed geometry electronic temperature tutorial
1.0
4.10906367548885 -0.00319994099333 0.00000000000000
0.00000000000000 4.09025705356554 0.00075041108036
0.00858109929597 0.00000000000000 4.10435817199494
Al
4
Cartesian
-0.01728020178735 -0.01013409169504 -0.01423715351441
-0.01775996601110 2.07386677357382 2.05963558787312
2.04292460823806 -0.02450212420225 2.08015148199355
2.03575036608170 2.02768868594910 0.01998648407883
完整KPOINTS:
Gamma grid for finite-electronic-temperature tutorial
0
Gamma
6 6 6
0 0 0
PAW数据为version64 PBE Al。程序与POTCAR不随资料包分发,运行脚本从集群对应已部署位置读取;本例的坐标、参数与已提取性质完整提供。
4. 如果想自己从头计算#
在新解压目录运行:
python3 prepare_dft.py
cd batches/p100-0
sbatch job.slurm
squeue -u "$USER"
准备脚本生成87组输入,并分成8个P100批次和8个V10016G批次。每个批次申请一张卡,依次计算5–6个不同算例;不会在同一张卡上同时堆叠这些任务。可以先运行一个批次熟悉过程,再在其他批次目录同样提交。若只想学习训练,直接使用随包已有真实标签即可。
16个批次全部结束后,回到包根目录:
cd ../..
module load ase/3.29.0
python3 parse_dft.py
head data/electronic-free-energy.csv
解析程序检查电子收敛、输入一致性、最高能带占据、几何保持情况,并提取自由能、力和应力。原始输入保留14位小数;VASP XML几何只有8位小数,位置比较按输出精度处理,并不会拿舍入后的坐标替换训练坐标。
5. 为什么不能混用F、U和E0#

VASP给出电子自由能F、去掉熵项后的内能U和零展宽外推E0。本例标签取电子自由能TOTEN;固定Te的力与该自由能梯度一致,不应换成E0后仍搭配原来的力,见VASP展宽方法说明。
以独立几何g06为例,下面都是4原子整晶胞的实际数值:
| Te,K | F,eV | U,eV | 外推E0,eV |
|---|---|---|---|
| 1000 | -15.03470020 | -15.00172477 | -15.01821249 |
| 5000 | -15.46191666 | -14.49408012 | -14.97799839 |
| 6000 | -15.67775071 | -14.25021787 | -14.96398429 |
同一几何只改变电子占据,F会随电子熵项变化。这里没有包含完整的离子振动和构型熵,不能把这张表直接作为材料完整有限温度相稳定自由能。
6. 用位移和更密k点核对#
在g00/1000 K、g07/3000 K、g14/6000 K上,固定Te,沿原子0的x方向位移±0.01 Å。由F差分得到的力与VASP力的最大差约2.79×10⁻⁵ eV/Å;这检查了能量定义和力的配套关系,没有改用外推E0。

左图将真实4原子晶胞做2×2平面周期像显示,仍是4原子计算,箭头按实际DFT力放大4倍作示意。右图比较三个代表条件的6与8网格,自由能差分别约17.76、12.89和4.12 meV/atom。
因此,本例后续模型拟合的是6网格计算层级,没有把这些数据称为k点收敛材料结果。正式应用应先把DFT精度收敛到目标要求,再制作训练集;模型拟合误差小于DFT参数变化,并不代表DFT本身已经准确。
7. 将数据交给NEP#
15个父几何在计算标签前按9/3/3划分,所有温度都跟随同一父几何,避免把同一结构在另一温度下的样本放进独立几何测试。得到45训练、15验证和15测试帧,独立测试只有3个父几何;额外5000 K在这3个测试几何上计算,另作温度插值测试。
python3 prepare_models.py
head -n 6 cases/temperature-p100-s13579/training.xyz
首个实际训练帧为:
4
Lattice="4.1090636754889 -0.0031999409933271 0 0 4.0902570535655 0.00075041108036015 0.008581099295974 0 4.1043581719949" Properties=species:S:1:pos:R:3:force:R:3 energy=-15.05164487 temperature=1000 parent=g00
Al -0.017280201787355 -0.010134091695042 -0.014237153514414 0.00299387 0.09157012 0.12078781
Al -0.017759966011104 2.0738667735738 2.0596355878731 0.01726296 -0.17773126 -0.04154391
Al 2.0429246082381 -0.024502124202248 2.0801514819935 -0.01376735 0.12946723 -0.10117455
Al 2.0357503660817 2.0276886859491 0.019986484078835 -0.00648947 -0.04330609 0.02193065
energy是整胞F,单位eV;force是eV/Å;temperature单位K。接着按温度NEP训练与预测提交单卡任务,不用手动替换或编造标签。