这是本文档旧的修订版!
这篇教程主要讲述:基于密度泛函理论(DFT)以及由Tran和Blaha提出的meta-GGA泛函(TB09),如何使用ATK准确计算半导体的电子结构、光学和介电性质。TB09是一种半经验的泛函,利用它可以对非金属的带隙值给出非常好的估计。相比于先进的多体计算方法,TB09泛函通常能够得到相近的结果,但所需时间更短 - 计算速率会快几个数量级,在耗时上基本与LDA方法相当。因此,meta-GGA泛函是一种非常实用的能够有效描述半导体和绝缘体电子结构的方法。
需要注意的是,TB09泛函不能用于计算材料的精确能量,只能用于计算材料的电子结构。材料体系的精确能量和几何结构可以基于GGA-PBE泛函得到。
在这里,我们假定你已经熟悉VNL的基本工作流程,如Basic VNL and ATK tutorial所述。
本教程使用硅作为计算实例。与绝大多数半导体类似,GGA和LDA方法均会严重低估Si的带隙(0.5eV到0.6eV)。但是,利用TB09计算得到的带隙值(1.18eV)会与实验值非常接近。此外,利用ATK的光学性质计算模块,Si的准确介电常数也可以得到,与实验值仅相差百分之几。
启动VNL,创建新任务并命名,然后打开该任务。通过点击工具栏上的按钮运行Builder。在Builder中,点击Add下拉菜单中的From Database…。在搜索栏中输入“silicon”并从所有匹配项列表中选中硅的标准相 - Silicon (alpha)。在下面的面板中,您将可以看到所选硅结构的晶格参数和对称性等信息。
双击所选中的硅结构或者点击右下角的图标,将结构加入到Stash中。
现在,通过点击窗口右下角的“Send to”图标,将结构发送到Script Generator,并从弹出的菜单中选择Script Generator(默认选择,黑体bold高亮显示)。
在Script Generator中,
si.nc
。下一步是通过双击每一模块更改计算参数:
对于该计算,您将使用Hartwigsen,Goedecker,Hutter(HGH)赝势^[2]。光学性质的计算需要对费米能级以上的虚拟态有很好的描述。硅的Tier 3基组包含已优化好的3s,3p(2个轨道),3d,4s 轨道。硅的Tier 4基组会增加对其另一个3s轨道以及其它轨道的描述,但这似乎对带隙值并没有显著的影响(仅仅会更耗时)。如果选择比Tier 3更小的基组,即便使用MGGA,您将会得到不准确的带隙值。
保存Editor处的脚本以便将来作参考。
将作业脚本发送至Job Manager,然后开始计算。任务将会在几分钟后结束。文件si.nc
会出现在VNL主窗口中的Project Files下。在LabFloor中选择Group by Item Type。
选择DensityOfStates(gID002),点击插件面板中的2D plot…按钮。由态密度图可以确定硅的带隙。
为了读出带隙,您可以放大态密度图,或者将DOS数据输出为一个文件(或者简单的选择利用Text Representation…进行显示而不是2D Plot…)。能带的上下边缘分布位于-0.59 eV和0.57 eV处,由此可以得到带隙值为1.16 eV。这个数值和0K下的实验值1.17 eV非常吻合,明显优于LDA方法给出的带隙值0.55 eV。
接下来选择OpticalSpectrum(gID003),点击插件面板中的2D plot…按钮。光谱图如下图所示。
通过放大图片(右键单击图片),你可以从图中得到静介电常数$Re[ε(ω=0)]=10.9$,这一数值与实验值11.9基本一致。(用更大的机组描述Si元素,我们可得到12.2左右的数值,但是也请注意我们并没有对k点采样进行优化)。
吸收系数和折射率与介电常数有关,可以参见https://docs.quantumwise.com/manuals/manual.html。
下面的脚本描述如何利用介电常数计算吸收系数和折射率,并绘制它们随波长变化的图谱。
# Load the optical spectrum spectrum = nlread('si.nc', OpticalSpectrum)[-1] # Get the energies range energies = spectrum.energies() # get the real and imaginary part of the e_xx component of the dielectric tensor d_r = spectrum.evaluateDielectricConstant()[0, 0, :] d_i = spectrum.evaluateImaginaryDielectricConstant()[0, 0, :] # Calculate the wavelength l = (speed_of_light*planck_constant/energies).inUnitsOf(nanoMeter) # Calculate real and complex part of the refractive index n = numpy.sqrt(0.5*(numpy.sqrt(d_r**2+d_i**2)+d_r)) k = numpy.sqrt(0.5*(numpy.sqrt(d_r**2+d_i**2)-d_r)) # Calculate the adsorption coefficient alpha = (2*energies/hbar/speed_of_light*k).inUnitsOf(nanoMeter**-1) # Plot the data import pylab pylab.figure() pylab.subplots_adjust(hspace=0.0) ax = pylab.subplot(211) ax.plot(l, n, 'b', label='refractive index') ax.axis([180, 1000, 2.2, 6.4]) ax.set_ylabel(r"$n$", size=16) ax.tick_params(axis='x', labelbottom=False, labeltop=True) ax = pylab.subplot(212) ax.plot(l, alpha, 'r') ax.axis([180, 1000, 0, 0.24]) ax.set_xlabel(r"$\lambda$ (nm)", size=16) ax.set_ylabel(r"$\alpha$ (1/nm)", size=16) pylab.show()
保存脚本到项目文件夹,通过拉拽该脚本到工具栏中的Job Manager图标执行脚本。
脚本产生的图如下所示。
[1] (1, 2)
Tran, P. Blaha, Phys. Rev. Lett., 102, 226401, 2009.
[2]
Hartwigsen, S. Goedecker, J. Hutter, Phys. Rev. B, 58, 3641, 1998.