# Exercise 02: Vortex dynamics¶

Interactive online tutorial:

We want to simulate vortex dynamics in a two-dimensional disk sample with $d=100 \,\text{nm}$ diameter and $5\,\text{nm}$ thickness with:

• magnetisation saturation $M_\text{s} = 8 \times 10^{5} \,\text{A}\,\text{m}^{-1}$,
• exchange energy constant $A = 13 \,\text{pJ}\,\text{m}^{-1}$,
• gyrotropic ratio $\gamma = 2.211 \times 10^{5} \,\text{m}\,\text{A}^{-1}\,\text{s}^{-1}$, and
• Gilbert damping $\alpha=0.2$.

Please carry out the following steps:

1. Initialise the system so that $(m_{x}, m_{y}, m_{z}) = (-Ay, Ax, 10)$, where $A = 10^{9}\,\text{m}^{-1}$.
2. Minimise the system's energy. What state did you obtain?
3. Apply an external magnetic field of $H = 10^{4} \,\text{A}\,\text{m}^{-1}$ in the positive $x$ direction and relax the system. Did the vortex core move in the positive $y$ direction?
4. Turn off an external magnetic field and simulate the vortex dynamics for $t = 5 \,\text{ns}$ and save magnetisation in $n = 500$ steps. Plot all three components of magnetisation as a function of time.

## Solution¶

In [1]:
import discretisedfield as df
import micromagneticmodel as mm
import oommfc as oc
%matplotlib inline

# Geometry
d = 100e-9  # disk diameter (m)
thickness = dx = dy = dz = 5e-9  #discretisation cell (nm)

# Material (permalloy) parameters
Ms = 8e5  # saturation magnetisation (A/m)
A = 13e-12  # exchange energy constant (J/m)

# Dynamics (LLG equation) parameters
gamma0 = 2.211e5  # gyromagnetic ratio (m/As)
alpha = 0.2  # Gilbert damping

region = df.Region(p1=(-d/2, -d/2, 0), p2=(d/2, d/2, thickness))
mesh = df.Mesh(region=region, cell=(dx, dy, dz))

def Ms_fun(pos):
x, y, z = pos
if (x**2 + y**2)**0.5 < d/2:
return Ms
else:
return 0

def m_init(pos):
x, y, z = pos
A = 1e9  # (1/m)
return -A*y, A*x, 10

system = mm.System(name='vortex_dynamics')
system.energy = mm.Exchange(A=A) + mm.Demag()
system.dynamics = mm.Precession(gamma0=gamma0) + mm.Damping(alpha=alpha)
system.m = df.Field(mesh, dim=3, value=m_init, norm=Ms_fun)

md = oc.MinDriver()
md.drive(system)


Running OOMMF (ExeOOMMFRunner) [2020/06/30 13:05]... (1.9 s)

In [2]:
H = (1e4, 0, 0)
system.energy += mm.Zeeman(H=H)

md.drive(system)

Running OOMMF (ExeOOMMFRunner) [2020/06/30 13:05]... (2.4 s)

In [3]:
system.energy.zeeman.H = (0, 0, 0)

td = oc.TimeDriver()
td.drive(system, t=5e-9, n=500)

system.table.data.plot('t', ['mx', 'my', 'mz'])

Running OOMMF (ExeOOMMFRunner) [2020/06/30 13:05]... (9.6 s)

Out[3]:
<matplotlib.axes._subplots.AxesSubplot at 0x7fa0805efac0>