PolarMACE电荷、偶极与受力读取
读取水分子模型的完整原子电荷、偶极和受力,演示电荷守恒、偶极重建与九个力分量的能量差分。
阅读本篇目录
这篇接续水分子训练例,说明PolarMACE输出里哪些量可以直接看,哪些需要结合模型约定理解。使用同一份实际训练模型与3个独立测试结构。
1 从资料包输出开始#
下载完整输入、实际数值与脚本。解压后执行:
cd polarmace-water-practical
bash read.sh
bash plot.sh
head -n 9 analysis-read/PolarMACE-water-prediction-summary.csv
head -n 12 analysis-read/PolarMACE-water-full-forces-charges-dipoles.csv
第一张表逐个分子列出能量、力和偶极误差,以及模型静电能;第二张表保留原子、方向、位置、电荷、完整受力和偶极分量。
这一步读取附带结果;用自己训练的权重做新预测,需要先完成上一节的个人依赖与训练,再执行bash predict.sh。
2 有效电荷与偶极怎样关联#
本例只采用原子单极子,所以总偶极可由有效电荷和坐标重建:
总电荷 Q = Σ q_i
总偶极 μ = Σ q_i × r_i
电荷单位e,坐标Å,得到偶极e·Å。中性体系平移所有原子后,总偶极保持不变;带电体系则存在原点依赖,不能直接套用这条中性结论。

图中坐标以氧原子为原点,颜色和标注是模型有效电荷。绿色箭头示意偶极方向,不与键长使用相同量纲。
这些电荷是模型为拟合能量与偶极学习到的内部自由度,不等于独立DFT电荷分区得到的Mulliken或Bader电荷。不同模型参数化也可能给出相近的总偶极和不同的原子电荷分配。
3 直接查看某个结构的原始结果#
python3 -m json.tool reference-results/raw/test-0.json
主要字段为:
positions_A 原子位置
energy_eV 总能量
forces_eVA 所有原子的三维力
dipole_eA 总偶极三分量
charges_e 模型原子有效电荷
electrostatic_energy_eV 模型静电项
静电项是模型分解中的一部分,不能仅把它当成体系的总结合能,也不把它与单独DFT计算里的任意“静电能”字段直接相等。
4 用能量差分检查全部受力#
对某个原子的某个方向,分别位移+h与−h,本例取h=0.0001 Å:
F ≈ −[E(r+h) − E(r−h)] / (2h)
3个原子共9个力分量,本例全部实际计算过。原始能量保存在对应的FD-原子-方向-plus/minus.json中;读取脚本从这些原始能量重新计算差分,不只是读取一个“通过”标记。
cat analysis-read/PolarMACE-water-all-force-FD.csv
python3 -m json.tool reference-results/raw/FD-0-0-plus.json
python3 -m json.tool reference-results/raw/FD-0-0-minus.json

这里检查的是模型能量与模型受力的一致性。它与模型受力相对DFT标签的误差不同;相对DFT的实际力RMSE为约0.02244 eV/Å,另在逐帧结果表中保留。
5 再检查旋转与平移#
该实例还把同一测试结构整体平移、旋转,保存了新的实际输出:
python3 -m json.tool reference-results/raw/translation.json
python3 -m json.tool reference-results/raw/rotation.json
中性分子整体平移后能量与偶极不变;旋转后能量不变,力与偶极按同一旋转矩阵转动。这些检查用于理解模型的对称性,不代表已完成所有材料物性的验证。
6 对自己新训练的同一案例做检查#
在训练已完成、个人依赖已准备好的资料包根目录执行:
sbatch check.sh
它对新模型计算3个测试几何、平移、旋转和18个位移端点,完整结果写入check-new/。任务结束后:
bash read.sh check-new/DATA-VALIDATION.json
bash plot.sh
脚本针对本篇的三原子水分子与固定测试集合;如果改成其他体系,应相应调整差分对象与数据读取。这里没有用零场小数据去宣称已训练好介电常数、极化率或任意外场响应。