There are several different energy terms that are implemented in micromagneticmodel
. Here, we will provide a short list of them, together with some basic properties.
The main parameter required for the exchange energy is the exchange energy constant A
.
import micromagneticmodel as mm
exchange = mm.Exchange(A=1e-11)
The values of its arguments are
exchange.A
1e-11
exchange.name
'exchange'
String and LaTeX representations are
repr(exchange)
'Exchange(A=1e-11)'
exchange
zeeman = mm.Zeeman(H=(0, 0, 1e6))
The values of attributes are
zeeman.H
(0, 0, 1000000.0)
zeeman.name
'zeeman'
LaTeX representation is
repr(zeeman)
'Zeeman(H=(0, 0, 1000000.0))'
zeeman
type(zeeman.wave)
ubermagutil.typesystem.descriptors.Subset
Several different options can be used to specify a time-dependent field:
sin
and sinc
tcl
code for OOMMF
In this notebook, only the predefined functions are shown. For the other options please refer to this notebook.
Either sine or sinc wave can be used to multiply H
. For instance, in order to define a time-dependent external field, which is a sine wave with $1 \,\text{GHz}$ frequency and $t_{0} = 2\,\text{ps}$ shift.
zeeman_sin = mm.Zeeman(H=(0, 0, 1e6), func="sin", f=1e9, t0=2e-12)
LaTeX representation is:
repr(zeeman_sin)
"Zeeman(H=(0, 0, 1000000.0), f=1000000000.0, t0=2e-12, func='sin')"
Similarly, we can define a "sinc" pulse:
zeeman_sinc = mm.Zeeman(H=(0, 0, 1e6), func="sinc", f=1e9, t0=2e-12)
LaTeX representation is:
zeeman_sinc
This energy term requires the anisotropy constant $K_{1}$ and uniaxial anisotropy axis $\mathbf{u}$ to be passed. As before, name
is optional as well.
uniaxialanisotropy = mm.UniaxialAnisotropy(K=1e5, u=(0, 1, 0))
The attributes are:
uniaxialanisotropy.K
100000.0
uniaxialanisotropy.u
(0, 1, 0)
String and LaTeX representations are
repr(uniaxialanisotropy)
'UniaxialAnisotropy(K=100000.0, u=(0, 1, 0))'
uniaxialanisotropy
In order to define higher-order uniaxial anisotropy term, K1
and K2
should be passed.
uniaxialanisotropy = mm.UniaxialAnisotropy(K1=1e5, K2=1e3, u=(0, 1, 0))
uniaxialanisotropy
Demagnetisation energy does not require any input parameters. If needed, name
can be passed.
demag = mm.Demag()
The only attribute is
demag.name
'demag'
String and LaTeX representations are
repr(demag)
'Demag()'
demag
DM energy takes two mandatory input parameters: DM constant $D$ and the crystallographic class crystalclass
. The allowed crystallographic classes are
Cnv
T
or O
D2d
For Cnv
and D2d
the normal axis must also be specified. Allowed values for crystalclass
are:
Cnv_x
, Cnv_y
, or Cnv_z
D2d_x
, D2d_y
, or D2d_z
As usual, name
argument is optional.
dmi_cnv_x = mm.DMI(D=5e-3, crystalclass="Cnv_x")
dmi_cnv_y = mm.DMI(D=5e-3, crystalclass="Cnv_y")
dmi_cnv_z = mm.DMI(D=5e-3, crystalclass="Cnv_z")
dmi_t = mm.DMI(D=5e-3, crystalclass="T")
dmi_d2d_x = mm.DMI(D=5e-3, crystalclass="D2d_x")
dmi_d2d_y = mm.DMI(D=5e-3, crystalclass="D2d_y")
dmi_d2d_z = mm.DMI(D=5e-3, crystalclass="D2d_z")
Attributes are
dmi_cnv_x.D == dmi_cnv_y.D == dmi_cnv_z.D == dmi_t.D == dmi_d2d_x.D == dmi_d2d_y.D == dmi_d2d_z.D
True
dmi_cnv_x.crystalclass
'Cnv_x'
LaTeX representations are different for different crystallographic classes.
dmi_cnv_x
dmi_cnv_y
dmi_cnv_z
dmi_t
dmi_d2d_x
dmi_d2d_y
dmi_d2d_z
Cubic anisotropy energy term requires the anisotropy constant $K_{1}$ and two mutually perpendicular anisotropy axes $\mathbf{u}_{1}$ and $\mathbf{u}_{2}$. Argument name
is optional.
cubicanisotropy = mm.CubicAnisotropy(K=1e5, u1=(1, 0, 0), u2=(0, 1, 0))
The attributes are:
cubicanisotropy.K
100000.0
cubicanisotropy.u1
(1, 0, 0)
cubicanisotropy.u2
(0, 1, 0)
String and LaTeX representations are:
repr(cubicanisotropy)
'CubicAnisotropy(K=100000.0, u1=(1, 0, 0), u2=(0, 1, 0))'
cubicanisotropy
RKKY energy term requires the sigma constant $\sigma$ and optionally $\sigma_{2}$. In addition, two subregions defined in the mesh must be passed as a list.
rkky = mm.RKKY(sigma=-1e-4, subregions=["subregion1", "subregion2"])
The attributes are:
rkky.sigma
-0.0001
rkky.subregions
['subregion1', 'subregion2']
String and LaTeX representations are:
repr(rkky)
"RKKY(sigma=-0.0001, subregions=['subregion1', 'subregion2'])"
rkky
The energy equation of the micromagnetic system is the sum of energy terms. For instance, if we sum two energy terms, we get:
type(exchange + dmi_cnv_z)
micromagneticmodel.energy.energy.Energy
If we assign this value to a separate variable, we can explore some of its properties.
energy = exchange + dmi_cnv_z
The string representation is:
repr(energy)
"Exchange(A=1e-11) + DMI(D=0.005, crystalclass='Cnv_z')"
Similarly, the LaTeX representation is
energy
This Hamiltonian consists of two energy term. To add another term to it +=
operator can be used.
energy += zeeman
The Hamiltonian is now
energy
There are two ways of retrieving an individual energy term from the energy equation. Let us say we want to change the value of the Dzyaloshinkii-Moriya constant $D$.
If an energy term with name myenergy
was added to the Hamiltonian, that term can be accessed by typing energy.myenergy
. In the case of DMI:
energy.dmi
energy.dmi.D
0.005
energy.dmi.D = 5e-3
energy.dmi.D
0.005
Similarly, the exchange energy term is
energy.exchange
because we used name 'myexchange'
at the time of initialisation.
exchange.name
'exchange'