用户工具

站点工具


atk:磁性隧道结中的自旋输运

差别

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

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
atk:磁性隧道结中的自旋输运 [2016/12/15 10:55] – [自旋向上透射] nie.hanatk:磁性隧道结中的自旋输运 [2018/03/20 22:12] (当前版本) liu.jun
行 4: 行 4:
 本实例将为您展示如何对磁性隧道结(MTJs)的电子输运性质进行模拟和分析(通常用于自旋电子学应用的研究)。你将考虑一个Fe|MgO|Fe磁性隧道结,它是一个比较复杂的自旋极化体系,MacLaren和他的合作者们首次研究了这个体系[BZSM01]。 本实例将为您展示如何对磁性隧道结(MTJs)的电子输运性质进行模拟和分析(通常用于自旋电子学应用的研究)。你将考虑一个Fe|MgO|Fe磁性隧道结,它是一个比较复杂的自旋极化体系,MacLaren和他的合作者们首次研究了这个体系[BZSM01]。
  
-您将使用ATK来学习共线/非共线自旋相关输运性质,包括电子传输,隧穿磁阻和自旋转移矩。你也将变得熟悉AdaptiveGrid方法,它是对于k点取样的传统Monkhorst-Pack型格点的一种自适应选择。 +您将使用QuantumATK来学习共线/非共线自旋相关输运性质,包括电子传输,隧穿磁阻和自旋转移矩。你也将变得熟悉AdaptiveGrid方法,它是对于k点取样的传统Monkhorst-Pack型格点的一种自适应选择。 
-{{ :atk:introbar.png?800 |}}+ 
 +{{ :atk:introbar.png?500 |}}
 ===== 入门指南 ===== ===== 入门指南 =====
  
-使用在Builder插件中的Magnetic Tunnel Junction来创建一个Fe|MgO|Fe隧道结很容易。然而,器件构型需要进行结构优化,而这不是本实例的主要目的。我们为此提供了优化好的器件中心区的ATK Python脚本,[[http://docs.quantumwise.com/_downloads/central_region.py|central_region.py]],您可以使用它来构建MTJ器件。如果您想学习如何进行几何弛豫,您也可以跳到 Relaxing the device central region部分。+使用在Builder插件中的Magnetic Tunnel Junction来创建一个Fe|MgO|Fe隧道结很容易。然而,器件构型需要进行结构优化,而这不是本实例的主要目的。我们为此提供了优化好的器件中心区的QuantumATK Python脚本,[[http://docs.quantumwise.com/_downloads/central_region.py|central_region.py]],您可以使用它来构建MTJ器件。如果您想学习如何进行几何弛豫,您也可以跳到 Relaxing the device central region部分。
  
 现在,打开VNL,创建一个新项目并命名,选中它然后点击Open。下载[[http://docs.quantumwise.com/_downloads/central_region.py|central_region.py]] 并将其保存在Project Folder中。然后将脚本拖入VNL {{:atk:builder.png?20|}} Builder中,然后使用Device from Bulk工具栏为中心区域添加电极,从而创建Fe|MgO|Fe器件。 现在,打开VNL,创建一个新项目并命名,选中它然后点击Open。下载[[http://docs.quantumwise.com/_downloads/central_region.py|central_region.py]] 并将其保存在Project Folder中。然后将脚本拖入VNL {{:atk:builder.png?20|}} Builder中,然后使用Device from Bulk工具栏为中心区域添加电极,从而创建Fe|MgO|Fe器件。
行 19: 行 20:
 **注意!** **注意!**
  
-Device from Bulk工具栏将会建议几个不同的电极长度。这是通过搜索中心区域的周期性来检测到的。应检查和仔细选择这些重要参数。更多信息详见实例[[atk:使用atk研究电子输运|Transport calculations with ATK]]。+Device from Bulk工具栏将会建议几个不同的电极长度。这是通过搜索中心区域的周期性来检测到的。应检查和仔细选择这些重要参数。更多信息详见实例[[atk:使用atk研究电子输运|使用QuantumATK研究电子输运]]。
 </WRAP> </WRAP>
  
行 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)按三角形划分并对所有三角形求积分。每个三角形以迭代的方式显著变小直到达到收敛,但当细化级别数达到 ''maximum_number_of_levels''(默认值为20)时停止。有两种误差测定可供使用: 自适应算法本质上将布里渊区(BZ)按三角形划分并对所有三角形求积分。每个三角形以迭代的方式显著变小直到达到收敛,但当细化级别数达到 ''maximum_number_of_levels''(默认值为20)时停止。有两种误差测定可供使用:
行 202: 行 203:
 **提示!** **提示!**
  
-自适应网格功能从ATK2016开始可供使用。+自适应网格功能从2016版开始可供使用。
 </WRAP> </WRAP>
  
行 283: 行 284:
  
 得出的自旋向下和自旋向下透射阐明如下。注意图片坐标轴的不同刻度。 得出的自旋向下和自旋向下透射阐明如下。注意图片坐标轴的不同刻度。
 +
 +<code python>
 +# -------------------------------------------------------------
 +# Load device configuration
 +# -------------------------------------------------------------
 +device_configuration = nlread('mgo_para.nc', DeviceConfiguration)[0]
 +
 +# -------------------------------------------------------------
 +# Transmission Spectrum zoom #1.
 +# -------------------------------------------------------------
 +adaptive_grid = AdaptiveGrid(
 +    kA_range=[-0.04, 0.04],
 +    kB_range=[-0.04, 0.04],
 +    tolerance=0.001,
 +    error_measure=Relative)
 +
 +transmission_spectrum = TransmissionSpectrum(
 +    configuration=device_configuration,
 +    energies=numpy.linspace(0,0,1)*eV,
 +    kpoints=adaptive_grid,
 +    )
 +nlsave('zoom.nc', transmission_spectrum)
 +
 +# -------------------------------------------------------------
 +# Transmission Spectrum zoom #2.
 +# -------------------------------------------------------------
 +adaptive_grid = AdaptiveGrid(
 +    kA_range=[0.275, 0.285],
 +    kB_range=[-0.03, 0.03],
 +    tolerance=0.001,
 +    error_measure=Relative)
 +
 +transmission_spectrum = TransmissionSpectrum(
 +    configuration=device_configuration,
 +    energies=numpy.linspace(0,0,1)*eV,
 +    kpoints=adaptive_grid,
 +    )
 +nlsave('zoom.nc', transmission_spectrum)
 +</code>
 +
 +{{ :atk:zoom1.png?500 |}}
 +
 +<WRAP center round important 100%>
 +**警告!**
 +
 +如果您选择只对布里渊区一个特定部分取样,总(k点平均)透射很可能是不正确的。使用整个布里渊区取样来计算器件中的总透射,这也是默认的设置。
 +</WRAP>
 +
 +==== 自旋转移矩 ====
 +您将在这个部分计算自旋转移矩(STT),其中需要非共线自旋。实例[[http://docs.quantumwise.com/tutorials/noncollinear_intro/noncollinear_intro.html#noncollinear-intro|Introduction to noncollinear spin]]给出关于如何执行STT计算和非共线自旋的更多信息。
 +接下来,您将:
 +
 +  - 计算非线性器件构型;
 +  - 计算密立根布居和自旋转移矩。
 +
 +==== 计算非共线器件构型 ====
 +脚本[[http://docs.quantumwise.com/_downloads/mgo_nonco_dc.py|mgo_nonco_dc.py]]通过使用共线铁磁计算作为起点和一个密度混合方案(在混合之前对角化密度矩阵)计算了器件构型的非共线基态。请注意这个脚本将自旋极化交换关联势(SGGA.PBE)用非共线的(NCGGA.PBE)来替代。
 +
 +<code python>
 +# Read in the collinear calculation
 +device_configuration = nlread('mgo_para.nc', DeviceConfiguration)[0]
 +
 +# 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(
 +       exchange_correlation=NCGGA.PBE,
 +       iteration_control_parameters = iteration_control_parameters
 +       )
 +# 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("mgo_nonco_dc.nc", device_configuration)
 +</code>
 +
 +对应左电极中原子自旋极化的自旋设置指向沿着输运Z轴方向,而在右电极中极化旋转了120度。在中心区域,角度是这两个值的内插值。注意到这只是初始自旋构型-实际的自旋极化矢量将被自洽地计算并因此可能会改变(您可以在下一个部分看到结果)。
 +
 +==== 计算密立根布居和自旋转移矩 ====
 +当计算结束时,您会在LabFloor中找到非共线器件构型。为了计算密立根布居和自旋转移矩,去往{{:atk:script_generator.png?20|}} Script Generator并为脚本添加如下模块:
 +
 +  * {{:atk:analysis_from_file.png?20|}}Analysis from File
 +  * {{:atk:analysis.png?20|}}MullikenPopulation
 +  * {{:atk:analysis.png?20|}}SpinTransferTorque
 +
 +然后,将默认输出文件名改为''mgo_nonco_dc_analysis.nc''
 +
 +{{ :atk:mgo_script_generator_analff.png?500 |}}
 +
 +调整一些模块的设置:
 +
 +• **Analysis From File**:
 +  * 选择''mgo_nonco_dc.nc'' 文件。
 +• **SpinTransferTorque**:
 +  * Contributions选择**Left**。这样,您将计算从左到右的线性响应电流。
 +
 +{{ :atk:mgo_stt_window.png?500 |}}
 +
 +使用发送按钮({{:atk:sendto.png?20|}} 图标)将脚本送往editor并按照如下所示将Monkhorst-Pack网格用Adaptive网格来替代。
 +
 +<code python>
 +# Setup adaptive grid object.
 +adaptive_grid = AdaptiveGrid(
 +        kA_range=[-0.5, 0.5],
 +        kB_range=[-0.5, 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('mgo_nonco_dc_analysis.nc', spin_transfer_torque)
 +</code>
 +
 +如果您愿意,您可以在这里下载脚本([[http://docs.quantumwise.com/_downloads/mgo_nonco_dc_analysis.py|mgo_nonco_dc_analysis.py]])。
 +STT的计算应该使用足够稠密的k点取样以使器件右手侧的总扭矩得到一个收敛很好的值。在这个脚本中我们使用relative tolerance为10<sup>-2</sup>的自适应网格。下图显示了不同relative tolerance下Fe|MgO|Fe MTJ中右侧总自旋转移矩的转移情况。
 +
 +{{ :atk:plot_stt_total.png?500 |}}
 +
 +这个图片显示了使用relative tolerance为10<sup>-2</sup>对于本实例中考虑的MTJ达到计算收敛看起来是足够的。我们也使用了一个更为稠密的Monkhorst-Pack网格计算了右侧的总自旋转移矩。
 +
 +{{ :atk:plot_stt_total_mg.png?500 |}}
 +
 +可以看出使用一个Monkhorst-Pack网格,总STT不会达到完全收敛。
 +
 +==== 结果分析 ====
 +当计算完成时,您将在LabFloor中得到**MullikenPopulation**和**SpinTransferTorque**项目。您可以使用text representation来检查密立根电荷和自旋极化矢量分量。
 +
 +{{ :atk:mtj_mulliken_text.png?500 |}}
 +
 +在非共线计算中,‘上’和‘下’布居的总和对应着通常的密立根电荷(电子数量),它们的差异-结合两个角度-形成了自旋极化矢量。这个矢量可以使用{{:atk:viewer.png?20|}}**Viewer**来可视化:
 +
 +{{ :atk:mtj_mulliken.png?500 |}}
 +
 +您也可以使用**1D Projector**来绘出STT的空间分量:
 +
 +{{ :atk:mtj_spintransfertorque_text.png?500 |}}
 +
 +下图显示了MTJ构型和STT的“y”分量。
 +
 +{{ :atk:mtj_spintransfertorque_y.png?500 |}}
 +
 +
 +
  
  
行 288: 行 457:
  
 ===== 弛豫器件中心区 ===== ===== 弛豫器件中心区 =====
 +
 +这部分为您显示如何创建和几何优化Fe|MgO|Fe隧道结的中心区域。实例[[http://docs.quantumwise.com/tutorials/device_relaxation/device_relaxation.html#device-relaxation|Advanced device relaxation]]给出更多关于整体器件优化(包括优化的电极和最佳中心区域长度)的细节说明。为了简洁,我们只执行器件中心区的受力最小化。
 +
 +==== 初始构型 ====
 +
 +首先,打开{{ :atk:builder.png?20|}}Builder。为了给Fe|MgO|Fe器件设置初始几何构型,您将使用**MTJ Builder**工具栏,它被特定地设计用以构建这类几何构型。这样找到它:Add ‣ From Plugin ‣ Magnetic Tunnel Junction (FeMgO-style)。
 +
 +**MTJ builder**可以构建多种不同磁性隧道结几何构型。对于当前的目的,将barrier中number of layers改为6,将number of left surface layers和number of right surface layers改为2,保持其他参数为默认值不变。点击Preview按钮查看几何构型,然后点击Build将其加入Stash。
 +
 +{{ :atk:mtj_1.png?500 |}}
 +
 +<WRAP center round info 60%>
 +**小提示!**
 +
 +将鼠标放到每个输入区上面来得到输入参数的说明。
 +</WRAP>
 +
 +通过点击插件工具栏上的{{:atk:bulkmode02.png?20|}} Bulk工具将器件几何构型转换为一个块体构型。这只是移除电极,为您留下块体中心区域。
 +
 +==== 几何优化 ====
 +
 +将器件中心区域送到{{:atk:script_generator.png?20|}} Script Generator并向脚本添加如下模块:
 +
 +  * {{:atk:calculator.png?20|}}New Calculator
 +  * {{:atk:initial_state.png?20|}}Initial State
 +  * {{:atk:optimization.png?20|}}OptimizeGeometry
 +  * {{:atk:analysis.png?20|}}Forces
 +
 +同时,改变默认输出文件名为''mgo_relax.nc''
 +
 +{{ :atk:mtj_2.png?500 |}}
 +
 +Calculator和InitialState设置应与在Parallel spin部分所使用的设置很相似:
 +
 +• **Calculator**:
 +  * 选择SGGA交换关联方法。
 +  * 增加电子温度到1200K。
 +  * 设置k点网格为7x7x2。这个选择给出一个在x和y方向合理的k点取样。在z方向,您想要构建一个器件构型,所以在边缘的铁原子必须是块材类似的。在z方向选择2个k点使铁边缘原子的描述更像块体。
 +  * 普通列表项目为铁元素选择SingleZetaPolarized 基组。
 +
 +• **Initial State**:
 +  * 选择User spin作为初始态的类型。
 +  * 设置氧原子和镁原子的相对自旋为0。
 +
 +接下来,打开{{:atk:optimization.png?20|}} Optimization模块来指定中心区域(电极扩展处的原子)的前四个和最后四个原子应在优化过程中保持固定。这很重要-如果这些原子中的任何一个移动了,中心胞边缘将不再是周期结构,而在之后的产生和附着器件电极时需要中心胞边缘是周期结构的。
 +点击Add Constraints来打开**Constraints Editor**。之后进行如下操作:
 +
 +  * 通过按住Ctrl键并在原子周围点住鼠标画矩形来选择下图所示的原子。然后点击Add tag from Selection来为这些原子分配标签为“Selection 0”。
 +  * 对右手边电极扩展的原子做同样的操作,但使得约束类型为“Fixed”。
 +
 +{{ :atk:mtj_5.png?300 |}}
 +
 +{{ :atk:mtj_6.png?300 |}}
 +
 +将脚本保存为 ''mgo_relax.py'' 并使用{{:atk:job_manager.png?20|}}Job Manager或者如下命令语句来运行:
 +
 +<code python>
 +atkpython mgo_relax.py > mgo_relax.log
 +</code>
 +
 +如果需要,您也可以在此下载脚本:[[http://docs.quantumwise.com/_downloads/mgo_relax.py|mgo_relax.py]]。这个计算在标准个人电脑上会耗时1-2个小时,但如果分布于4个并行MPI进程下会在20分钟内完成。
 +
 +=== 检查结果 ===
 +
 +在**LabFloor**上找到计算数据项。选择**Forces**项(//gID002//),点击**Text Representation**插件。您将看到所有原子最终受力的报告。
 +
 +{{ :atk:forces_relax.png?500 |}}
 +
 +注意所有x-y方向的力为了实用目的都为零。对于已经被优化的原子,它们的受力小于优化标准0.05 eV/Ang。对于电极延伸原子,受力略微大一些。而且,力矢量指向晶胞外,表明晶胞受压应力。增加更多表面层来增加晶胞z方向长度会降低应力,但在本例中对结果影响不大。
 +
 +您现在可以使用优化好的器件中心区域来进行器件输运性质的计算,参考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):054416, 2001.[[http://dx.doi.org/10.1103/PhysRevB.63.054416|doi:10.1103/PhysRevB.63.054416]].
 +
 +本文翻译:王吉章
 +
  
atk/磁性隧道结中的自旋输运.1481770559.txt.gz · 最后更改: 2016/12/15 10:55 由 nie.han

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