04-pymatgen-io:pymatgen 输入集、VASP 输出解析、相图与 Gaussian/CP2K 输入¶
目的¶
- 用
MPRelaxSet / MPStaticSet / MPNonSCFSet / MPHSEBSSet / MP24RelaxSet / MatPESStaticSet一键生成 VASP 输入,并用user_incar_settings覆盖默认值; - 用
Vasprun / Outcar / Oszicar / Locpot解析输出,得到带隙、费米能、磁矩、平面平均势,画能带/DOS; - 通过新版 Materials Project API 构建 Li–Fe–P–O 相图,计算
E_above_hull与形成能; - 用
pymatgen.io.gaussian、pymatgen.io.cp2k生成并修改 Gaussian、CP2K 输入。
文件说明¶
| 文件 | 说明 | 需要 |
|---|---|---|
pmg_write_inputset.py |
Si 的 relax → static → band(line) / DOS(uniform) → HSE 能带 → MP24 / MatPES 输入集;默认只写 POTCAR.spec |
pymatgen |
pmg_parse_vasprun.py |
解析一个 VASP 目录:能量、收敛、带隙、VBM/CBM、磁矩;--band、--dos、--locpot 作图 |
pymatgen、matplotlib |
pmg_phase_diagram_LiFePO4.py |
MP 新 API 下载 Li–Fe–P–O 条目并缓存为 JSON,计算 LiFePO4 的 E_hull、分解产物,画 Li–Fe–O 三元子相图 | pymatgen、MP_API_KEY |
pmg_gaussian_input.py |
写苯的 opt+freq .gjf;--parse 读取 Gaussian log |
pymatgen |
pmg_cp2k_input.py |
StaticSet 生成水分子 CP2K 输入,再用 Cp2kInput.update() 修改;--parse 读取 CP2K 输出 |
pymatgen |
运行步骤¶
pip install "pymatgen>=2025" # 2026 起核心代码在 pymatgen-core,导入方式不变
python -c "import pymatgen.core as pc; print(pc.__version__)"
python pmg_write_inputset.py # 生成 01_relax ... 07_matpes_static
python pmg_parse_vasprun.py path/to/run --dos
python pmg_parse_vasprun.py path/to/band_run --band # 目录中需有 line-mode KPOINTS
export MP_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # 32 位新 key
python pmg_phase_diagram_LiFePO4.py # 第一次联网下载,之后可加 --offline
python pmg_gaussian_input.py # 写 benzene_opt_freq.gjf
python pmg_cp2k_input.py # 写 h2o_static.inp
cp2k.psmp -c h2o_static.inp # 只做语法检查
如果要在 --potcar 模式写出真正的 POTCAR,先配置一次赝势库:
pmg config -p /path/to/vasp_pp ~/pmg_psp # /path/to/vasp_pp 下有 potpaw_PBE/ 等解压后的子目录
pmg config --add PMG_VASP_PSP_DIR ~/pmg_psp
pmg config --add PMG_DEFAULT_FUNCTIONAL PBE_54 # 按你手头的赝势版本
预期结果 / 如何检查¶
pmg_write_inputset.py末尾打印各目录的关键 INCAR 标签:03_band中ICHARG = 11,05_hse_band中LHFCALC = True,06_mp24_relax中METAGGA = R2scan、KSPACING = 0.22。pmg_parse_vasprun.py对截断的 vasprun.xml 会打印WARNING: XML is malformed. Parsing has stopped but partial data is available.而不是直接崩溃。- 相图脚本打印 LiFePO4 各多形体的 E_hull(最稳定相应为 0 或接近 0)与分解产物,并生成
LiFeO_pd.png。
注意事项¶
- MP 默认(
MPRelaxSet)开自旋极化(ISPIN = 2,MAGMOM每原子 0.6);Si 这类非磁体系可在user_incar_settings中设ISPIN: 1。 user_incar_settings中值为None表示删除该标签,例如{"LREAL": None}。- 自己的能量必须与 MP 条目设置一致(同一泛函、U 值、POTCAR 与能量修正)才能放进同一张相图。
- pymatgen 的 CP2K 输入集默认打开 UKS、写
&DFT/&PRINT/&PDOS(CP2K 2026.2 重构了该部分),务必检查并修改后再用。
返回教程:第4章 ASE 与 pymatgen 实战