这里会显示出您选择的修订版和当前版本之间的差别。
后一修订版 | 前一修订版 | ||
atk:器件计算中重复使用电极 [2019/06/30 14:54] – 创建 xie.congwei | atk:器件计算中重复使用电极 [2019/06/30 15:07] (当前版本) – [电极和器件的单独脚本] xie.congwei | ||
---|---|---|---|
行 1: | 行 1: | ||
====== 器件计算中重复使用电极 ====== | ====== 器件计算中重复使用电极 ====== | ||
+ | |||
+ | 本文为使用 QuantumATK 电子器件的典型研究,涉及对器件区域进行不同修改产生影响的系统研究。修改的变动可以是半导体线中的掺杂剂/ | ||
+ | |||
+ | 因此,在本教程中,您将学习如何重复使用器件电极进行不同的计算,从而通过仅计算一次电极的收敛状态来节省时间。 | ||
+ | |||
+ | |||
+ | <WRAP center important 100%> | ||
+ | === 注意 === | ||
+ | **方法** | ||
+ | QuantumATK 的器件计算通常分为两步:首先计算电极的自洽状态,然后进行实际的器件计算。任何之后的 SCF 分析和其他操作都是在这两个步骤之后完成的。 | ||
+ | |||
+ | 重复使用初始电极计算是这样的:如上所述,从为正常器件计算所设计的 Python 脚本开始,您将该计算分成两个脚本:一个脚本用于计算并保存电极的自洽状态,另一个重复使用这些电极并在器件计算中直接启用。 | ||
+ | </ | ||
+ | |||
+ | |||
+ | <WRAP center alert 100%> | ||
+ | === 警告 === | ||
+ | **计算设置** | ||
+ | 重要的是,用于电极计算的参数与将在最终器件计算中使用的参数相同,或者至少非常近似。否则,电极费米能级相对于器件平均费米能级可能会发生变化,导致 SCF 收敛出现问题。 | ||
+ | |||
+ | 因此,首先要确定数值精度参数,如交换关联函数、温度、网格截止、基组等,然后在整个计算程序中坚持使用这些参数。 | ||
+ | |||
+ | 此外,电极和器件 **k 点取样**在 A 和 B 方向上相互匹配是绝对必要的!您不能在器件中沿 A 使用 3 个 k 点,而在电极中沿 A 使用 7 个 k 点。 | ||
+ | </ | ||
+ | |||
+ | |||
===== 电极和器件的单独脚本 ===== | ===== 电极和器件的单独脚本 ===== | ||
+ | |||
+ | |||
+ | 需要准备一些脚本,但主要是复制/ | ||
+ | |||
+ | - 首先,像您通常对待某些具有代表性的中心区域那样设置完整的器件计算。可以使用 Script Generator {{: | ||
+ | - 保存脚本的两个副本:'' | ||
+ | - 在 Editor {{: | ||
+ | |||
+ | <code python> | ||
+ | device_configuration = DeviceConfiguration( | ||
+ | central_region, | ||
+ | [left_electrode, | ||
+ | ) | ||
+ | </ | ||
+ | |||
+ | <WRAP center tip 100%> | ||
+ | === 提示 === | ||
+ | 脚本 '' | ||
+ | </ | ||
+ | |||
+ | 4.现在向下滚动至脚本末尾,删除与器件计算器相关的所有内容。也就是说,从以下注释行中**删除**所有行直至脚本末尾: | ||
+ | |||
+ | <code python> | ||
+ | # | ||
+ | # Device Calculator | ||
+ | # | ||
+ | </ | ||
+ | |||
+ | 5.在脚本末尾**添加**以下几行,并将脚本保存为 '' | ||
+ | |||
+ | <code python> | ||
+ | left_electrode.setCalculator(left_electrode_calculator) | ||
+ | left_electrode.update() | ||
+ | nlsave(' | ||
+ | right_electrode.setCalculator(right_electrode_calculator) | ||
+ | right_electrode.update() | ||
+ | nlsave(' | ||
+ | </ | ||
+ | |||
+ | <WRAP center important 100%> | ||
+ | === 注意 === | ||
+ | 在电极完全相同的情况下,删除涉及 “right_electrode” 的三行,并从所有剩余变量中删除带有 “left” 前缀的: | ||
+ | <code python> | ||
+ | electrode.setCalculator(electrode_calculator) | ||
+ | electrode.update() | ||
+ | nlsave(' | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | 6.**运行**电极脚本,如利用 Job Manager {{: | ||
+ | |||
+ | 7.现在开始修改脚本 '' | ||
+ | |||
+ | <code python> | ||
+ | # ------------------------------------------------------------- | ||
+ | # Central region | ||
+ | # ------------------------------------------------------------- | ||
+ | </ | ||
+ | |||
+ | 8.代替地,在脚本的顶部**添加**以下行,即从文件中读取保存的电极: | ||
+ | |||
+ | <code python> | ||
+ | left_electrode = nlread(" | ||
+ | right_electrode = nlread(" | ||
+ | </ | ||
+ | |||
+ | <WRAP center tip 100%> | ||
+ | === 提示 === | ||
+ | 在电极完全相同的情况下,如果仅执行并保存单个电极计算,如 '' | ||
+ | </ | ||
+ | |||
+ | 9.建议(但不是绝对必要)也删除电极计算器的定义,包括器件计算器中的几行: | ||
+ | |||
+ | <code python> | ||
+ | electrode_calculators= | ||
+ | [left_electrode_calculator, | ||
+ | </ | ||
+ | |||
+ | 是的,您已成功将电极和器件计算分离成了两个脚本。完成电极计算后,您可以运行 '' | ||
+ | |||
+ | <WRAP center tip 100%> | ||
+ | === 提示 === | ||
+ | **下一步是什么?** | ||
+ | 对于这些电极计算的每个新的中心区域结构,只需替换 **device.py** 中 **central_region** 的定义,然后运行器件计算。确认检查器件参数,如偏压等。 | ||
+ | |||
+ | 或者,您可以将上面的步骤 7-9 应用于任何完整的器件计算脚本,同时牢记有关数值精度参数的要点。 | ||
+ | </ | ||
+ | |||
+ | ===== 参考 ===== | ||
+ | |||
+ | * 英文原文:https:// | ||
+ | |||