版本:2017.1
本教程介绍了新的 GeneralizedLatticeMatch 方法,用于将两个块状晶体组合到一个界面。
在很多情况下,尽管形成界面的两个表面上没有精确的结构信息,人们也对在两种材料之间创建一个真实的界面很感兴趣。GeneralizedLatticeMatch 方法可以仅基于它们的整体晶体结构自动查找两个晶体之间所有可能的界面超胞来简化这个过程。此方法是 [JLS + 17] 中描述算法的优化版本。与 The Interface Builder in QuantumATK 中描述的在 Interface Builder 中使用的晶格匹配方法相比,本方法是很公正的,因为它考虑了两个晶体形成界面的所有可能表面。
为每个界面进行大量的结构参数计算使人们可以容易分析匹配模式,选择最合适的界面用于进一步研究。然后,可以采用 QuantumATK 中的 Interface Builder 轻松实现创建所需的界面结构。
下文描述了 GeneralizedLatticeMethod 方法中采用算法的主要步骤,与 Interface Builder 中使用的算法非常相似(请参见 The Interface Builder in QuantumATK)。
1.首先,创建形成界面两种材料中第一种的可能表面矢量 $[\mathbf{a}_{1}, \mathbf{a}_{2}]$,从原胞 Bravais 向量的线性组合开始:
$$\mathbf{a}_1 = \sum_{i=1}^3 c_i \mathbf{u}_i \quad c_i \in \mathbb{Z},$$
$$\mathbf{a}_2 = \sum_{i=1}^3 c_i^\prime \mathbf{u}_i \quad c_i^\prime \in \mathbb{Z},$$
随后对所得矢量从 $\mathbf{R}^3$ 到 $\mathbf{R}^2$ 投影。使用相同的步骤创建第二个表面的矢量 $[[\mathbf{b}_{1}, \mathbf{b}_{2}]]$。如下文输入和输出说明部分所述,形成表面晶胞的数量由下列设定限制:
2.每组表面晶胞的匹配都通过在 Interface Builder 中使用的晶格匹配法,详情参见技术注解 The Interface Builder in QuantumATK。
3.然后计算得到的平均应变为: $$\mathbf{\bar{\varepsilon}} = \sqrt{\frac{\varepsilon_{11}^2 + \varepsilon_{22}^2 + \varepsilon_{11}\varepsilon_{22} + \varepsilon_{12}^2}{4}}$$
如在技术注解 The Interface Builder in QuantumATK 中的定义,这里的 $\epsilon_{11}$、$\epsilon_{22}$ 和 $\epsilon_{12}$ 是 2 D 应变张量的组分。
请注意,此处平均应变的定义与 The Interface Builder in QuantumATK 中使用的不同。当前的应变定义更适合本方法,因为它是应变张量的不变量。
为了使用 GeneralizedLatticeMatch 方法,可以如下设置一个简单的脚本:
1 # Read the BulkConfiguration of the primitive cell of the 2 # first material 3 configuration_1 = nlread('InAs.py',BulkConfiguration)[-1] 4 # Read the BulkConfiguration of the primitive cell of the 5 # second material 6 configuration_2 = nlread('Al.py',BulkConfiguration)[-1] 7 8 # Run the GeneralizedLatticeMatch method 9 generalized_lattice_match = GeneralizedLatticeMatch( 10 configuration_1, 11 configuration_2, 12 max_strain=0.02, 13 maximum_miller_index=3, 14 longest_surface_lattice_vector=50*Angstrom, 15 max_surface_area=200.0*Angstrom**2, 16 user_given_miller_index=None 17 )
该脚本读取两个输入文件,每个输入文件包含构成界面两种材料之一的块体原胞的 BulkConfiguration。然后,将 GeneralizedLatticeMatch 方法应用于这两个结构。可以设置许多输入参数用以控制可能的界面超胞的精度和搜索范围。输入参数的完整列表为:
configuration_1
:第一种材料块体原胞的 BulkConfiguration。configuration_2
:第二种材料块体原胞的 BulkConfiguration。max_strain
:施加在每个表面的最大应变。maximum_miller_index
:密勒指数 $[h,k,l]$ 定义给每个表面的最大值。longest_surface_lattice_vector
:每个表面晶格矢量 $[\mathbf{a}_{1}, \mathbf{a}_{2}]$ 和 $[[\mathbf{b}_{1}, \mathbf{b}_{2}]]$ 的最大长度。max_surface_area
:界面超胞表面区域的最大值。user_given_miller_index
:configuration_1
表面预先定义的密勒指数。
当参数 user_given_miller_index
设置为不同于 None
的值时,可能表面的搜索仅限于第二种材料,而第一种材料的表面保持固定。此选项将在示例 2 使用。
计算出可能的匹配后,结果将直接输出在计算的 QuantumATK 日志文件中。匹配项将按照应变增加的顺序显示,并列出表征每个匹配项的多个输出参数。
+----------------------------------------------------------------------------------------+ | A B Strain Atoms Area Aspect Angle Rotation | +----------------------------------------------------------------------------------------+ [ 1 0 0] >-< [ 1 0 0] 0.000110 29 72.9 1.0 90.0 0.0 [ 2 2 1] >-< [ 1 0 0] 0.000110 23 163.9 2.2 153.4 26.6 [ 3 3 2] >-< [ 1 1 1] 0.004030 28 170.9 1.2 162.6 60.3
输出参数:
A
:密勒指数 $[h,k,l]$ 的第一个表面。B
:密勒指数 $[h,k,l]$ 的第二个表面。Strain
:两个表面的最大应变。Atoms
:界面超胞的总原子数。Area
:界面超胞的表面区域。Aspect
:界面超胞两个表面矢量的纵横比。通过在比值的分子上取最大矢量计算比率。Angle
:界面超胞两个矢量的夹角。Rotation
:界面超胞连个表面的旋度。在第一个示例中,您将计算砷化铟和铝之间的可能匹配。
为获得块体 InAs 包含 BulkConfiguration 的结构文件,打开 QuantumATK,在 Builder 点击 Add From Database….。在 Database,选择如下图所示的块体 InAs 的原胞,点击 按钮将其添加到 Stash。
如下图所示,重复相同的过程,将 Al 的原胞结构添加到 Stash。
在 Stash,右键单击每个结构选择“Save as”保存这两个结构。另外,您还可以在此处下载这两个文件:↓ InAs.py,↓ Al.py。
为 GeneralizedLatticeMatch 法设置的脚本如下:
1 # Read the BulkConfiguration of the primitive cell of the 2 # first material 3 configuration_1 = nlread('InAs.py',BulkConfiguration)[-1] 4 # Read the BulkConfiguration of the primitive cell of the 5 # second material 6 configuration_2 = nlread('Al.py',BulkConfiguration)[-1] 7 8 # Run the GeneralizedLatticeMatch method 9 generalized_lattice_match = GeneralizedLatticeMatch( 10 configuration_1, 11 configuration_2, 12 max_strain=0.02, 13 maximum_miller_index=3, 14 longest_surface_lattice_vector=50*Angstrom, 15 max_surface_area=200.0*Angstrom**2, 16 user_given_miller_index=None 17 )
您可以在此处下载脚本:↓ match_InAs_Al.py。
由上述代码可知,本示例的设置为:最大应变 0.02,密勒指数 $h,k,l \leq 3$,晶格矢量的最大长度 50 Å,表面积上线为 200 Å2。
以命令 atkpython match_InAs_Al.py > match_InAs_Al.log
在终端运行脚本,输出信息显示如下。有一些可能的匹配,为简洁起见,仅显示前 20 个配对。
+------------------------------------------------------------------------------+ | | | Atomistix ToolKit 2017.1 [Build ce08f12] | | | +------------------------------------------------------------------------------+ |--------------------------------------------------| Miller planes for A : ================================================== |--------------------------------------------------| Miller planes for B : ================================================== |--------------------------------------------------| Matching Miller planes : ================================================== +----------------------------------------------------------------------------------------+ | A B Strain Atoms Area Aspect Angle Rotation | +----------------------------------------------------------------------------------------+ [ 1 0 0] >-< [ 1 0 0] 0.000110 29 72.9 1.0 90.0 0.0 [ 2 2 1] >-< [ 1 0 0] 0.000110 23 163.9 2.2 153.4 26.6 [ 3 3 2] >-< [ 1 1 1] 0.004030 28 170.9 1.2 162.6 60.3 [ 3 1 1] >-< [ 2 1 1] 0.004030 10 120.8 1.7 90.0 0.0 [ 3 1 1] >-< [ 3 1 1] 0.004250 16 120.8 1.7 106.8 33.6 [ 3 3 1] >-< [ 3 3 1] 0.004250 16 158.8 2.2 102.9 0.0 [ 3 3 1] >-< [ 3 3 1] 0.005470 13 158.8 2.2 102.9 0.0 [ 3 1 1] >-< [ 3 1 1] 0.005470 13 120.8 1.7 106.8 33.6 [ 2 1 1] >-< [ 2 1 1] 0.005470 17 178.5 2.4 90.0 0.0 [ 2 1 0] >-< [ 2 1 0] 0.005470 13 162.9 1.2 114.1 0.0 [ 1 1 1] >-< [ 1 1 1] 0.005470 13 63.1 1.0 120.0 60.0 [ 1 1 0] >-< [ 1 1 0] 0.005470 17 103.0 1.4 90.0 0.0 [ 1 0 0] >-< [ 1 0 0] 0.005470 13 72.9 1.0 90.0 0.0 [ 1 0 0] >-< [ 2 2 1] 0.005470 7 72.9 1.0 90.0 0.0 [ 3 2 2] >-< [ 1 1 1] 0.005940 23 150.2 1.2 157.6 60.5 [ 1 0 0] >-< [ 2 1 1] 0.006130 19 182.2 3.9 39.8 0.6 [ 3 1 1] >-< [ 1 1 0] 0.007160 18 151.0 1.7 73.2 22.6 [ 3 1 1] >-< [ 1 0 0] 0.007730 19 120.8 1.7 90.0 0.0 [ 3 2 2] >-< [ 3 1 1] 0.008250 13 150.2 2.3 115.9 35.2 [ 1 0 0] >-< [ 1 1 0] 0.008420 28 200.4 2.2 79.7 38.2
请注意,应变最小的配对是 InAs 的 $\langle 100 \rangle$ 面和 Al 的 $\langle 100 \rangle$ 面。
在某些情况下,人们可能会对发现块体材料已知表面的匹配感兴趣。在第二个示例中,您将研究如何找到块体铝与 InAs(111) 面的可能匹配。InAs $\langle 111 \rangle$ 向的纳米线在文献 [KZC + 15] 中已被合成,且已经实验验证 $\langle 111 \rangle$ 向 Al 层可以在其上生长。
使用与示例1中相同的结构文件,为 GeneralizedLatticeMatch 计算设置如下脚本:
1 # Read the BulkConfiguration of the primitive cell of the 2 # first material 3 configuration_1 = nlread('InAs.py',BulkConfiguration)[-1] 4 # Read the BulkConfiguration of the primitive cell of the 5 # second material 6 configuration_2 = nlread('Al.py',BulkConfiguration)[-1] 7 8 # Run the GeneralizedLatticeMatch method 9 generalized_lattice_match = GeneralizedLatticeMatch( 10 configuration_1, 11 configuration_2, 12 max_strain=0.02, 13 maximum_miller_index=3, 14 longest_surface_lattice_vector=50*Angstrom, 15 max_surface_area=200.0*Angstrom**2, 16 user_given_miller_index=(1,1,1) 17 )
请注意,user_given_miller_index
选项,即黄色高亮部分,现在被设置为 user_given_miller_index=(1,1,1)
。因此,本例仅考虑块体 Al 和 InAs(111) 的匹配。您也可以在此处下载脚本:↓ match_InAs111_Al.py。
以命令 atkpython match_InAs111_Al.py > match_InAs111_Al.log
在终端运行脚本,输出如下所示。我们注意到输出的匹配比示例 1 的少。这是因材料指定的 A
只有一个表面需要考虑。
+------------------------------------------------------------------------------+ | | | Atomistix ToolKit 2017.1 [Build ce08f12] | | | +------------------------------------------------------------------------------+ |--------------------------------------------------| Miller planes for B : ================================================== |--------------------------------------------------| Matching Miller planes : ================================================== +----------------------------------------------------------------------------------------+ | A B Strain Atoms Area Aspect Angle Rotation | +----------------------------------------------------------------------------------------+ [ 1 1 1] >-< [ 1 1 1] 0.005470 13 63.1 1.0 120.0 60.0 [ 1 1 1] >-< [ 3 3 1] 0.010100 17 142.0 1.2 46.1 18.4 [ 1 1 1] >-< [ 2 1 0] 0.010710 15 110.4 4.0 30.0 5.9 [ 1 1 1] >-< [ 3 1 1] 0.011070 26 110.4 2.6 19.1 77.9 [ 1 1 1] >-< [ 3 1 1] 0.012770 15 110.4 2.6 19.1 77.9 [ 1 1 1] >-< [ 1 1 0] 0.013260 24 126.2 2.6 40.9 12.1 [ 1 1 1] >-< [ 1 0 0] 0.014880 23 126.2 1.7 8.2 1.1 [ 1 1 1] >-< [ 2 2 1] 0.014880 13 126.2 2.3 10.9 31.1 [ 1 1 1] >-< [ 3 2 1] 0.016000 18 189.3 2.6 26.3 75.4 [ 1 1 1] >-< [ 3 1 2] 0.016000 18 189.3 3.5 19.1 44.6 [ 1 1 1] >-< [ 2 1 0] 0.016150 13 110.4 4.0 30.0 5.9 [ 1 1 1] >-< [ 2 1 1] 0.016420 9 78.9 2.9 30.0 20.8 [ 1 1 1] >-< [ 1 1 0] 0.016510 19 126.2 2.6 40.9 12.1 +----------------------------------------------------------------------------------------+
本例中匹配 InAs(111) 面最小应变的是 Al(111) 面,与文献 [KZC+15] 中的实验测量结构一致。