1
1
import numpy as np
2
+ from .energy import Energy
2
3
3
4
4
- class SimpleDemag (object ):
5
+ class SimpleDemag (Energy ):
5
6
"""
6
7
Demagnetising field for thin films in the i-direction.
7
8
Hj = Hk = 0 and Hi = - Mi.
@@ -12,29 +13,12 @@ def __init__(self, Nx=0, Ny=0.5, Nz=0.5, name='SimpleDemag'):
12
13
field_strength is Ms by default
13
14
14
15
"""
15
-
16
+
16
17
self .Nx = Nx
17
18
self .Ny = Ny
18
19
self .Nz = Nz
19
-
20
20
self .name = name
21
21
22
- def setup (self , mesh , spin , Ms ):
23
- self .mesh = mesh
24
- self .spin = spin
25
- self .n = mesh .n
26
-
27
- self .Ms = Ms
28
- self .Ms_long = np .zeros (3 * mesh .n )
29
-
30
- self .Ms_long .shape = (3 , - 1 )
31
- for i in range (mesh .n ):
32
- self .Ms_long [:, i ] = Ms [i ]
33
-
34
- self .Ms_long .shape = (- 1 ,)
35
- self .field = np .zeros (3 * self .n )
36
- #self.field[:] = helper.init_vector(self.H0, self.mesh)
37
-
38
22
39
23
def compute_field (self , t = 0 ):
40
24
self .spin .shape = (3 ,- 1 )
@@ -49,9 +33,7 @@ def compute_field(self, t=0):
49
33
def compute_energy (self ):
50
34
51
35
mu_0 = 4 * np .pi * 1e-7
52
-
53
- sf = 0.5 * self .field * self .spin * self .Ms_long * mu_0
54
-
55
- energy = - np .sum (sf )
36
+ sf = - 0.5 * self .field * self .spin * mu_0
37
+ energy = np .sum (sf .reshape (- 1 , 3 ), axis = 1 ) * self .Ms
56
38
57
39
return energy * self .mesh .cellsize
0 commit comments