目录

碳纳米管导电结

在 QuantumATK 中实现 NEGF 输运模型的一个重要特性就是处理异构体系的能力,即两个电极的器件构型不同。这使其可以研究更广范围的重要体系如两种材料间的接触电阻(例如一种半导体/金属界面)或不同手性纳米管间的结电容。在本教程,您将学习如何设置这种结的几何结构。

提示

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

  • 不同版本的QuantumATK的py脚本可能不兼容;
  • 较新的版本输出的数据文件默认为hdf5;
  • 老版本的数据文件为nc文件,可以被新版本读取。

Builder 中涉及的步骤相当简单,但对于这种类型的几何结构,重要的是研究传输和其他性质如何根据两个管重叠的程度而变化。因此,您还将学习如何通过在脚本添加几行 Python 代码来改变重叠距离。

NEGF

您可以在此处找到 Non-Equilibrium Green’s Function 方法的简介:arXiv

注意

  • 碳纳米管(Carbon Nanotubes, CNTs):类型和性质

碳纳米管的原子结构由叫做手性指数的一组整数集 $(n,m)\in\mathbf{Z}^2$ 描述。若 $m=0$ 则碳纳米管为 zigzag 结构。其它特殊指数描述具有特别性质碳纳米管的情况如下:

  1. 若 $n=m$ 则 CNT 具有金属性(m)(椅型结构)。
  2. 若 $n\neq m$ 则 CNT 具有半导体特性(s)(手性结构)。
  3. 若 $n-m\in3\mathbf{Z}^*$ 则 CNT 具有半金属特性(sm)(手性结构)。
  • CNT 导电结的可能组合

注解 1:这里我们用垂直条表示连接:“|”。

注解 2:金属和半导体之间的连接也很有趣,尽管在那种情况下可能的相关结构是 m|s|m,而不是 m|s。

设置几何结构

首先,您需要设置两个管刚相互接触的参考结构,将其定义为两个管边缘上的原子具有相同 Z 坐标的情况是合理的。

CNT 导电结实例:手性指数为 (12, 12)|(5, 5) 的 m|m

以下说明适用于具有 (12, 12)|(5, 5) 结的m|m 案例,但所涉及到的步骤对于任何手性组合都是相同的。

提示

标注:为了稍后能将两个纳米管做区分,可以将(5, 5)管的所有原子添加标签,具体操作:首先选中所有原子(Ctrl + A),然后打开 Slelect Tags,给 (5, 5) 管的原子都加上 cnt55 的标签。

设置该原子的 Z 坐标为 0 Å,按下 Enter 键。关闭 Move 窗口退出 Move 工具,点击黑色的背景(或按下 Esc 键)取消选中所有原子。对(5, 5)管重复以上操作,只是这次选中最左侧边缘的原子(Z 坐标值最小)。

改变两管间的距离:手动方式

您现在有一个 d = 0 的构型,即该结构两管间的距离定义为 0。为改变两管间重叠的距离,原则上您可以执行以下步骤:

对所有您想研究的 d 值重复以上步骤。现在,如果您想浏览一些距离将会相当麻烦。因此,您可以做一个小的 Python 函数自动执行任务。这将在下一部分描述。

利用一个 Python 函数改变重叠距离

安全起见,保存 d = 0 时构型的副本作为 Python 脚本。利用 Builder 右下角的 Send To 按钮()将结构从 Builder 发送到 Editor 。滚动至脚本的底端,在脚本的最下面嵌入以下代码。

 1   # ---------------------------------------------------------------------------- 
 2   def moveTube(device_configuration, d=0.0):
 3       # d is assumed to be in Angstrom
 4       # Extract the central region from the device configuration
 5       central_region = device_configuration.centralRegion()
 6  
 7       # Number of atoms
 8       N = len(central_region.cartesianCoordinates())
 9       # Which atoms are in the right tube? Those with tag="2"
10       right_tube = device_configuration.indicesFromTags("2")
11  
12       # Set a Z shift of d for these atoms, and zero for others
13       delta = numpy.zeros(N)
14       delta.put(indices=right_tube, values=d)
15       Delta = numpy.array([numpy.zeros(N),numpy.zeros(N),delta]).transpose()
16       # Shift coordinates!
17       new_coordinates = central_region.cartesianCoordinates() + Delta*Angstrom
18       # Extend (or contract) the unit cell by the same amount
19       va, vb, vc = central_region.bravaisLattice().primitiveVectors()
20       vc = vc + [0.0, 0.0, d]*Angstrom
21       new_cell = UnitCell(va,vb,vc)
22       # Rebuild central region (transfer ghost atoms too)
23       new_central_region = BulkConfiguration(
24           bravais_lattice=new_cell,
25           elements=central_region.elements(),
26           cartesian_coordinates=new_coordinates,
27           ghost_atoms = central_region.ghostAtoms(),
28       )
29  
30       # Transfer the tags to the new configuration
31       for tag in central_region.tags():
32           new_central_region.addTags(tag, central_region.indicesFromTags(tag))
33  
34       # "Device from bulk" the scripting way
35       from NL.CommonConcepts.Configurations.DeviceFromBulk import deviceFromBulk
36       left_electrode, right_electrode = device_configuration.electrodes()
37       left_electrode_length = left_electrode.bravaisLattice().primitiveVectors()[2,2]
38       right_electrode_length = left_electrode.bravaisLattice().primitiveVectors()[2,2]
39       new_device = deviceFromBulk(left_electrode_length, right_electrode_length,
40                                    new_central_region
41                    )
42  
43       return new_device
44  # ---------------------------------------------------------------------------- 
45  d = -5.0
46  device_configuration = moveTube(device_configuration, d)

如果您想理解这段代码的工作原理,可以研究下提供的非常详细的解释的注释。否则,你真正需要知道的就是通过改变倒数第二行的“d”值(单位假定设为 Å),右管移入(d 值为负)或移出(d 值为正)左管。

提示

为观察操作结果,再次使用 按钮将脚本发送回 Builder。因为电极和中心区域也被识别为脚本中存在的有效构型,这将添加不少于四种构型到 Stash 区。如果您替代地将脚本发送到 Script Generator ,则只会有一个构型被传输。

注释:

参考