pymatgen专题

pymatgen:结构评分与简化自旋模型

实跑四类简单模型,区分位点数、空间群评分、点电荷静电与有向求和的Ising模型。

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

有些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时请保留它,在另一份解压目录分析。

简化Ising模型的有向/无向配对能与结构排序评分

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简单能量模型。

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

查看配图

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

100%查看原图 ↗