ABACUS 答疑手册 v0.2 版本
作者:陈默涵,邮箱:mohanchen@pku.edu.cn
最后更新时间:2024/10/24
一、背景
本文档适用于想用 ABACUS(原子算筹)来做电子结构计算的科研工作者。
PW:Plane Wave,指平面波
NAO:Numerical Atomic Orbitals,指数值原子轨道
LCAO:Linear Combination of Atomic Orbitals,指局域轨道,在 ABACUS 里面也指数值原子轨道
基于过去几年来积累的用户问题,接下来本文档将尽量以问答的形式来替使用 ABACUS 的用户答疑解惑,例如
问:ABACUS 和 ABAQUS 是什么关系? 答:ABAQUS 是一款知名的多物理场有限元仿真分析软件,ABACUS 的英文单词翻译是算盘,ABACUS 作为一款国产密度泛函理论软件,中文名是原子算筹。
问:使用 ABACUS 需要收费吗? 答:从软件的角度来讲不收费,因为是开源软件,但跑该软件的机器得自己准备,机器要交电费。
问:ABACUS 的开发过程是怎样的,什么人可以成为开发者? 答:ABACUS 的代码开发记录完全公开,所有代码的修改都在 https://github.com/deepmodeling/abacus-develop 网页上可以查到,ABACUS 为所有感兴趣的参与者都保留了成为开发者的可能性,每个人都有可能称为开发者。
二、ABACUS 使用建议
1. 编译
1.1 从哪里可以下载到 ABACUS 的代码?
答:如果可以接 github,可以登录 https://github.com/deepmodeling/abacus-develop,建议下载最新版本使用,因为软件一直在更新,总体而言新版本的 bugs 会更少。
如果网络不方便登录 github,还可以登录国内网站 https://gitee.com/deepmodeling/abacus-develop.git 下载。
1.2 怎么安装 ABACUS?
答:可以参考官方文档 https://abacus.deepmodeling.com/en/latest/quick_start/easy_install.html
也可以登录网址 https://mcresearch.github.io/abacus-user-guide/,上面有一些针对不同编译器的中文编译教程。
另外,注意“安装 ABACUS”这句话其实有歧义,ABACUS 有很多不同的安装选项,比如是否只安装支持平面波的功能,还是也要安装支持数值原子轨道的功能,是否要使用 LIBXC 等等不同选项,可根据自己的需要来安装具体的代码模块。
1.3 如何在曙光的 DCU 上编译 ABACUS?
答:可参考文档 https://mcresearch.github.io/abacus-user-guide/abacus-dcu.html
2. 计算前准备
2.1 PW 计算需要准备的文件?
答:INPUT
文件控制输入参数,STRU
文件包含晶胞、原子信息和赝势;KPT
文件包含布里渊区 k 点信息。这三个文件默认是放在一个文件夹内的。但是 INPUT
文件里其实可以控制结构文件所在地址,以及 KPT
文件所在地址。
2.2 KPT 文件什么时候不适用?
答:第一,在使用 DPGEN 的时候,强烈建议设置 kspacing
这个参数,而不是在 KPT
文件里设置 k 点的个数,这是为了做不同大小体系密度泛函计算的时候,使得计算的精度尽量持平,从而得到不同结构里精度相当的总能量和受力,这对于 DPMD 的训练很重要。第二,LCAO 可以在 INPUT 使用 gamma_only(设为 1),那么 KPT 文件不起作用,所有计算只用到 Gamma(0,0,0)这个 k 点,这种情况下体系有更快速的特殊算法,效率更高,计算内存的消耗也更小。
2.3 LCAO 基组相比于 PW 基组需要额外准备的文件?
答:数值原子轨道文件,下载地址为 https://abacus.ustc.edu.cn/pseudo/list.htm。注意轨道文件要和对应的赝势相匹配。
关于数值原子轨道的背景知识,可以参考文档:
https://mcresearch.github.io/abacus-user-guide/abacus-nac1.html
https://mcresearch.github.io/abacus-user-guide/abacus-nac2.html
https://mcresearch.github.io/abacus-user-guide/abacus-nac3.html
2.4 能量截断值收敛性测试是必须要做的吗?
答:是的,除非你或者别人之前已经做过了,得到了推荐的能量截断值。否则,一般来讲一个给定的赝势(模守恒或者超软赝势),你需要从低到高逐步增加能量截断值来判断总能量已经收敛。
2.5 布里渊区 k 点收敛性和什么有关系?
答:布里渊区 k 点只和实空间的晶胞大小有关系,因此当换了晶胞之后需要测试 k 点的收敛性。然而,一般我们会有一些经验规律,比如实空间某个方向增大一倍,则倒空间相应的 k 点数量可以少取一半,一直小到只取 Gamma 点(0,0,0)为止。所以,改变赝势或者交换关联泛函的时候,并不需要重新测试 k 点的收敛情况。
2.6 关于长度单位
答:没有注意到单位的转换是初学者容易犯的错之一。长度单位 Angstroms(埃)和 Bohr 的转换关系需要了解(1 埃=1.8897259886 Bohr,反过来 1 Borh=0.529177249 Angstroms,转换时候尽可能多地取有效数字,会让原子坐标更准确),不同软件的长度单位可能有取得不同的情况,涉及到晶格矢量、原子位置,以及坐标系转换(Direct 和 Cartesian 的区别,前者是晶格坐标系,后者单位才是长度单位),如果原子位置或者晶胞设错了,不同软件计算结果就会不同。一个小技巧判断不同软件的晶格结构和原子坐标是否一样:可以看不同软件算出来的 Ewald 能量(周期性边界条件下算离子-离子库伦排斥能的快速算法),如果 Ewald 能量能对上(精确到小数点后 10 位以上),那么说明两个软件的原子坐标和晶格矢量设置都是一样的。
2.7 关于能量单位
答:涉及到能量单位的有多处。首先是平面波的能量截断值,VASP 经常用的是 eV,QE 和 ABACUS 用的是 Ry,这两者有转换关系(1 Ry=13.605703976 eV),所以用 VASP 习惯的用户需要把对应的 eV 转换成 Ry 再使用 ABACUS。其次是 smearing 的参数选择,例如 0.015,其单位是 Ry 或者 eV 也对结果有较大影响。
3. 基矢量
3.1 ABACUS 支持的基矢量有几种?
答:分成 PW(平面波)和 LCAO(具体来讲是 Numerical atomic orbitals,NAO,即数值原子轨道)两种,目前 ABACUS 都支持,像是 VASP 和 QE 只支持 PW,SIESTA 和 OpenMP 支持 LCAO。还有一种叫 lcao_in_pw,就是把 NAO 展开成平面波进行计算,但一般只用于测试目的。
3.2 怎么选择是采用 PW 还是用 LCAO 基矢量来做计算?
答:如果是较小原子数的固体体系,建议可以采用 PW 效率较高。如果是体系原子数较大(例如大于 50 个原子),建议可以用 LCAO 试试,效率会更高。此外,当使用 LCAO 做计算时,可以先用 PW 这组相对完备的基组来测试赝势带来的能量收敛性。
3.3 如果感觉 LCAO 的效率慢,可能的原因是否和基矢量有关系?
答:ABACUS 里采用的 LCAO 的局域轨道长度一般在 6-10 au 之间,轨道的截断越长,往往计算精度越高,但计算量和内存消耗也会显著的更大。如果要提高速度,可以在尽可能不影响精度(需要自己测试)的前提下,减小数值原子轨道的半径,这样可以大幅度提升计算效率以及降低内存占用量。
3.4 ABACUS 中 LCAO 的 Ecut 是做什么用的?
答:LCAO 和 PW 一样,都会有一个 Ecut,在使用 LCAO 的时候,增加 Ecut 只会增加局域势格点积分部分的精度(赝势的局域部分 + 交换关联势 +Hartree 势),并不增加数值原子轨道基矢量的完备性,所以原先用于 PW 的收敛性测试方法是不能这样直接用于 LCAO 的。如果要增加 LCAO 的基矢量使得基矢量更完备,需要从例如 DZP 增加到 TZDP,而不是增加 Ecut。
3.5 LCAO 算小分子和固体有什么要注意的?
答:使用局域轨道的话,会有 BSSE(Basis set superposition error),对于小分子体系,BSSE 带来的误差会较为严重,使得对于一些分子体系,有必要采用更完备的基矢量(或者更长的局域轨道)或者 BSSE 修正。而对于固体系统,一般来讲每个原子会有若干近邻原子,这些近邻原子上的局域轨道会使得在描述每个原子的电子结构时基矢量总体更完备,所以可以相对选择更短的局域轨道。
3.6 如果算出来 SZ 结果比 DZP 好,是否可以用 SZ 结果?
答:采用 LCAO 时,SZ(single zeta 轨道)的结果一般来讲都不收敛,一般不可以用来发表文章。一般至少是 DZP 及以上才认为基矢量较为准确,是学界可以认可的 NAO 精度。
4. 赝势
4.1 PAW 是不是赝势?
答:准确来说不是,是一种描述电子-离子相互作用的方法。
4.2 为什么不同软件算出来的统一体系的总能量差距可能会巨大?
答:因为同样的元素,其不同的赝势(或 PAW 势)允许总能量有一个常数的偏移,因为都对库伦势进行了人为的修改。所以,我们一般在分析结果的时候也不用总能量这个数值,而是用总能量之间的差别,例如 bcc 相比于 fcc 更稳定这种结论,不同赝势哪怕总能量不对齐,其算出来的 bcc 和 fcc 之间的能量差也应该是对齐的。另外一件事情就是画态密度(Density of States,DOS)的时候,我们习惯把费米面取成 0 点,也是因为总能量是可以有一个常数的偏移的。
4.3 赝势为什么和交换关联泛函有关?
答:因为赝势生成过程中解的是一维的 Kohn-Sham 方程,这个过程也用到了泛函,所以不同泛函生成的赝势就不同。
4.4 赝势改变了,什么参数需要重新测试?
答:因为电子和离子的描述方式变了,所以需要重新测试能量截断值 Ecut 的收敛性,即增加 Ecut,看总能量变化,例如从 90 Ry 变到 100 Ry,如果总能量变化小于 1 meV/atom,则认为可以收敛。
4.5 从 PBE 泛函换到 Meta-GGA 泛函,例如 SCAN,或者杂化泛函,是否需要换赝势文件?
答:一个约定俗成的赝势用法是:PBE 的赝势可以用于 Meta-GGA 泛函,例如 SCAN 泛函,甚至杂化泛函包括 PBE0 和 HSE06 泛函。但是,LDA 的赝势就不可以用于 SCAN 泛函或者 PBE0、HSE06 泛函。因为 SCAN 泛函和 HSE06 泛函也是基于 PBE 泛函发展起来的。
4.6 别人文献看到的某元素的能量截断值,是否可以直接拿过来使用?
答:一般来说是不可以,例如用了 VASP 的 PAW 势,就难以直接拿到模守恒赝势里使用。
5. 电子自洽迭代过程
5.1 为什么 ABACUS 的 SCF 计算比 VASP 慢很多?
答:首先,先检查 Ecut 是否一样(注意 ABACS 的单位是 Ry,VASP 是 eV,要换算),一般来讲 VASP 用 PAW 方法所需的 Ecut 比 ABACUS 的模守恒赝势要低,目前来讲这部分参数 VASP 占优,你并不能降低 ABACUS 的 Ecut 来和 VASP 的 Ecut 持平。第二,检查你所计算的元素的电子数,往往电子数不同,计算效率会有很大差别。例如 Ga 的模守恒赝势可能有 13 个电子,但 VASP 的 Ga 的 PAW 势可能只有 3 个电子,那么 VASP 的计算效率会快很多也是可以预期的。
5.2 电子自洽迭代里的展宽技术是用来做什么的?
答:电子自洽迭代过程中使用的展宽(一般称为 Smearing)是一种数值技术,它用于提高计算中的收敛稳定性和速度,尤其是在处理金属和其他导体体系时非常有用。展宽通常采用几种不同的办法来实施,例如费米-狄拉克展宽(Fermi-Dirac smearing)、高斯展宽(Gaussian smearing)、Methfessel-Paxton 展宽等,它们代表不同的电子占据数分布方法。
5.3 电子自洽迭代收敛结果和 smearing 相关吗?
答:对于没有带隙的金属体系是相关的,采用 smearing 会在体系总能量里额外引入一个电子熵项。一般来讲 smearing_sigma 取得越大越容易收敛,但是要注意的是,smearing_sigma 取大了,总能量结果也愈发不准确。因此在迭代接近收敛时,通常需要逐步减少展宽值,以得到更加准确的接近零温的结果。对于半导体来讲,一般较小的 smearing 参数不影响总能量结果。
5.4 只要体系不收敛,就可以调整 smearing 吗?
答:在项目里对一系列相关体系进行密度泛函理论计算,如果需要用到这些体系的总能量相对值,但发现有体系不收敛,我可以针对不同体系调整不同的 smearing 参数吗?一般不可以,因为 smearing 可能会改变总能量的数值。
5.5 电荷密度混合是用来做什么的?
答:在电子自洽迭代过程中,需要不断更新电荷密度,直到输入的电荷密度和由此计算得到的输出电荷密度之间的差异足够小,即达到自洽。混合的具体方法有很多种,比如简单的线性混合、Broyden 混合、Pulay 混合(也称为 DIIS,Direct Inversion in the Iterative Subspace)等。这些方法通过考虑前几次迭代的电荷密度和/或电荷密度差异,来改进当前迭代的电荷密度估计。
5.6 总能量收敛、受力和应力是否收敛了?
答:一般来讲,总能量在 SCF 中收敛到几乎不变时,受力和应力不一定完全收敛。如果是对受力或者压力敏感的计算,建议也测试一下相应受力和应力是否收敛(即继续降低 scf_thr 数值,设置更严格收敛阈值)。
6. 原子位置和晶胞结构优化(弛豫)
6.1 原子位置和晶胞结构优化有什么需要注意的?
答:首先要注意的就是,原子位置和晶胞结构优化较慢,很耗机时,动辄就是几十上百个进程跑一两天。所以,如果不是很有把握了解你要算的体系,或者不是特别熟练密度泛函理论计算,建议动手算之前找导师聊一聊这样做的可行性,这样做一方面也是可以少走科研上的弯路,另外一方面也能有效的帮助导师节省机时费。
6.2 原子位置和晶胞结构优化有什么技巧?
答:首先,就是要小心一些参数不要设多了,例如不要包含太多费米面上方非占据的轨道,如果体系没有磁矩,没有必要打开自旋极化计算(nspin=2)。其次,如果你能预估偏离最终的构型较大,那你可以先采用低精度的方法达到一个接近最终构型的一个临时构型。例如,没有必要用 181818 的 k 点(虽然你认为这样才能完全收敛总能量)来做优化,你可以先选一个 999 的 k 点 mesh 来做。第三,如果你是做的一系列相关结构的原子位置和晶胞结构优化,可以想办法构造一些更好的初猜结构,除非考虑亚稳态的存在,否则一开始猜测的结构越接近,所需要的优化步数就越少。第四,BFGS 算法一般适用于偏离稳定结构较小的情况,而 cg 一般用于偏离稳定结构较大的情况。
6.3 做结构优化很多步都不收敛,怎么办?
答:首先,检查每一步的 SCF 是否收敛,如果不收敛,先让 SCF 能收敛,再做结构优化。其次,如果能不用 cell-relax 而只用 relax,建议尽量先用 relax,把晶胞内的原子位置先固定住了,最后再做 cell-realx,这样效率更高。原因是如果把 cell 的自由度和原子的自由度一起考虑做 relax,往往效率较低。
6.4 采用 LCAO 和 PW,结构优化收敛上有什么区别?
答:PW 基组更完备,一般结构优化可以收敛到 0.001 eV/Angstroms。而 LCAO 由于基矢量不够完备,存在诸如 egg box effect 的误差,所以求力能收敛到的精度一般要差一些,通常 0.04 eV/Angstroms 以下是可以接受的,也有不少文章采用这个精度来发表结果,是被认可的。
7. 并行
7.1 MPI 并行和 OpenMP 并行的区别是什么?什么叫进程,什么叫线程?
答:MPI 进程和 OpenMP 线程的差别,前者内存是不共享的,后者内存是共享的。
7.2 是不是进程或者线程越多,计算就越快?
答:举个例子,用 7au 的 DZP 轨道算 512 个 Fe 原子的体系,K 点 111,以下是运行时间(OMP 代表线程数,MPI 代表进程数):1 OMP x 32 MPI = 262s 每电子步;1 OMP x 64 MPI = 581s 每电子步;1 OMP x 128 MPI = 654s 每电子步;1 OMP x 256 MPI = 765s 每电子步。可以看到进程越多,计算反而越慢,这是因为进程间的通讯量随着进程数增多变大了。所以,并不是用的计算资源越多,计算就会越快,建议做计算前先评估好并行效率。
7.3 K 点并行(也就是 KPAR 这个参数),要怎么理解它的使用?
答:对 PW 来说,不同 K 点的 Kohn-Sham 方程求解(即寻找特征值和特征向量)是比较独立的,因此如果给定了总的进程数,我们可以想办法把不同 K 点的方程求解尽可能并行,KPAR 代表我们要将 K 点分成几组,因此原则上 KPAR 越大效率应该越高。如果 KPAR 设成 1,那么程序执行时是用平面波来并行,在某些时候,平面波并行效率也挺高,因此看不出 K 点并行的优势。对 LCAO 来说,KPAR 并行的优势不大,因此目前 ABACUS 不支持 LCAO 的 K 点并行功能。