##### 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>

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.