##### Download

The ** Xf_STT** class was created to enable simulation of the injection of multiple spin currents into a ferromagnet in OOMMF.

The spin torque equation derived by Slonczewski [1] and modified by Xiao [2] is written as (as implemented in OOMMF):

According to the OOMMF user guide:

has a default value of . In the definition of , is the reduced Planck’s constant, is the electronic charge in C, is the current density exerting spin-torque in , is the thickness of the free layer in meters in the direction which the current density is flowing, and is the saturation magnetization in . Note that may be rewritten as,

where is the current flowing homogeneously into the magnetic cell in A, and is the volume of the magnetic cell in .

and gives the in-plane and out-of-plane spin-torque terms, respectively. As implemented in OOMMF,

In the case where and , reduces to

The Specify block for the Xf_STT class has the form

The spin-transfer torque term does not actually change the energy in this implementation in OOMMF, and its implementation as a derivation from `Oxs_Energy` class is technically illegal. However, the spin-transfer torque term as an equivalent H-field in OOMMF using the `Oxs_Energy` class gives the flexibility to model the injection of multiple spin currents into one region in the ferromagnet.

The default values for ** P** and

**are 0.4 and 2, respectively. If preferred, values for the fixed and free layers may be instead specified separately, through**

`Lambda`**,**

`P_fixed`**,**

`P_free`**, and**

`Lambda_fixed`**. Otherwise**

`Lambda_free``P_fixed`=

`P_free`=

`P`and

`Lambda_fixed`=

`Lambda_free`=

`Lambda`.

`Lambda`must be larger than or equal to 1; set

`Lambda`=1 to remove the dependence of on . If you want non-zero , it is set directly as

**.**

`eps_prime`Current density ** J** and unit polarization direction

**are required. The units on**

`mp`**are . Positive**

`J``J`produces torque that tends to align towards .

Simulation of domain-wall dynamics under current-induced spin-torque is enabled by setting ** propogate_mp** to 1. The setting

`propogate_mp`is 0 (disabled) by default. When

`propogate_mp`is enabled,

`mp`is actually , where is the flow direction and is the cell dimension in that direction. The flow direction may be set by setting

**as one of six options:**

`J_direction``-z`,

`+z`,

`-y`,

`+y`,

`-x`,

`+x`. The default is

`-z`. The direction changes the

`mp`used to calculate the spin torque at each cell site.

Parameters `J`, `mp`, `P`, `Lambda`, and `eps_prime` may all be varied pointwise (by specifying them as Oxs_ScalarField objects), but are fixed with respect to time. However, `J` can be multiplied by a time varying “profile,” to model current rise times, pulses, etc. Use the ** J_profile** and

**options to enable this feature. The**

`J_profile_args``Jprofile_script`should be a Tcl script that returns a single scalar.

`Jprofile_script_args`should be a subset of {stage stage_time total_time }, to specify arguments appended to

`Jprofile_script`on each time step. Default is the entire set, in the order as listed.

The `Xf_STT` module provides the scalar output “average J,” and the vector field outputs “Field” (which is ) and “J*mp.”

Dear Xuanyao,

What is the difference between Xf_STT and Oxs_SpinXferEvolve? It seems that the former ties together the functions of the latter and the Anv_SpinTEvolve evolver.

Xiangjun, Cheers>

LikeLike

Xf_STT allows you to to include the effect of spin-transfer torque into any evolver class you want, since Xf_STT returns spin-transfer torque as an Oxs_Energy class. This allows you to simulate structures in which spin current may be injected into the same region from several different interfaces, each with a polarization factor and lambda.

LikeLike

Dear Xuanyao:

I am a student in Beihang University, very grateful for your Xf_STT extension module in my simulation, it tackled an important issue in it. However, sometimes errors occured in the module. The error message goes like

Unrecognized error thrown from inside “Oxs_Run” (Loop)

can’t read “problem”: no such variable

I recognized the problem after I added Xf_STT in my simulation.

However, this can be solved by reloading the problems and sometimes it works, but sometimes it don’t. So each time I have to reload the problem many times to get in. The simulation is successful but I wonder if there’re any ways to kill the problem and are there any hidden problems in it.

Thanks for your help!

Yours, Simin Li

LikeLike

Dear Simin,

If you can share your simulation file, it will make it easier for me to figure out what bugs there are in the code. Please email to kelvin.xy.fong@nus.edu.sg

Best,

Kelvin FONG

LikeLike

Dear Xuanyao,

I’m a student from China, who has been doing micromagnetic simulation projects based on Oommf. First of all, thanks so much for providing us with such a powerful extension module.

I’m writing to seek for assistance about this module, since I encountered the similar problem. The error message goes like “Unrecognized error thrown from inside “Oxs_Run” (Loop)”. Each time I have to reload the problem many times to get in. I’m not sure if there are any hidden problems here.

I would appreciate it if you could give me some support and advice! Looking forward to your reply!

Best regards,

Wen

LikeLike

Hi Wen Zhao,

I recommend that you try using the 1.2a4 version of OOMMF with the module first. If the problems are still there, there is probably a compatibility issue with the module.

Best,

Kelvin FONG

LikeLike

Dear Xuanyao:

Thank you very much for your extension module and I’m currently working to get my results published. Do you require quoting any specific papers if I used your extension module in my simulation？

LikeLike

Dear Xuanyao,

If I do not consider the fixed layer in my simulations, the polarization of the current is fixed by P and in that case it is not necessary to define P_free and P_fixed?

Thanks

LikeLike

Yes, the code first checks for “P” followed by “P_free” and “P_fixed”. If “P” is defined, the code will not check for “P_fixed” and “P_free”.

LikeLike

It is possible through this evolver to implement the case of non-adiabatic spin-transfer as the case of Anv_SpinTEvolve?.

Thanks

LikeLike