GPAW入门与三种计算模式
Si实际PW、FD、LCAO对照,完整Python输入、网格检查和正确MPI入口。
阅读本篇目录
下载完整Python输入、原始结果、CSV和绘图脚本。以下短命令在解压目录、已分配的CPU资源中执行,输出写入 work/。本模块为CPU构建,加载GPU资源不会自动启用GPU计算。
1 环境与第一次计算#
module load gpaw/26.7.0-8173m
gpaw info
bash run.sh si-pw-200
本构建使用GNU gcc/g++/gfortran13.3、HPC-X25.0的OpenMPI5.0.10rc2、MKL2023.2与FFTW3.3.11,含Libxc7.0.0、ELPA2026.02.002等。模块已经配好依赖,不混用另一套mpi4py或MPI。
GPAW通常通过ASE的Python接口定义结构。最小Si输入为:
from ase.build import bulk
from gpaw import GPAW, PW, FermiDirac
atoms = bulk('Si', 'diamond', a=5.43)
atoms.calc = GPAW(
mode=PW(200), xc='PBE', kpts=(2,2,2), nbands=12,
occupations=FermiDirac(0.01),
convergence={'energy':1e-6, 'density':1e-5,
'eigenstates':1e-8}, txt='si.txt')
print(atoms.get_potential_energy())
atoms.calc.write('si.gpw', mode='all')
Si原胞2个原子,能量单位eV。GPAW的收敛字典按软件自身定义作用,不能把同样的1E-6直接当成另一软件的总能阈值。优化的力阈值另用eV/Å设置。
2 平面波PW截断#
bash run.sh si-pw-100
bash run.sh si-pw-300
| PW截断/eV | 原胞总能/eV |
|---|---|
| 100 | −10.4024026594 |
| 200 | −10.6189601467 |
| 300 | −10.6271841678 |

这里固定2×2×2默认MP网格。300 eV只是本组对照终点,不是所有材料的通用收敛值。还要检查k网格、PAW数据和目标能量差。
3 有限差分FD与网格取整#
bash run.sh si-fd-0.3
bash run.sh si-fd-0.24
bash run.sh si-fd-0.2
输入对应 mode='fd', h=0.3 等。本次h=0.30和0.24 Å都被转换为12×12×12实际网格,因此能量相同;h=0.20 Å得到16×16×16。不要只按输入h的不同就认定做了两档不同实际网格。
python - <<'GRID'
from gpaw import GPAW
calc = GPAW('work/si-fd-0.3/state.gpw', txt=None)
print(calc.get_number_of_grid_points())
GRID
4 局域轨道LCAO#
bash run.sh si-lcao
对应 mode='lcao', basis='dzp', h=0.25。本例总能−10.3638008854 eV。LCAO基组与辅助实空间网格分别需要检查;不同模式的小规模结果接近或不同,都不能代替各自收敛测试。
5 MPI要使用GPAW入口#
包内run.sh是单进程教学入口。正式MPI示例使用包内 mpi_si.py,通过集群模板提交:
cp /public/slurm_scripts/hs_user/gpaw/26.7.0/8173m/sub_gpaw_26.7.0_8173m.sh .
sbatch sub_gpaw_26.7.0_8173m.sh mpi_si.py
模板内部使用 mpirun -np N gpaw python mpi_si.py。不要改成N份普通Python串行进程,也不要在mpirun外包住本包的run.sh。
MPI小例使用250 eV、Γ中心2×2×2网格,与上面默认MP网格表的设置不同。实际2rank结果与同设置串行结果差约4.4×10⁻¹⁰ eV,world.size确认为2。生产计算还需按可用分区和自己的资源申请调整。