DeePMD原子布居与Mulliken标签
用真实氨分子量化电荷构造逐原子电子布居,区分自旋通道、分子性质与电荷定义。
阅读本篇目录
本例介绍DeePMD的逐原子电子布居 population 模型。数据来自鸢算科技集群已经实际计算的24个NH₃ RHF/6-31G(d)结构;先准备标签,再进行闭壳层训练,最后读取电荷和自旋布居。
1 下载和解压#
mkdir NH3-population
python3 -m zipfile -e nh3-deepmd-atomic-population-*.zip NH3-population
cd NH3-population
head -n 40 reference/SELECTED-MULLIKEN-LABELS.json
包内提供实际Mulliken电荷及其换算的标签,没有Gaussian程序、完整FCHK或轨道系数。本例重算直接使用这些已完成的量化标签,不需要再次提交Gaussian。
2 真实结构与电子数#
NH₃为中性闭壳层单重态,总电子数10,RHF的α、β电子各5个。以下为其中一个真实测试结构的Mulliken电荷和电子布居:

Mulliken是一种电子布居划分方法;这里的原子电荷是这套方法和基组下的结果,不是Bader电荷。更换电子结构方法、基组或布居划分方案时,需要保持标签定义一致。
本例是全电子Gaussian计算,核电荷为Zₙ=7、Zₕ=1。由实际Mulliken电荷q构造:
- 原子电子总布居:nα+nβ=Z−q;
- 闭壳层RHF两通道相等:nα=nβ=(Z−q)/2;
- 反算原子电荷:q=Z−nα−nβ。
α/β标签依据本例闭壳层关系换算,并非另做了一套开壳层自旋分辨计算。 来自赝势程序的数据还需核对统计的是哪些显式电子,不能直接照搬全电子Z值。
3 数据怎样排列#
bash labels.sh
按原始几何划分16个训练、4个验证、4个测试结构,每个再生成三种刚体姿态,得到48、12、12帧。脚本将真实标签重新整理为 labels-rebuilt/,与参考NumPy数组逐项比较。

atomic_population.npy 每帧按N、H1、H2、H3依次存储各自的α、β布居,因此每帧8列。训练数组为48×8,验证和测试各12×8。coord.npy 每帧12个坐标分量,type.raw 为 0 1 1 1、type_map.raw 为N和H;目录有 nopbc。
与通用性质双输出区别在于:后者每个分子只有两个标量;这里每个原子都有两个电子布居通道,不能混用数组形状。三种刚体姿态也不是三个独立量化结构。
4 量化输入参考#
cat reference/gaussian-inputs/NH3-test-01.gjf
%NProcShared=1
%Mem=1GB
%chk=calc.chk
#p HF/6-31G(d) SCF=(Tight,Conver=10) Polar NoSymm
NH3 actualtensorlabel NH3-test-01
0 1
N 0.00000000000000 0.00000000000000 0.00000000000000
H 0.93645569311246 0.00000000000000 -0.37835265935007
H -0.46822784655623 0.81099441975395 -0.37835265935007
H -0.46822784655623 -0.81099441975395 -0.37835265935007
标签来自Gaussian16 C.01 AVX版,方法HF/6-31G(d)、严格SCF收敛与 NoSymm;实际原输入还计算极化率,当前只取Mulliken电荷。需要自己生成标签且具有Gaussian权限时,可运行 g16 < input.gjf > native.log,再用 formchk calc.chk calc.fchk 得到格式化检查点中的 Mulliken Charges。继续模型训练。