ASE专题

ASE电位与pH稳定性图实操

从ZnO参考形成能出发,用完整终端脚本画Pourbaix图,读分解反应、活度和参比电极变化。

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

想判断材料在什么电位和pH下更倾向保留固相、溶解还是变成其他相,可以先学习Pourbaix电位–pH图。本例在鸢算科技集群实际调用 ASE3.29.0,使用其文献参考形成能数据库计算ZnO的7条竞争反应、4组设置共 90,804个网格点。这是热力学工具实例,不是新做的DFT,也不计算腐蚀速率或钝化膜生长。

1 下载后先看结果,再完整运行#

下载脚本、参考数据、全网格CSV和三张高清图。使用独立Python3.11环境,ASE3.29.0及其NumPy、SciPy、Matplotlib依赖,单进程单线程;不需要GPU。

python3 -m zipfile -e ase-ZnO-Pourbaix-wave312-*.zip .
cd ase-ZnO-Pourbaix-wave312
bash preview.sh

preview/results/保存从参考数值重新提取的CSV,preview/plots/生成说明图。需要从形成能重新计算整张图,再执行:

bash run.sh
cat work/results/VALIDATION.json
ls work/plots
head -n 6 work/results/reaction-coefficients.csv

run.sh依次运行原生Pourbaix网格、反应自由能提取、作图;输出到新的work/,不会覆盖reference/。已有同名工作目录时换一个新解压目录,保留自己的旧结果。

2 第一步:先准备参考形成能#

本例原始参考数据如下,单位是 eV/所写化学式,不是eV/原子:

物种 参考形成能/eV
HZnO2-(aq) -4.801273583874
ZnO2--(aq) -4.045437252886
ZnOH+(aq) -3.520731595689
ZnO(aq) -2.923607884978
H2O(aq) -2.458311050125
Zn++(aq) -1.526416457301
H+(aq) 0.000000000000
Zn 0.000000000000
ZnO -3.323000000000
ZnO2(aq) -2.921000000000

其中水溶物种来自已安装ASE的solvated('Zn')数据库,Zn、ZnO和ZnO2(aq)补充值采用ASE官方同体系示例。数据库文献出处为Johnson等1992及Pourbaix1966,完整数值以下载包reference/native/DATA.json为准。

读取数据库和补充固相的终端操作:

module purge
module load ase/3.29.0
python - <<'PYCODE'
from ase.phasediagram import solvated
refs = dict(solvated('Zn'))
refs.update({'Zn': 0.0, 'ZnO': -3.323, 'ZnO2(aq)': -2.921})
for name, energy in refs.items():
    print(f'{name:14s} {energy:.12f} eV/formula')
PYCODE

当前原生反应平衡中,水储库实际采用ase.pourbaix.PREDEF_ENERGIES['H2O']=-2.4583 eV;这与旧溶剂数据库中的H2O(aq)数值有约11微eV差别。脚本按真实程序储库计算,不暗中用另一份水能量替换。

3 第二步:设温度、活度与参比电极#

项目 本例设置
目标材料 ZnO,每式量含1Zn和1O
温度 298.15 K
pH 0–14,间隔0.1,共141点
电位数值范围 −2–2 V,间隔0.025,共161点
四组设置 SHE/活度10⁻⁶、SHE/10⁻³、RHE/10⁻⁶、AgCl/10⁻⁶
储库 H₂O、H⁺、电子

当前ASE参数conc对所有标记(aq)的物种使用同一个活度,包括中性水溶物种,并非只改Zn²⁺浓度。稀理想溶液中可将活度近似理解为c/c°;这不是同时求解真实溶液中各物种浓度与物料守恒的物种分布计算。

四组文件的电位数值轴相同,参比不同。CSV用reference和potential_V两列注明;不要将RHE或AgCl列称为SHE。数据包原始NPZ保留历史键名U_SHE_V作为共用数值网格,解释具体组时须同时读取DATA中的参比。

4 第三步:生成图,并检查一个具体条件#

下面是可直接复制到终端的最小原生示例:

python - <<'PYCODE'
import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from ase.phasediagram import solvated
from ase.pourbaix import Pourbaix
refs = dict(solvated('Zn'))
refs.update({'Zn': 0.0, 'ZnO': -3.323, 'ZnO2(aq)': -2.921})
pb = Pourbaix('ZnO', refs, T=298.15, conc=1e-6, reference='SHE')
for pH in [0, 10, 14]:
    energy, reaction = pb.get_pourbaix_energy(U=0.0, pH=pH)
    stable = 'ZnO(s)' if energy <= 0 else reaction.equation()
    print(pH, energy, 'eV/ZnO;', stable)
diagram = pb.diagram(U=np.linspace(-2, 2, 161), pH=np.linspace(0, 14, 141))
fig, ax = plt.subplots(figsize=(12, 7))
diagram.plot(normalize=False, include_water=True, ax=ax)
fig.savefig('my-ZnO-pourbaix.png', dpi=220, bbox_inches='tight')
PYCODE

normalize=False保留eV/式量ZnO。默认归一化会除以ZnO的2个原子,读色条前先分清单位。

本例SHE、活度10⁻⁶的三个实际点:

U/V pH 目标ZnO相对最佳竞争路线的能量/eV 稳定目标或分解产物
0 0 1.01667243 H2O + Zn++(aq)
0 10 -0.03347714 ZnO(s)
0 14 0.27555446 2H+ + ZnO2--(aq)

这里能量 ≤0表示目标ZnO稳定,>0表示存在能量更低的竞争路线。负值不裁成零,也不把它当作扩散势垒或腐蚀速率。

ZnO两种共同水溶物种活度下的实际电位pH稳定区

绿区是ZnO(s),其他色块对应图例物种。两条虚线只是理想H⁺/H₂和O₂/H₂O水窗口,不包含过电位。细边界来自原生反应平面相交,原生端点约保留到0.001;底层CSV保留完整网格值。参考物种有限,因此这些边界不代表已经纳入所有可能的真实化合物。

5 第四步:读反应式,理解浓度和电位为什么改变边界#

python - <<'PYCODE'
from ase.phasediagram import solvated
from ase.pourbaix import Pourbaix
refs = dict(solvated('Zn'))
refs.update({'Zn': 0.0, 'ZnO': -3.323, 'ZnO2(aq)': -2.921})
pb = Pourbaix('ZnO', refs, conc=1e-6)
print('\n'.join(pb.get_equations()))
print('只看生成Zn金属的路线:')
print('\n'.join(pb.get_equations(contains='Zn')))
PYCODE

本例有ZnO向HZnO₂⁻、ZnO₂²⁻、ZnOH⁺、ZnO(aq)、Zn²⁺、Zn和ZnO₂(aq)的7条路线。ASE会补平H₂O、H⁺和电子,不能只比较两种化合物的裸形成能。

例如酸溶解ZnO + 2H+ → Zn++(aq) + H2O,其反应自由能在活度10⁻⁶时为:

ΔG = −1.016672434929 + 0.118318659209 × pH eV/ZnO。

单条路线的ΔG=0位于 pH=8.592664。活度提高到10⁻³,该零点变为 7.092664,相差−1.5。这个零点只是这一条反应的平衡条件;还有ZnOH⁺等路线竞争,不能直接把8.592664画成整张图ZnO的稳定区边界。

另一条还原路线ZnO + 2H+ + 2e- → Zn + H2O给出:

U_SHE = −0.432350 − 0.059159329605 × pH V。

本例参比转换是U_SHE=U_RHE−0.059159329605×pH、U_SHE=U_AgCl+0.222。因此同一还原条件在RHE轴上是−0.432350 V水平线。这里AgCl固定偏移来自当前模型,实际电极的温度、溶液和标定条件需要另行核对。

活度对单条酸溶解反应零点和参比电极对同一还原条件的影响

6 想换成自己的材料,改哪里#

先整理目标材料及竞争固相/水溶物种的同一热力学基准形成自由能,再替换refs和Pourbaix('目标式', refs, ...)。只加一个目标化合物、不提供竞争相,不能得到完整稳定区。DFT总能直接与实验水溶离子形成自由能混用通常缺少一致的参考、溶剂和热修正,需要先建立统一方案。

head -n 8 work/results/grid-values.csv
head -n 10 work/results/reaction-coefficients.csv
ls work/native

完整包保留每组全网格、每条反应常数/电位/pH系数和原生参考输出,可继续用自己的脚本画图。

ASE原生ZnO图,色条为每式量ZnO的相对能量

原生图色条范围为±1 eV,超出部分只发生颜色饱和,完整CSV没有裁值。以上是有限参考集合、理想活度和固定温度下的操作参考;判断真实耐蚀性还要考虑动力学、膜层、溶液组成及更多竞争相。固态成分凸包请看ASE候选合金凸包,结构对齐问题看结构等价比较。

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

查看配图

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

100%查看原图 ↗