3.1 DFT 基础
关于 DFT,网上组内已经有很多更系统、更严格的教材和课程。这里我不再重复造轮子,说点我对 DFT 的“理解”。这里的理解不涉及理论,只是对一个东西的理解——“这是一个什么东西?”
先有一个总印象:
DFT 不是“直接按一个公式算出答案”,而是在一组近似下,通过迭代逐步找到体系电子密度和总能量的一种方法。
1. 为什么会有 DFT
在量子力学里,一个最根本的问题是:给定原子核和电子,如何求这个体系的基态性质?
最直接的想法当然是从薛定谔方程出发。
对于一个电子、两个电子的简单体系,这样做是可行的。 但一旦电子数变多,多体波函数会变得极其复杂。波函数依赖所有电子坐标,维度增长很快,所以直接精确求解在实际材料体系里几乎不现实。
这时一个很重要的思想出现了:
与其直接求复杂的多电子波函数,不如想办法只研究电子密度。
电子密度只依赖空间位置,是一个三维函数,比多体波函数简单得多。
2. 一个很简短的历史脉络
- 薛定谔方程给出了量子体系的基本描述
- 多电子体系太难直接精确求解
- Hohenberg-Kohn 定理告诉我们:基态性质原则上可以由电子密度决定
- Kohn-Sham 方法把真实的多电子问题,转写成一组较容易处理的单电子方程
- 交换-相关能没法精确写出,所以实际计算要做近似
这也是 DFT 的核心气质:
- 理论基础很漂亮
- 实际计算必须依赖近似
- 好不好用,很大程度上取决于你选了什么近似、研究的是什么问题
所以 DFT 不是“绝对正确”,而是一套在精度和计算成本之间非常成功的 trade-off 方案。
3. DFT 到底在做什么
可以先把 DFT 粗略理解成:
给定原子核位置,去寻找一组自洽的电子密度,使体系总能量尽可能合理地描述这个材料。
这里有几个关键词:
- 原子核位置:也就是你的结构
- 电子密度:真正的核心未知量
- 自洽:你猜一个密度,算出势,再解方程得到新的密度,然后不断重复,直到前后差别足够小
这就是大家常说的 SCF,也就是 self-consistent field,自洽场迭代。
4. DFT 如何实际求解
从计算流程上看,一次最普通的 DFT 计算,大致是在做下面这些事。
4.1 输入一个初始结构
你需要先告诉程序:
- 原子有哪些元素
- 每个原子在哪里
- 晶胞长什么样子
这就是结构信息。
如果是分子,重点是坐标。 如果是晶体或表面,除了坐标,还要有晶胞和周期性边界条件。
4.2 猜一个初始电子密度
程序不可能凭空知道真实电子密度,所以一开始会先猜一个初始密度。
这个初始猜测可能来自:
- 原子密度的叠加
- 上一次计算结果
- 某种默认初始化方式
4.3 根据当前密度构造 Kohn-Sham 方程
接着程序会根据当前电子密度,构造一个有效势。
这个势里通常包括:
- 原子核对电子的作用
- 电子之间的平均库仑作用
- 交换-相关作用
然后程序求解 Kohn-Sham 方程,得到一组轨道和对应占据。
4.4 由新轨道生成新的电子密度
算出这些轨道之后,就可以反过来重新构造电子密度。
于是你会得到:
- 旧密度
- 新密度
如果它们差得还比较大,说明还没有收敛,就继续迭代。
4.5 重复迭代直到自洽
所以一个 SCF 循环可以粗略画成:
输入结构、赝势、泛函、k 点、截断能等参数
↓
给一个初始电子密度 rho_in
↓
┌─ 由 rho_in 构造有效势 V_eff
│ ↓
│ 求解 Kohn-Sham 方程,得到一组轨道和本征值
│ ↓
│ 根据轨道占据重新构造电子密度 rho_out
│ ↓
│ 计算总能、带电情况、磁矩等相关量
│ ↓
│ 比较 rho_out 和 rho_in 是否足够接近
│ ↓
│ 是否收敛?
│ ├─ 是:输出收敛后的能量、电子结构、密度等结果
│ └─ 否:对 rho_in 和 rho_out 做 mixing,生成新的输入密度
└──────────────────────────────────────────────↺如果你想再把这个图读得更“程序化”一点,也可以理解成:
初始猜测
↓
电子步 1
↓
电子步 2
↓
电子步 3
↓
...
↓
直到电子密度 / 总能 / 波函数变化小于收敛阈值这里有几个关键词值得先记住:
rho_in:这一轮拿来算势的输入密度rho_out:这一轮求解后得到的新密度mixing:不是完全相信新密度,而是把新旧密度按一定方式混合,避免迭代发散收敛阈值:程序判断“够接近了,可以停了”的标准
这就是 DFT 计算里最核心的一层。
5. 结构优化和静态计算是什么关系
很多新手第一次接触 DFT 时,会把“算一次能量”和“做结构优化”混在一起。
其实可以先这样区分:
- 静态计算:结构固定,只求这个结构下的电子态和能量
- 结构优化:在反复做静态计算的基础上,再根据力去移动原子,直到结构也收敛
所以结构优化可以理解成“双重迭代”:
- 内层:电子密度的 SCF 自洽
- 外层:原子位置的几何优化
6. 一个 DFT 计算需要什么东西
如果你只是想先知道“真正上机时要准备什么”,那最少可以从下面几个东西来理解。
6.1 结构
这是最基本的输入。
你至少要知道:
- 元素种类
- 原子坐标
- 晶胞参数
没有结构,程序根本不知道你在算什么。
6.2 元素对应的赝势或 PAW 数据
真实原子里,芯电子和价电子都存在。
但在很多 DFT 程序里,我们不会把所有电子都显式处理,而是用赝势或 PAW 方法,把核心部分“等效处理”掉,只重点描述价电子。
所以不同元素通常需要对应的赝势文件。
你可以先把它理解成:
它告诉程序,某种元素应该如何被近似表示。
6.3 交换-相关泛函
这是 DFT 里最典型的近似来源之一。
你总会听到这些名字:
LDAPBEPBEsolSCANHSE
它们本质上是在回答同一个问题:
交换-相关能应该怎样近似?
不同泛函的精度、计算代价和适用场景都不一样。
对初学者来说,先知道一件事就够了:
- 泛函不是随便选的
- 同一个体系,不同泛函可能会给出不同结果
6.4 基组或数值表示方式
程序需要一种方式来表示波函数或电子态。
不同软件的实现不一样,但你通常会遇到这些概念:
- 平面波
- 局域原子轨道
- 实空间网格
如果你在用平面波程序,例如 VASP,常见的相关参数就是:
- 截断能
ENCUT
它决定你用多大的基组去展开波函数。
6.5 布里渊区采样
如果是周期性体系,你通常还要设置:
k点
因为晶体体系的电子态和倒空间采样有关。
所以做固体、表面、体相材料计算时,经常要做 k 点收敛测试。
6.6 收敛标准
你还需要告诉程序,什么时候算“够了”。
常见的收敛标准包括:
- 电子步收敛阈值
- 力收敛阈值
- 最大迭代步数
如果这些标准太松,结果可能不可靠。 如果太严,计算会很慢,甚至不收敛。
6.7 任务类型
最后你还要明确自己到底要算什么。
比如:
- 单点能
- 结构优化
- 态密度
- 能带
- 振动频率
不同任务,对输入参数和后处理方式的要求都不一样。
7. 初学者可以先建立的一个最小清单
如果你现在还不熟,先不要追求把所有理论都搞懂。
先学会每次计算都问自己这几个问题:
- 我现在算的是什么结构?
- 我用的是什么泛函?
- 我用的是什么赝势或势函数?
k点和截断能是否合理?- 我做的是静态计算还是结构优化?
- 我的结果是否真的收敛了?
8. 一个 VASP 的最小案例
上面这些内容还是偏概念。接下来我们给1个最小的例子实战一下,最小可以先看一个 VASP 单点计算目录长什么样。
先记住一句最重要的话:
对 VASP 来说,最核心的输入通常就是四个文件:
INCAR、POSCAR、POTCAR、KPOINTS。
你可以先把它们粗略理解成:
INCAR:这次计算想怎么做POSCAR:结构长什么样POTCAR:元素对应的赝势 / PAW 数据KPOINTS:k点怎么取
8.1 一个最小目录
si_scf/
├── INCAR
├── POSCAR
├── POTCAR
└── KPOINTS这就是一个最经典的最小 VASP 计算目录。
8.2 这四个文件分别在说什么
INCAR
先放一个非常简化的例子:
SYSTEM = Si
ENCUT = 520
EDIFF = 1E-5
IBRION = -1
NSW = 0你现在不需要把每个参数都背下来,只要先建立这些直觉:
ENCUT:平面波截断能EDIFF:电子步收敛标准IBRION = -1:不做离子步优化NSW = 0:不做结构优化步
所以这一组设置对应的是:
固定结构,做一次静态 SCF 计算。
POSCAR
下面给一个极简的 Si 晶体结构例子:
# POSCAR
Si
1.0
5.43 0.00 0.00
0.00 5.43 0.00
0.00 0.00 5.43
Si
2
Direct
0.00 0.00 0.00
0.25 0.25 0.25你现在先只要知道:
- 前面几行定义晶胞
- 元素种类和原子个数写在中间
- 最后是原子坐标
POTCAR
POTCAR 一般不是手写,而是由对应元素的赝势文件拼接得到。
对这个例子来说,如果只有 Si 元素,那它的 POTCAR 就来自 Si 对应的势文件。
对新手来说,这里最重要的不是记命令,而是知道:
POTCAR必须和结构里的元素顺序一致- 你用了什么势,往往会影响结果
KPOINTS
一个最小的自动网格例子:
Automatic mesh
0
Gamma
6 6 6
0 0 0这表示:
- 用一个
6 x 6 x 6的Gamma中心网格采样倒空间
这个值不是永远固定的,实际中往往要做收敛测试。
8.3 这个计算在做什么
如果把上面四个文件放在一起,这个最小案例做的事情可以粗略说成:
- 给出一个 Si 晶体结构
- 选择对应 Si 的势函数
- 设定平面波截断能和
k点 - 做一次静态自洽计算
- 输出总能量、电子结构相关文件和日志
8.4 运行之后通常会看到什么
如果计算正常完成,你通常会在目录里看到这些常见输出:
OUTCAROSZICARCONTCARvasprun.xml
对刚入门的人来说,先知道它们的大致定位就够了:
OUTCAR:最详细的大日志OSZICAR:SCF 迭代信息,适合快速看收敛CONTCAR:输出结构vasprun.xml:更适合程序化解析的完整输出