We want to simulate a domain wall conversion in a two-dimensional thin film sample with:
Please carry out the following steps:
Create the following geometry with discretisation cell size $(2 \,\text{nm}, 2 \,\text{nm}, 2 \,\text{nm})$.
Initialise the magnetisation so that when relaxes, a domain pair is present in the narrower part of the geometry.
Relax the system. Is a domain wall pair contained in the constrained part?
Apply the spin polarised current in the positive $x$ direction with velocity $\mathbf{u} = (400, 0, 0) \,\text{m}\,\text{s}^{-1}$, with $\beta=0.5$.
Evolve the system over $0.2 \,\text{ns}$. What did you get? [1]
[1] Zhou, Y., & Ezawa, M. (2014). A reversible conversion between a skyrmion and a domain-wall pair in a junction geometry. Nature Communications 5, 8. https://doi.org/10.1038/ncomms5652
# NBVAL_IGNORE_OUTPUT
import oommfc as oc
import discretisedfield as df
import micromagneticmodel as mm
Ms = 5.8e5 # saturation magnetisation (A/m)
A = 15e-12 # exchange energy constant (J/)
D = 3e-3 # Dzyaloshinkii-Moriya energy constant (J/m**2)
K = 0.5e6 # uniaxial anisotropy constant (J/m**3)
u = (0, 0, 1) # easy axis
gamma0 = 2.211e5 # gyromagnetic ratio (m/As)
alpha = 0.3 # Gilbert damping
system = mm.System(name='dw_pair_conversion')
system.energy = mm.Exchange(A=A) + mm.DMI(D=D, crystalclass="Cnv_z") + mm.UniaxialAnisotropy(K=K, u=u)
system.dynamics = mm.Precession(gamma0=2.211e5) + mm.Damping(alpha=alpha)
p1 = (0, 0, 0)
p2 = (150e-9, 50e-9, 2e-9)
cell = (2e-9, 2e-9, 2e-9)
region = df.Region(p1=p1, p2=p2)
mesh = df.Mesh(region=region, cell=cell)
def Ms_fun(pos):
x, y, z = pos
if x < 50e-9 and (y < 15e-9 or y > 35e-9):
return 0
else:
return Ms
def m_init(pos):
x, y, z = pos
if 30e-9 < x < 40e-9:
return (0.1, 0.1, -1)
else:
return (0.1, 0.1, 1)
system.m = df.Field(mesh, dim=3, value=m_init, norm=Ms_fun)
system.m.z.plane('z').k3d.scalar(filter_field=system.m.norm)
Output()
# NBVAL_IGNORE_OUTPUT
md = oc.MinDriver()
md.drive(system)
system.m.z.plane('z').k3d.scalar(filter_field=system.m.norm)
Running OOMMF (ExeOOMMFRunner) [2021/09/22 13:57]... <1> mmarchive killed <2> mmarchive killed (1.5 s)
Output()
ux = 400 # velocity in x direction (m/s)
beta = 0.5 # non-adiabatic STT parameter
system.dynamics += mm.ZhangLi(u=ux, beta=beta)
# NBVAL_IGNORE_OUTPUT
td = oc.TimeDriver()
td.drive(system, t=0.2e-9, n=200)
system.m.z.plane('z').k3d.scalar(filter_field=system.m.norm)
Running OOMMF (ExeOOMMFRunner) [2021/09/22 13:57]... <1> mmarchive killed <2> mmarchive killed <3> mmarchive killed (5.1 s)
Output()
As a result, we got a skyrmion formed in the wider region.