GPAW私有LCAO基组生成与使用
从终端生成个人H、O基组,绘制径向函数,用水分子实际使用命名基组,并说明SZ、DZ、极化函数与独立目录的配置。
阅读本篇目录
LCAO把电子波函数展开在原子轨道基函数上。基组小,通常算得快;基组不充分时,能量、键合和响应量也可能存在明显误差。本篇从“生成文件—查看曲线—在计算中使用”的流程开始。
1 先运行完整例子#
下载水分子LCAO操作包,保存为gpaw-lcao-workflows.zip。普通作业可在解压目录执行sbatch job.slurm。下面的顺序适用于已经分配好的CPU计算资源:
python3 -m zipfile -e gpaw-lcao-workflows.zip .
cd gpaw-lcao-workflows
bash setup.sh
bash run.sh
bash verify.sh
bash plot.sh
完整包包含基组生成、水二聚体的五组重叠误差计算、私有基组水分子和局域轨道后处理。1个MPI进程、1个线程,计算结果在results/,图片在plots/。另外两篇教程分别解释重叠误差修正和局域轨道模型。
2 在自己的目录生成基组#
模块gpaw/26.7.0-8173m已提供GPAW、PAW数据和常用基组。需要生成自己的版本时,在个人算例目录操作:
source env.sh
mkdir -p my-basis
cd my-basis
gpaw basis --search --name ys396 H.PBE O.PBE
gpaw-analyse-basis -f -s H.ys396.dzp.basis O.ys396.dzp.basis
ls -lh H.ys396.dzp.basis O.ys396.dzp.basis H.ys396.dzp.png O.ys396.dzp.png
cd ..
--search读取已安装的H、O PBE PAW数据,输出写入当前目录。--name ys396给文件加上自己的名称,默认类型为DZP。不要把这些文件复制到公共安装目录或覆盖默认基组。 gpaw-analyse-basis读取生成的基组并保存PNG,不需要图形桌面。
本例生成的H有5个原子轨道基函数,O有13个;因此H₂O共有23个。一个径向p函数展开成3个角向分量,d函数展开成5个,所以“径向函数数量”不等于计算的轨道数量。

SZ是单ζ,DZ是双ζ;P表示增加极化函数。ζ描述同一价电子角动量通道的径向灵活性,极化函数提供额外角向自由度。增大基组后仍要实际检查目标性质,不能仅凭名字判断精度。
3 让计算器读取命名基组#
完整包实际使用results/private-basis/中的文件。下面是程序中的核心设置,setup_paths只对当前Python进程生效:
from pathlib import Path
from gpaw import GPAW, setup_paths
private = Path('results/private-basis').resolve()
setup_paths.insert(0, str(private))
calc = GPAW(
legacy_gpaw=True, mode='lcao', basis='ys396.dzp',
xc='PBE', h=0.22, nbands='nao', spinpol=False,
occupations={'name': 'fixed-uniform'},
convergence={'energy': 1e-6, 'density': 1e-5,
'eigenstates': 1e-7},
maxiter=200, txt='water-private.txt')
PAW数据与LCAO基组是两种文件。这里生成的是基组,不是重新生成元素的PAW赝势。basis='ys396.dzp'使用带名称的文件;basis='dzp'使用已安装的常用基组。
nbands='nao'保留全部基组维度,便于后续轨道和模型分析;一般结构计算不一定需要这么多空带。
4 实际水分子结果#
两次计算使用同一固定结构、同一晶胞、PBE和0.22 Å网格。原子位置没有优化,不能把这些能量差当成水分子的反应能。
| 使用的基组 | 总能量/eV | 基组维度 |
|---|---|---|
| 已安装DZP | −12.81670173 | 23 |
本次生成ys396.dzp |
−12.81645884 | 23 |
两组相差约0.000243 eV。这个结果证明命名文件已进入实际计算;它并不证明所有元素的默认基组与重新生成的基组总是等价。
查看自己的结果和图片:
python3 -c "import json; v=json.load(open('results/VALIDATION.json')); print([(r['name'],r['basis'],r['energy_eV'],r['nao']) for r in v['results'] if r['name'] in ['A-own','A-private']])"
ls -lh results/private-basis/H.ys396.dzp.basis results/private-basis/O.ys396.dzp.basis
ls -lh plots/lcao-private-basis.png
5 换成自己的体系#
先为实际元素准备基组;在脚本中指定私有目录与名称,再检查网格、基组大小、真空层或k点。比较能量时使用相同PAW版本和计算约定。附件的verify.sh只用于原样复跑;换体系后不能继续要求结果等于水分子参考值。
本例采用GPAW26.7.0、Python3.11.16、GCC13.3、OpenMPI5.0.10rc2、MKL2023.2与Libxc7.0环境。通常使用模块加载,无需自行设置编译器。
原生功能与参数参考GPAW LCAO说明。