pymatgen专题

pymatgen:Berry极化分支的终端实操

读取GaN真实应变系列,处理新VASP的电荷符号、笛卡尔基底与整数极化量子。

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

Berry极化只有模一个极化量子的意义。相邻结构的原始数值出现跳变,不一定意味着物理极化突然改变;要结合连续结构路径和绝缘性跟踪分支。本篇复用本集群GaN的真实Berry计算,用pymatgen 2026.9.24完成分支处理。

数据包括四原子纤锌矿GaN的−1%、0、+1% x应变,两套序列分别固定分数坐标与允许内部弛豫。每点都在对应最终结构上做静态Berry计算;详细VASP输入、原子优化和终端步骤见GaN压电实操。本篇不是非极性到极性的翻转路径,也不据此报告自发极化或铁电双势阱。

下载输入、真实参考表与操作脚本。

unzip pymatgen-polarization-wave667-*.zip
cd pymatgen-polarization
bash results.sh
bash plot.sh

reference-data/保存实际计算的数值,figures/reference.png为重绘图;读取和绘图不会启动VASP。若要运行本篇全部后处理,普通账号提交sbatch job.slurm。脚本申请cpu-8173m独占整节点1任务×56核,小例内部单线程,计费仍按整节点;不要在管理节点启动计算。

1. 自己的原始数据这样读取#

from pymatgen.io.vasp.outputs import Outcar
from pymatgen.core import Structure
from pymatgen.analysis.ferroelectricity.polarization import Polarization
names = ['strain_-0.010', 'strain_0.000', 'strain_+0.010']
structures = [Structure.from_file(p+'/POSCAR') for p in names]
outputs = [Outcar(p+'/OUTCAR') for p in names]
p = Polarization([o.p_elec for o in outputs],
                 [o.p_ion for o in outputs], structures,
                 p_elecs_in_cartesian=True,
                 p_ions_in_cartesian=True)
same = p.get_same_branch_polarization_data(
    convert_to_muC_per_cm2=False, all_in_polar=False)
print(same)

这段代码在你自己的三个目录同级执行;每点的POSCAR必须是最终静态计算实际使用的结构。不能给内部弛豫后的OUTCAR配上优化前的POSCAR。VASP输出的电子与离子偶极都是笛卡尔分量,因此这里明确设置两个*_in_cartesian=True,不要在斜晶胞里默认把它们当作沿晶格方向的分量。

2. 先认清 |e|Å 和 eÅ#

新VASP在OUTCAR中标注|e| Angstrom。本安装版本的Outcar读取器会识别这一标记,把电子与离子偶极都变号,转换成模块采用的电子电荷e<0约定。

本例−1%固定分数坐标点:原始p[elc]_z=-4.97561 |e|Å,Outcar.p_elec[2]=+4.97561 eÅ;原始离子z偶极−40.31853,对象里为+40.31853。这个变号是单位约定,不能再手动反向一次后交给同一套转换。

print(outputs[0].p_elec)
print(outputs[0].p_ion)

本篇先让原生类在eÅ层面跟踪分支,最终明确乘电子电荷的负号转为SI单位。附件的数值JSON已经采用pymatgen读入后的约定,不是OUTCAR逐字打印值。

3. 原生类怎样跟踪分支#

convert_to_muC_per_cm2=False返回沿晶格方向表示的偶极分支;不是C/m²。相邻点可加减整数个晶格量子,本例z轴垂直于面内且c保持不变,因此z分量的量子就是c Å乘一个电子电荷。程序从首点最近零分支出发,再选相邻点的最近连续分支。

GaN实际原始偶极、连续分支与两种应变序列的极化变化

本例用独立整数展开核对z分支,也将中间点的电子偶极表示额外平移一个晶格量子,确认还原后的连续结果一致。这个平移仅是同一极化的表示测试,没有被伪装成新DFT数据。

sbatch job.slurm
head results/piezo-gan-branch.csv
head results/piezo-gan-relaxed-branch.csv

如果路径步长太大,最近分支未必就是实际连续的物理分支;需要增加真实中间结构,并确认每点仍绝缘。不能单凭“展开后曲线光滑”证明铁电翻转或电子能隙始终存在。

继续阅读应变系列的proper压电响应,再把偶极变化换算成物理极化响应。

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

查看配图

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

100%查看原图 ↗