本NB初衷:
在 AISI 电池团队的一个项目中,需要求周期性体系的静电相互作用能,最初是采用原始的 Ewald 进行实现,后期为了提高效率,决定采用 PME 替代 Ewald,因此有了本NB。
前言
在分子动力学(molecular dynamics, MD)模拟中,在为模拟系统选取边界条件时经常会采用周期性边界条件(periodic boundary conditions, PBC)以降低边界效应对系统中粒子的影响。考虑真空中单元系统内的 个点电荷(point charge),坐标分别为 ,且满足条件 。使用周期性边界条件的无穷大系综的静电相互作用能(electrostatic energy)的总和为 其中 为真空中介电常数(vacuum permittivity),,(),()为单元系统的边界矢量。引入 记号表示 ,当且仅当 ,即排除单元系统中点电荷与自身的静电相互作用。方程 指出,在周期性的无穷大系综中,直接计算带电粒子的静电相互作用能是困难的,这是因为静电相互作用能随 衰减,并且能量的无穷项求和是条件收敛的。
德国物理学家 Ewald 为了计算晶体内静电相互作用能,于1921年提出 Ewald 求和算法1。包含无穷多重复单元的周期性系综和包含无穷多相同晶胞的晶体在计算性质上是高度相似的,因此在分子动力学模拟中计算静电相互作用也可以采用相同的算法。Ewald 求和的时间复杂度为 ,而为了处理大体量系统中的静电相互作用,Darden、York 和 Pedersen 于1993年基于经典 Ewald 求和提出了 particle mesh Ewald(PME)求和,将 Ewald 求和中最耗时的一项的时间复杂度缩减为 2。1995年,Essmann、Perera 和 Berkowitz 等人通过改良 PME 求和的算法提高了计算精度,提出 smooth particle mesh Ewald(SPME)求和算法3。
本文将简要介绍 Ewald 求和和 PME 求和的基本原理,并运用 C 语言实现 PME 求和对3D周期性系综的静电相互作用能的计算。
Ewald 求和
基本思想
Ewald 求和的基本思想是引入一个快速衰减函数 ,将 阶的长程库仑相互作用重写为两项之和: 其中,第一项 是快速衰减的,且其求和是收敛的。第二项 是慢变函数,可以通过 Fourier 变换将其变换到倒易空间(reciprocal space)后对波矢(wave vector) 求和得到。Ewald 求和选取了余误差函数(complementary error function)作为衰减函数,其表达式为:
图 1. 通过选择余误差函数作为衰减函数,将长程静电相互作用(黑色实线)分离为短程项(蓝色实线)和慢衰减项(红色虚线)。
物理图像
下面将探讨方程 中对点电荷间长程静电相互作用进行的分离的物理意义。点电荷在空间中的电荷密度分布可以通过 Dirac delta 函数的集合来描述。特别地,点电荷 在位置 处的电荷密度为 其中 Dirac delta 函数满足 ,且 。 假想以点电荷的位置为中心在空间中引入一个总电荷量相同、电性相反、球对称(spherical symmetry)且平滑变化的电荷分布。这种云状的电荷分布有效地屏蔽了点电荷的长程静电相互作用(可以设想在无穷远处,电性相反的云状电荷分布近似等同于点电荷,完全抵消点电荷的静电作用),仅保留短程静电相互作用。同时为了补偿引入的电荷分布,还需引入与云状电荷分布形状相同,且与点电荷电性相同另一种电荷分布。在 Ewald 求和中选取 Gauss 分布描述云状电荷分布: 其中, 是 Gauss 分布的标准差,指示其分布宽度。值得注意的是,delta 函数也可以视为 Gauss 分布对 的极限,即 规定与对应点电荷电性相同且服从 Gauss 分布的电荷称为 Gauss 电荷,与 Gauss 电荷形状相同且电性相反的电荷称为反 Gauss 电荷,点电荷与反 Gauss 电荷合并称为屏蔽电荷(screened charge)。
图2. 一组点电荷可以被认为是由 (a) 一组屏蔽电荷与 (b) 一组 Gauss 电荷组合而成。颜色用于指示电荷的符号。
引入 Poisson 方程: 其中 为 处的静电势(electrostatic potential)。可以解得点电荷 在 处产生的静电势为 Gauss 电荷在 处产生的静电势为 \phi_{i}^{\mathrm{G}}(\mathbf{r}) = \frac{1}{4\pi\varepsilon_{0}} \frac{q_i}{\left|\mathbf{r}-\mathbf{r}_i\right|} \operatorname{erf}\left(\frac{\left|\mathbf{r}-\mathbf{r}_i\right|}{\sqrt{2}\sigma}\right) \tag{10}\ 下面将分别在实空间(real space)中对屏蔽电荷、在倒易空间中对 Gauss 电荷的静电相互作用能进行求和,最后将两项相加即可得到系综的静电相互作用能总和。
实空间
点电荷 与其对应的反 Gauss 电荷组成的屏蔽电荷在 处产生的静电势为 点电荷 与系综中除自身的屏蔽电荷外所有屏蔽电荷的静电相互作用能为 单元系统在实空间的静电相互作用能为 此外,还需单独计算点电荷与其对应的反 Gauss 电荷的静电相互作用能。Gauss 电荷在 处产生的静电势为 自相互作用能为
倒易空间
系综中 Gauss 电荷在空间中的密度分布为 可知 Gauss 电荷在空间中周期性分布,对其进行 Fourier 变换: 其中倒易格矢量(reciprocal lattice vector)(),,倒易矢量(reciprocal vector)()由 (Kronecker delta 函数)定义。 同理,Gauss 电荷产生的静电势 也在空间中周期性分布。对 做 Fourier 变换: 两者的逆 Fourier 变换分别为 将方程 、 代入方程 即 Poisson 方程得 方程 指出,Gauss 电荷与其静电势在倒易空间的关系非常简洁。和将方程 代入方程 ,得 注意到方程 仅对 成立。当单元系统为电中性即 时, 项的贡献为零。系综中 Gauss 电荷对单元系统内点电荷的静电相互作用能的总和为 其中结构因子 的定义为
本章小结
在 Ewald 求和中,系统的静电相互作用能的总和可以写为实空间、倒易空间和自相互作用的静电相互作用能三项之和: 其中 静电相互作用能的实空间项 快速衰减,因此在实际计算中可以通过设置截断距离(cut-off distance) 得到带电粒子的近邻列表(neighbor list),并在列表内直接求和得到。若点电荷 的近邻列表为集合 ,有 Gauss 分布的标准差 的选择可以调节实空间和倒易空间所需算力的相对大小,从而影响 Ewald 求和的计算效率,但 Ewald 求和的最终结果与 的选择无关。Jackson 和 Catlow 通过预设每个实空间和倒易空间项的计算量相等,提出以下 的选取4: 其中 为单元系统的体积。此外, 和 也是文献中常用的参数。
PME 求和
基本思想
前文提到,经典 Ewald 求和计算倒易空间部分能量的时间复杂度为 ,这是由离散 Fourier 变换(discrete Fourier transform,DFT)的基本性质决定的。对于较大体量的模拟系统,使用基本的离散 Fourier 变换处理的计算效率较低,如果可以将点电荷通过插值算法分布到空间中的均匀网格上,就取得了使用快速 Fourier 变换(fast Fourier transform,FFT)的条件,将时间复杂度降为 ,从而极大地提升计算效率。PME 求和算法正是在这种思想的指导下被开发出来。
Lagrange 插值
为了近似静电结构因子 ,需要对方程 中出现的复指数 进行插值。给定正整数 和单元系统中的位置 ,用 表示其比例分数坐标(scaled fractional coordinates),其中 ()。由于周期性边界条件,可以假设 。有 对于实数 ,设 表示 的整数部分,即 是满足 的唯一整数。可以使用线性插值(linear interpolation)对方程 右侧的各个指数进行近似: 将方程 ()分别代入方程 ,将方程 右侧的乘积三线性插值(trilinear interpolation)为8项的和。用 表示以下线性帽函数(linear hat function): 可以将方程 改写为 其中 。注意到方程 中的求和实际上是有限的,因为 是有界支撑的(bounded support)。复指数的高阶分段 Lagrange 插值可以用类似的方式表示。考虑在点 上的分段 阶 Lagrange 插值,定义分配函数: 注意到 时,上式与 的定义一致。利用该函数,可以写出复指数的一般分段 Lagrange 插值公式: 根据 Lagrange 插值的标准误差估计,该近似中的误差有界于
物理图像
下面讨论 Lagrange 插值的物理图像。为了简便性,考虑如图3所示的一维网格,假定网格宽度为 , 表示格点, 表示格子边界,即两个相邻格点的中点。
图3. 一维网格示意图。
假设 为 Lagrange 插值阶数。若 为奇数,定义 为距离粒子最近的格点坐标;若 为偶数,定义 为距离粒子最近的格点中点坐标。将粒子的电荷以分配函数 分配到以 为中心、索引分别为 的 个格点上。下面给出 和 时的 Lagrange 插值分配函数 以供参考。
当 时: 当 时: 分配函数容易扩展到三维空间: 在周期性边界条件中,格点 上的电荷量为
图4. 将点电荷分配到二维网格上()。蓝点表示初始点电荷,红点表示分配到网格上的电荷。圆点的大小指示电荷量。
本章小结
利用方程 对静电结构因子 进行近似,有 其中 表示数组 的离散 Fourier 变换。将方程 代入方程 ,有 注意到对倒易格矢量 的分量 的求和与对网格求和相同,这是由处理均匀取样信号的离散 Fourier 变换的性质决定的。
PME 求和算法实现
简介
- 使用C语言对 PME 求和计算倒易空间的经典相互作用能的方法进行代码实现。
- 代码调用 FFTW 库对网格上的分配电荷进行快速 Fourier 变换。
- 代码力求可读性,不具备计算效率。
示例代码
示例输出
Size: 17.150000 x 17.160000 x 56.000000 (Å)
Mesh: 42 x 42 x 140
Volume: 16.480463 (nm^3)
Atoms: 698
beta: 0.207441
Totol charge in the box: 4.164000e-06
Totol charge on the mesh: -5.851899e-03
Reciprocal energy = 15.606500 (eV)
Program ended with exit code: 0
参考文献
[1] Paul P. Ewald. "Die Berechnung optischer und elektrostatischer Gitterpotentiale." Annalen der physik 369.3 (1921): 253-287. (https://doi.org/10.1002/andp.19213690304)
[2] Tom Darden, Darrin York, and Lee Pedersen. "Particle mesh Ewald: An N⋅log(N) method for Ewald sums in large systems." The Journal of chemical physics 98.12 (1993): 10089-10092. (https://doi.org/10.1063/1.464397)
[3] Ulrich Essmann, Lalith Perera, Max L. Berkowitz, Tom Darden, Hsing Lee, and Lee G. Pedersen. "A smooth particle mesh Ewald method." The Journal of chemical physics 103.19 (1995): 8577-8593. (https://doi.org/10.1063/1.470117)
[4] R. A. Jackson, and C. R. A. Catlow. "Computer simulation studies of zeolite structure." Molecular Simulation 1.4 (1988): 207-224. (https://doi.org/10.1080/08927028808080944)