使用 ASE 和 Quantum Espresso 进行 DFT 计算

原始版本的 DFT教程 使用原子模拟环境(ASE)和VASP写作,本教程使用ASE和免费的 Quantum Espresso 进行,同时使用 xespresso 作为ASE和Quantum Espresso交互的界面。

密度泛函理论简介

背景知识

对 DFT 的全面概述超出了本书的范围,因为在文献中很容易找到关于这些主题的优秀评论,建议阅读以下段落。 相反,本章旨在为非专家以本书中使用的方式开始学习和使用 DFT 提供一个有用的起点。 此处提供的大部分信息是专家之间的标准知识,但其结果是目前文献中的论文很少对其进行讨论。 本章的第二个目标是为新用户提供了解大量可用文献的途径,并指出这些计算中的潜在困难和陷阱。

可以在 Sholl 和 Steckel 的 Density Functional Theory: A Practical Introduction 一书中找到对密度泛函理论的现代实用介绍。 Parr 和 Yang parr-yang 编写的一本关于 DFT 的相当标准的教科书。 The Chemist's Guide to DFT koch2001 更具可读性,包含更多用于运行计算的实用信息,但这两本书都侧重于分子系统。 固态物理学的标准教材是 Kittel kittel 和 Ashcroft 以及 Mermin ashcroft-mermin 所著。 两者都有其优点,前者在数学上更严谨,后者更具可读性。 然而,这两本书都不是特别容易与化学相关的。 为此,应参考 Roald Hoffman hoffmann 1987,RevModPhys.60.601 的异常清晰的著作,并遵循 N\o rskov 和同事hammer2000:adv-cat,greeley2002:elect 的工作。

交换关联泛函

基组

基组其实就是一套模板化的函数。进行量子化学计算,最关键的部分就是求解出体系各个能级的波函数。根据分子轨道理论的思想,分子轨道可以用各个原子轨道的线性组合来拟合。因此,我们就可以拿一套原子的波函数(基函数)作为基底,混合它们来求解体系波函数。描述一个原子所用到的全部基函数就叫做一套基组参考来源

赝势

关于 Quantum Espresso 的赝势

赝势方法是相对于全电子势方法而言的。原子的内层电子波函数振荡很剧烈,于是基函数就需要很多平面波才能收敛,计算量就会很大,而通过模守恒赝势norm-conserved、超软赝势ultra-soft、投影扩展波projector augmented wave等方法,可以有效的减少平面波的个数。

QE官网给出了一个较为完整的赝势数据库(Link ),赝势文件可以直接下载。QE赝势的格式为UPF(Unified Pseudopotential Format)。 QE中不同元素的不同类型赝势(NC,US,PAW)允许混用,不同交换关联(LDA、GGA等)赝势也允许混用,但是在输入文件需要重新设置统一的交换关联近似(input_dft),非共线计算(noncolin=.true.)需要至少一种元素使用非共线(rel)赝势。早期的赝势比较缺少,现在需要混用的情况不常见。

赝势所需截断能ecutwfc和ecutrho需要测试以得到准确的计算结果,以下列出的赝势,作者通常公布出了赝势测试的结果,测试包括对单质及化合物的晶格常数、能带、声子频率、磁矩等的计算,赝势的结果比较是和全电子势进行的,与实验结果的比较是一种参照,即具有相似的误差,误差来源的大部分来自采用的交换关联泛函,所以误差并不是通过赝势的生成而减小的。实际使用中,如果这些计算结果与文献基本一致,则通常说明了赝势及截断能选取的可靠性。

费米温度与能带占据

自旋极化和磁性

使用 ASE 搭建结构模型

分子结构

建分子结构

ASE 中内置了 G2 数据库的大量分子结构,可以使用 molecule() 命令创建这些内置的分子。以下为 G2 数据库中分子结构的全部列表。

一些更加复杂的分子结构可以使用 ASE 内置的 PubChem api 接口查询,使用 ase.data.pubchem.pubchem_atoms_search() 命令从 PubChem 数据库中直接获取分子结构。

实例如下:

体相结构

常见体相晶体

可以使用 ase.build.bulk 命令创建常见的体相晶体结构。使用该命令创建 fcc 结构铜的示例如下:

黄铁矿晶体结构的建立

可以使用 ase.spacegroup.crystal 命令从空间群信息创建晶体结构。根据 Materials Project 中 mp226 黄铁矿结构信息创建结构的示例如下:

表面结构

常见表面

fcc 、 bcc 和 hcp 等常见表面可以简单的直接使用单行命令构建。例如,构建具有 2×2×3 大小的 Al(111) fcc 表面,可以使用如下命令:

from ase.build import fcc111
slab = fcc111('Al', size=(2,2,3), vacuum=10.0)

其中,使用 fcc111 命令创建表面,vscuum 参数为单侧的真空层厚度。

切割表面

可以使用 ase.build.surfacease.build.surfaces_with_termination.surfaces_with_termination 命令切割表面或具有特定终止原子的表面结构。

例如,切割三层具有单侧 10 Å 真空曾的黄铁矿 (100) 表面可以使用 surface(pyrite, (1,0,0), 3, 10) 命令。

类似的,可以使用 surfaces_with_termination(lattice = pyrite, indices= (1,0,0), layers=3, vacuum = 10, termination='S') 切割以 S 原子终止的表面。 需要注意: 特定终止的表面可能有多种形式,需要进行选择,如下实例:

在表面添加吸附物

DFT 计算

基本属性计算

原子化能的计算

以下将计算氮分子的原子化能。首先,创建一个包含一个氮的 Atoms 对象,并将一个快速 EMT 计算器作为参数附加到它上面。 然后计算孤立原子的总能量并将其存储在 e_atom 变量中。 定义分子对象,将氮分子保持在实验键长处。 然后将 EMT 计算器附加到分子上,并将总能量提取到 e_molecule 变量中。

结构优化

水分子的结构优化

电子结构计算

能带结构计算

以下计算水的能带结构

态密度计算

电子结构分析

  1. 电荷密度图(charge density plot)

charge_density plot

  1. 电子局域函数 ELF

水的电子局域函数

表面相关分析

  1. 功函数