QE:用ev拟合状态方程
从真实Si的五份SCF日志提取体积和总能,实际运行Murnaghan与Birch并读取平衡体积、体模量和压力。
阅读本篇目录
下载五份原始SCF日志、拟合输入与实际输出、CSV 和绘图脚本,保存为 example.zip:
python3 -m zipfile -e example.zip .
cd qe-state-equation
module load ase/3.29.0 qe/7.6-8173m
bash read.sh
bash plot.sh
使用 QE 7.6 的 ev.x;CPU 构建为 Intel oneAPI 2024.2 / Intel MPI 2021.13 与 MKL。数据来自此前实际算出的五组 Si₂ 总能和原胞体积,本篇只做状态方程拟合,不重新跑 SCF。后处理使用 NumPy 和 Matplotlib。
1. 数据从哪来#
先固定计算方法、赝势、截断能、k 网格和原子数,准备多个体积的计算。若结构中存在需要弛豫的内部自由度,应按目标流程在各体积优化它们。本例沿用固定 Si₂ 分数坐标的一组实际小算例。
原始日志在 source-EOS/,原 SCF 输入在 inputs/scf-*.in。可直接重新提取,而不用重新计算:
for name in si-eos-0p94 si-eos-0p97 si-eos-1 si-eos-1p03 si-eos-1p06
do
awk '/unit-cell volume/{v=$4}
/!.*total energy/{e=$5}
END{print v,e}' \
"source-EOS/$name/pw.out"
done > extracted-volume-energy.dat
cat extracted-volume-energy.dat
实际两列为:
253.9007 -15.74339717
262.0039 -15.74783899
270.1072 -15.75034503
278.2104 -15.75119032
286.3136 -15.75060768
第一列为原胞体积 Bohr³,第二列为同一个原胞的总能 Ry。不要把每原子能量与整胞体积混用,也不要把 eV 数字交给只按 Ry 解释的能量列。
2. 写出Murnaghan的完整输入#
mkdir murnaghan-new
cd murnaghan-new
cp ../inputs/volume-energy.dat .
cat > ev.in <<'EOF'
au
noncubic
4
volume-energy.dat
fit.out
EOF
ev.x < ev.in > native.out
head -n 14 fit.out
cd ..
五行分别是长度/体积单位、输入类型、状态方程编号、数据文件和结果文件名。noncubic 在这里选择直接输入体积的模式,所以也可以处理本例 FCC 结构的体积数据。
该版编号为 1=birch1、2=birch2、3=keane、4=murnaghan。本篇首先采用已对照能量、压力和曲率的 Murnaghan。
3. 结果怎么读#
本例 Murnaghan 给出约:
| 量 | 实际拟合结果 |
|---|---|
| Si₂ 平衡原胞体积 V₀ | 278.7608 Bohr³,即 41.3081 ų |
| 体模量 B₀ | 881.5108 kbar,即 88.1511 GPa |
| 一阶压力导数 B′ | 4.0620,无量纲 |
这些数字是五点小例子的拟合值,显示多位小数便于复现,并不代表材料结果具有相同精度。B₀ 是体积方向的刚度,不等于杨氏模量或完整弹性张量。
fit.out 下方还给出原始能量、拟合能量、差值、压力和焓。文本表的能量按 Ry,压力按 GPa;旁边 XML 输出的压力字段则是 kbar,读取时应按该格式核对,不能直接混用。

4. 平衡点必须在采样范围内#
本例最小值落在采样体积之间;若最小值在区间外,应扩展体积范围,而不是只报告外推的平衡参数。也要检查原始 SCF 收敛和不同体积采用一致设置。
这属于静态能量的状态方程流程,不含声子自由能、有限温度热膨胀或零点能。需要温度下的平衡体积时,还要补相应自由能计算。
5. 一次执行资料包#
bash run.sh
bash read.sh work-new analysis-new
bash plot.sh analysis-new
cat analysis-new/fit-summary.csv
快捷脚本执行两种 Birch、Murnaghan 和单位对照四组拟合,不重新计算 DFT;默认跳过本版解释范围受限的 Keane 条件。模型选择和 FCC 晶格常数输入见模型与单位对照。