OOMMF extension for current-induced domain wall motion


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.


  • 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 nm3 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:

Current aligned with x

u equals J P g mu_B over 2e M_s

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


  • 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 |bJ|=|u| and |cJ|=ß|u|.

The modified dm/dt is calculated in [Anv_SpinTEvolve::Calculate_dm_dt]

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

dE over dt = partial deriv E over partial deriv t + partial deriv E over partial deriv m arrow times dm arrow over dt times M_s

and substituting partial deriv E over partial deriv m with –μ0 Heff and dm/dt with equation (1), we get

time derivative of energy

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.


[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).