pymatgen:Berry极化分支的终端实操
读取GaN真实应变系列,处理新VASP的电荷符号、笛卡尔基底与整数极化量子。
阅读本篇目录
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 Å乘一个电子电荷。程序从首点最近零分支出发,再选相邻点的最近连续分支。

本例用独立整数展开核对z分支,也将中间点的电子偶极表示额外平移一个晶格量子,确认还原后的连续结果一致。这个平移仅是同一极化的表示测试,没有被伪装成新DFT数据。
sbatch job.slurm
head results/piezo-gan-branch.csv
head results/piezo-gan-relaxed-branch.csv
如果路径步长太大,最近分支未必就是实际连续的物理分支;需要增加真实中间结构,并确认每点仍绝缘。不能单凭“展开后曲线光滑”证明铁电翻转或电子能隙始终存在。
继续阅读应变系列的proper压电响应,再把偶极变化换算成物理极化响应。