本教程将介绍:
本教程仅涵盖三维周期性晶体及其表面,不讨论准晶(非周期性晶体)。AMSinput可以导入(File → Import coordinates)、导出(File → Export coordinates)多种不同的晶体结构文件格式,包括.cif和.pdb等。导出*.xyz格式时,AMS还会将晶格矢量写入*.xyz文件中。
在AMS中,3D周期性晶体可以表示为某个单胞的周期性重复,这叫做周期边界条件(PBC)。单胞由三个晶格矢量定义,m每种晶体可以定义出无限种单胞供选择,其中最重要的两个是:
例如,铜是一种具有面心立方(fcc)密堆积(ccp)金属。晶体学原胞和惯用单胞是:
注意,伸向Cell边界的“棍”,表示该原子与相邻Cell内的原子存在“键”,但因为是周期性的,因此只显示一个Cell即可。不少晶体的惯用单胞和晶体学原胞是一样的。本例中,晶体学原胞只有1个原子,惯用单胞有4个原子,因此计算效率上晶体学原胞会快很多。
一个晶体,在AMSinput中,点击窗口底部的❄按钮 → Convert to Primate Cell即可得到晶体的晶体学原胞,❄按钮 → Convert to Conventional Cell可以得到惯用单胞。底部最右侧的四个圆圈按钮,可以切换显示单/多个周期,便于用户检查周期性是否正确,关于周期性如果理解不充分,强烈建议仔细阅读:周期边界条件
AMSinput中,View → Periodic → Show Lattice Vectors可以显示晶格矢量的方向,红绿蓝三条线分别表示\(\vec{a}\)、\(\vec{b}\)、\(\vec{c}\)的方向,View → Periodic → Show Lattice Vector Labels可以显示晶格矢量的这三个字符。View → Periodic → Show Unit Cell 可以显示惯用单胞/晶体学原胞的形状。View → Periodic → Unit Cell Style可以选择晶体学原胞/惯用单胞的显示风格,是否显示6个面,是否只显示12条边,边的粗细。
晶体学中,常用6个参数来描述惯用单胞/晶体学原胞:a、b、c、α、β、γ。其中
在AMSinput中,Model → Lattice可以看到这些参数。调整晶格常数的时候,如果希望原子的分数坐标不变,整个晶体等比压缩、膨胀,可以勾选Adjust atoms when changing lattice vectors。
原子的位置可以用笛卡尔坐标,单位为Å(AMS中的默认值)或分数坐标(以晶格矢量为基础,在晶体学中很常见)来描述。AMSinput → Coordinates勾选Use fractional coordinates即可将笛卡尔坐标显示为分数坐标。
晶格矢量的三个分量是以Å为单位的笛卡尔(xyz)坐标。晶格矢量可以相对于笛卡尔轴以无限多的方式旋转。在AMS中,晶格矢量旋转到哪个方向通常无关紧要。不过一般有两种约定俗成二选一:
用户可以在AMSinpu中,按照上述两种规则,轻松调整晶格矢量:AMSinput → Model勾选Adjust atoms when changing lattice vectors,然后点击Align c to z-axis或Align a to x-axis按钮即可。
通过AMS使用DFTB、BAND、Quantum ESPRESSO和VASP,必须为周期性计算指定一些k点采样。ReaxFF、ForceField和ML Potential不使用k点。在DFTB和BAND中,可以使用值GammaOnly、Basic、Normal、Good、VeryGood和Excellent指定k空间质量,也可以手动指定沿每个倒空间矢量的k点数量,或者对于高度对称的体系,使用对称k空间格点。
在Quantum ESPRESSO和VASP via AMS中,必须手动指定Monkhorst Pack格点k点数量,所需的k点数量取决于晶胞材料和以及晶胞的大小:
为选取的方法和体系确定合适的k点设置,需要先进行k点收敛测试,逐渐提高k点数目,直到您感兴趣的量(例如能量或晶格参数)逐渐趋于一个收敛的结果(即,进一步提高k点数目,能量等不再显著变化)。参见示例:下文《纤锌矿ZnO与DFTB的晶格优化》一节。
一般不要去比较用不同的k点密度计算得到的能量。例如,如果从晶体学原胞创建超胞并引入间隙缺陷,则计算缺陷插入能,就需要与非缺陷超胞的能量比对,而不是直接把晶体学原胞能量的倍数拿来比较。具体参考:下文《表面能计算》一节。
在计算化学中,在构建超胞或表面之前,先优化晶体的晶格矢量是很常见的操作。在计算声子或弹性张量之前,必须首先优化晶格。在AMSinput中,Main窗口“Task”→ Geometry optimization 即进行几何优化,然后在Details → Geometry optimization面板勾选Optimize lattice。还可以设置最大迭代次数maximum number of iterations,即结构优化次数上限。
四个收敛标准:
前三个定义为用于普通的几何优化。第四项被用作应力张量分量的收敛标准,它是“应力张量*晶胞体积/原子数”的张量矩阵元中的最大值。在AMSinput → Details → Geometry Optimization面板convergence criteria下面的值,可以修改收敛标准。
也可以使用ForceField(UFF)、BAND或Quantum ESPRESSO运行此示例。ZnO结晶为六方纤锌矿结构,其中a=b,α=β=90°,γ=120°。
基本上Good和Very Good之间已经没有什么变化,Good和Normal之间则尚有较大变化,因此选择Good K点是很好的。
在原子建模中,主要有两种表示表面的方法:
本教程的其余部分仅介绍Slab模型,这是最常见的表面模型类型。有关QM/MM的更多详细信息,请参阅教程有机框架材料中的无机链接器。
AMS中各个计算引擎对二维Slab、三维Slab、QMMM的支持情况:
表面通常是基于密勒指数定义的,表示为(hkl)。密勒指数是该平面与惯用单胞(Conventional Cell)晶格矢量的“分数截距”的倒数。如果指数为0,则表面与该方向平行。负指数用顶上的条形表示。
对于六方晶体(例如Zn或ZnO),经常使用四个米勒指数(hkil)。则第三指数i是冗余的:h+k+i=0。对于具有菱形晶格的六方晶体(如α-Al2O3或方解石CaCO3),密勒指数是基于菱形晶体学原胞或六方单胞,你需要知道使用了哪种约定。在发布或与他人交流时,应明确说明使用的约定。
晶向指数通过[hkl]的格式描述,代表方向h\(\vec{a}\)+k\(\vec{b}\)+l\(\vec{c}\)。
该方向不一定垂直于平面(hkl)。例如:在α=γ=90°和β>90°的单斜晶胞中,[001]方向平行于\(\vec{c}\),但不垂直于(001)平面。(001)平面平行于\(\vec{a}\)与\(\vec{b}\)。
对于六方晶格,晶向可以使用如上所述的三个指数来给出,也可以使用特殊的四指数[hkil]表示。材料科学或晶体学教科书中描述了如何在这两种类型的符号之间进行转换。注意,晶向指数一般都是基于惯用单胞(Conventional Cell)的。
AMS的图形窗口不显示晶向。
如果表面晶胞是六边形的(例如:Cu(111)和ZnO(0001)),则角度\(\vec{a}\)与\(\vec{b}\)的夹角γ为60°,不过更常用120°,可以在Model → Lattice修改,或者❄ → Convert To Conventional Cell。
密勒指数(hkl)虽然是基于惯用单胞(Conventional Cell)晶格矢量的截距定义的,但实际上任何与该平面平行的任何平面密勒指数都是(hkl)。生成Slab的时候,点击Generate Slab前,哪个原子是被选中的,Slab表面就从哪个原子那里截断,那个原子会保留到Slab的表面。生成的表面应该仔细检查,未必是稳定、合理的表面。
通过复制粘贴坐标,在AMSinpu中创建ZnO,并生成3层ZnO(0001)(对于六边形晶体,忽略第三个指数,因此键入0,0,1即可)。首先尝试在选择Zn(1)原子的时候生成Slab,然后尝试选择O(3)原子然后生成Slab,得到不同终断的表面。在第一种情况下,表面原子是3-配位,这是有利的。第二种情况下,表面原子为1-配位,就不那么稳定了。
类似地,您可以生成ZnO(\(10\bar{1}0\))的各种好、不好的表面。
下图所示的多种表面俯视图,其中a、c是良好的表面,b、d是不合理表面:
一般会创建比所需厚度更厚的Slab,然后手动删除原子,直到表面终断正确为止。
添加与表面原子配位的H原子,可以实现表面的钝化,这样的H原子可以钝化悬空键,悬空键是非常不稳定、活跃的。例如:金刚石(100)表面终端是2配位的sp$^3$ C原子,这是非常不稳定的。通过用H饱和,表面的悬空键将被钝化。软件操作:按住Shift键选中悬空的C原子,Ctrl e自动加氢。
未钝化的Slab的态密度,可以看到费米能级处,态密度非常大:
钝化的Slab的态密度,费米能级处,态密度正常(这不是导体,因此费米能级处DOS为0,费米能级处于带隙中):
不过Ctrl e自动加氢,对主族元素一般没有问题,对富足元素往往需要手动添加H原子。加氢之后,H原子的位置较为随机,需要优化一下。
Slab的几何优化,表面截断位置的原子通常从原先偏移,例如可能移动到更靠近次表面原子的位置,次表层中的原子也会有一些变化。 要量化表面弛豫程度,三种方式如下:
表面重建是指与体材料相比,表面发生显著的结构变化。例如:Si(100)表面形成(2×1)重建,其中表面原子形成二聚行(在体相中不存在)。(2×2)和c(4×2)重建也是可能的。
未重构的Si(100)Slab,使用BAND/HSE06计算DOS,可以看到费米能级处,DOS非常高,体现出金属特征(这显然是不对的),因此计算的时候需要设置较高的电子温度(如前文所述),否则SCF不收敛:
重构之后的Si(100)Slab,存在带隙,PBE优化时SCF即可收敛,使用BAND/HSE06计算DOS,费米能级处于价带顶,体现出半导体特征(正确、符合实际)
极性Zn作为终端的ZnO(0001)表面,可以形成相当大的三角形凹坑和岛,化学计量发生了变化,这有助于稳定表面(原因详见下文“极性表面的稳定机制”)。
非极性表面是最常见的,通常比极性表面更稳定。不过对于离子化合物,表面可能就是极性的:如果垂直于Slab的Formal Dipole Moment随着平板厚度的增加而增加,则Slab是极性的。Formal Dipole Moment是根据离子的Formal Charges计算的,随着Slab厚度的增加,偶极矩不断增长,会导致能量发散。
不过极性表面是可以在现实中形成的,因为它们能以某种方式稳定下来。在计算中,极性Slab暴露出两个不同的极性表面,一个在“顶侧”,一个位于“底侧”。例如,前文中的ZnO(0001)面Slab顶部的Zn端和(\(000\bar{1}\))面底部的O端。
极性表面可以通过如下因素稳定下来:
例如ZnO(0001)能够通过如下方式稳定:
ZnO(\(000\bar{1}\))能够通过如下方式稳定:
案例:
下图a显示了DFTB计算的清洁ZnO(0001)Slab的DOS。从顶层到底层时,能带的位置会发生变化。Zn端侧的导带与O端侧上的价带重叠,导致电荷转移和表面金属化。如前文所述,此时SCC-DFTB(或DFT计算的SCF)可能难以收敛,需要使用电子温度。
b和c显示空位或吸附稳定后,DFTB计算的DOS。在这些情况下,没有表面金属化现象,ZnO Slab仍然是半导体。
就像晶体一样,表面也有一个晶体学原胞(只包含一个晶格点),不过在表面相关计算中,经常会使用表面超胞。通过创建超胞,可以对吸附质的覆盖范围进行微调。
AMSinput中生成的Slab一般是惯用单胞(Conventional Cell),可以通过❄ → Convert to Primitive Cell得到晶体学原胞,二者一般仅仅对中心正交晶格有区别。例:
关于Model → Lattice页面,勾选Adjust atoms when changing lattice,然后旋转曲面晶格矢量,然后窗口中部点击\(\vec{a}\)→x axis,将\(\vec{a}\)旋转到平行于x轴。
超胞通常使用Wood表示(AMSinput不支持)或矩阵表示(AMSinput支持)进行描述。
其中a) Cu(100)和b) Cu(111)表面的顶视图,其中仅顶层原子显示为球,基元原胞的超胞采用矩阵表示法给出的。晶体学原胞(该体系惯用单胞与晶体学原胞相同)显示为蓝色。
Wood表示法将超胞的晶格矢量长度原始晶格长度的倍数,然后搭配一定的转动度数。当创建超单元时,晶格矢量的夹角γ不发生改变时,才能使用Wood表示法。
Wood表示法的例子:
AMSinput只支持矩阵表示法,矩阵表示法,可以表达任何倍数超胞,也能表达转动角度。上述Wood表示对应的矩阵表示为:
AMSinput中❄ → Generate SuperCell输入超胞矩阵即可。对于六边形表面,如Cu(111)或ZnO(0001),γ=120°,使用γ=90°的超晶胞通常更方便,特别是用于分子动力学模拟的大Slab。
将六边形(γ=120°)表面晶胞转换为矩形(γ=90°)超胞:
六方体晶体(例如纤锌矿ZnO)可以类似地转化为正交超晶胞:
表面能E$^{surf}$给出了每单位面积大小的表面,形成所需的能量。如果是上下两个表面相同的Slab,能量E$^{slab}$可分为“体积”贡献和“表面”贡献:
\[E^{\text{slab}} = \frac{n^\text{slab}}{n^\text{bulk}}E^\text{bulk} + 2AE^\text{surf}\]
其中n$^{slab}$是Slab晶胞中配方单元的数量,n$^{bulk}$是体相晶胞中的配方单元数量(二者比值即原子个数比值),A是表面积,E$^{surf}$是表面能,因子2是因为Slab暴露出两个表面。E$^{slab}$和E$^{bulk}$都可以由BAND、QE、VASP等直接计算出。
随Slab增厚,绘制E$^{slab}$ v.s. n$^{slab}$曲线,拟合出一条直线,y轴的截距即E$^{surf}$(厚度为0,n$^{slab}$=0)。
这种方式中,E$^{bulk}$不需要明确(实际上对应于着直线的斜率),并且要求对每个厚度的Slab使用相同的k点采样设置(不是指k点个数一致,而是指k点密度一致,因此可以使用Good、Very Good等针对密度的定义),这意味着表面计算中的k点不需要进行收敛测试。
上面的Slab能量公式可以变形得到表面能E$^{surf}$计算公式:
\[E^{\text{surf}} = \frac{E^\text{slab} - \frac{n^\text{slab}}{n^\text{bulk}}E^\text{bulk}}{2A}\]
这就要求E$^{bulk}$和E$^{slab}$计算非常精确,需要对这两个能量的计算,进行k点收敛性测试,找到足够大的k点。且E$^{bulk }$需要非常仔细地进行结构优化,收敛标准应比一般略高。
注意:
这里的ZnO(\(10\bar{1}0\))表面能计算使用DFTB来演示,结构是用DFTB优化好的。
然后,将每个厚度的Slab能量E$^{slab}$制成表格:
根据方法一,这些点拟合出来的直线:
可以看到截距 = 2AE$^{surf}$,其中A = 17.68 Ų,对不同厚度Slab面积A均为该值。因此表面能:
\[E^\text{surf} = \frac{\text{intercept}}{2A} = \frac{0.106415\ \text{Ha}}{2 \times 17.68\ \text{Å}^2} = 0.00301\ \text{Ha/Å}^2 = 1.31\ \text{J/m}^2\]
如果使用方法2,k-space设置为Normal的最厚Slab,则E$^{surf}$变为1.04 J/m$^2$。当用Good k-Space重新优化最厚的Slab时,E$^{surf}$变为1.31 J/m$^2$,这与我们在上面使用方法1得到数值相同。
小贴士:
解理能是从体相中产生Slab所需的能量,如果Slab暴露出两个相同的表面,则解理能是表面能的两倍。两个表面不一样,则只能计算二者之和,例如ZnO(0001)的Zn端面和ZnO(\(000\bar{1}\))的O端面一起的解理能,而不是单个表面能。
Cu(111)结构复制粘贴到AMSinput。为了便于可视化,我们将第二个Cu层渲染成绿色,第三个Cu层渲染成黄色:
侧视图和俯视图如下:
如下图所示:
吸附能定义为吸附分子与基底的结合能:
\[ΔE^\text{ads} = E^\text{slab} + E^\text{mol} - E^\text{slab+mol}\]
右侧的所有能量都是几何优化过的能量,正吸附能意味着放热吸附。也可以使用不同的方式约定:
\[ΔE^\text{ads} = E^\text{slab+mol} - (E^\text{slab} + E^\text{mol})\]
如此,负吸附能意味着放热吸附。在报道吸附能时,请务必指定用于计算吸附能的公式。
上图a到c表示需要计算能量的Slab、分子、Slab+分子,d表示远距离未吸附状态,也可以用这个体系的能量表示Slab能量与分子能量之和。
在BAND中,如果基组不够大,吸附可能会因基组重叠误差(BSSE)而“显得”稳定。解决BSSE问题的最佳方法是增大基组,或者进行BSSE矫正。DFTB、Quantum ESPRESSO、VASP一般没有显著的BSSE。
示例:水分子在ZnO(101’0)上的吸附。
下图显示了包含/不包含BSSE校正的情况下计算的吸附能,每个几何结构都用相应的基组进行了优化,并对最终的Slab+分子体系进行了BSSE校正。
BAND的BBSE矫正参考教程:Ghost原子的设置与使用(用于周期性体系的BSSE修正)
在ReaxFF中,采用电负性均衡方法(EEM)确定原子的电荷,进而确定库仑能对总能量的贡献。在一个孤立的分子中,电荷只能在分子内各原子之间重新分配。类似地,对于孤立的Slab,电荷只能在Slab内的各原子之间重新分布。
在Slab+分子体系中,有更多的自由度来重新分配电荷,从而可能得到更低的能量,吸附显得更稳定,这个问题类似于BSSE。因此对于ReaxFF,可以选择使用In-Cell处理方法: \[E^\text{ads} = E^\text{slab+mol widely separated} - E^\text{slab+mol}\]
其中,第一项是在一个体系里面计算的,其中Slab和分子被放置在同一个Cell中(故而称之为In-Cell),类似上图d所示。从而两项对应的两个体系,电荷具有相同的重排自由度,从而消除这种误差。类似地,也可以使用不同的符号约定:
\[E^\text{ads} = E^\text{slab+mol} - E^\text{slab+mol widely separated}\]
例子:H2O在ZnO(\(10\bar{1}0\))上的吸附。(3×2)超胞,5个双层,晶格常数a=3.28Å,c=5.28Å。熟悉Python使用的用户,可以下载计算这些数值的PLAMS python脚本测试。
两种方法之间的吸附能差异为10 kcal/mol,这源于以下事实
\[E^\text{slab} + E^\text{mol} \ne E^\text{slab+mol widely separated}\]
对于更大的超胞和更厚的Slab,这种能量差变得更大,如下图所示:
训练吸附相关的力场时,训练集要注意使用In-Cell模型。
Slab暴露出两个表面,吸附质可以添加到两个表面上,也可以只添加到一个表面上。对于Quantum ESPRESSO和VASP,双面吸附可以防止在真空间隙中形成偶极矩,不过BAND、DFTB支持没有真实2D周期性,不存在这个问题。
一般通过固定Slab的中心层或底层,达到固定Slab的目的。当弛豫干净(没有吸附物)的Slab时,最好是弛豫所有原子(不固定任何原子),或者固定Slab中心层,这样Slab的顶部和底部都会弛豫。这种弛豫过的Slab可以用于:
即使在单侧吸附(在顶表面上)的情况下,使用DFTB、BAND、Quantum ESPRESSO或VASP时,具有松弛的底表面也是好的,这有助于SCF收敛,并提供“更清洁”的DOS,是对于共价或离子材料尤其如此。对于金属,这种影响较小。
固定原子的方法:在AMSinput中,在Task设定为Geometry Optimization后,选择要保持固定的原子。Model → Model → Geometry Constrained and PES Scan,单击selected atoms (fix positions)前面的+按钮,保存作业运行即可。