Skip to content

Commit 1b06332

Browse files
committed
Add atomistic demag to master
1 parent 303899f commit 1b06332

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

doc/ipynb/steepest_descent_atomistic.ipynb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1014,7 +1014,7 @@
10141014
"name": "python",
10151015
"nbconvert_exporter": "python",
10161016
"pygments_lexer": "ipython3",
1017-
"version": "3.6.5"
1017+
"version": "3.6.8"
10181018
}
10191019
},
10201020
"nbformat": 4,

fidimag/atomistic/demag.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,3 +94,38 @@ def compute_energy(self):
9494
self.energy /= self.scale
9595

9696
return energy / self.scale
97+
98+
99+
class DemagFMM(Energy):
100+
def __init__(self, order, ncrit, theta, name="DemagFMM", type='fmm'):
101+
self.type = type
102+
if self.type == 'fmm':
103+
self._type = 0
104+
elif self.type == 'bh':
105+
self._type = 1
106+
107+
self.name = name
108+
assert order > 0, "Order must be 1 or higher"
109+
assert order < 11, "Order bust be < 11"
110+
self.order = order
111+
assert ncrit >= 2, "ncrit must be greater than 1."
112+
self.ncrit = ncrit
113+
assert theta >= 0.0, "theta must be >= 0.0"
114+
self.theta = theta
115+
116+
def setup(self, mesh, spin, mu_s, mu_s_inv):
117+
super(DemagFMM, self).setup(mesh, spin, mu_s, mu_s_inv)
118+
self.coords = mesh.coordinates * mesh.unit_length
119+
self.m_temp = np.zeros_like(spin)
120+
self.fmm = fmm.FMM(self.n, self.ncrit, self.theta,
121+
self.order,
122+
self.coords,
123+
self.m_temp,
124+
self.mu_s, self._type
125+
)
126+
127+
def compute_field(self, t=0, spin=None):
128+
self.m_temp[:] = spin if spin is not None else self.spin
129+
self.fmm.compute_field(self.field)
130+
self.field *= -1e-7
131+
return self.field

0 commit comments

Comments
 (0)