GPUMDkit专题

GPUMDkit 电荷与Born有效电荷实操

用五个ZnS线性响应计算制作标签、训练小qNEP并画电荷与Born电荷。

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

下载输入、实际结果与绘图脚本。以下命令在解压后的目录执行。

module load gpumdkit/1.5.8
bash run.sh
cat LAST-RUN.txt

run.sh在新的work目录中复跑工具,不会重新启动DFT或分子动力学。下面也列出每一步的单独命令。GPUMDkit为1.5.8、Python3.11;GPUMD/NEP为5.9.1,实际GPU计算使用P100单卡。

1. 先区分两种电荷#

charge_train.out是qNEP模型给每个原子的电荷;bec_train.out是模型与DFT的Born有效电荷对照。Born电荷描述原子位移引起的极化响应,是每原子3×3张量。两者单位都可写e,但不是同一个物理量,也不能把模型电荷叫作Bader电荷。

本例为2原子ZnS:以5.45 Å常规晶格参数的FCC原胞为参照,分别将晶格长度缩放0.99、1.01,或将S沿x移动−0.04、+0.04 Å。四个变体用于训练,未变形参照用于训练过程中的监测。只有五个结构,目的是跑通操作,不是可用于生产MD的ZnS势。

2. 准备真实DFT标签#

包内dft/包含五组实际VASP输出以及INCAR、POSCAR、KPOINTS;POTCAR需自行用获授权的S和Zn数据集准备,且保持元素顺序。计算使用VASP6.6.1的8173m构建,550 eV、7×7×7 Gamma网格、PBE、电子收敛1E-6,模块依赖Intel oneAPI2024.2。该CPU构建需要支持对应指令集的CPU,不能从节点有CPU就推断可以执行。

SYSTEM = ZnS labelled qNEP teaching frame
ENCUT = 550
PREC = Accurate
EDIFF = 1E-6
EDIFFG = -0.02
IBRION = 8
NSW = 1
ISIF = 3
ISMEAR = 0
SIGMA = 0.05
LREAL = .FALSE.
LASPH = .TRUE.
LWAVE = .FALSE.
LCHARG = .FALSE.
NELM = 150
ALGO = Normal
ISYM = 2
LCALCEPS = .FALSE.
LEPSILON = .TRUE.
NFREE = 2
POTIM = 0.015

IBRION=8、LEPSILON控制线性响应;这些是固定结构标签,NSW=1不表示已做离子结构优化。参考胞的Born对角分量为S −2.06276e、Zn +2.06276e,非对角分量接近零。

先检查原始计算,再在空目录中转换:

grep "General timing" dft/reference/OUTCAR
grep "EDIFF is reached" dft/reference/OUTCAR
mkdir converted
cd converted
gpumdkit.sh -out2xyz_bec ../dft
head -n 4 NEPdataset/train.xyz
cd ..

这个入口会替换当前目录的NEPdataset,务必用独立工作目录。输出按原子写入bec:R:9;本例的能量是每胞总能量,力为eV/Å,virial为每胞eV。不要把每原子能量再作为每胞标签。

3. 训练小qNEP#

附件已经按来源目录分为reference/qnep/train.xyz四帧和test.xyz一帧。参照帧用于持续监测,因此称为监测集,不作为最终盲测。输入为:

version 4
type 2 S Zn
model_type 0
charge_mode 1
cutoff 6 4
n_max 2 2
basis_size 4 4
l_max 4
neuron 20
population 20
generation 2000
batch 4
output_interval 100
lambda_e 1
lambda_f 1
lambda_v 0.1
lambda_q 0.1
lambda_z 0.5
seed 53
mkdir qnep-new
cp reference/qnep/{train.xyz,test.xyz,nep.in} qnep-new/
cd qnep-new
module load gpumd/5.9.1-p100
nep > nep.log
tail loss.out
cd ..

也可以在附件根目录直接执行sbatch compute.sbatch qnep,程序为这次训练新建目录。nep应在已分配的单卡计算资源内运行。seed 53固定本例随机初始化,charge_mode 1启用qNEP;lambda_z为Born电荷项权重。不要把旧nep.restart复制进新训练目录,否则会变成续训。

4. 画图并读误差#

cd reference/qnep
gpumdkit.sh -plt charge save
gpumdkit.sh -plt born_charge save
ls charge.png bec.png
cd ../..
指标 四帧训练集 一帧监测集
能量RMSE / meV·atom⁻¹ 6.617 2.510
力RMSE / eV·Å⁻¹ 0.00882 3.06e-08
virial RMSE / eV·atom⁻¹ 0.2590 0.2097
Born电荷RMSE / e 0.02445 0.00994

参照结构的对称性使力接近零,这一帧很小的力误差不能说明泛化很好。模型每胞残余电荷约−0.036e,virial误差也仍明显;这些都说明不能拿这个小模型直接研究真实ZnS动力学或介电性质。

ZnS实际Born电荷对照与模型原子电荷

原生charge图使用核密度估计,每种元素只有四个样本,曲线宽度不是可信的统计分布。上图同时给出逐结构散点,便于查看原始数值。换成自己的体系时应增加不同体积、位移、温度、相态等数据,留出真正独立的评估集。

返回GPUMDkit专题

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

查看配图

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

100%查看原图 ↗