用户工具

站点工具


atk:生成无定形结构

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
atk:生成无定形结构 [2016/10/10 15:41] – [冷却结构、调整密度] dong.dongatk:生成无定形结构 [2018/03/20 22:23] (当前版本) liu.jun
行 1: 行 1:
-======生成无定形结构======+======创建无定形材料结构模型======
  
 =====引言===== =====引言=====
  
  
-无定形固体材料在广泛的技术领域里的重要性越来越高。晶体结构通常都能够很好的定义和描述,而要对特定无定形材料进行原子尺度的模拟,建立结构模型是相当困难的一件事。本例示范如何使用 VNL 创建无定形结构,并使用 ATK 在不同精度下进行分子动力学模拟。+无定形固体材料在广泛的技术领域里的重要性越来越高。晶体结构通常都能够很好的定义和描述,而要对特定无定形材料进行原子尺度的模拟,建立结构模型是相当困难的一件事。本例示范如何使用 VNL 创建无定形结构,并使用 QuantumATK 在不同精度下进行分子动力学模拟。
  
 无定形结构,顾名思义就是组分原子、分子没有任何周期性顺序的结构。无定形结构常见于各种材料中,例如玻璃、聚合物。其力学性质、电子性质,通常与晶体区别很大。一个典型的例子是无定形二氧化硅的热胀系数比对应的石英晶体要小一个数量级。 无定形结构,顾名思义就是组分原子、分子没有任何周期性顺序的结构。无定形结构常见于各种材料中,例如玻璃、聚合物。其力学性质、电子性质,通常与晶体区别很大。一个典型的例子是无定形二氧化硅的热胀系数比对应的石英晶体要小一个数量级。
行 16: 行 16:
 本例模拟无定形二氧化硅,也就是熔融的二氧化硅(石英)。这是应用最广泛的无定形材料,比如用于常规或特种玻璃,或者半导体工业。本例还会介绍如何创建晶体区域和无定形区域之间的界面。 本例模拟无定形二氧化硅,也就是熔融的二氧化硅(石英)。这是应用最广泛的无定形材料,比如用于常规或特种玻璃,或者半导体工业。本例还会介绍如何创建晶体区域和无定形区域之间的界面。
  
-如果你不熟悉分子动力学模拟,那么可以从 [[atk:分子动力学基础|【教程:分子动力学基础】]] 开始,这样可以帮助你熟悉 VNL-ATK 的分子动力学功能。+如果你不熟悉分子动力学模拟,那么可以从 [[atk:分子动力学基础|【教程:分子动力学基础】]] 开始,这样可以帮助你熟悉 QuantumATK 的分子动力学功能。
  
 <WRAP center box 100%> <WRAP center box 100%>
行 29: 行 29:
 您应该从 SiO<sub>2</sub> 晶体出发,本例使用方石英晶体结构。之所以选用方石英,是因为方石英的晶体结构很容易转换成正交盒子,这样进行模拟会更方便,石英就没有这么方便。另外,方石英的密度与实验测量的无定形二氧化硅密度很接近,为 2.2g/cm<sup>3</sup> 您应该从 SiO<sub>2</sub> 晶体出发,本例使用方石英晶体结构。之所以选用方石英,是因为方石英的晶体结构很容易转换成正交盒子,这样进行模拟会更方便,石英就没有这么方便。另外,方石英的密度与实验测量的无定形二氧化硅密度很接近,为 2.2g/cm<sup>3</sup>
  
-打开 Builder,点击 Add ‣ From Database,搜索 SiO2。选择 cristobalite,点击右下角“”将其添加到 Builder 窗口中:+打开 Builder,点击 Add ‣ From Database,搜索 SiO2。选择 cristobalite,点击右下角“”将其添加到 Builder 窗口中:
  
 {{ :atk:amorphous01.png?600 |}} {{ :atk:amorphous01.png?600 |}}
行 38: 行 38:
  
 ====设置模拟==== ====设置模拟====
-将结构拖到 ScriptGenerator,添加一个 NewCalculator,以及 Optimize ‣ MolecularDynamics 到 Script 面板。双击 NewCalculator,选择 ATK-Classical 计算器,使用 Pedone_Fe2_2006 力场((A. Pedone, et al: A New Self-Consistent Empirical Interatomic Potential Model for Oxides, Silicates, and Silica-Based Glasses. J. Phys. Chem. B 110, 11780, 2006))。去掉 Print 和 Save 的 ☑️,点击 OK 结束 NewCalculator 设置。+将结构拖到 **ScriptGenerator**,添加一个 NewCalculator,以及 Optimize ‣ MolecularDynamics 到 Script 面板。双击 NewCalculator,选择 **ATK-Classical** 计算器,使用 Pedone_Fe2_2006 力场((A. Pedone, et al: A New Self-Consistent Empirical Interatomic Potential Model for Oxides, Silicates, and Silica-Based Glasses. J. Phys. Chem. B 110, 11780, 2006))。去掉 Print 和 Save 的 ☑️,点击 OK 结束 NewCalculator 设置。
  
-双击 MolecularDynamics,为了熔化晶体,需要将温度设置的非常高,比如 5000K。因为这个初始的模拟主要的目的是为了将原子的排布随机化,因此这一步不需要固定压强。因此 Type 选择 NVT 系综(关于 ATK 分子动力学模拟的系综,更详细的文档参考【[[atk:分子动力学基础]]】)。NVT 系综中,Langevin 是一个很好的选择,系统与热浴紧密耦合,因此不会出现某个原子过热而导致系统不稳定的情况。+双击 **MolecularDynamics**,为了熔化晶体,需要将温度设置的非常高,比如 5000K。因为这个初始的模拟主要的目的是为了将原子的排布随机化,因此这一步不需要固定压强。因此 Type 选择 NVT 系综(关于 QuantumATK 分子动力学模拟的系综,更详细的文档参考【[[atk:分子动力学基础]]】)。NVT 系综中,Langevin 是一个很好的选择,系统与热浴紧密耦合,因此不会出现某个原子过热而导致系统不稳定的情况。
  
 设置 Steps 为 20000,Log interval 为 5000,保存轨迹的文件名为 SiO2_5000K_low_density_traj.nc。在 Initial Velocity 栏,选择Maxwell-Boltzmann,并设置温度为 5000K。 设置 Steps 为 20000,Log interval 为 5000,保存轨迹的文件名为 SiO2_5000K_low_density_traj.nc。在 Initial Velocity 栏,选择Maxwell-Boltzmann,并设置温度为 5000K。
行 48: 行 48:
 {{ :atk:amorphous02.png?600 |}} {{ :atk:amorphous02.png?600 |}}
  
-使用{{:atk:amorphous04.png?30|}}按钮,将 Script 送到 Editor,这样可以进行手动修改脚本+使用{{:atk:amorphous04.png?30|}}按钮,将脚本送到 **Editor** 进行手动修改。
  
  
 ====修改脚本==== ====修改脚本====
-有的时候,尤其是当你试图熔融、随机化相对较小的超胞的晶体结构,即使温度远高于实验熔点也会比较困难。抛开力场,这种现象的原因是盒子的周期性边界条件实际上为晶体增加了额外的“稳定”性。一般而言,超胞越小,这种周期边界带来的人为“稳定”效果就越强。另外,要记得 NVT 系综的体积是固定的,因此在高温的时候,体系的压强非常大,这实际上也提升了熔点,对某些情况可能会导致倾向于其他的晶相而不是液相。+有的时候,尤其是当你试图熔融、随机化相对较小的超胞的晶体结构,即使温度远高于实验熔点也会比较困难。力场的因素外,这种现象的原因是盒子的周期性边界条件实际上为晶体增加了额外的“稳定”性。一般而言,超胞越小,这种周期边界带来的人为“稳定”效果就越强。另外,要记得 NVT 系综的体积是固定的,因此在高温的时候,体系的压强非常大,这实际上也提升了熔点,对某些情况可能会导致倾向于其他的晶相而不是液相。
  
 修改脚本中定义晶格的部分,如下所示: 修改脚本中定义晶格的部分,如下所示:
行 69: 行 69:
 比例因子 scale_cell 在这里不太重要。如果你发现 5000K 熔化之后还残余部分晶体特征,那么可以适当增大。 比例因子 scale_cell 在这里不太重要。如果你发现 5000K 熔化之后还残余部分晶体特征,那么可以适当增大。
  
-把修改后的脚本发送到 Job Manager 并运行。+把修改后的脚本发送到 **Job Manager** 并运行。
  
-大约需要几分钟时间,计算就能完成。在 LabFloor 中选择生成的轨迹文件,使用右侧的 Movie Tool 可以看到原子以混乱的方式到处运动,频繁地穿越盒子的边界。为了看的更清楚,可以把动画的最后一帧,通过 Movie Tool 窗口右下角的{{:atk:amorphous04.png?30|}}按钮送到 Builder 里面。+大约需要几分钟时间,计算就能完成。在 **LabFloor** 中选择生成的轨迹文件,使用右侧的 **Movie Tool** 可以看到原子以混乱的方式到处运动,频繁地穿越盒子的边界。为了看的更清楚,可以把动画的最后一帧,通过 **Movie Tool** 窗口右下角的{{:atk:amorphous04.png?30|}}按钮送到 Builder 里面。
  
-在 Builder 里面,点击 Bulk Tools ‣ Wrap ‣ Apply,可以将所有穿过周期性边界的原子都投射回到盒子中。+在 **Builder** 里面,点击 Bulk Tools ‣ Wrap ‣ Apply,可以将所有穿过周期性边界的原子都投射回到盒子中。
  
 最后的结构看起来类似如下: 最后的结构看起来类似如下:
行 81: 行 81:
 由于局部区域原子簇的密度发生了这种人为性的降低,所以分布不变得均匀。不过对之前的晶体结构进行完全的随机化这个目的完全达到了。 由于局部区域原子簇的密度发生了这种人为性的降低,所以分布不变得均匀。不过对之前的晶体结构进行完全的随机化这个目的完全达到了。
  
-为了恢复到最初的密度,将该结构发送到 ScriptGenerator,完全一样的重复上面的步骤(即,准备 NewCalculator 和 MolecularDynamics 脚本,并送到 Editor 中),但比例因子 scale_cell 设置为 1.1,而不像之前那样,为了降低密度而设置成几倍。这个过程将会压缩体系的密度到原先的较为均匀的密度(总体密度实际上没有改变)。温度仍然设置为 5000K、20000 步运行计算,达到平衡,将 Movie Tool 中最后一帧结构送到 Builder 中,并 Wrap 结构。+为了恢复到最初的密度,将该结构发送到 **ScriptGenerator**,完全一样的重复上面的步骤(准备 **NewCalculator** 和 **MolecularDynamics** 脚本,并送到 **Editor** 中),但比例因子 scale_cell 设置为 1.1,而不像之前那样,为了降低密度而设置成几倍。这个过程将会压缩体系的密度到原先的较为均匀的密度(总体密度实际上没有改变)。温度仍然设置为 5000K、20000 步运行计算,达到平衡,将 **Movie Tool** 中最后一帧结构送到 **Builder** 中,并 Wrap 结构。
 ====冷却结构、调整密度==== ====冷却结构、调整密度====
 观察生成的结构的局部原子排布,你会看到大量的结构缺陷,例如配位缺失的原子(例如氧原子周围只有一个硅原子)。 观察生成的结构的局部原子排布,你会看到大量的结构缺陷,例如配位缺失的原子(例如氧原子周围只有一个硅原子)。
行 149: 行 149:
 ====分析结构==== ====分析结构====
  
-模拟结束之后,你可以通过Movie Tool或者Viewer看一看分子动力学轨迹。不过因为很多原子运动越过了盒子边界,所以直接通过这种方式来估计结构比较困难。+模拟结束之后,你可以通过 **Movie Tool** 或者 **Viewer** 看一看分子动力学轨迹。不过因为很多原子运动越过了盒子边界,所以直接通过这种方式来估计结构比较困难。
  
-{{ :atk:amorphous03.png?600 |}}+{{ :atk:builder_after_cooling.png?400 |}}
  
-大致看看局部的原子排布,你会发现几乎整个结构是由共享顶点的、扭曲很小的四面体SiO<sub>4</sub>单元组成的。另外可以看到少量的配位缺陷。+大致看看局部的原子排布,你会发现几乎整个结构是由共享顶点的、扭曲很小的四面体 SiO<sub>4</sub> 单元组成的。另外可以看到少量的配位缺陷。
  
-为了定量估计,在Lab Floor栏选择SiO2_300K_NPT_traj.nc,并使用MD Analyzer tool打开。这样你可以使用各种方法分析MD轨迹。对于无定形体系,一般来说会特别关心径向分布函数(radial distribution function,RDF):点击Load,增加截断半径R<sub>max</sub>到8.0Å,Element 1和Element 2分别选择Silicon和Oxygen,点击Plot显示这两种元素之间的RDF。+为了定量估计,在 **LabFloor** 栏选择 SiO2_300K_NPT_traj.nc,并使用 **MD Analyzer** 工具打开。这样你可以使用各种方法分析 MD 轨迹。对于无定形体系,一般来说会特别关心径向分布函数(radial distribution function,RDF):点击 Load,增加截断半径 R<sub>max</sub> 到 8.0Å,Element 1 和Element 2 分别选择 Silicon 和 Oxygen,点击 Plot 显示这两种元素之间的RDF。
  
-和晶体结构尖锐的单线型峰有所不同,你会发现RDF峰被展宽了,这是无定形结构的特征。你可以为任意两种不同的元素对之间的RDF图。+和晶体结构尖锐的单线型峰有所不同,你会发现 RDF 峰被展宽了,这是无定形结构的特征。你可以为任意两种不同的元素对之间的 RDF 图。
  
-选择Coordination number 分析可以分析结构缺陷的数量。Element 1和Element 2分别选择Silicon和Oxygen,计算硅的氧原子配位数。设置截断半径为2.5Å,这是RDF曲线的第一个峰(半径最小的峰)的位置。点击Plot创建配位数分布函数。这样你会看到大多数硅原子的配位数是正常的4,极少量的硅原子配位数较低。然后切换元素的选择,计算氧原子的配位数。点击Add Line,在现有的曲线基础上,增加新的曲线。类似地,可以看到氧原子的主要配位数是2,有少量的低配位氧原子。MD Analyzer提供了大量的各种分析数据,这些分析通过简单的几次鼠标点击就可以得到。大家可以大胆地尝试这些功能。例如,可以看看Silicon-Oxygen-Silicon键角的Angular distribution function,或者中子散射函数。+选择 Coordination number 分析可以分析结构缺陷的数量。Element 1 和Element 2 分别选择 Silicon 和 Oxygen,计算硅的氧原子配位数。设置截断半径为 2.5Å,这是 RDF 曲线的第一个峰(半径最小的峰)的位置。点击 Plot 创建配位数分布函数。这样你会看到大多数硅原子的配位数是正常的 4,极少量的硅原子配位数较低。然后切换元素的选择,计算氧原子的配位数。点击 Add Line,在现有的曲线基础上,增加新的曲线。类似地,可以看到氧原子的主要配位数是2,有少量的低配位氧原子。**MD Analyzer** 提供了大量的各种分析数据,这些分析通过简单的几次鼠标点击就可以得到。大家可以大胆地尝试这些功能。例如,可以看看 Silicon-Oxygen-Silicon 键角的 Angular distribution function,或者中子散射函数。
  
-生成的无定形二氧化硅的密度,可以使用盒子的体积计算出来,盒子体积可以在Builder里面的Bulk Tools ‣ Lattice Parameters查到,并能查到元素的原子个数以及各自的质量。对于本例,得到的密度约为2.6 g/cm<sup>3</sup>。这个值比实验值(2.2 g/cm<sup>3</sup>)略高一点,这应该被认为是力场的缺点导致的。要得到与实验值完全一致的密度值,你可以考虑调整盒子尺寸,并固定体积之后重新冷却——使用NVT Nose-Hoover Chain系综,温度线性下降,这样是比较合适的。+生成的无定形二氧化硅的密度,可以使用盒子的体积计算出来,盒子体积可以在**Builder** 里面的 Bulk Tools ‣ Lattice Parameters 查到,并能查到元素的原子个数以及各自的质量。对于本例,得到的密度约为 2.6 g/cm<sup>3</sup>。这个值比实验值(2.2 g/cm<sup>3</sup>)略高一点,这应该被认为是力场的缺点导致的。要得到与实验值完全一致的密度值,你可以考虑调整盒子尺寸,并固定体积之后重新冷却——使用 NVT Nose-Hoover Chain 系综,温度线性下降,这样是比较合适的。
  
-最后的结果可以作为输入结构用于后面的静态的或MD模拟,以计算其他感兴趣的性质。不过尤其是对于静态计算,一定不要忘记,生成的这个结构,仅仅是无定形结构体系的一个可能的快照而已。要得到更有意义的结果,应该考虑几个不同样本的平均值。 +最后的结果可以作为输入结构用于后面的静态的或 MD 模拟,以计算其他感兴趣的性质。不过尤其是对于静态计算,一定不要忘记,生成的这个结构,仅仅是无定形结构体系的一个可能的快照而已。要得到更有意义的结果,应该考虑几个不同样本的平均值。 
-====改进无定形结构==== +==== 改进无定形结构 ==== 
-对经典力场MD模拟得到的结构,可以通过进一步的改进来补偿力场可能存在的不足。如果你接下来是打算使用半经验或量子力学计算,比如Tight-Bonding(TB),或者DFT计算,那么这样做就非常有用。+对经典力场 MD 模拟得到的结构,可以通过进一步的精细计算改进来克服力场可能存在的不足。如果你接下来是打算使用半经验或量子力学计算,比如 Tight-Bonding(TB),或者DFT 计算,那么这样做就非常有用。
  
-最简单快捷的方法,是使用TB或DFT进行结构优化,将结构优化到最近邻的能量最低点。这能改进局部的变形,但对任何可能的连接缺陷就很困难。+最简单快捷的方法,是使用 TB 或 DFT 进行结构优化,将结构优化到最近邻的能量最低点。这能改进局部的结构变形,但对可能存在的连接缺陷就很困难。
  
-深刻的改进,可以通过较短的TB/DFT MD退火、冷却过程实现<sup>1)</sup>。因为这种模拟非常耗时,所以只是对于比较小的体系,比如100到200原子的体系比较合适。+高级的改进,可以通过较短的 TB/DFT MD 退火、冷却过程实现<sup>1)</sup>。因为这种模拟非常耗时,所以只是对于比较小的体系,比如 100 到 200 原子的体系比较合适。
  
-接下来,演示一个简单的使用ATK-DFT计算器模拟小的二氧化硅体系的例子。因为DFT-MD模拟时间制很大,要得到可靠的恒压平衡结果很困难,而且计算比较昂贵,所以本例使用恒容的经典力场和DFT MD模拟。密度保持为方石英的值,该值与无定形二氧化硅的实验值非常接近。+接下来,演示一个简单的使用 ATK-DFT 计算器模拟小的二氧化硅体系的例子。由于DFT-MD 模拟时间限,要得到可靠的恒压平衡结果很困难,而且计算费事费力,所以本例使用恒容的经典力场和 DFT MD 模拟。密度保持为方石英的值,该值与无定形二氧化硅的实验值非常接近。
 ====设置经典力场模拟==== ====设置经典力场模拟====
-在进行DFT模拟之前,首先必须使用经典力场MD模拟得到一个无定形的单胞。过程与前面一节所述基本一致。+在进行 DFT 模拟之前,首先必须使用经典力场 MD 模拟得到一个无定形的单胞。过程与前面一节所述基本一致。
  
-首先,和前一节一样,准备好方石英晶体盒子,但这里Builder里面的Repeat Tools中,只使用2x2x1的超胞。这样的到一个盒子其中包含96个原子。盒子的尺寸是14.33 x 14.33 x 7.17 Å<sup>3</sup>,也就是z方向比其他方向薄——这有可能会加强这个方向的有序度。为了避免这种缺点,我们保持体积不变,将盒子转换为立方形的。最终盒子的尺寸为11.375 x 11.375 x 11.375Å<sup>3</sup>。在高温模拟中,体系是流体状态,你需要通过两步来实现盒子形状的转换。+首先,和前一节一样,准备好方石英晶体盒子,但这里 **Builder** 里面的 Repeat Tools 中,只使用 2x2x1 的超胞。这样的到一个盒子其中包含 96 个原子。盒子的尺寸是 14.33 x 14.33 x 7.17 Å<sup>3</sup>,也就是 z 方向比其他方向薄——这有可能会加强这个方向的有序度。为了避免这种缺点,我们保持体积不变,将盒子转换为立方形的。最终盒子的尺寸为 11.375 x 11.375 x 11.375 Å<sup>3</sup>。在高温模拟中,体系是流体状态,你需要通过两步来实现盒子形状的转换。
  
-第一步包括设置模拟,与前面的设置方式一致,也就是添加ATK-Classical calculator,力场设为Pedone_Fe3_2006,MolecularDyncamics中,type设置为Langevin,step number设为20000,温度设为5000K。将产生的脚本送入Editor。为了达到更低的密度,这样能够促进熔化,增大盒子C方向长度到最终的11.375Å:+第一步包括设置模拟,与前面的设置方式一致,也就是添加 ATK-Classical calculator,力场设为 Pedone_Fe3_2006,MolecularDyncamics 中,type 设置为 Langevin,step number 设为 20000,温度设为 5000K。将产生的脚本送入 Editor。为了达到更低的密度,这样能够促进熔化,增大盒子 C 方向长度到最终的 11.375Å:
  
 <code python> <code python>
行 190: 行 190:
 </code> </code>
  
-运行任务,并将Movie Tools中的最后一帧送到Builder中,Wrap结构,设置与上一节中所示相同的模拟脚本,并送Editor。+运行任务,并将 **Movie Tools** 中的最后一帧送到 **Builder** 中,Wrap 结构,设置与上一节中所示相同的模拟脚本,并送入 **Editor**
  
-盒子体积必须减小,这样来恢复原先的方石英密度。不重设盒子的C方向长度,现在改为设置A、B方向的长度也设置为11.375Å,这样的到一个立方的盒子。运行任务。+盒子体积必须减小,恢复原先的方石英密度。不重设盒子的 C 方向长度,现在改为设置 A、B 方向的长度也设置为 11.375Å,这样的到一个立方的盒子。运行任务。
  
-将最后一帧结构送入ScriptGenerator,添加与上一节相同的ATK- Classical的claculator,以及Optimize ‣ MolecularDynamics。在MolecularDynamics中,type选为NVT Nose-Hoover Chain。这种系综能够允许温度线性地下降。设置如下图所示:+将最后一帧结构送入 **ScriptGenerator**,添加与上一节相同的 **ATK-Classical** 的 calculator,以及 Optimize ‣ MolecularDynamics。在 **MolecularDynamics** 中,type 选为 NVT Nose-Hoover Chain。这种系综能够允许温度线性地下降。设置如下图所示:
  
 {{ :atk:amorphous05.png?600 |}} {{ :atk:amorphous05.png?600 |}}
  
-这些热力学设置使得热浴温度从5000K在50ps中下降到300K。提交计算任务。将最后一帧,通过Movie Tool ‣ Send To ‣ Builder ‣ Wrap ‣ Send To,送到ScriptGenerator。+这些热力学设置使得热浴温度从 5000K 在 50ps 中下降到 300K。提交计算任务。将最后一帧,通过 Movie Tool ‣ Send To ‣ Builder ‣ Wrap ‣ Send To,送到 **ScriptGenerator**
 =====设置DFT模拟===== =====设置DFT模拟=====
-接下来使用ATK-DFT calculator进行MD模拟来退火,并将其冷却到室温。相对于能量最小化而言,MD模拟在计算时间上相当昂贵。为了生成无定形结构,并不一定需要得到精确到收敛能量(能量极小值点)。因此,本例中建议到参数设置,在精度上略低于默认参数设置,以提高计算效率。开始DFT模拟之前,应该清楚这些模拟是非常耗时的,可能长达数天,因此推荐在集群上来完成。+接下来使用 **ATK-DFT** 计算器 进行 MD 模拟来退火,并将其冷却到室温。相对于能量最小化而言,MD 模拟在计算时间上相当昂贵。为了生成无定形结构,并不一定需要得到精确到收敛能量(能量极小值点)。因此,本例中建议到参数设置,在精度上略低于默认参数设置,以提高计算效率。开始 DFT 模拟之前,应该清楚这些模拟是非常耗时的,可能长达数天,因此推荐在集群上来完成。
  
-设置模拟脚本:添加一个NewCalculator、两个two Optimize > MolecularDynamics。在NewCalculator中,选择ATK-DFT calculator。打开calculator的详细设置,调整一些参数设置:在Iteration control parameters中设置Tolerance为0.001Hatree;在Basis set/exchange correlation中将交换相关改为GGA;将basis sets从DoubleZetaPolarized改为SingleZetaPolarized。+设置模拟脚本:添加一个 NewCalculator、两个 two Optimize > MolecularDynamics。在 **NewCalculator** 中,选择 **ATK-DFT** calculator。打开 calculator 的详细设置,调整一些参数设置:在 **Iteration control parameters** 中设置 Tolerance 为 0.001 Hatree;在 **Basis set/exchange correlation** 中将交换相关改为 GGA;将 basis sets 从 DoubleZetaPolarized 改为 SingleZetaPolarized。
  
 考虑拥有的硬件资源,尤其是要进行生产模拟的时候,可以选择更精确的参数设置。 考虑拥有的硬件资源,尤其是要进行生产模拟的时候,可以选择更精确的参数设置。
  
-点击OK,关闭NewCalculator设置窗口。+点击 OK,关闭 **NewCalculator** 设置窗口。
  
-对于两个MolecularDynamics中,双击打开第一个MolecularDynamics,设置退火模拟温度为3000K,选择type为Langevin,设置number of steps为500,log interva为20,选择合适的轨迹文件名字,例如traj-sio2-DFT-MD-3000K.nc,initial velocities选择Maxwell-Boltzmann,温度设为3000K,reservoir temperature也设为3000K。去掉Save和Print的勾,关闭设置窗口。+双击打开第一个 MolecularDynamics,设置退火模拟温度为 3000K,选择 type 为 Langevin,设置 number of steps 为500,log interval 为 20,选择合适的轨迹文件名字,例如 traj-sio2-DFT-MD-3000K.nc,initial velocities 选择 Maxwell-Boltzmann,温度设为 3000K,reservoir temperature 也设为 3000K。去掉 Save 和 Print 的勾,关闭设置窗口。
  
-双击打开第二个MolecularDynamics,在该过程里面,需要将温度迅速地从3000K降低到300K。同样地,Type使用Langevin。number of steps设为1000,log interval设为20。initial velocities同样设为Maxwell-Boltzmann,温度为3000K。在该过程中要进行冷却,因此设置reservoir temperature为300K,这样系统从一个非常热的热浴变为室温热浴。考虑到要节省模拟时间,这种方法比NVT Nose-Hoover chain系综线性降温的效率要高。+双击打开第二个 **MolecularDynamics**,在该过程里面,需要将温度迅速地从 3000K 降低到 300K。同样地,Type 使用 Langevin。number of steps 设为1000,log interval 设为 20。initial velocities 同样设为 Maxwell-Boltzmann,温度为 3000K。在该过程中要进行冷却,因此设置 reservoir temperature 为 300K,这样系统从一个非常热的热浴变为室温热浴。考虑到要节省模拟时间,这种方法比 NVT Nose-Hoover chain 系综线性降温的效率要高。
  
 模拟结束后,第二个过程的动画类似如下: 模拟结束后,第二个过程的动画类似如下:
行 216: 行 216:
 {{ :atk:amorphous06.png?600 |}} {{ :atk:amorphous06.png?600 |}}
  
-温度从初始3000K降低到室温300K。这个降温过程仅为1ps,降温速度非常快,因此和实验过程相比,包含一定的近似。+温度从初始 3000K 降低到室温 300K。这个降温过程仅为 1ps,降温速度非常快,因此和实验过程相比,包含一定的近似。
  
-用户可以使用最后的结构进行DFT结构优化计算,并计算用户感兴趣的性质。+用户可以使用最后的结构进行 DFT 结构优化计算,并计算用户感兴趣的性质。
 =====创建晶体/无定形界面===== =====创建晶体/无定形界面=====
-晶体/无定形节点结构是一个研究热点,紧挨界面的局域性质存在大量未知。使用VNL的Builder可以很容易地创建这种结构。+晶体/无定形界面结构是一个研究热点,界面附近的局域性质尚不清楚。使用 VNL 的 Builder 可以很容易地创建这种结构。
  
-如果晶体与无定形区域是同一种材料,你可以首先准备好晶体结构。之后通过Builder里面的Surface(Cleave)来创建构成界面的表面,并创建一个拷贝。第二个结构可以用来产生无定形结构——因为这样,它们的表面已经是精确匹配了。+如果晶体与无定形区域是同一种材料,你可以首先准备好晶体结构。之后通过Builder 里面的 Surface(Cleave)来创建构成界面的表面,并创建一个拷贝。第二个结构可以用来产生无定形结构——因为这样,它们的表面已经是精确匹配了。
  
-下面的例子考虑石英和无定形二氧化硅之间的界面。初始结构通过Surface(Cleave)来创建,选择的是(110)面,并将表面的基矢分别设为原值的4倍和3倍,得到新的原包。创建Periodic (bulk-like)超胞,层数设为12层。对结构以及晶格矢量进行优化,calculator仍然使用ATK-Classical Pedone_2006_Fe3,并将最后得到的结构保存为NetCDF文件。将该文件拖到Builder中,并使用该结构作为无定形结构的初始结构。+下面的例子考虑石英和无定形二氧化硅之间的界面。初始结构通过 Surface(Cleave)来创建,选择的是(110)面,并将表面的基矢分别设为原值的4倍和3倍,得到新的原包。创建 Periodic (bulk-like) 超胞,层数设为 12 层。对结构以及晶格矢量进行优化,calculator 仍然使用 ATK-Classical Pedone_2006_Fe3,并将最后得到的结构保存为 NetCDF 文件。将该文件拖到 **Builder** 中,并使用该结构作为无定形结构的初始结构。
  
-使用前面的流程制备无定形结构盒子,不过只设置z轴pressure coupling,这样盒子的横向维度会保持下来。单向的pressure coupling是在MolecularDynamics设置中选定:使用NPT Melchionna,在Stress coupling的3x3勾选栏中,只勾选zz。+使用前面的流程制备无定形结构盒子,不过只设置 z 轴 pressure coupling,这样盒子的横向尺寸会保持不变。单向的 pressure coupling 是在MolecularDynamics 设置中选定:使用 NPT Melchionna,在 Stress coupling 的 3x3 勾选栏中,只勾选 zz。
  
-创建好无定形超胞之后,使用Builder中Builders ‣ Interface tool,将优化好的晶体和无定形结构结合到一起:简单地从Stash里面将两个结构分别拖到Interface工具里面的两个窗口里面即可。Interface工具会自动检测两个结构的合适的结合方式。+创建好无定形超胞之后,使用 **Builder** 中 Builders ‣ Interface tool,将优化好的晶体和无定形结构结合到一起:简单地从 **Stash** 里面将两个结构分别拖到 Interface 工具里面的两个窗口里面即可。Interface 工具会自动检测两个结构的合适的结合方式。
  
 {{ :atk:amorphous07.png?600 |}} {{ :atk:amorphous07.png?600 |}}
  
-点击Creat按钮,完成创建。将该界面结构送入ScriptGenerator。+点击 Create 按钮,完成创建。将该界面结构送入 **ScriptGenerator**
  
 放大界面结构,可以看到大量的缺陷,比如悬挂键。大多数这样的缺陷会被经典力场的退火模拟消除掉,即使力场并不适合用于化学反应。 放大界面结构,可以看到大量的缺陷,比如悬挂键。大多数这样的缺陷会被经典力场的退火模拟消除掉,即使力场并不适合用于化学反应。
  
-添加一个NewCalculator,一个Optimize ‣ OptimizeGeometry,一个Optimize ‣ MolecularDynamics。设置想要的calculator(本例中为Pedone_2006_Fe3-potential),双击打开OptimizeGeometry设置。+添加一个 NewCalculator,一个 Optimize ‣ OptimizeGeometry,一个Optimize ‣ MolecularDynamics。设置想要的 calculator(本例中为Pedone_2006_Fe3-potential),双击打开 **OptimizeGeometry** 设置。
  
-创建好界面之后,有可能有很多人为原因导致的距离过近的原子,这会导致后面的MD模拟不稳定。要去掉界面上这些巨大的力,需要先进行结构优化。Force tolerance不需要很低,可以设置为0.5eV/Å,Maximum number of steps设为1000,去掉Print的勾选,output file命名为interface_optimized.nc,并关闭OptimizeGeometry设置窗口。+创建好界面之后,有可能有很多人为原因导致的距离过近的原子,这会导致后面的 MD 模拟不稳定。要去掉界面上这些巨大的力,需要先进行结构优化。Force tolerance 不需要很低,可以设置为 0.5eV/Å,Maximum number of steps 设为 1000,去掉 Print 的勾选,output file 命名为 interface_optimized.nc,并关闭 **OptimizeGeometry** 设置窗口。
  
-双击打开MolecularDynamics设置窗口。在MD退火中,需要固定晶体的中央区域的原子,这样保证晶体区域不至于被熔化。因此需要设置如下:点击Add constraints打开Constraints Editor。在弹出窗口内通过鼠标画框选中晶体的中间区域的原子,点击Add tag from selection,constraints选择Fixed:+双击打开第一个 **MolecularDynamics** 设置窗口。在 MD 退火中,需要固定晶体的中央区域的原子,这样保证晶体区域不至于被熔化。因此需要设置如下:点击 Add constraints 打开 **Constraints Editor**。在弹出窗口内通过鼠标画框选中晶体的中间区域的原子,点击 Add tag from selection,constraints 选择 Fixed:
  
 {{ :atk:amorphous08.png?600 |}} {{ :atk:amorphous08.png?600 |}}
  
-关闭Constraints Editor。+关闭 Constraints Editor。
  
-在MolecularDynamics设置窗口,选择NVT Nose-Hoover Chain,设置step number为50 000,设置log interval为2000。首先应该对结构在一个足够高的温度下退火,这样能够使得原子在局部进行重排,促进界面附近的配位缺陷消除,但温度也不能太高,不能把全局结构熔化了。对本例,1500K是合适的。在initial velocity和reservoir temperature中设置成该温度。+在 MolecularDynamics 设置窗口,选择 NVT Nose-Hoover Chain,设置 step number 为 50000,设置 log interval 为 2000。首先应该对结构在一个足够高的温度下退火,这样能够使得原子在局部进行重排,促进界面附近的配位缺陷消除,但温度也不能太高,不能把全局结构熔化了。对本例,1500K 是合适的。在initial velocity 和 reservoir temperature 中设置成该温度。 
 +  
 +接下来将 Optimize ‣ MolecularDynamics,设置为冷却模拟。打开Constraints Editor,前面选中的原子团 “Selection 0” 应该已经出现在列表中了。为这一组原子选择 Fixed,关闭窗口。MolecularDynamics 窗口中,选择NVT Nose- Hoover Chain 系综,50000steps,log interval 为 2000,Configuration velocities 设置为 initial velocities。Reservoir temperature 设为 1500K,Final temperature 设为 300K,这样通过模拟降温达到室温
  
-接下来将Optimize ‣ MolecularDynamics设置为冷却模拟。打开Constraints Editor,前面选中的原子团“Selection 0”应该已经出现在列表中了。为这一组原子选择Fixed,关闭窗口。MolecularDynamics窗口中,选择NVT Nose- Hoover Chain系综,50000steps,log interval为2000,Configuration velocities设置为initial velocities。Reservoir temperature 设为1500K,Final temperature设为300K,这样通过模拟降温达到室温+把脚本送入 Job Manager运行脚本
  
-把脚本送入Job Manager,运行脚本+之后还应该进行一个 NPT 模拟来得到最终结构。这次不限制原子。使用 NPT Melchionna 系综取消所有的 stress coupling 勾选,只保留 zz,这样只保证盒子的纵向垂直于界面。运行 300K、50000 步,最终得到室温的无定形/晶体界面结构
  
-之后还应该进行一个NPT模拟来得到最终结构。这次不限制原子。使用NPT Melchionna系综,取消所有的stress coupling勾选,只保留zz,这样只保证盒子的纵向垂直于界面。运行300K、50000步,最终得到室温的无定形/晶体界面结构。 
 =====其他例子===== =====其他例子=====
 最后,这一节在技术上,提供其他产生无定形结构的例子,包括三氧化二铝、二氧化钛、二氧化铪。 最后,这一节在技术上,提供其他产生无定形结构的例子,包括三氧化二铝、二氧化钛、二氧化铪。
 ====Al2O3==== ====Al2O3====
-创建三氧化二铝无定形结构,基本流程可以参考文献<sup>3</sup>和((G. Gutierrez and B. Johansson: Molecular dynamics study of structural properties of amorphous Al2O3. Phys. Rev. B 65, 104202, 2002))。使用相同的经典力场,可以选择Matsui_CaMgAlSiO_1994,或者可以使用比较早的不包含该力场的VNL-ATK版本,下载该操作向导附录的python文件。如果将其拷贝并粘贴到脚本的最前面,模拟需要的力场就有了。+创建三氧化二铝无定形结构,基本流程可以参考文献<sup>3</sup> 和((G. Gutierrez and B. Johansson: Molecular dynamics study of structural properties of amorphous Al2O3. Phys. Rev. B 65, 104202, 2002))。使用相同的经典力场,可以选择 Matsui_CaMgAlSiO_1994,或者可以使用比较早的不包含该力场的 QuantumATK 版本,下载该操作向导附录的python文件。如果将其拷贝并粘贴到脚本的最前面,模拟需要的力场就有了。
  
-为了设置这个体系,你需要导入α-Al<sub>2</sub>O<sub>3</sub>,因此需要下载文件:<WRAP center round download 60%> +为了设置这个体系,你需要导入 α-Al<sub>2</sub>O<sub>3</sub>,因此需要下载文件 {{ :atk:al2o3_corundum_ams_data.zip |}}。在 **Builder** 里面,点击Add ‣ From Files,选中该文件。为了更方便的控制 MD 模拟,三角晶系盒子需要改为立方盒子。有几种方式。可能的一种:Builders ‣ Surface(Cleave) tool。选择(10-10)米勒指数点击 Next 并选择 3x1 表面晶格。点击 Next 选择 Periodic (bulk-like) ,厚度为 4 层。点击 Finish 的到正交的超胞结构,包含 360 原子。
-[[docs.quantumwise.com/_downloads/Al2O3_corundum_AMS_DATA.cif|amorphous_structures/Al2O3_corundum_AMS_DATA.cif]] +
-</WRAP> +
-在Builder里面,点击Add ‣ From Files,选中该文件。为了更方便的控制MD模拟,三角晶系盒子需要改为立方盒子。有几种方式。可能的一种:Builders ‣ Surface(Cleave) tool。选择(10-10)米勒指数点击Next并选择3x1表面晶格。点击Next选择Periodic (bulk-like) ,厚度为4层。点击Finish的到正交的超胞结构,包含360原子。+
  
-现在可以进行和上面相似的过程进行模拟,唯一的差别是,冷却过程中,密度固定到3.175 g/cm<sup>3</sup>,这是文献<sup>4)</sup>建议的。整个流程如下:+现在可以进行和上面相似的过程进行模拟,唯一的差别是,冷却过程中,密度固定到 3.175 g/cm<sup>3</sup>,这是文献<sup>4)</sup>建议的。整个流程如下:
  
-  - 进行5000K高温模拟MD模拟,并降低密度; +  - 进行 5000K 高温模拟 MD 模拟,并降低密度; 
-  - 使用NVT Nose-Hoover Chain系综,冷却系统到3000K;+  - 使用 NVT Nose-Hoover Chain 系综,冷却系统到 3000K;
   - 压缩体系到希望的无定形密度;   - 压缩体系到希望的无定形密度;
-  - 退火到3000K;+  - 退火到 3000K;
   - 缓慢冷却体系到室温;   - 缓慢冷却体系到室温;
   - 在室温进行最后的模拟,计算物理量。   - 在室温进行最后的模拟,计算物理量。
  
-将正交盒子送到ScriptGenerator,设置基本的MD模拟脚本。添加一个NewCalculator,两个Optimize ‣ MolecularDynamics。+将正交盒子送到 ScriptGenerator,设置基本的 MD 模拟脚本。添加一个 NewCalculator,两个 Optimize ‣ MolecularDynamics。
  
-在NewCalculator中选择ATK-Classical以及Matsui_CaMgAlSiO_1994力场。+在 NewCalculator 中选择 ATK-Classical 以及 Matsui_CaMgAlSiO_1994 力场。
  
-在第一个MolecularDynamics设置系综为NVT Nose-Hoover Chain,150000steps,log interval为5000,取消Save trajectory的勾选。initial velocities设置为Maxwell-Boltzmann- distribution,5000K。设置reservoir temperature为5000K,最终温度设为3000K。其他参数保持默认即可。最后取消Save和Print的勾选。关闭窗口,将脚本送入Editor。+在第一个 MolecularDynamics 设置系综为 NVT Nose-Hoover Chain,150000 steps,log interval 为 5000,取消 Save trajectory 的勾选。initial velocities 设置为 Maxwell-Boltzmann-distribution,5000K。设置reservoir temperature 为 5000K,最终温度设为 3000K。其他参数保持默认即可。最后取消Save和Print的勾选。关闭窗口,将脚本送入 Editor。
  
-第二个MolecularDynamics设置类似。但steps设置为300000,reservoir temperature设为3000K,最终温度为300K。+第二个 MolecularDynamics 设置类似。但 steps 设置为 300000,reservoir temperature 设为 3000K,最终温度为 300K。
  
-为了人为地降低密度,需要再次将三个晶格常数改为原先的1.1倍。+为了人为地降低密度,需要再次将三个晶格常数改为原先的 1.1 倍。
  
-第一个MolecularDynamics产生3000K的液态结构,密度被降低。基于这个体系,密度需要被调整到目标密度3.175 g/cm<sup>3</sup>。通常收工计算微观单胞的宏观密度,以及找到晶格矢量的精确比例因子比较麻烦。通过插入如下ATK单元引擎代码到脚本中,第二个MolecularDynamics之前,可以很方便的实现(也就是bulk_configuration = md_trajectory.lastImage()这一行之后的内容):+第一个 MolecularDynamics 产生 3000K 的液态结构,密度被降低。基于这个体系,密度需要被调整到目标密度 3.175 g/cm<sup>3</sup>。通常收工计算微观单胞的宏观密度,以及找到晶格矢量的精确比例因子比较麻烦。通过插入如下QuantumATK单元引擎代码到脚本中,第二个 MolecularDynamics 之前,可以很方便的实现(也就是bulk_configuration = md_trajectory.lastImage()这一行之后的内容):
  
 <code pyhton> <code pyhton>
行 315: 行 313:
 bulk_configuration.setCalculator(calculator) bulk_configuration.setCalculator(calculator)
 </code> </code>
-这段代码会提取体积,计算密度,以及得到精确目标密度3.175 g/cm<sup>3</sup>的比例因子。最后晶格矢量被按比例放大,产生了新的结构。第二个冷却过程MD模拟将会基于这个结构。 
  
-保存整个脚本为python文件(最终的脚本范例见附件中)运行该脚本。大约需要几个小时才能完成完成模拟之后,可以如常分析结构。+这段代码会提取体积计算密度以及得到精确目标密度 3.175 g/cm<sup>3</sup> 的比例因子最后晶格矢量被按比例放,产生了新的结构第二个冷却过程 MD 模拟将会基于这个结构。
  
-整的脚本:<WRAP center round download 55%> +保存个脚本为 python 文件(最终的脚本范例,见附件中),运行该脚本。大约需要几个小时才能完成。完成模拟之后,可以如常分析结构。
-[[docs.quantumwise.com/_downloads/script_al2o3_amorphous.py|amorphous_structures/script_al2o3_amorphous.py]] +
-</WRAP>+
  
-====TiO2==== +完整的脚本:{{ :atk:script_al2o3_amorphous.zip |}}。 
-模拟无定形二氧化钛,需要使用Matsui and Akaogi力场((M Matsui and M. Akaogi: Molecular dynamics simulations of the structural and physical properties of the four polymorphs of TiO2. Mol. Sim. 6, 239, 1991))。这个力场已经被大量地用于二氧化钛的晶体和无定形结构模拟,得到的性质与DFT MD模拟非常一致。这个力场目前VNL中没有,但可以在脚本里面非常简单的设置。直接下载脚本:<WRAP center round download 40%> +==== TiO2 ==== 
-[[docs.quantumwise.com/_downloads/Matsui_TiO.py|amorphous_structures/Matsui_TiO.py]] +模拟无定形二氧化钛,需要使用 Matsui and Akaogi 力场((M Matsui and M. Akaogi: Molecular dynamics simulations of the structural and physical properties of the four polymorphs of TiO2. Mol. Sim. 6, 239, 1991))。这个力场已经被大量地用于二氧化钛的晶体和无定形结构模拟,得到的性质与 DFT MD 模拟非常一致。这个力场目前VNL中没有,但可以在脚本里面非常简单的设置。直接下载脚本:{{ :atk:matsui_tio.zip |}}。拷贝并粘贴到后面将要提到的过程中产生脚本的顶部。 
-</WRAP> +  
-拷贝并粘贴到后面将要提到的过程中产生脚本的顶部。 +设置体系:打开 Builder,使用 Add ‣ From Database 添加 TiO2 的金红石晶体结构。使用Bulk tools ‣ Repeat 功能创建 4x4x6 重复,包含 576 原子。将结构送入 ScriptGenerator 并设置和三氧化二铝相同的基本的 MD 脚本。将脚本送入 Editor。
- +
-设置体系:打开Builder,使用Add ‣ From Database添加TiO2的金红石晶体结构。使用Bulk tools ‣ Repeat功能创建4x4x6重复,包含576原子。将结构送入ScriptGenerator并设置和三氧化二铝相同的基本的MD脚本。将脚本送入Editor。+
  
 找到calculator的定义部分,如下: 找到calculator的定义部分,如下:
行 338: 行 331:
 </code> </code>
  
-将potentialSet = ...整行替换成上面的附件Matsui_TiO.py的内容。+将 potentialSet = ...整行替换成上面的附件 Matsui_TiO.py 的内容。
  
 当调整体积以便得到希望的密度的时候,确保你选用的脚本里面使用的是正确的化学计量法,正确的元素质量,以及正确的目标密度。无定形的二氧化钛的密度为3.80 g/cm<sup>3</sup>((D. Mergel et al.: Density and refractive index of TiO2 films prepared by reactive evaporation. Thin Solid Films 371, 218, 2000))。 当调整体积以便得到希望的密度的时候,确保你选用的脚本里面使用的是正确的化学计量法,正确的元素质量,以及正确的目标密度。无定形的二氧化钛的密度为3.80 g/cm<sup>3</sup>((D. Mergel et al.: Density and refractive index of TiO2 films prepared by reactive evaporation. Thin Solid Films 371, 218, 2000))。
  
-完整的脚本下载:<WRAP center round download 50%> +完整的脚本下载:{{ :atk:script_tio2_amorphous.zip |}}。
-[[docs.quantumwise.com/_downloads/script_hfo2_amorphous.py|amorphous_structures/script_tio2_amorphous.py]] +
-</WRAP> +
  
 ====HfO2==== ====HfO2====
-对于二氧化铪,可以使用Wang et al力场((Y. Wang, F. Zahid, J. Wang, H. Guo: Structure and dielectric properties of amorphous high-k oxides: HfO2 , ZrO2 , and their alloys. Phys. Rev. B 85, 224110, 2012)),在VNL-ATK中名为Wang_HfOZr_2012。+对于二氧化铪,可以使用 Wang //et al// 力场((Y. Wang, F. Zahid, J. Wang, H. Guo: Structure and dielectric properties of amorphous high-k oxides: HfO2 , ZrO2 , and their alloys. Phys. Rev. B 85, 224110, 2012)),在 QuantumATK 中名 为Wang_HfOZr_2012。
  
-同样的,可以从database中添加HfO2结构。通过Bulk tools ‣ Supercell plugin,点击Conventional和Transform,将FCC晶格转为常规单胞。对体系进行3x3x3重复,得到合适的超胞尺寸。+同样的,可以从 database 中添加 HfO2 结构。通过 Bulk tools ‣ Supercell plugin,点击 Conventional 和 Transform,将 FCC 晶格转为常规单胞。对体系进行 3x3x3 重复,得到合适的超胞尺寸。
  
-和前面两个例子完全一样地设置脚本。确保选取的体系和元素参数一致,无定形结构密度使用7.97 g/cm3 <sup>7)</sup> +和前面两个例子完全一样地设置脚本。确保选取的体系和元素参数一致,无定形结构密度使用 7.97 g/cm3 <sup>7)</sup>
- +
-完整的脚本下载:<WRAP center round download 50%> +
-[[docs.quantumwise.com/_downloads/script_hfo2_amorphous.py|amorphous_structures/script_hfo2_amorphous.py]] +
-</WRAP>+
  
 +完整的脚本下载:{{ :atk:script_hfo2_amorphous.zip |}}。
 ===== 参考 ===== ===== 参考 =====
  
  
atk/生成无定形结构.1476085280.txt.gz · 最后更改: 2016/10/10 15:41 由 dong.dong

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