本文为使用 QuantumATK 电子器件的典型研究,涉及对器件区域进行不同修改产生影响的系统研究。修改的变动可以是半导体线中的掺杂剂/空位的原子位置或类型,或者是附着到纳米管上的不同分子等。在任何情况下,电极通常都保持不变。因此,可以仅计算一次电极的电子结构,然后在其他计算中对其重复使用以节省计算时间。
因此,在本教程中,您将学习如何重复使用器件电极进行不同的计算,从而通过仅计算一次电极的收敛状态来节省时间。
方法 QuantumATK 的器件计算通常分为两步:首先计算电极的自洽状态,然后进行实际的器件计算。任何之后的 SCF 分析和其他操作都是在这两个步骤之后完成的。
重复使用初始电极计算是这样的:如上所述,从为正常器件计算所设计的 Python 脚本开始,您将该计算分成两个脚本:一个脚本用于计算并保存电极的自洽状态,另一个重复使用这些电极并在器件计算中直接启用。
计算设置 重要的是,用于电极计算的参数与将在最终器件计算中使用的参数相同,或者至少非常近似。否则,电极费米能级相对于器件平均费米能级可能会发生变化,导致 SCF 收敛出现问题。
因此,首先要确定数值精度参数,如交换关联函数、温度、网格截止、基组等,然后在整个计算程序中坚持使用这些参数。
此外,电极和器件 k 点取样在 A 和 B 方向上相互匹配是绝对必要的!您不能在器件中沿 A 使用 3 个 k 点,而在电极中沿 A 使用 7 个 k 点。
需要准备一些脚本,但主要是复制/粘贴现有的 Python 代码行:
electrode.py
和 device.py
。device_configuration = DeviceConfiguration( central_region, [left_electrode, right_electrode] )
脚本 electrode.py
仅用于计算电极。您可能希望完全删除中心区域的定义以保持整洁,但这并非是绝对必要的。
4.现在向下滚动至脚本末尾,删除与器件计算器相关的所有内容。也就是说,从以下注释行中删除所有行直至脚本末尾:
#---------------------------------------- # Device Calculator #----------------------------------------
5.在脚本末尾添加以下几行,并将脚本保存为 electrodes.py
。
left_electrode.setCalculator(left_electrode_calculator) left_electrode.update() nlsave('left_electrode.nc', left_electrode) right_electrode.setCalculator(right_electrode_calculator) right_electrode.update() nlsave('right_electrode.nc', right_electrode)
在电极完全相同的情况下,删除涉及 “right_electrode” 的三行,并从所有剩余变量中删除带有 “left” 前缀的:
electrode.setCalculator(electrode_calculator) electrode.update() nlsave('electrode.nc', electrode)
7.现在开始修改脚本 device.py
。从头开始,删除所有涉及左右电极结构的行,即删除所有线直至(但不包括)
# ------------------------------------------------------------- # Central region # -------------------------------------------------------------
8.代替地,在脚本的顶部添加以下行,即从文件中读取保存的电极:
left_electrode = nlread("left_electrode.nc")[0] right_electrode = nlread("right_electrode.nc")[0]
在电极完全相同的情况下,如果仅执行并保存单个电极计算,如 electrode.nc
,使用此文件可以加载两个电极。
9.建议(但不是绝对必要)也删除电极计算器的定义,包括器件计算器中的几行:
electrode_calculators= [left_electrode_calculator, right_electrode_calculator],
是的,您已成功将电极和器件计算分离成了两个脚本。完成电极计算后,您可以运行 device.py
,并观察到它完全绕过了电极计算。
下一步是什么? 对于这些电极计算的每个新的中心区域结构,只需替换 device.py 中 central_region 的定义,然后运行器件计算。确认检查器件参数,如偏压等。
或者,您可以将上面的步骤 7-9 应用于任何完整的器件计算脚本,同时牢记有关数值精度参数的要点。