pymatgen:结构评分与简化自旋模型
实跑四类简单模型,区分位点数、空间群评分、点电荷静电与有向求和的Ising模型。
阅读本篇目录
有些pymatgen接口返回一个叫“energy”的数字,但它可能只是结构排序分数。本例实际调用四类简单模型,说明哪些有物理单位、哪些只是几何规则。
unzip pymatgen-composition-order-models-wave717-*.zip
cd pymatgen-composition-order-models
module load pymatgen/2026.9.24
bash results.sh
bash plot.sh
环境为pymatgen2026.9.24、Python3.11、NumPy/SciPy和Matplotlib。results.sh读已有结果;plot.sh把参考数据画到figures。run.sh会重新做这套小规模后处理,结果写到新建的analysis,不会启动DFT或MD。已有analysis时请保留它,在另一份解压目录分析。

1. 先区分四种输出#
| 接口 | 本例输入 | 数值含义 |
|---|---|---|
| NsitesModel | Cu、CuNi、FeO结构 | 原子位点数,无能量单位 |
| SymmetryModel | 相同三种结构 | 空间群编号的负数,无能量单位 |
| EwaldElectrostaticModel | 明确指定Na⁺/Cl⁻的NaCl | 理想点电荷Ewald能,eV |
| IsingModel | 由实际FeO磁矩符号构造的±1/0自旋标签 | 给定J和截断后的简化模型和 |
这些模型没有运行DFT,也没有由本例拟合出真实交换参数。Ewald的完整步骤见形式价态与Ewald静电。
2. 原子数与空间群评分#
python - <<'PY'
from pymatgen.core import Structure
from pymatgen.analysis.energy_models import NsitesModel, SymmetryModel
s = Structure.from_file('inputs/POSCAR-Cu')
print('位点数评分:', NsitesModel().get_energy(s))
print('空间群评分:', SymmetryModel(symprec=0.01).get_energy(s))
PY
Cu常规胞返回位点数4、空间群评分−225。symprec=0.01单位Å,用于结构对称性识别。较小位点数或较大空间群编号可以作为特定枚举流程的排序规则,但不代表热力学更稳定。
3. 用自旋标签运行Ising模型#
实际FeO的原子投影磁矩来自磁序分析实例。这里仅取Fe磁矩的正负号设为±1,O设为0,另构造全部平行及整体翻转两个控制;没有为这些控制结构赋予DFT能量。
python - <<'PY'
import numpy as np
from pymatgen.core import Structure, Species
from pymatgen.analysis.energy_models import IsingModel
s = Structure.from_file('inputs/FeO-PBE-projected-moments.json')
moments = s.site_properties['magmom']
species = [Species(site.specie.symbol, 0,
spin=float(np.sign(moments[i])) if site.specie.symbol == 'Fe' else 0)
for i, site in enumerate(s)]
model_structure = Structure(s.lattice, species, s.frac_coords)
model = IsingModel(j=0.1, max_radius=3.5)
directed = model.get_energy(model_structure)
print('原生有向和:', directed)
print('每一无向配对只计一次:', directed/2)
PY
本例定义J=0.1 eV·Å²,自旋标签无量纲,距离用Å,因此每项Jsᵢsⱼ/rᵢⱼ²单位为eV。3.5Å是配对截断;改晶格或截断会改变纳入的配对。
这个原生接口对每个中心原子循环其邻居,i→j和j→i都计入。 若采用无向配对只计一次的定义,要取原生和的一半。拟合或比较别人的J时还须对齐Hamiltonian符号和自旋归一化,不能只看参数名相同。
整体翻转所有自旋后每项乘积不变,本例两者能量相同。全部平行控制的结果与原符号模型不同,仅说明这套假定参数的模型差异。
4. 查看完整结果和模型序列化#
cat reference-data/Pymatgen-Ising-ranking-model.csv
cat reference-data/Pymatgen-ranking-scores.csv
python - <<'PY'
import json
from monty.json import MontyEncoder, MontyDecoder
from pymatgen.analysis.energy_models import IsingModel
model = IsingModel(j=0.1, max_radius=3.5)
saved = json.dumps(model, cls=MontyEncoder)
restored = json.loads(saved, cls=MontyDecoder)
print(restored.as_dict())
PY
四类模型均实际完成了保存/恢复及结果一致性检查。要研究磁基态和交换参数,应进一步准备不同真实磁构型的自洽能量、确定模型和参数拟合范围,再讨论预测。
接口见pymatgen简单能量模型。