两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 |
atk:使用akmc方法模拟si0.5ge0.5中空位的扩散 [2018/05/27 09:45] – [获取初始结构] xie.congwei | atk:使用akmc方法模拟si0.5ge0.5中空位的扩散 [2018/06/15 10:23] (当前版本) – [使用AKMC方法模拟Si0.5Ge0.5中空位的扩散] fermi |
---|
====== 使用AKMC方法模拟Si0.5Ge0.5中空位的扩散 ====== | ====== 使用AKMC方法模拟Si0.5Ge0.5中空位的扩散 ====== |
| |
| |
| |
| |
| |
**版本:**2017. alpha | **版本:**2017. alpha |
对于经典的 MD 模拟,超过几百纳秒的模拟是不切实际的。但是,通过使用 AKMC,我们将能够在更长的时间范围内对体系的动态进行模拟。这是因为 KMC 模拟是将体系的动态描述为状态之间的转换,故一旦发现就可以快速计算出来。 | 对于经典的 MD 模拟,超过几百纳秒的模拟是不切实际的。但是,通过使用 AKMC,我们将能够在更长的时间范围内对体系的动态进行模拟。这是因为 KMC 模拟是将体系的动态描述为状态之间的转换,故一旦发现就可以快速计算出来。 |
</WRAP> | </WRAP> |
| |
| |
| <WRAP center info 100%> |
| === 提示 === |
| **本教程使用特定版本的QuantumATK创建,因此涉及的截图和脚本参数可能与您实际使用的版本略有区别,请在学习时务必注意。** |
| </WRAP> |
| |
| |
{{ :atk:introbar.png?direct&900 |}} | {{ :atk:introbar.png?direct&900 |}} |
===== 获取初始结构 ===== | ===== 获取初始结构 ===== |
| |
为了生成初始的 Si<sub>0.5</sub>Ge<sub>0.5</sub> 合金结构,我们在 **2015** 版 **ATK** 的{{:atk:builder.png?direct&25|}} **Builder**里点击 Builders {{:atk:arrow.png?direct&5|}} Substitutional Alloy。如果您使用的更早的版本,可以用这个脚本代替:[[https://docs.quantumwise.com/_downloads/initial-structure.py|↓initial-structure.py]]。 | 为了生成初始的 Si<sub>0.5</sub>Ge<sub>0.5</sub> 合金结构,我们在 **2015** 版 **ATK** 的 {{:atk:builder.png?direct&25|}} **Builder** 里点击 Builders {{:atk:arrow.png?direct&5|}} Substitutional Alloy。如果您使用的是更早版本,可以用这个脚本代替:[[https://docs.quantumwise.com/_downloads/initial-structure.py|↓initial-structure.py]]。 |
| |
- 打开 {{:atk:builder.png?direct&25|}} **Builder**。 | - 打开 {{:atk:builder.png?direct&25|}} **Builder**。 |
- Bulk Tools {{:atk:arrow.png?direct&5|}} Repeat,设置 A = 4,B = 4,C = 4,点击 //Apply// 按钮。 | - Bulk Tools {{:atk:arrow.png?direct&5|}} Repeat,设置 A = 4,B = 4,C = 4,点击 //Apply// 按钮。 |
- 选择 Builders {{:atk:arrow.png?direct&5|}} Substitutional Alloy。 | - 选择 Builders {{:atk:arrow.png?direct&5|}} Substitutional Alloy。 |
- 采用默认设置,用 Ge 替代 50% 的Si。 | - 采用默认设置,用 Ge 替代 50% 的 Si。 |
- 点击 //Create// 按钮。 | - 点击 //Create// 按钮。 |
| |
| |
| |
现在,您可以在 **Builder** 的主窗口和 **Stash** 中看到初始的合金结构。可能与上图显示的有所不同,因为合金是随机生成的。接下来,我们要在初始结构上做一个 Si 的空位。本例中,我们在前面删除了蓝色 Ge 后面的一个黄色 Si。您也可以随机创建一个 Si 空位。 | 现在,您可以在 **Builder** 的主窗口和 **Stash** 中看到初始合金结构。可能与上图显示的有所不同,这是因为合金是随机生成的。接下来,我们要在初始结构上做一个 Si 的空位。本例中,我们删除了前面蓝色 Ge 后面的一个黄色 Si。您也可以随机创建一个 Si 空位。 |
| |
现在,我们将要优化初始结构。 | 现在,我们将要优化初始结构。 |
通过拖动脚本到主 **VNL** 窗口并放到 {{:atk:job_manager.png?direct&25|}} **Job Manager** 上或直接通过终端运行脚本。 | 通过拖动脚本到主 **VNL** 窗口并放到 {{:atk:job_manager.png?direct&25|}} **Job Manager** 上或直接通过终端运行脚本。 |
| |
现在您已经有包含一个空位的 4×4×4 SiGe 超胞,结构优化后保存为 ''alloy.nc''。请注意,这是一个很小的体系,仅用于说明的目的。进行科学有效的模拟时,您将需要一个更大的体系。您可以通过从 **LabFloor** 合金中选中 //gID0001// 并将其拖放到 {{:co:viewer.png?direct&25|}} **Viewer**从而在实现在 **VNL** 中可视化结构的功能。效果如下所示。 | 现在您已经有包含一个空位的 4×4×4 SiGe 超胞,结构优化后保存为 ''alloy.nc''。请注意,这是一个很小的体系,仅用于说明的目的。进行科学有效的模拟时,您将需要一个更大的体系。您可以通过从 **LabFloor** 合金中选中 //gID0001//,并将其拖放到 {{:co:viewer.png?direct&25|}} **Viewer** 从而在实现在 **VNL** 中可视化结构的功能。效果如下所示。 |
| |
{{ :atk:alloy_opt.png?direct&800 |}} | {{ :atk:alloy_opt.png?direct&800 |}} |
| |
图片中的结构有一个空位,但很难识别出。您将执行一个// LocalStructure// 计算找出哪个原子没有典型的类金刚石排列方式。 | 上图结构中有一个空位,但很难识别出。您将执行一个// LocalStructure// 计算找出哪个原子没有典型的类金刚石排列方式。 |
| |
- 从 **LabFloor** 将 //gID0001// 结构拖到 {{:atk:script_generator.png?direct&25|}} **Scripter**。 | - 从 **LabFloor** 将 //gID0001// 结构拖到 {{:atk:script_generator.png?direct&25|}} **Scripter**。 |
- 点击 {{:atk:sendto.png?direct&20|}} 按钮,将脚本发送到 **Job manager**,运行计算。预计耗时在一分钟内。 | - 点击 {{:atk:sendto.png?direct&20|}} 按钮,将脚本发送到 **Job manager**,运行计算。预计耗时在一分钟内。 |
| |
现在,您可以更清晰的观察结构中的空位。在主窗口中,打开 **Viewer** 中的 **LocalStructure**,并展开侧栏的 **Local Structure** 面板,选择 //Diamond-like//。现在,所有不在空位附近并具有理想晶体结构的原子都被已经选中。打开 **Properties** 对话框,在 **Atoms** 选项卡中将所选原子的 opacity(不透明度)改为 0.1。将其他原子变得几近透明可以凸显空位附近的原子。结果如下图所示。请注意原子群中间明显的空缺。 | 现在,您可以更清晰的观察到结构中的空位。在主窗口中,打开 **Viewer** 中的 **LocalStructure**,并展开侧栏的 **Local Structure** 面板,选择 //Diamond-like//。现在,所有不在空位附近并具有理想晶体结构的原子都被已经选中。打开 **Properties** 对话框,在 **Atoms** 选项卡中将所选原子的 opacity(不透明度)改为 0.1。将其他原子变得几近透明可以凸显空位附近的原子。结果如下图所示,请注意原子群中间明显的空缺。 |
| |
| |
| |
===== 运行 AKMC 模拟 ===== | ===== 运行 AKMC 模拟 ===== |
| |
| 现在您已经有一个优化好的初始结构,可以开始进行 AKMC 模拟了。将 ''alloy.nc'' 从主 **VNL** 窗口拖到 **Script Generator**。{{:atk:calculator.png?direct&25|}} **New Calculator** 会在 Scripter 中自动加载。从 **ATK 2017** 版开始,AdaptiveKineticMonteCarlo 是在 **Scripter** 操作实现的。如果您用的是老版本,您可以下载脚本 [[https://docs.quantumwise.com/_downloads/adding-akmc.py|↓adding-akmc.py]],将其附加在 {{:atk:editor.png?direct&25|}} **Editor** 的目录里,而不用按照如下的步骤操作。 |
| |
| 添加 Optimization {{:atk:arrow.png?direct&5|}} AdaptiveKineticMonteCarlo 模块。 |
| |
| 1. 双击 {{:atk:optimization.png?direct&25|}} **AdaptiveKineticMonteCarlo**。 |
| |
| 2. 在 //Saddle Search// 选区,设置 //Number of searches// 为 100。 |
| |
| 3. 在 //Optimization// 选区,按下 //Atomic Constraint Editor// 按钮。 |
| |
| |
| * 选择一个离空位最远的原子。 |
| * 按下 //Add tag from Selection// 按钮。 |
| * 将 Constraint 的选择从 //None// 改为 //Fixed//。 |
| * 按下 //OK//。 |
| |
| |
| 4. 在 //Molecular Dynamics// 部分,设置 //temperature// 为 1200 K。 |
| |
| <WRAP center important 100%> |
| === 注意 === |
| 如果您查看 AdaptiveKineticMonteCarlo 界面上的 **Help...** 按钮,里面有设置和定义的详细介绍。更高的搜索次数和更高的置信度会提供给我们更好的准确性,但相应的计算成本也会很大。 |
| </WRAP> |
| |
| 5. 保存输出文件为 ''akmc.nc''。 |
| |
| <WRAP center tip 100%> |
| === 提示 === |
| 您看到的 AKMC 脚本(无论是从 **Scripter** 还是 [[https://docs.quantumwise.com/_downloads/adding-akmc.py|↓adding-akmc.py]])都可以使用现存的文件重启模拟。更多有关 AKMC 参数描述的详细内容可参考教程:[[https://docs.quantumwise.com/tutorials/akmc_pt_on_pt_100_surface/akmc_pt_on_pt_100_surface.html#akmc-pt-on-pt-100-surface|Adaptive Kinetic Monte Carlo Simulation of Pt on Pt(100)]]。 |
| </WRAP> |
| |
| 现在运行脚本,在台式机上耗时应该不超过半小时。最后,您将会有一个 //MarkovChain// 数据块存储在 ''akmc_markov_chain.nc'' 文件,一个 //KineticMonteCarlo// 数据块存储在 ''akmc_kmc.nc'' 文件。//MarkovChain// 数据块存储了模拟期间的所有状态(构形)以及它们之间的连接,它可以用来计算整个体系的全速率矩阵。 |
| |
| <WRAP center important 100%> |
| === 注意 === |
| 由于这些方法里的随机元素存在,您也许不能获得跟此处完全相同的结果。如果您想要追求与本教程相同的分析,可以下载用于制作教程的文件:[[https://docs.quantumwise.com/_downloads/akmc_kmc.nc|↓akmc_kmc.nc]],[[https://docs.quantumwise.com/_downloads/akmc_markov_chain.nc|↓akmc_markov_chain.nc]] 和 [[https://docs.quantumwise.com/_downloads/akmc_log.nc|↓akmc_log.nc]]。 |
| </WRAP> |
| |
| 选择 **Labfloor** 上 akmc_markov_chain.nc 文件里的 {{:atk:labfloor_markovchain.png?direct&30|}} //gID000//,点击右边面板的 **Markov Chain Analyzer**。 |
| |
| 检查每个状态(下面图里显示的为状态 0 和状态 5),使用 movie 工具里的播放按钮 {{:atk:arrow.png?direct&15|}} 查看原子的扩散和移动。从状态 0 开始,系统到状态 1 的能量势垒非常低,为 0.065 eV。您观察过程影片可以发现,它似乎是弛豫过程而不是真正的扩散。 |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| {{ :atk:markov_state0.png?direct&800 |}} |
| |
| 从状态5我们发现了连接状态 4 和状态 9 的鞍点。它们具有比从状态 0 开始更高的势垒。当您看到过程影片时,硅和锗在空位中扩散、互换。如果您在结构窗口上单击鼠标右键,可以选择 Show Bonds,这有助于沿着能量图显示原子的运动。 |
==== 状态 5 ==== | ==== 状态 5 ==== |
| |
| {{ :atk:markov_state5.png?direct&800 |}} |
| |
| <WRAP center important 100%> |
| === 注意 === |
| 谨记,您可能从随机生成的合金中获得其他结果。 |
| </WRAP> |
| |
| //Kinetic Monte Carlo// 数据块里存储着时间和状态间变化的轨迹,还有沿 Markov chain 的步数排列(即 KMC 步数)。按下 ''ctrl'' 键,同时选择 ''akmc_kmc.nc'' 里的 {{:atk:labfloor_kineticmontecarlo.png?direct&30|}} 和 ''akmc_markov_chain.nc'' 里的 {{:atk:labfloor_markovchain.png?direct&30|}},然后就可以看到右侧面板已激活的 **Kinetic Monte Carlo Analyzer...**。输出结果应该如下所示,但也可能与以下所示结果不完全相同: |
| |
| {{ :atk:kmc_analyzer.png?direct&800 |}} |
| |
| 以上分析显示了采用 //Kinetic Monte Carlo// 方法模拟,状态随时间的变化轨迹。KMC 步数、运算时间及其对应的状态 ID 和能量都显示在下表中。点击 {{:atk:arrow.png?direct&15|}} 按钮,您会看到不同状态间能量随时间变化的动态图。由于曲线的时间轴上是对数坐标,接近 0 秒处的第 0 步和第 1 步会不太清晰。您可以找到不同的鞍点状态和每个状态的停留时间或离开时间。从初始状态(0 eV)开始,此图显示了搜索到的其他鞍点的能量随时间变化差异。 |
| |
| 在 **LabFloor**,点击 ''akmc_kmc.nc'' 的 {{:atk:labfloor_kineticmontecarlo.png?direct&30|}},选择右侧面板的 **Text Representation**。 |
| |
| <code> |
| # Item: 0 |
| # File: C:\tutorial\akmc\akmc_kmc.nc |
| # Title: akmc_kmc.nc - gID000 |
| # Type: KineticMonteCarlo |
| Step # Time (seconds) State |
| 0 0.00000000e+00 0 |
| 1 4.72548280e-13 1 |
| 2 6.40378862e-13 3 |
| 3 8.06232998e-13 4 |
| 4 5.87851546e-10 5 |
| 5 5.02734297e-09 4 |
| 6 5.98297032e-09 7 |
| 7 6.50322348e-09 4 |
| 8 7.34741500e-09 7 |
| 9 1.04551543e-08 4 |
| 10 2.38590351e-08 8 |
| . |
| . |
| . |
| 1501 9.97728735e-07 3 |
| 1502 9.99898062e-07 4 |
| 1503 1.00003149e-06 3 |
| 1504 1.00593170e-06 4 |
| 1505 1.00605679e-06 3 |
| |
| </code> |
| |
| |
| 它包含了与我们在 **Kinetic Monte CarloAnalyzer** 表中所见的信息。此处,我们展示了一个较长的模拟结果,500 个鞍点的搜索。第一列是 KMC 算法的步数编号,第二列代表 KMC 仿真中的总运算时间,第三列显示的是当前状态编号,并与 //MarkovChain// 数据块中一个特定最小能量的构形对应。请注意底部文本部分(步骤//#1501〜1505//)的中断和时间超过了 1 微秒,实际上它来源于此文件的中间部分:[[https://docs.quantumwise.com/_downloads/akmc_kmc_500.nc|↓akmc_kmc_500.nc]]。 |
| |
| |
| <WRAP center important 100%> |
| === 注意 === |
| 请不要混淆 KMC 步骤数和鞍点编号。KMC 模拟过程中选择发现的鞍点代表了它们是最有可能事件。为了确保模拟的准确性,Markov chain 中的每个状态都具有相关的置信度,它是对每个 KMC 步骤相对应状态的概率估计,必然事件会被选中。在每个状态下都要执行鞍点搜索,直到达到用户定义的置信度。一旦达到置信水平,KMC 模拟将继续进行,直至状态的置信度低于目标水平。 |
| </WRAP> |
| |
| |
| 上面的输出内容包含的 KMC 步数要比脚本中设定的500个鞍点搜索数目多。这表明在某种程度上,KMC 算法在相同状态之间来回跳动。但由于 AKMC 是一种随机方法,也完全可能出现与此相反的情况,即 KMC 总步数远小于指定的鞍点搜索数。这种行为也是非常依赖系统的。 |
| |
| <WRAP center important 100%> |
| === 注意 === |
| 请注意最终时间大于 1 微秒。这个时间尺度要比我们调查到的单独采用 MD 所用时间长得多。 |
| </WRAP> |
| |
| 在在 **LabFloor**,您将能找到一个 {{:atk:labfloor_akmclog.png?direct&25|}} //akmc_log// 数据块,点击 **Text Representation** 打开。您应该可以看到等同于如下所示的信息,显示了您在脚本中设定的 100 个鞍点搜索的结果。 |
| |
| <code> |
| |
| # Item: 0 |
| # File: C:\tutorial\akmc\akmc_log.nc |
| # Title: akmc_log.nc - gID000 |
| # Type: AKMCLog |
| state id search number confidence message |
| 0 0 0.000000 Found new state |
| 0 1 0.864665 Found saddle connecting to state 1 again |
| 0 2 0.950213 Found saddle connecting to state 1 again |
| 0 3 0.981684 Found saddle connecting to state 1 again |
| 0 4 0.993262 Found saddle connecting to state 1 again |
| 1 5 0.000000 Found new state |
| 1 6 0.000000 Found new state |
| 1 7 0.000000 No barrier was found between the end points of the NEB calculation. Check to see if there are enough images and that the NEB is converged. |
| 1 8 0.375441 Found saddle connecting to state 3 again |
| 1 9 0.375441 No barrier was found between the end points of the NEB calculation. Check to see if there are enough images and that the NEB is converged. |
| 1 10 0.375441 No barrier was found between the end points of the NEB calculation. Check to see if there are enough images and that the NEB is converged. |
| 1 11 0.840168 Found saddle connecting to state 2 again |
| 1 12 0.840168 No barrier was found between the end points of the NEB calculation. Check to see if there are enough images and that the NEB is converged. |
| 1 13 0.877314 Found saddle connecting to state 3 again |
| 1 14 0.923293 Found saddle connecting to state 2 again |
| 1 15 0.923293 No barrier was found between the end points of the NEB calculation. Check to see if there are enough images and that the NEB is converged. |
| 1 16 0.940208 Found saddle connecting to state 2 again |
| 1 17 0.940208 No barrier was found between the end points of the NEB calculation. Check to see if there are enough images and that the NEB is converged. |
| |
| </code> |
| |
| |
| 第一列是用于鞍点搜索的初始状态的 //id//,第二列是搜索编号(在 100 个鞍点搜索中),第三列是对从当前区域开始的过程进行充分采样计算得到的置信度,最后一列是搜索结果。本案例中,算法从状态 0 开始 5 次鞍点搜索后找到 1 个新状态并满足 99% 的置信度,然后进入状态 1(//id// 1)。它发现一共有 2 个新状态(状态 2 和 3),17 个搜索找到了重复的状态,6 个搜索由于各种原因没有找到新状态。始状态从 //id// 0 到 //id// 1 的已发生改变,表明 KMC 算法已经迈入一个新的状态,且鞍点搜索将从那里继续进行。 |
| |
| |
| |
| |
| |
| |
| |
| |
| |
===== 结论 ===== | ===== 结论 ===== |
| |
| 在本教程中,我们研究了在 300 K 下,怎样采用 AKMC 方法对含有 1 个空位的合金进行扩散模拟。AKMC 方法可以有效地搜索 1 微秒时间范围内初始状态附近的鞍点。当您运行更长时间的模拟或搜索更多鞍点时,可以选择与在实验上为了理解状态间动态变化所用时间相当的范围。 |
| |
| 在一项真正的研究中,验证经典势能的结果和采用 DFT 重新优化 NEB 描述势垒总是非常重要的,这对于更准确的判断系统的路径也是很有帮助的。 |
===== 参考 ===== | ===== 参考 ===== |
| |
| * 英文原文:[[https://docs.quantumwise.com/tutorials/akmc-empirical-sige/akmc-empirical-sige.html|https://docs.quantumwise.com/tutorials/akmc-empirical-sige/akmc-empirical-sige.html]] |