算例 9-1:金刚石的总态密度与投影态密度(Dos.fileout + DosMain)¶
目的¶
用 OpenMX 4.0 计算金刚石的总 DOS 与 PDOS:SCF 时打开 Dos.fileout 输出 cdia_dos.Dos.val(本征值)和 cdia_dos.Dos.vec(本征矢),再用 DosMain 以四面体法生成 cdia_dos.DOS.Tetrahedron 与 cdia_dos.PDOS.Tetrahedron.atomN.*。练习交互式与非交互式(答案文件 / here-doc / 驱动脚本)运行 DosMain,以及用 Python 按元素、角动量求和并检查积分电子数。
对应教程:第9章 态密度 DOS/PDOS、COHP 与光学性质。
文件说明¶
| 文件 | 作用 |
|---|---|
Cdia_dos.dat |
金刚石(a = 3.567 Å)原胞,C6.0-s2p2d1,scf.Kgrid 10 10 10,Dos.Erange -30 20,Dos.Kgrid 16 16 16;System.Name cdia_dos |
dosmain_answers_dos.txt |
DosMain 的回答:四面体法(1)、总 DOS(1) |
dosmain_answers.txt |
DosMain 的回答:四面体法(1)、PDOS(2)、原子 1 2 |
run_dosmain.sh |
通用驱动:读取 .Dos.val 头部的 mode、Kgrid、atomnum,自动生成回答,依次计算总 DOS 与 PDOS(也适用于第 9-2、9-3 等算例) |
sum_pdos.py |
把 PDOS 文件按元素 / 物种 / 原子与 s、p、d、f 求和(可按 m 分辨),打印费米能以下的积分电子数,检查 ΣPDOS = DOS,可作图 |
job.slurm |
Slurm 脚本:OpenMX → DosMain(两次)→ sum_pdos.py |
运行步骤¶
- 修改
Cdia_dos.dat中的DATA.PATH。 - 编译
DosMain(一次即可):
cd /path/to/openmx4.0/source && make DosMain && cp DosMain ~/bin/
# official Debian package instead:
# export LD_LIBRARY_PATH=/opt/openmx4.0/runtime/lib:$LD_LIBRARY_PATH
- 计算与后处理:
cd OpenMX/examples/09-dos-pdos-cdia
mpirun -np 8 openmx Cdia_dos.dat -nt 1 | tee cdia_dos.std
DosMain cdia_dos.Dos.val cdia_dos.Dos.vec < dosmain_answers_dos.txt # total DOS
DosMain cdia_dos.Dos.val cdia_dos.Dos.vec < dosmain_answers.txt # PDOS of atoms 1 2
# or simply: bash run_dosmain.sh cdia_dos tetra
python3 sum_pdos.py cdia_dos --dat Cdia_dos.dat --plot --emin -28 --emax 15
- (可选)交互式体验一次:
DosMain cdia_dos.Dos.val cdia_dos.Dos.vec,依次回答1、2、1 2。
预期结果 / 如何检查¶
- 生成的文件:
cdia_dos.DOS.Tetrahedron,cdia_dos.PDOS.Tetrahedron.atom1、.atom1.s1、.atom1.p1..p3、.atom1.d1..d5(atom2 同理)。列为:能量(eV,化学势为零点)、DOS(states/eV)、积分 DOS。 awk '$1<=0 {n=$3} END{print n}' cdia_dos.DOS.Tetrahedron应接近 8(两个 C 原子的价电子数),因为Dos.Erange下限 −30 eV 低于价带底。sum_pdos.py输出(示意输出,数值仅供参考):
method: Tetrahedron, 18 files, spin-polarized: False
C d -> cdia_dos.pdos_C_d.dat N(E<E_F) = 0.0xx
C p -> cdia_dos.pdos_C_p.dat N(E<E_F) = x.xxx
C s -> cdia_dos.pdos_C_s.dat N(E<E_F) = x.xxx
max |sum(PDOS) - DOS| = 0.00xx states/eV (small only if PDOS was done for ALL atoms)
figure written to cdia_dos_pdos.png
- s + p + d 的积分之和约为 8;s、p 并不严格等于 2×1 和 2×3(杂化导致电荷在 s、p、d 之间重新分配,手册 23.1 节也有说明)。费米能附近约 4 eV 的范围内 DOS 为零(PBE 带隙)。
注意事项¶
Dos.Erange以化学势为零点;积分 DOS 从下限开始累加,下限高于某些占据态(尤其半芯态)时,0 eV 处的积分值会小于价电子数。占据数请以.out中的 Mulliken 布居为准。- 自旋极化计算的 PDOS 文件有 5 列,第 3 列(下自旋 DOS)在 4.0 的
DosMain中带负号;sum_pdos.py保留该约定,积分时取绝对值。 DosMain的提问顺序随情况变化:k 网格为 1×1×1(分子)或 DC 计算时不询问方法、只询问高斯宽度;单原子体系不询问原子编号。写答案文件前先确认,或直接用run_dosmain.sh。.Dos.vec可能非常大(k 点 × 本征态 × 基函数),大体系请考虑DosGauss.fileout(教程 §9)。