两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 |
atk:碳纳米管导电结 [2018/08/13 21:17] – [设置几何结构] xie.congwei | atk:碳纳米管导电结 [2019/06/29 15:44] (当前版本) – dong.dong |
---|
====== 碳纳米管导电结====== | ====== 碳纳米管导电结====== |
| |
^在 QuantumATK 中实现 NEGF 输运模型的一个重要特性就是处理异构体系的能力,即两个电极的器件构型不同。这使其可以研究更广范围的重要体系如两种材料间的接触电阻(例如一种半导体/金属界面)或不同手性纳米管间的结电容。在本教程,您将学习如何设置这种结的几何结构。 ^ {{ :atk:intro-20180813.png?200 }} ^ | 在 QuantumATK 中实现 NEGF 输运模型的一个重要特性就是处理异构体系的能力,即两个电极的器件构型不同。这使其可以研究更广范围的重要体系如两种材料间的接触电阻(例如一种半导体/金属界面)或不同手性纳米管间的结电容。在本教程,您将学习如何设置这种结的几何结构。 {{ :atk:intro-20180813.png?180 }} |
| |
| |
| <WRAP center info 100%> |
| === 提示 === |
| **本教程使用特定版本的QuantumATK创建,因此涉及的截图和脚本参数可能与您实际使用的版本略有区别,请在学习时务必注意。** |
| * 不同版本的QuantumATK的py脚本可能不兼容; |
| * 较新的版本输出的数据文件默认为hdf5; |
| * 老版本的数据文件为nc文件,可以被新版本读取。 |
| </WRAP> |
| |
| |
* **第 2 步**:由于 CNT 非常薄,增加它的长度会更好些。选择 Boolk {{:atk:arrow.png?direct&5|}} Repeat 工具,输入 C = 10 将结构扩大至 10 倍。 | * **第 2 步**:由于 CNT 非常薄,增加它的长度会更好些。选择 Boolk {{:atk:arrow.png?direct&5|}} Repeat 工具,输入 C = 10 将结构扩大至 10 倍。 |
| |
{{ :atk:snap31-20180813.png?800}} | {{ :atk:snap31-20180813.png |}} |
| * **第 3 步**:为了创建(n, m)=(5, 5)的第二个 CNT,只需重复前面的步骤并在 Nanotube 插件中输入 N = 5 和 M = 5。此次我们也选择设置与第一个 CNT 相同的长度,同样地我们重复该结构十次。最后,在 Builder 的 **Stash** 上您将有两个相等长度的 CNT (手性指数分别和(12, 12)和(5, 5)) |
* **第 3 步**:为了创建(n, m)=(5, 5)的第二个 CNT,只需重复前面的步骤并在 Nanotube 插件中输入 N = 5 和 M = 5。此次我们也选择设置与第一个 CNT 相同的长度,同样地我们重复该结构十次。最后,在 Builder 的 **Stash** 上您将有两个相等长度的 CNT (手性指数分别和(12, 12)和(5, 5)) | |
| |
<WRAP center tip 100%> | <WRAP center tip 100%> |
| |
对所有您想研究的 d 值重复以上步骤。现在,如果您想浏览一些距离将会相当麻烦。因此,您可以做一个小的 Python 函数自动执行任务。这将在下一部分描述。 | 对所有您想研究的 d 值重复以上步骤。现在,如果您想浏览一些距离将会相当麻烦。因此,您可以做一个小的 Python 函数自动执行任务。这将在下一部分描述。 |
| |
| **利用一个 Python 函数改变重叠距离** |
| |
| 安全起见,保存 d = 0 时构型的副本作为 Python 脚本。利用 Builder 右下角的 **Send To** 按钮({{:atk:sendto.png?direct&20|}})将结构从 Builder {{:atk:builder.png?direct&25|}} 发送到 Editor {{:atk:editor.png?direct&25|}}。滚动至脚本的底端,在脚本的最下面嵌入以下代码。 |
| |
| <file> |
| 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) |
| |
| </file> |
| |
| 如果您想理解这段代码的工作原理,可以研究下提供的非常详细的解释的注释。否则,你真正需要知道的就是通过改变倒数第二行的“d”值(单位假定设为 Å),右管移入(d 值为负)或移出(d 值为正)左管。 |
| |
| {{ :atk:snap9-20180813.png |}} |
| |
| <WRAP center tip 100%> |
| === 提示 === |
| 为观察操作结果,再次使用 {{:atk:sendto.png?direct&20|}} 按钮将脚本发送回 Builder。因为电极和中心区域也被识别为脚本中存在的有效构型,这将添加不少于四种构型到 Stash 区。如果您替代地将脚本发送到 **Script Generator** {{:atk:script_generator.png?direct&25|}},则只会有一个构型被传输。 |
| </WRAP> |
| |
| 注释: |
| |
| * C 方向的 10 倍重复使该体系相当大。因此,将管间距离的负值设置的非常大不仅很有必要,而且还要相应的增加计算时间。如果您限制了 d 的值,可以在创建纳米管之时或之后通过点击 Deviece Tools {{:atk:arrow.png?direct&5|}} Central Region Size的方式减少重复的倍数约为 6 或 7。只需注意管不要太靠近晶胞的另一边,并确保目视检查您选择计算的最大 d 值构型。 |
| * 有些人会想知道两管相对彼此旋转会发生什么,但是影响可能会很小(参考 [YZH + 06])。除非这两个管的半径有可比性以致于两管的 π 轨道有很强的重叠。 |
| * 计算这样的体系有趣的参数是电容(参考<color #99d9ea> [PRGW03]</color> 和 <color #99d9ea>[PPR + 04]</color>)。这可以很轻易地按照教程中所描述的关于[[金纳米板电容器]]的类似步骤完成。 |
| |
| |
===== 参考 ===== | ===== 参考 ===== |
| |
| * [PPR+04] (//1, 2//) Pawel Pomorski, Lars Pastewka, Christopher Roland, Hong Guo, and Jian Wang. Capacitance, induced charges, and bound states of biased carbon nanotube systems. //Phys. Rev. B//, 69:115418, Mar 2004. [[https://journals.aps.org/prb/abstract/10.1103/PhysRevB.69.115418|doi:10.1103/PhysRevB.69.115418]]. |
| |
| * [PRGW03] Pawel Pomorski, Christopher Roland, Hong Guo, and Jian Wang. First-principles investigation of carbon nanotube capacitance. //Phys. Rev. B//, 67:161404, Apr 2003. [[http://dx.doi.org/10.1103/PhysRevB.67.161404|doi:10.1103/PhysRevB.67.161404]]. |
| |
| * [YZH+06] (//1, 2//) Qimin Yan, Gang Zhou, Shaogang Hao, Jian Wu, and Wenhui Duan. Mechanism of nanoelectronic switch based on telescoping carbon nanotubes. //Applied Physics Letters//, 2006. [[http://dx.doi.org/10.1063/1.2198481|doi:10.1063/1.2198481]]. |
| |
| * 英文原文:[[https://docs.quantumwise.com/tutorials/cnt_junctions/cnt_junctions.html|https://docs.quantumwise.com/tutorials/cnt_junctions/cnt_junctions.html]] |