## OOMMF extension for current-induced domain wall motion

## Code

The code was corrected in January 2008; be sure to download the latest version of the source files.

Class spinTEvolve is a modification of OOMMF's spinxferevolve class aimed at simulating the effect of polarized current on magnetic domain walls. It implements the two spin-current terms modifying the Landau-Lifshitz-Gilbert equation [1,2,3]. This code is distributed in the public domain.

## Installation

- Get the spintevolve-files archive.
- Copy the spintevolve.h and spintevolve.cc files into the “/app/oxs/local” directory of your current OOMMF distribution (version 1.2a4 or later).
- Recompile the OOMMF code.
- An example .mif file, dw-160-8-4-3D.mif, is
provided in the example archive for a transverse DW in a 5000×160×4 nm
^{3}nanowire. Copy all the files into a directory before launching the script.

## Theoretical background

The convention from [2] in the case where the current is aligned with the wire axis is used:

where *J* is the current density and *P* is the current polarization. **Electrons flowing toward the right means that u > 0.**

## Remarks

- From theory, the domain wall should move in the direction of propagation of the electrons. Below the so-called Walker breakdown, the initial velocity should be equal to
*u*and the terminal velocity equal to ß*u*. The code successfully reproduced these results. - This is the same model as the one proposed by Zhang et al. [1] considering |
*b*|=|_{J}*u*| and |*c*|=ß|_{J}*u*|.

The modified d*m*/d*t* is calculated in [Anv_SpinTEvolve::Calculate_dm_dt]

To calculate the time-derivative of the energy, starting with the relation

and substituting with –μ_{0} H_{eff} and **dm/dt** with equation (1), we get

**Evolver input/output (as it differs from the standard Oxs_RungeKuttaEvolve)**

*u*can be initialized as a ScalarField. Its unit is m/s. It can also be modified in time with*u_*profile in the same way as*J*with*J*_profile in the Oxs_SpinXferEvolve class. [not tested]- ß has no unit and is constant over the entire mesh (up to now, but this could be modified quite quickly).
- ave_u_output: output, average of
*u*over the entire mesh. - spin_torque_output: the part of
**dm/dt**coming from the spin-torque. Implemented in [Oxs_SpinXferEvolve::UpdateSpinTorqueOutputs] - See the example dw-160-8-4-3D.mif for usage.

**References**

[1] S. Zhang and Z. Li, Roles of nonequilibrium conduction electrons on the magnetization dynamics of ferromagnets,
*Phys. Rev. Lett.* **93**, 127204 (2004).

[2] A. Thiaville, Y. Nakatani, J. Miltat and Y. Suzuki, Micromagnetic
understanding of current-driven domain wall motion in patterned
nanowires, *Europhys. Lett.* **69**, 990 (2005).

[3] A. Vanhaverbeke and M. Viret, Simple model of current-induced
spin torque in domain walls, *Phys. Rev. B* **75**, 024411 (2007).