本教程的目的是向您展示如何用 ATK-SemiEmpirical 程序包计算纳米级晶体管器件的电性质。您将计算得到像电子透射谱,电导,I-V曲线和电子热导等物理量。
本教程使用特定版本的QuantumATK创建,因此涉及的截图和脚本参数可能与您实际使用的版本略有区别,请在学习时务必注意。
具有栅极和电介质绝缘层的石墨烯纳米带器件
本教程中考虑到的器件系统由位于电介质顶部且被金属栅极控制的 z 形石墨烯纳米带组成,如下所示。它形成了一个金属-半导体-金属结。通过在中心区域上施加栅极电位,系统可以用作场效应晶体管(FET)。
这是一个较高级的教程,如果您没有使用 QuantumATK 平台(QuantumATK 和 ATK)的经验,请参考 Getting started 教程。
本教程假设您已经构建了如下所述的小型纳米带晶体管:Small nanoribbon transistor。如果还没有,请在继续本教程之前构建好结构。
图 66 本教程中考虑到的器件系统由位于电介质顶部且被金属栅极控制的 z 形石墨烯纳米带组成。等高线图说明了静电势穿过系统。
该器件如上图所示。它由三个区域组成:一个中心区域和两个电极。您将计算此系统的以下性质。
创建一个新的 QuantumATK 项目,并添加已构建好的纳米带器件。
打开 Builder,点击 Add From Files 找到已保存的 device_configuration
(为 QuantumATK Python 或 NetCF 的格式),将其添加到 Stash。
打开计算器模块,编辑以下设置:
下一步,为计算更改基组以使用特别优化的参数描述碳结构 [vCS00]。因此,进入 Huckel basis set 的菜单,选择 Cerda.Carbon [Graphite] 和 Hoffmann.Hydrogen 基组。
所选每个基组的真空水平为默认,因此尽管碳和氢适用于不同的参考系统,它们的参数也可以一起使用。
当您的器件具有金属栅极时,沿着垂直于 C 的非周期方向使用 Neumann 边界条件是很重要的。为什么呢?
Neumann 边界条件强制要求静电势的导数在该边界上应为零。换句话说,静电势应该在边界处是恒定的(但可以是任何值)。这是当器件具有金属栅极时合适的边界条件!
您现在已经完成了计算设置。将脚本保存为 z-a-z-6-6.py
放置在项目路径。
发送脚本到 Job Manager,点击 按钮,执行计算。您将会被要求再次保存脚本。点击 启动作业。取决于您的电脑,该计算将耗时 5 至 15 分钟。
计算过程中实际发生了什么?
作业将首先对每个电极执行自洽计算。然后将自洽电极 Hartree 势用于器件中心区域自洽计算的边界条件。最后,计算结构的透射光谱和其他分析对象。
如果您不小心关闭了 Scripter 窗口,甚至是 QuantumATK 主窗口,您所做的工作也不会丢失!只需将保存的 Python 脚本拖放到 Scripter 上即可打开它进行编辑。同样地,您可以直接将任何已保存的脚本发送到 Job Manager。
切换到 QuantumATK 的主窗口,您将注意到 NetCDF 文件 z-a-z-6-6.nc
已生成。文件的目录也已展示在 LabFloor。它包含 DeviceConfiguration 和要求的其他分析项。
选择 TransmissionSpectrum 数据块,使用 2D Plot 插件可视化计算得到的透射光谱。
透射光谱在能量范围 [-0.5,1.5] eV中有一个低值,对应于具有中心半导电扶手椅边缘带带隙的能量窗。电极费米能级的非对称位置相对于能带边缘,即中心区域的价带边缘朝向电极费米能级的偏移是因为施加了 -1 V 的栅极电位。
为了将栅极电势的影响可视化,选择 ElectrostaticDifferencePotential 数据块,点击 Viewer 插件,从弹出来的对话框中选择 Contour Plot(等值线图)。
为了使绘图更加有趣,通过将 LabFloor 中的 DeviceConfiguration 放入 Viewe r 打开的场景中以添加石墨烯结的 3D 渲染。然后旋转等值线图:
如果你希望导出等值线图的副本,在 Viewer 窗口中右键单击,选择 Export (或使用 Ctrl + E)。您可以选择导出为 PNG 或 JPG 图片格式。该图像现在存储在磁盘上,可用于您选择的任何其他第三方应用程序的进一步处理。
您现在将研究改变栅极电位的影响。在之前的章节中,栅极电位值固定为 -1 V。现在,您将在 [-2, 2] V 范围内更改电位,并计算每个栅极电位处的透射光谱。
对于每个栅极电位值,您都应执行一个新的自洽计算以获得相应的透射光谱。这样的循环可以通过以下 QuantumATK 脚本方便地实现。您可以在此处下载:↓ gate_loop.py。
1 #read in the old configuration 2 device_configuration = nlread("z-a-z-6-6.nc",DeviceConfiguration)[0] 3 calculator = device_configuration.calculator() 4 metallic_region0 = device_configuration.metallicRegions()[0] 5 # Define gate_voltages 6 gate_voltage_list=numpy.linspace(-2.0,2.0,17)*Volt 7 for gate_voltage in gate_voltage_list: 8 # set the gate potential 9 device_configuration.setMetallicRegions( 10 [metallic_region0(value = gate_voltage)] ) 11 # make a copy of the calculator and attach it to the configuration 12 # restart from the previous scf state 13 device_configuration.setCalculator(calculator(), 14 initial_state=device_configuration) 15 #Analysis 16 filename= 'gatescan-6-6.nc' 17 electron_density = ElectronDifferenceDensity(device_configuration) 18 nlsave(filename, electron_density,object_id='dens'+str(gate_voltage)) 19 electrostatic_potential = ElectrostaticDifferencePotential(device_configuration) 20 nlsave(filename, electrostatic_potential, object_id='pot'+str(gate_voltage)) 21 transmission_spectrum = TransmissionSpectrum( 22 configuration=device_configuration, 23 energies=numpy.linspace(-2,2,200)*eV, 24 ) 25 nlsave(filename, transmission_spectrum,object_id='trans'+str(gate_voltage)) 26 nlprint(transmission_spectrum)
该脚本实施了以下工作流程:
1.读取在上一节得到的自洽计算,以其作为计算的起点:
#read in the old configuration device_configuration = nlread("z-a-z-6-6.nc",DeviceConfiguration)[0] calculator = device_configuration.calculator() metallic_region0 = device_configuration.metallicRegions()[0]
2.设置一系列的栅极电压值 [-2.0, -1.75, …, 2.0]*Volt:
# Define gate_voltages gate_voltage_list=numpy.linspace(-2.0,2.0,17)*Volt
3.通过栅极电压列表循环,为每个值修改金属区域的栅极电压值:
for gate_voltage in gate_voltage_list: # set the gate potential device_configuration.setMetallicRegions( [metallic_region0(value = gate_voltage)] )
4.通过调用 calculator()
方法初始化器件构型的自洽状态。
# make a copy of the calculator and attach it to the configuration # restart from the previous scf state device_configuration.setCalculator(calculator(), initial_state=device_configuration)
此方法将使用相同的设置做一个先前 Huckel 计算器的副本。由于附加了一个新计算器,因此下次需要系统的性质时将自动执行自洽计算:
5.最后,计算与前一节相同的分析对象,并将它们保存到 NetCDF 文件中。请注意,对每个分析对象都指定了特定的 object_id。这样可以更轻松地从 NetCDF 文件中检索出正确的条目:
#Analysis filename= 'gatescan-6-6.nc' electron_density = ElectronDifferenceDensity(device_configuration) nlsave(filename, electron_density,object_id='dens'+str(gate_voltage)) electrostatic_potential = ElectrostaticDifferencePotential(device_configuration) nlsave(filename, electrostatic_potential, object_id='pot'+str(gate_voltage)) transmission_spectrum = TransmissionSpectrum( configuration=device_configuration, energies=numpy.linspace(-2,2,200)*eV, ) nlsave(filename, transmission_spectrum,object_id='trans'+str(gate_voltage)) nlprint(transmission_spectrum)
$ atkpython gatescan-6-6.py > gatescan-6-6.out
该脚本需要一段时间才能完成,因为需要进行 17 次自洽计算。总执行时间取决于您的硬件,可能在 2 到 8 小时之间。
上一节中,运行脚本生成了数据文件 gatescan-6-6.nc
。它应包含所有计算得到的透射光谱。尝试使用 Transmission Analyzer 检查它们,以研究透射光谱如何随栅极电位变化。
您将发现所有光谱看起来非常相似,并且不同光谱之间的主要差异是价带和导带边缘相对于费米能级的偏移。
这是金属栅极的主要功能:它可用于调整相对于费米能级的带边缘位置,从而控制器件的电性质!
现在,您将使用数据计算结的电导随不同电子温度对应的栅极电位函变化。使用以下脚本,是将前一节中使用的脚本做了略微修改。您也可以在这里下载:↓conductance_diff_gate.py。
1 #make list of relevant temperatures 2 temperature_list=numpy.linspace(0,2000,21)*Kelvin 3 #make list of relevant gate voltages 4 gate_voltage_list=numpy.linspace(-2.0,2.0,17)*Volt 5 #make list to hold the conductance calculations 6 conductance_list=numpy.zeros(len(gate_voltage_list)*len(temperature_list)) 7 conductance_list=conductance_list.reshape(len(gate_voltage_list), 8 len(temperature_list)) 9 #specify the filename for the netcdf data file 10 filename="gatescan-6-6.nc" 11 #loop through the gate voltages 12 for n in range(len(gate_voltage_list)): 13 transmission_spectrum=nlread(filename, 14 object_id="trans"+str(gate_voltage_list[n]))[0] 15 #loop through the temperature list 16 for i in range(len(temperature_list)): 17 conductance_list[n,i]=transmission_spectrum.conductance( 18 electrode_temperatures=(temperature_list[i],temperature_list[i])) 19 #plot the conductance as function of gatevoltage 20 import pylab 21 pylab.figure() 22 # make curve for each temperature 23 for i in range(len(temperature_list)): 24 pylab.semilogy(gate_voltage_list,conductance_list[:,i]) 25 pylab.xlabel("Gate Voltage (V)") 26 pylab.ylabel("Conductance (S)") 27 pylab.show()
该脚本生成以下图像:
图67 电导作为栅极电位的函数。不同的曲线代表在不同的电子温度下,即 0,100,200,……2000 K。
在大约栅极电位为 0.25 V 时,电导具有最小值。此时,费米能级位于中心带的价带和电导带之间的中间禁带。注意,电导对电子温度的依赖性很弱,这说明透射主要由电子隧道效应控制。
本教程在很大程度上依赖于对 TransmissionSpectrum 项的输入和输出脚本的访问。有关所有可用选项和方法的更多信息,请参阅 ATK Reference Manual。
另外请注意,我们使用 pylab 软件包生成图像。这可以通过 atkpython
轻易获得,并且用 Python 脚本绘图非常方便。
您刚刚看到不同栅极电位的透射光谱非常相似,主要区别在于带边缘相对于费米能级的偏移。这表明您可以避免自洽循环,只需严格地移动费米能级并使用线性响应理论计算所有透射光谱。
假设栅极电位的影响是透射光谱内电极费米能级的相对位置的简单偏移,以下脚本实现了电导的线性响应计算,且电导是栅极电位的函数。您可以在此处下载:↓linear_response.py。
1 #make list of relevant temperatures 2 temperature_list=numpy.linspace(0,2000,21)*Kelvin 3 #make list of relevant gate voltages 4 gate_voltage_list=numpy.linspace(-2.0,2.0,17)*Volt 5 #make list to hold the conductance calculations 6 conductance_list=numpy.zeros(len(gate_voltage_list)*len(temperature_list)) 7 conductance_list=conductance_list.reshape(len(gate_voltage_list), 8 len(temperature_list)) 9 #read the reference transmission spectrum from the netcdf data file 10 gate_potential_ref = 0.*Volt 11 transmission_spectrum = nlread("gatescan-6-6.nc", 12 object_id="trans"+str(gate_potential_ref))[0] 13 #loop through the gate voltages 14 for n in range(len(gate_voltage_list)): 15 #loop through the temperature list 16 for i in range(len(temperature_list)): 17 conductance_list[n,i]=transmission_spectrum.conductance( 18 electrode_temperatures=(temperature_list[i],temperature_list[i]), 19 electrode_voltages=(gate_voltage_list[n]-gate_potential_ref, 20 gate_voltage_list[n]-gate_potential_ref)) 21 #plot the conductance as function of gatevoltage 22 import pylab 23 pylab.figure() 24 # make curve for each temperature 25 for i in range(len(temperature_list)): 26 pylab.semilogy(gate_voltage_list,conductance_list[:,i]) 27 pylab.xlabel("Gate Voltage (V)") 28 pylab.ylabel("Conductance (S)") 29 pylab.show() 30
该脚本实施了一个非常简单的工作流程:
1.从 0 V 栅极电位的计算读取透射光谱:
#read the reference transmission spectrum from the netcdf data file gate_potential_ref = 0.*Volt transmission_spectrum = nlread("gatescan-6-6.nc", object_id="trans"+str(gate_potential_ref))[0]
2.取代设置栅极电位,而是改变电极电压,使电极费米能级相对于彼此移动:
electrode_voltages=(gate_voltage_list[n]-gate_potential_ref, gate_voltage_list[n]-gate_potential_ref))
该脚本生成下图。我们可以看到完全自洽计算的主要趋势是由线性响应程序重制的。
图68 采用线性响应计算得到的电导作为栅极电位的函数。不同曲线对应着电子温度0,100,200,……,2000 K。
现在,您将研究在 0-2 V 范围内更改穿过电极的外部偏压而产生的影响。计算遵循与前一节中栅极电位扫描类似的程序。
采用以下显示的脚本,您可以在此处下载:↓electrode_loop.py。
1 # Read in the old configuration 2 device_configuration = nlread("z-a-z-6-6.nc",DeviceConfiguration)[0] 3 calculator = device_configuration.calculator() 4 # Output filename 5 filename = 'ivscan-6-6.nc' 6 # Define bias voltages 7 voltage_list=numpy.linspace(0.0,2.0,9)*Volt 8 for voltage in voltage_list: 9 # Set new calculator with modified electrode voltages on the configuration 10 # use the self consistent state of the old calculation as starting input. 11 device_configuration.setCalculator( 12 calculator(electrode_voltages=(-0.5*voltage,0.5*voltage)), 13 initial_state=device_configuration) 14 #Analysis 15 electron_density = ElectronDifferenceDensity(device_configuration) 16 nlsave(filename, electron_density, object_id='dens'+str(voltage)) 17 electrostatic_potential = ElectrostaticDifferencePotential(device_configuration) 18 nlsave(filename, electrostatic_potential, object_id='pot'+str(voltage)) 19 transmission_spectrum = TransmissionSpectrum( 20 configuration=device_configuration, 21 energies=numpy.linspace(-2,2,200)*eV) 22 nlsave(filename, transmission_spectrum, object_id='trans'+str(voltage)) 23 nlprint(transmission_spectrum)
该计算以给栅极电位施加 -1 V 作为结计算的起点。栅极电位的值在整个计算中是固定的。通过 DeviceHuckelCalculator
的变量 electrode_voltages
修改电极电压。
整个计算所需的时间为单个零偏差计算的 10 倍以上。循环期间,结果将保存在文件 ivscan-6-6.nc
中。在计算期间可以检查该文件以关注计算进展。
下图显示了偏压为 1 V 时的静电电位,即左电极为 -0.5 V,右电极为 +0.5 V。注意左电极中的静电电位如何更接近栅极的静电电位。
图 69 对称地施加 1 V 偏压和栅极电位 -1 V 时结的静电电位
您可以利用 ivscan-6-6.nc
文件中整个 TransmissionSpectrum 数据块计算栅极电位为 -1 V 时的 I-V 曲线。采用以下结合了以上章节所展示方法的脚本。您也可以在此处下载:↓IV_curve.py。
1 #make list of relevant temperatures 2 temperature_list=numpy.linspace(0,2000,21)*Kelvin 3 #make list of relevant gate voltages 4 voltage_list=numpy.linspace(0.0,2.0,9)*Volt 5 #make list to hold the current calculations 6 current_list=numpy.zeros(len(voltage_list)*len(temperature_list)) 7 current_list=current_list.reshape(len(voltage_list),len(temperature_list)) 8 #specify the filename for the netcdf data file 9 filename="ivscan-6-6.nc" 10 #loop through the gate voltages 11 for n in range(len(voltage_list)): 12 transmission_spectrum=nlread(filename, object_id="trans"+str(voltage_list[n]))[0] 13 #loop through the temperature list 14 for i in range(len(temperature_list)): 15 current_list[n,i]=transmission_spectrum.current( 16 electrode_temperatures=(temperature_list[i],temperature_list[i])) 17 #plot the current as function of voltage 18 import pylab 19 pylab.figure() 20 # make curve for each temperature 21 for i in range(len(temperature_list)): 22 pylab.plot(voltage_list,current_list[:,i]) 23 pylab.xlabel("Bias (V)") 24 pylab.ylabel("Current (A)") 25 pylab.show()
计算结果如下图所示。
图 70 在施加 -1 V 栅极电位的纳米带结的自洽 I-V 特性。曲线分别对应于的电极温度为 0,100,200,……200 K。电流随温度增长而增长。
类似于前一节中介绍的栅极电位的线性响应,您可以使用线性响应近似来计算从零偏压谱起的有限偏压透射光谱。以下脚本执行的是电极温度为 300 K 时的线性响应电流计算:
1 #make list of relevant temperatures 2 temperature=300*Kelvin 3 #make list of relevant gate voltages 4 voltage_list=numpy.linspace(0.0,2.0,9)*Volt 5 #make list to hold the current calculations 6 current_list=numpy.zeros(len(voltage_list)) 7 current_list_lin=numpy.zeros(len(voltage_list)) 8 #read the reference transmission spectrum from the netcdf data file 9 potential_ref = 0.*Volt 10 filename="ivscan-6-6.nc" 11 transmission_spectrum0 = nlread(filename, object_id="trans"+str(potential_ref))[0] 12 for n in range(len(voltage_list)): 13 transmission_spectrum=nlread(filename, object_id="trans"+str(voltage_list[n]))[0] 14 current_list[n]=transmission_spectrum.current( 15 electrode_temperatures=(temperature,temperature)) 16 current_list_lin[n]=transmission_spectrum0.current( 17 electrode_temperatures=(temperature,temperature), 18 electrode_voltages=(-0.5*(voltage_list[n]-potential_ref), 19 0.5*(voltage_list[n]-potential_ref) ) ) 20 #plot the current as function of bias 21 import pylab 22 pylab.figure() 23 pylab.plot(voltage_list,current_list,label="self consistent") 24 pylab.plot(voltage_list,current_list_lin,label="linear response") 25 pylab.xlabel("Bias (V)") 26 pylab.ylabel("Current (A)") 27 pylab.legend(loc="lower left") 28 pylab.grid(True) 29 pylab.show()
下图将线性响应结果与自洽的结果进行比较。在较低偏压时结果非常一致,但在较大的偏压下,线性响应电流开始偏离自洽计算电流。
图 71 电极温度 300 K,比较施加 -1 V 栅极电位的结的自洽(蓝色)和线性响应(绿色) I-V 特性。
前面的章节说明了如何执行电流作为电极偏压或栅极电位函数的计算。尽管该方法是基于扩展的 Huckel 形式,但这种计算可能非常耗时,另一种方法是调用线性响应近似并使用比自洽计算快得多的非自洽计算。
然而,一个重要的问题出现了:何时可以使用线性响应而不是完全地自洽计算?您已经看到线性响应适用于相对较小的电极偏压,但对栅极电位的影响如何呢?
前面章节呈现的脚本可以通过简单地修改同时改变栅极电位和电极偏压。以下为自洽电流和线性响应电流的比较。对于较小的偏压和栅极电位,两者非常一致,说明线性响应电流是一个良好的第一近似值。
图72 在施加 0.2 V 电压下,电流作为栅极电位的函数。蓝色曲线从完全自洽计算中获得,而绿色曲线是使用含有零栅极电位和偏压系统的透射光谱从线性响应计算获得的。
图中可用于生成自洽数据的脚本可在此处下载:↓potentials_vary.py,↓electrode_0.2V_gate_varies.py。
一些其他可以在 QuantumATK 中操作的分析有
本教程中的分析主要部分都是采用 QuantumATK 脚本实现的。但是,很多案例中分析也可以从 QuantumATK GUI 直接操作。详情参见 ATK device tutorial。
在本节中,您将学习如何使用透射光谱计算器件的电导,且其为关于左右电极温度 $T_L$ 和 $T_R$ 的函数。当 $T_L=T_R=0$ 时,电导由费米能级处的传输系数决定,而对于有限电极温度,电导取决于费米能级周围能量窗口中的传输系数值。零偏压电导可由下式给出
$$ \sigma (T_L)=\frac{2e^2}{h}\int T(E) \; f^\prime (\eta(E)) \frac{dE}{k_bT_R}, $$
在这里,$f^\prime (\eta(E)) = f^\prime \left(\frac{E-E_F^L}{k_bT_R}\right)$ 为费米函数的导数 [vSrensenHP+09]。
在半导体中,电导通常由在导带或价带内传播的热电子或空穴决定,即所谓的热电子发射。热电子位于费米函数尾部的能量范围内。因此,为了精确计算来自热电子发射的电导,重要的是透射光谱的能量范围正是费米函数的尾部,可以被适当采样。前一节的透射光谱图显示中心区域的价带和导带边缘都在透射光谱的能量范围内。因此,根据该数据,您将能够准确地确定温度依赖的电导。
使用以下 QuantumATK 脚本可以计算并绘制温度依赖的电导图,此处下载:↓temperature_dependent.py。
1 # Read first transmission spectrum from file z-a-z-6-6.nc 2 transmission_spectrum = nlread("z-a-z-6-6.nc",TransmissionSpectrum)[0] 3 #make list of temperatures 4 temperature_list=numpy.linspace(0,2000,21)*Kelvin 5 #make list for holding conductance 6 conductance_list=numpy.zeros(len(temperature_list)) 7 #calculate the conductance for each temperature in the temperature list 8 for i in range(len(temperature_list)): 9 conductance_list[i]=transmission_spectrum.conductance( 10 electrode_temperatures=(temperature_list[i], temperature_list[i])) 11 #plot the conductance as function of temperature 12 import pylab 13 pylab.figure() 14 pylab.semilogy(temperature_list,conductance_list) 15 pylab.xlabel("Temperature (K)") 16 pylab.ylabel("Conductance (S)") 17 pylab.show()
该脚本读取先前计算的透射光谱,然后使用电导 conductance()
方法计算一系列电极温度的电导。保存脚本并使用 Job Manager 或终端开启运行。
$ atkpython temperature_dependent.py
您将会得到下图。
该器件的温度依赖电导对于场效应晶体管是典型的:作为温度函数的电导的初始降低与由电子隧穿在费米能级处产生的大电导有关。在较大的温度下,通常随温度增加的电导开始占主导地位。再下一节中,您将看到隧道效应在较长的器件中被抑制。
本节将采用较长的纳米带器件。创建所述构型方法:A longer nanoribbon transistor。
您现在将计算具有更长通道的纳米带晶体管的透射光谱,并将其温度依赖的电导与之前研究的较短系统进行比较。
在 Builder 中打开大晶体管构型,确认其如预期那样。下一步是设置分析电子电导所需的计算,其方法与在上一节中针对较短器件的概述完全相同。有两种方法可以做到这一点:
z-a-z-20-6.py
。z-a-z-6-6.py
中复制具体说明计算的部分,并将其嵌入 z-a-z-20-6.py
。
记得修改 NetCDF 输出文件名称为 z-a-z-20-6.nc
。
###################################################### # Calculator ######################################################
1 # Read first transmission spectra from fil z-a-z-6-6.nc and z-a-z-20-6.nc 2 transmission_spectrum6 = nlread("z-a-z-6-6.nc",TransmissionSpectrum)[0] 3 transmission_spectrum20 = nlread("z-a-z-20-6.nc",TransmissionSpectrum)[0] 4 #make list of temperatures 5 temperature_list=numpy.linspace(0,2000,21)*Kelvin 6 #make list for holding conductance 7 conductance_list6=numpy.zeros(len(temperature_list)) 8 conductance_list20=numpy.zeros(len(temperature_list)) 9 for i in range(len(temperature_list)): 10 conductance_list6[i]=transmission_spectrum6.conductance( 11 electrode_temperatures=(temperature_list[i],temperature_list[i]) ) 12 conductance_list20[i]=transmission_spectrum20.conductance( 13 electrode_temperatures=(temperature_list[i],temperature_list[i]) ) 14 #plot the conductance as function of temperature 15 import pylab 16 pylab.figure() 17 pylab.semilogy(temperature_list,conductance_list6,label="short junction") 18 pylab.semilogy(temperature_list,conductance_list20,label="long junction") 19 pylab.xlabel("Temperature (K)") 20 pylab.ylabel("Conductance (S)") 21 pylab.legend(loc="lower left") 22 pylab.grid(True) 23 pylab.show()
以下是计算结果。绿色曲线为较长结的结果。注意,电导随温度显著增加的情况表明主要的传输机制是热电子发射而不是电子隧穿。
图 73 较短(蓝色)和20单元长(绿色)石墨烯纳米带晶体管的电导作为电子温度的函数。
在之前的章节,您计算了结的电导。为了获得电流,通常有必要施加外部偏压。本节说明了如何通过两个处于不同温度的电极使驱动电流通过结成为可能。用于计算的 QuantumATK 脚本如下所示。您可在此处下载:↓ electrodes_diff_temperature.py。
1 # Read first transmission spectra from file z-a-z-6-6.nc and z-a-z-20-6.nc 2 transmission_spectrum6 = nlread("z-a-z-6-6.nc",TransmissionSpectrum)[0] 3 transmission_spectrum20 = nlread("z-a-z-20-6.nc",Transmission Spectrum)[0] 4 #make list of temperatures 5 temperature_list=numpy.linspace(0,2000,21)*Kelvin 6 #make list for holding current 7 current_list6=numpy.zeros(len(temperature_list)) 8 current_list20=numpy.zeros(len(temperature_list)) 9 #fix the temperature in the left electrode 10 temperature_left=300*Kelvin 11 for i in range(len(temperature_list)): 12 current_list6[i]=transmission_spectrum6.current( 13 electrode_temperatures=(temperature_left,temperature_list[i]) ) 14 current_list20[i]=transmission_spectrum20.current( 15 electrode_temperatures=(temperature_left,temperature_list[i]) ) 16 #plot the current as function of temperature in right electrode 17 import pylab 18 pylab.figure() 19 pylab.plot(temperature_list,current_list6,label="short junction") 20 pylab.plot(temperature_list,current_list20,label="long junction") 21 pylab.xlabel("Right Electrode Temperature (K)") 22 pylab.ylabel("Current (A)") 23 pylab.legend(loc="lower left") 24 pylab.grid(True) 25 pylab.show()
左电极的电子温度现在固定在 300 K,而右电极的温度在 0 到 2000 K之间变化。下图展示了计算结果。温度的变化对较长的结(绿色曲线)具有最强的影响。电流的正向是从左到右,因此电流从高温到低温。
图74 短的(蓝色)和20单元长(绿色)石墨烯结右电极的电流作为电子温度的函数。左电极的电子温度固定为 300 K。
如果您使用 Transmission Analyzer 绘制长结的透射光谱,将看到中心区域的价带最接近费米能级。因此,电荷传输主要由空穴传输决定。最高温度的电极具有最多的空穴且将被传播到另一个电极,从而在该方向上产生电流。