3.3 恒电势计算原理

在最普通的 DFT 计算里,我们通常是先给定一个体系的结构、元素和总电子数,然后让程序在这个固定电子数下去寻找基态电子密度和总能量。所以从一个很粗略的角度看,普通 DFT 更接近“恒电子数”这件事:我先规定体系里有多少电子,再看这个体系会变成什么样。这对很多普通材料问题都完全合理,比如中性晶体、普通表面吸附、结构优化、能带和态密度,因为这些问题里,你并不一定要把体系和外部电极、电源、电解液联系起来。

但电化学体系往往不是这么工作的。现实里的电极通常接在外部电路上,实验上更自然的控制量通常不是“这个电极上永远固定有多少电子”,而是“这个电极被控制在某个电势下”。一旦电势改变,体系里的电子数其实可以跟着变化,也就是说,电极可以和外部电子库交换电子。所以对电化学界面来说,一个更自然的问题常常不是“固定电子数时体系怎么样”,而是“当电极电势固定在某个值时,体系会是什么状态”。这就是恒电势视角。

这样一比较,恒电子数和恒电势的差别就会变得直观一些。恒电子数更像“我往体系里塞多少电子”,恒电势更像“我把体系控制在什么电压下”。如果你硬用恒电子数去描述一个本质上由电势控制的电化学体系,常常会有一种不太自然的感觉:你固定的是电子数,但真正想讨论的是电势,最后算出来的结果和实验条件之间总像是隔了一层。对电催化、电化学界面、带电电极这些问题来说,恒电势通常会更贴近实验语境。

再往前走一步,恒电势真正想固定的,其实可以很粗略地理解成电子的化学势。在程序里,这通常表现成目标 Fermi level,或者相对于真空参考的电子化学势。换句话说,恒电势并不是把电子数固定死,而是把“电子待在体系里的代价”固定住。如果体系为了满足这个目标电势需要多一点电子,它就多拿一点;如果需要少一点,它就少拿一点。

从算法上看,恒电势并不是把普通 SCF 整个推翻重来,而是在普通 SCF 外面再套一层调节。你可以先把它想成下面这个过程:

text
先猜一个电子数
   
做一次普通 SCF
   
得到当前 Fermi level
   
和目标电势比较
   
如果不一致,就调整电子数
   
再做下一轮 SCF
   
直到 Fermi level 达到目标值

所以恒电势计算的核心并不神秘,本质上就是一边做普通 SCF,一边不断调电子数,让体系的 Fermi level 收敛到目标值。

这里还会马上遇到一个很现实的问题:如果你在真空里直接改一个 slab 的电子数,体系通常会变得很别扭。带电体系的长程库仑作用更难处理,电势参考也不稳定,而且和真实电化学环境差得太远。所以很多恒电势实现并不是单独出现的,而是会和隐式溶剂、电解液 screening、continuum electrolyte model 一起出现。这也是为什么像 Vaspsol++JDFTx 这样的程序或框架,在讲恒电势时几乎都会同时讲溶剂和电解液响应。

如果想要一个更直观但不那么严格的比喻,可以把这两种做法类比成装水。恒电子数更像是把水倒进杯子里,然后规定“水量固定”;恒电势更像是把杯子接到一个恒定水位系统上,系统会自动补水或放水,让水位保持不变。这个比喻当然不严格,但对初学者来说很有帮助:恒电子数固定的是“量”,恒电势固定的是“势”。

读到这里,其实先记住一句话就够了:普通 DFT 默认更接近恒电子数,而电化学实验里更自然的控制量往往是电势,所以在电化学界面问题里,恒电势通常更贴近真实实验条件。如果接受了这一点,下一步再去看 3.4 Vaspsol++3.5 JDFTx,就会自然很多。