示例 05-1:Si 的 SCF 参数、截断能与 k 点收敛测试,以及 scf.restart pp¶
目的¶
- 给出一个把所有 SCF 关键词都显式写出的参考输入
Si_scf.dat; - 用模板 + 驱动脚本完成
scf.energycutoff和scf.Kgrid的收敛测试,按 1 meV/atom 判据选参数; - 演示 OpenMX 4.0 的
scf.restart pp:读入自洽结果,只做一次对角化来计算能带和 DOS 数据。
对应教程:第5章 SCF 参数、k 点与收敛测试(§8、§9)。
文件说明¶
| 文件 | 说明 |
|---|---|
Si_scf.dat |
Si 原胞(a = 5.43 Å)自洽计算,System.Name si_scf,Standard 基组,220 Ry,8×8×8,RMM-DIISK |
Si_restart_pp.dat |
同一 System.Name 的后处理输入:scf.restart pp + 能带 + Dos.fileout on(Dos.Kgrid 16 16 16) |
conv_ecut/Si_ecut_template.dat |
截断能扫描模板,占位符 @ECUT@(k 点固定 8×8×8) |
conv_kgrid/Si_k_template.dat |
k 点扫描模板,占位符 @K@(截断能固定 220 Ry,可按截断能测试结果修改) |
run_conv.sh |
驱动脚本:ecut 或 kgrid 模式,run(默认)或 collect |
job.slurm |
Slurm 作业脚本 |
运行步骤¶
cd OpenMX/examples/05-scf-conv-si
sed -i "s#^DATA.PATH.*#DATA.PATH $HOME/openmx4.0/DFT_DATA19#" *.dat conv_*/*.dat # once
# A) cutoff-energy test, then k-point test
MPI_RUN="mpirun -np 8" bash run_conv.sh ecut
MPI_RUN="mpirun -np 8" bash run_conv.sh kgrid
# on a Slurm cluster:
sbatch job.slurm run_conv.sh ecut
# custom lists / tolerance:
ECUTS="150 200 250 300 400" THRESH=0.5 bash run_conv.sh ecut collect
# B) SCF, then post-processing restart
mpirun -np 8 openmx Si_scf.dat -nt 1 > si_scf.std
cp si_scf.out si_scf_step1.out # pp run will overwrite si_scf.out
mpirun -np 8 openmx Si_restart_pp.dat -nt 1 > si_pp.std
预期结果 / 如何检查¶
收敛测试:run_conv.sh 在 conv_ecut/ecut_conv.txt(或 conv_kgrid/kgrid_conv.txt)中给出表格:截断能(或 k 网格)、Utot、相对列表最后一项的 ΔE(meV/atom)、耗时、网格点数、scf_conv、是否在阈值内。
- 截断能扫描中,ΔE 会在 0 附近振荡而不是单调下降,这是实空间积分网格的特性;
- 找到"从这一项开始,后面所有项都
ok=yes"的最小值作为推荐值; - 对 Si,k 点扫描通常在 8×8×8 附近进入 1 meV/atom 以内(以你的实际结果为准);
scf_conv列必须全部为 1。
restart pp:
grep -c "NormRD" si_pp.std # only one SCF step is expected
ls si_scf.Band si_scf.Dos.val si_scf.Dos.vec # band and DOS data
ls -l si_scf_rst/ # timestamps unchanged by the pp run
能带后处理(bandgnu13 或 python ../../scripts/omx_band_plot.py -h)见第8章,DOS(DosMain 或 python ../../scripts/omx_dos_auto.py -h)见第9章。
注意事项¶
run_conv.sh需要 GNU sed 和 awk;它从.out读取Utot.、Elapsed.Time.和Num. of grids of a-, b-, and c-axes三行,从.md读取scf_conv=。- 截断能扫描时 k 点固定,k 点扫描时截断能固定。k 点模板中的
scf.energycutoff 220.0请改成你在截断能测试中选定的值。 scf.restart pp是 OpenMX 4.0 的功能。3.9 用户可以用scf.restart on加较小的scf.maxIter代替,但重启文件会被覆盖。pp运行时结构、基组、scf.XcType、scf.SpinPolarization必须与自洽计算一致,System.Name必须相同。- 输入文件只含 ASCII 字符和 LF 换行。