这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版上一修订版两侧同时换到之后的修订记录 | ||
atk:器件体系negf计算收敛指南 [2020/06/01 21:56] – [1.总是从收敛的计算重启] xie.congwei | atk:器件体系negf计算收敛指南 [2020/06/01 22:06] – [联系支持] xie.congwei | ||
---|---|---|---|
行 175: | 行 175: | ||
===== SCF 迭代控制参数 ===== | ===== SCF 迭代控制参数 ===== | ||
+ | |||
+ | 如果您已经验证了 NEGF 计算中使用的**物理模型**是合理且适当的(请参阅上文),但计算仍然无法收敛,那么最后一个选择就是调整控制 SCF 循环的参数。 | ||
+ | |||
+ | SCF 参数在 **ATK Python** 的 '' | ||
+ | |||
+ | {{ : | ||
==== 1.最大步数 ==== | ==== 1.最大步数 ==== | ||
+ | |||
+ | 即使是稳健且表现良好的 NEGF 计算,有时朝着基态收敛的速度也会比预期的慢,因此可能需要额外的 SCF 步骤才能正确收敛。 | ||
+ | |||
+ | 在这种情况下,只需增加参数 **Maximum steps**。 | ||
+ | |||
+ | 然而,首先要从失败的计算中查阅 QuantumATK 的日志文件,确认 SCF 循环实际上是否运行良好,即是否收敛到了< | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
=== 什么是合理的基态? === | === 什么是合理的基态? === | ||
+ | |||
+ | 首先,**能带能量**和**哈密顿矩阵元素**都应稳定地收敛于恒定值。检查 ATK 日志文件:在每次 SCF 迭代之后查找报告能带能量 '' | ||
+ | |||
+ | <code python> | ||
+ | user@machine $ grep dE atk.log | ||
+ | | 0 E = -70.6148 dE = 5.719151e-01 dH = 7.266251e-01 | ||
+ | | 1 E = -56.8671 dE = 1.374766e+01 dH = 5.675282e-01 | ||
+ | | 2 E = -58.5695 dE = 1.702319e+00 dH = 1.737177e-01 | ||
+ | | 3 E = -59.6745 dE = 1.105067e+00 dH = 9.875918e-02 | ||
+ | | 4 E = -59.3529 dE = 3.216787e-01 dH = 4.048304e-02 | ||
+ | | 5 E = -59.0695 dE = 2.833359e-01 dH = 2.447425e-02 | ||
+ | | 6 E = -59.2082 dE = 1.386839e-01 dH = 2.978777e-03 | ||
+ | | 7 E = -59.0397 dE = 1.684759e-01 dH = 1.492602e-02 | ||
+ | | 8 E = -59.078 dE = 3.826926e-02 dH = 1.691435e-03 | ||
+ | | 9 E = | ||
+ | | 10 E = -59.0559 dE = 5.931576e-03 dH = 1.624175e-03 | ||
+ | | 11 E = -59.0553 dE = 6.427625e-04 dH = 2.825693e-04 | ||
+ | | 12 E = -59.0543 dE = 1.008929e-03 dH = 1.880459e-04 | ||
+ | | 13 E = -59.0542 dE = 1.964723e-05 dH = 6.034241e-05 | ||
+ | </ | ||
+ | |||
+ | * 能量和哈密顿量的差 '' | ||
+ | * 能量可能会在 SCF 循环的开始时振荡,但最终应会收敛到恒定值。 | ||
+ | |||
+ | 其次 **Mulliken populations**(马利肯布居数)应在物理上合理。检查 ATK 日志文件中最近几次 SCF 迭代的 //Density Matrix Report// 。针对每个原子,报告了 '' | ||
+ | |||
+ | - 在相同局部环境中的原子应具有大致相同的占有率。 | ||
+ | - 变化应该是系统的和物理的,例如在氧化物中,我们期望氧原子上有多余的电子,而更多带正电性邻近原子上的电子少。 | ||
+ | - 电荷不应在电极附近积累。 | ||
+ | |||
+ | 在下面的示例中,我们看到如何满足这些要求: | ||
+ | |||
+ | <code python> | ||
+ | +------------------------------------------------------------------------------+ | ||
+ | | Density Matrix Report | ||
+ | +------------------------------------------------------------------------------+ | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | </ | ||
+ | |||
+ | - 对于所有 Ni 原子和所有 Si 原子,Mulliken 布居数大致相同。 | ||
+ | - 我们看到所有的 Si 原子的 '' | ||
+ | - 靠近电极边界的原子(折射率最低的原子)不会显示出异常大的 Mulliken 布居数。 | ||
==== 2.Pulay 混合 ==== | ==== 2.Pulay 混合 ==== | ||
+ | |||
+ | SCF 循环使用 '' | ||
+ | |||
+ | 通常默认的 Pulay mixing 参数应该可以实现快速、稳定的 SCF 收敛,但有时可以进行一些调整: | ||
+ | |||
+ | * 首先尝试将 **Damping factor** 减小到 0.05 或者甚至 0.01。对于费米能级的金属态尤其有帮助。 | ||
+ | * 增加 **History steps** 的数量可能会稍微改善收敛性,但也会增加内存消耗。 | ||
==== 3.公差 ==== | ==== 3.公差 ==== | ||
+ | |||
+ | SCF 循环将会一直持续至达到精度公差或最大步数为止。该公差是对总能带能量和哈密顿矩阵元素都进行测量的——在两种情况下,一个 SCF 步骤与另一个 SCF 步骤之间的绝对差都必须低于指定的公差,以使计算被认为是准确和收敛的。 | ||
+ | |||
+ | * 在极少数情况下,可能需要将 **Tolerance** 增大到默认值以上才能使 NEGF 计算收敛,但是这也会导致产生不准确的基态。// | ||
===== 联系支持 ===== | ===== 联系支持 ===== | ||
+ | |||
+ | 如果任何尝试都失败了,请在在线 QuantumATK 论坛(https:// | ||
===== 参考 ===== | ===== 参考 ===== | ||