这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版上一修订版两侧同时换到之后的修订记录 | ||
atk:磁性隧道结中的自旋输运 [2016/12/15 10:55] – [自旋向上透射] nie.han | atk:磁性隧道结中的自旋输运 [2016/12/15 12:22] – [简介] nie.han | ||
---|---|---|---|
行 5: | 行 5: | ||
您将使用ATK来学习共线/ | 您将使用ATK来学习共线/ | ||
- | {{ : | + | |
+ | {{ : | ||
===== 入门指南 ===== | ===== 入门指南 ===== | ||
行 283: | 行 284: | ||
得出的自旋向下和自旋向下透射阐明如下。注意图片坐标轴的不同刻度。 | 得出的自旋向下和自旋向下透射阐明如下。注意图片坐标轴的不同刻度。 | ||
+ | |||
+ | <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”分量。 | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | |||
行 288: | 行 457: | ||
===== 弛豫器件中心区 ===== | ===== 弛豫器件中心区 ===== | ||
+ | |||
+ | 这部分为您显示如何创建和几何优化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): | ||
+ | |||
+ | 本文翻译:王吉章 | ||
+ | |||