这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
atk:磁性隧道结中的自旋输运 [2016/12/15 10:36] – [自适应k点网格] nie.han | atk:磁性隧道结中的自旋输运 [2018/03/20 22:12] (当前版本) – liu.jun | ||
---|---|---|---|
行 4: | 行 4: | ||
本实例将为您展示如何对磁性隧道结(MTJs)的电子输运性质进行模拟和分析(通常用于自旋电子学应用的研究)。你将考虑一个Fe|MgO|Fe磁性隧道结,它是一个比较复杂的自旋极化体系,MacLaren和他的合作者们首次研究了这个体系[BZSM01]。 | 本实例将为您展示如何对磁性隧道结(MTJs)的电子输运性质进行模拟和分析(通常用于自旋电子学应用的研究)。你将考虑一个Fe|MgO|Fe磁性隧道结,它是一个比较复杂的自旋极化体系,MacLaren和他的合作者们首次研究了这个体系[BZSM01]。 | ||
- | 您将使用ATK来学习共线/ | + | 您将使用QuantumATK来学习共线/ |
- | {{ : | + | |
+ | {{ : | ||
===== 入门指南 ===== | ===== 入门指南 ===== | ||
- | 使用在Builder插件中的Magnetic Tunnel Junction来创建一个Fe|MgO|Fe隧道结很容易。然而,器件构型需要进行结构优化,而这不是本实例的主要目的。我们为此提供了优化好的器件中心区的ATK Python脚本,[[http:// | + | 使用在Builder插件中的Magnetic Tunnel Junction来创建一个Fe|MgO|Fe隧道结很容易。然而,器件构型需要进行结构优化,而这不是本实例的主要目的。我们为此提供了优化好的器件中心区的QuantumATK |
现在,打开VNL,创建一个新项目并命名,选中它然后点击Open。下载[[http:// | 现在,打开VNL,创建一个新项目并命名,选中它然后点击Open。下载[[http:// | ||
行 19: | 行 20: | ||
**注意!** | **注意!** | ||
- | Device from Bulk工具栏将会建议几个不同的电极长度。这是通过搜索中心区域的周期性来检测到的。应检查和仔细选择这些重要参数。更多信息详见实例[[atk: | + | Device from Bulk工具栏将会建议几个不同的电极长度。这是通过搜索中心区域的周期性来检测到的。应检查和仔细选择这些重要参数。更多信息详见实例[[atk: |
</ | </ | ||
行 192: | 行 193: | ||
===== 自适应k点网格 ===== | ===== 自适应k点网格 ===== | ||
- | AdaptiveGrid类为对于k点取样的传统的Monkhorst-Pack(MP)网格实现了可供替代的选择。正如ATK参考手册条目AdaptiveGrid中所详述,自适应k点网格可被用于自动放大电子透射谱的重要特征。当k依赖透射以局部峰值为主导时(比如在Fe|MgO|Fe MTJ中),总的计算的透射会严重依赖这些峰值的解析,对此使用自适应k点网格是尤为有用的。 | + | AdaptiveGrid类为对于k点取样的传统的Monkhorst-Pack(MP)网格实现了可供替代的选择。正如QuantumATK参考手册条目AdaptiveGrid中所详述,自适应k点网格可被用于自动放大电子透射谱的重要特征。当k依赖透射以局部峰值为主导时(比如在Fe|MgO|Fe MTJ中),总的计算的透射会严重依赖这些峰值的解析,对此使用自适应k点网格是尤为有用的。 |
自适应算法本质上将布里渊区(BZ)按三角形划分并对所有三角形求积分。每个三角形以迭代的方式显著变小直到达到收敛,但当细化级别数达到 '' | 自适应算法本质上将布里渊区(BZ)按三角形划分并对所有三角形求积分。每个三角形以迭代的方式显著变小直到达到收敛,但当细化级别数达到 '' | ||
行 202: | 行 203: | ||
**提示!** | **提示!** | ||
- | 自适应网格功能从ATK2016开始可供使用。 | + | 自适应网格功能从2016版开始可供使用。 |
</ | </ | ||
行 250: | 行 251: | ||
Monkhorst-Pack网格有500x500的k点,而自适应网格被设置为10< | Monkhorst-Pack网格有500x500的k点,而自适应网格被设置为10< | ||
===== 自旋向上透射 ===== | ===== 自旋向上透射 ===== | ||
+ | |||
+ | <WRAP center round box 100%> | ||
+ | {{ : | ||
+ | 图94 使用500x500 Monkhorst–Pack网格评估自旋向上透射谱。总的k点平均自旋向上透射为$4.6\cdot10-4$。左图:整个BZ视图。右图:Г点周围放大图。 | ||
+ | </ | ||
+ | |||
+ | 使用稠密Monkhorst–Pack网格得到的自旋向上透射谱与在Elecron transmission部分使用较稀疏网格得到的透射谱有所不同:我们可以看到透射谱中间的特征实际上是环形的,并在直接围绕Г点处为零透射。显然,需要一个很稠密的网格来解析这个事实。然而,注意到改进的k点取样仅将总k点平均自旋向上透射增加了4倍。 | ||
+ | |||
+ | <WRAP center round box 100%> | ||
+ | {{ : | ||
+ | 图95 使用relative tolerance为10< | ||
+ | </ | ||
+ | |||
+ | 使用自适应网格评估的自旋向上透射谱如上图所示,黑点表明了k点取样。自适应算法明显地放大了k依赖透射的环形特征,导致环形透射特征周围的k点密度最大。 | ||
+ | |||
+ | ==== 自旋向下透射 ==== | ||
+ | |||
+ | <WRAP center round box 100%> | ||
+ | {{ : | ||
+ | 图96 使用500x500 Monkhorst–Pack网格评估自旋向下透射谱。总的k点平均自旋向下透射为$3.7\cdot10-5$。左图:整个BZ视图。右图:右手边透射峰值周围放大图。 | ||
+ | </ | ||
+ | |||
+ | 在密集取样的自旋向下透射中的4个峰值在对其中之一放大之前很难被观测。将使用MP网格(上图)得到的透射与使用自适应网格(下图)得到的透射进行比较,显然,自适应算法放大了透射峰值。然而,总k点平均自旋向上透射仅改变了5%。 | ||
+ | |||
+ | <WRAP center round box 100%> | ||
+ | {{ : | ||
+ | 图97 使用relative tolerance为10< | ||
+ | </ | ||
+ | |||
+ | ==== 限制网格范围 ==== | ||
+ | 自适应网格类也可被用来解析k依赖透射的一个特定的部分。下面所示的脚本([[http:// | ||
+ | |||
+ | 得出的自旋向下和自旋向下透射阐明如下。注意图片坐标轴的不同刻度。 | ||
+ | |||
+ | <code python> | ||
+ | # ------------------------------------------------------------- | ||
+ | # Load device configuration | ||
+ | # ------------------------------------------------------------- | ||
+ | device_configuration = nlread(' | ||
+ | |||
+ | # ------------------------------------------------------------- | ||
+ | # Transmission Spectrum zoom #1. | ||
+ | # ------------------------------------------------------------- | ||
+ | adaptive_grid = AdaptiveGrid( | ||
+ | kA_range=[-0.04, | ||
+ | kB_range=[-0.04, | ||
+ | tolerance=0.001, | ||
+ | error_measure=Relative) | ||
+ | |||
+ | transmission_spectrum = TransmissionSpectrum( | ||
+ | configuration=device_configuration, | ||
+ | energies=numpy.linspace(0, | ||
+ | kpoints=adaptive_grid, | ||
+ | ) | ||
+ | nlsave(' | ||
+ | |||
+ | # ------------------------------------------------------------- | ||
+ | # Transmission Spectrum zoom #2. | ||
+ | # ------------------------------------------------------------- | ||
+ | adaptive_grid = AdaptiveGrid( | ||
+ | kA_range=[0.275, | ||
+ | kB_range=[-0.03, | ||
+ | tolerance=0.001, | ||
+ | error_measure=Relative) | ||
+ | |||
+ | transmission_spectrum = TransmissionSpectrum( | ||
+ | configuration=device_configuration, | ||
+ | energies=numpy.linspace(0, | ||
+ | kpoints=adaptive_grid, | ||
+ | ) | ||
+ | nlsave(' | ||
+ | </ | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | <WRAP center round important 100%> | ||
+ | **警告!** | ||
+ | |||
+ | 如果您选择只对布里渊区一个特定部分取样,总(k点平均)透射很可能是不正确的。使用整个布里渊区取样来计算器件中的总透射,这也是默认的设置。 | ||
+ | </ | ||
+ | |||
+ | ==== 自旋转移矩 ==== | ||
+ | 您将在这个部分计算自旋转移矩(STT),其中需要非共线自旋。实例[[http:// | ||
+ | 接下来,您将: | ||
+ | |||
+ | - 计算非线性器件构型; | ||
+ | - 计算密立根布居和自旋转移矩。 | ||
+ | |||
+ | ==== 计算非共线器件构型 ==== | ||
+ | 脚本[[http:// | ||
+ | |||
+ | <code python> | ||
+ | # Read in the collinear calculation | ||
+ | device_configuration = nlread(' | ||
+ | |||
+ | # Use the special noncollinear mixing scheme | ||
+ | iteration_control_parameters = IterationControlParameters( | ||
+ | algorithm=PulayMixer(noncollinear_mixing=True) | ||
+ | ) | ||
+ | # Get the calculator | ||
+ | calculator = device_configuration.calculator() | ||
+ | new_calculator = calculator( | ||
+ | | ||
+ | | ||
+ | ) | ||
+ | # Define the spin rotation | ||
+ | theta = 120*Degrees | ||
+ | left_spins = [(i, 1, 0*Degrees, 0*Degrees) for i in range(3)] | ||
+ | center_spins = [(i+3, 1, theta*i/5, 0*Degrees) for i in range(6)] | ||
+ | right_spins = [(i+9, 1, theta, 0*Degrees) for i in range(3)] | ||
+ | spin_list = left_spins+center_spins+right_spins | ||
+ | initial_spin = InitialSpin(scaled_spins=spin_list) | ||
+ | |||
+ | # Setup the initial state | ||
+ | device_configuration.setCalculator( | ||
+ | calculator=new_calculator, | ||
+ | initial_spin=initial_spin, | ||
+ | initial_state=device_configuration) | ||
+ | |||
+ | # Calculate and save | ||
+ | device_configuration.update() | ||
+ | nlsave(" | ||
+ | </ | ||
+ | |||
+ | 对应左电极中原子自旋极化的自旋设置指向沿着输运Z轴方向,而在右电极中极化旋转了120度。在中心区域,角度是这两个值的内插值。注意到这只是初始自旋构型-实际的自旋极化矢量将被自洽地计算并因此可能会改变(您可以在下一个部分看到结果)。 | ||
+ | |||
+ | ==== 计算密立根布居和自旋转移矩 ==== | ||
+ | 当计算结束时,您会在LabFloor中找到非共线器件构型。为了计算密立根布居和自旋转移矩,去往{{: | ||
+ | |||
+ | * {{: | ||
+ | * {{: | ||
+ | * {{: | ||
+ | |||
+ | 然后,将默认输出文件名改为'' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 调整一些模块的设置: | ||
+ | |||
+ | • **Analysis From File**: | ||
+ | * 选择'' | ||
+ | • **SpinTransferTorque**: | ||
+ | * Contributions选择**Left**。这样,您将计算从左到右的线性响应电流。 | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 使用发送按钮({{: | ||
+ | |||
+ | <code python> | ||
+ | # Setup adaptive grid object. | ||
+ | adaptive_grid = AdaptiveGrid( | ||
+ | kA_range=[-0.5, | ||
+ | kB_range=[-0.5, | ||
+ | tolerance=1e-2, | ||
+ | error_measure=Relative, | ||
+ | ) | ||
+ | # ------------------------------------------------------------- | ||
+ | # Spin Transfer Torque | ||
+ | # ------------------------------------------------------------- | ||
+ | spin_transfer_torque = SpinTransferTorque( | ||
+ | configuration=device_configuration, | ||
+ | energy=0*eV, | ||
+ | kpoints=adaptive_grid, | ||
+ | contributions=Left, | ||
+ | energy_zero_parameter=AverageFermiLevel, | ||
+ | infinitesimal=1e-06*eV, | ||
+ | self_energy_calculator=RecursionSelfEnergy(), | ||
+ | ) | ||
+ | nlsave(' | ||
+ | </ | ||
+ | |||
+ | 如果您愿意,您可以在这里下载脚本([[http:// | ||
+ | STT的计算应该使用足够稠密的k点取样以使器件右手侧的总扭矩得到一个收敛很好的值。在这个脚本中我们使用relative tolerance为10< | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 这个图片显示了使用relative tolerance为10< | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 可以看出使用一个Monkhorst-Pack网格,总STT不会达到完全收敛。 | ||
+ | |||
+ | ==== 结果分析 ==== | ||
+ | 当计算完成时,您将在LabFloor中得到**MullikenPopulation**和**SpinTransferTorque**项目。您可以使用text representation来检查密立根电荷和自旋极化矢量分量。 | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 在非共线计算中,‘上’和‘下’布居的总和对应着通常的密立根电荷(电子数量),它们的差异-结合两个角度-形成了自旋极化矢量。这个矢量可以使用{{: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 您也可以使用**1D Projector**来绘出STT的空间分量: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 下图显示了MTJ构型和STT的“y”分量。 | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
===== 弛豫器件中心区 ===== | ===== 弛豫器件中心区 ===== | ||
+ | |||
+ | 这部分为您显示如何创建和几何优化Fe|MgO|Fe隧道结的中心区域。实例[[http:// | ||
+ | |||
+ | ==== 初始构型 ==== | ||
+ | |||
+ | 首先,打开{{ : | ||
+ | |||
+ | **MTJ builder**可以构建多种不同磁性隧道结几何构型。对于当前的目的,将barrier中number of layers改为6,将number of left surface layers和number of right surface layers改为2,保持其他参数为默认值不变。点击Preview按钮查看几何构型,然后点击Build将其加入Stash。 | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | **小提示!** | ||
+ | |||
+ | 将鼠标放到每个输入区上面来得到输入参数的说明。 | ||
+ | </ | ||
+ | |||
+ | 通过点击插件工具栏上的{{: | ||
+ | |||
+ | ==== 几何优化 ==== | ||
+ | |||
+ | 将器件中心区域送到{{: | ||
+ | |||
+ | * {{: | ||
+ | * {{: | ||
+ | * {{: | ||
+ | * {{: | ||
+ | |||
+ | 同时,改变默认输出文件名为'' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Calculator和InitialState设置应与在Parallel spin部分所使用的设置很相似: | ||
+ | |||
+ | • **Calculator**: | ||
+ | * 选择SGGA交换关联方法。 | ||
+ | * 增加电子温度到1200K。 | ||
+ | * 设置k点网格为7x7x2。这个选择给出一个在x和y方向合理的k点取样。在z方向,您想要构建一个器件构型,所以在边缘的铁原子必须是块材类似的。在z方向选择2个k点使铁边缘原子的描述更像块体。 | ||
+ | * 普通列表项目为铁元素选择SingleZetaPolarized 基组。 | ||
+ | |||
+ | • **Initial State**: | ||
+ | * 选择User spin作为初始态的类型。 | ||
+ | * 设置氧原子和镁原子的相对自旋为0。 | ||
+ | |||
+ | 接下来,打开{{: | ||
+ | 点击Add Constraints来打开**Constraints Editor**。之后进行如下操作: | ||
+ | |||
+ | * 通过按住Ctrl键并在原子周围点住鼠标画矩形来选择下图所示的原子。然后点击Add tag from Selection来为这些原子分配标签为“Selection 0”。 | ||
+ | * 对右手边电极扩展的原子做同样的操作,但使得约束类型为“Fixed”。 | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 将脚本保存为 '' | ||
+ | |||
+ | <code python> | ||
+ | atkpython mgo_relax.py > mgo_relax.log | ||
+ | </ | ||
+ | |||
+ | 如果需要,您也可以在此下载脚本:[[http:// | ||
+ | |||
+ | === 检查结果 === | ||
+ | |||
+ | 在**LabFloor**上找到计算数据项。选择**Forces**项(// | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | 注意所有x-y方向的力为了实用目的都为零。对于已经被优化的原子,它们的受力小于优化标准0.05 eV/ | ||
+ | |||
+ | 您现在可以使用优化好的器件中心区域来进行器件输运性质的计算,参考Getting started部分。 | ||
+ | |||
+ | |||
+ | |||
===== 参考文献 ===== | ===== 参考文献 ===== | ||
+ | [BZSM01] (1, 2) W. H. Butler, X.-G. Zhang, T. C. Schulthess, and J. M. MacLaren. Spin-dependent tunneling conductance of Fe|MgO|Fe sandwiches. Physical Review B, 63(5): | ||
+ | |||
+ | 本文翻译:王吉章 | ||
+ | |||