@@ -52,11 +52,77 @@ class DMI(Energy):
52
52
specify a dmi_vector array of length 18 * n. This array
53
53
has the dmi vector components for every NN in the order
54
54
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),
57
57
...
58
58
]
59
59
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
+
60
126
ARGUMENTS: ----------------------------------------------------------------
61
127
62
128
D :: DMI vector norm which can be specified as an int, float, (X * n)
0 commit comments