本教程演示如何进行一个InAs的器件计算,建立氢钝化的InAs(100)方向结构并建立 p-i-n 结。
在VNL图形界面中打开 Builder,点击 Add
→From Database
,搜索 InAs。点击右下角“+”将结构添加到 Builder 的 Stash 中。
下一步是将晶格常数修改为实验中室温下的晶格常数,即 $a=6.0583 Å $
Bulk Tools
→Lattice Parameters…
;
接下来打开右侧工具栏 Builder
→Surface (Cleave)…
来沿着 (100) 方向切割晶体。
接下来打开 Bulk tools
→Repeat
,输入 A=12,B=1,C=1,点击 Apply。
用快捷键 Ctrl+R 重设视角。
此时,应计算一下晶胞的大小,因为接下来对 p-i-n 结构进行掺杂时需要计算掺杂浓度。打开Bulk Tools
→Lattice Parameters
,晶胞体积在 Lattice Parameters 窗口的底部给出:1334.15 Å3。
要完成设置:
Bulk tools
→Lattice Parameters
,选择保持 Cartesian,将 A 矢量长度设为 80 Å;Coordinate tools
→Center
,将结构置于所有三个方向的中心。Coordinate tools
→Custom Passivator
;选择 Hybridization 4(sp3),将结构钝化。此时,结构应如下图所示。
接下来,将结构发送到 Script Generator 中进行计算设置。
我们用自洽的Vogl模型计算此体系的DOS,为此我们需要使用自定义的参数设置,这是因为老版本中 VNL 默认数据中不包含 InAs 和 H 的数据。
为此:
打开 New Calculator 单元,进行如下设置:
打开 DensityOfStates,将 k 点设为 1,15,15。
打开 Bandstructure,将 points per segment 设为201。
将脚本保存为 InAs_5nm.py
。
新版用户也可以在 Slater-Koster 基组中选择 Bassani.InAsH sp3d5s* 基组,并设置端基氢的电荷,将以下段落置于 Caculator 之前,不必再设置自定义基组。
# Add external potential external_potential = AtomicCompensationCharge([ ('H_As', -0.25), ('H_In', 0.25) ]) bulk_configuration.setExternalPotential(external_potential)
将脚本用Editor打开。QuantumATK中缺少定义 H-端基的 InAs 紧束缚基组,下面脚本中提供了这个基组。在 InAs_5nm.py
中,将 Calculator一段用以下替代:
# Add external potential external_potential = AtomicCompensationCharge([ ('H_As', -0.25), ('H_In', 0.25) ]) bulk_configuration.setExternalPotential(external_potential) # ------------------------------------------------------------- # Calculator # ------------------------------------------------------------- #---------------------------------------- # Basis Set #---------------------------------------- basis_set = Bassani.InAs_Basis as_onsite_parameters = SlaterKosterOnsiteParameters( element=PeriodicTable.Arsenic, angular_momenta=[ 0 , 1 , 2 , 0 ], occupations=[ 1.577, 3.012, 0.204, 0.067 ], filling_method=SphericalSymmetric, ionization_potential=[ -5.9801*eV , 3.5813*eV , 12.1954*eV , 17.8411*eV ], onsite_hartree_shift=7.81664*eV, onsite_spin_split=ATK_W(PeriodicTable.Arsenic, [ "4s", "4p", "4p", "4s" ]), onsite_spin_orbit_split=[0.0,2*0.1763,0.0, 0.0]*eV, ) in_onsite_parameters = SlaterKosterOnsiteParameters( element=PeriodicTable.Indium, angular_momenta=[ 0 , 1 , 2 , 0 ], occupations=[ 1.113, 1.668, 0.300, 0.059 ], filling_method=SphericalSymmetric, ionization_potential=[ 0.3333*eV , 6.4939*eV , 12.1954*eV , 17.8411*eV ], onsite_hartree_shift=3.34624*eV, onsite_spin_split=ATK_W(PeriodicTable.Indium, ["5s", "5p", "5p", "5s"]), onsite_spin_orbit_split=[0.0,2*0.1248,0.0, 0.0]*eV ) h_onsite_parameters = SlaterKosterOnsiteParameters( element=PeriodicTable.Hydrogen, angular_momenta=[ 0 ], occupations=[ 1], filling_method=SphericalSymmetric, ionization_potential=[ 0.6*eV ], onsite_hartree_shift=ATK_U(Hydrogen, ['1s']), onsite_spin_split=[[0.0]]*eV, ) offsite_parameters = basis_set.offsiteParameters() basis_set = SlaterKosterTable( arsenic = as_onsite_parameters, indium = in_onsite_parameters, hydrogen = h_onsite_parameters, in_as_sds = offsite_parameters['in_as_sds'], in_as_pdp = offsite_parameters['in_as_pdp'], in_as_sss = offsite_parameters['in_as_sss'], in_as_pds = offsite_parameters['in_as_pds'], in_as_ddp = offsite_parameters['in_as_ddp'], as_in_pds = offsite_parameters['as_in_pds'], as_in_pdp = offsite_parameters['as_in_pdp'], in_as_dds = offsite_parameters['in_as_dds'], as_in_s1ps = offsite_parameters['as_in_s1ps'], in_as_s1ps = offsite_parameters['in_as_s1ps'], in_as_ppp = offsite_parameters['in_as_ppp'], in_as_s1s1s =offsite_parameters['in_as_s1s1s'], in_as_pps = offsite_parameters['in_as_pps'], in_as_ddd = offsite_parameters['in_as_ddd'], as_in_s1ss = offsite_parameters['as_in_s1ss'], as_in_sps = offsite_parameters['as_in_sps'], as_in_s1ds = offsite_parameters['as_in_s1ds'], in_as_s1ds = offsite_parameters['in_as_s1ds'], as_in_ss1s = offsite_parameters['as_in_ss1s'], in_as_sps = offsite_parameters['in_as_sps'], as_in_sds = offsite_parameters['as_in_sds'], h_as_sss = [(0.5*Ang, -3.5*eV), (1.0*Ang, -3.5*eV), (1.25*Ang, -3.5*eV), (1.5*Ang, -3.5*eV), (1.6*Ang, -3.5*eV), (1.7*Ang, -3.5*eV), (1.8*Ang, -3.5*eV), (1.9*Ang, -3.5*eV), (2.0*Ang, -3.5*eV), (2.1*Ang, -3.5*eV), (2.2*Ang, 0.0*eV)], h_in_sss = [(0.5*Ang, -3.5*eV), (1.0*Ang, -3.5*eV), (1.25*Ang, -3.5*eV), (1.5*Ang, -3.5*eV), (1.6*Ang, -3.5*eV), (1.7*Ang, -3.5*eV), (1.8*Ang, -3.5*eV), (1.9*Ang, -3.5*eV), (2.0*Ang, -3.5*eV), (2.1*Ang, -3.5*eV), (2.2*Ang, 0.0*eV)], h_as_sps = [(0.5*Ang, 4.5*eV), (1.0*Ang, 4.5*eV), (1.25*Ang, 4.5*eV), (1.5*Ang, 4.5*eV), (1.6*Ang, 4.5*eV), (1.7*Ang, 4.5*eV), (1.8*Ang, 4.5*eV), (1.9*Ang, 4.5*eV), (2.0*Ang, 4.5*eV), (2.1*Ang, 4.5*eV), (2.2*Ang, 0.0*eV)], h_in_sps = [(0.5*Ang, 4.5*eV), (1.0*Ang, 4.5*eV), (1.25*Ang, 4.5*eV), (1.5*Ang, 4.5*eV), (1.6*Ang, 4.5*eV), (1.7*Ang, 4.5*eV), (1.8*Ang, 4.5*eV), (1.9*Ang, 4.5*eV), (2.0*Ang, 4.5*eV), (2.1*Ang, 4.5*eV), (2.2*Ang, 0.0*eV)], )
此脚本包含两个部分的内容。第一部分将与As连接的氢的电荷修改为0.75,而与 In 连接的氢电荷修改为1.25。第二部分则定义了Slater-Koster基组和氢钝化的参数,以去除带隙中的悬挂键能级。
将脚本保存,并提交到 Job Manager进行计算。
在主窗口中选中结果文件InAs_5nm.nc
,在LabFloor中找到 DOS 和 Bandstructure 数据对象。作出 DOS 和 Bandstructure 图以确定带隙。
用如下脚本可以得到带隙的精确值 0.759 eV。
bandstructure = nlread("InAs_5nm.nc", Bandstructure)[-1] print bandstructure._directBandGap().inUnitsOf(eV)
由于二维 InAs 体系的带隙大于 0 K 下块体 InAs的带隙(0.415 eV),可以想见此此体系的电子亲和能也与干净的(110)表面(4.55 eV)不同。
在这一节中,我们这样计算未掺杂的半导体的电子亲和能($E_{aff}$),即导带底($CBM$)与真空能级($E_{vac}$)的能量差。 使用之前的Bassani基组时,这两个能量无法直接关联起来,因此,我们可以使用DFT方法(如MGGA泛函)来计算。
首先,我们将MGGA计算的带隙拟合到我们本教程采用Slater-Koster得到的带隙。详细方法参见【MetaGGA 与二维受限 InAs】。
用 S-K 方法和Bassani基组计算得到的 InAs 块体带隙为 0.54 eV,MGGA TB09需要的拟合参数 c 值则为0.98614。在接下来本教程的MGGA计算中将一直采用这个数值:
#---------------------------------------- # Exchange-Correlation #---------------------------------------- exchange_correlation = MGGA.TB09LDA(c=0.98614)
注意:增加自旋-轨道耦合可以进一步改善带隙计算的精度,然而,要小心计算量将大大增加。此处仅计算非极化的自旋态。
下一步是用MGGA计算片层(slab)模型的电子能带结构以及真空能级。计算将使用之前已经计算过的二维片层,此结构后面将用于电极构建。
将 InAs_5nm.nc
文件中的 bulk configuration 发送到 Scripter, 这样之前对氢原子进行的掺杂等信息都将得到保留。
由于 A 方向设置了 Dirichlet 边界条件,因此真空处真空能级为零。我们可以使用 1D Projector来将 A 方向的 HartreeDifferencePotential 的平均值作图,并分析片层外部的电势衰减。
从能带结构图中,我们可以获得能带边缘相对于费米能级($E_F$)的数值。$CBM=0.325eV$,$VBM_0=-0.372eV$,因此带隙约为 0.697eV。
最后,从费米能级的值(相对于Hartree Difference Potential中的零点)和能带边缘的位置可以计算电子亲和能。费米能级的数值可以直接从 Chemical Potential 中读取: $$ E_F=-5.41eV, CBM=E_F + CBM_0 = -5.41 + 0.325 = -5.085eV $$
这个二维片层模型的电子亲和能为 5.09 eV,比 InAs(110) 方向的电子亲和能高出 0.5 eV。
器件模型建立自 5nm 厚的片层模型。打开 Builder,导入 InAs_5nm.py
结构。
注意:如果有原子位于单胞外面,将导致电极模型错误。因此我们需要移动结构,使得所有原子都位于晶胞内部。
为此,使用 Coordinate Tools
→ Translate
,选中 fractional coordinates,使用 0,0,-0.15 矢量平移。这将使下一步 wrap 原子时所有氢原子都移到单胞中间。
打开 Bulk Tools
→ Wrap
,点击 Apply。所有原子都进入晶胞。
最后,打开 Bulk Tools
→ Center
,点击 Apply,将结构置于单胞中央。
我们要创建一个 60 nm 长的器件,因此这个结构要在 C 方向重复 100 次。打开 Bulk Tools
→ Repeat
,设置 A=1,B=1,C=100,点击 Apply。
接下来我们在两侧设置 1 nm 厚的介电绝缘层,并在中间设置双栅极。
打开 Miscellaneous
→ Spatial Region…
:
最后,将结构转变成器件模型:打开 Device Tools
→ Device from Bulk…
,使用默认设置即可。
接下来是在电极区域也添加绝缘的介电层,这个操作目前无法在图形界面上实现,因此需要使用 Editor 修改脚本。
首先,将以下脚本放入左电极定义之后:
# Add dielectric region dielectric_region_0 = BoxRegion( 3.9, xmin = 3.0*Ang, xmax = 13.0*Ang, ymin = 0.0*Ang, ymax = 4.28387*Ang, zmin = 0.0*Ang, zmax = 6.0583*Ang, ) dielectric_region_1 = BoxRegion( 3.9, xmin = 67.0*Ang, xmax = 77.0*Ang, ymin = 0.0*Ang, ymax = 4.28387*Ang, zmin = 0.0*Ang, zmax = 6.0583*Ang, ) dielectric_regions = [dielectric_region_0, dielectric_region_1] left_electrode.setDielectricRegions(dielectric_regions)
再在右电极定义之后加入下面脚本:
# Add dielectric region right_electrode.setDielectricRegions(dielectric_regions)
将脚本发回到Builder,现在结构看上去如下图。
在新版的 VNL 中,掺杂变得十分容易,可以直接在图形界面上实现。
为此,我们先选定左侧三分之一区域的原子(与左电极)设置掺杂为 p 型,浓度 $10^{19}$;右侧设置为 n 型,浓度 $10^{19}$。
Selection Tools
→ By Expression
,输入“c<0.33”,按回车键(注意观察选定原子的情况);Miscellaneous
→Doping
,添加一个新的掺杂区域,并设为p型,浓度为默认$10^{19}$;Selection Tools
→ By Expression
,输入“c>0.66”,按回车键(注意观察选定原子的情况);(设置 underlap 结构时,输入“c>0.833”)Miscellaneous
→Doping
,添加一个新的掺杂区域,并设为n型,浓度为默认$10^{19}$。接下来,将结构发送到 Script Generator 来设置计算。