04-output-parsing:跨程序输出解析、作业状态扫描、数据归档与 MLIP 数据准备¶
目的¶
parse_all_outputs.py:一个入口读取 VASP / Gaussian / CP2K / OpenMX 输出,统一得到能量(eV)、力和末结构(ASEAtoms),可汇总为 extxyz;job_status_scanner.py:只用 Python 标准库,批量扫描子目录,按关键字判断“正常结束 / 收敛 / 报错 / 仍在运行或被杀”;ase_db_collect.py:把整个项目中已完成的计算归档到ase.db,导出 CSV(pandas)与 extxyz;dpdata_convert.py:用 dpdata 把 OUTCAR / CP2K / Gaussian 输出转换为 DeePMDnpy与 extxyz,供机器学习势训练。
文件说明¶
| 文件 | 依赖 |
|---|---|
parse_all_outputs.py |
ase;可选 cclib 1.8.1(Gaussian 频率、HOMO/LUMO) |
job_status_scanner.py |
仅标准库 |
ase_db_collect.py |
ase;--csv 需要 pandas |
dpdata_convert.py |
dpdata(Python ≥ 3.10)、numpy |
mock_runs/ |
人为构造的模拟文件,只包含状态关键字,用来测试扫描脚本,不是真实程序输出 |
运行步骤¶
# 1) 先在模拟目录上测试扫描器
python job_status_scanner.py mock_runs
# 2) 扫描真实项目,并导出 CSV
python job_status_scanner.py ~/projects/TiO2 --csv status.csv
# 3) 统一解析若干输出
python parse_all_outputs.py relax/OUTCAR g16/h2o_freq.log cp2k/h2o.out omx/si.out --extxyz final.xyz
# 4) 归档到数据库并查询
python ase_db_collect.py ~/projects/TiO2 --db tio2.db --csv tio2.csv
ase db tio2.db code=vasp -c id,formula,energy,max_force,dir
# 5) 生成 MLIP 训练集(每 5 帧取 1 帧,10% 作测试集)
python dpdata_convert.py aimd_*/OUTCAR --fmt vasp/outcar --stride 5 --test-frac 0.1 --out dataset
预期结果 / 如何检查¶
python job_status_scanner.py mock_runs 的实际输出(Windows 下路径分隔符为 \):
path code status energy(eV) steps note
cp2k_scf_fail/h2o.out CP2K ERROR SCF run NOT converged;
g16_error/bad.log Gaussian ERROR failed in l502
g16_ok/h2o.log Gaussian FINISHED -2076.500884 2 opt converged;
openmx_ok/si.out OpenMX FINISHED -217.691090
vasp_relax_ok VASP CONVERGED -10.85000000 2
vasp_zbrent VASP ERROR -50.10000000 ZBRENT (ionic step bracketing failed);
(能量数值来自模拟文件,没有物理意义。)
注意事项¶
- VASP 的 ZBRENT、EDDDAV 等报错多数写在标准输出(
vasp.out、slurm-*.out)而不是 OUTCAR,扫描器两处都会查。 - CP2K 2025.1 起能量行单位写成
[hartree],此前为[a.u.]:,正则两种都匹配。 - cclib 2.0a1 解析 Gaussian 16 输出存在已知问题,生产环境用
pip install cclib==1.8.1。 - ASE 从 OUTCAR 读取的
energy是energy(sigma->0),free_energy是TOTEN;pymatgenVasprun.final_energy也是 sigma→0 能量。 - 公开分享数据时不要包含 POTCAR、
vaspout.h5中的赝势数据等受许可保护的内容。
返回教程:第4章 ASE 与 pymatgen 实战