Skip to content

Commit 88636c3

Browse files
author
davidcorteso
committed
Added documentation for custom DMI
1 parent 43da78a commit 88636c3

File tree

1 file changed

+68
-2
lines changed

1 file changed

+68
-2
lines changed

fidimag/micro/dmi.py

Lines changed: 68 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,77 @@ class DMI(Energy):
5252
specify a dmi_vector array of length 18 * n. This array
5353
has the dmi vector components for every NN in the order
5454
55-
[D1x(-x) D1y(-x) D1z(-x) D1x(+x) D1y(+x) ... D1z(+z)
56-
D2x(-x) D2y(-x) ... D2z(+z)
55+
[D1x(-x) D1y(-x) D1z(-x) D1x(+x) D1y(+x) ... D1z(+z),
56+
D2x(-x) D2y(-x) ... D2z(+z),
5757
...
5858
]
5959
60+
The DMI field at the i-th site is specified as:
61+
62+
--- -> -> --- -> ->
63+
2 * D1 \ D1_i X m_i 2 * D2 \ D2_i X m_i
64+
H_DMI = - ------ / ---------- - ------ / ---------- - ...
65+
mu0 Ms --- 2 dx_i mu0 Ms --- 2 dx_i
66+
NN NN
67+
68+
where dx_i is the discretisation in the i-direction, m_i
69+
is the magnetisation in the i-direction.
70+
When using the `custom` option, it is necessary only to
71+
specify the D1_i, D2_i, etc components.
72+
To obtain the discretised DM vectors you can follow
73+
these steps:
74+
75+
- Obtain the DMI field from the DMI Hamiltonian
76+
- Discretise the spatial derivatives of the
77+
magnetisation, for the i-th spin. Here you obtain
78+
the mesh spacings dx_i
79+
- Group terms for every of the 6 nearest neighbours,
80+
i.e. group terms with m(+x), m(-x), etc
81+
- Write the collected terms as in the discrete spin
82+
model: D_i X m_i ; and you directly obtain the
83+
DM vectors
84+
85+
For example, for the interfacial case, where the DMI
86+
Hamiltonian reads
87+
88+
w = D * ( L_{xz}^{(x)} + L_{yz}^{(y)} )
89+
90+
the field is
91+
/ -> -> \
92+
-> - 2 D | ^ dm ^ dm |
93+
H_DMI = ---- | y X -- - x X -- |
94+
mu0 Ms \ dx dy /
95+
96+
After discretising the derivatives, you obtain
97+
98+
-> / -> -> -> ->
99+
H_DMI = - 2 D | -y X m(-x) y X m(+x)
100+
--- | ----------- + -----------
101+
mu0 Ms \ 2 dx 2 dx
102+
103+
-> -> -> -> \
104+
x X m(-y) -x X m(+y) |
105+
+ ---------- + ---------- |
106+
2 dy 2 dy /
107+
108+
where we see that the DM vector is (0, -1, 0) for the
109+
neighbour in the -x-direction, etc.
110+
Thus, we can specify the DMI in this class as:
111+
112+
# Manually set an interfacial DMI
113+
fidimag.micro.DMI([D],
114+
dmi_type='custom',
115+
dmi_vector=[0, -1., 0, # -x neighbour
116+
0, 1., 0, # +x
117+
1., 0, 0, # -y
118+
-1., 0, 0, # +y
119+
0, 0, 0, # -z NO DMI in
120+
0, 0, 0 # +z z-dir
121+
]
122+
)
123+
124+
For further examples, check the micro DMI class code
125+
60126
ARGUMENTS: ----------------------------------------------------------------
61127
62128
D :: DMI vector norm which can be specified as an int, float, (X * n)

0 commit comments

Comments
 (0)