用户工具

站点工具

本页面的其他翻译:
  • zh

atk:使用akmc方法模拟si0.5ge0.5中空位的扩散

使用AKMC方法模拟Si0.5Ge0.5中空位的扩散

版本:2017. alpha

在本教程中,我们将采用自适应动力学蒙特卡洛方法(AKMC)模拟 Si0.5Ge0.5 合金空位扩散。AKMC 是一种可以即时执行的动力学蒙特卡洛(KMC)模拟算法,无需预先定义一组状态和反应机制。通过定位势能面上的鞍点确定反应机制,然后运用谐波过渡态理论(HTST)计算反应速率。您可以在以下教程中了解更多 AKMC 方法的相关信息:Adaptive Kinetic Monte Carlo Simulation of Pt on Pt(100)

注意

对于经典的 MD 模拟,超过几百纳秒的模拟是不切实际的。但是,通过使用 AKMC,我们将能够在更长的时间范围内对体系的动态进行模拟。这是因为 KMC 模拟是将体系的动态描述为状态之间的转换,故一旦发现就可以快速计算出来。

提示

本教程使用特定版本的QuantumATK创建,因此涉及的截图和脚本参数可能与您实际使用的版本略有区别,请在学习时务必注意。

获取初始结构

为了生成初始的 Si0.5Ge0.5 合金结构,我们在 2015ATK Builder 里点击 Builders Substitutional Alloy。如果您使用的是更早版本,可以用这个脚本代替:↓initial-structure.py

  1. 打开 Builder
  2. Add From Database,点击 Silicon (alpha)。
  3. Bulk Tools Repeat,设置 A = 4,B = 4,C = 4,点击 Apply 按钮。
  4. 选择 Builders Substitutional Alloy。
  5. 采用默认设置,用 Ge 替代 50% 的 Si。
  6. 点击 Create 按钮。

现在,您可以在 Builder 的主窗口和 Stash 中看到初始合金结构。可能与上图显示的有所不同,这是因为合金是随机生成的。接下来,我们要在初始结构上做一个 Si 的空位。本例中,我们删除了前面蓝色 Ge 后面的一个黄色 Si。您也可以随机创建一个 Si 空位。

现在,我们将要优化初始结构。

  1. 点击 按钮,将初始结构发送到 Script Generator
  2. 添加 New Calculator OptimizeGeometry 模块。
  3. 修改输出文件名为 alloy.nc
  4. 双击 New Calculator 模块,选择 ATK-Classical 计算器,参数为 StillingerWeber_SiGe_1995
  5. OptimizeGeometry 模块,设置 Force tolerance 为 0.01 eV/Å。
  6. 点击 按钮,将脚本发送到 Job manager。

您也可以下载使用脚本:↓initial-structure.py。该脚本会生成一个硅超胞,然后用 Ge 随机替换 Si 以达到 50:50 的比例,最后做一个如下所示的 Si 空位。

通过拖动脚本到主 VNL 窗口并放到 Job Manager 上或直接通过终端运行脚本。

现在您已经有包含一个空位的 4×4×4 SiGe 超胞,结构优化后保存为 alloy.nc。请注意,这是一个很小的体系,仅用于说明的目的。进行科学有效的模拟时,您将需要一个更大的体系。您可以通过从 LabFloor 合金中选中 gID0001,并将其拖放到 Viewer 从而在实现在 VNL 中可视化结构的功能。效果如下所示。

上图结构中有一个空位,但很难识别出。您将执行一个 LocalStructure 计算找出哪个原子没有典型的类金刚石排列方式。

  1. LabFloorgID0001 结构拖到 Scripter
  2. Scripter,双击 Analysis LocalStructure。
  3. 选择默认输出文件名为 local_structure.nc
  4. 点击 按钮,将脚本发送到 Job manager,运行计算。预计耗时在一分钟内。

现在,您可以更清晰的观察到结构中的空位。在主窗口中,打开 Viewer 中的 LocalStructure,并展开侧栏的 Local Structure 面板,选择 Diamond-like。现在,所有不在空位附近并具有理想晶体结构的原子都被已经选中。打开 Properties 对话框,在 Atoms 选项卡中将所选原子的 opacity(不透明度)改为 0.1。将其他原子变得几近透明可以凸显空位附近的原子。结果如下图所示,请注意原子群中间明显的空缺。

运行 AKMC 模拟

现在您已经有一个优化好的初始结构,可以开始进行 AKMC 模拟了。将 alloy.nc 从主 VNL 窗口拖到 Script Generator New Calculator 会在 Scripter 中自动加载。从 ATK 2017 版开始,AdaptiveKineticMonteCarlo 是在 Scripter 操作实现的。如果您用的是老版本,您可以下载脚本 ↓adding-akmc.py,将其附加在 Editor 的目录里,而不用按照如下的步骤操作。

添加 Optimization AdaptiveKineticMonteCarlo 模块。

1. 双击 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。

注意

如果您查看 AdaptiveKineticMonteCarlo 界面上的 Help… 按钮,里面有设置和定义的详细介绍。更高的搜索次数和更高的置信度会提供给我们更好的准确性,但相应的计算成本也会很大。

5. 保存输出文件为 akmc.nc

提示

您看到的 AKMC 脚本(无论是从 Scripter 还是 ↓adding-akmc.py)都可以使用现存的文件重启模拟。更多有关 AKMC 参数描述的详细内容可参考教程:Adaptive Kinetic Monte Carlo Simulation of Pt on Pt(100)

现在运行脚本,在台式机上耗时应该不超过半小时。最后,您将会有一个 MarkovChain 数据块存储在 akmc_markov_chain.nc 文件,一个 KineticMonteCarlo 数据块存储在 akmc_kmc.nc 文件。MarkovChain 数据块存储了模拟期间的所有状态(构形)以及它们之间的连接,它可以用来计算整个体系的全速率矩阵。

注意

由于这些方法里的随机元素存在,您也许不能获得跟此处完全相同的结果。如果您想要追求与本教程相同的分析,可以下载用于制作教程的文件:↓akmc_kmc.nc↓akmc_markov_chain.nc↓akmc_log.nc

选择 Labfloor 上 akmc_markov_chain.nc 文件里的 gID000,点击右边面板的 Markov Chain Analyzer

检查每个状态(下面图里显示的为状态 0 和状态 5),使用 movie 工具里的播放按钮 查看原子的扩散和移动。从状态 0 开始,系统到状态 1 的能量势垒非常低,为 0.065 eV。您观察过程影片可以发现,它似乎是弛豫过程而不是真正的扩散。

状态 0

从状态5我们发现了连接状态 4 和状态 9 的鞍点。它们具有比从状态 0 开始更高的势垒。当您看到过程影片时,硅和锗在空位中扩散、互换。如果您在结构窗口上单击鼠标右键,可以选择 Show Bonds,这有助于沿着能量图显示原子的运动。

状态 5

注意

谨记,您可能从随机生成的合金中获得其他结果。

Kinetic Monte Carlo 数据块里存储着时间和状态间变化的轨迹,还有沿 Markov chain 的步数排列(即 KMC 步数)。按下 ctrl 键,同时选择 akmc_kmc.nc 里的 akmc_markov_chain.nc 里的 ,然后就可以看到右侧面板已激活的 Kinetic Monte Carlo Analyzer…。输出结果应该如下所示,但也可能与以下所示结果不完全相同:

以上分析显示了采用 Kinetic Monte Carlo 方法模拟,状态随时间的变化轨迹。KMC 步数、运算时间及其对应的状态 ID 和能量都显示在下表中。点击 按钮,您会看到不同状态间能量随时间变化的动态图。由于曲线的时间轴上是对数坐标,接近 0 秒处的第 0 步和第 1 步会不太清晰。您可以找到不同的鞍点状态和每个状态的停留时间或离开时间。从初始状态(0 eV)开始,此图显示了搜索到的其他鞍点的能量随时间变化差异。

LabFloor,点击 akmc_kmc.nc,选择右侧面板的 Text Representation

	# 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

它包含了与我们在 Kinetic Monte CarloAnalyzer 表中所见的信息。此处,我们展示了一个较长的模拟结果,500 个鞍点的搜索。第一列是 KMC 算法的步数编号,第二列代表 KMC 仿真中的总运算时间,第三列显示的是当前状态编号,并与 MarkovChain 数据块中一个特定最小能量的构形对应。请注意底部文本部分(步骤#1501〜1505)的中断和时间超过了 1 微秒,实际上它来源于此文件的中间部分:↓akmc_kmc_500.nc

注意

请不要混淆 KMC 步骤数和鞍点编号。KMC 模拟过程中选择发现的鞍点代表了它们是最有可能事件。为了确保模拟的准确性,Markov chain 中的每个状态都具有相关的置信度,它是对每个 KMC 步骤相对应状态的概率估计,必然事件会被选中。在每个状态下都要执行鞍点搜索,直到达到用户定义的置信度。一旦达到置信水平,KMC 模拟将继续进行,直至状态的置信度低于目标水平。

上面的输出内容包含的 KMC 步数要比脚本中设定的500个鞍点搜索数目多。这表明在某种程度上,KMC 算法在相同状态之间来回跳动。但由于 AKMC 是一种随机方法,也完全可能出现与此相反的情况,即 KMC 总步数远小于指定的鞍点搜索数。这种行为也是非常依赖系统的。

注意

请注意最终时间大于 1 微秒。这个时间尺度要比我们调查到的单独采用 MD 所用时间长得多。

在在 LabFloor,您将能找到一个 akmc_log 数据块,点击 Text Representation 打开。您应该可以看到等同于如下所示的信息,显示了您在脚本中设定的 100 个鞍点搜索的结果。

# 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.

第一列是用于鞍点搜索的初始状态的 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 描述势垒总是非常重要的,这对于更准确的判断系统的路径也是很有帮助的。

参考

atk/使用akmc方法模拟si0.5ge0.5中空位的扩散.txt · 最后更改: 2018/06/15 10:23 由 fermi

© 2014-2022 费米科技(京ICP备14023855号