Please check out figure-02-ground-state.ipynb first.
In this notebook, we add computation of metastable states, and computational of the total energy.
We still focus on two points from the parameter space, as shown in the following figure:
More precisely, we are going to simulate:
The first value is the disk diameter $d$ (thickness is always $10\,\text{nm}$) and the second value is an external magnetic field $H$ applied in the out-of-plane direction.
We are going to relax the system starting from the uniform state. The function to simulate a single point in the parameter space is parameter_space_point
:
import oommfc as oc
import discretisedfield as df
%matplotlib inline
def parameter_space_point(d, B, initial_state):
"""
Expected parameters:
- d : disk diametre [in metres]
- B : applied field [in Tesla]
- initial_state: 'skyrmion' or 'uniform'"""
thickness = 10e-9
cell = (2.5e-9, 2.5e-9, 2.5e-9)
p1 = (-d/2, -d/2, -thickness/2)
p2 = (d/2, d/2, thickness/2)
mesh = oc.Mesh(p1=p1, p2=p2, cell=cell)
D = 1.58e-3
Ms = 3.84e5
A = 8.78e-12
def Ms_fun(pos):
x, y, z = pos
if x**2 + y**2 <= (d/2)**2:
return Ms
else:
return 0
def m_fun(pos):
x, y, z = pos
if x**2 + y**2 <= (d/4)**2:
return (0, 0, -1)
else:
return (0, 0, 1)
if initial_state == 'skyrmion':
value = m_fun
elif initial_state == 'uniform':
value = (0, 0, 1)
system = oc.System(name='parameter-space-point')
system.hamiltonian = oc.Exchange(A=A) + oc.DMI(D=D, crystalclass='T') + oc.Demag() + \
oc.Zeeman(H=(0, 0, B/oc.consts.mu0))
system.m = df.Field(mesh, dim=3, value=value, norm=Ms_fun)
md = oc.MinDriver()
md.drive(system, overwrite=True)
return system
system1_uniform = parameter_space_point(80e-9, 0.2, initial_state='uniform')
2019/12/01 12:50: Running OOMMF (parameter-space-point.mif) ... (1.9 s)
We plot the magnetisation in two ways:
system1_uniform.m.plane(z=0, n=(20, 20)).k3d_vectors(color_field=system1_uniform.m.z, head_size=20)
Output()
system1_uniform.m.plane(z=0, n=(20, 20)).mpl()
From the uniform initial configuratino we obtain this 'quasi-uniform' configuration, which is called 'incomplete skyrmion' in this work.
system1_skyrmion = parameter_space_point(80e-9, 0.2, initial_state='skyrmion')
2019/12/01 12:50: Running OOMMF (parameter-space-point.mif) ... (2.1 s)
The magnetisation is
system1_skyrmion.m.plane(z=0, n=(20, 20)).k3d_vectors(color_field=system1_skyrmion.m.z, head_size=20)
Output()
system1_skyrmion.m.plane(z=0, n=(20, 20)).mpl()
From a skyrmion-like configuration as the initial configuration, we obtain an skyrmion configuration after minimising the energy (i.e. an isolated skyrmion in the terminology of this work).
We conclude that for a radius of 80nm, both the "incomplete skyrmion" and the "isolated skyrmion" are meta-stable configurations. We can compare the total energy of the system, to decide which one has the lower energy (and thus is potentially the ground state):
system1_skyrmion.total_energy()
-4.73886616609e-18
system1_uniform.total_energy()
-5.76984477499e-18
We conlude that the 'incomplete skyrmion' (which we obtained starting from the uniform configuration) has the lower energy at this diametre of 80nm.
system2_uniform = parameter_space_point(160e-9, 0.3, initial_state='uniform')
2019/12/01 12:50: Running OOMMF (parameter-space-point.mif) ... (2.7 s)
We plot the magnetisation in two ways:
system2_uniform.m.plane(z=0, n=(30, 30)).k3d_vectors(color_field=system2_uniform.m.z, head_size=40)
Output()
system2_uniform.m.plane(z=0, n=(20, 20)).mpl()
From the uniform initial configuration, we obtain this 'quasi-uniform' configuration, which is called 'incomplete skyrmion' in this work.
system2_skyrmion = parameter_space_point(160e-9, 0.3, initial_state='skyrmion')
2019/12/01 12:50: Running OOMMF (parameter-space-point.mif) ... (2.6 s)
The magnetisation is
system2_skyrmion.m.plane(z=0, n=(30, 30)).k3d_vectors(color_field=system2_skyrmion.m.z, head_size=40)
Output()
system2_skyrmion.m.plane(z=0, n=(20, 20)).mpl()
From a skyrmion-like configuration as the initial configuration, we obtain an skyrmion configuration after minimising the energy (i.e. an isolated skyrmion in the terminology of this work).
We conclude that for a radius of 80nm, both the "incomplete skyrmion" and the "isolated skyrmion" are meta-stable configurations. We can compare the total energy of the system, to decide which one has the lower energy (and thus is potentially the ground state):
system2_skyrmion.total_energy()
-2.30818938003e-17
system2_uniform.total_energy()
-2.15803609004e-17
We conlude that the 'isolated skyrmion' (which we obtained starting from the skyrmion-like configuration) has the lower energy at this diametre of 160nm.
The study has tried other initial configurations (see paper for details), including random configurations, to attempt to find configurations with the lowest energy possible, but none of them had lower energies than the relaxed configurations reported here.