用户工具

站点工具

本页面的其他翻译:
  • zh

atk:硅p-n结

硅 p-n 结

在这篇教程里,你将会学习到:

  • 如何构建一个 p-n 器件。
  • 如何分析器件的电流-电压特性曲线。
  • 比较 ATK-SEATK-DFT 两种方法的差异。
  • 通过计算、绘制器件在正向、反向偏压下的器件态密度(DDOS),分析器件的电子性质。

提示

本教程使用特定版本的QuantumATK创建,因此涉及的截图和脚本参数可能与您实际使用的版本略有区别,请在学习时务必注意。

硅晶胞:Slater-Koster 和 MGGA

  • 打开 VNL,点击 Create New 创建一个新的项目。为项目给一个 Title(这里起名为:“Silicon”),为项目选定一个文件夹,点击 OK,然后点 Open 打开这个项目。

  • 在 VNL 主窗口,点击 Builder 图标,打开 Builder 窗口。

  • Builder 窗口里,在 Stash 面板处,点击 Add ‣ From Database,在弹出的 Database 窗口中,点击 Databases ‣ Crystals,在搜索窗口输入 “silicon”。然后,选择 “Silicon (alpha)”,点击【加号】图标,或者双击它所在列表中的位置,将其添加至 Stash 面板。

Slater-Koster 计算

接下来,我们首先使用半经验的方法(ATK-SE)计算,哈密顿量由 Slater-Koster 模型给出。

  • 使用右下角箭头图标,将晶体结构从 Builder 窗口发送到 Script Generator 窗口.

  • Script Generator 窗口中,双击 Blocks 面板中的 New Calculator,以及 Analysis ‣ Bandstructure,添加New Calculator 以及 Bandstructure

  • 双击 New Calculator 图标,打开 New Calculator 窗口。
    • 在 Calculators 中选择ATK-SE:Slater-Koster
    • k点设置为 25×25×25;
    • 不勾 “No SCF iteration”;
    • 选择 “Bassani.Si”基组。

  • Bandstructure 中,布里渊区高对称点设置为“L,G,X,U,K,G”,每条能带设置401个点。

  • 回到 Script Generator 窗口,设置输出文件 “bulk_SK.nc”,然后用右下角箭头图标发送脚本至 Job Manager

  • 在弹出的窗口中保存脚本,点击【运行】按钮运行计算。

  • 一旦计算结束(通常只需要几十秒钟),就可以在 LabFloor 中找到保存在 “bulk_SK.nc” 中的 Bandstructure 能带图标。单击选中图标,通过单击左侧 Bandstructure Analyzer 绘制能带。

  • 通过放大导带低和价带顶区域,精确计算出带隙:1.186eV。

DFT-MGGA 计算

ATK-DFT中的TB09 MGGA近似[参考文献:aTB09],已经在Meta-GGA 和二维受限的砷化铟教程中详细介绍。为了对比Slater-Koster与MGGA结果的差异,我们将会拟合参数c,使得MGGA的带隙可以和Slater-Koster相匹配。在本教程中,我们将会使用这个拟合参数 c 进行 MGGA 计算。

  • Builder窗口中,将硅单晶结构发送至Script Generator窗口,添加New Calculator,设置如下参数:
    • 选择ATK-DFTMGGA交换关联势。
    • K点设置:25x25x25。
    • 选择SingleZetaPolarized 基组,可以加快计算速度。

  • 添加 Bandstructure,其设置参数与 Slater-Koster 计算相同。
  • 在 Script Generator 窗口中,将输出文件保存成:“MGGA_bulk.nc”。
  • 为了匹配 Slater-Koster 计算结果,我们需拟合参数c,这需要进行几步计算。此处我们取c=0.9,1.0,1.1,1.2,分别进行MGGA计算。需要修改计算脚本:
    • 利用【发送】按钮发送脚本至【Editor】Editor窗口,如图修改交换关联势部分。在python脚本中,添加一个对c值的循环(在此处下载修改后的脚本:bulk_mgga.zip):

  • 发送脚本至Job Manager窗口,然后运行脚本。
  • LabFloor界面,我们将会从MGGA_bulk.nc文件中得到四个不同的能带结果。

  • 我们用利用bandstructure_fit.py脚本拟合c参数,保存脚本至项目目录。
  • Job Manager窗口运行脚本,结果如图所示。

从图中可以看出,TB09-c参数对能带计算具有重要影响,并且可以看出,影响是线性的。从脚本输出可知,最佳的c值是1.048.

说明

如果仔细看“Bandstructure_fit.py”脚本,将会看到能带计算部分由下面提供:

bandstructure = nlread("file.nc", Bandstructure)[0]
gap_direct   = bandstructure._directBandGap().inUnitsOf(eV)
gap_indirect = bandstructure._indirectBandGap().inUnitsOf(eV)
print "direct gap:   %.2f eV" % gap_direct
print "indirect gap: %.2f eV" % gap_indirect

硅单晶器件

现在,我们构造一个硅单晶器件。

  • 打开【Builder】Builder窗口,在Stash面板中双击打开Silicon(alpha),然后构造一个(100)切面的硅单晶:
    • 点开左侧侧边栏的Builders中的Surface(Cleave).
    • Surface(Cleave)窗口,选择[1,0,0]密勒指数,点击“Next”.

  • 使用默认的1×1表面晶胞,然后点击“Next”.

  • 层数选择52层,然后点击“Finish”.

说明

这52层晶胞将构成中心区域。由于硅半导体较长的屏蔽层,器件需要足够长(14nm),详细解释参见Doping in QuantumATK: the Ni silicide - Si interfaces. 从下面的结果可以看出,这个器件仍旧不够长,但是,为了能较快的用MGGA计算,我们在本教程中选择用52层器件。

  • 现在我们已经构建了一个Si(100)结构,然后我们将会用这个结构构建一个沿(100)方向输运的器件。点开Device Tools ‣ Device From Bulk,使用默认参数,仅点击“OK”。

  • 为了方便,我们将区域内的原子标记为被掺杂的p型和n型。
    • Stash面板中,双击器件结构,点开右侧Selection Tools ‣ By Expression.
    • 输入c<0.5,然后回车,这样我们就选中了所有的左侧原子
    • 通过Selection Tools ‣ Tags,标记选中的原子为“p_doping”.
    • 然后,依样选中c>0.5的原子,并标记为“n_doping”.

Slater-Koster IV曲线

接下来,我们将会学习如何利用 Slater-Koster 模型计算p-n硅单晶器件的 IV 特性曲线。

  • 将结构发送至 Script Generator 窗口。
  • 添加 New Calculator,并设置参数:
    • 选择 ATK-SE Slater-Koster 计算
    • K点选择7x7x100
    • 选择 Bassani.Si 基组,不勾选 “No SCF iteration
  • 同时,我们添加以下几个计算内容:
    • ElectronDensity
    • DeviceDensityofStates
    • ElectrostaticDifferencePotentials
    • IVCurve
  • 修改 DeviceDensityofStates参数:
    • 加大k点取值,取 21×21。
    • 能量范围为 -2 到 2 eV,取401个点。
  • 修改 IVCurve
    • 偏压范围:-1 V 到 1 V,取 21 个点。
    • 能量范围为-1.1 eV 到1.1 eV,取 401 个点。
    • K点取 21×21。
  • 将输出文件设置为 IV_2e19_SK.nc

掺杂硅分子结

我们需要设置合适的掺杂以获得一个p-n结。为此,我们将脚本发送至 Editor 窗口,找到脚本中定义结构的部分:

device_configuration = DeviceConfiguration(
central_region,
[left_electrode, right_electrode]
)

在这部分之前,添加一下内容,使之获得一个掺杂浓度为 2×1019 cm-3 的 p-n 结:

# -------------------------------------------------------------
# Add Doping
# -------------------------------------------------------------
doping_density = 2e+19
# Calculate the volume  and convert it to cm^-3
# Note: right and left electrodes have the same volume,
volume = right_electrode_lattice.unitCellVolume()
volume = float(volume/(0.01*Meter)**3)
# Calculate charge per atom
doping = doping_density * volume / len(right_electrode_elements)
# Add p- and n-type doping to the central region
external_potential = AtomicCompensationCharge([
     ('p_doping', -1*doping), ('n_doping',doping)
     ])
central_region.setExternalPotential(external_potential)
# Add doping to left and right electrodes
left_electrode.setExternalPotential(
   AtomicCompensationCharge([(Silicon, -1*doping)]))
right_electrode.setExternalPotential(
   AtomicCompensationCharge([(Silicon, doping)]))

运行计算

发送脚本至 Job Manager,运行计算。

通过脚本中的分析,以及在 Job Manager 中多线程并行计算,对于零偏压部分的计算,将会花费几分钟,而对于整个IV曲线的计算则需要几个小时。在 2014版中,利用不同方法和计算透射谱所花的时间与并行数的关系如图所示。

说明

这个计算是运行在 Intel e5472 3.0 GHz 的机器上,图中用单点描述的是 13.8 版,调用12个进程的结果。整体来看,2014版 比13.8版有 25%~30% 的速度提升。 计算详细参数:零偏压,对于 SCF 采用 7x7x100 的k点,透射计算则取 21×21。其他所有参数均按照本教程设置。 可以看出对于 post-SCF 计算和透射谱计算,Slater-Koster 方法效率远大于其他方法。

DFT-MGGA 电流曲线

当 Slater-Koster 计算运行时,我们可以设置 DFT-MGGA 计算。回到 Script Generator 窗口,修改 Calculator 部分:

  • 选择 ATK-DFT
  • 交换关联势为 MGGA
  • SingleZetaPolarized 基组

移除除了 IVCurve 外的所有分析项,然后设置器件掺杂。并提交运算。

结果分析

电流电压曲线

一旦两个计算结束,在项目文件夹中,我们会在nc文件中看到两个 IVCurve 项,图标为

  • 选中其中一个 IVCurve,并用 IV-Plot 插件,绘制电流曲线。如果勾选 Addititonal plots 选项,我们将会看到 dI/dV,透射谱,谱电流几个部分。

  • 为了对比 Slater-KosterMGGA 两种计算的电流曲线,下载这个脚本:iv_compare.zip 至项目文件夹下,并发送至 Job Manager 窗口运行,我们将会得到两条电流曲线的对比图。我们也可以在 Editor 中编辑这个脚本,调整合适的参数以得到合适的数据图。

注意

从图中可以看出,Slater-Koster 方法和 DFT-MGGA 方法计算结果几乎是一样的。

器件态密度

下图是p-n结电子态示意图,图中画出了势能沿输运方向随坐标的变化。 图片来自:http://wanda.fiu.edu/teaching/courses/Modern_lab_manual/pn_junction.html

通过 VNLQuantumATK 中的 DeviceDensityOfStates 或者 LocalDensityOfStates,可以很容易的绘制这幅图。

注意

在这,我们可以通过分析DDOS,绘制出势能沿输运方向的势能图,从此处下载脚本ddos_edp.zip

为了能正常运行脚本,nc文件中必须包含以下几个内容:DeviceConfiguration, Device DensityOfStatesElectrostaticDifferencePotential。我们可以通过 Editor 窗口自定义脚本。

特别注意,ddos_edp.py 脚本需要读取以下内容:

  • DeviceConfiguration:用来确定器件方向的空间尺寸和分辨率,定义DDOS在空间中的投影,同时电压也是由此对象读取。
  • DeviceDensityOfStates:除了读取和绘制器件态密度投影,这部分数据同样用来提取左电极的能带边缘。这些信息将会输出用于对齐并绘制差别静电势。
  • ElectrostaticDifferencePotential:绘制沿器件的平均差别电势。

为了获取 DDOS,在终端运行:

atkpython ddos_edp.py IV_2e19_SK.nc

其中IV_2e19_SK.nc文件,包含上述所有的计算内容。同样可以为有限偏压绘制电势图,详见下一部分。结果如下:

有限偏压计算

为了计算有限偏压(V=-1V~1V),作如下设置:

  • 转到Labfloor,在 ivcurve_selftconsistent_configuration.nc 文件中,选择偏压为 -1V 的器件结构,将其拖拽至Script 窗口。

  • 移除 New Calculator,并添加 Analysis from files
  • Analysis from files 中,设置 NetCDF 文件和 Object id

  • 添加 ElectronDensity,  DeviceDensityOfStatesElectrostaticDifferencePotential,设置参数如上所述。
  • 将输出文件设置为Analysis_ivcurve_10.nc
  • 在运行脚本之前,将脚本发送至 Editor 窗口,添加下面一行,以从 Analysis_ivcurve_10.nc 读取 device_configuration 文件。
# -------------------------------------------------------------
# Analysis from File
# -------------------------------------------------------------
device_configuration = nlread('ivcurve_selfconsistent_configurations.nc', object_id='ivcurve010')[0]
  • 在此之后、ElectronDensity 之前,添加一行:
nlsave('ivcurve_selfconsistent_configurations.nc', device_configuration)
  • 最后,运行脚本。等到计算结束,运行 ddos_edp.py,以获得器件态密度图。运行 ddos_edp.py 命令如下:
atkpython ddos_edp.py Analysis_ivcurve_10.nc

按照相同的步骤,可以在 ivcurve_selftconsistent_configuration.nc 文件中绘制其他偏压的 DDOS。

静电势

  • Labfloor 中,选择偏压为 0V,-1V,1V 的 ElectrostaticDifferencePotential 。

  • 1D Projector 绘制数据。

从图中可以看到,结果显示电势相对于器件长度来说并未“收敛”,这主要体现在在器件中心区域的两端静电势的梯度并未过渡到零。下图比较了不同长度器件(一个是本教程中的长度,一个要比本教程的长度更长)的 ElectrostaticDifferencePotential

参考

  • [aTB09] Fabien Tran and Peter Blaha. Accurate band gaps of semiconductors and insulators with a semilocal exchange-correlation potential. Phys. Rev. Lett., 102:226401, 2009. doi:10.1103/PhysRevLett.102.226401.
  • 英文原文:英文(全文翻译:闫强)。
atk/硅p-n结.txt · 最后更改: 2019/04/20 10:31 由 dong.dong

© 2014-2022 费米科技(京ICP备14023855号