pymatgen形式价态与Ewald静电
用理想NaCl演示形式价态、点电荷Ewald能、Madelung对照与晶格缩放。
阅读本篇目录
下载主要模块实操包,解压后在包的根目录执行:
bash run.sh
ls analysis
ls figures
脚本使用集群已有的pymatgen 2026.9.24环境,包含绘图依赖,单次使用1个CPU核心;不启动新的VASP计算。也可以分步执行:
module load pymatgen/2026.9.24
python modules.py
python plot.py
1. 先建立明确的离子模型#
本例是8原子的理想NaCl常规胞,a=5.64Å。脚本生成的完整POSCAR如下:
Na4 Cl4
1.0
5.6399999999999997 0.0000000000000000 0.0000000000000000
0.0000000000000000 5.6399999999999997 0.0000000000000000
0.0000000000000000 0.0000000000000000 5.6399999999999997
Na Cl
4 4
direct
0.0000000000000000 0.0000000000000000 0.0000000000000000 Na
0.5000000000000000 0.5000000000000000 0.0000000000000000 Na
0.5000000000000000 0.0000000000000000 0.5000000000000000 Na
0.0000000000000000 0.5000000000000000 0.5000000000000000 Na
0.5000000000000000 0.5000000000000000 0.5000000000000000 Cl
0.0000000000000000 0.0000000000000000 0.5000000000000000 Cl
0.0000000000000000 0.5000000000000000 0.0000000000000000 Cl
0.5000000000000000 0.0000000000000000 0.0000000000000000 Cl
BVAnalyzer给出的形式价态是Na+1、Cl−1。这个结果是化学价态模型,不是从电荷密度积分得到的Bader电荷,也不表示每个原子实际只携带严格整数净电荷。
cat analysis/NaCl-formal-valence.json
2. 用指定点电荷做Ewald求和#
EwaldSummation需要带氧化态的Structure。本例固定Na+1、Cl−1,整个周期晶胞净电荷为零。实际得到:
| 量 | 数值 |
|---|---|
| NaCl化学式单位数 | 4 |
| 整胞静电能 | −35.69405758eV |
| 每NaCl静电能 | −8.92351440eV |
| 晶格线性扩大2倍后的整胞静电能 | −17.84702879eV |
cat analysis/RESULTS.json
这些是预先给定离子点电荷的经典静电能,不是NaCl的完整DFT总能或内聚能。实际材料还涉及电子结构、短程排斥、极化等贡献,不能直接把这个负值拿去比较不同DFT结构的稳定性。
3. 用独立关系理解数值#
岩盐点电荷模型每NaCl的能量可写为:
E_pair = -M * 14.39964548 / r0
M = 1.7475645946
r0 = a/2 = 2.82 Å
这里能量单位为eV,14.39964548的单位为eV·Å。它与本次Ewald求和一致。保持电荷和结构形状,所有距离扩大2倍后,纯库仑能按1/r减半;这可以帮助区分距离单位和每胞/每化学式单位的归一化。
脚本中的实际调用是:
oxidized = BVAnalyzer().get_oxi_state_decorated_structure(nacl)
ew = EwaldSummation(oxidized, acc_factor=12, compute_forces=True)
energy = ew.total_energy
附件保留原始结构与脚本;对自己的体系,先明确电荷模型、总电荷、周期边界和归一化,再替换结构。不要把BVAnalyzer、Bader和DFT总能当成同一类物理量。pymatgen Ewald接口。
需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。